#1150690 plotly: diff for NMU version 7.1.0+dfsg1-0.1

Package:
plotly
Source:
plotly
Submitter:
Francesco Ballarin
Date:
2026-10-12 10:35:25 UTC
Severity:
normal
Tags:
#1150690#5
Date:
2026-10-12 09:41:09 UTC
From:
To:
Dear maintainer,
Dear Josue,
(and Alexandre)

Following the latest messages in #1132125 (ITS),
I've prepared an NMU for plotly (versioned as 7.1.0+dfsg1-0.1) and
uploaded it to DELAYED/15.

The corresponding source code is also available at
https://salsa.debian.org/debian/plotly
with the exception of the final commit in which I make the upload to unstable:
I will push that and tag it only if the NMU is accepted.

Please feel free to tell me if I should cancel it.
Also, do tell me if I made anything wrong in the process, since it is
my first time working on a NMU/ITS.

Cheers,
Francesco

diffstat for plotly-5.20.0+dfsg plotly-7.1.0+dfsg1

 .github/FUNDING.yml                                                                  |    2
 .github/ISSUE_TEMPLATE/bug_report.md                                                 |   35
 .github/ISSUE_TEMPLATE/feature_request.md                                            |   31
 .github/actions/setup-chrome-for-pytest/action.yml                                   |   27
 .github/dependabot.yml                                                               |   53
 .github/pull_request_template.md                                                     |   30
 .github/workflows/build-doc.yml                                                      |  161
 .github/workflows/build-package.yml                                                  |   89
 .github/workflows/check-changelog.yml                                                |   32
 .github/workflows/check-codegen.yml                                                  |   49
 .github/workflows/check-formatting.yml                                               |   33
 .github/workflows/check-js-build.yml                                                 |   83
 .github/workflows/run-percy.yml                                                      |   51
 .github/workflows/run-pytest.yml                                                     |  166
 .github/workflows/test-release.yml                                                   |   76
 .gitignore                                                                           |   61
 CHANGELOG.md                                                                         | 2695
 CITATION.cff                                                                         |   15
 CODE_OF_CONDUCT.md                                                                   |   74
 CONTRIBUTING.md                                                                      |  366
 LICENSE.txt                                                                          |    4
 MANIFEST.in                                                                          |    5
 MIGRATION_GUIDE.md                                                                   |  209
 PKG-INFO                                                                             |  228
 README.md                                                                            |  123
 RELEASE.md                                                                           |  173
 SECURITY.md                                                                          |   12
 _plotly_future_/__init__.py                                                          |   78
 _plotly_utils/README.md                                                              |    7
 _plotly_utils/basevalidators.py                                                      |  450
 _plotly_utils/colors/__init__.py                                                     |   56
 _plotly_utils/colors/_swatches.py                                                    |    6
 _plotly_utils/colors/qualitative.py                                                  |    4
 _plotly_utils/colors/sequential.py                                                   |    8
 _plotly_utils/optional_imports.py                                                    |    8
 _plotly_utils/png.py                                                                 |    6
 _plotly_utils/utils.py                                                               |  121
 codegen/__init__.py                                                                  |  337
 codegen/compatibility.py                                                             |  198
 codegen/datatypes.py                                                                 |  578
 codegen/figure.py                                                                    |  772
 codegen/resources/plot-schema.json                                                   |85942 +
 codegen/utils.py                                                                     | 1315
 codegen/validators.py                                                                |  132
 commands.py                                                                          |  543
 debian/README.source                                                                 |    9
 debian/changelog                                                                     |   42
 debian/control                                                                       |   49
 debian/copyright                                                                     |   98
 debian/offline/plotly.js                                                             |447290 +++++-----
 debian/patches/00-drop-distutils.patch                                               |   64
 debian/patches/00-fix-static-files-installation.patch                                |  136
 debian/patches/01-removes-install-requires.patch                                     |   15
 debian/patches/01-tests-drop-polars.patch                                            |   88
 debian/patches/02-local-mathjax.patch                                                |   28
 debian/patches/series                                                                |    4
 debian/python3-plotly.install                                                        |    1
 debian/repack                                                                        |   84
 debian/rules                                                                         |    7
 debian/tests/control                                                                 |   12
 debian/tests/run-tests                                                               |   36
 debian/upstream/metadata                                                             |    6
 debian/watch                                                                         |   11
 doc/Makefile                                                                         |   53
 doc/README.md                                                                        |  409
 doc/apidoc/Makefile                                                                  |   45
 doc/apidoc/README.rst                                                                |    1
 doc/apidoc/_static/favicon.ico                                                       |binary
 doc/apidoc/_static/logo.png                                                          |binary
 doc/apidoc/_static/plotly-style.css                                                  |  106
 doc/apidoc/_templates/class_figure.rst                                               |   31
 doc/apidoc/_templates/function.rst                                                   |   11
 doc/apidoc/_templates/layout.html                                                    |   21
 doc/apidoc/_templates/trace.rst                                                      |   27
 doc/apidoc/basefigure.rst                                                            |    9
 doc/apidoc/conf.py                                                                   |  205
 doc/apidoc/helper_go_names.py                                                        |   36
 doc/apidoc/index.rst                                                                 |   42
 doc/apidoc/plotly.express.rst                                                        |   65
 doc/apidoc/plotly.figure_factory.rst                                                 |   19
 doc/apidoc/plotly.graph_objects.rst                                                  |  125
 doc/apidoc/plotly.io.rst                                                             |   27
 doc/apidoc/plotly.subplots.rst                                                       |   16
 doc/nb.tpl                                                                           |   22
 doc/next_redirect.tpl                                                                |    5
 doc/python/2D-Histogram.md                                                           |  271
 doc/python/2d-histogram-contour.md                                                   |  252
 doc/python/3d-axes.md                                                                |  274
 doc/python/3d-bubble-charts.md                                                       |  221
 doc/python/3d-camera-controls.md                                                     |  293
 doc/python/3d-isosurface-plots.md                                                    |  238
 doc/python/3d-line-plots.md                                                          |  121
 doc/python/3d-mesh.md                                                                |  185
 doc/python/3d-scatter-plots.md                                                       |  143
 doc/python/3d-subplots.md                                                            |   85
 doc/python/3d-surface-plots.md                                                       |  199
 doc/python/3d-volume.md                                                              |  260
 doc/python/LaTeX.md                                                                  |   70
 doc/python/animations.md                                                             |  394
 doc/python/annotated-heatmap.md                                                      |  181
 doc/python/axes.md                                                                   | 1028
 doc/python/bar-charts.md                                                             |  893
 doc/python/bio-alignment-chart.md                                                    |   63
 doc/python/bio-clustergram.md                                                        |  107
 doc/python/bio-manhattanplot.md                                                      |   76
 doc/python/bio-volcano-plot.md                                                       |   76
 doc/python/box-plots.md                                                              |  524
 doc/python/bubble-charts.md                                                          |  225
 doc/python/bubble-maps.md                                                            |  211
 doc/python/builtin-colorscales.md                                                    |  143
 doc/python/bullet-charts.md                                                          |  174
 doc/python/candlestick-charts.md                                                     |  168
 doc/python/carpet-contour.md                                                         |  290
 doc/python/carpet-plot.md                                                            |  192
 doc/python/carpet-scatter.md                                                         |  189
 doc/python/categorical-axes.md                                                       |  222
 doc/python/choropleth-maps.md                                                        |  354
 doc/python/click-events.md                                                           |   85
 doc/python/colorscales.md                                                            |  673
 doc/python/cone-plot.md                                                              |  168
 doc/python/configuration-options.md                                                  |  388
 doc/python/continuous-error-bars.md                                                  |  116
 doc/python/contour-plots.md                                                          |  345
 doc/python/creating-and-updating-figures.md                                          |  675
 doc/python/custom-buttons.md                                                         |  471
 doc/python/dash.md                                                                   |   35
 doc/python/dendrogram.md                                                             |  180
 doc/python/density-heatmaps.md                                                       |   74
 doc/python/discrete-color.md                                                         |  259
 doc/python/distplot.md                                                               |   74
 doc/python/dot-plots.md                                                              |  182
 doc/python/dropdowns.md                                                              |  547
 doc/python/dumbbell-plots.md                                                         |  200
 doc/python/ecdf-plots.md                                                             |  182
 doc/python/error-bars.md                                                             |  205
 doc/python/facet-plots.md                                                            |  251
 doc/python/figure-factories.md                                                       |   67
 doc/python/figure-factory-subplots.md                                                |  214
 doc/python/figure-factory-table.md                                                   |  281
 doc/python/figure-introspection.md                                                   |  175
 doc/python/figure-labels.md                                                          |  307
 doc/python/figure-structure.md                                                       |  229
 doc/python/figurewidget-app.md                                                       |  165
 doc/python/figurewidget.md                                                           |  118
 doc/python/filled-area-plots.md                                                      |  284
 doc/python/filled-area-tile-maps.md                                                  |  140
 doc/python/funnel-charts.md                                                          |  227
 doc/python/gantt.md                                                                  |  111
 doc/python/gauge-charts.md                                                           |  113
 doc/python/getting-started.md                                                        |  215
 doc/python/graph-objects.md                                                          |  109
 doc/python/graphing-multiple-chart-types.md                                          |  248
 doc/python/heatmaps.md                                                               |  296
 doc/python/hexbin-map.md                                                             |  159
 doc/python/histograms.md                                                             |  511
 doc/python/horizontal-bar-charts.md                                                  |  450
 doc/python/horizontal-vertical-shapes.md                                             |  186
 doc/python/hover-text-and-formatting.md                                              |  625
 doc/python/icicle-charts.md                                                          |  546
 doc/python/images.md                                                                 |  400
 doc/python/imshow.md                                                                 |  507
 doc/python/indicator.md                                                              |  236
 doc/python/interactive-html-export.md                                                |  153
 doc/python/ipython-vs-python.md                                                      |   66
 doc/python/jupyter-lab-tools.md                                                      |   54
 doc/python/legend.md                                                                 |  913
 doc/python/line-and-scatter.md                                                       |  657
 doc/python/line-charts.md                                                            |  525
 doc/python/linear-fits.md                                                            |  226
 doc/python/lines-on-maps.md                                                          |  332
 doc/python/lines-on-tile-maps.md                                                     |  134
 doc/python/location-mode.md                                                          |  487
 doc/python/log-plot.md                                                               |  151
 doc/python/map-configuration.md                                                      |  251
 doc/python/map-subplots-and-small-multiples.md                                       |  166
 doc/python/marginal-plots.md                                                         |  143
 doc/python/marker-style.md                                                           |  585
 doc/python/migrate-to-maplibre.md                                                    |   78
 doc/python/mixed-subplots.md                                                         |  126
 doc/python/ml-knn.md                                                                 |  342
 doc/python/ml-pca.md                                                                 |  277
 doc/python/ml-regression.md                                                          |  566
 doc/python/ml-roc-pr.md                                                              |  312
 doc/python/ml-tsne-umap-projections.md                                               |  179
 doc/python/ml_apps.md                                                                |   35
 doc/python/multiple-axes.md                                                          |  446
 doc/python/network-graphs.md                                                         |  174
 doc/python/ohlc-charts.md                                                            |  160
 doc/python/orca-management.md                                                        |   36
 doc/python/pandas-backend.md                                                         |  200
 doc/python/parallel-categories-diagram.md                                            |  291
 doc/python/parallel-coordinates-plot.md                                              |  209
 doc/python/pattern-hatching-texture.md                                               |  204
 doc/python/peak-finding.md                                                           |  136
 doc/python/performance.md                                                            |  315
 doc/python/pie-charts.md                                                             |  352
 doc/python/plot-data-from-csv.md                                                     |   96
 doc/python/plotly-express.md                                                         |  499
 doc/python/polar-chart.md                                                            |  441
 doc/python/px-arguments.md                                                           |  277
 doc/python/quiver-plots.md                                                           |  217
 doc/python/radar-chart.md                                                            |  132
 doc/python/random-walk.md                                                            |  165
 doc/python/range-slider.md                                                           |  365
 doc/python/renderers.md                                                              |  276
 doc/python/sankey-diagram.md                                                         |  366
 doc/python/scatter-plots-on-maps.md                                                  |  241
 doc/python/selections.md                                                             |  312
 doc/python/setting-graph-size.md                                                     |  219
 doc/python/shapes.md                                                                 | 1302
 doc/python/sliders.md                                                                |  108
 doc/python/smith-charts.md                                                           |   98
 doc/python/smoothing.md                                                              |  185
 doc/python/splom.md                                                                  |  368
 doc/python/static-image-export.md                                                    |  302
 doc/python/static-image-generation-migration.md                                      |   81
 doc/python/streamline-plots.md                                                       |  109
 doc/python/streamtube-plot.md                                                        |  133
 doc/python/strip-charts.md                                                           |   64
 doc/python/styling-plotly-express.md                                                 |  186
 doc/python/subplots.md                                                               |  650
 doc/python/sunburst-charts.md                                                        |  416
 doc/python/supported-colors.md                                                       |  159
 doc/python/table-subplots.md                                                         |  107
 doc/python/table.md                                                                  |  240
 doc/python/templates.md                                                              |  478
 doc/python/ternary-contour.md                                                        |  153
 doc/python/ternary-plots.md                                                          |  128
 doc/python/ternary-scatter-contour.md                                                |  155
 doc/python/text-and-annotations.md                                                   |  923
 doc/python/tick-formatting.md                                                        |  214
 doc/python/tile-county-choropleth.md                                                 |  224
 doc/python/tile-map-layers.md                                                        |  250
 doc/python/tile-scatter-maps.md                                                      |  326
 doc/python/time-series.md                                                            |  492
 doc/python/tree-plots.md                                                             |  140
 doc/python/treemaps.md                                                               |  451
 doc/python/trisurf.md                                                                |  131
 doc/python/troubleshooting.md                                                        |   92
 doc/python/v4-migration.md                                                           |  294
 doc/python/v6-changes.md                                                             |  144
 doc/python/v7-changes.md                                                             |  206
 doc/python/violin.md                                                                 |  301
 doc/python/waterfall-charts.md                                                       |  132
 doc/python/wide-form.md                                                              |  317
 doc/python/wind-rose-charts.md                                                       |   94
 doc/requirements.txt                                                                 |   47
 doc/unconverted/python/1d-correlation.md                                             |  167
 doc/unconverted/python/2d-projection-of-3d-surface.md                                |  202
 doc/unconverted/python/3d-filled-line-plots.md                                       |  126
 doc/unconverted/python/3d-network-graph.md                                           |  212
 doc/unconverted/python/3d-parametric-plots.md                                        |  164
 doc/unconverted/python/3d-point-clustering.md                                        |  100
 doc/unconverted/python/3d-wireframe-plots.md                                         |  113
 doc/unconverted/python/amazon-redshift.md                                            |  432
 doc/unconverted/python/anova.md                                                      |  136
 doc/unconverted/python/apache-spark.md                                               |  290
 doc/unconverted/python/average_multiple_curves.md                                    |  112
 doc/unconverted/python/baseline-detection.md                                         |  113
 doc/unconverted/python/baseline-subtraction.md                                       |  145
 doc/unconverted/python/basic-statistics.md                                           |  174
 doc/unconverted/python/big-data-analytics-with-pandas-and-sqlite.md                  |  468
 doc/unconverted/python/cars-exploration.md                                           |  384
 doc/unconverted/python/change-callbacks-datashader.md                                |  208
 doc/unconverted/python/chord-diagram.md                                              |  325
 doc/unconverted/python/cmocean-colorscales.md                                        |  252
 doc/unconverted/python/convolution.md                                                |  127
 doc/unconverted/python/create-online-dashboard-legacy.md                             |  409
 doc/unconverted/python/discrete-frequency.md                                         |  153
 doc/unconverted/python/exponential-fits.md                                           |  126
 doc/unconverted/python/fft-filters.md                                                |  236
 doc/unconverted/python/filled-area-animation.md                                      |  155
 doc/unconverted/python/filled-chord-diagram.md                                       |  625
 doc/unconverted/python/frequency-counts.md                                           |  118
 doc/unconverted/python/gapminder-example.md                                          |  342
 doc/unconverted/python/google_big_query.md                                           |  540
 doc/unconverted/python/graph-data-from-mysql-database-in-python.md                   |  211
 doc/unconverted/python/heatmap-animation.md                                          |  182
 doc/unconverted/python/html-reports.md                                               |  303
 doc/unconverted/python/igraph-networkx-comparison.md                                 |  212
 doc/unconverted/python/insets.md                                                     |   89
 doc/unconverted/python/interact-decorator.md                                         |   99
 doc/unconverted/python/interpolation-and-extrapolation-in-1d.md                      |  175
 doc/unconverted/python/interpolation-and-extrapolation-in-2d.md                      |  125
 doc/unconverted/python/legacy-polar-chart.md                                         |  309
 doc/unconverted/python/linear-algebra.md                                             |  192
 doc/unconverted/python/linear-gauge-chart.md                                         |  167
 doc/unconverted/python/logos.md                                                      |  210
 doc/unconverted/python/matplotlib-colorscales.md                                     |  201
 doc/unconverted/python/normality-test.md                                             |  387
 doc/unconverted/python/normalization.md                                              |  166
 doc/unconverted/python/numerical-differentiation.md                                  |   95
 doc/unconverted/python/numerical-integration.md                                      |   99
 doc/unconverted/python/outlier-test.md                                               |  171
 doc/unconverted/python/pdf-reports.md                                                |  194
 doc/unconverted/python/peak-fitting.md                                               |  200
 doc/unconverted/python/peak-integration.md                                           |  159
 doc/unconverted/python/polygon-area.md                                               |  189
 doc/unconverted/python/polynomial-fits.md                                            |  127
 doc/unconverted/python/population-pyramid-charts.md                                  |  198
 doc/unconverted/python/ribbon-plots.md                                               |   95
 doc/unconverted/python/salesforce.md                                                 |  243
 doc/unconverted/python/simple-mathematics-operations.md                              |  170
 doc/unconverted/python/statistics-charts.md                                          |  129
 doc/unconverted/python/streaming-tutorial.md                                         |  191
 doc/unconverted/python/surface-triangulation.md                                      |  369
 doc/unconverted/python/t-test.md                                                     |  157
 doc/unconverted/python/tesla-supercharging-stations.md                               |  211
 doc/unconverted/python/triangulation.md                                              |  363
 doc/unconverted/python/userguide.md                                                  |   88
 doc/unconverted/python/webgl-text-and-annotations.md                                 |  100
 doc/what_about_dash.md                                                               |   27
 environment.yml                                                                      |   22
 js/install.json                                                                      |    4
 js/lib/mimeExtension.js                                                              | 3606
 js/package-lock.json                                                                 | 4840
 js/package.json                                                                      |   36
 js/src/mimeExtension.ts                                                              |  248
 js/src/widget.ts                                                                     | 2076
 js/tsconfig.json                                                                     |   11
 js/webpack.config.js                                                                 |   10
 jupyterlab-plotly.json                                                               |    5
 plotly.egg-info/PKG-INFO                                                             |  228
 plotly.egg-info/SOURCES.txt                                                          |12413
 plotly.egg-info/dependency_links.txt                                                 |    1
 plotly.egg-info/not-zip-safe                                                         |    1
 plotly.egg-info/requires.txt                                                         |    2
 plotly.egg-info/top_level.txt                                                        |    4
 plotly/__init__.py                                                                   |   36
 plotly/_subplots.py                                                                  |  122
 plotly/_version.py                                                                   |   21
 plotly/_widget_version.py                                                            |    5
 plotly/basedatatypes.py                                                              |  281
 plotly/basewidget.py                                                                 |   59
 plotly/callbacks.py                                                                  |   10
 plotly/colors/__init__.py                                                            |    4
 plotly/config.py                                                                     |    3
 plotly/conftest.py                                                                   |   24
 plotly/dashboard_objs.py                                                             |    3
 plotly/data/__init__.py                                                              |  388
 plotly/exceptions.py                                                                 |    2
 plotly/express/__init__.py                                                           |   37
 plotly/express/_chart_types.py                                                       |  122
 plotly/express/_core.py                                                              | 1253
 plotly/express/_doc.py                                                               |   37
 plotly/express/_imshow.py                                                            |  122
 plotly/express/colors/__init__.py                                                    |    3
 plotly/express/data/__init__.py                                                      |    6
 plotly/express/imshow_utils.py                                                       |    2
 plotly/express/trendline_functions/__init__.py                                       |   21
 plotly/figure_factory/README.md                                                      |  175
 plotly/figure_factory/_2d_density.py                                                 |  155
 plotly/figure_factory/__init__.py                                                    |   35
 plotly/figure_factory/_annotated_heatmap.py                                          |  309
 plotly/figure_factory/_bullet.py                                                     |  366
 plotly/figure_factory/_candlestick.py                                                |  277
 plotly/figure_factory/_county_choropleth.py                                          | 1014
 plotly/figure_factory/_dendrogram.py                                                 |    2
 plotly/figure_factory/_distplot.py                                                   |  447
 plotly/figure_factory/_facet_grid.py                                                 | 1198
 plotly/figure_factory/_gantt.py                                                      | 1034
 plotly/figure_factory/_hexbin_map.py                                                 |  529
 plotly/figure_factory/_hexbin_mapbox.py                                              |  492
 plotly/figure_factory/_ohlc.py                                                       |  295
 plotly/figure_factory/_scatterplot.py                                                | 1135
 plotly/figure_factory/_streamline.py                                                 |    8
 plotly/figure_factory/_table.py                                                      |    3
 plotly/figure_factory/_ternary_contour.py                                            |   15
 plotly/figure_factory/_trisurf.py                                                    |    8
 plotly/figure_factory/_violin.py                                                     |  710
 plotly/figure_factory/utils.py                                                       |   32
 plotly/files.py                                                                      |    2
 plotly/graph_objects/__init__.py                                                     |   47
 plotly/graph_objs/__init__.py                                                        |   46
 plotly/graph_objs/_bar.py                                                            | 1493
 plotly/graph_objs/_barpolar.py                                                       |  957
 plotly/graph_objs/_box.py                                                            | 1389
 plotly/graph_objs/_candlestick.py                                                    |  999
 plotly/graph_objs/_carpet.py                                                         | 1116
 plotly/graph_objs/_choropleth.py                                                     | 1147
 plotly/graph_objs/_choroplethmap.py                                                  | 1520
 plotly/graph_objs/_choroplethmapbox.py                                               | 2377
 plotly/graph_objs/_cone.py                                                           | 1397
 plotly/graph_objs/_contour.py                                                        | 1584
 plotly/graph_objs/_contourcarpet.py                                                  | 1178
 plotly/graph_objs/_densitymap.py                                                     | 1442
 plotly/graph_objs/_densitymapbox.py                                                  | 2318
 plotly/graph_objs/_deprecations.py                                                   |   76
 plotly/graph_objs/_figure.py                                                         | 6094
 plotly/graph_objs/_figurewidget.py                                                   | 6096
 plotly/graph_objs/_frame.py                                                          |   71
 plotly/graph_objs/_funnel.py                                                         | 1253
 plotly/graph_objs/_funnelarea.py                                                     |  996
 plotly/graph_objs/_heatmap.py                                                        | 1443
 plotly/graph_objs/_heatmapgl.py                                                      | 2212
 plotly/graph_objs/_histogram.py                                                      | 1435
 plotly/graph_objs/_histogram2d.py                                                    | 1394
 plotly/graph_objs/_histogram2dcontour.py                                             | 1491
 plotly/graph_objs/_icicle.py                                                         | 1164
 plotly/graph_objs/_image.py                                                          |  715
 plotly/graph_objs/_indicator.py                                                      |  426
 plotly/graph_objs/_isosurface.py                                                     | 1388
 plotly/graph_objs/_layout.py                                                         | 4166
 plotly/graph_objs/_mesh3d.py                                                         | 1570
 plotly/graph_objs/_ohlc.py                                                           |  988
 plotly/graph_objs/_parcats.py                                                        |  655
 plotly/graph_objs/_parcoords.py                                                      |  599
 plotly/graph_objs/_pie.py                                                            | 1346
 plotly/graph_objs/_pointcloud.py                                                     | 1618
 plotly/graph_objs/_quiver.py                                                         | 1623
 plotly/graph_objs/_sankey.py                                                         |  669
 plotly/graph_objs/_scatter.py                                                        | 1577
 plotly/graph_objs/_scatter3d.py                                                      | 1459
 plotly/graph_objs/_scattercarpet.py                                                  | 1242
 plotly/graph_objs/_scattergeo.py                                                     | 1200
 plotly/graph_objs/_scattergl.py                                                      | 1359
 plotly/graph_objs/_scattermap.py                                                     | 1506
 plotly/graph_objs/_scattermapbox.py                                                  | 2270
 plotly/graph_objs/_scatterpolar.py                                                   | 1201
 plotly/graph_objs/_scatterpolargl.py                                                 | 1139
 plotly/graph_objs/_scattersmith.py                                                   | 1166
 plotly/graph_objs/_scatterternary.py                                                 | 1248
 plotly/graph_objs/_splom.py                                                          |  880
 plotly/graph_objs/_streamtube.py                                                     | 1337
 plotly/graph_objs/_sunburst.py                                                       | 1119
 plotly/graph_objs/_surface.py                                                        | 1300
 plotly/graph_objs/_table.py                                                          |  577
 plotly/graph_objs/_treemap.py                                                        | 1175
 plotly/graph_objs/_violin.py                                                         | 1032
 plotly/graph_objs/_volume.py                                                         | 1393
 plotly/graph_objs/_waterfall.py                                                      | 1298
 plotly/graph_objs/bar/__init__.py                                                    |    4
 plotly/graph_objs/bar/_error_x.py                                                    |  266
 plotly/graph_objs/bar/_error_y.py                                                    |  255
 plotly/graph_objs/bar/_hoverlabel.py                                                 |  345
 plotly/graph_objs/bar/_insidetextfont.py                                             |  405
 plotly/graph_objs/bar/_legendgrouptitle.py                                           |   66
 plotly/graph_objs/bar/_marker.py                                                     |  711
 plotly/graph_objs/bar/_outsidetextfont.py                                            |  405
 plotly/graph_objs/bar/_selected.py                                                   |   55
 plotly/graph_objs/bar/_stream.py                                                     |  140
 plotly/graph_objs/bar/_textfont.py                                                   |  405
 plotly/graph_objs/bar/_unselected.py                                                 |   58
 plotly/graph_objs/bar/hoverlabel/__init__.py                                         |    2
 plotly/graph_objs/bar/hoverlabel/_font.py                                            |  405
 plotly/graph_objs/bar/legendgrouptitle/__init__.py                                   |    2
 plotly/graph_objs/bar/legendgrouptitle/_font.py                                      |  351
 plotly/graph_objs/bar/marker/__init__.py                                             |    2
 plotly/graph_objs/bar/marker/_colorbar.py                                            |  869
 plotly/graph_objs/bar/marker/_line.py                                                |  244
 plotly/graph_objs/bar/marker/_pattern.py                                             |  379
 plotly/graph_objs/bar/marker/colorbar/__init__.py                                    |    2
 plotly/graph_objs/bar/marker/colorbar/_tickfont.py                                   |  351
 plotly/graph_objs/bar/marker/colorbar/_tickformatstop.py                             |   68
 plotly/graph_objs/bar/marker/colorbar/_title.py                                      |  116
 plotly/graph_objs/bar/marker/colorbar/title/__init__.py                              |    2
 plotly/graph_objs/bar/marker/colorbar/title/_font.py                                 |  354
 plotly/graph_objs/bar/selected/__init__.py                                           |    2
 plotly/graph_objs/bar/selected/_marker.py                                            |   96
 plotly/graph_objs/bar/selected/_textfont.py                                          |   89
 plotly/graph_objs/bar/unselected/__init__.py                                         |    2
 plotly/graph_objs/bar/unselected/_marker.py                                          |   96
 plotly/graph_objs/bar/unselected/_textfont.py                                        |   89
 plotly/graph_objs/barpolar/__init__.py                                               |    4
 plotly/graph_objs/barpolar/_hoverlabel.py                                            |  345
 plotly/graph_objs/barpolar/_legendgrouptitle.py                                      |   66
 plotly/graph_objs/barpolar/_marker.py                                                |  705
 plotly/graph_objs/barpolar/_selected.py                                              |   55
 plotly/graph_objs/barpolar/_stream.py                                                |  141
 plotly/graph_objs/barpolar/_unselected.py                                            |   58
 plotly/graph_objs/barpolar/hoverlabel/__init__.py                                    |    2
 plotly/graph_objs/barpolar/hoverlabel/_font.py                                       |  405
 plotly/graph_objs/barpolar/legendgrouptitle/__init__.py                              |    2
 plotly/graph_objs/barpolar/legendgrouptitle/_font.py                                 |  351
 plotly/graph_objs/barpolar/marker/__init__.py                                        |    2
 plotly/graph_objs/barpolar/marker/_colorbar.py                                       |  870
 plotly/graph_objs/barpolar/marker/_line.py                                           |  244
 plotly/graph_objs/barpolar/marker/_pattern.py                                        |  379
 plotly/graph_objs/barpolar/marker/colorbar/__init__.py                               |    2
 plotly/graph_objs/barpolar/marker/colorbar/_tickfont.py                              |  351
 plotly/graph_objs/barpolar/marker/colorbar/_tickformatstop.py                        |   68
 plotly/graph_objs/barpolar/marker/colorbar/_title.py                                 |  116
 plotly/graph_objs/barpolar/marker/colorbar/title/__init__.py                         |    2
 plotly/graph_objs/barpolar/marker/colorbar/title/_font.py                            |  354
 plotly/graph_objs/barpolar/selected/__init__.py                                      |    2
 plotly/graph_objs/barpolar/selected/_marker.py                                       |   96
 plotly/graph_objs/barpolar/selected/_textfont.py                                     |   89
 plotly/graph_objs/barpolar/unselected/__init__.py                                    |    2
 plotly/graph_objs/barpolar/unselected/_marker.py                                     |   96
 plotly/graph_objs/barpolar/unselected/_textfont.py                                   |   89
 plotly/graph_objs/box/__init__.py                                                    |    4
 plotly/graph_objs/box/_hoverlabel.py                                                 |  345
 plotly/graph_objs/box/_legendgrouptitle.py                                           |   66
 plotly/graph_objs/box/_line.py                                                       |   96
 plotly/graph_objs/box/_marker.py                                                     |  203
 plotly/graph_objs/box/_selected.py                                                   |   45
 plotly/graph_objs/box/_stream.py                                                     |  140
 plotly/graph_objs/box/_unselected.py                                                 |   48
 plotly/graph_objs/box/hoverlabel/__init__.py                                         |    2
 plotly/graph_objs/box/hoverlabel/_font.py                                            |  405
 plotly/graph_objs/box/legendgrouptitle/__init__.py                                   |    2
 plotly/graph_objs/box/legendgrouptitle/_font.py                                      |  351
 plotly/graph_objs/box/marker/__init__.py                                             |    2
 plotly/graph_objs/box/marker/_line.py                                                |  163
 plotly/graph_objs/box/selected/__init__.py                                           |    2
 plotly/graph_objs/box/selected/_marker.py                                            |  103
 plotly/graph_objs/box/unselected/__init__.py                                         |    2
 plotly/graph_objs/box/unselected/_marker.py                                          |  103
 plotly/graph_objs/candlestick/__init__.py                                            |    4
 plotly/graph_objs/candlestick/_decreasing.py                                         |  104
 plotly/graph_objs/candlestick/_hoverlabel.py                                         |  367
 plotly/graph_objs/candlestick/_increasing.py                                         |  104
 plotly/graph_objs/candlestick/_legendgrouptitle.py                                   |   66
 plotly/graph_objs/candlestick/_line.py                                               |   36
 plotly/graph_objs/candlestick/_stream.py                                             |  141
 plotly/graph_objs/candlestick/decreasing/__init__.py                                 |    2
 plotly/graph_objs/candlestick/decreasing/_line.py                                    |   96
 plotly/graph_objs/candlestick/hoverlabel/__init__.py                                 |    2
 plotly/graph_objs/candlestick/hoverlabel/_font.py                                    |  405
 plotly/graph_objs/candlestick/increasing/__init__.py                                 |    2
 plotly/graph_objs/candlestick/increasing/_line.py                                    |   96
 plotly/graph_objs/candlestick/legendgrouptitle/__init__.py                           |    2
 plotly/graph_objs/candlestick/legendgrouptitle/_font.py                              |  351
 plotly/graph_objs/carpet/__init__.py                                                 |    4
 plotly/graph_objs/carpet/_aaxis.py                                                   | 1060
 plotly/graph_objs/carpet/_baxis.py                                                   | 1060
 plotly/graph_objs/carpet/_font.py                                                    |  351
 plotly/graph_objs/carpet/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/carpet/_stream.py                                                  |  140
 plotly/graph_objs/carpet/aaxis/__init__.py                                           |    2
 plotly/graph_objs/carpet/aaxis/_tickfont.py                                          |  351
 plotly/graph_objs/carpet/aaxis/_tickformatstop.py                                    |   68
 plotly/graph_objs/carpet/aaxis/_title.py                                             |  109
 plotly/graph_objs/carpet/aaxis/title/__init__.py                                     |    2
 plotly/graph_objs/carpet/aaxis/title/_font.py                                        |  354
 plotly/graph_objs/carpet/baxis/__init__.py                                           |    2
 plotly/graph_objs/carpet/baxis/_tickfont.py                                          |  351
 plotly/graph_objs/carpet/baxis/_tickformatstop.py                                    |   68
 plotly/graph_objs/carpet/baxis/_title.py                                             |  109
 plotly/graph_objs/carpet/baxis/title/__init__.py                                     |    2
 plotly/graph_objs/carpet/baxis/title/_font.py                                        |  354
 plotly/graph_objs/carpet/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/carpet/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/choropleth/__init__.py                                             |    4
 plotly/graph_objs/choropleth/_colorbar.py                                            |  869
 plotly/graph_objs/choropleth/_hoverlabel.py                                          |  345
 plotly/graph_objs/choropleth/_legendgrouptitle.py                                    |   66
 plotly/graph_objs/choropleth/_marker.py                                              |   96
 plotly/graph_objs/choropleth/_selected.py                                            |   41
 plotly/graph_objs/choropleth/_stream.py                                              |  141
 plotly/graph_objs/choropleth/_unselected.py                                          |   42
 plotly/graph_objs/choropleth/colorbar/__init__.py                                    |    2
 plotly/graph_objs/choropleth/colorbar/_tickfont.py                                   |  351
 plotly/graph_objs/choropleth/colorbar/_tickformatstop.py                             |   68
 plotly/graph_objs/choropleth/colorbar/_title.py                                      |  116
 plotly/graph_objs/choropleth/colorbar/title/__init__.py                              |    2
 plotly/graph_objs/choropleth/colorbar/title/_font.py                                 |  354
 plotly/graph_objs/choropleth/hoverlabel/__init__.py                                  |    2
 plotly/graph_objs/choropleth/hoverlabel/_font.py                                     |  405
 plotly/graph_objs/choropleth/legendgrouptitle/__init__.py                            |    2
 plotly/graph_objs/choropleth/legendgrouptitle/_font.py                               |  351
 plotly/graph_objs/choropleth/marker/__init__.py                                      |    2
 plotly/graph_objs/choropleth/marker/_line.py                                         |  162
 plotly/graph_objs/choropleth/selected/__init__.py                                    |    2
 plotly/graph_objs/choropleth/selected/_marker.py                                     |   36
 plotly/graph_objs/choropleth/unselected/__init__.py                                  |    2
 plotly/graph_objs/choropleth/unselected/_marker.py                                   |   36
 plotly/graph_objs/choroplethmap/__init__.py                                          |   38
 plotly/graph_objs/choroplethmap/_colorbar.py                                         | 1709
 plotly/graph_objs/choroplethmap/_hoverlabel.py                                       |  268
 plotly/graph_objs/choroplethmap/_legendgrouptitle.py                                 |  104
 plotly/graph_objs/choroplethmap/_marker.py                                           |  104
 plotly/graph_objs/choroplethmap/_selected.py                                         |   80
 plotly/graph_objs/choroplethmap/_unselected.py                                       |   80
 plotly/graph_objs/choroplethmap/colorbar/__init__.py                                 |   16
 plotly/graph_objs/choroplethmap/colorbar/_tickfont.py                                |  340
 plotly/graph_objs/choroplethmap/colorbar/_tickformatstop.py                          |  241
 plotly/graph_objs/choroplethmap/colorbar/_title.py                                   |  136
 plotly/graph_objs/choroplethmap/colorbar/title/__init__.py                           |    9
 plotly/graph_objs/choroplethmap/colorbar/title/_font.py                              |  340
 plotly/graph_objs/choroplethmap/hoverlabel/__init__.py                               |    9
 plotly/graph_objs/choroplethmap/hoverlabel/_font.py                                  |  349
 plotly/graph_objs/choroplethmap/legendgrouptitle/__init__.py                         |    9
 plotly/graph_objs/choroplethmap/legendgrouptitle/_font.py                            |  340
 plotly/graph_objs/choroplethmap/marker/__init__.py                                   |    9
 plotly/graph_objs/choroplethmap/marker/_line.py                                      |  125
 plotly/graph_objs/choroplethmap/selected/__init__.py                                 |    9
 plotly/graph_objs/choroplethmap/selected/_marker.py                                  |   77
 plotly/graph_objs/choroplethmap/unselected/__init__.py                               |    9
 plotly/graph_objs/choroplethmap/unselected/_marker.py                                |   80
 plotly/graph_objs/choroplethmapbox/__init__.py                                       |   40
 plotly/graph_objs/choroplethmapbox/_colorbar.py                                      | 2325
 plotly/graph_objs/choroplethmapbox/_hoverlabel.py                                    |  503
 plotly/graph_objs/choroplethmapbox/_legendgrouptitle.py                              |  154
 plotly/graph_objs/choroplethmapbox/_marker.py                                        |  180
 plotly/graph_objs/choroplethmapbox/_selected.py                                      |  107
 plotly/graph_objs/choroplethmapbox/_stream.py                                        |  141
 plotly/graph_objs/choroplethmapbox/_unselected.py                                    |  108
 plotly/graph_objs/choroplethmapbox/colorbar/__init__.py                              |   16
 plotly/graph_objs/choroplethmapbox/colorbar/_tickfont.py                             |  227
 plotly/graph_objs/choroplethmapbox/colorbar/_tickformatstop.py                       |  283
 plotly/graph_objs/choroplethmapbox/colorbar/_title.py                                |  210
 plotly/graph_objs/choroplethmapbox/colorbar/title/__init__.py                        |    9
 plotly/graph_objs/choroplethmapbox/colorbar/title/_font.py                           |  228
 plotly/graph_objs/choroplethmapbox/hoverlabel/__init__.py                            |    9
 plotly/graph_objs/choroplethmapbox/hoverlabel/_font.py                               |  330
 plotly/graph_objs/choroplethmapbox/legendgrouptitle/__init__.py                      |    9
 plotly/graph_objs/choroplethmapbox/legendgrouptitle/_font.py                         |  227
 plotly/graph_objs/choroplethmapbox/marker/__init__.py                                |    9
 plotly/graph_objs/choroplethmapbox/marker/_line.py                                   |  243
 plotly/graph_objs/choroplethmapbox/selected/__init__.py                              |    9
 plotly/graph_objs/choroplethmapbox/selected/_marker.py                               |   99
 plotly/graph_objs/choroplethmapbox/unselected/__init__.py                            |    9
 plotly/graph_objs/choroplethmapbox/unselected/_marker.py                             |  102
 plotly/graph_objs/cone/__init__.py                                                   |    4
 plotly/graph_objs/cone/_colorbar.py                                                  |  869
 plotly/graph_objs/cone/_hoverlabel.py                                                |  345
 plotly/graph_objs/cone/_legendgrouptitle.py                                          |   66
 plotly/graph_objs/cone/_lighting.py                                                  |   78
 plotly/graph_objs/cone/_lightposition.py                                             |   50
 plotly/graph_objs/cone/_stream.py                                                    |  140
 plotly/graph_objs/cone/colorbar/__init__.py                                          |    2
 plotly/graph_objs/cone/colorbar/_tickfont.py                                         |  351
 plotly/graph_objs/cone/colorbar/_tickformatstop.py                                   |   68
 plotly/graph_objs/cone/colorbar/_title.py                                            |  116
 plotly/graph_objs/cone/colorbar/title/__init__.py                                    |    2
 plotly/graph_objs/cone/colorbar/title/_font.py                                       |  354
 plotly/graph_objs/cone/hoverlabel/__init__.py                                        |    2
 plotly/graph_objs/cone/hoverlabel/_font.py                                           |  405
 plotly/graph_objs/cone/legendgrouptitle/__init__.py                                  |    2
 plotly/graph_objs/cone/legendgrouptitle/_font.py                                     |  351
 plotly/graph_objs/contour/__init__.py                                                |    4
 plotly/graph_objs/contour/_colorbar.py                                               |  869
 plotly/graph_objs/contour/_contours.py                                               |  172
 plotly/graph_objs/contour/_hoverlabel.py                                             |  345
 plotly/graph_objs/contour/_legendgrouptitle.py                                       |   66
 plotly/graph_objs/contour/_line.py                                                   |  110
 plotly/graph_objs/contour/_stream.py                                                 |  141
 plotly/graph_objs/contour/_textfont.py                                               |  351
 plotly/graph_objs/contour/colorbar/__init__.py                                       |    2
 plotly/graph_objs/contour/colorbar/_tickfont.py                                      |  351
 plotly/graph_objs/contour/colorbar/_tickformatstop.py                                |   68
 plotly/graph_objs/contour/colorbar/_title.py                                         |  116
 plotly/graph_objs/contour/colorbar/title/__init__.py                                 |    2
 plotly/graph_objs/contour/colorbar/title/_font.py                                    |  354
 plotly/graph_objs/contour/contours/__init__.py                                       |    2
 plotly/graph_objs/contour/contours/_labelfont.py                                     |  351
 plotly/graph_objs/contour/hoverlabel/__init__.py                                     |    2
 plotly/graph_objs/contour/hoverlabel/_font.py                                        |  405
 plotly/graph_objs/contour/legendgrouptitle/__init__.py                               |    2
 plotly/graph_objs/contour/legendgrouptitle/_font.py                                  |  351
 plotly/graph_objs/contourcarpet/__init__.py                                          |    4
 plotly/graph_objs/contourcarpet/_colorbar.py                                         |  870
 plotly/graph_objs/contourcarpet/_contours.py                                         |  172
 plotly/graph_objs/contourcarpet/_legendgrouptitle.py                                 |   66
 plotly/graph_objs/contourcarpet/_line.py                                             |  110
 plotly/graph_objs/contourcarpet/_stream.py                                           |  141
 plotly/graph_objs/contourcarpet/colorbar/__init__.py                                 |    2
 plotly/graph_objs/contourcarpet/colorbar/_tickfont.py                                |  351
 plotly/graph_objs/contourcarpet/colorbar/_tickformatstop.py                          |   68
 plotly/graph_objs/contourcarpet/colorbar/_title.py                                   |  116
 plotly/graph_objs/contourcarpet/colorbar/title/__init__.py                           |    2
 plotly/graph_objs/contourcarpet/colorbar/title/_font.py                              |  354
 plotly/graph_objs/contourcarpet/contours/__init__.py                                 |    2
 plotly/graph_objs/contourcarpet/contours/_labelfont.py                               |  351
 plotly/graph_objs/contourcarpet/legendgrouptitle/__init__.py                         |    2
 plotly/graph_objs/contourcarpet/legendgrouptitle/_font.py                            |  351
 plotly/graph_objs/densitymap/__init__.py                                             |   22
 plotly/graph_objs/densitymap/_colorbar.py                                            | 1708
 plotly/graph_objs/densitymap/_hoverlabel.py                                          |  268
 plotly/graph_objs/densitymap/_legendgrouptitle.py                                    |  104
 plotly/graph_objs/densitymap/colorbar/__init__.py                                    |   16
 plotly/graph_objs/densitymap/colorbar/_tickfont.py                                   |  340
 plotly/graph_objs/densitymap/colorbar/_tickformatstop.py                             |  241
 plotly/graph_objs/densitymap/colorbar/_title.py                                      |  136
 plotly/graph_objs/densitymap/colorbar/title/__init__.py                              |    9
 plotly/graph_objs/densitymap/colorbar/title/_font.py                                 |  340
 plotly/graph_objs/densitymap/hoverlabel/__init__.py                                  |    9
 plotly/graph_objs/densitymap/hoverlabel/_font.py                                     |  349
 plotly/graph_objs/densitymap/legendgrouptitle/__init__.py                            |    9
 plotly/graph_objs/densitymap/legendgrouptitle/_font.py                               |  340
 plotly/graph_objs/densitymapbox/__init__.py                                          |   24
 plotly/graph_objs/densitymapbox/_colorbar.py                                         | 2323
 plotly/graph_objs/densitymapbox/_hoverlabel.py                                       |  503
 plotly/graph_objs/densitymapbox/_legendgrouptitle.py                                 |  154
 plotly/graph_objs/densitymapbox/_stream.py                                           |  141
 plotly/graph_objs/densitymapbox/colorbar/__init__.py                                 |   16
 plotly/graph_objs/densitymapbox/colorbar/_tickfont.py                                |  227
 plotly/graph_objs/densitymapbox/colorbar/_tickformatstop.py                          |  283
 plotly/graph_objs/densitymapbox/colorbar/_title.py                                   |  210
 plotly/graph_objs/densitymapbox/colorbar/title/__init__.py                           |    9
 plotly/graph_objs/densitymapbox/colorbar/title/_font.py                              |  228
 plotly/graph_objs/densitymapbox/hoverlabel/__init__.py                               |    9
 plotly/graph_objs/densitymapbox/hoverlabel/_font.py                                  |  330
 plotly/graph_objs/densitymapbox/legendgrouptitle/__init__.py                         |    9
 plotly/graph_objs/densitymapbox/legendgrouptitle/_font.py                            |  227
 plotly/graph_objs/funnel/__init__.py                                                 |    4
 plotly/graph_objs/funnel/_connector.py                                               |  119
 plotly/graph_objs/funnel/_hoverlabel.py                                              |  345
 plotly/graph_objs/funnel/_insidetextfont.py                                          |  405
 plotly/graph_objs/funnel/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/funnel/_marker.py                                                  |  647
 plotly/graph_objs/funnel/_outsidetextfont.py                                         |  405
 plotly/graph_objs/funnel/_stream.py                                                  |  140
 plotly/graph_objs/funnel/_textfont.py                                                |  405
 plotly/graph_objs/funnel/connector/__init__.py                                       |    2
 plotly/graph_objs/funnel/connector/_line.py                                          |  103
 plotly/graph_objs/funnel/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/funnel/hoverlabel/_font.py                                         |  405
 plotly/graph_objs/funnel/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/funnel/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/funnel/marker/__init__.py                                          |    2
 plotly/graph_objs/funnel/marker/_colorbar.py                                         |  870
 plotly/graph_objs/funnel/marker/_line.py                                             |  244
 plotly/graph_objs/funnel/marker/colorbar/__init__.py                                 |    2
 plotly/graph_objs/funnel/marker/colorbar/_tickfont.py                                |  351
 plotly/graph_objs/funnel/marker/colorbar/_tickformatstop.py                          |   68
 plotly/graph_objs/funnel/marker/colorbar/_title.py                                   |  116
 plotly/graph_objs/funnel/marker/colorbar/title/__init__.py                           |    2
 plotly/graph_objs/funnel/marker/colorbar/title/_font.py                              |  354
 plotly/graph_objs/funnelarea/__init__.py                                             |    4
 plotly/graph_objs/funnelarea/_domain.py                                              |   73
 plotly/graph_objs/funnelarea/_hoverlabel.py                                          |  345
 plotly/graph_objs/funnelarea/_insidetextfont.py                                      |  405
 plotly/graph_objs/funnelarea/_legendgrouptitle.py                                    |   66
 plotly/graph_objs/funnelarea/_marker.py                                              |  152
 plotly/graph_objs/funnelarea/_stream.py                                              |  141
 plotly/graph_objs/funnelarea/_textfont.py                                            |  405
 plotly/graph_objs/funnelarea/_title.py                                               |  120
 plotly/graph_objs/funnelarea/hoverlabel/__init__.py                                  |    2
 plotly/graph_objs/funnelarea/hoverlabel/_font.py                                     |  405
 plotly/graph_objs/funnelarea/legendgrouptitle/__init__.py                            |    2
 plotly/graph_objs/funnelarea/legendgrouptitle/_font.py                               |  351
 plotly/graph_objs/funnelarea/marker/__init__.py                                      |    2
 plotly/graph_objs/funnelarea/marker/_line.py                                         |  162
 plotly/graph_objs/funnelarea/marker/_pattern.py                                      |  379
 plotly/graph_objs/funnelarea/title/__init__.py                                       |    2
 plotly/graph_objs/funnelarea/title/_font.py                                          |  408
 plotly/graph_objs/heatmap/__init__.py                                                |    4
 plotly/graph_objs/heatmap/_colorbar.py                                               |  869
 plotly/graph_objs/heatmap/_hoverlabel.py                                             |  345
 plotly/graph_objs/heatmap/_legendgrouptitle.py                                       |   66
 plotly/graph_objs/heatmap/_stream.py                                                 |  141
 plotly/graph_objs/heatmap/_textfont.py                                               |  351
 plotly/graph_objs/heatmap/colorbar/__init__.py                                       |    2
 plotly/graph_objs/heatmap/colorbar/_tickfont.py                                      |  351
 plotly/graph_objs/heatmap/colorbar/_tickformatstop.py                                |   68
 plotly/graph_objs/heatmap/colorbar/_title.py                                         |  116
 plotly/graph_objs/heatmap/colorbar/title/__init__.py                                 |    2
 plotly/graph_objs/heatmap/colorbar/title/_font.py                                    |  354
 plotly/graph_objs/heatmap/hoverlabel/__init__.py                                     |    2
 plotly/graph_objs/heatmap/hoverlabel/_font.py                                        |  405
 plotly/graph_objs/heatmap/legendgrouptitle/__init__.py                               |    2
 plotly/graph_objs/heatmap/legendgrouptitle/_font.py                                  |  351
 plotly/graph_objs/heatmapgl/__init__.py                                              |   24
 plotly/graph_objs/heatmapgl/_colorbar.py                                             | 2321
 plotly/graph_objs/heatmapgl/_hoverlabel.py                                           |  503
 plotly/graph_objs/heatmapgl/_legendgrouptitle.py                                     |  154
 plotly/graph_objs/heatmapgl/_stream.py                                               |  141
 plotly/graph_objs/heatmapgl/colorbar/__init__.py                                     |   16
 plotly/graph_objs/heatmapgl/colorbar/_tickfont.py                                    |  227
 plotly/graph_objs/heatmapgl/colorbar/_tickformatstop.py                              |  283
 plotly/graph_objs/heatmapgl/colorbar/_title.py                                       |  210
 plotly/graph_objs/heatmapgl/colorbar/title/__init__.py                               |    9
 plotly/graph_objs/heatmapgl/colorbar/title/_font.py                                  |  228
 plotly/graph_objs/heatmapgl/hoverlabel/__init__.py                                   |    9
 plotly/graph_objs/heatmapgl/hoverlabel/_font.py                                      |  330
 plotly/graph_objs/heatmapgl/legendgrouptitle/__init__.py                             |    9
 plotly/graph_objs/heatmapgl/legendgrouptitle/_font.py                                |  227
 plotly/graph_objs/histogram/__init__.py                                              |    4
 plotly/graph_objs/histogram/_cumulative.py                                           |   54
 plotly/graph_objs/histogram/_error_x.py                                              |  266
 plotly/graph_objs/histogram/_error_y.py                                              |  255
 plotly/graph_objs/histogram/_hoverlabel.py                                           |  345
 plotly/graph_objs/histogram/_insidetextfont.py                                       |  351
 plotly/graph_objs/histogram/_legendgrouptitle.py                                     |   66
 plotly/graph_objs/histogram/_marker.py                                               |  712
 plotly/graph_objs/histogram/_outsidetextfont.py                                      |  351
 plotly/graph_objs/histogram/_selected.py                                             |   55
 plotly/graph_objs/histogram/_stream.py                                               |  141
 plotly/graph_objs/histogram/_textfont.py                                             |  351
 plotly/graph_objs/histogram/_unselected.py                                           |   58
 plotly/graph_objs/histogram/_xbins.py                                                |   56
 plotly/graph_objs/histogram/_ybins.py                                                |   56
 plotly/graph_objs/histogram/hoverlabel/__init__.py                                   |    2
 plotly/graph_objs/histogram/hoverlabel/_font.py                                      |  405
 plotly/graph_objs/histogram/legendgrouptitle/__init__.py                             |    2
 plotly/graph_objs/histogram/legendgrouptitle/_font.py                                |  351
 plotly/graph_objs/histogram/marker/__init__.py                                       |    2
 plotly/graph_objs/histogram/marker/_colorbar.py                                      |  872
 plotly/graph_objs/histogram/marker/_line.py                                          |  244
 plotly/graph_objs/histogram/marker/_pattern.py                                       |  379
 plotly/graph_objs/histogram/marker/colorbar/__init__.py                              |    2
 plotly/graph_objs/histogram/marker/colorbar/_tickfont.py                             |  351
 plotly/graph_objs/histogram/marker/colorbar/_tickformatstop.py                       |   68
 plotly/graph_objs/histogram/marker/colorbar/_title.py                                |  116
 plotly/graph_objs/histogram/marker/colorbar/title/__init__.py                        |    2
 plotly/graph_objs/histogram/marker/colorbar/title/_font.py                           |  354
 plotly/graph_objs/histogram/selected/__init__.py                                     |    2
 plotly/graph_objs/histogram/selected/_marker.py                                      |   96
 plotly/graph_objs/histogram/selected/_textfont.py                                    |   89
 plotly/graph_objs/histogram/unselected/__init__.py                                   |    2
 plotly/graph_objs/histogram/unselected/_marker.py                                    |   96
 plotly/graph_objs/histogram/unselected/_textfont.py                                  |   89
 plotly/graph_objs/histogram2d/__init__.py                                            |    4
 plotly/graph_objs/histogram2d/_colorbar.py                                           |  869
 plotly/graph_objs/histogram2d/_hoverlabel.py                                         |  345
 plotly/graph_objs/histogram2d/_legendgrouptitle.py                                   |   66
 plotly/graph_objs/histogram2d/_marker.py                                             |   70
 plotly/graph_objs/histogram2d/_stream.py                                             |  141
 plotly/graph_objs/histogram2d/_textfont.py                                           |  351
 plotly/graph_objs/histogram2d/_xbins.py                                              |   50
 plotly/graph_objs/histogram2d/_ybins.py                                              |   50
 plotly/graph_objs/histogram2d/colorbar/__init__.py                                   |    2
 plotly/graph_objs/histogram2d/colorbar/_tickfont.py                                  |  351
 plotly/graph_objs/histogram2d/colorbar/_tickformatstop.py                            |   68
 plotly/graph_objs/histogram2d/colorbar/_title.py                                     |  116
 plotly/graph_objs/histogram2d/colorbar/title/__init__.py                             |    2
 plotly/graph_objs/histogram2d/colorbar/title/_font.py                                |  354
 plotly/graph_objs/histogram2d/hoverlabel/__init__.py                                 |    2
 plotly/graph_objs/histogram2d/hoverlabel/_font.py                                    |  405
 plotly/graph_objs/histogram2d/legendgrouptitle/__init__.py                           |    2
 plotly/graph_objs/histogram2d/legendgrouptitle/_font.py                              |  351
 plotly/graph_objs/histogram2dcontour/__init__.py                                     |    4
 plotly/graph_objs/histogram2dcontour/_colorbar.py                                    |  874
 plotly/graph_objs/histogram2dcontour/_contours.py                                    |  172
 plotly/graph_objs/histogram2dcontour/_hoverlabel.py                                  |  345
 plotly/graph_objs/histogram2dcontour/_legendgrouptitle.py                            |   66
 plotly/graph_objs/histogram2dcontour/_line.py                                        |  110
 plotly/graph_objs/histogram2dcontour/_marker.py                                      |   70
 plotly/graph_objs/histogram2dcontour/_stream.py                                      |  141
 plotly/graph_objs/histogram2dcontour/_textfont.py                                    |  351
 plotly/graph_objs/histogram2dcontour/_xbins.py                                       |   50
 plotly/graph_objs/histogram2dcontour/_ybins.py                                       |   50
 plotly/graph_objs/histogram2dcontour/colorbar/__init__.py                            |    2
 plotly/graph_objs/histogram2dcontour/colorbar/_tickfont.py                           |  351
 plotly/graph_objs/histogram2dcontour/colorbar/_tickformatstop.py                     |   68
 plotly/graph_objs/histogram2dcontour/colorbar/_title.py                              |  116
 plotly/graph_objs/histogram2dcontour/colorbar/title/__init__.py                      |    2
 plotly/graph_objs/histogram2dcontour/colorbar/title/_font.py                         |  354
 plotly/graph_objs/histogram2dcontour/contours/__init__.py                            |    2
 plotly/graph_objs/histogram2dcontour/contours/_labelfont.py                          |  351
 plotly/graph_objs/histogram2dcontour/hoverlabel/__init__.py                          |    2
 plotly/graph_objs/histogram2dcontour/hoverlabel/_font.py                             |  405
 plotly/graph_objs/histogram2dcontour/legendgrouptitle/__init__.py                    |    2
 plotly/graph_objs/histogram2dcontour/legendgrouptitle/_font.py                       |  351
 plotly/graph_objs/icicle/__init__.py                                                 |    4
 plotly/graph_objs/icicle/_domain.py                                                  |   73
 plotly/graph_objs/icicle/_hoverlabel.py                                              |  345
 plotly/graph_objs/icicle/_insidetextfont.py                                          |  405
 plotly/graph_objs/icicle/_leaf.py                                                    |   36
 plotly/graph_objs/icicle/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/icicle/_marker.py                                                  |  536
 plotly/graph_objs/icicle/_outsidetextfont.py                                         |  405
 plotly/graph_objs/icicle/_pathbar.py                                                 |  113
 plotly/graph_objs/icicle/_root.py                                                    |   89
 plotly/graph_objs/icicle/_stream.py                                                  |  140
 plotly/graph_objs/icicle/_textfont.py                                                |  405
 plotly/graph_objs/icicle/_tiling.py                                                  |   50
 plotly/graph_objs/icicle/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/icicle/hoverlabel/_font.py                                         |  405
 plotly/graph_objs/icicle/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/icicle/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/icicle/marker/__init__.py                                          |    2
 plotly/graph_objs/icicle/marker/_colorbar.py                                         |  870
 plotly/graph_objs/icicle/marker/_line.py                                             |  162
 plotly/graph_objs/icicle/marker/_pattern.py                                          |  379
 plotly/graph_objs/icicle/marker/colorbar/__init__.py                                 |    2
 plotly/graph_objs/icicle/marker/colorbar/_tickfont.py                                |  351
 plotly/graph_objs/icicle/marker/colorbar/_tickformatstop.py                          |   68
 plotly/graph_objs/icicle/marker/colorbar/_title.py                                   |  116
 plotly/graph_objs/icicle/marker/colorbar/title/__init__.py                           |    2
 plotly/graph_objs/icicle/marker/colorbar/title/_font.py                              |  354
 plotly/graph_objs/icicle/pathbar/__init__.py                                         |    2
 plotly/graph_objs/icicle/pathbar/_textfont.py                                        |  405
 plotly/graph_objs/image/__init__.py                                                  |    9
 plotly/graph_objs/image/_hoverlabel.py                                               |  345
 plotly/graph_objs/image/_legendgrouptitle.py                                         |   66
 plotly/graph_objs/image/_stream.py                                                   |  140
 plotly/graph_objs/image/hoverlabel/__init__.py                                       |    2
 plotly/graph_objs/image/hoverlabel/_font.py                                          |  405
 plotly/graph_objs/image/legendgrouptitle/__init__.py                                 |    2
 plotly/graph_objs/image/legendgrouptitle/_font.py                                    |  351
 plotly/graph_objs/indicator/__init__.py                                              |    4
 plotly/graph_objs/indicator/_delta.py                                                |  133
 plotly/graph_objs/indicator/_domain.py                                               |   73
 plotly/graph_objs/indicator/_gauge.py                                                |  439
 plotly/graph_objs/indicator/_legendgrouptitle.py                                     |   66
 plotly/graph_objs/indicator/_number.py                                               |   80
 plotly/graph_objs/indicator/_stream.py                                               |  141
 plotly/graph_objs/indicator/_title.py                                                |   73
 plotly/graph_objs/indicator/delta/__init__.py                                        |    2
 plotly/graph_objs/indicator/delta/_decreasing.py                                     |   96
 plotly/graph_objs/indicator/delta/_font.py                                           |  351
 plotly/graph_objs/indicator/delta/_increasing.py                                     |   96
 plotly/graph_objs/indicator/gauge/__init__.py                                        |    2
 plotly/graph_objs/indicator/gauge/_axis.py                                           |  444
 plotly/graph_objs/indicator/gauge/_bar.py                                            |  112
 plotly/graph_objs/indicator/gauge/_step.py                                           |  133
 plotly/graph_objs/indicator/gauge/_threshold.py                                      |   57
 plotly/graph_objs/indicator/gauge/axis/__init__.py                                   |    2
 plotly/graph_objs/indicator/gauge/axis/_tickfont.py                                  |  351
 plotly/graph_objs/indicator/gauge/axis/_tickformatstop.py                            |   68
 plotly/graph_objs/indicator/gauge/bar/__init__.py                                    |    2
 plotly/graph_objs/indicator/gauge/bar/_line.py                                       |   96
 plotly/graph_objs/indicator/gauge/step/__init__.py                                   |    2
 plotly/graph_objs/indicator/gauge/step/_line.py                                      |   96
 plotly/graph_objs/indicator/gauge/threshold/__init__.py                              |    2
 plotly/graph_objs/indicator/gauge/threshold/_line.py                                 |   96
 plotly/graph_objs/indicator/legendgrouptitle/__init__.py                             |    2
 plotly/graph_objs/indicator/legendgrouptitle/_font.py                                |  351
 plotly/graph_objs/indicator/number/__init__.py                                       |    2
 plotly/graph_objs/indicator/number/_font.py                                          |  351
 plotly/graph_objs/indicator/title/__init__.py                                        |    2
 plotly/graph_objs/indicator/title/_font.py                                           |  351
 plotly/graph_objs/isosurface/__init__.py                                             |    4
 plotly/graph_objs/isosurface/_caps.py                                                |   98
 plotly/graph_objs/isosurface/_colorbar.py                                            |  869
 plotly/graph_objs/isosurface/_contour.py                                             |  107
 plotly/graph_objs/isosurface/_hoverlabel.py                                          |  345
 plotly/graph_objs/isosurface/_legendgrouptitle.py                                    |   66
 plotly/graph_objs/isosurface/_lighting.py                                            |   78
 plotly/graph_objs/isosurface/_lightposition.py                                       |   50
 plotly/graph_objs/isosurface/_slices.py                                              |  113
 plotly/graph_objs/isosurface/_spaceframe.py                                          |   47
 plotly/graph_objs/isosurface/_stream.py                                              |  141
 plotly/graph_objs/isosurface/_surface.py                                             |   63
 plotly/graph_objs/isosurface/caps/__init__.py                                        |    2
 plotly/graph_objs/isosurface/caps/_x.py                                              |   47
 plotly/graph_objs/isosurface/caps/_y.py                                              |   47
 plotly/graph_objs/isosurface/caps/_z.py                                              |   47
 plotly/graph_objs/isosurface/colorbar/__init__.py                                    |    2
 plotly/graph_objs/isosurface/colorbar/_tickfont.py                                   |  351
 plotly/graph_objs/isosurface/colorbar/_tickformatstop.py                             |   68
 plotly/graph_objs/isosurface/colorbar/_title.py                                      |  116
 plotly/graph_objs/isosurface/colorbar/title/__init__.py                              |    2
 plotly/graph_objs/isosurface/colorbar/title/_font.py                                 |  354
 plotly/graph_objs/isosurface/hoverlabel/__init__.py                                  |    2
 plotly/graph_objs/isosurface/hoverlabel/_font.py                                     |  405
 plotly/graph_objs/isosurface/legendgrouptitle/__init__.py                            |    2
 plotly/graph_objs/isosurface/legendgrouptitle/_font.py                               |  351
 plotly/graph_objs/isosurface/slices/__init__.py                                      |    2
 plotly/graph_objs/isosurface/slices/_x.py                                            |   97
 plotly/graph_objs/isosurface/slices/_y.py                                            |   97
 plotly/graph_objs/isosurface/slices/_z.py                                            |   97
 plotly/graph_objs/layout/__init__.py                                                 |   10
 plotly/graph_objs/layout/_activeselection.py                                         |   96
 plotly/graph_objs/layout/_activeshape.py                                             |   96
 plotly/graph_objs/layout/_annotation.py                                              |  588
 plotly/graph_objs/layout/_coloraxis.py                                               |  428
 plotly/graph_objs/layout/_colorscale.py                                              |   50
 plotly/graph_objs/layout/_font.py                                                    |  351
 plotly/graph_objs/layout/_geo.py                                                     |  915
 plotly/graph_objs/layout/_grid.py                                                    |  130
 plotly/graph_objs/layout/_hoverlabel.py                                              |  253
 plotly/graph_objs/layout/_image.py                                                   |  150
 plotly/graph_objs/layout/_legend.py                                                  |  570
 plotly/graph_objs/layout/_map.py                                                     |  435
 plotly/graph_objs/layout/_mapbox.py                                                  |  684
 plotly/graph_objs/layout/_margin.py                                                  |   75
 plotly/graph_objs/layout/_modebar.py                                                 |  345
 plotly/graph_objs/layout/_newselection.py                                            |   57
 plotly/graph_objs/layout/_newshape.py                                                |  304
 plotly/graph_objs/layout/_polar.py                                                   |  802
 plotly/graph_objs/layout/_scene.py                                                   | 1406
 plotly/graph_objs/layout/_selection.py                                               |  137
 plotly/graph_objs/layout/_shape.py                                                   |  612
 plotly/graph_objs/layout/_slider.py                                                  |  535
 plotly/graph_objs/layout/_smith.py                                                   |  370
 plotly/graph_objs/layout/_template.py                                                |  226
 plotly/graph_objs/layout/_ternary.py                                                 |  870
 plotly/graph_objs/layout/_title.py                                                   |  194
 plotly/graph_objs/layout/_transition.py                                              |   50
 plotly/graph_objs/layout/_uniformtext.py                                             |   43
 plotly/graph_objs/layout/_updatemenu.py                                              |  367
 plotly/graph_objs/layout/_xaxis.py                                                   | 1939
 plotly/graph_objs/layout/_yaxis.py                                                   | 1858
 plotly/graph_objs/layout/annotation/__init__.py                                      |    2
 plotly/graph_objs/layout/annotation/_font.py                                         |  351
 plotly/graph_objs/layout/annotation/_hoverlabel.py                                   |  179
 plotly/graph_objs/layout/annotation/hoverlabel/__init__.py                           |    2
 plotly/graph_objs/layout/annotation/hoverlabel/_font.py                              |  351
 plotly/graph_objs/layout/coloraxis/__init__.py                                       |    2
 plotly/graph_objs/layout/coloraxis/_colorbar.py                                      |  872
 plotly/graph_objs/layout/coloraxis/colorbar/__init__.py                              |    2
 plotly/graph_objs/layout/coloraxis/colorbar/_tickfont.py                             |  351
 plotly/graph_objs/layout/coloraxis/colorbar/_tickformatstop.py                       |   68
 plotly/graph_objs/layout/coloraxis/colorbar/_title.py                                |  116
 plotly/graph_objs/layout/coloraxis/colorbar/title/__init__.py                        |    2
 plotly/graph_objs/layout/coloraxis/colorbar/title/_font.py                           |  354
 plotly/graph_objs/layout/geo/__init__.py                                             |    2
 plotly/graph_objs/layout/geo/_center.py                                              |   43
 plotly/graph_objs/layout/geo/_domain.py                                              |   73
 plotly/graph_objs/layout/geo/_lataxis.py                                             |  135
 plotly/graph_objs/layout/geo/_lonaxis.py                                             |  135
 plotly/graph_objs/layout/geo/_projection.py                                          |  171
 plotly/graph_objs/layout/geo/projection/__init__.py                                  |    2
 plotly/graph_objs/layout/geo/projection/_rotation.py                                 |   50
 plotly/graph_objs/layout/grid/__init__.py                                            |    2
 plotly/graph_objs/layout/grid/_domain.py                                             |   43
 plotly/graph_objs/layout/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/layout/hoverlabel/_font.py                                         |  351
 plotly/graph_objs/layout/hoverlabel/_grouptitlefont.py                               |  351
 plotly/graph_objs/layout/legend/__init__.py                                          |    2
 plotly/graph_objs/layout/legend/_font.py                                             |  351
 plotly/graph_objs/layout/legend/_grouptitlefont.py                                   |  351
 plotly/graph_objs/layout/legend/_title.py                                            |   73
 plotly/graph_objs/layout/legend/title/__init__.py                                    |    2
 plotly/graph_objs/layout/legend/title/_font.py                                       |  351
 plotly/graph_objs/layout/map/__init__.py                                             |   17
 plotly/graph_objs/layout/map/_bounds.py                                              |  160
 plotly/graph_objs/layout/map/_center.py                                              |  104
 plotly/graph_objs/layout/map/_domain.py                                              |  170
 plotly/graph_objs/layout/map/_layer.py                                               |  697
 plotly/graph_objs/layout/map/layer/__init__.py                                       |   17
 plotly/graph_objs/layout/map/layer/_circle.py                                        |   80
 plotly/graph_objs/layout/map/layer/_fill.py                                          |   92
 plotly/graph_objs/layout/map/layer/_line.py                                          |  108
 plotly/graph_objs/layout/map/layer/_symbol.py                                        |  243
 plotly/graph_objs/layout/map/layer/symbol/__init__.py                                |   11
 plotly/graph_objs/layout/map/layer/symbol/_textfont.py                               |  208
 plotly/graph_objs/layout/mapbox/__init__.py                                          |   17
 plotly/graph_objs/layout/mapbox/_bounds.py                                           |  197
 plotly/graph_objs/layout/mapbox/_center.py                                           |  131
 plotly/graph_objs/layout/mapbox/_domain.py                                           |  207
 plotly/graph_objs/layout/mapbox/_layer.py                                            |  896
 plotly/graph_objs/layout/mapbox/layer/__init__.py                                    |   17
 plotly/graph_objs/layout/mapbox/layer/_circle.py                                     |  104
 plotly/graph_objs/layout/mapbox/layer/_fill.py                                       |  143
 plotly/graph_objs/layout/mapbox/layer/_line.py                                       |  165
 plotly/graph_objs/layout/mapbox/layer/_symbol.py                                     |  315
 plotly/graph_objs/layout/mapbox/layer/symbol/__init__.py                             |   11
 plotly/graph_objs/layout/mapbox/layer/symbol/_textfont.py                            |  229
 plotly/graph_objs/layout/newselection/__init__.py                                    |    2
 plotly/graph_objs/layout/newselection/_line.py                                       |  103
 plotly/graph_objs/layout/newshape/__init__.py                                        |    2
 plotly/graph_objs/layout/newshape/_label.py                                          |  165
 plotly/graph_objs/layout/newshape/_legendgrouptitle.py                               |   66
 plotly/graph_objs/layout/newshape/_line.py                                           |  103
 plotly/graph_objs/layout/newshape/label/__init__.py                                  |    2
 plotly/graph_objs/layout/newshape/label/_font.py                                     |  351
 plotly/graph_objs/layout/newshape/legendgrouptitle/__init__.py                       |    2
 plotly/graph_objs/layout/newshape/legendgrouptitle/_font.py                          |  351
 plotly/graph_objs/layout/polar/__init__.py                                           |    2
 plotly/graph_objs/layout/polar/_angularaxis.py                                       |  818
 plotly/graph_objs/layout/polar/_domain.py                                            |   73
 plotly/graph_objs/layout/polar/_radialaxis.py                                        |  973
 plotly/graph_objs/layout/polar/angularaxis/__init__.py                               |    2
 plotly/graph_objs/layout/polar/angularaxis/_tickfont.py                              |  351
 plotly/graph_objs/layout/polar/angularaxis/_tickformatstop.py                        |   68
 plotly/graph_objs/layout/polar/radialaxis/__init__.py                                |    2
 plotly/graph_objs/layout/polar/radialaxis/_autorangeoptions.py                       |  126
 plotly/graph_objs/layout/polar/radialaxis/_tickfont.py                               |  351
 plotly/graph_objs/layout/polar/radialaxis/_tickformatstop.py                         |   68
 plotly/graph_objs/layout/polar/radialaxis/_title.py                                  |   91
 plotly/graph_objs/layout/polar/radialaxis/title/__init__.py                          |    2
 plotly/graph_objs/layout/polar/radialaxis/title/_font.py                             |  354
 plotly/graph_objs/layout/scene/__init__.py                                           |    2
 plotly/graph_objs/layout/scene/_annotation.py                                        |  522
 plotly/graph_objs/layout/scene/_aspectratio.py                                       |   50
 plotly/graph_objs/layout/scene/_camera.py                                            |   88
 plotly/graph_objs/layout/scene/_domain.py                                            |   73
 plotly/graph_objs/layout/scene/_xaxis.py                                             | 1142
 plotly/graph_objs/layout/scene/_yaxis.py                                             | 1142
 plotly/graph_objs/layout/scene/_zaxis.py                                             | 1142
 plotly/graph_objs/layout/scene/annotation/__init__.py                                |    2
 plotly/graph_objs/layout/scene/annotation/_font.py                                   |  351
 plotly/graph_objs/layout/scene/annotation/_hoverlabel.py                             |  179
 plotly/graph_objs/layout/scene/annotation/hoverlabel/__init__.py                     |    2
 plotly/graph_objs/layout/scene/annotation/hoverlabel/_font.py                        |  351
 plotly/graph_objs/layout/scene/camera/__init__.py                                    |    2
 plotly/graph_objs/layout/scene/camera/_center.py                                     |   50
 plotly/graph_objs/layout/scene/camera/_eye.py                                        |   50
 plotly/graph_objs/layout/scene/camera/_projection.py                                 |   36
 plotly/graph_objs/layout/scene/camera/_up.py                                         |   50
 plotly/graph_objs/layout/scene/xaxis/__init__.py                                     |    2
 plotly/graph_objs/layout/scene/xaxis/_autorangeoptions.py                            |  126
 plotly/graph_objs/layout/scene/xaxis/_tickfont.py                                    |  351
 plotly/graph_objs/layout/scene/xaxis/_tickformatstop.py                              |   68
 plotly/graph_objs/layout/scene/xaxis/_title.py                                       |   91
 plotly/graph_objs/layout/scene/xaxis/title/__init__.py                               |    2
 plotly/graph_objs/layout/scene/xaxis/title/_font.py                                  |  354
 plotly/graph_objs/layout/scene/yaxis/__init__.py                                     |    2
 plotly/graph_objs/layout/scene/yaxis/_autorangeoptions.py                            |  126
 plotly/graph_objs/layout/scene/yaxis/_tickfont.py                                    |  351
 plotly/graph_objs/layout/scene/yaxis/_tickformatstop.py                              |   68
 plotly/graph_objs/layout/scene/yaxis/_title.py                                       |   91
 plotly/graph_objs/layout/scene/yaxis/title/__init__.py                               |    2
 plotly/graph_objs/layout/scene/yaxis/title/_font.py                                  |  354
 plotly/graph_objs/layout/scene/zaxis/__init__.py                                     |    2
 plotly/graph_objs/layout/scene/zaxis/_autorangeoptions.py                            |  126
 plotly/graph_objs/layout/scene/zaxis/_tickfont.py                                    |  351
 plotly/graph_objs/layout/scene/zaxis/_tickformatstop.py                              |   68
 plotly/graph_objs/layout/scene/zaxis/_title.py                                       |   91
 plotly/graph_objs/layout/scene/zaxis/title/__init__.py                               |    2
 plotly/graph_objs/layout/scene/zaxis/title/_font.py                                  |  354
 plotly/graph_objs/layout/selection/__init__.py                                       |    2
 plotly/graph_objs/layout/selection/_line.py                                          |  103
 plotly/graph_objs/layout/shape/__init__.py                                           |    2
 plotly/graph_objs/layout/shape/_label.py                                             |  165
 plotly/graph_objs/layout/shape/_legendgrouptitle.py                                  |   66
 plotly/graph_objs/layout/shape/_line.py                                              |  103
 plotly/graph_objs/layout/shape/label/__init__.py                                     |    2
 plotly/graph_objs/layout/shape/label/_font.py                                        |  351
 plotly/graph_objs/layout/shape/legendgrouptitle/__init__.py                          |    2
 plotly/graph_objs/layout/shape/legendgrouptitle/_font.py                             |  351
 plotly/graph_objs/layout/slider/__init__.py                                          |    2
 plotly/graph_objs/layout/slider/_currentvalue.py                                     |   98
 plotly/graph_objs/layout/slider/_font.py                                             |  351
 plotly/graph_objs/layout/slider/_pad.py                                              |   57
 plotly/graph_objs/layout/slider/_step.py                                             |   93
 plotly/graph_objs/layout/slider/_transition.py                                       |   43
 plotly/graph_objs/layout/slider/currentvalue/__init__.py                             |    2
 plotly/graph_objs/layout/slider/currentvalue/_font.py                                |  351
 plotly/graph_objs/layout/smith/__init__.py                                           |    2
 plotly/graph_objs/layout/smith/_domain.py                                            |   73
 plotly/graph_objs/layout/smith/_imaginaryaxis.py                                     |  480
 plotly/graph_objs/layout/smith/_realaxis.py                                          |  494
 plotly/graph_objs/layout/smith/imaginaryaxis/__init__.py                             |    2
 plotly/graph_objs/layout/smith/imaginaryaxis/_tickfont.py                            |  351
 plotly/graph_objs/layout/smith/realaxis/__init__.py                                  |    2
 plotly/graph_objs/layout/smith/realaxis/_tickfont.py                                 |  351
 plotly/graph_objs/layout/template/__init__.py                                        |    2
 plotly/graph_objs/layout/template/_data.py                                           |  617
 plotly/graph_objs/layout/template/data/__init__.py                                   |   20
 plotly/graph_objs/layout/template/data/_choroplethmap.py                             |    1
 plotly/graph_objs/layout/template/data/_choroplethmapbox.py                          |    1
 plotly/graph_objs/layout/template/data/_densitymap.py                                |    1
 plotly/graph_objs/layout/template/data/_densitymapbox.py                             |    1
 plotly/graph_objs/layout/template/data/_heatmapgl.py                                 |    1
 plotly/graph_objs/layout/template/data/_pointcloud.py                                |    1
 plotly/graph_objs/layout/template/data/_quiver.py                                    |    1
 plotly/graph_objs/layout/template/data/_scattermap.py                                |    1
 plotly/graph_objs/layout/template/data/_scattermapbox.py                             |    1
 plotly/graph_objs/layout/ternary/__init__.py                                         |    2
 plotly/graph_objs/layout/ternary/_aaxis.py                                           |  763
 plotly/graph_objs/layout/ternary/_baxis.py                                           |  763
 plotly/graph_objs/layout/ternary/_caxis.py                                           |  763
 plotly/graph_objs/layout/ternary/_domain.py                                          |   73
 plotly/graph_objs/layout/ternary/aaxis/__init__.py                                   |    2
 plotly/graph_objs/layout/ternary/aaxis/_tickfont.py                                  |  351
 plotly/graph_objs/layout/ternary/aaxis/_tickformatstop.py                            |   68
 plotly/graph_objs/layout/ternary/aaxis/_title.py                                     |   91
 plotly/graph_objs/layout/ternary/aaxis/title/__init__.py                             |    2
 plotly/graph_objs/layout/ternary/aaxis/title/_font.py                                |  354
 plotly/graph_objs/layout/ternary/baxis/__init__.py                                   |    2
 plotly/graph_objs/layout/ternary/baxis/_tickfont.py                                  |  351
 plotly/graph_objs/layout/ternary/baxis/_tickformatstop.py                            |   68
 plotly/graph_objs/layout/ternary/baxis/_title.py                                     |   91
 plotly/graph_objs/layout/ternary/baxis/title/__init__.py                             |    2
 plotly/graph_objs/layout/ternary/baxis/title/_font.py                                |  354
 plotly/graph_objs/layout/ternary/caxis/__init__.py                                   |    2
 plotly/graph_objs/layout/ternary/caxis/_tickfont.py                                  |  351
 plotly/graph_objs/layout/ternary/caxis/_tickformatstop.py                            |   68
 plotly/graph_objs/layout/ternary/caxis/_title.py                                     |   91
 plotly/graph_objs/layout/ternary/caxis/title/__init__.py                             |    2
 plotly/graph_objs/layout/ternary/caxis/title/_font.py                                |  354
 plotly/graph_objs/layout/title/__init__.py                                           |    6
 plotly/graph_objs/layout/title/_font.py                                              |  354
 plotly/graph_objs/layout/title/_pad.py                                               |   57
 plotly/graph_objs/layout/title/_subtitle.py                                          |  104
 plotly/graph_objs/layout/title/subtitle/__init__.py                                  |    9
 plotly/graph_objs/layout/title/subtitle/_font.py                                     |  340
 plotly/graph_objs/layout/updatemenu/__init__.py                                      |    2
 plotly/graph_objs/layout/updatemenu/_button.py                                       |   93
 plotly/graph_objs/layout/updatemenu/_font.py                                         |  351
 plotly/graph_objs/layout/updatemenu/_pad.py                                          |   57
 plotly/graph_objs/layout/xaxis/__init__.py                                           |    4
 plotly/graph_objs/layout/xaxis/_autorangeoptions.py                                  |  126
 plotly/graph_objs/layout/xaxis/_minor.py                                             |  264
 plotly/graph_objs/layout/xaxis/_rangebreak.py                                        |   82
 plotly/graph_objs/layout/xaxis/_rangeselector.py                                     |  349
 plotly/graph_objs/layout/xaxis/_rangeslider.py                                       |  215
 plotly/graph_objs/layout/xaxis/_tickfont.py                                          |  351
 plotly/graph_objs/layout/xaxis/_tickformatstop.py                                    |   68
 plotly/graph_objs/layout/xaxis/_title.py                                             |   98
 plotly/graph_objs/layout/xaxis/_unifiedhovertitle.py                                 |  124
 plotly/graph_objs/layout/xaxis/rangeselector/__init__.py                             |    2
 plotly/graph_objs/layout/xaxis/rangeselector/_button.py                              |   82
 plotly/graph_objs/layout/xaxis/rangeselector/_font.py                                |  351
 plotly/graph_objs/layout/xaxis/rangeslider/__init__.py                               |    2
 plotly/graph_objs/layout/xaxis/rangeslider/_yaxis.py                                 |   43
 plotly/graph_objs/layout/xaxis/title/__init__.py                                     |    2
 plotly/graph_objs/layout/xaxis/title/_font.py                                        |  354
 plotly/graph_objs/layout/yaxis/__init__.py                                           |    4
 plotly/graph_objs/layout/yaxis/_autorangeoptions.py                                  |  126
 plotly/graph_objs/layout/yaxis/_minor.py                                             |  264
 plotly/graph_objs/layout/yaxis/_rangebreak.py                                        |   82
 plotly/graph_objs/layout/yaxis/_tickfont.py                                          |  351
 plotly/graph_objs/layout/yaxis/_tickformatstop.py                                    |   68
 plotly/graph_objs/layout/yaxis/_title.py                                             |   98
 plotly/graph_objs/layout/yaxis/_unifiedhovertitle.py                                 |  124
 plotly/graph_objs/layout/yaxis/title/__init__.py                                     |    2
 plotly/graph_objs/layout/yaxis/title/_font.py                                        |  354
 plotly/graph_objs/mesh3d/__init__.py                                                 |    4
 plotly/graph_objs/mesh3d/_colorbar.py                                                |  869
 plotly/graph_objs/mesh3d/_contour.py                                                 |  107
 plotly/graph_objs/mesh3d/_hoverlabel.py                                              |  345
 plotly/graph_objs/mesh3d/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/mesh3d/_lighting.py                                                |   78
 plotly/graph_objs/mesh3d/_lightposition.py                                           |   50
 plotly/graph_objs/mesh3d/_stream.py                                                  |  140
 plotly/graph_objs/mesh3d/colorbar/__init__.py                                        |    2
 plotly/graph_objs/mesh3d/colorbar/_tickfont.py                                       |  351
 plotly/graph_objs/mesh3d/colorbar/_tickformatstop.py                                 |   68
 plotly/graph_objs/mesh3d/colorbar/_title.py                                          |  116
 plotly/graph_objs/mesh3d/colorbar/title/__init__.py                                  |    2
 plotly/graph_objs/mesh3d/colorbar/title/_font.py                                     |  354
 plotly/graph_objs/mesh3d/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/mesh3d/hoverlabel/_font.py                                         |  405
 plotly/graph_objs/mesh3d/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/mesh3d/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/ohlc/__init__.py                                                   |    4
 plotly/graph_objs/ohlc/_decreasing.py                                                |   48
 plotly/graph_objs/ohlc/_hoverlabel.py                                                |  367
 plotly/graph_objs/ohlc/_increasing.py                                                |   48
 plotly/graph_objs/ohlc/_legendgrouptitle.py                                          |   66
 plotly/graph_objs/ohlc/_line.py                                                      |   59
 plotly/graph_objs/ohlc/_stream.py                                                    |  140
 plotly/graph_objs/ohlc/decreasing/__init__.py                                        |    2
 plotly/graph_objs/ohlc/decreasing/_line.py                                           |  103
 plotly/graph_objs/ohlc/hoverlabel/__init__.py                                        |    2
 plotly/graph_objs/ohlc/hoverlabel/_font.py                                           |  405
 plotly/graph_objs/ohlc/increasing/__init__.py                                        |    2
 plotly/graph_objs/ohlc/increasing/_line.py                                           |  103
 plotly/graph_objs/ohlc/legendgrouptitle/__init__.py                                  |    2
 plotly/graph_objs/ohlc/legendgrouptitle/_font.py                                     |  351
 plotly/graph_objs/parcats/__init__.py                                                |    4
 plotly/graph_objs/parcats/_dimension.py                                              |  181
 plotly/graph_objs/parcats/_domain.py                                                 |   73
 plotly/graph_objs/parcats/_labelfont.py                                              |  351
 plotly/graph_objs/parcats/_legendgrouptitle.py                                       |   66
 plotly/graph_objs/parcats/_line.py                                                   |  618
 plotly/graph_objs/parcats/_stream.py                                                 |  141
 plotly/graph_objs/parcats/_tickfont.py                                               |  351
 plotly/graph_objs/parcats/legendgrouptitle/__init__.py                               |    2
 plotly/graph_objs/parcats/legendgrouptitle/_font.py                                  |  351
 plotly/graph_objs/parcats/line/__init__.py                                           |    2
 plotly/graph_objs/parcats/line/_colorbar.py                                          |  870
 plotly/graph_objs/parcats/line/colorbar/__init__.py                                  |    2
 plotly/graph_objs/parcats/line/colorbar/_tickfont.py                                 |  351
 plotly/graph_objs/parcats/line/colorbar/_tickformatstop.py                           |   68
 plotly/graph_objs/parcats/line/colorbar/_title.py                                    |  116
 plotly/graph_objs/parcats/line/colorbar/title/__init__.py                            |    2
 plotly/graph_objs/parcats/line/colorbar/title/_font.py                               |  354
 plotly/graph_objs/parcoords/__init__.py                                              |    4
 plotly/graph_objs/parcoords/_dimension.py                                            |  210
 plotly/graph_objs/parcoords/_domain.py                                               |   73
 plotly/graph_objs/parcoords/_labelfont.py                                            |  351
 plotly/graph_objs/parcoords/_legendgrouptitle.py                                     |   66
 plotly/graph_objs/parcoords/_line.py                                                 |  509
 plotly/graph_objs/parcoords/_rangefont.py                                            |  351
 plotly/graph_objs/parcoords/_stream.py                                               |  141
 plotly/graph_objs/parcoords/_tickfont.py                                             |  351
 plotly/graph_objs/parcoords/_unselected.py                                           |   47
 plotly/graph_objs/parcoords/legendgrouptitle/__init__.py                             |    2
 plotly/graph_objs/parcoords/legendgrouptitle/_font.py                                |  351
 plotly/graph_objs/parcoords/line/__init__.py                                         |    2
 plotly/graph_objs/parcoords/line/_colorbar.py                                        |  870
 plotly/graph_objs/parcoords/line/colorbar/__init__.py                                |    2
 plotly/graph_objs/parcoords/line/colorbar/_tickfont.py                               |  351
 plotly/graph_objs/parcoords/line/colorbar/_tickformatstop.py                         |   68
 plotly/graph_objs/parcoords/line/colorbar/_title.py                                  |  116
 plotly/graph_objs/parcoords/line/colorbar/title/__init__.py                          |    2
 plotly/graph_objs/parcoords/line/colorbar/title/_font.py                             |  354
 plotly/graph_objs/parcoords/unselected/__init__.py                                   |    2
 plotly/graph_objs/parcoords/unselected/_line.py                                      |   96
 plotly/graph_objs/pie/__init__.py                                                    |    4
 plotly/graph_objs/pie/_domain.py                                                     |   73
 plotly/graph_objs/pie/_hoverlabel.py                                                 |  345
 plotly/graph_objs/pie/_insidetextfont.py                                             |  405
 plotly/graph_objs/pie/_legendgrouptitle.py                                           |   66
 plotly/graph_objs/pie/_marker.py                                                     |  152
 plotly/graph_objs/pie/_outsidetextfont.py                                            |  405
 plotly/graph_objs/pie/_stream.py                                                     |  140
 plotly/graph_objs/pie/_textfont.py                                                   |  405
 plotly/graph_objs/pie/_title.py                                                      |  120
 plotly/graph_objs/pie/hoverlabel/__init__.py                                         |    2
 plotly/graph_objs/pie/hoverlabel/_font.py                                            |  405
 plotly/graph_objs/pie/legendgrouptitle/__init__.py                                   |    2
 plotly/graph_objs/pie/legendgrouptitle/_font.py                                      |  351
 plotly/graph_objs/pie/marker/__init__.py                                             |    2
 plotly/graph_objs/pie/marker/_line.py                                                |  162
 plotly/graph_objs/pie/marker/_pattern.py                                             |  379
 plotly/graph_objs/pie/title/__init__.py                                              |    2
 plotly/graph_objs/pie/title/_font.py                                                 |  408
 plotly/graph_objs/pointcloud/__init__.py                                             |   24
 plotly/graph_objs/pointcloud/_hoverlabel.py                                          |  503
 plotly/graph_objs/pointcloud/_legendgrouptitle.py                                    |  154
 plotly/graph_objs/pointcloud/_marker.py                                              |  343
 plotly/graph_objs/pointcloud/_stream.py                                              |  141
 plotly/graph_objs/pointcloud/hoverlabel/__init__.py                                  |    9
 plotly/graph_objs/pointcloud/hoverlabel/_font.py                                     |  330
 plotly/graph_objs/pointcloud/legendgrouptitle/__init__.py                            |    9
 plotly/graph_objs/pointcloud/legendgrouptitle/_font.py                               |  227
 plotly/graph_objs/pointcloud/marker/__init__.py                                      |    9
 plotly/graph_objs/pointcloud/marker/_border.py                                       |  177
 plotly/graph_objs/quiver/__init__.py                                                 |   30
 plotly/graph_objs/quiver/_hoverlabel.py                                              |  268
 plotly/graph_objs/quiver/_legendgrouptitle.py                                        |  104
 plotly/graph_objs/quiver/_marker.py                                                  |  578
 plotly/graph_objs/quiver/_selected.py                                                |  106
 plotly/graph_objs/quiver/_textfont.py                                                |  349
 plotly/graph_objs/quiver/_unselected.py                                              |  106
 plotly/graph_objs/quiver/hoverlabel/__init__.py                                      |    9
 plotly/graph_objs/quiver/hoverlabel/_font.py                                         |  349
 plotly/graph_objs/quiver/legendgrouptitle/__init__.py                                |    9
 plotly/graph_objs/quiver/legendgrouptitle/_font.py                                   |  340
 plotly/graph_objs/quiver/marker/__init__.py                                          |   13
 plotly/graph_objs/quiver/marker/_colorbar.py                                         | 1709
 plotly/graph_objs/quiver/marker/_line.py                                             |  112
 plotly/graph_objs/quiver/marker/colorbar/__init__.py                                 |   16
 plotly/graph_objs/quiver/marker/colorbar/_tickfont.py                                |  340
 plotly/graph_objs/quiver/marker/colorbar/_tickformatstop.py                          |  241
 plotly/graph_objs/quiver/marker/colorbar/_title.py                                   |  136
 plotly/graph_objs/quiver/marker/colorbar/title/__init__.py                           |    9
 plotly/graph_objs/quiver/marker/colorbar/title/_font.py                              |  340
 plotly/graph_objs/quiver/selected/__init__.py                                        |   13
 plotly/graph_objs/quiver/selected/_marker.py                                         |  113
 plotly/graph_objs/quiver/selected/_textfont.py                                       |   90
 plotly/graph_objs/quiver/selected/marker/__init__.py                                 |    9
 plotly/graph_objs/quiver/selected/marker/_line.py                                    |   77
 plotly/graph_objs/quiver/unselected/__init__.py                                      |   13
 plotly/graph_objs/quiver/unselected/_marker.py                                       |  116
 plotly/graph_objs/quiver/unselected/_textfont.py                                     |   90
 plotly/graph_objs/quiver/unselected/marker/__init__.py                               |    9
 plotly/graph_objs/quiver/unselected/marker/_line.py                                  |   80
 plotly/graph_objs/sankey/__init__.py                                                 |    4
 plotly/graph_objs/sankey/_domain.py                                                  |   73
 plotly/graph_objs/sankey/_hoverlabel.py                                              |  345
 plotly/graph_objs/sankey/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/sankey/_link.py                                                    |  703
 plotly/graph_objs/sankey/_node.py                                                    |  542
 plotly/graph_objs/sankey/_stream.py                                                  |  140
 plotly/graph_objs/sankey/_textfont.py                                                |  351
 plotly/graph_objs/sankey/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/sankey/hoverlabel/_font.py                                         |  405
 plotly/graph_objs/sankey/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/sankey/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/sankey/link/__init__.py                                            |    2
 plotly/graph_objs/sankey/link/_colorscale.py                                         |  109
 plotly/graph_objs/sankey/link/_hoverlabel.py                                         |  345
 plotly/graph_objs/sankey/link/_line.py                                               |  162
 plotly/graph_objs/sankey/link/hoverlabel/__init__.py                                 |    2
 plotly/graph_objs/sankey/link/hoverlabel/_font.py                                    |  405
 plotly/graph_objs/sankey/node/__init__.py                                            |    2
 plotly/graph_objs/sankey/node/_hoverlabel.py                                         |  345
 plotly/graph_objs/sankey/node/_line.py                                               |  162
 plotly/graph_objs/sankey/node/hoverlabel/__init__.py                                 |    2
 plotly/graph_objs/sankey/node/hoverlabel/_font.py                                    |  405
 plotly/graph_objs/scatter/__init__.py                                                |    4
 plotly/graph_objs/scatter/_error_x.py                                                |  266
 plotly/graph_objs/scatter/_error_y.py                                                |  255
 plotly/graph_objs/scatter/_fillgradient.py                                           |   57
 plotly/graph_objs/scatter/_fillpattern.py                                            |  379
 plotly/graph_objs/scatter/_hoverlabel.py                                             |  345
 plotly/graph_objs/scatter/_legendgrouptitle.py                                       |   66
 plotly/graph_objs/scatter/_line.py                                                   |  167
 plotly/graph_objs/scatter/_marker.py                                                 |  861
 plotly/graph_objs/scatter/_selected.py                                               |   57
 plotly/graph_objs/scatter/_stream.py                                                 |  141
 plotly/graph_objs/scatter/_textfont.py                                               |  405
 plotly/graph_objs/scatter/_unselected.py                                             |   61
 plotly/graph_objs/scatter/hoverlabel/__init__.py                                     |    2
 plotly/graph_objs/scatter/hoverlabel/_font.py                                        |  405
 plotly/graph_objs/scatter/legendgrouptitle/__init__.py                               |    2
 plotly/graph_objs/scatter/legendgrouptitle/_font.py                                  |  351
 plotly/graph_objs/scatter/marker/__init__.py                                         |    2
 plotly/graph_objs/scatter/marker/_colorbar.py                                        |  870
 plotly/graph_objs/scatter/marker/_gradient.py                                        |  162
 plotly/graph_objs/scatter/marker/_line.py                                            |  265
 plotly/graph_objs/scatter/marker/colorbar/__init__.py                                |    2
 plotly/graph_objs/scatter/marker/colorbar/_tickfont.py                               |  351
 plotly/graph_objs/scatter/marker/colorbar/_tickformatstop.py                         |   68
 plotly/graph_objs/scatter/marker/colorbar/_title.py                                  |  116
 plotly/graph_objs/scatter/marker/colorbar/title/__init__.py                          |    2
 plotly/graph_objs/scatter/marker/colorbar/title/_font.py                             |  354
 plotly/graph_objs/scatter/selected/__init__.py                                       |    2
 plotly/graph_objs/scatter/selected/_marker.py                                        |  103
 plotly/graph_objs/scatter/selected/_textfont.py                                      |   89
 plotly/graph_objs/scatter/unselected/__init__.py                                     |    2
 plotly/graph_objs/scatter/unselected/_marker.py                                      |  103
 plotly/graph_objs/scatter/unselected/_textfont.py                                    |   89
 plotly/graph_objs/scatter3d/__init__.py                                              |    4
 plotly/graph_objs/scatter3d/_error_x.py                                              |  266
 plotly/graph_objs/scatter3d/_error_y.py                                              |  266
 plotly/graph_objs/scatter3d/_error_z.py                                              |  255
 plotly/graph_objs/scatter3d/_hoverlabel.py                                           |  345
 plotly/graph_objs/scatter3d/_legendgrouptitle.py                                     |   66
 plotly/graph_objs/scatter3d/_line.py                                                 |  523
 plotly/graph_objs/scatter3d/_marker.py                                               |  711
 plotly/graph_objs/scatter3d/_projection.py                                           |   83
 plotly/graph_objs/scatter3d/_stream.py                                               |  141
 plotly/graph_objs/scatter3d/_textfont.py                                             |  285
 plotly/graph_objs/scatter3d/hoverlabel/__init__.py                                   |    2
 plotly/graph_objs/scatter3d/hoverlabel/_font.py                                      |  405
 plotly/graph_objs/scatter3d/legendgrouptitle/__init__.py                             |    2
 plotly/graph_objs/scatter3d/legendgrouptitle/_font.py                                |  351
 plotly/graph_objs/scatter3d/line/__init__.py                                         |    2
 plotly/graph_objs/scatter3d/line/_colorbar.py                                        |  870
 plotly/graph_objs/scatter3d/line/colorbar/__init__.py                                |    2
 plotly/graph_objs/scatter3d/line/colorbar/_tickfont.py                               |  351
 plotly/graph_objs/scatter3d/line/colorbar/_tickformatstop.py                         |   68
 plotly/graph_objs/scatter3d/line/colorbar/_title.py                                  |  116
 plotly/graph_objs/scatter3d/line/colorbar/title/__init__.py                          |    2
 plotly/graph_objs/scatter3d/line/colorbar/title/_font.py                             |  354
 plotly/graph_objs/scatter3d/marker/__init__.py                                       |    2
 plotly/graph_objs/scatter3d/marker/_colorbar.py                                      |  872
 plotly/graph_objs/scatter3d/marker/_line.py                                          |  212
 plotly/graph_objs/scatter3d/marker/colorbar/__init__.py                              |    2
 plotly/graph_objs/scatter3d/marker/colorbar/_tickfont.py                             |  351
 plotly/graph_objs/scatter3d/marker/colorbar/_tickformatstop.py                       |   68
 plotly/graph_objs/scatter3d/marker/colorbar/_title.py                                |  116
 plotly/graph_objs/scatter3d/marker/colorbar/title/__init__.py                        |    2
 plotly/graph_objs/scatter3d/marker/colorbar/title/_font.py                           |  354
 plotly/graph_objs/scatter3d/projection/__init__.py                                   |    2
 plotly/graph_objs/scatter3d/projection/_x.py                                         |   54
 plotly/graph_objs/scatter3d/projection/_y.py                                         |   54
 plotly/graph_objs/scatter3d/projection/_z.py                                         |   54
 plotly/graph_objs/scattercarpet/__init__.py                                          |    4
 plotly/graph_objs/scattercarpet/_hoverlabel.py                                       |  345
 plotly/graph_objs/scattercarpet/_legendgrouptitle.py                                 |   66
 plotly/graph_objs/scattercarpet/_line.py                                             |  165
 plotly/graph_objs/scattercarpet/_marker.py                                           |  861
 plotly/graph_objs/scattercarpet/_selected.py                                         |   57
 plotly/graph_objs/scattercarpet/_stream.py                                           |  141
 plotly/graph_objs/scattercarpet/_textfont.py                                         |  405
 plotly/graph_objs/scattercarpet/_unselected.py                                       |   61
 plotly/graph_objs/scattercarpet/hoverlabel/__init__.py                               |    2
 plotly/graph_objs/scattercarpet/hoverlabel/_font.py                                  |  405
 plotly/graph_objs/scattercarpet/legendgrouptitle/__init__.py                         |    2
 plotly/graph_objs/scattercarpet/legendgrouptitle/_font.py                            |  351
 plotly/graph_objs/scattercarpet/marker/__init__.py                                   |    2
 plotly/graph_objs/scattercarpet/marker/_colorbar.py                                  |  874
 plotly/graph_objs/scattercarpet/marker/_gradient.py                                  |  162
 plotly/graph_objs/scattercarpet/marker/_line.py                                      |  265
 plotly/graph_objs/scattercarpet/marker/colorbar/__init__.py                          |    2
 plotly/graph_objs/scattercarpet/marker/colorbar/_tickfont.py                         |  351
 plotly/graph_objs/scattercarpet/marker/colorbar/_tickformatstop.py                   |   68
 plotly/graph_objs/scattercarpet/marker/colorbar/_title.py                            |  116
 plotly/graph_objs/scattercarpet/marker/colorbar/title/__init__.py                    |    2
 plotly/graph_objs/scattercarpet/marker/colorbar/title/_font.py                       |  354
 plotly/graph_objs/scattercarpet/selected/__init__.py                                 |    2
 plotly/graph_objs/scattercarpet/selected/_marker.py                                  |  103
 plotly/graph_objs/scattercarpet/selected/_textfont.py                                |   89
 plotly/graph_objs/scattercarpet/unselected/__init__.py                               |    2
 plotly/graph_objs/scattercarpet/unselected/_marker.py                                |  103
 plotly/graph_objs/scattercarpet/unselected/_textfont.py                              |   89
 plotly/graph_objs/scattergeo/__init__.py                                             |    4
 plotly/graph_objs/scattergeo/_hoverlabel.py                                          |  345
 plotly/graph_objs/scattergeo/_legendgrouptitle.py                                    |   66
 plotly/graph_objs/scattergeo/_line.py                                                |  103
 plotly/graph_objs/scattergeo/_marker.py                                              |  854
 plotly/graph_objs/scattergeo/_selected.py                                            |   57
 plotly/graph_objs/scattergeo/_stream.py                                              |  141
 plotly/graph_objs/scattergeo/_textfont.py                                            |  405
 plotly/graph_objs/scattergeo/_unselected.py                                          |   61
 plotly/graph_objs/scattergeo/hoverlabel/__init__.py                                  |    2
 plotly/graph_objs/scattergeo/hoverlabel/_font.py                                     |  405
 plotly/graph_objs/scattergeo/legendgrouptitle/__init__.py                            |    2
 plotly/graph_objs/scattergeo/legendgrouptitle/_font.py                               |  351
 plotly/graph_objs/scattergeo/marker/__init__.py                                      |    2
 plotly/graph_objs/scattergeo/marker/_colorbar.py                                     |  874
 plotly/graph_objs/scattergeo/marker/_gradient.py                                     |  162
 plotly/graph_objs/scattergeo/marker/_line.py                                         |  265
 plotly/graph_objs/scattergeo/marker/colorbar/__init__.py                             |    2
 plotly/graph_objs/scattergeo/marker/colorbar/_tickfont.py                            |  351
 plotly/graph_objs/scattergeo/marker/colorbar/_tickformatstop.py                      |   68
 plotly/graph_objs/scattergeo/marker/colorbar/_title.py                               |  116
 plotly/graph_objs/scattergeo/marker/colorbar/title/__init__.py                       |    2
 plotly/graph_objs/scattergeo/marker/colorbar/title/_font.py                          |  354
 plotly/graph_objs/scattergeo/selected/__init__.py                                    |    2
 plotly/graph_objs/scattergeo/selected/_marker.py                                     |  103
 plotly/graph_objs/scattergeo/selected/_textfont.py                                   |   89
 plotly/graph_objs/scattergeo/unselected/__init__.py                                  |    2
 plotly/graph_objs/scattergeo/unselected/_marker.py                                   |  103
 plotly/graph_objs/scattergeo/unselected/_textfont.py                                 |   89
 plotly/graph_objs/scattergl/__init__.py                                              |    4
 plotly/graph_objs/scattergl/_error_x.py                                              |  266
 plotly/graph_objs/scattergl/_error_y.py                                              |  255
 plotly/graph_objs/scattergl/_hoverlabel.py                                           |  345
 plotly/graph_objs/scattergl/_legendgrouptitle.py                                     |   66
 plotly/graph_objs/scattergl/_line.py                                                 |  110
 plotly/graph_objs/scattergl/_marker.py                                               |  785
 plotly/graph_objs/scattergl/_selected.py                                             |   57
 plotly/graph_objs/scattergl/_stream.py                                               |  141
 plotly/graph_objs/scattergl/_textfont.py                                             |  308
 plotly/graph_objs/scattergl/_unselected.py                                           |   61
 plotly/graph_objs/scattergl/hoverlabel/__init__.py                                   |    2
 plotly/graph_objs/scattergl/hoverlabel/_font.py                                      |  405
 plotly/graph_objs/scattergl/legendgrouptitle/__init__.py                             |    2
 plotly/graph_objs/scattergl/legendgrouptitle/_font.py                                |  351
 plotly/graph_objs/scattergl/marker/__init__.py                                       |    2
 plotly/graph_objs/scattergl/marker/_colorbar.py                                      |  872
 plotly/graph_objs/scattergl/marker/_line.py                                          |  244
 plotly/graph_objs/scattergl/marker/colorbar/__init__.py                              |    2
 plotly/graph_objs/scattergl/marker/colorbar/_tickfont.py                             |  351
 plotly/graph_objs/scattergl/marker/colorbar/_tickformatstop.py                       |   68
 plotly/graph_objs/scattergl/marker/colorbar/_title.py                                |  116
 plotly/graph_objs/scattergl/marker/colorbar/title/__init__.py                        |    2
 plotly/graph_objs/scattergl/marker/colorbar/title/_font.py                           |  354
 plotly/graph_objs/scattergl/selected/__init__.py                                     |    2
 plotly/graph_objs/scattergl/selected/_marker.py                                      |  103
 plotly/graph_objs/scattergl/selected/_textfont.py                                    |   89
 plotly/graph_objs/scattergl/unselected/__init__.py                                   |    2
 plotly/graph_objs/scattergl/unselected/_marker.py                                    |  103
 plotly/graph_objs/scattergl/unselected/_textfont.py                                  |   89
 plotly/graph_objs/scattermap/__init__.py                                             |   34
 plotly/graph_objs/scattermap/_cluster.py                                             |  233
 plotly/graph_objs/scattermap/_hoverlabel.py                                          |  268
 plotly/graph_objs/scattermap/_legendgrouptitle.py                                    |  104
 plotly/graph_objs/scattermap/_line.py                                                |  110
 plotly/graph_objs/scattermap/_marker.py                                              |  763
 plotly/graph_objs/scattermap/_selected.py                                            |   80
 plotly/graph_objs/scattermap/_textfont.py                                            |  208
 plotly/graph_objs/scattermap/_unselected.py                                          |   80
 plotly/graph_objs/scattermap/hoverlabel/__init__.py                                  |    9
 plotly/graph_objs/scattermap/hoverlabel/_font.py                                     |  349
 plotly/graph_objs/scattermap/legendgrouptitle/__init__.py                            |    9
 plotly/graph_objs/scattermap/legendgrouptitle/_font.py                               |  340
 plotly/graph_objs/scattermap/marker/__init__.py                                      |   12
 plotly/graph_objs/scattermap/marker/_colorbar.py                                     | 1709
 plotly/graph_objs/scattermap/marker/colorbar/__init__.py                             |   16
 plotly/graph_objs/scattermap/marker/colorbar/_tickfont.py                            |  340
 plotly/graph_objs/scattermap/marker/colorbar/_tickformatstop.py                      |  241
 plotly/graph_objs/scattermap/marker/colorbar/_title.py                               |  136
 plotly/graph_objs/scattermap/marker/colorbar/title/__init__.py                       |    9
 plotly/graph_objs/scattermap/marker/colorbar/title/_font.py                          |  340
 plotly/graph_objs/scattermap/selected/__init__.py                                    |    9
 plotly/graph_objs/scattermap/selected/_marker.py                                     |  133
 plotly/graph_objs/scattermap/unselected/__init__.py                                  |    9
 plotly/graph_objs/scattermap/unselected/_marker.py                                   |  142
 plotly/graph_objs/scattermapbox/__init__.py                                          |   36
 plotly/graph_objs/scattermapbox/_cluster.py                                          |  444
 plotly/graph_objs/scattermapbox/_hoverlabel.py                                       |  503
 plotly/graph_objs/scattermapbox/_legendgrouptitle.py                                 |  154
 plotly/graph_objs/scattermapbox/_line.py                                             |  166
 plotly/graph_objs/scattermapbox/_marker.py                                           | 1346
 plotly/graph_objs/scattermapbox/_selected.py                                         |  111
 plotly/graph_objs/scattermapbox/_stream.py                                           |  141
 plotly/graph_objs/scattermapbox/_textfont.py                                         |  229
 plotly/graph_objs/scattermapbox/_unselected.py                                       |  114
 plotly/graph_objs/scattermapbox/hoverlabel/__init__.py                               |    9
 plotly/graph_objs/scattermapbox/hoverlabel/_font.py                                  |  330
 plotly/graph_objs/scattermapbox/legendgrouptitle/__init__.py                         |    9
 plotly/graph_objs/scattermapbox/legendgrouptitle/_font.py                            |  227
 plotly/graph_objs/scattermapbox/marker/__init__.py                                   |   12
 plotly/graph_objs/scattermapbox/marker/_colorbar.py                                  | 2327
 plotly/graph_objs/scattermapbox/marker/colorbar/__init__.py                          |   16
 plotly/graph_objs/scattermapbox/marker/colorbar/_tickfont.py                         |  227
 plotly/graph_objs/scattermapbox/marker/colorbar/_tickformatstop.py                   |  283
 plotly/graph_objs/scattermapbox/marker/colorbar/_title.py                            |  210
 plotly/graph_objs/scattermapbox/marker/colorbar/title/__init__.py                    |    9
 plotly/graph_objs/scattermapbox/marker/colorbar/title/_font.py                       |  228
 plotly/graph_objs/scattermapbox/selected/__init__.py                                 |    9
 plotly/graph_objs/scattermapbox/selected/_marker.py                                  |  194
 plotly/graph_objs/scattermapbox/unselected/__init__.py                               |    9
 plotly/graph_objs/scattermapbox/unselected/_marker.py                                |  203
 plotly/graph_objs/scatterpolar/__init__.py                                           |    4
 plotly/graph_objs/scatterpolar/_hoverlabel.py                                        |  345
 plotly/graph_objs/scatterpolar/_legendgrouptitle.py                                  |   66
 plotly/graph_objs/scatterpolar/_line.py                                              |  165
 plotly/graph_objs/scatterpolar/_marker.py                                            |  861
 plotly/graph_objs/scatterpolar/_selected.py                                          |   57
 plotly/graph_objs/scatterpolar/_stream.py                                            |  141
 plotly/graph_objs/scatterpolar/_textfont.py                                          |  405
 plotly/graph_objs/scatterpolar/_unselected.py                                        |   61
 plotly/graph_objs/scatterpolar/hoverlabel/__init__.py                                |    2
 plotly/graph_objs/scatterpolar/hoverlabel/_font.py                                   |  405
 plotly/graph_objs/scatterpolar/legendgrouptitle/__init__.py                          |    2
 plotly/graph_objs/scatterpolar/legendgrouptitle/_font.py                             |  351
 plotly/graph_objs/scatterpolar/marker/__init__.py                                    |    2
 plotly/graph_objs/scatterpolar/marker/_colorbar.py                                   |  874
 plotly/graph_objs/scatterpolar/marker/_gradient.py                                   |  162
 plotly/graph_objs/scatterpolar/marker/_line.py                                       |  265
 plotly/graph_objs/scatterpolar/marker/colorbar/__init__.py                           |    2
 plotly/graph_objs/scatterpolar/marker/colorbar/_tickfont.py                          |  351
 plotly/graph_objs/scatterpolar/marker/colorbar/_tickformatstop.py                    |   68
 plotly/graph_objs/scatterpolar/marker/colorbar/_title.py                             |  116
 plotly/graph_objs/scatterpolar/marker/colorbar/title/__init__.py                     |    2
 plotly/graph_objs/scatterpolar/marker/colorbar/title/_font.py                        |  354
 plotly/graph_objs/scatterpolar/selected/__init__.py                                  |    2
 plotly/graph_objs/scatterpolar/selected/_marker.py                                   |  103
 plotly/graph_objs/scatterpolar/selected/_textfont.py                                 |   89
 plotly/graph_objs/scatterpolar/unselected/__init__.py                                |    2
 plotly/graph_objs/scatterpolar/unselected/_marker.py                                 |  103
 plotly/graph_objs/scatterpolar/unselected/_textfont.py                               |   89
 plotly/graph_objs/scatterpolargl/__init__.py                                         |    4
 plotly/graph_objs/scatterpolargl/_hoverlabel.py                                      |  345
 plotly/graph_objs/scatterpolargl/_legendgrouptitle.py                                |   66
 plotly/graph_objs/scatterpolargl/_line.py                                            |  103
 plotly/graph_objs/scatterpolargl/_marker.py                                          |  785
 plotly/graph_objs/scatterpolargl/_selected.py                                        |   57
 plotly/graph_objs/scatterpolargl/_stream.py                                          |  141
 plotly/graph_objs/scatterpolargl/_textfont.py                                        |  308
 plotly/graph_objs/scatterpolargl/_unselected.py                                      |   61
 plotly/graph_objs/scatterpolargl/hoverlabel/__init__.py                              |    2
 plotly/graph_objs/scatterpolargl/hoverlabel/_font.py                                 |  405
 plotly/graph_objs/scatterpolargl/legendgrouptitle/__init__.py                        |    2
 plotly/graph_objs/scatterpolargl/legendgrouptitle/_font.py                           |  351
 plotly/graph_objs/scatterpolargl/marker/__init__.py                                  |    2
 plotly/graph_objs/scatterpolargl/marker/_colorbar.py                                 |  875
 plotly/graph_objs/scatterpolargl/marker/_line.py                                     |  244
 plotly/graph_objs/scatterpolargl/marker/colorbar/__init__.py                         |    2
 plotly/graph_objs/scatterpolargl/marker/colorbar/_tickfont.py                        |  351
 plotly/graph_objs/scatterpolargl/marker/colorbar/_tickformatstop.py                  |   68
 plotly/graph_objs/scatterpolargl/marker/colorbar/_title.py                           |  116
 plotly/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py                   |    2
 plotly/graph_objs/scatterpolargl/marker/colorbar/title/_font.py                      |  354
 plotly/graph_objs/scatterpolargl/selected/__init__.py                                |    2
 plotly/graph_objs/scatterpolargl/selected/_marker.py                                 |  103
 plotly/graph_objs/scatterpolargl/selected/_textfont.py                               |   89
 plotly/graph_objs/scatterpolargl/unselected/__init__.py                              |    2
 plotly/graph_objs/scatterpolargl/unselected/_marker.py                               |  103
 plotly/graph_objs/scatterpolargl/unselected/_textfont.py                             |   89
 plotly/graph_objs/scattersmith/__init__.py                                           |    4
 plotly/graph_objs/scattersmith/_hoverlabel.py                                        |  345
 plotly/graph_objs/scattersmith/_legendgrouptitle.py                                  |   66
 plotly/graph_objs/scattersmith/_line.py                                              |  165
 plotly/graph_objs/scattersmith/_marker.py                                            |  861
 plotly/graph_objs/scattersmith/_selected.py                                          |   57
 plotly/graph_objs/scattersmith/_stream.py                                            |  141
 plotly/graph_objs/scattersmith/_textfont.py                                          |  405
 plotly/graph_objs/scattersmith/_unselected.py                                        |   61
 plotly/graph_objs/scattersmith/hoverlabel/__init__.py                                |    2
 plotly/graph_objs/scattersmith/hoverlabel/_font.py                                   |  405
 plotly/graph_objs/scattersmith/legendgrouptitle/__init__.py                          |    2
 plotly/graph_objs/scattersmith/legendgrouptitle/_font.py                             |  351
 plotly/graph_objs/scattersmith/marker/__init__.py                                    |    2
 plotly/graph_objs/scattersmith/marker/_colorbar.py                                   |  874
 plotly/graph_objs/scattersmith/marker/_gradient.py                                   |  162
 plotly/graph_objs/scattersmith/marker/_line.py                                       |  265
 plotly/graph_objs/scattersmith/marker/colorbar/__init__.py                           |    2
 plotly/graph_objs/scattersmith/marker/colorbar/_tickfont.py                          |  351
 plotly/graph_objs/scattersmith/marker/colorbar/_tickformatstop.py                    |   68
 plotly/graph_objs/scattersmith/marker/colorbar/_title.py                             |  116
 plotly/graph_objs/scattersmith/marker/colorbar/title/__init__.py                     |    2
 plotly/graph_objs/scattersmith/marker/colorbar/title/_font.py                        |  354
 plotly/graph_objs/scattersmith/selected/__init__.py                                  |    2
 plotly/graph_objs/scattersmith/selected/_marker.py                                   |  103
 plotly/graph_objs/scattersmith/selected/_textfont.py                                 |   89
 plotly/graph_objs/scattersmith/unselected/__init__.py                                |    2
 plotly/graph_objs/scattersmith/unselected/_marker.py                                 |  103
 plotly/graph_objs/scattersmith/unselected/_textfont.py                               |   89
 plotly/graph_objs/scatterternary/__init__.py                                         |    4
 plotly/graph_objs/scatterternary/_hoverlabel.py                                      |  345
 plotly/graph_objs/scatterternary/_legendgrouptitle.py                                |   66
 plotly/graph_objs/scatterternary/_line.py                                            |  165
 plotly/graph_objs/scatterternary/_marker.py                                          |  861
 plotly/graph_objs/scatterternary/_selected.py                                        |   57
 plotly/graph_objs/scatterternary/_stream.py                                          |  141
 plotly/graph_objs/scatterternary/_textfont.py                                        |  405
 plotly/graph_objs/scatterternary/_unselected.py                                      |   61
 plotly/graph_objs/scatterternary/hoverlabel/__init__.py                              |    2
 plotly/graph_objs/scatterternary/hoverlabel/_font.py                                 |  405
 plotly/graph_objs/scatterternary/legendgrouptitle/__init__.py                        |    2
 plotly/graph_objs/scatterternary/legendgrouptitle/_font.py                           |  351
 plotly/graph_objs/scatterternary/marker/__init__.py                                  |    2
 plotly/graph_objs/scatterternary/marker/_colorbar.py                                 |  875
 plotly/graph_objs/scatterternary/marker/_gradient.py                                 |  162
 plotly/graph_objs/scatterternary/marker/_line.py                                     |  265
 plotly/graph_objs/scatterternary/marker/colorbar/__init__.py                         |    2
 plotly/graph_objs/scatterternary/marker/colorbar/_tickfont.py                        |  351
 plotly/graph_objs/scatterternary/marker/colorbar/_tickformatstop.py                  |   68
 plotly/graph_objs/scatterternary/marker/colorbar/_title.py                           |  116
 plotly/graph_objs/scatterternary/marker/colorbar/title/__init__.py                   |    2
 plotly/graph_objs/scatterternary/marker/colorbar/title/_font.py                      |  354
 plotly/graph_objs/scatterternary/selected/__init__.py                                |    2
 plotly/graph_objs/scatterternary/selected/_marker.py                                 |  103
 plotly/graph_objs/scatterternary/selected/_textfont.py                               |   89
 plotly/graph_objs/scatterternary/unselected/__init__.py                              |    2
 plotly/graph_objs/scatterternary/unselected/_marker.py                               |  103
 plotly/graph_objs/scatterternary/unselected/_textfont.py                             |   89
 plotly/graph_objs/splom/__init__.py                                                  |    4
 plotly/graph_objs/splom/_diagonal.py                                                 |   40
 plotly/graph_objs/splom/_dimension.py                                                |  129
 plotly/graph_objs/splom/_hoverlabel.py                                               |  345
 plotly/graph_objs/splom/_legendgrouptitle.py                                         |   66
 plotly/graph_objs/splom/_marker.py                                                   |  785
 plotly/graph_objs/splom/_selected.py                                                 |   45
 plotly/graph_objs/splom/_stream.py                                                   |  140
 plotly/graph_objs/splom/_unselected.py                                               |   48
 plotly/graph_objs/splom/dimension/__init__.py                                        |    2
 plotly/graph_objs/splom/dimension/_axis.py                                           |   47
 plotly/graph_objs/splom/hoverlabel/__init__.py                                       |    2
 plotly/graph_objs/splom/hoverlabel/_font.py                                          |  405
 plotly/graph_objs/splom/legendgrouptitle/__init__.py                                 |    2
 plotly/graph_objs/splom/legendgrouptitle/_font.py                                    |  351
 plotly/graph_objs/splom/marker/__init__.py                                           |    2
 plotly/graph_objs/splom/marker/_colorbar.py                                          |  870
 plotly/graph_objs/splom/marker/_line.py                                              |  244
 plotly/graph_objs/splom/marker/colorbar/__init__.py                                  |    2
 plotly/graph_objs/splom/marker/colorbar/_tickfont.py                                 |  351
 plotly/graph_objs/splom/marker/colorbar/_tickformatstop.py                           |   68
 plotly/graph_objs/splom/marker/colorbar/_title.py                                    |  116
 plotly/graph_objs/splom/marker/colorbar/title/__init__.py                            |    2
 plotly/graph_objs/splom/marker/colorbar/title/_font.py                               |  354
 plotly/graph_objs/splom/selected/__init__.py                                         |    2
 plotly/graph_objs/splom/selected/_marker.py                                          |  103
 plotly/graph_objs/splom/unselected/__init__.py                                       |    2
 plotly/graph_objs/splom/unselected/_marker.py                                        |  103
 plotly/graph_objs/streamtube/__init__.py                                             |    4
 plotly/graph_objs/streamtube/_colorbar.py                                            |  869
 plotly/graph_objs/streamtube/_hoverlabel.py                                          |  345
 plotly/graph_objs/streamtube/_legendgrouptitle.py                                    |   66
 plotly/graph_objs/streamtube/_lighting.py                                            |   78
 plotly/graph_objs/streamtube/_lightposition.py                                       |   50
 plotly/graph_objs/streamtube/_starts.py                                              |  154
 plotly/graph_objs/streamtube/_stream.py                                              |  141
 plotly/graph_objs/streamtube/colorbar/__init__.py                                    |    2
 plotly/graph_objs/streamtube/colorbar/_tickfont.py                                   |  351
 plotly/graph_objs/streamtube/colorbar/_tickformatstop.py                             |   68
 plotly/graph_objs/streamtube/colorbar/_title.py                                      |  116
 plotly/graph_objs/streamtube/colorbar/title/__init__.py                              |    2
 plotly/graph_objs/streamtube/colorbar/title/_font.py                                 |  354
 plotly/graph_objs/streamtube/hoverlabel/__init__.py                                  |    2
 plotly/graph_objs/streamtube/hoverlabel/_font.py                                     |  405
 plotly/graph_objs/streamtube/legendgrouptitle/__init__.py                            |    2
 plotly/graph_objs/streamtube/legendgrouptitle/_font.py                               |  351
 plotly/graph_objs/sunburst/__init__.py                                               |    4
 plotly/graph_objs/sunburst/_domain.py                                                |   73
 plotly/graph_objs/sunburst/_hoverlabel.py                                            |  345
 plotly/graph_objs/sunburst/_insidetextfont.py                                        |  405
 plotly/graph_objs/sunburst/_leaf.py                                                  |   36
 plotly/graph_objs/sunburst/_legendgrouptitle.py                                      |   66
 plotly/graph_objs/sunburst/_marker.py                                                |  536
 plotly/graph_objs/sunburst/_outsidetextfont.py                                       |  405
 plotly/graph_objs/sunburst/_root.py                                                  |   89
 plotly/graph_objs/sunburst/_stream.py                                                |  141
 plotly/graph_objs/sunburst/_textfont.py                                              |  405
 plotly/graph_objs/sunburst/hoverlabel/__init__.py                                    |    2
 plotly/graph_objs/sunburst/hoverlabel/_font.py                                       |  405
 plotly/graph_objs/sunburst/legendgrouptitle/__init__.py                              |    2
 plotly/graph_objs/sunburst/legendgrouptitle/_font.py                                 |  351
 plotly/graph_objs/sunburst/marker/__init__.py                                        |    2
 plotly/graph_objs/sunburst/marker/_colorbar.py                                       |  870
 plotly/graph_objs/sunburst/marker/_line.py                                           |  162
 plotly/graph_objs/sunburst/marker/_pattern.py                                        |  379
 plotly/graph_objs/sunburst/marker/colorbar/__init__.py                               |    2
 plotly/graph_objs/sunburst/marker/colorbar/_tickfont.py                              |  351
 plotly/graph_objs/sunburst/marker/colorbar/_tickformatstop.py                        |   68
 plotly/graph_objs/sunburst/marker/colorbar/_title.py                                 |  116
 plotly/graph_objs/sunburst/marker/colorbar/title/__init__.py                         |    2
 plotly/graph_objs/sunburst/marker/colorbar/title/_font.py                            |  354
 plotly/graph_objs/surface/__init__.py                                                |    4
 plotly/graph_objs/surface/_colorbar.py                                               |  869
 plotly/graph_objs/surface/_contours.py                                               |  158
 plotly/graph_objs/surface/_hoverlabel.py                                             |  345
 plotly/graph_objs/surface/_legendgrouptitle.py                                       |   66
 plotly/graph_objs/surface/_lighting.py                                               |   64
 plotly/graph_objs/surface/_lightposition.py                                          |   50
 plotly/graph_objs/surface/_stream.py                                                 |  141
 plotly/graph_objs/surface/colorbar/__init__.py                                       |    2
 plotly/graph_objs/surface/colorbar/_tickfont.py                                      |  351
 plotly/graph_objs/surface/colorbar/_tickformatstop.py                                |   68
 plotly/graph_objs/surface/colorbar/_title.py                                         |  116
 plotly/graph_objs/surface/colorbar/title/__init__.py                                 |    2
 plotly/graph_objs/surface/colorbar/title/_font.py                                    |  354
 plotly/graph_objs/surface/contours/__init__.py                                       |    2
 plotly/graph_objs/surface/contours/_x.py                                             |  245
 plotly/graph_objs/surface/contours/_y.py                                             |  245
 plotly/graph_objs/surface/contours/_z.py                                             |  245
 plotly/graph_objs/surface/contours/x/__init__.py                                     |    2
 plotly/graph_objs/surface/contours/x/_project.py                                     |   62
 plotly/graph_objs/surface/contours/y/__init__.py                                     |    2
 plotly/graph_objs/surface/contours/y/_project.py                                     |   62
 plotly/graph_objs/surface/contours/z/__init__.py                                     |    2
 plotly/graph_objs/surface/contours/z/_project.py                                     |   62
 plotly/graph_objs/surface/hoverlabel/__init__.py                                     |    2
 plotly/graph_objs/surface/hoverlabel/_font.py                                        |  405
 plotly/graph_objs/surface/legendgrouptitle/__init__.py                               |    2
 plotly/graph_objs/surface/legendgrouptitle/_font.py                                  |  351
 plotly/graph_objs/table/__init__.py                                                  |    4
 plotly/graph_objs/table/_cells.py                                                    |  308
 plotly/graph_objs/table/_domain.py                                                   |   73
 plotly/graph_objs/table/_header.py                                                   |  308
 plotly/graph_objs/table/_hoverlabel.py                                               |  345
 plotly/graph_objs/table/_legendgrouptitle.py                                         |   66
 plotly/graph_objs/table/_stream.py                                                   |  140
 plotly/graph_objs/table/cells/__init__.py                                            |    2
 plotly/graph_objs/table/cells/_fill.py                                               |  123
 plotly/graph_objs/table/cells/_font.py                                               |  405
 plotly/graph_objs/table/cells/_line.py                                               |  162
 plotly/graph_objs/table/header/__init__.py                                           |    2
 plotly/graph_objs/table/header/_fill.py                                              |  123
 plotly/graph_objs/table/header/_font.py                                              |  405
 plotly/graph_objs/table/header/_line.py                                              |  162
 plotly/graph_objs/table/hoverlabel/__init__.py                                       |    2
 plotly/graph_objs/table/hoverlabel/_font.py                                          |  405
 plotly/graph_objs/table/legendgrouptitle/__init__.py                                 |    2
 plotly/graph_objs/table/legendgrouptitle/_font.py                                    |  351
 plotly/graph_objs/treemap/__init__.py                                                |    4
 plotly/graph_objs/treemap/_domain.py                                                 |   73
 plotly/graph_objs/treemap/_hoverlabel.py                                             |  345
 plotly/graph_objs/treemap/_insidetextfont.py                                         |  405
 plotly/graph_objs/treemap/_legendgrouptitle.py                                       |   66
 plotly/graph_objs/treemap/_marker.py                                                 |  568
 plotly/graph_objs/treemap/_outsidetextfont.py                                        |  405
 plotly/graph_objs/treemap/_pathbar.py                                                |  113
 plotly/graph_objs/treemap/_root.py                                                   |   89
 plotly/graph_objs/treemap/_stream.py                                                 |  141
 plotly/graph_objs/treemap/_textfont.py                                               |  405
 plotly/graph_objs/treemap/_tiling.py                                                 |   57
 plotly/graph_objs/treemap/hoverlabel/__init__.py                                     |    2
 plotly/graph_objs/treemap/hoverlabel/_font.py                                        |  405
 plotly/graph_objs/treemap/legendgrouptitle/__init__.py                               |    2
 plotly/graph_objs/treemap/legendgrouptitle/_font.py                                  |  351
 plotly/graph_objs/treemap/marker/__init__.py                                         |    2
 plotly/graph_objs/treemap/marker/_colorbar.py                                        |  870
 plotly/graph_objs/treemap/marker/_line.py                                            |  162
 plotly/graph_objs/treemap/marker/_pad.py                                             |   57
 plotly/graph_objs/treemap/marker/_pattern.py                                         |  379
 plotly/graph_objs/treemap/marker/colorbar/__init__.py                                |    2
 plotly/graph_objs/treemap/marker/colorbar/_tickfont.py                               |  351
 plotly/graph_objs/treemap/marker/colorbar/_tickformatstop.py                         |   68
 plotly/graph_objs/treemap/marker/colorbar/_title.py                                  |  116
 plotly/graph_objs/treemap/marker/colorbar/title/__init__.py                          |    2
 plotly/graph_objs/treemap/marker/colorbar/title/_font.py                             |  354
 plotly/graph_objs/treemap/pathbar/__init__.py                                        |    2
 plotly/graph_objs/treemap/pathbar/_textfont.py                                       |  405
 plotly/graph_objs/violin/__init__.py                                                 |    4
 plotly/graph_objs/violin/_box.py                                                     |  121
 plotly/graph_objs/violin/_hoverlabel.py                                              |  345
 plotly/graph_objs/violin/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/violin/_line.py                                                    |   96
 plotly/graph_objs/violin/_marker.py                                                  |  203
 plotly/graph_objs/violin/_meanline.py                                                |  107
 plotly/graph_objs/violin/_selected.py                                                |   45
 plotly/graph_objs/violin/_stream.py                                                  |  140
 plotly/graph_objs/violin/_unselected.py                                              |   48
 plotly/graph_objs/violin/box/__init__.py                                             |    2
 plotly/graph_objs/violin/box/_line.py                                                |   96
 plotly/graph_objs/violin/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/violin/hoverlabel/_font.py                                         |  405
 plotly/graph_objs/violin/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/violin/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/violin/marker/__init__.py                                          |    2
 plotly/graph_objs/violin/marker/_line.py                                             |  163
 plotly/graph_objs/violin/selected/__init__.py                                        |    2
 plotly/graph_objs/violin/selected/_marker.py                                         |  103
 plotly/graph_objs/violin/unselected/__init__.py                                      |    2
 plotly/graph_objs/violin/unselected/_marker.py                                       |  103
 plotly/graph_objs/volume/__init__.py                                                 |    4
 plotly/graph_objs/volume/_caps.py                                                    |   98
 plotly/graph_objs/volume/_colorbar.py                                                |  869
 plotly/graph_objs/volume/_contour.py                                                 |  107
 plotly/graph_objs/volume/_hoverlabel.py                                              |  345
 plotly/graph_objs/volume/_legendgrouptitle.py                                        |   66
 plotly/graph_objs/volume/_lighting.py                                                |   78
 plotly/graph_objs/volume/_lightposition.py                                           |   50
 plotly/graph_objs/volume/_slices.py                                                  |  113
 plotly/graph_objs/volume/_spaceframe.py                                              |   47
 plotly/graph_objs/volume/_stream.py                                                  |  140
 plotly/graph_objs/volume/_surface.py                                                 |   63
 plotly/graph_objs/volume/caps/__init__.py                                            |    2
 plotly/graph_objs/volume/caps/_x.py                                                  |   47
 plotly/graph_objs/volume/caps/_y.py                                                  |   47
 plotly/graph_objs/volume/caps/_z.py                                                  |   47
 plotly/graph_objs/volume/colorbar/__init__.py                                        |    2
 plotly/graph_objs/volume/colorbar/_tickfont.py                                       |  351
 plotly/graph_objs/volume/colorbar/_tickformatstop.py                                 |   68
 plotly/graph_objs/volume/colorbar/_title.py                                          |  116
 plotly/graph_objs/volume/colorbar/title/__init__.py                                  |    2
 plotly/graph_objs/volume/colorbar/title/_font.py                                     |  354
 plotly/graph_objs/volume/hoverlabel/__init__.py                                      |    2
 plotly/graph_objs/volume/hoverlabel/_font.py                                         |  405
 plotly/graph_objs/volume/legendgrouptitle/__init__.py                                |    2
 plotly/graph_objs/volume/legendgrouptitle/_font.py                                   |  351
 plotly/graph_objs/volume/slices/__init__.py                                          |    2
 plotly/graph_objs/volume/slices/_x.py                                                |   97
 plotly/graph_objs/volume/slices/_y.py                                                |   97
 plotly/graph_objs/volume/slices/_z.py                                                |   97
 plotly/graph_objs/waterfall/__init__.py                                              |    4
 plotly/graph_objs/waterfall/_connector.py                                            |   66
 plotly/graph_objs/waterfall/_decreasing.py                                           |   45
 plotly/graph_objs/waterfall/_hoverlabel.py                                           |  345
 plotly/graph_objs/waterfall/_increasing.py                                           |   45
 plotly/graph_objs/waterfall/_insidetextfont.py                                       |  405
 plotly/graph_objs/waterfall/_legendgrouptitle.py                                     |   66
 plotly/graph_objs/waterfall/_outsidetextfont.py                                      |  405
 plotly/graph_objs/waterfall/_stream.py                                               |  141
 plotly/graph_objs/waterfall/_textfont.py                                             |  405
 plotly/graph_objs/waterfall/_totals.py                                               |   46
 plotly/graph_objs/waterfall/connector/__init__.py                                    |    2
 plotly/graph_objs/waterfall/connector/_line.py                                       |  103
 plotly/graph_objs/waterfall/decreasing/__init__.py                                   |    2
 plotly/graph_objs/waterfall/decreasing/_marker.py                                    |  103
 plotly/graph_objs/waterfall/decreasing/marker/__init__.py                            |    2
 plotly/graph_objs/waterfall/decreasing/marker/_line.py                               |   96
 plotly/graph_objs/waterfall/hoverlabel/__init__.py                                   |    2
 plotly/graph_objs/waterfall/hoverlabel/_font.py                                      |  405
 plotly/graph_objs/waterfall/increasing/__init__.py                                   |    2
 plotly/graph_objs/waterfall/increasing/_marker.py                                    |  103
 plotly/graph_objs/waterfall/increasing/marker/__init__.py                            |    2
 plotly/graph_objs/waterfall/increasing/marker/_line.py                               |   96
 plotly/graph_objs/waterfall/legendgrouptitle/__init__.py                             |    2
 plotly/graph_objs/waterfall/legendgrouptitle/_font.py                                |  351
 plotly/graph_objs/waterfall/totals/__init__.py                                       |    2
 plotly/graph_objs/waterfall/totals/_marker.py                                        |  105
 plotly/graph_objs/waterfall/totals/marker/__init__.py                                |    2
 plotly/graph_objs/waterfall/totals/marker/_line.py                                   |   96
 plotly/grid_objs.py                                                                  |    3
 plotly/io/__init__.py                                                                |   25
 plotly/io/_base_renderers.py                                                         |  165
 plotly/io/_defaults.py                                                               |   22
 plotly/io/_html.py                                                                   |  128
 plotly/io/_json.py                                                                   |   32
 plotly/io/_kaleido.py                                                                |  681
 plotly/io/_orca.py                                                                   | 1712
 plotly/io/_renderers.py                                                              |   91
 plotly/io/_sg_scraper.py                                                             |  333
 plotly/io/_templates.py                                                              |   11
 plotly/io/_utils.py                                                                  |   49
 plotly/io/base_renderers.py                                                          |    1
 plotly/io/json.py                                                                    |    1
 plotly/io/kaleido.py                                                                 |    6
 plotly/io/orca.py                                                                    |    8
 plotly/io/sg_scraper.py                                                              |    2
 plotly/matplotlylib/__init__.py                                                      |    3
 plotly/matplotlylib/mplexporter/__init__.py                                          |    1
 plotly/matplotlylib/mplexporter/exporter.py                                          |    3
 plotly/matplotlylib/mplexporter/renderers/__init__.py                                |    2
 plotly/matplotlylib/mplexporter/renderers/fake_renderer.py                           |    2
 plotly/matplotlylib/mplexporter/tests/__init__.py                                    |    3
 plotly/matplotlylib/mplexporter/tests/test_basic.py                                  |  257
 plotly/matplotlylib/mplexporter/tests/test_utils.py                                  |   41
 plotly/matplotlylib/mplexporter/tools.py                                             |    2
 plotly/matplotlylib/mplexporter/utils.py                                             |   11
 plotly/matplotlylib/mpltools.py                                                      |   62
 plotly/matplotlylib/renderer.py                                                      |  246
 plotly/matplotlylib/tests/__init__.py                                                |    4
 plotly/matplotlylib/tests/test_renderer.py                                           |  353
 plotly/missing_anywidget.py                                                          |   13
 plotly/missing_ipywidgets.py                                                         |   15
 plotly/offline/__init__.py                                                           |    2
 plotly/offline/_plotlyjs_version.py                                                  |    4
 plotly/offline/offline.py                                                            |  130
 plotly/optional_imports.py                                                           |    2
 plotly/package_data/templates/ggplot2.json                                           |    2
 plotly/package_data/templates/plotly.json                                            |    2
 plotly/package_data/templates/plotly_dark.json                                       |    2
 plotly/package_data/templates/plotly_white.json                                      |    2
 plotly/package_data/templates/seaborn.json                                           |    2
 plotly/package_data/templates/simple_white.json                                      |    2
 plotly/package_data/widgetbundle.js                                                  | 3637
 plotly/plotly/__init__.py                                                            |    3
 plotly/plotly/chunked_requests.py                                                    |    3
 plotly/presentation_objs.py                                                          |    3
 plotly/serializers.py                                                                |    1
 plotly/session.py                                                                    |    3
 plotly/shapeannotation.py                                                            |   44
 plotly/subplots.py                                                                   |    8
 plotly/tools.py                                                                      |  130
 plotly/utils.py                                                                      |    5
 plotly/validator_cache.py                                                            |   46
 plotly/validators/__init__.py                                                        |  115
 plotly/validators/_bar.py                                                            |  427
 plotly/validators/_barpolar.py                                                       |  257
 plotly/validators/_box.py                                                            |  510
 plotly/validators/_candlestick.py                                                    |  264
 plotly/validators/_carpet.py                                                         |  190
 plotly/validators/_choropleth.py                                                     |  302
 plotly/validators/_choroplethmapbox.py                                               |  303
 plotly/validators/_cone.py                                                           |  395
 plotly/validators/_contour.py                                                        |  440
 plotly/validators/_contourcarpet.py                                                  |  280
 plotly/validators/_data.py                                                           |   61
 plotly/validators/_densitymapbox.py                                                  |  298
 plotly/validators/_frames.py                                                         |   39
 plotly/validators/_funnel.py                                                         |  410
 plotly/validators/_funnelarea.py                                                     |  272
 plotly/validators/_heatmap.py                                                        |  421
 plotly/validators/_heatmapgl.py                                                      |  253
 plotly/validators/_histogram.py                                                      |  413
 plotly/validators/_histogram2d.py                                                    |  418
 plotly/validators/_histogram2dcontour.py                                             |  440
 plotly/validators/_icicle.py                                                         |  293
 plotly/validators/_image.py                                                          |  246
 plotly/validators/_indicator.py                                                      |  140
 plotly/validators/_isosurface.py                                                     |  368
 plotly/validators/_layout.py                                                         |  552
 plotly/validators/_mesh3d.py                                                         |  446
 plotly/validators/_ohlc.py                                                           |  260
 plotly/validators/_parcats.py                                                        |  171
 plotly/validators/_parcoords.py                                                      |  151
 plotly/validators/_pie.py                                                            |  314
 plotly/validators/_pointcloud.py                                                     |  212
 plotly/validators/_sankey.py                                                         |  164
 plotly/validators/_scatter.py                                                        |  485
 plotly/validators/_scatter3d.py                                                      |  335
 plotly/validators/_scattercarpet.py                                                  |  309
 plotly/validators/_scattergeo.py                                                     |  321
 plotly/validators/_scattergl.py                                                      |  396
 plotly/validators/_scattermapbox.py                                                  |  298
 plotly/validators/_scatterpolar.py                                                   |  323
 plotly/validators/_scatterpolargl.py                                                 |  326
 plotly/validators/_scattersmith.py                                                   |  309
 plotly/validators/_scatterternary.py                                                 |  334
 plotly/validators/_splom.py                                                          |  270
 plotly/validators/_streamtube.py                                                     |  376
 plotly/validators/_sunburst.py                                                       |  300
 plotly/validators/_surface.py                                                        |  366
 plotly/validators/_table.py                                                          |  150
 plotly/validators/_treemap.py                                                        |  290
 plotly/validators/_validators.json                                                   |111483 ++
 plotly/validators/_violin.py                                                         |  396
 plotly/validators/_volume.py                                                         |  378
 plotly/validators/_waterfall.py                                                      |  429
 plotly/validators/bar/__init__.py                                                    |  159
 plotly/validators/bar/_alignmentgroup.py                                             |   11
 plotly/validators/bar/_base.py                                                       |   12
 plotly/validators/bar/_basesrc.py                                                    |   11
 plotly/validators/bar/_cliponaxis.py                                                 |   11
 plotly/validators/bar/_constraintext.py                                              |   12
 plotly/validators/bar/_customdata.py                                                 |   11
 plotly/validators/bar/_customdatasrc.py                                              |   11
 plotly/validators/bar/_dx.py                                                         |   12
 plotly/validators/bar/_dy.py                                                         |   12
 plotly/validators/bar/_error_x.py                                                    |   73
 plotly/validators/bar/_error_y.py                                                    |   71
 plotly/validators/bar/_hoverinfo.py                                                  |   14
 plotly/validators/bar/_hoverinfosrc.py                                               |   11
 plotly/validators/bar/_hoverlabel.py                                                 |   51
 plotly/validators/bar/_hovertemplate.py                                              |   12
 plotly/validators/bar/_hovertemplatesrc.py                                           |   11
 plotly/validators/bar/_hovertext.py                                                  |   12
 plotly/validators/bar/_hovertextsrc.py                                               |   11
 plotly/validators/bar/_ids.py                                                        |   12
 plotly/validators/bar/_idssrc.py                                                     |   11
 plotly/validators/bar/_insidetextanchor.py                                           |   12
 plotly/validators/bar/_insidetextfont.py                                             |   46
 plotly/validators/bar/_legend.py                                                     |   12
 plotly/validators/bar/_legendgroup.py                                                |   11
 plotly/validators/bar/_legendgrouptitle.py                                           |   20
 plotly/validators/bar/_legendrank.py                                                 |   11
 plotly/validators/bar/_legendwidth.py                                                |   12
 plotly/validators/bar/_marker.py                                                     |  119
 plotly/validators/bar/_meta.py                                                       |   12
 plotly/validators/bar/_metasrc.py                                                    |   11
 plotly/validators/bar/_name.py                                                       |   11
 plotly/validators/bar/_offset.py                                                     |   12
 plotly/validators/bar/_offsetgroup.py                                                |   11
 plotly/validators/bar/_offsetsrc.py                                                  |   11
 plotly/validators/bar/_opacity.py                                                    |   13
 plotly/validators/bar/_orientation.py                                                |   12
 plotly/validators/bar/_outsidetextfont.py                                            |   46
 plotly/validators/bar/_selected.py                                                   |   23
 plotly/validators/bar/_selectedpoints.py                                             |   11
 plotly/validators/bar/_showlegend.py                                                 |   11
 plotly/validators/bar/_stream.py                                                     |   25
 plotly/validators/bar/_text.py                                                       |   12
 plotly/validators/bar/_textangle.py                                                  |   11
 plotly/validators/bar/_textfont.py                                                   |   46
 plotly/validators/bar/_textposition.py                                               |   13
 plotly/validators/bar/_textpositionsrc.py                                            |   11
 plotly/validators/bar/_textsrc.py                                                    |   11
 plotly/validators/bar/_texttemplate.py                                               |   12
 plotly/validators/bar/_texttemplatesrc.py                                            |   11
 plotly/validators/bar/_uid.py                                                        |   12
 plotly/validators/bar/_uirevision.py                                                 |   11
 plotly/validators/bar/_unselected.py                                                 |   24
 plotly/validators/bar/_visible.py                                                    |   12
 plotly/validators/bar/_width.py                                                      |   13
 plotly/validators/bar/_widthsrc.py                                                   |   11
 plotly/validators/bar/_x.py                                                          |   12
 plotly/validators/bar/_x0.py                                                         |   12
 plotly/validators/bar/_xaxis.py                                                      |   12
 plotly/validators/bar/_xcalendar.py                                                  |   32
 plotly/validators/bar/_xhoverformat.py                                               |   11
 plotly/validators/bar/_xperiod.py                                                    |   11
 plotly/validators/bar/_xperiod0.py                                                   |   11
 plotly/validators/bar/_xperiodalignment.py                                           |   12
 plotly/validators/bar/_xsrc.py                                                       |   11
 plotly/validators/bar/_y.py                                                          |   12
 plotly/validators/bar/_y0.py                                                         |   12
 plotly/validators/bar/_yaxis.py                                                      |   12
 plotly/validators/bar/_ycalendar.py                                                  |   32
 plotly/validators/bar/_yhoverformat.py                                               |   11
 plotly/validators/bar/_yperiod.py                                                    |   11
 plotly/validators/bar/_yperiod0.py                                                   |   11
 plotly/validators/bar/_yperiodalignment.py                                           |   12
 plotly/validators/bar/_ysrc.py                                                       |   11
 plotly/validators/bar/error_x/__init__.py                                            |   43
 plotly/validators/bar/error_x/_array.py                                              |   11
 plotly/validators/bar/error_x/_arrayminus.py                                         |   11
 plotly/validators/bar/error_x/_arrayminussrc.py                                      |   13
 plotly/validators/bar/error_x/_arraysrc.py                                           |   11
 plotly/validators/bar/error_x/_color.py                                              |   11
 plotly/validators/bar/error_x/_copy_ystyle.py                                        |   11
 plotly/validators/bar/error_x/_symmetric.py                                          |   11
 plotly/validators/bar/error_x/_thickness.py                                          |   12
 plotly/validators/bar/error_x/_traceref.py                                           |   12
 plotly/validators/bar/error_x/_tracerefminus.py                                      |   14
 plotly/validators/bar/error_x/_type.py                                               |   12
 plotly/validators/bar/error_x/_value.py                                              |   12
 plotly/validators/bar/error_x/_valueminus.py                                         |   12
 plotly/validators/bar/error_x/_visible.py                                            |   11
 plotly/validators/bar/error_x/_width.py                                              |   12
 plotly/validators/bar/error_y/__init__.py                                            |   41
 plotly/validators/bar/error_y/_array.py                                              |   11
 plotly/validators/bar/error_y/_arrayminus.py                                         |   11
 plotly/validators/bar/error_y/_arrayminussrc.py                                      |   13
 plotly/validators/bar/error_y/_arraysrc.py                                           |   11
 plotly/validators/bar/error_y/_color.py                                              |   11
 plotly/validators/bar/error_y/_symmetric.py                                          |   11
 plotly/validators/bar/error_y/_thickness.py                                          |   12
 plotly/validators/bar/error_y/_traceref.py                                           |   12
 plotly/validators/bar/error_y/_tracerefminus.py                                      |   14
 plotly/validators/bar/error_y/_type.py                                               |   12
 plotly/validators/bar/error_y/_value.py                                              |   12
 plotly/validators/bar/error_y/_valueminus.py                                         |   12
 plotly/validators/bar/error_y/_visible.py                                            |   11
 plotly/validators/bar/error_y/_width.py                                              |   12
 plotly/validators/bar/hoverlabel/__init__.py                                         |   31
 plotly/validators/bar/hoverlabel/_align.py                                           |   13
 plotly/validators/bar/hoverlabel/_alignsrc.py                                        |   11
 plotly/validators/bar/hoverlabel/_bgcolor.py                                         |   12
 plotly/validators/bar/hoverlabel/_bgcolorsrc.py                                      |   13
 plotly/validators/bar/hoverlabel/_bordercolor.py                                     |   14
 plotly/validators/bar/hoverlabel/_bordercolorsrc.py                                  |   13
 plotly/validators/bar/hoverlabel/_font.py                                            |   46
 plotly/validators/bar/hoverlabel/_namelength.py                                      |   15
 plotly/validators/bar/hoverlabel/_namelengthsrc.py                                   |   13
 plotly/validators/bar/hoverlabel/font/__init__.py                                    |   25
 plotly/validators/bar/hoverlabel/font/_color.py                                      |   14
 plotly/validators/bar/hoverlabel/font/_colorsrc.py                                   |   13
 plotly/validators/bar/hoverlabel/font/_family.py                                     |   16
 plotly/validators/bar/hoverlabel/font/_familysrc.py                                  |   13
 plotly/validators/bar/hoverlabel/font/_size.py                                       |   13
 plotly/validators/bar/hoverlabel/font/_sizesrc.py                                    |   13
 plotly/validators/bar/insidetextfont/__init__.py                                     |   25
 plotly/validators/bar/insidetextfont/_color.py                                       |   12
 plotly/validators/bar/insidetextfont/_colorsrc.py                                    |   13
 plotly/validators/bar/insidetextfont/_family.py                                      |   16
 plotly/validators/bar/insidetextfont/_familysrc.py                                   |   13
 plotly/validators/bar/insidetextfont/_size.py                                        |   13
 plotly/validators/bar/insidetextfont/_sizesrc.py                                     |   13
 plotly/validators/bar/legendgrouptitle/__init__.py                                   |   12
 plotly/validators/bar/legendgrouptitle/_font.py                                      |   39
 plotly/validators/bar/legendgrouptitle/_text.py                                      |   13
 plotly/validators/bar/legendgrouptitle/font/__init__.py                              |   15
 plotly/validators/bar/legendgrouptitle/font/_color.py                                |   13
 plotly/validators/bar/legendgrouptitle/font/_family.py                               |   15
 plotly/validators/bar/legendgrouptitle/font/_size.py                                 |   14
 plotly/validators/bar/marker/__init__.py                                             |   47
 plotly/validators/bar/marker/_autocolorscale.py                                      |   14
 plotly/validators/bar/marker/_cauto.py                                               |   12
 plotly/validators/bar/marker/_cmax.py                                                |   12
 plotly/validators/bar/marker/_cmid.py                                                |   12
 plotly/validators/bar/marker/_cmin.py                                                |   12
 plotly/validators/bar/marker/_color.py                                               |   13
 plotly/validators/bar/marker/_coloraxis.py                                           |   13
 plotly/validators/bar/marker/_colorbar.py                                            |  294
 plotly/validators/bar/marker/_colorscale.py                                          |   12
 plotly/validators/bar/marker/_colorsrc.py                                            |   11
 plotly/validators/bar/marker/_cornerradius.py                                        |   11
 plotly/validators/bar/marker/_line.py                                                |  105
 plotly/validators/bar/marker/_opacity.py                                             |   14
 plotly/validators/bar/marker/_opacitysrc.py                                          |   11
 plotly/validators/bar/marker/_pattern.py                                             |   64
 plotly/validators/bar/marker/_reversescale.py                                        |   11
 plotly/validators/bar/marker/_showscale.py                                           |   11
 plotly/validators/bar/marker/colorbar/__init__.py                                    |  111
 plotly/validators/bar/marker/colorbar/_bgcolor.py                                    |   13
 plotly/validators/bar/marker/colorbar/_bordercolor.py                                |   13
 plotly/validators/bar/marker/colorbar/_borderwidth.py                                |   14
 plotly/validators/bar/marker/colorbar/_dtick.py                                      |   14
 plotly/validators/bar/marker/colorbar/_exponentformat.py                             |   14
 plotly/validators/bar/marker/colorbar/_labelalias.py                                 |   13
 plotly/validators/bar/marker/colorbar/_len.py                                        |   12
 plotly/validators/bar/marker/colorbar/_lenmode.py                                    |   14
 plotly/validators/bar/marker/colorbar/_minexponent.py                                |   14
 plotly/validators/bar/marker/colorbar/_nticks.py                                     |   14
 plotly/validators/bar/marker/colorbar/_orientation.py                                |   14
 plotly/validators/bar/marker/colorbar/_outlinecolor.py                               |   13
 plotly/validators/bar/marker/colorbar/_outlinewidth.py                               |   14
 plotly/validators/bar/marker/colorbar/_separatethousands.py                          |   16
 plotly/validators/bar/marker/colorbar/_showexponent.py                               |   14
 plotly/validators/bar/marker/colorbar/_showticklabels.py                             |   13
 plotly/validators/bar/marker/colorbar/_showtickprefix.py                             |   14
 plotly/validators/bar/marker/colorbar/_showticksuffix.py                             |   14
 plotly/validators/bar/marker/colorbar/_thickness.py                                  |   14
 plotly/validators/bar/marker/colorbar/_thicknessmode.py                              |   14
 plotly/validators/bar/marker/colorbar/_tick0.py                                      |   14
 plotly/validators/bar/marker/colorbar/_tickangle.py                                  |   13
 plotly/validators/bar/marker/colorbar/_tickcolor.py                                  |   13
 plotly/validators/bar/marker/colorbar/_tickfont.py                                   |   39
 plotly/validators/bar/marker/colorbar/_tickformat.py                                 |   13
 plotly/validators/bar/marker/colorbar/_tickformatstopdefaults.py                     |   21
 plotly/validators/bar/marker/colorbar/_tickformatstops.py                            |   51
 plotly/validators/bar/marker/colorbar/_ticklabeloverflow.py                          |   17
 plotly/validators/bar/marker/colorbar/_ticklabelposition.py                          |   31
 plotly/validators/bar/marker/colorbar/_ticklabelstep.py                              |   14
 plotly/validators/bar/marker/colorbar/_ticklen.py                                    |   14
 plotly/validators/bar/marker/colorbar/_tickmode.py                                   |   15
 plotly/validators/bar/marker/colorbar/_tickprefix.py                                 |   13
 plotly/validators/bar/marker/colorbar/_ticks.py                                      |   14
 plotly/validators/bar/marker/colorbar/_ticksuffix.py                                 |   13
 plotly/validators/bar/marker/colorbar/_ticktext.py                                   |   13
 plotly/validators/bar/marker/colorbar/_ticktextsrc.py                                |   13
 plotly/validators/bar/marker/colorbar/_tickvals.py                                   |   13
 plotly/validators/bar/marker/colorbar/_tickvalssrc.py                                |   13
 plotly/validators/bar/marker/colorbar/_tickwidth.py                                  |   14
 plotly/validators/bar/marker/colorbar/_title.py                                      |   35
 plotly/validators/bar/marker/colorbar/_x.py                                          |   11
 plotly/validators/bar/marker/colorbar/_xanchor.py                                    |   14
 plotly/validators/bar/marker/colorbar/_xpad.py                                       |   12
 plotly/validators/bar/marker/colorbar/_xref.py                                       |   12
 plotly/validators/bar/marker/colorbar/_y.py                                          |   11
 plotly/validators/bar/marker/colorbar/_yanchor.py                                    |   14
 plotly/validators/bar/marker/colorbar/_ypad.py                                       |   12
 plotly/validators/bar/marker/colorbar/_yref.py                                       |   12
 plotly/validators/bar/marker/colorbar/tickfont/__init__.py                           |   15
 plotly/validators/bar/marker/colorbar/tickfont/_color.py                             |   13
 plotly/validators/bar/marker/colorbar/tickfont/_family.py                            |   15
 plotly/validators/bar/marker/colorbar/tickfont/_size.py                              |   14
 plotly/validators/bar/marker/colorbar/tickformatstop/__init__.py                     |   23
 plotly/validators/bar/marker/colorbar/tickformatstop/_dtickrange.py                  |   23
 plotly/validators/bar/marker/colorbar/tickformatstop/_enabled.py                     |   16
 plotly/validators/bar/marker/colorbar/tickformatstop/_name.py                        |   16
 plotly/validators/bar/marker/colorbar/tickformatstop/_templateitemname.py            |   16
 plotly/validators/bar/marker/colorbar/tickformatstop/_value.py                       |   16
 plotly/validators/bar/marker/colorbar/title/__init__.py                              |   15
 plotly/validators/bar/marker/colorbar/title/_font.py                                 |   39
 plotly/validators/bar/marker/colorbar/title/_side.py                                 |   14
 plotly/validators/bar/marker/colorbar/title/_text.py                                 |   13
 plotly/validators/bar/marker/colorbar/title/font/__init__.py                         |   15
 plotly/validators/bar/marker/colorbar/title/font/_color.py                           |   16
 plotly/validators/bar/marker/colorbar/title/font/_family.py                          |   18
 plotly/validators/bar/marker/colorbar/title/font/_size.py                            |   14
 plotly/validators/bar/marker/line/__init__.py                                        |   37
 plotly/validators/bar/marker/line/_autocolorscale.py                                 |   14
 plotly/validators/bar/marker/line/_cauto.py                                          |   12
 plotly/validators/bar/marker/line/_cmax.py                                           |   12
 plotly/validators/bar/marker/line/_cmid.py                                           |   12
 plotly/validators/bar/marker/line/_cmin.py                                           |   12
 plotly/validators/bar/marker/line/_color.py                                          |   13
 plotly/validators/bar/marker/line/_coloraxis.py                                      |   15
 plotly/validators/bar/marker/line/_colorscale.py                                     |   14
 plotly/validators/bar/marker/line/_colorsrc.py                                       |   11
 plotly/validators/bar/marker/line/_reversescale.py                                   |   13
 plotly/validators/bar/marker/line/_width.py                                          |   14
 plotly/validators/bar/marker/line/_widthsrc.py                                       |   11
 plotly/validators/bar/marker/pattern/__init__.py                                     |   37
 plotly/validators/bar/marker/pattern/_bgcolor.py                                     |   14
 plotly/validators/bar/marker/pattern/_bgcolorsrc.py                                  |   13
 plotly/validators/bar/marker/pattern/_fgcolor.py                                     |   14
 plotly/validators/bar/marker/pattern/_fgcolorsrc.py                                  |   13
 plotly/validators/bar/marker/pattern/_fgopacity.py                                   |   15
 plotly/validators/bar/marker/pattern/_fillmode.py                                    |   14
 plotly/validators/bar/marker/pattern/_shape.py                                       |   13
 plotly/validators/bar/marker/pattern/_shapesrc.py                                    |   13
 plotly/validators/bar/marker/pattern/_size.py                                        |   13
 plotly/validators/bar/marker/pattern/_sizesrc.py                                     |   13
 plotly/validators/bar/marker/pattern/_solidity.py                                    |   16
 plotly/validators/bar/marker/pattern/_soliditysrc.py                                 |   13
 plotly/validators/bar/outsidetextfont/__init__.py                                    |   25
 plotly/validators/bar/outsidetextfont/_color.py                                      |   14
 plotly/validators/bar/outsidetextfont/_colorsrc.py                                   |   13
 plotly/validators/bar/outsidetextfont/_family.py                                     |   16
 plotly/validators/bar/outsidetextfont/_familysrc.py                                  |   13
 plotly/validators/bar/outsidetextfont/_size.py                                       |   13
 plotly/validators/bar/outsidetextfont/_sizesrc.py                                    |   13
 plotly/validators/bar/selected/__init__.py                                           |   12
 plotly/validators/bar/selected/_marker.py                                            |   20
 plotly/validators/bar/selected/_textfont.py                                          |   18
 plotly/validators/bar/selected/marker/__init__.py                                    |   12
 plotly/validators/bar/selected/marker/_color.py                                      |   13
 plotly/validators/bar/selected/marker/_opacity.py                                    |   15
 plotly/validators/bar/selected/textfont/__init__.py                                  |   11
 plotly/validators/bar/selected/textfont/_color.py                                    |   13
 plotly/validators/bar/stream/__init__.py                                             |   12
 plotly/validators/bar/stream/_maxpoints.py                                           |   13
 plotly/validators/bar/stream/_token.py                                               |   13
 plotly/validators/bar/textfont/__init__.py                                           |   25
 plotly/validators/bar/textfont/_color.py                                             |   12
 plotly/validators/bar/textfont/_colorsrc.py                                          |   11
 plotly/validators/bar/textfont/_family.py                                            |   14
 plotly/validators/bar/textfont/_familysrc.py                                         |   11
 plotly/validators/bar/textfont/_size.py                                              |   13
 plotly/validators/bar/textfont/_sizesrc.py                                           |   11
 plotly/validators/bar/unselected/__init__.py                                         |   12
 plotly/validators/bar/unselected/_marker.py                                          |   22
 plotly/validators/bar/unselected/_textfont.py                                        |   19
 plotly/validators/bar/unselected/marker/__init__.py                                  |   12
 plotly/validators/bar/unselected/marker/_color.py                                    |   13
 plotly/validators/bar/unselected/marker/_opacity.py                                  |   15
 plotly/validators/bar/unselected/textfont/__init__.py                                |   11
 plotly/validators/bar/unselected/textfont/_color.py                                  |   13
 plotly/validators/barpolar/__init__.py                                               |  107
 plotly/validators/barpolar/_base.py                                                  |   12
 plotly/validators/barpolar/_basesrc.py                                               |   11
 plotly/validators/barpolar/_customdata.py                                            |   11
 plotly/validators/barpolar/_customdatasrc.py                                         |   11
 plotly/validators/barpolar/_dr.py                                                    |   11
 plotly/validators/barpolar/_dtheta.py                                                |   11
 plotly/validators/barpolar/_hoverinfo.py                                             |   14
 plotly/validators/barpolar/_hoverinfosrc.py                                          |   11
 plotly/validators/barpolar/_hoverlabel.py                                            |   51
 plotly/validators/barpolar/_hovertemplate.py                                         |   12
 plotly/validators/barpolar/_hovertemplatesrc.py                                      |   13
 plotly/validators/barpolar/_hovertext.py                                             |   12
 plotly/validators/barpolar/_hovertextsrc.py                                          |   11
 plotly/validators/barpolar/_ids.py                                                   |   11
 plotly/validators/barpolar/_idssrc.py                                                |   11
 plotly/validators/barpolar/_legend.py                                                |   12
 plotly/validators/barpolar/_legendgroup.py                                           |   11
 plotly/validators/barpolar/_legendgrouptitle.py                                      |   22
 plotly/validators/barpolar/_legendrank.py                                            |   11
 plotly/validators/barpolar/_legendwidth.py                                           |   12
 plotly/validators/barpolar/_marker.py                                                |  113
 plotly/validators/barpolar/_meta.py                                                  |   12
 plotly/validators/barpolar/_metasrc.py                                               |   11
 plotly/validators/barpolar/_name.py                                                  |   11
 plotly/validators/barpolar/_offset.py                                                |   12
 plotly/validators/barpolar/_offsetsrc.py                                             |   11
 plotly/validators/barpolar/_opacity.py                                               |   13
 plotly/validators/barpolar/_r.py                                                     |   11
 plotly/validators/barpolar/_r0.py                                                    |   11
 plotly/validators/barpolar/_rsrc.py                                                  |   11
 plotly/validators/barpolar/_selected.py                                              |   24
 plotly/validators/barpolar/_selectedpoints.py                                        |   11
 plotly/validators/barpolar/_showlegend.py                                            |   11
 plotly/validators/barpolar/_stream.py                                                |   25
 plotly/validators/barpolar/_subplot.py                                               |   12
 plotly/validators/barpolar/_text.py                                                  |   12
 plotly/validators/barpolar/_textsrc.py                                               |   11
 plotly/validators/barpolar/_theta.py                                                 |   11
 plotly/validators/barpolar/_theta0.py                                                |   11
 plotly/validators/barpolar/_thetasrc.py                                              |   11
 plotly/validators/barpolar/_thetaunit.py                                             |   12
 plotly/validators/barpolar/_uid.py                                                   |   11
 plotly/validators/barpolar/_uirevision.py                                            |   11
 plotly/validators/barpolar/_unselected.py                                            |   24
 plotly/validators/barpolar/_visible.py                                               |   12
 plotly/validators/barpolar/_width.py                                                 |   13
 plotly/validators/barpolar/_widthsrc.py                                              |   11
 plotly/validators/barpolar/hoverlabel/__init__.py                                    |   31
 plotly/validators/barpolar/hoverlabel/_align.py                                      |   15
 plotly/validators/barpolar/hoverlabel/_alignsrc.py                                   |   13
 plotly/validators/barpolar/hoverlabel/_bgcolor.py                                    |   14
 plotly/validators/barpolar/hoverlabel/_bgcolorsrc.py                                 |   13
 plotly/validators/barpolar/hoverlabel/_bordercolor.py                                |   14
 plotly/validators/barpolar/hoverlabel/_bordercolorsrc.py                             |   13
 plotly/validators/barpolar/hoverlabel/_font.py                                       |   46
 plotly/validators/barpolar/hoverlabel/_namelength.py                                 |   15
 plotly/validators/barpolar/hoverlabel/_namelengthsrc.py                              |   13
 plotly/validators/barpolar/hoverlabel/font/__init__.py                               |   25
 plotly/validators/barpolar/hoverlabel/font/_color.py                                 |   14
 plotly/validators/barpolar/hoverlabel/font/_colorsrc.py                              |   13
 plotly/validators/barpolar/hoverlabel/font/_family.py                                |   16
 plotly/validators/barpolar/hoverlabel/font/_familysrc.py                             |   13
 plotly/validators/barpolar/hoverlabel/font/_size.py                                  |   15
 plotly/validators/barpolar/hoverlabel/font/_sizesrc.py                               |   13
 plotly/validators/barpolar/legendgrouptitle/__init__.py                              |   12
 plotly/validators/barpolar/legendgrouptitle/_font.py                                 |   39
 plotly/validators/barpolar/legendgrouptitle/_text.py                                 |   13
 plotly/validators/barpolar/legendgrouptitle/font/__init__.py                         |   15
 plotly/validators/barpolar/legendgrouptitle/font/_color.py                           |   16
 plotly/validators/barpolar/legendgrouptitle/font/_family.py                          |   18
 plotly/validators/barpolar/legendgrouptitle/font/_size.py                            |   14
 plotly/validators/barpolar/marker/__init__.py                                        |   45
 plotly/validators/barpolar/marker/_autocolorscale.py                                 |   14
 plotly/validators/barpolar/marker/_cauto.py                                          |   12
 plotly/validators/barpolar/marker/_cmax.py                                           |   12
 plotly/validators/barpolar/marker/_cmid.py                                           |   12
 plotly/validators/barpolar/marker/_cmin.py                                           |   12
 plotly/validators/barpolar/marker/_color.py                                          |   13
 plotly/validators/barpolar/marker/_coloraxis.py                                      |   15
 plotly/validators/barpolar/marker/_colorbar.py                                       |  295
 plotly/validators/barpolar/marker/_colorscale.py                                     |   14
 plotly/validators/barpolar/marker/_colorsrc.py                                       |   11
 plotly/validators/barpolar/marker/_line.py                                           |  105
 plotly/validators/barpolar/marker/_opacity.py                                        |   14
 plotly/validators/barpolar/marker/_opacitysrc.py                                     |   13
 plotly/validators/barpolar/marker/_pattern.py                                        |   64
 plotly/validators/barpolar/marker/_reversescale.py                                   |   13
 plotly/validators/barpolar/marker/_showscale.py                                      |   13
 plotly/validators/barpolar/marker/colorbar/__init__.py                               |  111
 plotly/validators/barpolar/marker/colorbar/_bgcolor.py                               |   13
 plotly/validators/barpolar/marker/colorbar/_bordercolor.py                           |   16
 plotly/validators/barpolar/marker/colorbar/_borderwidth.py                           |   17
 plotly/validators/barpolar/marker/colorbar/_dtick.py                                 |   14
 plotly/validators/barpolar/marker/colorbar/_exponentformat.py                        |   17
 plotly/validators/barpolar/marker/colorbar/_labelalias.py                            |   13
 plotly/validators/barpolar/marker/colorbar/_len.py                                   |   14
 plotly/validators/barpolar/marker/colorbar/_lenmode.py                               |   14
 plotly/validators/barpolar/marker/colorbar/_minexponent.py                           |   17
 plotly/validators/barpolar/marker/colorbar/_nticks.py                                |   14
 plotly/validators/barpolar/marker/colorbar/_orientation.py                           |   17
 plotly/validators/barpolar/marker/colorbar/_outlinecolor.py                          |   16
 plotly/validators/barpolar/marker/colorbar/_outlinewidth.py                          |   17
 plotly/validators/barpolar/marker/colorbar/_separatethousands.py                     |   16
 plotly/validators/barpolar/marker/colorbar/_showexponent.py                          |   17
 plotly/validators/barpolar/marker/colorbar/_showticklabels.py                        |   16
 plotly/validators/barpolar/marker/colorbar/_showtickprefix.py                        |   17
 plotly/validators/barpolar/marker/colorbar/_showticksuffix.py                        |   17
 plotly/validators/barpolar/marker/colorbar/_thickness.py                             |   14
 plotly/validators/barpolar/marker/colorbar/_thicknessmode.py                         |   17
 plotly/validators/barpolar/marker/colorbar/_tick0.py                                 |   14
 plotly/validators/barpolar/marker/colorbar/_tickangle.py                             |   13
 plotly/validators/barpolar/marker/colorbar/_tickcolor.py                             |   13
 plotly/validators/barpolar/marker/colorbar/_tickfont.py                              |   39
 plotly/validators/barpolar/marker/colorbar/_tickformat.py                            |   13
 plotly/validators/barpolar/marker/colorbar/_tickformatstopdefaults.py                |   21
 plotly/validators/barpolar/marker/colorbar/_tickformatstops.py                       |   54
 plotly/validators/barpolar/marker/colorbar/_ticklabeloverflow.py                     |   17
 plotly/validators/barpolar/marker/colorbar/_ticklabelposition.py                     |   31
 plotly/validators/barpolar/marker/colorbar/_ticklabelstep.py                         |   17
 plotly/validators/barpolar/marker/colorbar/_ticklen.py                               |   14
 plotly/validators/barpolar/marker/colorbar/_tickmode.py                              |   15
 plotly/validators/barpolar/marker/colorbar/_tickprefix.py                            |   13
 plotly/validators/barpolar/marker/colorbar/_ticks.py                                 |   14
 plotly/validators/barpolar/marker/colorbar/_ticksuffix.py                            |   13
 plotly/validators/barpolar/marker/colorbar/_ticktext.py                              |   13
 plotly/validators/barpolar/marker/colorbar/_ticktextsrc.py                           |   16
 plotly/validators/barpolar/marker/colorbar/_tickvals.py                              |   13
 plotly/validators/barpolar/marker/colorbar/_tickvalssrc.py                           |   16
 plotly/validators/barpolar/marker/colorbar/_tickwidth.py                             |   14
 plotly/validators/barpolar/marker/colorbar/_title.py                                 |   35
 plotly/validators/barpolar/marker/colorbar/_x.py                                     |   13
 plotly/validators/barpolar/marker/colorbar/_xanchor.py                               |   14
 plotly/validators/barpolar/marker/colorbar/_xpad.py                                  |   14
 plotly/validators/barpolar/marker/colorbar/_xref.py                                  |   14
 plotly/validators/barpolar/marker/colorbar/_y.py                                     |   13
 plotly/validators/barpolar/marker/colorbar/_yanchor.py                               |   14
 plotly/validators/barpolar/marker/colorbar/_ypad.py                                  |   14
 plotly/validators/barpolar/marker/colorbar/_yref.py                                  |   14
 plotly/validators/barpolar/marker/colorbar/tickfont/__init__.py                      |   15
 plotly/validators/barpolar/marker/colorbar/tickfont/_color.py                        |   16
 plotly/validators/barpolar/marker/colorbar/tickfont/_family.py                       |   18
 plotly/validators/barpolar/marker/colorbar/tickfont/_size.py                         |   17
 plotly/validators/barpolar/marker/colorbar/tickformatstop/__init__.py                |   23
 plotly/validators/barpolar/marker/colorbar/tickformatstop/_dtickrange.py             |   23
 plotly/validators/barpolar/marker/colorbar/tickformatstop/_enabled.py                |   16
 plotly/validators/barpolar/marker/colorbar/tickformatstop/_name.py                   |   16
 plotly/validators/barpolar/marker/colorbar/tickformatstop/_templateitemname.py       |   16
 plotly/validators/barpolar/marker/colorbar/tickformatstop/_value.py                  |   16
 plotly/validators/barpolar/marker/colorbar/title/__init__.py                         |   15
 plotly/validators/barpolar/marker/colorbar/title/_font.py                            |   39
 plotly/validators/barpolar/marker/colorbar/title/_side.py                            |   14
 plotly/validators/barpolar/marker/colorbar/title/_text.py                            |   13
 plotly/validators/barpolar/marker/colorbar/title/font/__init__.py                    |   15
 plotly/validators/barpolar/marker/colorbar/title/font/_color.py                      |   16
 plotly/validators/barpolar/marker/colorbar/title/font/_family.py                     |   18
 plotly/validators/barpolar/marker/colorbar/title/font/_size.py                       |   17
 plotly/validators/barpolar/marker/line/__init__.py                                   |   37
 plotly/validators/barpolar/marker/line/_autocolorscale.py                            |   14
 plotly/validators/barpolar/marker/line/_cauto.py                                     |   14
 plotly/validators/barpolar/marker/line/_cmax.py                                      |   14
 plotly/validators/barpolar/marker/line/_cmid.py                                      |   14
 plotly/validators/barpolar/marker/line/_cmin.py                                      |   14
 plotly/validators/barpolar/marker/line/_color.py                                     |   17
 plotly/validators/barpolar/marker/line/_coloraxis.py                                 |   15
 plotly/validators/barpolar/marker/line/_colorscale.py                                |   14
 plotly/validators/barpolar/marker/line/_colorsrc.py                                  |   13
 plotly/validators/barpolar/marker/line/_reversescale.py                              |   13
 plotly/validators/barpolar/marker/line/_width.py                                     |   15
 plotly/validators/barpolar/marker/line/_widthsrc.py                                  |   13
 plotly/validators/barpolar/marker/pattern/__init__.py                                |   37
 plotly/validators/barpolar/marker/pattern/_bgcolor.py                                |   14
 plotly/validators/barpolar/marker/pattern/_bgcolorsrc.py                             |   13
 plotly/validators/barpolar/marker/pattern/_fgcolor.py                                |   14
 plotly/validators/barpolar/marker/pattern/_fgcolorsrc.py                             |   13
 plotly/validators/barpolar/marker/pattern/_fgopacity.py                              |   15
 plotly/validators/barpolar/marker/pattern/_fillmode.py                               |   14
 plotly/validators/barpolar/marker/pattern/_shape.py                                  |   15
 plotly/validators/barpolar/marker/pattern/_shapesrc.py                               |   13
 plotly/validators/barpolar/marker/pattern/_size.py                                   |   15
 plotly/validators/barpolar/marker/pattern/_sizesrc.py                                |   13
 plotly/validators/barpolar/marker/pattern/_solidity.py                               |   16
 plotly/validators/barpolar/marker/pattern/_soliditysrc.py                            |   13
 plotly/validators/barpolar/selected/__init__.py                                      |   12
 plotly/validators/barpolar/selected/_marker.py                                       |   20
 plotly/validators/barpolar/selected/_textfont.py                                     |   20
 plotly/validators/barpolar/selected/marker/__init__.py                               |   12
 plotly/validators/barpolar/selected/marker/_color.py                                 |   13
 plotly/validators/barpolar/selected/marker/_opacity.py                               |   15
 plotly/validators/barpolar/selected/textfont/__init__.py                             |   11
 plotly/validators/barpolar/selected/textfont/_color.py                               |   13
 plotly/validators/barpolar/stream/__init__.py                                        |   12
 plotly/validators/barpolar/stream/_maxpoints.py                                      |   15
 plotly/validators/barpolar/stream/_token.py                                          |   13
 plotly/validators/barpolar/unselected/__init__.py                                    |   12
 plotly/validators/barpolar/unselected/_marker.py                                     |   24
 plotly/validators/barpolar/unselected/_textfont.py                                   |   21
 plotly/validators/barpolar/unselected/marker/__init__.py                             |   12
 plotly/validators/barpolar/unselected/marker/_color.py                               |   13
 plotly/validators/barpolar/unselected/marker/_opacity.py                             |   15
 plotly/validators/barpolar/unselected/textfont/__init__.py                           |   11
 plotly/validators/barpolar/unselected/textfont/_color.py                             |   13
 plotly/validators/box/__init__.py                                                    |  183
 plotly/validators/box/_alignmentgroup.py                                             |   11
 plotly/validators/box/_boxmean.py                                                    |   12
 plotly/validators/box/_boxpoints.py                                                  |   14
 plotly/validators/box/_customdata.py                                                 |   11
 plotly/validators/box/_customdatasrc.py                                              |   11
 plotly/validators/box/_dx.py                                                         |   11
 plotly/validators/box/_dy.py                                                         |   11
 plotly/validators/box/_fillcolor.py                                                  |   11
 plotly/validators/box/_hoverinfo.py                                                  |   14
 plotly/validators/box/_hoverinfosrc.py                                               |   11
 plotly/validators/box/_hoverlabel.py                                                 |   51
 plotly/validators/box/_hoveron.py                                                    |   12
 plotly/validators/box/_hovertemplate.py                                              |   12
 plotly/validators/box/_hovertemplatesrc.py                                           |   11
 plotly/validators/box/_hovertext.py                                                  |   12
 plotly/validators/box/_hovertextsrc.py                                               |   11
 plotly/validators/box/_ids.py                                                        |   11
 plotly/validators/box/_idssrc.py                                                     |   11
 plotly/validators/box/_jitter.py                                                     |   13
 plotly/validators/box/_legend.py                                                     |   12
 plotly/validators/box/_legendgroup.py                                                |   11
 plotly/validators/box/_legendgrouptitle.py                                           |   20
 plotly/validators/box/_legendrank.py                                                 |   11
 plotly/validators/box/_legendwidth.py                                                |   12
 plotly/validators/box/_line.py                                                       |   21
 plotly/validators/box/_lowerfence.py                                                 |   11
 plotly/validators/box/_lowerfencesrc.py                                              |   11
 plotly/validators/box/_marker.py                                                     |   40
 plotly/validators/box/_mean.py                                                       |   11
 plotly/validators/box/_meansrc.py                                                    |   11
 plotly/validators/box/_median.py                                                     |   11
 plotly/validators/box/_mediansrc.py                                                  |   11
 plotly/validators/box/_meta.py                                                       |   12
 plotly/validators/box/_metasrc.py                                                    |   11
 plotly/validators/box/_name.py                                                       |   11
 plotly/validators/box/_notched.py                                                    |   11
 plotly/validators/box/_notchspan.py                                                  |   11
 plotly/validators/box/_notchspansrc.py                                               |   11
 plotly/validators/box/_notchwidth.py                                                 |   13
 plotly/validators/box/_offsetgroup.py                                                |   11
 plotly/validators/box/_opacity.py                                                    |   13
 plotly/validators/box/_orientation.py                                                |   12
 plotly/validators/box/_pointpos.py                                                   |   13
 plotly/validators/box/_q1.py                                                         |   11
 plotly/validators/box/_q1src.py                                                      |   11
 plotly/validators/box/_q3.py                                                         |   11
 plotly/validators/box/_q3src.py                                                      |   11
 plotly/validators/box/_quartilemethod.py                                             |   12
 plotly/validators/box/_sd.py                                                         |   11
 plotly/validators/box/_sdmultiple.py                                                 |   12
 plotly/validators/box/_sdsrc.py                                                      |   11
 plotly/validators/box/_selected.py                                                   |   19
 plotly/validators/box/_selectedpoints.py                                             |   11
 plotly/validators/box/_showlegend.py                                                 |   11
 plotly/validators/box/_showwhiskers.py                                               |   11
 plotly/validators/box/_sizemode.py                                                   |   12
 plotly/validators/box/_stream.py                                                     |   25
 plotly/validators/box/_text.py                                                       |   12
 plotly/validators/box/_textsrc.py                                                    |   11
 plotly/validators/box/_uid.py                                                        |   11
 plotly/validators/box/_uirevision.py                                                 |   11
 plotly/validators/box/_unselected.py                                                 |   20
 plotly/validators/box/_upperfence.py                                                 |   11
 plotly/validators/box/_upperfencesrc.py                                              |   11
 plotly/validators/box/_visible.py                                                    |   12
 plotly/validators/box/_whiskerwidth.py                                               |   13
 plotly/validators/box/_width.py                                                      |   12
 plotly/validators/box/_x.py                                                          |   11
 plotly/validators/box/_x0.py                                                         |   11
 plotly/validators/box/_xaxis.py                                                      |   12
 plotly/validators/box/_xcalendar.py                                                  |   32
 plotly/validators/box/_xhoverformat.py                                               |   11
 plotly/validators/box/_xperiod.py                                                    |   11
 plotly/validators/box/_xperiod0.py                                                   |   11
 plotly/validators/box/_xperiodalignment.py                                           |   12
 plotly/validators/box/_xsrc.py                                                       |   11
 plotly/validators/box/_y.py                                                          |   11
 plotly/validators/box/_y0.py                                                         |   11
 plotly/validators/box/_yaxis.py                                                      |   12
 plotly/validators/box/_ycalendar.py                                                  |   32
 plotly/validators/box/_yhoverformat.py                                               |   11
 plotly/validators/box/_yperiod.py                                                    |   11
 plotly/validators/box/_yperiod0.py                                                   |   11
 plotly/validators/box/_yperiodalignment.py                                           |   12
 plotly/validators/box/_ysrc.py                                                       |   11
 plotly/validators/box/hoverlabel/__init__.py                                         |   31
 plotly/validators/box/hoverlabel/_align.py                                           |   13
 plotly/validators/box/hoverlabel/_alignsrc.py                                        |   11
 plotly/validators/box/hoverlabel/_bgcolor.py                                         |   12
 plotly/validators/box/hoverlabel/_bgcolorsrc.py                                      |   13
 plotly/validators/box/hoverlabel/_bordercolor.py                                     |   14
 plotly/validators/box/hoverlabel/_bordercolorsrc.py                                  |   13
 plotly/validators/box/hoverlabel/_font.py                                            |   46
 plotly/validators/box/hoverlabel/_namelength.py                                      |   15
 plotly/validators/box/hoverlabel/_namelengthsrc.py                                   |   13
 plotly/validators/box/hoverlabel/font/__init__.py                                    |   25
 plotly/validators/box/hoverlabel/font/_color.py                                      |   14
 plotly/validators/box/hoverlabel/font/_colorsrc.py                                   |   13
 plotly/validators/box/hoverlabel/font/_family.py                                     |   16
 plotly/validators/box/hoverlabel/font/_familysrc.py                                  |   13
 plotly/validators/box/hoverlabel/font/_size.py                                       |   13
 plotly/validators/box/hoverlabel/font/_sizesrc.py                                    |   13
 plotly/validators/box/legendgrouptitle/__init__.py                                   |   12
 plotly/validators/box/legendgrouptitle/_font.py                                      |   39
 plotly/validators/box/legendgrouptitle/_text.py                                      |   13
 plotly/validators/box/legendgrouptitle/font/__init__.py                              |   15
 plotly/validators/box/legendgrouptitle/font/_color.py                                |   13
 plotly/validators/box/legendgrouptitle/font/_family.py                               |   15
 plotly/validators/box/legendgrouptitle/font/_size.py                                 |   14
 plotly/validators/box/line/__init__.py                                               |   12
 plotly/validators/box/line/_color.py                                                 |   11
 plotly/validators/box/line/_width.py                                                 |   12
 plotly/validators/box/marker/__init__.py                                             |   27
 plotly/validators/box/marker/_angle.py                                               |   12
 plotly/validators/box/marker/_color.py                                               |   12
 plotly/validators/box/marker/_line.py                                                |   32
 plotly/validators/box/marker/_opacity.py                                             |   14
 plotly/validators/box/marker/_outliercolor.py                                        |   11
 plotly/validators/box/marker/_size.py                                                |   13
 plotly/validators/box/marker/_symbol.py                                              |  503
 plotly/validators/box/marker/line/__init__.py                                        |   21
 plotly/validators/box/marker/line/_color.py                                          |   12
 plotly/validators/box/marker/line/_outliercolor.py                                   |   13
 plotly/validators/box/marker/line/_outlierwidth.py                                   |   14
 plotly/validators/box/marker/line/_width.py                                          |   13
 plotly/validators/box/selected/__init__.py                                           |   11
 plotly/validators/box/selected/_marker.py                                            |   22
 plotly/validators/box/selected/marker/__init__.py                                    |   19
 plotly/validators/box/selected/marker/_color.py                                      |   13
 plotly/validators/box/selected/marker/_opacity.py                                    |   15
 plotly/validators/box/selected/marker/_size.py                                       |   12
 plotly/validators/box/stream/__init__.py                                             |   12
 plotly/validators/box/stream/_maxpoints.py                                           |   13
 plotly/validators/box/stream/_token.py                                               |   13
 plotly/validators/box/unselected/__init__.py                                         |   11
 plotly/validators/box/unselected/_marker.py                                          |   25
 plotly/validators/box/unselected/marker/__init__.py                                  |   19
 plotly/validators/box/unselected/marker/_color.py                                    |   13
 plotly/validators/box/unselected/marker/_opacity.py                                  |   15
 plotly/validators/box/unselected/marker/_size.py                                     |   14
 plotly/validators/candlestick/__init__.py                                            |  109
 plotly/validators/candlestick/_close.py                                              |   11
 plotly/validators/candlestick/_closesrc.py                                           |   11
 plotly/validators/candlestick/_customdata.py                                         |   11
 plotly/validators/candlestick/_customdatasrc.py                                      |   13
 plotly/validators/candlestick/_decreasing.py                                         |   25
 plotly/validators/candlestick/_high.py                                               |   11
 plotly/validators/candlestick/_highsrc.py                                            |   11
 plotly/validators/candlestick/_hoverinfo.py                                          |   14
 plotly/validators/candlestick/_hoverinfosrc.py                                       |   11
 plotly/validators/candlestick/_hoverlabel.py                                         |   54
 plotly/validators/candlestick/_hovertext.py                                          |   12
 plotly/validators/candlestick/_hovertextsrc.py                                       |   11
 plotly/validators/candlestick/_ids.py                                                |   11
 plotly/validators/candlestick/_idssrc.py                                             |   11
 plotly/validators/candlestick/_increasing.py                                         |   25
 plotly/validators/candlestick/_legend.py                                             |   12
 plotly/validators/candlestick/_legendgroup.py                                        |   11
 plotly/validators/candlestick/_legendgrouptitle.py                                   |   22
 plotly/validators/candlestick/_legendrank.py                                         |   11
 plotly/validators/candlestick/_legendwidth.py                                        |   12
 plotly/validators/candlestick/_line.py                                               |   22
 plotly/validators/candlestick/_low.py                                                |   11
 plotly/validators/candlestick/_lowsrc.py                                             |   11
 plotly/validators/candlestick/_meta.py                                               |   12
 plotly/validators/candlestick/_metasrc.py                                            |   11
 plotly/validators/candlestick/_name.py                                               |   11
 plotly/validators/candlestick/_opacity.py                                            |   13
 plotly/validators/candlestick/_open.py                                               |   11
 plotly/validators/candlestick/_opensrc.py                                            |   11
 plotly/validators/candlestick/_selectedpoints.py                                     |   13
 plotly/validators/candlestick/_showlegend.py                                         |   11
 plotly/validators/candlestick/_stream.py                                             |   25
 plotly/validators/candlestick/_text.py                                               |   12
 plotly/validators/candlestick/_textsrc.py                                            |   11
 plotly/validators/candlestick/_uid.py                                                |   11
 plotly/validators/candlestick/_uirevision.py                                         |   11
 plotly/validators/candlestick/_visible.py                                            |   12
 plotly/validators/candlestick/_whiskerwidth.py                                       |   13
 plotly/validators/candlestick/_x.py                                                  |   11
 plotly/validators/candlestick/_xaxis.py                                              |   12
 plotly/validators/candlestick/_xcalendar.py                                          |   32
 plotly/validators/candlestick/_xhoverformat.py                                       |   11
 plotly/validators/candlestick/_xperiod.py                                            |   11
 plotly/validators/candlestick/_xperiod0.py                                           |   11
 plotly/validators/candlestick/_xperiodalignment.py                                   |   14
 plotly/validators/candlestick/_xsrc.py                                               |   11
 plotly/validators/candlestick/_yaxis.py                                              |   12
 plotly/validators/candlestick/_yhoverformat.py                                       |   11
 plotly/validators/candlestick/decreasing/__init__.py                                 |   12
 plotly/validators/candlestick/decreasing/_fillcolor.py                               |   13
 plotly/validators/candlestick/decreasing/_line.py                                    |   23
 plotly/validators/candlestick/decreasing/line/__init__.py                            |   12
 plotly/validators/candlestick/decreasing/line/_color.py                              |   13
 plotly/validators/candlestick/decreasing/line/_width.py                              |   14
 plotly/validators/candlestick/hoverlabel/__init__.py                                 |   33
 plotly/validators/candlestick/hoverlabel/_align.py                                   |   15
 plotly/validators/candlestick/hoverlabel/_alignsrc.py                                |   13
 plotly/validators/candlestick/hoverlabel/_bgcolor.py                                 |   14
 plotly/validators/candlestick/hoverlabel/_bgcolorsrc.py                              |   13
 plotly/validators/candlestick/hoverlabel/_bordercolor.py                             |   14
 plotly/validators/candlestick/hoverlabel/_bordercolorsrc.py                          |   16
 plotly/validators/candlestick/hoverlabel/_font.py                                    |   48
 plotly/validators/candlestick/hoverlabel/_namelength.py                              |   15
 plotly/validators/candlestick/hoverlabel/_namelengthsrc.py                           |   16
 plotly/validators/candlestick/hoverlabel/_split.py                                   |   13
 plotly/validators/candlestick/hoverlabel/font/__init__.py                            |   25
 plotly/validators/candlestick/hoverlabel/font/_color.py                              |   14
 plotly/validators/candlestick/hoverlabel/font/_colorsrc.py                           |   16
 plotly/validators/candlestick/hoverlabel/font/_family.py                             |   16
 plotly/validators/candlestick/hoverlabel/font/_familysrc.py                          |   16
 plotly/validators/candlestick/hoverlabel/font/_size.py                               |   15
 plotly/validators/candlestick/hoverlabel/font/_sizesrc.py                            |   13
 plotly/validators/candlestick/increasing/__init__.py                                 |   12
 plotly/validators/candlestick/increasing/_fillcolor.py                               |   13
 plotly/validators/candlestick/increasing/_line.py                                    |   23
 plotly/validators/candlestick/increasing/line/__init__.py                            |   12
 plotly/validators/candlestick/increasing/line/_color.py                              |   13
 plotly/validators/candlestick/increasing/line/_width.py                              |   14
 plotly/validators/candlestick/legendgrouptitle/__init__.py                           |   12
 plotly/validators/candlestick/legendgrouptitle/_font.py                              |   39
 plotly/validators/candlestick/legendgrouptitle/_text.py                              |   13
 plotly/validators/candlestick/legendgrouptitle/font/__init__.py                      |   15
 plotly/validators/candlestick/legendgrouptitle/font/_color.py                        |   16
 plotly/validators/candlestick/legendgrouptitle/font/_family.py                       |   18
 plotly/validators/candlestick/legendgrouptitle/font/_size.py                         |   17
 plotly/validators/candlestick/line/__init__.py                                       |   11
 plotly/validators/candlestick/line/_width.py                                         |   12
 plotly/validators/candlestick/stream/__init__.py                                     |   12
 plotly/validators/candlestick/stream/_maxpoints.py                                   |   15
 plotly/validators/candlestick/stream/_token.py                                       |   13
 plotly/validators/carpet/__init__.py                                                 |   85
 plotly/validators/carpet/_a.py                                                       |   11
 plotly/validators/carpet/_a0.py                                                      |   11
 plotly/validators/carpet/_aaxis.py                                                   |  263
 plotly/validators/carpet/_asrc.py                                                    |   11
 plotly/validators/carpet/_b.py                                                       |   11
 plotly/validators/carpet/_b0.py                                                      |   11
 plotly/validators/carpet/_baxis.py                                                   |  263
 plotly/validators/carpet/_bsrc.py                                                    |   11
 plotly/validators/carpet/_carpet.py                                                  |   11
 plotly/validators/carpet/_cheaterslope.py                                            |   11
 plotly/validators/carpet/_color.py                                                   |   11
 plotly/validators/carpet/_customdata.py                                              |   11
 plotly/validators/carpet/_customdatasrc.py                                           |   11
 plotly/validators/carpet/_da.py                                                      |   11
 plotly/validators/carpet/_db.py                                                      |   11
 plotly/validators/carpet/_font.py                                                    |   37
 plotly/validators/carpet/_ids.py                                                     |   12
 plotly/validators/carpet/_idssrc.py                                                  |   11
 plotly/validators/carpet/_legend.py                                                  |   12
 plotly/validators/carpet/_legendgrouptitle.py                                        |   20
 plotly/validators/carpet/_legendrank.py                                              |   11
 plotly/validators/carpet/_legendwidth.py                                             |   12
 plotly/validators/carpet/_meta.py                                                    |   12
 plotly/validators/carpet/_metasrc.py                                                 |   11
 plotly/validators/carpet/_name.py                                                    |   11
 plotly/validators/carpet/_opacity.py                                                 |   13
 plotly/validators/carpet/_stream.py                                                  |   25
 plotly/validators/carpet/_uid.py                                                     |   12
 plotly/validators/carpet/_uirevision.py                                              |   11
 plotly/validators/carpet/_visible.py                                                 |   12
 plotly/validators/carpet/_x.py                                                       |   11
 plotly/validators/carpet/_xaxis.py                                                   |   12
 plotly/validators/carpet/_xsrc.py                                                    |   11
 plotly/validators/carpet/_y.py                                                       |   11
 plotly/validators/carpet/_yaxis.py                                                   |   12
 plotly/validators/carpet/_ysrc.py                                                    |   11
 plotly/validators/carpet/aaxis/__init__.py                                           |  129
 plotly/validators/carpet/aaxis/_arraydtick.py                                        |   12
 plotly/validators/carpet/aaxis/_arraytick0.py                                        |   12
 plotly/validators/carpet/aaxis/_autorange.py                                         |   12
 plotly/validators/carpet/aaxis/_autotypenumbers.py                                   |   14
 plotly/validators/carpet/aaxis/_categoryarray.py                                     |   13
 plotly/validators/carpet/aaxis/_categoryarraysrc.py                                  |   13
 plotly/validators/carpet/aaxis/_categoryorder.py                                     |   17
 plotly/validators/carpet/aaxis/_cheatertype.py                                       |   12
 plotly/validators/carpet/aaxis/_color.py                                             |   11
 plotly/validators/carpet/aaxis/_dtick.py                                             |   12
 plotly/validators/carpet/aaxis/_endline.py                                           |   11
 plotly/validators/carpet/aaxis/_endlinecolor.py                                      |   13
 plotly/validators/carpet/aaxis/_endlinewidth.py                                      |   13
 plotly/validators/carpet/aaxis/_exponentformat.py                                    |   14
 plotly/validators/carpet/aaxis/_fixedrange.py                                        |   11
 plotly/validators/carpet/aaxis/_gridcolor.py                                         |   11
 plotly/validators/carpet/aaxis/_griddash.py                                          |   14
 plotly/validators/carpet/aaxis/_gridwidth.py                                         |   12
 plotly/validators/carpet/aaxis/_labelalias.py                                        |   11
 plotly/validators/carpet/aaxis/_labelpadding.py                                      |   13
 plotly/validators/carpet/aaxis/_labelprefix.py                                       |   11
 plotly/validators/carpet/aaxis/_labelsuffix.py                                       |   11
 plotly/validators/carpet/aaxis/_linecolor.py                                         |   11
 plotly/validators/carpet/aaxis/_linewidth.py                                         |   12
 plotly/validators/carpet/aaxis/_minexponent.py                                       |   12
 plotly/validators/carpet/aaxis/_minorgridcolor.py                                    |   13
 plotly/validators/carpet/aaxis/_minorgridcount.py                                    |   14
 plotly/validators/carpet/aaxis/_minorgriddash.py                                     |   16
 plotly/validators/carpet/aaxis/_minorgridwidth.py                                    |   14
 plotly/validators/carpet/aaxis/_nticks.py                                            |   12
 plotly/validators/carpet/aaxis/_range.py                                             |   18
 plotly/validators/carpet/aaxis/_rangemode.py                                         |   12
 plotly/validators/carpet/aaxis/_separatethousands.py                                 |   13
 plotly/validators/carpet/aaxis/_showexponent.py                                      |   14
 plotly/validators/carpet/aaxis/_showgrid.py                                          |   11
 plotly/validators/carpet/aaxis/_showline.py                                          |   11
 plotly/validators/carpet/aaxis/_showticklabels.py                                    |   14
 plotly/validators/carpet/aaxis/_showtickprefix.py                                    |   14
 plotly/validators/carpet/aaxis/_showticksuffix.py                                    |   14
 plotly/validators/carpet/aaxis/_smoothing.py                                         |   13
 plotly/validators/carpet/aaxis/_startline.py                                         |   11
 plotly/validators/carpet/aaxis/_startlinecolor.py                                    |   13
 plotly/validators/carpet/aaxis/_startlinewidth.py                                    |   13
 plotly/validators/carpet/aaxis/_tick0.py                                             |   12
 plotly/validators/carpet/aaxis/_tickangle.py                                         |   11
 plotly/validators/carpet/aaxis/_tickfont.py                                          |   37
 plotly/validators/carpet/aaxis/_tickformat.py                                        |   11
 plotly/validators/carpet/aaxis/_tickformatstopdefaults.py                            |   18
 plotly/validators/carpet/aaxis/_tickformatstops.py                                   |   51
 plotly/validators/carpet/aaxis/_tickmode.py                                          |   12
 plotly/validators/carpet/aaxis/_tickprefix.py                                        |   11
 plotly/validators/carpet/aaxis/_ticksuffix.py                                        |   11
 plotly/validators/carpet/aaxis/_ticktext.py                                          |   11
 plotly/validators/carpet/aaxis/_ticktextsrc.py                                       |   11
 plotly/validators/carpet/aaxis/_tickvals.py                                          |   11
 plotly/validators/carpet/aaxis/_tickvalssrc.py                                       |   11
 plotly/validators/carpet/aaxis/_title.py                                             |   31
 plotly/validators/carpet/aaxis/_type.py                                              |   12
 plotly/validators/carpet/aaxis/tickfont/__init__.py                                  |   15
 plotly/validators/carpet/aaxis/tickfont/_color.py                                    |   13
 plotly/validators/carpet/aaxis/tickfont/_family.py                                   |   15
 plotly/validators/carpet/aaxis/tickfont/_size.py                                     |   14
 plotly/validators/carpet/aaxis/tickformatstop/__init__.py                            |   23
 plotly/validators/carpet/aaxis/tickformatstop/_dtickrange.py                         |   23
 plotly/validators/carpet/aaxis/tickformatstop/_enabled.py                            |   13
 plotly/validators/carpet/aaxis/tickformatstop/_name.py                               |   13
 plotly/validators/carpet/aaxis/tickformatstop/_templateitemname.py                   |   16
 plotly/validators/carpet/aaxis/tickformatstop/_value.py                              |   13
 plotly/validators/carpet/aaxis/title/__init__.py                                     |   15
 plotly/validators/carpet/aaxis/title/_font.py                                        |   37
 plotly/validators/carpet/aaxis/title/_offset.py                                      |   13
 plotly/validators/carpet/aaxis/title/_text.py                                        |   11
 plotly/validators/carpet/aaxis/title/font/__init__.py                                |   15
 plotly/validators/carpet/aaxis/title/font/_color.py                                  |   13
 plotly/validators/carpet/aaxis/title/font/_family.py                                 |   15
 plotly/validators/carpet/aaxis/title/font/_size.py                                   |   14
 plotly/validators/carpet/baxis/__init__.py                                           |  129
 plotly/validators/carpet/baxis/_arraydtick.py                                        |   12
 plotly/validators/carpet/baxis/_arraytick0.py                                        |   12
 plotly/validators/carpet/baxis/_autorange.py                                         |   12
 plotly/validators/carpet/baxis/_autotypenumbers.py                                   |   14
 plotly/validators/carpet/baxis/_categoryarray.py                                     |   13
 plotly/validators/carpet/baxis/_categoryarraysrc.py                                  |   13
 plotly/validators/carpet/baxis/_categoryorder.py                                     |   17
 plotly/validators/carpet/baxis/_cheatertype.py                                       |   12
 plotly/validators/carpet/baxis/_color.py                                             |   11
 plotly/validators/carpet/baxis/_dtick.py                                             |   12
 plotly/validators/carpet/baxis/_endline.py                                           |   11
 plotly/validators/carpet/baxis/_endlinecolor.py                                      |   13
 plotly/validators/carpet/baxis/_endlinewidth.py                                      |   13
 plotly/validators/carpet/baxis/_exponentformat.py                                    |   14
 plotly/validators/carpet/baxis/_fixedrange.py                                        |   11
 plotly/validators/carpet/baxis/_gridcolor.py                                         |   11
 plotly/validators/carpet/baxis/_griddash.py                                          |   14
 plotly/validators/carpet/baxis/_gridwidth.py                                         |   12
 plotly/validators/carpet/baxis/_labelalias.py                                        |   11
 plotly/validators/carpet/baxis/_labelpadding.py                                      |   13
 plotly/validators/carpet/baxis/_labelprefix.py                                       |   11
 plotly/validators/carpet/baxis/_labelsuffix.py                                       |   11
 plotly/validators/carpet/baxis/_linecolor.py                                         |   11
 plotly/validators/carpet/baxis/_linewidth.py                                         |   12
 plotly/validators/carpet/baxis/_minexponent.py                                       |   12
 plotly/validators/carpet/baxis/_minorgridcolor.py                                    |   13
 plotly/validators/carpet/baxis/_minorgridcount.py                                    |   14
 plotly/validators/carpet/baxis/_minorgriddash.py                                     |   16
 plotly/validators/carpet/baxis/_minorgridwidth.py                                    |   14
 plotly/validators/carpet/baxis/_nticks.py                                            |   12
 plotly/validators/carpet/baxis/_range.py                                             |   18
 plotly/validators/carpet/baxis/_rangemode.py                                         |   12
 plotly/validators/carpet/baxis/_separatethousands.py                                 |   13
 plotly/validators/carpet/baxis/_showexponent.py                                      |   14
 plotly/validators/carpet/baxis/_showgrid.py                                          |   11
 plotly/validators/carpet/baxis/_showline.py                                          |   11
 plotly/validators/carpet/baxis/_showticklabels.py                                    |   14
 plotly/validators/carpet/baxis/_showtickprefix.py                                    |   14
 plotly/validators/carpet/baxis/_showticksuffix.py                                    |   14
 plotly/validators/carpet/baxis/_smoothing.py                                         |   13
 plotly/validators/carpet/baxis/_startline.py                                         |   11
 plotly/validators/carpet/baxis/_startlinecolor.py                                    |   13
 plotly/validators/carpet/baxis/_startlinewidth.py                                    |   13
 plotly/validators/carpet/baxis/_tick0.py                                             |   12
 plotly/validators/carpet/baxis/_tickangle.py                                         |   11
 plotly/validators/carpet/baxis/_tickfont.py                                          |   37
 plotly/validators/carpet/baxis/_tickformat.py                                        |   11
 plotly/validators/carpet/baxis/_tickformatstopdefaults.py                            |   18
 plotly/validators/carpet/baxis/_tickformatstops.py                                   |   51
 plotly/validators/carpet/baxis/_tickmode.py                                          |   12
 plotly/validators/carpet/baxis/_tickprefix.py                                        |   11
 plotly/validators/carpet/baxis/_ticksuffix.py                                        |   11
 plotly/validators/carpet/baxis/_ticktext.py                                          |   11
 plotly/validators/carpet/baxis/_ticktextsrc.py                                       |   11
 plotly/validators/carpet/baxis/_tickvals.py                                          |   11
 plotly/validators/carpet/baxis/_tickvalssrc.py                                       |   11
 plotly/validators/carpet/baxis/_title.py                                             |   31
 plotly/validators/carpet/baxis/_type.py                                              |   12
 plotly/validators/carpet/baxis/tickfont/__init__.py                                  |   15
 plotly/validators/carpet/baxis/tickfont/_color.py                                    |   13
 plotly/validators/carpet/baxis/tickfont/_family.py                                   |   15
 plotly/validators/carpet/baxis/tickfont/_size.py                                     |   14
 plotly/validators/carpet/baxis/tickformatstop/__init__.py                            |   23
 plotly/validators/carpet/baxis/tickformatstop/_dtickrange.py                         |   23
 plotly/validators/carpet/baxis/tickformatstop/_enabled.py                            |   13
 plotly/validators/carpet/baxis/tickformatstop/_name.py                               |   13
 plotly/validators/carpet/baxis/tickformatstop/_templateitemname.py                   |   16
 plotly/validators/carpet/baxis/tickformatstop/_value.py                              |   13
 plotly/validators/carpet/baxis/title/__init__.py                                     |   15
 plotly/validators/carpet/baxis/title/_font.py                                        |   37
 plotly/validators/carpet/baxis/title/_offset.py                                      |   13
 plotly/validators/carpet/baxis/title/_text.py                                        |   11
 plotly/validators/carpet/baxis/title/font/__init__.py                                |   15
 plotly/validators/carpet/baxis/title/font/_color.py                                  |   13
 plotly/validators/carpet/baxis/title/font/_family.py                                 |   15
 plotly/validators/carpet/baxis/title/font/_size.py                                   |   14
 plotly/validators/carpet/font/__init__.py                                            |   15
 plotly/validators/carpet/font/_color.py                                              |   11
 plotly/validators/carpet/font/_family.py                                             |   13
 plotly/validators/carpet/font/_size.py                                               |   12
 plotly/validators/carpet/legendgrouptitle/__init__.py                                |   12
 plotly/validators/carpet/legendgrouptitle/_font.py                                   |   39
 plotly/validators/carpet/legendgrouptitle/_text.py                                   |   13
 plotly/validators/carpet/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/carpet/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/carpet/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/carpet/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/carpet/stream/__init__.py                                          |   12
 plotly/validators/carpet/stream/_maxpoints.py                                        |   13
 plotly/validators/carpet/stream/_token.py                                            |   13
 plotly/validators/choropleth/__init__.py                                             |  109
 plotly/validators/choropleth/_autocolorscale.py                                      |   14
 plotly/validators/choropleth/_coloraxis.py                                           |   13
 plotly/validators/choropleth/_colorbar.py                                            |  294
 plotly/validators/choropleth/_colorscale.py                                          |   12
 plotly/validators/choropleth/_customdata.py                                          |   11
 plotly/validators/choropleth/_customdatasrc.py                                       |   11
 plotly/validators/choropleth/_featureidkey.py                                        |   11
 plotly/validators/choropleth/_geo.py                                                 |   12
 plotly/validators/choropleth/_geojson.py                                             |   11
 plotly/validators/choropleth/_hoverinfo.py                                           |   14
 plotly/validators/choropleth/_hoverinfosrc.py                                        |   11
 plotly/validators/choropleth/_hoverlabel.py                                          |   51
 plotly/validators/choropleth/_hovertemplate.py                                       |   12
 plotly/validators/choropleth/_hovertemplatesrc.py                                    |   13
 plotly/validators/choropleth/_hovertext.py                                           |   12
 plotly/validators/choropleth/_hovertextsrc.py                                        |   11
 plotly/validators/choropleth/_ids.py                                                 |   11
 plotly/validators/choropleth/_idssrc.py                                              |   11
 plotly/validators/choropleth/_legend.py                                              |   12
 plotly/validators/choropleth/_legendgroup.py                                         |   11
 plotly/validators/choropleth/_legendgrouptitle.py                                    |   22
 plotly/validators/choropleth/_legendrank.py                                          |   11
 plotly/validators/choropleth/_legendwidth.py                                         |   12
 plotly/validators/choropleth/_locationmode.py                                        |   14
 plotly/validators/choropleth/_locations.py                                           |   11
 plotly/validators/choropleth/_locationssrc.py                                        |   11
 plotly/validators/choropleth/_marker.py                                              |   25
 plotly/validators/choropleth/_meta.py                                                |   12
 plotly/validators/choropleth/_metasrc.py                                             |   11
 plotly/validators/choropleth/_name.py                                                |   11
 plotly/validators/choropleth/_reversescale.py                                        |   11
 plotly/validators/choropleth/_selected.py                                            |   20
 plotly/validators/choropleth/_selectedpoints.py                                      |   13
 plotly/validators/choropleth/_showlegend.py                                          |   11
 plotly/validators/choropleth/_showscale.py                                           |   11
 plotly/validators/choropleth/_stream.py                                              |   25
 plotly/validators/choropleth/_text.py                                                |   12
 plotly/validators/choropleth/_textsrc.py                                             |   11
 plotly/validators/choropleth/_uid.py                                                 |   11
 plotly/validators/choropleth/_uirevision.py                                          |   11
 plotly/validators/choropleth/_unselected.py                                          |   20
 plotly/validators/choropleth/_visible.py                                             |   12
 plotly/validators/choropleth/_z.py                                                   |   11
 plotly/validators/choropleth/_zauto.py                                               |   12
 plotly/validators/choropleth/_zmax.py                                                |   12
 plotly/validators/choropleth/_zmid.py                                                |   12
 plotly/validators/choropleth/_zmin.py                                                |   12
 plotly/validators/choropleth/_zsrc.py                                                |   11
 plotly/validators/choropleth/colorbar/__init__.py                                    |  111
 plotly/validators/choropleth/colorbar/_bgcolor.py                                    |   13
 plotly/validators/choropleth/colorbar/_bordercolor.py                                |   13
 plotly/validators/choropleth/colorbar/_borderwidth.py                                |   14
 plotly/validators/choropleth/colorbar/_dtick.py                                      |   14
 plotly/validators/choropleth/colorbar/_exponentformat.py                             |   14
 plotly/validators/choropleth/colorbar/_labelalias.py                                 |   13
 plotly/validators/choropleth/colorbar/_len.py                                        |   12
 plotly/validators/choropleth/colorbar/_lenmode.py                                    |   14
 plotly/validators/choropleth/colorbar/_minexponent.py                                |   14
 plotly/validators/choropleth/colorbar/_nticks.py                                     |   14
 plotly/validators/choropleth/colorbar/_orientation.py                                |   14
 plotly/validators/choropleth/colorbar/_outlinecolor.py                               |   13
 plotly/validators/choropleth/colorbar/_outlinewidth.py                               |   14
 plotly/validators/choropleth/colorbar/_separatethousands.py                          |   16
 plotly/validators/choropleth/colorbar/_showexponent.py                               |   14
 plotly/validators/choropleth/colorbar/_showticklabels.py                             |   13
 plotly/validators/choropleth/colorbar/_showtickprefix.py                             |   14
 plotly/validators/choropleth/colorbar/_showticksuffix.py                             |   14
 plotly/validators/choropleth/colorbar/_thickness.py                                  |   14
 plotly/validators/choropleth/colorbar/_thicknessmode.py                              |   14
 plotly/validators/choropleth/colorbar/_tick0.py                                      |   14
 plotly/validators/choropleth/colorbar/_tickangle.py                                  |   13
 plotly/validators/choropleth/colorbar/_tickcolor.py                                  |   13
 plotly/validators/choropleth/colorbar/_tickfont.py                                   |   39
 plotly/validators/choropleth/colorbar/_tickformat.py                                 |   13
 plotly/validators/choropleth/colorbar/_tickformatstopdefaults.py                     |   21
 plotly/validators/choropleth/colorbar/_tickformatstops.py                            |   51
 plotly/validators/choropleth/colorbar/_ticklabeloverflow.py                          |   17
 plotly/validators/choropleth/colorbar/_ticklabelposition.py                          |   31
 plotly/validators/choropleth/colorbar/_ticklabelstep.py                              |   14
 plotly/validators/choropleth/colorbar/_ticklen.py                                    |   14
 plotly/validators/choropleth/colorbar/_tickmode.py                                   |   15
 plotly/validators/choropleth/colorbar/_tickprefix.py                                 |   13
 plotly/validators/choropleth/colorbar/_ticks.py                                      |   14
 plotly/validators/choropleth/colorbar/_ticksuffix.py                                 |   13
 plotly/validators/choropleth/colorbar/_ticktext.py                                   |   13
 plotly/validators/choropleth/colorbar/_ticktextsrc.py                                |   13
 plotly/validators/choropleth/colorbar/_tickvals.py                                   |   13
 plotly/validators/choropleth/colorbar/_tickvalssrc.py                                |   13
 plotly/validators/choropleth/colorbar/_tickwidth.py                                  |   14
 plotly/validators/choropleth/colorbar/_title.py                                      |   35
 plotly/validators/choropleth/colorbar/_x.py                                          |   11
 plotly/validators/choropleth/colorbar/_xanchor.py                                    |   14
 plotly/validators/choropleth/colorbar/_xpad.py                                       |   12
 plotly/validators/choropleth/colorbar/_xref.py                                       |   12
 plotly/validators/choropleth/colorbar/_y.py                                          |   11
 plotly/validators/choropleth/colorbar/_yanchor.py                                    |   14
 plotly/validators/choropleth/colorbar/_ypad.py                                       |   12
 plotly/validators/choropleth/colorbar/_yref.py                                       |   12
 plotly/validators/choropleth/colorbar/tickfont/__init__.py                           |   15
 plotly/validators/choropleth/colorbar/tickfont/_color.py                             |   13
 plotly/validators/choropleth/colorbar/tickfont/_family.py                            |   15
 plotly/validators/choropleth/colorbar/tickfont/_size.py                              |   14
 plotly/validators/choropleth/colorbar/tickformatstop/__init__.py                     |   23
 plotly/validators/choropleth/colorbar/tickformatstop/_dtickrange.py                  |   23
 plotly/validators/choropleth/colorbar/tickformatstop/_enabled.py                     |   16
 plotly/validators/choropleth/colorbar/tickformatstop/_name.py                        |   16
 plotly/validators/choropleth/colorbar/tickformatstop/_templateitemname.py            |   16
 plotly/validators/choropleth/colorbar/tickformatstop/_value.py                       |   16
 plotly/validators/choropleth/colorbar/title/__init__.py                              |   15
 plotly/validators/choropleth/colorbar/title/_font.py                                 |   39
 plotly/validators/choropleth/colorbar/title/_side.py                                 |   14
 plotly/validators/choropleth/colorbar/title/_text.py                                 |   13
 plotly/validators/choropleth/colorbar/title/font/__init__.py                         |   15
 plotly/validators/choropleth/colorbar/title/font/_color.py                           |   16
 plotly/validators/choropleth/colorbar/title/font/_family.py                          |   18
 plotly/validators/choropleth/colorbar/title/font/_size.py                            |   14
 plotly/validators/choropleth/hoverlabel/__init__.py                                  |   31
 plotly/validators/choropleth/hoverlabel/_align.py                                    |   15
 plotly/validators/choropleth/hoverlabel/_alignsrc.py                                 |   13
 plotly/validators/choropleth/hoverlabel/_bgcolor.py                                  |   14
 plotly/validators/choropleth/hoverlabel/_bgcolorsrc.py                               |   13
 plotly/validators/choropleth/hoverlabel/_bordercolor.py                              |   14
 plotly/validators/choropleth/hoverlabel/_bordercolorsrc.py                           |   16
 plotly/validators/choropleth/hoverlabel/_font.py                                     |   48
 plotly/validators/choropleth/hoverlabel/_namelength.py                               |   15
 plotly/validators/choropleth/hoverlabel/_namelengthsrc.py                            |   13
 plotly/validators/choropleth/hoverlabel/font/__init__.py                             |   25
 plotly/validators/choropleth/hoverlabel/font/_color.py                               |   14
 plotly/validators/choropleth/hoverlabel/font/_colorsrc.py                            |   13
 plotly/validators/choropleth/hoverlabel/font/_family.py                              |   16
 plotly/validators/choropleth/hoverlabel/font/_familysrc.py                           |   16
 plotly/validators/choropleth/hoverlabel/font/_size.py                                |   15
 plotly/validators/choropleth/hoverlabel/font/_sizesrc.py                             |   13
 plotly/validators/choropleth/legendgrouptitle/__init__.py                            |   12
 plotly/validators/choropleth/legendgrouptitle/_font.py                               |   39
 plotly/validators/choropleth/legendgrouptitle/_text.py                               |   13
 plotly/validators/choropleth/legendgrouptitle/font/__init__.py                       |   15
 plotly/validators/choropleth/legendgrouptitle/font/_color.py                         |   16
 plotly/validators/choropleth/legendgrouptitle/font/_family.py                        |   18
 plotly/validators/choropleth/legendgrouptitle/font/_size.py                          |   17
 plotly/validators/choropleth/marker/__init__.py                                      |   19
 plotly/validators/choropleth/marker/_line.py                                         |   32
 plotly/validators/choropleth/marker/_opacity.py                                      |   16
 plotly/validators/choropleth/marker/_opacitysrc.py                                   |   13
 plotly/validators/choropleth/marker/line/__init__.py                                 |   21
 plotly/validators/choropleth/marker/line/_color.py                                   |   14
 plotly/validators/choropleth/marker/line/_colorsrc.py                                |   13
 plotly/validators/choropleth/marker/line/_width.py                                   |   15
 plotly/validators/choropleth/marker/line/_widthsrc.py                                |   13
 plotly/validators/choropleth/selected/__init__.py                                    |   11
 plotly/validators/choropleth/selected/_marker.py                                     |   20
 plotly/validators/choropleth/selected/marker/__init__.py                             |   11
 plotly/validators/choropleth/selected/marker/_opacity.py                             |   15
 plotly/validators/choropleth/stream/__init__.py                                      |   12
 plotly/validators/choropleth/stream/_maxpoints.py                                    |   15
 plotly/validators/choropleth/stream/_token.py                                        |   13
 plotly/validators/choropleth/unselected/__init__.py                                  |   11
 plotly/validators/choropleth/unselected/_marker.py                                   |   21
 plotly/validators/choropleth/unselected/marker/__init__.py                           |   11
 plotly/validators/choropleth/unselected/marker/_opacity.py                           |   18
 plotly/validators/choroplethmapbox/__init__.py                                       |  109
 plotly/validators/choroplethmapbox/_autocolorscale.py                                |   14
 plotly/validators/choroplethmapbox/_below.py                                         |   11
 plotly/validators/choroplethmapbox/_coloraxis.py                                     |   15
 plotly/validators/choroplethmapbox/_colorbar.py                                      |  297
 plotly/validators/choroplethmapbox/_colorscale.py                                    |   14
 plotly/validators/choroplethmapbox/_customdata.py                                    |   13
 plotly/validators/choroplethmapbox/_customdatasrc.py                                 |   13
 plotly/validators/choroplethmapbox/_featureidkey.py                                  |   13
 plotly/validators/choroplethmapbox/_geojson.py                                       |   11
 plotly/validators/choroplethmapbox/_hoverinfo.py                                     |   16
 plotly/validators/choroplethmapbox/_hoverinfosrc.py                                  |   13
 plotly/validators/choroplethmapbox/_hoverlabel.py                                    |   53
 plotly/validators/choroplethmapbox/_hovertemplate.py                                 |   14
 plotly/validators/choroplethmapbox/_hovertemplatesrc.py                              |   13
 plotly/validators/choroplethmapbox/_hovertext.py                                     |   14
 plotly/validators/choroplethmapbox/_hovertextsrc.py                                  |   13
 plotly/validators/choroplethmapbox/_ids.py                                           |   11
 plotly/validators/choroplethmapbox/_idssrc.py                                        |   11
 plotly/validators/choroplethmapbox/_legend.py                                        |   12
 plotly/validators/choroplethmapbox/_legendgroup.py                                   |   13
 plotly/validators/choroplethmapbox/_legendgrouptitle.py                              |   22
 plotly/validators/choroplethmapbox/_legendrank.py                                    |   13
 plotly/validators/choroplethmapbox/_legendwidth.py                                   |   14
 plotly/validators/choroplethmapbox/_locations.py                                     |   13
 plotly/validators/choroplethmapbox/_locationssrc.py                                  |   13
 plotly/validators/choroplethmapbox/_marker.py                                        |   25
 plotly/validators/choroplethmapbox/_meta.py                                          |   12
 plotly/validators/choroplethmapbox/_metasrc.py                                       |   11
 plotly/validators/choroplethmapbox/_name.py                                          |   11
 plotly/validators/choroplethmapbox/_reversescale.py                                  |   13
 plotly/validators/choroplethmapbox/_selected.py                                      |   22
 plotly/validators/choroplethmapbox/_selectedpoints.py                                |   13
 plotly/validators/choroplethmapbox/_showlegend.py                                    |   13
 plotly/validators/choroplethmapbox/_showscale.py                                     |   13
 plotly/validators/choroplethmapbox/_stream.py                                        |   25
 plotly/validators/choroplethmapbox/_subplot.py                                       |   12
 plotly/validators/choroplethmapbox/_text.py                                          |   12
 plotly/validators/choroplethmapbox/_textsrc.py                                       |   11
 plotly/validators/choroplethmapbox/_uid.py                                           |   11
 plotly/validators/choroplethmapbox/_uirevision.py                                    |   13
 plotly/validators/choroplethmapbox/_unselected.py                                    |   22
 plotly/validators/choroplethmapbox/_visible.py                                       |   12
 plotly/validators/choroplethmapbox/_z.py                                             |   11
 plotly/validators/choroplethmapbox/_zauto.py                                         |   12
 plotly/validators/choroplethmapbox/_zmax.py                                          |   12
 plotly/validators/choroplethmapbox/_zmid.py                                          |   12
 plotly/validators/choroplethmapbox/_zmin.py                                          |   12
 plotly/validators/choroplethmapbox/_zsrc.py                                          |   11
 plotly/validators/choroplethmapbox/colorbar/__init__.py                              |  111
 plotly/validators/choroplethmapbox/colorbar/_bgcolor.py                              |   13
 plotly/validators/choroplethmapbox/colorbar/_bordercolor.py                          |   16
 plotly/validators/choroplethmapbox/colorbar/_borderwidth.py                          |   17
 plotly/validators/choroplethmapbox/colorbar/_dtick.py                                |   14
 plotly/validators/choroplethmapbox/colorbar/_exponentformat.py                       |   17
 plotly/validators/choroplethmapbox/colorbar/_labelalias.py                           |   16
 plotly/validators/choroplethmapbox/colorbar/_len.py                                  |   14
 plotly/validators/choroplethmapbox/colorbar/_lenmode.py                              |   14
 plotly/validators/choroplethmapbox/colorbar/_minexponent.py                          |   17
 plotly/validators/choroplethmapbox/colorbar/_nticks.py                               |   14
 plotly/validators/choroplethmapbox/colorbar/_orientation.py                          |   17
 plotly/validators/choroplethmapbox/colorbar/_outlinecolor.py                         |   16
 plotly/validators/choroplethmapbox/colorbar/_outlinewidth.py                         |   17
 plotly/validators/choroplethmapbox/colorbar/_separatethousands.py                    |   16
 plotly/validators/choroplethmapbox/colorbar/_showexponent.py                         |   17
 plotly/validators/choroplethmapbox/colorbar/_showticklabels.py                       |   16
 plotly/validators/choroplethmapbox/colorbar/_showtickprefix.py                       |   17
 plotly/validators/choroplethmapbox/colorbar/_showticksuffix.py                       |   17
 plotly/validators/choroplethmapbox/colorbar/_thickness.py                            |   14
 plotly/validators/choroplethmapbox/colorbar/_thicknessmode.py                        |   17
 plotly/validators/choroplethmapbox/colorbar/_tick0.py                                |   14
 plotly/validators/choroplethmapbox/colorbar/_tickangle.py                            |   13
 plotly/validators/choroplethmapbox/colorbar/_tickcolor.py                            |   13
 plotly/validators/choroplethmapbox/colorbar/_tickfont.py                             |   39
 plotly/validators/choroplethmapbox/colorbar/_tickformat.py                           |   16
 plotly/validators/choroplethmapbox/colorbar/_tickformatstopdefaults.py               |   21
 plotly/validators/choroplethmapbox/colorbar/_tickformatstops.py                      |   54
 plotly/validators/choroplethmapbox/colorbar/_ticklabeloverflow.py                    |   17
 plotly/validators/choroplethmapbox/colorbar/_ticklabelposition.py                    |   31
 plotly/validators/choroplethmapbox/colorbar/_ticklabelstep.py                        |   17
 plotly/validators/choroplethmapbox/colorbar/_ticklen.py                              |   14
 plotly/validators/choroplethmapbox/colorbar/_tickmode.py                             |   15
 plotly/validators/choroplethmapbox/colorbar/_tickprefix.py                           |   16
 plotly/validators/choroplethmapbox/colorbar/_ticks.py                                |   14
 plotly/validators/choroplethmapbox/colorbar/_ticksuffix.py                           |   16
 plotly/validators/choroplethmapbox/colorbar/_ticktext.py                             |   13
 plotly/validators/choroplethmapbox/colorbar/_ticktextsrc.py                          |   16
 plotly/validators/choroplethmapbox/colorbar/_tickvals.py                             |   13
 plotly/validators/choroplethmapbox/colorbar/_tickvalssrc.py                          |   16
 plotly/validators/choroplethmapbox/colorbar/_tickwidth.py                            |   14
 plotly/validators/choroplethmapbox/colorbar/_title.py                                |   35
 plotly/validators/choroplethmapbox/colorbar/_x.py                                    |   13
 plotly/validators/choroplethmapbox/colorbar/_xanchor.py                              |   14
 plotly/validators/choroplethmapbox/colorbar/_xpad.py                                 |   14
 plotly/validators/choroplethmapbox/colorbar/_xref.py                                 |   14
 plotly/validators/choroplethmapbox/colorbar/_y.py                                    |   13
 plotly/validators/choroplethmapbox/colorbar/_yanchor.py                              |   14
 plotly/validators/choroplethmapbox/colorbar/_ypad.py                                 |   14
 plotly/validators/choroplethmapbox/colorbar/_yref.py                                 |   14
 plotly/validators/choroplethmapbox/colorbar/tickfont/__init__.py                     |   15
 plotly/validators/choroplethmapbox/colorbar/tickfont/_color.py                       |   16
 plotly/validators/choroplethmapbox/colorbar/tickfont/_family.py                      |   18
 plotly/validators/choroplethmapbox/colorbar/tickfont/_size.py                        |   17
 plotly/validators/choroplethmapbox/colorbar/tickformatstop/__init__.py               |   23
 plotly/validators/choroplethmapbox/colorbar/tickformatstop/_dtickrange.py            |   23
 plotly/validators/choroplethmapbox/colorbar/tickformatstop/_enabled.py               |   16
 plotly/validators/choroplethmapbox/colorbar/tickformatstop/_name.py                  |   16
 plotly/validators/choroplethmapbox/colorbar/tickformatstop/_templateitemname.py      |   16
 plotly/validators/choroplethmapbox/colorbar/tickformatstop/_value.py                 |   16
 plotly/validators/choroplethmapbox/colorbar/title/__init__.py                        |   15
 plotly/validators/choroplethmapbox/colorbar/title/_font.py                           |   42
 plotly/validators/choroplethmapbox/colorbar/title/_side.py                           |   17
 plotly/validators/choroplethmapbox/colorbar/title/_text.py                           |   16
 plotly/validators/choroplethmapbox/colorbar/title/font/__init__.py                   |   15
 plotly/validators/choroplethmapbox/colorbar/title/font/_color.py                     |   16
 plotly/validators/choroplethmapbox/colorbar/title/font/_family.py                    |   18
 plotly/validators/choroplethmapbox/colorbar/title/font/_size.py                      |   17
 plotly/validators/choroplethmapbox/hoverlabel/__init__.py                            |   31
 plotly/validators/choroplethmapbox/hoverlabel/_align.py                              |   15
 plotly/validators/choroplethmapbox/hoverlabel/_alignsrc.py                           |   16
 plotly/validators/choroplethmapbox/hoverlabel/_bgcolor.py                            |   14
 plotly/validators/choroplethmapbox/hoverlabel/_bgcolorsrc.py                         |   16
 plotly/validators/choroplethmapbox/hoverlabel/_bordercolor.py                        |   17
 plotly/validators/choroplethmapbox/hoverlabel/_bordercolorsrc.py                     |   16
 plotly/validators/choroplethmapbox/hoverlabel/_font.py                               |   48
 plotly/validators/choroplethmapbox/hoverlabel/_namelength.py                         |   18
 plotly/validators/choroplethmapbox/hoverlabel/_namelengthsrc.py                      |   16
 plotly/validators/choroplethmapbox/hoverlabel/font/__init__.py                       |   25
 plotly/validators/choroplethmapbox/hoverlabel/font/_color.py                         |   17
 plotly/validators/choroplethmapbox/hoverlabel/font/_colorsrc.py                      |   16
 plotly/validators/choroplethmapbox/hoverlabel/font/_family.py                        |   19
 plotly/validators/choroplethmapbox/hoverlabel/font/_familysrc.py                     |   16
 plotly/validators/choroplethmapbox/hoverlabel/font/_size.py                          |   18
 plotly/validators/choroplethmapbox/hoverlabel/font/_sizesrc.py                       |   16
 plotly/validators/choroplethmapbox/legendgrouptitle/__init__.py                      |   12
 plotly/validators/choroplethmapbox/legendgrouptitle/_font.py                         |   42
 plotly/validators/choroplethmapbox/legendgrouptitle/_text.py                         |   16
 plotly/validators/choroplethmapbox/legendgrouptitle/font/__init__.py                 |   15
 plotly/validators/choroplethmapbox/legendgrouptitle/font/_color.py                   |   16
 plotly/validators/choroplethmapbox/legendgrouptitle/font/_family.py                  |   18
 plotly/validators/choroplethmapbox/legendgrouptitle/font/_size.py                    |   17
 plotly/validators/choroplethmapbox/marker/__init__.py                                |   19
 plotly/validators/choroplethmapbox/marker/_line.py                                   |   34
 plotly/validators/choroplethmapbox/marker/_opacity.py                                |   16
 plotly/validators/choroplethmapbox/marker/_opacitysrc.py                             |   13
 plotly/validators/choroplethmapbox/marker/line/__init__.py                           |   21
 plotly/validators/choroplethmapbox/marker/line/_color.py                             |   14
 plotly/validators/choroplethmapbox/marker/line/_colorsrc.py                          |   16
 plotly/validators/choroplethmapbox/marker/line/_width.py                             |   15
 plotly/validators/choroplethmapbox/marker/line/_widthsrc.py                          |   16
 plotly/validators/choroplethmapbox/selected/__init__.py                              |   11
 plotly/validators/choroplethmapbox/selected/_marker.py                               |   20
 plotly/validators/choroplethmapbox/selected/marker/__init__.py                       |   11
 plotly/validators/choroplethmapbox/selected/marker/_opacity.py                       |   18
 plotly/validators/choroplethmapbox/stream/__init__.py                                |   12
 plotly/validators/choroplethmapbox/stream/_maxpoints.py                              |   15
 plotly/validators/choroplethmapbox/stream/_token.py                                  |   15
 plotly/validators/choroplethmapbox/unselected/__init__.py                            |   11
 plotly/validators/choroplethmapbox/unselected/_marker.py                             |   21
 plotly/validators/choroplethmapbox/unselected/marker/__init__.py                     |   11
 plotly/validators/choroplethmapbox/unselected/marker/_opacity.py                     |   18
 plotly/validators/cone/__init__.py                                                   |  135
 plotly/validators/cone/_anchor.py                                                    |   12
 plotly/validators/cone/_autocolorscale.py                                            |   12
 plotly/validators/cone/_cauto.py                                                     |   12
 plotly/validators/cone/_cmax.py                                                      |   12
 plotly/validators/cone/_cmid.py                                                      |   12
 plotly/validators/cone/_cmin.py                                                      |   12
 plotly/validators/cone/_coloraxis.py                                                 |   13
 plotly/validators/cone/_colorbar.py                                                  |  291
 plotly/validators/cone/_colorscale.py                                                |   12
 plotly/validators/cone/_customdata.py                                                |   11
 plotly/validators/cone/_customdatasrc.py                                             |   11
 plotly/validators/cone/_hoverinfo.py                                                 |   16
 plotly/validators/cone/_hoverinfosrc.py                                              |   11
 plotly/validators/cone/_hoverlabel.py                                                |   51
 plotly/validators/cone/_hovertemplate.py                                             |   12
 plotly/validators/cone/_hovertemplatesrc.py                                          |   11
 plotly/validators/cone/_hovertext.py                                                 |   12
 plotly/validators/cone/_hovertextsrc.py                                              |   11
 plotly/validators/cone/_ids.py                                                       |   11
 plotly/validators/cone/_idssrc.py                                                    |   11
 plotly/validators/cone/_legend.py                                                    |   12
 plotly/validators/cone/_legendgroup.py                                               |   11
 plotly/validators/cone/_legendgrouptitle.py                                          |   20
 plotly/validators/cone/_legendrank.py                                                |   11
 plotly/validators/cone/_legendwidth.py                                               |   12
 plotly/validators/cone/_lighting.py                                                  |   40
 plotly/validators/cone/_lightposition.py                                             |   25
 plotly/validators/cone/_meta.py                                                      |   12
 plotly/validators/cone/_metasrc.py                                                   |   11
 plotly/validators/cone/_name.py                                                      |   11
 plotly/validators/cone/_opacity.py                                                   |   13
 plotly/validators/cone/_reversescale.py                                              |   11
 plotly/validators/cone/_scene.py                                                     |   12
 plotly/validators/cone/_showlegend.py                                                |   11
 plotly/validators/cone/_showscale.py                                                 |   11
 plotly/validators/cone/_sizemode.py                                                  |   12
 plotly/validators/cone/_sizeref.py                                                   |   12
 plotly/validators/cone/_stream.py                                                    |   25
 plotly/validators/cone/_text.py                                                      |   12
 plotly/validators/cone/_textsrc.py                                                   |   11
 plotly/validators/cone/_u.py                                                         |   11
 plotly/validators/cone/_uhoverformat.py                                              |   11
 plotly/validators/cone/_uid.py                                                       |   11
 plotly/validators/cone/_uirevision.py                                                |   11
 plotly/validators/cone/_usrc.py                                                      |   11
 plotly/validators/cone/_v.py                                                         |   11
 plotly/validators/cone/_vhoverformat.py                                              |   11
 plotly/validators/cone/_visible.py                                                   |   12
 plotly/validators/cone/_vsrc.py                                                      |   11
 plotly/validators/cone/_w.py                                                         |   11
 plotly/validators/cone/_whoverformat.py                                              |   11
 plotly/validators/cone/_wsrc.py                                                      |   11
 plotly/validators/cone/_x.py                                                         |   11
 plotly/validators/cone/_xhoverformat.py                                              |   11
 plotly/validators/cone/_xsrc.py                                                      |   11
 plotly/validators/cone/_y.py                                                         |   11
 plotly/validators/cone/_yhoverformat.py                                              |   11
 plotly/validators/cone/_ysrc.py                                                      |   11
 plotly/validators/cone/_z.py                                                         |   11
 plotly/validators/cone/_zhoverformat.py                                              |   11
 plotly/validators/cone/_zsrc.py                                                      |   11
 plotly/validators/cone/colorbar/__init__.py                                          |  111
 plotly/validators/cone/colorbar/_bgcolor.py                                          |   11
 plotly/validators/cone/colorbar/_bordercolor.py                                      |   13
 plotly/validators/cone/colorbar/_borderwidth.py                                      |   14
 plotly/validators/cone/colorbar/_dtick.py                                            |   12
 plotly/validators/cone/colorbar/_exponentformat.py                                   |   14
 plotly/validators/cone/colorbar/_labelalias.py                                       |   11
 plotly/validators/cone/colorbar/_len.py                                              |   12
 plotly/validators/cone/colorbar/_lenmode.py                                          |   12
 plotly/validators/cone/colorbar/_minexponent.py                                      |   14
 plotly/validators/cone/colorbar/_nticks.py                                           |   12
 plotly/validators/cone/colorbar/_orientation.py                                      |   14
 plotly/validators/cone/colorbar/_outlinecolor.py                                     |   13
 plotly/validators/cone/colorbar/_outlinewidth.py                                     |   14
 plotly/validators/cone/colorbar/_separatethousands.py                                |   13
 plotly/validators/cone/colorbar/_showexponent.py                                     |   14
 plotly/validators/cone/colorbar/_showticklabels.py                                   |   13
 plotly/validators/cone/colorbar/_showtickprefix.py                                   |   14
 plotly/validators/cone/colorbar/_showticksuffix.py                                   |   14
 plotly/validators/cone/colorbar/_thickness.py                                        |   12
 plotly/validators/cone/colorbar/_thicknessmode.py                                    |   14
 plotly/validators/cone/colorbar/_tick0.py                                            |   12
 plotly/validators/cone/colorbar/_tickangle.py                                        |   11
 plotly/validators/cone/colorbar/_tickcolor.py                                        |   11
 plotly/validators/cone/colorbar/_tickfont.py                                         |   37
 plotly/validators/cone/colorbar/_tickformat.py                                       |   11
 plotly/validators/cone/colorbar/_tickformatstopdefaults.py                           |   21
 plotly/validators/cone/colorbar/_tickformatstops.py                                  |   51
 plotly/validators/cone/colorbar/_ticklabeloverflow.py                                |   14
 plotly/validators/cone/colorbar/_ticklabelposition.py                                |   28
 plotly/validators/cone/colorbar/_ticklabelstep.py                                    |   14
 plotly/validators/cone/colorbar/_ticklen.py                                          |   12
 plotly/validators/cone/colorbar/_tickmode.py                                         |   13
 plotly/validators/cone/colorbar/_tickprefix.py                                       |   11
 plotly/validators/cone/colorbar/_ticks.py                                            |   12
 plotly/validators/cone/colorbar/_ticksuffix.py                                       |   11
 plotly/validators/cone/colorbar/_ticktext.py                                         |   11
 plotly/validators/cone/colorbar/_ticktextsrc.py                                      |   13
 plotly/validators/cone/colorbar/_tickvals.py                                         |   11
 plotly/validators/cone/colorbar/_tickvalssrc.py                                      |   13
 plotly/validators/cone/colorbar/_tickwidth.py                                        |   12
 plotly/validators/cone/colorbar/_title.py                                            |   33
 plotly/validators/cone/colorbar/_x.py                                                |   11
 plotly/validators/cone/colorbar/_xanchor.py                                          |   12
 plotly/validators/cone/colorbar/_xpad.py                                             |   12
 plotly/validators/cone/colorbar/_xref.py                                             |   12
 plotly/validators/cone/colorbar/_y.py                                                |   11
 plotly/validators/cone/colorbar/_yanchor.py                                          |   12
 plotly/validators/cone/colorbar/_ypad.py                                             |   12
 plotly/validators/cone/colorbar/_yref.py                                             |   12
 plotly/validators/cone/colorbar/tickfont/__init__.py                                 |   15
 plotly/validators/cone/colorbar/tickfont/_color.py                                   |   13
 plotly/validators/cone/colorbar/tickfont/_family.py                                  |   15
 plotly/validators/cone/colorbar/tickfont/_size.py                                    |   14
 plotly/validators/cone/colorbar/tickformatstop/__init__.py                           |   23
 plotly/validators/cone/colorbar/tickformatstop/_dtickrange.py                        |   23
 plotly/validators/cone/colorbar/tickformatstop/_enabled.py                           |   16
 plotly/validators/cone/colorbar/tickformatstop/_name.py                              |   13
 plotly/validators/cone/colorbar/tickformatstop/_templateitemname.py                  |   16
 plotly/validators/cone/colorbar/tickformatstop/_value.py                             |   13
 plotly/validators/cone/colorbar/title/__init__.py                                    |   15
 plotly/validators/cone/colorbar/title/_font.py                                       |   37
 plotly/validators/cone/colorbar/title/_side.py                                       |   12
 plotly/validators/cone/colorbar/title/_text.py                                       |   11
 plotly/validators/cone/colorbar/title/font/__init__.py                               |   15
 plotly/validators/cone/colorbar/title/font/_color.py                                 |   13
 plotly/validators/cone/colorbar/title/font/_family.py                                |   15
 plotly/validators/cone/colorbar/title/font/_size.py                                  |   14
 plotly/validators/cone/hoverlabel/__init__.py                                        |   31
 plotly/validators/cone/hoverlabel/_align.py                                          |   13
 plotly/validators/cone/hoverlabel/_alignsrc.py                                       |   11
 plotly/validators/cone/hoverlabel/_bgcolor.py                                        |   12
 plotly/validators/cone/hoverlabel/_bgcolorsrc.py                                     |   13
 plotly/validators/cone/hoverlabel/_bordercolor.py                                    |   14
 plotly/validators/cone/hoverlabel/_bordercolorsrc.py                                 |   13
 plotly/validators/cone/hoverlabel/_font.py                                           |   46
 plotly/validators/cone/hoverlabel/_namelength.py                                     |   15
 plotly/validators/cone/hoverlabel/_namelengthsrc.py                                  |   13
 plotly/validators/cone/hoverlabel/font/__init__.py                                   |   25
 plotly/validators/cone/hoverlabel/font/_color.py                                     |   14
 plotly/validators/cone/hoverlabel/font/_colorsrc.py                                  |   13
 plotly/validators/cone/hoverlabel/font/_family.py                                    |   16
 plotly/validators/cone/hoverlabel/font/_familysrc.py                                 |   13
 plotly/validators/cone/hoverlabel/font/_size.py                                      |   15
 plotly/validators/cone/hoverlabel/font/_sizesrc.py                                   |   13
 plotly/validators/cone/legendgrouptitle/__init__.py                                  |   12
 plotly/validators/cone/legendgrouptitle/_font.py                                     |   39
 plotly/validators/cone/legendgrouptitle/_text.py                                     |   13
 plotly/validators/cone/legendgrouptitle/font/__init__.py                             |   15
 plotly/validators/cone/legendgrouptitle/font/_color.py                               |   13
 plotly/validators/cone/legendgrouptitle/font/_family.py                              |   15
 plotly/validators/cone/legendgrouptitle/font/_size.py                                |   14
 plotly/validators/cone/lighting/__init__.py                                          |   27
 plotly/validators/cone/lighting/_ambient.py                                          |   13
 plotly/validators/cone/lighting/_diffuse.py                                          |   13
 plotly/validators/cone/lighting/_facenormalsepsilon.py                               |   15
 plotly/validators/cone/lighting/_fresnel.py                                          |   13
 plotly/validators/cone/lighting/_roughness.py                                        |   13
 plotly/validators/cone/lighting/_specular.py                                         |   13
 plotly/validators/cone/lighting/_vertexnormalsepsilon.py                             |   15
 plotly/validators/cone/lightposition/__init__.py                                     |   13
 plotly/validators/cone/lightposition/_x.py                                           |   13
 plotly/validators/cone/lightposition/_y.py                                           |   13
 plotly/validators/cone/lightposition/_z.py                                           |   13
 plotly/validators/cone/stream/__init__.py                                            |   12
 plotly/validators/cone/stream/_maxpoints.py                                          |   13
 plotly/validators/cone/stream/_token.py                                              |   13
 plotly/validators/contour/__init__.py                                                |  157
 plotly/validators/contour/_autocolorscale.py                                         |   12
 plotly/validators/contour/_autocontour.py                                            |   12
 plotly/validators/contour/_coloraxis.py                                              |   13
 plotly/validators/contour/_colorbar.py                                               |  294
 plotly/validators/contour/_colorscale.py                                             |   12
 plotly/validators/contour/_connectgaps.py                                            |   11
 plotly/validators/contour/_contours.py                                               |   79
 plotly/validators/contour/_customdata.py                                             |   11
 plotly/validators/contour/_customdatasrc.py                                          |   11
 plotly/validators/contour/_dx.py                                                     |   12
 plotly/validators/contour/_dy.py                                                     |   12
 plotly/validators/contour/_fillcolor.py                                              |   12
 plotly/validators/contour/_hoverinfo.py                                              |   14
 plotly/validators/contour/_hoverinfosrc.py                                           |   11
 plotly/validators/contour/_hoverlabel.py                                             |   51
 plotly/validators/contour/_hoverongaps.py                                            |   11
 plotly/validators/contour/_hovertemplate.py                                          |   12
 plotly/validators/contour/_hovertemplatesrc.py                                       |   11
 plotly/validators/contour/_hovertext.py                                              |   11
 plotly/validators/contour/_hovertextsrc.py                                           |   11
 plotly/validators/contour/_ids.py                                                    |   11
 plotly/validators/contour/_idssrc.py                                                 |   11
 plotly/validators/contour/_legend.py                                                 |   12
 plotly/validators/contour/_legendgroup.py                                            |   11
 plotly/validators/contour/_legendgrouptitle.py                                       |   20
 plotly/validators/contour/_legendrank.py                                             |   11
 plotly/validators/contour/_legendwidth.py                                            |   12
 plotly/validators/contour/_line.py                                                   |   33
 plotly/validators/contour/_meta.py                                                   |   12
 plotly/validators/contour/_metasrc.py                                                |   11
 plotly/validators/contour/_name.py                                                   |   11
 plotly/validators/contour/_ncontours.py                                              |   12
 plotly/validators/contour/_opacity.py                                                |   13
 plotly/validators/contour/_reversescale.py                                           |   11
 plotly/validators/contour/_showlegend.py                                             |   11
 plotly/validators/contour/_showscale.py                                              |   11
 plotly/validators/contour/_stream.py                                                 |   25
 plotly/validators/contour/_text.py                                                   |   11
 plotly/validators/contour/_textfont.py                                               |   37
 plotly/validators/contour/_textsrc.py                                                |   11
 plotly/validators/contour/_texttemplate.py                                           |   11
 plotly/validators/contour/_transpose.py                                              |   11
 plotly/validators/contour/_uid.py                                                    |   11
 plotly/validators/contour/_uirevision.py                                             |   11
 plotly/validators/contour/_visible.py                                                |   12
 plotly/validators/contour/_x.py                                                      |   12
 plotly/validators/contour/_x0.py                                                     |   12
 plotly/validators/contour/_xaxis.py                                                  |   12
 plotly/validators/contour/_xcalendar.py                                              |   32
 plotly/validators/contour/_xhoverformat.py                                           |   11
 plotly/validators/contour/_xperiod.py                                                |   12
 plotly/validators/contour/_xperiod0.py                                               |   11
 plotly/validators/contour/_xperiodalignment.py                                       |   13
 plotly/validators/contour/_xsrc.py                                                   |   11
 plotly/validators/contour/_xtype.py                                                  |   12
 plotly/validators/contour/_y.py                                                      |   12
 plotly/validators/contour/_y0.py                                                     |   12
 plotly/validators/contour/_yaxis.py                                                  |   12
 plotly/validators/contour/_ycalendar.py                                              |   32
 plotly/validators/contour/_yhoverformat.py                                           |   11
 plotly/validators/contour/_yperiod.py                                                |   12
 plotly/validators/contour/_yperiod0.py                                               |   11
 plotly/validators/contour/_yperiodalignment.py                                       |   13
 plotly/validators/contour/_ysrc.py                                                   |   11
 plotly/validators/contour/_ytype.py                                                  |   12
 plotly/validators/contour/_z.py                                                      |   11
 plotly/validators/contour/_zauto.py                                                  |   12
 plotly/validators/contour/_zhoverformat.py                                           |   11
 plotly/validators/contour/_zmax.py                                                   |   12
 plotly/validators/contour/_zmid.py                                                   |   12
 plotly/validators/contour/_zmin.py                                                   |   12
 plotly/validators/contour/_zsrc.py                                                   |   11
 plotly/validators/contour/colorbar/__init__.py                                       |  111
 plotly/validators/contour/colorbar/_bgcolor.py                                       |   11
 plotly/validators/contour/colorbar/_bordercolor.py                                   |   13
 plotly/validators/contour/colorbar/_borderwidth.py                                   |   14
 plotly/validators/contour/colorbar/_dtick.py                                         |   12
 plotly/validators/contour/colorbar/_exponentformat.py                                |   14
 plotly/validators/contour/colorbar/_labelalias.py                                    |   13
 plotly/validators/contour/colorbar/_len.py                                           |   12
 plotly/validators/contour/colorbar/_lenmode.py                                       |   12
 plotly/validators/contour/colorbar/_minexponent.py                                   |   14
 plotly/validators/contour/colorbar/_nticks.py                                        |   12
 plotly/validators/contour/colorbar/_orientation.py                                   |   14
 plotly/validators/contour/colorbar/_outlinecolor.py                                  |   13
 plotly/validators/contour/colorbar/_outlinewidth.py                                  |   14
 plotly/validators/contour/colorbar/_separatethousands.py                             |   13
 plotly/validators/contour/colorbar/_showexponent.py                                  |   14
 plotly/validators/contour/colorbar/_showticklabels.py                                |   13
 plotly/validators/contour/colorbar/_showtickprefix.py                                |   14
 plotly/validators/contour/colorbar/_showticksuffix.py                                |   14
 plotly/validators/contour/colorbar/_thickness.py                                     |   14
 plotly/validators/contour/colorbar/_thicknessmode.py                                 |   14
 plotly/validators/contour/colorbar/_tick0.py                                         |   12
 plotly/validators/contour/colorbar/_tickangle.py                                     |   13
 plotly/validators/contour/colorbar/_tickcolor.py                                     |   13
 plotly/validators/contour/colorbar/_tickfont.py                                      |   39
 plotly/validators/contour/colorbar/_tickformat.py                                    |   13
 plotly/validators/contour/colorbar/_tickformatstopdefaults.py                        |   21
 plotly/validators/contour/colorbar/_tickformatstops.py                               |   51
 plotly/validators/contour/colorbar/_ticklabeloverflow.py                             |   14
 plotly/validators/contour/colorbar/_ticklabelposition.py                             |   28
 plotly/validators/contour/colorbar/_ticklabelstep.py                                 |   14
 plotly/validators/contour/colorbar/_ticklen.py                                       |   12
 plotly/validators/contour/colorbar/_tickmode.py                                      |   15
 plotly/validators/contour/colorbar/_tickprefix.py                                    |   13
 plotly/validators/contour/colorbar/_ticks.py                                         |   12
 plotly/validators/contour/colorbar/_ticksuffix.py                                    |   13
 plotly/validators/contour/colorbar/_ticktext.py                                      |   13
 plotly/validators/contour/colorbar/_ticktextsrc.py                                   |   13
 plotly/validators/contour/colorbar/_tickvals.py                                      |   13
 plotly/validators/contour/colorbar/_tickvalssrc.py                                   |   13
 plotly/validators/contour/colorbar/_tickwidth.py                                     |   14
 plotly/validators/contour/colorbar/_title.py                                         |   33
 plotly/validators/contour/colorbar/_x.py                                             |   11
 plotly/validators/contour/colorbar/_xanchor.py                                       |   12
 plotly/validators/contour/colorbar/_xpad.py                                          |   12
 plotly/validators/contour/colorbar/_xref.py                                          |   12
 plotly/validators/contour/colorbar/_y.py                                             |   11
 plotly/validators/contour/colorbar/_yanchor.py                                       |   12
 plotly/validators/contour/colorbar/_ypad.py                                          |   12
 plotly/validators/contour/colorbar/_yref.py                                          |   12
 plotly/validators/contour/colorbar/tickfont/__init__.py                              |   15
 plotly/validators/contour/colorbar/tickfont/_color.py                                |   13
 plotly/validators/contour/colorbar/tickfont/_family.py                               |   15
 plotly/validators/contour/colorbar/tickfont/_size.py                                 |   14
 plotly/validators/contour/colorbar/tickformatstop/__init__.py                        |   23
 plotly/validators/contour/colorbar/tickformatstop/_dtickrange.py                     |   23
 plotly/validators/contour/colorbar/tickformatstop/_enabled.py                        |   16
 plotly/validators/contour/colorbar/tickformatstop/_name.py                           |   16
 plotly/validators/contour/colorbar/tickformatstop/_templateitemname.py               |   16
 plotly/validators/contour/colorbar/tickformatstop/_value.py                          |   16
 plotly/validators/contour/colorbar/title/__init__.py                                 |   15
 plotly/validators/contour/colorbar/title/_font.py                                    |   39
 plotly/validators/contour/colorbar/title/_side.py                                    |   14
 plotly/validators/contour/colorbar/title/_text.py                                    |   13
 plotly/validators/contour/colorbar/title/font/__init__.py                            |   15
 plotly/validators/contour/colorbar/title/font/_color.py                              |   13
 plotly/validators/contour/colorbar/title/font/_family.py                             |   15
 plotly/validators/contour/colorbar/title/font/_size.py                               |   14
 plotly/validators/contour/contours/__init__.py                                       |   35
 plotly/validators/contour/contours/_coloring.py                                      |   14
 plotly/validators/contour/contours/_end.py                                           |   12
 plotly/validators/contour/contours/_labelfont.py                                     |   39
 plotly/validators/contour/contours/_labelformat.py                                   |   13
 plotly/validators/contour/contours/_operation.py                                     |   31
 plotly/validators/contour/contours/_showlabels.py                                    |   13
 plotly/validators/contour/contours/_showlines.py                                     |   13
 plotly/validators/contour/contours/_size.py                                          |   13
 plotly/validators/contour/contours/_start.py                                         |   12
 plotly/validators/contour/contours/_type.py                                          |   12
 plotly/validators/contour/contours/_value.py                                         |   11
 plotly/validators/contour/contours/labelfont/__init__.py                             |   15
 plotly/validators/contour/contours/labelfont/_color.py                               |   13
 plotly/validators/contour/contours/labelfont/_family.py                              |   15
 plotly/validators/contour/contours/labelfont/_size.py                                |   14
 plotly/validators/contour/hoverlabel/__init__.py                                     |   31
 plotly/validators/contour/hoverlabel/_align.py                                       |   13
 plotly/validators/contour/hoverlabel/_alignsrc.py                                    |   13
 plotly/validators/contour/hoverlabel/_bgcolor.py                                     |   14
 plotly/validators/contour/hoverlabel/_bgcolorsrc.py                                  |   13
 plotly/validators/contour/hoverlabel/_bordercolor.py                                 |   14
 plotly/validators/contour/hoverlabel/_bordercolorsrc.py                              |   13
 plotly/validators/contour/hoverlabel/_font.py                                        |   46
 plotly/validators/contour/hoverlabel/_namelength.py                                  |   15
 plotly/validators/contour/hoverlabel/_namelengthsrc.py                               |   13
 plotly/validators/contour/hoverlabel/font/__init__.py                                |   25
 plotly/validators/contour/hoverlabel/font/_color.py                                  |   14
 plotly/validators/contour/hoverlabel/font/_colorsrc.py                               |   13
 plotly/validators/contour/hoverlabel/font/_family.py                                 |   16
 plotly/validators/contour/hoverlabel/font/_familysrc.py                              |   13
 plotly/validators/contour/hoverlabel/font/_size.py                                   |   15
 plotly/validators/contour/hoverlabel/font/_sizesrc.py                                |   13
 plotly/validators/contour/legendgrouptitle/__init__.py                               |   12
 plotly/validators/contour/legendgrouptitle/_font.py                                  |   39
 plotly/validators/contour/legendgrouptitle/_text.py                                  |   13
 plotly/validators/contour/legendgrouptitle/font/__init__.py                          |   15
 plotly/validators/contour/legendgrouptitle/font/_color.py                            |   13
 plotly/validators/contour/legendgrouptitle/font/_family.py                           |   18
 plotly/validators/contour/legendgrouptitle/font/_size.py                             |   14
 plotly/validators/contour/line/__init__.py                                           |   21
 plotly/validators/contour/line/_color.py                                             |   11
 plotly/validators/contour/line/_dash.py                                              |   14
 plotly/validators/contour/line/_smoothing.py                                         |   13
 plotly/validators/contour/line/_width.py                                             |   12
 plotly/validators/contour/stream/__init__.py                                         |   12
 plotly/validators/contour/stream/_maxpoints.py                                       |   13
 plotly/validators/contour/stream/_token.py                                           |   13
 plotly/validators/contour/textfont/__init__.py                                       |   15
 plotly/validators/contour/textfont/_color.py                                         |   11
 plotly/validators/contour/textfont/_family.py                                        |   13
 plotly/validators/contour/textfont/_size.py                                          |   12
 plotly/validators/contourcarpet/__init__.py                                          |  119
 plotly/validators/contourcarpet/_a.py                                                |   12
 plotly/validators/contourcarpet/_a0.py                                               |   12
 plotly/validators/contourcarpet/_asrc.py                                             |   11
 plotly/validators/contourcarpet/_atype.py                                            |   12
 plotly/validators/contourcarpet/_autocolorscale.py                                   |   14
 plotly/validators/contourcarpet/_autocontour.py                                      |   14
 plotly/validators/contourcarpet/_b.py                                                |   12
 plotly/validators/contourcarpet/_b0.py                                               |   12
 plotly/validators/contourcarpet/_bsrc.py                                             |   11
 plotly/validators/contourcarpet/_btype.py                                            |   12
 plotly/validators/contourcarpet/_carpet.py                                           |   11
 plotly/validators/contourcarpet/_coloraxis.py                                        |   13
 plotly/validators/contourcarpet/_colorbar.py                                         |  295
 plotly/validators/contourcarpet/_colorscale.py                                       |   12
 plotly/validators/contourcarpet/_contours.py                                         |   77
 plotly/validators/contourcarpet/_customdata.py                                       |   11
 plotly/validators/contourcarpet/_customdatasrc.py                                    |   13
 plotly/validators/contourcarpet/_da.py                                               |   12
 plotly/validators/contourcarpet/_db.py                                               |   12
 plotly/validators/contourcarpet/_fillcolor.py                                        |   12
 plotly/validators/contourcarpet/_hovertext.py                                        |   11
 plotly/validators/contourcarpet/_hovertextsrc.py                                     |   13
 plotly/validators/contourcarpet/_ids.py                                              |   11
 plotly/validators/contourcarpet/_idssrc.py                                           |   11
 plotly/validators/contourcarpet/_legend.py                                           |   12
 plotly/validators/contourcarpet/_legendgroup.py                                      |   13
 plotly/validators/contourcarpet/_legendgrouptitle.py                                 |   22
 plotly/validators/contourcarpet/_legendrank.py                                       |   11
 plotly/validators/contourcarpet/_legendwidth.py                                      |   14
 plotly/validators/contourcarpet/_line.py                                             |   33
 plotly/validators/contourcarpet/_meta.py                                             |   12
 plotly/validators/contourcarpet/_metasrc.py                                          |   11
 plotly/validators/contourcarpet/_name.py                                             |   11
 plotly/validators/contourcarpet/_ncontours.py                                        |   12
 plotly/validators/contourcarpet/_opacity.py                                          |   13
 plotly/validators/contourcarpet/_reversescale.py                                     |   13
 plotly/validators/contourcarpet/_showlegend.py                                       |   11
 plotly/validators/contourcarpet/_showscale.py                                        |   11
 plotly/validators/contourcarpet/_stream.py                                           |   25
 plotly/validators/contourcarpet/_text.py                                             |   11
 plotly/validators/contourcarpet/_textsrc.py                                          |   11
 plotly/validators/contourcarpet/_transpose.py                                        |   11
 plotly/validators/contourcarpet/_uid.py                                              |   11
 plotly/validators/contourcarpet/_uirevision.py                                       |   11
 plotly/validators/contourcarpet/_visible.py                                          |   12
 plotly/validators/contourcarpet/_xaxis.py                                            |   12
 plotly/validators/contourcarpet/_yaxis.py                                            |   12
 plotly/validators/contourcarpet/_z.py                                                |   11
 plotly/validators/contourcarpet/_zauto.py                                            |   12
 plotly/validators/contourcarpet/_zmax.py                                             |   12
 plotly/validators/contourcarpet/_zmid.py                                             |   12
 plotly/validators/contourcarpet/_zmin.py                                             |   12
 plotly/validators/contourcarpet/_zsrc.py                                             |   11
 plotly/validators/contourcarpet/colorbar/__init__.py                                 |  111
 plotly/validators/contourcarpet/colorbar/_bgcolor.py                                 |   13
 plotly/validators/contourcarpet/colorbar/_bordercolor.py                             |   13
 plotly/validators/contourcarpet/colorbar/_borderwidth.py                             |   14
 plotly/validators/contourcarpet/colorbar/_dtick.py                                   |   14
 plotly/validators/contourcarpet/colorbar/_exponentformat.py                          |   17
 plotly/validators/contourcarpet/colorbar/_labelalias.py                              |   13
 plotly/validators/contourcarpet/colorbar/_len.py                                     |   14
 plotly/validators/contourcarpet/colorbar/_lenmode.py                                 |   14
 plotly/validators/contourcarpet/colorbar/_minexponent.py                             |   14
 plotly/validators/contourcarpet/colorbar/_nticks.py                                  |   14
 plotly/validators/contourcarpet/colorbar/_orientation.py                             |   14
 plotly/validators/contourcarpet/colorbar/_outlinecolor.py                            |   13
 plotly/validators/contourcarpet/colorbar/_outlinewidth.py                            |   14
 plotly/validators/contourcarpet/colorbar/_separatethousands.py                       |   16
 plotly/validators/contourcarpet/colorbar/_showexponent.py                            |   14
 plotly/validators/contourcarpet/colorbar/_showticklabels.py                          |   16
 plotly/validators/contourcarpet/colorbar/_showtickprefix.py                          |   17
 plotly/validators/contourcarpet/colorbar/_showticksuffix.py                          |   17
 plotly/validators/contourcarpet/colorbar/_thickness.py                               |   14
 plotly/validators/contourcarpet/colorbar/_thicknessmode.py                           |   17
 plotly/validators/contourcarpet/colorbar/_tick0.py                                   |   14
 plotly/validators/contourcarpet/colorbar/_tickangle.py                               |   13
 plotly/validators/contourcarpet/colorbar/_tickcolor.py                               |   13
 plotly/validators/contourcarpet/colorbar/_tickfont.py                                |   39
 plotly/validators/contourcarpet/colorbar/_tickformat.py                              |   13
 plotly/validators/contourcarpet/colorbar/_tickformatstopdefaults.py                  |   21
 plotly/validators/contourcarpet/colorbar/_tickformatstops.py                         |   54
 plotly/validators/contourcarpet/colorbar/_ticklabeloverflow.py                       |   17
 plotly/validators/contourcarpet/colorbar/_ticklabelposition.py                       |   31
 plotly/validators/contourcarpet/colorbar/_ticklabelstep.py                           |   17
 plotly/validators/contourcarpet/colorbar/_ticklen.py                                 |   14
 plotly/validators/contourcarpet/colorbar/_tickmode.py                                |   15
 plotly/validators/contourcarpet/colorbar/_tickprefix.py                              |   13
 plotly/validators/contourcarpet/colorbar/_ticks.py                                   |   14
 plotly/validators/contourcarpet/colorbar/_ticksuffix.py                              |   13
 plotly/validators/contourcarpet/colorbar/_ticktext.py                                |   13
 plotly/validators/contourcarpet/colorbar/_ticktextsrc.py                             |   13
 plotly/validators/contourcarpet/colorbar/_tickvals.py                                |   13
 plotly/validators/contourcarpet/colorbar/_tickvalssrc.py                             |   13
 plotly/validators/contourcarpet/colorbar/_tickwidth.py                               |   14
 plotly/validators/contourcarpet/colorbar/_title.py                                   |   35
 plotly/validators/contourcarpet/colorbar/_x.py                                       |   11
 plotly/validators/contourcarpet/colorbar/_xanchor.py                                 |   14
 plotly/validators/contourcarpet/colorbar/_xpad.py                                    |   14
 plotly/validators/contourcarpet/colorbar/_xref.py                                    |   14
 plotly/validators/contourcarpet/colorbar/_y.py                                       |   11
 plotly/validators/contourcarpet/colorbar/_yanchor.py                                 |   14
 plotly/validators/contourcarpet/colorbar/_ypad.py                                    |   14
 plotly/validators/contourcarpet/colorbar/_yref.py                                    |   14
 plotly/validators/contourcarpet/colorbar/tickfont/__init__.py                        |   15
 plotly/validators/contourcarpet/colorbar/tickfont/_color.py                          |   16
 plotly/validators/contourcarpet/colorbar/tickfont/_family.py                         |   18
 plotly/validators/contourcarpet/colorbar/tickfont/_size.py                           |   17
 plotly/validators/contourcarpet/colorbar/tickformatstop/__init__.py                  |   23
 plotly/validators/contourcarpet/colorbar/tickformatstop/_dtickrange.py               |   23
 plotly/validators/contourcarpet/colorbar/tickformatstop/_enabled.py                  |   16
 plotly/validators/contourcarpet/colorbar/tickformatstop/_name.py                     |   16
 plotly/validators/contourcarpet/colorbar/tickformatstop/_templateitemname.py         |   16
 plotly/validators/contourcarpet/colorbar/tickformatstop/_value.py                    |   16
 plotly/validators/contourcarpet/colorbar/title/__init__.py                           |   15
 plotly/validators/contourcarpet/colorbar/title/_font.py                              |   39
 plotly/validators/contourcarpet/colorbar/title/_side.py                              |   14
 plotly/validators/contourcarpet/colorbar/title/_text.py                              |   13
 plotly/validators/contourcarpet/colorbar/title/font/__init__.py                      |   15
 plotly/validators/contourcarpet/colorbar/title/font/_color.py                        |   16
 plotly/validators/contourcarpet/colorbar/title/font/_family.py                       |   18
 plotly/validators/contourcarpet/colorbar/title/font/_size.py                         |   17
 plotly/validators/contourcarpet/contours/__init__.py                                 |   35
 plotly/validators/contourcarpet/contours/_coloring.py                                |   14
 plotly/validators/contourcarpet/contours/_end.py                                     |   14
 plotly/validators/contourcarpet/contours/_labelfont.py                               |   39
 plotly/validators/contourcarpet/contours/_labelformat.py                             |   13
 plotly/validators/contourcarpet/contours/_operation.py                               |   31
 plotly/validators/contourcarpet/contours/_showlabels.py                              |   13
 plotly/validators/contourcarpet/contours/_showlines.py                               |   13
 plotly/validators/contourcarpet/contours/_size.py                                    |   15
 plotly/validators/contourcarpet/contours/_start.py                                   |   14
 plotly/validators/contourcarpet/contours/_type.py                                    |   14
 plotly/validators/contourcarpet/contours/_value.py                                   |   13
 plotly/validators/contourcarpet/contours/labelfont/__init__.py                       |   15
 plotly/validators/contourcarpet/contours/labelfont/_color.py                         |   16
 plotly/validators/contourcarpet/contours/labelfont/_family.py                        |   18
 plotly/validators/contourcarpet/contours/labelfont/_size.py                          |   17
 plotly/validators/contourcarpet/legendgrouptitle/__init__.py                         |   12
 plotly/validators/contourcarpet/legendgrouptitle/_font.py                            |   39
 plotly/validators/contourcarpet/legendgrouptitle/_text.py                            |   13
 plotly/validators/contourcarpet/legendgrouptitle/font/__init__.py                    |   15
 plotly/validators/contourcarpet/legendgrouptitle/font/_color.py                      |   16
 plotly/validators/contourcarpet/legendgrouptitle/font/_family.py                     |   18
 plotly/validators/contourcarpet/legendgrouptitle/font/_size.py                       |   17
 plotly/validators/contourcarpet/line/__init__.py                                     |   21
 plotly/validators/contourcarpet/line/_color.py                                       |   11
 plotly/validators/contourcarpet/line/_dash.py                                        |   14
 plotly/validators/contourcarpet/line/_smoothing.py                                   |   15
 plotly/validators/contourcarpet/line/_width.py                                       |   12
 plotly/validators/contourcarpet/stream/__init__.py                                   |   12
 plotly/validators/contourcarpet/stream/_maxpoints.py                                 |   15
 plotly/validators/contourcarpet/stream/_token.py                                     |   15
 plotly/validators/densitymapbox/__init__.py                                          |  107
 plotly/validators/densitymapbox/_autocolorscale.py                                   |   14
 plotly/validators/densitymapbox/_below.py                                            |   11
 plotly/validators/densitymapbox/_coloraxis.py                                        |   13
 plotly/validators/densitymapbox/_colorbar.py                                         |  295
 plotly/validators/densitymapbox/_colorscale.py                                       |   12
 plotly/validators/densitymapbox/_customdata.py                                       |   11
 plotly/validators/densitymapbox/_customdatasrc.py                                    |   13
 plotly/validators/densitymapbox/_hoverinfo.py                                        |   14
 plotly/validators/densitymapbox/_hoverinfosrc.py                                     |   13
 plotly/validators/densitymapbox/_hoverlabel.py                                       |   51
 plotly/validators/densitymapbox/_hovertemplate.py                                    |   14
 plotly/validators/densitymapbox/_hovertemplatesrc.py                                 |   13
 plotly/validators/densitymapbox/_hovertext.py                                        |   12
 plotly/validators/densitymapbox/_hovertextsrc.py                                     |   13
 plotly/validators/densitymapbox/_ids.py                                              |   11
 plotly/validators/densitymapbox/_idssrc.py                                           |   11
 plotly/validators/densitymapbox/_lat.py                                              |   11
 plotly/validators/densitymapbox/_latsrc.py                                           |   11
 plotly/validators/densitymapbox/_legend.py                                           |   12
 plotly/validators/densitymapbox/_legendgroup.py                                      |   13
 plotly/validators/densitymapbox/_legendgrouptitle.py                                 |   22
 plotly/validators/densitymapbox/_legendrank.py                                       |   11
 plotly/validators/densitymapbox/_legendwidth.py                                      |   14
 plotly/validators/densitymapbox/_lon.py                                              |   11
 plotly/validators/densitymapbox/_lonsrc.py                                           |   11
 plotly/validators/densitymapbox/_meta.py                                             |   12
 plotly/validators/densitymapbox/_metasrc.py                                          |   11
 plotly/validators/densitymapbox/_name.py                                             |   11
 plotly/validators/densitymapbox/_opacity.py                                          |   13
 plotly/validators/densitymapbox/_radius.py                                           |   13
 plotly/validators/densitymapbox/_radiussrc.py                                        |   11
 plotly/validators/densitymapbox/_reversescale.py                                     |   13
 plotly/validators/densitymapbox/_showlegend.py                                       |   11
 plotly/validators/densitymapbox/_showscale.py                                        |   11
 plotly/validators/densitymapbox/_stream.py                                           |   25
 plotly/validators/densitymapbox/_subplot.py                                          |   12
 plotly/validators/densitymapbox/_text.py                                             |   12
 plotly/validators/densitymapbox/_textsrc.py                                          |   11
 plotly/validators/densitymapbox/_uid.py                                              |   11
 plotly/validators/densitymapbox/_uirevision.py                                       |   11
 plotly/validators/densitymapbox/_visible.py                                          |   12
 plotly/validators/densitymapbox/_z.py                                                |   11
 plotly/validators/densitymapbox/_zauto.py                                            |   12
 plotly/validators/densitymapbox/_zmax.py                                             |   12
 plotly/validators/densitymapbox/_zmid.py                                             |   12
 plotly/validators/densitymapbox/_zmin.py                                             |   12
 plotly/validators/densitymapbox/_zsrc.py                                             |   11
 plotly/validators/densitymapbox/colorbar/__init__.py                                 |  111
 plotly/validators/densitymapbox/colorbar/_bgcolor.py                                 |   13
 plotly/validators/densitymapbox/colorbar/_bordercolor.py                             |   13
 plotly/validators/densitymapbox/colorbar/_borderwidth.py                             |   14
 plotly/validators/densitymapbox/colorbar/_dtick.py                                   |   14
 plotly/validators/densitymapbox/colorbar/_exponentformat.py                          |   17
 plotly/validators/densitymapbox/colorbar/_labelalias.py                              |   13
 plotly/validators/densitymapbox/colorbar/_len.py                                     |   14
 plotly/validators/densitymapbox/colorbar/_lenmode.py                                 |   14
 plotly/validators/densitymapbox/colorbar/_minexponent.py                             |   14
 plotly/validators/densitymapbox/colorbar/_nticks.py                                  |   14
 plotly/validators/densitymapbox/colorbar/_orientation.py                             |   14
 plotly/validators/densitymapbox/colorbar/_outlinecolor.py                            |   13
 plotly/validators/densitymapbox/colorbar/_outlinewidth.py                            |   14
 plotly/validators/densitymapbox/colorbar/_separatethousands.py                       |   16
 plotly/validators/densitymapbox/colorbar/_showexponent.py                            |   14
 plotly/validators/densitymapbox/colorbar/_showticklabels.py                          |   16
 plotly/validators/densitymapbox/colorbar/_showtickprefix.py                          |   17
 plotly/validators/densitymapbox/colorbar/_showticksuffix.py                          |   17
 plotly/validators/densitymapbox/colorbar/_thickness.py                               |   14
 plotly/validators/densitymapbox/colorbar/_thicknessmode.py                           |   17
 plotly/validators/densitymapbox/colorbar/_tick0.py                                   |   14
 plotly/validators/densitymapbox/colorbar/_tickangle.py                               |   13
 plotly/validators/densitymapbox/colorbar/_tickcolor.py                               |   13
 plotly/validators/densitymapbox/colorbar/_tickfont.py                                |   39
 plotly/validators/densitymapbox/colorbar/_tickformat.py                              |   13
 plotly/validators/densitymapbox/colorbar/_tickformatstopdefaults.py                  |   21
 plotly/validators/densitymapbox/colorbar/_tickformatstops.py                         |   54
 plotly/validators/densitymapbox/colorbar/_ticklabeloverflow.py                       |   17
 plotly/validators/densitymapbox/colorbar/_ticklabelposition.py                       |   31
 plotly/validators/densitymapbox/colorbar/_ticklabelstep.py                           |   17
 plotly/validators/densitymapbox/colorbar/_ticklen.py                                 |   14
 plotly/validators/densitymapbox/colorbar/_tickmode.py                                |   15
 plotly/validators/densitymapbox/colorbar/_tickprefix.py                              |   13
 plotly/validators/densitymapbox/colorbar/_ticks.py                                   |   14
 plotly/validators/densitymapbox/colorbar/_ticksuffix.py                              |   13
 plotly/validators/densitymapbox/colorbar/_ticktext.py                                |   13
 plotly/validators/densitymapbox/colorbar/_ticktextsrc.py                             |   13
 plotly/validators/densitymapbox/colorbar/_tickvals.py                                |   13
 plotly/validators/densitymapbox/colorbar/_tickvalssrc.py                             |   13
 plotly/validators/densitymapbox/colorbar/_tickwidth.py                               |   14
 plotly/validators/densitymapbox/colorbar/_title.py                                   |   35
 plotly/validators/densitymapbox/colorbar/_x.py                                       |   11
 plotly/validators/densitymapbox/colorbar/_xanchor.py                                 |   14
 plotly/validators/densitymapbox/colorbar/_xpad.py                                    |   14
 plotly/validators/densitymapbox/colorbar/_xref.py                                    |   14
 plotly/validators/densitymapbox/colorbar/_y.py                                       |   11
 plotly/validators/densitymapbox/colorbar/_yanchor.py                                 |   14
 plotly/validators/densitymapbox/colorbar/_ypad.py                                    |   14
 plotly/validators/densitymapbox/colorbar/_yref.py                                    |   14
 plotly/validators/densitymapbox/colorbar/tickfont/__init__.py                        |   15
 plotly/validators/densitymapbox/colorbar/tickfont/_color.py                          |   16
 plotly/validators/densitymapbox/colorbar/tickfont/_family.py                         |   18
 plotly/validators/densitymapbox/colorbar/tickfont/_size.py                           |   17
 plotly/validators/densitymapbox/colorbar/tickformatstop/__init__.py                  |   23
 plotly/validators/densitymapbox/colorbar/tickformatstop/_dtickrange.py               |   23
 plotly/validators/densitymapbox/colorbar/tickformatstop/_enabled.py                  |   16
 plotly/validators/densitymapbox/colorbar/tickformatstop/_name.py                     |   16
 plotly/validators/densitymapbox/colorbar/tickformatstop/_templateitemname.py         |   16
 plotly/validators/densitymapbox/colorbar/tickformatstop/_value.py                    |   16
 plotly/validators/densitymapbox/colorbar/title/__init__.py                           |   15
 plotly/validators/densitymapbox/colorbar/title/_font.py                              |   39
 plotly/validators/densitymapbox/colorbar/title/_side.py                              |   14
 plotly/validators/densitymapbox/colorbar/title/_text.py                              |   13
 plotly/validators/densitymapbox/colorbar/title/font/__init__.py                      |   15
 plotly/validators/densitymapbox/colorbar/title/font/_color.py                        |   16
 plotly/validators/densitymapbox/colorbar/title/font/_family.py                       |   18
 plotly/validators/densitymapbox/colorbar/title/font/_size.py                         |   17
 plotly/validators/densitymapbox/hoverlabel/__init__.py                               |   31
 plotly/validators/densitymapbox/hoverlabel/_align.py                                 |   15
 plotly/validators/densitymapbox/hoverlabel/_alignsrc.py                              |   13
 plotly/validators/densitymapbox/hoverlabel/_bgcolor.py                               |   14
 plotly/validators/densitymapbox/hoverlabel/_bgcolorsrc.py                            |   13
 plotly/validators/densitymapbox/hoverlabel/_bordercolor.py                           |   17
 plotly/validators/densitymapbox/hoverlabel/_bordercolorsrc.py                        |   16
 plotly/validators/densitymapbox/hoverlabel/_font.py                                  |   48
 plotly/validators/densitymapbox/hoverlabel/_namelength.py                            |   15
 plotly/validators/densitymapbox/hoverlabel/_namelengthsrc.py                         |   16
 plotly/validators/densitymapbox/hoverlabel/font/__init__.py                          |   25
 plotly/validators/densitymapbox/hoverlabel/font/_color.py                            |   14
 plotly/validators/densitymapbox/hoverlabel/font/_colorsrc.py                         |   16
 plotly/validators/densitymapbox/hoverlabel/font/_family.py                           |   19
 plotly/validators/densitymapbox/hoverlabel/font/_familysrc.py                        |   16
 plotly/validators/densitymapbox/hoverlabel/font/_size.py                             |   15
 plotly/validators/densitymapbox/hoverlabel/font/_sizesrc.py                          |   16
 plotly/validators/densitymapbox/legendgrouptitle/__init__.py                         |   12
 plotly/validators/densitymapbox/legendgrouptitle/_font.py                            |   39
 plotly/validators/densitymapbox/legendgrouptitle/_text.py                            |   13
 plotly/validators/densitymapbox/legendgrouptitle/font/__init__.py                    |   15
 plotly/validators/densitymapbox/legendgrouptitle/font/_color.py                      |   16
 plotly/validators/densitymapbox/legendgrouptitle/font/_family.py                     |   18
 plotly/validators/densitymapbox/legendgrouptitle/font/_size.py                       |   17
 plotly/validators/densitymapbox/stream/__init__.py                                   |   12
 plotly/validators/densitymapbox/stream/_maxpoints.py                                 |   15
 plotly/validators/densitymapbox/stream/_token.py                                     |   15
 plotly/validators/frame/__init__.py                                                  |   25
 plotly/validators/frame/_baseframe.py                                                |    8
 plotly/validators/frame/_data.py                                                     |    8
 plotly/validators/frame/_group.py                                                    |    8
 plotly/validators/frame/_layout.py                                                   |    8
 plotly/validators/frame/_name.py                                                     |    8
 plotly/validators/frame/_traces.py                                                   |    8
 plotly/validators/funnel/__init__.py                                                 |  143
 plotly/validators/funnel/_alignmentgroup.py                                          |   11
 plotly/validators/funnel/_cliponaxis.py                                              |   11
 plotly/validators/funnel/_connector.py                                               |   25
 plotly/validators/funnel/_constraintext.py                                           |   12
 plotly/validators/funnel/_customdata.py                                              |   11
 plotly/validators/funnel/_customdatasrc.py                                           |   11
 plotly/validators/funnel/_dx.py                                                      |   11
 plotly/validators/funnel/_dy.py                                                      |   11
 plotly/validators/funnel/_hoverinfo.py                                               |   25
 plotly/validators/funnel/_hoverinfosrc.py                                            |   11
 plotly/validators/funnel/_hoverlabel.py                                              |   51
 plotly/validators/funnel/_hovertemplate.py                                           |   12
 plotly/validators/funnel/_hovertemplatesrc.py                                        |   11
 plotly/validators/funnel/_hovertext.py                                               |   12
 plotly/validators/funnel/_hovertextsrc.py                                            |   11
 plotly/validators/funnel/_ids.py                                                     |   11
 plotly/validators/funnel/_idssrc.py                                                  |   11
 plotly/validators/funnel/_insidetextanchor.py                                        |   12
 plotly/validators/funnel/_insidetextfont.py                                          |   46
 plotly/validators/funnel/_legend.py                                                  |   12
 plotly/validators/funnel/_legendgroup.py                                             |   11
 plotly/validators/funnel/_legendgrouptitle.py                                        |   20
 plotly/validators/funnel/_legendrank.py                                              |   11
 plotly/validators/funnel/_legendwidth.py                                             |   12
 plotly/validators/funnel/_marker.py                                                  |  111
 plotly/validators/funnel/_meta.py                                                    |   12
 plotly/validators/funnel/_metasrc.py                                                 |   11
 plotly/validators/funnel/_name.py                                                    |   11
 plotly/validators/funnel/_offset.py                                                  |   12
 plotly/validators/funnel/_offsetgroup.py                                             |   11
 plotly/validators/funnel/_opacity.py                                                 |   13
 plotly/validators/funnel/_orientation.py                                             |   12
 plotly/validators/funnel/_outsidetextfont.py                                         |   46
 plotly/validators/funnel/_selectedpoints.py                                          |   11
 plotly/validators/funnel/_showlegend.py                                              |   11
 plotly/validators/funnel/_stream.py                                                  |   25
 plotly/validators/funnel/_text.py                                                    |   12
 plotly/validators/funnel/_textangle.py                                               |   11
 plotly/validators/funnel/_textfont.py                                                |   46
 plotly/validators/funnel/_textinfo.py                                                |   24
 plotly/validators/funnel/_textposition.py                                            |   13
 plotly/validators/funnel/_textpositionsrc.py                                         |   11
 plotly/validators/funnel/_textsrc.py                                                 |   11
 plotly/validators/funnel/_texttemplate.py                                            |   12
 plotly/validators/funnel/_texttemplatesrc.py                                         |   11
 plotly/validators/funnel/_uid.py                                                     |   11
 plotly/validators/funnel/_uirevision.py                                              |   11
 plotly/validators/funnel/_visible.py                                                 |   12
 plotly/validators/funnel/_width.py                                                   |   13
 plotly/validators/funnel/_x.py                                                       |   11
 plotly/validators/funnel/_x0.py                                                      |   11
 plotly/validators/funnel/_xaxis.py                                                   |   12
 plotly/validators/funnel/_xhoverformat.py                                            |   11
 plotly/validators/funnel/_xperiod.py                                                 |   11
 plotly/validators/funnel/_xperiod0.py                                                |   11
 plotly/validators/funnel/_xperiodalignment.py                                        |   12
 plotly/validators/funnel/_xsrc.py                                                    |   11
 plotly/validators/funnel/_y.py                                                       |   11
 plotly/validators/funnel/_y0.py                                                      |   11
 plotly/validators/funnel/_yaxis.py                                                   |   12
 plotly/validators/funnel/_yhoverformat.py                                            |   11
 plotly/validators/funnel/_yperiod.py                                                 |   11
 plotly/validators/funnel/_yperiod0.py                                                |   11
 plotly/validators/funnel/_yperiodalignment.py                                        |   12
 plotly/validators/funnel/_ysrc.py                                                    |   11
 plotly/validators/funnel/connector/__init__.py                                       |   19
 plotly/validators/funnel/connector/_fillcolor.py                                     |   13
 plotly/validators/funnel/connector/_line.py                                          |   25
 plotly/validators/funnel/connector/_visible.py                                       |   11
 plotly/validators/funnel/connector/line/__init__.py                                  |   15
 plotly/validators/funnel/connector/line/_color.py                                    |   13
 plotly/validators/funnel/connector/line/_dash.py                                     |   16
 plotly/validators/funnel/connector/line/_width.py                                    |   14
 plotly/validators/funnel/hoverlabel/__init__.py                                      |   31
 plotly/validators/funnel/hoverlabel/_align.py                                        |   13
 plotly/validators/funnel/hoverlabel/_alignsrc.py                                     |   13
 plotly/validators/funnel/hoverlabel/_bgcolor.py                                      |   14
 plotly/validators/funnel/hoverlabel/_bgcolorsrc.py                                   |   13
 plotly/validators/funnel/hoverlabel/_bordercolor.py                                  |   14
 plotly/validators/funnel/hoverlabel/_bordercolorsrc.py                               |   13
 plotly/validators/funnel/hoverlabel/_font.py                                         |   46
 plotly/validators/funnel/hoverlabel/_namelength.py                                   |   15
 plotly/validators/funnel/hoverlabel/_namelengthsrc.py                                |   13
 plotly/validators/funnel/hoverlabel/font/__init__.py                                 |   25
 plotly/validators/funnel/hoverlabel/font/_color.py                                   |   14
 plotly/validators/funnel/hoverlabel/font/_colorsrc.py                                |   13
 plotly/validators/funnel/hoverlabel/font/_family.py                                  |   16
 plotly/validators/funnel/hoverlabel/font/_familysrc.py                               |   13
 plotly/validators/funnel/hoverlabel/font/_size.py                                    |   15
 plotly/validators/funnel/hoverlabel/font/_sizesrc.py                                 |   13
 plotly/validators/funnel/insidetextfont/__init__.py                                  |   25
 plotly/validators/funnel/insidetextfont/_color.py                                    |   14
 plotly/validators/funnel/insidetextfont/_colorsrc.py                                 |   13
 plotly/validators/funnel/insidetextfont/_family.py                                   |   16
 plotly/validators/funnel/insidetextfont/_familysrc.py                                |   13
 plotly/validators/funnel/insidetextfont/_size.py                                     |   15
 plotly/validators/funnel/insidetextfont/_sizesrc.py                                  |   13
 plotly/validators/funnel/legendgrouptitle/__init__.py                                |   12
 plotly/validators/funnel/legendgrouptitle/_font.py                                   |   39
 plotly/validators/funnel/legendgrouptitle/_text.py                                   |   13
 plotly/validators/funnel/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/funnel/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/funnel/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/funnel/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/funnel/marker/__init__.py                                          |   43
 plotly/validators/funnel/marker/_autocolorscale.py                                   |   14
 plotly/validators/funnel/marker/_cauto.py                                            |   12
 plotly/validators/funnel/marker/_cmax.py                                             |   12
 plotly/validators/funnel/marker/_cmid.py                                             |   12
 plotly/validators/funnel/marker/_cmin.py                                             |   12
 plotly/validators/funnel/marker/_color.py                                            |   13
 plotly/validators/funnel/marker/_coloraxis.py                                        |   13
 plotly/validators/funnel/marker/_colorbar.py                                         |  295
 plotly/validators/funnel/marker/_colorscale.py                                       |   12
 plotly/validators/funnel/marker/_colorsrc.py                                         |   11
 plotly/validators/funnel/marker/_line.py                                             |  105
 plotly/validators/funnel/marker/_opacity.py                                          |   14
 plotly/validators/funnel/marker/_opacitysrc.py                                       |   11
 plotly/validators/funnel/marker/_reversescale.py                                     |   13
 plotly/validators/funnel/marker/_showscale.py                                        |   11
 plotly/validators/funnel/marker/colorbar/__init__.py                                 |  111
 plotly/validators/funnel/marker/colorbar/_bgcolor.py                                 |   13
 plotly/validators/funnel/marker/colorbar/_bordercolor.py                             |   13
 plotly/validators/funnel/marker/colorbar/_borderwidth.py                             |   14
 plotly/validators/funnel/marker/colorbar/_dtick.py                                   |   14
 plotly/validators/funnel/marker/colorbar/_exponentformat.py                          |   17
 plotly/validators/funnel/marker/colorbar/_labelalias.py                              |   13
 plotly/validators/funnel/marker/colorbar/_len.py                                     |   14
 plotly/validators/funnel/marker/colorbar/_lenmode.py                                 |   14
 plotly/validators/funnel/marker/colorbar/_minexponent.py                             |   14
 plotly/validators/funnel/marker/colorbar/_nticks.py                                  |   14
 plotly/validators/funnel/marker/colorbar/_orientation.py                             |   14
 plotly/validators/funnel/marker/colorbar/_outlinecolor.py                            |   13
 plotly/validators/funnel/marker/colorbar/_outlinewidth.py                            |   14
 plotly/validators/funnel/marker/colorbar/_separatethousands.py                       |   16
 plotly/validators/funnel/marker/colorbar/_showexponent.py                            |   14
 plotly/validators/funnel/marker/colorbar/_showticklabels.py                          |   16
 plotly/validators/funnel/marker/colorbar/_showtickprefix.py                          |   17
 plotly/validators/funnel/marker/colorbar/_showticksuffix.py                          |   17
 plotly/validators/funnel/marker/colorbar/_thickness.py                               |   14
 plotly/validators/funnel/marker/colorbar/_thicknessmode.py                           |   17
 plotly/validators/funnel/marker/colorbar/_tick0.py                                   |   14
 plotly/validators/funnel/marker/colorbar/_tickangle.py                               |   13
 plotly/validators/funnel/marker/colorbar/_tickcolor.py                               |   13
 plotly/validators/funnel/marker/colorbar/_tickfont.py                                |   39
 plotly/validators/funnel/marker/colorbar/_tickformat.py                              |   13
 plotly/validators/funnel/marker/colorbar/_tickformatstopdefaults.py                  |   21
 plotly/validators/funnel/marker/colorbar/_tickformatstops.py                         |   54
 plotly/validators/funnel/marker/colorbar/_ticklabeloverflow.py                       |   17
 plotly/validators/funnel/marker/colorbar/_ticklabelposition.py                       |   31
 plotly/validators/funnel/marker/colorbar/_ticklabelstep.py                           |   17
 plotly/validators/funnel/marker/colorbar/_ticklen.py                                 |   14
 plotly/validators/funnel/marker/colorbar/_tickmode.py                                |   15
 plotly/validators/funnel/marker/colorbar/_tickprefix.py                              |   13
 plotly/validators/funnel/marker/colorbar/_ticks.py                                   |   14
 plotly/validators/funnel/marker/colorbar/_ticksuffix.py                              |   13
 plotly/validators/funnel/marker/colorbar/_ticktext.py                                |   13
 plotly/validators/funnel/marker/colorbar/_ticktextsrc.py                             |   13
 plotly/validators/funnel/marker/colorbar/_tickvals.py                                |   13
 plotly/validators/funnel/marker/colorbar/_tickvalssrc.py                             |   13
 plotly/validators/funnel/marker/colorbar/_tickwidth.py                               |   14
 plotly/validators/funnel/marker/colorbar/_title.py                                   |   35
 plotly/validators/funnel/marker/colorbar/_x.py                                       |   11
 plotly/validators/funnel/marker/colorbar/_xanchor.py                                 |   14
 plotly/validators/funnel/marker/colorbar/_xpad.py                                    |   14
 plotly/validators/funnel/marker/colorbar/_xref.py                                    |   14
 plotly/validators/funnel/marker/colorbar/_y.py                                       |   11
 plotly/validators/funnel/marker/colorbar/_yanchor.py                                 |   14
 plotly/validators/funnel/marker/colorbar/_ypad.py                                    |   14
 plotly/validators/funnel/marker/colorbar/_yref.py                                    |   14
 plotly/validators/funnel/marker/colorbar/tickfont/__init__.py                        |   15
 plotly/validators/funnel/marker/colorbar/tickfont/_color.py                          |   16
 plotly/validators/funnel/marker/colorbar/tickfont/_family.py                         |   18
 plotly/validators/funnel/marker/colorbar/tickfont/_size.py                           |   17
 plotly/validators/funnel/marker/colorbar/tickformatstop/__init__.py                  |   23
 plotly/validators/funnel/marker/colorbar/tickformatstop/_dtickrange.py               |   23
 plotly/validators/funnel/marker/colorbar/tickformatstop/_enabled.py                  |   16
 plotly/validators/funnel/marker/colorbar/tickformatstop/_name.py                     |   16
 plotly/validators/funnel/marker/colorbar/tickformatstop/_templateitemname.py         |   16
 plotly/validators/funnel/marker/colorbar/tickformatstop/_value.py                    |   16
 plotly/validators/funnel/marker/colorbar/title/__init__.py                           |   15
 plotly/validators/funnel/marker/colorbar/title/_font.py                              |   39
 plotly/validators/funnel/marker/colorbar/title/_side.py                              |   14
 plotly/validators/funnel/marker/colorbar/title/_text.py                              |   13
 plotly/validators/funnel/marker/colorbar/title/font/__init__.py                      |   15
 plotly/validators/funnel/marker/colorbar/title/font/_color.py                        |   16
 plotly/validators/funnel/marker/colorbar/title/font/_family.py                       |   18
 plotly/validators/funnel/marker/colorbar/title/font/_size.py                         |   17
 plotly/validators/funnel/marker/line/__init__.py                                     |   37
 plotly/validators/funnel/marker/line/_autocolorscale.py                              |   14
 plotly/validators/funnel/marker/line/_cauto.py                                       |   12
 plotly/validators/funnel/marker/line/_cmax.py                                        |   12
 plotly/validators/funnel/marker/line/_cmid.py                                        |   12
 plotly/validators/funnel/marker/line/_cmin.py                                        |   12
 plotly/validators/funnel/marker/line/_color.py                                       |   15
 plotly/validators/funnel/marker/line/_coloraxis.py                                   |   15
 plotly/validators/funnel/marker/line/_colorscale.py                                  |   14
 plotly/validators/funnel/marker/line/_colorsrc.py                                    |   13
 plotly/validators/funnel/marker/line/_reversescale.py                                |   13
 plotly/validators/funnel/marker/line/_width.py                                       |   13
 plotly/validators/funnel/marker/line/_widthsrc.py                                    |   13
 plotly/validators/funnel/outsidetextfont/__init__.py                                 |   25
 plotly/validators/funnel/outsidetextfont/_color.py                                   |   14
 plotly/validators/funnel/outsidetextfont/_colorsrc.py                                |   13
 plotly/validators/funnel/outsidetextfont/_family.py                                  |   16
 plotly/validators/funnel/outsidetextfont/_familysrc.py                               |   13
 plotly/validators/funnel/outsidetextfont/_size.py                                    |   15
 plotly/validators/funnel/outsidetextfont/_sizesrc.py                                 |   13
 plotly/validators/funnel/stream/__init__.py                                          |   12
 plotly/validators/funnel/stream/_maxpoints.py                                        |   13
 plotly/validators/funnel/stream/_token.py                                            |   13
 plotly/validators/funnel/textfont/__init__.py                                        |   25
 plotly/validators/funnel/textfont/_color.py                                          |   12
 plotly/validators/funnel/textfont/_colorsrc.py                                       |   11
 plotly/validators/funnel/textfont/_family.py                                         |   14
 plotly/validators/funnel/textfont/_familysrc.py                                      |   13
 plotly/validators/funnel/textfont/_size.py                                           |   13
 plotly/validators/funnel/textfont/_sizesrc.py                                        |   11
 plotly/validators/funnelarea/__init__.py                                             |  105
 plotly/validators/funnelarea/_aspectratio.py                                         |   12
 plotly/validators/funnelarea/_baseratio.py                                           |   13
 plotly/validators/funnelarea/_customdata.py                                          |   11
 plotly/validators/funnelarea/_customdatasrc.py                                       |   11
 plotly/validators/funnelarea/_dlabel.py                                              |   11
 plotly/validators/funnelarea/_domain.py                                              |   30
 plotly/validators/funnelarea/_hoverinfo.py                                           |   14
 plotly/validators/funnelarea/_hoverinfosrc.py                                        |   11
 plotly/validators/funnelarea/_hoverlabel.py                                          |   51
 plotly/validators/funnelarea/_hovertemplate.py                                       |   12
 plotly/validators/funnelarea/_hovertemplatesrc.py                                    |   13
 plotly/validators/funnelarea/_hovertext.py                                           |   12
 plotly/validators/funnelarea/_hovertextsrc.py                                        |   11
 plotly/validators/funnelarea/_ids.py                                                 |   11
 plotly/validators/funnelarea/_idssrc.py                                              |   11
 plotly/validators/funnelarea/_insidetextfont.py                                      |   48
 plotly/validators/funnelarea/_label0.py                                              |   11
 plotly/validators/funnelarea/_labels.py                                              |   11
 plotly/validators/funnelarea/_labelssrc.py                                           |   11
 plotly/validators/funnelarea/_legend.py                                              |   12
 plotly/validators/funnelarea/_legendgroup.py                                         |   11
 plotly/validators/funnelarea/_legendgrouptitle.py                                    |   22
 plotly/validators/funnelarea/_legendrank.py                                          |   11
 plotly/validators/funnelarea/_legendwidth.py                                         |   12
 plotly/validators/funnelarea/_marker.py                                              |   29
 plotly/validators/funnelarea/_meta.py                                                |   12
 plotly/validators/funnelarea/_metasrc.py                                             |   11
 plotly/validators/funnelarea/_name.py                                                |   11
 plotly/validators/funnelarea/_opacity.py                                             |   13
 plotly/validators/funnelarea/_scalegroup.py                                          |   11
 plotly/validators/funnelarea/_showlegend.py                                          |   11
 plotly/validators/funnelarea/_stream.py                                              |   25
 plotly/validators/funnelarea/_text.py                                                |   11
 plotly/validators/funnelarea/_textfont.py                                            |   46
 plotly/validators/funnelarea/_textinfo.py                                            |   13
 plotly/validators/funnelarea/_textposition.py                                        |   13
 plotly/validators/funnelarea/_textpositionsrc.py                                     |   13
 plotly/validators/funnelarea/_textsrc.py                                             |   11
 plotly/validators/funnelarea/_texttemplate.py                                        |   12
 plotly/validators/funnelarea/_texttemplatesrc.py                                     |   13
 plotly/validators/funnelarea/_title.py                                               |   30
 plotly/validators/funnelarea/_uid.py                                                 |   11
 plotly/validators/funnelarea/_uirevision.py                                          |   11
 plotly/validators/funnelarea/_values.py                                              |   11
 plotly/validators/funnelarea/_valuessrc.py                                           |   11
 plotly/validators/funnelarea/_visible.py                                             |   12
 plotly/validators/funnelarea/domain/__init__.py                                      |   21
 plotly/validators/funnelarea/domain/_column.py                                       |   12
 plotly/validators/funnelarea/domain/_row.py                                          |   12
 plotly/validators/funnelarea/domain/_x.py                                            |   18
 plotly/validators/funnelarea/domain/_y.py                                            |   18
 plotly/validators/funnelarea/hoverlabel/__init__.py                                  |   31
 plotly/validators/funnelarea/hoverlabel/_align.py                                    |   15
 plotly/validators/funnelarea/hoverlabel/_alignsrc.py                                 |   13
 plotly/validators/funnelarea/hoverlabel/_bgcolor.py                                  |   14
 plotly/validators/funnelarea/hoverlabel/_bgcolorsrc.py                               |   13
 plotly/validators/funnelarea/hoverlabel/_bordercolor.py                              |   14
 plotly/validators/funnelarea/hoverlabel/_bordercolorsrc.py                           |   16
 plotly/validators/funnelarea/hoverlabel/_font.py                                     |   48
 plotly/validators/funnelarea/hoverlabel/_namelength.py                               |   15
 plotly/validators/funnelarea/hoverlabel/_namelengthsrc.py                            |   13
 plotly/validators/funnelarea/hoverlabel/font/__init__.py                             |   25
 plotly/validators/funnelarea/hoverlabel/font/_color.py                               |   14
 plotly/validators/funnelarea/hoverlabel/font/_colorsrc.py                            |   13
 plotly/validators/funnelarea/hoverlabel/font/_family.py                              |   16
 plotly/validators/funnelarea/hoverlabel/font/_familysrc.py                           |   16
 plotly/validators/funnelarea/hoverlabel/font/_size.py                                |   15
 plotly/validators/funnelarea/hoverlabel/font/_sizesrc.py                             |   13
 plotly/validators/funnelarea/insidetextfont/__init__.py                              |   25
 plotly/validators/funnelarea/insidetextfont/_color.py                                |   14
 plotly/validators/funnelarea/insidetextfont/_colorsrc.py                             |   13
 plotly/validators/funnelarea/insidetextfont/_family.py                               |   16
 plotly/validators/funnelarea/insidetextfont/_familysrc.py                            |   13
 plotly/validators/funnelarea/insidetextfont/_size.py                                 |   15
 plotly/validators/funnelarea/insidetextfont/_sizesrc.py                              |   13
 plotly/validators/funnelarea/legendgrouptitle/__init__.py                            |   12
 plotly/validators/funnelarea/legendgrouptitle/_font.py                               |   39
 plotly/validators/funnelarea/legendgrouptitle/_text.py                               |   13
 plotly/validators/funnelarea/legendgrouptitle/font/__init__.py                       |   15
 plotly/validators/funnelarea/legendgrouptitle/font/_color.py                         |   16
 plotly/validators/funnelarea/legendgrouptitle/font/_family.py                        |   18
 plotly/validators/funnelarea/legendgrouptitle/font/_size.py                          |   17
 plotly/validators/funnelarea/marker/__init__.py                                      |   21
 plotly/validators/funnelarea/marker/_colors.py                                       |   11
 plotly/validators/funnelarea/marker/_colorssrc.py                                    |   13
 plotly/validators/funnelarea/marker/_line.py                                         |   28
 plotly/validators/funnelarea/marker/_pattern.py                                      |   66
 plotly/validators/funnelarea/marker/line/__init__.py                                 |   21
 plotly/validators/funnelarea/marker/line/_color.py                                   |   14
 plotly/validators/funnelarea/marker/line/_colorsrc.py                                |   13
 plotly/validators/funnelarea/marker/line/_width.py                                   |   15
 plotly/validators/funnelarea/marker/line/_widthsrc.py                                |   13
 plotly/validators/funnelarea/marker/pattern/__init__.py                              |   37
 plotly/validators/funnelarea/marker/pattern/_bgcolor.py                              |   14
 plotly/validators/funnelarea/marker/pattern/_bgcolorsrc.py                           |   16
 plotly/validators/funnelarea/marker/pattern/_fgcolor.py                              |   14
 plotly/validators/funnelarea/marker/pattern/_fgcolorsrc.py                           |   16
 plotly/validators/funnelarea/marker/pattern/_fgopacity.py                            |   15
 plotly/validators/funnelarea/marker/pattern/_fillmode.py                             |   14
 plotly/validators/funnelarea/marker/pattern/_shape.py                                |   15
 plotly/validators/funnelarea/marker/pattern/_shapesrc.py                             |   13
 plotly/validators/funnelarea/marker/pattern/_size.py                                 |   15
 plotly/validators/funnelarea/marker/pattern/_sizesrc.py                              |   13
 plotly/validators/funnelarea/marker/pattern/_solidity.py                             |   16
 plotly/validators/funnelarea/marker/pattern/_soliditysrc.py                          |   16
 plotly/validators/funnelarea/stream/__init__.py                                      |   12
 plotly/validators/funnelarea/stream/_maxpoints.py                                    |   15
 plotly/validators/funnelarea/stream/_token.py                                        |   13
 plotly/validators/funnelarea/textfont/__init__.py                                    |   25
 plotly/validators/funnelarea/textfont/_color.py                                      |   14
 plotly/validators/funnelarea/textfont/_colorsrc.py                                   |   13
 plotly/validators/funnelarea/textfont/_family.py                                     |   16
 plotly/validators/funnelarea/textfont/_familysrc.py                                  |   13
 plotly/validators/funnelarea/textfont/_size.py                                       |   13
 plotly/validators/funnelarea/textfont/_sizesrc.py                                    |   13
 plotly/validators/funnelarea/title/__init__.py                                       |   19
 plotly/validators/funnelarea/title/_font.py                                          |   46
 plotly/validators/funnelarea/title/_position.py                                      |   14
 plotly/validators/funnelarea/title/_text.py                                          |   11
 plotly/validators/funnelarea/title/font/__init__.py                                  |   25
 plotly/validators/funnelarea/title/font/_color.py                                    |   14
 plotly/validators/funnelarea/title/font/_colorsrc.py                                 |   13
 plotly/validators/funnelarea/title/font/_family.py                                   |   16
 plotly/validators/funnelarea/title/font/_familysrc.py                                |   13
 plotly/validators/funnelarea/title/font/_size.py                                     |   15
 plotly/validators/funnelarea/title/font/_sizesrc.py                                  |   13
 plotly/validators/heatmap/__init__.py                                                |  153
 plotly/validators/heatmap/_autocolorscale.py                                         |   12
 plotly/validators/heatmap/_coloraxis.py                                              |   13
 plotly/validators/heatmap/_colorbar.py                                               |  294
 plotly/validators/heatmap/_colorscale.py                                             |   12
 plotly/validators/heatmap/_connectgaps.py                                            |   11
 plotly/validators/heatmap/_customdata.py                                             |   11
 plotly/validators/heatmap/_customdatasrc.py                                          |   11
 plotly/validators/heatmap/_dx.py                                                     |   12
 plotly/validators/heatmap/_dy.py                                                     |   12
 plotly/validators/heatmap/_hoverinfo.py                                              |   14
 plotly/validators/heatmap/_hoverinfosrc.py                                           |   11
 plotly/validators/heatmap/_hoverlabel.py                                             |   51
 plotly/validators/heatmap/_hoverongaps.py                                            |   11
 plotly/validators/heatmap/_hovertemplate.py                                          |   12
 plotly/validators/heatmap/_hovertemplatesrc.py                                       |   11
 plotly/validators/heatmap/_hovertext.py                                              |   11
 plotly/validators/heatmap/_hovertextsrc.py                                           |   11
 plotly/validators/heatmap/_ids.py                                                    |   11
 plotly/validators/heatmap/_idssrc.py                                                 |   11
 plotly/validators/heatmap/_legend.py                                                 |   12
 plotly/validators/heatmap/_legendgroup.py                                            |   11
 plotly/validators/heatmap/_legendgrouptitle.py                                       |   20
 plotly/validators/heatmap/_legendrank.py                                             |   11
 plotly/validators/heatmap/_legendwidth.py                                            |   12
 plotly/validators/heatmap/_meta.py                                                   |   12
 plotly/validators/heatmap/_metasrc.py                                                |   11
 plotly/validators/heatmap/_name.py                                                   |   11
 plotly/validators/heatmap/_opacity.py                                                |   13
 plotly/validators/heatmap/_reversescale.py                                           |   11
 plotly/validators/heatmap/_showlegend.py                                             |   11
 plotly/validators/heatmap/_showscale.py                                              |   11
 plotly/validators/heatmap/_stream.py                                                 |   25
 plotly/validators/heatmap/_text.py                                                   |   11
 plotly/validators/heatmap/_textfont.py                                               |   37
 plotly/validators/heatmap/_textsrc.py                                                |   11
 plotly/validators/heatmap/_texttemplate.py                                           |   11
 plotly/validators/heatmap/_transpose.py                                              |   11
 plotly/validators/heatmap/_uid.py                                                    |   11
 plotly/validators/heatmap/_uirevision.py                                             |   11
 plotly/validators/heatmap/_visible.py                                                |   12
 plotly/validators/heatmap/_x.py                                                      |   12
 plotly/validators/heatmap/_x0.py                                                     |   12
 plotly/validators/heatmap/_xaxis.py                                                  |   12
 plotly/validators/heatmap/_xcalendar.py                                              |   32
 plotly/validators/heatmap/_xgap.py                                                   |   12
 plotly/validators/heatmap/_xhoverformat.py                                           |   11
 plotly/validators/heatmap/_xperiod.py                                                |   12
 plotly/validators/heatmap/_xperiod0.py                                               |   12
 plotly/validators/heatmap/_xperiodalignment.py                                       |   13
 plotly/validators/heatmap/_xsrc.py                                                   |   11
 plotly/validators/heatmap/_xtype.py                                                  |   12
 plotly/validators/heatmap/_y.py                                                      |   12
 plotly/validators/heatmap/_y0.py                                                     |   12
 plotly/validators/heatmap/_yaxis.py                                                  |   12
 plotly/validators/heatmap/_ycalendar.py                                              |   32
 plotly/validators/heatmap/_ygap.py                                                   |   12
 plotly/validators/heatmap/_yhoverformat.py                                           |   11
 plotly/validators/heatmap/_yperiod.py                                                |   12
 plotly/validators/heatmap/_yperiod0.py                                               |   12
 plotly/validators/heatmap/_yperiodalignment.py                                       |   13
 plotly/validators/heatmap/_ysrc.py                                                   |   11
 plotly/validators/heatmap/_ytype.py                                                  |   12
 plotly/validators/heatmap/_z.py                                                      |   11
 plotly/validators/heatmap/_zauto.py                                                  |   12
 plotly/validators/heatmap/_zhoverformat.py                                           |   11
 plotly/validators/heatmap/_zmax.py                                                   |   12
 plotly/validators/heatmap/_zmid.py                                                   |   12
 plotly/validators/heatmap/_zmin.py                                                   |   12
 plotly/validators/heatmap/_zsmooth.py                                                |   12
 plotly/validators/heatmap/_zsrc.py                                                   |   11
 plotly/validators/heatmap/colorbar/__init__.py                                       |  111
 plotly/validators/heatmap/colorbar/_bgcolor.py                                       |   11
 plotly/validators/heatmap/colorbar/_bordercolor.py                                   |   13
 plotly/validators/heatmap/colorbar/_borderwidth.py                                   |   14
 plotly/validators/heatmap/colorbar/_dtick.py                                         |   12
 plotly/validators/heatmap/colorbar/_exponentformat.py                                |   14
 plotly/validators/heatmap/colorbar/_labelalias.py                                    |   13
 plotly/validators/heatmap/colorbar/_len.py                                           |   12
 plotly/validators/heatmap/colorbar/_lenmode.py                                       |   12
 plotly/validators/heatmap/colorbar/_minexponent.py                                   |   14
 plotly/validators/heatmap/colorbar/_nticks.py                                        |   12
 plotly/validators/heatmap/colorbar/_orientation.py                                   |   14
 plotly/validators/heatmap/colorbar/_outlinecolor.py                                  |   13
 plotly/validators/heatmap/colorbar/_outlinewidth.py                                  |   14
 plotly/validators/heatmap/colorbar/_separatethousands.py                             |   13
 plotly/validators/heatmap/colorbar/_showexponent.py                                  |   14
 plotly/validators/heatmap/colorbar/_showticklabels.py                                |   13
 plotly/validators/heatmap/colorbar/_showtickprefix.py                                |   14
 plotly/validators/heatmap/colorbar/_showticksuffix.py                                |   14
 plotly/validators/heatmap/colorbar/_thickness.py                                     |   14
 plotly/validators/heatmap/colorbar/_thicknessmode.py                                 |   14
 plotly/validators/heatmap/colorbar/_tick0.py                                         |   12
 plotly/validators/heatmap/colorbar/_tickangle.py                                     |   13
 plotly/validators/heatmap/colorbar/_tickcolor.py                                     |   13
 plotly/validators/heatmap/colorbar/_tickfont.py                                      |   39
 plotly/validators/heatmap/colorbar/_tickformat.py                                    |   13
 plotly/validators/heatmap/colorbar/_tickformatstopdefaults.py                        |   21
 plotly/validators/heatmap/colorbar/_tickformatstops.py                               |   51
 plotly/validators/heatmap/colorbar/_ticklabeloverflow.py                             |   14
 plotly/validators/heatmap/colorbar/_ticklabelposition.py                             |   28
 plotly/validators/heatmap/colorbar/_ticklabelstep.py                                 |   14
 plotly/validators/heatmap/colorbar/_ticklen.py                                       |   12
 plotly/validators/heatmap/colorbar/_tickmode.py                                      |   15
 plotly/validators/heatmap/colorbar/_tickprefix.py                                    |   13
 plotly/validators/heatmap/colorbar/_ticks.py                                         |   12
 plotly/validators/heatmap/colorbar/_ticksuffix.py                                    |   13
 plotly/validators/heatmap/colorbar/_ticktext.py                                      |   13
 plotly/validators/heatmap/colorbar/_ticktextsrc.py                                   |   13
 plotly/validators/heatmap/colorbar/_tickvals.py                                      |   13
 plotly/validators/heatmap/colorbar/_tickvalssrc.py                                   |   13
 plotly/validators/heatmap/colorbar/_tickwidth.py                                     |   14
 plotly/validators/heatmap/colorbar/_title.py                                         |   33
 plotly/validators/heatmap/colorbar/_x.py                                             |   11
 plotly/validators/heatmap/colorbar/_xanchor.py                                       |   12
 plotly/validators/heatmap/colorbar/_xpad.py                                          |   12
 plotly/validators/heatmap/colorbar/_xref.py                                          |   12
 plotly/validators/heatmap/colorbar/_y.py                                             |   11
 plotly/validators/heatmap/colorbar/_yanchor.py                                       |   12
 plotly/validators/heatmap/colorbar/_ypad.py                                          |   12
 plotly/validators/heatmap/colorbar/_yref.py                                          |   12
 plotly/validators/heatmap/colorbar/tickfont/__init__.py                              |   15
 plotly/validators/heatmap/colorbar/tickfont/_color.py                                |   13
 plotly/validators/heatmap/colorbar/tickfont/_family.py                               |   15
 plotly/validators/heatmap/colorbar/tickfont/_size.py                                 |   14
 plotly/validators/heatmap/colorbar/tickformatstop/__init__.py                        |   23
 plotly/validators/heatmap/colorbar/tickformatstop/_dtickrange.py                     |   23
 plotly/validators/heatmap/colorbar/tickformatstop/_enabled.py                        |   16
 plotly/validators/heatmap/colorbar/tickformatstop/_name.py                           |   16
 plotly/validators/heatmap/colorbar/tickformatstop/_templateitemname.py               |   16
 plotly/validators/heatmap/colorbar/tickformatstop/_value.py                          |   16
 plotly/validators/heatmap/colorbar/title/__init__.py                                 |   15
 plotly/validators/heatmap/colorbar/title/_font.py                                    |   39
 plotly/validators/heatmap/colorbar/title/_side.py                                    |   14
 plotly/validators/heatmap/colorbar/title/_text.py                                    |   13
 plotly/validators/heatmap/colorbar/title/font/__init__.py                            |   15
 plotly/validators/heatmap/colorbar/title/font/_color.py                              |   13
 plotly/validators/heatmap/colorbar/title/font/_family.py                             |   15
 plotly/validators/heatmap/colorbar/title/font/_size.py                               |   14
 plotly/validators/heatmap/hoverlabel/__init__.py                                     |   31
 plotly/validators/heatmap/hoverlabel/_align.py                                       |   13
 plotly/validators/heatmap/hoverlabel/_alignsrc.py                                    |   13
 plotly/validators/heatmap/hoverlabel/_bgcolor.py                                     |   14
 plotly/validators/heatmap/hoverlabel/_bgcolorsrc.py                                  |   13
 plotly/validators/heatmap/hoverlabel/_bordercolor.py                                 |   14
 plotly/validators/heatmap/hoverlabel/_bordercolorsrc.py                              |   13
 plotly/validators/heatmap/hoverlabel/_font.py                                        |   46
 plotly/validators/heatmap/hoverlabel/_namelength.py                                  |   15
 plotly/validators/heatmap/hoverlabel/_namelengthsrc.py                               |   13
 plotly/validators/heatmap/hoverlabel/font/__init__.py                                |   25
 plotly/validators/heatmap/hoverlabel/font/_color.py                                  |   14
 plotly/validators/heatmap/hoverlabel/font/_colorsrc.py                               |   13
 plotly/validators/heatmap/hoverlabel/font/_family.py                                 |   16
 plotly/validators/heatmap/hoverlabel/font/_familysrc.py                              |   13
 plotly/validators/heatmap/hoverlabel/font/_size.py                                   |   15
 plotly/validators/heatmap/hoverlabel/font/_sizesrc.py                                |   13
 plotly/validators/heatmap/legendgrouptitle/__init__.py                               |   12
 plotly/validators/heatmap/legendgrouptitle/_font.py                                  |   39
 plotly/validators/heatmap/legendgrouptitle/_text.py                                  |   13
 plotly/validators/heatmap/legendgrouptitle/font/__init__.py                          |   15
 plotly/validators/heatmap/legendgrouptitle/font/_color.py                            |   13
 plotly/validators/heatmap/legendgrouptitle/font/_family.py                           |   18
 plotly/validators/heatmap/legendgrouptitle/font/_size.py                             |   14
 plotly/validators/heatmap/stream/__init__.py                                         |   12
 plotly/validators/heatmap/stream/_maxpoints.py                                       |   13
 plotly/validators/heatmap/stream/_token.py                                           |   13
 plotly/validators/heatmap/textfont/__init__.py                                       |   15
 plotly/validators/heatmap/textfont/_color.py                                         |   11
 plotly/validators/heatmap/textfont/_family.py                                        |   13
 plotly/validators/heatmap/textfont/_size.py                                          |   12
 plotly/validators/heatmapgl/__init__.py                                              |  107
 plotly/validators/heatmapgl/_autocolorscale.py                                       |   12
 plotly/validators/heatmapgl/_coloraxis.py                                            |   13
 plotly/validators/heatmapgl/_colorbar.py                                             |  294
 plotly/validators/heatmapgl/_colorscale.py                                           |   12
 plotly/validators/heatmapgl/_customdata.py                                           |   11
 plotly/validators/heatmapgl/_customdatasrc.py                                        |   11
 plotly/validators/heatmapgl/_dx.py                                                   |   12
 plotly/validators/heatmapgl/_dy.py                                                   |   12
 plotly/validators/heatmapgl/_hoverinfo.py                                            |   14
 plotly/validators/heatmapgl/_hoverinfosrc.py                                         |   11
 plotly/validators/heatmapgl/_hoverlabel.py                                           |   51
 plotly/validators/heatmapgl/_ids.py                                                  |   11
 plotly/validators/heatmapgl/_idssrc.py                                               |   11
 plotly/validators/heatmapgl/_legend.py                                               |   12
 plotly/validators/heatmapgl/_legendgrouptitle.py                                     |   22
 plotly/validators/heatmapgl/_legendrank.py                                           |   11
 plotly/validators/heatmapgl/_legendwidth.py                                          |   12
 plotly/validators/heatmapgl/_meta.py                                                 |   12
 plotly/validators/heatmapgl/_metasrc.py                                              |   11
 plotly/validators/heatmapgl/_name.py                                                 |   11
 plotly/validators/heatmapgl/_opacity.py                                              |   13
 plotly/validators/heatmapgl/_reversescale.py                                         |   11
 plotly/validators/heatmapgl/_showscale.py                                            |   11
 plotly/validators/heatmapgl/_stream.py                                               |   25
 plotly/validators/heatmapgl/_text.py                                                 |   11
 plotly/validators/heatmapgl/_textsrc.py                                              |   11
 plotly/validators/heatmapgl/_transpose.py                                            |   11
 plotly/validators/heatmapgl/_uid.py                                                  |   11
 plotly/validators/heatmapgl/_uirevision.py                                           |   11
 plotly/validators/heatmapgl/_visible.py                                              |   12
 plotly/validators/heatmapgl/_x.py                                                    |   12
 plotly/validators/heatmapgl/_x0.py                                                   |   12
 plotly/validators/heatmapgl/_xaxis.py                                                |   12
 plotly/validators/heatmapgl/_xsrc.py                                                 |   11
 plotly/validators/heatmapgl/_xtype.py                                                |   12
 plotly/validators/heatmapgl/_y.py                                                    |   12
 plotly/validators/heatmapgl/_y0.py                                                   |   12
 plotly/validators/heatmapgl/_yaxis.py                                                |   12
 plotly/validators/heatmapgl/_ysrc.py                                                 |   11
 plotly/validators/heatmapgl/_ytype.py                                                |   12
 plotly/validators/heatmapgl/_z.py                                                    |   11
 plotly/validators/heatmapgl/_zauto.py                                                |   12
 plotly/validators/heatmapgl/_zmax.py                                                 |   12
 plotly/validators/heatmapgl/_zmid.py                                                 |   12
 plotly/validators/heatmapgl/_zmin.py                                                 |   12
 plotly/validators/heatmapgl/_zsmooth.py                                              |   12
 plotly/validators/heatmapgl/_zsrc.py                                                 |   11
 plotly/validators/heatmapgl/colorbar/__init__.py                                     |  111
 plotly/validators/heatmapgl/colorbar/_bgcolor.py                                     |   13
 plotly/validators/heatmapgl/colorbar/_bordercolor.py                                 |   13
 plotly/validators/heatmapgl/colorbar/_borderwidth.py                                 |   14
 plotly/validators/heatmapgl/colorbar/_dtick.py                                       |   12
 plotly/validators/heatmapgl/colorbar/_exponentformat.py                              |   14
 plotly/validators/heatmapgl/colorbar/_labelalias.py                                  |   13
 plotly/validators/heatmapgl/colorbar/_len.py                                         |   12
 plotly/validators/heatmapgl/colorbar/_lenmode.py                                     |   14
 plotly/validators/heatmapgl/colorbar/_minexponent.py                                 |   14
 plotly/validators/heatmapgl/colorbar/_nticks.py                                      |   14
 plotly/validators/heatmapgl/colorbar/_orientation.py                                 |   14
 plotly/validators/heatmapgl/colorbar/_outlinecolor.py                                |   13
 plotly/validators/heatmapgl/colorbar/_outlinewidth.py                                |   14
 plotly/validators/heatmapgl/colorbar/_separatethousands.py                           |   16
 plotly/validators/heatmapgl/colorbar/_showexponent.py                                |   14
 plotly/validators/heatmapgl/colorbar/_showticklabels.py                              |   13
 plotly/validators/heatmapgl/colorbar/_showtickprefix.py                              |   14
 plotly/validators/heatmapgl/colorbar/_showticksuffix.py                              |   14
 plotly/validators/heatmapgl/colorbar/_thickness.py                                   |   14
 plotly/validators/heatmapgl/colorbar/_thicknessmode.py                               |   14
 plotly/validators/heatmapgl/colorbar/_tick0.py                                       |   12
 plotly/validators/heatmapgl/colorbar/_tickangle.py                                   |   13
 plotly/validators/heatmapgl/colorbar/_tickcolor.py                                   |   13
 plotly/validators/heatmapgl/colorbar/_tickfont.py                                    |   39
 plotly/validators/heatmapgl/colorbar/_tickformat.py                                  |   13
 plotly/validators/heatmapgl/colorbar/_tickformatstopdefaults.py                      |   21
 plotly/validators/heatmapgl/colorbar/_tickformatstops.py                             |   51
 plotly/validators/heatmapgl/colorbar/_ticklabeloverflow.py                           |   17
 plotly/validators/heatmapgl/colorbar/_ticklabelposition.py                           |   31
 plotly/validators/heatmapgl/colorbar/_ticklabelstep.py                               |   14
 plotly/validators/heatmapgl/colorbar/_ticklen.py                                     |   14
 plotly/validators/heatmapgl/colorbar/_tickmode.py                                    |   15
 plotly/validators/heatmapgl/colorbar/_tickprefix.py                                  |   13
 plotly/validators/heatmapgl/colorbar/_ticks.py                                       |   12
 plotly/validators/heatmapgl/colorbar/_ticksuffix.py                                  |   13
 plotly/validators/heatmapgl/colorbar/_ticktext.py                                    |   13
 plotly/validators/heatmapgl/colorbar/_ticktextsrc.py                                 |   13
 plotly/validators/heatmapgl/colorbar/_tickvals.py                                    |   13
 plotly/validators/heatmapgl/colorbar/_tickvalssrc.py                                 |   13
 plotly/validators/heatmapgl/colorbar/_tickwidth.py                                   |   14
 plotly/validators/heatmapgl/colorbar/_title.py                                       |   33
 plotly/validators/heatmapgl/colorbar/_x.py                                           |   11
 plotly/validators/heatmapgl/colorbar/_xanchor.py                                     |   14
 plotly/validators/heatmapgl/colorbar/_xpad.py                                        |   12
 plotly/validators/heatmapgl/colorbar/_xref.py                                        |   12
 plotly/validators/heatmapgl/colorbar/_y.py                                           |   11
 plotly/validators/heatmapgl/colorbar/_yanchor.py                                     |   14
 plotly/validators/heatmapgl/colorbar/_ypad.py                                        |   12
 plotly/validators/heatmapgl/colorbar/_yref.py                                        |   12
 plotly/validators/heatmapgl/colorbar/tickfont/__init__.py                            |   15
 plotly/validators/heatmapgl/colorbar/tickfont/_color.py                              |   13
 plotly/validators/heatmapgl/colorbar/tickfont/_family.py                             |   15
 plotly/validators/heatmapgl/colorbar/tickfont/_size.py                               |   14
 plotly/validators/heatmapgl/colorbar/tickformatstop/__init__.py                      |   23
 plotly/validators/heatmapgl/colorbar/tickformatstop/_dtickrange.py                   |   23
 plotly/validators/heatmapgl/colorbar/tickformatstop/_enabled.py                      |   16
 plotly/validators/heatmapgl/colorbar/tickformatstop/_name.py                         |   16
 plotly/validators/heatmapgl/colorbar/tickformatstop/_templateitemname.py             |   16
 plotly/validators/heatmapgl/colorbar/tickformatstop/_value.py                        |   16
 plotly/validators/heatmapgl/colorbar/title/__init__.py                               |   15
 plotly/validators/heatmapgl/colorbar/title/_font.py                                  |   39
 plotly/validators/heatmapgl/colorbar/title/_side.py                                  |   14
 plotly/validators/heatmapgl/colorbar/title/_text.py                                  |   13
 plotly/validators/heatmapgl/colorbar/title/font/__init__.py                          |   15
 plotly/validators/heatmapgl/colorbar/title/font/_color.py                            |   13
 plotly/validators/heatmapgl/colorbar/title/font/_family.py                           |   18
 plotly/validators/heatmapgl/colorbar/title/font/_size.py                             |   14
 plotly/validators/heatmapgl/hoverlabel/__init__.py                                   |   31
 plotly/validators/heatmapgl/hoverlabel/_align.py                                     |   15
 plotly/validators/heatmapgl/hoverlabel/_alignsrc.py                                  |   13
 plotly/validators/heatmapgl/hoverlabel/_bgcolor.py                                   |   14
 plotly/validators/heatmapgl/hoverlabel/_bgcolorsrc.py                                |   13
 plotly/validators/heatmapgl/hoverlabel/_bordercolor.py                               |   14
 plotly/validators/heatmapgl/hoverlabel/_bordercolorsrc.py                            |   13
 plotly/validators/heatmapgl/hoverlabel/_font.py                                      |   48
 plotly/validators/heatmapgl/hoverlabel/_namelength.py                                |   15
 plotly/validators/heatmapgl/hoverlabel/_namelengthsrc.py                             |   13
 plotly/validators/heatmapgl/hoverlabel/font/__init__.py                              |   25
 plotly/validators/heatmapgl/hoverlabel/font/_color.py                                |   14
 plotly/validators/heatmapgl/hoverlabel/font/_colorsrc.py                             |   13
 plotly/validators/heatmapgl/hoverlabel/font/_family.py                               |   16
 plotly/validators/heatmapgl/hoverlabel/font/_familysrc.py                            |   13
 plotly/validators/heatmapgl/hoverlabel/font/_size.py                                 |   15
 plotly/validators/heatmapgl/hoverlabel/font/_sizesrc.py                              |   13
 plotly/validators/heatmapgl/legendgrouptitle/__init__.py                             |   12
 plotly/validators/heatmapgl/legendgrouptitle/_font.py                                |   39
 plotly/validators/heatmapgl/legendgrouptitle/_text.py                                |   13
 plotly/validators/heatmapgl/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/heatmapgl/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/heatmapgl/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/heatmapgl/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/heatmapgl/stream/__init__.py                                       |   12
 plotly/validators/heatmapgl/stream/_maxpoints.py                                     |   15
 plotly/validators/heatmapgl/stream/_token.py                                         |   13
 plotly/validators/histogram/__init__.py                                              |  143
 plotly/validators/histogram/_alignmentgroup.py                                       |   11
 plotly/validators/histogram/_autobinx.py                                             |   11
 plotly/validators/histogram/_autobiny.py                                             |   11
 plotly/validators/histogram/_bingroup.py                                             |   11
 plotly/validators/histogram/_cliponaxis.py                                           |   11
 plotly/validators/histogram/_constraintext.py                                        |   12
 plotly/validators/histogram/_cumulative.py                                           |   42
 plotly/validators/histogram/_customdata.py                                           |   11
 plotly/validators/histogram/_customdatasrc.py                                        |   11
 plotly/validators/histogram/_error_x.py                                              |   73
 plotly/validators/histogram/_error_y.py                                              |   71
 plotly/validators/histogram/_histfunc.py                                             |   12
 plotly/validators/histogram/_histnorm.py                                             |   15
 plotly/validators/histogram/_hoverinfo.py                                            |   14
 plotly/validators/histogram/_hoverinfosrc.py                                         |   11
 plotly/validators/histogram/_hoverlabel.py                                           |   51
 plotly/validators/histogram/_hovertemplate.py                                        |   12
 plotly/validators/histogram/_hovertemplatesrc.py                                     |   13
 plotly/validators/histogram/_hovertext.py                                            |   12
 plotly/validators/histogram/_hovertextsrc.py                                         |   11
 plotly/validators/histogram/_ids.py                                                  |   11
 plotly/validators/histogram/_idssrc.py                                               |   11
 plotly/validators/histogram/_insidetextanchor.py                                     |   14
 plotly/validators/histogram/_insidetextfont.py                                       |   37
 plotly/validators/histogram/_legend.py                                               |   12
 plotly/validators/histogram/_legendgroup.py                                          |   11
 plotly/validators/histogram/_legendgrouptitle.py                                     |   22
 plotly/validators/histogram/_legendrank.py                                           |   11
 plotly/validators/histogram/_legendwidth.py                                          |   12
 plotly/validators/histogram/_marker.py                                               |  121
 plotly/validators/histogram/_meta.py                                                 |   12
 plotly/validators/histogram/_metasrc.py                                              |   11
 plotly/validators/histogram/_name.py                                                 |   11
 plotly/validators/histogram/_nbinsx.py                                               |   12
 plotly/validators/histogram/_nbinsy.py                                               |   12
 plotly/validators/histogram/_offsetgroup.py                                          |   11
 plotly/validators/histogram/_opacity.py                                              |   13
 plotly/validators/histogram/_orientation.py                                          |   12
 plotly/validators/histogram/_outsidetextfont.py                                      |   39
 plotly/validators/histogram/_selected.py                                             |   24
 plotly/validators/histogram/_selectedpoints.py                                       |   11
 plotly/validators/histogram/_showlegend.py                                           |   11
 plotly/validators/histogram/_stream.py                                               |   25
 plotly/validators/histogram/_text.py                                                 |   12
 plotly/validators/histogram/_textangle.py                                            |   11
 plotly/validators/histogram/_textfont.py                                             |   37
 plotly/validators/histogram/_textposition.py                                         |   13
 plotly/validators/histogram/_textsrc.py                                              |   11
 plotly/validators/histogram/_texttemplate.py                                         |   11
 plotly/validators/histogram/_uid.py                                                  |   11
 plotly/validators/histogram/_uirevision.py                                           |   11
 plotly/validators/histogram/_unselected.py                                           |   24
 plotly/validators/histogram/_visible.py                                              |   12
 plotly/validators/histogram/_x.py                                                    |   11
 plotly/validators/histogram/_xaxis.py                                                |   12
 plotly/validators/histogram/_xbins.py                                                |   60
 plotly/validators/histogram/_xcalendar.py                                            |   32
 plotly/validators/histogram/_xhoverformat.py                                         |   11
 plotly/validators/histogram/_xsrc.py                                                 |   11
 plotly/validators/histogram/_y.py                                                    |   11
 plotly/validators/histogram/_yaxis.py                                                |   12
 plotly/validators/histogram/_ybins.py                                                |   60
 plotly/validators/histogram/_ycalendar.py                                            |   32
 plotly/validators/histogram/_yhoverformat.py                                         |   11
 plotly/validators/histogram/_ysrc.py                                                 |   11
 plotly/validators/histogram/cumulative/__init__.py                                   |   19
 plotly/validators/histogram/cumulative/_currentbin.py                                |   14
 plotly/validators/histogram/cumulative/_direction.py                                 |   14
 plotly/validators/histogram/cumulative/_enabled.py                                   |   13
 plotly/validators/histogram/error_x/__init__.py                                      |   43
 plotly/validators/histogram/error_x/_array.py                                        |   11
 plotly/validators/histogram/error_x/_arrayminus.py                                   |   13
 plotly/validators/histogram/error_x/_arrayminussrc.py                                |   13
 plotly/validators/histogram/error_x/_arraysrc.py                                     |   13
 plotly/validators/histogram/error_x/_color.py                                        |   11
 plotly/validators/histogram/error_x/_copy_ystyle.py                                  |   13
 plotly/validators/histogram/error_x/_symmetric.py                                    |   13
 plotly/validators/histogram/error_x/_thickness.py                                    |   14
 plotly/validators/histogram/error_x/_traceref.py                                     |   14
 plotly/validators/histogram/error_x/_tracerefminus.py                                |   14
 plotly/validators/histogram/error_x/_type.py                                         |   12
 plotly/validators/histogram/error_x/_value.py                                        |   12
 plotly/validators/histogram/error_x/_valueminus.py                                   |   14
 plotly/validators/histogram/error_x/_visible.py                                      |   13
 plotly/validators/histogram/error_x/_width.py                                        |   12
 plotly/validators/histogram/error_y/__init__.py                                      |   41
 plotly/validators/histogram/error_y/_array.py                                        |   11
 plotly/validators/histogram/error_y/_arrayminus.py                                   |   13
 plotly/validators/histogram/error_y/_arrayminussrc.py                                |   13
 plotly/validators/histogram/error_y/_arraysrc.py                                     |   13
 plotly/validators/histogram/error_y/_color.py                                        |   11
 plotly/validators/histogram/error_y/_symmetric.py                                    |   13
 plotly/validators/histogram/error_y/_thickness.py                                    |   14
 plotly/validators/histogram/error_y/_traceref.py                                     |   14
 plotly/validators/histogram/error_y/_tracerefminus.py                                |   14
 plotly/validators/histogram/error_y/_type.py                                         |   12
 plotly/validators/histogram/error_y/_value.py                                        |   12
 plotly/validators/histogram/error_y/_valueminus.py                                   |   14
 plotly/validators/histogram/error_y/_visible.py                                      |   13
 plotly/validators/histogram/error_y/_width.py                                        |   12
 plotly/validators/histogram/hoverlabel/__init__.py                                   |   31
 plotly/validators/histogram/hoverlabel/_align.py                                     |   15
 plotly/validators/histogram/hoverlabel/_alignsrc.py                                  |   13
 plotly/validators/histogram/hoverlabel/_bgcolor.py                                   |   14
 plotly/validators/histogram/hoverlabel/_bgcolorsrc.py                                |   13
 plotly/validators/histogram/hoverlabel/_bordercolor.py                               |   14
 plotly/validators/histogram/hoverlabel/_bordercolorsrc.py                            |   13
 plotly/validators/histogram/hoverlabel/_font.py                                      |   48
 plotly/validators/histogram/hoverlabel/_namelength.py                                |   15
 plotly/validators/histogram/hoverlabel/_namelengthsrc.py                             |   13
 plotly/validators/histogram/hoverlabel/font/__init__.py                              |   25
 plotly/validators/histogram/hoverlabel/font/_color.py                                |   14
 plotly/validators/histogram/hoverlabel/font/_colorsrc.py                             |   13
 plotly/validators/histogram/hoverlabel/font/_family.py                               |   16
 plotly/validators/histogram/hoverlabel/font/_familysrc.py                            |   13
 plotly/validators/histogram/hoverlabel/font/_size.py                                 |   15
 plotly/validators/histogram/hoverlabel/font/_sizesrc.py                              |   13
 plotly/validators/histogram/insidetextfont/__init__.py                               |   15
 plotly/validators/histogram/insidetextfont/_color.py                                 |   13
 plotly/validators/histogram/insidetextfont/_family.py                                |   15
 plotly/validators/histogram/insidetextfont/_size.py                                  |   14
 plotly/validators/histogram/legendgrouptitle/__init__.py                             |   12
 plotly/validators/histogram/legendgrouptitle/_font.py                                |   39
 plotly/validators/histogram/legendgrouptitle/_text.py                                |   13
 plotly/validators/histogram/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/histogram/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/histogram/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/histogram/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/histogram/marker/__init__.py                                       |   47
 plotly/validators/histogram/marker/_autocolorscale.py                                |   14
 plotly/validators/histogram/marker/_cauto.py                                         |   12
 plotly/validators/histogram/marker/_cmax.py                                          |   12
 plotly/validators/histogram/marker/_cmid.py                                          |   12
 plotly/validators/histogram/marker/_cmin.py                                          |   12
 plotly/validators/histogram/marker/_color.py                                         |   15
 plotly/validators/histogram/marker/_coloraxis.py                                     |   15
 plotly/validators/histogram/marker/_colorbar.py                                      |  297
 plotly/validators/histogram/marker/_colorscale.py                                    |   14
 plotly/validators/histogram/marker/_colorsrc.py                                      |   13
 plotly/validators/histogram/marker/_cornerradius.py                                  |   13
 plotly/validators/histogram/marker/_line.py                                          |  105
 plotly/validators/histogram/marker/_opacity.py                                       |   14
 plotly/validators/histogram/marker/_opacitysrc.py                                    |   13
 plotly/validators/histogram/marker/_pattern.py                                       |   64
 plotly/validators/histogram/marker/_reversescale.py                                  |   13
 plotly/validators/histogram/marker/_showscale.py                                     |   13
 plotly/validators/histogram/marker/colorbar/__init__.py                              |  111
 plotly/validators/histogram/marker/colorbar/_bgcolor.py                              |   13
 plotly/validators/histogram/marker/colorbar/_bordercolor.py                          |   16
 plotly/validators/histogram/marker/colorbar/_borderwidth.py                          |   17
 plotly/validators/histogram/marker/colorbar/_dtick.py                                |   14
 plotly/validators/histogram/marker/colorbar/_exponentformat.py                       |   17
 plotly/validators/histogram/marker/colorbar/_labelalias.py                           |   16
 plotly/validators/histogram/marker/colorbar/_len.py                                  |   14
 plotly/validators/histogram/marker/colorbar/_lenmode.py                              |   14
 plotly/validators/histogram/marker/colorbar/_minexponent.py                          |   17
 plotly/validators/histogram/marker/colorbar/_nticks.py                               |   14
 plotly/validators/histogram/marker/colorbar/_orientation.py                          |   17
 plotly/validators/histogram/marker/colorbar/_outlinecolor.py                         |   16
 plotly/validators/histogram/marker/colorbar/_outlinewidth.py                         |   17
 plotly/validators/histogram/marker/colorbar/_separatethousands.py                    |   16
 plotly/validators/histogram/marker/colorbar/_showexponent.py                         |   17
 plotly/validators/histogram/marker/colorbar/_showticklabels.py                       |   16
 plotly/validators/histogram/marker/colorbar/_showtickprefix.py                       |   17
 plotly/validators/histogram/marker/colorbar/_showticksuffix.py                       |   17
 plotly/validators/histogram/marker/colorbar/_thickness.py                            |   14
 plotly/validators/histogram/marker/colorbar/_thicknessmode.py                        |   17
 plotly/validators/histogram/marker/colorbar/_tick0.py                                |   14
 plotly/validators/histogram/marker/colorbar/_tickangle.py                            |   13
 plotly/validators/histogram/marker/colorbar/_tickcolor.py                            |   13
 plotly/validators/histogram/marker/colorbar/_tickfont.py                             |   39
 plotly/validators/histogram/marker/colorbar/_tickformat.py                           |   16
 plotly/validators/histogram/marker/colorbar/_tickformatstopdefaults.py               |   21
 plotly/validators/histogram/marker/colorbar/_tickformatstops.py                      |   54
 plotly/validators/histogram/marker/colorbar/_ticklabeloverflow.py                    |   17
 plotly/validators/histogram/marker/colorbar/_ticklabelposition.py                    |   31
 plotly/validators/histogram/marker/colorbar/_ticklabelstep.py                        |   17
 plotly/validators/histogram/marker/colorbar/_ticklen.py                              |   14
 plotly/validators/histogram/marker/colorbar/_tickmode.py                             |   15
 plotly/validators/histogram/marker/colorbar/_tickprefix.py                           |   16
 plotly/validators/histogram/marker/colorbar/_ticks.py                                |   14
 plotly/validators/histogram/marker/colorbar/_ticksuffix.py                           |   16
 plotly/validators/histogram/marker/colorbar/_ticktext.py                             |   13
 plotly/validators/histogram/marker/colorbar/_ticktextsrc.py                          |   16
 plotly/validators/histogram/marker/colorbar/_tickvals.py                             |   13
 plotly/validators/histogram/marker/colorbar/_tickvalssrc.py                          |   16
 plotly/validators/histogram/marker/colorbar/_tickwidth.py                            |   14
 plotly/validators/histogram/marker/colorbar/_title.py                                |   35
 plotly/validators/histogram/marker/colorbar/_x.py                                    |   13
 plotly/validators/histogram/marker/colorbar/_xanchor.py                              |   14
 plotly/validators/histogram/marker/colorbar/_xpad.py                                 |   14
 plotly/validators/histogram/marker/colorbar/_xref.py                                 |   14
 plotly/validators/histogram/marker/colorbar/_y.py                                    |   13
 plotly/validators/histogram/marker/colorbar/_yanchor.py                              |   14
 plotly/validators/histogram/marker/colorbar/_ypad.py                                 |   14
 plotly/validators/histogram/marker/colorbar/_yref.py                                 |   14
 plotly/validators/histogram/marker/colorbar/tickfont/__init__.py                     |   15
 plotly/validators/histogram/marker/colorbar/tickfont/_color.py                       |   16
 plotly/validators/histogram/marker/colorbar/tickfont/_family.py                      |   18
 plotly/validators/histogram/marker/colorbar/tickfont/_size.py                        |   17
 plotly/validators/histogram/marker/colorbar/tickformatstop/__init__.py               |   23
 plotly/validators/histogram/marker/colorbar/tickformatstop/_dtickrange.py            |   23
 plotly/validators/histogram/marker/colorbar/tickformatstop/_enabled.py               |   16
 plotly/validators/histogram/marker/colorbar/tickformatstop/_name.py                  |   16
 plotly/validators/histogram/marker/colorbar/tickformatstop/_templateitemname.py      |   16
 plotly/validators/histogram/marker/colorbar/tickformatstop/_value.py                 |   16
 plotly/validators/histogram/marker/colorbar/title/__init__.py                        |   15
 plotly/validators/histogram/marker/colorbar/title/_font.py                           |   42
 plotly/validators/histogram/marker/colorbar/title/_side.py                           |   17
 plotly/validators/histogram/marker/colorbar/title/_text.py                           |   16
 plotly/validators/histogram/marker/colorbar/title/font/__init__.py                   |   15
 plotly/validators/histogram/marker/colorbar/title/font/_color.py                     |   16
 plotly/validators/histogram/marker/colorbar/title/font/_family.py                    |   18
 plotly/validators/histogram/marker/colorbar/title/font/_size.py                      |   17
 plotly/validators/histogram/marker/line/__init__.py                                  |   37
 plotly/validators/histogram/marker/line/_autocolorscale.py                           |   17
 plotly/validators/histogram/marker/line/_cauto.py                                    |   14
 plotly/validators/histogram/marker/line/_cmax.py                                     |   14
 plotly/validators/histogram/marker/line/_cmid.py                                     |   14
 plotly/validators/histogram/marker/line/_cmin.py                                     |   14
 plotly/validators/histogram/marker/line/_color.py                                    |   17
 plotly/validators/histogram/marker/line/_coloraxis.py                                |   15
 plotly/validators/histogram/marker/line/_colorscale.py                               |   14
 plotly/validators/histogram/marker/line/_colorsrc.py                                 |   13
 plotly/validators/histogram/marker/line/_reversescale.py                             |   13
 plotly/validators/histogram/marker/line/_width.py                                    |   15
 plotly/validators/histogram/marker/line/_widthsrc.py                                 |   13
 plotly/validators/histogram/marker/pattern/__init__.py                               |   37
 plotly/validators/histogram/marker/pattern/_bgcolor.py                               |   14
 plotly/validators/histogram/marker/pattern/_bgcolorsrc.py                            |   13
 plotly/validators/histogram/marker/pattern/_fgcolor.py                               |   14
 plotly/validators/histogram/marker/pattern/_fgcolorsrc.py                            |   13
 plotly/validators/histogram/marker/pattern/_fgopacity.py                             |   15
 plotly/validators/histogram/marker/pattern/_fillmode.py                              |   14
 plotly/validators/histogram/marker/pattern/_shape.py                                 |   15
 plotly/validators/histogram/marker/pattern/_shapesrc.py                              |   13
 plotly/validators/histogram/marker/pattern/_size.py                                  |   15
 plotly/validators/histogram/marker/pattern/_sizesrc.py                               |   13
 plotly/validators/histogram/marker/pattern/_solidity.py                              |   16
 plotly/validators/histogram/marker/pattern/_soliditysrc.py                           |   16
 plotly/validators/histogram/outsidetextfont/__init__.py                              |   15
 plotly/validators/histogram/outsidetextfont/_color.py                                |   13
 plotly/validators/histogram/outsidetextfont/_family.py                               |   15
 plotly/validators/histogram/outsidetextfont/_size.py                                 |   14
 plotly/validators/histogram/selected/__init__.py                                     |   12
 plotly/validators/histogram/selected/_marker.py                                      |   22
 plotly/validators/histogram/selected/_textfont.py                                    |   20
 plotly/validators/histogram/selected/marker/__init__.py                              |   12
 plotly/validators/histogram/selected/marker/_color.py                                |   13
 plotly/validators/histogram/selected/marker/_opacity.py                              |   15
 plotly/validators/histogram/selected/textfont/__init__.py                            |   11
 plotly/validators/histogram/selected/textfont/_color.py                              |   13
 plotly/validators/histogram/stream/__init__.py                                       |   12
 plotly/validators/histogram/stream/_maxpoints.py                                     |   15
 plotly/validators/histogram/stream/_token.py                                         |   13
 plotly/validators/histogram/textfont/__init__.py                                     |   15
 plotly/validators/histogram/textfont/_color.py                                       |   11
 plotly/validators/histogram/textfont/_family.py                                      |   15
 plotly/validators/histogram/textfont/_size.py                                        |   12
 plotly/validators/histogram/unselected/__init__.py                                   |   12
 plotly/validators/histogram/unselected/_marker.py                                    |   24
 plotly/validators/histogram/unselected/_textfont.py                                  |   21
 plotly/validators/histogram/unselected/marker/__init__.py                            |   12
 plotly/validators/histogram/unselected/marker/_color.py                              |   13
 plotly/validators/histogram/unselected/marker/_opacity.py                            |   15
 plotly/validators/histogram/unselected/textfont/__init__.py                          |   11
 plotly/validators/histogram/unselected/textfont/_color.py                            |   13
 plotly/validators/histogram/xbins/__init__.py                                        |   15
 plotly/validators/histogram/xbins/_end.py                                            |   11
 plotly/validators/histogram/xbins/_size.py                                           |   11
 plotly/validators/histogram/xbins/_start.py                                          |   11
 plotly/validators/histogram/ybins/__init__.py                                        |   15
 plotly/validators/histogram/ybins/_end.py                                            |   11
 plotly/validators/histogram/ybins/_size.py                                           |   11
 plotly/validators/histogram/ybins/_start.py                                          |   11
 plotly/validators/histogram2d/__init__.py                                            |  139
 plotly/validators/histogram2d/_autobinx.py                                           |   11
 plotly/validators/histogram2d/_autobiny.py                                           |   11
 plotly/validators/histogram2d/_autocolorscale.py                                     |   14
 plotly/validators/histogram2d/_bingroup.py                                           |   11
 plotly/validators/histogram2d/_coloraxis.py                                          |   13
 plotly/validators/histogram2d/_colorbar.py                                           |  295
 plotly/validators/histogram2d/_colorscale.py                                         |   12
 plotly/validators/histogram2d/_customdata.py                                         |   11
 plotly/validators/histogram2d/_customdatasrc.py                                      |   13
 plotly/validators/histogram2d/_histfunc.py                                           |   12
 plotly/validators/histogram2d/_histnorm.py                                           |   15
 plotly/validators/histogram2d/_hoverinfo.py                                          |   14
 plotly/validators/histogram2d/_hoverinfosrc.py                                       |   11
 plotly/validators/histogram2d/_hoverlabel.py                                         |   51
 plotly/validators/histogram2d/_hovertemplate.py                                      |   14
 plotly/validators/histogram2d/_hovertemplatesrc.py                                   |   13
 plotly/validators/histogram2d/_ids.py                                                |   11
 plotly/validators/histogram2d/_idssrc.py                                             |   11
 plotly/validators/histogram2d/_legend.py                                             |   12
 plotly/validators/histogram2d/_legendgroup.py                                        |   11
 plotly/validators/histogram2d/_legendgrouptitle.py                                   |   22
 plotly/validators/histogram2d/_legendrank.py                                         |   11
 plotly/validators/histogram2d/_legendwidth.py                                        |   12
 plotly/validators/histogram2d/_marker.py                                             |   21
 plotly/validators/histogram2d/_meta.py                                               |   12
 plotly/validators/histogram2d/_metasrc.py                                            |   11
 plotly/validators/histogram2d/_name.py                                               |   11
 plotly/validators/histogram2d/_nbinsx.py                                             |   12
 plotly/validators/histogram2d/_nbinsy.py                                             |   12
 plotly/validators/histogram2d/_opacity.py                                            |   13
 plotly/validators/histogram2d/_reversescale.py                                       |   11
 plotly/validators/histogram2d/_showlegend.py                                         |   11
 plotly/validators/histogram2d/_showscale.py                                          |   11
 plotly/validators/histogram2d/_stream.py                                             |   25
 plotly/validators/histogram2d/_textfont.py                                           |   37
 plotly/validators/histogram2d/_texttemplate.py                                       |   11
 plotly/validators/histogram2d/_uid.py                                                |   11
 plotly/validators/histogram2d/_uirevision.py                                         |   11
 plotly/validators/histogram2d/_visible.py                                            |   12
 plotly/validators/histogram2d/_x.py                                                  |   11
 plotly/validators/histogram2d/_xaxis.py                                              |   12
 plotly/validators/histogram2d/_xbingroup.py                                          |   11
 plotly/validators/histogram2d/_xbins.py                                              |   50
 plotly/validators/histogram2d/_xcalendar.py                                          |   32
 plotly/validators/histogram2d/_xgap.py                                               |   12
 plotly/validators/histogram2d/_xhoverformat.py                                       |   11
 plotly/validators/histogram2d/_xsrc.py                                               |   11
 plotly/validators/histogram2d/_y.py                                                  |   11
 plotly/validators/histogram2d/_yaxis.py                                              |   12
 plotly/validators/histogram2d/_ybingroup.py                                          |   11
 plotly/validators/histogram2d/_ybins.py                                              |   50
 plotly/validators/histogram2d/_ycalendar.py                                          |   32
 plotly/validators/histogram2d/_ygap.py                                               |   12
 plotly/validators/histogram2d/_yhoverformat.py                                       |   11
 plotly/validators/histogram2d/_ysrc.py                                               |   11
 plotly/validators/histogram2d/_z.py                                                  |   11
 plotly/validators/histogram2d/_zauto.py                                              |   12
 plotly/validators/histogram2d/_zhoverformat.py                                       |   11
 plotly/validators/histogram2d/_zmax.py                                               |   12
 plotly/validators/histogram2d/_zmid.py                                               |   12
 plotly/validators/histogram2d/_zmin.py                                               |   12
 plotly/validators/histogram2d/_zsmooth.py                                            |   12
 plotly/validators/histogram2d/_zsrc.py                                               |   11
 plotly/validators/histogram2d/colorbar/__init__.py                                   |  111
 plotly/validators/histogram2d/colorbar/_bgcolor.py                                   |   13
 plotly/validators/histogram2d/colorbar/_bordercolor.py                               |   13
 plotly/validators/histogram2d/colorbar/_borderwidth.py                               |   14
 plotly/validators/histogram2d/colorbar/_dtick.py                                     |   14
 plotly/validators/histogram2d/colorbar/_exponentformat.py                            |   14
 plotly/validators/histogram2d/colorbar/_labelalias.py                                |   13
 plotly/validators/histogram2d/colorbar/_len.py                                       |   12
 plotly/validators/histogram2d/colorbar/_lenmode.py                                   |   14
 plotly/validators/histogram2d/colorbar/_minexponent.py                               |   14
 plotly/validators/histogram2d/colorbar/_nticks.py                                    |   14
 plotly/validators/histogram2d/colorbar/_orientation.py                               |   14
 plotly/validators/histogram2d/colorbar/_outlinecolor.py                              |   13
 plotly/validators/histogram2d/colorbar/_outlinewidth.py                              |   14
 plotly/validators/histogram2d/colorbar/_separatethousands.py                         |   16
 plotly/validators/histogram2d/colorbar/_showexponent.py                              |   14
 plotly/validators/histogram2d/colorbar/_showticklabels.py                            |   13
 plotly/validators/histogram2d/colorbar/_showtickprefix.py                            |   14
 plotly/validators/histogram2d/colorbar/_showticksuffix.py                            |   14
 plotly/validators/histogram2d/colorbar/_thickness.py                                 |   14
 plotly/validators/histogram2d/colorbar/_thicknessmode.py                             |   14
 plotly/validators/histogram2d/colorbar/_tick0.py                                     |   14
 plotly/validators/histogram2d/colorbar/_tickangle.py                                 |   13
 plotly/validators/histogram2d/colorbar/_tickcolor.py                                 |   13
 plotly/validators/histogram2d/colorbar/_tickfont.py                                  |   39
 plotly/validators/histogram2d/colorbar/_tickformat.py                                |   13
 plotly/validators/histogram2d/colorbar/_tickformatstopdefaults.py                    |   21
 plotly/validators/histogram2d/colorbar/_tickformatstops.py                           |   54
 plotly/validators/histogram2d/colorbar/_ticklabeloverflow.py                         |   17
 plotly/validators/histogram2d/colorbar/_ticklabelposition.py                         |   31
 plotly/validators/histogram2d/colorbar/_ticklabelstep.py                             |   14
 plotly/validators/histogram2d/colorbar/_ticklen.py                                   |   14
 plotly/validators/histogram2d/colorbar/_tickmode.py                                  |   15
 plotly/validators/histogram2d/colorbar/_tickprefix.py                                |   13
 plotly/validators/histogram2d/colorbar/_ticks.py                                     |   14
 plotly/validators/histogram2d/colorbar/_ticksuffix.py                                |   13
 plotly/validators/histogram2d/colorbar/_ticktext.py                                  |   13
 plotly/validators/histogram2d/colorbar/_ticktextsrc.py                               |   13
 plotly/validators/histogram2d/colorbar/_tickvals.py                                  |   13
 plotly/validators/histogram2d/colorbar/_tickvalssrc.py                               |   13
 plotly/validators/histogram2d/colorbar/_tickwidth.py                                 |   14
 plotly/validators/histogram2d/colorbar/_title.py                                     |   35
 plotly/validators/histogram2d/colorbar/_x.py                                         |   11
 plotly/validators/histogram2d/colorbar/_xanchor.py                                   |   14
 plotly/validators/histogram2d/colorbar/_xpad.py                                      |   14
 plotly/validators/histogram2d/colorbar/_xref.py                                      |   14
 plotly/validators/histogram2d/colorbar/_y.py                                         |   11
 plotly/validators/histogram2d/colorbar/_yanchor.py                                   |   14
 plotly/validators/histogram2d/colorbar/_ypad.py                                      |   14
 plotly/validators/histogram2d/colorbar/_yref.py                                      |   14
 plotly/validators/histogram2d/colorbar/tickfont/__init__.py                          |   15
 plotly/validators/histogram2d/colorbar/tickfont/_color.py                            |   13
 plotly/validators/histogram2d/colorbar/tickfont/_family.py                           |   18
 plotly/validators/histogram2d/colorbar/tickfont/_size.py                             |   14
 plotly/validators/histogram2d/colorbar/tickformatstop/__init__.py                    |   23
 plotly/validators/histogram2d/colorbar/tickformatstop/_dtickrange.py                 |   23
 plotly/validators/histogram2d/colorbar/tickformatstop/_enabled.py                    |   16
 plotly/validators/histogram2d/colorbar/tickformatstop/_name.py                       |   16
 plotly/validators/histogram2d/colorbar/tickformatstop/_templateitemname.py           |   16
 plotly/validators/histogram2d/colorbar/tickformatstop/_value.py                      |   16
 plotly/validators/histogram2d/colorbar/title/__init__.py                             |   15
 plotly/validators/histogram2d/colorbar/title/_font.py                                |   39
 plotly/validators/histogram2d/colorbar/title/_side.py                                |   14
 plotly/validators/histogram2d/colorbar/title/_text.py                                |   13
 plotly/validators/histogram2d/colorbar/title/font/__init__.py                        |   15
 plotly/validators/histogram2d/colorbar/title/font/_color.py                          |   16
 plotly/validators/histogram2d/colorbar/title/font/_family.py                         |   18
 plotly/validators/histogram2d/colorbar/title/font/_size.py                           |   17
 plotly/validators/histogram2d/hoverlabel/__init__.py                                 |   31
 plotly/validators/histogram2d/hoverlabel/_align.py                                   |   15
 plotly/validators/histogram2d/hoverlabel/_alignsrc.py                                |   13
 plotly/validators/histogram2d/hoverlabel/_bgcolor.py                                 |   14
 plotly/validators/histogram2d/hoverlabel/_bgcolorsrc.py                              |   13
 plotly/validators/histogram2d/hoverlabel/_bordercolor.py                             |   14
 plotly/validators/histogram2d/hoverlabel/_bordercolorsrc.py                          |   16
 plotly/validators/histogram2d/hoverlabel/_font.py                                    |   48
 plotly/validators/histogram2d/hoverlabel/_namelength.py                              |   15
 plotly/validators/histogram2d/hoverlabel/_namelengthsrc.py                           |   16
 plotly/validators/histogram2d/hoverlabel/font/__init__.py                            |   25
 plotly/validators/histogram2d/hoverlabel/font/_color.py                              |   14
 plotly/validators/histogram2d/hoverlabel/font/_colorsrc.py                           |   16
 plotly/validators/histogram2d/hoverlabel/font/_family.py                             |   16
 plotly/validators/histogram2d/hoverlabel/font/_familysrc.py                          |   16
 plotly/validators/histogram2d/hoverlabel/font/_size.py                               |   15
 plotly/validators/histogram2d/hoverlabel/font/_sizesrc.py                            |   13
 plotly/validators/histogram2d/legendgrouptitle/__init__.py                           |   12
 plotly/validators/histogram2d/legendgrouptitle/_font.py                              |   39
 plotly/validators/histogram2d/legendgrouptitle/_text.py                              |   13
 plotly/validators/histogram2d/legendgrouptitle/font/__init__.py                      |   15
 plotly/validators/histogram2d/legendgrouptitle/font/_color.py                        |   16
 plotly/validators/histogram2d/legendgrouptitle/font/_family.py                       |   18
 plotly/validators/histogram2d/legendgrouptitle/font/_size.py                         |   17
 plotly/validators/histogram2d/marker/__init__.py                                     |   12
 plotly/validators/histogram2d/marker/_color.py                                       |   11
 plotly/validators/histogram2d/marker/_colorsrc.py                                    |   13
 plotly/validators/histogram2d/stream/__init__.py                                     |   12
 plotly/validators/histogram2d/stream/_maxpoints.py                                   |   15
 plotly/validators/histogram2d/stream/_token.py                                       |   13
 plotly/validators/histogram2d/textfont/__init__.py                                   |   15
 plotly/validators/histogram2d/textfont/_color.py                                     |   13
 plotly/validators/histogram2d/textfont/_family.py                                    |   15
 plotly/validators/histogram2d/textfont/_size.py                                      |   14
 plotly/validators/histogram2d/xbins/__init__.py                                      |   15
 plotly/validators/histogram2d/xbins/_end.py                                          |   11
 plotly/validators/histogram2d/xbins/_size.py                                         |   11
 plotly/validators/histogram2d/xbins/_start.py                                        |   11
 plotly/validators/histogram2d/ybins/__init__.py                                      |   15
 plotly/validators/histogram2d/ybins/_end.py                                          |   11
 plotly/validators/histogram2d/ybins/_size.py                                         |   11
 plotly/validators/histogram2d/ybins/_start.py                                        |   11
 plotly/validators/histogram2dcontour/__init__.py                                     |  141
 plotly/validators/histogram2dcontour/_autobinx.py                                    |   13
 plotly/validators/histogram2dcontour/_autobiny.py                                    |   13
 plotly/validators/histogram2dcontour/_autocolorscale.py                              |   14
 plotly/validators/histogram2dcontour/_autocontour.py                                 |   14
 plotly/validators/histogram2dcontour/_bingroup.py                                    |   13
 plotly/validators/histogram2dcontour/_coloraxis.py                                   |   15
 plotly/validators/histogram2dcontour/_colorbar.py                                    |  297
 plotly/validators/histogram2dcontour/_colorscale.py                                  |   14
 plotly/validators/histogram2dcontour/_contours.py                                    |   81
 plotly/validators/histogram2dcontour/_customdata.py                                  |   13
 plotly/validators/histogram2dcontour/_customdatasrc.py                               |   13
 plotly/validators/histogram2dcontour/_histfunc.py                                    |   14
 plotly/validators/histogram2dcontour/_histnorm.py                                    |   17
 plotly/validators/histogram2dcontour/_hoverinfo.py                                   |   16
 plotly/validators/histogram2dcontour/_hoverinfosrc.py                                |   13
 plotly/validators/histogram2dcontour/_hoverlabel.py                                  |   53
 plotly/validators/histogram2dcontour/_hovertemplate.py                               |   14
 plotly/validators/histogram2dcontour/_hovertemplatesrc.py                            |   13
 plotly/validators/histogram2dcontour/_ids.py                                         |   11
 plotly/validators/histogram2dcontour/_idssrc.py                                      |   13
 plotly/validators/histogram2dcontour/_legend.py                                      |   14
 plotly/validators/histogram2dcontour/_legendgroup.py                                 |   13
 plotly/validators/histogram2dcontour/_legendgrouptitle.py                            |   22
 plotly/validators/histogram2dcontour/_legendrank.py                                  |   13
 plotly/validators/histogram2dcontour/_legendwidth.py                                 |   14
 plotly/validators/histogram2dcontour/_line.py                                        |   30
 plotly/validators/histogram2dcontour/_marker.py                                      |   23
 plotly/validators/histogram2dcontour/_meta.py                                        |   12
 plotly/validators/histogram2dcontour/_metasrc.py                                     |   13
 plotly/validators/histogram2dcontour/_name.py                                        |   11
 plotly/validators/histogram2dcontour/_nbinsx.py                                      |   14
 plotly/validators/histogram2dcontour/_nbinsy.py                                      |   14
 plotly/validators/histogram2dcontour/_ncontours.py                                   |   14
 plotly/validators/histogram2dcontour/_opacity.py                                     |   15
 plotly/validators/histogram2dcontour/_reversescale.py                                |   13
 plotly/validators/histogram2dcontour/_showlegend.py                                  |   13
 plotly/validators/histogram2dcontour/_showscale.py                                   |   13
 plotly/validators/histogram2dcontour/_stream.py                                      |   27
 plotly/validators/histogram2dcontour/_textfont.py                                    |   39
 plotly/validators/histogram2dcontour/_texttemplate.py                                |   13
 plotly/validators/histogram2dcontour/_uid.py                                         |   11
 plotly/validators/histogram2dcontour/_uirevision.py                                  |   13
 plotly/validators/histogram2dcontour/_visible.py                                     |   14
 plotly/validators/histogram2dcontour/_x.py                                           |   11
 plotly/validators/histogram2dcontour/_xaxis.py                                       |   12
 plotly/validators/histogram2dcontour/_xbingroup.py                                   |   13
 plotly/validators/histogram2dcontour/_xbins.py                                       |   50
 plotly/validators/histogram2dcontour/_xcalendar.py                                   |   34
 plotly/validators/histogram2dcontour/_xhoverformat.py                                |   13
 plotly/validators/histogram2dcontour/_xsrc.py                                        |   11
 plotly/validators/histogram2dcontour/_y.py                                           |   11
 plotly/validators/histogram2dcontour/_yaxis.py                                       |   12
 plotly/validators/histogram2dcontour/_ybingroup.py                                   |   13
 plotly/validators/histogram2dcontour/_ybins.py                                       |   50
 plotly/validators/histogram2dcontour/_ycalendar.py                                   |   34
 plotly/validators/histogram2dcontour/_yhoverformat.py                                |   13
 plotly/validators/histogram2dcontour/_ysrc.py                                        |   11
 plotly/validators/histogram2dcontour/_z.py                                           |   11
 plotly/validators/histogram2dcontour/_zauto.py                                       |   12
 plotly/validators/histogram2dcontour/_zhoverformat.py                                |   13
 plotly/validators/histogram2dcontour/_zmax.py                                        |   12
 plotly/validators/histogram2dcontour/_zmid.py                                        |   12
 plotly/validators/histogram2dcontour/_zmin.py                                        |   12
 plotly/validators/histogram2dcontour/_zsrc.py                                        |   11
 plotly/validators/histogram2dcontour/colorbar/__init__.py                            |  111
 plotly/validators/histogram2dcontour/colorbar/_bgcolor.py                            |   13
 plotly/validators/histogram2dcontour/colorbar/_bordercolor.py                        |   16
 plotly/validators/histogram2dcontour/colorbar/_borderwidth.py                        |   17
 plotly/validators/histogram2dcontour/colorbar/_dtick.py                              |   14
 plotly/validators/histogram2dcontour/colorbar/_exponentformat.py                     |   17
 plotly/validators/histogram2dcontour/colorbar/_labelalias.py                         |   16
 plotly/validators/histogram2dcontour/colorbar/_len.py                                |   14
 plotly/validators/histogram2dcontour/colorbar/_lenmode.py                            |   14
 plotly/validators/histogram2dcontour/colorbar/_minexponent.py                        |   17
 plotly/validators/histogram2dcontour/colorbar/_nticks.py                             |   14
 plotly/validators/histogram2dcontour/colorbar/_orientation.py                        |   17
 plotly/validators/histogram2dcontour/colorbar/_outlinecolor.py                       |   16
 plotly/validators/histogram2dcontour/colorbar/_outlinewidth.py                       |   17
 plotly/validators/histogram2dcontour/colorbar/_separatethousands.py                  |   16
 plotly/validators/histogram2dcontour/colorbar/_showexponent.py                       |   17
 plotly/validators/histogram2dcontour/colorbar/_showticklabels.py                     |   16
 plotly/validators/histogram2dcontour/colorbar/_showtickprefix.py                     |   17
 plotly/validators/histogram2dcontour/colorbar/_showticksuffix.py                     |   17
 plotly/validators/histogram2dcontour/colorbar/_thickness.py                          |   17
 plotly/validators/histogram2dcontour/colorbar/_thicknessmode.py                      |   17
 plotly/validators/histogram2dcontour/colorbar/_tick0.py                              |   14
 plotly/validators/histogram2dcontour/colorbar/_tickangle.py                          |   16
 plotly/validators/histogram2dcontour/colorbar/_tickcolor.py                          |   16
 plotly/validators/histogram2dcontour/colorbar/_tickfont.py                           |   42
 plotly/validators/histogram2dcontour/colorbar/_tickformat.py                         |   16
 plotly/validators/histogram2dcontour/colorbar/_tickformatstopdefaults.py             |   21
 plotly/validators/histogram2dcontour/colorbar/_tickformatstops.py                    |   54
 plotly/validators/histogram2dcontour/colorbar/_ticklabeloverflow.py                  |   17
 plotly/validators/histogram2dcontour/colorbar/_ticklabelposition.py                  |   31
 plotly/validators/histogram2dcontour/colorbar/_ticklabelstep.py                      |   17
 plotly/validators/histogram2dcontour/colorbar/_ticklen.py                            |   14
 plotly/validators/histogram2dcontour/colorbar/_tickmode.py                           |   18
 plotly/validators/histogram2dcontour/colorbar/_tickprefix.py                         |   16
 plotly/validators/histogram2dcontour/colorbar/_ticks.py                              |   14
 plotly/validators/histogram2dcontour/colorbar/_ticksuffix.py                         |   16
 plotly/validators/histogram2dcontour/colorbar/_ticktext.py                           |   16
 plotly/validators/histogram2dcontour/colorbar/_ticktextsrc.py                        |   16
 plotly/validators/histogram2dcontour/colorbar/_tickvals.py                           |   16
 plotly/validators/histogram2dcontour/colorbar/_tickvalssrc.py                        |   16
 plotly/validators/histogram2dcontour/colorbar/_tickwidth.py                          |   17
 plotly/validators/histogram2dcontour/colorbar/_title.py                              |   35
 plotly/validators/histogram2dcontour/colorbar/_x.py                                  |   13
 plotly/validators/histogram2dcontour/colorbar/_xanchor.py                            |   14
 plotly/validators/histogram2dcontour/colorbar/_xpad.py                               |   14
 plotly/validators/histogram2dcontour/colorbar/_xref.py                               |   14
 plotly/validators/histogram2dcontour/colorbar/_y.py                                  |   13
 plotly/validators/histogram2dcontour/colorbar/_yanchor.py                            |   14
 plotly/validators/histogram2dcontour/colorbar/_ypad.py                               |   14
 plotly/validators/histogram2dcontour/colorbar/_yref.py                               |   14
 plotly/validators/histogram2dcontour/colorbar/tickfont/__init__.py                   |   15
 plotly/validators/histogram2dcontour/colorbar/tickfont/_color.py                     |   16
 plotly/validators/histogram2dcontour/colorbar/tickfont/_family.py                    |   18
 plotly/validators/histogram2dcontour/colorbar/tickfont/_size.py                      |   17
 plotly/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py             |   23
 plotly/validators/histogram2dcontour/colorbar/tickformatstop/_dtickrange.py          |   23
 plotly/validators/histogram2dcontour/colorbar/tickformatstop/_enabled.py             |   16
 plotly/validators/histogram2dcontour/colorbar/tickformatstop/_name.py                |   16
 plotly/validators/histogram2dcontour/colorbar/tickformatstop/_templateitemname.py    |   16
 plotly/validators/histogram2dcontour/colorbar/tickformatstop/_value.py               |   16
 plotly/validators/histogram2dcontour/colorbar/title/__init__.py                      |   15
 plotly/validators/histogram2dcontour/colorbar/title/_font.py                         |   42
 plotly/validators/histogram2dcontour/colorbar/title/_side.py                         |   17
 plotly/validators/histogram2dcontour/colorbar/title/_text.py                         |   16
 plotly/validators/histogram2dcontour/colorbar/title/font/__init__.py                 |   15
 plotly/validators/histogram2dcontour/colorbar/title/font/_color.py                   |   16
 plotly/validators/histogram2dcontour/colorbar/title/font/_family.py                  |   18
 plotly/validators/histogram2dcontour/colorbar/title/font/_size.py                    |   17
 plotly/validators/histogram2dcontour/contours/__init__.py                            |   35
 plotly/validators/histogram2dcontour/contours/_coloring.py                           |   17
 plotly/validators/histogram2dcontour/contours/_end.py                                |   14
 plotly/validators/histogram2dcontour/contours/_labelfont.py                          |   42
 plotly/validators/histogram2dcontour/contours/_labelformat.py                        |   16
 plotly/validators/histogram2dcontour/contours/_operation.py                          |   34
 plotly/validators/histogram2dcontour/contours/_showlabels.py                         |   16
 plotly/validators/histogram2dcontour/contours/_showlines.py                          |   16
 plotly/validators/histogram2dcontour/contours/_size.py                               |   15
 plotly/validators/histogram2dcontour/contours/_start.py                              |   14
 plotly/validators/histogram2dcontour/contours/_type.py                               |   14
 plotly/validators/histogram2dcontour/contours/_value.py                              |   13
 plotly/validators/histogram2dcontour/contours/labelfont/__init__.py                  |   15
 plotly/validators/histogram2dcontour/contours/labelfont/_color.py                    |   16
 plotly/validators/histogram2dcontour/contours/labelfont/_family.py                   |   18
 plotly/validators/histogram2dcontour/contours/labelfont/_size.py                     |   17
 plotly/validators/histogram2dcontour/hoverlabel/__init__.py                          |   31
 plotly/validators/histogram2dcontour/hoverlabel/_align.py                            |   15
 plotly/validators/histogram2dcontour/hoverlabel/_alignsrc.py                         |   16
 plotly/validators/histogram2dcontour/hoverlabel/_bgcolor.py                          |   17
 plotly/validators/histogram2dcontour/hoverlabel/_bgcolorsrc.py                       |   16
 plotly/validators/histogram2dcontour/hoverlabel/_bordercolor.py                      |   17
 plotly/validators/histogram2dcontour/hoverlabel/_bordercolorsrc.py                   |   16
 plotly/validators/histogram2dcontour/hoverlabel/_font.py                             |   48
 plotly/validators/histogram2dcontour/hoverlabel/_namelength.py                       |   18
 plotly/validators/histogram2dcontour/hoverlabel/_namelengthsrc.py                    |   16
 plotly/validators/histogram2dcontour/hoverlabel/font/__init__.py                     |   25
 plotly/validators/histogram2dcontour/hoverlabel/font/_color.py                       |   17
 plotly/validators/histogram2dcontour/hoverlabel/font/_colorsrc.py                    |   16
 plotly/validators/histogram2dcontour/hoverlabel/font/_family.py                      |   19
 plotly/validators/histogram2dcontour/hoverlabel/font/_familysrc.py                   |   16
 plotly/validators/histogram2dcontour/hoverlabel/font/_size.py                        |   18
 plotly/validators/histogram2dcontour/hoverlabel/font/_sizesrc.py                     |   16
 plotly/validators/histogram2dcontour/legendgrouptitle/__init__.py                    |   12
 plotly/validators/histogram2dcontour/legendgrouptitle/_font.py                       |   42
 plotly/validators/histogram2dcontour/legendgrouptitle/_text.py                       |   16
 plotly/validators/histogram2dcontour/legendgrouptitle/font/__init__.py               |   15
 plotly/validators/histogram2dcontour/legendgrouptitle/font/_color.py                 |   16
 plotly/validators/histogram2dcontour/legendgrouptitle/font/_family.py                |   18
 plotly/validators/histogram2dcontour/legendgrouptitle/font/_size.py                  |   17
 plotly/validators/histogram2dcontour/line/__init__.py                                |   21
 plotly/validators/histogram2dcontour/line/_color.py                                  |   13
 plotly/validators/histogram2dcontour/line/_dash.py                                   |   16
 plotly/validators/histogram2dcontour/line/_smoothing.py                              |   15
 plotly/validators/histogram2dcontour/line/_width.py                                  |   14
 plotly/validators/histogram2dcontour/marker/__init__.py                              |   12
 plotly/validators/histogram2dcontour/marker/_color.py                                |   13
 plotly/validators/histogram2dcontour/marker/_colorsrc.py                             |   13
 plotly/validators/histogram2dcontour/stream/__init__.py                              |   12
 plotly/validators/histogram2dcontour/stream/_maxpoints.py                            |   15
 plotly/validators/histogram2dcontour/stream/_token.py                                |   15
 plotly/validators/histogram2dcontour/textfont/__init__.py                            |   15
 plotly/validators/histogram2dcontour/textfont/_color.py                              |   13
 plotly/validators/histogram2dcontour/textfont/_family.py                             |   15
 plotly/validators/histogram2dcontour/textfont/_size.py                               |   14
 plotly/validators/histogram2dcontour/xbins/__init__.py                               |   15
 plotly/validators/histogram2dcontour/xbins/_end.py                                   |   13
 plotly/validators/histogram2dcontour/xbins/_size.py                                  |   13
 plotly/validators/histogram2dcontour/xbins/_start.py                                 |   13
 plotly/validators/histogram2dcontour/ybins/__init__.py                               |   15
 plotly/validators/histogram2dcontour/ybins/_end.py                                   |   13
 plotly/validators/histogram2dcontour/ybins/_size.py                                  |   13
 plotly/validators/histogram2dcontour/ybins/_start.py                                 |   13
 plotly/validators/icicle/__init__.py                                                 |  111
 plotly/validators/icicle/_branchvalues.py                                            |   12
 plotly/validators/icicle/_count.py                                                   |   12
 plotly/validators/icicle/_customdata.py                                              |   11
 plotly/validators/icicle/_customdatasrc.py                                           |   11
 plotly/validators/icicle/_domain.py                                                  |   28
 plotly/validators/icicle/_hoverinfo.py                                               |   26
 plotly/validators/icicle/_hoverinfosrc.py                                            |   11
 plotly/validators/icicle/_hoverlabel.py                                              |   51
 plotly/validators/icicle/_hovertemplate.py                                           |   12
 plotly/validators/icicle/_hovertemplatesrc.py                                        |   11
 plotly/validators/icicle/_hovertext.py                                               |   12
 plotly/validators/icicle/_hovertextsrc.py                                            |   11
 plotly/validators/icicle/_ids.py                                                     |   12
 plotly/validators/icicle/_idssrc.py                                                  |   11
 plotly/validators/icicle/_insidetextfont.py                                          |   46
 plotly/validators/icicle/_labels.py                                                  |   11
 plotly/validators/icicle/_labelssrc.py                                               |   11
 plotly/validators/icicle/_leaf.py                                                    |   20
 plotly/validators/icicle/_legend.py                                                  |   12
 plotly/validators/icicle/_legendgrouptitle.py                                        |   20
 plotly/validators/icicle/_legendrank.py                                              |   11
 plotly/validators/icicle/_legendwidth.py                                             |   12
 plotly/validators/icicle/_level.py                                                   |   12
 plotly/validators/icicle/_marker.py                                                  |  105
 plotly/validators/icicle/_maxdepth.py                                                |   11
 plotly/validators/icicle/_meta.py                                                    |   12
 plotly/validators/icicle/_metasrc.py                                                 |   11
 plotly/validators/icicle/_name.py                                                    |   11
 plotly/validators/icicle/_opacity.py                                                 |   13
 plotly/validators/icicle/_outsidetextfont.py                                         |   46
 plotly/validators/icicle/_parents.py                                                 |   11
 plotly/validators/icicle/_parentssrc.py                                              |   11
 plotly/validators/icicle/_pathbar.py                                                 |   32
 plotly/validators/icicle/_root.py                                                    |   21
 plotly/validators/icicle/_sort.py                                                    |   11
 plotly/validators/icicle/_stream.py                                                  |   25
 plotly/validators/icicle/_text.py                                                    |   11
 plotly/validators/icicle/_textfont.py                                                |   46
 plotly/validators/icicle/_textinfo.py                                                |   24
 plotly/validators/icicle/_textposition.py                                            |   25
 plotly/validators/icicle/_textsrc.py                                                 |   11
 plotly/validators/icicle/_texttemplate.py                                            |   12
 plotly/validators/icicle/_texttemplatesrc.py                                         |   11
 plotly/validators/icicle/_tiling.py                                                  |   33
 plotly/validators/icicle/_uid.py                                                     |   12
 plotly/validators/icicle/_uirevision.py                                              |   11
 plotly/validators/icicle/_values.py                                                  |   11
 plotly/validators/icicle/_valuessrc.py                                               |   11
 plotly/validators/icicle/_visible.py                                                 |   12
 plotly/validators/icicle/domain/__init__.py                                          |   21
 plotly/validators/icicle/domain/_column.py                                           |   12
 plotly/validators/icicle/domain/_row.py                                              |   12
 plotly/validators/icicle/domain/_x.py                                                |   18
 plotly/validators/icicle/domain/_y.py                                                |   18
 plotly/validators/icicle/hoverlabel/__init__.py                                      |   31
 plotly/validators/icicle/hoverlabel/_align.py                                        |   13
 plotly/validators/icicle/hoverlabel/_alignsrc.py                                     |   13
 plotly/validators/icicle/hoverlabel/_bgcolor.py                                      |   14
 plotly/validators/icicle/hoverlabel/_bgcolorsrc.py                                   |   13
 plotly/validators/icicle/hoverlabel/_bordercolor.py                                  |   14
 plotly/validators/icicle/hoverlabel/_bordercolorsrc.py                               |   13
 plotly/validators/icicle/hoverlabel/_font.py                                         |   46
 plotly/validators/icicle/hoverlabel/_namelength.py                                   |   15
 plotly/validators/icicle/hoverlabel/_namelengthsrc.py                                |   13
 plotly/validators/icicle/hoverlabel/font/__init__.py                                 |   25
 plotly/validators/icicle/hoverlabel/font/_color.py                                   |   14
 plotly/validators/icicle/hoverlabel/font/_colorsrc.py                                |   13
 plotly/validators/icicle/hoverlabel/font/_family.py                                  |   16
 plotly/validators/icicle/hoverlabel/font/_familysrc.py                               |   13
 plotly/validators/icicle/hoverlabel/font/_size.py                                    |   15
 plotly/validators/icicle/hoverlabel/font/_sizesrc.py                                 |   13
 plotly/validators/icicle/insidetextfont/__init__.py                                  |   25
 plotly/validators/icicle/insidetextfont/_color.py                                    |   14
 plotly/validators/icicle/insidetextfont/_colorsrc.py                                 |   13
 plotly/validators/icicle/insidetextfont/_family.py                                   |   16
 plotly/validators/icicle/insidetextfont/_familysrc.py                                |   13
 plotly/validators/icicle/insidetextfont/_size.py                                     |   15
 plotly/validators/icicle/insidetextfont/_sizesrc.py                                  |   13
 plotly/validators/icicle/leaf/__init__.py                                            |   11
 plotly/validators/icicle/leaf/_opacity.py                                            |   13
 plotly/validators/icicle/legendgrouptitle/__init__.py                                |   12
 plotly/validators/icicle/legendgrouptitle/_font.py                                   |   39
 plotly/validators/icicle/legendgrouptitle/_text.py                                   |   13
 plotly/validators/icicle/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/icicle/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/icicle/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/icicle/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/icicle/marker/__init__.py                                          |   41
 plotly/validators/icicle/marker/_autocolorscale.py                                   |   14
 plotly/validators/icicle/marker/_cauto.py                                            |   12
 plotly/validators/icicle/marker/_cmax.py                                             |   12
 plotly/validators/icicle/marker/_cmid.py                                             |   12
 plotly/validators/icicle/marker/_cmin.py                                             |   12
 plotly/validators/icicle/marker/_coloraxis.py                                        |   13
 plotly/validators/icicle/marker/_colorbar.py                                         |  295
 plotly/validators/icicle/marker/_colors.py                                           |   11
 plotly/validators/icicle/marker/_colorscale.py                                       |   12
 plotly/validators/icicle/marker/_colorssrc.py                                        |   11
 plotly/validators/icicle/marker/_line.py                                             |   28
 plotly/validators/icicle/marker/_pattern.py                                          |   64
 plotly/validators/icicle/marker/_reversescale.py                                     |   13
 plotly/validators/icicle/marker/_showscale.py                                        |   11
 plotly/validators/icicle/marker/colorbar/__init__.py                                 |  111
 plotly/validators/icicle/marker/colorbar/_bgcolor.py                                 |   13
 plotly/validators/icicle/marker/colorbar/_bordercolor.py                             |   13
 plotly/validators/icicle/marker/colorbar/_borderwidth.py                             |   14
 plotly/validators/icicle/marker/colorbar/_dtick.py                                   |   14
 plotly/validators/icicle/marker/colorbar/_exponentformat.py                          |   17
 plotly/validators/icicle/marker/colorbar/_labelalias.py                              |   13
 plotly/validators/icicle/marker/colorbar/_len.py                                     |   14
 plotly/validators/icicle/marker/colorbar/_lenmode.py                                 |   14
 plotly/validators/icicle/marker/colorbar/_minexponent.py                             |   14
 plotly/validators/icicle/marker/colorbar/_nticks.py                                  |   14
 plotly/validators/icicle/marker/colorbar/_orientation.py                             |   14
 plotly/validators/icicle/marker/colorbar/_outlinecolor.py                            |   13
 plotly/validators/icicle/marker/colorbar/_outlinewidth.py                            |   14
 plotly/validators/icicle/marker/colorbar/_separatethousands.py                       |   16
 plotly/validators/icicle/marker/colorbar/_showexponent.py                            |   14
 plotly/validators/icicle/marker/colorbar/_showticklabels.py                          |   16
 plotly/validators/icicle/marker/colorbar/_showtickprefix.py                          |   17
 plotly/validators/icicle/marker/colorbar/_showticksuffix.py                          |   17
 plotly/validators/icicle/marker/colorbar/_thickness.py                               |   14
 plotly/validators/icicle/marker/colorbar/_thicknessmode.py                           |   17
 plotly/validators/icicle/marker/colorbar/_tick0.py                                   |   14
 plotly/validators/icicle/marker/colorbar/_tickangle.py                               |   13
 plotly/validators/icicle/marker/colorbar/_tickcolor.py                               |   13
 plotly/validators/icicle/marker/colorbar/_tickfont.py                                |   39
 plotly/validators/icicle/marker/colorbar/_tickformat.py                              |   13
 plotly/validators/icicle/marker/colorbar/_tickformatstopdefaults.py                  |   21
 plotly/validators/icicle/marker/colorbar/_tickformatstops.py                         |   54
 plotly/validators/icicle/marker/colorbar/_ticklabeloverflow.py                       |   17
 plotly/validators/icicle/marker/colorbar/_ticklabelposition.py                       |   31
 plotly/validators/icicle/marker/colorbar/_ticklabelstep.py                           |   17
 plotly/validators/icicle/marker/colorbar/_ticklen.py                                 |   14
 plotly/validators/icicle/marker/colorbar/_tickmode.py                                |   15
 plotly/validators/icicle/marker/colorbar/_tickprefix.py                              |   13
 plotly/validators/icicle/marker/colorbar/_ticks.py                                   |   14
 plotly/validators/icicle/marker/colorbar/_ticksuffix.py                              |   13
 plotly/validators/icicle/marker/colorbar/_ticktext.py                                |   13
 plotly/validators/icicle/marker/colorbar/_ticktextsrc.py                             |   13
 plotly/validators/icicle/marker/colorbar/_tickvals.py                                |   13
 plotly/validators/icicle/marker/colorbar/_tickvalssrc.py                             |   13
 plotly/validators/icicle/marker/colorbar/_tickwidth.py                               |   14
 plotly/validators/icicle/marker/colorbar/_title.py                                   |   35
 plotly/validators/icicle/marker/colorbar/_x.py                                       |   11
 plotly/validators/icicle/marker/colorbar/_xanchor.py                                 |   14
 plotly/validators/icicle/marker/colorbar/_xpad.py                                    |   14
 plotly/validators/icicle/marker/colorbar/_xref.py                                    |   14
 plotly/validators/icicle/marker/colorbar/_y.py                                       |   11
 plotly/validators/icicle/marker/colorbar/_yanchor.py                                 |   14
 plotly/validators/icicle/marker/colorbar/_ypad.py                                    |   14
 plotly/validators/icicle/marker/colorbar/_yref.py                                    |   14
 plotly/validators/icicle/marker/colorbar/tickfont/__init__.py                        |   15
 plotly/validators/icicle/marker/colorbar/tickfont/_color.py                          |   16
 plotly/validators/icicle/marker/colorbar/tickfont/_family.py                         |   18
 plotly/validators/icicle/marker/colorbar/tickfont/_size.py                           |   17
 plotly/validators/icicle/marker/colorbar/tickformatstop/__init__.py                  |   23
 plotly/validators/icicle/marker/colorbar/tickformatstop/_dtickrange.py               |   23
 plotly/validators/icicle/marker/colorbar/tickformatstop/_enabled.py                  |   16
 plotly/validators/icicle/marker/colorbar/tickformatstop/_name.py                     |   16
 plotly/validators/icicle/marker/colorbar/tickformatstop/_templateitemname.py         |   16
 plotly/validators/icicle/marker/colorbar/tickformatstop/_value.py                    |   16
 plotly/validators/icicle/marker/colorbar/title/__init__.py                           |   15
 plotly/validators/icicle/marker/colorbar/title/_font.py                              |   39
 plotly/validators/icicle/marker/colorbar/title/_side.py                              |   14
 plotly/validators/icicle/marker/colorbar/title/_text.py                              |   13
 plotly/validators/icicle/marker/colorbar/title/font/__init__.py                      |   15
 plotly/validators/icicle/marker/colorbar/title/font/_color.py                        |   16
 plotly/validators/icicle/marker/colorbar/title/font/_family.py                       |   18
 plotly/validators/icicle/marker/colorbar/title/font/_size.py                         |   17
 plotly/validators/icicle/marker/line/__init__.py                                     |   21
 plotly/validators/icicle/marker/line/_color.py                                       |   12
 plotly/validators/icicle/marker/line/_colorsrc.py                                    |   13
 plotly/validators/icicle/marker/line/_width.py                                       |   13
 plotly/validators/icicle/marker/line/_widthsrc.py                                    |   13
 plotly/validators/icicle/marker/pattern/__init__.py                                  |   37
 plotly/validators/icicle/marker/pattern/_bgcolor.py                                  |   14
 plotly/validators/icicle/marker/pattern/_bgcolorsrc.py                               |   13
 plotly/validators/icicle/marker/pattern/_fgcolor.py                                  |   14
 plotly/validators/icicle/marker/pattern/_fgcolorsrc.py                               |   13
 plotly/validators/icicle/marker/pattern/_fgopacity.py                                |   15
 plotly/validators/icicle/marker/pattern/_fillmode.py                                 |   14
 plotly/validators/icicle/marker/pattern/_shape.py                                    |   15
 plotly/validators/icicle/marker/pattern/_shapesrc.py                                 |   13
 plotly/validators/icicle/marker/pattern/_size.py                                     |   15
 plotly/validators/icicle/marker/pattern/_sizesrc.py                                  |   13
 plotly/validators/icicle/marker/pattern/_solidity.py                                 |   16
 plotly/validators/icicle/marker/pattern/_soliditysrc.py                              |   13
 plotly/validators/icicle/outsidetextfont/__init__.py                                 |   25
 plotly/validators/icicle/outsidetextfont/_color.py                                   |   14
 plotly/validators/icicle/outsidetextfont/_colorsrc.py                                |   13
 plotly/validators/icicle/outsidetextfont/_family.py                                  |   16
 plotly/validators/icicle/outsidetextfont/_familysrc.py                               |   13
 plotly/validators/icicle/outsidetextfont/_size.py                                    |   15
 plotly/validators/icicle/outsidetextfont/_sizesrc.py                                 |   13
 plotly/validators/icicle/pathbar/__init__.py                                         |   23
 plotly/validators/icicle/pathbar/_edgeshape.py                                       |   12
 plotly/validators/icicle/pathbar/_side.py                                            |   12
 plotly/validators/icicle/pathbar/_textfont.py                                        |   46
 plotly/validators/icicle/pathbar/_thickness.py                                       |   12
 plotly/validators/icicle/pathbar/_visible.py                                         |   11
 plotly/validators/icicle/pathbar/textfont/__init__.py                                |   25
 plotly/validators/icicle/pathbar/textfont/_color.py                                  |   14
 plotly/validators/icicle/pathbar/textfont/_colorsrc.py                               |   13
 plotly/validators/icicle/pathbar/textfont/_family.py                                 |   16
 plotly/validators/icicle/pathbar/textfont/_familysrc.py                              |   13
 plotly/validators/icicle/pathbar/textfont/_size.py                                   |   15
 plotly/validators/icicle/pathbar/textfont/_sizesrc.py                                |   13
 plotly/validators/icicle/root/__init__.py                                            |   11
 plotly/validators/icicle/root/_color.py                                              |   11
 plotly/validators/icicle/stream/__init__.py                                          |   12
 plotly/validators/icicle/stream/_maxpoints.py                                        |   13
 plotly/validators/icicle/stream/_token.py                                            |   13
 plotly/validators/icicle/textfont/__init__.py                                        |   25
 plotly/validators/icicle/textfont/_color.py                                          |   12
 plotly/validators/icicle/textfont/_colorsrc.py                                       |   11
 plotly/validators/icicle/textfont/_family.py                                         |   14
 plotly/validators/icicle/textfont/_familysrc.py                                      |   13
 plotly/validators/icicle/textfont/_size.py                                           |   13
 plotly/validators/icicle/textfont/_sizesrc.py                                        |   11
 plotly/validators/icicle/tiling/__init__.py                                          |   19
 plotly/validators/icicle/tiling/_flip.py                                             |   12
 plotly/validators/icicle/tiling/_orientation.py                                      |   14
 plotly/validators/icicle/tiling/_pad.py                                              |   12
 plotly/validators/image/__init__.py                                                  |   89
 plotly/validators/image/_colormodel.py                                               |   12
 plotly/validators/image/_customdata.py                                               |   11
 plotly/validators/image/_customdatasrc.py                                            |   11
 plotly/validators/image/_dx.py                                                       |   11
 plotly/validators/image/_dy.py                                                       |   11
 plotly/validators/image/_hoverinfo.py                                                |   14
 plotly/validators/image/_hoverinfosrc.py                                             |   11
 plotly/validators/image/_hoverlabel.py                                               |   51
 plotly/validators/image/_hovertemplate.py                                            |   12
 plotly/validators/image/_hovertemplatesrc.py                                         |   11
 plotly/validators/image/_hovertext.py                                                |   11
 plotly/validators/image/_hovertextsrc.py                                             |   11
 plotly/validators/image/_ids.py                                                      |   11
 plotly/validators/image/_idssrc.py                                                   |   11
 plotly/validators/image/_legend.py                                                   |   12
 plotly/validators/image/_legendgrouptitle.py                                         |   20
 plotly/validators/image/_legendrank.py                                               |   11
 plotly/validators/image/_legendwidth.py                                              |   12
 plotly/validators/image/_meta.py                                                     |   12
 plotly/validators/image/_metasrc.py                                                  |   11
 plotly/validators/image/_name.py                                                     |   11
 plotly/validators/image/_opacity.py                                                  |   13
 plotly/validators/image/_source.py                                                   |   11
 plotly/validators/image/_stream.py                                                   |   25
 plotly/validators/image/_text.py                                                     |   11
 plotly/validators/image/_textsrc.py                                                  |   11
 plotly/validators/image/_uid.py                                                      |   11
 plotly/validators/image/_uirevision.py                                               |   11
 plotly/validators/image/_visible.py                                                  |   12
 plotly/validators/image/_x0.py                                                       |   11
 plotly/validators/image/_xaxis.py                                                    |   12
 plotly/validators/image/_y0.py                                                       |   11
 plotly/validators/image/_yaxis.py                                                    |   12
 plotly/validators/image/_z.py                                                        |   11
 plotly/validators/image/_zmax.py                                                     |   20
 plotly/validators/image/_zmin.py                                                     |   20
 plotly/validators/image/_zsmooth.py                                                  |   12
 plotly/validators/image/_zsrc.py                                                     |   11
 plotly/validators/image/hoverlabel/__init__.py                                       |   31
 plotly/validators/image/hoverlabel/_align.py                                         |   13
 plotly/validators/image/hoverlabel/_alignsrc.py                                      |   13
 plotly/validators/image/hoverlabel/_bgcolor.py                                       |   12
 plotly/validators/image/hoverlabel/_bgcolorsrc.py                                    |   13
 plotly/validators/image/hoverlabel/_bordercolor.py                                   |   14
 plotly/validators/image/hoverlabel/_bordercolorsrc.py                                |   13
 plotly/validators/image/hoverlabel/_font.py                                          |   46
 plotly/validators/image/hoverlabel/_namelength.py                                    |   15
 plotly/validators/image/hoverlabel/_namelengthsrc.py                                 |   13
 plotly/validators/image/hoverlabel/font/__init__.py                                  |   25
 plotly/validators/image/hoverlabel/font/_color.py                                    |   14
 plotly/validators/image/hoverlabel/font/_colorsrc.py                                 |   13
 plotly/validators/image/hoverlabel/font/_family.py                                   |   16
 plotly/validators/image/hoverlabel/font/_familysrc.py                                |   13
 plotly/validators/image/hoverlabel/font/_size.py                                     |   15
 plotly/validators/image/hoverlabel/font/_sizesrc.py                                  |   13
 plotly/validators/image/legendgrouptitle/__init__.py                                 |   12
 plotly/validators/image/legendgrouptitle/_font.py                                    |   39
 plotly/validators/image/legendgrouptitle/_text.py                                    |   13
 plotly/validators/image/legendgrouptitle/font/__init__.py                            |   15
 plotly/validators/image/legendgrouptitle/font/_color.py                              |   13
 plotly/validators/image/legendgrouptitle/font/_family.py                             |   15
 plotly/validators/image/legendgrouptitle/font/_size.py                               |   14
 plotly/validators/image/stream/__init__.py                                           |   12
 plotly/validators/image/stream/_maxpoints.py                                         |   13
 plotly/validators/image/stream/_token.py                                             |   13
 plotly/validators/indicator/__init__.py                                              |   59
 plotly/validators/indicator/_align.py                                                |   12
 plotly/validators/indicator/_customdata.py                                           |   11
 plotly/validators/indicator/_customdatasrc.py                                        |   11
 plotly/validators/indicator/_delta.py                                                |   44
 plotly/validators/indicator/_domain.py                                               |   29
 plotly/validators/indicator/_gauge.py                                                |   44
 plotly/validators/indicator/_ids.py                                                  |   12
 plotly/validators/indicator/_idssrc.py                                               |   11
 plotly/validators/indicator/_legend.py                                               |   12
 plotly/validators/indicator/_legendgrouptitle.py                                     |   22
 plotly/validators/indicator/_legendrank.py                                           |   11
 plotly/validators/indicator/_legendwidth.py                                          |   12
 plotly/validators/indicator/_meta.py                                                 |   12
 plotly/validators/indicator/_metasrc.py                                              |   11
 plotly/validators/indicator/_mode.py                                                 |   12
 plotly/validators/indicator/_name.py                                                 |   11
 plotly/validators/indicator/_number.py                                               |   28
 plotly/validators/indicator/_stream.py                                               |   25
 plotly/validators/indicator/_title.py                                                |   24
 plotly/validators/indicator/_uid.py                                                  |   12
 plotly/validators/indicator/_uirevision.py                                           |   11
 plotly/validators/indicator/_value.py                                                |   12
 plotly/validators/indicator/_visible.py                                              |   12
 plotly/validators/indicator/delta/__init__.py                                        |   31
 plotly/validators/indicator/delta/_decreasing.py                                     |   22
 plotly/validators/indicator/delta/_font.py                                           |   37
 plotly/validators/indicator/delta/_increasing.py                                     |   22
 plotly/validators/indicator/delta/_position.py                                       |   12
 plotly/validators/indicator/delta/_prefix.py                                         |   11
 plotly/validators/indicator/delta/_reference.py                                      |   13
 plotly/validators/indicator/delta/_relative.py                                       |   11
 plotly/validators/indicator/delta/_suffix.py                                         |   11
 plotly/validators/indicator/delta/_valueformat.py                                    |   13
 plotly/validators/indicator/delta/decreasing/__init__.py                             |   12
 plotly/validators/indicator/delta/decreasing/_color.py                               |   13
 plotly/validators/indicator/delta/decreasing/_symbol.py                              |   13
 plotly/validators/indicator/delta/font/__init__.py                                   |   15
 plotly/validators/indicator/delta/font/_color.py                                     |   13
 plotly/validators/indicator/delta/font/_family.py                                    |   15
 plotly/validators/indicator/delta/font/_size.py                                      |   14
 plotly/validators/indicator/delta/increasing/__init__.py                             |   12
 plotly/validators/indicator/delta/increasing/_color.py                               |   13
 plotly/validators/indicator/delta/increasing/_symbol.py                              |   13
 plotly/validators/indicator/domain/__init__.py                                       |   21
 plotly/validators/indicator/domain/_column.py                                        |   12
 plotly/validators/indicator/domain/_row.py                                           |   12
 plotly/validators/indicator/domain/_x.py                                             |   18
 plotly/validators/indicator/domain/_y.py                                             |   18
 plotly/validators/indicator/gauge/__init__.py                                        |   31
 plotly/validators/indicator/gauge/_axis.py                                           |  193
 plotly/validators/indicator/gauge/_bar.py                                            |   25
 plotly/validators/indicator/gauge/_bgcolor.py                                        |   11
 plotly/validators/indicator/gauge/_bordercolor.py                                    |   13
 plotly/validators/indicator/gauge/_borderwidth.py                                    |   14
 plotly/validators/indicator/gauge/_shape.py                                          |   12
 plotly/validators/indicator/gauge/_stepdefaults.py                                   |   18
 plotly/validators/indicator/gauge/_steps.py                                          |   48
 plotly/validators/indicator/gauge/_threshold.py                                      |   27
 plotly/validators/indicator/gauge/axis/__init__.py                                   |   73
 plotly/validators/indicator/gauge/axis/_dtick.py                                     |   14
 plotly/validators/indicator/gauge/axis/_exponentformat.py                            |   14
 plotly/validators/indicator/gauge/axis/_labelalias.py                                |   13
 plotly/validators/indicator/gauge/axis/_minexponent.py                               |   14
 plotly/validators/indicator/gauge/axis/_nticks.py                                    |   14
 plotly/validators/indicator/gauge/axis/_range.py                                     |   20
 plotly/validators/indicator/gauge/axis/_separatethousands.py                         |   16
 plotly/validators/indicator/gauge/axis/_showexponent.py                              |   14
 plotly/validators/indicator/gauge/axis/_showticklabels.py                            |   13
 plotly/validators/indicator/gauge/axis/_showtickprefix.py                            |   14
 plotly/validators/indicator/gauge/axis/_showticksuffix.py                            |   14
 plotly/validators/indicator/gauge/axis/_tick0.py                                     |   14
 plotly/validators/indicator/gauge/axis/_tickangle.py                                 |   13
 plotly/validators/indicator/gauge/axis/_tickcolor.py                                 |   13
 plotly/validators/indicator/gauge/axis/_tickfont.py                                  |   39
 plotly/validators/indicator/gauge/axis/_tickformat.py                                |   13
 plotly/validators/indicator/gauge/axis/_tickformatstopdefaults.py                    |   21
 plotly/validators/indicator/gauge/axis/_tickformatstops.py                           |   54
 plotly/validators/indicator/gauge/axis/_ticklabelstep.py                             |   14
 plotly/validators/indicator/gauge/axis/_ticklen.py                                   |   14
 plotly/validators/indicator/gauge/axis/_tickmode.py                                  |   15
 plotly/validators/indicator/gauge/axis/_tickprefix.py                                |   13
 plotly/validators/indicator/gauge/axis/_ticks.py                                     |   14
 plotly/validators/indicator/gauge/axis/_ticksuffix.py                                |   13
 plotly/validators/indicator/gauge/axis/_ticktext.py                                  |   13
 plotly/validators/indicator/gauge/axis/_ticktextsrc.py                               |   13
 plotly/validators/indicator/gauge/axis/_tickvals.py                                  |   13
 plotly/validators/indicator/gauge/axis/_tickvalssrc.py                               |   13
 plotly/validators/indicator/gauge/axis/_tickwidth.py                                 |   14
 plotly/validators/indicator/gauge/axis/_visible.py                                   |   13
 plotly/validators/indicator/gauge/axis/tickfont/__init__.py                          |   15
 plotly/validators/indicator/gauge/axis/tickfont/_color.py                            |   13
 plotly/validators/indicator/gauge/axis/tickfont/_family.py                           |   18
 plotly/validators/indicator/gauge/axis/tickfont/_size.py                             |   14
 plotly/validators/indicator/gauge/axis/tickformatstop/__init__.py                    |   23
 plotly/validators/indicator/gauge/axis/tickformatstop/_dtickrange.py                 |   23
 plotly/validators/indicator/gauge/axis/tickformatstop/_enabled.py                    |   16
 plotly/validators/indicator/gauge/axis/tickformatstop/_name.py                       |   16
 plotly/validators/indicator/gauge/axis/tickformatstop/_templateitemname.py           |   16
 plotly/validators/indicator/gauge/axis/tickformatstop/_value.py                      |   16
 plotly/validators/indicator/gauge/bar/__init__.py                                    |   19
 plotly/validators/indicator/gauge/bar/_color.py                                      |   13
 plotly/validators/indicator/gauge/bar/_line.py                                       |   22
 plotly/validators/indicator/gauge/bar/_thickness.py                                  |   15
 plotly/validators/indicator/gauge/bar/line/__init__.py                               |   12
 plotly/validators/indicator/gauge/bar/line/_color.py                                 |   13
 plotly/validators/indicator/gauge/bar/line/_width.py                                 |   14
 plotly/validators/indicator/gauge/step/__init__.py                                   |   25
 plotly/validators/indicator/gauge/step/_color.py                                     |   13
 plotly/validators/indicator/gauge/step/_line.py                                      |   24
 plotly/validators/indicator/gauge/step/_name.py                                      |   13
 plotly/validators/indicator/gauge/step/_range.py                                     |   20
 plotly/validators/indicator/gauge/step/_templateitemname.py                          |   16
 plotly/validators/indicator/gauge/step/_thickness.py                                 |   15
 plotly/validators/indicator/gauge/step/line/__init__.py                              |   12
 plotly/validators/indicator/gauge/step/line/_color.py                                |   13
 plotly/validators/indicator/gauge/step/line/_width.py                                |   14
 plotly/validators/indicator/gauge/threshold/__init__.py                              |   19
 plotly/validators/indicator/gauge/threshold/_line.py                                 |   22
 plotly/validators/indicator/gauge/threshold/_thickness.py                            |   15
 plotly/validators/indicator/gauge/threshold/_value.py                                |   13
 plotly/validators/indicator/gauge/threshold/line/__init__.py                         |   12
 plotly/validators/indicator/gauge/threshold/line/_color.py                           |   16
 plotly/validators/indicator/gauge/threshold/line/_width.py                           |   17
 plotly/validators/indicator/legendgrouptitle/__init__.py                             |   12
 plotly/validators/indicator/legendgrouptitle/_font.py                                |   39
 plotly/validators/indicator/legendgrouptitle/_text.py                                |   13
 plotly/validators/indicator/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/indicator/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/indicator/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/indicator/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/indicator/number/__init__.py                                       |   21
 plotly/validators/indicator/number/_font.py                                          |   37
 plotly/validators/indicator/number/_prefix.py                                        |   11
 plotly/validators/indicator/number/_suffix.py                                        |   11
 plotly/validators/indicator/number/_valueformat.py                                   |   13
 plotly/validators/indicator/number/font/__init__.py                                  |   15
 plotly/validators/indicator/number/font/_color.py                                    |   13
 plotly/validators/indicator/number/font/_family.py                                   |   15
 plotly/validators/indicator/number/font/_size.py                                     |   14
 plotly/validators/indicator/stream/__init__.py                                       |   12
 plotly/validators/indicator/stream/_maxpoints.py                                     |   15
 plotly/validators/indicator/stream/_token.py                                         |   13
 plotly/validators/indicator/title/__init__.py                                        |   15
 plotly/validators/indicator/title/_align.py                                          |   12
 plotly/validators/indicator/title/_font.py                                           |   37
 plotly/validators/indicator/title/_text.py                                           |   11
 plotly/validators/indicator/title/font/__init__.py                                   |   15
 plotly/validators/indicator/title/font/_color.py                                     |   13
 plotly/validators/indicator/title/font/_family.py                                    |   15
 plotly/validators/indicator/title/font/_size.py                                      |   14
 plotly/validators/isosurface/__init__.py                                             |  133
 plotly/validators/isosurface/_autocolorscale.py                                      |   14
 plotly/validators/isosurface/_caps.py                                                |   25
 plotly/validators/isosurface/_cauto.py                                               |   12
 plotly/validators/isosurface/_cmax.py                                                |   12
 plotly/validators/isosurface/_cmid.py                                                |   12
 plotly/validators/isosurface/_cmin.py                                                |   12
 plotly/validators/isosurface/_coloraxis.py                                           |   13
 plotly/validators/isosurface/_colorbar.py                                            |  294
 plotly/validators/isosurface/_colorscale.py                                          |   12
 plotly/validators/isosurface/_contour.py                                             |   23
 plotly/validators/isosurface/_customdata.py                                          |   11
 plotly/validators/isosurface/_customdatasrc.py                                       |   11
 plotly/validators/isosurface/_flatshading.py                                         |   11
 plotly/validators/isosurface/_hoverinfo.py                                           |   14
 plotly/validators/isosurface/_hoverinfosrc.py                                        |   11
 plotly/validators/isosurface/_hoverlabel.py                                          |   51
 plotly/validators/isosurface/_hovertemplate.py                                       |   12
 plotly/validators/isosurface/_hovertemplatesrc.py                                    |   13
 plotly/validators/isosurface/_hovertext.py                                           |   12
 plotly/validators/isosurface/_hovertextsrc.py                                        |   11
 plotly/validators/isosurface/_ids.py                                                 |   11
 plotly/validators/isosurface/_idssrc.py                                              |   11
 plotly/validators/isosurface/_isomax.py                                              |   11
 plotly/validators/isosurface/_isomin.py                                              |   11
 plotly/validators/isosurface/_legend.py                                              |   12
 plotly/validators/isosurface/_legendgroup.py                                         |   11
 plotly/validators/isosurface/_legendgrouptitle.py                                    |   22
 plotly/validators/isosurface/_legendrank.py                                          |   11
 plotly/validators/isosurface/_legendwidth.py                                         |   12
 plotly/validators/isosurface/_lighting.py                                            |   40
 plotly/validators/isosurface/_lightposition.py                                       |   25
 plotly/validators/isosurface/_meta.py                                                |   12
 plotly/validators/isosurface/_metasrc.py                                             |   11
 plotly/validators/isosurface/_name.py                                                |   11
 plotly/validators/isosurface/_opacity.py                                             |   13
 plotly/validators/isosurface/_reversescale.py                                        |   11
 plotly/validators/isosurface/_scene.py                                               |   12
 plotly/validators/isosurface/_showlegend.py                                          |   11
 plotly/validators/isosurface/_showscale.py                                           |   11
 plotly/validators/isosurface/_slices.py                                              |   25
 plotly/validators/isosurface/_spaceframe.py                                          |   29
 plotly/validators/isosurface/_stream.py                                              |   25
 plotly/validators/isosurface/_surface.py                                             |   42
 plotly/validators/isosurface/_text.py                                                |   12
 plotly/validators/isosurface/_textsrc.py                                             |   11
 plotly/validators/isosurface/_uid.py                                                 |   11
 plotly/validators/isosurface/_uirevision.py                                          |   11
 plotly/validators/isosurface/_value.py                                               |   11
 plotly/validators/isosurface/_valuehoverformat.py                                    |   13
 plotly/validators/isosurface/_valuesrc.py                                            |   11
 plotly/validators/isosurface/_visible.py                                             |   12
 plotly/validators/isosurface/_x.py                                                   |   11
 plotly/validators/isosurface/_xhoverformat.py                                        |   11
 plotly/validators/isosurface/_xsrc.py                                                |   11
 plotly/validators/isosurface/_y.py                                                   |   11
 plotly/validators/isosurface/_yhoverformat.py                                        |   11
 plotly/validators/isosurface/_ysrc.py                                                |   11
 plotly/validators/isosurface/_z.py                                                   |   11
 plotly/validators/isosurface/_zhoverformat.py                                        |   11
 plotly/validators/isosurface/_zsrc.py                                                |   11
 plotly/validators/isosurface/caps/__init__.py                                        |   13
 plotly/validators/isosurface/caps/_x.py                                              |   29
 plotly/validators/isosurface/caps/_y.py                                              |   29
 plotly/validators/isosurface/caps/_z.py                                              |   29
 plotly/validators/isosurface/caps/x/__init__.py                                      |   12
 plotly/validators/isosurface/caps/x/_fill.py                                         |   13
 plotly/validators/isosurface/caps/x/_show.py                                         |   11
 plotly/validators/isosurface/caps/y/__init__.py                                      |   12
 plotly/validators/isosurface/caps/y/_fill.py                                         |   13
 plotly/validators/isosurface/caps/y/_show.py                                         |   11
 plotly/validators/isosurface/caps/z/__init__.py                                      |   12
 plotly/validators/isosurface/caps/z/_fill.py                                         |   13
 plotly/validators/isosurface/caps/z/_show.py                                         |   11
 plotly/validators/isosurface/colorbar/__init__.py                                    |  111
 plotly/validators/isosurface/colorbar/_bgcolor.py                                    |   13
 plotly/validators/isosurface/colorbar/_bordercolor.py                                |   13
 plotly/validators/isosurface/colorbar/_borderwidth.py                                |   14
 plotly/validators/isosurface/colorbar/_dtick.py                                      |   14
 plotly/validators/isosurface/colorbar/_exponentformat.py                             |   14
 plotly/validators/isosurface/colorbar/_labelalias.py                                 |   13
 plotly/validators/isosurface/colorbar/_len.py                                        |   12
 plotly/validators/isosurface/colorbar/_lenmode.py                                    |   14
 plotly/validators/isosurface/colorbar/_minexponent.py                                |   14
 plotly/validators/isosurface/colorbar/_nticks.py                                     |   14
 plotly/validators/isosurface/colorbar/_orientation.py                                |   14
 plotly/validators/isosurface/colorbar/_outlinecolor.py                               |   13
 plotly/validators/isosurface/colorbar/_outlinewidth.py                               |   14
 plotly/validators/isosurface/colorbar/_separatethousands.py                          |   16
 plotly/validators/isosurface/colorbar/_showexponent.py                               |   14
 plotly/validators/isosurface/colorbar/_showticklabels.py                             |   13
 plotly/validators/isosurface/colorbar/_showtickprefix.py                             |   14
 plotly/validators/isosurface/colorbar/_showticksuffix.py                             |   14
 plotly/validators/isosurface/colorbar/_thickness.py                                  |   14
 plotly/validators/isosurface/colorbar/_thicknessmode.py                              |   14
 plotly/validators/isosurface/colorbar/_tick0.py                                      |   14
 plotly/validators/isosurface/colorbar/_tickangle.py                                  |   13
 plotly/validators/isosurface/colorbar/_tickcolor.py                                  |   13
 plotly/validators/isosurface/colorbar/_tickfont.py                                   |   39
 plotly/validators/isosurface/colorbar/_tickformat.py                                 |   13
 plotly/validators/isosurface/colorbar/_tickformatstopdefaults.py                     |   21
 plotly/validators/isosurface/colorbar/_tickformatstops.py                            |   51
 plotly/validators/isosurface/colorbar/_ticklabeloverflow.py                          |   17
 plotly/validators/isosurface/colorbar/_ticklabelposition.py                          |   31
 plotly/validators/isosurface/colorbar/_ticklabelstep.py                              |   14
 plotly/validators/isosurface/colorbar/_ticklen.py                                    |   14
 plotly/validators/isosurface/colorbar/_tickmode.py                                   |   15
 plotly/validators/isosurface/colorbar/_tickprefix.py                                 |   13
 plotly/validators/isosurface/colorbar/_ticks.py                                      |   14
 plotly/validators/isosurface/colorbar/_ticksuffix.py                                 |   13
 plotly/validators/isosurface/colorbar/_ticktext.py                                   |   13
 plotly/validators/isosurface/colorbar/_ticktextsrc.py                                |   13
 plotly/validators/isosurface/colorbar/_tickvals.py                                   |   13
 plotly/validators/isosurface/colorbar/_tickvalssrc.py                                |   13
 plotly/validators/isosurface/colorbar/_tickwidth.py                                  |   14
 plotly/validators/isosurface/colorbar/_title.py                                      |   35
 plotly/validators/isosurface/colorbar/_x.py                                          |   11
 plotly/validators/isosurface/colorbar/_xanchor.py                                    |   14
 plotly/validators/isosurface/colorbar/_xpad.py                                       |   12
 plotly/validators/isosurface/colorbar/_xref.py                                       |   12
 plotly/validators/isosurface/colorbar/_y.py                                          |   11
 plotly/validators/isosurface/colorbar/_yanchor.py                                    |   14
 plotly/validators/isosurface/colorbar/_ypad.py                                       |   12
 plotly/validators/isosurface/colorbar/_yref.py                                       |   12
 plotly/validators/isosurface/colorbar/tickfont/__init__.py                           |   15
 plotly/validators/isosurface/colorbar/tickfont/_color.py                             |   13
 plotly/validators/isosurface/colorbar/tickfont/_family.py                            |   15
 plotly/validators/isosurface/colorbar/tickfont/_size.py                              |   14
 plotly/validators/isosurface/colorbar/tickformatstop/__init__.py                     |   23
 plotly/validators/isosurface/colorbar/tickformatstop/_dtickrange.py                  |   23
 plotly/validators/isosurface/colorbar/tickformatstop/_enabled.py                     |   16
 plotly/validators/isosurface/colorbar/tickformatstop/_name.py                        |   16
 plotly/validators/isosurface/colorbar/tickformatstop/_templateitemname.py            |   16
 plotly/validators/isosurface/colorbar/tickformatstop/_value.py                       |   16
 plotly/validators/isosurface/colorbar/title/__init__.py                              |   15
 plotly/validators/isosurface/colorbar/title/_font.py                                 |   39
 plotly/validators/isosurface/colorbar/title/_side.py                                 |   14
 plotly/validators/isosurface/colorbar/title/_text.py                                 |   13
 plotly/validators/isosurface/colorbar/title/font/__init__.py                         |   15
 plotly/validators/isosurface/colorbar/title/font/_color.py                           |   16
 plotly/validators/isosurface/colorbar/title/font/_family.py                          |   18
 plotly/validators/isosurface/colorbar/title/font/_size.py                            |   14
 plotly/validators/isosurface/contour/__init__.py                                     |   15
 plotly/validators/isosurface/contour/_color.py                                       |   11
 plotly/validators/isosurface/contour/_show.py                                        |   11
 plotly/validators/isosurface/contour/_width.py                                       |   13
 plotly/validators/isosurface/hoverlabel/__init__.py                                  |   31
 plotly/validators/isosurface/hoverlabel/_align.py                                    |   15
 plotly/validators/isosurface/hoverlabel/_alignsrc.py                                 |   13
 plotly/validators/isosurface/hoverlabel/_bgcolor.py                                  |   14
 plotly/validators/isosurface/hoverlabel/_bgcolorsrc.py                               |   13
 plotly/validators/isosurface/hoverlabel/_bordercolor.py                              |   14
 plotly/validators/isosurface/hoverlabel/_bordercolorsrc.py                           |   16
 plotly/validators/isosurface/hoverlabel/_font.py                                     |   48
 plotly/validators/isosurface/hoverlabel/_namelength.py                               |   15
 plotly/validators/isosurface/hoverlabel/_namelengthsrc.py                            |   13
 plotly/validators/isosurface/hoverlabel/font/__init__.py                             |   25
 plotly/validators/isosurface/hoverlabel/font/_color.py                               |   14
 plotly/validators/isosurface/hoverlabel/font/_colorsrc.py                            |   13
 plotly/validators/isosurface/hoverlabel/font/_family.py                              |   16
 plotly/validators/isosurface/hoverlabel/font/_familysrc.py                           |   16
 plotly/validators/isosurface/hoverlabel/font/_size.py                                |   15
 plotly/validators/isosurface/hoverlabel/font/_sizesrc.py                             |   13
 plotly/validators/isosurface/legendgrouptitle/__init__.py                            |   12
 plotly/validators/isosurface/legendgrouptitle/_font.py                               |   39
 plotly/validators/isosurface/legendgrouptitle/_text.py                               |   13
 plotly/validators/isosurface/legendgrouptitle/font/__init__.py                       |   15
 plotly/validators/isosurface/legendgrouptitle/font/_color.py                         |   16
 plotly/validators/isosurface/legendgrouptitle/font/_family.py                        |   18
 plotly/validators/isosurface/legendgrouptitle/font/_size.py                          |   17
 plotly/validators/isosurface/lighting/__init__.py                                    |   27
 plotly/validators/isosurface/lighting/_ambient.py                                    |   15
 plotly/validators/isosurface/lighting/_diffuse.py                                    |   15
 plotly/validators/isosurface/lighting/_facenormalsepsilon.py                         |   18
 plotly/validators/isosurface/lighting/_fresnel.py                                    |   15
 plotly/validators/isosurface/lighting/_roughness.py                                  |   15
 plotly/validators/isosurface/lighting/_specular.py                                   |   15
 plotly/validators/isosurface/lighting/_vertexnormalsepsilon.py                       |   18
 plotly/validators/isosurface/lightposition/__init__.py                               |   13
 plotly/validators/isosurface/lightposition/_x.py                                     |   15
 plotly/validators/isosurface/lightposition/_y.py                                     |   15
 plotly/validators/isosurface/lightposition/_z.py                                     |   15
 plotly/validators/isosurface/slices/__init__.py                                      |   13
 plotly/validators/isosurface/slices/_x.py                                            |   34
 plotly/validators/isosurface/slices/_y.py                                            |   34
 plotly/validators/isosurface/slices/_z.py                                            |   34
 plotly/validators/isosurface/slices/x/__init__.py                                    |   21
 plotly/validators/isosurface/slices/x/_fill.py                                       |   13
 plotly/validators/isosurface/slices/x/_locations.py                                  |   13
 plotly/validators/isosurface/slices/x/_locationssrc.py                               |   13
 plotly/validators/isosurface/slices/x/_show.py                                       |   11
 plotly/validators/isosurface/slices/y/__init__.py                                    |   21
 plotly/validators/isosurface/slices/y/_fill.py                                       |   13
 plotly/validators/isosurface/slices/y/_locations.py                                  |   13
 plotly/validators/isosurface/slices/y/_locationssrc.py                               |   13
 plotly/validators/isosurface/slices/y/_show.py                                       |   11
 plotly/validators/isosurface/slices/z/__init__.py                                    |   21
 plotly/validators/isosurface/slices/z/_fill.py                                       |   13
 plotly/validators/isosurface/slices/z/_locations.py                                  |   13
 plotly/validators/isosurface/slices/z/_locationssrc.py                               |   13
 plotly/validators/isosurface/slices/z/_show.py                                       |   11
 plotly/validators/isosurface/spaceframe/__init__.py                                  |   12
 plotly/validators/isosurface/spaceframe/_fill.py                                     |   15
 plotly/validators/isosurface/spaceframe/_show.py                                     |   13
 plotly/validators/isosurface/stream/__init__.py                                      |   12
 plotly/validators/isosurface/stream/_maxpoints.py                                    |   15
 plotly/validators/isosurface/stream/_token.py                                        |   13
 plotly/validators/isosurface/surface/__init__.py                                     |   21
 plotly/validators/isosurface/surface/_count.py                                       |   12
 plotly/validators/isosurface/surface/_fill.py                                        |   13
 plotly/validators/isosurface/surface/_pattern.py                                     |   15
 plotly/validators/isosurface/surface/_show.py                                        |   11
 plotly/validators/layout/__init__.py                                                 |  199
 plotly/validators/layout/_activeselection.py                                         |   21
 plotly/validators/layout/_activeshape.py                                             |   21
 plotly/validators/layout/_annotationdefaults.py                                      |   18
 plotly/validators/layout/_annotations.py                                             |  333
 plotly/validators/layout/_autosize.py                                                |   11
 plotly/validators/layout/_autotypenumbers.py                                         |   12
 plotly/validators/layout/_barcornerradius.py                                         |   11
 plotly/validators/layout/_bargap.py                                                  |   13
 plotly/validators/layout/_bargroupgap.py                                             |   13
 plotly/validators/layout/_barmode.py                                                 |   12
 plotly/validators/layout/_barnorm.py                                                 |   12
 plotly/validators/layout/_boxgap.py                                                  |   13
 plotly/validators/layout/_boxgroupgap.py                                             |   13
 plotly/validators/layout/_boxmode.py                                                 |   12
 plotly/validators/layout/_calendar.py                                                |   32
 plotly/validators/layout/_clickmode.py                                               |   13
 plotly/validators/layout/_coloraxis.py                                               |   73
 plotly/validators/layout/_colorscale.py                                              |   28
 plotly/validators/layout/_colorway.py                                                |   11
 plotly/validators/layout/_computed.py                                                |   11
 plotly/validators/layout/_datarevision.py                                            |   11
 plotly/validators/layout/_dragmode.py                                                |   28
 plotly/validators/layout/_editrevision.py                                            |   11
 plotly/validators/layout/_extendfunnelareacolors.py                                  |   13
 plotly/validators/layout/_extendiciclecolors.py                                      |   13
 plotly/validators/layout/_extendpiecolors.py                                         |   11
 plotly/validators/layout/_extendsunburstcolors.py                                    |   13
 plotly/validators/layout/_extendtreemapcolors.py                                     |   13
 plotly/validators/layout/_font.py                                                    |   37
 plotly/validators/layout/_funnelareacolorway.py                                      |   13
 plotly/validators/layout/_funnelgap.py                                               |   13
 plotly/validators/layout/_funnelgroupgap.py                                          |   13
 plotly/validators/layout/_funnelmode.py                                              |   12
 plotly/validators/layout/_geo.py                                                     |  114
 plotly/validators/layout/_grid.py                                                    |   95
 plotly/validators/layout/_height.py                                                  |   12
 plotly/validators/layout/_hiddenlabels.py                                            |   11
 plotly/validators/layout/_hiddenlabelssrc.py                                         |   11
 plotly/validators/layout/_hidesources.py                                             |   11
 plotly/validators/layout/_hoverdistance.py                                           |   12
 plotly/validators/layout/_hoverlabel.py                                              |   43
 plotly/validators/layout/_hovermode.py                                               |   14
 plotly/validators/layout/_iciclecolorway.py                                          |   11
 plotly/validators/layout/_imagedefaults.py                                           |   16
 plotly/validators/layout/_images.py                                                  |  113
 plotly/validators/layout/_legend.py                                                  |  145
 plotly/validators/layout/_mapbox.py                                                  |   85
 plotly/validators/layout/_margin.py                                                  |   32
 plotly/validators/layout/_meta.py                                                    |   12
 plotly/validators/layout/_metasrc.py                                                 |   11
 plotly/validators/layout/_minreducedheight.py                                        |   12
 plotly/validators/layout/_minreducedwidth.py                                         |   12
 plotly/validators/layout/_modebar.py                                                 |   72
 plotly/validators/layout/_newselection.py                                            |   28
 plotly/validators/layout/_newshape.py                                                |   85
 plotly/validators/layout/_paper_bgcolor.py                                           |   11
 plotly/validators/layout/_piecolorway.py                                             |   11
 plotly/validators/layout/_plot_bgcolor.py                                            |   11
 plotly/validators/layout/_polar.py                                                   |   64
 plotly/validators/layout/_scattergap.py                                              |   13
 plotly/validators/layout/_scattermode.py                                             |   12
 plotly/validators/layout/_scene.py                                                   |   67
 plotly/validators/layout/_selectdirection.py                                         |   12
 plotly/validators/layout/_selectiondefaults.py                                       |   16
 plotly/validators/layout/_selectionrevision.py                                       |   11
 plotly/validators/layout/_selections.py                                              |   93
 plotly/validators/layout/_separators.py                                              |   11
 plotly/validators/layout/_shapedefaults.py                                           |   16
 plotly/validators/layout/_shapes.py                                                  |  225
 plotly/validators/layout/_showlegend.py                                              |   11
 plotly/validators/layout/_sliderdefaults.py                                          |   16
 plotly/validators/layout/_sliders.py                                                 |  110
 plotly/validators/layout/_smith.py                                                   |   29
 plotly/validators/layout/_spikedistance.py                                           |   12
 plotly/validators/layout/_sunburstcolorway.py                                        |   11
 plotly/validators/layout/_template.py                                                |   22
 plotly/validators/layout/_ternary.py                                                 |   39
 plotly/validators/layout/_title.py                                                   |   84
 plotly/validators/layout/_transition.py                                              |   26
 plotly/validators/layout/_treemapcolorway.py                                         |   11
 plotly/validators/layout/_uirevision.py                                              |   11
 plotly/validators/layout/_uniformtext.py                                             |   30
 plotly/validators/layout/_updatemenudefaults.py                                      |   18
 plotly/validators/layout/_updatemenus.py                                             |   95
 plotly/validators/layout/_violingap.py                                               |   13
 plotly/validators/layout/_violingroupgap.py                                          |   13
 plotly/validators/layout/_violinmode.py                                              |   12
 plotly/validators/layout/_waterfallgap.py                                            |   13
 plotly/validators/layout/_waterfallgroupgap.py                                       |   13
 plotly/validators/layout/_waterfallmode.py                                           |   12
 plotly/validators/layout/_width.py                                                   |   12
 plotly/validators/layout/_xaxis.py                                                   |  557
 plotly/validators/layout/_yaxis.py                                                   |  568
 plotly/validators/layout/activeselection/__init__.py                                 |   12
 plotly/validators/layout/activeselection/_fillcolor.py                               |   13
 plotly/validators/layout/activeselection/_opacity.py                                 |   15
 plotly/validators/layout/activeshape/__init__.py                                     |   12
 plotly/validators/layout/activeshape/_fillcolor.py                                   |   13
 plotly/validators/layout/activeshape/_opacity.py                                     |   15
 plotly/validators/layout/annotation/__init__.py                                      |   99
 plotly/validators/layout/annotation/_align.py                                        |   12
 plotly/validators/layout/annotation/_arrowcolor.py                                   |   13
 plotly/validators/layout/annotation/_arrowhead.py                                    |   15
 plotly/validators/layout/annotation/_arrowside.py                                    |   15
 plotly/validators/layout/annotation/_arrowsize.py                                    |   14
 plotly/validators/layout/annotation/_arrowwidth.py                                   |   14
 plotly/validators/layout/annotation/_ax.py                                           |   11
 plotly/validators/layout/annotation/_axref.py                                        |   14
 plotly/validators/layout/annotation/_ay.py                                           |   11
 plotly/validators/layout/annotation/_ayref.py                                        |   14
 plotly/validators/layout/annotation/_bgcolor.py                                      |   13
 plotly/validators/layout/annotation/_bordercolor.py                                  |   13
 plotly/validators/layout/annotation/_borderpad.py                                    |   14
 plotly/validators/layout/annotation/_borderwidth.py                                  |   14
 plotly/validators/layout/annotation/_captureevents.py                                |   13
 plotly/validators/layout/annotation/_clicktoshow.py                                  |   14
 plotly/validators/layout/annotation/_font.py                                         |   37
 plotly/validators/layout/annotation/_height.py                                       |   12
 plotly/validators/layout/annotation/_hoverlabel.py                                   |   30
 plotly/validators/layout/annotation/_hovertext.py                                    |   13
 plotly/validators/layout/annotation/_name.py                                         |   11
 plotly/validators/layout/annotation/_opacity.py                                      |   15
 plotly/validators/layout/annotation/_showarrow.py                                    |   13
 plotly/validators/layout/annotation/_standoff.py                                     |   14
 plotly/validators/layout/annotation/_startarrowhead.py                               |   15
 plotly/validators/layout/annotation/_startarrowsize.py                               |   14
 plotly/validators/layout/annotation/_startstandoff.py                                |   14
 plotly/validators/layout/annotation/_templateitemname.py                             |   13
 plotly/validators/layout/annotation/_text.py                                         |   11
 plotly/validators/layout/annotation/_textangle.py                                    |   13
 plotly/validators/layout/annotation/_valign.py                                       |   12
 plotly/validators/layout/annotation/_visible.py                                      |   13
 plotly/validators/layout/annotation/_width.py                                        |   12
 plotly/validators/layout/annotation/_x.py                                            |   11
 plotly/validators/layout/annotation/_xanchor.py                                      |   14
 plotly/validators/layout/annotation/_xclick.py                                       |   11
 plotly/validators/layout/annotation/_xref.py                                         |   14
 plotly/validators/layout/annotation/_xshift.py                                       |   11
 plotly/validators/layout/annotation/_y.py                                            |   11
 plotly/validators/layout/annotation/_yanchor.py                                      |   14
 plotly/validators/layout/annotation/_yclick.py                                       |   11
 plotly/validators/layout/annotation/_yref.py                                         |   14
 plotly/validators/layout/annotation/_yshift.py                                       |   11
 plotly/validators/layout/annotation/font/__init__.py                                 |   15
 plotly/validators/layout/annotation/font/_color.py                                   |   13
 plotly/validators/layout/annotation/font/_family.py                                  |   15
 plotly/validators/layout/annotation/font/_size.py                                    |   14
 plotly/validators/layout/annotation/hoverlabel/__init__.py                           |   19
 plotly/validators/layout/annotation/hoverlabel/_bgcolor.py                           |   16
 plotly/validators/layout/annotation/hoverlabel/_bordercolor.py                       |   16
 plotly/validators/layout/annotation/hoverlabel/_font.py                              |   39
 plotly/validators/layout/annotation/hoverlabel/font/__init__.py                      |   15
 plotly/validators/layout/annotation/hoverlabel/font/_color.py                        |   16
 plotly/validators/layout/annotation/hoverlabel/font/_family.py                       |   18
 plotly/validators/layout/annotation/hoverlabel/font/_size.py                         |   17
 plotly/validators/layout/coloraxis/__init__.py                                       |   31
 plotly/validators/layout/coloraxis/_autocolorscale.py                                |   14
 plotly/validators/layout/coloraxis/_cauto.py                                         |   12
 plotly/validators/layout/coloraxis/_cmax.py                                          |   12
 plotly/validators/layout/coloraxis/_cmid.py                                          |   12
 plotly/validators/layout/coloraxis/_cmin.py                                          |   12
 plotly/validators/layout/coloraxis/_colorbar.py                                      |  297
 plotly/validators/layout/coloraxis/_colorscale.py                                    |   14
 plotly/validators/layout/coloraxis/_reversescale.py                                  |   13
 plotly/validators/layout/coloraxis/_showscale.py                                     |   13
 plotly/validators/layout/coloraxis/colorbar/__init__.py                              |  111
 plotly/validators/layout/coloraxis/colorbar/_bgcolor.py                              |   13
 plotly/validators/layout/coloraxis/colorbar/_bordercolor.py                          |   16
 plotly/validators/layout/coloraxis/colorbar/_borderwidth.py                          |   17
 plotly/validators/layout/coloraxis/colorbar/_dtick.py                                |   14
 plotly/validators/layout/coloraxis/colorbar/_exponentformat.py                       |   17
 plotly/validators/layout/coloraxis/colorbar/_labelalias.py                           |   16
 plotly/validators/layout/coloraxis/colorbar/_len.py                                  |   14
 plotly/validators/layout/coloraxis/colorbar/_lenmode.py                              |   14
 plotly/validators/layout/coloraxis/colorbar/_minexponent.py                          |   17
 plotly/validators/layout/coloraxis/colorbar/_nticks.py                               |   14
 plotly/validators/layout/coloraxis/colorbar/_orientation.py                          |   17
 plotly/validators/layout/coloraxis/colorbar/_outlinecolor.py                         |   16
 plotly/validators/layout/coloraxis/colorbar/_outlinewidth.py                         |   17
 plotly/validators/layout/coloraxis/colorbar/_separatethousands.py                    |   16
 plotly/validators/layout/coloraxis/colorbar/_showexponent.py                         |   17
 plotly/validators/layout/coloraxis/colorbar/_showticklabels.py                       |   16
 plotly/validators/layout/coloraxis/colorbar/_showtickprefix.py                       |   17
 plotly/validators/layout/coloraxis/colorbar/_showticksuffix.py                       |   17
 plotly/validators/layout/coloraxis/colorbar/_thickness.py                            |   14
 plotly/validators/layout/coloraxis/colorbar/_thicknessmode.py                        |   17
 plotly/validators/layout/coloraxis/colorbar/_tick0.py                                |   14
 plotly/validators/layout/coloraxis/colorbar/_tickangle.py                            |   13
 plotly/validators/layout/coloraxis/colorbar/_tickcolor.py                            |   13
 plotly/validators/layout/coloraxis/colorbar/_tickfont.py                             |   39
 plotly/validators/layout/coloraxis/colorbar/_tickformat.py                           |   16
 plotly/validators/layout/coloraxis/colorbar/_tickformatstopdefaults.py               |   21
 plotly/validators/layout/coloraxis/colorbar/_tickformatstops.py                      |   54
 plotly/validators/layout/coloraxis/colorbar/_ticklabeloverflow.py                    |   17
 plotly/validators/layout/coloraxis/colorbar/_ticklabelposition.py                    |   31
 plotly/validators/layout/coloraxis/colorbar/_ticklabelstep.py                        |   17
 plotly/validators/layout/coloraxis/colorbar/_ticklen.py                              |   14
 plotly/validators/layout/coloraxis/colorbar/_tickmode.py                             |   15
 plotly/validators/layout/coloraxis/colorbar/_tickprefix.py                           |   16
 plotly/validators/layout/coloraxis/colorbar/_ticks.py                                |   14
 plotly/validators/layout/coloraxis/colorbar/_ticksuffix.py                           |   16
 plotly/validators/layout/coloraxis/colorbar/_ticktext.py                             |   13
 plotly/validators/layout/coloraxis/colorbar/_ticktextsrc.py                          |   16
 plotly/validators/layout/coloraxis/colorbar/_tickvals.py                             |   13
 plotly/validators/layout/coloraxis/colorbar/_tickvalssrc.py                          |   16
 plotly/validators/layout/coloraxis/colorbar/_tickwidth.py                            |   14
 plotly/validators/layout/coloraxis/colorbar/_title.py                                |   35
 plotly/validators/layout/coloraxis/colorbar/_x.py                                    |   13
 plotly/validators/layout/coloraxis/colorbar/_xanchor.py                              |   14
 plotly/validators/layout/coloraxis/colorbar/_xpad.py                                 |   14
 plotly/validators/layout/coloraxis/colorbar/_xref.py                                 |   14
 plotly/validators/layout/coloraxis/colorbar/_y.py                                    |   13
 plotly/validators/layout/coloraxis/colorbar/_yanchor.py                              |   14
 plotly/validators/layout/coloraxis/colorbar/_ypad.py                                 |   14
 plotly/validators/layout/coloraxis/colorbar/_yref.py                                 |   14
 plotly/validators/layout/coloraxis/colorbar/tickfont/__init__.py                     |   15
 plotly/validators/layout/coloraxis/colorbar/tickfont/_color.py                       |   16
 plotly/validators/layout/coloraxis/colorbar/tickfont/_family.py                      |   18
 plotly/validators/layout/coloraxis/colorbar/tickfont/_size.py                        |   17
 plotly/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py               |   23
 plotly/validators/layout/coloraxis/colorbar/tickformatstop/_dtickrange.py            |   23
 plotly/validators/layout/coloraxis/colorbar/tickformatstop/_enabled.py               |   16
 plotly/validators/layout/coloraxis/colorbar/tickformatstop/_name.py                  |   16
 plotly/validators/layout/coloraxis/colorbar/tickformatstop/_templateitemname.py      |   16
 plotly/validators/layout/coloraxis/colorbar/tickformatstop/_value.py                 |   16
 plotly/validators/layout/coloraxis/colorbar/title/__init__.py                        |   15
 plotly/validators/layout/coloraxis/colorbar/title/_font.py                           |   42
 plotly/validators/layout/coloraxis/colorbar/title/_side.py                           |   17
 plotly/validators/layout/coloraxis/colorbar/title/_text.py                           |   16
 plotly/validators/layout/coloraxis/colorbar/title/font/__init__.py                   |   15
 plotly/validators/layout/coloraxis/colorbar/title/font/_color.py                     |   16
 plotly/validators/layout/coloraxis/colorbar/title/font/_family.py                    |   18
 plotly/validators/layout/coloraxis/colorbar/title/font/_size.py                      |   17
 plotly/validators/layout/colorscale/__init__.py                                      |   19
 plotly/validators/layout/colorscale/_diverging.py                                    |   13
 plotly/validators/layout/colorscale/_sequential.py                                   |   13
 plotly/validators/layout/colorscale/_sequentialminus.py                              |   13
 plotly/validators/layout/font/__init__.py                                            |   15
 plotly/validators/layout/font/_color.py                                              |   11
 plotly/validators/layout/font/_family.py                                             |   13
 plotly/validators/layout/font/_size.py                                               |   12
 plotly/validators/layout/geo/__init__.py                                             |   77
 plotly/validators/layout/geo/_bgcolor.py                                             |   11
 plotly/validators/layout/geo/_center.py                                              |   27
 plotly/validators/layout/geo/_coastlinecolor.py                                      |   13
 plotly/validators/layout/geo/_coastlinewidth.py                                      |   14
 plotly/validators/layout/geo/_countrycolor.py                                        |   11
 plotly/validators/layout/geo/_countrywidth.py                                        |   12
 plotly/validators/layout/geo/_domain.py                                              |   42
 plotly/validators/layout/geo/_fitbounds.py                                           |   12
 plotly/validators/layout/geo/_framecolor.py                                          |   11
 plotly/validators/layout/geo/_framewidth.py                                          |   12
 plotly/validators/layout/geo/_lakecolor.py                                           |   11
 plotly/validators/layout/geo/_landcolor.py                                           |   11
 plotly/validators/layout/geo/_lataxis.py                                             |   37
 plotly/validators/layout/geo/_lonaxis.py                                             |   37
 plotly/validators/layout/geo/_oceancolor.py                                          |   11
 plotly/validators/layout/geo/_projection.py                                          |   38
 plotly/validators/layout/geo/_resolution.py                                          |   13
 plotly/validators/layout/geo/_rivercolor.py                                          |   11
 plotly/validators/layout/geo/_riverwidth.py                                          |   12
 plotly/validators/layout/geo/_scope.py                                               |   23
 plotly/validators/layout/geo/_showcoastlines.py                                      |   13
 plotly/validators/layout/geo/_showcountries.py                                       |   11
 plotly/validators/layout/geo/_showframe.py                                           |   11
 plotly/validators/layout/geo/_showlakes.py                                           |   11
 plotly/validators/layout/geo/_showland.py                                            |   11
 plotly/validators/layout/geo/_showocean.py                                           |   11
 plotly/validators/layout/geo/_showrivers.py                                          |   11
 plotly/validators/layout/geo/_showsubunits.py                                        |   11
 plotly/validators/layout/geo/_subunitcolor.py                                        |   11
 plotly/validators/layout/geo/_subunitwidth.py                                        |   12
 plotly/validators/layout/geo/_uirevision.py                                          |   11
 plotly/validators/layout/geo/_visible.py                                             |   11
 plotly/validators/layout/geo/center/__init__.py                                      |   12
 plotly/validators/layout/geo/center/_lat.py                                          |   11
 plotly/validators/layout/geo/center/_lon.py                                          |   11
 plotly/validators/layout/geo/domain/__init__.py                                      |   21
 plotly/validators/layout/geo/domain/_column.py                                       |   12
 plotly/validators/layout/geo/domain/_row.py                                          |   12
 plotly/validators/layout/geo/domain/_x.py                                            |   18
 plotly/validators/layout/geo/domain/_y.py                                            |   18
 plotly/validators/layout/geo/lataxis/__init__.py                                     |   27
 plotly/validators/layout/geo/lataxis/_dtick.py                                       |   11
 plotly/validators/layout/geo/lataxis/_gridcolor.py                                   |   13
 plotly/validators/layout/geo/lataxis/_griddash.py                                    |   16
 plotly/validators/layout/geo/lataxis/_gridwidth.py                                   |   14
 plotly/validators/layout/geo/lataxis/_range.py                                       |   18
 plotly/validators/layout/geo/lataxis/_showgrid.py                                    |   13
 plotly/validators/layout/geo/lataxis/_tick0.py                                       |   11
 plotly/validators/layout/geo/lonaxis/__init__.py                                     |   27
 plotly/validators/layout/geo/lonaxis/_dtick.py                                       |   11
 plotly/validators/layout/geo/lonaxis/_gridcolor.py                                   |   13
 plotly/validators/layout/geo/lonaxis/_griddash.py                                    |   16
 plotly/validators/layout/geo/lonaxis/_gridwidth.py                                   |   14
 plotly/validators/layout/geo/lonaxis/_range.py                                       |   18
 plotly/validators/layout/geo/lonaxis/_showgrid.py                                    |   13
 plotly/validators/layout/geo/lonaxis/_tick0.py                                       |   11
 plotly/validators/layout/geo/projection/__init__.py                                  |   25
 plotly/validators/layout/geo/projection/_distance.py                                 |   14
 plotly/validators/layout/geo/projection/_parallels.py                                |   20
 plotly/validators/layout/geo/projection/_rotation.py                                 |   28
 plotly/validators/layout/geo/projection/_scale.py                                    |   14
 plotly/validators/layout/geo/projection/_tilt.py                                     |   13
 plotly/validators/layout/geo/projection/_type.py                                     |  102
 plotly/validators/layout/geo/projection/rotation/__init__.py                         |   15
 plotly/validators/layout/geo/projection/rotation/_lat.py                             |   13
 plotly/validators/layout/geo/projection/rotation/_lon.py                             |   13
 plotly/validators/layout/geo/projection/rotation/_roll.py                            |   13
 plotly/validators/layout/grid/__init__.py                                            |   37
 plotly/validators/layout/grid/_columns.py                                            |   12
 plotly/validators/layout/grid/_domain.py                                             |   26
 plotly/validators/layout/grid/_pattern.py                                            |   12
 plotly/validators/layout/grid/_roworder.py                                           |   12
 plotly/validators/layout/grid/_rows.py                                               |   12
 plotly/validators/layout/grid/_subplots.py                                           |   21
 plotly/validators/layout/grid/_xaxes.py                                              |   20
 plotly/validators/layout/grid/_xgap.py                                               |   13
 plotly/validators/layout/grid/_xside.py                                              |   12
 plotly/validators/layout/grid/_yaxes.py                                              |   20
 plotly/validators/layout/grid/_ygap.py                                               |   13
 plotly/validators/layout/grid/_yside.py                                              |   12
 plotly/validators/layout/grid/domain/__init__.py                                     |   12
 plotly/validators/layout/grid/domain/_x.py                                           |   18
 plotly/validators/layout/grid/domain/_y.py                                           |   18
 plotly/validators/layout/hoverlabel/__init__.py                                      |   25
 plotly/validators/layout/hoverlabel/_align.py                                        |   12
 plotly/validators/layout/hoverlabel/_bgcolor.py                                      |   13
 plotly/validators/layout/hoverlabel/_bordercolor.py                                  |   13
 plotly/validators/layout/hoverlabel/_font.py                                         |   37
 plotly/validators/layout/hoverlabel/_grouptitlefont.py                               |   39
 plotly/validators/layout/hoverlabel/_namelength.py                                   |   14
 plotly/validators/layout/hoverlabel/font/__init__.py                                 |   15
 plotly/validators/layout/hoverlabel/font/_color.py                                   |   13
 plotly/validators/layout/hoverlabel/font/_family.py                                  |   15
 plotly/validators/layout/hoverlabel/font/_size.py                                    |   14
 plotly/validators/layout/hoverlabel/grouptitlefont/__init__.py                       |   15
 plotly/validators/layout/hoverlabel/grouptitlefont/_color.py                         |   16
 plotly/validators/layout/hoverlabel/grouptitlefont/_family.py                        |   18
 plotly/validators/layout/hoverlabel/grouptitlefont/_size.py                          |   17
 plotly/validators/layout/image/__init__.py                                           |   43
 plotly/validators/layout/image/_layer.py                                             |   12
 plotly/validators/layout/image/_name.py                                              |   11
 plotly/validators/layout/image/_opacity.py                                           |   13
 plotly/validators/layout/image/_sizex.py                                             |   11
 plotly/validators/layout/image/_sizey.py                                             |   11
 plotly/validators/layout/image/_sizing.py                                            |   12
 plotly/validators/layout/image/_source.py                                            |   11
 plotly/validators/layout/image/_templateitemname.py                                  |   13
 plotly/validators/layout/image/_visible.py                                           |   11
 plotly/validators/layout/image/_x.py                                                 |   11
 plotly/validators/layout/image/_xanchor.py                                           |   12
 plotly/validators/layout/image/_xref.py                                              |   14
 plotly/validators/layout/image/_y.py                                                 |   11
 plotly/validators/layout/image/_yanchor.py                                           |   12
 plotly/validators/layout/image/_yref.py                                              |   14
 plotly/validators/layout/legend/__init__.py                                          |   65
 plotly/validators/layout/legend/_bgcolor.py                                          |   11
 plotly/validators/layout/legend/_bordercolor.py                                      |   13
 plotly/validators/layout/legend/_borderwidth.py                                      |   14
 plotly/validators/layout/legend/_entrywidth.py                                       |   12
 plotly/validators/layout/legend/_entrywidthmode.py                                   |   14
 plotly/validators/layout/legend/_font.py                                             |   37
 plotly/validators/layout/legend/_groupclick.py                                       |   12
 plotly/validators/layout/legend/_grouptitlefont.py                                   |   39
 plotly/validators/layout/legend/_indentation.py                                      |   14
 plotly/validators/layout/legend/_itemclick.py                                        |   12
 plotly/validators/layout/legend/_itemdoubleclick.py                                  |   14
 plotly/validators/layout/legend/_itemsizing.py                                       |   12
 plotly/validators/layout/legend/_itemwidth.py                                        |   12
 plotly/validators/layout/legend/_orientation.py                                      |   14
 plotly/validators/layout/legend/_title.py                                            |   30
 plotly/validators/layout/legend/_tracegroupgap.py                                    |   14
 plotly/validators/layout/legend/_traceorder.py                                       |   13
 plotly/validators/layout/legend/_uirevision.py                                       |   11
 plotly/validators/layout/legend/_valign.py                                           |   12
 plotly/validators/layout/legend/_visible.py                                          |   11
 plotly/validators/layout/legend/_x.py                                                |   11
 plotly/validators/layout/legend/_xanchor.py                                          |   12
 plotly/validators/layout/legend/_xref.py                                             |   12
 plotly/validators/layout/legend/_y.py                                                |   11
 plotly/validators/layout/legend/_yanchor.py                                          |   12
 plotly/validators/layout/legend/_yref.py                                             |   12
 plotly/validators/layout/legend/font/__init__.py                                     |   15
 plotly/validators/layout/legend/font/_color.py                                       |   11
 plotly/validators/layout/legend/font/_family.py                                      |   15
 plotly/validators/layout/legend/font/_size.py                                        |   12
 plotly/validators/layout/legend/grouptitlefont/__init__.py                           |   15
 plotly/validators/layout/legend/grouptitlefont/_color.py                             |   13
 plotly/validators/layout/legend/grouptitlefont/_family.py                            |   15
 plotly/validators/layout/legend/grouptitlefont/_size.py                              |   14
 plotly/validators/layout/legend/title/__init__.py                                    |   15
 plotly/validators/layout/legend/title/_font.py                                       |   37
 plotly/validators/layout/legend/title/_side.py                                       |   14
 plotly/validators/layout/legend/title/_text.py                                       |   11
 plotly/validators/layout/legend/title/font/__init__.py                               |   15
 plotly/validators/layout/legend/title/font/_color.py                                 |   13
 plotly/validators/layout/legend/title/font/_family.py                                |   15
 plotly/validators/layout/legend/title/font/_size.py                                  |   14
 plotly/validators/layout/mapbox/__init__.py                                          |   35
 plotly/validators/layout/mapbox/_accesstoken.py                                      |   15
 plotly/validators/layout/mapbox/_bearing.py                                          |   11
 plotly/validators/layout/mapbox/_bounds.py                                           |   32
 plotly/validators/layout/mapbox/_center.py                                           |   22
 plotly/validators/layout/mapbox/_domain.py                                           |   29
 plotly/validators/layout/mapbox/_layerdefaults.py                                    |   18
 plotly/validators/layout/mapbox/_layers.py                                           |  127
 plotly/validators/layout/mapbox/_pitch.py                                            |   11
 plotly/validators/layout/mapbox/_style.py                                            |   30
 plotly/validators/layout/mapbox/_uirevision.py                                       |   11
 plotly/validators/layout/mapbox/_zoom.py                                             |   11
 plotly/validators/layout/mapbox/bounds/__init__.py                                   |   21
 plotly/validators/layout/mapbox/bounds/_east.py                                      |   13
 plotly/validators/layout/mapbox/bounds/_north.py                                     |   13
 plotly/validators/layout/mapbox/bounds/_south.py                                     |   13
 plotly/validators/layout/mapbox/bounds/_west.py                                      |   13
 plotly/validators/layout/mapbox/center/__init__.py                                   |   12
 plotly/validators/layout/mapbox/center/_lat.py                                       |   11
 plotly/validators/layout/mapbox/center/_lon.py                                       |   11
 plotly/validators/layout/mapbox/domain/__init__.py                                   |   21
 plotly/validators/layout/mapbox/domain/_column.py                                    |   14
 plotly/validators/layout/mapbox/domain/_row.py                                       |   12
 plotly/validators/layout/mapbox/domain/_x.py                                         |   18
 plotly/validators/layout/mapbox/domain/_y.py                                         |   18
 plotly/validators/layout/mapbox/layer/__init__.py                                    |   49
 plotly/validators/layout/mapbox/layer/_below.py                                      |   13
 plotly/validators/layout/mapbox/layer/_circle.py                                     |   22
 plotly/validators/layout/mapbox/layer/_color.py                                      |   13
 plotly/validators/layout/mapbox/layer/_coordinates.py                                |   13
 plotly/validators/layout/mapbox/layer/_fill.py                                       |   20
 plotly/validators/layout/mapbox/layer/_line.py                                       |   27
 plotly/validators/layout/mapbox/layer/_maxzoom.py                                    |   15
 plotly/validators/layout/mapbox/layer/_minzoom.py                                    |   15
 plotly/validators/layout/mapbox/layer/_name.py                                       |   11
 plotly/validators/layout/mapbox/layer/_opacity.py                                    |   15
 plotly/validators/layout/mapbox/layer/_source.py                                     |   13
 plotly/validators/layout/mapbox/layer/_sourceattribution.py                          |   16
 plotly/validators/layout/mapbox/layer/_sourcelayer.py                                |   13
 plotly/validators/layout/mapbox/layer/_sourcetype.py                                 |   14
 plotly/validators/layout/mapbox/layer/_symbol.py                                     |   46
 plotly/validators/layout/mapbox/layer/_templateitemname.py                           |   16
 plotly/validators/layout/mapbox/layer/_type.py                                       |   12
 plotly/validators/layout/mapbox/layer/_visible.py                                    |   13
 plotly/validators/layout/mapbox/layer/circle/__init__.py                             |   11
 plotly/validators/layout/mapbox/layer/circle/_radius.py                              |   13
 plotly/validators/layout/mapbox/layer/fill/__init__.py                               |   11
 plotly/validators/layout/mapbox/layer/fill/_outlinecolor.py                          |   16
 plotly/validators/layout/mapbox/layer/line/__init__.py                               |   19
 plotly/validators/layout/mapbox/layer/line/_dash.py                                  |   13
 plotly/validators/layout/mapbox/layer/line/_dashsrc.py                               |   13
 plotly/validators/layout/mapbox/layer/line/_width.py                                 |   13
 plotly/validators/layout/mapbox/layer/symbol/__init__.py                             |   25
 plotly/validators/layout/mapbox/layer/symbol/_icon.py                                |   13
 plotly/validators/layout/mapbox/layer/symbol/_iconsize.py                            |   13
 plotly/validators/layout/mapbox/layer/symbol/_placement.py                           |   17
 plotly/validators/layout/mapbox/layer/symbol/_text.py                                |   13
 plotly/validators/layout/mapbox/layer/symbol/_textfont.py                            |   39
 plotly/validators/layout/mapbox/layer/symbol/_textposition.py                        |   31
 plotly/validators/layout/mapbox/layer/symbol/textfont/__init__.py                    |   15
 plotly/validators/layout/mapbox/layer/symbol/textfont/_color.py                      |   16
 plotly/validators/layout/mapbox/layer/symbol/textfont/_family.py                     |   18
 plotly/validators/layout/mapbox/layer/symbol/textfont/_size.py                       |   17
 plotly/validators/layout/margin/__init__.py                                          |   25
 plotly/validators/layout/margin/_autoexpand.py                                       |   11
 plotly/validators/layout/margin/_b.py                                                |   12
 plotly/validators/layout/margin/_l.py                                                |   12
 plotly/validators/layout/margin/_pad.py                                              |   12
 plotly/validators/layout/margin/_r.py                                                |   12
 plotly/validators/layout/margin/_t.py                                                |   12
 plotly/validators/layout/modebar/__init__.py                                         |   31
 plotly/validators/layout/modebar/_activecolor.py                                     |   13
 plotly/validators/layout/modebar/_add.py                                             |   12
 plotly/validators/layout/modebar/_addsrc.py                                          |   11
 plotly/validators/layout/modebar/_bgcolor.py                                         |   11
 plotly/validators/layout/modebar/_color.py                                           |   11
 plotly/validators/layout/modebar/_orientation.py                                     |   14
 plotly/validators/layout/modebar/_remove.py                                          |   12
 plotly/validators/layout/modebar/_removesrc.py                                       |   11
 plotly/validators/layout/modebar/_uirevision.py                                      |   13
 plotly/validators/layout/newselection/__init__.py                                    |   12
 plotly/validators/layout/newselection/_line.py                                       |   27
 plotly/validators/layout/newselection/_mode.py                                       |   12
 plotly/validators/layout/newselection/line/__init__.py                               |   15
 plotly/validators/layout/newselection/line/_color.py                                 |   13
 plotly/validators/layout/newselection/line/_dash.py                                  |   16
 plotly/validators/layout/newselection/line/_width.py                                 |   14
 plotly/validators/layout/newshape/__init__.py                                        |   43
 plotly/validators/layout/newshape/_drawdirection.py                                  |   16
 plotly/validators/layout/newshape/_fillcolor.py                                      |   13
 plotly/validators/layout/newshape/_fillrule.py                                       |   12
 plotly/validators/layout/newshape/_label.py                                          |   83
 plotly/validators/layout/newshape/_layer.py                                          |   12
 plotly/validators/layout/newshape/_legend.py                                         |   12
 plotly/validators/layout/newshape/_legendgroup.py                                    |   13
 plotly/validators/layout/newshape/_legendgrouptitle.py                               |   22
 plotly/validators/layout/newshape/_legendrank.py                                     |   13
 plotly/validators/layout/newshape/_legendwidth.py                                    |   14
 plotly/validators/layout/newshape/_line.py                                           |   27
 plotly/validators/layout/newshape/_name.py                                           |   11
 plotly/validators/layout/newshape/_opacity.py                                        |   13
 plotly/validators/layout/newshape/_showlegend.py                                     |   13
 plotly/validators/layout/newshape/_visible.py                                        |   12
 plotly/validators/layout/newshape/label/__init__.py                                  |   29
 plotly/validators/layout/newshape/label/_font.py                                     |   39
 plotly/validators/layout/newshape/label/_padding.py                                  |   14
 plotly/validators/layout/newshape/label/_text.py                                     |   13
 plotly/validators/layout/newshape/label/_textangle.py                                |   13
 plotly/validators/layout/newshape/label/_textposition.py                             |   30
 plotly/validators/layout/newshape/label/_texttemplate.py                             |   13
 plotly/validators/layout/newshape/label/_xanchor.py                                  |   14
 plotly/validators/layout/newshape/label/_yanchor.py                                  |   14
 plotly/validators/layout/newshape/label/font/__init__.py                             |   15
 plotly/validators/layout/newshape/label/font/_color.py                               |   13
 plotly/validators/layout/newshape/label/font/_family.py                              |   15
 plotly/validators/layout/newshape/label/font/_size.py                                |   14
 plotly/validators/layout/newshape/legendgrouptitle/__init__.py                       |   12
 plotly/validators/layout/newshape/legendgrouptitle/_font.py                          |   42
 plotly/validators/layout/newshape/legendgrouptitle/_text.py                          |   16
 plotly/validators/layout/newshape/legendgrouptitle/font/__init__.py                  |   15
 plotly/validators/layout/newshape/legendgrouptitle/font/_color.py                    |   16
 plotly/validators/layout/newshape/legendgrouptitle/font/_family.py                   |   18
 plotly/validators/layout/newshape/legendgrouptitle/font/_size.py                     |   17
 plotly/validators/layout/newshape/line/__init__.py                                   |   15
 plotly/validators/layout/newshape/line/_color.py                                     |   13
 plotly/validators/layout/newshape/line/_dash.py                                      |   16
 plotly/validators/layout/newshape/line/_width.py                                     |   14
 plotly/validators/layout/polar/__init__.py                                           |   33
 plotly/validators/layout/polar/_angularaxis.py                                       |  303
 plotly/validators/layout/polar/_bargap.py                                            |   13
 plotly/validators/layout/polar/_barmode.py                                           |   12
 plotly/validators/layout/polar/_bgcolor.py                                           |   11
 plotly/validators/layout/polar/_domain.py                                            |   29
 plotly/validators/layout/polar/_gridshape.py                                         |   12
 plotly/validators/layout/polar/_hole.py                                              |   13
 plotly/validators/layout/polar/_radialaxis.py                                        |  357
 plotly/validators/layout/polar/_sector.py                                            |   18
 plotly/validators/layout/polar/_uirevision.py                                        |   11
 plotly/validators/layout/polar/angularaxis/__init__.py                               |  111
 plotly/validators/layout/polar/angularaxis/_autotypenumbers.py                       |   17
 plotly/validators/layout/polar/angularaxis/_categoryarray.py                         |   16
 plotly/validators/layout/polar/angularaxis/_categoryarraysrc.py                      |   16
 plotly/validators/layout/polar/angularaxis/_categoryorder.py                         |   37
 plotly/validators/layout/polar/angularaxis/_color.py                                 |   13
 plotly/validators/layout/polar/angularaxis/_direction.py                             |   14
 plotly/validators/layout/polar/angularaxis/_dtick.py                                 |   14
 plotly/validators/layout/polar/angularaxis/_exponentformat.py                        |   17
 plotly/validators/layout/polar/angularaxis/_gridcolor.py                             |   13
 plotly/validators/layout/polar/angularaxis/_griddash.py                              |   16
 plotly/validators/layout/polar/angularaxis/_gridwidth.py                             |   14
 plotly/validators/layout/polar/angularaxis/_hoverformat.py                           |   16
 plotly/validators/layout/polar/angularaxis/_labelalias.py                            |   13
 plotly/validators/layout/polar/angularaxis/_layer.py                                 |   14
 plotly/validators/layout/polar/angularaxis/_linecolor.py                             |   13
 plotly/validators/layout/polar/angularaxis/_linewidth.py                             |   14
 plotly/validators/layout/polar/angularaxis/_minexponent.py                           |   17
 plotly/validators/layout/polar/angularaxis/_nticks.py                                |   14
 plotly/validators/layout/polar/angularaxis/_period.py                                |   14
 plotly/validators/layout/polar/angularaxis/_rotation.py                              |   13
 plotly/validators/layout/polar/angularaxis/_separatethousands.py                     |   16
 plotly/validators/layout/polar/angularaxis/_showexponent.py                          |   17
 plotly/validators/layout/polar/angularaxis/_showgrid.py                              |   13
 plotly/validators/layout/polar/angularaxis/_showline.py                              |   13
 plotly/validators/layout/polar/angularaxis/_showticklabels.py                        |   16
 plotly/validators/layout/polar/angularaxis/_showtickprefix.py                        |   17
 plotly/validators/layout/polar/angularaxis/_showticksuffix.py                        |   17
 plotly/validators/layout/polar/angularaxis/_thetaunit.py                             |   14
 plotly/validators/layout/polar/angularaxis/_tick0.py                                 |   14
 plotly/validators/layout/polar/angularaxis/_tickangle.py                             |   13
 plotly/validators/layout/polar/angularaxis/_tickcolor.py                             |   13
 plotly/validators/layout/polar/angularaxis/_tickfont.py                              |   39
 plotly/validators/layout/polar/angularaxis/_tickformat.py                            |   13
 plotly/validators/layout/polar/angularaxis/_tickformatstopdefaults.py                |   21
 plotly/validators/layout/polar/angularaxis/_tickformatstops.py                       |   54
 plotly/validators/layout/polar/angularaxis/_ticklabelstep.py                         |   17
 plotly/validators/layout/polar/angularaxis/_ticklen.py                               |   14
 plotly/validators/layout/polar/angularaxis/_tickmode.py                              |   15
 plotly/validators/layout/polar/angularaxis/_tickprefix.py                            |   13
 plotly/validators/layout/polar/angularaxis/_ticks.py                                 |   14
 plotly/validators/layout/polar/angularaxis/_ticksuffix.py                            |   13
 plotly/validators/layout/polar/angularaxis/_ticktext.py                              |   13
 plotly/validators/layout/polar/angularaxis/_ticktextsrc.py                           |   16
 plotly/validators/layout/polar/angularaxis/_tickvals.py                              |   13
 plotly/validators/layout/polar/angularaxis/_tickvalssrc.py                           |   16
 plotly/validators/layout/polar/angularaxis/_tickwidth.py                             |   14
 plotly/validators/layout/polar/angularaxis/_type.py                                  |   14
 plotly/validators/layout/polar/angularaxis/_uirevision.py                            |   13
 plotly/validators/layout/polar/angularaxis/_visible.py                               |   13
 plotly/validators/layout/polar/angularaxis/tickfont/__init__.py                      |   15
 plotly/validators/layout/polar/angularaxis/tickfont/_color.py                        |   16
 plotly/validators/layout/polar/angularaxis/tickfont/_family.py                       |   18
 plotly/validators/layout/polar/angularaxis/tickfont/_size.py                         |   17
 plotly/validators/layout/polar/angularaxis/tickformatstop/__init__.py                |   23
 plotly/validators/layout/polar/angularaxis/tickformatstop/_dtickrange.py             |   23
 plotly/validators/layout/polar/angularaxis/tickformatstop/_enabled.py                |   16
 plotly/validators/layout/polar/angularaxis/tickformatstop/_name.py                   |   16
 plotly/validators/layout/polar/angularaxis/tickformatstop/_templateitemname.py       |   16
 plotly/validators/layout/polar/angularaxis/tickformatstop/_value.py                  |   16
 plotly/validators/layout/polar/domain/__init__.py                                    |   21
 plotly/validators/layout/polar/domain/_column.py                                     |   14
 plotly/validators/layout/polar/domain/_row.py                                        |   12
 plotly/validators/layout/polar/domain/_x.py                                          |   18
 plotly/validators/layout/polar/domain/_y.py                                          |   18
 plotly/validators/layout/polar/radialaxis/__init__.py                                |  125
 plotly/validators/layout/polar/radialaxis/_angle.py                                  |   13
 plotly/validators/layout/polar/radialaxis/_autorange.py                              |   18
 plotly/validators/layout/polar/radialaxis/_autorangeoptions.py                       |   38
 plotly/validators/layout/polar/radialaxis/_autotickangles.py                         |   18
 plotly/validators/layout/polar/radialaxis/_autotypenumbers.py                        |   17
 plotly/validators/layout/polar/radialaxis/_calendar.py                               |   34
 plotly/validators/layout/polar/radialaxis/_categoryarray.py                          |   16
 plotly/validators/layout/polar/radialaxis/_categoryarraysrc.py                       |   16
 plotly/validators/layout/polar/radialaxis/_categoryorder.py                          |   37
 plotly/validators/layout/polar/radialaxis/_color.py                                  |   13
 plotly/validators/layout/polar/radialaxis/_dtick.py                                  |   14
 plotly/validators/layout/polar/radialaxis/_exponentformat.py                         |   17
 plotly/validators/layout/polar/radialaxis/_gridcolor.py                              |   13
 plotly/validators/layout/polar/radialaxis/_griddash.py                               |   16
 plotly/validators/layout/polar/radialaxis/_gridwidth.py                              |   14
 plotly/validators/layout/polar/radialaxis/_hoverformat.py                            |   13
 plotly/validators/layout/polar/radialaxis/_labelalias.py                             |   13
 plotly/validators/layout/polar/radialaxis/_layer.py                                  |   14
 plotly/validators/layout/polar/radialaxis/_linecolor.py                              |   13
 plotly/validators/layout/polar/radialaxis/_linewidth.py                              |   14
 plotly/validators/layout/polar/radialaxis/_maxallowed.py                             |   14
 plotly/validators/layout/polar/radialaxis/_minallowed.py                             |   14
 plotly/validators/layout/polar/radialaxis/_minexponent.py                            |   14
 plotly/validators/layout/polar/radialaxis/_nticks.py                                 |   14
 plotly/validators/layout/polar/radialaxis/_range.py                                  |   30
 plotly/validators/layout/polar/radialaxis/_rangemode.py                              |   14
 plotly/validators/layout/polar/radialaxis/_separatethousands.py                      |   16
 plotly/validators/layout/polar/radialaxis/_showexponent.py                           |   17
 plotly/validators/layout/polar/radialaxis/_showgrid.py                               |   13
 plotly/validators/layout/polar/radialaxis/_showline.py                               |   13
 plotly/validators/layout/polar/radialaxis/_showticklabels.py                         |   16
 plotly/validators/layout/polar/radialaxis/_showtickprefix.py                         |   17
 plotly/validators/layout/polar/radialaxis/_showticksuffix.py                         |   17
 plotly/validators/layout/polar/radialaxis/_side.py                                   |   14
 plotly/validators/layout/polar/radialaxis/_tick0.py                                  |   14
 plotly/validators/layout/polar/radialaxis/_tickangle.py                              |   13
 plotly/validators/layout/polar/radialaxis/_tickcolor.py                              |   13
 plotly/validators/layout/polar/radialaxis/_tickfont.py                               |   39
 plotly/validators/layout/polar/radialaxis/_tickformat.py                             |   13
 plotly/validators/layout/polar/radialaxis/_tickformatstopdefaults.py                 |   21
 plotly/validators/layout/polar/radialaxis/_tickformatstops.py                        |   54
 plotly/validators/layout/polar/radialaxis/_ticklabelstep.py                          |   17
 plotly/validators/layout/polar/radialaxis/_ticklen.py                                |   14
 plotly/validators/layout/polar/radialaxis/_tickmode.py                               |   15
 plotly/validators/layout/polar/radialaxis/_tickprefix.py                             |   13
 plotly/validators/layout/polar/radialaxis/_ticks.py                                  |   14
 plotly/validators/layout/polar/radialaxis/_ticksuffix.py                             |   13
 plotly/validators/layout/polar/radialaxis/_ticktext.py                               |   13
 plotly/validators/layout/polar/radialaxis/_ticktextsrc.py                            |   13
 plotly/validators/layout/polar/radialaxis/_tickvals.py                               |   13
 plotly/validators/layout/polar/radialaxis/_tickvalssrc.py                            |   13
 plotly/validators/layout/polar/radialaxis/_tickwidth.py                              |   14
 plotly/validators/layout/polar/radialaxis/_title.py                                  |   28
 plotly/validators/layout/polar/radialaxis/_type.py                                   |   14
 plotly/validators/layout/polar/radialaxis/_uirevision.py                             |   13
 plotly/validators/layout/polar/radialaxis/_visible.py                                |   13
 plotly/validators/layout/polar/radialaxis/autorangeoptions/__init__.py               |   25
 plotly/validators/layout/polar/radialaxis/autorangeoptions/_clipmax.py               |   17
 plotly/validators/layout/polar/radialaxis/autorangeoptions/_clipmin.py               |   17
 plotly/validators/layout/polar/radialaxis/autorangeoptions/_include.py               |   18
 plotly/validators/layout/polar/radialaxis/autorangeoptions/_includesrc.py            |   16
 plotly/validators/layout/polar/radialaxis/autorangeoptions/_maxallowed.py            |   17
 plotly/validators/layout/polar/radialaxis/autorangeoptions/_minallowed.py            |   17
 plotly/validators/layout/polar/radialaxis/tickfont/__init__.py                       |   15
 plotly/validators/layout/polar/radialaxis/tickfont/_color.py                         |   16
 plotly/validators/layout/polar/radialaxis/tickfont/_family.py                        |   18
 plotly/validators/layout/polar/radialaxis/tickfont/_size.py                          |   17
 plotly/validators/layout/polar/radialaxis/tickformatstop/__init__.py                 |   23
 plotly/validators/layout/polar/radialaxis/tickformatstop/_dtickrange.py              |   23
 plotly/validators/layout/polar/radialaxis/tickformatstop/_enabled.py                 |   16
 plotly/validators/layout/polar/radialaxis/tickformatstop/_name.py                    |   16
 plotly/validators/layout/polar/radialaxis/tickformatstop/_templateitemname.py        |   16
 plotly/validators/layout/polar/radialaxis/tickformatstop/_value.py                   |   16
 plotly/validators/layout/polar/radialaxis/title/__init__.py                          |   12
 plotly/validators/layout/polar/radialaxis/title/_font.py                             |   39
 plotly/validators/layout/polar/radialaxis/title/_text.py                             |   13
 plotly/validators/layout/polar/radialaxis/title/font/__init__.py                     |   15
 plotly/validators/layout/polar/radialaxis/title/font/_color.py                       |   16
 plotly/validators/layout/polar/radialaxis/title/font/_family.py                      |   18
 plotly/validators/layout/polar/radialaxis/title/font/_size.py                        |   17
 plotly/validators/layout/scene/__init__.py                                           |   39
 plotly/validators/layout/scene/_annotationdefaults.py                                |   18
 plotly/validators/layout/scene/_annotations.py                                       |  192
 plotly/validators/layout/scene/_aspectmode.py                                        |   13
 plotly/validators/layout/scene/_aspectratio.py                                       |   22
 plotly/validators/layout/scene/_bgcolor.py                                           |   11
 plotly/validators/layout/scene/_camera.py                                            |   36
 plotly/validators/layout/scene/_domain.py                                            |   29
 plotly/validators/layout/scene/_dragmode.py                                          |   12
 plotly/validators/layout/scene/_hovermode.py                                         |   12
 plotly/validators/layout/scene/_uirevision.py                                        |   11
 plotly/validators/layout/scene/_xaxis.py                                             |  348
 plotly/validators/layout/scene/_yaxis.py                                             |  348
 plotly/validators/layout/scene/_zaxis.py                                             |  348
 plotly/validators/layout/scene/annotation/__init__.py                                |   87
 plotly/validators/layout/scene/annotation/_align.py                                  |   14
 plotly/validators/layout/scene/annotation/_arrowcolor.py                             |   13
 plotly/validators/layout/scene/annotation/_arrowhead.py                              |   15
 plotly/validators/layout/scene/annotation/_arrowside.py                              |   15
 plotly/validators/layout/scene/annotation/_arrowsize.py                              |   14
 plotly/validators/layout/scene/annotation/_arrowwidth.py                             |   14
 plotly/validators/layout/scene/annotation/_ax.py                                     |   13
 plotly/validators/layout/scene/annotation/_ay.py                                     |   13
 plotly/validators/layout/scene/annotation/_bgcolor.py                                |   13
 plotly/validators/layout/scene/annotation/_bordercolor.py                            |   13
 plotly/validators/layout/scene/annotation/_borderpad.py                              |   14
 plotly/validators/layout/scene/annotation/_borderwidth.py                            |   14
 plotly/validators/layout/scene/annotation/_captureevents.py                          |   16
 plotly/validators/layout/scene/annotation/_font.py                                   |   39
 plotly/validators/layout/scene/annotation/_height.py                                 |   14
 plotly/validators/layout/scene/annotation/_hoverlabel.py                             |   30
 plotly/validators/layout/scene/annotation/_hovertext.py                              |   13
 plotly/validators/layout/scene/annotation/_name.py                                   |   13
 plotly/validators/layout/scene/annotation/_opacity.py                                |   15
 plotly/validators/layout/scene/annotation/_showarrow.py                              |   13
 plotly/validators/layout/scene/annotation/_standoff.py                               |   14
 plotly/validators/layout/scene/annotation/_startarrowhead.py                         |   18
 plotly/validators/layout/scene/annotation/_startarrowsize.py                         |   17
 plotly/validators/layout/scene/annotation/_startstandoff.py                          |   17
 plotly/validators/layout/scene/annotation/_templateitemname.py                       |   16
 plotly/validators/layout/scene/annotation/_text.py                                   |   13
 plotly/validators/layout/scene/annotation/_textangle.py                              |   13
 plotly/validators/layout/scene/annotation/_valign.py                                 |   14
 plotly/validators/layout/scene/annotation/_visible.py                                |   13
 plotly/validators/layout/scene/annotation/_width.py                                  |   14
 plotly/validators/layout/scene/annotation/_x.py                                      |   13
 plotly/validators/layout/scene/annotation/_xanchor.py                                |   14
 plotly/validators/layout/scene/annotation/_xshift.py                                 |   13
 plotly/validators/layout/scene/annotation/_y.py                                      |   13
 plotly/validators/layout/scene/annotation/_yanchor.py                                |   14
 plotly/validators/layout/scene/annotation/_yshift.py                                 |   13
 plotly/validators/layout/scene/annotation/_z.py                                      |   13
 plotly/validators/layout/scene/annotation/font/__init__.py                           |   15
 plotly/validators/layout/scene/annotation/font/_color.py                             |   13
 plotly/validators/layout/scene/annotation/font/_family.py                            |   15
 plotly/validators/layout/scene/annotation/font/_size.py                              |   14
 plotly/validators/layout/scene/annotation/hoverlabel/__init__.py                     |   19
 plotly/validators/layout/scene/annotation/hoverlabel/_bgcolor.py                     |   16
 plotly/validators/layout/scene/annotation/hoverlabel/_bordercolor.py                 |   16
 plotly/validators/layout/scene/annotation/hoverlabel/_font.py                        |   42
 plotly/validators/layout/scene/annotation/hoverlabel/font/__init__.py                |   15
 plotly/validators/layout/scene/annotation/hoverlabel/font/_color.py                  |   16
 plotly/validators/layout/scene/annotation/hoverlabel/font/_family.py                 |   18
 plotly/validators/layout/scene/annotation/hoverlabel/font/_size.py                   |   17
 plotly/validators/layout/scene/aspectratio/__init__.py                               |   13
 plotly/validators/layout/scene/aspectratio/_x.py                                     |   15
 plotly/validators/layout/scene/aspectratio/_y.py                                     |   15
 plotly/validators/layout/scene/aspectratio/_z.py                                     |   15
 plotly/validators/layout/scene/camera/__init__.py                                    |   21
 plotly/validators/layout/scene/camera/_center.py                                     |   24
 plotly/validators/layout/scene/camera/_eye.py                                        |   22
 plotly/validators/layout/scene/camera/_projection.py                                 |   22
 plotly/validators/layout/scene/camera/_up.py                                         |   22
 plotly/validators/layout/scene/camera/center/__init__.py                             |   13
 plotly/validators/layout/scene/camera/center/_x.py                                   |   13
 plotly/validators/layout/scene/camera/center/_y.py                                   |   13
 plotly/validators/layout/scene/camera/center/_z.py                                   |   13
 plotly/validators/layout/scene/camera/eye/__init__.py                                |   13
 plotly/validators/layout/scene/camera/eye/_x.py                                      |   13
 plotly/validators/layout/scene/camera/eye/_y.py                                      |   13
 plotly/validators/layout/scene/camera/eye/_z.py                                      |   13
 plotly/validators/layout/scene/camera/projection/__init__.py                         |   11
 plotly/validators/layout/scene/camera/projection/_type.py                            |   14
 plotly/validators/layout/scene/camera/up/__init__.py                                 |   13
 plotly/validators/layout/scene/camera/up/_x.py                                       |   11
 plotly/validators/layout/scene/camera/up/_y.py                                       |   11
 plotly/validators/layout/scene/camera/up/_z.py                                       |   11
 plotly/validators/layout/scene/domain/__init__.py                                    |   21
 plotly/validators/layout/scene/domain/_column.py                                     |   14
 plotly/validators/layout/scene/domain/_row.py                                        |   12
 plotly/validators/layout/scene/domain/_x.py                                          |   18
 plotly/validators/layout/scene/domain/_y.py                                          |   18
 plotly/validators/layout/scene/xaxis/__init__.py                                     |  133
 plotly/validators/layout/scene/xaxis/_autorange.py                                   |   18
 plotly/validators/layout/scene/xaxis/_autorangeoptions.py                            |   35
 plotly/validators/layout/scene/xaxis/_autotypenumbers.py                             |   14
 plotly/validators/layout/scene/xaxis/_backgroundcolor.py                             |   13
 plotly/validators/layout/scene/xaxis/_calendar.py                                    |   34
 plotly/validators/layout/scene/xaxis/_categoryarray.py                               |   13
 plotly/validators/layout/scene/xaxis/_categoryarraysrc.py                            |   13
 plotly/validators/layout/scene/xaxis/_categoryorder.py                               |   34
 plotly/validators/layout/scene/xaxis/_color.py                                       |   11
 plotly/validators/layout/scene/xaxis/_dtick.py                                       |   12
 plotly/validators/layout/scene/xaxis/_exponentformat.py                              |   14
 plotly/validators/layout/scene/xaxis/_gridcolor.py                                   |   13
 plotly/validators/layout/scene/xaxis/_gridwidth.py                                   |   14
 plotly/validators/layout/scene/xaxis/_hoverformat.py                                 |   13
 plotly/validators/layout/scene/xaxis/_labelalias.py                                  |   13
 plotly/validators/layout/scene/xaxis/_linecolor.py                                   |   13
 plotly/validators/layout/scene/xaxis/_linewidth.py                                   |   14
 plotly/validators/layout/scene/xaxis/_maxallowed.py                                  |   14
 plotly/validators/layout/scene/xaxis/_minallowed.py                                  |   14
 plotly/validators/layout/scene/xaxis/_minexponent.py                                 |   14
 plotly/validators/layout/scene/xaxis/_mirror.py                                      |   14
 plotly/validators/layout/scene/xaxis/_nticks.py                                      |   14
 plotly/validators/layout/scene/xaxis/_range.py                                       |   28
 plotly/validators/layout/scene/xaxis/_rangemode.py                                   |   14
 plotly/validators/layout/scene/xaxis/_separatethousands.py                           |   16
 plotly/validators/layout/scene/xaxis/_showaxeslabels.py                              |   13
 plotly/validators/layout/scene/xaxis/_showbackground.py                              |   13
 plotly/validators/layout/scene/xaxis/_showexponent.py                                |   14
 plotly/validators/layout/scene/xaxis/_showgrid.py                                    |   13
 plotly/validators/layout/scene/xaxis/_showline.py                                    |   13
 plotly/validators/layout/scene/xaxis/_showspikes.py                                  |   13
 plotly/validators/layout/scene/xaxis/_showticklabels.py                              |   13
 plotly/validators/layout/scene/xaxis/_showtickprefix.py                              |   14
 plotly/validators/layout/scene/xaxis/_showticksuffix.py                              |   14
 plotly/validators/layout/scene/xaxis/_spikecolor.py                                  |   13
 plotly/validators/layout/scene/xaxis/_spikesides.py                                  |   13
 plotly/validators/layout/scene/xaxis/_spikethickness.py                              |   14
 plotly/validators/layout/scene/xaxis/_tick0.py                                       |   12
 plotly/validators/layout/scene/xaxis/_tickangle.py                                   |   13
 plotly/validators/layout/scene/xaxis/_tickcolor.py                                   |   13
 plotly/validators/layout/scene/xaxis/_tickfont.py                                    |   39
 plotly/validators/layout/scene/xaxis/_tickformat.py                                  |   13
 plotly/validators/layout/scene/xaxis/_tickformatstopdefaults.py                      |   21
 plotly/validators/layout/scene/xaxis/_tickformatstops.py                             |   51
 plotly/validators/layout/scene/xaxis/_ticklen.py                                     |   14
 plotly/validators/layout/scene/xaxis/_tickmode.py                                    |   15
 plotly/validators/layout/scene/xaxis/_tickprefix.py                                  |   13
 plotly/validators/layout/scene/xaxis/_ticks.py                                       |   12
 plotly/validators/layout/scene/xaxis/_ticksuffix.py                                  |   13
 plotly/validators/layout/scene/xaxis/_ticktext.py                                    |   13
 plotly/validators/layout/scene/xaxis/_ticktextsrc.py                                 |   13
 plotly/validators/layout/scene/xaxis/_tickvals.py                                    |   13
 plotly/validators/layout/scene/xaxis/_tickvalssrc.py                                 |   13
 plotly/validators/layout/scene/xaxis/_tickwidth.py                                   |   14
 plotly/validators/layout/scene/xaxis/_title.py                                       |   26
 plotly/validators/layout/scene/xaxis/_type.py                                        |   12
 plotly/validators/layout/scene/xaxis/_visible.py                                     |   13
 plotly/validators/layout/scene/xaxis/_zeroline.py                                    |   13
 plotly/validators/layout/scene/xaxis/_zerolinecolor.py                               |   13
 plotly/validators/layout/scene/xaxis/_zerolinewidth.py                               |   13
 plotly/validators/layout/scene/xaxis/autorangeoptions/__init__.py                    |   25
 plotly/validators/layout/scene/xaxis/autorangeoptions/_clipmax.py                    |   17
 plotly/validators/layout/scene/xaxis/autorangeoptions/_clipmin.py                    |   17
 plotly/validators/layout/scene/xaxis/autorangeoptions/_include.py                    |   18
 plotly/validators/layout/scene/xaxis/autorangeoptions/_includesrc.py                 |   16
 plotly/validators/layout/scene/xaxis/autorangeoptions/_maxallowed.py                 |   17
 plotly/validators/layout/scene/xaxis/autorangeoptions/_minallowed.py                 |   17
 plotly/validators/layout/scene/xaxis/tickfont/__init__.py                            |   15
 plotly/validators/layout/scene/xaxis/tickfont/_color.py                              |   13
 plotly/validators/layout/scene/xaxis/tickfont/_family.py                             |   15
 plotly/validators/layout/scene/xaxis/tickfont/_size.py                               |   14
 plotly/validators/layout/scene/xaxis/tickformatstop/__init__.py                      |   23
 plotly/validators/layout/scene/xaxis/tickformatstop/_dtickrange.py                   |   23
 plotly/validators/layout/scene/xaxis/tickformatstop/_enabled.py                      |   16
 plotly/validators/layout/scene/xaxis/tickformatstop/_name.py                         |   16
 plotly/validators/layout/scene/xaxis/tickformatstop/_templateitemname.py             |   16
 plotly/validators/layout/scene/xaxis/tickformatstop/_value.py                        |   16
 plotly/validators/layout/scene/xaxis/title/__init__.py                               |   12
 plotly/validators/layout/scene/xaxis/title/_font.py                                  |   39
 plotly/validators/layout/scene/xaxis/title/_text.py                                  |   13
 plotly/validators/layout/scene/xaxis/title/font/__init__.py                          |   15
 plotly/validators/layout/scene/xaxis/title/font/_color.py                            |   13
 plotly/validators/layout/scene/xaxis/title/font/_family.py                           |   18
 plotly/validators/layout/scene/xaxis/title/font/_size.py                             |   14
 plotly/validators/layout/scene/yaxis/__init__.py                                     |  133
 plotly/validators/layout/scene/yaxis/_autorange.py                                   |   18
 plotly/validators/layout/scene/yaxis/_autorangeoptions.py                            |   35
 plotly/validators/layout/scene/yaxis/_autotypenumbers.py                             |   14
 plotly/validators/layout/scene/yaxis/_backgroundcolor.py                             |   13
 plotly/validators/layout/scene/yaxis/_calendar.py                                    |   34
 plotly/validators/layout/scene/yaxis/_categoryarray.py                               |   13
 plotly/validators/layout/scene/yaxis/_categoryarraysrc.py                            |   13
 plotly/validators/layout/scene/yaxis/_categoryorder.py                               |   34
 plotly/validators/layout/scene/yaxis/_color.py                                       |   11
 plotly/validators/layout/scene/yaxis/_dtick.py                                       |   12
 plotly/validators/layout/scene/yaxis/_exponentformat.py                              |   14
 plotly/validators/layout/scene/yaxis/_gridcolor.py                                   |   13
 plotly/validators/layout/scene/yaxis/_gridwidth.py                                   |   14
 plotly/validators/layout/scene/yaxis/_hoverformat.py                                 |   13
 plotly/validators/layout/scene/yaxis/_labelalias.py                                  |   13
 plotly/validators/layout/scene/yaxis/_linecolor.py                                   |   13
 plotly/validators/layout/scene/yaxis/_linewidth.py                                   |   14
 plotly/validators/layout/scene/yaxis/_maxallowed.py                                  |   14
 plotly/validators/layout/scene/yaxis/_minallowed.py                                  |   14
 plotly/validators/layout/scene/yaxis/_minexponent.py                                 |   14
 plotly/validators/layout/scene/yaxis/_mirror.py                                      |   14
 plotly/validators/layout/scene/yaxis/_nticks.py                                      |   14
 plotly/validators/layout/scene/yaxis/_range.py                                       |   28
 plotly/validators/layout/scene/yaxis/_rangemode.py                                   |   14
 plotly/validators/layout/scene/yaxis/_separatethousands.py                           |   16
 plotly/validators/layout/scene/yaxis/_showaxeslabels.py                              |   13
 plotly/validators/layout/scene/yaxis/_showbackground.py                              |   13
 plotly/validators/layout/scene/yaxis/_showexponent.py                                |   14
 plotly/validators/layout/scene/yaxis/_showgrid.py                                    |   13
 plotly/validators/layout/scene/yaxis/_showline.py                                    |   13
 plotly/validators/layout/scene/yaxis/_showspikes.py                                  |   13
 plotly/validators/layout/scene/yaxis/_showticklabels.py                              |   13
 plotly/validators/layout/scene/yaxis/_showtickprefix.py                              |   14
 plotly/validators/layout/scene/yaxis/_showticksuffix.py                              |   14
 plotly/validators/layout/scene/yaxis/_spikecolor.py                                  |   13
 plotly/validators/layout/scene/yaxis/_spikesides.py                                  |   13
 plotly/validators/layout/scene/yaxis/_spikethickness.py                              |   14
 plotly/validators/layout/scene/yaxis/_tick0.py                                       |   12
 plotly/validators/layout/scene/yaxis/_tickangle.py                                   |   13
 plotly/validators/layout/scene/yaxis/_tickcolor.py                                   |   13
 plotly/validators/layout/scene/yaxis/_tickfont.py                                    |   39
 plotly/validators/layout/scene/yaxis/_tickformat.py                                  |   13
 plotly/validators/layout/scene/yaxis/_tickformatstopdefaults.py                      |   21
 plotly/validators/layout/scene/yaxis/_tickformatstops.py                             |   51
 plotly/validators/layout/scene/yaxis/_ticklen.py                                     |   14
 plotly/validators/layout/scene/yaxis/_tickmode.py                                    |   15
 plotly/validators/layout/scene/yaxis/_tickprefix.py                                  |   13
 plotly/validators/layout/scene/yaxis/_ticks.py                                       |   12
 plotly/validators/layout/scene/yaxis/_ticksuffix.py                                  |   13
 plotly/validators/layout/scene/yaxis/_ticktext.py                                    |   13
 plotly/validators/layout/scene/yaxis/_ticktextsrc.py                                 |   13
 plotly/validators/layout/scene/yaxis/_tickvals.py                                    |   13
 plotly/validators/layout/scene/yaxis/_tickvalssrc.py                                 |   13
 plotly/validators/layout/scene/yaxis/_tickwidth.py                                   |   14
 plotly/validators/layout/scene/yaxis/_title.py                                       |   26
 plotly/validators/layout/scene/yaxis/_type.py                                        |   12
 plotly/validators/layout/scene/yaxis/_visible.py                                     |   13
 plotly/validators/layout/scene/yaxis/_zeroline.py                                    |   13
 plotly/validators/layout/scene/yaxis/_zerolinecolor.py                               |   13
 plotly/validators/layout/scene/yaxis/_zerolinewidth.py                               |   13
 plotly/validators/layout/scene/yaxis/autorangeoptions/__init__.py                    |   25
 plotly/validators/layout/scene/yaxis/autorangeoptions/_clipmax.py                    |   17
 plotly/validators/layout/scene/yaxis/autorangeoptions/_clipmin.py                    |   17
 plotly/validators/layout/scene/yaxis/autorangeoptions/_include.py                    |   18
 plotly/validators/layout/scene/yaxis/autorangeoptions/_includesrc.py                 |   16
 plotly/validators/layout/scene/yaxis/autorangeoptions/_maxallowed.py                 |   17
 plotly/validators/layout/scene/yaxis/autorangeoptions/_minallowed.py                 |   17
 plotly/validators/layout/scene/yaxis/tickfont/__init__.py                            |   15
 plotly/validators/layout/scene/yaxis/tickfont/_color.py                              |   13
 plotly/validators/layout/scene/yaxis/tickfont/_family.py                             |   15
 plotly/validators/layout/scene/yaxis/tickfont/_size.py                               |   14
 plotly/validators/layout/scene/yaxis/tickformatstop/__init__.py                      |   23
 plotly/validators/layout/scene/yaxis/tickformatstop/_dtickrange.py                   |   23
 plotly/validators/layout/scene/yaxis/tickformatstop/_enabled.py                      |   16
 plotly/validators/layout/scene/yaxis/tickformatstop/_name.py                         |   16
 plotly/validators/layout/scene/yaxis/tickformatstop/_templateitemname.py             |   16
 plotly/validators/layout/scene/yaxis/tickformatstop/_value.py                        |   16
 plotly/validators/layout/scene/yaxis/title/__init__.py                               |   12
 plotly/validators/layout/scene/yaxis/title/_font.py                                  |   39
 plotly/validators/layout/scene/yaxis/title/_text.py                                  |   13
 plotly/validators/layout/scene/yaxis/title/font/__init__.py                          |   15
 plotly/validators/layout/scene/yaxis/title/font/_color.py                            |   13
 plotly/validators/layout/scene/yaxis/title/font/_family.py                           |   18
 plotly/validators/layout/scene/yaxis/title/font/_size.py                             |   14
 plotly/validators/layout/scene/zaxis/__init__.py                                     |  133
 plotly/validators/layout/scene/zaxis/_autorange.py                                   |   18
 plotly/validators/layout/scene/zaxis/_autorangeoptions.py                            |   35
 plotly/validators/layout/scene/zaxis/_autotypenumbers.py                             |   14
 plotly/validators/layout/scene/zaxis/_backgroundcolor.py                             |   13
 plotly/validators/layout/scene/zaxis/_calendar.py                                    |   34
 plotly/validators/layout/scene/zaxis/_categoryarray.py                               |   13
 plotly/validators/layout/scene/zaxis/_categoryarraysrc.py                            |   13
 plotly/validators/layout/scene/zaxis/_categoryorder.py                               |   34
 plotly/validators/layout/scene/zaxis/_color.py                                       |   11
 plotly/validators/layout/scene/zaxis/_dtick.py                                       |   12
 plotly/validators/layout/scene/zaxis/_exponentformat.py                              |   14
 plotly/validators/layout/scene/zaxis/_gridcolor.py                                   |   13
 plotly/validators/layout/scene/zaxis/_gridwidth.py                                   |   14
 plotly/validators/layout/scene/zaxis/_hoverformat.py                                 |   13
 plotly/validators/layout/scene/zaxis/_labelalias.py                                  |   13
 plotly/validators/layout/scene/zaxis/_linecolor.py                                   |   13
 plotly/validators/layout/scene/zaxis/_linewidth.py                                   |   14
 plotly/validators/layout/scene/zaxis/_maxallowed.py                                  |   14
 plotly/validators/layout/scene/zaxis/_minallowed.py                                  |   14
 plotly/validators/layout/scene/zaxis/_minexponent.py                                 |   14
 plotly/validators/layout/scene/zaxis/_mirror.py                                      |   14
 plotly/validators/layout/scene/zaxis/_nticks.py                                      |   14
 plotly/validators/layout/scene/zaxis/_range.py                                       |   28
 plotly/validators/layout/scene/zaxis/_rangemode.py                                   |   14
 plotly/validators/layout/scene/zaxis/_separatethousands.py                           |   16
 plotly/validators/layout/scene/zaxis/_showaxeslabels.py                              |   13
 plotly/validators/layout/scene/zaxis/_showbackground.py                              |   13
 plotly/validators/layout/scene/zaxis/_showexponent.py                                |   14
 plotly/validators/layout/scene/zaxis/_showgrid.py                                    |   13
 plotly/validators/layout/scene/zaxis/_showline.py                                    |   13
 plotly/validators/layout/scene/zaxis/_showspikes.py                                  |   13
 plotly/validators/layout/scene/zaxis/_showticklabels.py                              |   13
 plotly/validators/layout/scene/zaxis/_showtickprefix.py                              |   14
 plotly/validators/layout/scene/zaxis/_showticksuffix.py                              |   14
 plotly/validators/layout/scene/zaxis/_spikecolor.py                                  |   13
 plotly/validators/layout/scene/zaxis/_spikesides.py                                  |   13
 plotly/validators/layout/scene/zaxis/_spikethickness.py                              |   14
 plotly/validators/layout/scene/zaxis/_tick0.py                                       |   12
 plotly/validators/layout/scene/zaxis/_tickangle.py                                   |   13
 plotly/validators/layout/scene/zaxis/_tickcolor.py                                   |   13
 plotly/validators/layout/scene/zaxis/_tickfont.py                                    |   39
 plotly/validators/layout/scene/zaxis/_tickformat.py                                  |   13
 plotly/validators/layout/scene/zaxis/_tickformatstopdefaults.py                      |   21
 plotly/validators/layout/scene/zaxis/_tickformatstops.py                             |   51
 plotly/validators/layout/scene/zaxis/_ticklen.py                                     |   14
 plotly/validators/layout/scene/zaxis/_tickmode.py                                    |   15
 plotly/validators/layout/scene/zaxis/_tickprefix.py                                  |   13
 plotly/validators/layout/scene/zaxis/_ticks.py                                       |   12
 plotly/validators/layout/scene/zaxis/_ticksuffix.py                                  |   13
 plotly/validators/layout/scene/zaxis/_ticktext.py                                    |   13
 plotly/validators/layout/scene/zaxis/_ticktextsrc.py                                 |   13
 plotly/validators/layout/scene/zaxis/_tickvals.py                                    |   13
 plotly/validators/layout/scene/zaxis/_tickvalssrc.py                                 |   13
 plotly/validators/layout/scene/zaxis/_tickwidth.py                                   |   14
 plotly/validators/layout/scene/zaxis/_title.py                                       |   26
 plotly/validators/layout/scene/zaxis/_type.py                                        |   12
 plotly/validators/layout/scene/zaxis/_visible.py                                     |   13
 plotly/validators/layout/scene/zaxis/_zeroline.py                                    |   13
 plotly/validators/layout/scene/zaxis/_zerolinecolor.py                               |   13
 plotly/validators/layout/scene/zaxis/_zerolinewidth.py                               |   13
 plotly/validators/layout/scene/zaxis/autorangeoptions/__init__.py                    |   25
 plotly/validators/layout/scene/zaxis/autorangeoptions/_clipmax.py                    |   17
 plotly/validators/layout/scene/zaxis/autorangeoptions/_clipmin.py                    |   17
 plotly/validators/layout/scene/zaxis/autorangeoptions/_include.py                    |   18
 plotly/validators/layout/scene/zaxis/autorangeoptions/_includesrc.py                 |   16
 plotly/validators/layout/scene/zaxis/autorangeoptions/_maxallowed.py                 |   17
 plotly/validators/layout/scene/zaxis/autorangeoptions/_minallowed.py                 |   17
 plotly/validators/layout/scene/zaxis/tickfont/__init__.py                            |   15
 plotly/validators/layout/scene/zaxis/tickfont/_color.py                              |   13
 plotly/validators/layout/scene/zaxis/tickfont/_family.py                             |   15
 plotly/validators/layout/scene/zaxis/tickfont/_size.py                               |   14
 plotly/validators/layout/scene/zaxis/tickformatstop/__init__.py                      |   23
 plotly/validators/layout/scene/zaxis/tickformatstop/_dtickrange.py                   |   23
 plotly/validators/layout/scene/zaxis/tickformatstop/_enabled.py                      |   16
 plotly/validators/layout/scene/zaxis/tickformatstop/_name.py                         |   16
 plotly/validators/layout/scene/zaxis/tickformatstop/_templateitemname.py             |   16
 plotly/validators/layout/scene/zaxis/tickformatstop/_value.py                        |   16
 plotly/validators/layout/scene/zaxis/title/__init__.py                               |   12
 plotly/validators/layout/scene/zaxis/title/_font.py                                  |   39
 plotly/validators/layout/scene/zaxis/title/_text.py                                  |   13
 plotly/validators/layout/scene/zaxis/title/font/__init__.py                          |   15
 plotly/validators/layout/scene/zaxis/title/font/_color.py                            |   13
 plotly/validators/layout/scene/zaxis/title/font/_family.py                           |   18
 plotly/validators/layout/scene/zaxis/title/font/_size.py                             |   14
 plotly/validators/layout/selection/__init__.py                                       |   37
 plotly/validators/layout/selection/_line.py                                          |   25
 plotly/validators/layout/selection/_name.py                                          |   11
 plotly/validators/layout/selection/_opacity.py                                       |   13
 plotly/validators/layout/selection/_path.py                                          |   11
 plotly/validators/layout/selection/_templateitemname.py                              |   13
 plotly/validators/layout/selection/_type.py                                          |   12
 plotly/validators/layout/selection/_x0.py                                            |   11
 plotly/validators/layout/selection/_x1.py                                            |   11
 plotly/validators/layout/selection/_xref.py                                          |   14
 plotly/validators/layout/selection/_y0.py                                            |   11
 plotly/validators/layout/selection/_y1.py                                            |   11
 plotly/validators/layout/selection/_yref.py                                          |   14
 plotly/validators/layout/selection/line/__init__.py                                  |   15
 plotly/validators/layout/selection/line/_color.py                                    |   14
 plotly/validators/layout/selection/line/_dash.py                                     |   16
 plotly/validators/layout/selection/line/_width.py                                    |   15
 plotly/validators/layout/shape/__init__.py                                           |   69
 plotly/validators/layout/shape/_editable.py                                          |   11
 plotly/validators/layout/shape/_fillcolor.py                                         |   11
 plotly/validators/layout/shape/_fillrule.py                                          |   12
 plotly/validators/layout/shape/_label.py                                             |   82
 plotly/validators/layout/shape/_layer.py                                             |   12
 plotly/validators/layout/shape/_legend.py                                            |   12
 plotly/validators/layout/shape/_legendgroup.py                                       |   11
 plotly/validators/layout/shape/_legendgrouptitle.py                                  |   22
 plotly/validators/layout/shape/_legendrank.py                                        |   11
 plotly/validators/layout/shape/_legendwidth.py                                       |   12
 plotly/validators/layout/shape/_line.py                                              |   25
 plotly/validators/layout/shape/_name.py                                              |   11
 plotly/validators/layout/shape/_opacity.py                                           |   13
 plotly/validators/layout/shape/_path.py                                              |   11
 plotly/validators/layout/shape/_showlegend.py                                        |   11
 plotly/validators/layout/shape/_templateitemname.py                                  |   13
 plotly/validators/layout/shape/_type.py                                              |   12
 plotly/validators/layout/shape/_visible.py                                           |   12
 plotly/validators/layout/shape/_x0.py                                                |   11
 plotly/validators/layout/shape/_x1.py                                                |   11
 plotly/validators/layout/shape/_xanchor.py                                           |   11
 plotly/validators/layout/shape/_xref.py                                              |   14
 plotly/validators/layout/shape/_xsizemode.py                                         |   12
 plotly/validators/layout/shape/_y0.py                                                |   11
 plotly/validators/layout/shape/_y1.py                                                |   11
 plotly/validators/layout/shape/_yanchor.py                                           |   11
 plotly/validators/layout/shape/_yref.py                                              |   14
 plotly/validators/layout/shape/_ysizemode.py                                         |   12
 plotly/validators/layout/shape/label/__init__.py                                     |   29
 plotly/validators/layout/shape/label/_font.py                                        |   37
 plotly/validators/layout/shape/label/_padding.py                                     |   14
 plotly/validators/layout/shape/label/_text.py                                        |   11
 plotly/validators/layout/shape/label/_textangle.py                                   |   13
 plotly/validators/layout/shape/label/_textposition.py                                |   30
 plotly/validators/layout/shape/label/_texttemplate.py                                |   13
 plotly/validators/layout/shape/label/_xanchor.py                                     |   14
 plotly/validators/layout/shape/label/_yanchor.py                                     |   14
 plotly/validators/layout/shape/label/font/__init__.py                                |   15
 plotly/validators/layout/shape/label/font/_color.py                                  |   13
 plotly/validators/layout/shape/label/font/_family.py                                 |   15
 plotly/validators/layout/shape/label/font/_size.py                                   |   14
 plotly/validators/layout/shape/legendgrouptitle/__init__.py                          |   12
 plotly/validators/layout/shape/legendgrouptitle/_font.py                             |   39
 plotly/validators/layout/shape/legendgrouptitle/_text.py                             |   13
 plotly/validators/layout/shape/legendgrouptitle/font/__init__.py                     |   15
 plotly/validators/layout/shape/legendgrouptitle/font/_color.py                       |   16
 plotly/validators/layout/shape/legendgrouptitle/font/_family.py                      |   18
 plotly/validators/layout/shape/legendgrouptitle/font/_size.py                        |   17
 plotly/validators/layout/shape/line/__init__.py                                      |   15
 plotly/validators/layout/shape/line/_color.py                                        |   12
 plotly/validators/layout/shape/line/_dash.py                                         |   14
 plotly/validators/layout/shape/line/_width.py                                        |   13
 plotly/validators/layout/slider/__init__.py                                          |   61
 plotly/validators/layout/slider/_active.py                                           |   12
 plotly/validators/layout/slider/_activebgcolor.py                                    |   13
 plotly/validators/layout/slider/_bgcolor.py                                          |   11
 plotly/validators/layout/slider/_bordercolor.py                                      |   13
 plotly/validators/layout/slider/_borderwidth.py                                      |   14
 plotly/validators/layout/slider/_currentvalue.py                                     |   35
 plotly/validators/layout/slider/_font.py                                             |   37
 plotly/validators/layout/slider/_len.py                                              |   12
 plotly/validators/layout/slider/_lenmode.py                                          |   12
 plotly/validators/layout/slider/_minorticklen.py                                     |   14
 plotly/validators/layout/slider/_name.py                                             |   11
 plotly/validators/layout/slider/_pad.py                                              |   28
 plotly/validators/layout/slider/_stepdefaults.py                                     |   18
 plotly/validators/layout/slider/_steps.py                                            |   67
 plotly/validators/layout/slider/_templateitemname.py                                 |   13
 plotly/validators/layout/slider/_tickcolor.py                                        |   11
 plotly/validators/layout/slider/_ticklen.py                                          |   12
 plotly/validators/layout/slider/_tickwidth.py                                        |   12
 plotly/validators/layout/slider/_transition.py                                       |   21
 plotly/validators/layout/slider/_visible.py                                          |   11
 plotly/validators/layout/slider/_x.py                                                |   13
 plotly/validators/layout/slider/_xanchor.py                                          |   12
 plotly/validators/layout/slider/_y.py                                                |   13
 plotly/validators/layout/slider/_yanchor.py                                          |   12
 plotly/validators/layout/slider/currentvalue/__init__.py                             |   25
 plotly/validators/layout/slider/currentvalue/_font.py                                |   39
 plotly/validators/layout/slider/currentvalue/_offset.py                              |   13
 plotly/validators/layout/slider/currentvalue/_prefix.py                              |   13
 plotly/validators/layout/slider/currentvalue/_suffix.py                              |   13
 plotly/validators/layout/slider/currentvalue/_visible.py                             |   13
 plotly/validators/layout/slider/currentvalue/_xanchor.py                             |   14
 plotly/validators/layout/slider/currentvalue/font/__init__.py                        |   15
 plotly/validators/layout/slider/currentvalue/font/_color.py                          |   16
 plotly/validators/layout/slider/currentvalue/font/_family.py                         |   18
 plotly/validators/layout/slider/currentvalue/font/_size.py                           |   17
 plotly/validators/layout/slider/font/__init__.py                                     |   15
 plotly/validators/layout/slider/font/_color.py                                       |   11
 plotly/validators/layout/slider/font/_family.py                                      |   15
 plotly/validators/layout/slider/font/_size.py                                        |   12
 plotly/validators/layout/slider/pad/__init__.py                                      |   16
 plotly/validators/layout/slider/pad/_b.py                                            |   11
 plotly/validators/layout/slider/pad/_l.py                                            |   11
 plotly/validators/layout/slider/pad/_r.py                                            |   11
 plotly/validators/layout/slider/pad/_t.py                                            |   11
 plotly/validators/layout/slider/step/__init__.py                                     |   29
 plotly/validators/layout/slider/step/_args.py                                        |   20
 plotly/validators/layout/slider/step/_execute.py                                     |   13
 plotly/validators/layout/slider/step/_label.py                                       |   11
 plotly/validators/layout/slider/step/_method.py                                      |   16
 plotly/validators/layout/slider/step/_name.py                                        |   11
 plotly/validators/layout/slider/step/_templateitemname.py                            |   13
 plotly/validators/layout/slider/step/_value.py                                       |   11
 plotly/validators/layout/slider/step/_visible.py                                     |   13
 plotly/validators/layout/slider/transition/__init__.py                               |   12
 plotly/validators/layout/slider/transition/_duration.py                              |   14
 plotly/validators/layout/slider/transition/_easing.py                                |   54
 plotly/validators/layout/smith/__init__.py                                           |   21
 plotly/validators/layout/smith/_bgcolor.py                                           |   11
 plotly/validators/layout/smith/_domain.py                                            |   29
 plotly/validators/layout/smith/_imaginaryaxis.py                                     |  134
 plotly/validators/layout/smith/_realaxis.py                                          |  138
 plotly/validators/layout/smith/domain/__init__.py                                    |   21
 plotly/validators/layout/smith/domain/_column.py                                     |   14
 plotly/validators/layout/smith/domain/_row.py                                        |   12
 plotly/validators/layout/smith/domain/_x.py                                          |   18
 plotly/validators/layout/smith/domain/_y.py                                          |   18
 plotly/validators/layout/smith/imaginaryaxis/__init__.py                             |   63
 plotly/validators/layout/smith/imaginaryaxis/_color.py                               |   13
 plotly/validators/layout/smith/imaginaryaxis/_gridcolor.py                           |   16
 plotly/validators/layout/smith/imaginaryaxis/_griddash.py                            |   16
 plotly/validators/layout/smith/imaginaryaxis/_gridwidth.py                           |   17
 plotly/validators/layout/smith/imaginaryaxis/_hoverformat.py                         |   16
 plotly/validators/layout/smith/imaginaryaxis/_labelalias.py                          |   16
 plotly/validators/layout/smith/imaginaryaxis/_layer.py                               |   14
 plotly/validators/layout/smith/imaginaryaxis/_linecolor.py                           |   16
 plotly/validators/layout/smith/imaginaryaxis/_linewidth.py                           |   17
 plotly/validators/layout/smith/imaginaryaxis/_showgrid.py                            |   13
 plotly/validators/layout/smith/imaginaryaxis/_showline.py                            |   13
 plotly/validators/layout/smith/imaginaryaxis/_showticklabels.py                      |   16
 plotly/validators/layout/smith/imaginaryaxis/_showtickprefix.py                      |   17
 plotly/validators/layout/smith/imaginaryaxis/_showticksuffix.py                      |   17
 plotly/validators/layout/smith/imaginaryaxis/_tickcolor.py                           |   16
 plotly/validators/layout/smith/imaginaryaxis/_tickfont.py                            |   39
 plotly/validators/layout/smith/imaginaryaxis/_tickformat.py                          |   16
 plotly/validators/layout/smith/imaginaryaxis/_ticklen.py                             |   14
 plotly/validators/layout/smith/imaginaryaxis/_tickprefix.py                          |   16
 plotly/validators/layout/smith/imaginaryaxis/_ticks.py                               |   14
 plotly/validators/layout/smith/imaginaryaxis/_ticksuffix.py                          |   16
 plotly/validators/layout/smith/imaginaryaxis/_tickvals.py                            |   13
 plotly/validators/layout/smith/imaginaryaxis/_tickvalssrc.py                         |   16
 plotly/validators/layout/smith/imaginaryaxis/_tickwidth.py                           |   17
 plotly/validators/layout/smith/imaginaryaxis/_visible.py                             |   13
 plotly/validators/layout/smith/imaginaryaxis/tickfont/__init__.py                    |   15
 plotly/validators/layout/smith/imaginaryaxis/tickfont/_color.py                      |   16
 plotly/validators/layout/smith/imaginaryaxis/tickfont/_family.py                     |   18
 plotly/validators/layout/smith/imaginaryaxis/tickfont/_size.py                       |   17
 plotly/validators/layout/smith/realaxis/__init__.py                                  |   67
 plotly/validators/layout/smith/realaxis/_color.py                                    |   13
 plotly/validators/layout/smith/realaxis/_gridcolor.py                                |   13
 plotly/validators/layout/smith/realaxis/_griddash.py                                 |   16
 plotly/validators/layout/smith/realaxis/_gridwidth.py                                |   14
 plotly/validators/layout/smith/realaxis/_hoverformat.py                              |   13
 plotly/validators/layout/smith/realaxis/_labelalias.py                               |   13
 plotly/validators/layout/smith/realaxis/_layer.py                                    |   14
 plotly/validators/layout/smith/realaxis/_linecolor.py                                |   13
 plotly/validators/layout/smith/realaxis/_linewidth.py                                |   14
 plotly/validators/layout/smith/realaxis/_showgrid.py                                 |   13
 plotly/validators/layout/smith/realaxis/_showline.py                                 |   13
 plotly/validators/layout/smith/realaxis/_showticklabels.py                           |   16
 plotly/validators/layout/smith/realaxis/_showtickprefix.py                           |   17
 plotly/validators/layout/smith/realaxis/_showticksuffix.py                           |   17
 plotly/validators/layout/smith/realaxis/_side.py                                     |   14
 plotly/validators/layout/smith/realaxis/_tickangle.py                                |   13
 plotly/validators/layout/smith/realaxis/_tickcolor.py                                |   13
 plotly/validators/layout/smith/realaxis/_tickfont.py                                 |   39
 plotly/validators/layout/smith/realaxis/_tickformat.py                               |   13
 plotly/validators/layout/smith/realaxis/_ticklen.py                                  |   14
 plotly/validators/layout/smith/realaxis/_tickprefix.py                               |   13
 plotly/validators/layout/smith/realaxis/_ticks.py                                    |   14
 plotly/validators/layout/smith/realaxis/_ticksuffix.py                               |   13
 plotly/validators/layout/smith/realaxis/_tickvals.py                                 |   13
 plotly/validators/layout/smith/realaxis/_tickvalssrc.py                              |   13
 plotly/validators/layout/smith/realaxis/_tickwidth.py                                |   14
 plotly/validators/layout/smith/realaxis/_visible.py                                  |   13
 plotly/validators/layout/smith/realaxis/tickfont/__init__.py                         |   15
 plotly/validators/layout/smith/realaxis/tickfont/_color.py                           |   16
 plotly/validators/layout/smith/realaxis/tickfont/_family.py                          |   18
 plotly/validators/layout/smith/realaxis/tickfont/_size.py                            |   14
 plotly/validators/layout/template/__init__.py                                        |   12
 plotly/validators/layout/template/_data.py                                           |  193
 plotly/validators/layout/template/_layout.py                                         |   16
 plotly/validators/layout/template/data/__init__.py                                   |  109
 plotly/validators/layout/template/data/_bar.py                                       |   16
 plotly/validators/layout/template/data/_barpolar.py                                  |   18
 plotly/validators/layout/template/data/_box.py                                       |   16
 plotly/validators/layout/template/data/_candlestick.py                               |   18
 plotly/validators/layout/template/data/_carpet.py                                    |   18
 plotly/validators/layout/template/data/_choropleth.py                                |   18
 plotly/validators/layout/template/data/_choroplethmapbox.py                          |   21
 plotly/validators/layout/template/data/_cone.py                                      |   18
 plotly/validators/layout/template/data/_contour.py                                   |   18
 plotly/validators/layout/template/data/_contourcarpet.py                             |   18
 plotly/validators/layout/template/data/_densitymapbox.py                             |   18
 plotly/validators/layout/template/data/_funnel.py                                    |   18
 plotly/validators/layout/template/data/_funnelarea.py                                |   18
 plotly/validators/layout/template/data/_heatmap.py                                   |   18
 plotly/validators/layout/template/data/_heatmapgl.py                                 |   18
 plotly/validators/layout/template/data/_histogram.py                                 |   18
 plotly/validators/layout/template/data/_histogram2d.py                               |   18
 plotly/validators/layout/template/data/_histogram2dcontour.py                        |   21
 plotly/validators/layout/template/data/_icicle.py                                    |   18
 plotly/validators/layout/template/data/_image.py                                     |   18
 plotly/validators/layout/template/data/_indicator.py                                 |   18
 plotly/validators/layout/template/data/_isosurface.py                                |   18
 plotly/validators/layout/template/data/_mesh3d.py                                    |   18
 plotly/validators/layout/template/data/_ohlc.py                                      |   18
 plotly/validators/layout/template/data/_parcats.py                                   |   18
 plotly/validators/layout/template/data/_parcoords.py                                 |   18
 plotly/validators/layout/template/data/_pie.py                                       |   16
 plotly/validators/layout/template/data/_pointcloud.py                                |   18
 plotly/validators/layout/template/data/_sankey.py                                    |   18
 plotly/validators/layout/template/data/_scatter.py                                   |   18
 plotly/validators/layout/template/data/_scatter3d.py                                 |   18
 plotly/validators/layout/template/data/_scattercarpet.py                             |   18
 plotly/validators/layout/template/data/_scattergeo.py                                |   18
 plotly/validators/layout/template/data/_scattergl.py                                 |   18
 plotly/validators/layout/template/data/_scattermapbox.py                             |   18
 plotly/validators/layout/template/data/_scatterpolar.py                              |   18
 plotly/validators/layout/template/data/_scatterpolargl.py                            |   18
 plotly/validators/layout/template/data/_scattersmith.py                              |   18
 plotly/validators/layout/template/data/_scatterternary.py                            |   18
 plotly/validators/layout/template/data/_splom.py                                     |   18
 plotly/validators/layout/template/data/_streamtube.py                                |   18
 plotly/validators/layout/template/data/_sunburst.py                                  |   18
 plotly/validators/layout/template/data/_surface.py                                   |   18
 plotly/validators/layout/template/data/_table.py                                     |   18
 plotly/validators/layout/template/data/_treemap.py                                   |   18
 plotly/validators/layout/template/data/_violin.py                                    |   18
 plotly/validators/layout/template/data/_volume.py                                    |   18
 plotly/validators/layout/template/data/_waterfall.py                                 |   18
 plotly/validators/layout/ternary/__init__.py                                         |   27
 plotly/validators/layout/ternary/_aaxis.py                                           |  254
 plotly/validators/layout/ternary/_baxis.py                                           |  254
 plotly/validators/layout/ternary/_bgcolor.py                                         |   11
 plotly/validators/layout/ternary/_caxis.py                                           |  254
 plotly/validators/layout/ternary/_domain.py                                          |   29
 plotly/validators/layout/ternary/_sum.py                                             |   12
 plotly/validators/layout/ternary/_uirevision.py                                      |   13
 plotly/validators/layout/ternary/aaxis/__init__.py                                   |   95
 plotly/validators/layout/ternary/aaxis/_color.py                                     |   13
 plotly/validators/layout/ternary/aaxis/_dtick.py                                     |   14
 plotly/validators/layout/ternary/aaxis/_exponentformat.py                            |   14
 plotly/validators/layout/ternary/aaxis/_gridcolor.py                                 |   13
 plotly/validators/layout/ternary/aaxis/_griddash.py                                  |   16
 plotly/validators/layout/ternary/aaxis/_gridwidth.py                                 |   14
 plotly/validators/layout/ternary/aaxis/_hoverformat.py                               |   13
 plotly/validators/layout/ternary/aaxis/_labelalias.py                                |   13
 plotly/validators/layout/ternary/aaxis/_layer.py                                     |   14
 plotly/validators/layout/ternary/aaxis/_linecolor.py                                 |   13
 plotly/validators/layout/ternary/aaxis/_linewidth.py                                 |   14
 plotly/validators/layout/ternary/aaxis/_min.py                                       |   12
 plotly/validators/layout/ternary/aaxis/_minexponent.py                               |   14
 plotly/validators/layout/ternary/aaxis/_nticks.py                                    |   14
 plotly/validators/layout/ternary/aaxis/_separatethousands.py                         |   16
 plotly/validators/layout/ternary/aaxis/_showexponent.py                              |   14
 plotly/validators/layout/ternary/aaxis/_showgrid.py                                  |   13
 plotly/validators/layout/ternary/aaxis/_showline.py                                  |   13
 plotly/validators/layout/ternary/aaxis/_showticklabels.py                            |   13
 plotly/validators/layout/ternary/aaxis/_showtickprefix.py                            |   14
 plotly/validators/layout/ternary/aaxis/_showticksuffix.py                            |   14
 plotly/validators/layout/ternary/aaxis/_tick0.py                                     |   14
 plotly/validators/layout/ternary/aaxis/_tickangle.py                                 |   13
 plotly/validators/layout/ternary/aaxis/_tickcolor.py                                 |   13
 plotly/validators/layout/ternary/aaxis/_tickfont.py                                  |   39
 plotly/validators/layout/ternary/aaxis/_tickformat.py                                |   13
 plotly/validators/layout/ternary/aaxis/_tickformatstopdefaults.py                    |   21
 plotly/validators/layout/ternary/aaxis/_tickformatstops.py                           |   54
 plotly/validators/layout/ternary/aaxis/_ticklabelstep.py                             |   14
 plotly/validators/layout/ternary/aaxis/_ticklen.py                                   |   14
 plotly/validators/layout/ternary/aaxis/_tickmode.py                                  |   15
 plotly/validators/layout/ternary/aaxis/_tickprefix.py                                |   13
 plotly/validators/layout/ternary/aaxis/_ticks.py                                     |   14
 plotly/validators/layout/ternary/aaxis/_ticksuffix.py                                |   13
 plotly/validators/layout/ternary/aaxis/_ticktext.py                                  |   13
 plotly/validators/layout/ternary/aaxis/_ticktextsrc.py                               |   13
 plotly/validators/layout/ternary/aaxis/_tickvals.py                                  |   13
 plotly/validators/layout/ternary/aaxis/_tickvalssrc.py                               |   13
 plotly/validators/layout/ternary/aaxis/_tickwidth.py                                 |   14
 plotly/validators/layout/ternary/aaxis/_title.py                                     |   28
 plotly/validators/layout/ternary/aaxis/_uirevision.py                                |   13
 plotly/validators/layout/ternary/aaxis/tickfont/__init__.py                          |   15
 plotly/validators/layout/ternary/aaxis/tickfont/_color.py                            |   13
 plotly/validators/layout/ternary/aaxis/tickfont/_family.py                           |   18
 plotly/validators/layout/ternary/aaxis/tickfont/_size.py                             |   14
 plotly/validators/layout/ternary/aaxis/tickformatstop/__init__.py                    |   23
 plotly/validators/layout/ternary/aaxis/tickformatstop/_dtickrange.py                 |   23
 plotly/validators/layout/ternary/aaxis/tickformatstop/_enabled.py                    |   16
 plotly/validators/layout/ternary/aaxis/tickformatstop/_name.py                       |   16
 plotly/validators/layout/ternary/aaxis/tickformatstop/_templateitemname.py           |   16
 plotly/validators/layout/ternary/aaxis/tickformatstop/_value.py                      |   16
 plotly/validators/layout/ternary/aaxis/title/__init__.py                             |   12
 plotly/validators/layout/ternary/aaxis/title/_font.py                                |   39
 plotly/validators/layout/ternary/aaxis/title/_text.py                                |   13
 plotly/validators/layout/ternary/aaxis/title/font/__init__.py                        |   15
 plotly/validators/layout/ternary/aaxis/title/font/_color.py                          |   16
 plotly/validators/layout/ternary/aaxis/title/font/_family.py                         |   18
 plotly/validators/layout/ternary/aaxis/title/font/_size.py                           |   17
 plotly/validators/layout/ternary/baxis/__init__.py                                   |   95
 plotly/validators/layout/ternary/baxis/_color.py                                     |   13
 plotly/validators/layout/ternary/baxis/_dtick.py                                     |   14
 plotly/validators/layout/ternary/baxis/_exponentformat.py                            |   14
 plotly/validators/layout/ternary/baxis/_gridcolor.py                                 |   13
 plotly/validators/layout/ternary/baxis/_griddash.py                                  |   16
 plotly/validators/layout/ternary/baxis/_gridwidth.py                                 |   14
 plotly/validators/layout/ternary/baxis/_hoverformat.py                               |   13
 plotly/validators/layout/ternary/baxis/_labelalias.py                                |   13
 plotly/validators/layout/ternary/baxis/_layer.py                                     |   14
 plotly/validators/layout/ternary/baxis/_linecolor.py                                 |   13
 plotly/validators/layout/ternary/baxis/_linewidth.py                                 |   14
 plotly/validators/layout/ternary/baxis/_min.py                                       |   12
 plotly/validators/layout/ternary/baxis/_minexponent.py                               |   14
 plotly/validators/layout/ternary/baxis/_nticks.py                                    |   14
 plotly/validators/layout/ternary/baxis/_separatethousands.py                         |   16
 plotly/validators/layout/ternary/baxis/_showexponent.py                              |   14
 plotly/validators/layout/ternary/baxis/_showgrid.py                                  |   13
 plotly/validators/layout/ternary/baxis/_showline.py                                  |   13
 plotly/validators/layout/ternary/baxis/_showticklabels.py                            |   13
 plotly/validators/layout/ternary/baxis/_showtickprefix.py                            |   14
 plotly/validators/layout/ternary/baxis/_showticksuffix.py                            |   14
 plotly/validators/layout/ternary/baxis/_tick0.py                                     |   14
 plotly/validators/layout/ternary/baxis/_tickangle.py                                 |   13
 plotly/validators/layout/ternary/baxis/_tickcolor.py                                 |   13
 plotly/validators/layout/ternary/baxis/_tickfont.py                                  |   39
 plotly/validators/layout/ternary/baxis/_tickformat.py                                |   13
 plotly/validators/layout/ternary/baxis/_tickformatstopdefaults.py                    |   21
 plotly/validators/layout/ternary/baxis/_tickformatstops.py                           |   54
 plotly/validators/layout/ternary/baxis/_ticklabelstep.py                             |   14
 plotly/validators/layout/ternary/baxis/_ticklen.py                                   |   14
 plotly/validators/layout/ternary/baxis/_tickmode.py                                  |   15
 plotly/validators/layout/ternary/baxis/_tickprefix.py                                |   13
 plotly/validators/layout/ternary/baxis/_ticks.py                                     |   14
 plotly/validators/layout/ternary/baxis/_ticksuffix.py                                |   13
 plotly/validators/layout/ternary/baxis/_ticktext.py                                  |   13
 plotly/validators/layout/ternary/baxis/_ticktextsrc.py                               |   13
 plotly/validators/layout/ternary/baxis/_tickvals.py                                  |   13
 plotly/validators/layout/ternary/baxis/_tickvalssrc.py                               |   13
 plotly/validators/layout/ternary/baxis/_tickwidth.py                                 |   14
 plotly/validators/layout/ternary/baxis/_title.py                                     |   28
 plotly/validators/layout/ternary/baxis/_uirevision.py                                |   13
 plotly/validators/layout/ternary/baxis/tickfont/__init__.py                          |   15
 plotly/validators/layout/ternary/baxis/tickfont/_color.py                            |   13
 plotly/validators/layout/ternary/baxis/tickfont/_family.py                           |   18
 plotly/validators/layout/ternary/baxis/tickfont/_size.py                             |   14
 plotly/validators/layout/ternary/baxis/tickformatstop/__init__.py                    |   23
 plotly/validators/layout/ternary/baxis/tickformatstop/_dtickrange.py                 |   23
 plotly/validators/layout/ternary/baxis/tickformatstop/_enabled.py                    |   16
 plotly/validators/layout/ternary/baxis/tickformatstop/_name.py                       |   16
 plotly/validators/layout/ternary/baxis/tickformatstop/_templateitemname.py           |   16
 plotly/validators/layout/ternary/baxis/tickformatstop/_value.py                      |   16
 plotly/validators/layout/ternary/baxis/title/__init__.py                             |   12
 plotly/validators/layout/ternary/baxis/title/_font.py                                |   39
 plotly/validators/layout/ternary/baxis/title/_text.py                                |   13
 plotly/validators/layout/ternary/baxis/title/font/__init__.py                        |   15
 plotly/validators/layout/ternary/baxis/title/font/_color.py                          |   16
 plotly/validators/layout/ternary/baxis/title/font/_family.py                         |   18
 plotly/validators/layout/ternary/baxis/title/font/_size.py                           |   17
 plotly/validators/layout/ternary/caxis/__init__.py                                   |   95
 plotly/validators/layout/ternary/caxis/_color.py                                     |   13
 plotly/validators/layout/ternary/caxis/_dtick.py                                     |   14
 plotly/validators/layout/ternary/caxis/_exponentformat.py                            |   14
 plotly/validators/layout/ternary/caxis/_gridcolor.py                                 |   13
 plotly/validators/layout/ternary/caxis/_griddash.py                                  |   16
 plotly/validators/layout/ternary/caxis/_gridwidth.py                                 |   14
 plotly/validators/layout/ternary/caxis/_hoverformat.py                               |   13
 plotly/validators/layout/ternary/caxis/_labelalias.py                                |   13
 plotly/validators/layout/ternary/caxis/_layer.py                                     |   14
 plotly/validators/layout/ternary/caxis/_linecolor.py                                 |   13
 plotly/validators/layout/ternary/caxis/_linewidth.py                                 |   14
 plotly/validators/layout/ternary/caxis/_min.py                                       |   12
 plotly/validators/layout/ternary/caxis/_minexponent.py                               |   14
 plotly/validators/layout/ternary/caxis/_nticks.py                                    |   14
 plotly/validators/layout/ternary/caxis/_separatethousands.py                         |   16
 plotly/validators/layout/ternary/caxis/_showexponent.py                              |   14
 plotly/validators/layout/ternary/caxis/_showgrid.py                                  |   13
 plotly/validators/layout/ternary/caxis/_showline.py                                  |   13
 plotly/validators/layout/ternary/caxis/_showticklabels.py                            |   13
 plotly/validators/layout/ternary/caxis/_showtickprefix.py                            |   14
 plotly/validators/layout/ternary/caxis/_showticksuffix.py                            |   14
 plotly/validators/layout/ternary/caxis/_tick0.py                                     |   14
 plotly/validators/layout/ternary/caxis/_tickangle.py                                 |   13
 plotly/validators/layout/ternary/caxis/_tickcolor.py                                 |   13
 plotly/validators/layout/ternary/caxis/_tickfont.py                                  |   39
 plotly/validators/layout/ternary/caxis/_tickformat.py                                |   13
 plotly/validators/layout/ternary/caxis/_tickformatstopdefaults.py                    |   21
 plotly/validators/layout/ternary/caxis/_tickformatstops.py                           |   54
 plotly/validators/layout/ternary/caxis/_ticklabelstep.py                             |   14
 plotly/validators/layout/ternary/caxis/_ticklen.py                                   |   14
 plotly/validators/layout/ternary/caxis/_tickmode.py                                  |   15
 plotly/validators/layout/ternary/caxis/_tickprefix.py                                |   13
 plotly/validators/layout/ternary/caxis/_ticks.py                                     |   14
 plotly/validators/layout/ternary/caxis/_ticksuffix.py                                |   13
 plotly/validators/layout/ternary/caxis/_ticktext.py                                  |   13
 plotly/validators/layout/ternary/caxis/_ticktextsrc.py                               |   13
 plotly/validators/layout/ternary/caxis/_tickvals.py                                  |   13
 plotly/validators/layout/ternary/caxis/_tickvalssrc.py                               |   13
 plotly/validators/layout/ternary/caxis/_tickwidth.py                                 |   14
 plotly/validators/layout/ternary/caxis/_title.py                                     |   28
 plotly/validators/layout/ternary/caxis/_uirevision.py                                |   13
 plotly/validators/layout/ternary/caxis/tickfont/__init__.py                          |   15
 plotly/validators/layout/ternary/caxis/tickfont/_color.py                            |   13
 plotly/validators/layout/ternary/caxis/tickfont/_family.py                           |   18
 plotly/validators/layout/ternary/caxis/tickfont/_size.py                             |   14
 plotly/validators/layout/ternary/caxis/tickformatstop/__init__.py                    |   23
 plotly/validators/layout/ternary/caxis/tickformatstop/_dtickrange.py                 |   23
 plotly/validators/layout/ternary/caxis/tickformatstop/_enabled.py                    |   16
 plotly/validators/layout/ternary/caxis/tickformatstop/_name.py                       |   16
 plotly/validators/layout/ternary/caxis/tickformatstop/_templateitemname.py           |   16
 plotly/validators/layout/ternary/caxis/tickformatstop/_value.py                      |   16
 plotly/validators/layout/ternary/caxis/title/__init__.py                             |   12
 plotly/validators/layout/ternary/caxis/title/_font.py                                |   39
 plotly/validators/layout/ternary/caxis/title/_text.py                                |   13
 plotly/validators/layout/ternary/caxis/title/font/__init__.py                        |   15
 plotly/validators/layout/ternary/caxis/title/font/_color.py                          |   16
 plotly/validators/layout/ternary/caxis/title/font/_family.py                         |   18
 plotly/validators/layout/ternary/caxis/title/font/_size.py                           |   17
 plotly/validators/layout/ternary/domain/__init__.py                                  |   21
 plotly/validators/layout/ternary/domain/_column.py                                   |   14
 plotly/validators/layout/ternary/domain/_row.py                                      |   14
 plotly/validators/layout/ternary/domain/_x.py                                        |   18
 plotly/validators/layout/ternary/domain/_y.py                                        |   18
 plotly/validators/layout/title/__init__.py                                           |   33
 plotly/validators/layout/title/_automargin.py                                        |   11
 plotly/validators/layout/title/_font.py                                              |   37
 plotly/validators/layout/title/_pad.py                                               |   28
 plotly/validators/layout/title/_text.py                                              |   11
 plotly/validators/layout/title/_x.py                                                 |   13
 plotly/validators/layout/title/_xanchor.py                                           |   12
 plotly/validators/layout/title/_xref.py                                              |   12
 plotly/validators/layout/title/_y.py                                                 |   13
 plotly/validators/layout/title/_yanchor.py                                           |   12
 plotly/validators/layout/title/_yref.py                                              |   12
 plotly/validators/layout/title/font/__init__.py                                      |   15
 plotly/validators/layout/title/font/_color.py                                        |   11
 plotly/validators/layout/title/font/_family.py                                       |   13
 plotly/validators/layout/title/font/_size.py                                         |   12
 plotly/validators/layout/title/pad/__init__.py                                       |   16
 plotly/validators/layout/title/pad/_b.py                                             |   11
 plotly/validators/layout/title/pad/_l.py                                             |   11
 plotly/validators/layout/title/pad/_r.py                                             |   11
 plotly/validators/layout/title/pad/_t.py                                             |   11
 plotly/validators/layout/transition/__init__.py                                      |   19
 plotly/validators/layout/transition/_duration.py                                     |   14
 plotly/validators/layout/transition/_easing.py                                       |   52
 plotly/validators/layout/transition/_ordering.py                                     |   14
 plotly/validators/layout/uniformtext/__init__.py                                     |   12
 plotly/validators/layout/uniformtext/_minsize.py                                     |   14
 plotly/validators/layout/uniformtext/_mode.py                                        |   12
 plotly/validators/layout/updatemenu/__init__.py                                      |   49
 plotly/validators/layout/updatemenu/_active.py                                       |   12
 plotly/validators/layout/updatemenu/_bgcolor.py                                      |   13
 plotly/validators/layout/updatemenu/_bordercolor.py                                  |   13
 plotly/validators/layout/updatemenu/_borderwidth.py                                  |   14
 plotly/validators/layout/updatemenu/_buttondefaults.py                               |   18
 plotly/validators/layout/updatemenu/_buttons.py                                      |   71
 plotly/validators/layout/updatemenu/_direction.py                                    |   14
 plotly/validators/layout/updatemenu/_font.py                                         |   37
 plotly/validators/layout/updatemenu/_name.py                                         |   11
 plotly/validators/layout/updatemenu/_pad.py                                          |   28
 plotly/validators/layout/updatemenu/_showactive.py                                   |   13
 plotly/validators/layout/updatemenu/_templateitemname.py                             |   13
 plotly/validators/layout/updatemenu/_type.py                                         |   12
 plotly/validators/layout/updatemenu/_visible.py                                      |   13
 plotly/validators/layout/updatemenu/_x.py                                            |   13
 plotly/validators/layout/updatemenu/_xanchor.py                                      |   14
 plotly/validators/layout/updatemenu/_y.py                                            |   13
 plotly/validators/layout/updatemenu/_yanchor.py                                      |   14
 plotly/validators/layout/updatemenu/button/__init__.py                               |   29
 plotly/validators/layout/updatemenu/button/_args.py                                  |   22
 plotly/validators/layout/updatemenu/button/_args2.py                                 |   22
 plotly/validators/layout/updatemenu/button/_execute.py                               |   13
 plotly/validators/layout/updatemenu/button/_label.py                                 |   13
 plotly/validators/layout/updatemenu/button/_method.py                                |   16
 plotly/validators/layout/updatemenu/button/_name.py                                  |   13
 plotly/validators/layout/updatemenu/button/_templateitemname.py                      |   16
 plotly/validators/layout/updatemenu/button/_visible.py                               |   13
 plotly/validators/layout/updatemenu/font/__init__.py                                 |   15
 plotly/validators/layout/updatemenu/font/_color.py                                   |   13
 plotly/validators/layout/updatemenu/font/_family.py                                  |   15
 plotly/validators/layout/updatemenu/font/_size.py                                    |   14
 plotly/validators/layout/updatemenu/pad/__init__.py                                  |   16
 plotly/validators/layout/updatemenu/pad/_b.py                                        |   11
 plotly/validators/layout/updatemenu/pad/_l.py                                        |   11
 plotly/validators/layout/updatemenu/pad/_r.py                                        |   11
 plotly/validators/layout/updatemenu/pad/_t.py                                        |   11
 plotly/validators/layout/xaxis/__init__.py                                           |  191
 plotly/validators/layout/xaxis/_anchor.py                                            |   19
 plotly/validators/layout/xaxis/_automargin.py                                        |   15
 plotly/validators/layout/xaxis/_autorange.py                                         |   16
 plotly/validators/layout/xaxis/_autorangeoptions.py                                  |   35
 plotly/validators/layout/xaxis/_autotickangles.py                                    |   15
 plotly/validators/layout/xaxis/_autotypenumbers.py                                   |   14
 plotly/validators/layout/xaxis/_calendar.py                                          |   32
 plotly/validators/layout/xaxis/_categoryarray.py                                     |   13
 plotly/validators/layout/xaxis/_categoryarraysrc.py                                  |   13
 plotly/validators/layout/xaxis/_categoryorder.py                                     |   34
 plotly/validators/layout/xaxis/_color.py                                             |   11
 plotly/validators/layout/xaxis/_constrain.py                                         |   12
 plotly/validators/layout/xaxis/_constraintoward.py                                   |   16
 plotly/validators/layout/xaxis/_dividercolor.py                                      |   13
 plotly/validators/layout/xaxis/_dividerwidth.py                                      |   13
 plotly/validators/layout/xaxis/_domain.py                                            |   18
 plotly/validators/layout/xaxis/_dtick.py                                             |   12
 plotly/validators/layout/xaxis/_exponentformat.py                                    |   14
 plotly/validators/layout/xaxis/_fixedrange.py                                        |   11
 plotly/validators/layout/xaxis/_gridcolor.py                                         |   11
 plotly/validators/layout/xaxis/_griddash.py                                          |   14
 plotly/validators/layout/xaxis/_gridwidth.py                                         |   12
 plotly/validators/layout/xaxis/_hoverformat.py                                       |   11
 plotly/validators/layout/xaxis/_insiderange.py                                       |   18
 plotly/validators/layout/xaxis/_labelalias.py                                        |   11
 plotly/validators/layout/xaxis/_layer.py                                             |   12
 plotly/validators/layout/xaxis/_linecolor.py                                         |   11
 plotly/validators/layout/xaxis/_linewidth.py                                         |   12
 plotly/validators/layout/xaxis/_matches.py                                           |   18
 plotly/validators/layout/xaxis/_maxallowed.py                                        |   12
 plotly/validators/layout/xaxis/_minallowed.py                                        |   12
 plotly/validators/layout/xaxis/_minexponent.py                                       |   12
 plotly/validators/layout/xaxis/_minor.py                                             |  104
 plotly/validators/layout/xaxis/_mirror.py                                            |   12
 plotly/validators/layout/xaxis/_nticks.py                                            |   12
 plotly/validators/layout/xaxis/_overlaying.py                                        |   19
 plotly/validators/layout/xaxis/_position.py                                          |   13
 plotly/validators/layout/xaxis/_range.py                                             |   30
 plotly/validators/layout/xaxis/_rangebreakdefaults.py                                |   18
 plotly/validators/layout/xaxis/_rangebreaks.py                                       |   67
 plotly/validators/layout/xaxis/_rangemode.py                                         |   12
 plotly/validators/layout/xaxis/_rangeselector.py                                     |   63
 plotly/validators/layout/xaxis/_rangeslider.py                                       |   50
 plotly/validators/layout/xaxis/_scaleanchor.py                                       |   19
 plotly/validators/layout/xaxis/_scaleratio.py                                        |   12
 plotly/validators/layout/xaxis/_separatethousands.py                                 |   13
 plotly/validators/layout/xaxis/_showdividers.py                                      |   13
 plotly/validators/layout/xaxis/_showexponent.py                                      |   14
 plotly/validators/layout/xaxis/_showgrid.py                                          |   11
 plotly/validators/layout/xaxis/_showline.py                                          |   11
 plotly/validators/layout/xaxis/_showspikes.py                                        |   11
 plotly/validators/layout/xaxis/_showticklabels.py                                    |   13
 plotly/validators/layout/xaxis/_showtickprefix.py                                    |   14
 plotly/validators/layout/xaxis/_showticksuffix.py                                    |   14
 plotly/validators/layout/xaxis/_side.py                                              |   12
 plotly/validators/layout/xaxis/_spikecolor.py                                        |   11
 plotly/validators/layout/xaxis/_spikedash.py                                         |   14
 plotly/validators/layout/xaxis/_spikemode.py                                         |   12
 plotly/validators/layout/xaxis/_spikesnap.py                                         |   12
 plotly/validators/layout/xaxis/_spikethickness.py                                    |   13
 plotly/validators/layout/xaxis/_tick0.py                                             |   12
 plotly/validators/layout/xaxis/_tickangle.py                                         |   11
 plotly/validators/layout/xaxis/_tickcolor.py                                         |   11
 plotly/validators/layout/xaxis/_tickfont.py                                          |   37
 plotly/validators/layout/xaxis/_tickformat.py                                        |   11
 plotly/validators/layout/xaxis/_tickformatstopdefaults.py                            |   18
 plotly/validators/layout/xaxis/_tickformatstops.py                                   |   51
 plotly/validators/layout/xaxis/_ticklabelmode.py                                     |   14
 plotly/validators/layout/xaxis/_ticklabeloverflow.py                                 |   14
 plotly/validators/layout/xaxis/_ticklabelposition.py                                 |   28
 plotly/validators/layout/xaxis/_ticklabelstep.py                                     |   14
 plotly/validators/layout/xaxis/_ticklen.py                                           |   12
 plotly/validators/layout/xaxis/_tickmode.py                                          |   13
 plotly/validators/layout/xaxis/_tickprefix.py                                        |   11
 plotly/validators/layout/xaxis/_ticks.py                                             |   12
 plotly/validators/layout/xaxis/_tickson.py                                           |   12
 plotly/validators/layout/xaxis/_ticksuffix.py                                        |   11
 plotly/validators/layout/xaxis/_ticktext.py                                          |   11
 plotly/validators/layout/xaxis/_ticktextsrc.py                                       |   11
 plotly/validators/layout/xaxis/_tickvals.py                                          |   11
 plotly/validators/layout/xaxis/_tickvalssrc.py                                       |   11
 plotly/validators/layout/xaxis/_tickwidth.py                                         |   12
 plotly/validators/layout/xaxis/_title.py                                             |   38
 plotly/validators/layout/xaxis/_type.py                                              |   14
 plotly/validators/layout/xaxis/_uirevision.py                                        |   11
 plotly/validators/layout/xaxis/_visible.py                                           |   11
 plotly/validators/layout/xaxis/_zeroline.py                                          |   11
 plotly/validators/layout/xaxis/_zerolinecolor.py                                     |   13
 plotly/validators/layout/xaxis/_zerolinewidth.py                                     |   13
 plotly/validators/layout/xaxis/autorangeoptions/__init__.py                          |   25
 plotly/validators/layout/xaxis/autorangeoptions/_clipmax.py                          |   17
 plotly/validators/layout/xaxis/autorangeoptions/_clipmin.py                          |   17
 plotly/validators/layout/xaxis/autorangeoptions/_include.py                          |   18
 plotly/validators/layout/xaxis/autorangeoptions/_includesrc.py                       |   16
 plotly/validators/layout/xaxis/autorangeoptions/_maxallowed.py                       |   17
 plotly/validators/layout/xaxis/autorangeoptions/_minallowed.py                       |   17
 plotly/validators/layout/xaxis/minor/__init__.py                                     |   41
 plotly/validators/layout/xaxis/minor/_dtick.py                                       |   12
 plotly/validators/layout/xaxis/minor/_gridcolor.py                                   |   13
 plotly/validators/layout/xaxis/minor/_griddash.py                                    |   16
 plotly/validators/layout/xaxis/minor/_gridwidth.py                                   |   14
 plotly/validators/layout/xaxis/minor/_nticks.py                                      |   14
 plotly/validators/layout/xaxis/minor/_showgrid.py                                    |   13
 plotly/validators/layout/xaxis/minor/_tick0.py                                       |   12
 plotly/validators/layout/xaxis/minor/_tickcolor.py                                   |   13
 plotly/validators/layout/xaxis/minor/_ticklen.py                                     |   14
 plotly/validators/layout/xaxis/minor/_tickmode.py                                    |   15
 plotly/validators/layout/xaxis/minor/_ticks.py                                       |   12
 plotly/validators/layout/xaxis/minor/_tickvals.py                                    |   13
 plotly/validators/layout/xaxis/minor/_tickvalssrc.py                                 |   13
 plotly/validators/layout/xaxis/minor/_tickwidth.py                                   |   14
 plotly/validators/layout/xaxis/rangebreak/__init__.py                                |   27
 plotly/validators/layout/xaxis/rangebreak/_bounds.py                                 |   20
 plotly/validators/layout/xaxis/rangebreak/_dvalue.py                                 |   14
 plotly/validators/layout/xaxis/rangebreak/_enabled.py                                |   13
 plotly/validators/layout/xaxis/rangebreak/_name.py                                   |   13
 plotly/validators/layout/xaxis/rangebreak/_pattern.py                                |   14
 plotly/validators/layout/xaxis/rangebreak/_templateitemname.py                       |   16
 plotly/validators/layout/xaxis/rangebreak/_values.py                                 |   15
 plotly/validators/layout/xaxis/rangeselector/__init__.py                             |   37
 plotly/validators/layout/xaxis/rangeselector/_activecolor.py                         |   16
 plotly/validators/layout/xaxis/rangeselector/_bgcolor.py                             |   13
 plotly/validators/layout/xaxis/rangeselector/_bordercolor.py                         |   16
 plotly/validators/layout/xaxis/rangeselector/_borderwidth.py                         |   17
 plotly/validators/layout/xaxis/rangeselector/_buttondefaults.py                      |   21
 plotly/validators/layout/xaxis/rangeselector/_buttons.py                             |   63
 plotly/validators/layout/xaxis/rangeselector/_font.py                                |   39
 plotly/validators/layout/xaxis/rangeselector/_visible.py                             |   13
 plotly/validators/layout/xaxis/rangeselector/_x.py                                   |   15
 plotly/validators/layout/xaxis/rangeselector/_xanchor.py                             |   14
 plotly/validators/layout/xaxis/rangeselector/_y.py                                   |   15
 plotly/validators/layout/xaxis/rangeselector/_yanchor.py                             |   14
 plotly/validators/layout/xaxis/rangeselector/button/__init__.py                      |   27
 plotly/validators/layout/xaxis/rangeselector/button/_count.py                        |   17
 plotly/validators/layout/xaxis/rangeselector/button/_label.py                        |   16
 plotly/validators/layout/xaxis/rangeselector/button/_name.py                         |   16
 plotly/validators/layout/xaxis/rangeselector/button/_step.py                         |   19
 plotly/validators/layout/xaxis/rangeselector/button/_stepmode.py                     |   17
 plotly/validators/layout/xaxis/rangeselector/button/_templateitemname.py             |   16
 plotly/validators/layout/xaxis/rangeselector/button/_visible.py                      |   16
 plotly/validators/layout/xaxis/rangeselector/font/__init__.py                        |   15
 plotly/validators/layout/xaxis/rangeselector/font/_color.py                          |   16
 plotly/validators/layout/xaxis/rangeselector/font/_family.py                         |   18
 plotly/validators/layout/xaxis/rangeselector/font/_size.py                           |   17
 plotly/validators/layout/xaxis/rangeslider/__init__.py                               |   29
 plotly/validators/layout/xaxis/rangeslider/_autorange.py                             |   14
 plotly/validators/layout/xaxis/rangeslider/_bgcolor.py                               |   13
 plotly/validators/layout/xaxis/rangeslider/_bordercolor.py                           |   16
 plotly/validators/layout/xaxis/rangeslider/_borderwidth.py                           |   17
 plotly/validators/layout/xaxis/rangeslider/_range.py                                 |   29
 plotly/validators/layout/xaxis/rangeslider/_thickness.py                             |   15
 plotly/validators/layout/xaxis/rangeslider/_visible.py                               |   13
 plotly/validators/layout/xaxis/rangeslider/_yaxis.py                                 |   29
 plotly/validators/layout/xaxis/rangeslider/yaxis/__init__.py                         |   12
 plotly/validators/layout/xaxis/rangeslider/yaxis/_range.py                           |   23
 plotly/validators/layout/xaxis/rangeslider/yaxis/_rangemode.py                       |   17
 plotly/validators/layout/xaxis/tickfont/__init__.py                                  |   15
 plotly/validators/layout/xaxis/tickfont/_color.py                                    |   13
 plotly/validators/layout/xaxis/tickfont/_family.py                                   |   15
 plotly/validators/layout/xaxis/tickfont/_size.py                                     |   14
 plotly/validators/layout/xaxis/tickformatstop/__init__.py                            |   23
 plotly/validators/layout/xaxis/tickformatstop/_dtickrange.py                         |   23
 plotly/validators/layout/xaxis/tickformatstop/_enabled.py                            |   13
 plotly/validators/layout/xaxis/tickformatstop/_name.py                               |   13
 plotly/validators/layout/xaxis/tickformatstop/_templateitemname.py                   |   16
 plotly/validators/layout/xaxis/tickformatstop/_value.py                              |   13
 plotly/validators/layout/xaxis/title/__init__.py                                     |   19
 plotly/validators/layout/xaxis/title/_font.py                                        |   37
 plotly/validators/layout/xaxis/title/_standoff.py                                    |   14
 plotly/validators/layout/xaxis/title/_text.py                                        |   11
 plotly/validators/layout/xaxis/title/font/__init__.py                                |   15
 plotly/validators/layout/xaxis/title/font/_color.py                                  |   13
 plotly/validators/layout/xaxis/title/font/_family.py                                 |   15
 plotly/validators/layout/xaxis/title/font/_size.py                                   |   14
 plotly/validators/layout/yaxis/__init__.py                                           |  191
 plotly/validators/layout/yaxis/_anchor.py                                            |   19
 plotly/validators/layout/yaxis/_automargin.py                                        |   15
 plotly/validators/layout/yaxis/_autorange.py                                         |   16
 plotly/validators/layout/yaxis/_autorangeoptions.py                                  |   35
 plotly/validators/layout/yaxis/_autoshift.py                                         |   11
 plotly/validators/layout/yaxis/_autotickangles.py                                    |   15
 plotly/validators/layout/yaxis/_autotypenumbers.py                                   |   14
 plotly/validators/layout/yaxis/_calendar.py                                          |   32
 plotly/validators/layout/yaxis/_categoryarray.py                                     |   13
 plotly/validators/layout/yaxis/_categoryarraysrc.py                                  |   13
 plotly/validators/layout/yaxis/_categoryorder.py                                     |   34
 plotly/validators/layout/yaxis/_color.py                                             |   11
 plotly/validators/layout/yaxis/_constrain.py                                         |   12
 plotly/validators/layout/yaxis/_constraintoward.py                                   |   16
 plotly/validators/layout/yaxis/_dividercolor.py                                      |   13
 plotly/validators/layout/yaxis/_dividerwidth.py                                      |   13
 plotly/validators/layout/yaxis/_domain.py                                            |   18
 plotly/validators/layout/yaxis/_dtick.py                                             |   12
 plotly/validators/layout/yaxis/_exponentformat.py                                    |   14
 plotly/validators/layout/yaxis/_fixedrange.py                                        |   11
 plotly/validators/layout/yaxis/_gridcolor.py                                         |   11
 plotly/validators/layout/yaxis/_griddash.py                                          |   14
 plotly/validators/layout/yaxis/_gridwidth.py                                         |   12
 plotly/validators/layout/yaxis/_hoverformat.py                                       |   11
 plotly/validators/layout/yaxis/_insiderange.py                                       |   18
 plotly/validators/layout/yaxis/_labelalias.py                                        |   11
 plotly/validators/layout/yaxis/_layer.py                                             |   12
 plotly/validators/layout/yaxis/_linecolor.py                                         |   11
 plotly/validators/layout/yaxis/_linewidth.py                                         |   12
 plotly/validators/layout/yaxis/_matches.py                                           |   18
 plotly/validators/layout/yaxis/_maxallowed.py                                        |   12
 plotly/validators/layout/yaxis/_minallowed.py                                        |   12
 plotly/validators/layout/yaxis/_minexponent.py                                       |   12
 plotly/validators/layout/yaxis/_minor.py                                             |  104
 plotly/validators/layout/yaxis/_mirror.py                                            |   12
 plotly/validators/layout/yaxis/_nticks.py                                            |   12
 plotly/validators/layout/yaxis/_overlaying.py                                        |   19
 plotly/validators/layout/yaxis/_position.py                                          |   13
 plotly/validators/layout/yaxis/_range.py                                             |   30
 plotly/validators/layout/yaxis/_rangebreakdefaults.py                                |   18
 plotly/validators/layout/yaxis/_rangebreaks.py                                       |   67
 plotly/validators/layout/yaxis/_rangemode.py                                         |   12
 plotly/validators/layout/yaxis/_scaleanchor.py                                       |   19
 plotly/validators/layout/yaxis/_scaleratio.py                                        |   12
 plotly/validators/layout/yaxis/_separatethousands.py                                 |   13
 plotly/validators/layout/yaxis/_shift.py                                             |   11
 plotly/validators/layout/yaxis/_showdividers.py                                      |   13
 plotly/validators/layout/yaxis/_showexponent.py                                      |   14
 plotly/validators/layout/yaxis/_showgrid.py                                          |   11
 plotly/validators/layout/yaxis/_showline.py                                          |   11
 plotly/validators/layout/yaxis/_showspikes.py                                        |   11
 plotly/validators/layout/yaxis/_showticklabels.py                                    |   13
 plotly/validators/layout/yaxis/_showtickprefix.py                                    |   14
 plotly/validators/layout/yaxis/_showticksuffix.py                                    |   14
 plotly/validators/layout/yaxis/_side.py                                              |   12
 plotly/validators/layout/yaxis/_spikecolor.py                                        |   11
 plotly/validators/layout/yaxis/_spikedash.py                                         |   14
 plotly/validators/layout/yaxis/_spikemode.py                                         |   12
 plotly/validators/layout/yaxis/_spikesnap.py                                         |   12
 plotly/validators/layout/yaxis/_spikethickness.py                                    |   13
 plotly/validators/layout/yaxis/_tick0.py                                             |   12
 plotly/validators/layout/yaxis/_tickangle.py                                         |   11
 plotly/validators/layout/yaxis/_tickcolor.py                                         |   11
 plotly/validators/layout/yaxis/_tickfont.py                                          |   37
 plotly/validators/layout/yaxis/_tickformat.py                                        |   11
 plotly/validators/layout/yaxis/_tickformatstopdefaults.py                            |   18
 plotly/validators/layout/yaxis/_tickformatstops.py                                   |   51
 plotly/validators/layout/yaxis/_ticklabelmode.py                                     |   14
 plotly/validators/layout/yaxis/_ticklabeloverflow.py                                 |   14
 plotly/validators/layout/yaxis/_ticklabelposition.py                                 |   28
 plotly/validators/layout/yaxis/_ticklabelstep.py                                     |   14
 plotly/validators/layout/yaxis/_ticklen.py                                           |   12
 plotly/validators/layout/yaxis/_tickmode.py                                          |   13
 plotly/validators/layout/yaxis/_tickprefix.py                                        |   11
 plotly/validators/layout/yaxis/_ticks.py                                             |   12
 plotly/validators/layout/yaxis/_tickson.py                                           |   12
 plotly/validators/layout/yaxis/_ticksuffix.py                                        |   11
 plotly/validators/layout/yaxis/_ticktext.py                                          |   11
 plotly/validators/layout/yaxis/_ticktextsrc.py                                       |   11
 plotly/validators/layout/yaxis/_tickvals.py                                          |   11
 plotly/validators/layout/yaxis/_tickvalssrc.py                                       |   11
 plotly/validators/layout/yaxis/_tickwidth.py                                         |   12
 plotly/validators/layout/yaxis/_title.py                                             |   38
 plotly/validators/layout/yaxis/_type.py                                              |   14
 plotly/validators/layout/yaxis/_uirevision.py                                        |   11
 plotly/validators/layout/yaxis/_visible.py                                           |   11
 plotly/validators/layout/yaxis/_zeroline.py                                          |   11
 plotly/validators/layout/yaxis/_zerolinecolor.py                                     |   13
 plotly/validators/layout/yaxis/_zerolinewidth.py                                     |   13
 plotly/validators/layout/yaxis/autorangeoptions/__init__.py                          |   25
 plotly/validators/layout/yaxis/autorangeoptions/_clipmax.py                          |   17
 plotly/validators/layout/yaxis/autorangeoptions/_clipmin.py                          |   17
 plotly/validators/layout/yaxis/autorangeoptions/_include.py                          |   18
 plotly/validators/layout/yaxis/autorangeoptions/_includesrc.py                       |   16
 plotly/validators/layout/yaxis/autorangeoptions/_maxallowed.py                       |   17
 plotly/validators/layout/yaxis/autorangeoptions/_minallowed.py                       |   17
 plotly/validators/layout/yaxis/minor/__init__.py                                     |   41
 plotly/validators/layout/yaxis/minor/_dtick.py                                       |   12
 plotly/validators/layout/yaxis/minor/_gridcolor.py                                   |   13
 plotly/validators/layout/yaxis/minor/_griddash.py                                    |   16
 plotly/validators/layout/yaxis/minor/_gridwidth.py                                   |   14
 plotly/validators/layout/yaxis/minor/_nticks.py                                      |   14
 plotly/validators/layout/yaxis/minor/_showgrid.py                                    |   13
 plotly/validators/layout/yaxis/minor/_tick0.py                                       |   12
 plotly/validators/layout/yaxis/minor/_tickcolor.py                                   |   13
 plotly/validators/layout/yaxis/minor/_ticklen.py                                     |   14
 plotly/validators/layout/yaxis/minor/_tickmode.py                                    |   15
 plotly/validators/layout/yaxis/minor/_ticks.py                                       |   12
 plotly/validators/layout/yaxis/minor/_tickvals.py                                    |   13
 plotly/validators/layout/yaxis/minor/_tickvalssrc.py                                 |   13
 plotly/validators/layout/yaxis/minor/_tickwidth.py                                   |   14
 plotly/validators/layout/yaxis/rangebreak/__init__.py                                |   27
 plotly/validators/layout/yaxis/rangebreak/_bounds.py                                 |   20
 plotly/validators/layout/yaxis/rangebreak/_dvalue.py                                 |   14
 plotly/validators/layout/yaxis/rangebreak/_enabled.py                                |   13
 plotly/validators/layout/yaxis/rangebreak/_name.py                                   |   13
 plotly/validators/layout/yaxis/rangebreak/_pattern.py                                |   14
 plotly/validators/layout/yaxis/rangebreak/_templateitemname.py                       |   16
 plotly/validators/layout/yaxis/rangebreak/_values.py                                 |   15
 plotly/validators/layout/yaxis/tickfont/__init__.py                                  |   15
 plotly/validators/layout/yaxis/tickfont/_color.py                                    |   13
 plotly/validators/layout/yaxis/tickfont/_family.py                                   |   15
 plotly/validators/layout/yaxis/tickfont/_size.py                                     |   14
 plotly/validators/layout/yaxis/tickformatstop/__init__.py                            |   23
 plotly/validators/layout/yaxis/tickformatstop/_dtickrange.py                         |   23
 plotly/validators/layout/yaxis/tickformatstop/_enabled.py                            |   13
 plotly/validators/layout/yaxis/tickformatstop/_name.py                               |   13
 plotly/validators/layout/yaxis/tickformatstop/_templateitemname.py                   |   16
 plotly/validators/layout/yaxis/tickformatstop/_value.py                              |   13
 plotly/validators/layout/yaxis/title/__init__.py                                     |   19
 plotly/validators/layout/yaxis/title/_font.py                                        |   37
 plotly/validators/layout/yaxis/title/_standoff.py                                    |   14
 plotly/validators/layout/yaxis/title/_text.py                                        |   11
 plotly/validators/layout/yaxis/title/font/__init__.py                                |   15
 plotly/validators/layout/yaxis/title/font/_color.py                                  |   13
 plotly/validators/layout/yaxis/title/font/_family.py                                 |   15
 plotly/validators/layout/yaxis/title/font/_size.py                                   |   14
 plotly/validators/mesh3d/__init__.py                                                 |  153
 plotly/validators/mesh3d/_alphahull.py                                               |   11
 plotly/validators/mesh3d/_autocolorscale.py                                          |   12
 plotly/validators/mesh3d/_cauto.py                                                   |   12
 plotly/validators/mesh3d/_cmax.py                                                    |   12
 plotly/validators/mesh3d/_cmid.py                                                    |   12
 plotly/validators/mesh3d/_cmin.py                                                    |   12
 plotly/validators/mesh3d/_color.py                                                   |   12
 plotly/validators/mesh3d/_coloraxis.py                                               |   13
 plotly/validators/mesh3d/_colorbar.py                                                |  294
 plotly/validators/mesh3d/_colorscale.py                                              |   12
 plotly/validators/mesh3d/_contour.py                                                 |   23
 plotly/validators/mesh3d/_customdata.py                                              |   11
 plotly/validators/mesh3d/_customdatasrc.py                                           |   11
 plotly/validators/mesh3d/_delaunayaxis.py                                            |   12
 plotly/validators/mesh3d/_facecolor.py                                               |   11
 plotly/validators/mesh3d/_facecolorsrc.py                                            |   11
 plotly/validators/mesh3d/_flatshading.py                                             |   11
 plotly/validators/mesh3d/_hoverinfo.py                                               |   14
 plotly/validators/mesh3d/_hoverinfosrc.py                                            |   11
 plotly/validators/mesh3d/_hoverlabel.py                                              |   51
 plotly/validators/mesh3d/_hovertemplate.py                                           |   12
 plotly/validators/mesh3d/_hovertemplatesrc.py                                        |   11
 plotly/validators/mesh3d/_hovertext.py                                               |   12
 plotly/validators/mesh3d/_hovertextsrc.py                                            |   11
 plotly/validators/mesh3d/_i.py                                                       |   11
 plotly/validators/mesh3d/_ids.py                                                     |   11
 plotly/validators/mesh3d/_idssrc.py                                                  |   11
 plotly/validators/mesh3d/_intensity.py                                               |   11
 plotly/validators/mesh3d/_intensitymode.py                                           |   12
 plotly/validators/mesh3d/_intensitysrc.py                                            |   11
 plotly/validators/mesh3d/_isrc.py                                                    |   11
 plotly/validators/mesh3d/_j.py                                                       |   11
 plotly/validators/mesh3d/_jsrc.py                                                    |   11
 plotly/validators/mesh3d/_k.py                                                       |   11
 plotly/validators/mesh3d/_ksrc.py                                                    |   11
 plotly/validators/mesh3d/_legend.py                                                  |   12
 plotly/validators/mesh3d/_legendgroup.py                                             |   11
 plotly/validators/mesh3d/_legendgrouptitle.py                                        |   20
 plotly/validators/mesh3d/_legendrank.py                                              |   11
 plotly/validators/mesh3d/_legendwidth.py                                             |   12
 plotly/validators/mesh3d/_lighting.py                                                |   40
 plotly/validators/mesh3d/_lightposition.py                                           |   25
 plotly/validators/mesh3d/_meta.py                                                    |   12
 plotly/validators/mesh3d/_metasrc.py                                                 |   11
 plotly/validators/mesh3d/_name.py                                                    |   11
 plotly/validators/mesh3d/_opacity.py                                                 |   13
 plotly/validators/mesh3d/_reversescale.py                                            |   11
 plotly/validators/mesh3d/_scene.py                                                   |   12
 plotly/validators/mesh3d/_showlegend.py                                              |   11
 plotly/validators/mesh3d/_showscale.py                                               |   11
 plotly/validators/mesh3d/_stream.py                                                  |   25
 plotly/validators/mesh3d/_text.py                                                    |   12
 plotly/validators/mesh3d/_textsrc.py                                                 |   11
 plotly/validators/mesh3d/_uid.py                                                     |   11
 plotly/validators/mesh3d/_uirevision.py                                              |   11
 plotly/validators/mesh3d/_vertexcolor.py                                             |   11
 plotly/validators/mesh3d/_vertexcolorsrc.py                                          |   11
 plotly/validators/mesh3d/_visible.py                                                 |   12
 plotly/validators/mesh3d/_x.py                                                       |   11
 plotly/validators/mesh3d/_xcalendar.py                                               |   32
 plotly/validators/mesh3d/_xhoverformat.py                                            |   11
 plotly/validators/mesh3d/_xsrc.py                                                    |   11
 plotly/validators/mesh3d/_y.py                                                       |   11
 plotly/validators/mesh3d/_ycalendar.py                                               |   32
 plotly/validators/mesh3d/_yhoverformat.py                                            |   11
 plotly/validators/mesh3d/_ysrc.py                                                    |   11
 plotly/validators/mesh3d/_z.py                                                       |   11
 plotly/validators/mesh3d/_zcalendar.py                                               |   32
 plotly/validators/mesh3d/_zhoverformat.py                                            |   11
 plotly/validators/mesh3d/_zsrc.py                                                    |   11
 plotly/validators/mesh3d/colorbar/__init__.py                                        |  111
 plotly/validators/mesh3d/colorbar/_bgcolor.py                                        |   11
 plotly/validators/mesh3d/colorbar/_bordercolor.py                                    |   13
 plotly/validators/mesh3d/colorbar/_borderwidth.py                                    |   14
 plotly/validators/mesh3d/colorbar/_dtick.py                                          |   12
 plotly/validators/mesh3d/colorbar/_exponentformat.py                                 |   14
 plotly/validators/mesh3d/colorbar/_labelalias.py                                     |   13
 plotly/validators/mesh3d/colorbar/_len.py                                            |   12
 plotly/validators/mesh3d/colorbar/_lenmode.py                                        |   12
 plotly/validators/mesh3d/colorbar/_minexponent.py                                    |   14
 plotly/validators/mesh3d/colorbar/_nticks.py                                         |   12
 plotly/validators/mesh3d/colorbar/_orientation.py                                    |   14
 plotly/validators/mesh3d/colorbar/_outlinecolor.py                                   |   13
 plotly/validators/mesh3d/colorbar/_outlinewidth.py                                   |   14
 plotly/validators/mesh3d/colorbar/_separatethousands.py                              |   13
 plotly/validators/mesh3d/colorbar/_showexponent.py                                   |   14
 plotly/validators/mesh3d/colorbar/_showticklabels.py                                 |   13
 plotly/validators/mesh3d/colorbar/_showtickprefix.py                                 |   14
 plotly/validators/mesh3d/colorbar/_showticksuffix.py                                 |   14
 plotly/validators/mesh3d/colorbar/_thickness.py                                      |   14
 plotly/validators/mesh3d/colorbar/_thicknessmode.py                                  |   14
 plotly/validators/mesh3d/colorbar/_tick0.py                                          |   12
 plotly/validators/mesh3d/colorbar/_tickangle.py                                      |   13
 plotly/validators/mesh3d/colorbar/_tickcolor.py                                      |   13
 plotly/validators/mesh3d/colorbar/_tickfont.py                                       |   37
 plotly/validators/mesh3d/colorbar/_tickformat.py                                     |   13
 plotly/validators/mesh3d/colorbar/_tickformatstopdefaults.py                         |   21
 plotly/validators/mesh3d/colorbar/_tickformatstops.py                                |   51
 plotly/validators/mesh3d/colorbar/_ticklabeloverflow.py                              |   14
 plotly/validators/mesh3d/colorbar/_ticklabelposition.py                              |   28
 plotly/validators/mesh3d/colorbar/_ticklabelstep.py                                  |   14
 plotly/validators/mesh3d/colorbar/_ticklen.py                                        |   12
 plotly/validators/mesh3d/colorbar/_tickmode.py                                       |   13
 plotly/validators/mesh3d/colorbar/_tickprefix.py                                     |   13
 plotly/validators/mesh3d/colorbar/_ticks.py                                          |   12
 plotly/validators/mesh3d/colorbar/_ticksuffix.py                                     |   13
 plotly/validators/mesh3d/colorbar/_ticktext.py                                       |   11
 plotly/validators/mesh3d/colorbar/_ticktextsrc.py                                    |   13
 plotly/validators/mesh3d/colorbar/_tickvals.py                                       |   11
 plotly/validators/mesh3d/colorbar/_tickvalssrc.py                                    |   13
 plotly/validators/mesh3d/colorbar/_tickwidth.py                                      |   14
 plotly/validators/mesh3d/colorbar/_title.py                                          |   33
 plotly/validators/mesh3d/colorbar/_x.py                                              |   11
 plotly/validators/mesh3d/colorbar/_xanchor.py                                        |   12
 plotly/validators/mesh3d/colorbar/_xpad.py                                           |   12
 plotly/validators/mesh3d/colorbar/_xref.py                                           |   12
 plotly/validators/mesh3d/colorbar/_y.py                                              |   11
 plotly/validators/mesh3d/colorbar/_yanchor.py                                        |   12
 plotly/validators/mesh3d/colorbar/_ypad.py                                           |   12
 plotly/validators/mesh3d/colorbar/_yref.py                                           |   12
 plotly/validators/mesh3d/colorbar/tickfont/__init__.py                               |   15
 plotly/validators/mesh3d/colorbar/tickfont/_color.py                                 |   13
 plotly/validators/mesh3d/colorbar/tickfont/_family.py                                |   15
 plotly/validators/mesh3d/colorbar/tickfont/_size.py                                  |   14
 plotly/validators/mesh3d/colorbar/tickformatstop/__init__.py                         |   23
 plotly/validators/mesh3d/colorbar/tickformatstop/_dtickrange.py                      |   23
 plotly/validators/mesh3d/colorbar/tickformatstop/_enabled.py                         |   16
 plotly/validators/mesh3d/colorbar/tickformatstop/_name.py                            |   13
 plotly/validators/mesh3d/colorbar/tickformatstop/_templateitemname.py                |   16
 plotly/validators/mesh3d/colorbar/tickformatstop/_value.py                           |   16
 plotly/validators/mesh3d/colorbar/title/__init__.py                                  |   15
 plotly/validators/mesh3d/colorbar/title/_font.py                                     |   39
 plotly/validators/mesh3d/colorbar/title/_side.py                                     |   14
 plotly/validators/mesh3d/colorbar/title/_text.py                                     |   13
 plotly/validators/mesh3d/colorbar/title/font/__init__.py                             |   15
 plotly/validators/mesh3d/colorbar/title/font/_color.py                               |   13
 plotly/validators/mesh3d/colorbar/title/font/_family.py                              |   15
 plotly/validators/mesh3d/colorbar/title/font/_size.py                                |   14
 plotly/validators/mesh3d/contour/__init__.py                                         |   15
 plotly/validators/mesh3d/contour/_color.py                                           |   11
 plotly/validators/mesh3d/contour/_show.py                                            |   11
 plotly/validators/mesh3d/contour/_width.py                                           |   13
 plotly/validators/mesh3d/hoverlabel/__init__.py                                      |   31
 plotly/validators/mesh3d/hoverlabel/_align.py                                        |   13
 plotly/validators/mesh3d/hoverlabel/_alignsrc.py                                     |   13
 plotly/validators/mesh3d/hoverlabel/_bgcolor.py                                      |   14
 plotly/validators/mesh3d/hoverlabel/_bgcolorsrc.py                                   |   13
 plotly/validators/mesh3d/hoverlabel/_bordercolor.py                                  |   14
 plotly/validators/mesh3d/hoverlabel/_bordercolorsrc.py                               |   13
 plotly/validators/mesh3d/hoverlabel/_font.py                                         |   46
 plotly/validators/mesh3d/hoverlabel/_namelength.py                                   |   15
 plotly/validators/mesh3d/hoverlabel/_namelengthsrc.py                                |   13
 plotly/validators/mesh3d/hoverlabel/font/__init__.py                                 |   25
 plotly/validators/mesh3d/hoverlabel/font/_color.py                                   |   14
 plotly/validators/mesh3d/hoverlabel/font/_colorsrc.py                                |   13
 plotly/validators/mesh3d/hoverlabel/font/_family.py                                  |   16
 plotly/validators/mesh3d/hoverlabel/font/_familysrc.py                               |   13
 plotly/validators/mesh3d/hoverlabel/font/_size.py                                    |   15
 plotly/validators/mesh3d/hoverlabel/font/_sizesrc.py                                 |   13
 plotly/validators/mesh3d/legendgrouptitle/__init__.py                                |   12
 plotly/validators/mesh3d/legendgrouptitle/_font.py                                   |   39
 plotly/validators/mesh3d/legendgrouptitle/_text.py                                   |   13
 plotly/validators/mesh3d/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/mesh3d/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/mesh3d/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/mesh3d/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/mesh3d/lighting/__init__.py                                        |   27
 plotly/validators/mesh3d/lighting/_ambient.py                                        |   13
 plotly/validators/mesh3d/lighting/_diffuse.py                                        |   13
 plotly/validators/mesh3d/lighting/_facenormalsepsilon.py                             |   15
 plotly/validators/mesh3d/lighting/_fresnel.py                                        |   13
 plotly/validators/mesh3d/lighting/_roughness.py                                      |   15
 plotly/validators/mesh3d/lighting/_specular.py                                       |   13
 plotly/validators/mesh3d/lighting/_vertexnormalsepsilon.py                           |   18
 plotly/validators/mesh3d/lightposition/__init__.py                                   |   13
 plotly/validators/mesh3d/lightposition/_x.py                                         |   13
 plotly/validators/mesh3d/lightposition/_y.py                                         |   13
 plotly/validators/mesh3d/lightposition/_z.py                                         |   13
 plotly/validators/mesh3d/stream/__init__.py                                          |   12
 plotly/validators/mesh3d/stream/_maxpoints.py                                        |   13
 plotly/validators/mesh3d/stream/_token.py                                            |   13
 plotly/validators/ohlc/__init__.py                                                   |  109
 plotly/validators/ohlc/_close.py                                                     |   11
 plotly/validators/ohlc/_closesrc.py                                                  |   11
 plotly/validators/ohlc/_customdata.py                                                |   11
 plotly/validators/ohlc/_customdatasrc.py                                             |   11
 plotly/validators/ohlc/_decreasing.py                                                |   19
 plotly/validators/ohlc/_high.py                                                      |   11
 plotly/validators/ohlc/_highsrc.py                                                   |   11
 plotly/validators/ohlc/_hoverinfo.py                                                 |   14
 plotly/validators/ohlc/_hoverinfosrc.py                                              |   11
 plotly/validators/ohlc/_hoverlabel.py                                                |   54
 plotly/validators/ohlc/_hovertext.py                                                 |   12
 plotly/validators/ohlc/_hovertextsrc.py                                              |   11
 plotly/validators/ohlc/_ids.py                                                       |   11
 plotly/validators/ohlc/_idssrc.py                                                    |   11
 plotly/validators/ohlc/_increasing.py                                                |   19
 plotly/validators/ohlc/_legend.py                                                    |   12
 plotly/validators/ohlc/_legendgroup.py                                               |   11
 plotly/validators/ohlc/_legendgrouptitle.py                                          |   20
 plotly/validators/ohlc/_legendrank.py                                                |   11
 plotly/validators/ohlc/_legendwidth.py                                               |   12
 plotly/validators/ohlc/_line.py                                                      |   29
 plotly/validators/ohlc/_low.py                                                       |   11
 plotly/validators/ohlc/_lowsrc.py                                                    |   11
 plotly/validators/ohlc/_meta.py                                                      |   12
 plotly/validators/ohlc/_metasrc.py                                                   |   11
 plotly/validators/ohlc/_name.py                                                      |   11
 plotly/validators/ohlc/_opacity.py                                                   |   13
 plotly/validators/ohlc/_open.py                                                      |   11
 plotly/validators/ohlc/_opensrc.py                                                   |   11
 plotly/validators/ohlc/_selectedpoints.py                                            |   11
 plotly/validators/ohlc/_showlegend.py                                                |   11
 plotly/validators/ohlc/_stream.py                                                    |   25
 plotly/validators/ohlc/_text.py                                                      |   12
 plotly/validators/ohlc/_textsrc.py                                                   |   11
 plotly/validators/ohlc/_tickwidth.py                                                 |   13
 plotly/validators/ohlc/_uid.py                                                       |   11
 plotly/validators/ohlc/_uirevision.py                                                |   11
 plotly/validators/ohlc/_visible.py                                                   |   12
 plotly/validators/ohlc/_x.py                                                         |   11
 plotly/validators/ohlc/_xaxis.py                                                     |   12
 plotly/validators/ohlc/_xcalendar.py                                                 |   32
 plotly/validators/ohlc/_xhoverformat.py                                              |   11
 plotly/validators/ohlc/_xperiod.py                                                   |   11
 plotly/validators/ohlc/_xperiod0.py                                                  |   11
 plotly/validators/ohlc/_xperiodalignment.py                                          |   12
 plotly/validators/ohlc/_xsrc.py                                                      |   11
 plotly/validators/ohlc/_yaxis.py                                                     |   12
 plotly/validators/ohlc/_yhoverformat.py                                              |   11
 plotly/validators/ohlc/decreasing/__init__.py                                        |   11
 plotly/validators/ohlc/decreasing/_line.py                                           |   25
 plotly/validators/ohlc/decreasing/line/__init__.py                                   |   15
 plotly/validators/ohlc/decreasing/line/_color.py                                     |   13
 plotly/validators/ohlc/decreasing/line/_dash.py                                      |   16
 plotly/validators/ohlc/decreasing/line/_width.py                                     |   14
 plotly/validators/ohlc/hoverlabel/__init__.py                                        |   33
 plotly/validators/ohlc/hoverlabel/_align.py                                          |   13
 plotly/validators/ohlc/hoverlabel/_alignsrc.py                                       |   11
 plotly/validators/ohlc/hoverlabel/_bgcolor.py                                        |   12
 plotly/validators/ohlc/hoverlabel/_bgcolorsrc.py                                     |   13
 plotly/validators/ohlc/hoverlabel/_bordercolor.py                                    |   14
 plotly/validators/ohlc/hoverlabel/_bordercolorsrc.py                                 |   13
 plotly/validators/ohlc/hoverlabel/_font.py                                           |   46
 plotly/validators/ohlc/hoverlabel/_namelength.py                                     |   15
 plotly/validators/ohlc/hoverlabel/_namelengthsrc.py                                  |   13
 plotly/validators/ohlc/hoverlabel/_split.py                                          |   11
 plotly/validators/ohlc/hoverlabel/font/__init__.py                                   |   25
 plotly/validators/ohlc/hoverlabel/font/_color.py                                     |   14
 plotly/validators/ohlc/hoverlabel/font/_colorsrc.py                                  |   13
 plotly/validators/ohlc/hoverlabel/font/_family.py                                    |   16
 plotly/validators/ohlc/hoverlabel/font/_familysrc.py                                 |   13
 plotly/validators/ohlc/hoverlabel/font/_size.py                                      |   15
 plotly/validators/ohlc/hoverlabel/font/_sizesrc.py                                   |   13
 plotly/validators/ohlc/increasing/__init__.py                                        |   11
 plotly/validators/ohlc/increasing/_line.py                                           |   25
 plotly/validators/ohlc/increasing/line/__init__.py                                   |   15
 plotly/validators/ohlc/increasing/line/_color.py                                     |   13
 plotly/validators/ohlc/increasing/line/_dash.py                                      |   16
 plotly/validators/ohlc/increasing/line/_width.py                                     |   14
 plotly/validators/ohlc/legendgrouptitle/__init__.py                                  |   12
 plotly/validators/ohlc/legendgrouptitle/_font.py                                     |   39
 plotly/validators/ohlc/legendgrouptitle/_text.py                                     |   13
 plotly/validators/ohlc/legendgrouptitle/font/__init__.py                             |   15
 plotly/validators/ohlc/legendgrouptitle/font/_color.py                               |   13
 plotly/validators/ohlc/legendgrouptitle/font/_family.py                              |   15
 plotly/validators/ohlc/legendgrouptitle/font/_size.py                                |   14
 plotly/validators/ohlc/line/__init__.py                                              |   12
 plotly/validators/ohlc/line/_dash.py                                                 |   14
 plotly/validators/ohlc/line/_width.py                                                |   12
 plotly/validators/ohlc/stream/__init__.py                                            |   12
 plotly/validators/ohlc/stream/_maxpoints.py                                          |   13
 plotly/validators/ohlc/stream/_token.py                                              |   13
 plotly/validators/parcats/__init__.py                                                |   59
 plotly/validators/parcats/_arrangement.py                                            |   12
 plotly/validators/parcats/_bundlecolors.py                                           |   11
 plotly/validators/parcats/_counts.py                                                 |   13
 plotly/validators/parcats/_countssrc.py                                              |   11
 plotly/validators/parcats/_dimensiondefaults.py                                      |   18
 plotly/validators/parcats/_dimensions.py                                             |   66
 plotly/validators/parcats/_domain.py                                                 |   29
 plotly/validators/parcats/_hoverinfo.py                                              |   14
 plotly/validators/parcats/_hoveron.py                                                |   12
 plotly/validators/parcats/_hovertemplate.py                                          |   11
 plotly/validators/parcats/_labelfont.py                                              |   37
 plotly/validators/parcats/_legendgrouptitle.py                                       |   20
 plotly/validators/parcats/_legendwidth.py                                            |   12
 plotly/validators/parcats/_line.py                                                   |  142
 plotly/validators/parcats/_meta.py                                                   |   12
 plotly/validators/parcats/_metasrc.py                                                |   11
 plotly/validators/parcats/_name.py                                                   |   11
 plotly/validators/parcats/_sortpaths.py                                              |   12
 plotly/validators/parcats/_stream.py                                                 |   25
 plotly/validators/parcats/_tickfont.py                                               |   37
 plotly/validators/parcats/_uid.py                                                    |   11
 plotly/validators/parcats/_uirevision.py                                             |   11
 plotly/validators/parcats/_visible.py                                                |   12
 plotly/validators/parcats/dimension/__init__.py                                      |   33
 plotly/validators/parcats/dimension/_categoryarray.py                                |   13
 plotly/validators/parcats/dimension/_categoryarraysrc.py                             |   13
 plotly/validators/parcats/dimension/_categoryorder.py                                |   17
 plotly/validators/parcats/dimension/_displayindex.py                                 |   13
 plotly/validators/parcats/dimension/_label.py                                        |   11
 plotly/validators/parcats/dimension/_ticktext.py                                     |   13
 plotly/validators/parcats/dimension/_ticktextsrc.py                                  |   13
 plotly/validators/parcats/dimension/_values.py                                       |   11
 plotly/validators/parcats/dimension/_valuessrc.py                                    |   13
 plotly/validators/parcats/dimension/_visible.py                                      |   13
 plotly/validators/parcats/domain/__init__.py                                         |   21
 plotly/validators/parcats/domain/_column.py                                          |   12
 plotly/validators/parcats/domain/_row.py                                             |   12
 plotly/validators/parcats/domain/_x.py                                               |   18
 plotly/validators/parcats/domain/_y.py                                               |   18
 plotly/validators/parcats/labelfont/__init__.py                                      |   15
 plotly/validators/parcats/labelfont/_color.py                                        |   11
 plotly/validators/parcats/labelfont/_family.py                                       |   13
 plotly/validators/parcats/labelfont/_size.py                                         |   12
 plotly/validators/parcats/legendgrouptitle/__init__.py                               |   12
 plotly/validators/parcats/legendgrouptitle/_font.py                                  |   39
 plotly/validators/parcats/legendgrouptitle/_text.py                                  |   13
 plotly/validators/parcats/legendgrouptitle/font/__init__.py                          |   15
 plotly/validators/parcats/legendgrouptitle/font/_color.py                            |   13
 plotly/validators/parcats/legendgrouptitle/font/_family.py                           |   18
 plotly/validators/parcats/legendgrouptitle/font/_size.py                             |   14
 plotly/validators/parcats/line/__init__.py                                           |   41
 plotly/validators/parcats/line/_autocolorscale.py                                    |   14
 plotly/validators/parcats/line/_cauto.py                                             |   12
 plotly/validators/parcats/line/_cmax.py                                              |   12
 plotly/validators/parcats/line/_cmid.py                                              |   12
 plotly/validators/parcats/line/_cmin.py                                              |   12
 plotly/validators/parcats/line/_color.py                                             |   13
 plotly/validators/parcats/line/_coloraxis.py                                         |   13
 plotly/validators/parcats/line/_colorbar.py                                          |  295
 plotly/validators/parcats/line/_colorscale.py                                        |   12
 plotly/validators/parcats/line/_colorsrc.py                                          |   11
 plotly/validators/parcats/line/_hovertemplate.py                                     |   13
 plotly/validators/parcats/line/_reversescale.py                                      |   13
 plotly/validators/parcats/line/_shape.py                                             |   12
 plotly/validators/parcats/line/_showscale.py                                         |   11
 plotly/validators/parcats/line/colorbar/__init__.py                                  |  111
 plotly/validators/parcats/line/colorbar/_bgcolor.py                                  |   13
 plotly/validators/parcats/line/colorbar/_bordercolor.py                              |   13
 plotly/validators/parcats/line/colorbar/_borderwidth.py                              |   14
 plotly/validators/parcats/line/colorbar/_dtick.py                                    |   14
 plotly/validators/parcats/line/colorbar/_exponentformat.py                           |   17
 plotly/validators/parcats/line/colorbar/_labelalias.py                               |   13
 plotly/validators/parcats/line/colorbar/_len.py                                      |   14
 plotly/validators/parcats/line/colorbar/_lenmode.py                                  |   14
 plotly/validators/parcats/line/colorbar/_minexponent.py                              |   14
 plotly/validators/parcats/line/colorbar/_nticks.py                                   |   14
 plotly/validators/parcats/line/colorbar/_orientation.py                              |   14
 plotly/validators/parcats/line/colorbar/_outlinecolor.py                             |   13
 plotly/validators/parcats/line/colorbar/_outlinewidth.py                             |   14
 plotly/validators/parcats/line/colorbar/_separatethousands.py                        |   16
 plotly/validators/parcats/line/colorbar/_showexponent.py                             |   14
 plotly/validators/parcats/line/colorbar/_showticklabels.py                           |   16
 plotly/validators/parcats/line/colorbar/_showtickprefix.py                           |   17
 plotly/validators/parcats/line/colorbar/_showticksuffix.py                           |   17
 plotly/validators/parcats/line/colorbar/_thickness.py                                |   14
 plotly/validators/parcats/line/colorbar/_thicknessmode.py                            |   14
 plotly/validators/parcats/line/colorbar/_tick0.py                                    |   14
 plotly/validators/parcats/line/colorbar/_tickangle.py                                |   13
 plotly/validators/parcats/line/colorbar/_tickcolor.py                                |   13
 plotly/validators/parcats/line/colorbar/_tickfont.py                                 |   39
 plotly/validators/parcats/line/colorbar/_tickformat.py                               |   13
 plotly/validators/parcats/line/colorbar/_tickformatstopdefaults.py                   |   21
 plotly/validators/parcats/line/colorbar/_tickformatstops.py                          |   54
 plotly/validators/parcats/line/colorbar/_ticklabeloverflow.py                        |   17
 plotly/validators/parcats/line/colorbar/_ticklabelposition.py                        |   31
 plotly/validators/parcats/line/colorbar/_ticklabelstep.py                            |   14
 plotly/validators/parcats/line/colorbar/_ticklen.py                                  |   14
 plotly/validators/parcats/line/colorbar/_tickmode.py                                 |   15
 plotly/validators/parcats/line/colorbar/_tickprefix.py                               |   13
 plotly/validators/parcats/line/colorbar/_ticks.py                                    |   14
 plotly/validators/parcats/line/colorbar/_ticksuffix.py                               |   13
 plotly/validators/parcats/line/colorbar/_ticktext.py                                 |   13
 plotly/validators/parcats/line/colorbar/_ticktextsrc.py                              |   13
 plotly/validators/parcats/line/colorbar/_tickvals.py                                 |   13
 plotly/validators/parcats/line/colorbar/_tickvalssrc.py                              |   13
 plotly/validators/parcats/line/colorbar/_tickwidth.py                                |   14
 plotly/validators/parcats/line/colorbar/_title.py                                    |   35
 plotly/validators/parcats/line/colorbar/_x.py                                        |   11
 plotly/validators/parcats/line/colorbar/_xanchor.py                                  |   14
 plotly/validators/parcats/line/colorbar/_xpad.py                                     |   14
 plotly/validators/parcats/line/colorbar/_xref.py                                     |   14
 plotly/validators/parcats/line/colorbar/_y.py                                        |   11
 plotly/validators/parcats/line/colorbar/_yanchor.py                                  |   14
 plotly/validators/parcats/line/colorbar/_ypad.py                                     |   14
 plotly/validators/parcats/line/colorbar/_yref.py                                     |   14
 plotly/validators/parcats/line/colorbar/tickfont/__init__.py                         |   15
 plotly/validators/parcats/line/colorbar/tickfont/_color.py                           |   16
 plotly/validators/parcats/line/colorbar/tickfont/_family.py                          |   18
 plotly/validators/parcats/line/colorbar/tickfont/_size.py                            |   14
 plotly/validators/parcats/line/colorbar/tickformatstop/__init__.py                   |   23
 plotly/validators/parcats/line/colorbar/tickformatstop/_dtickrange.py                |   23
 plotly/validators/parcats/line/colorbar/tickformatstop/_enabled.py                   |   16
 plotly/validators/parcats/line/colorbar/tickformatstop/_name.py                      |   16
 plotly/validators/parcats/line/colorbar/tickformatstop/_templateitemname.py          |   16
 plotly/validators/parcats/line/colorbar/tickformatstop/_value.py                     |   16
 plotly/validators/parcats/line/colorbar/title/__init__.py                            |   15
 plotly/validators/parcats/line/colorbar/title/_font.py                               |   39
 plotly/validators/parcats/line/colorbar/title/_side.py                               |   14
 plotly/validators/parcats/line/colorbar/title/_text.py                               |   13
 plotly/validators/parcats/line/colorbar/title/font/__init__.py                       |   15
 plotly/validators/parcats/line/colorbar/title/font/_color.py                         |   16
 plotly/validators/parcats/line/colorbar/title/font/_family.py                        |   18
 plotly/validators/parcats/line/colorbar/title/font/_size.py                          |   17
 plotly/validators/parcats/stream/__init__.py                                         |   12
 plotly/validators/parcats/stream/_maxpoints.py                                       |   13
 plotly/validators/parcats/stream/_token.py                                           |   13
 plotly/validators/parcats/tickfont/__init__.py                                       |   15
 plotly/validators/parcats/tickfont/_color.py                                         |   11
 plotly/validators/parcats/tickfont/_family.py                                        |   13
 plotly/validators/parcats/tickfont/_size.py                                          |   12
 plotly/validators/parcoords/__init__.py                                              |   63
 plotly/validators/parcoords/_customdata.py                                           |   11
 plotly/validators/parcoords/_customdatasrc.py                                        |   11
 plotly/validators/parcoords/_dimensiondefaults.py                                    |   18
 plotly/validators/parcoords/_dimensions.py                                           |   93
 plotly/validators/parcoords/_domain.py                                               |   29
 plotly/validators/parcoords/_ids.py                                                  |   11
 plotly/validators/parcoords/_idssrc.py                                               |   11
 plotly/validators/parcoords/_labelangle.py                                           |   11
 plotly/validators/parcoords/_labelfont.py                                            |   37
 plotly/validators/parcoords/_labelside.py                                            |   12
 plotly/validators/parcoords/_legend.py                                               |   12
 plotly/validators/parcoords/_legendgrouptitle.py                                     |   22
 plotly/validators/parcoords/_legendrank.py                                           |   11
 plotly/validators/parcoords/_legendwidth.py                                          |   12
 plotly/validators/parcoords/_line.py                                                 |  102
 plotly/validators/parcoords/_meta.py                                                 |   12
 plotly/validators/parcoords/_metasrc.py                                              |   11
 plotly/validators/parcoords/_name.py                                                 |   11
 plotly/validators/parcoords/_rangefont.py                                            |   37
 plotly/validators/parcoords/_stream.py                                               |   25
 plotly/validators/parcoords/_tickfont.py                                             |   37
 plotly/validators/parcoords/_uid.py                                                  |   11
 plotly/validators/parcoords/_uirevision.py                                           |   11
 plotly/validators/parcoords/_unselected.py                                           |   20
 plotly/validators/parcoords/_visible.py                                              |   12
 plotly/validators/parcoords/dimension/__init__.py                                    |   41
 plotly/validators/parcoords/dimension/_constraintrange.py                            |   22
 plotly/validators/parcoords/dimension/_label.py                                      |   13
 plotly/validators/parcoords/dimension/_multiselect.py                                |   13
 plotly/validators/parcoords/dimension/_name.py                                       |   11
 plotly/validators/parcoords/dimension/_range.py                                      |   20
 plotly/validators/parcoords/dimension/_templateitemname.py                           |   16
 plotly/validators/parcoords/dimension/_tickformat.py                                 |   13
 plotly/validators/parcoords/dimension/_ticktext.py                                   |   13
 plotly/validators/parcoords/dimension/_ticktextsrc.py                                |   13
 plotly/validators/parcoords/dimension/_tickvals.py                                   |   13
 plotly/validators/parcoords/dimension/_tickvalssrc.py                                |   13
 plotly/validators/parcoords/dimension/_values.py                                     |   13
 plotly/validators/parcoords/dimension/_valuessrc.py                                  |   13
 plotly/validators/parcoords/dimension/_visible.py                                    |   13
 plotly/validators/parcoords/domain/__init__.py                                       |   21
 plotly/validators/parcoords/domain/_column.py                                        |   12
 plotly/validators/parcoords/domain/_row.py                                           |   12
 plotly/validators/parcoords/domain/_x.py                                             |   18
 plotly/validators/parcoords/domain/_y.py                                             |   18
 plotly/validators/parcoords/labelfont/__init__.py                                    |   15
 plotly/validators/parcoords/labelfont/_color.py                                      |   13
 plotly/validators/parcoords/labelfont/_family.py                                     |   15
 plotly/validators/parcoords/labelfont/_size.py                                       |   12
 plotly/validators/parcoords/legendgrouptitle/__init__.py                             |   12
 plotly/validators/parcoords/legendgrouptitle/_font.py                                |   39
 plotly/validators/parcoords/legendgrouptitle/_text.py                                |   13
 plotly/validators/parcoords/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/parcoords/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/parcoords/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/parcoords/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/parcoords/line/__init__.py                                         |   37
 plotly/validators/parcoords/line/_autocolorscale.py                                  |   14
 plotly/validators/parcoords/line/_cauto.py                                           |   12
 plotly/validators/parcoords/line/_cmax.py                                            |   12
 plotly/validators/parcoords/line/_cmid.py                                            |   12
 plotly/validators/parcoords/line/_cmin.py                                            |   12
 plotly/validators/parcoords/line/_color.py                                           |   13
 plotly/validators/parcoords/line/_coloraxis.py                                       |   13
 plotly/validators/parcoords/line/_colorbar.py                                        |  295
 plotly/validators/parcoords/line/_colorscale.py                                      |   14
 plotly/validators/parcoords/line/_colorsrc.py                                        |   11
 plotly/validators/parcoords/line/_reversescale.py                                    |   13
 plotly/validators/parcoords/line/_showscale.py                                       |   11
 plotly/validators/parcoords/line/colorbar/__init__.py                                |  111
 plotly/validators/parcoords/line/colorbar/_bgcolor.py                                |   13
 plotly/validators/parcoords/line/colorbar/_bordercolor.py                            |   13
 plotly/validators/parcoords/line/colorbar/_borderwidth.py                            |   14
 plotly/validators/parcoords/line/colorbar/_dtick.py                                  |   14
 plotly/validators/parcoords/line/colorbar/_exponentformat.py                         |   17
 plotly/validators/parcoords/line/colorbar/_labelalias.py                             |   13
 plotly/validators/parcoords/line/colorbar/_len.py                                    |   14
 plotly/validators/parcoords/line/colorbar/_lenmode.py                                |   14
 plotly/validators/parcoords/line/colorbar/_minexponent.py                            |   14
 plotly/validators/parcoords/line/colorbar/_nticks.py                                 |   14
 plotly/validators/parcoords/line/colorbar/_orientation.py                            |   14
 plotly/validators/parcoords/line/colorbar/_outlinecolor.py                           |   16
 plotly/validators/parcoords/line/colorbar/_outlinewidth.py                           |   17
 plotly/validators/parcoords/line/colorbar/_separatethousands.py                      |   16
 plotly/validators/parcoords/line/colorbar/_showexponent.py                           |   17
 plotly/validators/parcoords/line/colorbar/_showticklabels.py                         |   16
 plotly/validators/parcoords/line/colorbar/_showtickprefix.py                         |   17
 plotly/validators/parcoords/line/colorbar/_showticksuffix.py                         |   17
 plotly/validators/parcoords/line/colorbar/_thickness.py                              |   14
 plotly/validators/parcoords/line/colorbar/_thicknessmode.py                          |   17
 plotly/validators/parcoords/line/colorbar/_tick0.py                                  |   14
 plotly/validators/parcoords/line/colorbar/_tickangle.py                              |   13
 plotly/validators/parcoords/line/colorbar/_tickcolor.py                              |   13
 plotly/validators/parcoords/line/colorbar/_tickfont.py                               |   39
 plotly/validators/parcoords/line/colorbar/_tickformat.py                             |   13
 plotly/validators/parcoords/line/colorbar/_tickformatstopdefaults.py                 |   21
 plotly/validators/parcoords/line/colorbar/_tickformatstops.py                        |   54
 plotly/validators/parcoords/line/colorbar/_ticklabeloverflow.py                      |   17
 plotly/validators/parcoords/line/colorbar/_ticklabelposition.py                      |   31
 plotly/validators/parcoords/line/colorbar/_ticklabelstep.py                          |   17
 plotly/validators/parcoords/line/colorbar/_ticklen.py                                |   14
 plotly/validators/parcoords/line/colorbar/_tickmode.py                               |   15
 plotly/validators/parcoords/line/colorbar/_tickprefix.py                             |   13
 plotly/validators/parcoords/line/colorbar/_ticks.py                                  |   14
 plotly/validators/parcoords/line/colorbar/_ticksuffix.py                             |   13
 plotly/validators/parcoords/line/colorbar/_ticktext.py                               |   13
 plotly/validators/parcoords/line/colorbar/_ticktextsrc.py                            |   13
 plotly/validators/parcoords/line/colorbar/_tickvals.py                               |   13
 plotly/validators/parcoords/line/colorbar/_tickvalssrc.py                            |   13
 plotly/validators/parcoords/line/colorbar/_tickwidth.py                              |   14
 plotly/validators/parcoords/line/colorbar/_title.py                                  |   35
 plotly/validators/parcoords/line/colorbar/_x.py                                      |   13
 plotly/validators/parcoords/line/colorbar/_xanchor.py                                |   14
 plotly/validators/parcoords/line/colorbar/_xpad.py                                   |   14
 plotly/validators/parcoords/line/colorbar/_xref.py                                   |   14
 plotly/validators/parcoords/line/colorbar/_y.py                                      |   13
 plotly/validators/parcoords/line/colorbar/_yanchor.py                                |   14
 plotly/validators/parcoords/line/colorbar/_ypad.py                                   |   14
 plotly/validators/parcoords/line/colorbar/_yref.py                                   |   14
 plotly/validators/parcoords/line/colorbar/tickfont/__init__.py                       |   15
 plotly/validators/parcoords/line/colorbar/tickfont/_color.py                         |   16
 plotly/validators/parcoords/line/colorbar/tickfont/_family.py                        |   18
 plotly/validators/parcoords/line/colorbar/tickfont/_size.py                          |   17
 plotly/validators/parcoords/line/colorbar/tickformatstop/__init__.py                 |   23
 plotly/validators/parcoords/line/colorbar/tickformatstop/_dtickrange.py              |   23
 plotly/validators/parcoords/line/colorbar/tickformatstop/_enabled.py                 |   16
 plotly/validators/parcoords/line/colorbar/tickformatstop/_name.py                    |   16
 plotly/validators/parcoords/line/colorbar/tickformatstop/_templateitemname.py        |   16
 plotly/validators/parcoords/line/colorbar/tickformatstop/_value.py                   |   16
 plotly/validators/parcoords/line/colorbar/title/__init__.py                          |   15
 plotly/validators/parcoords/line/colorbar/title/_font.py                             |   39
 plotly/validators/parcoords/line/colorbar/title/_side.py                             |   14
 plotly/validators/parcoords/line/colorbar/title/_text.py                             |   13
 plotly/validators/parcoords/line/colorbar/title/font/__init__.py                     |   15
 plotly/validators/parcoords/line/colorbar/title/font/_color.py                       |   16
 plotly/validators/parcoords/line/colorbar/title/font/_family.py                      |   18
 plotly/validators/parcoords/line/colorbar/title/font/_size.py                        |   17
 plotly/validators/parcoords/rangefont/__init__.py                                    |   15
 plotly/validators/parcoords/rangefont/_color.py                                      |   13
 plotly/validators/parcoords/rangefont/_family.py                                     |   15
 plotly/validators/parcoords/rangefont/_size.py                                       |   12
 plotly/validators/parcoords/stream/__init__.py                                       |   12
 plotly/validators/parcoords/stream/_maxpoints.py                                     |   15
 plotly/validators/parcoords/stream/_token.py                                         |   13
 plotly/validators/parcoords/tickfont/__init__.py                                     |   15
 plotly/validators/parcoords/tickfont/_color.py                                       |   11
 plotly/validators/parcoords/tickfont/_family.py                                      |   15
 plotly/validators/parcoords/tickfont/_size.py                                        |   12
 plotly/validators/parcoords/unselected/__init__.py                                   |   11
 plotly/validators/parcoords/unselected/_line.py                                      |   26
 plotly/validators/parcoords/unselected/line/__init__.py                              |   12
 plotly/validators/parcoords/unselected/line/_color.py                                |   13
 plotly/validators/parcoords/unselected/line/_opacity.py                              |   15
 plotly/validators/pie/__init__.py                                                    |  119
 plotly/validators/pie/_automargin.py                                                 |   11
 plotly/validators/pie/_customdata.py                                                 |   11
 plotly/validators/pie/_customdatasrc.py                                              |   11
 plotly/validators/pie/_direction.py                                                  |   12
 plotly/validators/pie/_dlabel.py                                                     |   11
 plotly/validators/pie/_domain.py                                                     |   28
 plotly/validators/pie/_hole.py                                                       |   13
 plotly/validators/pie/_hoverinfo.py                                                  |   14
 plotly/validators/pie/_hoverinfosrc.py                                               |   11
 plotly/validators/pie/_hoverlabel.py                                                 |   51
 plotly/validators/pie/_hovertemplate.py                                              |   12
 plotly/validators/pie/_hovertemplatesrc.py                                           |   11
 plotly/validators/pie/_hovertext.py                                                  |   12
 plotly/validators/pie/_hovertextsrc.py                                               |   11
 plotly/validators/pie/_ids.py                                                        |   11
 plotly/validators/pie/_idssrc.py                                                     |   11
 plotly/validators/pie/_insidetextfont.py                                             |   46
 plotly/validators/pie/_insidetextorientation.py                                      |   14
 plotly/validators/pie/_label0.py                                                     |   11
 plotly/validators/pie/_labels.py                                                     |   11
 plotly/validators/pie/_labelssrc.py                                                  |   11
 plotly/validators/pie/_legend.py                                                     |   12
 plotly/validators/pie/_legendgroup.py                                                |   11
 plotly/validators/pie/_legendgrouptitle.py                                           |   20
 plotly/validators/pie/_legendrank.py                                                 |   11
 plotly/validators/pie/_legendwidth.py                                                |   12
 plotly/validators/pie/_marker.py                                                     |   28
 plotly/validators/pie/_meta.py                                                       |   12
 plotly/validators/pie/_metasrc.py                                                    |   11
 plotly/validators/pie/_name.py                                                       |   11
 plotly/validators/pie/_opacity.py                                                    |   13
 plotly/validators/pie/_outsidetextfont.py                                            |   46
 plotly/validators/pie/_pull.py                                                       |   14
 plotly/validators/pie/_pullsrc.py                                                    |   11
 plotly/validators/pie/_rotation.py                                                   |   11
 plotly/validators/pie/_scalegroup.py                                                 |   11
 plotly/validators/pie/_showlegend.py                                                 |   11
 plotly/validators/pie/_sort.py                                                       |   11
 plotly/validators/pie/_stream.py                                                     |   25
 plotly/validators/pie/_text.py                                                       |   11
 plotly/validators/pie/_textfont.py                                                   |   46
 plotly/validators/pie/_textinfo.py                                                   |   13
 plotly/validators/pie/_textposition.py                                               |   13
 plotly/validators/pie/_textpositionsrc.py                                            |   11
 plotly/validators/pie/_textsrc.py                                                    |   11
 plotly/validators/pie/_texttemplate.py                                               |   12
 plotly/validators/pie/_texttemplatesrc.py                                            |   11
 plotly/validators/pie/_title.py                                                      |   30
 plotly/validators/pie/_uid.py                                                        |   11
 plotly/validators/pie/_uirevision.py                                                 |   11
 plotly/validators/pie/_values.py                                                     |   11
 plotly/validators/pie/_valuessrc.py                                                  |   11
 plotly/validators/pie/_visible.py                                                    |   12
 plotly/validators/pie/domain/__init__.py                                             |   21
 plotly/validators/pie/domain/_column.py                                              |   12
 plotly/validators/pie/domain/_row.py                                                 |   12
 plotly/validators/pie/domain/_x.py                                                   |   18
 plotly/validators/pie/domain/_y.py                                                   |   18
 plotly/validators/pie/hoverlabel/__init__.py                                         |   31
 plotly/validators/pie/hoverlabel/_align.py                                           |   13
 plotly/validators/pie/hoverlabel/_alignsrc.py                                        |   11
 plotly/validators/pie/hoverlabel/_bgcolor.py                                         |   12
 plotly/validators/pie/hoverlabel/_bgcolorsrc.py                                      |   13
 plotly/validators/pie/hoverlabel/_bordercolor.py                                     |   14
 plotly/validators/pie/hoverlabel/_bordercolorsrc.py                                  |   13
 plotly/validators/pie/hoverlabel/_font.py                                            |   46
 plotly/validators/pie/hoverlabel/_namelength.py                                      |   15
 plotly/validators/pie/hoverlabel/_namelengthsrc.py                                   |   13
 plotly/validators/pie/hoverlabel/font/__init__.py                                    |   25
 plotly/validators/pie/hoverlabel/font/_color.py                                      |   14
 plotly/validators/pie/hoverlabel/font/_colorsrc.py                                   |   13
 plotly/validators/pie/hoverlabel/font/_family.py                                     |   16
 plotly/validators/pie/hoverlabel/font/_familysrc.py                                  |   13
 plotly/validators/pie/hoverlabel/font/_size.py                                       |   13
 plotly/validators/pie/hoverlabel/font/_sizesrc.py                                    |   13
 plotly/validators/pie/insidetextfont/__init__.py                                     |   25
 plotly/validators/pie/insidetextfont/_color.py                                       |   12
 plotly/validators/pie/insidetextfont/_colorsrc.py                                    |   13
 plotly/validators/pie/insidetextfont/_family.py                                      |   16
 plotly/validators/pie/insidetextfont/_familysrc.py                                   |   13
 plotly/validators/pie/insidetextfont/_size.py                                        |   13
 plotly/validators/pie/insidetextfont/_sizesrc.py                                     |   13
 plotly/validators/pie/legendgrouptitle/__init__.py                                   |   12
 plotly/validators/pie/legendgrouptitle/_font.py                                      |   39
 plotly/validators/pie/legendgrouptitle/_text.py                                      |   13
 plotly/validators/pie/legendgrouptitle/font/__init__.py                              |   15
 plotly/validators/pie/legendgrouptitle/font/_color.py                                |   13
 plotly/validators/pie/legendgrouptitle/font/_family.py                               |   15
 plotly/validators/pie/legendgrouptitle/font/_size.py                                 |   14
 plotly/validators/pie/marker/__init__.py                                             |   21
 plotly/validators/pie/marker/_colors.py                                              |   11
 plotly/validators/pie/marker/_colorssrc.py                                           |   11
 plotly/validators/pie/marker/_line.py                                                |   28
 plotly/validators/pie/marker/_pattern.py                                             |   64
 plotly/validators/pie/marker/line/__init__.py                                        |   21
 plotly/validators/pie/marker/line/_color.py                                          |   12
 plotly/validators/pie/marker/line/_colorsrc.py                                       |   11
 plotly/validators/pie/marker/line/_width.py                                          |   13
 plotly/validators/pie/marker/line/_widthsrc.py                                       |   11
 plotly/validators/pie/marker/pattern/__init__.py                                     |   37
 plotly/validators/pie/marker/pattern/_bgcolor.py                                     |   14
 plotly/validators/pie/marker/pattern/_bgcolorsrc.py                                  |   13
 plotly/validators/pie/marker/pattern/_fgcolor.py                                     |   14
 plotly/validators/pie/marker/pattern/_fgcolorsrc.py                                  |   13
 plotly/validators/pie/marker/pattern/_fgopacity.py                                   |   15
 plotly/validators/pie/marker/pattern/_fillmode.py                                    |   14
 plotly/validators/pie/marker/pattern/_shape.py                                       |   13
 plotly/validators/pie/marker/pattern/_shapesrc.py                                    |   13
 plotly/validators/pie/marker/pattern/_size.py                                        |   13
 plotly/validators/pie/marker/pattern/_sizesrc.py                                     |   13
 plotly/validators/pie/marker/pattern/_solidity.py                                    |   16
 plotly/validators/pie/marker/pattern/_soliditysrc.py                                 |   13
 plotly/validators/pie/outsidetextfont/__init__.py                                    |   25
 plotly/validators/pie/outsidetextfont/_color.py                                      |   14
 plotly/validators/pie/outsidetextfont/_colorsrc.py                                   |   13
 plotly/validators/pie/outsidetextfont/_family.py                                     |   16
 plotly/validators/pie/outsidetextfont/_familysrc.py                                  |   13
 plotly/validators/pie/outsidetextfont/_size.py                                       |   13
 plotly/validators/pie/outsidetextfont/_sizesrc.py                                    |   13
 plotly/validators/pie/stream/__init__.py                                             |   12
 plotly/validators/pie/stream/_maxpoints.py                                           |   13
 plotly/validators/pie/stream/_token.py                                               |   13
 plotly/validators/pie/textfont/__init__.py                                           |   25
 plotly/validators/pie/textfont/_color.py                                             |   12
 plotly/validators/pie/textfont/_colorsrc.py                                          |   11
 plotly/validators/pie/textfont/_family.py                                            |   14
 plotly/validators/pie/textfont/_familysrc.py                                         |   11
 plotly/validators/pie/textfont/_size.py                                              |   13
 plotly/validators/pie/textfont/_sizesrc.py                                           |   11
 plotly/validators/pie/title/__init__.py                                              |   19
 plotly/validators/pie/title/_font.py                                                 |   46
 plotly/validators/pie/title/_position.py                                             |   23
 plotly/validators/pie/title/_text.py                                                 |   11
 plotly/validators/pie/title/font/__init__.py                                         |   25
 plotly/validators/pie/title/font/_color.py                                           |   12
 plotly/validators/pie/title/font/_colorsrc.py                                        |   11
 plotly/validators/pie/title/font/_family.py                                          |   14
 plotly/validators/pie/title/font/_familysrc.py                                       |   11
 plotly/validators/pie/title/font/_size.py                                            |   13
 plotly/validators/pie/title/font/_sizesrc.py                                         |   11
 plotly/validators/pointcloud/__init__.py                                             |   89
 plotly/validators/pointcloud/_customdata.py                                          |   11
 plotly/validators/pointcloud/_customdatasrc.py                                       |   11
 plotly/validators/pointcloud/_hoverinfo.py                                           |   14
 plotly/validators/pointcloud/_hoverinfosrc.py                                        |   11
 plotly/validators/pointcloud/_hoverlabel.py                                          |   51
 plotly/validators/pointcloud/_ids.py                                                 |   11
 plotly/validators/pointcloud/_idssrc.py                                              |   11
 plotly/validators/pointcloud/_indices.py                                             |   11
 plotly/validators/pointcloud/_indicessrc.py                                          |   11
 plotly/validators/pointcloud/_legend.py                                              |   12
 plotly/validators/pointcloud/_legendgroup.py                                         |   11
 plotly/validators/pointcloud/_legendgrouptitle.py                                    |   22
 plotly/validators/pointcloud/_legendrank.py                                          |   11
 plotly/validators/pointcloud/_legendwidth.py                                         |   12
 plotly/validators/pointcloud/_marker.py                                              |   48
 plotly/validators/pointcloud/_meta.py                                                |   12
 plotly/validators/pointcloud/_metasrc.py                                             |   11
 plotly/validators/pointcloud/_name.py                                                |   11
 plotly/validators/pointcloud/_opacity.py                                             |   13
 plotly/validators/pointcloud/_showlegend.py                                          |   11
 plotly/validators/pointcloud/_stream.py                                              |   25
 plotly/validators/pointcloud/_text.py                                                |   12
 plotly/validators/pointcloud/_textsrc.py                                             |   11
 plotly/validators/pointcloud/_uid.py                                                 |   11
 plotly/validators/pointcloud/_uirevision.py                                          |   11
 plotly/validators/pointcloud/_visible.py                                             |   12
 plotly/validators/pointcloud/_x.py                                                   |   11
 plotly/validators/pointcloud/_xaxis.py                                               |   12
 plotly/validators/pointcloud/_xbounds.py                                             |   11
 plotly/validators/pointcloud/_xboundssrc.py                                          |   11
 plotly/validators/pointcloud/_xsrc.py                                                |   11
 plotly/validators/pointcloud/_xy.py                                                  |   11
 plotly/validators/pointcloud/_xysrc.py                                               |   11
 plotly/validators/pointcloud/_y.py                                                   |   11
 plotly/validators/pointcloud/_yaxis.py                                               |   12
 plotly/validators/pointcloud/_ybounds.py                                             |   11
 plotly/validators/pointcloud/_yboundssrc.py                                          |   11
 plotly/validators/pointcloud/_ysrc.py                                                |   11
 plotly/validators/pointcloud/hoverlabel/__init__.py                                  |   31
 plotly/validators/pointcloud/hoverlabel/_align.py                                    |   15
 plotly/validators/pointcloud/hoverlabel/_alignsrc.py                                 |   13
 plotly/validators/pointcloud/hoverlabel/_bgcolor.py                                  |   14
 plotly/validators/pointcloud/hoverlabel/_bgcolorsrc.py                               |   13
 plotly/validators/pointcloud/hoverlabel/_bordercolor.py                              |   14
 plotly/validators/pointcloud/hoverlabel/_bordercolorsrc.py                           |   16
 plotly/validators/pointcloud/hoverlabel/_font.py                                     |   48
 plotly/validators/pointcloud/hoverlabel/_namelength.py                               |   15
 plotly/validators/pointcloud/hoverlabel/_namelengthsrc.py                            |   13
 plotly/validators/pointcloud/hoverlabel/font/__init__.py                             |   25
 plotly/validators/pointcloud/hoverlabel/font/_color.py                               |   14
 plotly/validators/pointcloud/hoverlabel/font/_colorsrc.py                            |   13
 plotly/validators/pointcloud/hoverlabel/font/_family.py                              |   16
 plotly/validators/pointcloud/hoverlabel/font/_familysrc.py                           |   16
 plotly/validators/pointcloud/hoverlabel/font/_size.py                                |   15
 plotly/validators/pointcloud/hoverlabel/font/_sizesrc.py                             |   13
 plotly/validators/pointcloud/legendgrouptitle/__init__.py                            |   12
 plotly/validators/pointcloud/legendgrouptitle/_font.py                               |   39
 plotly/validators/pointcloud/legendgrouptitle/_text.py                               |   13
 plotly/validators/pointcloud/legendgrouptitle/font/__init__.py                       |   15
 plotly/validators/pointcloud/legendgrouptitle/font/_color.py                         |   16
 plotly/validators/pointcloud/legendgrouptitle/font/_family.py                        |   18
 plotly/validators/pointcloud/legendgrouptitle/font/_size.py                          |   17
 plotly/validators/pointcloud/marker/__init__.py                                      |   25
 plotly/validators/pointcloud/marker/_blend.py                                        |   11
 plotly/validators/pointcloud/marker/_border.py                                       |   24
 plotly/validators/pointcloud/marker/_color.py                                        |   12
 plotly/validators/pointcloud/marker/_opacity.py                                      |   16
 plotly/validators/pointcloud/marker/_sizemax.py                                      |   14
 plotly/validators/pointcloud/marker/_sizemin.py                                      |   15
 plotly/validators/pointcloud/marker/border/__init__.py                               |   12
 plotly/validators/pointcloud/marker/border/_arearatio.py                             |   15
 plotly/validators/pointcloud/marker/border/_color.py                                 |   14
 plotly/validators/pointcloud/stream/__init__.py                                      |   12
 plotly/validators/pointcloud/stream/_maxpoints.py                                    |   15
 plotly/validators/pointcloud/stream/_token.py                                        |   13
 plotly/validators/sankey/__init__.py                                                 |   65
 plotly/validators/sankey/_arrangement.py                                             |   12
 plotly/validators/sankey/_customdata.py                                              |   11
 plotly/validators/sankey/_customdatasrc.py                                           |   11
 plotly/validators/sankey/_domain.py                                                  |   28
 plotly/validators/sankey/_hoverinfo.py                                               |   14
 plotly/validators/sankey/_hoverlabel.py                                              |   51
 plotly/validators/sankey/_ids.py                                                     |   11
 plotly/validators/sankey/_idssrc.py                                                  |   11
 plotly/validators/sankey/_legend.py                                                  |   12
 plotly/validators/sankey/_legendgrouptitle.py                                        |   20
 plotly/validators/sankey/_legendrank.py                                              |   11
 plotly/validators/sankey/_legendwidth.py                                             |   12
 plotly/validators/sankey/_link.py                                                    |  126
 plotly/validators/sankey/_meta.py                                                    |   12
 plotly/validators/sankey/_metasrc.py                                                 |   11
 plotly/validators/sankey/_name.py                                                    |   11
 plotly/validators/sankey/_node.py                                                    |  110
 plotly/validators/sankey/_orientation.py                                             |   12
 plotly/validators/sankey/_selectedpoints.py                                          |   11
 plotly/validators/sankey/_stream.py                                                  |   25
 plotly/validators/sankey/_textfont.py                                                |   37
 plotly/validators/sankey/_uid.py                                                     |   11
 plotly/validators/sankey/_uirevision.py                                              |   11
 plotly/validators/sankey/_valueformat.py                                             |   11
 plotly/validators/sankey/_valuesuffix.py                                             |   11
 plotly/validators/sankey/_visible.py                                                 |   12
 plotly/validators/sankey/domain/__init__.py                                          |   21
 plotly/validators/sankey/domain/_column.py                                           |   12
 plotly/validators/sankey/domain/_row.py                                              |   12
 plotly/validators/sankey/domain/_x.py                                                |   18
 plotly/validators/sankey/domain/_y.py                                                |   18
 plotly/validators/sankey/hoverlabel/__init__.py                                      |   31
 plotly/validators/sankey/hoverlabel/_align.py                                        |   13
 plotly/validators/sankey/hoverlabel/_alignsrc.py                                     |   13
 plotly/validators/sankey/hoverlabel/_bgcolor.py                                      |   14
 plotly/validators/sankey/hoverlabel/_bgcolorsrc.py                                   |   13
 plotly/validators/sankey/hoverlabel/_bordercolor.py                                  |   14
 plotly/validators/sankey/hoverlabel/_bordercolorsrc.py                               |   13
 plotly/validators/sankey/hoverlabel/_font.py                                         |   46
 plotly/validators/sankey/hoverlabel/_namelength.py                                   |   15
 plotly/validators/sankey/hoverlabel/_namelengthsrc.py                                |   13
 plotly/validators/sankey/hoverlabel/font/__init__.py                                 |   25
 plotly/validators/sankey/hoverlabel/font/_color.py                                   |   14
 plotly/validators/sankey/hoverlabel/font/_colorsrc.py                                |   13
 plotly/validators/sankey/hoverlabel/font/_family.py                                  |   16
 plotly/validators/sankey/hoverlabel/font/_familysrc.py                               |   13
 plotly/validators/sankey/hoverlabel/font/_size.py                                    |   15
 plotly/validators/sankey/hoverlabel/font/_sizesrc.py                                 |   13
 plotly/validators/sankey/legendgrouptitle/__init__.py                                |   12
 plotly/validators/sankey/legendgrouptitle/_font.py                                   |   39
 plotly/validators/sankey/legendgrouptitle/_text.py                                   |   13
 plotly/validators/sankey/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/sankey/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/sankey/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/sankey/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/sankey/link/__init__.py                                            |   57
 plotly/validators/sankey/link/_arrowlen.py                                           |   12
 plotly/validators/sankey/link/_color.py                                              |   12
 plotly/validators/sankey/link/_colorscaledefaults.py                                 |   18
 plotly/validators/sankey/link/_colorscales.py                                        |   58
 plotly/validators/sankey/link/_colorsrc.py                                           |   11
 plotly/validators/sankey/link/_customdata.py                                         |   11
 plotly/validators/sankey/link/_customdatasrc.py                                      |   13
 plotly/validators/sankey/link/_hovercolor.py                                         |   12
 plotly/validators/sankey/link/_hovercolorsrc.py                                      |   13
 plotly/validators/sankey/link/_hoverinfo.py                                          |   12
 plotly/validators/sankey/link/_hoverlabel.py                                         |   51
 plotly/validators/sankey/link/_hovertemplate.py                                      |   14
 plotly/validators/sankey/link/_hovertemplatesrc.py                                   |   13
 plotly/validators/sankey/link/_label.py                                              |   11
 plotly/validators/sankey/link/_labelsrc.py                                           |   11
 plotly/validators/sankey/link/_line.py                                               |   28
 plotly/validators/sankey/link/_source.py                                             |   11
 plotly/validators/sankey/link/_sourcesrc.py                                          |   11
 plotly/validators/sankey/link/_target.py                                             |   11
 plotly/validators/sankey/link/_targetsrc.py                                          |   11
 plotly/validators/sankey/link/_value.py                                              |   11
 plotly/validators/sankey/link/_valuesrc.py                                           |   11
 plotly/validators/sankey/link/colorscale/__init__.py                                 |   25
 plotly/validators/sankey/link/colorscale/_cmax.py                                    |   13
 plotly/validators/sankey/link/colorscale/_cmin.py                                    |   13
 plotly/validators/sankey/link/colorscale/_colorscale.py                              |   14
 plotly/validators/sankey/link/colorscale/_label.py                                   |   13
 plotly/validators/sankey/link/colorscale/_name.py                                    |   13
 plotly/validators/sankey/link/colorscale/_templateitemname.py                        |   16
 plotly/validators/sankey/link/hoverlabel/__init__.py                                 |   31
 plotly/validators/sankey/link/hoverlabel/_align.py                                   |   15
 plotly/validators/sankey/link/hoverlabel/_alignsrc.py                                |   13
 plotly/validators/sankey/link/hoverlabel/_bgcolor.py                                 |   14
 plotly/validators/sankey/link/hoverlabel/_bgcolorsrc.py                              |   13
 plotly/validators/sankey/link/hoverlabel/_bordercolor.py                             |   14
 plotly/validators/sankey/link/hoverlabel/_bordercolorsrc.py                          |   16
 plotly/validators/sankey/link/hoverlabel/_font.py                                    |   48
 plotly/validators/sankey/link/hoverlabel/_namelength.py                              |   15
 plotly/validators/sankey/link/hoverlabel/_namelengthsrc.py                           |   16
 plotly/validators/sankey/link/hoverlabel/font/__init__.py                            |   25
 plotly/validators/sankey/link/hoverlabel/font/_color.py                              |   14
 plotly/validators/sankey/link/hoverlabel/font/_colorsrc.py                           |   16
 plotly/validators/sankey/link/hoverlabel/font/_family.py                             |   16
 plotly/validators/sankey/link/hoverlabel/font/_familysrc.py                          |   16
 plotly/validators/sankey/link/hoverlabel/font/_size.py                               |   15
 plotly/validators/sankey/link/hoverlabel/font/_sizesrc.py                            |   13
 plotly/validators/sankey/link/line/__init__.py                                       |   21
 plotly/validators/sankey/link/line/_color.py                                         |   12
 plotly/validators/sankey/link/line/_colorsrc.py                                      |   13
 plotly/validators/sankey/link/line/_width.py                                         |   13
 plotly/validators/sankey/link/line/_widthsrc.py                                      |   13
 plotly/validators/sankey/node/__init__.py                                            |   51
 plotly/validators/sankey/node/_align.py                                              |   12
 plotly/validators/sankey/node/_color.py                                              |   12
 plotly/validators/sankey/node/_colorsrc.py                                           |   11
 plotly/validators/sankey/node/_customdata.py                                         |   11
 plotly/validators/sankey/node/_customdatasrc.py                                      |   13
 plotly/validators/sankey/node/_groups.py                                             |   15
 plotly/validators/sankey/node/_hoverinfo.py                                          |   12
 plotly/validators/sankey/node/_hoverlabel.py                                         |   51
 plotly/validators/sankey/node/_hovertemplate.py                                      |   14
 plotly/validators/sankey/node/_hovertemplatesrc.py                                   |   13
 plotly/validators/sankey/node/_label.py                                              |   11
 plotly/validators/sankey/node/_labelsrc.py                                           |   11
 plotly/validators/sankey/node/_line.py                                               |   28
 plotly/validators/sankey/node/_pad.py                                                |   13
 plotly/validators/sankey/node/_thickness.py                                          |   13
 plotly/validators/sankey/node/_x.py                                                  |   11
 plotly/validators/sankey/node/_xsrc.py                                               |   11
 plotly/validators/sankey/node/_y.py                                                  |   11
 plotly/validators/sankey/node/_ysrc.py                                               |   11
 plotly/validators/sankey/node/hoverlabel/__init__.py                                 |   31
 plotly/validators/sankey/node/hoverlabel/_align.py                                   |   15
 plotly/validators/sankey/node/hoverlabel/_alignsrc.py                                |   13
 plotly/validators/sankey/node/hoverlabel/_bgcolor.py                                 |   14
 plotly/validators/sankey/node/hoverlabel/_bgcolorsrc.py                              |   13
 plotly/validators/sankey/node/hoverlabel/_bordercolor.py                             |   14
 plotly/validators/sankey/node/hoverlabel/_bordercolorsrc.py                          |   16
 plotly/validators/sankey/node/hoverlabel/_font.py                                    |   48
 plotly/validators/sankey/node/hoverlabel/_namelength.py                              |   15
 plotly/validators/sankey/node/hoverlabel/_namelengthsrc.py                           |   16
 plotly/validators/sankey/node/hoverlabel/font/__init__.py                            |   25
 plotly/validators/sankey/node/hoverlabel/font/_color.py                              |   14
 plotly/validators/sankey/node/hoverlabel/font/_colorsrc.py                           |   16
 plotly/validators/sankey/node/hoverlabel/font/_family.py                             |   16
 plotly/validators/sankey/node/hoverlabel/font/_familysrc.py                          |   16
 plotly/validators/sankey/node/hoverlabel/font/_size.py                               |   15
 plotly/validators/sankey/node/hoverlabel/font/_sizesrc.py                            |   13
 plotly/validators/sankey/node/line/__init__.py                                       |   21
 plotly/validators/sankey/node/line/_color.py                                         |   12
 plotly/validators/sankey/node/line/_colorsrc.py                                      |   13
 plotly/validators/sankey/node/line/_width.py                                         |   13
 plotly/validators/sankey/node/line/_widthsrc.py                                      |   13
 plotly/validators/sankey/stream/__init__.py                                          |   12
 plotly/validators/sankey/stream/_maxpoints.py                                        |   13
 plotly/validators/sankey/stream/_token.py                                            |   13
 plotly/validators/sankey/textfont/__init__.py                                        |   15
 plotly/validators/sankey/textfont/_color.py                                          |   11
 plotly/validators/sankey/textfont/_family.py                                         |   13
 plotly/validators/sankey/textfont/_size.py                                           |   12
 plotly/validators/scatter/__init__.py                                                |  159
 plotly/validators/scatter/_alignmentgroup.py                                         |   11
 plotly/validators/scatter/_cliponaxis.py                                             |   11
 plotly/validators/scatter/_connectgaps.py                                            |   11
 plotly/validators/scatter/_customdata.py                                             |   11
 plotly/validators/scatter/_customdatasrc.py                                          |   11
 plotly/validators/scatter/_dx.py                                                     |   12
 plotly/validators/scatter/_dy.py                                                     |   12
 plotly/validators/scatter/_error_x.py                                                |   73
 plotly/validators/scatter/_error_y.py                                                |   71
 plotly/validators/scatter/_fill.py                                                   |   23
 plotly/validators/scatter/_fillcolor.py                                              |   12
 plotly/validators/scatter/_fillgradient.py                                           |   45
 plotly/validators/scatter/_fillpattern.py                                            |   64
 plotly/validators/scatter/_groupnorm.py                                              |   12
 plotly/validators/scatter/_hoverinfo.py                                              |   14
 plotly/validators/scatter/_hoverinfosrc.py                                           |   11
 plotly/validators/scatter/_hoverlabel.py                                             |   51
 plotly/validators/scatter/_hoveron.py                                                |   12
 plotly/validators/scatter/_hovertemplate.py                                          |   12
 plotly/validators/scatter/_hovertemplatesrc.py                                       |   11
 plotly/validators/scatter/_hovertext.py                                              |   12
 plotly/validators/scatter/_hovertextsrc.py                                           |   11
 plotly/validators/scatter/_ids.py                                                    |   12
 plotly/validators/scatter/_idssrc.py                                                 |   11
 plotly/validators/scatter/_legend.py                                                 |   12
 plotly/validators/scatter/_legendgroup.py                                            |   11
 plotly/validators/scatter/_legendgrouptitle.py                                       |   20
 plotly/validators/scatter/_legendrank.py                                             |   11
 plotly/validators/scatter/_legendwidth.py                                            |   12
 plotly/validators/scatter/_line.py                                                   |   51
 plotly/validators/scatter/_marker.py                                                 |  165
 plotly/validators/scatter/_meta.py                                                   |   12
 plotly/validators/scatter/_metasrc.py                                                |   11
 plotly/validators/scatter/_mode.py                                                   |   13
 plotly/validators/scatter/_name.py                                                   |   11
 plotly/validators/scatter/_offsetgroup.py                                            |   11
 plotly/validators/scatter/_opacity.py                                                |   13
 plotly/validators/scatter/_orientation.py                                            |   12
 plotly/validators/scatter/_selected.py                                               |   24
 plotly/validators/scatter/_selectedpoints.py                                         |   11
 plotly/validators/scatter/_showlegend.py                                             |   11
 plotly/validators/scatter/_stackgaps.py                                              |   12
 plotly/validators/scatter/_stackgroup.py                                             |   11
 plotly/validators/scatter/_stream.py                                                 |   25
 plotly/validators/scatter/_text.py                                                   |   12
 plotly/validators/scatter/_textfont.py                                               |   46
 plotly/validators/scatter/_textposition.py                                           |   26
 plotly/validators/scatter/_textpositionsrc.py                                        |   11
 plotly/validators/scatter/_textsrc.py                                                |   11
 plotly/validators/scatter/_texttemplate.py                                           |   12
 plotly/validators/scatter/_texttemplatesrc.py                                        |   11
 plotly/validators/scatter/_uid.py                                                    |   12
 plotly/validators/scatter/_uirevision.py                                             |   11
 plotly/validators/scatter/_unselected.py                                             |   24
 plotly/validators/scatter/_visible.py                                                |   12
 plotly/validators/scatter/_x.py                                                      |   12
 plotly/validators/scatter/_x0.py                                                     |   12
 plotly/validators/scatter/_xaxis.py                                                  |   12
 plotly/validators/scatter/_xcalendar.py                                              |   32
 plotly/validators/scatter/_xhoverformat.py                                           |   11
 plotly/validators/scatter/_xperiod.py                                                |   11
 plotly/validators/scatter/_xperiod0.py                                               |   11
 plotly/validators/scatter/_xperiodalignment.py                                       |   12
 plotly/validators/scatter/_xsrc.py                                                   |   11
 plotly/validators/scatter/_y.py                                                      |   12
 plotly/validators/scatter/_y0.py                                                     |   12
 plotly/validators/scatter/_yaxis.py                                                  |   12
 plotly/validators/scatter/_ycalendar.py                                              |   32
 plotly/validators/scatter/_yhoverformat.py                                           |   11
 plotly/validators/scatter/_yperiod.py                                                |   11
 plotly/validators/scatter/_yperiod0.py                                               |   11
 plotly/validators/scatter/_yperiodalignment.py                                       |   12
 plotly/validators/scatter/_ysrc.py                                                   |   11
 plotly/validators/scatter/error_x/__init__.py                                        |   43
 plotly/validators/scatter/error_x/_array.py                                          |   11
 plotly/validators/scatter/error_x/_arrayminus.py                                     |   13
 plotly/validators/scatter/error_x/_arrayminussrc.py                                  |   13
 plotly/validators/scatter/error_x/_arraysrc.py                                       |   11
 plotly/validators/scatter/error_x/_color.py                                          |   11
 plotly/validators/scatter/error_x/_copy_ystyle.py                                    |   13
 plotly/validators/scatter/error_x/_symmetric.py                                      |   13
 plotly/validators/scatter/error_x/_thickness.py                                      |   14
 plotly/validators/scatter/error_x/_traceref.py                                       |   12
 plotly/validators/scatter/error_x/_tracerefminus.py                                  |   14
 plotly/validators/scatter/error_x/_type.py                                           |   12
 plotly/validators/scatter/error_x/_value.py                                          |   12
 plotly/validators/scatter/error_x/_valueminus.py                                     |   14
 plotly/validators/scatter/error_x/_visible.py                                        |   11
 plotly/validators/scatter/error_x/_width.py                                          |   12
 plotly/validators/scatter/error_y/__init__.py                                        |   41
 plotly/validators/scatter/error_y/_array.py                                          |   11
 plotly/validators/scatter/error_y/_arrayminus.py                                     |   13
 plotly/validators/scatter/error_y/_arrayminussrc.py                                  |   13
 plotly/validators/scatter/error_y/_arraysrc.py                                       |   11
 plotly/validators/scatter/error_y/_color.py                                          |   11
 plotly/validators/scatter/error_y/_symmetric.py                                      |   13
 plotly/validators/scatter/error_y/_thickness.py                                      |   14
 plotly/validators/scatter/error_y/_traceref.py                                       |   12
 plotly/validators/scatter/error_y/_tracerefminus.py                                  |   14
 plotly/validators/scatter/error_y/_type.py                                           |   12
 plotly/validators/scatter/error_y/_value.py                                          |   12
 plotly/validators/scatter/error_y/_valueminus.py                                     |   14
 plotly/validators/scatter/error_y/_visible.py                                        |   11
 plotly/validators/scatter/error_y/_width.py                                          |   12
 plotly/validators/scatter/fillgradient/__init__.py                                   |   21
 plotly/validators/scatter/fillgradient/_colorscale.py                                |   13
 plotly/validators/scatter/fillgradient/_start.py                                     |   13
 plotly/validators/scatter/fillgradient/_stop.py                                      |   13
 plotly/validators/scatter/fillgradient/_type.py                                      |   14
 plotly/validators/scatter/fillpattern/__init__.py                                    |   37
 plotly/validators/scatter/fillpattern/_bgcolor.py                                    |   14
 plotly/validators/scatter/fillpattern/_bgcolorsrc.py                                 |   13
 plotly/validators/scatter/fillpattern/_fgcolor.py                                    |   14
 plotly/validators/scatter/fillpattern/_fgcolorsrc.py                                 |   13
 plotly/validators/scatter/fillpattern/_fgopacity.py                                  |   15
 plotly/validators/scatter/fillpattern/_fillmode.py                                   |   14
 plotly/validators/scatter/fillpattern/_shape.py                                      |   15
 plotly/validators/scatter/fillpattern/_shapesrc.py                                   |   13
 plotly/validators/scatter/fillpattern/_size.py                                       |   13
 plotly/validators/scatter/fillpattern/_sizesrc.py                                    |   13
 plotly/validators/scatter/fillpattern/_solidity.py                                   |   16
 plotly/validators/scatter/fillpattern/_soliditysrc.py                                |   13
 plotly/validators/scatter/hoverlabel/__init__.py                                     |   31
 plotly/validators/scatter/hoverlabel/_align.py                                       |   13
 plotly/validators/scatter/hoverlabel/_alignsrc.py                                    |   13
 plotly/validators/scatter/hoverlabel/_bgcolor.py                                     |   14
 plotly/validators/scatter/hoverlabel/_bgcolorsrc.py                                  |   13
 plotly/validators/scatter/hoverlabel/_bordercolor.py                                 |   14
 plotly/validators/scatter/hoverlabel/_bordercolorsrc.py                              |   13
 plotly/validators/scatter/hoverlabel/_font.py                                        |   46
 plotly/validators/scatter/hoverlabel/_namelength.py                                  |   15
 plotly/validators/scatter/hoverlabel/_namelengthsrc.py                               |   13
 plotly/validators/scatter/hoverlabel/font/__init__.py                                |   25
 plotly/validators/scatter/hoverlabel/font/_color.py                                  |   14
 plotly/validators/scatter/hoverlabel/font/_colorsrc.py                               |   13
 plotly/validators/scatter/hoverlabel/font/_family.py                                 |   16
 plotly/validators/scatter/hoverlabel/font/_familysrc.py                              |   13
 plotly/validators/scatter/hoverlabel/font/_size.py                                   |   15
 plotly/validators/scatter/hoverlabel/font/_sizesrc.py                                |   13
 plotly/validators/scatter/legendgrouptitle/__init__.py                               |   12
 plotly/validators/scatter/legendgrouptitle/_font.py                                  |   39
 plotly/validators/scatter/legendgrouptitle/_text.py                                  |   13
 plotly/validators/scatter/legendgrouptitle/font/__init__.py                          |   15
 plotly/validators/scatter/legendgrouptitle/font/_color.py                            |   13
 plotly/validators/scatter/legendgrouptitle/font/_family.py                           |   18
 plotly/validators/scatter/legendgrouptitle/font/_size.py                             |   14
 plotly/validators/scatter/line/__init__.py                                           |   29
 plotly/validators/scatter/line/_backoff.py                                           |   13
 plotly/validators/scatter/line/_backoffsrc.py                                        |   11
 plotly/validators/scatter/line/_color.py                                             |   12
 plotly/validators/scatter/line/_dash.py                                              |   14
 plotly/validators/scatter/line/_shape.py                                             |   12
 plotly/validators/scatter/line/_simplify.py                                          |   11
 plotly/validators/scatter/line/_smoothing.py                                         |   13
 plotly/validators/scatter/line/_width.py                                             |   13
 plotly/validators/scatter/marker/__init__.py                                         |   71
 plotly/validators/scatter/marker/_angle.py                                           |   13
 plotly/validators/scatter/marker/_angleref.py                                        |   13
 plotly/validators/scatter/marker/_anglesrc.py                                        |   11
 plotly/validators/scatter/marker/_autocolorscale.py                                  |   14
 plotly/validators/scatter/marker/_cauto.py                                           |   12
 plotly/validators/scatter/marker/_cmax.py                                            |   12
 plotly/validators/scatter/marker/_cmid.py                                            |   12
 plotly/validators/scatter/marker/_cmin.py                                            |   12
 plotly/validators/scatter/marker/_color.py                                           |   14
 plotly/validators/scatter/marker/_coloraxis.py                                       |   13
 plotly/validators/scatter/marker/_colorbar.py                                        |  295
 plotly/validators/scatter/marker/_colorscale.py                                      |   14
 plotly/validators/scatter/marker/_colorsrc.py                                        |   11
 plotly/validators/scatter/marker/_gradient.py                                        |   29
 plotly/validators/scatter/marker/_line.py                                            |  105
 plotly/validators/scatter/marker/_maxdisplayed.py                                    |   14
 plotly/validators/scatter/marker/_opacity.py                                         |   15
 plotly/validators/scatter/marker/_opacitysrc.py                                      |   13
 plotly/validators/scatter/marker/_reversescale.py                                    |   13
 plotly/validators/scatter/marker/_showscale.py                                       |   11
 plotly/validators/scatter/marker/_size.py                                            |   14
 plotly/validators/scatter/marker/_sizemin.py                                         |   12
 plotly/validators/scatter/marker/_sizemode.py                                        |   12
 plotly/validators/scatter/marker/_sizeref.py                                         |   11
 plotly/validators/scatter/marker/_sizesrc.py                                         |   11
 plotly/validators/scatter/marker/_standoff.py                                        |   14
 plotly/validators/scatter/marker/_standoffsrc.py                                     |   13
 plotly/validators/scatter/marker/_symbol.py                                          |  503
 plotly/validators/scatter/marker/_symbolsrc.py                                       |   11
 plotly/validators/scatter/marker/colorbar/__init__.py                                |  111
 plotly/validators/scatter/marker/colorbar/_bgcolor.py                                |   13
 plotly/validators/scatter/marker/colorbar/_bordercolor.py                            |   13
 plotly/validators/scatter/marker/colorbar/_borderwidth.py                            |   14
 plotly/validators/scatter/marker/colorbar/_dtick.py                                  |   14
 plotly/validators/scatter/marker/colorbar/_exponentformat.py                         |   17
 plotly/validators/scatter/marker/colorbar/_labelalias.py                             |   13
 plotly/validators/scatter/marker/colorbar/_len.py                                    |   14
 plotly/validators/scatter/marker/colorbar/_lenmode.py                                |   14
 plotly/validators/scatter/marker/colorbar/_minexponent.py                            |   14
 plotly/validators/scatter/marker/colorbar/_nticks.py                                 |   14
 plotly/validators/scatter/marker/colorbar/_orientation.py                            |   14
 plotly/validators/scatter/marker/colorbar/_outlinecolor.py                           |   16
 plotly/validators/scatter/marker/colorbar/_outlinewidth.py                           |   17
 plotly/validators/scatter/marker/colorbar/_separatethousands.py                      |   16
 plotly/validators/scatter/marker/colorbar/_showexponent.py                           |   17
 plotly/validators/scatter/marker/colorbar/_showticklabels.py                         |   16
 plotly/validators/scatter/marker/colorbar/_showtickprefix.py                         |   17
 plotly/validators/scatter/marker/colorbar/_showticksuffix.py                         |   17
 plotly/validators/scatter/marker/colorbar/_thickness.py                              |   14
 plotly/validators/scatter/marker/colorbar/_thicknessmode.py                          |   17
 plotly/validators/scatter/marker/colorbar/_tick0.py                                  |   14
 plotly/validators/scatter/marker/colorbar/_tickangle.py                              |   13
 plotly/validators/scatter/marker/colorbar/_tickcolor.py                              |   13
 plotly/validators/scatter/marker/colorbar/_tickfont.py                               |   39
 plotly/validators/scatter/marker/colorbar/_tickformat.py                             |   13
 plotly/validators/scatter/marker/colorbar/_tickformatstopdefaults.py                 |   21
 plotly/validators/scatter/marker/colorbar/_tickformatstops.py                        |   54
 plotly/validators/scatter/marker/colorbar/_ticklabeloverflow.py                      |   17
 plotly/validators/scatter/marker/colorbar/_ticklabelposition.py                      |   31
 plotly/validators/scatter/marker/colorbar/_ticklabelstep.py                          |   17
 plotly/validators/scatter/marker/colorbar/_ticklen.py                                |   14
 plotly/validators/scatter/marker/colorbar/_tickmode.py                               |   15
 plotly/validators/scatter/marker/colorbar/_tickprefix.py                             |   13
 plotly/validators/scatter/marker/colorbar/_ticks.py                                  |   14
 plotly/validators/scatter/marker/colorbar/_ticksuffix.py                             |   13
 plotly/validators/scatter/marker/colorbar/_ticktext.py                               |   13
 plotly/validators/scatter/marker/colorbar/_ticktextsrc.py                            |   13
 plotly/validators/scatter/marker/colorbar/_tickvals.py                               |   13
 plotly/validators/scatter/marker/colorbar/_tickvalssrc.py                            |   13
 plotly/validators/scatter/marker/colorbar/_tickwidth.py                              |   14
 plotly/validators/scatter/marker/colorbar/_title.py                                  |   35
 plotly/validators/scatter/marker/colorbar/_x.py                                      |   13
 plotly/validators/scatter/marker/colorbar/_xanchor.py                                |   14
 plotly/validators/scatter/marker/colorbar/_xpad.py                                   |   14
 plotly/validators/scatter/marker/colorbar/_xref.py                                   |   14
 plotly/validators/scatter/marker/colorbar/_y.py                                      |   13
 plotly/validators/scatter/marker/colorbar/_yanchor.py                                |   14
 plotly/validators/scatter/marker/colorbar/_ypad.py                                   |   14
 plotly/validators/scatter/marker/colorbar/_yref.py                                   |   14
 plotly/validators/scatter/marker/colorbar/tickfont/__init__.py                       |   15
 plotly/validators/scatter/marker/colorbar/tickfont/_color.py                         |   16
 plotly/validators/scatter/marker/colorbar/tickfont/_family.py                        |   18
 plotly/validators/scatter/marker/colorbar/tickfont/_size.py                          |   17
 plotly/validators/scatter/marker/colorbar/tickformatstop/__init__.py                 |   23
 plotly/validators/scatter/marker/colorbar/tickformatstop/_dtickrange.py              |   23
 plotly/validators/scatter/marker/colorbar/tickformatstop/_enabled.py                 |   16
 plotly/validators/scatter/marker/colorbar/tickformatstop/_name.py                    |   16
 plotly/validators/scatter/marker/colorbar/tickformatstop/_templateitemname.py        |   16
 plotly/validators/scatter/marker/colorbar/tickformatstop/_value.py                   |   16
 plotly/validators/scatter/marker/colorbar/title/__init__.py                          |   15
 plotly/validators/scatter/marker/colorbar/title/_font.py                             |   39
 plotly/validators/scatter/marker/colorbar/title/_side.py                             |   14
 plotly/validators/scatter/marker/colorbar/title/_text.py                             |   13
 plotly/validators/scatter/marker/colorbar/title/font/__init__.py                     |   15
 plotly/validators/scatter/marker/colorbar/title/font/_color.py                       |   16
 plotly/validators/scatter/marker/colorbar/title/font/_family.py                      |   18
 plotly/validators/scatter/marker/colorbar/title/font/_size.py                        |   17
 plotly/validators/scatter/marker/gradient/__init__.py                                |   21
 plotly/validators/scatter/marker/gradient/_color.py                                  |   14
 plotly/validators/scatter/marker/gradient/_colorsrc.py                               |   13
 plotly/validators/scatter/marker/gradient/_type.py                                   |   15
 plotly/validators/scatter/marker/gradient/_typesrc.py                                |   13
 plotly/validators/scatter/marker/line/__init__.py                                    |   37
 plotly/validators/scatter/marker/line/_autocolorscale.py                             |   14
 plotly/validators/scatter/marker/line/_cauto.py                                      |   14
 plotly/validators/scatter/marker/line/_cmax.py                                       |   12
 plotly/validators/scatter/marker/line/_cmid.py                                       |   12
 plotly/validators/scatter/marker/line/_cmin.py                                       |   12
 plotly/validators/scatter/marker/line/_color.py                                      |   18
 plotly/validators/scatter/marker/line/_coloraxis.py                                  |   15
 plotly/validators/scatter/marker/line/_colorscale.py                                 |   14
 plotly/validators/scatter/marker/line/_colorsrc.py                                   |   13
 plotly/validators/scatter/marker/line/_reversescale.py                               |   13
 plotly/validators/scatter/marker/line/_width.py                                      |   16
 plotly/validators/scatter/marker/line/_widthsrc.py                                   |   13
 plotly/validators/scatter/selected/__init__.py                                       |   12
 plotly/validators/scatter/selected/_marker.py                                        |   22
 plotly/validators/scatter/selected/_textfont.py                                      |   20
 plotly/validators/scatter/selected/marker/__init__.py                                |   19
 plotly/validators/scatter/selected/marker/_color.py                                  |   13
 plotly/validators/scatter/selected/marker/_opacity.py                                |   15
 plotly/validators/scatter/selected/marker/_size.py                                   |   14
 plotly/validators/scatter/selected/textfont/__init__.py                              |   11
 plotly/validators/scatter/selected/textfont/_color.py                                |   13
 plotly/validators/scatter/stream/__init__.py                                         |   12
 plotly/validators/scatter/stream/_maxpoints.py                                       |   13
 plotly/validators/scatter/stream/_token.py                                           |   13
 plotly/validators/scatter/textfont/__init__.py                                       |   25
 plotly/validators/scatter/textfont/_color.py                                         |   12
 plotly/validators/scatter/textfont/_colorsrc.py                                      |   13
 plotly/validators/scatter/textfont/_family.py                                        |   14
 plotly/validators/scatter/textfont/_familysrc.py                                     |   13
 plotly/validators/scatter/textfont/_size.py                                          |   13
 plotly/validators/scatter/textfont/_sizesrc.py                                       |   11
 plotly/validators/scatter/unselected/__init__.py                                     |   12
 plotly/validators/scatter/unselected/_marker.py                                      |   27
 plotly/validators/scatter/unselected/_textfont.py                                    |   21
 plotly/validators/scatter/unselected/marker/__init__.py                              |   19
 plotly/validators/scatter/unselected/marker/_color.py                                |   13
 plotly/validators/scatter/unselected/marker/_opacity.py                              |   15
 plotly/validators/scatter/unselected/marker/_size.py                                 |   14
 plotly/validators/scatter/unselected/textfont/__init__.py                            |   11
 plotly/validators/scatter/unselected/textfont/_color.py                              |   13
 plotly/validators/scatter3d/__init__.py                                              |  123
 plotly/validators/scatter3d/_connectgaps.py                                          |   11
 plotly/validators/scatter3d/_customdata.py                                           |   11
 plotly/validators/scatter3d/_customdatasrc.py                                        |   11
 plotly/validators/scatter3d/_error_x.py                                              |   73
 plotly/validators/scatter3d/_error_y.py                                              |   73
 plotly/validators/scatter3d/_error_z.py                                              |   71
 plotly/validators/scatter3d/_hoverinfo.py                                            |   14
 plotly/validators/scatter3d/_hoverinfosrc.py                                         |   11
 plotly/validators/scatter3d/_hoverlabel.py                                           |   51
 plotly/validators/scatter3d/_hovertemplate.py                                        |   12
 plotly/validators/scatter3d/_hovertemplatesrc.py                                     |   13
 plotly/validators/scatter3d/_hovertext.py                                            |   12
 plotly/validators/scatter3d/_hovertextsrc.py                                         |   11
 plotly/validators/scatter3d/_ids.py                                                  |   11
 plotly/validators/scatter3d/_idssrc.py                                               |   11
 plotly/validators/scatter3d/_legend.py                                               |   12
 plotly/validators/scatter3d/_legendgroup.py                                          |   11
 plotly/validators/scatter3d/_legendgrouptitle.py                                     |   22
 plotly/validators/scatter3d/_legendrank.py                                           |   11
 plotly/validators/scatter3d/_legendwidth.py                                          |   12
 plotly/validators/scatter3d/_line.py                                                 |  106
 plotly/validators/scatter3d/_marker.py                                               |  137
 plotly/validators/scatter3d/_meta.py                                                 |   12
 plotly/validators/scatter3d/_metasrc.py                                              |   11
 plotly/validators/scatter3d/_mode.py                                                 |   13
 plotly/validators/scatter3d/_name.py                                                 |   11
 plotly/validators/scatter3d/_opacity.py                                              |   13
 plotly/validators/scatter3d/_projection.py                                           |   28
 plotly/validators/scatter3d/_scene.py                                                |   12
 plotly/validators/scatter3d/_showlegend.py                                           |   11
 plotly/validators/scatter3d/_stream.py                                               |   25
 plotly/validators/scatter3d/_surfaceaxis.py                                          |   12
 plotly/validators/scatter3d/_surfacecolor.py                                         |   11
 plotly/validators/scatter3d/_text.py                                                 |   12
 plotly/validators/scatter3d/_textfont.py                                             |   43
 plotly/validators/scatter3d/_textposition.py                                         |   26
 plotly/validators/scatter3d/_textpositionsrc.py                                      |   13
 plotly/validators/scatter3d/_textsrc.py                                              |   11
 plotly/validators/scatter3d/_texttemplate.py                                         |   12
 plotly/validators/scatter3d/_texttemplatesrc.py                                      |   13
 plotly/validators/scatter3d/_uid.py                                                  |   11
 plotly/validators/scatter3d/_uirevision.py                                           |   11
 plotly/validators/scatter3d/_visible.py                                              |   12
 plotly/validators/scatter3d/_x.py                                                    |   11
 plotly/validators/scatter3d/_xcalendar.py                                            |   32
 plotly/validators/scatter3d/_xhoverformat.py                                         |   11
 plotly/validators/scatter3d/_xsrc.py                                                 |   11
 plotly/validators/scatter3d/_y.py                                                    |   11
 plotly/validators/scatter3d/_ycalendar.py                                            |   32
 plotly/validators/scatter3d/_yhoverformat.py                                         |   11
 plotly/validators/scatter3d/_ysrc.py                                                 |   11
 plotly/validators/scatter3d/_z.py                                                    |   11
 plotly/validators/scatter3d/_zcalendar.py                                            |   32
 plotly/validators/scatter3d/_zhoverformat.py                                         |   11
 plotly/validators/scatter3d/_zsrc.py                                                 |   11
 plotly/validators/scatter3d/error_x/__init__.py                                      |   43
 plotly/validators/scatter3d/error_x/_array.py                                        |   11
 plotly/validators/scatter3d/error_x/_arrayminus.py                                   |   13
 plotly/validators/scatter3d/error_x/_arrayminussrc.py                                |   13
 plotly/validators/scatter3d/error_x/_arraysrc.py                                     |   13
 plotly/validators/scatter3d/error_x/_color.py                                        |   11
 plotly/validators/scatter3d/error_x/_copy_zstyle.py                                  |   13
 plotly/validators/scatter3d/error_x/_symmetric.py                                    |   13
 plotly/validators/scatter3d/error_x/_thickness.py                                    |   14
 plotly/validators/scatter3d/error_x/_traceref.py                                     |   14
 plotly/validators/scatter3d/error_x/_tracerefminus.py                                |   14
 plotly/validators/scatter3d/error_x/_type.py                                         |   12
 plotly/validators/scatter3d/error_x/_value.py                                        |   12
 plotly/validators/scatter3d/error_x/_valueminus.py                                   |   14
 plotly/validators/scatter3d/error_x/_visible.py                                      |   13
 plotly/validators/scatter3d/error_x/_width.py                                        |   12
 plotly/validators/scatter3d/error_y/__init__.py                                      |   43
 plotly/validators/scatter3d/error_y/_array.py                                        |   11
 plotly/validators/scatter3d/error_y/_arrayminus.py                                   |   13
 plotly/validators/scatter3d/error_y/_arrayminussrc.py                                |   13
 plotly/validators/scatter3d/error_y/_arraysrc.py                                     |   13
 plotly/validators/scatter3d/error_y/_color.py                                        |   11
 plotly/validators/scatter3d/error_y/_copy_zstyle.py                                  |   13
 plotly/validators/scatter3d/error_y/_symmetric.py                                    |   13
 plotly/validators/scatter3d/error_y/_thickness.py                                    |   14
 plotly/validators/scatter3d/error_y/_traceref.py                                     |   14
 plotly/validators/scatter3d/error_y/_tracerefminus.py                                |   14
 plotly/validators/scatter3d/error_y/_type.py                                         |   12
 plotly/validators/scatter3d/error_y/_value.py                                        |   12
 plotly/validators/scatter3d/error_y/_valueminus.py                                   |   14
 plotly/validators/scatter3d/error_y/_visible.py                                      |   13
 plotly/validators/scatter3d/error_y/_width.py                                        |   12
 plotly/validators/scatter3d/error_z/__init__.py                                      |   41
 plotly/validators/scatter3d/error_z/_array.py                                        |   11
 plotly/validators/scatter3d/error_z/_arrayminus.py                                   |   13
 plotly/validators/scatter3d/error_z/_arrayminussrc.py                                |   13
 plotly/validators/scatter3d/error_z/_arraysrc.py                                     |   13
 plotly/validators/scatter3d/error_z/_color.py                                        |   11
 plotly/validators/scatter3d/error_z/_symmetric.py                                    |   13
 plotly/validators/scatter3d/error_z/_thickness.py                                    |   14
 plotly/validators/scatter3d/error_z/_traceref.py                                     |   14
 plotly/validators/scatter3d/error_z/_tracerefminus.py                                |   14
 plotly/validators/scatter3d/error_z/_type.py                                         |   12
 plotly/validators/scatter3d/error_z/_value.py                                        |   12
 plotly/validators/scatter3d/error_z/_valueminus.py                                   |   14
 plotly/validators/scatter3d/error_z/_visible.py                                      |   13
 plotly/validators/scatter3d/error_z/_width.py                                        |   12
 plotly/validators/scatter3d/hoverlabel/__init__.py                                   |   31
 plotly/validators/scatter3d/hoverlabel/_align.py                                     |   15
 plotly/validators/scatter3d/hoverlabel/_alignsrc.py                                  |   13
 plotly/validators/scatter3d/hoverlabel/_bgcolor.py                                   |   14
 plotly/validators/scatter3d/hoverlabel/_bgcolorsrc.py                                |   13
 plotly/validators/scatter3d/hoverlabel/_bordercolor.py                               |   14
 plotly/validators/scatter3d/hoverlabel/_bordercolorsrc.py                            |   13
 plotly/validators/scatter3d/hoverlabel/_font.py                                      |   48
 plotly/validators/scatter3d/hoverlabel/_namelength.py                                |   15
 plotly/validators/scatter3d/hoverlabel/_namelengthsrc.py                             |   13
 plotly/validators/scatter3d/hoverlabel/font/__init__.py                              |   25
 plotly/validators/scatter3d/hoverlabel/font/_color.py                                |   14
 plotly/validators/scatter3d/hoverlabel/font/_colorsrc.py                             |   13
 plotly/validators/scatter3d/hoverlabel/font/_family.py                               |   16
 plotly/validators/scatter3d/hoverlabel/font/_familysrc.py                            |   13
 plotly/validators/scatter3d/hoverlabel/font/_size.py                                 |   15
 plotly/validators/scatter3d/hoverlabel/font/_sizesrc.py                              |   13
 plotly/validators/scatter3d/legendgrouptitle/__init__.py                             |   12
 plotly/validators/scatter3d/legendgrouptitle/_font.py                                |   39
 plotly/validators/scatter3d/legendgrouptitle/_text.py                                |   13
 plotly/validators/scatter3d/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/scatter3d/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/scatter3d/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/scatter3d/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/scatter3d/line/__init__.py                                         |   41
 plotly/validators/scatter3d/line/_autocolorscale.py                                  |   14
 plotly/validators/scatter3d/line/_cauto.py                                           |   12
 plotly/validators/scatter3d/line/_cmax.py                                            |   12
 plotly/validators/scatter3d/line/_cmid.py                                            |   12
 plotly/validators/scatter3d/line/_cmin.py                                            |   12
 plotly/validators/scatter3d/line/_color.py                                           |   13
 plotly/validators/scatter3d/line/_coloraxis.py                                       |   13
 plotly/validators/scatter3d/line/_colorbar.py                                        |  295
 plotly/validators/scatter3d/line/_colorscale.py                                      |   14
 plotly/validators/scatter3d/line/_colorsrc.py                                        |   11
 plotly/validators/scatter3d/line/_dash.py                                            |   14
 plotly/validators/scatter3d/line/_reversescale.py                                    |   13
 plotly/validators/scatter3d/line/_showscale.py                                       |   11
 plotly/validators/scatter3d/line/_width.py                                           |   12
 plotly/validators/scatter3d/line/colorbar/__init__.py                                |  111
 plotly/validators/scatter3d/line/colorbar/_bgcolor.py                                |   13
 plotly/validators/scatter3d/line/colorbar/_bordercolor.py                            |   13
 plotly/validators/scatter3d/line/colorbar/_borderwidth.py                            |   14
 plotly/validators/scatter3d/line/colorbar/_dtick.py                                  |   14
 plotly/validators/scatter3d/line/colorbar/_exponentformat.py                         |   17
 plotly/validators/scatter3d/line/colorbar/_labelalias.py                             |   13
 plotly/validators/scatter3d/line/colorbar/_len.py                                    |   14
 plotly/validators/scatter3d/line/colorbar/_lenmode.py                                |   14
 plotly/validators/scatter3d/line/colorbar/_minexponent.py                            |   14
 plotly/validators/scatter3d/line/colorbar/_nticks.py                                 |   14
 plotly/validators/scatter3d/line/colorbar/_orientation.py                            |   14
 plotly/validators/scatter3d/line/colorbar/_outlinecolor.py                           |   16
 plotly/validators/scatter3d/line/colorbar/_outlinewidth.py                           |   17
 plotly/validators/scatter3d/line/colorbar/_separatethousands.py                      |   16
 plotly/validators/scatter3d/line/colorbar/_showexponent.py                           |   17
 plotly/validators/scatter3d/line/colorbar/_showticklabels.py                         |   16
 plotly/validators/scatter3d/line/colorbar/_showtickprefix.py                         |   17
 plotly/validators/scatter3d/line/colorbar/_showticksuffix.py                         |   17
 plotly/validators/scatter3d/line/colorbar/_thickness.py                              |   14
 plotly/validators/scatter3d/line/colorbar/_thicknessmode.py                          |   17
 plotly/validators/scatter3d/line/colorbar/_tick0.py                                  |   14
 plotly/validators/scatter3d/line/colorbar/_tickangle.py                              |   13
 plotly/validators/scatter3d/line/colorbar/_tickcolor.py                              |   13
 plotly/validators/scatter3d/line/colorbar/_tickfont.py                               |   39
 plotly/validators/scatter3d/line/colorbar/_tickformat.py                             |   13
 plotly/validators/scatter3d/line/colorbar/_tickformatstopdefaults.py                 |   21
 plotly/validators/scatter3d/line/colorbar/_tickformatstops.py                        |   54
 plotly/validators/scatter3d/line/colorbar/_ticklabeloverflow.py                      |   17
 plotly/validators/scatter3d/line/colorbar/_ticklabelposition.py                      |   31
 plotly/validators/scatter3d/line/colorbar/_ticklabelstep.py                          |   17
 plotly/validators/scatter3d/line/colorbar/_ticklen.py                                |   14
 plotly/validators/scatter3d/line/colorbar/_tickmode.py                               |   15
 plotly/validators/scatter3d/line/colorbar/_tickprefix.py                             |   13
 plotly/validators/scatter3d/line/colorbar/_ticks.py                                  |   14
 plotly/validators/scatter3d/line/colorbar/_ticksuffix.py                             |   13
 plotly/validators/scatter3d/line/colorbar/_ticktext.py                               |   13
 plotly/validators/scatter3d/line/colorbar/_ticktextsrc.py                            |   13
 plotly/validators/scatter3d/line/colorbar/_tickvals.py                               |   13
 plotly/validators/scatter3d/line/colorbar/_tickvalssrc.py                            |   13
 plotly/validators/scatter3d/line/colorbar/_tickwidth.py                              |   14
 plotly/validators/scatter3d/line/colorbar/_title.py                                  |   35
 plotly/validators/scatter3d/line/colorbar/_x.py                                      |   13
 plotly/validators/scatter3d/line/colorbar/_xanchor.py                                |   14
 plotly/validators/scatter3d/line/colorbar/_xpad.py                                   |   14
 plotly/validators/scatter3d/line/colorbar/_xref.py                                   |   14
 plotly/validators/scatter3d/line/colorbar/_y.py                                      |   13
 plotly/validators/scatter3d/line/colorbar/_yanchor.py                                |   14
 plotly/validators/scatter3d/line/colorbar/_ypad.py                                   |   14
 plotly/validators/scatter3d/line/colorbar/_yref.py                                   |   14
 plotly/validators/scatter3d/line/colorbar/tickfont/__init__.py                       |   15
 plotly/validators/scatter3d/line/colorbar/tickfont/_color.py                         |   16
 plotly/validators/scatter3d/line/colorbar/tickfont/_family.py                        |   18
 plotly/validators/scatter3d/line/colorbar/tickfont/_size.py                          |   17
 plotly/validators/scatter3d/line/colorbar/tickformatstop/__init__.py                 |   23
 plotly/validators/scatter3d/line/colorbar/tickformatstop/_dtickrange.py              |   23
 plotly/validators/scatter3d/line/colorbar/tickformatstop/_enabled.py                 |   16
 plotly/validators/scatter3d/line/colorbar/tickformatstop/_name.py                    |   16
 plotly/validators/scatter3d/line/colorbar/tickformatstop/_templateitemname.py        |   16
 plotly/validators/scatter3d/line/colorbar/tickformatstop/_value.py                   |   16
 plotly/validators/scatter3d/line/colorbar/title/__init__.py                          |   15
 plotly/validators/scatter3d/line/colorbar/title/_font.py                             |   39
 plotly/validators/scatter3d/line/colorbar/title/_side.py                             |   14
 plotly/validators/scatter3d/line/colorbar/title/_text.py                             |   13
 plotly/validators/scatter3d/line/colorbar/title/font/__init__.py                     |   15
 plotly/validators/scatter3d/line/colorbar/title/font/_color.py                       |   16
 plotly/validators/scatter3d/line/colorbar/title/font/_family.py                      |   18
 plotly/validators/scatter3d/line/colorbar/title/font/_size.py                        |   17
 plotly/validators/scatter3d/marker/__init__.py                                       |   55
 plotly/validators/scatter3d/marker/_autocolorscale.py                                |   14
 plotly/validators/scatter3d/marker/_cauto.py                                         |   12
 plotly/validators/scatter3d/marker/_cmax.py                                          |   12
 plotly/validators/scatter3d/marker/_cmid.py                                          |   12
 plotly/validators/scatter3d/marker/_cmin.py                                          |   12
 plotly/validators/scatter3d/marker/_color.py                                         |   15
 plotly/validators/scatter3d/marker/_coloraxis.py                                     |   15
 plotly/validators/scatter3d/marker/_colorbar.py                                      |  297
 plotly/validators/scatter3d/marker/_colorscale.py                                    |   14
 plotly/validators/scatter3d/marker/_colorsrc.py                                      |   13
 plotly/validators/scatter3d/marker/_line.py                                          |  102
 plotly/validators/scatter3d/marker/_opacity.py                                       |   14
 plotly/validators/scatter3d/marker/_reversescale.py                                  |   13
 plotly/validators/scatter3d/marker/_showscale.py                                     |   13
 plotly/validators/scatter3d/marker/_size.py                                          |   13
 plotly/validators/scatter3d/marker/_sizemin.py                                       |   12
 plotly/validators/scatter3d/marker/_sizemode.py                                      |   14
 plotly/validators/scatter3d/marker/_sizeref.py                                       |   11
 plotly/validators/scatter3d/marker/_sizesrc.py                                       |   11
 plotly/validators/scatter3d/marker/_symbol.py                                        |   25
 plotly/validators/scatter3d/marker/_symbolsrc.py                                     |   13
 plotly/validators/scatter3d/marker/colorbar/__init__.py                              |  111
 plotly/validators/scatter3d/marker/colorbar/_bgcolor.py                              |   13
 plotly/validators/scatter3d/marker/colorbar/_bordercolor.py                          |   16
 plotly/validators/scatter3d/marker/colorbar/_borderwidth.py                          |   17
 plotly/validators/scatter3d/marker/colorbar/_dtick.py                                |   14
 plotly/validators/scatter3d/marker/colorbar/_exponentformat.py                       |   17
 plotly/validators/scatter3d/marker/colorbar/_labelalias.py                           |   16
 plotly/validators/scatter3d/marker/colorbar/_len.py                                  |   14
 plotly/validators/scatter3d/marker/colorbar/_lenmode.py                              |   14
 plotly/validators/scatter3d/marker/colorbar/_minexponent.py                          |   17
 plotly/validators/scatter3d/marker/colorbar/_nticks.py                               |   14
 plotly/validators/scatter3d/marker/colorbar/_orientation.py                          |   17
 plotly/validators/scatter3d/marker/colorbar/_outlinecolor.py                         |   16
 plotly/validators/scatter3d/marker/colorbar/_outlinewidth.py                         |   17
 plotly/validators/scatter3d/marker/colorbar/_separatethousands.py                    |   16
 plotly/validators/scatter3d/marker/colorbar/_showexponent.py                         |   17
 plotly/validators/scatter3d/marker/colorbar/_showticklabels.py                       |   16
 plotly/validators/scatter3d/marker/colorbar/_showtickprefix.py                       |   17
 plotly/validators/scatter3d/marker/colorbar/_showticksuffix.py                       |   17
 plotly/validators/scatter3d/marker/colorbar/_thickness.py                            |   14
 plotly/validators/scatter3d/marker/colorbar/_thicknessmode.py                        |   17
 plotly/validators/scatter3d/marker/colorbar/_tick0.py                                |   14
 plotly/validators/scatter3d/marker/colorbar/_tickangle.py                            |   13
 plotly/validators/scatter3d/marker/colorbar/_tickcolor.py                            |   13
 plotly/validators/scatter3d/marker/colorbar/_tickfont.py                             |   39
 plotly/validators/scatter3d/marker/colorbar/_tickformat.py                           |   16
 plotly/validators/scatter3d/marker/colorbar/_tickformatstopdefaults.py               |   21
 plotly/validators/scatter3d/marker/colorbar/_tickformatstops.py                      |   54
 plotly/validators/scatter3d/marker/colorbar/_ticklabeloverflow.py                    |   17
 plotly/validators/scatter3d/marker/colorbar/_ticklabelposition.py                    |   31
 plotly/validators/scatter3d/marker/colorbar/_ticklabelstep.py                        |   17
 plotly/validators/scatter3d/marker/colorbar/_ticklen.py                              |   14
 plotly/validators/scatter3d/marker/colorbar/_tickmode.py                             |   15
 plotly/validators/scatter3d/marker/colorbar/_tickprefix.py                           |   16
 plotly/validators/scatter3d/marker/colorbar/_ticks.py                                |   14
 plotly/validators/scatter3d/marker/colorbar/_ticksuffix.py                           |   16
 plotly/validators/scatter3d/marker/colorbar/_ticktext.py                             |   13
 plotly/validators/scatter3d/marker/colorbar/_ticktextsrc.py                          |   16
 plotly/validators/scatter3d/marker/colorbar/_tickvals.py                             |   13
 plotly/validators/scatter3d/marker/colorbar/_tickvalssrc.py                          |   16
 plotly/validators/scatter3d/marker/colorbar/_tickwidth.py                            |   14
 plotly/validators/scatter3d/marker/colorbar/_title.py                                |   35
 plotly/validators/scatter3d/marker/colorbar/_x.py                                    |   13
 plotly/validators/scatter3d/marker/colorbar/_xanchor.py                              |   14
 plotly/validators/scatter3d/marker/colorbar/_xpad.py                                 |   14
 plotly/validators/scatter3d/marker/colorbar/_xref.py                                 |   14
 plotly/validators/scatter3d/marker/colorbar/_y.py                                    |   13
 plotly/validators/scatter3d/marker/colorbar/_yanchor.py                              |   14
 plotly/validators/scatter3d/marker/colorbar/_ypad.py                                 |   14
 plotly/validators/scatter3d/marker/colorbar/_yref.py                                 |   14
 plotly/validators/scatter3d/marker/colorbar/tickfont/__init__.py                     |   15
 plotly/validators/scatter3d/marker/colorbar/tickfont/_color.py                       |   16
 plotly/validators/scatter3d/marker/colorbar/tickfont/_family.py                      |   18
 plotly/validators/scatter3d/marker/colorbar/tickfont/_size.py                        |   17
 plotly/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py               |   23
 plotly/validators/scatter3d/marker/colorbar/tickformatstop/_dtickrange.py            |   23
 plotly/validators/scatter3d/marker/colorbar/tickformatstop/_enabled.py               |   16
 plotly/validators/scatter3d/marker/colorbar/tickformatstop/_name.py                  |   16
 plotly/validators/scatter3d/marker/colorbar/tickformatstop/_templateitemname.py      |   16
 plotly/validators/scatter3d/marker/colorbar/tickformatstop/_value.py                 |   16
 plotly/validators/scatter3d/marker/colorbar/title/__init__.py                        |   15
 plotly/validators/scatter3d/marker/colorbar/title/_font.py                           |   42
 plotly/validators/scatter3d/marker/colorbar/title/_side.py                           |   17
 plotly/validators/scatter3d/marker/colorbar/title/_text.py                           |   16
 plotly/validators/scatter3d/marker/colorbar/title/font/__init__.py                   |   15
 plotly/validators/scatter3d/marker/colorbar/title/font/_color.py                     |   16
 plotly/validators/scatter3d/marker/colorbar/title/font/_family.py                    |   18
 plotly/validators/scatter3d/marker/colorbar/title/font/_size.py                      |   17
 plotly/validators/scatter3d/marker/line/__init__.py                                  |   35
 plotly/validators/scatter3d/marker/line/_autocolorscale.py                           |   17
 plotly/validators/scatter3d/marker/line/_cauto.py                                    |   14
 plotly/validators/scatter3d/marker/line/_cmax.py                                     |   14
 plotly/validators/scatter3d/marker/line/_cmid.py                                     |   14
 plotly/validators/scatter3d/marker/line/_cmin.py                                     |   14
 plotly/validators/scatter3d/marker/line/_color.py                                    |   17
 plotly/validators/scatter3d/marker/line/_coloraxis.py                                |   15
 plotly/validators/scatter3d/marker/line/_colorscale.py                               |   14
 plotly/validators/scatter3d/marker/line/_colorsrc.py                                 |   13
 plotly/validators/scatter3d/marker/line/_reversescale.py                             |   13
 plotly/validators/scatter3d/marker/line/_width.py                                    |   15
 plotly/validators/scatter3d/projection/__init__.py                                   |   13
 plotly/validators/scatter3d/projection/_x.py                                         |   24
 plotly/validators/scatter3d/projection/_y.py                                         |   24
 plotly/validators/scatter3d/projection/_z.py                                         |   24
 plotly/validators/scatter3d/projection/x/__init__.py                                 |   19
 plotly/validators/scatter3d/projection/x/_opacity.py                                 |   15
 plotly/validators/scatter3d/projection/x/_scale.py                                   |   15
 plotly/validators/scatter3d/projection/x/_show.py                                    |   13
 plotly/validators/scatter3d/projection/y/__init__.py                                 |   19
 plotly/validators/scatter3d/projection/y/_opacity.py                                 |   15
 plotly/validators/scatter3d/projection/y/_scale.py                                   |   15
 plotly/validators/scatter3d/projection/y/_show.py                                    |   13
 plotly/validators/scatter3d/projection/z/__init__.py                                 |   19
 plotly/validators/scatter3d/projection/z/_opacity.py                                 |   15
 plotly/validators/scatter3d/projection/z/_scale.py                                   |   15
 plotly/validators/scatter3d/projection/z/_show.py                                    |   13
 plotly/validators/scatter3d/stream/__init__.py                                       |   12
 plotly/validators/scatter3d/stream/_maxpoints.py                                     |   15
 plotly/validators/scatter3d/stream/_token.py                                         |   13
 plotly/validators/scatter3d/textfont/__init__.py                                     |   23
 plotly/validators/scatter3d/textfont/_color.py                                       |   12
 plotly/validators/scatter3d/textfont/_colorsrc.py                                    |   13
 plotly/validators/scatter3d/textfont/_family.py                                      |   16
 plotly/validators/scatter3d/textfont/_size.py                                        |   13
 plotly/validators/scatter3d/textfont/_sizesrc.py                                     |   13
 plotly/validators/scattercarpet/__init__.py                                          |  111
 plotly/validators/scattercarpet/_a.py                                                |   11
 plotly/validators/scattercarpet/_asrc.py                                             |   11
 plotly/validators/scattercarpet/_b.py                                                |   11
 plotly/validators/scattercarpet/_bsrc.py                                             |   11
 plotly/validators/scattercarpet/_carpet.py                                           |   11
 plotly/validators/scattercarpet/_connectgaps.py                                      |   13
 plotly/validators/scattercarpet/_customdata.py                                       |   11
 plotly/validators/scattercarpet/_customdatasrc.py                                    |   13
 plotly/validators/scattercarpet/_fill.py                                             |   12
 plotly/validators/scattercarpet/_fillcolor.py                                        |   11
 plotly/validators/scattercarpet/_hoverinfo.py                                        |   14
 plotly/validators/scattercarpet/_hoverinfosrc.py                                     |   13
 plotly/validators/scattercarpet/_hoverlabel.py                                       |   51
 plotly/validators/scattercarpet/_hoveron.py                                          |   12
 plotly/validators/scattercarpet/_hovertemplate.py                                    |   14
 plotly/validators/scattercarpet/_hovertemplatesrc.py                                 |   13
 plotly/validators/scattercarpet/_hovertext.py                                        |   12
 plotly/validators/scattercarpet/_hovertextsrc.py                                     |   13
 plotly/validators/scattercarpet/_ids.py                                              |   11
 plotly/validators/scattercarpet/_idssrc.py                                           |   11
 plotly/validators/scattercarpet/_legend.py                                           |   12
 plotly/validators/scattercarpet/_legendgroup.py                                      |   13
 plotly/validators/scattercarpet/_legendgrouptitle.py                                 |   22
 plotly/validators/scattercarpet/_legendrank.py                                       |   11
 plotly/validators/scattercarpet/_legendwidth.py                                      |   14
 plotly/validators/scattercarpet/_line.py                                             |   45
 plotly/validators/scattercarpet/_marker.py                                           |  166
 plotly/validators/scattercarpet/_meta.py                                             |   12
 plotly/validators/scattercarpet/_metasrc.py                                          |   11
 plotly/validators/scattercarpet/_mode.py                                             |   13
 plotly/validators/scattercarpet/_name.py                                             |   11
 plotly/validators/scattercarpet/_opacity.py                                          |   13
 plotly/validators/scattercarpet/_selected.py                                         |   24
 plotly/validators/scattercarpet/_selectedpoints.py                                   |   13
 plotly/validators/scattercarpet/_showlegend.py                                       |   11
 plotly/validators/scattercarpet/_stream.py                                           |   25
 plotly/validators/scattercarpet/_text.py                                             |   12
 plotly/validators/scattercarpet/_textfont.py                                         |   46
 plotly/validators/scattercarpet/_textposition.py                                     |   28
 plotly/validators/scattercarpet/_textpositionsrc.py                                  |   13
 plotly/validators/scattercarpet/_textsrc.py                                          |   11
 plotly/validators/scattercarpet/_texttemplate.py                                     |   14
 plotly/validators/scattercarpet/_texttemplatesrc.py                                  |   13
 plotly/validators/scattercarpet/_uid.py                                              |   11
 plotly/validators/scattercarpet/_uirevision.py                                       |   11
 plotly/validators/scattercarpet/_unselected.py                                       |   24
 plotly/validators/scattercarpet/_visible.py                                          |   12
 plotly/validators/scattercarpet/_xaxis.py                                            |   12
 plotly/validators/scattercarpet/_yaxis.py                                            |   12
 plotly/validators/scattercarpet/hoverlabel/__init__.py                               |   31
 plotly/validators/scattercarpet/hoverlabel/_align.py                                 |   15
 plotly/validators/scattercarpet/hoverlabel/_alignsrc.py                              |   13
 plotly/validators/scattercarpet/hoverlabel/_bgcolor.py                               |   14
 plotly/validators/scattercarpet/hoverlabel/_bgcolorsrc.py                            |   13
 plotly/validators/scattercarpet/hoverlabel/_bordercolor.py                           |   17
 plotly/validators/scattercarpet/hoverlabel/_bordercolorsrc.py                        |   16
 plotly/validators/scattercarpet/hoverlabel/_font.py                                  |   48
 plotly/validators/scattercarpet/hoverlabel/_namelength.py                            |   15
 plotly/validators/scattercarpet/hoverlabel/_namelengthsrc.py                         |   16
 plotly/validators/scattercarpet/hoverlabel/font/__init__.py                          |   25
 plotly/validators/scattercarpet/hoverlabel/font/_color.py                            |   14
 plotly/validators/scattercarpet/hoverlabel/font/_colorsrc.py                         |   16
 plotly/validators/scattercarpet/hoverlabel/font/_family.py                           |   19
 plotly/validators/scattercarpet/hoverlabel/font/_familysrc.py                        |   16
 plotly/validators/scattercarpet/hoverlabel/font/_size.py                             |   15
 plotly/validators/scattercarpet/hoverlabel/font/_sizesrc.py                          |   16
 plotly/validators/scattercarpet/legendgrouptitle/__init__.py                         |   12
 plotly/validators/scattercarpet/legendgrouptitle/_font.py                            |   39
 plotly/validators/scattercarpet/legendgrouptitle/_text.py                            |   13
 plotly/validators/scattercarpet/legendgrouptitle/font/__init__.py                    |   15
 plotly/validators/scattercarpet/legendgrouptitle/font/_color.py                      |   16
 plotly/validators/scattercarpet/legendgrouptitle/font/_family.py                     |   18
 plotly/validators/scattercarpet/legendgrouptitle/font/_size.py                       |   17
 plotly/validators/scattercarpet/line/__init__.py                                     |   27
 plotly/validators/scattercarpet/line/_backoff.py                                     |   15
 plotly/validators/scattercarpet/line/_backoffsrc.py                                  |   13
 plotly/validators/scattercarpet/line/_color.py                                       |   11
 plotly/validators/scattercarpet/line/_dash.py                                        |   14
 plotly/validators/scattercarpet/line/_shape.py                                       |   12
 plotly/validators/scattercarpet/line/_smoothing.py                                   |   15
 plotly/validators/scattercarpet/line/_width.py                                       |   12
 plotly/validators/scattercarpet/marker/__init__.py                                   |   71
 plotly/validators/scattercarpet/marker/_angle.py                                     |   14
 plotly/validators/scattercarpet/marker/_angleref.py                                  |   14
 plotly/validators/scattercarpet/marker/_anglesrc.py                                  |   13
 plotly/validators/scattercarpet/marker/_autocolorscale.py                            |   14
 plotly/validators/scattercarpet/marker/_cauto.py                                     |   14
 plotly/validators/scattercarpet/marker/_cmax.py                                      |   14
 plotly/validators/scattercarpet/marker/_cmid.py                                      |   14
 plotly/validators/scattercarpet/marker/_cmin.py                                      |   14
 plotly/validators/scattercarpet/marker/_color.py                                     |   17
 plotly/validators/scattercarpet/marker/_coloraxis.py                                 |   15
 plotly/validators/scattercarpet/marker/_colorbar.py                                  |  297
 plotly/validators/scattercarpet/marker/_colorscale.py                                |   14
 plotly/validators/scattercarpet/marker/_colorsrc.py                                  |   13
 plotly/validators/scattercarpet/marker/_gradient.py                                  |   31
 plotly/validators/scattercarpet/marker/_line.py                                      |  107
 plotly/validators/scattercarpet/marker/_maxdisplayed.py                              |   14
 plotly/validators/scattercarpet/marker/_opacity.py                                   |   16
 plotly/validators/scattercarpet/marker/_opacitysrc.py                                |   13
 plotly/validators/scattercarpet/marker/_reversescale.py                              |   13
 plotly/validators/scattercarpet/marker/_showscale.py                                 |   13
 plotly/validators/scattercarpet/marker/_size.py                                      |   15
 plotly/validators/scattercarpet/marker/_sizemin.py                                   |   14
 plotly/validators/scattercarpet/marker/_sizemode.py                                  |   14
 plotly/validators/scattercarpet/marker/_sizeref.py                                   |   13
 plotly/validators/scattercarpet/marker/_sizesrc.py                                   |   13
 plotly/validators/scattercarpet/marker/_standoff.py                                  |   15
 plotly/validators/scattercarpet/marker/_standoffsrc.py                               |   13
 plotly/validators/scattercarpet/marker/_symbol.py                                    |  505
 plotly/validators/scattercarpet/marker/_symbolsrc.py                                 |   13
 plotly/validators/scattercarpet/marker/colorbar/__init__.py                          |  111
 plotly/validators/scattercarpet/marker/colorbar/_bgcolor.py                          |   16
 plotly/validators/scattercarpet/marker/colorbar/_bordercolor.py                      |   16
 plotly/validators/scattercarpet/marker/colorbar/_borderwidth.py                      |   17
 plotly/validators/scattercarpet/marker/colorbar/_dtick.py                            |   14
 plotly/validators/scattercarpet/marker/colorbar/_exponentformat.py                   |   17
 plotly/validators/scattercarpet/marker/colorbar/_labelalias.py                       |   16
 plotly/validators/scattercarpet/marker/colorbar/_len.py                              |   14
 plotly/validators/scattercarpet/marker/colorbar/_lenmode.py                          |   17
 plotly/validators/scattercarpet/marker/colorbar/_minexponent.py                      |   17
 plotly/validators/scattercarpet/marker/colorbar/_nticks.py                           |   17
 plotly/validators/scattercarpet/marker/colorbar/_orientation.py                      |   17
 plotly/validators/scattercarpet/marker/colorbar/_outlinecolor.py                     |   16
 plotly/validators/scattercarpet/marker/colorbar/_outlinewidth.py                     |   17
 plotly/validators/scattercarpet/marker/colorbar/_separatethousands.py                |   16
 plotly/validators/scattercarpet/marker/colorbar/_showexponent.py                     |   17
 plotly/validators/scattercarpet/marker/colorbar/_showticklabels.py                   |   16
 plotly/validators/scattercarpet/marker/colorbar/_showtickprefix.py                   |   17
 plotly/validators/scattercarpet/marker/colorbar/_showticksuffix.py                   |   17
 plotly/validators/scattercarpet/marker/colorbar/_thickness.py                        |   17
 plotly/validators/scattercarpet/marker/colorbar/_thicknessmode.py                    |   17
 plotly/validators/scattercarpet/marker/colorbar/_tick0.py                            |   14
 plotly/validators/scattercarpet/marker/colorbar/_tickangle.py                        |   16
 plotly/validators/scattercarpet/marker/colorbar/_tickcolor.py                        |   16
 plotly/validators/scattercarpet/marker/colorbar/_tickfont.py                         |   42
 plotly/validators/scattercarpet/marker/colorbar/_tickformat.py                       |   16
 plotly/validators/scattercarpet/marker/colorbar/_tickformatstopdefaults.py           |   21
 plotly/validators/scattercarpet/marker/colorbar/_tickformatstops.py                  |   54
 plotly/validators/scattercarpet/marker/colorbar/_ticklabeloverflow.py                |   17
 plotly/validators/scattercarpet/marker/colorbar/_ticklabelposition.py                |   31
 plotly/validators/scattercarpet/marker/colorbar/_ticklabelstep.py                    |   17
 plotly/validators/scattercarpet/marker/colorbar/_ticklen.py                          |   17
 plotly/validators/scattercarpet/marker/colorbar/_tickmode.py                         |   18
 plotly/validators/scattercarpet/marker/colorbar/_tickprefix.py                       |   16
 plotly/validators/scattercarpet/marker/colorbar/_ticks.py                            |   14
 plotly/validators/scattercarpet/marker/colorbar/_ticksuffix.py                       |   16
 plotly/validators/scattercarpet/marker/colorbar/_ticktext.py                         |   16
 plotly/validators/scattercarpet/marker/colorbar/_ticktextsrc.py                      |   16
 plotly/validators/scattercarpet/marker/colorbar/_tickvals.py                         |   16
 plotly/validators/scattercarpet/marker/colorbar/_tickvalssrc.py                      |   16
 plotly/validators/scattercarpet/marker/colorbar/_tickwidth.py                        |   17
 plotly/validators/scattercarpet/marker/colorbar/_title.py                            |   35
 plotly/validators/scattercarpet/marker/colorbar/_x.py                                |   13
 plotly/validators/scattercarpet/marker/colorbar/_xanchor.py                          |   17
 plotly/validators/scattercarpet/marker/colorbar/_xpad.py                             |   14
 plotly/validators/scattercarpet/marker/colorbar/_xref.py                             |   14
 plotly/validators/scattercarpet/marker/colorbar/_y.py                                |   13
 plotly/validators/scattercarpet/marker/colorbar/_yanchor.py                          |   17
 plotly/validators/scattercarpet/marker/colorbar/_ypad.py                             |   14
 plotly/validators/scattercarpet/marker/colorbar/_yref.py                             |   14
 plotly/validators/scattercarpet/marker/colorbar/tickfont/__init__.py                 |   15
 plotly/validators/scattercarpet/marker/colorbar/tickfont/_color.py                   |   16
 plotly/validators/scattercarpet/marker/colorbar/tickfont/_family.py                  |   18
 plotly/validators/scattercarpet/marker/colorbar/tickfont/_size.py                    |   17
 plotly/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py           |   23
 plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_dtickrange.py        |   23
 plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_enabled.py           |   16
 plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_name.py              |   16
 plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_templateitemname.py  |   16
 plotly/validators/scattercarpet/marker/colorbar/tickformatstop/_value.py             |   16
 plotly/validators/scattercarpet/marker/colorbar/title/__init__.py                    |   15
 plotly/validators/scattercarpet/marker/colorbar/title/_font.py                       |   42
 plotly/validators/scattercarpet/marker/colorbar/title/_side.py                       |   17
 plotly/validators/scattercarpet/marker/colorbar/title/_text.py                       |   16
 plotly/validators/scattercarpet/marker/colorbar/title/font/__init__.py               |   15
 plotly/validators/scattercarpet/marker/colorbar/title/font/_color.py                 |   16
 plotly/validators/scattercarpet/marker/colorbar/title/font/_family.py                |   18
 plotly/validators/scattercarpet/marker/colorbar/title/font/_size.py                  |   17
 plotly/validators/scattercarpet/marker/gradient/__init__.py                          |   21
 plotly/validators/scattercarpet/marker/gradient/_color.py                            |   14
 plotly/validators/scattercarpet/marker/gradient/_colorsrc.py                         |   16
 plotly/validators/scattercarpet/marker/gradient/_type.py                             |   15
 plotly/validators/scattercarpet/marker/gradient/_typesrc.py                          |   16
 plotly/validators/scattercarpet/marker/line/__init__.py                              |   37
 plotly/validators/scattercarpet/marker/line/_autocolorscale.py                       |   17
 plotly/validators/scattercarpet/marker/line/_cauto.py                                |   14
 plotly/validators/scattercarpet/marker/line/_cmax.py                                 |   14
 plotly/validators/scattercarpet/marker/line/_cmid.py                                 |   14
 plotly/validators/scattercarpet/marker/line/_cmin.py                                 |   14
 plotly/validators/scattercarpet/marker/line/_color.py                                |   17
 plotly/validators/scattercarpet/marker/line/_coloraxis.py                            |   15
 plotly/validators/scattercarpet/marker/line/_colorscale.py                           |   17
 plotly/validators/scattercarpet/marker/line/_colorsrc.py                             |   13
 plotly/validators/scattercarpet/marker/line/_reversescale.py                         |   16
 plotly/validators/scattercarpet/marker/line/_width.py                                |   15
 plotly/validators/scattercarpet/marker/line/_widthsrc.py                             |   13
 plotly/validators/scattercarpet/selected/__init__.py                                 |   12
 plotly/validators/scattercarpet/selected/_marker.py                                  |   24
 plotly/validators/scattercarpet/selected/_textfont.py                                |   20
 plotly/validators/scattercarpet/selected/marker/__init__.py                          |   19
 plotly/validators/scattercarpet/selected/marker/_color.py                            |   13
 plotly/validators/scattercarpet/selected/marker/_opacity.py                          |   18
 plotly/validators/scattercarpet/selected/marker/_size.py                             |   14
 plotly/validators/scattercarpet/selected/textfont/__init__.py                        |   11
 plotly/validators/scattercarpet/selected/textfont/_color.py                          |   16
 plotly/validators/scattercarpet/stream/__init__.py                                   |   12
 plotly/validators/scattercarpet/stream/_maxpoints.py                                 |   15
 plotly/validators/scattercarpet/stream/_token.py                                     |   15
 plotly/validators/scattercarpet/textfont/__init__.py                                 |   25
 plotly/validators/scattercarpet/textfont/_color.py                                   |   14
 plotly/validators/scattercarpet/textfont/_colorsrc.py                                |   13
 plotly/validators/scattercarpet/textfont/_family.py                                  |   16
 plotly/validators/scattercarpet/textfont/_familysrc.py                               |   13
 plotly/validators/scattercarpet/textfont/_size.py                                    |   15
 plotly/validators/scattercarpet/textfont/_sizesrc.py                                 |   13
 plotly/validators/scattercarpet/unselected/__init__.py                               |   12
 plotly/validators/scattercarpet/unselected/_marker.py                                |   27
 plotly/validators/scattercarpet/unselected/_textfont.py                              |   21
 plotly/validators/scattercarpet/unselected/marker/__init__.py                        |   19
 plotly/validators/scattercarpet/unselected/marker/_color.py                          |   16
 plotly/validators/scattercarpet/unselected/marker/_opacity.py                        |   18
 plotly/validators/scattercarpet/unselected/marker/_size.py                           |   17
 plotly/validators/scattercarpet/unselected/textfont/__init__.py                      |   11
 plotly/validators/scattercarpet/unselected/textfont/_color.py                        |   16
 plotly/validators/scattergeo/__init__.py                                             |  115
 plotly/validators/scattergeo/_connectgaps.py                                         |   11
 plotly/validators/scattergeo/_customdata.py                                          |   11
 plotly/validators/scattergeo/_customdatasrc.py                                       |   11
 plotly/validators/scattergeo/_featureidkey.py                                        |   11
 plotly/validators/scattergeo/_fill.py                                                |   12
 plotly/validators/scattergeo/_fillcolor.py                                           |   11
 plotly/validators/scattergeo/_geo.py                                                 |   12
 plotly/validators/scattergeo/_geojson.py                                             |   11
 plotly/validators/scattergeo/_hoverinfo.py                                           |   14
 plotly/validators/scattergeo/_hoverinfosrc.py                                        |   11
 plotly/validators/scattergeo/_hoverlabel.py                                          |   51
 plotly/validators/scattergeo/_hovertemplate.py                                       |   12
 plotly/validators/scattergeo/_hovertemplatesrc.py                                    |   13
 plotly/validators/scattergeo/_hovertext.py                                           |   12
 plotly/validators/scattergeo/_hovertextsrc.py                                        |   11
 plotly/validators/scattergeo/_ids.py                                                 |   11
 plotly/validators/scattergeo/_idssrc.py                                              |   11
 plotly/validators/scattergeo/_lat.py                                                 |   11
 plotly/validators/scattergeo/_latsrc.py                                              |   11
 plotly/validators/scattergeo/_legend.py                                              |   12
 plotly/validators/scattergeo/_legendgroup.py                                         |   11
 plotly/validators/scattergeo/_legendgrouptitle.py                                    |   22
 plotly/validators/scattergeo/_legendrank.py                                          |   11
 plotly/validators/scattergeo/_legendwidth.py                                         |   12
 plotly/validators/scattergeo/_line.py                                                |   25
 plotly/validators/scattergeo/_locationmode.py                                        |   14
 plotly/validators/scattergeo/_locations.py                                           |   11
 plotly/validators/scattergeo/_locationssrc.py                                        |   11
 plotly/validators/scattergeo/_lon.py                                                 |   11
 plotly/validators/scattergeo/_lonsrc.py                                              |   11
 plotly/validators/scattergeo/_marker.py                                              |  165
 plotly/validators/scattergeo/_meta.py                                                |   12
 plotly/validators/scattergeo/_metasrc.py                                             |   11
 plotly/validators/scattergeo/_mode.py                                                |   13
 plotly/validators/scattergeo/_name.py                                                |   11
 plotly/validators/scattergeo/_opacity.py                                             |   13
 plotly/validators/scattergeo/_selected.py                                            |   24
 plotly/validators/scattergeo/_selectedpoints.py                                      |   13
 plotly/validators/scattergeo/_showlegend.py                                          |   11
 plotly/validators/scattergeo/_stream.py                                              |   25
 plotly/validators/scattergeo/_text.py                                                |   12
 plotly/validators/scattergeo/_textfont.py                                            |   46
 plotly/validators/scattergeo/_textposition.py                                        |   26
 plotly/validators/scattergeo/_textpositionsrc.py                                     |   13
 plotly/validators/scattergeo/_textsrc.py                                             |   11
 plotly/validators/scattergeo/_texttemplate.py                                        |   12
 plotly/validators/scattergeo/_texttemplatesrc.py                                     |   13
 plotly/validators/scattergeo/_uid.py                                                 |   11
 plotly/validators/scattergeo/_uirevision.py                                          |   11
 plotly/validators/scattergeo/_unselected.py                                          |   24
 plotly/validators/scattergeo/_visible.py                                             |   12
 plotly/validators/scattergeo/hoverlabel/__init__.py                                  |   31
 plotly/validators/scattergeo/hoverlabel/_align.py                                    |   15
 plotly/validators/scattergeo/hoverlabel/_alignsrc.py                                 |   13
 plotly/validators/scattergeo/hoverlabel/_bgcolor.py                                  |   14
 plotly/validators/scattergeo/hoverlabel/_bgcolorsrc.py                               |   13
 plotly/validators/scattergeo/hoverlabel/_bordercolor.py                              |   14
 plotly/validators/scattergeo/hoverlabel/_bordercolorsrc.py                           |   16
 plotly/validators/scattergeo/hoverlabel/_font.py                                     |   48
 plotly/validators/scattergeo/hoverlabel/_namelength.py                               |   15
 plotly/validators/scattergeo/hoverlabel/_namelengthsrc.py                            |   13
 plotly/validators/scattergeo/hoverlabel/font/__init__.py                             |   25
 plotly/validators/scattergeo/hoverlabel/font/_color.py                               |   14
 plotly/validators/scattergeo/hoverlabel/font/_colorsrc.py                            |   13
 plotly/validators/scattergeo/hoverlabel/font/_family.py                              |   16
 plotly/validators/scattergeo/hoverlabel/font/_familysrc.py                           |   16
 plotly/validators/scattergeo/hoverlabel/font/_size.py                                |   15
 plotly/validators/scattergeo/hoverlabel/font/_sizesrc.py                             |   13
 plotly/validators/scattergeo/legendgrouptitle/__init__.py                            |   12
 plotly/validators/scattergeo/legendgrouptitle/_font.py                               |   39
 plotly/validators/scattergeo/legendgrouptitle/_text.py                               |   13
 plotly/validators/scattergeo/legendgrouptitle/font/__init__.py                       |   15
 plotly/validators/scattergeo/legendgrouptitle/font/_color.py                         |   16
 plotly/validators/scattergeo/legendgrouptitle/font/_family.py                        |   18
 plotly/validators/scattergeo/legendgrouptitle/font/_size.py                          |   17
 plotly/validators/scattergeo/line/__init__.py                                        |   15
 plotly/validators/scattergeo/line/_color.py                                          |   11
 plotly/validators/scattergeo/line/_dash.py                                           |   14
 plotly/validators/scattergeo/line/_width.py                                          |   12
 plotly/validators/scattergeo/marker/__init__.py                                      |   69
 plotly/validators/scattergeo/marker/_angle.py                                        |   12
 plotly/validators/scattergeo/marker/_angleref.py                                     |   14
 plotly/validators/scattergeo/marker/_anglesrc.py                                     |   13
 plotly/validators/scattergeo/marker/_autocolorscale.py                               |   14
 plotly/validators/scattergeo/marker/_cauto.py                                        |   12
 plotly/validators/scattergeo/marker/_cmax.py                                         |   12
 plotly/validators/scattergeo/marker/_cmid.py                                         |   12
 plotly/validators/scattergeo/marker/_cmin.py                                         |   12
 plotly/validators/scattergeo/marker/_color.py                                        |   15
 plotly/validators/scattergeo/marker/_coloraxis.py                                    |   15
 plotly/validators/scattergeo/marker/_colorbar.py                                     |  297
 plotly/validators/scattergeo/marker/_colorscale.py                                   |   14
 plotly/validators/scattergeo/marker/_colorsrc.py                                     |   13
 plotly/validators/scattergeo/marker/_gradient.py                                     |   31
 plotly/validators/scattergeo/marker/_line.py                                         |  105
 plotly/validators/scattergeo/marker/_opacity.py                                      |   16
 plotly/validators/scattergeo/marker/_opacitysrc.py                                   |   13
 plotly/validators/scattergeo/marker/_reversescale.py                                 |   13
 plotly/validators/scattergeo/marker/_showscale.py                                    |   13
 plotly/validators/scattergeo/marker/_size.py                                         |   13
 plotly/validators/scattergeo/marker/_sizemin.py                                      |   14
 plotly/validators/scattergeo/marker/_sizemode.py                                     |   14
 plotly/validators/scattergeo/marker/_sizeref.py                                      |   13
 plotly/validators/scattergeo/marker/_sizesrc.py                                      |   13
 plotly/validators/scattergeo/marker/_standoff.py                                     |   15
 plotly/validators/scattergeo/marker/_standoffsrc.py                                  |   13
 plotly/validators/scattergeo/marker/_symbol.py                                       |  503
 plotly/validators/scattergeo/marker/_symbolsrc.py                                    |   13
 plotly/validators/scattergeo/marker/colorbar/__init__.py                             |  111
 plotly/validators/scattergeo/marker/colorbar/_bgcolor.py                             |   13
 plotly/validators/scattergeo/marker/colorbar/_bordercolor.py                         |   16
 plotly/validators/scattergeo/marker/colorbar/_borderwidth.py                         |   17
 plotly/validators/scattergeo/marker/colorbar/_dtick.py                               |   14
 plotly/validators/scattergeo/marker/colorbar/_exponentformat.py                      |   17
 plotly/validators/scattergeo/marker/colorbar/_labelalias.py                          |   16
 plotly/validators/scattergeo/marker/colorbar/_len.py                                 |   14
 plotly/validators/scattergeo/marker/colorbar/_lenmode.py                             |   14
 plotly/validators/scattergeo/marker/colorbar/_minexponent.py                         |   17
 plotly/validators/scattergeo/marker/colorbar/_nticks.py                              |   14
 plotly/validators/scattergeo/marker/colorbar/_orientation.py                         |   17
 plotly/validators/scattergeo/marker/colorbar/_outlinecolor.py                        |   16
 plotly/validators/scattergeo/marker/colorbar/_outlinewidth.py                        |   17
 plotly/validators/scattergeo/marker/colorbar/_separatethousands.py                   |   16
 plotly/validators/scattergeo/marker/colorbar/_showexponent.py                        |   17
 plotly/validators/scattergeo/marker/colorbar/_showticklabels.py                      |   16
 plotly/validators/scattergeo/marker/colorbar/_showtickprefix.py                      |   17
 plotly/validators/scattergeo/marker/colorbar/_showticksuffix.py                      |   17
 plotly/validators/scattergeo/marker/colorbar/_thickness.py                           |   17
 plotly/validators/scattergeo/marker/colorbar/_thicknessmode.py                       |   17
 plotly/validators/scattergeo/marker/colorbar/_tick0.py                               |   14
 plotly/validators/scattergeo/marker/colorbar/_tickangle.py                           |   16
 plotly/validators/scattergeo/marker/colorbar/_tickcolor.py                           |   16
 plotly/validators/scattergeo/marker/colorbar/_tickfont.py                            |   39
 plotly/validators/scattergeo/marker/colorbar/_tickformat.py                          |   16
 plotly/validators/scattergeo/marker/colorbar/_tickformatstopdefaults.py              |   21
 plotly/validators/scattergeo/marker/colorbar/_tickformatstops.py                     |   54
 plotly/validators/scattergeo/marker/colorbar/_ticklabeloverflow.py                   |   17
 plotly/validators/scattergeo/marker/colorbar/_ticklabelposition.py                   |   31
 plotly/validators/scattergeo/marker/colorbar/_ticklabelstep.py                       |   17
 plotly/validators/scattergeo/marker/colorbar/_ticklen.py                             |   14
 plotly/validators/scattergeo/marker/colorbar/_tickmode.py                            |   15
 plotly/validators/scattergeo/marker/colorbar/_tickprefix.py                          |   16
 plotly/validators/scattergeo/marker/colorbar/_ticks.py                               |   14
 plotly/validators/scattergeo/marker/colorbar/_ticksuffix.py                          |   16
 plotly/validators/scattergeo/marker/colorbar/_ticktext.py                            |   13
 plotly/validators/scattergeo/marker/colorbar/_ticktextsrc.py                         |   16
 plotly/validators/scattergeo/marker/colorbar/_tickvals.py                            |   13
 plotly/validators/scattergeo/marker/colorbar/_tickvalssrc.py                         |   16
 plotly/validators/scattergeo/marker/colorbar/_tickwidth.py                           |   17
 plotly/validators/scattergeo/marker/colorbar/_title.py                               |   35
 plotly/validators/scattergeo/marker/colorbar/_x.py                                   |   13
 plotly/validators/scattergeo/marker/colorbar/_xanchor.py                             |   14
 plotly/validators/scattergeo/marker/colorbar/_xpad.py                                |   14
 plotly/validators/scattergeo/marker/colorbar/_xref.py                                |   14
 plotly/validators/scattergeo/marker/colorbar/_y.py                                   |   13
 plotly/validators/scattergeo/marker/colorbar/_yanchor.py                             |   14
 plotly/validators/scattergeo/marker/colorbar/_ypad.py                                |   14
 plotly/validators/scattergeo/marker/colorbar/_yref.py                                |   14
 plotly/validators/scattergeo/marker/colorbar/tickfont/__init__.py                    |   15
 plotly/validators/scattergeo/marker/colorbar/tickfont/_color.py                      |   16
 plotly/validators/scattergeo/marker/colorbar/tickfont/_family.py                     |   18
 plotly/validators/scattergeo/marker/colorbar/tickfont/_size.py                       |   17
 plotly/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py              |   23
 plotly/validators/scattergeo/marker/colorbar/tickformatstop/_dtickrange.py           |   23
 plotly/validators/scattergeo/marker/colorbar/tickformatstop/_enabled.py              |   16
 plotly/validators/scattergeo/marker/colorbar/tickformatstop/_name.py                 |   16
 plotly/validators/scattergeo/marker/colorbar/tickformatstop/_templateitemname.py     |   16
 plotly/validators/scattergeo/marker/colorbar/tickformatstop/_value.py                |   16
 plotly/validators/scattergeo/marker/colorbar/title/__init__.py                       |   15
 plotly/validators/scattergeo/marker/colorbar/title/_font.py                          |   42
 plotly/validators/scattergeo/marker/colorbar/title/_side.py                          |   17
 plotly/validators/scattergeo/marker/colorbar/title/_text.py                          |   16
 plotly/validators/scattergeo/marker/colorbar/title/font/__init__.py                  |   15
 plotly/validators/scattergeo/marker/colorbar/title/font/_color.py                    |   16
 plotly/validators/scattergeo/marker/colorbar/title/font/_family.py                   |   18
 plotly/validators/scattergeo/marker/colorbar/title/font/_size.py                     |   17
 plotly/validators/scattergeo/marker/gradient/__init__.py                             |   21
 plotly/validators/scattergeo/marker/gradient/_color.py                               |   14
 plotly/validators/scattergeo/marker/gradient/_colorsrc.py                            |   13
 plotly/validators/scattergeo/marker/gradient/_type.py                                |   15
 plotly/validators/scattergeo/marker/gradient/_typesrc.py                             |   13
 plotly/validators/scattergeo/marker/line/__init__.py                                 |   37
 plotly/validators/scattergeo/marker/line/_autocolorscale.py                          |   17
 plotly/validators/scattergeo/marker/line/_cauto.py                                   |   14
 plotly/validators/scattergeo/marker/line/_cmax.py                                    |   14
 plotly/validators/scattergeo/marker/line/_cmid.py                                    |   14
 plotly/validators/scattergeo/marker/line/_cmin.py                                    |   14
 plotly/validators/scattergeo/marker/line/_color.py                                   |   17
 plotly/validators/scattergeo/marker/line/_coloraxis.py                               |   15
 plotly/validators/scattergeo/marker/line/_colorscale.py                              |   14
 plotly/validators/scattergeo/marker/line/_colorsrc.py                                |   13
 plotly/validators/scattergeo/marker/line/_reversescale.py                            |   13
 plotly/validators/scattergeo/marker/line/_width.py                                   |   15
 plotly/validators/scattergeo/marker/line/_widthsrc.py                                |   13
 plotly/validators/scattergeo/selected/__init__.py                                    |   12
 plotly/validators/scattergeo/selected/_marker.py                                     |   24
 plotly/validators/scattergeo/selected/_textfont.py                                   |   20
 plotly/validators/scattergeo/selected/marker/__init__.py                             |   19
 plotly/validators/scattergeo/selected/marker/_color.py                               |   13
 plotly/validators/scattergeo/selected/marker/_opacity.py                             |   15
 plotly/validators/scattergeo/selected/marker/_size.py                                |   14
 plotly/validators/scattergeo/selected/textfont/__init__.py                           |   11
 plotly/validators/scattergeo/selected/textfont/_color.py                             |   13
 plotly/validators/scattergeo/stream/__init__.py                                      |   12
 plotly/validators/scattergeo/stream/_maxpoints.py                                    |   15
 plotly/validators/scattergeo/stream/_token.py                                        |   13
 plotly/validators/scattergeo/textfont/__init__.py                                    |   25
 plotly/validators/scattergeo/textfont/_color.py                                      |   14
 plotly/validators/scattergeo/textfont/_colorsrc.py                                   |   13
 plotly/validators/scattergeo/textfont/_family.py                                     |   16
 plotly/validators/scattergeo/textfont/_familysrc.py                                  |   13
 plotly/validators/scattergeo/textfont/_size.py                                       |   13
 plotly/validators/scattergeo/textfont/_sizesrc.py                                    |   13
 plotly/validators/scattergeo/unselected/__init__.py                                  |   12
 plotly/validators/scattergeo/unselected/_marker.py                                   |   27
 plotly/validators/scattergeo/unselected/_textfont.py                                 |   21
 plotly/validators/scattergeo/unselected/marker/__init__.py                           |   19
 plotly/validators/scattergeo/unselected/marker/_color.py                             |   13
 plotly/validators/scattergeo/unselected/marker/_opacity.py                           |   18
 plotly/validators/scattergeo/unselected/marker/_size.py                              |   14
 plotly/validators/scattergeo/unselected/textfont/__init__.py                         |   11
 plotly/validators/scattergeo/unselected/textfont/_color.py                           |   16
 plotly/validators/scattergl/__init__.py                                              |  139
 plotly/validators/scattergl/_connectgaps.py                                          |   11
 plotly/validators/scattergl/_customdata.py                                           |   11
 plotly/validators/scattergl/_customdatasrc.py                                        |   11
 plotly/validators/scattergl/_dx.py                                                   |   11
 plotly/validators/scattergl/_dy.py                                                   |   11
 plotly/validators/scattergl/_error_x.py                                              |   73
 plotly/validators/scattergl/_error_y.py                                              |   71
 plotly/validators/scattergl/_fill.py                                                 |   23
 plotly/validators/scattergl/_fillcolor.py                                            |   11
 plotly/validators/scattergl/_hoverinfo.py                                            |   14
 plotly/validators/scattergl/_hoverinfosrc.py                                         |   11
 plotly/validators/scattergl/_hoverlabel.py                                           |   51
 plotly/validators/scattergl/_hovertemplate.py                                        |   12
 plotly/validators/scattergl/_hovertemplatesrc.py                                     |   13
 plotly/validators/scattergl/_hovertext.py                                            |   12
 plotly/validators/scattergl/_hovertextsrc.py                                         |   11
 plotly/validators/scattergl/_ids.py                                                  |   11
 plotly/validators/scattergl/_idssrc.py                                               |   11
 plotly/validators/scattergl/_legend.py                                               |   12
 plotly/validators/scattergl/_legendgroup.py                                          |   11
 plotly/validators/scattergl/_legendgrouptitle.py                                     |   22
 plotly/validators/scattergl/_legendrank.py                                           |   11
 plotly/validators/scattergl/_legendwidth.py                                          |   12
 plotly/validators/scattergl/_line.py                                                 |   25
 plotly/validators/scattergl/_marker.py                                               |  145
 plotly/validators/scattergl/_meta.py                                                 |   12
 plotly/validators/scattergl/_metasrc.py                                              |   11
 plotly/validators/scattergl/_mode.py                                                 |   13
 plotly/validators/scattergl/_name.py                                                 |   11
 plotly/validators/scattergl/_opacity.py                                              |   13
 plotly/validators/scattergl/_selected.py                                             |   24
 plotly/validators/scattergl/_selectedpoints.py                                       |   11
 plotly/validators/scattergl/_showlegend.py                                           |   11
 plotly/validators/scattergl/_stream.py                                               |   25
 plotly/validators/scattergl/_text.py                                                 |   12
 plotly/validators/scattergl/_textfont.py                                             |   46
 plotly/validators/scattergl/_textposition.py                                         |   26
 plotly/validators/scattergl/_textpositionsrc.py                                      |   13
 plotly/validators/scattergl/_textsrc.py                                              |   11
 plotly/validators/scattergl/_texttemplate.py                                         |   12
 plotly/validators/scattergl/_texttemplatesrc.py                                      |   13
 plotly/validators/scattergl/_uid.py                                                  |   11
 plotly/validators/scattergl/_uirevision.py                                           |   11
 plotly/validators/scattergl/_unselected.py                                           |   24
 plotly/validators/scattergl/_visible.py                                              |   12
 plotly/validators/scattergl/_x.py                                                    |   11
 plotly/validators/scattergl/_x0.py                                                   |   11
 plotly/validators/scattergl/_xaxis.py                                                |   12
 plotly/validators/scattergl/_xcalendar.py                                            |   32
 plotly/validators/scattergl/_xhoverformat.py                                         |   11
 plotly/validators/scattergl/_xperiod.py                                              |   11
 plotly/validators/scattergl/_xperiod0.py                                             |   11
 plotly/validators/scattergl/_xperiodalignment.py                                     |   14
 plotly/validators/scattergl/_xsrc.py                                                 |   11
 plotly/validators/scattergl/_y.py                                                    |   11
 plotly/validators/scattergl/_y0.py                                                   |   11
 plotly/validators/scattergl/_yaxis.py                                                |   12
 plotly/validators/scattergl/_ycalendar.py                                            |   32
 plotly/validators/scattergl/_yhoverformat.py                                         |   11
 plotly/validators/scattergl/_yperiod.py                                              |   11
 plotly/validators/scattergl/_yperiod0.py                                             |   11
 plotly/validators/scattergl/_yperiodalignment.py                                     |   14
 plotly/validators/scattergl/_ysrc.py                                                 |   11
 plotly/validators/scattergl/error_x/__init__.py                                      |   43
 plotly/validators/scattergl/error_x/_array.py                                        |   11
 plotly/validators/scattergl/error_x/_arrayminus.py                                   |   13
 plotly/validators/scattergl/error_x/_arrayminussrc.py                                |   13
 plotly/validators/scattergl/error_x/_arraysrc.py                                     |   13
 plotly/validators/scattergl/error_x/_color.py                                        |   11
 plotly/validators/scattergl/error_x/_copy_ystyle.py                                  |   13
 plotly/validators/scattergl/error_x/_symmetric.py                                    |   13
 plotly/validators/scattergl/error_x/_thickness.py                                    |   14
 plotly/validators/scattergl/error_x/_traceref.py                                     |   14
 plotly/validators/scattergl/error_x/_tracerefminus.py                                |   14
 plotly/validators/scattergl/error_x/_type.py                                         |   12
 plotly/validators/scattergl/error_x/_value.py                                        |   12
 plotly/validators/scattergl/error_x/_valueminus.py                                   |   14
 plotly/validators/scattergl/error_x/_visible.py                                      |   13
 plotly/validators/scattergl/error_x/_width.py                                        |   12
 plotly/validators/scattergl/error_y/__init__.py                                      |   41
 plotly/validators/scattergl/error_y/_array.py                                        |   11
 plotly/validators/scattergl/error_y/_arrayminus.py                                   |   13
 plotly/validators/scattergl/error_y/_arrayminussrc.py                                |   13
 plotly/validators/scattergl/error_y/_arraysrc.py                                     |   13
 plotly/validators/scattergl/error_y/_color.py                                        |   11
 plotly/validators/scattergl/error_y/_symmetric.py                                    |   13
 plotly/validators/scattergl/error_y/_thickness.py                                    |   14
 plotly/validators/scattergl/error_y/_traceref.py                                     |   14
 plotly/validators/scattergl/error_y/_tracerefminus.py                                |   14
 plotly/validators/scattergl/error_y/_type.py                                         |   12
 plotly/validators/scattergl/error_y/_value.py                                        |   12
 plotly/validators/scattergl/error_y/_valueminus.py                                   |   14
 plotly/validators/scattergl/error_y/_visible.py                                      |   13
 plotly/validators/scattergl/error_y/_width.py                                        |   12
 plotly/validators/scattergl/hoverlabel/__init__.py                                   |   31
 plotly/validators/scattergl/hoverlabel/_align.py                                     |   15
 plotly/validators/scattergl/hoverlabel/_alignsrc.py                                  |   13
 plotly/validators/scattergl/hoverlabel/_bgcolor.py                                   |   14
 plotly/validators/scattergl/hoverlabel/_bgcolorsrc.py                                |   13
 plotly/validators/scattergl/hoverlabel/_bordercolor.py                               |   14
 plotly/validators/scattergl/hoverlabel/_bordercolorsrc.py                            |   13
 plotly/validators/scattergl/hoverlabel/_font.py                                      |   48
 plotly/validators/scattergl/hoverlabel/_namelength.py                                |   15
 plotly/validators/scattergl/hoverlabel/_namelengthsrc.py                             |   13
 plotly/validators/scattergl/hoverlabel/font/__init__.py                              |   25
 plotly/validators/scattergl/hoverlabel/font/_color.py                                |   14
 plotly/validators/scattergl/hoverlabel/font/_colorsrc.py                             |   13
 plotly/validators/scattergl/hoverlabel/font/_family.py                               |   16
 plotly/validators/scattergl/hoverlabel/font/_familysrc.py                            |   13
 plotly/validators/scattergl/hoverlabel/font/_size.py                                 |   15
 plotly/validators/scattergl/hoverlabel/font/_sizesrc.py                              |   13
 plotly/validators/scattergl/legendgrouptitle/__init__.py                             |   12
 plotly/validators/scattergl/legendgrouptitle/_font.py                                |   39
 plotly/validators/scattergl/legendgrouptitle/_text.py                                |   13
 plotly/validators/scattergl/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/scattergl/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/scattergl/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/scattergl/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/scattergl/line/__init__.py                                         |   21
 plotly/validators/scattergl/line/_color.py                                           |   11
 plotly/validators/scattergl/line/_dash.py                                            |   14
 plotly/validators/scattergl/line/_shape.py                                           |   12
 plotly/validators/scattergl/line/_width.py                                           |   12
 plotly/validators/scattergl/marker/__init__.py                                       |   61
 plotly/validators/scattergl/marker/_angle.py                                         |   12
 plotly/validators/scattergl/marker/_anglesrc.py                                      |   13
 plotly/validators/scattergl/marker/_autocolorscale.py                                |   14
 plotly/validators/scattergl/marker/_cauto.py                                         |   12
 plotly/validators/scattergl/marker/_cmax.py                                          |   12
 plotly/validators/scattergl/marker/_cmid.py                                          |   12
 plotly/validators/scattergl/marker/_cmin.py                                          |   12
 plotly/validators/scattergl/marker/_color.py                                         |   15
 plotly/validators/scattergl/marker/_coloraxis.py                                     |   15
 plotly/validators/scattergl/marker/_colorbar.py                                      |  297
 plotly/validators/scattergl/marker/_colorscale.py                                    |   14
 plotly/validators/scattergl/marker/_colorsrc.py                                      |   13
 plotly/validators/scattergl/marker/_line.py                                          |  105
 plotly/validators/scattergl/marker/_opacity.py                                       |   14
 plotly/validators/scattergl/marker/_opacitysrc.py                                    |   13
 plotly/validators/scattergl/marker/_reversescale.py                                  |   13
 plotly/validators/scattergl/marker/_showscale.py                                     |   13
 plotly/validators/scattergl/marker/_size.py                                          |   13
 plotly/validators/scattergl/marker/_sizemin.py                                       |   12
 plotly/validators/scattergl/marker/_sizemode.py                                      |   14
 plotly/validators/scattergl/marker/_sizeref.py                                       |   11
 plotly/validators/scattergl/marker/_sizesrc.py                                       |   11
 plotly/validators/scattergl/marker/_symbol.py                                        |  503
 plotly/validators/scattergl/marker/_symbolsrc.py                                     |   13
 plotly/validators/scattergl/marker/colorbar/__init__.py                              |  111
 plotly/validators/scattergl/marker/colorbar/_bgcolor.py                              |   13
 plotly/validators/scattergl/marker/colorbar/_bordercolor.py                          |   16
 plotly/validators/scattergl/marker/colorbar/_borderwidth.py                          |   17
 plotly/validators/scattergl/marker/colorbar/_dtick.py                                |   14
 plotly/validators/scattergl/marker/colorbar/_exponentformat.py                       |   17
 plotly/validators/scattergl/marker/colorbar/_labelalias.py                           |   16
 plotly/validators/scattergl/marker/colorbar/_len.py                                  |   14
 plotly/validators/scattergl/marker/colorbar/_lenmode.py                              |   14
 plotly/validators/scattergl/marker/colorbar/_minexponent.py                          |   17
 plotly/validators/scattergl/marker/colorbar/_nticks.py                               |   14
 plotly/validators/scattergl/marker/colorbar/_orientation.py                          |   17
 plotly/validators/scattergl/marker/colorbar/_outlinecolor.py                         |   16
 plotly/validators/scattergl/marker/colorbar/_outlinewidth.py                         |   17
 plotly/validators/scattergl/marker/colorbar/_separatethousands.py                    |   16
 plotly/validators/scattergl/marker/colorbar/_showexponent.py                         |   17
 plotly/validators/scattergl/marker/colorbar/_showticklabels.py                       |   16
 plotly/validators/scattergl/marker/colorbar/_showtickprefix.py                       |   17
 plotly/validators/scattergl/marker/colorbar/_showticksuffix.py                       |   17
 plotly/validators/scattergl/marker/colorbar/_thickness.py                            |   14
 plotly/validators/scattergl/marker/colorbar/_thicknessmode.py                        |   17
 plotly/validators/scattergl/marker/colorbar/_tick0.py                                |   14
 plotly/validators/scattergl/marker/colorbar/_tickangle.py                            |   13
 plotly/validators/scattergl/marker/colorbar/_tickcolor.py                            |   13
 plotly/validators/scattergl/marker/colorbar/_tickfont.py                             |   39
 plotly/validators/scattergl/marker/colorbar/_tickformat.py                           |   16
 plotly/validators/scattergl/marker/colorbar/_tickformatstopdefaults.py               |   21
 plotly/validators/scattergl/marker/colorbar/_tickformatstops.py                      |   54
 plotly/validators/scattergl/marker/colorbar/_ticklabeloverflow.py                    |   17
 plotly/validators/scattergl/marker/colorbar/_ticklabelposition.py                    |   31
 plotly/validators/scattergl/marker/colorbar/_ticklabelstep.py                        |   17
 plotly/validators/scattergl/marker/colorbar/_ticklen.py                              |   14
 plotly/validators/scattergl/marker/colorbar/_tickmode.py                             |   15
 plotly/validators/scattergl/marker/colorbar/_tickprefix.py                           |   16
 plotly/validators/scattergl/marker/colorbar/_ticks.py                                |   14
 plotly/validators/scattergl/marker/colorbar/_ticksuffix.py                           |   16
 plotly/validators/scattergl/marker/colorbar/_ticktext.py                             |   13
 plotly/validators/scattergl/marker/colorbar/_ticktextsrc.py                          |   16
 plotly/validators/scattergl/marker/colorbar/_tickvals.py                             |   13
 plotly/validators/scattergl/marker/colorbar/_tickvalssrc.py                          |   16
 plotly/validators/scattergl/marker/colorbar/_tickwidth.py                            |   14
 plotly/validators/scattergl/marker/colorbar/_title.py                                |   35
 plotly/validators/scattergl/marker/colorbar/_x.py                                    |   13
 plotly/validators/scattergl/marker/colorbar/_xanchor.py                              |   14
 plotly/validators/scattergl/marker/colorbar/_xpad.py                                 |   14
 plotly/validators/scattergl/marker/colorbar/_xref.py                                 |   14
 plotly/validators/scattergl/marker/colorbar/_y.py                                    |   13
 plotly/validators/scattergl/marker/colorbar/_yanchor.py                              |   14
 plotly/validators/scattergl/marker/colorbar/_ypad.py                                 |   14
 plotly/validators/scattergl/marker/colorbar/_yref.py                                 |   14
 plotly/validators/scattergl/marker/colorbar/tickfont/__init__.py                     |   15
 plotly/validators/scattergl/marker/colorbar/tickfont/_color.py                       |   16
 plotly/validators/scattergl/marker/colorbar/tickfont/_family.py                      |   18
 plotly/validators/scattergl/marker/colorbar/tickfont/_size.py                        |   17
 plotly/validators/scattergl/marker/colorbar/tickformatstop/__init__.py               |   23
 plotly/validators/scattergl/marker/colorbar/tickformatstop/_dtickrange.py            |   23
 plotly/validators/scattergl/marker/colorbar/tickformatstop/_enabled.py               |   16
 plotly/validators/scattergl/marker/colorbar/tickformatstop/_name.py                  |   16
 plotly/validators/scattergl/marker/colorbar/tickformatstop/_templateitemname.py      |   16
 plotly/validators/scattergl/marker/colorbar/tickformatstop/_value.py                 |   16
 plotly/validators/scattergl/marker/colorbar/title/__init__.py                        |   15
 plotly/validators/scattergl/marker/colorbar/title/_font.py                           |   42
 plotly/validators/scattergl/marker/colorbar/title/_side.py                           |   17
 plotly/validators/scattergl/marker/colorbar/title/_text.py                           |   16
 plotly/validators/scattergl/marker/colorbar/title/font/__init__.py                   |   15
 plotly/validators/scattergl/marker/colorbar/title/font/_color.py                     |   16
 plotly/validators/scattergl/marker/colorbar/title/font/_family.py                    |   18
 plotly/validators/scattergl/marker/colorbar/title/font/_size.py                      |   17
 plotly/validators/scattergl/marker/line/__init__.py                                  |   37
 plotly/validators/scattergl/marker/line/_autocolorscale.py                           |   17
 plotly/validators/scattergl/marker/line/_cauto.py                                    |   14
 plotly/validators/scattergl/marker/line/_cmax.py                                     |   14
 plotly/validators/scattergl/marker/line/_cmid.py                                     |   14
 plotly/validators/scattergl/marker/line/_cmin.py                                     |   14
 plotly/validators/scattergl/marker/line/_color.py                                    |   17
 plotly/validators/scattergl/marker/line/_coloraxis.py                                |   15
 plotly/validators/scattergl/marker/line/_colorscale.py                               |   14
 plotly/validators/scattergl/marker/line/_colorsrc.py                                 |   13
 plotly/validators/scattergl/marker/line/_reversescale.py                             |   13
 plotly/validators/scattergl/marker/line/_width.py                                    |   15
 plotly/validators/scattergl/marker/line/_widthsrc.py                                 |   13
 plotly/validators/scattergl/selected/__init__.py                                     |   12
 plotly/validators/scattergl/selected/_marker.py                                      |   24
 plotly/validators/scattergl/selected/_textfont.py                                    |   20
 plotly/validators/scattergl/selected/marker/__init__.py                              |   19
 plotly/validators/scattergl/selected/marker/_color.py                                |   13
 plotly/validators/scattergl/selected/marker/_opacity.py                              |   15
 plotly/validators/scattergl/selected/marker/_size.py                                 |   14
 plotly/validators/scattergl/selected/textfont/__init__.py                            |   11
 plotly/validators/scattergl/selected/textfont/_color.py                              |   13
 plotly/validators/scattergl/stream/__init__.py                                       |   12
 plotly/validators/scattergl/stream/_maxpoints.py                                     |   15
 plotly/validators/scattergl/stream/_token.py                                         |   13
 plotly/validators/scattergl/textfont/__init__.py                                     |   25
 plotly/validators/scattergl/textfont/_color.py                                       |   12
 plotly/validators/scattergl/textfont/_colorsrc.py                                    |   13
 plotly/validators/scattergl/textfont/_family.py                                      |   16
 plotly/validators/scattergl/textfont/_familysrc.py                                   |   13
 plotly/validators/scattergl/textfont/_size.py                                        |   13
 plotly/validators/scattergl/textfont/_sizesrc.py                                     |   13
 plotly/validators/scattergl/unselected/__init__.py                                   |   12
 plotly/validators/scattergl/unselected/_marker.py                                    |   27
 plotly/validators/scattergl/unselected/_textfont.py                                  |   21
 plotly/validators/scattergl/unselected/marker/__init__.py                            |   19
 plotly/validators/scattergl/unselected/marker/_color.py                              |   13
 plotly/validators/scattergl/unselected/marker/_opacity.py                            |   15
 plotly/validators/scattergl/unselected/marker/_size.py                               |   14
 plotly/validators/scattergl/unselected/textfont/__init__.py                          |   11
 plotly/validators/scattergl/unselected/textfont/_color.py                            |   13
 plotly/validators/scattermapbox/__init__.py                                          |  107
 plotly/validators/scattermapbox/_below.py                                            |   11
 plotly/validators/scattermapbox/_cluster.py                                          |   49
 plotly/validators/scattermapbox/_connectgaps.py                                      |   13
 plotly/validators/scattermapbox/_customdata.py                                       |   11
 plotly/validators/scattermapbox/_customdatasrc.py                                    |   13
 plotly/validators/scattermapbox/_fill.py                                             |   12
 plotly/validators/scattermapbox/_fillcolor.py                                        |   11
 plotly/validators/scattermapbox/_hoverinfo.py                                        |   14
 plotly/validators/scattermapbox/_hoverinfosrc.py                                     |   13
 plotly/validators/scattermapbox/_hoverlabel.py                                       |   51
 plotly/validators/scattermapbox/_hovertemplate.py                                    |   14
 plotly/validators/scattermapbox/_hovertemplatesrc.py                                 |   13
 plotly/validators/scattermapbox/_hovertext.py                                        |   12
 plotly/validators/scattermapbox/_hovertextsrc.py                                     |   13
 plotly/validators/scattermapbox/_ids.py                                              |   11
 plotly/validators/scattermapbox/_idssrc.py                                           |   11
 plotly/validators/scattermapbox/_lat.py                                              |   11
 plotly/validators/scattermapbox/_latsrc.py                                           |   11
 plotly/validators/scattermapbox/_legend.py                                           |   12
 plotly/validators/scattermapbox/_legendgroup.py                                      |   13
 plotly/validators/scattermapbox/_legendgrouptitle.py                                 |   22
 plotly/validators/scattermapbox/_legendrank.py                                       |   11
 plotly/validators/scattermapbox/_legendwidth.py                                      |   14
 plotly/validators/scattermapbox/_line.py                                             |   20
 plotly/validators/scattermapbox/_lon.py                                              |   11
 plotly/validators/scattermapbox/_lonsrc.py                                           |   11
 plotly/validators/scattermapbox/_marker.py                                           |  145
 plotly/validators/scattermapbox/_meta.py                                             |   12
 plotly/validators/scattermapbox/_metasrc.py                                          |   11
 plotly/validators/scattermapbox/_mode.py                                             |   13
 plotly/validators/scattermapbox/_name.py                                             |   11
 plotly/validators/scattermapbox/_opacity.py                                          |   13
 plotly/validators/scattermapbox/_selected.py                                         |   20
 plotly/validators/scattermapbox/_selectedpoints.py                                   |   13
 plotly/validators/scattermapbox/_showlegend.py                                       |   11
 plotly/validators/scattermapbox/_stream.py                                           |   25
 plotly/validators/scattermapbox/_subplot.py                                          |   12
 plotly/validators/scattermapbox/_text.py                                             |   12
 plotly/validators/scattermapbox/_textfont.py                                         |   37
 plotly/validators/scattermapbox/_textposition.py                                     |   28
 plotly/validators/scattermapbox/_textsrc.py                                          |   11
 plotly/validators/scattermapbox/_texttemplate.py                                     |   14
 plotly/validators/scattermapbox/_texttemplatesrc.py                                  |   13
 plotly/validators/scattermapbox/_uid.py                                              |   11
 plotly/validators/scattermapbox/_uirevision.py                                       |   11
 plotly/validators/scattermapbox/_unselected.py                                       |   20
 plotly/validators/scattermapbox/_visible.py                                          |   12
 plotly/validators/scattermapbox/cluster/__init__.py                                  |   33
 plotly/validators/scattermapbox/cluster/_color.py                                    |   14
 plotly/validators/scattermapbox/cluster/_colorsrc.py                                 |   13
 plotly/validators/scattermapbox/cluster/_enabled.py                                  |   13
 plotly/validators/scattermapbox/cluster/_maxzoom.py                                  |   15
 plotly/validators/scattermapbox/cluster/_opacity.py                                  |   16
 plotly/validators/scattermapbox/cluster/_opacitysrc.py                               |   13
 plotly/validators/scattermapbox/cluster/_size.py                                     |   15
 plotly/validators/scattermapbox/cluster/_sizesrc.py                                  |   13
 plotly/validators/scattermapbox/cluster/_step.py                                     |   15
 plotly/validators/scattermapbox/cluster/_stepsrc.py                                  |   13
 plotly/validators/scattermapbox/hoverlabel/__init__.py                               |   31
 plotly/validators/scattermapbox/hoverlabel/_align.py                                 |   15
 plotly/validators/scattermapbox/hoverlabel/_alignsrc.py                              |   13
 plotly/validators/scattermapbox/hoverlabel/_bgcolor.py                               |   14
 plotly/validators/scattermapbox/hoverlabel/_bgcolorsrc.py                            |   13
 plotly/validators/scattermapbox/hoverlabel/_bordercolor.py                           |   17
 plotly/validators/scattermapbox/hoverlabel/_bordercolorsrc.py                        |   16
 plotly/validators/scattermapbox/hoverlabel/_font.py                                  |   48
 plotly/validators/scattermapbox/hoverlabel/_namelength.py                            |   15
 plotly/validators/scattermapbox/hoverlabel/_namelengthsrc.py                         |   16
 plotly/validators/scattermapbox/hoverlabel/font/__init__.py                          |   25
 plotly/validators/scattermapbox/hoverlabel/font/_color.py                            |   14
 plotly/validators/scattermapbox/hoverlabel/font/_colorsrc.py                         |   16
 plotly/validators/scattermapbox/hoverlabel/font/_family.py                           |   19
 plotly/validators/scattermapbox/hoverlabel/font/_familysrc.py                        |   16
 plotly/validators/scattermapbox/hoverlabel/font/_size.py                             |   15
 plotly/validators/scattermapbox/hoverlabel/font/_sizesrc.py                          |   16
 plotly/validators/scattermapbox/legendgrouptitle/__init__.py                         |   12
 plotly/validators/scattermapbox/legendgrouptitle/_font.py                            |   39
 plotly/validators/scattermapbox/legendgrouptitle/_text.py                            |   13
 plotly/validators/scattermapbox/legendgrouptitle/font/__init__.py                    |   15
 plotly/validators/scattermapbox/legendgrouptitle/font/_color.py                      |   16
 plotly/validators/scattermapbox/legendgrouptitle/font/_family.py                     |   18
 plotly/validators/scattermapbox/legendgrouptitle/font/_size.py                       |   17
 plotly/validators/scattermapbox/line/__init__.py                                     |   12
 plotly/validators/scattermapbox/line/_color.py                                       |   11
 plotly/validators/scattermapbox/line/_width.py                                       |   12
 plotly/validators/scattermapbox/marker/__init__.py                                   |   61
 plotly/validators/scattermapbox/marker/_allowoverlap.py                              |   13
 plotly/validators/scattermapbox/marker/_angle.py                                     |   14
 plotly/validators/scattermapbox/marker/_anglesrc.py                                  |   13
 plotly/validators/scattermapbox/marker/_autocolorscale.py                            |   14
 plotly/validators/scattermapbox/marker/_cauto.py                                     |   14
 plotly/validators/scattermapbox/marker/_cmax.py                                      |   14
 plotly/validators/scattermapbox/marker/_cmid.py                                      |   14
 plotly/validators/scattermapbox/marker/_cmin.py                                      |   14
 plotly/validators/scattermapbox/marker/_color.py                                     |   17
 plotly/validators/scattermapbox/marker/_coloraxis.py                                 |   15
 plotly/validators/scattermapbox/marker/_colorbar.py                                  |  297
 plotly/validators/scattermapbox/marker/_colorscale.py                                |   14
 plotly/validators/scattermapbox/marker/_colorsrc.py                                  |   13
 plotly/validators/scattermapbox/marker/_opacity.py                                   |   16
 plotly/validators/scattermapbox/marker/_opacitysrc.py                                |   13
 plotly/validators/scattermapbox/marker/_reversescale.py                              |   13
 plotly/validators/scattermapbox/marker/_showscale.py                                 |   13
 plotly/validators/scattermapbox/marker/_size.py                                      |   15
 plotly/validators/scattermapbox/marker/_sizemin.py                                   |   14
 plotly/validators/scattermapbox/marker/_sizemode.py                                  |   14
 plotly/validators/scattermapbox/marker/_sizeref.py                                   |   13
 plotly/validators/scattermapbox/marker/_sizesrc.py                                   |   13
 plotly/validators/scattermapbox/marker/_symbol.py                                    |   14
 plotly/validators/scattermapbox/marker/_symbolsrc.py                                 |   13
 plotly/validators/scattermapbox/marker/colorbar/__init__.py                          |  111
 plotly/validators/scattermapbox/marker/colorbar/_bgcolor.py                          |   16
 plotly/validators/scattermapbox/marker/colorbar/_bordercolor.py                      |   16
 plotly/validators/scattermapbox/marker/colorbar/_borderwidth.py                      |   17
 plotly/validators/scattermapbox/marker/colorbar/_dtick.py                            |   14
 plotly/validators/scattermapbox/marker/colorbar/_exponentformat.py                   |   17
 plotly/validators/scattermapbox/marker/colorbar/_labelalias.py                       |   16
 plotly/validators/scattermapbox/marker/colorbar/_len.py                              |   14
 plotly/validators/scattermapbox/marker/colorbar/_lenmode.py                          |   17
 plotly/validators/scattermapbox/marker/colorbar/_minexponent.py                      |   17
 plotly/validators/scattermapbox/marker/colorbar/_nticks.py                           |   17
 plotly/validators/scattermapbox/marker/colorbar/_orientation.py                      |   17
 plotly/validators/scattermapbox/marker/colorbar/_outlinecolor.py                     |   16
 plotly/validators/scattermapbox/marker/colorbar/_outlinewidth.py                     |   17
 plotly/validators/scattermapbox/marker/colorbar/_separatethousands.py                |   16
 plotly/validators/scattermapbox/marker/colorbar/_showexponent.py                     |   17
 plotly/validators/scattermapbox/marker/colorbar/_showticklabels.py                   |   16
 plotly/validators/scattermapbox/marker/colorbar/_showtickprefix.py                   |   17
 plotly/validators/scattermapbox/marker/colorbar/_showticksuffix.py                   |   17
 plotly/validators/scattermapbox/marker/colorbar/_thickness.py                        |   17
 plotly/validators/scattermapbox/marker/colorbar/_thicknessmode.py                    |   17
 plotly/validators/scattermapbox/marker/colorbar/_tick0.py                            |   14
 plotly/validators/scattermapbox/marker/colorbar/_tickangle.py                        |   16
 plotly/validators/scattermapbox/marker/colorbar/_tickcolor.py                        |   16
 plotly/validators/scattermapbox/marker/colorbar/_tickfont.py                         |   42
 plotly/validators/scattermapbox/marker/colorbar/_tickformat.py                       |   16
 plotly/validators/scattermapbox/marker/colorbar/_tickformatstopdefaults.py           |   21
 plotly/validators/scattermapbox/marker/colorbar/_tickformatstops.py                  |   54
 plotly/validators/scattermapbox/marker/colorbar/_ticklabeloverflow.py                |   17
 plotly/validators/scattermapbox/marker/colorbar/_ticklabelposition.py                |   31
 plotly/validators/scattermapbox/marker/colorbar/_ticklabelstep.py                    |   17
 plotly/validators/scattermapbox/marker/colorbar/_ticklen.py                          |   17
 plotly/validators/scattermapbox/marker/colorbar/_tickmode.py                         |   18
 plotly/validators/scattermapbox/marker/colorbar/_tickprefix.py                       |   16
 plotly/validators/scattermapbox/marker/colorbar/_ticks.py                            |   14
 plotly/validators/scattermapbox/marker/colorbar/_ticksuffix.py                       |   16
 plotly/validators/scattermapbox/marker/colorbar/_ticktext.py                         |   16
 plotly/validators/scattermapbox/marker/colorbar/_ticktextsrc.py                      |   16
 plotly/validators/scattermapbox/marker/colorbar/_tickvals.py                         |   16
 plotly/validators/scattermapbox/marker/colorbar/_tickvalssrc.py                      |   16
 plotly/validators/scattermapbox/marker/colorbar/_tickwidth.py                        |   17
 plotly/validators/scattermapbox/marker/colorbar/_title.py                            |   35
 plotly/validators/scattermapbox/marker/colorbar/_x.py                                |   13
 plotly/validators/scattermapbox/marker/colorbar/_xanchor.py                          |   17
 plotly/validators/scattermapbox/marker/colorbar/_xpad.py                             |   14
 plotly/validators/scattermapbox/marker/colorbar/_xref.py                             |   14
 plotly/validators/scattermapbox/marker/colorbar/_y.py                                |   13
 plotly/validators/scattermapbox/marker/colorbar/_yanchor.py                          |   17
 plotly/validators/scattermapbox/marker/colorbar/_ypad.py                             |   14
 plotly/validators/scattermapbox/marker/colorbar/_yref.py                             |   14
 plotly/validators/scattermapbox/marker/colorbar/tickfont/__init__.py                 |   15
 plotly/validators/scattermapbox/marker/colorbar/tickfont/_color.py                   |   16
 plotly/validators/scattermapbox/marker/colorbar/tickfont/_family.py                  |   18
 plotly/validators/scattermapbox/marker/colorbar/tickfont/_size.py                    |   17
 plotly/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py           |   23
 plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_dtickrange.py        |   23
 plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_enabled.py           |   16
 plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_name.py              |   16
 plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_templateitemname.py  |   16
 plotly/validators/scattermapbox/marker/colorbar/tickformatstop/_value.py             |   16
 plotly/validators/scattermapbox/marker/colorbar/title/__init__.py                    |   15
 plotly/validators/scattermapbox/marker/colorbar/title/_font.py                       |   42
 plotly/validators/scattermapbox/marker/colorbar/title/_side.py                       |   17
 plotly/validators/scattermapbox/marker/colorbar/title/_text.py                       |   16
 plotly/validators/scattermapbox/marker/colorbar/title/font/__init__.py               |   15
 plotly/validators/scattermapbox/marker/colorbar/title/font/_color.py                 |   16
 plotly/validators/scattermapbox/marker/colorbar/title/font/_family.py                |   18
 plotly/validators/scattermapbox/marker/colorbar/title/font/_size.py                  |   17
 plotly/validators/scattermapbox/selected/__init__.py                                 |   11
 plotly/validators/scattermapbox/selected/_marker.py                                  |   24
 plotly/validators/scattermapbox/selected/marker/__init__.py                          |   19
 plotly/validators/scattermapbox/selected/marker/_color.py                            |   13
 plotly/validators/scattermapbox/selected/marker/_opacity.py                          |   18
 plotly/validators/scattermapbox/selected/marker/_size.py                             |   14
 plotly/validators/scattermapbox/stream/__init__.py                                   |   12
 plotly/validators/scattermapbox/stream/_maxpoints.py                                 |   15
 plotly/validators/scattermapbox/stream/_token.py                                     |   15
 plotly/validators/scattermapbox/textfont/__init__.py                                 |   15
 plotly/validators/scattermapbox/textfont/_color.py                                   |   13
 plotly/validators/scattermapbox/textfont/_family.py                                  |   15
 plotly/validators/scattermapbox/textfont/_size.py                                    |   14
 plotly/validators/scattermapbox/unselected/__init__.py                               |   11
 plotly/validators/scattermapbox/unselected/_marker.py                                |   27
 plotly/validators/scattermapbox/unselected/marker/__init__.py                        |   19
 plotly/validators/scattermapbox/unselected/marker/_color.py                          |   16
 plotly/validators/scattermapbox/unselected/marker/_opacity.py                        |   18
 plotly/validators/scattermapbox/unselected/marker/_size.py                           |   17
 plotly/validators/scatterpolar/__init__.py                                           |  119
 plotly/validators/scatterpolar/_cliponaxis.py                                        |   11
 plotly/validators/scatterpolar/_connectgaps.py                                       |   11
 plotly/validators/scatterpolar/_customdata.py                                        |   11
 plotly/validators/scatterpolar/_customdatasrc.py                                     |   13
 plotly/validators/scatterpolar/_dr.py                                                |   11
 plotly/validators/scatterpolar/_dtheta.py                                            |   11
 plotly/validators/scatterpolar/_fill.py                                              |   12
 plotly/validators/scatterpolar/_fillcolor.py                                         |   11
 plotly/validators/scatterpolar/_hoverinfo.py                                         |   14
 plotly/validators/scatterpolar/_hoverinfosrc.py                                      |   13
 plotly/validators/scatterpolar/_hoverlabel.py                                        |   51
 plotly/validators/scatterpolar/_hoveron.py                                           |   12
 plotly/validators/scatterpolar/_hovertemplate.py                                     |   14
 plotly/validators/scatterpolar/_hovertemplatesrc.py                                  |   13
 plotly/validators/scatterpolar/_hovertext.py                                         |   12
 plotly/validators/scatterpolar/_hovertextsrc.py                                      |   13
 plotly/validators/scatterpolar/_ids.py                                               |   11
 plotly/validators/scatterpolar/_idssrc.py                                            |   11
 plotly/validators/scatterpolar/_legend.py                                            |   12
 plotly/validators/scatterpolar/_legendgroup.py                                       |   11
 plotly/validators/scatterpolar/_legendgrouptitle.py                                  |   22
 plotly/validators/scatterpolar/_legendrank.py                                        |   11
 plotly/validators/scatterpolar/_legendwidth.py                                       |   12
 plotly/validators/scatterpolar/_line.py                                              |   45
 plotly/validators/scatterpolar/_marker.py                                            |  166
 plotly/validators/scatterpolar/_meta.py                                              |   12
 plotly/validators/scatterpolar/_metasrc.py                                           |   11
 plotly/validators/scatterpolar/_mode.py                                              |   13
 plotly/validators/scatterpolar/_name.py                                              |   11
 plotly/validators/scatterpolar/_opacity.py                                           |   13
 plotly/validators/scatterpolar/_r.py                                                 |   11
 plotly/validators/scatterpolar/_r0.py                                                |   11
 plotly/validators/scatterpolar/_rsrc.py                                              |   11
 plotly/validators/scatterpolar/_selected.py                                          |   24
 plotly/validators/scatterpolar/_selectedpoints.py                                    |   13
 plotly/validators/scatterpolar/_showlegend.py                                        |   11
 plotly/validators/scatterpolar/_stream.py                                            |   25
 plotly/validators/scatterpolar/_subplot.py                                           |   12
 plotly/validators/scatterpolar/_text.py                                              |   12
 plotly/validators/scatterpolar/_textfont.py                                          |   46
 plotly/validators/scatterpolar/_textposition.py                                      |   28
 plotly/validators/scatterpolar/_textpositionsrc.py                                   |   13
 plotly/validators/scatterpolar/_textsrc.py                                           |   11
 plotly/validators/scatterpolar/_texttemplate.py                                      |   14
 plotly/validators/scatterpolar/_texttemplatesrc.py                                   |   13
 plotly/validators/scatterpolar/_theta.py                                             |   11
 plotly/validators/scatterpolar/_theta0.py                                            |   11
 plotly/validators/scatterpolar/_thetasrc.py                                          |   11
 plotly/validators/scatterpolar/_thetaunit.py                                         |   12
 plotly/validators/scatterpolar/_uid.py                                               |   11
 plotly/validators/scatterpolar/_uirevision.py                                        |   11
 plotly/validators/scatterpolar/_unselected.py                                        |   24
 plotly/validators/scatterpolar/_visible.py                                           |   12
 plotly/validators/scatterpolar/hoverlabel/__init__.py                                |   31
 plotly/validators/scatterpolar/hoverlabel/_align.py                                  |   15
 plotly/validators/scatterpolar/hoverlabel/_alignsrc.py                               |   13
 plotly/validators/scatterpolar/hoverlabel/_bgcolor.py                                |   14
 plotly/validators/scatterpolar/hoverlabel/_bgcolorsrc.py                             |   13
 plotly/validators/scatterpolar/hoverlabel/_bordercolor.py                            |   14
 plotly/validators/scatterpolar/hoverlabel/_bordercolorsrc.py                         |   16
 plotly/validators/scatterpolar/hoverlabel/_font.py                                   |   48
 plotly/validators/scatterpolar/hoverlabel/_namelength.py                             |   15
 plotly/validators/scatterpolar/hoverlabel/_namelengthsrc.py                          |   16
 plotly/validators/scatterpolar/hoverlabel/font/__init__.py                           |   25
 plotly/validators/scatterpolar/hoverlabel/font/_color.py                             |   14
 plotly/validators/scatterpolar/hoverlabel/font/_colorsrc.py                          |   16
 plotly/validators/scatterpolar/hoverlabel/font/_family.py                            |   16
 plotly/validators/scatterpolar/hoverlabel/font/_familysrc.py                         |   16
 plotly/validators/scatterpolar/hoverlabel/font/_size.py                              |   15
 plotly/validators/scatterpolar/hoverlabel/font/_sizesrc.py                           |   16
 plotly/validators/scatterpolar/legendgrouptitle/__init__.py                          |   12
 plotly/validators/scatterpolar/legendgrouptitle/_font.py                             |   39
 plotly/validators/scatterpolar/legendgrouptitle/_text.py                             |   13
 plotly/validators/scatterpolar/legendgrouptitle/font/__init__.py                     |   15
 plotly/validators/scatterpolar/legendgrouptitle/font/_color.py                       |   16
 plotly/validators/scatterpolar/legendgrouptitle/font/_family.py                      |   18
 plotly/validators/scatterpolar/legendgrouptitle/font/_size.py                        |   17
 plotly/validators/scatterpolar/line/__init__.py                                      |   27
 plotly/validators/scatterpolar/line/_backoff.py                                      |   15
 plotly/validators/scatterpolar/line/_backoffsrc.py                                   |   13
 plotly/validators/scatterpolar/line/_color.py                                        |   11
 plotly/validators/scatterpolar/line/_dash.py                                         |   14
 plotly/validators/scatterpolar/line/_shape.py                                        |   12
 plotly/validators/scatterpolar/line/_smoothing.py                                    |   15
 plotly/validators/scatterpolar/line/_width.py                                        |   12
 plotly/validators/scatterpolar/marker/__init__.py                                    |   71
 plotly/validators/scatterpolar/marker/_angle.py                                      |   14
 plotly/validators/scatterpolar/marker/_angleref.py                                   |   14
 plotly/validators/scatterpolar/marker/_anglesrc.py                                   |   13
 plotly/validators/scatterpolar/marker/_autocolorscale.py                             |   14
 plotly/validators/scatterpolar/marker/_cauto.py                                      |   14
 plotly/validators/scatterpolar/marker/_cmax.py                                       |   12
 plotly/validators/scatterpolar/marker/_cmid.py                                       |   12
 plotly/validators/scatterpolar/marker/_cmin.py                                       |   12
 plotly/validators/scatterpolar/marker/_color.py                                      |   17
 plotly/validators/scatterpolar/marker/_coloraxis.py                                  |   15
 plotly/validators/scatterpolar/marker/_colorbar.py                                   |  297
 plotly/validators/scatterpolar/marker/_colorscale.py                                 |   14
 plotly/validators/scatterpolar/marker/_colorsrc.py                                   |   13
 plotly/validators/scatterpolar/marker/_gradient.py                                   |   31
 plotly/validators/scatterpolar/marker/_line.py                                       |  105
 plotly/validators/scatterpolar/marker/_maxdisplayed.py                               |   14
 plotly/validators/scatterpolar/marker/_opacity.py                                    |   16
 plotly/validators/scatterpolar/marker/_opacitysrc.py                                 |   13
 plotly/validators/scatterpolar/marker/_reversescale.py                               |   13
 plotly/validators/scatterpolar/marker/_showscale.py                                  |   13
 plotly/validators/scatterpolar/marker/_size.py                                       |   13
 plotly/validators/scatterpolar/marker/_sizemin.py                                    |   14
 plotly/validators/scatterpolar/marker/_sizemode.py                                   |   14
 plotly/validators/scatterpolar/marker/_sizeref.py                                    |   13
 plotly/validators/scatterpolar/marker/_sizesrc.py                                    |   13
 plotly/validators/scatterpolar/marker/_standoff.py                                   |   15
 plotly/validators/scatterpolar/marker/_standoffsrc.py                                |   13
 plotly/validators/scatterpolar/marker/_symbol.py                                     |  505
 plotly/validators/scatterpolar/marker/_symbolsrc.py                                  |   13
 plotly/validators/scatterpolar/marker/colorbar/__init__.py                           |  111
 plotly/validators/scatterpolar/marker/colorbar/_bgcolor.py                           |   16
 plotly/validators/scatterpolar/marker/colorbar/_bordercolor.py                       |   16
 plotly/validators/scatterpolar/marker/colorbar/_borderwidth.py                       |   17
 plotly/validators/scatterpolar/marker/colorbar/_dtick.py                             |   14
 plotly/validators/scatterpolar/marker/colorbar/_exponentformat.py                    |   17
 plotly/validators/scatterpolar/marker/colorbar/_labelalias.py                        |   16
 plotly/validators/scatterpolar/marker/colorbar/_len.py                               |   14
 plotly/validators/scatterpolar/marker/colorbar/_lenmode.py                           |   17
 plotly/validators/scatterpolar/marker/colorbar/_minexponent.py                       |   17
 plotly/validators/scatterpolar/marker/colorbar/_nticks.py                            |   14
 plotly/validators/scatterpolar/marker/colorbar/_orientation.py                       |   17
 plotly/validators/scatterpolar/marker/colorbar/_outlinecolor.py                      |   16
 plotly/validators/scatterpolar/marker/colorbar/_outlinewidth.py                      |   17
 plotly/validators/scatterpolar/marker/colorbar/_separatethousands.py                 |   16
 plotly/validators/scatterpolar/marker/colorbar/_showexponent.py                      |   17
 plotly/validators/scatterpolar/marker/colorbar/_showticklabels.py                    |   16
 plotly/validators/scatterpolar/marker/colorbar/_showtickprefix.py                    |   17
 plotly/validators/scatterpolar/marker/colorbar/_showticksuffix.py                    |   17
 plotly/validators/scatterpolar/marker/colorbar/_thickness.py                         |   17
 plotly/validators/scatterpolar/marker/colorbar/_thicknessmode.py                     |   17
 plotly/validators/scatterpolar/marker/colorbar/_tick0.py                             |   14
 plotly/validators/scatterpolar/marker/colorbar/_tickangle.py                         |   16
 plotly/validators/scatterpolar/marker/colorbar/_tickcolor.py                         |   16
 plotly/validators/scatterpolar/marker/colorbar/_tickfont.py                          |   42
 plotly/validators/scatterpolar/marker/colorbar/_tickformat.py                        |   16
 plotly/validators/scatterpolar/marker/colorbar/_tickformatstopdefaults.py            |   21
 plotly/validators/scatterpolar/marker/colorbar/_tickformatstops.py                   |   54
 plotly/validators/scatterpolar/marker/colorbar/_ticklabeloverflow.py                 |   17
 plotly/validators/scatterpolar/marker/colorbar/_ticklabelposition.py                 |   31
 plotly/validators/scatterpolar/marker/colorbar/_ticklabelstep.py                     |   17
 plotly/validators/scatterpolar/marker/colorbar/_ticklen.py                           |   17
 plotly/validators/scatterpolar/marker/colorbar/_tickmode.py                          |   18
 plotly/validators/scatterpolar/marker/colorbar/_tickprefix.py                        |   16
 plotly/validators/scatterpolar/marker/colorbar/_ticks.py                             |   14
 plotly/validators/scatterpolar/marker/colorbar/_ticksuffix.py                        |   16
 plotly/validators/scatterpolar/marker/colorbar/_ticktext.py                          |   16
 plotly/validators/scatterpolar/marker/colorbar/_ticktextsrc.py                       |   16
 plotly/validators/scatterpolar/marker/colorbar/_tickvals.py                          |   16
 plotly/validators/scatterpolar/marker/colorbar/_tickvalssrc.py                       |   16
 plotly/validators/scatterpolar/marker/colorbar/_tickwidth.py                         |   17
 plotly/validators/scatterpolar/marker/colorbar/_title.py                             |   35
 plotly/validators/scatterpolar/marker/colorbar/_x.py                                 |   13
 plotly/validators/scatterpolar/marker/colorbar/_xanchor.py                           |   17
 plotly/validators/scatterpolar/marker/colorbar/_xpad.py                              |   14
 plotly/validators/scatterpolar/marker/colorbar/_xref.py                              |   14
 plotly/validators/scatterpolar/marker/colorbar/_y.py                                 |   13
 plotly/validators/scatterpolar/marker/colorbar/_yanchor.py                           |   17
 plotly/validators/scatterpolar/marker/colorbar/_ypad.py                              |   14
 plotly/validators/scatterpolar/marker/colorbar/_yref.py                              |   14
 plotly/validators/scatterpolar/marker/colorbar/tickfont/__init__.py                  |   15
 plotly/validators/scatterpolar/marker/colorbar/tickfont/_color.py                    |   16
 plotly/validators/scatterpolar/marker/colorbar/tickfont/_family.py                   |   18
 plotly/validators/scatterpolar/marker/colorbar/tickfont/_size.py                     |   17
 plotly/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py            |   23
 plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_dtickrange.py         |   23
 plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_enabled.py            |   16
 plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_name.py               |   16
 plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_templateitemname.py   |   16
 plotly/validators/scatterpolar/marker/colorbar/tickformatstop/_value.py              |   16
 plotly/validators/scatterpolar/marker/colorbar/title/__init__.py                     |   15
 plotly/validators/scatterpolar/marker/colorbar/title/_font.py                        |   42
 plotly/validators/scatterpolar/marker/colorbar/title/_side.py                        |   17
 plotly/validators/scatterpolar/marker/colorbar/title/_text.py                        |   16
 plotly/validators/scatterpolar/marker/colorbar/title/font/__init__.py                |   15
 plotly/validators/scatterpolar/marker/colorbar/title/font/_color.py                  |   16
 plotly/validators/scatterpolar/marker/colorbar/title/font/_family.py                 |   18
 plotly/validators/scatterpolar/marker/colorbar/title/font/_size.py                   |   17
 plotly/validators/scatterpolar/marker/gradient/__init__.py                           |   21
 plotly/validators/scatterpolar/marker/gradient/_color.py                             |   14
 plotly/validators/scatterpolar/marker/gradient/_colorsrc.py                          |   16
 plotly/validators/scatterpolar/marker/gradient/_type.py                              |   15
 plotly/validators/scatterpolar/marker/gradient/_typesrc.py                           |   16
 plotly/validators/scatterpolar/marker/line/__init__.py                               |   37
 plotly/validators/scatterpolar/marker/line/_autocolorscale.py                        |   17
 plotly/validators/scatterpolar/marker/line/_cauto.py                                 |   14
 plotly/validators/scatterpolar/marker/line/_cmax.py                                  |   14
 plotly/validators/scatterpolar/marker/line/_cmid.py                                  |   14
 plotly/validators/scatterpolar/marker/line/_cmin.py                                  |   14
 plotly/validators/scatterpolar/marker/line/_color.py                                 |   17
 plotly/validators/scatterpolar/marker/line/_coloraxis.py                             |   15
 plotly/validators/scatterpolar/marker/line/_colorscale.py                            |   14
 plotly/validators/scatterpolar/marker/line/_colorsrc.py                              |   13
 plotly/validators/scatterpolar/marker/line/_reversescale.py                          |   16
 plotly/validators/scatterpolar/marker/line/_width.py                                 |   15
 plotly/validators/scatterpolar/marker/line/_widthsrc.py                              |   13
 plotly/validators/scatterpolar/selected/__init__.py                                  |   12
 plotly/validators/scatterpolar/selected/_marker.py                                   |   24
 plotly/validators/scatterpolar/selected/_textfont.py                                 |   20
 plotly/validators/scatterpolar/selected/marker/__init__.py                           |   19
 plotly/validators/scatterpolar/selected/marker/_color.py                             |   13
 plotly/validators/scatterpolar/selected/marker/_opacity.py                           |   18
 plotly/validators/scatterpolar/selected/marker/_size.py                              |   14
 plotly/validators/scatterpolar/selected/textfont/__init__.py                         |   11
 plotly/validators/scatterpolar/selected/textfont/_color.py                           |   16
 plotly/validators/scatterpolar/stream/__init__.py                                    |   12
 plotly/validators/scatterpolar/stream/_maxpoints.py                                  |   15
 plotly/validators/scatterpolar/stream/_token.py                                      |   15
 plotly/validators/scatterpolar/textfont/__init__.py                                  |   25
 plotly/validators/scatterpolar/textfont/_color.py                                    |   14
 plotly/validators/scatterpolar/textfont/_colorsrc.py                                 |   13
 plotly/validators/scatterpolar/textfont/_family.py                                   |   16
 plotly/validators/scatterpolar/textfont/_familysrc.py                                |   13
 plotly/validators/scatterpolar/textfont/_size.py                                     |   15
 plotly/validators/scatterpolar/textfont/_sizesrc.py                                  |   13
 plotly/validators/scatterpolar/unselected/__init__.py                                |   12
 plotly/validators/scatterpolar/unselected/_marker.py                                 |   27
 plotly/validators/scatterpolar/unselected/_textfont.py                               |   21
 plotly/validators/scatterpolar/unselected/marker/__init__.py                         |   19
 plotly/validators/scatterpolar/unselected/marker/_color.py                           |   16
 plotly/validators/scatterpolar/unselected/marker/_opacity.py                         |   18
 plotly/validators/scatterpolar/unselected/marker/_size.py                            |   14
 plotly/validators/scatterpolar/unselected/textfont/__init__.py                       |   11
 plotly/validators/scatterpolar/unselected/textfont/_color.py                         |   16
 plotly/validators/scatterpolargl/__init__.py                                         |  115
 plotly/validators/scatterpolargl/_connectgaps.py                                     |   13
 plotly/validators/scatterpolargl/_customdata.py                                      |   13
 plotly/validators/scatterpolargl/_customdatasrc.py                                   |   13
 plotly/validators/scatterpolargl/_dr.py                                              |   11
 plotly/validators/scatterpolargl/_dtheta.py                                          |   11
 plotly/validators/scatterpolargl/_fill.py                                            |   23
 plotly/validators/scatterpolargl/_fillcolor.py                                       |   11
 plotly/validators/scatterpolargl/_hoverinfo.py                                       |   14
 plotly/validators/scatterpolargl/_hoverinfosrc.py                                    |   13
 plotly/validators/scatterpolargl/_hoverlabel.py                                      |   53
 plotly/validators/scatterpolargl/_hovertemplate.py                                   |   14
 plotly/validators/scatterpolargl/_hovertemplatesrc.py                                |   13
 plotly/validators/scatterpolargl/_hovertext.py                                       |   12
 plotly/validators/scatterpolargl/_hovertextsrc.py                                    |   13
 plotly/validators/scatterpolargl/_ids.py                                             |   11
 plotly/validators/scatterpolargl/_idssrc.py                                          |   11
 plotly/validators/scatterpolargl/_legend.py                                          |   12
 plotly/validators/scatterpolargl/_legendgroup.py                                     |   13
 plotly/validators/scatterpolargl/_legendgrouptitle.py                                |   22
 plotly/validators/scatterpolargl/_legendrank.py                                      |   13
 plotly/validators/scatterpolargl/_legendwidth.py                                     |   14
 plotly/validators/scatterpolargl/_line.py                                            |   22
 plotly/validators/scatterpolargl/_marker.py                                          |  145
 plotly/validators/scatterpolargl/_meta.py                                            |   12
 plotly/validators/scatterpolargl/_metasrc.py                                         |   11
 plotly/validators/scatterpolargl/_mode.py                                            |   13
 plotly/validators/scatterpolargl/_name.py                                            |   11
 plotly/validators/scatterpolargl/_opacity.py                                         |   13
 plotly/validators/scatterpolargl/_r.py                                               |   11
 plotly/validators/scatterpolargl/_r0.py                                              |   11
 plotly/validators/scatterpolargl/_rsrc.py                                            |   11
 plotly/validators/scatterpolargl/_selected.py                                        |   24
 plotly/validators/scatterpolargl/_selectedpoints.py                                  |   13
 plotly/validators/scatterpolargl/_showlegend.py                                      |   13
 plotly/validators/scatterpolargl/_stream.py                                          |   25
 plotly/validators/scatterpolargl/_subplot.py                                         |   12
 plotly/validators/scatterpolargl/_text.py                                            |   12
 plotly/validators/scatterpolargl/_textfont.py                                        |   46
 plotly/validators/scatterpolargl/_textposition.py                                    |   28
 plotly/validators/scatterpolargl/_textpositionsrc.py                                 |   13
 plotly/validators/scatterpolargl/_textsrc.py                                         |   11
 plotly/validators/scatterpolargl/_texttemplate.py                                    |   14
 plotly/validators/scatterpolargl/_texttemplatesrc.py                                 |   13
 plotly/validators/scatterpolargl/_theta.py                                           |   11
 plotly/validators/scatterpolargl/_theta0.py                                          |   11
 plotly/validators/scatterpolargl/_thetasrc.py                                        |   11
 plotly/validators/scatterpolargl/_thetaunit.py                                       |   12
 plotly/validators/scatterpolargl/_uid.py                                             |   11
 plotly/validators/scatterpolargl/_uirevision.py                                      |   13
 plotly/validators/scatterpolargl/_unselected.py                                      |   26
 plotly/validators/scatterpolargl/_visible.py                                         |   12
 plotly/validators/scatterpolargl/hoverlabel/__init__.py                              |   31
 plotly/validators/scatterpolargl/hoverlabel/_align.py                                |   15
 plotly/validators/scatterpolargl/hoverlabel/_alignsrc.py                             |   13
 plotly/validators/scatterpolargl/hoverlabel/_bgcolor.py                              |   14
 plotly/validators/scatterpolargl/hoverlabel/_bgcolorsrc.py                           |   16
 plotly/validators/scatterpolargl/hoverlabel/_bordercolor.py                          |   17
 plotly/validators/scatterpolargl/hoverlabel/_bordercolorsrc.py                       |   16
 plotly/validators/scatterpolargl/hoverlabel/_font.py                                 |   48
 plotly/validators/scatterpolargl/hoverlabel/_namelength.py                           |   18
 plotly/validators/scatterpolargl/hoverlabel/_namelengthsrc.py                        |   16
 plotly/validators/scatterpolargl/hoverlabel/font/__init__.py                         |   25
 plotly/validators/scatterpolargl/hoverlabel/font/_color.py                           |   17
 plotly/validators/scatterpolargl/hoverlabel/font/_colorsrc.py                        |   16
 plotly/validators/scatterpolargl/hoverlabel/font/_family.py                          |   19
 plotly/validators/scatterpolargl/hoverlabel/font/_familysrc.py                       |   16
 plotly/validators/scatterpolargl/hoverlabel/font/_size.py                            |   15
 plotly/validators/scatterpolargl/hoverlabel/font/_sizesrc.py                         |   16
 plotly/validators/scatterpolargl/legendgrouptitle/__init__.py                        |   12
 plotly/validators/scatterpolargl/legendgrouptitle/_font.py                           |   42
 plotly/validators/scatterpolargl/legendgrouptitle/_text.py                           |   16
 plotly/validators/scatterpolargl/legendgrouptitle/font/__init__.py                   |   15
 plotly/validators/scatterpolargl/legendgrouptitle/font/_color.py                     |   16
 plotly/validators/scatterpolargl/legendgrouptitle/font/_family.py                    |   18
 plotly/validators/scatterpolargl/legendgrouptitle/font/_size.py                      |   17
 plotly/validators/scatterpolargl/line/__init__.py                                    |   15
 plotly/validators/scatterpolargl/line/_color.py                                      |   13
 plotly/validators/scatterpolargl/line/_dash.py                                       |   14
 plotly/validators/scatterpolargl/line/_width.py                                      |   14
 plotly/validators/scatterpolargl/marker/__init__.py                                  |   61
 plotly/validators/scatterpolargl/marker/_angle.py                                    |   14
 plotly/validators/scatterpolargl/marker/_anglesrc.py                                 |   13
 plotly/validators/scatterpolargl/marker/_autocolorscale.py                           |   17
 plotly/validators/scatterpolargl/marker/_cauto.py                                    |   14
 plotly/validators/scatterpolargl/marker/_cmax.py                                     |   14
 plotly/validators/scatterpolargl/marker/_cmid.py                                     |   14
 plotly/validators/scatterpolargl/marker/_cmin.py                                     |   14
 plotly/validators/scatterpolargl/marker/_color.py                                    |   17
 plotly/validators/scatterpolargl/marker/_coloraxis.py                                |   15
 plotly/validators/scatterpolargl/marker/_colorbar.py                                 |  297
 plotly/validators/scatterpolargl/marker/_colorscale.py                               |   14
 plotly/validators/scatterpolargl/marker/_colorsrc.py                                 |   13
 plotly/validators/scatterpolargl/marker/_line.py                                     |  107
 plotly/validators/scatterpolargl/marker/_opacity.py                                  |   16
 plotly/validators/scatterpolargl/marker/_opacitysrc.py                               |   13
 plotly/validators/scatterpolargl/marker/_reversescale.py                             |   13
 plotly/validators/scatterpolargl/marker/_showscale.py                                |   13
 plotly/validators/scatterpolargl/marker/_size.py                                     |   15
 plotly/validators/scatterpolargl/marker/_sizemin.py                                  |   14
 plotly/validators/scatterpolargl/marker/_sizemode.py                                 |   14
 plotly/validators/scatterpolargl/marker/_sizeref.py                                  |   13
 plotly/validators/scatterpolargl/marker/_sizesrc.py                                  |   13
 plotly/validators/scatterpolargl/marker/_symbol.py                                   |  505
 plotly/validators/scatterpolargl/marker/_symbolsrc.py                                |   13
 plotly/validators/scatterpolargl/marker/colorbar/__init__.py                         |  111
 plotly/validators/scatterpolargl/marker/colorbar/_bgcolor.py                         |   16
 plotly/validators/scatterpolargl/marker/colorbar/_bordercolor.py                     |   16
 plotly/validators/scatterpolargl/marker/colorbar/_borderwidth.py                     |   17
 plotly/validators/scatterpolargl/marker/colorbar/_dtick.py                           |   17
 plotly/validators/scatterpolargl/marker/colorbar/_exponentformat.py                  |   17
 plotly/validators/scatterpolargl/marker/colorbar/_labelalias.py                      |   16
 plotly/validators/scatterpolargl/marker/colorbar/_len.py                             |   14
 plotly/validators/scatterpolargl/marker/colorbar/_lenmode.py                         |   17
 plotly/validators/scatterpolargl/marker/colorbar/_minexponent.py                     |   17
 plotly/validators/scatterpolargl/marker/colorbar/_nticks.py                          |   17
 plotly/validators/scatterpolargl/marker/colorbar/_orientation.py                     |   17
 plotly/validators/scatterpolargl/marker/colorbar/_outlinecolor.py                    |   16
 plotly/validators/scatterpolargl/marker/colorbar/_outlinewidth.py                    |   17
 plotly/validators/scatterpolargl/marker/colorbar/_separatethousands.py               |   16
 plotly/validators/scatterpolargl/marker/colorbar/_showexponent.py                    |   17
 plotly/validators/scatterpolargl/marker/colorbar/_showticklabels.py                  |   16
 plotly/validators/scatterpolargl/marker/colorbar/_showtickprefix.py                  |   17
 plotly/validators/scatterpolargl/marker/colorbar/_showticksuffix.py                  |   17
 plotly/validators/scatterpolargl/marker/colorbar/_thickness.py                       |   17
 plotly/validators/scatterpolargl/marker/colorbar/_thicknessmode.py                   |   17
 plotly/validators/scatterpolargl/marker/colorbar/_tick0.py                           |   17
 plotly/validators/scatterpolargl/marker/colorbar/_tickangle.py                       |   16
 plotly/validators/scatterpolargl/marker/colorbar/_tickcolor.py                       |   16
 plotly/validators/scatterpolargl/marker/colorbar/_tickfont.py                        |   42
 plotly/validators/scatterpolargl/marker/colorbar/_tickformat.py                      |   16
 plotly/validators/scatterpolargl/marker/colorbar/_tickformatstopdefaults.py          |   21
 plotly/validators/scatterpolargl/marker/colorbar/_tickformatstops.py                 |   54
 plotly/validators/scatterpolargl/marker/colorbar/_ticklabeloverflow.py               |   17
 plotly/validators/scatterpolargl/marker/colorbar/_ticklabelposition.py               |   31
 plotly/validators/scatterpolargl/marker/colorbar/_ticklabelstep.py                   |   17
 plotly/validators/scatterpolargl/marker/colorbar/_ticklen.py                         |   17
 plotly/validators/scatterpolargl/marker/colorbar/_tickmode.py                        |   18
 plotly/validators/scatterpolargl/marker/colorbar/_tickprefix.py                      |   16
 plotly/validators/scatterpolargl/marker/colorbar/_ticks.py                           |   17
 plotly/validators/scatterpolargl/marker/colorbar/_ticksuffix.py                      |   16
 plotly/validators/scatterpolargl/marker/colorbar/_ticktext.py                        |   16
 plotly/validators/scatterpolargl/marker/colorbar/_ticktextsrc.py                     |   16
 plotly/validators/scatterpolargl/marker/colorbar/_tickvals.py                        |   16
 plotly/validators/scatterpolargl/marker/colorbar/_tickvalssrc.py                     |   16
 plotly/validators/scatterpolargl/marker/colorbar/_tickwidth.py                       |   17
 plotly/validators/scatterpolargl/marker/colorbar/_title.py                           |   38
 plotly/validators/scatterpolargl/marker/colorbar/_x.py                               |   13
 plotly/validators/scatterpolargl/marker/colorbar/_xanchor.py                         |   17
 plotly/validators/scatterpolargl/marker/colorbar/_xpad.py                            |   14
 plotly/validators/scatterpolargl/marker/colorbar/_xref.py                            |   14
 plotly/validators/scatterpolargl/marker/colorbar/_y.py                               |   13
 plotly/validators/scatterpolargl/marker/colorbar/_yanchor.py                         |   17
 plotly/validators/scatterpolargl/marker/colorbar/_ypad.py                            |   14
 plotly/validators/scatterpolargl/marker/colorbar/_yref.py                            |   14
 plotly/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py                |   15
 plotly/validators/scatterpolargl/marker/colorbar/tickfont/_color.py                  |   16
 plotly/validators/scatterpolargl/marker/colorbar/tickfont/_family.py                 |   18
 plotly/validators/scatterpolargl/marker/colorbar/tickfont/_size.py                   |   17
 plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py          |   23
 plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_dtickrange.py       |   23
 plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_enabled.py          |   16
 plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_name.py             |   16
 plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_templateitemname.py |   16
 plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/_value.py            |   16
 plotly/validators/scatterpolargl/marker/colorbar/title/__init__.py                   |   15
 plotly/validators/scatterpolargl/marker/colorbar/title/_font.py                      |   42
 plotly/validators/scatterpolargl/marker/colorbar/title/_side.py                      |   17
 plotly/validators/scatterpolargl/marker/colorbar/title/_text.py                      |   16
 plotly/validators/scatterpolargl/marker/colorbar/title/font/__init__.py              |   15
 plotly/validators/scatterpolargl/marker/colorbar/title/font/_color.py                |   16
 plotly/validators/scatterpolargl/marker/colorbar/title/font/_family.py               |   18
 plotly/validators/scatterpolargl/marker/colorbar/title/font/_size.py                 |   17
 plotly/validators/scatterpolargl/marker/line/__init__.py                             |   37
 plotly/validators/scatterpolargl/marker/line/_autocolorscale.py                      |   17
 plotly/validators/scatterpolargl/marker/line/_cauto.py                               |   14
 plotly/validators/scatterpolargl/marker/line/_cmax.py                                |   14
 plotly/validators/scatterpolargl/marker/line/_cmid.py                                |   14
 plotly/validators/scatterpolargl/marker/line/_cmin.py                                |   14
 plotly/validators/scatterpolargl/marker/line/_color.py                               |   17
 plotly/validators/scatterpolargl/marker/line/_coloraxis.py                           |   18
 plotly/validators/scatterpolargl/marker/line/_colorscale.py                          |   17
 plotly/validators/scatterpolargl/marker/line/_colorsrc.py                            |   13
 plotly/validators/scatterpolargl/marker/line/_reversescale.py                        |   16
 plotly/validators/scatterpolargl/marker/line/_width.py                               |   15
 plotly/validators/scatterpolargl/marker/line/_widthsrc.py                            |   13
 plotly/validators/scatterpolargl/selected/__init__.py                                |   12
 plotly/validators/scatterpolargl/selected/_marker.py                                 |   24
 plotly/validators/scatterpolargl/selected/_textfont.py                               |   20
 plotly/validators/scatterpolargl/selected/marker/__init__.py                         |   19
 plotly/validators/scatterpolargl/selected/marker/_color.py                           |   16
 plotly/validators/scatterpolargl/selected/marker/_opacity.py                         |   18
 plotly/validators/scatterpolargl/selected/marker/_size.py                            |   14
 plotly/validators/scatterpolargl/selected/textfont/__init__.py                       |   11
 plotly/validators/scatterpolargl/selected/textfont/_color.py                         |   16
 plotly/validators/scatterpolargl/stream/__init__.py                                  |   12
 plotly/validators/scatterpolargl/stream/_maxpoints.py                                |   15
 plotly/validators/scatterpolargl/stream/_token.py                                    |   15
 plotly/validators/scatterpolargl/textfont/__init__.py                                |   25
 plotly/validators/scatterpolargl/textfont/_color.py                                  |   14
 plotly/validators/scatterpolargl/textfont/_colorsrc.py                               |   13
 plotly/validators/scatterpolargl/textfont/_family.py                                 |   16
 plotly/validators/scatterpolargl/textfont/_familysrc.py                              |   13
 plotly/validators/scatterpolargl/textfont/_size.py                                   |   15
 plotly/validators/scatterpolargl/textfont/_sizesrc.py                                |   13
 plotly/validators/scatterpolargl/unselected/__init__.py                              |   12
 plotly/validators/scatterpolargl/unselected/_marker.py                               |   27
 plotly/validators/scatterpolargl/unselected/_textfont.py                             |   21
 plotly/validators/scatterpolargl/unselected/marker/__init__.py                       |   19
 plotly/validators/scatterpolargl/unselected/marker/_color.py                         |   16
 plotly/validators/scatterpolargl/unselected/marker/_opacity.py                       |   18
 plotly/validators/scatterpolargl/unselected/marker/_size.py                          |   17
 plotly/validators/scatterpolargl/unselected/textfont/__init__.py                     |   11
 plotly/validators/scatterpolargl/unselected/textfont/_color.py                       |   16
 plotly/validators/scattersmith/__init__.py                                           |  109
 plotly/validators/scattersmith/_cliponaxis.py                                        |   11
 plotly/validators/scattersmith/_connectgaps.py                                       |   11
 plotly/validators/scattersmith/_customdata.py                                        |   11
 plotly/validators/scattersmith/_customdatasrc.py                                     |   13
 plotly/validators/scattersmith/_fill.py                                              |   12
 plotly/validators/scattersmith/_fillcolor.py                                         |   11
 plotly/validators/scattersmith/_hoverinfo.py                                         |   14
 plotly/validators/scattersmith/_hoverinfosrc.py                                      |   13
 plotly/validators/scattersmith/_hoverlabel.py                                        |   51
 plotly/validators/scattersmith/_hoveron.py                                           |   12
 plotly/validators/scattersmith/_hovertemplate.py                                     |   14
 plotly/validators/scattersmith/_hovertemplatesrc.py                                  |   13
 plotly/validators/scattersmith/_hovertext.py                                         |   12
 plotly/validators/scattersmith/_hovertextsrc.py                                      |   13
 plotly/validators/scattersmith/_ids.py                                               |   11
 plotly/validators/scattersmith/_idssrc.py                                            |   11
 plotly/validators/scattersmith/_imag.py                                              |   11
 plotly/validators/scattersmith/_imagsrc.py                                           |   11
 plotly/validators/scattersmith/_legend.py                                            |   12
 plotly/validators/scattersmith/_legendgroup.py                                       |   11
 plotly/validators/scattersmith/_legendgrouptitle.py                                  |   22
 plotly/validators/scattersmith/_legendrank.py                                        |   11
 plotly/validators/scattersmith/_legendwidth.py                                       |   12
 plotly/validators/scattersmith/_line.py                                              |   45
 plotly/validators/scattersmith/_marker.py                                            |  166
 plotly/validators/scattersmith/_meta.py                                              |   12
 plotly/validators/scattersmith/_metasrc.py                                           |   11
 plotly/validators/scattersmith/_mode.py                                              |   13
 plotly/validators/scattersmith/_name.py                                              |   11
 plotly/validators/scattersmith/_opacity.py                                           |   13
 plotly/validators/scattersmith/_real.py                                              |   11
 plotly/validators/scattersmith/_realsrc.py                                           |   11
 plotly/validators/scattersmith/_selected.py                                          |   24
 plotly/validators/scattersmith/_selectedpoints.py                                    |   13
 plotly/validators/scattersmith/_showlegend.py                                        |   11
 plotly/validators/scattersmith/_stream.py                                            |   25
 plotly/validators/scattersmith/_subplot.py                                           |   12
 plotly/validators/scattersmith/_text.py                                              |   12
 plotly/validators/scattersmith/_textfont.py                                          |   46
 plotly/validators/scattersmith/_textposition.py                                      |   28
 plotly/validators/scattersmith/_textpositionsrc.py                                   |   13
 plotly/validators/scattersmith/_textsrc.py                                           |   11
 plotly/validators/scattersmith/_texttemplate.py                                      |   14
 plotly/validators/scattersmith/_texttemplatesrc.py                                   |   13
 plotly/validators/scattersmith/_uid.py                                               |   11
 plotly/validators/scattersmith/_uirevision.py                                        |   11
 plotly/validators/scattersmith/_unselected.py                                        |   24
 plotly/validators/scattersmith/_visible.py                                           |   12
 plotly/validators/scattersmith/hoverlabel/__init__.py                                |   31
 plotly/validators/scattersmith/hoverlabel/_align.py                                  |   15
 plotly/validators/scattersmith/hoverlabel/_alignsrc.py                               |   13
 plotly/validators/scattersmith/hoverlabel/_bgcolor.py                                |   14
 plotly/validators/scattersmith/hoverlabel/_bgcolorsrc.py                             |   13
 plotly/validators/scattersmith/hoverlabel/_bordercolor.py                            |   14
 plotly/validators/scattersmith/hoverlabel/_bordercolorsrc.py                         |   16
 plotly/validators/scattersmith/hoverlabel/_font.py                                   |   48
 plotly/validators/scattersmith/hoverlabel/_namelength.py                             |   15
 plotly/validators/scattersmith/hoverlabel/_namelengthsrc.py                          |   16
 plotly/validators/scattersmith/hoverlabel/font/__init__.py                           |   25
 plotly/validators/scattersmith/hoverlabel/font/_color.py                             |   14
 plotly/validators/scattersmith/hoverlabel/font/_colorsrc.py                          |   16
 plotly/validators/scattersmith/hoverlabel/font/_family.py                            |   16
 plotly/validators/scattersmith/hoverlabel/font/_familysrc.py                         |   16
 plotly/validators/scattersmith/hoverlabel/font/_size.py                              |   15
 plotly/validators/scattersmith/hoverlabel/font/_sizesrc.py                           |   16
 plotly/validators/scattersmith/legendgrouptitle/__init__.py                          |   12
 plotly/validators/scattersmith/legendgrouptitle/_font.py                             |   39
 plotly/validators/scattersmith/legendgrouptitle/_text.py                             |   13
 plotly/validators/scattersmith/legendgrouptitle/font/__init__.py                     |   15
 plotly/validators/scattersmith/legendgrouptitle/font/_color.py                       |   16
 plotly/validators/scattersmith/legendgrouptitle/font/_family.py                      |   18
 plotly/validators/scattersmith/legendgrouptitle/font/_size.py                        |   17
 plotly/validators/scattersmith/line/__init__.py                                      |   27
 plotly/validators/scattersmith/line/_backoff.py                                      |   15
 plotly/validators/scattersmith/line/_backoffsrc.py                                   |   13
 plotly/validators/scattersmith/line/_color.py                                        |   11
 plotly/validators/scattersmith/line/_dash.py                                         |   14
 plotly/validators/scattersmith/line/_shape.py                                        |   12
 plotly/validators/scattersmith/line/_smoothing.py                                    |   15
 plotly/validators/scattersmith/line/_width.py                                        |   12
 plotly/validators/scattersmith/marker/__init__.py                                    |   71
 plotly/validators/scattersmith/marker/_angle.py                                      |   14
 plotly/validators/scattersmith/marker/_angleref.py                                   |   14
 plotly/validators/scattersmith/marker/_anglesrc.py                                   |   13
 plotly/validators/scattersmith/marker/_autocolorscale.py                             |   14
 plotly/validators/scattersmith/marker/_cauto.py                                      |   14
 plotly/validators/scattersmith/marker/_cmax.py                                       |   12
 plotly/validators/scattersmith/marker/_cmid.py                                       |   12
 plotly/validators/scattersmith/marker/_cmin.py                                       |   12
 plotly/validators/scattersmith/marker/_color.py                                      |   17
 plotly/validators/scattersmith/marker/_coloraxis.py                                  |   15
 plotly/validators/scattersmith/marker/_colorbar.py                                   |  297
 plotly/validators/scattersmith/marker/_colorscale.py                                 |   14
 plotly/validators/scattersmith/marker/_colorsrc.py                                   |   13
 plotly/validators/scattersmith/marker/_gradient.py                                   |   31
 plotly/validators/scattersmith/marker/_line.py                                       |  105
 plotly/validators/scattersmith/marker/_maxdisplayed.py                               |   14
 plotly/validators/scattersmith/marker/_opacity.py                                    |   16
 plotly/validators/scattersmith/marker/_opacitysrc.py                                 |   13
 plotly/validators/scattersmith/marker/_reversescale.py                               |   13
 plotly/validators/scattersmith/marker/_showscale.py                                  |   13
 plotly/validators/scattersmith/marker/_size.py                                       |   13
 plotly/validators/scattersmith/marker/_sizemin.py                                    |   14
 plotly/validators/scattersmith/marker/_sizemode.py                                   |   14
 plotly/validators/scattersmith/marker/_sizeref.py                                    |   13
 plotly/validators/scattersmith/marker/_sizesrc.py                                    |   13
 plotly/validators/scattersmith/marker/_standoff.py                                   |   15
 plotly/validators/scattersmith/marker/_standoffsrc.py                                |   13
 plotly/validators/scattersmith/marker/_symbol.py                                     |  505
 plotly/validators/scattersmith/marker/_symbolsrc.py                                  |   13
 plotly/validators/scattersmith/marker/colorbar/__init__.py                           |  111
 plotly/validators/scattersmith/marker/colorbar/_bgcolor.py                           |   16
 plotly/validators/scattersmith/marker/colorbar/_bordercolor.py                       |   16
 plotly/validators/scattersmith/marker/colorbar/_borderwidth.py                       |   17
 plotly/validators/scattersmith/marker/colorbar/_dtick.py                             |   14
 plotly/validators/scattersmith/marker/colorbar/_exponentformat.py                    |   17
 plotly/validators/scattersmith/marker/colorbar/_labelalias.py                        |   16
 plotly/validators/scattersmith/marker/colorbar/_len.py                               |   14
 plotly/validators/scattersmith/marker/colorbar/_lenmode.py                           |   17
 plotly/validators/scattersmith/marker/colorbar/_minexponent.py                       |   17
 plotly/validators/scattersmith/marker/colorbar/_nticks.py                            |   14
 plotly/validators/scattersmith/marker/colorbar/_orientation.py                       |   17
 plotly/validators/scattersmith/marker/colorbar/_outlinecolor.py                      |   16
 plotly/validators/scattersmith/marker/colorbar/_outlinewidth.py                      |   17
 plotly/validators/scattersmith/marker/colorbar/_separatethousands.py                 |   16
 plotly/validators/scattersmith/marker/colorbar/_showexponent.py                      |   17
 plotly/validators/scattersmith/marker/colorbar/_showticklabels.py                    |   16
 plotly/validators/scattersmith/marker/colorbar/_showtickprefix.py                    |   17
 plotly/validators/scattersmith/marker/colorbar/_showticksuffix.py                    |   17
 plotly/validators/scattersmith/marker/colorbar/_thickness.py                         |   17
 plotly/validators/scattersmith/marker/colorbar/_thicknessmode.py                     |   17
 plotly/validators/scattersmith/marker/colorbar/_tick0.py                             |   14
 plotly/validators/scattersmith/marker/colorbar/_tickangle.py                         |   16
 plotly/validators/scattersmith/marker/colorbar/_tickcolor.py                         |   16
 plotly/validators/scattersmith/marker/colorbar/_tickfont.py                          |   42
 plotly/validators/scattersmith/marker/colorbar/_tickformat.py                        |   16
 plotly/validators/scattersmith/marker/colorbar/_tickformatstopdefaults.py            |   21
 plotly/validators/scattersmith/marker/colorbar/_tickformatstops.py                   |   54
 plotly/validators/scattersmith/marker/colorbar/_ticklabeloverflow.py                 |   17
 plotly/validators/scattersmith/marker/colorbar/_ticklabelposition.py                 |   31
 plotly/validators/scattersmith/marker/colorbar/_ticklabelstep.py                     |   17
 plotly/validators/scattersmith/marker/colorbar/_ticklen.py                           |   17
 plotly/validators/scattersmith/marker/colorbar/_tickmode.py                          |   18
 plotly/validators/scattersmith/marker/colorbar/_tickprefix.py                        |   16
 plotly/validators/scattersmith/marker/colorbar/_ticks.py                             |   14
 plotly/validators/scattersmith/marker/colorbar/_ticksuffix.py                        |   16
 plotly/validators/scattersmith/marker/colorbar/_ticktext.py                          |   16
 plotly/validators/scattersmith/marker/colorbar/_ticktextsrc.py                       |   16
 plotly/validators/scattersmith/marker/colorbar/_tickvals.py                          |   16
 plotly/validators/scattersmith/marker/colorbar/_tickvalssrc.py                       |   16
 plotly/validators/scattersmith/marker/colorbar/_tickwidth.py                         |   17
 plotly/validators/scattersmith/marker/colorbar/_title.py                             |   35
 plotly/validators/scattersmith/marker/colorbar/_x.py                                 |   13
 plotly/validators/scattersmith/marker/colorbar/_xanchor.py                           |   17
 plotly/validators/scattersmith/marker/colorbar/_xpad.py                              |   14
 plotly/validators/scattersmith/marker/colorbar/_xref.py                              |   14
 plotly/validators/scattersmith/marker/colorbar/_y.py                                 |   13
 plotly/validators/scattersmith/marker/colorbar/_yanchor.py                           |   17
 plotly/validators/scattersmith/marker/colorbar/_ypad.py                              |   14
 plotly/validators/scattersmith/marker/colorbar/_yref.py                              |   14
 plotly/validators/scattersmith/marker/colorbar/tickfont/__init__.py                  |   15
 plotly/validators/scattersmith/marker/colorbar/tickfont/_color.py                    |   16
 plotly/validators/scattersmith/marker/colorbar/tickfont/_family.py                   |   18
 plotly/validators/scattersmith/marker/colorbar/tickfont/_size.py                     |   17
 plotly/validators/scattersmith/marker/colorbar/tickformatstop/__init__.py            |   23
 plotly/validators/scattersmith/marker/colorbar/tickformatstop/_dtickrange.py         |   23
 plotly/validators/scattersmith/marker/colorbar/tickformatstop/_enabled.py            |   16
 plotly/validators/scattersmith/marker/colorbar/tickformatstop/_name.py               |   16
 plotly/validators/scattersmith/marker/colorbar/tickformatstop/_templateitemname.py   |   16
 plotly/validators/scattersmith/marker/colorbar/tickformatstop/_value.py              |   16
 plotly/validators/scattersmith/marker/colorbar/title/__init__.py                     |   15
 plotly/validators/scattersmith/marker/colorbar/title/_font.py                        |   42
 plotly/validators/scattersmith/marker/colorbar/title/_side.py                        |   17
 plotly/validators/scattersmith/marker/colorbar/title/_text.py                        |   16
 plotly/validators/scattersmith/marker/colorbar/title/font/__init__.py                |   15
 plotly/validators/scattersmith/marker/colorbar/title/font/_color.py                  |   16
 plotly/validators/scattersmith/marker/colorbar/title/font/_family.py                 |   18
 plotly/validators/scattersmith/marker/colorbar/title/font/_size.py                   |   17
 plotly/validators/scattersmith/marker/gradient/__init__.py                           |   21
 plotly/validators/scattersmith/marker/gradient/_color.py                             |   14
 plotly/validators/scattersmith/marker/gradient/_colorsrc.py                          |   16
 plotly/validators/scattersmith/marker/gradient/_type.py                              |   15
 plotly/validators/scattersmith/marker/gradient/_typesrc.py                           |   16
 plotly/validators/scattersmith/marker/line/__init__.py                               |   37
 plotly/validators/scattersmith/marker/line/_autocolorscale.py                        |   17
 plotly/validators/scattersmith/marker/line/_cauto.py                                 |   14
 plotly/validators/scattersmith/marker/line/_cmax.py                                  |   14
 plotly/validators/scattersmith/marker/line/_cmid.py                                  |   14
 plotly/validators/scattersmith/marker/line/_cmin.py                                  |   14
 plotly/validators/scattersmith/marker/line/_color.py                                 |   17
 plotly/validators/scattersmith/marker/line/_coloraxis.py                             |   15
 plotly/validators/scattersmith/marker/line/_colorscale.py                            |   14
 plotly/validators/scattersmith/marker/line/_colorsrc.py                              |   13
 plotly/validators/scattersmith/marker/line/_reversescale.py                          |   16
 plotly/validators/scattersmith/marker/line/_width.py                                 |   15
 plotly/validators/scattersmith/marker/line/_widthsrc.py                              |   13
 plotly/validators/scattersmith/selected/__init__.py                                  |   12
 plotly/validators/scattersmith/selected/_marker.py                                   |   24
 plotly/validators/scattersmith/selected/_textfont.py                                 |   20
 plotly/validators/scattersmith/selected/marker/__init__.py                           |   19
 plotly/validators/scattersmith/selected/marker/_color.py                             |   13
 plotly/validators/scattersmith/selected/marker/_opacity.py                           |   18
 plotly/validators/scattersmith/selected/marker/_size.py                              |   14
 plotly/validators/scattersmith/selected/textfont/__init__.py                         |   11
 plotly/validators/scattersmith/selected/textfont/_color.py                           |   16
 plotly/validators/scattersmith/stream/__init__.py                                    |   12
 plotly/validators/scattersmith/stream/_maxpoints.py                                  |   15
 plotly/validators/scattersmith/stream/_token.py                                      |   15
 plotly/validators/scattersmith/textfont/__init__.py                                  |   25
 plotly/validators/scattersmith/textfont/_color.py                                    |   14
 plotly/validators/scattersmith/textfont/_colorsrc.py                                 |   13
 plotly/validators/scattersmith/textfont/_family.py                                   |   16
 plotly/validators/scattersmith/textfont/_familysrc.py                                |   13
 plotly/validators/scattersmith/textfont/_size.py                                     |   15
 plotly/validators/scattersmith/textfont/_sizesrc.py                                  |   13
 plotly/validators/scattersmith/unselected/__init__.py                                |   12
 plotly/validators/scattersmith/unselected/_marker.py                                 |   27
 plotly/validators/scattersmith/unselected/_textfont.py                               |   21
 plotly/validators/scattersmith/unselected/marker/__init__.py                         |   19
 plotly/validators/scattersmith/unselected/marker/_color.py                           |   16
 plotly/validators/scattersmith/unselected/marker/_opacity.py                         |   18
 plotly/validators/scattersmith/unselected/marker/_size.py                            |   14
 plotly/validators/scattersmith/unselected/textfont/__init__.py                       |   11
 plotly/validators/scattersmith/unselected/textfont/_color.py                         |   16
 plotly/validators/scatterternary/__init__.py                                         |  115
 plotly/validators/scatterternary/_a.py                                               |   11
 plotly/validators/scatterternary/_asrc.py                                            |   11
 plotly/validators/scatterternary/_b.py                                               |   11
 plotly/validators/scatterternary/_bsrc.py                                            |   11
 plotly/validators/scatterternary/_c.py                                               |   11
 plotly/validators/scatterternary/_cliponaxis.py                                      |   13
 plotly/validators/scatterternary/_connectgaps.py                                     |   13
 plotly/validators/scatterternary/_csrc.py                                            |   11
 plotly/validators/scatterternary/_customdata.py                                      |   13
 plotly/validators/scatterternary/_customdatasrc.py                                   |   13
 plotly/validators/scatterternary/_fill.py                                            |   12
 plotly/validators/scatterternary/_fillcolor.py                                       |   11
 plotly/validators/scatterternary/_hoverinfo.py                                       |   14
 plotly/validators/scatterternary/_hoverinfosrc.py                                    |   13
 plotly/validators/scatterternary/_hoverlabel.py                                      |   53
 plotly/validators/scatterternary/_hoveron.py                                         |   12
 plotly/validators/scatterternary/_hovertemplate.py                                   |   14
 plotly/validators/scatterternary/_hovertemplatesrc.py                                |   13
 plotly/validators/scatterternary/_hovertext.py                                       |   12
 plotly/validators/scatterternary/_hovertextsrc.py                                    |   13
 plotly/validators/scatterternary/_ids.py                                             |   11
 plotly/validators/scatterternary/_idssrc.py                                          |   11
 plotly/validators/scatterternary/_legend.py                                          |   12
 plotly/validators/scatterternary/_legendgroup.py                                     |   13
 plotly/validators/scatterternary/_legendgrouptitle.py                                |   22
 plotly/validators/scatterternary/_legendrank.py                                      |   13
 plotly/validators/scatterternary/_legendwidth.py                                     |   14
 plotly/validators/scatterternary/_line.py                                            |   45
 plotly/validators/scatterternary/_marker.py                                          |  166
 plotly/validators/scatterternary/_meta.py                                            |   12
 plotly/validators/scatterternary/_metasrc.py                                         |   11
 plotly/validators/scatterternary/_mode.py                                            |   13
 plotly/validators/scatterternary/_name.py                                            |   11
 plotly/validators/scatterternary/_opacity.py                                         |   13
 plotly/validators/scatterternary/_selected.py                                        |   24
 plotly/validators/scatterternary/_selectedpoints.py                                  |   13
 plotly/validators/scatterternary/_showlegend.py                                      |   13
 plotly/validators/scatterternary/_stream.py                                          |   25
 plotly/validators/scatterternary/_subplot.py                                         |   12
 plotly/validators/scatterternary/_sum.py                                             |   12
 plotly/validators/scatterternary/_text.py                                            |   12
 plotly/validators/scatterternary/_textfont.py                                        |   46
 plotly/validators/scatterternary/_textposition.py                                    |   28
 plotly/validators/scatterternary/_textpositionsrc.py                                 |   13
 plotly/validators/scatterternary/_textsrc.py                                         |   11
 plotly/validators/scatterternary/_texttemplate.py                                    |   14
 plotly/validators/scatterternary/_texttemplatesrc.py                                 |   13
 plotly/validators/scatterternary/_uid.py                                             |   11
 plotly/validators/scatterternary/_uirevision.py                                      |   13
 plotly/validators/scatterternary/_unselected.py                                      |   26
 plotly/validators/scatterternary/_visible.py                                         |   12
 plotly/validators/scatterternary/hoverlabel/__init__.py                              |   31
 plotly/validators/scatterternary/hoverlabel/_align.py                                |   15
 plotly/validators/scatterternary/hoverlabel/_alignsrc.py                             |   13
 plotly/validators/scatterternary/hoverlabel/_bgcolor.py                              |   14
 plotly/validators/scatterternary/hoverlabel/_bgcolorsrc.py                           |   16
 plotly/validators/scatterternary/hoverlabel/_bordercolor.py                          |   17
 plotly/validators/scatterternary/hoverlabel/_bordercolorsrc.py                       |   16
 plotly/validators/scatterternary/hoverlabel/_font.py                                 |   48
 plotly/validators/scatterternary/hoverlabel/_namelength.py                           |   18
 plotly/validators/scatterternary/hoverlabel/_namelengthsrc.py                        |   16
 plotly/validators/scatterternary/hoverlabel/font/__init__.py                         |   25
 plotly/validators/scatterternary/hoverlabel/font/_color.py                           |   17
 plotly/validators/scatterternary/hoverlabel/font/_colorsrc.py                        |   16
 plotly/validators/scatterternary/hoverlabel/font/_family.py                          |   19
 plotly/validators/scatterternary/hoverlabel/font/_familysrc.py                       |   16
 plotly/validators/scatterternary/hoverlabel/font/_size.py                            |   15
 plotly/validators/scatterternary/hoverlabel/font/_sizesrc.py                         |   16
 plotly/validators/scatterternary/legendgrouptitle/__init__.py                        |   12
 plotly/validators/scatterternary/legendgrouptitle/_font.py                           |   42
 plotly/validators/scatterternary/legendgrouptitle/_text.py                           |   16
 plotly/validators/scatterternary/legendgrouptitle/font/__init__.py                   |   15
 plotly/validators/scatterternary/legendgrouptitle/font/_color.py                     |   16
 plotly/validators/scatterternary/legendgrouptitle/font/_family.py                    |   18
 plotly/validators/scatterternary/legendgrouptitle/font/_size.py                      |   17
 plotly/validators/scatterternary/line/__init__.py                                    |   27
 plotly/validators/scatterternary/line/_backoff.py                                    |   15
 plotly/validators/scatterternary/line/_backoffsrc.py                                 |   13
 plotly/validators/scatterternary/line/_color.py                                      |   13
 plotly/validators/scatterternary/line/_dash.py                                       |   14
 plotly/validators/scatterternary/line/_shape.py                                      |   14
 plotly/validators/scatterternary/line/_smoothing.py                                  |   15
 plotly/validators/scatterternary/line/_width.py                                      |   14
 plotly/validators/scatterternary/marker/__init__.py                                  |   71
 plotly/validators/scatterternary/marker/_angle.py                                    |   14
 plotly/validators/scatterternary/marker/_angleref.py                                 |   14
 plotly/validators/scatterternary/marker/_anglesrc.py                                 |   13
 plotly/validators/scatterternary/marker/_autocolorscale.py                           |   17
 plotly/validators/scatterternary/marker/_cauto.py                                    |   14
 plotly/validators/scatterternary/marker/_cmax.py                                     |   14
 plotly/validators/scatterternary/marker/_cmid.py                                     |   14
 plotly/validators/scatterternary/marker/_cmin.py                                     |   14
 plotly/validators/scatterternary/marker/_color.py                                    |   17
 plotly/validators/scatterternary/marker/_coloraxis.py                                |   15
 plotly/validators/scatterternary/marker/_colorbar.py                                 |  297
 plotly/validators/scatterternary/marker/_colorscale.py                               |   14
 plotly/validators/scatterternary/marker/_colorsrc.py                                 |   13
 plotly/validators/scatterternary/marker/_gradient.py                                 |   31
 plotly/validators/scatterternary/marker/_line.py                                     |  107
 plotly/validators/scatterternary/marker/_maxdisplayed.py                             |   14
 plotly/validators/scatterternary/marker/_opacity.py                                  |   16
 plotly/validators/scatterternary/marker/_opacitysrc.py                               |   13
 plotly/validators/scatterternary/marker/_reversescale.py                             |   13
 plotly/validators/scatterternary/marker/_showscale.py                                |   13
 plotly/validators/scatterternary/marker/_size.py                                     |   15
 plotly/validators/scatterternary/marker/_sizemin.py                                  |   14
 plotly/validators/scatterternary/marker/_sizemode.py                                 |   14
 plotly/validators/scatterternary/marker/_sizeref.py                                  |   13
 plotly/validators/scatterternary/marker/_sizesrc.py                                  |   13
 plotly/validators/scatterternary/marker/_standoff.py                                 |   15
 plotly/validators/scatterternary/marker/_standoffsrc.py                              |   13
 plotly/validators/scatterternary/marker/_symbol.py                                   |  505
 plotly/validators/scatterternary/marker/_symbolsrc.py                                |   13
 plotly/validators/scatterternary/marker/colorbar/__init__.py                         |  111
 plotly/validators/scatterternary/marker/colorbar/_bgcolor.py                         |   16
 plotly/validators/scatterternary/marker/colorbar/_bordercolor.py                     |   16
 plotly/validators/scatterternary/marker/colorbar/_borderwidth.py                     |   17
 plotly/validators/scatterternary/marker/colorbar/_dtick.py                           |   17
 plotly/validators/scatterternary/marker/colorbar/_exponentformat.py                  |   17
 plotly/validators/scatterternary/marker/colorbar/_labelalias.py                      |   16
 plotly/validators/scatterternary/marker/colorbar/_len.py                             |   14
 plotly/validators/scatterternary/marker/colorbar/_lenmode.py                         |   17
 plotly/validators/scatterternary/marker/colorbar/_minexponent.py                     |   17
 plotly/validators/scatterternary/marker/colorbar/_nticks.py                          |   17
 plotly/validators/scatterternary/marker/colorbar/_orientation.py                     |   17
 plotly/validators/scatterternary/marker/colorbar/_outlinecolor.py                    |   16
 plotly/validators/scatterternary/marker/colorbar/_outlinewidth.py                    |   17
 plotly/validators/scatterternary/marker/colorbar/_separatethousands.py               |   16
 plotly/validators/scatterternary/marker/colorbar/_showexponent.py                    |   17
 plotly/validators/scatterternary/marker/colorbar/_showticklabels.py                  |   16
 plotly/validators/scatterternary/marker/colorbar/_showtickprefix.py                  |   17
 plotly/validators/scatterternary/marker/colorbar/_showticksuffix.py                  |   17
 plotly/validators/scatterternary/marker/colorbar/_thickness.py                       |   17
 plotly/validators/scatterternary/marker/colorbar/_thicknessmode.py                   |   17
 plotly/validators/scatterternary/marker/colorbar/_tick0.py                           |   17
 plotly/validators/scatterternary/marker/colorbar/_tickangle.py                       |   16
 plotly/validators/scatterternary/marker/colorbar/_tickcolor.py                       |   16
 plotly/validators/scatterternary/marker/colorbar/_tickfont.py                        |   42
 plotly/validators/scatterternary/marker/colorbar/_tickformat.py                      |   16
 plotly/validators/scatterternary/marker/colorbar/_tickformatstopdefaults.py          |   21
 plotly/validators/scatterternary/marker/colorbar/_tickformatstops.py                 |   54
 plotly/validators/scatterternary/marker/colorbar/_ticklabeloverflow.py               |   17
 plotly/validators/scatterternary/marker/colorbar/_ticklabelposition.py               |   31
 plotly/validators/scatterternary/marker/colorbar/_ticklabelstep.py                   |   17
 plotly/validators/scatterternary/marker/colorbar/_ticklen.py                         |   17
 plotly/validators/scatterternary/marker/colorbar/_tickmode.py                        |   18
 plotly/validators/scatterternary/marker/colorbar/_tickprefix.py                      |   16
 plotly/validators/scatterternary/marker/colorbar/_ticks.py                           |   17
 plotly/validators/scatterternary/marker/colorbar/_ticksuffix.py                      |   16
 plotly/validators/scatterternary/marker/colorbar/_ticktext.py                        |   16
 plotly/validators/scatterternary/marker/colorbar/_ticktextsrc.py                     |   16
 plotly/validators/scatterternary/marker/colorbar/_tickvals.py                        |   16
 plotly/validators/scatterternary/marker/colorbar/_tickvalssrc.py                     |   16
 plotly/validators/scatterternary/marker/colorbar/_tickwidth.py                       |   17
 plotly/validators/scatterternary/marker/colorbar/_title.py                           |   38
 plotly/validators/scatterternary/marker/colorbar/_x.py                               |   13
 plotly/validators/scatterternary/marker/colorbar/_xanchor.py                         |   17
 plotly/validators/scatterternary/marker/colorbar/_xpad.py                            |   14
 plotly/validators/scatterternary/marker/colorbar/_xref.py                            |   14
 plotly/validators/scatterternary/marker/colorbar/_y.py                               |   13
 plotly/validators/scatterternary/marker/colorbar/_yanchor.py                         |   17
 plotly/validators/scatterternary/marker/colorbar/_ypad.py                            |   14
 plotly/validators/scatterternary/marker/colorbar/_yref.py                            |   14
 plotly/validators/scatterternary/marker/colorbar/tickfont/__init__.py                |   15
 plotly/validators/scatterternary/marker/colorbar/tickfont/_color.py                  |   16
 plotly/validators/scatterternary/marker/colorbar/tickfont/_family.py                 |   18
 plotly/validators/scatterternary/marker/colorbar/tickfont/_size.py                   |   17
 plotly/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py          |   23
 plotly/validators/scatterternary/marker/colorbar/tickformatstop/_dtickrange.py       |   23
 plotly/validators/scatterternary/marker/colorbar/tickformatstop/_enabled.py          |   16
 plotly/validators/scatterternary/marker/colorbar/tickformatstop/_name.py             |   16
 plotly/validators/scatterternary/marker/colorbar/tickformatstop/_templateitemname.py |   16
 plotly/validators/scatterternary/marker/colorbar/tickformatstop/_value.py            |   16
 plotly/validators/scatterternary/marker/colorbar/title/__init__.py                   |   15
 plotly/validators/scatterternary/marker/colorbar/title/_font.py                      |   42
 plotly/validators/scatterternary/marker/colorbar/title/_side.py                      |   17
 plotly/validators/scatterternary/marker/colorbar/title/_text.py                      |   16
 plotly/validators/scatterternary/marker/colorbar/title/font/__init__.py              |   15
 plotly/validators/scatterternary/marker/colorbar/title/font/_color.py                |   16
 plotly/validators/scatterternary/marker/colorbar/title/font/_family.py               |   18
 plotly/validators/scatterternary/marker/colorbar/title/font/_size.py                 |   17
 plotly/validators/scatterternary/marker/gradient/__init__.py                         |   21
 plotly/validators/scatterternary/marker/gradient/_color.py                           |   17
 plotly/validators/scatterternary/marker/gradient/_colorsrc.py                        |   16
 plotly/validators/scatterternary/marker/gradient/_type.py                            |   15
 plotly/validators/scatterternary/marker/gradient/_typesrc.py                         |   16
 plotly/validators/scatterternary/marker/line/__init__.py                             |   37
 plotly/validators/scatterternary/marker/line/_autocolorscale.py                      |   17
 plotly/validators/scatterternary/marker/line/_cauto.py                               |   14
 plotly/validators/scatterternary/marker/line/_cmax.py                                |   14
 plotly/validators/scatterternary/marker/line/_cmid.py                                |   14
 plotly/validators/scatterternary/marker/line/_cmin.py                                |   14
 plotly/validators/scatterternary/marker/line/_color.py                               |   17
 plotly/validators/scatterternary/marker/line/_coloraxis.py                           |   18
 plotly/validators/scatterternary/marker/line/_colorscale.py                          |   17
 plotly/validators/scatterternary/marker/line/_colorsrc.py                            |   13
 plotly/validators/scatterternary/marker/line/_reversescale.py                        |   16
 plotly/validators/scatterternary/marker/line/_width.py                               |   15
 plotly/validators/scatterternary/marker/line/_widthsrc.py                            |   13
 plotly/validators/scatterternary/selected/__init__.py                                |   12
 plotly/validators/scatterternary/selected/_marker.py                                 |   24
 plotly/validators/scatterternary/selected/_textfont.py                               |   20
 plotly/validators/scatterternary/selected/marker/__init__.py                         |   19
 plotly/validators/scatterternary/selected/marker/_color.py                           |   16
 plotly/validators/scatterternary/selected/marker/_opacity.py                         |   18
 plotly/validators/scatterternary/selected/marker/_size.py                            |   14
 plotly/validators/scatterternary/selected/textfont/__init__.py                       |   11
 plotly/validators/scatterternary/selected/textfont/_color.py                         |   16
 plotly/validators/scatterternary/stream/__init__.py                                  |   12
 plotly/validators/scatterternary/stream/_maxpoints.py                                |   15
 plotly/validators/scatterternary/stream/_token.py                                    |   15
 plotly/validators/scatterternary/textfont/__init__.py                                |   25
 plotly/validators/scatterternary/textfont/_color.py                                  |   14
 plotly/validators/scatterternary/textfont/_colorsrc.py                               |   13
 plotly/validators/scatterternary/textfont/_family.py                                 |   16
 plotly/validators/scatterternary/textfont/_familysrc.py                              |   13
 plotly/validators/scatterternary/textfont/_size.py                                   |   15
 plotly/validators/scatterternary/textfont/_sizesrc.py                                |   13
 plotly/validators/scatterternary/unselected/__init__.py                              |   12
 plotly/validators/scatterternary/unselected/_marker.py                               |   27
 plotly/validators/scatterternary/unselected/_textfont.py                             |   21
 plotly/validators/scatterternary/unselected/marker/__init__.py                       |   19
 plotly/validators/scatterternary/unselected/marker/_color.py                         |   16
 plotly/validators/scatterternary/unselected/marker/_opacity.py                       |   18
 plotly/validators/scatterternary/unselected/marker/_size.py                          |   17
 plotly/validators/scatterternary/unselected/textfont/__init__.py                     |   11
 plotly/validators/scatterternary/unselected/textfont/_color.py                       |   16
 plotly/validators/splom/__init__.py                                                  |   93
 plotly/validators/splom/_customdata.py                                               |   11
 plotly/validators/splom/_customdatasrc.py                                            |   11
 plotly/validators/splom/_diagonal.py                                                 |   19
 plotly/validators/splom/_dimensiondefaults.py                                        |   16
 plotly/validators/splom/_dimensions.py                                               |   53
 plotly/validators/splom/_hoverinfo.py                                                |   14
 plotly/validators/splom/_hoverinfosrc.py                                             |   11
 plotly/validators/splom/_hoverlabel.py                                               |   51
 plotly/validators/splom/_hovertemplate.py                                            |   12
 plotly/validators/splom/_hovertemplatesrc.py                                         |   11
 plotly/validators/splom/_hovertext.py                                                |   12
 plotly/validators/splom/_hovertextsrc.py                                             |   11
 plotly/validators/splom/_ids.py                                                      |   11
 plotly/validators/splom/_idssrc.py                                                   |   11
 plotly/validators/splom/_legend.py                                                   |   12
 plotly/validators/splom/_legendgroup.py                                              |   11
 plotly/validators/splom/_legendgrouptitle.py                                         |   20
 plotly/validators/splom/_legendrank.py                                               |   11
 plotly/validators/splom/_legendwidth.py                                              |   12
 plotly/validators/splom/_marker.py                                                   |  144
 plotly/validators/splom/_meta.py                                                     |   12
 plotly/validators/splom/_metasrc.py                                                  |   11
 plotly/validators/splom/_name.py                                                     |   11
 plotly/validators/splom/_opacity.py                                                  |   13
 plotly/validators/splom/_selected.py                                                 |   20
 plotly/validators/splom/_selectedpoints.py                                           |   11
 plotly/validators/splom/_showlegend.py                                               |   11
 plotly/validators/splom/_showlowerhalf.py                                            |   11
 plotly/validators/splom/_showupperhalf.py                                            |   11
 plotly/validators/splom/_stream.py                                                   |   25
 plotly/validators/splom/_text.py                                                     |   12
 plotly/validators/splom/_textsrc.py                                                  |   11
 plotly/validators/splom/_uid.py                                                      |   11
 plotly/validators/splom/_uirevision.py                                               |   11
 plotly/validators/splom/_unselected.py                                               |   20
 plotly/validators/splom/_visible.py                                                  |   12
 plotly/validators/splom/_xaxes.py                                                    |   20
 plotly/validators/splom/_xhoverformat.py                                             |   11
 plotly/validators/splom/_yaxes.py                                                    |   20
 plotly/validators/splom/_yhoverformat.py                                             |   11
 plotly/validators/splom/diagonal/__init__.py                                         |   11
 plotly/validators/splom/diagonal/_visible.py                                         |   11
 plotly/validators/splom/dimension/__init__.py                                        |   27
 plotly/validators/splom/dimension/_axis.py                                           |   26
 plotly/validators/splom/dimension/_label.py                                          |   11
 plotly/validators/splom/dimension/_name.py                                           |   11
 plotly/validators/splom/dimension/_templateitemname.py                               |   13
 plotly/validators/splom/dimension/_values.py                                         |   11
 plotly/validators/splom/dimension/_valuessrc.py                                      |   13
 plotly/validators/splom/dimension/_visible.py                                        |   11
 plotly/validators/splom/dimension/axis/__init__.py                                   |   12
 plotly/validators/splom/dimension/axis/_matches.py                                   |   13
 plotly/validators/splom/dimension/axis/_type.py                                      |   14
 plotly/validators/splom/hoverlabel/__init__.py                                       |   31
 plotly/validators/splom/hoverlabel/_align.py                                         |   13
 plotly/validators/splom/hoverlabel/_alignsrc.py                                      |   13
 plotly/validators/splom/hoverlabel/_bgcolor.py                                       |   12
 plotly/validators/splom/hoverlabel/_bgcolorsrc.py                                    |   13
 plotly/validators/splom/hoverlabel/_bordercolor.py                                   |   14
 plotly/validators/splom/hoverlabel/_bordercolorsrc.py                                |   13
 plotly/validators/splom/hoverlabel/_font.py                                          |   46
 plotly/validators/splom/hoverlabel/_namelength.py                                    |   15
 plotly/validators/splom/hoverlabel/_namelengthsrc.py                                 |   13
 plotly/validators/splom/hoverlabel/font/__init__.py                                  |   25
 plotly/validators/splom/hoverlabel/font/_color.py                                    |   14
 plotly/validators/splom/hoverlabel/font/_colorsrc.py                                 |   13
 plotly/validators/splom/hoverlabel/font/_family.py                                   |   16
 plotly/validators/splom/hoverlabel/font/_familysrc.py                                |   13
 plotly/validators/splom/hoverlabel/font/_size.py                                     |   15
 plotly/validators/splom/hoverlabel/font/_sizesrc.py                                  |   13
 plotly/validators/splom/legendgrouptitle/__init__.py                                 |   12
 plotly/validators/splom/legendgrouptitle/_font.py                                    |   39
 plotly/validators/splom/legendgrouptitle/_text.py                                    |   13
 plotly/validators/splom/legendgrouptitle/font/__init__.py                            |   15
 plotly/validators/splom/legendgrouptitle/font/_color.py                              |   13
 plotly/validators/splom/legendgrouptitle/font/_family.py                             |   15
 plotly/validators/splom/legendgrouptitle/font/_size.py                               |   14
 plotly/validators/splom/marker/__init__.py                                           |   61
 plotly/validators/splom/marker/_angle.py                                             |   12
 plotly/validators/splom/marker/_anglesrc.py                                          |   11
 plotly/validators/splom/marker/_autocolorscale.py                                    |   14
 plotly/validators/splom/marker/_cauto.py                                             |   12
 plotly/validators/splom/marker/_cmax.py                                              |   12
 plotly/validators/splom/marker/_cmid.py                                              |   12
 plotly/validators/splom/marker/_cmin.py                                              |   12
 plotly/validators/splom/marker/_color.py                                             |   13
 plotly/validators/splom/marker/_coloraxis.py                                         |   13
 plotly/validators/splom/marker/_colorbar.py                                          |  295
 plotly/validators/splom/marker/_colorscale.py                                        |   12
 plotly/validators/splom/marker/_colorsrc.py                                          |   11
 plotly/validators/splom/marker/_line.py                                              |  105
 plotly/validators/splom/marker/_opacity.py                                           |   14
 plotly/validators/splom/marker/_opacitysrc.py                                        |   11
 plotly/validators/splom/marker/_reversescale.py                                      |   13
 plotly/validators/splom/marker/_showscale.py                                         |   11
 plotly/validators/splom/marker/_size.py                                              |   13
 plotly/validators/splom/marker/_sizemin.py                                           |   12
 plotly/validators/splom/marker/_sizemode.py                                          |   12
 plotly/validators/splom/marker/_sizeref.py                                           |   11
 plotly/validators/splom/marker/_sizesrc.py                                           |   11
 plotly/validators/splom/marker/_symbol.py                                            |  503
 plotly/validators/splom/marker/_symbolsrc.py                                         |   11
 plotly/validators/splom/marker/colorbar/__init__.py                                  |  111
 plotly/validators/splom/marker/colorbar/_bgcolor.py                                  |   13
 plotly/validators/splom/marker/colorbar/_bordercolor.py                              |   13
 plotly/validators/splom/marker/colorbar/_borderwidth.py                              |   14
 plotly/validators/splom/marker/colorbar/_dtick.py                                    |   14
 plotly/validators/splom/marker/colorbar/_exponentformat.py                           |   17
 plotly/validators/splom/marker/colorbar/_labelalias.py                               |   13
 plotly/validators/splom/marker/colorbar/_len.py                                      |   14
 plotly/validators/splom/marker/colorbar/_lenmode.py                                  |   14
 plotly/validators/splom/marker/colorbar/_minexponent.py                              |   14
 plotly/validators/splom/marker/colorbar/_nticks.py                                   |   14
 plotly/validators/splom/marker/colorbar/_orientation.py                              |   14
 plotly/validators/splom/marker/colorbar/_outlinecolor.py                             |   13
 plotly/validators/splom/marker/colorbar/_outlinewidth.py                             |   14
 plotly/validators/splom/marker/colorbar/_separatethousands.py                        |   16
 plotly/validators/splom/marker/colorbar/_showexponent.py                             |   14
 plotly/validators/splom/marker/colorbar/_showticklabels.py                           |   16
 plotly/validators/splom/marker/colorbar/_showtickprefix.py                           |   17
 plotly/validators/splom/marker/colorbar/_showticksuffix.py                           |   17
 plotly/validators/splom/marker/colorbar/_thickness.py                                |   14
 plotly/validators/splom/marker/colorbar/_thicknessmode.py                            |   14
 plotly/validators/splom/marker/colorbar/_tick0.py                                    |   14
 plotly/validators/splom/marker/colorbar/_tickangle.py                                |   13
 plotly/validators/splom/marker/colorbar/_tickcolor.py                                |   13
 plotly/validators/splom/marker/colorbar/_tickfont.py                                 |   39
 plotly/validators/splom/marker/colorbar/_tickformat.py                               |   13
 plotly/validators/splom/marker/colorbar/_tickformatstopdefaults.py                   |   21
 plotly/validators/splom/marker/colorbar/_tickformatstops.py                          |   54
 plotly/validators/splom/marker/colorbar/_ticklabeloverflow.py                        |   17
 plotly/validators/splom/marker/colorbar/_ticklabelposition.py                        |   31
 plotly/validators/splom/marker/colorbar/_ticklabelstep.py                            |   14
 plotly/validators/splom/marker/colorbar/_ticklen.py                                  |   14
 plotly/validators/splom/marker/colorbar/_tickmode.py                                 |   15
 plotly/validators/splom/marker/colorbar/_tickprefix.py                               |   13
 plotly/validators/splom/marker/colorbar/_ticks.py                                    |   14
 plotly/validators/splom/marker/colorbar/_ticksuffix.py                               |   13
 plotly/validators/splom/marker/colorbar/_ticktext.py                                 |   13
 plotly/validators/splom/marker/colorbar/_ticktextsrc.py                              |   13
 plotly/validators/splom/marker/colorbar/_tickvals.py                                 |   13
 plotly/validators/splom/marker/colorbar/_tickvalssrc.py                              |   13
 plotly/validators/splom/marker/colorbar/_tickwidth.py                                |   14
 plotly/validators/splom/marker/colorbar/_title.py                                    |   35
 plotly/validators/splom/marker/colorbar/_x.py                                        |   11
 plotly/validators/splom/marker/colorbar/_xanchor.py                                  |   14
 plotly/validators/splom/marker/colorbar/_xpad.py                                     |   14
 plotly/validators/splom/marker/colorbar/_xref.py                                     |   14
 plotly/validators/splom/marker/colorbar/_y.py                                        |   11
 plotly/validators/splom/marker/colorbar/_yanchor.py                                  |   14
 plotly/validators/splom/marker/colorbar/_ypad.py                                     |   14
 plotly/validators/splom/marker/colorbar/_yref.py                                     |   14
 plotly/validators/splom/marker/colorbar/tickfont/__init__.py                         |   15
 plotly/validators/splom/marker/colorbar/tickfont/_color.py                           |   16
 plotly/validators/splom/marker/colorbar/tickfont/_family.py                          |   18
 plotly/validators/splom/marker/colorbar/tickfont/_size.py                            |   14
 plotly/validators/splom/marker/colorbar/tickformatstop/__init__.py                   |   23
 plotly/validators/splom/marker/colorbar/tickformatstop/_dtickrange.py                |   23
 plotly/validators/splom/marker/colorbar/tickformatstop/_enabled.py                   |   16
 plotly/validators/splom/marker/colorbar/tickformatstop/_name.py                      |   16
 plotly/validators/splom/marker/colorbar/tickformatstop/_templateitemname.py          |   16
 plotly/validators/splom/marker/colorbar/tickformatstop/_value.py                     |   16
 plotly/validators/splom/marker/colorbar/title/__init__.py                            |   15
 plotly/validators/splom/marker/colorbar/title/_font.py                               |   39
 plotly/validators/splom/marker/colorbar/title/_side.py                               |   14
 plotly/validators/splom/marker/colorbar/title/_text.py                               |   13
 plotly/validators/splom/marker/colorbar/title/font/__init__.py                       |   15
 plotly/validators/splom/marker/colorbar/title/font/_color.py                         |   16
 plotly/validators/splom/marker/colorbar/title/font/_family.py                        |   18
 plotly/validators/splom/marker/colorbar/title/font/_size.py                          |   17
 plotly/validators/splom/marker/line/__init__.py                                      |   37
 plotly/validators/splom/marker/line/_autocolorscale.py                               |   14
 plotly/validators/splom/marker/line/_cauto.py                                        |   12
 plotly/validators/splom/marker/line/_cmax.py                                         |   12
 plotly/validators/splom/marker/line/_cmid.py                                         |   12
 plotly/validators/splom/marker/line/_cmin.py                                         |   12
 plotly/validators/splom/marker/line/_color.py                                        |   15
 plotly/validators/splom/marker/line/_coloraxis.py                                    |   15
 plotly/validators/splom/marker/line/_colorscale.py                                   |   14
 plotly/validators/splom/marker/line/_colorsrc.py                                     |   13
 plotly/validators/splom/marker/line/_reversescale.py                                 |   13
 plotly/validators/splom/marker/line/_width.py                                        |   13
 plotly/validators/splom/marker/line/_widthsrc.py                                     |   13
 plotly/validators/splom/selected/__init__.py                                         |   11
 plotly/validators/splom/selected/_marker.py                                          |   22
 plotly/validators/splom/selected/marker/__init__.py                                  |   19
 plotly/validators/splom/selected/marker/_color.py                                    |   13
 plotly/validators/splom/selected/marker/_opacity.py                                  |   15
 plotly/validators/splom/selected/marker/_size.py                                     |   14
 plotly/validators/splom/stream/__init__.py                                           |   12
 plotly/validators/splom/stream/_maxpoints.py                                         |   13
 plotly/validators/splom/stream/_token.py                                             |   13
 plotly/validators/splom/unselected/__init__.py                                       |   11
 plotly/validators/splom/unselected/_marker.py                                        |   25
 plotly/validators/splom/unselected/marker/__init__.py                                |   19
 plotly/validators/splom/unselected/marker/_color.py                                  |   13
 plotly/validators/splom/unselected/marker/_opacity.py                                |   15
 plotly/validators/splom/unselected/marker/_size.py                                   |   14
 plotly/validators/streamtube/__init__.py                                             |  131
 plotly/validators/streamtube/_autocolorscale.py                                      |   14
 plotly/validators/streamtube/_cauto.py                                               |   12
 plotly/validators/streamtube/_cmax.py                                                |   12
 plotly/validators/streamtube/_cmid.py                                                |   12
 plotly/validators/streamtube/_cmin.py                                                |   12
 plotly/validators/streamtube/_coloraxis.py                                           |   13
 plotly/validators/streamtube/_colorbar.py                                            |  294
 plotly/validators/streamtube/_colorscale.py                                          |   12
 plotly/validators/streamtube/_customdata.py                                          |   11
 plotly/validators/streamtube/_customdatasrc.py                                       |   11
 plotly/validators/streamtube/_hoverinfo.py                                           |   17
 plotly/validators/streamtube/_hoverinfosrc.py                                        |   11
 plotly/validators/streamtube/_hoverlabel.py                                          |   51
 plotly/validators/streamtube/_hovertemplate.py                                       |   12
 plotly/validators/streamtube/_hovertemplatesrc.py                                    |   13
 plotly/validators/streamtube/_hovertext.py                                           |   11
 plotly/validators/streamtube/_ids.py                                                 |   11
 plotly/validators/streamtube/_idssrc.py                                              |   11
 plotly/validators/streamtube/_legend.py                                              |   12
 plotly/validators/streamtube/_legendgroup.py                                         |   11
 plotly/validators/streamtube/_legendgrouptitle.py                                    |   22
 plotly/validators/streamtube/_legendrank.py                                          |   11
 plotly/validators/streamtube/_legendwidth.py                                         |   12
 plotly/validators/streamtube/_lighting.py                                            |   40
 plotly/validators/streamtube/_lightposition.py                                       |   25
 plotly/validators/streamtube/_maxdisplayed.py                                        |   12
 plotly/validators/streamtube/_meta.py                                                |   12
 plotly/validators/streamtube/_metasrc.py                                             |   11
 plotly/validators/streamtube/_name.py                                                |   11
 plotly/validators/streamtube/_opacity.py                                             |   13
 plotly/validators/streamtube/_reversescale.py                                        |   11
 plotly/validators/streamtube/_scene.py                                               |   12
 plotly/validators/streamtube/_showlegend.py                                          |   11
 plotly/validators/streamtube/_showscale.py                                           |   11
 plotly/validators/streamtube/_sizeref.py                                             |   12
 plotly/validators/streamtube/_starts.py                                              |   34
 plotly/validators/streamtube/_stream.py                                              |   25
 plotly/validators/streamtube/_text.py                                                |   11
 plotly/validators/streamtube/_u.py                                                   |   11
 plotly/validators/streamtube/_uhoverformat.py                                        |   11
 plotly/validators/streamtube/_uid.py                                                 |   11
 plotly/validators/streamtube/_uirevision.py                                          |   11
 plotly/validators/streamtube/_usrc.py                                                |   11
 plotly/validators/streamtube/_v.py                                                   |   11
 plotly/validators/streamtube/_vhoverformat.py                                        |   11
 plotly/validators/streamtube/_visible.py                                             |   12
 plotly/validators/streamtube/_vsrc.py                                                |   11
 plotly/validators/streamtube/_w.py                                                   |   11
 plotly/validators/streamtube/_whoverformat.py                                        |   11
 plotly/validators/streamtube/_wsrc.py                                                |   11
 plotly/validators/streamtube/_x.py                                                   |   11
 plotly/validators/streamtube/_xhoverformat.py                                        |   11
 plotly/validators/streamtube/_xsrc.py                                                |   11
 plotly/validators/streamtube/_y.py                                                   |   11
 plotly/validators/streamtube/_yhoverformat.py                                        |   11
 plotly/validators/streamtube/_ysrc.py                                                |   11
 plotly/validators/streamtube/_z.py                                                   |   11
 plotly/validators/streamtube/_zhoverformat.py                                        |   11
 plotly/validators/streamtube/_zsrc.py                                                |   11
 plotly/validators/streamtube/colorbar/__init__.py                                    |  111
 plotly/validators/streamtube/colorbar/_bgcolor.py                                    |   13
 plotly/validators/streamtube/colorbar/_bordercolor.py                                |   13
 plotly/validators/streamtube/colorbar/_borderwidth.py                                |   14
 plotly/validators/streamtube/colorbar/_dtick.py                                      |   14
 plotly/validators/streamtube/colorbar/_exponentformat.py                             |   14
 plotly/validators/streamtube/colorbar/_labelalias.py                                 |   13
 plotly/validators/streamtube/colorbar/_len.py                                        |   12
 plotly/validators/streamtube/colorbar/_lenmode.py                                    |   14
 plotly/validators/streamtube/colorbar/_minexponent.py                                |   14
 plotly/validators/streamtube/colorbar/_nticks.py                                     |   14
 plotly/validators/streamtube/colorbar/_orientation.py                                |   14
 plotly/validators/streamtube/colorbar/_outlinecolor.py                               |   13
 plotly/validators/streamtube/colorbar/_outlinewidth.py                               |   14
 plotly/validators/streamtube/colorbar/_separatethousands.py                          |   16
 plotly/validators/streamtube/colorbar/_showexponent.py                               |   14
 plotly/validators/streamtube/colorbar/_showticklabels.py                             |   13
 plotly/validators/streamtube/colorbar/_showtickprefix.py                             |   14
 plotly/validators/streamtube/colorbar/_showticksuffix.py                             |   14
 plotly/validators/streamtube/colorbar/_thickness.py                                  |   14
 plotly/validators/streamtube/colorbar/_thicknessmode.py                              |   14
 plotly/validators/streamtube/colorbar/_tick0.py                                      |   14
 plotly/validators/streamtube/colorbar/_tickangle.py                                  |   13
 plotly/validators/streamtube/colorbar/_tickcolor.py                                  |   13
 plotly/validators/streamtube/colorbar/_tickfont.py                                   |   39
 plotly/validators/streamtube/colorbar/_tickformat.py                                 |   13
 plotly/validators/streamtube/colorbar/_tickformatstopdefaults.py                     |   21
 plotly/validators/streamtube/colorbar/_tickformatstops.py                            |   51
 plotly/validators/streamtube/colorbar/_ticklabeloverflow.py                          |   17
 plotly/validators/streamtube/colorbar/_ticklabelposition.py                          |   31
 plotly/validators/streamtube/colorbar/_ticklabelstep.py                              |   14
 plotly/validators/streamtube/colorbar/_ticklen.py                                    |   14
 plotly/validators/streamtube/colorbar/_tickmode.py                                   |   15
 plotly/validators/streamtube/colorbar/_tickprefix.py                                 |   13
 plotly/validators/streamtube/colorbar/_ticks.py                                      |   14
 plotly/validators/streamtube/colorbar/_ticksuffix.py                                 |   13
 plotly/validators/streamtube/colorbar/_ticktext.py                                   |   13
 plotly/validators/streamtube/colorbar/_ticktextsrc.py                                |   13
 plotly/validators/streamtube/colorbar/_tickvals.py                                   |   13
 plotly/validators/streamtube/colorbar/_tickvalssrc.py                                |   13
 plotly/validators/streamtube/colorbar/_tickwidth.py                                  |   14
 plotly/validators/streamtube/colorbar/_title.py                                      |   35
 plotly/validators/streamtube/colorbar/_x.py                                          |   11
 plotly/validators/streamtube/colorbar/_xanchor.py                                    |   14
 plotly/validators/streamtube/colorbar/_xpad.py                                       |   12
 plotly/validators/streamtube/colorbar/_xref.py                                       |   12
 plotly/validators/streamtube/colorbar/_y.py                                          |   11
 plotly/validators/streamtube/colorbar/_yanchor.py                                    |   14
 plotly/validators/streamtube/colorbar/_ypad.py                                       |   12
 plotly/validators/streamtube/colorbar/_yref.py                                       |   12
 plotly/validators/streamtube/colorbar/tickfont/__init__.py                           |   15
 plotly/validators/streamtube/colorbar/tickfont/_color.py                             |   13
 plotly/validators/streamtube/colorbar/tickfont/_family.py                            |   15
 plotly/validators/streamtube/colorbar/tickfont/_size.py                              |   14
 plotly/validators/streamtube/colorbar/tickformatstop/__init__.py                     |   23
 plotly/validators/streamtube/colorbar/tickformatstop/_dtickrange.py                  |   23
 plotly/validators/streamtube/colorbar/tickformatstop/_enabled.py                     |   16
 plotly/validators/streamtube/colorbar/tickformatstop/_name.py                        |   16
 plotly/validators/streamtube/colorbar/tickformatstop/_templateitemname.py            |   16
 plotly/validators/streamtube/colorbar/tickformatstop/_value.py                       |   16
 plotly/validators/streamtube/colorbar/title/__init__.py                              |   15
 plotly/validators/streamtube/colorbar/title/_font.py                                 |   39
 plotly/validators/streamtube/colorbar/title/_side.py                                 |   14
 plotly/validators/streamtube/colorbar/title/_text.py                                 |   13
 plotly/validators/streamtube/colorbar/title/font/__init__.py                         |   15
 plotly/validators/streamtube/colorbar/title/font/_color.py                           |   16
 plotly/validators/streamtube/colorbar/title/font/_family.py                          |   18
 plotly/validators/streamtube/colorbar/title/font/_size.py                            |   14
 plotly/validators/streamtube/hoverlabel/__init__.py                                  |   31
 plotly/validators/streamtube/hoverlabel/_align.py                                    |   15
 plotly/validators/streamtube/hoverlabel/_alignsrc.py                                 |   13
 plotly/validators/streamtube/hoverlabel/_bgcolor.py                                  |   14
 plotly/validators/streamtube/hoverlabel/_bgcolorsrc.py                               |   13
 plotly/validators/streamtube/hoverlabel/_bordercolor.py                              |   14
 plotly/validators/streamtube/hoverlabel/_bordercolorsrc.py                           |   16
 plotly/validators/streamtube/hoverlabel/_font.py                                     |   48
 plotly/validators/streamtube/hoverlabel/_namelength.py                               |   15
 plotly/validators/streamtube/hoverlabel/_namelengthsrc.py                            |   13
 plotly/validators/streamtube/hoverlabel/font/__init__.py                             |   25
 plotly/validators/streamtube/hoverlabel/font/_color.py                               |   14
 plotly/validators/streamtube/hoverlabel/font/_colorsrc.py                            |   13
 plotly/validators/streamtube/hoverlabel/font/_family.py                              |   16
 plotly/validators/streamtube/hoverlabel/font/_familysrc.py                           |   16
 plotly/validators/streamtube/hoverlabel/font/_size.py                                |   15
 plotly/validators/streamtube/hoverlabel/font/_sizesrc.py                             |   13
 plotly/validators/streamtube/legendgrouptitle/__init__.py                            |   12
 plotly/validators/streamtube/legendgrouptitle/_font.py                               |   39
 plotly/validators/streamtube/legendgrouptitle/_text.py                               |   13
 plotly/validators/streamtube/legendgrouptitle/font/__init__.py                       |   15
 plotly/validators/streamtube/legendgrouptitle/font/_color.py                         |   16
 plotly/validators/streamtube/legendgrouptitle/font/_family.py                        |   18
 plotly/validators/streamtube/legendgrouptitle/font/_size.py                          |   17
 plotly/validators/streamtube/lighting/__init__.py                                    |   27
 plotly/validators/streamtube/lighting/_ambient.py                                    |   15
 plotly/validators/streamtube/lighting/_diffuse.py                                    |   15
 plotly/validators/streamtube/lighting/_facenormalsepsilon.py                         |   18
 plotly/validators/streamtube/lighting/_fresnel.py                                    |   15
 plotly/validators/streamtube/lighting/_roughness.py                                  |   15
 plotly/validators/streamtube/lighting/_specular.py                                   |   15
 plotly/validators/streamtube/lighting/_vertexnormalsepsilon.py                       |   18
 plotly/validators/streamtube/lightposition/__init__.py                               |   13
 plotly/validators/streamtube/lightposition/_x.py                                     |   15
 plotly/validators/streamtube/lightposition/_y.py                                     |   15
 plotly/validators/streamtube/lightposition/_z.py                                     |   15
 plotly/validators/streamtube/starts/__init__.py                                      |   25
 plotly/validators/streamtube/starts/_x.py                                            |   11
 plotly/validators/streamtube/starts/_xsrc.py                                         |   11
 plotly/validators/streamtube/starts/_y.py                                            |   11
 plotly/validators/streamtube/starts/_ysrc.py                                         |   11
 plotly/validators/streamtube/starts/_z.py                                            |   11
 plotly/validators/streamtube/starts/_zsrc.py                                         |   11
 plotly/validators/streamtube/stream/__init__.py                                      |   12
 plotly/validators/streamtube/stream/_maxpoints.py                                    |   15
 plotly/validators/streamtube/stream/_token.py                                        |   13
 plotly/validators/sunburst/__init__.py                                               |  109
 plotly/validators/sunburst/_branchvalues.py                                          |   12
 plotly/validators/sunburst/_count.py                                                 |   12
 plotly/validators/sunburst/_customdata.py                                            |   11
 plotly/validators/sunburst/_customdatasrc.py                                         |   11
 plotly/validators/sunburst/_domain.py                                                |   29
 plotly/validators/sunburst/_hoverinfo.py                                             |   26
 plotly/validators/sunburst/_hoverinfosrc.py                                          |   11
 plotly/validators/sunburst/_hoverlabel.py                                            |   51
 plotly/validators/sunburst/_hovertemplate.py                                         |   12
 plotly/validators/sunburst/_hovertemplatesrc.py                                      |   13
 plotly/validators/sunburst/_hovertext.py                                             |   12
 plotly/validators/sunburst/_hovertextsrc.py                                          |   11
 plotly/validators/sunburst/_ids.py                                                   |   12
 plotly/validators/sunburst/_idssrc.py                                                |   11
 plotly/validators/sunburst/_insidetextfont.py                                        |   46
 plotly/validators/sunburst/_insidetextorientation.py                                 |   14
 plotly/validators/sunburst/_labels.py                                                |   11
 plotly/validators/sunburst/_labelssrc.py                                             |   11
 plotly/validators/sunburst/_leaf.py                                                  |   20
 plotly/validators/sunburst/_legend.py                                                |   12
 plotly/validators/sunburst/_legendgrouptitle.py                                      |   22
 plotly/validators/sunburst/_legendrank.py                                            |   11
 plotly/validators/sunburst/_legendwidth.py                                           |   12
 plotly/validators/sunburst/_level.py                                                 |   12
 plotly/validators/sunburst/_marker.py                                                |  105
 plotly/validators/sunburst/_maxdepth.py                                              |   11
 plotly/validators/sunburst/_meta.py                                                  |   12
 plotly/validators/sunburst/_metasrc.py                                               |   11
 plotly/validators/sunburst/_name.py                                                  |   11
 plotly/validators/sunburst/_opacity.py                                               |   13
 plotly/validators/sunburst/_outsidetextfont.py                                       |   46
 plotly/validators/sunburst/_parents.py                                               |   11
 plotly/validators/sunburst/_parentssrc.py                                            |   11
 plotly/validators/sunburst/_root.py                                                  |   21
 plotly/validators/sunburst/_rotation.py                                              |   11
 plotly/validators/sunburst/_sort.py                                                  |   11
 plotly/validators/sunburst/_stream.py                                                |   25
 plotly/validators/sunburst/_text.py                                                  |   11
 plotly/validators/sunburst/_textfont.py                                              |   46
 plotly/validators/sunburst/_textinfo.py                                              |   24
 plotly/validators/sunburst/_textsrc.py                                               |   11
 plotly/validators/sunburst/_texttemplate.py                                          |   12
 plotly/validators/sunburst/_texttemplatesrc.py                                       |   11
 plotly/validators/sunburst/_uid.py                                                   |   12
 plotly/validators/sunburst/_uirevision.py                                            |   11
 plotly/validators/sunburst/_values.py                                                |   11
 plotly/validators/sunburst/_valuessrc.py                                             |   11
 plotly/validators/sunburst/_visible.py                                               |   12
 plotly/validators/sunburst/domain/__init__.py                                        |   21
 plotly/validators/sunburst/domain/_column.py                                         |   12
 plotly/validators/sunburst/domain/_row.py                                            |   12
 plotly/validators/sunburst/domain/_x.py                                              |   18
 plotly/validators/sunburst/domain/_y.py                                              |   18
 plotly/validators/sunburst/hoverlabel/__init__.py                                    |   31
 plotly/validators/sunburst/hoverlabel/_align.py                                      |   15
 plotly/validators/sunburst/hoverlabel/_alignsrc.py                                   |   13
 plotly/validators/sunburst/hoverlabel/_bgcolor.py                                    |   14
 plotly/validators/sunburst/hoverlabel/_bgcolorsrc.py                                 |   13
 plotly/validators/sunburst/hoverlabel/_bordercolor.py                                |   14
 plotly/validators/sunburst/hoverlabel/_bordercolorsrc.py                             |   13
 plotly/validators/sunburst/hoverlabel/_font.py                                       |   46
 plotly/validators/sunburst/hoverlabel/_namelength.py                                 |   15
 plotly/validators/sunburst/hoverlabel/_namelengthsrc.py                              |   13
 plotly/validators/sunburst/hoverlabel/font/__init__.py                               |   25
 plotly/validators/sunburst/hoverlabel/font/_color.py                                 |   14
 plotly/validators/sunburst/hoverlabel/font/_colorsrc.py                              |   13
 plotly/validators/sunburst/hoverlabel/font/_family.py                                |   16
 plotly/validators/sunburst/hoverlabel/font/_familysrc.py                             |   13
 plotly/validators/sunburst/hoverlabel/font/_size.py                                  |   15
 plotly/validators/sunburst/hoverlabel/font/_sizesrc.py                               |   13
 plotly/validators/sunburst/insidetextfont/__init__.py                                |   25
 plotly/validators/sunburst/insidetextfont/_color.py                                  |   14
 plotly/validators/sunburst/insidetextfont/_colorsrc.py                               |   13
 plotly/validators/sunburst/insidetextfont/_family.py                                 |   16
 plotly/validators/sunburst/insidetextfont/_familysrc.py                              |   13
 plotly/validators/sunburst/insidetextfont/_size.py                                   |   15
 plotly/validators/sunburst/insidetextfont/_sizesrc.py                                |   13
 plotly/validators/sunburst/leaf/__init__.py                                          |   11
 plotly/validators/sunburst/leaf/_opacity.py                                          |   13
 plotly/validators/sunburst/legendgrouptitle/__init__.py                              |   12
 plotly/validators/sunburst/legendgrouptitle/_font.py                                 |   39
 plotly/validators/sunburst/legendgrouptitle/_text.py                                 |   13
 plotly/validators/sunburst/legendgrouptitle/font/__init__.py                         |   15
 plotly/validators/sunburst/legendgrouptitle/font/_color.py                           |   16
 plotly/validators/sunburst/legendgrouptitle/font/_family.py                          |   18
 plotly/validators/sunburst/legendgrouptitle/font/_size.py                            |   14
 plotly/validators/sunburst/marker/__init__.py                                        |   41
 plotly/validators/sunburst/marker/_autocolorscale.py                                 |   14
 plotly/validators/sunburst/marker/_cauto.py                                          |   12
 plotly/validators/sunburst/marker/_cmax.py                                           |   12
 plotly/validators/sunburst/marker/_cmid.py                                           |   12
 plotly/validators/sunburst/marker/_cmin.py                                           |   12
 plotly/validators/sunburst/marker/_coloraxis.py                                      |   15
 plotly/validators/sunburst/marker/_colorbar.py                                       |  295
 plotly/validators/sunburst/marker/_colors.py                                         |   11
 plotly/validators/sunburst/marker/_colorscale.py                                     |   14
 plotly/validators/sunburst/marker/_colorssrc.py                                      |   13
 plotly/validators/sunburst/marker/_line.py                                           |   28
 plotly/validators/sunburst/marker/_pattern.py                                        |   64
 plotly/validators/sunburst/marker/_reversescale.py                                   |   13
 plotly/validators/sunburst/marker/_showscale.py                                      |   13
 plotly/validators/sunburst/marker/colorbar/__init__.py                               |  111
 plotly/validators/sunburst/marker/colorbar/_bgcolor.py                               |   13
 plotly/validators/sunburst/marker/colorbar/_bordercolor.py                           |   16
 plotly/validators/sunburst/marker/colorbar/_borderwidth.py                           |   17
 plotly/validators/sunburst/marker/colorbar/_dtick.py                                 |   14
 plotly/validators/sunburst/marker/colorbar/_exponentformat.py                        |   17
 plotly/validators/sunburst/marker/colorbar/_labelalias.py                            |   13
 plotly/validators/sunburst/marker/colorbar/_len.py                                   |   14
 plotly/validators/sunburst/marker/colorbar/_lenmode.py                               |   14
 plotly/validators/sunburst/marker/colorbar/_minexponent.py                           |   17
 plotly/validators/sunburst/marker/colorbar/_nticks.py                                |   14
 plotly/validators/sunburst/marker/colorbar/_orientation.py                           |   17
 plotly/validators/sunburst/marker/colorbar/_outlinecolor.py                          |   16
 plotly/validators/sunburst/marker/colorbar/_outlinewidth.py                          |   17
 plotly/validators/sunburst/marker/colorbar/_separatethousands.py                     |   16
 plotly/validators/sunburst/marker/colorbar/_showexponent.py                          |   17
 plotly/validators/sunburst/marker/colorbar/_showticklabels.py                        |   16
 plotly/validators/sunburst/marker/colorbar/_showtickprefix.py                        |   17
 plotly/validators/sunburst/marker/colorbar/_showticksuffix.py                        |   17
 plotly/validators/sunburst/marker/colorbar/_thickness.py                             |   14
 plotly/validators/sunburst/marker/colorbar/_thicknessmode.py                         |   17
 plotly/validators/sunburst/marker/colorbar/_tick0.py                                 |   14
 plotly/validators/sunburst/marker/colorbar/_tickangle.py                             |   13
 plotly/validators/sunburst/marker/colorbar/_tickcolor.py                             |   13
 plotly/validators/sunburst/marker/colorbar/_tickfont.py                              |   39
 plotly/validators/sunburst/marker/colorbar/_tickformat.py                            |   13
 plotly/validators/sunburst/marker/colorbar/_tickformatstopdefaults.py                |   21
 plotly/validators/sunburst/marker/colorbar/_tickformatstops.py                       |   54
 plotly/validators/sunburst/marker/colorbar/_ticklabeloverflow.py                     |   17
 plotly/validators/sunburst/marker/colorbar/_ticklabelposition.py                     |   31
 plotly/validators/sunburst/marker/colorbar/_ticklabelstep.py                         |   17
 plotly/validators/sunburst/marker/colorbar/_ticklen.py                               |   14
 plotly/validators/sunburst/marker/colorbar/_tickmode.py                              |   15
 plotly/validators/sunburst/marker/colorbar/_tickprefix.py                            |   13
 plotly/validators/sunburst/marker/colorbar/_ticks.py                                 |   14
 plotly/validators/sunburst/marker/colorbar/_ticksuffix.py                            |   13
 plotly/validators/sunburst/marker/colorbar/_ticktext.py                              |   13
 plotly/validators/sunburst/marker/colorbar/_ticktextsrc.py                           |   16
 plotly/validators/sunburst/marker/colorbar/_tickvals.py                              |   13
 plotly/validators/sunburst/marker/colorbar/_tickvalssrc.py                           |   16
 plotly/validators/sunburst/marker/colorbar/_tickwidth.py                             |   14
 plotly/validators/sunburst/marker/colorbar/_title.py                                 |   35
 plotly/validators/sunburst/marker/colorbar/_x.py                                     |   13
 plotly/validators/sunburst/marker/colorbar/_xanchor.py                               |   14
 plotly/validators/sunburst/marker/colorbar/_xpad.py                                  |   14
 plotly/validators/sunburst/marker/colorbar/_xref.py                                  |   14
 plotly/validators/sunburst/marker/colorbar/_y.py                                     |   13
 plotly/validators/sunburst/marker/colorbar/_yanchor.py                               |   14
 plotly/validators/sunburst/marker/colorbar/_ypad.py                                  |   14
 plotly/validators/sunburst/marker/colorbar/_yref.py                                  |   14
 plotly/validators/sunburst/marker/colorbar/tickfont/__init__.py                      |   15
 plotly/validators/sunburst/marker/colorbar/tickfont/_color.py                        |   16
 plotly/validators/sunburst/marker/colorbar/tickfont/_family.py                       |   18
 plotly/validators/sunburst/marker/colorbar/tickfont/_size.py                         |   17
 plotly/validators/sunburst/marker/colorbar/tickformatstop/__init__.py                |   23
 plotly/validators/sunburst/marker/colorbar/tickformatstop/_dtickrange.py             |   23
 plotly/validators/sunburst/marker/colorbar/tickformatstop/_enabled.py                |   16
 plotly/validators/sunburst/marker/colorbar/tickformatstop/_name.py                   |   16
 plotly/validators/sunburst/marker/colorbar/tickformatstop/_templateitemname.py       |   16
 plotly/validators/sunburst/marker/colorbar/tickformatstop/_value.py                  |   16
 plotly/validators/sunburst/marker/colorbar/title/__init__.py                         |   15
 plotly/validators/sunburst/marker/colorbar/title/_font.py                            |   39
 plotly/validators/sunburst/marker/colorbar/title/_side.py                            |   14
 plotly/validators/sunburst/marker/colorbar/title/_text.py                            |   13
 plotly/validators/sunburst/marker/colorbar/title/font/__init__.py                    |   15
 plotly/validators/sunburst/marker/colorbar/title/font/_color.py                      |   16
 plotly/validators/sunburst/marker/colorbar/title/font/_family.py                     |   18
 plotly/validators/sunburst/marker/colorbar/title/font/_size.py                       |   17
 plotly/validators/sunburst/marker/line/__init__.py                                   |   21
 plotly/validators/sunburst/marker/line/_color.py                                     |   14
 plotly/validators/sunburst/marker/line/_colorsrc.py                                  |   13
 plotly/validators/sunburst/marker/line/_width.py                                     |   15
 plotly/validators/sunburst/marker/line/_widthsrc.py                                  |   13
 plotly/validators/sunburst/marker/pattern/__init__.py                                |   37
 plotly/validators/sunburst/marker/pattern/_bgcolor.py                                |   14
 plotly/validators/sunburst/marker/pattern/_bgcolorsrc.py                             |   13
 plotly/validators/sunburst/marker/pattern/_fgcolor.py                                |   14
 plotly/validators/sunburst/marker/pattern/_fgcolorsrc.py                             |   13
 plotly/validators/sunburst/marker/pattern/_fgopacity.py                              |   15
 plotly/validators/sunburst/marker/pattern/_fillmode.py                               |   14
 plotly/validators/sunburst/marker/pattern/_shape.py                                  |   15
 plotly/validators/sunburst/marker/pattern/_shapesrc.py                               |   13
 plotly/validators/sunburst/marker/pattern/_size.py                                   |   15
 plotly/validators/sunburst/marker/pattern/_sizesrc.py                                |   13
 plotly/validators/sunburst/marker/pattern/_solidity.py                               |   16
 plotly/validators/sunburst/marker/pattern/_soliditysrc.py                            |   13
 plotly/validators/sunburst/outsidetextfont/__init__.py                               |   25
 plotly/validators/sunburst/outsidetextfont/_color.py                                 |   14
 plotly/validators/sunburst/outsidetextfont/_colorsrc.py                              |   13
 plotly/validators/sunburst/outsidetextfont/_family.py                                |   16
 plotly/validators/sunburst/outsidetextfont/_familysrc.py                             |   13
 plotly/validators/sunburst/outsidetextfont/_size.py                                  |   15
 plotly/validators/sunburst/outsidetextfont/_sizesrc.py                               |   13
 plotly/validators/sunburst/root/__init__.py                                          |   11
 plotly/validators/sunburst/root/_color.py                                            |   11
 plotly/validators/sunburst/stream/__init__.py                                        |   12
 plotly/validators/sunburst/stream/_maxpoints.py                                      |   15
 plotly/validators/sunburst/stream/_token.py                                          |   13
 plotly/validators/sunburst/textfont/__init__.py                                      |   25
 plotly/validators/sunburst/textfont/_color.py                                        |   12
 plotly/validators/sunburst/textfont/_colorsrc.py                                     |   13
 plotly/validators/sunburst/textfont/_family.py                                       |   14
 plotly/validators/sunburst/textfont/_familysrc.py                                    |   13
 plotly/validators/sunburst/textfont/_size.py                                         |   13
 plotly/validators/sunburst/textfont/_sizesrc.py                                      |   13
 plotly/validators/surface/__init__.py                                                |  129
 plotly/validators/surface/_autocolorscale.py                                         |   12
 plotly/validators/surface/_cauto.py                                                  |   12
 plotly/validators/surface/_cmax.py                                                   |   12
 plotly/validators/surface/_cmid.py                                                   |   12
 plotly/validators/surface/_cmin.py                                                   |   12
 plotly/validators/surface/_coloraxis.py                                              |   13
 plotly/validators/surface/_colorbar.py                                               |  294
 plotly/validators/surface/_colorscale.py                                             |   12
 plotly/validators/surface/_connectgaps.py                                            |   11
 plotly/validators/surface/_contours.py                                               |   25
 plotly/validators/surface/_customdata.py                                             |   11
 plotly/validators/surface/_customdatasrc.py                                          |   11
 plotly/validators/surface/_hidesurface.py                                            |   11
 plotly/validators/surface/_hoverinfo.py                                              |   14
 plotly/validators/surface/_hoverinfosrc.py                                           |   11
 plotly/validators/surface/_hoverlabel.py                                             |   51
 plotly/validators/surface/_hovertemplate.py                                          |   12
 plotly/validators/surface/_hovertemplatesrc.py                                       |   11
 plotly/validators/surface/_hovertext.py                                              |   12
 plotly/validators/surface/_hovertextsrc.py                                           |   11
 plotly/validators/surface/_ids.py                                                    |   11
 plotly/validators/surface/_idssrc.py                                                 |   11
 plotly/validators/surface/_legend.py                                                 |   12
 plotly/validators/surface/_legendgroup.py                                            |   11
 plotly/validators/surface/_legendgrouptitle.py                                       |   20
 plotly/validators/surface/_legendrank.py                                             |   11
 plotly/validators/surface/_legendwidth.py                                            |   12
 plotly/validators/surface/_lighting.py                                               |   34
 plotly/validators/surface/_lightposition.py                                          |   25
 plotly/validators/surface/_meta.py                                                   |   12
 plotly/validators/surface/_metasrc.py                                                |   11
 plotly/validators/surface/_name.py                                                   |   11
 plotly/validators/surface/_opacity.py                                                |   13
 plotly/validators/surface/_opacityscale.py                                           |   11
 plotly/validators/surface/_reversescale.py                                           |   11
 plotly/validators/surface/_scene.py                                                  |   12
 plotly/validators/surface/_showlegend.py                                             |   11
 plotly/validators/surface/_showscale.py                                              |   11
 plotly/validators/surface/_stream.py                                                 |   25
 plotly/validators/surface/_surfacecolor.py                                           |   11
 plotly/validators/surface/_surfacecolorsrc.py                                        |   11
 plotly/validators/surface/_text.py                                                   |   12
 plotly/validators/surface/_textsrc.py                                                |   11
 plotly/validators/surface/_uid.py                                                    |   11
 plotly/validators/surface/_uirevision.py                                             |   11
 plotly/validators/surface/_visible.py                                                |   12
 plotly/validators/surface/_x.py                                                      |   11
 plotly/validators/surface/_xcalendar.py                                              |   32
 plotly/validators/surface/_xhoverformat.py                                           |   11
 plotly/validators/surface/_xsrc.py                                                   |   11
 plotly/validators/surface/_y.py                                                      |   11
 plotly/validators/surface/_ycalendar.py                                              |   32
 plotly/validators/surface/_yhoverformat.py                                           |   11
 plotly/validators/surface/_ysrc.py                                                   |   11
 plotly/validators/surface/_z.py                                                      |   11
 plotly/validators/surface/_zcalendar.py                                              |   32
 plotly/validators/surface/_zhoverformat.py                                           |   11
 plotly/validators/surface/_zsrc.py                                                   |   11
 plotly/validators/surface/colorbar/__init__.py                                       |  111
 plotly/validators/surface/colorbar/_bgcolor.py                                       |   11
 plotly/validators/surface/colorbar/_bordercolor.py                                   |   13
 plotly/validators/surface/colorbar/_borderwidth.py                                   |   14
 plotly/validators/surface/colorbar/_dtick.py                                         |   12
 plotly/validators/surface/colorbar/_exponentformat.py                                |   14
 plotly/validators/surface/colorbar/_labelalias.py                                    |   13
 plotly/validators/surface/colorbar/_len.py                                           |   12
 plotly/validators/surface/colorbar/_lenmode.py                                       |   12
 plotly/validators/surface/colorbar/_minexponent.py                                   |   14
 plotly/validators/surface/colorbar/_nticks.py                                        |   12
 plotly/validators/surface/colorbar/_orientation.py                                   |   14
 plotly/validators/surface/colorbar/_outlinecolor.py                                  |   13
 plotly/validators/surface/colorbar/_outlinewidth.py                                  |   14
 plotly/validators/surface/colorbar/_separatethousands.py                             |   13
 plotly/validators/surface/colorbar/_showexponent.py                                  |   14
 plotly/validators/surface/colorbar/_showticklabels.py                                |   13
 plotly/validators/surface/colorbar/_showtickprefix.py                                |   14
 plotly/validators/surface/colorbar/_showticksuffix.py                                |   14
 plotly/validators/surface/colorbar/_thickness.py                                     |   14
 plotly/validators/surface/colorbar/_thicknessmode.py                                 |   14
 plotly/validators/surface/colorbar/_tick0.py                                         |   12
 plotly/validators/surface/colorbar/_tickangle.py                                     |   13
 plotly/validators/surface/colorbar/_tickcolor.py                                     |   13
 plotly/validators/surface/colorbar/_tickfont.py                                      |   39
 plotly/validators/surface/colorbar/_tickformat.py                                    |   13
 plotly/validators/surface/colorbar/_tickformatstopdefaults.py                        |   21
 plotly/validators/surface/colorbar/_tickformatstops.py                               |   51
 plotly/validators/surface/colorbar/_ticklabeloverflow.py                             |   14
 plotly/validators/surface/colorbar/_ticklabelposition.py                             |   28
 plotly/validators/surface/colorbar/_ticklabelstep.py                                 |   14
 plotly/validators/surface/colorbar/_ticklen.py                                       |   12
 plotly/validators/surface/colorbar/_tickmode.py                                      |   15
 plotly/validators/surface/colorbar/_tickprefix.py                                    |   13
 plotly/validators/surface/colorbar/_ticks.py                                         |   12
 plotly/validators/surface/colorbar/_ticksuffix.py                                    |   13
 plotly/validators/surface/colorbar/_ticktext.py                                      |   13
 plotly/validators/surface/colorbar/_ticktextsrc.py                                   |   13
 plotly/validators/surface/colorbar/_tickvals.py                                      |   13
 plotly/validators/surface/colorbar/_tickvalssrc.py                                   |   13
 plotly/validators/surface/colorbar/_tickwidth.py                                     |   14
 plotly/validators/surface/colorbar/_title.py                                         |   33
 plotly/validators/surface/colorbar/_x.py                                             |   11
 plotly/validators/surface/colorbar/_xanchor.py                                       |   12
 plotly/validators/surface/colorbar/_xpad.py                                          |   12
 plotly/validators/surface/colorbar/_xref.py                                          |   12
 plotly/validators/surface/colorbar/_y.py                                             |   11
 plotly/validators/surface/colorbar/_yanchor.py                                       |   12
 plotly/validators/surface/colorbar/_ypad.py                                          |   12
 plotly/validators/surface/colorbar/_yref.py                                          |   12
 plotly/validators/surface/colorbar/tickfont/__init__.py                              |   15
 plotly/validators/surface/colorbar/tickfont/_color.py                                |   13
 plotly/validators/surface/colorbar/tickfont/_family.py                               |   15
 plotly/validators/surface/colorbar/tickfont/_size.py                                 |   14
 plotly/validators/surface/colorbar/tickformatstop/__init__.py                        |   23
 plotly/validators/surface/colorbar/tickformatstop/_dtickrange.py                     |   23
 plotly/validators/surface/colorbar/tickformatstop/_enabled.py                        |   16
 plotly/validators/surface/colorbar/tickformatstop/_name.py                           |   16
 plotly/validators/surface/colorbar/tickformatstop/_templateitemname.py               |   16
 plotly/validators/surface/colorbar/tickformatstop/_value.py                          |   16
 plotly/validators/surface/colorbar/title/__init__.py                                 |   15
 plotly/validators/surface/colorbar/title/_font.py                                    |   39
 plotly/validators/surface/colorbar/title/_side.py                                    |   14
 plotly/validators/surface/colorbar/title/_text.py                                    |   13
 plotly/validators/surface/colorbar/title/font/__init__.py                            |   15
 plotly/validators/surface/colorbar/title/font/_color.py                              |   13
 plotly/validators/surface/colorbar/title/font/_family.py                             |   15
 plotly/validators/surface/colorbar/title/font/_size.py                               |   14
 plotly/validators/surface/contours/__init__.py                                       |   13
 plotly/validators/surface/contours/_x.py                                             |   49
 plotly/validators/surface/contours/_y.py                                             |   49
 plotly/validators/surface/contours/_z.py                                             |   49
 plotly/validators/surface/contours/x/__init__.py                                     |   35
 plotly/validators/surface/contours/x/_color.py                                       |   11
 plotly/validators/surface/contours/x/_end.py                                         |   11
 plotly/validators/surface/contours/x/_highlight.py                                   |   13
 plotly/validators/surface/contours/x/_highlightcolor.py                              |   13
 plotly/validators/surface/contours/x/_highlightwidth.py                              |   15
 plotly/validators/surface/contours/x/_project.py                                     |   36
 plotly/validators/surface/contours/x/_show.py                                        |   11
 plotly/validators/surface/contours/x/_size.py                                        |   12
 plotly/validators/surface/contours/x/_start.py                                       |   11
 plotly/validators/surface/contours/x/_usecolormap.py                                 |   13
 plotly/validators/surface/contours/x/_width.py                                       |   13
 plotly/validators/surface/contours/x/project/__init__.py                             |   13
 plotly/validators/surface/contours/x/project/_x.py                                   |   13
 plotly/validators/surface/contours/x/project/_y.py                                   |   13
 plotly/validators/surface/contours/x/project/_z.py                                   |   13
 plotly/validators/surface/contours/y/__init__.py                                     |   35
 plotly/validators/surface/contours/y/_color.py                                       |   11
 plotly/validators/surface/contours/y/_end.py                                         |   11
 plotly/validators/surface/contours/y/_highlight.py                                   |   13
 plotly/validators/surface/contours/y/_highlightcolor.py                              |   13
 plotly/validators/surface/contours/y/_highlightwidth.py                              |   15
 plotly/validators/surface/contours/y/_project.py                                     |   36
 plotly/validators/surface/contours/y/_show.py                                        |   11
 plotly/validators/surface/contours/y/_size.py                                        |   12
 plotly/validators/surface/contours/y/_start.py                                       |   11
 plotly/validators/surface/contours/y/_usecolormap.py                                 |   13
 plotly/validators/surface/contours/y/_width.py                                       |   13
 plotly/validators/surface/contours/y/project/__init__.py                             |   13
 plotly/validators/surface/contours/y/project/_x.py                                   |   13
 plotly/validators/surface/contours/y/project/_y.py                                   |   13
 plotly/validators/surface/contours/y/project/_z.py                                   |   13
 plotly/validators/surface/contours/z/__init__.py                                     |   35
 plotly/validators/surface/contours/z/_color.py                                       |   11
 plotly/validators/surface/contours/z/_end.py                                         |   11
 plotly/validators/surface/contours/z/_highlight.py                                   |   13
 plotly/validators/surface/contours/z/_highlightcolor.py                              |   13
 plotly/validators/surface/contours/z/_highlightwidth.py                              |   15
 plotly/validators/surface/contours/z/_project.py                                     |   36
 plotly/validators/surface/contours/z/_show.py                                        |   11
 plotly/validators/surface/contours/z/_size.py                                        |   12
 plotly/validators/surface/contours/z/_start.py                                       |   11
 plotly/validators/surface/contours/z/_usecolormap.py                                 |   13
 plotly/validators/surface/contours/z/_width.py                                       |   13
 plotly/validators/surface/contours/z/project/__init__.py                             |   13
 plotly/validators/surface/contours/z/project/_x.py                                   |   13
 plotly/validators/surface/contours/z/project/_y.py                                   |   13
 plotly/validators/surface/contours/z/project/_z.py                                   |   13
 plotly/validators/surface/hoverlabel/__init__.py                                     |   31
 plotly/validators/surface/hoverlabel/_align.py                                       |   13
 plotly/validators/surface/hoverlabel/_alignsrc.py                                    |   13
 plotly/validators/surface/hoverlabel/_bgcolor.py                                     |   14
 plotly/validators/surface/hoverlabel/_bgcolorsrc.py                                  |   13
 plotly/validators/surface/hoverlabel/_bordercolor.py                                 |   14
 plotly/validators/surface/hoverlabel/_bordercolorsrc.py                              |   13
 plotly/validators/surface/hoverlabel/_font.py                                        |   46
 plotly/validators/surface/hoverlabel/_namelength.py                                  |   15
 plotly/validators/surface/hoverlabel/_namelengthsrc.py                               |   13
 plotly/validators/surface/hoverlabel/font/__init__.py                                |   25
 plotly/validators/surface/hoverlabel/font/_color.py                                  |   14
 plotly/validators/surface/hoverlabel/font/_colorsrc.py                               |   13
 plotly/validators/surface/hoverlabel/font/_family.py                                 |   16
 plotly/validators/surface/hoverlabel/font/_familysrc.py                              |   13
 plotly/validators/surface/hoverlabel/font/_size.py                                   |   15
 plotly/validators/surface/hoverlabel/font/_sizesrc.py                                |   13
 plotly/validators/surface/legendgrouptitle/__init__.py                               |   12
 plotly/validators/surface/legendgrouptitle/_font.py                                  |   39
 plotly/validators/surface/legendgrouptitle/_text.py                                  |   13
 plotly/validators/surface/legendgrouptitle/font/__init__.py                          |   15
 plotly/validators/surface/legendgrouptitle/font/_color.py                            |   13
 plotly/validators/surface/legendgrouptitle/font/_family.py                           |   18
 plotly/validators/surface/legendgrouptitle/font/_size.py                             |   14
 plotly/validators/surface/lighting/__init__.py                                       |   23
 plotly/validators/surface/lighting/_ambient.py                                       |   13
 plotly/validators/surface/lighting/_diffuse.py                                       |   13
 plotly/validators/surface/lighting/_fresnel.py                                       |   13
 plotly/validators/surface/lighting/_roughness.py                                     |   15
 plotly/validators/surface/lighting/_specular.py                                      |   15
 plotly/validators/surface/lightposition/__init__.py                                  |   13
 plotly/validators/surface/lightposition/_x.py                                        |   13
 plotly/validators/surface/lightposition/_y.py                                        |   13
 plotly/validators/surface/lightposition/_z.py                                        |   13
 plotly/validators/surface/stream/__init__.py                                         |   12
 plotly/validators/surface/stream/_maxpoints.py                                       |   13
 plotly/validators/surface/stream/_token.py                                           |   13
 plotly/validators/table/__init__.py                                                  |   63
 plotly/validators/table/_cells.py                                                    |   65
 plotly/validators/table/_columnorder.py                                              |   11
 plotly/validators/table/_columnordersrc.py                                           |   11
 plotly/validators/table/_columnwidth.py                                              |   12
 plotly/validators/table/_columnwidthsrc.py                                           |   11
 plotly/validators/table/_customdata.py                                               |   11
 plotly/validators/table/_customdatasrc.py                                            |   11
 plotly/validators/table/_domain.py                                                   |   28
 plotly/validators/table/_header.py                                                   |   65
 plotly/validators/table/_hoverinfo.py                                                |   14
 plotly/validators/table/_hoverinfosrc.py                                             |   11
 plotly/validators/table/_hoverlabel.py                                               |   51
 plotly/validators/table/_ids.py                                                      |   11
 plotly/validators/table/_idssrc.py                                                   |   11
 plotly/validators/table/_legend.py                                                   |   12
 plotly/validators/table/_legendgrouptitle.py                                         |   20
 plotly/validators/table/_legendrank.py                                               |   11
 plotly/validators/table/_legendwidth.py                                              |   12
 plotly/validators/table/_meta.py                                                     |   12
 plotly/validators/table/_metasrc.py                                                  |   11
 plotly/validators/table/_name.py                                                     |   11
 plotly/validators/table/_stream.py                                                   |   25
 plotly/validators/table/_uid.py                                                      |   11
 plotly/validators/table/_uirevision.py                                               |   11
 plotly/validators/table/_visible.py                                                  |   12
 plotly/validators/table/cells/__init__.py                                            |   41
 plotly/validators/table/cells/_align.py                                              |   13
 plotly/validators/table/cells/_alignsrc.py                                           |   11
 plotly/validators/table/cells/_fill.py                                               |   23
 plotly/validators/table/cells/_font.py                                               |   46
 plotly/validators/table/cells/_format.py                                             |   11
 plotly/validators/table/cells/_formatsrc.py                                          |   11
 plotly/validators/table/cells/_height.py                                             |   11
 plotly/validators/table/cells/_line.py                                               |   26
 plotly/validators/table/cells/_prefix.py                                             |   12
 plotly/validators/table/cells/_prefixsrc.py                                          |   11
 plotly/validators/table/cells/_suffix.py                                             |   12
 plotly/validators/table/cells/_suffixsrc.py                                          |   11
 plotly/validators/table/cells/_values.py                                             |   11
 plotly/validators/table/cells/_valuessrc.py                                          |   11
 plotly/validators/table/cells/fill/__init__.py                                       |   12
 plotly/validators/table/cells/fill/_color.py                                         |   12
 plotly/validators/table/cells/fill/_colorsrc.py                                      |   13
 plotly/validators/table/cells/font/__init__.py                                       |   25
 plotly/validators/table/cells/font/_color.py                                         |   12
 plotly/validators/table/cells/font/_colorsrc.py                                      |   13
 plotly/validators/table/cells/font/_family.py                                        |   14
 plotly/validators/table/cells/font/_familysrc.py                                     |   13
 plotly/validators/table/cells/font/_size.py                                          |   13
 plotly/validators/table/cells/font/_sizesrc.py                                       |   11
 plotly/validators/table/cells/line/__init__.py                                       |   21
 plotly/validators/table/cells/line/_color.py                                         |   12
 plotly/validators/table/cells/line/_colorsrc.py                                      |   13
 plotly/validators/table/cells/line/_width.py                                         |   12
 plotly/validators/table/cells/line/_widthsrc.py                                      |   13
 plotly/validators/table/domain/__init__.py                                           |   21
 plotly/validators/table/domain/_column.py                                            |   12
 plotly/validators/table/domain/_row.py                                               |   12
 plotly/validators/table/domain/_x.py                                                 |   18
 plotly/validators/table/domain/_y.py                                                 |   18
 plotly/validators/table/header/__init__.py                                           |   41
 plotly/validators/table/header/_align.py                                             |   13
 plotly/validators/table/header/_alignsrc.py                                          |   11
 plotly/validators/table/header/_fill.py                                              |   23
 plotly/validators/table/header/_font.py                                              |   46
 plotly/validators/table/header/_format.py                                            |   11
 plotly/validators/table/header/_formatsrc.py                                         |   11
 plotly/validators/table/header/_height.py                                            |   11
 plotly/validators/table/header/_line.py                                              |   26
 plotly/validators/table/header/_prefix.py                                            |   12
 plotly/validators/table/header/_prefixsrc.py                                         |   11
 plotly/validators/table/header/_suffix.py                                            |   12
 plotly/validators/table/header/_suffixsrc.py                                         |   11
 plotly/validators/table/header/_values.py                                            |   11
 plotly/validators/table/header/_valuessrc.py                                         |   11
 plotly/validators/table/header/fill/__init__.py                                      |   12
 plotly/validators/table/header/fill/_color.py                                        |   12
 plotly/validators/table/header/fill/_colorsrc.py                                     |   13
 plotly/validators/table/header/font/__init__.py                                      |   25
 plotly/validators/table/header/font/_color.py                                        |   12
 plotly/validators/table/header/font/_colorsrc.py                                     |   13
 plotly/validators/table/header/font/_family.py                                       |   14
 plotly/validators/table/header/font/_familysrc.py                                    |   13
 plotly/validators/table/header/font/_size.py                                         |   13
 plotly/validators/table/header/font/_sizesrc.py                                      |   13
 plotly/validators/table/header/line/__init__.py                                      |   21
 plotly/validators/table/header/line/_color.py                                        |   12
 plotly/validators/table/header/line/_colorsrc.py                                     |   13
 plotly/validators/table/header/line/_width.py                                        |   12
 plotly/validators/table/header/line/_widthsrc.py                                     |   13
 plotly/validators/table/hoverlabel/__init__.py                                       |   31
 plotly/validators/table/hoverlabel/_align.py                                         |   13
 plotly/validators/table/hoverlabel/_alignsrc.py                                      |   13
 plotly/validators/table/hoverlabel/_bgcolor.py                                       |   12
 plotly/validators/table/hoverlabel/_bgcolorsrc.py                                    |   13
 plotly/validators/table/hoverlabel/_bordercolor.py                                   |   14
 plotly/validators/table/hoverlabel/_bordercolorsrc.py                                |   13
 plotly/validators/table/hoverlabel/_font.py                                          |   46
 plotly/validators/table/hoverlabel/_namelength.py                                    |   15
 plotly/validators/table/hoverlabel/_namelengthsrc.py                                 |   13
 plotly/validators/table/hoverlabel/font/__init__.py                                  |   25
 plotly/validators/table/hoverlabel/font/_color.py                                    |   14
 plotly/validators/table/hoverlabel/font/_colorsrc.py                                 |   13
 plotly/validators/table/hoverlabel/font/_family.py                                   |   16
 plotly/validators/table/hoverlabel/font/_familysrc.py                                |   13
 plotly/validators/table/hoverlabel/font/_size.py                                     |   15
 plotly/validators/table/hoverlabel/font/_sizesrc.py                                  |   13
 plotly/validators/table/legendgrouptitle/__init__.py                                 |   12
 plotly/validators/table/legendgrouptitle/_font.py                                    |   39
 plotly/validators/table/legendgrouptitle/_text.py                                    |   13
 plotly/validators/table/legendgrouptitle/font/__init__.py                            |   15
 plotly/validators/table/legendgrouptitle/font/_color.py                              |   13
 plotly/validators/table/legendgrouptitle/font/_family.py                             |   15
 plotly/validators/table/legendgrouptitle/font/_size.py                               |   14
 plotly/validators/table/stream/__init__.py                                           |   12
 plotly/validators/table/stream/_maxpoints.py                                         |   13
 plotly/validators/table/stream/_token.py                                             |   13
 plotly/validators/treemap/__init__.py                                                |  109
 plotly/validators/treemap/_branchvalues.py                                           |   12
 plotly/validators/treemap/_count.py                                                  |   12
 plotly/validators/treemap/_customdata.py                                             |   11
 plotly/validators/treemap/_customdatasrc.py                                          |   11
 plotly/validators/treemap/_domain.py                                                 |   29
 plotly/validators/treemap/_hoverinfo.py                                              |   26
 plotly/validators/treemap/_hoverinfosrc.py                                           |   11
 plotly/validators/treemap/_hoverlabel.py                                             |   51
 plotly/validators/treemap/_hovertemplate.py                                          |   12
 plotly/validators/treemap/_hovertemplatesrc.py                                       |   11
 plotly/validators/treemap/_hovertext.py                                              |   12
 plotly/validators/treemap/_hovertextsrc.py                                           |   11
 plotly/validators/treemap/_ids.py                                                    |   12
 plotly/validators/treemap/_idssrc.py                                                 |   11
 plotly/validators/treemap/_insidetextfont.py                                         |   46
 plotly/validators/treemap/_labels.py                                                 |   11
 plotly/validators/treemap/_labelssrc.py                                              |   11
 plotly/validators/treemap/_legend.py                                                 |   12
 plotly/validators/treemap/_legendgrouptitle.py                                       |   20
 plotly/validators/treemap/_legendrank.py                                             |   11
 plotly/validators/treemap/_legendwidth.py                                            |   12
 plotly/validators/treemap/_level.py                                                  |   12
 plotly/validators/treemap/_marker.py                                                 |  121
 plotly/validators/treemap/_maxdepth.py                                               |   11
 plotly/validators/treemap/_meta.py                                                   |   12
 plotly/validators/treemap/_metasrc.py                                                |   11
 plotly/validators/treemap/_name.py                                                   |   11
 plotly/validators/treemap/_opacity.py                                                |   13
 plotly/validators/treemap/_outsidetextfont.py                                        |   46
 plotly/validators/treemap/_parents.py                                                |   11
 plotly/validators/treemap/_parentssrc.py                                             |   11
 plotly/validators/treemap/_pathbar.py                                                |   32
 plotly/validators/treemap/_root.py                                                   |   21
 plotly/validators/treemap/_sort.py                                                   |   11
 plotly/validators/treemap/_stream.py                                                 |   25
 plotly/validators/treemap/_text.py                                                   |   11
 plotly/validators/treemap/_textfont.py                                               |   46
 plotly/validators/treemap/_textinfo.py                                               |   24
 plotly/validators/treemap/_textposition.py                                           |   25
 plotly/validators/treemap/_textsrc.py                                                |   11
 plotly/validators/treemap/_texttemplate.py                                           |   12
 plotly/validators/treemap/_texttemplatesrc.py                                        |   11
 plotly/validators/treemap/_tiling.py                                                 |   41
 plotly/validators/treemap/_uid.py                                                    |   12
 plotly/validators/treemap/_uirevision.py                                             |   11
 plotly/validators/treemap/_values.py                                                 |   11
 plotly/validators/treemap/_valuessrc.py                                              |   11
 plotly/validators/treemap/_visible.py                                                |   12
 plotly/validators/treemap/domain/__init__.py                                         |   21
 plotly/validators/treemap/domain/_column.py                                          |   12
 plotly/validators/treemap/domain/_row.py                                             |   12
 plotly/validators/treemap/domain/_x.py                                               |   18
 plotly/validators/treemap/domain/_y.py                                               |   18
 plotly/validators/treemap/hoverlabel/__init__.py                                     |   31
 plotly/validators/treemap/hoverlabel/_align.py                                       |   13
 plotly/validators/treemap/hoverlabel/_alignsrc.py                                    |   13
 plotly/validators/treemap/hoverlabel/_bgcolor.py                                     |   14
 plotly/validators/treemap/hoverlabel/_bgcolorsrc.py                                  |   13
 plotly/validators/treemap/hoverlabel/_bordercolor.py                                 |   14
 plotly/validators/treemap/hoverlabel/_bordercolorsrc.py                              |   13
 plotly/validators/treemap/hoverlabel/_font.py                                        |   46
 plotly/validators/treemap/hoverlabel/_namelength.py                                  |   15
 plotly/validators/treemap/hoverlabel/_namelengthsrc.py                               |   13
 plotly/validators/treemap/hoverlabel/font/__init__.py                                |   25
 plotly/validators/treemap/hoverlabel/font/_color.py                                  |   14
 plotly/validators/treemap/hoverlabel/font/_colorsrc.py                               |   13
 plotly/validators/treemap/hoverlabel/font/_family.py                                 |   16
 plotly/validators/treemap/hoverlabel/font/_familysrc.py                              |   13
 plotly/validators/treemap/hoverlabel/font/_size.py                                   |   15
 plotly/validators/treemap/hoverlabel/font/_sizesrc.py                                |   13
 plotly/validators/treemap/insidetextfont/__init__.py                                 |   25
 plotly/validators/treemap/insidetextfont/_color.py                                   |   14
 plotly/validators/treemap/insidetextfont/_colorsrc.py                                |   13
 plotly/validators/treemap/insidetextfont/_family.py                                  |   16
 plotly/validators/treemap/insidetextfont/_familysrc.py                               |   13
 plotly/validators/treemap/insidetextfont/_size.py                                    |   15
 plotly/validators/treemap/insidetextfont/_sizesrc.py                                 |   13
 plotly/validators/treemap/legendgrouptitle/__init__.py                               |   12
 plotly/validators/treemap/legendgrouptitle/_font.py                                  |   39
 plotly/validators/treemap/legendgrouptitle/_text.py                                  |   13
 plotly/validators/treemap/legendgrouptitle/font/__init__.py                          |   15
 plotly/validators/treemap/legendgrouptitle/font/_color.py                            |   13
 plotly/validators/treemap/legendgrouptitle/font/_family.py                           |   18
 plotly/validators/treemap/legendgrouptitle/font/_size.py                             |   14
 plotly/validators/treemap/marker/__init__.py                                         |   47
 plotly/validators/treemap/marker/_autocolorscale.py                                  |   14
 plotly/validators/treemap/marker/_cauto.py                                           |   12
 plotly/validators/treemap/marker/_cmax.py                                            |   12
 plotly/validators/treemap/marker/_cmid.py                                            |   12
 plotly/validators/treemap/marker/_cmin.py                                            |   12
 plotly/validators/treemap/marker/_coloraxis.py                                       |   13
 plotly/validators/treemap/marker/_colorbar.py                                        |  295
 plotly/validators/treemap/marker/_colors.py                                          |   11
 plotly/validators/treemap/marker/_colorscale.py                                      |   14
 plotly/validators/treemap/marker/_colorssrc.py                                       |   11
 plotly/validators/treemap/marker/_cornerradius.py                                    |   14
 plotly/validators/treemap/marker/_depthfade.py                                       |   12
 plotly/validators/treemap/marker/_line.py                                            |   28
 plotly/validators/treemap/marker/_pad.py                                             |   24
 plotly/validators/treemap/marker/_pattern.py                                         |   64
 plotly/validators/treemap/marker/_reversescale.py                                    |   13
 plotly/validators/treemap/marker/_showscale.py                                       |   11
 plotly/validators/treemap/marker/colorbar/__init__.py                                |  111
 plotly/validators/treemap/marker/colorbar/_bgcolor.py                                |   13
 plotly/validators/treemap/marker/colorbar/_bordercolor.py                            |   13
 plotly/validators/treemap/marker/colorbar/_borderwidth.py                            |   14
 plotly/validators/treemap/marker/colorbar/_dtick.py                                  |   14
 plotly/validators/treemap/marker/colorbar/_exponentformat.py                         |   17
 plotly/validators/treemap/marker/colorbar/_labelalias.py                             |   13
 plotly/validators/treemap/marker/colorbar/_len.py                                    |   14
 plotly/validators/treemap/marker/colorbar/_lenmode.py                                |   14
 plotly/validators/treemap/marker/colorbar/_minexponent.py                            |   14
 plotly/validators/treemap/marker/colorbar/_nticks.py                                 |   14
 plotly/validators/treemap/marker/colorbar/_orientation.py                            |   14
 plotly/validators/treemap/marker/colorbar/_outlinecolor.py                           |   16
 plotly/validators/treemap/marker/colorbar/_outlinewidth.py                           |   17
 plotly/validators/treemap/marker/colorbar/_separatethousands.py                      |   16
 plotly/validators/treemap/marker/colorbar/_showexponent.py                           |   17
 plotly/validators/treemap/marker/colorbar/_showticklabels.py                         |   16
 plotly/validators/treemap/marker/colorbar/_showtickprefix.py                         |   17
 plotly/validators/treemap/marker/colorbar/_showticksuffix.py                         |   17
 plotly/validators/treemap/marker/colorbar/_thickness.py                              |   14
 plotly/validators/treemap/marker/colorbar/_thicknessmode.py                          |   17
 plotly/validators/treemap/marker/colorbar/_tick0.py                                  |   14
 plotly/validators/treemap/marker/colorbar/_tickangle.py                              |   13
 plotly/validators/treemap/marker/colorbar/_tickcolor.py                              |   13
 plotly/validators/treemap/marker/colorbar/_tickfont.py                               |   39
 plotly/validators/treemap/marker/colorbar/_tickformat.py                             |   13
 plotly/validators/treemap/marker/colorbar/_tickformatstopdefaults.py                 |   21
 plotly/validators/treemap/marker/colorbar/_tickformatstops.py                        |   54
 plotly/validators/treemap/marker/colorbar/_ticklabeloverflow.py                      |   17
 plotly/validators/treemap/marker/colorbar/_ticklabelposition.py                      |   31
 plotly/validators/treemap/marker/colorbar/_ticklabelstep.py                          |   17
 plotly/validators/treemap/marker/colorbar/_ticklen.py                                |   14
 plotly/validators/treemap/marker/colorbar/_tickmode.py                               |   15
 plotly/validators/treemap/marker/colorbar/_tickprefix.py                             |   13
 plotly/validators/treemap/marker/colorbar/_ticks.py                                  |   14
 plotly/validators/treemap/marker/colorbar/_ticksuffix.py                             |   13
 plotly/validators/treemap/marker/colorbar/_ticktext.py                               |   13
 plotly/validators/treemap/marker/colorbar/_ticktextsrc.py                            |   13
 plotly/validators/treemap/marker/colorbar/_tickvals.py                               |   13
 plotly/validators/treemap/marker/colorbar/_tickvalssrc.py                            |   13
 plotly/validators/treemap/marker/colorbar/_tickwidth.py                              |   14
 plotly/validators/treemap/marker/colorbar/_title.py                                  |   35
 plotly/validators/treemap/marker/colorbar/_x.py                                      |   13
 plotly/validators/treemap/marker/colorbar/_xanchor.py                                |   14
 plotly/validators/treemap/marker/colorbar/_xpad.py                                   |   14
 plotly/validators/treemap/marker/colorbar/_xref.py                                   |   14
 plotly/validators/treemap/marker/colorbar/_y.py                                      |   13
 plotly/validators/treemap/marker/colorbar/_yanchor.py                                |   14
 plotly/validators/treemap/marker/colorbar/_ypad.py                                   |   14
 plotly/validators/treemap/marker/colorbar/_yref.py                                   |   14
 plotly/validators/treemap/marker/colorbar/tickfont/__init__.py                       |   15
 plotly/validators/treemap/marker/colorbar/tickfont/_color.py                         |   16
 plotly/validators/treemap/marker/colorbar/tickfont/_family.py                        |   18
 plotly/validators/treemap/marker/colorbar/tickfont/_size.py                          |   17
 plotly/validators/treemap/marker/colorbar/tickformatstop/__init__.py                 |   23
 plotly/validators/treemap/marker/colorbar/tickformatstop/_dtickrange.py              |   23
 plotly/validators/treemap/marker/colorbar/tickformatstop/_enabled.py                 |   16
 plotly/validators/treemap/marker/colorbar/tickformatstop/_name.py                    |   16
 plotly/validators/treemap/marker/colorbar/tickformatstop/_templateitemname.py        |   16
 plotly/validators/treemap/marker/colorbar/tickformatstop/_value.py                   |   16
 plotly/validators/treemap/marker/colorbar/title/__init__.py                          |   15
 plotly/validators/treemap/marker/colorbar/title/_font.py                             |   39
 plotly/validators/treemap/marker/colorbar/title/_side.py                             |   14
 plotly/validators/treemap/marker/colorbar/title/_text.py                             |   13
 plotly/validators/treemap/marker/colorbar/title/font/__init__.py                     |   15
 plotly/validators/treemap/marker/colorbar/title/font/_color.py                       |   16
 plotly/validators/treemap/marker/colorbar/title/font/_family.py                      |   18
 plotly/validators/treemap/marker/colorbar/title/font/_size.py                        |   17
 plotly/validators/treemap/marker/line/__init__.py                                    |   21
 plotly/validators/treemap/marker/line/_color.py                                      |   14
 plotly/validators/treemap/marker/line/_colorsrc.py                                   |   13
 plotly/validators/treemap/marker/line/_width.py                                      |   15
 plotly/validators/treemap/marker/line/_widthsrc.py                                   |   13
 plotly/validators/treemap/marker/pad/__init__.py                                     |   16
 plotly/validators/treemap/marker/pad/_b.py                                           |   12
 plotly/validators/treemap/marker/pad/_l.py                                           |   12
 plotly/validators/treemap/marker/pad/_r.py                                           |   12
 plotly/validators/treemap/marker/pad/_t.py                                           |   12
 plotly/validators/treemap/marker/pattern/__init__.py                                 |   37
 plotly/validators/treemap/marker/pattern/_bgcolor.py                                 |   14
 plotly/validators/treemap/marker/pattern/_bgcolorsrc.py                              |   13
 plotly/validators/treemap/marker/pattern/_fgcolor.py                                 |   14
 plotly/validators/treemap/marker/pattern/_fgcolorsrc.py                              |   13
 plotly/validators/treemap/marker/pattern/_fgopacity.py                               |   15
 plotly/validators/treemap/marker/pattern/_fillmode.py                                |   14
 plotly/validators/treemap/marker/pattern/_shape.py                                   |   15
 plotly/validators/treemap/marker/pattern/_shapesrc.py                                |   13
 plotly/validators/treemap/marker/pattern/_size.py                                    |   15
 plotly/validators/treemap/marker/pattern/_sizesrc.py                                 |   13
 plotly/validators/treemap/marker/pattern/_solidity.py                                |   16
 plotly/validators/treemap/marker/pattern/_soliditysrc.py                             |   13
 plotly/validators/treemap/outsidetextfont/__init__.py                                |   25
 plotly/validators/treemap/outsidetextfont/_color.py                                  |   14
 plotly/validators/treemap/outsidetextfont/_colorsrc.py                               |   13
 plotly/validators/treemap/outsidetextfont/_family.py                                 |   16
 plotly/validators/treemap/outsidetextfont/_familysrc.py                              |   13
 plotly/validators/treemap/outsidetextfont/_size.py                                   |   15
 plotly/validators/treemap/outsidetextfont/_sizesrc.py                                |   13
 plotly/validators/treemap/pathbar/__init__.py                                        |   23
 plotly/validators/treemap/pathbar/_edgeshape.py                                      |   14
 plotly/validators/treemap/pathbar/_side.py                                           |   12
 plotly/validators/treemap/pathbar/_textfont.py                                       |   46
 plotly/validators/treemap/pathbar/_thickness.py                                      |   14
 plotly/validators/treemap/pathbar/_visible.py                                        |   11
 plotly/validators/treemap/pathbar/textfont/__init__.py                               |   25
 plotly/validators/treemap/pathbar/textfont/_color.py                                 |   14
 plotly/validators/treemap/pathbar/textfont/_colorsrc.py                              |   13
 plotly/validators/treemap/pathbar/textfont/_family.py                                |   16
 plotly/validators/treemap/pathbar/textfont/_familysrc.py                             |   13
 plotly/validators/treemap/pathbar/textfont/_size.py                                  |   15
 plotly/validators/treemap/pathbar/textfont/_sizesrc.py                               |   13
 plotly/validators/treemap/root/__init__.py                                           |   11
 plotly/validators/treemap/root/_color.py                                             |   11
 plotly/validators/treemap/stream/__init__.py                                         |   12
 plotly/validators/treemap/stream/_maxpoints.py                                       |   13
 plotly/validators/treemap/stream/_token.py                                           |   13
 plotly/validators/treemap/textfont/__init__.py                                       |   25
 plotly/validators/treemap/textfont/_color.py                                         |   12
 plotly/validators/treemap/textfont/_colorsrc.py                                      |   13
 plotly/validators/treemap/textfont/_family.py                                        |   14
 plotly/validators/treemap/textfont/_familysrc.py                                     |   13
 plotly/validators/treemap/textfont/_size.py                                          |   13
 plotly/validators/treemap/textfont/_sizesrc.py                                       |   11
 plotly/validators/treemap/tiling/__init__.py                                         |   21
 plotly/validators/treemap/tiling/_flip.py                                            |   12
 plotly/validators/treemap/tiling/_packing.py                                         |   15
 plotly/validators/treemap/tiling/_pad.py                                             |   12
 plotly/validators/treemap/tiling/_squarifyratio.py                                   |   14
 plotly/validators/violin/__init__.py                                                 |  133
 plotly/validators/violin/_alignmentgroup.py                                          |   11
 plotly/validators/violin/_bandwidth.py                                               |   12
 plotly/validators/violin/_box.py                                                     |   28
 plotly/validators/violin/_customdata.py                                              |   11
 plotly/validators/violin/_customdatasrc.py                                           |   11
 plotly/validators/violin/_fillcolor.py                                               |   11
 plotly/validators/violin/_hoverinfo.py                                               |   14
 plotly/validators/violin/_hoverinfosrc.py                                            |   11
 plotly/validators/violin/_hoverlabel.py                                              |   51
 plotly/validators/violin/_hoveron.py                                                 |   13
 plotly/validators/violin/_hovertemplate.py                                           |   12
 plotly/validators/violin/_hovertemplatesrc.py                                        |   11
 plotly/validators/violin/_hovertext.py                                               |   12
 plotly/validators/violin/_hovertextsrc.py                                            |   11
 plotly/validators/violin/_ids.py                                                     |   11
 plotly/validators/violin/_idssrc.py                                                  |   11
 plotly/validators/violin/_jitter.py                                                  |   13
 plotly/validators/violin/_legend.py                                                  |   12
 plotly/validators/violin/_legendgroup.py                                             |   11
 plotly/validators/violin/_legendgrouptitle.py                                        |   20
 plotly/validators/violin/_legendrank.py                                              |   11
 plotly/validators/violin/_legendwidth.py                                             |   12
 plotly/validators/violin/_line.py                                                    |   21
 plotly/validators/violin/_marker.py                                                  |   40
 plotly/validators/violin/_meanline.py                                                |   27
 plotly/validators/violin/_meta.py                                                    |   12
 plotly/validators/violin/_metasrc.py                                                 |   11
 plotly/validators/violin/_name.py                                                    |   11
 plotly/validators/violin/_offsetgroup.py                                             |   11
 plotly/validators/violin/_opacity.py                                                 |   13
 plotly/validators/violin/_orientation.py                                             |   12
 plotly/validators/violin/_pointpos.py                                                |   13
 plotly/validators/violin/_points.py                                                  |   14
 plotly/validators/violin/_quartilemethod.py                                          |   12
 plotly/validators/violin/_scalegroup.py                                              |   11
 plotly/validators/violin/_scalemode.py                                               |   12
 plotly/validators/violin/_selected.py                                                |   20
 plotly/validators/violin/_selectedpoints.py                                          |   11
 plotly/validators/violin/_showlegend.py                                              |   11
 plotly/validators/violin/_side.py                                                    |   12
 plotly/validators/violin/_span.py                                                    |   18
 plotly/validators/violin/_spanmode.py                                                |   12
 plotly/validators/violin/_stream.py                                                  |   25
 plotly/validators/violin/_text.py                                                    |   12
 plotly/validators/violin/_textsrc.py                                                 |   11
 plotly/validators/violin/_uid.py                                                     |   11
 plotly/validators/violin/_uirevision.py                                              |   11
 plotly/validators/violin/_unselected.py                                              |   20
 plotly/validators/violin/_visible.py                                                 |   12
 plotly/validators/violin/_width.py                                                   |   12
 plotly/validators/violin/_x.py                                                       |   11
 plotly/validators/violin/_x0.py                                                      |   11
 plotly/validators/violin/_xaxis.py                                                   |   12
 plotly/validators/violin/_xhoverformat.py                                            |   11
 plotly/validators/violin/_xsrc.py                                                    |   11
 plotly/validators/violin/_y.py                                                       |   11
 plotly/validators/violin/_y0.py                                                      |   11
 plotly/validators/violin/_yaxis.py                                                   |   12
 plotly/validators/violin/_yhoverformat.py                                            |   11
 plotly/validators/violin/_ysrc.py                                                    |   11
 plotly/validators/violin/box/__init__.py                                             |   21
 plotly/validators/violin/box/_fillcolor.py                                           |   11
 plotly/validators/violin/box/_line.py                                                |   20
 plotly/validators/violin/box/_visible.py                                             |   11
 plotly/validators/violin/box/_width.py                                               |   13
 plotly/validators/violin/box/line/__init__.py                                        |   12
 plotly/validators/violin/box/line/_color.py                                          |   11
 plotly/validators/violin/box/line/_width.py                                          |   12
 plotly/validators/violin/hoverlabel/__init__.py                                      |   31
 plotly/validators/violin/hoverlabel/_align.py                                        |   13
 plotly/validators/violin/hoverlabel/_alignsrc.py                                     |   13
 plotly/validators/violin/hoverlabel/_bgcolor.py                                      |   14
 plotly/validators/violin/hoverlabel/_bgcolorsrc.py                                   |   13
 plotly/validators/violin/hoverlabel/_bordercolor.py                                  |   14
 plotly/validators/violin/hoverlabel/_bordercolorsrc.py                               |   13
 plotly/validators/violin/hoverlabel/_font.py                                         |   46
 plotly/validators/violin/hoverlabel/_namelength.py                                   |   15
 plotly/validators/violin/hoverlabel/_namelengthsrc.py                                |   13
 plotly/validators/violin/hoverlabel/font/__init__.py                                 |   25
 plotly/validators/violin/hoverlabel/font/_color.py                                   |   14
 plotly/validators/violin/hoverlabel/font/_colorsrc.py                                |   13
 plotly/validators/violin/hoverlabel/font/_family.py                                  |   16
 plotly/validators/violin/hoverlabel/font/_familysrc.py                               |   13
 plotly/validators/violin/hoverlabel/font/_size.py                                    |   15
 plotly/validators/violin/hoverlabel/font/_sizesrc.py                                 |   13
 plotly/validators/violin/legendgrouptitle/__init__.py                                |   12
 plotly/validators/violin/legendgrouptitle/_font.py                                   |   39
 plotly/validators/violin/legendgrouptitle/_text.py                                   |   13
 plotly/validators/violin/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/violin/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/violin/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/violin/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/violin/line/__init__.py                                            |   12
 plotly/validators/violin/line/_color.py                                              |   11
 plotly/validators/violin/line/_width.py                                              |   12
 plotly/validators/violin/marker/__init__.py                                          |   27
 plotly/validators/violin/marker/_angle.py                                            |   12
 plotly/validators/violin/marker/_color.py                                            |   12
 plotly/validators/violin/marker/_line.py                                             |   32
 plotly/validators/violin/marker/_opacity.py                                          |   14
 plotly/validators/violin/marker/_outliercolor.py                                     |   13
 plotly/validators/violin/marker/_size.py                                             |   13
 plotly/validators/violin/marker/_symbol.py                                           |  503
 plotly/validators/violin/marker/line/__init__.py                                     |   21
 plotly/validators/violin/marker/line/_color.py                                       |   12
 plotly/validators/violin/marker/line/_outliercolor.py                                |   13
 plotly/validators/violin/marker/line/_outlierwidth.py                                |   14
 plotly/validators/violin/marker/line/_width.py                                       |   13
 plotly/validators/violin/meanline/__init__.py                                        |   19
 plotly/validators/violin/meanline/_color.py                                          |   11
 plotly/validators/violin/meanline/_visible.py                                        |   11
 plotly/validators/violin/meanline/_width.py                                          |   12
 plotly/validators/violin/selected/__init__.py                                        |   11
 plotly/validators/violin/selected/_marker.py                                         |   22
 plotly/validators/violin/selected/marker/__init__.py                                 |   19
 plotly/validators/violin/selected/marker/_color.py                                   |   13
 plotly/validators/violin/selected/marker/_opacity.py                                 |   15
 plotly/validators/violin/selected/marker/_size.py                                    |   14
 plotly/validators/violin/stream/__init__.py                                          |   12
 plotly/validators/violin/stream/_maxpoints.py                                        |   13
 plotly/validators/violin/stream/_token.py                                            |   13
 plotly/validators/violin/unselected/__init__.py                                      |   11
 plotly/validators/violin/unselected/_marker.py                                       |   25
 plotly/validators/violin/unselected/marker/__init__.py                               |   19
 plotly/validators/violin/unselected/marker/_color.py                                 |   13
 plotly/validators/violin/unselected/marker/_opacity.py                               |   15
 plotly/validators/violin/unselected/marker/_size.py                                  |   14
 plotly/validators/volume/__init__.py                                                 |  135
 plotly/validators/volume/_autocolorscale.py                                          |   12
 plotly/validators/volume/_caps.py                                                    |   25
 plotly/validators/volume/_cauto.py                                                   |   12
 plotly/validators/volume/_cmax.py                                                    |   12
 plotly/validators/volume/_cmid.py                                                    |   12
 plotly/validators/volume/_cmin.py                                                    |   12
 plotly/validators/volume/_coloraxis.py                                               |   13
 plotly/validators/volume/_colorbar.py                                                |  294
 plotly/validators/volume/_colorscale.py                                              |   12
 plotly/validators/volume/_contour.py                                                 |   23
 plotly/validators/volume/_customdata.py                                              |   11
 plotly/validators/volume/_customdatasrc.py                                           |   11
 plotly/validators/volume/_flatshading.py                                             |   11
 plotly/validators/volume/_hoverinfo.py                                               |   14
 plotly/validators/volume/_hoverinfosrc.py                                            |   11
 plotly/validators/volume/_hoverlabel.py                                              |   51
 plotly/validators/volume/_hovertemplate.py                                           |   12
 plotly/validators/volume/_hovertemplatesrc.py                                        |   11
 plotly/validators/volume/_hovertext.py                                               |   12
 plotly/validators/volume/_hovertextsrc.py                                            |   11
 plotly/validators/volume/_ids.py                                                     |   11
 plotly/validators/volume/_idssrc.py                                                  |   11
 plotly/validators/volume/_isomax.py                                                  |   11
 plotly/validators/volume/_isomin.py                                                  |   11
 plotly/validators/volume/_legend.py                                                  |   12
 plotly/validators/volume/_legendgroup.py                                             |   11
 plotly/validators/volume/_legendgrouptitle.py                                        |   20
 plotly/validators/volume/_legendrank.py                                              |   11
 plotly/validators/volume/_legendwidth.py                                             |   12
 plotly/validators/volume/_lighting.py                                                |   40
 plotly/validators/volume/_lightposition.py                                           |   25
 plotly/validators/volume/_meta.py                                                    |   12
 plotly/validators/volume/_metasrc.py                                                 |   11
 plotly/validators/volume/_name.py                                                    |   11
 plotly/validators/volume/_opacity.py                                                 |   13
 plotly/validators/volume/_opacityscale.py                                            |   11
 plotly/validators/volume/_reversescale.py                                            |   11
 plotly/validators/volume/_scene.py                                                   |   12
 plotly/validators/volume/_showlegend.py                                              |   11
 plotly/validators/volume/_showscale.py                                               |   11
 plotly/validators/volume/_slices.py                                                  |   25
 plotly/validators/volume/_spaceframe.py                                              |   27
 plotly/validators/volume/_stream.py                                                  |   25
 plotly/validators/volume/_surface.py                                                 |   42
 plotly/validators/volume/_text.py                                                    |   12
 plotly/validators/volume/_textsrc.py                                                 |   11
 plotly/validators/volume/_uid.py                                                     |   11
 plotly/validators/volume/_uirevision.py                                              |   11
 plotly/validators/volume/_value.py                                                   |   11
 plotly/validators/volume/_valuehoverformat.py                                        |   11
 plotly/validators/volume/_valuesrc.py                                                |   11
 plotly/validators/volume/_visible.py                                                 |   12
 plotly/validators/volume/_x.py                                                       |   11
 plotly/validators/volume/_xhoverformat.py                                            |   11
 plotly/validators/volume/_xsrc.py                                                    |   11
 plotly/validators/volume/_y.py                                                       |   11
 plotly/validators/volume/_yhoverformat.py                                            |   11
 plotly/validators/volume/_ysrc.py                                                    |   11
 plotly/validators/volume/_z.py                                                       |   11
 plotly/validators/volume/_zhoverformat.py                                            |   11
 plotly/validators/volume/_zsrc.py                                                    |   11
 plotly/validators/volume/caps/__init__.py                                            |   13
 plotly/validators/volume/caps/_x.py                                                  |   29
 plotly/validators/volume/caps/_y.py                                                  |   29
 plotly/validators/volume/caps/_z.py                                                  |   29
 plotly/validators/volume/caps/x/__init__.py                                          |   12
 plotly/validators/volume/caps/x/_fill.py                                             |   13
 plotly/validators/volume/caps/x/_show.py                                             |   11
 plotly/validators/volume/caps/y/__init__.py                                          |   12
 plotly/validators/volume/caps/y/_fill.py                                             |   13
 plotly/validators/volume/caps/y/_show.py                                             |   11
 plotly/validators/volume/caps/z/__init__.py                                          |   12
 plotly/validators/volume/caps/z/_fill.py                                             |   13
 plotly/validators/volume/caps/z/_show.py                                             |   11
 plotly/validators/volume/colorbar/__init__.py                                        |  111
 plotly/validators/volume/colorbar/_bgcolor.py                                        |   11
 plotly/validators/volume/colorbar/_bordercolor.py                                    |   13
 plotly/validators/volume/colorbar/_borderwidth.py                                    |   14
 plotly/validators/volume/colorbar/_dtick.py                                          |   12
 plotly/validators/volume/colorbar/_exponentformat.py                                 |   14
 plotly/validators/volume/colorbar/_labelalias.py                                     |   13
 plotly/validators/volume/colorbar/_len.py                                            |   12
 plotly/validators/volume/colorbar/_lenmode.py                                        |   12
 plotly/validators/volume/colorbar/_minexponent.py                                    |   14
 plotly/validators/volume/colorbar/_nticks.py                                         |   12
 plotly/validators/volume/colorbar/_orientation.py                                    |   14
 plotly/validators/volume/colorbar/_outlinecolor.py                                   |   13
 plotly/validators/volume/colorbar/_outlinewidth.py                                   |   14
 plotly/validators/volume/colorbar/_separatethousands.py                              |   13
 plotly/validators/volume/colorbar/_showexponent.py                                   |   14
 plotly/validators/volume/colorbar/_showticklabels.py                                 |   13
 plotly/validators/volume/colorbar/_showtickprefix.py                                 |   14
 plotly/validators/volume/colorbar/_showticksuffix.py                                 |   14
 plotly/validators/volume/colorbar/_thickness.py                                      |   14
 plotly/validators/volume/colorbar/_thicknessmode.py                                  |   14
 plotly/validators/volume/colorbar/_tick0.py                                          |   12
 plotly/validators/volume/colorbar/_tickangle.py                                      |   13
 plotly/validators/volume/colorbar/_tickcolor.py                                      |   13
 plotly/validators/volume/colorbar/_tickfont.py                                       |   37
 plotly/validators/volume/colorbar/_tickformat.py                                     |   13
 plotly/validators/volume/colorbar/_tickformatstopdefaults.py                         |   21
 plotly/validators/volume/colorbar/_tickformatstops.py                                |   51
 plotly/validators/volume/colorbar/_ticklabeloverflow.py                              |   14
 plotly/validators/volume/colorbar/_ticklabelposition.py                              |   28
 plotly/validators/volume/colorbar/_ticklabelstep.py                                  |   14
 plotly/validators/volume/colorbar/_ticklen.py                                        |   12
 plotly/validators/volume/colorbar/_tickmode.py                                       |   13
 plotly/validators/volume/colorbar/_tickprefix.py                                     |   13
 plotly/validators/volume/colorbar/_ticks.py                                          |   12
 plotly/validators/volume/colorbar/_ticksuffix.py                                     |   13
 plotly/validators/volume/colorbar/_ticktext.py                                       |   11
 plotly/validators/volume/colorbar/_ticktextsrc.py                                    |   13
 plotly/validators/volume/colorbar/_tickvals.py                                       |   11
 plotly/validators/volume/colorbar/_tickvalssrc.py                                    |   13
 plotly/validators/volume/colorbar/_tickwidth.py                                      |   14
 plotly/validators/volume/colorbar/_title.py                                          |   33
 plotly/validators/volume/colorbar/_x.py                                              |   11
 plotly/validators/volume/colorbar/_xanchor.py                                        |   12
 plotly/validators/volume/colorbar/_xpad.py                                           |   12
 plotly/validators/volume/colorbar/_xref.py                                           |   12
 plotly/validators/volume/colorbar/_y.py                                              |   11
 plotly/validators/volume/colorbar/_yanchor.py                                        |   12
 plotly/validators/volume/colorbar/_ypad.py                                           |   12
 plotly/validators/volume/colorbar/_yref.py                                           |   12
 plotly/validators/volume/colorbar/tickfont/__init__.py                               |   15
 plotly/validators/volume/colorbar/tickfont/_color.py                                 |   13
 plotly/validators/volume/colorbar/tickfont/_family.py                                |   15
 plotly/validators/volume/colorbar/tickfont/_size.py                                  |   14
 plotly/validators/volume/colorbar/tickformatstop/__init__.py                         |   23
 plotly/validators/volume/colorbar/tickformatstop/_dtickrange.py                      |   23
 plotly/validators/volume/colorbar/tickformatstop/_enabled.py                         |   16
 plotly/validators/volume/colorbar/tickformatstop/_name.py                            |   13
 plotly/validators/volume/colorbar/tickformatstop/_templateitemname.py                |   16
 plotly/validators/volume/colorbar/tickformatstop/_value.py                           |   16
 plotly/validators/volume/colorbar/title/__init__.py                                  |   15
 plotly/validators/volume/colorbar/title/_font.py                                     |   39
 plotly/validators/volume/colorbar/title/_side.py                                     |   14
 plotly/validators/volume/colorbar/title/_text.py                                     |   13
 plotly/validators/volume/colorbar/title/font/__init__.py                             |   15
 plotly/validators/volume/colorbar/title/font/_color.py                               |   13
 plotly/validators/volume/colorbar/title/font/_family.py                              |   15
 plotly/validators/volume/colorbar/title/font/_size.py                                |   14
 plotly/validators/volume/contour/__init__.py                                         |   15
 plotly/validators/volume/contour/_color.py                                           |   11
 plotly/validators/volume/contour/_show.py                                            |   11
 plotly/validators/volume/contour/_width.py                                           |   13
 plotly/validators/volume/hoverlabel/__init__.py                                      |   31
 plotly/validators/volume/hoverlabel/_align.py                                        |   13
 plotly/validators/volume/hoverlabel/_alignsrc.py                                     |   13
 plotly/validators/volume/hoverlabel/_bgcolor.py                                      |   14
 plotly/validators/volume/hoverlabel/_bgcolorsrc.py                                   |   13
 plotly/validators/volume/hoverlabel/_bordercolor.py                                  |   14
 plotly/validators/volume/hoverlabel/_bordercolorsrc.py                               |   13
 plotly/validators/volume/hoverlabel/_font.py                                         |   46
 plotly/validators/volume/hoverlabel/_namelength.py                                   |   15
 plotly/validators/volume/hoverlabel/_namelengthsrc.py                                |   13
 plotly/validators/volume/hoverlabel/font/__init__.py                                 |   25
 plotly/validators/volume/hoverlabel/font/_color.py                                   |   14
 plotly/validators/volume/hoverlabel/font/_colorsrc.py                                |   13
 plotly/validators/volume/hoverlabel/font/_family.py                                  |   16
 plotly/validators/volume/hoverlabel/font/_familysrc.py                               |   13
 plotly/validators/volume/hoverlabel/font/_size.py                                    |   15
 plotly/validators/volume/hoverlabel/font/_sizesrc.py                                 |   13
 plotly/validators/volume/legendgrouptitle/__init__.py                                |   12
 plotly/validators/volume/legendgrouptitle/_font.py                                   |   39
 plotly/validators/volume/legendgrouptitle/_text.py                                   |   13
 plotly/validators/volume/legendgrouptitle/font/__init__.py                           |   15
 plotly/validators/volume/legendgrouptitle/font/_color.py                             |   13
 plotly/validators/volume/legendgrouptitle/font/_family.py                            |   15
 plotly/validators/volume/legendgrouptitle/font/_size.py                              |   14
 plotly/validators/volume/lighting/__init__.py                                        |   27
 plotly/validators/volume/lighting/_ambient.py                                        |   13
 plotly/validators/volume/lighting/_diffuse.py                                        |   13
 plotly/validators/volume/lighting/_facenormalsepsilon.py                             |   15
 plotly/validators/volume/lighting/_fresnel.py                                        |   13
 plotly/validators/volume/lighting/_roughness.py                                      |   15
 plotly/validators/volume/lighting/_specular.py                                       |   13
 plotly/validators/volume/lighting/_vertexnormalsepsilon.py                           |   18
 plotly/validators/volume/lightposition/__init__.py                                   |   13
 plotly/validators/volume/lightposition/_x.py                                         |   13
 plotly/validators/volume/lightposition/_y.py                                         |   13
 plotly/validators/volume/lightposition/_z.py                                         |   13
 plotly/validators/volume/slices/__init__.py                                          |   13
 plotly/validators/volume/slices/_x.py                                                |   34
 plotly/validators/volume/slices/_y.py                                                |   34
 plotly/validators/volume/slices/_z.py                                                |   34
 plotly/validators/volume/slices/x/__init__.py                                        |   21
 plotly/validators/volume/slices/x/_fill.py                                           |   13
 plotly/validators/volume/slices/x/_locations.py                                      |   13
 plotly/validators/volume/slices/x/_locationssrc.py                                   |   13
 plotly/validators/volume/slices/x/_show.py                                           |   11
 plotly/validators/volume/slices/y/__init__.py                                        |   21
 plotly/validators/volume/slices/y/_fill.py                                           |   13
 plotly/validators/volume/slices/y/_locations.py                                      |   13
 plotly/validators/volume/slices/y/_locationssrc.py                                   |   13
 plotly/validators/volume/slices/y/_show.py                                           |   11
 plotly/validators/volume/slices/z/__init__.py                                        |   21
 plotly/validators/volume/slices/z/_fill.py                                           |   13
 plotly/validators/volume/slices/z/_locations.py                                      |   13
 plotly/validators/volume/slices/z/_locationssrc.py                                   |   13
 plotly/validators/volume/slices/z/_show.py                                           |   11
 plotly/validators/volume/spaceframe/__init__.py                                      |   12
 plotly/validators/volume/spaceframe/_fill.py                                         |   13
 plotly/validators/volume/spaceframe/_show.py                                         |   11
 plotly/validators/volume/stream/__init__.py                                          |   12
 plotly/validators/volume/stream/_maxpoints.py                                        |   13
 plotly/validators/volume/stream/_token.py                                            |   13
 plotly/validators/volume/surface/__init__.py                                         |   21
 plotly/validators/volume/surface/_count.py                                           |   12
 plotly/validators/volume/surface/_fill.py                                            |   13
 plotly/validators/volume/surface/_pattern.py                                         |   13
 plotly/validators/volume/surface/_show.py                                            |   11
 plotly/validators/waterfall/__init__.py                                              |  157
 plotly/validators/waterfall/_alignmentgroup.py                                       |   11
 plotly/validators/waterfall/_base.py                                                 |   12
 plotly/validators/waterfall/_cliponaxis.py                                           |   11
 plotly/validators/waterfall/_connector.py                                            |   24
 plotly/validators/waterfall/_constraintext.py                                        |   12
 plotly/validators/waterfall/_customdata.py                                           |   11
 plotly/validators/waterfall/_customdatasrc.py                                        |   11
 plotly/validators/waterfall/_decreasing.py                                           |   20
 plotly/validators/waterfall/_dx.py                                                   |   11
 plotly/validators/waterfall/_dy.py                                                   |   11
 plotly/validators/waterfall/_hoverinfo.py                                            |   16
 plotly/validators/waterfall/_hoverinfosrc.py                                         |   11
 plotly/validators/waterfall/_hoverlabel.py                                           |   51
 plotly/validators/waterfall/_hovertemplate.py                                        |   12
 plotly/validators/waterfall/_hovertemplatesrc.py                                     |   13
 plotly/validators/waterfall/_hovertext.py                                            |   12
 plotly/validators/waterfall/_hovertextsrc.py                                         |   11
 plotly/validators/waterfall/_ids.py                                                  |   11
 plotly/validators/waterfall/_idssrc.py                                               |   11
 plotly/validators/waterfall/_increasing.py                                           |   20
 plotly/validators/waterfall/_insidetextanchor.py                                     |   14
 plotly/validators/waterfall/_insidetextfont.py                                       |   46
 plotly/validators/waterfall/_legend.py                                               |   12
 plotly/validators/waterfall/_legendgroup.py                                          |   11
 plotly/validators/waterfall/_legendgrouptitle.py                                     |   22
 plotly/validators/waterfall/_legendrank.py                                           |   11
 plotly/validators/waterfall/_legendwidth.py                                          |   12
 plotly/validators/waterfall/_measure.py                                              |   11
 plotly/validators/waterfall/_measuresrc.py                                           |   11
 plotly/validators/waterfall/_meta.py                                                 |   12
 plotly/validators/waterfall/_metasrc.py                                              |   11
 plotly/validators/waterfall/_name.py                                                 |   11
 plotly/validators/waterfall/_offset.py                                               |   12
 plotly/validators/waterfall/_offsetgroup.py                                          |   11
 plotly/validators/waterfall/_offsetsrc.py                                            |   11
 plotly/validators/waterfall/_opacity.py                                              |   13
 plotly/validators/waterfall/_orientation.py                                          |   12
 plotly/validators/waterfall/_outsidetextfont.py                                      |   48
 plotly/validators/waterfall/_selectedpoints.py                                       |   11
 plotly/validators/waterfall/_showlegend.py                                           |   11
 plotly/validators/waterfall/_stream.py                                               |   25
 plotly/validators/waterfall/_text.py                                                 |   12
 plotly/validators/waterfall/_textangle.py                                            |   11
 plotly/validators/waterfall/_textfont.py                                             |   46
 plotly/validators/waterfall/_textinfo.py                                             |   14
 plotly/validators/waterfall/_textposition.py                                         |   13
 plotly/validators/waterfall/_textpositionsrc.py                                      |   13
 plotly/validators/waterfall/_textsrc.py                                              |   11
 plotly/validators/waterfall/_texttemplate.py                                         |   12
 plotly/validators/waterfall/_texttemplatesrc.py                                      |   13
 plotly/validators/waterfall/_totals.py                                               |   20
 plotly/validators/waterfall/_uid.py                                                  |   11
 plotly/validators/waterfall/_uirevision.py                                           |   11
 plotly/validators/waterfall/_visible.py                                              |   12
 plotly/validators/waterfall/_width.py                                                |   13
 plotly/validators/waterfall/_widthsrc.py                                             |   11
 plotly/validators/waterfall/_x.py                                                    |   11
 plotly/validators/waterfall/_x0.py                                                   |   11
 plotly/validators/waterfall/_xaxis.py                                                |   12
 plotly/validators/waterfall/_xhoverformat.py                                         |   11
 plotly/validators/waterfall/_xperiod.py                                              |   11
 plotly/validators/waterfall/_xperiod0.py                                             |   11
 plotly/validators/waterfall/_xperiodalignment.py                                     |   14
 plotly/validators/waterfall/_xsrc.py                                                 |   11
 plotly/validators/waterfall/_y.py                                                    |   11
 plotly/validators/waterfall/_y0.py                                                   |   11
 plotly/validators/waterfall/_yaxis.py                                                |   12
 plotly/validators/waterfall/_yhoverformat.py                                         |   11
 plotly/validators/waterfall/_yperiod.py                                              |   11
 plotly/validators/waterfall/_yperiod0.py                                             |   11
 plotly/validators/waterfall/_yperiodalignment.py                                     |   14
 plotly/validators/waterfall/_ysrc.py                                                 |   11
 plotly/validators/waterfall/connector/__init__.py                                    |   15
 plotly/validators/waterfall/connector/_line.py                                       |   25
 plotly/validators/waterfall/connector/_mode.py                                       |   12
 plotly/validators/waterfall/connector/_visible.py                                    |   13
 plotly/validators/waterfall/connector/line/__init__.py                               |   15
 plotly/validators/waterfall/connector/line/_color.py                                 |   13
 plotly/validators/waterfall/connector/line/_dash.py                                  |   16
 plotly/validators/waterfall/connector/line/_width.py                                 |   14
 plotly/validators/waterfall/decreasing/__init__.py                                   |   11
 plotly/validators/waterfall/decreasing/_marker.py                                    |   24
 plotly/validators/waterfall/decreasing/marker/__init__.py                            |   12
 plotly/validators/waterfall/decreasing/marker/_color.py                              |   14
 plotly/validators/waterfall/decreasing/marker/_line.py                               |   22
 plotly/validators/waterfall/decreasing/marker/line/__init__.py                       |   12
 plotly/validators/waterfall/decreasing/marker/line/_color.py                         |   17
 plotly/validators/waterfall/decreasing/marker/line/_width.py                         |   18
 plotly/validators/waterfall/hoverlabel/__init__.py                                   |   31
 plotly/validators/waterfall/hoverlabel/_align.py                                     |   15
 plotly/validators/waterfall/hoverlabel/_alignsrc.py                                  |   13
 plotly/validators/waterfall/hoverlabel/_bgcolor.py                                   |   14
 plotly/validators/waterfall/hoverlabel/_bgcolorsrc.py                                |   13
 plotly/validators/waterfall/hoverlabel/_bordercolor.py                               |   14
 plotly/validators/waterfall/hoverlabel/_bordercolorsrc.py                            |   13
 plotly/validators/waterfall/hoverlabel/_font.py                                      |   48
 plotly/validators/waterfall/hoverlabel/_namelength.py                                |   15
 plotly/validators/waterfall/hoverlabel/_namelengthsrc.py                             |   13
 plotly/validators/waterfall/hoverlabel/font/__init__.py                              |   25
 plotly/validators/waterfall/hoverlabel/font/_color.py                                |   14
 plotly/validators/waterfall/hoverlabel/font/_colorsrc.py                             |   13
 plotly/validators/waterfall/hoverlabel/font/_family.py                               |   16
 plotly/validators/waterfall/hoverlabel/font/_familysrc.py                            |   13
 plotly/validators/waterfall/hoverlabel/font/_size.py                                 |   15
 plotly/validators/waterfall/hoverlabel/font/_sizesrc.py                              |   13
 plotly/validators/waterfall/increasing/__init__.py                                   |   11
 plotly/validators/waterfall/increasing/_marker.py                                    |   24
 plotly/validators/waterfall/increasing/marker/__init__.py                            |   12
 plotly/validators/waterfall/increasing/marker/_color.py                              |   14
 plotly/validators/waterfall/increasing/marker/_line.py                               |   22
 plotly/validators/waterfall/increasing/marker/line/__init__.py                       |   12
 plotly/validators/waterfall/increasing/marker/line/_color.py                         |   17
 plotly/validators/waterfall/increasing/marker/line/_width.py                         |   18
 plotly/validators/waterfall/insidetextfont/__init__.py                               |   25
 plotly/validators/waterfall/insidetextfont/_color.py                                 |   14
 plotly/validators/waterfall/insidetextfont/_colorsrc.py                              |   13
 plotly/validators/waterfall/insidetextfont/_family.py                                |   16
 plotly/validators/waterfall/insidetextfont/_familysrc.py                             |   13
 plotly/validators/waterfall/insidetextfont/_size.py                                  |   15
 plotly/validators/waterfall/insidetextfont/_sizesrc.py                               |   13
 plotly/validators/waterfall/legendgrouptitle/__init__.py                             |   12
 plotly/validators/waterfall/legendgrouptitle/_font.py                                |   39
 plotly/validators/waterfall/legendgrouptitle/_text.py                                |   13
 plotly/validators/waterfall/legendgrouptitle/font/__init__.py                        |   15
 plotly/validators/waterfall/legendgrouptitle/font/_color.py                          |   16
 plotly/validators/waterfall/legendgrouptitle/font/_family.py                         |   18
 plotly/validators/waterfall/legendgrouptitle/font/_size.py                           |   17
 plotly/validators/waterfall/outsidetextfont/__init__.py                              |   25
 plotly/validators/waterfall/outsidetextfont/_color.py                                |   14
 plotly/validators/waterfall/outsidetextfont/_colorsrc.py                             |   13
 plotly/validators/waterfall/outsidetextfont/_family.py                               |   16
 plotly/validators/waterfall/outsidetextfont/_familysrc.py                            |   13
 plotly/validators/waterfall/outsidetextfont/_size.py                                 |   15
 plotly/validators/waterfall/outsidetextfont/_sizesrc.py                              |   13
 plotly/validators/waterfall/stream/__init__.py                                       |   12
 plotly/validators/waterfall/stream/_maxpoints.py                                     |   15
 plotly/validators/waterfall/stream/_token.py                                         |   13
 plotly/validators/waterfall/textfont/__init__.py                                     |   25
 plotly/validators/waterfall/textfont/_color.py                                       |   12
 plotly/validators/waterfall/textfont/_colorsrc.py                                    |   13
 plotly/validators/waterfall/textfont/_family.py                                      |   16
 plotly/validators/waterfall/textfont/_familysrc.py                                   |   13
 plotly/validators/waterfall/textfont/_size.py                                        |   13
 plotly/validators/waterfall/textfont/_sizesrc.py                                     |   13
 plotly/validators/waterfall/totals/__init__.py                                       |   11
 plotly/validators/waterfall/totals/_marker.py                                        |   23
 plotly/validators/waterfall/totals/marker/__init__.py                                |   12
 plotly/validators/waterfall/totals/marker/_color.py                                  |   14
 plotly/validators/waterfall/totals/marker/_line.py                                   |   24
 plotly/validators/waterfall/totals/marker/line/__init__.py                           |   12
 plotly/validators/waterfall/totals/marker/line/_color.py                             |   14
 plotly/validators/waterfall/totals/marker/line/_width.py                             |   15
 plotly/version.py                                                                    |   18
 plotly/widgets.py                                                                    |    3
 pyproject.toml                                                                       |  138
 setup.cfg                                                                            |   16
 setup.py                                                                             |  573
 templategen/__main__.py                                                              |   17
 templategen/definitions.py                                                           |  688
 templategen/utils/__init__.py                                                        |  205
 templategen/utils/colors.py                                                          | 1124
 test_init/README.md                                                                  |   12
 test_init/__init__.py                                                                |    6
 test_init/test_dependencies_not_imported.py                                          |   35
 test_init/test_lazy_imports.py                                                       |   38
 tests/__init__.py                                                                    |    6
 tests/percy/compare-pandas.py                                                        |   33
 tests/percy/plotly-express.py                                                        |  539
 tests/percy/snapshots.yml                                                            |   22
 tests/test_core/__init__.py                                                          |    1
 tests/test_core/test_colors/test_colors.py                                           |  226
 tests/test_core/test_errors/test_dict_path_errors.py                                 |  648
 tests/test_core/test_figure_messages/__init__.py                                     |    1
 tests/test_core/test_figure_messages/test_add_traces.py                              |  128
 tests/test_core/test_figure_messages/test_batch_animate.py                           |   58
 tests/test_core/test_figure_messages/test_move_delete_traces.py                      |   85
 tests/test_core/test_figure_messages/test_on_change.py                               |  220
 tests/test_core/test_figure_messages/test_plotly_relayout.py                         |  148
 tests/test_core/test_figure_messages/test_plotly_restyle.py                          |   84
 tests/test_core/test_figure_messages/test_plotly_update.py                           |   84
 tests/test_core/test_figure_widget_backend/test_missing_anywidget.py                 |   35
 tests/test_core/test_figure_widget_backend/test_validate_initialization.py           |   20
 tests/test_core/test_figure_widget_backend/test_validate_no_frames.py                |   36
 tests/test_core/test_graph_objs/__init__.py                                          |    5
 tests/test_core/test_graph_objs/test_annotations.py                                  |   43
 tests/test_core/test_graph_objs/test_append_trace.py                                 |  103
 tests/test_core/test_graph_objs/test_constructor.py                                  |   45
 tests/test_core/test_graph_objs/test_data.py                                         |   51
 tests/test_core/test_graph_objs/test_error_bars.py                                   |   50
 tests/test_core/test_graph_objs/test_figure.py                                       |  217
 tests/test_core/test_graph_objs/test_figure_properties.py                            |  285
 tests/test_core/test_graph_objs/test_frames.py                                       |  108
 tests/test_core/test_graph_objs/test_graph_objs.py                                   |  170
 tests/test_core/test_graph_objs/test_instantiate_hierarchy.py                        |   39
 tests/test_core/test_graph_objs/test_layout_subplots.py                              |  238
 tests/test_core/test_graph_objs/test_properties_validated.py                         |  155
 tests/test_core/test_graph_objs/test_property_assignment.py                          |  496
 tests/test_core/test_graph_objs/test_repr.py                                         |   50
 tests/test_core/test_graph_objs/test_scatter.py                                      |   31
 tests/test_core/test_graph_objs/test_template.py                                     |  537
 tests/test_core/test_graph_objs/test_to_ordered_dict.py                              |  134
 tests/test_core/test_graph_objs/test_update.py                                       |  206
 tests/test_core/test_graph_objs/test_validate.py                                     |   36
 tests/test_core/test_offline/test_offline.py                                         |  423
 tests/test_core/test_optional_imports/exploding_module.py                            |    2
 tests/test_core/test_optional_imports/test_optional_imports.py                       |   43
 tests/test_core/test_subplots/test_find_nonempty_subplots.py                         |   60
 tests/test_core/test_subplots/test_get_subplot.py                                    |  168
 tests/test_core/test_subplots/test_make_subplots.py                                  | 2040
 tests/test_core/test_update_objects/test_row_col_subplot_addressing.py               |  183
 tests/test_core/test_update_objects/test_selector_matches.py                         |   86
 tests/test_core/test_update_objects/test_update_annotations.py                       |  430
 tests/test_core/test_update_objects/test_update_layout.py                            |   71
 tests/test_core/test_update_objects/test_update_subplots.py                          |  601
 tests/test_core/test_update_objects/test_update_traces.py                            |  477
 tests/test_core/test_utils/__init__.py                                               |    5
 tests/test_core/test_utils/test_utils.py                                             |   48
 tests/test_io/test_deepcopy_pickle.py                                                |  123
 tests/test_io/test_html.py                                                           |  120
 tests/test_io/test_pathlib.py                                                        |   56
 tests/test_io/test_renderers.py                                                      |  500
 tests/test_io/test_sg_scraper.py                                                     |  314
 tests/test_io/test_to_from_json.py                                                   |  281
 tests/test_io/test_to_from_plotly_json.py                                            |  268
 tests/test_optional/__init__.py                                                      |    7
 tests/test_optional/optional_utils.py                                                |  122
 tests/test_optional/test_autoshapes/common.py                                        |   22
 tests/test_optional/test_autoshapes/test_annotated_shapes.py                         |  505
 tests/test_optional/test_autoshapes/test_annotated_shapes_annotations.json           |    1
 tests/test_optional/test_autoshapes/test_axis_span_shapes.py                         |  475
 tests/test_optional/test_figure_factory/test_figure_factory.py                       | 1356
 tests/test_optional/test_graph_objs/test_numpy.py                                    |   16
 tests/test_optional/test_graph_objs/test_skipped_b64_keys.py                         |   84
 tests/test_optional/test_kaleido/test_kaleido.py                                     |  337
 tests/test_optional/test_kaleido/test_kaleido_v0_error.py                            |   86
 tests/test_optional/test_matplotlylib/__init__.py                                    |    5
 tests/test_optional/test_matplotlylib/data/__init__.py                               |    1
 tests/test_optional/test_matplotlylib/data/annotations.py                            |  106
 tests/test_optional/test_matplotlylib/data/axis_scales.py                            |   56
 tests/test_optional/test_matplotlylib/data/bars.py                                   |  174
 tests/test_optional/test_matplotlylib/data/data.py                                   |    6
 tests/test_optional/test_matplotlylib/data/lines.py                                  |  149
 tests/test_optional/test_matplotlylib/data/scatter.py                                |  130
 tests/test_optional/test_matplotlylib/data/subplots.py                               |  249
 tests/test_optional/test_matplotlylib/test_annotations.py                            |   37
 tests/test_optional/test_matplotlylib/test_axis_scales.py                            |   37
 tests/test_optional/test_matplotlylib/test_bars.py                                   |   89
 tests/test_optional/test_matplotlylib/test_data.py                                   |   88
 tests/test_optional/test_matplotlylib/test_date_times.py                             |   73
 tests/test_optional/test_matplotlylib/test_lines.py                                  |   61
 tests/test_optional/test_matplotlylib/test_scatter.py                                |   56
 tests/test_optional/test_matplotlylib/test_subplots.py                               |   40
 tests/test_optional/test_offline/test_offline.py                                     |   93
 tests/test_optional/test_px/conftest.py                                              |   48
 tests/test_optional/test_px/test_colors.py                                           |   83
 tests/test_optional/test_px/test_facets.py                                           |  130
 tests/test_optional/test_px/test_imshow.py                                           |  555
 tests/test_optional/test_px/test_marginals.py                                        |  206
 tests/test_optional/test_px/test_pandas_backend.py                                   |   57
 tests/test_optional/test_px/test_px.py                                               |  475
 tests/test_optional/test_px/test_px_functions.py                                     |  659
 tests/test_optional/test_px/test_px_hover.py                                         |  196
 tests/test_optional/test_px/test_px_input.py                                         |  758
 tests/test_optional/test_px/test_px_wide.py                                          |  892
 tests/test_optional/test_px/test_trendline.py                                        |  266
 tests/test_optional/test_subplots/test_make_subplots.py                              |   58
 tests/test_optional/test_tools/test_figure_factory.py                                |  458
 tests/test_optional/test_utils/__init__.py                                           |    5
 tests/test_optional/test_utils/test_utils.py                                         |  500
 tests/test_plotly_utils/colors/test_color_conversions.py                             |   74
 tests/test_plotly_utils/resources/1x1-black.png                                      |binary
 tests/test_plotly_utils/test_data_utils.py                                           |   88
 tests/test_plotly_utils/test_importers.py                                            |   40
 tests/test_plotly_utils/test_utils.py                                                |  140
 tests/test_plotly_utils/validators/test_angle_validator.py                           |   74
 tests/test_plotly_utils/validators/test_any_validator.py                             |   54
 tests/test_plotly_utils/validators/test_basetraces_validator.py                      |  141
 tests/test_plotly_utils/validators/test_boolean_validator.py                         |   56
 tests/test_plotly_utils/validators/test_color_validator.py                           |  280
 tests/test_plotly_utils/validators/test_colorlist_validator.py                       |   48
 tests/test_plotly_utils/validators/test_colorscale_validator.py                      |  151
 tests/test_plotly_utils/validators/test_compound_validator.py                        |   93
 tests/test_plotly_utils/validators/test_compoundarray_validator.py                   |  104
 tests/test_plotly_utils/validators/test_dash_validator.py                            |   61
 tests/test_plotly_utils/validators/test_dataarray_validator.py                       |   51
 tests/test_plotly_utils/validators/test_enumerated_validator.py                      |  152
 tests/test_plotly_utils/validators/test_fig_deepcopy.py                              |   32
 tests/test_plotly_utils/validators/test_flaglist_validator.py                        |  210
 tests/test_plotly_utils/validators/test_imageuri_validator.py                        |   54
 tests/test_plotly_utils/validators/test_infoarray_validator.py                       |  600
 tests/test_plotly_utils/validators/test_integer_validator.py                         |  193
 tests/test_plotly_utils/validators/test_literal_validator.py                         |   26
 tests/test_plotly_utils/validators/test_number_validator.py                          |  162
 tests/test_plotly_utils/validators/test_pandas_series_input.py                       |  202
 tests/test_plotly_utils/validators/test_string_validator.py                          |  208
 tests/test_plotly_utils/validators/test_subplotid_validator.py                       |  111
 tests/test_plotly_utils/validators/test_xarray_input.py                              |  133
 tests/utils.py                                                                       |   97
 uv.lock                                                                              |13400
 versioneer.py                                                                        | 2163
 12892 files changed, 669200 insertions(+), 724328 deletions(-)

diff -Nru plotly-5.20.0+dfsg/.github/FUNDING.yml plotly-7.1.0+dfsg1/.github/FUNDING.yml
--- plotly-5.20.0+dfsg/.github/FUNDING.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/FUNDING.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,2 @@
+github: plotly
+custom: https://plot.ly/products/consulting-and-oem/
diff -Nru plotly-5.20.0+dfsg/.github/ISSUE_TEMPLATE/bug_report.md plotly-7.1.0+dfsg1/.github/ISSUE_TEMPLATE/bug_report.md
--- plotly-5.20.0+dfsg/.github/ISSUE_TEMPLATE/bug_report.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/ISSUE_TEMPLATE/bug_report.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,35 @@
+---
+name: Bug report
+about: Create a bug report for a plotly.py issue
+title: "[BUG]: "
+labels: bug
+
+---
+
+### Instructions (remove this section before submitting report)
+
+Thanks for your interest in plotly.py!
+
+- Before submitting a new bug report, please search for existing and closed issues. If your bug is not addressed yet, fill out the sections below and submit a new issue.
+- Implementation questions ("How do I do ...?") should be asked on our [Community Forum](https://community.plotly.com/c/plotly-python/5) or on [Stack Overflow](https://stackoverflow.com/questions/tagged/plotly) (tagged 'plotly').
+- Comments should add content to the discussions. Approbation comments such as *+1* or *I would like this feature to be implemented as well* will be deleted by the maintainers. Please use [GitHub reactions](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) instead.
+
+### Description
+
+_Add a clear description of the issue that you're having._
+
+### Screenshots/Video
+
+_Add screenshots or a video of the issue._
+
+### Steps to reproduce
+
+_Reports **must** include steps to reproduce the issue. Please use the [latest version](https://github.com/plotly/plotly.py/releases) of plotly.py in your report unless not applicable._
+
+- Go to '...'
+- Click on X
+- Note the issue with Y
+
+### Notes
+
+_Add info here that doesn't fit in the other sections._
diff -Nru plotly-5.20.0+dfsg/.github/ISSUE_TEMPLATE/feature_request.md plotly-7.1.0+dfsg1/.github/ISSUE_TEMPLATE/feature_request.md
--- plotly-5.20.0+dfsg/.github/ISSUE_TEMPLATE/feature_request.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/ISSUE_TEMPLATE/feature_request.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,31 @@
+---
+name: Feature request
+about: Submit a new feature request for plotly.py
+title: "[FEATURE]: "
+labels: feature
+
+---
+
+### Instructions (remove this section before submitting an issue)
+
+Thanks for your interest in plotly.py!
+
+- Before submitting a new feature request, please search for existing and closed requests. If your request is novel, fill out the sections below and submit a new request.
+- Comments should add content to the discussions. Approbation comments such as *+1* or *I would like this feature to be implemented as well* will be deleted by the maintainers. Please use [GitHub reactions](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) instead.
+
+### Description
+
+_Add a clear description of the feature that you're requesting._
+
+
+### Why should this feature be added?
+
+_Provide an argument for why this feature should be added. We can't add everything, so this will help us determine what gets worked on. Please also consider creating a PR and adding the feature yourself. Help is always appreciated._
+
+### Mocks/Designs
+
+_Please add any mocks or designs you might have for the feature._
+
+### Notes
+
+_Add info here that doesn't fit in the other sections._
diff -Nru plotly-5.20.0+dfsg/.github/actions/setup-chrome-for-pytest/action.yml plotly-7.1.0+dfsg1/.github/actions/setup-chrome-for-pytest/action.yml
--- plotly-5.20.0+dfsg/.github/actions/setup-chrome-for-pytest/action.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/actions/setup-chrome-for-pytest/action.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,27 @@
+name: Set up Chrome for pytest
+description: Install Chrome/Chromedriver, set BROWSER, and verify the setup
+runs:
+  using: composite
+  steps:
+    - name: Set up Chrome
+      id: setup-chrome
+      uses: browser-actions/setup-chrome@48ad923757ca74d66703209fe939badbdf80f2f4 # v2.2.0
+      with:
+        install-chromedriver: true
+    - name: Set BROWSER env var
+      shell: bash
+      run: |
+        echo "BROWSER=${{ steps.setup-chrome.outputs.chrome-path }}" >> $GITHUB_ENV
+    - name: Check Chrome setup
+      shell: bash
+      run: |
+        CHROME_PATH="${{ steps.setup-chrome.outputs.chrome-path }}"
+        CHROMEDRIVER_PATH="${{ steps.setup-chrome.outputs.chromedriver-path }}"
+        echo "Chrome path: $CHROME_PATH"
+        echo "Chrome version: $($CHROME_PATH --version)"
+        echo "Chromedriver path: $CHROMEDRIVER_PATH"
+        echo "Chromedriver version: $($CHROMEDRIVER_PATH --version)"
+        echo "chrome --version: $(chrome --version)"
+        echo "BROWSER = $BROWSER"
+        python -c "import webbrowser; webbrowser.register_standard_browsers(); print(webbrowser._tryorder)"
+        python -c "import webbrowser; webbrowser.get()"
diff -Nru plotly-5.20.0+dfsg/.github/dependabot.yml plotly-7.1.0+dfsg1/.github/dependabot.yml
--- plotly-5.20.0+dfsg/.github/dependabot.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/dependabot.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,53 @@
+version: 2
+
+updates:
+  # Update package versions pinned in uv.lock.
+  # Note that these updates only affect what dependency versions we use in the CI;
+  # they have no effect on the release artifacts.
+  # Still, it's important that we run our CI against the latest dependency versions
+  # in order to catch any potential issues early.
+  - package-ecosystem: "uv"
+    directory: "/"
+    schedule:
+      interval: "weekly"
+    groups:
+      uv-dependencies:
+        patterns:
+          - "*"
+    labels: ["no-changelog"]
+    cooldown:
+      default-days: 3  # Should match tool.uv.exclude-newer option in pyproject.toml
+
+  # Update pinned versions for third-party GitHub Actions workflows
+  - package-ecosystem: "github-actions"
+    directories:
+      - "/"                   # Only covers .github/workflows/
+      - "/.github/actions/*"  # Covers all subdirectories under .github/actions/
+    schedule:
+      interval: "weekly"
+    groups:
+      actions-dependencies:
+        patterns:
+          - "*"
+    labels: ["no-changelog"]
+    cooldown:
+      default-days: 3
+
+  # Update version for JavaScript dependencies for Jupyter widget.
+  # Note: If the dependency update results in a changed build artifact,
+  # the `check-js-build` workflow will fail on the resulting PR.
+  # As currently configured, this will require a manual push of the
+  # updated build artifacts to resolve.
+  - package-ecosystem: "npm"
+    directory: "/js"
+    schedule:
+      interval: "monthly"
+    groups:
+      javascript-dependencies:
+        patterns:
+          - "*"
+    labels: ["no-changelog"]
+    cooldown:
+      default-days: 3
+    ignore:
+      - dependency-name: "plotly.js"  # We want to handle plotly.js updates manually
diff -Nru plotly-5.20.0+dfsg/.github/pull_request_template.md plotly-7.1.0+dfsg1/.github/pull_request_template.md
--- plotly-5.20.0+dfsg/.github/pull_request_template.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/pull_request_template.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,30 @@
+<!--
+Thank you for your contribution to plotly.py!
+
+Please complete each section below.
+-->
+
+### Link to issue
+<!-- Link to the issue closed by this PR. If the issue doesn't exist yet, create it. -->
+
+Closes #(issue number)
+
+### Description of change
+<!-- Provide a clear 1-2 sentence description of what this PR does. -->
+
+### Demo
+
+<!-- Include screenshots or screen recordings of this PR in action. -->
+
+### Testing strategy
+
+<!-- Provide 1-2 sentences explaining tests added or changed by this PR. If testing changes are not needed, explain why. -->
+
+### Additional information (optional)
+
+<!-- Include any additional context, background, or explanation which doesn't fit in the previous sections. -->
+
+### Guidelines
+
+- [ ] I have reviewed the [pull request guidelines](https://github.com/plotly/plotly.py/blob/main/CONTRIBUTING.md#opening-a-pull-request) and the [Code of Conduct](https://github.com/plotly/plotly.py/blob/main/CODE_OF_CONDUCT.md) and confirm that this PR follows them.
+- [ ] I have added an entry to the [changelog](https://github.com/plotly/plotly.py/blob/main/CHANGELOG.md) if needed (not required for documentation PRs).
diff -Nru plotly-5.20.0+dfsg/.github/workflows/build-doc.yml plotly-7.1.0+dfsg1/.github/workflows/build-doc.yml
--- plotly-5.20.0+dfsg/.github/workflows/build-doc.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/build-doc.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,161 @@
+name: Build Documentation
+
+on:
+  push:
+    branches:
+      - doc-prod
+  pull_request:
+    types: [opened, reopened, synchronize]
+
+permissions:
+  contents: read
+
+jobs:
+  build-doc:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+        with:
+          python-version: "3.9"
+
+      - name: Install system dependencies
+        run: sudo apt-get update && sudo apt-get install rename
+
+      - name: Install doc dependencies
+        run: |
+          cd doc
+          uv venv
+          source .venv/bin/activate
+          uv pip install -r requirements.txt
+
+      - name: Install plotly in editable mode
+        if: github.ref_name != 'doc-prod'
+        run: |
+          cd doc
+          source .venv/bin/activate
+          uv pip uninstall plotly
+          uv pip install -e ..
+
+
+      - name: Build HTML docs
+        run: |
+          cd doc
+          source .venv/bin/activate
+          make -kj8 || make -kj8
+          # Fetch scripts from plotly/graphing-library-docs, pinned to a specific commit SHA
+          # to guard against unauthorized changes in that repo. If changes are made to the
+          # below-referenced scripts in plotly/graphing-library-docs, update DOCS_CI_REF
+          # accordingly to point to the latest commit SHA.
+          DOCS_CI_REF=e05eaed1ae800139df084e0587762aa273a4f19d
+          curl -fsSL https://raw.githubusercontent.com/plotly/graphing-library-docs/$DOCS_CI_REF/front-matter-ci.py > front-matter-ci.py
+          curl -fsSL https://raw.githubusercontent.com/plotly/graphing-library-docs/$DOCS_CI_REF/check-or-enforce-order.py > check-or-enforce-order.py
+          python front-matter-ci.py build/html
+          python check-or-enforce-order.py build/html
+
+      - name: Upload HTML docs artifact
+        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a  # v7.0.1
+        with:
+          name: doc-html
+          path: doc/build/html/
+
+      - name: Create GitHub App token
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1  # v3.2.0
+        id: app-token
+        with:
+          app-id: ${{ vars.GRAPHING_LIBRARIES_CI_GHAPP_ID }}
+          private-key: ${{ secrets.GRAPHING_LIBRARIES_CI_GHAPP_PRIVATE_KEY }}
+          owner: ${{ github.repository_owner }}
+          repositories: plotly.py-docs,graphing-library-docs
+
+      - name: Checkout plotly.py-docs (built)
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+        with:
+          repository: plotly/plotly.py-docs
+          ref: built
+          token: ${{ steps.app-token.outputs.token }}
+          path: plotly.py-docs-html
+
+      - name: Deploy HTML docs
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        run: |
+          git config --global user.name plotlydocbot
+          git config --global user.email accounts@plot.ly
+          rm -rf plotly.py-docs-html/*
+          cp -r doc/build/html/* plotly.py-docs-html/
+          cd plotly.py-docs-html
+          git add .
+          git commit -m "build of https://github.com/plotly/plotly.py/commit/${{ github.sha }}" || echo "No changes to commit"
+          git push --force
+
+      - name: Checkout plotly.py-docs (built_ipynb)
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+        with:
+          repository: plotly/plotly.py-docs
+          ref: built_ipynb
+          token: ${{ steps.app-token.outputs.token }}
+          path: plotly.py-docs-ipynb
+
+      - name: Deploy notebooks
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        run: |
+          rm -rf plotly.py-docs-ipynb/*
+          cp -r doc/build/ipynb/* plotly.py-docs-ipynb/
+          cd plotly.py-docs-ipynb
+          git add .
+          git commit -m "build of https://github.com/plotly/plotly.py/commit/${{ github.sha }}" || echo "No changes to commit"
+          git push --force
+
+      - name: Checkout graphing-library-docs
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+        with:
+          repository: plotly/graphing-library-docs
+          ref: master
+          token: ${{ steps.app-token.outputs.token }}
+          path: graphing-library-docs
+
+      - name: Trigger downstream doc build
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        run: |
+          cd graphing-library-docs
+          git commit --allow-empty -m "deploying https://github.com/plotly/plotly.py/commit/${{ github.sha }}"
+          git push
+
+      - name: Build API docs
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        run: |
+          cd doc
+          source .venv/bin/activate
+          # For the API doc, we need to use the local version of plotly
+          # since we are tweaking the source because of
+          # graph_objs/graph_objects
+          uv pip uninstall plotly
+          uv pip install -e ..
+          cd apidoc
+          make html
+
+      - name: Checkout plotly.py-docs (gh-pages)
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+        with:
+          repository: plotly/plotly.py-docs
+          ref: gh-pages
+          token: ${{ steps.app-token.outputs.token }}
+          path: plotly.py-docs-api
+
+      - name: Deploy API docs
+        if: github.ref_name == 'doc-prod' && github.event_name == 'push'
+        run: |
+          rm -rf plotly.py-docs-api/*
+          cp -r doc/apidoc/_build/html/* plotly.py-docs-api/
+          touch plotly.py-docs-api/.nojekyll
+          cd plotly.py-docs-api
+          git add .
+          git commit -m "build of https://github.com/plotly/plotly.py/commit/${{ github.sha }}" || echo "No changes to commit"
+          git push --force
diff -Nru plotly-5.20.0+dfsg/.github/workflows/build-package.yml plotly-7.1.0+dfsg1/.github/workflows/build-package.yml
--- plotly-5.20.0+dfsg/.github/workflows/build-package.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/build-package.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,89 @@
+name: Build
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    types: [opened, reopened, synchronize]
+
+permissions:
+  contents: read
+
+jobs:
+  plotlyjs-dev-build:
+    name: plotly.js dev build
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: "3.12"
+      - name: Set up Node
+        uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020  # v7.0.0
+        with:
+          node-version: "22"
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install dependencies
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_optional
+      - name: Update plotly.js to dev
+        run: |
+          source .venv/bin/activate
+          python commands.py updateplotlyjsdev
+      - name: Test core (excluding nodev)
+        run: |
+          source .venv/bin/activate
+          pytest -k 'not nodev' tests/test_core
+      - name: Build source distribution packages
+        run: |
+          source .venv/bin/activate
+          uv sync --locked --extra dev_build
+          python -m build --sdist --wheel -o dist
+      - name: Upload dist artifacts
+        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a  # v7.0.1
+        with:
+          name: plotlyjs-dev-build-dist
+          path: dist/
+          if-no-files-found: error
+
+  full-build:
+    name: Full prod build
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: "3.12"
+      - name: Set up Node
+        uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020  # v7.0.0
+        with:
+          node-version: "22"
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: PyPI Build
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_build
+          cd js
+          npm ci
+          npm run build
+          cd ..
+          python -m build --sdist --wheel -o dist
+          cp -R dist output
+          git status
+      - name: Zip output
+        run: |
+          tar czf output.tgz output
+      - name: Upload output artifact
+        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a  # v7.0.1
+        with:
+          name: full-build-output
+          path: output.tgz
+          if-no-files-found: error
diff -Nru plotly-5.20.0+dfsg/.github/workflows/check-changelog.yml plotly-7.1.0+dfsg1/.github/workflows/check-changelog.yml
--- plotly-5.20.0+dfsg/.github/workflows/check-changelog.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/check-changelog.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,32 @@
+name: Check changelog
+
+on:
+  pull_request:
+    types: [opened, reopened, synchronize, labeled, unlabeled, ready_for_review]
+
+concurrency:
+  group: check-changelog-${{ github.event.pull_request.number }}
+  cancel-in-progress: true
+
+permissions:
+  contents: read
+  pull-requests: read
+
+jobs:
+  check-changelog:
+    name: Check if CHANGELOG.md was updated
+    if: ${{ !github.event.pull_request.draft }}
+    runs-on: ubuntu-latest
+    env:
+      GH_TOKEN: ${{ github.token }}
+      HAS_SKIP_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'no-changelog') }}
+    steps:
+      - run: |
+          if [ "$HAS_SKIP_LABEL" = true ]; then
+            echo "::notice::This PR has the 'no-changelog' label, so a change to CHANGELOG.md is not required."
+          elif gh api "repos/${{ github.repository }}/pulls/${{ github.event.number }}/files" --paginate --jq '.[].filename' | grep -qx CHANGELOG.md; then
+            echo "::notice::CHANGELOG.md was updated."
+          else
+            echo "::error::CHANGELOG.md was not updated. Either add a changelog entry, or add the 'no-changelog' label to this PR if a changelog entry is not needed."
+            exit 1
+          fi
diff -Nru plotly-5.20.0+dfsg/.github/workflows/check-codegen.yml plotly-7.1.0+dfsg1/.github/workflows/check-codegen.yml
--- plotly-5.20.0+dfsg/.github/workflows/check-codegen.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/check-codegen.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,49 @@
+name: Check Python codegen
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    types: [opened, reopened, synchronize]
+
+permissions:
+  contents: read
+
+jobs:
+  check-python-codegen:
+    name: Check Python codegen
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+    - name: Set up Python
+      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+      with:
+        python-version: "3.x"
+
+    - name: Set up uv
+      uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+
+    - name: Install dependencies
+      run: |
+        uv venv
+        source .venv/bin/activate
+        uv lock --check
+        uv sync --locked --extra dev_codegen
+    - name: Run codegen
+      run: |
+        source .venv/bin/activate
+        python commands.py codegen
+    - name: Check for changes
+      run: |
+        # Fail if codegen produced any changes to the working directory.
+        # This means the committed generated files are out of date and codegen
+        # needs to be re-run locally and the results committed.
+        if [ -n "$(git status --porcelain)" ]; then
+          echo "::error::Generated files are out of date. Please run 'python commands.py codegen' locally and commit the result."
+          echo "The following files differ after running codegen:"
+          git status --porcelain
+          echo ""
+          exit 1
+        fi
+        echo "Generated files are up to date."
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/.github/workflows/check-formatting.yml plotly-7.1.0+dfsg1/.github/workflows/check-formatting.yml
--- plotly-5.20.0+dfsg/.github/workflows/check-formatting.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/check-formatting.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,33 @@
+name: Check Python code formatting
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    types: [opened, reopened, synchronize]
+
+permissions:
+  contents: read
+
+jobs:
+  check-code-formatting:
+    name: Run ruff check
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: "3.12"
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install dependencies
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_core
+      - name: Check handwritten code with ruff
+        run: |
+          source .venv/bin/activate
+          ruff format --check .
diff -Nru plotly-5.20.0+dfsg/.github/workflows/check-js-build.yml plotly-7.1.0+dfsg1/.github/workflows/check-js-build.yml
--- plotly-5.20.0+dfsg/.github/workflows/check-js-build.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/check-js-build.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,83 @@
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    types: [opened, reopened, synchronize]
+    paths:
+      - 'js/**'
+      - 'plotly/labextension/**'
+
+name: Check JS build
+
+permissions:
+  contents: read
+
+jobs:
+  check-js-build:
+    name: Check JS version number and build artifacts
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+    - name: Set up Python
+      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+      with:
+        python-version: "3.x"
+
+    - name: Check that version number for JS project matches version number for Python project
+      run: |
+        PYPROJECT_PATH="pyproject.toml"
+        PKGJSON_PATH="js/package.json"
+        PYPROJECT_VERSION=$(awk -F'"' '/^version/ {print $2; exit}' $PYPROJECT_PATH)
+        JSPROJECT_VERSION=$(cat $PKGJSON_PATH | jq -r '.version')
+        if [ "$PYPROJECT_VERSION" != "$JSPROJECT_VERSION" ]; then
+          echo "❌ Version number $JSPROJECT_VERSION in $PKGJSON_PATH does not match version number $PYPROJECT_VERSION in $PYPROJECT_PATH"
+          exit 1
+        else
+          echo "✅ Version number $JSPROJECT_VERSION in $PKGJSON_PATH matches version number $PYPROJECT_VERSION in $PYPROJECT_PATH"
+        fi
+    - name: Install Node
+      uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020  # v7.0.0
+      with:
+        node-version: '22'
+
+    - name: Set up uv
+      uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+
+    - name: Copy current files to a temporary directory
+      run: |
+        mv plotly/labextension/ plotly/labextension-tmp/
+
+    - name: Install dependencies and build
+      run: |
+        uv venv
+        source .venv/bin/activate
+        # Technically, we only need the `jupyter-builder` package, but using the dev_build extra
+        # keeps build behavior consistent across all CI jobs
+        uv sync --locked --extra dev_build
+        cd js
+        npm ci
+        npm run build
+        npm ls
+    - name: Check JupyterLab build artifacts
+      run: |
+        # Compare the plotly/labextension and plotly/labextension-tmp directories
+        diff -r --brief plotly/labextension/ plotly/labextension-tmp/ > labextension_diff.txt
+
+        # Check for differences
+        if [ -s labextension_diff.txt ]; then
+        echo "❌ Build artifacts differ:"
+        echo "--- Unexpected diffs ---"
+        cat labextension_diff.txt
+        echo "Please replace the 'plotly/labextension' directory with the artifacts of this CI run."
+        exit 1
+        else
+        echo "✅ Build artifacts match expected output"
+        fi
+
+    - name: Store the build artifacts from plotly/labextension
+      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a  # v7.0.1
+      if: failure()
+      with:
+        name: labextension
+        path: plotly/labextension
diff -Nru plotly-5.20.0+dfsg/.github/workflows/run-percy.yml plotly-7.1.0+dfsg1/.github/workflows/run-percy.yml
--- plotly-5.20.0+dfsg/.github/workflows/run-percy.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/run-percy.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,51 @@
+name: Run Percy
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    types: [opened, reopened, synchronize]
+  workflow_dispatch:
+
+permissions:
+  contents: read
+
+jobs:
+  python-311-percy:
+    name: Run Percy
+    runs-on: ubuntu-latest
+    env:
+      PERCY_ENABLED: "True"
+      PERCY_PROJECT: plotly/plotly.py
+      PERCY_TOKEN: ${{ secrets.PERCY_PYTHON_TOKEN_V0 }}
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: "3.11"
+      - name: Set up Node
+        uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020  # v7.0.0
+        with:
+          node-version: "22"
+      - name: Set up Chrome
+        uses: browser-actions/setup-chrome@48ad923757ca74d66703209fe939badbdf80f2f4  # v2.2.0
+        with:
+          install-chromedriver: true
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install requirements
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_optional
+      - name: Build HTML figures (Pandas 2)
+        run: |
+          source .venv/bin/activate
+          python tests/percy/plotly-express.py
+      - name: Run percy snapshots
+        run: |
+          npm i @percy/cli
+          npx percy snapshot -c tests/percy/snapshots.yml tests/percy/
+          rm tests/percy/*.html
diff -Nru plotly-5.20.0+dfsg/.github/workflows/run-pytest.yml plotly-7.1.0+dfsg1/.github/workflows/run-pytest.yml
--- plotly-5.20.0+dfsg/.github/workflows/run-pytest.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/run-pytest.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,166 @@
+name: Test
+
+on:
+  push:
+    branches:
+      - main
+  pull_request:
+    types: [opened, reopened, synchronize]
+
+permissions:
+  contents: read
+
+jobs:
+  test-core:
+    name: Core tests (Python ${{ matrix.python-version }})
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install dependencies
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv lock --check
+          uv sync --locked --extra dev_core
+          python --version
+      - name: Test core
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_core
+
+  test-optional:
+    name: Optional tests (Python ${{ matrix.python-version }})
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Set up Chrome for Pytest
+        uses: ./.github/actions/setup-chrome-for-pytest
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install dependencies
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_optional --extra dev_pandas3
+          python --version
+      - name: Test core
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_core
+      - name: Test optional
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_optional
+      - name: Test utils
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_plotly_utils/
+      - name: Test io
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_io
+      - name: Test dependencies not imported
+        run: |
+          source .venv/bin/activate
+          python -m pytest -x test_init/test_dependencies_not_imported.py
+      - name: Test lazy imports
+        run: |
+          source .venv/bin/activate
+          python -m pytest -x test_init/test_lazy_imports.py
+
+  test-optional-legacy-pandas:
+    name: Optional tests (Python ${{ matrix.python-version }}, pandas ${{ matrix.pandas-version }})
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - python-version: "3.9"
+            pandas-version: "1"
+          - python-version: "3.11"
+            pandas-version: "2"
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Set up Chrome for browser tests
+        uses: ./.github/actions/setup-chrome-for-pytest
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install dependencies
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_optional --extra dev_pandas${{ matrix.pandas-version }}
+      - name: Test core
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_core
+      - name: Test optional
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_optional
+      - name: Test utils
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_plotly_utils/
+      - name: Test io
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_io
+      - name: Test dependencies not imported
+        run: |
+          source .venv/bin/activate
+          python -m pytest -x test_init/test_dependencies_not_imported.py
+      - name: Test lazy imports
+        run: |
+          source .venv/bin/activate
+          python -m pytest -x test_init/test_lazy_imports.py
+
+  test-kaleido-v0:
+    name: Kaleido v0 RuntimeError verification (Python 3.12, kaleido 0.2.1)
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      - name: Set up Python
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+        with:
+          python-version: "3.12"
+      - name: Set up Chrome
+        uses: browser-actions/setup-chrome@48ad923757ca74d66703209fe939badbdf80f2f4  # v2.2.0
+        with:
+          install-chromedriver: true
+      - name: Set up uv
+        uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+      - name: Install dependencies
+        run: |
+          uv venv
+          source .venv/bin/activate
+          uv sync --locked --extra dev_optional
+          uv pip uninstall kaleido
+          uv pip install kaleido==0.2.1
+          python --version
+      - name: Test that plotly.io raises correct error with Kaleido v0
+        run: |
+          source .venv/bin/activate
+          python -m pytest tests/test_optional/test_kaleido/test_kaleido_v0_error.py
diff -Nru plotly-5.20.0+dfsg/.github/workflows/test-release.yml plotly-7.1.0+dfsg1/.github/workflows/test-release.yml
--- plotly-5.20.0+dfsg/.github/workflows/test-release.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.github/workflows/test-release.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,76 @@
+name: Test release
+
+on:
+  workflow_dispatch
+
+permissions:
+  contents: read
+
+jobs:
+  build:
+    name: Full prod build
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
+      with:
+        persist-credentials: false
+    - name: Set up Python
+      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97  # v7.0.0
+      with:
+        python-version: "3.x"
+
+    - name: Install Node
+      uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020  # v7.0.0
+      with:
+        node-version: '22'
+
+    - name: Set up uv
+      uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4  # v10.1.0
+
+    - name: Install npm dependencies
+      run: |
+        uv venv
+        source .venv/bin/activate
+        uv pip install jupyter
+        cd js
+        npm ci --verbose
+        npm run build --verbose
+
+    - name: Install pypa/build
+      run: >-
+        python3 -m
+        pip install
+        build
+        --user
+    - name: Build a binary wheel and a source tarball
+      run: python3 -m build
+    - name: Store the distribution packages
+      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a  # v7.0.1
+      with:
+        name: python-package-distributions
+        path: dist/
+
+  publish-to-testpypi:
+    name: Publish to TestPyPI
+    needs:
+    - build
+    runs-on: ubuntu-latest
+
+    environment:
+      name: testpypi
+      url: https://test.pypi.org/p/plotly
+
+    permissions:
+      id-token: write  # IMPORTANT: mandatory for trusted publishing
+
+    steps:
+    - name: Download all the dists
+      uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c  # v8.0.1
+      with:
+        name: python-package-distributions
+        path: dist/
+    - name: Publish distribution 📦 to TestPyPI
+      uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33  # v1.14.2
+      with:
+        repository-url: https://test.pypi.org/legacy/
diff -Nru plotly-5.20.0+dfsg/.gitignore plotly-7.1.0+dfsg1/.gitignore
--- plotly-5.20.0+dfsg/.gitignore	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/.gitignore	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,61 @@
+0
+0.html
+iframe_figures/
+
+*.egg-info
+
+*.pyc
+
+*.gz
+
+*~
+
+doc/python/raw.githubusercontent.com/
+
+# Don't ignore dataset files
+!*.csv.gz
+!*.geojson.gz
+
+*.ipynb
+
+*.coverage
+
+*.tox
+
+debug_script.py
+
+test_output.txt
+
+plotly/api/v2/spectacle_presentations.py
+
+plotly/presentation_objs/
+
+.idea
+
+node_modules/
+
+.pytest_cache
+
+# virtual envs
+vv
+venv*
+
+# dist files
+build
+dist
+plotly.egg-info/
+
+# macOS utility file
+**/.DS_Store
+
+tests/test_core/test_offline/plotly.min.js
+temp-plot.html
+.vscode
+doc/python/.ipynb_checkpoints
+doc/.ipynb_checkpoints
+tags
+doc/check-or-enforce-order.py
+
+tests/percy/*.html
+tests/percy/pandas2/*.html
+test_path.png
diff -Nru plotly-5.20.0+dfsg/CHANGELOG.md plotly-7.1.0+dfsg1/CHANGELOG.md
--- plotly-5.20.0+dfsg/CHANGELOG.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/CHANGELOG.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,2695 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+This project adheres to [Semantic Versioning](http://semver.org/).
+
+## Unreleased
+
+
+## [7.1.0] - 2026-09-15
+
+### Added
+- Support `marginal_x`/`marginal_y="heatmap"` in `density_heatmap`, drawing a single-row/column heatmap strip in the margin colored by the same `z`/`histfunc` aggregate as the main plot and sharing its color scale [[#5706](https://github.com/plotly/plotly.py/issues/5706)], with thanks to @lucasjamar for the contribution!
+- Add support for custom tick values in `mpl_to_plotly` when the matplotlib tick positions don't follow an arithmetic progression, including custom tick labels and tick values on date axes [[#5262](https://github.com/plotly/plotly.py/pull/5262)], with thanks to @robertoffmoura for the contribution!
+
+### Fixed
+- Fix Plotly Express treating unsigned integer columns (`uint8`, `uint16`, `uint32`, `uint64`) in pandas DataFrames as categorical, which caused `px.bar` and other functions to pick the wrong orientation and render unexpected plots [[#4291](https://github.com/plotly/plotly.py/issues/4291), [#4344](https://github.com/plotly/plotly.py/issues/4344)], with thanks to @Belagum for the contribution!
+- Fix `mpl_to_plotly` not setting `paper_bgcolor` and `plot_bgcolor` from the matplotlib figure and axes backgrounds, so converted figures match the source figure's background colors [[#5285](https://github.com/plotly/plotly.py/pull/5285)], with thanks to @robertoffmoura for the contribution!
+- Fix rendering issue causing a too-large div when calling `Figure.show()` in Google Colab [[#5718](https://github.com/plotly/plotly.py/pull/5718)]
+- Fix the sphinx-gallery scraper so that it generates thumbnails for figures shown with `fig.show()` or displayed as the last expression of a code block [[#5701](https://github.com/plotly/plotly.py/pull/5701)], with thanks to @larsoner for the contribution!
+  - The scaper now warns once (instead of failing the build) when static image export is unavailable
+- The sphinx-gallery scraper no longer scrapes files belonging to other examples during parallel builds [[#5701](https://github.com/plotly/plotly.py/pull/5701)], with thanks to @larsoner for the contribution!
+
+### Updated
+- Update plotly.js from version 4.0.0 to version 4.1.1 [[#5722](https://github.com/plotly/plotly.py/pull/5722), [#5730](https://github.com/plotly/plotly.py/pull/5730)]. See the plotly.js release notes for [v4.1.0](https://github.com/plotly/plotly.js/releases/tag/v4.1.0) and [v4.1.1](https://github.com/plotly/plotly.js/releases/tag/v4.1.1) for details. Notable changes include:
+  - Add an opt-in modebar button for downloading Plotly figures as JSON [[#7990](https://github.com/plotly/plotly.js/pull/7990), [#8022](https://github.com/plotly/plotly.js/pull/8022)]
+  - Add `legend.groupdoubleclick` to set the group behavior for a legend double-click [[#7997](https://github.com/plotly/plotly.js/pull/7997)]
+  - Increase default double-click delay threshold to 500ms (from 300) [[#8014](https://github.com/plotly/plotly.js/pull/8014)]
+  - Fix issue with per-point marker color for hover labels in `scattergl`, `quiver` traces [[#8027](https://github.com/plotly/plotly.js/pull/8027)]
+  - Update `maplibre-gl` to v6 to address [CVE-2026-85061](https://github.com/advisories/GHSA-jrc7-96c5-q579) [[#8035](https://github.com/plotly/plotly.js/pull/8035)]
+    - Note: Safari 15, Chrome 56, Firefox 51 and later are now required for map traces
+- Update `hex_to_rgb` function to raise error for invalid-length hex codes, and emit warning for hex codes containing alpha [[#5729](https://github.com/plotly/plotly.py/pull/5729)], with thanks to @dylanpulver for the contribution!
+
+## [7.0.0] - 2026-08-25
+
+### Fixed
+- Fix `hex_to_rgb` parsing of 3-digit shorthand hexadecimal colors such as `#FFF` [[#5662](https://github.com/plotly/plotly.py/pull/5662)], with thanks to @genrichez for the contribution!
+- Improve `px.*_map()` auto-fitting behavior when `zoom` and `center` are not specified [[#5686](https://github.com/plotly/plotly.py/pull/5686)]
+- Add `<!doctype html>` to the `to_html()` template to comply with modern web standards [[#5693](https://github.com/plotly/plotly.py/pull/5693)], with thanks to @mishrakushal for the contribution!
+- Apply `histfunc`/`z` aggregation to `marginal_x`/`marginal_y="histogram"` subplots in `density_heatmap`/`density_contour`, instead of always showing raw bin counts [[#3521](https://github.com/plotly/plotly.py/issues/3521)], with thanks to @lucasjamar for the contribution!
+- Fix `mpl_to_plotly` silently dropping matplotlib path collections in data coordinates (such as violin plots, pcolor, event plots, stack plots, fill_between, and stem plots) by rendering them as filled polygons or lines [[#5702](https://github.com/plotly/plotly.py/pull/5702)], with thanks to @robertoffmoura for the contribution!
+
+### Updated
+- Update plotly.js from version 3.6.0 to version 4.0.0 [[#5673](https://github.com/plotly/plotly.py/pull/5673)]. This is a major-version release with many changes. See the [plotly.js release notes](https://github.com/plotly/plotly.js/releases/tag/v4.0.0) for the full list. The most significant changes include:
+  - Add `quiver` trace type to visualize vector fields using arrows [[#7710](https://github.com/plotly/plotly.js/pull/7710), [#7945](https://github.com/plotly/plotly.js/issues/7945)]
+  - Add "Share Chart" modebar button for generating a chart-sharing link via Plotly Cloud [[#7909](https://github.com/plotly/plotly.js/pull/7909)]
+  - Remove `scattermapbox`, `choroplethmapbox`, `densitymapbox` trace types, the `mapbox` subplot, and the `mapboxAccessToken` config option [[#7860](https://github.com/plotly/plotly.js/pull/7860)]. Use the equivalent `*map` traces instead.
+    - The corresponding `graph_objects` and Plotly Express functions have also been removed in plotly.py; use the `map` versions instead
+  - Drop support for MathJax v2, and add support for v4 [[#7898](https://github.com/plotly/plotly.js/pull/7898)]. MathJax is the JavaScript library used for rendering mathematical equations in plotly charts.
+  - Switch color processing library from [TinyColor](https://github.com/bgrins/TinyColor) to [culori](https://culorijs.org) [[#7536](https://github.com/plotly/plotly.js/pull/7536), [#7962](https://github.com/plotly/plotly.js/pull/7962)]. There are some changes to supported color string formats as a result:
+    - `rgb()`/`rgba()` strings with decimal 0–1 fractions are no longer supported
+    - `hsv()` color strings are no longer supported
+    - Strings with invalid syntax such as `hsl(120, 50% 50%)` are no longer supported
+    - New supported formats: `'#ff0000aa'`, `'#f00a'`, `'rgb(255 0 0)'`, `'rgba(255 0 0 / 0.5)'`, `'hsl(0 100% 50% / 0.5)'`, `'hsla(0, 100%, 50%, 0.5)'`, `'hwb(0 0% 0%)'`, `lab()`, `lch()`, `oklab()`, `oklch()`, `color()`, `hsl(0.5turn 60% 40%)`, `hsl(none 60% 40%)`
+  - Replace `country-regex` with `country-iso-search` to search for country names in choropleth, scattergeo traces [[#7856](https://github.com/plotly/plotly.js/pull/7856)]. Most country names are handled exactly the same; a small number of legacy entries have been removed.
+  - Change `layout.geo.fitbounds` default from `false` to `'locations'` [[#7895](https://github.com/plotly/plotly.js/pull/7895)]. `geo` subplots will now auto-fit the initial view to the trace data by default.
+  - Dynamically compute `center` and `zoom` values for `scattermap` and `densitymap` traces. The initial map view will now auto-fit to the trace data by default. Add `layout.map.fitbounds` attribute (default `'locations'`) to enable or disable auto-fitting behavior [[#7884](https://github.com/plotly/plotly.js/pull/7884), [#7913](https://github.com/plotly/plotly.js/pull/7913)]
+  - Fix GeoJSON bounding-box computation for `choropleth` and `scattergeo` traces whose geometry crosses the antimeridian [[#7891](https://github.com/plotly/plotly.js/pull/7891)]
+
+## [7.0.0rc0] - 2026-07-29
+
+### Removed
+- Remove the deprecated Figure Factory functions `create_2d_density`, `create_annotated_heatmap`, `create_bullet`, `create_candlestick`, `create_choropleth`, `create_distplot`, `create_facet_grid`, `create_gantt`, `create_hexbin_mapbox`, `create_ohlc`, `create_scatterplotmatrix`, and `create_violin` [[#5627](https://github.com/plotly/plotly.py/pull/5627)]
+- Remove support for Kaleido versions less than v1.0.0 for static image generation [[#5677](https://github.com/plotly/plotly.py/pull/5677)]
+- Remove support for Orca for static image generation [[#5677](https://github.com/plotly/plotly.py/pull/5677)]
+- Remove `engine` argument from functions `fig.write_image()`,`fig.to_image()`, `pio.write_image()`, `pio.write_images()`, `pio.to_image()`, `pio.full_figure_for_development()`, and from renderer constructors [[#5677](https://github.com/plotly/plotly.py/pull/5677)]
+
+### Updated
+- Update plotly.js from version 3.6.0 to version 4.0.0-rc.0 [[#5673](https://github.com/plotly/plotly.py/pull/5673)]. This is a major-version release candidate with many changes. See the [plotly.js release notes](https://github.com/plotly/plotly.js/releases/tag/v4.0.0-rc.0) for the full list. The most significant changes include:
+  - Add `quiver` trace type to visualize vector fields using arrows [[#7710](https://github.com/plotly/plotly.js/pull/7710)]
+  - Add "Share Chart" modebar button for generating a chart-sharing link via Plotly Cloud [[#7909](https://github.com/plotly/plotly.js/pull/7909)]
+  - Remove `scattermapbox`, `choroplethmapbox`, `densitymapbox` trace types, the `mapbox` subplot, and the `mapboxAccessToken` config option [[#7860](https://github.com/plotly/plotly.js/pull/7860)]. Use the equivalent `*map` traces instead.
+    - The corresponding `graph_objects` and Plotly Express functions have also been removed in plotly.py; use the `map` versions instead
+  - Drop support for MathJax v2, and add support for v4 [[#7898](https://github.com/plotly/plotly.js/pull/7898)]. MathJax is the JavaScript library used for rendering mathematical equations in plotly charts.
+  - Switch color processing library from [TinyColor](https://github.com/bgrins/TinyColor) to [color](https://github.com/Qix-/color) [[#7536](https://github.com/plotly/plotly.js/pull/7536)]. There are some changes to supported color string formats as a result:
+    - `rgb()`/`rgba()` strings with decimal 0–1 fractions are no longer supported
+    - `hsv()` color strings are no longer supported
+    - New supported formats: `'#ff0000aa'`, `'#f00a'`, `'rgb(255 0 0)'`, `'rgba(255 0 0 / 0.5)'`, `'hsl(0 100% 50% / 0.5)'`, `'hsla(0, 100%, 50%, 0.5)'`, `'hwb(0, 0%, 0%)'`
+  - Replace `country-regex` with `country-iso-search` to search for country names in choropleth, scattergeo traces [[#7856](https://github.com/plotly/plotly.js/pull/7856)]. Most country names are handled exactly the same; a small number of legacy entries have been removed.
+  - Change `layout.geo.fitbounds` default from `false` to `'locations'` [[#7895](https://github.com/plotly/plotly.js/pull/7895)]. `geo` subplots will now auto-fit the initial view to the trace data by default.
+  - Dynamically compute `center` and `zoom` values for `scattermap` and `densitymap` traces. The initial map view will now auto-fit to the trace data by default. Add `layout.map.fitbounds` attribute (default `'locations'`) to enable or disable auto-fitting behavior [[#7884](https://github.com/plotly/plotly.js/pull/7884), [#7913](https://github.com/plotly/plotly.js/pull/7913)]
+  - Fix GeoJSON bounding-box computation for `choropleth` and `scattergeo` traces whose geometry crosses the antimeridian [[#7891](https://github.com/plotly/plotly.js/pull/7891)]
+
+## [6.9.0] - 2026-07-09
+
+### Fixed
+- Raise a clear `ValueError` when an unsupported marginal plot type is passed to Plotly Express, instead of failing later with a cryptic `'NoneType' object has no attribute 'constructor'` message [[#5625](https://github.com/plotly/plotly.py/pull/5625)], with thanks to @eugen-goebel for the contribution!
+- Read and write figure JSON files as UTF-8 in `read_json`/`write_json` so figures containing non-ASCII text are handled correctly on platforms whose default encoding is not UTF-8 (e.g. cp1252 on Windows) [[#5633](https://github.com/plotly/plotly.py/pull/5633)]
+
+
+### Updated
+- Update plotly.js from version 3.6.0 to version 3.7.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.7.0) for more information [[#5639](https://github.com/plotly/plotly.py/pull/5639)]. Notable changes include:
+  - Rename `sendDataToCloud` modebar button to `sendChartToCloud`, and update to upload chart to Plotly Cloud [[#7802](https://github.com/plotly/plotly.js/pull/7802), [#7852](https://github.com/plotly/plotly.js/pull/7852), [#7854](https://github.com/plotly/plotly.js/pull/7854)]
+  - Fix stale `scattergl` error bars after toggling traces with mixed error bar visibility [[#7773](https://github.com/plotly/plotly.js/issues/7773)]
+  - Fix geo `fitbounds` to choose a compact longitude range when point data straddles the antimeridian [[#7837](https://github.com/plotly/plotly.js/pull/7837)]
+
+## [6.8.0] - 2026-06-03
+
+### Added
+- Add optional `font` parameter for `make_subplots` [[#5393](https://github.com/plotly/plotly.py/pull/5393)], with thanks to @Zomtir for the contribution!
+
+### Fixed
+- Fix issue where user-specified `color_continuous_scale` was ignored when template had `autocolorscale=True` [[#5439](https://github.com/plotly/plotly.py/pull/5439)], with thanks to @antonymilne for the contribution!
+- Use presence of `COLAB_NOTEBOOK_ID` env var to enable Colab renderer instead of testing import of `google.colab` [[#5473](https://github.com/plotly/plotly.py/pull/5473)], with thanks to @kevineger for the contribution!
+- Fix incorrect annotation placement for `add_vline`, `add_hline`, `add_vrect`, and `add_hrect` on datetime axes [[#5508](https://github.com/plotly/plotly.py/pull/5508)], with thanks to @mosh3eb for the contribution!
+- Update tests to be compatible with numpy 2.4 [[#5522](https://github.com/plotly/plotly.py/pull/5522)], with thanks to @thunze for the contribution!
+- Fix issue where `js/` directory was unintentionally installed as a top-level Python package when installing `plotly` [[#5587](https://github.com/plotly/plotly.py/pull/5587)]
+- Add default headers to be passed in to Kaleido v1.3.0 to avoid blocked Open Street Map tiles [[#5588](https://github.com/plotly/plotly.py/pull/5588)]
+- Propagate the requested `default_height`/`default_width` to the outer wrapper div produced by `to_html` so that responsive (percentage) dimensions inherit from a sized parent container instead of collapsing to the plotly.js 450px fallback [[#5591](https://github.com/plotly/plotly.py/issues/5591)], with thanks to @SharadhNaidu for the contribution!
+
+### Updated
+- The `__eq__` method for  `graph_objects` classes now returns `NotImplemented` to give the other operand an opportunity to handle the comparison [[#5547](https://github.com/plotly/plotly.py/pull/5547)], with thanks to @RazerM for the contribution!
+- Update plotly.js from version 3.5.0 to version 3.6.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.6.0) for more information [[#5608](https://github.com/plotly/plotly.py/pull/5608)]. Notable changes include:
+  - Add support for arrays for the pie property `legendrank`, so that it can be configured per slice [[#7723](https://github.com/plotly/plotly.js/pull/7723)]
+  - Add `hoversort` layout attribute to sort unified hover label items by value [[#7734](https://github.com/plotly/plotly.js/pull/7734)]
+
+## [6.7.0] - 2026-04-09
+
+### Added
+- Add `facet_row` support to `px.imshow` for creating subplots along an additional dimension [[#5445](https://github.com/plotly/plotly.py/pull/5445)], with thanks to @FBumann for the contribution!
+
+### Fixed
+- Update `numpy.percentile` syntax to stop using deprecated alias [[#5483](https://github.com/plotly/plotly.py/pull/5483)], with thanks to @Mr-Neutr0n for the contribution!
+  - `numpy` with a version less than 1.22 is no longer supported.
+- Handle empty `px.histogram` by skipping `None` label in hover template [[#5535](https://github.com/plotly/plotly.py/pull/5535)], with thanks to @tysoncung for the contribution!
+
+### Updated
+- Update plotly.js from version 3.4.0 to version 3.5.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.5.0) for more information. [[#5565](https://github.com/plotly/plotly.py/pull/5565)]. Notable changes include:
+  - Add `hoveranywhere` and `clickanywhere` layout attributes to enable emitting hover and click events anywhere in the plot area, not just over traces [[#7707](https://github.com/plotly/plotly.js/pull/7707)]
+  - Add `displayNotifier` configuration property to set the display of notifier in the top right area of the viewport [[#7730](https://github.com/plotly/plotly.js/pull/7730)]
+  - Update USA location lookup for `scattergeo` and `choropleth` traces to use both location names and abbreviations [[#7731](https://github.com/plotly/plotly.js/pull/7731)]
+
+## [6.6.0] - 2026-03-02
+
+### Fixed
+- Remove unneeded `type="text/javascript"` attribute from `<style>` tag [[#5454](https://github.com/plotly/plotly.py/pull/5454)], with thanks to @hannob for the contribution!
+- Remove global warning format side effect [[#5481](https://github.com/plotly/plotly.py/pull/5481)], with thanks to @emmanuel-ferdman for the contribution!
+- Fix spurious engine deprecation warning in write_image [[#5517](https://github.com/plotly/plotly.py/pull/5517)], with thanks to @mosh3eb for the contribution!
+
+### Updated
+- Update plotly.js from version 3.3.1 to version 3.4.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.4.0) for more information. [[#5527](https://github.com/plotly/plotly.py/pull/5527)]. Notable changes include:
+  - Add support for clicking legend titles to toggle visibility of all traces in legend [[#7698](https://github.com/plotly/plotly.js/pull/7698)]
+  - Add support for shapes to reference multiple axes [[#7666](https://github.com/plotly/plotly.js/pull/7666)]
+  - Add support for dashed marker lines in scatter plots [[#7673](https://github.com/plotly/plotly.js/pull/7673)]
+  - Increase axis autorange when bar charts have outside text labels, to avoid labels being clipped [[#7675](https://github.com/plotly/plotly.js/pull/7675)]
+
+## [6.5.2] - 2026-01-14
+
+### Fixed
+- Fix issue where pie trace `legend`, `showlegend` attributes don't accept array values [[#5464](https://github.com/plotly/plotly.py/pull/5464) and [#5465](https://github.com/plotly/plotly.py/pull/5465)], with thanks to @my-tien for the contribution!
+
+## [6.5.1] - 2026-01-07
+
+### Fixed
+- Fix issue where Plotly Express ignored trace-specific color sequences defined in templates via `template.data.<trace_type>` [[#5437](https://github.com/plotly/plotly.py/pull/5437)], with thanks to @antonymilne for the contribution!
+
+### Updated
+- Speed up `validate_gantt` function [[#5386](https://github.com/plotly/plotly.py/pull/5386)], with thanks to @misrasaurabh1 for the contribution!
+- Update plotly.js from version 3.3.0 to version 3.3.1. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.3.1) for more information. [[#5456](https://github.com/plotly/plotly.py/pull/5456)]. Notable changes include:
+  - Add support for arrays for the pie properties `showlegend` and `legend`, so that these can be configured per slice. [[#7580](https://github.com/plotly/plotly.js/pull/7580)]
+
+## [6.5.0] - 2025-11-17
+
+### Updated
+- Update plotly.js from version 3.2.0 to version 3.3.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases/tag/v3.3.0) for more information. [[#5421](https://github.com/plotly/plotly.py/pull/5421)]. Notable changes include:
+  - Add `hovertemplate` for `candlestick` and `ohlc` traces [[#7619](https://github.com/plotly/plotly.js/pull/7619)]
+
+### Fixed
+- Fix bug where numpy datetime contained in Python list was converted to integer [[#5415](https://github.com/plotly/plotly.py/pull/5415)]
+
+## [6.4.0] - 2025-11-02
+
+### Updated
+- Update plotly.js from version 3.1.1 to version 3.2.0. See the plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5357](https://github.com/plotly/plotly.py/pull/5388)]. Notable changes include:
+  - Add `hovertemplatefallback` and `texttemplatefallback` attributes [[#7577](https://github.com/plotly/plotly.js/pull/7577)]
+  - Add "SI extended" formatting rule for tick exponents on axis labels, allowing values to be displayed with extended SI prefixes (e.g., femto, pico, atto) [[#7249](https://github.com/plotly/plotly.js/pull/7249)]
+
+### Deprecated
+- Deprecate `create_hexbin_mapbox` in favor of `create_hexbin_map`, update related function calls [[5358](https://github.com/plotly/plotly.py/pull/5358)], with thanks to @ajlien for the contribution!
+
+## [6.3.1] - 2025-10-02
+
+### Updated
+- Update Plotly.js from version 3.1.0 to version 3.1.1. See the Plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5357](https://github.com/plotly/plotly.py/pull/5357)]. Notable changes include:
+  - Fix issue preventing Scattergl plots with text elements from rendering [[plotly.js#7563](https://github.com/plotly/plotly.js/pull/7563)]
+- Use native legends when converting from matplotlib [[#5312](https://github.com/plotly/plotly.py/pull/5312)], with thanks to @robertoffmoura to the contribution!
+- Allow `shared_yaxes` to work with secondary axes [[#5180](https://github.com/plotly/plotly.py/pull/5180)], with thanks to @gmjw for the contribution!
+
+### Fixed
+- Fix issue where width/height in plot layout were not respected during Kaleido image export [[#5325](https://github.com/plotly/plotly.py/pull/5325)]
+- Fix typo in default argument to `_ternary_contour.py` [[#5315](https://github.com/plotly/plotly.py/pull/5315)], with thanks to @Lexachoc for the contribution!
+- Fix incorrect `fig.show()` behavior when `ipython` is installed [[#5258](https://github.com/plotly/plotly.py/pull/5258)]
+
+## [6.3.0] - 2025-08-12
+
+### Updated
+- Updated Plotly.js from version 3.0.1 to version 3.1.0. See the Plotly.js [release notes](https://github.com/plotly/plotly.js/releases) for more information. [[#5318](https://github.com/plotly/plotly.py/pull/5318)]
+
+### Added
+- Exposed `plotly.io.get_chrome()` as a function which can be called from within a Python script. [[#5282](https://github.com/plotly/plotly.py/pull/5282)]
+
+### Fixed
+- Resolved issue causing extraneous engine deprecation warnings [[#5287](https://github.com/plotly/plotly.py/pull/5287)], with thanks to @jdbeel for the contribution!
+
+## [6.2.0] - 2025-06-26
+
+### Added
+- Add SRI (Subresource Integrity) hash support for CDN script tags when using `include_plotlyjs='cdn'`. This enhances security by ensuring browser verification of CDN-served plotly.js files [[#5165](https://github.com/plotly/plotly.py/pull/5165)] (with thanks to @ddworken)
+
+### Fixed
+- Allow setting Plotly.js path via `pio.defaults` [[#5207](https://github.com/plotly/plotly.py/pull/5207)]
+
+### Changed
+- Refactor validation code to reduce bundle size [[#5214](https://github.com/plotly/plotly.py/pull/5214)] (with thanks to @bmaranville)
+- Add deprecation warnings when using Kaleido v0 or deprecated image export features [[#5177](https://github.com/plotly/plotly.py/pull/5236)]
+
+## [6.1.2] - 2025-05-27
+
+### Fixed
+- Fix type checking and code highlighting for `graph_objects` classes [[#5199](https://github.com/plotly/plotly.py/pull/5199)]
+
+
+## [6.1.1] - 2025-05-20
+
+### Fixed
+- Prevent swallowing of `ValueError` when creating a figure with subplots [[#3888](https://github.com/plotly/plotly.py/pull/3888)]
+- Fix issue causing `fig.write_image()` to not generate an image [[#5193](https://github.com/plotly/plotly.py/pull/5193)]
+
+## [6.1.0] - 2025-05-15
+
+### Updated
+- Add support for Kaleido>=v1.0.0 for image generation [[#5062](https://github.com/plotly/plotly.py/pull/5062), [#5177](https://github.com/plotly/plotly.py/pull/5177)]
+- Reduce package bundle size by 18-24% via changes to code generation [[#4978](https://github.com/plotly/plotly.py/pull/4978)]
+
+### Fixed
+- Fix third-party widget display issues in v6 [[#5102](https://github.com/plotly/plotly.py/pull/5102)]
+- Add handling for case where `jupyterlab` or `notebook` is not installed [[#5104](https://github.com/plotly/plotly.py/pull/5104/files)]
+- Fix issue causing Plotly.js script to be embedded multiple times in Jupyter notebooks [[#5112](https://github.com/plotly/plotly.py/pull/5112)]
+- Re-add MIME renderer JupyterLab extension with JupyterLab 4 support to reduce file sizes for offline notebooks [[#5096](https://github.com/plotly/plotly.py/pull/5096)]
+- Fix issue preventing plots from rendering in HTML notebook export when using 'vscode+notebook' renderer [[#5154](https://github.com/plotly/plotly.py/pull/5154)]
+
+## [6.0.1] - 2025-03-14
+
+### Updated
+- Updated Plotly.js from version 3.0.0 to version 3.0.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#301----2025-02-18) for more information.
+
+
+### Fixed
+- Fix `TypeError` when using `orjson` to serialize `pandas.NA` [[#5040](https://github.com/plotly/plotly.py/pull/5040)].
+- Fix issue where using `category_orders` on `px.pie` raised `ColumnNotFoundError` [[#5000](https://github.com/plotly/plotly.py/pull/5000)].
+- Fix incorrect `DeprecationWarning` shown when creating a `px` chart [[#5080](https://github.com/plotly/plotly.py/pull/5080), [#5086](https://github.com/plotly/plotly.py/pull/5086)]
+
+
+## [6.0.0] - 2025-01-28
+
+### Added
+- Add `plotly[express]` extra for easily installing Plotly Express dependencies [[#4644](https://github.com/plotly/plotly.py/pull/4644)]
+- Add `subtitle` attribute to all Plotly Express traces [[#4830](https://github.com/plotly/plotly.py/pull/4830)].
+
+### Removed
+- Drop deprecated `pointcloud` and `heatmapgl` traces from the API [[#4815](https://github.com/plotly/plotly.py/pull/4815)]
+- Drop `tenacity` dependency [[#4831](https://github.com/plotly/plotly.py/pull/4831)]
+- Drop support for Jupyter Notebook version 6 and earlier [[#4822](https://github.com/plotly/plotly.py/pull/4822)]. The minimum supported version is now 7.0.0.
+
+### Updated
+- Update Plotly.js from version 2.34.2 to version 3.0.0 See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#300----2025-01-27) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Make offsetgroup work with barmode "stacked" and "relative" for bar traces [[#7009](https://github.com/plotly/plotly.js/pull/7009)]
+  - Drop support for deprecated attributes `titlefont`, `titleposition`, `titleside`, and `titleoffset` [[#7212](https://github.com/plotly/plotly.js/pull/7212)].
+  - Drop deprecated pointcloud and heatmapgl traces and gl2d subplots [[#7213](https://github.com/plotly/plotly.js/pull/7213)]
+  - Drop support for deprecated `bardir` attribute (use `orientation` instead) [[#7214](https://github.com/plotly/plotly.js/pull/7214)]
+  - Drop support for deprecated `annotation.ref` attribute (use `annotation.xref` and `annotation.yref` instead) [[#7215](https://github.com/plotly/plotly.js/pull/7215)]
+  - Drop support for deprecated error bar `opacity` attribute (use alpha channel of error bar `color` attribute instead) [[#7214](https://github.com/plotly/plotly.js/pull/7216)]
+  - Drop support for deprecated attribute `gl3d.cameraposition` (use `gl3d.camera` instead) [[#7217](https://github.com/plotly/plotly.js/pull/7217)]
+  - Drop deprecated `plot3dPixelRatio` from config [[#7231](https://github.com/plotly/plotly.js/pull/7231)]
+  - Drop deprecated `zauto`, `zmin` and `zmax` from the surface trace [[#7234](https://github.com/plotly/plotly.js/pull/7234)]
+  - Drop deprecated `autotick` attributes from cartesian axes [[#7236](https://github.com/plotly/plotly.js/pull/7236)]
+  - Drop `transforms` from the API [[#7240](https://github.com/plotly/plotly.js/pull/7240), [#7254](https://github.com/plotly/plotly.js/pull/7254)]
+- Deprecate Mapbox-based traces.[[#4900](https://github.com/plotly/plotly.py/pull/4900)]. See the [MapLibre Migration](https://plotly.com/python/mapbox-to-maplibre/) page for details on migrating from Mapbox to MapLibre.
+- Update plotly.py to use base64 encoding of typed arrays e.g. numpy in plotly JSON to keep precision intact and improve performance [[#4470](https://github.com/plotly/plotly.py/pull/4470)].
+- Make plotly-express dataframe agnostic via Narwhals [[#4790](https://github.com/plotly/plotly.py/pull/4790)].
+- Update `go.FigureWidget` to use `anywidget` [[#4823](https://github.com/plotly/plotly.py/pull/4823)]
+- Use modern [native ES6 import](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) to load plotly.js bundle instead of requirejs which is [no longer under active development](https://github.com/requirejs/r.js/compare/2.3.6...2.3.7) [[#4736](https://github.com/plotly/plotly.py/pull/4763)]
+
+### Fixed
+- Fix a bug in JupyterLab >= 4 and Jupyter Notebook >= 7 that caused LaTeX to not render in plotly charts [[#4763](https://github.com/plotly/plotly.py/pull/4763)].
+- Fix `go.FigureWidget.show` to return `FigureWidget` instead of displaying `Figure` [[#4869](https://github.com/plotly/plotly.py/pull/4869)]
+
+## [5.24.1] - 2024-09-12
+
+### Updated
+
+- Updated Plotly.js from version 2.35.0 to version 3.0.0-rc.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2352----2024-11-11) for more information.
+
+## [5.24.0] - 2024-08-29
+
+### Added
+- New `px` functions for maps: `scatter_map`, `line_map`, `choropleth_map`, and `density_map`.
+
+### Updated
+
+- Updated Plotly.js from version 2.34.0 to version 2.35.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2350----2024-08-29) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add new traces: scattermap, choroplethmap and densitymap and map subplots which use maplibre to render maps [[#7015](https://github.com/plotly/plotly.js/pull/7015), [#7060](https://github.com/plotly/plotly.js/pull/7060), [#7085](https://github.com/plotly/plotly.js/pull/7085), [#7088](https://github.com/plotly/plotly.js/pull/7088), [#7090](https://github.com/plotly/plotly.js/pull/7090), [#7092](https://github.com/plotly/plotly.js/pull/7092), [#7094](https://github.com/plotly/plotly.js/pull/7094), [#7134](https://github.com/plotly/plotly.js/pull/7134)]
+  - Deprecate mapbox traces and mapbox subplot [[#7087](https://github.com/plotly/plotly.js/pull/7087)]
+
+- Fixed a bug in integer validation of arrays that threw an error when an array contained a mix of strings and integers.
+
+## [5.23.0] - 2024-07-23
+
+### Updated
+- Updated Plotly.js from version 2.32.0 to version 2.34.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2340----2024-07-18) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add `subtitle` attribute to `layout.title` to enable adding subtitles to plots [[#7012](https://github.com/plotly/plotly.js/pull/7012)]
+  - Introduce "u" and "s" pseudo html tags to add partial underline and strike-through styles to SVG text elements [[#7043](https://github.com/plotly/plotly.js/pull/7043)]
+  - Add geometric mean functionality and 'geometric mean ascending' + 'geometric mean descending' to `category_order` on cartesian axes [[#6223](https://github.com/plotly/plotly.js/pull/6223)],
+   with thanks to @acxz and @prabhathc for the contribution!
+  - Add axis property `ticklabelindex` for drawing the label for each minor tick n positions away from a major tick,
+   with thanks to @my-tien for the contribution! [[#7036](https://github.com/plotly/plotly.js/pull/7036)]
+  - Add property `ticklabelstandoff` and `ticklabelshift` to cartesian axes to adjust positioning of tick labels,
+   with thanks to @my-tien for the contribution! [[#7006](https://github.com/plotly/plotly.js/pull/7006)]
+  - Add `x0shift`, `x1shift`, `y0shift`, `y1shift` to shapes to add control over positioning of shape vertices on (multi-)category axes,
+   with thanks to @my-tien for the contribution! [[#7005](https://github.com/plotly/plotly.js/pull/7005)]
+- Specify Python version 3.8-3.11 for development virtual environments and pin `pytest` at version 8.1.1 to match.
+- Update `IntegerValidator` to handle `extras` option to allow supporting additional keyword values. For example, 'bold' and 'normal' as well as integers as used in font weights [#4612].
+
+
+## [5.22.0] - 2024-05-01
+
+### Updated
+- Updated Plotly.js from version 2.31.1 to version 2.32.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2320----2024-04-23) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add "bold" weight, "italic" style and "small-caps" variant options to fonts [#6956]
+  - Fix applying autotickangles on axes with showdividers as well as cases where tickson is set to "boundaries" [#6967], with thanks to @my-tien for the contribution!
+  - Fix positioning of multi-line axis titles with standoff [#6970], with thanks to @my-tien for the contribution!
+
+## [5.21.0] - 2024-04-17
+
+### Updated
+- Updated Plotly.js from version 2.30.0 to version 2.31.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2311----2024-04-15) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add `zorder` attribute to various cartesian traces for controlling stacking order of SVG traces drawn into a subplot [[#6918](https://github.com/plotly/plotly.js/pull/6918), [#6953](https://github.com/plotly/plotly.js/pull/6953)],
+    This feature was anonymously sponsored: thank you to our sponsor!
+  - Add "between" option to shape layer for placing them above grid lines and below traces [[#6927](https://github.com/plotly/plotly.js/pull/6927)],
+    with thanks to @my-tien for the contribution!
+  - Add "raw" `sizemode` to cone trace [[#6938](https://github.com/plotly/plotly.js/pull/6938)]
+  - Add `layout.hoversubplots` to enable hover effects across multiple cartesian suplots sharing one axis [[#6947](https://github.com/plotly/plotly.js/pull/6947), [#6950](https://github.com/plotly/plotly.js/pull/6950)]
+
+### Fixed
+- Fixed `orjson` loading issue [[#4562](https://github.com/plotly/plotly.py/pull/4562)]
+
+## [5.20.0] - 2024-03-13
+
+### Updated
+- Updated Plotly.js from version 2.29.1 to version 2.30.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2300----2024-03-06) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add fill gradients for scatter traces [[#6905](https://github.com/plotly/plotly.js/pull/6905)], with thanks to @lumip for the contribution!
+  - Add `indentation` to legend [[#6874](https://github.com/plotly/plotly.js/pull/6874)], with thanks to @my-tien for the contribution!
+
+## [5.19.0] - 2024-02-15
+
+### Updated
+
+- Updated Plotly.js from version 2.27.0 to version 2.29.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2291----2024-02-12) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add `layout.barcornerradius` and `trace.marker.cornerradius` properties to support rounding the corners of bar traces [[#6761](https://github.com/plotly/plotly.js/pull/6761)],
+   with thanks to [Displayr](https://www.displayr.com) for sponsoring development!
+  - Add `autotickangles` to cartesian and radial axes [[#6790](https://github.com/plotly/plotly.js/pull/6790)], with thanks to @my-tien for the contribution!
+  - Add `align` option to sankey nodes to control horizontal alignment [[#6800](https://github.com/plotly/plotly.js/pull/6800)],
+   with thanks to @adamreeve for the contribution!
+  - Add the possibility of loading "virtual-webgl" script for WebGL 1 to help display several WebGL contexts on a page [[#6784](https://github.com/plotly/plotly.js/pull/6784)], with thanks to @greggman for the contribution!
+  - Add options to use base64 encoding (`bdata`) and `shape` (for 2 dimensional arrays) to declare various typed arrays i.e. `dtype=(float64|float32|int32|int16|int8|uint32|uint16|uint8)` [[#5230](https://github.com/plotly/plotly.js/pull/5230)]
+  -  Adjust stamen styles to point to `stadiamaps.com`, the users may also need to provide their own API_KEY via `config.mapboxAccessToken` [[#6776](https://github.com/plotly/plotly.js/pull/6776), [#6778](https://github.com/plotly/plotly.js/pull/6778)]
+- Removed Python 3.6 and Python 3.7 support [[#4492](https://github.com/plotly/plotly.py/pull/4492)]
+
+### Fixed
+- Ensure scatter `mode` is deterministic from `px` [[#4429](https://github.com/plotly/plotly.py/pull/4429)]
+- Fix issue with creating dendrogram in subplots [[#4411](https://github.com/plotly/plotly.py/pull/4411)],
+- Fix issue with px.line not accepting "spline" line shape [[#2812](https://github.com/plotly/plotly.py/issues/2812)]
+- Fix KeyError when using column of `pd.Categorical` dtype with unobserved categories [[#4437](https://github.com/plotly/plotly.py/pull/4437)]
+- Fix dataframe interchange in case `column_names` returns an unmaterialized object: generator, iterator, etc. [[#4442]](https://github.com/plotly/plotly.py/pull/4442)
+- Fix issue with `FutureWarning` being displayed when setting the `color` argument in `plotly.express` [[#4519]](https://github.com/plotly/plotly.py/pull/4519)
+
+## [5.18.0] - 2023-10-25
+
+### Updated
+- Updated Plotly.js from version 2.26.0 to version 2.27.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2270----2023-10-20) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Add `insiderange` to cartesian axes to help avoid overlap between visible grid lines and tick labels of the counter axis when they are positioned inside [[#6735](https://github.com/plotly/plotly.js/pull/6735)], this feature was anonymously sponsored: thank you to our sponsor!
+  - Fix column order changes on hover [[#6718](https://github.com/plotly/plotly.js/pull/6718)],
+   with thanks to @bhavinpatel1109 for the contribution!
+  - Fix hover at timestamp '1970-01-01 00:00:00' [[#6752](https://github.com/plotly/plotly.js/pull/6752)],
+   with thanks to @adamjhawley for the contribution!
+  - Fix clearing empty `candlestick` using react [[#6757](https://github.com/plotly/plotly.js/pull/6757)]
+
+### Fixed
+- Repair crash on Matplotlib 3.8 related to get_offset_position [[#4372](https://github.com/plotly/plotly.py/pull/4372)],
+- Handle deprecation of `pandas.Series.dt.to_pydatetime()` calls and suppress the `FutureWarning` they currently emit. [[#4379](https://github.com/plotly/plotly.py/pull/4379)]
+
+## [5.17.0] - 2023-09-15
+
+### Updated
+- Improved json docstrings, added `BasePlotlyType.to_json()` method [[#4301](https://github.com/plotly/plotly.py/pull/4301)]
+- Updated Plotly.js from version 2.25.2 to version 2.26.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2260----2023-08-24) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+   - Add "min", "max", "min reversed" and "max reversed" autorange options and handle partial ranges (i.e. one end being null), add `autorangeoptions` (`clipmin`, `clipmax`, `minallowed`, `maxallowed`, `include`) as well as `minallowed` and `maxallowed` to cartesian, gl3d and radial axes [[#6547](https://github.com/plotly/plotly.js/pull/6547)]
+   - Add [n]-sigma (std deviations) box plots as an alternative to quartiles [[#6697](https://github.com/plotly/plotly.js/issues/6697)], with thanks to @28raining for the contribution!
+   - Add "top left" & "top center" side options to legend title [[#6711](https://github.com/plotly/plotly.js/pull/6711)], with thanks to @28raining for the contribution!
+   - Add "false" option to `scaleanchor` to allow removing a constraint that is set by default [[#6712](https://github.com/plotly/plotly.js/pull/6712)], with thanks to @lvlte for the contribution!
+
+
+### Fixed
+- Fixed two issues with px.imshow: [[#4330](https://github.com/plotly/plotly.py/issues/4330)] when facet_col is an earlier dimension than animation_frame for xarrays and [[#4329](https://github.com/plotly/plotly.py/issues/4329)] when facet_col has string coordinates in xarrays [[#4331](https://github.com/plotly/plotly.py/pull/4331)]
+
+## [5.16.1] - 2023-08-16
+
+### Fixed
+- Fixed issue with necessary columns from complex arguments dropped when interchanging dataframes [[#4324](https://github.com/plotly/plotly.py/pull/4324)]
+
+## [5.16.0] - 2023-08-11
+
+### Updated
+- Updated Plotly.js from version 2.24.1 to version 2.25.2. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2252----2023-08-11) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  -  Add "Equal Earth" projection to geo subplots [[#6670](https://github.com/plotly/plotly.js/pull/6670)],
+   with thanks to @apparebit for the contribution!
+  - Add options to include legends for shapes and `newshape` [[#6653](https://github.com/plotly/plotly.js/pull/6653)]
+- `px` methods now accept data-frame-like objects that support a [dataframe interchange protocol](https://data-apis.org/dataframe-protocol/latest/index.html), such as polars, vaex, modin etc. This protocol has priority on `to_pandas` call, but will only be used if pandas>=2.0.2 is installed in the environment.
+- `px` methods now accept data-frame-like objects that support a `toPandas()` method, such as Spark DataFrames, or a `to_pandas_df()` method, such as Vaex DataFrames.
+
+### Fixed
+- Fixed Pandas performance warning issue caused by multiple `frame.insert` [[#4246](https://github.com/plotly/plotly.py/pull/4246)]
+
+## [5.15.0] - 2023-06-08
+
+### Updated
+  - Updated Plotly.js from version 2.20.0 to version 2.24.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2241----2023-06-07) for more information. Notable changes include:
+    - Add pattern to pie, funnelarea, sunburst, icicle and treemap traces [[#6601](https://github.com/plotly/plotly.js/pull/6601), [#6619](https://github.com/plotly/plotly.js/pull/6619), [#6622](https://github.com/plotly/plotly.js/pull/6622), [#6626](https://github.com/plotly/plotly.js/pull/6626), [#6627](https://github.com/plotly/plotly.js/pull/6627), [#6628](https://github.com/plotly/plotly.js/pull/6628), [#6629](https://github.com/plotly/plotly.js/pull/6629)], with thanks to @thierryVergult for the contribution!
+    - Add `texttemplate` to shape.label for parametric shapes i.e. line, rect and circle [[#6527](https://github.com/plotly/plotly.js/pull/6527)],
+   with thanks to the [Volkswagen](https://www.volkswagenag.com) Center of Excellence for Battery Systems for sponsoring development!
+    - Add strict option to custom bundle command [[#6557](https://github.com/plotly/plotly.js/pull/6557)],
+   with thanks to @CallumNZ for the contribution!
+    - Add `legend` references to traces and `legend2`, `legend3`, etc. to layout,
+   also add `visible` to legend i.e. to allow positioning multiple legends on a graph [[#6535](https://github.com/plotly/plotly.js/pull/6535)],
+   this feature was anonymously sponsored: thank you to our sponsor!
+    - Add `legend.xref` and `legend.yref` to enable container-referenced positioning of legends [[#6589](https://github.com/plotly/plotly.js/pull/6589)], with thanks to [Gamma Technologies](https://www.gtisoft.com/) for sponsoring the related development.
+    - Add `colorbar.xref` and `colorbar.yref` to enable container-referenced positioning of colorbars [[#6593](https://github.com/plotly/plotly.js/pull/6593)], with thanks to [Gamma Technologies](https://www.gtisoft.com/) for sponsoring the related development.
+  - `px` methods now accept data-frame-like objects that support a `to_pandas()` method, such as polars, cudf, vaex etc [[#4244](https://github.com/plotly/plotly.py/pull/4244)], [[#4286](https://github.com/plotly/plotly.py/pull/4286)]
+
+### Fixed
+  - Fixed another compatibility issue with Pandas 2.0, just affecting `px.*(line_close=True)` [[#4190](https://github.com/plotly/plotly.py/pull/4190)]
+  - Empty pandas dataframe with facet row/column set no longer fails [[#4038](https://github.com/plotly/plotly.py/pull/4038)]
+  - Added some rounding to the `make_subplots` function to handle situations where the user-input specs cause the domain to exceed 1 by small amounts [[#4153](https://github.com/plotly/plotly.py/pull/4153)]
+  - Sanitize JSON output to prevent an XSS vector when graphs are inserted directly into HTML [[#4196](https://github.com/plotly/plotly.py/pull/4196)]
+  - Fixed issue with shapes and annotations plotting on the wrong y axis when supplied with a specific axis in the `yref` parameter [[#4177](https://github.com/plotly/plotly.py/pull/4177)]
+  - Remove `use_2to3` setuptools arg, which is invalid in the latest Python and setuptools versions [[#4206](https://github.com/plotly/plotly.py/pull/4206)]
+  - Fix [#4066](https://github.com/plotly/plotly.py/issues/4066) JupyterLab v4 giving tiny default graph height [[#4227](https://github.com/plotly/plotly.py/pull/4227)]
+  - Fixed issue with `colors.n_colors` where generated RGB color values were not being constrained to stay between 0 and 255 [[#4110](https://github.com/plotly/plotly.py/pull/4110)]
+  - Fix streamline figure factory with recent versions of Numpy
+  - Fix issue with shapes and annotations not drawing on correct axis [[#4177](https://github.com/plotly/plotly.py/pull/4177)]
+
+## [5.14.1] - 2023-04-05
+
+### Fixed
+  - Fixed compatibility issue with Pandas 2.0 [[#4103](https://github.com/plotly/plotly.py/pull/4103)]
+
+## [5.14.0] - 2023-03-29
+
+### Updated
+  - Updated Plotly.js from version 2.18.2 to version 2.20.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2200----2023-03-15) for more information. Notable changes include:
+    - Add `title.automargin` to enable automatic top and bottom margining for both container and paper referenced titles [[#6428](https://github.com/plotly/plotly.js/pull/6428)],
+   with thanks to [Gamma Technologies](https://www.gtisoft.com/) for sponsoring the related development.
+    - Add `label` attribute to shapes [[#6454](https://github.com/plotly/plotly.js/pull/6454)], with thanks to the [Volkswagen](https://www.volkswagenag.com) Center of Excellence for Battery Systems for sponsoring development!
+    - Add `labelalias` to various axes namely cartesian, gl3d, polar, smith, ternary, carpet,
+   indicator and colorbar [[#6481](https://github.com/plotly/plotly.js/pull/6481)],
+   this feature was anonymously sponsored: thank you to our sponsor!
+  - Key errors no longer precalculated when performing updates on plots [[#4101](https://github.com/plotly/plotly.py/pull/4101)]
+
+### Fixed
+- Fixed an issue with characters displaying incorrectly, by adding `charset="utf-8"` to scripts in `to_html` [[#4114](https://github.com/plotly/plotly.py/pull/4114)]
+- Added `packaging` to install requirements, fixing a `No module named 'packaging` error on Python 3.6 [[#4113](https://github.com/plotly/plotly.py/pull/4113)]
+
+### Added
+- Added option to allow passing a column name as a `str` in `hover_data` and `custom_data` in `plotly.express` [[4083](https://github.com/plotly/plotly.py/pull/4083)]
+
+## [5.13.1] - 2023-02-24
+
+### Updated
+  - Updated Plotly.js to from version 2.18.0 to version 2.18.2. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2182----2023-02-15) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module.
+  - Updated distutils.Version to packaging.Version [#3897](https://github.com/plotly/plotly.py/pull/3897)] and [#4055](https://github.com/plotly/plotly.py/pull/4055)]
+
+## [5.13.0] - 2023-01-23
+
+### Updated
+  - Updated Plotly.js to from version 2.17.1 to version 2.18.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2180----2023-01-19) for more information. Notable changes include:
+    - Add `sync` tickmode option [[#6356](https://github.com/plotly/plotly.js/pull/6356), [#6443](https://github.com/plotly/plotly.js/pull/6443)], with thanks to @filipesantiagoAM and @VictorBezak for the contribution!
+  - Build process now uses Node 18.x and version 2 lockfile (should be an invisible change for users) [[#4034](https://github.com/plotly/plotly.py/pull/4034)]
+
+### Fixed
+  - `write_html()` now explicitly encodes output as UTF-8 because Plotly.js' bundle contains such characters [[#4021](https://github.com/plotly/plotly.py/pull/4021)] and [[#4022](https://github.com/plotly/plotly.py/pull/4022)]
+  - fixed `iframe` renderer regression from 5.12 and also fixed error when this renderer was used in the very first cell in a notebook [[#4036](https://github.com/plotly/plotly.py/pull/4036)]
+
+
+## [5.12.0] - 2023-01-12
+
+### Updated
+  - Support for ipywidgets 8 [[#3930](https://github.com/plotly/plotly.py/pull/3930)]
+  - Updated Plotly.js to from version 2.16.1 to version 2.17.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2170----2022-12-22) for more information. Notable changes include:
+    - Add `shift` and `autoshift` to cartesian y axes to help avoid overlapping of multiple axes [[#6334](https://github.com/plotly/plotly.js/pull/6334)],
+      with thanks to [Gamma Technologies](https://www.gtisoft.com) for sponsoring the related development!
+    - Introduce group attributes for `scatter` trace i.e. `alignmentgroup`, `offsetgroup`, `scattermode` and `scattergap` [[#6381](https://github.com/plotly/plotly.js/pull/6381)],
+      this feature was anonymously sponsored: thank you to our sponsor!
+    - Add `marker.cornerradius` attribute to `treemap` trace [[#6351](https://github.com/plotly/plotly.js/pull/6351)]
+### Fixed
+  - Fixed the usage of some deprecated NumPy types which were removed in NumPy 1.24 [[#3997](https://github.com/plotly/plotly.py/pull/3997)]
+  - Fixed bug for trendlines with datetime axes [[#3683](https://github.com/plotly/plotly.py/issues/3683)]
+  - `marker.angle` attribute now accepts iterables where appropriate [[#4013](https://github.com/plotly/plotly.py/issues/4013)]
+  - `selector=0` now correctly returns the first trace in `.select_traces()` and related methods [[#3817](https://github.com/plotly/plotly.py/issues/3817)]
+
+## [5.11.0] - 2022-10-27
+
+### Updated
+  - Updated Plotly.js to from version 2.14.0 to version 2.16.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2161----2022-10-21) for more information. Notable changes include:
+    - Add clustering options to `scattermapbox` [[#5827](https://github.com/plotly/plotly.js/pull/5827)],
+      with thanks to @elben10 for the contribution!
+    - Add bounds to mapbox suplots [[6339](https://github.com/plotly/plotly.js/pull/6339)]
+    - Add `angle`, `angleref` and `standoff` to `marker` and add `backoff` to `line`; also introduce new arrow symbols to facilitate drawing networks [[#6297](https://github.com/plotly/plotly.js/pull/6297)]
+    - Add `minreducedwidth` and `minreducedheight` to layout for increasing control over automargin [[#6307](https://github.com/plotly/plotly.js/pull/6307)]
+    - Add `entrywidth` and `entrywidthmode` to legend [[#6202](https://github.com/plotly/plotly.js/pull/6202), [#6324](https://github.com/plotly/plotly.js/pull/6324)]
+
+## [5.10.0] - 2022-08-11
+
+### Updated
+  - Updated Plotly.js to from version 2.12.1 to version 2.14.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2140----2022-08-10) for more information. Notable changes include:
+    - Add support for `sankey` links with arrows
+    - Add `selections`, `newselection` and `activeselection` layout attributes to have persistent and editable selections over cartesian subplots
+    - Add `unselected.line.color` and `unselected.line.opacity` options to `parcoords` trace
+    - Display Plotly's new logo in the modebar
+
+## [5.9.0] - 2022-06-23
+
+### Added
+
+  - `pattern_shape` options now available in `px.timeline()` [#3774](https://github.com/plotly/plotly.py/pull/3774)
+  - `facet_*` and `category_orders` now available in `px.pie()` [#3775](https://github.com/plotly/plotly.py/pull/3775)
+
+### Performance
+
+  - `px` methods no longer call `groupby` on the input dataframe when the result would be a single group, and no longer groups by a lambda, for significant speedups [#3765](https://github.com/plotly/plotly.py/pull/3765) with thanks to [@jvdd](https://github.com/jvdd)
+
+### Updated
+
+  - Allow non-string extras in `flaglist` attributes, to support upcoming changes to `ax.automargin` in plotly.js [plotly.js#6193](https://github.com/plotly/plotly.js/pull/6193), [#3749](https://github.com/plotly/plotly.py/pull/3749)
+
+## [5.8.2] - 2022-06-10
+
+### Fixed
+
+  - Fixed a syntax error that caused rendering issues in Databricks notebooks and likely elsewhere. [#3763](https://github.com/plotly/plotly.py/pull/3763) with thanks to [@fwetdb](https://github.com/fwetdb)
+
+## [5.8.1] - 2022-06-08
+
+(no changes, due to a mixup with the build process!)
+
+## [5.8.0] - 2022-05-09
+
+### Fixed
+
+  - Improve support for type checking and IDE auto-completion by bypassing lazy-loading when type checking. [#3425](https://github.com/plotly/plotly.py/pull/3425) with thanks to [@JP-Ellis](https://github.com/JP-Ellis)
+  - line dash-style validators are now correctly used everywhere so that values like `10px 2px` are accepted [#3722](https://github.com/plotly/plotly.py/pull/3722)
+  - Resolved various deprecation warning messages and compatibility issues with upstream dependencies and Python 3.11, plus removed dependency on `six`, with thanks to [@maresb](https://github.com/maresb), [@hugovk](https://github.com/hugovk), [@tirkarthi](https://github.com/tirkarthi), [@martinRenou](https://github.com/martinRenou), and [@BjoernLudwigPTB](https://github.com/BjoernLudwigPTB)
+  - Better support for MathJax 3 [#3706](https://github.com/plotly/plotly.py/pull/3706)
+
+### Added
+
+  - Type annotations for Plotly Express functions and chainable `go.Figure` methods, for better IDE auto-completion [#3708](https://github.com/plotly/plotly.py/pull/3708)
+
+### Updated
+  - Updated Plotly.js to from version 2.11.1 to version 2.12.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v2.12.1/CHANGELOG.md#2121----2022-05-09) for more information. Notable changes include:
+    - Add `minor` ticks to cartesian axes
+    - Add `griddash` option to most axes
+
+##  [5.7.0] - 2022-04-05
+
+### Added
+  - added `pattern_shape` options to `px.area()` [#3668](https://github.com/plotly/plotly.py/issues/3668)
+
+### Updated
+  - Updated Plotly.js to from version 2.9.0 to version 2.11.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#2111----2022-03-15) for more information. Notable changes include:
+    - Add `fillpattern` options to `scatter` trace
+    - Various JS-specific improvements such as MathJax 3.0 support
+
+##  [5.6.0] - 2022-02-09
+
+### Updated
+  - Updated Plotly.js to from version 2.8.3 to version 2.9.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#290----2022-02-04) for more information. Notable changes include:
+    - Implement `ticklabelstep` to reduce labels on cartesian axes and colorbars
+    - Display the version of plotly.js when hovering over the modebar
+
+
+## [5.5.0] - 2021-12-20
+
+### Added
+
+  - `text_auto` argument to `px.bar`, `px.histogram`, `px.density_heatmap`, `px.imshow` [#3518](https://github.com/plotly/plotly.py/issues/3518)
+  - Deprecated `ff.create_annotated_heatmap`, `ff.create_county_choropleth`, `ff.create_gantt` [#3518](https://github.com/plotly/plotly.py/issues/3518)
+  - `div_id` argument to `pio.to_html`, `pio.write_html`, `fig.to_html` and `fig.write_html` to optionally make its IDs deterministic [#3487](https://github.com/plotly/plotly.py/issues/3487) with thanks to [@Skn0tt](https://github.com/Skn0tt)
+
+### Fixed
+  - Fixed ValueError when `ff.create_annotated_heatmap` passes `rgba()` colors into `to_rgb_color_list` [#3478](https://github.com/plotly/plotly.py/issues/3478) with thanks to [@janosh](https://github.com/janosh)
+
+### Updated
+  - Updated Plotly.js to from version 2.6.3 to version 2.8.3. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#280----2021-12-10) for more information. Notable changes include:
+    - Horizontal color bars
+    - `texttemplate` for histogram-like and heatmap-like traces
+
+
+## [5.4.0] - 2021-11-15
+
+### Fixed
+  - Fixed error when serializing dict with mix of string and non-string keys [#3380](https://github.com/plotly/plotly.py/issues/3380)
+
+### Updated
+  - The JSON serialization engines no longer sort their keys [#3380](https://github.com/plotly/plotly.py/issues/3380)
+  - Updated Plotly.js to from version 2.4.2 to version 2.6.3. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#263----2021-11-12) for more information. Notable changes include:
+    - New subplot type `smith` that supports `scattersmith` trace types for visualizing data in the complex domain
+    - Changes to Plotly.js packaging
+
+
+## [5.3.1] - 2021-08-31
+
+### Updated
+
+- Updated Plotly.js to from version 2.4.1 to version 2.4.2. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#240----2021-08-27) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Bug fix for rendering unified hover labels in classic Jupyter Notebooks
+
+## [5.3.0] - 2021-08-29
+
+### Updated
+
+- Updated Plotly.js to from version 2.3.1 to version 2.4.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#240----2021-08-27) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - Added `legend.groupclick` options
+  - Provide bbox of hover items in event data
+
+## [5.2.2] - 2021-08-23
+
+### Fixed
+  - Fixed error when using the orjson engine with non-string keys [#3351](https://github.com/plotly/plotly.py/pull/3351)
+
+## [5.2.1] - 2021-08-13
+
+### Updated
+
+- Updated Plotly.js to from version 2.2.0 to version 2.3.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#231----2021-07-30) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - new projections in `geo` subplots from a more recent version of `d3-geo`
+  - new number-formatting directives from a more recent version of `d3-format`
+  - Improve rendering of `scattergl`, `splom` and `parcoords` by implementing `plotGlPixelRatio` for those traces
+  - performance improvements and bug fixes
+
+### Added
+  - Extra flags were added to the `gapminder` and `stocks` dataset to facilitate testing, documentation and demos [#3305](https://github.com/plotly/plotly.py/issues/3305)
+  - All line-like Plotly Express functions now accept `markers` argument to display markers, and all but `line_mapbox` accept `symbol` to map a field to the symbol attribute, similar to scatter-like functions [#3326](https://github.com/plotly/plotly.py/issues/3326)
+  - `px.scatter` and `px.density_contours` now support new `trendline` types `'rolling'`, `'expanding'` and `'ewm'` [#2997](https://github.com/plotly/plotly.py/pull/2997)
+  - `px.scatter` and `px.density_contours` now support new `trendline_options` argument to parameterize trendlines, with support for constant control and log-scaling in `'ols'` and specification of the fraction used for `'lowess'`, as well as pass-through to Pandas for `'rolling'`, `'expanding'` and `'ewm'` [#2997](https://github.com/plotly/plotly.py/pull/2997)
+  - `px.scatter` and `px.density_contours` now support new `trendline_scope` argument that accepts the value `'overall'` to request a single trendline for all traces, including across facets and animation frames [#2997](https://github.com/plotly/plotly.py/pull/2997)
+  - A new `px.ecdf()` function for Empirical Cumulative Distribution Functions [#3330](https://github.com/plotly/plotly.py/pull/3330)
+
+### Fixed
+  - Fixed regression introduced in version 5.0.0 where pandas/numpy arrays with `dtype` of Object were being converted to `list` values when added to a Figure ([#3292](https://github.com/plotly/plotly.py/issues/3292), [#3293](https://github.com/plotly/plotly.py/pull/3293))
+  - Better detection of Chrome and Chromium browsers in the Renderers framework, especially on Linux ([#3278](https://github.com/plotly/plotly.py/pull/3278)) with thanks to [@c-chaitanya](https://github.com/c-chaitanya) for the contribution
+
+## [5.1.0] - 2021-06-28
+
+- Updated Plotly.js to from version 2.1.0 to version 2.2.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#220----2021-06-28) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - new `<trace>.legendgrouptitle` attribute for legend group titles
+  - new `%h` text formatting directive for half-years
+  - performance improvements and bug fixes
+
+
+## [5.0.0] - 2021-06-21
+
+### Updated/Changed
+
+Items in this section may be considered backwards-incompatible changes for the purposes of [Semantic Versioning](http://semver.org/) but we expect the vast majority of users to be able to upgrade to version 5.0 without encountering any issues.
+
+- **Dropped support for Python older than 3.6** [#3160](https://github.com/plotly/plotly.py/pull/3160)
+- Updated Plotly.js to from version 1.58.4 to version 2.1.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#210----2021-06-18) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+    - dropped support for IE9 and IE10
+    - dropped support for long-deprecated `graph_objects` like `area` traces and `scatter.(t|r)` and `layout.(radial|angular)axis` attributes
+    - modebar no longer has hovermode or spikeline buttons by default (can be added back with `fig.update_layout(modebar_add=["v1hovermode", "toggleSpikeLines"])`)
+    - "Aa" text no longer appears on legend items unless `mode="text"`
+    - In `bar` traces, `textposition` now defaults to `"auto"`
+    - Font size for legend and colorbar titles now matches axis title font size (slightly bigger)
+    - deprecated `heatmapgl`, `pointcloud` traces as well as all `transform` attributes
+- Combined `plotlywidget` into `jupyterlab-plotly` and packaged them as a federated extension [#3142](https://github.com/plotly/plotly.py/pull/3142) with massive thanks to [@fcollonval](https://github.com/fcollonval) for the contribution
+  - In addition to this change, large Plotly.js bundles are now lazily loaded on-demand by JupyterLab
+- Plotly.js CDN url will now be versioned by default for HTML exports using `include_plotlyjs='cdn'` and for "connected" renderers. [#2961](https://github.com/plotly/plotly.py/pull/2961) with thanks to [@adehad](https://github.com/adehad) for the contribution
+- Recommending Kaleido by default over Orca [#3094](https://github.com/plotly/plotly.py/pull/3094)
+- Replaced `retrying` dependency with `tenacity` [#2911](https://github.com/plotly/plotly.py/pull/2911) with thanks to [@jmsmdy](https://github.com/jmsmdy) for the contribution
+- Plotly Express now always takes into account every value in `category_orders` when computing discrete mappings (color, symbol, line-dash, pattern-shapes) as well as facets, even those values which are absent in the data [#3247](https://github.com/plotly/plotly.py/pull/3247)
+
+### Added
+
+- Additions due to bumping Plotly.js from 1.58.4 to 2.1.0 (see [changelog]((https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#210----2021-06-18))):
+  - New `icicle` trace type, with thanks to [@Kully](https://github.com/Kully) and [@mtwichan](https://github.com/mtwichan) of [Zyphr](https://www.zyphr.ca/) for their contribution!
+  - New `marker.pattern` options for `bar`-like trace types with thanks to [@s417-lama](https://github.com/s417-lama) for the contribution!
+  - New `legendrank` attribute to control rank of traces within legends
+- Plotly Express' `px.bar()`, `px.histogram()` and `px.bar_polar()` now support the `pattern_shape` argument [#3252](https://github.com/plotly/plotly.py/pull/3252)
+- New Plotly Express `px.icicle()` function, with thanks to [@Kully](https://github.com/Kully) and [@mtwichan](https://github.com/mtwichan) of [Zyphr](https://www.zyphr.ca/) for their contribution! [#3256](https://github.com/plotly/plotly.py/pull/3256)
+- New functions in `plotly.colors`: `get_colorscale()` and `sample_colorscale()` [#3136](https://github.com/plotly/plotly.py/pull/3136) and [#3186](https://github.com/plotly/plotly.py/pull/3186) with thanks to [@CarlAndersson](https://github.com/CarlAndersson) for the contributions
+- Faster JSON encoding when `orjson` is present [#2955](https://github.com/plotly/plotly.py/pull/2955)
+
+### Fixed
+
+- Pandas and Numpy datetime serialization fixes [#3022](https://github.com/plotly/plotly.py/pull/3022)
+- Fixed selected points of histograms in FigureWidget [#2771](https://github.com/plotly/plotly.py/pull/2771) with thanks to [@meffmadd](https://github.com/meffmadd) for the contribution
+- Static image export now honors `layout.(width|height)`[#3240](https://github.com/plotly/plotly.py/pull/3240)
+- Improvements to "matplotlylib" conversion utility in `plotly.tools.mpl_to_plotly()` with thanks to [@fdion](https://github.com/fdion) [#3143](https://github.com/plotly/plotly.py/pull/3143)
+
+
+## [4.14.3] - 2021-01-12
+
+- `px.timeline()` now allows `hover_data` formatting of start and end times [3018](https://github.com/plotly/plotly.py/pull/3018)
+- Small change to packaging of `plotlywidget` extension for JupyterLab 3 [3021](https://github.com/plotly/plotly.py/pull/3021)
+
+## [4.14.2] - 2021-01-11
+
+### Updated
+
+- JupyterLab extensions now compatible with JupyterLab 3.x [3016](https://github.com/plotly/plotly.py/pull/3016)
+- Updated Plotly.js to version 1.58.4. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.58.4/CHANGELOG.md) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - fixes for rendering 3d plots on recent Safari versions
+  - fixes to inside ticklabels
+  - regression fixes
+
+### Fixed
+
+- `px.histogram()` Y-axis labels now take into account `histnorm` and `barnorm` [2989](https://github.com/plotly/plotly.py/pull/2989)
+- `px.histogram()` `marginal` and `facet_*` now work correctly together [3014](https://github.com/plotly/plotly.py/pull/3014)
+
+
+## [4.14.1] - 2020-12-09
+
+### Updated
+
+- Updated Plotly.js to version 1.58.2. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.58.0/CHANGELOG.md) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - fixes for new `ticklabelposition` attribute
+  - fixes for a regression related to treemaps in the previous version
+
+
+## [4.14.0] - 2020-12-07
+
+### Added
+
+- `px.imshow` now supports `facet_col` and `animation_frame` arguments for visualizing 3-d and 4-d images [2746](https://github.com/plotly/plotly.py/pull/2746)
+- `px.defaults` now supports `color_discrete_map`, `symbol_map`, `line_dash_map`, `labels` and `category_orders` as well as a `.reset()` method [2957](https://github.com/plotly/plotly.py/pull/2957)
+
+### Fixed
+
+- axes will now auto-type numeric strings as categorical data rather than linear in the default templates [2951](https://github.com/plotly/plotly.py/pull/2951)
+
+### Updated
+
+- Updated Plotly.js to version 1.58.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.58.0/CHANGELOG.md) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module. Notable changes include:
+  - a new `ticklabelposition` attribute to enable positioning tick labels inside the plotting area
+  - better support for `scaleanchor` and `matches` on cartesian axes for matched square subplots
+  - a new `autotypenumbers` attribute which is now set to `strict` in the default templates
+  - various fixes relating to `automargins` for small figures
+
+
+## [4.13.0] - 2020-11-23
+
+### Added
+- `px.choropleth`, `px.scatter_geo` and `px.line_geo` now support faceting as well as `fitbounds` and `basemap_visible` [2923](https://github.com/plotly/plotly.py/pull/2923)
+- `px.scatter_geo` and `px.line_geo` now support `geojson`/`featureidkey` input [2923](https://github.com/plotly/plotly.py/pull/2923)
+- `px.scatter_geo` now supports `symbol` [2923](https://github.com/plotly/plotly.py/pull/2923)
+- `go.Figure` now has a `set_subplots` method to set subplots on an already
+  existing figure. [2866](https://github.com/plotly/plotly.py/pull/2866)
+- Added `Turbo` colorscale and fancier swatch display functions
+  [2882](https://github.com/plotly/plotly.py/pull/2882)
+- A utility function `image_array_to_data_uri` has been added in
+  `plotly.utils`, in order to transform NumPy arrays to data b64 URIs (which
+  can be passed to the source parameter of `go.Image`, or to layout images).
+  [2879](https://github.com/plotly/plotly.py/pull/2879)
+- the `selector` argument to updater/selector functions now accepts `int`s and `str`s
+  [2894](https://github.com/plotly/plotly.py/pull/2894)
+
+
+### Updated
+
+- the JSON serialization of plotly figures has been accelerated thanks to a
+  different handling of Infinity and NaN values. For example, a figure with a
+  1000x1000 Heatmap should now serialize 2x faster. [2880](https://github.com/plotly/plotly.py/pull/2880)
+- Coding mistakes with "magic underscores" now return significantly more ergonomic error
+  messages [2843](https://github.com/plotly/plotly.py/pull/2843)
+- Error messages related to impossible subplot geometries are now much more helpful
+  [2897](https://github.com/plotly/plotly.py/pull/2897)
+
+
+### Fixed
+
+- `px.scatter_geo` support for `text` is fixed [2923](https://github.com/plotly/plotly.py/pull/2923)
+- the `x` and `y` parameters of `px.imshow` are now used also in the case where
+  an Image trace is used (for RGB data or with `binary_string=True`). However,
+  only numerical values are accepted (while the Heatmap trace allows date or
+  string values for `x` and `y`). [2761](https://github.com/plotly/plotly.py/pull/2761)
+
+
+## [4.12.0] - 2020-10-23
+
+### Added
+
+- For `add_trace`, `add_shape`, `add_annotation` and `add_layout_image`, the `row` and/or `col` argument now also accept the string `"all"`. `row="all"` adds the object to all the subplot rows and `col="all"` adds the object to all the subplot columns. ([#2840](https://github.com/plotly/plotly.py/pull/2840))
+- Shapes that reference the plot axes in one dimension and the data in another dimension can be added with the new `add_hline`, `add_vline`, `add_hrect`, `add_vrect` functions, which also support the `row="all"` and `col="all"` arguments. ([#2840](https://github.com/plotly/plotly.py/pull/2840))
+- The `add_trace`, `add_shape`, `add_annotation`, `add_layout_image`, `add_hline`, `add_vline`, `add_hrect`, `add_vrect` functions accept an argument `exclude_empty_subplots` which if `True`, only adds the object to subplots already containing traces or layout objects. This is useful in conjunction with the `row="all"` and `col="all"` arguments. ([#2840](https://github.com/plotly/plotly.py/pull/2840))
+- For all `go.Figure` functions accepting a selector argument (e.g., `select_traces`), this argument can now also be a function which is passed each relevant graph object (in the case of `select_traces`, it is passed every trace in the figure). For graph objects where this function returns true, the graph object is included in the selection. ([#2844](https://github.com/plotly/plotly.py/pull/2844))
+
+### Added
+
+- Better magic underscore error messages. For example, `some_fig.update_layout(geo_ltaxis_showgrid=True)` shows `Bad property path:
geo_ltaxis_showgrid
   ^` and lists the valid properties for `geo`.
+
+### Updated
+
+- Updated Plotly.js to version 1.57.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.57.1/CHANGELOG.md) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module.
+
+## [4.11.0] - 2020-10-01
+
+### Updated
+
+- Updated Plotly.js to version 1.56.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.56.0/CHANGELOG.md) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module.
+
+## [4.10.0] - 2020-09-10
+
+### Added
+
+- Added `plotly.io.full_figure_for_development()` and `plotly.graph_objects.Figure.full_figure_for_development()` ([#2737](https://github.com/plotly/plotly.py/pull/2737))
+
+### Updated
+
+- The JSON serialization of plotly figures had been accelerated by handling
+  differently figures with and without NaN and Inf values ([#2880](https://github.com/plotly/plotly.py/pull/2880)).
+
+### Updated
+
+- Updated Plotly.js to version 1.55.2. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.55.2/CHANGELOG.md) for more information. These changes are reflected in the auto-generated `plotly.graph_objects` module.
+- `px.imshow` has a new `binary_string` boolean argument, which passes the
+  image data as a b64 binary string when True. Using binary strings allow for
+  faster image rendering and smaller figure size. Additional optional arguments
+  `binary_backend`, `binary_format` and `binary_compression_level` control
+  how to generate the b64 string ([#2691](https://github.com/plotly/plotly.py/pull/2691)
+- `px.imshow` has a new `contrast_rescaling` argument in order to choose how
+  to set data values corresponding to the bounds of the color range
+  ([#2691](https://github.com/plotly/plotly.py/pull/2691)
+
+### Fixed
+
+- Plotly Express no longer converts datetime columns of input dataframes to UTC ([#2749](https://github.com/plotly/plotly.py/pull/2749))
+- Plotly Express has more complete support for datetimes as additional `hover_data` ([#2749](https://github.com/plotly/plotly.py/pull/2749))
+- Histogram selection behaviour with `FigureWidget` ([#2711](https://github.com/plotly/plotly.py/pull/2711)) with thanks to [@meffmadd](https://github.com/meffmadd)
+- Behaviour of `full_html()` with `html=False` ([#2469](https://github.com/plotly/plotly.py/pull/2469)) with thanks to [@tallamjr](https://github.com/tallamjr)
+- `ff.distplot()` now only computes traces that will be shown ([#2730](https://github.com/plotly/plotly.py/pull/2730)) with thanks to [@akbo](https://github.com/akbo)
+- Pandas backend `.hist()` works with latest version of Pandas ([#2713](https://github.com/plotly/plotly.py/pull/2713)) with thanks to [@Kerybas](https://github.com/Kerybas)
+
+
+## [4.9.0] - 2020-07-16
+
+### Added
+
+- Added image export support using [Kaleido](https://github.com/plotly/Kaleido). The image export backend can be configured using the new `engine` argument to `plotly.io.to_image` and `plotly.io.write_image`. The `engine` argument may be set to `"kaleido"`, `"orca"`, or `"auto"`. The default is `engine="auto"`, in which case the Kaleido backend is enabled if the `kaleido` package from PyPI is installed, otherwise Orca is used. ([#2613](https://github.com/plotly/plotly.py/pull/2613)).
+- `plotly.express.timeline()` added as an official alternative to `plotly.figure_factories.create_gantt()` ([#2626](https://github.com/plotly/plotly.py/pull/2626))
+- `create_hexbin_mapbox()` added to Figure Factories, with thanks to [@RenaudLN](https://github.com/RenaudLN) for the impressive contribution!
+- `facet_row_spacing` and `facet_col_spacing` added to Plotly Express cartesian 2d functions ([#2614](https://github.com/plotly/plotly.py/pull/2614))
+- `base` added to Plotly Express `bar` and `bar_polar` functions ([#2626](https://github.com/plotly/plotly.py/pull/2626))
+- `px.NO_COLOR` constant to override wide-form color assignment in Plotly Express ([#2614](https://github.com/plotly/plotly.py/pull/2614))
+
+### Fixed
+
+- trendline traces are now of type `scattergl` when `render_mode="webgl"` in Plotly Express ([#2614](https://github.com/plotly/plotly.py/pull/2614))
+- regression from 4.8.1 whereby `"parent"` was not accepted as part of `path` for `px.sunburst()` and `px.treemap()` ([#2640](https://github.com/plotly/plotly.py/pull/2640))
+- `create_dendrogram()` figure factory now works correctly with `scipy` 1.5.1 ([#2627](https://github.com/plotly/plotly.py/pull/2627))
+
+### Updated
+
+- Updated Plotly.js to version 1.54.6. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.54.6/CHANGELOG.md) for more information.
+- Added all cartesian-2d Plotly Express functions, plus `imshow`, to Pandas backend with `kind` option ([#2541](https://github.com/plotly/plotly.py/pull/2541))
+- `plotly.express.imshow` now uses data frame index and columns names and values to populate axis parameters by default ([#2539](https://github.com/plotly/plotly.py/pull/2539))
+- Javascript extensions are now build using Node 12, and have an updated `package-lock.json` with many fewer security warnings ([#2636](https://github.com/plotly/plotly.py/pull/2636))
+
+
+## [4.8.2] - 2020-06-26
+
+### Updated
+
+- Updated Plotly.js to version 1.54.5. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.54.5/CHANGELOG.md) for more information.
+- `add_traces()` now accepts bare `int`-like values for `rows`/`cols` as well as lists thereof ([#2546](https://github.com/plotly/plotly.py/pull/2546)), with thanks to [@MCBoarder289](https://github.com/MCBoarder289) for the contribution!
+
+### Fixed
+
+- `row`/`col` now accept `int`-like values, not strictly `int` values ([#2451](https://github.com/plotly/plotly.py/pull/2451)), with thanks to [@MCBoarder289](https://github.com/MCBoarder289) for the contribution!
+- Fixed special cases with `px.sunburst` and `px.treemap` with `path` input ([#2524](https://github.com/plotly/plotly.py/pull/2524))
+- Fixed bug in `hover_data` argument of `px` functions, when the column name is changed with labels and `hover_data` is a dictionary setting up a specific format for the hover data ([#2544](https://github.com/plotly/plotly.py/pull/2544)).
+- Made the Plotly Express `trendline` argument more robust and made it work with datetime `x` values ([#2554](https://github.com/plotly/plotly.py/pull/2554))
+- Fixed bug in `px.sunburst` and `px.treemap`: when the `color` and `values` arguments correspond to the same column, a different aggregation function has to be used for the two arguments ([#2591](https://github.com/plotly/plotly.py/pull/2591))
+- Plotly Express wide mode now accepts mixed integer and float columns ([#2598](https://github.com/plotly/plotly.py/pull/2598))
+- Plotly Express `range_(x|y)` should not impact the unlinked range of marginal subplots ([#2600](https://github.com/plotly/plotly.py/pull/2600))
+- `px.line` now sets `line_group=<variable>` in wide mode by default ([#2599](https://github.com/plotly/plotly.py/pull/2599))
+- Corrected some regex warnings ([#2577](https://github.com/plotly/plotly.py/pull/2577)), with thanks to [@georgevdd](https://github.com/georgevdd) for the contribution!
+
+
+## [4.8.1] - 2020-05-28
+
+### Fixed
+
+- Fixed the accidental removal of some functions and submodules from `plotly.colors` and `plotly.express.colors`
+
+## [4.8.0] - 2020-05-26
+
+### Added
+
+- `plotly` now provides a Plotly Express-backed Pandas-compatible plotting backend, which can be activated via `pandas.options.plotting.backend = "plotly"`. Note that it is not intended to implement every Pandas plotting function, nor is it intended to replicate the behaviour of every argument, although per the changes below, `x` and `y` should behave similarly. ([#2336](https://github.com/plotly/plotly.py/pull/2336))
+- New datasets have been added to `plotly.express.data`: `stocks`, `experiment`, `medals_wide` and `medals_long`. ([#2336](https://github.com/plotly/plotly.py/pull/2336))
+- plotly `go.Figure` and `go.FigureWidget` now have a `_repr_html_` and a `_repr_mimebundle_` method, which are [standard hooks for integration in systems based on IPython](https://ipython.readthedocs.io/en/stable/config/integrating.html). In particular, with `_repr_html_` plotly figures can now be used within [sphinx-gallery](https://sphinx-gallery.github.io/stable/index.html) without any scraper. These additions should not change anything to the way plotly figures are displayed in notebook environments, since the `_ipython_display_` method (already present in earlier versions) takes precedence over the new methods.
+
+### Updated
+
+- The behaviour of the `x`, `y`, `orientation`, `histfunc`, `violinmode`, `boxmode` and `stripmode` arguments for 2d-cartesian functions in Plotly Express (i.e. `scatter`, `line`, `area`, `bar`, `histogram`, `violin`, `box`, `strip`, `funnel`, `density_heatmap` and `density_contour`) has been refined ([#2336](https://github.com/plotly/plotly.py/pull/2336)):
+    - if `x` or `y` is missing, it is inferred to be the index of `data_frame` if `data_frame` provided, otherwise a stable index of integers starting at 0. In the case of `px.bar`, if the provided value is not continuous, the missing value is treated as a column of 1s named "count", so as to behave more like `px.histogram` and to avoid sizing the resulting bars differently based on their position in the column. Previously, missing values defaulted to integers starting at 0 *per trace* which made it potentially inconsistent or misleading.
+    - if `x` (`y`) is missing, `orientation` now defaults to `v` (`h`). Previously it always defaulted to `v` but this is not considered a breaking change, as the cases in which it now defaults to `h` caused unreadable output if set to `v`.
+    - if both `x` and `y` are provided and one of them does not contain continuous values, `orientation` defaults to the value perpendicular to that axis. Previously it always defaulted to `v` but this is not considered a breaking change, as the cases in which it now defaults to `h` caused unreadable output if set to `v`.
+    - if either `x` or `y` (but not both) may now be provided as a list of column references into `data_frame` or columns of data, in which case the imputed data frame will be treated as "wide" data and `melt()`ed internally before applying the usual mapping rules, with function-specific defaults.
+    - if neither `x` nor `y` is provided but `data_frame` is, the data frame will be treated as "wide" with defaults depending on the value of `orientation` (and `orientation` has accordingly been added to `scatter`, `line`, `density_heatmap`, and `density_contour` for this purpose). Previously this would have resulted in an empty figure.
+    - if both `x` and `y` are provided to `histogram`, and if `x`, `y` and `z` are provided to `density_heatmap` or `density_contour`, then `histfunc` now defaults to `sum` so as to avoid ignoring the provided data, and to cause `histogram` and `bar` to behave more similarly.
+    - `violinmode`, `boxmode` and `stripmode` now default to `overlay` if `x` (`y`) in `v` (`h`) orientation is also mapped to `color`, to avoid strange spacing issues with the previous default of `group` in all cases.
+- The Plotly Express arguments `color_discrete_map`, `symbol_map` and `line_dash_map` now accept the string `"identity"` which causes the corresponding input data to be used as-is rather than mapped into `color_discrete_sequence`, `symbol_sequence` or `line_dash_sequence`, respectively. ([#2336](https://github.com/plotly/plotly.py/pull/2336))
+- Plotly Express now accepts `px.Constant` or `px.Range` objects in the place of column references so as to express constant or increasing integer values. ([#2336](https://github.com/plotly/plotly.py/pull/2336))
+
+
+## [4.7.1] - 2020-05-08
+
+### Fixed
+
+ - Fix `AttributeError: module 'plotly.graph_objs' has no attribute 'FigureWidget'` exception on `from plotly.graph_objs import *` when `ipywidgets` is not installed. Error also occurred when importing `plotly.figure_factor`. It is now possible to import `plotly.graph_objs.FigureWidget` when `ipywidgets` is not installed, and an informative `ImportError` exception will be raised in the `FigureWidget` constructor ([#2443](https://github.com/plotly/plotly.py/issues/2443), [#1111](https://github.com/plotly/plotly.py/issues/1111)).
+ - Fix `TypeError: unhashable type: 'Template'` during `Figure` construction when `plotly.io.templates.default` is set to a `Template` object rather than a string.
+
+
+## [4.7.0] - 2020-05-06
+
+### Updated
+
+- Updated Plotly.js to version 1.54.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.54.1/CHANGELOG.md) for more information. The main new feature of this version of Plotly.js is the possibility to draw layout shapes, using custom dragmodes and corresponding modebar buttons.
+- The sphinx-gallery scraper has been updated to work with different structures of galleries [#2149](https://github.com/plotly/plotly.py/pull/2419)
+
+### Added
+
+- The `hover_data` parameter of `px` functions can now be a dictionary. This makes it possible to skip hover information for some arguments or to change the formatting of hover information [#2377](https://github.com/plotly/plotly.py/pull/2377).
+- It's now possible to build a development version of Plotly.py against the build artifacts from a non-`master` branch of Plotly.js, which makes for faster QA and development cycles [#2349](https://github.com/plotly/plotly.py/pull/2349). Thanks [@zouhairm](https://github.com/zouhairm) for this Pull Request!
+
+### Fixed
+
+- Plotly Express trendlines now handle missing data correctly [#2357](https://github.com/plotly/plotly.py/pull/2357)
+
+### Performance
+
+This version includes several performance improvements ([#2368](https://github.com/plotly/plotly.py/pull/2368), [#2403](https://github.com/plotly/plotly.py/pull/2403)).
+
+ - Child graph objects (e.g. `figure.layout.xaxis`) are no longer created eagerly during graph object construction. Instead, they are created lazily the first time the property is accessed.
+ - Property validation is now disabled for select internal operations.
+ - When used with Python 3.7 and above, plotly.py now takes advantage of [PEP-562](https://www.python.org/dev/peps/pep-0562/) to perform submodule imports lazily.  This dramatically improves import times.
+
+## [4.6.0] - 2020-03-31
+
+### Updated
+
+ - Updated Plotly.js to version 1.53.0. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.53.0/CHANGELOG.md) for more information on the numerous new features and bug fixes of this release. The main features of the Plotly.js release are
+    - Introduce range breaks on date axes (for example, to remove week-ends) via `layout.xaxis.rangebreaks`
+    - Introduce a new unified x (or y) hovermode (`layout.hovermode="x unified"`), in which the hover box shows the information for all traces at a given x (or y) position
+    - Add `node.customdata` and `link.customdata` to sankey traces
+- Updated [contributing notes](https://github.com/plotly/plotly.py/blob/master/CONTRIBUTING.md) for more explanations on how to contribute to plotly.py [#2290](https://github.com/plotly/plotly.py/pull/2290). Please give feedback on these notes!
+- Updated documentation examples [#2325](https://github.com/plotly/plotly.py/pull/2325), and to show how to color links in Sankey diagrams [#2291](https://github.com/plotly/plotly.py/pull/2291).
+- Special thanks to [@SylwiaOliwia2](https://github.com/SylwiaOliwia2) and [@dangercrow](https://github.com/dangercrow) for improving our documentation!
+
+
+### Added
+
+- `px.imshow` now accepts [`xarray`](http://xarray.pydata.org/) inputs, with metadata being used for axis labels, hover and colorbar [#2166](https://github.com/plotly/plotly.py/pull/2166)
+
+
+### Fixed
+
+- Fixed handling of `opacity` in `px.pie`, `px.funnel_area`, `px.density_mapbox`, `px.funnel` [#2317](https://github.com/plotly/plotly.py/pull/2317), with thanks to [@tvaucher](https://github.com/tvaucher) for the contribution!
+
+## [4.5.4] - 2020-03-11
+
+### Updated
+
+- The documentation of the API https://plot.ly/python-api-reference/ now
+  documents the full API [#2243](https://github.com/plotly/plotly.py/pull/2243)
+- New documentation examples for facets [#2235](https://github.com/plotly/plotly.py/pull/2235), legend [#2227](https://github.com/plotly/plotly.py/pull/2227), subplots [#2226](https://github.com/plotly/plotly.py/pull/2226), axes [#2234](https://github.com/plotly/plotly.py/pull/2234) and histograms [#2242](https://github.com/plotly/plotly.py/pull/2242).
+  Thanks to [@SylwiaOliwia2](https://github.com/@SylwiaOliwia2) for all these great
+  examples!
+
+### Fixed
+
+- Jupyterlab extension now compatible with both Jupyterlab 1.2 and 2.0 [#2261](https://github.com/plotly/plotly.py/pull/2261) with thanks to [@consideRatio](https://github.com/consideRatio) for the contribution!
+- Fixed a bug when using boolean values for the color argument of px functions [#2127](https://github.com/plotly/plotly.py/pull/2127)
+- Corrected import bug which was occurring with old versions of ipywidgets [#2265](https://github.com/plotly/plotly.py/pull/2265)
+- Fixed python 3.8 syntax warning [#2262](https://github.com/plotly/plotly.py/pull/2262), with thanks to [@sgn](https://github.com/sgn) for the contribution!
+
+## [4.5.3] - 2020-03-05
+
+### Updated
+
+- Removed development dependency on `nose` testing framework [#2217](https://github.com/plotly/plotly.py/pull/2217)
+
+### Fixed
+
+ - JupyterLab extension now compatible with JupyterLab 2.0 [#2245](https://github.com/plotly/plotly.py/pull/2245) with thanks to [@consideRatio](https://github.com/consideRatio) for the contribution!
+
+## [4.5.2] - 2020-02-24
+
+### Fixed
+
+ - Fix build errors in JupyterLab extension by pinning version of `@types/plotly.js` [#2223](https://github.com/plotly/plotly.py/issues/2223)
+
+## [4.5.1] - 2020-02-19
+
+### Updated
+
+ - Updated Plotly.js to version 1.52.2. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/releases/tag/v1.52.2) for more information on bug fixes.
+
+### Fixed
+
+ - `update_annotations`, `update_shapes` and `update_layout_images` now no longer require the `patch` argument, as per the docstring [#2167](https://github.com/plotly/plotly.py/issues/2167)
+ - `px.defaults` no longer accepts arbitrary keys [#2168](https://github.com/plotly/plotly.py/issues/2168)
+ - better error message when `pandas` is not installed [#2125](https://github.com/plotly/plotly.py/issues/2125)
+ - support columns of numerical type in `path` argument of `px.sunburst`/`px.treemap` and add values of `color` column in hoverlabel for `px.sunburst`/`px.treemap` [#2133](https://github.com/plotly/plotly.py/pull/2133)
+
+
+
+## [4.5.0] - 2020-01-22
+
+### Updated
+ - Updated Plotly.js to version 1.52.1. See the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.52.0/CHANGELOG.md#1520----2020-01-08) for more information on numerous new attribute and bug fixes.
+ - Plotly Express uses the new `legend.title` attribute and so now has shorter trace `name`s [#2051](https://github.com/plotly/plotly.py/pull/2051)
+ - The heuristic used by `px.parallel_categories` to determine which columns of the data frame to draw has been changed and made more configurable with the `dimensions_max_cardinality` argument [#2102](https://github.com/plotly/plotly.py/pull/2102)
+ - The `simple_white` colorbar styling has been streamlined [#2110](https://github.com/plotly/plotly.py/pull/2110)
+ - The `jupyterlab-plotly` and `plotlywidget` JupyterLab extensions should now share code when installed together, resulting in smaller JupyterLab vendor bundle sizes [#2103](https://github.com/plotly/plotly.py/pull/2103)
+
+### Fixed
+
+ - Plotly Express `category_orders` are now respected independent of the contents of the data set [#2084](https://github.com/plotly/plotly.py/issues/2084)
+ - `go.Scattergl` symbols now accept numeric specification [#1928](https://github.com/plotly/plotly.py/issues/1928)
+ - `px.scatter` trendline coefficients are now more readable [#1984](https://github.com/plotly/plotly.py/issues/1984)
+ - Built-in cyclical color scales now all have identical start and end points [#2016](https://github.com/plotly/plotly.py/pulls/2016)
+
+
+### Added
+ - `px.sunburst` and `px.treemap` now accept a `path` argument for passing
+   columns of a rectangular dataframe to build the charts [#2006](https://github.com/plotly/plotly.py/pull/2006)
+ - `px.choropleth` now accepts a user-supplied `geojson` attribute [#2057](https://github.com/plotly/plotly.py/pull/2057)
+ - `px.choropleth` and `px.choropleth_mapbox` now accept `featureidkey` to specify the GeoJSON field to use to match `locations` [#2057](https://github.com/plotly/plotly.py/pull/2057)
+ - `px.choropleth` and `px.choropleth_mapbox` now accept discrete color [#2057](https://github.com/plotly/plotly.py/pull/2057)
+ - `px.bar_polar` now accepts continuous color [#2017](https://github.com/plotly/plotly.py/pull/2017)
+ - New `layout.uniformtext` attribute allows for automatic standardization of font sizes across bar-like and hierarchical traces. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/v1.52.0/CHANGELOG.md#1520----2020-01-08)
+ for more information
+
+## [4.4.1] - 2019-12-10
+
+### Fixed
+ - Fixed improper JSON encoding exception when the `pillow` module not installed [#1993](https://github.com/plotly/plotly.py/pull/1993)
+
+## [4.4.0] - 2019-12-10
+
+### Updated
+ - Updated Plotly.js to version 1.51.2. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1512----2019-11-25)
+ for more information
+ - The tutorials of the [plotly.py documentation](https://plot.ly/python/) are
+   now in the main [plotly.py Github repository](https://github.com/plotly/plotly.py). Contributions in order to improve or extend the documentation are very welcome!
+ - `plotly.express` generated plots no longer have a default height of 600 pixels, instead they inherit the default height of regular figures [#1990](https://github.com/plotly/plotly.py/pull/1990). To restore the old behavior, set `px.defaults.height=600` once per session, or set the `height` keyword argument to any `px.function()` to 600.
+
+### Fixed
+
+ - Fixed a plotly.express input bug when using data frame indices[#1934](https://github.com/plotly/plotly.py/pull/1934)
+ - Fixed how to display facet labels with plotly express [#1966](https://github.com/plotly/plotly.py/pull/1966)
+ - Fixed a bug to use correctly the `zmin/zmax` parameter in `px.imshow` for single-channel images [#1981](https://github.com/plotly/plotly.py/pull/1981)
+ - Clipped docstring width for better display in Jupyterlab [#1939](https://github.com/plotly/plotly.py/pull/1939). Thank you @joelostblom!
+ - Fixed a bug in the case of external orca server [#1915](https://github.com/plotly/plotly.py/pull/1915) thank you @dev-dsp!
+
+### Added
+
+ - Extended the plotly.express functional API with 7 new functions: `px.pie`,
+   `px.sunburst`, `px.treemap`, `px.funnel`, and `px.funnel_area` ([#1909](https://github.com/plotly/plotly.py/pull/1909)) `px.density_mapbox` and
+   `px.choropleth_mapbox` [#1937](https://github.com/plotly/plotly.py/pull/1937).
+ - plotly.express mapbox functions in plotly.express have new arguments `center` and `mapbox_style` [#1937](https://github.com/plotly/plotly.py/pull/1937).
+ - plotly.express polar plots (`scatter_polar`, `line_polar`, `bar_polar`) now
+   have a `range_theta` keyword argument for representing only an angular
+section [#1969](https://github.com/plotly/plotly.py/pull/1969).
+ - All continuous colorscales now accept a `_r` suffix that reverses their direction [#1933](https://github.com/plotly/plotly.py/pull/1933)
+ - Docstrings of plotly.py are now doctested [#1921](https://github.com/plotly/plotly.py/pull/1921).
+ - Reversing a predefined colorscale by appending `_r` to its name [#1933](https://github.com/plotly/plotly.py/pull/1933)
+
+## [4.3.0] - 2019-11-11
+
+### Updated
+ - Updated Plotly.js to version 1.51.1. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1511----2019-11-04)
+ for more information
+ - Improved propagation of empty templates ([#1892](https://github.com/plotly/plotly.py/pull/1892))
+ - Update the `add_annotations`/`add_shapes`/`add_images` methods to no longer default to adding objects in paper coordinates. This allows plotly.js to determine the default reference frame based on context ([#1888](https://github.com/plotly/plotly.py/pull/1888))
+ - Use the default template's background color for displaying color swatches ([#1872](https://github.com/plotly/plotly.py/pull/1872)). Special thanks to [@joelostblom](https://github.com/joelostblom) for this contribution!
+ - Improved docstrings ([#1835](https://github.com/plotly/plotly.py/pull/1835), [#1837](https://github.com/plotly/plotly.py/pull/1837))
+
+### Added
+ - Added image trace type ([plotly.js#4289](https://github.com/plotly/plotly.js/pull/4289), [plotly.js#4307](https://github.com/plotly/plotly.js/pull/4307), [plotly.js#4313](https://github.com/plotly/plotly.js/pull/4313), [plotly.js#4319](https://github.com/plotly/plotly.js/pull/4319))
+ - Added matplotlib-style `plotly.express.imshow` convenience function to display images and heatmaps ([#1855](https://github.com/plotly/plotly.py/pull/1855), [#1885](https://github.com/plotly/plotly.py/pull/1885))
+ - Added matplotlib-style `simple_white` template ([#1864](https://github.com/plotly/plotly.py/pull/1864)). Special thanks to [@joelostblom](https://github.com/joelostblom) for this contribution.
+ - Added support for using an externally managed orca server for image export features ([#1850](https://github.com/plotly/plotly.py/pull/1850)). Special thanks to [@miriad](https://github.com/miriad) for this contribution.
+ - Added facet wrapping support to plotly express functions using the new `facet_col_wrap` argument ([#1838](https://github.com/plotly/plotly.py/pull/1838))
+
+## [4.2.1] - 2019-10-18
+### Fixed
+ - Fixed regression in 4.2.0 that caused all figure factories to require that scikit-image be installed ([#1832](https://github.com/plotly/plotly.py/pull/1832))
+
+## [4.2.0] - 2019-10-16
+
+### Updated
+ - Updated Plotly.js to version 1.50.1. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1501----2019-10-15)
+ for more information
+
+### Added
+ - Added `treemap` trace type ([plotly.js#4185](https://github.com/plotly/plotly.js/pull/4185), [plotly.js#4219](https://github.com/plotly/plotly.js/pull/4219), [plotly.js#4227](https://github.com/plotly/plotly.js/pull/4227), [plotly.js#4242](https://github.com/plotly/plotly.js/pull/4242))
+ - Added `add_*`/`select_*`/`for_each_*`/`update_*` convenience figure methods for annotations, shapes, and images ([#1817](https://github.com/plotly/plotly.py/pull/1817))
+ - Added `overwrite` kwarg to `update*` figure methods to fully replace property values, rather than update them recursively ([#1726](https://github.com/plotly/plotly.py/pull/1726))
+ - Added `texttemplate` attribute to all traces that support on-graph text ([plotly.js#4071](https://github.com/plotly/plotly.js/pull/4071), [plotly.js#4179](https://github.com/plotly/plotly.js/pull/4179))
+ - Added date custom formatting in `hovertemplate` and `texttemplate` e.g. `'%{x|%b %-d, %Y}'` ([plotly.js#4071](https://github.com/plotly/plotly.js/pull/4071))
+ - Added transition support to `bar` trace length, width, on-graph text positioning, marker style and error bars ([plotly.js#4180](https://github.com/plotly/plotly.js/pull/4180), [plotly.js#4186](https://github.com/plotly/plotly.js/pull/4186))
+ - Added support for legend scrolling via touch interactions ([plotly.js#3873](https://github.com/plotly/plotly.js/pull/3873), [plotly.js#4214](https://github.com/plotly/plotly.js/pull/4214))
+
+### Fixed
+ - Fixed `iframe` renderer on Python 2 ([#1822](https://github.com/plotly/plotly.py/pull/1822))
+ - Fixed use of merged templates in plotly.express ([#1819](https://github.com/plotly/plotly.py/pull/1819))
+
+## [4.1.1] - 2019-09-02
+
+### Updated
+ - Updated Plotly.js to version 1.49.4. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1494----2019-08-22)
+ for more information
+ - The width of a figure produced by the `create_gantt` figure factory now resizes responsively ([#1724](https://github.com/plotly/plotly.py/pull/1724))
+
+### Fixed
+ - The name of the steps property of `graph_objects.indicator.Gauge` has been renamed from `stepss` to `steps`
+ - Avoid crash in iframe renderers when running outside iPython ([#1723](https://github.com/plotly/plotly.py/pull/1723))
+
+## [4.1.0] - 2019-08-06
+
+### Updated
+ - Updated Plotly.js to version 1.49.1. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1491----2019-07-31)
+ for more information.
+ - Bars in the figures produced by the `create_gantt` figure factory may now be hidden by clicking on the legend ([#1665](https://github.com/plotly/plotly.py/pull/1665)). Special thanks to [@csabaszan](https://github.com/csabaszan) for this contribution!
+ - Improved performance when serializing figures containing large numpy arrays ([#1690](https://github.com/plotly/plotly.py/pull/1690)). Special thanks to [@miriad](https://github.com/miriad) for this contribution!
+
+### Added
+- Added new renderers for displaying figures from within the Databricks and CoCalc notebook services ([#1703](https://github.com/plotly/plotly.py/pull/1703))
+- Added `indicator` traces ([plotly/plotly.js#3978](https://github.com/plotly/plotly.js/pull/3978))
+- Added `choroplethmapbox` traces ([plotly/plotly.js#3988](https://github.com/plotly/plotly.js/pull/3988))
+- Added `densitymapbox` traces ([plotly/plotly.js#3993](https://github.com/plotly/plotly.js/pull/3993))
+- Added new mapbox `style` values: `open-street-map`, `carto-positron`, `carto-darkmatter`,
+  `stamen-terrain`, `stamen-toner`, `stamen-watercolor` and `white-bg`
+  that do not require a Mapbox access token ([plotly/plotly.js#3987](https://github.com/plotly/plotly.js/pull/3987), [plotly/plotly.js#4068](https://github.com/plotly/plotly.js/pull/4068))
+- Added support for `sourcetype` value `raster` and `image` and `type` `raster`
+  for mapbox layout layers ([plotly/plotly.js#4006](https://github.com/plotly/plotly.js/pull/4006))
+- Added `below` attribute to `scattermapbox` traces ([plotly/plotly.js#4058](https://github.com/plotly/plotly.js/pull/4058))
+- Added support for `below: 'traces'` in mapbox layout layers ([plotly/plotly.js#4058](https://github.com/plotly/plotly.js/pull/4058))
+- Added `sourceattribution` attribute to mapbox layout layers ([plotly/plotly.js#4069](https://github.com/plotly/plotly.js/pull/4069))
+- Added `labelangle` and `labelside` attributes to `parcoords` traces ([plotly/plotly.js#3966](https://github.com/plotly/plotly.js/pull/3966))
+- Added `doubleClickDelay` config option ([plotly/plotly.js#3991](https://github.com/plotly/plotly.js/pull/3991))
+- Added `showEditInChartStudio` config option ([plotly/plotly.js#4061](https://github.com/plotly/plotly.js/pull/4061))
+
+### Fixed
+ - Fixed incorrect facet row ordering in figures generated by plotly.express functions ([plotly/plotly_express#129](https://github.com/plotly/plotly_express/issues/129))
+ - Fixed "The truth value of an array with more than one element is ambiguous" error when specifying subplot titles as numpy array of strings ([#1685](https://github.com/plotly/plotly.py/pull/1685)). Special thanks to [@MrQubo](https://github.com/MrQubo) for this contribution!
+ - The `line_3d` plotly express function was not visible by default when importing `*` from `plotly.express` ([#1667](https://github.com/plotly/plotly.py/pull/1667/files))
+
+
+## [4.0.0] - 2019-07-16
+
+This is a major release that includes many new features, and a few breaking changes. See the [version 4 announcement](https://community.plot.ly/t/introducing-plotly-py-4-0-0rc1/25639) for a summary of the important changes.
+
+### Updated
+ - Updated Plotly.js to version 1.48.3. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1483----2019-06-13)
+ for more information.
+
+### Added
+ - The Plotly Express tech preview (https://medium.com/@plotlygraphs/introducing-plotly-express-808df010143d) has been integrated as the `plotly.express` module ([#1613](https://github.com/plotly/plotly.py/pull/1613))
+ - Added a new renderers framework the supports rendering figure in a wide variety of contexts ([#1474](https://github.com/plotly/plotly.py/pull/1474)). See the new [Displaying Plotly Figures](https://plot.ly/python/next/renderers) documentation page for more information.
+ - Added `plotly.io.write_html` and `plotly.io.to_html` functions for exporting figures to HTML ([1474](https://github.com/plotly/plotly.py/pull/1474)). Also available as `.write_html` and `.to_html` figure methods.
+ - Added new figure methods for batch updating figure properties (`update_layout`, `update_traces`, `update_xaxes`, etc.) ([#1624](https://github.com/plotly/plotly.py/pull/1624)).  See the new [Creating and Updating Figures](https://plot.ly/python/next/creating-and-updating-figures/) documentation page for more details.
+ - Added support for all trace types in `make_subplots` ([#1528](https://github.com/plotly/plotly.py/pull/1528))
+ - Added support for secondary y-axes in `make_subplots` ([#1564](https://github.com/plotly/plotly.py/pull/1564))
+ - Support passing a scalar trace object (rather than a list or tuple of trace objects) as the `data` property to the `Figure` constructor ([#1614](https://github.com/plotly/plotly.py/pull/1614))
+ - Added dictionary-style `.pop` method to graph object classes ([#1614](https://github.com/plotly/plotly.py/pull/1614))
+ - New `jupyterlab-plotly` JupyterLab extension for rendering figures in JupyterLab. Replaces the `@jupyterlab/plotly-extension` extension, and includes JupyterLab 1.0 support.
+ - Added new suite of built-in colorscales to the `plotly.colors` module, and support for specifying this wide range of colorscales by name. Also added support for specifying colorscales as a list of colors, in which case the color spacing is assumed to be uniform ([#1647](https://github.com/plotly/plotly.py/pull/1647)).
+ - Added `sphinx-gallery` renderer for embedding plotly figures in [Sphinx-Gallery](https://sphinx-gallery.github.io/) ([#1577](https://github.com/plotly/plotly.py/pull/1577), [plotly/plotly-sphinx-gallery](https://github.com/plotly/plotly-sphinx-gallery)).
+
+### Removed
+ - The follow modules for interfacing with the Chart Studio cloud service have been removed from plotly.py and moved to the new `chart-studio` distribution package.  The following modules have been moved to a new top-level `chart_studio` module:
+   - `plotly.plotly` -> `chart_studio.plotly`
+   - `plotly.api` -> `chart_studio.api`
+   - `plotly.dashboard_objs` -> `chart_studio.dashboard_objs`
+   - `plotly.grid_objs` -> `chart_studio.grid_objs`
+   - `plotly.presentation_objs` -> `chart_studio.presentation_objs`
+ - The legacy `plotly.widgets.GraphWidget` class for displaying online figures hosted by Chart Studio as ipywidgets has been removed. Please use the offline, and much more capable, `plotly.graph_objects.FigureWidget` class instead.
+ - The `fileopt` argument to `chart_studio.plotly.plot` has been removed, so in-place modifications to previously published figures are no longer supported, and a figure will always overwrite a figure with the same name.
+
+### Changed
+ - The `'plotly'` template is used as the default theme across all figures.
+ - In order to reduce the size of the core `plotly` distribution package, the bundled geographic shape files used by the `create_choropleth` figure factory have been moved to a new optional `plotly-geo` distribution package ([1604](https://github.com/plotly/plotly.py/pull/1604))
+ - For consistency with other figure factories, the `create_choropleth`  and `create_gantt` figure factories now always returns `Figure` objects, rather than dictionaries ([#1600](https://github.com/plotly/plotly.py/pull/1600), [#1607](https://github.com/plotly/plotly.py/pull/1607)).
+ - Figure add trace methods (`.add_trace`, `.add_traces`, `.add_scatter`, etc.) now return a reference to the calling figure, rather than the newly created trace ([#1624](https://github.com/plotly/plotly.py/pull/1624))
+ - `plotly.tools.make_subplots` has been moved to `plotly.subplots.make_subplots`, though it is still available at the previous location for backward compatibility
+ - The `plotly.graph_objs` module has been moved to `plotly.graph_objects`, though it is still available at the previous location for backward compatibility ([#1614](https://github.com/plotly/plotly.py/pull/1614))
+ - Trace `uid` properties are only generated automatically when a trace is added to a `FigureWidget`.  When a trace is added to a standard `Figure` graph object the input `uid`, if provided, is accepted as is ([#1580](https://github.com/plotly/plotly.py/pull/1580)).
+ - `datetime` objects that include timezones are not longer converted to UTC ([#1581](https://github.com/plotly/plotly.py/pull/1581))
+ - When a tuple property (e.g. `layout.annotations`) is updated with a list/tuple that is longer than the current value, the extra elements are appended to the end of the tuple.
+
+### Fixed
+ - Fixed visibility of `bar` trace error bars in built-in templates ([1656](https://github.com/plotly/plotly.py/pull/1656))
+
+
+## [3.10.0] - 2019-05-31
+
+### Updated
+ - Updated Plotly.js to version 1.48.1. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1481----2019-05-30)
+ for more information.
+
+### Added
+ - Added funnel trace
+ ([plotly/plotly.js#3817](https://github.com/plotly/plotly.js/pull/3817),
+ [plotly/plotly.js#3911](https://github.com/plotly/plotly.js/pull/3911))
+ - Added funnelarea traces
+ ([#3876](https://github.com/plotly/plotly.js/pull/3876),
+ [#3912](https://github.com/plotly/plotly.js/pull/3912))
+ - Added support for shared color axes via coloraxis attributes in the layout
+ ([#3803](https://github.com/plotly/plotly.js/pull/3803),
+ [#3786](https://github.com/plotly/plotly.js/pull/3786),
+ [#3901](https://github.com/plotly/plotly.js/pull/3901),
+ [#3916](https://github.com/plotly/plotly.js/pull/3916))
+ - Added support for sorting categorical cartesian axes by value
+ ([#3864](https://github.com/plotly/plotly.js/pull/3864))
+ - Added `bingroup` to `histogram`, `histogram2d` and `histogram2dcontour`
+ to group traces to have compatible auto-bin values
+ ([#3845](https://github.com/plotly/plotly.js/pull/3845))
+ - Add legend `itemclick` and `itemdoubleclick` attributes to set or disable
+ the legend item click and double-click behavior
+ ([#3862](https://github.com/plotly/plotly.js/pull/3862))
+ - Added support for calling orca through [Xvfb](https://www.x.org/releases/X11R7.6/doc/man/man1/Xvfb.1.xhtml)
+ to support static image export on Linux when X11 is not available
+ ([#1523](https://github.com/plotly/plotly.py/pull/1523)).
+
+### Fixed
+ - Fixed `PlotlyJSONEncoder` encoding error when `simplejson` is installed
+ ([#1556](https://github.com/plotly/plotly.py/issues/1556),
+ [#1561](https://github.com/plotly/plotly.py/pull/1561))
+ - HTML export now honors the figure height specified in the figure template
+ ([#1560](https://github.com/plotly/plotly.py/issues/1560))
+ - Fixed display height of figure displayed in JupyterLab
+ ([#1572](https://github.com/plotly/plotly.py/issues/1572),
+ [#1571](https://github.com/plotly/plotly.py/pull/1571))
+ - Fixed honouring of the `validate=False` option for all renderer types
+ ([#1576](https://github.com/plotly/plotly.py/pull/1576))
+
+## [3.9.0] - 2019-04-19
+
+### Updated
+ - Updated Plotly.js to version 1.47.4. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1474----2019-04-25)
+ for more information.
+
+
+### Added
+ - Added "magic underscore" support for specifying nested figure properties
+ ([#1534](https://github.com/plotly/plotly.py/pull/1534))
+ - Added `select_traces`, `for_each_trace`, and `update_traces` figure
+ methods for accessing and updating traces by subplot location and trace
+ properties
+ ([#1534](https://github.com/plotly/plotly.py/pull/1534))
+ - Added `select_*`, `for_each_*`, and `update_*` figure methods for
+ accessing and updating subplot objects (`xaxis`, `scene`, `polar`, etc)
+ ([#1548](https://github.com/plotly/plotly.py/pull/1548))
+ - Added support for Dash Design Kit style color specifications
+ ([#1541](https://github.com/plotly/plotly.py/pull/1541)). Thanks to
+ [@wbrgss](https://github.com/wbrgss) for this contribution!
+ - Added support for the `plotly_unselect` plotly.js event in a new
+ `on_unselect` trace method
+ ([#1542](https://github.com/plotly/plotly.py/pull/1542)). Thanks to
+ [@denphi](https://github.com/denphi) for this contribution!
+
+### Changed
+ - Changed the default colorscale to be `plasma` for the `plotly`, `plotly_white`, and
+ `plotly_dark` templates for plotly.py version 4
+ ([#1274](https://github.com/plotly/plotly.py/issues/1274),
+ [#1549](https://github.com/plotly/plotly.py/pull/1549))
+ - Reordered the default colorway for the `plotly`, `plotly_white`, and
+ `plotly_dark` templates for plotly.py version 4
+ ([#1549](https://github.com/plotly/plotly.py/pull/1549))
+
+### Fixed
+ - Fixed package listing in setup.py
+ ([#1543](https://github.com/plotly/plotly.py/pull/1543)).  Thanks to
+ [@jakevdp](https://github.com/jakevdp) for this contribution!
+ - Fixed built-in templates so that `heatmap` colorscales can be overridden
+ without specifying `autocolorscale=False`
+ ([#1454](https://github.com/plotly/plotly.py/issues/1454),
+ [#1549](https://github.com/plotly/plotly.py/pull/1549))
+ - Fix `UnboundLocalError` error in the presence of a missing or corrupt
+ `~/.plotly/.config` file
+ ([#1551](https://github.com/plotly/plotly.py/pull/1551))
+ - Fixed error when combining `sankey` traces with cartesian subplots
+ ([#1527](https://github.com/plotly/plotly.py/issues/1527),
+ [plotly/plotly.js#3802](https://github.com/plotly/plotly.js/pull/3802))
+
+
+## [3.8.1] - 2019-04-19
+
+### Updated
+ - Updated Plotly.js to version 1.47.3. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#plotlyjs-changelog)
+ for more information.
+
+### Fixed
+ - Fix MathJax rendering in Firefox ([plotly/plotly.js#3783](https://github.com/plotly/plotly.js/pull/3783))
+ - Fix vertical responsive resizing in exported HTML files
+ ([#1524](https://github.com/plotly/plotly.py/issues/1524),
+ [1525](https://github.com/plotly/plotly.py/pull/1525))
+
+### Changed
+ - Reverted change to `layout.legend.itemsizing = 'constant'` in built-in templates
+ that was made in 3.8.0. This resulted in unexpectedly large legend entries in
+ some common cases ([#1526](https://github.com/plotly/plotly.py/pull/1526))
+
+## [3.8.0] - 2019-04-15
+
+### Updated
+ - Updated Plotly.js to version 1.47.1. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1471----2019-04-10)
+ for more information.
+
+
+### Added
+ - Three new trace types: `sunburst` ([plotly/plotly.js#3594](https://github.com/plotly/plotly.js/pull/3594)),
+ `waterfall` ([plotly/plotly.js#3531](https://github.com/plotly/plotly.js/pull/3531)),
+ and `volume` ([plotly/plotly.js#3488](https://github.com/plotly/plotly.js/pull/3488)).
+ - New `plotly.io.to_html` and `plotly.io.write_html` functions to export
+ figures as html ([#1474](https://github.com/plotly/plotly.py/pull/1474)).
+ - Added `animation_opts` argument to `plotly.offline.plot` and
+ `plotly.offline.iplot` to control the auto-play animation settings
+ ([#1503](https://github.com/plotly/plotly.py/pull/1503)).  Special thanks
+ to [@TakodaS](https://github.com/TakodaS) for this contribution!
+
+
+### Fixed
+ - Fix race condition when checking the permissions of the `.plotly` settings
+ directory ([#1498](https://github.com/plotly/plotly.py/pull/1498)). Special
+ thanks to [@pb-cdunn](https://github.com/pb-cdunn) for this contribution!
+ - Fix `OSError` when processing time series data using Python 3.7+
+ ([#1402](https://github.com/plotly/plotly.py/issues/1402),
+ [#1501](https://github.com/plotly/plotly.py/pull/1501))
+
+### Updated
+ - Align hoverlabels left and set legend items to constant-size in builtin
+ themes ([#1520](https://github.com/plotly/plotly.py/pull/1520))
+
+## [3.7.1] - 2019-03-19
+
+### Fixed
+ - Fixed `.update` on numbered axis objects for Python < 3.6
+ ([#1462](https://github.com/plotly/plotly.py/issues/1462),
+ [#1464](https://github.com/plotly/plotly.py/pull/1464))
+
+## [3.7.0] - 2019-03-08
+
+### Updated
+ - Updated Plotly.js to version 1.45.2. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1452----2019-03-07)
+ for more information.
+
+### Added
+ - Added new `auto_play` argument to offline `plot` and `iplot` to control
+ whether figures with frames are automatically animated when the figure is
+ loaded
+ ([#1447](https://github.com/plotly/plotly.py/pull/1447))
+ - Added support for uploading "offline" animations (those with inline data
+ arrays rather than grid references) to Chart Studio using `plotly.plotly.create_animations`
+ ([#1432](https://github.com/plotly/plotly.py/pull/1432))
+
+### Updated
+ - Updated implementation of the `ternary_contour` figure factory that was
+ added in 3.6.0. The new implementation uses the native plotly.js ternary axes
+ and provides ILR transform support.
+ ([#1418](https://github.com/plotly/plotly.py/pull/1418))
+
+### Fixed
+ - Make sure the trace `selectedpoints` property of `FigureWidget` traces is
+ updated on the Python side in response to plotly.js selection events
+ ([#1433](https://github.com/plotly/plotly.py/issues/1433))
+ - Fix validation for 0-dimensional numpy arrays
+ ([#1444](https://github.com/plotly/plotly.py/pull/1444)). Special thanks to
+ [@ankokumoyashi](https://github.com/ankokumoyashi) for this contribution!
+
+## [3.6.1] - 2019-02-08
+
+### Updated
+ - Updated Plotly.js to version 1.44.3. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1443----2019-02-06)
+ for more information.
+
+### Fixed
+ - Crash on import when ipywidgets < 7 installed
+ ([#1425](https://github.com/plotly/plotly.py/pull/1425))
+ - Made `scipy` an optional import for the ternary contour figure factory
+ ([#1423](https://github.com/plotly/plotly.py/pull/1423))
+ - Eliminated use of deprecated `numpy.asscalar` function
+ ([#1428](https://github.com/plotly/plotly.py/pull/1428))
+
+
+### Updated
+ - Updated Plotly.js to version 1.44.1. Select highlights included below.
+ See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1441----2019-01-24)
+ for more information.
+
+## [3.6.0] - 2019-02-01
+
+### Updated
+ - Updated Plotly.js to version 1.44.1. Select highlights included below.
+ See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1441----2019-01-24)
+ for more information.
+
+### Added
+ - Add isosurface gl3d trace type
+ ([plotly/plotly.js#3438](https://github.com/plotly/plotly.js/pull/3438))
+ - Preview of ternary contour figure factory
+ ([#1413](https://github.com/plotly/plotly.py/pull/1413)). Special thanks to
+ [@emmanuelle](https://github.com/emmanuelle) for this contribution!
+ - Add support for `line.color` colorbars for scatter3d traces
+ ([#1085](https://github.com/plotly/plotly.py/issues/1085),
+ [plotly/plotly.js#3384](https://github.com/plotly/plotly.js/pull/3384))
+ - Add support for `hovertemplate` on `scatterpolar`, `scatterpolargl`,
+ `scatterternary`, `barpolar`, `choropleth`, `scattergeo`, and
+ `scattermapbox` trace
+ ([plotly/plotly.js#3398](https://github.com/plotly/plotly.js/pull/3398),
+ [plotly/plotly.js#3436](https://github.com/plotly/plotly.js/pull/3436))
+ - Add width attribute to box and violin traces
+ ([plotly/plotly.js#3234](https://github.com/plotly/plotly.js/pull/3234))
+ - Add support for `<sup>`, `<sup>`, `<b>`, `<i>` and `<em>` pseudo-html
+ tags in extra (aka trace "name") hover labels
+ ([plotly/plotly.js#3443](https://github.com/plotly/plotly.js/pull/3443))
+ - Add 4 additional colors to the colorway cycle of the plotly themes
+ ([#1408](https://github.com/plotly/plotly.py/pull/1408))
+ - Automatically coerce array-like objects (e.g. xarray `DataArray`s) to
+ numpy arrays
+ ([#1393](https://github.com/plotly/plotly.py/pull/1393)). Special thanks to
+ [@malmaud](https://github.com/malmaud) for this contribution!
+
+### Fixed
+ - Fix annotated heatmap text color when values are specified as a nested list
+ ([#1300](https://github.com/plotly/plotly.py/issues/1300))
+ - Fix `update` method with legacy `title*` properties
+ ([#1403](https://github.com/plotly/plotly.py/issues/1403))
+ - Fix deprecation warnings on Python 3.7 and ipywidgets > 7.0
+ ([#1417](https://github.com/plotly/plotly.py/pull/1417)). Special thanks to
+ [@Juanlu001](https://github.com/Juanlu001) for this contribution!
+
+
+## [3.5.0] - 2019-01-04
+
+### Updated
+ - Updated Plotly.js to version 1.43.1. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1431----2018-12-21)
+ for more information.
+
+### Changed
+ - Plotly.js 1.43 converted `title` properties (e.g. `layout.title`) from
+ strings into compound objects that contain the text as the `text` property
+ along with new title placement attributes `x`, `y`, `xref`, `yref`, `xanchor`,
+ `yanchor` and `pad`. Plotly.py 3.5.0 follows the new schema, but still
+ supports specifying `title` as a string, in which case the string is assigned
+ to the `title.text` property
+ ([#1302](https://github.com/plotly/plotly.py/issues/1302))
+ - Plotly.js 1.43 also moved existing `title*` properties
+ (e.g. `layout.titlefont`) under the `title` object (e.g. `layout.title.font`).
+ Plotly.py 3.5.0 follows the new schema, but still
+ supports the legacy `title*` properties by mapping them to the corresponding
+ `title.*` property
+ ([#1302](https://github.com/plotly/plotly.py/issues/1302))
+ - The `update` method on `graph_objs` now returns the updated object in order
+ to support chaining multiple update operations together
+ ([#1379](https://github.com/plotly/plotly.py/issues/1379))
+ - The `show_link` option has been set to `False` by default in the offline
+ `plot` and `iplot` functions. Now that the "send data to cloud" button has
+ been disabled by default in plotly.js 1.43.0, no buttons/links will be
+ displayed by default that result in data being sent off of the local machine
+ ([#1304](https://github.com/plotly/plotly.py/issues/1304))
+ - `config` options that are not known by plotly.py result in a warning but are
+ still passed along to plotly.js. Prior to this change these unknown options
+ were dropped silently
+ ([#1290](https://github.com/plotly/plotly.py/issues/1290))
+ - Built-in themes now specify colorscales using the new global
+ `layout.colorscale` properties.  Previously the colorscales were defined for
+ each trace type individually. This reduces the size of the resulting theme
+ files
+ ([#1303](https://github.com/plotly/plotly.py/issues/1303))
+ - Increased the maximum retry time of the orca integration from 8s to 30s
+ ([#1297](https://github.com/plotly/plotly.py/issues/1297))
+
+### Fixed
+ - Fixed `FigureWidget` performance regression that, when working with
+ large datasets, resulted in a slight freeze of the widget after user
+ interactions (pan, zoom, etc)
+ ([1305](https://github.com/plotly/plotly.py/issues/1305))
+ - Fix orca error when the `ELECTRON_RUN_AS_NODE` environment variable is set
+ ([#1293](https://github.com/plotly/plotly.py/issues/1293))
+ - The `'responsive'` config key was being silently blocked
+ ([#1290](https://github.com/plotly/plotly.py/issues/1290))
+ - Fixed error when using unicode characters in string properties on Python 2
+ ([#1289](https://github.com/plotly/plotly.py/issues/1289))
+ - Removed invalid calls to non-existent `validate` and `strip_style` `Figure`
+ methods in matplotlylib conversion logic
+ ([#1128](https://github.com/plotly/plotly.py/issues/1128))
+
+## [3.4.2] - 2018-11-23
+
+### Fixed
+ - `config` options are now supported when using `plotly.offline.iplot` to
+ display a figure in JupyterLab. Requires version 0.18.1 of the
+ `@jupyterlab/plotly-extension` extension.
+ ([#1281](https://github.com/plotly/plotly.py/pull/1281),
+ [jupyterlab/jupyter-renderers#168](https://github.com/jupyterlab/jupyter-renderers/pull/168))
+ - Custom `plotly_domain` values are now supported in FigureWidget in both
+ the classic notebook and JupyterLab
+ ([#1284](https://github.com/plotly/plotly.py/pull/1284))
+
+## [3.4.1] - 2018-11-09
+
+### Updated
+ - Updated Plotly.js to version 1.42.5. See the
+ [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1423----2018-11-06)
+ for more information.
+
+### Fixed
+ - Fixed histogram binning with pandas `Series` or numpy array
+ (regression introduced in 3.4.0)
+ ([#1257](https://github.com/plotly/plotly.py/issues/1257),
+  [plotly/plotly.js#3211](https://github.com/plotly/plotly.js/pull/3211))
+ - Fixed incorrect validation error on the `args` property of
+  `layout.updatemenu.Button()` when value is a `list` that starts with a `list`
+  ([#1265](https://github.com/plotly/plotly.py/issues/1265))
+ - Fixed deadlock causing `plotly.io.write_image` to hang on Windows after
+ exporting more than ~25 images
+ ([#1255](https://github.com/plotly/plotly.py/issues/1255))
+ - Fixed plot display error for `scattergl` trace with `mode='lines'` and
+ more than 100k points
+ ([#1271](https://github.com/plotly/plotly.py/issues/1271))
+ - Fixed responsive resizing error with `iplot` in the classic notebook
+ ([#1263](https://github.com/plotly/plotly.py/pull/1263))
+
+## [3.4.0] - 2018-11-02
+
+### Updated
+ - Updated Plotly.js to version 1.42.2. Select highlights included below, see
+ the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1422----2018-11-01)
+ for more information.
+
+### Added
+ - Default figure properties may now be customized using figure
+ templates (themes) and 7 new predefined templates are bundled with
+ plotly.py
+ ([#1224](https://github.com/plotly/plotly.py/pull/1224))
+ - Added Parallel Categories (`parcats`) trace type for the visualization
+ of multi-dimensional categorical datasets
+ ([plotly/plotly.js#2963](https://github.com/plotly/plotly.js/pull/2963))
+ - Added LaTeX typesetting support for figures displayed in the Jupyter
+ Notebook using `plotly.offline.iplot` and `plotly.graph_objs.FigureWidget`.
+ **Note:** There are still outstanding issues with MathJax rendering in FireFox,
+ but it is now working well in Chrome.
+ ([#1243](https://github.com/plotly/plotly.py/pull/1243))
+ - Added `include_mathjax` argument to `plotly.offline.plot` to support
+ the creation of HTML files with LaTeX typesetting
+ ([#1243](https://github.com/plotly/plotly.py/pull/1243))
+ - Added new `plotly.offline.get_plotlyjs` function that returns the
+ contents of the bundled plotly.js library as a string
+ ([#637](https://github.com/plotly/plotly.py/issues/637),
+  [#1246](https://github.com/plotly/plotly.py/pull/1246))
+ - Added new `plotly.offline.get_plotlyjs_version` function that returns
+ the version of the bundled plotly.js library
+ ([#1246](https://github.com/plotly/plotly.py/pull/1246))
+ - HTML div strings returned by `plotly.offline.plot` now contain logic
+ to automatically resize the figure responsively.  This logic was previously
+ only added for html files.
+ ([#1043](https://github.com/plotly/plotly.py/issues/1043),
+  [#1234](https://github.com/plotly/plotly.py/pull/1234))
+ - Figures displayed using `plotly.offline.iplot` in the classic Jupyter
+ Notebook will now resize responsively
+ ([#1234](https://github.com/plotly/plotly.py/pull/1234))
+ - Added `'cdn'`, `'directory'`, and path string `include_plotlyjs` options
+ in `plotly.offline.plot`
+ ([#1234](https://github.com/plotly/plotly.py/pull/1234))
+   - When `'cdn'`, the resulting html file/div includes a script tag reference
+   to the plotlyjs cdn.
+   - When `'directory'`, the resulting html file/div includes a script tag
+   reference to a plotly.min.js bundle in the same directory as the html file.
+   If `output_type` is `'file'` then this plotly.min.js bundle is created in
+   the output directory if it doesn't already exist.
+   - When a string ending with `'.js'`, the resulting html file/div includes
+   a script tag that references this exact path. This can be used to point
+   to a plotly.js bundle from an alternative CDN.
+ - Added a new `color_threshold` argument to the `create_dendrogram` figure
+ factory to control the dendrogram clustering cutoff
+ ([#995](https://github.com/plotly/plotly.py/issues/995),
+  [#1075](https://github.com/plotly/plotly.py/pull/1075),
+  [#1214](https://github.com/plotly/plotly.py/pull/1214))
+ - Added support for `autorange='reversed'` in 3D axes
+ ([#803](https://github.com/plotly/plotly.py/issues/803),
+  [plotly/plotly.js#3141](https://github.com/plotly/plotly.js/pull/3141))
+ - Added new gl3d tick and title auto-rotation algorithm that limits text
+ overlaps
+ ([plotly/plotly.js#3084](https://github.com/plotly/plotly.js/pull/3084),
+  [plotly/plotly.js#3131](https://github.com/plotly/plotly.js/pull/3131))
+ - Added `modebar` layout style attributes:
+ `orientation`, `bgcolor`, `color` and `activecolor`
+ ([plotly/plotly.js#3068](https://github.com/plotly/plotly.js/pull/3068),
+  [plotly/plotly.js#3091](https://github.com/plotly/plotly.js/pull/3091))
+ - Added `title`, `titleposition` and `titlefont` attributes to pie traces
+ ([plotly/plotly.js#2987](https://github.com/plotly/plotly.js/pull/2987))
+ - Added `hoverlabel.split` attribute to `ohlc` and `candlestick` traces to
+ split hover labels into multiple pieces
+ ([plotly/plotly.js#2959](https://github.com/plotly/plotly.js/pull/2959))
+ - Added support for `line.shape` values `'hv'`, `'vh'`, `'hvh'`
+ and `'vhv'` in `scattergl` traces
+ ([plotly/plotly.js#3087](https://github.com/plotly/plotly.js/pull/3087))
+ - Added trace, node and link `hoverinfo` for `sankey` traces
+ ([#3096](https://github.com/plotly/plotly.js/pull/3096),
+  [#3150](https://github.com/plotly/plotly.js/pull/3150))
+ - Added per-sector `textfont` settings in pie traces
+ ([#3130](https://github.com/plotly/plotly.js/pull/3130))
+
+
+### Changed
+ - Use new Plotly logo in "Produced with Plotly" modebar button
+ ([plotly/plotly.js#3068](https://github.com/plotly/plotly.js/pull/3068))
+
+
+### Fixed
+ - Plotly's use of MathJax for LaTeX typesetting no longer interferes with
+ the Jupyter Notebook's use of MathJax
+ ([#445](https://github.com/plotly/plotly.py/issues/445),
+  [#360](https://github.com/plotly/plotly.py/issues/360))
+ - Fixed several issues with the use of `reversescale=True` in the
+ `create_annotated_heatmap` figure factory
+ ([#1251](https://github.com/plotly/plotly.py/pull/1251))
+ - Fixed case where `plotly.offline.iplot` would fail to render in the classic
+ Jupyter Notebook if the notebook contained a Markdown headline with the text
+ "Plotly"
+ ([#816](https://github.com/plotly/plotly.py/issues/816))
+ - `None` values in a `scatter.hovertext` list are now omitted from the
+ hover label rather than being displayed as the string `"None"`
+ ([#1244](https://github.com/plotly/plotly.py/issues/1244))
+ - Subplot titles created by `plotly.tools.make_subplots` are now positioned
+ properly when custom `row_width`/`column_width` arguments are specified
+ ([#1229](https://github.com/plotly/plotly.py/issues/1229))
+ - The `bar.width` property may now be specified as a numpy array or a pandas
+ series
+ ([#1231](https://github.com/plotly/plotly.py/issues/1231),
+ [plotly/plotly.js#3169](https://github.com/plotly/plotly.js/pull/3169))
+ - Error bars are now scaled correctly for logarithmic `scatter3d` traces
+ ([#1139](https://github.com/plotly/plotly.py/issues/1139))
+ - Use `uuid.uuid4` rather than `uuid.uuid1` to work around an upstream
+ Python bug
+  ([#1235](https://github.com/plotly/plotly.py/issues/1235),
+   [#1236](https://github.com/plotly/plotly.py/pull/1236))
+ - The `layout.grid.subplots` property may now be specified as a 2D list of
+ subplot identifiers
+ ([#1220](https://github.com/plotly/plotly.py/issues/1220),
+  [#1240](https://github.com/plotly/plotly.py/pull/1240))
+ - Fixed `scatter3d` text alignment
+ ([#1055](https://github.com/plotly/plotly.py/issues/1055),
+  [plotly/plotly.js#3180](https://github.com/plotly/plotly.js/pull/3180))
+
+
+### JupyterLab Versions
+For use with JupyterLab, the following versions of the following packages
+must be installed:
+
+ - Python Packages
+   - plotly==3.4.0
+   - ipywidgets>=7.2
+   - notebook>=5.3
+   - jupyterlab==0.35
+
+ - JupyterLab Extensions
+   - plotlywidget@0.5.0
+   - @jupyter-widgets/jupyterlab-manager@0.38
+   - @jupyterlab/plotly-extension@0.18
+
+## [3.3.0] - 2018-09-28
+
+### Updated
+ - Updated Plotly.js to version 1.41.3.  Select highlights included below, see
+ [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1413----2018-09-25)
+ for more information.
+ - Do not create or check permissions on the `~/.plotly` configuration
+ directory until a configuration write operation is performed
+ ([#1195](https://github.com/plotly/plotly.py/pull/1195)). This change
+ avoids some concurrency problems associated with running many instances of
+ plotly.py simultaneously
+ ([#1068](https://github.com/plotly/plotly.py/issues/1068)).
+
+### Added
+ - Enable selection by clicking on points via new layout attribute `clickmode` and flag `'select'`
+ ([#2944](https://github.com/plotly/plotly.js/pull/2944))
+ - Added stacked area charts via new attributes `stackgroup` and `stackgaps` in scatter traces
+ ([#2960](https://github.com/plotly/plotly.js/pull/2960))
+ - Added `barpolar` trace type - which replace and augment area traces
+ ([#2954](https://github.com/plotly/plotly.js/pull/2954))
+ - Added `polar.hole` layout parameter to punch hole at the middle of polar
+ subplot offsetting the start of the radial range
+ ([#2977](https://github.com/plotly/plotly.js/pull/2977), [#2996](https://github.com/plotly/plotly.js/pull/2996))
+ - Figures may now be easily converted to and from JSON using the new
+ `to_json`, `from_json`, `read_json`, and `write_json` functions in the
+ `plotly.io` package
+ ([#1188](https://github.com/plotly/plotly.py/pull/1188))
+ - Figures and graph objects now support `deepcopy` and `pickle` operations
+ ([#1191](https://github.com/plotly/plotly.py/pull/1191))
+ - The location of the `"~/.plotly"` settings directory may now be customized
+ using the `PLOTLY_DIR` environment variable
+ ([#1195](https://github.com/plotly/plotly.py/pull/1195))
+ - Added optional `scaleratio` argument to the `create_quiver` figure factory.
+ When specified, the axes are restricted to this ratio and the quiver arrows
+ are computed to have consistent lengths across angles.
+ ([#1197](https://github.com/plotly/plotly.py/pull/1197))
+
+### Fixed
+ - Replace use of `pkg_resources.resource_string` with `pkgutil.get_data` to
+ improve compatibility with `cx_Freeze`
+ ([#1201](https://github.com/plotly/plotly.py/pull/1201))
+ - An exception is no longer raised when an optional dependency raises an
+ exception on import.  The exception is logged and plotly.py continues as if
+ the dependency were not installed
+ ([#1192](https://github.com/plotly/plotly.py/pull/1192))
+ - Fixed invalid dendrogram axis labels when the points being clustered contain
+ duplicate values
+ ([#1186](https://github.com/plotly/plotly.py/pull/1186))
+ - Added missing LICENSE.txt file to PyPI source distribution
+ ([#765](https://github.com/plotly/plotly.py/issues/765))
+
+### JupyterLab Versions
+For use with JupyterLab, the following versions of the following packages
+must be installed:
+
+ - Python Packages
+   - plotly==3.3.0
+   - ipywidgets>=7.2
+   - notebook>=5.3
+   - jupyterlab==0.34
+
+ - JupyterLab Extensions
+   - plotlywidget@0.4.0
+   - @jupyter-widgets/jupyterlab-manager@0.37
+   - @jupyterlab/plotly-extension@0.17
+
+## [3.2.1] - 2018-09-14
+This is a patch release that fixes a few bugs and reintroduces a few
+version 2 features that were not supported in version 3.
+
+The bundled version of plotly.js remains at 1.40.1
+
+### JupyterLab Versions
+For use with JupyterLab, the following versions of the following packages
+must be installed:
+
+ - Python Packages
+   - plotly==3.2.1
+   - ipywidgets>=7.2
+   - notebook>=5.3
+   - jupyterlab==0.34
+
+ - JupyterLab Extensions
+   - plotlywidget@0.3.0
+   - @jupyter-widgets/jupyterlab-manager@0.37
+   - @jupyterlab/plotly-extension@0.17
+
+### Added
+ - An optional `skip_invalid` argument has been added to the `Figure` and
+  `FigureWidget` constructors. By default, `skip_invalid` is `False` and invalid
+  figure properties will result in an exception (this is identical to the
+  previous behavior).  When `skip_invalid` is set to `True`, invalid properties
+  will instead be silently ignored. This argument replaces the `_raise`
+  argument that was available in version 2, and makes it possible to import
+  figure definitions from different plotly versions, where incompatible
+  properties are ignored rather than causing an exception.
+ - A `to_ordered_dict` method has been added to the `Figure` and `FigureWidget`
+  classes. This method returns a representation of the figure as a nested
+  structure of `OrderedDict` and `list` instances where the keys in each
+  `OrderedDict` are sorted alphabetically.  This method replaces the
+  `get_ordered` method that was available in version 2, and makes it possible
+  to traverse the nested structure of a figure in a deterministic order.
+
+### Fixed
+ - Pandas `Series` and `Index` objects storing `datetime` values were
+   incorrectly cast to numeric arrays
+   ([plotly/plotly.py#1160](https://github.com/plotly/plotly.py/issues/1160),
+    [plotly/plotly.py#1163](https://github.com/plotly/plotly.py/pull/1163))
+ - Numpy arrays with `uint64` datatype caused a `FigureWidget` error,
+   and no figure was displayed
+   ([plotly/plotly.py#1155](https://github.com/plotly/plotly.py/issues/1155),
+    [plotly/plotly.py#1163](https://github.com/plotly/plotly.py/pull/1163))
+
+## [3.2.0] - 2018-09-05
+This release introduces the long-anticipated ability to programmatically
+export figures as high quality static images in both raster and vector
+formats.
+
+### JupyterLab Versions (Python 3.5+)
+For use with JupyterLab, the following versions of the following packages
+must be installed:
+
+ - Python Packages
+   - plotly==3.2.0
+   - ipywidgets>=7.2
+   - notebook>=5.3
+   - jupyterlab==0.34
+
+ - JupyterLab Extensions
+   - plotlywidget@0.3.0
+   - @jupyter-widgets/jupyterlab-manager@0.37
+   - @jupyterlab/plotly-extension@0.17
+
+### Added
+ - plotly.js version 1.40.1, which introduces the following features:
+    - Allow `contour`, `contourcarpet` and `histogram2dcontour` to have corresponding legend items using `showlegend`
+      ([plotly/plotly.js#2891](https://github.com/plotly/plotly.js/pull/2891),
+      [plotly/plotly.js#2914](https://github.com/plotly/plotly.js/pull/2914))
+    - Add scatterpolar and scatterpolargl attributes `r0`, `dr`, `theta0` and `dtheta`
+      ([plotly/plotly.js#2895](https://github.com/plotly/plotly.js/pull/2895))
+    - Add layout attributes `piecolorway` and `extendpiecolors` for more control over pie colors
+      ([plotly/plotly.js#2870](https://github.com/plotly/plotly.js/pull/2870))
+    - Add `splom` attribute `dimensions[i].axis.type` to easily override axis type in splom-generated axes
+      ([plotly/plotly.js#2899](https://github.com/plotly/plotly.js/pull/2870))
+    - Add support for on-graph text in `scatterpolargl` traces
+      ([plotly/plotly.js#2895](https://github.com/plotly/plotly.js/pull/2895))
+    - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1400----2018-08-16)
+      for bug fixes and more information.
+ - Support for offline static image export with the `to_image` and `write_image`
+   functions in the new `plotly.io` package ([#1120](https://github.com/plotly/plotly.py/pull/1120)).
+    - Note: Image export requires the plotly [orca](https://github.com/plotly/orca)
+      command line utility and the [`psutil`](https://github.com/giampaolo/psutil) Python package.
+ - New documentation sections covering [Static Image Export](https://plot.ly/python/static-image-export/)
+   and [Orca Management](https://plot.ly/python/orca-management/)
+ - Support for displaying `FigureWidget` instances in static contexts
+   (e.g. [nbviewer](http://nbviewer.jupyter.org/)) just like the built-in ipywidgets
+ ([#1117](https://github.com/plotly/plotly.py/pull/1117))
+ - Full integration of the Cividis colorscale ([#883](https://github.com/plotly/plotly.py/pull/883))
+ - conda packaging
+   - From here forward, new versions of plotly.py will be published to the [plotly anaconda channel](https://anaconda.org/plotly/)
+     on the same day they are published to PyPI.
+     ([72ad0e4](https://github.com/plotly/plotly.py/commit/72ad0e4bf54bb8a06445d2ca55488ffc11c836a7))
+   - The [`README`](packages/python/plotly-geo/README.md) now includes conda installation instructions alongside the pip instructions.
+   - In addition to the existing installation approaches, orca is now also available as a
+     [conda package](https://anaconda.org/plotly/plotly-orca) from the plotly anaconda channel.
+
+### Updated
+ - Show traces at the top of the Gantt chart's colorbar ([#1110](https://github.com/plotly/plotly.py/pull/1110))
+ - Significantly improved validation performance for numeric pandas `Series` objects ([#1149](https://github.com/plotly/plotly.py/pull/1149))
+ - Specialize auto-generated docstrings for Python syntax
+ - More robust and specific logic for retrying requests to the plot.ly cloud service ([#1146](https://github.com/plotly/plotly.py/pull/1146))
+ - Support basic authentication when using the streaming API behind a proxy server ([#1133](https://github.com/plotly/plotly.py/pull/1133))
+
+### Fixed
+ - Validators for `dash` properties (e.g. `scatter.line.dash`) incorrectly rejected dash length lists ([#1136](https://github.com/plotly/plotly.py/pull/1136))
+ - Annotated heatmap error when custom colorscale was specified ([#1151](https://github.com/plotly/plotly.py/pull/1151))
+ - Incorrect deprecation warning for deprecated `plotly.graph_objs.Annotations` class ([#1138](https://github.com/plotly/plotly.py/pull/1138))
+ - Harmless JavaScript console error when opening an html file produced by `plotly.offline.plot` ([#1152](https://github.com/plotly/plotly.py/pull/1152))
+ - Incorrect validation errors when writing data to the streaming API ([#1145](https://github.com/plotly/plotly.py/pull/1145))
+
+
+## [3.1.1] - 2018-08-10
+This release is a minor bug-fix update to version 3.1.0
+
+### JupyterLab Versions
+For use with JupyterLab, the following versions of the following packages
+must be installed:
+
+ - Python Packages
+   - plotly==3.1.1
+   - ipywidgets>=7.2
+   - notebook>=5.3
+   - jupyterlab==0.33
+
+ - JupyterLab Extensions
+   - plotlywidget@0.2.1
+   - @jupyter-widgets/jupyterlab-manager@0.36
+   - @jupyterlab/plotly-extension@0.16
+
+### Updated
+ - Updated plotly.js to version 1.39.4.
+   - This is a bug-fix release of plotly.js
+   - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1394----2018-08-02) for more information
+
+### Fixed
+ - Fixed error in validation of configkeys
+   [plotly/plotly.js#1065](https://github.com/plotly/plotly.py/pull/1065)
+ - Fixed error in presentation of named colorscales
+   [plotly/plotly.js#1089](https://github.com/plotly/plotly.py/pull/1089)
+ - Fixed numerical precision error when using `plotly.tools.make_subplots`
+   to create figures with a large number of subplots
+   [plotly/plotly.js#1091](https://github.com/plotly/plotly.py/pull/1091)
+ - Fixed problem that prevented the use of the `.update` method to initialize
+   an array property (e.g. `layout.shapes`)
+   [plotly/plotly.js#1091](https://github.com/plotly/plotly.py/pull/1092)
+ - Fixed `FigureWidget` problem causing scroll zoom on 3D plots to stutter
+   [plotly/plotly.js#1094](https://github.com/plotly/plotly.py/pull/1094)
+ - Fixed invalid `tickmode` property in `matplotlylib`
+   [plotly/plotly.js#1101](https://github.com/plotly/plotly.py/pull/1101)
+
+## [3.1.0] - 2018-07-20
+
+### JupyterLab Versions
+For use with JupyterLab, the following versions of the following packages
+must be installed. See [README.md](packages/python/plotly-geo/README.md) for instructions.
+
+ - Python Packages
+   - plotly==3.1.0
+   - ipywidgets>=7.2
+   - notebook>=5.3
+   - jupyterlab==0.32.1
+
+ - JupyterLab Extensions
+   - plotlywidget@0.2.0
+   - @jupyter-widgets/jupyterlab-manager@0.35
+   - @jupyterlab/plotly-extension@0.16
+
+### Updated
+ - Updated Plotly.js to version 1.39.2
+ - See highlights below
+ - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1392----2018-07-16) for more information.
+
+### Added
+ - Added 3D streamtube traces
+   [plotly/plotly.js#2658](https://github.com/plotly/plotly.js/pull/2658)
+ - Added support for on-graph text in scattergl traces
+ - Added gridshape attribute to polar subplots with values 'circular' (the default) and 'linear' (to draw polygon grids)
+   [plotly/plotly.js#2739](https://github.com/plotly/plotly.js/pull/2739)
+
+## [3.0.2] - 2018-07-17
+This is a minor bug-fix release to 3.0.0
+
+### JupyterLab plotlywidget version: 0.1.1
+
+### Plotly.js version: 1.38.3
+
+### Fixed
+ - Several errors related to numbered subplot labels (e.g. xaxis2, polar3, etc.)
+   [GH1057](https://github.com/plotly/plotly.py/pull/1057)
+ - Error where the `v` property was ignored in `cone` traces
+   [GH1060](https://github.com/plotly/plotly.py/pull/1060)
+ - Assorted performance improvements when constructing graph objects
+   [GH1061](https://github.com/plotly/plotly.py/pull/1061)
+
+## [3.0.1] - 2018-07-17 [YANKED]
+Note: This release's installation was broken. It has been removed from PyPI
+
+## [3.0.0] - 2018-07-05
+
+This is a major version with many exciting updates. See the [Introducing plotly.py 3.0.0](https://medium.com/@plotlygraphs/introducing-plotly-py-3-0-0-7bb1333f69c6) post for more information.
+
+### JupyterLab plotlywidget version: 0.1.1
+
+### Plotly.js version: 1.38.3
+
+### Added
+- Full Jupyter ipywidgets integration with the new `graph_objs.FigureWidget` class
+- `FigureWidget` figures can be updated interactively using property assignment syntax
+- The full trace and layout API is generated from the plotly schema to provide a great experience for interactive use in the notebook
+- Support for setting array properties as numpy arrays. When numpy arrays are used, ipywidgets binary serialization protocol is used to avoid converting these to JSON strings.
+- Context manager API for animation. Run `help(go.Figure().batch_animate)` for the full doc string.
+- Perform automatic retries when communicating with plot.ly services. This introduces a new required dependency on the [retrying](https://pypi.org/project/retrying/) library.
+- Improved data validation covering the full API with clear, informative error messages. This means that incorrect properties and/or values now always raise a `ValueError` with a description of the error, the invalid property, and the available properties on the level that it was placed in the graph object. Eg. `go.Scatter(foo=123)` raises a validation error. See https://plot.ly/python/reference/ for a reference to all valid properties and values in the Python API.
+- Error message for `plotly.figure_factory.create_choropleth` is now helpful to Anaconda users who do not have the correct modules installed for the County Choropleth figure factory.
+
+### Changed / Deprecated
+Please see the [migration guide](MIGRATION_GUIDE.md) for a full list of the changes and deprecations in version 3.0.0
+
+
+
+## [2.7.0] - 2018-05-23
+### Updated
+- Updated `plotly.min.js` to version 1.38.0.
+  - New features include a `3D cone` trace to visualize vector fields.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1380----2018-05-23) for additional information regarding the updates.
+
+## [2.6.0] - 2018-05-09
+### Updated
+- Updated `plotly.min.js` to version 1.37.1.
+  - New features include a `splom` (scatter plot matrix) trace type.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1371----2018-05-02) for additional information regarding the updates.
+- Error message for `plotly.figure_factory.create_choropleth` is more helpful for Windows users on installing `geopandas` and dependencies including `shapely`.
+
+## [2.5.1] - 2018-03-26
+### Fixed
+- `plotly.figure_factory.create_choropleth` now works in Windows without raising an OSError. The module now uses cross-platform path tools from `os` to manipulate and manage the shapefiles contained in this package.
+
+## [2.5.0] - 2018-03-12
+### Fixed
+- `import plotly.figure_factory` does not fail if `pandas` is not installed. See  https://github.com/plotly/plotly.py/pull/958
+### Added
+- New parameter `fill_percent` to the `.insert` method for the dashboards API. You can now insert a box into the dashboard layout and specify what proportion of the original container box it will occupy. Run `help(plotly.dashboard_objs.Dashboard.insert)` for more information on `fill_percent`.
+### Updated
+- Updated `plotly.min.js` to version 1.35.2.
+  - New features include adding an `automargin` attribute to cartesian axes and a layout `grids` attribute for easy subplot generation.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1352----2018-03-09) for additional information regarding the updates.
+- `plotly.figure_factory.create_choropleth` has changed some of the default plotting options:
+  - 'offline_mode' param has been removed from call signature.
+  - Persistent selection api for the centroid points is automatically enabled. See https://plot.ly/python/reference/#scatter-selected and https://plot.ly/python/reference/#scatter-unselected for details
+  - FIPS values that appear on hover are 0-padded to ensure they are 5 digits.
+  - `hover_info='none'` is now default for the county lines data.
+
+## [2.4.1] - 2018-02-21
+### Fixed
+- The required shapefiles to generate the choropleths via `plotly.figure_factory.create_choropleth` are now shipped in the package data.
+
+## [2.4.0] - 2018-02-16
+### Added
+- County Choropleth figure factory. Call `help(plotly.figure_factory.create_choropleth)` for examples and how to get started making choropleths of US counties with the Python API.
+
+Note: Calling `plotly.figure_factory.create_choropleth` will fail with an IOError due to missing shapefiles see: https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md#241---2018-02-21
+
+## [2.3.0] - 2018-01-25
+### Fixed
+- Merged [pull request](https://github.com/plotly/plotly.py/commit/a226e07393c158e01c34c050aaf492da9d77679a) that fixes `GraphWidget` for IPython > v6
+### Updated
+- Updated `plotly.min.js` to version 1.33.1.
+  - New plot types include a `violin` trace type.
+  - New features include completely rewritten `scattergl` using `regl` and a completely rewritten polar chart renderer.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1331----2018-01-24) for additional information regarding the updates.
+
+## [2.2.3] - 2017-12-04
+### Added
+-`column_width` and `row_width` parameters for `plotly.tools.make_subplots`. Call `help(plotly.tools.make_subplots)` for documentation.
+### Updated
+- Updated `plotly.min.js` to version 1.31.2.
+  - Fixes include adjustments to `table` trace for offline plotting.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1312----2017-10-23) for additional information regarding the updates.
+
+## [2.2.2] - 2017-11-23
+### Added
+- Bullet chart figure factory. Call `help(plotly.figure_factory.create_bullet)` for examples and how to get started making bullet charts with the API.
+
+## [2.2.1] - 2017-10-26
+### Fixed
+- Presentation objects now added to setup.py
+
+## [2.2.0] - 2017-10-26
+### Added
+- NEW Presentations API for Python! Run `help(plotly.presentation_objs.Presentations)` for help or check out the new [documentation](https://plot.ly/python/presentations-api/)
+
+## [2.1.0] - 2017-10-10
+### Updated
+- Updated `plotly.min.js` to version 1.31.0.
+  - New features include a `table` trace type.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1310----2017-10-05) for additional information regarding the updates.
+
+## [2.0.16] - 2017-10-06
+### Updated
+- Updated `plotly.min.js` to version 1.31.0 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1310----2017-10-05) for additional information regarding the updates.
+
+## [2.0.15] - 2017-08-22
+### Updated
+- Updated `plotly.min.js` to version 1.30.0 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1300----2017-08-21) for additional information regarding the updates.
+
+## [2.0.14] - 2017-08-09
+### Fixed
+- [Sharekey enabling issue](https://github.com/plotly/plotly.py/issues/719) where plots were made private instead of secret.
+- Issue removing rug plots from violin plots with multiple traces.
+
+## [2.0.13] - 2017-08-04
+### Updated
+- Updated `plotly.min.js` to version 1.29.1 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG]() for additional information regarding the updates.
+- `figure_factory.create_gantt` and `figure_factory.create_dendrogram` now return a Plotly figure (consistent with other figure factory chart types).
+- `offline.init_notebook_mode()` is now optional when using `offline.iplot()`.
+
+## [2.0.12] - 2017-06-30
+### Updated
+- Updated `plotly.min.js` to version 1.28.3 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1283----2017-06-26) for additional information regarding the updates.
+### Added
+- `figure_factory.create_facet_grid` now supports histogram, bar, and box traces.
+
+## [2.0.11] - 2017-06-20
+### Updated
+- Updated `plotly.min.js` to version 1.28.1 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1281----2017-06-20) for additional information regarding the updates.
+
+## [2.0.10] - 2017-06-12
+### Added
+- The figure_factory can now create facet grids with `.create_facet_grid`. Check it out with:
+```
+import plotly.figure_factory as ff
+help(ff.create_facet_grid)
+```
+
+## [2.0.9] - 2017-05-30
+### Fixed
+- Fixes issue [https://github.com/plotly/plotly.py/issues/721](https://github.com/plotly/plotly.py/issues/721). There was an issue when running `import plotly` with old versions of the `decorator` package. We now require installations to use at least version `4.0.6` of the `decorator` package. See [https://github.com/micheles/decorator/blob/master/CHANGES.md](https://github.com/micheles/decorator/blob/master/CHANGES.md) for the `decorator` package changelog.
+
+### Added
+- 'sort' parameter to `FF.create_violin` to control whether violin plots are sorted alphabetically.
+
+## [2.0.8] - 2017-04-21
+### Added
+- Beta: Added API methods that wrap the API endpoint for managing Dash objects on plot.ly. The API interface is under `plotly.api.v2.dash_apps`
+- offline embedded plots are now responsive to window resizing when `output_type == "div"` is set in `plotly.offline.iplot()`.
+- Offline embedded plots are now responsive to window resizing when `output_type == "div"` is set in `plotly.offline.iplot()`.
+- Offline animations are now supported on Plotly Cloud.
+
+### Updated
+- Updated `plotly.min.js` to version 1.26.0 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md) for additional information regarding the updates.
+
+### Updated
+- `plotly.offline.plot` and `plotly.offline.iplot` now accept various [configuration options](https://plot.ly/javascript/configuration-options/) for their arguments.
+
+## [2.0.7] - 2017-04-07
+### Updated
+- Updated `plotly.min.js` to version 1.25.0 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md) for additional information regarding the updates.
+
+### Added
+- Added check to verify the share key is enabled when secret charts are created.
+
+## [2.0.6] - 2017-03-20
+### Added
+- Added a new mimetype 'text/vnd.plotly.v1+html' for `iplot` outputs.
+
+## [2.0.5] - 2017-03-07
+### Fixed
+- `import plotly` was broken in `2.0.3` and `2.0.2` because the new `dashboard_objs` wasn't included in our `setup.py`'s "`packages`". Now it is and `import plotly` and the other features introduced in `2.0.3` and `2.0.2` should work.
+
+## [2.0.4] - 2017-03-07 [YANKED]
+Note: This release's installation was broken. It has been removed from PyPI
+### Added
+- Added `dashboard_objs` to top level import.
+
+## [2.0.3] - 2017-03-06 [YANKED]
+Note: This release's installation was broken. It has been removed from PyPI
+### Added
+- Dashboards can now be created using the API and uploaded to Plotly. Use `import plotly.dashboard_objs` to create a `Dashboard` object. You can learn more about `Dashboard` objects by running `help(plotly.dashboard_objs)` and `help(plotly.plotly.plotly.dashboard_ops)` for uploading and retrieving dashboards from the cloud.
+
+
+## [2.0.2] - 2017-02-20
+### Fixed
+- Offline plots created with `plotly.offline.plot` now resize as expected when the window is resized.
+- `plotly.figure_factory.create_distplot` now can support more than 10 traces without raising an error. Updated so that if the list of `colors` (default colors too) is less than your number of traces, the color for your traces will loop around to start when it hits the end.
+
+## [2.0.1] - 2017-02-07
+### Added
+- Support for rendering plots in [nteract](https://nteract.io/)!
+  See [https://github.com/nteract/nteract/pull/662](https://github.com/nteract/nteract/pull/662)
+  for the associated PR in nteract.
+- As part of the above, plotly output now prints with a [custom mimetype](https://github.com/plotly/plotly.py/blob/f65724f06b894a5db94245ee4889c632b887d8ce/plotly/offline/offline.py#L348) - `application/vnd.plotly.v1+json`
+- `memoize` decorator added to `plotly.utils`
+
+### Changed
+- a `Grid` from `plotly.grid_objs` now accepts a `pandas.Dataframe` as its argument.
+- computationally-intensive `graph_reference` functions are memoized.
+
+## [2.0.0] - 2017-01-25
+### Changed
+- `plotly.exceptions.PlotlyRequestException` is *always* raised for network
+failures. Previously either a `PlotlyError`, `PlotlyRequestException`, or a
+`requests.exceptions.ReqestException` could be raised. In particular, scripts
+which depend on `try-except` blocks containing network requests should be
+revisited.
+- `plotly.py:sign_in` now validates to the plotly server specified in your
+  config. If it cannot make a successful request, it raises a `PlotlyError`.
+- `plotly.figure_factory` will raise an `ImportError` if `numpy` is not
+  installed.
+- `plotly.figure_factory.create_violin()` now has a `rugplot` parameter which
+  determines whether or not a rugplot is draw beside each violin plot.
+
+### Deprecated
+- `plotly.tools.FigureFactory`. Use `plotly.figure_factory.*`.
+- (optional imports) `plotly.tools._*_imported` It was private anyhow, but now
+it's gone. (e.g., `_numpy_imported`)
+- (plotly v2 helper) `plotly.py._api_v2` It was private anyhow, but now it's
+gone.
+
+## [1.13.0] - 2016-12-17
+### Added
+- Python 3.5 has been added as a tested environment for this package.
+
+### Updated
+- `plotly.plotly.create_animations` and `plotly.plotly.icreate_animations` now return appropriate error messages if the response is not successful.
+- `frames` are now integrated into GRAPH_REFERENCE and figure validation.
+
+### Changed
+- The plot-schema from `https://api.plot.ly/plot-schema` is no longer updated on import.
+
+## [1.12.12] - 2016-12-06
+### Updated
+- Updated `plotly.min.js` to version 1.20.5 for `plotly.offline`.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md) for additional information regarding the updates.
+- `FF.create_scatterplotmatrix` now by default does not show the trace labels for the box plots, only if `diag=box` is selected for the diagonal subplot type.
+
+## [1.12.11] - 2016-12-01
+### Fixed
+- The `link text` in the bottom right corner of the offline plots now properly displays `Export to [Domain Name]` for the given domain name set in the users' `.config` file.
+
+## [1.12.10] - 2016-11-28
+### Updated
+- `FF.create_violin` and `FF.create_scatterplotmatrix` now by default do not print subplot grid information in output
+- Removed alert that occurred when downloading plot images offline. Please note: for higher resolution images and more export options, consider making requests to our image servers. See: `help(py.image)` for more details.
+
+### Added
+- Plot configuration options for offline plots. See the list of [configuration options](https://github.com/Rikorose/plotly.py/blob/master/plotly/offline/offline.py#L189) and [examples](https://plot.ly/javascript/configuration-options/) for more information.
+  - Please note that these configuration options are for offline plots ONLY. For configuration options when embedding online plots please see our [embed tutorial](http://help.plot.ly/embed-graphs-in-websites/#step-8-customize-the-iframe).
+- `colors.py` file which contains functions for manipulating and validating colors and arrays of colors
+- 'scale' param in `FF.create_trisurf` which now can set the interpolation on the colorscales
+- animations now work in offline mode. By running `plotly.offline.plot()` and `plotly.offline.iplot()` with a `fig` with `frames`, the resulting plot will cycle through the figures defined in `frames` either in the browser or in an ipython notebook respectively. Here's an example:
+```
+import IPython.display
+from IPython.display import display, HTML
+from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
+init_notebook_mode(connected=True)
+
+figure_or_data = {'data': [{'x': [1, 2], 'y': [0, 1]}],
+                  'layout': {'xaxis': {'range': [0, 3], 'autorange': False},
+                             'yaxis': {'range': [0, 20], 'autorange': False},
+                  'title': 'First Title'},
+                  'frames': [{'data': [{'x': [1, 2], 'y': [5, 7]}]},
+                             {'data': [{'x': [-1, 3], 'y': [3, 9]}]},
+                             {'data': [{'x': [2, 2.6], 'y': [7, 5]}]},
+                             {'data': [{'x': [1.5, 3], 'y': [7.5, 4]}]},
+                             {'data': [{'x': [1, 2], 'y': [0, 1]}],
+                              'layout': {'title': 'End Title'}}]}
+iplot(figure_or_data)
+```
+More examples can be found at https://plot.ly/python/animations/.
+- animations now work in online mode: use `plotly.plotly.create_animations` and `plotly.plotly.icreate_animations` which animate a figure with the `frames` argument. Here is a simple example:
+```
+import plotly.plotly as py
+from plotly.grid_objs import Grid, Column
+
+column_1 = Column([0.5], 'x')
+column_2 = Column([0.5], 'y')
+column_3 = Column([1.5], 'x2')
+column_4 = Column([1.5], 'y2')
+
+grid = Grid([column_1, column_2, column_3, column_4])
+py.grid_ops.upload(grid, 'ping_pong_grid', auto_open=False)
+
+# create figure
+figure = {
+    'data': [
+        {
+            'xsrc': grid.get_column_reference('x'),
+            'ysrc': grid.get_column_reference('y'),
+            'mode': 'markers',
+        }
+    ],
+    'layout': {'title': 'Ping Pong Animation',
+               'xaxis': {'range': [0, 2], 'autorange': False},
+               'yaxis': {'range': [0, 2], 'autorange': False},
+               'updatemenus': [{
+                   'buttons': [
+                       {'args': [None],
+                        'label': u'Play',
+                        'method': u'animate'}
+               ],
+               'pad': {'r': 10, 't': 87},
+               'showactive': False,
+               'type': 'buttons'
+                }]},
+    'frames': [
+        {
+            'data': [
+                {
+                    'xsrc': grid.get_column_reference('x2'),
+                    'ysrc': grid.get_column_reference('y2'),
+                    'mode': 'markers',
+                }
+            ]
+        },
+        {
+            'data': [
+                {
+                    'xsrc': grid.get_column_reference('x'),
+                    'ysrc': grid.get_column_reference('y'),
+                    'mode': 'markers',
+                }
+            ]
+        }
+    ]
+}
+
+py.create_animations(figure, 'ping_pong')
+```
+
+### Fixed
+- Trisurf now uses correct `Plotly Colorscales` when called
+- Fixed a bug in the format of unique-identifiers in columns of grids that are uploaded to plotly via `plotly.plotly.upload`. See https://github.com/plotly/plotly.py/pull/599 for details. In particular, creating plots that are based off of plotly grids is no longer broken. Here is an example:
+
+```
+import plotly.plotly as py
+from plotly.grid_objs import Grid, Column
+
+c1 = Column([6, 6, 6, 5], 'column 1')
+c2 = Column(['a', 'b', 'c', 'd'], 'column 2')
+g = Grid([c1, c2])
+
+# Upload the grid
+py.grid_ops.upload(g, 'my-grid', auto_open=False)
+
+# Make a graph that with data that is referenced from that grid
+trace = Scatter(xsrc=g[0], ysrc=g[1])
+url = py.plot([trace], filename='my-plot')
+```
+Then, whenever you update the data in `'my-grid'`, the associated plot will update too. See https://plot.ly/python/data-api for more details on usage and examples.
+
+## [1.12.9] - 2016-08-22
+### Fixed
+- the colorbar in `.create_trisurf` now displays properly in `offline mode`.
+
+### Updated
+- the colorbar in `.create_trisurf` now displays the appropriate max and min values on the ends of the bar which corresponding to the coloring metric of the figure
+- `edges_color` is now a param in `.create_trisurf` which only takes `rgb` values at the moment
+
+## [1.12.8] - 2016-08-18
+### Fixed
+- Fixed color bug with trisurf plots where certain triangles were colored strangely. The coordinates of `rgb(...)` are now rounded to their nearest integer (using Python3 method of rounding), then placed in the color string to fix the issue.
+
+## [1.12.7] - 2016-08-17
+### Fixed
+- Edited `plotly.min.js` due to issue using `iplot` to plot offline in Jupyter Notebooks
+  - Please note that `plotly.min.js` may be cached in your Jupyter Notebook. Therefore, if you continue to experience this issue after upgrading the Plotly package please open a new notebook or clear the cache to ensure the correct `plotly.min.js` is referenced.
+
+## [1.12.6] - 2016-08-09
+### Updated
+- Updated `plotly.min.js` from 1.14.1 to 1.16.2
+  - Trace type scattermapbox is now part of the main bundle
+  - Add updatemenus (aka dropdowns) layout components
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md) for additional information regarding the updates
+
+## [1.12.5] - 2016-08-03
+### Updated
+- `.create_trisurf` now supports a visible colorbar for the trisurf plots. Check out the docs for help:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_trisurf)
+```
+
+## [1.12.4] - 2016-07-14
+### Added
+- The FigureFactory can now create 2D-density charts with `.create_2D_density`. Check it out with:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_2D_density)
+```
+
+## [1.12.3] - 2016-06-30
+### Updated
+- Updated `plotly.min.js` from 1.13.0 to 1.14.1
+  - Numerous additions and changes where made to the mapbox layout layers attributes
+  - Attribute line.color in scatter3d traces now support color scales
+  - Layout shapes can now be moved and resized (except for 'path' shapes) in editable contexts
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1141----2016-06-28) for additional information regarding the updates
+- Updated `default-schema`
+
+### Added
+- Added `update_plotlyjs_for_offline` in makefile in order to automate updating `plotly.min.js` for offline mode
+
+## [1.12.2] - 2016-06-20
+### Updated
+- Updated plotly.min.js so the offline mode is using plotly.js v1.13.0
+  - Fix `Plotly.toImage` and `Plotly.downloadImage` bug specific to Chrome 51 on OSX
+  - Beta version of the scattermapbox trace type - which allows users to create mapbox-gl maps using the plotly.js API. Note that scattermapbox is only available through custom bundling in this release.
+  - See [the plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md#1130----2016-05-26) for additional additions and updates.
+
+### Added
+- The FigureFactory can now create gantt charts with `.create_gantt`. Check it out with:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_gantt)
+```
+- Ability to download images in offline mode. By providing an extra keyword `image` to the existing plot calls, you can now download the images of the plots you make in offline mode.
+
+### Fixed
+- Fixed check for the height parameter passed to `_plot_html`, and now sets the correct `link text` for plots
+generated in offline mode.
+
+
+## [1.12.1] - 2016-06-19
+### Added
+- The FigureFactory can now create violin plots with `.create_violin`. Check it out with:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_violin)
+```
+
+## [1.12.0] - 2016-06-06
+### Added
+- Added ability to enable/disable SSL certificate verification for streaming. Disabling SSL certification verification requires Python v2.7.9 / v3.4.3 (or above). This feature can be toggled via the `plotly_ssl_verification` configuration setting.
+
+## [1.11.0] - 2016-05-27
+### Updated
+- Changed the default option for `create_distplot` in the figure factory from `probability` to `probability density` and also added the `histnorm` parameter to allow the user to choose between the two options.
+Note: This is a backwards incompatible change.
+
+- Updated plotly.min.js so the offline mode is using plotly.js v1.12.0
+  - Light position is now configurable in surface traces
+  - surface and mesh3d lighting attributes are now accompanied with comprehensive descriptions
+
+- Allowed `create_scatterplotmatrix` and `create_trisurf` to use divergent and categorical colormaps. The parameter `palette` has been replaced by `colormap` and `use_palette` has been removed. In `create_scatterplotmatrix`, users can now:
+  - Input a list of different color types (hex, tuple, rgb) to `colormap` to map colors divergently
+  - Use the same list to categorically group the items in the index column
+  - Pass a singlton color type to `colormap` to color all the data with one color
+  - Input a dictionary to `colormap` to map index values to a specific color
+  - 'cat' and 'seq' are valid options for `colormap_type`, which specify the type of colormap being used
+
+- In `create_trisurf`, the parameter `dist_func` has been replaced by `color_func`. Users can now:
+  - Input a list of different color types (hex, tuple, rgb) to `colormap` to map colors divergently
+  - Input a list|array of hex and rgb colors to `color_func` to assign each simplex to a color
+
+### Added
+- Added the option to load plotly.js from a CDN by setting the parameter `connected=True`
+ in the `init_notebook_mode()` function call
+- The FigureFactory can now create trisurf plots with `.create_trisurf`. Check it out with:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_trisurf)
+```
+
+
+
+## [1.10.0] - 2016-05-19
+### Fixed
+- Version 1.9.13 fixed an issue in offline mode where if you ran `init_notebook_mode`
+more than once the function would skip importing (because it saw that it had
+already imported the library) but then accidentally clear plotly.js from the DOM.
+This meant that if you ran `init_notebook_mode` more than once, your graphs would
+not appear when you refreshed the page.
+Version 1.9.13 solved this issue by injecting plotly.js with every iplot call.
+While this works, it also injects the library excessively, causing notebooks
+to have multiple versions of plotly.js inline in the DOM, potentially making
+notebooks with many `iplot` calls very large.
+Version 1.10.0 brings back the requirement to call `init_notebook_mode` before
+making an `iplot` call. It makes `init_notebook_mode` idempotent: you can call
+it multiple times without worrying about losing your plots on refresh.
+
+
+## [1.9.13] - 2016-05-19
+### Fixed
+- Fixed issue in offline mode related to the inability to reload plotly.js on page refresh and extra init_notebook_mode calls.
+
+## [1.9.12] - 2016-05-16
+### Added
+- SSL support for streaming.
+
+## [1.9.11] - 2016-05-02
+### Added
+- The FigureFactory can now create scatter plot matrices with `.create_scatterplotmatrix`. Check it out with:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_scatterplotmatrix)
+```
+
+## [1.9.10] - 2016-04-27
+### Updated
+- Updated plotly.min.js so the offline mode is using plotly.js v1.10.0
+  - Added beta versions of two new 2D WebGL trace types: heatmapgl, contourgl
+  - Added fills for scatterternary traces
+  - Added configurable shapes layer positioning with the shape attribute: `layer`
+
+## [1.9.9] - 2016-04-15
+### Fixed
+- Fixed `require is not defined` issue when plotting offline outside of Ipython Notebooks.
+
+## [1.9.8] - 2016-04-14
+### Fixed
+- Error no longer results from a "Run All" cells when working in a Jupyter Notebook.
+
+### Updated
+- Updated plotly.min.js so offline is using plotly.js v1.9.0
+  - Added Ternary plots with support for scatter traces (trace type `scatterternary`, currently only available in offline mode)
+  - For comprehensive update list see the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md)
+
+## [1.9.7] - 2016-04-04
+### Fixed
+- Offline mode will no longer delete the Jupyter Notebook's require, requirejs, and define variables.
+
+### Updated
+- Updated plotly.min.js so offline is using plotly.js v1.8.0
+  - Added range selector functionality for cartesian plots
+  - Added range slider functionality for scatter traces
+  - Added custom surface color functionality
+  - Added ability to subplot multiple graph types (SVG cartesian, 3D, maps, pie charts)
+  - For comprehensive update list see the [plotly.js CHANGELOG](https://github.com/plotly/plotly.js/blob/master/CHANGELOG.md)
+
+## [1.9.6] - 2016-02-18
+### Updated
+- Updated plotly.min.js so offline is using plotly.js v1.5.2
+
+## [1.9.5] - 2016-01-17
+### Added
+- Offline matplotlib to Plotly figure conversion. Use `offline.plot_mpl` to convert and plot a matplotlib figure as a Plotly figure independently of IPython/Jupyter notebooks or use `offline.iplot_mpl` to convert and plot inside of IPython/Jupyter notebooks. Additionally, use `offline.enable_mpl_offline` to convert and plot all matplotlib figures as plotly figures inside an IPython/Jupyter notebook. See examples below:
+
+An example independent of IPython/Jupyter notebooks:
+```
+from plotly.offline import init_notebook_mode, plot_mpl
+import matplotlib.pyplot as plt
+
+init_notebook_mode()
+
+fig = plt.figure()
+x = [10, 15, 20]
+y = [100, 150, 200]
+plt.plot(x, y, "o")
+
+plot_mpl(fig)
+```
+
+An example inside of an IPython/Jupyter notebook:
+```
+from plotly.offline import init_notebook_mode, iplot_mpl
+import matplotlib.pyplot as plt
+
+init_notebook_mode()
+
+fig = plt.figure()
+x = [10, 15, 20]
+y = [100, 150, 200]
+plt.plot(x, y, "o")
+
+iplot_mpl(fig)
+```
+
+An example of enabling all matplotlib figures to be converted to
+Plotly figures inside of an IPython/Jupyter notebook:
+```
+from plotly.offline import init_notebook_mode, enable_mpl_offline
+import matplotlib.pyplot as plt
+
+init_notebook_mode()
+enable_mpl_offline()
+
+fig = plt.figure()
+x = [10, 15, 20, 25, 30]
+y = [100, 250, 200, 150, 300]
+plt.plot(x, y, "o")
+fig
+```
+
+## [1.9.4] - 2016-01-11
+### Added
+- Offline plotting now works outside of the IPython/Jupyter notebook. Here's an example:
+```
+from plotly.offline import plot
+from plotly.graph_objs import Scatter
+
+plot([Scatter(x=[1, 2, 3], y=[3, 1, 6])])
+```
+
+This command works entirely locally. It writes to a local HTML file with the necessary [plotly.js](https://plot.ly/javascript) code to render the graph. Your browser will open the file after you make the call.
+
+The call signature is very similar to `plotly.offline.iplot` and `plotly.plotly.plot` and `plotly.plotly.iplot`, so you can basically use these commands interchangeably.
+
+If you want to publish your graphs to the web, use `plotly.plotly.plot`, as in:
+
+```
+import plotly.plotly as py
+from plotly.graph_objs import Scatter
+
+py.plot([Scatter(x=[1, 2, 3], y=[5, 1, 6])])
+```
+
+This will upload the graph to your online plotly account.
+
+## [1.9.3] - 2015-12-08
+### Added
+- Check for `no_proxy` when determining if the streaming request should pass through a proxy in the chunked_requests submodule. Example: `no_proxy='my_stream_url'` and `http_proxy=my.proxy.ip:1234`, then `my_stream_url` will not get proxied. Previously it would.
+
+## [1.9.2] - 2015-11-30
+**Bug Fix**: Previously, the "Export to plot.ly" link on
+offline charts would export your figures to the
+public plotly cloud, even if your `config_file`
+(set with `plotly.tools.set_config_file` to the file
+`~/.plotly/.config`) set `plotly_domain` to a plotly enterprise
+URL like `https://plotly.acme.com`.
+
+This is now fixed. Your graphs will be exported to your
+`plotly_domain` if it is set.
+
+## [1.9.1] - 2015-11-26
+### Added
+- The FigureFactory can now create annotated heatmaps with `.create_annotated_heatmap`. Check it out with:
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_annotated_heatmap)
+```
+- The FigureFactory can now create tables with `.create_table`.
+```
+import plotly.tools as tls
+help(tls.FigureFactory.create_table)
+```
+
+## [1.9.0] - 2015-11-15
+- Previously, using plotly offline required a paid license.
+No more: `plotly.js` is now shipped inside this package to allow
+unlimited free use of plotly inside the ipython notebook environment.
+The `plotly.js` library that is included in this package is free,
+open source, and maintained independently on GitHub at
+[https://github.com/plotly/plotly.js](https://github.com/plotly/plotly.js).
+- The `plotly.js` bundle that is required for offline use is no longer downloaded
+and installed independently from this package: `plotly.offline.download_plotlyjs`
+is **deprecated**.
+- New versions of `plotly.js` will be tested and incorporated
+  into this package as new versioned pip releases;
+  `plotly.js` is not automatically kept in sync with this package.
+
+## [1.8.12] - 2015-11-02
+- *Big data* warning mentions `plotly.graph_objs.Scattergl` as possible solution.
+
+## [1.8.9] - 2015-10-11
+- If you're behind a proxy, you can make requests by setting the environmental variable HTTP_PROXY and HTTPS_PROXY (http://docs.python-requests.org/en/v1.0.4/user/advanced/#proxies). This didn't work for streaming, but now it does.
+
+## [1.8.8] - 2015-10-05
+- Sometimes creating a graph with a private share-key doesn't work -
+the graph is private, but not accessible with the share key.
+Now we check to see if it didn't work, and re-try a few times until
+it does.
+
+## [1.8.7] - 2015-10-01
+### Added
+- The FigureFactory can now create dendrogram plots with `.create_dendrogram`.
+
+## [1.8.6] - 2015-09-28
+### Fixed
+- Saving "world_readable" to your config file via `plotly.tools.set_config` actually works.
+
+### Added
+- You can also save `auto_open` and `sharing` to the config file so that you can forget these
+  keyword argument in `py.iplot` and `py.plot`.
+
+## [1.8.5] - 2015-09-29
+### Fixed
+- Fixed validation errors (validate=False workaround no longer required)
+
+### Added
+- Auto-sync API request on import to get the latest schema from Plotly
+- `.`-access for nested attributes in plotly graph objects
+- General `.help()` method for plotly graph objects
+- Specific attribute `.help(<attribute>)` also included
+
+### Removed
+- No more *is streamable*, streaming validation.
+
+## [1.8.3] - 2015-08-14
+### Fixed
+- Fixed typos in `plot` and `iplot` documentations
+
+## [1.8.2] - 2015-08-11
+### Added
+- CHANGELOG
+- `sharing` keyword argument for `plotly.plotly.plot` and `plotly.plotly.iplot` with options `'public' | 'private' | 'secret'` to control the privacy of the charts. Depreciates `world_readable`
+
+### Changed
+- If the response from `plot` or `iplot` contains an error message, raise an exception
+
+### Removed
+- `height` and `width` are no longer accepted in `iplot`. Just stick them into your figure's layout instead, it'll be more consistent when you view it outside of the IPython notebook environment. So, instead of this:
+
+  ```
+  py.iplot([{'x': [1, 2, 3], 'y': [3, 1, 5]}], height=800)
+  ```
+
+  do this:
+
+  ```
+  py.iplot({
+    'data': [{'x': [1, 2, 3], 'y': [3, 1, 5]}],
+    'layout': {'height': 800}
+  })
+  ```
+
+### Fixed
+- The height of the graph in `iplot` respects the figure's height in layout
diff -Nru plotly-5.20.0+dfsg/CITATION.cff plotly-7.1.0+dfsg1/CITATION.cff
--- plotly-5.20.0+dfsg/CITATION.cff	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/CITATION.cff	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,15 @@
+cff-version: 1.2.0
+message: "If you use this software, please cite it as below."
+authors:
+- family-names: "Kruchten"
+  given-names: "Nicolas"
+  orcid: https://orcid.org/0000-0002-8416-789X
+- family-names: "Seier"
+  given-names: "Andrew"
+- family-names: "Parmer"
+  given-names: "Chris"
+title: "An interactive, open-source, and browser-based graphing library for Python"
+version: 7.1.0
+doi: 10.5281/zenodo.14503524
+date-released: 2026-09-15
+url: "https://github.com/plotly/plotly.py"
diff -Nru plotly-5.20.0+dfsg/CODE_OF_CONDUCT.md plotly-7.1.0+dfsg1/CODE_OF_CONDUCT.md
--- plotly-5.20.0+dfsg/CODE_OF_CONDUCT.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/CODE_OF_CONDUCT.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,74 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+  address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+  professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at accounts@plot.ly. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff -Nru plotly-5.20.0+dfsg/CONTRIBUTING.md plotly-7.1.0+dfsg1/CONTRIBUTING.md
--- plotly-5.20.0+dfsg/CONTRIBUTING.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/CONTRIBUTING.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,366 @@
+# Contributing
+
+Thank you for your interest in contributing to plotly.py!
+We are actively looking for diverse contributors with diverse background and skills.
+
+This guide starts with a general description of the different ways to contribute to plotly.py,
+then explains the technical aspects of preparing your contribution.
+
+## Code of Conduct
+
+Please note that all contributos are required to abide by our [Code of Conduct](CODE_OF_CONDUCT.md).
+
+## Different Ways to Contribute
+
+There are many ways to contribute to plotly.py.
+To do any effectively,
+it is important to understand the structure of the code and the repository.
+
+-   The [`plotly.graph_objects`](https://plotly.com/python/graph-objects/) module (usually imported as `go`)
+    is [generated from the plotly.js schema](https://plotly.com/python/figure-structure/),
+    so changes to be made in this package need to be contributed to [plotly.js](https://github.com/plotly/plotly.js)
+    or to the code generation system in `./codegen/`.
+    Code generation creates traces and layout classes that have a direct correspondence to their JavaScript counterparts,
+    while higher-level methods that work on figures regardless of the current schema (e.g., `BaseFigure.for_each_trace`)
+    are defined in `plotly/basedatatypes.py`.
+    Additional helper methods such as `update_layout` `add_trace` are also defined there for the `Figure` object.
+
+-   The [`plotly.express`](https://plotly.com/python/plotly-express/) module (usually imported as `px`)
+    is a high-level API that uses `graph_objects` under the hood.
+    Its code is in `plotly/express/`.
+    Plotly Express functions generally concern themselves with formatting data and creating figures out of `plotly.graph_objects` instances;
+    they are designed to be consistent with each other and to do as little computation in Python as possible.
+
+-   Other pure-Python submodules include `plotly.io` (a low-level interface for displaying, reading and writing figures)
+    and `plotly.subplots` (helper function for layout of multi-plot figures)
+
+-   Tests are found in `tests`.
+    These are organized in subdirectories according to what they test:
+    see the "Setup" section below for more details.
+
+-   Documentation is found in `doc/`, and its structure is described in [its README file](doc/README.md).
+    The documentation is a great place to start contributing,
+    since you can add or modify examples without setting up a full environment.
+
+Code and documentation are not the only way to contribute:
+you can also help by:
+
+-   Reporting bugs at <https://github.com/plotly/plotly.py/issues>.
+    Please take a moment to see if your problem has already been reported, and if so, add a comment to the existing issue;
+    we will try to prioritize those that affect the most people.
+
+-   Submitting feature requests (also at <https://github.com/plotly/plotly.py/issues>).
+    Again, please add a comment to an existing issue if the feature you want has already been requested.
+
+-   Helping other users on the community forum at <https://community.plot.ly/>.
+
+If you'd like to know more,
+we recommend reading [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/).
+
+## Setup
+
+This section explains how to set up a development environment so that you can contribute code and/or tests.
+Note that if you are modifying a single documentation page,
+you can do it directly on GitHub by clicking on the "Edit this page on GitHub" link without cloning the repository.
+
+### Get a Local Copy of the Project
+
+We use Git and GitHub to manage our project;
+if you are not familiar with them,
+there are great resources like <https://try.github.io/> to get you started.
+
+The first step is to [fork the repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) on GitHub
+so that you have your own copy to work with.
+Once you have done that,
+you can run the following command to get a local copy of your repository
+(replacing `your_github_id` with your GitHub ID):
+
+```bash
+git clone https://github.com/your_github_id/plotly.py.git
+```
+
+You can then go into that newly-forked repository using:
+
+```bash
+cd plotly.py
+```
+
+### Create a Virtual Environment
+
+Next,
+you should create a *virtual environment* for the project
+so that packages you install won't affect other projects you are working on.
+We recommend using [`uv`](https://docs.astral.sh/uv/) for this:
+
+```bash
+uv venv --python 3.12
+source .venv/bin/activate
+```
+
+Alternatively,
+you can use [conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-with-commands)
+or [virtualenv](https://docs.python-guide.org/en/latest/dev/virtualenvs/)
+to create and manage your virtual environment;
+see those tools' documentation for more information.
+
+### Install Packages
+
+If you are using `uv`,
+you can install all of the packages needed for developing and testing plotly.py with this command:
+
+```bash
+uv sync --extra dev
+```
+
+If you are using `conda` or `virtualenv`,
+or if `uv sync` does not work as you expect,
+you can install all packages with:
+
+```bash
+pip install -e '.[dev]'
+```
+
+If you're testing local changes in Jupyter Lab or Jupyter Notebook, you'll want to run these commands when you're setting up your development environment:
+```bash
+pip install jupyter
+jupyter labextension develop .
+```
+If you don't run that command, your figure will not render in the Jupyter Lab/ Jupyter Notebook editors.
+
+If you're changing any of the code under the `js/` directory, you'll also want to run these commands:
+```
+cd js/
+npm ci
+npm run build
+```
+
+These commands also create an *editable install* of plotly.py
+so that you can test your changes iteratively without having to rebuild the plotly.py package explicitly;
+for more information please see
+[the `pip` documentation on editable installs](https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs)
+Please note that the single quotes are needed to escape the `[]` characters.
+
+### Formatting
+
+This repo uses [ruff](https://astral.sh/ruff) to format Python code consistently.
+(Ruff is included in `pyproject.toml`,
+so you should have installed it already if you've been following along.)
+You can run ruff prior to making a PR with:
+
+```bash
+ruff check .
+```
+
+### Making Your Change
+
+Do *not* work in the `main` branch directly.
+Instead,
+create a new branch for your work with the following command
+(replacing `your-branch` with a meaningful name):
+
+```bash
+git checkout -b your-branch
+```
+
+Once you have made your changes and tested them,
+push your changes to your fork of the plotly.py repository on GitHub
+and create your pull request.
+
+> **Managing `uv.lock`**
+>
+> Please do _not_ commit changes to `uv.lock`
+> unless you have added, removed, or changed dependencies in `pyproject.toml`.
+
+## Opening a pull request
+
+When creating your pull request, please follow the guidelines below.
+
+### Code pull request
+
+- *Make sure you have reviewed the full [contributing notes (this file)](https://github.com/plotly/plotly.py/blob/main/CONTRIBUTING.md) and understand the structure of the package.*
+- If your PR modifies code of `plotly.graph_objects`, the modifications should be made to the code generator, *not* the generated files.
+- You have added tests or modified existing tests, as needed.
+- For a new feature, you have added documentation examples (please see the doc checklist as well).
+- You have added a changelog entry to `CHANGELOG.md` if changing anything substantial.
+  - The CI job "Check changelog" will fail if the PR does not update `CHANGELOG.md`. To bypass this check for PRs which don't require a changelog entry (e.g. docs updates), add the `no-changelog` label to the PR.
+- For a new feature or a change in behavior, you have updated the relevant docstrings in the code.
+
+### Documentation pull request
+
+- *Make sure you have reviewed the [`doc/README.md`](https://github.com/plotly/plotly.py/blob/main/doc/README.md) file.*
+- This change runs in the current version of Plotly on PyPI and targets the `doc-prod` branch OR it targets the `main` branch.
+- If this PR modifies the first example in a page or adds a new one, it is a `px` example if at all possible.
+- Every new/modified example has a descriptive title and motivating sentence or paragraph.
+- Every new/modified example is independently runnable.
+- Every new/modified example is optimized for short line count and focuses on the Plotly/visualization-related aspects of the example rather than the computation required to produce the data being visualized.
+- Meaningful/relatable datasets are used for all new examples instead of randomly-generated data where possible.
+- The random seed is set if using randomly-generated data.
+- New/modified remote datasets are loaded from https://plotly.github.io/datasets and added to https://github.com/plotly/datasets.
+- Large computations are avoided in the new/modified examples in favour of loading remote datasets that represent the output of such computations.
+- Imports are `plotly.graph_objects as go`, `plotly.express as px`, and/or `plotly.io as pio`.
+- Data frames are always called `df`.
+- `fig = <something>` is called high up in each new/modified example (either `px.<something>` or `make_subplots` or `go.Figure`).
+- Liberal use is made of `fig.add_*` and `fig.update_*` rather than `go.Figure(data=..., layout=...)`.
+- Specific adders and updaters like `fig.add_shape` and `fig.update_xaxes` are used instead of big `fig.update_layout` calls.
+- `fig.show()` is at the end of each example.
+- `plotly.plot()` and `plotly.iplot()` are not used in any example.
+- Named colors are used instead of hex codes wherever possible.
+- Code blocks are marked with ````python`.
+
+
+### Testing
+
+We use [pytest](https://docs.pytest.org/) for managing and running tests.
+You are strongly encouraged to write or modify tests whenever you add or change functionality;
+we are more likely to review and merge PRs with tests than ones without.
+
+If you have installed all the dependencies as explained above,
+you can run all the tests with:
+
+```bash
+python -m pytest tests
+```
+
+During development,
+you can speed things up by running only the tests in a particular file:
+
+```bash
+python -m pytest tests/test_plotly/test_plot.py
+```
+
+See [pytest's documentation](https://docs.pytest.org/) for more details.
+
+## Advanced
+
+### Generating the JavaScript Bundles for Jupyter
+
+If you make changes to any files in the `js/` directory,
+you must run `npm install && npm run build` in the `js/` directory to rebuild the FigureWidget and JupyterLab extension.
+You must then commit the build artifacts produced in `plotly/labextension`.
+A CI job will verify that this step has been done correctly.
+
+### Jupyter
+
+The `js/` directory contains Javascript code which helps use Plotly in Jupyter notebooks.
+Two kinds of Jupyter support are included:
+
+1.  **Mime Renderer JupyterLab extension**:
+    This is the default renderer for Plotly `Figure()` objects in Jupyter notebooks.
+    The Plotly mime renderer JupyterLab extension is used automatically by JupyterLab (and Jupyter Notebook)
+    when it sees the MIME type `application/vnd.plotly.v1+json` in the notebook output.
+    The MIME renderer loads `plotly.js` a single time and references it each time a Plotly figure is used in the notebook,
+    which allows us to avoid embedding `plotly.js` in the notebook output.
+    The JupyterLab extension source code is located at `js/src/mimeExtension.ts`
+    and the compiled extension code is located at `plotly/labextension` in the built Python package.
+    The command `jupyter-builder build` (which is one of the steps called by `npm run build`) compiles the extension
+    and places the build artifacts in `plotly/labextension`.
+
+2.  **FigureWidget**:
+    This is a more interactive method for rendering Plotly charts in notebooks.
+    FigureWidget is used by creating a `FigureWidget` object inside the notebook code in place of a `Figure`.
+    It supports communication between the Javascript frontend and Python backend,
+    but requires the installation of an additional Python package called `anywidget`.
+    The FigureWidget source code is located at `js/src/widget.ts`,
+    and is included in the built Python package at `plotly/package_data/widgetbundle.js`.
+
+### Updating to a New Version of plotly.js
+
+We typically update the plotly.js version in plotly.py after every new plotly.js release.
+
+_Usually, the mostly-automated steps below are sufficient. However, in some cases, manual changes may be needed. For example, [plotly.js/#7580](https://github.com/plotly/plotly.js/pull/7580) required [#5464](https://github.com/plotly/plotly.py/pull/5464) and [#5465](https://github.com/plotly/plotly.py/pull/5465). This is most often the case when plotly.js is updated to accept additional value types for an attribute; plotly.py has its own validation layer which may need to be updated. When in doubt, test out a new plotly.js feature in plotly.py to verify that everything works._
+
+Steps to update plotly.js:
+
+1. Create a new branch off of `main`.
+
+2. Manually update the version of the `plotly.js` dependency in `js/package.json`.
+
+3. Run the `updateplotlyjs` command:
+
+    ```bash
+    python commands.py updateplotlyjs
+    ```
+
+    This command does the following:
+
+    - Downloads new versions of `plot-schema.json` and `plotly.min.js` from the [plotly.js GitHub repository](https://github.com/plotly/plotly.js)
+and places them in `codegen/resources/` and `plotly/package_data/`, respectively.
+    - Updates `plotly/offline/_plotlyjs_version.py` with the new version
+    - Regenerates all of the classes under `graph_objs/` (`go.Figure`, `go.Layout`, etc.), and `plotly/validators/_validators.json`, based on the new schema
+    - Runs `npm install` in `js/` to update `js/package-lock.json`
+    - Runs `npm run build` in `js/` to rebuild the JupyterLab extension and FigureWidget bundles, which updates the artifacts in `plotly/labextension` and `plotly/package_data/widgetbundle.js`.
+
+    > Note: To skip the `npm` steps entirely (e.g. if `npm` isn't available), you can set the `SKIP_NPM=1` environment variable:
+    >
+    > ```bash
+    > SKIP_NPM=1 python commands.py updateplotlyjs
+    > ```
+    >
+    > However, before proceeding further, you'll still need to somehow run `npm install && npm run build` in `js/` before committing, so that the lockfile and build artifacts stay in sync with `js/package.json`.
+
+4. Commit the updated files under:
+    - `codegen/resources/`
+    - `js/`
+    - `plotly/graph_objs/`
+    - `plotly/labextension/`
+    - `plotly/offline/`
+    - `plotly/package_data/`
+
+5. To double-check that the update worked properly, you can use this one-liner:
+
+    ```bash
+    pip install -e . && python -c "import plotly.graph_objects as go; fig = go.Figure([go.Scatter(y=[2,1,3])]); fig.show()"
+    ```
+
+    The plot will open in a browser window; hover over the Plotly logo in the modebar in the upper-right corner to verify that the plotly.js version is correct.
+
+6. Open a PR into `main`.
+
+7. Add a changelog entry to `CHANGELOG.md` with a link to the PR. We typically mention the version update, link to the plotly.js GitHub release page, and list out the most important changes. Follow the format of previous plotly.js version bump changelog updates.
+
+### Using a Development Branch of Plotly.js
+
+If your development branch is in [the plotly.js repository](https://github.com/plotly/plotly.js)
+you can update to development versions of `plotly.js` with this command:
+
+```bash
+python commands.py updateplotlyjsdev --devrepo reponame --devbranch branchname
+```
+
+This fetches the `plotly.js` in the CircleCI artifact of the branch `branchname` of the repo `reponame`.
+If `--devrepo` or `--devbranch` are omitted,
+`updateplotlyjsdev` defaults to `plotly/plotly.js` and `main` respectively.
+
+### Local Repository
+
+If you have a local repository of `plotly.js` you'd like to try,
+you can prepare the package by running the following commands
+*in your local plotly.js repository*:
+
+```bash
+npm run build
+npm pack
+mv plotly.js-*.tgz plotly.js.tgz
+```
+
+You can then run the following command
+*in your local plotly.py repository*:
+
+```bash
+python commands.py updateplotlyjsdev --local /path/to/your/plotly.js/
+```
+
+## Documentation for `commands.py`
+
+`commands.py` serves as an entry point for utilities to help with plotly.py development.
+
+Usage: `python commands.py <subcommand> <args>`
+
+| Subcommand | Purpose |
+|------------|---------|
+| `codegen [--noformat]` | Regenerate Python files according to `plot-schema.json`.`--noformat` skips formatter step. |
+| `lint` | Lint all Python code in `plotly/`. |
+| `format` | Format all Python code in `plotly/`. |
+| `updateplotlyjs` | Update `plotly.min.js` and `plot-schema.json` to match the `plotly.js` version specified in `js/package.json`, run codegen to regenerate the Python files, then run `npm install` in `js/` to refresh `js/package-lock.json`. Set `SKIP_NPM=1` to skip the npm step. |
+| `updateplotlyjsdev [--devrepo REPONAME --devbranch BRANCHNAME] \| [--local PATH]` | Update `plot-schema.json` and `plotly.min.js` to match the version in the provided plotly.js repo name and branch name, OR local path. Then, run codegen to regenerate the Python files. |
+| `bumpversion X.Y.Z` | Update the plotly.py version number to X.Y.Z across all files where it needs to be updated. |
diff -Nru plotly-5.20.0+dfsg/LICENSE.txt plotly-7.1.0+dfsg1/LICENSE.txt
--- plotly-5.20.0+dfsg/LICENSE.txt	2024-03-13 14:39:19.000000000 +0000
+++ plotly-7.1.0+dfsg1/LICENSE.txt	2026-09-15 18:58:51.000000000 +0000
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
---- a/plotly/io/_orca.py
-+++ b/plotly/io/_orca.py
-@@ -128,15 +128,14 @@
-         # Initialize properties dict
-         self._props = {}
-
--        # Compute absolute path to the 'plotly/package_data/' directory
--        root_dir = os.path.dirname(os.path.abspath(plotly.__file__))
--        self.package_dir = os.path.join(root_dir, "package_data")
-+        # Compute absolute path to the '/usr/share/python3-plotly/' directory
-+        self.package_dir = '/usr/share/python3-plotly'
-
-         # Load pre-existing configuration
-         self.reload(warn=False)
-
-         # Compute constants
--        plotlyjs = os.path.join(self.package_dir, "plotly.min.js")
-+        plotlyjs = os.path.join(self.package_dir, "plotly.js")
-         self._constants = {
-             "plotlyjs": plotlyjs,
-             "config_file": os.path.join(PLOTLY_DIR, ".orca"),
---- a/setup.py
-+++ b/setup.py
-@@ -240,7 +240,7 @@
-
-     req = requests.get(url)
-     assert req.status_code == 200
--    path = os.path.join(here, "plotly", "package_data", "plotly.min.js")
-+    path = os.path.join(here, "plotly", "package_data", "plotly.js")
-     with open(path, "wb") as f:
-         f.write(req.content)
-
-@@ -539,35 +539,6 @@
-     ]
-     + graph_objs_packages
-     + validator_packages,
--    package_data={
--        "plotly": [
--            "package_data/*",
--            "package_data/templates/*",
--            "package_data/datasets/*",
--        ],
--        "jupyterlab_plotly": [
--            "nbextension/*",
--            "labextension/*",
--            "labextension/static/*",
--        ],
--    },
--    data_files=[
--        ("etc/jupyter/nbconfig/notebook.d", ["jupyterlab-plotly.json"]),
--    ],
-     install_requires=["tenacity>=6.2.0", "packaging"],
-     zip_safe=False,
--    cmdclass=dict(
--        build_py=js_prerelease(versioneer_cmds["build_py"]),
--        egg_info=js_prerelease(egg_info),
--        sdist=js_prerelease(versioneer_cmds["sdist"], strict=True),
--        jsdeps=NPM,
--        codegen=CodegenCommand,
--        updateschema=UpdateSchemaCommand,
--        updatebundle=UpdateBundleCommand,
--        updateplotlyjs=js_prerelease(UpdatePlotlyJsCommand),
--        updatebundleschemadev=UpdateBundleSchemaDevCommand,
--        updateplotlyjsdev=UpdatePlotlyJsDevCommand,
--        updateplotlywidgetversion=UpdatePlotlywidgetVersionCommand,
--        version=versioneer_cmds["version"],
--    ),
- )
---- a/plotly/data/__init__.py
-+++ b/plotly/data/__init__.py
-@@ -215,7 +215,7 @@
-     return pandas.read_csv(
-         os.path.join(
-             os.path.dirname(os.path.dirname(__file__)),
--            "package_data",
-+            "/usr/share/python3-plotly",
-             "datasets",
-             d + ".csv.gz",
-         )
 --- a/plotly/io/_templates.py
 +++ b/plotly/io/_templates.py
-@@ -80,10 +80,14 @@
+@@ -79,10 +79,14 @@
                  else:
                      # Load template from package data
                      path = os.path.join(
@@ -106,7 +27,7 @@
                      self._templates[template_name] = template
 --- a/plotly/offline/offline.py
 +++ b/plotly/offline/offline.py
-@@ -81,9 +81,13 @@
+@@ -82,9 +82,13 @@
      >>> with open('multi_plot.html', 'w') as f:
      ...      f.write(html) # doctest: +SKIP
      """
@@ -123,3 +44,56 @@


  def _build_resize_script(plotdivid, plotly_root="Plotly"):
+--- a/plotly/data/__init__.py
++++ b/plotly/data/__init__.py
+@@ -193,8 +193,7 @@
+     import os
+
+     path = os.path.join(
+-        os.path.dirname(os.path.dirname(__file__)),
+-        "package_data",
++        "/usr/share/python3-plotly",
+         "datasets",
+         "election.geojson.gz",
+     )
+@@ -398,8 +397,7 @@
+     Dataframe of `return_type` type
+     """
+     filepath = os.path.join(
+-        os.path.dirname(os.path.dirname(__file__)),
+-        "package_data",
++        "/usr/share/python3-plotly",
+         "datasets",
+         d + ".csv.gz",
+     )
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -120,17 +120,8 @@
+ include = [
+     "/plotly*",
+     "/_plotly*",
+-    "js/install.json",  # used by Jupyter extension
+ ]
+
+ [tool.hatch.build.targets.wheel]
+ # Prevent js/ directory from being installed as top-level package
+ exclude = ["js"]
+-
+-[tool.hatch.build.targets.wheel.shared-data]
+-# Specify files from this package which will be copied to the user's system on install
+-# This is how the jupyterlab extension gets installed
+-# Left path is the path within this package
+-# Right path is the path on the user's system
+-"plotly/labextension" = "share/jupyter/labextensions/jupyterlab-plotly"
+-"js/install.json" = "share/jupyter/labextensions/jupyterlab-plotly/install.json"
+--- a/plotly/validator_cache.py
++++ b/plotly/validator_cache.py
+@@ -18,7 +18,7 @@
+         if ValidatorCache._json_cache is None:
+             # Load the JSON validator params from the file
+             validator_json_path = opath.join(
+-                opath.dirname(__file__), "validators", "_validators.json"
++                "/usr/share/python3-plotly", "_validators.json"
+             )
+             if not opath.exists(validator_json_path):
+                 raise FileNotFoundError(
diff -Nru plotly-5.20.0+dfsg/debian/patches/01-removes-install-requires.patch plotly-7.1.0+dfsg1/debian/patches/01-removes-install-requires.patch
--- plotly-5.20.0+dfsg/debian/patches/01-removes-install-requires.patch	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/patches/01-removes-install-requires.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,15 +0,0 @@
-Description: Removes install_requires in order to avoid automatic package
- installation with some Python package managers.
-Author: Josue Ortega <josue@debian.org>
-Last-Update: 2023-07-02
-Forwarded: not-needed
-
---- a/setup.py
-+++ b/setup.py
-@@ -539,6 +539,5 @@
-     ]
-     + graph_objs_packages
-     + validator_packages,
--    install_requires=["tenacity>=6.2.0", "packaging"],
-     zip_safe=False,
- )
diff -Nru plotly-5.20.0+dfsg/debian/patches/01-tests-drop-polars.patch plotly-7.1.0+dfsg1/debian/patches/01-tests-drop-polars.patch
--- plotly-5.20.0+dfsg/debian/patches/01-tests-drop-polars.patch	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/patches/01-tests-drop-polars.patch	2026-10-12 09:26:10.000000000 +0000
@@ -0,0 +1,88 @@
+--- a/tests/test_optional/test_px/conftest.py
++++ b/tests/test_optional/test_px/conftest.py
+@@ -1,5 +1,4 @@
+ import pandas as pd
+-import polars as pl
+ import pyarrow as pa
+ import pytest
+
+@@ -19,15 +18,11 @@
+     return pd.DataFrame(obj).convert_dtypes(dtype_backend="pyarrow")  # type: ignore[no-any-return]
+
+
+-def polars_eager_constructor(obj) -> IntoDataFrame:
+-    return pl.DataFrame(obj)
+-
+-
+ def pyarrow_table_constructor(obj) -> IntoDataFrame:
+     return pa.table(obj)  # type: ignore[no-any-return]
+
+
+-constructors = [polars_eager_constructor, pyarrow_table_constructor, pandas_constructor]
++constructors = [pyarrow_table_constructor, pandas_constructor]
+
+ if parse_version(pd.__version__) >= parse_version("2.0.0"):
+     constructors.extend(
+@@ -43,6 +38,6 @@
+     return request.param  # type: ignore[no-any-return]
+
+
+-@pytest.fixture(params=["pandas", "pyarrow", "polars"])
++@pytest.fixture(params=["pandas", "pyarrow"])
+ def backend(request: pytest.FixtureRequest) -> str:
+     return request.param  # type: ignore[no-any-return]
+--- a/tests/test_optional/test_px/test_px.py
++++ b/tests/test_optional/test_px/test_px.py
+@@ -428,7 +428,7 @@
+     fig.to_dict()
+
+
+-@pytest.mark.parametrize("return_type", ["pandas", "polars", "pyarrow"])
++@pytest.mark.parametrize("return_type", ["pandas", "pyarrow"])
+ def test_load_px_data(return_type):
+     # Test that all px.data functions can be called without error
+     data_func_names = [
+--- a/tests/test_optional/test_px/test_px_functions.py
++++ b/tests/test_optional/test_px/test_px_functions.py
+@@ -5,7 +5,6 @@
+ import pandas
+ import plotly.express as px
+ import plotly.graph_objects as go
+-from polars.exceptions import InvalidOperationError
+ import pytest
+
+ from .conftest import pandas_pyarrow_constructor
+@@ -213,7 +212,7 @@
+     pl_msg = "conversion from `str` to `f64` failed in column 'values'"
+
+     with pytest.raises(
+-        (ValueError, InvalidOperationError), match=f"({pd_msg}|{pl_msg})"
++        (ValueError, ), match=f"({pd_msg}|{pl_msg})"
+     ):
+         fig = px.sunburst(df.to_native(), path=path, values="values")
+     #  path is a mixture of column names and array-like
+--- a/tests/test_optional/test_px/test_px_input.py
++++ b/tests/test_optional/test_px/test_px_input.py
+@@ -15,9 +15,9 @@
+
+
+ if optional_imports.get_module("vaex") is None and sys.version_info > (3, 9):
+-    TEST_LIBS = ["polars"]
++    TEST_LIBS = []
+ else:
+-    TEST_LIBS = ["vaex", "polars"]
++    TEST_LIBS = ["vaex"]
+
+
+ def test_numpy():
+--- a/tests/test_plotly_utils/validators/test_fig_deepcopy.py
++++ b/tests/test_plotly_utils/validators/test_fig_deepcopy.py
+@@ -11,7 +11,7 @@
+ """
+
+
+-@pytest.mark.parametrize("return_type", ["pandas", "polars", "pyarrow"])
++@pytest.mark.parametrize("return_type", ["pandas", "pyarrow"])
+ def test_deepcopy_dataframe(return_type):
+     gapminder = px.data.gapminder(return_type=return_type)
+     fig = px.line(gapminder, x="year", y="gdpPercap", color="country")
diff -Nru plotly-5.20.0+dfsg/debian/patches/02-local-mathjax.patch plotly-7.1.0+dfsg1/debian/patches/02-local-mathjax.patch
--- plotly-5.20.0+dfsg/debian/patches/02-local-mathjax.patch	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/patches/02-local-mathjax.patch	2026-10-12 09:26:10.000000000 +0000
@@ -0,0 +1,28 @@
+--- a/plotly/io/_defaults.py
++++ b/plotly/io/_defaults.py
+@@ -1,5 +1,13 @@
+ # Default settings for image generation
+
++from pathlib import Path
++
++
++_MATHJAX_LOCAL = Path("/usr/share/nodejs/mathjax-full/es5/tex-svg.js")
++_MATHJAX_CDN = (
++    "https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.min.js"
++)
++
+
+ class _Defaults(object):
+     """
+@@ -11,7 +19,10 @@
+         self.default_width = 700
+         self.default_height = 500
+         self.default_scale = 1
+-        self.mathjax = None
++        if _MATHJAX_LOCAL.is_file():
++            self.mathjax = _MATHJAX_LOCAL.as_uri()
++        else:
++            self.mathjax = _MATHJAX_CDN
+         self.topojson = None
+         self.plotlyjs = None
+         # This header is necessary to comply with Open Street Map tile policy:
diff -Nru plotly-5.20.0+dfsg/debian/patches/series plotly-7.1.0+dfsg1/debian/patches/series
--- plotly-5.20.0+dfsg/debian/patches/series	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/patches/series	2026-10-12 09:26:10.000000000 +0000
@@ -1,3 +1,3 @@
 00-fix-static-files-installation.patch
-01-removes-install-requires.patch
-00-drop-distutils.patch
+01-tests-drop-polars.patch
+02-local-mathjax.patch
diff -Nru plotly-5.20.0+dfsg/debian/python3-plotly.install plotly-7.1.0+dfsg1/debian/python3-plotly.install
--- plotly-5.20.0+dfsg/debian/python3-plotly.install	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/python3-plotly.install	2026-10-12 09:26:10.000000000 +0000
@@ -1,2 +1,3 @@
 debian/offline/plotly.js /usr/share/python3-plotly/
 plotly/package_data/* /usr/share/python3-plotly/
+plotly/validators/_validators.json /usr/share/python3-plotly/
diff -Nru plotly-5.20.0+dfsg/debian/repack plotly-7.1.0+dfsg1/debian/repack
--- plotly-5.20.0+dfsg/debian/repack	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/repack	1970-01-01 00:00:00.000000000 +0000
@@ -1,84 +0,0 @@
-#! /bin/bash
-# debian/repack
-# Re-build the pristine upstream source to serve as the Debian upstream source.
-
-set -o errexit
-set -o errtrace
-set -o nounset
-
-function usage() {
-    progname="$(basename "$0")"
-    printf "$progname --upstream-version VERSION FILENAME
"
-}
-
-if [ $# -ne 3 ] ; then
-    usage
-    exit 1
-fi
-
-upstream_version="$2"
-downloaded_file="$3"
-
-working_dir="$(mktemp -d -t)"
-
-function cleanup_exit() {
-    exit_status=$?
-    trap - ERR EXIT SIGTERM SIGHUP SIGINT SIGQUIT
-
-    rm -rf "${working_dir}"
-
-    exit $exit_status
-}
-trap "cleanup_exit" ERR EXIT SIGTERM SIGHUP SIGINT SIGQUIT
-
-package_name=$(dpkg-parsechangelog | sed -n -e 's/^Source: //p')
-release_version=$(dpkg-parsechangelog | sed -n -e 's/^Version: //p')
-upstream_version=$(printf "${release_version}" \
-	| sed -e 's/^[[:digit:]]\+://' -e 's/[-][^-]\+$//')
-upstream_dirname="${package_name}-${upstream_version}.orig"
-
-target_filename="${package_name}_${upstream_version}.orig.tar.gz"
-target_working_file="${working_dir}/${target_filename}"
-target_file="$(dirname "${downloaded_file}")/${target_filename}"
-
-repack_dir="${working_dir}/${upstream_dirname}"
-
-printf "Unpacking pristine upstream source ‘${downloaded_file}’:
"
-
-tar -xzf "${downloaded_file}" --directory "${working_dir}"
-
-upstream_source_dirname=$(ls -1 "${working_dir}")
-upstream_source_dir="${working_dir}/${upstream_source_dirname}"
-
-printf "Repackaging upstream source from ‘${upstream_source_dir}’ to ‘${repack_dir}’:
"
-
-mv "${upstream_source_dir}" "${repack_dir}"
-
-printf "Removing non-DFSG-free files:
"
-
-nonfree_files=(
-    plotly/package_data/plotly.min.js
-    jupyterlab_plotly
-)
-
-for f in "${nonfree_files[@]}" ; do
-    rm -rfv "${repack_dir}/$f"
-done
-
-printf "Rebuilding DFSG-free upstream source tarball:
"
-
-GZIP="--best" tar --directory "${working_dir}" -czf "${target_working_file}" "${upstream_dirname}"
-
-printf "Moving completed upstream tarball to ‘${target_file}’:
"
-
-rm -v "${downloaded_file}"
-mv "${target_working_file}" "${target_file}"
-
-printf "Done.
"
-
-
-# Local variables:
-# coding: utf-8
-# mode: sh
-# End:
-# vim: fileencoding=utf-8 filetype=sh :
diff -Nru plotly-5.20.0+dfsg/debian/rules plotly-7.1.0+dfsg1/debian/rules
--- plotly-5.20.0+dfsg/debian/rules	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/rules	2026-10-12 09:26:10.000000000 +0000
@@ -1,11 +1,12 @@
 #!/usr/bin/make -f

-#DH_VERBOSE = 1
-
 export PYBUILD_NAME=plotly

 %:
-	dh $@ --with python3 --buildsystem=pybuild
+	dh $@ --buildsystem=pybuild

 override_dh_auto_test:
 # Disable tests since do not work with package static files at package_data location
+
+execute_after_dh_auto_install:
+	rm -f debian/python3-plotly/usr/bin/plotly_get_chrome
diff -Nru plotly-5.20.0+dfsg/debian/tests/control plotly-7.1.0+dfsg1/debian/tests/control
--- plotly-5.20.0+dfsg/debian/tests/control	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/tests/control	2026-10-12 09:26:10.000000000 +0000
@@ -1,2 +1,14 @@
 Tests: python3-test
 Depends: python3-plotly, python3-numpy
+
+Tests: run-tests
+Depends:
+ ipython3,
+ python3-all,
+ python3-pandas,
+ python3-plotly,
+ python3-pyarrow,
+ python3-pytest,
+ python3-skimage,
+ python3-statsmodels,
+ python3-xarray
diff -Nru plotly-5.20.0+dfsg/debian/tests/run-tests plotly-7.1.0+dfsg1/debian/tests/run-tests
--- plotly-5.20.0+dfsg/debian/tests/run-tests	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/tests/run-tests	2026-10-12 09:26:10.000000000 +0000
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -e
+
+# Kaleido is not packaged yet by debian
+IGNORE_KALEIDO_FILE="--ignore=tests/test_optional/test_kaleido/test_kaleido.py"
+
+# Skip test file which fails with pytz.exceptions.UnknownTimeZoneError
+IGNORE_TZ_FILE="--ignore=tests/test_io/test_to_from_plotly_json.py"
+SKIP_TZ_TESTS="test_trendline_on_timeseries or \
+test_encode_as_datetime_with_localized_tz"
+
+# Skip test files which depend on polars
+IGNORE_POLARS_FILES="--ignore=tests/test_optional/test_px/test_px_input.py"
+
+# Default render in tests/test_io/test_renderers.py is empty instead of
+# browser, because we do not install any browers.
+SKIP_TEST_DEFAULT_RENDERER="test_default_renderer"
+
+# Skip tests that require anywidget, which is not packaged yet by debian.
+SKIP_ANYWIDGET="test_from_json_output_type[FigureWidget or \
+test_read_json_from_filelike[FigureWidget or \
+test_read_json_from_pathlib[FigureWidget or \
+test_read_json_from_file_string[FigureWidget"
+
+# Skip a test regarding named colorscale that fails with
+# AssertionError: assert [[0.0, 'rgb(2...4, 96)'], ...] == [[0.0,
+# '#fcff...a52c60'], ...]
+SKIP_NAMED_COLORSCALE="test_acceptance_named[Inferno_r]"
+
+IGNORE_FILES="$IGNORE_KALEIDO_FILE $IGNORE_TZ_FILE $IGNORE_POLAR_FILES"
+SKIP_EXPR="not ($SKIP_TEST_DEFAULT_RENDERER or $SKIP_ANYWIDGET or \
+$SKIP_TZ_TESTS or $SKIP_NAMED_COLORSCALE)"
+
+for python in $(py3versions -s); do
+    $python -P -m pytest --disable-warnings $IGNORE_FILES -k "$SKIP_EXPR" tests
+done
diff -Nru plotly-5.20.0+dfsg/debian/upstream/metadata plotly-7.1.0+dfsg1/debian/upstream/metadata
--- plotly-5.20.0+dfsg/debian/upstream/metadata	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/upstream/metadata	2026-10-12 09:26:10.000000000 +0000
@@ -0,0 +1,6 @@
+---
+Bug-Database: https://github.com/plotly/plotly.py/issues
+Documentation: https://plotly.com/python/
+Repository: https://github.com/plotly/plotly.py.git
+Repository-Browse: https://github.com/plotly/plotly.py
+Security-Contact: https://github.com/plotly/plotly.py/tree/HEAD/SECURITY.md
diff -Nru plotly-5.20.0+dfsg/debian/watch plotly-7.1.0+dfsg1/debian/watch
--- plotly-5.20.0+dfsg/debian/watch	2024-04-14 23:47:03.000000000 +0000
+++ plotly-7.1.0+dfsg1/debian/watch	2026-10-12 09:26:10.000000000 +0000
@@ -1,4 +1,7 @@
-version=4
-opts=dversionmangle=s/\+dfsg\.\d+$//,uversionmangle=s/(rc|a|b|c)/~$1/ \
-  https://pypi.debian.net/plotly/plotly-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) \
-  debian debian/repack
\ No newline at end of file
+Version: 5
+Template: GitHub
+Owner: plotly
+Project: plotly.py
+Filename-Mangle: s%(?:.*?)?v?(@ANY_VERSION@@ARCHIVE_EXT@)%@PACKAGE@-$1%
+Dversionmangle: s/\+(debian|dfsg|ds|deb)\d*$//
+Repacksuffix: +dfsg1
diff -Nru plotly-5.20.0+dfsg/doc/Makefile plotly-7.1.0+dfsg1/doc/Makefile
--- plotly-5.20.0+dfsg/doc/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/Makefile	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,53 @@
+
+export PLOTLY_RENDERER=notebook_connected
+
+MD_DIR ?= python
+UNCONV_DIR ?= unconverted/python
+IPYNB_DIR ?= build/ipynb
+HTML_DIR ?= build/html
+FAIL_DIR ?= build/failures
+REDIR_DIR ?= build/html/redir
+
+MD_FILES := $(shell ls $(MD_DIR)/*.md)
+UNCONV_FILES := $(shell ls $(UNCONV_DIR)/*.md)
+
+IPYNB_FILES := $(patsubst $(MD_DIR)/%.md,$(IPYNB_DIR)/%.ipynb,$(MD_FILES))
+HTML_FILES := $(patsubst $(MD_DIR)/%.md,$(HTML_DIR)/2019-07-03-%.html,$(MD_FILES))
+NEXT_REDIR_FILES := $(patsubst $(MD_DIR)/%.md,$(REDIR_DIR)/2019-07-03-redirect-next-%.html,$(MD_FILES))
+V3_REDIR_FILES := $(patsubst $(UNCONV_DIR)/%.md,$(REDIR_DIR)/2019-07-03-redirect-v3-%.html,$(UNCONV_FILES))
+
+
+all: $(HTML_FILES) $(V3_REDIR_FILES) $(NEXT_REDIR_FILES)
+
+.PRECIOUS: $(IPYNB_FILES)
+
+$(IPYNB_DIR)/%.ipynb: $(MD_DIR)/%.md
+	@mkdir -p $(IPYNB_DIR)
+	@echo "[jupytext]   $<"
+	@cat $< what_about_dash.md | jupytext  --to notebook --quiet --output $@
+
+$(HTML_DIR)/2019-07-03-%.html: $(IPYNB_DIR)/%.ipynb
+	@mkdir -p $(HTML_DIR)
+	@mkdir -p $(FAIL_DIR)
+	@echo "[nbconvert]  $<"
+	@jupyter nbconvert $< --to html --template nb.tpl \
+			--ExecutePreprocessor.timeout=600\
+	  	--output-dir $(HTML_DIR) --output 2019-07-03-$*.html \
+	  	--execute > $(FAIL_DIR)/$* 2>&1  && rm -f $(FAIL_DIR)/$*
+
+
+$(REDIR_DIR)/2019-07-03-redirect-next-%.html: $(IPYNB_DIR)/%.ipynb
+	@mkdir -p $(REDIR_DIR)
+	@echo "[next-redir] $<"
+	@jupyter nbconvert $< --to html --template next_redirect.tpl \
+	  	--output-dir $(REDIR_DIR) --output 2019-07-03-redirect-next-$*.html
+
+
+$(REDIR_DIR)/2019-07-03-redirect-v3-%.html: $(UNCONV_DIR)/%.md
+	@mkdir -p $(REDIR_DIR)
+	@echo "[v3-redir]   $<"
+	@echo "---" > $(REDIR_DIR)/2019-07-03-redirect-v3-$*.html
+	@echo "permalink: python/$*/" >> $(REDIR_DIR)/2019-07-03-redirect-v3-$*.html
+	@echo "redirect_to: https://plot.ly/python/v3/$*/" >> $(REDIR_DIR)/2019-07-03-redirect-v3-$*.html
+	@echo "sitemap: true" >> $(REDIR_DIR)/2019-07-03-redirect-v3-$*.html
+	@echo "---" >> $(REDIR_DIR)/2019-07-03-redirect-v3-$*.html
diff -Nru plotly-5.20.0+dfsg/doc/README.md plotly-7.1.0+dfsg1/doc/README.md
--- plotly-5.20.0+dfsg/doc/README.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/README.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,409 @@
+# Documentation of plotly.py
+
+## Introduction: structure and required packages
+
+The `doc` directory contains the source files of the documentation of plotly.py.
+It is composed of two parts:
+
+- inside the [`python/` directory](python), tutorials corresponding to https://plotly.com/python/
+- inside the [`apidoc/` directory](apidoc), configuration files for generating
+  the API reference documentation (hosted on https://plotly.com/python-api-reference/)
+
+Python packages required to build the docs are listed in
+[`requirements.txt`](requirements.txt) in the `doc` directory.
+
+## Local environment setup
+
+Before building the documentation locally, you need to set up a dedicated
+environment with the doc-specific dependencies.
+
+> You will need the [`gdal`](https://gdal.org/) system library installed (it's a build dependency of `geopandas`, a required dependency). The `uv pip install` step below will fail without it.
+
+```bash
+cd doc
+uv venv --python 3.9
+source .venv/bin/activate
+uv pip install -r requirements.txt
+```
+
+If you are documenting a feature that has not yet been released, you also need
+an editable install of plotly so your local changes are reflected:
+
+```bash
+uv pip uninstall plotly       # remove the PyPI version installed by requirements.txt
+uv pip install -e ..          # install from your local checkout
+```
+
+## Tutorials (`python` directory)
+
+Each tutorial is a markdown (`.md`) file, which can be opened in Jupyter
+Notebook or in JupyterLab by installing [jupytext](https://jupytext.readthedocs.io/en/latest/install.html).
+
+For small edits (e.g., correcting typos) to an existing tutorial, you can simply click on the "edit this
+page on GitHub" link at the top right of the page (e.g. clicking on this link
+on https://plotly.com/python/bar-charts/ will take you to
+https://github.com/plotly/plotly.py/edit/doc-prod/doc/python/bar-charts.md,
+where you can edit the page on GitHub).
+
+For more important edits where you need to run the notebook to check the output,
+clone the repository and setup an environment as described in the [main
+contributing notes](../CONTRIBUTING.md). If you're writing documentation at the
+same time as you are developing a feature, make sure to install with editable
+install (`pip install -e`, as described in [main
+contributing notes](../CONTRIBUTING.md)), so that you only need to restart
+the Jupyter kernel when you have changed the source code of the feature.
+
+### Branching strategy
+
+- The `doc-prod` branch contains the live docs which are available on the website. As soon as a change is merged into `doc-prod`, the updated docs are deployed and made publicly available.
+- The `main` branch contains docs which have been written but are not ready to be released, such as for an upcoming feature in the next plotly.py release.
+
+When updating the docs, two workflows are possible:
+
+- In the case of updating the docs for an already-released feature: your changes can be deployed to the documentation website as soon as they have been merged, so you should branch off of the `doc-prod` branch and open your pull request into the `doc-prod` branch.
+- In the case of writing docs for a new (not-yet-released) feature: you should branch off `main` and open your pull request into `main`, so that the documentation of the feature is only deployed when it is available in a released version of `plotly.py`. The `main` branch will be merged into `doc-prod` at release time, as described below.
+
+#### Keeping `main` and `doc-prod` in sync
+
+Changes to `doc-prod` are **not** automatically merged back into `main`. To
+prevent the branches from diverging, `doc-prod` should be merged into `main` on
+a regular basis via a pull request (e.g., a branch named
+`merge-doc-prod-to-main-branch` merged into `main`).
+
+At release time the synchronization is bidirectional (see also
+[`RELEASE.md`](../RELEASE.md)):
+
+1. **`doc-prod` → `main`** — merge any outstanding doc-only fixes into `main`
+   (if not already done recently).
+2. **`main` → `doc-prod`** — merge `main` into `doc-prod` so that documentation
+   for newly released features is deployed to the live site.
+3. **Publish the site** — update the
+   [`graphing-library-docs`](https://github.com/plotly/graphing-library-docs)
+   repo to bump the plotly.py and plotly.js versions and rebuild the Algolia
+   search indexes. See the
+   [Update documentation site](../RELEASE.md#update-documentation-site)
+   section of `RELEASE.md` for the full procedure.
+
+> **Release prep:** When synchronizing `main` into `doc-prod` for a new
+> release, update the `plotly==` version pin in `doc/requirements.txt` to match
+> the newly released version. The `doc-prod` build uses this pinned version
+> (not an editable install), so examples that rely on new features will fail
+> if the pin is stale.
+
+### Tutorial file format
+
+Tutorial files are Markdown files with a YAML frontmatter block that contains
+Jupyter notebook metadata (used by jupytext) and plotly-specific metadata (used
+by the documentation site for navigation, SEO, and categorization).
+
+Here is an annotated example of the frontmatter:
+
+```yaml
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: Short description for SEO and page previews.
+    display_as: basic          # Category: basic, statistical, scientific, maps, 3d, etc.
+    language: python
+    layout: base
+    name: Page Title           # Displayed in the navigation sidebar
+    order: 3                   # Position within the display_as category
+    page_type: example_index
+    permalink: python/my-page/ # URL path on the documentation site
+    thumbnail: thumbnail/my-page.jpg
+---
+```
+
+The `plotly` metadata fields are the most important to enter correctly when creating/updating a tutorial:
+
+| Field | Description |
+|-------|-------------|
+| `name` | Page title shown in the sidebar and browser tab |
+| `permalink` | URL slug — must match the filename (e.g., `bar-charts.md` → `python/bar-charts/`) |
+| `description` | Short description used by search engines |
+| `display_as` | Category grouping (e.g., `basic`, `statistical`, `scientific`, `maps`, `3d_charts`, `file_settings`) |
+| `order` | Numeric sort order within the category |
+| `page_type` | Typically `example_index` for tutorial pages |
+| `thumbnail` | Path to the thumbnail image |
+
+Code cells are written as fenced code blocks with the `python` language tag.
+Each code cell is separated by a blank line and starts with ` ```python `.
+Markdown cells are written as regular Markdown text between code blocks.
+
+### Creating a new tutorial page
+
+1. **Copy an existing tutorial** from `doc/python/` as a starting point to get
+   the frontmatter structure right.
+2. **Update the frontmatter** — at minimum, change `name`, `permalink`,
+   `description`, `display_as`, and `order`. Make sure `permalink` matches the
+   filename (e.g., `my-feature.md` → `python/my-feature/`).
+3. **Write examples** using fenced `python` code blocks. Each block becomes a
+   separate Jupyter cell when the file is converted.
+4. **Test in Jupyter** — open the file directly in JupyterLab (with jupytext
+   installed) and run all cells to verify the examples work:
+   ```bash
+   jupyter lab doc/python/my-feature.md
+   ```
+5. **Build the single page** (optional) — you can build just your page instead
+   of the entire doc set:
+   ```bash
+   cd doc
+   make build/html/2019-07-03-my-feature.html
+   ```
+6. **Check that CI passes** — push your branch and open a pull request. The CI
+   will build all pages and run validation on frontmatter and page ordering.
+
+### Guidelines
+
+We try to write short, standalone and (almost) self-explaining examples. Most
+examples should focus on a single feature.
+
+Checklist
+
+- Each example should have a clear title (titles are used for the navigation
+  bar and indexed by search engines)
+- Package imports should be called in the same cell as the example, so that it
+  is possible to copy-paste a single cell to reproduce the example.
+- Variable names should be consistent with other examples, for example use
+  `fig` for a `Figure` object, `df` for a pandas dataframe, etc.
+- Examples should not be too long to execute (typically < 10s), since the doc is
+  built as part of the continuous integration (CI) process. Examples taking
+  longer to execute should be discussed in a new issue to decide whether they
+  can be accepted.
+
+### Build process
+
+#### Building all tutorials
+
+From the `doc` directory, with the virtual environment activated:
+
+```bash
+cd doc
+source .venv/bin/activate
+make
+```
+
+This runs through every `.md` file in `python/` and:
+
+1. Appends the "What About Dash?" footer from `what_about_dash.md`
+2. Converts each Markdown file to a Jupyter notebook using **jupytext**
+3. Executes the notebook and converts it to HTML using **nbconvert** (with a
+   10-minute timeout per notebook)
+4. Outputs HTML files to `build/html/` with a `2019-07-03-` date prefix
+5. Generates redirect pages for v3 backward compatibility and "next version"
+   previews
+
+To build in parallel (as CI does):
+
+```bash
+make -kj8
+```
+
+The `-k` flag continues past failures and `-j8` runs 8 jobs in parallel.
+
+#### Building a single tutorial
+
+To build only one page (useful during development):
+
+```bash
+make build/html/2019-07-03-bar-charts.html
+```
+
+The filename follows the pattern `2019-07-03-<markdown-filename-without-extension>.html`.
+
+> **Why the `2019-07-03-` prefix?** The downstream `graphing-library-docs`
+> site uses Jekyll, whose `_posts/` collection only processes files matching
+> the pattern `YYYY-MM-DD-title.ext` and silently ignores anything else.
+> The specific date is an arbitrary placeholder — its value is never
+> displayed; it just satisfies Jekyll's filename parser.
+
+#### Build output
+
+| Directory | Contents |
+|-----------|----------|
+| `build/ipynb/` | Intermediate Jupyter notebook files |
+| `build/html/` | Final HTML tutorial pages |
+| `build/html/redir/` | Redirect pages (v3 and next-version) |
+| `build/failures/` | Stderr logs for pages that failed to build |
+
+If a build fails, check `build/failures/<page-name>` for the error output.
+
+## API reference documentation (`apidoc` directory)
+
+We use [sphinx](http://www.sphinx-doc.org/en/master/) and its [`autodoc`
+extension](http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html)
+in order to generate the documentation of the API. Sphinx uses the [reST markup
+language](https://www.sphinx-doc.org/en/2.0/usage/restructuredtext/basics.html).
+
+### Building the API docs
+
+The API docs require an editable install of plotly because the build process
+temporarily modifies source files (renaming `graph_objects` references to the
+internal `graph_objs` name for Sphinx, then reverting afterward).
+
+```bash
+cd doc
+source .venv/bin/activate
+uv pip uninstall plotly
+uv pip install -e ..
+cd apidoc
+make html
+```
+
+The output is written to `apidoc/_build/html/`.
+
+### How the API doc build works
+
+The `apidoc/Makefile` performs several steps:
+
+1. Temporarily rewrites `:class:` cross-references in `plotly/graph_objs/` to
+   use the internal `graph_objs` name so Sphinx can resolve them.
+2. Copies color module files into `plotly/colors/` and `plotly/express/colors/`
+   so their docstrings are picked up.
+3. Runs `sphinx-apidoc` to auto-generate `.rst` stubs from the Python source,
+   excluding `validators/`, `tests/`, `matplotlylib/`, `offline/`, and `api/`.
+4. Runs `sphinx-build` to produce HTML from the `.rst` files.
+5. Reverts the `graph_objs` source changes with `git checkout`.
+6. Cleans up the temporarily copied color files.
+7. Renames all `graph_objs` references back to `graph_objects` in the generated
+   HTML and related files.
+
+### Adding new API objects
+
+Lists of objects to be documented are found in `.rst` files corresponding to
+submodules:
+
+| File | Module |
+|------|--------|
+| `plotly.express.rst` | `plotly.express` (high-level API) |
+| `plotly.graph_objects.rst` | `plotly.graph_objects` (traces, layout) |
+| `plotly.io.rst` | `plotly.io` (display, read, write) |
+| `plotly.subplots.rst` | `plotly.subplots` (subplot helpers) |
+| `plotly.figure_factory.rst` | `plotly.figure_factory` |
+| `basefigure.rst` | `BaseFigure` class |
+
+When a new object is added to the exposed API, it needs to be added to the
+corresponding `.rst` file to appear in the API doc.
+
+### Other files
+
+- `css` files are found in `_static`
+- Template files are found in `_templates`. `.rst` templates describe how the
+  autodoc of the different objects should look like.
+- `conf.py` contains the Sphinx configuration (theme, extensions, etc.)
+
+## CI/CD pipeline
+
+Documentation is built and deployed automatically by the GitHub Actions workflow
+defined in `.github/workflows/build-doc.yml`.
+
+### What triggers a build
+
+| Event | What happens |
+|-------|-------------|
+| Pull request (any branch) | Tutorials (markdown files in doc/python) are built and validated. The build artifact is uploaded but not deployed. |
+| Push to `doc-prod` | Full build: tutorials are built, validated, and deployed. API docs are also built and deployed. |
+
+### Build steps
+
+1. **Environment setup** — Python 3.9, `uv`, and system dependencies (`rename`
+   utility) are installed.
+2. **Install doc dependencies** — `uv pip install -r requirements.txt` inside
+   `doc/`.
+3. **Install editable plotly** (non-`doc-prod` branches only) — Replaces the
+   PyPI plotly with the local checkout so that in-development features are
+   available.
+4. **Build HTML tutorials** — Runs `make -kj8` (twice, to retry transient
+   failures). Then downloads and runs validation scripts from
+   `plotly/graphing-library-docs`:
+   - `front-matter-ci.py` validates the YAML frontmatter of all built pages.
+   - `check-or-enforce-order.py` verifies page ordering within categories.
+5. **Upload build artifact** — The built HTML is uploaded as a GitHub Actions
+   artifact named `doc-html` for inspection.
+
+### Deployment (doc-prod only)
+
+When changes are pushed to `doc-prod`, the workflow deploys to three branches
+of the [`plotly/plotly.py-docs`](https://github.com/plotly/plotly.py-docs)
+repository:
+
+| Target branch | Contents |
+|---------------|----------|
+| `built` | Final HTML tutorial pages |
+| `built_ipynb` | Intermediate Jupyter notebook files |
+| `gh-pages` | API reference HTML (built by Sphinx) |
+
+After deploying, the workflow triggers a downstream build in
+[`plotly/graphing-library-docs`](https://github.com/plotly/graphing-library-docs)
+by pushing an empty commit. That repository generates the final
+https://plotly.com/python site.
+
+### Summary of the full deployment path
+
+```
+doc/python/*.md  (source)
+    ↓  make (jupytext + nbconvert)
+doc/build/html/*.html  (built tutorials)
+    ↓  CI deploys to plotly/plotly.py-docs@built
+plotly/graphing-library-docs  (triggered rebuild)
+    ↓  Jekyll site generation
+https://plotly.com/python/  (live site)
+```
+
+## Troubleshooting
+
+### A single page fails to build
+
+Check `build/failures/<page-name>` for the full error output. Common causes:
+
+- **Missing import or dataset** — make sure all imports and remote data URLs
+  are correct.
+- **Timeout** — the default is 600 seconds (10 minutes). If your example
+  legitimately needs more time, discuss in an issue before increasing the
+  timeout.
+
+### `make` fails immediately
+
+- Confirm you are running from the `doc/` directory with the virtual
+  environment activated.
+- Check that `jupytext` and `nbconvert` are installed: `jupytext --version`
+  and `jupyter nbconvert --version`.
+
+### API doc build fails on `graph_objs` references
+
+The API doc build temporarily modifies files under `plotly/graph_objs/`. If a
+previous build was interrupted, those files may be in a dirty state. Reset them
+with:
+
+```bash
+git checkout -- plotly/graph_objs
+```
+
+### CI frontmatter validation fails
+
+The CI runs `front-matter-ci.py` and `check-or-enforce-order.py` against the
+built HTML. Ensure your tutorial's YAML frontmatter includes all required
+fields (`name`, `permalink`, `description`, `display_as`, `order`, `layout`,
+`language`) and that the `order` value does not conflict with existing pages in
+the same `display_as` category.
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/Makefile plotly-7.1.0+dfsg1/doc/apidoc/Makefile
--- plotly-5.20.0+dfsg/doc/apidoc/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/Makefile	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,45 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = python -m sphinx
+SOURCEDIR     = .
+BUILDDIR      = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+# For sphinx-apidoc the first positional path is the module to document
+# then all the other ones are paths to exclude for the doc generation
+%: Makefile
+	sed -i 's/:class:`plotly.graph_objects/:class:`plotly.graph_objs/g' ../../plotly/graph_objs/*.py
+	sed -i 's/:class:`plotly.graph_objects/:class:`plotly.graph_objs/g' ../../plotly/graph_objs/*/*.py
+	sed -i 's/:class:`plotly.graph_objects/:class:`plotly.graph_objs/g' ../../plotly/graph_objs/*/*/*.py
+	sed -i 's/:class:`plotly.graph_objects/:class:`plotly.graph_objs/g' ../../plotly/graph_objs/*/*/*/*.py
+	# Copy _plotly_utils file so that they appear in the API doc
+	cp ../../_plotly_utils/colors/sequential.py ../../_plotly_utils/colors/diverging.py ../../_plotly_utils/colors/qualitative.py ../../_plotly_utils/colors/cyclical.py ../../_plotly_utils/colors/colorbrewer.py ../../_plotly_utils/colors/carto.py ../../_plotly_utils/colors/cmocean.py ../../plotly/colors
+	cp ../../_plotly_utils/colors/sequential.py ../../_plotly_utils/colors/diverging.py ../../_plotly_utils/colors/qualitative.py ../../_plotly_utils/colors/cyclical.py ../../_plotly_utils/colors/colorbrewer.py ../../_plotly_utils/colors/carto.py ../../_plotly_utils/colors/cmocean.py ../../plotly/express/colors
+	# Run sphinx-apidoc script to create hierarchy of rst files to generate
+	# docstrings. The first path is the one to process, the following ones
+	# are excluded from the search.
+	rm -rf _build generated
+	sphinx-apidoc -M -o generated ../../plotly ../../plotly/validators ../../plotly/tests ../../plotly/matplotlylib/ ../../plotly/offline ../../plotly/api
+	# Run sphinx-build to build html pages from the rst pages
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+	git checkout -- ../../plotly/graph_objs
+	# Remove files which were added only for docstring generation
+	rm ../../plotly/colors/diverging.py ../../plotly/colors/sequential.py ../../plotly/colors/qualitative.py ../../plotly/colors/cyclical.py ../../plotly/colors/colorbrewer.py ../../plotly/colors/carto.py ../../plotly/colors/cmocean.py
+	rm ../../plotly/express/colors/diverging.py ../../plotly/express/colors/sequential.py ../../plotly/express/colors/qualitative.py ../../plotly/express/colors/cyclical.py ../../plotly/express/colors/colorbrewer.py ../../plotly/express/colors/carto.py ../../plotly/express/colors/cmocean.py
+	rename 's/graph_objs/graph_objects/' _build/html/*.html _build/html/generated/*.html _build/html/generated/generated/*.html
+	mv _build/html/generated/plotly.graph_objs.html _build/html/generated/plotly.graph_objects.html
+	sed -i 's/graph_objs/graph_objects/g' _build/html/*.html
+	sed -i 's/graph_objs/graph_objects/g' _build/html/*.inv
+	sed -i 's/graph_objs/graph_objects/g' _build/html/*.js
+	sed -i 's/graph_objs/graph_objects/g' _build/html/generated/*.html
+	sed -i 's/graph_objs/graph_objects/g' _build/html/generated/generated/*.html
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/README.rst plotly-7.1.0+dfsg1/doc/apidoc/README.rst
--- plotly-5.20.0+dfsg/doc/apidoc/README.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/README.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1 @@
+make html
Binary files /tmp/qfBTewkxr5/plotly-5.20.0+dfsg/doc/apidoc/_static/favicon.ico and /tmp/4FMX3OMP7N/plotly-7.1.0+dfsg1/doc/apidoc/_static/favicon.ico differ
Binary files /tmp/qfBTewkxr5/plotly-5.20.0+dfsg/doc/apidoc/_static/logo.png and /tmp/4FMX3OMP7N/plotly-7.1.0+dfsg1/doc/apidoc/_static/logo.png differ
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/_static/plotly-style.css plotly-7.1.0+dfsg1/doc/apidoc/_static/plotly-style.css
--- plotly-5.20.0+dfsg/doc/apidoc/_static/plotly-style.css	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/_static/plotly-style.css	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,106 @@
+.navbar-default {
+  background-color: #fff;
+}
+.navbar {
+  border-bottom: 1px solid #e7e7e7;
+}
+.navbar-brand {
+  font-family: "Open Sans", sans-serif;
+  padding: 10px 10px;
+}
+
+.navbar-nav > li > a {
+  padding-top: 10px;
+  padding-bottom: 0;
+}
+
+.body {
+  font-family: "Open Sans", sans-serif;
+}
+
+.navbar-brand img {
+  height: 30px;
+  margin-top: 4px;
+}
+
+.navbar .container {
+  padding-top: 8px;
+}
+
+code {
+  color: #2c3e50 !important;
+}
+
+.alert-info {
+  background: lightgrey;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  background: lightgrey;
+}
+
+dt {
+  font-weight: normal;
+}
+
+dd {
+  margin-left: 20px;
+}
+
+blockquote {
+  font-size: 15px;
+  border-left: none;
+}
+
+li {
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+
+code {
+  background-color: #f5f5f5;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-family: "jubilat", sans-serif;
+}
+
+@font-face {
+  font-family: "jubilat";
+  src: url("https://use.typekit.net/af/275f06/00000000000000003b9b0d24/27/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3")
+      format("woff2"),
+    url("https://use.typekit.net/af/275f06/00000000000000003b9b0d24/27/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3")
+      format("woff"),
+    url("https://use.typekit.net/af/275f06/00000000000000003b9b0d24/27/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n4&v=3")
+      format("opentype");
+  font-display: auto;
+  font-style: normal;
+  font-weight: 400;
+}
+
+@font-face {
+  font-family: "jubilat";
+  src: url("https://use.typekit.net/af/d16a24/00000000000000003b9b0d22/27/l?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n5&v=3")
+      format("woff2"),
+    url("https://use.typekit.net/af/d16a24/00000000000000003b9b0d22/27/d?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n5&v=3")
+      format("woff"),
+    url("https://use.typekit.net/af/d16a24/00000000000000003b9b0d22/27/a?primer=7cdcb44be4a7db8877ffa5c0007b8dd865b3bbc383831fe2ea177f62257a9191&fvd=n5&v=3")
+      format("opentype");
+  font-display: auto;
+  font-style: normal;
+  font-weight: 500;
+}
+
+a {
+  color: #506784 !important;
+}
+
+a:hover {
+  color: #0d67bf !important;
+}
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/_templates/class_figure.rst plotly-7.1.0+dfsg1/doc/apidoc/_templates/class_figure.rst
--- plotly-5.20.0+dfsg/doc/apidoc/_templates/class_figure.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/_templates/class_figure.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,31 @@
+:mod:`{{module}}`.{{objname}}
+{{ underline }}==============
+
+
+.. currentmodule:: {{ module }}
+
+.. autosummary::
+   :toctree: generated/
+
+   Figure
+
+   Figure.show
+   Figure.add_traces
+   Figure.update_traces
+   Figure.update_layout
+
+
+.. autoclass:: {{ objname }}
+   {% block methods %}
+   .. automethod:: __init__
+   {% endblock %}
+
+
+.. autoclass:: {{ objname }}
+   :members:
+   :inherited-members:
+
+.. raw:: html
+
+    <div class="clearer"></div>
+
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/_templates/function.rst plotly-7.1.0+dfsg1/doc/apidoc/_templates/function.rst
--- plotly-5.20.0+dfsg/doc/apidoc/_templates/function.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/_templates/function.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,11 @@
+:mod:`{{module}}`.{{objname}}
+{{ underline }}====================
+
+.. currentmodule:: {{ module }}
+
+.. autofunction:: {{ objname }}
+
+
+.. raw:: html
+
+    <div class="clearer"></div>
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/_templates/layout.html plotly-7.1.0+dfsg1/doc/apidoc/_templates/layout.html
--- plotly-5.20.0+dfsg/doc/apidoc/_templates/layout.html	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/_templates/layout.html	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,21 @@
+{# Import the theme's layout. #}
+{% extends "!layout.html" %}
+
+{%- block footer %}
+    <script type="text/javascript">
+
+      var _gaq = _gaq || [];
+      _gaq.push(['_setAccount', 'UA-39373211-1']);
+      _gaq.push(['_setDomainName', 'none']);
+      _gaq.push(['_setAllowLinker', true]);
+      _gaq.push(['_trackPageview']);
+
+      (function() {
+        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+      })();
+
+    </script>
+{%- endblock %}
+
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/_templates/trace.rst plotly-7.1.0+dfsg1/doc/apidoc/_templates/trace.rst
--- plotly-5.20.0+dfsg/doc/apidoc/_templates/trace.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/_templates/trace.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,27 @@
+:mod:`{{module}}`.{{objname}}
+{{ underline }}============================
+
+
+.. currentmodule:: {{ module }}
+
+.. autoclass:: {{ objname }}
+
+   {% block methods %}
+   .. automethod:: __init__
+   {% endblock %}
+
+:mod:`{{module}}`.{{objname.lower()}}
+{{ underline }}================================
+
+.. autosummary::
+
+   plotly.graph_objs.{{ objname.lower() }}
+
+.. automodule:: plotly.graph_objs.{{ objname.lower() }}
+   :members:
+   :undoc-members:
+
+
+.. raw:: html
+
+    <div class="clearer"></div>
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/basefigure.rst plotly-7.1.0+dfsg1/doc/apidoc/basefigure.rst
--- plotly-5.20.0+dfsg/doc/apidoc/basefigure.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/basefigure.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,9 @@
+.. _base:
+
+.. currentmodule:: plotly.basedatatypes
+
+.. autosummary::
+   :toctree: generated/
+
+   BaseFigure
+
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/conf.py plotly-7.1.0+dfsg1/doc/apidoc/conf.py
--- plotly-5.20.0+dfsg/doc/apidoc/conf.py	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/conf.py	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,205 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file does only contain a selection of the most common options. For a
+# full list see the documentation:
+# http://www.sphinx-doc.org/en/master/config
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+import sphinx_bootstrap_theme
+
+# sys.path.insert(0, os.path.abspath("../packages/python/plotly"))
+
+
+# -- Project information -----------------------------------------------------
+
+project = ""
+copyright = "2022, Plotly"
+author = "Plotly"
+
+# The short X.Y version
+version = ""
+# The full version, including alpha/beta/rc tags
+release = "7.0.0"
+
+
+# -- General configuration ---------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#
+# needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    "sphinx.ext.autodoc",
+    "sphinx.ext.autosummary",
+    "sphinx.ext.intersphinx",
+    "sphinx.ext.todo",
+    "sphinx.ext.coverage",
+    "sphinx.ext.napoleon",
+]
+
+autosummary_generate = True
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+source_suffix = [".rst", ".md"]
+# source_suffix = '.rst'
+
+source_parsers = {".md": "recommonmark.parser.CommonMarkParser"}
+# The master toctree document.
+master_doc = "index"
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = None
+
+default_role = "literal"
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = "bootstrap"
+html_theme_path = sphinx_bootstrap_theme.get_html_theme_path()
+
+html_logo = "_static/logo.png"
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#
+html_theme_options = {
+    "analytics_id": "UA-39373211-1",  # not supported by this theme
+    "bootswatch_theme": "flatly",
+    "source_link_position": "no",
+}
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ["_static"]
+
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# The default sidebars (for documents that don't match any pattern) are
+# defined by theme itself.  Builtin themes are using these templates by
+# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
+# 'searchbox.html']``.
+#
+# html_sidebars = {}
+
+html_favicon = "_static/favicon.ico"
+
+# -- Options for HTMLHelp output ---------------------------------------------
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = "plotlydoc"
+
+
+# -- Options for LaTeX output ------------------------------------------------
+
+latex_elements = {
+    # The paper size ('letterpaper' or 'a4paper').
+    #
+    # 'papersize': 'letterpaper',
+    # The font size ('10pt', '11pt' or '12pt').
+    #
+    # 'pointsize': '10pt',
+    # Additional stuff for the LaTeX preamble.
+    #
+    # 'preamble': '',
+    # Latex figure (float) alignment
+    #
+    # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+    (master_doc, "plotly.tex", "plotly Documentation", "plotly team", "manual")
+]
+
+
+# -- Options for manual page output ------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [(master_doc, "plotly", "plotly Documentation", [author], 1)]
+
+
+# -- Options for Texinfo output ----------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+    (
+        master_doc,
+        "plotly",
+        "plotly Documentation",
+        author,
+        "plotly",
+        "One line description of project.",
+        "Miscellaneous",
+    )
+]
+
+
+# -- Options for Epub output -------------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = project
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#
+# epub_identifier = ''
+
+# A unique identification for the text.
+#
+# epub_uid = ''
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ["search.html"]
+
+
+# -- Extension configuration -------------------------------------------------
+
+# -- Options for intersphinx extension ---------------------------------------
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {"https://docs.python.org/": None}
+
+# -- Options for todo extension ----------------------------------------------
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+def setup(app):
+    app.add_stylesheet("plotly-style.css")  # also can be a full URL
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/helper_go_names.py plotly-7.1.0+dfsg1/doc/apidoc/helper_go_names.py
--- plotly-5.20.0+dfsg/doc/apidoc/helper_go_names.py	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/helper_go_names.py	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,36 @@
+import inspect
+import plotly.graph_objects as go
+
+members = inspect.getmembers(go)
+
+functions, classes, submodules = [], [], []
+
+for m in members:
+    print(m)
+    if m[0] not in go.__all__:
+        continue
+    if m[1].__doc__ and "is deprecated" in m[1].__doc__:
+        continue
+    elif inspect.isfunction(m[1]):
+        functions.append(m[0])
+    elif inspect.isclass(m[1]):
+        classes.append(m[0])
+    elif inspect.ismodule(m[1]):
+        submodules.append(m[0])
+
+classes.sort()
+submodules.sort()
+
+classes_str = "
".join(classes)
+# print(classes_str)
+
+submodules_str = "
".join(submodules)
+# print(submodules_str)
+
+autosubmodule = ""
+
+for submodule in submodules:
+    autosubmodule += (
+        ".. automodule:: plotly.graph_objects.%s
    :members:

" % submodule
+    )
+print(autosubmodule)
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/index.rst plotly-7.1.0+dfsg1/doc/apidoc/index.rst
--- plotly-5.20.0+dfsg/doc/apidoc/index.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/index.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,42 @@
+.. plotly documentation master file, created by
+   sphinx-quickstart on Wed Oct  2 12:55:48 2019.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Python API reference for `plotly`
+====================
+
+This is the reference of plotly's API. Also see `plotly's documentation website <https://plot.ly/python>`_.
+
+Submodules
+----------
+
+
+* :ref:`Plotly Express: high-level interface for data visualization <px>`
+* :ref:`Graph Objects: low-level interface to figures, traces and layout <graph-objects>`
+* :ref:`Subplots: helper function for layout out multi-plot figures <subplots>`
+* :ref:`Figure Factories: helper methods for building specific complex charts <ff>`
+* :ref:`I/O: low-level interface for displaying, reading and writing figures <io>`
+* :mod:`plotly.colors`: colorscales and utility functions
+* :mod:`plotly.data`: built-in datasets for demonstration, educational and test purposes
+
+Full reference list
+-------------------
+
+.. toctree::
+   :maxdepth: 3
+
+   plotly.express.rst
+   plotly.graph_objects.rst
+   plotly.subplots.rst
+   plotly.figure_factory.rst
+   plotly.io.rst
+
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/plotly.express.rst plotly-7.1.0+dfsg1/doc/apidoc/plotly.express.rst
--- plotly-5.20.0+dfsg/doc/apidoc/plotly.express.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/plotly.express.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,65 @@
+.. _px:
+
+`plotly.express`: high-level interface for data visualization
+=============================================================
+
+The `plotly.express <https://plot.ly/python/plotly-express/>`_ module is
+plotly's high-level API for rapid figure generation. ::
+
+   >>> import plotly.express as px
+
+.. currentmodule:: plotly.express
+
+.. autosummary::
+   :toctree: generated/
+   :template: function.rst
+
+    scatter
+    scatter_3d
+    scatter_polar
+    scatter_ternary
+    scatter_map
+    scatter_geo
+    line
+    line_3d
+    line_polar
+    line_ternary
+    line_map
+    line_geo
+    area
+    bar
+    timeline
+    bar_polar
+    violin
+    box
+    ecdf
+    strip
+    histogram
+    pie
+    treemap
+    sunburst
+    icicle
+    funnel
+    funnel_area
+    scatter_matrix
+    parallel_coordinates
+    parallel_categories
+    choropleth
+    choropleth_map
+    density_contour
+    density_heatmap
+    density_map
+    imshow
+    get_trendline_results
+
+
+`plotly.express` subpackages
+---------------------------
+
+
+.. toctree::
+   :maxdepth: 1
+
+   generated/plotly.express.data.rst
+   generated/plotly.express.colors.rst
+   generated/plotly.express.trendline_functions.rst
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/plotly.figure_factory.rst plotly-7.1.0+dfsg1/doc/apidoc/plotly.figure_factory.rst
--- plotly-5.20.0+dfsg/doc/apidoc/plotly.figure_factory.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/plotly.figure_factory.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,19 @@
+.. _ff:
+
+`plotly.figure_factory`: helper methods for building specific complex charts
+==============
+
+.. currentmodule:: plotly.figure_factory
+
+.. autosummary::
+   :toctree: generated/
+   :template: function.rst
+
+   create_dendrogram
+   create_hexbin_map
+   create_quiver
+   create_streamline
+   create_table
+   create_ternary_contour
+   create_trisurf
+
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/plotly.graph_objects.rst plotly-7.1.0+dfsg1/doc/apidoc/plotly.graph_objects.rst
--- plotly-5.20.0+dfsg/doc/apidoc/plotly.graph_objects.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/plotly.graph_objects.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,125 @@
+.. _graph-objects:
+
+`plotly.graph_objects`: low-level interface to figures, traces and layout
+=========================================
+
+.. currentmodule:: plotly.graph_objs
+
+:mod:`plotly.graph_objects` contains the building blocks of plotly :class:`Figure`: traces
+(:class:`Scatter`, :class:`Bar`, ...) and :class:`Layout`
+::
+
+   >>> import plotly.graph_objects as go
+
+Figure
+------
+
+.. autosummary::
+   :toctree: generated/
+   :template: class_figure.rst
+
+   Figure
+
+
+Layout
+------
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Layout
+
+
+Simple Traces
+--------------
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Scatter
+   Scattergl
+   Bar
+   Pie
+   Heatmap
+   Image
+   Contour
+   Table
+
+Distribution Traces
+-------------
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Box
+   Violin
+   Histogram
+   Histogram2d
+   Histogram2dContour
+
+Finance Traces
+-------
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Ohlc
+   Candlestick
+   Waterfall
+   Funnel
+   Funnelarea
+   Indicator
+
+3D Traces
+--
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Scatter3d
+   Surface
+   Mesh3d
+   Cone
+   Streamtube
+   Volume
+   Isosurface
+
+Map Traces
+----
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Scattergeo
+   Choropleth
+   Scattermap
+   Choroplethmap
+   Densitymap
+
+Specialized Traces
+-----------
+
+.. autosummary::
+   :toctree: generated/
+   :template: trace.rst
+
+   Scatterpolar
+   Scatterpolargl
+   Barpolar
+   Scatterternary
+   Sunburst
+   Treemap
+   Icicle
+   Sankey
+   Splom
+   Parcats
+   Parcoords
+   Carpet
+   Scattercarpet
+   Contourcarpet
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/plotly.io.rst plotly-7.1.0+dfsg1/doc/apidoc/plotly.io.rst
--- plotly-5.20.0+dfsg/doc/apidoc/plotly.io.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/plotly.io.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,27 @@
+.. _io:
+
+`plotly.io`: low-level interface for displaying, reading and writing figures
+==============
+
+.. currentmodule:: plotly.io
+
+.. autosummary::
+    :toctree: generated/
+    :template: function.rst
+
+    to_image
+    write_image
+    to_json
+    from_json
+    read_json
+    write_json
+    templates
+    to_templated
+    to_html
+    write_html
+    renderers
+    show
+
+.. automodule:: plotly.io
+   :no-members:
+
diff -Nru plotly-5.20.0+dfsg/doc/apidoc/plotly.subplots.rst plotly-7.1.0+dfsg1/doc/apidoc/plotly.subplots.rst
--- plotly-5.20.0+dfsg/doc/apidoc/plotly.subplots.rst	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/apidoc/plotly.subplots.rst	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,16 @@
+.. _subplots:
+
+`plotly.subplots`: helper function for laying out multi-plot figures
+===========================
+
+.. currentmodule:: plotly.subplots
+
+.. autosummary::
+    :toctree: generated/
+    :template: function.rst
+
+    make_subplots
+
+
+.. autofunction:: plotly.subplots.make_subplots
+
diff -Nru plotly-5.20.0+dfsg/doc/nb.tpl plotly-7.1.0+dfsg1/doc/nb.tpl
--- plotly-5.20.0+dfsg/doc/nb.tpl	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/nb.tpl	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,22 @@
+{%- extends 'basic.tpl' -%}
+{%- block header -%}
+---
+{% for k in nb.metadata.get("plotly") -%}
+{{ k }}: {{ nb.metadata.get("plotly")[k] }}
+{% endfor -%}
+---
+{{ super() }}
+{{ '{% raw %}' }}
+
+{%- endblock header-%}
+
+{% block input_group %}
+    {%- if not cell.metadata.get('hide_code', False) -%}
+        {{ super() }}
+    {%- endif -%}
+{% endblock input_group %}
+
+{%- block footer %}
+{{ super() }}
+{{ '{% endraw %}' }}
+{%- endblock footer-%}
diff -Nru plotly-5.20.0+dfsg/doc/next_redirect.tpl plotly-7.1.0+dfsg1/doc/next_redirect.tpl
--- plotly-5.20.0+dfsg/doc/next_redirect.tpl	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/next_redirect.tpl	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,5 @@
+---
+permalink: {{ nb.metadata.get("plotly")["permalink"].replace("python/", "python/next/") }}
+redirect_to: https://plot.ly/{{ nb.metadata.get("plotly")["permalink"] }}
+sitemap: false
+---
diff -Nru plotly-5.20.0+dfsg/doc/python/2D-Histogram.md plotly-7.1.0+dfsg1/doc/python/2D-Histogram.md
--- plotly-5.20.0+dfsg/doc/python/2D-Histogram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/2D-Histogram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,271 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.4
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.11
+  plotly:
+    description: How to make 2D Histograms in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: 2D Histograms
+    order: 5
+    page_type: u-guide
+    permalink: python/2D-Histogram/
+    redirect_from:
+    - python/2d-histograms/
+    thumbnail: thumbnail/histogram2d.jpg
+---
+
+## 2D Histograms or Density Heatmaps
+
+A 2D histogram, also known as a density heatmap, is the 2-dimensional generalization of a [histogram](/python/histograms/) which resembles a [heatmap](/python/heatmaps/) but is computed by grouping a set of points specified by their `x` and `y` coordinates into bins, and applying an aggregation function such as `count` or `sum` (if `z` is provided) to compute the color of the tile representing the bin. This kind of visualization (and the related [2D histogram contour, or density contour](https://plotly.com/python/2d-histogram-contour/)) is often used to manage over-plotting, or situations where showing large data sets as [scatter plots](/python/line-and-scatter/) would result in points overlapping each other and hiding patterns. For data sets of more than a few thousand points, a better approach than the ones listed here would be to [use Plotly with Datashader](/python/datashader/) to precompute the aggregations before displaying the data with Plotly.
+
+## Density Heatmaps with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). The Plotly Express function `density_heatmap()` can be used to produce density heatmaps.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_heatmap(df, x="total_bill", y="tip")
+fig.show()
+```
+
+The number of bins can be controlled with `nbinsx` and `nbinsy` and the [color scale](/python/colorscales/) with `color_continuous_scale`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_heatmap(df, x="total_bill", y="tip", nbinsx=20, nbinsy=20, color_continuous_scale="Viridis")
+fig.show()
+```
+
+Marginal plots can be added to visualize the 1-dimensional distributions of the two variables. Here we use a marginal [`histogram`](/python/histograms/). Other allowable values are `violin`, `box` and `rug`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_heatmap(df, x="total_bill", y="tip", marginal_x="histogram", marginal_y="histogram")
+fig.show()
+```
+
+Density heatmaps can also be [faceted](/python/facet-plots/):
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_heatmap(df, x="total_bill", y="tip", facet_row="sex", facet_col="smoker")
+fig.show()
+```
+
+### Displaying Text
+
+*New in v5.5*
+
+You can add the `z` values as text using the `text_auto` argument. Setting it to `True` will display the values on the bars, and setting it to a `d3-format` formatting string will control the output format.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_heatmap(df, x="total_bill", y="tip", text_auto=True)
+fig.show()
+```
+
+### Other aggregation functions than `count`
+
+By passing in a `z` value and a `histfunc`, density heatmaps can perform basic aggregation operations. Here we show average Sepal Length grouped by Petal Length and Petal Width for the Iris dataset.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.density_heatmap(df, x="petal_length", y="petal_width", z="sepal_length", histfunc="avg")
+fig.show()
+```
+
+### 2D Histograms with Graph Objects
+
+To build this kind of figure using [graph objects](/python/graph-objects/) without using Plotly Express, we can use the `go.Histogram2d` class.
+
+
+### 2D Histogram of a Bivariate Normal Distribution ###
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+np.random.seed(1)
+
+x = np.random.randn(500)
+y = np.random.randn(500)+1
+
+fig = go.Figure(go.Histogram2d(
+        x=x,
+        y=y
+    ))
+fig.show()
+```
+
+### 2D Histogram Binning and Styling Options ###
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x = np.random.randn(500)
+y = np.random.randn(500)+1
+
+fig = go.Figure(go.Histogram2d(x=x, y=y, histnorm='probability',
+        autobinx=False,
+        xbins=dict(start=-3, end=3, size=0.1),
+        autobiny=False,
+        ybins=dict(start=-2.5, end=4, size=0.1),
+        colorscale=[[0, 'rgb(12,51,131)'], [0.25, 'rgb(10,136,186)'], [0.5, 'rgb(242,211,56)'], [0.75, 'rgb(242,143,56)'], [1, 'rgb(217,30,30)']]
+    ))
+fig.show()
+```
+### Sharing bin settings between 2D Histograms
+This example shows how to use [bingroup](https://plotly.com/python/reference/histogram/#histogram-bingroup) attribute to have a compatible bin settings for both histograms. To define `start`, `end` and `size` value of x-axis and y-axis separately, set [ybins](https://plotly.com/python/reference/histogram2dcontour/#histogram2dcontour-ybins) and `xbins`.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(2,2)
+fig.add_trace(go.Histogram2d(
+    x = [ 1, 2, 2, 3, 4 ],
+    y = [ 1, 2, 2, 3, 4 ],
+    coloraxis = "coloraxis",
+    xbins = {'start':1, 'size':1}), 1,1)
+fig.add_trace(go.Histogram2d(
+    x = [ 4, 5, 5, 5, 6 ],
+    y = [ 4, 5, 5, 5, 6 ],
+    coloraxis = "coloraxis",
+    ybins = {'start': 3, 'size': 1}),1,2)
+fig.add_trace(go.Histogram2d(
+    x = [ 1, 2, 2, 3, 4 ],
+    y = [ 1, 2, 2, 3, 4 ],
+    bingroup = 1,
+    coloraxis = "coloraxis",
+    xbins = {'start':1, 'size':1}), 2,1)
+fig.add_trace(go.Histogram2d(
+    x = [ 4, 5, 5, 5, 6 ],
+    y = [ 4, 5, 5, 5, 6 ],
+    bingroup = 1,
+    coloraxis = "coloraxis",
+    ybins = {'start': 3, 'size': 1}),2,2)
+fig.show()
+```
+
+### 2D Histogram Overlaid with a Scatter Chart ###
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x0 = np.random.randn(100)/5. + 0.5  # 5. enforces float division
+y0 = np.random.randn(100)/5. + 0.5
+x1 = np.random.rand(50)
+y1 = np.random.rand(50) + 1.0
+
+x = np.concatenate([x0, x1])
+y = np.concatenate([y0, y1])
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=x0,
+    y=y0,
+    mode='markers',
+    showlegend=False,
+    marker=dict(
+        symbol='x',
+        opacity=0.7,
+        color='white',
+        size=8,
+        line=dict(width=1),
+    )
+))
+fig.add_trace(go.Scatter(
+    x=x1,
+    y=y1,
+    mode='markers',
+    showlegend=False,
+    marker=dict(
+        symbol='circle',
+        opacity=0.7,
+        color='white',
+        size=8,
+        line=dict(width=1),
+    )
+))
+fig.add_trace(go.Histogram2d(
+    x=x,
+    y=y,
+    colorscale='YlGnBu',
+    zmax=10,
+    nbinsx=14,
+    nbinsy=14,
+    zauto=False,
+))
+
+fig.update_layout(
+    xaxis=dict( ticks='', showgrid=False, zeroline=False, nticks=20 ),
+    yaxis=dict( ticks='', showgrid=False, zeroline=False, nticks=20 ),
+    autosize=False,
+    height=550,
+    width=550,
+    hovermode='closest',
+
+)
+
+fig.show()
+```
+
+### Text on 2D Histogram Points
+
+In this example we add text to 2D Histogram points. We use the values from the `z` attribute for the text.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.tips()
+
+fig = go.Figure(go.Histogram2d(
+        x=df.total_bill,
+        y=df.tip,
+        texttemplate= "%{z}"
+    ))
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/histogram2d/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/2d-histogram-contour.md plotly-7.1.0+dfsg1/doc/python/2d-histogram-contour.md
--- plotly-5.20.0+dfsg/doc/python/2d-histogram-contour.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/2d-histogram-contour.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,252 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to make 2D Histogram Contour plots in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: 2D Histogram Contour
+    order: 11
+    page_type: u-guide
+    permalink: python/2d-histogram-contour/
+    redirect_from: python/2d-density-plots/
+    thumbnail: thumbnail/hist2dcontour.png
+---
+
+## 2D Histogram Contours or Density Contours
+
+A 2D histogram contour plot, also known as a density contour plot, is a 2-dimensional generalization of a [histogram](/python/histograms/) which resembles a [contour plot](/python/contour-plots/) but is computed by grouping a set of points specified by their `x` and `y` coordinates into bins, and applying an aggregation function such as `count` or `sum` (if `z` is provided) to compute the value to be used to compute contours. This kind of visualization (and the related [2D histogram, or density heatmap](/python/2D-Histogram/)) is often used to manage over-plotting, or situations where showing large data sets as [scatter plots](/python/line-and-scatter/) would result in points overlapping each other and hiding patterns.
+
+## Density Contours with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). The Plotly Express function `density_contour()` can be used to produce density contours.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_contour(df, x="total_bill", y="tip")
+fig.show()
+```
+
+Marginal plots can be added to visualize the 1-dimensional distributions of the two variables. Here we use a marginal [`histogram`](/python/histograms/). Other allowable values are `violin`, `box` and `rug`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_contour(df, x="total_bill", y="tip", marginal_x="histogram", marginal_y="histogram")
+fig.show()
+```
+
+Density contours can also be [faceted](/python/facet-plots/) and [discretely colored](/python/discrete-color/):
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_contour(df, x="total_bill", y="tip", facet_col="sex", color="smoker")
+fig.show()
+```
+
+Plotly Express density contours can be [continuously-colored](/python/colorscales/) and labeled:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.density_contour(df, x="total_bill", y="tip")
+fig.update_traces(contours_coloring="fill", contours_showlabels = True)
+fig.show()
+```
+
+### Other aggregation functions than `count`
+
+By passing in a `z` value and a `histfunc`, density contours can perform basic aggregation operations. Here we show average Sepal Length grouped by Petal Length and Petal Width for the Iris dataset.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.density_contour(df, x="petal_length", y="petal_width", z="sepal_length", histfunc="avg")
+fig.show()
+```
+
+### 2D Histograms with Graph Objects
+
+To build this kind of figure with [graph objects](/python/graph-objects/) without using Plotly Express, we can use the `go.Histogram2d` class.
+
+#### Basic 2D Histogram Contour
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+np.random.seed(1)
+
+x = np.random.uniform(-1, 1, size=500)
+y = np.random.uniform(-1, 1, size=500)
+
+fig = go.Figure(go.Histogram2dContour(
+        x = x,
+        y = y
+))
+
+fig.show()
+```
+
+#### 2D Histogram Contour Colorscale
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x = np.random.uniform(-1, 1, size=500)
+y = np.random.uniform(-1, 1, size=500)
+
+fig = go.Figure(go.Histogram2dContour(
+        x = x,
+        y = y,
+        colorscale = 'Blues'
+))
+
+fig.show()
+```
+
+#### 2D Histogram Contour Styled
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x = np.random.uniform(-1, 1, size=500)
+y = np.random.uniform(-1, 1, size=500)
+
+fig = go.Figure(go.Histogram2dContour(
+        x = x,
+        y = y,
+        colorscale = 'Jet',
+        contours = dict(
+            showlabels = True,
+            labelfont = dict(
+                family = 'Raleway',
+                color = 'white'
+            )
+        ),
+        hoverlabel = dict(
+            bgcolor = 'white',
+            bordercolor = 'black',
+            font = dict(
+                family = 'Raleway',
+                color = 'black'
+            )
+        )
+
+))
+
+fig.show()
+```
+
+#### 2D Histogram Contour Subplot
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+t = np.linspace(-1, 1.2, 2000)
+x = (t**3) + (0.3 * np.random.randn(2000))
+y = (t**6) + (0.3 * np.random.randn(2000))
+
+fig = go.Figure()
+fig.add_trace(go.Histogram2dContour(
+        x = x,
+        y = y,
+        colorscale = 'Blues',
+        reversescale = True,
+        xaxis = 'x',
+        yaxis = 'y'
+    ))
+fig.add_trace(go.Scatter(
+        x = x,
+        y = y,
+        xaxis = 'x',
+        yaxis = 'y',
+        mode = 'markers',
+        marker = dict(
+            color = 'rgba(0,0,0,0.3)',
+            size = 3
+        )
+    ))
+fig.add_trace(go.Histogram(
+        y = y,
+        xaxis = 'x2',
+        marker = dict(
+            color = 'rgba(0,0,0,1)'
+        )
+    ))
+fig.add_trace(go.Histogram(
+        x = x,
+        yaxis = 'y2',
+        marker = dict(
+            color = 'rgba(0,0,0,1)'
+        )
+    ))
+
+fig.update_layout(
+    autosize = False,
+    xaxis = dict(
+        zeroline = False,
+        domain = [0,0.85],
+        showgrid = False
+    ),
+    yaxis = dict(
+        zeroline = False,
+        domain = [0,0.85],
+        showgrid = False
+    ),
+    xaxis2 = dict(
+        zeroline = False,
+        domain = [0.85,1],
+        showgrid = False
+    ),
+    yaxis2 = dict(
+        zeroline = False,
+        domain = [0.85,1],
+        showgrid = False
+    ),
+    height = 600,
+    width = 600,
+    bargap = 0,
+    hovermode = 'closest',
+    showlegend = False
+)
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/histogram2dcontour/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-axes.md plotly-7.1.0+dfsg1/doc/python/3d-axes.md
--- plotly-5.20.0+dfsg/doc/python/3d-axes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-axes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,274 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.4
+  plotly:
+    description: How to format axes of 3d plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Axes
+    order: 1
+    page_type: example_index
+    permalink: python/3d-axes/
+    thumbnail: thumbnail/3d-axes.png
+---
+
+### Range of axes
+
+3D figures have an attribute in `layout` called `scene`, which contains
+attributes such as `xaxis`, `yaxis` and `zaxis` parameters, in order to
+set the range, title, ticks, color etc. of the axes.
+
+For creating 3D charts, see [this page](https://plotly.com/python/3d-charts/).
+
+Set `range` on an axis to manually configure a range for that axis. If you don't set `range`, it's automatically calculated. In this example, we set a `range` on `xaxis`, `yaxis`, and `zaxis`.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+np.random.seed(1)
+
+N = 70
+
+fig = go.Figure(data=[go.Mesh3d(x=(70*np.random.randn(N)),
+                   y=(55*np.random.randn(N)),
+                   z=(40*np.random.randn(N)),
+                   opacity=0.5,
+                   color='rgba(244,22,100,0.6)'
+                  )])
+
+fig.update_layout(
+    scene = dict(
+        xaxis = dict(nticks=4, range=[-100,100],),
+                     yaxis = dict(nticks=4, range=[-50,100],),
+                     zaxis = dict(nticks=4, range=[-100,100],),),
+    width=700,
+    margin=dict(r=20, l=10, b=10, t=10))
+
+fig.show()
+```
+
+### Setting only a Lower or Upper Bound for Range
+
+*New in 5.17*
+
+You can also set just a lower or upper bound for `range`. In this case, autorange is used for the other bound. In this example, we apply autorange to the lower bound of the `yaxis` and the upper bound of `zaxis` by setting them to `None`.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+np.random.seed(1)
+
+N = 70
+
+fig = go.Figure(data=[go.Mesh3d(x=(70*np.random.randn(N)),
+                   y=(55*np.random.randn(N)),
+                   z=(40*np.random.randn(N)),
+                   opacity=0.5,
+                   color='rgba(244,22,100,0.6)'
+                  )])
+
+fig.update_layout(
+    scene = dict(
+        xaxis = dict(nticks=4, range=[-100,100],),
+                     yaxis = dict(nticks=4, range=[None, 100],),
+                     zaxis = dict(nticks=4, range=[-100, None],),),
+    width=700,
+    margin=dict(r=20, l=10, b=10, t=10))
+
+fig.show()
+```
+
+### Fixed Ratio Axes
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+N = 50
+
+fig = make_subplots(rows=2, cols=2,
+                    specs=[[{'is_3d': True}, {'is_3d': True}],
+                           [{'is_3d': True}, {'is_3d': True}]],
+                    print_grid=False)
+for i in [1,2]:
+    for j in [1,2]:
+        fig.add_trace(
+            go.Mesh3d(
+                x=(60*np.random.randn(N)),
+                y=(25*np.random.randn(N)),
+                z=(40*np.random.randn(N)),
+                opacity=0.5,
+              ),
+            row=i, col=j)
+
+fig.update_layout(width=700, margin=dict(r=10, l=10, b=10, t=10))
+# fix the ratio in the top left subplot to be a cube
+fig.update_layout(scene_aspectmode='cube')
+# manually force the z-axis to appear twice as big as the other two
+fig.update_layout(scene2_aspectmode='manual',
+                  scene2_aspectratio=dict(x=1, y=1, z=2))
+# draw axes in proportion to the proportion of their ranges
+fig.update_layout(scene3_aspectmode='data')
+# automatically produce something that is well proportioned using 'data' as the default
+fig.update_layout(scene4_aspectmode='auto')
+fig.show()
+```
+
+### Set Axes Title
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Define random surface
+N = 50
+fig = go.Figure()
+fig.add_trace(go.Mesh3d(x=(60*np.random.randn(N)),
+                   y=(25*np.random.randn(N)),
+                   z=(40*np.random.randn(N)),
+                   opacity=0.5,
+                   color='yellow'
+                  ))
+fig.add_trace(go.Mesh3d(x=(70*np.random.randn(N)),
+                   y=(55*np.random.randn(N)),
+                   z=(30*np.random.randn(N)),
+                   opacity=0.5,
+                   color='pink'
+                  ))
+
+fig.update_layout(scene = dict(
+                      xaxis=dict(
+                          title=dict(
+                              text='X AXIS TITLE'
+                          )
+                      ),
+                      yaxis=dict(
+                          title=dict(
+                              text='Y AXIS TITLE'
+                          )
+                      ),
+                      zaxis=dict(
+                          title=dict(
+                              text='Z AXIS TITLE'
+                          )
+                      ),
+                    ),
+                    width=700,
+                    margin=dict(r=20, b=10, l=10, t=10))
+
+fig.show()
+```
+
+### Ticks Formatting
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Define random surface
+N = 50
+fig = go.Figure(data=[go.Mesh3d(x=(60*np.random.randn(N)),
+                   y=(25*np.random.randn(N)),
+                   z=(40*np.random.randn(N)),
+                   opacity=0.5,
+                   color='rgba(100,22,200,0.5)'
+                  )])
+
+# Different types of customized ticks
+fig.update_layout(scene = dict(
+                    xaxis = dict(
+                        ticktext= ['TICKS','MESH','PLOTLY','PYTHON'],
+                        tickvals= [0,50,75,-50]),
+                    yaxis = dict(
+                        nticks=5, tickfont=dict(
+                            color='green',
+                            size=12,
+                            family='Old Standard TT, serif',),
+                        ticksuffix='#'),
+                    zaxis = dict(
+                        nticks=4, ticks='outside',
+                        tick0=0, tickwidth=4),),
+                    width=700,
+                    margin=dict(r=10, l=10, b=10, t=10)
+                  )
+
+fig.show()
+```
+
+### Background and Grid Color
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+N = 50
+fig = go.Figure(data=[go.Mesh3d(x=(30*np.random.randn(N)),
+                   y=(25*np.random.randn(N)),
+                   z=(30*np.random.randn(N)),
+                   opacity=0.5,)])
+
+
+# xaxis.backgroundcolor is used to set background color
+fig.update_layout(scene = dict(
+                    xaxis = dict(
+                         backgroundcolor="rgb(200, 200, 230)",
+                         gridcolor="white",
+                         showbackground=True,
+                         zerolinecolor="white",),
+                    yaxis = dict(
+                        backgroundcolor="rgb(230, 200,230)",
+                        gridcolor="white",
+                        showbackground=True,
+                        zerolinecolor="white"),
+                    zaxis = dict(
+                        backgroundcolor="rgb(230, 230,200)",
+                        gridcolor="white",
+                        showbackground=True,
+                        zerolinecolor="white",),),
+                    width=700,
+                    margin=dict(
+                    r=10, l=10,
+                    b=10, t=10)
+                  )
+fig.show()
+```
+
+### Disabling tooltip spikes
+
+By default, guidelines originating from the tooltip point are drawn. It is possible to disable this behaviour with the `showspikes` parameter. In this example we only keep the `z` spikes (projection of the tooltip on the `x-y` plane). Hover on the data to show this behaviour.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+N = 50
+fig = go.Figure(data=[go.Mesh3d(x=(30*np.random.randn(N)),
+                   y=(25*np.random.randn(N)),
+                   z=(30*np.random.randn(N)),
+                   opacity=0.5,)])
+fig.update_layout(scene=dict(xaxis_showspikes=False,
+                             yaxis_showspikes=False))
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-bubble-charts.md plotly-7.1.0+dfsg1/doc/python/3d-bubble-charts.md
--- plotly-5.20.0+dfsg/doc/python/3d-bubble-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-bubble-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,221 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: How to make 3D Bubble Charts in Python with Plotly. Three examples
+      of 3D Bubble Charts.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Bubble Charts
+    order: 6
+    page_type: u-guide
+    permalink: python/3d-bubble-charts/
+    thumbnail: thumbnail/3dbubble.jpg
+---
+
+### 3d Bubble chart with Plotly Express
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.gapminder()
+fig = px.scatter_3d(df, x='year', y='continent', z='pop', size='gdpPercap', color='lifeExp',
+                    hover_data=['country'])
+fig.update_layout(scene_zaxis_type="log")
+fig.show()
+```
+
+#### Simple Bubble Chart
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# Get Data: this ex will only use part of it (i.e. rows 750-1500)
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')
+
+start, end = 750, 1500
+
+fig = go.Figure(data=go.Scatter3d(
+    x=df['year'][start:end],
+    y=df['continent'][start:end],
+    z=df['pop'][start:end],
+    text=df['country'][start:end],
+    mode='markers',
+    marker=dict(
+        sizemode='diameter',
+        sizeref=750,
+        size=df['gdpPercap'][start:end],
+        color = df['lifeExp'][start:end],
+        colorscale = 'Viridis',
+        colorbar_title = 'Life<br>Expectancy',
+        line_color='rgb(140, 140, 170)'
+    )
+))
+
+
+fig.update_layout(height=800, width=800,
+                  title=dict(text='Examining Population and Life Expectancy Over Time'))
+
+fig.show()
+```
+
+#### Bubble Chart Sized by a Variable
+
+Plot planets' distance from sun, density, and gravity with bubble size based on planet size
+
+```python
+import plotly.graph_objects as go
+
+planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto']
+planet_colors = ['rgb(135, 135, 125)', 'rgb(210, 50, 0)', 'rgb(50, 90, 255)',
+                 'rgb(178, 0, 0)', 'rgb(235, 235, 210)', 'rgb(235, 205, 130)',
+                 'rgb(55, 255, 217)', 'rgb(38, 0, 171)', 'rgb(255, 255, 255)']
+distance_from_sun = [57.9, 108.2, 149.6, 227.9, 778.6, 1433.5, 2872.5, 4495.1, 5906.4]
+density = [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638, 2095]
+gravity = [3.7, 8.9, 9.8, 3.7, 23.1, 9.0, 8.7, 11.0, 0.7]
+planet_diameter = [4879, 12104, 12756, 6792, 142984, 120536, 51118, 49528, 2370]
+
+# Create trace, sizing bubbles by planet diameter
+fig = go.Figure(data=go.Scatter3d(
+    x = distance_from_sun,
+    y = density,
+    z = gravity,
+    text = planets,
+    mode = 'markers',
+    marker = dict(
+        sizemode = 'diameter',
+        sizeref = 750, # info on sizeref: https://plotly.com/python/reference/scatter/#scatter-marker-sizeref
+        size = planet_diameter,
+        color = planet_colors,
+        )
+))
+
+fig.update_layout(
+    width=800,
+    height=800,
+    title=dict(text="Planets!"),
+    scene=dict(
+        xaxis=dict(
+            title=dict(
+                text="Distance from Sun",
+                font=dict(
+                    color="white"
+                )
+            )
+        ),
+        yaxis=dict(
+            title=dict(
+                text="Density",
+                font=dict(
+                    color="white"
+                )
+            )
+        ),
+        zaxis=dict(
+            title=dict(
+                text="Gravity",
+                font=dict(
+                    color="white"
+                )
+            )
+        ),
+        bgcolor="rgb(20, 24, 54)"
+    )
+)
+
+fig.show()
+```
+
+#### Edit the Colorbar
+
+Plot planets' distance from sun, density, and gravity with bubble size based on planet size
+
+```python
+import plotly.graph_objects as go
+
+planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto']
+temperatures = [167, 464, 15, -20, -65, -110, -140, -195, -200, -225]
+distance_from_sun = [57.9, 108.2, 149.6, 227.9, 778.6, 1433.5, 2872.5, 4495.1, 5906.4]
+density = [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638, 2095]
+gravity = [3.7, 8.9, 9.8, 3.7, 23.1, 9.0, 8.7, 11.0, 0.7]
+planet_diameter = [4879, 12104, 12756, 6792, 142984, 120536, 51118, 49528, 2370]
+
+# Create trace, sizing bubbles by planet diameter
+fig = go.Figure(go.Scatter3d(
+    x = distance_from_sun,
+    y = density,
+    z = gravity,
+    text = planets,
+    mode = 'markers',
+    marker = dict(
+        sizemode = 'diameter',
+        sizeref = 750, # info on sizeref: https://plotly.com/python/reference/scatter/#scatter-marker-sizeref
+        size = planet_diameter,
+        color = temperatures,
+        colorbar_title = 'Mean<br>Temperature',
+        colorscale=[[0, 'rgb(5, 10, 172)'], [.3, 'rgb(255, 255, 255)'], [1, 'rgb(178, 10, 28)']]
+        )
+))
+
+fig.update_layout(
+    width=800,
+    height=800,
+    title=dict(text="Planets!"),
+    scene=dict(
+        xaxis=dict(
+            title=dict(
+                text="Distance from Sun",
+                font=dict(
+                    color="white"
+                )
+            )
+        ),
+        yaxis=dict(
+            title=dict(
+                text="Density",
+                font=dict(
+                    color="white"
+                )
+            )
+        ),
+        zaxis=dict(
+            title=dict(
+                text="Gravity",
+                font=dict(
+                    color="white"
+                )
+            )
+        ),
+        bgcolor="rgb(20, 24, 54)"
+    )
+)
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/scatter3d/ and https://plotly.com/python/reference/scatter/#scatter-marker-sizeref <br>for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-camera-controls.md plotly-7.1.0+dfsg1/doc/python/3d-camera-controls.md
--- plotly-5.20.0+dfsg/doc/python/3d-camera-controls.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-camera-controls.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,293 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.2.3
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to Control the Camera in your 3D Charts in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Camera Controls
+    order: 5
+    permalink: python/3d-camera-controls/
+    thumbnail: thumbnail/3d-camera-controls.jpg
+---
+
+### How camera controls work
+
+The camera position and direction is determined by three vectors: *up*, *center*, *eye*. Their coordinates refer to the 3-d domain, i.e., `(0, 0, 0)` is always the center of the domain, no matter data values.
+The `eye` vector determines the position of the camera. The default is $(x=1.25, y=1.25, z=1.25)$.
+
+The `up` vector determines the `up` direction on the page. The default is $(x=0, y=0, z=1)$, that is, the z-axis points up.
+
+The projection of the `center` point lies at the center of the view. By default it is $(x=0, y=0, z=0)$.
+
+
+### Default parameters
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=40, r=0, l=20, b=20)
+)
+
+name = 'default'
+# Default parameters which are used when `layout.scene.camera` is not provided
+camera = dict(
+    up=dict(x=0, y=0, z=1),
+    center=dict(x=0, y=0, z=0),
+    eye=dict(x=1.25, y=1.25, z=1.25)
+)
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+### Changing the camera position by setting the eye parameter
+
+#### Lower the View Point
+
+by setting `eye.z` to a smaller value.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+name = 'eye = (x:2, y:2, z:0.1)'
+camera = dict(
+    eye=dict(x=2, y=2, z=0.1)
+)
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+#### X-Z plane
+
+set `eye.x` and `eye.z` to zero
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+name = 'eye = (x:0., y:2.5, z:0.)'
+camera = dict(
+    eye=dict(x=0., y=2.5, z=0.)
+)
+
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+#### Y-Z plane
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+name = 'eye = (x:2.5, y:0., z:0.)'
+camera = dict(
+    eye=dict(x=2.5, y=0., z=0.)
+)
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+#### View from Above (X-Y plane)
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+name = 'eye = (x:0., y:0., z:2.5)'
+camera = dict(
+    eye=dict(x=0., y=0., z=2.5)
+)
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+#### Zooming In
+... by placing the camera closer to the origin (`eye` with a smaller norm)
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+name = 'eye = (x:0.1, y:0.1, z:1.5)'
+camera = dict(
+    eye=dict(x=0.1, y=0.1, z=1.5)
+)
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+### Tilting the camera vertical by setting the up parameter
+
+Tilt camera by changing the `up` vector: here the vertical of the view points in the `x` direction.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+name = 'eye = (x:0., y:2.5, z:0.), point along x'
+camera = dict(
+    up=dict(x=1, y=0., z=0),
+    eye=dict(x=0., y=2.5, z=0.)
+)
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+Note when `up` does not correspond to the direction of an axis, you also need to set `layout.scene.dragmode='orbit'`.
+
+```python
+import math
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=30, r=0, l=20, b=10)
+)
+
+angle = math.pi / 4 # 45 degrees
+
+name = 'vertical is along y+z'
+camera = dict(
+    up=dict(x=0, y=math.cos(angle), z=math.sin(angle)),
+    eye=dict(x=2, y=0, z=0)
+)
+
+fig.update_layout(scene_camera=camera, scene_dragmode='orbit', title=name)
+fig.show()
+```
+
+### Changing the focal point by setting center
+
+You can change the focal point (a point which projection lies at the center of the view) by setting the `center` parameter of `camera`. Note how a part of the data is cropped below because the camera is looking up.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=go.Surface(z=z_data, showscale=False))
+fig.update_layout(
+    title=dict(text='Mt Bruno Elevation'),
+    width=400, height=400,
+    margin=dict(t=25, r=0, l=20, b=30)
+)
+
+name = 'looking up'
+camera = dict(
+    center=dict(x=0, y=0, z=0.7))
+
+
+fig.update_layout(scene_camera=camera, title=name)
+fig.show()
+```
+
+#### Reference
+
+
+See https://plotly.com/python/reference/layout/scene/#layout-scene-camera for more information and chart attribute options!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-isosurface-plots.md plotly-7.1.0+dfsg1/doc/python/3d-isosurface-plots.md
--- plotly-5.20.0+dfsg/doc/python/3d-isosurface-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-isosurface-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,238 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make 3D Isosurface Plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Isosurface Plots
+    order: 10
+    page_type: u-guide
+    permalink: python/3d-isosurface-plots/
+    redirect_from: python/isosurfaces-with-marching-cubes/
+    thumbnail: thumbnail/isosurface.jpg
+---
+
+With ``go.Isosurface``, you can plot [isosurface contours](https://en.wikipedia.org/wiki/Isosurface) of a scalar field ``value``, which is defined on ``x``, ``y`` and ``z`` coordinates.
+
+#### Basic Isosurface
+
+In this first example, we plot the isocontours of values ``isomin=2`` and ``isomax=6``. In addition, portions of the sides of the coordinate domains for which the value is between ``isomin`` and ``isomax`` (named the ``caps``) are colored. Please rotate the figure to visualize both the internal surfaces and the caps surfaces on the sides.
+
+```python
+import plotly.graph_objects as go
+
+fig= go.Figure(data=go.Isosurface(
+    x=[0,0,0,0,1,1,1,1],
+    y=[1,0,1,0,1,0,1,0],
+    z=[1,1,0,0,1,1,0,0],
+    value=[1,2,3,4,5,6,7,8],
+    isomin=2,
+    isomax=6,
+))
+
+fig.show()
+```
+
+### Removing caps when visualizing isosurfaces
+
+For a clearer visualization of internal surfaces, it is possible to remove the caps (color-coded surfaces on the sides of the visualization domain). Caps are visible by default.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, -5:5:40j]
+
+# ellipsoid
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=10,
+    isomax=40,
+    caps=dict(x_show=False, y_show=False)
+    ))
+fig.show()
+```
+
+### Modifying the number of isosurfaces
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, -5:5:40j]
+
+# ellipsoid
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=10,
+    isomax=50,
+    surface_count=5, # number of isosurfaces, 2 by default: only min and max
+    colorbar_nticks=5, # colorbar ticks correspond to isosurface values
+    caps=dict(x_show=False, y_show=False)
+    ))
+fig.show()
+```
+
+### Changing the opacity of isosurfaces
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, -5:5:40j]
+
+# ellipsoid
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    opacity=0.6,
+    isomin=10,
+    isomax=50,
+    surface_count=3,
+    caps=dict(x_show=False, y_show=False)
+    ))
+fig.show()
+```
+
+#### Isosurface with Additional Slices
+
+Here we visualize slices parallel to the axes on top of isosurfaces. For a clearer visualization, the `fill` ratio of isosurfaces is decreased below 1 (completely filled).
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, -5:5:40j]
+
+# ellipsoid
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=5,
+    isomax=50,
+    surface_fill=0.4,
+    caps=dict(x_show=False, y_show=False),
+    slices_z=dict(show=True, locations=[-1, -3,]),
+    slices_y=dict(show=True, locations=[0]),
+    ))
+fig.show()
+```
+
+#### Multiple Isosurfaces with Caps
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, 0:5:20j]
+
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=30,
+    isomax=50,
+    surface=dict(count=3, fill=0.7, pattern='odd'),
+    caps=dict(x_show=True, y_show=True),
+    ))
+fig.show()
+```
+
+### Changing the default colorscale of isosurfaces
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, -5:5:40j]
+
+# ellipsoid
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    colorscale='BlueRed',
+    isomin=10,
+    isomax=50,
+    surface_count=3,
+    caps=dict(x_show=False, y_show=False)
+    ))
+fig.show()
+```
+
+### Customizing the layout and appearance of isosurface plots
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+X, Y, Z = np.mgrid[-5:5:40j, -5:5:40j, 0:5:20j]
+
+values = X * X * 0.5 + Y * Y + Z * Z * 2
+
+fig = go.Figure(data=go.Isosurface(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=30,
+    isomax=50,
+    surface=dict(count=3, fill=0.7, pattern='odd'),
+    showscale=False, # remove colorbar
+    caps=dict(x_show=True, y_show=True),
+    ))
+
+fig.update_layout(
+    margin=dict(t=0, l=0, b=0), # tight layout
+    scene_camera_eye=dict(x=1.86, y=0.61, z=0.98))
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/isosurface/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-line-plots.md plotly-7.1.0+dfsg1/doc/python/3d-line-plots.md
--- plotly-5.20.0+dfsg/doc/python/3d-line-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-line-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,121 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.2.3
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make 3D Line Plots
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Line Plots
+    order: 7
+    page_type: u-guide
+    permalink: python/3d-line-plots/
+    thumbnail: thumbnail/3d-line.jpg
+---
+
+### 3D Line plot with Plotly Express
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("country=='Brazil'")
+fig = px.line_3d(df, x="gdpPercap", y="pop", z="year")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("continent=='Europe'")
+fig = px.line_3d(df, x="gdpPercap", y="pop", z="year", color='country')
+fig.show()
+```
+
+#### 3D Line Plot of Brownian Motion
+
+Here we represent a trajectory in 3D.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+import numpy as np
+
+rs = np.random.RandomState()
+rs.seed(0)
+
+def brownian_motion(T = 1, N = 100, mu = 0.1, sigma = 0.01, S0 = 20):
+    dt = float(T)/N
+    t = np.linspace(0, T, N)
+    W = rs.standard_normal(size = N)
+    W = np.cumsum(W)*np.sqrt(dt) # standard brownian motion
+    X = (mu-0.5*sigma**2)*t + sigma*W
+    S = S0*np.exp(X) # geometric brownian motion
+    return S
+
+dates = pd.date_range('2012-01-01', '2013-02-22')
+T = (dates.max()-dates.min()).days / 365
+N = dates.size
+start_price = 100
+y = brownian_motion(T, N, sigma=0.1, S0=start_price)
+z = brownian_motion(T, N, sigma=0.1, S0=start_price)
+
+fig = go.Figure(data=go.Scatter3d(
+    x=dates, y=y, z=z,
+    marker=dict(
+        size=4,
+        color=z,
+        colorscale='Viridis',
+    ),
+    line=dict(
+        color='darkblue',
+        width=2
+    )
+))
+
+fig.update_layout(
+    width=800,
+    height=700,
+    autosize=False,
+    scene=dict(
+        camera=dict(
+            up=dict(
+                x=0,
+                y=0,
+                z=1
+            ),
+            eye=dict(
+                x=0,
+                y=1.0707,
+                z=1,
+            )
+        ),
+        aspectratio = dict( x=1, y=1, z=0.7 ),
+        aspectmode = 'manual'
+    ),
+)
+
+fig.show()
+
+```
+
+#### Reference
+
+See [function reference for `px.(line_3d)`](https://plotly.com/python-api-reference/generated/plotly.express.line_3d) or https://plotly.com/python/reference/scatter3d/#scatter3d-marker-line for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-mesh.md plotly-7.1.0+dfsg1/doc/python/3d-mesh.md
--- plotly-5.20.0+dfsg/doc/python/3d-mesh.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-mesh.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,185 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make 3D Mesh Plots
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Mesh Plots
+    order: 9
+    page_type: u-guide
+    permalink: python/3d-mesh/
+    thumbnail: thumbnail/3d-mesh.jpg
+---
+
+### Simple 3D Mesh example ###
+
+`go.Mesh3d` draws a 3D set of triangles with vertices given by `x`, `y` and `z`. If only coordinates are given, an algorithm such as [Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation) is used to draw the triangles. Otherwise the triangles can be given using the `i`, `j` and `k` parameters (see examples below).
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Download data set from plotly repo
+pts = np.loadtxt(np.DataSource().open('https://raw.githubusercontent.com/plotly/datasets/master/mesh_dataset.txt'))
+x, y, z = pts.T
+
+fig = go.Figure(data=[go.Mesh3d(x=x, y=y, z=z, color='lightpink', opacity=0.50)])
+fig.show()
+```
+
+### 3D Mesh example with Alphahull
+
+
+The `alphahull` parameter sets the shape of the mesh. If the value is -1 (default value) then [Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation) is used. If >0 then the [alpha-shape algorithm](https://en.wikipedia.org/wiki/Alpha_shape) is used. If 0, the [convex hull](https://en.wikipedia.org/wiki/Convex_hull) is represented (resulting in a convex body).
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+pts = np.loadtxt(np.DataSource().open('https://raw.githubusercontent.com/plotly/datasets/master/mesh_dataset.txt'))
+x, y, z = pts.T
+
+fig = go.Figure(data=[go.Mesh3d(x=x, y=y, z=z,
+                   alphahull=5,
+                   opacity=0.4,
+                   color='cyan')])
+fig.show()
+```
+
+### 3D Mesh in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + '3d-mesh', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Mesh Tetrahedron
+
+In this example we use the `i`, `j` and `k` parameters to specify manually the geometry of the triangles of the mesh.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[
+    go.Mesh3d(
+        x=[0, 1, 2, 0],
+        y=[0, 0, 1, 2],
+        z=[0, 2, 0, 1],
+        colorbar=dict(title=dict(text='z')),
+        colorscale=[[0, 'gold'],
+                    [0.5, 'mediumturquoise'],
+                    [1, 'magenta']],
+        # Intensity of each vertex, which will be interpolated and color-coded
+        intensity=[0, 0.33, 0.66, 1],
+        # i, j and k give the vertices of triangles
+        # here we represent the 4 triangles of the tetrahedron surface
+        i=[0, 0, 0, 1],
+        j=[1, 2, 3, 2],
+        k=[2, 3, 1, 3],
+        name='y',
+        showscale=True
+    )
+])
+
+fig.show()
+```
+
+### Mesh Cube
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+fig = go.Figure(data=[
+    go.Mesh3d(
+        # 8 vertices of a cube
+        x=[0, 0, 1, 1, 0, 0, 1, 1],
+        y=[0, 1, 1, 0, 0, 1, 1, 0],
+        z=[0, 0, 0, 0, 1, 1, 1, 1],
+        colorbar=dict(title=dict(text='z')),
+        colorscale=[[0, 'gold'],
+                    [0.5, 'mediumturquoise'],
+                    [1, 'magenta']],
+        # Intensity of each vertex, which will be interpolated and color-coded
+        intensity = np.linspace(0, 1, 8, endpoint=True),
+        # i, j and k give the vertices of triangles
+        i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2],
+        j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3],
+        k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6],
+        name='y',
+        showscale=True
+    )
+])
+
+fig.show()
+```
+
+### Intensity values defined on vertices or cells
+
+The `intensitymode` attribute of `go.Mesh3d` can be set to `vertex` (default mode, in which case intensity values are interpolated between values defined on vertices), or to `cell` (value of the whole cell, no interpolation). Note that the `intensity` parameter should have the same length as the number of vertices or cells, depending on the `intensitymode`.
+
+Whereas the previous example used the default `intensitymode='vertex'`, we plot here the same mesh with `intensitymode='cell'`.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+fig = go.Figure(data=[
+    go.Mesh3d(
+        # 8 vertices of a cube
+        x=[0, 0, 1, 1, 0, 0, 1, 1],
+        y=[0, 1, 1, 0, 0, 1, 1, 0],
+        z=[0, 0, 0, 0, 1, 1, 1, 1],
+        colorbar=dict(title=dict(text='z')),
+        colorscale=[[0, 'gold'],
+                    [0.5, 'mediumturquoise'],
+                    [1, 'magenta']],
+        # Intensity of each vertex, which will be interpolated and color-coded
+        intensity = np.linspace(0, 1, 12, endpoint=True),
+        intensitymode='cell',
+        # i, j and k give the vertices of triangles
+        i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2],
+        j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3],
+        k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6],
+        name='y',
+        showscale=True
+    )
+])
+
+fig.show()
+```
+
+## Reference
+See https://plotly.com/python/reference/mesh3d/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-scatter-plots.md plotly-7.1.0+dfsg1/doc/python/3d-scatter-plots.md
--- plotly-5.20.0+dfsg/doc/python/3d-scatter-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-scatter-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,143 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make 3D scatter plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Scatter Plots
+    order: 2
+    page_type: example_index
+    permalink: python/3d-scatter-plots/
+    thumbnail: thumbnail/3d-scatter.jpg
+---
+
+## 3D scatter plot with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Like the [2D scatter plot](https://plotly.com/python/line-and-scatter/) `px.scatter`, the 3D function `px.scatter_3d` plots individual data in three-dimensional space.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
+              color='species')
+fig.show()
+```
+
+A 4th dimension of the data can be represented thanks to the color of the markers. Also, values from the `species` column are used below to assign symbols to markers.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
+                    color='petal_length', symbol='species')
+fig.show()
+```
+
+#### Style 3d scatter plot
+
+It is possible to customize the style of the figure through the parameters of `px.scatter_3d` for some options, or by updating the traces or the layout of the figure through `fig.update`.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
+              color='petal_length', size='petal_length', size_max=18,
+              symbol='species', opacity=0.7)
+
+# tight layout
+fig.update_layout(margin=dict(l=0, r=0, b=0, t=0))
+fig.show()
+```
+
+#### 3d scatter plots in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + '3d-scatter-plots', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### 3D Scatter Plot with go.Scatter3d
+
+#### Basic 3D Scatter Plot
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Scatter3D` class from `plotly.graph_objects`](/python/graph-objects/).
+Like the [2D scatter plot](https://plotly.com/python/line-and-scatter/) `go.Scatter`, `go.Scatter3d` plots individual data in three-dimensional space.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Helix equation
+t = np.linspace(0, 10, 50)
+x, y, z = np.cos(t), np.sin(t), t
+
+fig = go.Figure(data=[go.Scatter3d(x=x, y=y, z=z,
+                                   mode='markers')])
+fig.show()
+```
+
+#### 3D Scatter Plot with Colorscaling and Marker Styling
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Helix equation
+t = np.linspace(0, 20, 100)
+x, y, z = np.cos(t), np.sin(t), t
+
+fig = go.Figure(data=[go.Scatter3d(
+    x=x,
+    y=y,
+    z=z,
+    mode='markers',
+    marker=dict(
+        size=12,
+        color=z,                # set color to an array/list of desired values
+        colorscale='Viridis',   # choose a colorscale
+        opacity=0.8
+    )
+)])
+
+# tight layout
+fig.update_layout(margin=dict(l=0, r=0, b=0, t=0))
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.scatter_3d()`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_3d) or https://plotly.com/python/reference/scatter3d/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-subplots.md plotly-7.1.0+dfsg1/doc/python/3d-subplots.md
--- plotly-5.20.0+dfsg/doc/python/3d-subplots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-subplots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,85 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.6
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: 3D Subplots in Plotly
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Subplots
+    order: 4
+    page_type: example_index
+    permalink: python/3d-subplots/
+    thumbnail: thumbnail/3d-subplots.jpg
+---
+
+#### 3D Surface Subplots
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+import numpy as np
+
+# Initialize figure with 4 3D subplots
+fig = make_subplots(
+    rows=2, cols=2,
+    specs=[[{'type': 'surface'}, {'type': 'surface'}],
+           [{'type': 'surface'}, {'type': 'surface'}]])
+
+# Generate data
+x = np.linspace(-5, 80, 10)
+y = np.linspace(-5, 60, 10)
+xGrid, yGrid = np.meshgrid(y, x)
+z = xGrid ** 3 + yGrid ** 3
+
+# adding surfaces to subplots.
+fig.add_trace(
+    go.Surface(x=x, y=y, z=z, colorscale='Viridis', showscale=False),
+    row=1, col=1)
+
+fig.add_trace(
+    go.Surface(x=x, y=y, z=z, colorscale='RdBu', showscale=False),
+    row=1, col=2)
+
+fig.add_trace(
+    go.Surface(x=x, y=y, z=z, colorscale='YlOrRd', showscale=False),
+    row=2, col=1)
+
+fig.add_trace(
+    go.Surface(x=x, y=y, z=z, colorscale='YlGnBu', showscale=False),
+    row=2, col=2)
+
+fig.update_layout(
+    title_text='3D subplots with different colorscales',
+    height=800,
+    width=800
+)
+
+fig.show()
+```
+
+#### Reference
+
+
+See https://plotly.com/python/subplots/ for more information regarding subplots!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-surface-plots.md plotly-7.1.0+dfsg1/doc/python/3d-surface-plots.md
--- plotly-5.20.0+dfsg/doc/python/3d-surface-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-surface-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,199 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make 3D-surface plots in Python
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Surface Plots
+    order: 3
+    page_type: example_index
+    permalink: python/3d-surface-plots/
+    redirect_from: python/3d-surface-coloring/
+    thumbnail: thumbnail/3d-surface.jpg
+---
+
+#### Topographical 3D Surface Plot
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=[go.Surface(z=z_data.values)])
+
+fig.update_layout(title=dict(text='Mt Bruno Elevation'), autosize=False,
+                  width=500, height=500,
+                  margin=dict(l=65, r=50, b=65, t=90))
+
+fig.show()
+```
+
+### Passing x and y data to 3D Surface Plot
+
+If you do not specify `x` and `y` coordinates, integer indices are used for the `x` and `y` axis. You can also pass `x` and `y` values to `go.Surface`.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+import numpy as np
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+z = z_data.values
+sh_0, sh_1 = z.shape
+x, y = np.linspace(0, 1, sh_0), np.linspace(0, 1, sh_1)
+fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])
+fig.update_layout(title=dict(text='Mt Bruno Elevation'), autosize=False,
+                  width=500, height=500,
+                  margin=dict(l=65, r=50, b=65, t=90))
+fig.show()
+```
+
+
+#### Surface Plot With Contours
+
+
+Display and customize contour data for each axis using the `contours` attribute ([reference](https://plotly.com/python/reference/surface/#surface-contours)).
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# Read data from a csv
+z_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv')
+
+fig = go.Figure(data=[go.Surface(z=z_data.values)])
+fig.update_traces(contours_z=dict(show=True, usecolormap=True,
+                                  highlightcolor="limegreen", project_z=True))
+fig.update_layout(title=dict(text='Mt Bruno Elevation'), autosize=False,
+                  scene_camera_eye=dict(x=1.87, y=0.88, z=-0.64),
+                  width=500, height=500,
+                  margin=dict(l=65, r=50, b=65, t=90)
+)
+
+fig.show()
+```
+#### Configure Surface Contour Levels
+This example shows how to slice the surface graph on the desired position for each of x, y and z axis. [contours.x.start](https://plotly.com/python/reference/surface/#surface-contours-x-start) sets the starting contour level value, `end` sets the end of it, and `size` sets the step between each contour level.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Surface(
+    contours = {
+        "x": {"show": True, "start": 1.5, "end": 2, "size": 0.04, "color":"white"},
+        "z": {"show": True, "start": 0.5, "end": 0.8, "size": 0.05}
+    },
+    x = [1,2,3,4,5],
+    y = [1,2,3,4,5],
+    z = [
+        [0, 1, 0, 1, 0],
+        [1, 0, 1, 0, 1],
+        [0, 1, 0, 1, 0],
+        [1, 0, 1, 0, 1],
+        [0, 1, 0, 1, 0]
+    ]))
+fig.update_layout(
+        scene = {
+            "xaxis": {"nticks": 20},
+            "zaxis": {"nticks": 4},
+            'camera_eye': {"x": 0, "y": -1, "z": 0.5},
+            "aspectratio": {"x": 1, "y": 1, "z": 0.2}
+        })
+fig.show()
+```
+#### Multiple 3D Surface Plots
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+z1 = np.array([
+    [8.83,8.89,8.81,8.87,8.9,8.87],
+    [8.89,8.94,8.85,8.94,8.96,8.92],
+    [8.84,8.9,8.82,8.92,8.93,8.91],
+    [8.79,8.85,8.79,8.9,8.94,8.92],
+    [8.79,8.88,8.81,8.9,8.95,8.92],
+    [8.8,8.82,8.78,8.91,8.94,8.92],
+    [8.75,8.78,8.77,8.91,8.95,8.92],
+    [8.8,8.8,8.77,8.91,8.95,8.94],
+    [8.74,8.81,8.76,8.93,8.98,8.99],
+    [8.89,8.99,8.92,9.1,9.13,9.11],
+    [8.97,8.97,8.91,9.09,9.11,9.11],
+    [9.04,9.08,9.05,9.25,9.28,9.27],
+    [9,9.01,9,9.2,9.23,9.2],
+    [8.99,8.99,8.98,9.18,9.2,9.19],
+    [8.93,8.97,8.97,9.18,9.2,9.18]
+])
+
+z2 = z1 + 1
+z3 = z1 - 1
+
+fig = go.Figure(data=[
+    go.Surface(z=z1),
+    go.Surface(z=z2, showscale=False, opacity=0.9),
+    go.Surface(z=z3, showscale=False, opacity=0.9)
+
+])
+
+fig.show()
+```
+
+### Setting the Surface Color
+
+You can use the `surfacecolor` attribute to define the color of the surface of your figure. In this example, the surface color represents the distance from the origin, rather than the default, which is the `z` value.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+# Equation of ring cyclide
+# see https://en.wikipedia.org/wiki/Dupin_cyclide
+import numpy as np
+a, b, d = 1.32, 1., 0.8
+c = a**2 - b**2
+u, v = np.mgrid[0:2*np.pi:100j, 0:2*np.pi:100j]
+x = (d * (c - a * np.cos(u) * np.cos(v)) + b**2 * np.cos(u)) / (a - c * np.cos(u) * np.cos(v))
+y = b * np.sin(u) * (a - d*np.cos(v)) / (a - c * np.cos(u) * np.cos(v))
+z = b * np.sin(v) * (c*np.cos(u) - d) / (a - c * np.cos(u) * np.cos(v))
+
+fig = make_subplots(rows=1, cols=2,
+                    specs=[[{'is_3d': True}, {'is_3d': True}]],
+                    subplot_titles=['Color corresponds to z', 'Color corresponds to distance to origin'],
+                    )
+
+fig.add_trace(go.Surface(x=x, y=y, z=z, colorbar_x=-0.07), 1, 1)
+fig.add_trace(go.Surface(x=x, y=y, z=z, surfacecolor=x**2 + y**2 + z**2), 1, 2)
+fig.update_layout(title_text="Ring cyclide")
+fig.show()
+```
+
+#### Reference
+
+
+See https://plotly.com/python/reference/surface/ for more information!
diff -Nru plotly-5.20.0+dfsg/doc/python/3d-volume.md plotly-7.1.0+dfsg1/doc/python/3d-volume.md
--- plotly-5.20.0+dfsg/doc/python/3d-volume.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/3d-volume.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,260 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.0
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make 3D Volume Plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Volume Plots
+    order: 11
+    page_type: u-guide
+    permalink: python/3d-volume-plots/
+    thumbnail: thumbnail/3d-volume-plots.jpg
+---
+
+A volume plot with `go.Volume` shows several partially transparent isosurfaces for volume rendering. The API of `go.Volume` is close to the one of `go.Isosurface`. However, whereas [isosurface plots](/python/3d-isosurface-plots/) show all surfaces with the same opacity, tweaking the `opacityscale` parameter of `go.Volume` results in a depth effect and better volume rendering.
+
+## Simple volume plot with go.Volume
+
+In the three examples below, note that the default colormap is different whether isomin and isomax have the same sign or not.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+X, Y, Z = np.mgrid[-8:8:40j, -8:8:40j, -8:8:40j]
+values = np.sin(X*Y*Z) / (X*Y*Z)
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=0.1,
+    isomax=0.8,
+    opacity=0.1, # needs to be small to see through all surfaces
+    surface_count=17, # needs to be a large number for good volume rendering
+    ))
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+X, Y, Z = np.mgrid[-1:1:30j, -1:1:30j, -1:1:30j]
+values =    np.sin(np.pi*X) * np.cos(np.pi*Z) * np.sin(np.pi*Y)
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=-0.1,
+    isomax=0.8,
+    opacity=0.1, # needs to be small to see through all surfaces
+    surface_count=21, # needs to be a large number for good volume rendering
+    ))
+fig.show()
+```
+
+```python
+import numpy as np
+import plotly.graph_objects as go
+
+# Generate nicely looking random 3D-field
+np.random.seed(0)
+l = 30
+X, Y, Z = np.mgrid[:l, :l, :l]
+vol = np.zeros((l, l, l))
+pts = (l * np.random.rand(3, 15)).astype(int)
+vol[tuple(indices for indices in pts)] = 1
+from scipy import ndimage
+vol = ndimage.gaussian_filter(vol, 4)
+vol /= vol.max()
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(), y=Y.flatten(), z=Z.flatten(),
+    value=vol.flatten(),
+    isomin=0.2,
+    isomax=0.7,
+    opacity=0.1,
+    surface_count=25,
+    ))
+fig.update_layout(scene_xaxis_showticklabels=False,
+                  scene_yaxis_showticklabels=False,
+                  scene_zaxis_showticklabels=False)
+fig.show()
+```
+
+### Defining the opacity scale of volume plots
+
+In order to see through the volume, the different isosurfaces need to be partially transparent. This transparency is controlled by a global parameter, `opacity`, as well as an opacity scale mapping scalar values to opacity levels. The figure below shows that changing the opacity scale changes a lot the visualization, so that `opacityscale` should be chosen carefully (`uniform` corresponds to a uniform opacity, `min`/`max` maps the minimum/maximum value to a maximal opacity, and `extremes` maps both the minimum and maximum values to maximal opacity, with a dip in between).
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+fig = make_subplots(
+    rows=2, cols=2,
+    specs=[[{'type': 'volume'}, {'type': 'volume'}],
+           [{'type': 'volume'}, {'type': 'volume'}]])
+
+import numpy as np
+
+X, Y, Z = np.mgrid[-8:8:30j, -8:8:30j, -8:8:30j]
+values =    np.sin(X*Y*Z) / (X*Y*Z)
+
+
+fig.add_trace(go.Volume(
+    opacityscale="uniform",
+    ), row=1, col=1)
+fig.add_trace(go.Volume(
+    opacityscale="extremes",
+    ), row=1, col=2)
+fig.add_trace(go.Volume(
+    opacityscale="min",
+    ), row=2, col=1)
+fig.add_trace(go.Volume(
+    opacityscale="max",
+    ), row=2, col=2)
+fig.update_traces(x=X.flatten(), y=Y.flatten(), z=Z.flatten(), value=values.flatten(),
+    isomin=0.15, isomax=0.9, opacity=0.1, surface_count=15)
+fig.show()
+```
+
+### Defining a custom opacity scale
+
+It is also possible to define a custom opacity scale, mapping scalar values to relative opacity values (between 0 and 1, the maximum opacity is given by the opacity keyword). This is useful to make a range of values completely transparent, as in the example below between -0.2 and 0.2.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+X, Y, Z = np.mgrid[-1:1:30j, -1:1:30j, -1:1:30j]
+values =    np.sin(np.pi*X) * np.cos(np.pi*Z) * np.sin(np.pi*Y)
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(),
+    y=Y.flatten(),
+    z=Z.flatten(),
+    value=values.flatten(),
+    isomin=-0.5,
+    isomax=0.5,
+    opacity=0.1, # max opacity
+    opacityscale=[[-0.5, 1], [-0.2, 0], [0.2, 0], [0.5, 1]],
+    surface_count=21,
+    colorscale='RdBu'
+    ))
+fig.show()
+```
+
+### Adding caps to a volume plot
+
+For a clearer visualization of internal surfaces, it is possible to remove the caps (color-coded surfaces on the sides of the visualization domain). Caps are visible by default. Compare below with and without caps.
+
+```python
+import numpy as np
+import plotly.graph_objects as go
+
+
+X, Y, Z = np.mgrid[:1:20j, :1:20j, :1:20j]
+vol = (X - 1)**2 + (Y - 1)**2 + Z**2
+
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(), y=Y.flatten(), z=Z.flatten(),
+    value=vol.flatten(),
+    isomin=0.2,
+    isomax=0.7,
+    opacity=0.2,
+    surface_count=21,
+    caps= dict(x_show=True, y_show=True, z_show=True, x_fill=1), # with caps (default mode)
+    ))
+
+# Change camera view for a better view of the sides, XZ plane
+# (see https://plotly.com/python/v3/3d-camera-controls/)
+fig.update_layout(scene_camera = dict(
+    up=dict(x=0, y=0, z=1),
+    center=dict(x=0, y=0, z=0),
+    eye=dict(x=0.1, y=2.5, z=0.1)
+))
+
+fig.show()
+```
+
+```python
+import numpy as np
+import plotly.graph_objects as go
+
+X, Y, Z = np.mgrid[:1:20j, :1:20j, :1:20j]
+vol = (X - 1)**2 + (Y - 1)**2 + Z**2
+
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(), y=Y.flatten(), z=Z.flatten(),
+    value=vol.flatten(),
+    isomin=0.2,
+    isomax=0.7,
+    opacity=0.2,
+    surface_count=21,
+    caps= dict(x_show=False, y_show=False, z_show=False), # no caps
+    ))
+fig.update_layout(scene_camera = dict(
+    up=dict(x=0, y=0, z=1),
+    center=dict(x=0, y=0, z=0),
+    eye=dict(x=0.1, y=2.5, z=0.1)
+))
+
+fig.show()
+```
+
+### Adding slices to a volume plot
+
+Slices through the volume can be added to the volume plot. In this example the isosurfaces are only partially filled so that the slice is more visible, and the caps were removed for the same purpose.
+
+```python
+import numpy as np
+import plotly.graph_objects as go
+
+X, Y, Z = np.mgrid[:1:20j, :1:20j, :1:20j]
+vol = (X - 1)**2 + (Y - 1)**2 + Z**2
+
+
+fig = go.Figure(data=go.Volume(
+    x=X.flatten(), y=Y.flatten(), z=Z.flatten(),
+    value=vol.flatten(),
+    isomin=0.2,
+    isomax=0.7,
+    opacity=0.2,
+    surface_count=21,
+    slices_z=dict(show=True, locations=[0.4]),
+    surface=dict(fill=0.5, pattern='odd'),
+    caps= dict(x_show=False, y_show=False, z_show=False), # no caps
+    ))
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/volume/ for more information and chart attribute options!
+
+#### See also
+[3D isosurface documentation](/python/3d-isosurface-plots/)
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/LaTeX.md plotly-7.1.0+dfsg1/doc/python/LaTeX.md
--- plotly-5.20.0+dfsg/doc/python/LaTeX.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/LaTeX.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,70 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to add LaTeX to python graphs.
+    display_as: advanced_opt
+    language: python
+    layout: base
+    name: LaTeX
+    order: 5
+    page_type: example_index
+    permalink: python/LaTeX/
+    thumbnail: thumbnail/latex.jpg
+---
+
+#### LaTeX Typesetting
+
+Figure titles, axis labels and annotations all accept LaTeX directives for rendering mathematical formulas and notation, when the entire label is surrounded by dollar signs `$...$`. This rendering is handled by the [MathJax library](https://www.npmjs.com/package/mathjax?activeTab=versions), which must be loaded in the environment where figures are being rendered. MathJax is included by default in Jupyter-like environments. When embedding Plotly figures in other contexts it may be required to ensure that MathJax is separately loaded, for example via a `<script>` tag pointing to a content-delivery network (CDN). Plotly.py v7 and above supports MathJax versions 3 and 4. Earlier Plotly.py versions support MathJax versions 2 and 3.
+
+```python
+import plotly.express as px
+
+fig = px.line(x=[1, 2, 3, 4], y=[1, 4, 9, 16], title=r'$\alpha_{1c} = 352 \pm 11 \text{ km s}^{-1}$')
+fig.update_layout(
+    xaxis_title=r'$\sqrt{(n_\text{c}(t|{T_\text{early}}))}$',
+    yaxis_title=r'$d, r \text{ (solar radius)}$'
+)
+fig.show()
+```
+
+```python
+import plotly.graph_objs as go
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4],
+    y=[1, 4, 9, 16],
+    name=r'$\alpha_{1c} = 352 \pm 11 \text{ km s}^{-1}$'
+))
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4],
+    y=[0.5, 2, 4.5, 8],
+    name=r'$\beta_{1c} = 25 \pm 11 \text{ km s}^{-1}$'
+))
+fig.update_layout(
+    xaxis_title=r'$\sqrt{(n_\text{c}(t|{T_\text{early}}))}$',
+    yaxis_title=r'$d, r \text{ (solar radius)}$'
+)
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/animations.md plotly-7.1.0+dfsg1/doc/python/animations.md
--- plotly-5.20.0+dfsg/doc/python/animations.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/animations.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,394 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.6.0
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.6
+  plotly:
+    description: An introduction to creating animations with Plotly in Python.
+    display_as: animations
+    language: python
+    layout: base
+    name: Intro to Animations
+    order: 1
+    page_type: example_index
+    permalink: python/animations/
+    redirect_from: python/visualizing-mri-volume-slices/
+    thumbnail: thumbnail/animations.gif
+---
+
+#### Animated figures with Plotly Express
+
+Several [Plotly Express](/python/plotly-express/)  functions support the creation of animated figures through the `animation_frame` and `animation_group` arguments.
+
+Here is an example of an animated scatter plot created with Plotly Express. Note that you should always fix the `x_range` and `y_range` to ensure that your data remains visible throughout the animation.
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
+           size="pop", color="continent", hover_name="country",
+           log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
+```
+
+#### Animated figures in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'animations', width='100%', height=1200)
+```
+
+#### Animated Bar Charts with Plotly Express
+
+Note that you should always fix the `y_range` to ensure that your data remains visible throughout the animation.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder()
+
+fig = px.bar(df, x="continent", y="pop", color="continent",
+  animation_frame="year", animation_group="country", range_y=[0,4000000000])
+fig.show()
+```
+
+### Current Animation Limitations and Caveats
+
+* Animations are designed to work well when each row of input is present across all animation frames, and when categorical values mapped to symbol, color and facet are constant across frames. Animations *may be misleading or inconsistent* if these constraints are not met.
+* Although Plotly Express supports animation for many chart and map types, smooth inter-frame transitions are today *only* possible for `scatter` and `bar`
+* Plotly Express will *not* automatically compute the union of all x/y/color ranges, so these must be specified manually to avoid scale jumps across frames
+
+#### Animated figures with Graph Objects
+
+The remainder of this section describes the low-level [graph objects](/python/graph-objects/) API for constructing animated figures manually.
+
+#### Frames
+
+Along with `data` and `layout`, `frames` can be added as a key in a figure object. The `frames` key points to a list of figures, each of which will be cycled through when animation is triggered.
+
+<!-- #region -->
+
+#### Adding Control Buttons to Animations
+
+You can add play and pause buttons to control your animated charts by adding an `updatemenus` array to the `layout` of your `figure`. More information on style and placement of the buttons is available in Plotly's [`updatemenus` reference](https://plotly.com/python/reference/layout/updatemenus/).
+<br>
+The buttons are defined as follows:
+
+```
+"updatemenus": [{"type": "buttons",
+                 "buttons": [{"label": "Your Label",
+                              "method": "animate",
+                              "args": [See Below]}]}]
+```
+
+<!-- #endregion -->
+
+#### Defining Button Arguments
+
+- `None`: Setting `"args"` to undefined (i.e. `"args": [None]`) will create a simple play button that will animate all frames.
+- string: Animate all frames with group `"<some string>"`. This is a way of scoping the animations in case you would prefer to animate without explicitly enumerating all frames.
+- `["frame1", "frame2", ...]`: Animate a sequence of named frames.
+- `[{data: [], layout: {}, traces: []}, {...}]`: Nearly identical to animating named frames; though this variant lets you inline data instead of adding it as named frames. This can be useful for interaction where it's undesirable to add and manage named frames for ephemeral changes.
+- `[null]`: A simple way to create a pause button (requires `mode: "immediate"`). This argument dumps the currently queued frames (`mode: "immediate"`), and then animates an empty sequence of frames (`[null]`).
+- <b>Please Note:</b> We <b>do not</b> recommend using: `[ ]`. This syntax may cause confusion because it looks indistinguishable from a "pause button", but nested properties have logic that treats empty arrays as entirely removable, so it will function as a play button.<br><br>
+  Refer to the examples below to see the buttons in action!
+
+#### Simple Play Button
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Scatter(x=[0, 1], y=[0, 1])],
+    layout=go.Layout(
+        xaxis=dict(range=[0, 5], autorange=False),
+        yaxis=dict(range=[0, 5], autorange=False),
+        title=dict(text="Start Title"),
+        updatemenus=[dict(
+            type="buttons",
+            buttons=[dict(label="Play",
+                          method="animate",
+                          args=[None])])]
+    ),
+    frames=[go.Frame(data=[go.Scatter(x=[1, 2], y=[1, 2])]),
+            go.Frame(data=[go.Scatter(x=[1, 4], y=[1, 4])]),
+            go.Frame(data=[go.Scatter(x=[3, 4], y=[3, 4])],
+                     layout=go.Layout(title_text="End Title"))]
+)
+
+fig.show()
+```
+
+#### Moving Point on a Curve
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+# Generate curve data
+t = np.linspace(-1, 1, 100)
+x = t + t ** 2
+y = t - t ** 2
+xm = np.min(x) - 1.5
+xM = np.max(x) + 1.5
+ym = np.min(y) - 1.5
+yM = np.max(y) + 1.5
+N = 25
+s = np.linspace(-1, 1, N)
+xx = s + s ** 2
+yy = s - s ** 2
+
+
+# Create figure
+fig = go.Figure(
+    data=[go.Scatter(x=x, y=y,
+                     mode="lines",
+                     line=dict(width=2, color="blue")),
+          go.Scatter(x=[xx[0]], y=[yy[0]],
+                     mode="markers",
+                     marker=dict(color="red", size=10))])
+fig.update_layout(width=600, height=450,
+        xaxis=dict(range=[xm, xM], autorange=False, zeroline=False),
+        yaxis=dict(range=[ym, yM], autorange=False, zeroline=False),
+        title_text="Kinematic Generation of a Planar Curve", title_x=0.5,
+        updatemenus = [dict(type = "buttons",
+        buttons = [
+            dict(
+                args = [None, {"frame": {"duration": 10, "redraw": False},
+                                "fromcurrent": True, "transition": {"duration": 10}}],
+                label = "Play",
+                method = "animate",
+
+                )])])
+
+fig.update(frames=[go.Frame(
+                        data=[go.Scatter(
+                                   x=[xx[k]],
+                                   y=[yy[k]])],
+                        traces=[1]) # fig.data[1] is updated by each frame
+        for k in range(N)])
+
+fig.show()
+```
+
+#### Moving Frenet Frame Along a Planar Curve
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+
+# Generate curve data
+t = np.linspace(-1, 1, 100)
+x = t + t ** 2
+y = t - t ** 2
+xm = np.min(x) - 1.5
+xM = np.max(x) + 1.5
+ym = np.min(y) - 1.5
+yM = np.max(y) + 1.5
+N = 50
+s = np.linspace(-1, 1, N)
+xx = s + s ** 2
+yy = s - s ** 2
+vx = 1 + 2 * s
+vy = 1 - 2 * s  # v=(vx, vy) is the velocity
+speed = np.sqrt(vx ** 2 + vy ** 2)
+ux = vx / speed  # (ux, uy) unit tangent vector, (-uy, ux) unit normal vector
+uy = vy / speed
+
+xend = xx + ux  # end coordinates for the unit tangent vector at (xx, yy)
+yend = yy + uy
+
+xnoe = xx - uy  # end coordinates for the unit normal vector at (xx,yy)
+ynoe = yy + ux
+
+
+# Create figure
+fig = go.Figure(
+    data=[go.Scatter(x=x, y=y,
+                     name="frame",
+                     mode="lines",
+                     line=dict(width=2, color="blue")),
+          go.Scatter(x=x, y=y,
+                     name="curve",
+                     mode="lines",
+                     line=dict(width=2, color="blue"))
+          ],
+    layout=go.Layout(width=600, height=600,
+                     xaxis=dict(range=[xm, xM], autorange=False, zeroline=False),
+                     yaxis=dict(range=[ym, yM], autorange=False, zeroline=False),
+                     title=dict(text="Moving Frenet Frame Along a Planar Curve"),
+                     hovermode="closest",
+                     updatemenus=[dict(type="buttons",
+                                       buttons=[dict(label="Play",
+                                                     method="animate",
+                                                     args=[None])])]),
+
+    frames=[go.Frame(
+        data=[go.Scatter(
+            x=[xx[k], xend[k], None, xx[k], xnoe[k]],
+            y=[yy[k], yend[k], None, yy[k], ynoe[k]],
+            mode="lines",
+            line=dict(color="red", width=2))
+        ]) for k in range(N)]
+)
+
+fig.show()
+```
+
+#### Using a Slider and Buttons
+
+The following example uses the well known [Gapminder dataset](https://www.gapminder.org/tag/gdp-per-capita/) to exemplify animation capabilities. This bubble chart animation shows the change in 'GDP per Capita' against the 'Life Expectancy' of several countries from the year 1952 to 2007, colored by their respective continent and sized by population.
+
+This is also an example of building up the structure of a figure as a Python dictionary, and then constructing a graph object figure from that dictionary.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+url = "https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv"
+dataset = pd.read_csv(url)
+
+years = ["1952", "1962", "1967", "1972", "1977", "1982", "1987", "1992", "1997", "2002",
+         "2007"]
+
+# make list of continents
+continents = []
+for continent in dataset["continent"]:
+    if continent not in continents:
+        continents.append(continent)
+# make figure
+fig_dict = {
+    "data": [],
+    "layout": {},
+    "frames": []
+}
+
+# fill in most of layout
+fig_dict["layout"]["xaxis"] = {"range": [30, 85], "title": "Life Expectancy"}
+fig_dict["layout"]["yaxis"] = {"title": "GDP per Capita", "type": "log"}
+fig_dict["layout"]["hovermode"] = "closest"
+fig_dict["layout"]["updatemenus"] = [
+    {
+        "buttons": [
+            {
+                "args": [None, {"frame": {"duration": 500, "redraw": False},
+                                "fromcurrent": True, "transition": {"duration": 300,
+                                                                    "easing": "quadratic-in-out"}}],
+                "label": "Play",
+                "method": "animate"
+            },
+            {
+                "args": [[None], {"frame": {"duration": 0, "redraw": False},
+                                  "mode": "immediate",
+                                  "transition": {"duration": 0}}],
+                "label": "Pause",
+                "method": "animate"
+            }
+        ],
+        "direction": "left",
+        "pad": {"r": 10, "t": 87},
+        "showactive": False,
+        "type": "buttons",
+        "x": 0.1,
+        "xanchor": "right",
+        "y": 0,
+        "yanchor": "top"
+    }
+]
+
+sliders_dict = {
+    "active": 0,
+    "yanchor": "top",
+    "xanchor": "left",
+    "currentvalue": {
+        "font": {"size": 20},
+        "prefix": "Year:",
+        "visible": True,
+        "xanchor": "right"
+    },
+    "transition": {"duration": 300, "easing": "cubic-in-out"},
+    "pad": {"b": 10, "t": 50},
+    "len": 0.9,
+    "x": 0.1,
+    "y": 0,
+    "steps": []
+}
+
+# make frames
+for year in years:
+    frame = {"data": [], "name": str(year)}
+    for continent in continents:
+        dataset_by_year = dataset[dataset["year"] == int(year)]
+        dataset_by_year_and_cont = dataset_by_year[
+            dataset_by_year["continent"] == continent]
+
+        data_dict = {
+            "x": list(dataset_by_year_and_cont["lifeExp"]),
+            "y": list(dataset_by_year_and_cont["gdpPercap"]),
+            "mode": "markers",
+            "text": list(dataset_by_year_and_cont["country"]),
+            "marker": {
+                "sizemode": "area",
+                "sizeref": 200000,
+                "size": list(dataset_by_year_and_cont["pop"])
+            },
+            "name": continent
+        }
+        frame["data"].append(data_dict)
+
+    fig_dict["frames"].append(frame)
+    slider_step = {"args": [
+        [year],
+        {"frame": {"duration": 300, "redraw": False},
+         "mode": "immediate",
+         "transition": {"duration": 300}}
+    ],
+        "label": year,
+        "method": "animate"}
+    sliders_dict["steps"].append(slider_step)
+
+
+fig_dict["layout"]["sliders"] = [sliders_dict]
+
+# make data
+fig_dict["data"] = fig_dict["frames"][0]['data']
+
+fig = go.Figure(fig_dict)
+
+fig.show()
+
+```
+
+#### Important Notes
+
+- Defining `redraw`: Setting `redraw: false` is an optimization for scatter plots so that animate just makes changes without redrawing the whole plot. For other plot types, such as contour plots, every frame <b>must</b> be a total plot redraw, i.e. `redraw: true`.
+
+#### Reference
+
+For additional information and attributes for creating bubble charts in Plotly see: https://plotly.com/python/bubble-charts/.
+For more documentation on creating animations with Plotly, see https://plotly.com/python/#animations.
diff -Nru plotly-5.20.0+dfsg/doc/python/annotated-heatmap.md plotly-7.1.0+dfsg1/doc/python/annotated-heatmap.md
--- plotly-5.20.0+dfsg/doc/python/annotated-heatmap.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/annotated-heatmap.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,181 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.4
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.11
+  plotly:
+    description: How to make Annotated Heatmaps in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Annotated Heatmaps
+    order: 7
+    page_type: u-guide
+    permalink: python/annotated-heatmap/
+    redirect_from: python/annotated_heatmap/
+    thumbnail: thumbnail/ann_heat.jpg
+---
+
+### Annotated Heatmaps with Plotly Express
+
+*New in v5.5*
+
+Plotly Express provides the [`px.imshow()`](/python/heatmaps/) function which can be used for creating annotated heatmaps.
+
+
+#### Basic Annotated Heatmap for z-annotations
+
+*New in v5.5*
+
+When creating a figure with `px.imshow`, you can pass the parameter `text_auto=True` to add z-annotations.
+
+```python
+import plotly.express as px
+
+z = [[.1, .3, .5, .7, .9],
+     [1, .8, .6, .4, .2],
+     [.2, 0, .5, .7, .9],
+     [.9, .8, .4, .2, 0],
+     [.3, .4, .5, .7, 1]]
+
+fig = px.imshow(z, text_auto=True)
+fig.show()
+```
+
+#### Custom Text and Axis Labels
+
+To annotate cells with text other than the `z` values, set the `text` attribute with `update_traces` and display it with a `texttemplate`. You can also label the axes by passing `x` and `y`.
+
+```python
+import plotly.express as px
+
+x = ['Team A', 'Team B', 'Team C']
+y = ['Game One', 'Game Two', 'Game Three']
+
+z = [[.1, .3, .5],
+     [1.0, .8, .6],
+     [.6, .4, .2]]
+
+z_text = [['Win', 'Lose', 'Win'],
+          ['Lose', 'Lose', 'Win'],
+          ['Win', 'Win', 'Lose']]
+
+fig = px.imshow(z, x=x, y=y, color_continuous_scale='Viridis', aspect="auto")
+fig.update_traces(text=z_text, texttemplate="%{text}")
+fig.update_xaxes(side="top")
+fig.show()
+```
+
+#### Annotated Heatmap with a NumPy Array
+
+`px.imshow` works directly with NumPy arrays. Pass a [`d3-format`](https://github.com/d3/d3-format/tree/v1.4.5#d3-format) string to `text_auto` to control how the annotations are formatted.
+
+```python
+import plotly.express as px
+import numpy as np
+np.random.seed(1)
+
+z = np.random.randn(20, 20)
+
+fig = px.imshow(z, text_auto=".2f", color_continuous_scale='Greys', aspect="auto")
+fig.show()
+```
+
+#### Periodic Table with Custom Text and Hover
+
+`px.imshow()` can produce more elaborate annotated heatmaps. The example below renders a periodic table: the cell labels come from a custom `text` array, while `customdata` combined with a `hovertemplate` displays the element name and atomic mass on hover.
+
+```python
+import plotly.express as px
+import numpy as np
+
+symbol = [['H', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'He'],
+         ['Li', 'Be', '', '', '', '', '', '', '', '', '', '', 'B', 'C', 'N', 'O', 'F', 'Ne'],
+         ['Na', 'Mg', '', '', '', '', '', '', '', '', '', '', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar'],
+         ['K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr'],
+         ['Rb ', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe' ],
+         ['Cs', 'Ba', '', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn' ],
+         ['Fr', 'Ra', '', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt', 'Ds', 'Rg', 'Cn', 'Uut', 'Fl', 'Uup', 'Lv', 'Uus', 'Uuo'],
+         ['', '', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', ''],
+         ['', '', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr', '' ],
+         ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''],
+         ['', 'Alkali Metal', '', '', 'Transition Metal', '', '', 'Actinide', '', '', 'Semimetal', '', '', 'Halogen', '', '', '', ''],
+         ['', 'Alkaline Metal', '', '', 'Lanthanide', '', '', 'Basic Metal', '', '', 'Nonmetal', '', '', 'Noble Gas', '', '', '', '']]
+
+element = [['Hydrogen', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Helium'],
+           ['Lithium', 'Beryllium', '', '', '', '', '', '', '', '', '', '', 'Boron', 'Carbon', 'Nitrogen', 'Oxygen', 'Fluorine', 'Neon'],
+           ['Sodium', 'Magnesium', '', '', '', '', '', '', '', '', '', '', 'Aluminium', 'Silicon', 'Phosphorus', 'Sulfur', 'Chlorine', 'Argon'],
+           ['Potassium', 'Calcium', 'Scandium', 'Titanium', 'Vanadium', 'Chromium',  'Manganese', 'Iron', 'Cobalt', 'Nickel', 'Copper', 'Zinc', 'Gallium', 'Germanium', 'Arsenic', 'Selenium', 'Bromine', 'Krypton'],
+           ['Rubidium', 'Strontium', 'Yttrium', 'Zirconium', 'Niobium', 'Molybdenum', 'Technetium', 'Ruthenium', 'Rhodium', 'Palladium', 'Silver', 'Cadmium', 'Indium', 'Tin', 'Antimony', 'Tellurium', 'Iodine', 'Xenon'],
+           ['Cesium', 'Barium', '',  'Hafnium', 'Tantalum', 'Tungsten', 'Rhenium', 'Osmium', 'Iridium', 'Platinum', 'Gold', 'Mercury', 'Thallium', 'Lead', 'Bismuth', 'Polonium', 'Astatine', 'Radon'],
+           ['Francium', 'Radium', '', 'Rutherfordium','Dubnium','Seaborgium','Bohrium','Hassium','Meitnerium','Darmstadtium','Roentgenium','Copernicium','Ununtrium','Ununquadium','Ununpentium','Ununhexium','Ununseptium','Ununoctium'],
+           ['', '',  'Lanthanum', 'Cerium', 'Praseodymium', 'Neodymium', 'Promethium', 'Samarium', 'Europium', 'Gadolinium', 'Terbium', 'Dysprosium', 'Holmium', 'Erbium', 'Thulium', 'Ytterbium', 'Lutetium', ''],
+           ['', '', 'Actinium', 'Thorium', 'Protactinium', 'Uranium', 'Neptunium', 'Plutonium', 'Americium', 'Curium', 'Berkelium', 'Californium', 'Einsteinium','Fermium' ,'Mendelevium', 'Nobelium', 'Lawrencium', '' ],
+           ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''],
+           ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''],
+           ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']]
+
+atomic_mass = [[ 1.00794, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0,  4.002602],
+     [ 6.941, 9.012182, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0,  10.811, 12.0107, 14.0067, 15.9994, 18.9984032, 20.1797],
+     [ 22.98976928, 24.3050, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0,  26.9815386, 28.0855, 30.973762, 32.065, 35.453, 39.948],
+     [ 39.0983, 40.078, 44.955912, 47.867, 50.9415, 51.9961, 54.938045, 55.845, 58.933195, 58.6934, 63.546, 65.38, 69.723, 72.64, 74.92160, 78.96, 79.904, 83.798],
+     [ 85.4678, 87.62, 88.90585, 91.224, 92.90638, 95.96, 98, 101.07, 102.90550, 106.42, 107.8682, 112.411, 114.818, 118.710, 121.760, 127.60, 126.90447, 131.293],
+     [ 132.9054519, 137.327, .0, 178.49, 180.94788, 183.84, 186.207, 190.23, 192.217, 195.084, 196.966569, 200.59, 204.3833, 207.2, 208.98040, 209, 210, 222],
+     [223, 226, .0, 267, 268, 271, 272, 270, 276, 281, 280, 285, 284, 289, 288, 293, 'unknown', 294],
+     [.0, .0, 138.90547, 140.116, 140.90765, 144.242, 145, 150.36, 151.964, 157.25, 158.92535, 162.500, 164.93032, 167.259, 168.93421, 173.054, 174.9668, .0],
+     [.0, .0, 227, 232.03806, 231.03588, 238.02891, 237, 244, 243, 247, 247, 251, 252, 257, 258, 259, 262, .0],
+     [.0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0],
+     [.0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0],
+     [.0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0]]
+
+color = [[.8, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, 1.],
+     [.1, .2, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .7, .8, .8, .8, .9, 1.],
+     [.1, .2, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .6, .7, .8, .8, .9, 1],
+     [.1, .2, .3, .3, .3, .3, .3, .3, .3, .3, .3, .3, .6, .7, .8, .8, .9, 1.],
+     [.1, .2, .3, .3, .3, .3, .3, .3, .3, .3, .3, .3, .6, .6, .7, .7, .9, 1.],
+     [.1, .2, .4, .3, .3, .3, .3, .3, .3, .3, .3, .3, .6, .6, .6, .7, .9, 1.],
+     [.1, .2, .5, .3, .3, .3, .3, .3, .3, .3, .3, .3, .6, .6, .6, .6, .9, 1.],
+     [.0, .0, .4, .4, .4, .4, .4, .4, .4, .4, .4, .4, .4, .4, .4, .4, .4, .0],
+     [.0, .0, .5, .5, .5, .5, .5, .5, .5, .5, .5, .5, .5, .5, .5, .5, .5, .0],
+     [.0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0, .0],
+     [.1, .1, .1, .3, .3, .3, .5, .5, .5, .7, .7, .7, .9, .9, .9, .0, .0, .0],
+     [.2, .2, .2, .4, .4, .4, .6, .6, .6, .8, .8, .8, 1., 1., 1., .0, .0, .0]]
+
+colorscale=[[0.0, 'rgb(255,255,255)'], [.2, 'rgb(255, 255, 153)'],
+            [.4, 'rgb(153, 255, 204)'], [.6, 'rgb(179, 217, 255)'],
+            [.8, 'rgb(240, 179, 255)'],[1.0, 'rgb(255, 77, 148)']]
+
+fig = px.imshow(color, color_continuous_scale=colorscale, aspect="auto",
+               title='Periodic Table')
+fig.update_traces(
+    text=symbol, texttemplate="%{text}", textfont_size=12,
+    customdata=np.moveaxis([element, atomic_mass], 0,-1),
+    hovertemplate="%{customdata[0]}<br>Atomic Mass: %{customdata[1]:.2f}<extra></extra>"
+)
+fig.update_xaxes(visible=False)
+fig.update_yaxes(visible=False)
+fig.update_coloraxes(showscale=False)
+fig.show()
+```
+
+#### Reference
+
+For more info on Plotly heatmaps, see: https://plotly.com/python/reference/heatmap/.<br> For more info on using colorscales with Plotly see: https://plotly.com/python/heatmap-and-contour-colorscales/
diff -Nru plotly-5.20.0+dfsg/doc/python/axes.md plotly-7.1.0+dfsg1/doc/python/axes.md
--- plotly-5.20.0+dfsg/doc/python/axes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/axes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,1028 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to adjust axes properties in Python - axes titles, styling and
+      coloring axes and grid lines, ticks, tick labels and more.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Axes
+    order: 15
+    permalink: python/axes/
+    thumbnail: thumbnail/axes.png
+---
+
+This tutorial explains how to set the properties of [2-dimensional Cartesian axes](/python/figure-structure/#2d-cartesian-trace-types-and-subplots), namely [`go.layout.XAxis`](/python/reference/layout/xaxis/) and [`go.layout.YAxis`](/python/reference/layout/yaxis/).
+
+Other kinds of subplots and axes are described in other tutorials:
+
+- [3D axes](/python/3d-axes) The axis object is [`go.layout.Scene`](/python/reference/layout/scene/)
+- [Polar axes](/python/polar-chart/). The axis object is [`go.layout.Polar`](/python/reference/layout/polar/)
+- [Ternary axes](/python/ternary-plots). The axis object is [`go.layout.Ternary`](/python/reference/layout/ternary/)
+- [Geo axes](/python/map-configuration/). The axis object is [`go.layout.Geo`](/python/reference/layout/geo/)
+- [Map axes](/python/tile-map-layers/). The axis object is [`go.layout.Map`](/python/reference/layout/map/)
+- [Color axes](/python/colorscales/). The axis object is [`go.layout.Coloraxis`](/python/reference/layout/coloraxis/).
+
+**See also** the tutorials on [facet plots](/python/facet-plots/), [subplots](/python/subplots) and [multiple axes](/python/multiple-axes/).
+
+### 2-D Cartesian Axis Types and Auto-Detection
+
+The different types of Cartesian axes are configured via the `xaxis.type` or `yaxis.type` attribute, which can take on the following values:
+
+- `'linear'` as described in this page
+- `'log'` (see the [log plot tutorial](/python/log-plot/))
+- `'date'` (see the [tutorial on timeseries](/python/time-series/))
+- `'category'` (see the [categorical axes tutorial](/python/categorical-axes/))
+- `'multicategory'` (see the [categorical axes tutorial](/python/categorical-axes/))
+
+The axis type is auto-detected by looking at data from the first [trace](/python/figure-structure/) linked to this axis:
+
+* First check for `multicategory`, then `date`, then `category`, else default to `linear` (`log` is never automatically selected)
+* `multicategory` is just a shape test: is the array nested?
+* `date` and `category`: require **more than twice as many distinct date or category strings as distinct numbers** in order to choose that axis type.
+	* Both of these test an evenly-spaced sample of at most 1000 values
+
+
+### Forcing an axis to be categorical
+
+It is possible to force the axis type by setting explicitly `xaxis_type`. In the example below the automatic X axis type would be `linear` (because there are not more than twice as many unique strings as unique numbers) but we force it to be `category`.
+
+```python
+import plotly.express as px
+fig = px.bar(x=["a", "a", "b", 3], y = [1,2,3,4])
+fig.update_xaxes(type='category')
+fig.show()
+```
+
+
+#### General Axis properties
+
+The different groups of Cartesian axes properties are
+
+- title of the axis
+- tick values (locations of tick marks) and tick labels. Tick labels and grid lines are placed at tick values.
+- lines: grid lines (passing through tick values), axis lines, zero lines
+- range of the axis
+- domain of the axis
+
+The examples on this page apply to axes of any type, but extra attributes are available for [axes of type `category`](/python/categorical-axes/) and [axes of type `date`](/python/time-series/).
+
+
+#### Set and Style Axes Title Labels
+
+##### Set axis title text with Plotly Express
+
+Axis titles are automatically set to the column names when [using Plotly Express with a data frame as input](/python/px-arguments/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="sex")
+fig.show()
+```
+
+Axis titles (and [legend titles](/python/legend/)) can also be overridden using the `labels` argument of Plotly Express functions:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="sex",
+    labels=dict(total_bill="Total Bill ($)", tip="Tip ($)", sex="Payer Gender")
+)
+fig.show()
+```
+
+The PX `labels` argument can also be used without a data frame argument:
+
+
+```python
+import plotly.express as px
+fig = px.bar(x=["Apples", "Oranges"], y=[10,20], color=["Here", "There"],
+    labels=dict(x="Fruit", y="Amount", color="Place")
+)
+fig.show()
+```
+
+##### Rotating tick labels in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'axes', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Moving Tick Labels Inside the Plot
+
+The `ticklabelposition` attribute moves tick labels inside the plotting area, and modifies the auto-range behaviour to accommodate the labels.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)-1
+fig = px.bar(df, x=df.index, y="GOOG")
+fig.update_yaxes(ticklabelposition="inside top", title=None)
+fig.show()
+```
+
+#### Specifying Label Aliases
+
+*New in 5.14*
+
+With `labelalias`, you can specify replacement text for specific tick and hover labels. In this example, the dataset has the values of "Sat" and "Sun" in the day column. By setting `labelalias=dict(Sat="Saturday", Sun="Sunday")`, we swap these out for "Saturday" and "Sunday".
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = px.data.tips()
+df = df[df.day.isin(['Sat', 'Sun'])].groupby(by='day', as_index=False).sum(numeric_only=True)
+
+fig = px.bar(df, x="day", y="total_bill")
+fig.update_xaxes(labelalias=dict(Sat="Saturday", Sun="Sunday"))
+
+fig.show()
+```
+
+##### Set axis title text with Graph Objects
+
+Axis titles are set using the nested `title.text` property of the x or y axis. Here is an example of creating a new figure and using `update_xaxes` and `update_yaxes`, with magic underscore notation, to set the axis titles.
+
+```python
+import plotly.express as px
+
+fig = px.line(y=[1, 0])
+
+fig.update_xaxes(title_text='Time')
+fig.update_yaxes(title_text='Value A')
+
+fig.show()
+```
+
+### Set axis title position
+
+This example sets `standoff` attribute to cartesian axes to determine the distance between the tick labels and the axis title. Note that the axis title position is always constrained within the margins, so the actual standoff distance is always less than the set or default value. By default [automargin](https://plotly.com/python/setting-graph-size/#automatically-adjust-margins) is `True` in Plotly template for the cartesian axis, so the margins will be pushed to fit the axis title at given standoff distance.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    mode = "lines+markers",
+    y = [4, 1, 3],
+    x = ["December", "January", "February"]))
+
+fig.update_xaxes(
+        tickangle = 90,
+        title_text = "Month",
+        title_font = {"size": 20},
+        title_standoff = 25)
+
+fig.update_yaxes(
+        title_text = "Temperature",
+        title_standoff = 25)
+
+fig.show()
+```
+
+##### Set axis title font
+
+Here is an example that configures the font family, size, and color for the axis titles in a figure created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(title_font=dict(size=18, family='Courier', color='crimson'))
+fig.update_yaxes(title_font=dict(size=18, family='Courier', color='crimson'))
+
+fig.show()
+```
+
+#### Tick Placement, Color, and Style
+
+##### Toggling axis tick marks
+
+Axis tick marks are disabled by default for the default `plotly` theme, but they can easily be turned on by setting the `ticks` axis property to `"inside"` (to place ticks inside plotting area) or `"outside"` (to place ticks outside the plotting area).
+
+Here is an example of turning on inside x-axis and y-axis ticks in a faceted figure created using Plotly Express. Note how the `col` argument to `update_yaxes` is used to only turn on the y-axis ticks for the left-most subplot.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(ticks="inside")
+fig.update_yaxes(ticks="inside", col=1)
+
+fig.show()
+```
+
+##### Set number of tick marks (and grid lines)
+
+The approximate number of ticks displayed for an axis can be specified using the `nticks` axis property.
+
+Here is an example of updating the y-axes of a figure created using Plotly Express to display approximately 20 ticks.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(nticks=20)
+
+fig.show()
+```
+
+##### Set start position and distance between ticks
+
+The `tick0` and `dtick` axis properties can be used to control to placement of axis ticks as follows: If specified, a tick will fall exactly on the location of `tick0` and additional ticks will be added in both directions at intervals of `dtick`.
+
+Here is an example of updating the y axis of a figure created using Plotly Express to position the ticks at intervals of 0.5, starting at 0.25.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(tick0=0.25, dtick=0.5)
+
+fig.show()
+```
+
+##### Set exact location of axis ticks
+
+It is possible to configure an axis to display ticks at a set of predefined locations by setting the `tickvals` property to an array of positions.
+
+Here is an example of setting the exact location of ticks on the y axes of a figure created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(tickvals=[5.1, 5.9, 6.3, 7.5])
+
+fig.show()
+```
+
+##### Style tick marks
+
+As discussed above, tick marks are disabled by default in the default `plotly` theme, but they can be enabled by setting the `ticks` axis property to `"inside"` (to place ticks inside plotting area) or `"outside"` (to place ticks outside the plotting area).
+
+The appearance of these tick marks can be customized by setting their length (`ticklen`), width (`tickwidth`), and color (`tickcolor`).
+
+Here is an example of enabling and styling the tick marks of a faceted figure created using Plotly Express. Note how the `col` argument to `update_yaxes` is used to only turn on and style the y-axis ticks for the left-most subplot.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(ticks="outside", tickwidth=2, tickcolor='crimson', ticklen=10)
+fig.update_yaxes(ticks="outside", tickwidth=2, tickcolor='crimson', ticklen=10, col=1)
+
+fig.show()
+```
+
+##### Step for tick labels
+
+*New in v5.6*
+
+You can set a step for tick labels with `ticklabelstep`. In this example, we hide labels between every `2` ticks on the y axes. Similarly, this can be used with `fig.update_xaxes` for x axes: `fig.update_xaxes(ticklabelstep=2)`.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(ticklabelstep=2)
+
+fig.show()
+```
+
+##### Toggling axis labels
+
+The axis tick mark labels can be disabled by setting the `showticklabels` axis property to `False`.
+
+Here is an example of disabling tick labels in all subplots for a faceted figure created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(showticklabels=False)
+fig.update_yaxes(showticklabels=False)
+
+fig.show()
+```
+
+##### Set axis label rotation and font
+
+The orientation of the axis tick mark labels is configured using the `tickangle` axis property. The value of `tickangle` is the angle of rotation, in the clockwise direction, of the labels from vertical in units of degrees. The font family, size, and color for the tick labels are stored under the `tickfont` axis property.
+
+Here is an example of rotating the x-axis tick labels by 45 degrees, and customizing their font properties, in a faceted histogram figure created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.histogram(df, x="sex", y="tip", histfunc='sum', facet_col='smoker')
+fig.update_xaxes(tickangle=45, tickfont=dict(family='Rockwell', color='crimson', size=14))
+
+fig.show()
+```
+
+##### Auto Tick Angle Options
+
+*New in 5.19*
+
+If `tickangle` is not explicitly set, its default value is `auto`, meaning if the label needs to be rotated to avoid labels overlapping, it will rotate by either 30 or 90 degrees. Using `autotickangles`, you can also specify a list of angles for `tickangle` to use. If `tickangle` is `auto` and you provide a list of angles to `autotickangles`, the label angle will be set to the first value in the list that prevents overlap.
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+df = df.loc[(df.continent=="Asia") & (df.year==1992)]
+fig = px.histogram(df, x=df.country, y=df.gdpPercap)
+
+fig.update_xaxes(autotickangles=[45, 60, 90])
+
+fig.show()
+```
+
+#### Enumerated Ticks with Tickvals and Ticktext
+
+The `tickvals` and `ticktext` axis properties can be used together to display custom tick label text at custom locations along an axis. They should be set to lists of the same length where the `tickvals` list contains positions along the axis, and `ticktext` contains the strings that should be displayed at the corresponding positions.
+
+Here is an example.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+apple_df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv"
+)
+
+# Convert 'Date' column to datetime format
+apple_df['Date'] = pd.to_datetime(apple_df['Date'])
+
+# Set 'Date' column as index
+apple_df.set_index('Date', inplace=True)
+
+# Filter for 2016
+apple_df_2016 = apple_df.loc['2016']
+
+# Create figure and add line
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=apple_df_2016.index,
+    y=apple_df_2016["AAPL.High"],
+    mode="lines"
+))
+
+# Set custom x-axis labels
+fig.update_xaxes(
+    ticktext=["End of Q1", "End of Q2", "End of Q3", "End of Q4"],
+    tickvals=["2016-04-01", "2016-07-01", "2016-10-01", apple_df_2016.index.max()],
+)
+
+# Prefix y-axis tick labels with dollar sign
+fig.update_yaxes(tickprefix="$")
+
+# Set figure title
+fig.update_layout(title_text="Apple Stock Price")
+
+fig.show()
+```
+
+#### Adding minor ticks
+
+_new in 5.8_
+
+You can position and style minor ticks on a Cartesian axis using the `minor` attribute. This takes a `dict` of properties to apply to minor ticks. See the [figure reference](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-minor) for full details on the accepted keys in this dict.
+
+In the following example, we add minor ticks to the x-axis and then to the y-axis. For the y-axis we add ticks on the inside: `ticks="inside"`. On the x-axis we've specified some additional properties to style the minor ticks, setting the length of the ticks with `ticklen` and the color with `tickcolor`. We've also turned on grid lines for the x-axis minor ticks using `showgrid`.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="sex")
+
+
+fig.update_xaxes(minor=dict(ticklen=6, tickcolor="black", showgrid=True))
+fig.update_yaxes(minor_ticks="inside")
+
+fig.show()
+```
+
+#### Adjust Tick Label Positions
+
+*New in 5.23*
+
+You can adjust tick label positions by moving them a number of pixels away from the axis using `ticklabelstandoff` or along the axis using `ticklabelshift`.
+
+In this example, `ticklabelshift=25` shifts the labels 25 pixels to the right along the x-axis. By providing a negative value, we could move the labels 25 pixels to the left, (`ticklabelshift=-25`).
+
+Here, `ticklabelstandoff=15` moves the labels 15 pixels further away from the x-axis. A negative value here would move them closer to the axis.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.line(df, x='Date', y='AAPL.High')
+
+fig.update_layout(
+    xaxis=dict(
+        ticks='outside',
+        ticklen=10,
+        ticklabelshift=25,
+        ticklabelstandoff=15
+    )
+)
+
+fig.show()
+```
+
+#### Use Minor Tick for Label
+
+*New in 5.23*
+
+On date or linear axes, use `ticklabelindex` to draw a label for a minor tick instead of a major tick.
+
+To draw the label for the minor tick before each major tick, set `ticklabelindex=-1`, like in the following example.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.line(df, x='Date', y='AAPL.High')
+
+fig.update_layout(
+    xaxis=dict(
+        minor=dict(ticks='outside'),
+        ticks='outside',
+        ticklen=10,
+        ticklabelindex=-1
+    )
+)
+
+fig.show()
+```
+
+### Axis lines: grid and zerolines
+
+##### Toggling Axis grid lines
+
+Axis grid lines can be disabled by setting the `showgrid` property to `False` for the x and/or y axis.
+
+Here is an example of setting `showgrid` to `False` in the graph object figure constructor.
+
+```python
+import plotly.express as px
+
+fig = px.line(y=[1, 0])
+fig.update_xaxes(showgrid=False)
+fig.update_yaxes(showgrid=False)
+fig.show()
+```
+
+##### Toggling Axis zero lines
+
+The lines passing through zero can be disabled as well by setting the `zeroline` axis property to `False`
+
+```python
+import plotly.express as px
+
+fig = px.line(y=[1, 0])
+
+fig.update_xaxes(showgrid=False, zeroline=False)
+fig.update_yaxes(showgrid=False, zeroline=False)
+fig.show()
+```
+
+#### Styling and Coloring Axes and the Zero-Line
+
+##### Styling axis lines
+
+The `showline` axis property controls the visibility of the axis line, and the `linecolor` and `linewidth` axis properties control the color and width of the axis line.
+
+Here is an example of enabling the x and y axis lines, and customizing their width and color, for a faceted histogram created with Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.histogram(df, x="sex", y="tip", histfunc='sum', facet_col='smoker')
+fig.update_xaxes(showline=True, linewidth=2, linecolor='black')
+fig.update_yaxes(showline=True, linewidth=2, linecolor='black')
+
+fig.show()
+```
+
+##### Mirroring axis lines
+
+Axis lines can be mirrored to the opposite side of the plotting area by setting the `mirror` axis property to `True`.
+
+Here is an example of mirroring the x and y axis lines in a faceted histogram created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.histogram(df, x="sex", y="tip", histfunc='sum', facet_col='smoker')
+fig.update_xaxes(showline=True, linewidth=2, linecolor='black', mirror=True)
+fig.update_yaxes(showline=True, linewidth=2, linecolor='black', mirror=True)
+
+fig.show()
+```
+
+##### Styling grid lines
+
+The width and color of axis grid lines are controlled by the `gridwidth` and `gridcolor` axis properties.
+
+Here is an example of customizing the grid line width and color for a faceted scatter plot created with Plotly Express
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(showgrid=True, gridwidth=1, gridcolor='LightPink')
+fig.update_yaxes(showgrid=True, gridwidth=1, gridcolor='LightPink')
+
+fig.show()
+```
+
+_new in 5.8_
+
+By default grid lines are `solid`. Set the `griddash` property to change this style. In this example we display the x-axis grid lines as `dash` and the minor grid lines as `dot`. Other allowable values are `longdash`, `dashdot`, or `longdashdot`.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(gridcolor='black', griddash='dash', minor_griddash="dot")
+
+fig.show()
+```
+
+##### Styling zero lines
+
+The width and color of axis zero lines are controlled by the `zerolinewidth` and `zerolinecolor` axis properties.
+
+Here is an example of configuring the zero line width and color for a simple figure using the `update_xaxes` and `update_yaxes` graph object figure methods.
+
+```python
+import plotly.express as px
+
+fig = px.line(y=[1, 0])
+
+fig.update_xaxes(zeroline=True, zerolinewidth=2, zerolinecolor='LightPink')
+fig.update_yaxes(zeroline=True, zerolinewidth=2, zerolinecolor='LightPink')
+
+fig.show()
+```
+
+##### Controlling Zero Line Layer
+
+*New in 6.3*
+
+By default, zero lines are displayed below traces. Set `zerolinelayer="above traces"` on an axis to display its zero line above traces:
+
+```python
+import plotly.graph_objects as go
+
+x = ['A', 'B', 'C', 'D', 'A']
+y = [2, 0, 4, -3, 2]
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=x,
+            y=y,
+            fill='toself',
+            mode='none',
+            fillcolor='lightpink'
+        )
+    ],
+    layout=dict(
+        yaxis=dict(
+            zerolinelayer="above traces"  # Change to "below traces" to see the difference
+        ),
+    )
+)
+
+fig.show()
+```
+
+#### Setting the Range of Axes Manually
+
+The visible x and y axis range can be configured manually by setting the `range` axis property to a list of two values, the lower and upper bound.
+
+Here's an example of manually specifying the x and y axis range for a faceted scatter plot created with Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(range=[1.5, 4.5])
+fig.update_yaxes(range=[3, 9])
+
+fig.show()
+```
+
+#### Exclude Inside Tick Labels from Range
+
+*New in 5.18*
+
+You can use `insiderange` instead of `range` on an axis if you have tick labels positioned on the inside of another axis and you don't want the range to overlap with those labels.
+
+In this example, we have a y axis with `ticklabelposition="inside"` and by setting `insiderange=['2018-10-01', '2019-01-01']` on the x axis, the data point of `2018-10-01` is displayed after the y axis labels.
+
+```python
+import plotly.express as px
+df = px.data.stocks(indexed=True)
+
+fig = px.line(df, df.index, y="GOOG")
+fig.update_yaxes(ticklabelposition="inside", title=dict(text="Price"))
+fig.update_xaxes(insiderange=['2018-10-01', '2019-01-01'], title=dict(text="Date"))
+
+fig.show()
+```
+
+#### Setting only a Lower or Upper Bound for Range
+
+*New in 5.17*
+
+You can also set just a lower or upper bound manually and have autorange applied to the other bound by setting it to `None`. In the following example, we set an upper bound of 4.5 on the x axes, while specifying `None` for the lower bound, meaning it will use autorange. On the y axes, we set the lower bound, and use `None` for the upper bound, meaning that uses autorange.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(range=[None, 4.5])
+fig.update_yaxes(range=[3, None])
+
+fig.show()
+```
+
+#### Setting a Maximum and Minimum Allowed Axis Value
+
+*New in 5.17*
+
+When setting a range manually, you can also set a `maxallowed` or `minallowed` for an axis. With this set, you won't be able to pan further than the min or max allowed. In this example, we've set the minimum allowed on the x-axis to 1 and the maximum allowed on the y-axis to 10.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.update_xaxes(range=[1.5, 4.5], minallowed=1)
+fig.update_yaxes(range=[3, 9], maxallowed=10)
+
+fig.show()
+```
+
+#### Disabling Pan/Zoom on Axes (Fixed Range)
+
+Pan/Zoom can be disabled for a given axis by setting `fixedrange` to `True`.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(fixedrange=True)
+
+fig.show()
+```
+
+### Fixed Ratio Axes
+
+The `scaleanchor` and `scaleratio` axis properties can be used to force a fixed ratio of pixels per unit between two axes.
+
+Here is an example of anchoring the scale of the x and y axis with a scale ratio of 1. Notice how the zoom box is constrained to prevent the distortion of the shape of the line plot.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x = [0,1,1,0,0,1,1,2,2,3,3,2,2,3],
+    y = [0,0,1,1,3,3,2,2,3,3,1,1,0,0]
+))
+
+fig.update_layout(
+    width = 800,
+    height = 500,
+    title = "fixed-ratio axes"
+)
+fig.update_yaxes(
+    scaleanchor = "x",
+    scaleratio = 1,
+  )
+
+fig.show()
+```
+
+### Fixed Ratio Axes with Compressed domain
+
+If an axis needs to be compressed (either due to its own `scaleanchor` and `scaleratio` or those of the other axis), `constrain` determines how that happens: by increasing the "range" (default), or by decreasing the "domain".
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x = [0,1,1,0,0,1,1,2,2,3,3,2,2,3],
+    y = [0,0,1,1,3,3,2,2,3,3,1,1,0,0]
+))
+fig.update_layout(
+    width = 800,
+    height = 500,
+    title = "fixed-ratio axes with compressed axes"
+)
+fig.update_xaxes(
+    range=[-1,4],  # sets the range of xaxis
+    constrain="domain",  # meanwhile compresses the xaxis by decreasing its "domain"
+)
+fig.update_yaxes(
+    scaleanchor = "x",
+    scaleratio = 1
+)
+fig.show()
+```
+
+##### Decreasing the domain spanned by an axis
+
+In the example below, the x and y axis are anchored together, and the range of the `xaxis` is set manually. By default, plotly extends the range of the axis (overriding the `range` parameter) to fit in the figure `domain`. You can restrict the `domain` to force the axis to span only the set range, by setting `constrain='domain'` as below.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x = [0,1,1,0,0,1,1,2,2,3,3,2,2,3],
+    y = [0,0,1,1,3,3,2,2,3,3,1,1,0,0]
+))
+
+fig.update_layout(
+    width = 800,
+    height = 500,
+    title = "fixed-ratio axes"
+)
+fig.update_xaxes(
+    scaleanchor = "x",
+    scaleratio = 1,
+)
+fig.update_yaxes(
+    range=(-0.5, 3.5),
+    constrain='domain'
+)
+
+
+fig.show()
+```
+
+#### Reversed Axes
+
+You can tell plotly's automatic axis range calculation logic to reverse the direction of an axis by setting the `autorange` axis property to `"reversed"`.
+
+Here is an example of reversing the direction of the y axes for a faceted scatter plot created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(autorange="reversed")
+
+fig.show()
+```
+
+#### Reversed Axes with Range ( Min/Max ) Specified
+
+The direction of an axis can be reversed when manually setting the range extents by specifying a list containing the upper bound followed by the lower bound (rather that the lower followed by the upper) as the `range` axis property.
+
+Here is an example of manually setting the reversed range of the y axes in a faceted scatter plot figure created using Plotly Express.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(range=[9, 3])
+
+fig.show()
+```
+
+*New in 5.17*
+
+To use a reversed axis while specifying only a lower bound for the range, set `autorange="min reversed"`:
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(range=[9, None], autorange="min reversed")
+
+fig.show()
+```
+
+*New in 5.17*
+
+To use a reversed axis while specifying only an upper bound for the range, set `autorange="max reversed"`:
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_yaxes(range=[None, 3], autorange="max reversed")
+
+fig.show()
+```
+
+### Axis range for log axis type
+
+If you are using a `log` type of axis and you want to set the range of the axis, you have to give the `log10` value of the bounds when using `fig.update_xaxes` or `fig.update_layout`. However, with `plotly.express` functions you pass directly the values of the range bounds (`plotly.express` then computes the appropriate values to pass to the figure layout).
+
+```python
+import plotly.express as px
+import numpy as np
+
+x = np.linspace(1, 200, 30)
+fig = px.scatter(x=x, y=x**3, log_x=True, log_y=True, range_x=[0.8, 250])
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x = np.linspace(1, 200, 30)
+fig = go.Figure(go.Scatter(x=x, y=x**3))
+fig.update_xaxes(type="log", range=[np.log10(0.8), np.log10(250)])
+fig.update_yaxes(type="log")
+fig.show()
+```
+
+#### Setting the domain of the axis
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x = [0,1,1,0,0,1,1,2,2,3,3,2,2,3],
+    y = [0,0,1,1,3,3,2,2,3,3,1,1,0,0]
+))
+fig.update_xaxes(domain=(0.25, 0.75))
+fig.update_yaxes(domain=(0.25, 0.75))
+fig.show()
+```
+
+#### Synchronizing axes in subplots with `matches`
+
+Using `facet_col` from `plotly.express` let [zoom](https://help.plotly.com/zoom-pan-hover-controls/#step-3-zoom-in-and-zoom-out-autoscale-the-plot) and [pan](https://help.plotly.com/zoom-pan-hover-controls/#step-6-pan-along-axes) each facet to the same range implicitly. However, if the subplots are created with `make_subplots`, the axis needs to be updated with `matches` parameter to update all the subplots accordingly.
+
+Zoom in one trace below, to see the other subplots zoomed to the same x-axis range. To pan all the subplots, click and drag from the center of x-axis to the side:
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+N = 20
+x = np.linspace(0, 1, N)
+
+fig = make_subplots(1, 3)
+for i in range(1, 4):
+    fig.add_trace(go.Scatter(x=x, y=np.random.random(N)), 1, i)
+fig.update_xaxes(matches='x')
+fig.show()
+```
+
+#### <code>nonnegative</code>, <code>tozero</code>, and <code>normal</code> Rangemode
+
+When you don't specify a range, autorange is used. It's also used for bounds set to `None` when providing a `range`.
+
+The axis auto-range calculation logic can be configured using the `rangemode` axis parameter.
+
+If `rangemode` is `"normal"` (the default), the range is computed based on the min and max values of the input data. If `"tozero"`, the range will always include zero. If `"nonnegative"`, the range will not extend below zero, regardless of the input data.
+
+Here is an example of configuring a faceted scatter plot created using Plotly Express to always include zero for both the x and y axes.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", facet_col="species")
+fig.update_xaxes(rangemode="tozero")
+fig.update_yaxes(rangemode="tozero")
+
+fig.show()
+```
+
+#### Autorange Options
+
+*New in 5.17*
+
+You can further configure how autorange is applied using `autorangeoptions` to specify maximum or minimum values or values to include.
+
+##### Specifying Minimum and Maximum Allowed Values
+
+Using `autorangeoptions.maxallowed`, you can specify an exact value to use as the autorange maximum. With `autorangeoptions.minallowed`, you can specify an exact value to use as the autorange minimum.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.update_yaxes(autorangeoptions=dict(minallowed=3))
+fig.update_xaxes(autorangeoptions=dict(maxallowed=5))
+
+fig.show()
+```
+
+##### Clip Minimum and Maximum
+
+You can also clip an axis range at a specific maximum or minimum value with `autorangeoptions.clipmax` and `autorangeoptions.clipmin`.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.update_yaxes(autorangeoptions=dict(clipmin=5))
+fig.update_xaxes(autorangeoptions=dict(clipmax=4))
+
+fig.show()
+```
+
+##### Specify Values to be Included
+
+Use `autorangeoptions.include` to specify a value that should always be included within the calculated autorange. In this example, we specify that for the autorange calculated on the x-axis, 5 should be included.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.update_xaxes(autorangeoptions=dict(include=5))
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/layout/xaxis/ and https://plotly.com/python/reference/layout/yaxis/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/bar-charts.md plotly-7.1.0+dfsg1/doc/python/bar-charts.md
--- plotly-5.20.0+dfsg/doc/python/bar-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bar-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,893 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to make Bar Charts in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Bar Charts
+    order: 3
+    page_type: example_index
+    permalink: python/bar-charts/
+    thumbnail: thumbnail/bar.jpg
+---
+
+### Bar chart with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.bar`, **each row of the DataFrame is represented as a rectangular mark**. To aggregate multiple data points into the same rectangular mark, please refer to the [histogram documentation](/python/histograms).
+
+In the example below, there is only a single row of data per year, so a single bar is displayed per year.
+
+```python
+import plotly.express as px
+data_canada = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(data_canada, x='year', y='pop')
+fig.show()
+```
+
+
+#### Bar charts with Long Format Data
+
+Long-form data has one row per observation, and one column per variable. This is suitable for storing and displaying multivariate data i.e. with dimension greater than 2. This format is sometimes called "tidy".
+
+To learn more about how to provide a specific form of column-oriented data to 2D-Cartesian Plotly Express functions such as `px.bar`, see the [Plotly Express Wide-Form Support in Python
+documentation](https://plotly.com/python/wide-form/).
+
+For  detailed column-input-format documentation, see the [Plotly Express Arguments documentation](https://plotly.com/python/px-arguments/).
+
+```python
+import plotly.express as px
+
+long_df = px.data.medals_long()
+
+fig = px.bar(long_df, x="nation", y="count", color="medal", title="Long-Form Input")
+fig.show()
+```
+
+```python
+long_df
+```
+
+#### Bar charts with Wide Format Data
+Wide-form data has one row per value of one of the first variable, and one column per value of the second variable. This is suitable for storing and displaying 2-dimensional data.
+
+```python
+import plotly.express as px
+
+wide_df = px.data.medals_wide()
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], title="Wide-Form Input")
+fig.show()
+```
+
+```python
+wide_df
+```
+
+### Bar charts in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'bar-charts', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Colored Bars
+
+The bar plot can be customized using keyword arguments, for example to use [continuous color](https://plotly.com/python/colorscales/), as below, or [discrete color](/python/discrete-color/), as above.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(df, x='year', y='pop',
+             hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
+             labels={'pop':'population of Canada'}, height=400)
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.bar(df, x='year', y='pop',
+             hover_data=['lifeExp', 'gdpPercap'], color='country',
+             labels={'pop':'population of Oceania'}, height=400)
+fig.show()
+```
+
+### Stacked vs Grouped Bars
+
+When several rows share the same value of `x` (here Female or Male), the rectangles are stacked on top of one another by default.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="sex", y="total_bill", color='time')
+fig.show()
+```
+
+The default stacked bar chart behavior can be changed to grouped (also known as clustered) using the `barmode` argument:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="sex", y="total_bill",
+             color='smoker', barmode='group',
+             height=400)
+fig.show()
+```
+
+### Aggregating into Single Colored Bars
+
+As noted above `px.bar()` will result in **one rectangle drawn per row of input**. This can sometimes result in a striped look as in the examples above. To combine these rectangles into one per color per position, you can use `px.histogram()`, which has [its own detailed documentation page](/python/histogram).
+
+> `px.bar` and `px.histogram` are designed  to be nearly interchangeable in their call signatures, so as to be able to switch between aggregated and disaggregated bar representations.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="sex", y="total_bill",
+             color='smoker', barmode='group',
+             height=400)
+fig.show()
+```
+
+`px.histogram()` will aggregate `y` values by summing them by default, but the `histfunc` argument can be used to set this to `avg` to create what is sometimes called a "barplot" which summarizes the central tendency of a dataset, rather than visually representing the totality of the dataset.
+
+> Warning: when using `histfunc`s other than `"sum"` or `"count"` it can be very misleading to use a `barmode` other than `"group"`, as stacked bars in effect represent the sum of the bar heights, and summing averages is rarely a reasonable thing to visualize.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="sex", y="total_bill",
+             color='smoker', barmode='group',
+             histfunc='avg',
+             height=400)
+fig.show()
+```
+
+### Bar Charts with Text
+
+*New in v5.5*
+
+You can add text to bars using the `text_auto` argument. Setting it to `True` will display the values on the bars, and setting it to a `d3-format` formatting string will control the output format.
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation", text_auto=True)
+fig.show()
+```
+
+The `text` argument can be used to display arbitrary text on the bars:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation", text="nation")
+fig.show()
+```
+
+By default, Plotly will scale and rotate text labels to maximize the number of visible labels, which can result in a variety of text angles and sizes and positions in the same figure. The `textfont`, `textposition` and `textangle` trace attributes can be used to control these.
+
+Here is an example of the default behavior:
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Europe' and year == 2007 and pop > 2.e6")
+fig = px.bar(df, y='pop', x='country', text_auto='.2s',
+            title="Default: various text sizes, positions and angles")
+fig.show()
+```
+
+Here is the same data with less variation in text formatting. Note that `textfont_size` will set the *maximum* size. The `layout.uniformtext` attribute can be used to guarantee that all text labels are the same size. See the [documentation on text and annotations](/python/text-and-annotations/) for details.
+
+The `cliponaxis` attribute is set to `False` in the example below to ensure that the outside text on the tallest bar is allowed to render outside of the plotting area.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Europe' and year == 2007 and pop > 2.e6")
+fig = px.bar(df, y='pop', x='country', text_auto='.2s',
+            title="Controlled text sizes, positions and angles")
+fig.update_traces(textfont_size=12, textangle=0, textposition="outside", cliponaxis=False)
+fig.show()
+```
+
+### Pattern Fills
+
+*New in v5.0*
+
+
+Bar charts afford the use of [patterns (also known as hatching or texture)](/python/pattern-hatching-texture/) in addition to color:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"])
+fig.show()
+```
+
+### Facetted subplots
+
+Use the keyword arguments `facet_row` (resp. `facet_col`) to create facetted subplots, where different rows (resp. columns) correspond to different values of the dataframe column specified in `facet_row`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="sex", y="total_bill", color="smoker", barmode="group",
+             facet_row="time", facet_col="day",
+             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"],
+                              "time": ["Lunch", "Dinner"]})
+fig.show()
+```
+
+#### Basic Bar Charts with plotly.graph_objects
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Bar` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import plotly.graph_objects as go
+animals=['giraffes', 'orangutans', 'monkeys']
+
+fig = go.Figure([go.Bar(x=animals, y=[20, 14, 23])])
+fig.show()
+```
+
+#### Grouped Bar Chart
+
+Customize the figure using `fig.update`.
+
+```python
+import plotly.graph_objects as go
+animals=['giraffes', 'orangutans', 'monkeys']
+
+fig = go.Figure(data=[
+    go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
+    go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
+])
+# Change the bar mode
+fig.update_layout(barmode='group')
+fig.show()
+```
+
+### Stacked Bar Chart
+
+```python
+import plotly.graph_objects as go
+animals=['giraffes', 'orangutans', 'monkeys']
+
+fig = go.Figure(data=[
+    go.Bar(name='SF Zoo', x=animals, y=[20, 14, 23]),
+    go.Bar(name='LA Zoo', x=animals, y=[12, 18, 29])
+])
+# Change the bar mode
+fig.update_layout(barmode='stack')
+fig.show()
+```
+
+### Bar Chart with Relative Barmode
+
+With "relative" barmode, the bars are stacked on top of one another, with negative values
+below the axis and positive values above.
+
+```python
+import plotly.graph_objects as go
+x = [1, 2, 3, 4]
+
+fig = go.Figure()
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16]))
+fig.add_trace(go.Bar(x=x, y=[6, -8, -4.5, 8]))
+fig.add_trace(go.Bar(x=x, y=[-15, -3, 4.5, -8]))
+fig.add_trace(go.Bar(x=x, y=[-1, 3, -3, -4]))
+
+fig.update_layout(barmode='relative', title_text='Relative Barmode')
+fig.show()
+```
+
+### Grouped Stacked Bar Chart
+
+*Supported in Plotly.py 6.0.0 and later*
+
+Use the `offsetgroup` property with `barmode="stacked"` or `barmode="relative"` to create grouped stacked bar charts. Bars that have the same `offsetgroup` will share the same position on the axis. Bars with no `offsetgroup` set will also share the same position on the axis. In the following example, for each quarter, the value for cities that belong to the same `offsetgroup` are stacked together.
+
+```python
+import plotly.graph_objects as go
+
+data = [
+    go.Bar(
+        x=['Q1', 'Q2', 'Q3', 'Q4'],
+        y=[150, 200, 250, 300],
+        name='New York',
+        offsetgroup="USA"
+    ),
+    go.Bar(
+        x=['Q1', 'Q2', 'Q3', 'Q4'],
+        y=[180, 220, 270, 320],
+        name='Boston',
+        offsetgroup="USA"
+    ),
+    go.Bar(
+        x=['Q1', 'Q2', 'Q3', 'Q4'],
+        y=[130, 170, 210, 260],
+        name='Montreal',
+        offsetgroup="Canada"
+    ),
+    go.Bar(
+        x=['Q1', 'Q2', 'Q3', 'Q4'],
+        y=[160, 210, 260, 310],
+        name='Toronto',
+        offsetgroup="Canada"
+    )
+]
+
+layout = go.Layout(
+    title={
+        'text': 'Quarterly Sales by City, Grouped by Country'
+    },
+    xaxis={
+        'title': {
+            'text': 'Quarter'
+        }
+    },
+    yaxis={
+        'title': {
+            'text': 'Sales'
+        }
+    },
+    barmode='stack'
+)
+
+fig = go.Figure(data=data, layout=layout)
+
+fig.show()
+```
+
+### Stacked Bar Chart From Aggregating a DataFrame
+
+Stacked bar charts are a powerful way to present results summarizing categories generated using the Pandas aggregate commands. `pandas.DataFrame.agg` produces a wide data set format incompatible with `px.bar`. Transposing and updating the indexes to achieve `px.bar` compatibility is a somewhat involved option. Here is one straightforward alternative, which presents the aggregated data as a stacked bar using plotly.graph_objects.
+
+```python
+from plotly import graph_objects as go
+import pandas as pd
+
+# Get one year of gapminder data
+url = 'https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv'
+df = pd.read_csv(url)
+df = df[df['year']==2007]
+df["gdp"]=df["pop"]*df['gdpPercap']
+
+
+# Build the summary of interest
+df_summarized = df.groupby("continent", observed=True).agg("sum").reset_index()
+
+df_summarized["percent of world population"]=100*df_summarized["pop"]/df_summarized["pop"].sum()
+df_summarized["percent of world GDP"]=100*df_summarized["gdp"]/df_summarized["gdp"].sum()
+
+
+df = df_summarized[["continent",
+"percent of world population",
+"percent of world GDP",
+]]
+
+# We now have a wide data frame, but it's in the opposite orientation from the one that px is designed to deal with.
+# Transposing it and rebuilding the indexes is an option, but iterating through the DF using graph objects is more succinct.
+
+fig=go.Figure()
+for category in df_summarized["continent"].values:
+    fig.add_trace(go.Bar(
+            x=df.columns[1:],
+            # We need to get a pandas series that contains just the values to graph;
+            # We do so by selecting the right row, selecting the right columns
+            # and then transposing and using iloc to convert to a series
+            # Here, we assume that the bar element category variable is in column 0
+            y=list(df.loc[df["continent"]==category][list(df.columns[1:])].transpose().iloc[:,0]),
+            name=str(category)
+
+
+        )
+)
+fig.update_layout(barmode="stack")
+
+fig.show()
+```
+
+
+### Bar Chart with Hover Text
+
+```python
+import plotly.graph_objects as go
+
+x = ['Product A', 'Product B', 'Product C']
+y = [20, 14, 23]
+
+# Use the hovertext kw argument for hover text
+fig = go.Figure(data=[go.Bar(x=x, y=y,
+            hovertext=['27% market share', '24% market share', '19% market share'])])
+# Customize aspect
+fig.update_traces(marker_color='rgb(158,202,225)', marker_line_color='rgb(8,48,107)',
+                  marker_line_width=1.5, opacity=0.6)
+fig.update_layout(title_text='January 2013 Sales Report')
+fig.show()
+```
+
+### Bar Chart with Direct Labels
+
+```python
+import plotly.graph_objects as go
+
+x = ['Product A', 'Product B', 'Product C']
+y = [20, 14, 23]
+
+# Use textposition='auto' for direct text
+fig = go.Figure(data=[go.Bar(
+            x=x, y=y,
+            text=y,
+            textposition='auto',
+        )])
+
+fig.show()
+```
+
+### Controlling text fontsize with uniformtext
+
+If you want all the text labels to have the same size, you can use the `uniformtext` layout parameter. The `minsize` attribute sets the font size, and the `mode` attribute sets what happens for labels which cannot fit with the desired fontsize: either `hide` them or `show` them with overflow. In the example below we also force the text to be outside of bars with `textposition`.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Europe' and year == 2007 and pop > 2.e6")
+fig = px.bar(df, y='pop', x='country', text='pop')
+fig.update_traces(texttemplate='%{text:.2s}', textposition='outside')
+fig.update_layout(uniformtext_minsize=8, uniformtext_mode='hide')
+fig.show()
+```
+
+### Rotated Bar Chart Labels
+
+```python
+import plotly.graph_objects as go
+
+months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+
+fig = go.Figure()
+fig.add_trace(go.Bar(
+    x=months,
+    y=[20, 14, 25, 16, 18, 22, 19, 15, 12, 16, 14, 17],
+    name='Primary Product',
+    marker_color='indianred'
+))
+fig.add_trace(go.Bar(
+    x=months,
+    y=[19, 14, 22, 14, 16, 19, 15, 14, 10, 12, 12, 16],
+    name='Secondary Product',
+    marker_color='lightsalmon'
+))
+
+# Here we modify the tickangle of the xaxis, resulting in rotated labels.
+fig.update_layout(barmode='group', xaxis_tickangle=-45)
+fig.show()
+```
+
+### Customizing Individual Bar Colors
+
+```python
+import plotly.graph_objects as go
+
+colors = ['lightslategray',] * 5
+colors[1] = 'crimson'
+
+fig = go.Figure(data=[go.Bar(
+    x=['Feature A', 'Feature B', 'Feature C',
+       'Feature D', 'Feature E'],
+    y=[20, 14, 23, 25, 22],
+    marker_color=colors # marker color can be a single color value or an iterable
+)])
+fig.update_layout(title_text='Least Used Feature')
+```
+
+### Customizing Individual Bar Widths
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Bar(
+    x=[1, 2, 3, 5.5, 10],
+    y=[10, 8, 6, 4, 2],
+    width=[0.8, 0.8, 0.8, 3.5, 4] # customize width here
+)])
+
+fig.show()
+```
+
+Bar charts with custom widths can be used to make mekko charts (also known as marimekko charts, mosaic plots, or variwide charts).
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+labels = ["apples","oranges","pears","bananas"]
+widths = np.array([10,20,20,50])
+
+data = {
+    "South": [50,80,60,70],
+    "North": [50,20,40,30]
+}
+
+fig = go.Figure()
+for key in data:
+    fig.add_trace(go.Bar(
+        name=key,
+        y=data[key],
+        x=np.cumsum(widths)-widths,
+        width=widths,
+        offset=0,
+        customdata=np.transpose([labels, widths*data[key]]),
+        texttemplate="%{y} x %{width} =<br>%{customdata[1]}",
+        textposition="inside",
+        textangle=0,
+        textfont_color="white",
+        hovertemplate="<br>".join([
+            "label: %{customdata[0]}",
+            "width: %{width}",
+            "height: %{y}",
+            "area: %{customdata[1]}",
+        ])
+    ))
+
+fig.update_xaxes(
+    tickvals=np.cumsum(widths)-widths/2,
+    ticktext= ["%s<br>%d" % (l, w) for l, w in zip(labels, widths)]
+)
+
+fig.update_xaxes(range=[0,100])
+fig.update_yaxes(range=[0,100])
+
+fig.update_layout(
+    title_text="Marimekko Chart",
+    barmode="stack",
+    uniformtext=dict(mode="hide", minsize=10),
+)
+```
+
+### Using a scatterplot to wrap long bars into multiple columns
+
+This bar-style pictogram allows readers to focus on the relative sizes of smaller entities by wrapping the bar for largest entries into multiple columns.  You could make it even more of a pictogram by using fontawesome to replace the square markers we use below with icons like mortar boards for students.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+def pictogram_bar(data, title, icon_size, max_icons_per_column=10, units_per_icon=1, unit_description="", inter_group_spacing=.8,icon_vertical_spacing=0.005):
+
+    fig = go.Figure()
+    x_start = 1
+    tick_locations = []
+    #loop through each group and create a trace with its icons
+    for i, (category, value) in enumerate(data.items()):
+        # compute the number of icons to use to represent this category.  Depending on your use case, you might replace round with floor or ceiling.
+        icon_count = round(value / units_per_icon)
+        # compute the number of columns in which to arrange the icons for this category
+        # using a double negative sign to convert a floor(division) operation into a ceiling(division) operation
+        num_columns = -(-icon_count // max_icons_per_column)
+
+        #create and populate lists of icon coordinates
+        x_coordinates, y_coordinates = [], []
+        for col in range(num_columns):
+            # the number of icons in this column is the lesser of the column height or
+            # the number of icons remaining to place
+            column_icons = min(max_icons_per_column, icon_count - col * max_icons_per_column)
+
+            # Create a one item list containing the x-coordinate of this column.
+            # Then add column_icons copies of that coordinate to the list of icon x coordinates using list multiplication.
+            # Normalizing the width of each within-category column to 1 simplifies the code.
+            # We can adjust the visible space between columns by adjusting the total width below.
+            x_coordinates.extend([x_start + col] * column_icons)
+            # Create a list of sequentially increasing y-coordinates for icons.
+            y_coordinates.extend([y + icon_vertical_spacing * y for y in range(1, column_icons + 1)])
+        # Add scatter plot for the category
+        fig.add_trace(go.Scatter(
+            x=x_coordinates,
+            y=y_coordinates,
+            mode='markers',
+            marker=dict(size=icon_size, symbol="square", color= i),
+            name=category,
+            # Suppress the x and y coordinates in the hover text, since they are irrelevant implementation details.
+            hoverinfo="text",
+            text=[f"{category}: {value}" for _ in range(len(x_coordinates))]
+        ))
+
+        # Add an annotation above the center of each category showing its value
+        fig.add_trace(go.Scatter(
+            x=[x_start + (num_columns - 1) / 2],  # Compute the location of the center
+            y=[max_icons_per_column* (1+icon_vertical_spacing) + 1.15],
+            mode="text",
+            text=[f"{value}"],
+            textfont=dict(size=14, color="black"),
+            showlegend=False
+        ))
+        # Track locations where we will put the text labeling each category
+        tick_locations.append(x_start + (num_columns - 1) / 2)
+        #compute the left edge of the next category
+        x_start += num_columns + inter_group_spacing
+
+    fig.update_layout(
+        title=title,
+        xaxis=dict(
+            tickvals=tick_locations,
+            # Label each category
+            ticktext=list(data.keys()),
+            tickangle=-45,
+            showgrid=False,
+            title="Categories"
+        ),
+        yaxis=dict(
+            title=f"Each icon represents {units_per_icon:,g} {unit_description}",
+            # The y-axis goes above the top icon to make room for the annotations.
+            # We set tick values so the axis labeling does not go above the top icon.
+            # If you choose a value of max_icons_per_column that is not a multiple of 5, consider changing this.
+            tickvals=list(range(0,max_icons_per_column+1,5)),
+            showgrid=False,
+            zeroline=False,
+        ),
+        # We have already got all the labeling we need so we suppress the legend.
+        showlegend=False,
+        height=700,
+        # The x-coordinates scale to fill available space, so adjusting the width of the image is a good way to adjust spacing between columns.
+        width=(len(data) * 150 + 50)
+    )
+    fig.show()
+
+df = pd.DataFrame({
+    'School': ["Haverford College", "University of Mary Washington", "Brown University", "Arizona State University"],
+    'Enrollment': [1421, 3611, 7226, 65174]
+})
+
+pictogram_bar(
+    data={row['School']: row['Enrollment'] for _, row in df.iterrows()},
+    title="Undergraduate Enrollment at Participating Schools",
+    units_per_icon=1000,
+    unit_description = "students",
+    icon_size=27,
+    icon_vertical_spacing=0.05
+)
+```
+
+### Customizing Individual Bar Base
+
+```python
+import plotly.graph_objects as go
+
+years = ['2016','2017','2018']
+
+fig = go.Figure()
+fig.add_trace(go.Bar(x=years, y=[500, 600, 700],
+                base=[-500,-600,-700],
+                marker_color='crimson',
+                name='expenses'))
+fig.add_trace(go.Bar(x=years, y=[300, 400, 700],
+                base=0,
+                marker_color='lightslategrey',
+                name='revenue'
+                ))
+
+fig.show()
+```
+
+### Rounded Bars
+
+*New in 5.19*
+
+You can round the corners on all bar traces in a figure by setting `barcornerradius` on the figure's layout. `barcornerradius` can be a number of pixels or a percentage of the bar width (using a string ending in %, for example "20%").
+
+In this example, we set all bars to have a radius of 15 pixels.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.medals_wide()
+
+fig = go.Figure(
+    data=[
+        go.Bar(x=df.nation, y=df.gold, name="Gold"),
+        go.Bar(x=df.nation, y=df.silver, name="Silver"),
+        go.Bar(x=df.nation, y=df.bronze, name="Bronze"),
+    ],
+    layout=dict(
+        barcornerradius=15,
+    ),
+)
+
+fig.show()
+```
+
+When you don't want all bar traces in a figure to have the same rounded corners, you can instead configure rounded corners on each trace using `marker.cornerradius`. In this example, which uses subplots, the first trace has a corner radius of 30 pixels, the second trace has a bar corner radius of 30% of the bar width, and the third trace has no rounded corners set.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+from plotly import data
+
+df = data.medals_wide()
+
+fig = make_subplots(rows=1, cols=3, shared_yaxes=True)
+
+fig.add_trace(
+    go.Bar(x=df.nation, y=df.gold, name="Gold", marker=dict(cornerradius=30)), 1, 1
+)
+fig.add_trace(
+    go.Bar(x=df.nation, y=df.silver, name="Silver", marker=dict(cornerradius="30%")),
+    1,
+    2,
+)
+
+fig.add_trace(
+    go.Bar(x=df.nation, y=df.bronze, name="Bronze"),
+    1,
+    3,
+)
+
+
+fig.show()
+```
+
+### Colored and Styled Bar Chart
+
+In this example several parameters of the layout are customized, hence it is convenient to use directly the `go.Layout(...)` constructor instead of calling `fig.update`.
+
+```python
+import plotly.graph_objects as go
+
+years = [1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+         2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012]
+
+fig = go.Figure()
+fig.add_trace(go.Bar(x=years,
+                y=[219, 146, 112, 127, 124, 180, 236, 207, 236, 263,
+                   350, 430, 474, 526, 488, 537, 500, 439],
+                name='Rest of world',
+                marker_color='rgb(55, 83, 109)'
+                ))
+fig.add_trace(go.Bar(x=years,
+                y=[16, 13, 10, 11, 28, 37, 43, 55, 56, 88, 105, 156, 270,
+                   299, 340, 403, 549, 499],
+                name='China',
+                marker_color='rgb(26, 118, 255)'
+                ))
+
+fig.update_layout(
+    title=dict(text='US Export of Plastic Scrap'),
+    xaxis_tickfont_size=14,
+    yaxis=dict(
+        title=dict(
+            text="USD (millions)",
+            font=dict(
+                size=16
+            )
+        ),
+    ),
+    legend=dict(
+        x=0,
+        y=1.0,
+        bgcolor='rgba(255, 255, 255, 0)',
+        bordercolor='rgba(255, 255, 255, 0)'
+    ),
+    barmode='group',
+    bargap=0.15, # gap between bars of adjacent location coordinates.
+    bargroupgap=0.1 # gap between bars of the same location coordinate.
+)
+fig.show()
+```
+
+### Bar Chart with Sorted or Ordered Categories
+
+Set `categoryorder` to `"category ascending"` or `"category descending"` for the alphanumerical order of the category names or `"total ascending"` or `"total descending"` for numerical order of values. [categoryorder](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-categoryorder) for more information. Note that sorting the bars by a particular trace isn't possible right now - it's only possible to sort by the total values. Of course, you can always sort your data _before_ plotting it if you need more customization.
+
+This example orders the bar chart alphabetically with `categoryorder: 'category ascending'`
+
+```python
+import plotly.graph_objects as go
+
+x=['b', 'a', 'c', 'd']
+fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))
+fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))
+
+fig.update_layout(barmode='stack', xaxis={'categoryorder':'category ascending'})
+fig.show()
+```
+
+This example shows how to customise sort ordering by defining `categoryorder` to "array" to derive the ordering from the attribute `categoryarray`.
+
+```python
+import plotly.graph_objects as go
+
+x=['b', 'a', 'c', 'd']
+fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))
+fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))
+
+fig.update_layout(barmode='stack', xaxis={'categoryorder':'array', 'categoryarray':['d','a','c','b']})
+fig.show()
+```
+
+This example orders the bar chart by descending value with `categoryorder: 'total descending'`
+
+```python
+import plotly.graph_objects as go
+
+x=['b', 'a', 'c', 'd']
+fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))
+fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))
+
+fig.update_layout(barmode='stack', xaxis={'categoryorder':'total descending'})
+fig.show()
+```
+
+### Horizontal Bar Charts
+
+See examples of horizontal bar charts [here](https://plotly.com/python/horizontal-bar-charts/).
+
+### Bar Charts With Multicategory Axis Type
+
+If your traces have arrays for `x` or `y`, then the axis type is automatically inferred to be `multicategory`.
+
+```python
+import plotly.graph_objects as go
+x = [
+    ["BB+", "BB+", "BB+", "BB", "BB", "BB"],
+    [16, 17, 18, 16, 17, 18,]
+]
+fig = go.Figure()
+fig.add_bar(x=x,y=[1,2,3,4,5,6])
+fig.add_bar(x=x,y=[6,5,4,3,2,1])
+fig.update_layout(barmode="relative")
+fig.show()
+```
+
+
+
+
+### Reference
+
+See [function reference for `px.bar()`](https://plotly.com/python-api-reference/generated/plotly.express.bar) or https://plotly.com/python/reference/bar/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/bio-alignment-chart.md plotly-7.1.0+dfsg1/doc/python/bio-alignment-chart.md
--- plotly-5.20.0+dfsg/doc/python/bio-alignment-chart.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bio-alignment-chart.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,63 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.0
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.7
+  plotly:
+    display_as: bio
+    language: python
+    layout: base
+    name: Alignment Chart
+    order: 1
+    page_type: u-guide
+    permalink: python/alignment-chart/
+    thumbnail: thumbnail/alignment_chart.png
+---
+
+## Alignment Viewer
+
+The Alignment Viewer (MSA) component is used to align multiple genomic or proteomic sequences from a FASTA or Clustal file. Among its extensive set of features, the multiple sequence alignment viewer can display multiple subplots showing gap and conservation info, alongside industry standard colorscale support and consensus sequence. No matter what size your alignment is, Alignment Viewer is able to display your genes or proteins snappily thanks to the underlying WebGL architecture powering the component. You can quickly scroll through your long sequence with a slider or a heatmap overview.
+
+Note that the AlignmentChart only returns a chart of the sequence, while AlignmentViewer has integrated controls for colorscale, heatmaps, and subplots allowing you to interactively control your sequences.
+
+## Bar Chart for conservation visualization
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = (pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/Dash_Bio/Genetic/gene_conservation.csv')
+        .set_index('0')
+        .loc[['consensus','conservation']]
+        .T
+        .astype({"conservation": float}))
+
+fig = px.bar(df, labels={ 'index': 'base' }, hover_name='consensus', y='conservation')
+fig.show()
+```
+
+## Alignment Chart in dash_bio
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'bio-alignmentchart', width='100%', height=1200)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/bio-clustergram.md plotly-7.1.0+dfsg1/doc/python/bio-clustergram.md
--- plotly-5.20.0+dfsg/doc/python/bio-clustergram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bio-clustergram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,107 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.0
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.7
+  plotly:
+    display_as: bio
+    language: python
+    layout: base
+    name: Clustergram
+    order: 1
+    page_type: u-guide
+    permalink: python/clustergram/
+    thumbnail: thumbnail/clustergram.png
+---
+
+## Default Clustergram
+A clustergram is a combination heatmap-dendrogram that is commonly used in gene expression data. The hierarchical clustering that is represented by the dendrograms can be used to identify groups of genes with related expression levels. The Dash Bio Clustergram component is a Python-based component that uses plotly.py to generate a figure. It takes as input a two-dimensional numpy array of floating-point values. Imputation of missing data and computation of hierarchical clustering both occur within the component itself. Clusters that meet or exceed a user-defined threshold of similarity comprise single traces in the corresponding dendrogram, and can be highlighted with annotations. The user can specify additional parameters to customize the metrics and methods used to compute parts of the clustering, such as the pairwise distance between observations and the linkage matrix.
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/Dash_Bio/Chromosomal/clustergram_brain_cancer.csv')
+
+dash_bio.Clustergram(
+    data=df,
+    column_labels=list(df.columns.values),
+    row_labels=list(df.index),
+    height=800,
+    width=700
+)
+```
+
+## Dendrogram Cluster Colors/Line Widths
+Change the colors of the dendrogram traces that are used to represent clusters, and configure their line widths.
+
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/Dash_Bio/Chromosomal/clustergram_brain_cancer.csv')
+
+dash_bio.Clustergram(
+    data=df,
+    column_labels=list(df.columns.values),
+    row_labels=list(df.index),
+    height=800,
+    width=700,
+    color_list={
+        'row': ['#636EFA', '#00CC96', '#19D3F3'],
+        'col': ['#AB63FA', '#EF553B'],
+        'bg': '#506784'
+    },
+    line_width=2
+)
+```
+
+## Relative Dendrogram Size
+Change the relative width and height of, respectively, the row and column dendrograms compared to the width and height of the heatmap.
+
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/Dash_Bio/Chromosomal/clustergram_brain_cancer.csv')
+
+dash_bio.Clustergram(
+    data=df,
+    column_labels=list(df.columns.values),
+    row_labels=list(df.index),
+    height=800,
+    width=700,
+    display_ratio=[0.1, 0.7]
+)
+```
+
+## Clustergram with Dash
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'bio-clustergram', width='100%', height=1200)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/bio-manhattanplot.md plotly-7.1.0+dfsg1/doc/python/bio-manhattanplot.md
--- plotly-5.20.0+dfsg/doc/python/bio-manhattanplot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bio-manhattanplot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,76 @@
+---
+jupyter:
+  celltoolbar: Tags
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.0
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.7
+  plotly:
+    display_as: bio
+    language: python
+    layout: base
+    name: Manhattan Plot
+    order: 1
+    page_type: u-guide
+    permalink: python/manhattan-plot/
+    thumbnail: thumbnail/manhattan_plot.png
+---
+
+## Manhattan Plot
+ManhattanPlot allows you to visualize genome-wide association studies (GWAS) efficiently. Using WebGL under the hood, you can interactively explore overviews of massive datasets comprising hundreds of thousands of points at once, or take a closer look at a small subset of your data. Hover data and click data are accessible from within the Dash app.
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/dash-bio-docs-files/master/manhattan_data.csv')
+
+
+dash_bio.ManhattanPlot(
+    dataframe=df,
+)
+```
+
+## Highlighted points color, and colors of the suggestive line and the genome-wide line
+Change the color of the points that are considered significant.
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/dash-bio-docs-files/master/manhattan_data.csv')
+
+dash_bio.ManhattanPlot(
+    dataframe=df,
+    highlight_color='#00FFAA',
+    suggestiveline_color='#AA00AA',
+    genomewideline_color='#AA5500'
+)
+```
+
+## ManhattanPlot with Dash
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'bio-manhattanplot', width='100%', height=1200)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/bio-volcano-plot.md plotly-7.1.0+dfsg1/doc/python/bio-volcano-plot.md
--- plotly-5.20.0+dfsg/doc/python/bio-volcano-plot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bio-volcano-plot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,76 @@
+---
+jupyter:
+  celltoolbar: Tags
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    display_as: bio
+    language: python
+    layout: base
+    name: Volcano Plot
+    order: 1
+    page_type: u-guide
+    permalink: python/volcano-plot/
+    thumbnail: thumbnail/volcano_plot.png
+---
+
+## VolcanoPlot
+Volcano Plot interactively identifies clinically meaningful markers in genomic experiments, i.e., markers that are statistically significant and have an effect size greater than some threshold. Specifically, volcano plots depict the negative log-base-10 p-values plotted against their effect size.
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/dash-bio-docs-files/master/volcano_data1.csv')
+
+dash_bio.VolcanoPlot(
+    dataframe=df,
+)
+```
+
+## Point Sizes And Line Widths
+Change the size of the points on the scatter plot, and the widths of the effect lines and genome-wide line.
+
+
+```python
+import pandas as pd
+import dash_bio
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/dash-bio-docs-files/master/volcano_data1.csv')
+
+dash_bio.VolcanoPlot(
+    dataframe=df,
+    point_size=10,
+    effect_size_line_width=4,
+    genomewideline_width=2
+)
+```
+
+## VolcanoPlot with Dash
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'bio-volcano', width='100%', height=1200)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/box-plots.md plotly-7.1.0+dfsg1/doc/python/box-plots.md
--- plotly-5.20.0+dfsg/doc/python/box-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/box-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,524 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make Box Plots in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Box Plots
+    order: 2
+    page_type: example_index
+    permalink: python/box-plots/
+    redirect_from:
+    - /python/box/
+    - /python/basic_statistics/
+    thumbnail: thumbnail/box.jpg
+---
+
+<!-- #region -->
+A [box plot](https://en.wikipedia.org/wiki/Box_plot) is a statistical representation of the distribution of a variable through its quartiles. The ends of the box represent the lower and upper quartiles, while the median (second quartile) is marked by a line inside the box. For other statistical representations of numerical data, see [other statistical charts](https://plotly.com/python/statistical-charts/).
+
+
+Alternatives to box plots for visualizing distributions include [histograms](https://plotly.com/python/histograms/), [violin plots](https://plotly.com/python/violin/), [ECDF plots](https://plotly.com/python/ecdf-plots/) and [strip charts](https://plotly.com/python/strip-charts/).
+
+## Box Plot with `plotly.express`
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+In a box plot created by `px.box`, the distribution of the column given as `y` argument is represented.
+<!-- #endregion -->
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.box(df, y="total_bill")
+fig.show()
+```
+
+If a column name is given as `x` argument, a box plot is drawn for each value of `x`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.box(df, x="time", y="total_bill")
+fig.show()
+```
+
+### Box Plots in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'box-plots', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Display the underlying data
+
+With the `points` argument, display underlying data points with either all points (`all`), outliers only (`outliers`, default), or none of them (`False`).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.box(df, x="time", y="total_bill", points="all")
+fig.show()
+```
+
+### Choosing The Algorithm For Computing Quartiles
+
+By default, quartiles for box plots are computed using the `linear` method (for more about linear interpolation, see #10 listed on [http://jse.amstat.org/v14n3/langford.html](http://jse.amstat.org/v14n3/langford.html) and [https://en.wikipedia.org/wiki/Quartile](https://en.wikipedia.org/wiki/Quartile) for more details).
+
+However, you can also choose to use an `exclusive` or an `inclusive` algorithm to compute quartiles.
+
+The _exclusive_ algorithm uses the median to divide the ordered dataset into two halves. If the sample is odd, it does not include the median in either half. Q1 is then the median of the lower half and Q3 is the median of the upper half.
+
+The _inclusive_ algorithm also uses the median to divide the ordered dataset into two halves, but if the sample is odd, it includes the median in both halves. Q1 is then the median of the lower half and Q3 the median of the upper half.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+
+fig = px.box(df, x="day", y="total_bill", color="smoker")
+fig.update_traces(quartilemethod="exclusive") # or "inclusive", or "linear" by default
+fig.show()
+```
+
+#### Difference Between Quartile Algorithms
+
+It can sometimes be difficult to see the difference between the linear, inclusive, and exclusive algorithms for computing quartiles. In the following example, the same dataset is visualized using each of the three different quartile computation algorithms.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+data = [1,2,3,4,5,6,7,8,9]
+df = pd.DataFrame(dict(
+    linear=data,
+    inclusive=data,
+    exclusive=data
+)).melt(var_name="quartilemethod")
+
+
+fig = px.box(df, y="value", facet_col="quartilemethod", color="quartilemethod",
+             boxmode="overlay", points='all')
+
+fig.update_traces(quartilemethod="linear", jitter=0, col=1)
+fig.update_traces(quartilemethod="inclusive", jitter=0, col=2)
+fig.update_traces(quartilemethod="exclusive", jitter=0, col=3)
+
+fig.show()
+```
+
+#### Styled box plot
+
+For the interpretation of the notches, see https://en.wikipedia.org/wiki/Box_plot#Variations.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.box(df, x="time", y="total_bill", color="smoker",
+             notched=True, # used notched shape
+             title="Box plot of total bill",
+             hover_data=["day"] # add day column to hover data
+            )
+fig.show()
+```
+
+## Box plot with go.Box
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Box` class from `plotly.graph_objects`](/python/graph-objects/). All available options for `go.Box` are described in the reference page https://plotly.com/python/reference/box/.
+
+### Basic Box Plot
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+np.random.seed(1)
+
+y0 = np.random.randn(50) - 1
+y1 = np.random.randn(50) + 1
+
+fig = go.Figure()
+fig.add_trace(go.Box(y=y0))
+fig.add_trace(go.Box(y=y1))
+
+fig.show()
+```
+
+### Basic Horizontal Box Plot
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x0 = np.random.randn(50)
+x1 = np.random.randn(50) + 2 # shift mean
+
+fig = go.Figure()
+# Use x instead of y argument for horizontal plot
+fig.add_trace(go.Box(x=x0))
+fig.add_trace(go.Box(x=x1))
+
+fig.show()
+```
+
+### Box Plot That Displays The Underlying Data
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Box(y=[0, 1, 1, 2, 3, 5, 8, 13, 21],
+            boxpoints='all', # can also be outliers, or suspectedoutliers, or False
+            jitter=0.3, # add some jitter for a better separation between points
+            pointpos=-1.8 # relative position of points wrt box
+              )])
+
+fig.show()
+```
+
+### Modifying The Algorithm For Computing Quartiles
+
+For an explanation of how each algorithm works, see [Choosing The Algorithm For Computing Quartiles](#choosing-the-algorithm-for-computing-quartiles).
+
+```python
+import plotly.graph_objects as go
+
+data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
+
+fig = go.Figure()
+fig.add_trace(go.Box(y=data, quartilemethod="linear", name="Linear Quartile Mode"))
+fig.add_trace(go.Box(y=data, quartilemethod="inclusive", name="Inclusive Quartile Mode"))
+fig.add_trace(go.Box(y=data, quartilemethod="exclusive", name="Exclusive Quartile Mode"))
+fig.update_traces(boxpoints='all', jitter=0)
+fig.show()
+```
+
+### Box Plot With Precomputed Quartiles
+
+You can specify precomputed quartile attributes rather than using a built-in quartile computation algorithm.
+
+This could be useful if you have already pre-computed those values or if you need to use a different algorithm than the ones provided.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Box(q1=[ 1, 2, 3 ], median=[ 4, 5, 6 ],
+                  q3=[ 7, 8, 9 ], lowerfence=[-1, 0, 1],
+                  upperfence=[7, 8, 9], mean=[ 2.2, 2.8, 3.2 ],
+                  sd=[ 0.2, 0.4, 0.6 ], notchspan=[ 0.2, 0.4, 0.6 ], name="Precompiled Quartiles"))
+
+fig.show()
+```
+
+### Colored Box Plot
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+y0 = np.random.randn(50)
+y1 = np.random.randn(50) + 1 # shift mean
+
+fig = go.Figure()
+fig.add_trace(go.Box(y=y0, name='Sample A',
+                marker_color = 'indianred'))
+fig.add_trace(go.Box(y=y1, name = 'Sample B',
+                marker_color = 'lightseagreen'))
+
+fig.show()
+```
+
+### Box Plot Styling Mean & Standard Deviation
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Box(
+    y=[2.37, 2.16, 4.82, 1.73, 1.04, 0.23, 1.32, 2.91, 0.11, 4.51, 0.51, 3.75, 1.35, 2.98, 4.50, 0.18, 4.66, 1.30, 2.06, 1.19],
+    name='Only Mean',
+    marker_color='darkblue',
+    boxmean=True # represent mean
+))
+fig.add_trace(go.Box(
+    y=[2.37, 2.16, 4.82, 1.73, 1.04, 0.23, 1.32, 2.91, 0.11, 4.51, 0.51, 3.75, 1.35, 2.98, 4.50, 0.18, 4.66, 1.30, 2.06, 1.19],
+    name='Mean & SD',
+    marker_color='royalblue',
+    boxmean='sd' # represent mean and standard deviation
+))
+
+fig.show()
+```
+
+### Styling Outliers
+
+The example below shows how to use the `boxpoints` argument. If "outliers", only the sample points lying outside the whiskers are shown. If "suspectedoutliers", the outlier points are shown and points either less than 4Q1-3Q3 or greater than 4Q3-3Q1 are highlighted (using `outliercolor`). If "all", all sample points are shown. If False, only the boxes are shown with no sample points.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Box(
+    y=[0.75, 5.25, 5.5, 6, 6.2, 6.6, 6.80, 7.0, 7.2, 7.5, 7.5, 7.75, 8.15,
+       8.15, 8.65, 8.93, 9.2, 9.5, 10, 10.25, 11.5, 12, 16, 20.90, 22.3, 23.25],
+    name="All Points",
+    jitter=0.3,
+    pointpos=-1.8,
+    boxpoints='all', # represent all points
+    marker_color='rgb(7,40,89)',
+    line_color='rgb(7,40,89)'
+))
+
+fig.add_trace(go.Box(
+    y=[0.75, 5.25, 5.5, 6, 6.2, 6.6, 6.80, 7.0, 7.2, 7.5, 7.5, 7.75, 8.15,
+        8.15, 8.65, 8.93, 9.2, 9.5, 10, 10.25, 11.5, 12, 16, 20.90, 22.3, 23.25],
+    name="Only Whiskers",
+    boxpoints=False, # no data points
+    marker_color='rgb(9,56,125)',
+    line_color='rgb(9,56,125)'
+))
+
+fig.add_trace(go.Box(
+    y=[0.75, 5.25, 5.5, 6, 6.2, 6.6, 6.80, 7.0, 7.2, 7.5, 7.5, 7.75, 8.15,
+        8.15, 8.65, 8.93, 9.2, 9.5, 10, 10.25, 11.5, 12, 16, 20.90, 22.3, 23.25],
+    name="Suspected Outliers",
+    boxpoints='suspectedoutliers', # only suspected outliers
+    marker=dict(
+        color='rgb(8,81,156)',
+        outliercolor='rgba(219, 64, 82, 0.6)',
+        line=dict(
+            outliercolor='rgba(219, 64, 82, 0.6)',
+            outlierwidth=2)),
+    line_color='rgb(8,81,156)'
+))
+
+fig.add_trace(go.Box(
+    y=[0.75, 5.25, 5.5, 6, 6.2, 6.6, 6.80, 7.0, 7.2, 7.5, 7.5, 7.75, 8.15,
+        8.15, 8.65, 8.93, 9.2, 9.5, 10, 10.25, 11.5, 12, 16, 20.90, 22.3, 23.25],
+    name="Whiskers and Outliers",
+    boxpoints='outliers', # only outliers
+    marker_color='rgb(107,174,214)',
+    line_color='rgb(107,174,214)'
+))
+
+
+fig.update_layout(title_text="Box Plot Styling Outliers")
+fig.show()
+```
+
+### Grouped Box Plots
+
+```python
+import plotly.graph_objects as go
+
+x = ['day 1', 'day 1', 'day 1', 'day 1', 'day 1', 'day 1',
+     'day 2', 'day 2', 'day 2', 'day 2', 'day 2', 'day 2']
+
+fig = go.Figure()
+
+fig.add_trace(go.Box(
+    y=[0.2, 0.2, 0.6, 1.0, 0.5, 0.4, 0.2, 0.7, 0.9, 0.1, 0.5, 0.3],
+    x=x,
+    name='kale',
+    marker_color='#3D9970'
+))
+fig.add_trace(go.Box(
+    y=[0.6, 0.7, 0.3, 0.6, 0.0, 0.5, 0.7, 0.9, 0.5, 0.8, 0.7, 0.2],
+    x=x,
+    name='radishes',
+    marker_color='#FF4136'
+))
+fig.add_trace(go.Box(
+    y=[0.1, 0.3, 0.1, 0.9, 0.6, 0.6, 0.9, 1.0, 0.3, 0.6, 0.8, 0.5],
+    x=x,
+    name='carrots',
+    marker_color='#FF851B'
+))
+
+fig.update_layout(
+    yaxis=dict(
+        title=dict(
+            text='normalized moisture')
+    ),
+    boxmode='group' # group together boxes of the different traces for each value of x
+)
+fig.show()
+```
+
+### Grouped Horizontal Box Plot
+
+```python
+import plotly.graph_objects as go
+
+y = ['day 1', 'day 1', 'day 1', 'day 1', 'day 1', 'day 1',
+     'day 2', 'day 2', 'day 2', 'day 2', 'day 2', 'day 2']
+
+fig = go.Figure()
+fig.add_trace(go.Box(
+    x=[0.2, 0.2, 0.6, 1.0, 0.5, 0.4, 0.2, 0.7, 0.9, 0.1, 0.5, 0.3],
+    y=y,
+    name='kale',
+    marker_color='#3D9970'
+))
+fig.add_trace(go.Box(
+    x=[0.6, 0.7, 0.3, 0.6, 0.0, 0.5, 0.7, 0.9, 0.5, 0.8, 0.7, 0.2],
+    y=y,
+    name='radishes',
+    marker_color='#FF4136'
+))
+fig.add_trace(go.Box(
+    x=[0.1, 0.3, 0.1, 0.9, 0.6, 0.6, 0.9, 1.0, 0.3, 0.6, 0.8, 0.5],
+    y=y,
+    name='carrots',
+    marker_color='#FF851B'
+))
+
+fig.update_layout(
+    xaxis=dict(title=dict(text='normalized moisture'), zeroline=False),
+    boxmode='group'
+)
+
+fig.update_traces(orientation='h') # horizontal box plots
+fig.show()
+```
+
+### Rainbow Box Plots
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+N = 30     # Number of boxes
+
+# generate an array of rainbow colors by fixing the saturation and lightness of the HSL
+# representation of colour and marching around the hue.
+# Plotly accepts any CSS color format, see e.g. http://www.w3schools.com/cssref/css_colors_legal.asp.
+c = ['hsl('+str(h)+',50%'+',50%)' for h in np.linspace(0, 360, N)]
+
+# Each box is represented by a dict that contains the data, the type, and the colour.
+# Use list comprehension to describe N boxes, each with a different colour and with different randomly generated data:
+fig = go.Figure(data=[go.Box(
+    y=3.5 * np.sin(np.pi * i/N) + i/N + (1.5 + 0.5 * np.cos(np.pi*i/N)) * np.random.rand(10),
+    marker_color=c[i]
+    ) for i in range(int(N))])
+
+# format the layout
+fig.update_layout(
+    xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
+    yaxis=dict(zeroline=False, gridcolor='white'),
+    paper_bgcolor='rgb(233,233,233)',
+    plot_bgcolor='rgb(233,233,233)',
+)
+
+fig.show()
+```
+
+### Fully Styled Box Plots
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x_data = ['Carmelo Anthony', 'Dwyane Wade',
+          'Deron Williams', 'Brook Lopez',
+          'Damian Lillard', 'David West',]
+
+N = 50
+
+y0 = (10 * np.random.randn(N) + 30).astype(int)
+y1 = (13 * np.random.randn(N) + 38).astype(int)
+y2 = (11 * np.random.randn(N) + 33).astype(int)
+y3 = (9 * np.random.randn(N) + 36).astype(int)
+y4 = (15 * np.random.randn(N) + 31).astype(int)
+y5 = (12 * np.random.randn(N) + 40).astype(int)
+
+y_data = [y0, y1, y2, y3, y4, y5]
+
+colors = ['rgba(93, 164, 214, 0.5)', 'rgba(255, 144, 14, 0.5)', 'rgba(44, 160, 101, 0.5)',
+          'rgba(255, 65, 54, 0.5)', 'rgba(207, 114, 255, 0.5)', 'rgba(127, 96, 0, 0.5)']
+
+fig = go.Figure()
+
+for xd, yd, cls in zip(x_data, y_data, colors):
+        fig.add_trace(go.Box(
+            y=yd,
+            name=xd,
+            boxpoints='all',
+            jitter=0.5,
+            whiskerwidth=0.2,
+            fillcolor=cls,
+            marker_size=2,
+            line_width=1)
+        )
+
+fig.update_layout(
+    title=dict(text='Points Scored by the Top 9 Scoring NBA Players in 2012'),
+    yaxis=dict(
+        autorange=True,
+        showgrid=True,
+        zeroline=True,
+        dtick=5,
+        gridcolor='rgb(255, 255, 255)',
+        gridwidth=1,
+        zerolinecolor='rgb(255, 255, 255)',
+        zerolinewidth=2,
+    ),
+    margin=dict(
+        l=40,
+        r=30,
+        b=80,
+        t=100,
+    ),
+    paper_bgcolor='rgb(243, 243, 243)',
+    plot_bgcolor='rgb(243, 243, 243)',
+    showlegend=False
+)
+
+fig.show()
+```
+
+### Box Plot With Only Points
+
+A [strip chart](/python/strip-charts/) is like a box plot with points showing, and no box:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.strip(df, x='day', y='tip')
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.box()`](https://plotly.com/python-api-reference/generated/plotly.express.box) or https://plotly.com/python/reference/box/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/bubble-charts.md plotly-7.1.0+dfsg1/doc/python/bubble-charts.md
--- plotly-5.20.0+dfsg/doc/python/bubble-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bubble-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,225 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make bubble charts in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Bubble Charts
+    order: 5
+    page_type: u-guide
+    permalink: python/bubble-charts/
+    redirect_from: python/bubble-charts-tutorial/
+    thumbnail: thumbnail/bubble.jpg
+---
+
+## Bubble chart with plotly.express
+
+A [bubble chart](https://en.wikipedia.org/wiki/Bubble_chart) is a scatter plot in which a third dimension of the data is shown through the size of markers. For other types of scatter plot, see the [scatter plot documentation](https://plotly.com/python/line-and-scatter/).
+
+We first show a bubble chart example using Plotly Express. [Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). The size of markers is set from the dataframe column given as the `size` parameter.
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+
+fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp",
+	         size="pop", color="continent",
+                 hover_name="country", log_x=True, size_max=60)
+fig.show()
+```
+
+## Bubble Chart with plotly.graph_objects
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Scatter` class from `plotly.graph_objects`](/python/graph-objects/), and define the size of markers to create a bubble chart. All of the available options are described in the scatter section of the reference page: https://plotly.com/python/reference#scatter.
+
+### Simple Bubble Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Scatter(
+    x=[1, 2, 3, 4], y=[10, 11, 12, 13],
+    mode='markers',
+    marker_size=[40, 60, 80, 100])
+])
+
+fig.show()
+```
+
+### Setting Marker Size and Color
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Scatter(
+    x=[1, 2, 3, 4], y=[10, 11, 12, 13],
+    mode='markers',
+    marker=dict(
+        color=['rgb(93, 164, 214)', 'rgb(255, 144, 14)',
+               'rgb(44, 160, 101)', 'rgb(255, 65, 54)'],
+        opacity=[1, 0.8, 0.6, 0.4],
+        size=[40, 60, 80, 100],
+    )
+)])
+
+fig.show()
+```
+
+### Scaling the Size of Bubble Charts
+
+To scale the bubble size, use the attribute `sizeref`. We recommend using the following formula to calculate a `sizeref` value:<br>
+`sizeref = 2. * max(array of size values) / (desired maximum marker size ** 2)`<br>
+Note that setting 'sizeref' to a value greater than 1, decreases the rendered marker sizes, while setting 'sizeref' to less than 1, increases the rendered marker sizes. See https://plotly.com/python/reference/scatter/#scatter-marker-sizeref for more information.
+Additionally, we recommend setting the sizemode attribute: https://plotly.com/python/reference/scatter/#scatter-marker-sizemode to area.
+
+```python
+import plotly.graph_objects as go
+
+size = [20, 40, 60, 80, 100, 80, 60, 40, 20, 40]
+fig = go.Figure(data=[go.Scatter(
+    x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+    y=[11, 12, 10, 11, 12, 11, 12, 13, 12, 11],
+    mode='markers',
+    marker=dict(
+        size=size,
+        sizemode='area',
+        sizeref=2.*max(size)/(40.**2),
+        sizemin=4
+    )
+)])
+
+fig.show()
+```
+
+### Hover Text with Bubble Charts
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Scatter(
+    x=[1, 2, 3, 4], y=[10, 11, 12, 13],
+    text=['A<br>size: 40', 'B<br>size: 60', 'C<br>size: 80', 'D<br>size: 100'],
+    mode='markers',
+    marker=dict(
+        color=['rgb(93, 164, 214)', 'rgb(255, 144, 14)',  'rgb(44, 160, 101)', 'rgb(255, 65, 54)'],
+        size=[40, 60, 80, 100],
+    )
+)])
+
+fig.show()
+```
+
+### Bubble Charts with Colorscale
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Scatter(
+    x=[1, 3.2, 5.4, 7.6, 9.8, 12.5],
+    y=[1, 3.2, 5.4, 7.6, 9.8, 12.5],
+    mode='markers',
+    marker=dict(
+        color=[120, 125, 130, 135, 140, 145],
+        size=[15, 30, 55, 70, 90, 110],
+        showscale=True
+        )
+)])
+
+fig.show()
+```
+
+### Categorical Bubble Charts
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+import pandas as pd
+import math
+
+# Load data, define hover text and bubble size
+data = px.data.gapminder()
+df_2007 = data[data['year']==2007]
+df_2007 = df_2007.sort_values(['continent', 'country'])
+
+hover_text = []
+bubble_size = []
+
+for index, row in df_2007.iterrows():
+    hover_text.append(('Country: {country}<br>'+
+                      'Life Expectancy: {lifeExp}<br>'+
+                      'GDP per capita: {gdp}<br>'+
+                      'Population: {pop}<br>'+
+                      'Year: {year}').format(country=row['country'],
+                                            lifeExp=row['lifeExp'],
+                                            gdp=row['gdpPercap'],
+                                            pop=row['pop'],
+                                            year=row['year']))
+    bubble_size.append(math.sqrt(row['pop']))
+
+df_2007['text'] = hover_text
+df_2007['size'] = bubble_size
+sizeref = 2.*max(df_2007['size'])/(100**2)
+
+# Dictionary with dataframes for each continent
+continent_names = ['Africa', 'Americas', 'Asia', 'Europe', 'Oceania']
+continent_data = {continent:df_2007.query("continent == '%s'" %continent)
+                              for continent in continent_names}
+
+# Create figure
+fig = go.Figure()
+
+for continent_name, continent in continent_data.items():
+    fig.add_trace(go.Scatter(
+        x=continent['gdpPercap'], y=continent['lifeExp'],
+        name=continent_name, text=continent['text'],
+        marker_size=continent['size'],
+        ))
+
+# Tune marker appearance and layout
+fig.update_traces(mode='markers', marker=dict(sizemode='area',
+                                              sizeref=sizeref, line_width=2))
+
+fig.update_layout(
+    title=dict(text='Life Expectancy v. Per Capita GDP, 2007'),
+    xaxis=dict(
+        title=dict(text='GDP per capita (2000 dollars)'),
+        gridcolor='white',
+        type='log',
+        gridwidth=2,
+    ),
+    yaxis=dict(
+        title=dict(text='Life Expectancy (years)'),
+        gridcolor='white',
+        gridwidth=2,
+    ),
+    paper_bgcolor='rgb(243, 243, 243)',
+    plot_bgcolor='rgb(243, 243, 243)',
+)
+fig.show()
+```
+
+### Reference
+
+See https://plotly.com/python/reference/scatter/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/bubble-maps.md plotly-7.1.0+dfsg1/doc/python/bubble-maps.md
--- plotly-5.20.0+dfsg/doc/python/bubble-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bubble-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,211 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make bubble maps in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Bubble Maps
+    order: 5
+    page_type: example_index
+    permalink: python/bubble-maps/
+    thumbnail: thumbnail/bubble-map.jpg
+---
+
+#### Base Map Configuration
+
+Plotly figures made with [Plotly Express](/python/plotly-express/) `px.scatter_geo`, `px.line_geo` or `px.choropleth` functions or containing `go.Choropleth` or `go.Scattergeo` [graph objects](/python/graph-objects/) have a `go.layout.Geo` object which can be used to [control the appearance of the base map](/python/map-configuration/) onto which data is plotted.
+
+### Bubble map with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). With `px.scatter_geo`, each line of the dataframe is represented as a marker point. The column set as the `size` argument gives the size of markers.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year==2007")
+fig = px.scatter_geo(df, locations="iso_alpha", color="continent",
+                     hover_name="country", size="pop",
+                     projection="natural earth")
+fig.show()
+```
+
+### Bubble Map with animation
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.scatter_geo(df, locations="iso_alpha", color="continent",
+                     hover_name="country", size="pop",
+                     animation_frame="year",
+                     projection="natural earth")
+fig.show()
+```
+
+### Bubble Map with go.Scattergeo
+
+#### United States Bubble Map
+
+Note about `sizeref`:
+
+To scale the bubble size, use the attribute sizeref. We recommend using the following formula to calculate a sizeref value:
+
+`sizeref = 2. * max(array of size values) / (desired maximum marker size ** 2)`
+
+Note that setting `sizeref` to a value greater than $1$, decreases the rendered marker sizes, while setting `sizeref` to less than $1$, increases the rendered marker sizes.
+
+See https://plotly.com/python/reference/scatter/#scatter-marker-sizeref for more information. Additionally, we recommend setting the sizemode attribute: https://plotly.com/python/reference/scatter/#scatter-marker-sizemode to area.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_us_cities.csv')
+df.head()
+
+df['text'] = df['name'] + '<br>Population ' + (df['pop']/1e6).astype(str)+' million'
+limits = [(0,3),(3,11),(11,21),(21,50),(50,3000)]
+colors = ["royalblue","crimson","lightseagreen","orange","lightgrey"]
+cities = []
+scale = 5000
+
+fig = go.Figure()
+
+for i in range(len(limits)):
+    lim = limits[i]
+    df_sub = df[lim[0]:lim[1]]
+    fig.add_trace(go.Scattergeo(
+        locationmode = 'USA-states',
+        lon = df_sub['lon'],
+        lat = df_sub['lat'],
+        text = df_sub['text'],
+        marker = dict(
+            size = df_sub['pop']/scale,
+            color = colors[i],
+            line_color='rgb(40,40,40)',
+            line_width=0.5,
+            sizemode = 'area'
+        ),
+        name = '{0} - {1}'.format(lim[0],lim[1])))
+
+fig.update_layout(
+        title_text = '2014 US city populations<br>(Click legend to toggle traces)',
+        showlegend = True,
+        geo = dict(
+            scope = 'usa',
+            landcolor = 'rgb(217, 217, 217)',
+        )
+    )
+
+fig.show()
+```
+
+#### Ebola Cases in West Africa
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_ebola.csv')
+df.head()
+
+colors = ['rgb(239,243,255)','rgb(189,215,231)','rgb(107,174,214)','rgb(33,113,181)']
+months = {6:'June',7:'July',8:'Aug',9:'Sept'}
+
+fig = go.Figure()
+
+for i in range(6,10)[::-1]:
+    df_month = df.query('Month == %d' %i)
+    fig.add_trace(go.Scattergeo(
+            lon = df_month['Lon'],
+            lat = df_month['Lat'],
+            text = df_month['Value'],
+            name = months[i],
+            marker = dict(
+                size = df_month['Value']/50,
+                color = colors[i-6],
+                line_width = 0
+            )))
+
+df_sept = df.query('Month == 9')
+fig['data'][0].update(mode='markers+text', textposition='bottom center',
+                      text=df_sept['Value'].map('{:.0f}'.format).astype(str)+' '+\
+                      df_sept['Country'])
+
+# Inset
+fig.add_trace(go.Choropleth(
+        locationmode = 'country names',
+        locations = df_sept['Country'],
+        z = df_sept['Value'],
+        text = df_sept['Country'],
+        colorscale = [[0,'rgb(0, 0, 0)'],[1,'rgb(0, 0, 0)']],
+        autocolorscale = False,
+        showscale = False,
+        geo = 'geo2'
+    ))
+fig.add_trace(go.Scattergeo(
+        lon = [21.0936],
+        lat = [7.1881],
+        text = ['Africa'],
+        mode = 'text',
+        showlegend = False,
+        geo = 'geo2'
+    ))
+
+fig.update_layout(
+    title = go.layout.Title(
+        text = 'Ebola cases reported by month in West Africa 2014<br> \
+Source: <a href="https://data.hdx.rwlabs.org/dataset/rowca-ebola-cases">\
+HDX</a>'),
+    geo = go.layout.Geo(
+        resolution = 50,
+        scope = 'africa',
+        showframe = False,
+        showcoastlines = True,
+        landcolor = "rgb(229, 229, 229)",
+        countrycolor = "white" ,
+        coastlinecolor = "white",
+        projection_type = 'mercator',
+        lonaxis_range= [ -15.0, -5.0 ],
+        lataxis_range= [ 0.0, 12.0 ],
+        domain = dict(x = [ 0, 1 ], y = [ 0, 1 ])
+    ),
+    geo2 = go.layout.Geo(
+        scope = 'africa',
+        showframe = False,
+        landcolor = "rgb(229, 229, 229)",
+        showcountries = False,
+        domain = dict(x = [ 0, 0.6 ], y = [ 0, 0.6 ]),
+        bgcolor = 'rgba(255, 255, 255, 0.0)',
+    ),
+    legend_traceorder = 'reversed'
+)
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.scatter_geo`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_geo) or https://plotly.com/python/reference/scattergeo/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/builtin-colorscales.md plotly-7.1.0+dfsg1/doc/python/builtin-colorscales.md
--- plotly-5.20.0+dfsg/doc/python/builtin-colorscales.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/builtin-colorscales.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,143 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: A reference for the built-in named continuous (sequential, diverging
+      and cyclical) color scales in Plotly.
+    display_as: file_settings
+    has_thumbnail: true
+    ipynb: ~notebook_demo/187
+    language: python
+    layout: base
+    name: Built-in Continuous Color Scales
+    order: 29
+    permalink: python/builtin-colorscales/
+    thumbnail: thumbnail/heatmap_colorscale.jpg
+    v4upgrade: true
+---
+
+### Using Built-In Continuous Color Scales
+
+Many Plotly Express functions accept a `color_continuous_scale` argument and many trace
+types have a `colorscale` attribute in their schema. Plotly comes with a large number of
+built-in continuous color scales, which can be referred to in Python code when setting the above arguments,
+either by name in a case-insensitive string e.g. `px.scatter(color_continuous_scale="Viridis"`) or by reference e.g.
+`go.Scatter(marker_colorscale=plotly.colors.sequential.Viridis)`. They can also be reversed by adding `_r` at the end
+e.g. `"Viridis_r"` or `plotly.colors.sequential.Viridis_r`.
+
+The `plotly.colours` module is also available under `plotly.express.colors` so you can refer to it as `px.colors`.
+
+When using continuous color scales, you will often want to [configure various aspects of its range and colorbar](/python/colorscales/).
+
+### Discrete Color Sequences
+
+Plotly also comes with some built-in [discrete color sequences](/python/discrete-color/) which are _not intended_ to be used with the `color_continuous_scale` argument as they are not designed for interpolation to occur between adjacent colors.
+
+### Named Built-In Continuous Color Scales
+
+You can use any of the following names as string values to set `continuous_color_scale` or `colorscale` arguments.
+These strings are case-insensitive and you can append `_r` to them to reverse the order of the scale.
+
+```python
+import plotly.express as px
+from textwrap import wrap
+
+named_colorscales = px.colors.named_colorscales()
+print("
".join(wrap("".join('{:<12}'.format(c) for c in named_colorscales), 96)))
+```
+
+Built-in color scales are stored as lists of CSS colors:
+
+```python
+import plotly.express as px
+
+print(px.colors.sequential.Plasma)
+```
+
+### Continuous Color Scales in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'builtin-colorscales', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Built-In Sequential Color scales
+
+A collection of predefined sequential colorscales is provided in the `plotly.colors.sequential` module. Sequential color scales are appropriate for most continuous data, but in some cases it can be helpful to use a diverging or cyclical color scale (see below).
+
+Here are all the built-in scales in the `plotly.colors.sequential` module:
+
+```python
+import plotly.express as px
+
+fig = px.colors.sequential.swatches_continuous()
+fig.show()
+```
+
+Note: `RdBu` was included in the `sequential` module by mistake, even though it is a diverging color scale.
+It is intentionally left in for backwards-compatibility reasons.
+
+### Built-In Diverging Color scales
+
+A collection of predefined diverging color scales is provided in the `plotly.colors.diverging` module.
+Diverging color scales are appropriate for continuous data that has a natural midpoint
+other otherwise informative special value, such as 0 altitude, or the boiling point
+of a liquid. These scales are intended to be used when [explicitly setting the midpoint of the scale](/python/colorscales/#setting-the-midpoint-of-a-color-range-for-a-diverging-color-scale).
+
+Here are all the built-in scales in the `plotly.colors.diverging` module:
+
+```python
+import plotly.express as px
+
+fig = px.colors.diverging.swatches_continuous()
+fig.show()
+```
+
+### Built-In Cyclical Color scales
+
+A collection of predefined cyclical color scales is provided in the `plotly.colors.cyclical` module.
+Cyclical color scales are appropriate for continuous data that has a natural cyclical
+structure, such as temporal data (hour of day, day of week, day of year, seasons) or
+complex numbers or other phase or angular data.
+
+Here are all the built-in scales in the `plotly.colors.cyclical` module:
+
+```python
+import plotly.express as px
+
+fig = px.colors.cyclical.swatches_cyclical()
+fig.show()
+
+fig = px.colors.cyclical.swatches_continuous()
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/bullet-charts.md plotly-7.1.0+dfsg1/doc/python/bullet-charts.md
--- plotly-5.20.0+dfsg/doc/python/bullet-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/bullet-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,174 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.2.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make bullet charts in Python with Plotly.
+    display_as: financial
+    language: python
+    layout: base
+    name: Bullet Charts
+    order: 8
+    page_type: u-guide
+    permalink: python/bullet-charts/
+    thumbnail: thumbnail/bullet.png
+---
+
+#### Basic Bullet Charts
+Stephen Few's Bullet Chart was invented to replace dashboard [gauges](https://plotly.com/python/gauge-charts/) and meters, combining both types of charts into simple bar charts with qualitative bars (steps), quantitative bar (bar) and performance line (threshold); all into one simple layout.
+  Steps typically are broken into several values, which are defined with an array. The bar represent the actual value that a particular variable reached, and the threshold usually indicate a goal point relative to the value achieved by the bar. See [indicator page](https://plotly.com/python/gauge-charts/) for more detail.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+gauge+delta",
+    gauge = {'shape': "bullet"},
+    value = 220,
+    delta = {'reference': 300},
+    domain = {'x': [0, 1], 'y': [0, 1]},
+    title = {'text': "Profit"}))
+fig.update_layout(height = 250)
+
+fig.show()
+```
+
+#### Add Steps, and Threshold
+Below is the same example using "steps" attribute, which is shown as shading, and "threshold" to determine boundaries that visually alert you if the value cross a defined threshold.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+gauge+delta", value = 220,
+    domain = {'x': [0.1, 1], 'y': [0, 1]},
+    title = {'text' :"<b>Profit</b>"},
+    delta = {'reference': 200},
+    gauge = {
+        'shape': "bullet",
+        'axis': {'range': [None, 300]},
+        'threshold': {
+            'line': {'color': "red", 'width': 2},
+            'thickness': 0.75,
+            'value': 280},
+        'steps': [
+            {'range': [0, 150], 'color': "lightgray"},
+            {'range': [150, 250], 'color': "gray"}]}))
+fig.update_layout(height = 250)
+fig.show()
+```
+
+#### Custom Bullet
+The following example shows how to customize your charts. For more information about all possible options check our [reference page](https://plotly.com/python/reference/indicator/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+gauge+delta", value = 220,
+    domain = {'x': [0, 1], 'y': [0, 1]},
+    delta = {'reference': 280, 'position': "top"},
+    title = {'text':"<b>Profit</b><br><span style='color: gray; font-size:0.8em'>U.S. $</span>", 'font': {"size": 14}},
+    gauge = {
+        'shape': "bullet",
+        'axis': {'range': [None, 300]},
+        'threshold': {
+            'line': {'color': "red", 'width': 2},
+            'thickness': 0.75, 'value': 270},
+        'bgcolor': "white",
+        'steps': [
+            {'range': [0, 150], 'color': "cyan"},
+            {'range': [150, 250], 'color': "royalblue"}],
+        'bar': {'color': "darkblue"}}))
+fig.update_layout(height = 250)
+fig.show()
+```
+
+#### Multi Bullet
+Bullet charts can be stacked for comparing several values at once as illustrated below:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Indicator(
+    mode = "number+gauge+delta", value = 180,
+    delta = {'reference': 200},
+    domain = {'x': [0.25, 1], 'y': [0.08, 0.25]},
+    title = {'text': "Revenue"},
+    gauge = {
+        'shape': "bullet",
+        'axis': {'range': [None, 300]},
+        'threshold': {
+            'line': {'color': "black", 'width': 2},
+            'thickness': 0.75,
+            'value': 170},
+        'steps': [
+            {'range': [0, 150], 'color': "gray"},
+            {'range': [150, 250], 'color': "lightgray"}],
+        'bar': {'color': "black"}}))
+
+fig.add_trace(go.Indicator(
+    mode = "number+gauge+delta", value = 35,
+    delta = {'reference': 200},
+    domain = {'x': [0.25, 1], 'y': [0.4, 0.6]},
+    title = {'text': "Profit"},
+    gauge = {
+        'shape': "bullet",
+        'axis': {'range': [None, 100]},
+        'threshold': {
+            'line': {'color': "black", 'width': 2},
+            'thickness': 0.75,
+            'value': 50},
+        'steps': [
+            {'range': [0, 25], 'color': "gray"},
+            {'range': [25, 75], 'color': "lightgray"}],
+        'bar': {'color': "black"}}))
+
+fig.add_trace(go.Indicator(
+    mode = "number+gauge+delta", value = 220,
+    delta = {'reference': 200},
+    domain = {'x': [0.25, 1], 'y': [0.7, 0.9]},
+    title = {'text' :"Satisfaction"},
+    gauge = {
+        'shape': "bullet",
+        'axis': {'range': [None, 300]},
+        'threshold': {
+            'line': {'color': "black", 'width': 2},
+            'thickness': 0.75,
+            'value': 210},
+        'steps': [
+            {'range': [0, 150], 'color': "gray"},
+            {'range': [150, 250], 'color': "lightgray"}],
+        'bar': {'color': "black"}}))
+fig.update_layout(height = 400 , margin = {'t':0, 'b':0, 'l':0})
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/indicator/ for more information and chart attribute options!
+
+```python
+
+```
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/candlestick-charts.md plotly-7.1.0+dfsg1/doc/python/candlestick-charts.md
--- plotly-5.20.0+dfsg/doc/python/candlestick-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/candlestick-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,168 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make interactive candlestick charts in Python with Plotly.
+      Six examples of candlestick charts with Pandas, time series, and yahoo finance
+      data.
+    display_as: financial
+    language: python
+    layout: base
+    name: Candlestick Charts
+    order: 2
+    page_type: example_index
+    permalink: python/candlestick-charts/
+    thumbnail: thumbnail/candlestick.jpg
+---
+
+The [candlestick chart](https://en.wikipedia.org/wiki/Candlestick_chart) is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely
+time). The boxes represent the spread between the `open` and `close` values and the lines represent the spread between the `low` and `high` values. Sample points where the close value is higher (lower) then the open value are called increasing (decreasing). By default, increasing candles are drawn in green whereas decreasing are drawn in red.
+
+#### Simple Candlestick with Pandas
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+from datetime import datetime
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=[go.Candlestick(x=df['Date'],
+                open=df['AAPL.Open'],
+                high=df['AAPL.High'],
+                low=df['AAPL.Low'],
+                close=df['AAPL.Close'])])
+
+fig.show()
+```
+
+#### Candlestick without Rangeslider
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=[go.Candlestick(x=df['Date'],
+                open=df['AAPL.Open'], high=df['AAPL.High'],
+                low=df['AAPL.Low'], close=df['AAPL.Close'])
+                     ])
+
+fig.update_layout(xaxis_rangeslider_visible=False)
+fig.show()
+```
+
+#### Candlestick in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'candlestick-charts', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Adding Customized Text and Annotations
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=[go.Candlestick(x=df['Date'],
+                open=df['AAPL.Open'], high=df['AAPL.High'],
+                low=df['AAPL.Low'], close=df['AAPL.Close'])
+                      ])
+
+fig.update_layout(
+    title=dict(text='The Great Recession'),
+    yaxis=dict(
+      title=dict(
+        text='AAPL Stock'
+        )
+    ),
+    shapes = [dict(
+        x0='2016-12-09', x1='2016-12-09', y0=0, y1=1, xref='x', yref='paper',
+        line_width=2)],
+    annotations=[dict(
+        x='2016-12-09', y=0.05, xref='x', yref='paper',
+        showarrow=False, xanchor='left', text='Increase Period Begins')]
+)
+
+fig.show()
+```
+
+#### Custom Candlestick Colors
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=[go.Candlestick(
+    x=df['Date'],
+    open=df['AAPL.Open'], high=df['AAPL.High'],
+    low=df['AAPL.Low'], close=df['AAPL.Close'],
+    increasing_line_color= 'cyan', decreasing_line_color= 'gray'
+)])
+
+fig.show()
+```
+
+#### Simple Example with `datetime` Objects
+
+```python
+import plotly.graph_objects as go
+from datetime import datetime
+
+open_data = [33.0, 33.3, 33.5, 33.0, 34.1]
+high_data = [33.1, 33.3, 33.6, 33.2, 34.8]
+low_data = [32.7, 32.7, 32.8, 32.6, 32.8]
+close_data = [33.0, 32.9, 33.3, 33.1, 33.1]
+dates = [datetime(year=2013, month=10, day=10),
+         datetime(year=2013, month=11, day=10),
+         datetime(year=2013, month=12, day=10),
+         datetime(year=2014, month=1, day=10),
+         datetime(year=2014, month=2, day=10)]
+
+fig = go.Figure(data=[go.Candlestick(x=dates,
+                       open=open_data, high=high_data,
+                       low=low_data, close=close_data)])
+
+fig.show()
+```
+
+#### Reference
+For more information on candlestick attributes, see: https://plotly.com/python/reference/candlestick/
diff -Nru plotly-5.20.0+dfsg/doc/python/carpet-contour.md plotly-7.1.0+dfsg1/doc/python/carpet-contour.md
--- plotly-5.20.0+dfsg/doc/python/carpet-contour.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/carpet-contour.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,290 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernel_info:
+    name: python2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to make carpet contour plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Carpet Contour Plot
+    order: 14
+    page_type: u-guide
+    permalink: python/carpet-contour/
+    thumbnail: thumbnail/contourcarpet.jpg
+---
+
+### Basic Carpet Plot
+
+Set the `x` and `y` coordinates, using `x` and `y` attributes. If `x` coordinate values are omitted a cheater plot will be created. To save parameter values use `a` and `b` attributes. To make changes to the axes, use `aaxis` or `baxis` attributes. For a more detailed list of axes attributes refer to [python reference](https://plotly.com/python/reference/carpet/#carpet-aaxis).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
+    b = [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
+    x = [2, 3, 4, 5, 2.2, 3.1, 4.1, 5.1, 1.5, 2.5, 3.5, 4.5],
+    y = [1, 1.4, 1.6, 1.75, 2, 2.5, 2.7, 2.75, 3, 3.5, 3.7, 3.75],
+    aaxis = dict(
+        tickprefix = 'a = ',
+        smoothing = 0,
+        minorgridcount = 9,
+        type = 'linear'
+    ),
+    baxis = dict(
+        tickprefix = 'b = ',
+        smoothing = 0,
+        minorgridcount = 9,
+        type = 'linear'
+    )
+))
+
+fig.show()
+```
+
+### Add Contours
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Contourcarpet(
+    a = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
+    b = [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
+    z = [1, 1.96, 2.56, 3.0625, 4, 5.0625, 1, 7.5625, 9, 12.25, 15.21, 14.0625],
+    autocontour = False,
+    contours = dict(
+        start = 1,
+        end = 14,
+        size = 1
+    ),
+    line = dict(
+        width = 2,
+        smoothing = 0
+    ),
+    colorbar = dict(
+       len = 0.4,
+        y = 0.25
+    )
+))
+
+fig.add_trace(go.Carpet(
+    a = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
+    b = [4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6],
+    x = [2, 3, 4, 5, 2.2, 3.1, 4.1, 5.1, 1.5, 2.5, 3.5, 4.5],
+    y = [1, 1.4, 1.6, 1.75, 2, 2.5, 2.7, 2.75, 3, 3.5, 3.7, 3.75],
+    aaxis = dict(
+        tickprefix = 'a = ',
+        smoothing = 0,
+        minorgridcount = 9,
+        type = 'linear'
+    ),
+    baxis = dict(
+        tickprefix = 'b = ',
+        smoothing = 0,
+        minorgridcount = 9,
+        type = 'linear'
+    )
+))
+
+fig.show()
+```
+
+### Add Multiple Traces
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+import json
+from urllib.request import urlopen
+
+url = "https://raw.githubusercontent.com/bcdunbar/datasets/master/airfoil_data.json"
+data = json.load(urlopen(url))
+
+
+fig=go.Figure()
+
+fig.add_trace(go.Carpet(
+    a = data[0]['a'],
+    b = data[0]['b'],
+    x = data[0]['x'],
+    y = data[0]['y'],
+    baxis = dict(
+      startline = False,
+      endline = False,
+      showticklabels = "none",
+      smoothing = 0,
+      showgrid = False
+    ),
+    aaxis = dict(
+      startlinewidth = 2,
+      startline = True,
+      showticklabels = "none",
+      endline = True,
+      showgrid = False,
+      endlinewidth = 2,
+      smoothing = 0
+    )
+))
+
+fig.add_trace(go.Contourcarpet(
+    z = data[1]['z'],
+    autocolorscale = False,
+    zmax = 1,
+    name = "Pressure",
+    colorscale = "Viridis",
+    zmin = -8,
+    colorbar = dict(
+      y = 0,
+      yanchor = "bottom",
+      len = 0.75,
+      title = dict(
+        text="Pressure coefficient, c<sub>p</sub>",
+        side="right")
+    ),
+    contours = dict(
+      start = -1,
+      size = 0.025,
+      end = 1.000,
+      showlines = False
+    ),
+    line = dict(
+      smoothing = 0
+    ),
+    autocontour = False,
+    zauto = False
+))
+
+fig.add_trace(go.Contourcarpet(
+    z = data[2]['z'],
+    opacity = 0.300,
+    showlegend = True,
+    name = "Streamlines",
+    autocontour = True,
+    ncontours = 50,
+    contours = dict(
+      coloring = "none"
+    ),
+    line = dict(
+      color = "white",
+      width = 1
+    )
+))
+
+fig.add_trace(go.Contourcarpet(
+    z = data[3]['z'],
+    showlegend = True,
+    name = "Pressure<br>contours",
+    autocontour = False,
+    line = dict(
+        color = "rgba(0, 0, 0, 0.5)",
+        smoothing = 1
+    ),
+    contours = dict(
+        size = 0.250,
+        start = -4,
+        coloring = "none",
+        end = 1.000,
+        showlines = True
+      )
+))
+
+fig.add_trace(go.Scatter(
+    x = data[4]['x'],
+    y = data[4]['y'],
+    legendgroup = "g1",
+    name = "Surface<br>pressure",
+    mode = "lines",
+    hoverinfo = "skip",
+    line = dict(
+      color = "rgba(255, 0, 0, 0.5)",
+      width = 1,
+      shape = "spline",
+      smoothing = 1
+    ),
+    fill = "toself",
+    fillcolor = "rgba(255, 0, 0, 0.2)"
+))
+
+fig.add_trace(go.Scatter(
+    x = data[5]['x'],
+    y = data[5]['y'],
+    showlegend = False,
+    legendgroup = "g1",
+    mode = "lines",
+    hoverinfo = "skip",
+    line = dict(
+      color = "rgba(255, 0, 0, 0.3)",
+      width = 1
+    )
+))
+
+fig.add_trace(go.Scatter(
+    x = data[6]['x'],
+    y = data[6]['y'],
+    showlegend = False,
+    legendgroup = "g1",
+    name = "cp",
+    text = data[6]['text'],
+    hoverinfo = "text",
+    mode = "lines",
+    line = dict(
+      color = "rgba(255, 0, 0, 0.2)",
+      width = 0
+    )
+))
+
+fig.update_layout(
+    yaxis = dict(
+      zeroline = False,
+      range = [-1.800,1.800],
+      showgrid = False
+    ),
+    dragmode = "pan",
+    height = 700,
+    xaxis = dict(
+      zeroline = False,
+      scaleratio = 1,
+      scaleanchor = 'y',
+      range = [-3.800,3.800],
+      showgrid = False
+    ),
+    title = "Flow over a Karman-Trefftz airfoil",
+    hovermode = "closest",
+    margin = dict(
+      r = 60,
+      b = 40,
+      l = 40,
+      t = 80
+    ),
+    width = 900
+)
+
+fig.show()
+```
+
+### Reference
+
+See https://plotly.com/python/reference/contourcarpet/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/carpet-plot.md plotly-7.1.0+dfsg1/doc/python/carpet-plot.md
--- plotly-5.20.0+dfsg/doc/python/carpet-plot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/carpet-plot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,192 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernel_info:
+    name: python3
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to make carpet plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Carpet Plots
+    order: 13
+    page_type: u-guide
+    permalink: python/carpet-plot/
+    thumbnail: thumbnail/carpet.jpg
+---
+
+<!-- #region -->
+### Set X and Y Coordinates
+
+
+To set the `x` and `y` coordinates use `x` and `y` attributes. If `x` coordinate values are omitted a cheater plot will be created. The plot below has a `y` array specified but requires `a` and `b` parameter values before an axis may be plotted.
+<!-- #endregion -->
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    y = [2, 3.5, 4, 3, 4.5, 5, 5.5, 6.5, 7.5, 8, 8.5, 10]
+))
+
+fig.show()
+```
+
+### Add Parameter Values
+
+To save parameter values use the `a` and `b` attributes.
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [4, 4, 4, 4.5, 4.5, 4.5, 5, 5, 5, 6, 6, 6],
+    b = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+    y = [2, 3.5, 4, 3, 4.5, 5, 5.5, 6.5, 7.5, 8, 8.5, 10]
+))
+
+fig.show()
+```
+
+### Add A and B axis
+
+Use `aaxis` or `baxis` list to make changes to the axes. For a more detailed list of attributes refer to [R reference](https://plotly.com/r/reference/carpet/#carpet-aaxis).
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [4, 4, 4, 4.5, 4.5, 4.5, 5, 5, 5, 6, 6, 6],
+    b = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+    y = [2, 3.5, 4, 3, 4.5, 5, 5.5, 6.5, 7.5, 8, 8.5, 10],
+    aaxis = dict(
+        tickprefix = 'a = ',
+        ticksuffix = 'm',
+        smoothing = 1,
+        minorgridcount = 9,
+    ),
+    baxis = dict(
+        tickprefix = 'b = ',
+        ticksuffix = 'pa',
+        smoothing = 1,
+        minorgridcount = 9,
+    )
+))
+
+fig.show()
+```
+
+### Alternate input format
+
+The data arrays `x`, `y` may either be specified as one-dimensional arrays of data or as arrays of arrays. If one-dimensional, then `x`, `y`, `a`, and `b` should all be the same length. If `x` and `y` are arrays of arrays, then the length of `a` should match the inner dimension and the length of `b` the outer dimension. The plot below represents the same plot as those above.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [4, 4.5, 5, 6],
+    b = [1, 2, 3],
+    y = [[2, 3, 5.5, 8],
+         [3.5, 4.5, 6.5, 8.5],
+         [4, 5, 7.5, 10]]
+))
+
+fig.show()
+```
+
+### Cheater plot layout
+
+
+The layout of cheater plots is not unique and depends upon the `cheaterslope` and axis `cheatertype` parameters. If `x` is not specified, each row of the `x` array is constructed based on the formula `a + cheaterslope * b`, where `a` and `b` are either the value or the integer index of `a` and `b` respectively, depending on the corresponding axis `cheatertype`. Although the layout of the axis below is different than the plots above, it represents the same data as the axes above.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [4, 4.5, 5, 6],
+    b = [1, 2, 3],
+    y = [[2, 3, 5.5, 8],
+         [3.5, 4.5, 6.5, 8.5],
+         [4, 5, 7.5, 10]],
+    cheaterslope = -5,
+    aaxis = dict(cheatertype = 'index'),
+    baxis = dict(cheatertype = 'value')
+))
+
+fig.show()
+```
+
+### Style A and B axis
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [4, 4, 4, 4.5, 4.5, 4.5, 5, 5, 5, 6, 6, 6],
+    b = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+    y = [2, 3.5, 4, 3, 4.5, 5, 5.5, 6.5, 7.5, 8, 8.5, 10],
+    aaxis = dict(
+        tickprefix = 'a = ',
+        ticksuffix = 'm',
+        smoothing = 1,
+        minorgridcount = 9,
+        minorgridwidth = 0.6,
+        minorgridcolor = 'white',
+        gridcolor = 'white',
+        color = 'white'
+    ),
+    baxis = dict(
+        ticksuffix = 'Pa',
+        smoothing = 1,
+        minorgridcount = 9,
+        minorgridwidth = 0.6,
+        gridcolor = 'white',
+        minorgridcolor = 'white',
+        color = 'white'
+    )
+))
+
+fig.update_layout(
+    plot_bgcolor = 'black',
+    paper_bgcolor = 'black',
+    xaxis = dict(
+        showgrid = False,
+        showticklabels = False
+    ),
+    yaxis = dict(
+        showgrid = False,
+        showticklabels = False
+    )
+)
+
+fig.show()
+```
+
+### Add Points and Contours
+
+To add points and lines see [Carpet Scatter Plots](https://plotly.com/python/carpet-scatter) or to add contours see [Carpet Contour Plots](https://plotly.com/python/carpet-contour)
+
+
+### Reference
+
+See https://plotly.com/python/reference/carpet/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/carpet-scatter.md plotly-7.1.0+dfsg1/doc/python/carpet-scatter.md
--- plotly-5.20.0+dfsg/doc/python/carpet-scatter.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/carpet-scatter.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,189 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernel_info:
+    name: python3
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to make carpet scatter plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Carpet Scatter Plot
+    order: 15
+    page_type: u-guide
+    permalink: python/carpet-scatter/
+    thumbnail: thumbnail/scattercarpet.jpg
+---
+
+### Basic Carpet Plot
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Carpet(
+    a = [4, 4, 4, 4.5, 4.5, 4.5, 5, 5, 5, 6, 6, 6],
+    b = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+    y = [2, 3.5, 4, 3, 4.5, 5, 5.5, 6.5, 7.5, 8, 8.5, 10],
+    aaxis = dict(
+      tickprefix = 'a = ',
+      ticksuffix = 'm',
+      smoothing = 1,
+      minorgridcount = 9
+      ),
+    baxis = dict(
+      tickprefix = 'b = ',
+      ticksuffix = 'Pa',
+      smoothing = 1,
+      minorgridcount = 9
+      )
+))
+
+fig.show()
+```
+
+### Add Carpet Scatter Trace
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Carpet(
+    a = [4, 4, 4, 4.5, 4.5, 4.5, 5, 5, 5, 6, 6, 6],
+    b = [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+    y = [2, 3.5, 4, 3, 4.5, 5, 5.5, 6.5, 7.5, 8, 8.5, 10],
+    aaxis = dict(
+      tickprefix = 'a = ',
+      ticksuffix = 'm',
+      smoothing = 1,
+      minorgridcount = 9
+      ),
+    baxis = dict(
+      tickprefix = 'b = ',
+      ticksuffix = 'Pa',
+      smoothing = 1,
+      minorgridcount = 9
+      )
+))
+
+fig.add_trace(go.Scattercarpet(
+    a = [4, 4.5, 5, 6],
+    b = [2.5, 2.5, 2.5, 2.5],
+    line = dict(
+      shape = 'spline',
+      smoothing = 1,
+      color = 'blue'
+    )
+))
+
+fig.show()
+```
+
+### Add Multiple Scatter Traces
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Carpet(
+    a = [0.1,0.2,0.3],
+    b = [1,2,3],
+    y = [[1,2.2,3],[1.5,2.7,3.5],[1.7,2.9,3.7]],
+    cheaterslope = 1,
+    aaxis = dict(
+        title = "a",
+        tickmode = "linear",
+        dtick = 0.05
+    ),
+    baxis = dict(
+        title = "b",
+        tickmode = "linear",
+        dtick = 0.05
+    )
+))
+
+fig.add_trace(go.Scattercarpet(
+    name = "b = 1.5",
+    a = [0.05, 0.15, 0.25, 0.35],
+    b = [1.5, 1.5, 1.5, 1.5]
+))
+
+fig.add_trace(go.Scattercarpet(
+    name = "b = 2",
+    a = [0.05, 0.15, 0.25, 0.35],
+    b = [2, 2, 2, 2]
+))
+
+fig.add_trace(go.Scattercarpet(
+    name = "b = 2.5",
+    a = [0.05, 0.15, 0.25, 0.35],
+    b = [2.5, 2.5, 2.5, 2.5]
+))
+
+fig.add_trace(go.Scattercarpet(
+    name = "a = 0.15",
+    a = [0.15, 0.15, 0.15, 0.15],
+    b = [0.5, 1.5, 2.5, 3.5],
+    line = dict(
+        smoothing = 1,
+        shape = "spline"
+    )
+))
+
+fig.add_trace(go.Scattercarpet(
+    name = "a = 0.2",
+    a = [0.2, 0.2, 0.2, 0.2],
+    b = [0.5, 1.5, 2.5, 3.5],
+    line = dict(
+        smoothing = 1,
+        shape = "spline"
+    ),
+      marker = dict(
+        size = [10, 20, 30, 40],
+        color = ["#000", "#f00", "#ff0", "#fff"]
+      )
+))
+
+fig.add_trace(go.Scattercarpet(
+    name = "a = 0.25",
+    a = [0.25, 0.25, 0.25, 0.25],
+    b = [0.5, 1.5, 2.5, 3.5],
+    line = dict(
+        smoothing = 1,
+        shape = "spline"
+    )
+))
+
+fig.update_layout(
+    title = "scattercarpet extrapolation, clipping, and smoothing",
+    hovermode = "closest"
+)
+
+fig.show()
+```
+
+### Reference
+
+
+See https://plotly.com/python/reference/scattercarpet/ for more information and chart attribute options!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/categorical-axes.md plotly-7.1.0+dfsg1/doc/python/categorical-axes.md
--- plotly-5.20.0+dfsg/doc/python/categorical-axes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/categorical-axes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,222 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to use categorical axes in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Categorical Axes
+    order: 16
+    page_type: example_index
+    permalink: python/categorical-axes/
+    thumbnail: thumbnail/bar.jpg
+---
+
+
+This page shows examples of how to configure [2-dimensional Cartesian axes](/python/figure-structure/#2d-cartesian-trace-types-and-subplots) to visualize categorical (i.e. qualitative, nominal or ordinal data as opposed to continuous numerical data). Such axes are a natural fit for bar charts, waterfall charts, funnel charts, heatmaps, violin charts and box plots, but can also be used with scatter plots and line charts. [Configuring gridlines, ticks, tick labels and axis titles](/python/axes/) on logarithmic axes is done the same was as with [linear axes](/python/axes/).
+
+### 2-D Cartesian Axis Type and Auto-Detection
+
+The different types of Cartesian axes are configured via the `xaxis.type` or `yaxis.type` attribute, which can take on the following values:
+
+- `'linear'` (see the [linear axes tutorial](/python/axes/))
+- `'log'` (see the [log plot tutorial](/python/log-plot/))
+- `'date'` (see the [tutorial on timeseries](/python/time-series/))
+- `'category'` see below
+- `'multicategory'` see below
+
+The axis type is auto-detected by looking at data from the first [trace](/python/figure-structure/) linked to this axis:
+
+* First check for `multicategory`, then `date`, then `category`, else default to `linear` (`log` is never automatically selected)
+* `multicategory` is just a shape test: is the array nested?
+* `date` and `category`: require **more than twice as many distinct date or category strings as distinct numbers** in order to choose that axis type.
+	* Both of these test an evenly-spaced sample of at most 1000 values
+
+### Forcing an axis to be categorical
+
+It is possible to force the axis type by setting explicitly `xaxis_type`. In the example below the automatic X axis type would be `linear` (because there are not more than twice as many unique strings as unique numbers) but we force it to be `category`.
+
+```python
+import plotly.express as px
+fig = px.bar(x=["a", "a", "b", 3], y = [1,2,3,4])
+fig.update_xaxes(type='category')
+fig.show()
+```
+
+### Categorical Axes and Trace Types
+
+Every cartesian trace type is compatible with categorical axes, not just `bar`.
+
+Scatter plots where one axis is categorical are often known as [dot plots](https://plotly.com/python/dot-plots/).
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.scatter(df, y="nation", x="count", color="medal", symbol="medal")
+fig.update_traces(marker_size=10)
+fig.show()
+```
+
+[Box plots](/python/box-plots/) and [violin plots](/python/violin/) are often shown with one categorical and one continuous axis.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.box(df, x="sex", y="total_bill", color="smoker")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+
+fig = px.violin(df, x="sex", y="total_bill", color="smoker")
+fig.show()
+```
+
+### Controlling the Category Order with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+By default, Plotly Express lays out categorical data in the order in which it appears in the underlying data. Every 2-d cartesian Plotly Express function also includes a `category_orders` keyword argument which can be used to control the order in which categorical axes are drawn, but beyond that can also control [the order in which discrete colors appear in the legend](/python/discrete-color/), and [the order in which facets are laid out](/python/facet-plots/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="day", y="total_bill", color="smoker", barmode="group", facet_col="sex",
+             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"],
+                              "smoker": ["Yes", "No"],
+                              "sex": ["Male", "Female"]})
+fig.show()
+```
+
+### Automatically Sorting Categories by Name or Total Value
+
+Whether using Plotly Express or not, categories can be sorted alphabetically or by value using the `categoryorder` attribute:
+
+Set `categoryorder` to `"category ascending"` or `"category descending"` for the alphanumerical order of the category names or `"total ascending"` or `"total descending"` for numerical order of values. [categoryorder](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-categoryorder) for more information. Note that sorting the bars by a particular trace isn't possible right now - it's only possible to sort by the total values. Of course, you can always sort your data _before_ plotting it if you need more customization.
+
+This example orders the categories **alphabetically** with `categoryorder: 'category ascending'`
+
+```python
+import plotly.graph_objects as go
+
+x=['b', 'a', 'c', 'd']
+fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))
+fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))
+
+fig.update_layout(barmode='stack')
+fig.update_xaxes(categoryorder='category ascending')
+fig.show()
+```
+
+This example orders the categories **by total value** with `categoryorder: 'total descending'`
+
+```python
+import plotly.graph_objects as go
+
+x=['b', 'a', 'c', 'd']
+fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))
+fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))
+
+fig.update_layout(barmode='stack')
+fig.update_xaxes(categoryorder='total ascending')
+fig.show()
+```
+
+This example shows how to control category order when using `plotly.graph_objects` by defining `categoryorder` to "array" to derive the ordering from the attribute `categoryarray`.
+
+```python
+import plotly.graph_objects as go
+
+x=['b', 'a', 'c', 'd']
+fig = go.Figure(go.Bar(x=x, y=[2,5,1,9], name='Montreal'))
+fig.add_trace(go.Bar(x=x, y=[1, 4, 9, 16], name='Ottawa'))
+fig.add_trace(go.Bar(x=x, y=[6, 8, 4.5, 8], name='Toronto'))
+
+fig.update_layout(barmode='stack')
+fig.update_xaxes(categoryorder='array', categoryarray= ['d','a','c','b'])
+fig.show()
+```
+### Gridlines, Ticks and Tick Labels
+
+
+By default, gridlines and ticks are not shown on categorical axes but they can be activated:
+
+```python
+import plotly.express as px
+
+fig = px.bar(x=["A","B","C"], y=[1,3,2])
+fig.update_xaxes(showgrid=True, ticks="outside")
+fig.show()
+```
+
+By default, ticks and gridlines appear on the categories but the `tickson` attribute can be used to move them to the category boundaries:
+
+```python
+import plotly.express as px
+
+fig = px.bar(x=["A","B","C"], y=[1,3,2])
+fig.update_xaxes(showgrid=True, ticks="outside", tickson="boundaries")
+fig.show()
+```
+
+### Multi-categorical Axes
+
+A two-level categorical axis (also known as grouped or hierarchical categories, or sub-categories) can be created by specifying a trace's `x` or `y` property as a 2-dimensional lists. The first sublist represents the outer categorical value while the second sublist represents the inner categorical value. This is only possible with `plotly.graph_objects` at the moment, and not Plotly Express.
+
+Passing in a two-dimensional list as the `x` or `y` value of a trace causes [the `type` of the corresponding axis](/python/axes/) to be set to `multicategory`.
+
+Here is an example that creates a figure with 2 `bar` traces with a 2-level categorical x-axis.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(
+  x = [['First', 'First', 'Second', 'Second'],
+       ["A", "B", "A", "B"]],
+  y = [2, 3, 1, 5],
+  name = "Adults",
+))
+
+fig.add_trace(go.Bar(
+  x = [['First', 'First', 'Second', 'Second'],
+       ["A", "B", "A", "B"]],
+  y = [8, 3, 6, 5],
+  name = "Children",
+))
+
+fig.update_layout(title_text="Multi-category axis")
+
+fig.show()
+```
+### Reference
+
+See https://plotly.com/python/reference/layout/xaxis/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/choropleth-maps.md plotly-7.1.0+dfsg1/doc/python/choropleth-maps.md
--- plotly-5.20.0+dfsg/doc/python/choropleth-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/choropleth-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,354 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make choropleth maps in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Choropleth Maps
+    order: 8
+    page_type: u-guide
+    permalink: python/choropleth-maps/
+    thumbnail: thumbnail/choropleth.jpg
+---
+
+A [Choropleth Map](https://en.wikipedia.org/wiki/Choropleth_map) is a map composed of colored polygons. It is used to represent spatial variations of a quantity. This page documents how to build **outline** choropleth maps, but you can also build [choropleth **tile maps**](/python/tile-county-choropleth).
+
+Below we show how to create Choropleth Maps using either Plotly Express' `px.choropleth` function or the lower-level `go.Choropleth` graph object.
+
+#### Base Map Configuration
+
+Plotly figures made with [Plotly Express](/python/plotly-express/) `px.scatter_geo`, `px.line_geo` or `px.choropleth` functions or containing `go.Choropleth` or `go.Scattergeo` [graph objects](/python/graph-objects/) have a `go.layout.Geo` object which can be used to [control the appearance of the base map](/python/map-configuration/) onto which data is plotted.
+
+### Introduction: main parameters for choropleth outline maps
+
+Making choropleth maps requires two main types of input:
+
+1. Geometry information:
+   1. This can either be a supplied GeoJSON file where each feature has either an `id` field or some identifying value in `properties`; or
+   2. one of the built-in geometries within `plotly`: US states and world countries (see below)
+2. A list of values indexed by feature identifier.
+
+The GeoJSON data is passed to the `geojson` argument, and the data is passed into the `color` argument of `px.choropleth` (`z` if using `graph_objects`), in the same order as the IDs are passed into the `location` argument.
+
+**Note** the `geojson` attribute can also be the URL to a GeoJSON file, which can speed up map rendering in certain cases.
+
+### Choropleth Map with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+#### GeoJSON with `feature.id`
+
+Here we load a GeoJSON file containing the geometry information for US counties, where `feature.id` is a [FIPS code](https://en.wikipedia.org/wiki/FIPS_county_code).
+
+```python
+from urllib.request import urlopen
+import json
+with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
+    counties = json.load(response)
+
+counties["features"][0]
+```
+
+#### Data indexed by `id`
+
+Here we load unemployment data by county, also indexed by [FIPS code](https://en.wikipedia.org/wiki/FIPS_county_code).
+
+```python
+import pandas as pd
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
+                   dtype={"fips": str})
+df.head()
+```
+
+### Choropleth map using GeoJSON
+
+**Note** In this example we set `layout.geo.scope` to `usa` to automatically configure the map to display USA-centric data in an appropriate projection. See the [Geo map configuration documentation](/python/map-configuration/) for more information on scopes.
+
+```python
+from urllib.request import urlopen
+import json
+with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
+    counties = json.load(response)
+
+import pandas as pd
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
+                   dtype={"fips": str})
+
+import plotly.express as px
+
+fig = px.choropleth(df, geojson=counties, locations='fips', color='unemp',
+                           color_continuous_scale="Viridis",
+                           range_color=(0, 12),
+                           scope="usa",
+                           labels={'unemp':'unemployment rate'}
+                          )
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Indexing by GeoJSON Properties
+
+If the GeoJSON you are using either does not have an `id` field or you wish to use one of the keys in the `properties` field, you may use the `featureidkey` parameter to specify where to match the values of `locations`.
+
+In the following GeoJSON object/data-file pairing, the values of `properties.district` match the values of the `district` column:
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+print(df["district"][2])
+print(geojson["features"][0]["properties"])
+```
+
+To use them together, we set `locations` to `district` and `featureidkey` to `"properties.district"`. The `color` is set to the number of votes by the candidate named Bergeron.
+
+**Note** In this example we set `layout.geo.visible` to `False` to hide the base map and frame, and we set `layout.geo.fitbounds` to `'locations'` to automatically zoom the map to show just the area of interest. See the [Geo map configuration documentation](/python/map-configuration/) for more information on projections and bounds.
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+fig = px.choropleth(df, geojson=geojson, color="Bergeron",
+                    locations="district", featureidkey="properties.district",
+                    projection="mercator"
+                   )
+fig.update_geos(fitbounds="locations", visible=False)
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Choropleth maps in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'choropleth-maps', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Discrete Colors
+
+In addition to [continuous colors](/python/colorscales/), we can [discretely-color](/python/discrete-color/) our choropleth maps by setting `color` to a non-numerical column, like the name of the winner of an election.
+
+**Note** In this example we set `layout.geo.visible` to `False` to hide the base map and frame, and we set `layout.geo.fitbounds` to `'locations'` to automatically zoom the map to show just the area of interest. See the [Geo map configuration documentation](/python/map-configuration/) for more information on projections and bounds.
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+fig = px.choropleth(df, geojson=geojson, color="winner",
+                    locations="district", featureidkey="properties.district",
+                    projection="mercator", hover_data=["Bergeron", "Coderre", "Joly"]
+                   )
+fig.update_geos(fitbounds="locations", visible=False)
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Using GeoPandas Data Frames
+
+`px.choropleth` accepts the `geometry` of a [GeoPandas](https://geopandas.org/) data frame as the input to `geojson` if the `geometry` contains polygons.
+
+```python
+import plotly.express as px
+import geopandas as gpd
+
+df = px.data.election()
+geo_df = gpd.GeoDataFrame.from_features(
+    px.data.election_geojson()["features"]
+).merge(df, on="district").set_index("district")
+
+fig = px.choropleth(geo_df,
+                   geojson=geo_df.geometry,
+                   locations=geo_df.index,
+                   color="Joly",
+                   projection="mercator")
+fig.update_geos(fitbounds="locations", visible=False)
+fig.show()
+```
+
+
+### Using Built-in Country and State Geometries
+
+Plotly comes with two built-in geometries which do not require an external GeoJSON file:
+
+1. USA States
+2. Countries
+
+In **Plotly.py 6.3 and later**, the built-in countries geometry is created from the following sources:
+- [UN data](https://geoportal.un.org/arcgis/sharing/rest/content/items/d7caaff3ef4b4f7c82689b7c4694ad92/data) for country borders, coastlines, land, and ocean layers.
+- Natural Earth data for lakes, rivers, and subunits layers.
+
+In **earlier versions of Plotly.py**, the built-in countries geometry is based on Natural Earth data only. Plotly includes data from Natural Earth "as-is". This dataset draws boundaries of countries according to de facto status. See the [Natural Earth page for more details](https://www.naturalearthdata.com/downloads/50m-cultural-vectors/50m-admin-0-countries-2/).
+
+To use the built-in countries geometry, provide `locations` as [three-letter ISO country codes](/python/outline-map-locations/#supported-iso-codes).
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year==2007")
+fig = px.choropleth(df, locations="iso_alpha",
+                    color="lifeExp", # lifeExp is a column of gapminder
+                    hover_name="country", # column to add to hover information
+                    color_continuous_scale=px.colors.sequential.Plasma)
+fig.show()
+```
+
+To use the USA States geometry, set `locationmode='USA-states'` and provide `locations` as [two-letter state abbreviations](/python/outline-map-locations/#supported-us-state-codes) or [full state names](/python/outline-map-locations/#locationmodeusastates):
+
+```python
+import plotly.express as px
+
+fig = px.choropleth(locations=["CA", "TX", "NY"], locationmode="USA-states", color=[1,2,3], scope="usa")
+fig.show()
+```
+
+### Choropleth Maps with go.Choropleth
+
+#### United States Choropleth Map
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_us_ag_exports.csv')
+
+fig = go.Figure(data=go.Choropleth(
+    locations=df['code'], # Spatial coordinates
+    z = df['total exports'].astype(float), # Data to be color-coded
+    locationmode = 'USA-states', # set of locations match entries in `locations`
+    colorscale = 'Reds',
+    colorbar_title = "Millions USD",
+))
+
+fig.update_layout(
+    title_text = '2011 US Agriculture Exports by State',
+    geo_scope='usa', # limit map scope to USA
+)
+
+fig.show()
+```
+
+#### Customize choropleth chart
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_us_ag_exports.csv')
+
+for col in df.columns:
+    df[col] = df[col].astype(str)
+
+df['text'] = df['state'] + '<br>' + \
+    'Beef ' + df['beef'] + ' Dairy ' + df['dairy'] + '<br>' + \
+    'Fruits ' + df['total fruits'] + ' Veggies ' + df['total veggies'] + '<br>' + \
+    'Wheat ' + df['wheat'] + ' Corn ' + df['corn']
+
+fig = go.Figure(data=go.Choropleth(
+    locations=df['code'],
+    z=df['total exports'].astype(float),
+    locationmode='USA-states',
+    colorscale='Reds',
+    autocolorscale=False,
+    text=df['text'], # hover text
+    marker_line_color='white', # line markers between states
+    colorbar=dict(
+        title=dict(
+            text="Millions USD"
+            )
+    )
+))
+
+fig.update_layout(
+    title_text='2011 US Agriculture Exports by State<br>(Hover for breakdown)',
+    geo = dict(
+        scope='usa',
+        projection=go.layout.geo.Projection(type = 'albers usa'),
+        showlakes=True, # lakes
+        lakecolor='rgb(255, 255, 255)'),
+)
+
+fig.show()
+```
+
+#### World Choropleth Map
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_world_gdp_with_codes.csv')
+
+fig = go.Figure(data=go.Choropleth(
+    locations = df['CODE'],
+    z = df['GDP (BILLIONS)'],
+    text = df['COUNTRY'],
+    colorscale = 'Blues',
+    autocolorscale=False,
+    reversescale=True,
+    marker_line_color='darkgray',
+    marker_line_width=0.5,
+    colorbar_tickprefix = '$',
+    colorbar_title = 'GDP<br>Billions US$',
+))
+
+fig.update_layout(
+    title_text='2014 Global GDP',
+    geo=dict(
+        showframe=False,
+        showcoastlines=False,
+        projection_type='equirectangular'
+    ),
+    annotations = [dict(
+        x=0.55,
+        y=0.1,
+        xref='paper',
+        yref='paper',
+        text='Source: <a href="https://www.cia.gov/library/publications/the-world-factbook/fields/2195.html">\
+            CIA World Factbook</a>',
+        showarrow = False
+    )]
+)
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(choropleth)`](https://plotly.com/python-api-reference/generated/plotly.express.choropleth) or https://plotly.com/python/reference/choropleth/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/click-events.md plotly-7.1.0+dfsg1/doc/python/click-events.md
--- plotly-5.20.0+dfsg/doc/python/click-events.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/click-events.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,85 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.5
+  plotly:
+    description: Click Events With FigureWidget
+    display_as: chart_events
+    language: python
+    layout: base
+    name: Click Events
+    order: 4
+    page_type: example_index
+    permalink: python/click-events/
+    thumbnail: thumbnail/figurewidget-click-events.gif
+---
+
+#### Update Points Using a Click Callback
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+np.random.seed(1)
+
+x = np.random.rand(100)
+y = np.random.rand(100)
+
+f = go.FigureWidget([go.Scatter(x=x, y=y, mode='markers')])
+
+scatter = f.data[0]
+colors = ['#a3a7e4'] * 100
+scatter.marker.color = colors
+scatter.marker.size = [10] * 100
+f.layout.hovermode = 'closest'
+
+
+# create our callback function
+def update_point(trace, points, selector):
+    c = list(scatter.marker.color)
+    s = list(scatter.marker.size)
+    for i in points.point_inds:
+        c[i] = '#bae2be'
+        s[i] = 20
+        with f.batch_update():
+            scatter.marker.color = c
+            scatter.marker.size = s
+
+
+scatter.on_click(update_point)
+
+f
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/figurewidget-click-event.gif'>
+
+
+#### Reference
+
+
+See [these Jupyter notebooks](https://github.com/jonmmease/plotly_ipywidget_notebooks) for even more FigureWidget examples.
+
+```python
+import plotly.graph_objects as go
+f = go.FigureWidget([go.Scatter()])
+help(f.data[0].on_click)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/colorscales.md plotly-7.1.0+dfsg1/doc/python/colorscales.md
--- plotly-5.20.0+dfsg/doc/python/colorscales.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/colorscales.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,673 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.8
+  plotly:
+    description: How to set, create and control continuous color scales and color
+      bars in scatter, bar, map and heatmap figures.
+    display_as: file_settings
+    has_thumbnail: true
+    ipynb: ~notebook_demo/187
+    language: python
+    layout: base
+    name: Continuous Color Scales and Color Bars
+    order: 22
+    permalink: python/colorscales/
+    redirect_from: python/logarithmic-color-scale/
+    thumbnail: thumbnail/heatmap_colorscale.jpg
+    v4upgrade: true
+---
+
+### Continuous vs Discrete Color
+
+In the same way as the X or Y position of a mark in cartesian coordinates can be used to represent continuous values (i.e. amounts or moments in time) or categories (i.e. labels), color can be used to represent continuous or categorical data. This page is about using color to represent **continuous** data, but Plotly can also [represent categorical values with color](/python/discrete-color/).
+
+### Continuous Color Concepts
+
+This document explains the following four continuous-color-related concepts:
+
+- **color scales** represent a mapping between the range 0 to 1 and some color domain within which colors are to be interpolated (unlike [discrete color sequences](/python/discrete-color/) which are never interpolated). Color scale defaults depend on the `layout.colorscales` attributes of the active [template](/python/templates/), and can be explicitly specified using the `color_continuous_scale` argument for many [Plotly Express](/python/plotly-express/) functions or the `colorscale` argument in various `graph_objects` such as `layout.coloraxis` or `marker.colorscale` in `go.Scatter` traces or `colorscale` in `go.Heatmap` traces. For example `[(0,"blue"), (1,"red")]` is a simple color scale that interpolated between blue and red via purple, which can also be implicitly represented as `["blue", "red"]` and happens to be one of the [built-in color scales](/python/builtin-colorscales) and therefore referred to as `"bluered"` or `plotly.colors.sequential.Bluered`.
+- **color ranges** represent the minimum to maximum range of data to be mapped onto the 0 to 1 input range of the color scale. Color ranges default to the range of the input data and can be explicitly specified using either the `range_color` or `color_continuous_midpoint` arguments for many Plotly Express functions, or `cmin`/`cmid`/`cmax` or `zmin`/`zmid`/`zmax` for various `graph_objects` such as `layout.coloraxis.cmin` or `marker.cmin` in `go.Scatter` traces or `cmin` in `go.Heatmap` traces. For example, if a color range of `[100, 200]` is used with the color scale above, then any mark with a color value of 100 or less will be blue, and 200 or more will be red. Marks with values in between will be various shades of purple.
+- **color bars** are legend-like visible representations of the color range and color scale with optional tick labels and tick marks. Color bars can be configured with attributes inside `layout.coloraxis.colorbar` or in places like `marker.colorbar` in `go.Scatter` traces or `colorbar` in `go.Heatmap` traces.
+- **color axes** connect color scales, color ranges and color bars to a trace's data. By default, any colorable attribute in a trace is attached to its own local color axis, but color axes may also be shared across attributes and traces by setting e.g. `marker.coloraxis` in `go.Scatter` traces or `coloraxis` in `go.Heatmap` traces. Local color axis attributes are configured within traces e.g. `marker.showscale` whereas shared color axis attributes are configured within the Layout e.g. `layout.coloraxis.showscale`.
+
+### Continuous Color with Plotly Express
+
+Most [Plotly Express](/python/plotly-express/) functions accept a `color` argument which automatically assigns data values to continuous color **if the data is numeric**. If the data contains strings, the color will automatically be considered [discrete (also known as categorical or qualitative)](/python/discrete-color/). This means that numeric strings must be parsed to be used for continuous color, and conversely, numbers used as category codes must be converted to strings.
+
+For example, in the `tips` dataset, the `size` column contains numbers:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="size",
+                 title="Numeric 'size' values mean continuous color")
+
+fig.show()
+```
+
+Converting this column to strings is very straightforward:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+df["size"] = df["size"].astype(str)
+fig = px.scatter(df, x="total_bill", y="tip", color="size",
+                 title="String 'size' values mean discrete colors")
+
+fig.show()
+```
+
+If you have stringified numbers you can convert back just as easily:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+df["size"] = df["size"].astype(str)
+df["size"] = df["size"].astype(float)
+fig = px.scatter(df, x="total_bill", y="tip", color="size",
+                 title="Numeric 'size' values mean continuous color")
+
+fig.show()
+```
+
+### Colorscales in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'colorscales', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Color Scales in Plotly Express
+
+By default, [Plotly Express](/python/plotly-express/) will use the color scale from the active [template](/python/templates/)'s `layout.colorscales.sequential` attribute, and the default active template is `plotly` which uses the `Plasma` color scale. You can choose any of the [built-in color scales](/python/builtin-colorscales/), however, or define your own.
+
+Here is an example that creates a scatter plot using Plotly Express, with points colored using the Viridis color scale.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length",
+                 color="sepal_length", color_continuous_scale=px.colors.sequential.Viridis)
+
+fig.show()
+```
+
+It is also possible to specify color scales by name. Here is an example that specifies the `Inferno` color scale by name, as a string
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length",
+                 color="sepal_length", color_continuous_scale='Inferno')
+
+fig.show()
+```
+
+### Reversing a built-in color scale
+
+You can reverse a [built-in color scale](/python/builtin-colorscales/) by appending `_r` to its name, for color scales given either as a string or a `plotly` object.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007").sort_values(by="lifeExp")
+fig = px.bar(df, y="continent", x="pop", color="lifeExp", orientation="h",
+             color_continuous_scale='Bluered_r', hover_name="country")
+
+fig.show()
+```
+
+```python
+import plotly.express as px
+data = [[1, .3, .5, .9],
+        [.3, .1, .4, 1],
+        [.2, .8, .9, .3]]
+fig = px.imshow(data, color_continuous_scale=px.colors.sequential.Cividis_r)
+fig.show()
+```
+
+### Explicitly Constructing a Color scale
+
+The Plotly Express `color_continuous_scale` argument accepts explicitly-constructed color scales as well.
+
+The Graph Objects `colorscale` parameter also accepts an explicitly-constructed color scale, as shown in the example [below](#custom-heatmap-color-scale-with-graph-objects).
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="sepal_length",
+                 color_continuous_scale=["red", "green", "blue"])
+
+fig.show()
+```
+
+The example above provided a list of CSS colors to construct a scale, which inferred the reference points to be evenly spaced, but specific reference points can be provided as well. The following example has the same result:
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="sepal_length",
+                 color_continuous_scale=[(0, "red"), (0.5, "green"), (1, "blue")])
+
+fig.show()
+```
+
+### Constructing a Discrete or Discontinuous Color Scale
+
+You can create a discrete color scale, with discontinuous color, by setting the same reference point twice in a row. This is useful for example with chart types that don't support discrete colors, like [Parallel Coordinates plots](/python/parallel-coordinates-plot/). See below for how to customize tick text.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.parallel_coordinates(df, color="species_id",
+                             color_continuous_scale=[(0.00, "red"),   (0.33, "red"),
+                                                     (0.33, "green"), (0.66, "green"),
+                                                     (0.66, "blue"),  (1.00, "blue")])
+fig.show()
+```
+
+### Explicitly setting a Color Range
+
+When using the range of the input data as the color range is inappropriate, for example when producing many figures which must have comparable color ranges, or to clip the color range to account for outliers, the Plotly Express `range_color` argument can be used. Here we clip the top of the color range above the lower range of the data and extend it below the lower range of the data:
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="sepal_length", range_color=[5,8])
+
+fig.show()
+```
+
+### Setting the Midpoint of a Color Range for a Diverging Color scale
+
+Diverging color scales have a well-defined midpoint color, and are best-used when that midpoint is mapped to a meaningful data value. The `color_continuous_midpoint` argument to most Plotly Express functions is used for this. It cannot be used with `range_color` because setting it forces the color range to be centered on the midpoint while including the entire dataset. This means that for asymmetric data distributions, not all colors in the color scale will appear in the figure.
+
+For example, a diverging color scale could be used to highlight points with a higher and lower value than the median in a choropleth map like this:
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year == 2007")
+avg_lifeExp = (df['lifeExp']*df['pop']).sum()/df['pop'].sum()
+
+fig = px.choropleth(df, locations="iso_alpha", color="lifeExp",
+                    color_continuous_scale=px.colors.diverging.BrBG,
+                    color_continuous_midpoint=avg_lifeExp,
+                    title="World Average Life Expectancy in 2007 in years was %.1f" % avg_lifeExp)
+fig.show()
+```
+
+### Hiding or Customizing the Plotly Express Color Bar
+
+Plotly Express binds all traces to [`layout.coloraxis`](/python/reference/layout/coloraxis/), rather than using trace-specific color axes. This means that the color bar can configured there, for example it can be hidden:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.density_heatmap(df, x="total_bill", y="tip", title="No color bar on this density plot")
+
+fig.update_layout(coloraxis_showscale=False)
+
+fig.show()
+```
+
+You can also configure the title, size, placement and tick marks and labels on a color bar:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.density_heatmap(df, x="total_bill", y="tip", title="Customized color bar on this density plot")
+
+fig.update_layout(coloraxis_colorbar=dict(
+    title=dict(text="Number of Bills per Cell"),
+    thicknessmode="pixels", thickness=50,
+    lenmode="pixels", len=200,
+    yanchor="top", y=1,
+    ticks="outside", ticksuffix=" bills",
+    dtick=5
+))
+
+fig.show()
+```
+
+### Customizing Tick Text on Discrete Color Bars
+
+This is the same example as the Parallel Coordinates plot above, with customized tick text for species:
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.parallel_coordinates(df, dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"],
+                             color="species_id", range_color=[0.5, 3.5],
+                             color_continuous_scale=[(0.00, "red"),   (0.33, "red"),
+                                                     (0.33, "green"), (0.66, "green"),
+                                                     (0.66, "blue"),  (1.00, "blue")])
+
+fig.update_layout(coloraxis_colorbar=dict(
+    title=dict(text="Species"),
+    tickvals=[1,2,3],
+    ticktext=["setosa","versicolor","virginica"],
+    lenmode="pixels", len=100,
+))
+fig.show()
+```
+
+### Customizing Tick Text on Logarithmic Color Bars
+
+You can customize text on a logarithmic color bar to make it more readable:
+
+```python
+import plotly.express as px
+import numpy as np
+
+df = px.data.gapminder().query("year == 2007")
+fig = px.scatter(df, y="lifeExp", x="pop", color=np.log10(df["pop"]), hover_name="country", log_x=True)
+
+fig.update_layout(coloraxis_colorbar=dict(
+    title=dict(text="Population"),
+    tickvals=[6,7,8,9],
+    ticktext=["1M", "10M", "100M", "1B"],
+))
+fig.show()
+```
+
+### Using Label Aliases on Colorbars
+
+*New in 5.14*
+
+Using `labelalias` you can replace some labels on the `colorbar` with alternative values. In this example, the `colorbar` has five `tickvals`. Using `labelalias`, instead of displaying all labels as the numbers in `tickvals`, we swap out three of the labels for text.
+
+```python
+import plotly.graph_objects as go
+
+import urllib.request as request
+import json
+
+# Load heatmap data
+response = request.urlopen(
+    "https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json")
+dataset = json.load(response)
+
+# Create and show figure
+fig = go.Figure()
+
+fig.add_trace(go.Heatmap(
+    z=dataset["z"],
+    colorbar=dict(
+        title=dict(
+            text="Surface Heat",
+            side="top",
+        ),
+        tickmode="array",
+        tickvals=[2, 25, 50, 75, 100],
+        labelalias={100: "Hot", 50: "Mild", 2: "Cold"},
+        ticks="outside"
+    )
+))
+
+fig.show()
+```
+
+### Custom Discretized Heatmap Color scale with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Heatmap(
+    z=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]],
+    colorscale=[
+        # Let first 10% (0.1) of the values have color rgb(0, 0, 0)
+        [0, "rgb(0, 0, 0)"],
+        [0.1, "rgb(0, 0, 0)"],
+
+        # Let values between 10-20% of the min and max of z
+        # have color rgb(20, 20, 20)
+        [0.1, "rgb(20, 20, 20)"],
+        [0.2, "rgb(20, 20, 20)"],
+
+        # Values between 20-30% of the min and max of z
+        # have color rgb(40, 40, 40)
+        [0.2, "rgb(40, 40, 40)"],
+        [0.3, "rgb(40, 40, 40)"],
+
+        [0.3, "rgb(60, 60, 60)"],
+        [0.4, "rgb(60, 60, 60)"],
+
+        [0.4, "rgb(80, 80, 80)"],
+        [0.5, "rgb(80, 80, 80)"],
+
+        [0.5, "rgb(100, 100, 100)"],
+        [0.6, "rgb(100, 100, 100)"],
+
+        [0.6, "rgb(120, 120, 120)"],
+        [0.7, "rgb(120, 120, 120)"],
+
+        [0.7, "rgb(140, 140, 140)"],
+        [0.8, "rgb(140, 140, 140)"],
+
+        [0.8, "rgb(160, 160, 160)"],
+        [0.9, "rgb(160, 160, 160)"],
+
+        [0.9, "rgb(180, 180, 180)"],
+        [1.0, "rgb(180, 180, 180)"]
+    ],
+    colorbar=dict(
+        tick0=0,
+        dtick=1
+    )
+))
+
+fig.show()
+```
+
+### Color scale for Scatter Plots with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create list from 0 to 39 to use as x, y, and color
+values = list(range(40))
+
+fig.add_trace(go.Scatter(
+    x=values,
+    y=values,
+    marker=dict(
+        size=16,
+        cmax=39,
+        cmin=0,
+        color=values,
+        colorbar=dict(
+            title=dict(text="Colorbar")
+        ),
+        colorscale="Viridis"
+    ),
+    mode="markers"))
+
+fig.show()
+```
+
+### Color scale for Contour Plot with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Contour(
+    z=[[10, 10.625, 12.5, 15.625, 20],
+       [5.625, 6.25, 8.125, 11.25, 15.625],
+       [2.5, 3.125, 5., 8.125, 12.5],
+       [0.625, 1.25, 3.125, 6.25, 10.625],
+       [0, 0.625, 2.5, 5.625, 10]],
+    colorscale="Cividis",
+))
+
+fig.show()
+```
+
+### Custom Heatmap Color scale with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+import urllib
+import json
+
+response = urllib.request.urlopen(
+    "https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json"
+)
+
+dataset = json.load(response)
+
+fig = go.Figure()
+
+fig.add_trace(go.Heatmap(
+    z=dataset["z"],
+    colorscale=[[0.0, "rgb(165,0,38)"],
+                [0.1111111111111111, "rgb(215,48,39)"],
+                [0.2222222222222222, "rgb(244,109,67)"],
+                [0.3333333333333333, "rgb(253,174,97)"],
+                [0.4444444444444444, "rgb(254,224,144)"],
+                [0.5555555555555556, "rgb(224,243,248)"],
+                [0.6666666666666666, "rgb(171,217,233)"],
+                [0.7777777777777778, "rgb(116,173,209)"],
+                [0.8888888888888888, "rgb(69,117,180)"],
+                [1.0, "rgb(49,54,149)"]]
+))
+
+fig.show()
+```
+
+### Setting the Midpoint of a Diverging Color scale with Graph Objects
+
+The following example uses the [marker.cmid](https://plotly.com/python/reference/scatter/#scatter-marker-cmid) attribute to set the mid-point of the color domain by scaling 'cmin' and/or 'cmax' to be equidistant to this point. It only has impact when [marker.color](https://plotly.com/python/reference/scattercarpet/#scattercarpet-marker-line-color) sets to a numerical array, and 'marker.cauto' is `True`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    y=list(range(-5,15)),
+    mode="markers",
+    marker={"size": 25, "color": list(range(-3,10)), "cmid": 0}))
+
+fig.show()
+```
+
+The heatmap chart uses [marker.zmid](https://plotly.com/python/reference/scatter/#scatter-marker-zmid) attribute to set the mid-point of the color domain.
+
+```python
+import plotly.graph_objects as go
+
+a = list(range(-10,5))
+b = list(range(-5,10))
+c = list(range(-5,15))
+
+fig = go.Figure(go.Heatmap(
+    z=[a, b, c],
+    colorscale='RdBu',
+    zmid=0))
+
+fig.show()
+```
+
+### Custom Contour Plot Color scale with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Contour(
+    z=[[10, 10.625, 12.5, 15.625, 20],
+       [5.625, 6.25, 8.125, 11.25, 15.625],
+       [2.5, 3.125, 5., 8.125, 12.5],
+       [0.625, 1.25, 3.125, 6.25, 10.625],
+       [0, 0.625, 2.5, 5.625, 10]],
+    colorscale=[[0, "rgb(166,206,227)"],
+                [0.25, "rgb(31,120,180)"],
+                [0.45, "rgb(178,223,138)"],
+                [0.65, "rgb(51,160,44)"],
+                [0.85, "rgb(251,154,153)"],
+                [1, "rgb(227,26,28)"]],
+))
+
+fig.show()
+```
+
+### Custom Color bar Title, Labels, and Ticks with Graph Objects
+
+Like axes, you can customize the color bar ticks, labels, and values with `ticks`, `ticktext`, and `tickvals`.
+
+```python
+import plotly.graph_objects as go
+
+import urllib
+import json
+
+# Load heatmap data
+response = urllib.request.urlopen(
+    "https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json")
+dataset = json.load(response)
+
+# Create and show figure
+fig = go.Figure()
+
+fig.add_trace(go.Heatmap(
+    z=dataset["z"],
+    colorbar=dict(
+        title=dict(
+            text="Surface Heat",
+            side="top",
+        ),
+        tickmode="array",
+        tickvals=[2, 50, 100],
+        ticktext=["Cool", "Mild", "Hot"],
+        ticks="outside"
+    )
+))
+
+fig.show()
+```
+
+### Color Bar Displayed Horizontally
+
+By default, color bars are displayed vertically. You can change a color bar to be displayed horizontally by setting the `colorbar` `orientation` attribute to `h`.
+
+```python
+import plotly.graph_objects as go
+
+import urllib
+import json
+
+# Load heatmap data
+response = urllib.request.urlopen(
+    "https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json")
+dataset = json.load(response)
+
+# Create and show figure
+fig = go.Figure()
+
+fig.add_trace(go.Heatmap(
+    z=dataset["z"],
+    colorbar=dict(orientation='h')))
+
+fig.show()
+```
+
+### Sharing a Color Axis with Graph Objects
+
+To share colorscale information in multiple subplots, you can use [coloraxis](https://plotly.com/javascript/reference/scatter/#scatter-marker-line-coloraxis).
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(1,2)
+
+fig.add_trace(
+ go.Heatmap(x = [1, 2, 3, 4], z = [[1, 2, 3, 4], [4, -3, -1, 1]], coloraxis = "coloraxis"), 1,1)
+
+fig.add_trace(
+ go.Heatmap(x = [3, 4, 5, 6], z = [[10, 2, 1, 0], [4, 3, 5, 6]], coloraxis = "coloraxis"),1,2)
+fig.update_layout(coloraxis = {'colorscale':'viridis'})
+
+fig.show()
+```
+
+### Logarithmic Color scale with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Heatmap(
+    z= [[10, 100.625, 1200.5, 150.625, 2000],
+       [5000.625, 60.25, 8.125, 100000, 150.625],
+       [2000.5, 300.125, 50., 8.125, 12.5],
+       [10.625, 1.25, 3.125, 6000.25, 100.625],
+       [0, 0.625, 2.5, 50000.625, 10]],
+    colorscale= [
+        [0, 'rgb(250, 250, 250)'],        #0
+        [1./10000, 'rgb(200, 200, 200)'], #10
+        [1./1000, 'rgb(150, 150, 150)'],  #100
+        [1./100, 'rgb(100, 100, 100)'],   #1000
+        [1./10, 'rgb(50, 50, 50)'],       #10000
+        [1., 'rgb(0, 0, 0)'],             #100000
+
+    ],
+    colorbar= dict(
+        tick0= 0,
+        tickmode= 'array',
+        tickvals= [0, 1000, 10000, 100000]
+    )
+))
+
+fig.show()
+```
+
+### Positioning Colorbars
+
+Colorbars can be positioned by specifying x and y coordinates. By default, the x and y values are "paper" coordinates, which refer to the plot area. You can also use coordinates based on the "container" by setting `xref="container"` or `yref="container"`. The following example uses a container reference for the x position.
+
+See the positioning section of [the figure data structure page](/python/figure-structure/#positioning-with-paper-container-coordinates-or-axis-domain-coordinates) for more details on "paper" vs "container" coordinates.
+
+```python
+import plotly.graph_objects as go
+
+import urllib
+import json
+
+# Load heatmap data
+response = urllib.request.urlopen(
+    "https://raw.githubusercontent.com/plotly/datasets/master/custom_heatmap_colorscale.json")
+dataset = json.load(response)
+
+# Create and show figure
+fig = go.Figure(go.Heatmap(
+    z=dataset["z"],
+    colorbar=dict(
+        x=0.2,
+        xref="container",
+        title=dict(text="Surface Heat")
+    )
+))
+
+fig.show()
+```
+
+### Reference
+
+See https://plotly.com/python/reference/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/cone-plot.md plotly-7.1.0+dfsg1/doc/python/cone-plot.md
--- plotly-5.20.0+dfsg/doc/python/cone-plot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/cone-plot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,168 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make 3D Cone plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Cone Plots
+    order: 12
+    page_type: u-guide
+    permalink: python/cone-plot/
+    redirect_from: python/3d-cone/
+    thumbnail: thumbnail/3dcone.png
+---
+
+A cone plot is the 3D equivalent of a 2D [quiver plot](/python/quiver-plots/), i.e., it represents a 3D vector field using cones to represent the direction and norm of the vectors. 3-D coordinates are given by `x`, `y` and `z`, and the coordinates of the vector field by `u`, `v` and `w`.
+
+### Basic 3D Cone
+
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Cone(x=[1], y=[1], z=[1], u=[1], v=[1], w=[0]))
+
+fig.update_layout(scene_camera_eye=dict(x=-0.76, y=1.8, z=0.92))
+
+fig.show()
+```
+
+### Multiple 3D Cones
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Cone(
+    x=[1, 2, 3],
+    y=[1, 2, 3],
+    z=[1, 2, 3],
+    u=[1, 0, 0],
+    v=[0, 3, 0],
+    w=[0, 0, 2],
+    sizemode="absolute",
+    sizeref=2,
+    anchor="tip"))
+
+fig.update_layout(
+      scene=dict(domain_x=[0, 1],
+                 camera_eye=dict(x=-1.57, y=1.36, z=0.58)))
+
+fig.show()
+```
+
+### 3D Cone Lighting
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Cone(x=[1,] * 3, name="base"))
+fig.add_trace(go.Cone(x=[2,] * 3, opacity=0.3, name="opacity:0.3"))
+fig.add_trace(go.Cone(x=[3,] * 3, lighting_ambient=0.3, name="lighting.ambient:0.3"))
+fig.add_trace(go.Cone(x=[4,] * 3, lighting_diffuse=0.3, name="lighting.diffuse:0.3"))
+fig.add_trace(go.Cone(x=[5,] * 3, lighting_specular=2, name="lighting.specular:2"))
+fig.add_trace(go.Cone(x=[6,] * 3, lighting_roughness=1, name="lighting.roughness:1"))
+fig.add_trace(go.Cone(x=[7,] * 3, lighting_fresnel=2, name="lighting.fresnel:2"))
+fig.add_trace(go.Cone(x=[8,] * 3, lightposition=dict(x=0, y=0, z=1e5),
+                                  name="lighting.position x:0,y:0,z:1e5"))
+
+fig.update_traces(y=[1, 2, 3], z=[1, 1, 1],
+                  u=[1, 2, 3], v=[1, 1, 2], w=[4, 4, 1],
+                  hoverinfo="u+v+w+name",
+                  showscale=False)
+
+fig.update_layout(scene=dict(aspectmode="data",
+                             camera_eye=dict(x=0.05, y=-2.6, z=2)),
+                  margin=dict(t=0, b=0, l=0, r=0))
+
+
+fig.show()
+```
+
+### 3D Cone Vortex
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/vortex.csv")
+
+fig = go.Figure(data = go.Cone(
+    x=df['x'],
+    y=df['y'],
+    z=df['z'],
+    u=df['u'],
+    v=df['v'],
+    w=df['w'],
+    colorscale='Blues',
+    sizemode="absolute",
+    sizeref=40))
+
+fig.update_layout(scene=dict(aspectratio=dict(x=1, y=1, z=0.8),
+                             camera_eye=dict(x=1.2, y=1.2, z=0.6)))
+
+fig.show()
+```
+
+### Sizemode
+
+Earlier examples use `sizemode="absolute"` when adjusting the cone size scaling with `sizeref`. `sizemode` also supports `raw`(new in 5.21) and `scaled`.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/cone_plot_data.csv"
+)
+
+fig = go.Figure(
+    data=go.Cone(
+        x=df["x"],
+        y=df["y"],
+        z=df["z"],
+        u=df["u"],
+        v=df["v"],
+        w=df["w"],
+        sizemode="raw",
+        sizeref=0.1,
+        colorscale="Portland",
+        cmin=0,
+        cmax=80,
+        hoverinfo="u+v+w+text",
+        text="-> wind <-",
+    ),
+    layout=dict(
+        width=900, height=600, scene=dict(camera=dict(eye=dict(x=1.2, y=0, z=0.6)))
+    ),
+)
+
+
+fig.show()
+
+```
+
+#### Reference
+See https://plotly.com/python/reference/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/configuration-options.md plotly-7.1.0+dfsg1/doc/python/configuration-options.md
--- plotly-5.20.0+dfsg/doc/python/configuration-options.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/configuration-options.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,388 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.19
+  plotly:
+    description: How to set the configuration options of figures using the Plotly
+      Python graphing library.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Configuration
+    order: 11
+    page_type: u-guide
+    permalink: python/configuration-options/
+    thumbnail: thumbnail/modebar-icons.png
+---
+
+## Configuration Options
+
+The `.show()` method that you use to display your figures also accepts a `config` parameter.
+
+You can set the configuration options for your figure by passing a dictionary to this parameter which contains the options you want to set.
+
+If you don't set an option's value, it will automatically be set to the default value for that option.
+
+For the complete list of configuration options and their defaults see: https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js
+
+### Enabling Scroll Zoom
+
+This option allows users to zoom in and out of figures using the scroll wheel on their mouse and/or a two-finger scroll.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+config = {'scrollZoom': True}
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config=config)
+```
+
+### Turning Off Responsiveness
+
+By default, figures you create with the `plotly.py` package are [responsive](https://en.wikipedia.org/wiki/Responsive_web_design). Responsive figures automatically change their height and width when the size of the window they are displayed in changes. This is true for figures which are displayed in web browsers on desktops and mobile, Jupyter Notebooks, and other [rendering](https://plot.ly/python/renderers/) environments.
+
+Try resizing your browser window to see this behavior in effect on this page.
+
+If you would like to disable this default behavior and force your figures to always have the same height and width regardless of the window size, set the value of the `responsive` key to `False` in your figure's configuration dictionary.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+config = {'responsive': False}
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config=config)
+```
+
+### Making A Static Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+config = {'staticPlot': True}
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config=config)
+```
+
+### Forcing The Modebar to Always Be Visible
+
+When users hover over a figure generated with plotly.py, a **modebar** appears in the top-right of the figure. This presents users with several options for interacting with the figure.
+
+By default, the modebar is only visible while the user is hovering over the chart. If you would like the modebar to always be visible regardless of whether or not the user is currently hovering over the figure, set the displayModeBar attribute in the configuration of your figure to true.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+config = {'displayModeBar': True}
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config=config)
+```
+
+### Preventing the Modebar from Appearing
+
+When users hover over a figure generated with `plotly.py`, a modebar appears in the top-right of the figure. This presents users with several options for interacting with the figure.
+
+By default, the modebar is only visible while the user is hovering over the chart. If you would like the modebar to never be visible, then set the `displayModeBar` attribute in the config of your figure to false.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+config = {'displayModeBar': False}
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config=config)
+```
+
+
+### Hiding the Plotly Logo on the Modebar
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+config = {'displaylogo': False}
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config=config)
+```
+
+### Customizing Modebar "Download Plot" Button
+
+The camera icon on the modebar causes a static version of the figure to be downloaded via the user's browser. The default behaviour is to download a PNG of size 700 by 450 pixels.
+
+This behavior can be controlled via the `toImageButtonOptions` configuration key.
+
+```python
+import plotly.express as px
+
+config = {
+  'toImageButtonOptions': {
+    'format': 'svg', # one of png, svg, jpeg, webp
+    'filename': 'custom_image',
+    'height': 500,
+    'width': 700,
+    'scale': 1 # Multiply title/legend/axis/canvas sizes by this factor
+  }
+}
+
+fig = px.bar(x=[1, 2, 3], y=[1, 3, 1])
+
+fig.show(config=config)
+```
+
+Figures can be set to download at the currently-rendered size by setting `height` and `width` to `None`:
+
+
+```python
+import plotly.express as px
+
+config = {
+  'toImageButtonOptions': { 'height': None, 'width': None, }
+}
+
+fig = px.bar(x=[1, 2, 3], y=[1, 3, 1])
+
+fig.show(config=config)
+```
+
+### Removing Modebar Buttons
+
+To delete buttons from the modebar, pass an array of strings containing the names of the buttons you want to remove to the `modeBarButtonsToRemove` attribute in the figure's configuration dictionary. Note that different chart types have different default modebars. The following is a list of all the modebar buttons and the chart types they are associated with:
+
+  - **High-level**: `zoom`, `pan`, `select`, `zoomIn`, `zoomOut`, `autoScale`, `resetScale`
+  - **2D**: `zoom2d`, `pan2d`, `select2d`, `lasso2d`, `zoomIn2d`, `zoomOut2d`, `autoScale2d`, `resetScale2d`, `v1hovermode`
+  - **2D Shape Drawing**: `drawline`, `drawopenpath`, `drawclosedpath`, `drawcircle`, `drawrect`, `eraseshape`
+  - **3D**: `zoom3d`, `pan3d`, `orbitRotation`, `tableRotation`, `resetCameraDefault3d`, `resetCameraLastSave3d`, `hoverClosest3d`
+  - **Cartesian**: `hoverClosestCartesian`, `hoverCompareCartesian`
+  - **Geo**: `zoomInGeo`, `zoomOutGeo`, `resetGeo`, `hoverClosestGeo`
+  - **Tile maps**: `zoomInMap`, `zoomOutMap`, `resetViewMap`
+  - **Sankey**: `resetSankeyGroup`
+  - **Other**: `hoverClosestPie`, `toggleHover`, `resetViews`, `toImage`, `sendChartToCloud`, `toggleSpikelines`
+
+*Changed in 7.0*: `handleDrag3d` and `hoverClosestGl2d` no longer exist, and `sendDataToCloud` is now named `sendChartToCloud`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.show(config={
+    'modeBarButtonsToRemove': ['zoom', 'pan']
+})
+```
+
+*New in v5.0*
+
+The `layout.modebar.remove` attribute can be used instead of the approach used above:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[1, 3, 1]))
+
+fig.update_layout(modebar_remove=['zoom', 'pan'])
+
+fig.show()
+```
+
+### Add optional shape-drawing buttons to modebar
+
+*New in v4.7*
+
+Some modebar buttons of Cartesian plots are optional and have to be added explicitly, using the `modeBarButtonsToAdd` config attribute. These buttons are used for drawing or erasing shapes. See [the tutorial on shapes and shape drawing](/python/shapes#drawing-shapes-with-a-mouse-on-cartesian-plots) for more details.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x='petal_width', y='sepal_length', color='species')
+
+fig.update_layout(
+    dragmode='drawopenpath',
+    newshape_line_color='cyan',
+    title_text='Draw a path to separate versicolor and virginica'
+)
+
+fig.show(config={'modeBarButtonsToAdd': ['drawline',
+                                        'drawopenpath',
+                                        'drawclosedpath',
+                                        'drawcircle',
+                                        'drawrect',
+                                        'eraseshape'
+                                       ]})
+```
+
+*New in v5.0*
+
+The `layout.modebar.add` attribute can be used instead of the approach used above:
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x='petal_width', y='sepal_length', color='species')
+
+fig.update_layout(
+    dragmode='drawopenpath',
+    newshape_line_color='cyan',
+    title_text='Draw a path to separate versicolor and virginica',
+    modebar_add=['drawline',
+        'drawopenpath',
+        'drawclosedpath',
+        'drawcircle',
+        'drawrect',
+        'eraseshape'
+       ]
+)
+
+fig.show()
+```
+
+### Double-Click Delay
+Sets the maximum delay between two consecutive clicks to be interpreted as a double-click in milliseconds. This is the time interval between first mousedown and second mouseup. The default timing is 300 ms (less than half a second).
+This setting propagates to all on-subplot double clicks (except for `geo` and `map`).
+
+```python
+import plotly.graph_objects as go
+
+config = {'doubleClickDelay': 1000}
+
+fig = go.Figure(go.Bar(
+    y=[3, 5, 3, 2],
+    x=["2019-09-02", "2019-10-10", "2019-11-12", "2019-12-22"],
+    texttemplate="%{label}",
+    textposition="inside"))
+
+fig.update_layout(xaxis={'type': 'date'})
+
+fig.show(config=config)
+```
+
+### Disabling Buttons for Specific Axes
+
+*New in 6.3*
+
+Disabling the zoom in, zoom out, and autoscale buttons for specific axes is supported on cartesian axes using the `modebardisable` attribute. In the following example, the zoom in and zoom out buttons are disabled on the `xaxis`, meaning these buttons only zoom in and out on the `yaxis`. Disable the autoscale button using `modebardisable='autoscale'`. You can also disable the zoom and autoscale buttons using `modebardisable='zoominout+autoscale'`.
+
+```python
+import plotly.graph_objects as go
+import plotly.data
+
+df = plotly.data.stocks()
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=df['date'],
+            y=df['GOOG'],
+            mode='lines+markers',
+            name='Google Stock Price'
+        )
+    ],
+    layout=go.Layout(
+        title='Google Stock Price Over Time with Mode Bar Disabled',
+        xaxis=dict(
+            title='Date',
+            # Try zooming in or out using the modebar buttons. These only apply to the yaxis in this example.
+            modebardisable='zoominout'
+        ),
+        yaxis=dict(
+            title='Stock Price (USD)',
+        )
+    )
+)
+fig.show()
+```
+
+### Hiding Notifications
+
+*New in 6.7*
+
+Plotly displays a notification in the top-right corner of the plot when downloading the plot as an image, when first clicking a legend item, and when zooming in. Set `displayNotifier` to `False` to hide these notifications.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
+
+config = {"displayNotifier": False}
+fig.show(config=config)
+```
+
+### Configuring Figures in Dash Apps
+
+The same configuration dictionary that you pass to the `config` parameter of the `show()` method can also be passed to the [`config` property of a `dcc.Graph` component](https://dash.plotly.com/dash-core-components/graph).
+
+#### Reference
+
+See config options at https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js
diff -Nru plotly-5.20.0+dfsg/doc/python/continuous-error-bars.md plotly-7.1.0+dfsg1/doc/python/continuous-error-bars.md
--- plotly-5.20.0+dfsg/doc/python/continuous-error-bars.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/continuous-error-bars.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,116 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: Add continuous error bands to charts in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Continuous Error Bands
+    order: 15
+    page_type: u-guide
+    permalink: python/continuous-error-bars/
+    thumbnail: thumbnail/error-cont.jpg
+---
+
+Continuous error bands are a graphical representation of error or uncertainty as a shaded region around a main trace, rather than as discrete whisker-like error bars. They can be implemented in a manner similar to [filled area plots](/python/filled-area-plots/) using `scatter` traces with the `fill` attribute.
+
+#### Filling within a single trace
+
+In this example we show how to construct a trace that goes from low to high X values along the upper Y edge of a region, and then from high to low X values along the lower Y edge of the region. This trace is then 'self-filled' using `fill='toself'`.
+
+```python
+import plotly.graph_objs as go
+
+x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+y = [1, 2, 7, 4, 5, 6, 7, 8, 9, 10]
+y_upper = [2, 3, 8, 5, 6, 7, 8, 9, 10, 11]
+y_lower = [0, 1, 5, 3, 4, 5, 6, 7, 8, 9]
+
+
+fig = go.Figure([
+    go.Scatter(
+        x=x,
+        y=y,
+        line=dict(color='rgb(0,100,80)'),
+        mode='lines'
+    ),
+    go.Scatter(
+        x=x+x[::-1], # x, then x reversed
+        y=y_upper+y_lower[::-1], # upper, then lower reversed
+        fill='toself',
+        fillcolor='rgba(0,100,80,0.2)',
+        line=dict(color='rgba(255,255,255,0)'),
+        hoverinfo="skip",
+        showlegend=False
+    )
+])
+fig.show()
+```
+
+#### Filling between two traces
+
+In this example we show how to construct the bounds of the band using two traces, with the lower trace using `fill='tonexty'` to fill an area up to the upper trace.
+
+```python
+import plotly.graph_objs as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/wind_speed_laurel_nebraska.csv')
+
+fig = go.Figure([
+    go.Scatter(
+        name='Measurement',
+        x=df['Time'],
+        y=df['10 Min Sampled Avg'],
+        mode='lines',
+        line=dict(color='rgb(31, 119, 180)'),
+    ),
+    go.Scatter(
+        name='Upper Bound',
+        x=df['Time'],
+        y=df['10 Min Sampled Avg']+df['10 Min Std Dev'],
+        mode='lines',
+        marker=dict(color="#444"),
+        line=dict(width=0),
+        showlegend=False
+    ),
+    go.Scatter(
+        name='Lower Bound',
+        x=df['Time'],
+        y=df['10 Min Sampled Avg']-df['10 Min Std Dev'],
+        marker=dict(color="#444"),
+        line=dict(width=0),
+        mode='lines',
+        fillcolor='rgba(68, 68, 68, 0.3)',
+        fill='tonexty',
+        showlegend=False
+    )
+])
+fig.update_layout(
+    yaxis=dict(title=dict(text='Wind speed (m/s)')),
+    title=dict(text='Continuous, variable value error bars'),
+    hovermode="x"
+)
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/contour-plots.md plotly-7.1.0+dfsg1/doc/python/contour-plots.md
--- plotly-5.20.0+dfsg/doc/python/contour-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/contour-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,345 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make Contour plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Contour Plots
+    order: 1
+    page_type: example_index
+    permalink: python/contour-plots/
+    thumbnail: thumbnail/contour.jpg
+---
+
+### Basic Contour Plot
+
+A 2D contour plot shows the [contour lines](https://en.wikipedia.org/wiki/Contour_line) of a 2D numerical array `z`, i.e. interpolated lines of isovalues of `z`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data =
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]]
+    ))
+fig.show()
+```
+
+### Setting X and Y Coordinates in a Contour Plot ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data =
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        x=[-9, -6, -5 , -3, -1], # horizontal axis
+        y=[0, 1, 4, 5, 7] # vertical axis
+    ))
+fig.show()
+
+```
+
+### Colorscale for Contour Plot ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data =
+     go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        colorscale='Electric',
+    ))
+fig.show()
+```
+
+### Customizing Size and Range of a Contour Plot's Contours ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data =
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        colorscale='Hot',
+        contours=dict(
+            start=0,
+            end=8,
+            size=2,
+        ),
+    ))
+
+fig.show()
+```
+
+### Customizing Spacing Between X and Y Axis Ticks ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data =
+    go.Contour(
+        z= [[10, 10.625, 12.5, 15.625, 20],
+              [5.625, 6.25, 8.125, 11.25, 15.625],
+              [2.5, 3.125, 5., 8.125, 12.5],
+              [0.625, 1.25, 3.125, 6.25, 10.625],
+              [0, 0.625, 2.5, 5.625, 10]],
+        dx=10,
+        x0=5,
+        dy=10,
+        y0=10,
+    )
+)
+
+fig.show()
+```
+
+### Connect the Gaps Between None Values in the Z Matrix ###
+
+```python
+import plotly.graph_objs as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=2, cols=2, subplot_titles=('connectgaps = False',
+                                                        'connectgaps = True'))
+z = [[None, None, None, 12, 13, 14, 15, 16],
+     [None, 1, None, 11, None, None, None, 17],
+     [None, 2, 6, 7, None, None, None, 18],
+     [None, 3, None, 8, None, None, None, 19],
+     [5, 4, 10, 9, None, None, None, 20],
+     [None, None, None, 27, None, None, None, 21],
+     [None, None, None, 26, 25, 24, 23, 22]]
+
+fig.add_trace(go.Contour(z=z, showscale=False), 1, 1)
+fig.add_trace(go.Contour(z=z, showscale=False, connectgaps=True), 1, 2)
+fig.add_trace(go.Heatmap(z=z, showscale=False, zsmooth='best'), 2, 1)
+fig.add_trace(go.Heatmap(z=z, showscale=False, connectgaps=True, zsmooth='best'), 2, 2)
+
+fig['layout']['yaxis1'].update(title=dict(text='Contour map'))
+fig['layout']['yaxis3'].update(title=dict(text='Heatmap'))
+
+fig.show()
+```
+
+### Smoothing the Contour lines ###
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+z =   [[2, 4, 7, 12, 13, 14, 15, 16],
+       [3, 1, 6, 11, 12, 13, 16, 17],
+       [4, 2, 7, 7, 11, 14, 17, 18],
+       [5, 3, 8, 8, 13, 15, 18, 19],
+       [7, 4, 10, 9, 16, 18, 20, 19],
+       [9, 10, 5, 27, 23, 21, 21, 21],
+       [11, 14, 17, 26, 25, 24, 23, 22]]
+
+fig = make_subplots(rows=1, cols=2,
+                    subplot_titles=('Without Smoothing', 'With Smoothing'))
+
+fig.add_trace(go.Contour(z=z, line_smoothing=0), 1, 1)
+fig.add_trace(go.Contour(z=z, line_smoothing=0.85), 1, 2)
+
+fig.show()
+```
+
+### Smooth Contour Coloring ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        # heatmap gradient coloring is applied between each contour level
+        contours_coloring='heatmap' # can also be 'lines', or 'none'
+    )
+)
+
+fig.show()
+```
+
+### Contour Line Labels ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        contours=dict(
+            coloring ='heatmap',
+            showlabels = True, # show labels on contours
+            labelfont = dict( # label font properties
+                size = 12,
+                color = 'white',
+            )
+        )))
+
+fig.show()
+```
+
+### Contour Lines ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        contours_coloring='lines',
+        line_width=2,
+    )
+)
+
+fig.show()
+```
+
+### Custom Contour Plot Colorscale ###
+
+```python
+import plotly.graph_objects as go
+
+# Valid color strings are CSS colors, rgb or hex strings
+colorscale = [[0, 'gold'], [0.5, 'mediumturquoise'], [1, 'lightsalmon']]
+
+fig = go.Figure(data =
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        colorscale=colorscale)
+)
+
+fig.show()
+```
+
+### Color Bar Title ###
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        colorbar=dict(
+            title=dict(
+                text='Color bar title', # title here
+                side='right',
+                font=dict(
+                    size=14,
+                    family='Arial, sans-serif')
+                )
+            ),
+        ))
+
+fig.show()
+```
+
+### Color Bar Size for Contour Plots
+
+In the example below, both the thickness (given here in pixels) and the length (given here as a fraction of the plot height) are set.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Contour(
+        z=[[10, 10.625, 12.5, 15.625, 20],
+           [5.625, 6.25, 8.125, 11.25, 15.625],
+           [2.5, 3.125, 5., 8.125, 12.5],
+           [0.625, 1.25, 3.125, 6.25, 10.625],
+           [0, 0.625, 2.5, 5.625, 10]],
+        colorbar=dict(
+            thickness=25,
+            thicknessmode='pixels',
+            len=0.6,
+            lenmode='fraction',
+            outlinewidth=0
+        )
+    ))
+
+fig.show()
+```
+
+### Styling Color Bar Ticks for Contour Plots
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data =
+         go.Contour(
+           z=[[10, 10.625, 12.5, 15.625, 20],
+              [5.625, 6.25, 8.125, 11.25, 15.625],
+              [2.5, 3.125, 5., 8.125, 12.5],
+              [0.625, 1.25, 3.125, 6.25, 10.625],
+              [0, 0.625, 2.5, 5.625, 10]],
+           colorbar=dict(nticks=10, ticks='outside',
+                         ticklen=5, tickwidth=1,
+                         showticklabels=True,
+                         tickangle=0, tickfont_size=12)
+            ))
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/contour/ for more information and chart attribute options!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/creating-and-updating-figures.md plotly-7.1.0+dfsg1/doc/python/creating-and-updating-figures.md
--- plotly-5.20.0+dfsg/doc/python/creating-and-updating-figures.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/creating-and-updating-figures.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,675 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: Creating and Updating Figures with Plotly's Python graphing library
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Creating and Updating Figures
+    order: 2
+    page_type: example_index
+    permalink: python/creating-and-updating-figures/
+    redirect_from:
+    - python/user-guide/
+    - python/user-g/
+    thumbnail: thumbnail/creating-and-updating-figures.png
+    v4upgrade: true
+---
+
+The `plotly` Python package exists to create, manipulate and [render](/python/renderers/) graphical figures (i.e. charts, plots, maps and diagrams) represented by [data structures also referred to as figures](/python/figure-structure/). The rendering process uses the [Plotly.js JavaScript library](https://plotly.com/javascript/) under the hood although Python developers using this module very rarely need to interact with the Javascript library directly, if ever. Figures can be represented in Python either as dicts or as instances of the `plotly.graph_objects.Figure` class, and are serialized as text in [JavaScript Object Notation (JSON)](https://json.org/) before being passed to Plotly.js.
+
+> Note: the recommended entry-point into the plotly package is the [high-level plotly.express module, also known as Plotly Express](/python/plotly-express/), which consists of Python functions which return fully-populated `plotly.graph_objects.Figure` objects. This page exists to document the structure of the data structure that these objects represent for users who wish to understand more about how to customize them, or assemble them from other `plotly.graph_objects` components.
+
+### Figures As Dictionaries
+
+At a low level, figures can be represented as dictionaries and displayed using functions from the `plotly.io` module. The `fig` dictionary in the example below describes a figure. It contains a single `bar` trace and a title.
+
+```python
+fig = dict({
+    "data": [{"type": "bar",
+              "x": [1, 2, 3],
+              "y": [1, 3, 2]}],
+    "layout": {"title": {"text": "A Figure Specified By Python Dictionary"}}
+})
+
+# To display the figure defined by this dict, use the low-level plotly.io.show function
+import plotly.io as pio
+
+pio.show(fig)
+```
+
+### Figures as Graph Objects
+
+The [`plotly.graph_objects` module provides an automatically-generated hierarchy of classes](https://plotly.com/python-api-reference/plotly.graph_objects.html) called ["graph objects"](/python/graph-objects/) that may be used to represent figures, with a top-level class `plotly.graph_objects.Figure`.
+
+> Note that the *recommended alternative* to working with Python dictionaries is to [create entire figures at once using Plotly Express](/python/plotly-express/) and to manipulate the resulting `plotly.graph_objects.Figure` objects as described in this page, wherever possible, rather than to assemble figures bottom-up from underlying graph objects. See ["When to use Graph Objects"](/python/graph-objects/).
+
+Graph objects have several benefits compared to plain Python dictionaries.
+
+1. Graph objects provide precise data validation. If you provide an invalid property name or an invalid property value as the key to a graph object, an exception will be raised with a helpful error message describing the problem. This is not the case if you use plain Python dictionaries and lists to build your figures.
+2. Graph objects contain descriptions of each valid property as Python docstrings, with a [full API reference available](https://plotly.com/python-api-reference/). You can use these docstrings in the development environment of your choice to learn about the available properties as an alternative to consulting the online [Full Reference](/python/reference/index/).
+3. Properties of graph objects can be accessed using both dictionary-style key lookup (e.g. `fig["layout"]`) or class-style property access (e.g. `fig.layout`).
+4. Graph objects support higher-level convenience functions for making updates to already constructed figures (`.update_layout()`, `.add_trace()` etc) as described below.
+5. Graph object constructors and update methods accept "magic underscores" (e.g. `go.Figure(layout_title_text="The Title")` rather than `dict(layout=dict(title=dict(text="The Title")))`) for more compact code, as described below.
+6. Graph objects support attached rendering (`.show()`) and exporting functions (`.write_image()`) that automatically invoke the appropriate functions from [the `plotly.io` module](https://plotly.com/python-api-reference/plotly.io.html).
+
+
+Below you can find an example of one way that the figure in the example above could be specified using a graph object instead of a dictionary.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])],
+    layout=go.Layout(
+        title=go.layout.Title(text="A Figure Specified By A Graph Object")
+    )
+)
+
+fig.show()
+```
+
+You can also create a graph object figure from a dictionary representation by passing the dictionary to the `go.Figure` constructor.
+
+```python
+import plotly.graph_objects as go
+
+dict_of_fig = dict({
+    "data": [{"type": "bar",
+              "x": [1, 2, 3],
+              "y": [1, 3, 2]}],
+    "layout": {"title": {"text": "A Figure Specified By A Graph Object With A Dictionary"}}
+})
+
+fig = go.Figure(dict_of_fig)
+
+fig.show()
+```
+
+##### Converting Graph Objects To Dictionaries and JSON
+
+Graph objects can be turned into their Python dictionary representation using the `fig.to_dict()` method. You can also retrieve the JSON string representation of a graph object using the `fig.to_json()` method.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])],
+    layout=go.Layout(height=600, width=800)
+)
+
+fig.layout.template = None # to slim down the output
+
+print("Dictionary Representation of A Graph Object:

" + str(fig.to_dict()))
+print("

")
+print("JSON Representation of A Graph Object:

" + str(fig.to_json()))
+print("

")
+```
+
+### Representing Figures in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'figure-structure', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Creating Figures
+
+This section summarizes several ways to create new graph object figures with the `plotly.py` graphing library.
+
+> The *recommended way* to create figures and populate them is to use [Plotly Express](/python/plotly-express/) but this page documents various other options for completeness
+
+
+#### Plotly Express
+
+[Plotly Express](https://plot.ly/python/plotly-express/) (included as the `plotly.express` module) is a high-level data visualization API that produces fully-populated graph object figures in single function-calls.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", title="A Plotly Express Figure")
+
+# If you print the figure, you'll see that it's just a regular figure with data and layout
+# print(fig)
+
+fig.show()
+```
+
+#### Graph Objects `Figure` Constructor
+
+As demonstrated above, you can build a complete figure by passing trace and layout specifications to the `plotly.graph_objects.Figure` constructor. These trace and layout specifications can be either dictionaries or graph objects.
+
+In the following example, the traces are specified using graph objects and the layout is specified as a dictionary.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])],
+    layout=dict(title=dict(text="A Figure Specified By A Graph Object"))
+)
+
+fig.show()
+```
+
+#### Figure Factories
+
+[Figure factories](/python/figure-factories) (included in `plotly.py` in the `plotly.figure_factory` module) are functions that produce graph object figures, often to satisfy the needs of specialized domains. Here's an example of using the `create_quiver()` figure factory to construct a graph object figure that displays a 2D quiver plot.
+
+```python
+import numpy as np
+import plotly.figure_factory as ff
+
+x1,y1 = np.meshgrid(np.arange(0, 2, .2), np.arange(0, 2, .2))
+u1 = np.cos(x1)*y1
+v1 = np.sin(x1)*y1
+
+fig = ff.create_quiver(x1, y1, u1, v1)
+
+fig.show()
+```
+
+#### Make Subplots
+
+The `plotly.subplots.make_subplots()` function produces a graph object figure that is preconfigured with a grid of subplots that traces can be added to. The `add_trace()` function will be discussed more below.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_trace(go.Scatter(y=[4, 2, 1], mode="lines"), row=1, col=1)
+fig.add_trace(go.Bar(y=[2, 1, 3]), row=1, col=2)
+
+fig.show()
+```
+
+### Updating Figures
+
+Regardless of how a graph object figure was constructed, it can be updated by adding additional traces to it and modifying its properties.
+
+#### Adding Traces
+
+New traces can be added to a graph object figure using the `add_trace()` method. This method accepts a graph object trace (an instance of `go.Scatter`, `go.Bar`, etc.) and adds it to the figure. This allows you to start with an empty figure, and add traces to it sequentially. The `append_trace()` method does the same thing, although it does not return the figure.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
+
+fig.show()
+```
+
+You can also add traces to a figure produced by a figure factory or Plotly Express.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 title="Using The add_trace() method With A Plotly Express Figure")
+
+fig.add_trace(
+    go.Scatter(
+        x=[2, 4],
+        y=[4, 8],
+        mode="lines",
+        line=go.scatter.Line(color="gray"),
+        showlegend=False)
+)
+fig.show()
+```
+
+#### Adding Traces To Subplots
+
+If a figure was created using `plotly.subplots.make_subplots()`, then supplying the `row` and `col` arguments to `add_trace()` can be used to add a trace to a particular subplot.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_trace(go.Scatter(y=[4, 2, 1], mode="lines"), row=1, col=1)
+fig.add_trace(go.Bar(y=[2, 1, 3]), row=1, col=2)
+
+fig.show()
+```
+
+This also works for figures created by Plotly Express using the `facet_row` and or `facet_col` arguments.
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", facet_col="species",
+                 title="Adding Traces To Subplots Within A Plotly Express Figure")
+
+reference_line = go.Scatter(x=[2, 4],
+                            y=[4, 8],
+                            mode="lines",
+                            line=go.scatter.Line(color="gray"),
+                            showlegend=False)
+
+fig.add_trace(reference_line, row=1, col=1)
+fig.add_trace(reference_line, row=1, col=2)
+fig.add_trace(reference_line, row=1, col=3)
+
+fig.show()
+```
+
+#### Add Trace Convenience Methods
+
+As an alternative to the `add_trace()` method, graph object figures have a family of methods of the form `add_{trace}` (where `{trace}` is the name of a trace type) for constructing and adding traces of each trace type.
+
+Here is the previous subplot example, adapted to add the scatter trace using `fig.add_scatter()` and to add the bar trace using `fig.add_bar()`.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_scatter(y=[4, 2, 1], mode="lines", row=1, col=1)
+fig.add_bar(y=[2, 1, 3], row=1, col=2)
+
+fig.show()
+```
+
+#### Magic Underscore Notation
+
+To make it easier to work with nested properties, graph object constructors and many graph object methods support magic underscore notation.
+
+This allows you to reference nested properties by joining together multiple nested property names with underscores.
+
+For example, specifying the figure title in the figure constructor _without_ magic underscore notation requires setting the `layout` argument to `dict(title=dict(text="A Chart"))`.
+
+Similarly, setting the line color of a scatter trace requires setting the `marker` property to `dict(color="crimson")`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Scatter(y=[1, 3, 2], line=dict(color="crimson"))],
+    layout=dict(title=dict(text="A Graph Objects Figure Without Magic Underscore Notation"))
+)
+
+fig.show()
+```
+
+With magic underscore notation, you can accomplish the same thing by passing the figure constructor a keyword argument named `layout_title_text`, and by passing the `go.Scatter` constructor a keyword argument named `line_color`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Scatter(y=[1, 3, 2], line_color="crimson")],
+    layout_title_text="A Graph Objects Figure With Magic Underscore Notation"
+)
+
+fig.show()
+```
+
+Magic underscore notation is supported throughout the graph objects API, and it can often significantly simplify operations involving deeply nested properties.
+
+> Note: When you see keyword arguments with underscores passed to a graph object constructor or method, it is almost always safe to assume that it is an application of magic underscore notation. We have to say "almost always" rather than "always" because there are a few property names in the plotly schema that contain underscores: error_x, error_y, error_z, copy_xstyle, copy_ystyle, copy_zstyle, paper_bgcolor, and plot_bgcolor. These were added back in the early days of the library (2012-2013) before we standardized on banning underscores from property names.
+
+#### Updating Figure Layouts
+
+Graph object figures support an `update_layout()` method that may be used to update multiple nested properties of a figure's layout.
+
+Here is an example of updating the text and font size of a figure's title using `update_layout()`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
+
+fig.update_layout(title_text="Using update_layout() With Graph Object Figures",
+                  title_font_size=30)
+
+fig.show()
+```
+
+Note that the following `update_layout()` operations are equivalent:
+
+```python
+fig.update_layout(title_text="update_layout() Syntax Example",
+                  title_font_size=30)
+
+fig.update_layout(title_text="update_layout() Syntax Example",
+                  title_font=dict(size=30))
+
+
+fig.update_layout(title=dict(text="update_layout() Syntax Example"),
+                             font=dict(size=30))
+
+fig.update_layout({"title": {"text": "update_layout() Syntax Example",
+                             "font": {"size": 30}}})
+
+fig.update_layout(title=go.layout.Title(text="update_layout() Syntax Example",
+                                        font=go.layout.title.Font(size=30)))
+```
+
+#### Updating Traces
+
+Graph object figures support an `update_traces()` method that may be used to update multiple nested properties of one or more of a figure's traces.
+
+To show some examples, we will start with a figure that contains `bar` and `scatter` traces across two subplots.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_scatter(y=[4, 2, 3.5], mode="markers",
+                marker=dict(size=20, color="LightSeaGreen"),
+                name="a", row=1, col=1)
+
+fig.add_bar(y=[2, 1, 3],
+            marker=dict(color="MediumPurple"),
+            name="b", row=1, col=1)
+
+fig.add_scatter(y=[2, 3.5, 4], mode="markers",
+                marker=dict(size=20, color="MediumPurple"),
+                name="c", row=1, col=2)
+
+fig.add_bar(y=[1, 3, 2],
+            marker=dict(color="LightSeaGreen"),
+            name="d", row=1, col=2)
+
+fig.show()
+```
+
+Note that both `scatter` and `bar` traces have a `marker.color` property to control their coloring. Here is an example of using `update_traces()` to modify the color of all traces.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_scatter(y=[4, 2, 3.5], mode="markers",
+                marker=dict(size=20, color="LightSeaGreen"),
+                name="a", row=1, col=1)
+
+fig.add_bar(y=[2, 1, 3],
+            marker=dict(color="MediumPurple"),
+            name="b", row=1, col=1)
+
+fig.add_scatter(y=[2, 3.5, 4], mode="markers",
+                marker=dict(size=20, color="MediumPurple"),
+                name="c", row=1, col=2)
+
+fig.add_bar(y=[1, 3, 2],
+            marker=dict(color="LightSeaGreen"),
+            name="d", row=1, col=2)
+
+fig.update_traces(marker=dict(color="RoyalBlue"))
+
+fig.show()
+```
+
+The `update_traces()` method supports a `selector` argument to control which traces should be updated. Only traces with properties that match the selector will be updated. Here is an example of using a selector to only update the color of the `bar` traces.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_scatter(y=[4, 2, 3.5], mode="markers",
+                marker=dict(size=20, color="LightSeaGreen"),
+                name="a", row=1, col=1)
+
+fig.add_bar(y=[2, 1, 3],
+            marker=dict(color="MediumPurple"),
+            name="b", row=1, col=1)
+
+fig.add_scatter(y=[2, 3.5, 4], mode="markers",
+                marker=dict(size=20, color="MediumPurple"),
+                name="c", row=1, col=2)
+
+fig.add_bar(y=[1, 3, 2],
+            marker=dict(color="LightSeaGreen"),
+            name="d", row=1, col=2)
+
+fig.update_traces(marker=dict(color="RoyalBlue"),
+                  selector=dict(type="bar"))
+
+fig.show()
+```
+
+Magic underscore notation can be used in the selector to match nested properties. Here is an example of updating the color of all traces that were formally colored `"MediumPurple"`.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_scatter(y=[4, 2, 3.5], mode="markers",
+                marker=dict(size=20, color="LightSeaGreen"),
+                name="a", row=1, col=1)
+
+fig.add_bar(y=[2, 1, 3],
+            marker=dict(color="MediumPurple"),
+            name="b", row=1, col=1)
+
+fig.add_scatter(y=[2, 3.5, 4], mode="markers",
+                marker=dict(size=20, color="MediumPurple"),
+                name="c", row=1, col=2)
+
+fig.add_bar(y=[1, 3, 2],
+            marker=dict(color="LightSeaGreen"),
+            name="d", row=1, col=2)
+
+fig.update_traces(marker_color="RoyalBlue",
+                  selector=dict(marker_color="MediumPurple"))
+
+fig.show()
+```
+
+For figures with subplots, the `update_traces()` method also supports `row` and `col` arguments to control which traces should be updated. Only traces in the specified subplot row and column will be updated. Here is an example of updating the color of all traces in the second subplot column.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_scatter(y=[4, 2, 3.5], mode="markers",
+                marker=dict(size=20, color="LightSeaGreen"),
+                name="a", row=1, col=1)
+
+fig.add_bar(y=[2, 1, 3],
+            marker=dict(color="MediumPurple"),
+            name="b", row=1, col=1)
+
+fig.add_scatter(y=[2, 3.5, 4], mode="markers",
+                marker=dict(size=20, color="MediumPurple"),
+                name="c", row=1, col=2)
+
+fig.add_bar(y=[1, 3, 2],
+            marker=dict(color="LightSeaGreen"),
+            name="d", row=1, col=2)
+
+fig.update_traces(marker=dict(color="RoyalBlue"),
+                  col=2)
+
+fig.show()
+```
+
+The `update_traces()` method can also be used on figures produced by figure factories or Plotly Express. Here's an example of updating the regression lines produced by Plotly Express to be dotted.
+
+```python
+import pandas as pd
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 facet_col="species", trendline="ols", title="Using update_traces() With Plotly Express Figures")
+
+fig.update_traces(
+    line=dict(dash="dot", width=4),
+    selector=dict(type="scatter", mode="lines"))
+
+fig.show()
+```
+
+### Overwrite Existing Properties When Using Update Methods
+
+`update_layout()` and `update_traces()` have an `overwrite` keyword argument, defaulting to False, in which case updates are applied recursively to the _existing_ nested property structure. When set to True, the prior value of existing properties is overwritten with the provided value.
+
+In the example below, the red color of markers is overwritten when updating `marker` in `update_traces()` with `overwrite=True`. Note that setting instead `marker_opacity` with the magic underscore would not overwrite `marker_color` because properties would be overwritten starting only at the level of `marker.opacity`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Bar(x=[1, 2, 3], y=[6, 4, 9],
+                       marker_color="red")) # will be overwritten below
+
+fig.update_traces(overwrite=True, marker={"opacity": 0.4})
+
+fig.show()
+```
+
+#### Conditionally Updating Traces
+
+Suppose the updates that you want to make to a collection of traces depend on the current values of certain trace properties. The `update_traces()` method cannot handle this situation, but the `for_each_trace()` method can!
+
+As its first argument, the `for_each_trace()` method accepts a function that accepts and updates one trace at a time. Like `update_traces()`, `for_each_trace()` also accepts `selector`, `row`, and `col` arguments to control which traces should be considered.
+
+Here is an example of using `for_each_trace()` to convert the only markers for the `"setosa"` to square symbols in a Plotly Express Figure.
+
+**Note that this is possible because Plotly Express figures are made up of a separate trace for each column in the input data frame**
+
+```python
+import pandas as pd
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 title="Conditionally Updating Traces In A Plotly Express Figure With for_each_trace()")
+
+fig.for_each_trace(
+    lambda trace: trace.update(marker_symbol="square") if trace.name == "setosa" else (),
+)
+
+fig.show()
+```
+
+#### Updating Figure Axes
+
+Graph object figures support `update_xaxes()` and `update_yaxes()` methods that may be used to update multiple nested properties of one or more of a figure's axes. Here is an example of using `update_xaxes()` to disable the vertical grid lines across all subplots in a figure produced by Plotly Express.
+
+```python
+import pandas as pd
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 facet_col="species", title="Using update_xaxes() With A Plotly Express Figure")
+
+fig.update_xaxes(showgrid=False)
+
+fig.show()
+```
+
+There are also `for_each_xaxis()` and `for_each_yaxis()` methods that are analogous to the `for_each_trace()` method described above. For non-cartesian subplot types (e.g. polar), there are additional `update_{type}` and `for_each_{type}` methods (e.g. `update_polar()`, `for_each_polar()`).
+
+### Other Update Methods
+
+Figures created with the plotly.py graphing library also support:
+
+  - the `update_layout_images()` method in order to [update background layout images](/python/images/),
+  - `update_annotations()` in order to [update annotations](/python/text-and-annotations/#multiple-annotations),
+  - and `update_shapes()` in order to [update shapes](/python/shapes/).
+
+#### Chaining Figure Operations
+
+All of the figure update operations described above are methods that return a reference to the figure being modified. This makes it possible to chain multiple figure modification operations together into a single expression.
+
+Here is an example of a chained expression that creates:
+
+  - a faceted scatter plot with OLS trend lines using Plotly Express,
+  - sets the title font size using `update_layout()`,
+  - disables vertical grid lines using `update_xaxes()`,
+  - updates the width and dash pattern of the trend lines using `update_traces()`,
+  - and then displays the figure using `show()`.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+(px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+            facet_col="species", trendline="ols",
+            title="Chaining Multiple Figure Operations With A Plotly Express Figure")
+ .update_layout(title_font_size=24)
+ .update_xaxes(showgrid=False)
+ .update_traces(
+     line=dict(dash="dot", width=4),
+     selector=dict(type="scatter", mode="lines"))
+).show()
+```
+
+#### Property Assignment
+
+Trace and layout properties can be updated using property assignment syntax. Here is an example of setting the figure title using property assignment.
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure(data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
+fig.layout.title.text = "Using Property Assignment Syntax With A Graph Object Figure"
+fig.show()
+```
+
+And here is an example of updating the bar outline using property assignment.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
+
+fig.data[0].marker.line.width = 4
+fig.data[0].marker.line.color = "black"
+
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/custom-buttons.md plotly-7.1.0+dfsg1/doc/python/custom-buttons.md
--- plotly-5.20.0+dfsg/doc/python/custom-buttons.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/custom-buttons.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,471 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to add custom buttons to update Plotly chart attributes in Python.
+    display_as: controls
+    language: python
+    layout: base
+    name: Custom Buttons
+    order: 1
+    page_type: example_index
+    permalink: python/custom-buttons/
+    thumbnail: thumbnail/custom-buttons.jpg
+---
+
+#### Methods
+The [updatemenu method](https://plotly.com/python/reference/layout/updatemenus/#layout-updatemenus-items-updatemenu-buttons-items-button-method) determines which [plotly.js function](https://plotly.com/javascript/plotlyjs-function-reference/) will be used to modify the chart. There are 4 possible methods:
+- `"restyle"`: modify **data** or data attributes
+- `"relayout"`: modify **layout** attributes
+- `"update"`: modify **data and layout** attributes; combination of `"restyle"` and `"relayout"`
+- `"animate"`: start or pause an [animation](https://plotly.com/python/#animations))
+
+
+#### Restyle Button
+The `"restyle"` method should be used when modifying the data and data attributes of the graph.<br>
+**Update One Data Attribute**<br>
+This example demonstrates how to update a single data attribute: chart `type` with the `"restyle"` method.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# load dataset
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/volcano.csv")
+
+# create figure
+fig = go.Figure()
+
+# Add surface trace
+fig.add_trace(go.Surface(z=df.values.tolist(), colorscale="Viridis"))
+
+# Update plot sizing
+fig.update_layout(
+    width=800,
+    height=900,
+    autosize=False,
+    margin=dict(t=0, b=0, l=0, r=0),
+    template="plotly_white",
+)
+
+# Update 3D scene options
+fig.update_scenes(
+    aspectratio=dict(x=1, y=1, z=0.7),
+    aspectmode="manual"
+)
+
+# Add dropdown
+fig.update_layout(
+    updatemenus=[
+        dict(
+            type = "buttons",
+            direction = "left",
+            buttons=list([
+                dict(
+                    args=["type", "surface"],
+                    label="3D Surface",
+                    method="restyle"
+                ),
+                dict(
+                    args=["type", "heatmap"],
+                    label="Heatmap",
+                    method="restyle"
+                )
+            ]),
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.11,
+            xanchor="left",
+            y=1.1,
+            yanchor="top"
+        ),
+    ]
+)
+
+# Add annotation
+fig.update_layout(
+    annotations=[
+        dict(text="Trace type:", showarrow=False,
+                             x=0, y=1.08, yref="paper", align="left")
+    ]
+)
+
+fig.show()
+```
+
+**Update Several Data Attributes**<br>
+This example demonstrates how to update several data attributes: colorscale, colorscale direction, and line display with the "restyle" method.
+This example uses the cmocean python package. You can install this package with `pip install cmocean`.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# load dataset
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/volcano.csv")
+
+# Create figure
+fig = go.Figure()
+
+# Add surface trace
+fig.add_trace(go.Heatmap(z=df.values.tolist(), colorscale="Viridis"))
+
+# Update plot sizing
+fig.update_layout(
+    width=800,
+    height=900,
+    autosize=False,
+    margin=dict(t=100, b=0, l=0, r=0),
+)
+
+# Update 3D scene options
+fig.update_scenes(
+    aspectratio=dict(x=1, y=1, z=0.7),
+    aspectmode="manual"
+)
+
+# Add dropdowns
+# button_layer_1_height = 1.08
+button_layer_1_height = 1.12
+button_layer_2_height = 1.065
+
+fig.update_layout(
+    updatemenus=[
+        dict(
+            buttons=list([
+                dict(
+                    args=["colorscale", "Viridis"],
+                    label="Viridis",
+                    method="restyle"
+                ),
+                dict(
+                    args=["colorscale", "Cividis"],
+                    label="Cividis",
+                    method="restyle"
+                ),
+                dict(
+                    args=["colorscale", "Blues"],
+                    label="Blues",
+                    method="restyle"
+                ),
+                dict(
+                    args=["colorscale", "Greens"],
+                    label="Greens",
+                    method="restyle"
+                ),
+            ]),
+            type = "buttons",
+            direction="right",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.1,
+            xanchor="left",
+            y=button_layer_1_height,
+            yanchor="top"
+        ),
+        dict(
+            buttons=list([
+                dict(
+                    args=["reversescale", False],
+                    label="False",
+                    method="restyle"
+                ),
+                dict(
+                    args=["reversescale", True],
+                    label="True",
+                    method="restyle"
+                )
+            ]),
+            type = "buttons",
+            direction="right",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.13,
+            xanchor="left",
+            y=button_layer_2_height,
+            yanchor="top"
+        ),
+        dict(
+            buttons=list([
+                dict(
+                    args=[{"contours.showlines": False, "type": "contour"}],
+                    label="Hide lines",
+                    method="restyle"
+                ),
+                dict(
+                    args=[{"contours.showlines": True, "type": "contour"}],
+                    label="Show lines",
+                    method="restyle"
+                ),
+            ]),
+            type = "buttons",
+            direction="right",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.5,
+            xanchor="left",
+            y=button_layer_2_height,
+            yanchor="top"
+        ),
+    ]
+)
+
+fig.update_layout(
+    annotations=[
+        dict(text="colorscale", x=0, xref="paper", y=1.1, yref="paper",
+                             align="left", showarrow=False),
+        dict(text="Reverse<br>Colorscale", x=0, xref="paper", y=1.06,
+                             yref="paper", showarrow=False),
+        dict(text="Lines", x=0.47, xref="paper", y=1.045, yref="paper",
+                             showarrow=False)
+    ])
+
+fig.show()
+```
+
+#### Relayout Button
+The `"relayout"` method should be used when modifying the layout attributes of the graph.<br>
+**Update One Layout Attribute**<br>
+This example demonstrates how to update a layout attribute: chart `type` with the `"relayout"` method.
+
+```python
+import plotly.graph_objects as go
+
+# Generate dataset
+import numpy as np
+np.random.seed(1)
+
+x0 = np.random.normal(2, 0.4, 400)
+y0 = np.random.normal(2, 0.4, 400)
+x1 = np.random.normal(3, 0.6, 600)
+y1 = np.random.normal(6, 0.4, 400)
+x2 = np.random.normal(4, 0.2, 200)
+y2 = np.random.normal(4, 0.4, 200)
+
+# Create figure
+fig = go.Figure()
+
+# Add traces
+fig.add_trace(
+    go.Scatter(
+        x=x0,
+        y=y0,
+        mode="markers",
+        marker=dict(color="DarkOrange")
+    )
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=x1,
+        y=y1,
+        mode="markers",
+        marker=dict(color="Crimson")
+    )
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=x2,
+        y=y2,
+        mode="markers",
+        marker=dict(color="RebeccaPurple")
+    )
+)
+
+# Add buttons that add shapes
+cluster0 = [dict(type="circle",
+                            xref="x", yref="y",
+                            x0=min(x0), y0=min(y0),
+                            x1=max(x0), y1=max(y0),
+                            line=dict(color="DarkOrange"))]
+cluster1 = [dict(type="circle",
+                            xref="x", yref="y",
+                            x0=min(x1), y0=min(y1),
+                            x1=max(x1), y1=max(y1),
+                            line=dict(color="Crimson"))]
+cluster2 = [dict(type="circle",
+                            xref="x", yref="y",
+                            x0=min(x2), y0=min(y2),
+                            x1=max(x2), y1=max(y2),
+                            line=dict(color="RebeccaPurple"))]
+
+fig.update_layout(
+    updatemenus=[
+        dict(
+            type="buttons",
+            buttons=[
+                dict(label="None",
+                     method="relayout",
+                     args=["shapes", []]),
+                dict(label="Cluster 0",
+                     method="relayout",
+                     args=["shapes", cluster0]),
+                dict(label="Cluster 1",
+                     method="relayout",
+                     args=["shapes", cluster1]),
+                dict(label="Cluster 2",
+                     method="relayout",
+                     args=["shapes", cluster2]),
+                dict(label="All",
+                     method="relayout",
+                     args=["shapes", cluster0 + cluster1 + cluster2])
+            ],
+        )
+    ]
+)
+
+# Update remaining layout properties
+fig.update_layout(
+    title_text="Highlight Clusters",
+    showlegend=False,
+)
+
+fig.show()
+```
+
+#### Update Button
+The `"update"` method should be used when modifying the data and layout sections of the graph.<br>
+This example demonstrates how to update which traces are displayed while simultaneously updating layout attributes such as the chart title and annotations.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# Load dataset
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
+df.columns = [col.replace("AAPL.", "") for col in df.columns]
+
+# Initialize figure
+fig = go.Figure()
+
+# Add Traces
+
+fig.add_trace(
+    go.Scatter(x=list(df.index),
+               y=list(df.High),
+               name="High",
+               line=dict(color="MediumSlateBlue")))
+
+fig.add_trace(
+    go.Scatter(x=list(df.index),
+               y=[df.High.mean()] * len(df.index),
+               name="High Average",
+               visible=False,
+               line=dict(color="MediumSlateBlue", dash="dash")))
+
+fig.add_trace(
+    go.Scatter(x=list(df.index),
+               y=list(df.Low),
+               name="Low",
+               line=dict(color="DarkOrange")))
+
+fig.add_trace(
+    go.Scatter(x=list(df.index),
+               y=[df.Low.mean()] * len(df.index),
+               name="Low Average",
+               visible=False,
+               line=dict(color="DarkOrange", dash="dash")))
+
+# Add Annotations and Buttons
+high_annotations = [dict(x=-0.05,
+                         y=df.High.mean(),
+                         xanchor="right",
+                         yanchor="bottom",
+                         xref="x domain",
+                         yref="y",
+                         text="High Avg:<br> %.2f" % df.High.mean(),
+                         showarrow=False),
+                    dict(x=df.High.idxmax(),
+                         y=df.High.max(),
+                         xref="x",
+                         yref="y",
+                         text="High Max:<br> %.2f" % df.High.max(),
+                         ax=0, ay=-40)]
+low_annotations = [dict(x=-0.05,
+                        y=df.Low.mean(),
+                        xanchor="right",
+                        yanchor="top",
+                        xref="x domain",
+                        yref="y",
+                        text="Low Avg:<br> %.2f" % df.Low.mean(),
+                        showarrow=False),
+                   dict(x=df.Low.idxmin(),
+                        y=df.Low.min(),
+                        xref="x",
+                        yref="y",
+                        text="Low Min:<br> %.2f" % df.Low.min(),
+                        ax=0, ay=40)]
+
+fig.update_layout(
+    updatemenus=[
+        dict(
+            type="buttons",
+            direction="right",
+            active=0,
+            x=0.57,
+            y=1.2,
+            buttons=list([
+                dict(label="None",
+                     method="update",
+                     args=[{"visible": [True, False, True, False]},
+                           {"title": "Yahoo",
+                            "annotations": []}]),
+                dict(label="High",
+                     method="update",
+                     args=[{"visible": [True, True, False, False]},
+                           {"title": "Yahoo High",
+                            "annotations": high_annotations}]),
+                dict(label="Low",
+                     method="update",
+                     args=[{"visible": [False, False, True, True]},
+                           {"title": "Yahoo Low",
+                            "annotations": low_annotations}]),
+                dict(label="Both",
+                     method="update",
+                     args=[{"visible": [True, True, True, True]},
+                           {"title": "Yahoo",
+                            "annotations": high_annotations + low_annotations}]),
+            ]),
+        )
+    ])
+
+# Set title
+fig.update_layout(
+    title_text="Yahoo",
+    xaxis_domain=[0.05, 1.0]
+)
+
+fig.show()
+```
+
+#### Animate Button
+Refer to our animation docs: https://plotly.com/python/#animations for examples on how to use the `animate` method with Plotly buttons.
+
+
+#### Reference
+See https://plotly.com/python/reference/layout/updatemenus/ for more information about `updatemenu` buttons.
diff -Nru plotly-5.20.0+dfsg/doc/python/dash.md plotly-7.1.0+dfsg1/doc/python/dash.md
--- plotly-5.20.0+dfsg/doc/python/dash.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/dash.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,35 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: Analytical Apps with Dash
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Analytical Apps with Dash
+    order: 5
+    page_type: example_index
+    permalink: https://dash.plotly.com/
+    sitemap: false
+    thumbnail: thumbnail/dash_apps.png
+---
diff -Nru plotly-5.20.0+dfsg/doc/python/dendrogram.md plotly-7.1.0+dfsg1/doc/python/dendrogram.md
--- plotly-5.20.0+dfsg/doc/python/dendrogram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/dendrogram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,180 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make a dendrogram in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Dendrograms
+    order: 6
+    page_type: u-guide
+    permalink: python/dendrogram/
+    thumbnail: thumbnail/dendrogram.jpg
+---
+
+#### Basic Dendrogram
+
+A [dendrogram](https://en.wikipedia.org/wiki/Dendrogram) is a diagram representing a tree. The [figure factory](/python/figure-factories/) called `create_dendrogram` performs [hierarchical clustering](https://en.wikipedia.org/wiki/Hierarchical_clustering) on data and represents the resulting tree. Values on the tree depth axis correspond to distances between clusters.
+
+Dendrogram plots are commonly used in computational biology to show the clustering of genes or samples, sometimes in the margin of heatmaps.
+
+```python
+import plotly.figure_factory as ff
+import numpy as np
+np.random.seed(1)
+
+X = np.random.rand(15, 12) # 15 samples, with 12 dimensions each
+fig = ff.create_dendrogram(X)
+fig.update_layout(width=800, height=500)
+fig.show()
+```
+
+#### Set Color Threshold
+
+```python
+import plotly.figure_factory as ff
+
+import numpy as np
+
+X = np.random.rand(15, 10) # 15 samples, with 10 dimensions each
+fig = ff.create_dendrogram(X, color_threshold=1.5)
+fig.update_layout(width=800, height=500)
+fig.show()
+```
+
+#### Set Orientation and Add Labels
+
+```python
+import plotly.figure_factory as ff
+
+import numpy as np
+
+X = np.random.rand(10, 12)
+names = ['Jack', 'Oxana', 'John', 'Chelsea', 'Mark', 'Alice', 'Charlie', 'Rob', 'Lisa', 'Lily']
+fig = ff.create_dendrogram(X, orientation='left', labels=names)
+fig.update_layout(width=800, height=800)
+fig.show()
+```
+
+#### Plot a Dendrogram with a Heatmap
+
+This example uses randomly generated sample data to demonstrate how to plot a dendrogram with a heatmap.
+
+```python
+import plotly.graph_objects as go
+import plotly.figure_factory as ff
+
+import numpy as np
+from scipy.spatial.distance import pdist, squareform
+
+
+# Generate sample data
+np.random.seed(1)
+X = np.random.rand(15, 15)
+labels = [f'Sample_{i}' for i in range(15)]
+data_array = X
+
+# Initialize figure by creating upper dendrogram
+fig = ff.create_dendrogram(data_array, orientation='bottom', labels=labels)
+for i in range(len(fig['data'])):
+    fig['data'][i]['yaxis'] = 'y2'
+
+# Create Side Dendrogram
+dendro_side = ff.create_dendrogram(data_array, orientation='right')
+for i in range(len(dendro_side['data'])):
+    dendro_side['data'][i]['xaxis'] = 'x2'
+
+# Add Side Dendrogram Data to Figure
+for data in dendro_side['data']:
+    fig.add_trace(data)
+
+# Create Heatmap
+dendro_leaves = dendro_side['layout']['yaxis']['ticktext']
+dendro_leaves = list(map(int, dendro_leaves))
+data_dist = pdist(data_array)
+heat_data = squareform(data_dist)
+heat_data = heat_data[dendro_leaves,:]
+heat_data = heat_data[:,dendro_leaves]
+
+heatmap = [
+    go.Heatmap(
+        x = dendro_leaves,
+        y = dendro_leaves,
+        z = heat_data,
+        colorscale = 'Blues'
+    )
+]
+
+heatmap[0]['x'] = fig['layout']['xaxis']['tickvals']
+heatmap[0]['y'] = dendro_side['layout']['yaxis']['tickvals']
+
+# Add Heatmap Data to Figure
+for data in heatmap:
+    fig.add_trace(data)
+
+# Edit Layout
+fig.update_layout({'width':800, 'height':800,
+                         'showlegend':False, 'hovermode': 'closest',
+                         })
+# Edit xaxis
+fig.update_layout(xaxis={'domain': [.15, 1],
+                                  'mirror': False,
+                                  'showgrid': False,
+                                  'showline': False,
+                                  'zeroline': False,
+                                  'ticks':""})
+# Edit xaxis2
+fig.update_layout(xaxis2={'domain': [0, .15],
+                                   'mirror': False,
+                                   'showgrid': False,
+                                   'showline': False,
+                                   'zeroline': False,
+                                   'showticklabels': False,
+                                   'ticks':""})
+
+# Edit yaxis
+fig.update_layout(yaxis={'domain': [0, .85],
+                                  'mirror': False,
+                                  'showgrid': False,
+                                  'showline': False,
+                                  'zeroline': False,
+                                  'showticklabels': False,
+                                  'ticks': ""
+                        })
+# Edit yaxis2
+fig.update_layout(yaxis2={'domain':[.825, .975],
+                                   'mirror': False,
+                                   'showgrid': False,
+                                   'showline': False,
+                                   'zeroline': False,
+                                   'showticklabels': False,
+                                   'ticks':""})
+
+# Plot!
+fig.show()
+```
+
+### Reference
+
+For more info on `ff.create_dendrogram()`, see the [full function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_dendrogram.html)
diff -Nru plotly-5.20.0+dfsg/doc/python/density-heatmaps.md plotly-7.1.0+dfsg1/doc/python/density-heatmaps.md
--- plotly-5.20.0+dfsg/doc/python/density-heatmaps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/density-heatmaps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,74 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make a density heatmap in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Density Heatmap
+    order: 6
+    page_type: u-guide
+    permalink: python/density-heatmaps/
+    redirect_from: python/mapbox-density-heatmaps/
+    thumbnail: thumbnail/mapbox-density.png
+---
+
+### Density map with `plotly.express`
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.density_map`, each row of the DataFrame is represented as a point smoothed with a given radius of influence.
+
+```python
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv')
+
+import plotly.express as px
+fig = px.density_map(df, lat='Latitude', lon='Longitude', z='Magnitude', radius=10,
+                        center=dict(lat=0, lon=180), zoom=0,
+                        map_style="open-street-map")
+fig.show()
+```
+
+### Density map with `plotly.graph_objects`
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Densitymap` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import pandas as pd
+quakes = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv')
+
+import plotly.graph_objects as go
+fig = go.Figure(go.Densitymap(lat=quakes.Latitude, lon=quakes.Longitude, z=quakes.Magnitude,
+                                 radius=10))
+fig.update_layout(map_style="open-street-map", map_center_lon=180)
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+
+#### Reference
+
+See [function reference for `px.(density_map)`](https://plotly.com/python-api-reference/generated/plotly.express.density_map) or https://plotly.com/python/reference/densitymap/ for available attribute options.
+
diff -Nru plotly-5.20.0+dfsg/doc/python/discrete-color.md plotly-7.1.0+dfsg1/doc/python/discrete-color.md
--- plotly-5.20.0+dfsg/doc/python/discrete-color.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/discrete-color.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,259 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to use and configure discrete color sequences, also known as
+      categorical or qualitative color scales.
+    display_as: file_settings
+    has_thumbnail: true
+    ipynb: ~notebook_demo/187
+    language: python
+    layout: base
+    name: Discrete Colors
+    order: 30
+    permalink: python/discrete-color/
+    thumbnail: thumbnail/heatmap_colorscale.jpg
+    v4upgrade: true
+---
+
+### Discrete vs Continuous Color
+
+In the same way as the X or Y position of a mark in cartesian coordinates can be used to represent continuous values (i.e. amounts or moments in time) or categories (i.e. labels), color can be used to represent continuous or discrete data. This page is about using color to represent **categorical** data using discrete colors, but Plotly can also [represent continuous values with color](/python/colorscales/).
+
+### Discrete Color Concepts
+
+This document explains the following discrete-color-related concepts:
+
+- **color sequences** are lists of colors to be mapped onto discrete data values. No interpolation occurs when using color sequences, unlike with [continuous color scales](/python/colorscales/), and each color is used as-is. Color sequence defaults depend on the `layout.colorway` attribute of the active [template](/python/templates/), and can be explicitly specified using the `color_discrete_sequence` argument for many [Plotly Express](/python/plotly-express/) functions.
+- **legends** are visible representations of the mapping between colors and data values. Legend markers also change shape when used with various kinds of traces, such as symbols or lines for scatter-like traces. [Legends are configurable](/python/legend/) under the `layout.legend` attribute. Legends are the discrete equivalent of [continuous color bars](/python/colorscales/)
+
+### Discrete Color with Plotly Express
+
+Most Plotly Express functions accept a `color` argument which automatically assigns data values to discrete colors **if the data is non-numeric**. If the data is numeric, the color will automatically be considered [continuous](/python/colorscales/). This means that numeric strings must be parsed to be used for continuous color, and conversely, numbers used as category codes must be converted to strings.
+
+For example, in the `tips` dataset, the `smoker` column contains strings:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="smoker",
+                 title="String 'smoker' values mean discrete colors")
+
+fig.show()
+```
+
+The `size` column, however, contains numbers:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="size",
+                 title="Numeric 'size' values mean continuous color")
+
+fig.show()
+```
+
+Converting this column to strings is very straightforward, but note that the ordering in the legend is not sequential by default (see below for how to control discrete order):
+
+```python
+import plotly.express as px
+df = px.data.tips()
+df["size"] = df["size"].astype(str)
+fig = px.scatter(df, x="total_bill", y="tip", color="size",
+                 title="String 'size' values mean discrete colors")
+
+fig.show()
+```
+
+Converting a string column to a numeric one is also quite straightforward:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+df["size"] = df["size"].astype(str) #convert to string
+df["size"] = df["size"].astype(float) #convert back to numeric
+
+fig = px.scatter(df, x="total_bill", y="tip", color="size",
+                 title="Numeric 'size' values mean continuous color")
+
+fig.show()
+```
+
+### Discrete Colors in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'discrete-color', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Color Sequences in Plotly Express
+
+By default, Plotly Express will use the color sequence from the active [template](/python/templates/)'s `layout.colorway` attribute, and the default active template is `plotly` which uses the `plotly` color sequence. You can choose any of the following built-in qualitative color sequences from the `px.colors.qualitative` module, however, or define your own.
+
+```python
+import plotly.express as px
+
+fig = px.colors.qualitative.swatches()
+fig.show()
+```
+
+Color sequences in the `px.colors.qualitative` module are stored as lists of CSS colors:
+
+```python
+import plotly.express as px
+
+print(px.colors.qualitative.Plotly)
+```
+
+Here is an example that creates a scatter plot using Plotly Express, with points colored using the built-in qualitative `G10` color sequence.
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.line(df, y="lifeExp", x="year", color="continent", line_group="country",
+              line_shape="spline", render_mode="svg",
+             color_discrete_sequence=px.colors.qualitative.G10,
+             title="Built-in G10 color sequence")
+
+fig.show()
+```
+
+### Explicitly Constructing a Color Sequence
+
+The Plotly Express `color_discrete_sequence` argument accepts explicitly-constructed color sequences as well, as lists of CSS colors:
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.bar(df, y="continent", x="pop", color="continent", orientation="h", hover_name="country",
+             color_discrete_sequence=["red", "green", "blue", "goldenrod", "magenta"],
+             title="Explicit color sequence"
+            )
+
+fig.show()
+```
+
+**_Warning_**: If your color sequence has fewer colors than the number of unique values in the column you are mapping to `color`, the colors will cycle through and repeat, possibly leading to ambiguity:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="day",
+             color_discrete_sequence=["red", "blue"],
+             title="<b>Ambiguous!</b> Explicit color sequence cycling because it is too short"
+            )
+
+fig.show()
+```
+
+### Directly Mapping Colors to Data Values
+
+The example above assigned colors to data values on a first-come-first-served basis, but you can directly map colors to data values if this is important to your application with `color_discrete_map`. Note that this does not change the order in which values appear in the figure or legend, as can be controlled below:
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.bar(df, y="continent", x="pop", color="continent", orientation="h", hover_name="country",
+             color_discrete_map={
+                "Europe": "red",
+                "Asia": "green",
+                "Americas": "blue",
+                "Oceania": "goldenrod",
+                "Africa": "magenta"},
+             title="Explicit color mapping")
+
+fig.show()
+```
+
+If your data set already contains valid CSS colors which you wish to use directly, you can pass the special value `"identity"` to `color_discrete_map`, in which case the legend is hidden by default, and the color does not appear in the hover label:
+
+```python
+import plotly.express as px
+
+fig = px.bar(x=["a","b","c"], y=[1,3,2], color=["red", "goldenrod", "#00D"], color_discrete_map="identity")
+fig.show()
+```
+
+### Controlling Discrete Color Order
+
+Plotly Express lets you specify an ordering over categorical variables with `category_orders`, which will apply to colors and legends as well as symbols, [axes](/python/axes/) and [facets](/python/facet-plots/). This can be used with either `color_discrete_sequence` or `color_discrete_map`.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.bar(df, y="continent", x="pop", color="continent", orientation="h", hover_name="country",
+             color_discrete_sequence=["red", "green", "blue", "goldenrod", "magenta"],
+             category_orders={"continent": ["Oceania", "Europe", "Asia", "Africa", "Americas"]},
+             title="Explicit color sequence with explicit ordering"
+            )
+
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.bar(df, y="continent", x="pop", color="continent", orientation="h", hover_name="country",
+             color_discrete_map={
+                "Europe": "red",
+                "Asia": "green",
+                "Americas": "blue",
+                "Oceania": "goldenrod",
+                "Africa": "magenta"},
+             category_orders={"continent": ["Oceania", "Europe", "Asia", "Africa", "Americas"]},
+             title="Explicit color mapping with explicit ordering"
+            )
+
+fig.show()
+```
+
+### Using Sequential Scales as Discrete Sequences
+
+In most cases, discrete/qualitative/categorical data values have no meaningful natural ordering, such as in the continents example used above. In some cases, however, there is a meaningful order, and in this case it can be helpful and appealing to use part of a continuous scale as a discrete sequence, as in the following [wind rose chart](/python/wind-rose-charts/):
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.bar_polar(df, r="frequency", theta="direction", color="strength",
+                   color_discrete_sequence= px.colors.sequential.Plasma_r,
+                   title="Part of a continuous color scale used as a discrete sequence"
+                  )
+fig.show()
+```
+
+This works because just like in `px.colors.qualitative`, all [built-in continuous color scales](/python/builtin-colorscales/) are stored as lists of CSS colors:
+
+```python
+import plotly.express as px
+
+print(px.colors.sequential.Plasma)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/distplot.md plotly-7.1.0+dfsg1/doc/python/distplot.md
--- plotly-5.20.0+dfsg/doc/python/distplot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/distplot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,74 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make interactive Distplots in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Distplots
+    order: 4
+    page_type: example_index
+    permalink: python/distplot/
+    thumbnail: thumbnail/distplot.jpg
+---
+
+## Combined statistical representations with px.histogram
+
+Several representations of statistical distributions are available in plotly, such as [histograms](https://plotly.com/python/histograms/), [violin plots](https://plotly.com/python/violin/), [box plots](https://plotly.com/python/box-plots/) (see [the complete list here](https://plotly.com/python/statistical-charts/)). It is also possible to combine several representations in the same plot.
+
+For example, the `plotly.express` function `px.histogram` can add a subplot with a different statistical representation than the histogram, given by the parameter `marginal`. [Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", color="sex", marginal="rug",
+                   hover_data=df.columns)
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", color="sex",
+                   marginal="box", # or violin, rug
+                   hover_data=df.columns)
+fig.show()
+```
+
+### Combined statistical representations in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'distplot', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
diff -Nru plotly-5.20.0+dfsg/doc/python/dot-plots.md plotly-7.1.0+dfsg1/doc/python/dot-plots.md
--- plotly-5.20.0+dfsg/doc/python/dot-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/dot-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,182 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make dot plots in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Dot Plots
+    order: 6
+    page_type: u-guide
+    permalink: python/dot-plots/
+    thumbnail: thumbnail/dot-plot.jpg
+---
+
+#### Basic Dot Plot
+
+Dot plots (also known as [Cleveland dot plots](<https://en.wikipedia.org/wiki/Dot_plot_(statistics)>)) are [scatter plots](https://plotly.com/python/line-and-scatter/) with one categorical axis and one continuous axis. They can be used to show changes between two (or more) points in time or between two (or more) conditions. Compared to a [bar chart](/python/bar-charts/), dot plots can be less cluttered and allow for an easier comparison between conditions.
+
+For the same data, we show below how to create a dot plot using either `px.scatter` or `go.Scatter`.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.scatter(df, y="nation", x="count", color="medal", symbol="medal")
+fig.update_traces(marker_size=10)
+fig.show()
+```
+
+```python
+import plotly.express as px
+import pandas as pd
+
+schools = ["Brown", "NYU", "Notre Dame", "Cornell", "Tufts", "Yale",
+           "Dartmouth", "Chicago", "Columbia", "Duke", "Georgetown",
+           "Princeton", "U.Penn", "Stanford", "MIT", "Harvard"]
+n_schools = len(schools)
+
+women_salary = [72, 67, 73, 80, 76, 79, 84, 78, 86, 93, 94, 90, 92, 96, 94, 112]
+men_salary = [92, 94, 100, 107, 112, 114, 114, 118, 119, 124, 131, 137, 141, 151, 152, 165]
+
+df = pd.DataFrame(dict(school=schools*2, salary=men_salary + women_salary,
+                       gender=["Men"]*n_schools + ["Women"]*n_schools))
+
+# Use column names of df for the different parameters x, y, color, ...
+fig = px.scatter(df, x="salary", y="school", color="gender",
+                 title="Gender Earnings Disparity",
+                 labels={"salary":"Annual Salary (in thousands)"} # customize axis label
+                )
+
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+
+schools = ["Brown", "NYU", "Notre Dame", "Cornell", "Tufts", "Yale",
+           "Dartmouth", "Chicago", "Columbia", "Duke", "Georgetown",
+           "Princeton", "U.Penn", "Stanford", "MIT", "Harvard"]
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=[72, 67, 73, 80, 76, 79, 84, 78, 86, 93, 94, 90, 92, 96, 94, 112],
+    y=schools,
+    marker=dict(color="crimson", size=12),
+    mode="markers",
+    name="Women",
+))
+
+fig.add_trace(go.Scatter(
+    x=[92, 94, 100, 107, 112, 114, 114, 118, 119, 124, 131, 137, 141, 151, 152, 165],
+    y=schools,
+    marker=dict(color="gold", size=12),
+    mode="markers",
+    name="Men",
+))
+
+fig.update_layout(
+    title=dict(
+        text="Gender Earnings Disparity"
+    ),
+    xaxis=dict(
+        title=dict(
+            text="Annual Salary (in thousands)"
+        )
+    ),
+    yaxis=dict(
+        title=dict(
+            text="School"
+        )
+    ),
+)
+
+fig.show()
+```
+
+#### Styled Categorical Dot Plot
+
+```python
+import plotly.graph_objects as go
+
+country = ['Switzerland (2011)', 'Chile (2013)', 'Japan (2014)',
+           'United States (2012)', 'Slovenia (2014)', 'Canada (2011)',
+           'Poland (2010)', 'Estonia (2015)', 'Luxembourg (2013)', 'Portugal (2011)']
+voting_pop = [40, 45.7, 52, 53.6, 54.1, 54.2, 54.5, 54.7, 55.1, 56.6]
+reg_voters = [49.1, 42, 52.7, 84.3, 51.7, 61.1, 55.3, 64.2, 91.1, 58.9]
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=voting_pop,
+    y=country,
+    name='Percent of estimated voting age population',
+    marker=dict(
+        color='rgba(156, 165, 196, 0.95)',
+        line_color='rgba(156, 165, 196, 1.0)',
+    )
+))
+fig.add_trace(go.Scatter(
+    x=reg_voters, y=country,
+    name='Percent of estimated registered voters',
+    marker=dict(
+        color='rgba(204, 204, 204, 0.95)',
+        line_color='rgba(217, 217, 217, 1.0)'
+    )
+))
+
+fig.update_traces(mode='markers', marker=dict(line_width=1, symbol='circle', size=16))
+
+fig.update_layout(
+    title=dict(text="Votes cast for ten lowest voting age population in OECD countries"),
+    xaxis=dict(
+        showgrid=False,
+        showline=True,
+        linecolor='rgb(102, 102, 102)',
+        tickfont_color='rgb(102, 102, 102)',
+        showticklabels=True,
+        dtick=10,
+        ticks='outside',
+        tickcolor='rgb(102, 102, 102)',
+    ),
+    margin=dict(l=140, r=40, b=50, t=80),
+    legend=dict(
+        font_size=10,
+        yanchor='middle',
+        xanchor='right',
+    ),
+    width=800,
+    height=600,
+    paper_bgcolor='white',
+    plot_bgcolor='white',
+    hovermode='closest',
+)
+fig.show()
+```
+
+### Reference
+
+See https://plotly.com/python/reference/scatter/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/dropdowns.md plotly-7.1.0+dfsg1/doc/python/dropdowns.md
--- plotly-5.20.0+dfsg/doc/python/dropdowns.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/dropdowns.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,547 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.0
+  plotly:
+    description: How to add dropdowns to update Plotly chart attributes in Python.
+    display_as: controls
+    language: python
+    layout: base
+    name: Dropdown Menus
+    order: 2
+    page_type: example_index
+    permalink: python/dropdowns/
+    thumbnail: thumbnail/dropdown.jpg
+---
+
+#### Methods
+The [updatemenu method](https://plotly.com/python/reference/layout/updatemenus/#layout-updatemenus-buttons-method) determines which [plotly.js function](https://plotly.com/javascript/plotlyjs-function-reference/) will be used to modify the chart. There are 4 possible methods:
+- `"restyle"`: modify data or data attributes
+- `"relayout"`: modify layout attributes
+- `"update"`: modify data **and** layout attributes
+- `"animate"`: start or pause an [animation](https://plotly.com/python/#animations)
+
+
+## Restyle Dropdown
+The `"restyle"` method should be used when modifying the data and data attributes of the graph.
+
+### Update One Data Attribute
+
+This example demonstrates how to update a single data attribute: chart `type` with the `"restyle"` method.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# load dataset
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/volcano.csv")
+
+# create figure
+fig = go.Figure()
+
+# Add surface trace
+fig.add_trace(go.Surface(z=df.values.tolist(), colorscale="Viridis"))
+
+# Update plot sizing
+fig.update_layout(
+    width=800,
+    height=900,
+    autosize=False,
+    margin=dict(t=0, b=0, l=0, r=0),
+    template="plotly_white",
+)
+
+# Update 3D scene options
+fig.update_scenes(
+    aspectratio=dict(x=1, y=1, z=0.7),
+    aspectmode="manual"
+)
+
+# Add dropdown
+fig.update_layout(
+    updatemenus=[
+        dict(
+            buttons=list([
+                dict(
+                    args=["type", "surface"],
+                    label="3D Surface",
+                    method="restyle"
+                ),
+                dict(
+                    args=["type", "heatmap"],
+                    label="Heatmap",
+                    method="restyle"
+                )
+            ]),
+            direction="down",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.1,
+            xanchor="left",
+            y=1.1,
+            yanchor="top"
+        ),
+    ]
+)
+
+# Add annotation
+fig.update_layout(
+    annotations=[
+        dict(text="Trace type:", showarrow=False,
+        x=0, y=1.085, yref="paper", align="left")
+    ]
+)
+
+fig.show()
+```
+
+### Update Several Data Attributes
+
+This example demonstrates how to update several data attributes: colorscale, colorscale direction, and line display with the "restyle" method.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# load dataset
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/volcano.csv")
+
+# Create figure
+fig = go.Figure()
+
+# Add surface trace
+fig.add_trace(go.Heatmap(z=df.values.tolist(), colorscale="Viridis"))
+
+# Update plot sizing
+fig.update_layout(
+    width=800,
+    height=900,
+    autosize=False,
+    margin=dict(t=100, b=0, l=0, r=0),
+)
+
+# Update 3D scene options
+fig.update_scenes(
+    aspectratio=dict(x=1, y=1, z=0.7),
+    aspectmode="manual"
+)
+
+# Add dropdowns
+button_layer_1_height = 1.08
+fig.update_layout(
+    updatemenus=[
+        dict(
+            buttons=list([
+                dict(
+                    args=["colorscale", "Viridis"],
+                    label="Viridis",
+                    method="restyle"
+                ),
+                dict(
+                    args=["colorscale", "Cividis"],
+                    label="Cividis",
+                    method="restyle"
+                ),
+                dict(
+                    args=["colorscale", "Blues"],
+                    label="Blues",
+                    method="restyle"
+                ),
+                dict(
+                    args=["colorscale", "Greens"],
+                    label="Greens",
+                    method="restyle"
+                ),
+            ]),
+            direction="down",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.1,
+            xanchor="left",
+            y=button_layer_1_height,
+            yanchor="top"
+        ),
+        dict(
+            buttons=list([
+                dict(
+                    args=["reversescale", False],
+                    label="False",
+                    method="restyle"
+                ),
+                dict(
+                    args=["reversescale", True],
+                    label="True",
+                    method="restyle"
+                )
+            ]),
+            direction="down",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.37,
+            xanchor="left",
+            y=button_layer_1_height,
+            yanchor="top"
+        ),
+        dict(
+            buttons=list([
+                dict(
+                    args=[{"contours.showlines": False, "type": "contour"}],
+                    label="Hide lines",
+                    method="restyle"
+                ),
+                dict(
+                    args=[{"contours.showlines": True, "type": "contour"}],
+                    label="Show lines",
+                    method="restyle"
+                ),
+            ]),
+            direction="down",
+            pad={"r": 10, "t": 10},
+            showactive=True,
+            x=0.58,
+            xanchor="left",
+            y=button_layer_1_height,
+            yanchor="top"
+        ),
+    ]
+)
+
+fig.update_layout(
+    annotations=[
+        dict(text="colorscale", x=0, xref="paper", y=1.06, yref="paper",
+                             align="left", showarrow=False),
+        dict(text="Reverse<br>Colorscale", x=0.25, xref="paper", y=1.07,
+                             yref="paper", showarrow=False),
+        dict(text="Lines", x=0.54, xref="paper", y=1.06, yref="paper",
+                             showarrow=False)
+    ])
+
+fig.show()
+```
+
+## Relayout Dropdown
+The `"relayout"` method should be used when modifying the layout attributes of the graph.<br>
+
+### Update One Layout Attribute
+
+This example demonstrates how to update a layout attribute: chart `type` with the `"relayout"` method.
+
+```python
+import plotly.graph_objects as go
+
+# Generate dataset
+import numpy as np
+np.random.seed(1)
+
+x0 = np.random.normal(2, 0.4, 400)
+y0 = np.random.normal(2, 0.4, 400)
+x1 = np.random.normal(3, 0.6, 600)
+y1 = np.random.normal(6, 0.4, 400)
+x2 = np.random.normal(4, 0.2, 200)
+y2 = np.random.normal(4, 0.4, 200)
+
+# Create figure
+fig = go.Figure()
+
+# Add traces
+fig.add_trace(
+    go.Scatter(
+        x=x0,
+        y=y0,
+        mode="markers",
+        marker=dict(color="DarkOrange")
+    )
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=x1,
+        y=y1,
+        mode="markers",
+        marker=dict(color="Crimson")
+    )
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=x2,
+        y=y2,
+        mode="markers",
+        marker=dict(color="RebeccaPurple")
+    )
+)
+
+# Add buttons that add shapes
+cluster0 = [dict(type="circle",
+                            xref="x", yref="y",
+                            x0=min(x0), y0=min(y0),
+                            x1=max(x0), y1=max(y0),
+                            line=dict(color="DarkOrange"))]
+cluster1 = [dict(type="circle",
+                            xref="x", yref="y",
+                            x0=min(x1), y0=min(y1),
+                            x1=max(x1), y1=max(y1),
+                            line=dict(color="Crimson"))]
+cluster2 = [dict(type="circle",
+                            xref="x", yref="y",
+                            x0=min(x2), y0=min(y2),
+                            x1=max(x2), y1=max(y2),
+                            line=dict(color="RebeccaPurple"))]
+
+fig.update_layout(
+    updatemenus=[
+        dict(buttons=list([
+            dict(label="None",
+                 method="relayout",
+                 args=["shapes", []]),
+            dict(label="Cluster 0",
+                 method="relayout",
+                 args=["shapes", cluster0]),
+            dict(label="Cluster 1",
+                 method="relayout",
+                 args=["shapes", cluster1]),
+            dict(label="Cluster 2",
+                 method="relayout",
+                 args=["shapes", cluster2]),
+            dict(label="All",
+                 method="relayout",
+                 args=["shapes", cluster0 + cluster1 + cluster2])
+        ]),
+        )
+    ]
+)
+
+# Update remaining layout properties
+fig.update_layout(
+    title_text="Highlight Clusters",
+    showlegend=False,
+)
+
+fig.show()
+```
+
+### Update Dropdown
+
+The `"update"` method should be used when modifying the data and layout sections of the graph.<br>
+This example demonstrates how to update which traces are displayed while simultaneously updating layout attributes such as the chart title and annotations.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# Load dataset
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
+df.columns = [col.replace("AAPL.", "") for col in df.columns]
+
+# Initialize figure
+fig = go.Figure()
+
+# Add Traces
+
+fig.add_trace(
+    go.Scatter(x=list(df.Date),
+               y=list(df.High),
+               name="High",
+               line=dict(color="DarkBlue")))
+
+fig.add_trace(
+    go.Scatter(x=list(df.Date),
+               y=[df.High.mean()] * len(df.index),
+               name="High Average",
+               visible=False,
+               line=dict(color="DarkBlue", dash="dash")))
+
+fig.add_trace(
+    go.Scatter(x=list(df.Date),
+               y=list(df.Low),
+               name="Low",
+               line=dict(color="Crimson")))
+
+fig.add_trace(
+    go.Scatter(x=list(df.Date),
+               y=[df.Low.mean()] * len(df.index),
+               name="Low Average",
+               visible=False,
+               line=dict(color="Crimson", dash="dash")))
+
+# Add Annotations and Buttons
+high_annotations = [dict(x="2016-03-01",
+                         y=df.High.mean(),
+                         xref="x", yref="y",
+                         text="High Average:<br> %.3f" % df.High.mean(),
+                         ax=0, ay=-40),
+                    dict(x=df.Date[df.High.idxmax()],
+                         y=df.High.max(),
+                         xref="x", yref="y",
+                         text="High Max:<br> %.3f" % df.High.max(),
+                         ax=-40, ay=-40)]
+low_annotations = [dict(x="2015-05-01",
+                        y=df.Low.mean(),
+                        xref="x", yref="y",
+                        text="Low Average:<br> %.3f" % df.Low.mean(),
+                        ax=0, ay=40),
+                   dict(x=df.Date[df.High.idxmin()],
+                        y=df.Low.min(),
+                        xref="x", yref="y",
+                        text="Low Min:<br> %.3f" % df.Low.min(),
+                        ax=0, ay=40)]
+
+fig.update_layout(
+    updatemenus=[
+        dict(
+            active=0,
+            buttons=list([
+                dict(label="None",
+                     method="update",
+                     args=[{"visible": [True, False, True, False]},
+                           {"title": "Yahoo",
+                            "annotations": []}]),
+                dict(label="High",
+                     method="update",
+                     args=[{"visible": [True, True, False, False]},
+                           {"title": "Yahoo High",
+                            "annotations": high_annotations}]),
+                dict(label="Low",
+                     method="update",
+                     args=[{"visible": [False, False, True, True]},
+                           {"title": "Yahoo Low",
+                            "annotations": low_annotations}]),
+                dict(label="Both",
+                     method="update",
+                     args=[{"visible": [True, True, True, True]},
+                           {"title": "Yahoo",
+                            "annotations": high_annotations + low_annotations}]),
+            ]),
+        )
+    ])
+
+# Set title
+fig.update_layout(title_text="Yahoo")
+
+fig.show()
+```
+
+### Graph Selection Dropdowns in Jinja
+
+It is straight forward to create each potential view as a separate graph and then use Jinja to insert each potential view into a div on a JavaScript enabled webpage with a dropdown that chooses which div to display. This approach produces code that requires little customization or updating as you e.g. add, drop, or reorder views or traces, so it is particularly compelling for prototyping and rapid iteration. It produces web pages that are larger than the webpages produced through the built in method which is a consideration for very large figures with hundreds or thousands of data points in traces that appear in multiple selections. This approach requires both a Python program and a Jinja template file.  The documentation on [using Jinja templates with Plotly](https://plotly.com/python/interactive-html-export/#inserting-plotly-output-into-html-using-a-jinja2-template) is relevant background.
+
+<!-- #region -->
+
+#### Python Code File
+
+```python
+import plotly.express as px
+from jinja2 import Template
+import collections
+# Load the gapminder dataset
+df = px.data.gapminder()
+
+# Create a dictionary with Plotly figures as values
+fig_dict = {}
+
+# we need to fill that dictionary with figures.  this example assumes that each figure has a title and that
+# we want to use the titles as descriptions in the drop down
+# This example happens to fill the dictionary by creating a scatter plot for each continent using the 2007 Gapminder data
+for continent in df['continent'].unique():
+    # Filter data for the current continent
+    continent_data = df[(df['continent'] == continent) & (df['year'] == 2007)]
+
+    fig_dict[continent] = px.scatter(continent_data, x='gdpPercap', y='lifeExp',
+                     title=f'GDP vs Life Expectancy for {continent}',
+                     labels={'gdpPercap': 'GDP per Capita (USD)', 'lifeExp': 'Life Expectancy (Years)'},
+                     hover_name='country',size="pop", size_max=55
+                     )
+    #Standardizing the axes makes the graphs easier to compare
+    fig_dict[continent].update_xaxes(range=[0,50000])
+    fig_dict[continent].update_yaxes(range=[25,90])
+
+
+# Create a dictionary, data_for_jinja with two entries:
+# the value for the "dropdown_entries" key is a string containing a series of <option> tags, one tag for each item in the drop down
+# the value for the "divs" key is a string with a series of <div> tags, each containing the content that appears only when the user selects the corresponding item from the dropdown
+# in this example, the content of each div is a figure and descriptive text.
+data_for_jinja= collections.defaultdict(str)
+text_dict = {}
+for n, figname in enumerate(fig_dict.keys()):
+    text_dict[figname]=f"Here is some custom text about the {figname} figure"  #This is a succinct way to populate text_dict; in practice you'd probably populate it manually elsewhere
+    data_for_jinja["dropdown_entries"]+=f"<option value='{figname}'>{fig_dict[figname].layout.title.text}</option>"
+    #YOU MAY NEED TO UPDATE THE LINK TO THE LATEST PLOTLY.JS
+    fig_html = fig_dict[figname].to_html(full_html=False, config=dict(responsive=False, scrollZoom=False, doubleClick=False), include_plotlyjs = "cdn")
+    initially_hide_divs_other_than_the_first = "style=""display:none;"""*(n>0)
+    data_for_jinja["divs"]+=f'<div id="{figname}" class="content-div" {initially_hide_divs_other_than_the_first}>{fig_html}{text_dict[figname]}</div>'
+
+# Insert data into the template and write the file to disk
+# You'll need to add the path to your template and to your preferred output location
+input_template_path=r"<path-to-Jinja-template.html>"
+output_html_path=r"<path-to-output-file.html>"
+
+with open(output_html_path, "w", encoding='utf-8') as output_file:
+    with open(input_template_path) as template_file:
+        j2_template = Template(template_file.read())
+        output_file.write(j2_template.render(data_for_jinja))
+```
+
+#### Jinja HTML Template
+
+
+```
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+
+</head>
+<body>
+    <div class="container">
+        <h1>Select an analysis</h1>
+        <select id="dropdown" class="form-control">
+    {{ dropdown_entries }}
+        </select>
+
+
+        {{ divs }}
+
+    </div>
+
+    <script>
+        document.getElementById('dropdown').addEventListener('change', function() {
+            const divs = document.querySelectorAll('.content-div');
+            divs.forEach(div => div.style.display = 'none');
+
+            const selectedDiv = document.getElementById(this.value);
+            if (selectedDiv) {
+                selectedDiv.style.display = 'block';
+            }
+        });
+    </script>
+</body>
+</html>
+```
+
+<!-- #endregion -->
+
+#### Reference
+See https://plotly.com/python/reference/layout/updatemenus/ for more information about `updatemenu` dropdowns.
diff -Nru plotly-5.20.0+dfsg/doc/python/dumbbell-plots.md plotly-7.1.0+dfsg1/doc/python/dumbbell-plots.md
--- plotly-5.20.0+dfsg/doc/python/dumbbell-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/dumbbell-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,200 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.0
+  plotly:
+    description: How to create dumbbell plots in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Dumbbell Plots
+    order: 19
+    page_type: example_index
+    permalink: python/dumbbell-plots/
+    thumbnail: thumbnail/dumbbell-plot.jpg
+---
+
+## Basic Dumbbell Plot
+
+
+Dumbbell plots are useful for demonstrating change between two sets of data points, for example, the population change for a selection of countries for two different years.
+
+In this example, we compare life expectancy in 1952 with life expectancy in 2002 for countries in Europe.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+import pandas as pd
+
+df = data.gapminder()
+df = df.loc[(df.continent == "Europe") & (df.year.isin([1952, 2002]))]
+
+countries = (
+    df.loc[(df.continent == "Europe") & (df.year.isin([2002]))]
+    .sort_values(by=["lifeExp"], ascending=True)["country"]
+    .unique()
+)
+
+data = {"line_x": [], "line_y": [], "1952": [], "2002": [], "colors": [], "years": [], "countries": []}
+
+for country in countries:
+    data["1952"].extend([df.loc[(df.year == 1952) & (df.country == country)]["lifeExp"].values[0]])
+    data["2002"].extend([df.loc[(df.year == 2002) & (df.country == country)]["lifeExp"].values[0]])
+    data["line_x"].extend(
+        [
+            df.loc[(df.year == 1952) & (df.country == country)]["lifeExp"].values[0],
+            df.loc[(df.year == 2002) & (df.country == country)]["lifeExp"].values[0],
+            None,
+        ]
+    )
+    data["line_y"].extend([country, country, None]),
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=data["line_x"],
+            y=data["line_y"],
+            mode="lines",
+            showlegend=False,
+            marker=dict(
+                color="grey"
+            )
+        ),
+        go.Scatter(
+            x=data["1952"],
+            y=countries,
+            mode="markers",
+            name="1952",
+            marker=dict(
+                color="green",
+                size=10
+            )
+
+        ),
+        go.Scatter(
+            x=data["2002"],
+            y=countries,
+            mode="markers",
+            name="2002",
+            marker=dict(
+                color="blue",
+                size=10
+            )
+        ),
+    ]
+)
+
+fig.update_layout(
+    title=dict(text="Life Expectancy in Europe: 1952 and 2002"),
+    height=1000,
+    legend_itemclick=False
+)
+
+fig.show()
+
+```
+
+## Dumbbell Plot with Arrow Markers
+
+*Note: The `arrow`, `angleref`, and `standoff` properties used on the `marker` in this example are new in 5.11*
+
+In this example, we add arrow markers to the plot. The first trace adds the lines connecting the data points and arrow markers.
+The second trace adds circle markers. On the first trace, we use `standoff=8` to position the arrow marker back from the data point.
+For the arrow marker to point directly at the circle marker, this value should be half the circle marker size, which is hardcoded to 16 here.
+
+```python
+import pandas as pd
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+df = df.loc[(df.continent == "Europe") & (df.year.isin([1952, 2002]))]
+
+countries = (
+    df.loc[(df.continent == "Europe") & (df.year.isin([2002]))]
+    .sort_values(by=["lifeExp"], ascending=True)["country"]
+    .unique()
+)
+
+data = {"line_x": [], "line_y": [], "1952": [], "2002": [], "colors": [], "years": [], "countries": []}
+
+for country in countries:
+    data["1952"].extend([df.loc[(df.year == 1952) & (df.country == country)]["lifeExp"].values[0]])
+    data["2002"].extend([df.loc[(df.year == 2002) & (df.country == country)]["lifeExp"].values[0]])
+    data["line_x"].extend(
+        [
+            df.loc[(df.year == 1952) & (df.country == country)]["lifeExp"].values[0],
+            df.loc[(df.year == 2002) & (df.country == country)]["lifeExp"].values[0],
+            None,
+        ]
+    )
+    data["line_y"].extend([country, country, None]),
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=data["line_x"],
+            y=data["line_y"],
+            mode="markers+lines",
+            showlegend=False,
+            marker=dict(
+                symbol="arrow",
+                color="black",
+                size=16,
+                angleref="previous",
+                standoff=8
+            )
+        ),
+        go.Scatter(
+            x=data["1952"],
+            y=countries,
+            name="1952",
+            mode="markers",
+            marker=dict(
+                color="silver",
+                size=16,
+            )
+        ),
+        go.Scatter(
+            x=data["2002"],
+            y=countries,
+            name="2002",
+            mode="markers",
+            marker=dict(
+                color="lightskyblue",
+                size=16,
+            ),
+        ),
+    ]
+)
+
+fig.update_layout(
+    title=dict(text="Life Expectancy in Europe: 1952 and 2002"),
+    height=1000,
+    legend_itemclick=False
+)
+
+
+fig.show()
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/ecdf-plots.md plotly-7.1.0+dfsg1/doc/python/ecdf-plots.md
--- plotly-5.20.0+dfsg/doc/python/ecdf-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ecdf-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,182 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to add empirical cumulative distribution function (ECDF) plots.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Empirical Cumulative Distribution Plots
+    order: 16
+    page_type: u-guide
+    permalink: python/ecdf-plots/
+    thumbnail: thumbnail/figure-labels.png
+---
+
+### Overview
+
+[Empirical cumulative distribution function plots](https://en.wikipedia.org/wiki/Empirical_distribution_function) are a way to visualize the distribution of a variable, and Plotly Express has a built-in function, `px.ecdf()` to generate such plots. [Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Alternatives to ECDF plots for visualizing distributions include [histograms](https://plotly.com/python/histograms/), [violin plots](https://plotly.com/python/violin/), [box plots](https://plotly.com/python/box-plots/) and [strip charts](https://plotly.com/python/strip-charts/).
+
+### Simple ECDF Plots
+
+Providing a single column to the `x` variable yields a basic ECDF plot.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill")
+fig.show()
+```
+
+Providing multiple columns leverage's Plotly Express' [wide-form data support](https://plotly.com/python/wide-form/) to show multiple variables on the same plot.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x=["total_bill", "tip"])
+fig.show()
+```
+
+It is also possible to map another variable to the color dimension of a plot.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex")
+fig.show()
+```
+
+### Configuring the Y axis
+
+By default, the Y axis shows probability, but it is also possible to show raw counts by setting the `ecdfnorm` argument to `None` or to show percentages by setting it to `percent`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex", ecdfnorm=None)
+fig.show()
+```
+
+If a `y` value is provided, the Y axis is set to the sum of `y` rather than counts.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", y="tip", color="sex", ecdfnorm=None)
+fig.show()
+```
+
+### Reversed and Complementary CDF plots
+
+By default, the Y value represents the fraction of the data that is *at or below* the value on the X axis. Setting `ecdfmode` to `"reversed"` reverses this, with the Y axis representing the fraction of the data *at or above* the X value. Setting `ecdfmode` to `"complementary"` plots `1-ECDF`, meaning that the Y values represent the fraction of the data *above* the X value.
+
+In `standard` mode (the default), the right-most point is at 1 (or the total count/sum, depending on `ecdfnorm`) and the right-most point is above 0.
+
+```python
+import plotly.express as px
+fig = px.ecdf(df, x=[1,2,3,4], markers=True, ecdfmode="standard",
+              title="ecdfmode='standard' (Y=fraction at or below X value, this the default)")
+fig.show()
+```
+
+In `reversed` mode, the right-most point is at 1 (or the total count/sum, depending on `ecdfnorm`) and the left-most point is above 0.
+
+```python
+import plotly.express as px
+fig = px.ecdf(df, x=[1,2,3,4], markers=True, ecdfmode="reversed",
+              title="ecdfmode='reversed' (Y=fraction at or above X value)")
+fig.show()
+```
+
+In `complementary` mode, the right-most point is at 0 and no points are at 1 (or the total count/sum) per the definition of the CCDF as 1-ECDF, which has no point at 0.
+
+```python
+import plotly.express as px
+fig = px.ecdf(df, x=[1,2,3,4], markers=True, ecdfmode="complementary",
+              title="ecdfmode='complementary' (Y=fraction above X value)")
+fig.show()
+```
+
+### Orientation
+
+By default, plots are oriented vertically (i.e. the variable is on the X axis and counted/summed upwards), but this can be overridden with the `orientation` argument.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", y="tip", color="sex", ecdfnorm=None, orientation="h")
+fig.show()
+```
+
+### Markers and/or Lines
+
+ECDF Plots can be configured to show lines and/or markers.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex", markers=True)
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex", markers=True, lines=False)
+fig.show()
+```
+
+### Marginal Plots
+
+ECDF plots also support [marginal plots](https://plotly.com/python/marginal-plots/)
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex", markers=True, lines=False, marginal="histogram")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex", marginal="rug")
+fig.show()
+```
+
+### Facets
+
+ECDF Plots also support [faceting](https://plotly.com/python/facet-plots/)
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex", facet_row="time", facet_col="day")
+fig.show()
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/error-bars.md plotly-7.1.0+dfsg1/doc/python/error-bars.md
--- plotly-5.20.0+dfsg/doc/python/error-bars.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/error-bars.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,205 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.2.0
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to add error-bars to charts in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Error Bars
+    order: 1
+    page_type: example_index
+    permalink: python/error-bars/
+    thumbnail: thumbnail/error-bar.jpg
+---
+
+### Error Bars with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). For functions representing 2D data points such as [`px.scatter`](https://plotly.com/python/line-and-scatter/), [`px.line`](https://plotly.com/python/line-charts/), [`px.bar`](https://plotly.com/python/bar-charts/) etc., error bars are given as a column name which is the value of the `error_x` (for the error on x position) and `error_y` (for the error on y position).
+
+```python
+import plotly.express as px
+df = px.data.iris()
+df["e"] = df["sepal_width"]/100
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 error_x="e", error_y="e")
+fig.show()
+```
+
+#### Asymmetric Error Bars with Plotly Express
+
+```python
+import plotly.express as px
+df = px.data.iris()
+df["e_plus"] = df["sepal_width"]/100
+df["e_minus"] = df["sepal_width"]/40
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 error_y="e_plus", error_y_minus="e_minus")
+fig.show()
+```
+
+### Error Bars with graph_objects
+
+#### Basic Symmetric Error Bars
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatter(
+        x=[0, 1, 2],
+        y=[6, 10, 2],
+        error_y=dict(
+            type='data', # value of error bar given in data coordinates
+            array=[1, 2, 3],
+            visible=True)
+    ))
+fig.show()
+```
+
+#### Asymmetric Error Bars
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatter(
+        x=[1, 2, 3, 4],
+        y=[2, 1, 3, 4],
+        error_y=dict(
+            type='data',
+            symmetric=False,
+            array=[0.1, 0.2, 0.1, 0.1],
+            arrayminus=[0.2, 0.4, 1, 0.2])
+        ))
+fig.show()
+```
+
+#### Error Bars as a Percentage of the y Value
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatter(
+        x=[0, 1, 2],
+        y=[6, 10, 2],
+        error_y=dict(
+            type='percent', # value of error bar given as percentage of y value
+            value=50,
+            visible=True)
+    ))
+fig.show()
+```
+
+#### Asymmetric Error Bars with a Constant Offset
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatter(
+        x=[1, 2, 3, 4],
+        y=[2, 1, 3, 4],
+        error_y=dict(
+            type='percent',
+            symmetric=False,
+            value=15,
+            valueminus=25)
+    ))
+fig.show()
+```
+
+#### Horizontal Error Bars
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatter(
+        x=[1, 2, 3, 4],
+        y=[2, 1, 3, 4],
+        error_x=dict(
+            type='percent',
+            value=10)
+    ))
+fig.show()
+```
+
+#### Bar Chart with Error Bars
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Bar(
+    name='Control',
+    x=['Trial 1', 'Trial 2', 'Trial 3'], y=[3, 6, 4],
+    error_y=dict(type='data', array=[1, 0.5, 1.5])
+))
+fig.add_trace(go.Bar(
+    name='Experimental',
+    x=['Trial 1', 'Trial 2', 'Trial 3'], y=[4, 7, 3],
+    error_y=dict(type='data', array=[0.5, 1, 2])
+))
+fig.update_layout(barmode='group')
+fig.show()
+```
+
+#### Colored and Styled Error Bars
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x_theo = np.linspace(-4, 4, 100)
+sincx = np.sinc(x_theo)
+x = [-3.8, -3.03, -1.91, -1.46, -0.89, -0.24, -0.0, 0.41, 0.89, 1.01, 1.91, 2.28, 2.79, 3.56]
+y = [-0.02, 0.04, -0.01, -0.27, 0.36, 0.75, 1.03, 0.65, 0.28, 0.02, -0.11, 0.16, 0.04, -0.15]
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=x_theo, y=sincx,
+    name='sinc(x)'
+))
+fig.add_trace(go.Scatter(
+    x=x, y=y,
+    mode='markers',
+    name='measured',
+    error_y=dict(
+        type='constant',
+        value=0.1,
+        color='purple',
+        thickness=1.5,
+        width=3,
+    ),
+    error_x=dict(
+        type='constant',
+        value=0.2,
+        color='purple',
+        thickness=1.5,
+        width=3,
+    ),
+    marker=dict(color='purple', size=8)
+))
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/scatter/ for more information and chart attribute options!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/facet-plots.md plotly-7.1.0+dfsg1/doc/python/facet-plots.md
--- plotly-5.20.0+dfsg/doc/python/facet-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/facet-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,251 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make Facet and Trellis Plots in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Facet and Trellis Plots
+    order: 7
+    page_type: u-guide
+    permalink: python/facet-plots/
+    redirect_from:
+    - python/trellis-plots/
+    - python/facet-trellis/
+    thumbnail: thumbnail/facet-trellis-thumbnail.jpg
+---
+
+### Facet and Trellis Plots
+
+Facet plots, also known as trellis plots or small multiples, are figures made up of multiple subplots which have the same set of axes, where each subplot shows a subset of the data. While it is straightforward to use `plotly`'s
+[subplot capabilities](/python/subplots/) to make such figures, it's far easier to use the built-in `facet_row` and `facet_col` arguments in the various Plotly Express functions.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+### Scatter Plot Column Facets
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="smoker", facet_col="sex")
+fig.show()
+```
+
+### Bar Chart Row Facets
+
+There is a more presentation-ready horizontal, faceted bar chart in the [horizontal bar documentation](/python/horizontal-bar-charts/#Small-multiple-horizontal-bar-charts-show-each-component's-size-more-clearly-than-a-stacked-bar)
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="size", y="total_bill", color="sex", facet_row="smoker")
+fig.show()
+```
+
+### Wrapping Column Facets
+
+When the facet dimension has a large number of unique values, it is possible to wrap columns using the `facet_col_wrap` argument.
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.scatter(df, x='gdpPercap', y='lifeExp', color='continent', size='pop',
+                facet_col='year', facet_col_wrap=4)
+fig.show()
+```
+
+### Histogram Facet Grids
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", color="sex", facet_row="time", facet_col="day",
+       category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
+fig.show()
+```
+
+### Choropleth Column Facets
+
+*new in version 4.13*
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+df = df.melt(id_vars="district", value_vars=["Coderre", "Bergeron", "Joly"],
+            var_name="candidate", value_name="votes")
+geojson = px.data.election_geojson()
+
+fig = px.choropleth(df, geojson=geojson, color="votes", facet_col="candidate",
+                    locations="district", featureidkey="properties.district",
+                    projection="mercator"
+                   )
+fig.update_geos(fitbounds="locations", visible=False)
+fig.show()
+```
+
+### Adding Lines and Rectangles to Facet Plots
+
+*introduced in plotly 4.12*
+
+It is possible to add [labelled horizontal and vertical lines and rectangles](/python/horizontal-vertical-shapes/) to facet plots using `.add_hline()`, `.add_vline()`, `.add_hrect()` or `.add_vrect()`. The default `row` and `col` values are `"all"` but this can be overridden, as with the rectangle below, which only appears in the first column.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+fig = px.line(df, facet_col="company", facet_col_wrap=2)
+fig.add_hline(y=1, line_dash="dot",
+              annotation_text="Jan 1, 2018 baseline",
+              annotation_position="bottom right")
+
+fig.add_vrect(x0="2018-09-24", x1="2018-12-18", col=1,
+              annotation_text="decline", annotation_position="top left",
+              fillcolor="green", opacity=0.25, line_width=0)
+fig.show()
+
+```
+
+### Adding the Same Trace to All Facets
+
+*introduced in plotly 4.12*
+
+The `.add_trace()` method can be used to add a copy of the same trace to each facet, for example an overall linear regression line as below. The `legendgroup`/`showlegend` pattern below is recommended to avoid having a separate legend item for each copy of the trace. Note that as of v5.2.1, there is [a built-in option to add an overall trendline to all facets](https://plotly.com/python/linear-fits/) that uses this technique under the hood.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color='sex',
+                 facet_col="day", facet_row="time")
+
+import statsmodels.api as sm
+import plotly.graph_objects as go
+df = df.sort_values(by="total_bill")
+model = sm.OLS(df["tip"], sm.add_constant(df["total_bill"])).fit()
+
+#create the trace to be added to all facets
+trace = go.Scatter(x=df["total_bill"], y=model.predict(),
+                   line_color="black", name="overall OLS")
+
+# give it a legend group and hide it from the legend
+trace.update(legendgroup="trendline", showlegend=False)
+
+# add it to all rows/cols, but not to empty subplots
+fig.add_trace(trace, row="all", col="all", exclude_empty_subplots=True)
+
+# set only the last trace added to appear in the legend
+# `selector=-1` introduced in plotly v4.13
+fig.update_traces(selector=-1, showlegend=True)
+fig.show()
+```
+
+### Facets With Independent Axes
+
+By default, facet axes are linked together: zooming inside one of the facets will also zoom in the other facets. You can disable this behaviour when you use `facet_row` only, by disabling `matches` on the Y axes, or when using `facet_col` only, by disabling `matches` on the X axes. It is not recommended to use this approach when using `facet_row` and `facet_col` together, as in this case it becomes very hard to understand the labelling of axes and grid lines.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color='sex', facet_row="day")
+fig.update_yaxes(matches=None)
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color='sex', facet_col="day")
+fig.update_xaxes(matches=None)
+fig.show()
+```
+
+### Customizing Subplot Figure Titles
+
+Since subplot figure titles are [annotations](https://plotly.com/python/text-and-annotations/#simple-annotation), you can use the `for_each_annotation` function to customize them, for example to remove the equal-sign (`=`).
+
+In the following example, we pass a lambda function to `for_each_annotation` in order to change the figure subplot titles from `smoker=No` and `smoker=Yes` to just `No` and `Yes`.
+
+```python
+import plotly.express as px
+
+fig = px.scatter(px.data.tips(), x="total_bill", y="tip", facet_col="smoker")
+fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
+fig.show()
+```
+
+### Controlling Facet Ordering
+
+By default, Plotly Express lays out categorical data in the order in which it appears in the underlying data. Every 2-d cartesian Plotly Express function also includes a `category_orders` keyword argument which can be used to control [the order in which categorical axes are drawn](/python/categorical-axes/), but beyond that can also control [the order in which discrete colors appear in the legend](/python/discrete-color/), and the order in which facets are laid out.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="day", y="total_bill", color="smoker", barmode="group", facet_col="sex",
+             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"],
+                              "smoker": ["Yes", "No"],
+                              "sex": ["Male", "Female"]})
+fig.show()
+```
+
+### Controlling Facet Spacing
+
+The `facet_row_spacing` and `facet_col_spacing` arguments can be used to control the spacing between rows and columns. These values are specified in fractions of the plotting area in paper coordinates and not in pixels, so they will grow or shrink with the `width` and `height` of the figure.
+
+The defaults work well with 1-4 rows or columns at the default figure size with the default font size, but need to be reduced to around 0.01 for very large figures or figures with many rows or columns. Conversely, if activating tick labels on all facets, the spacing will need to be increased.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Africa'")
+
+fig = px.line(df, x="year", y="lifeExp", facet_col="country", facet_col_wrap=7,
+              facet_row_spacing=0.04, # default is 0.07 when facet_col_wrap is used
+              facet_col_spacing=0.04, # default is 0.03
+              height=600, width=800,
+              title="Life Expectancy in Africa")
+fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
+fig.update_yaxes(showticklabels=True)
+fig.show()
+```
+
+### Synchronizing axes in subplots with `matches`
+
+Using `facet_col` from `plotly.express` let [zoom](https://help.plotly.com/zoom-pan-hover-controls/#step-3-zoom-in-and-zoom-out-autoscale-the-plot) and [pan](https://help.plotly.com/zoom-pan-hover-controls/#step-6-pan-along-axes) each facet to the same range implicitly. However, if the subplots are created with `make_subplots`, the axis needs to be updated with `matches` parameter to update all the subplots accordingly.
+
+Zoom in one trace below, to see the other subplots zoomed to the same x-axis range. To pan all the subplots, click and drag from the center of x-axis to the side:
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+N = 20
+x = np.linspace(0, 1, N)
+
+fig = make_subplots(1, 3)
+for i in range(1, 4):
+    fig.add_trace(go.Scatter(x=x, y=np.random.random(N)), 1, i)
+fig.update_xaxes(matches='x')
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/figure-factories.md plotly-7.1.0+dfsg1/doc/python/figure-factories.md
--- plotly-5.20.0+dfsg/doc/python/figure-factories.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figure-factories.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,67 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.4
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.11
+  plotly:
+    description: Figure Factories are dedicated functions for creating very specific
+      types of plots.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Figure Factories
+    order: 34
+    permalink: python/figure-factories/
+    thumbnail: thumbnail/streamline.jpg
+---
+
+#### `plotly.figure_factory`
+
+The `plotly.figure_factory` module contains dedicated functions for creating very specific types of plots that are difficult to create with [graph objects](/python/graph-objects/) and [Plotly Express](/python/plotly-express/).
+
+The following plot types can be created with Figure Factory:
+
+  * [Dendrograms](/python/dendrogram/)
+  * [Hexagonal Binning Tile Map](/python/hexbin-map/)
+  * [Quiver Plots](/python/quiver-plots/) — since version 7.0, quiver plots are better made with the `go.Quiver` trace type. `create_quiver` remains available for its `angle` and `scaleratio` options.
+  * [Streamline Plots](/python/streamline-plots/)
+  * [Tables](/python/figure-factory-table/)
+  * [Ternary Contour Plots](/python/ternary-contour/)
+  * [Triangulated Surface Plots](/python/trisurf/)
+
+The following legacy Figure Factory functions have been replaced by Plotly Express functions, or native Graph Objects trace types, and have been removed from the library in version 7.0. Use the recommended alternatives instead:
+
+  * `create_2d_density`: use [`px.density_heatmap`](/python/2D-Histogram/)
+  * `create_annotated_heatmap`: use [`px.imshow`](/python/heatmaps/)
+  * `create_bullet`: use [`go.Indicator`](/python/indicator/)
+  * `create_candlestick`: use [`go.Candlestick`](/python/candlestick-charts/)
+  * `create_choropleth`: use [`px.choropleth`](/python/choropleth-maps/) with custom GeoJSON
+  * `create_distplot`: use [Plotly Express](/python/plotly-express/) functions like [`px.histogram`](/python/histograms/)
+  * `create_facet_grid`: use [Plotly Express](/python/plotly-express/) functions with the [`facet_row` and `facet_col` arguments](/python/facet-plots/)
+  * `create_gantt`: use [`px.timeline`](/python/gantt/)
+  * `create_hexbin_mapbox`: use [`create_hexbin_map`](/python/hexbin-map/)
+  * `create_ohlc`: use [`go.Ohlc`](/python/ohlc-charts/)
+  * `create_scatterplotmatrix`: use [`go.Splom`](/python/splom/)
+  * `create_violin`: use [`go.Violin`](/python/violin/)
+
+#### Reference
+
+For more information about the contents of `plotly.figure_factory`, please refer to our [API Reference documentation](https://plotly.com/python-api-reference/plotly.figure_factory.html).
diff -Nru plotly-5.20.0+dfsg/doc/python/figure-factory-subplots.md plotly-7.1.0+dfsg1/doc/python/figure-factory-subplots.md
--- plotly-5.20.0+dfsg/doc/python/figure-factory-subplots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figure-factory-subplots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,214 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.6
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: Subplots with Plotly Figure Factory Charts
+    display_as: multiple_axes
+    language: python
+    layout: base
+    name: Figure Factory Subplots
+    order: 4
+    page_type: example_index
+    permalink: python/figure-factory-subplots/
+    thumbnail: thumbnail/ff-subplots.jpg
+---
+
+#### Plotly's Figure Factory Module
+
+Plotly's Python API contains a [figure factory module](/python/figure-factories/) which includes many wrapper functions that create unique chart types that are not yet included in [plotly.js](https://github.com/plotly/plotly.js), Plotly's open-source graphing library. The figure factory functions create a full figure, so some Plotly features, such as subplotting, should be implemented slightly differently with these charts.
+
+
+#### Vertical Figure Factory Charts
+First create the figures that you'd like to appear in the subplot:
+
+```python
+import plotly.figure_factory as ff
+import plotly.graph_objects as go
+
+import numpy as np
+
+## Create first figure
+x1,y1 = np.meshgrid(np.arange(0, 2, .2), np.arange(0, 2, .2))
+u1 = np.cos(x1)*y1
+v1 = np.sin(x1)*y1
+
+fig1 = ff.create_quiver(x1, y1, u1, v1, name='Quiver')
+
+## Create second figure
+x = np.linspace(-3, 3, 100)
+y = np.linspace(-3, 3, 100)
+Y, X = np.meshgrid(x, y)
+u = -1 - X**2 + Y
+v = 1 + X - Y**2
+
+fig2 = ff.create_streamline(x, y, u, v, arrow_scale=.1, name='Streamline')
+```
+
+Edit the figures' x and y axes attributes to create subplots:
+
+```python
+for i in range(len(fig1.data)):
+    fig1.data[i].xaxis='x1'
+    fig1.data[i].yaxis='y1'
+
+fig1.layout.xaxis1.update({'anchor': 'y1'})
+fig1.layout.yaxis1.update({'anchor': 'x1', 'domain': [.55, 1]})
+
+for i in range(len(fig2.data)):
+    fig2.data[i].xaxis='x2'
+    fig2.data[i].yaxis='y2'
+
+# initialize xaxis2 and yaxis2
+fig2['layout']['xaxis2'] = {}
+fig2['layout']['yaxis2'] = {}
+
+fig2.layout.xaxis2.update({'anchor': 'y2'})
+fig2.layout.yaxis2.update({'anchor': 'x2', 'domain': [0, .45]})
+```
+
+Combine the data and layout objects to create a figure
+
+```python
+fig = go.Figure()
+fig.add_traces([fig1.data[0], fig2.data[0]])
+
+fig.layout.update(fig1.layout)
+fig.layout.update(fig2.layout)
+
+fig.show()
+```
+
+#### Horizontal Table and Chart
+
+```python
+import plotly.graph_objects as go
+import plotly.figure_factory as ff
+
+table_data = [['Team', 'Wins', 'Losses', 'Ties'],
+              ['Montréal<br>Canadiens', 18, 4, 0],
+              ['Dallas Stars', 18, 5, 0],
+              ['NY Rangers', 16, 5, 0],
+              ['Boston<br>Bruins', 13, 8, 0],
+              ['Chicago<br>Blackhawks', 13, 8, 0],
+              ['LA Kings', 13, 8, 0],
+              ['Ottawa<br>Senators', 12, 5, 0]]
+
+fig = ff.create_table(table_data, height_constant=60)
+
+teams = ['Montréal Canadiens', 'Dallas Stars', 'NY Rangers',
+         'Boston Bruins', 'Chicago Blackhawks', 'LA Kings', 'Ottawa Senators']
+GFPG = [3.54, 3.48, 3.0, 3.27, 2.83, 2.45, 3.18]
+GAPG = [2.17, 2.57, 2.0, 2.91, 2.57, 2.14, 2.77]
+
+trace1 = go.Scatter(x=teams, y=GFPG,
+                    marker=dict(color='#0099ff'),
+                    name='Goals For<br>Per Game',
+                    xaxis='x2', yaxis='y2')
+trace2 = go.Scatter(x=teams, y=GAPG,
+                    marker=dict(color='#404040'),
+                    name='Goals Against<br>Per Game',
+                    xaxis='x2', yaxis='y2')
+
+fig.add_traces([trace1, trace2])
+
+# initialize xaxis2 and yaxis2
+fig['layout']['xaxis2'] = {}
+fig['layout']['yaxis2'] = {}
+
+# Edit layout for subplots
+fig.layout.xaxis.update({'domain': [0, .5]})
+fig.layout.xaxis2.update({'domain': [0.6, 1.]})
+
+# The graph's yaxis MUST BE anchored to the graph's xaxis
+fig.layout.yaxis2.update({'anchor': 'x2'})
+fig.layout.yaxis2.update({'title': 'Goals'})
+
+# Update the margins to add a title and see graph x-labels.
+fig.layout.margin.update({'t':50, 'b':100})
+fig.layout.update({'title': '2016 Hockey Stats'})
+
+fig.show()
+```
+
+#### Vertical Table and Chart
+
+```python
+import plotly.graph_objects as go
+import plotly.figure_factory as ff
+
+# Add table data
+table_data = [['Team', 'Wins', 'Losses', 'Ties'],
+              ['Montréal<br>Canadiens', 18, 4, 0],
+              ['Dallas Stars', 18, 5, 0],
+              ['NY Rangers', 16, 5, 0],
+              ['Boston<br>Bruins', 13, 8, 0],
+              ['Chicago<br>Blackhawks', 13, 8, 0],
+              ['Ottawa<br>Senators', 12, 5, 0]]
+
+# Initialize a figure with ff.create_table(table_data)
+fig = ff.create_table(table_data, height_constant=60)
+
+# Add graph data
+teams = ['Montréal Canadiens', 'Dallas Stars', 'NY Rangers',
+         'Boston Bruins', 'Chicago Blackhawks', 'Ottawa Senators']
+GFPG = [3.54, 3.48, 3.0, 3.27, 2.83, 3.18]
+GAPG = [2.17, 2.57, 2.0, 2.91, 2.57, 2.77]
+
+# Make traces for graph
+trace1 = go.Bar(x=teams, y=GFPG, xaxis='x2', yaxis='y2',
+                marker=dict(color='#0099ff'),
+                name='Goals For<br>Per Game')
+trace2 = go.Bar(x=teams, y=GAPG, xaxis='x2', yaxis='y2',
+                marker=dict(color='#404040'),
+                name='Goals Against<br>Per Game')
+
+# Add trace data to figure
+fig.add_traces([trace1, trace2])
+
+# initialize xaxis2 and yaxis2
+fig['layout']['xaxis2'] = {}
+fig['layout']['yaxis2'] = {}
+
+# Edit layout for subplots
+fig.layout.yaxis.update({'domain': [0, .45]})
+fig.layout.yaxis2.update({'domain': [.6, 1]})
+
+# The graph's yaxis2 MUST BE anchored to the graph's xaxis2 and vice versa
+fig.layout.yaxis2.update({'anchor': 'x2'})
+fig.layout.xaxis2.update({'anchor': 'y2'})
+fig.layout.yaxis2.update({'title': 'Goals'})
+
+# Update the margins to add a title and see graph x-labels.
+fig.layout.margin.update({'t':75, 'l':50})
+fig.layout.update({'title': '2016 Hockey Stats'})
+
+# Update the height because adding a graph vertically will interact with
+# the plot height calculated for the table
+fig.layout.update({'height':800})
+
+# Plot!
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/subplots/ for more information on working with subplots. See https://plotly.com/python/reference/ for more information regarding chart attributes!
diff -Nru plotly-5.20.0+dfsg/doc/python/figure-factory-table.md plotly-7.1.0+dfsg1/doc/python/figure-factory-table.md
--- plotly-5.20.0+dfsg/doc/python/figure-factory-table.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figure-factory-table.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,281 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make tables in Python with Plotly's Figure Factory.
+    display_as: basic
+    language: python
+    layout: base
+    name: Figure Factory Tables
+    order: 15
+    permalink: python/figure-factory-table/
+    redirect_from:
+    - python/figure-factory/table/
+    - python/v3/figure-factory/table/
+    thumbnail: thumbnail/table.gif
+---
+
+Tables can be created using a [`table` trace type](/python/table/), or by using a [figure factory](/python/figure-factories/) as detailed in this page.
+
+#### Simple Table
+
+```python
+import plotly.figure_factory as ff
+
+data_matrix = [['Country', 'Year', 'Population'],
+               ['United States', 2000, 282200000],
+               ['Canada', 2000, 27790000],
+               ['United States', 2005, 295500000],
+               ['Canada', 2005, 32310000],
+               ['United States', 2010, 309000000],
+               ['Canada', 2010, 34000000]]
+
+fig = ff.create_table(data_matrix)
+fig.show()
+```
+
+#### Add Links
+
+```python
+import plotly.figure_factory as ff
+
+data_matrix = [['User', 'Language', 'Chart Type', '# of Views'],
+               ['<a href="https://plotly.com/~empet/folder/home">empet</a>',
+                '<a href="https://plotly.com/python/">Python</a>',
+                '<a href="https://plotly.com/~empet/8614/">Network Graph</a>',
+                298],
+               ['<a href="https://plotly.com/~Grondo/folder/home">Grondo</a>',
+                '<a href="https://plotly.com/matlab/">Matlab</a>',
+                '<a href="https://plotly.com/~Grondo/42/">Subplots</a>',
+                356],
+               ['<a href="https://plotly.com/~Dreamshot/folder/home">Dreamshot</a>',
+                '<a href="https://help.plot.ly/tutorials/">Web App</a>',
+                '<a href="https://plotly.com/~Dreamshot/6575/_2014-us-city-populations/">Bubble Map</a>',
+                262],
+               ['<a href="https://plotly.com/~FiveThirtyEight/folder/home">FiveThirtyEight</a>',
+                '<a href="https://help.plot.ly/tutorials/">Web App</a>',
+                '<a href="https://plotly.com/~FiveThirtyEight/30/">Scatter</a>',
+                692],
+               ['<a href="https://plotly.com/~cpsievert/folder/home">cpsievert</a>',
+                '<a href="https://plotly.com/r/">R</a>',
+                '<a href="https://plotly.com/~cpsievert/1130/">Surface</a>',
+                302]]
+
+fig = ff.create_table(data_matrix)
+fig.show()
+```
+
+### Use LaTeX
+
+```python
+import plotly.figure_factory as ff
+
+data_matrix = [['Name', 'Equation'],
+               ['Pythagorean Theorem', '$a^{2}+b^{2}=c^{2}$'],
+               ['Euler\'s Formula', '$F-E+V=2$'],
+               ['The Origin of Complex Numbers', '$i^{2}=-1$'],
+               ['Einstein\'s Theory of Relativity', '$E=m c^{2}$']]
+
+fig =  ff.create_table(data_matrix)
+fig.show()
+```
+
+### Use a Pandas Dataframe
+
+```python
+import plotly.figure_factory as ff
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')
+df_sample = df[100:120]
+
+fig =  ff.create_table(df_sample)
+fig.show()
+```
+
+### Modify Row Height
+
+The default row height is 30 pixels. Set height_constant if you'd like to change the height of each row.
+
+
+```python
+import plotly.figure_factory as ff
+
+data_matrix = [['Country', 'Year', 'Population'],
+               ['United States', 2000, 282200000],
+               ['Canada', 2000, 27790000],
+               ['United States', 2005, 295500000],
+               ['Canada', 2005, 32310000],
+               ['United States', 2010, 309000000],
+               ['Canada', 2010, 34000000]]
+
+fig =  ff.create_table(data_matrix, height_constant=20)
+fig.show()
+```
+
+### Custom Table Colors
+
+
+```python
+import plotly.figure_factory as ff
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv')
+df_sample = df[400:410]
+
+colorscale = [[0, '#4d004c'],[.5, '#f2e5ff'],[1, '#ffffff']]
+
+fig =  ff.create_table(df_sample, colorscale=colorscale)
+
+fig.show()
+```
+
+### Custom Font Colors
+
+```python
+import plotly.figure_factory as ff
+
+text = [['Team', 'Rank'], ['A', 1], ['B', 2], ['C', 3], ['D', 4], ['E', 5], ['F', 6]]
+
+colorscale = [[0, '#272D31'],[.5, '#ffffff'],[1, '#ffffff']]
+font=['#FCFCFC', '#00EE00', '#008B00', '#004F00', '#660000', '#CD0000', '#FF3030']
+
+fig = ff.create_table(text, colorscale=colorscale, font_colors=font)
+fig.layout.width=250
+fig.show()
+```
+
+### Change Font Size
+
+```python
+import plotly.figure_factory as ff
+
+data_matrix = [['Country', 'Year', 'Population'],
+               ['United States', 2000, 282200000],
+               ['Canada', 2000, 27790000],
+               ['United States', 2005, 295500000],
+               ['Canada', 2005, 32310000],
+               ['United States', 2010, 309000000],
+               ['Canada', 2010, 34000000]]
+
+fig = ff.create_table(data_matrix, index=True)
+
+# Make text size larger
+for i in range(len(fig.layout.annotations)):
+    fig.layout.annotations[i].font.size = 20
+
+fig.show()
+```
+
+#### Tables with Graphs
+
+```python
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+# Add table data
+table_data = [['Team', 'Wins', 'Losses', 'Ties'],
+              ['Montréal<br>Canadiens', 18, 4, 0],
+              ['Dallas Stars', 18, 5, 0],
+              ['NY Rangers', 16, 5, 0],
+              ['Boston<br>Bruins', 13, 8, 0],
+              ['Chicago<br>Blackhawks', 13, 8, 0],
+              ['LA Kings', 13, 8, 0],
+              ['Ottawa<br>Senators', 12, 5, 0]]
+# Initialize a figure with ff.create_table(table_data)
+fig = ff.create_table(table_data, height_constant=60)
+
+# Add graph data
+teams = ['Montréal Canadiens', 'Dallas Stars', 'NY Rangers',
+         'Boston Bruins', 'Chicago Blackhawks', 'LA Kings', 'Ottawa Senators']
+GFPG = [3.54, 3.48, 3.0, 3.27, 2.83, 2.45, 3.18]
+GAPG = [2.17, 2.57, 2.0, 2.91, 2.57, 2.14, 2.77]
+# Make traces for graph
+fig.add_trace(go.Scatter(x=teams, y=GFPG,
+                    marker=dict(color='#0099ff'),
+                    name='Goals For<br>Per Game',
+                    xaxis='x2', yaxis='y2'))
+fig.add_trace(go.Scatter(x=teams, y=GAPG,
+                    marker=dict(color='#404040'),
+                    name='Goals Against<br>Per Game',
+                    xaxis='x2', yaxis='y2'))
+
+fig.update_layout(
+    title_text = '2016 Hockey Stats',
+    margin = {'t':50, 'b':100},
+    xaxis = {'domain': [0, .5]},
+    xaxis2 = {'domain': [0.6, 1.]},
+    yaxis2 = {'anchor': 'x2', 'title': 'Goals'}
+)
+
+fig.show()
+```
+
+
+```python
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+# Add table data
+table_data = [['Team', 'Wins', 'Losses', 'Ties'],
+              ['Montréal<br>Canadiens', 18, 4, 0],
+              ['Dallas Stars', 18, 5, 0],
+              ['NY Rangers', 16, 5, 0],
+              ['Boston<br>Bruins', 13, 8, 0],
+              ['Chicago<br>Blackhawks', 13, 8, 0],
+              ['Ottawa<br>Senators', 12, 5, 0]]
+# Initialize a fig with ff.create_table(table_data)
+fig = ff.create_table(table_data, height_constant=60)
+
+# Add graph data
+teams = ['Montréal Canadiens', 'Dallas Stars', 'NY Rangers',
+         'Boston Bruins', 'Chicago Blackhawks', 'Ottawa Senators']
+GFPG = [3.54, 3.48, 3.0, 3.27, 2.83, 3.18]
+GAPG = [2.17, 2.57, 2.0, 2.91, 2.57, 2.77]
+
+fig.add_trace(go.Bar(x=teams, y=GFPG, xaxis='x2', yaxis='y2',
+                marker=dict(color='#0099ff'),
+                name='Goals For<br>Per Game'))
+
+fig.add_trace(go.Bar(x=teams, y=GAPG, xaxis='x2', yaxis='y2',
+                marker=dict(color='#404040'),
+                name='Goals Against<br>Per Game'))
+
+fig.update_layout(
+    title_text = '2016 Hockey Stats',
+    height = 800,
+    margin = {'t':75, 'l':50},
+    yaxis = {'domain': [0, .45]},
+    xaxis2 = {'anchor': 'y2'},
+    yaxis2 = {'domain': [.6, 1], 'anchor': 'x2', 'title': 'Goals'}
+)
+
+fig.show()
+```
+
+
+#### Reference
+
+For more info on `ff.create_table()`, see the [full function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_table.html)
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/figure-introspection.md plotly-7.1.0+dfsg1/doc/python/figure-introspection.md
--- plotly-5.20.0+dfsg/doc/python/figure-introspection.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figure-introspection.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,175 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to dig into and learn more about the figure data structure.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Introspecting Figures
+    order: 37
+    page_type: u-guide
+    permalink: python/figure-introspection/
+    thumbnail: thumbnail/violin.jpg
+---
+
+### The Figure Lifecycle
+
+As explained in the [Figure Data Structure documentation](/python/figure-structure/), when building a figure object with Plotly.py, it is not necessary to populate every possible attribute. At render-time, figure objects (whether generated via [Plotly Express](/python/plotly-express/) or [Graph Objects](/python/graph-objects/)) are passed from Plotly.py to [Plotly.js](/javascript/), which is the Javascript library responsible for turning JSON descriptions of figures into graphical representations.
+
+As part of this rendering process, Plotly.js will determine, based on the attributes that have been set, which other attributes require values in order to draw the figure. Plotly.js will then apply either static or dynamic defaults to all of the remaining required attributes and render the figure. A good example of a static default would be the text font size: if unspecified, the default value is always the same. A good example of a dynamic default would be the range of an axis: if unspecified, the default will be computed based on the range of the data in traces associated with that axis.
+
+
+### Introspecting Plotly Express Figures
+
+Figure objects created by [Plotly Express](/python/plotly-express/) have a number of attributes automatically set, and these can be introspected using the Python `print()` function, or in JupyterLab, the special `fig.show("json")` renderer, which gives an interactive drilldown interface with search:
+
+```python
+import plotly.express as px
+
+fig = px.scatter(x=[10, 20], y=[20, 10], height=400, width=400)
+fig.show()
+print(fig)
+```
+
+We can learn more about the attributes Plotly Express has set for us with the Python `help()` function:
+
+```python
+help(fig.data[0].__class__.mode)
+```
+
+### Accessing Javascript-Computed Defaults
+
+_new in 4.10_
+
+The `.full_figure_for_development()` method provides Python-level access to the default values computed by Plotly.js. This method requires [the Kaleido package](/python/static-image-export/), which is easy to install and also used for [static image export](/python/static-image-export/).
+
+By way of example, here is an extremely simple figure created with [Graph Objects](/python/graph-objects/) (although it could have been made with [Plotly Express](/python/plotly-express/) as well just like above) where we have disabled the default template for maximum readability. Note how in this figure the text labels on the markers are clipped, and sit on top of the markers.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Scatter(
+        mode="markers+text",
+        x=[10,20],
+        y=[20, 10],
+        text=["Point A", "Point B"]
+    )],
+    layout=dict(height=400, width=400, template="none")
+)
+fig.show()
+```
+
+Let's print this figure to see the very small JSON object that is passed to Plotly.js as input:
+
+```python
+print(fig)
+```
+
+Now let's look at the "full" figure after Plotly.js has computed the default values for every necessary attribute.
+
+> Heads-up: the full figure is quite long and intimidating, and this page is meant to help demystify things so **please read on**!
+
+Please also note that the `.full_figure_for_development()` function is really meant for interactive learning and debugging, rather than production use, hence its name and the warning it produces by default, which you can see below, and which can be suppressed with `warn=False`.
+
+```python
+full_fig = fig.full_figure_for_development()
+print(full_fig)
+```
+
+As you can see, Plotly.js does a lot of work filling things in for us! Let's look at the examples described at the top of the page of static and dynamic defaults. If we look just at `layout.font` and `layout.xaxis.range` we can see that the static default font size is 12 and that the dynamic default range is computed to be a bit beyond the data range which was 10-20:
+
+```python
+print("full_fig.layout.font.size: ", full_fig.layout.font.size)
+print("full_fig.layout.xaxis.range: ", full_fig.layout.xaxis.range)
+```
+
+### Learning About Attributes
+
+
+What else can we use this `full_fig` for? Let's start by looking at the first entry of the `data`
+
+```python
+print(full_fig.data[0])
+```
+
+We see that this is an instance of `go.Scatter` (as expected, given the input) and that it has an attribute we've maybe never heard of called `cliponaxis` which by default seems to be set to `True` in this case. Let's find out more about this attribute using the built-in Python `help()` function
+
+```python
+help(go.Scatter.cliponaxis)
+```
+
+Aha!  This explains why in our original figure above, the text was cut off by the edge of the plotting area! Let's try forcing that to `False`, and let's also use the attribute `textposition` which we see in the full figure is by default set to `"middle center"` to get our text off of our markers:
+
+```python
+fig.update_traces(cliponaxis=False, textposition="top right")
+fig.show()
+```
+
+We can use this technique (of making a figure, and querying Plotly.js for the "full" version of that figure, and then exploring the attributes that are automatically set for us) to learn more about the range of possibilities that the figure schema makes available. We can drill down into `layout` attributes also:
+
+```python
+help(go.layout.XAxis.autorange)
+```
+
+### More about Layout
+
+In the figure we introspected above, we had added [a `scatter` trace](/python/line-and-scatter/), and Plotly.js automatically filled in for us the `xaxis` and `yaxis` values of that trace object to be `x` and `y`, and then also filled out the corresponding `layout.xaxis` and `layout.yaxis` objects for us, complete with their [extensive set of defaults for gridlines, tick labels and so on](/python/axes/).
+
+If we create a figure with [a `scattergeo` trace](/python/scatter-plots-on-maps/) instead, however, Plotly.js will fill in a totally different set of objects in `layout`, corresponding to [a `geo` subplot, with all of its defaults for whether or not to show rivers, lakes, country borders, coastlines etc](https://plotly.com/python/map-configuration/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Scattergeo(
+        mode="markers+text",
+        lat=[10, 20],
+        lon=[20, 10],
+        text=["Point A", "Point B"]
+    )],
+    layout=dict(height=400, width=400,
+                margin=dict(l=0,r=0,b=0,t=0),
+                template="none")
+)
+fig.show()
+full_fig = fig.full_figure_for_development()
+print(full_fig)
+```
+
+If I then set `showrivers=True` and re-query the full figure, I see that new keys have appeared in the `layout.geo` object for `rivercolor` and `riverwidth`, showing the dynamic nature of these defaults.
+
+```python
+fig.update_geos(showrivers=True)
+full_fig = fig.full_figure_for_development()
+print(full_fig.layout.geo)
+```
+
+### Reference
+
+You can learn more about [all the available attributes in the plotly figure schema](/python/reference/) (and read about its [high-level structure](/python/figure-structure/)) or about [all the classes and functions in the `plotly` module](/python-api-reference/).
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/figure-labels.md plotly-7.1.0+dfsg1/doc/python/figure-labels.md
--- plotly-5.20.0+dfsg/doc/python/figure-labels.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figure-labels.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,307 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.14
+  plotly:
+    description: How to set the global font, title, legend-entries, and axis-titles
+      in python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Setting the Font, Title, Legend Entries, and Axis Titles
+    order: 14
+    permalink: python/figure-labels/
+    redirect_from: python/font/
+    thumbnail: thumbnail/figure-labels.png
+---
+
+### Automatic Labelling with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+When using Plotly Express, your axes and legend are automatically labelled, and it's easy to override the automation for a customized figure using the `labels` keyword argument. The title of your figure is up to you though!
+
+Here's a figure with automatic labels and then the same figure with overridden labels. Note the fact that when overriding labels, the axes, legend title *and hover labels* reflect the specified labels automatically.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", color="species",
+                title="Automatic Labels Based on Data Frame Column Names")
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", color="species",
+                 labels={
+                     "sepal_length": "Sepal Length (cm)",
+                     "sepal_width": "Sepal Width (cm)",
+                     "species": "Species of Iris"
+                 },
+                title="Manually Specified Labels")
+fig.show()
+```
+
+### Global and Local Font Specification
+
+You can set the figure-wide font with the `layout.font` attribute, which will apply to all titles and tick labels, but this can be overridden for specific plot items like individual axes and legend titles etc. In the following figure, we set the figure-wide font to Courier New in blue, and then override this for certain parts of the figure.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", color="species",
+                title="Playing with Fonts")
+fig.update_layout(
+    font_family="Courier New",
+    font_color="blue",
+    title_font_family="Times New Roman",
+    title_font_color="red",
+    legend_title_font_color="green"
+)
+fig.update_xaxes(title_font_family="Arial")
+fig.show()
+```
+
+### Set Automargin on the Plot Title
+
+*New in 5.14*
+
+Set `automargin=True` to allow the title to push the figure margins. With `yref` set to `paper`, `automargin=True`  expands the margins to make the title visible, but doesn't push outside the container. With `yref` set to `container`, `automargin=True` expands the margins, but the title doesn't overlap with the plot area, tick labels, and axis titles.
+
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.line(df, x="year", y="gdpPercap", color="country")
+
+fig.update_layout(
+    title=dict(text="GDP-per-capita", font=dict(size=50), automargin=True, yref='paper')
+)
+
+fig.show()
+```
+
+### Fonts and Labels in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash dash-daq`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'figure-labels', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Manual Labelling with Graph Objects
+
+When using [graph objects](/python/graph-objects/) rather than [Plotly Express](/python/plotly-express/), you will need to explicitly label traces and axes:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    name="Name of Trace 1"       # this sets its legend entry
+))
+
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[1, 0, 3, 2, 5, 4, 7, 6, 8],
+    name="Name of Trace 2"
+))
+
+fig.update_layout(
+    title=dict(
+        text="Plot Title"
+    ),
+    xaxis=dict(
+        title=dict(
+            text="X Axis Title"
+        )
+    ),
+    yaxis=dict(
+        title=dict(
+            text="Y Axis Title"
+        )
+    ),
+    legend=dict(
+        title=dict(
+            text="Legend Title"
+        )
+    ),
+    font=dict(
+        family="Courier New, monospace",
+        size=18,
+        color="RebeccaPurple"
+    )
+)
+
+fig.show()
+```
+
+### Configuring Font Variant, Style, and  Weight
+
+*New in 5.22*
+
+You can configure a `variant`, `style`, and `weight` on `layout.font`. Here, we set the font variant to `small-caps`.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.iris()
+
+setosa_df = df[df["species"] == "setosa"]
+versicolor_df = df[df["species"] == "versicolor"]
+virginica_df = df[df["species"] == "virginica"]
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=setosa_df["sepal_width"],
+            y=setosa_df["sepal_length"],
+            mode="markers",
+            name="setosa",
+        ),
+        go.Scatter(
+            x=versicolor_df["sepal_width"],
+            y=versicolor_df["sepal_length"],
+            mode="markers",
+            name="versicolor",
+        ),
+        go.Scatter(
+            x=virginica_df["sepal_width"],
+            y=virginica_df["sepal_length"],
+            mode="markers",
+            name="virginica",
+        ),
+    ],
+    layout=go.Layout(
+        title=dict(
+            text="Plot Title"
+        ),
+        xaxis=dict(
+            title=dict(
+                text="X Axis Title"
+            )
+        ),
+        yaxis=dict(
+            title=dict(
+                text="Y Axis Title"
+            )
+        ),
+        legend=dict(
+            title=dict(
+                text="Legend Title"
+            )
+        ),
+        font=dict(
+            family="Courier New, monospace",
+            size=18,
+            color="RebeccaPurple",
+            variant="small-caps",
+        )
+    )
+)
+
+fig.show()
+```
+
+The configuration of the legend is discussed in detail in the [Legends](/python/legend/) page.
+
+### Align Plot Title
+The following example shows how to align the plot title in [layout.title](https://plotly.com/python/reference/layout/#layout-title). `x` sets the x position with respect to `xref` from "0" (left) to "1" (right), and `y` sets the y position with respect to `yref` from "0" (bottom) to "1" (top). Moreover, you can define `xanchor` to `left`,`right`, or `center` for setting the title's horizontal alignment with respect to its x position, and/or `yanchor` to `top`, `bottom`, or `middle` for setting the title's vertical alignment with respect to its y position.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    y=[3, 1, 4],
+    x=["Mon", "Tue", "Wed"]))
+
+fig.update_layout(
+    title={
+        'text': "Plot Title",
+        'y':0.9,
+        'x':0.5,
+        'xanchor': 'center',
+        'yanchor': 'top'})
+
+fig.show()
+```
+
+### Adding a Plot Subtitle
+
+*New in 5.23*
+
+Add a subtitle to a plot with `layout.title.subtitle`. In the following example, we set the subtitle's `text`, and configure the `font` `color` and `size`. By default, if you don't set a font size for the subtitle, it will be `0.7` of the `title` font size.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder().query("continent == 'Europe' and (year == 1952 or year == 2002)")
+
+df_pivot = df.pivot(index="country", columns="year", values="lifeExp")
+
+fig = go.Figure(
+    [
+        go.Bar(
+            x=df_pivot.index, y=df_pivot[1952], name="1952", marker_color="IndianRed"
+        ),
+        go.Bar(
+            x=df_pivot.index, y=df_pivot[2002], name="2002", marker_color="LightSalmon"
+        ),
+    ],
+    layout=dict(
+        title=dict(
+            text="Life Expectancy",
+            subtitle=dict(
+                text="Life expectancy by European country in 1952 and in 2002",
+                font=dict(color="gray", size=13),
+            ),
+        )
+    ),
+)
+
+
+fig.show()
+
+```
+
+#### Reference
+See https://plotly.com/python/reference/layout/ for more information!
diff -Nru plotly-5.20.0+dfsg/doc/python/figure-structure.md plotly-7.1.0+dfsg1/doc/python/figure-structure.md
--- plotly-5.20.0+dfsg/doc/python/figure-structure.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figure-structure.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,229 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: The structure of a figure - data, traces and layout explained.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: The Figure Data Structure
+    order: 1
+    page_type: u-guide
+    permalink: python/figure-structure/
+    thumbnail: thumbnail/violin.jpg
+---
+
+### Overview
+
+The `plotly` Python package exists to [create, manipulate](/python/creating-and-updating-figures/) and [render](/python/renderers/) graphical figures (i.e. charts, plots, maps and diagrams) represented by data structures also referred to as figures. The rendering process uses the [Plotly.js JavaScript library](https://plotly.com/javascript/) under the hood although Python developers using this module very rarely need to interact with the Javascript library directly, if ever. Figures can be represented in Python either as dicts or as instances of the `plotly.graph_objects.Figure` class, and are serialized as text in [JavaScript Object Notation (JSON)](https://json.org/) before being passed to Plotly.js.
+
+> Note: the recommended entry-point into the plotly package is the [high-level plotly.express module, also known as Plotly Express](/python/plotly-express/), which consists of Python functions which return fully-populated `plotly.graph_objects.Figure` objects. This page exists to document the architecture of the data structure that these objects represent, for users who wish to understand more about how to customize them, or assemble them from [other `plotly.graph_objects` components](/python/graph-objects/).
+
+Viewing the underlying data structure for any `plotly.graph_objects.Figure` object, including those returned by Plotly Express, can be done via `print(fig)` or, in JupyterLab, with the special `fig.show("json")` renderer. Figures also support `fig.to_dict()` and `fig.to_json()` methods. `print()`ing the figure will result in the often-verbose `layout.template` key being represented as ellipses `'...'` for brevity.
+
+```python
+import plotly.express as px
+
+fig = px.line(x=["a","b","c"], y=[1,3,2], title="sample figure")
+print(fig)
+fig.show()
+```
+
+### Accessing figure structures in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'figure-structure', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Figures as Trees of Attributes
+
+Plotly.js supports inputs adhering to a well-defined schema, whose overall architecture is explained in this page and which is exhaustively documented in the [Figure Reference](/python/reference/index/) (which is itself generated from a [machine-readable JSON representation of the schema](https://raw.githubusercontent.com/plotly/plotly.js/master/dist/plot-schema.json)). Figures are represented as trees with named nodes called "attributes". The root node of the tree has three top-level attributes: `data`, `layout` and `frames` (see below).
+
+Attributes are referred to in text and in the [Figure Reference](/python/reference/index/) by their full "path" i.e. the dot-delimited concatenation of their parents. For example `"layout.width"` refers to the attribute whose key is `"width"` inside a dict which is the value associated with a key `"layout"` at the root of the figure. If one of the parents is a list rather than a dict, a set of brackets is inserted in the path when referring to the attribute in the abstract, e.g. `"layout.annotations[].text"`. Finally, as explained below, the top-level "data" attribute defines a list of typed objects called "traces" with the schema dependent upon the type, and these attributes' paths are listed in the [Figure Reference](/python/reference/index/) as `"data[type=scatter].name"`.
+
+The [`plotly.graph_objects` module contains an automatically-generated hierarchy of  Python classes](/python/graph-objects/) which represent non-leaf attributes in the figure schema and provide a Pythonic API for them. When [manipulating a `plotly.graph_objects.Figure` object](/python/creating-and-updating-figures/), attributes can be set either directly using Python object attributes e.g. `fig.layout.title.font.family="Open Sans"` or using [update methods and "magic underscores"](/python/creating-and-updating-figures/#magic-underscore-notation) e.g. `fig.update_layout(title_font_family="Open Sans")`
+
+When building a figure, it is *not necessary to populate every attribute* of every object. At render-time, [the JavaScript layer will compute default values](/python/figure-introspection/) for each required unspecified attribute, depending upon the ones that are specified, as documented in the [Figure Reference](/python/reference/index/). An example of this would be `layout.xaxis.range`, which may be specified explicitly, but if not will be computed based on the range of `x` values for every trace linked to that axis. The JavaScript layer will ignore unknown attributes or malformed values, although the `plotly.graph_objects` module provides Python-side validation for attribute values. Note also that if [the `layout.template` key is present (as it is by default)](/python/templates/) then default values will be drawn first from the contents of the template and only if missing from there will the JavaScript layer infer further defaults. The built-in template can be disabled by setting `layout.template="none"`.
+
+### The Top-Level `data` Attribute
+
+The first of the three top-level attributes of a figure is `data`, whose value must be a list of dicts referred to as "traces".
+
+* Each trace has one of more than 40 possible types (see below for a list organized by subplot type, including e.g. [`scatter`](/python/line-and-scatter/), [`bar`](/python/bar-charts/), [`pie`](/python/pie-charts/), [`surface`](/python/3d-surface-plots/), [`choropleth`](/python/choropleth-maps/) etc), and represents a set of related graphical marks in a figure. Each trace must have a `type` attribute which defines the other allowable attributes.
+* Each trace is drawn on a single [subplot](/python/subplots/) whose type must be compatible with the trace's type, or is its own subplot (see below).
+* Traces may have a single [legend](/python/legend/) entry, with the exception of pie and funnelarea traces (see below).
+* Certain trace types support [continuous color, with an associated colorbar](/python/colorscales/), which can be controlled by attributes either within the trace, or within the layout when using the [coloraxis attribute](/python/colorscales/).
+
+
+### The Top-Level `layout` Attribute
+
+The second of the three top-level attributes of a figure is `layout`, whose value is referred to in text as "the layout" and must be a dict, containing attributes that control positioning and configuration of non-data-related parts of the figure such as:
+
+  * Dimensions and margins, which define the bounds of "paper coordinates" (see below)
+  * Figure-wide defaults: [templates](/python/templates/), [fonts](/python/figure-labels/), colors, hover-label and modebar defaults
+  * [Title](/python/figure-labels/) and [legend](/python/legend/) (positionable in container and/or paper coordinates)
+  * [Color axes and associated color bars](/python/colorscales/) (positionable in paper coordinates)
+  * Subplots of various types on which can be drawn multiple traces and which are positioned in paper coordinates:
+    * `xaxis`, `yaxis`, `xaxis2`, `yaxis3` etc: X and Y cartesian axes, the intersections of which are cartesian subplots
+    * `scene`, `scene2`, `scene3` etc: 3d scene subplots
+    * `ternary`, `ternary2`, `ternary3`, `polar`, `polar2`, `polar3`, `geo`, `geo2`, `geo3`, `map`, `map2`, `map3`, `smith`, `smith2` etc: ternary, polar, geo, map or smith subplots
+  * Non-data marks which can be positioned in paper coordinates, or in data coordinates linked to 2d cartesian subplots:
+    * `annotations`: [textual annotations with or without arrows](/python/text-and-annotations/)
+    * `shapes`: [lines, rectangles, ellipses or open or closed paths](/python/shapes/)
+    * `images`: [background or decorative images](/python/images/)
+  * Controls which can be positioned in paper coordinates and which can trigger Plotly.js functions when interacted with by a user:
+    * `updatemenus`: [single buttons, toggles](/python/custom-buttons/) and [dropdown menus](/python/dropdowns/)
+    * `sliders`: [slider controls](/python/sliders/)
+
+### The Top-Level `frames` Attribute
+
+The third of the three top-level attributes of a figure is `frames`, whose value must be a list of dicts that define sequential frames in an [animated plot](/python/animations/). Each frame contains its own data attribute as well as other parameters. Animations are usually triggered and controlled via controls defined in layout.sliders and/or layout.updatemenus
+
+### The `config` Object
+
+At [render-time](/python/renderers/), it is also possible to control certain figure behaviors which are not considered part of the figure proper i.e. the behavior of the "modebar" and how the figure relates to mouse actions like scrolling etc. The object that contains these options is called the [`config`, and has its own documentation page](/python/configuration-options/). It is exposed in Python as the `config` keyword argument of the `.show()` method on `plotly.graph_objects.Figure` objects.
+
+### Positioning With Paper, Container Coordinates, or Axis Domain Coordinates
+
+Various figure components configured within the layout of the figure support positioning attributes named `x` or `y`, whose values may be specified in "paper coordinates" (sometimes referred to as "plot fractions" or "normalized coordinates"). Examples include `layout.xaxis.domain` or `layout.legend.x` or `layout.annotation[].x`.
+
+Positioning in paper coordinates is *not* done in absolute pixel terms, but rather in terms relative to a coordinate system defined with an origin `(0,0)` at `(layout.margin.l, layout.margin.b)` and a point `(1,1)` at `(layout.width-layout.margin.r, layout.height-layout.margin.t)` (note: `layout.margin` values are pixel values, as are `layout.width` and `layout.height`). Paper coordinate values less than 0 or greater than 1 are permitted, and refer to areas within the plot margins.
+
+To position an object in "paper" coordinates, the corresponding axis reference
+is set to `"paper"`. For instance a shape's `xref` attribute would be set to
+`"paper"` so that the `x` value of the shape refers to its position in paper
+coordinates.
+
+Note that the contents of the `layout.margin` attribute are by default computed based on the position and dimensions of certain items like the title or legend, and may be made dependent on the position and dimensions of tick labels as well when setting the `layout.xaxis.automargin` attribute to `True`. This has the effect of automatically increasing the margin values and therefore shrinking the physical area defined between the `(0,0)` and `(1,1)` points. Positioning certain items at paper coordinates less than 0 or greater than 1 will also trigger this behavior. The `layout.width` and `layout.height`, however, are taken as givens, so a figure will never grow or shrink based on its contents.
+
+The figure title may be positioned using "container coordinates" which have `(0,0)` and `(1,1)` anchored at the bottom-left and top-right of the figure, respectively, and therefore are independent of the values of layout.margin.
+
+Furthermore, shapes, annotations, and images can be placed relative to an axis's
+domain so that, for instance, an `x` value of `0.5` would place the object
+halfway along the x-axis, regardless of the domain as specified in the
+`layout.xaxis.domain` attribute. This behavior can be specified by adding
+`' domain'` to the axis reference in the axis referencing attribute of the object.
+For example, setting `yref = 'y2 domain'` for a shape will refer to the length
+and position of the axis named `y2`.
+
+### 2D Cartesian Trace Types and Subplots
+
+The most commonly-used kind of subplot is a [two-dimensional Cartesian subplot](/python/axes/). Traces compatible with these subplots support `xaxis` and `yaxis` attributes whose values must refer to corresponding objects in the layout portion of the figure. For example, if `xaxis="x"`, and `yaxis="y"` (which is the default) then this trace is drawn on the subplot at the intersection of the axes configured under `layout.xaxis` and `layout.yaxis`, but if `xaxis="x2"` and `yaxis="y3"` then the trace is drawn at the intersection of the axes configured under `layout.xaxis2` and `layout.yaxis3`. Note that attributes such as `layout.xaxis` and `layout.xaxis2` etc do not have to be explicitly defined, in which case default values will be inferred. Multiple traces of different types can be drawn on the same subplot.
+
+X- and Y-axes support the `type` attribute, which enables them to represent [continuous values (`type="linear"`, `type="log"`)](/python/axes/), [temporal values (`type="date"`)](/python/time-series/) or [categorical values (`type="category"`, `type="multicategory`)](/python/bar-charts/). Axes can also be overlaid on top of one another to create [dual-axis or multiple-axis charts](/python/multiple-axes/). 2-d cartesian subplots lend themselves very well to creating ["small multiples" figures, also known as facet or trellis plots](/python/facet-plots/).
+
+The following trace types are compatible with 2d-cartesian subplots via the `xaxis` and `yaxis` attributes:
+
+* scatter-like trace types: [`scatter`](/python/line-and-scatter/) and [`scattergl`](/python/webgl-vs-svg/), which can be used to draw [scatter plots](/python/line-and-scatter/), [line plots and curves](/python/line-charts/), [time-series plots](/python/time-series/), [bubble charts](/python/bubble-charts/), [dot plots](/python/dot-plots/) and [filled areas](/python/filled-area-plots/) and also support [error bars](/python/error-bars/)
+* [`bar`](/python/bar-charts/), [`funnel`](/python/funnel-charts/), [`waterfall`](/python/waterfall-charts/): bar-like trace types which can also be used to draw [timelines and Gantt charts](/python/gantt/)
+* [`histogram`](/python/histograms/): an *aggregating* bar-like trace type
+* [`box`](/python/box-plots/) and [`violin`](/python/box-plots/): 1-dimensional distribution-like trace types
+* [`histogram2d`](/python/2D-Histogram/) and [`histogram2dcontour`](/python/2d-histogram-contour/): 2-dimensional distribution-like density trace types
+* [`image`](/python/imshow/), [`heatmap`](/python/heatmaps/) and [`contour`](/python/contour-plots/): matrix trace types
+* [`ohlc`](/python/ohlc-charts/) and [`candlestick`](/python/candlestick-charts/): stock-like trace types
+* [`carpet`](/python/carpet-plot/): a special trace type for building [carpet plots](/python/carpet-plot/), in that other traces can use as subplots (see below)
+* [`splom`](/python/splom/): multi-dimensional scatter plots which implicitly refer to many 2-d cartesian subplots at once.
+
+### 3D, Polar, Ternary and Smith Trace Types and Subplots
+
+Beyond 2D cartesian subplots, figures can include [three-dimensional cartesian subplots](/python/3d-charts/), [polar subplots](/python/polar-chart/), [ternary subplots](/python/ternary-plots/) and [smith subplots](/python/smith-charts/). The following trace types support attributes named `scene`, `polar`, `smith` or `ternary`, whose values must refer to corresponding objects in the layout portion of the figure i.e. `ternary="ternary2"` etc. Note that attributes such as `layout.scene` and `layout.ternary2` etc do not have to be explicitly defined, in which case default values will be inferred. Multiple traces of a compatible type can be placed on the same subplot.
+
+The following trace types are compatible with 3D subplots via the `scene` attribute, which contains special [camera controls](/python/3d-camera-controls/):
+
+* [`scatter3d`](/python/3d-scatter-plots/), which can be used to draw [individual markers](/python/3d-scatter-plots/), [3d bubble charts](/python/3d-bubble-charts/) and [lines and curves](/python/3d-line-plots/)
+* [`surface`](/python/3d-surface-plots/) and [`mesh`](/python/3d-mesh/): 3d surface trace types
+* [`cone`](/python/cone-plot/) and [`streamtube`](/python/streamtube-plot/): 3d vector field trace types
+* [`volume`](/python/3d-volume-plots/) and [`isosurface`](/python/3d-isosurface-plots/): 3d volume trace types
+
+The following trace types are compatible with polar subplots via the `polar` attribute:
+
+* scatter-like trace types: [`scatterpolar` and `scatterpolargl`](/python/polar-chart/), which can be used to draw individual markers, [curves and filled areas (i.e. radar or spider charts)](/python/radar-chart/)
+* [`barpolar`](/python/wind-rose-charts/): useful for [wind roses](/python/wind-rose-charts/) and other polar bar charts
+
+The following trace types are compatible with ternary subplots via the `ternary` attribute:
+
+* [`scatterternary`](/python/ternary-plots/), which can be used to draw individual markers, [curves and filled areas](/python/ternary-contour/)
+
+The following trace types are compatible with smith subplots via the `smith` attribute:
+
+* [`scattersmith`](/python/smith-charts/), which can be used to draw individual markers, curves and filled areas
+
+### Map Trace Types and Subplots
+
+Figures can include two different types of map subplots: [geo subplots for outline maps](/python/map-configuration/) and [tile-based maps](/python/tile-map-layers/). The following trace types support attributes named `geo` or `map`, whose values must refer to corresponding objects in the layout i.e. `geo="geo2"` etc.  Note that attributes such as `layout.geo2` and `layout.map` etc do not have to be explicitly defined, in which case default values will be inferred. Multiple traces of a compatible type can be placed on the same subplot.
+
+The following trace types are compatible with geo subplots via the `geo` attribute:
+
+* [`scattergeo`](/python/scatter-plots-on-maps/), which can be used to draw [individual markers](/python/scatter-plots-on-maps/), [line and curves](/python/lines-on-maps/) and filled areas on outline maps
+* [`choropleth`](/python/choropleth-maps/): [colored polygons](/python/choropleth-maps/) on outline maps
+
+The following trace types are compatible with tile map subplots via the `map` attribute:
+
+* [`scattermap`](/python/tile-scatter-maps/), which can be used to draw [individual markers](/python/tile-scatter-maps/), [lines and curves](/python/lines-on-tile-maps/) and [filled areas](/python/filled-area-tile-maps/) on tile maps
+* [`choroplethmap`](/python/tile-county-choropleth/): colored polygons on tile maps
+* [`densitymap`](/python/tile-density-heatmaps/): density heatmaps on tile maps
+
+### Traces Which Are Their Own Subplots
+
+Certain trace types cannot share subplots, and hence have no attribute to map to a corresponding subplot in the layout. Instead, these traces are their own subplot and support a `domain` attribute for position, which enables the trace to be positioned in paper coordinates (see below). With the exception of `pie` and `funnelarea`, such traces also do not support legends (see below)
+
+The following trace types are their own subplots and support a domain attribute:
+
+* [`pie`](/python/pie-charts/) and [`funnelarea`](/python/waterfall-charts/): one-level part-to-whole relationships with legend items
+* [`sunburst`](/python/sunburst-charts/) and [`treemap`](/python/treemaps/): hierarchical multi-level part-to-whole relationships
+* [`parcoords`](/python/parallel-coordinates-plot/) and [`parcats`](/python/parallel-categories-diagram/): continuous and categorical multidimensional figures with [parallel coordinates](/python/parallel-coordinates-plot/) and [parallel sets](/python/parallel-categories-diagram/)
+* [`sankey`](/python/sankey-diagram/): [flow diagrams](/python/sankey-diagram/)
+* [`table`](/python/table/): [text-based tables](/python/table/)
+* [`indicator`](/python/indicator/): big numbers, [gauges](/python/gauge-charts/), and [bullet charts](/python/bullet-charts/)
+
+### Carpet Trace Types and Subplots
+
+Certain trace types use [traces of type `carpet` as a subplot](/python/carpet-plot/). These support a `carpet` attribute whose value must match the value of the `carpet` attribute of the `carpet` trace they are to be drawn on. Multiple compatible traces can be placed on the same `carpet` trace.
+
+The following trace types are compatible with `carpet` trace subplots via the `carpet` attribute:
+
+* [`scattercarpet`](/python/carpet-scatter/), which can be used to draw individual markers, curves and filled areas
+* [`contourcarpet`](/python/carpet-plot/)
+
+### Trace Types, Legends and Color Bars
+
+Traces of most types can be optionally associated with a single legend item in the [legend](/python/legend/). Whether or not a given trace appears in the legend is controlled via the `showlegend` attribute. Traces which are their own subplots (see above) do not support this, with the exception of traces of type `pie` and `funnelarea` for which every distinct color represented in the trace gets a separate legend item. Users may show or hide traces by clicking or double-clicking on their associated legend item. Traces that support legend items also support the `legendgroup` attribute, and all traces with the same legend group are treated the same way during click/double-click interactions.
+
+The fact that legend items are linked to traces means that when using [discrete color](/python/discrete-color/), a figure must have one trace per color in order to get a meaningful legend. [Plotly Express has robust support for discrete color](/python/discrete-color/) to make this easy.
+
+Traces which support [continuous color](/python/colorscales/) can also be associated with color axes in the layout via the `coloraxis` attribute. Multiple traces can be linked to the same color axis. Color axes have a legend-like component called color bars. Alternatively, color axes can be configured within the trace itself.
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/figurewidget-app.md plotly-7.1.0+dfsg1/doc/python/figurewidget-app.md
--- plotly-5.20.0+dfsg/doc/python/figurewidget-app.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figurewidget-app.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,165 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.5
+  plotly:
+    description: Interactive Data Analysis with Plotly
+    display_as: chart_events
+    language: python
+    layout: base
+    name: Interactive Data Analysis with FigureWidget ipywidgets
+    order: 3
+    page_type: example_index
+    permalink: python/figurewidget-app/
+    thumbnail: thumbnail/multi-widget.jpg
+    redirect_from: /python/slider-widget/
+---
+
+#### NYC Flights Database
+
+```python
+import datetime
+import numpy as np
+import pandas as pd
+
+import plotly.graph_objects as go
+from ipywidgets import widgets
+```
+
+We'll be making an application to take a look at delays from all flights out of NYC in the year 2013.
+
+```python
+df = pd.read_csv(
+    'https://raw.githubusercontent.com/yankev/testing/master/datasets/nycflights.csv')
+df = df.drop(df.columns[[0]], axis=1)
+```
+
+```python
+df.sample(3)
+```
+
+Let's get the set of all the `airlines`, so that we can type the right things into the search box later.
+
+```python
+df['carrier'].unique()
+```
+
+Let's assign the widgets that we're going to be using in our app. In general all these widgets will be used to filter the data set, and thus what we visualize.
+
+```python
+month = widgets.IntSlider(
+    value=1.0,
+    min=1.0,
+    max=12.0,
+    step=1.0,
+    description='Month:',
+    continuous_update=False
+)
+
+use_date = widgets.Checkbox(
+    description='Date: ',
+    value=True,
+)
+
+container = widgets.HBox(children=[use_date, month])
+
+textbox = widgets.Dropdown(
+    description='Airline:   ',
+    value='DL',
+    options=df['carrier'].unique().tolist()
+)
+
+origin = widgets.Dropdown(
+    options=list(df['origin'].unique()),
+    value='LGA',
+    description='Origin Airport:',
+)
+
+
+# Assign an empty figure widget with two traces
+trace1 = go.Histogram(x=df['arr_delay'], opacity=0.75, name='Arrival Delays')
+trace2 = go.Histogram(x=df['dep_delay'], opacity=0.75, name='Departure Delays')
+g = go.FigureWidget(data=[trace1, trace2],
+                    layout=go.Layout(
+                        title=dict(
+                            text='NYC FlightDatabase'
+                        ),
+                        barmode='overlay'
+                    ))
+```
+
+Let now write a function that will handle the input from the widgets, and alter the state of the graph.
+
+```python
+def validate():
+    if origin.value in df['origin'].unique() and textbox.value in df['carrier'].unique():
+        return True
+    else:
+        return False
+
+
+def response(change):
+    if validate():
+        if use_date.value:
+            filter_list = [i and j and k for i, j, k in
+                           zip(df['month'] == month.value, df['carrier'] == textbox.value,
+                               df['origin'] == origin.value)]
+            temp_df = df[filter_list]
+
+        else:
+            filter_list = [i and j for i, j in
+                           zip(df['carrier'] == 'DL', df['origin'] == origin.value)]
+            temp_df = df[filter_list]
+        x1 = temp_df['arr_delay']
+        x2 = temp_df['dep_delay']
+        with g.batch_update():
+            g.data[0].x = x1
+            g.data[1].x = x2
+            g.layout.barmode = 'overlay'
+            g.layout.xaxis.title = 'Delay in Minutes'
+            g.layout.yaxis.title = 'Number of Delays'
+
+
+origin.observe(response, names="value")
+textbox.observe(response, names="value")
+month.observe(response, names="value")
+use_date.observe(response, names="value")
+```
+
+Time to try the app out!!
+
+```python
+container2 = widgets.HBox([origin, textbox])
+widgets.VBox([container,
+              container2,
+              g])
+```
+
+```html
+<img src = 'https://cloud.githubusercontent.com/assets/12302455/16637308/4e476280-43ac-11e6-9fd3-ada2c9506ee1.gif' >
+```
+
+#### Reference
+
+```python
+help(go.FigureWidget)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/figurewidget.md plotly-7.1.0+dfsg1/doc/python/figurewidget.md
--- plotly-5.20.0+dfsg/doc/python/figurewidget.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/figurewidget.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,118 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.5
+  plotly:
+    description: Introduction to the Plotly FigureWidget
+    display_as: chart_events
+    language: python
+    layout: base
+    name: Plotly FigureWidget Overview
+    order: 1
+    page_type: example_index
+    permalink: python/figurewidget/
+    thumbnail: thumbnail/figurewidget-overview.gif
+    redirect_from: /python/ipython-widgets/
+---
+
+The Plotly FigureWidget allows you to add Plotly charts as interactive widgets in Jupyter and other compatible notebooks. To use the FigureWidget, you'll need to install `anywidget`:
+
+```bash
+pip install anywidget
+```
+
+#### Create a Simple FigureWidget
+Create an empty FigureWidget and then view it.
+
+```python
+import plotly.graph_objects as go
+
+f = go.FigureWidget()
+f
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/empty_fw.png'>
+
+
+Add traces or update the layout and then watch the output above update in real time.
+
+```python
+f.add_scatter(y=[2, 1, 4, 3]);
+```
+
+```python
+f.add_bar(y=[1, 4, 3, 2]);
+```
+
+```python
+f.layout.title = 'Hello FigureWidget'
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/figurewidget-create.gif'>
+
+
+#### Update the Data and the Layout
+
+```python
+# update scatter data
+scatter = f.data[0]
+scatter.y = [3, 1, 4, 3]
+```
+
+```python
+# update bar data
+bar = f.data[1]
+bar.y = [5, 3, 2, 8]
+```
+
+```python
+f.layout.title.text = 'This is a new title'
+```
+
+#### Construct a FigureWidget from a Figure graph object
+
+
+A standard `Figure` object can be passed to the `FigureWidget` constructor.
+
+```python
+import plotly.graph_objects as go
+
+trace = go.Heatmap(z=[[1, 20, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
+                   x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
+                   y=['Morning', 'Afternoon', 'Evening'])
+data=[trace]
+layout = go.Layout(title=dict(text='Activity Heatmap'))
+
+figure = go.Figure(data=data, layout=layout)
+
+f2 = go.FigureWidget(figure)
+f2
+```
+
+#### Reference
+
+
+See [these Jupyter notebooks](https://github.com/jonmmease/plotly_ipywidget_notebooks) for even more FigureWidget examples.
+
+```python
+help(go.FigureWidget)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/filled-area-plots.md plotly-7.1.0+dfsg1/doc/python/filled-area-plots.md
--- plotly-5.20.0+dfsg/doc/python/filled-area-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/filled-area-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,284 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make filled area plots in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Filled Area Plots
+    order: 7
+    page_type: u-guide
+    permalink: python/filled-area-plots/
+    thumbnail: thumbnail/area.jpg
+---
+
+This example shows how to fill the area enclosed by traces.
+
+## Filled area plot with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+`px.area` creates a stacked area plot. Each filled area corresponds to one value of the column given by the `line_group` parameter.
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.area(df, x="year", y="pop", color="continent", line_group="country")
+fig.show()
+```
+
+## Filled area plot in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'filled-area-plots', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Pattern Fills
+
+*New in v5.7*
+
+Area charts afford the use of [patterns (also known as hatching or texture)](/python/pattern-hatching-texture/) in addition to color:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.area(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"])
+fig.show()
+```
+
+### Filled area chart with plotly.graph_objects
+
+#### Basic Overlaid Area Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[0, 2, 3, 5], fill='tozeroy')) # fill down to xaxis
+fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[3, 5, 1, 7], fill='tonexty')) # fill to trace0 y
+
+fig.show()
+```
+
+#### Overlaid Area Chart Without Boundary Lines
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[0, 2, 3, 5], fill='tozeroy',
+                    mode='none' # override default markers+lines
+                    ))
+fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[3, 5, 1, 7], fill='tonexty',
+                    mode= 'none'))
+
+fig.show()
+```
+
+#### Interior Filling for Area Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[3, 4, 8, 3],
+    fill=None,
+    mode='lines',
+    line_color='indigo',
+    ))
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4],
+    y=[1, 6, 2, 6],
+    fill='tonexty', # fill area between trace0 and trace1
+    mode='lines', line_color='indigo'))
+
+fig.show()
+```
+
+#### Gradient Fill
+
+*New in 5.20*
+
+Scatter traces with a fill support a `fillgradient`, which is a `dict` of options that defines the gradient. Use `fillgradient.colorscale` to define the [colorscale](https://plotly.com/python/colorscales) for the gradient and choose a `type` to define the orientation of the gradient (`'horizontal'`, `'vertical'` or `'radial'`).
+
+In the following example, we've defined a `horizontal` `fillgradient` with a colorscale of three colors.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    [
+        go.Scatter(
+            x=[1, 2, 3, 4],
+            y=[3, 4, 8, 3],
+            fill=None,
+            mode="lines",
+            line_color="darkblue",
+        ),
+        go.Scatter(
+            x=[1, 2, 3, 4],
+            y=[1, 6, 2, 6],
+            fill="tonexty",
+            mode="lines",
+            line_color="darkblue",
+            fillgradient=dict(
+                type="horizontal",
+                colorscale=[(0.0, "darkblue"), (0.5, "royalblue"), (1.0, "cyan")],
+            ),
+        ),
+    ]
+)
+
+fig.show()
+
+```
+
+#### Stacked Area Chart
+
+The `stackgroup` parameter is used to add the `y` values of the different traces in the same group. Traces in the same group fill up to the next trace of the group.
+
+```python
+import plotly.graph_objects as go
+
+x=['Winter', 'Spring', 'Summer', 'Fall']
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=x, y=[40, 60, 40, 10],
+    hoverinfo='x+y',
+    mode='lines',
+    line=dict(width=0.5, color='rgb(131, 90, 241)'),
+    stackgroup='one' # define stack group
+))
+fig.add_trace(go.Scatter(
+    x=x, y=[20, 10, 10, 60],
+    hoverinfo='x+y',
+    mode='lines',
+    line=dict(width=0.5, color='rgb(111, 231, 219)'),
+    stackgroup='one'
+))
+fig.add_trace(go.Scatter(
+    x=x, y=[40, 30, 50, 30],
+    hoverinfo='x+y',
+    mode='lines',
+    line=dict(width=0.5, color='rgb(184, 247, 212)'),
+    stackgroup='one'
+))
+
+fig.update_layout(yaxis_range=(0, 100))
+fig.show()
+```
+
+### Stacked Area Chart with Normalized Values
+
+```python
+import plotly.graph_objects as go
+
+x=['Winter', 'Spring', 'Summer', 'Fall']
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=x, y=[40, 20, 30, 40],
+    mode='lines',
+    line=dict(width=0.5, color='rgb(184, 247, 212)'),
+    stackgroup='one',
+    groupnorm='percent' # sets the normalization for the sum of the stackgroup
+))
+fig.add_trace(go.Scatter(
+    x=x, y=[50, 70, 40, 60],
+    mode='lines',
+    line=dict(width=0.5, color='rgb(111, 231, 219)'),
+    stackgroup='one'
+))
+fig.add_trace(go.Scatter(
+    x=x, y=[70, 80, 60, 70],
+    mode='lines',
+    line=dict(width=0.5, color='rgb(127, 166, 238)'),
+    stackgroup='one'
+))
+fig.add_trace(go.Scatter(
+    x=x, y=[100, 100, 100, 100],
+    mode='lines',
+    line=dict(width=0.5, color='rgb(131, 90, 241)'),
+    stackgroup='one'
+))
+
+fig.update_layout(
+    showlegend=True,
+    xaxis_type='category',
+    yaxis=dict(
+        type='linear',
+        range=[1, 100],
+        ticksuffix='%'))
+
+fig.show()
+```
+
+#### Select Hover Points
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=[0,0.5,1,1.5,2], y=[0,1,2,1,0],
+                    fill='toself', fillcolor='darkviolet',
+                    hoveron = 'points+fills', # select where hover is active
+                    line_color='darkviolet',
+                    text="Points + Fills",
+                    hoverinfo = 'text+x+y'))
+
+fig.add_trace(go.Scatter(x=[3,3.5,4,4.5,5], y=[0,1,2,1,0],
+                    fill='toself', fillcolor = 'violet',
+                    hoveron='points',
+                    line_color='violet',
+                    text="Points only",
+                    hoverinfo='text+x+y'))
+
+fig.update_layout(
+    title = "hover on <i>points</i> or <i>fill</i>",
+    xaxis_range = [0,5.2],
+    yaxis_range = [0,3]
+)
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/scatter/#scatter-line
+and https://plotly.com/python/reference/scatter/#scatter-fill
+for more information and attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/filled-area-tile-maps.md plotly-7.1.0+dfsg1/doc/python/filled-area-tile-maps.md
--- plotly-5.20.0+dfsg/doc/python/filled-area-tile-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/filled-area-tile-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,140 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make an area on tile-based maps in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Filled Area on Tile Maps
+    order: 4
+    page_type: example_index
+    permalink: python/filled-area-tile-maps/
+    redirect_from: python/filled-area-on-mapbox/
+    thumbnail: thumbnail/area.jpg
+---
+
+There are three different ways to show a filled area on a tile-based map:
+
+- Using a [Scattermap](https://plotly.com/python/reference/scattermap/) trace and setting the `fill` attribute to 'toself'
+- Using a map layout (i.e. by minimally using an empty [Scattermap](https://plotly.com/python/reference/scattermap/) trace) and adding a GeoJSON layer
+- Using the [Choroplethmap](https://plotly.com/python/tile-county-choropleth/) trace type
+
+## Filled `Scattermap` Trace
+
+The following example uses `Scattermap` and sets `fill = 'toself'`
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    fill = "toself",
+    lon = [-74, -70, -70, -74], lat = [47, 47, 45, 45],
+    marker = { 'size': 10, 'color': "orange" }))
+
+fig.update_layout(
+    map = {
+        'style': "open-street-map",
+        'center': {'lon': -73, 'lat': 46 },
+        'zoom': 5},
+    showlegend = False)
+
+fig.show()
+
+```
+
+### Multiple Filled Areas with a `Scattermap` trace
+
+The following example shows how to use `None` in your data to draw multiple filled areas. Such gaps in trace data are unconnected by default, but this can be controlled via the [connectgaps](https://plotly.com/python/reference/scattermap/#scattermap-connectgaps) attribute.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    mode = "lines", fill = "toself",
+    lon = [-10, -10, 8, 8, -10, None, 30, 30, 50, 50, 30, None, 100, 100, 80, 80, 100],
+    lat = [30, 6, 6, 30, 30,    None, 20, 30, 30, 20, 20, None, 40, 50, 50, 40, 40]))
+
+fig.update_layout(
+    map = {'style': "open-street-map", 'center': {'lon': 30, 'lat': 30}, 'zoom': 2},
+    showlegend = False,
+    margin = {'l':0, 'r':0, 'b':0, 't':0})
+
+fig.show()
+```
+
+### GeoJSON Layers
+
+In this map we add a GeoJSON layer.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    mode = "markers",
+    lon = [-73.605], lat = [45.51],
+    marker = {'size': 20, 'color': ["cyan"]}))
+
+fig.update_layout(
+    map = {
+        'style': "open-street-map",
+        'center': { 'lon': -73.6, 'lat': 45.5},
+        'zoom': 12, 'layers': [{
+            'source': {
+                'type': "FeatureCollection",
+                'features': [{
+                    'type': "Feature",
+                    'geometry': {
+                        'type': "MultiPolygon",
+                        'coordinates': [[[
+                            [-73.606352888, 45.507489991], [-73.606133883, 45.50687600],
+                            [-73.605905904, 45.506773980], [-73.603533905, 45.505698946],
+                            [-73.602475870, 45.506856969], [-73.600031904, 45.505696003],
+                            [-73.599379992, 45.505389066], [-73.599119902, 45.505632008],
+                            [-73.598896977, 45.505514039], [-73.598783894, 45.505617001],
+                            [-73.591308727, 45.516246185], [-73.591380782, 45.516280145],
+                            [-73.596778656, 45.518690062], [-73.602796770, 45.521348046],
+                            [-73.612239983, 45.525564037], [-73.612422919, 45.525642061],
+                            [-73.617229085, 45.527751983], [-73.617279234, 45.527774160],
+                            [-73.617304713, 45.527741334], [-73.617492052, 45.527498362],
+                            [-73.617533258, 45.527512253], [-73.618074188, 45.526759105],
+                            [-73.618271651, 45.526500673], [-73.618446320, 45.526287943],
+                            [-73.618968507, 45.525698560], [-73.619388002, 45.525216750],
+                            [-73.619532966, 45.525064183], [-73.619686662, 45.524889290],
+                            [-73.619787038, 45.524770086], [-73.619925742, 45.524584939],
+                            [-73.619954486, 45.524557690], [-73.620122362, 45.524377961],
+                            [-73.620201713, 45.524298907], [-73.620775593, 45.523650879]
+                        ]]]
+                    }
+                }]
+            },
+            'type': "fill", 'below': "traces", 'color': "royalblue"}]},
+    margin = {'l':0, 'r':0, 'b':0, 't':0})
+
+fig.show()
+```
+
+
+#### Reference
+
+See  https://plotly.com/python/reference/scattermap/ for available attribute options.
diff -Nru plotly-5.20.0+dfsg/doc/python/funnel-charts.md plotly-7.1.0+dfsg1/doc/python/funnel-charts.md
--- plotly-5.20.0+dfsg/doc/python/funnel-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/funnel-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,227 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: plotly
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  plotly:
+    description: How to make funnel-chart plots in Python with Plotly.
+    display_as: financial
+    language: python
+    layout: base
+    name: Funnel Chart
+    order: 4
+    page_type: example_index
+    permalink: python/funnel-charts/
+    redirect_from: python/funnel-chart/
+    thumbnail: thumbnail/funnel.jpg
+---
+
+### Introduction
+
+Funnel charts are often used to represent data in different stages of a business process. It’s an important mechanism in Business Intelligence to identify potential problem areas of a process. For example, it’s used to observe the revenue or loss in a sales process for each stage, and displays values that are decreasing progressively. Each stage is illustrated as a percentage of the total of all values.
+
+### Basic Funnel Plot with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.funnel`, each row of the DataFrame is represented as a stage of the funnel.
+
+```python
+import plotly.express as px
+data = dict(
+    number=[39, 27.4, 20.6, 11, 2],
+    stage=["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"])
+fig = px.funnel(data, x='number', y='stage')
+fig.show()
+```
+
+### Stacked Funnel Plot with plotly.express
+
+```python
+import plotly.express as px
+import pandas as pd
+stages = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"]
+df_mtl = pd.DataFrame(dict(number=[39, 27.4, 20.6, 11, 3], stage=stages))
+df_mtl['office'] = 'Montreal'
+df_toronto = pd.DataFrame(dict(number=[52, 36, 18, 14, 5], stage=stages))
+df_toronto['office'] = 'Toronto'
+df = pd.concat([df_mtl, df_toronto], axis=0)
+fig = px.funnel(df, x='number', y='stage', color='office')
+fig.show()
+```
+
+### Basic Funnel Chart with graph_objects trace go.Funnel
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Funnel` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure(go.Funnel(
+    y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"],
+    x = [39, 27.4, 20.6, 11, 2]))
+
+fig.show()
+```
+
+### Setting Marker Size and Color
+
+This example uses [textposition](https://plotly.com/python/reference/scatter/#scatter-textposition) and [textinfo](https://plotly.com/python/reference/funnel/#funnel-textinfo) to determine information appears on the graph, and shows how to customize the bars.
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure(go.Funnel(
+    y = ["Website visit", "Downloads", "Potential customers", "Requested price", "Finalized"],
+    x = [39, 27.4, 20.6, 11, 2],
+    textposition = "inside",
+    textinfo = "value+percent initial",
+    opacity = 0.65, marker = {"color": ["deepskyblue", "lightsalmon", "tan", "teal", "silver"],
+    "line": {"width": [4, 2, 2, 3, 1, 1], "color": ["wheat", "wheat", "blue", "wheat", "wheat"]}},
+    connector = {"line": {"color": "royalblue", "dash": "dot", "width": 3}})
+    )
+
+fig.show()
+```
+
+### Stacked Funnel Plot with go.Funnel
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Funnel(
+    name = 'Montreal',
+    y = ["Website visit", "Downloads", "Potential customers", "Requested price"],
+    x = [120, 60, 30, 20],
+    textinfo = "value+percent initial"))
+
+fig.add_trace(go.Funnel(
+    name = 'Toronto',
+    orientation = "h",
+    y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent"],
+    x = [100, 60, 40, 30, 20],
+    textposition = "inside",
+    textinfo = "value+percent previous"))
+
+fig.add_trace(go.Funnel(
+    name = 'Vancouver',
+    orientation = "h",
+    y = ["Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized"],
+    x = [90, 70, 50, 30, 10, 5],
+    textposition = "outside",
+    textinfo = "value+percent total"))
+
+fig.show()
+```
+
+### Basic Area Funnel Plot with plotly.express
+
+With `px.funnel_area`, each row of the DataFrame is represented as a stage of
+the funnel.
+
+```python
+import plotly.express as px
+fig = px.funnel_area(names=["The 1st","The 2nd", "The 3rd", "The 4th", "The 5th"],
+                    values=[5, 4, 3, 2, 1])
+fig.show()
+```
+
+### Basic Area Funnel Plot with go.Funnelarea
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Funnelarea` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure(go.Funnelarea(
+    text = ["The 1st","The 2nd", "The 3rd", "The 4th", "The 5th"],
+    values = [5, 4, 3, 2, 1]
+    ))
+fig.show()
+```
+
+#### Set Marker Size and Color in Area Funnel Plots
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure(go.Funnelarea(
+      values = [5, 4, 3, 2, 1], text = ["The 1st","The 2nd", "The 3rd", "The 4th", "The 5th"],
+      marker = {"colors": ["deepskyblue", "lightsalmon", "tan", "teal", "silver"],
+                "line": {"color": ["wheat", "wheat", "blue", "wheat", "wheat"], "width": [0, 1, 5, 0, 4]}},
+      textfont = {"family": "Old Standard TT, serif", "size": 13, "color": "black"}, opacity = 0.65))
+fig.show()
+```
+
+#### Multiple Area Funnels
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Funnelarea(
+    scalegroup = "first", values = [500, 450, 340, 230, 220, 110], textinfo = "value",
+    title = {"position": "top center", "text": "Sales for Sale Person A in U.S."},
+    domain = {"x": [0, 0.5], "y": [0, 0.5]}))
+
+fig.add_trace(go.Funnelarea(
+    scalegroup = "first", values = [600, 500, 400, 300, 200, 100], textinfo = "value",
+    title = {"position": "top center", "text": "Sales of Sale Person B in Canada"},
+    domain = {"x": [0, 0.5], "y": [0.55, 1]}))
+
+fig.add_trace(go.Funnelarea(
+    scalegroup = "second", values = [510, 480, 440, 330, 220, 100], textinfo = "value",
+    title = {"position": "top left", "text": "Sales of Sale Person A in Canada"},
+    domain = {"x": [0.55, 1], "y": [0, 0.5]}))
+
+fig.add_trace(go.Funnelarea(
+            scalegroup = "second", values = [360, 250, 240, 130, 120, 60],
+            textinfo = "value", title = {"position": "top left", "text": "Sales of Sale Person B in U.S."},
+            domain = {"x": [0.55, 1], "y": [0.55, 1]}))
+
+fig.update_layout(
+            margin = {"l": 200, "r": 200}, shapes = [
+            {"x0": 0, "x1": 0.5, "y0": 0, "y1": 0.5},
+            {"x0": 0, "x1": 0.5, "y0": 0.55, "y1": 1},
+            {"x0": 0.55, "x1": 1, "y0": 0, "y1": 0.5},
+            {"x0": 0.55, "x1": 1, "y0": 0.55, "y1": 1}])
+
+fig.show()
+```
+
+### Pattern Fills
+
+*New in 5.15*
+
+Funnel area charts support [patterns](/python/pattern-hatching-texture/) (also known as hatching or texture) in addition to color. In this example, we add a pattern to the second stage of the funnel.
+
+```python
+from plotly import graph_objects as go
+
+colors = ["gold", "gold", "lightgreen", "lavender"]
+
+fig = go.Figure(
+    go.Funnelarea(
+        labels=["Interview 1", "Interview 2", "Test", "Final Stage"],
+        values=[100, 70, 40, 20],
+        textfont_size=20,
+        marker=dict(colors=colors, pattern=dict(shape=["", "/", "", ""])),
+    )
+)
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(funnel)`](https://plotly.com/python-api-reference/generated/plotly.express.funnel) or https://plotly.com/python/reference/funnel/ and https://plotly.com/python/reference/funnelarea/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/gantt.md plotly-7.1.0+dfsg1/doc/python/gantt.md
--- plotly-5.20.0+dfsg/doc/python/gantt.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/gantt.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,111 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make Gantt Charts in Python with Plotly. Gantt Charts use
+      horizontal bars to represent the start and end times of tasks.
+    display_as: basic
+    language: python
+    layout: base
+    name: Gantt Charts
+    order: 9
+    page_type: u-guide
+    permalink: python/gantt/
+    thumbnail: thumbnail/gantt.jpg
+---
+
+A [Gantt chart](https://en.wikipedia.org/wiki/Gantt_chart) is a type of bar chart that illustrates a project schedule. The chart lists the tasks to be performed on the vertical axis, and time intervals on the horizontal axis. The width of the horizontal bars in the graph shows the duration of each activity.
+
+
+### Gantt Charts and Timelines with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). With `px.timeline` (*introduced in version 4.9*) each data point is represented as a horizontal bar with a start and end point specified as dates.
+
+The `px.timeline` function by default sets the X-axis to be of `type=date`, so it can be configured like any [time-series chart](/python/time-series/).
+
+Plotly Express also supports a [general-purpose `px.bar` function for bar charts](/python/bar-charts/).
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame([
+    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28'),
+    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15'),
+    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30')
+])
+
+fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task")
+fig.update_yaxes(autorange="reversed") # otherwise tasks are listed from the bottom up
+fig.show()
+```
+
+`px.timeline` supports [discrete color](/python/discrete-color/) as above, or [continuous color](/python/colorscales/) as follows.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame([
+    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Resource="Alex"),
+    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Resource="Alex"),
+    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Resource="Max")
+])
+
+fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Resource")
+fig.update_yaxes(autorange="reversed")
+fig.show()
+```
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame([
+    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Completion_pct=50),
+    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Completion_pct=25),
+    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Completion_pct=75)
+])
+
+fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Completion_pct")
+fig.update_yaxes(autorange="reversed")
+fig.show()
+```
+
+It is also possible to have multiple bars on the same horizontal line, say by resource:
+
+*Note*: When setting `color` to the same value as `y`, `autorange` should not be set to `reverse`, so as to list the value of the Y axis in the same order as the legend entries.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame([
+    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Resource="Alex"),
+    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Resource="Alex"),
+    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Resource="Max")
+])
+
+fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource")
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/gauge-charts.md plotly-7.1.0+dfsg1/doc/python/gauge-charts.md
--- plotly-5.20.0+dfsg/doc/python/gauge-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/gauge-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,113 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.2.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make gauge meter charts in Python with Plotly.
+    display_as: financial
+    language: python
+    layout: base
+    name: Gauge Charts
+    order: 7
+    page_type: u-guide
+    permalink: python/gauge-charts/
+    redirect_from:
+    - python/gauge-chart/
+    - python/gauge-meter/
+    thumbnail: thumbnail/gauge.jpg
+---
+
+#### Basic Gauge
+A radial gauge chart has a circular arc, which displays a single value to estimate progress toward a goal.
+  The bar shows the target value, and the shading represents the progress toward that goal. Gauge charts, known as
+  speedometer charts as well. This chart type is usually used to illustrate key business indicators.
+
+  The example below displays a basic gauge chart with default attributes. For more information about different added attributes check [indicator](https://plotly.com/python/indicator/) tutorial.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "gauge+number",
+    value = 270,
+    domain = {'x': [0, 1], 'y': [0, 1]},
+    title = {'text': "Speed"}))
+
+fig.show()
+```
+
+#### Add Steps, Threshold, and Delta
+The following examples include "steps" attribute shown as shading inside the radial arc, "delta" which is the
+  difference of the value and goal (reference - value), and "threshold" to determine boundaries that visually alert you if the value cross a defined threshold.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    domain = {'x': [0, 1], 'y': [0, 1]},
+    value = 450,
+    mode = "gauge+number+delta",
+    title = {'text': "Speed"},
+    delta = {'reference': 380},
+    gauge = {'axis': {'range': [None, 500]},
+             'steps' : [
+                 {'range': [0, 250], 'color': "lightgray"},
+                 {'range': [250, 400], 'color': "gray"}],
+             'threshold' : {'line': {'color': "red", 'width': 4}, 'thickness': 0.75, 'value': 490}}))
+
+fig.show()
+```
+
+#### Custom Gauge Chart
+The following example shows how to style your gauge charts. For more information about all possible options check our [reference page](https://plotly.com/python/reference/indicator/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "gauge+number+delta",
+    value = 420,
+    domain = {'x': [0, 1], 'y': [0, 1]},
+    title = {'text': "Speed", 'font': {'size': 24}},
+    delta = {'reference': 400, 'increasing': {'color': "RebeccaPurple"}},
+    gauge = {
+        'axis': {'range': [None, 500], 'tickwidth': 1, 'tickcolor': "darkblue"},
+        'bar': {'color': "darkblue"},
+        'bgcolor': "white",
+        'borderwidth': 2,
+        'bordercolor': "gray",
+        'steps': [
+            {'range': [0, 250], 'color': 'cyan'},
+            {'range': [250, 400], 'color': 'royalblue'}],
+        'threshold': {
+            'line': {'color': "red", 'width': 4},
+            'thickness': 0.75,
+            'value': 490}}))
+
+fig.update_layout(paper_bgcolor = "lavender", font = {'color': "darkblue", 'family': "Arial"})
+
+fig.show()
+```
+
+
+#### Reference
+See https://plotly.com/python/reference/indicator/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/getting-started.md plotly-7.1.0+dfsg1/doc/python/getting-started.md
--- plotly-5.20.0+dfsg/doc/python/getting-started.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/getting-started.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,215 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: Getting Started with Plotly for Python.
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Getting Started with Plotly
+    page_type: u-guide
+    permalink: python/getting-started/
+    redirect_from:
+    - python/getting_started/
+    - /python/pytables/
+---
+
+
+### Overview
+
+The [`plotly` Python library](/python/) is an interactive, [open-source](/python/is-plotly-free) plotting library that supports over 40 unique chart types covering a wide range of statistical, financial, geographic, scientific, and 3-dimensional use-cases.
+
+Built on top of the Plotly JavaScript library ([plotly.js](https://plotly.com/javascript/)), `plotly` enables Python users to create beautiful interactive web-based visualizations that can be displayed in Jupyter notebooks, saved to standalone HTML files, or served as part of pure Python-built web applications using Dash. The `plotly` Python library is sometimes referred to as "plotly.py" to differentiate it from the JavaScript library.
+
+Thanks to deep integration with our [Kaleido](https://github.com/plotly/Kaleido) image export utility, `plotly` also provides great support for non-web contexts including desktop editors (e.g. QtConsole, Spyder, PyCharm) and static document publishing (e.g. exporting notebooks to PDF with high-quality vector images).
+
+This Getting Started guide explains how to install `plotly` and related optional pages. Once you've installed, you can use our documentation in three main ways:
+
+1. You jump right in to **examples** of how to make [basic charts](/python/basic-charts/), [statistical charts](/python/statistical-charts/), [scientific charts](/python/scientific-charts/), [financial charts](/python/financial-charts/), [maps](/python/maps/), and [3-dimensional charts](/python/3d-charts/).
+2. If you prefer to learn about the **fundamentals** of the library first, you can read about [the structure of figures](/python/figure-structure/), [how to create and update figures](/python/creating-and-updating-figures/), [how to display figures](/python/renderers/), [how to theme figures with templates](/python/templates/), [how to export figures to various formats](/python/static-image-export/) and about [Plotly Express, the high-level API](/python/plotly-express/) for doing all of the above.
+3. You can check out our exhaustive **reference** guides: the [Python API reference](/python-api-reference) or the [Figure Reference](/python/reference)
+
+For information on using Python to build web applications containing plotly figures, see the [_Dash User Guide_](https://dash.plotly.com/).
+
+We also encourage you to join the [Plotly Community Forum](http://community.plotly.com/) if you want help with anything related to `plotly`.
+
+### Installation
+
+`plotly` may be installed using `pip`:
+
+```
+$ pip install plotly
+```
+
+or `conda`:
+
+```
+$ conda install -c conda-forge plotly
+```
+
+If you want to use Plotly Express, install its required dependencies with:
+
+```
+pip install plotly[express]
+```
+
+You'll also need to install a [supported dataframe library](/python/px-arguments#supported-dataFrame-types).
+
+### Plotly charts in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'getting-started', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### JupyterLab Support
+
+To use `plotly` in [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/), install the `jupyterlab` and `anywidget` packages in the same environment as you installed `plotly`, using `pip`:
+
+```
+$ pip install jupyterlab anywidget
+```
+
+or `conda`:
+
+```
+$ conda install jupyterlab anywidget
+```
+
+Launch JupyterLab with:
+
+```
+$ jupyter lab
+```
+
+and display plotly figures inline:
+
+```python
+import plotly.express as px
+fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2])
+fig.show()
+```
+
+or using `FigureWidget` objects.
+
+```python
+import plotly.express as px
+fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2])
+
+import plotly.graph_objects as go
+fig_widget = go.FigureWidget(fig)
+fig_widget
+```
+
+See [_Displaying Figures in Python_](/python/renderers/) for more information on the renderers framework, and see [_Plotly FigureWidget Overview_](/python/figurewidget/) for more information on using `FigureWidget`.
+
+See the [Troubleshooting guide](/python/troubleshooting/) if you run into any problems with JupyterLab, particularly if you are using multiple Python environments inside Jupyter.
+
+
+#### Jupyter Notebook Support
+
+For use in the classic [Jupyter Notebook](https://jupyter.org/), install the `notebook` and `ipywidgets`
+packages using `pip`:
+
+```
+pip install "notebook>=7.0" "anywidget>=0.9.13"
+```
+
+or `conda`:
+
+```
+conda install "notebook>=7.0" "anywidget>=0.9.13"
+```
+
+These packages contain everything you need to run a Jupyter notebook...
+
+```
+$ jupyter notebook
+```
+
+and display plotly figures inline using the notebook renderer...
+
+
+```python
+import plotly.express as px
+fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2])
+fig.show()
+```
+
+or using `FigureWidget` objects.
+
+```python
+import plotly.express as px
+fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2])
+
+import plotly.graph_objects as go
+fig_widget = go.FigureWidget(fig)
+fig_widget
+```
+
+See [_Displaying Figures in Python_](/python/renderers/) for more information on the renderers framework, and see [_Plotly FigureWidget Overview_](/python/figurewidget/) for more information on using `FigureWidget`.
+
+
+### Static Image Export
+
+plotly.py supports [static image export](https://plotly.com/python/static-image-export/),
+using the [`kaleido`](https://github.com/plotly/Kaleido) package (version 1.0.0 or greater).
+
+Kaleido has minimal  dependencies and can be installed
+using pip...
+
+```
+$ pip install --upgrade kaleido
+```
+
+or conda.
+
+```
+$ conda install -c plotly python-kaleido
+```
+
+Kaleido requires Chrome or Chromium to generate images. By default, Kaleido will use the Chrome or Chromium version already installed on your system. If you don't have it installed or Kaleido can't find it, you may need to install it by running the following command:
+
+`plotly_get_chrome`
+
+### Where to next?
+
+Once you've installed, you can use our documentation in three main ways:
+
+1. You jump right in to **examples** of how to make [basic charts](/python/basic-charts/), [statistical charts](/python/statistical-charts/), [scientific charts](/python/scientific-charts/), [financial charts](/python/financial-charts/), [maps](/python/maps/), and [3-dimensional charts](/python/3d-charts/).
+2. If you prefer to learn about the **fundamentals** of the library first, you can read about [the structure of figures](/python/figure-structure/), [how to create and update figures](/python/creating-and-updating-figures/), [how to display figures](/python/renderers/), [how to theme figures with templates](/python/templates/), [how to export figures to various formats](/python/static-image-export/) and about [Plotly Express, the high-level API](/python/plotly-express/) for doing all of the above.
+3. You can check out our exhaustive **reference** guides: the [Python API reference](/python-api-reference) or the [Figure Reference](/python/reference)
+
+For information on using Python to build web applications containing plotly figures, see the [_Dash User Guide_](https://dash.plotly.com/).
+
+We also encourage you to join the [Plotly Community Forum](http://community.plotly.com/) if you want help with anything related to `plotly`.
diff -Nru plotly-5.20.0+dfsg/doc/python/graph-objects.md plotly-7.1.0+dfsg1/doc/python/graph-objects.md
--- plotly-5.20.0+dfsg/doc/python/graph-objects.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/graph-objects.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,109 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: Python classes that represent parts of a figure.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Graph Objects
+    order: 36
+    page_type: u-guide
+    permalink: python/graph-objects/
+    thumbnail: thumbnail/horizontal-bar.jpg
+---
+
+### What Are Graph Objects?
+
+The figures created, manipulated and rendered by the plotly Python library are [represented by tree-like data structures](/python/figure-structure/) which are automatically serialized to JSON for rendering by the Plotly.js JavaScript library. These trees are composed of named nodes called "attributes", with their structure defined by the Plotly.js figure schema, which is available in [machine-readable form](https://raw.githubusercontent.com/plotly/plotly.js/master/dist/plot-schema.json). **The `plotly.graph_objects` module (typically imported as `go`) contains an [automatically-generated hierarchy of Python classes](https://plotly.com/python-api-reference/plotly.graph_objects.html#graph-objects) which represent non-leaf nodes in this figure schema. The term "graph objects" refers to instances of these classes.  **
+
+The primary classes defined in the `plotly.graph_objects` module are [`Figure`](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Figure.html) and an [`ipywidgets`-compatible variant called `FigureWidget`](/python/figurewidget/), which both represent entire figures. Instances of these classes have many convenience methods for Pythonically [manipulating their attributes](/python/creating-and-updating-figures/) (e.g. `.update_layout()` or `.add_trace()`, which all accept ["magic underscore" notation](/python/creating-and-updating-figures/#magic-underscore-notation)) as well as [rendering them](/python/renderers/) (e.g. `.show()`) and [exporting them to various formats](/python/static-image-export/) (e.g. `.to_json()` or `.write_image()` or `.write_html()`).
+
+> Note: the functions in [Plotly Express](/python/plotly-express/), which is the recommended entry-point into the `plotly` library, are all built on top of graph objects, and all return instances of `plotly.graph_objects.Figure`.
+
+Every non-leaf attribute of a figure is represented by an instance of a class in the `plotly.graph_objects` hierarchy. For example, a figure `fig` can have an attribute `layout.margin`, which contains attributes `t`, `l`, `b` and `r` which are leaves of the tree: they have no children. The field at `fig.layout` is an object of class [`plotly.graph_objects.Layout`](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Layout.html) and `fig.layout.margin` is an object of class `plotly.graph_objects.layout.Margin` which represents the `margin` node, and it has fields `t`, `l`, `b` and `r`, containing the values of the respective leaf-nodes. Note that specifying all of these values can be done without creating intermediate objects using ["magic underscore" notation](/python/creating-and-updating-figures/#magic-underscore-notation): `go.Figure(layout_margin=dict(t=10, b=10, r=10, l=10))`.
+
+The objects contained in the list which is the [value of the attribute `data` are called "traces"](/python/figure-structure/), and can be of one of more than 40 possible types, each of which has a corresponding class in `plotly.graph_objects`. For example, traces of type `scatter` are represented by instances of the class `plotly.graph_objects.Scatter`. This means that a figure constructed as `go.Figure(data=[go.Scatter(x=[1,2], y=[3,4)])` will have the JSON representation `{"data": [{"type": "scatter", "x": [1,2], "y": [3,4]}]}`.
+
+### Graph Objects Compared to Dictionaries
+
+Graph objects have several benefits compared to plain Python dictionaries:
+
+1. Graph objects provide precise data validation. If you provide an invalid property name or an invalid property value as the key to a graph object, an exception will be raised with a helpful error message describing the problem. This is not the case if you use plain Python dictionaries and lists to build your figures.
+2. Graph objects contain descriptions of each valid property as Python docstrings, with a [full API reference available](https://plotly.com/python-api-reference/). You can use these docstrings in the development environment of your choice to learn about the available properties as an alternative to consulting the online [Full Reference](/python/reference/index/).
+3. Properties of graph objects can be accessed using both dictionary-style key lookup (e.g. `fig["layout"]`) or class-style property access (e.g. `fig.layout`).
+4. Graph objects support higher-level convenience functions for making updates to already constructed figures (`.update_layout()`, `.add_trace()` etc).
+5. Graph object constructors and update methods accept "magic underscores" (e.g. `go.Figure(layout_title_text="The Title")` rather than `dict(layout=dict(title=dict(text="The Title")))`) for more compact code.
+6. Graph objects support attached rendering (`.show()`) and exporting functions (`.write_image()`) that automatically invoke the appropriate functions from [the `plotly.io` module](https://plotly.com/python-api-reference/plotly.io.html).
+
+### When to use Graph Objects vs Plotly Express
+
+The recommended way to create figures is using the [functions in the plotly.express module](https://plotly.com/python-api-reference/), [collectively known as Plotly Express](/python/plotly-express/), which all return instances of `plotly.graph_objects.Figure`, so every figure produced with the `plotly` library actually uses graph objects under the hood, unless manually constructed out of dictionaries.
+
+That said, certain kinds of figures are not yet possible to create with Plotly Express, such as figures that use certain 3D trace-types like [`mesh`](/python/3d-mesh/) or [`isosurface`](/python/3d-isosurface-plots/). In addition, certain figures are cumbersome to create by starting from a figure created with Plotly Express, for example figures with [subplots of different types](/python/mixed-subplots/), [dual-axis plots](/python/multiple-axes/), or [faceted plots](/python/facet-plots/) with multiple different types of traces. To construct such figures, it can be easier to start from an empty `plotly.graph_objects.Figure` object (or one configured with subplots via the [make_subplots() function](/python/subplots/)) and progressively add traces and update attributes as above. Every `plotly` documentation page lists the Plotly Express option at the top if a Plotly Express function exists to make the kind of chart in question, and then the graph objects version below.
+
+Note that the figures produced by Plotly Express **in a single function-call** are [easy to customize at creation-time](/python/styling-plotly-express/), and to [manipulate after creation](/python/creating-and-updating-figures/) using the `update_*` and `add_*` methods.
+
+### Comparing Graph Objects and Plotly Express
+
+The figures produced by Plotly Express can always be built from the ground up using graph objects, but this approach typically takes **5-100 lines of code rather than 1**.
+
+Here is a simple example of how to produce the same figure object from the same data, once with Plotly Express and once without. Note that [Plotly Express functions](/python-api-reference/plotly.express.html) like [`px.bar()`](/python/bar-charts/) can accept a DataFrame as their first argument with column names passed to the `x` and `y` arguments, while [Graph Objects functions](/python-api-reference/plotly.graph_objects.html) like [`go.Bar()`](/python/bar-charts/#basic-bar-charts-with-plotlygraphobjects) require the data values to be passed directly to the `x` and `y` arguments as a tuple, list, NumPy array, or Pandas Series.
+
+The data in this example is in "long form" but [Plotly Express also accepts data in "wide form"](/python/wide-form/) and the line-count savings from Plotly Express over graph objects are comparable. More complex figures such as [sunbursts](/python/sunburst-charts/), [parallel coordinates](/python/parallel-coordinates-plot/), [facet plots](/python/facet-plots/) or [animations](/python/animations/) require many more lines of figure-specific graph objects code, whereas switching from one representation to another with Plotly Express usually involves changing just a few characters.
+
+```python
+import pandas as pd
+
+df = pd.DataFrame({
+  "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
+  "Contestant": ["Alex", "Alex", "Alex", "Jordan", "Jordan", "Jordan"],
+  "Number Eaten": [2, 1, 3, 1, 3, 2],
+})
+
+
+# Plotly Express
+
+import plotly.express as px
+
+fig = px.bar(df, x="Fruit", y="Number Eaten", color="Contestant", barmode="group")
+fig.show()
+
+
+# Graph Objects
+
+import plotly.graph_objects as go
+
+fig = go.Figure()
+for contestant, group in df.groupby("Contestant"):
+    fig.add_trace(go.Bar(x=group["Fruit"], y=group["Number Eaten"], name=contestant,
+      hovertemplate="Contestant=%s<br>Fruit=%%{x}<br>Number Eaten=%%{y}<extra></extra>"% contestant))
+fig.update_layout(legend_title_text = "Contestant")
+fig.update_xaxes(title_text="Fruit")
+fig.update_yaxes(title_text="Number Eaten")
+fig.show()
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/graphing-multiple-chart-types.md plotly-7.1.0+dfsg1/doc/python/graphing-multiple-chart-types.md
--- plotly-5.20.0+dfsg/doc/python/graphing-multiple-chart-types.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/graphing-multiple-chart-types.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,248 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to design figures with multiple chart types in python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Multiple Chart Types
+    order: 19
+    page_type: u-guide
+    permalink: python/graphing-multiple-chart-types/
+    thumbnail: thumbnail/multiple-chart-type.jpg
+---
+
+### Chart Types versus Trace Types
+
+Plotly's [figure data structure](/python/figure-structure/) supports defining [subplots](/python/subplots/) of [various types](/python/mixed-subplots/) (e.g. [cartesian](/python/axes/), [polar](/python/polar-chart/), [3-dimensional](/python/3d-charts/), [maps](/python/maps/) etc) with attached traces of [various compatible types](/python/figure-structure/) (e.g. scatter, bar, choropleth, surface etc). This means that **Plotly figures are not constrained to representing a fixed set of "chart types"** such as scatter plots only or bar charts only or line charts only: any subplot can contain multiple traces of different types.
+
+
+### Multiple Trace Types with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Plotly Express exposes a number of functions such as `px.scatter()` and `px.choropleth()` which generally speaking only contain traces of the same type, with exceptions made for [trendlines](/python/linear-fits/) and [marginal distribution plots](/python/marginal-plots/).
+
+Figures produced with Plotly Express functions support the `add_trace()` method documented below, just like figures created with [graph objects](/python/graph-objects/) so it is easy to start with a Plotly Express figure containing only traces of a given type, and add traces of another type.
+
+```python
+import plotly.express as px
+
+fruits = ["apples", "oranges", "bananas"]
+fig = px.line(x=fruits, y=[1,3,2], color=px.Constant("This year"),
+             labels=dict(x="Fruit", y="Amount", color="Time Period"))
+fig.add_bar(x=fruits, y=[2,1,3], name="Last year")
+fig.show()
+```
+
+#### Grouped Bar and Scatter Chart
+
+*New in 5.12*
+
+In this example, we display individual data points with a grouped scatter chart and show averages using a grouped bar chart. `offsetgroup` links the bar trace for smoker with the scatter trace for smoker, and the bar trace for non-smoker with the scatter trace for non-smoker. If you deselect a trace using the legend, other traces maintain the position of the traces they are linked to.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.tips()[data.tips()["day"] == "Sun"]
+
+mean_values_df = df.groupby(by=["sex", "smoker"], as_index=False).mean(
+    numeric_only=True
+)
+
+smoker_mean = mean_values_df[mean_values_df.smoker == "Yes"].sort_values(
+    by="tip", ascending=False
+)
+non_smoker_mean = mean_values_df[mean_values_df.smoker == "No"].sort_values(
+    by="tip", ascending=False
+)
+
+smoker = df[df.smoker == "Yes"].sort_values(by="tip", ascending=False)
+non_smoker = df[df.smoker == "No"].sort_values(by="tip", ascending=False)
+
+fig = go.Figure(
+    layout=dict(
+        xaxis=dict(categoryorder="category descending"),
+        yaxis=dict(range=[0, 7]),
+        scattermode="group",
+        legend=dict(groupclick="toggleitem"),
+    )
+)
+
+fig.add_trace(
+    go.Bar(
+        x=smoker_mean.sex,
+        y=smoker_mean.tip,
+        name="Average",
+        marker_color="IndianRed",
+        offsetgroup="smoker",
+        legendgroup="smoker",
+        legendgrouptitle_text="Smoker",
+    )
+)
+
+
+fig.add_trace(
+    go.Scatter(
+        x=smoker.sex,
+        y=smoker.tip,
+        mode="markers",
+        name="Individual tips",
+        marker=dict(color="LightSlateGrey", size=5),
+        offsetgroup="smoker",
+        legendgroup="smoker",
+    )
+)
+
+fig.add_trace(
+    go.Bar(
+        x=non_smoker_mean.sex,
+        y=non_smoker_mean.tip,
+        name="Average",
+        marker_color="LightSalmon",
+        offsetgroup="non-smoker",
+        legendgroup="non-smoker",
+        legendgrouptitle_text="Non-Smoker",
+    )
+)
+
+
+fig.add_trace(
+    go.Scatter(
+        x=non_smoker.sex,
+        y=non_smoker.tip,
+        mode="markers",
+        name="Individual tips",
+        marker=dict(color="LightSteelBlue", size=5),
+        offsetgroup="non-smoker",
+        legendgroup="non-smoker",
+    )
+)
+
+fig.show()
+```
+
+#### Line Chart and a Bar Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(
+    go.Scatter(
+        x=[0, 1, 2, 3, 4, 5],
+        y=[1.5, 1, 1.3, 0.7, 0.8, 0.9]
+    ))
+
+fig.add_trace(
+    go.Bar(
+        x=[0, 1, 2, 3, 4, 5],
+        y=[1, 0.5, 0.7, -1.2, 0.3, 0.4]
+    ))
+
+fig.show()
+```
+
+#### A Contour and Scatter Plot of the Method of Steepest Descent
+
+```python
+import plotly.graph_objects as go
+
+# Load data
+import json
+import urllib
+
+response = urllib.request.urlopen(
+    "https://raw.githubusercontent.com/plotly/datasets/master/steepest.json")
+
+data = json.load(response)
+
+# Create figure
+fig = go.Figure()
+
+fig.add_trace(
+    go.Contour(
+        z=data["contour_z"][0],
+        y=data["contour_y"][0],
+        x=data["contour_x"][0],
+        ncontours=30,
+        showscale=False
+    )
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=data["trace_x"],
+        y=data["trace_y"],
+        mode="markers+lines",
+        name="steepest",
+        line=dict(
+            color="black"
+        )
+    )
+)
+
+fig.show()
+```
+
+#### Trace Zorder
+
+*New in 5.21*
+
+You can move a trace in front of or behind another trace by setting its `zorder`. All traces have a default `zorder` of `0`. In the following example, we set `zorder` on the bar trace to `1` to move it in front of the scatter trace.
+
+```python
+import plotly.graph_objects as go
+
+x = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+y_bar = [10, 15, 7, 10, 17, 15, 14, 20, 16, 19, 15, 17]
+y_area = [12, 13, 10, 14, 15, 13, 16, 18, 15, 17, 14, 16]
+
+area_trace = go.Scatter(
+    x=x,
+    y=y_area,
+    fill="tozeroy",
+    mode="lines+markers",
+    name="Area Trace with default `zorder` of 0",
+    line=dict(color="lightsteelblue"),
+)
+
+bar_trace = go.Bar(
+    x=x,
+    y=y_bar,
+    name="Bar Trace with `zorder` of 1",
+    zorder=1,
+    marker=dict(color="lightslategray"),
+)
+
+fig = go.Figure(data=[area_trace, bar_trace])
+
+fig.show()
+
+```
+
+#### Reference
+See https://plotly.com/python/reference/ for more information and attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/heatmaps.md plotly-7.1.0+dfsg1/doc/python/heatmaps.md
--- plotly-5.20.0+dfsg/doc/python/heatmaps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/heatmaps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,296 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make Heatmaps in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Heatmaps
+    order: 2
+    page_type: example_index
+    permalink: python/heatmaps/
+    redirect_from: python/heatmap/
+    thumbnail: thumbnail/heatmap.jpg
+---
+
+The term "heatmap" usually refers to a Cartesian plot with data visualized as colored rectangular tiles, which is the subject of this page. It is also sometimes used to refer to [actual maps with density data displayed as color intensity](/python/tile-density-heatmaps/).
+
+Plotly supports two different types of colored-tile heatmaps:
+
+1. **Matrix Heatmaps** accept a 2-dimensional matrix or array of data and visualizes it directly. This type of heatmap is the subject of this page.
+2. **Density Heatmaps** accept data as a list and visualizes aggregated quantities like counts or sums of this data. Please refer to the [2D Histogram documentation](/python/2D-Histogram/) for this kind of figure.
+
+
+### Heatmaps with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). With `px.imshow`, each value of the input array or data frame is represented as a heatmap pixel.
+
+
+<!-- #region -->
+The `px.imshow()` function can be used to display heatmaps (as well as full-color images, as its name suggests). It accepts both array-like objects like lists of lists and `numpy` or `xarray` arrays, as well as supported [DataFrame objects](/python/px-arguments#supported-dataframes).
+
+
+> For more examples using `px.imshow`, including examples of faceting and animations, as well as full-color image display, see the [the `imshow` documentation page](/python/imshow).
+<!-- #endregion -->
+
+```python
+import plotly.express as px
+
+fig = px.imshow([[1, 20, 30],
+                 [20, 1, 60],
+                 [30, 60, 1]])
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.medals_wide(indexed=True)
+fig = px.imshow(df)
+fig.show()
+```
+
+<!-- #region -->
+### Displaying Text on Heatmaps
+
+*New in v5.5*
+
+
+You can add the values to the figure as text using the `text_auto` argument. Setting it to `True` will display the values on the bars, and setting it to a `d3-format` formatting string will control the output format.
+<!-- #endregion -->
+
+```python
+import plotly.express as px
+
+z = [[.1, .3, .5, .7, .9],
+     [1, .8, .6, .4, .2],
+     [.2, 0, .5, .7, .9],
+     [.9, .8, .4, .2, 0],
+     [.3, .4, .5, .7, 1]]
+
+fig = px.imshow(z, text_auto=True)
+fig.show()
+```
+
+#### Heatmaps in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'heatmaps', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Controlling Aspect Ratio
+
+By default, `px.imshow()` produces heatmaps with square tiles, but setting the `aspect` argument to `"auto"` will instead fill the plotting area with the heatmap, using non-square tiles.
+
+```python
+import plotly.express as px
+
+z = [[.1, .3, .5, .7, .9],
+     [1, .8, .6, .4, .2],
+     [.2, 0, .5, .7, .9],
+     [.9, .8, .4, .2, 0],
+     [.3, .4, .5, .7, 1]]
+
+fig = px.imshow(z, text_auto=True, aspect="auto")
+fig.show()
+```
+
+### Customizing the axes and labels on a heatmap
+
+You can use the `x`, `y` and `labels` arguments to customize the display of a heatmap, and use `.update_xaxes()` to move the x axis tick labels to the top:
+
+```python
+import plotly.express as px
+data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
+fig = px.imshow(data,
+                labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
+                x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
+                y=['Morning', 'Afternoon', 'Evening']
+               )
+fig.update_xaxes(side="top")
+fig.show()
+```
+
+### Display an xarray image with px.imshow
+
+[xarrays](http://xarray.pydata.org/en/stable/) are labeled arrays (with labeled axes and coordinates). If you pass an xarray image to `px.imshow`, its axes labels and coordinates will be used for axis titles. If you don't want this behavior, you can pass `img.values` which is a NumPy array if `img` is an xarray. Alternatively, you can override axis titles hover labels and colorbar title using the `labels` attribute, as above.
+
+```python
+import plotly.express as px
+import xarray as xr
+# Load xarray from dataset included in the xarray tutorial
+airtemps = xr.tutorial.open_dataset('air_temperature').air.sel(lon=250.0)
+fig = px.imshow(airtemps.T, color_continuous_scale='RdBu_r', origin='lower')
+fig.show()
+```
+
+### Basic Heatmap with `plotly.graph_objects`
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Heatmap` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Heatmap(
+                    z=[[1, 20, 30],
+                      [20, 1, 60],
+                      [30, 60, 1]]))
+fig.show()
+```
+
+### Heatmap with Categorical Axis Labels
+
+In this example we also show how to ignore [hovertext](https://plotly.com/python/hover-text-and-formatting/) when we have missing values in the data by setting the [hoverongaps](https://plotly.com/python/reference/heatmap/#heatmap-hoverongaps) to False.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Heatmap(
+                   z=[[1, None, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
+                   x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
+                   y=['Morning', 'Afternoon', 'Evening'],
+                   hoverongaps = False))
+fig.show()
+```
+
+### Heatmap with Unequal Block Sizes
+
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Build the rectangles as a heatmap
+# specify the edges of the heatmap squares
+phi = (1 + np.sqrt(5) )/2. # golden ratio
+xe = [0, 1, 1+(1/(phi**4)), 1+(1/(phi**3)), phi]
+ye = [0, 1/(phi**3), 1/phi**3+1/phi**4, 1/(phi**2), 1]
+
+z = [ [13,3,3,5],
+      [13,2,1,5],
+      [13,10,11,12],
+      [13,8,8,8]
+    ]
+
+fig = go.Figure(data=go.Heatmap(
+          x = np.sort(xe),
+          y = np.sort(ye),
+          z = z,
+          type = 'heatmap',
+          colorscale = 'Viridis'))
+
+# Add spiral line plot
+
+def spiral(th):
+    a = 1.120529
+    b = 0.306349
+    r = a*np.exp(-b*th)
+    return (r*np.cos(th), r*np.sin(th))
+
+theta = np.linspace(-np.pi/13,4*np.pi,1000); # angle
+(x,y) = spiral(theta)
+
+fig.add_trace(go.Scatter(x= -x+x[0], y= y-y[0],
+     line =dict(color='white',width=3)))
+
+axis_template = dict(range = [0,1.6], autorange = False,
+             showgrid = False, zeroline = False,
+             linecolor = 'black', showticklabels = False,
+             ticks = '' )
+
+fig.update_layout(margin = dict(t=200,r=200,b=200,l=200),
+    xaxis = axis_template,
+    yaxis = axis_template,
+    showlegend = False,
+    width = 700, height = 700,
+    autosize = False )
+
+fig.show()
+```
+
+### Heatmap with Datetime Axis
+
+```python
+import plotly.graph_objects as go
+import datetime
+import numpy as np
+np.random.seed(1)
+
+programmers = ['Alex','Nicole','Sara','Etienne','Chelsea','Jody','Marianne']
+
+base = datetime.datetime.today()
+dates = base - np.arange(180) * datetime.timedelta(days=1)
+z = np.random.poisson(size=(len(programmers), len(dates)))
+
+fig = go.Figure(data=go.Heatmap(
+        z=z,
+        x=dates,
+        y=programmers,
+        colorscale='Viridis'))
+
+fig.update_layout(
+    title=dict(text='GitHub commits per day'),
+    xaxis_nticks=36)
+
+fig.show()
+```
+
+### Text on Heatmap Points
+
+In this example we add text to heatmap points using `texttemplate`. We use the values from the `text` attribute for the text. We also adjust the font size using `textfont`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Heatmap(
+                    z=[[1, 20, 30],
+                      [20, 1, 60],
+                      [30, 60, 1]],
+                    text=[['one', 'twenty', 'thirty'],
+                          ['twenty', 'one', 'sixty'],
+                          ['thirty', 'sixty', 'one']],
+                    texttemplate="%{text}",
+                    textfont={"size":20}))
+
+fig.show()
+```
+
+### Heatmap and datashader
+
+Arrays of rasterized values build by datashader can be visualized using
+plotly's heatmaps, as shown in the [plotly and datashader tutorial](/python/datashader/).
+
+#### Reference
+See [function reference for `px.(imshow)`](https://plotly.com/python-api-reference/generated/plotly.express.imshow) or https://plotly.com/python/reference/heatmap/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/hexbin-map.md plotly-7.1.0+dfsg1/doc/python/hexbin-map.md
--- plotly-5.20.0+dfsg/doc/python/hexbin-map.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/hexbin-map.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,159 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make a map with Hexagonal Binning of data in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Hexbin Map
+    order: 13
+    page_type: u-guide
+    permalink: python/hexbin-map/
+    thumbnail: thumbnail/hexbin_mapbox.jpg
+---
+
+#### Simple Count Hexbin
+
+This page details the use of a [figure factory](/python/figure-factories/). For more examples with Choropleth maps, see [this page](/python/choropleth-maps/).
+
+```python
+import plotly.figure_factory as ff
+import plotly.express as px
+
+df = px.data.carshare()
+
+fig = ff.create_hexbin_map(
+    data_frame=df, lat="centroid_lat", lon="centroid_lon",
+    nx_hexagon=10, opacity=0.9, labels={"color": "Point Count"},
+)
+fig.update_layout(margin=dict(b=0, t=0, l=0, r=0))
+fig.show()
+```
+
+#### Count Hexbin with Minimum Count and Opacity
+
+```python
+import plotly.figure_factory as ff
+import plotly.express as px
+
+df = px.data.carshare()
+
+fig = ff.create_hexbin_map(
+    data_frame=df, lat="centroid_lat", lon="centroid_lon",
+    nx_hexagon=10, opacity=0.5, labels={"color": "Point Count"},
+    min_count=1,
+)
+fig.show()
+```
+
+#### Display the Underlying Data
+
+```python
+import plotly.figure_factory as ff
+import plotly.express as px
+
+df = px.data.carshare()
+
+fig = ff.create_hexbin_map(
+    data_frame=df, lat="centroid_lat", lon="centroid_lon",
+    nx_hexagon=10, opacity=0.5, labels={"color": "Point Count"},
+    min_count=1, color_continuous_scale="Viridis",
+    show_original_data=True,
+    original_data_marker=dict(size=4, opacity=0.6, color="deeppink")
+)
+fig.show()
+```
+
+#### Compute the Mean Value per Hexbin
+
+```python
+import plotly.figure_factory as ff
+import plotly.express as px
+import numpy as np
+
+df = px.data.carshare()
+
+fig = ff.create_hexbin_map(
+    data_frame=df, lat="centroid_lat", lon="centroid_lon",
+    nx_hexagon=10, opacity=0.9, labels={"color": "Average Peak Hour"},
+    color="peak_hour", agg_func=np.mean, color_continuous_scale="Icefire", range_color=[0,23]
+)
+fig.show()
+```
+
+#### Compute the Sum Value per Hexbin
+
+```python
+import plotly.figure_factory as ff
+import plotly.express as px
+import numpy as np
+
+df = px.data.carshare()
+
+fig = ff.create_hexbin_map(
+    data_frame=df, lat="centroid_lat", lon="centroid_lon",
+    nx_hexagon=10, opacity=0.9, labels={"color": "Summed Car.Hours"},
+    color="car_hours", agg_func=np.sum, color_continuous_scale="Magma"
+)
+fig.show()
+```
+
+#### Hexbin with Animation
+
+```python
+import plotly.figure_factory as ff
+import plotly.express as px
+import numpy as np
+
+np.random.seed(0)
+
+N = 500
+n_frames = 12
+lat = np.concatenate([
+    np.random.randn(N) * 0.5 + np.cos(i / n_frames * 2 * np.pi) + 10
+    for i in range(n_frames)
+])
+lon = np.concatenate([
+    np.random.randn(N) * 0.5 + np.sin(i / n_frames * 2 * np.pi)
+    for i in range(n_frames)
+])
+frame = np.concatenate([
+    np.ones(N, int) * i for i in range(n_frames)
+])
+
+fig = ff.create_hexbin_map(
+    lat=lat, lon=lon, nx_hexagon=15, animation_frame=frame,
+    color_continuous_scale="Cividis", labels={"color": "Point Count", "frame": "Period"},
+    opacity=0.5, min_count=1,
+    show_original_data=True, original_data_marker=dict(opacity=0.6, size=4, color="deeppink")
+)
+fig.update_layout(margin=dict(b=0, t=0, l=0, r=0))
+fig.layout.sliders[0].pad.t=20
+fig.layout.updatemenus[0].pad.t=40
+fig.show()
+```
+
+#### Reference
+
+For more info on Plotly maps, see: https://plotly.com/python/maps.<br> For more info on using colorscales with Plotly see: https://plotly.com/python/heatmap-and-contour-colorscales/ <br>For more info on `ff.create_hexbin_map()`, see the [full function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_hexbin_map.html#plotly.figure_factory.create_hexbin_map)
diff -Nru plotly-5.20.0+dfsg/doc/python/histograms.md plotly-7.1.0+dfsg1/doc/python/histograms.md
--- plotly-5.20.0+dfsg/doc/python/histograms.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/histograms.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,511 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: How to make Histograms in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Histograms
+    order: 3
+    page_type: example_index
+    permalink: python/histograms/
+    redirect_from:
+    - /python/histogram-tutorial/
+    - /python/histogram/
+    thumbnail: thumbnail/histogram.jpg
+---
+
+<!-- #region -->
+In statistics, a [histogram](https://en.wikipedia.org/wiki/Histogram) is representation of the distribution of numerical data, where the data are binned and the count for each bin is represented. More generally, in Plotly a histogram is an aggregated bar chart, with several possible aggregation functions (e.g. sum, average, count...) which can be used to visualize data on categorical and date axes as well as linear axes.
+
+
+Alternatives to histogram plots for visualizing distributions include [violin plots](https://plotly.com/python/violin/), [box plots](https://plotly.com/python/box-plots/), [ECDF plots](https://plotly.com/python/ecdf-plots/) and [strip charts](https://plotly.com/python/strip-charts/).
+
+> If you're looking instead for bar charts, i.e. representing *raw, unaggregated* data with rectangular
+bar, go to the [Bar Chart tutorial](/python/bar-charts/).
+
+## Histograms with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+<!-- #endregion -->
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+# Here we use a column with categorical data
+fig = px.histogram(df, x="day")
+fig.show()
+```
+
+#### Choosing the number of bins
+
+By default, the number of bins is chosen so that this number is comparable to the typical number of samples in a bin. This number can be customized, as well as the range of values.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", nbins=20)
+fig.show()
+```
+
+### Histograms on Date Data
+
+Plotly histograms will automatically bin date data in addition to numerical data:
+
+```python
+import plotly.express as px
+
+df = px.data.stocks()
+fig = px.histogram(df, x="date")
+fig.update_layout(bargap=0.2)
+fig.show()
+```
+
+### Histograms on Categorical Data
+
+Plotly histograms will automatically bin numerical or date data but can also be used on raw categorical data, as in the following example, where the X-axis value is the categorical "day" variable:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="day", category_orders=dict(day=["Thur", "Fri", "Sat", "Sun"]))
+fig.show()
+```
+
+#### Histograms in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'histograms', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Accessing the counts (y-axis) values
+
+JavaScript calculates the y-axis (count) values on the fly in the browser, so it's not accessible in the `fig`. You can manually calculate it using `np.histogram`.
+
+```python
+import plotly.express as px
+import numpy as np
+
+df = px.data.tips()
+# create the bins
+counts, bins = np.histogram(df.total_bill, bins=range(0, 60, 5))
+bins = 0.5 * (bins[:-1] + bins[1:])
+
+fig = px.bar(x=bins, y=counts, labels={'x':'total_bill', 'y':'count'})
+fig.show()
+```
+
+#### Type of normalization
+
+The default mode is to represent the count of samples in each bin. With the `histnorm` argument, it is also possible to represent the percentage or fraction of samples in each bin (`histnorm='percent'` or `probability`), or a density histogram (the sum of all bar areas equals the total number of sample points, `density`), or a probability density histogram (the sum of all bar areas equals 1, `probability density`).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", histnorm='probability density')
+fig.show()
+```
+
+#### Aspect of the histogram plot
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill",
+                   title='Histogram of bills',
+                   labels={'total_bill':'total bill'}, # can specify one label per df column
+                   opacity=0.8,
+                   log_y=True, # represent bars with log scale
+                   color_discrete_sequence=['indianred'] # color of histogram bars
+                   )
+fig.show()
+```
+
+#### Several histograms for the different values of one column
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", color="sex")
+fig.show()
+```
+
+#### Aggregating with other functions than `count`
+
+For each bin of `x`, one can compute a function of data using `histfunc`. The argument of `histfunc` is the dataframe column given as the `y` argument. Below the plot shows that the average tip increases with the total bill.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", histfunc='avg')
+fig.show()
+```
+
+The default `histfunc` is `sum` if `y` is given, and works with categorical as well as binned numeric data on the `x` axis:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="day", y="total_bill", category_orders=dict(day=["Thur", "Fri", "Sat", "Sun"]))
+fig.show()
+```
+*New in v5.0*
+
+Histograms afford the use of [patterns (also known as hatching or texture)](/python/pattern-hatching-texture/) in addition to color:
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.histogram(df, x="sex", y="total_bill", color="sex", pattern_shape="smoker")
+fig.show()
+```
+
+#### Visualizing the distribution
+
+With the `marginal` keyword, a [marginal](https://plotly.com/python/marginal-plots/) is drawn alongside the histogram, visualizing the distribution. See [the distplot page](https://plotly.com/python/distplot/) for more examples of combined statistical representations.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", color="sex", marginal="rug", # can be `box`, `violin`
+                         hover_data=df.columns)
+fig.show()
+```
+
+### Adding text labels
+
+*New in v5.5*
+
+You can add text to histogram bars using the `text_auto` argument. Setting it to `True` will display the values on the bars, and setting it to a `d3-format` formatting string will control the output format.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", histfunc="avg", nbins=8, text_auto=True)
+fig.show()
+```
+
+## Histograms with go.Histogram
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Histogram` class from `plotly.graph_objects`](/python/graph-objects/). All of the available histogram options are described in the histogram section of the reference page: https://plotly.com/python/reference#histogram.
+
+### Basic Histogram
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+np.random.seed(1)
+
+x = np.random.randn(500)
+
+fig = go.Figure(data=[go.Histogram(x=x)])
+fig.show()
+```
+
+### Normalized Histogram
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x = np.random.randn(500)
+fig = go.Figure(data=[go.Histogram(x=x, histnorm='probability')])
+
+fig.show()
+```
+
+### Horizontal Histogram
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+y = np.random.randn(500)
+# Use `y` argument instead of `x` for horizontal histogram
+
+fig = go.Figure(data=[go.Histogram(y=y)])
+fig.show()
+```
+
+### Overlaid Histogram
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x0 = np.random.randn(500)
+# Add 1 to shift the mean of the Gaussian distribution
+x1 = np.random.randn(500) + 1
+
+fig = go.Figure()
+fig.add_trace(go.Histogram(x=x0))
+fig.add_trace(go.Histogram(x=x1))
+
+# Overlay both histograms
+fig.update_layout(barmode='overlay')
+# Reduce opacity to see both histograms
+fig.update_traces(opacity=0.75)
+fig.show()
+```
+
+### Stacked Histograms
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x0 = np.random.randn(2000)
+x1 = np.random.randn(2000) + 1
+
+fig = go.Figure()
+fig.add_trace(go.Histogram(x=x0))
+fig.add_trace(go.Histogram(x=x1))
+
+# The two histograms are drawn on top of another
+fig.update_layout(barmode='stack')
+fig.show()
+```
+
+### Styled Histogram
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+x0 = np.random.randn(500)
+x1 = np.random.randn(500) + 1
+
+fig = go.Figure()
+fig.add_trace(go.Histogram(
+    x=x0,
+    histnorm='percent',
+    name='control', # name used in legend and hover labels
+    xbins=dict( # bins used for histogram
+        start=-4.0,
+        end=3.0,
+        size=0.5
+    ),
+    marker_color='#EB89B5',
+    opacity=0.75
+))
+fig.add_trace(go.Histogram(
+    x=x1,
+    histnorm='percent',
+    name='experimental',
+    xbins=dict(
+        start=-3.0,
+        end=4,
+        size=0.5
+    ),
+    marker_color='#330C73',
+    opacity=0.75
+))
+
+fig.update_layout(
+    title_text='Sampled Results', # title of plot
+    xaxis_title_text='Value', # xaxis label
+    yaxis_title_text='Count', # yaxis label
+    bargap=0.2, # gap between bars of adjacent location coordinates
+    bargroupgap=0.1 # gap between bars of the same location coordinates
+)
+
+fig.show()
+```
+
+### Histogram Bar Text
+
+You can add text to histogram bars using the `texttemplate` argument. In this example we add the x-axis values as text following the format `%{variable}`. We also adjust the size of the text using `textfont_size`.
+
+```python
+import plotly.graph_objects as go
+
+numbers = ["5", "10", "3", "10", "5", "8", "5", "5"]
+
+fig = go.Figure()
+fig.add_trace(go.Histogram(x=numbers, name="count", texttemplate="%{x}", textfont_size=20))
+
+fig.show()
+```
+
+### Cumulative Histogram
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+x = np.random.randn(500)
+fig = go.Figure(data=[go.Histogram(x=x, cumulative_enabled=True)])
+
+fig.show()
+```
+
+### Specify Aggregation Function
+
+```python
+import plotly.graph_objects as go
+
+x = ["Apples","Apples","Apples","Oranges", "Bananas"]
+y = ["5","10","3","10","5"]
+
+fig = go.Figure()
+fig.add_trace(go.Histogram(histfunc="count", y=y, x=x, name="count"))
+fig.add_trace(go.Histogram(histfunc="sum", y=y, x=x, name="sum"))
+
+fig.show()
+```
+
+### Custom Binning
+
+For custom binning along x-axis, use the attribute [`nbinsx`](https://plotly.com/python/reference/histogram/#histogram-nbinsx). Please note that the autobin algorithm will choose a 'nice' round bin size that may result in somewhat fewer than `nbinsx` total bins. Alternatively, you can set the exact values for [`xbins`](https://plotly.com/python/reference/histogram/#histogram-xbins) along with `autobinx = False`.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+x = ['1970-01-01', '1970-01-01', '1970-02-01', '1970-04-01', '1970-01-02',
+     '1972-01-31', '1970-02-13', '1971-04-19']
+
+fig = make_subplots(rows=3, cols=2)
+
+trace0 = go.Histogram(x=x, nbinsx=4)
+trace1 = go.Histogram(x=x, nbinsx = 8)
+trace2 = go.Histogram(x=x, nbinsx=10)
+trace3 = go.Histogram(x=x,
+                      xbins=dict(
+                      start='1969-11-15',
+                      end='1972-03-31',
+                      size='M18'), # M18 stands for 18 months
+                      autobinx=False
+                     )
+trace4 = go.Histogram(x=x,
+                      xbins=dict(
+                      start='1969-11-15',
+                      end='1972-03-31',
+                      size='M4'), # 4 months bin size
+                      autobinx=False
+                      )
+trace5 = go.Histogram(x=x,
+                      xbins=dict(
+                      start='1969-11-15',
+                      end='1972-03-31',
+                      size= 'M2'), # 2 months
+                      autobinx = False
+                      )
+
+fig.add_trace(trace0, 1, 1)
+fig.add_trace(trace1, 1, 2)
+fig.add_trace(trace2, 2, 1)
+fig.add_trace(trace3, 2, 2)
+fig.add_trace(trace4, 3, 1)
+fig.add_trace(trace5, 3, 2)
+
+fig.show()
+```
+
+### See also: Bar Charts
+
+If you want to display information about the individual items within each histogram bar, then create a stacked bar chart with hover information as shown below. Note that this is not technically the histogram chart type, but it will have a similar effect as shown below by comparing the output of `px.histogram` and `px.bar`. For more information, see the [tutorial on bar charts](/python/bar-charts/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig1 = px.bar(df, x='day', y='tip', height=300,
+              title='Stacked Bar Chart - Hover on individual items')
+fig2 = px.histogram(df, x='day', y='tip', histfunc='sum', height=300,
+                    title='Histogram Chart')
+fig1.show()
+fig2.show()
+```
+
+### Share bins between histograms
+
+In this example both histograms have a compatible bin settings using [bingroup](https://plotly.com/python/reference/histogram/#histogram-bingroup) attribute. Note that traces on the same subplot, and with the same `barmode` ("stack", "relative", "group") are forced into the same `bingroup`, however traces with `barmode = "overlay"` and on different axes (of the same axis type) can have compatible bin settings. Histogram and [histogram2d](https://plotly.com/python/2D-Histogram/) trace can share the same `bingroup`.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+fig = go.Figure(go.Histogram(
+    x=np.random.randint(7, size=100),
+    bingroup=1))
+
+fig.add_trace(go.Histogram(
+    x=np.random.randint(7, size=20),
+    bingroup=1))
+
+fig.update_layout(
+    barmode="overlay",
+    bargap=0.1)
+
+fig.show()
+```
+
+### Sort Histogram by Category Order
+
+Histogram bars can also be sorted based on the ordering logic of the categorical values using the [categoryorder](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-categoryorder) attribute of the x-axis. Sorting of histogram bars using `categoryorder` also works with multiple traces on the same x-axis. In the following examples, the histogram bars are sorted based on the total numerical values.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.histogram(df, x="day").update_xaxes(categoryorder='total ascending')
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.histogram(df, x="day", color="smoker").update_xaxes(categoryorder='total descending')
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.histogram()`](https://plotly.com/python-api-reference/generated/plotly.express.histogram) or https://plotly.com/python/reference/histogram/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/horizontal-bar-charts.md plotly-7.1.0+dfsg1/doc/python/horizontal-bar-charts.md
--- plotly-5.20.0+dfsg/doc/python/horizontal-bar-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/horizontal-bar-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,450 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: How to make horizontal bar charts in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Horizontal Bar Charts
+    order: 8
+    page_type: u-guide
+    permalink: python/horizontal-bar-charts/
+    thumbnail: thumbnail/horizontal-bar.jpg
+---
+
+See more examples of bar charts (including vertical bar charts) and styling options [here](https://plotly.com/python/bar-charts/).
+
+### Horizontal Bar Chart with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). For a horizontal bar chart, use the `px.bar` function with `orientation='h'`.
+
+#### Basic Horizontal Bar Chart with Plotly Express
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="total_bill", y="day", orientation='h')
+fig.show()
+```
+
+#### Configure horizontal bar chart
+
+In this example a column is used to color the bars, and we add the information from other columns to the hover data.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="total_bill", y="sex", color='day', orientation='h',
+             hover_data=["tip", "size"],
+             height=400,
+             title='Restaurant bills')
+fig.show()
+```
+
+### Horizontal Bar Chart with go.Bar
+
+You can also use [the more generic `go.Bar` class from `plotly.graph_objects`](/python/graph-objects/). All the options of `go.Bar` are documented in the reference https://plotly.com/python/reference/bar/
+
+#### Basic Horizontal Bar Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Bar(
+            x=[20, 14, 23],
+            y=['giraffes', 'orangutans', 'monkeys'],
+            orientation='h'))
+
+fig.show()
+```
+
+### Colored Horizontal Bar Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Bar(
+    y=['giraffes', 'orangutans', 'monkeys'],
+    x=[20, 14, 23],
+    name='SF Zoo',
+    orientation='h',
+    marker=dict(
+        color='hotpink',
+        line=dict(color='deeppink', width=3)
+    )
+))
+fig.add_trace(go.Bar(
+    y=['giraffes', 'orangutans', 'monkeys'],
+    x=[12, 18, 29],
+    name='LA Zoo',
+    orientation='h',
+    marker=dict(
+        color='dimgray',
+        line=dict(color='black', width=3)
+    )
+))
+
+fig.update_layout(barmode='stack')
+fig.show()
+```
+### Small multiple horizontal bar charts show each component's size more clearly than a stacked bar
+
+Bar charts with multiple components pose a fundamental trade off between presenting the total clearly and presenting the component values clearly. This small multiples approach shows the component magnitudes clearly at the cost of slightly obscuring the totals. A stacked bar does the opposite. Small multiple bar charts often work better in a horizontal orientation; and are easy to create with the px.bar orientation and facet_col parameters.
+```python
+import pandas as pd
+import plotly.express as px
+
+data = {
+    "Quarter": ["Q1", "Q2", "Q3", "Q4"] * 3,
+    "Region": ["North", "North", "North", "North", "South", "South", "South", "South", "West", "West", "West", "West"],
+    "Outcome": [150, 200, 250, 300, 120, 180, 240, 310, 100, 150, 220, 280]
+}
+df = pd.DataFrame(data)
+
+
+fig = px.bar(
+    df,
+    x="Outcome",
+    y="Region",
+    orientation="h",
+    facet_col="Quarter",
+    title="Number of Patients Served by Region and Quarter",
+    labels={"Outcome": "Patients Served", "Region": "Region"}
+)
+
+## the section below is optional clean up to make this presentation ready
+
+fig.update_layout(
+    height=400,  #the Plotly default makes the bars awkwardly large; setting a height improves the display
+    showlegend=False,  # the legend does not add anything
+)
+
+# remove the default "facet_variable =" text from the title of each facet graph
+fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
+
+# Remove duplicate axis labels
+fig.for_each_yaxis(lambda axis: axis.update(title=None))
+fig.for_each_xaxis(lambda axis: axis.update(title=None))
+# add the one valuable axis label back in
+fig.update_xaxes(title="Count", row=1, col=1)
+
+fig.show()
+```
+
+### Color Palette for Bar Chart
+
+This bar chart uses a sequential palette to show gradations of responses.  Additional color options for sequential palettes are available at [The Urban Institute](https://urbaninstitute.github.io/graphics-styleguide/#color) and [Colorbrewer](https://colorbrewer2.org/#type=sequential)
+
+```python
+import plotly.graph_objects as go
+
+top_labels = ['Strongly<br>agree', 'Agree', 'Neutral', 'Disagree',
+              'Strongly<br>disagree']
+
+colors = ['DarkBlue', 'MediumBlue', 'DarkSlateBlue', 'mediumpurple', 'thistle']
+x_data = [[21, 30, 21, 16, 12],
+          [24, 31, 19, 15, 11],
+          [27, 26, 23, 11, 13],
+          [29, 24, 15, 18, 14]]
+
+y_data = ['The course was effectively<br>organized',
+          'The course developed my<br>abilities and skills ' +
+          'for<br>the subject', 'The course developed ' +
+          'my<br>ability to think critically about<br>the subject',
+          'I would recommend this<br>course to a friend']
+
+fig = go.Figure()
+
+for i in range(0, len(x_data[0])):
+    for xd, yd in zip(x_data, y_data):
+        fig.add_trace(go.Bar(
+            x=[xd[i]], y=[yd],
+            orientation='h',
+            marker=dict(
+                color=colors[i],
+                line=dict(color='ghostwhite', width=1)
+            )
+        ))
+
+fig.update_layout(
+    xaxis=dict(
+        showgrid=False,
+        showline=False,
+        showticklabels=False,
+        zeroline=False,
+        domain=[0.15, 1]
+    ),
+    yaxis=dict(
+        showgrid=False,
+        showline=False,
+        showticklabels=False,
+        zeroline=False,
+    ),
+    barmode='stack',
+    paper_bgcolor='lavenderblush',
+    plot_bgcolor='lavenderblush',
+    margin=dict(l=120, r=10, t=140, b=80),
+    showlegend=False,
+)
+
+annotations = []
+
+for yd, xd in zip(y_data, x_data):
+    # labeling the y-axis
+    annotations.append(dict(xref='paper', yref='y',
+                            x=0.14, y=yd,
+                            xanchor='right',
+                            text=str(yd),
+                            font=dict(family='Arial', size=14,
+                                      color='dimgray'),
+                            showarrow=False, align='right'))
+    # labeling the first percentage of each bar (x_axis)
+    annotations.append(dict(xref='x', yref='y',
+                            x=xd[0] / 2, y=yd,
+                            text=str(xd[0]) + '%',
+                            font=dict(family='Arial', size=14,
+                                      color='white'),
+                            showarrow=False))
+    # labeling the first Likert scale (on the top)
+    if yd == y_data[-1]:
+        annotations.append(dict(xref='x', yref='paper',
+                                x=xd[0] / 2, y=1.1,
+                                text=top_labels[0],
+                                font=dict(family='Arial', size=14,
+                                          color='dimgray'),
+                                showarrow=False))
+    space = xd[0]
+    for i in range(1, len(xd)):
+            # labeling the rest of percentages for each bar (x_axis)
+            annotations.append(dict(xref='x', yref='y',
+                                    x=space + (xd[i]/2), y=yd,
+                                    text=str(xd[i]) + '%',
+                                    font=dict(family='Arial', size=14,
+                                              color='ghostwhite'),
+                                    showarrow=False))
+            # labeling the Likert scale
+            if yd == y_data[-1]:
+                annotations.append(dict(xref='x', yref='paper',
+                                        x=space + (xd[i]/2), y=1.1,
+                                        text=top_labels[i],
+                                        font=dict(family='Arial', size=14,
+                                                  color='dimgray'),
+                                        showarrow=False))
+            space += xd[i]
+
+fig.update_layout(annotations=annotations)
+
+fig.show()
+```
+
+### Diverging Bar (or Butterfly) Chart
+
+Diverging bar charts show counts of positive outcomes or sentiments to the right of zero and counts of negative outcomes to the left of zero, allowing the reader to easily spot areas of excellence and concern.  This example allows the reader of the graph to infer the number of people offering a neutral response because the neutral category, which is left implicit, would make the responses add to 100%.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/refs/heads/master/gss_2002_5_pt_likert.csv')
+
+df.rename(columns={'Unnamed: 0':"Category"}, inplace=True)
+
+#achieve the diverging effect by putting a negative sign on the "disagree" answers
+for v in ["Disagree","Strongly Disagree"]:
+    df[v]=df[v]*-1
+
+fig = go.Figure()
+# this color palette conveys meaning:  blues for positive, red and orange for negative
+color_by_category={
+    "Strongly Agree":'darkblue',
+    "Agree":'lightblue',
+    "Disagree":'orange',
+    "Strongly Disagree":'red',
+}
+
+
+# We want the legend to be ordered in the same order that the categories appear, left to right --
+# which is different from the order in which we have to add the traces to the figure.
+# since we need to create the "somewhat" traces before the "strongly" traces to display
+# the segments in the desired order
+legend_rank_by_category={
+    "Strongly Disagree":1,
+    "Disagree":2,
+    "Agree":3,
+    "Strongly Agree":4,
+}
+# Add bars for each category
+for col in ["Disagree","Strongly Disagree","Agree","Strongly Agree"]:
+    fig.add_trace(go.Bar(
+        y=df["Category"],
+        x=df[col],
+        name=col,
+        orientation='h',
+        marker=dict(color=color_by_category[col]),
+        legendrank=legend_rank_by_category[col]
+    ))
+
+fig.update_layout(
+   title="Reactions to statements from the 2002 General Social Survey:",
+    yaxis_title = "",
+    barmode='relative',  # Allows bars to diverge from the center
+    plot_bgcolor="white",
+)
+
+fig.update_xaxes(
+        title="Percent of Responses",
+        zeroline=True,  # Ensure there's a zero line for divergence
+        zerolinecolor="black",
+        # use array tick mode to show that the counts to the left of zero are still positive.
+        # this is hard coded; generalize this if you plan to create a function that takes unknown or widely varying data
+        tickmode = 'array',
+        tickvals = [-50, 0, 50, 100],
+        ticktext = [50, 0, 50, 100]
+)
+
+fig.show()
+
+```
+
+### Bar Chart with Line Plot
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+import numpy as np
+
+y_saving = [1.3586, 2.2623000000000002, 4.9821999999999997, 6.5096999999999996,
+            7.4812000000000003, 7.5133000000000001, 15.2148, 17.520499999999998
+            ]
+y_net_worth = [93453.919999999998, 81666.570000000007, 69889.619999999995,
+               78381.529999999999, 141395.29999999999, 92969.020000000004,
+               66090.179999999993, 122379.3]
+x = ['Japan', 'United Kingdom', 'Canada', 'Netherlands',
+     'United States', 'Belgium', 'Sweden', 'Switzerland']
+
+
+# Creating two subplots
+fig = make_subplots(rows=1, cols=2, specs=[[{}, {}]], shared_xaxes=True,
+                    shared_yaxes=False, vertical_spacing=0.001)
+
+fig.add_trace(go.Bar(
+    x=y_saving,
+    y=x,
+    marker=dict(
+        color='mediumseagreen',
+        line=dict(
+            color='seagreen',
+            width=1),
+    ),
+    name='Household savings, percentage of household disposable income',
+    orientation='h',
+), 1, 1)
+
+fig.add_trace(go.Scatter(
+    x=y_net_worth, y=x,
+    mode='lines+markers',
+    line_color='purple',
+    name='Household net worth, Million USD/capita',
+), 1, 2)
+
+fig.update_layout(
+    title=dict(text='Household savings & net worth for eight OECD countries'),
+    yaxis=dict(
+        showgrid=False,
+        showline=False,
+        showticklabels=True,
+        domain=[0, 0.85],
+    ),
+    yaxis2=dict(
+        showgrid=False,
+        showline=True,
+        showticklabels=False,
+        linecolor='gray',
+        linewidth=2,
+        domain=[0, 0.85],
+    ),
+    xaxis=dict(
+        zeroline=False,
+        showline=False,
+        showticklabels=True,
+        showgrid=True,
+        domain=[0, 0.42],
+    ),
+    xaxis2=dict(
+        zeroline=False,
+        showline=False,
+        showticklabels=True,
+        showgrid=True,
+        domain=[0.47, 1],
+        side='top',
+        dtick=25000,
+    ),
+    legend=dict(x=0.029, y=1.038, font_size=10),
+    margin=dict(l=100, r=20, t=70, b=70),
+    paper_bgcolor='lavenderblush',
+    plot_bgcolor='lavenderblush',
+)
+
+annotations = []
+
+y_s = np.round(y_saving, decimals=2)
+y_nw = np.rint(y_net_worth)
+
+# Adding labels
+for ydn, yd, xd in zip(y_nw, y_s, x):
+    # labeling the scatter savings
+    annotations.append(dict(xref='x2', yref='y2',
+                            y=xd, x=ydn - 20000,
+                            text='{:,}'.format(ydn) + 'M',
+                            font=dict(family='Arial', size=12,
+                                      color='purple'),
+                            showarrow=False))
+    # labeling the bar net worth
+    annotations.append(dict(xref='x1', yref='y1',
+                            y=xd, x=yd + 3,
+                            text=str(yd) + '%',
+                            font=dict(family='Arial', size=16,
+                                      color='mediumseagreen'),
+                            showarrow=False))
+# Source
+annotations.append(dict(xref='paper', yref='paper',
+                        x=-0.2, y=-0.109,
+                        text='OECD "' +
+                             '(2015), Household savings (indicator), ' +
+                             'Household net worth (indicator). doi: ' +
+                             '10.1787/cfc6f499-en (Accessed on 05 June 2015)',
+                        font=dict(family='Arial', size=10, color='gray'),
+                        showarrow=False))
+
+fig.update_layout(annotations=annotations)
+
+fig.show()
+```
+
+### Reference
+
+See more examples of bar charts and styling options [here](https://plotly.com/python/bar-charts/).<br> See https://plotly.com/python/reference/bar/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/horizontal-vertical-shapes.md plotly-7.1.0+dfsg1/doc/python/horizontal-vertical-shapes.md
--- plotly-5.20.0+dfsg/doc/python/horizontal-vertical-shapes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/horizontal-vertical-shapes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,186 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to add annotated horizontal and vertical lines in Python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Horizontal and Vertical Lines and Rectangles
+    order: 38
+    permalink: python/horizontal-vertical-shapes/
+    thumbnail: thumbnail/shape.jpg
+---
+
+### Horizontal and Vertical Lines and Rectangles
+
+*introduced in plotly 4.12*
+
+Horizontal and vertical lines and rectangles that span an entire
+plot can be added via the `add_hline`, `add_vline`, `add_hrect`, and `add_vrect`
+methods of `plotly.graph_objects.Figure`. Shapes added with these methods are
+added as [layout shapes](/python/shapes) (as shown when doing `print(fig)`, for
+example). These shapes are fixed to the endpoints of one axis, regardless of the
+range of the plot, and fixed to data coordinates on the other axis. The
+following shows some possibilities, try panning and zooming the resulting figure
+to see how the shapes stick to some axes:
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="petal_length", y="petal_width")
+fig.add_hline(y=0.9)
+fig.add_vrect(x0=0.9, x1=2)
+fig.show()
+```
+
+These shapes can be styled by passing the same arguments as are accepted by `add_shape`:
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="petal_length", y="petal_width")
+fig.add_vline(x=2.5, line_width=3, line_dash="dash", line_color="green")
+fig.add_hrect(y0=0.9, y1=2.6, line_width=0, fillcolor="red", opacity=0.2)
+fig.show()
+```
+
+#### Horizontal and vertical lines in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'horizontal-vertical-shapes', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Adding Text Annotations
+
+[Text annotations](/python/text-and-annotations) can optionally be added to an autoshape
+using the `annotation_text` keyword argument, and positioned using the `annotation_position` argument:
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+fig = px.line(df)
+fig.add_hline(y=1, line_dash="dot",
+              annotation_text="Jan 1, 2018 baseline",
+              annotation_position="bottom right")
+fig.add_vrect(x0="2018-09-24", x1="2018-12-18",
+              annotation_text="decline", annotation_position="top left",
+              fillcolor="green", opacity=0.25, line_width=0)
+fig.show()
+```
+
+Extra formatting of the annotation can be done using magic-underscores prefixed by `annotation_` or by passing a `dict` or `go.layout.Annotation` instance to the `annotation` argument:
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+fig = px.line(df)
+fig.add_hline(y=1, line_dash="dot",
+              annotation_text="Jan 1, 2018 baseline",
+              annotation_position="bottom right",
+              annotation_font_size=20,
+              annotation_font_color="blue"
+             )
+fig.add_vrect(x0="2018-09-24", x1="2018-12-18",
+              annotation_text="decline", annotation_position="top left",
+              annotation=dict(font_size=20, font_family="Times New Roman"),
+              fillcolor="green", opacity=0.25, line_width=0)
+fig.show()
+```
+
+#### Adding to Multiple Facets / Subplots
+
+The same line or box can be added to multiple [subplots](/python/subplots/) or [facets](/python/facet-plots/) by setting the `row` and/or `col` to `"all"`. The default `row` and `col` values are `"all"`.
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+fig = px.line(df, facet_col="company", facet_col_wrap=2)
+fig.add_hline(y=1, line_dash="dot", row=3, col="all",
+              annotation_text="Jan 1, 2018 baseline",
+              annotation_position="bottom right")
+fig.add_vrect(x0="2018-09-24", x1="2018-12-18", row="all", col=1,
+              annotation_text="decline", annotation_position="top left",
+              fillcolor="green", opacity=0.25, line_width=0)
+fig.show()
+```
+#### Text Labels on Shapes
+
+*New in 5.14*
+
+[Text labels on shapes](/python/shapes/#addingtextlabelstoshapes), introduced in version 5.14, is now the recommended way to add text to shapes. The above examples using `add_hline`, `add_vrect`, `add_hrect`, and `add_vline` that add annotations can be rewritten to use `label`.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+fig = px.line(df)
+fig.add_hline(
+    y=1,
+    line_dash="dot",
+    label=dict(
+        text="Jan 1 2018 Baseline",
+        textposition="end",
+        font=dict(size=20, color="blue"),
+        yanchor="top",
+    ),
+)
+fig.add_vrect(
+    x0="2018-09-24",
+    x1="2018-12-18",
+    label=dict(
+        text="Decline",
+        textposition="top center",
+        font=dict(size=20, family="Times New Roman"),
+    ),
+    fillcolor="green",
+    opacity=0.25,
+    line_width=0,
+)
+fig.show()
+
+```
+
+With [text labels on shapes](/python/shapes/#adding-text-labels-to-shapes), you can also add text labels to shapes other than lines and rectangles, and the labels can be added automatically to shapes drawn by the user.
+
+
+### Reference
+
+More details are available about [layout shapes](/python/shapes/) and [annotations](/python/text-and-annotations).
+
+Reference documentation is also available for [`add_hline`](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Figure.html?highlight=add_hline#plotly.graph_objects.Figure.add_hline), [`add_vline`](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Figure.html?highlight=add_vline#plotly.graph_objects.Figure.add_vline), [`add_hrect`](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Figure.html?highlight=add_hrect#plotly.graph_objects.Figure.add_hrect), [`add_vrect`](https://plotly.com/python-api-reference/generated/plotly.graph_objects.Figure.html?highlight=add_vrect#plotly.graph_objects.Figure.add_vrect).
diff -Nru plotly-5.20.0+dfsg/doc/python/hover-text-and-formatting.md plotly-7.1.0+dfsg1/doc/python/hover-text-and-formatting.md
--- plotly-5.20.0+dfsg/doc/python/hover-text-and-formatting.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/hover-text-and-formatting.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,625 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.12.4
+  plotly:
+    description: How to use hover text and formatting in Python with Plotly.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Hover Text and Formatting
+    order: 24
+    permalink: python/hover-text-and-formatting/
+    thumbnail: thumbnail/hover-text.png
+---
+
+### Hover Labels
+
+One of the most deceptively-powerful features of interactive visualization using Plotly is the ability for the user to reveal more information about a data point by moving their mouse cursor over the point and having a hover label appear.
+
+There are three hover modes available in Plotly. The default setting is `layout.hovermode='closest'`, wherein a single hover label appears for the point directly underneath the cursor.
+
+#### Hover mode `closest` (default mode)
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+
+fig = px.line(df, x="year", y="lifeExp", color="country", title="layout.hovermode='closest' (the default)")
+fig.update_traces(mode="markers+lines")
+
+fig.show()
+```
+
+#### Hover mode `x` or `y`
+
+If `layout.hovermode='x'` (or `'y'`), a single hover label appears per trace, for points at the same `x` (or `y`) value as the cursor. If multiple points in a given trace exist at the same coordinate, only one will get a hover label. In the line plot below we have forced markers to appear, to make it clearer what can be hovered over, and we have disabled the built-in Plotly Express `hovertemplate` by setting it to `None`, resulting in a more compact hover label per point:
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+
+fig = px.line(df, x="year", y="lifeExp", color="country", title="layout.hovermode='x'")
+fig.update_traces(mode="markers+lines", hovertemplate=None)
+fig.update_layout(hovermode="x")
+
+fig.show()
+```
+
+#### Unified hover mode
+
+If `layout.hovermode='x unified'` (or `'y unified'`), a single hover label appear, describing one point per trace, for points at the same `x` (or `y`) value as the cursor.  If multiple points in a given trace exist at the same coordinate, only one will get an entry in the hover label. In the line plot below we have forced markers to appear, to make it clearer what can be hovered over, and we have disabled the built-in Plotly Express `hovertemplate` by setting it to `None`, resulting in a more compact entry per point in the hover label:
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+
+fig = px.line(df, x="year", y="lifeExp", color="country", title="layout.hovermode='x unified'")
+fig.update_traces(mode="markers+lines", hovertemplate=None)
+fig.update_layout(hovermode="x unified")
+
+fig.show()
+```
+
+#### Sorting Unified Hover Labels by Value
+
+*New in 6.8*
+
+In `'x unified'` and `'y unified'` hover modes, items in the hover label appear in the order their traces were added to the figure (the default, `hoversort="trace"`). Set `layout.hoversort` to `"value descending"` or `"value ascending"` to instead sort the items by the value being shown, which makes it easier to compare traces at a glance.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks()
+
+fig = px.line(df, x="date", y=df.columns[1:], title="layout.hoversort='value descending'")
+fig.update_traces(hovertemplate=None)
+fig.update_layout(hovermode="x unified", hoversort="value descending")
+
+fig.show()
+```
+
+#### Customize Title in Unified Hover Mode
+
+*New in 6.3*
+
+Customize the title shown in unified hover mode, by specifing `unifiedhovertitle.text`.
+
+The unified hover title is a template string that supports using variables from the data. Numbers are formatted using d3-format's syntax `%{variable:d3-format}`, for `example \"Price: %{y:$.2f}\"`. Dates are formatted using d3-time-format's syntax `%{variable|d3-time-format}`, for example `\"Day: %{2019-01-01|%A}\"`.
+
+The following example uses `'x unified'` hover and specifies a unified hover title that shows the full weekday, month, day, and year.
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+
+df = px.data.stocks()
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=df['date'],
+            y=df['GOOG'],
+            mode='lines',
+            name='Google'
+        ),
+        go.Scatter(
+            x=df['date'],
+            y=df['AAPL'],
+            mode='lines',
+            name='Apple'
+        )
+    ],
+    layout=go.Layout(
+        title_text="Stock Prices with Custom Unified Hover Title",
+        hovermode='x unified',
+        xaxis=dict(
+            title_text='Date',
+            unifiedhovertitle=dict(
+                text='<b>%{x|%A, %B %d, %Y}</b>'
+            )
+        ),
+        yaxis=dict(
+            title_text='Price (USD)',
+            tickprefix='$'
+        )
+    )
+)
+
+fig.show()
+
+```
+
+#### Control Hover Mode with Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+Change the hover mode below and try hovering over the points:
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'hover-text-and-formatting', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Selecting a hover mode in a figure created with `plotly.graph_objects`
+
+The hover mode is a property of the figure layout, so you can select a hover mode no matter how you created the figure, either with `plotly.express` or with `plotly.graph_objects`. Below is an example with a figure created with `plotly.graph_objects`. If you're not familiar with the structure of plotly figures, you can read [the tutorial on creating and updating plotly figures](/python/creating-and-updating-figures/).
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+t = np.linspace(0, 2 * np.pi, 100)
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=t, y=np.sin(t), name='sin(t)'))
+fig.add_trace(go.Scatter(x=t, y=np.cos(t), name='cost(t)'))
+fig.update_layout(hovermode='x unified')
+fig.show()
+```
+
+#### Hover on Subplots
+
+*New in 5.21*
+
+Use `hoversubplots` to define how hover effects expand to additional subplots. With `hoversubplots=axis`, hover effects are included on stacked subplots using the same axis when `hovermode` is set to `x`, `x unified`, `y`, or `y unified`.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+from plotly import data
+
+df = data.stocks()
+
+layout = dict(
+    hoversubplots="axis",
+    title=dict(text="Stock Price Changes"),
+    hovermode="x",
+    grid=dict(rows=3, columns=1),
+)
+
+data = [
+    go.Scatter(x=df["date"], y=df["AAPL"], xaxis="x", yaxis="y", name="Apple"),
+    go.Scatter(x=df["date"], y=df["GOOG"], xaxis="x", yaxis="y2", name="Google"),
+    go.Scatter(x=df["date"], y=df["AMZN"], xaxis="x", yaxis="y3", name="Amazon"),
+]
+
+fig = go.Figure(data=data, layout=layout)
+
+fig.show()
+```
+
+### Customizing Hover Label Appearance
+
+Hover label text and colors default to trace colors in hover modes other than `unified`, and can be globally set via the `layout.hoverlabel` attributes. Hover label appearance can also be controlled per trace in `<trace>.hoverlabel`.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+
+fig = px.line(df, x="year", y="lifeExp", color="country", title="Custom layout.hoverlabel formatting")
+fig.update_traces(mode="markers+lines")
+
+fig.update_layout(
+    hoverlabel=dict(
+        bgcolor="white",
+        font_size=16,
+        font_family="Rockwell"
+    )
+)
+
+fig.show()
+```
+
+### Emitting Hover and Click Events Anywhere in the Plot Area
+
+*New in 6.7*
+
+By default, hover and click events are only emitted when the cursor is over a trace. Set `hoveranywhere` or `clickanywhere` to `True` to emit these events anywhere inside the plot area, including over empty space: `fig.update_layout(hoveranywhere=True, clickanywhere=True)`. The events carry the cursor's data coordinates, which is useful when building interactive callbacks (for example, in [Dash](https://dash.plotly.com/)) that need to respond to clicks on locations that don't correspond to a specific data point.
+
+### Customizing Hover Text with Plotly Express
+
+Plotly Express functions automatically add all the data being plotted (x, y, color etc) to the hover label. Many Plotly Express functions also support configurable hover text. The `hover_data` argument accepts a list of column names to be added to the hover tooltip, or a dictionary for advanced formatting (see the next section). The `hover_name` property controls which column is displayed in bold as the tooltip title.
+
+Here is an example that creates a scatter plot using Plotly Express with custom hover data and a custom hover name.
+
+```python
+import plotly.express as px
+
+df_2007 = px.data.gapminder().query("year==2007")
+
+fig = px.scatter(df_2007, x="gdpPercap", y="lifeExp", log_x=True,
+                 hover_name="country", hover_data=["continent", "pop"])
+
+fig.show()
+```
+
+### Disabling or customizing hover of columns in plotly express
+
+`hover_data` can also be a dictionary. Its keys are existing columns of the `dataframe` argument, or new labels. For an existing column, the values can be
+* `False` to remove the column from the hover data (for example, if one wishes to remove the column of the `x` argument)
+* `True` to add a different column, with default formatting
+* a formatting string starting with `:` for numbers [d3-format's syntax](https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_forma), and `|` for dates in [d3-time-format's syntax](https://github.com/d3/d3-time-format), for example `:.3f`, `|%a`.
+
+It is also possible to pass new data as values of the `hover_data` dict, either as list-like data, or inside a tuple, which first element is one of the possible values described above for existing columns, and the second element correspond to the list-like data, for example `(True, [1, 2, 3])` or `(':.1f', [1.54, 2.345])`.
+
+These different cases are illustrated in the following example.
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.iris()
+fig = px.scatter(df, x='petal_length', y='sepal_length', facet_col='species', color='species',
+                 hover_data={'species':False, # remove species from hover data
+                             'sepal_length':':.2f', # customize hover for column of y attribute
+                             'petal_width':True, # add other column, default formatting
+                             'sepal_width':':.2f', # add other column, customized formatting
+                             # data not in dataframe, default formatting
+                             'suppl_1': np.random.random(len(df)),
+                             # data not in dataframe, customized formatting
+                             'suppl_2': (':.3f', np.random.random(len(df)))
+                            })
+fig.update_layout(height=300)
+fig.show()
+```
+
+### Customizing hover text with a hover template
+
+To customize the tooltip on your graph you can use the [hovertemplate](https://plotly.com/python/reference/pie/#pie-hovertemplate) attribute of `graph_objects` traces, which is a template string used for rendering the information that appear on hoverbox.
+This template string can include `variables` in %{variable} format, `numbers` in [d3-format's syntax](https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format), and `date` in [d3-time-format's syntax](https://github.com/d3/d3-time-format). In the example below, the empty `<extra></extra>` tag removes the part of the hover where the trace name is usually displayed in a contrasting color. The `<extra>` tag can be used to display other parts of the hover template, it is not reserved for the trace name.
+
+Note that a hover template customizes the tooltip text, while a [texttemplate](https://plotly.com/python/reference/pie/#pie-texttemplate) customizes the text that appears on your chart. <br>
+
+Set the horizontal alignment of the text within tooltip with [hoverlabel.align](https://plotly.com/python/reference/layout/#layout-hoverlabel-align).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    x = [1,2,3,4,5],
+    y = [2.02825,1.63728,6.83839,4.8485,4.73463],
+    hovertemplate =
+    '<i>Price</i>: $%{y:.2f}'+
+    '<br><b>X</b>: %{x}<br>'+
+    '<b>%{text}</b>',
+    text = ['Custom text {}'.format(i + 1) for i in range(5)],
+    showlegend = False))
+
+fig.add_trace(go.Scatter(
+    x = [1,2,3,4,5],
+    y = [3.02825,2.63728,4.83839,3.8485,1.73463],
+    hovertemplate = 'Price: %{y:$.2f}<extra></extra>',
+    showlegend = False))
+
+fig.update_layout(
+    hoverlabel_align = 'right',
+    title = "Set hover text with hover template")
+
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Pie(
+    name = "",
+    values = [2, 5, 3, 2.5],
+    labels = ["R", "Python", "Java Script", "Matlab"],
+    text = ["textA", "TextB", "TextC", "TextD"],
+    hovertemplate = "%{label}: <br>Popularity: %{percent} </br> %{text}"
+))
+
+fig.show()
+```
+
+### Modifying the hover template of a plotly express figure
+
+`plotly.express` automatically sets the hover template but you can modify it using the `update_traces` method of the generated figure. It helps to print the hover template generated by `plotly.express` in order to be able to modify it. One can also revert to the default hover information of traces by setting the hover template to `None`.
+
+```python
+import plotly.express as px
+
+df_2007 = px.data.gapminder().query("year==2007")
+
+fig = px.scatter(df_2007, x="gdpPercap", y="lifeExp", log_x=True, color='continent'
+                )
+print("plotly express hover template:", fig.data[0].hovertemplate)
+fig.update_traces(hovertemplate='GDP: %{x} <br>Life Expectancy: %{y}') #
+fig.update_traces(hovertemplate=None, selector={'name':'Europe'}) # revert to default hover
+print("user defined hover template:", fig.data[0].hovertemplate)
+fig.show()
+```
+
+### Specifying the formatting and labeling of custom fields in a Plotly Express figure using a hover template
+
+This example adds custom fields to a Plotly Express figure using the `custom_data` parameter and then adds a hover template that applies d3 formats to each element of the `customdata[n]` array and uses HTML to customize the fonts and spacing.
+
+```python
+# %%
+import plotly.graph_objects as go
+import plotly.express as px
+import pandas as pd
+import math
+import numpy as np
+
+data = px.data.gapminder()
+df = data[data['year']==2007]
+df = df.sort_values(['continent', 'country'])
+
+df.rename(columns={"gdpPercap":'GDP per capita', "lifeExp":'Life Expectancy (years)'}, inplace=True)
+
+fig=px.scatter(df,
+               x='GDP per capita',
+               y='Life Expectancy (years)',
+               color='continent',
+               size=np.sqrt(df['pop']),
+               # Specifying data to make available to the hover template
+               # The px custom_data parameter has an underscore, while the analogous graph objects customdata parameter has no underscore.
+               # The px custom_data parameter is a list of column names in the data frame, while the graph objects customdata parameter expects a data frame or a numpy array.
+               custom_data=['country', 'continent', 'pop'],
+)
+
+# Plotly express does not have a 'hovertemplate' parameter in the graph creation function, so we apply the template with update_traces
+fig.update_traces(
+    hovertemplate =
+                "<b>%{customdata[0]}</b><br>" +
+                "<b>%{customdata[1]}</b><br><br>" +
+                "GDP per Capita: %{x:$,.0f}<br>" +
+                "Life Expectation: %{y:.0f}<br>" +
+                "Population: %{customdata[2]:,.0f}" +
+                "<extra></extra>",
+    mode='markers',
+    marker={'sizemode':'area',
+            'sizeref':10},
+)
+
+fig.update_layout(
+        xaxis={
+            'type':'log'},
+        )
+
+fig.show()
+```
+
+
+### Hover Templates with Mixtures of Period data
+
+*New in v5.0*
+
+When [displaying periodic data](https://plotly.com/python/time-series/#displaying-period-data) with mixed-sized periods (i.e. quarterly and monthly) in conjunction with `x` or `x unified` hover modes and using `hovertemplate`, the `xhoverformat` attribute can be used to control how each period's X value is displayed, and the special `%{xother}` hover-template directive can be used to control how the X value is displayed for points that do not share the exact X coordinate with the point that is being hovered on. `%{xother}` will return an empty string when the X value is the one being hovered on, otherwise it will return `(%{x})`. The special `%{_xother}`, `%{xother_}` and `%{_xother_}` variations will display with spaces before, after or around the parentheses, respectively.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(
+    x=["2020-01-01", "2020-04-01", "2020-07-01"],
+    y=[1000, 1500, 1700],
+    xperiod="M3",
+    xperiodalignment="middle",
+    xhoverformat="Q%q",
+    hovertemplate="%{y}%{_xother}"
+))
+
+fig.add_trace(go.Scatter(
+    x=["2020-01-01", "2020-02-01", "2020-03-01",
+      "2020-04-01", "2020-05-01", "2020-06-01",
+      "2020-07-01", "2020-08-01", "2020-09-01"],
+    y=[1100,1050,1200,1300,1400,1700,1500,1400,1600],
+    xperiod="M1",
+    xperiodalignment="middle",
+    hovertemplate="%{y}%{_xother}"
+))
+
+fig.update_layout(hovermode="x unified")
+fig.show()
+```
+
+### Advanced Hover Template
+
+This produces the same graphic as in "Specifying the formatting and labeling of custom fields in a Plotly Express figure using a hover template" above, but does so with the `customdata` and `text` parameters of `graph_objects`.  It shows how to specify columns from a dataframe to include in the `customdata` array using the `df[["col_i", "col_j"]]` subsetting notation.  It then references those variables using e.g. `%{customdata[0]}` in the hover template.  It includes comments about major differences between the parameters used by `graph_objects` and `plotly.express`.
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+import pandas as pd
+import math
+
+data = px.data.gapminder()
+df_2007 = data[data['year']==2007]
+df_2007 = df_2007.sort_values(['continent', 'country'])
+
+bubble_size = []
+
+for index, row in df_2007.iterrows():
+    bubble_size.append(math.sqrt(row['pop']))
+
+df_2007['size'] = bubble_size
+continent_names = ['Africa', 'Americas', 'Asia', 'Europe', 'Oceania']
+continent_data = {continent:df_2007.query("continent == '%s'" %continent)
+                              for continent in continent_names}
+
+fig = go.Figure()
+
+for continent_name, df in continent_data.items():
+    fig.add_trace(
+        go.Scatter(
+            x=df['gdpPercap'],
+            y=df['lifeExp'],
+            marker_size=df['size'],
+            text=df['continent'],
+            name=continent_name,
+
+            # The next three parameters specify the hover text
+            # Text supports just one customized field per trace
+            # and is implemented here with text=df['continent'],
+            # Custom data supports multiple fields through numeric indices in the hover template
+            # In we weren't using the text parameter in our example,
+            # we could instead add continent as a third customdata field.
+            customdata=df[['country','pop']],
+            hovertemplate=
+                "<b>%{customdata[0]}</b><br>" +
+                "<b>%{text}</b><br><br>" +
+                "GDP per Capita: %{x:$,.0f}<br>" +
+                "Life Expectancy: %{y:.0f}<br>" +
+                "Population: %{customdata[1]:,.0f}" +
+                "<extra></extra>",
+        ))
+
+
+fig.update_traces(
+    mode='markers',
+    marker={'sizemode':'area',
+            'sizeref':10})
+
+fig.update_layout(
+    xaxis={
+        'title':'GDP per capita',
+        'type':'log'},
+    yaxis={'title':'Life Expectancy (years)'})
+
+fig.show()
+```
+
+### Adding other data to the hover with customdata and a hover template
+
+`go` traces have a `customdata` argument in which you can add an array, which outer dimensions should have the same dimensions as the plotted data. You can then use `customdata` inside a `hovertemplate` to display the value of customdata.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+np.random.seed(0)
+z1, z2, z3 = np.random.random((3, 7, 7))
+customdata = np.dstack((z2, z3))
+fig = make_subplots(1, 2, subplot_titles=['z1', 'z2'])
+fig.add_trace(go.Heatmap(
+    z=z1,
+    customdata=np.dstack((z2, z3)),
+    hovertemplate='<b>z1:%{z:.3f}</b><br>z2:%{customdata[0]:.3f} <br>z3: %{customdata[1]:.3f} ',
+    coloraxis="coloraxis1", name=''),
+    1, 1)
+fig.add_trace(go.Heatmap(
+    z=z2,
+    customdata=np.dstack((z1, z3)),
+    hovertemplate='z1:%{customdata[0]:.3f} <br><b>z2:%{z:.3f}</b><br>z3: %{customdata[1]:.3f} ',
+    coloraxis="coloraxis1", name=''),
+    1, 2)
+fig.update_layout(title_text='Hover to see the value of z1, z2 and z3 together')
+fig.show()
+```
+
+### Setting the Hover Template in Tile Maps
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    name = "",
+    mode = "markers+text+lines",
+    lon = [-75, -80, -50],
+    lat = [45, 20, -20],
+    marker = {'size': 20, 'symbol': ["bus", "harbor", "airport"]},
+    hovertemplate =
+    "<b>%{marker.symbol} </b><br><br>" +
+    "longitude: %{lon}<br>" +
+    "latitude: %{lat}<br>" ))
+
+fig.update_layout(
+    map = {
+        'style': "outdoors", 'zoom': 1},
+    showlegend = False)
+
+fig.show()
+```
+
+### Controlling Hover Text with `graph_objects` and `hoverinfo`
+
+Prior to the addition of `hovertemplate`, hover text was controlled via the now-deprecated `hoverinfo` attribute.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[2, 1, 6, 4, 4],
+    hovertext=["Text A", "Text B", "Text C", "Text D", "Text E"],
+    hoverinfo="text",
+    marker=dict(
+        color="green"
+    ),
+    showlegend=False
+))
+
+fig.show()
+```
+
+### Spike lines
+
+Plotly supports "spike lines" which link a point to the axis on hover, and can be configured per axis.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+
+fig = px.line(df, x="year", y="lifeExp", color="country", title="Spike lines active")
+fig.update_traces(mode="markers+lines")
+
+fig.update_xaxes(showspikes=True)
+fig.update_yaxes(showspikes=True)
+
+fig.show()
+```
+
+Spike lines can be styled per axis as well, and the cursor distance setting can be controlled via `layout.spikedistance`.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+
+fig = px.line(df, x="year", y="lifeExp", color="country", title="Styled Spike Lines")
+fig.update_traces(mode="markers+lines")
+
+fig.update_xaxes(showspikes=True, spikecolor="green", spikesnap="cursor", spikemode="across")
+fig.update_yaxes(showspikes=True, spikecolor="orange", spikethickness=2)
+fig.update_layout(spikedistance=1000, hoverdistance=100)
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/icicle-charts.md plotly-7.1.0+dfsg1/doc/python/icicle-charts.md
--- plotly-5.20.0+dfsg/doc/python/icicle-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/icicle-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,546 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make Icicle Charts.
+    display_as: basic
+    language: python
+    layout: base
+    name: Icicle Charts
+    order: 17
+    page_type: u-guide
+    permalink: python/icicle-charts/
+    thumbnail: thumbnail/icicle.png
+---
+
+*New in v5.0*
+
+Icicle charts visualize hierarchical data using rectangular sectors that cascade from root to leaves in one of four directions: up, down, left, or right. Similar to [Sunburst charts](https://plotly.com/python/sunburst-charts/) and [Treemaps](https://plotly.com/python/treemaps/) charts, the hierarchy is defined by `labels` (`names` for `px.icicle`) and `parents` attributes. Click on one sector to zoom in/out, which also displays a pathbar on the top of your icicle. To zoom out, you can click the parent sector or click the pathbar as well.
+
+### Basic Icicle Plot with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.icicle`, each item in the `character` list is represented as a rectangular sector of the icicle.
+
+```python
+import plotly.express as px
+data = dict(
+    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
+    value=[10, 14, 12, 10, 2, 6, 6, 4, 4])
+
+fig =px.icicle(
+    data,
+    names='character',
+    parents='parent',
+    values='value',
+)
+fig.update_traces(root_color="lightgrey")
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Icicle of a rectangular DataFrame with plotly.express
+
+Hierarchical data are often stored as a rectangular dataframe, with different columns corresponding to different levels of the hierarchy. `px.icicle` can take a path parameter corresponding to a list of columns. Note that `id` and `parent` should not be provided if path is given.
+
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.icicle(df, path=[px.Constant("all"), 'day', 'time', 'sex'], values='total_bill')
+fig.update_traces(root_color="lightgrey")
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Icicle of a rectangular DataFrame with continuous color argument in px.icicle
+
+If a color argument is passed, the color of a node is computed as the average of the color values of its children, weighted by their values.
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.gapminder().query("year == 2007")
+fig = px.icicle(df, path=[px.Constant("world"), 'continent', 'country'], values='pop',
+                  color='lifeExp', hover_data=['iso_alpha'],
+                  color_continuous_scale='RdBu',
+                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Icicle of a rectangular DataFrame with discrete color argument in px.icicle
+
+When the argument of color corresponds to non-numerical data, discrete colors are used. If a sector has the same value of the color column for all its children, then the corresponding color is used, otherwise the first color of the discrete color sequence is used.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.icicle(df, path=[px.Constant("all"), 'sex', 'day', 'time'],
+                values='total_bill', color='day')
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+In the example below the color of **Saturday** and **Sunday** sectors is the same as **Dinner** because there are only Dinner entries for Saturday and Sunday. However, for Female -> Friday there are both lunches and dinners, hence the "mixed" color (blue here) is used.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.icicle(df, path=[px.Constant("all"), 'sex', 'day', 'time'],
+                values='total_bill', color='time')
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Using an explicit mapping for discrete colors
+
+For more information about discrete colors, see the [dedicated page](https://plotly.com/python/discrete-color/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.icicle(df, path=[px.Constant("all"), 'sex', 'day', 'time'],
+                values='total_bill', color='time',
+                color_discrete_map={'(?)':'lightgrey', 'Lunch':'gold', 'Dinner':'darkblue'})
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Rectangular data with missing values
+
+If the dataset is not fully rectangular, missing values should be supplied as **None**. Note that the parents of **None** entries must be a leaf, i.e. it cannot have other children than **None** (otherwise a **ValueError** is raised).
+
+```python
+import plotly.express as px
+import pandas as pd
+vendors = ["A", "B", "C", "D", None, "E", "F", "G", "H", None]
+sectors = ["Tech", "Tech", "Finance", "Finance", "Other",
+           "Tech", "Tech", "Finance", "Finance", "Other"]
+regions = ["North", "North", "North", "North", "North",
+           "South", "South", "South", "South", "South"]
+sales = [1, 3, 2, 4, 1, 2, 2, 1, 4, 1]
+df = pd.DataFrame(
+    dict(vendors=vendors, sectors=sectors, regions=regions, sales=sales)
+)
+df["all"] = "all" # in order to have a single root node
+print(df)
+fig = px.icicle(df, path=['all', 'regions', 'sectors', 'vendors'], values='sales')
+fig.update_traces(root_color='lightgrey')
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Basic Icicle Plot with go.Icicle
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Icicle` class from `plotly.graph_objects`](/python/graph-objects/).
+
+Main arguments:
+
+1. `labels` (`names` in `px.icicle` since `labels` is reserved for overriding columns names): sets the labels of icicle sectors.
+2. `parents`: sets the parent sectors of icicle sectors. An empty string `''` is used for the root node in the hierarchy. In this example, the root is "Eve".
+3. `values`: sets the values associated with icicle sectors, determining their width (See the `branchvalues` section below for different modes for setting the width).
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Icicle(
+    labels=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
+    values=[10, 14, 12, 10, 2, 6, 6, 4, 4],
+    root_color="lightgrey"
+))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Icicle with Repeated Labels
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Icicle(
+ ids=["Sports",
+    "North America", "Europe", "Australia", "North America - Football", "Soccer",
+    "North America - Rugby", "Europe - Football", "Rugby",
+    "Europe - American Football","Australia - Football", "Association",
+    "Australian Rules", "Australia - American Football", "Australia - Rugby",
+    "Rugby League", "Rugby Union"
+  ],
+  labels= ["Sports",
+    "North<br>America", "Europe", "Australia", "Football", "Soccer", "Rugby",
+    "Football", "Rugby", "American<br>Football", "Football", "Association",
+    "Australian<br>Rules", "American<br>Football", "Rugby", "Rugby<br>League",
+    "Rugby<br>Union"
+  ],
+  parents=["",
+    "Sports", "Sports", "Sports", "North America", "North America", "North America", "Europe",
+    "Europe", "Europe","Australia", "Australia - Football", "Australia - Football",
+    "Australia - Football", "Australia - Football", "Australia - Rugby",
+    "Australia - Rugby"
+  ],
+    root_color="lightgrey"
+))
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+
+fig.show()
+```
+
+### Branchvalues
+
+With branchvalues "total", the value of the parent represents the height/width of its slice. In the example below, "Enoch" is 4 and "Awan" is 6 and so Enoch's height is 4/6ths of Awans. With branchvalues "remainder", the parent's width is determined by its own value plus those of its children. So, Enoch's height is 4/10ths of Awan's (4 / (6 + 4)).
+
+Note that this means that the sum of the values of the children cannot exceed the value of their parent when branchvalues is set to "total". When branchvalues is set to "remainder" (the default), children will not take up all of the space below their parent (unless the parent is the root and it has a value of 0).
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Icicle(
+    labels=[ "Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents=["",    "Eve",  "Eve",  "Seth", "Seth", "Eve",  "Eve",  "Awan",  "Eve" ],
+    values=[  65,    14,     12,     10,     2,      6,      6,      4,       4],
+    branchvalues="total",
+    root_color="lightgrey"
+))
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+
+fig.show()
+```
+
+### Large Number of Slices
+
+This example uses a [plotly grid attribute](https://plotly.com/python/reference/layout/#layout-grid) for the subplots. Reference the row and column destination using the [domain](https://plotly.com/python/reference/icicle/#icicle-domain) attribute.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure()
+
+fig.add_trace(go.Icicle(
+    ids=df.ids,
+    labels=df.labels,
+    parents=df.parents,
+    root_color="lightgrey"
+))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+
+fig.show()
+```
+
+### Controlling text fontsize with uniformtext
+
+If you want all the text labels to have the same size, you can use the `uniformtext` layout parameter. The `minsize` attribute sets the font size, and the `mode` attribute sets what happens for labels which cannot fit with the desired fontsize: either `hide` them or `show` them with overflow.
+
+*Note: animated transitions are currently not implemented when `uniformtext` is used.*
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(go.Icicle(
+    ids = df.ids,
+    labels = df.labels,
+    parents = df.parents,
+    root_color="lightgrey"
+))
+fig.update_layout(
+    uniformtext=dict(minsize=10, mode='hide'),
+    margin = dict(t=50, l=25, r=25, b=25)
+)
+fig.show()
+```
+
+### Icicle chart with a continuous colorscale
+
+The example below visualizes a breakdown of sales (corresponding to sector width) and call success rate (corresponding to sector color) by region, county and salesperson level. For example, when exploring the data you can see that although the East region is behaving poorly, the Tyler county is still above average -- however, its performance is reduced by the poor success rate of salesperson GT.
+
+In the right subplot which has a `maxdepth` of two levels, click on a slice to see its breakdown to lower levels.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/sales_success.csv')
+print(df.head())
+
+levels = ['salesperson', 'county', 'region'] # levels used for the hierarchical chart
+color_columns = ['sales', 'calls']
+value_column = 'calls'
+
+def build_hierarchical_dataframe(df, levels, value_column, color_columns=None):
+    """
+    Build a hierarchy of levels for Icicle charts.
+
+    Levels are given starting from the bottom to the top of the hierarchy,
+    ie the last level corresponds to the root.
+    """
+    df_list = []
+    for i, level in enumerate(levels):
+        df_tree = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
+        dfg = df.groupby(levels[i:]).sum()
+        dfg = dfg.reset_index()
+        df_tree['id'] = dfg[level].copy()
+        if i < len(levels) - 1:
+            df_tree['parent'] = dfg[levels[i+1]].copy()
+        else:
+            df_tree['parent'] = 'total'
+        df_tree['value'] = dfg[value_column]
+        df_tree['color'] = dfg[color_columns[0]] / dfg[color_columns[1]]
+        df_list.append(df_tree)
+    total = pd.Series(dict(id='total', parent='',
+                              value=df[value_column].sum(),
+                              color=df[color_columns[0]].sum() / df[color_columns[1]].sum()), name=0)
+    df_list.append(total)
+    df_all_trees = pd.concat(df_list, ignore_index=True)
+    return df_all_trees
+
+
+df_all_trees = build_hierarchical_dataframe(df, levels, value_column, color_columns)
+average_score = df['sales'].sum() / df['calls'].sum()
+
+fig = make_subplots(1, 2, specs=[[{"type": "domain"}, {"type": "domain"}]],)
+
+fig.add_trace(go.Icicle(
+    labels=df_all_trees['id'],
+    parents=df_all_trees['parent'],
+    values=df_all_trees['value'],
+    branchvalues='total',
+    marker=dict(
+        colors=df_all_trees['color'],
+        colorscale='RdBu',
+        cmid=average_score),
+    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
+    name=''
+    ), 1, 1)
+
+fig.add_trace(go.Icicle(
+    labels=df_all_trees['id'],
+    parents=df_all_trees['parent'],
+    values=df_all_trees['value'],
+    branchvalues='total',
+    marker=dict(
+        colors=df_all_trees['color'],
+        colorscale='RdBu',
+        cmid=average_score),
+    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
+    maxdepth=2
+    ), 1, 2)
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Set Color of Icicle Sectors
+
+```python
+import plotly.graph_objects as go
+
+labels = ["container", "A1", "A2", "A3", "A4", "A5", "B1", "B2"]
+parents = ["", "container", "A1", "A2", "A3", "A4", "container", "B1"]
+
+fig = go.Figure(go.Icicle(
+    labels = labels,
+    parents = parents,
+    marker_colors = ["pink", "royalblue", "lightgray", "purple",
+                     "cyan", "lightgray", "lightblue", "lightgreen"]))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+This example uses iciclecolorway attribute, which should be set in layout.
+
+```python
+import plotly.graph_objects as go
+
+values = [0, 11, 12, 13, 14, 15, 20, 30]
+labels = ["container", "A1", "A2", "A3", "A4", "A5", "B1", "B2"]
+parents = ["", "container", "A1", "A2", "A3", "A4", "container", "B1"]
+
+fig = go.Figure(go.Icicle(
+    labels = labels,
+    parents = parents,
+    values=values,
+    root_color="lightblue"
+))
+
+fig.update_layout(
+    iciclecolorway = ["pink", "lightgray"],
+    margin = dict(t=50, l=25, r=25, b=25)
+)
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+
+values = [0, 11, 12, 13, 14, 15, 20, 30]
+labels = ["container", "A1", "A2", "A3", "A4", "A5", "B1", "B2"]
+parents = ["", "container", "A1", "A2", "A3", "A4", "container", "B1"]
+
+fig = go.Figure(go.Icicle(
+    labels = labels,
+    values = values,
+    parents = parents,
+    marker_colorscale = 'Blues'))
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+
+fig.show()
+```
+
+### Pattern Fills
+
+*New in 5.15*
+
+Icicle charts support [patterns](/python/pattern-hatching-texture/) (also known as hatching or texture) in addition to color. In this example, we apply a pattern to all chart sections. We also configure the `size` and `solidity` of the pattern.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    go.Icicle(
+        labels=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+        parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"],
+        values=[10, 14, 12, 10, 2, 6, 6, 4, 4],
+        root_color="lightgrey",
+        textfont_size=20,
+        marker=dict(pattern=dict(shape="|", size=5, solidity=0.9)),
+    )
+)
+
+fig.update_layout(margin=dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Set the Direction of Icicle charts
+
+As mentioned above, Icicle charts can grow in one of four directions. Icicle charts have a `tiling` attribute and this has two attributes: `orientation` and `flip`. `orientation` takes either `h` (horiztonal) or `v` (vertical) and `flip` takes either `x` or `y`. You can use these two attributes in combination to create each of the four cardinal directions: left, right, top, bottom.
+
+**Up Direction (Flame Chart)**
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(
+    go.Icicle(
+        ids = df.ids,
+        labels = df.labels,
+        parents = df.parents,
+        root_color="lightgrey",
+        tiling = dict(
+            orientation='v',
+            flip='y'
+        )
+    )
+)
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+**Down Direction (Icicle)**
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(
+    go.Icicle(
+        ids = df.ids,
+        labels = df.labels,
+        parents = df.parents,
+        root_color="lightgrey",
+        tiling = dict(
+            orientation='v'
+        )
+    )
+)
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+**Right Direction**
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(
+    go.Icicle(
+        ids = df.ids,
+        labels = df.labels,
+        parents = df.parents,
+        root_color="lightgrey",
+        tiling = dict(
+            orientation='h'
+        )
+    )
+)
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+**Left Direction**
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(
+    go.Icicle(
+        ids = df.ids,
+        labels = df.labels,
+        parents = df.parents,
+        root_color="lightgrey",
+        tiling = dict(
+            orientation='h',
+            flip='x'
+        )
+    )
+)
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.icicle()`](https://plotly.com/python-api-reference/generated/plotly.express.icicle) or https://plotly.com/python/reference/icicle/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/images.md plotly-7.1.0+dfsg1/doc/python/images.md
--- plotly-5.20.0+dfsg/doc/python/images.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/images.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,400 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.0
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to add images to charts as background images or logos.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Images
+    order: 25
+    permalink: python/images/
+    thumbnail: thumbnail/images.png
+    v4upgrade: true
+---
+
+#### Add a Background Image
+
+In this page we explain how to add static, non-interactive images as background, logo or annotation images to a figure. For exploring image data in interactive charts, see the [tutorial on displaying image data](/python/imshow).
+
+A background image can be added to the layout of a figure with
+`fig.add_layout_image` or by setting the `images` parameter of `go.Layout`. The
+`source` attribute of a `go.layout.Image` can be the URL of an image, or a PIL
+Image object (`from PIL import Image; img = Image.open('filename.png')`).
+
+```python
+import plotly.graph_objects as go
+
+# Create figure
+fig = go.Figure()
+
+# Add trace
+fig.add_trace(
+    go.Scatter(x=[0, 0.5, 1, 2, 2.2], y=[1.23, 2.5, 0.42, 3, 1])
+)
+
+# Add images
+fig.add_layout_image(
+        dict(
+            source="https://images.plot.ly/language-icons/api-home/python-logo.png",
+            xref="x",
+            yref="y",
+            x=0,
+            y=3,
+            sizex=2,
+            sizey=2,
+            sizing="stretch",
+            opacity=0.5,
+            layer="below")
+)
+
+# Set templates
+fig.update_layout(template="plotly_white")
+
+fig.show()
+```
+
+#### Add a Logo
+See more examples of [adding logos to charts](https://plotly.com/python/logos/)!
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(
+    go.Bar(
+        x=["-35.3", "-15.9", "-15.8", "-15.6", "-11.1",
+           "-9.6", "-9.2", "-3.5", "-1.9", "-0.9",
+           "1.0", "1.4", "1.7", "2.0", "2.8", "6.2",
+           "8.1", "8.5", "8.5", "8.6", "11.4", "12.5",
+           "13.3", "13.7", "14.4", "17.5", "17.7",
+           "18.9", "25.1", "28.9", "41.4"],
+        y=["Designers, musicians, artists, etc.",
+           "Secretaries and administrative assistants",
+           "Waiters and servers", "Archivists, curators, and librarians",
+           "Sales and related", "Childcare workers, home car workers, etc.",
+           "Food preparation occupations", "Janitors, maids, etc.",
+           "Healthcare technicians, assistants. and aides",
+           "Counselors, social and religious workers",
+           "Physical, life and social scientists", "Construction",
+           "Factory assembly workers", "Machinists, repairmen, etc.",
+           "Media and communications workers", "Teachers",
+           "Mechanics, repairmen, etc.", "Financial analysts and advisers",
+           "Farming, fishing and forestry workers",
+           "Truck drivers, heavy equipment operator, etc.", "Accountants and auditors",
+           "Human resources, management analysts, etc.", "Managers",
+           "Lawyers and judges", "Engineers, architects and surveyors",
+           "Nurses", "Legal support workers",
+           "Computer programmers and system admin.", "Police officers and firefighters",
+           "Chief executives", "Doctors, dentists and surgeons"],
+        marker=go.bar.Marker(
+            color="rgb(253, 240, 54)",
+            line=dict(color="rgb(0, 0, 0)",
+                      width=2)
+        ),
+        orientation="h",
+    )
+)
+
+# Add image
+fig.add_layout_image(
+    dict(
+        source="https://raw.githubusercontent.com/cldougl/plot_images/add_r_img/vox.png",
+        xref="paper", yref="paper",
+        x=1, y=1.05,
+        sizex=0.2, sizey=0.2,
+        xanchor="right", yanchor="bottom"
+    )
+)
+
+# update layout properties
+fig.update_layout(
+    autosize=False,
+    height=800,
+    width=700,
+    bargap=0.15,
+    bargroupgap=0.1,
+    barmode="stack",
+    hovermode="x",
+    margin=dict(r=20, l=300, b=75, t=125),
+    title=("Moving Up, Moving Down<br>" +
+           "<i>Percentile change in income between childhood and adulthood</i>"),
+)
+
+fig.show()
+```
+
+#### Label Spectroscopy Data by Adding Multiple Images
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+np.random.seed(1)
+from scipy.signal import savgol_filter
+
+# Simulate spectroscopy data
+def simulated_absorption(mu, sigma, intensity):
+    data = [np.random.normal(mu[i], sigma[i], intensity[i]) for i in range(len(mu))]
+    hists = [np.histogram(d, 1000, range=(200, 500), density=True) for d in data]
+    ys = [y for y, x in hists]
+    s = savgol_filter(np.max(ys, axis=0), 41, 3)
+    return hists[0][1], s
+
+mus = [[290, 240, 260], [330, 350]]
+sigmas = [[4, 6, 10], [5, 4]]
+intensities = [[100000, 300000, 700000], [40000, 20000]]
+simulated_absorptions = [simulated_absorption(m, s, i) for m, s, i in
+                         zip(mus, sigmas, intensities)]
+
+# Create figure
+fig = go.Figure()
+
+# Create traces from data
+names = ["Benzene", "Naphthalene"]
+for (x, y), n in zip(simulated_absorptions, names):
+    fig.add_trace(go.Scatter(x=x, y=y, name=n))
+
+# Add images
+fig.add_layout_image(
+    dict(
+        source="https://raw.githubusercontent.com/michaelbabyn/plot_data/master/benzene.png",
+        x=0.75,
+        y=0.65,
+    ))
+fig.add_layout_image(dict(
+        source="https://raw.githubusercontent.com/michaelbabyn/plot_data/master/naphthalene.png",
+        x=0.9,
+        y=0.3,
+        )
+)
+fig.update_layout_images(dict(
+        xref="paper",
+        yref="paper",
+        sizex=0.3,
+        sizey=0.3,
+        xanchor="right",
+        yanchor="bottom"
+))
+
+# Add annotations
+fig.update_layout(
+    annotations=[
+        dict(
+            x=93.0 / 300,
+            y=0.07 / 0.1,
+            xref="paper",
+            yref="paper",
+            showarrow=True,
+            arrowhead=0,
+            opacity=0.5,
+            ax=250,
+            ay=-40,
+        ),
+        dict(
+            x=156.0 / 300,
+            y=0.04 / 0.1,
+            xref="paper",
+            yref="paper",
+            showarrow=True,
+            arrowhead=0,
+            opacity=0.5,
+            ax=140,
+            ay=-10,
+        )
+    ]
+)
+
+# Configure axes
+fig.update_xaxes(title_text="Wavelength")
+fig.update_yaxes(title_text="Absorption", hoverformat=".3f")
+
+# Configure other layout properties
+fig.update_layout(
+    title_text="Absorption Frequencies of Benzene and Naphthalene",
+    height=500,
+    width=900,
+    template="plotly_white"
+)
+
+fig.show()
+```
+
+#### Zoom on Static Images
+
+```python
+import plotly.graph_objects as go
+
+# Create figure
+fig = go.Figure()
+
+# Constants
+img_width = 1600
+img_height = 900
+scale_factor = 0.5
+
+# Add invisible scatter trace.
+# This trace is added to help the autoresize logic work.
+fig.add_trace(
+    go.Scatter(
+        x=[0, img_width * scale_factor],
+        y=[0, img_height * scale_factor],
+        mode="markers",
+        marker_opacity=0
+    )
+)
+
+# Configure axes
+fig.update_xaxes(
+    visible=False,
+    range=[0, img_width * scale_factor]
+)
+
+fig.update_yaxes(
+    visible=False,
+    range=[0, img_height * scale_factor],
+    # the scaleanchor attribute ensures that the aspect ratio stays constant
+    scaleanchor="x"
+)
+
+# Add image
+fig.add_layout_image(
+    dict(
+        x=0,
+        sizex=img_width * scale_factor,
+        y=img_height * scale_factor,
+        sizey=img_height * scale_factor,
+        xref="x",
+        yref="y",
+        opacity=1.0,
+        layer="below",
+        sizing="stretch",
+        source="https://raw.githubusercontent.com/michaelbabyn/plot_data/master/bridge.jpg")
+)
+
+# Configure other layout
+fig.update_layout(
+    width=img_width * scale_factor,
+    height=img_height * scale_factor,
+    margin={"l": 0, "r": 0, "t": 0, "b": 0},
+)
+
+# Disable the autosize on double click because it adds unwanted margins around the image
+# More detail: https://plotly.com/python/configuration-options/
+fig.show(config={'doubleClick': 'reset'})
+```
+
+### Annotating layout image with shapes
+
+_introduced in plotly 4.7_
+
+It can be useful to add shapes to a layout image, for highlighting an object, drawing bounding boxes as part of a machine learning training set, or identifying seeds for a segmentation algorithm.
+
+In order to enable shape drawing, you need to
+- define a dragmode corresponding to a drawing tool (`'drawline'`,`'drawopenpath'`, `'drawclosedpath'`, `'drawcircle'`, or `'drawrect'`)
+- add [modebar buttons](/python/configuration-options#add-optional-shapedrawing-buttons-to-modebar) corresponding to the drawing tools you wish to use.
+
+The style of new shapes is specified by the `newshape` layout attribute. Shapes can be selected and modified after they have been drawn. More details and examples are given in the [tutorial on shapes](/python/shapes#drawing-shapes-on-cartesian-plots).
+
+Drawing or modifying a shape triggers a `relayout` event, which [can be captured by a callback inside a Dash application](https://dash.plotly.com/interactive-graphing).
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure()
+# Add image
+img_width = 1600
+img_height = 900
+scale_factor = 0.5
+fig.add_layout_image(
+        x=0,
+        sizex=img_width,
+        y=0,
+        sizey=img_height,
+        xref="x",
+        yref="y",
+        opacity=1.0,
+        layer="below",
+        source="https://raw.githubusercontent.com/michaelbabyn/plot_data/master/bridge.jpg"
+)
+fig.update_xaxes(showgrid=False, range=(0, img_width))
+fig.update_yaxes(showgrid=False, scaleanchor='x', range=(img_height, 0))
+# Line shape added programatically
+fig.add_shape(
+    type='line', xref='x', yref='y',
+    x0=650, x1=1080, y0=380, y1=180, line_color='cyan'
+)
+# Set dragmode and newshape properties; add modebar buttons
+fig.update_layout(
+    dragmode='drawrect',
+    newshape=dict(line_color='cyan'),
+    title_text='Drag to add annotations - use modebar to change drawing tool'
+)
+fig.show(config={'modeBarButtonsToAdd':['drawline',
+                                        'drawopenpath',
+                                        'drawclosedpath',
+                                        'drawcircle',
+                                        'drawrect',
+                                        'eraseshape'
+                                       ]})
+```
+
+
+### Images Placed Relative to Axes
+
+Using `xref='x domain'` or `yref='y domain'`, images can be placed relative to
+axes. As an example, the following shows how to put an image in the top corner
+of a subplot (try panning and zooming the resulting figure):
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", facet_col="species")
+# sources of images
+sources = [
+    "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Iris_setosa_var._setosa_%282595031014%29.jpg/360px-Iris_setosa_var._setosa_%282595031014%29.jpg",
+    "https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Iris_versicolor_quebec_1.jpg/320px-Iris_versicolor_quebec_1.jpg",
+    "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Iris_virginica_2.jpg/480px-Iris_virginica_2.jpg",
+]
+# add images
+for col, src in enumerate(sources):
+    fig.add_layout_image(
+        row=1,
+        col=col + 1,
+        source=src,
+        xref="x domain",
+        yref="y domain",
+        x=1,
+        y=1,
+        xanchor="right",
+        yanchor="top",
+        sizex=0.2,
+        sizey=0.2,
+    )
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/layout/images/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/imshow.md plotly-7.1.0+dfsg1/doc/python/imshow.md
--- plotly-5.20.0+dfsg/doc/python/imshow.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/imshow.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,507 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.12.0
+  plotly:
+    description: How to display image data in Python with Plotly.
+    display_as: scientific
+    has_thumbnail: true
+    ipynb: ~notebook_demo/34
+    language: python
+    layout: base
+    name: Imshow
+    order: 3
+    page_type: example_index
+    permalink: python/imshow/
+    thumbnail: thumbnail/imshow.jpg
+    v4upgrade: true
+---
+
+This tutorial shows how to display and explore image data. If you would like
+instead a logo or static image, use `go.layout.Image` as explained
+[here](/python/images).
+
+### Displaying RGB image data with px.imshow
+
+`px.imshow` displays multichannel (RGB) or single-channel ("grayscale") image data.
+
+```python
+import plotly.express as px
+import numpy as np
+img_rgb = np.array([[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
+                    [[0, 255, 0], [0, 0, 255], [255, 0, 0]]
+                   ], dtype=np.uint8)
+fig = px.imshow(img_rgb)
+fig.show()
+```
+
+### Read image arrays from image files
+
+In order to create a numerical array to be passed to `px.imshow`, you can use a third-party library like [PIL](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.open), [scikit-image](https://scikit-image.org/docs/dev/user_guide/getting_started.html) or [opencv](https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_image_display/py_image_display.html). We show below how to open an image from a file with `skimage.io.imread`, and alternatively how to load a demo image from `skimage.data`.
+
+```python
+import plotly.express as px
+from skimage import io
+img = io.imread('https://user-images.githubusercontent.com/72614349/179115668-2630e3e4-3a9f-4c88-9494-3412e606450a.jpg')
+fig = px.imshow(img)
+fig.show()
+```
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.astronaut()
+fig = px.imshow(img, binary_format="jpeg", binary_compression_level=0)
+fig.show()
+```
+
+### Display single-channel 2D data as a heatmap
+
+For a 2D image, `px.imshow` uses a colorscale to map scalar data to colors. The default colorscale is the one of the active template (see [the tutorial on templates](/python/templates/)).
+
+```python
+import plotly.express as px
+import numpy as np
+img = np.arange(15**2).reshape((15, 15))
+fig = px.imshow(img)
+fig.show()
+```
+
+### Choose the colorscale to display a single-channel image
+
+You can customize the [continuous color scale](/python/colorscales/) just like with any other Plotly Express function. However, `color_continuous_scale` is ignored when using `binary_string=True`, since the image is always represented as grayscale (and no colorbar is displayed).
+
+```python
+import plotly.express as px
+import numpy as np
+img = np.arange(100).reshape((10, 10))
+fig = px.imshow(img, binary_string=True)
+fig.show()
+```
+
+You can use this to make the image grayscale as well:
+
+```python
+import plotly.express as px
+import numpy as np
+img = np.arange(100).reshape((10, 10))
+fig = px.imshow(img, color_continuous_scale='gray')
+fig.show()
+```
+
+### Hiding the colorbar and axis labels
+
+See the [continuous color](/python/colorscales/) and [cartesian axes](/python/axes/) pages for more details.
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.camera()
+fig = px.imshow(img, color_continuous_scale='gray')
+fig.update_layout(coloraxis_showscale=False)
+fig.update_xaxes(showticklabels=False)
+fig.update_yaxes(showticklabels=False)
+fig.show()
+```
+
+### Customizing the axes and labels on a single-channel image
+
+You can use the `x`, `y` and `labels` arguments to customize the display of a heatmap, and use `.update_xaxes()` to move the x axis tick labels to the top:
+
+```python
+import plotly.express as px
+data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
+fig = px.imshow(data,
+                labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
+                x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
+                y=['Morning', 'Afternoon', 'Evening']
+               )
+fig.update_xaxes(side="top")
+fig.show()
+```
+
+### Display an xarray image with px.imshow
+
+[xarrays](http://xarray.pydata.org/en/stable/) are labeled arrays (with labeled axes and coordinates). If you pass an xarray image to `px.imshow`, its axes labels and coordinates will be used for axis titles. If you don't want this behavior, you can pass `img.values` which is a NumPy array if `img` is an xarray. Alternatively, you can override axis titles hover labels and colorbar title using the `labels` attribute, as above.
+
+```python
+import plotly.express as px
+import xarray as xr
+# Load xarray from dataset included in the xarray tutorial
+airtemps = xr.tutorial.open_dataset('air_temperature').air.sel(lon=250.0)
+fig = px.imshow(airtemps.T, color_continuous_scale='RdBu_r', origin='lower')
+fig.show()
+```
+
+### Display an xarray image with square pixels
+
+For xarrays, by default `px.imshow` does not constrain pixels to be square, since axes often correspond to different physical quantities (e.g. time and space), contrary to a plain camera image where pixels are square (most of the time). If you want to impose square pixels, set the parameter `aspect` to "equal" as below.
+
+```python
+import plotly.express as px
+import xarray as xr
+airtemps = xr.tutorial.open_dataset('air_temperature').air.isel(time=500)
+colorbar_title = airtemps.attrs['var_desc'] + '<br>(%s)'%airtemps.attrs['units']
+fig = px.imshow(airtemps, color_continuous_scale='RdBu_r', aspect='equal')
+fig.show()
+```
+
+### Display multichannel image data with go.Image
+
+It is also possible to use the `go.Image` trace from the low-level `graph_objects` API in order to display image data. Note that `go.Image` only accepts multichannel images. For single-channel images, use [`go.Heatmap`](/python/heatmaps).
+
+Note that the `go.Image` trace is different from the `go.layout.Image` class, which can be used for [adding background images or logos to figures](/python/images).
+
+```python
+import plotly.graph_objects as go
+img_rgb = [[[255, 0, 0], [0, 255, 0], [0, 0, 255]],
+           [[0, 255, 0], [0, 0, 255], [255, 0, 0]]]
+fig = go.Figure(go.Image(z=img_rgb))
+fig.show()
+```
+
+### Passing image data as a binary string to `go.Image`
+
+The `z` parameter of `go.Image` passes image data in the form of an array or a list of numerical values, but it is also possible to use the `source` parameter, which takes a b64 binary string. Thanks to png or jpg compression, using `source` is a way to reduce the quantity of data passed to the browser, and also to reduce the serialization time of the figure, resulting in increased performance.
+
+Note than an easier way of creating binary strings with `px.imshow` is explained below.
+
+```python
+import plotly.graph_objects as go
+from skimage import data
+from PIL import Image
+import base64
+from io import BytesIO
+
+img = data.astronaut()  # numpy array
+pil_img = Image.fromarray(img) # PIL image object
+prefix = "data:image/png;base64,"
+with BytesIO() as stream:
+    pil_img.save(stream, format="png")
+    base64_string = prefix + base64.b64encode(stream.getvalue()).decode("utf-8")
+fig = go.Figure(go.Image(source=base64_string))
+fig.show()
+```
+
+### Defining the data range covered by the color range with zmin and zmax
+
+The data range and color range are mapped together using the parameters `zmin` and `zmax` of `px.imshow` or `go.Image`, which correspond respectively to the data values mapped to black `[0, 0, 0]` and white `[255, 255, 255]`, or to the extreme colors of the colorscale in the case of single-channel data.
+
+For `go.Image`, `zmin` and `zmax` need to be given for all channels, whereas it is also possible to pass a scalar value (used for all channels) to `px.imshow`.
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.astronaut()
+# Increase contrast by clipping the data range between 50 and 200
+fig = px.imshow(img, zmin=50, zmax=200)
+# We customize the hovertemplate to show both the data and the color values
+# See https://plotly.com/python/hover-text-and-formatting/#customize-tooltip-text-with-a-hovertemplate
+#fig.update_traces(hovertemplate="x: %{x} <br> y: %{y} <br> z: %{z} <br> color: %{color}")
+fig.show()
+```
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.astronaut()
+# Stretch the contrast of the red channel only, resulting in a more red image
+fig = px.imshow(img, zmin=[50, 0, 0], zmax=[200, 255, 255])
+fig.show()
+```
+
+### Automatic contrast rescaling in `px.imshow`
+
+When `zmin` and `zmax` are not specified, the `contrast_rescaling` arguments determines how `zmin` and `zmax` are computed. For `contrast_rescaling='minmax'`, the extrema of the data range are used. For `contrast_rescaling='infer'`, a heuristic based on the data type is used:
+- for integer data types, `zmin` and `zmax` correspond to the extreme values of the data type, for example 0 and 255 for `uint8`, 0 and 65535 for `uint16`, etc.
+- for float numbers, the maximum value of the data is computed, and zmax is 1 if the max is smaller than 1, 255 if the max is smaller than 255, etc. (with higher thresholds 2**16 - 1 and 2**32 -1).
+
+These two modes can be used for single- and multichannel data. The default value is to use `'minmax'` for single-channel data (as in a Heatmap trace) and `infer` for multi-channel data (which often consist of uint8 data). In the example below we override the default value by setting `contrast_rescaling='infer'` for a single-channel image.
+
+```python
+import plotly.express as px
+img = np.arange(100, dtype=np.uint8).reshape((10, 10))
+fig = px.imshow(img, contrast_rescaling='infer')
+fig.show()
+```
+
+### Ticks and margins around image data
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.astronaut()
+fig = px.imshow(img)
+fig.update_layout(width=400, height=400, margin=dict(l=10, r=10, b=10, t=10))
+fig.update_xaxes(showticklabels=False).update_yaxes(showticklabels=False)
+fig.show()
+```
+
+### Combining image charts and other traces
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+from skimage import data
+img = data.camera()
+fig = px.imshow(img, color_continuous_scale='gray')
+fig.add_trace(go.Contour(z=img, showscale=False,
+                         contours=dict(start=0, end=70, size=70, coloring='lines'),
+                         line_width=2))
+fig.add_trace(go.Scatter(x=[230], y=[100], marker=dict(color='red', size=16)))
+fig.show()
+```
+
+### Displaying an image and the histogram of color values
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+from skimage import data
+img = data.chelsea()
+fig = make_subplots(1, 2)
+# We use go.Image because subplots require traces, whereas px functions return a figure
+fig.add_trace(go.Image(z=img), 1, 1)
+for channel, color in enumerate(['red', 'green', 'blue']):
+    fig.add_trace(go.Histogram(x=img[..., channel].ravel(), opacity=0.5,
+                               marker_color=color, name='%s channel' %color), 1, 2)
+fig.update_layout(height=400)
+fig.show()
+```
+
+### imshow and datashader
+
+Arrays of rasterized values build by datashader can be visualized using
+imshow. See the [plotly and datashader tutorial](/python/datashader/) for
+examples on how to use plotly and datashader.
+
+
+### Annotating image traces with shapes
+
+_introduced in plotly 4.7_
+
+It can be useful to add shapes to an image trace, for highlighting an object, drawing bounding boxes as part of a machine learning training set, or identifying seeds for a segmentation algorithm.
+
+In order to enable shape drawing, you need to
+- define a dragmode corresponding to a drawing tool (`'drawline'`,`'drawopenpath'`, `'drawclosedpath'`, `'drawcircle'`, or `'drawrect'`)
+- add modebar buttons corresponding to the drawing tools you wish to use.
+
+The style of new shapes is specified by the `newshape` layout attribute. Shapes can be selected and modified after they have been drawn. More details and examples are given in the [tutorial on shapes](/python/shapes#drawing-shapes-on-cartesian-plots).
+
+Drawing or modifying a shape triggers a `relayout` event, which [can be captured by a callback inside a Dash application](https://dash.plotly.com/interactive-graphing).
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.chelsea()
+fig = px.imshow(img)
+fig.add_annotation(
+    x=0.5,
+    y=0.9,
+    text="Drag and draw annotations",
+    xref="paper",
+    yref="paper",
+    showarrow=False,
+    font_size=20, font_color='cyan')
+# Shape defined programatically
+fig.add_shape(
+    type='rect',
+    x0=230, x1=290, y0=230, y1=280,
+    xref='x', yref='y',
+    line_color='cyan'
+)
+# Define dragmode, newshape parameters, amd add modebar buttons
+fig.update_layout(
+    dragmode='drawrect',
+    newshape=dict(line_color='cyan'))
+fig.show(config={'modeBarButtonsToAdd':['drawline',
+                                        'drawopenpath',
+                                        'drawclosedpath',
+                                        'drawcircle',
+                                        'drawrect',
+                                        'eraseshape'
+                                       ]})
+```
+
+### Passing image data as a binary string
+
+_introduced in plotly.py 4.10_
+
+`px.imshow` can pass the data to the figure object either as a list of numerical values, or as a png binary string which is passed directly to the browser. While the former solution offers more flexibility (values can be of float or int type, while values are rescaled to the range [0-255] for an image string), using a binary string is usually faster for large arrays. The parameter `binary_string` controls whether the image is passed as a png string (when `True`) or a list of values (`False`). Its default value is `True` for multi-channel images and `False` for single-channel images. When `binary_string=True`, image data are always represented using a `go.Image` trace.
+
+```python
+import plotly.express as px
+import numpy as np
+img = np.arange(15**2).reshape((15, 15))
+fig = px.imshow(img, binary_string=True)
+fig.show()
+```
+
+### Contrast rescaling im imshow with binary string
+
+When the image is passed to the plotly figure as a binary string (which is the default mode for RGB images), and when the image is rescaled to adjust the contrast (for example when setting `zmin` and `zmax`), the original intensity values are not passed to the plotly figure and therefore no intensity value is displayed in the hover.
+
+```python
+import plotly.express as px
+from skimage import data
+import numpy as np
+img = np.arange(100).reshape((10, 10))
+fig = px.imshow(img, binary_string=True)
+# You can check that only x and y are displayed in the hover
+# You can use a hovertemplate to override the hover information
+# See https://plotly.com/python/hover-text-and-formatting/#customize-tooltip-text-with-a-hovertemplate
+fig.show()
+```
+
+You can set `binary_string=False` if you want the intensity value to appear in the hover even for a rescaled image. In the example below we also modify the hovertemplate to display both `z` (the data of the original image array) and `color` (the pixel value displayed in the figure).
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.chelsea()
+# Increase contrast by clipping the data range between 50 and 200
+fig = px.imshow(img, binary_string=False, zmin=50, zmax=200)
+# We customize the hovertemplate to show both the data and the color values
+# See https://plotly.com/python/hover-text-and-formatting/#customize-tooltip-text-with-a-hovertemplate
+fig.update_traces(hovertemplate="x: %{x} <br> y: %{y} <br> z: %{z} <br> color: %{color}")
+fig.show()
+```
+
+### Changing the level of compression of the binary string in `px.imshow`
+
+The `binary_compression_level` parameter controls the level of compression to be used by the backend creating the png string. Two different backends can be used, `pypng` (which is a dependency of `plotly` and is therefore always available), and `pil` for Pillow, which is often more performant. The compression level has to be between 0 (no compression) and 9 (highest compression), although increasing the compression above 4 and 5 usually only offers diminishing returns (no significant compression gain, at the cost of a longer execution time).
+
+```python
+import plotly.express as px
+from skimage import data
+img = data.camera()
+for compression_level in range(0, 9):
+    fig = px.imshow(img, binary_string=True, binary_compression_level=compression_level)
+    print(f"compression level {compression_level}: length of {len(fig.data[0].source)}")
+fig.show()
+```
+
+### Exploring 3-D and 4-D images with `facet_col` and `facet_row`
+
+*`facet_col` introduced in plotly 4.14, `facet_row` introduced in plotly 6.7.0*
+
+For three-dimensional image datasets, obtained for example by MRI or CT in medical imaging, one can explore the dataset by representing its different planes as facets. The `facet_col` argument specifies along which axis the image is sliced through to make column facets, while `facet_row` specifies the axis for row facets. Using both together creates a grid of subplots for 4-D datasets. With `facet_col_wrap`, one can set the maximum number of columns (ignored when `facet_row` is set). For image datasets passed as xarrays, it is also possible to specify the axis by its name (label), thus passing a string to `facet_col` or `facet_row`.
+
+It is recommended to use `binary_string=True` for facetted plots of images in order to keep a small figure size and a short rendering time.
+
+See the [tutorial on facet plots](/python/facet-plots/) for more information on creating and styling facet plots.
+
+```python
+import plotly.express as px
+from skimage import io
+data = io.imread("https://github.com/scikit-image/skimage-tutorials/raw/main/images/cells.tif")
+img = data[20:45:2]
+fig = px.imshow(img, facet_col=0, binary_string=True, facet_col_wrap=5)
+fig.show()
+```
+
+Facets can also be used to represent several images of equal shape, like in the example below where different values of the blurring parameter of a Gaussian filter are compared.
+
+```python
+import plotly.express as px
+import numpy as np
+from skimage import data, filters, img_as_float
+img = data.camera()
+sigmas = [1, 2, 4]
+img_sequence = [filters.gaussian(img, sigma=sigma) for sigma in sigmas]
+fig = px.imshow(np.array(img_sequence), facet_col=0, binary_string=True,
+                labels={'facet_col':'sigma'})
+# Set facet titles
+for i, sigma in enumerate(sigmas):
+    fig.layout.annotations[i]['text'] = 'sigma = %d' %sigma
+fig.show()
+```
+
+The `facet_row` argument slices the image along a different axis to arrange facets vertically. When both `facet_row` and `facet_col` are used together, a grid of subplots is created from a 4-D dataset.
+
+```python
+import plotly.express as px
+from skimage import io
+data = io.imread("https://github.com/scikit-image/skimage-tutorials/raw/main/images/cells.tif")
+data = data.reshape((6, 10, 256, 256))[:3, :2]
+fig = px.imshow(data, facet_row=0, facet_col=1, binary_string=True,
+                labels={'facet_row':'group', 'facet_col':'slice'})
+fig.show()
+```
+
+### Exploring 3-D images and timeseries with `animation_frame`
+
+*Introduced in plotly 4.14*
+
+For three-dimensional image datasets, obtained for example by MRI or CT in medical imaging, one can explore the dataset by sliding through its different planes in an animation. The `animation_frame` argument of `px.imshow` sets the axis along which the 3-D image is sliced in the animation.
+
+```python
+import plotly.express as px
+from skimage import io
+data = io.imread("https://github.com/scikit-image/skimage-tutorials/raw/main/images/cells.tif")
+img = data[25:40]
+fig = px.imshow(img, animation_frame=0, binary_string=True, labels=dict(animation_frame="slice"))
+fig.show()
+```
+
+### Animations of xarray datasets
+
+*Introduced in plotly 4.14*
+
+For xarray datasets, one can pass either an axis number or an axis name to `animation_frame`. Axis names and coordinates are automatically used for the labels, ticks and animation controls of the figure.
+
+```python
+import plotly.express as px
+import xarray as xr
+# Load xarray from dataset included in the xarray tutorial
+ds = xr.tutorial.open_dataset('air_temperature').air[:20]
+fig = px.imshow(ds, animation_frame='time', zmin=220, zmax=300, color_continuous_scale='RdBu_r')
+fig.show()
+```
+
+### Combining animations and facets
+
+It is possible to view 4-dimensional datasets (for example, 3-D images evolving with time) using a combination of `animation_frame` and `facet_col`.
+
+```python
+import plotly.express as px
+from skimage import io
+data = io.imread("https://github.com/scikit-image/skimage-tutorials/raw/main/images/cells.tif")
+data = data.reshape((15, 4, 256, 256))[5:]
+fig = px.imshow(data, animation_frame=0, facet_col=1, binary_string=True)
+fig.show()
+```
+
+With `facet_row`, it is also possible to view 5-dimensional datasets by combining `animation_frame`, `facet_row`, and `facet_col`.
+
+```python
+import plotly.express as px
+from skimage import io
+data = io.imread("https://github.com/scikit-image/skimage-tutorials/raw/main/images/cells.tif")
+data = data.reshape((5, 3, 4, 256, 256))
+fig = px.imshow(data, animation_frame=0, facet_row=1, facet_col=2, binary_string=True)
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(imshow)`](https://plotly.com/python-api-reference/generated/plotly.express.imshow) or https://plotly.com/python/reference/image/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/indicator.md plotly-7.1.0+dfsg1/doc/python/indicator.md
--- plotly-5.20.0+dfsg/doc/python/indicator.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/indicator.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,236 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.7
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to make gauge charts in Python with Plotly.
+    display_as: financial
+    language: python
+    layout: base
+    name: Indicators
+    order: 6
+    page_type: u-guide
+    permalink: python/indicator/
+    thumbnail: thumbnail/indicator.jpg
+---
+
+#### Overview
+In this tutorial we introduce a new trace named "Indicator". The purpose of "indicator" is to visualize a single value specified by the "value" attribute.
+  Three distinct visual elements are available to represent that value: number, delta and gauge. Any combination of them can be specified via the "mode" attribute.
+  Top-level attributes are:
+    <ol>
+      <li>value: the value to visualize</li>
+      <li> mode: which visual elements to draw</li>
+      <li> align: how to align number and delta (left, center, right)</li>
+      <li> domain: the extent of the figure</li>
+    </ol>
+
+  Then we can configure the 3 different visual elements via their respective container:
+    <ol>
+      <li> number is simply a representation of the number in text. It has attributes:
+      <li> valueformat: to format the number</li>
+      <li> prefix: a string before the number</li>
+      <li> suffix: a string after the number </li>
+      <li> font.(family|size): to control the font</li>
+    </ol>
+   "delta" simply displays the difference between the value with respect to a reference. It has attributes:
+    <ol>
+      <li> reference: the number to compare the value with</li>
+      <li> relative: whether that difference is absolute or relative</li>
+      <li> valueformat: to format the delta</li>
+      <li> (increasing|decreasing).color: color to be used for positive or decreasing delta</li>
+      <li> (increasing|decreasing).symbol: symbol displayed on the left of the delta</li>
+      <li> font.(family|size): to control the font</li>
+      <li> position: position relative to `number` (either top, left, bottom, right)</li>
+      <li> prefix: a string to appear before the delta
+      <li> suffix: a string to appear after the delta
+    </ol>
+    Finally, we can have a simple title for the indicator via `title` with 'text' attribute which is a string, and 'align' which can be set to left, center, and right.
+    There are two gauge types: [angular](https://plotly.com/python/gauge-charts/) and [bullet](https://plotly.com/python/bullet-charts/). Here is a combination of both shapes (angular, bullet), and different modes (gauge, delta, and value):
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Indicator(
+    value = 200,
+    delta = {'reference': 160},
+    gauge = {
+        'axis': {'visible': False}},
+    domain = {'row': 0, 'column': 0}))
+
+fig.add_trace(go.Indicator(
+    value = 120,
+    gauge = {
+        'shape': "bullet",
+        'axis' : {'visible': False}},
+    domain = {'x': [0.05, 0.5], 'y': [0.15, 0.35]}))
+
+fig.add_trace(go.Indicator(
+    mode = "number+delta",
+    value = 300,
+    domain = {'row': 0, 'column': 1}))
+
+fig.add_trace(go.Indicator(
+    mode = "delta",
+    value = 40,
+    domain = {'row': 1, 'column': 1}))
+
+fig.update_layout(
+    grid = {'rows': 2, 'columns': 2, 'pattern': "independent"},
+    template = {'data' : {'indicator': [{
+        'title': {'text': "Speed"},
+        'mode' : "number+delta+gauge",
+        'delta' : {'reference': 90}}]
+                         }})
+```
+
+#### A Single Angular Gauge Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "gauge+number",
+    value = 450,
+    title = {'text': "Speed"},
+    domain = {'x': [0, 1], 'y': [0, 1]}
+))
+
+fig.show()
+```
+
+##### Bullet Gauge
+The equivalent of above "angular gauge":
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+gauge+delta",
+    gauge = {'shape': "bullet"},
+    delta = {'reference': 300},
+    value = 220,
+    domain = {'x': [0.1, 1], 'y': [0.2, 0.9]},
+    title = {'text': "Avg order size"}))
+
+fig.show()
+```
+
+#### Showing Information above Your Chart
+Another interesting feature is that indicator trace sits above the other traces (even the 3d ones). This way, it can be easily used as an overlay as demonstrated below
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+delta",
+    value = 492,
+    delta = {"reference": 512, "valueformat": ".0f"},
+    title = {"text": "Users online"},
+    domain = {'y': [0, 1], 'x': [0.25, 0.75]}))
+
+fig.add_trace(go.Scatter(
+    y = [325, 324, 405, 400, 424, 404, 417, 432, 419, 394, 410, 426, 413, 419, 404, 408, 401, 377, 368, 361, 356, 359, 375, 397, 394, 418, 437, 450, 430, 442, 424, 443, 420, 418, 423, 423, 426, 440, 437, 436, 447, 460, 478, 472, 450, 456, 436, 418, 429, 412, 429, 442, 464, 447, 434, 457, 474, 480, 499, 497, 480, 502, 512, 492]))
+
+fig.update_layout(xaxis = {'range': [0, 62]})
+fig.show()
+```
+#### Data Cards / Big Numbers
+Data card helps to display more contextual information about the data. Sometimes one number is all you want to see in a report, such as total sales, annual revenue, etc. This example shows how to visualize these big numbers:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+delta",
+    value = 400,
+    number = {'prefix': "$"},
+    delta = {'position': "top", 'reference': 320},
+    domain = {'x': [0, 1], 'y': [0, 1]}))
+
+fig.update_layout(paper_bgcolor = "lightgray")
+
+fig.show()
+```
+
+#### It's possible to display several numbers
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Indicator(
+    mode = "number+delta",
+    value = 200,
+    domain = {'x': [0, 0.5], 'y': [0, 0.5]},
+    delta = {'reference': 400, 'relative': True, 'position' : "top"}))
+
+fig.add_trace(go.Indicator(
+    mode = "number+delta",
+    value = 350,
+    delta = {'reference': 400, 'relative': True},
+    domain = {'x': [0, 0.5], 'y': [0.5, 1]}))
+
+fig.add_trace(go.Indicator(
+    mode = "number+delta",
+    value = 450,
+    title = {"text": "Accounts<br><span style='font-size:0.8em;color:gray'>Subtitle</span><br><span style='font-size:0.8em;color:gray'>Subsubtitle</span>"},
+    delta = {'reference': 400, 'relative': True},
+    domain = {'x': [0.6, 1], 'y': [0, 1]}))
+
+fig.show()
+```
+
+#### Adding a Prefix and Suffix
+
+
+On both a `number` and a `delta`, you can add a string to appear before the value using `prefix`. You can add a string to appear after the value using `suffix`. In the following example, we add '$' as a `prefix` and 'm' as `suffix` for both the `number` and `delta`.
+
+Note: `suffix` and `prefix` on `delta` are new in 5.10
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Indicator(
+    mode = "number+delta",
+    value = 492,
+    number = {"prefix": "$", "suffix": "m"},
+    delta = {"reference": 512, "valueformat": ".0f", "prefix": "$", "suffix": "m"},
+    title = {"text": "Profit"},
+    domain = {'y': [0, 1], 'x': [0.25, 0.75]}))
+
+fig.add_trace(go.Scatter(
+    y = [325, 324, 405, 400, 424, 404, 417, 432, 419, 394, 410, 426, 413, 419, 404, 408, 401, 377, 368, 361, 356, 359, 375, 397, 394, 418, 437, 450, 430, 442, 424, 443, 420, 418, 423, 423, 426, 440, 437, 436, 447, 460, 478, 472, 450, 456, 436, 418, 429, 412, 429, 442, 464, 447, 434, 457, 474, 480, 499, 497, 480, 502, 512, 492]))
+
+fig.update_layout(xaxis = {'range': [0, 62]})
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/indicator/ for more information and chart attribute options!
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/interactive-html-export.md plotly-7.1.0+dfsg1/doc/python/interactive-html-export.md
--- plotly-5.20.0+dfsg/doc/python/interactive-html-export.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/interactive-html-export.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,153 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: Plotly allows you to save interactive HTML versions of your figures
+      to your local disk.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Interactive HTML Export
+    order: 32
+    page_type: u-guide
+    permalink: python/interactive-html-export/
+    thumbnail: thumbnail/static-image-export.png
+---
+
+### Interactive vs Static Export
+
+Plotly figures are interactive when viewed in a web browser: you can hover over data points, pan and zoom axes, and show and hide traces by clicking or double-clicking on the legend. You can export figures either to [static image file formats like PNG, JPEG, SVG or PDF](/python/static-image-export/) or you can export them to HTML files which can be opened in a browser. This page explains how to do the latter.
+
+<!-- #region -->
+### Saving to an HTML file
+
+Any figure can be saved as an HTML file using the `write_html` method. These HTML files can be opened in any web browser to access the fully interactive figure.
+
+```python
+import plotly.express as px
+
+fig = px.scatter(x=range(10), y=range(10))
+fig.write_html("path/to/file.html")
+```
+<!-- #endregion -->
+
+### Controlling the size of the HTML file
+
+By default, the resulting HTML file is a fully self-contained HTML file which can be uploaded to a web server or shared via email or other file-sharing mechanisms. The downside to this approach is that the file is very large (5Mb+) because it contains an inlined copy of the Plotly.js library required to make the figure interactive. This can be controlled via the `include_plotlyjs` argument (see below).
+
+### Inserting Plotly Output into HTML using a Jinja2 Template
+
+You can insert Plotly output and text related to your data into HTML templates using Jinja2. Use `.to_html` to send the HTML to a Python string variable rather than using `write_html` to send the HTML to a disk file.  Use the `full_html=False` option to output just the code necessary to add a figure to a template. We do not want to output a full HTML page, as the template will define the rest of the page's structure — for example, the page's `HTML` and `BODY` tags.  First create a template file containing HTML and a Jinja variable, `{{ fig }}`.  We use Python to replace the Jinja variable with our graphic `fig`.
+
+<!-- #region -->
+
+```
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8" />   <!--It is necessary to use the UTF-8 encoding with plotly graphics to get e.g. negative signs to render correctly -->
+<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+
+<body>
+<h1>Here's a Plotly graph!</h1>
+{{ fig }}
+<p>And here's some text after the graph.</p>
+</body>
+</html>
+```
+
+
+Then use the following Python to replace `{{ fig }}` in the template with HTML that will display the Plotly figure "fig":
+
+```python
+import plotly.express as px
+from jinja2 import Template
+
+data_canada = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(data_canada, x='year', y='pop')
+
+output_html_path=r"/path/to/output.html"
+input_template_path = r"/path/to/template.html"
+
+plotly_jinja_data = {"fig":fig.to_html(full_html=False)}
+#consider also defining the include_plotlyjs parameter to point to an external Plotly.js as described above
+
+with open(output_html_path, "w", encoding="utf-8") as output_file:
+    with open(input_template_path) as template_file:
+        j2_template = Template(template_file.read())
+        output_file.write(j2_template.render(plotly_jinja_data))
+```
+
+The height of the figure can be made responsive by setting `autosize` to `True` and  `height` to `None` in the layout, and `responsive` to `True` in the config.
+
+
+```python
+import plotly.express as px
+from jinja2 import Template
+
+data_canada = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(data_canada, x='year', y='pop')
+
+output_html_path=r"/path/to/output.html"
+input_template_path = r"/path/to/template.html"
+
+fig.update_layout(autosize=True, height=None)
+fig_html = fig.to_html(
+    config={"responsive": True},
+    default_height="80vh",
+    full_html=False,
+)
+plotly_jinja_data = {"fig": fig_html}
+#consider also defining the include_plotlyjs parameter to point to an external Plotly.js as described above
+
+with open(output_html_path, "w", encoding="utf-8") as output_file:
+    with open(input_template_path) as template_file:
+        j2_template = Template(template_file.read())
+        output_file.write(j2_template.render(plotly_jinja_data))
+```
+<!-- #endregion -->
+
+### HTML export in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'interactive-html-export', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Reference
+
+See the following links for parameter information and HTML figure export options:
+
+- [`plotly.io.to_html()`](https://plotly.com/python-api-reference/generated/plotly.io.to_html.html)
+- [`plotly.io.write_html()`](https://plotly.com/python-api-reference/generated/plotly.io.write_html.html)
diff -Nru plotly-5.20.0+dfsg/doc/python/ipython-vs-python.md plotly-7.1.0+dfsg1/doc/python/ipython-vs-python.md
--- plotly-5.20.0+dfsg/doc/python/ipython-vs-python.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ipython-vs-python.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,66 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.5
+  plotly:
+    description: Discussion of key differences between IPython and Python
+    display_as: file_settings
+    language: python
+    layout: base
+    name: IPython vs Python
+    order: 27
+    permalink: python/ipython-vs-python/
+    thumbnail: thumbnail/venn.jpg
+---
+
+#### What is the difference between IPython and Python?
+While these two names are quite similar, they refer to entirely different things.<br>
+<br>
+[**Python**](https://www.python.org/) is a general-purpose programming language. It was created in the late 1980s by Guido van Rossum. It is now one of the most popular languages in the world. It is routinely used by system administrators and web developers. Also, many scientists are using Python thanks to libraries such as NumPy, SciPy, pandas, and matplotlib. The ease of use of Python and its dynamic nature make it a very productive language.<br>
+<br>
+[**IPython**](https://ipython.org/) is an interactive command-line terminal for Python. It was created by Fernando Perez in 2001. IPython offers an enhanced read-eval-print loop (REPL) environment particularly well adapted to scientific computing.
+
+
+![IPython terminal](https://s3-us-west-1.amazonaws.com/plotly-tutorials/plotly-documentation/images/ipython-console.png)
+
+
+In other words, IPython is a powerful *interface* to the Python language. But it is certainly not the only one. Besides IPython, the most common way to use Python is to write *scripts*, files with the `.py` extension.<br>
+<br>
+A script contains a list of commands to execute in order. It runs from start to finish and display some output. On the contrary, with IPython, you generally write one command at a time and you get the results instantly. This is a completely different way of working with Python. When analyzing data or running computational models, you need this sort of interactivity to explore them efficiently.
+
+
+#### Jupyter Notebook
+
+
+In 2011, IPython introduced a new tool named the **Notebook**. Inspired by scientific programs like Mathematica or Sage, the Notebook offers a modern and powerful web interface to Python.
+
+
+![IPython Notebook](https://s3-us-west-1.amazonaws.com/plotly-tutorials/plotly-documentation/images/notebook.png)
+
+
+Compared to the original IPython terminal, the Notebook offers a more convenient text editor, the possibility to write rich text, and improved graphical capabilities. Also, since it is a web interface, it can integrate many of the existing web libraries for data visualization, including *plotly.js*.<br>
+<br>
+In 2015, the IPython developers made a major code reorganization of their ever-growing project. The Notebook is now called the Jupyter Notebook. This interface can be used not only with Python but with dozens of other languages such as R and Julia. IPython is now the name of the Python backend (aka kernel).<br>
+<br>
+In conclusion, IPython and Jupyter are great interfaces to the Python language. If you're learning Python, using the IPython terminal or the Jupyter Notebook is highly recommended.<br>
+<br>
+This was a guest article written by Cyrille Rossant, author of Learning IPython for Interactive Computing and Data Visualization, second edition and IPython Interactive Computing and Visualization Cookbook.
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/jupyter-lab-tools.md plotly-7.1.0+dfsg1/doc/python/jupyter-lab-tools.md
--- plotly-5.20.0+dfsg/doc/python/jupyter-lab-tools.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/jupyter-lab-tools.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,54 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.5
+  plotly:
+    description: Using Plotly FigureWidgets with Jupyter Lab
+    display_as: chart_events
+    language: python
+    layout: base
+    name: Jupyter Lab with FigureWidget
+    order: 2
+    permalink: python/jupyter-lab-tools/
+    thumbnail: thumbnail/figurewidget-jupyterlab.png
+---
+
+#### Create a New View for Output
+
+
+Display a FigureWidget and then create a new window to display it in so that you can scroll through your code but still keep an eye on what you're doing.
+
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/create_view_for_output_jupyter_lab.gif'>
+
+#### View Live Updates
+
+With the output view it is easy to take full advantage of FigureWidgets new imperative-style graph updates since you can see your code and your graph at the same time.
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/demonstrate_view_jupyter_lab.gif'>
+
+
+
+#### Reference
+
+
+See [these Jupyter notebooks](https://github.com/jonmmease/plotly_ipywidget_notebooks) for even more FigureWidget examples.
diff -Nru plotly-5.20.0+dfsg/doc/python/legend.md plotly-7.1.0+dfsg1/doc/python/legend.md
--- plotly-5.20.0+dfsg/doc/python/legend.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/legend.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,913 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.19.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.14.3
+  plotly:
+    description: How to configure and style the legend in Plotly with Python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Legends
+    order: 16
+    permalink: python/legend/
+    redirect_from: python/horizontal-legend/
+    thumbnail: thumbnail/legends.gif
+---
+
+### Trace Types, Legends and Color Bars
+
+[Traces](/python/figure-structure) of most types and shapes can be optionally associated with a single legend item in the [legend](/python/legend/). Whether or not a given trace or shape appears in the legend is controlled via the `showlegend` attribute. Traces which are their own subplots (see above) do not support this, with the exception of traces of type `pie` and `funnelarea` for which every distinct color represented in the trace gets a separate legend item. Users may show or hide traces by clicking or double-clicking on their associated legend item. Traces that support legend items and shapes also support the `legendgroup` attribute, and all traces and shapes with the same legend group are treated the same way during click/double-click interactions.
+
+The fact that legend items are linked to traces means that when using [discrete color](/python/discrete-color/), a figure must have one trace per color in order to get a meaningful legend. [Plotly Express has robust support for discrete color](/python/discrete-color/) to make this easy.
+
+Traces which support [continuous color](/python/colorscales/) can also be associated with color axes in the layout via the `coloraxis` attribute. Multiple traces can be linked to the same color axis. Color axes have a legend-like component called color bars. Alternatively, color axes can be configured within the trace itself.
+
+
+### Legends with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Plotly Express functions will create one [trace](/python/figure-structure) per animation frame for each unique combination of data values mapped to discrete color, symbol, line-dash, facet-row and/or facet-column. Traces' `legendgroup` and `showlegend` attributed are set such that only one legend item appears per unique combination of discrete color, symbol and/or line-dash. The legend title is automatically set, and can be overrided with the `labels` keyword argument:
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="sex", symbol="smoker", facet_col="time",
+          labels={"sex": "Gender", "smoker": "Smokes"})
+fig.show()
+```
+
+### Legend Order
+
+By default, Plotly Express lays out legend items in the order in which values appear in the underlying data. Every Plotly Express function also includes a `category_orders` keyword argument which can be used to control [the order in which categorical axes are drawn](/python/categorical-axes/), but beyond that can also control the order in which legend items appear, and [the order in which facets are laid out](/python/facet-plots/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="day", y="total_bill", color="smoker", barmode="group", facet_col="sex",
+             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"],
+                              "smoker": ["Yes", "No"],
+                              "sex": ["Male", "Female"]})
+fig.show()
+```
+
+When using stacked bars, the bars are stacked from the bottom in the same order as they appear in the legend, so it can make sense to set `layout.legend.traceorder` to `"reversed"` to get the legend and stacks to match:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="day", y="total_bill", color="smoker", barmode="stack", facet_col="sex",
+             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"],
+                              "smoker": ["Yes", "No"],
+                              "sex": ["Male", "Female"]})
+fig.update_layout(legend_traceorder="reversed")
+fig.show()
+```
+
+When using [`plotly.graph_objects`](/python/graph-objects/) rather than Plotly Express, legend items will appear in the order that traces appear in the `data`:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Bar(name="first", x=["a", "b"], y=[1,2]))
+fig.add_trace(go.Bar(name="second", x=["a", "b"], y=[2,1]))
+fig.add_trace(go.Bar(name="third", x=["a", "b"], y=[1,2]))
+fig.add_trace(go.Bar(name="fourth", x=["a", "b"], y=[2,1]))
+fig.show()
+```
+
+*New in 5.16*
+
+If you have shapes that are configured to appear in a legend, these are displayed after all traces:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Bar(name="first", x=["a", "b"], y=[1, 2]))
+fig.add_trace(go.Bar(name="second", x=["a", "b"], y=[2, 1]))
+fig.add_shape(
+    name="first shape",
+    showlegend=True,
+    type="rect",
+    xref="paper",
+    line=dict(dash="dash"),
+    x0=0.85,
+    x1=0.95,
+    y0=0,
+    y1=1.5,
+)
+fig.add_trace(go.Bar(name="third", x=["a", "b"], y=[1, 2]))
+fig.add_trace(go.Bar(name="fourth", x=["a", "b"], y=[2, 1]))
+
+fig.show()
+
+```
+
+The `legendrank` attribute of a trace or shape can be used to control its placement in the legend.
+The default `legendrank` for traces and shapes is 1000. When all traces and shapes have the same `legendrank`, traces appear in the order they appear in the data, followed by shapes in the order they are defined.
+
+Any trace or shape can be pulled up to the top of the legend if it is the only one with a legend rank less than 1000 and pushed to the bottom if it is the only one with a rank greater than 1000.
+
+In this example, we add a `legendrank` for each trace and shape, giving the shape the lowest rank so it appears first, and moving the first trace defined to the bottom of the legend by giving it the highest rank.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+fig.add_trace(go.Bar(name="fourth", x=["a", "b"], y=[2,1], legendrank=5))
+fig.add_trace(go.Bar(name="second", x=["a", "b"], y=[2,1], legendrank=4))
+fig.add_trace(go.Bar(name="first", x=["a", "b"], y=[1,2], legendrank=2))
+fig.add_trace(go.Bar(name="third", x=["a", "b"], y=[1,2], legendrank=3))
+fig.add_shape(
+    legendrank=1,
+    showlegend=True,
+    type="line",
+    xref="paper",
+    line=dict(dash="5px"),
+    x0=0.05,
+    x1=0.45,
+    y0=1.5,
+    y1=1.5,
+)
+fig.show()
+```
+
+##### Per-Slice `legendrank` for Pie Traces
+
+*New in 6.8*
+
+For `pie` traces, `legendrank` also accepts an array so that each slice can be ranked individually. In the example below, the slices appear in the legend in the order specified by `legendrank` (lowest rank first), independent of the order of `values`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    go.Pie(
+        labels=["Oxygen", "Hydrogen", "Carbon", "Nitrogen", "Other"],
+        values=[4500, 2500, 1053, 500, 600],
+        legendrank=[3, 1, 2, 5, 4],
+    )
+)
+fig.show()
+```
+
+#### Showing and Hiding the Legend
+
+By default the legend is displayed on Plotly charts with multiple traces, and this can be explicitly set with the `layout.showlegend` attribute.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.histogram(df, x="sex", y="total_bill", color="time",
+                  title="Total Bill by Sex, Colored by Time")
+fig.update_layout(showlegend=False)
+fig.show()
+```
+
+
+### Legend Positioning
+
+Legends have an anchor point, which can be set to a point within the legend using `layout.legend.xanchor` and `layout.legend.yanchor`. The coordinate of the anchor can be positioned with `layout.legend.x` and `layout.legend.y` in [paper coordinates](/python/figure-structure/). Note that the plot margins will grow so as to accommodate the legend. The legend may also be placed within the plotting area.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year==2007")
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", color="continent",
+    size="pop", size_max=45, log_x=True)
+
+fig.update_layout(legend=dict(
+    yanchor="top",
+    y=0.99,
+    xanchor="left",
+    x=0.01
+))
+
+fig.show()
+```
+
+#### Legends in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'legend', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Horizontal Legends
+
+The `layout.legend.orientation` attribute can be set to `"h"` for a horizontal legend. Here we also position it above the plotting area.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year==2007")
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", color="continent",
+    size="pop", size_max=45, log_x=True)
+
+fig.update_layout(legend=dict(
+    orientation="h",
+    yanchor="bottom",
+    y=1.02,
+    xanchor="right",
+    x=1
+))
+
+fig.show()
+```
+
+#### Horizontal Legend Entry Width
+
+*New in 5.11*
+
+Set the width of horizontal legend entries by setting `entrywidth`. Here we set it to `70` pixels. Pixels is the default unit for `entrywidth`, but you can set it to be a fraction of the plot width using `entrywidthmode='fraction'`.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year==2007")
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", color="continent",
+    size="pop", size_max=45, log_x=True)
+
+fig.update_layout(legend=dict(
+    orientation="h",
+    entrywidth=70,
+    yanchor="bottom",
+    y=1.02,
+    xanchor="right",
+    x=1
+))
+
+fig.show()
+```
+
+#### Legend Max Height
+
+*New in 6.3*
+
+By default, a legend can expand to fill up to half of the layout area height for a horizontal legend and the full height for a vertical legend. You can change this by specifying a `maxheight` for the legend. `maxheight` is interpreted as a ratio if it is 1 or less, and as an exact pixel value if it is greater than 1. In the following plot with many legend items, we set `maxheight` to a ratio of 0.10, giving the plot more space.
+
+```python
+import plotly.express as px
+from plotly import data
+
+df = data.gapminder().query("year==2007 and continent == 'Europe'")
+
+fig = px.scatter(df,
+                 x="gdpPercap",
+                 y="lifeExp",
+                 color="country",
+                 size="pop",
+                 size_max=45,
+                 title="Life Expectancy vs. GDP per Capita in 2007 (by Country)",
+                 labels={"gdpPercap": "GDP per Capita"},
+                )
+
+fig.update_layout(
+    xaxis=dict(
+        side="top"
+    ),
+    legend=dict(
+        orientation="h",
+        yanchor="bottom",
+        y=-0.35,
+        xanchor="center",
+        x=0.5,
+        maxheight=0.1, # Comment maxheight to see legend take up 0.5 of plotting area
+        title_text="Country"
+    ),
+)
+
+fig.show()
+```
+
+#### Styling Legends
+
+Legends support many styling options.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year==2007")
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", color="continent",
+    size="pop", size_max=45, log_x=True)
+
+
+fig.update_layout(
+    legend=dict(
+        x=0,
+        y=1,
+        traceorder="reversed",
+        title_font_family="Times New Roman",
+        font=dict(
+            family="Courier",
+            size=12,
+            color="black"
+        ),
+        bgcolor="LightSteelBlue",
+        bordercolor="Black",
+        borderwidth=2
+    )
+)
+
+fig.show()
+```
+
+### Legends with Graph Objects
+
+When creating figures using [graph objects](/python/graph-objects/) without using [Plotly Express](/python/plotly-express/), legends must be manually configured using some of the options below.
+
+
+#### Legend Item Names
+
+For traces, legend items appear per trace, and the legend item name is taken from the trace's `name` attribute.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[1, 2, 3, 4, 5],
+    name="Positive"
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[5, 4, 3, 2, 1],
+    name="Negative"
+))
+
+fig.show()
+```
+
+By default, for shapes, legend items are disabled. Set `showlegend=True` on a shape for it to display a legend item.
+The name that appears for the shape in the legend is the shape's `name` if it is provided. If no `name` is provided, the shape label's `text` is used. If neither is provided, the legend item appears as "shape \<shape number>". For example, "shape 1".
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[1, 2, 3, 4, 5],
+    name="Positive"
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[5, 4, 3, 2, 1],
+    name="Negative"
+))
+
+fig.add_shape(
+    showlegend=True,
+    type="rect",
+    x0=2,
+    x1=4,
+    y0=4.5,
+    y1=5,
+)
+
+fig.show()
+```
+
+#### Legend titles
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[1, 2, 3, 4, 5],
+    name="Increasing"
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[5, 4, 3, 2, 1],
+    name="Decreasing"
+))
+
+fig.update_layout(legend_title_text='Trend')
+fig.show()
+```
+
+### Hiding Legend Items
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[1, 2, 3, 4, 5],
+    showlegend=False
+))
+
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[5, 4, 3, 2, 1],
+))
+
+fig.update_layout(showlegend=True)
+
+fig.show()
+```
+
+#### Hiding the Trace Initially
+
+Traces and shapes have a `visible` attribute. If set to `legendonly`, the trace or shape is hidden from the graph implicitly. Click on the name in the legend to display the hidden trace or shape.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[1, 2, 3, 4, 5],
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[5, 4, 3, 2, 1],
+    visible='legendonly'
+))
+
+fig.show()
+```
+
+#### Size of Legend Items
+
+In this example [itemsizing](https://plotly.com/python/reference/layout/#layout-legend-itemsizing) attribute determines the legend items symbols remain constant, regardless of how tiny/huge the bubbles would be in the graph.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[1, 2, 3, 4, 5],
+    mode='markers',
+    marker={'size':10}
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[5, 4, 3, 2, 1],
+    mode='markers',
+    marker={'size':100}
+))
+
+fig.update_layout(legend= {'itemsizing': 'constant'})
+
+fig.show()
+```
+
+#### Grouped Legend Items
+
+Grouping legend items together by setting the `legendgroup` attribute of traces causes their legend entries to be next to each other, and clicking on any legend entry in the group will show or hide the whole group. The `legendgrouptitle` attribute can be used to give titles to groups.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 1, 3],
+    legendgroup="group",  # this can be any string, not just "group"
+    legendgrouptitle_text="First Group Title",
+    name="first legend group",
+    mode="markers",
+    marker=dict(color="Crimson", size=10)
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 2, 2],
+    legendgroup="group",
+    name="first legend group - average",
+    mode="lines",
+    line=dict(color="Crimson")
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[4, 9, 2],
+    legendgroup="group2",
+    legendgrouptitle_text="Second Group Title",
+    name="second legend group",
+    mode="markers",
+    marker=dict(color="MediumPurple", size=10)
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[5, 5, 5],
+    legendgroup="group2",
+    name="second legend group - average",
+    mode="lines",
+    line=dict(color="MediumPurple")
+))
+
+fig.update_layout(title=dict(text="Try Clicking on the Legend Items!"))
+
+fig.show()
+```
+
+You can also hide entries in grouped legends, preserving the grouped show/hide behaviour. This is what Plotly Express does with its legends.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 1, 3],
+    legendgroup="group",  # this can be any string, not just "group"
+    name="first legend group",
+    mode="markers",
+    marker=dict(color="Crimson", size=10)
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 2, 2],
+    legendgroup="group",
+    name="first legend group - average",
+    mode="lines",
+    line=dict(color="Crimson"),
+    showlegend=False,
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[4, 9, 2],
+    legendgroup="group2",
+    name="second legend group",
+    mode="markers",
+    marker=dict(color="MediumPurple", size=10)
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[5, 5, 5],
+    legendgroup="group2",
+    name="second legend group - average",
+    mode="lines",
+    line=dict(color="MediumPurple"),
+    showlegend=False
+))
+
+fig.update_layout(title=dict(text="Try Clicking on the Legend Items!"))
+fig.show()
+```
+
+#### Indent Legend Entries
+
+*New in 5.20*
+
+To indent legend entries, set `indenation` on `layout.legend` to a number of pixels. In the following example, we indent legend entries by 10 pixels.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.iris()
+
+fig = go.Figure(
+    [
+        go.Scatter(
+            x=df[df["species"] == species]["sepal_width"],
+            y=df[df["species"] == species]["sepal_length"],
+            mode="markers",
+            name=species,
+        )
+        for species in df["species"].unique()
+    ],
+    layout=dict(
+        legend=dict(
+            title=dict(
+                text="Species",
+            ),
+            indentation=10
+        )
+    ),
+)
+
+
+fig.show()
+```
+
+#### Group click toggle behavior
+
+*New in v5.3*
+
+You can also define the toggle behavior for when a user clicks an item in a group. Here we set the `groupclick` for the `legend` to `toggleitem`. This toggles the visibility of just the item clicked on by the user. Set to `togglegroup` and it toggles the visibility of all items in the same group as the item clicked on.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 1, 3],
+    legendgroup="group",  # this can be any string, not just "group"
+    legendgrouptitle_text="First Group Title",
+    name="first legend group",
+    mode="markers",
+    marker=dict(color="Crimson", size=10)
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 2, 2],
+    legendgroup="group",
+    name="first legend group - average",
+    mode="lines",
+    line=dict(color="Crimson")
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[4, 9, 2],
+    legendgroup="group2",
+    legendgrouptitle_text="Second Group Title",
+    name="second legend group",
+    mode="markers",
+    marker=dict(color="MediumPurple", size=10)
+))
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[5, 5, 5],
+    legendgroup="group2",
+    name="second legend group - average",
+    mode="lines",
+    line=dict(color="MediumPurple")
+))
+
+fig.update_layout(title=dict(text="Try Clicking on the Legend Items!"))
+fig.update_layout(legend=dict(groupclick="toggleitem"))
+
+fig.show()
+
+```
+
+### Legend items for continuous fields (2D and 3D)
+
+Traces corresponding to 2D fields (e.g. `go.Heatmap`, `go.Histogram2d`) or 3D fields (e.g. `go.Isosurface`, `go.Volume`, `go.Cone`) can also appear in the legend. They come with legend icons corresponding to each trace type, which are colored using the same colorscale as the trace.
+
+The example below explores a vector field using several traces. Note that you can click on legend items to hide or to select (with a double click) a specific trace. This will make the exploration of your data easier!
+
+```python
+import numpy as np
+import plotly.graph_objects as go
+
+# Define vector and scalar fields
+x, y, z = np.mgrid[0:1:8j, 0:1:8j, 0:1:8j]
+u =    np.sin(np.pi*x) * np.cos(np.pi*z)
+v = -2*np.sin(np.pi*y) * np.cos(2*np.pi*z)
+w = np.cos(np.pi*x)*np.sin(np.pi*z) + np.cos(np.pi*y)*np.sin(2*np.pi*z)
+magnitude = np.sqrt(u**2 + v**2 + w**2)
+mask1 = np.logical_and(y>=.4, y<=.6)
+mask2 = y>.6
+
+fig = go.Figure(go.Isosurface(
+                      x=x.ravel(), y=y.ravel(), z=z.ravel(),
+                      value=magnitude.ravel(),
+                      isomin=1.9, isomax=1.9,
+                      colorscale="BuGn",
+                      name='isosurface'))
+
+
+fig.add_trace(go.Cone(x=x[mask1], y=y[mask1], z=z[mask1],
+                      u=u[mask1], v=v[mask1], w=w[mask1],
+                      colorscale="Blues",
+                      name='cones'
+))
+fig.add_trace(go.Streamtube(
+                      x=x[mask2], y=y[mask2], z=z[mask2],
+                      u=u[mask2], v=v[mask2], w=w[mask2],
+                      colorscale="Reds",
+                      name='streamtubes'
+))
+# Update all traces together
+fig.update_traces(showlegend=True, showscale=False)
+fig.update_layout(width=600, title_text='Exploration of a vector field using several traces')
+fig.show()
+```
+
+### Adding Multiple Legends
+
+*New in 5.15*
+
+By default, all traces and shapes appear on one legend. To have multiple legends, specify an alternative legend for a trace or shape using the `legend` property. For a second legend, set `legend="legend2"`. Specify more legends with `legend="legend3"`, `legend="legend4"` and so on.
+
+In this example, the last two scatter traces display on the second legend, "legend2". On the figure's layout, we then position and style each legend.
+
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+
+df_germany = df.loc[(df.country.isin(["Germany"]))]
+df_france = df.loc[(df.country.isin(["France"]))]
+df_uk = df.loc[(df.country.isin(["United Kingdom"]))]
+
+
+df_averages_europe = (
+    df.loc[(df.continent.isin(["Europe"]))].groupby(by="year").mean(numeric_only=True)
+)
+df_averages_americas = (
+    df.loc[(df.continent.isin(["Americas"]))].groupby(by="year").mean(numeric_only=True)
+)
+
+
+fig = go.Figure(
+    data=[
+        go.Scatter(x=df_germany.year, y=df_germany.gdpPercap, name="Germany"),
+        go.Scatter(x=df_france.year, y=df_france.gdpPercap, name="France"),
+        go.Scatter(x=df_uk.year, y=df_uk.gdpPercap, name="UK"),
+        go.Scatter(
+            x=df_averages_europe.index,
+            y=df_averages_europe.gdpPercap,
+            name="Europe",
+            legend="legend2",
+        ),
+        go.Scatter(
+            x=df_averages_americas.index,
+            y=df_averages_americas.gdpPercap,
+            name="Americas",
+            legend="legend2",
+        ),
+    ],
+    layout=dict(
+        title=dict(
+            text="GDP Per Capita"
+        ),
+        legend=dict(
+            title=dict(
+                text="By country"
+            ),
+            xref="container",
+            yref="container",
+            y=0.65,
+            bgcolor="Orange"
+        ),
+        legend2=dict(
+            title=dict(
+                text="By continent"
+            ),
+            xref="container",
+            yref="container",
+            y=0.85,
+            bgcolor="Gold"
+        ),
+    ),
+)
+
+fig.show()
+```
+
+### Positioning Legends
+
+In the previous example, we position the second legend by specifying x and y values. By default, these values are based on the width and height of the plot area. It is also possible to specify values that reference the container width and height by setting "xref=container" and "yref="container" (the default values are "xref=paper" and "yref="paper"). When set to "container", the margin grows so the legend and plot don't overlap.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+
+df_germany = df.loc[(df.country.isin(["Germany"]))]
+df_france = df.loc[(df.country.isin(["France"]))]
+df_uk = df.loc[(df.country.isin(["United Kingdom"]))]
+
+fig = go.Figure(
+    data=[
+        go.Scatter(x=df_germany.year, y=df_germany.gdpPercap, name="Germany"),
+        go.Scatter(x=df_france.year, y=df_france.gdpPercap, name="France"),
+        go.Scatter(x=df_uk.year, y=df_uk.gdpPercap, name="UK"),
+    ],
+    layout=dict(
+        title=dict(text="GDP Per Capita"),
+        legend={
+            "x": 0.9,
+            "y": 0.9,
+            "xref": "container",
+            "yref": "container",
+            "bgcolor": "Gold",
+        },
+    ),
+)
+
+fig.show()
+
+```
+
+### Legend Title Click Behavior
+
+*New in 6.6*
+
+When a figure has multiple legends:
+
+- Single-clicking a legend title toggles the visibility of all items in that legend
+- Double-clicking a legend title toggles the visibility of all items in other legends
+
+This default behavior can be changed for a legend by setting `titleclick` and `titledoubleclick`, which accept:
+- `"toggle"`: toggles the visibility of items in the clicked legend
+- `"toggleothers"`: toggles the visibility of items in other legends
+- `False`: disables click behavior
+
+For example, to swap the behaviors:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[
+        go.Scatter(x=[1, 2, 3], y=[1, 2, 3], name="Trace 1"),
+        go.Scatter(x=[1, 2, 3], y=[2, 3, 4], name="Trace 2"),
+        go.Scatter(x=[1, 2, 3], y=[3, 4, 5], name="Trace 3", legend="legend2"),
+        go.Scatter(x=[1, 2, 3], y=[4, 5, 6], name="Trace 4", legend="legend2"),
+    ],
+    layout=dict(
+        legend=dict(
+            title=dict(text="First Legend"),
+            titleclick="toggleothers",
+            titledoubleclick="toggle",
+        ),
+        legend2=dict(
+            title=dict(text="Second Legend"),
+            titleclick="toggleothers",
+            titledoubleclick="toggle",
+            y=0.5,
+        ),
+    ),
+)
+
+fig.show()
+```
+
+<!-- #region -->
+To disable title click behavior, set `titleclick` and `titledoubleclick` to `False`:
+
+```python
+fig.update_layout(
+    legend=dict(titleclick=False, titledoubleclick=False),
+    legend2=dict(titleclick=False, titledoubleclick=False),
+)
+```
+
+> **Note:** Legend title click interactions are not supported for legends containing pie or pie-like traces.
+<!-- #endregion -->
+
+#### Reference
+
+See https://plotly.com/python/reference/layout/#layout-legend for more information!
diff -Nru plotly-5.20.0+dfsg/doc/python/line-and-scatter.md plotly-7.1.0+dfsg1/doc/python/line-and-scatter.md
--- plotly-5.20.0+dfsg/doc/python/line-and-scatter.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/line-and-scatter.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,657 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make scatter plots in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Scatter Plots
+    order: 1
+    page_type: example_index
+    permalink: python/line-and-scatter/
+    redirect_from: python/line-and-scatter-plots-tutorial/
+    thumbnail: thumbnail/line-and-scatter.jpg
+---
+
+## Scatter plots with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.scatter`, each data point is represented as a marker point, whose location is given by the `x` and `y` columns.
+
+```python
+# x and y given as array_like objects
+import plotly.express as px
+fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])
+fig.show()
+```
+
+```python
+# x and y given as DataFrame columns
+import plotly.express as px
+df = px.data.iris() # iris is a pandas DataFrame
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.show()
+```
+
+#### Setting size and color with column names
+
+Scatter plots with variable-sized circular markers are often known as [bubble charts](https://plotly.com/python/bubble-charts/). Note that `color` and `size` data are added to hover information. You can add other columns to hover data with the `hover_data` argument of `px.scatter`.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 size='petal_length', hover_data=['petal_width'])
+fig.show()
+```
+
+Color can be [continuous](https://plotly.com/python/colorscales/) as follows, or [discrete/categorical](https://plotly.com/python/discrete-color/) as above.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color='petal_length')
+fig.show()
+```
+
+The `symbol` argument can be mapped to a column as well. A [wide variety of symbols](https://plotly.com/python/marker-style/) are available.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", symbol="species")
+fig.show()
+```
+
+## Scatter plots in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'line-and-scatter', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Scatter plots and Categorical Axes
+
+Scatter plots can be made using any type of cartesian axis, including [linear](https://plotly.com/python/axes/), [logarithmic](https://plotly.com/python/log-plot/), [categorical](https://plotly.com/python/categorical-axes/) or [date](https://plotly.com/python/time-series/) axes.
+
+Scatter plots where one axis is categorical are often known as [dot plots](https://plotly.com/python/dot-plots/).
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.scatter(df, y="nation", x="count", color="medal", symbol="medal")
+fig.update_traces(marker_size=10)
+fig.show()
+```
+
+### Grouped Scatter Points
+
+*New in 5.12*
+
+By default, scatter points at the same location are overlayed. We can see this in the previous example, with the values for Canada for bronze and silver. Set `scattermode='group'` to plot scatter points next to one another, centered around the shared location.
+
+```python
+import plotly.express as px
+
+df = px.data.medals_long()
+
+fig = px.scatter(df, y="count", x="nation", color="medal")
+fig.update_traces(marker_size=10)
+fig.update_layout(scattermode="group")
+fig.show()
+```
+
+*New in 5.12*
+
+You can configure the gap between groups of scatter points using `scattergap`. Here we set it to `0.75`, which brings the points closer together by allocating more space to the gap between groups. If you don't set `scattergap`, a default value of `0` is used, unless you have `bargap` set. If you have `bargap` set, the `scattergap` defaults to that value.
+
+
+```python
+import plotly.express as px
+
+df = px.data.medals_long()
+
+fig = px.scatter(df, y="count", x="nation", color="medal")
+fig.update_traces(marker_size=10)
+fig.update_layout(scattermode="group", scattergap=0.75)
+fig.show()
+```
+
+### Error Bars
+
+Scatter plots support [error bars](https://plotly.com/python/error-bars/).
+
+```python
+import plotly.express as px
+df = px.data.iris()
+df["e"] = df["sepal_width"]/100
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 error_x="e", error_y="e")
+fig.show()
+```
+
+### Marginal Distribution Plots
+
+Scatter plots support [marginal distribution plots](https://plotly.com/python/marginal-plots/)
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", marginal_x="histogram", marginal_y="rug")
+fig.show()
+```
+
+### Facetting
+
+Scatter plots support [faceting](https://plotly.com/python/facet-plots/).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="smoker", facet_col="sex", facet_row="time")
+fig.show()
+```
+
+### Linear Regression and Other Trendlines
+
+Scatter plots support [linear and non-linear trendlines](https://plotly.com/python/linear-fits/).
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", trendline="ols")
+fig.show()
+```
+
+## Line plots with Plotly Express
+
+```python
+import plotly.express as px
+import numpy as np
+
+t = np.linspace(0, 2*np.pi, 100)
+
+fig = px.line(x=t, y=np.cos(t), labels={'x':'t', 'y':'cos(t)'})
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.line(df, x='year', y='lifeExp', color='country')
+fig.show()
+```
+
+The `markers` argument can be set to `True` to show markers on lines.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.line(df, x='year', y='lifeExp', color='country', markers=True)
+fig.show()
+```
+
+The `symbol` argument can be used to map a data field to the marker symbol. A [wide variety of symbols](https://plotly.com/python/marker-style/) are available.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.line(df, x='year', y='lifeExp', color='country', symbol="country")
+fig.show()
+```
+
+### Line plots on Date axes
+
+Line plots can be made on using any type of cartesian axis, including [linear](https://plotly.com/python/axes/), [logarithmic](https://plotly.com/python/log-plot/), [categorical](https://plotly.com/python/categorical-axes/) or date axes. Line plots on date axes are often called [time-series charts](https://plotly.com/python/time-series/).
+
+Plotly auto-sets the axis type to a date format when the corresponding data are either ISO-formatted date strings or if they're a [date pandas column](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html) or [datetime NumPy array](https://docs.scipy.org/doc/numpy/reference/arrays.datetime.html).
+
+```python
+import plotly.express as px
+
+df = px.data.stocks()
+fig = px.line(df, x='date', y="GOOG")
+fig.show()
+```
+
+### Data Order in Scatter and Line Charts
+
+Plotly line charts are implemented as [connected scatterplots](https://www.data-to-viz.com/graph/connectedscatter.html) (see below), meaning that the points are plotted and connected with lines **in the order they are provided, with no automatic reordering**.
+
+This makes it possible to make charts like the one below, but also means that it may be required to explicitly sort data before passing it to Plotly to avoid lines moving "backwards" across the chart.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame(dict(
+    x = [1, 3, 2, 4],
+    y = [1, 2, 3, 4]
+))
+fig = px.line(df, x="x", y="y", title="Unsorted Input")
+fig.show()
+
+df = df.sort_values(by="x")
+fig = px.line(df, x="x", y="y", title="Sorted Input")
+fig.show()
+```
+
+### Connected Scatterplots
+
+In a connected scatterplot, two continuous variables are plotted against each other, with a line connecting them in some meaningful order, usually a time variable. In the plot below, we show the "trajectory" of a pair of countries through a space defined by GDP per Capita and Life Expectancy. Botswana's life expectancy
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("country in ['Canada', 'Botswana']")
+
+fig = px.line(df, x="lifeExp", y="gdpPercap", color="country", text="year")
+fig.update_traces(textposition="bottom right")
+fig.show()
+```
+
+### Swarm (or Beeswarm) Plots
+
+Swarm plots show the distribution of values in a column by giving each entry one dot and adjusting the y-value so that dots do not overlap and appear symmetrically around the y=0 line. They complement [histograms](https://plotly.com/python/histograms/), [box plots](https://plotly.com/python/box-plots/), and [violin plots](https://plotly.com/python/violin/). This example could be generalized to implement a swarm plot for multiple categories by adjusting the y-coordinate for each category.
+
+```python
+import pandas as pd
+import plotly.express as px
+import collections
+
+
+def negative_1_if_count_is_odd(count):
+    # if this is an odd numbered entry in its bin, make its y coordinate negative
+    # the y coordinate of the first entry is 0, so entries 3, 5, and 7 get
+    # negative y coordinates
+    if count % 2 == 1:
+        return -1
+    else:
+        return 1
+
+
+def swarm(
+    X_series,
+    fig_title,
+    point_size=16,
+    fig_width=800,
+    gap_multiplier=1.2,
+    bin_fraction=0.95,  # slightly undersizes the bins to avoid collisions
+):
+    # sorting will align columns in attractive c-shaped arcs rather than having
+    # columns that vary unpredictably in the x-dimension.
+    # We also exploit the fact that sorting means we see bins sequentially when
+    # we add collision prevention offsets.
+    X_series = X_series.copy().sort_values()
+
+    # we need to reason in terms of the marker size that is measured in px
+    # so we need to think about each x-coordinate as being a fraction of the way from the
+    # minimum X value to the maximum X value
+    min_x = min(X_series)
+    max_x = max(X_series)
+
+    list_of_rows = []
+    # we will count the number of points in each "bin" / vertical strip of the graph
+    # to be able to assign a y-coordinate that avoids overlapping
+    bin_counter = collections.Counter()
+
+    for x_val in X_series:
+        # assign this x_value to bin number
+        # each bin is a vertical strip slightly narrower than one marker
+        bin = (((fig_width*bin_fraction*(x_val-min_x))/(max_x-min_x)) // point_size)
+
+        # update the count of dots in that strip
+        bin_counter.update([bin])
+
+        # remember the "y-slot" which tells us the number of points in this bin and is sufficient to compute the y coordinate unless there's a collision with the point to its left
+        list_of_rows.append(
+            {"x": x_val, "y_slot": bin_counter[bin], "bin": bin})
+
+    # iterate through the points and "offset" any that are colliding with a
+    # point to their left apply the offsets to all subsequent points in the same bin.
+    # this arranges points in an attractive swarm c-curve where the points
+    # toward the edges are (weakly) further right.
+    bin = 0
+    offset = 0
+    for row in list_of_rows:
+        if bin != row["bin"]:
+            # we have moved to a new bin, so we need to reset the offset
+            bin = row["bin"]
+            offset = 0
+        # see if we need to "look left" to avoid a possible collision
+        for other_row in list_of_rows:
+            if (other_row["bin"] == bin-1):
+                # "bubble" the entry up until we find a slot that avoids a collision
+                while ((other_row["y_slot"] == row["y_slot"]+offset)
+                       and (((fig_width*(row["x"]-other_row["x"]))/(max_x-min_x)
+                              // point_size) < 1)):
+                    offset += 1
+                    # update the bin count so we know whether the number of
+                    # *used* slots is even or odd
+                    bin_counter.update([bin])
+
+        row["y_slot"] += offset
+        # The collision free y coordinate gives the items in a vertical bin
+        # y-coordinates to evenly spread their locations above and below the
+        # y-axis (we'll make a correction below to deal with even numbers of
+        # entries).  For now, we'll assign 0, 1, -1, 2, -2, 3, -3 ... and so on.
+        # We scale this by the point_size*gap_multiplier to get a y coordinate
+        # in px.
+        row["y"] = (row["y_slot"]//2) * \
+            negative_1_if_count_is_odd(row["y_slot"])*point_size*gap_multiplier
+
+    # if the number of points is even, move y-coordinates down to put an equal
+    # number of entries above and below the axis
+    for row in list_of_rows:
+        if bin_counter[row["bin"]] % 2 == 0:
+            row["y"] -= point_size*gap_multiplier/2
+
+    df = pd.DataFrame(list_of_rows)
+    # One way to make this code more flexible to e.g. handle multiple categories
+    # would be to return a list of "swarmified" y coordinates here and then plot
+    # outside the function.
+    # That generalization would let you "swarmify" y coordinates for each
+    # category and add category specific offsets to put the each category in its
+    # own row
+
+    fig = px.scatter(
+        df,
+        x="x",
+        y="y",
+        title=fig_title,
+    )
+    # we want to suppress the y coordinate in the hover value because the
+    # y-coordinate is irrelevant/misleading
+    fig.update_traces(
+        marker_size=point_size,
+        # suppress the y coordinate because the y-coordinate is irrelevant
+        hovertemplate="<b>value</b>: %{x}",
+    )
+    # we have to set the width and height because we aim to avoid icon collisions
+    # and we specify the icon size in the same units as the width and height
+    fig.update_layout(width=fig_width, height=(
+        point_size*max(bin_counter.values())+200))
+    fig.update_yaxes(
+        showticklabels=False,  # Turn off y-axis labels
+        ticks='',               # Remove the ticks
+        title=""
+    )
+    return fig
+
+
+df = px.data.iris()  # iris is a pandas DataFrame
+fig = swarm(df["sepal_length"], "Sepal length distribution from 150 iris samples")
+# The iris data set entries are rounded so there are no collisions.
+# a more interesting test case for collision avoidance is:
+# fig = swarm(pd.Series([1, 1.5, 1.78, 1.79, 1.85, 2,
+#            2, 2, 2, 3, 3, 2.05, 2.1, 2.2, 2.5, 12]))
+fig.show()
+```
+
+## Scatter and line plots with go.Scatter
+
+If Plotly Express does not provide a good starting point, it is possible to use [the more generic `go.Scatter` class from `plotly.graph_objects`](/python/graph-objects/). Whereas `plotly.express` has two functions `scatter` and `line`, `go.Scatter` can be used both for plotting points (makers) or lines, depending on the value of `mode`. The different options of `go.Scatter` are documented in its [reference page](https://plotly.com/python/reference/scatter/).
+
+#### Simple Scatter Plot
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+N = 1000
+t = np.linspace(0, 10, 100)
+y = np.sin(t)
+
+fig = go.Figure(data=go.Scatter(x=t, y=y, mode='markers'))
+
+fig.show()
+```
+
+#### Line and Scatter Plots
+
+Use `mode` argument to choose between markers, lines, or a combination of both. For more options about line plots, see also the [line charts notebook](https://plotly.com/python/line-charts/) and the [filled area plots notebook](https://plotly.com/python/filled-area-plots/).
+
+```python
+import plotly.graph_objects as go
+
+# Create random data with numpy
+import numpy as np
+np.random.seed(1)
+
+N = 100
+random_x = np.linspace(0, 1, N)
+random_y0 = np.random.randn(N) + 5
+random_y1 = np.random.randn(N)
+random_y2 = np.random.randn(N) - 5
+
+fig = go.Figure()
+
+# Add traces
+fig.add_trace(go.Scatter(x=random_x, y=random_y0,
+                    mode='markers',
+                    name='markers'))
+fig.add_trace(go.Scatter(x=random_x, y=random_y1,
+                    mode='lines+markers',
+                    name='lines+markers'))
+fig.add_trace(go.Scatter(x=random_x, y=random_y2,
+                    mode='lines',
+                    name='lines'))
+
+fig.show()
+```
+
+#### Bubble Scatter Plots
+
+In [bubble charts](https://en.wikipedia.org/wiki/Bubble_chart), a third dimension of the data is shown through the size of markers. For more examples, see the [bubble chart notebook](https://plotly.com/python/bubble-charts/)
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatter(
+    x=[1, 2, 3, 4],
+    y=[10, 11, 12, 13],
+    mode='markers',
+    marker=dict(size=[40, 60, 80, 100],
+                color=[0, 1, 2, 3])
+))
+
+fig.show()
+```
+
+#### Style Scatter Plots
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+
+t = np.linspace(0, 10, 100)
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=t, y=np.sin(t),
+    name='sin',
+    mode='markers',
+    marker_color='rgba(152, 0, 0, .8)'
+))
+
+fig.add_trace(go.Scatter(
+    x=t, y=np.cos(t),
+    name='cos',
+    marker_color='rgba(255, 182, 193, .9)'
+))
+
+# Set options common to all traces with fig.update_traces
+fig.update_traces(mode='markers', marker_line_width=2, marker_size=10)
+fig.update_layout(title=dict(text='Styled Scatter'),
+                  yaxis_zeroline=False, xaxis_zeroline=False)
+
+
+fig.show()
+```
+
+#### Data Labels on Hover
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+data= pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/2014_usa_states.csv")
+
+fig = go.Figure(data=go.Scatter(x=data['Postal'],
+                                y=data['Population'],
+                                mode='markers',
+                                marker_color=data['Population'],
+                                text=data['State'])) # hover text goes here
+
+fig.update_layout(title=dict(text='Population of USA States'))
+fig.show()
+
+```
+
+#### Scatter with a Color Dimension
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+fig = go.Figure(data=go.Scatter(
+    y = np.random.randn(500),
+    mode='markers',
+    marker=dict(
+        size=16,
+        color=np.random.randn(500), #set color equal to a variable
+        colorscale='Viridis', # one of plotly colorscales
+        showscale=True
+    )
+))
+
+fig.show()
+```
+
+#### Trace Zorder
+
+*New in 5.21*
+
+For many trace types, including `go.Scatter`, you can define the order traces are drawn in by setting a `zorder`. Traces with a higher `zorder` appear at the front, with traces with a lower `zorder` at the back. In this example, we give our trace for 'France' the highest `zorder`, meaning it is drawn in front of the other two traces:
+
+```python
+import plotly.graph_objects as go
+import plotly.data as data
+
+df = data.gapminder()
+
+df_europe = df[df['continent'] == 'Europe']
+
+trace1 = go.Scatter(x=df_europe[df_europe['country'] == 'France']['year'],
+                    y=df_europe[df_europe['country'] == 'France']['lifeExp'],
+                    mode='lines+markers',
+                    zorder=3,
+                    name='France',
+                    marker=dict(size=15))
+
+trace2 = go.Scatter(x=df_europe[df_europe['country'] == 'Germany']['year'],
+                    y=df_europe[df_europe['country'] == 'Germany']['lifeExp'],
+                    mode='lines+markers',
+                    zorder=1,
+                    name='Germany',
+                    marker=dict(size=15))
+
+trace3 = go.Scatter(x=df_europe[df_europe['country'] == 'Spain']['year'],
+                    y=df_europe[df_europe['country'] == 'Spain']['lifeExp'],
+                    mode='lines+markers',
+                    zorder=2,
+                    name='Spain',
+                    marker=dict(size=15))
+
+layout = go.Layout(title=dict(text='Life Expectancy in Europe Over Time'))
+
+fig = go.Figure(data=[trace1, trace2, trace3], layout=layout)
+
+fig.show()
+```
+
+#### Large Data Sets
+
+Now in Plotly you can implement WebGL with `Scattergl()` in place of `Scatter()` <br>
+for increased speed, improved interactivity, and the ability to plot even more data!
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+N = 100000
+fig = go.Figure(data=go.Scattergl(
+    x = np.random.randn(N),
+    y = np.random.randn(N),
+    mode='markers',
+    marker=dict(
+        color=np.random.randn(N),
+        colorscale='Viridis',
+        line_width=1
+    )
+))
+
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+N = 100000
+r = np.random.uniform(0, 1, N)
+theta = np.random.uniform(0, 2*np.pi, N)
+
+fig = go.Figure(data=go.Scattergl(
+    x = r * np.cos(theta), # non-uniform distribution
+    y = r * np.sin(theta), # zoom to see more points at the center
+    mode='markers',
+    marker=dict(
+        color=np.random.randn(N),
+        colorscale='Viridis',
+        line_width=1
+    )
+))
+
+fig.show()
+```
+
+### Reference
+
+See [function reference for `px.scatter()`](https://plotly.com/python-api-reference/generated/plotly.express.scatter) or https://plotly.com/python/reference/scatter/ or https://plotly.com/python/reference/scattergl/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/line-charts.md plotly-7.1.0+dfsg1/doc/python/line-charts.md
--- plotly-5.20.0+dfsg/doc/python/line-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/line-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,525 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make line charts in Python with Plotly. Examples on creating
+      and styling line charts in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Line Charts
+    order: 2
+    page_type: example_index
+    permalink: python/line-charts/
+    thumbnail: thumbnail/line-plot.jpg
+---
+
+### Line Plots with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). With `px.line`, each data point is represented as a vertex (which location is given by the `x` and `y` columns) of a **polyline mark** in 2D space.
+
+For more examples of line plots, see the [line and scatter notebook](https://plotly.com/python/line-and-scatter/).
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("country=='Canada'")
+fig = px.line(df, x="year", y="lifeExp", title='Life expectancy in Canada')
+fig.show()
+```
+
+### Line Plots with column encoding color
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent=='Oceania'")
+fig = px.line(df, x="year", y="lifeExp", color='country')
+fig.show()
+```
+
+### Line charts in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true tags=[]
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'line-charts', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Data Order in Line Charts
+
+Plotly line charts are implemented as [connected scatterplots](https://www.data-to-viz.com/graph/connectedscatter.html) (see below), meaning that the points are plotted and connected with lines **in the order they are provided, with no automatic reordering**.
+
+This makes it possible to make charts like the one below, but also means that it may be required to explicitly sort data before passing it to Plotly to avoid lines moving "backwards" across the chart.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame(dict(
+    x = [1, 3, 2, 4],
+    y = [1, 2, 3, 4]
+))
+fig = px.line(df, x="x", y="y", title="Unsorted Input")
+fig.show()
+
+df = df.sort_values(by="x")
+fig = px.line(df, x="x", y="y", title="Sorted Input")
+fig.show()
+```
+
+### Connected Scatterplots
+
+In a connected scatterplot, two continuous variables are plotted against each other, with a line connecting them in some meaningful order, usually a time variable. In the plot below, we show the "trajectory" of a pair of countries through a space defined by GDP per Capita and Life Expectancy.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("country in ['Canada', 'Botswana']")
+
+fig = px.line(df, x="lifeExp", y="gdpPercap", color="country", text="year")
+fig.update_traces(textposition="bottom right")
+fig.show()
+```
+
+### Line charts with markers
+
+The `markers` argument can be set to `True` to show markers on lines.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.line(df, x='year', y='lifeExp', color='country', markers=True)
+fig.show()
+```
+
+The `symbol` argument can be used to map a data field to the marker symbol. A [wide variety of symbols](https://plotly.com/python/marker-style/) are available.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("continent == 'Oceania'")
+fig = px.line(df, x='year', y='lifeExp', color='country', symbol="country")
+fig.show()
+```
+
+### Line plots on Date axes
+
+Line plots can be made on using any type of cartesian axis, including [linear](https://plotly.com/python/axes/), [logarithmic](https://plotly.com/python/log-plot/), [categorical](https://plotly.com/python/categorical-axes/) or date axes. Line plots on date axes are often called [time-series charts](https://plotly.com/python/time-series/).
+
+Plotly auto-sets the axis type to a date format when the corresponding data are either ISO-formatted date strings or if they're a [date pandas column](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html) or [datetime NumPy array](https://docs.scipy.org/doc/numpy/reference/arrays.datetime.html).
+
+```python
+import plotly.express as px
+
+df = px.data.stocks()
+fig = px.line(df, x='date', y="GOOG")
+fig.show()
+```
+
+### Sparklines with Plotly Express
+
+Sparklines are scatter plots inside subplots, with gridlines, axis lines, and ticks removed.
+
+```python
+import plotly.express as px
+df = px.data.stocks(indexed=True)
+fig = px.line(df, facet_row="company", facet_row_spacing=0.01, height=200, width=200)
+
+# hide and lock down axes
+fig.update_xaxes(visible=False, fixedrange=True)
+fig.update_yaxes(visible=False, fixedrange=True)
+
+# remove facet/subplot labels
+fig.update_layout(annotations=[], overwrite=True)
+
+# strip down the rest of the plot
+fig.update_layout(
+    showlegend=False,
+    plot_bgcolor="white",
+    margin=dict(t=10,l=10,b=10,r=10)
+)
+
+# disable the modebar for such a small plot
+fig.show(config=dict(displayModeBar=False))
+```
+
+### Line Plot with go.Scatter
+
+If Plotly Express does not provide a good starting point, it is possible to use [the more generic `go.Scatter` class from `plotly.graph_objects`](/python/graph-objects/). Whereas `plotly.express` has two functions `scatter` and `line`, `go.Scatter` can be used both for plotting points (makers) or lines, depending on the value of `mode`. The different options of `go.Scatter` are documented in its [reference page](https://plotly.com/python/reference/scatter/).
+
+#### Simple Line Plot
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x = np.arange(10)
+
+fig = go.Figure(data=go.Scatter(x=x, y=x**2))
+fig.show()
+```
+
+#### Line Plot Modes
+
+```python
+import plotly.graph_objects as go
+
+# Create random data with numpy
+import numpy as np
+np.random.seed(1)
+
+N = 100
+random_x = np.linspace(0, 1, N)
+random_y0 = np.random.randn(N) + 5
+random_y1 = np.random.randn(N)
+random_y2 = np.random.randn(N) - 5
+
+# Create traces
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=random_x, y=random_y0,
+                    mode='lines',
+                    name='lines'))
+fig.add_trace(go.Scatter(x=random_x, y=random_y1,
+                    mode='lines+markers',
+                    name='lines+markers'))
+fig.add_trace(go.Scatter(x=random_x, y=random_y2,
+                    mode='markers', name='markers'))
+
+fig.show()
+```
+
+#### Style Line Plots
+
+This example styles the color and dash of the traces, adds trace names,
+modifies line width, and adds plot and axes titles.
+
+```python
+import plotly.graph_objects as go
+
+# Add data
+month = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
+         'August', 'September', 'October', 'November', 'December']
+high_2000 = [32.5, 37.6, 49.9, 53.0, 69.1, 75.4, 76.5, 76.6, 70.7, 60.6, 45.1, 29.3]
+low_2000 = [13.8, 22.3, 32.5, 37.2, 49.9, 56.1, 57.7, 58.3, 51.2, 42.8, 31.6, 15.9]
+high_2007 = [36.5, 26.6, 43.6, 52.3, 71.5, 81.4, 80.5, 82.2, 76.0, 67.3, 46.1, 35.0]
+low_2007 = [23.6, 14.0, 27.0, 36.8, 47.6, 57.7, 58.9, 61.2, 53.3, 48.5, 31.0, 23.6]
+high_2014 = [28.8, 28.5, 37.0, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9]
+low_2014 = [12.7, 14.3, 18.6, 35.5, 49.9, 58.0, 60.0, 58.6, 51.7, 45.2, 32.2, 29.1]
+
+fig = go.Figure()
+# Create and style traces
+fig.add_trace(go.Scatter(x=month, y=high_2014, name='High 2014',
+                         line=dict(color='firebrick', width=4)))
+fig.add_trace(go.Scatter(x=month, y=low_2014, name = 'Low 2014',
+                         line=dict(color='royalblue', width=4)))
+fig.add_trace(go.Scatter(x=month, y=high_2007, name='High 2007',
+                         line=dict(color='firebrick', width=4,
+                              dash='dash') # dash options include 'dash', 'dot', and 'dashdot'
+))
+fig.add_trace(go.Scatter(x=month, y=low_2007, name='Low 2007',
+                         line = dict(color='royalblue', width=4, dash='dash')))
+fig.add_trace(go.Scatter(x=month, y=high_2000, name='High 2000',
+                         line = dict(color='firebrick', width=4, dash='dot')))
+fig.add_trace(go.Scatter(x=month, y=low_2000, name='Low 2000',
+                         line=dict(color='royalblue', width=4, dash='dot')))
+
+# Edit the layout
+fig.update_layout(
+        title=dict(
+            text='Average High and Low Temperatures in New York'
+        ),
+        xaxis=dict(
+            title=dict(
+                text='Month'
+            )
+        ),
+        yaxis=dict(
+            title=dict(
+                text='Temperature (degrees F)'
+            )
+        ),
+)
+
+
+fig.show()
+```
+
+#### Connect Data Gaps
+
+[connectgaps](https://plotly.com/python/reference/scatter/#scatter-connectgaps) determines if missing values in the provided data are shown as a gap in the graph or not. In [this tutorial](https://plotly.com/python/filled-area-tile-maps/#multiple-filled-areas-with-a-scattermap-trace), we showed how to take benefit of this feature and illustrate multiple areas on a tile map.
+
+```python
+import plotly.graph_objects as go
+
+x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=x,
+    y=[10, 20, None, 15, 10, 5, 15, None, 20, 10, 10, 15, 25, 20, 10],
+    name = '<b>No</b> Gaps', # Style name/legend entry with html tags
+    connectgaps=True # override default to connect the gaps
+))
+fig.add_trace(go.Scatter(
+    x=x,
+    y=[5, 15, None, 10, 5, 0, 10, None, 15, 5, 5, 10, 20, 15, 5],
+    name='Gaps',
+))
+
+fig.show()
+```
+
+#### Interpolation with Line Plots
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x = np.array([1, 2, 3, 4, 5])
+y = np.array([1, 3, 2, 3, 1])
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=x, y=y, name="linear",
+                    line_shape='linear'))
+fig.add_trace(go.Scatter(x=x, y=y + 5, name="spline",
+                    text=["tweak line smoothness<br>with 'smoothing' in line object"],
+                    hoverinfo='text+name',
+                    line_shape='spline'))
+fig.add_trace(go.Scatter(x=x, y=y + 10, name="vhv",
+                    line_shape='vhv'))
+fig.add_trace(go.Scatter(x=x, y=y + 15, name="hvh",
+                    line_shape='hvh'))
+fig.add_trace(go.Scatter(x=x, y=y + 20, name="vh",
+                    line_shape='vh'))
+fig.add_trace(go.Scatter(x=x, y=y + 25, name="hv",
+                    line_shape='hv'))
+
+fig.update_traces(hoverinfo='text+name', mode='lines+markers')
+fig.update_layout(legend=dict(y=0.5, traceorder='reversed', font_size=16))
+
+fig.show()
+```
+
+#### Label Lines with Annotations
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+title = 'Main Source for News'
+labels = ['Television', 'Newspaper', 'Internet', 'Radio']
+colors = ['rgb(67,67,67)', 'rgb(115,115,115)', 'rgb(49,130,189)', 'rgb(189,189,189)']
+
+mode_size = [8, 8, 12, 8]
+line_size = [2, 2, 4, 2]
+
+x_data = np.vstack((np.arange(2001, 2014),)*4)
+
+y_data = np.array([
+    [74, 82, 80, 74, 73, 72, 74, 70, 70, 66, 66, 69],
+    [45, 42, 50, 46, 36, 36, 34, 35, 32, 31, 31, 28],
+    [13, 14, 20, 24, 20, 24, 24, 40, 35, 41, 43, 50],
+    [18, 21, 18, 21, 16, 14, 13, 18, 17, 16, 19, 23],
+])
+
+fig = go.Figure()
+
+for i in range(0, 4):
+    fig.add_trace(go.Scatter(x=x_data[i], y=y_data[i], mode='lines',
+        name=labels[i],
+        line=dict(color=colors[i], width=line_size[i]),
+        connectgaps=True,
+    ))
+
+    # endpoints
+    fig.add_trace(go.Scatter(
+        x=[x_data[i][0], x_data[i][-1]],
+        y=[y_data[i][0], y_data[i][-1]],
+        mode='markers',
+        marker=dict(color=colors[i], size=mode_size[i])
+    ))
+
+fig.update_layout(
+    xaxis=dict(
+        showline=True,
+        showgrid=False,
+        showticklabels=True,
+        linecolor='rgb(204, 204, 204)',
+        linewidth=2,
+        ticks='outside',
+        tickfont=dict(
+            family='Arial',
+            size=12,
+            color='rgb(82, 82, 82)',
+        ),
+    ),
+    yaxis=dict(
+        showgrid=False,
+        zeroline=False,
+        showline=False,
+        showticklabels=False,
+    ),
+    autosize=False,
+    margin=dict(
+        autoexpand=False,
+        l=100,
+        r=20,
+        t=110,
+    ),
+    showlegend=False,
+    plot_bgcolor='white'
+)
+
+annotations = []
+
+# Adding labels
+for y_trace, label, color in zip(y_data, labels, colors):
+    # labeling the left_side of the plot
+    annotations.append(dict(xref='paper', x=0.05, y=y_trace[0],
+                                  xanchor='right', yanchor='middle',
+                                  text=label + ' {}%'.format(y_trace[0]),
+                                  font=dict(family='Arial',
+                                            size=16),
+                                  showarrow=False))
+    # labeling the right_side of the plot
+    annotations.append(dict(xref='paper', x=0.95, y=y_trace[11],
+                                  xanchor='left', yanchor='middle',
+                                  text='{}%'.format(y_trace[11]),
+                                  font=dict(family='Arial',
+                                            size=16),
+                                  showarrow=False))
+# Title
+annotations.append(dict(xref='paper', yref='paper', x=0.0, y=1.05,
+                              xanchor='left', yanchor='bottom',
+                              text='Main Source for News',
+                              font=dict(family='Arial',
+                                        size=30,
+                                        color='rgb(37,37,37)'),
+                              showarrow=False))
+# Source
+annotations.append(dict(xref='paper', yref='paper', x=0.5, y=-0.1,
+                              xanchor='center', yanchor='top',
+                              text='Source: PewResearch Center & ' +
+                                   'Storytelling with data',
+                              font=dict(family='Arial',
+                                        size=12,
+                                        color='rgb(150,150,150)'),
+                              showarrow=False))
+
+fig.update_layout(annotations=annotations)
+
+fig.show()
+```
+
+#### Filled Lines
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+
+
+x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+x_rev = x[::-1]
+
+# Line 1
+y1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+y1_upper = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
+y1_lower = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+y1_lower = y1_lower[::-1]
+
+# Line 2
+y2 = [5, 2.5, 5, 7.5, 5, 2.5, 7.5, 4.5, 5.5, 5]
+y2_upper = [5.5, 3, 5.5, 8, 6, 3, 8, 5, 6, 5.5]
+y2_lower = [4.5, 2, 4.4, 7, 4, 2, 7, 4, 5, 4.75]
+y2_lower = y2_lower[::-1]
+
+# Line 3
+y3 = [10, 8, 6, 4, 2, 0, 2, 4, 2, 0]
+y3_upper = [11, 9, 7, 5, 3, 1, 3, 5, 3, 1]
+y3_lower = [9, 7, 5, 3, 1, -.5, 1, 3, 1, -1]
+y3_lower = y3_lower[::-1]
+
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=x+x_rev,
+    y=y1_upper+y1_lower,
+    fill='toself',
+    fillcolor='rgba(0,100,80,0.2)',
+    line_color='rgba(255,255,255,0)',
+    showlegend=False,
+    name='Fair',
+))
+fig.add_trace(go.Scatter(
+    x=x+x_rev,
+    y=y2_upper+y2_lower,
+    fill='toself',
+    fillcolor='rgba(0,176,246,0.2)',
+    line_color='rgba(255,255,255,0)',
+    name='Premium',
+    showlegend=False,
+))
+fig.add_trace(go.Scatter(
+    x=x+x_rev,
+    y=y3_upper+y3_lower,
+    fill='toself',
+    fillcolor='rgba(231,107,243,0.2)',
+    line_color='rgba(255,255,255,0)',
+    showlegend=False,
+    name='Ideal',
+))
+fig.add_trace(go.Scatter(
+    x=x, y=y1,
+    line_color='rgb(0,100,80)',
+    name='Fair',
+))
+fig.add_trace(go.Scatter(
+    x=x, y=y2,
+    line_color='rgb(0,176,246)',
+    name='Premium',
+))
+fig.add_trace(go.Scatter(
+    x=x, y=y3,
+    line_color='rgb(231,107,243)',
+    name='Ideal',
+))
+
+fig.update_traces(mode='lines')
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.line()`](https://plotly.com/python-api-reference/generated/plotly.express.line) or https://plotly.com/python/reference/scatter/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/linear-fits.md plotly-7.1.0+dfsg1/doc/python/linear-fits.md
--- plotly-5.20.0+dfsg/doc/python/linear-fits.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/linear-fits.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,226 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: Add linear Ordinary Least Squares (OLS) regression trendlines or
+      non-linear Locally Weighted Scatterplot Smoothing (LOWESS) trendlines to scatterplots
+      in Python. Options for moving averages (rolling means) as well as exponentially-weighted
+      and expanding functions.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Linear and Non-Linear Trendlines
+    order: 12
+    page_type: u-guide
+    permalink: python/linear-fits/
+    thumbnail: thumbnail/linear_fit.jpg
+---
+
+### Linear fit trendlines with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Plotly Express allows you to add [Ordinary Least Squares](https://en.wikipedia.org/wiki/Ordinary_least_squares) regression trendline to scatterplots with the `trendline` argument. In order to do so, you will need to [install `statsmodels` and its dependencies](https://www.statsmodels.org/stable/install.html). Hovering over the trendline will show the equation of the line and its R-squared value.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", trendline="ols")
+fig.show()
+```
+
+### Fitting multiple lines and retrieving the model parameters
+
+Plotly Express will fit a trendline per trace, and allows you to access the underlying model parameters for all the models.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", facet_col="smoker", color="sex", trendline="ols")
+fig.show()
+
+results = px.get_trendline_results(fig)
+print(results)
+
+results.query("sex == 'Male' and smoker == 'Yes'").px_fit_results.iloc[0].summary()
+```
+
+### Displaying a single trendline with multiple traces
+
+_new in v5.2_
+
+To display a single trendline using the entire dataset, set the `trendline_scope` argument to `"overall"`. The same trendline will be overlaid on all facets and animation frames. The trendline color can be overridden with `trendline_color_override`.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", symbol="smoker", color="sex", trendline="ols", trendline_scope="overall")
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", facet_col="smoker", color="sex",
+                 trendline="ols", trendline_scope="overall", trendline_color_override="black")
+fig.show()
+```
+
+### OLS Parameters
+
+_new in v5.2_
+
+OLS trendlines can be fit with log transformations to both X or Y data using the `trendline_options` argument, independently of whether or not the plot has [logarithmic axes](https://plotly.com/python/log-plot/).
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder(year=2007)
+fig = px.scatter(df, x="gdpPercap", y="lifeExp",
+                 trendline="ols", trendline_options=dict(log_x=True),
+                 title="Log-transformed fit on linear axes")
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder(year=2007)
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", log_x=True,
+                 trendline="ols", trendline_options=dict(log_x=True),
+                 title="Log-scaled X axis and log-transformed fit")
+fig.show()
+```
+
+### Locally Weighted Scatterplot Smoothing (LOWESS)
+
+Plotly Express also supports non-linear [LOWESS](https://en.wikipedia.org/wiki/Local_regression) trendlines. In order use this feature, you will need to [install `statsmodels` and its dependencies](https://www.statsmodels.org/stable/install.html).
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="lowess")
+fig.show()
+```
+
+_new in v5.2_
+
+The level of smoothing can be controlled via the `frac` trendline option, which indicates the fraction of the data that the LOWESS smoother should include. The default is a fairly smooth line with `frac=0.6666` and lowering this fraction will give a line that more closely follows the data.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="lowess", trendline_options=dict(frac=0.1))
+fig.show()
+```
+
+### Moving Averages
+
+_new in v5.2_
+
+Plotly Express can leverage Pandas' [`rolling`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rolling.html), [`ewm`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.ewm.html) and [`expanding`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.expanding.html) functions in trendlines as well, for example to display moving averages. Values passed to `trendline_options` are passed directly to the underlying Pandas function (with the exception of the `function` and `function_options` keys, see below).
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="rolling", trendline_options=dict(window=5),
+                title="5-point moving average")
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="ewm", trendline_options=dict(halflife=2),
+                title="Exponentially-weighted moving average (halflife of 2 points)")
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="expanding", title="Expanding mean")
+fig.show()
+```
+
+### Other Functions
+
+The `rolling`, `expanding` and `ewm` trendlines support other functions than the default `mean`, enabling, for example, a moving-median trendline, or an expanding-max trendline.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="rolling", trendline_options=dict(function="median", window=5),
+                title="Rolling Median")
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="expanding", trendline_options=dict(function="max"),
+                title="Expanding Maximum")
+fig.show()
+```
+
+In some cases, it is necessary to pass options into the underying Pandas function, for example the `std` parameter must be provided if the `win_type` argument to `rolling` is `"gaussian"`. This is possible with the `function_args` trendline option.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(datetimes=True)
+fig = px.scatter(df, x="date", y="GOOG", trendline="rolling",
+                 trendline_options=dict(window=5, win_type="gaussian", function_args=dict(std=2)),
+                title="Rolling Mean with Gaussian Window")
+fig.show()
+```
+
+### Displaying only the trendlines
+
+In some cases, it may be desirable to show only the trendlines, by removing the scatter points.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True, datetimes=True)
+fig = px.scatter(df, trendline="rolling", trendline_options=dict(window=5),
+                title="5-point moving average")
+fig.data = [t for t in fig.data if t.mode == "lines"]
+fig.update_traces(showlegend=True) #trendlines have showlegend=False by default
+fig.show()
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/lines-on-maps.md plotly-7.1.0+dfsg1/doc/python/lines-on-maps.md
--- plotly-5.20.0+dfsg/doc/python/lines-on-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/lines-on-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,332 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to draw lines, great circles, and contours on maps in Python.
+    display_as: maps
+    language: python
+    layout: base
+    name: Lines on Maps
+    order: 7
+    page_type: u-guide
+    permalink: python/lines-on-maps/
+    thumbnail: thumbnail/flight-paths.jpg
+---
+
+Below we show how to create geographical line plots using either Plotly Express with `px.line_geo` function or the lower-level `go.Scattergeo` object.
+
+#### Base Map Configuration
+
+Plotly figures made with [Plotly Express](/python/plotly-express/) `px.scatter_geo`, `px.line_geo` or `px.choropleth` functions or containing `go.Choropleth` or `go.Scattergeo` [graph objects](/python/graph-objects/) have a `go.layout.Geo` object which can be used to [control the appearance of the base map](/python/map-configuration/) onto which data is plotted.
+
+## Lines on Maps with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.line_geo(df, locations="iso_alpha",
+                  color="continent", # "continent" is one of the columns of gapminder
+                  projection="orthographic")
+fig.show()
+```
+
+### Lines on Maps from GeoPandas
+
+Given a GeoPandas geo-data frame with `linestring` or `multilinestring` features, one can extra point data and use `px.line_geo()`.
+
+```python
+import plotly.express as px
+import geopandas as gpd
+import shapely.geometry
+import numpy as np
+import wget
+
+# download a zipped shapefile
+wget.download("https://plotly.github.io/datasets/ne_50m_rivers_lake_centerlines.zip")
+
+# open a zipped shapefile with the zip:// pseudo-protocol
+geo_df = gpd.read_file("zip://ne_50m_rivers_lake_centerlines.zip")
+
+lats = []
+lons = []
+names = []
+
+for feature, name in zip(geo_df.geometry, geo_df.name):
+    if isinstance(feature, shapely.geometry.linestring.LineString):
+        linestrings = [feature]
+    elif isinstance(feature, shapely.geometry.multilinestring.MultiLineString):
+        linestrings = feature.geoms
+    else:
+        continue
+    for linestring in linestrings:
+        x, y = linestring.xy
+        lats = np.append(lats, y)
+        lons = np.append(lons, x)
+        names = np.append(names, [name]*len(y))
+        lats = np.append(lats, None)
+        lons = np.append(lons, None)
+        names = np.append(names, None)
+
+fig = px.line_geo(lat=lats, lon=lons, hover_name=names)
+fig.show()
+```
+
+## Lines on Maps with plotly.graph_objects
+
+### US Flight Paths Map
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df_airports = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv')
+df_airports.head()
+
+df_flight_paths = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_aa_flight_paths.csv')
+df_flight_paths.head()
+
+fig = go.Figure()
+
+fig.add_trace(go.Scattergeo(
+    locationmode = 'USA-states',
+    lon = df_airports['long'],
+    lat = df_airports['lat'],
+    hoverinfo = 'text',
+    text = df_airports['airport'],
+    mode = 'markers',
+    marker = dict(
+        size = 2,
+        color = 'rgb(255, 0, 0)',
+        line = dict(
+            width = 3,
+            color = 'rgba(68, 68, 68, 0)'
+        )
+    )))
+
+flight_paths = []
+for i in range(len(df_flight_paths)):
+    fig.add_trace(
+        go.Scattergeo(
+            locationmode = 'USA-states',
+            lon = [df_flight_paths['start_lon'][i], df_flight_paths['end_lon'][i]],
+            lat = [df_flight_paths['start_lat'][i], df_flight_paths['end_lat'][i]],
+            mode = 'lines',
+            line = dict(width = 1,color = 'red'),
+            opacity = float(df_flight_paths['cnt'][i]) / float(df_flight_paths['cnt'].max()),
+        )
+    )
+
+fig.update_layout(
+    title_text = 'Feb. 2011 American Airline flight paths<br>(Hover for airport names)',
+    showlegend = False,
+    geo = dict(
+        scope = 'north america',
+        projection_type = 'azimuthal equal area',
+        showland = True,
+        landcolor = 'rgb(243, 243, 243)',
+        countrycolor = 'rgb(204, 204, 204)',
+    ),
+)
+
+fig.show()
+```
+### Performance improvement: put many lines in the same trace
+For very large amounts (>1000) of lines, performance may become critical. If you can relinquish setting individual line styles (e.g. opacity), you can put multiple paths into one trace. This makes the map render faster and reduces the script execution time and memory consumption.
+
+Use ```None``` between path coordinates to create a break in the otherwise connected paths.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df_airports = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv')
+df_airports.head()
+
+df_flight_paths = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_aa_flight_paths.csv')
+df_flight_paths.head()
+
+fig = go.Figure()
+
+fig.add_trace(go.Scattergeo(
+    locationmode = 'USA-states',
+    lon = df_airports['long'],
+    lat = df_airports['lat'],
+    hoverinfo = 'text',
+    text = df_airports['airport'],
+    mode = 'markers',
+    marker = dict(
+        size = 2,
+        color = 'rgb(255, 0, 0)',
+        line = dict(
+            width = 3,
+            color = 'rgba(68, 68, 68, 0)'
+        )
+    )))
+
+lons = []
+lats = []
+import numpy as np
+lons = np.empty(3 * len(df_flight_paths))
+lons[::3] = df_flight_paths['start_lon']
+lons[1::3] = df_flight_paths['end_lon']
+lons[2::3] = None
+lats = np.empty(3 * len(df_flight_paths))
+lats[::3] = df_flight_paths['start_lat']
+lats[1::3] = df_flight_paths['end_lat']
+lats[2::3] = None
+
+fig.add_trace(
+    go.Scattergeo(
+        locationmode = 'USA-states',
+        lon = lons,
+        lat = lats,
+        mode = 'lines',
+        line = dict(width = 1,color = 'red'),
+        opacity = 0.5
+    )
+)
+
+fig.update_layout(
+    title_text = 'Feb. 2011 American Airline flight paths<br>(Hover for airport names)',
+    showlegend = False,
+    geo = go.layout.Geo(
+        scope = 'north america',
+        projection_type = 'azimuthal equal area',
+        showland = True,
+        landcolor = 'rgb(243, 243, 243)',
+        countrycolor = 'rgb(204, 204, 204)',
+    ),
+    height=700,
+)
+
+fig.show()
+
+```
+
+
+### London to NYC Great Circle
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scattergeo(
+    lat = [40.7127, 51.5072],
+    lon = [-74.0059, 0.1275],
+    mode = 'lines',
+    line = dict(width = 2, color = 'blue'),
+))
+
+fig.update_layout(
+    title_text = 'London to NYC Great Circle',
+    showlegend = False,
+    geo = dict(
+        resolution = 50,
+        showland = True,
+        showlakes = True,
+        landcolor = 'rgb(204, 204, 204)',
+        countrycolor = 'rgb(204, 204, 204)',
+        lakecolor = 'rgb(255, 255, 255)',
+        projection_type = "equirectangular",
+        coastlinewidth = 2,
+        lataxis = dict(
+            range = [20, 60],
+            showgrid = True,
+            dtick = 10
+        ),
+        lonaxis = dict(
+            range = [-100, 20],
+            showgrid = True,
+            dtick = 20
+        ),
+    )
+)
+
+fig.show()
+```
+
+### Contour lines on globe
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/globe_contours.csv')
+df.head()
+
+
+scl = ['rgb(213,62,79)', 'rgb(244,109,67)', 'rgb(253,174,97)', \
+    'rgb(254,224,139)', 'rgb(255,255,191)', 'rgb(230,245,152)', \
+    'rgb(171,221,164)', 'rgb(102,194,165)', 'rgb(50,136,189)'
+]
+n_colors = len(scl)
+
+fig = go.Figure()
+
+for i, (lat, lon) in enumerate(zip(df.columns[::2], df.columns[1::2])):
+    fig.add_trace(go.Scattergeo(
+        lon = df[lon],
+        lat = df[lat],
+        mode = 'lines',
+        line = dict(width = 2, color = scl[i % n_colors]
+        )))
+
+fig.update_layout(
+    title_text = 'Contour lines over globe<br>(Click and drag to rotate)',
+    showlegend = False,
+    geo = dict(
+        showland = True,
+        showcountries = True,
+        showocean = True,
+        countrywidth = 0.5,
+        landcolor = 'rgb(230, 145, 56)',
+        lakecolor = 'rgb(0, 255, 255)',
+        oceancolor = 'rgb(0, 255, 255)',
+        projection = dict(
+            type = 'orthographic',
+            rotation = dict(
+                lon = -100,
+                lat = 40,
+                roll = 0
+            )
+        ),
+        lonaxis = dict(
+            showgrid = True,
+            gridcolor = 'rgb(102, 102, 102)',
+            gridwidth = 0.5
+        ),
+        lataxis = dict(
+            showgrid = True,
+            gridcolor = 'rgb(102, 102, 102)',
+            gridwidth = 0.5
+        )
+    )
+)
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(line_geo)`](https://plotly.com/python-api-reference/generated/plotly.express.line_geo) or https://plotly.com/python/reference/scattergeo/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/lines-on-tile-maps.md plotly-7.1.0+dfsg1/doc/python/lines-on-tile-maps.md
--- plotly-5.20.0+dfsg/doc/python/lines-on-tile-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/lines-on-tile-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,134 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to draw a line on tile-based maps in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Lines on Tile Maps
+    order: 3
+    page_type: example_index
+    permalink: python/lines-on-tile-maps/
+    redirect_from: python/lines-on-mapbox/
+    thumbnail: thumbnail/line_mapbox.jpg
+---
+
+### Lines on tile maps using Plotly Express
+
+To draw a line on a map, you either can use `px.line_map` in Plotly Express, or `go.Scattermap` in Plotly Graph Objects. Here's an example of drawing a line on a tile-based map using Plotly Express.
+
+```python
+import pandas as pd
+
+us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv")
+us_cities = us_cities.query("State in ['New York', 'Ohio']")
+
+import plotly.express as px
+
+fig = px.line_map(us_cities, lat="lat", lon="lon", color="State", zoom=3, height=300)
+
+fig.update_layout(map_style="open-street-map", map_zoom=4, map_center_lat = 41,
+    margin={"r":0,"t":0,"l":0,"b":0})
+
+fig.show()
+```
+
+### Lines on maps from GeoPandas
+
+Given a GeoPandas geo-data frame with `linestring` or `multilinestring` features, one can extra point data and use `px.line_map`.
+
+```python
+import plotly.express as px
+import geopandas as gpd
+import shapely.geometry
+import numpy as np
+import wget
+
+# download a zipped shapefile
+wget.download("https://plotly.github.io/datasets/ne_50m_rivers_lake_centerlines.zip")
+
+# open a zipped shapefile with the zip:// pseudo-protocol
+geo_df = gpd.read_file("zip://ne_50m_rivers_lake_centerlines.zip")
+
+lats = []
+lons = []
+names = []
+
+for feature, name in zip(geo_df.geometry, geo_df.name):
+    if isinstance(feature, shapely.geometry.linestring.LineString):
+        linestrings = [feature]
+    elif isinstance(feature, shapely.geometry.multilinestring.MultiLineString):
+        linestrings = feature.geoms
+    else:
+        continue
+    for linestring in linestrings:
+        x, y = linestring.xy
+        lats = np.append(lats, y)
+        lons = np.append(lons, x)
+        names = np.append(names, [name]*len(y))
+        lats = np.append(lats, None)
+        lons = np.append(lons, None)
+        names = np.append(names, None)
+
+fig = px.line_map(lat=lats, lon=lons, hover_name=names,
+                     map_style="open-street-map", zoom=1)
+fig.show()
+```
+
+### Lines on maps using `Scattermap` traces
+
+This example uses `go.Scattermap` and sets
+the [mode](https://plotly.com/python/reference/scattermap/#scattermap-mode) attribute to a combination of markers and line.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    mode = "markers+lines",
+    lon = [10, 20, 30],
+    lat = [10, 20,30],
+    marker = {'size': 10}))
+
+fig.add_trace(go.Scattermap(
+    mode = "markers+lines",
+    lon = [-50, -60,40],
+    lat = [30, 10, -20],
+    marker = {'size': 10}))
+
+fig.update_layout(
+    margin ={'l':0,'t':0,'b':0,'r':0},
+    map = {
+        'center': {'lon': 10, 'lat': 10},
+        'style': "open-street-map",
+        'center': {'lon': -20, 'lat': -20},
+        'zoom': 1})
+
+fig.show()
+```
+
+
+#### Reference
+
+See [function reference for `px.line_map`](https://plotly.com/python-api-reference/generated/plotly.express.line_map) or
+https://plotly.com/python/reference/scattermap/ for more information about the attributes available.
diff -Nru plotly-5.20.0+dfsg/doc/python/location-mode.md plotly-7.1.0+dfsg1/doc/python/location-mode.md
--- plotly-5.20.0+dfsg/doc/python/location-mode.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/location-mode.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,487 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.19
+  plotly:
+    description: How to specify country codes, names, and US states for outline-based
+      maps
+    display_as: maps
+    language: python
+    layout: base
+    name: Locations for Outline-based Maps
+    order: 14
+    page_type: example_index
+    permalink: python/outline-map-locations/
+    thumbnail: thumbnail/choropleth.jpg
+---
+
+# Locations for Outline-based Maps
+
+With outline-based maps, you can visualize data for specific regions using the `locations` and `locationmode` parameters.
+
+The following map types in `plotly.express` and `plotly.graph_objects` support these parameters:
+
+- `px.choropleth` - color regions based on data values
+- `px.scatter_geo` - show markers at geographic locations
+- `px.line_geo` - draw lines connecting geographic locations
+- `go.Choropleth` - choropleth trace for coloring regions
+- `go.Scattergeo` - geographic scatter/line trace for markers and lines
+
+The `locations` parameter accepts region identifiers and the `locationmode` parameter controls how those identifiers are interpreted:
+
+- `'ISO-3'` - three-letter ISO country codes (for example, `'USA'`, `'CAN'`, `'GBR'`)
+- `'USA-states'` - two-letter US state abbreviations (for example, `'CA'`, `'TX'`, `'NY'`)
+- `'country names'` - full country names (for example, `'United States'`)
+
+
+## locationmode='ISO-3'
+
+Set `locationmode='ISO-3'` to use three-letter ISO country codes in `locations`.
+
+```python
+import plotly.express as px
+
+fig = px.choropleth(
+    locations=['USA', 'CAN', 'MEX', 'BRA', 'RUS'],
+    locationmode='ISO-3',
+    color=[100, 85, 72, 95, 68],
+    color_continuous_scale='Viridis',
+    title='Choropleth with ISO-3 Country Codes'
+)
+fig.show()
+```
+
+## Supported ISO Codes
+
+The following ISO codes are supported when `locationmode='ISO-3'`:
+
+<table style="text-align: left; margin-left: 0; margin-right: auto;">
+<thead>
+<tr>
+<th style="text-align: left;">Name</th>
+<th style="text-align: left;">ISO Code</th>
+</tr>
+</thead>
+<tbody>
+<tr><td>Afghanistan</td><td>AFG</td></tr>
+<tr><td>Aksai Chin</td><td>XAC</td></tr>
+<tr><td>Åland Islands</td><td>ALA</td></tr>
+<tr><td>Albania</td><td>ALB</td></tr>
+<tr><td>Algeria</td><td>DZA</td></tr>
+<tr><td>American Samoa</td><td>ASM</td></tr>
+<tr><td>Andorra</td><td>AND</td></tr>
+<tr><td>Angola</td><td>AGO</td></tr>
+<tr><td>Anguilla</td><td>AIA</td></tr>
+<tr><td>Antarctica</td><td>ATA</td></tr>
+<tr><td>Antigua and Barbuda</td><td>ATG</td></tr>
+<tr><td>Argentina</td><td>ARG</td></tr>
+<tr><td>Armenia</td><td>ARM</td></tr>
+<tr><td>Aruba</td><td>ABW</td></tr>
+<tr><td>Arunachal Pradesh</td><td>XAP</td></tr>
+<tr><td>Australia</td><td>AUS</td></tr>
+<tr><td>Austria</td><td>AUT</td></tr>
+<tr><td>Azerbaijan</td><td>AZE</td></tr>
+<tr><td>Azores Islands</td><td>PRT</td></tr>
+<tr><td>Bahamas</td><td>BHS</td></tr>
+<tr><td>Bahrain</td><td>BHR</td></tr>
+<tr><td>Bangladesh</td><td>BGD</td></tr>
+<tr><td>Barbados</td><td>BRB</td></tr>
+<tr><td>Belarus</td><td>BLR</td></tr>
+<tr><td>Belgium</td><td>BEL</td></tr>
+<tr><td>Belize</td><td>BLZ</td></tr>
+<tr><td>Benin</td><td>BEN</td></tr>
+<tr><td>Bermuda</td><td>BMU</td></tr>
+<tr><td>Bhutan</td><td>BTN</td></tr>
+<tr><td>Bir Tawil</td><td>XBT</td></tr>
+<tr><td>Bolivia (Plurinational State of)</td><td>BOL</td></tr>
+<tr><td>Bonaire</td><td>BES</td></tr>
+<tr><td>Bosnia and Herzegovina</td><td>BIH</td></tr>
+<tr><td>Botswana</td><td>BWA</td></tr>
+<tr><td>Bouvet Island</td><td>BVT</td></tr>
+<tr><td>Brazil</td><td>BRA</td></tr>
+<tr><td>British Virgin Islands</td><td>VGB</td></tr>
+<tr><td>Brunei Darussalam</td><td>BRN</td></tr>
+<tr><td>Bulgaria</td><td>BGR</td></tr>
+<tr><td>Burkina Faso</td><td>BFA</td></tr>
+<tr><td>Burundi</td><td>BDI</td></tr>
+<tr><td>Cabo Verde</td><td>CPV</td></tr>
+<tr><td>Cambodia</td><td>KHM</td></tr>
+<tr><td>Cameroon</td><td>CMR</td></tr>
+<tr><td>Canada</td><td>CAN</td></tr>
+<tr><td>Canary Islands</td><td>ESP</td></tr>
+<tr><td>Cayman Islands</td><td>CYM</td></tr>
+<tr><td>Central African Republic</td><td>CAF</td></tr>
+<tr><td>Chad</td><td>TCD</td></tr>
+<tr><td>Chagos Archipelago</td><td>MUS</td></tr>
+<tr><td>Chile</td><td>CHL</td></tr>
+<tr><td>China</td><td>CHN</td></tr>
+<tr><td>Christmas Island</td><td>CXR</td></tr>
+<tr><td>Cocos (Keeling) Islands</td><td>CCK</td></tr>
+<tr><td>Colombia</td><td>COL</td></tr>
+<tr><td>Comoros</td><td>COM</td></tr>
+<tr><td>Congo</td><td>COG</td></tr>
+<tr><td>Cook Islands</td><td>COK</td></tr>
+<tr><td>Costa Rica</td><td>CRI</td></tr>
+<tr><td>Côte d'Ivoire</td><td>CIV</td></tr>
+<tr><td>Croatia</td><td>HRV</td></tr>
+<tr><td>Cuba</td><td>CUB</td></tr>
+<tr><td>Curaçao</td><td>CUW</td></tr>
+<tr><td>Cyprus</td><td>CYP</td></tr>
+<tr><td>Czechia</td><td>CZE</td></tr>
+<tr><td>Democratic People's Republic of Korea</td><td>PRK</td></tr>
+<tr><td>Democratic Republic of the Congo</td><td>COD</td></tr>
+<tr><td>Denmark</td><td>DNK</td></tr>
+<tr><td>Djibouti</td><td>DJI</td></tr>
+<tr><td>Dominica</td><td>DMA</td></tr>
+<tr><td>Dominican Republic</td><td>DOM</td></tr>
+<tr><td>Ecuador</td><td>ECU</td></tr>
+<tr><td>Egypt</td><td>EGY</td></tr>
+<tr><td>El Salvador</td><td>SLV</td></tr>
+<tr><td>Equatorial Guinea</td><td>GNQ</td></tr>
+<tr><td>Eritrea</td><td>ERI</td></tr>
+<tr><td>Estonia</td><td>EST</td></tr>
+<tr><td>Eswatini</td><td>SWZ</td></tr>
+<tr><td>Ethiopia</td><td>ETH</td></tr>
+<tr><td>Falkland Islands (Malvinas)</td><td>FLK</td></tr>
+<tr><td>Faroe Islands</td><td>FRO</td></tr>
+<tr><td>Fiji</td><td>FJI</td></tr>
+<tr><td>Finland</td><td>FIN</td></tr>
+<tr><td>France</td><td>FRA</td></tr>
+<tr><td>French Guiana</td><td>GUF</td></tr>
+<tr><td>French Polynesia</td><td>PYF</td></tr>
+<tr><td>French Southern Territories</td><td>ATF</td></tr>
+<tr><td>Gabon</td><td>GAB</td></tr>
+<tr><td>Galápagos Islands</td><td>ECU</td></tr>
+<tr><td>Gambia</td><td>GMB</td></tr>
+<tr><td>Gaza</td><td>PSE</td></tr>
+<tr><td>Georgia</td><td>GEO</td></tr>
+<tr><td>Germany</td><td>DEU</td></tr>
+<tr><td>Ghana</td><td>GHA</td></tr>
+<tr><td>Gibraltar</td><td>GIB</td></tr>
+<tr><td>Greece</td><td>GRC</td></tr>
+<tr><td>Greenland</td><td>GRL</td></tr>
+<tr><td>Grenada</td><td>GRD</td></tr>
+<tr><td>Guadeloupe</td><td>GLP</td></tr>
+<tr><td>Guam</td><td>GUM</td></tr>
+<tr><td>Guatemala</td><td>GTM</td></tr>
+<tr><td>Guernsey</td><td>GGY</td></tr>
+<tr><td>Guinea</td><td>GIN</td></tr>
+<tr><td>Guinea-Bissau</td><td>GNB</td></tr>
+<tr><td>Guyana</td><td>GUY</td></tr>
+<tr><td>Haiti</td><td>HTI</td></tr>
+<tr><td>Halaib Triangle</td><td>XHT</td></tr>
+<tr><td>Heard Island and McDonald Islands</td><td>HMD</td></tr>
+<tr><td>Honduras</td><td>HND</td></tr>
+<tr><td>Hong Kong</td><td>HKG</td></tr>
+<tr><td>Hungary</td><td>HUN</td></tr>
+<tr><td>Iceland</td><td>ISL</td></tr>
+<tr><td>Ilemi Triangle</td><td>XIT</td></tr>
+<tr><td>India</td><td>IND</td></tr>
+<tr><td>Indonesia</td><td>IDN</td></tr>
+<tr><td>Iran (Islamic Republic of)</td><td>IRN</td></tr>
+<tr><td>Iraq</td><td>IRQ</td></tr>
+<tr><td>Ireland</td><td>IRL</td></tr>
+<tr><td>Isle of Man</td><td>IMN</td></tr>
+<tr><td>Israel</td><td>ISR</td></tr>
+<tr><td>Italy</td><td>ITA</td></tr>
+<tr><td>Jamaica</td><td>JAM</td></tr>
+<tr><td>Jammu and Kashmir</td><td>XJK</td></tr>
+<tr><td>Japan</td><td>JPN</td></tr>
+<tr><td>Jersey</td><td>JEY</td></tr>
+<tr><td>Jordan</td><td>JOR</td></tr>
+<tr><td>Kazakhstan</td><td>KAZ</td></tr>
+<tr><td>Kenya</td><td>KEN</td></tr>
+<tr><td>Kingdom of the Netherlands</td><td>NLD</td></tr>
+<tr><td>Kiribati</td><td>KIR</td></tr>
+<tr><td>Kuwait</td><td>KWT</td></tr>
+<tr><td>Kyrgyzstan</td><td>KGZ</td></tr>
+<tr><td>Lao People's Democratic Republic</td><td>LAO</td></tr>
+<tr><td>Latvia</td><td>LVA</td></tr>
+<tr><td>Lebanon</td><td>LBN</td></tr>
+<tr><td>Lesotho</td><td>LSO</td></tr>
+<tr><td>Liberia</td><td>LBR</td></tr>
+<tr><td>Libya</td><td>LBY</td></tr>
+<tr><td>Liechtenstein</td><td>LIE</td></tr>
+<tr><td>Lithuania</td><td>LTU</td></tr>
+<tr><td>Luxembourg</td><td>LUX</td></tr>
+<tr><td>Macao</td><td>MAC</td></tr>
+<tr><td>Madagascar</td><td>MDG</td></tr>
+<tr><td>Madeira Island</td><td>PRT</td></tr>
+<tr><td>Malawi</td><td>MWI</td></tr>
+<tr><td>Malaysia</td><td>MYS</td></tr>
+<tr><td>Maldives</td><td>MDV</td></tr>
+<tr><td>Mali</td><td>MLI</td></tr>
+<tr><td>Malta</td><td>MLT</td></tr>
+<tr><td>Marshall Islands</td><td>MHL</td></tr>
+<tr><td>Martinique</td><td>MTQ</td></tr>
+<tr><td>Mauritania</td><td>MRT</td></tr>
+<tr><td>Mauritius</td><td>MUS</td></tr>
+<tr><td>Mayotte</td><td>MYT</td></tr>
+<tr><td>Mexico</td><td>MEX</td></tr>
+<tr><td>Micronesia (Federated States of)</td><td>FSM</td></tr>
+<tr><td>Monaco</td><td>MCO</td></tr>
+<tr><td>Mongolia</td><td>MNG</td></tr>
+<tr><td>Montenegro</td><td>MNE</td></tr>
+<tr><td>Montserrat</td><td>MSR</td></tr>
+<tr><td>Morocco</td><td>MAR</td></tr>
+<tr><td>Mozambique</td><td>MOZ</td></tr>
+<tr><td>Myanmar</td><td>MMR</td></tr>
+<tr><td>Namibia</td><td>NAM</td></tr>
+<tr><td>Nauru</td><td>NRU</td></tr>
+<tr><td>Nepal</td><td>NPL</td></tr>
+<tr><td>New Caledonia</td><td>NCL</td></tr>
+<tr><td>New Zealand</td><td>NZL</td></tr>
+<tr><td>Nicaragua</td><td>NIC</td></tr>
+<tr><td>Niger</td><td>NER</td></tr>
+<tr><td>Nigeria</td><td>NGA</td></tr>
+<tr><td>Niue</td><td>NIU</td></tr>
+<tr><td>Norfolk Island</td><td>NFK</td></tr>
+<tr><td>North Macedonia</td><td>MKD</td></tr>
+<tr><td>Northern Mariana Islands</td><td>MNP</td></tr>
+<tr><td>Norway</td><td>NOR</td></tr>
+<tr><td>Oman</td><td>OMN</td></tr>
+<tr><td>Pakistan</td><td>PAK</td></tr>
+<tr><td>Palau</td><td>PLW</td></tr>
+<tr><td>Panama</td><td>PAN</td></tr>
+<tr><td>Papua New Guinea</td><td>PNG</td></tr>
+<tr><td>Paraguay</td><td>PRY</td></tr>
+<tr><td>Peru</td><td>PER</td></tr>
+<tr><td>Philippines</td><td>PHL</td></tr>
+<tr><td>Pitcairn</td><td>PCN</td></tr>
+<tr><td>Poland</td><td>POL</td></tr>
+<tr><td>Portugal</td><td>PRT</td></tr>
+<tr><td>Puerto Rico</td><td>PRI</td></tr>
+<tr><td>Qatar</td><td>QAT</td></tr>
+<tr><td>Republic of Korea</td><td>KOR</td></tr>
+<tr><td>Republic of Moldova</td><td>MDA</td></tr>
+<tr><td>Réunion</td><td>REU</td></tr>
+<tr><td>Romania</td><td>ROU</td></tr>
+<tr><td>Russian Federation</td><td>RUS</td></tr>
+<tr><td>Rwanda</td><td>RWA</td></tr>
+<tr><td>Saba</td><td>BES</td></tr>
+<tr><td>Saint Barthélemy</td><td>BLM</td></tr>
+<tr><td>Saint Helena</td><td>SHN</td></tr>
+<tr><td>Saint Kitts and Nevis</td><td>KNA</td></tr>
+<tr><td>Saint Lucia</td><td>LCA</td></tr>
+<tr><td>Saint Martin</td><td>MAF</td></tr>
+<tr><td>Saint Pierre and Miquelon</td><td>SPM</td></tr>
+<tr><td>Saint Vincent and the Grenadines</td><td>VCT</td></tr>
+<tr><td>Samoa</td><td>WSM</td></tr>
+<tr><td>Sao Tome and Principe</td><td>STP</td></tr>
+<tr><td>Saudi Arabia</td><td>SAU</td></tr>
+<tr><td>Senegal</td><td>SEN</td></tr>
+<tr><td>Serbia</td><td>SRB</td></tr>
+<tr><td>Seychelles</td><td>SYC</td></tr>
+<tr><td>Sierra Leone</td><td>SLE</td></tr>
+<tr><td>Singapore</td><td>SGP</td></tr>
+<tr><td>Sint Eustatius</td><td>BES</td></tr>
+<tr><td>Sint Maarten</td><td>SXM</td></tr>
+<tr><td>Slovakia</td><td>SVK</td></tr>
+<tr><td>Slovenia</td><td>SVN</td></tr>
+<tr><td>Solomon Islands</td><td>SLB</td></tr>
+<tr><td>Somalia</td><td>SOM</td></tr>
+<tr><td>South Africa</td><td>ZAF</td></tr>
+<tr><td>South Georgia and the South Sandwich Islands</td><td>SGS</td></tr>
+<tr><td>South Sudan</td><td>SSD</td></tr>
+<tr><td>Spain</td><td>ESP</td></tr>
+<tr><td>Sri Lanka</td><td>LKA</td></tr>
+<tr><td>Sudan</td><td>SDN</td></tr>
+<tr><td>Suriname</td><td>SUR</td></tr>
+<tr><td>Svalbard and Jan Mayen Islands</td><td>SJM</td></tr>
+<tr><td>Sweden</td><td>SWE</td></tr>
+<tr><td>Switzerland</td><td>CHE</td></tr>
+<tr><td>Syrian Arab Republic</td><td>SYR</td></tr>
+<tr><td>Taiwan</td><td>TWN</td></tr>
+<tr><td>Tajikistan</td><td>TJK</td></tr>
+<tr><td>Thailand</td><td>THA</td></tr>
+<tr><td>Timor-Leste</td><td>TLS</td></tr>
+<tr><td>Togo</td><td>TGO</td></tr>
+<tr><td>Tokelau</td><td>TKL</td></tr>
+<tr><td>Tonga</td><td>TON</td></tr>
+<tr><td>Trinidad and Tobago</td><td>TTO</td></tr>
+<tr><td>Tunisia</td><td>TUN</td></tr>
+<tr><td>Türkiye</td><td>TUR</td></tr>
+<tr><td>Turkmenistan</td><td>TKM</td></tr>
+<tr><td>Turks and Caicos Islands</td><td>TCA</td></tr>
+<tr><td>Tuvalu</td><td>TUV</td></tr>
+<tr><td>Uganda</td><td>UGA</td></tr>
+<tr><td>Ukraine</td><td>UKR</td></tr>
+<tr><td>United Arab Emirates</td><td>ARE</td></tr>
+<tr><td>United Kingdom of Great Britain and Northern Ireland</td><td>GBR</td></tr>
+<tr><td>United Republic of Tanzania</td><td>TZA</td></tr>
+<tr><td>United States of America</td><td>USA</td></tr>
+<tr><td>United States Virgin Islands</td><td>VIR</td></tr>
+<tr><td>Uruguay</td><td>URY</td></tr>
+<tr><td>Uzbekistan</td><td>UZB</td></tr>
+<tr><td>Vanuatu</td><td>VUT</td></tr>
+<tr><td>Venezuela (Bolivarian Republic of)</td><td>VEN</td></tr>
+<tr><td>Viet Nam</td><td>VNM</td></tr>
+<tr><td>West Bank</td><td>PSE</td></tr>
+<tr><td>Western Sahara</td><td>ESH</td></tr>
+<tr><td>Yemen</td><td>YEM</td></tr>
+<tr><td>Zambia</td><td>ZMB</td></tr>
+<tr><td>Zimbabwe</td><td>ZWE</td></tr>
+</tbody>
+</table>
+
+
+## locationmode='USA-states'
+
+Set `locationmode='USA-states'` to use two-letter US state abbreviations in `locations`.
+
+```python
+import plotly.express as px
+
+fig = px.choropleth(
+    locations=['CA', 'TX', 'NY', 'FL', 'IL'],
+    locationmode='USA-states',
+    color=[95, 88, 92, 85, 78],
+    scope='usa',
+    color_continuous_scale='Reds',
+    title='USA States Choropleth'
+)
+fig.show()
+```
+
+*New in 6.7*
+
+You can also use full state names in `locations` when `locationmode='USA-states'`:
+
+```python
+import plotly.express as px
+
+fig = px.choropleth(
+    locations=['California', 'Texas', 'New York', 'Florida', 'Illinois'],
+    locationmode='USA-states',
+    color=[95, 88, 92, 85, 78],
+    scope='usa',
+    color_continuous_scale='Reds',
+    title='USA States Choropleth with State Names'
+)
+fig.show()
+```
+
+## Supported US State Codes
+
+The following state names and codes are supported when `locationmode='USA-states'`:
+
+<table style="text-align: left; margin-left: 0; margin-right: auto;">
+<thead>
+<tr>
+<th style="text-align: left;">State</th>
+<th style="text-align: left;">Code</th>
+</tr>
+</thead>
+<tbody>
+<tr><td>Alabama</td><td>AL</td></tr>
+<tr><td>Alaska</td><td>AK</td></tr>
+<tr><td>Arizona</td><td>AZ</td></tr>
+<tr><td>Arkansas</td><td>AR</td></tr>
+<tr><td>California</td><td>CA</td></tr>
+<tr><td>Colorado</td><td>CO</td></tr>
+<tr><td>Connecticut</td><td>CT</td></tr>
+<tr><td>Delaware</td><td>DE</td></tr>
+<tr><td>District of Columbia</td><td>DC</td></tr>
+<tr><td>Florida</td><td>FL</td></tr>
+<tr><td>Georgia</td><td>GA</td></tr>
+<tr><td>Hawaii</td><td>HI</td></tr>
+<tr><td>Idaho</td><td>ID</td></tr>
+<tr><td>Illinois</td><td>IL</td></tr>
+<tr><td>Indiana</td><td>IN</td></tr>
+<tr><td>Iowa</td><td>IA</td></tr>
+<tr><td>Kansas</td><td>KS</td></tr>
+<tr><td>Kentucky</td><td>KY</td></tr>
+<tr><td>Louisiana</td><td>LA</td></tr>
+<tr><td>Maine</td><td>ME</td></tr>
+<tr><td>Maryland</td><td>MD</td></tr>
+<tr><td>Massachusetts</td><td>MA</td></tr>
+<tr><td>Michigan</td><td>MI</td></tr>
+<tr><td>Minnesota</td><td>MN</td></tr>
+<tr><td>Mississippi</td><td>MS</td></tr>
+<tr><td>Missouri</td><td>MO</td></tr>
+<tr><td>Montana</td><td>MT</td></tr>
+<tr><td>Nebraska</td><td>NE</td></tr>
+<tr><td>Nevada</td><td>NV</td></tr>
+<tr><td>New Hampshire</td><td>NH</td></tr>
+<tr><td>New Jersey</td><td>NJ</td></tr>
+<tr><td>New Mexico</td><td>NM</td></tr>
+<tr><td>New York</td><td>NY</td></tr>
+<tr><td>North Carolina</td><td>NC</td></tr>
+<tr><td>North Dakota</td><td>ND</td></tr>
+<tr><td>Ohio</td><td>OH</td></tr>
+<tr><td>Oklahoma</td><td>OK</td></tr>
+<tr><td>Oregon</td><td>OR</td></tr>
+<tr><td>Pennsylvania</td><td>PA</td></tr>
+<tr><td>Rhode Island</td><td>RI</td></tr>
+<tr><td>South Carolina</td><td>SC</td></tr>
+<tr><td>South Dakota</td><td>SD</td></tr>
+<tr><td>Tennessee</td><td>TN</td></tr>
+<tr><td>Texas</td><td>TX</td></tr>
+<tr><td>Utah</td><td>UT</td></tr>
+<tr><td>Vermont</td><td>VT</td></tr>
+<tr><td>Virginia</td><td>VA</td></tr>
+<tr><td>Washington</td><td>WA</td></tr>
+<tr><td>West Virginia</td><td>WV</td></tr>
+<tr><td>Wisconsin</td><td>WI</td></tr>
+<tr><td>Wyoming</td><td>WY</td></tr>
+</tbody>
+</table>
+
+
+## locationmode='country names'
+
+Set `locationmode='country names'` to use full country names in `locations`.
+
+```python
+import plotly.express as px
+
+fig = px.choropleth(
+    locations=['United States', 'Canada', 'United Kingdom'],
+    locationmode='country names'
+)
+fig.show()
+```
+
+*Changed in 7.0*: country names are matched by a different library, which accepts more forms and rejects some names that matched by accident before. See [Changes in Version 7](/python/v7-migration/#Country-Names) for details. To get identical results across versions, use [`locationmode='ISO-3'`](#locationmode='ISO-3') with ISO codes for `locations`.
+
+## Using Different Data Types with `locations`
+
+Earlier examples demonstrated using the `locations` parameter with Python lists. The `locations` parameter also accepts column names from DataFrames, pandas Series, or other array-like objects.
+
+Here's an example that uses a column from the gapminder dataset with `locations`:
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year == 2007")
+
+fig = px.choropleth(
+    df,
+    locations='iso_alpha',
+    locationmode='ISO-3',
+    color='lifeExp',
+    hover_name='country',
+    color_continuous_scale='Viridis',
+    title='Life Expectancy by Country (2007)'
+)
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/log-plot.md plotly-7.1.0+dfsg1/doc/python/log-plot.md
--- plotly-5.20.0+dfsg/doc/python/log-plot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/log-plot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,151 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.12.4
+  plotly:
+    description: How to make Log plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Log Plots
+    order: 5
+    permalink: python/log-plot/
+    redirect_from: python/log-plots/
+    thumbnail: thumbnail/log.jpg
+---
+
+This page shows examples of how to configure [2-dimensional Cartesian axes](/python/figure-structure/#2d-cartesian-trace-types-and-subplots) to follow a logarithmic rather than linear progression. [Configuring gridlines, ticks, tick labels and axis titles](/python/axes/) on logarithmic axes is done the same was as with [linear axes](/python/axes/).
+
+### Logarithmic Axes with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+All of Plotly Express' 2-D Cartesian functions include the `log_x` and `log_y` keyword arguments, which can be set to `True` to set the corresponding axis to a logarithmic scale:
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", hover_name="country", log_x=True)
+fig.show()
+```
+
+Setting the range of a logarithmic axis with Plotly Express works the same was as with linear axes: using the `range_x` and `range_y` keywords. Note that you cannot set the range to include 0 or less.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", hover_name="country",
+                 log_x=True, range_x=[1,100000], range_y=[0,100])
+fig.show()
+```
+
+#### Adding minor ticks
+
+_new in 5.8_
+
+You can position and style minor ticks using `minor`. This takes a `dict` of properties to apply to minor ticks. See the [figure reference](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-minor) for full details on the accepted keys in this dict.
+
+In this example we set the tick length with `ticklen`, add the ticks on the inside with `ticks="inside"`, and turn grid lines on with `howgrid=True`.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", hover_name="country",
+                 log_x=True, range_x=[1,100000], range_y=[0,100])
+
+fig.update_xaxes(minor=dict(ticks="inside", ticklen=6, showgrid=True))
+
+fig.show()
+```
+
+#### Controlling Minor Log Labels
+
+*New in 6.3*
+
+You can control how minor log labels are displayed using the `minorloglabels` attribute. Set to `"complete"` to show complete digits, or `None` for no labels. By default, minor log labels use `"small digits"`, as shown in the previous example.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year == 2007")
+
+fig = px.scatter(
+    df, x="gdpPercap",
+    y="lifeExp",
+    hover_name="country",
+    log_x=True,
+    range_x=[1,100000],
+    range_y=[0,100]
+)
+
+fig.update_xaxes(
+    minor=dict(
+        ticks="inside",
+        ticklen=6,
+        showgrid=True
+    ),
+    minorloglabels="complete"
+)
+
+fig.show()
+```
+
+### Logarithmic Axes with Graph Objects
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Figure` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(mode="markers", x=df["gdpPercap"], y=df["lifeExp"] ))
+
+fig.update_xaxes(type="log")
+fig.show()
+```
+
+Setting the range of a logarithmic axis with `plotly.graph_objects` is *very different* than setting the range of linear axes: the range is set using the exponent rather than the actual value:
+
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(mode="markers", x=df["gdpPercap"], y=df["lifeExp"] ))
+
+fig.update_xaxes(type="log", range=[0,5]) # log range: 10^0=1, 10^5=100000
+fig.update_yaxes(range=[0,100]) # linear range
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(scatter)`](https://plotly.com/python-api-reference/generated/plotly.express.scatter) or https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-type for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/map-configuration.md plotly-7.1.0+dfsg1/doc/python/map-configuration.md
--- plotly-5.20.0+dfsg/doc/python/map-configuration.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/map-configuration.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,251 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to configure and style base maps for outline-based Geo Maps.
+    display_as: maps
+    language: python
+    layout: base
+    name: Map Configuration and Styling on Geo Maps
+    order: 12
+    page_type: u-guide
+    permalink: python/map-configuration/
+    thumbnail: thumbnail/county-level-choropleth.jpg
+---
+
+### Tile Maps vs Outline Maps
+
+Plotly supports two different kinds of maps:
+
+- **[Tile-based maps](https://en.wikipedia.org/wiki/Tiled_web_map)**
+
+If your figure is created with a `px.scatter_map`, `px.line_map`, `px.choropleth_map`, or `px.density_map` function or otherwise contains one or more traces of type `go.Scattermap`, `go.Choroplethmap`, or `go.Densitymap`, the `layout.map` object in your figure contains configuration information for the map itself.
+
+- **Outline-based maps**
+
+Geo maps are outline-based maps. If your figure is created with a `px.scatter_geo`, `px.line_geo` or `px.choropleth` function or otherwise contains one or more traces of type `go.Scattergeo` or `go.Choropleth`, the `layout.geo` object in your figure contains configuration information for the map itself.
+
+> This page documents **Geo outline-based maps**, and the [Tile Map Layers documentation](/python/tile-map-layers/) describes how to configure tile-based maps.
+
+**Note:** Plotly Express cannot create empty figures, so the examples below mostly create an "empty" map using `fig = go.Figure(go.Scattergeo())`. That said, every configuration option here is equally applicable to non-empty maps created with the Plotly Express `px.scatter_geo`, `px.line_geo` or `px.choropleth` functions.
+
+### Physical Base Maps
+
+Plotly Geo maps have a built-in base map layer composed of *physical* and *cultural* (i.e. administrative border) data.
+
+In **Plotly.py 6.3 and later**, the base map layer is created from the following sources:
+- [UN data](https://geoportal.un.org/arcgis/sharing/rest/content/items/d7caaff3ef4b4f7c82689b7c4694ad92/data) for country borders, coastlines, land, and oceans layers.
+- Natural Earth data for lakes, rivers, and subunits layers.
+
+In **earlier versions of Plotly.py**, the base map layer is based on Natural Earth data only. Plotly includes data from Natural Earth "as-is". This dataset draws boundaries of countries according to de facto status. See the [Natural Earth page for more details](https://www.naturalearthdata.com/downloads/50m-cultural-vectors/50m-admin-0-countries-2/).
+
+Various lines and area fills can be shown or hidden, and their color and line-widths specified. In the [default `plotly` template](/python/templates/), a map frame and physical features such as a coastal outline and filled land areas are shown, at a small-scale 1:110m resolution:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+Here is a map with all physical features enabled and styled, at a larger-scale 1:50m resolution:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(
+    resolution=50,
+    showcoastlines=True, coastlinecolor="RebeccaPurple",
+    showland=True, landcolor="LightGreen",
+    showocean=True, oceancolor="LightBlue",
+    showlakes=True, lakecolor="Blue",
+    showrivers=True, rivercolor="Blue"
+)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Disabling Base Maps
+
+In certain cases, such as large scale [choropleth maps](/python/choropleth-maps/), the default physical map can be distracting. In this case the `layout.geo.visible` attribute can be set to `False` to hide all base map attributes except those which are explicitly set to true. For example in the following map we hide all physical features except rivers and lakes, neither of which are shown by default:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(
+    visible=False,
+    resolution=50,
+    showlakes=True, lakecolor="Blue",
+    showrivers=True, rivercolor="Blue"
+)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+
+fig.show()
+```
+
+### Cultural Base Maps
+
+In addition to physical base map features, a "cultural" base map is included which is composed of country borders and selected sub-country borders such as states.
+
+In **Plotly.py 6.3 and later**, this base map is created from [UN data](https://geoportal.un.org/arcgis/sharing/rest/content/items/d7caaff3ef4b4f7c82689b7c4694ad92/data) for country borders, and Natural Earth data for sub-country borders.
+
+In **earlier versions of Plotly.py**, this base map is based on Natural Earth data only. Plotly includes data from Natural Earth "as-is". This dataset draws boundaries of countries according to defacto status. See the [Natural Earth page for more details](https://www.naturalearthdata.com/downloads/50m-cultural-vectors/50m-admin-0-countries-2/).
+
+**To create a map with your own cultural features** please refer to our [choropleth documentation](/python/choropleth-maps/).
+
+Here is a map with only cultural features enabled and styled, at a 1:50m resolution, which includes only country boundaries. See below for country sub-unit cultural base map features:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(
+    visible=False, resolution=50,
+    showcountries=True, countrycolor="RebeccaPurple"
+)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Map Projections
+
+Geo maps are drawn according to a given map [projection](https://en.wikipedia.org/wiki/Map_projection) that flattens the Earth's roughly-spherical surface into a 2-dimensional space. In the following examples, we show the `'orthographic'` and `'natural earth'` projections, two of the many projection types available. For a full list of available projection types, see the [layout.geo reference documentation](https://plotly.com/python/reference/layout/geo/#layout-geo-projection-type).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(projection_type="orthographic")
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(projection_type="natural earth")
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+Map projections can be rotated using the `layout.geo.projection.rotation` attribute, and maps can be translated using the `layout.geo.center` attributed, as well as truncated to a certain longitude and latitude range using the `layout.geo.lataxis.range` and `layout.geo.lonaxis.range`.
+
+The map below uses all of these attributes to demonstrate the types of effect this can yield:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(
+    center=dict(lon=-30, lat=-30),
+    projection_rotation=dict(lon=30, lat=30, roll=30),
+    lataxis_range=[-50,20], lonaxis_range=[0, 200]
+)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Automatic Zooming or Bounds Fitting
+
+The `layout.geo.fitbounds` attribute set to `locations` automatically sets the center and the latitude and longitude range according to the data being plotted. See the [choropleth maps](/python/choropleth-maps/) documentation for more information.
+
+*Changed in 7.0*: `fitbounds` defaults to `"locations"`, so a `geo` subplot fits its data without any configuration. Set `fitbounds=False` for the world view that earlier versions showed by default. Setting your own `center` or `projection.scale` also turns auto-fitting off.
+
+```python
+import plotly.express as px
+
+fig = px.line_geo(lat=[0,15,20,35], lon=[5,10,25,30])
+fig.update_geos(fitbounds="locations")
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Limiting the Zoom Range
+
+*New in 7.0*
+
+`projection.minscale` and `projection.maxscale` clamp how far a user can zoom the map in or out. The two attributes are multipliers of `projection.scale`, so `minscale=0.5` allows zooming out to half the initial view and `maxscale=4` allows zooming in to four times it.
+
+```python
+import plotly.express as px
+
+fig = px.line_geo(lat=[0,15,20,35], lon=[5,10,25,30])
+fig.update_geos(projection=dict(scale=1, minscale=0.5, maxscale=4))
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Named Map Scopes and Country Sub-Units
+
+In addition, the named "scope" of a map defines a sub-set of the earth's surface to draw. Each scope has a _default projection type, center and roll, as well as bounds_, and certain scopes contain country sub-unit cultural layers certain resolutions, such as `scope="north america"` at `resolution=50` which contains US state and Canadian province boundaries.
+
+The available scopes are: `'world'`, `'usa'`, `'europe'`, `'asia'`, `'africa'`, `'north america'`, `'south america'`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(
+    visible=False, resolution=50, scope="north america",
+    showcountries=True, countrycolor="Black",
+    showsubunits=True, subunitcolor="Blue"
+)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+The `"usa"` scope contains state boundaries at both resolutions, and uses the special `'albers usa'` projection which moves Alaska and Hawaii closer to the "lower 48 states" to reduce projection distortion and produce a more compact map.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(
+    visible=False, resolution=110, scope="usa",
+    showcountries=True, countrycolor="Black",
+    showsubunits=True, subunitcolor="Blue"
+)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Graticules (Latitude and Longitude Grid Lines)
+
+A graticule can be drawn using `layout.geo.lataxis.showgrid` and `layout.geo.lonaxis.showgrid` with options similar to [2d cartesian ticks](/python/axes/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo())
+fig.update_geos(lataxis_showgrid=True, lonaxis_showgrid=True)
+fig.update_layout(height=300, margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Reference
+
+See https://plotly.com/python/reference/layout/geo/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/map-subplots-and-small-multiples.md plotly-7.1.0+dfsg1/doc/python/map-subplots-and-small-multiples.md
--- plotly-5.20.0+dfsg/doc/python/map-subplots-and-small-multiples.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/map-subplots-and-small-multiples.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,166 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.6
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make map subplots and map small multiples in Python.
+    display_as: multiple_axes
+    language: python
+    layout: base
+    name: Map Subplots
+    order: 2
+    page_type: example_index
+    permalink: python/map-subplots-and-small-multiples/
+    thumbnail: thumbnail/map-subplots.jpg
+---
+
+### US map small multiples
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/1962_2006_walmart_store_openings.csv')
+df.head()
+
+data = []
+layout = dict(
+    title = 'New Walmart Stores per year 1962-2006<br>\
+Source: <a href="http://www.econ.umn.edu/~holmes/data/WalMart/index.html">\
+University of Minnesota</a>',
+    # showlegend = False,
+    autosize = False,
+    width = 1000,
+    height = 900,
+    hovermode = False,
+    legend = dict(
+        x=0.7,
+        y=-0.1,
+        bgcolor="rgba(255, 255, 255, 0)",
+        font = dict( size=11 ),
+    )
+)
+years = df['YEAR'].unique()
+
+for i in range(len(years)):
+    geo_key = 'geo'+str(i+1) if i != 0 else 'geo'
+    lons = list(df[ df['YEAR'] == years[i] ]['LON'])
+    lats = list(df[ df['YEAR'] == years[i] ]['LAT'])
+    # Walmart store data
+    data.append(
+        dict(
+            type = 'scattergeo',
+            showlegend=False,
+            lon = lons,
+            lat = lats,
+            geo = geo_key,
+            name = int(years[i]),
+            marker = dict(
+                color = "rgb(0, 0, 255)",
+                opacity = 0.5
+            )
+        )
+    )
+    # Year markers
+    data.append(
+        dict(
+            type = 'scattergeo',
+            showlegend = False,
+            lon = [-78],
+            lat = [47],
+            geo = geo_key,
+            text = [years[i]],
+            mode = 'text',
+        )
+    )
+    layout[geo_key] = dict(
+        scope = 'usa',
+        showland = True,
+        landcolor = 'rgb(229, 229, 229)',
+        showcountries = False,
+        domain = dict( x = [], y = [] ),
+        subunitcolor = "rgb(255, 255, 255)",
+    )
+
+
+def draw_sparkline( domain, lataxis, lonaxis ):
+    ''' Returns a sparkline layout object for geo coordinates  '''
+    return dict(
+        showland = False,
+        showframe = False,
+        showcountries = False,
+        showcoastlines = False,
+        domain = domain,
+        lataxis = lataxis,
+        lonaxis = lonaxis,
+        bgcolor = 'rgba(255,200,200,0.0)'
+    )
+
+# Stores per year sparkline
+layout['geo44'] = draw_sparkline({'x':[0.6,0.8], 'y':[0,0.15]}, \
+                                 {'range':[-5.0, 30.0]}, {'range':[0.0, 40.0]} )
+data.append(
+    dict(
+        type = 'scattergeo',
+        mode = 'lines',
+        lat = list(df.groupby(by=['YEAR']).count()['storenum']/1e1),
+        lon = list(range(len(df.groupby(by=['YEAR']).count()['storenum']/1e1))),
+        line = dict( color = "rgb(0, 0, 255)" ),
+        name = "New stores per year<br>Peak of 178 stores per year in 1990",
+        geo = 'geo44',
+    )
+)
+
+# Cumulative sum sparkline
+layout['geo45'] = draw_sparkline({'x':[0.8,1], 'y':[0,0.15]}, \
+                                 {'range':[-5.0, 50.0]}, {'range':[0.0, 50.0]} )
+data.append(
+    dict(
+        type = 'scattergeo',
+        mode = 'lines',
+        lat = list(df.groupby(by=['YEAR']).count().cumsum()['storenum']/1e2),
+        lon = list(range(len(df.groupby(by=['YEAR']).count()['storenum']/1e1))),
+        line = dict( color = "rgb(214, 39, 40)" ),
+        name ="Cumulative sum<br>3176 stores total in 2006",
+        geo = 'geo45',
+    )
+)
+
+z = 0
+COLS = 5
+ROWS = 9
+for y in reversed(range(ROWS)):
+    for x in range(COLS):
+        geo_key = 'geo'+str(z+1) if z != 0 else 'geo'
+        layout[geo_key]['domain']['x'] = [float(x)/float(COLS), float(x+1)/float(COLS)]
+        layout[geo_key]['domain']['y'] = [float(y)/float(ROWS), float(y+1)/float(ROWS)]
+        z=z+1
+        if z > 42:
+            break
+
+fig = go.Figure(data=data, layout=layout)
+fig.update_layout(width=800)
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/scattergeo/ for more information and chart attribute options!
+
diff -Nru plotly-5.20.0+dfsg/doc/python/marginal-plots.md plotly-7.1.0+dfsg1/doc/python/marginal-plots.md
--- plotly-5.20.0+dfsg/doc/python/marginal-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/marginal-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,143 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to add marginal distribution plots.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Marginal Distribution Plots
+    order: 13
+    page_type: u-guide
+    permalink: python/marginal-plots/
+    thumbnail: thumbnail/figure-labels.png
+---
+
+### Overview
+
+Marginal distribution plots are small subplots above or to the right of a main plot, which show the distribution of data along only one dimension. Marginal distribution plot capabilities are built into various Plotly Express functions such as `scatter` and `histogram`. [Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+### Scatter Plot Marginals
+
+The `marginal_x` and `marginal_y` arguments accept one of `"histogram"`, `"rug"`, `"box"`, or `"violin"` (see also how to create [histograms](/python/histograms/), [box plots](/python/box-plots/) and [violin plots](/python/violin-plots/) as the main figure), plus `"heatmap"` for `density_heatmap` (see below).
+
+Marginal plots are linked to the main plot: try zooming or panning on the main plot.
+
+Marginal plots also support hover, including per-point hover as with the rug-plot on the right: try hovering over the points on the right marginal plot.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", marginal_x="histogram", marginal_y="rug")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.density_heatmap(df, x="sepal_length", y="sepal_width", marginal_x="box", marginal_y="violin")
+fig.show()
+```
+
+### Marginal Heatmaps on Density Heatmaps
+
+`marginal_x` and `marginal_y` also accept `"heatmap"` for [`density_heatmap`](/python/2D-Histogram/). This draws a single-row or single-column heatmap strip, colored by the same aggregate (`histfunc` of `z`, or count by default) as the main plot, and sharing its color scale. This is not supported for `density_contour`, since a contour plot's colorbar is discrete and not compatible with the continuous colorbar used by the marginal heatmap.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.density_heatmap(df, x="total_bill", y="tip", marginal_x="heatmap", marginal_y="heatmap")
+fig.show()
+```
+
+Set `text_auto=True` to display the aggregate value as text on both the main plot and the marginal heatmap strips, or pass a [d3-format](https://github.com/d3/d3-format) string such as `".2f"` to control the number of decimal places:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.density_heatmap(df, x="total_bill", y="tip", z="size", histfunc="avg",
+                          marginal_x="heatmap", marginal_y="heatmap", text_auto=".1f")
+fig.show()
+```
+
+### Marginal Plots and Color
+
+Marginal plots respect the `color` argument as well, and are linked to the respective legend elements. Try clicking on the legend items.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_length", y="sepal_width", color="species",
+                 marginal_x="box", marginal_y="violin",
+                  title="Click on the legend items!")
+fig.show()
+```
+
+### Marginal Plots on Histograms
+
+[Histograms](/python/histograms/) are often used to show the distribution of a variable, and they also support marginal plots in Plotly Express, with the `marginal` argument:
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.histogram(df, x="sepal_length", color="species", marginal="box")
+fig.show()
+```
+
+Try hovering over the rug plot points to identify individual country values in the histogram below:
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.histogram(df, x="lifeExp", color="continent", marginal="rug", hover_name="country",
+                  title="Hover over the rug plot!")
+fig.show()
+```
+
+### Marginal Plots and Facets
+
+Marginal plots can be used in conjunction with [Plotly Express facets](/python/facet-plots/) so long as they go along different directions:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="sex", facet_col="day",
+                  marginal_x="box")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", color="sex", facet_row="time",
+                  marginal_y="box")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", color="sex", facet_col="day",
+                  marginal="box")
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/marker-style.md plotly-7.1.0+dfsg1/doc/python/marker-style.md
--- plotly-5.20.0+dfsg/doc/python/marker-style.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/marker-style.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,585 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.19.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.14.3
+  plotly:
+    description: How to style markers in Python with Plotly.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Styling Markers
+    order: 21
+    permalink: python/marker-style/
+    thumbnail: thumbnail/marker-style.gif
+---
+
+### Add Marker Border
+
+In order to make markers look more distinct, you can add a border to the markers. This can be achieved by adding the line property to the marker object.
+
+Here is an example of adding a marker border to a faceted scatter plot created using Plotly Express.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
+
+fig.update_traces(marker=dict(size=12,
+                              line=dict(width=2,
+                                        color='DarkSlateGrey')),
+                  selector=dict(mode='markers'))
+fig.show()
+```
+
+Here is an example that creates an empty graph object figure, and then adds two scatter traces with a marker border.
+
+```python
+import plotly.graph_objects as go
+
+# Generate example data
+import numpy as np
+np.random.seed(1)
+
+x = np.random.uniform(low=3, high=6, size=(500,))
+y = np.random.uniform(low=3, high=6, size=(500,))
+
+# Build figure
+fig = go.Figure()
+
+# Add scatter trace with medium sized markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=x,
+        y=y,
+        marker=dict(
+            color='LightSkyBlue',
+            size=20,
+            line=dict(
+                color='MediumPurple',
+                width=2
+            )
+        ),
+        showlegend=False
+    )
+)
+
+# Add trace with large marker
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=[2],
+        y=[4.5],
+        marker=dict(
+            color='LightSkyBlue',
+            size=120,
+            line=dict(
+                color='MediumPurple',
+                width=12
+            )
+        ),
+        showlegend=False
+    )
+)
+
+fig.show()
+```
+
+Fully opaque, the default setting, is useful for non-overlapping markers. When many points overlap it can be hard to observe density.
+
+### Dashed Marker Borders
+
+*New in 6.6*
+
+Set `dash` on `marker.line` to control the dash pattern of marker borders. Supported values are: `'solid'` (default), `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a custom dash length list in px (for example, `'12px,6px'`).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    x=[1, 2, 3, 4, 5],
+    y=[2, 4, 3, 5, 4],
+    mode="markers",
+    marker=dict(
+        size=25,
+        color="white",
+        line=dict(width=2, color="blue", dash="dot")
+    )
+))
+
+fig.show()
+```
+
+You can also pass an array of dash styles to set different styles per marker:
+
+```python
+import plotly.graph_objects as go
+
+styles = ["solid", "dot", "dash", "longdash", "dashdot", "longdashdot"]
+
+fig = go.Figure(go.Scatter(
+    x=list(range(len(styles))),
+    y=[0] * len(styles),
+    mode="markers+text",
+    text=styles,
+    textposition="bottom center",
+    marker=dict(size=30, color="white", line=dict(color="blue", width=2, dash=styles))
+))
+
+fig.show()
+```
+
+The `marker.line.dash` attribute is available on `go.Scatter`, `go.Scatterpolar`, `go.Scattergeo`, `go.Scatterternary`, `go.Scattercarpet`, and `go.Scattersmith` traces.
+
+### Control Marker Border with Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'marker-style', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Opacity
+
+Setting opacity outside the marker will set the opacity of the trace. Thus, it will allow greater visibility of additional traces but like fully opaque it is hard to distinguish density.
+
+```python
+import plotly.graph_objects as go
+
+# Generate example data
+import numpy as np
+
+x = np.random.uniform(low=3, high=6, size=(500,))
+y = np.random.uniform(low=3, high=4.5, size=(500,))
+x2 = np.random.uniform(low=3, high=6, size=(500,))
+y2 = np.random.uniform(low=4.5, high=6, size=(500,))
+
+# Build figure
+fig = go.Figure()
+
+# Add first scatter trace with medium sized markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=x,
+        y=y,
+        opacity=0.5,
+        marker=dict(
+            color='LightSkyBlue',
+            size=20,
+            line=dict(
+                color='MediumPurple',
+                width=2
+            )
+        ),
+        name='Opacity 0.5'
+    )
+)
+
+# Add second scatter trace with medium sized markers
+# and opacity 1.0
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=x2,
+        y=y2,
+        marker=dict(
+            color='LightSkyBlue',
+            size=20,
+            line=dict(
+                color='MediumPurple',
+                width=2
+            )
+        ),
+        name='Opacity 1.0'
+    )
+)
+
+# Add trace with large markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=[2, 2],
+        y=[4.25, 4.75],
+        opacity=0.5,
+        marker=dict(
+            color='LightSkyBlue',
+            size=80,
+            line=dict(
+                color='MediumPurple',
+                width=8
+            )
+        ),
+        showlegend=False
+    )
+)
+
+fig.show()
+
+```
+
+### Marker Opacity
+
+To maximise visibility of density, it is recommended to set the opacity inside the marker `marker:{opacity:0.5}`. If multiple traces exist with high density, consider using marker opacity in conjunction with trace opacity.
+
+```python
+import plotly.graph_objects as go
+
+# Generate example data
+import numpy as np
+
+x = np.random.uniform(low=3, high=6, size=(500,))
+y = np.random.uniform(low=3, high=6, size=(500,))
+
+# Build figure
+fig = go.Figure()
+
+# Add scatter trace with medium sized markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=x,
+        y=y,
+        marker=dict(
+            color='LightSkyBlue',
+            size=20,
+            opacity=0.5,
+            line=dict(
+                color='MediumPurple',
+                width=2
+            )
+        ),
+        showlegend=False
+    )
+)
+
+
+# Add trace with large markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=[2, 2],
+        y=[4.25, 4.75],
+        marker=dict(
+            color='LightSkyBlue',
+            size=80,
+            opacity=0.5,
+            line=dict(
+                color='MediumPurple',
+                width=8
+            )
+        ),
+        showlegend=False
+    )
+)
+
+fig.show()
+
+```
+
+### Color Opacity
+
+To maximise visibility of each point, set the color as an `rgba` string that includes an alpha value of 0.5.
+
+This example sets the marker color to `'rgba(135, 206, 250, 0.5)'`. The rgb values of 135, 206, and 250 are from the definition of the `LightSkyBlue` named CSS color that is used in the previous examples (See https://www.color-hex.com/color/87cefa). The marker line will remain opaque.
+
+```python
+import plotly.graph_objects as go
+
+# Generate example data
+import numpy as np
+
+x = np.random.uniform(low=3, high=6, size=(500,))
+y = np.random.uniform(low=3, high=6, size=(500,))
+
+
+# Build figure
+fig = go.Figure()
+
+# Add scatter trace with medium sized markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=x,
+        y=y,
+        marker=dict(
+            color='rgba(135, 206, 250, 0.5)',
+            size=20,
+            line=dict(
+                color='MediumPurple',
+                width=2
+            )
+        ),
+        showlegend=False
+    )
+)
+
+
+# Add trace with large markers
+fig.add_trace(
+    go.Scatter(
+        mode='markers',
+        x=[2, 2],
+        y=[4.25, 4.75],
+        marker=dict(
+            color='rgba(135, 206, 250, 0.5)',
+            size=80,
+            line=dict(
+                color='MediumPurple',
+                width=8
+            )
+        ),
+        showlegend=False
+    )
+)
+
+fig.show()
+
+```
+
+### Custom Marker Symbols
+
+The `marker_symbol` attribute allows you to choose from a wide array of symbols to represent markers in your figures.
+
+The basic symbols are: `circle`, `square`, `diamond`, `cross`, `x`, `triangle`, `pentagon`, `hexagram`, `star`, `hourglass`, `bowtie`, `asterisk`, `hash`, `y`, and `line`.
+
+Each basic symbol is also represented by a number. Adding 100 to that number is equivalent to appending the suffix "-open" to a symbol name. Adding 200 is equivalent to appending "-dot" to a symbol name. Adding 300 is equivalent to appending "-open-dot" or "dot-open" to a symbol name.
+
+In the following figure, hover over a symbol to see its name or number. Set the `marker_symbol` attribute equal to that name or number to change the marker symbol in your figure.
+
+> The `arrow-wide` and `arrow` marker symbols are new in 5.11
+
+```python
+import plotly.graph_objects as go
+from plotly.validator_cache import ValidatorCache
+
+SymbolValidator = ValidatorCache.get_validator("scatter.marker", "symbol")
+raw_symbols = SymbolValidator.values
+namestems = []
+namevariants = []
+symbols = []
+for i in range(0,len(raw_symbols),3):
+    name = raw_symbols[i+2]
+    symbols.append(raw_symbols[i])
+    namestems.append(name.replace("-open", "").replace("-dot", ""))
+    namevariants.append(name[len(namestems[-1]):])
+
+fig = go.Figure(go.Scatter(mode="markers", x=namevariants, y=namestems, marker_symbol=symbols,
+                           marker_line_color="midnightblue", marker_color="lightskyblue",
+                           marker_line_width=2, marker_size=15,
+                           hovertemplate="name: %{y}%{x}<br>number: %{marker.symbol}<extra></extra>"))
+fig.update_layout(title=dict(text="Mouse over symbols for name & number!"),
+                  xaxis_range=[-1,4], yaxis_range=[len(set(namestems)),-1],
+                  margin=dict(b=0,r=0), xaxis_side="top", height=1400, width=400)
+fig.show()
+```
+
+
+### Using a Custom Marker
+
+To use a custom marker, set the `symbol` on the `marker`. Here we set it to `diamond`.
+
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
+
+fig.update_traces(
+    marker=dict(size=8, symbol="diamond", line=dict(width=2, color="DarkSlateGrey")),
+    selector=dict(mode="markers"),
+)
+fig.show()
+
+```
+
+#### Open Marker Colors
+
+In the previous example, each marker has two colors, a marker color (set in Plotly Express with `color="species"`)  and a line color (set on the line with `color="DarkSlateGrey"`. All open markers, like "diamond-open" in the following example, have a transparent fill, which means you can specify only one color.  Specify this color using the marker color parameter. This controls the outline color and any dot or cross. For open markers, the line color does nothing.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
+
+fig.update_traces(
+    marker=dict(
+        size=8,
+        symbol="diamond-open",
+        line=dict(
+            width=2,
+#             color="DarkSlateGrey" Line colors don't apply to open markers
+        )
+    ),
+    selector=dict(mode="markers"),
+)
+
+fig.show()
+```
+
+### Setting Marker Angles
+
+
+*New in 5.11*
+
+Change the angle of markers by setting `angle`. Here we set the angle on the `arrow` markers to `45`.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
+
+fig.update_traces(
+    marker=dict(
+        size=12, symbol="arrow", angle=45, line=dict(width=2, color="DarkSlateGrey")
+    ),
+    selector=dict(mode="markers"),
+)
+fig.show()
+
+```
+
+### Setting Angle Reference
+
+*New in 5.11*
+
+In the previous example the angle reference is the default `up`, which
+means all makers start at the angle reference point of 0. Set `angleref` to `previous` and a marker will take its angle reference from the previous data point.
+
+```python
+import pandas as pd
+import plotly.express as px
+import plotly.graph_objects as go
+
+df = px.data.gapminder()
+
+fig = go.Figure()
+
+for x in df.loc[df.continent.isin(["Europe"])].country.unique()[:5]:
+    fil = df.loc[(df.country.str.contains(x))]
+    fig.add_trace(
+        go.Scatter(
+            x=fil["year"],
+            y=fil["pop"],
+            mode="lines+markers",
+            marker=dict(
+                symbol="arrow",
+                size=15,
+                angleref="previous",
+            ),
+            name=x,
+        )
+    )
+fig.show()
+
+```
+
+### Using Standoff to Position a Marker
+
+*New in 5.11*
+
+When you have multiple markers at one location, you can use `standoff` on a marker to move it away from the other marker in the direction of the `angle`.
+In this example, we set `standoff=8` on the `arrow` marker, which is half the size of the other `circle` marker, meaning it points exactly at the `circle`.
+
+```python
+import pandas as pd
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+df = df.loc[(df.continent == "Americas") & (df.year.isin([1987, 2007]))]
+
+countries = (
+    df.loc[(df.continent == "Americas") & (df.year.isin([2007]))]
+    .sort_values(by=["pop"], ascending=True)["country"]
+    .unique()
+)[5:-10]
+
+data = {"x": [], "y": [], "colors": [], "years": []}
+
+for country in countries:
+    data["x"].extend(
+        [
+            df.loc[(df.year == 1987) & (df.country == country)]["pop"].values[0],
+            df.loc[(df.year == 2007) & (df.country == country)]["pop"].values[0],
+            None,
+        ]
+    )
+    data["y"].extend([country, country, None]),
+    data["colors"].extend(["cyan", "darkblue", "white"]),
+    data["years"].extend(["1987", "2007", None])
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=data["x"],
+            y=data["y"],
+            mode="markers+lines",
+            marker=dict(
+                symbol="arrow",
+                color="royalblue",
+                size=16,
+                angleref="previous",
+                standoff=8,
+            ),
+        ),
+        go.Scatter(
+            x=data["x"],
+            y=data["y"],
+            text=data["years"],
+            mode="markers",
+            marker=dict(
+                color=data["colors"],
+                size=16,
+            ),
+            hovertemplate="""Country: %{y} <br> Population: %{x} <br> Year: %{text} <br><extra></extra>""",
+        ),
+    ]
+)
+
+fig.update_layout(
+    title=dict(text="Population changes 1987 to 2007"),
+    width=1000,
+    height=1000,
+    showlegend=False,
+)
+
+
+fig.show()
+
+```
+
+### Reference
+
+See https://plotly.com/python/reference/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/migrate-to-maplibre.md plotly-7.1.0+dfsg1/doc/python/migrate-to-maplibre.md
--- plotly-5.20.0+dfsg/doc/python/migrate-to-maplibre.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/migrate-to-maplibre.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,78 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: Migrating from Mapbox traces to MapLibre traces.
+    display_as: maps
+    language: python
+    layout: base
+    name: MapLibre Migration
+    order: 1
+    page_type: u-guide
+    permalink: python/mapbox-to-maplibre/
+    redirect_from: python/maplibre-migration/
+    thumbnail: thumbnail/mapbox-layers.png
+---
+
+## Migrating from Mapbox traces to MapLibre traces
+
+Plotly.py v5.24.0 introduced a set of trace types for maps with tile underlays, including from Plotly Express:
+- `px.scatter_map`
+- `px.line_map`
+- `px.choropleth_map`
+- `px.density_map`
+
+as well as Plotly Graph Objects:
+- `go.Choroplethmap`
+- `go.Scattermap`
+- `go.Densitymap`
+
+These traces replaced the Mapbox traces, `px.scatter_mapbox`, `px.line_mapbox`, and the rest, and use [MapLibre](https://maplibre.org) as the map renderer rather than Mapbox.
+
+**The Mapbox traces, the `layout.mapbox` subplot, and the `mapboxAccessToken` configuration option were removed in Plotly.py 7.** If you are upgrading to version 7, follow the steps below, then see [Changes in Version 7](/python/v7-migration/) for the rest of the upgrade.
+
+When switching to the new traces, keep an eye out for improved rendering performance, WebGL2 support, and over time, improved features in the Plotly map traces inherited from the MapLibre renderer, including projection support, globe views, terrain support, and support for modern mapping standards.
+
+You can learn more about the motivations for this change in our [announcement post](https://plotly.com/blog/plotly-is-switching-to-maplibre/).
+
+As a result of removing Mapbox as the rendering engine, we're also removing the Mapbox branding from these trace names. This means that migrating from Mapbox traces to MapLibre traces will require some code changes in your projects.
+
+1. Change trace names from `*mapbox` to `*map`. For any existing trace name ending in `*mapbox`, ensure you've removed the "`box`" suffix.
+2. If in use, update `layout.mapbox` argument in your layout configuration to `layout.map`. The nested properties are identical in the new map traces, so no other changes should be required.
+3. If in use, update `mapbox_style` to `map_style`.
+4. Verify your `map_style` settings. With `mapbox` traces, we bundle `basic`, `streets`, `outdoors`, `light`, `dark`, `satellite`, and `satellite-streets` styles, using Mapbox styling. These style names are still available, but they now reference slightly different styles provided by other tools.
+
+Note that Mapbox API keys are no longer required for Plotly-provided styles, but using external styles in your Plotly maps remains supported with the existing API.
+
+### Style changes
+Built-in styles in map traces are free styles from [Carto](https://carto.com) and [ESRI](https://www.esri.com/en-us/home). Several names are re-used from the previous Mapbox styles.
+<p align="center">
+  <img src="https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/baselines/map_predefined-styles1.png" alt="Style comparison part 1" width="45%" />
+  <img src="https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/baselines/map_predefined-styles2.png" alt="Style comparison part 2" width="45%" />
+</p>
+
+Compare to the previous Mapbox styles:
+<p align="center">
+  <img src="https://raw.githubusercontent.com/plotly/graphing-library-docs/master/all_static/images/mapbox_1.png" alt="Style comparison part 1" width="45%" />
+  <img src="https://raw.githubusercontent.com/plotly/graphing-library-docs/master/all_static/images/mapbox_2.png" alt="Style comparison part 2" width="45%" />
+</p>
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/mixed-subplots.md plotly-7.1.0+dfsg1/doc/python/mixed-subplots.md
--- plotly-5.20.0+dfsg/doc/python/mixed-subplots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/mixed-subplots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,126 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make mixed subplots in Python with Plotly.
+    display_as: multiple_axes
+    language: python
+    layout: base
+    name: Mixed Subplots
+    order: 1
+    page_type: example_index
+    permalink: python/mixed-subplots/
+    thumbnail: thumbnail/mixed_subplot.JPG
+---
+
+### Mixed Subplots and Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+> *Note*: At this time, Plotly Express does not support creating figures with arbitrary mixed subplots i.e. figures with subplots of different types. Plotly Express only supports [facet plots](/python/facet-plots/) and [marginal distribution subplots](/python/marginal-plots/). To make a figure with mixed subplots, use the [`make_subplots()`](/python/subplots/) function in conjunction with [graph objects](/python/graph-objects/) as documented below.
+
+
+#### Mixed Subplot
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+import pandas as pd
+
+# read in volcano database data
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/volcano_db.csv",
+    encoding="iso-8859-1",
+)
+
+# frequency of Country
+freq = df['Country'].value_counts().reset_index()
+freq.columns = ['x', 'Country']
+
+# read in 3d volcano surface data
+df_v = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/volcano.csv")
+
+# Initialize figure with subplots
+fig = make_subplots(
+    rows=2, cols=2,
+    column_widths=[0.6, 0.4],
+    row_heights=[0.4, 0.6],
+    specs=[[{"type": "scattergeo", "rowspan": 2}, {"type": "bar"}],
+           [            None                    , {"type": "surface"}]])
+
+# Add scattergeo globe map of volcano locations
+fig.add_trace(
+    go.Scattergeo(lat=df["Latitude"],
+                  lon=df["Longitude"],
+                  mode="markers",
+                  hoverinfo="text",
+                  showlegend=False,
+                  marker=dict(color="crimson", size=4, opacity=0.8)),
+    row=1, col=1
+)
+
+# Add locations bar chart
+fig.add_trace(
+    go.Bar(x=freq["x"][0:10],y=freq["Country"][0:10], marker=dict(color="crimson"), showlegend=False),
+    row=1, col=2
+)
+
+# Add 3d surface of volcano
+fig.add_trace(
+    go.Surface(z=df_v.values.tolist(), showscale=False),
+    row=2, col=2
+)
+
+# Update geo subplot properties
+fig.update_geos(
+    projection_type="orthographic",
+    landcolor="white",
+    oceancolor="MidnightBlue",
+    showocean=True,
+    lakecolor="LightBlue"
+)
+
+# Rotate x-axis labels
+fig.update_xaxes(tickangle=45)
+
+# Set theme, margin, and annotation in layout
+fig.update_layout(
+    template="plotly_dark",
+    margin=dict(r=10, t=25, b=40, l=60),
+    annotations=[
+        dict(
+            text="Source: NOAA",
+            showarrow=False,
+            xref="paper",
+            yref="paper",
+            x=0,
+            y=0)
+    ]
+)
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/ml-knn.md plotly-7.1.0+dfsg1/doc/python/ml-knn.md
--- plotly-5.20.0+dfsg/doc/python/ml-knn.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ml-knn.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,342 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: Visualize scikit-learn's k-Nearest Neighbors (kNN) classification
+      in Python with Plotly.
+    display_as: ai_ml
+    language: python
+    layout: base
+    name: kNN Classification
+    order: 2
+    page_type: u-guide
+    permalink: python/knn-classification/
+    thumbnail: thumbnail/knn-classification.png
+---
+
+## Basic binary classification with kNN
+
+This section gets us started with displaying basic binary classification using 2D data. We first show how to display training versus testing data using [various marker styles](https://plot.ly/python/marker-style/), then demonstrate how to evaluate our classifier's performance on the **test split** using a continuous color gradient to indicate the model's predicted score.
+
+We will use [Scikit-learn](https://scikit-learn.org/) for training our model and for loading and splitting data. Scikit-learn is a popular Machine Learning (ML) library that offers various tools for creating and training ML algorithms, feature engineering, data cleaning, and evaluating and testing models. It was designed to be accessible, and to work seamlessly with popular libraries like NumPy and Pandas.
+
+We will train a [k-Nearest Neighbors (kNN)](https://scikit-learn.org/stable/modules/neighbors.html) classifier. First, the model records the label of each training sample. Then, whenever we give it a new sample, it will look at the `k` closest samples from the training set to find the most common label, and assign it to our new sample.
+
+
+### Display training and test splits
+
+Using Scikit-learn, we first generate synthetic data that form the shape of a moon. We then split it into a training and testing set. Finally, we display the ground truth labels using [a scatter plot](https://plotly.com/python/line-and-scatter/).
+
+In the graph, we display all the negative labels as squares, and positive labels as circles. We differentiate the training and test set by adding a dot to the center of test data.
+
+In this example, we will use [graph objects](/python/graph-objects/), Plotly's low-level API for building figures.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+from sklearn.datasets import make_moons
+from sklearn.model_selection import train_test_split
+from sklearn.neighbors import KNeighborsClassifier
+
+# Load and split data
+X, y = make_moons(noise=0.3, random_state=0)
+X_train, X_test, y_train, y_test = train_test_split(
+    X, y.astype(str), test_size=0.25, random_state=0)
+
+trace_specs = [
+    [X_train, y_train, '0', 'Train', 'square'],
+    [X_train, y_train, '1', 'Train', 'circle'],
+    [X_test, y_test, '0', 'Test', 'square-dot'],
+    [X_test, y_test, '1', 'Test', 'circle-dot']
+]
+
+fig = go.Figure(data=[
+    go.Scatter(
+        x=X[y==label, 0], y=X[y==label, 1],
+        name=f'{split} Split, Label {label}',
+        mode='markers', marker_symbol=marker
+    )
+    for X, y, label, split, marker in trace_specs
+])
+fig.update_traces(
+    marker_size=12, marker_line_width=1.5,
+    marker_color="lightyellow"
+)
+fig.show()
+```
+
+### Visualize predictions on test split with [`plotly.express`](https://plotly.com/python/plotly-express/)
+
+
+Now, we train the kNN model on the same training data displayed in the previous graph. Then, we predict the confidence score of the model for each of the data points in the test set. We will use shapes to denote the true labels, and the color will indicate the confidence of the model for assign that score.
+
+In this example, we will use [Plotly Express](/python/plotly-express/), Plotly's high-level API for building figures. Notice that `px.scatter` only require 1 function call to plot both negative and positive labels, and can additionally set a continuous color scale based on the `y_score` output by our kNN model.
+
+```python
+import plotly.express as px
+import numpy as np
+from sklearn.datasets import make_moons
+from sklearn.model_selection import train_test_split
+from sklearn.neighbors import KNeighborsClassifier
+
+# Load and split data
+X, y = make_moons(noise=0.3, random_state=0)
+X_train, X_test, y_train, y_test = train_test_split(
+    X, y.astype(str), test_size=0.25, random_state=0)
+
+# Fit the model on training data, predict on test data
+clf = KNeighborsClassifier(15)
+clf.fit(X_train, y_train)
+y_score = clf.predict_proba(X_test)[:, 1]
+
+fig = px.scatter(
+    X_test, x=0, y=1,
+    color=y_score, color_continuous_scale='RdBu',
+    symbol=y_test, symbol_map={'0': 'square-dot', '1': 'circle-dot'},
+    labels={'symbol': 'label', 'color': 'score of <br>first class'}
+)
+fig.update_traces(marker_size=12, marker_line_width=1.5)
+fig.update_layout(legend_orientation='h')
+fig.show()
+```
+
+## Probability Estimates with `go.Contour`
+
+Just like the previous example, we will first train our kNN model on the training set.
+
+Instead of predicting the confidence for the test set, we can predict the confidence map for the entire area that wraps around the dimensions of our dataset. To do this, we use [`np.meshgrid`](https://numpy.org/doc/stable/reference/generated/numpy.meshgrid.html) to create a grid, where the distance between each point is denoted by the `mesh_size` variable.
+
+Then, for each of those points, we will use our model to give a confidence score, and plot it with a [contour plot](https://plotly.com/python/contour-plots/).
+
+In this example, we will use [graph objects](/python/graph-objects/), Plotly's low-level API for building figures.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+from sklearn.datasets import make_moons
+from sklearn.model_selection import train_test_split
+from sklearn.neighbors import KNeighborsClassifier
+
+mesh_size = .02
+margin = 0.25
+
+# Load and split data
+X, y = make_moons(noise=0.3, random_state=0)
+X_train, X_test, y_train, y_test = train_test_split(
+    X, y.astype(str), test_size=0.25, random_state=0)
+
+# Create a mesh grid on which we will run our model
+x_min, x_max = X[:, 0].min() - margin, X[:, 0].max() + margin
+y_min, y_max = X[:, 1].min() - margin, X[:, 1].max() + margin
+xrange = np.arange(x_min, x_max, mesh_size)
+yrange = np.arange(y_min, y_max, mesh_size)
+xx, yy = np.meshgrid(xrange, yrange)
+
+# Create classifier, run predictions on grid
+clf = KNeighborsClassifier(15, weights='uniform')
+clf.fit(X, y)
+Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
+Z = Z.reshape(xx.shape)
+
+
+# Plot the figure
+fig = go.Figure(data=[
+    go.Contour(
+        x=xrange,
+        y=yrange,
+        z=Z,
+        colorscale='RdBu'
+    )
+])
+fig.show()
+```
+
+Now, let's try to combine our `go.Contour` plot with the first scatter plot of our data points, so that we can visually compare the confidence of our model with the true labels.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+from sklearn.datasets import make_moons
+from sklearn.model_selection import train_test_split
+from sklearn.neighbors import KNeighborsClassifier
+
+mesh_size = .02
+margin = 0.25
+
+# Load and split data
+X, y = make_moons(noise=0.3, random_state=0)
+X_train, X_test, y_train, y_test = train_test_split(
+    X, y.astype(str), test_size=0.25, random_state=0)
+
+# Create a mesh grid on which we will run our model
+x_min, x_max = X[:, 0].min() - margin, X[:, 0].max() + margin
+y_min, y_max = X[:, 1].min() - margin, X[:, 1].max() + margin
+xrange = np.arange(x_min, x_max, mesh_size)
+yrange = np.arange(y_min, y_max, mesh_size)
+xx, yy = np.meshgrid(xrange, yrange)
+
+# Create classifier, run predictions on grid
+clf = KNeighborsClassifier(15, weights='uniform')
+clf.fit(X, y)
+Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]
+Z = Z.reshape(xx.shape)
+
+trace_specs = [
+    [X_train, y_train, '0', 'Train', 'square'],
+    [X_train, y_train, '1', 'Train', 'circle'],
+    [X_test, y_test, '0', 'Test', 'square-dot'],
+    [X_test, y_test, '1', 'Test', 'circle-dot']
+]
+
+fig = go.Figure(data=[
+    go.Scatter(
+        x=X[y==label, 0], y=X[y==label, 1],
+        name=f'{split} Split, Label {label}',
+        mode='markers', marker_symbol=marker
+    )
+    for X, y, label, split, marker in trace_specs
+])
+fig.update_traces(
+    marker_size=12, marker_line_width=1.5,
+    marker_color="lightyellow"
+)
+
+fig.add_trace(
+    go.Contour(
+        x=xrange,
+        y=yrange,
+        z=Z,
+        showscale=False,
+        colorscale='RdBu',
+        opacity=0.4,
+        name='Score',
+        hoverinfo='skip'
+    )
+)
+fig.show()
+```
+
+## k-NN classification in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'knn-classification', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+## Multi-class prediction confidence with [`go.Heatmap`](https://plotly.com/python/heatmaps/)
+
+It is also possible to visualize the prediction confidence of the model using [heatmaps](https://plotly.com/python/heatmaps/). In this example, you can see how to compute how confident the model is about its prediction at every point in the 2D grid. Here, we define the confidence as the difference between the highest score and the score of the other classes summed, at a certain point.
+
+In this example, we will use [Plotly Express](/python/plotly-express/), Plotly's high-level API for building figures.
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+import numpy as np
+from sklearn.neighbors import KNeighborsClassifier
+from sklearn.model_selection import train_test_split
+
+mesh_size = .02
+margin = 1
+
+# We will use the iris data, which is included in px
+df = px.data.iris()
+df_train, df_test = train_test_split(df, test_size=0.25, random_state=0)
+X_train = df_train[['sepal_length', 'sepal_width']]
+y_train = df_train.species_id
+
+# Create a mesh grid on which we will run our model
+l_min, l_max = df.sepal_length.min() - margin, df.sepal_length.max() + margin
+w_min, w_max = df.sepal_width.min() - margin, df.sepal_width.max() + margin
+lrange = np.arange(l_min, l_max, mesh_size)
+wrange = np.arange(w_min, w_max, mesh_size)
+ll, ww = np.meshgrid(lrange, wrange)
+
+# Create classifier, run predictions on grid
+clf = KNeighborsClassifier(15, weights='distance')
+clf.fit(X_train, y_train)
+Z = clf.predict(np.c_[ll.ravel(), ww.ravel()])
+Z = Z.reshape(ll.shape)
+proba = clf.predict_proba(np.c_[ll.ravel(), ww.ravel()])
+proba = proba.reshape(ll.shape + (3,))
+
+# Compute the confidence, which is the difference
+diff = proba.max(axis=-1) - (proba.sum(axis=-1) - proba.max(axis=-1))
+
+fig = px.scatter(
+    df_test, x='sepal_length', y='sepal_width',
+    symbol='species',
+    symbol_map={
+        'setosa': 'square-dot',
+        'versicolor': 'circle-dot',
+        'virginica': 'diamond-dot'},
+)
+fig.update_traces(
+    marker_size=12, marker_line_width=1.5,
+    marker_color="lightyellow"
+)
+fig.add_trace(
+    go.Heatmap(
+        x=lrange,
+        y=wrange,
+        z=diff,
+        opacity=0.25,
+        customdata=proba,
+        colorscale='RdBu',
+        hovertemplate=(
+            'sepal length: %{x} <br>'
+            'sepal width: %{y} <br>'
+            'p(setosa): %{customdata[0]:.3f}<br>'
+            'p(versicolor): %{customdata[1]:.3f}<br>'
+            'p(virginica): %{customdata[2]:.3f}<extra></extra>'
+        )
+    )
+)
+fig.update_layout(
+    legend_orientation='h',
+    title=dict(text='Prediction Confidence on Test Split')
+)
+fig.show()
+```
+
+### Reference
+
+Learn more about `px`, `go.Contour`, and `go.Heatmap` here:
+* https://plot.ly/python/plotly-express/
+* https://plot.ly/python/heatmaps/
+* https://plot.ly/python/contour-plots/
+
+This tutorial was inspired by amazing examples from the official scikit-learn docs:
+* https://scikit-learn.org/stable/auto_examples/neighbors/plot_classification.html
+* https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html
+* https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html
diff -Nru plotly-5.20.0+dfsg/doc/python/ml-pca.md plotly-7.1.0+dfsg1/doc/python/ml-pca.md
--- plotly-5.20.0+dfsg/doc/python/ml-pca.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ml-pca.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,277 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: Visualize Principle Component Analysis (PCA) of your high-dimensional
+      data in Python with Plotly.
+    display_as: ai_ml
+    language: python
+    layout: base
+    name: PCA Visualization
+    order: 4
+    page_type: u-guide
+    permalink: python/pca-visualization/
+    thumbnail: thumbnail/ml-pca.png
+---
+
+This page first shows how to visualize higher dimension data using various Plotly figures combined with dimensionality reduction (aka projection). Then, we dive into the specific details of our projection algorithm.
+
+We will use [Scikit-learn](https://scikit-learn.org/) to load one of the datasets, and apply dimensionality reduction. Scikit-learn is a popular Machine Learning (ML) library that offers various tools for creating and training ML algorithms, feature engineering, data cleaning, and evaluating and testing models. It was designed to be accessible, and to work seamlessly with popular libraries like NumPy and Pandas.
+
+
+## High-dimensional PCA Analysis with  `px.scatter_matrix`
+
+The dimensionality reduction technique we will be using is called the [Principal Component Analysis (PCA)](https://scikit-learn.org/stable/modules/decomposition.html#pca). It is a powerful technique that arises from linear algebra and probability theory. In essence, it computes a matrix that represents the variation of your data ([covariance matrix/eigenvectors][covmatrix]), and rank them by their relevance (explained variance/eigenvalues). For a video tutorial, see [this segment on PCA](https://youtu.be/rng04VJxUt4?t=98) from the Coursera ML course.
+
+[covmatrix]: https://stats.stackexchange.com/questions/2691/making-sense-of-principal-component-analysis-eigenvectors-eigenvalues#:~:text=As%20it%20is%20a%20square%20symmetric%20matrix%2C%20it%20can%20be%20diagonalized%20by%20choosing%20a%20new%20orthogonal%20coordinate%20system%2C%20given%20by%20its%20eigenvectors%20(incidentally%2C%20this%20is%20called%20spectral%20theorem)%3B%20corresponding%20eigenvalues%20will%20then%20be%20located%20on%20the%20diagonal.%20In%20this%20new%20coordinate%20system%2C%20the%20covariance%20matrix%20is%20diagonal%20and%20looks%20like%20that%3A
+
+
+### Visualize all the original dimensions
+
+First, let's plot all the features and see how the `species` in the Iris dataset are grouped. In a [Scatter Plot Matrix (splom)](https://plot.ly/python/splom/), each subplot displays a feature against another, so if we have $N$ features we have a $N \times N$ matrix.
+
+In our example, we are plotting all 4 features from the Iris dataset, thus we can see how `sepal_width` is compared against `sepal_length`, then against `petal_width`, and so forth. Keep in mind how some pairs of features can more easily separate different species.
+
+In this example, we will use [Plotly Express](/python/plotly-express/), Plotly's high-level API for building figures.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+features = ["sepal_width", "sepal_length", "petal_width", "petal_length"]
+
+fig = px.scatter_matrix(
+    df,
+    dimensions=features,
+    color="species"
+)
+fig.update_traces(diagonal_visible=False)
+fig.show()
+```
+
+###  Visualize all the principal components
+
+Now, we apply `PCA` the same dataset, and retrieve **all** the components. We use the same `px.scatter_matrix` trace to display our results, but this time our features are the resulting *principal components*, ordered by how much variance they are able to explain.
+
+The importance of explained variance is demonstrated in the example below. The subplot between PC3 and PC4 is clearly unable to separate each class, whereas the subplot between PC1 and PC2 shows a clear separation between each species.
+
+In this example, we will use [Plotly Express](/python/plotly-express/), Plotly's high-level API for building figures.
+
+```python
+import plotly.express as px
+from sklearn.decomposition import PCA
+
+df = px.data.iris()
+features = ["sepal_width", "sepal_length", "petal_width", "petal_length"]
+
+pca = PCA()
+components = pca.fit_transform(df[features])
+labels = {
+    str(i): f"PC {i+1} ({var:.1f}%)"
+    for i, var in enumerate(pca.explained_variance_ratio_ * 100)
+}
+
+fig = px.scatter_matrix(
+    components,
+    labels=labels,
+    dimensions=range(4),
+    color=df["species"]
+)
+fig.update_traces(diagonal_visible=False)
+fig.show()
+```
+
+### Visualize a subset of the principal components
+
+When you will have too many features to visualize, you might be interested in only visualizing the most relevant components. Those components often capture a majority of the [explained variance](https://en.wikipedia.org/wiki/Explained_variation), which is a good way to tell if those components are sufficient for modelling this dataset.
+
+In the example below, our dataset contains 10 features, but we only select the first 2 components.
+
+```python
+import pandas as pd
+import plotly.express as px
+from sklearn.decomposition import PCA
+from sklearn.datasets import load_diabetes
+
+diabetes = load_diabetes()
+df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
+n_components = 2
+
+pca = PCA(n_components=n_components)
+components = pca.fit_transform(df)
+
+total_var = pca.explained_variance_ratio_.sum() * 100
+
+labels = {str(i): f"PC {i+1}" for i in range(n_components)}
+labels['color'] = 'Disease Progression'
+
+fig = px.scatter_matrix(
+    components,
+    color=diabetes.target,
+    dimensions=range(n_components),
+    labels=labels,
+    title=f'Total Explained Variance: {total_var:.2f}%',
+)
+fig.update_traces(diagonal_visible=False)
+fig.show()
+```
+
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+## 2D PCA Scatter Plot
+
+In the previous examples, you saw how to visualize high-dimensional PCs. In this example, we show you how to simply visualize the first two principal components of a PCA, by reducing a dataset of 4 dimensions to 2D.
+
+```python
+import plotly.express as px
+from sklearn.decomposition import PCA
+
+df = px.data.iris()
+X = df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
+
+pca = PCA(n_components=2)
+components = pca.fit_transform(X)
+
+fig = px.scatter(components, x=0, y=1, color=df['species'])
+fig.show()
+```
+
+## Visualize PCA with `px.scatter_3d`
+
+With `px.scatter_3d`, you can visualize an additional dimension, which let you capture even more variance.
+
+```python
+import plotly.express as px
+from sklearn.decomposition import PCA
+
+df = px.data.iris()
+X = df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
+
+pca = PCA(n_components=3)
+components = pca.fit_transform(X)
+
+total_var = pca.explained_variance_ratio_.sum() * 100
+
+fig = px.scatter_3d(
+    components, x=0, y=1, z=2, color=df['species'],
+    title=f'Total Explained Variance: {total_var:.2f}%',
+    labels={'0': 'PC 1', '1': 'PC 2', '2': 'PC 3'}
+)
+fig.show()
+```
+
+## Plotting explained variance
+
+Often, you might be interested in seeing how much variance PCA is able to explain as you increase the number of components, in order to decide how many dimensions to ultimately keep or analyze. This example shows you how to quickly plot the cumulative sum of explained variance for a high-dimensional dataset like [Diabetes](https://scikit-learn.org/stable/datasets/index.html#diabetes-dataset).
+
+With a higher explained variance, you are able to capture more variability in your dataset, which could potentially lead to better performance when training your model. For a more mathematical explanation, see this [Q&A thread](https://stats.stackexchange.com/questions/22569/pca-and-proportion-of-variance-explained).
+
+```python
+import plotly.express as px
+import numpy as np
+import pandas as pd
+from sklearn.decomposition import PCA
+from sklearn.datasets import load_diabetes
+
+boston = load_diabetes()
+df = pd.DataFrame(boston.data, columns=boston.feature_names)
+
+pca = PCA()
+pca.fit(df)
+exp_var_cumul = np.cumsum(pca.explained_variance_ratio_)
+
+px.area(
+    x=range(1, exp_var_cumul.shape[0] + 1),
+    y=exp_var_cumul,
+    labels={"x": "# Components", "y": "Explained Variance"}
+)
+```
+
+## Visualize Loadings
+
+It is also possible to visualize loadings using `shapes`, and use `annotations` to indicate which feature a certain loading originally belonged to. Here, we define loadings as:
+
+$$
+loadings = eigenvectors \cdot \sqrt{eigenvalues}
+$$
+
+For more details about the linear algebra behind eigenvectors and loadings, see this [Q&A thread](https://stats.stackexchange.com/questions/143905/loadings-vs-eigenvectors-in-pca-when-to-use-one-or-another).
+
+```python
+import plotly.express as px
+import numpy as np
+from sklearn.decomposition import PCA
+from sklearn import datasets
+from sklearn.preprocessing import StandardScaler
+
+df = px.data.iris()
+features = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
+X = df[features]
+
+pca = PCA(n_components=2)
+components = pca.fit_transform(X)
+
+loadings = pca.components_.T * np.sqrt(pca.explained_variance_)
+
+fig = px.scatter(components, x=0, y=1, color=df['species'])
+
+for i, feature in enumerate(features):
+    fig.add_annotation(
+        ax=0, ay=0,
+        axref="x", ayref="y",
+        x=loadings[i, 0],
+        y=loadings[i, 1],
+        showarrow=True,
+        arrowsize=2,
+        arrowhead=2,
+        xanchor="right",
+        yanchor="top"
+    )
+    fig.add_annotation(
+        x=loadings[i, 0],
+        y=loadings[i, 1],
+        ax=0, ay=0,
+        xanchor="center",
+        yanchor="bottom",
+        text=feature,
+        yshift=5,
+    )
+fig.show()
+```
+
+## References
+
+Learn more about `px`, `px.scatter_3d`, and `px.scatter_matrix` here:
+* https://plot.ly/python/plotly-express/
+* https://plot.ly/python/3d-scatter-plots/
+* https://plot.ly/python/splom/
+
+The following resources offer an in-depth overview of PCA and explained variance:
+* https://en.wikipedia.org/wiki/Explained_variation
+* https://scikit-learn.org/stable/modules/decomposition.html#pca
+* https://stats.stackexchange.com/questions/2691/making-sense-of-principal-component-analysis-eigenvectors-eigenvalues/140579#140579
+* https://stats.stackexchange.com/questions/143905/loadings-vs-eigenvectors-in-pca-when-to-use-one-or-another
+* https://stats.stackexchange.com/questions/22569/pca-and-proportion-of-variance-explained
diff -Nru plotly-5.20.0+dfsg/doc/python/ml-regression.md plotly-7.1.0+dfsg1/doc/python/ml-regression.md
--- plotly-5.20.0+dfsg/doc/python/ml-regression.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ml-regression.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,566 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: Visualize regression in scikit-learn with Plotly.
+    display_as: ai_ml
+    language: python
+    layout: base
+    name: ML Regression
+    order: 1
+    page_type: u-guide
+    permalink: python/ml-regression/
+    thumbnail: thumbnail/ml-regression.png
+---
+
+<!-- #region -->
+This page shows how to use Plotly charts for displaying various types of regression models, starting from simple models like [Linear Regression](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html), and progressively move towards models like [Decision Tree][tree] and [Polynomial Features][poly]. We highlight various capabilities of plotly, such as comparative analysis of the same model with different parameters, displaying Latex, [surface plots](https://plotly.com/python/3d-surface-plots/) for 3D data, and enhanced prediction error analysis with [Plotly Express](https://plotly.com/python/plotly-express/).
+
+We will use [Scikit-learn](https://scikit-learn.org/) to split and preprocess our data and train various regression models. Scikit-learn is a popular Machine Learning (ML) library that offers various tools for creating and training ML algorithms, feature engineering, data cleaning, and evaluating and testing models. It was designed to be accessible, and to work seamlessly with popular libraries like NumPy and Pandas.
+
+
+[lasso]: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html
+[tree]: https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html
+[poly]: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html
+<!-- #endregion -->
+
+## Basic linear regression plots
+
+In this section, we show you how to apply a simple regression model for predicting tips a server will receive based on various client attributes (such as sex, time of the week, and whether they are a smoker).
+
+We will be using the [Linear Regression][lr], which is a simple model that fit an intercept (the mean tip received by a server), and add a slope for each feature we use, such as the value of the total bill. We show you how to do that with both Plotly Express and Scikit-learn.
+
+### Ordinary Least Square (OLS) with `plotly.express`
+
+This example shows [how to use `plotly.express`'s `trendline` parameter to train a simply Ordinary Least Square (OLS)](/python/linear-fits/) for predicting the tips waiters will receive based on the value of the total bill.
+
+[lr]: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(
+    df, x='total_bill', y='tip', opacity=0.65,
+    trendline='ols', trendline_color_override='darkblue'
+)
+fig.show()
+```
+
+### Linear Regression with scikit-learn
+
+You can also perform the same prediction using scikit-learn's `LinearRegression`.
+
+```python
+import numpy as np
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+
+df = px.data.tips()
+X = df.total_bill.values.reshape(-1, 1)
+
+model = LinearRegression()
+model.fit(X, df.tip)
+
+x_range = np.linspace(X.min(), X.max(), 100)
+y_range = model.predict(x_range.reshape(-1, 1))
+
+fig = px.scatter(df, x='total_bill', y='tip', opacity=0.65)
+fig.add_traces(go.Scatter(x=x_range, y=y_range, name='Regression Fit'))
+fig.show()
+```
+
+### ML Regression in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'ml-regression', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+## Model generalization on unseen data
+
+With `go.Scatter`, you can easily color your plot based on a predefined data split. By coloring the training and the testing data points with different colors, you can easily see if whether the model generalizes well to the test data or not.
+
+```python
+import numpy as np
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+from sklearn.model_selection import train_test_split
+
+df = px.data.tips()
+X = df.total_bill.to_numpy()[:, None]
+X_train, X_test, y_train, y_test = train_test_split(X, df.tip, random_state=0)
+
+model = LinearRegression()
+model.fit(X_train, y_train)
+
+x_range = np.linspace(X.min(), X.max(), 100)
+y_range = model.predict(x_range.reshape(-1, 1))
+
+fig = go.Figure([
+    go.Scatter(x=X_train.squeeze(), y=y_train, name='train', mode='markers'),
+    go.Scatter(x=X_test.squeeze(), y=y_test, name='test', mode='markers'),
+    go.Scatter(x=x_range, y=y_range, name='prediction')
+])
+fig.show()
+```
+
+## Comparing different kNN models parameters
+
+In addition to linear regression, it's possible to fit the same data using [k-Nearest Neighbors][knn]. When you perform a prediction on a new sample, this model either takes the weighted or un-weighted average of the neighbors. In order to see the difference between those two averaging options, we train a kNN model with both of those parameters, and we plot them in the same way as the previous graph.
+
+Notice how we can combine scatter points with lines using Plotly.py. You can learn more about [multiple chart types](https://plotly.com/python/graphing-multiple-chart-types/).
+
+[knn]: https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsRegressor.html
+
+```python
+import numpy as np
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.neighbors import KNeighborsRegressor
+
+df = px.data.tips()
+X = df.total_bill.values.reshape(-1, 1)
+x_range = np.linspace(X.min(), X.max(), 100)
+
+# Model #1
+knn_dist = KNeighborsRegressor(10, weights='distance')
+knn_dist.fit(X, df.tip)
+y_dist = knn_dist.predict(x_range.reshape(-1, 1))
+
+# Model #2
+knn_uni = KNeighborsRegressor(10, weights='uniform')
+knn_uni.fit(X, df.tip)
+y_uni = knn_uni.predict(x_range.reshape(-1, 1))
+
+fig = px.scatter(df, x='total_bill', y='tip', color='sex', opacity=0.65)
+fig.add_traces(go.Scatter(x=x_range, y=y_uni, name='Weights: Uniform'))
+fig.add_traces(go.Scatter(x=x_range, y=y_dist, name='Weights: Distance'))
+fig.show()
+```
+
+<!-- #region -->
+## Displaying `PolynomialFeatures` using $\LaTeX$
+
+Notice how linear regression fits a straight line, but kNN can take non-linear shapes. Moreover, it is possible to extend linear regression to polynomial regression by using scikit-learn's `PolynomialFeatures`, which lets you fit a slope for your features raised to the power of `n`, where `n=1,2,3,4` in our example.
+
+
+With Plotly, it's easy to display latex equations in legend and titles by simply adding `$` before and after your equation. This way, you can see the coefficients that our polynomial regression fitted.
+<!-- #endregion -->
+
+```python
+import numpy as np
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+from sklearn.preprocessing import PolynomialFeatures
+
+def format_coefs(coefs):
+    equation_list = [f"{coef}x^{i}" for i, coef in enumerate(coefs)]
+    equation = "$" +  " + ".join(equation_list) + "$"
+
+    replace_map = {"x^0": "", "x^1": "x", '+ -': '- '}
+    for old, new in replace_map.items():
+        equation = equation.replace(old, new)
+
+    return equation
+
+df = px.data.tips()
+X = df.total_bill.values.reshape(-1, 1)
+x_range = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)
+
+fig = px.scatter(df, x='total_bill', y='tip', opacity=0.65)
+for degree in [1, 2, 3, 4]:
+    poly = PolynomialFeatures(degree)
+    poly.fit(X)
+    X_poly = poly.transform(X)
+    x_range_poly = poly.transform(x_range)
+
+    model = LinearRegression(fit_intercept=False)
+    model.fit(X_poly, df.tip)
+    y_poly = model.predict(x_range_poly)
+
+    equation = format_coefs(model.coef_.round(2))
+    fig.add_traces(go.Scatter(x=x_range.squeeze(), y=y_poly, name=equation))
+
+fig.show()
+```
+
+## 3D regression surface with `px.scatter_3d` and `go.Surface`
+
+Visualize the decision plane of your model whenever you have more than one variable in your input data. Here, we will use [`sklearn.svm.SVR`](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html), which is a Support Vector Machine (SVM) model specifically designed for regression.
+
+```python
+import numpy as np
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.svm import SVR
+
+mesh_size = .02
+margin = 0
+
+df = px.data.iris()
+
+X = df[['sepal_width', 'sepal_length']]
+y = df['petal_width']
+
+# Condition the model on sepal width and length, predict the petal width
+model = SVR(C=1.)
+model.fit(X, y)
+
+# Create a mesh grid on which we will run our model
+x_min, x_max = X.sepal_width.min() - margin, X.sepal_width.max() + margin
+y_min, y_max = X.sepal_length.min() - margin, X.sepal_length.max() + margin
+xrange = np.arange(x_min, x_max, mesh_size)
+yrange = np.arange(y_min, y_max, mesh_size)
+xx, yy = np.meshgrid(xrange, yrange)
+
+# Run model
+pred = model.predict(np.c_[xx.ravel(), yy.ravel()])
+pred = pred.reshape(xx.shape)
+
+# Generate the plot
+fig = px.scatter_3d(df, x='sepal_width', y='sepal_length', z='petal_width')
+fig.update_traces(marker=dict(size=5))
+fig.add_traces(go.Surface(x=xrange, y=yrange, z=pred, name='pred_surface'))
+fig.show()
+```
+
+## Visualizing coefficients for multiple linear regression (MLR)
+
+Visualizing regression with one or two variables is straightforward, since we can respectively plot them with scatter plots and 3D scatter plots. Moreover, if you have more than 2 features, you will need to find alternative ways to visualize your data.
+
+One way is to use [bar charts](https://plotly.com/python/bar-charts/). In our example, each bar indicates the coefficients of our linear regression model for each input feature. Our model was trained on the [Iris dataset](https://archive.ics.uci.edu/ml/datasets/iris).
+
+```python
+import pandas as pd
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+
+df = px.data.iris()
+
+X = df.drop(columns=['petal_width', 'species_id'])
+X = pd.get_dummies(X, columns=['species'], prefix_sep='=')
+y = df['petal_width']
+
+model = LinearRegression()
+model.fit(X, y)
+
+colors = ['Positive' if c > 0 else 'Negative' for c in model.coef_]
+
+fig = px.bar(
+    x=X.columns, y=model.coef_, color=colors,
+    color_discrete_sequence=['red', 'blue'],
+    labels=dict(x='Feature', y='Linear coefficient'),
+    title='Weight of each feature for predicting petal width'
+)
+fig.show()
+```
+
+## Prediction Error Plots
+
+When you are working with very high-dimensional data, it is inconvenient to plot every dimension with your output `y`. Instead, you can use methods such as prediction error plots, which let you visualize how well your model does compared to the ground truth.
+
+
+### Simple actual vs predicted plot
+
+This example shows you the simplest way to compare the predicted output vs. the actual output. A good model will have most of the scatter dots near the diagonal black line.
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+
+df = px.data.iris()
+X = df[['sepal_width', 'sepal_length']]
+y = df['petal_width']
+
+# Condition the model on sepal width and length, predict the petal width
+model = LinearRegression()
+model.fit(X, y)
+y_pred = model.predict(X)
+
+fig = px.scatter(x=y, y=y_pred, labels={'x': 'ground truth', 'y': 'prediction'})
+fig.add_shape(
+    type="line", line=dict(dash='dash'),
+    x0=y.min(), y0=y.min(),
+    x1=y.max(), y1=y.max()
+)
+fig.show()
+```
+
+### Enhanced prediction error analysis using `plotly.express`
+
+Add marginal histograms to quickly diagnose any prediction bias your model might have. The built-in `OLS` functionality let you visualize how well your model generalizes by comparing it with the theoretical optimal fit (black dotted line).
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+from sklearn.model_selection import train_test_split
+
+df = px.data.iris()
+
+# Split data into training and test splits
+train_idx, test_idx = train_test_split(df.index, test_size=.25, random_state=0)
+df['split'] = 'train'
+df.loc[test_idx, 'split'] = 'test'
+
+X = df[['sepal_width', 'sepal_length']]
+y = df['petal_width']
+X_train = df.loc[train_idx, ['sepal_width', 'sepal_length']]
+y_train = df.loc[train_idx, 'petal_width']
+
+# Condition the model on sepal width and length, predict the petal width
+model = LinearRegression()
+model.fit(X_train, y_train)
+df['prediction'] = model.predict(X)
+
+fig = px.scatter(
+    df, x='petal_width', y='prediction',
+    marginal_x='histogram', marginal_y='histogram',
+    color='split', trendline='ols'
+)
+fig.update_traces(histnorm='probability', selector={'type':'histogram'})
+fig.add_shape(
+    type="line", line=dict(dash='dash'),
+    x0=y.min(), y0=y.min(),
+    x1=y.max(), y1=y.max()
+)
+
+fig.show()
+```
+
+## Residual plots
+
+Just like prediction error plots, it's easy to visualize your prediction residuals in just a few lines of codes using `plotly.express` built-in capabilities.
+
+```python
+import numpy as np
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LinearRegression
+from sklearn.model_selection import train_test_split
+
+df = px.data.iris()
+
+# Split data into training and test splits
+train_idx, test_idx = train_test_split(df.index, test_size=.25, random_state=0)
+df['split'] = 'train'
+df.loc[test_idx, 'split'] = 'test'
+
+X = df[['sepal_width', 'sepal_length']]
+X_train = df.loc[train_idx, ['sepal_width', 'sepal_length']]
+y_train = df.loc[train_idx, 'petal_width']
+
+# Condition the model on sepal width and length, predict the petal width
+model = LinearRegression()
+model.fit(X_train, y_train)
+df['prediction'] = model.predict(X)
+df['residual'] = df['prediction'] - df['petal_width']
+
+fig = px.scatter(
+    df, x='prediction', y='residual',
+    marginal_y='violin',
+    color='split', trendline='ols'
+)
+fig.show()
+```
+
+## Visualize regularization across cross-validation folds
+
+
+In this example, we show how to plot the results of various $\alpha$ penalization values from the results of cross-validation using scikit-learn's `LassoCV`. This is useful to see how much the error of the optimal alpha actually varies across CV folds.
+
+```python
+import numpy as np
+import pandas as pd
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.linear_model import LassoCV
+from sklearn.preprocessing import StandardScaler
+
+N_FOLD = 6
+
+# Load and preprocess the data
+df = px.data.gapminder()
+X = df.drop(columns=['lifeExp', 'iso_num'])
+X = pd.get_dummies(X, columns=['country', 'continent', 'iso_alpha'])
+y = df['lifeExp']
+
+# Normalize the data
+scaler = StandardScaler()
+X_scaled = scaler.fit_transform(X)
+
+# Train model to predict life expectancy
+model = LassoCV(cv=N_FOLD)
+model.fit(X_scaled, y)
+mean_alphas = model.mse_path_.mean(axis=-1)
+
+fig = go.Figure([
+    go.Scatter(
+        x=model.alphas_, y=model.mse_path_[:, i],
+        name=f"Fold: {i+1}", opacity=.5, line=dict(dash='dash'),
+        hovertemplate="alpha: %{x} <br>MSE: %{y}"
+    )
+    for i in range(N_FOLD)
+])
+fig.add_traces(go.Scatter(
+    x=model.alphas_, y=mean_alphas,
+    name='Mean', line=dict(color='black', width=3),
+    hovertemplate="alpha: %{x} <br>MSE: %{y}",
+))
+
+fig.add_shape(
+    type="line", line=dict(dash='dash'),
+    x0=model.alpha_, y0=0,
+    x1=model.alpha_, y1=1,
+    yref='paper'
+)
+
+fig.update_layout(
+    xaxis=dict(
+        title=dict(
+            text='alpha'
+        ),
+        type='log'
+    ),
+    yaxis=dict(
+        title=dict(
+            text='Mean Square Error (MSE)'
+        )
+    ),
+)
+fig.show()
+```
+
+## Grid search visualization using `px.density_heatmap` and `px.box`
+
+In this example, we show how to visualize the results of a grid search on a `DecisionTreeRegressor`. The first plot shows how to visualize the score of each model parameter on individual splits (grouped using facets). The second plot aggregates the results of all splits such that each box represents a single model.
+
+```python
+import numpy as np
+import pandas as pd
+import plotly.express as px
+import plotly.graph_objects as go
+from sklearn.model_selection import GridSearchCV
+from sklearn.tree import DecisionTreeRegressor
+
+N_FOLD = 6
+
+# Load and shuffle dataframe
+df = px.data.iris()
+df = df.sample(frac=1, random_state=0)
+
+X = df[['sepal_width', 'sepal_length']]
+y = df['petal_width']
+
+# Define and fit the grid
+model = DecisionTreeRegressor()
+param_grid = {
+    'criterion': ['mse', 'friedman_mse', 'mae'],
+    'max_depth': range(2, 5)
+}
+grid = GridSearchCV(model, param_grid, cv=N_FOLD)
+grid.fit(X, y)
+grid_df = pd.DataFrame(grid.cv_results_)
+
+# Convert the wide format of the grid into the long format
+# accepted by plotly.express
+melted = (
+    grid_df
+    .rename(columns=lambda col: col.replace('param_', ''))
+    .melt(
+        value_vars=[f'split{i}_test_score' for i in range(N_FOLD)],
+        id_vars=['mean_test_score', 'mean_fit_time', 'criterion', 'max_depth'],
+        var_name="cv_split",
+        value_name="r_squared"
+    )
+)
+
+# Format the variable names for simplicity
+melted['cv_split'] = (
+    melted['cv_split']
+    .str.replace('_test_score', '')
+    .str.replace('split', '')
+)
+
+# Single function call to plot each figure
+fig_hmap = px.density_heatmap(
+    melted, x="max_depth", y='criterion',
+    histfunc="sum", z="r_squared",
+    title='Grid search results on individual fold',
+    hover_data=['mean_fit_time'],
+    facet_col="cv_split", facet_col_wrap=3,
+    labels={'mean_test_score': "mean_r_squared"}
+)
+
+fig_box = px.box(
+    melted, x='max_depth', y='r_squared',
+    title='Grid search results ',
+    hover_data=['mean_fit_time'],
+    points='all',
+    color="criterion",
+    hover_name='cv_split',
+    labels={'mean_test_score': "mean_r_squared"}
+)
+
+# Display
+fig_hmap.show()
+fig_box.show()
+```
+
+### Reference
+
+Learn more about the `px` figures used in this tutorial:
+* Plotly Express: https://plot.ly/python/plotly-express/
+* Vertical Lines: https://plot.ly/python/shapes/
+* Heatmaps: https://plot.ly/python/heatmaps/
+* Box Plots: https://plot.ly/python/box-plots/
+* 3D Scatter: https://plot.ly/python/3d-scatter-plots/
+* Surface Plots: https://plot.ly/python/3d-surface-plots/
+
+Learn more about the Machine Learning models used in this tutorial:
+* https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
+* https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html
+* https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsRegressor.html
+* https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html
+* https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html
+
+Other tutorials that inspired this notebook:
+* https://seaborn.pydata.org/examples/residplot.html
+* https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_model_selection.html
+* http://www.scikit-yb.org/zh/latest/api/regressor/peplot.html
diff -Nru plotly-5.20.0+dfsg/doc/python/ml-roc-pr.md plotly-7.1.0+dfsg1/doc/python/ml-roc-pr.md
--- plotly-5.20.0+dfsg/doc/python/ml-roc-pr.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ml-roc-pr.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,312 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: Interpret the results of your classification using Receiver Operating
+      Characteristics (ROC) and Precision-Recall (PR) Curves in Python with Plotly.
+    display_as: ai_ml
+    language: python
+    layout: base
+    name: ROC and PR Curves
+    order: 3
+    page_type: u-guide
+    permalink: python/roc-and-pr-curves/
+    thumbnail: thumbnail/ml-roc-pr.png
+---
+
+## Preliminary plots
+
+Before diving into the receiver operating characteristic (ROC) curve, we will look at two plots that will give some context to the thresholds mechanism behind the ROC and PR curves.
+
+In the histogram, we observe that the score spread such that most of the positive labels are binned near 1, and a lot of the negative labels are close to 0. When we set a threshold on the score, all of the bins to its left will be classified as 0's, and everything to the right will be 1's. There are obviously a few outliers, such as **negative** samples that our model gave a high score, and *positive* samples with a low score. If we set a threshold right in the middle, those outliers will respectively become **false positives** and *false negatives*.
+
+As we adjust thresholds, the number of positive positives will increase or decrease, and at the same time the number of true positives will also change; this is shown in the second plot. As you can see, the model seems to perform fairly well, because the true positive rate decreases slowly, whereas the false positive rate decreases sharply as we increase the threshold. Those two lines each represent a dimension of the ROC curve.
+
+```python
+import plotly.express as px
+import pandas as pd
+from sklearn.linear_model import LogisticRegression
+from sklearn.metrics import roc_curve, auc
+from sklearn.datasets import make_classification
+
+X, y = make_classification(n_samples=500, random_state=0)
+
+model = LogisticRegression()
+model.fit(X, y)
+y_score = model.predict_proba(X)[:, 1]
+fpr, tpr, thresholds = roc_curve(y, y_score)
+
+# The histogram of scores compared to true labels
+fig_hist = px.histogram(
+    x=y_score, color=y, nbins=50,
+    labels=dict(color='True Labels', x='Score')
+)
+
+fig_hist.show()
+
+
+# Evaluating model performance at various thresholds
+df = pd.DataFrame({
+    'False Positive Rate': fpr,
+    'True Positive Rate': tpr
+}, index=thresholds)
+df.index.name = "Thresholds"
+df.columns.name = "Rate"
+
+fig_thresh = px.line(
+    df, title='TPR and FPR at every threshold',
+    width=700, height=500
+)
+
+fig_thresh.update_yaxes(scaleanchor="x", scaleratio=1)
+fig_thresh.update_xaxes(range=[0, 1], constrain='domain')
+fig_thresh.show()
+```
+
+## Basic binary ROC curve
+
+Notice how this ROC curve looks similar to the True Positive Rate curve from the previous plot. This is because they are the same curve, except the x-axis consists of increasing values of FPR instead of threshold, which is why the line is flipped and distorted.
+
+We also display the area under the ROC curve (ROC AUC), which is fairly high, thus consistent with our interpretation of the previous plots.
+
+```python
+import plotly.express as px
+from sklearn.linear_model import LogisticRegression
+from sklearn.metrics import roc_curve, auc
+from sklearn.datasets import make_classification
+
+X, y = make_classification(n_samples=500, random_state=0)
+
+model = LogisticRegression()
+model.fit(X, y)
+y_score = model.predict_proba(X)[:, 1]
+
+fpr, tpr, thresholds = roc_curve(y, y_score)
+
+fig = px.area(
+    x=fpr, y=tpr,
+    title=f'ROC Curve (AUC={auc(fpr, tpr):.4f})',
+    labels=dict(x='False Positive Rate', y='True Positive Rate'),
+    width=700, height=500
+)
+fig.add_shape(
+    type='line', line=dict(dash='dash'),
+    x0=0, x1=1, y0=0, y1=1
+)
+
+fig.update_yaxes(scaleanchor="x", scaleratio=1)
+fig.update_xaxes(constrain='domain')
+fig.show()
+```
+
+## ROC curve in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'roc-and-pr-curves', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+## Multiclass ROC Curve
+
+When you have more than 2 classes, you will need to plot the ROC curve for each class separately. Make sure that you use a [one-versus-rest](https://scikit-learn.org/stable/modules/multiclass.html#one-vs-the-rest) model, or make sure that your problem has a [multi-label](https://scikit-learn.org/stable/modules/multiclass.html#multilabel-classification-format) format; otherwise, your ROC curve might not return the expected results.
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+import numpy as np
+import pandas as pd
+from sklearn.linear_model import LogisticRegression
+from sklearn.metrics import roc_curve, roc_auc_score
+
+np.random.seed(0)
+
+# Artificially add noise to make task harder
+df = px.data.iris()
+samples = df.species.sample(n=50, random_state=0)
+np.random.shuffle(samples.values)
+df.loc[samples.index, 'species'] = samples.values
+
+# Define the inputs and outputs
+X = df.drop(columns=['species', 'species_id'])
+y = df['species']
+
+# Fit the model
+model = LogisticRegression(max_iter=200)
+model.fit(X, y)
+y_scores = model.predict_proba(X)
+
+# One hot encode the labels in order to plot them
+y_onehot = pd.get_dummies(y, columns=model.classes_)
+
+# Create an empty figure, and iteratively add new lines
+# every time we compute a new class
+fig = go.Figure()
+fig.add_shape(
+    type='line', line=dict(dash='dash'),
+    x0=0, x1=1, y0=0, y1=1
+)
+
+for i in range(y_scores.shape[1]):
+    y_true = y_onehot.iloc[:, i]
+    y_score = y_scores[:, i]
+
+    fpr, tpr, _ = roc_curve(y_true, y_score)
+    auc_score = roc_auc_score(y_true, y_score)
+
+    name = f"{y_onehot.columns[i]} (AUC={auc_score:.2f})"
+    fig.add_trace(go.Scatter(x=fpr, y=tpr, name=name, mode='lines'))
+
+fig.update_layout(
+    xaxis=dict(
+        title=dict(
+            text='False Positive Rate'
+        ),
+        constrain='domain'
+    ),
+    yaxis=dict(
+        title=dict(
+            text='True Positive Rate'
+        ),
+        scaleanchor='x',
+        scaleratio=1
+    ),
+    width=700, height=500
+)
+fig.show()
+```
+
+## Precision-Recall Curves
+
+Plotting the PR curve is very similar to plotting the ROC curve. The following examples are slightly modified from the previous examples:
+
+```python
+import plotly.express as px
+from sklearn.linear_model import LogisticRegression
+from sklearn.metrics import precision_recall_curve, auc
+from sklearn.datasets import make_classification
+
+X, y = make_classification(n_samples=500, random_state=0)
+
+model = LogisticRegression()
+model.fit(X, y)
+y_score = model.predict_proba(X)[:, 1]
+
+precision, recall, thresholds = precision_recall_curve(y, y_score)
+
+fig = px.area(
+    x=recall, y=precision,
+    title=f'Precision-Recall Curve (AUC={auc(recall, precision):.4f})',
+    labels=dict(x='Recall', y='Precision'),
+    width=700, height=500
+)
+fig.add_shape(
+    type='line', line=dict(dash='dash'),
+    x0=0, x1=1, y0=1, y1=0
+)
+fig.update_yaxes(scaleanchor="x", scaleratio=1)
+fig.update_xaxes(constrain='domain')
+
+fig.show()
+```
+
+In this example, we use the [average precision](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html) metric, which is an alternative scoring method to the area under the PR curve.
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+import numpy as np
+import pandas as pd
+from sklearn.linear_model import LogisticRegression
+from sklearn.metrics import precision_recall_curve, average_precision_score
+
+np.random.seed(0)
+
+# Artificially add noise to make task harder
+df = px.data.iris()
+samples = df.species.sample(n=30, random_state=0)
+np.random.shuffle(samples.values)
+df.loc[samples.index, 'species'] = samples.values
+
+# Define the inputs and outputs
+X = df.drop(columns=['species', 'species_id'])
+y = df['species']
+y_onehot = pd.get_dummies(y, columns=model.classes_)
+
+# Fit the model
+model = LogisticRegression(max_iter=200)
+model.fit(X, y)
+y_scores = model.predict_proba(X)
+
+# Create an empty figure, and iteratively add new lines
+# every time we compute a new class
+fig = go.Figure()
+fig.add_shape(
+    type='line', line=dict(dash='dash'),
+    x0=0, x1=1, y0=1, y1=0
+)
+
+for i in range(y_scores.shape[1]):
+    y_true = y_onehot.iloc[:, i]
+    y_score = y_scores[:, i]
+
+    precision, recall, _ = precision_recall_curve(y_true, y_score)
+    auc_score = average_precision_score(y_true, y_score)
+
+    name = f"{y_onehot.columns[i]} (AP={auc_score:.2f})"
+    fig.add_trace(go.Scatter(x=recall, y=precision, name=name, mode='lines'))
+
+fig.update_layout(
+    xaxis=dict(
+        title=dict(
+            text='Recall'
+        ),
+        constrain='domain'
+    ),
+    yaxis=dict(
+        title=dict(
+            text='Precision'
+        ),
+        scaleanchor='x',
+        scaleratio=1
+    ),
+    width=700, height=500
+)
+fig.show()
+```
+
+## References
+
+Learn more about `px`, `px.area`, `px.hist`:
+* https://plot.ly/python/histograms/
+* https://plot.ly/python/filled-area-plots/
+* https://plot.ly/python/line-charts/
diff -Nru plotly-5.20.0+dfsg/doc/python/ml-tsne-umap-projections.md plotly-7.1.0+dfsg1/doc/python/ml-tsne-umap-projections.md
--- plotly-5.20.0+dfsg/doc/python/ml-tsne-umap-projections.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ml-tsne-umap-projections.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,179 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: Visualize scikit-learn's t-SNE and UMAP in Python with Plotly.
+    display_as: ai_ml
+    language: python
+    layout: base
+    name: t-SNE and UMAP projections
+    order: 6
+    page_type: u-guide
+    permalink: python/t-sne-and-umap-projections/
+    thumbnail: thumbnail/tsne-umap-projections.png
+---
+
+This page presents various ways to visualize two popular dimensionality reduction techniques, namely the [t-distributed stochastic neighbor embedding](https://lvdmaaten.github.io/tsne/) (t-SNE) and [Uniform Manifold Approximation and Projection](https://umap-learn.readthedocs.io/en/latest/index.html) (UMAP). They are needed whenever you want to visualize data with more than two or three features (i.e. dimensions).
+
+We first show how to visualize data with more than three features using the [scatter plot matrix](https://medium.com/plotly/what-is-a-splom-chart-make-scatterplot-matrices-in-python-8dc4998921c3), then we apply dimensionality reduction techniques to get 2D/3D representation of our data, and visualize the results with [scatter plots](https://plotly.com/python/line-and-scatter/) and [3D scatter plots](https://plotly.com/python/3d-scatter-plots/).
+
+
+## Basic t-SNE projections
+
+t-SNE is a popular dimensionality reduction algorithm that arises from probability theory. Simply put, it projects the high-dimensional data points (sometimes with hundreds of features) into 2D/3D by inducing the projected data to have a similar distribution as the original data points by minimizing something called the [KL divergence](https://towardsdatascience.com/light-on-math-machine-learning-intuitive-guide-to-understanding-kl-divergence-2b382ca2b2a8).
+
+Compared to a method like Principal Component Analysis (PCA), it takes significantly more time to converge, but present significantly better insights when visualized. For example, by projecting features of a flowers, it will be able to distinctly group
+
+
+### Visualizing high-dimensional data with `px.scatter_matrix`
+
+First, let's try to visualize every feature of the [Iris dataset](https://archive.ics.uci.edu/ml/datasets/iris), and color everything by the species. We will use the Scatter Plot Matrix ([splom](https://plotly.com/python/splom/)), which lets us plot each feature against everything else, which is convenient when your dataset has more than 3 dimensions.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+features = ["sepal_width", "sepal_length", "petal_width", "petal_length"]
+fig = px.scatter_matrix(df, dimensions=features, color="species")
+fig.show()
+```
+
+### Project data into 2D with t-SNE and `px.scatter`
+
+Now, let's use the t-SNE algorithm to project the data shown above into two dimensions. Notice how each of the species is physically separate from each other.
+
+```python
+from sklearn.manifold import TSNE
+import plotly.express as px
+
+df = px.data.iris()
+
+features = df.loc[:, :'petal_width']
+
+tsne = TSNE(n_components=2, random_state=0)
+projections = tsne.fit_transform(features)
+
+fig = px.scatter(
+    projections, x=0, y=1,
+    color=df.species, labels={'color': 'species'}
+)
+fig.show()
+```
+
+### Project data into 3D with t-SNE and `px.scatter_3d`
+
+t-SNE can reduce your data to any number of dimensions you want! Here, we show you how to project it to 3D and visualize with a 3D scatter plot.
+
+```python
+from sklearn.manifold import TSNE
+import plotly.express as px
+
+df = px.data.iris()
+
+features = df.loc[:, :'petal_width']
+
+tsne = TSNE(n_components=3, random_state=0)
+projections = tsne.fit_transform(features, )
+
+fig = px.scatter_3d(
+    projections, x=0, y=1, z=2,
+    color=df.species, labels={'color': 'species'}
+)
+fig.update_traces(marker_size=8)
+fig.show()
+```
+
+## Projections with UMAP
+
+Just like t-SNE, [UMAP](https://umap-learn.readthedocs.io/en/latest/index.html) is a dimensionality reduction specifically designed for visualizing complex data in low dimensions (2D or 3D). As the number of data points increase, [UMAP becomes more time efficient](https://umap-learn.readthedocs.io/en/latest/benchmarking.html) compared to TSNE.
+
+In the example below, we see how easy it is to use UMAP as a drop-in replacement for scikit-learn's `manifold.TSNE`.
+
+```python
+from umap import UMAP
+import plotly.express as px
+
+df = px.data.iris()
+
+features = df.loc[:, :'petal_width']
+
+umap_2d = UMAP(n_components=2, init='random', random_state=0)
+umap_3d = UMAP(n_components=3, init='random', random_state=0)
+
+proj_2d = umap_2d.fit_transform(features)
+proj_3d = umap_3d.fit_transform(features)
+
+fig_2d = px.scatter(
+    proj_2d, x=0, y=1,
+    color=df.species, labels={'color': 'species'}
+)
+fig_3d = px.scatter_3d(
+    proj_3d, x=0, y=1, z=2,
+    color=df.species, labels={'color': 'species'}
+)
+fig_3d.update_traces(marker_size=5)
+
+fig_2d.show()
+fig_3d.show()
+```
+
+## Visualizing image datasets
+
+In the following example, we show how to visualize large image datasets using UMAP. Here, we use [`load_digits`](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html), a subset of the famous [MNIST dataset](http://yann.lecun.com/exdb/mnist/) that was downsized to 8x8 and flattened to 64 dimensions.
+
+Although there's over 1000 data points, and many more dimensions than the previous example, it is still extremely fast. This is because UMAP is optimized for speed, both from a theoretical perspective, and in the way it is implemented. Learn more in [this comparison post](https://umap-learn.readthedocs.io/en/latest/benchmarking.html).
+
+```python
+import plotly.express as px
+from sklearn.datasets import load_digits
+from umap import UMAP
+
+digits = load_digits()
+
+umap_2d = UMAP(random_state=0)
+umap_2d.fit(digits.data)
+
+projections = umap_2d.transform(digits.data)
+
+fig = px.scatter(
+    projections, x=0, y=1,
+    color=digits.target.astype(str), labels={'color': 'digit'}
+)
+fig.show()
+```
+
+<!-- #region -->
+## Reference
+
+Plotly figures:
+* https://plotly.com/python/line-and-scatter/
+* https://plotly.com/python/3d-scatter-plots/
+* https://plotly.com/python/splom/
+
+
+Details about algorithms:
+* UMAP library: https://umap-learn.readthedocs.io/en/latest/
+* t-SNE User guide: https://scikit-learn.org/stable/modules/manifold.html#t-sne
+* t-SNE paper: https://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf
+* MNIST: http://yann.lecun.com/exdb/mnist/
+<!-- #endregion -->
diff -Nru plotly-5.20.0+dfsg/doc/python/ml_apps.md plotly-7.1.0+dfsg1/doc/python/ml_apps.md
--- plotly-5.20.0+dfsg/doc/python/ml_apps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ml_apps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,35 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: AI/ML Apps with Dash
+    display_as: ai_ml
+    language: python
+    layout: base
+    name: AI/ML Apps with Dash
+    order: 5
+    page_type: example_index
+    permalink: https://plotly.com/building-machine-learning-web-apps-in-python/
+    sitemap: false
+    thumbnail: thumbnail/ml_apps.png
+---
diff -Nru plotly-5.20.0+dfsg/doc/python/multiple-axes.md plotly-7.1.0+dfsg1/doc/python/multiple-axes.md
--- plotly-5.20.0+dfsg/doc/python/multiple-axes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/multiple-axes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,446 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.0
+  plotly:
+    description: How to make a graph with multiple axes (dual y-axis plots, plots
+      with secondary axes) in python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Multiple Axes
+    order: 17
+    permalink: python/multiple-axes/
+    thumbnail: thumbnail/multiple-axes.jpg
+---
+
+### Multiple Y Axes and Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+> *Note*: At this time, Plotly Express does not support multiple Y axes on a single figure. To make such a figure, use the [`make_subplots()`](/python/subplots/) function in conjunction with [graph objects](/python/graph-objects/) as documented below.
+
+
+#### Two Y Axes
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+# Create figure with secondary y-axis
+fig = make_subplots(specs=[[{"secondary_y": True}]])
+
+# Add traces
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[40, 50, 60], name="yaxis data"),
+    secondary_y=False,
+)
+
+fig.add_trace(
+    go.Scatter(x=[2, 3, 4], y=[4, 5, 6], name="yaxis2 data"),
+    secondary_y=True,
+)
+
+# Add figure title
+fig.update_layout(
+    title_text="Double Y Axis Example"
+)
+
+# Set x-axis title
+fig.update_xaxes(title_text="xaxis title")
+
+# Set y-axes titles
+fig.update_yaxes(title_text="<b>primary</b> yaxis title", secondary_y=False)
+fig.update_yaxes(title_text="<b>secondary</b> yaxis title", secondary_y=True)
+
+fig.show()
+```
+
+### Multiple axes in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'multiple-axes', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Multiple Y-Axes Subplots
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=2, cols=2,
+                    specs=[[{"secondary_y": True}, {"secondary_y": True}],
+                           [{"secondary_y": True}, {"secondary_y": True}]])
+
+# Top left
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[2, 52, 62], name="yaxis data"),
+    row=1, col=1, secondary_y=False)
+
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[40, 50, 60], name="yaxis2 data"),
+    row=1, col=1, secondary_y=True,
+)
+
+# Top right
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[2, 52, 62], name="yaxis3 data"),
+    row=1, col=2, secondary_y=False,
+)
+
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[40, 50, 60], name="yaxis4 data"),
+    row=1, col=2, secondary_y=True,
+)
+
+# Bottom left
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[2, 52, 62], name="yaxis5 data"),
+    row=2, col=1, secondary_y=False,
+)
+
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[40, 50, 60], name="yaxis6 data"),
+    row=2, col=1, secondary_y=True,
+)
+
+# Bottom right
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[2, 52, 62], name="yaxis7 data"),
+    row=2, col=2, secondary_y=False,
+)
+
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[40, 50, 60], name="yaxis8 data"),
+    row=2, col=2, secondary_y=True,
+)
+
+fig.show()
+```
+
+#### Multiple Axes
+
+Low-level API for creating a figure with multiple axes
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1, 2, 3],
+    y=[4, 5, 6],
+    name="yaxis1 data"
+))
+
+
+fig.add_trace(go.Scatter(
+    x=[2, 3, 4],
+    y=[40, 50, 60],
+    name="yaxis2 data",
+    yaxis="y2"
+))
+
+fig.add_trace(go.Scatter(
+    x=[4, 5, 6],
+    y=[40000, 50000, 60000],
+    name="yaxis3 data",
+    yaxis="y3"
+))
+
+fig.add_trace(go.Scatter(
+    x=[5, 6, 7],
+    y=[400000, 500000, 600000],
+    name="yaxis4 data",
+    yaxis="y4"
+))
+
+
+# Create axis objects
+fig.update_layout(
+    xaxis=dict(
+        domain=[0.3, 0.7]
+    ),
+    yaxis=dict(
+        title=dict(
+            text="yaxis title",
+            font=dict(
+                color="#1f77b4"
+            )
+        ),
+    ),
+    yaxis2=dict(
+        title=dict(
+            text="yaxis2 title",
+            font=dict(
+                color="#ff7f0e"
+            )
+        ),
+        anchor="free",
+        overlaying="y",
+        side="left",
+        position=0.15
+    ),
+    yaxis3=dict(
+        title=dict(
+            text="yaxis3 title",
+            font=dict(
+                color="#d62728"
+            )
+        ),
+        anchor="x",
+        overlaying="y",
+        side="right"
+    ),
+    yaxis4=dict(
+        title=dict(
+            text="yaxis4 title",
+            font=dict(
+                color="#9467bd"
+            )
+        ),
+        anchor="free",
+        overlaying="y",
+        side="right",
+        position=0.85
+    )
+)
+
+# Update layout properties
+fig.update_layout(
+    title_text="multiple y-axes example",
+    width=800,
+)
+
+fig.show()
+```
+
+#### Automatically Shifting Axes
+
+*New in 5.12*
+
+To automatically reposition axes to avoid overlap with other axes with the same `overlaying` value, set `autoshift=True`. For `autoshift` to work on an axis, you'll also need to set `anchor="free"` on that axis.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6], name="yaxis data"))
+
+fig.add_trace(go.Scatter(x=[2, 3, 4], y=[40, 50, 60], name="yaxis2 data", yaxis="y2"))
+
+fig.add_trace(
+    go.Scatter(x=[4, 5, 6], y=[1000, 2000, 3000], name="yaxis3 data", yaxis="y3")
+)
+
+fig.add_trace(
+    go.Scatter(x=[3, 4, 5], y=[400, 500, 600], name="yaxis4 data", yaxis="y4")
+)
+
+
+fig.update_layout(
+    xaxis=dict(
+        domain=[0.25, 0.75]
+    ),
+    yaxis=dict(
+        title=dict(
+            text="yaxis title"
+        )
+    ),
+    yaxis2=dict(
+        title=dict(
+            text="yaxis2 title"
+        ),
+        overlaying="y",
+        side="right"
+    ),
+    yaxis3=dict(
+        title=dict(
+            text="yaxis3 title"
+        ),
+        anchor="free",
+        overlaying="y",
+        autoshift=True
+    ),
+    yaxis4=dict(
+        title=dict(
+            text="yaxis4 title"
+        ),
+        anchor="free",
+        overlaying="y",
+        autoshift=True
+    ),
+)
+
+fig.update_layout(
+    title_text="Shifting y-axes with autoshift",
+)
+
+fig.show()
+
+```
+
+### Shift Axes by a Specific Number of Pixels
+
+*New in 5.12*
+
+Set a `shift` value on an axis to shift an axis by that number of pixels. A positive value shifts an axis to the right. A negative value shifts it to the left. Here, we shift `yaxis4` 100 pixels further to the left.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6], name="yaxis data"))
+
+fig.add_trace(go.Scatter(x=[2, 3, 4], y=[40, 50, 60], name="yaxis2 data", yaxis="y2"))
+
+fig.add_trace(
+    go.Scatter(x=[4, 5, 6], y=[1000, 2000, 3000], name="yaxis3 data", yaxis="y3")
+)
+
+fig.add_trace(
+    go.Scatter(x=[3, 4, 5], y=[400, 500, 600], name="yaxis4 data", yaxis="y4")
+)
+
+
+fig.update_layout(
+    xaxis=dict(
+        domain=[0.25, 0.75]
+    ),
+    yaxis=dict(
+        title=dict(
+            text="yaxis title"
+        )
+    ),
+    yaxis2=dict(
+        title=dict(
+            text="yaxis2 title"
+        ),
+        overlaying="y",
+        side="right"
+    ),
+    yaxis3=dict(
+        title=dict(
+            text="yaxis3 title"
+        ),
+        anchor="free",
+        overlaying="y",
+        autoshift=True
+    ),
+    yaxis4=dict(
+        title=dict(
+            text="yaxis4 title"
+        ),
+        anchor="free",
+        overlaying="y",
+        autoshift=True,
+        shift=-100
+    ),
+)
+
+fig.update_layout(
+    title_text="Shifting y-axes by a specific number of pixels",
+)
+
+fig.show()
+
+```
+
+### Sync Axes Ticks
+
+
+*New in 5.13*
+
+Set `tickmode="sync"` on an overlaying cartesian axis to draw its ticks and gridlines at the positions of the axis it overlays, labeled from its own range. The two axes then share one grid. In this example, the `"Total bill amount"` axis syncs its ticks with the `"Total number of diners"` axis that it overlays.
+
+*Changed in 7.0*: `tickmode` defaults to `"sync"` on an overlaying axis. Earlier versions gave each axis its own independent grid. Set `tickmode="auto"` on the overlaying axis for that behavior.
+
+```python
+import plotly.graph_objects as go
+from plotly.data import tips
+
+df = tips()
+
+summed_values = df.groupby(by="day", as_index=False).sum(numeric_only=True)
+day_order_mapping = {"Thur": 0, "Fri": 1, "Sat": 2, "Sun": 3}
+summed_values["order"] = summed_values["day"].apply(lambda day: day_order_mapping[day])
+summed_values = summed_values.sort_values(by="order")
+
+days_of_week = summed_values["day"].values
+total_bills = summed_values["total_bill"].values
+number_of_diners = summed_values["size"].values
+
+
+fig = go.Figure(
+    data=go.Bar(
+        x=days_of_week,
+        y=number_of_diners,
+        name="Total number of diners",
+        marker=dict(color="paleturquoise"),
+    )
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=days_of_week,
+        y=total_bills,
+        yaxis="y2",
+        name="Total bill amount",
+        marker=dict(color="crimson"),
+    )
+)
+
+fig.update_layout(
+    legend=dict(orientation="h"),
+    yaxis=dict(
+        title=dict(text="Total number of diners"),
+        side="left",
+        range=[0, 250],
+    ),
+    yaxis2=dict(
+        title=dict(text="Total bill amount"),
+        side="right",
+        range=[0, 2000],
+        overlaying="y",
+        tickmode="sync",
+    ),
+)
+
+fig.show()
+
+```
+
+#### Reference
+All of the y-axis properties are found here: https://plotly.com/python/reference/layout/yaxis/.  For more information on creating subplots see the [Subplots in Python](/python/subplots/) section.
diff -Nru plotly-5.20.0+dfsg/doc/python/network-graphs.md plotly-7.1.0+dfsg1/doc/python/network-graphs.md
--- plotly-5.20.0+dfsg/doc/python/network-graphs.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/network-graphs.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,174 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make Network Graphs in Python with Plotly. One examples of
+      a network graph with NetworkX
+    display_as: scientific
+    language: python
+    layout: base
+    name: Network Graphs
+    order: 12
+    page_type: u-guide
+    permalink: python/network-graphs/
+    redirect_from:
+    - ipython-notebooks/networks/
+    - ipython-notebooks/network-graphs/
+    thumbnail: thumbnail/net.jpg
+---
+
+In this example we show how to visualize a network graph created using `networkx`.
+
+Install the Python library `networkx` with `pip install networkx`.
+
+
+
+### Create random graph
+
+```python
+import plotly.graph_objects as go
+
+import networkx as nx
+
+G = nx.random_geometric_graph(200, 0.125)
+```
+
+#### Create Edges
+Add edges as disconnected lines in a single trace and nodes as a scatter trace
+
+```python
+edge_x = []
+edge_y = []
+for edge in G.edges():
+    x0, y0 = G.nodes[edge[0]]['pos']
+    x1, y1 = G.nodes[edge[1]]['pos']
+    edge_x.append(x0)
+    edge_x.append(x1)
+    edge_x.append(None)
+    edge_y.append(y0)
+    edge_y.append(y1)
+    edge_y.append(None)
+
+edge_trace = go.Scatter(
+    x=edge_x, y=edge_y,
+    line=dict(width=0.5, color='#888'),
+    hoverinfo='none',
+    mode='lines')
+
+node_x = []
+node_y = []
+for node in G.nodes():
+    x, y = G.nodes[node]['pos']
+    node_x.append(x)
+    node_y.append(y)
+
+node_trace = go.Scatter(
+    x=node_x, y=node_y,
+    mode='markers',
+    hoverinfo='text',
+    marker=dict(
+        showscale=True,
+        # colorscale options
+        #'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' |
+        #'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' |
+        #'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' |
+        colorscale='YlGnBu',
+        reversescale=True,
+        color=[],
+        size=10,
+        colorbar=dict(
+            thickness=15,
+            title=dict(
+              text='Node Connections',
+              side='right'
+            ),
+            xanchor='left',
+        ),
+        line_width=2))
+
+```
+
+#### Color Node Points
+Color node points by the number of connections.
+
+Another option would be to size points by the number of connections
+i.e. ```node_trace.marker.size = node_adjacencies```
+
+```python
+node_adjacencies = []
+node_text = []
+for node, adjacencies in enumerate(G.adjacency()):
+    node_adjacencies.append(len(adjacencies[1]))
+    node_text.append('# of connections: '+str(len(adjacencies[1])))
+
+node_trace.marker.color = node_adjacencies
+node_trace.text = node_text
+```
+
+#### Create Network Graph
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[edge_trace, node_trace],
+             layout=go.Layout(
+                title=dict(
+                    text="<br>Network graph made with Python",
+                    font=dict(
+                        size=16
+                    )
+                ),
+                showlegend=False,
+                hovermode='closest',
+                margin=dict(b=20,l=5,r=5,t=40),
+                annotations=[ dict(
+                    text="Python code: <a href='https://plotly.com/python/network-graphs/'> https://plotly.com/python/network-graphs/</a>",
+                    showarrow=False,
+                    xref="paper", yref="paper",
+                    x=0.005, y=-0.002 ) ],
+                xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
+                yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
+                )
+fig.show()
+```
+
+
+### Network graphs in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash dash-cytoscape`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'network-graphs', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Reference
+See https://plotly.com/python/reference/scatter/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/ohlc-charts.md plotly-7.1.0+dfsg1/doc/python/ohlc-charts.md
--- plotly-5.20.0+dfsg/doc/python/ohlc-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ohlc-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,160 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: How to make interactive OHLC charts in Python with Plotly. Six examples
+      of OHLC charts with Pandas, time series, and yahoo finance data.
+    display_as: financial
+    language: python
+    layout: base
+    name: OHLC Charts
+    order: 5
+    permalink: python/ohlc-charts/
+    thumbnail: thumbnail/ohlc.jpg
+---
+
+The [OHLC](https://en.wikipedia.org/wiki/Open-high-low-close_chart) chart (for open, high, low and close) is a style of financial chart describing open, high, low and close values for a given `x` coordinate (most likely time). The tip of the lines represent the `low` and `high` values and the horizontal segments represent the `open` and `close` values. Sample points where the close value is higher (lower) then the open value are called increasing (decreasing). By default, increasing items are drawn in green whereas decreasing are drawn in red.
+
+See also [Candlestick Charts](https://plotly.com/python/candlestick-charts/) and [other financial charts](https://plotly.com/python/#financial-charts).
+
+#### Simple OHLC Chart with Pandas
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=go.Ohlc(x=df['Date'],
+                    open=df['AAPL.Open'],
+                    high=df['AAPL.High'],
+                    low=df['AAPL.Low'],
+                    close=df['AAPL.Close']))
+fig.show()
+```
+
+#### OHLC Chart without Rangeslider
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=go.Ohlc(x=df['Date'],
+                open=df['AAPL.Open'],
+                high=df['AAPL.High'],
+                low=df['AAPL.Low'],
+                close=df['AAPL.Close']))
+fig.update(layout_xaxis_rangeslider_visible=False)
+fig.show()
+```
+
+#### Adding Customized Text and Annotations
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=go.Ohlc(x=df['Date'],
+                open=df['AAPL.Open'],
+                high=df['AAPL.High'],
+                low=df['AAPL.Low'],
+                close=df['AAPL.Close']))
+
+fig.update_layout(
+    title=dict(text='The Great Recession'),
+    yaxis=dict(title=dict(text='AAPL Stock')),
+    shapes = [dict(
+        x0='2016-12-09', x1='2016-12-09', y0=0, y1=1, xref='x', yref='paper',
+        line_width=2)],
+    annotations=[dict(
+        x='2016-12-09', y=0.05, xref='x', yref='paper',
+        showarrow=False, xanchor='left', text='Increase Period Begins')]
+)
+
+fig.show()
+```
+
+#### Custom OHLC Colors
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=[go.Ohlc(
+    x=df['Date'],
+    open=df['AAPL.Open'], high=df['AAPL.High'],
+    low=df['AAPL.Low'], close=df['AAPL.Close'],
+    increasing_line_color= 'cyan', decreasing_line_color= 'gray'
+)])
+fig.show()
+```
+
+#### Simple OHLC with `datetime` Objects
+
+```python
+import plotly.graph_objects as go
+
+from datetime import datetime
+
+open_data = [33.0, 33.3, 33.5, 33.0, 34.1]
+high_data = [33.1, 33.3, 33.6, 33.2, 34.8]
+low_data = [32.7, 32.7, 32.8, 32.6, 32.8]
+close_data = [33.0, 32.9, 33.3, 33.1, 33.1]
+dates = [datetime(year=2013, month=10, day=10),
+         datetime(year=2013, month=11, day=10),
+         datetime(year=2013, month=12, day=10),
+         datetime(year=2014, month=1, day=10),
+         datetime(year=2014, month=2, day=10)]
+
+fig = go.Figure(data=[go.Ohlc(x=dates,
+                          open=open_data, high=high_data,
+                          low=low_data, close=close_data)])
+fig.show()
+```
+
+### Custom Hovertext
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+from datetime import datetime
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+hovertext=[]
+for i in range(len(df['AAPL.Open'])):
+    hovertext.append('Open: '+str(df['AAPL.Open'][i])+'<br>Close: '+str(df['AAPL.Close'][i]))
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(data=go.Ohlc(x=df['Date'],
+                open=df['AAPL.Open'],
+                high=df['AAPL.High'],
+                low=df['AAPL.Low'],
+                close=df['AAPL.Close'],
+                text=hovertext,
+                hoverinfo='text'))
+fig.show()
+```
+
+#### Reference
+For more information on candlestick attributes, see: https://plotly.com/python/reference/ohlc/
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/orca-management.md plotly-7.1.0+dfsg1/doc/python/orca-management.md
--- plotly-5.20.0+dfsg/doc/python/orca-management.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/orca-management.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,36 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: This section covers the low-level details of how plotly.py uses orca
+      to perform static image generation.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Orca Management
+    order: 10
+    permalink: python/orca-management/
+    thumbnail: thumbnail/orca-management.png
+---
+
+> The Orca image-generation utility is no longer supported in Plotly.py as of version 7.0.0. See the [Static Image Export page](/python/static-image-export/) for details on using Kaleido for static image generation.
diff -Nru plotly-5.20.0+dfsg/doc/python/pandas-backend.md plotly-7.1.0+dfsg1/doc/python/pandas-backend.md
--- plotly-5.20.0+dfsg/doc/python/pandas-backend.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/pandas-backend.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,200 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: Plotly Express can be used as a Pandas .plot() backend.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Pandas Plotting Backend
+    order: 33
+    permalink: python/pandas-backend/
+    redirect_from: python/cufflinks/
+    thumbnail: thumbnail/plotly-express.png
+---
+
+### Introduction
+
+The popular [Pandas](https://pandas.pydata.org/) data analysis and manipulation tool provides [plotting functions on its `DataFrame` and `Series` objects](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html), which have historically produced `matplotlib` plots. Since version 0.25, Pandas has provided a mechanism to use different backends, and as of version 4.8 of `plotly`, you can now use a [Plotly Express-powered](/python/plotly-express/) backend for Pandas plotting. This means you can now produce interactive plots directly from a data frame, without even needing to import Plotly.
+
+To activate this backend, you will need to [have Plotly installed](/python/getting-started/), and then just need to set `pd.options.plotting.backend` to `"plotly"` and call `.plot()` to get a `plotly.graph_objects.Figure` object back, just like if you had called Plotly Express directly:
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+fig = df.plot()
+fig.show()
+```
+
+This functionality wraps [Plotly Express](/python/plotly-express/) and so you can use any of the [styling options available to Plotly Express methods](/python/styling-plotly-express/). Since what you get back is a regular `Figure` object, you can use any of the update mechanisms supported by these objects to apply [templates](/python/templates/) or further customize [axes](/python/axes/), [colors](/python/colorscales/), [legends](/python/legend/), [fonts](/python/figure-labels/), [hover labels](/python/hover-text-and-formatting/) etc. [Faceting](/python/facet-plots/) is also supported.
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+fig = df.plot(title="Pandas Backend Example", template="simple_white",
+              labels=dict(index="time", value="money", variable="option"))
+fig.update_yaxes(tickprefix="$")
+fig.show()
+```
+
+### A Note on API Compatibility
+
+> The Plotly plotting backend for Pandas is *not intended* to be a drop-in replacement for the default; it does not implement all or even most of the same keyword arguments, such as `subplots=True` etc.
+
+The Plotly plotting backend for Pandas is a more convenient way to invoke certain [Plotly Express](/python/plotly-express/) functions by chaining a `.plot()` call without having to import Plotly Express directly. Plotly Express, as of version 4.8 with [wide-form data support](/python/wide-form/) in addition to its robust long-form data support, implements behaviour for the `x` and `y` keywords that are very similar to the `matplotlib` backend.
+
+In practice, this means that the following two ways of making a chart are identical and support the same additional arguments, because they call the same underlying code:
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+
+# using Plotly Express via the Pandas backend
+fig1 = df.plot.bar()
+fig1.show()
+
+# using Plotly Express directly
+import plotly.express as px
+fig2 = px.bar(df)
+fig2.show()
+```
+
+To achieve a similar effect to `subplots=True`, for example, the [Plotly Express `facet_row` and `facet_col` options](/python/facet-plots/) can be used, the same was as they work when directly calling [Plotly Express with wide-form data](/python/wide-form/):
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+
+fig = df.plot.bar(facet_row="variable")
+fig.show()
+```
+
+### Supported Methods
+
+The Plotly backend supports the following `kind`s of Pandas plots: `scatter`, `line`, `area`, `bar`, `barh`, `hist` and `box`, via the call pattern `df.plot(kind='scatter')` or `df.plot.scatter()`. These delegate to the corresponding Plotly Express functions. In addition, the following are valid options to the `kind` argument of `df.plot()`: `violin`, `strip`, `funnel`, `density_heatmap`, `density_contour` and `imshow`, even though the call pattern `df.plot.violin()` is not supported for these kinds of charts, per the Pandas API.
+
+```python
+import pandas as pd
+import numpy as np
+pd.options.plotting.backend = "plotly"
+np.random.seed(1)
+
+df = pd.DataFrame(dict(
+    a=np.random.normal(loc=1, scale=2, size=100),
+    b=np.random.normal(loc=2, scale=1, size=100)
+))
+fig = df.plot.scatter(x="a", y="b")
+fig.show()
+```
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+fig = df.plot.line()
+fig.show()
+```
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+fig = df.plot.area()
+fig.show()
+```
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+fig = df.plot.bar()
+fig.show()
+```
+
+```python
+import pandas as pd
+pd.options.plotting.backend = "plotly"
+
+df = pd.DataFrame(dict(a=[1,3,2], b=[3,2,1]))
+fig = df.plot.barh()
+fig.show()
+```
+
+```python
+import pandas as pd
+import numpy as np
+pd.options.plotting.backend = "plotly"
+np.random.seed(1)
+
+df = pd.DataFrame(dict(
+    a=np.random.normal(loc=1, scale=2, size=100),
+    b=np.random.normal(loc=2, scale=1, size=100)
+))
+fig = df.plot.hist()
+fig.show()
+```
+
+```python
+import pandas as pd
+import numpy as np
+pd.options.plotting.backend = "plotly"
+np.random.seed(1)
+
+df = pd.DataFrame(dict(
+    a=np.random.normal(loc=1, scale=2, size=100),
+    b=np.random.normal(loc=2, scale=1, size=100)
+))
+fig = df.plot.box()
+fig.show()
+```
+
+### `Series` and `DataFrame` functions: `hist` and `boxplot`
+
+The Pandas plotting API also exposes `.hist()` on `DataFrame`s and `Series` objects, and `.boxplot()` on `DataFrames`, which can also be used with the Plotly backend.
+
+```python
+import pandas as pd
+import numpy as np
+pd.options.plotting.backend = "plotly"
+np.random.seed(1)
+
+df = pd.DataFrame(dict(
+    a=np.random.normal(loc=1, scale=2, size=100),
+    b=np.random.normal(loc=2, scale=1, size=100)
+))
+fig = df.boxplot()
+fig.show()
+```
+
+### What about Cufflinks?
+
+There also exists an independent third-party wrapper library around Plotly called [Cufflinks](https://github.com/santosjorge/cufflinks), which provides similar functionality (with an API closer to that of Pandas' default `matplotlib` backend) by adding a `.iplot()` method to Pandas dataframes, as it was developed before Pandas supported configurable backends. Issues and questions regarding Cufflinks should be [raised in the Cufflinks repository](https://github.com/santosjorge/cufflinks/issues/new).
diff -Nru plotly-5.20.0+dfsg/doc/python/parallel-categories-diagram.md plotly-7.1.0+dfsg1/doc/python/parallel-categories-diagram.md
--- plotly-5.20.0+dfsg/doc/python/parallel-categories-diagram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/parallel-categories-diagram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,291 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to make parallel categories diagrams in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Parallel Categories Diagram
+    order: 8
+    page_type: u-guide
+    permalink: python/parallel-categories-diagram/
+    thumbnail: thumbnail/parcats.jpg
+---
+
+#### Parallel Categories Diagram
+
+The parallel categories diagram (also known as parallel sets or alluvial diagram) is a visualization of multi-dimensional categorical data sets. Each variable in the data set is represented by a column of rectangles, where each rectangle corresponds to a discrete value taken on by that variable. The relative heights of the rectangles reflect the relative frequency of occurrence of the corresponding value.
+
+Combinations of category rectangles across dimensions are connected by ribbons, where the height of the ribbon corresponds to the relative frequency of occurrence of the combination of categories in the data set.
+
+For other representations of multivariate data, also see [parallel coordinates](/python/parallel-coordinates-plot/), [radar charts](/python/radar-chart/) and [scatterplot matrix (SPLOM)](/python/splom/). A visually-similar but more generic type of visualization is the [sankey diagrams](/python/sankey-diagram/).
+
+#### Basic Parallel Category Diagram with plotly.express
+
+This example visualizes the restaurant bills of a sample of 244 people. Hovering over a category rectangle (sex, smoker, etc) displays a tooltip with the number of people with that single trait. Hovering over a ribbon in the diagram displays a tooltip with the number of people with a particular combination of the five traits connected by the ribbon.
+
+By default, `px.parallel_categories` will display any column in the `data_frame` that has a cardinality (or number of unique values) of less than 50. This can be overridden either by passing in a specific list of columns to `dimensions` or by setting `dimensions_max_cardinality` to something other than 50.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.parallel_categories(df)
+
+fig.show()
+```
+
+#### Style Diagram
+
+In this example `dimensions` represents a list of stings or the columns of data frame, and `labels` is a dictionary with string keys (column name) and string values ('desired label to be displayed'). See [Plotly express reference page](https://plotly.com/python-api-reference/generated/plotly.express.parallel_categories) for more information.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.parallel_categories(df, dimensions=['sex', 'smoker', 'day'],
+                color="size", color_continuous_scale=px.colors.sequential.Inferno,
+                labels={'sex':'Payer sex', 'smoker':'Smokers at the table', 'day':'Day of week'})
+fig.show()
+```
+
+### Basic Parallel Categories Diagram with `graph_objects`
+
+This example illustrates the hair color, eye color, and sex of a sample of 8 people. The dimension labels can be dragged horizontally to reorder the dimensions and the category rectangles can be dragged vertically to reorder the categories within a dimension.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Parcats(
+    dimensions=[
+        {'label': 'Hair',
+         'values': ['Black', 'Black', 'Black', 'Brown', 'Brown', 'Brown', 'Red', 'Brown']},
+        {'label': 'Eye',
+         'values': ['Brown', 'Brown', 'Brown', 'Brown', 'Brown', 'Blue', 'Blue', 'Blue']},
+        {'label': 'Sex',
+         'values': ['Female', 'Female', 'Female', 'Male', 'Female', 'Male', 'Male', 'Male']}]
+))
+
+fig.show()
+```
+
+#### Basic Parallel Categories Diagram with Counts
+
+If the frequency of occurrence for each combination of attributes is known in advance, this can be specified using the `counts` property
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Parcats(
+    dimensions=[
+        {'label': 'Hair',
+         'values': ['Black', 'Brown', 'Brown', 'Brown', 'Red']},
+        {'label': 'Eye',
+         'values': ['Brown', 'Brown', 'Brown', 'Blue', 'Blue']},
+        {'label': 'Sex',
+         'values': ['Female', 'Male', 'Female', 'Male', 'Male']}],
+    counts=[6, 10, 40, 23, 7]
+))
+
+
+fig.show()
+```
+
+#### Multi-Color Parallel Categories Diagram
+
+The color of the ribbons can be specified with the `line.color` property. Similar to other trace types, this property may be set to an array of numbers, which are then mapped to colors according to the colorscale specified in the `line.colorscale` property.
+
+Here is an example of visualizing the survival rate of passengers in the titanic dataset, where the ribbons are colored based on survival outcome.
+
+By setting the `hoveron` property to `'color'` and the `hoverinfo` property to `'count+probability'` the tooltips now display count and probability information for each color (survival outcome) per category.
+
+By setting the `arrangement` property to `'freeform'` it is now possible to drag categories horizontally to reorder dimensions as well as vertically to reorder categories within the dimension.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+titanic_df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/titanic.csv")
+
+# Create dimensions
+class_dim = go.parcats.Dimension(
+    values=titanic_df.Pclass,
+    categoryorder='category ascending', label="Class"
+)
+
+gender_dim = go.parcats.Dimension(values=titanic_df.Sex, label="Gender")
+
+survival_dim = go.parcats.Dimension(
+    values=titanic_df.Survived, label="Outcome", categoryarray=[0, 1],
+    ticktext=['perished', 'survived']
+)
+
+# Create parcats trace
+color = titanic_df.Survived;
+colorscale = [[0, 'lightsteelblue'], [1, 'mediumseagreen']];
+
+fig = go.Figure(data = [go.Parcats(dimensions=[class_dim, gender_dim, survival_dim],
+        line={'color': color, 'colorscale': colorscale},
+        hoveron='color', hoverinfo='count+probability',
+        labelfont={'size': 18, 'family': 'Times'},
+        tickfont={'size': 16, 'family': 'Times'},
+        arrangement='freeform')])
+
+fig.show()
+```
+
+#### Parallel Categories Linked Brushing
+
+This example demonstrates how the `on_selection` and `on_click` callbacks can be used to implement linked brushing between 3 categorical dimensions displayed with a `parcats` trace and 2 continuous dimensions displayed with a `scatter` trace.
+
+This example also sets the `line.shape` property to `hspline` to cause the ribbons to curve between categories.
+
+**Note:** In order for the callback functions to be executed the figure must be a `FigureWidget`, and the figure should display itself.
+
+```python
+import plotly.graph_objects as go
+from ipywidgets import widgets
+import pandas as pd
+import numpy as np
+
+cars_df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/imports-85.csv')
+
+# Build parcats dimensions
+categorical_dimensions = ['body-style', 'drive-wheels', 'fuel-type'];
+
+dimensions = [dict(values=cars_df[label], label=label) for label in categorical_dimensions]
+
+# Build colorscale
+color = np.zeros(len(cars_df), dtype='uint8')
+colorscale = [[0, 'gray'], [1, 'firebrick']]
+
+# Build figure as FigureWidget
+fig = go.FigureWidget(
+    data=[go.Scatter(x=cars_df.horsepower, y=cars_df['highway-mpg'],
+    marker={'color': 'gray'}, mode='markers', selected={'marker': {'color': 'firebrick'}},
+    unselected={'marker': {'opacity': 0.3}}), go.Parcats(
+        domain={'y': [0, 0.4]}, dimensions=dimensions,
+        line={'colorscale': colorscale, 'cmin': 0,
+              'cmax': 1, 'color': color, 'shape': 'hspline'})
+    ])
+
+fig.update_layout(
+        height=800, xaxis={'title': 'Horsepower'},
+        yaxis={'title': 'MPG', 'domain': [0.6, 1]},
+        dragmode='lasso', hovermode='closest')
+
+# Update color callback
+def update_color(trace, points, state):
+    # Update scatter selection
+    fig.data[0].selectedpoints = points.point_inds
+
+    # Update parcats colors
+    new_color = np.zeros(len(cars_df), dtype='uint8')
+    new_color[points.point_inds] = 1
+    fig.data[1].line.color = new_color
+
+# Register callback on scatter selection...
+fig.data[0].on_selection(update_color)
+# and parcats click
+fig.data[1].on_click(update_color)
+
+fig
+```
+
+![Single-color brushing](https://user-images.githubusercontent.com/15064365/48087050-4a3eae80-e1cc-11e8-94c9-c0ffcedd3aa9.gif)
+
+#### Parallel Categories with Multi-Color Linked Brushing
+
+This example extends the previous example to support brushing with multiple colors. The toggle buttons above may be used to select the active color, and this color will be applied when points are selected in the `scatter` trace and when categories or ribbons are clicked in the `parcats` trace.
+
+```python
+import plotly.graph_objects as go
+import ipywidgets as widgets
+import pandas as pd
+import numpy as np
+
+cars_df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/imports-85.csv')
+
+# Build parcats dimensions
+categorical_dimensions = ['body-style', 'drive-wheels', 'fuel-type']
+
+dimensions = [dict(values=cars_df[label], label=label) for label in categorical_dimensions]
+
+# Build colorscale
+color = np.zeros(len(cars_df), dtype='uint8')
+colorscale = [[0, 'gray'], [0.33, 'gray'],
+              [0.33, 'firebrick'], [0.66, 'firebrick'],
+              [0.66, 'blue'], [1.0, 'blue']]
+cmin = -0.5
+cmax = 2.5
+
+# Build figure as FigureWidget
+fig = go.FigureWidget(
+    data=[go.Scatter(x=cars_df.horsepower, y=cars_df['highway-mpg'],
+                marker={'color': color, 'cmin': cmin, 'cmax': cmax,
+                        'colorscale': colorscale, 'showscale': True,
+                        'colorbar': {'tickvals': [0, 1, 2], 'ticktext': ['None', 'Red', 'Blue']}},
+                     mode='markers'),
+
+      go.Parcats(domain={'y': [0, 0.4]}, dimensions=dimensions,
+                   line={'colorscale': colorscale, 'cmin': cmin,
+                   'cmax': cmax, 'color': color, 'shape': 'hspline'})]
+)
+
+fig.update_layout(height=800, xaxis={'title': 'Horsepower'},
+                  yaxis={'title': 'MPG', 'domain': [0.6, 1]},
+                  dragmode='lasso', hovermode='closest')
+
+# Build color selection widget
+color_toggle = widgets.ToggleButtons(
+    options=['None', 'Red', 'Blue'],
+    index=1, description='Brush Color:', disabled=False)
+
+# Update color callback
+def update_color(trace, points, state):
+    # Compute new color array
+    new_color = np.array(fig.data[0].marker.color)
+    new_color[points.point_inds] = color_toggle.index
+
+    with fig.batch_update():
+        # Update scatter color
+        fig.data[0].marker.color = new_color
+
+        # Update parcats colors
+        fig.data[1].line.color = new_color
+
+# Register callback on scatter selection...
+fig.data[0].on_selection(update_color)
+# and parcats click
+fig.data[1].on_click(update_color)
+
+# Display figure
+widgets.VBox([color_toggle, fig])
+```
+
+![Multi-color brushing](https://user-images.githubusercontent.com/15064365/48087055-4e6acc00-e1cc-11e8-8f0c-c8316eb4def2.gif)
+
+#### Reference
+
+See [function reference for `px.parallel_categories()`](https://plotly.com/python-api-reference/generated/plotly.express.parallel_categories) or [reference page](https://plotly.com/python/reference/parcats/) for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/parallel-coordinates-plot.md plotly-7.1.0+dfsg1/doc/python/parallel-coordinates-plot.md
--- plotly-5.20.0+dfsg/doc/python/parallel-coordinates-plot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/parallel-coordinates-plot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,209 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.7
+  kernel_info:
+    name: python2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to make parallel coordinates plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Parallel Coordinates Plot
+    order: 9
+    page_type: u-guide
+    permalink: python/parallel-coordinates-plot/
+    thumbnail: thumbnail/parcoords.jpg
+---
+
+## Parallel Coordinates plot with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/). In a parallel coordinates plot with `px.parallel_coordinates`, each row of the DataFrame is represented by a polyline mark which traverses a set of parallel axes, one for each of the dimensions. For other representations of multivariate data, also see [parallel categories](/python/parallel-categories-diagram/), [radar charts](/python/radar-chart/) and [scatterplot matrix (SPLOM)](/python/splom/).
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.parallel_coordinates(df, color="species_id", labels={"species_id": "Species",
+                "sepal_width": "Sepal Width", "sepal_length": "Sepal Length",
+                "petal_width": "Petal Width", "petal_length": "Petal Length", },
+                             color_continuous_scale=px.colors.diverging.Tealrose,
+                             color_continuous_midpoint=2)
+fig.show()
+```
+
+Parallel coordinates are richly interactive by default. Drag the lines along the axes to filter regions.
+
+Select the columns to be represented with the `dimensions` parameter.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.parallel_coordinates(df, color="species_id",
+                              dimensions=['sepal_width', 'sepal_length', 'petal_width',
+                                          'petal_length'],
+                              color_continuous_scale=px.colors.diverging.Tealrose,
+                              color_continuous_midpoint=2)
+fig.show()
+```
+
+## Parallel Coordinates Chart with go.Parcoords
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Parcoords(
+        line_color='blue',
+        dimensions = list([
+            dict(range = [1,5],
+                 constraintrange = [1,2], # change this range by dragging the pink line
+                 label = 'A', values = [1,4]),
+            dict(range = [1.5,5],
+                 tickvals = [1.5,3,4.5],
+                 label = 'B', values = [3,1.5]),
+            dict(range = [1,5],
+                 tickvals = [1,2,4,5],
+                 label = 'C', values = [2,4],
+                 ticktext = ['text 1', 'text 2', 'text 3', 'text 4']),
+            dict(range = [1,5],
+                 label = 'D', values = [4,2])
+        ])
+    )
+)
+fig.show()
+```
+
+Parallel coordinates are richly interactive by default. Drag the lines along the axes to filter regions and drag the axis names across the plot to rearrange variables.
+
+![IPython terminal](https://s3-us-west-1.amazonaws.com/plotly-tutorials/plotly-documentation/images/python_parcoords_ex1.gif)
+
+### Basic Parallel Coordinates Plot
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/bcdunbar/datasets/master/iris.csv")
+
+fig = go.Figure(data=
+    go.Parcoords(
+        line = dict(color = df['species_id'],
+                   colorscale = [[0,'purple'],[0.5,'lightseagreen'],[1,'gold']]),
+        dimensions = list([
+            dict(range = [0,8],
+                constraintrange = [4,8],
+                label = 'Sepal Length', values = df['sepal_length']),
+            dict(range = [0,8],
+                label = 'Sepal Width', values = df['sepal_width']),
+            dict(range = [0,8],
+                label = 'Petal Length', values = df['petal_length']),
+            dict(range = [0,8],
+                label = 'Petal Width', values = df['petal_width'])
+        ])
+    )
+)
+
+fig.update_layout(
+    plot_bgcolor = 'white',
+    paper_bgcolor = 'white'
+)
+
+fig.show()
+```
+
+### Advanced Parallel Coordinates Plot
+
+```python inputHidden=false outputHidden=false
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/bcdunbar/datasets/master/parcoords_data.csv")
+
+fig = go.Figure(data=
+    go.Parcoords(
+        line = dict(color = df['colorVal'],
+                   colorscale = 'Electric',
+                   showscale = True,
+                   cmin = -4000,
+                   cmax = -100),
+        dimensions = list([
+            dict(range = [32000,227900],
+                 constraintrange = [100000,150000],
+                 label = "Block Height", values = df['blockHeight']),
+            dict(range = [0,700000],
+                 label = 'Block Width', values = df['blockWidth']),
+            dict(tickvals = [0,0.5,1,2,3],
+                 ticktext = ['A','AB','B','Y','Z'],
+                 label = 'Cyclinder Material', values = df['cycMaterial']),
+            dict(range = [-1,4],
+                 tickvals = [0,1,2,3],
+                 label = 'Block Material', values = df['blockMaterial']),
+            dict(range = [134,3154],
+                 visible = True,
+                 label = 'Total Weight', values = df['totalWeight']),
+            dict(range = [9,19984],
+                 label = 'Assembly Penalty Wt', values = df['assemblyPW']),
+            dict(range = [49000,568000],
+                 label = 'Height st Width', values = df['HstW'])])
+    )
+)
+fig.show()
+```
+
+### Unselected Line Color and Opacity
+
+
+*New in 5.10*
+
+The color and opacity of unselected lines can be set with `unselected`. By setting `opacity=0`, you can hide the unselected lines. Here, we set the color to `lightgray` and the opacity to `0.5`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Parcoords(
+        line_color='blue',
+        dimensions = list([
+            dict(range = [1,5],
+                 constraintrange = [1,2], # change this range by dragging the pink line
+                 label = 'A', values = [1,4]),
+            dict(range = [1.5,5],
+                 tickvals = [1.5,3,4.5],
+                 label = 'B', values = [3,1.5]),
+            dict(range = [1,5],
+                 tickvals = [1,2,4,5],
+                 label = 'C', values = [2,4],
+                 ticktext = ['text 1', 'text 2', 'text 3', 'text 4']),
+            dict(range = [1,5],
+                 label = 'D', values = [4,2])
+        ]),
+        unselected = dict(line = dict(color = 'green', opacity = 0.5))
+    )
+)
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(parallel_coordinates)`](https://plotly.com/python-api-reference/generated/plotly.express.parallel_coordinates) or https://plotly.com/python/reference/parcoords/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/pattern-hatching-texture.md plotly-7.1.0+dfsg1/doc/python/pattern-hatching-texture.md
--- plotly-5.20.0+dfsg/doc/python/pattern-hatching-texture.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/pattern-hatching-texture.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,204 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to use patterns (also known as hatching or texture) with bar
+      charts.
+    display_as: basic
+    language: python
+    layout: base
+    name: Patterns, Hatching, Texture
+    order: 18
+    page_type: u-guide
+    permalink: python/pattern-hatching-texture/
+    thumbnail: thumbnail/pattern.png
+---
+
+*New in 5.0, with support for pie, sunburst, icicle, funnelarea, and treemap charts in 5.15*
+
+[Bar charts](/python/bar-charts/), [histograms](/python/histograms/), [polar bar charts](/python/wind-rose-charts/), [area charts](/python/filled-area-plots/), [pie charts](/python/pie-charts), [sunburst charts](/python/sunburst-charts), [funnelarea charts](/python/funnel-charts), [icicle charts](/python/icicle-charts/), and [treemap charts](/python/treemaps), have large markers or areas which support not only a fill color, but also an optional **pattern** (also known as "hatching" or "texture"). This can be used for a variety of reasons:
+
+* to double-encode variables (i.e. using both color and pattern) to improve accessibility for visually-impaired end-users
+* to encode an additional variable beyond just using color
+* to make charts that are easier to print in black and white
+
+
+### Patterned Charts with Plotly Express
+
+the `px.bar()`, `px.histogram()`, `px.bar_polar()` and `px.area()` functions support the `pattern_shape` argument. In the chart below, we double-encode `nation` using color and pattern:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation", pattern_shape="nation")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.area(df, x="medal", y="count", color="nation", pattern_shape="nation")
+fig.show()
+```
+
+In the chart below we use `px.histogram()` instead of `px.bar()` to aggregate multiple values together, and encode one variable (sex) using both color and x-position and another (smoker) using patterns:
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.histogram(df, x="sex", y="total_bill", color="sex", pattern_shape="smoker")
+fig.show()
+```
+
+### Controlling Pattern Assignment
+
+In the charts above, the first value of the variable assigned `pattern_shape` gets the empty pattern, but this (and indeed every pattern-to-variable assignment) can be controlled using `pattern_shape_sequence` and `pattern_shape_map`, analogously to the way [discrete colors](/python/discrete-color/) can be mapped using Plotly Express.
+
+Here we use `pattern_shape_sequence` to replace the defaults and include a pattern-shape for the first variable:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"])
+fig.show()
+```
+
+Here we use `pattern_shape_map` to explicitly assign a shape to each value of `nation`, regardless of order:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_map={
+             "China": ".", "Canada": "/", "South Korea": "+"
+             })
+fig.show()
+```
+
+### Black on White Patterns for Print
+
+When creating figures meant to be printed on black and white printers, it is better to *replace* the fill-color with the pattern, rather than to overlay it. This can be controlled with the `<trace>.marker.pattern.fillmode` attribute, which defaults to `"overlay"` but can be set to `"replace"` instead. Changing this attribute, and using a simpler default template and color scheme gives the following output:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"],
+             template="simple_white"
+            )
+fig.update_traces(
+    marker=dict(color="black", line_color="black", pattern_fillmode="replace")
+)
+fig.show()
+```
+
+Of course, this setting can be used without making the figure monochrome as well:
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"],
+            )
+fig.update_traces(
+    marker=dict(line_color="grey", pattern_fillmode="replace")
+)
+fig.show()
+```
+
+### Patterns using Graph Objects
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Bar` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(x=["a","b"], y=[1,2], marker_pattern_shape="."))
+fig.add_trace(go.Bar(x=["a","b"], y=[3,1], marker_pattern_shape="x"))
+fig.add_trace(go.Bar(x=["a","b"], y=[2,3], marker_pattern_shape="+"))
+
+fig.show()
+```
+
+### Patterns Using SVG Paths
+
+*New in 6.3*
+
+You can make custom patterns for graphs by using an SVG path. Set `marker.pattern.path` to the SVG path to use:
+
+```python
+import plotly.graph_objects as go
+import plotly.data
+
+df = plotly.data.gapminder().query("year == 2007 and continent == 'Europe'").copy()
+df['gdp'] = df['gdpPercap'] * df['pop']
+df = df.sort_values('gdp', ascending=False).head(4)
+
+fig = go.Figure(
+    data=[go.Bar(
+        x=df['country'],
+        y=df['gdp'],
+        marker=dict(
+            color=["lightsteelblue", "mistyrose", "palegreen", "thistle"],
+            pattern=dict(
+                path=[
+                    "M0,0H4V4H0Z",
+                    "M0,0H6V6Z",
+                    "M0,0V4H4Z",
+                    "M0,0C0,2,4,2,4,4C4,6,0,6,0,8H2C2,6,6,6,6,4C6,2,2,2,2,0Z"
+                ],
+                fgcolor=["midnightblue", "crimson", "seagreen", "indigo"],
+                bgcolor=["mintcream", "lavenderblush", "azure", "honeydew"],
+                size=20,
+                solidity=0.7
+            )
+        ),
+        name="GDP (2007)"
+    )],
+    layout=dict(
+        title="Top 4 European Countries by GDP (Gapminder 2007) with Custom SVG Path Patterns",
+        xaxis_title="Country",
+        yaxis_title="GDP (USD)",
+        yaxis_tickformat="$.2s",
+        width=800,
+        height=500,
+        bargap=0.3
+    )
+)
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/bar/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/peak-finding.md plotly-7.1.0+dfsg1/doc/python/peak-finding.md
--- plotly-5.20.0+dfsg/doc/python/peak-finding.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/peak-finding.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,136 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: "1.1"
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: Learn how to find peaks and valleys on datasets in Python
+    display_as: advanced_opt
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Peak Finding
+    order: 3
+    page_type: example_index
+    permalink: python/peak-finding/
+    thumbnail: /images/static-image
+---
+
+#### Imports
+
+The tutorial below imports [Pandas](https://pandas.pydata.org/docs/user_guide/10min.html), and [SciPy](https://www.scipy.org/).
+
+```python
+import pandas as pd
+from scipy.signal import find_peaks
+```
+
+#### Import Data
+
+To start detecting peaks, we will import some data on milk production by month:
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+milk_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv')
+time_series = milk_data['Monthly milk production (pounds per cow)']
+
+fig = go.Figure(data=go.Scatter(
+    y = time_series,
+    mode = 'lines'
+))
+
+fig.show()
+```
+
+#### Peak Detection
+
+We need to find the x-axis indices for the peaks in order to determine where the peaks are located.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+from scipy.signal import find_peaks
+
+milk_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv')
+time_series = milk_data['Monthly milk production (pounds per cow)']
+
+indices = find_peaks(time_series)[0]
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    y=time_series,
+    mode='lines+markers',
+    name='Original Plot'
+))
+
+fig.add_trace(go.Scatter(
+    x=indices,
+    y=[time_series[j] for j in indices],
+    mode='markers',
+    marker=dict(
+        size=8,
+        color='red',
+        symbol='cross'
+    ),
+    name='Detected Peaks'
+))
+
+fig.show()
+```
+
+#### Only Highest Peaks
+
+We can attempt to set our threshold so that we identify as many of the _highest peaks_ that we can.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+import pandas as pd
+from scipy.signal import find_peaks
+
+milk_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv')
+time_series = milk_data['Monthly milk production (pounds per cow)']
+
+indices = find_peaks(time_series, threshold=20)[0]
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    y=time_series,
+    mode='lines+markers',
+    name='Original Plot'
+))
+
+fig.add_trace(go.Scatter(
+    x=indices,
+    y=[time_series[j] for j in indices],
+    mode='markers',
+    marker=dict(
+        size=8,
+        color='red',
+        symbol='cross'
+    ),
+    name='Detected Peaks'
+))
+
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/performance.md plotly-7.1.0+dfsg1/doc/python/performance.md
--- plotly-5.20.0+dfsg/doc/python/performance.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/performance.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,315 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: Recommendations for increased speed, improved interactivity, and
+      the ability to plot even more data!
+    display_as: basic
+    language: python
+    layout: base
+    name: High Performance Visualization
+    order: 14
+    permalink: python/performance/
+    redirect_from:
+    - python/webgl-vs-svg/
+    - python/datashader/
+    thumbnail: thumbnail/webgl.jpg
+---
+
+## DataFrame Types
+
+*New in Plotly.py version 6*
+
+Plotly Express natively supports various dataframe libraries, including pandas, Polars, and PyArrow. When building figures with Plotly Express, changing your dataframe library may help improve performance.
+
+In versions of Plotly.py prior to version 6, Plotly Express functions accepted non-pandas dataframes as input but used the [dataframe interchange protocol](https://data-apis.org/dataframe-protocol/latest/) or converted those dataframes to pandas internally.
+
+See [the Plotly Express Arguments page](/python/px-arguments) for full details on supported dataframe libraries.
+
+## NumPy and NumPy Convertible Arrays for Improved Performance
+
+*New in Plotly.py version 6*
+
+You can improve the performance of generating Plotly figures that use a large number of data points by passing data as NumPy arrays, or in a format that Plotly can convert easily to NumPy arrays, such as pandas and Polars Series or DataFrames. These formats will usually show better performance than passing data as a Python list.
+
+Plotly.py uses Plotly.js for rendering, which supports typed arrays. In Plotly.py, NumPy arrays and NumPy-convertible arrays are base64 encoded before being passed to Plotly.js for rendering.
+
+### Arrays and Data Types Supported
+
+The following types of objects in Python are supported for base64 encoding for rendering with Plotly.js.
+
+- NumPy `numpy.ndarray` objects.
+- pandas Index, pandas Series, Polars Series, and PyArrow Chunked Array objects.
+- When working with Plotly Express, pandas DataFrame, Polars DataFrame and PyArrow DataFrame objects passed to the `data_frame` argument of `px` functions.
+- Array objects that can be converted to `numpy.ndarray` objects, i.e., they implement `"__array__"` or `"__array_interface__"` and return a `numpy.ndarray`.
+
+The following [array data types](https://numpy.org/devdocs/reference/arrays.scalars.html) are supported:
+
+- float32
+- float64
+- int8
+- uint8
+- int16
+- uint16
+- int32
+- uint32
+
+*If the array dtype is **int64** or **uint64**, often the default dtype for arrays in NumPy when no dtype is specified, those dtypes will be changed to supported types internally by Plotly.py where possible. When working with NumPy directly, you can [also specify the `dtype`](https://numpy.org/doc/stable/user/basics.types.html#array-types-and-conversions-between-types) when creating `ndarray` objects, and Plotly.py won't need to make the conversion internally.
+
+Arrays or data types that are not supported for base64 encoding to Plotly.js's typed arrays specification will still work and render correctly with Plotly. Those arrays and or data types just won't have the performance benefits that Plotly.js's base64 typed arrays feature provides.
+
+### Dash Design Kit Compatibility
+
+The Dash Design Kit `Graph` component from versions of Dash Design Kit earlier than 1.13 doesn't work with Plotly.py version 6 when using Python objects listed in the previous "Arrays and Data Types Supported". Upgrade Dash Design Kit to 1.13 or later to resolve this issue.
+
+### Unsupported Attributes
+
+Arrays passed to attributes with the following names are not supported for base64 encoding for rendering with Plotly.js.
+
+`geojson`, `layers`, and `range`.
+
+Attributes that are not supported for base64 encoding to Plotly.js's typed arrays specification will still work and render correctly. Those attributes just won't have the performance benefits that Plotly.js's base64 typed arrays feature provides.
+
+### Example with NumPy Arrays
+
+Here, we use NumPy arrays with a `go.Scatter3d` figure.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+np.random.seed(1)
+
+# Number of data points
+N = 10000
+
+# Generate random data
+x = np.random.randn(N)
+y = np.random.randn(N).astype('float32')
+z = np.random.randint(size=N, low=0, high=256, dtype='uint8')
+c = np.random.randint(size=N, low=-10, high=10, dtype='int8')
+
+fig = go.Figure(data=[go.Scatter3d(
+    x=x,
+    y=y,
+    z=z,
+    marker=dict(color=c),
+    mode='markers',
+    opacity=0.2
+)])
+
+fig.show()
+```
+
+## WebGL
+
+`plotly` figures are rendered by web browsers, which broadly speaking have two families of capabilities for rendering graphics:
+
+- The SVG API, which supports vector rendering.
+- The Canvas API, which supports raster rendering, and can exploit GPU hardware acceleration via a browser technology known as WebGL.
+
+Each `plotly` trace type is rendered with either SVG or WebGL. The following trace types use WebGL for rendering:
+
+* Accelerated versions of SVG trace types: `scattergl`, `scatterpolargl`,
+* High-performance multidimensional trace types: `splom`, or `parcoords`
+* 3D trace types `scatter3d`, `surface`, `mesh3d`, `cone`, `streamtube`, `isosurface`, `volume`
+* MapLibre GL JS-powered trace types: `scattermap`, `choroplethmap`, `densitymap`
+
+### WebGL Limitations and Tradeoffs
+
+WebGL is a powerful technology for accelerating rendering but comes with some strict limitations:
+
+1. GPU requirement: WebGL is a GPU (graphics card) technology and therefore requires specific hardware which is available in most but not all cases and is supported by most but not all browsers.
+2. Rasterization: WebGL-rendered data is drawn as a grid of pixels rather than as individual shapes, so can appear pixelated or fuzzy in certain cases. This also applies to static export: when a figure with WebGL traces is exported to a *vector* format such as SVG or PDF, the WebGL traces are embedded as an encapsulated raster (a bitmap) rather than as true vectors, so those parts will appear pixelated on zoom. To force fully-vector output, use `render_mode="svg"` to supported Plotly Express functions (see [WebGL with Plotly Express](#webgl-with-plotly-express) below). In addition, text rendering will differ between SVG and WebGL-powered traces.
+3. Context limits: browsers impose a strict limit on the number of WebGL "contexts" that any given web document can access. WebGL-powered traces in `plotly` can use multiple contexts in some cases but as a general rule, **it may not be possible to render more than 8 WebGL-involving figures on the same page at the same time.** See the following section, Multiple WebGL Contexts, for more details.
+4. Size limits: browsers impose hardware-dependent limits on the height and width of figures using WebGL which users may encounter with extremely large plots (e.g. tens of thousands of pixels of height).
+
+In addition to the above limitations, the WebGL-powered version of certain SVG-powered trace types (`scattergl`, `scatterpolargl`) are not complete drop-in replacements for their SVG counterparts yet
+* Available symbols will differ.
+* Area fills are not yet supported in WebGL.
+* Range breaks on time-series axes are not yet supported.
+* Axis range heuristics may differ.
+
+#### Multiple WebGL Contexts
+
+*New in 5.19*
+
+Most browsers have a limit of between 8 and 16 WebGL contexts per page. A Plotly WebGL-based figure may use multiple WebGL contexts, but generally you'll be able to render between 4 and 8 figures on one page.
+
+If you exceed the browser limit on WebGL contexts, some figures won't render and you'll see an error. In the console in Chrome, for example, you'll see the error: "Too many active WebGL contexts. Oldest context will be lost".
+
+If you encounter WebGL context limits when using WebGL-based figures, you can use [Virtual WebGL](https://github.com/greggman/virtual-webgl), which virtualizes a single WebGL context into multiple contexts.
+
+To use it, in the environment where your Plotly figures are being rendered, load the Virtual WebGL script, "https://unpkg.com/virtual-webgl@1.0.6/src/virtual-webgl.js", for example, using a `<script>` tag. Performance when using Virtual WebGL will be slower than when not using Virtual WebGL.
+
+In a Jupyter notebook environment that supports magic commands, you can load it with the [HTML magic command](https://ipython.readthedocs.io/en/stable/interactive/magics.html#cellmagic-html):
+
+
+```
+%%html
+<script src=“https://unpkg.com/virtual-webgl@1.0.6/src/virtual-webgl.js”></script>
+```
+
+
+### WebGL for Scatter Performance
+
+In the examples below we show that it is possible to represent up to around a million points with WebGL-enabled traces.
+For larger datasets, or for a clearer visualization of the density of points,
+it is also possible to use [datashader](/python/datashader/).
+
+### WebGL with Plotly Express
+
+The `render_mode` argument to supported Plotly Express functions (e.g. `scatter` and `scatter_polar`) can be used to enable WebGL rendering.
+
+> **Note** The default `render_mode` is `"auto"`, in which case Plotly Express will automatically set `render_mode="webgl"` if the input data is more than 1,000 rows long. In this case, WebGL can be disabled by setting `render_mode="svg"`. Because WebGL traces are embedded as rasters rather than vectors when [exported to a static vector format](/python/static-image-export/) such as SVG or PDF, set `render_mode="svg"` if you need fully-vector output from a large scatter figure.
+
+Here is an example that creates a 100,000 point scatter plot using Plotly Express with WebGL rendering explicitly enabled.
+
+```python
+import plotly.express as px
+
+import pandas as pd
+import numpy as np
+
+np.random.seed(1)
+
+N = 100000
+
+df = pd.DataFrame(dict(x=np.random.randn(N),
+                       y=np.random.randn(N)))
+
+fig = px.scatter(df, x="x", y="y", render_mode='webgl')
+
+fig.update_traces(marker_line=dict(width=1, color='DarkSlateGray'))
+
+fig.show()
+```
+
+
+#### WebGL with 1,000,000 points with Graph Objects
+
+If Plotly Express does not provide a good starting point for creating a chart, you can use [the more generic `go.Scattergl` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+N = 1_000_000
+
+fig = go.Figure()
+
+fig.add_trace(
+    go.Scattergl(
+        x = np.random.randn(N),
+        y = np.random.randn(N),
+        mode = 'markers',
+        marker = dict(
+            line = dict(
+                width = 1,
+                color = 'DarkSlateGrey')
+        )
+    )
+)
+
+fig.show()
+```
+
+See https://plotly.com/python/reference/scattergl/ for more information and chart attribute options!
+
+## Datashader
+
+Use [Datashader](https://datashader.org/) to reduce the size of a dataset passed to the browser for rendering by creating a rasterized representation of the dataset. This makes it ideal for working with datasets of tens to hundreds of millions of points.
+
+### Passing Datashader Rasters as a Tile Map Image Layer
+
+The following example shows the spatial distribution of taxi rides in New York City, which are concentrated on major avenues. For more details about tile-based maps, see [the tile map layers tutorial](/python/tile-map-layers).
+
+```python
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/uber-rides-data1.csv')
+dff = df.query('Lat < 40.82').query('Lat > 40.70').query('Lon > -74.02').query('Lon < -73.91')
+
+import datashader as ds
+cvs = ds.Canvas(plot_width=1000, plot_height=1000)
+agg = cvs.points(dff, x='Lon', y='Lat')
+# agg is an xarray object, see http://xarray.pydata.org/en/stable/ for more details
+coords_lat, coords_lon = agg.coords['Lat'].values, agg.coords['Lon'].values
+# Corners of the image
+coordinates = [[coords_lon[0], coords_lat[0]],
+               [coords_lon[-1], coords_lat[0]],
+               [coords_lon[-1], coords_lat[-1]],
+               [coords_lon[0], coords_lat[-1]]]
+
+from colorcet import fire
+import datashader.transfer_functions as tf
+img = tf.shade(agg, cmap=fire)[::-1].to_pil()
+
+import plotly.express as px
+# Trick to create rapidly a figure with map axes
+fig = px.scatter_map(dff[:1], lat='Lat', lon='Lon', zoom=12)
+# Add the datashader image as a tile map layer image
+fig.update_layout(
+    map_style="carto-darkmatter",
+    map_layers=[{"sourcetype": "image", "source": img, "coordinates": coordinates}],
+)
+fig.show()
+```
+
+### Exploring Correlations of a Large Dataset
+
+Here we explore the flight delay dataset from https://www.kaggle.com/usdot/flight-delays. In order to get a visual impression of the correlation between features, we generate a datashader rasterized array which we plot using a `Heatmap` trace. It creates a much clearer visualization than a scatter plot of (even a fraction of) the data points, as shown below.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+import numpy as np
+import datashader as ds
+df = pd.read_parquet('https://raw.githubusercontent.com/plotly/datasets/master/2015_flights.parquet')
+fig = go.Figure(go.Scattergl(x=df['SCHEDULED_DEPARTURE'][::200],
+                             y=df['DEPARTURE_DELAY'][::200],
+                             mode='markers')
+)
+fig.update_layout(title_text='A busy plot')
+fig.show()
+```
+
+```python
+import plotly.express as px
+import pandas as pd
+import numpy as np
+import datashader as ds
+df = pd.read_parquet('https://raw.githubusercontent.com/plotly/datasets/master/2015_flights.parquet')
+
+cvs = ds.Canvas(plot_width=100, plot_height=100)
+agg = cvs.points(df, 'SCHEDULED_DEPARTURE', 'DEPARTURE_DELAY')
+zero_mask = agg.values == 0
+agg.values = np.log10(agg.values, where=np.logical_not(zero_mask))
+agg.values[zero_mask] = np.nan
+fig = px.imshow(agg, origin='lower', labels={'color':'Log10(count)'})
+fig.update_traces(hoverongaps=False)
+fig.update_layout(coloraxis_colorbar=dict(title='Count', tickprefix='1.e'))
+fig.show()
+```
+
+Instead of using Datashader, it would theoretically be possible to create a [2d histogram](/python/2d-histogram-contour/) with Plotly, but this is not recommended because you would need to load the whole dataset of around 5M rows in the browser for plotly.js to compute the heatmap.
diff -Nru plotly-5.20.0+dfsg/doc/python/pie-charts.md plotly-7.1.0+dfsg1/doc/python/pie-charts.md
--- plotly-5.20.0+dfsg/doc/python/pie-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/pie-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,352 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make Pie Charts.
+    display_as: basic
+    language: python
+    layout: base
+    name: Pie Charts
+    order: 4
+    page_type: example_index
+    permalink: python/pie-charts/
+    thumbnail: thumbnail/pie-chart.jpg
+---
+
+A pie chart is a circular statistical chart, which is divided into sectors to illustrate numerical proportion.
+
+If you're looking instead for a multilevel hierarchical pie-like chart, go to the
+[Sunburst tutorial](/python/sunburst-charts/).
+
+### Pie chart with plotly express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+In `px.pie`, data visualized by the sectors of the pie is set in `values`. The sector labels are set in `names`.
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
+df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
+fig = px.pie(df, values='pop', names='country', title='Population of European continent')
+fig.show()
+```
+
+### Pie chart with repeated labels
+
+Lines of the dataframe with the same value for `names` are grouped together in the same sector.
+
+```python
+import plotly.express as px
+# This dataframe has 244 lines, but 4 distinct values for `day`
+df = px.data.tips()
+fig = px.pie(df, values='tip', names='day')
+fig.show()
+```
+
+### Pie chart in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'pie-charts', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Setting the color of pie sectors with px.pie
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.pie(df, values='tip', names='day', color_discrete_sequence=px.colors.sequential.RdBu)
+fig.show()
+```
+
+### Using an explicit mapping for discrete colors
+
+For more information about discrete colors, see the [dedicated page](/python/discrete-color).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.pie(df, values='tip', names='day', color='day',
+             color_discrete_map={'Thur':'lightcyan',
+                                 'Fri':'cyan',
+                                 'Sat':'royalblue',
+                                 'Sun':'darkblue'})
+fig.show()
+```
+
+### Customizing a pie chart created with px.pie
+
+In the example below, we first create a pie chart with `px,pie`, using some of its options such as `hover_data` (which columns should appear in the hover) or `labels` (renaming column names). For further tuning, we call `fig.update_traces` to set other parameters of the chart (you can also use `fig.update_layout` for changing the layout).
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007").query("continent == 'Americas'")
+fig = px.pie(df, values='pop', names='country',
+             title='Population of American continent',
+             hover_data=['lifeExp'], labels={'lifeExp':'life expectancy'})
+fig.update_traces(textposition='inside', textinfo='percent+label')
+fig.show()
+```
+
+### Basic Pie Chart with go.Pie
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Pie` class from `plotly.graph_objects`](/python/graph-objects/).
+
+In `go.Pie`, data visualized by the sectors of the pie is set in `values`. The sector labels are set in `labels`. The sector colors are set in `marker.colors`.
+
+If you're looking instead for a multilevel hierarchical pie-like chart, go to the
+[Sunburst tutorial](/python/sunburst-charts/).
+
+```python
+import plotly.graph_objects as go
+
+labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
+values = [4500, 2500, 1053, 500]
+
+fig = go.Figure(data=[go.Pie(labels=labels, values=values)])
+fig.show()
+```
+
+### Styled Pie Chart
+
+Colors can be given as RGB triplets or hexadecimal strings, or with [CSS color names](https://www.w3schools.com/cssref/css_colors.asp) as below.
+
+```python
+import plotly.graph_objects as go
+colors = ['gold', 'mediumturquoise', 'darkorange', 'lightgreen']
+
+fig = go.Figure(data=[go.Pie(labels=['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'],
+                             values=[4500,2500,1053,500])])
+fig.update_traces(hoverinfo='label+percent', textinfo='value', textfont_size=20,
+                  marker=dict(colors=colors, line=dict(color='#000000', width=2)))
+fig.show()
+```
+
+### Controlling text fontsize with uniformtext
+
+If you want all the text labels to have the same size, you can use the `uniformtext` layout parameter. The `minsize` attribute sets the font size, and the `mode` attribute sets what happens for labels which cannot fit with the desired fontsize: either `hide` them or `show` them with overflow. In the example below we also force the text to be inside with `textposition`, otherwise text labels which do not fit are displayed outside of pie sectors.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Asia'")
+fig = px.pie(df, values='pop', names='country')
+fig.update_traces(textposition='inside')
+fig.update_layout(uniformtext_minsize=12, uniformtext_mode='hide')
+fig.show()
+```
+
+#### Controlling text orientation inside pie sectors
+
+The `insidetextorientation` attribute controls the orientation of text inside sectors. With
+"auto" the texts may automatically be rotated to fit with the maximum size inside the slice. Using "horizontal" (resp. "radial", "tangential") forces text to be horizontal (resp. radial or tangential)
+
+For a figure `fig` created with plotly express, use `fig.update_traces(insidetextorientation='...')` to change the text orientation.
+
+```python
+import plotly.graph_objects as go
+
+labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
+values = [4500, 2500, 1053, 500]
+
+fig = go.Figure(data=[go.Pie(labels=labels, values=values, textinfo='label+percent',
+                             insidetextorientation='radial'
+                            )])
+fig.show()
+```
+
+### Donut Chart
+
+```python
+import plotly.graph_objects as go
+
+labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
+values = [4500, 2500, 1053, 500]
+
+# Use `hole` to create a donut-like pie chart
+fig = go.Figure(data=[go.Pie(labels=labels, values=values, hole=.3)])
+fig.show()
+```
+
+### Pulling sectors out from the center
+
+For a "pulled-out" or "exploded" layout of the pie chart, use the `pull` argument. It can be a scalar for pulling all sectors or an array to pull only some of the sectors.
+
+```python
+import plotly.graph_objects as go
+
+labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
+values = [4500, 2500, 1053, 500]
+
+# pull is given as a fraction of the pie radius
+fig = go.Figure(data=[go.Pie(labels=labels, values=values, pull=[0, 0, 0.2, 0])])
+fig.show()
+```
+
+### Pie Charts in subplots
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+labels = ["US", "China", "European Union", "Russian Federation", "Brazil", "India",
+          "Rest of World"]
+
+# Create subplots: use 'domain' type for Pie subplot
+fig = make_subplots(rows=1, cols=2, specs=[[{'type':'domain'}, {'type':'domain'}]])
+fig.add_trace(go.Pie(labels=labels, values=[16, 15, 12, 6, 5, 4, 42], name="GHG Emissions"),
+              1, 1)
+fig.add_trace(go.Pie(labels=labels, values=[27, 11, 25, 8, 1, 3, 25], name="CO2 Emissions"),
+              1, 2)
+
+# Use `hole` to create a donut-like pie chart
+fig.update_traces(hole=.4, hoverinfo="label+percent+name")
+
+fig.update_layout(
+    title_text="Global Emissions 1990-2011",
+    # Add annotations in the center of the donut pies.
+    annotations=[dict(text='GHG', x=sum(fig.get_subplot(1, 1).x) / 2, y=0.5,
+                      font_size=20, showarrow=False, xanchor="center"),
+                 dict(text='CO2', x=sum(fig.get_subplot(1, 2).x) / 2, y=0.5,
+                      font_size=20, showarrow=False, xanchor="center")])
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+labels = ['1st', '2nd', '3rd', '4th', '5th']
+
+# Define color sets of paintings
+night_colors = ['rgb(56, 75, 126)', 'rgb(18, 36, 37)', 'rgb(34, 53, 101)',
+                'rgb(36, 55, 57)', 'rgb(6, 4, 4)']
+sunflowers_colors = ['rgb(177, 127, 38)', 'rgb(205, 152, 36)', 'rgb(99, 79, 37)',
+                     'rgb(129, 180, 179)', 'rgb(124, 103, 37)']
+irises_colors = ['rgb(33, 75, 99)', 'rgb(79, 129, 102)', 'rgb(151, 179, 100)',
+                 'rgb(175, 49, 35)', 'rgb(36, 73, 147)']
+cafe_colors =  ['rgb(146, 123, 21)', 'rgb(177, 180, 34)', 'rgb(206, 206, 40)',
+                'rgb(175, 51, 21)', 'rgb(35, 36, 21)']
+
+# Create subplots, using 'domain' type for pie charts
+specs = [[{'type':'domain'}, {'type':'domain'}], [{'type':'domain'}, {'type':'domain'}]]
+fig = make_subplots(rows=2, cols=2, specs=specs)
+
+# Define pie charts
+fig.add_trace(go.Pie(labels=labels, values=[38, 27, 18, 10, 7], name='Starry Night',
+                     marker_colors=night_colors), 1, 1)
+fig.add_trace(go.Pie(labels=labels, values=[28, 26, 21, 15, 10], name='Sunflowers',
+                     marker_colors=sunflowers_colors), 1, 2)
+fig.add_trace(go.Pie(labels=labels, values=[38, 19, 16, 14, 13], name='Irises',
+                     marker_colors=irises_colors), 2, 1)
+fig.add_trace(go.Pie(labels=labels, values=[31, 24, 19, 18, 8], name='The Night Café',
+                     marker_colors=cafe_colors), 2, 2)
+
+# Tune layout and hover info
+fig.update_traces(hoverinfo='label+percent+name', textinfo='none')
+fig.update(layout_title_text='Van Gogh: 5 Most Prominent Colors Shown Proportionally',
+           layout_showlegend=False)
+
+fig = go.Figure(fig)
+fig.show()
+```
+
+#### Plot chart with area proportional to total count
+
+Plots in the same `scalegroup` are represented with an area proportional to their total size.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+labels = ["Asia", "Europe", "Africa", "Americas", "Oceania"]
+
+fig = make_subplots(1, 2, specs=[[{'type':'domain'}, {'type':'domain'}]],
+                    subplot_titles=['1980', '2007'])
+fig.add_trace(go.Pie(labels=labels, values=[4, 7, 1, 7, 0.5], scalegroup='one',
+                     name="World GDP 1980"), 1, 1)
+fig.add_trace(go.Pie(labels=labels, values=[21, 15, 3, 19, 1], scalegroup='one',
+                     name="World GDP 2007"), 1, 2)
+
+fig.update_layout(title_text='World GDP')
+fig.show()
+```
+
+### Pattern Fills
+
+*New in 5.15*
+
+Pie charts support [patterns](/python/pattern-hatching-texture/) (also known as hatching or texture) in addition to color.
+
+```python
+import plotly.graph_objects as go
+
+labels = ["Oxygen", "Hydrogen", "Carbon_Dioxide", "Nitrogen"]
+values = [4500, 2500, 1053, 500]
+colors = ["gold", "mediumturquoise", "darkorange", "lightgreen"]
+
+fig = go.Figure(
+    data=[
+        go.Pie(
+            labels=labels,
+            values=values,
+            textfont_size=20,
+            marker=dict(colors=colors, pattern=dict(shape=[".", "x", "+", "-"]))
+        )
+    ]
+)
+
+fig.show()
+```
+
+### See Also: Sunburst charts
+
+For multilevel pie charts representing hierarchical data, you can use the `Sunburst` chart. A simple example is given below, for more information see the [tutorial on Sunburst charts](/python/sunburst-charts/).
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Sunburst(
+    labels=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
+    values=[10, 14, 12, 10, 2, 6, 6, 4, 4],
+))
+fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))
+
+fig.show()
+
+```
+
+#### Reference
+
+See [function reference for `px.pie()`](https://plotly.com/python-api-reference/generated/plotly.express.pie) or https://plotly.com/python/reference/pie/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/plot-data-from-csv.md plotly-7.1.0+dfsg1/doc/python/plot-data-from-csv.md
--- plotly-5.20.0+dfsg/doc/python/plot-data-from-csv.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/plot-data-from-csv.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,96 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to create charts from csv files with Plotly and Python
+    display_as: advanced_opt
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Plot CSV Data
+    order: 1
+    page_type: example_index
+    permalink: python/plot-data-from-csv/
+    thumbnail: thumbnail/csv.jpg
+---
+
+CSV or comma-delimited-values is a very popular format for storing structured data. In this tutorial, we will see how to plot beautiful graphs using csv data, and Pandas. We will learn how to import csv data from an external source (a url), and plot it using Plotly and pandas.
+
+First we import the data and look at it.
+
+```python
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_apple_stock.csv')
+df.head()
+```
+
+### Plot from CSV with Plotly Express
+
+```python
+import pandas as pd
+import plotly.express as px
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_apple_stock.csv')
+
+fig = px.line(df, x = 'AAPL_x', y = 'AAPL_y', title='Apple Share Prices over time (2014)')
+fig.show()
+```
+
+### Plot from CSV in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'plot-data-from-csv', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Plot from CSV with `graph_objects`
+
+```python
+import pandas as pd
+import plotly.graph_objects as go
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_apple_stock.csv')
+
+fig = go.Figure(go.Scatter(x = df['AAPL_x'], y = df['AAPL_y'],
+                  name='Share Prices (in USD)'))
+
+fig.update_layout(title=dict(text='Apple Share Prices over time (2014)'),
+                   plot_bgcolor='rgb(230, 230,230)',
+                   showlegend=True)
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/getting-started for more information about Plotly's Python API!
diff -Nru plotly-5.20.0+dfsg/doc/python/plotly-express.md plotly-7.1.0+dfsg1/doc/python/plotly-express.md
--- plotly-5.20.0+dfsg/doc/python/plotly-express.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/plotly-express.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,499 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.12.0
+  plotly:
+    description: Plotly Express is a terse, consistent, high-level API for creating
+      figures.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Plotly Express
+    order: 4
+    page_type: example_index
+    permalink: python/plotly-express/
+    thumbnail: thumbnail/plotly-express.png
+---
+
+### Overview
+
+The `plotly.express` module (usually imported as `px`) contains functions that can create entire figures at once, and is referred to as Plotly Express or PX. Plotly Express is a built-in part of the `plotly` library, and is the recommended starting point for creating most common figures. Every Plotly Express function uses [graph objects](/python/graph-objects/) internally and returns a `plotly.graph_objects.Figure` instance. Throughout the `plotly` documentation, you will find the Plotly Express way of building figures at the top of any applicable page, followed by a section on how to use graph objects to build similar figures. Any figure created in a single function call with Plotly Express could be created using graph objects alone, but with between 5 and 100 times more code.
+
+Plotly Express provides [more than 30 functions for creating different types of figures](https://plotly.com/python-api-reference/plotly.express.html). The API for these functions was carefully designed to be as consistent and easy to learn as possible, making it easy to switch from a scatter plot to a bar chart to a histogram to a sunburst chart throughout a data exploration session. *Scroll down for a gallery of Plotly Express plots, each made in a single function call.*
+
+Here is a talk from the [SciPy 2021 conference](https://www.scipy2021.scipy.org/) that gives a good introduction to Plotly Express and [Dash](https://dash.plotly.com/):
+
+```html hide_code=true
+<div align="center">
+<iframe width="560" height="315"
+src="https://www.youtube.com/embed/FpCgG85g2Hw"
+title="Data Visualization as The First and Last Mile of Data Science: Plotly Express and Dash | SciPy 2021"
+frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
+</div>
+```
+
+Plotly Express currently includes the following functions:
+
+* **Basics**: [`scatter`](/python/line-and-scatter/), [`line`](/python/line-charts/), [`area`](/python/filled-area-plots/), [`bar`](/python/bar-charts/), [`funnel`](/python/funnel-charts/), [`timeline`](https://plotly.com/python/gantt/)
+* **Part-of-Whole**: [`pie`](/python/pie-charts/), [`sunburst`](/python/sunburst-charts/), [`treemap`](/python/treemaps/), [`icicle`](/python/icicle-charts/), [`funnel_area`](/python/funnel-charts/)
+* **1D Distributions**: [`histogram`](/python/histograms/), [`box`](/python/box-plots/), [`violin`](/python/violin/), [`strip`](/python/strip-charts/), [`ecdf`](/python/ecdf-plots/)
+* **2D Distributions**: [`density_heatmap`](/python/2D-Histogram/), [`density_contour`](/python/2d-histogram-contour/)
+* **Matrix or Image Input**: [`imshow`](/python/imshow/)
+* **3-Dimensional**: [`scatter_3d`](/python/3d-scatter-plots/), [`line_3d`](/python/3d-line-plots/)
+* **Multidimensional**: [`scatter_matrix`](/python/splom/), [`parallel_coordinates`](/python/parallel-coordinates-plot/), [`parallel_categories`](/python/parallel-categories-diagram/)
+* **Tile Maps**: [`scatter_map`](/python/tile-scatter-maps/), [`line_map`](/python/lines-on-tile-maps/), [`choropleth_map`](/python/tile-county-choropleth/), [`density_map`](/python/tile-density-heatmaps/)
+* **Outline Maps**: [`scatter_geo`](/python/scatter-plots-on-maps/), [`line_geo`](/python/lines-on-maps/), [`choropleth`](/python/choropleth-maps/)
+* **Polar Charts**: [`scatter_polar`](/python/polar-chart/), [`line_polar`](/python/polar-chart/), [`bar_polar`](/python/wind-rose-charts/)
+* **Ternary Charts**: [`scatter_ternary`](/python/ternary-plots/), [`line_ternary`](/python/ternary-plots/)
+
+### High-Level Features
+
+The Plotly Express API in general offers the following features:
+
+* **A single entry point into `plotly`**: just `import plotly.express as px` and get access to [all the plotting functions](https://plotly.com/python-api-reference/plotly.express.html), plus [built-in demo datasets under `px.data`](https://plotly.com/python-api-reference/generated/plotly.data.html#module-plotly.data) and [built-in color scales and sequences under `px.color`](https://plotly.com/python-api-reference/generated/plotly.colors.html#module-plotly.colors). Every PX function returns a `plotly.graph_objects.Figure` object, so you can edit it using all the same methods like [`update_layout` and `add_trace`](https://plotly.com/python/creating-and-updating-figures/#updating-figures).
+* **Sensible, Overridable Defaults**: PX functions will infer sensible defaults wherever possible, and will always let you override them.
+* **Flexible Input Formats**: PX functions [accept input in a variety of formats](/python/px-arguments/), from `list`s and `dict`s to [long-form or wide-form `DataFrame`s](/python/wide-form/) to [`numpy` arrays and `xarrays`](/python/imshow/) to [GeoPandas `GeoDataFrames`](/python/maps/).
+* **Automatic Trace and Layout configuration**: PX functions will create one [trace](/python/figure-structure) per animation frame for each unique combination of data values mapped to discrete color, symbol, line-dash, facet-row and/or facet-column. Traces' [`legendgroup` and `showlegend` attributes](https://plotly.com/python/legend/) are set such that only one legend item appears per unique combination of discrete color, symbol and/or line-dash. Traces are automatically linked to a correctly-configured [subplot of the appropriate type](/python/figure-structure).
+* **Automatic Figure Labelling**: PX functions [label axes, legends and colorbars](https://plotly.com/python/figure-labels/) based in the input `DataFrame` or `xarray`, and provide [extra control with the `labels` argument](/python/styling-plotly-express/).
+* **Automatic Hover Labels**: PX functions populate the hover-label using the labels mentioned above, and provide [extra control with the `hover_name` and `hover_data` arguments](/python/hover-text-and-formatting/).
+* **Styling Control**: PX functions [read styling information from the default figure template](/python/styling-plotly-express/), and support commonly-needed [cosmetic controls like `category_orders` and `color_discrete_map`](/python/styling-plotly-express/) to precisely control categorical variables.
+* **Uniform Color Handling**: PX functions automatically switch between [continuous](/python/colorscales/) and [categorical color](/python/discrete-color/) based on the input type.
+* **Faceting**: the 2D-cartesian plotting functions support [row, column and wrapped facetting with `facet_row`, `facet_col` and `facet_col_wrap` arguments](/python/facet-plots/).
+* **Marginal Plots**: the 2D-cartesian plotting functions support [marginal distribution plots](/python/marginal-plots/) with the `marginal`, `marginal_x` and `marginal_y` arguments.
+* **A Pandas backend**: the 2D-cartesian plotting functions are available as [a Pandas plotting backend](/python/pandas-backend/) so you can call them via `df.plot()`.
+* **Trendlines**: `px.scatter` supports [built-in trendlines with accessible model output](/python/linear-fits/).
+* **Animations**: many PX functions support [simple animation support via the `animation_frame` and `animation_group` arguments](/python/animations/).
+* **Automatic WebGL switching**: for sufficiently large scatter plots, PX will automatically [use WebGL for hardware-accelerated rendering](https://plotly.com/python/webgl-vs-svg/).
+
+
+### Plotly Express in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'plotly-express', width='100%', height=1200)
+```
+
+### Gallery
+
+The following set of figures is just a sampling of what can be done with Plotly Express.
+
+#### Scatter, Line, Area and Bar Charts
+
+**Read more about [scatter plots](/python/line-and-scatter/) and [discrete color](/python/discrete-color/).**
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
+fig.show()
+```
+
+**Read more about [trendlines](/python/linear-fits/) and [templates](/python/templates/) and [marginal distribution plots](https://plotly.com/python/marginal-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", marginal_y="violin",
+           marginal_x="box", trendline="ols", template="simple_white")
+fig.show()
+```
+
+**Read more about [error bars](/python/error-bars/).**
+
+```python
+import plotly.express as px
+df = px.data.iris()
+df["e"] = df["sepal_width"]/100
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", error_x="e", error_y="e")
+fig.show()
+```
+
+**Read more about [bar charts](/python/bar-charts/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="sex", y="total_bill", color="smoker", barmode="group")
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.medals_long()
+
+fig = px.bar(df, x="medal", y="count", color="nation",
+             pattern_shape="nation", pattern_shape_sequence=[".", "x", "+"])
+fig.show()
+```
+
+**Read more about [facet plots](/python/facet-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.bar(df, x="sex", y="total_bill", color="smoker", barmode="group", facet_row="time", facet_col="day",
+       category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
+fig.show()
+```
+
+**Read more about [scatterplot matrices (SPLOMs)](/python/splom/).**
+
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_matrix(df, dimensions=["sepal_width", "sepal_length", "petal_width", "petal_length"], color="species")
+fig.show()
+```
+
+**Read more about [parallel coordinates](/python/parallel-coordinates-plot/) and [parallel categories](/python/parallel-categories-diagram/), as well as [continuous color](/python/colorscales/).**
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.parallel_coordinates(df, color="species_id", labels={"species_id": "Species",
+                  "sepal_width": "Sepal Width", "sepal_length": "Sepal Length",
+                  "petal_width": "Petal Width", "petal_length": "Petal Length", },
+                    color_continuous_scale=px.colors.diverging.Tealrose, color_continuous_midpoint=2)
+fig.show()
+```
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.parallel_categories(df, color="size", color_continuous_scale=px.colors.sequential.Inferno)
+fig.show()
+```
+
+**Read more about [hover labels](/python/hover-text-and-formatting/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp", size="pop", color="continent",
+           hover_name="country", log_x=True, size_max=60)
+fig.show()
+```
+
+**Read more about [animations](/python/animations/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
+           size="pop", color="continent", hover_name="country", facet_col="continent",
+           log_x=True, size_max=45, range_x=[100,100000], range_y=[25,90])
+fig.show()
+```
+
+**Read more about [line charts](/python/line-charts/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.line(df, x="year", y="lifeExp", color="continent", line_group="country", hover_name="country",
+        line_shape="spline", render_mode="svg")
+fig.show()
+```
+
+**Read more about [area charts](/python/filled-area-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.area(df, x="year", y="pop", color="continent", line_group="country")
+fig.show()
+```
+
+**Read more about [timeline/Gantt charts](/python/gantt/).**
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.DataFrame([
+    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Resource="Alex"),
+    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Resource="Alex"),
+    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Resource="Max")
+])
+
+fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource")
+fig.show()
+```
+
+**Read more about [funnel charts](/python/funnel-charts/).**
+
+```python
+import plotly.express as px
+data = dict(
+    number=[39, 27.4, 20.6, 11, 2],
+    stage=["Website visit", "Downloads", "Potential customers", "Requested price", "Invoice sent"])
+fig = px.funnel(data, x='number', y='stage')
+fig.show()
+```
+
+### Part to Whole Charts
+
+**Read more about [pie charts](/python/pie-charts/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
+df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # Represent only large countries
+fig = px.pie(df, values='pop', names='country', title='Population of European continent')
+fig.show()
+```
+
+**Read more about [sunburst charts](/python/sunburst-charts/).**
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year == 2007")
+fig = px.sunburst(df, path=['continent', 'country'], values='pop',
+                  color='lifeExp', hover_data=['iso_alpha'])
+fig.show()
+```
+
+**Read more about [treemaps](/python/treemaps/).**
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.gapminder().query("year == 2007")
+fig = px.treemap(df, path=[px.Constant('world'), 'continent', 'country'], values='pop',
+                  color='lifeExp', hover_data=['iso_alpha'])
+fig.show()
+```
+
+**Read more about [icicle charts](/python/icicle-charts/).**
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.gapminder().query("year == 2007")
+fig = px.icicle(df, path=[px.Constant('world'), 'continent', 'country'], values='pop',
+                  color='lifeExp', hover_data=['iso_alpha'])
+fig.show()
+```
+
+#### Distributions
+
+**Read more about [histograms](/python/histograms/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="total_bill", y="tip", color="sex", marginal="rug", hover_data=df.columns)
+fig.show()
+```
+
+**Read more about [box plots](/python/box-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.box(df, x="day", y="total_bill", color="smoker", notched=True)
+fig.show()
+```
+
+**Read more about [violin plots](/python/violin/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.violin(df, y="tip", x="smoker", color="sex", box=True, points="all", hover_data=df.columns)
+fig.show()
+```
+
+**Read more about [Empirical Cumulative Distribution Function (ECDF) charts](https://plotly.com/python/ecdf-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.ecdf(df, x="total_bill", color="sex")
+fig.show()
+```
+
+**Read more about [strip charts](https://plotly.com/python/strip-charts/).**
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.strip(df, x="total_bill", y="time", orientation="h", color="smoker")
+fig.show()
+```
+
+**Read more about [density contours, also known as 2D histogram contours](/python/2d-histogram-contour/).**
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.density_contour(df, x="sepal_width", y="sepal_length")
+fig.show()
+```
+
+**Read more about [density heatmaps, also known as 2D histograms](/python/2D-Histogram/).**
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.density_heatmap(df, x="sepal_width", y="sepal_length", marginal_x="rug", marginal_y="histogram")
+fig.show()
+```
+
+### Images and Heatmaps
+
+**Read more about [heatmaps and images](/python/imshow/).**
+
+```python
+import plotly.express as px
+data=[[1, 25, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, 5, 20]]
+fig = px.imshow(data,
+                labels=dict(x="Day of Week", y="Time of Day", color="Productivity"),
+                x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
+                y=['Morning', 'Afternoon', 'Evening']
+               )
+fig.update_xaxes(side="top")
+fig.show()
+```
+
+```python
+import plotly.express as px
+from skimage import io
+img = io.imread('https://user-images.githubusercontent.com/72614349/179115668-2630e3e4-3a9f-4c88-9494-3412e606450a.jpg')
+fig = px.imshow(img)
+fig.show()
+```
+
+#### Tile Maps
+
+**Read more about [tile maps](/python/tile-map-layers/) and [point on tile maps](/python/tile-scatter-maps/).**
+
+```python
+import plotly.express as px
+df = px.data.carshare()
+fig = px.scatter_map(df, lat="centroid_lat", lon="centroid_lon", color="peak_hour", size="car_hours",
+                  color_continuous_scale=px.colors.cyclical.IceFire, size_max=15, zoom=10,
+                  map_style="carto-positron")
+fig.show()
+```
+
+**Read more about [tile map GeoJSON choropleths](/python/tile-county-choropleth/).**
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+fig = px.choropleth_map(df, geojson=geojson, color="Bergeron",
+                           locations="district", featureidkey="properties.district",
+                           center={"lat": 45.5517, "lon": -73.7073},
+                           map_style="carto-positron", zoom=9)
+fig.show()
+```
+
+### Outline Maps
+
+**Read more about [outline symbol maps](/python/scatter-plots-on-maps/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.scatter_geo(df, locations="iso_alpha", color="continent", hover_name="country", size="pop",
+               animation_frame="year", projection="natural earth")
+fig.show()
+```
+
+
+**Read more about [choropleth maps](/python/choropleth-maps/).**
+
+```python
+import plotly.express as px
+df = px.data.gapminder()
+fig = px.choropleth(df, locations="iso_alpha", color="lifeExp", hover_name="country", animation_frame="year", range_color=[20,80])
+fig.show()
+```
+
+
+#### Polar Coordinates
+
+**Read more about [polar plots](/python/polar-chart/).**
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.scatter_polar(df, r="frequency", theta="direction", color="strength", symbol="strength",
+            color_discrete_sequence=px.colors.sequential.Plasma_r)
+fig.show()
+```
+
+**Read more about [radar charts](https://plotly.com/python/radar-chart/).**
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.line_polar(df, r="frequency", theta="direction", color="strength", line_close=True,
+            color_discrete_sequence=px.colors.sequential.Plasma_r)
+fig.show()
+```
+
+**Read more about [polar bar charts](/python/wind-rose-charts/).**
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.bar_polar(df, r="frequency", theta="direction", color="strength", template="plotly_dark",
+            color_discrete_sequence= px.colors.sequential.Plasma_r)
+fig.show()
+```
+
+#### 3D Coordinates
+
+**Read more about [3D scatter plots](/python/3d-scatter-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.election()
+fig = px.scatter_3d(df, x="Joly", y="Coderre", z="Bergeron", color="winner", size="total", hover_name="district",
+                  symbol="result", color_discrete_map = {"Joly": "blue", "Bergeron": "green", "Coderre":"red"})
+fig.show()
+```
+
+#### Ternary Coordinates
+
+**Read more about [ternary charts](/python/ternary-plots/).**
+
+```python
+import plotly.express as px
+df = px.data.election()
+fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron", color="winner", size="total", hover_name="district",
+                   size_max=15, color_discrete_map = {"Joly": "blue", "Bergeron": "green", "Coderre":"red"} )
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/polar-chart.md plotly-7.1.0+dfsg1/doc/python/polar-chart.md
--- plotly-5.20.0+dfsg/doc/python/polar-chart.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/polar-chart.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,441 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: How to make polar charts in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Polar Charts
+    order: 16
+    page_type: u-guide
+    permalink: python/polar-chart/
+    thumbnail: thumbnail/polar.gif
+---
+
+## Polar chart with Plotly Express
+
+A polar chart represents data along radial and angular axes. With Plotly Express, it is possible to represent polar data as scatter markers with `px.scatter_polar`, and as lines with `px.line_polar`.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+For other types of arguments, see the section below using `go.Scatterpolar`.
+
+The radial and angular coordinates are given with the `r` and `theta` arguments of `px.scatter_polar`. In the example below the `theta` data are categorical, but numerical data are possible too and the most common case.
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.scatter_polar(df, r="frequency", theta="direction")
+fig.show()
+```
+
+The "strength" column corresponds to strength categories of the wind, and there is a frequency value for each direction and strength. Below we use the strength column to encode the color, symbol and size of the markers.
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.scatter_polar(df, r="frequency", theta="direction",
+                       color="strength", symbol="strength", size="frequency",
+                       color_discrete_sequence=px.colors.sequential.Plasma_r)
+fig.show()
+```
+
+For a line polar plot, use `px.line_polar`:
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.line_polar(df, r="frequency", theta="direction", color="strength", line_close=True,
+                    color_discrete_sequence=px.colors.sequential.Plasma_r,
+                    template="plotly_dark",)
+fig.show()
+```
+
+See also the [wind rose page](https://plotly.com/python/wind-rose-charts/) for more wind rose visualizations in polar coordinates.
+
+You can plot less than a whole circle with the `range_theta` argument, and also control the `start_angle` and `direction`:
+
+```python
+import plotly.express as px
+fig = px.scatter_polar(r=range(0,90,10), theta=range(0,90,10),
+                       range_theta=[0,90], start_angle=0, direction="counterclockwise")
+fig.show()
+```
+
+## Polar Scatter Plot with go.Scatterpolar
+
+If Plotly Express does not provide a good starting point, you can use [the more generic `go.Scatterpolar` class from `plotly.graph_objects`](/python/graph-objects/). All the options are documented in the [reference page](https://plotly.com/python/reference/scatterpolar/).
+
+#### Basic Polar Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=
+    go.Scatterpolar(
+        r = [0.5,1,2,2.5,3,4],
+        theta = [35,70,120,155,205,240],
+        mode = 'markers',
+    ))
+
+fig.update_layout(showlegend=False)
+fig.show()
+```
+
+#### Line Polar Chart
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/polar_dataset.csv")
+
+fig = go.Figure()
+fig.add_trace(go.Scatterpolar(
+        r = df['x1'],
+        theta = df['y'],
+        mode = 'lines',
+        name = 'Figure 8',
+        line_color = 'peru'
+    ))
+fig.add_trace(go.Scatterpolar(
+        r = df['x2'],
+        theta = df['y'],
+        mode = 'lines',
+        name = 'Cardioid',
+        line_color = 'darkviolet'
+    ))
+fig.add_trace(go.Scatterpolar(
+        r = df['x3'],
+        theta = df['y'],
+        mode = 'lines',
+        name = 'Hypercardioid',
+        line_color = 'deepskyblue'
+    ))
+
+
+fig.update_layout(
+    title = 'Mic Patterns',
+    showlegend = False
+)
+
+fig.show()
+```
+
+#### Polar Bar Chart
+
+a.k.a matplotlib logo in a few lines of code
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Barpolar(
+    r=[3.5, 1.5, 2.5, 4.5, 4.5, 4, 3],
+    theta=[65, 15, 210, 110, 312.5, 180, 270],
+    width=[20,15,10,20,15,30,15,],
+    marker_color=["#E4FF87", '#709BFF', '#709BFF', '#FFAA70', '#FFAA70', '#FFDF70', '#B6FFB4'],
+    marker_line_color="black",
+    marker_line_width=2,
+    opacity=0.8
+))
+
+fig.update_layout(
+    template=None,
+    polar = dict(
+        radialaxis = dict(range=[0, 5], showticklabels=False, ticks=''),
+        angularaxis = dict(showticklabels=False, ticks='')
+    )
+)
+
+fig.show()
+```
+
+#### Categorical Polar Chart
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=2, cols=2, specs=[[{'type': 'polar'}]*2]*2)
+
+fig.add_trace(go.Scatterpolar(
+      name = "angular categories",
+      r = [5, 4, 2, 4, 5],
+      theta = ["a", "b", "c", "d", "a"],
+    ), 1, 1)
+fig.add_trace(go.Scatterpolar(
+      name = "radial categories",
+      r = ["a", "b", "c", "d", "b", "f", "a"],
+      theta = [1, 4, 2, 1.5, 1.5, 6, 5],
+      thetaunit = "radians",
+    ), 1, 2)
+fig.add_trace(go.Scatterpolar(
+      name = "angular categories (w/ categoryarray)",
+      r = [5, 4, 2, 4, 5],
+      theta = ["a", "b", "c", "d", "a"],
+    ), 2, 1)
+fig.add_trace(go.Scatterpolar(
+      name = "radial categories (w/ category descending)",
+      r = ["a", "b", "c", "d", "b", "f", "a", "a"],
+      theta = [45, 90, 180, 200, 300, 15, 20, 45],
+    ), 2, 2)
+
+fig.update_traces(fill='toself')
+fig.update_layout(
+    polar = dict(
+      radialaxis_angle = -45,
+      angularaxis = dict(
+        direction = "clockwise",
+        period = 6)
+    ),
+    polar2 = dict(
+      radialaxis = dict(
+        angle = 180,
+        tickangle = -180 # so that tick labels are not upside down
+      )
+    ),
+    polar3 = dict(
+      sector = [80, 400],
+      radialaxis_angle = -45,
+      angularaxis_categoryarray = ["d", "a", "c", "b"]
+    ),
+    polar4 = dict(
+      radialaxis_categoryorder = "category descending",
+      angularaxis = dict(
+        thetaunit = "radians",
+        dtick = 0.3141592653589793
+      ))
+)
+
+fig.show()
+```
+
+#### Polar Chart Sector
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2, specs=[[{'type': 'polar'}]*2])
+
+fig.add_trace(go.Scatterpolar(), 1, 1)
+fig.add_trace(go.Scatterpolar(), 1, 2)
+
+# Same data for the two Scatterpolar plots, we will only change the sector in the layout
+fig.update_traces(mode = "lines+markers",
+      r = [1,2,3,4,5],
+      theta = [0,90,180,360,0],
+      line_color = "magenta",
+      marker = dict(
+        color = "royalblue",
+        symbol = "square",
+        size = 8
+      ))
+
+# The sector is [0, 360] by default, we update it for the first plot only
+fig.update_layout(
+    showlegend = False,
+    polar = dict(# setting parameters for the second plot would be polar2=dict(...)
+      sector = [150,210],
+    ))
+
+
+fig.show()
+```
+
+#### Polar Chart Directions
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2, specs=[[{'type': 'polar'},    {'type': 'polar'}]])
+
+r = [1,2,3,4,5]
+theta = [0,90,180,360,0]
+
+fig.add_trace(go.Scatterpolar(), 1, 1)
+fig.add_trace(go.Scatterpolar(), 1, 2)
+
+# Same data for the two Scatterpolar plots, we will only change the direction in the layout
+fig.update_traces(r= r, theta=theta,
+                  mode="lines+markers", line_color='indianred',
+                  marker=dict(color='lightslategray', size=8, symbol='square'))
+fig.update_layout(
+    showlegend = False,
+    polar = dict(
+      radialaxis_tickfont_size = 8,
+      angularaxis = dict(
+        tickfont_size=8,
+        rotation=90, # start position of angular axis
+        direction="counterclockwise"
+      )
+    ),
+    polar2 = dict(
+      radialaxis_tickfont_size = 8,
+      angularaxis = dict(
+        tickfont_size = 8,
+        rotation = 90,
+        direction = "clockwise"
+      ),
+    ))
+
+fig.show()
+```
+
+#### Webgl Polar Chart
+
+The `go.Scatterpolargl` trace uses the [WebGL](https://en.wikipedia.org/wiki/WebGL) plotting engine for GPU-accelerated rendering.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/hobbs-pearson-trials.csv")
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatterpolargl(
+      r = df.trial_1_r,
+      theta = df.trial_1_theta,
+      name = "Trial 1",
+      marker=dict(size=15, color="mediumseagreen")
+    ))
+fig.add_trace(go.Scatterpolargl(
+      r = df.trial_2_r,
+      theta = df.trial_2_theta,
+      name = "Trial 2",
+      marker=dict(size=20, color="darkorange")
+    ))
+fig.add_trace(go.Scatterpolargl(
+      r = df.trial_3_r,
+      theta = df.trial_3_theta,
+      name = "Trial 3",
+      marker=dict(size=12, color="mediumpurple")
+    ))
+fig.add_trace(go.Scatterpolargl(
+      r = df.trial_4_r,
+      theta = df.trial_4_theta,
+      name = "Trial 4",
+      marker=dict(size=22, color = "magenta")
+    ))
+fig.add_trace(go.Scatterpolargl(
+      r = df.trial_5_r,
+      theta = df.trial_5_theta,
+      name = "Trial 5",
+      marker=dict(size=19, color = "limegreen")
+      ))
+fig.add_trace(go.Scatterpolargl(
+      r = df.trial_6_r,
+      theta = df.trial_6_theta,
+      name = "Trial 6",
+      marker=dict(size=10, color = "gold")
+      ))
+
+# Common parameters for all traces
+fig.update_traces(mode="markers", marker=dict(line_color='white', opacity=0.7))
+
+fig.update_layout(
+    title = "Hobbs-Pearson Trials",
+    font_size = 15,
+    showlegend = False,
+    polar = dict(
+      bgcolor = "rgb(223, 223, 223)",
+      angularaxis = dict(
+        linewidth = 3,
+        showline=True,
+        linecolor='black'
+      ),
+      radialaxis = dict(
+        side = "counterclockwise",
+        showline = True,
+        linewidth = 2,
+        gridcolor = "white",
+        gridwidth = 2,
+      )
+    ),
+    paper_bgcolor = "rgb(223, 223, 223)"
+)
+
+fig.show()
+```
+
+#### Polar Chart Subplots
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=2, cols=2, specs=[[{'type': 'polar'}]*2]*2)
+
+fig.add_trace(go.Scatterpolar(
+        r = [1, 2, 3],
+        theta = [50, 100, 200],
+        marker_symbol = "square"
+    ), 1, 1)
+fig.add_trace(go.Scatterpolar(
+        r = [1, 2, 3],
+        theta = [1, 2, 3],
+        thetaunit = "radians"
+    ), 1, 1)
+fig.add_trace(go.Scatterpolar(
+        r = ["a", "b", "c", "b"],
+        theta = ["D", "C", "B", "A"],
+        subplot = "polar2"
+    ), 1, 2)
+fig.add_trace(go.Scatterpolar(
+        r = [50, 300, 900],
+        theta = [0, 90, 180],
+        subplot = "polar3"
+    ), 2, 1)
+fig.add_trace(go.Scatterpolar(
+        mode = "lines",
+        r = [3, 3, 4, 3],
+        theta = [0, 45, 90, 270],
+        fill = "toself",
+        subplot = "polar4"
+    ), 2, 2)
+
+
+fig.update_layout(
+    polar = dict(
+      radialaxis_range = [1, 4],
+      angularaxis_thetaunit = "radians"
+    ),
+    polar3 = dict(
+      radialaxis = dict(type = "log", tickangle = 45),
+      sector = [0, 180]
+    ),
+    polar4 = dict(
+      radialaxis = dict(visible = False, range = [0, 6])),
+    showlegend = False
+)
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(scatter_polar)`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_polar) or [function reference for `px.(line_polar)`](https://plotly.com/python-api-reference/generated/plotly.express.line_polar) or https://plotly.com/python/reference/scatterpolar/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/px-arguments.md plotly-7.1.0+dfsg1/doc/python/px-arguments.md
--- plotly-5.20.0+dfsg/doc/python/px-arguments.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/px-arguments.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,277 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: Input data arguments accepted by Plotly Express functions
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Plotly Express Arguments
+    order: 20
+    page_type: u-guide
+    permalink: python/px-arguments/
+    thumbnail: thumbnail/plotly-express.png
+---
+
+Plotly Express (`px`) is the high-level interface to Plotly and provides functions for generating charts. `px` functions support data provided in a number of different formats (long, wide, and mixed) and as different types of objects, including pandas and Polars dataframes.
+
+## Data for the Examples
+
+The examples on this page use datasets available in the `data` package in `px`. `px.data` contains functions that when called return a dataset as a dataframe. Some of the datasets included in `px.data` are:
+
+- `carshare` - Each row represents the availability of car-sharing services near the centroid of a zone in Montreal over a month-long period.
+- `election` - Each row represents voting results for an electoral district in the 2013 Montreal mayoral election.
+- `iris` - Each row represents a flower.
+
+To access the `iris` dataset, we call its function and assign it to a variable:
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+df.head()
+```
+
+By default `px.data` functions return a pandas `DataFrame` object, but you can specify an alternative dataframe type using `return_type`. `pandas`, `polars`, `pyarrow`, `modin`, and `cuDF` are supported return types.
+
+```python
+df = px.data.iris(return_type='polars')
+df.head()
+```
+
+## Long, Wide, and Mixed-Form Data
+
+There are three common conventions for storing column-oriented data, usually in a data frame with column names:
+
+* **long-form data** has one row per observation, and one column per variable. This is suitable for storing and displaying multivariate data i.e. with dimension greater than 2. This format is sometimes called "tidy".
+* **wide-form data** has one row per value of one of the first variable, and one column per value of the second variable. This is suitable for storing and displaying 2-dimensional data.
+* **mixed-form data** is a hybrid of long-form and wide-form data, with one row per value of one variable, and some columns representing values of another, and some columns representing more variables. See the [wide-form documentation](/python/wide-form/) for examples of how to use Plotly Express to visualize this kind of data.
+
+Every Plotly Express function can operate on long-form data (other than `px.imshow` which operates only on wide-form input), and in addition, the following 2D-Cartesian functions can operate on wide-form and mixed-form data: `px.scatter`, `px.line`, `px.area`, `px.bar`, `px.histogram`, `px.violin`, `px.box`, `px.strip`, `px.funnel`, `px.density_heatmap` and `px.density_contour`.
+
+By way of example here is the same data, represented in long-form first, and then in wide-form:
+
+```python
+import plotly.express as px
+long_df = px.data.medals_long()
+long_df
+```
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+wide_df
+```
+
+Plotly Express can produce the same plot from either form:
+
+```python
+import plotly.express as px
+long_df = px.data.medals_long()
+
+fig = px.bar(long_df, x="nation", y="count", color="medal", title="Long-Form Input")
+fig.show()
+```
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], title="Wide-Form Input")
+fig.show()
+```
+
+You might notice that y-axis and legend labels are slightly different for the second plot: they are "value" and "variable", respectively, and this is also reflected in the hoverlabel text. Note that the labels "medal" and "count" do not appear in the wide-form data frame, so in this case, you must supply these yourself, or [you can use a data frame with named row- and column-indexes](/python/wide-form/). You can [rename these labels with the `labels` argument](/python/styling-plotly-express/):
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], title="Wide-Form Input, relabelled",
+            labels={"value": "count", "variable": "medal"})
+fig.show()
+```
+
+Many more examples of wide-form and messy data input can be found in our [detailed wide-form support documentation](/python/wide-form/).
+
+
+## Dataframe Input
+
+The first argument of every `px` function is `data_frame`. If you provide a dataframe as a `px` function's first argument, you can then specify column names as strings from the dataframe as other arguments.
+
+### Supported DataFrame Types
+
+`px` functions natively support pandas, Polars, and PyArrow dataframes. `px` uses [Narwhals](https://narwhals-dev.github.io/narwhals/) to provide this native dataframe support. Other types of dataframes that are currently supported by Narwhals, for example cuDF and Modin, may also work with `px`.
+
+You can also pass dataframes that are not natively supported, but which support the [dataframe interchange protocol](https://data-apis.org/dataframe-protocol/latest/).
+
+PySpark dataframes are also supported and are converted to pandas dataframes internally by Plotly Express.
+
+#### Additional Dependencies Required
+
+- Plotly Express requires NumPy. You can install it with `pip install numpy` if it's not installed by the dataframe library you are using.
+- To use [trendlines](/python/linear-fits/), you'll also need to have pandas installed.
+- To use PySpark dataframes, you'll need to have pandas installed. To use dataframes that support the dataframe interchange protocol, you'll need to have PyArrow installed.
+
+### Example: Using a Pandas DataFrame with `px.bar`
+
+Here, we create a pandas `DataFrame`, pass it to `px.bar` as its first argument, and then use the `"sepal_length"` column for the x-axis and the `"sepal_width"` for the y-axis.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x='sepal_length', y='sepal_width', color='species', size='petal_length')
+fig.show()
+```
+
+### Example: Polars DataFrame with `px.bar`
+
+`px` provides native support for dataframe types other than pandas, including Polars:
+
+```python
+import plotly.express as px
+
+df = px.data.iris(return_type='polars')
+
+fig = px.scatter(df, x='sepal_length', y='sepal_width', color='species', size='petal_length')
+fig.show()
+```
+
+### Using the Index of a Dataframe
+
+If the dataframe you are using has an index, it is also possible to use that index as an argument. In the following example, the index is used for the hover data.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter(df, x=df.sepal_length, y=df.sepal_width, size=df.petal_length,
+                 hover_data=[df.index])
+fig.show()
+```
+
+### Using Columns from Multiple Dataframes
+
+You can also use columns from multiple dataframes in one `px` function, as long as all the dataframe columns you use have the same length. In this example, we pass `df1` as the `data_frame` argument to `px.bar` and then us a column from `df2` for the `y` argument.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df1 = pd.DataFrame(dict(time=[10, 20, 30], sales=[10, 8, 30]))
+df2 = pd.DataFrame(dict(market=[4, 2, 5]))
+fig = px.bar(df1, x="time", y=df2.market, color="sales")
+fig.show()
+```
+
+### Using labels to pass names
+
+The `labels` argument can be used to override the names used for axis titles, legend entries and hovers.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = px.data.gapminder()
+gdp = df['pop'] * df['gdpPercap']
+fig = px.bar(df, x='year', y=gdp, color='continent', labels={'y':'gdp'},
+             hover_data=['country'],
+             title='Evolution of world GDP')
+fig.show()
+```
+
+```python
+## Other Input Data
+```
+
+### Input Data as array-like columns: NumPy arrays, lists...
+
+`px` arguments can also be array-like objects such as lists, NumPy arrays, in both long-form or wide-form (for certain functions).
+
+```python
+import plotly.express as px
+
+# List arguments
+fig = px.line(x=[1, 2, 3, 4], y=[3, 5, 4, 8])
+fig.show()
+```
+
+List arguments can also be passed in as a list of lists, which triggers [wide-form data processing](/python/wide-form/), with the downside that the resulting traces will need to be manually renamed via `fig.data[<n>].name = "name"`.
+
+```python
+import plotly.express as px
+
+# List arguments in wide form
+series1 = [3, 5, 4, 8]
+series2 = [5, 4, 8, 3]
+fig = px.line(x=[1, 2, 3, 4], y=[series1, series2])
+fig.show()
+```
+
+### Passing dictionaries or array-likes as the data_frame argument
+
+The `data_frame` argument can also accept a `dict` or `array` in addition to DataFrame objects. Using a dictionary can be a convenient way to pass column names used in axis titles, legend entries and hovers without creating a dataframe.
+
+```python
+import plotly.express as px
+import numpy as np
+N = 10000
+np.random.seed(0)
+fig = px.density_contour(dict(effect_size=5 + np.random.randn(N),
+                              waiting_time=np.random.poisson(size=N)),
+                         x="effect_size", y="waiting_time")
+fig.show()
+```
+
+To pass a `dict` or an array (such as a NumPy `ndarray`) to the `data_frame` parameter, you'll need to have pandas installed, because `plotly.express` internally converts the `dict` or array to a pandas DataFrame.
+
+#### Integer column names
+
+When the `data_frame` argument is a NumPy array, column names are integer corresponding to the columns of the array. In this case, keyword names are used in axis, legend and hovers. This is also the case for a pandas DataFrame with integer column names. Use the `labels` argument to override these names.
+
+```python
+import numpy as np
+import plotly.express as px
+
+ar = np.arange(100).reshape((10, 10))
+fig = px.scatter(ar, x=2, y=6, size=1, color=5)
+fig.show()
+```
+
+### Mixing dataframes and other types
+
+It is possible to mix dataframe columns, NumPy arrays and lists as arguments. Remember that the only column names to be used correspond to columns in the `data_frame` argument, use `labels` to override names displayed in axis titles, legend entries or hovers.
+
+```python
+import plotly.express as px
+import numpy as np
+import pandas as pd
+
+df = px.data.gapminder()
+gdp = np.log(df['pop'] * df['gdpPercap'])  # NumPy array
+fig = px.bar(df, x='year', y=gdp, color='continent', labels={'y':'log gdp'},
+             hover_data=['country'],
+             title='Evolution of world GDP')
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/quiver-plots.md plotly-7.1.0+dfsg1/doc/python/quiver-plots.md
--- plotly-5.20.0+dfsg/doc/python/quiver-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/quiver-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,217 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.2.3
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make a quiver plot in Python. A quiver plot displays a 2D vector
+      field as an array of arrows.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Quiver Plots
+    order: 10
+    permalink: python/quiver-plots/
+    thumbnail: thumbnail/quiver-plot.jpg
+---
+
+A quiver plot displays a 2D vector field as an array of arrows. Since version 7.0, Plotly has a `Quiver` trace type, which is the recommended way to make quiver plots. Earlier versions relied on the `create_quiver` [figure factory](/python/figure-factories/), which is still available and is described at the end of this page.
+
+A `Quiver` trace takes four arrays of the same length: `x` and `y` give the position of each arrow, and `u` and `v` give the vector components at that position. Arrow direction and length come from `(u, v)`.
+
+#### Basic Quiver Plot
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x, y = np.meshgrid(np.arange(0, 2, .2), np.arange(0, 2, .2))
+u = np.cos(x) * y
+v = np.sin(x) * y
+
+fig = go.Figure(go.Quiver(x=x.flatten(), y=y.flatten(),
+                          u=u.flatten(), v=v.flatten()))
+
+fig.show()
+```
+
+#### Arrow Anchor and Length
+
+`anchor` sets which part of the arrow sits at its `(x, y)` position: `"tail"` (the default), `"tip"`, or `"center"`.
+
+Arrow length is controlled by `lengthmode` and `lengthfactor`. With `lengthmode="scaled"` (the default), lengths are normalized against the longest vector in the field and the density of points, so a dense grid stays readable whatever the underlying values are. `lengthmode="raw"` draws each arrow at its specified magnitude determined by `u` and `v`. `lengthfactor` is a multiplier applied on top: values below 1 shorten every arrow, above 1 lengthen them.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x, y = np.meshgrid(np.arange(-2, 3), np.arange(-2, 3))
+u, v = -y, x  # rotational field
+
+fig = go.Figure(go.Quiver(x=x.flatten(), y=y.flatten(),
+                          u=u.flatten(), v=v.flatten(),
+                          anchor="center", lengthfactor=0.8))
+
+fig.update_layout(title_text="Rotational field, arrows centered on each point",
+                  yaxis_scaleanchor="x")
+fig.show()
+```
+
+#### Setting Arrow Reference
+
+The `arrowref` property controls how the `u` and `v` vector components are interpreted, and how the vector arrows respond to zooming along a single axis.
+
+By default, `arrowref="data"`, meaning that `u` and `v` are interpreted as data values. This means that the angle of the vectors depends on the relative scale of the two axes, and the apparent angle will change when zooming along one axis. This is the appropriate behavior when `u` and `v` represent data-space values, such as when illustrating a magnetic field.
+
+To instead interpret `u` and `v` in pixel values, set `arrowref="paper"`, which will always draw vectors at the same angle regardless of the axis scales. This is the correct behavior when the vectors correspond to abstract values which are not linked to the data space.
+
+Note that `arrowref="paper"` always scales arrow lengths, so `lengthmode="raw"` is ignored when you set it.
+
+The difference is clearest on axes with different scales. Both panels below plot the same vectors, `u=1` and `v=0.1`, on a grid where x spans 10 units and y spans 1.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+x = np.linspace(0, 10, 6)
+y = np.full_like(x, 0.5)
+u = np.ones_like(x)
+v = np.full_like(x, 0.1)
+
+fig = make_subplots(rows=1, cols=2,
+                    subplot_titles=['arrowref="data"', 'arrowref="paper"'])
+fig.add_trace(go.Quiver(x=x, y=y, u=u, v=v, arrowref="data"), row=1, col=1)
+fig.add_trace(go.Quiver(x=x, y=y, u=u, v=v, arrowref="paper"), row=1, col=2)
+
+fig.update_xaxes(range=[-1, 11])
+fig.update_yaxes(range=[0, 1])
+fig.update_layout(showlegend=False)
+fig.show()
+```
+
+With `"data"`, `v=0.1` covers a tenth of the y-axis while `u=1` covers a tenth of the x-axis, so the arrows tilt noticeably. With `"paper"`, the same components are 1 pixel across and 0.1 pixels up, so the arrows stay nearly flat whatever the axis ranges are.
+
+#### Coloring Arrows by a Scalar Field
+
+Pass `marker.color` an array with one value per arrow, together with the usual colorscale attributes, to color each arrow by that value. If you enable a colorscale without supplying a `marker.color` array, arrows are colored by their vector magnitude. A single (non-array) `marker.color` paints the whole field one color.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x, y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25))
+z = x * np.exp(-x**2 - y**2)
+v, u = np.gradient(z, .2, .2)
+speed = np.sqrt(u**2 + v**2)
+
+fig = go.Figure(go.Quiver(x=x.flatten(), y=y.flatten(),
+                          u=u.flatten(), v=v.flatten(),
+                          marker=dict(color=speed.flatten(),
+                                      colorscale="Viridis",
+                                      showscale=True,
+                                      colorbar_title_text="speed")))
+
+fig.show()
+```
+
+#### Styling Arrows
+
+`marker.line.width` and `marker.line.dash` style the arrow shafts, and `marker.arrowsize` scales the arrowhead relative to the shaft width — the default of `1` draws a head about three times as wide as the shaft.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x, y = np.meshgrid(np.arange(0, 6), np.arange(0, 6))
+u_model = np.ones_like(x, dtype=float)
+v_model = 0.15 * (y - 2.5)
+u_measured = 0.9 * u_model
+v_measured = v_model + 0.25 * np.cos(x)
+
+fig = go.Figure([
+    go.Quiver(x=x.flatten(), y=y.flatten(),
+              u=u_model.flatten(), v=v_model.flatten(),
+              name="model",
+              marker=dict(color="#7f7f7f", arrowsize=0.8,
+                          line=dict(width=2, dash="dot"))),
+    go.Quiver(x=x.flatten(), y=y.flatten(),
+              u=u_measured.flatten(), v=v_measured.flatten(),
+              name="measured",
+              marker=dict(color="#d62728", arrowsize=1.2,
+                          line=dict(width=3))),
+])
+
+fig.update_layout(title_text="Modelled and measured fields", showlegend=True)
+fig.show()
+```
+
+#### Quiver Plot with Points
+
+A `Quiver` trace is a cartesian trace, so it can be combined with other cartesian traces in the same figure.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+x, y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25))
+z = x * np.exp(-x**2 - y**2)
+v, u = np.gradient(z, .2, .2)
+
+fig = go.Figure(go.Quiver(x=x.flatten(), y=y.flatten(),
+                          u=u.flatten(), v=v.flatten(),
+                          name="quiver",
+                          marker=dict(line_width=1)))
+
+fig.add_trace(go.Scatter(x=[-.7, .75], y=[0, 0],
+                         mode="markers",
+                         marker_size=12,
+                         name="points"))
+
+fig.show()
+```
+
+#### Quiver Plots with Figure Factory
+
+`create_quiver` builds a quiver plot out of `Scatter` traces rather than using the `Quiver` trace type. It remains available, and offers two options the trace type does not: `angle` sets the arrowhead angle in radians, and `scaleratio` fixes the ratio between the y-axis and x-axis scales.
+
+```python
+import plotly.figure_factory as ff
+import numpy as np
+
+x, y = np.meshgrid(np.arange(0, 2, .2), np.arange(0, 2, .2))
+u = np.cos(x) * y
+v = np.sin(x) * y
+
+fig = ff.create_quiver(x, y, u, v)
+
+fig.show()
+```
+
+Because the result is made of `Scatter` traces, the arrows cannot be colored individually by a scalar field, and the trace-level attributes described above (`anchor`, `lengthmode`, `marker.arrowsize`) do not apply.
+
+#### See also
+
+[Cone plot](/python/cone-plot) for the 3D equivalent of quiver plots.
+
+#### Reference
+
+See the [Quiver trace reference](https://plotly.com/python/reference/quiver/) for the full list of attributes, or the [`create_quiver` function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_quiver.html) for the figure factory.
diff -Nru plotly-5.20.0+dfsg/doc/python/radar-chart.md plotly-7.1.0+dfsg1/doc/python/radar-chart.md
--- plotly-5.20.0+dfsg/doc/python/radar-chart.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/radar-chart.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,132 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make radar charts in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Radar Charts
+    order: 17
+    page_type: u-guide
+    permalink: python/radar-chart/
+    thumbnail: thumbnail/radar.gif
+---
+
+A [Radar Chart](https://en.wikipedia.org/wiki/Radar_chart) (also known as a spider plot or star plot) displays multivariate data in the form of a two-dimensional chart of quantitative variables represented on axes originating from the center. The relative position and angle of the axes is typically uninformative. It is equivalent to a [parallel coordinates plot](/python/parallel-coordinates-plot/) with the axes arranged radially.
+
+For a Radar Chart, use a [polar chart](/python/polar-chart/) with categorical angular variables, with `px.line_polar`, or with `go.Scatterpolar`. See [more examples of polar charts](/python/polar-chart/).
+
+#### Radar Chart with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Use `line_close=True` for closed lines.
+
+```python
+import plotly.express as px
+import pandas as pd
+df = pd.DataFrame(dict(
+    r=[1, 5, 2, 2, 3],
+    theta=['processing cost','mechanical properties','chemical stability',
+           'thermal stability', 'device integration']))
+fig = px.line_polar(df, r='r', theta='theta', line_close=True)
+fig.show()
+```
+
+For a filled line in a Radar Chart, update the figure created with `px.line_polar` with `fig.update_traces`.
+
+```python
+import plotly.express as px
+import pandas as pd
+df = pd.DataFrame(dict(
+    r=[1, 5, 2, 2, 3],
+    theta=['processing cost','mechanical properties','chemical stability',
+           'thermal stability', 'device integration']))
+fig = px.line_polar(df, r='r', theta='theta', line_close=True)
+fig.update_traces(fill='toself')
+fig.show()
+```
+
+### Basic Radar Chart with go.Scatterpolar
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Scatterpolar(
+  r=[1, 5, 2, 2, 3],
+  theta=['processing cost','mechanical properties','chemical stability', 'thermal stability',
+           'device integration'],
+  fill='toself'
+))
+
+fig.update_layout(
+  polar=dict(
+    radialaxis=dict(
+      visible=True
+    ),
+  ),
+  showlegend=False
+)
+
+fig.show()
+```
+
+#### Multiple Trace Radar Chart
+
+```python
+import plotly.graph_objects as go
+
+categories = ['processing cost','mechanical properties','chemical stability',
+              'thermal stability', 'device integration']
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatterpolar(
+      r=[1, 5, 2, 2, 3],
+      theta=categories,
+      fill='toself',
+      name='Product A'
+))
+fig.add_trace(go.Scatterpolar(
+      r=[4, 3, 2.5, 1, 2],
+      theta=categories,
+      fill='toself',
+      name='Product B'
+))
+
+fig.update_layout(
+  polar=dict(
+    radialaxis=dict(
+      visible=True,
+      range=[0, 5]
+    )),
+  showlegend=False
+)
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(line_polar)`](https://plotly.com/python-api-reference/generated/plotly.express.line_polar) or https://plotly.com/python/reference/scatterpolar/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/random-walk.md plotly-7.1.0+dfsg1/doc/python/random-walk.md
--- plotly-5.20.0+dfsg/doc/python/random-walk.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/random-walk.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,165 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: "1.1"
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: Learn how to use Python to make a Random Walk
+    display_as: advanced_opt
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Random Walk
+    order: 2
+    page_type: example_index
+    permalink: python/random-walk/
+    thumbnail: /images/static-image
+---
+
+A [random walk](https://en.wikipedia.org/wiki/Random_walk) can be thought of as a random process in which a token or a marker is randomly moved around some space, that is, a space with a metric used to compute distance. It is more commonly conceptualized in one dimension ($\mathbb{Z}$), two dimensions ($\mathbb{Z}^2$) or three dimensions ($\mathbb{Z}^3$) in Cartesian space, where $\mathbb{Z}$ represents the set of integers. In the visualizations below, we will be using [scatter plots](https://plotly.com/python/line-and-scatter/) as well as a colorscale to denote the time sequence of the walk.
+
+#### Random Walk in 1D
+
+The jitter in the data points along the x and y axes are meant to illuminate where the points are being drawn and what the tendency of the random walk is.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+np.random.seed(1)
+
+l = 100
+steps = np.random.choice([-1, 1], size=l) + 0.05 * np.random.randn(l) # l steps
+position = np.cumsum(steps) # integrate the position by summing steps values
+y = 0.05 * np.random.randn(l)
+
+fig = go.Figure(data=go.Scatter(
+    x=position,
+    y=y,
+    mode='markers',
+    name='Random Walk in 1D',
+    marker=dict(
+        color=np.arange(l),
+        size=7,
+        colorscale='Reds',
+        showscale=True,
+    )
+))
+
+fig.update_layout(yaxis_range=[-1, 1])
+fig.show()
+```
+
+#### Random Walk in 2D
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+l = 1000
+x_steps = np.random.choice([-1, 1], size=l) + 0.2 * np.random.randn(l) # l steps
+y_steps = np.random.choice([-1, 1], size=l) + 0.2 * np.random.randn(l) # l steps
+x_position = np.cumsum(x_steps) # integrate the position by summing steps values
+y_position = np.cumsum(y_steps) # integrate the position by summing steps values
+
+fig = go.Figure(data=go.Scatter(
+    x=x_position,
+    y=y_position,
+    mode='markers',
+    name='Random Walk',
+    marker=dict(
+        color=np.arange(l),
+        size=8,
+        colorscale='Greens',
+        showscale=True
+    )
+))
+
+fig.show()
+```
+
+#### Random walk and diffusion
+
+In the two following charts we show the link between random walks and diffusion. We compute a large number `N` of random walks representing for examples molecules in a small drop of chemical. While all trajectories start at 0, after some time the spatial distribution of points is a Gaussian distribution. Also, the average distance to the origin grows as $\sqrt(t)$.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+l = 1000
+N = 10000
+steps = np.random.choice([-1, 1], size=(N, l)) + 0.05 * np.random.standard_normal((N, l)) # l steps
+position = np.cumsum(steps, axis=1) # integrate all positions by summing steps values along time axis
+
+fig = go.Figure(data=go.Histogram(x=position[:, -1])) # positions at final time step
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+l = 1000
+N = 10000
+t = np.arange(l)
+steps = np.random.choice([-1, 1], size=(N, l)) + 0.05 * np.random.standard_normal((N, l)) # l steps
+position = np.cumsum(steps, axis=1) # integrate the position by summing steps values
+average_distance = np.std(position, axis=0) # average distance
+
+fig = make_subplots(1, 2)
+fig.add_trace(go.Scatter(x=t, y=average_distance, name='mean distance'), 1, 1)
+fig.add_trace(go.Scatter(x=t, y=average_distance**2, name='mean squared distance'), 1, 2)
+fig.update_xaxes(title_text='$t$')
+fig.update_yaxes(title_text='$l$', col=1)
+fig.update_yaxes(title_text='$l^2$', col=2)
+fig.update_layout(showlegend=False)
+fig.show()
+```
+
+#### Advanced Tip
+
+We can formally think of a 1D random walk as a point jumping along the integer number line. Let $Z_i$ be a random variable that takes on the values +1 and -1. Let this random variable represent the steps we take in the random walk in 1D (where +1 means right and -1 means left). Also, as with the above visualizations, let us assume that the probability of moving left and right is just $\frac{1}{2}$. Then, consider the sum
+
+$$
+\begin{align*}
+S_n = \sum_{i=0}^{n}{Z_i}
+\end{align*}
+$$
+
+where S_n represents the point that the random walk ends up on after n steps have been taken.
+
+To find the `expected value` of $S_n$, we can compute it directly. Since each $Z_i$ is independent, we have
+
+$$
+\begin{align*}
+\mathbb{E}(S_n) = \sum_{i=0}^{n}{\mathbb{E}(Z_i)}
+\end{align*}
+$$
+
+but since $Z_i$ takes on the values +1 and -1 then
+
+$$
+\begin{align*}
+\mathbb{E}(Z_i) = 1 \cdot P(Z_i=1) + -1 \cdot P(Z_i=-1) = \frac{1}{2} - \frac{1}{2} = 0
+\end{align*}
+$$
+
+Therefore, we expect our random walk to hover around $0$ regardless of how many steps we take in our walk.
diff -Nru plotly-5.20.0+dfsg/doc/python/range-slider.md plotly-7.1.0+dfsg1/doc/python/range-slider.md
--- plotly-5.20.0+dfsg/doc/python/range-slider.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/range-slider.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,365 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.2
+  plotly:
+    description: Now you can implement range sliders and selectors in your Plotly
+      graphs purely with python!
+    display_as: controls
+    language: python
+    layout: base
+    name: Range Slider and Selector
+    order: 3
+    page_type: example_index
+    permalink: python/range-slider/
+    thumbnail: thumbnail/sliders.jpg
+---
+
+#### Basic Range Slider and Range Selectors
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+# Load data
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
+df.columns = [col.replace("AAPL.", "") for col in df.columns]
+
+# Create figure
+fig = go.Figure()
+
+fig.add_trace(
+    go.Scatter(x=list(df.Date), y=list(df.High)))
+
+# Set title
+fig.update_layout(
+    title_text="Time series with range slider and selectors"
+)
+
+# Add range slider
+fig.update_layout(
+    xaxis=dict(
+        rangeselector=dict(
+            buttons=list([
+                dict(count=1,
+                     label="1m",
+                     step="month",
+                     stepmode="backward"),
+                dict(count=6,
+                     label="6m",
+                     step="month",
+                     stepmode="backward"),
+                dict(count=1,
+                     label="YTD",
+                     step="year",
+                     stepmode="todate"),
+                dict(count=1,
+                     label="1y",
+                     step="year",
+                     stepmode="backward"),
+                dict(step="all")
+            ])
+        ),
+        rangeslider=dict(
+            visible=True
+        ),
+        type="date"
+    )
+)
+
+fig.show()
+```
+
+#### Range Slider with Vertically Stacked Subplots
+
+```python
+import plotly.graph_objects as go
+
+# Create figure
+fig = go.Figure()
+
+# Add traces
+fig.add_trace(go.Scatter(
+    x=["2013-01-15", "2013-01-29", "2013-02-26", "2013-04-19", "2013-07-02",
+       "2013-08-27",
+       "2013-10-22", "2014-01-20", "2014-05-05", "2014-07-01", "2015-02-09",
+       "2015-04-13",
+       "2015-05-13", "2015-06-08", "2015-08-05", "2016-02-25"],
+    y=["8", "3", "2", "10", "5", "5", "6", "8", "3", "3", "7", "5", "10", "10", "9",
+       "14"],
+    name="var0",
+    text=["8", "3", "2", "10", "5", "5", "6", "8", "3", "3", "7", "5", "10", "10", "9",
+          "14"],
+    yaxis="y",
+))
+
+fig.add_trace(go.Scatter(
+    x=["2015-04-13", "2015-05-13", "2015-06-08", "2015-08-05", "2016-02-25"],
+    y=["53.0", "69.0", "89.0", "41.0", "41.0"],
+    name="var1",
+    text=["53.0", "69.0", "89.0", "41.0", "41.0"],
+    yaxis="y2",
+))
+
+fig.add_trace(go.Scatter(
+    x=["2013-01-29", "2013-02-26", "2013-04-19", "2013-07-02", "2013-08-27",
+       "2013-10-22",
+       "2014-01-20", "2014-04-09", "2014-05-05", "2014-07-01", "2014-09-30",
+       "2015-02-09",
+       "2015-04-13", "2015-06-08", "2016-02-25"],
+    y=["9.6", "4.6", "2.7", "8.3", "18", "7.3", "3", "7.5", "1.0", "0.5", "2.8", "9.2",
+       "13", "5.8", "6.9"],
+    name="var2",
+    text=["9.6", "4.6", "2.7", "8.3", "18", "7.3", "3", "7.5", "1.0", "0.5", "2.8",
+          "9.2",
+          "13", "5.8", "6.9"],
+    yaxis="y3",
+))
+
+fig.add_trace(go.Scatter(
+    x=["2013-01-29", "2013-02-26", "2013-04-19", "2013-07-02", "2013-08-27",
+       "2013-10-22",
+       "2014-01-20", "2014-04-09", "2014-05-05", "2014-07-01", "2014-09-30",
+       "2015-02-09",
+       "2015-04-13", "2015-06-08", "2016-02-25"],
+    y=["6.9", "7.5", "7.3", "7.3", "6.9", "7.1", "8", "7.8", "7.4", "7.9", "7.9", "7.6",
+       "7.2", "7.2", "8.0"],
+    name="var3",
+    text=["6.9", "7.5", "7.3", "7.3", "6.9", "7.1", "8", "7.8", "7.4", "7.9", "7.9",
+          "7.6",
+          "7.2", "7.2", "8.0"],
+    yaxis="y4",
+))
+
+fig.add_trace(go.Scatter(
+    x=["2013-02-26", "2013-07-02", "2013-09-26", "2013-10-22", "2013-12-04",
+       "2014-01-02",
+       "2014-01-20", "2014-05-05", "2014-07-01", "2015-02-09", "2015-05-05"],
+    y=["290", "1078", "263", "407", "660", "740", "33", "374", "95", "734", "3000"],
+    name="var4",
+    text=["290", "1078", "263", "407", "660", "740", "33", "374", "95", "734", "3000"],
+    yaxis="y5",
+))
+
+# style all the traces
+fig.update_traces(
+    hoverinfo="name+x+text",
+    line={"width": 0.5},
+    marker={"size": 8},
+    mode="lines+markers",
+    showlegend=False
+)
+
+# Add annotations
+fig.update_layout(
+    annotations=[
+        dict(
+            x="2013-06-01",
+            y=0,
+            arrowcolor="rgba(63, 81, 181, 0.2)",
+            arrowsize=0.3,
+            ax=0,
+            ay=30,
+            text="state1",
+            xref="x",
+            yanchor="bottom",
+            yref="y"
+        ),
+        dict(
+            x="2014-09-13",
+            y=0,
+            arrowcolor="rgba(76, 175, 80, 0.1)",
+            arrowsize=0.3,
+            ax=0,
+            ay=30,
+            text="state2",
+            xref="x",
+            yanchor="bottom",
+            yref="y"
+        )
+    ],
+)
+
+# Add shapes
+fig.update_layout(
+    shapes=[
+        dict(
+            fillcolor="rgba(63, 81, 181, 0.2)",
+            line={"width": 0},
+            type="rect",
+            x0="2013-01-15",
+            x1="2013-10-17",
+            xref="x",
+            y0=0,
+            y1=0.95,
+            yref="paper"
+        ),
+        dict(
+            fillcolor="rgba(76, 175, 80, 0.1)",
+            line={"width": 0},
+            type="rect",
+            x0="2013-10-22",
+            x1="2015-08-05",
+            xref="x",
+            y0=0,
+            y1=0.95,
+            yref="paper"
+        )
+    ]
+)
+
+# Update axes
+fig.update_layout(
+    xaxis=dict(
+        autorange=True,
+        range=["2012-10-31 18:36:37.3129", "2016-05-10 05:23:22.6871"],
+        rangeslider=dict(
+            autorange=True,
+            range=["2012-10-31 18:36:37.3129", "2016-05-10 05:23:22.6871"]
+        ),
+        type="date"
+    ),
+    yaxis=dict(
+        anchor="x",
+        autorange=True,
+        domain=[0, 0.2],
+        linecolor="#673ab7",
+        mirror=True,
+        range=[-60.0858369099, 28.4406294707],
+        showline=True,
+        side="right",
+        tickfont={"color": "#673ab7"},
+        tickmode="auto",
+        ticks="",
+        title=dict(
+            font=dict(
+                color="#673ab7"
+            )
+        ),
+        type="linear",
+        zeroline=False
+    ),
+    yaxis2=dict(
+        anchor="x",
+        autorange=True,
+        domain=[0.2, 0.4],
+        linecolor="#E91E63",
+        mirror=True,
+        range=[29.3787777032, 100.621222297],
+        showline=True,
+        side="right",
+        tickfont={"color": "#E91E63"},
+        tickmode="auto",
+        ticks="",
+        title=dict(
+            font=dict(
+                color="#E91E63"
+            )
+        ),
+        type="linear",
+        zeroline=False
+    ),
+    yaxis3=dict(
+        anchor="x",
+        autorange=True,
+        domain=[0.4, 0.6],
+        linecolor="#795548",
+        mirror=True,
+        range=[-3.73690396239, 22.2369039624],
+        showline=True,
+        side="right",
+        tickfont={"color": "#795548"},
+        tickmode="auto",
+        ticks="",
+        title=dict(
+            text="mg/L",
+            font=dict(
+                color="#795548"
+            )
+        ),
+        type="linear",
+        zeroline=False
+    ),
+    yaxis4=dict(
+        anchor="x",
+        autorange=True,
+        domain=[0.6, 0.8],
+        linecolor="#607d8b",
+        mirror=True,
+        range=[6.63368032236, 8.26631967764],
+        showline=True,
+        side="right",
+        tickfont={"color": "#607d8b"},
+        tickmode="auto",
+        ticks="",
+        title=dict(
+            text="mmol/L",
+            font=dict(
+                color="#607d8b"
+            )
+        ),
+        type="linear",
+        zeroline=False
+    ),
+    yaxis5=dict(
+        anchor="x",
+        autorange=True,
+        domain=[0.8, 1],
+        linecolor="#2196F3",
+        mirror=True,
+        range=[-685.336803224, 3718.33680322],
+        showline=True,
+        side="right",
+        tickfont={"color": "#2196F3"},
+        tickmode="auto",
+        ticks="",
+        title=dict(
+            text="mg/Kg",
+            font=dict(
+                color="#2196F3"
+            )
+        ),
+        type="linear",
+        zeroline=False
+    )
+)
+
+# Update layout
+fig.update_layout(
+    dragmode="zoom",
+    hovermode="x",
+    legend=dict(traceorder="reversed"),
+    height=600,
+    template="plotly_white",
+    margin=dict(
+        t=100,
+        b=100
+    ),
+)
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-rangeselector <br>and https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-rangeslider <br>for more information and attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/renderers.md plotly-7.1.0+dfsg1/doc/python/renderers.md
--- plotly-5.20.0+dfsg/doc/python/renderers.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/renderers.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,276 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.12.0
+  plotly:
+    description: Displaying Figures using Plotly's Python graphing library
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Displaying Figures
+    order: 3
+    page_type: example_index
+    permalink: python/renderers/
+    redirect_from: python/offline/
+    thumbnail: thumbnail/displaying-figures.png
+---
+
+# Displaying Figures
+
+Plotly's Python graphing library, `plotly.py`, gives you a wide range of options for how and where to display your figures.
+
+In general, there are six different approaches you can take in order to display `plotly` figures:
+
+ - Using the `renderers` framework in the context of a script or notebook (the main topic of this page)
+ - Using [Plotly Studio](https://plotly.com/studio?utm_medium=graphing_libraries&utm_content=python_renderers) to generate charts using natural language
+ - Using [Dash](https://dash.plot.ly) in a web app context
+ - Using a [`FigureWidget` rather than a `Figure`](https://plotly.com/python/figurewidget/) in an [`ipywidgets` context](https://ipywidgets.readthedocs.io/en/stable/)
+ - By [exporting to an HTML file](https://plotly.com/python/interactive-html-export/) and loading that file in a browser immediately or later
+ - By [rendering the figure to a static image file using Kaleido](https://plotly.com/python/static-image-export/) such as PNG, JPEG, SVG or PDF and loading the resulting file in any viewer
+
+Each of the first four approaches is discussed below.
+
+### Displaying Figures Using The `renderers` Framework
+
+The renderers framework is a flexible approach for displaying `plotly.py` figures in a variety of contexts.  To display a figure using the renderers framework, you call the `.show()` method on a graph object figure, or pass the figure to the `plotly.io.show` function. With either approach, `plotly.py` will display the figure using the current default renderer(s).
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure(
+    data=[go.Bar(y=[2, 1, 3])],
+    layout_title_text="A Figure Displayed with fig.show()"
+)
+fig.show()
+```
+
+In most situations, you can omit the call to `.show()` and allow the figure to display itself.
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure(
+    data=[go.Bar(y=[2, 1, 3])],
+    layout_title_text="A Figure Displaying Itself"
+)
+fig
+```
+
+> To be precise, figures will display themselves using the current default renderer when the two following conditions are true. First, the last expression in a cell must evaluate to a figure. Second, `plotly.py` must be running from within an `IPython` kernel.
+
+**In many contexts, an appropriate renderer will be chosen automatically and you will not need to perform any additional configuration.** These contexts include the classic [Jupyter Notebook](https://jupyter.org/), [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/), [Visual Studio Code notebooks](https://code.visualstudio.com/docs/python/jupyter-support), [Google Colab](https://colab.research.google.com/notebooks/intro.ipynb), [Kaggle](https://www.kaggle.com/kernels) notebooks, [Azure](https://notebooks.azure.com/) notebooks, and the [Python interactive shell](https://www.python.org/shell/).
+
+Additional contexts are supported by choosing a compatible renderer including [QtConsole](https://qtconsole.readthedocs.io/en/stable/), [Spyder](https://www.spyder-ide.org/), and more.
+
+Next, we will show how to configure the default renderer.  After that, we will describe all of the built-in renderers and discuss why you might choose to use each one.
+
+> Note: The `renderers` framework is a generalization of the `plotly.offline.iplot` and `plotly.offline.plot` functions that were the recommended way to display figures prior to `plotly.py` version 4.  These functions have been reimplemented using the `renderers` framework and are still supported for backward compatibility, but they will not be discussed here.
+
+
+#### Setting The Default Renderer
+The current and available renderers are configured using the `plotly.io.renderers` configuration object. Display this object to see the current default renderer and the list of all available renderers.
+
+```python
+import plotly.io as pio
+pio.renderers
+```
+
+The default renderer that you see when you display `pio.renderers` might be different than what is shown here.  This is because `plotly.py` attempts to autodetect an appropriate renderer at startup.  You can change the default renderer by assigning the name of an available renderer to the `pio.renderers.default` property.  For example, to switch to the `'browser'` renderer, which opens figures in a tab of the default web browser, you would run the following.
+
+```python
+import plotly.io as pio
+pio.renderers.default = "browser"
+```
+
+> Note: Default renderers persist for the duration of a single session. For example, if you set a default renderer in an `IPython` kernel, that default won't persist across kernel restarts.
+
+It is also possible to set the default renderer using a system environment variable.  At startup, `plotly.py` checks for the existence of an environment variable named `PLOTLY_RENDERER`.  If this environment variable is set to the name of an available renderer, this renderer is set as the default.
+
+#### Overriding The Default Renderer
+You can override the default renderer temporarily by passing the name of an available renderer as the `renderer` keyword argument to a figure's `show()` method. For example, to use the `svg` renderer (described later) without changing the default renderer, set `renderer="svg"`:
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure(
+    data=[go.Bar(y=[2, 1, 3])],
+    layout_title_text="A Figure Displayed with the 'svg' Renderer"
+)
+fig.show(renderer="svg")
+```
+
+#### Built-in Renderers
+In this section, we will describe the built-in renderers so that you can choose the one(s) that best suit your needs.
+
+##### Interactive Renderers
+Interactive renderers display figures using the plotly.js JavaScript library and are fully interactive, supporting pan, zoom, hover tooltips, etc.
+
+###### `notebook`
+This renderer is intended for use in the classic [Jupyter Notebook](https://jupyter.org/install.html) (not JupyterLab). The full plotly.js JavaScript library bundle is added to the notebook the first time a figure is rendered, so this renderer will work without an internet connection.
+
+This renderer is a good choice for notebooks that will be exported to HTML files (Either using [nbconvert](https://nbconvert.readthedocs.io/en/latest/) or the "Download as HTML" menu action) because the exported HTML files will work without an internet connection.
+
+> Note: Adding the plotly.js bundle to the notebook adds a few megabytes to the notebook size. If you can count on always having an internet connection, you may want to consider using the `notebook_connected` renderer if notebook size is a constraint.
+
+###### `notebook_connected`
+This renderer is the same as `notebook` renderer, except the plotly.js JavaScript library bundle is loaded from an online CDN location.  This saves a few megabytes in notebook size, but an internet connection is required in order to display figures that are rendered this way.
+
+This renderer is a good choice for notebooks that will be shared with [nbviewer](https://nbviewer.jupyter.org/) since users must have an active internet connection to access nbviewer in the first place.
+
+###### `kaggle` and `azure`
+These are aliases for `notebook_connected` because this renderer is a good choice for use with [Kaggle Notebooks](https://www.kaggle.com/docs/notebooks) and [Azure Notebooks](https://notebooks.azure.com/).
+
+###### `colab`
+This is a custom renderer for use with [Google Colab](https://colab.research.google.com).
+
+###### `browser`
+This renderer will open a figure in a browser tab using the default web browser.  This renderer can only be used when the Python kernel is running locally on the same machine as the web browser, so it is not compatible with Jupyter Hub or online notebook services.
+
+> Implementation Note 1: In this context, the "default browser" is the browser that is chosen by the Python [`webbrowser`](https://docs.python.org/3.7/library/webbrowser.html) module.
+
+> Implementation Note 2: The `browser` renderer works by setting up a single use local webserver on a local port. Since the webserver is shut down as soon as the figure is served to the browser, the figure will not be restored if the browser is refreshed.
+
+###### `firefox`, `chrome`, and `chromium`
+These renderers are the same as the `browser` renderer, but they force the use of a particular browser.
+
+###### `iframe` and `iframe_connected`
+These renderers write figures out as standalone HTML files and then display [`iframe`](https://www.w3schools.com/html/html_iframe.asp) elements that reference these HTML files. The `iframe` renderer will include the plotly.js JavaScript bundle in each HTML file that is written, while the `iframe_connected` renderer includes only a reference to an online CDN location from which to load plotly.js.  Consequently, the `iframe_connected` renderer outputs files that are smaller than the `iframe` renderer, but it requires an internet connection while the `iframe` renderer can operate offline.
+
+This renderer may be useful when working with notebooks that contain lots of large figures.  When using the `notebook` or `notebook_connected` renderer, all of the data for all of the figures in a notebook are stored inline in the notebook itself. If this would result in a prohibitively large notebook size, an `iframe` or `iframe_connected` renderer could be used instead. With the `iframe` renderers, the figure data are stored in the individual HTML files rather than in the notebook itself, resulting in a smaller notebook size.
+
+> Implementation Note: The HTML files written by the `iframe` renderers are stored in a subdirectory named `iframe_figures`.  The HTML files are given names based on the execution number of the notebook cell that produced the figure. This means that each time a notebook kernel is restarted, any prior HTML files will be overwritten.  This also means that you should not store multiple notebooks using an `iframe` renderer in the same directory, because this could result in figures from one notebook overwriting figures from another notebook.
+
+
+###### `plotly_mimetype`
+
+The `plotly_mimetype` renderer creates a specification of the figure (called a MIME-type bundle), and requests that the current user interface displays it. User interfaces that support this renderer include [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/), [nteract](https://nteract.io/), and the Visual Studio Code [notebook interface](https://code.visualstudio.com/docs/python/jupyter-support).
+
+###### `jupyterlab`, `nteract`, and `vscode`
+These are aliases for `plotly_mimetype` since this renderer is a good choice when working in JupyterLab, nteract, and the Visual Studio Code notebook interface. Note that in VSCode Notebooks, the version of Plotly.js that is used to render is provided by the [vscode-python extension](https://code.visualstudio.com/docs/languages/python) and often trails the latest version by several weeks, so the latest features of `plotly` may not be available in VSCode right away. The situation is similar for Nteract.
+
+##### Static Image Renderers
+A set of renderers is provided for displaying figures as static images. See the [Static Image Export](https://plotly.com/python/static-image-export/) page for more information on getting set up.
+
+###### `png`, `jpeg`, and `svg`
+These renderers display figures as static `.png`, `.jpeg`, and `.svg` files, respectively.  These renderers are useful for user interfaces that do not support inline HTML output, but do support inline static images.  Examples include the [QtConsole](https://qtconsole.readthedocs.io/en/stable/), [Spyder](https://www.spyder-ide.org/), and the PyCharm [notebook interface](https://www.jetbrains.com/help/pycharm/jupyter-notebook-support.html).
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure(
+    data=[go.Bar(y=[2, 1, 3])],
+    layout_title_text="A Figure Displayed with the 'png' Renderer"
+)
+fig.show(renderer="png")
+```
+
+###### PDF
+This renderer displays figures as static PDF files. This is especially useful for notebooks that will be exported to PDF files using the LaTeX export capabilities of [`nbconvert`](https://nbconvert.readthedocs.io/en/latest/).
+
+##### Other Miscellaneous Renderers
+
+###### JSON
+In editors that support it (JupyterLab, nteract, and the Visual Studio Code notebook interface), this renderer displays the JSON representation of a figure in a collapsible interactive tree structure.  This can be very useful for examining the structure of complex figures.
+
+##### Multiple Renderers
+You can specify that multiple renderers should be used by joining their names on `"+"` characters. This is useful when writing code that needs to support multiple contexts. For example, if a notebook specifies a default renderer string of  `"notebook+plotly_mimetype+pdf"`, then this notebook would be able to run in the classic Jupyter Notebook as well as in JupyterLab, and it would support being exported to PDF using `nbconvert`.
+
+#### Customizing Built-In Renderers
+Most built-in renderers have configuration options to customize their behavior.  To view a description of a renderer, including its configuration options, access the renderer object using dictionary-style key lookup on the `plotly.io.renderers` configuration object and then display it.  Here is an example of accessing and displaying the `png` renderer.
+
+```python
+import plotly.io as pio
+png_renderer = pio.renderers["png"]
+png_renderer
+```
+
+From this output, you can see that the `png` renderer supports 3 properties: `width`, `height`, and `scale`.  You can customize these properties by assigning new values to them.
+
+Here is an example that customizes the `png` renderer to change the resulting image size, sets the `png` renderer as the default, and then displays a figure.
+
+```python
+import plotly.io as pio
+png_renderer = pio.renderers["png"]
+png_renderer.width = 500
+png_renderer.height = 500
+
+pio.renderers.default = "png"
+
+import plotly.graph_objects as go
+fig = go.Figure(
+    data=[go.Bar(y=[2, 1, 3])],
+    layout_title_text="A Figure Displayed with the 'png' Renderer"
+)
+fig.show()
+```
+
+You can also override the values of renderer parameters temporarily by passing them as keyword arguments to the `show()` method.  For example
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[go.Bar(y=[2, 1, 3])],
+    layout_title_text="A Figure Displayed with the 'png' Renderer"
+)
+fig.show(renderer="png", width=800, height=300)
+```
+
+### Displaying figures in Plotly Studio
+
+Use [Plotly Studio](https://plotly.com/studio?utm_medium=graphing_libraries&utm_content=python_renderers) to build data apps with Plotly figures using natural language and AI. Describe the charts you want to Plotly Studio, which generates them within a [Dash](https://plotly.com/dash/?utm_medium=graphing_libraries&utm_content=python_renderers) app that you can publish to [Plotly Cloud](https://plotly.com/cloud/?utm_medium=graphing_libraries&utm_content=python_renderers) or [Dash Enterprise](https://plotly.com/dash/?utm_medium=graphing_libraries&utm_content=python_renderers).
+
+```python hide_code=true
+from IPython.display import HTML
+HTML('<div style="text-align: center;"><iframe src="https://www.youtube.com/embed/ZGWMv7PQn-U?si=sRuSNPZWD1AzZsCf&mute=1&rel=0" width="100%" height="600" frameborder="0" allowfullscreen></iframe></div>')
+```
+
+### Displaying figures in Dash
+
+[Dash](https://plotly.com/dash/?utm_medium=graphing_libraries&utm_content=python_renderers) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/?utm_medium=graphing_libraries&utm_content=python_renderers) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/?utm_medium=graphing_libraries&utm_content=python_renderers">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/?utm_medium=graphing_libraries&utm_content=python_renderers">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'renderers', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+## Displaying Figures Using `ipywidgets`
+Plotly figures can be displayed in [ipywidgets](https://ipywidgets.readthedocs.io/en/stable/) contexts using `plotly.graph_objects.FigureWidget` objects.  `FigureWidget` is a figure graph object (just like `plotly.graph_objects.Figure`), so you can add traces to it and update it just like a regular `Figure`.  But `FigureWidget` is also an `ipywidgets` object, which means that you can display it alongside other `ipywidgets` to build user interfaces right in the notebook.
+
+See the [Plotly FigureWidget Overview](https://plot.ly/python/figurewidget/) for more information on integrating `plotly.py` figures with `ipywidgets`.
+
+It is important to note that `FigureWidget` does not use the renderers framework discussed above, so you should not use the `plotly.io.show` function on `FigureWidget` objects.
+
+
+## Performance
+
+No matter the approach chosen to display a figure, [the figure data structure](https://plotly.com/python/figure-structure/) is first (automatically, internally) serialized into a JSON string before being transferred from the Python context to the browser (or [to an HTML file first](https://plotly.com/python/interactive-html-export/) or [to Kaleido for static image export](https://plotly.com/python/static-image-export/)).
+
+*New in v5.0*
+
+The default JSON serialization mechanism can be slow for figures with many data points or with large `numpy` arrays or data frames. **If [the `orjson` package](https://github.com/ijl/orjson) is installed**, `plotly` will use that instead of the built-in `json` package, which can lead to **5-10x** speedups for large figures.
+
+Once a figure is serialized to JSON, it must be rendered by a browser, either immediately in the user's browser, at some later point if the figure is exported to HTML, or immediately in Kaleido's internal headless browser for static image export. Rendering time is generally proportional to the total number of data points in the figure, the number of traces and the number of subplots. In situations where rendering performance is slow, we recommend considering [the use of `plotly` WebGL traces](/python/webgl-vs-svg/) to exploit GPU-accelerated rendering in the browser, or [using the Datashader library to do Python-side rendering](/python/datashader/) before using `px.imshow()` to render the figure.
diff -Nru plotly-5.20.0+dfsg/doc/python/sankey-diagram.md plotly-7.1.0+dfsg1/doc/python/sankey-diagram.md
--- plotly-5.20.0+dfsg/doc/python/sankey-diagram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/sankey-diagram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,366 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernel_info:
+    name: python2
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make Sankey Diagrams in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Sankey Diagram
+    order: 12
+    page_type: u-guide
+    permalink: python/sankey-diagram/
+    thumbnail: thumbnail/sankey.jpg
+---
+
+A [Sankey diagram](https://en.wikipedia.org/wiki/Sankey_diagram) is a flow diagram, in which the width of arrows is proportional to the flow quantity.
+
+
+### Basic Sankey Diagram
+Sankey diagrams visualize the contributions to a flow by defining [source](https://plotly.com/python/reference/sankey/#sankey-link-source) to represent the source node, [target](https://plotly.com/python/reference/sankey/#sankey-link-target) for the target node, [value](https://plotly.com/python/reference/sankey/#sankey-link-value) to set the flow volume, and [label](https://plotly.com/python/reference/sankey/#sankey-node-label) that shows the node name.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Sankey(
+    node = dict(
+      pad = 15,
+      thickness = 20,
+      line = dict(color = "black", width = 0.5),
+      label = ["A1", "A2", "B1", "B2", "C1", "C2"],
+      color = "blue"
+    ),
+    link = dict(
+      source = [0, 1, 0, 2, 3, 3], # indices correspond to labels, eg A1, A2, A1, B1, ...
+      target = [2, 3, 3, 4, 4, 5],
+      value = [8, 4, 2, 8, 4, 2]
+  ))])
+
+fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
+fig.show()
+```
+
+### More complex Sankey diagram with colored links
+
+```python
+import plotly.graph_objects as go
+import urllib, json
+
+url = 'https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'
+response = urllib.request.urlopen(url)
+data = json.loads(response.read())
+
+# override gray link colors with 'source' colors
+opacity = 0.4
+# change 'magenta' to its 'rgba' value to add opacity
+data['data'][0]['node']['color'] = ['rgba(255,0,255, 0.8)' if color == "magenta" else color for color in data['data'][0]['node']['color']]
+data['data'][0]['link']['color'] = [data['data'][0]['node']['color'][src].replace("0.8", str(opacity))
+                                    for src in data['data'][0]['link']['source']]
+
+fig = go.Figure(data=[go.Sankey(
+    valueformat = ".0f",
+    valuesuffix = "TWh",
+    # Define nodes
+    node = dict(
+      pad = 15,
+      thickness = 15,
+      line = dict(color = "black", width = 0.5),
+      label =  data['data'][0]['node']['label'],
+      color =  data['data'][0]['node']['color']
+    ),
+    # Add links
+    link = dict(
+      source =  data['data'][0]['link']['source'],
+      target =  data['data'][0]['link']['target'],
+      value =  data['data'][0]['link']['value'],
+      label =  data['data'][0]['link']['label'],
+      color =  data['data'][0]['link']['color']
+))])
+
+fig.update_layout(title_text="Energy forecast for 2050<br>Source: Department of Energy & Climate Change, Tom Counsell via <a href='https://bost.ocks.org/mike/sankey/'>Mike Bostock</a>",
+                  font_size=10)
+fig.show()
+```
+
+### Sankey Diagram in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'sankey-diagram', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Style Sankey Diagram
+This example also uses [hovermode](https://plotly.com/python/reference/layout/#layout-hovermode) to enable multiple tooltips.
+
+```python
+import plotly.graph_objects as go
+import urllib, json
+
+url = 'https://raw.githubusercontent.com/plotly/plotly.js/master/test/image/mocks/sankey_energy.json'
+response = urllib.request.urlopen(url)
+data = json.loads(response.read())
+
+fig = go.Figure(data=[go.Sankey(
+    valueformat = ".0f",
+    valuesuffix = "TWh",
+    node = dict(
+      pad = 15,
+      thickness = 15,
+      line = dict(color = "black", width = 0.5),
+      label =  data['data'][0]['node']['label'],
+      color =  data['data'][0]['node']['color']
+    ),
+    link = dict(
+      source =  data['data'][0]['link']['source'],
+      target =  data['data'][0]['link']['target'],
+      value =  data['data'][0]['link']['value'],
+      label =  data['data'][0]['link']['label']
+  ))])
+
+fig.update_layout(
+    hovermode = 'x',
+    title=dict(text="Energy forecast for 2050<br>Source: Department of Energy & Climate Change, Tom Counsell via <a href='https://bost.ocks.org/mike/sankey/'>Mike Bostock</a>"),
+    font=dict(size = 10, color = 'white'),
+    plot_bgcolor='black',
+    paper_bgcolor='black'
+)
+
+fig.show()
+```
+
+### Link Hover Color
+
+*New in 5.19*
+
+Set `link.hovercolor` to change the colors of links on hover. `link.hovercolor` accepts either one color, specified as a string, that will apply to all links, or a list of colors to specify different colors for each link. Here, we use a list to specify a different color for each link:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Sankey(
+    node = dict(
+      pad = 15,
+      thickness = 20,
+      line = dict(color = "black", width = 0.5),
+      label = ["A1", "A2", "B1", "B2", "C1", "C2"],
+      color = "blue"
+    ),
+    link = dict(
+      source = [0, 1, 0, 2, 3, 3],
+      target = [2, 3, 3, 4, 4, 5],
+      value = [8, 4, 2, 8, 4, 2],
+      hovercolor=["midnightblue", "lightskyblue", "gold", "mediumturquoise", "lightgreen", "cyan"],
+  ))])
+
+fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
+fig.show()
+```
+
+### Hovertemplate and customdata of Sankey diagrams
+
+Links and nodes have their own hovertemplate, in which link- or node-specific attributes can be displayed. To add more data to links and nodes, it is possible to use the `customdata` attribute of `link` and `nodes`, as in the following example. For more information about hovertemplate and customdata, please see the [tutorial on hover text](/python/hover-text-and-formatting/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Sankey(
+    node = dict(
+      pad = 15,
+      thickness = 20,
+      line = dict(color = "black", width = 0.5),
+      label = ["A1", "A2", "B1", "B2", "C1", "C2"],
+      customdata = ["Long name A1", "Long name A2", "Long name B1", "Long name B2",
+                    "Long name C1", "Long name C2"],
+      hovertemplate='Node %{customdata} has total value %{value}<extra></extra>',
+      color = "blue"
+    ),
+    link = dict(
+      source = [0, 1, 0, 2, 3, 3], # indices correspond to labels, eg A1, A2, A2, B1, ...
+      target = [2, 3, 3, 4, 4, 5],
+      value = [8, 4, 2, 8, 4, 2],
+      customdata = ["q","r","s","t","u","v"],
+      hovertemplate='Link from node %{source.customdata}<br />'+
+        'to node%{target.customdata}<br />has value %{value}'+
+        '<br />and data %{customdata}<extra></extra>',
+  ))])
+
+fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
+fig.show()
+```
+
+### Define Node Position
+
+The following example sets [node.x](https://plotly.com/python/reference/sankey/#sankey-node-x) and `node.y` to place nodes in the specified locations, except in the `snap arrangement` (default behaviour when `node.x` and `node.y` are not defined) to avoid overlapping of the nodes, therefore, an automatic snapping of elements will be set to define the padding between nodes via [nodepad](https://plotly.com/python/reference/sankey/#sankey-node-pad). The other possible arrangements are:<font color='blue'> 1)</font> perpendicular <font color='blue'>2)</font> freeform <font color='blue'>3)</font> fixed
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Sankey(
+    arrangement = "snap",
+    node = {
+        "label": ["A", "B", "C", "D", "E", "F"],
+        "x": [0.2, 0.1, 0.5, 0.7, 0.3, 0.5],
+        "y": [0.7, 0.5, 0.2, 0.4, 0.2, 0.3],
+        'pad':10},  # 10 Pixels
+    link = {
+        "source": [0, 0, 1, 2, 5, 4, 3, 5],
+        "target": [5, 3, 4, 3, 0, 2, 2, 3],
+        "value": [1, 2, 1, 1, 1, 1, 1, 2]}))
+
+fig.show()
+```
+
+### Sankey Diagram with Arrow Links
+
+*New in 5.10*
+
+Create a Sankey diagram with arrow links by setting the `arrowlen` attribute of `link`:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Sankey(
+    arrangement='snap',
+    node=dict(
+        label=['A', 'B', 'C', 'D', 'E', 'F'],
+        x=[0.2, 0.1, 0.5, 0.7, 0.3, 0.5],
+        y=[0.7, 0.5, 0.2, 0.4, 0.2, 0.3],
+        pad=10,
+        align="right",
+    ),
+    link=dict(
+        arrowlen=15,
+        source=[0, 0, 1, 2, 5, 4, 3, 5],
+        target=[5, 3, 4, 3, 0, 2, 2, 3],
+        value=[1, 2, 1, 1, 1, 1, 1, 2]
+    )
+))
+
+fig.show()
+```
+
+### Node Alignment
+
+*New in 5.19*
+
+You can set the alignment of nodes using `node.align`. Here are two examples with the same `source` and `target`. The first example has nodes aligned "left" and the second has nodes aligned "right". `node.align` also supports "center" and "justify". "justify" is the default if `node.align` is not set, and is similar to aligning to the "left", except that nodes without outgoing links are moved to the right of the figure.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Sankey(
+    arrangement='snap',
+    node=dict(
+        label=["0", "1", "2", "3", "4", "5"],
+        align='left'
+
+    ),
+    link=dict(
+        arrowlen=15,
+        source=[0, 1, 4, 2, 1],
+        target=[1, 4, 5, 4, 3],
+        value=[4, 2, 3, 1, 2]
+    )
+))
+
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Sankey(
+    arrangement='snap',
+    node=dict(
+        label=["0", "1", "2", "3", "4", "5"],
+        align="right",
+    ),
+    link=dict(
+        arrowlen=15,
+        source=[0, 1, 4, 2, 1],
+        target=[1, 4, 5, 4, 3],
+        value=[4, 2, 3, 1, 2]
+    )
+))
+
+fig.show()
+```
+
+### Node and Link Order
+
+*New in 7.0*
+
+By default, the layout reorders nodes within a column, and links within a node, to reduce the number of crossings. Set `node.sort="input"` and `link.sort="input"` to keep the order you provide instead: nodes appear in the order given in `node.label`, and links in the order given in `link.source` and `link.target`. Use this when the order carries meaning, such as a ranking, or when you need a layout that stays the same across renders.
+
+```python
+import plotly.graph_objects as go
+
+labels = ["Gold", "Silver", "Bronze", "Q1", "Q2", "Q3"]
+
+fig = go.Figure(go.Sankey(
+    node=dict(label=labels, pad=15, thickness=20, sort="input"),
+    link=dict(
+        source=[0, 0, 0, 1, 1, 1, 2, 2, 2],
+        target=[3, 4, 5, 3, 4, 5, 3, 4, 5],
+        value=[8, 4, 2, 5, 6, 3, 2, 3, 7],
+        sort="input"
+    )
+))
+
+fig.update_layout(title_text="Medals by quarter, categories in ranked order")
+fig.show()
+```
+
+### Flow Direction
+
+*New in 7.0*
+
+`direction` sets which way flows run along the `orientation` axis. With the default `"forward"`, sources are on the left for a horizontal diagram and at the top for a vertical one. With `"reversed"`, sources are on the right or at the bottom.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Sankey(
+    direction="reversed",
+    node=dict(label=["A", "B", "Total"], pad=15, thickness=20),
+    link=dict(source=[0, 1], target=[2, 2], value=[8, 4])
+))
+
+fig.show()
+```
+
+### Reference
+
+See [https://plotly.com/python/reference/sankey](https://plotly.com/python/reference/sankey/) for more information and options!
diff -Nru plotly-5.20.0+dfsg/doc/python/scatter-plots-on-maps.md plotly-7.1.0+dfsg1/doc/python/scatter-plots-on-maps.md
--- plotly-5.20.0+dfsg/doc/python/scatter-plots-on-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/scatter-plots-on-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,241 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make scatter plots on maps in Python. Scatter plots on maps
+      highlight geographic areas and can be colored by value.
+    display_as: maps
+    language: python
+    layout: base
+    name: Scatter Plots on Maps
+    order: 11
+    page_type: u-guide
+    permalink: python/scatter-plots-on-maps/
+    thumbnail: thumbnail/scatter-plot-on-maps.jpg
+---
+
+#### Base Map Configuration
+
+Plotly figures made with [Plotly Express](/python/plotly-express/) `px.scatter_geo`, `px.line_geo` or `px.choropleth` functions or containing `go.Choropleth` or `go.Scattergeo` [graph objects](/python/graph-objects/) have a `go.layout.Geo` object which can be used to [control the appearance of the base map](/python/map-configuration/) onto which data is plotted.
+
+### Geographical Scatter Plot with px.scatter_geo
+
+Here we show the [Plotly Express](/python/plotly-express/) function `px.scatter_geo` for a geographical scatter plot. The `size` argument is used to set the size of markers from a given column of the DataFrame.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.scatter_geo(df, locations="iso_alpha",
+                     size="pop", # size of markers, "pop" is one of the columns of gapminder
+                     )
+fig.show()
+```
+
+#### Customize geographical scatter plot
+
+```python
+import plotly.express as px
+df = px.data.gapminder().query("year == 2007")
+fig = px.scatter_geo(df, locations="iso_alpha",
+                     color="continent", # which column to use to set the color of markers
+                     hover_name="country", # column added to hover information
+                     size="pop", # size of markers
+                     projection="natural earth")
+fig.show()
+```
+
+### Basic Example with GeoPandas
+
+`px.scatter_geo` can work well with [GeoPandas](https://geopandas.org/) dataframes whose `geometry` is of type `Point`.
+
+```python
+import plotly.express as px
+import geopandas as gpd
+from geodatasets import get_url
+
+geo_df = gpd.read_file(get_url("naturalearth.cities"))
+
+fig = px.scatter_geo(geo_df,
+                    lat=geo_df.geometry.y,
+                    lon=geo_df.geometry.x,
+                    hover_name="name")
+fig.show()
+```
+
+### U.S. Airports Map
+
+Here we show how to use `go.Scattergeo` from `plotly.graph_objects`.
+
+#### Simple U.S. Airports Map
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv')
+df['text'] = df['airport'] + '' + df['city'] + ', ' + df['state'] + '' + 'Arrivals: ' + df['cnt'].astype(str)
+
+fig = go.Figure(data=go.Scattergeo(
+        lon = df['long'],
+        lat = df['lat'],
+        text = df['text'],
+        mode = 'markers',
+        marker_color = df['cnt'],
+        ))
+
+fig.update_layout(
+        title = 'Most trafficked US airports<br>(Hover for airport names)',
+        geo_scope='usa',
+    )
+fig.show()
+```
+
+#### Styled U.S. Airports Map
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv')
+df['text'] = df['airport'] + '' + df['city'] + ', ' + df['state'] + '' + 'Arrivals: ' + df['cnt'].astype(str)
+
+
+fig = go.Figure(data=go.Scattergeo(
+        locationmode = 'USA-states',
+        lon = df['long'],
+        lat = df['lat'],
+        text = df['text'],
+        mode = 'markers',
+        marker = dict(
+            size = 8,
+            opacity = 0.8,
+            reversescale = True,
+            autocolorscale = False,
+            symbol = 'square',
+            line = dict(
+                width=1,
+                color='rgba(102, 102, 102)'
+            ),
+            colorscale = 'Blues',
+            cmin = 0,
+            color = df['cnt'],
+            cmax = df['cnt'].max(),
+            colorbar=dict(
+                title=dict(
+                    text="Incoming flights<br>February 2011"
+                )
+            )
+        )))
+
+fig.update_layout(
+        title = 'Most trafficked US airports<br>(Hover for airport names)',
+        geo = dict(
+            scope='usa',
+            projection_type='albers usa',
+            showland = True,
+            landcolor = "rgb(250, 250, 250)",
+            subunitcolor = "rgb(217, 217, 217)",
+            countrycolor = "rgb(217, 217, 217)",
+            countrywidth = 0.5,
+            subunitwidth = 0.5
+        ),
+    )
+fig.show()
+```
+
+### North American Precipitation Map
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2015_06_30_precipitation.csv')
+
+scl = [0,"rgb(150,0,90)"],[0.125,"rgb(0, 0, 200)"],[0.25,"rgb(0, 25, 255)"],\
+[0.375,"rgb(0, 152, 255)"],[0.5,"rgb(44, 255, 150)"],[0.625,"rgb(151, 255, 0)"],\
+[0.75,"rgb(255, 234, 0)"],[0.875,"rgb(255, 111, 0)"],[1,"rgb(255, 0, 0)"]
+
+fig = go.Figure(data=go.Scattergeo(
+    lat = df['Lat'],
+    lon = df['Lon'],
+    text = df['Globvalue'].astype(str) + ' inches',
+    marker = dict(
+        color = df['Globvalue'],
+        colorscale = scl,
+        reversescale = True,
+        opacity = 0.7,
+        size = 2,
+        colorbar = dict(
+            title = dict(
+                side="right"
+            ),
+            outlinecolor = "rgba(68, 68, 68, 0)",
+            ticks = "outside",
+            showticksuffix = "last",
+            dtick = 0.1
+        )
+    )
+))
+
+fig.update_layout(
+    geo = dict(
+        scope = 'north america',
+        showland = True,
+        landcolor = "rgb(212, 212, 212)",
+        subunitcolor = "rgb(255, 255, 255)",
+        countrycolor = "rgb(255, 255, 255)",
+        showlakes = True,
+        lakecolor = "rgb(255, 255, 255)",
+        showsubunits = True,
+        showcountries = True,
+        resolution = 50,
+        projection = dict(
+            type = 'conic conformal',
+            rotation_lon = -100
+        ),
+        lonaxis = dict(
+            showgrid = True,
+            gridwidth = 0.5,
+            range= [ -140.0, -55.0 ],
+            dtick = 5
+        ),
+        lataxis = dict (
+            showgrid = True,
+            gridwidth = 0.5,
+            range= [ 20.0, 60.0 ],
+            dtick = 5
+        )
+    ),
+    title=dict(text='US Precipitation 06-30-2015<br>Source: <a href="http://water.weather.gov/precip/">NOAA</a>'),
+)
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(scatter_geo)`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_geo) or https://plotly.com/python/reference/scattergeo/ and https://plotly.com/python/reference/layout/geo/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/selections.md plotly-7.1.0+dfsg1/doc/python/selections.md
--- plotly-5.20.0+dfsg/doc/python/selections.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/selections.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,312 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.7
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to use selections in Python. Examples of adding and styling selections.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Selections
+    order: 39
+    permalink: python/selections/
+    thumbnail: thumbnail/ml_apps.png
+---
+
+## Adding Selections to Cartesian Subplots
+
+*New in 5.10*
+
+You can add persistent selections to a rendered figure using the **Box Select** and **Lasso Select** tools in the mode bar.
+To add multiple selections, select **Shift** when making new selections.
+To clear a selection, double-click it. On a subplot you can clear all selections by double-clicking any unselected area of the subplot.
+
+
+
+You can also add selections to a figure that displays when it renders using `fig.add_selection`.
+Here, we add a rectangular selection with a region between `3.0` and `6.5` on the x axis and between `3.5` and `5.5` on the y axis.
+
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.add_selection(x0=3.0, y0=6.5, x1=3.5, y1=5.5)
+
+fig.show()
+```
+
+## Selections Using a Custom SVG
+
+
+In the above example, we added a rectangular selection. You can also render a custom SVG for a selection by defining a `path` that can include single or multiple polygons. Here, we create a selection with a single polygon path "M2,6.5L4,7.5L4,6Z".
+
+Please note that multiple polygons e.g. "M0,0L0,10L10,10,L10,0Z M2,2L2,8L8,8,L8,2Z" could be used to subtract certain regions from the selection.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.add_selection(path="M2,6.5L4,7.5L4,6Z")
+
+fig.show()
+```
+
+## Styling Selections
+
+
+In the above example, we added a selection to the figure that is displayed when the figure renders.
+`fig.add_selection` accepts additional properties that you can use to style the selection. Here, we add a `color`, `width`, and specify the `dash` type for the selection.
+
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.add_selection(
+    x0=2.5, y0=6.5, x1=3.5, y1=5.5,
+    line=dict(
+        color="Crimson",
+        width=2,
+        dash="dash",
+    ))
+
+fig.show()
+
+```
+
+## Styling New Selections
+
+You can style new selections made on the figure by setting properties on `newselection`.
+Try making a new selection on the figure to try it out.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+
+fig.update_layout(dragmode='select',
+                  newselection=dict(line=dict(color='blue')))
+
+fig.show()
+```
+
+## Fill Color for Active Selections
+
+You can style the active selection with `activeselection`. In this example, we set active selections (when created or clicked) to appear with a `fillcolor` of `yellow`.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length")
+fig.add_selection(x0=3.0, y0=6.5, x1=3.5, y1=5.5)
+
+fig.update_layout(dragmode='select',
+                  activeselection=dict(fillcolor='yellow'))
+
+fig.show()
+```
+
+## Selections with Time Series
+
+Selections are also supported on time series figures. Here, we add a rectangular selection with a region between the dates `2019-01-01"` and `"2019-10-01"` on the x axis and between `0.95` and `1.15` on the y axis.
+
+
+```python
+import plotly.express as px
+
+df = px.data.stocks()
+fig = px.line(df, x='date', y="GOOG", markers=True)
+fig.add_selection(x0="2019-01-01", y0=0.95, x1="2019-10-01", y1=1.15)
+fig.show()
+```
+
+## Referencing Selections on Multiple Cartesian Subplots
+
+
+You can add selections to multiple Cartesian subplots by specifying `xref` and/or `yref`. Here, we add one selection on the plot with axis ids `x` and `y2` and two selections to the plot with axis ids `x` and `y`.
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+
+np.random.seed(0)
+t = np.linspace(-1, 1.2, 2000)
+x = (t**3) + (0.3 * np.random.randn(2000))
+y = (t**6) + (0.3 * np.random.randn(2000))
+
+fig = go.Figure()
+fig.add_trace(go.Histogram2dContour(
+        x = x,
+        y = y,
+        colorscale = 'Blues',
+        reversescale = True,
+        xaxis = 'x',
+        yaxis = 'y'
+    ))
+fig.add_trace(go.Scatter(
+        x = x,
+        y = y,
+        xaxis = 'x',
+        yaxis = 'y',
+        mode = 'markers',
+        marker = dict(
+            color = 'rgba(0,0,0,0.3)',
+            size = 3
+        )
+    ))
+fig.add_trace(go.Histogram(
+        y = y,
+        xaxis = 'x2',
+        marker = dict(
+            color = 'rgba(0,0,0,1)'
+        )
+    ))
+fig.add_trace(go.Histogram(
+        x = x,
+        yaxis = 'y2',
+        marker = dict(
+            color = 'rgba(0,0,0,1)'
+        )
+    ))
+
+fig.update_layout(
+    autosize = False,
+    xaxis = dict(
+        zeroline = False,
+        domain = [0,0.85],
+        showgrid = False
+    ),
+    yaxis = dict(
+        zeroline = False,
+        domain = [0,0.85],
+        showgrid = False
+    ),
+    xaxis2 = dict(
+        zeroline = False,
+        domain = [0.85,1],
+        showgrid = False
+    ),
+    yaxis2 = dict(
+        zeroline = False,
+        domain = [0.85,1],
+        showgrid = False
+    ),
+    height = 600,
+    width = 600,
+    bargap = 0,
+    hovermode = 'closest',
+    showlegend = False,
+    selections = [
+        dict(
+            x0 = 0.5,
+            x1 = -0.5,
+            xref = "x",
+            y0 = 190,
+            y1= 0,
+            yref = "y2",
+            line = dict(
+                color="yellow"
+            )
+        ),
+        dict(
+            x0 = -0.2,
+            x1 = -1.5,
+            xref = "x",
+            y0 = 2,
+            y1= -1,
+            yref = "y",
+            line = dict(
+                color="yellow"
+            )
+        ),
+        dict(
+            path= "M0.75,2.39L0.98,3.38L1.46,3.68L1.80,3.35L2.01,2.51L1.67,1.15L1.18,0.50L0.65,0.66L0.54,0.83L0.49,1.56Z",
+            xref= 'x',
+            yref = 'y',
+            line = dict(
+                color='yellow'
+            )
+        )
+    ]
+)
+
+
+fig.show()
+```
+
+## Referencing Selections on a Scatterplot Matrix
+
+
+You can add selections to a scatterplot matrix  by specifying `xref` and/or `yref`. Here, we add one selection on the plot with axis ids `x2` and `y2` and another on the plot with ids `x3` and `y`.
+
+```python
+import plotly.express as px
+
+df = px.data.iris()
+
+fig = px.scatter_matrix(df,
+    dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"],
+    color="species")
+
+fig.update_layout(
+    xaxis = {"matches": "y"},
+    xaxis2 = {"matches": "y2"},
+    xaxis3 = {"matches": "y3"},
+    xaxis4 = {"matches": "y4"},
+    height = 900,
+    width = 750,
+    dragmode = 'select',
+    selections = [
+        dict(
+            x0 = 3,
+            x1 = 4,
+            xref = "x2",
+            y0 = 8,
+            y1= 6,
+            yref = "y"
+        ),
+        dict(
+            x0 = 5,
+            x1 = 1,
+            xref = "x3",
+            y0 = 5,
+            y1= 4,
+            yref = "y",
+        )
+    ]
+)
+
+fig.show()
+```
+
diff -Nru plotly-5.20.0+dfsg/doc/python/setting-graph-size.md plotly-7.1.0+dfsg1/doc/python/setting-graph-size.md
--- plotly-5.20.0+dfsg/doc/python/setting-graph-size.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/setting-graph-size.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,219 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.0
+  plotly:
+    description: How to manipulate the graph size, margins and background color.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Setting Graph Size
+    order: 12
+    permalink: python/setting-graph-size/
+    thumbnail: thumbnail/sizing.png
+---
+
+### Adjusting Height, Width, & Margins with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", facet_col="sex",
+                 width=800, height=400)
+
+fig.update_layout(
+    margin=dict(l=20, r=20, t=20, b=20),
+    paper_bgcolor="LightSteelBlue",
+)
+
+fig.show()
+```
+
+### Adjusting graph size with Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'setting-graph-size', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Adjusting Height, Width, & Margins With Graph Objects
+
+[Graph objects](/python/graph-objects/) are the low-level building blocks of figures which you can use instead of Plotly Express for greater control.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[0, 1, 2, 3, 4, 5, 6, 7, 8]
+))
+
+fig.update_layout(
+    autosize=False,
+    width=500,
+    height=500,
+    margin=dict(
+        l=50,
+        r=50,
+        b=100,
+        t=100,
+        pad=4
+    ),
+    paper_bgcolor="LightSteelBlue",
+)
+
+fig.show()
+```
+
+### Automatically Adjust Margins
+
+Set [automargin](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-automargin) to `True` and Plotly will automatically increase the margin size to prevent ticklabels from being cut off or overlapping with axis titles.
+
+```python
+import plotly.graph_objects as go
+
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(
+    x=["Apples", "Oranges", "Watermelon", "Pears"],
+    y=[3, 2, 1, 4]
+))
+
+fig.update_layout(
+    autosize=False,
+    width=500,
+    height=500,
+    yaxis=dict(
+        title=dict(
+            text="Y-axis Title",
+            font=dict(
+                size=30
+            )
+        ),
+        ticktext=["Very long label", "long label", "3", "label"],
+        tickvals=[1, 2, 3, 4],
+        tickmode="array",
+    )
+)
+
+fig.update_yaxes(automargin=True)
+
+fig.show()
+```
+
+### Automatically Adjust Specific Margins
+
+*New in 5.10*
+
+You can also set `automargin` for specific sides of the figure. Here, we set `automargin` on the `left` and `top` of the figure.
+
+```python
+import plotly.graph_objects as go
+
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(
+    x=["Apples", "Oranges", "Watermelon", "Pears"],
+    y=[3, 2, 1, 4]
+))
+
+fig.update_layout(
+    autosize=False,
+    width=500,
+    height=500,
+    yaxis=dict(
+        title=dict(
+            text="Y-axis Title",
+            font=dict(
+                size=30
+            )
+        ),
+        ticktext=["Very long label", "long label", "3", "label"],
+        tickvals=[1, 2, 3, 4],
+        tickmode="array",
+    )
+)
+
+fig.update_yaxes(automargin='left+top')
+
+fig.show()
+```
+
+### Setting a Minimum Plot Size with Automargins
+
+*New in 5.11*
+
+To set a minimum width and height for a plot to be after automargin is applied, use `minreducedwidth` and `minreducedheight`. Here we set both to `250`.
+
+```python
+import plotly.graph_objects as go
+
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(
+    x=["Apples", "Oranges", "Watermelon", "Pears"],
+    y=[3, 2, 1, 4]
+))
+
+fig.update_layout(
+    autosize=False,
+    minreducedwidth=250,
+    minreducedheight=250,
+    width=450,
+    height=450,
+    yaxis=dict(
+        title=dict(
+            text="Y-axis Title",
+            font=dict(
+                size=30
+            )
+        ),
+        ticktext=["Label", "Very long label", "Other label", "Very very long label"],
+        tickvals=[1, 2, 3, 4],
+        tickmode="array",
+    )
+)
+
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/layout/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/shapes.md plotly-7.1.0+dfsg1/doc/python/shapes.md
--- plotly-5.20.0+dfsg/doc/python/shapes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/shapes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,1302 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.19.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.14.3
+  plotly:
+    description: How to make SVG shapes in python. Examples of lines, circle, rectangle,
+      and path.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Shapes
+    order: 26
+    permalink: python/shapes/
+    thumbnail: thumbnail/shape.jpg
+---
+
+### Adding Lines and Polygons to Figures
+
+As a general rule, there are two ways to add shapes (lines or polygons) to figures:
+1. Trace types in the `scatter` family (e.g. `scatter`, `scatter3d`, `scattergeo` etc) can be drawn with `mode="lines"` and optionally support a `fill="self"` attribute, and so can be used to draw open or closed shapes on figures.
+2. Standalone lines, ellipses and rectangles can be added to figures using `fig.add_shape()`, and they can be positioned absolutely within the figure, or they can be positioned relative to the axes of 2d cartesian subplots i.e. in data coordinates.
+
+*Note:* there are [special methods `add_hline`, `add_vline`, `add_hrect` and `add_vrect` for the common cases of wanting to draw horizontal or vertical lines or rectangles](/python/horizontal-vertical-shapes/) that are fixed to data coordinates in one axis and absolutely positioned in another.
+
+The differences between these two approaches are that:
+* Traces can optionally support hover labels and can appear in legends.
+* Shapes can be positioned absolutely or relative to data coordinates in 2d cartesian subplots only.
+* Traces cannot be positioned absolutely but can be positioned relative to data coordinates in any subplot type.
+* Traces also support [optional text](/python/text-and-annotations/), although there is a [textual equivalent to shapes in text annotations](/python/text-and-annotations/).
+
+
+
+### Shape-drawing with Scatter traces
+
+There are two ways to draw filled shapes: scatter traces and [layout.shapes](https://plotly.com/python/reference/layout/shapes/#layout-shapes-items-shape-type) which is mostly useful for the 2d subplots, and defines the shape type to be drawn, and can be rectangle, circle, line, or path (a custom SVG path). You also can use [scatterpolar](https://plotly.com/python/polar-chart/#categorical-polar-chart), scattergeo, [scattermap](https://plotly.com/python/filled-area-tile-maps/#filled-scattermap-trace) to draw filled shapes on any kind of subplots. To set an area to be filled with a solid color, you need to define [Scatter.fill="toself"](https://plotly.com/python/reference/scatter/#scatter-fill) that connects the endpoints of the trace into a closed shape. If `mode=line` (default value), then you need to repeat the initial point of a shape at the end of the sequence to have a closed shape.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(x=[0,1,2,0], y=[0,2,0,0], fill="toself"))
+fig.show()
+```
+
+You can have more shapes either by adding [more traces](https://plotly.com/python/filled-area-plots/) or interrupting the series with `None`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(x=[0,1,2,0,None,3,3,5,5,3], y=[0,2,0,0,None,0.5,1.5,1.5,0.5,0.5], fill="toself"))
+fig.show()
+```
+
+#### Shapes in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'shapes', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Vertical and Horizontal Lines Positioned Relative to the Axis Data
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create scatter trace of text labels
+fig.add_trace(go.Scatter(
+    x=[2, 3.5, 6],
+    y=[1, 1.5, 1],
+    text=["Vertical Line",
+          "Horizontal Dashed Line",
+          "Diagonal dotted Line"],
+    mode="text",
+))
+
+# Set axes ranges
+fig.update_xaxes(range=[0, 7])
+fig.update_yaxes(range=[0, 2.5])
+
+# Add shapes
+fig.add_shape(type="line",
+    x0=1, y0=0, x1=1, y1=2,
+    line=dict(color="RoyalBlue",width=3)
+)
+fig.add_shape(type="line",
+    x0=2, y0=2, x1=5, y1=2,
+    line=dict(
+        color="LightSeaGreen",
+        width=4,
+        dash="dashdot",
+    )
+)
+fig.add_shape(type="line",
+    x0=4, y0=0, x1=6, y1=2,
+    line=dict(
+        color="MediumPurple",
+        width=4,
+        dash="dot",
+    )
+)
+fig.update_shapes(dict(xref='x', yref='y'))
+fig.show()
+```
+
+#### Lines Positioned Relative to the Plot & to the Axis Data
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create scatter trace of text labels
+fig.add_trace(go.Scatter(
+    x=[2, 6], y=[1, 1],
+    text=["Line positioned relative to the plot",
+          "Line positioned relative to the axes"],
+    mode="text",
+))
+
+# Set axes ranges
+fig.update_xaxes(range=[0, 8])
+fig.update_yaxes(range=[0, 2])
+
+fig.add_shape(type="line",
+    xref="x", yref="y",
+    x0=4, y0=0, x1=8, y1=1,
+    line=dict(
+        color="LightSeaGreen",
+        width=3,
+    ),
+)
+fig.add_shape(type="line",
+    xref="paper", yref="paper",
+    x0=0, y0=0, x1=0.5,
+    y1=0.5,
+    line=dict(
+        color="DarkOrange",
+        width=3,
+    ),
+)
+
+fig.show()
+```
+
+#### Rectangles Positioned Relative to the Axis Data
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[1.5, 4.5],
+    y=[0.75, 0.75],
+    text=["Unfilled Rectangle", "Filled Rectangle"],
+    mode="text",
+))
+
+# Set axes properties
+fig.update_xaxes(range=[0, 7], showgrid=False)
+fig.update_yaxes(range=[0, 3.5])
+
+# Add shapes
+fig.add_shape(type="rect",
+    x0=1, y0=1, x1=2, y1=3,
+    line=dict(color="RoyalBlue"),
+)
+fig.add_shape(type="rect",
+    x0=3, y0=1, x1=6, y1=2,
+    line=dict(
+        color="RoyalBlue",
+        width=2,
+    ),
+    fillcolor="LightSkyBlue",
+)
+fig.update_shapes(dict(xref='x', yref='y'))
+fig.show()
+```
+
+#### Rectangle Positioned Relative to the Plot & to the Axis Data
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create scatter trace of text labels
+fig.add_trace(go.Scatter(
+    x=[1.5, 3],
+    y=[2.5, 2.5],
+    text=["Rectangle reference to the plot",
+          "Rectangle reference to the axes"],
+    mode="text",
+))
+
+# Set axes properties
+fig.update_xaxes(range=[0, 4])
+fig.update_yaxes(range=[0, 4])
+
+# Add shapes
+fig.add_shape(type="rect",
+    xref="x", yref="y",
+    x0=2.5, y0=0,
+    x1=3.5, y1=2,
+    line=dict(
+        color="RoyalBlue",
+        width=3,
+    ),
+    fillcolor="LightSkyBlue",
+)
+fig.add_shape(type="rect",
+    xref="paper", yref="paper",
+    x0=0.25, y0=0,
+    x1=0.5, y1=0.5,
+    line=dict(
+        color="LightSeaGreen",
+        width=3,
+    ),
+    fillcolor="PaleTurquoise",
+)
+
+fig.show()
+```
+
+#### A Rectangle Placed Relative to the Axis Position and Length
+
+A shape can be placed relative to an axis's position on the plot by adding the
+string `' domain'` to the axis reference in the `xref` or `yref` attributes for
+shapes.
+The following code places a rectangle that starts at 60% and ends at 70% along
+the x-axis, starting from the left, and starts at 80% and ends at 90% along the
+y-axis, starting from the bottom.
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+
+df = px.data.wind()
+fig = px.scatter(df, y="frequency")
+
+fig.update_layout(xaxis=dict(domain=[0, 0.5]), yaxis=dict(domain=[0.25, 0.75]))
+
+# Add a shape whose x and y coordinates refer to the domains of the x and y axes
+fig.add_shape(type="rect",
+    xref="x domain", yref="y domain",
+    x0=0.6, x1=0.7, y0=0.8, y1=0.9,
+)
+
+fig.show()
+```
+
+#### Highlighting Time Series Regions with Rectangle Shapes
+
+*Note:* there are [special methods `add_hline`, `add_vline`, `add_hrect` and `add_vrect` for the common cases of wanting to draw horizontal or vertical lines or rectangles](/python/horizontal-vertical-shapes/) that are fixed to data coordinates in one axis and absolutely positioned in another.
+
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Add scatter trace for line
+fig.add_trace(go.Scatter(
+    x=["2015-02-01", "2015-02-02", "2015-02-03", "2015-02-04", "2015-02-05",
+       "2015-02-06", "2015-02-07", "2015-02-08", "2015-02-09", "2015-02-10",
+       "2015-02-11", "2015-02-12", "2015-02-13", "2015-02-14", "2015-02-15",
+       "2015-02-16", "2015-02-17", "2015-02-18", "2015-02-19", "2015-02-20",
+       "2015-02-21", "2015-02-22", "2015-02-23", "2015-02-24", "2015-02-25",
+       "2015-02-26", "2015-02-27", "2015-02-28"],
+    y=[-14, -17, -8, -4, -7, -10, -12, -14, -12, -7, -11, -7, -18, -14, -14,
+       -16, -13, -7, -8, -14, -8, -3, -9, -9, -4, -13, -9, -6],
+    mode="lines",
+    name="temperature"
+))
+
+# Add shape regions
+fig.add_vrect(
+    x0="2015-02-04", x1="2015-02-06",
+    fillcolor="LightSalmon", opacity=0.5,
+    layer="below", line_width=0,
+),
+
+fig.add_vrect(
+    x0="2015-02-20", x1="2015-02-22",
+    fillcolor="LightSalmon", opacity=0.5,
+    layer="below", line_width=0,
+)
+
+fig.show()
+```
+
+#### Circles Positioned Relative to the Axis Data
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create scatter trace of text labels
+fig.add_trace(go.Scatter(
+    x=[1.5, 3.5],
+    y=[0.75, 2.5],
+    text=["Unfilled Circle",
+          "Filled Circle"],
+    mode="text",
+))
+
+# Set axes properties
+fig.update_xaxes(range=[0, 4.5], zeroline=False)
+fig.update_yaxes(range=[0, 4.5])
+
+# Add circles
+fig.add_shape(type="circle",
+    xref="x", yref="y",
+    x0=1, y0=1, x1=3, y1=3,
+    line_color="LightSeaGreen",
+)
+fig.add_shape(type="circle",
+    xref="x", yref="y",
+    fillcolor="PaleTurquoise",
+    x0=3, y0=3, x1=4, y1=4,
+    line_color="LightSeaGreen",
+)
+
+# Set figure size
+fig.update_layout(width=800, height=800)
+
+fig.show()
+```
+
+#### Highlighting Clusters of Scatter Points with Circle Shapes
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+np.random.seed(1)
+
+# Generate data
+x0 = np.random.normal(2, 0.45, 300)
+y0 = np.random.normal(2, 0.45, 300)
+
+x1 = np.random.normal(6, 0.4, 200)
+y1 = np.random.normal(6, 0.4, 200)
+
+# Create figure
+fig = go.Figure()
+
+# Add scatter traces
+fig.add_trace(go.Scatter(x=x0, y=y0, mode="markers"))
+fig.add_trace(go.Scatter(x=x1, y=y1, mode="markers"))
+
+# Add shapes
+fig.add_shape(type="circle",
+    xref="x", yref="y",
+    x0=min(x0), y0=min(y0),
+    x1=max(x0), y1=max(y0),
+    opacity=0.2,
+    fillcolor="blue",
+    line_color="blue",
+)
+
+fig.add_shape(type="circle",
+    xref="x", yref="y",
+    x0=min(x1), y0=min(y1),
+    x1=max(x1), y1=max(y1),
+    opacity=0.2,
+    fillcolor="orange",
+    line_color="orange",
+)
+
+
+# Hide legend
+fig.update_layout(showlegend=False)
+
+fig.show()
+```
+
+#### Venn Diagram with Circle Shapes
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create scatter trace of text labels
+fig.add_trace(go.Scatter(
+    x=[1, 1.75, 2.5],
+    y=[1, 1, 1],
+    text=["$A$", "$A+B$", "$B$"],
+    mode="text",
+    textfont=dict(
+        color="black",
+        size=18,
+        family="Arail",
+    )
+))
+
+# Update axes properties
+fig.update_xaxes(
+    showticklabels=False,
+    showgrid=False,
+    zeroline=False,
+)
+
+fig.update_yaxes(
+    showticklabels=False,
+    showgrid=False,
+    zeroline=False,
+)
+
+# Add circles
+fig.add_shape(type="circle",
+    line_color="blue", fillcolor="blue",
+    x0=0, y0=0, x1=2, y1=2
+)
+fig.add_shape(type="circle",
+    line_color="gray", fillcolor="gray",
+    x0=1.5, y0=0, x1=3.5, y1=2
+)
+fig.update_shapes(opacity=0.3, xref="x", yref="y")
+
+fig.update_layout(
+    margin=dict(l=20, r=20, b=100),
+    height=600, width=800,
+    plot_bgcolor="white"
+)
+
+fig.show()
+```
+
+#### Adding Shapes to Subplots
+Here we use the different axes (`x1`, `x2`) created by `make_subplots` as reference in order to draw shapes in figure subplots.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+# Create Subplots
+fig = make_subplots(rows=2, cols=2)
+
+fig.add_trace(go.Scatter(x=[2, 6], y=[1,1]), row=1, col=1)
+fig.add_trace(go.Bar(x=[1,2,3], y=[4,5,6]), row=1, col=2)
+fig.add_trace(go.Scatter(x=[10,20], y=[40,50]), row=2, col=1)
+fig.add_trace(go.Bar(x=[11,13,15], y=[8,11,20]), row=2, col=2)
+
+# Add shapes
+fig.update_layout(
+    shapes=[
+        dict(type="line", xref="x", yref="y",
+            x0=3, y0=0.5, x1=5, y1=0.8, line_width=3),
+        dict(type="rect", xref="x2", yref='y2',
+             x0=4, y0=2, x1=5, y1=6),
+        dict(type="rect", xref="x3", yref="y3",
+             x0=10, y0=20, x1=15, y1=30),
+        dict(type="circle", xref="x4", yref="y4",
+             x0=5, y0=12, x1=10, y1=18)])
+fig.show()
+```
+
+#### Subplot-Spanning Shapes
+
+*New in 6.6*
+
+You can create shapes that span multiple subplots by passing an array of axis references to `xref` and `yref`. Each element in the array specifies which axis the corresponding coordinate refers to. For example, in the following code, with `xref=["x", "x2"]`, `x0` refers to the `x` axis and `x1` refers to the `x2` axis.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6], mode="markers", marker=dict(size=10)), row=1, col=1)
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[6, 5, 4], mode="markers", marker=dict(size=10)), row=1, col=2)
+
+fig.add_shape(
+  type="rect",
+  xref=["x", "x2"],  # x0 uses the x-axis from subplot 1 ("x"), while x1 uses the x-axis from subplot 2 ("x2")
+  yref=["y", "y2"],  # y0 uses the y-axis from subplot 1 ("y"), while y1 uses the y-axis from subplot 2 ("y2")
+  x0=2, y0=4.5,
+  x1=3, y1=5.5,
+  fillcolor="rgba(255, 0, 0, 0.2)",
+  line=dict(color="red", width=2),
+)
+
+fig.show()
+```
+
+For `path` shapes, the array must have one entry for each coordinate in the path string. Each coordinate in the path maps to the corresponding element in the `xref`/`yref` array, in order.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[1, 2, 3], mode="markers"), row=1, col=1)
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[3, 2, 1], mode="markers"), row=1, col=2)
+
+# Chevron shape spanning both subplots
+# Path coordinates map to axis refs in order:
+#   M 2.5 1.5  -> xref[0]=x,  yref[0]=y   (start in subplot 1)
+#   L 1.5 2    -> xref[1]=x2, yref[1]=y2  (tip in subplot 2)
+#   L 2.5 2.5  -> xref[2]=x,  yref[2]=y   (end in subplot 1)
+
+fig.add_shape(
+    type="path",
+    path="M 2.5 1.5 L 1.5 2 L 2.5 2.5",
+    xref=["x", "x2", "x"],
+    yref=["y", "y2", "y"],
+    line=dict(color="purple", width=3),
+)
+
+fig.show()
+```
+
+**Note:** When using arrays with `xref` and `yref`, `xsizemode="pixel"` and `ysizemode="pixel"` are not supported.
+
+
+#### Adding the Same Shapes to Multiple Subplots
+The same shape can be added to multiple facets by using the `'all'`
+keyword in the `row` and `col` arguments. For example
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.scatter(df, x="total_bill", y="tip", facet_row="smoker", facet_col="sex")
+# Adds a rectangle to all facets
+fig.add_shape(
+    dict(type="rect", x0=25, x1=35, y0=4, y1=6, line_color="purple"),
+    row="all",
+    col="all",
+)
+# Adds a line to all the rows of the second column
+fig.add_shape(
+    dict(type="line", x0=20, x1=25, y0=5, y1=6, line_color="yellow"), row="all", col=2
+)
+
+# Adds a circle to all the columns of the first row
+fig.add_shape(
+    dict(type="circle", x0=10, y0=2, x1=20, y1=7), row=1, col="all", line_color="green"
+)
+fig.show()
+```
+
+
+#### SVG Paths
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+# Create scatter trace of text labels
+fig.add_trace(go.Scatter(
+    x=[2, 1, 8, 8],
+    y=[0.25, 9, 2, 6],
+    text=["Filled Triangle",
+          "Filled Polygon",
+          "Quadratic Bezier Curves",
+          "Cubic Bezier Curves"],
+    mode="text",
+))
+
+# Update axes properties
+fig.update_xaxes(
+    range=[0, 9],
+    zeroline=False,
+)
+
+fig.update_yaxes(
+    range=[0, 11],
+    zeroline=False,
+)
+
+# Add shapes
+fig.update_layout(
+    shapes=[
+        # Quadratic Bezier Curves
+        dict(
+            type="path",
+            path="M 4,4 Q 6,0 8,4",
+            line_color="RoyalBlue",
+        ),
+        # Cubic Bezier Curves
+        dict(
+            type="path",
+            path="M 1,4 C 2,8 6,4 8,8",
+            line_color="MediumPurple",
+        ),
+        # filled Triangle
+        dict(
+            type="path",
+            path=" M 1 1 L 1 3 L 4 1 Z",
+            fillcolor="LightPink",
+            line_color="Crimson",
+        ),
+        # filled Polygon
+        dict(
+            type="path",
+            path=" M 3,7 L2,8 L2,9 L3,10 L4,10 L5,9 L5,8 L4,7 Z",
+            fillcolor="PaleTurquoise",
+            line_color="LightSeaGreen",
+        ),
+    ]
+)
+
+fig.show()
+```
+
+#### Shifting Shapes on Categorical Axes
+
+*New in 5.23*
+
+When drawing shapes where `xref` or `yref` reference axes of type category or multicategory, you can shift `x0`, `x1`, `y0`, and `y1` away from the center of the category using `x0shift`, `x1shift`, `y0shift`, and `y1shift` by specifying a value between -1 and 1.
+
+-1 is the center of the previous category, 0 is the center of the referenced category, and 1 is the center of the next category.
+
+In the following example, the `x0` and `x1` values for both shapes reference category values on the x-axis.
+
+In this example, the first shape:
+- Shifts `x0` half way between the center of category "Germany" and the center of the previous category by setting `x0shift=-0.5`
+- Shifts `x1`half way between the center of category "Germany" and the center of the next category by setting `x1shift=0.5`
+
+The second shape:
+- Shifts `x0` back to the center of the previous category by setting `x0shift=-1`
+- Shifts `x1`forward to the center of the next category by setting `x1shift=1`
+
+```python
+import plotly.graph_objects as go
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Europe' and year == 1952")
+
+fig = go.Figure(
+    data=go.Bar(x=df["country"], y=df["lifeExp"], marker_color="LightSalmon"),
+    layout=dict(
+        shapes=[
+            dict(
+                type="rect",
+                x0="Germany",
+                y0=0,
+                x1="Germany",
+                y1=0.5,
+                xref="x",
+                yref="paper",
+                x0shift=-0.5,
+                x1shift=0.5,
+                line=dict(color="LightGreen", width=4),
+            ),
+            dict(
+                type="rect",
+                x0="Spain",
+                y0=0,
+                x1="Spain",
+                y1=0.5,
+                xref="x",
+                yref="paper",
+                x0shift=-1,
+                x1shift=1,
+                line=dict(color="MediumTurquoise", width=4),
+            ),
+        ]
+    ),
+)
+
+fig.update_layout(
+    title=dict(
+        text="GDP per Capita in Europe (1972)"
+    ),
+    xaxis=dict(
+        title=dict(
+            text="Country"
+        )
+    ),
+    yaxis=dict(
+        title=dict(
+            text="GDP per Capita"
+        )
+    ),
+)
+
+fig.show()
+
+```
+
+### Drawing shapes with a Mouse on Cartesian plots
+
+_introduced in plotly 4.7_
+
+You can create layout shapes programmatically, but you can also draw shapes manually by setting the `dragmode` to one of the shape-drawing modes: `'drawline'`,`'drawopenpath'`, `'drawclosedpath'`, `'drawcircle'`, or `'drawrect'`. If you need to switch between different shape-drawing or other dragmodes (panning, selecting, etc.), [modebar buttons can be added](/python/configuration-options#add-optional-shapedrawing-buttons-to-modebar) in the `config` to select the dragmode. If you switch to a different dragmode such as pan or zoom, you will need to select the drawing tool in the modebar to go back to shape drawing.
+
+This shape-drawing feature is particularly interesting for annotating graphs, in particular [image traces](/python/imshow) or [layout images](/python/images).
+
+Once you have drawn shapes, you can select and modify an existing shape by clicking on its boundary (note the arrow pointer). Its fillcolor turns to pink to highlight the activated shape and then you can
+- drag and resize it for lines, rectangles and circles/ellipses
+- drag and move individual vertices for closed paths
+- move individual vertices for open paths.
+
+An activated shape is deleted by clicking on the `eraseshape` button.
+
+Drawing or modifying a shape triggers a `relayout` event, which [can be captured by a callback inside a Dash application](https://dash.plotly.com/interactive-graphing).
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure()
+text="Click and drag here <br> to draw a rectangle <br><br> or select another shape <br>in the modebar"
+fig.add_annotation(
+            x=0.5,
+            y=0.5,
+            text=text,
+            xref="paper",
+            yref="paper",
+            showarrow=False,
+            font_size=20
+)
+# shape defined programatically
+fig.add_shape(editable=True,
+              x0=-1, x1=0, y0=2, y1=3,
+              xref='x', yref='y')
+# define dragmode and add modebar buttons
+fig.update_layout(dragmode='drawrect')
+fig.show(config={'modeBarButtonsToAdd':['drawline',
+                                        'drawopenpath',
+                                        'drawclosedpath',
+                                        'drawcircle',
+                                        'drawrect',
+                                        'eraseshape'
+                                       ]})
+```
+
+### Style of user-drawn shapes
+
+The layout `newshape` attribute controls the visual appearance of new shapes drawn by the user. `newshape` attributes have the same names as layout shapes.
+
+_Note on shape opacity_: having a new shape's opacity > 0.5 makes it possible to activate a shape by clicking inside the shape (for opacity <= 0.5 you have to click on the border of the shape), but you cannot start a new shape within an existing shape (which is possible for an opacity <= 0.5).
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure()
+text="Click and drag<br> to draw a rectangle <br><br> or select another shape <br>in the modebar"
+fig.add_annotation(
+            x=0.5,
+            y=0.5,
+            text=text,
+            xref="paper",
+            yref="paper",
+            showarrow=False,
+            font_size=20
+)
+# shape defined programatically
+fig.add_shape(line_color='yellow',
+              fillcolor='turquoise',
+              opacity=0.4,
+              editable=True,
+              x0=0, x1=1, y0=2, y1=3,
+              xref='x', yref='y'
+)
+fig.update_layout(dragmode='drawrect',
+                  # style of new shapes
+                  newshape=dict(line_color='yellow',
+                                fillcolor='turquoise',
+                                opacity=0.5))
+fig.show(config={'modeBarButtonsToAdd':['drawline',
+                                        'drawopenpath',
+                                        'drawclosedpath',
+                                        'drawcircle',
+                                        'drawrect',
+                                        'eraseshape'
+                                       ]})
+```
+
+### Adding Text Labels to Shapes
+
+*New in 5.14*
+
+Add a text `label` to a shape by adding a `label` property to a shape with `text`. In this example, we add a `rect` and `line` shape and add a text label to both.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_shape(
+    type="rect",
+    fillcolor='turquoise',
+    x0=1,
+    y0=1,
+    x1=2,
+    y1=3,
+    label=dict(text="Text in rectangle")
+)
+fig.add_shape(
+    type="line",
+    x0=3,
+    y0=0.5,
+    x1=5,
+    y1=0.8,
+    line_width=3,
+    label=dict(text="Text above line")
+)
+
+fig.show()
+
+```
+
+#### Styling Text Labels
+
+Use the `font` property to configure the `color`, `size`, and `family` of the label font.
+In this example, we change the label color of the first rectangle to "DarkOrange", set the size of the text above the line to 20, and change the font family and set the font size on the second rectangle.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_shape(
+    type="rect",
+    fillcolor='MediumSlateBlue',
+    x0=1,
+    y0=1,
+    x1=2,
+    y1=3,
+    label=dict(text="Text in rectangle", font=dict(color="DarkOrange")),
+)
+fig.add_shape(
+    type="line",
+    x0=3,
+    y0=0.5,
+    x1=5,
+    y1=0.8,
+    line_width=3,
+    label=dict(text="Text above line", font=dict(size=20)),
+)
+fig.add_shape(
+    type="rect",
+    fillcolor='Lavender',
+    x0=2.5,
+    y0=2.5,
+    x1=5,
+    y1=3.5,
+    label=dict(
+        text="Text in rectangle 2", font=dict(family="Courier New, monospace", size=20)
+    ),
+)
+
+fig.show()
+
+```
+
+#### Setting Label Position
+
+Set a label's position relative to the shape by setting `textposition`. The default position for lines is `middle`. The default position for other shapes is `middle center`.
+
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_shape(
+    type="rect",
+    fillcolor='Lavender',
+    x0=0,
+    y0=0,
+    x1=1.5,
+    y1=1.5,
+    label=dict(text="Text at middle center"),
+)
+
+fig.add_shape(
+    type="rect",
+    fillcolor='Lavender',
+    x0=3,
+    y0=0,
+    x1=4.5,
+    y1=1.5,
+    label=dict(text="Text at top left", textposition="top left"),
+)
+
+
+fig.add_shape(
+    type="line",
+    line_color="MediumSlateBlue",
+    x0=3,
+    y0=2,
+    x1=5,
+    y1=3,
+    line_width=3,
+    label=dict(text="Text at start", textposition="start"),
+)
+
+
+fig.add_shape(
+    type="line",
+    line_color="MediumSlateBlue",
+    x0=0,
+    y0=2,
+    x1=2,
+    y1=3,
+    line_width=3,
+    label=dict(text="Text at middle"),
+)
+
+fig.show()
+
+```
+
+#### Setting Label Angle
+
+Use `textangle` to rotate a label by setting a value between -180 and 180. The default angle for a label on a line is the angle of the line. The default angle for a label on other shapes is 0. In this example, in the first shape, the label is at 45 degrees, and in the second, the label is at -45 degrees.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_shape(
+    type="rect",
+    fillcolor='LightGreen',
+    x0=0,
+    y0=0,
+    x1=2,
+    y1=2,
+    label=dict(text="Text at 45", textangle=45),
+)
+
+fig.add_shape(
+    type="rect",
+    fillcolor='Gold',
+    x0=3,
+    y0=0,
+    x1=5,
+    y1=2,
+    label=dict(text="Text at -45", textangle=-45),
+)
+
+fig.show()
+
+```
+
+#### Setting Label Padding
+
+`padding` adds padding between the label and shape. This example shows one line with padding of 30px and another with the default padding, which is 3px.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_shape(
+    type="line",
+    line_color="RoyalBlue",
+    x0=3,
+    y0=0,
+    x1=5,
+    y1=3,
+    line_width=3,
+    label=dict(text="Label padding of 30px", padding=30),
+)
+
+fig.add_shape(
+    type="line",
+    line_color="RoyalBlue",
+    x0=0,
+    y0=0,
+    x1=2,
+    y1=3,
+    line_width=3,
+    label=dict(text="Default label padding of 3px"),
+)
+
+fig.show()
+```
+
+#### Setting Label Anchors
+
+`xanchor` sets a label's horizontal positional anchor and `yanchor` sets its vertical position anchor.
+Use `xanchor` to bind the `textposition` to the "left", "center" or "right" of the label text and `yanchor` to bind `textposition` to the "top", "middle" or "bottom" of the label text.
+
+In this example, `yanchor`is set to "top", instead of the default of "bottom" for lines, meaning the text displays below the line.
+
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+fig = px.line(df)
+
+fig.add_shape(
+    type="rect",
+    x0="2018-09-24",
+    y0=0,
+    x1="2018-12-18",
+    y1=3,
+    line_width=0,
+    label=dict(text="Decline", textposition="top center", font=dict(size=20)),
+    fillcolor="green",
+    opacity=0.25,
+)
+
+fig.add_shape(
+    type="line",
+    x0=min(df.index),
+    y0=1,
+    x1=max(df.index),
+    y1=1,
+    line_width=3,
+    line_dash="dot",
+    label=dict(
+        text="Jan 1 2018 Baseline",
+        textposition="end",
+        font=dict(size=20, color="blue"),
+        yanchor="top",
+    ),
+)
+
+fig.show()
+```
+
+#### Variables in Shape Label Text
+
+*New in 5.15*
+
+Use `texttemplate` to add text with variables to shapes. You have access to raw variables (`x0`, `x1`, `y0`, `y1`), which use raw data values from the shape definition, and the following calculated variables:
+
+- `xcenter`: (x0 + x1) / 2
+- `ycenter`: (y0 + y1) / 2
+- `dx`: x1 - x0
+- `dy`: y1 - y0
+- `width`: abs(x1 - x0)
+- `height`: abs(y1 - y0)
+- `length` (for lines only): sqrt(dx^2 + dy^2)
+- `slope`: (y1 - y0) / (x1 - x0)
+
+`texttemplate` supports d3 number and date formatting.
+
+Add a variable with "%{variable}". This example adds the raw variables `x0` and `y0` to a rectangle and shows the calculated variables `height`, `slope`, `length`, and `width` on three other shapes.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+
+fig.add_shape(
+    type="rect",
+    fillcolor="MediumSlateBlue",
+    x0=-0.5,
+    y0=-0.5,
+    x1=1,
+    y1=1,
+    label=dict(
+        texttemplate="x0 is %{x0:.3f}, y0 is %{y0:.3f}", font=dict(color="DarkOrange")
+    ),
+)
+
+fig.add_shape(
+    type="rect",
+    fillcolor="LightGreen",
+    x0=1,
+    y0=1.75,
+    x1=2.25,
+    y1=3,
+    label=dict(texttemplate="Height: %{height:.3f}", font=dict(color="DarkOrange")),
+)
+fig.add_shape(
+    type="line",
+    x0=3,
+    y0=0.5,
+    x1=5,
+    y1=1.5,
+    line_width=3,
+    label=dict(
+        texttemplate="Slope of %{slope:.3f} and length of %{length:.3f}",
+        font=dict(size=20),
+    ),
+)
+fig.add_shape(
+    type="rect",
+    fillcolor="Lavender",
+    x0=2.5,
+    y0=2.5,
+    x1=5,
+    y1=3.5,
+    label=dict(
+        texttemplate="Width: %{width:.3f}",
+        font=dict(family="Courier New, monospace", size=20),
+    ),
+)
+
+fig.show()
+
+```
+
+#### Variables in Shape Label Text for New Shapes
+
+*New in 5.15*
+
+You can also use `texttemplate` to add text with variables to new shapes drawn on the graph.
+
+In this example, we enable drawing lines on the figure by adding `drawline` to `modeBarButtonsToAdd` in `config`. We then define a `texttemplate` for shapes that shows the calculated variable `dy`. Select **Draw line** in the modebar to try it out.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.stocks()
+
+fig = go.Figure(
+    data=go.Scatter(
+        x=df.date,
+        y=df.GOOG,
+    ),
+    layout=go.Layout(
+        yaxis=dict(
+            title=dict(
+                text="Price in USD"
+            )),
+        newshape=dict(
+            label=dict(texttemplate="Change: %{dy:.2f}")
+        ),
+        title=dict(text="Google Share Price 2018/2019"),
+    ),
+)
+
+
+fig.show(
+    config={
+        "modeBarButtonsToAdd": [
+            "drawline",
+        ]
+    }
+)
+```
+
+#### Shapes in the Legend
+
+*New in 5.16*
+
+You can add a shape to the legend by setting `showlegend=True` on the shape. In this example, we add the second shape to the legend. The name that appears for the shape in the legend is the shape's `name` if it is provided. If no `name` is provided, the shape label's `text` is used. If neither is provided, the legend item appears as "shape \<shape number>". For example, "shape 1".
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+
+fig = px.line(df)
+
+fig.add_shape(
+    type="rect",
+    x0="2018-09-24",
+    y0=0,
+    x1="2018-12-18",
+    y1=3,
+    line_width=0,
+    label=dict(text="Decline", textposition="top center", font=dict(size=20)),
+    fillcolor="green",
+    opacity=0.25,
+)
+
+fig.add_shape(
+    showlegend=True,
+    type="line",
+    x0=min(df.index),
+    y0=1,
+    x1=max(df.index),
+    y1=1,
+    line_width=3,
+    line_dash="dot",
+    label=dict(
+        text="Jan 1 2018 Baseline",
+        textposition="end",
+        font=dict(size=20, color="blue"),
+        yanchor="top",
+    ),
+)
+
+fig.show()
+```
+
+`newshape` also supports `showlegend`. In this example, each new line drawn on the graph appears in the legend.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.stocks()
+
+fig = go.Figure(
+    data=go.Scatter(
+        x=df.date,
+        y=df.AAPL,
+        name="Apple"
+    ),
+    layout=go.Layout(
+        yaxis=dict(
+            title=dict(text="Price in USD"),
+            ),
+        newshape=dict(
+            showlegend=True,
+            label=dict(texttemplate="Change: %{dy:.2f}")
+        ),
+        title=dict(text="Apple Share Price 2018/2019"),
+    ),
+)
+
+
+fig.show(
+    config={
+        "modeBarButtonsToAdd": [
+            "drawline",
+        ]
+    }
+)
+```
+
+#### Shape Layer
+
+By default, shapes are drawn above traces. You can also configure them to be drawn between traces and gridlines with `layer="between"` (new in 5.21), or below gridlines with `layer="below"`.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)
+
+fig = px.line(df)
+
+fig.add_shape(
+    type="rect",
+    x0="2018-03-01",
+    y0=0,
+    x1="2018-08-01",
+    y1=3,
+    line_width=0,
+    layer="above",
+    label=dict(text="Above", textposition="top center", font=dict(size=15)),
+    fillcolor="LightGreen",
+    opacity=0.80,
+)
+
+fig.add_shape(
+    type="rect",
+    x0="2018-10-01",
+    y0=0,
+    x1="2019-03-01",
+    y1=3,
+    line_width=0,
+    layer="between",
+    label=dict(text="Between", textposition="top center", font=dict(size=15)),
+    fillcolor="LightGreen",
+    opacity=0.80,
+)
+
+fig.add_shape(
+    type="rect",
+    x0="2019-05-01",
+    y0=0,
+    x1="2019-10-01",
+    y1=3,
+    line_width=0,
+    layer="below",
+    label=dict(text="Below", textposition="top center", font=dict(size=15)),
+    fillcolor="LightGreen",
+    opacity=0.80,
+)
+
+fig.show()
+```
+
+### Reference
+See https://plotly.com/python/reference/layout/shapes/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/sliders.md plotly-7.1.0+dfsg1/doc/python/sliders.md
--- plotly-5.20.0+dfsg/doc/python/sliders.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/sliders.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,108 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.7
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.2
+  plotly:
+    description: How to add slider controls to your plots in Python with Plotly.
+    display_as: controls
+    language: python
+    layout: base
+    name: Sliders
+    order: 1.5
+    page_type: example_index
+    permalink: python/sliders/
+    thumbnail: thumbnail/slider2017.gif
+---
+
+### Simple Slider Control
+Sliders can be used in Plotly to change the data displayed or style of a plot.
+
+```python
+import plotly.graph_objects as go
+import numpy as np
+
+# Create figure
+fig = go.Figure()
+
+# Add traces, one for each slider step
+for step in np.arange(0, 5, 0.1):
+    fig.add_trace(
+        go.Scatter(
+            visible=False,
+            line=dict(color="#00CED1", width=6),
+            name="𝜈 = " + str(step),
+            x=np.arange(0, 10, 0.01),
+            y=np.sin(step * np.arange(0, 10, 0.01))))
+
+# Make 10th trace visible
+fig.data[10].visible = True
+
+# Create and add slider
+steps = []
+for i in range(len(fig.data)):
+    step = dict(
+        method="update",
+        args=[{"visible": [False] * len(fig.data)},
+              {"title": "Slider switched to step: " + str(i)}],  # layout attribute
+    )
+    step["args"][0]["visible"][i] = True  # Toggle i'th trace to "visible"
+    steps.append(step)
+
+sliders = [dict(
+    active=10,
+    currentvalue={"prefix": "Frequency: "},
+    pad={"t": 50},
+    steps=steps
+)]
+
+fig.update_layout(
+    sliders=sliders
+)
+
+fig.show()
+```
+
+#### Methods
+The method determines which [plotly.js function](https://plotly.com/javascript/plotlyjs-function-reference/) will be used to update the chart. Plotly can use several [updatemenu](https://plotly.com/python/reference/layout/updatemenus/#layout-updatemenus-items-updatemenu-buttons-items-button-method) methods to add the slider:
+- `"update"`: modify **data and layout** attributes (as above)
+- `"restyle"`: modify **data** attributes
+- `"relayout"`: modify **layout** attributes
+- `"animate"`: start or pause an animation
+
+
+### Sliders in Plotly Express
+Plotly Express provide sliders, but with implicit animation using the `"animate"` method described above. The animation play button can be omitted by removing `updatemenus` in the `layout`:
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder()
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
+           size="pop", color="continent", hover_name="country",
+           log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
+
+fig["layout"].pop("updatemenus") # optional, drop animation buttons
+fig.show()
+```
+
+#### Reference
+Check out https://plotly.com/python/reference/layout/updatemenus/ for more information!
diff -Nru plotly-5.20.0+dfsg/doc/python/smith-charts.md plotly-7.1.0+dfsg1/doc/python/smith-charts.md
--- plotly-5.20.0+dfsg/doc/python/smith-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/smith-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,98 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.11.4
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.11
+  plotly:
+    description: How to make Smith Charts with plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Smith Charts
+    order: 20
+    page_type: u-guide
+    permalink: python/smith-charts/
+    thumbnail: thumbnail/contourcarpet.jpg
+---
+
+*New in v5.4*
+
+A [Smith Chart](https://en.wikipedia.org/wiki/Smith_chart) is a specialized chart for visualizing [complex numbers](https://en.wikipedia.org/wiki/Complex_number): numbers with both a real and imaginary part.
+
+
+### Smith Charts with Plotly Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattersmith(imag=[0.5, 1, 2, 3], real=[0.5, 1, 2, 3]))
+fig.show()
+```
+
+### Smith Chart Subplots and Styling
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scattersmith(
+    imag=[1],
+    real=[1],
+    marker_symbol='x',
+    marker_size=30,
+    marker_color="green",
+    subplot="smith1"
+))
+
+fig.add_trace(go.Scattersmith(
+    imag=[1],
+    real=[1],
+    marker_symbol='x',
+    marker_size=30,
+    marker_color="pink",
+    subplot="smith2"
+))
+
+fig.update_layout(
+    smith=dict(
+        realaxis_gridcolor='red',
+        imaginaryaxis_gridcolor='blue',
+        domain=dict(x=[0,0.45])
+    ),
+    smith2=dict(
+        realaxis_gridcolor='blue',
+        imaginaryaxis_gridcolor='red',
+        domain=dict(x=[0.55,1])
+    )
+)
+
+fig.update_smiths(bgcolor="lightgrey")
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/scattersmith/ and https://plotly.com/python/reference/layout/smith/ for more information and chart attribute options!
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/smoothing.md plotly-7.1.0+dfsg1/doc/python/smoothing.md
--- plotly-5.20.0+dfsg/doc/python/smoothing.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/smoothing.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,185 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: "1.1"
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: Learn how to perform smoothing using various methods in Python.
+    display_as: advanced_opt
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Smoothing
+    order: 4
+    page_type: example_index
+    permalink: python/smoothing/
+    thumbnail: /images/static-image
+---
+
+#### Imports
+
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://pandas.pydata.org/docs/user_guide/10min.html), [SciPy](https://www.scipy.org/) and [Plotly](https://plotly.com/python/getting-started/).
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+import pandas as pd
+import scipy
+
+from scipy import signal
+```
+
+#### Savitzky-Golay Filter
+
+`Smoothing` is a technique that is used to eliminate noise from a dataset. There are many algorithms and methods to accomplish this but all have the same general purpose of 'roughing out the edges' or 'smoothing' some data.
+
+There is reason to smooth data if there is little to no small-scale structure in the data. The danger to this thinking is that one may skew the representation of the data enough to change its perceived meaning, so for the sake of scientific honesty it is an imperative to at the very minimum explain one's reason's for using a smoothing algorithm to their dataset.
+
+In this example we use the [Savitzky-Golay Filter](https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter), which fits subsequent windows of adjacent data with a low-order polynomial.
+
+```python
+import plotly.graph_objects as go
+
+import numpy as np
+import pandas as pd
+import scipy
+
+from scipy import signal
+
+np.random.seed(1)
+
+x = np.linspace(0, 10, 100)
+y = np.sin(x)
+noise = 2 * np.random.random(len(x)) - 1 # uniformly distributed between -1 and 1
+y_noise = y + noise
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    marker=dict(size=2, color='black'),
+    name='Sine'
+))
+
+fig.add_trace(go.Scatter(
+    x=x,
+    y=y_noise,
+    mode='markers',
+    marker=dict(
+        size=6,
+        color='royalblue',
+        symbol='circle-open'
+    ),
+    name='Noisy Sine'
+))
+
+fig.add_trace(go.Scatter(
+    x=x,
+    y=signal.savgol_filter(y_noise,
+                           53, # window size used for filtering
+                           3), # order of fitted polynomial
+    mode='markers',
+    marker=dict(
+        size=6,
+        color='mediumpurple',
+        symbol='triangle-up'
+    ),
+    name='Savitzky-Golay'
+))
+
+
+fig.show()
+```
+
+#### Triangular Moving Average
+
+Another method for smoothing is a moving average. There are various forms of this, but the idea is to take a window of points in your dataset, compute an average of the points, then shift the window over by one point and repeat. This will generate a bunch of points which will result in the `smoothed` data.
+
+Let us look at the common `Simple Moving Average` first. In the 1D case we have a data set of $N$ points with y-values $y_1, y_2, ..., y_N$. Setting our window size to $n < N$, the new $i^{th}$ y-value after smoothing is computed as:
+
+$$
+\begin{align*}
+SMA_i = \frac{y_i + ... + y_{i+n}}{n}
+\end{align*}
+$$
+
+In the `Triangular Moving Average`, two simple moving averages are computed on top of each other, in order to give more weight to closer (adjacent) points. This means that our $SMA_i$ are computed then a Triangular Moving Average $TMA_i$ is computed as:
+
+$$
+\begin{align*}
+TMA_i = \frac{SMA_i + ... + SMA_{i+n}}{n}
+\end{align*}
+$$
+
+```python
+def smoothTriangle(data, degree):
+    triangle=np.concatenate((np.arange(degree + 1), np.arange(degree)[::-1])) # up then down
+    smoothed=[]
+
+    for i in range(degree, len(data) - degree * 2):
+        point=data[i:i + len(triangle)] * triangle
+        smoothed.append(np.sum(point)/np.sum(triangle))
+    # Handle boundaries
+    smoothed=[smoothed[0]]*int(degree + degree/2) + smoothed
+    while len(smoothed) < len(data):
+        smoothed.append(smoothed[-1])
+    return smoothed
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    marker=dict(
+        size=2,
+        color='rgb(0, 0, 0)',
+    ),
+    name='Sine'
+))
+
+fig.add_trace(go.Scatter(
+    x=x,
+    y=y_noise,
+    mode='markers',
+    marker=dict(
+        size=6,
+        color='#5E88FC',
+        symbol='circle-open'
+    ),
+    name='Noisy Sine'
+))
+
+fig.add_trace(go.Scatter(
+    x=x,
+    y=smoothTriangle(y_noise, 10),  # setting degree to 10
+    mode='markers',
+    marker=dict(
+        size=6,
+        color='#C190F0',
+        symbol='triangle-up'
+    ),
+    name='Moving Triangle - Degree 10'
+))
+
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/splom.md plotly-7.1.0+dfsg1/doc/python/splom.md
--- plotly-5.20.0+dfsg/doc/python/splom.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/splom.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,368 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make scatterplot matrices or sploms natively in Python with
+      Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Scatterplot Matrix
+    order: 6
+    page_type: u-guide
+    permalink: python/splom/
+    redirect_from: python/scatterplot-matrix/
+    thumbnail: thumbnail/splom_image.jpg
+---
+
+### Scatter matrix with Plotly Express
+
+A scatterplot matrix is a matrix associated to n numerical arrays (data variables), $X_1,X_2,…,X_n$ , of the same length. The cell (i,j) of such a matrix displays the scatter plot of the variable Xi versus Xj.
+
+Here we show the Plotly Express function `px.scatter_matrix` to plot the scatter matrix for the columns of the dataframe. By default, all columns are considered.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_matrix(df)
+fig.show()
+```
+
+Specify the columns to be represented with the `dimensions` argument, and set colors using a column of the dataframe:
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_matrix(df,
+    dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"],
+    color="species")
+fig.show()
+```
+
+#### Styled Scatter Matrix with Plotly Express
+
+The scatter matrix plot can be configured thanks to the parameters of `px.scatter_matrix`, but also thanks to `fig.update_traces` for fine tuning (see the next section to learn more about the options).
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.scatter_matrix(df,
+    dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"],
+    color="species", symbol="species",
+    title="Scatter matrix of iris data set",
+    labels={col:col.replace('_', ' ') for col in df.columns}) # remove underscore
+fig.update_traces(diagonal_visible=False)
+fig.show()
+```
+
+
+### Scatter matrix (splom) with go.Splom
+
+If Plotly Express does not provide a good starting point, it is possible to use [the more generic `go.Splom` class from `plotly.graph_objects`](/python/graph-objects/). All its parameters are documented in the reference page https://plotly.com/python/reference/splom/.
+
+The Plotly splom trace implementation for the scatterplot matrix does not require to set $x=Xi$ , and $y=Xj$, for each scatter plot. All arrays, $X_1,X_2,…,X_n$ , are passed once, through a list of dicts called dimensions, i.e. each array/variable represents a dimension.
+
+A trace of type `splom` is defined as follows:
+
+```
+trace=go.Splom(dimensions=[dict(label='string-1',
+                                values=X1),
+                           dict(label='string-2',
+                                values=X2),
+                           .
+                           .
+                           .
+                           dict(label='string-n',
+                                values=Xn)],
+                           ....
+               )
+```
+
+The label in each dimension is assigned to the axes titles of the corresponding matrix cell.
+
+
+
+#### Splom of the Iris data set
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv')
+
+# The Iris dataset contains four data variables, sepal length, sepal width, petal length,
+# petal width, for 150 iris flowers. The flowers are labeled as `Iris-setosa`,
+# `Iris-versicolor`, `Iris-virginica`.
+
+# Define indices corresponding to flower categories, using pandas label encoding
+index_vals = df['class'].astype('category').cat.codes
+
+fig = go.Figure(data=go.Splom(
+                dimensions=[dict(label='sepal length',
+                                 values=df['sepal length']),
+                            dict(label='sepal width',
+                                 values=df['sepal width']),
+                            dict(label='petal length',
+                                 values=df['petal length']),
+                            dict(label='petal width',
+                                 values=df['petal width'])],
+                text=df['class'],
+                marker=dict(color=index_vals,
+                            showscale=False, # colors encode categorical variables
+                            line_color='white', line_width=0.5)
+                ))
+
+
+fig.update_layout(
+    title=dict(text='Iris Data set'),
+    dragmode='select',
+    width=600,
+    height=600,
+    hovermode='closest',
+)
+
+fig.show()
+```
+
+The scatter plots on the principal diagonal can be removed by setting `diagonal_visible=False`:
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv')
+index_vals = df['class'].astype('category').cat.codes
+
+fig = go.Figure(data=go.Splom(
+                dimensions=[dict(label='sepal length',
+                                 values=df['sepal length']),
+                            dict(label='sepal width',
+                                 values=df['sepal width']),
+                            dict(label='petal length',
+                                 values=df['petal length']),
+                            dict(label='petal width',
+                                 values=df['petal width'])],
+                diagonal_visible=False, # remove plots on diagonal
+                text=df['class'],
+                marker=dict(color=index_vals,
+                            showscale=False, # colors encode categorical variables
+                            line_color='white', line_width=0.5)
+                ))
+
+
+fig.update_layout(
+    title=dict(text='Iris Data set'),
+    width=600,
+    height=600,
+)
+
+fig.show()
+```
+
+To plot only the lower/upper half of the splom we switch the default `showlowerhalf=True`/`showupperhalf=True` to `False`:
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv')
+index_vals = df['class'].astype('category').cat.codes
+
+fig = go.Figure(data=go.Splom(
+                dimensions=[dict(label='sepal length',
+                                 values=df['sepal length']),
+                            dict(label='sepal width',
+                                 values=df['sepal width']),
+                            dict(label='petal length',
+                                 values=df['petal length']),
+                            dict(label='petal width',
+                                 values=df['petal width'])],
+                showupperhalf=False, # remove plots on diagonal
+                text=df['class'],
+                marker=dict(color=index_vals,
+                            showscale=False, # colors encode categorical variables
+                            line_color='white', line_width=0.5)
+                ))
+
+
+fig.update_layout(
+    title=dict(text='Iris Data set'),
+    width=600,
+    height=600,
+)
+
+fig.show()
+```
+
+Each dict in the list dimensions has a key, visible, set by default on True. We can choose to remove a variable from splom, by setting `visible=False` in its corresponding dimension. In this case the default grid associated to the scatterplot matrix keeps its number of cells, but the cells in the row and column corresponding to the visible false dimension are empty:
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv')
+index_vals = df['class'].astype('category').cat.codes
+
+fig = go.Figure(data=go.Splom(
+                dimensions=[dict(label='sepal length',
+                                 values=df['sepal length']),
+                            dict(label='sepal width',
+                                 values=df['sepal width'],
+                                 visible=False),
+                            dict(label='petal length',
+                                 values=df['petal length']),
+                            dict(label='petal width',
+                                 values=df['petal width'])],
+                text=df['class'],
+                marker=dict(color=index_vals,
+                            showscale=False, # colors encode categorical variables
+                            line_color='white', line_width=0.5)
+                ))
+
+
+fig.update_layout(
+    title=dict(text='Iris Data set'),
+    width=600,
+    height=600,
+)
+
+fig.show()
+```
+
+#### Splom for the diabetes dataset
+
+Diabetes dataset is downloaded from [kaggle](https://www.kaggle.com/uciml/pima-indians-diabetes-database/data). It is used to predict the onset of diabetes based on 8 diagnostic measures. The diabetes file contains the diagnostic measures for 768 patients, that are labeled as non-diabetic (Outcome=0), respectively diabetic (Outcome=1). The splom associated to the 8 variables can illustrate the strength of the relationship between pairs of measures for diabetic/nondiabetic patients.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+dfd = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/diabetes.csv')
+textd = ['non-diabetic' if cl==0 else 'diabetic' for cl in dfd['Outcome']]
+
+fig = go.Figure(data=go.Splom(
+                  dimensions=[dict(label='Pregnancies', values=dfd['Pregnancies']),
+                              dict(label='Glucose', values=dfd['Glucose']),
+                              dict(label='BloodPressure', values=dfd['BloodPressure']),
+                              dict(label='SkinThickness', values=dfd['SkinThickness']),
+                              dict(label='Insulin', values=dfd['Insulin']),
+                              dict(label='BMI', values=dfd['BMI']),
+                              dict(label='DiabPedigreeFun', values=dfd['DiabetesPedigreeFunction']),
+                              dict(label='Age', values=dfd['Age'])],
+                  marker=dict(color=dfd['Outcome'],
+                              size=5,
+                              colorscale='Bluered',
+                              line=dict(width=0.5,
+                                        color='rgb(230,230,230)')),
+                  text=textd,
+                  diagonal=dict(visible=False)))
+
+title = "Scatterplot Matrix (SPLOM) for Diabetes Dataset<br>Data source:"+\
+        " <a href='https://www.kaggle.com/uciml/pima-indians-diabetes-database/data'>[1]</a>"
+fig.update_layout(title=title,
+                  dragmode='select',
+                  width=1000,
+                  height=1000,
+                  hovermode='closest')
+
+fig.show()
+```
+#### Hover Effects
+
+*New in 5.21*
+
+Set `hoversubplots='axis'` with `hovermode` set to `x`, `x unified`, `y`, or `y unified` for hover effects to appear across a column or row. For more on hover effects, see the [Hover Text and Formatting](/python/hover-text-and-formatting/) page.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv"
+)
+index_vals = df["class"].astype("category").cat.codes
+
+fig = go.Figure(
+    data=go.Splom(
+        dimensions=[
+            dict(label="sepal length", values=df["sepal length"]),
+            dict(label="sepal width", values=df["sepal width"]),
+            dict(label="petal length", values=df["petal length"]),
+            dict(label="petal width", values=df["petal width"]),
+        ],
+        showupperhalf=False,
+        text=df["class"],
+        marker=dict(
+            color=index_vals,
+            showscale=False,
+            line_color="white",
+            line_width=0.5,
+        ),
+    )
+)
+
+
+fig.update_layout(
+    title=dict(text="Iris Data set"),
+    hoversubplots="axis",
+    width=600,
+    height=600,
+    hovermode="x",
+)
+
+fig.show()
+
+```
+
+#### Linked Axes
+
+*Changed in 7.0*
+
+`dimensions[].axis.matches` links the x-axis and the y-axis generated by a dimension, so every subplot in the same row and column pans and zooms together. It now defaults to `True`. Plotly Express already set it on the figures it generated, so `px.scatter_matrix` is unaffected. Set it to `False` on a dimension to zoom that dimension's row and column independently.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/iris-data.csv"
+)
+
+fig = go.Figure(go.Splom(
+    dimensions=[
+        dict(label="sepal length", values=df["sepal length"], axis=dict(matches=False)),
+        dict(label="sepal width", values=df["sepal width"], axis=dict(matches=False)),
+        dict(label="petal length", values=df["petal length"], axis=dict(matches=False)),
+    ],
+    marker=dict(size=4),
+))
+
+fig.update_layout(title=dict(text="Unlinked axes"), width=600, height=600)
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.scatter_matrix()`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_matrix) or https://plotly.com/python/reference/splom/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/static-image-export.md plotly-7.1.0+dfsg1/doc/python/static-image-export.md
--- plotly-5.20.0+dfsg/doc/python/static-image-export.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/static-image-export.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,302 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.13.3
+  plotly:
+    description: Plotly allows you to save static images of your plots. Save the image
+      to your local computer, or embed it inside your Jupyter notebooks as a static
+      image.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Static Image Export
+    order: 6
+    page_type: u-guide
+    permalink: python/static-image-export/
+    thumbnail: thumbnail/static-image-export.png
+---
+
+This page demonstrates how to export interactive Plotly figures to static image formats like PNG, JPEG, SVG, and PDF. If you want to export Plotly figures to HTML to retain interactivity, see the [Interactive HTML Export page](/python/interactive-html-export/)
+
+<!-- #region -->
+## Install Dependencies
+
+### Kaleido
+
+Static image generation requires [Kaleido](https://github.com/plotly/Kaleido) version 1.0.0 or greater.
+
+Install Kaleido with pip:
+```
+$ pip install --upgrade kaleido
+```
+or with conda:
+```
+$ conda install -c conda-forge python-kaleido
+```
+
+
+### Chrome
+
+Kaleido uses Chrome for static image generation. Starting with Kaleido version 1.0.0, Chrome is not included in the package itself; instead, Kaleido looks for a compatible version of Chrome (or Chromium) already installed on the machine on which it's running.
+
+If you don't have Chrome installed, you can install it directly from Google following the instructions for your operating system.
+
+Plotly also provides a CLI for installing Chrome from the command line.
+
+Run `plotly_get_chrome` to install Chrome.
+
+You can also install Chrome from Python using `plotly.io.get_chrome()`
+
+```python
+import plotly.io as pio
+
+pio.get_chrome()
+```
+
+See the **Additional Information on Browsers with Kaleido** section below for more details on browser compatibility for Kaleido.
+
+<!-- #endregion -->
+
+## Write Image to a File
+
+Plotly figures have a `write_image` method to write a figure to a file. `write_image` supports PNG, JPEG, WebP, SVG, and PDF formats.
+
+To export a figure using `write_image`, call `write_image` on the figure, and pass as an argument the filename where you want to save the figure. The file format is inferred from the extension:
+
+
+### Raster Formats
+
+**PNG**
+~~~python
+import plotly.express as px
+data_canada = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(data_canada, x='year', y='pop')
+fig.write_image("fig1.png")
+~~~
+
+**JPEG**
+
+~~~python
+...
+fig.write_image("images/fig1.jpeg")
+~~~
+
+**WebP**
+
+~~~python
+...
+fig.write_image("images/fig1.webp")
+~~~
+
+### Vector Formats
+
+**SVG**
+~~~python
+...
+fig.write_image("images/fig1.svg")
+~~~
+
+**PDF**
+
+~~~python
+...
+fig.write_image("images/fig1.pdf")
+~~~
+
+**Note:** Figures containing WebGL traces (i.e. of type `scattergl`, `scatter3d`, `surface`, `mesh3d`, `scatterpolargl`, `cone`, `streamtube`, `splom`, or `parcoords`) that are exported in a vector format will include encapsulated rasters, instead of vectors, for some parts of the image. This is a fundamental limitation of WebGL, which renders to a grid of pixels rather than to individual shapes.
+
+Note that Plotly Express automatically uses WebGL for scatter-type figures with more than 1,000 data points: the default `render_mode="auto"` switches from `scatter` to `scattergl` above this threshold. If your exported SVG or PDF unexpectedly contains rasterized markers, this is likely why. To force fully-vector output, pass `render_mode="svg"` to the Plotly Express function, or use `go.Scatter` instead of `go.Scattergl` with graph objects. Note that fully-vector rendering can be slow for figures with many points, which is the reason WebGL is used by default above 1,000 points. See [WebGL Rendering](/python/webgl-vs-svg/) for more on this tradeoff.
+
+
+### Specify a Format
+
+In the earlier example, Plotly inferred the image format from the extension of the filename. You can also specify the format explicitly using the `format` parameter.
+
+~~~python
+import plotly.express as px
+data_canada = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(data_canada, x='year', y='pop')
+fig.write_image("fig1", format="png")
+~~~
+
+
+<!-- #region -->
+### Write Multiple Images
+
+*Kaleido v1 and later*
+
+`plotly.io` provides a `write_images` function for writing multiple figures to images. Using `write_images` is faster than calling `fig.write_image` multiple times.
+
+`write_images` takes a list of figure objects or dicts representing figures as its first argument, `fig`. The second argument `file` is a list of paths to export to. These paths can be specified as `str`s or [`pathlib.Path` objects](https://docs.python.org/3/library/pathlib.html).
+
+~~~python
+import plotly.graph_objects as go
+import plotly.express as px
+import plotly.io as pio
+
+
+fig1 = go.Figure(
+    data=go.Scatter(x=[1, 2, 3], y=[4, 5, 6], mode='lines+markers'),
+    layout=go.Layout(title='Line Chart')
+)
+
+fig2 = go.Figure(
+    data=go.Bar(x=['A', 'B', 'C'], y=[10, 5, 15]),
+    layout=go.Layout(title='Bar Chart')
+)
+
+fig3 = px.pie(
+    values=[30, 20, 10, 40],
+    names=['A', 'B', 'C', 'D'],
+    title='Pie Chart'
+)
+
+pio.write_images(
+    fig=[fig1, fig2, fig3],
+    file=['export_images/line_chart.png', 'export_images/bar_chart.png', 'export_images/pie_chart.png']
+)
+~~~
+
+<!-- #endregion -->
+
+## Get Image as Bytes
+
+As well as exporting to a file, Plotly figures also support conversion to a bytes object.
+To convert a figure to a **PNG** bytes object, call the figure's `to_image` method with a `format`
+
+```python
+import plotly.express as px
+data_canada = px.data.gapminder().query("country == 'Canada'")
+fig = px.bar(data_canada, x='year', y='pop')
+img_bytes = fig.to_image(format="png")
+```
+
+Here's the bytes object displayed using `IPython.display.Image`:
+
+```python
+from IPython.display import Image
+Image(img_bytes)
+```
+
+## Specify Image Dimensions and Scale
+In addition to the image format, the `to_image` and `write_image` functions provide arguments to specify the image `width` and `height` in logical pixels. They also provide a `scale` parameter that can be used to increase (`scale` > 1) or decrease (`scale` < 1) the physical resolution of the resulting image.
+
+```python
+img_bytes = fig.to_image(format="png", width=600, height=350, scale=2)
+Image(img_bytes)
+```
+
+<!-- #region -->
+## plotly.io Functions
+
+Previous examples on this page access `write_image` and `to_image` as methods on Plotly Figure objects. This functionality is also available via the `plotly.io` subpackage.
+
+The following example uses the `write_image` function from  `plotly.io`. The function takes the figure or a `dict` representing a figure (as shown in the example) as its first argument.
+
+
+~~~python
+import plotly.io as pio
+
+
+fig = dict({
+    "data": [{"type": "bar",
+              "x": [1, 2, 3],
+              "y": [1, 3, 2]}],
+    "layout": {"title": {"text": "A Figure Specified By Python Dictionary"}}
+})
+
+pio.write_image(fig, "fig.png")
+~~~
+<!-- #endregion -->
+
+## Image Export Settings
+
+As well as configuring height, width, and other settings by passing arguments when calling `write_image` and `to_image`, you can also set a single default to be used throughout the duration of the program.
+
+### How to Configure
+
+Image export settings can be configured by setting their values in `plotly.io.defaults`.
+
+To set the `default_format` to "jpeg":
+
+~~~python
+import plotly.io as pio
+pio.defaults.default_format = "jpeg"
+~~~
+
+You can also access current defaults. To see the default value for height:
+
+~~~python
+import plotly.io as pio
+pio.defaults.default_height
+~~~
+
+### Available Settings
+
+The following settings are available:
+
+`default_width`: The default pixel width to use on image export.
+
+`default_height`: The default pixel height to use on image export.
+
+`default_scale`: The default image scale factor applied on image export.
+
+`default_format`: The default image format used on export. One of "png", "jpeg", "webp", "svg", or "pdf".
+
+`mathjax`: Location of the MathJax bundle needed to render LaTeX characters. Defaults to a CDN location. If fully offline export is required, set this to a local MathJax bundle.
+
+`plotlyjs`: Location of the Plotly.js bundle to use. Can be a local file path or URL. By default, Kaleido uses the Plotly.js bundle included with Plotly.py.
+
+`topojson`: Location of the topojson files needed to render choropleth traces. Defaults to a CDN location. If fully offline export is required, set this to a local directory containing the Plotly.js topojson files.
+
+`headers`: *New in 6.8.* A dict of HTTP headers Kaleido sends when fetching external resources during image export (for example, when fetching OpenStreetMap tiles for tile maps). Defaults to `{"X-Requested-With": "plotly.py"}`, which is required to comply with the [OpenStreetMap tile usage policy](https://operations.osmfoundation.org/policies/tiles/). Requires Kaleido v1.3.0 or later.
+
+
+### Additional Information on Browsers with Kaleido
+
+When exporting images from Plotly.py, Kaleido will attempt to find a version of [Chrome](https://www.google.com/chrome/index.html) or [Chromium](https://www.chromium.org/getting-involved/download-chromium/) that it can use for the export. It checks in the operating system's PATH for executables with the following names: "chromium", "chromium-browser",  "chrome", "Chrome", "google-chrome" "google-chrome-stable", "Chrome.app", "Google Chrome", "Google Chrome.app", and "Google Chrome for Testing".
+
+Kaleido will also check the following locations:
+
+**Windows**
+
+- r"c:\Program Files\Google\Chrome\Application\chrome.exe"
+- f"c:\\Users\\{os.environ.get('USER', 'default')}\\AppData\\"
+- "Local\\Google\\Chrome\\Application\\chrome.exe"
+
+**Linux"**
+
+- "/usr/bin/google-chrome-stable"
+- "/usr/bin/google-chrome"
+- "/usr/bin/chrome"
+
+**Mac OS**
+
+- "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
+
+---
+
+Most recent versions of Chrome or Chromium should work with Kaleido. Other Chromium-based browsers may also work, though Kaleido won't discover them automatically. You can set a browser to use by setting the path to search using an environment variable called `BROWSER_PATH`. For example:
+
+```
+BROWSER_PATH=/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/static-image-generation-migration.md plotly-7.1.0+dfsg1/doc/python/static-image-generation-migration.md
--- plotly-5.20.0+dfsg/doc/python/static-image-generation-migration.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/static-image-generation-migration.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,81 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.1
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.13.3
+  plotly:
+    description: Details about changes to static image generation in Plotly.py 6.1.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Static Image Generation Changes in Plotly.py 6.1
+    order: 41
+    page_type: u-guide
+    permalink: python/static-image-generation-changes/
+    thumbnail: thumbnail/static-image-export.png
+---
+
+<!-- #region -->
+# Static Image Generation Changes in Plotly.py 6.1
+
+Plotly.py 6.1 introduces support for Kaleido v1, which [improves static image generation](https://plotly.com/blog/kaleido-the-next-generation/) for Plotly figures.
+
+Plotly.py 7.0 removed support for earlier versions of Kaleido and support for [Orca](/python/orca-management/). If you still use Orca or Kaleido v0, update to the latest Kaleido. This page documents how to migrate your Plotly code to Kaleido v1 and outlines the changes in functionality.
+
+To migrate from either Orca or Kaleido v0, first install the latest Kaleido with:
+
+```bash
+pip install --upgrade kaleido
+```
+
+## Chrome
+
+Kaleido uses Chrome for static image generation. Versions of Kaleido prior to v1 included Chrome as part of the Kaleido package. Kaleido v1 does not include Chrome; instead, it looks for a compatible version of Chrome (or Chromium) already installed on the machine on which it's running.
+
+See the [Chrome section](/python/static-image-export#chrome) on the Static Image Export page for more details on Chome and Kaleido.
+
+## Engine Parameter
+
+The `engine` parameter on static image export methods and functions is deprecated in Plotly.py 6.2 and will be removed after September 2025. Once the `engine` parameter is removed, static image generation will use Kaleido v1 if it's installed, or raise an error if it isn't.
+
+You'll need to update your code to remove references to `engine`. For example, `fig.to_image(format="png", engine="orca")` or `fig.to_image(format="png", engine="kaleido")` needs to be updated to `fig.to_image(format="png")`. This change applies to: `fig.to_image`, `fig.write_image`, `plotly.io.to_image`, and `plotly.io.write_image`.
+
+## EPS Format
+
+The `eps` format is no longer supported in Kaleido v1. If your existing code sets `format="eps"`, you'll need to update it to use another format, for example `pdf`.
+
+## Config Settings
+
+Accessing Kaleido defaults and config settings via `plotly.io.kaleido.scope` is now deprecated and will be removed after September 2025. You'll need to update any code that uses `plotly.io.kaleido.scope` to instead use `plotly.io.defaults`. For example, to set the `default_format` to "jpeg":
+
+~~~python
+import plotly.io as pio
+pio.defaults.default_format = "jpeg"
+# Instead of:
+# pio.kaleido.scope.default_format = "jpeg"
+~~~
+
+If you are migrating from Orca, the following config settings do not apply to Kaleido: `server_url`, `port`, `timeout`, and `use_xvfb`, but other settings, such as `default_format`, can be accessed via `plotly.io.defaults`.
+
+## Multiple Image Export
+
+Plotly.py 6.1 includes a `write_images` function (`plotly.io.write_images`), which we recommend over `write_image` when exporting more than one figure. Calling `write_images` with a list of figures (or dicts representing figures) to export provides better performance than multiple calls with `write_image`. See the [Write Multiple Images](/python/static-image-export#write-multiple-images) section for more details.
+<!-- #endregion -->
diff -Nru plotly-5.20.0+dfsg/doc/python/streamline-plots.md plotly-7.1.0+dfsg1/doc/python/streamline-plots.md
--- plotly-5.20.0+dfsg/doc/python/streamline-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/streamline-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,109 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make a streamline plot in Python. A streamline plot displays
+      vector field data.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Streamline Plots
+    order: 11
+    permalink: python/streamline-plots/
+    thumbnail: thumbnail/streamline.jpg
+---
+
+A Streamline plot is a representation based on a 2-D vector field interpreted as a velocity field, consisting of closed curves tangent to the velocity field. In the case of a stationary velocity field, streamlines coincide with trajectories (see also the [Wikipedia page on streamlines, streaklines and pathlines](https://en.wikipedia.org/wiki/Streamlines,_streaklines,_and_pathlines)).
+
+For the streamline [figure factory](/python/figure-factories/), one needs to provide
+- uniformly spaced ranges of `x` and `y` values (1D)
+- 2-D velocity values `u` and `v` defined on the cross-product (`np.meshgrid(x, y)`) of `x` and `y`.
+
+Velocity values are interpolated when determining the streamlines. Streamlines are initialized on the boundary of the `x-y` domain.
+
+#### Basic Streamline Plot
+
+Streamline plots can be made with a [figure factory](/python/figure-factories/) as detailed in this page.
+
+```python
+import plotly.figure_factory as ff
+
+import numpy as np
+
+x = np.linspace(-3, 3, 100)
+y = np.linspace(-3, 3, 100)
+Y, X = np.meshgrid(x, y)
+u = -1 - X**2 + Y
+v = 1 + X - Y**2
+
+# Create streamline figure
+fig = ff.create_streamline(x, y, u, v, arrow_scale=.1)
+fig.show()
+```
+
+#### Streamline and Source Point Plot
+
+```python
+import plotly.figure_factory as ff
+import plotly.graph_objects as go
+
+import numpy as np
+
+N = 50
+x_start, x_end = -2.0, 2.0
+y_start, y_end = -1.0, 1.0
+x = np.linspace(x_start, x_end, N)
+y = np.linspace(y_start, y_end, N)
+X, Y = np.meshgrid(x, y)
+source_strength = 5.0
+x_source, y_source = -1.0, 0.0
+
+# Compute the velocity field on the mesh grid
+u = (source_strength/(2*np.pi) *
+     (X - x_source)/((X - x_source)**2 + (Y - y_source)**2))
+v = (source_strength/(2*np.pi) *
+     (Y - y_source)/((X - x_source)**2 + (Y - y_source)**2))
+
+# Create streamline figure
+fig = ff.create_streamline(x, y, u, v,
+                           name='streamline')
+
+# Add source point
+fig.add_trace(go.Scatter(x=[x_source], y=[y_source],
+                          mode='markers',
+                          marker_size=14,
+                          name='source point'))
+
+fig.show()
+```
+
+#### See also
+
+For a 3D version of streamlines, use the trace `go.Streamtube` documented [here](/python/streamtube-plot/).
+
+For representing the 2-D vector field as arrows, see the [quiver plot tutorial](/python/quiver-plots/).
+
+
+#### Reference
+
+For more info on `ff.create_streamline()`, see the [full function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_streamline.html)
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/streamtube-plot.md plotly-7.1.0+dfsg1/doc/python/streamtube-plot.md
--- plotly-5.20.0+dfsg/doc/python/streamtube-plot.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/streamtube-plot.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,133 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.0
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make 3D streamtube plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Streamtube Plots
+    order: 13
+    page_type: u-guide
+    permalink: python/streamtube-plot/
+    thumbnail: thumbnail/streamtube.jpg
+---
+
+### Introduction
+
+
+In streamtube plots, attributes include `x`, `y`, and `z`, which set the coordinates of the vector field, and `u`, `v`, and `w`, which set the x, y, and z components of the vector field. Additionally, you can use `starts` to determine the streamtube's starting position.
+
+
+### Basic Streamtube Plot
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=go.Streamtube(x=[0, 0, 0], y=[0, 1, 2], z=[0, 0, 0],
+                                   u=[0, 0, 0], v=[1, 1, 1], w=[0, 0, 0]))
+fig.show()
+```
+
+### Starting Position and Segments
+
+By default, streamlines are initialized in the x-z plane of minimal y value. You can change this behaviour by providing directly the starting points of streamtubes.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/streamtube-wind.csv').drop(['Unnamed: 0'],axis=1)
+
+fig = go.Figure(data=go.Streamtube(
+    x = df['x'],
+    y = df['y'],
+    z = df['z'],
+    u = df['u'],
+    v = df['v'],
+    w = df['w'],
+    starts = dict(
+        x = [80] * 16,
+        y = [20,30,40,50] * 4,
+        z = [0,0,0,0,5,5,5,5,10,10,10,10,15,15,15,15]
+    ),
+    sizeref = 0.3,
+    colorscale = 'Portland',
+    showscale = False,
+    maxdisplayed = 3000
+))
+
+fig.update_layout(
+    scene = dict(
+        aspectratio = dict(
+            x = 2,
+            y = 1,
+            z = 0.3
+        )
+    ),
+    margin = dict(
+        t = 20,
+        b = 20,
+        l = 20,
+        r = 20
+    )
+)
+
+fig.show()
+```
+
+### Tube color and diameter
+
+The color of tubes is determined by their local norm, and the diameter of the field by the local [divergence](https://en.wikipedia.org/wiki/Divergence) of the vector field.
+
+In all cases below the norm is proportional to `z**2` but the direction of the vector is different, resulting in a different divergence field.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import numpy as np
+
+x, y, z = np.mgrid[0:10, 0:10, 0:10]
+x = x.flatten()
+y = y.flatten()
+z = z.flatten()
+
+u = np.zeros_like(x)
+v = np.zeros_like(y)
+w = z**2
+
+fig = make_subplots(rows=1, cols=3, specs=[[{'is_3d': True}, {'is_3d': True}, {'is_3d':True}]])
+
+fig.add_trace(go.Streamtube(x=x, y=y, z=z, u=u, v=v, w=w), 1, 1)
+fig.add_trace(go.Streamtube(x=x, y=y, z=z, u=w, v=v, w=u), 1, 2)
+fig.add_trace(go.Streamtube(x=x, y=y, z=z, u=u, v=w, w=v), 1, 3)
+
+fig.update_layout(scene_camera_eye=dict(x=2, y=2, z=2),
+                  scene2_camera_eye=dict(x=2, y=2, z=2),
+                  scene3_camera_eye=dict(x=2, y=2, z=2))
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/streamtube/ for more information and chart attribute options!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/strip-charts.md plotly-7.1.0+dfsg1/doc/python/strip-charts.md
--- plotly-5.20.0+dfsg/doc/python/strip-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/strip-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,64 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: Strip charts are like 1-dimensional jittered scatter plots.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Strip Charts
+    order: 14
+    page_type: u-guide
+    permalink: python/strip-charts/
+    thumbnail: thumbnail/figure-labels.png
+---
+
+### Strip Charts with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+The `px.strip()` function will make strip charts using underlying `box` traces with the box hidden.
+
+See also [box plots](/python/box-plots/) and [violin plots](/python/violin/).
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.strip(df, x="total_bill", y="day")
+fig.show()
+```
+
+Strip charts support [faceting](/python/facet-plots/) and [discrete color](/python/discrete-color/):
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.strip(df, x="total_bill", y="time", color="sex", facet_col="day")
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.strip()`](https://plotly.com/python-api-reference/generated/plotly.express.strip) for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/styling-plotly-express.md plotly-7.1.0+dfsg1/doc/python/styling-plotly-express.md
--- plotly-5.20.0+dfsg/doc/python/styling-plotly-express.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/styling-plotly-express.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,186 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.8
+  plotly:
+    description: Figures made with Plotly Express can be customized in all the same
+      ways as figures made with graph objects, as well as with PX-specific function
+      arguments.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Styling Plotly Express Figures
+    order: 31
+    page_type: u-guide
+    permalink: python/styling-plotly-express/
+    thumbnail: thumbnail/plotly-express.png
+---
+
+### Styling Figures made with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/). Every Plotly Express function returns [a `plotly.graph_objects.Figure` object](/python/graph-objects/) whose `data` and `layout` has been pre-populated according to the provided arguments.
+
+> You can style and customize figures made with Plotly Express _in all the same ways_ as you can style figures made more manually by explicitly assembling `graph_objects` into a figure.
+
+More specifically, here are the 4 ways you can style and customize figures made with Plotly Express:
+
+1. Control common parameters like width & height, titles, labeling and colors using built-in Plotly Express function arguments
+2. Updating the figure attributes using [update methods or by directly setting attributes](/python/creating-and-updating-figures/)
+3. Using Plotly's [theming/templating mechanism](/python/templates/) via the `template` argument to every Plotly Express function
+4. Setting default values for common parameters using `px.defaults`
+
+### Built-in Plotly Express Styling Arguments
+
+Many common styling options can be set directly in the `px` function call. Every Plotly Express function accepts the following arguments:
+
+- `title` to set the figure title
+- `width` and `height` to set the figure dimensions
+- `template` to [set many styling parameters at once](/python/templates/) (see below for more details)
+- `labels` to override the default axis and legend labels behaviour, which is to use the data frame column name if available, and otherwise to use the label name itself like "x", "y", "color" etc. `labels` accepts a `dict` whose keys are the label to rename and whose values are the desired labels. These labels appear in axis labels, legend and color bar titles, and in hover labels.
+- `category_orders` to override the default category ordering behaviour, which is to use the order in which the data appears in the input. `category_orders` accepts a `dict` whose keys are the column name to reorder and whose values are a `list` of values in the desired order. These orderings apply everywhere categories appear: in legends, on axes, in bar stacks, in the order of facets, in the order of animation frames etc.
+- `hover_data` and `hover_name` to control which attributes appear in the hover label and how they are formatted.
+- [Various color-related attributes](/python/colorscales/) such as `color_continuous_scale`, `color_range`, `color_discrete_sequence` and/or `color_discrete_map` set the colors used in the figure. `color_discrete_map` accepts a dict whose keys are values mapped to `color` and whose values are the desired CSS colors.
+
+To illustrate each of these, here is a simple, default figure made with Plotly Express. Note the default orderings for the x-axis categories and the usage of lowercase & snake_case data frame columns for axis labelling.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="day", y="total_bill", color="sex")
+fig.show()
+```
+
+Here is the same figure, restyled by adding some extra parameters to the initial Plotly Express call:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="day", y="total_bill", color="sex",
+            title="Receipts by Payer Gender and Day of Week",
+            width=600, height=400,
+            labels={ # replaces default labels by column name
+                "sex": "Payer Gender",  "day": "Day of Week", "total_bill": "Receipts"
+            },
+            category_orders={ # replaces default order by column name
+                "day": ["Thur", "Fri", "Sat", "Sun"], "sex": ["Male", "Female"]
+            },
+            color_discrete_map={ # replaces default color mapping by value
+                "Male": "RebeccaPurple", "Female": "MediumPurple"
+            },
+            template="simple_white"
+            )
+fig.show()
+```
+
+### Updating or Modifying Figures made with Plotly Express
+
+If none of the built-in Plotly Express arguments allow you to customize the figure the way you need to, you can use [the `update_*` and `add_*` methods](/python/creating-and-updating-figures/) on [the `plotly.graph_objects.Figure` object](/python/graph-objects/) returned by the PX function to make any further modifications to the figure. This approach is the one used throughout the Plotly.py documentation to [customize axes](/python/axes/), control [legends](/python/legend/) and [colorbars](/python/colorscales/), add [shapes](/python/shapes/) and [annotations](/python/text-and-annotations/) etc.
+
+Here is the same figure as above, with some additional customizations to the axes and legend via `.update_yaxes()`, and `.update_layout()`, as well as some annotations added via `.add_shape()` and `.add_annotation()`.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.histogram(df, x="day", y="total_bill", color="sex",
+            title="Receipts by Payer Gender and Day of Week vs Target",
+            width=600, height=400,
+            labels={"sex": "Payer Gender",  "day": "Day of Week", "total_bill": "Receipts"},
+            category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], "sex": ["Male", "Female"]},
+            color_discrete_map={"Male": "RebeccaPurple", "Female": "MediumPurple"},
+            template="simple_white"
+            )
+
+fig.update_yaxes( # the y-axis is in dollars
+    tickprefix="$", showgrid=True
+)
+
+fig.update_layout( # customize font and legend orientation & position
+    font_family="Rockwell",
+    legend=dict(
+        title=None, orientation="h", y=1, yanchor="bottom", x=0.5, xanchor="center"
+    )
+)
+
+fig.add_shape( # add a horizontal "target" line
+    type="line", line_color="salmon", line_width=3, opacity=1, line_dash="dot",
+    x0=0, x1=1, xref="paper", y0=950, y1=950, yref="y"
+)
+
+fig.add_annotation( # add a text callout with arrow
+    text="below target!", x="Fri", y=400, arrowhead=1, showarrow=True
+)
+
+fig.show()
+```
+
+### How Plotly Express Works with Templates
+
+Plotly has a [theming system based on templates](/python/templates/) and figures created with Plotly Express interact smoothly with this system:
+
+- Plotly Express methods will use the default template if one is set in `plotly.io` (by default, this is set to `plotly`) or in `plotly.express.defaults` (see below)
+- The template in use can always be overridden via the `template` argument to every PX function
+- The default `color_continuous_scale` will be the value of `layout.colorscales.sequential` in the template in use, unless it is overridden via the corresponding function argument or via `plotly.express.defaults` (see below)
+- The default `color_discrete_sequence` will be the value of `layout.colorway` in the template in use, unless it is overridden via the corresponding function argument or via `plotly.express.defaults` (see below)
+
+By way of example, in the following figure, simply setting the `template` argument will automatically change the default continuous color scale, even though we have not specified `color_continuous_scale` directly.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+fig = px.density_heatmap(df, x="sepal_width", y="sepal_length", template="seaborn")
+fig.show()
+```
+
+### Setting Plotly Express Styling Defaults
+
+Plotly Express supports a simple default-configuration system via the `plotly.express.defaults` singleton object. The values of the properties set on this object are used for the rest of the active session in place of `None` as the default values for any argument to a PX function with a matching name:
+
+- `width` and `height` can be set once globally for all Plotly Express functions
+- `template` can override the setting of `plotly.io.templates.default` for all Plotly Express functions
+- `color_continuous_scale` and `color_discrete_scale` can override the contents of the template in use for all Plotly Express functions that accept these arguments
+- `line_dash_sequence`, `symbol_sequence` and `size_max` can be set once globally for all Plotly Express functions that accept these arguments
+
+To illustrate this "defaults hierarchy", in the following example:
+
+- we set the Plotly-wide default template to `simple_white`, but
+- we override the default template for Plotly Express to be `ggplot2`, but
+- we also set the default `color_continuous_scale`, and
+- we set the default `height` and `width` to 400 by 600, but
+- we override the default `width` to 400 via the function argument.
+
+As a result, any figure produced with Plotly Express thereafter uses the `ggplot2` settings for all attributes except for the continuous color scale (visible because `simple_white` doesn't set a plot background, and neither the `simple_white` nor `ggplot2` template uses `Blackbody` as a color scale), and uses the Plotly Express defaults for height but not width (visible because the figure height is the same as the figure width, despite the default).
+
+```python
+import plotly.express as px
+import plotly.io as pio
+
+pio.templates.default = "simple_white"
+
+px.defaults.template = "ggplot2"
+px.defaults.color_continuous_scale = px.colors.sequential.Blackbody
+px.defaults.width = 600
+px.defaults.height = 400
+
+df = px.data.iris()
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="sepal_length", width=400)
+fig.show()
+```
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/subplots.md plotly-7.1.0+dfsg1/doc/python/subplots.md
--- plotly-5.20.0+dfsg/doc/python/subplots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/subplots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,650 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: How to make subplots with Plotly's Python graphing library. Examples
+      of stacked, custom-sized, gridded, and annotated subplots.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Subplots
+    order: 18
+    page_type: u-guide
+    permalink: python/subplots/
+    redirect_from: ipython-notebooks/subplots/
+    thumbnail: thumbnail/subplots.jpg
+---
+
+### Subplots and Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Plotly Express does not support arbitrary subplot capabilities, instead it supports [faceting by a given data dimension](/python/facet-plots/), and it also supports [marginal charts to display distribution information](/python/marginal-plots/).
+
+This page documents the usage of the lower-level `plotly.subplots` module and the `make_subplots` function it exposes to construct figures with arbitrary subplots. **Plotly Express faceting uses `make_subplots` internally** so adding traces to Plotly Express facets works just as documented here, with `fig.add_trace(..., row=<R>, col=<C>)`.
+
+
+#### Simple Subplot
+
+Figures with subplots are created using the `make_subplots` function from the `plotly.subplots` module.
+
+Here is an example of creating a figure that includes two `scatter` traces which are side-by-side since there are 2 columns and 1 row in the subplot layout.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_trace(
+    go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
+    row=1, col=1
+)
+
+fig.add_trace(
+    go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
+    row=1, col=2
+)
+
+fig.update_layout(height=600, width=800, title_text="Side By Side Subplots")
+fig.show()
+```
+
+#### Stacked Subplots
+
+Here is an example of creating a figure with subplots that are stacked on top of each other since there are 3 rows and 1 column in the subplot layout.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(rows=3, cols=1)
+
+fig.add_trace(go.Scatter(
+    x=[3, 4, 5],
+    y=[1000, 1100, 1200],
+), row=1, col=1)
+
+fig.add_trace(go.Scatter(
+    x=[2, 3, 4],
+    y=[100, 110, 120],
+), row=2, col=1)
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2],
+    y=[10, 11, 12]
+), row=3, col=1)
+
+
+fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
+fig.show()
+```
+
+#### Multiple Subplots
+
+Here is an example of creating a 2 x 2 subplot grid and populating each subplot with a single `scatter` trace.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=2, cols=2, start_cell="bottom-left")
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
+              row=1, col=1)
+
+fig.add_trace(go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
+              row=1, col=2)
+
+fig.add_trace(go.Scatter(x=[300, 400, 500], y=[600, 700, 800]),
+              row=2, col=1)
+
+fig.add_trace(go.Scatter(x=[4000, 5000, 6000], y=[7000, 8000, 9000]),
+              row=2, col=2)
+
+fig.show()
+```
+
+#### Multiple Subplots with Titles
+The `subplot_titles` argument to `make_subplots` can be used to position text annotations as titles for each subplot.
+
+Here is an example of adding subplot titles to a 2 x 2 subplot grid of scatter traces.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(
+    rows=2, cols=2,
+    subplot_titles=("Plot 1", "Plot 2", "Plot 3", "Plot 4"))
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
+              row=1, col=1)
+
+fig.add_trace(go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
+              row=1, col=2)
+
+fig.add_trace(go.Scatter(x=[300, 400, 500], y=[600, 700, 800]),
+              row=2, col=1)
+
+fig.add_trace(go.Scatter(x=[4000, 5000, 6000], y=[7000, 8000, 9000]),
+              row=2, col=2)
+
+fig.update_layout(height=500, width=700,
+                  title_text="Multiple Subplots with Titles")
+
+fig.show()
+```
+
+#### Customizing the Subplot Title Font
+
+*New in 6.8*
+
+Use the `font` argument of `make_subplots` to customize the font used for `subplot_titles`, `column_titles`, `row_titles`, `x_title`, and `y_title`. The argument accepts a dict with any of the standard [font attributes](https://plotly.com/python/reference/layout/annotations/#layout-annotations-items-annotation-font) (`family`, `size`, `color`, `weight`, etc.).
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(
+    rows=1, cols=2,
+    subplot_titles=("Plot 1", "Plot 2"),
+    font=dict(family="Courier New, monospace", size=20, color="RebeccaPurple"),
+)
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]), row=1, col=1)
+fig.add_trace(go.Scatter(x=[20, 30, 40], y=[50, 60, 70]), row=1, col=2)
+
+fig.show()
+```
+
+#### Subplots with Annotations
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(rows=1, cols=2)
+
+fig.add_trace(
+    go.Scatter(
+        x=[1, 2, 3],
+        y=[4, 5, 6],
+        mode="markers+text",
+        text=["Text A", "Text B", "Text C"],
+        textposition="bottom center"
+    ),
+    row=1, col=1
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=[20, 30, 40],
+        y=[50, 60, 70],
+        mode="markers+text",
+        text=["Text D", "Text E", "Text F"],
+        textposition="bottom center"
+    ),
+    row=1, col=2
+)
+
+fig.update_layout(height=600, width=800, title_text="Subplots with Annotations")
+
+fig.show()
+```
+
+#### Customize Subplot Column Widths and Row Heights
+The `column_widths` argument to `make_subplots` can be used to customize the relative widths of the columns in a subplot grid. It should be set to a list of numbers with a length that matches the `cols` argument.  These number will be normalized, so that they sum to 1, and used to compute the relative widths of the subplot grid columns. The `row_heights` argument serves the same purpose for controlling the relative heights of rows in the subplot grid.
+
+Here is an example of creating a figure with two scatter traces in side-by-side subplots. The left subplot is set to be wider than the right one.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+fig = make_subplots(rows=1, cols=2, column_widths=[0.7, 0.3])
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
+              row=1, col=1)
+
+fig.add_trace(go.Scatter(x=[20, 30, 40], y=[50, 60, 70]),
+              row=1, col=2)
+
+fig.show()
+```
+
+#### Subplots in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'subplots', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Customizing Subplot Axes
+After a figure with subplots is created using the `make_subplots` function, its axis properties (title, font, range, grid style, etc.) can be customized using the `update_xaxes` and `update_yaxes` graph object figure methods.  By default, these methods apply to all of the x axes or y axes in the figure. The `row` and `col` arguments can be used to control which axes are targeted by the update.
+
+Here is an example that creates a figure with a 2 x 2 subplot grid, populates each subplot with a scatter trace, and then updates the x and y axis titles for each subplot individually.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+# Initialize figure with subplots
+fig = make_subplots(
+    rows=2, cols=2, subplot_titles=("Plot 1", "Plot 2", "Plot 3", "Plot 4")
+)
+
+# Add traces
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]), row=1, col=1)
+fig.add_trace(go.Scatter(x=[20, 30, 40], y=[50, 60, 70]), row=1, col=2)
+fig.add_trace(go.Scatter(x=[300, 400, 500], y=[600, 700, 800]), row=2, col=1)
+fig.add_trace(go.Scatter(x=[4000, 5000, 6000], y=[7000, 8000, 9000]), row=2, col=2)
+
+# Update xaxis properties
+fig.update_xaxes(title_text="xaxis 1 title", row=1, col=1)
+fig.update_xaxes(title_text="xaxis 2 title", range=[10, 50], row=1, col=2)
+fig.update_xaxes(title_text="xaxis 3 title", showgrid=False, row=2, col=1)
+fig.update_xaxes(title_text="xaxis 4 title", type="log", row=2, col=2)
+
+# Update yaxis properties
+fig.update_yaxes(title_text="yaxis 1 title", row=1, col=1)
+fig.update_yaxes(title_text="yaxis 2 title", range=[40, 80], row=1, col=2)
+fig.update_yaxes(title_text="yaxis 3 title", showgrid=False, row=2, col=1)
+fig.update_yaxes(title_text="yaxis 4 title", row=2, col=2)
+
+# Update title and height
+fig.update_layout(title_text="Customizing Subplot Axes", height=700)
+
+fig.show()
+```
+
+#### Subplots with Shared X-Axes
+The `shared_xaxes` argument to `make_subplots` can be used to link the x axes of subplots in the resulting figure. The `vertical_spacing` argument is used to control the vertical spacing between rows in the subplot grid.
+
+Here is an example that creates a figure with 3 vertically stacked subplots with linked x axes. A small vertical spacing value is used to reduce the spacing between subplot rows.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(rows=3, cols=1,
+                    shared_xaxes=True,
+                    vertical_spacing=0.02)
+
+fig.add_trace(go.Scatter(x=[0, 1, 2], y=[10, 11, 12]),
+              row=3, col=1)
+
+fig.add_trace(go.Scatter(x=[2, 3, 4], y=[100, 110, 120]),
+              row=2, col=1)
+
+fig.add_trace(go.Scatter(x=[3, 4, 5], y=[1000, 1100, 1200]),
+              row=1, col=1)
+
+fig.update_layout(height=600, width=600,
+                  title_text="Stacked Subplots with Shared X-Axes")
+fig.show()
+```
+
+#### Subplots with Shared Y-Axes
+The `shared_yaxes` argument to `make_subplots` can be used to link the y axes of subplots in the resulting figure.
+
+Here is an example that creates a figure with a 2 x 2 subplot grid, where the y axes of each row are linked.
+
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(rows=2, cols=2, shared_yaxes=True)
+
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[2, 3, 4]),
+              row=1, col=1)
+
+fig.add_trace(go.Scatter(x=[20, 30, 40], y=[5, 5, 5]),
+              row=1, col=2)
+
+fig.add_trace(go.Scatter(x=[2, 3, 4], y=[600, 700, 800]),
+              row=2, col=1)
+
+fig.add_trace(go.Scatter(x=[4000, 5000, 6000], y=[7000, 8000, 9000]),
+              row=2, col=2)
+
+fig.update_layout(height=600, width=600,
+                  title_text="Multiple Subplots with Shared Y-Axes")
+fig.show()
+```
+
+### Subplots with Shared Colorscale
+
+To share colorscale information in multiple subplots, you can use [coloraxis](https://plotly.com/javascript/reference/scatter/#scatter-marker-line-coloraxis).
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(rows=1, cols=2, shared_yaxes=True)
+
+fig.add_trace(go.Bar(x=[1, 2, 3], y=[4, 5, 6],
+                    marker=dict(color=[4, 5, 6], coloraxis="coloraxis")),
+              1, 1)
+
+fig.add_trace(go.Bar(x=[1, 2, 3], y=[2, 3, 5],
+                    marker=dict(color=[2, 3, 5], coloraxis="coloraxis")),
+              1, 2)
+
+fig.update_layout(coloraxis=dict(colorscale='Bluered_r'), showlegend=False)
+fig.show()
+```
+
+#### Custom Sized Subplot with Subplot Titles
+The `specs` argument to `make_subplots` is used to configure per-subplot options.  `specs` must be a 2-dimension list with dimensions that match those provided as the `rows` and `cols` arguments. The elements of `specs` may either be `None`, indicating no subplot should be initialized starting with this grid cell, or a dictionary containing subplot options.  The `colspan` subplot option specifies the number of grid columns that the subplot starting in the given cell should occupy.  If unspecified, `colspan` defaults to 1.
+
+Here is an example that creates a 2 by 2 subplot grid containing 3 subplots.  The subplot `specs` element for position (2, 1) has a `colspan` value of 2, causing it to span the full figure width. The subplot `specs` element for position (2, 2) is `None` because no subplot begins at this location in the grid.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(
+    rows=2, cols=2,
+    specs=[[{}, {}],
+           [{"colspan": 2}, None]],
+    subplot_titles=("First Subplot","Second Subplot", "Third Subplot"))
+
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
+                 row=1, col=1)
+
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2]),
+                 row=1, col=2)
+fig.add_trace(go.Scatter(x=[1, 2, 3], y=[2, 1, 2]),
+                 row=2, col=1)
+
+fig.update_layout(showlegend=False, title_text="Specs with Subplot Title")
+fig.show()
+```
+
+#### Multiple Custom Sized Subplots
+If the `print_grid` argument to `make_subplots` is set to `True`, then a text representation of the subplot grid will be printed.
+
+Here is an example that uses the `rowspan` and `colspan` subplot options to create a custom subplot layout with subplots of mixed sizes. The `print_grid` argument is set to `True` so that the subplot grid is printed to the screen.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(
+    rows=5, cols=2,
+    specs=[[{}, {"rowspan": 2}],
+           [{}, None],
+           [{"rowspan": 2, "colspan": 2}, None],
+           [None, None],
+           [{}, {}]],
+    print_grid=True)
+
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2], name="(1,1)"), row=1, col=1)
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2], name="(1,2)"), row=1, col=2)
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2], name="(2,1)"), row=2, col=1)
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2], name="(3,1)"), row=3, col=1)
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2], name="(5,1)"), row=5, col=1)
+fig.add_trace(go.Scatter(x=[1, 2], y=[1, 2], name="(5,2)"), row=5, col=2)
+
+fig.update_layout(height=600, width=600, title_text="specs examples")
+fig.show()
+```
+
+#### Subplots Types
+By default, the `make_subplots` function assumes that the traces that will be added to all subplots are 2-dimensional cartesian traces (e.g. `scatter`, `bar`, `histogram`, `violin`, etc.).  Traces with other subplot types (e.g. `scatterpolar`, `scattergeo`, `parcoords`, etc.) are supported by specifying the `type` subplot option in the `specs` argument to `make_subplots`.
+
+Here are the possible values for the `type` option:
+
+ - `"xy"`: 2D Cartesian subplot type for scatter, bar, etc. This is the default if no `type` is specified.
+ - `"scene"`: 3D Cartesian subplot for scatter3d, cone, etc.
+ - `"polar"`: Polar subplot for scatterpolar, barpolar, etc.
+ - `"ternary"`: Ternary subplot for scatterternary.
+ - `"map"`: Map subplot for scattermap.
+ - `"domain"`: Subplot type for traces that are individually positioned. pie, parcoords, parcats, etc.
+ - trace type: A trace type name (e.g. `"bar"`, `"scattergeo"`, `"carpet"`, `"mesh"`, etc.) which will be used to determine the appropriate subplot type for that trace.
+
+Here is an example that creates and populates a 2 x 2 subplot grid containing 4 different subplot types.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(
+    rows=2, cols=2,
+    specs=[[{"type": "xy"}, {"type": "polar"}],
+           [{"type": "domain"}, {"type": "scene"}]],
+)
+
+fig.add_trace(go.Bar(y=[2, 3, 1]),
+              row=1, col=1)
+
+fig.add_trace(go.Barpolar(theta=[0, 45, 90], r=[2, 3, 1]),
+              row=1, col=2)
+
+fig.add_trace(go.Pie(values=[2, 3, 1]),
+              row=2, col=1)
+
+fig.add_trace(go.Scatter3d(x=[2, 3, 1], y=[0, 0, 0],
+                           z=[0.5, 1, 2], mode="lines"),
+              row=2, col=2)
+
+fig.update_layout(height=700, showlegend=False)
+
+fig.show()
+```
+
+As an alternative to providing the name of a subplot type (e.g. `"xy"`, `"polar"`, `"domain"`, `"scene"`, etc), the `type` option may also be set to a string containing the name of a trace type (e.g. `"bar"`, `"barpolar"`, `"pie"`, `"scatter3d"`, etc.), which will be used to determine the subplot type that is compatible with that trace.
+
+Here is the example above, modified to specify the subplot types using trace type names.
+
+```python
+from plotly.subplots import make_subplots
+import plotly.graph_objects as go
+
+fig = make_subplots(
+    rows=2, cols=2,
+    specs=[[{"type": "bar"}, {"type": "barpolar"}],
+           [{"type": "pie"}, {"type": "scatter3d"}]],
+)
+
+fig.add_trace(go.Bar(y=[2, 3, 1]),
+              row=1, col=1)
+
+fig.add_trace(go.Barpolar(theta=[0, 45, 90], r=[2, 3, 1]),
+              row=1, col=2)
+
+fig.add_trace(go.Pie(values=[2, 3, 1]),
+              row=2, col=1)
+
+fig.add_trace(go.Scatter3d(x=[2, 3, 1], y=[0, 0, 0],
+                           z=[0.5, 1, 2], mode="lines"),
+              row=2, col=2)
+
+fig.update_layout(height=700, showlegend=False)
+
+fig.show()
+```
+
+#### Side by Side Subplot (low-level API)
+
+```python
+import plotly.graph_objects as go
+
+trace1 = go.Scatter(
+    x=[1, 2, 3],
+    y=[4, 5, 6]
+)
+trace2 = go.Scatter(
+    x=[20, 30, 40],
+    y=[50, 60, 70],
+    xaxis="x2",
+    yaxis="y2"
+)
+data = [trace1, trace2]
+layout = go.Layout(
+    xaxis=dict(
+        domain=[0, 0.7]
+    ),
+    xaxis2=dict(
+        domain=[0.8, 1]
+    ),
+    yaxis2=dict(
+        anchor="x2"
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+fig.show()
+```
+
+#### Subplots with shared axes (low-level API)
+
+```python
+import plotly.graph_objects as go
+
+trace1 = go.Scatter(
+    x=[1, 2, 3],
+    y=[2, 3, 4]
+)
+trace2 = go.Scatter(
+    x=[20, 30, 40],
+    y=[5, 5, 5],
+    xaxis="x2",
+    yaxis="y"
+)
+trace3 = go.Scatter(
+    x=[2, 3, 4],
+    y=[600, 700, 800],
+    xaxis="x",
+    yaxis="y3"
+)
+trace4 = go.Scatter(
+    x=[4000, 5000, 6000],
+    y=[7000, 8000, 9000],
+    xaxis="x4",
+    yaxis="y4"
+)
+data = [trace1, trace2, trace3, trace4]
+layout = go.Layout(
+    xaxis=dict(
+        domain=[0, 0.45]
+    ),
+    yaxis=dict(
+        domain=[0, 0.45]
+    ),
+    xaxis2=dict(
+        domain=[0.55, 1]
+    ),
+    xaxis4=dict(
+        domain=[0.55, 1],
+        anchor="y4"
+    ),
+    yaxis3=dict(
+        domain=[0.55, 1]
+    ),
+    yaxis4=dict(
+        domain=[0.55, 1],
+        anchor="x4"
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+fig.show()
+```
+
+#### Stacked Subplots with a Shared X-Axis (low-level API)
+
+```python
+import plotly.graph_objects as go
+
+trace1 = go.Scatter(
+    x=[0, 1, 2],
+    y=[10, 11, 12]
+)
+trace2 = go.Scatter(
+    x=[2, 3, 4],
+    y=[100, 110, 120],
+    yaxis="y2"
+)
+trace3 = go.Scatter(
+    x=[3, 4, 5],
+    y=[1000, 1100, 1200],
+    yaxis="y3"
+)
+data = [trace1, trace2, trace3]
+layout = go.Layout(
+    yaxis=dict(
+        domain=[0, 0.33]
+    ),
+    legend=dict(
+        traceorder="reversed"
+    ),
+    yaxis2=dict(
+        domain=[0.33, 0.66]
+    ),
+    yaxis3=dict(
+        domain=[0.66, 1]
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+fig.show()
+```
+
+#### Setting Subplots on a Figure Directly
+
+_new in 4.13_
+
+Subplots can be added to an already existing figure, provided it doesn't already
+have subplots. `go.Figure.set_subplots` accepts all the same arguments as
+`plotly.subplots.make_subplots`.
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure().set_subplots(2, 3, horizontal_spacing=0.1)
+```
+
+is equivalent to:
+
+```python
+from plotly.subplots import make_subplots
+fig = make_subplots(2, 3, horizontal_spacing=0.1)
+```
+
+#### Reference
+All of the x-axis properties are found here: https://plotly.com/python/reference/layout/xaxis/
+All of the y-axis properties are found here: https://plotly.com/python/reference/layout/yaxis/
+
+```python
+from plotly.subplots import make_subplots
+help(make_subplots)
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/sunburst-charts.md plotly-7.1.0+dfsg1/doc/python/sunburst-charts.md
--- plotly-5.20.0+dfsg/doc/python/sunburst-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/sunburst-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,416 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make Sunburst Charts.
+    display_as: basic
+    language: python
+    layout: base
+    name: Sunburst Charts
+    order: 10
+    page_type: u-guide
+    permalink: python/sunburst-charts/
+    thumbnail: thumbnail/sunburst.gif
+---
+
+Sunburst plots visualize hierarchical data spanning outwards radially from root to leaves. Similar to [Icicle charts](https://plotly.com/python/icicle-charts/) and [Treemaps](https://plotly.com/python/treemaps/), the hierarchy is defined by `labels` (`names` for `px.icicle`) and `parents` attributes. The root starts from the center and children are added to the outer rings.
+
+### Basic Sunburst Plot with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.sunburst`, each row of the DataFrame is represented as a sector of the sunburst.
+
+```python
+import plotly.express as px
+data = dict(
+    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
+    value=[10, 14, 12, 10, 2, 6, 6, 4, 4])
+
+fig = px.sunburst(
+    data,
+    names='character',
+    parents='parent',
+    values='value',
+)
+fig.show()
+```
+
+### Sunburst of a rectangular DataFrame with plotly.express
+
+Hierarchical data are often stored as a rectangular dataframe, with different columns corresponding to different levels of the hierarchy. `px.sunburst` can take a `path` parameter corresponding to a list of columns. Note that `id` and `parent` should not be provided if `path` is given.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.sunburst(df, path=['day', 'time', 'sex'], values='total_bill')
+fig.show()
+```
+
+### Sunburst of a rectangular DataFrame with continuous color argument in px.sunburst
+
+If a `color` argument is passed, the color of a node is computed as the average of the color values of its children, weighted by their values.
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.gapminder().query("year == 2007")
+fig = px.sunburst(df, path=['continent', 'country'], values='pop',
+                  color='lifeExp', hover_data=['iso_alpha'],
+                  color_continuous_scale='RdBu',
+                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
+fig.show()
+```
+
+### Sunburst of a rectangular DataFrame with discrete color argument in px.sunburst
+
+When the argument of `color` corresponds to non-numerical data, discrete colors are used. If a sector has the same value of the `color` column for all its children, then the corresponding color is used, otherwise the first color of the discrete color sequence is used.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='day')
+fig.show()
+```
+
+In the example below the color of `Saturday` and `Sunday` sectors is the same as `Dinner` because there are only Dinner entries for Saturday and Sunday. However, for Female -> Friday there are both lunches and dinners, hence the "mixed" color (blue here) is used.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='time')
+fig.show()
+```
+
+### Using an explicit mapping for discrete colors
+
+For more information about discrete colors, see the [dedicated page](/python/discrete-color).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='time',
+                  color_discrete_map={'(?)':'black', 'Lunch':'gold', 'Dinner':'darkblue'})
+fig.show()
+```
+
+### Rectangular data with missing values
+
+If the dataset is not fully rectangular, missing values should be supplied as `None`. Note that the parents of `None` entries must be a leaf, i.e. it cannot have other children than `None` (otherwise a `ValueError` is raised).
+
+```python
+import plotly.express as px
+import pandas as pd
+vendors = ["A", "B", "C", "D", None, "E", "F", "G", "H", None]
+sectors = ["Tech", "Tech", "Finance", "Finance", "Other",
+           "Tech", "Tech", "Finance", "Finance", "Other"]
+regions = ["North", "North", "North", "North", "North",
+           "South", "South", "South", "South", "South"]
+sales = [1, 3, 2, 4, 1, 2, 2, 1, 4, 1]
+df = pd.DataFrame(
+    dict(vendors=vendors, sectors=sectors, regions=regions, sales=sales)
+)
+print(df)
+fig = px.sunburst(df, path=['regions', 'sectors', 'vendors'], values='sales')
+fig.show()
+```
+
+### Basic Sunburst Plot with go.Sunburst
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Sunburst` class from `plotly.graph_objects`](/python/graph-objects/).
+
+Main arguments:
+
+1. `labels` (`names` in `px.sunburst` since `labels` is reserved for overriding columns names): sets the labels of sunburst sectors.
+2. `parents`: sets the parent sectors of sunburst sectors. An empty string `''` is used for the root node in the hierarchy. In this example, the root is "Eve".
+3. `values`: sets the values associated with sunburst sectors, determining their width (See the `branchvalues` section below for different modes for setting the width).
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Sunburst(
+    labels=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
+    values=[10, 14, 12, 10, 2, 6, 6, 4, 4],
+))
+# Update layout for tight margin
+# See https://plotly.com/python/creating-and-updating-figures/
+fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))
+
+fig.show()
+```
+
+### Sunburst with Repeated Labels
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Sunburst(
+ ids=[
+    "North America", "Europe", "Australia", "North America - Football", "Soccer",
+    "North America - Rugby", "Europe - Football", "Rugby",
+    "Europe - American Football","Australia - Football", "Association",
+    "Australian Rules", "Autstralia - American Football", "Australia - Rugby",
+    "Rugby League", "Rugby Union"
+  ],
+  labels= [
+    "North<br>America", "Europe", "Australia", "Football", "Soccer", "Rugby",
+    "Football", "Rugby", "American<br>Football", "Football", "Association",
+    "Australian<br>Rules", "American<br>Football", "Rugby", "Rugby<br>League",
+    "Rugby<br>Union"
+  ],
+  parents=[
+    "", "", "", "North America", "North America", "North America", "Europe",
+    "Europe", "Europe","Australia", "Australia - Football", "Australia - Football",
+    "Australia - Football", "Australia - Football", "Australia - Rugby",
+    "Australia - Rugby"
+  ],
+))
+fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))
+
+fig.show()
+```
+
+### Branchvalues
+
+With branchvalues "total", the value of the parent represents the width of its wedge. In the example below, "Enoch" is 4 and "Awan" is 6 and so Enoch's width is 4/6ths of Awans. With branchvalues "remainder", the parent's width is determined by its own value plus those of its children. So, Enoch's width is 4/10ths of Awan's (4 / (6 + 4)).
+
+Note that this means that the sum of the values of the children cannot exceed the value of their parent when branchvalues is set to "total". When branchvalues is set to "remainder" (the default), children will not take up all of the space below their parent (unless the parent is the root and it has a value of 0).
+
+```python
+import plotly.graph_objects as go
+
+fig =go.Figure(go.Sunburst(
+    labels=[ "Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents=["",    "Eve",  "Eve",  "Seth", "Seth", "Eve",  "Eve",  "Awan",  "Eve" ],
+    values=[  65,    14,     12,     10,     2,      6,      6,      4,       4],
+    branchvalues="total",
+))
+fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))
+
+fig.show()
+```
+
+### Large Number of Slices
+
+This example uses a [plotly grid attribute](https://plotly.com/python/reference/layout/#layout-grid) for the subplots. Reference the row and column destination using the [domain](https://plotly.com/python/reference/sunburst/#sunburst-domain) attribute.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df1 = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/sunburst-coffee-flavors-complete.csv')
+df2 = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/coffee-flavors.csv')
+
+fig = go.Figure()
+
+fig.add_trace(go.Sunburst(
+    ids=df1.ids,
+    labels=df1.labels,
+    parents=df1.parents,
+    domain=dict(column=0)
+))
+
+fig.add_trace(go.Sunburst(
+    ids=df2.ids,
+    labels=df2.labels,
+    parents=df2.parents,
+    domain=dict(column=1),
+    maxdepth=2
+))
+
+fig.update_layout(
+    grid= dict(columns=2, rows=1),
+    margin = dict(t=0, l=0, r=0, b=0)
+)
+
+fig.show()
+```
+
+#### Controlling text orientation inside sunburst sectors
+
+The `insidetextorientation` attribute controls the orientation of text inside sectors. With
+"auto" the texts may automatically be rotated to fit with the maximum size inside the slice. Using "horizontal" (resp. "radial", "tangential") forces text to be horizontal (resp. radial or tangential). Note that `plotly` may reduce the font size in order to fit the text with the requested orientation.
+
+For a figure `fig` created with plotly express, use `fig.update_traces(insidetextorientation='...')` to change the text orientation.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/coffee-flavors.csv')
+
+fig = go.Figure()
+
+fig.add_trace(go.Sunburst(
+    ids=df.ids,
+    labels=df.labels,
+    parents=df.parents,
+    domain=dict(column=1),
+    maxdepth=2,
+    insidetextorientation='radial'
+))
+
+fig.update_layout(
+    margin = dict(t=10, l=10, r=10, b=10)
+)
+
+fig.show()
+```
+
+### Controlling text fontsize with uniformtext
+
+If you want all the text labels to have the same size, you can use the `uniformtext` layout parameter. The `minsize` attribute sets the font size, and the `mode` attribute sets what happens for labels which cannot fit with the desired fontsize: either `hide` them or `show` them with overflow.
+
+*Note: animated transitions are currently not implemented when `uniformtext` is used.*
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(go.Sunburst(
+        ids = df.ids,
+        labels = df.labels,
+        parents = df.parents))
+fig.update_layout(uniformtext=dict(minsize=10, mode='hide'))
+fig.show()
+```
+
+### Pattern Fills
+
+*New in 5.15*
+
+Sunburst charts support [patterns](/python/pattern-hatching-texture/) (also known as hatching or texture) in addition to color. In this example, we add a different pattern to each level of the hierarchy. We also specify the `solidity` of the pattern.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    go.Sunburst(
+        labels=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+        parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"],
+        values=[65, 14, 12, 10, 2, 6, 6, 4, 4],
+        branchvalues="total",
+        textfont_size=16,
+        marker=dict(
+            pattern=dict(
+                shape=["", "/", "/", ".", ".", "/", "/", ".", "/"], solidity=0.9
+            )
+        ),
+    )
+)
+
+fig.update_layout(margin=dict(t=0, l=0, r=0, b=0))
+
+fig.show()
+
+```
+
+### Sunburst chart with a continuous colorscale
+
+The example below visualizes a breakdown of sales (corresponding to sector width) and call success rate (corresponding to sector color) by region, county and salesperson level. For example, when exploring the data you can see that although the East region is behaving poorly, the Tyler county is still above average -- however, its performance is reduced by the poor success rate of salesperson GT.
+
+In the right subplot which has a `maxdepth` of two levels, click on a sector to see its breakdown to lower levels.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/sales_success.csv')
+print(df.head())
+
+levels = ['salesperson', 'county', 'region'] # levels used for the hierarchical chart
+color_columns = ['sales', 'calls']
+value_column = 'calls'
+
+def build_hierarchical_dataframe(df, levels, value_column, color_columns=None):
+    """
+    Build a hierarchy of levels for Sunburst or Treemap charts.
+
+    Levels are given starting from the bottom to the top of the hierarchy,
+    ie the last level corresponds to the root.
+    """
+    df_list = []
+    for i, level in enumerate(levels):
+        df_tree = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
+        dfg = df.groupby(levels[i:]).sum()
+        dfg = dfg.reset_index()
+        df_tree['id'] = dfg[level].copy()
+        if i < len(levels) - 1:
+            df_tree['parent'] = dfg[levels[i+1]].copy()
+        else:
+            df_tree['parent'] = 'total'
+        df_tree['value'] = dfg[value_column]
+        df_tree['color'] = dfg[color_columns[0]] / dfg[color_columns[1]]
+        df_list.append(df_tree)
+    total = pd.Series(dict(id='total', parent='',
+                              value=df[value_column].sum(),
+                              color=df[color_columns[0]].sum() / df[color_columns[1]].sum()), name=0)
+    df_list.append(total)
+    df_all_trees = pd.concat(df_list, ignore_index=True)
+    return df_all_trees
+
+
+df_all_trees = build_hierarchical_dataframe(df, levels, value_column, color_columns)
+average_score = df['sales'].sum() / df['calls'].sum()
+
+fig = make_subplots(1, 2, specs=[[{"type": "domain"}, {"type": "domain"}]],)
+
+fig.add_trace(go.Sunburst(
+    labels=df_all_trees['id'],
+    parents=df_all_trees['parent'],
+    values=df_all_trees['value'],
+    branchvalues='total',
+    marker=dict(
+        colors=df_all_trees['color'],
+        colorscale='RdBu',
+        cmid=average_score),
+    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
+    name=''
+    ), 1, 1)
+
+fig.add_trace(go.Sunburst(
+    labels=df_all_trees['id'],
+    parents=df_all_trees['parent'],
+    values=df_all_trees['value'],
+    branchvalues='total',
+    marker=dict(
+        colors=df_all_trees['color'],
+        colorscale='RdBu',
+        cmid=average_score),
+    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
+    maxdepth=2
+    ), 1, 2)
+
+fig.update_layout(margin=dict(t=10, b=10, r=10, l=10))
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.sunburst()`](https://plotly.com/python-api-reference/generated/plotly.express.sunburst) or https://plotly.com/python/reference/sunburst/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/supported-colors.md plotly-7.1.0+dfsg1/doc/python/supported-colors.md
--- plotly-5.20.0+dfsg/doc/python/supported-colors.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/supported-colors.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,159 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.17.0
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.13.2
+  plotly:
+    description: A list of supported named CSS Colors
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Supported CSS Colors
+    order: 42
+    page_type: example_index
+    permalink: python/css-colors/
+    thumbnail: thumbnail/shape.jpg
+---
+
+# Supported CSS Colors
+
+Many properties in Plotly.py for configuring colors support named CSS colors. For example, marker colors:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure([
+    go.Bar(
+        x=['Jan', 'Feb', 'Mar', 'Apr'],
+        y=[20, 14, 25, 16],
+        name='Primary Product',
+        # Named CSS color
+        marker_color='royalblue'
+    )
+])
+
+fig.show()
+```
+
+These colors are supported in Plotly.py when a property accepts a [named CSS color](https://developer.mozilla.org/en-US/docs/Web/CSS/named-color).
+
+```python hide_code=true
+import plotly.graph_objects as go
+import pandas as pd
+
+supported_colors = ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure",
+            "beige", "bisque", "black", "blanchedalmond", "blue",
+            "blueviolet", "brown", "burlywood", "cadetblue",
+            "chartreuse", "chocolate", "coral", "cornflowerblue",
+            "cornsilk", "crimson", "cyan", "darkblue", "darkcyan",
+            "darkgoldenrod", "darkgray", "darkgrey", "darkgreen",
+            "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange",
+            "darkorchid", "darkred", "darksalmon", "darkseagreen",
+            "darkslateblue", "darkslategray", "darkslategrey",
+            "darkturquoise", "darkviolet", "deeppink", "deepskyblue",
+            "dimgray", "dimgrey", "dodgerblue", "firebrick",
+            "floralwhite", "forestgreen", "fuchsia", "gainsboro",
+            "ghostwhite", "gold", "goldenrod", "gray", "grey", "green",
+            "greenyellow", "honeydew", "hotpink", "indianred", "indigo",
+            "ivory", "khaki", "lavender", "lavenderblush", "lawngreen",
+            "lemonchiffon", "lightblue", "lightcoral", "lightcyan",
+            "lightgoldenrodyellow", "lightgray", "lightgrey",
+            "lightgreen", "lightpink", "lightsalmon", "lightseagreen",
+            "lightskyblue", "lightslategray", "lightslategrey",
+            "lightsteelblue", "lightyellow", "lime", "limegreen",
+            "linen", "magenta", "maroon", "mediumaquamarine",
+            "mediumblue", "mediumorchid", "mediumpurple",
+            "mediumseagreen", "mediumslateblue", "mediumspringgreen",
+            "mediumturquoise", "mediumvioletred", "midnightblue",
+            "mintcream", "mistyrose", "moccasin", "navajowhite", "navy",
+            "oldlace", "olive", "olivedrab", "orange", "orangered",
+            "orchid", "palegoldenrod", "palegreen", "paleturquoise",
+            "palevioletred", "papayawhip", "peachpuff", "peru", "pink",
+            "plum", "powderblue", "purple", "red", "rosybrown",
+            "royalblue", "rebeccapurple", "saddlebrown", "salmon",
+            "sandybrown", "seagreen", "seashell", "sienna", "silver",
+            "skyblue", "slateblue", "slategray", "slategrey", "snow",
+            "springgreen", "steelblue", "tan", "teal", "thistle", "tomato",
+            "turquoise", "violet", "wheat", "white", "whitesmoke",
+            "yellow", "yellowgreen"]
+
+fig = go.Figure(layout=dict(title="Supported Named CSS Colors"))
+
+for i, color in enumerate(supported_colors):
+    row, col = i // 5, i % 5
+    x0, y0 = col * 1.2, -row * 1.2
+
+    fig.add_shape(
+        type="rect",
+        x0=x0, y0=y0,
+        x1=x0+1, y1=y0+1,
+        fillcolor=color,
+        line=dict(color="black", width=0.2),
+    )
+
+    fig.add_annotation(
+        x=x0+0.5, y=y0-0.1,
+        text=color,
+        showarrow=False,
+        font=dict(size=10)
+    )
+
+fig.update_layout(
+    height=((len(supported_colors) // 5) + (1 if len(supported_colors) % 5 else 0)) * 120,
+    width=800,
+    showlegend=False,
+    plot_bgcolor='rgba(0,0,0,0)',
+    margin=dict(l=50, r=50, t=50, b=50),
+    xaxis=dict(
+        showgrid=False,
+        zeroline=False,
+        showticklabels=False,
+        range=[-0.5, 6]
+    ),
+    yaxis=dict(
+        showgrid=False,
+        zeroline=False,
+        showticklabels=False,
+        scaleanchor="x",
+        scaleratio=1,
+        range=[-((len(supported_colors) // 5) + 1) * 1.2, 1.5]
+    )
+)
+
+fig.show()
+```
+
+## Other Color Formats
+
+*Changed in 7.0*
+
+As well as named colors, color properties accept color strings in the formats defined by the [CSS Color 4 specification](https://www.w3.org/TR/css-color-4/), including `rgb()`, `rgba()`, `hsl()`, `hsla()`, `hwb()`, `lab()`, `lch()`, `oklab()`, `oklch()`, `color()`, and hexadecimal notation with a leading `#`.
+
+Version 7 parses these strings according to that specification. Four formats that earlier versions accepted no longer give the same result. A string that cannot be parsed at all falls back to the property's default:
+
+| No longer works | Example | Use instead |
+|---|---|---|
+| The `hsv()` color function | `"hsv(200, 80%, 80%)"` | `"hsl(200, 67%, 47%)"`, `"hwb()"`, hexadecimal, or `"rgb()"` |
+| Comma separated saturation and lightness values without percent units | `"hsl(0, 100, 40)"` | `"hsl(0, 100%, 40%)"`, or the space separated `"hsl(0 100 40)"` |
+| Channel values given as fractions of 1 | `"rgb(0.5, 0.5, 0.5)"` (now renders as near black) | `"rgb(128, 128, 128)"` |
+| Hexadecimal values without a leading `#` | `"fff"` | `"#fff"` |
+
+These rules apply to color strings only. Numeric arrays used with a [colorscale](/python/colorscales/) are unaffected.
diff -Nru plotly-5.20.0+dfsg/doc/python/table-subplots.md plotly-7.1.0+dfsg1/doc/python/table-subplots.md
--- plotly-5.20.0+dfsg/doc/python/table-subplots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/table-subplots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,107 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.6
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to create a subplot with tables and charts in Python with Plotly.
+    display_as: multiple_axes
+    language: python
+    layout: base
+    name: Table and Chart Subplots
+    order: 3
+    page_type: example_index
+    permalink: python/table-subplots/
+    thumbnail: thumbnail/table_subplots.jpg
+---
+
+#### Import CSV Data
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+import pandas as pd
+import re
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/Mining-BTC-180.csv")
+
+for i, row in enumerate(df["Date"]):
+    p = re.compile(" 00:00:00")
+    datetime = p.split(df["Date"][i])[0]
+    df.iloc[i, 1] = datetime
+
+fig = make_subplots(
+    rows=3, cols=1,
+    shared_xaxes=True,
+    vertical_spacing=0.03,
+    specs=[[{"type": "table"}],
+           [{"type": "scatter"}],
+           [{"type": "scatter"}]]
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=df["Date"],
+        y=df["Mining-revenue-USD"],
+        mode="lines",
+        name="mining revenue"
+    ),
+    row=3, col=1
+)
+
+fig.add_trace(
+    go.Scatter(
+        x=df["Date"],
+        y=df["Hash-rate"],
+        mode="lines",
+        name="hash-rate-TH/s"
+    ),
+    row=2, col=1
+)
+
+fig.add_trace(
+    go.Table(
+        header=dict(
+            values=["Date", "Number<br>Transactions", "Output<br>Volume (BTC)",
+                    "Market<br>Price", "Hash<br>Rate", "Cost per<br>trans-USD",
+                    "Mining<br>Revenue-USD", "Trasaction<br>fees-BTC"],
+            font=dict(size=10),
+            align="left"
+        ),
+        cells=dict(
+            values=[df[k].tolist() for k in df.columns[1:]],
+            align = "left")
+    ),
+    row=1, col=1
+)
+fig.update_layout(
+    height=800,
+    showlegend=False,
+    title_text="Bitcoin mining stats for 180 days",
+)
+
+fig.show()
+```
+
+#### Reference
+See  https://plotly.com/python/reference/table/ for more information regarding chart attributes! <br>
+For examples of Plotly Tables, see: https://plotly.com/python/table/
diff -Nru plotly-5.20.0+dfsg/doc/python/table.md plotly-7.1.0+dfsg1/doc/python/table.md
--- plotly-5.20.0+dfsg/doc/python/table.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/table.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,240 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to make tables in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Tables
+    order: 11
+    page_type: u-guide
+    permalink: python/table/
+    thumbnail: thumbnail/table.gif
+---
+
+`go.Table` provides a Table object for detailed data viewing. The data are arranged in
+a grid of rows and columns. Most styling can be specified for header, columns, rows or individual cells. Table is using a column-major order, ie. the grid is represented as a vector of column vectors.
+
+Note that [Dash](https://dash.plotly.com/) provides a different type of [DataTable](https://dash.plotly.com/datatable).
+
+#### Basic Table
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Table(header=dict(values=['A Scores', 'B Scores']),
+                 cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]]))
+                     ])
+fig.show()
+```
+
+#### Styled Table
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(data=[go.Table(
+    header=dict(values=['A Scores', 'B Scores'],
+                line_color='darkslategray',
+                fill_color='lightskyblue',
+                align='left'),
+    cells=dict(values=[[100, 90, 80, 90], # 1st column
+                       [95, 85, 75, 95]], # 2nd column
+               line_color='darkslategray',
+               fill_color='lightcyan',
+               align='left'))
+])
+
+fig.update_layout(width=500, height=300)
+fig.show()
+```
+
+#### Use a Pandas Dataframe
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_usa_states.csv')
+
+fig = go.Figure(data=[go.Table(
+    header=dict(values=list(df.columns),
+                fill_color='paleturquoise',
+                align='left'),
+    cells=dict(values=[df.Rank, df.State, df.Postal, df.Population],
+               fill_color='lavender',
+               align='left'))
+])
+
+fig.show()
+```
+
+#### Tables in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'table', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Changing Row and Column Size
+
+```python
+import plotly.graph_objects as go
+
+values = [['Salaries', 'Office', 'Merchandise', 'Legal', '<b>TOTAL<br>EXPENSES</b>'], #1st col
+  ["Lorem ipsum dolor sit amet, tollit discere inermis pri ut. Eos ea iusto timeam, an prima laboramus vim. Id usu aeterno adversarium, summo mollis timeam vel ad",
+  "Lorem ipsum dolor sit amet, tollit discere inermis pri ut. Eos ea iusto timeam, an prima laboramus vim. Id usu aeterno adversarium, summo mollis timeam vel ad",
+  "Lorem ipsum dolor sit amet, tollit discere inermis pri ut. Eos ea iusto timeam, an prima laboramus vim. Id usu aeterno adversarium, summo mollis timeam vel ad",
+  "Lorem ipsum dolor sit amet, tollit discere inermis pri ut. Eos ea iusto timeam, an prima laboramus vim. Id usu aeterno adversarium, summo mollis timeam vel ad",
+  "Lorem ipsum dolor sit amet, tollit discere inermis pri ut. Eos ea iusto timeam, an prima laboramus vim. Id usu aeterno adversarium, summo mollis timeam vel ad"]]
+
+
+fig = go.Figure(data=[go.Table(
+  columnorder = [1,2],
+  columnwidth = [80,400],
+  header = dict(
+    values = [['<b>EXPENSES</b><br>as of July 2017'],
+                  ['<b>DESCRIPTION</b>']],
+    line_color='darkslategray',
+    fill_color='royalblue',
+    align=['left','center'],
+    font=dict(color='white', size=12),
+    height=40
+  ),
+  cells=dict(
+    values=values,
+    line_color='darkslategray',
+    fill=dict(color=['paleturquoise', 'white']),
+    align=['left', 'center'],
+    font_size=12,
+    height=30)
+    )
+])
+fig.show()
+```
+
+#### Alternating Row Colors
+
+```python
+import plotly.graph_objects as go
+
+headerColor = 'grey'
+rowEvenColor = 'lightgrey'
+rowOddColor = 'white'
+
+fig = go.Figure(data=[go.Table(
+  header=dict(
+    values=['<b>EXPENSES</b>','<b>Q1</b>','<b>Q2</b>','<b>Q3</b>','<b>Q4</b>'],
+    line_color='darkslategray',
+    fill_color=headerColor,
+    align=['left','center'],
+    font=dict(color='white', size=12)
+  ),
+  cells=dict(
+    values=[
+      ['Salaries', 'Office', 'Merchandise', 'Legal', '<b>TOTAL</b>'],
+      [1200000, 20000, 80000, 2000, 12120000],
+      [1300000, 20000, 70000, 2000, 130902000],
+      [1300000, 20000, 120000, 2000, 131222000],
+      [1400000, 20000, 90000, 2000, 14102000]],
+    line_color='darkslategray',
+    # 2-D list of colors for alternating rows
+    fill_color = [[rowOddColor,rowEvenColor,rowOddColor, rowEvenColor,rowOddColor]*5],
+    align = ['left', 'center'],
+    font = dict(color = 'darkslategray', size = 11)
+    ))
+])
+
+fig.show()
+```
+
+#### Row Color Based on Variable
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+colors = ['rgb(239, 243, 255)', 'rgb(189, 215, 231)', 'rgb(107, 174, 214)',
+          'rgb(49, 130, 189)', 'rgb(8, 81, 156)']
+data = {'Year' : [2010, 2011, 2012, 2013, 2014], 'Color' : colors}
+df = pd.DataFrame(data)
+
+fig = go.Figure(data=[go.Table(
+  header=dict(
+    values=["Color", "<b>YEAR</b>"],
+    line_color='white', fill_color='white',
+    align='center', font=dict(color='black', size=12)
+  ),
+  cells=dict(
+    values=[df.Color, df.Year],
+    line_color=[df.Color], fill_color=[df.Color],
+    align='center', font=dict(color='black', size=11)
+  ))
+])
+
+fig.show()
+```
+
+#### Cell Color Based on Variable
+
+```python
+import plotly.graph_objects as go
+from plotly.colors import n_colors
+import numpy as np
+np.random.seed(1)
+
+colors = n_colors('rgb(255, 200, 200)', 'rgb(200, 0, 0)', 9, colortype='rgb')
+a = np.random.randint(low=0, high=9, size=10)
+b = np.random.randint(low=0, high=9, size=10)
+c = np.random.randint(low=0, high=9, size=10)
+
+fig = go.Figure(data=[go.Table(
+  header=dict(
+    values=['<b>Column A</b>', '<b>Column B</b>', '<b>Column C</b>'],
+    line_color='white', fill_color='white',
+    align='center',font=dict(color='black', size=12)
+  ),
+  cells=dict(
+    values=[a, b, c],
+    line_color=[np.array(colors)[a],np.array(colors)[b], np.array(colors)[c]],
+    fill_color=[np.array(colors)[a],np.array(colors)[b], np.array(colors)[c]],
+    align='center', font=dict(color='white', size=11)
+    ))
+])
+
+fig.show()
+```
+
+#### Reference
+For more information on tables and table attributes see: https://plotly.com/python/reference/table/.
diff -Nru plotly-5.20.0+dfsg/doc/python/templates.md plotly-7.1.0+dfsg1/doc/python/templates.md
--- plotly-5.20.0+dfsg/doc/python/templates.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/templates.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,478 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.3.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: Theming and templates with plotly with Python
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Theming and templates
+    order: 7
+    page_type: u-guide
+    permalink: python/templates/
+    thumbnail: thumbnail/theming-and-templates.png
+---
+
+### Theming and templates
+
+The Plotly Python library comes pre-loaded with several themes that you can get started using right away, and it also provides support for creating and registering your own themes.
+
+> Note on terminology: Theming generally refers to the process of defining default styles for visual elements. Themes in plotly are implemented using objects called templates. Templates are slightly more general than traditional themes because in addition to defining default styles, templates can pre-populate a figure with visual elements like annotations, shapes, images, and more. In the documentation we will refer to the overall process of defining default styles as theming, and when it comes to the plotly API we will talk about how themes are implemented using templates.
+
+### Using built-in themes
+
+#### View available themes
+
+To see information about the available themes and the current default theme, display the `plotly.io.templates` configuration object like this.
+
+```python
+import plotly.io as pio
+pio.templates
+```
+
+From this, we can see that the default theme is `"plotly"`, and we can see the names of several additional themes that we can choose from.
+
+#### Specifying themes in Plotly Express
+
+All Plotly Express functions accept a `template` argument that can be set to the name of a registered theme (or to a `Template` object as discussed later in this section). Here is an example of using Plotly Express to build and display the same scatter plot with six different themes.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder()
+df_2007 = df.query("year==2007")
+
+for template in ["plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn", "simple_white", "none"]:
+    fig = px.scatter(df_2007,
+                     x="gdpPercap", y="lifeExp", size="pop", color="continent",
+                     log_x=True, size_max=60,
+                     template=template, title="Gapminder 2007: '%s' theme" % template)
+    fig.show()
+```
+
+#### Specifying themes in graph object figures
+
+The theme for a particular graph object figure can be specified by setting the `template` property of the figure's `layout` to the name of a registered theme (or to a `Template` object as discussed later in this section). Here is an example of constructing a surface plot and then displaying it with each of six themes.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+z_data = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv")
+
+fig = go.Figure(
+    data=go.Surface(z=z_data.values),
+    layout=go.Layout(
+        title=dict(text="Mt Bruno Elevation"),
+        width=500,
+        height=500,
+    ))
+
+for template in ["plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn", "simple_white", "none"]:
+    fig.update_layout(template=template, title=dict(text="Mt Bruno Elevation: '%s' theme" % template))
+    fig.show()
+```
+
+#### Specifying a default theme
+
+If a theme is not provided to a Plotly Express function or to a graph object figure, then the default theme is used. The default theme starts out as `"plotly"`, but it can be changed by setting the `plotly.io.templates.default` property to the name of a registered theme.
+
+Here is an example of changing to default theme to `"plotly_white"` and then constructing a scatter plot with Plotly Express without providing a template.
+
+> Note: Default themes persist for the duration of a single session, but they do not persist across sessions. If you are working in an IPython kernel, this means that default themes will persist for the life of the kernel, but they will not persist across kernel restarts.
+
+```python
+import plotly.io as pio
+import plotly.express as px
+
+pio.templates.default = "plotly_white"
+
+df = px.data.gapminder()
+df_2007 = df.query("year==2007")
+
+fig = px.scatter(df_2007,
+                 x="gdpPercap", y="lifeExp", size="pop", color="continent",
+                 log_x=True, size_max=60,
+                 title="Gapminder 2007: current default theme")
+fig.show()
+```
+
+#### Disable default theming
+
+If you do not wish to use any of the new themes by default, or you want your figures to look exactly the way they did prior to plotly.py version 4, you can disable default theming by setting the default theme to `"none"`.
+
+```python
+import plotly.io as pio
+pio.templates.default = "none"
+```
+
+### Creating themes
+
+#### Representing themes with Template objects
+
+Themes in plotly.py are represented by instances of the `Template` class from the `plotly.graph_objects.layout` module. A `Template` is a graph object that contains two top-level properties: `layout` and `data`. These template properties are described in their own sections below.
+
+#### The template layout property
+
+The `layout` property of a template is a graph object with the exact same structure as the `layout` property of a figure. When you provide values for properties of the template's `layout`, these values will be used as the defaults in any figure that this template is applied to.
+
+Here is an example that creates a template that sets the default title font to size 24 Rockwell, and then constructs a graph object figure with this template.
+
+```python
+import plotly.graph_objects as go
+
+large_rockwell_template = dict(
+    layout=go.Layout(title_font=dict(family="Rockwell", size=24))
+)
+
+fig = go.Figure()
+fig.update_layout(title=dict(text="Figure Title"),
+                  template=large_rockwell_template)
+fig.show()
+```
+
+> Note: this example uses magic underscore notation to write `go.Layout(title=dict(font=dict(...)))` as `go.Layout(title_font=dict(...))`
+
+#### The template data property
+
+The `data` property of a template is used to customize the default values of the properties of traces that are added to a figure that the template is applied to. This `data` property holds a graph object, with type `go.layout.template.Data`, that has a property named after each supported trace type. These trace type properties are then assigned lists or tuples of graph object traces of the corresponding type.
+
+Here is an example that creates a template that sets the default scatter trace markers to be size 20 diamonds, and then constructs a graph object figure with this template.
+
+```python
+import plotly.graph_objects as go
+
+diamond_template = go.layout.Template()
+diamond_template.data.scatter = [go.Scatter(marker=dict(symbol="diamond", size=20))]
+
+fig = go.Figure()
+fig.update_layout(template=diamond_template)
+fig.add_scatter(y=[2, 1, 3], mode="markers")
+fig.show()
+```
+
+If a trace type property is set to a list of more than one trace, then the default properties are cycled as more traces are added to the figure. Here is an example that creates a template that cycles the default marker symbol for scatter traces, and then constructs a figure that uses this template.
+
+```python
+import plotly.graph_objects as go
+
+symbol_template = go.layout.Template()
+symbol_template.data.scatter = [
+    go.Scatter(marker=dict(symbol="diamond", size=10)),
+    go.Scatter(marker=dict(symbol="square", size=10)),
+    go.Scatter(marker=dict(symbol="circle", size=10)),
+]
+
+fig = go.Figure()
+fig.update_layout(template=symbol_template)
+fig.add_scatter(y=[1, 2, 3], mode="markers", name="first")
+fig.add_scatter(y=[2, 3, 4], mode="markers", name="second")
+fig.add_scatter(y=[3, 4, 5], mode="markers", name="third")
+fig.add_scatter(y=[4, 5, 6], mode="markers", name="forth")
+fig.show()
+```
+
+Note that because we built the template with a list of 3 scatter trace [graph objects](/python/graph-objects/) (one each for the diamond, square, and circle symbols), the forth scatter trace in the figure cycles around and takes on the defaults specified in the first template trace (The diamond symbol).
+
+#### Theming object tuple properties
+
+Some properties in the figure hierarchy are specified as tuples of objects. For example, the text annotations for a graph object figure can be stored as a tuple of `go.layout.Annotation` objects in the `annotations` property of the figure's layout.
+
+To use a template to configure the default properties of all of the elements in an object tuple property (e.g. `layout.annotations`), use the `*defaults` property in the template that corresponds to the tuple property (e.g. `layout.template.layout.annotationdefaults`). The `*defaults` template property should be set to a single graph object that matches the type of the elements of the corresponding tuple. The properties of this `*defaults` object in the template will be applied to all elements of the object tuple in the figure that the template is applied to.
+
+Here is an example that creates a template that specifies the default annotation text color, and then constructs a figure that uses this template.
+
+```python
+import plotly.graph_objects as go
+
+annotation_template = go.layout.Template()
+annotation_template.layout.annotationdefaults = dict(font=dict(color="crimson"))
+
+fig = go.Figure()
+fig.update_layout(
+     template=annotation_template,
+     annotations=[
+         dict(text="Look Here", x=1, y=1),
+         dict(text="Look There", x=2, y=2)
+     ]
+ )
+fig.show()
+```
+
+#### Including tuple elements in a theme
+
+The previous section described how to use a template to customize the default properties of tuple elements that are added to a figure that the template is applied to. This is useful for styling, for example, any annotations, shapes, or images that will eventually be added to the figure.
+
+It is also possible for a template to define tuple elements that should be included, as is, in any figure that the template is applied to. This is done by specifying a list of one or more tuple element graph objects (e.g. `go.layout.Annotation` objects) as the value of the corresponding tuple property in the template (e.g. at `template.layout.annotations`). Note that the `name` property of these tuple element graph objects must be set to a unique non-empty string.
+
+Here is an example that creates a template that adds a large semi-transparent "DRAFT" watermark to the middle of the figure, and constructs a figure using this template.
+
+```python
+import plotly.graph_objects as go
+
+draft_template = go.layout.Template()
+draft_template.layout.annotations = [
+    dict(
+        name="draft watermark",
+        text="DRAFT",
+        textangle=-30,
+        opacity=0.1,
+        font=dict(color="black", size=100),
+        xref="paper",
+        yref="paper",
+        x=0.5,
+        y=0.5,
+        showarrow=False,
+    )
+]
+
+fig=go.Figure()
+fig.update_layout(template=draft_template)
+fig.show()
+```
+
+#### Customizing theme tuple elements in a figure
+
+The previous section described how a template can be used to add default tuple element graph objects (e.g. annotations, shapes, or images) to a figure. The properties of these default tuple elements can be customized from within the figure by adding an tuple element with a `templateitemname` property that matches the `name` property of the template object.
+
+Here is an example, using the same `draft_template` defined above, that customizes the watermark from within the figure to read "CONFIDENTIAL" rather than "DRAFT".
+
+```python
+import plotly.graph_objects as go
+
+draft_template = go.layout.Template()
+draft_template.layout.annotations = [
+    dict(
+        name="draft watermark",
+        text="DRAFT",
+        textangle=-30,
+        opacity=0.1,
+        font=dict(color="black", size=100),
+        xref="paper",
+        yref="paper",
+        x=0.5,
+        y=0.5,
+        showarrow=False,
+    )
+]
+
+fig = go.Figure()
+fig.update_layout(
+    template=draft_template,
+    annotations=[
+        dict(
+            templateitemname="draft watermark",
+            text="CONFIDENTIAL",
+        )
+    ]
+)
+fig.show()
+```
+
+#### Registering themes as named templates
+
+The examples above construct and configure a `Template` object and then pass that object as the template specification to graph object figures (as the `layout.template` property) or Plotly Express functions (as the `template` keyword argument). It is also possible to register custom templates by name so that the name itself can be used to refer to the template. To register a template, use dictionary-style assignment to associate the template object with a name in the `plotly.io.templates` configuration object.
+
+Here is an example of registering the draft watermark template from the previous sections as a template named `"draft"`. Then a graph object figure is created with the draft template specified by name.
+
+```python
+import plotly.graph_objects as go
+import plotly.io as pio
+
+pio.templates["draft"] = go.layout.Template(
+    layout_annotations=[
+        dict(
+            name="draft watermark",
+            text="DRAFT",
+            textangle=-30,
+            opacity=0.1,
+            font=dict(color="black", size=100),
+            xref="paper",
+            yref="paper",
+            x=0.5,
+            y=0.5,
+            showarrow=False,
+        )
+    ]
+)
+
+fig = go.Figure()
+fig.update_layout(template="draft")
+fig.show()
+```
+
+> Note: this example uses magic underscore notation to write `go.layout.Template(layout=dict(annotations=[...]))` as ``go.layout.Template(layout_annotations=[...])`
+
+It is also possible to set your own custom template as the default so that you do not need to pass it by name when constructing graph object figures or calling Plotly Express functions.
+
+```python
+import plotly.graph_objects as go
+import plotly.io as pio
+
+pio.templates["draft"] = go.layout.Template(
+    layout_annotations=[
+        dict(
+            name="draft watermark",
+            text="DRAFT",
+            textangle=-30,
+            opacity=0.1,
+            font=dict(color="black", size=100),
+            xref="paper",
+            yref="paper",
+            x=0.5,
+            y=0.5,
+            showarrow=False,
+        )
+    ]
+)
+pio.templates.default = "draft"
+
+fig = go.Figure()
+fig.show()
+```
+
+#### Combining themes
+
+You may have noticed that figures displayed with the custom templates defined above do not have the gray background and white gridlines that are part of the default styling of figures created with plotly.py. The reason for this is that the default styling is specified in a template named `"plotly"`, and specifying a custom template overrides the default `"plotly"` template.
+
+If you want the styling of a custom template to be applied on top of the default styling of the `"plotly"` template, then you will need to combine the custom template with the `"plotly"` template. Multiple registered templates (whether built-in or user-defined) can be combined by specifying a template string that contains multiple template names joined on `"+"` characters.
+
+Here is an example of setting the default template to be a combination of the built-in `"plotly"` template and the custom `"draft"` template from the previous example.
+
+```python
+import plotly.graph_objects as go
+import plotly.io as pio
+
+pio.templates["draft"] = go.layout.Template(
+    layout_annotations=[
+        dict(
+            name="draft watermark",
+            text="DRAFT",
+            textangle=-30,
+            opacity=0.1,
+            font=dict(color="black", size=100),
+            xref="paper",
+            yref="paper",
+            x=0.5,
+            y=0.5,
+            showarrow=False,
+        )
+    ]
+)
+pio.templates.default = "plotly+draft"
+
+fig = go.Figure()
+fig.show()
+```
+
+Combining themes is also supported by Plotly Express
+
+```python
+import plotly.io as pio
+import plotly.graph_objects as go
+import plotly.express as px
+
+pio.templates["draft"] = go.layout.Template(
+    layout_annotations=[
+        dict(
+            name="draft watermark",
+            text="DRAFT",
+            textangle=-30,
+            opacity=0.1,
+            font=dict(color="black", size=100),
+            xref="paper",
+            yref="paper",
+            x=0.5,
+            y=0.5,
+            showarrow=False,
+        )
+    ]
+)
+pio.templates.default = "plotly+draft"
+
+df = px.data.gapminder()
+df_2007 = df.query("year==2007")
+
+fig = px.scatter(df_2007,
+                 x="gdpPercap", y="lifeExp", size="pop", color="continent",
+                 log_x=True, size_max=60,
+                 title="Gapminder 2007: current default theme")
+fig.show()
+```
+
+<!-- #region -->
+
+#### Saving and distributing custom themes
+
+The easiest way to save and distribute a custom template is to make a `*.py` file that creates and registers the template when it is imported. Here is an example of the contents of a file called `my_themes.py` that creates and registers the `"draft"` template when it is imported
+
+**my_themes.py**
+
+---
+
+```python
+import plotly.graph_objects as go
+import plotly.io as pio
+
+pio.templates["draft"] = go.layout.Template(
+    layout_annotations=[
+        dict(
+            name="draft watermark",
+            text="DRAFT",
+            textangle=-30,
+            opacity=0.1,
+            font=dict(color="black", size=100),
+            xref="paper",
+            yref="paper",
+            x=0.5,
+            y=0.5,
+            showarrow=False,
+        )
+    ]
+)
+```
+
+---
+
+To get access to the `"draft"` template, import the `my_themes` module.
+
+```python
+import my_themes
+import plotly.io as pio
+pio.templates.default = "draft"
+...
+```
+
+> Note: In order for the import to succeed, the `my_themes.py` file must be on Python's module search path. See https://docs.python.org/3/tutorial/modules.html#the-module-search-path for more information.
+
+<!-- #endregion -->
+
+#### Examining built-in themes
+
+It may be useful to examine the contents and structure of the built-in templates when creating your own custom templates. The `Template` graph object for a registered template can be loaded using dictionary-style key access on the `plotly.io.templates` configuration object. Here is an example of loading the `Template` graph object for the `"plotly"` template, and then displaying the value of the template's `layout` property.
+
+```python
+import plotly.io as pio
+plotly_template = pio.templates["plotly"]
+plotly_template.layout
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/ternary-contour.md plotly-7.1.0+dfsg1/doc/python/ternary-contour.md
--- plotly-5.20.0+dfsg/doc/python/ternary-contour.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ternary-contour.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,153 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make Ternary Contour Plots in Python with plotly
+    display_as: scientific
+    language: python
+    layout: base
+    name: Ternary contours
+    order: 18
+    page_type: u-guide
+    permalink: python/ternary-contour/
+    thumbnail: thumbnail/ternary-contour.jpg
+---
+
+## Ternary contour plots
+
+
+A ternary contour plots represents isovalue lines of a quantity defined inside a [ternary diagram](https://en.wikipedia.org/wiki/Ternary_plot), i.e. as a function of three variables which sum is constant. Coordinates of the ternary plot often correspond to concentrations of three species, and the quantity represented as contours is some property (e.g., physical, chemical, thermodynamical) varying with the composition.
+
+For ternary contour plots, use the [figure factory](/python/figure-factories/) called ``create_ternary_contour``. The figure factory interpolates between given data points in order to compute the contours.
+
+Below we represent an example from metallurgy, where the mixing enthalpy is represented as a contour plot for aluminum-copper-yttrium (Al-Cu-Y) alloys.
+
+#### Simple ternary contour plot with plotly
+
+```python
+import plotly.figure_factory as ff
+import numpy as np
+Al = np.array([0. , 0. , 0., 0., 1./3, 1./3, 1./3, 2./3, 2./3, 1.])
+Cu = np.array([0., 1./3, 2./3, 1., 0., 1./3, 2./3, 0., 1./3, 0.])
+Y = 1 - Al - Cu
+# synthetic data for mixing enthalpy
+# See https://pycalphad.org/docs/latest/examples/TernaryExamples.html
+enthalpy = (Al - 0.01) * Cu * (Al - 0.52) * (Cu - 0.48) * (Y - 1)**2
+fig = ff.create_ternary_contour(np.array([Al, Y, Cu]), enthalpy,
+                                pole_labels=['Al', 'Y', 'Cu'],
+                                interp_mode='cartesian')
+fig.show()
+```
+
+#### Customized ternary contour plot
+
+```python
+import plotly.figure_factory as ff
+import numpy as np
+Al = np.array([0. , 0. , 0., 0., 1./3, 1./3, 1./3, 2./3, 2./3, 1.])
+Cu = np.array([0., 1./3, 2./3, 1., 0., 1./3, 2./3, 0., 1./3, 0.])
+Y = 1 - Al - Cu
+# synthetic data for mixing enthalpy
+# See https://pycalphad.org/docs/latest/examples/TernaryExamples.html
+enthalpy = 2.e6 * (Al - 0.01) * Cu * (Al - 0.52) * (Cu - 0.48) * (Y - 1)**2 - 5000
+fig = ff.create_ternary_contour(np.array([Al, Y, Cu]), enthalpy,
+                                pole_labels=['Al', 'Y', 'Cu'],
+                                interp_mode='cartesian',
+                                ncontours=20,
+                                colorscale='Viridis',
+                                showscale=True,
+                                title=dict(
+                                  text='Mixing enthalpy of ternary alloy'
+                                ))
+fig.show()
+```
+
+#### Ternary contour plot with lines only
+
+```python
+import plotly.figure_factory as ff
+import numpy as np
+Al = np.array([0. , 0. , 0., 0., 1./3, 1./3, 1./3, 2./3, 2./3, 1.])
+Cu = np.array([0., 1./3, 2./3, 1., 0., 1./3, 2./3, 0., 1./3, 0.])
+Y = 1 - Al - Cu
+# synthetic data for mixing enthalpy
+# See https://pycalphad.org/docs/latest/examples/TernaryExamples.html
+enthalpy = 2.e6 * (Al - 0.01) * Cu * (Al - 0.52) * (Cu - 0.48) * (Y - 1)**2 - 5000
+fig = ff.create_ternary_contour(np.array([Al, Y, Cu]), enthalpy,
+                                pole_labels=['Al', 'Y', 'Cu'],
+                                interp_mode='cartesian',
+                                ncontours=20,
+                                coloring='lines')
+fig.show()
+```
+
+#### Ternary contour plot with data points
+
+With `showmarkers=True`, data points used to compute the contours are also displayed. They are best visualized for contour lines (no solid coloring). At the moment data points lying on the edges of the diagram are not displayed, this will be improved in future versions.
+
+```python
+import plotly.figure_factory as ff
+import numpy as np
+Al, Cu = np.mgrid[0:1:7j, 0:1:7j]
+Al, Cu = Al.ravel(), Cu.ravel()
+mask = Al + Cu <= 1
+Al, Cu = Al[mask], Cu[mask]
+Y = 1 - Al - Cu
+
+enthalpy = (Al - 0.5) * (Cu - 0.5) * (Y - 1)**2
+fig = ff.create_ternary_contour(np.array([Al, Y, Cu]), enthalpy,
+                                pole_labels=['Al', 'Y', 'Cu'],
+                                ncontours=20,
+                                coloring='lines',
+                                showmarkers=True)
+fig.show()
+```
+
+#### Interpolation mode
+
+Two modes are available in order to interpolate between data points: interpolation in Cartesian space (`interp_mode='cartesian'`) or interpolation using the [isometric log-ratio transformation](https://link.springer.com/article/10.1023/A:1023818214614) (see also [preprint](https://www.researchgate.net/profile/Leon_Parent2/post/What_is_the_best_approach_for_diagnosing_nutrient_disorders_and_formulating_fertilizer_recommendations/attachment/59d62a69c49f478072e9cf3f/AS%3A272541220835360%401441990298625/download/Egozcue+et+al+2003.pdf)),  `interp_mode='ilr'`. The `ilr` transformation preserves metrics in the [simplex](https://en.wikipedia.org/wiki/Simplex) but is not defined on its edges.
+
+```python
+a, b = np.mgrid[0:1:20j, 0:1:20j]
+mask = a + b <= 1
+a, b = a[mask], b[mask]
+coords = np.stack((a, b, 1 - a - b))
+value = np.sin(3.2 * np.pi * (a + b)) + np.sin(3 * np.pi * (a - b))
+fig = ff.create_ternary_contour(coords, value, ncontours=9)
+fig.show()
+```
+
+```python
+a, b = np.mgrid[0:1:20j, 0:1:20j]
+mask = a + b <= 1
+a, b = a[mask], b[mask]
+coords = np.stack((a, b, 1 - a - b))
+value = np.sin(3.2 * np.pi * (a + b)) + np.sin(3 * np.pi * (a - b))
+fig = ff.create_ternary_contour(coords, value, interp_mode='cartesian',
+                                ncontours=9)
+fig.show()
+```
+
+#### Reference
+
+For more info on `ff.create_ternary_contour()`, see the [full function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_ternary_contour.html)
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/ternary-plots.md plotly-7.1.0+dfsg1/doc/python/ternary-plots.md
--- plotly-5.20.0+dfsg/doc/python/ternary-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ternary-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,128 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: How to make Ternary plots in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Ternary Plots
+    order: 4
+    page_type: example_index
+    permalink: python/ternary-plots/
+    thumbnail: thumbnail/v4-migration.png
+---
+
+## Ternary Plots
+
+A ternary plot depicts the ratios of three variables as positions in an equilateral triangle.
+
+## Ternary scatter plot with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+Here we use `px.scatter_ternary` to visualize the three-way split between the three major candidates in a municipal election.
+
+```python
+import plotly.express as px
+df = px.data.election()
+fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron")
+fig.show()
+```
+
+We can scale and color the markers to produce a ternary bubble chart.
+
+```python
+import plotly.express as px
+df = px.data.election()
+fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron", hover_name="district",
+    color="winner", size="total", size_max=15,
+    color_discrete_map = {"Joly": "blue", "Bergeron": "green", "Coderre":"red"} )
+fig.show()
+```
+
+### Ternary scatter plot with Plotly Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+rawData = [
+    {'journalist':75,'developer':25,'designer':0,'label':'point 1'},
+    {'journalist':70,'developer':10,'designer':20,'label':'point 2'},
+    {'journalist':75,'developer':20,'designer':5,'label':'point 3'},
+    {'journalist':5,'developer':60,'designer':35,'label':'point 4'},
+    {'journalist':10,'developer':80,'designer':10,'label':'point 5'},
+    {'journalist':10,'developer':90,'designer':0,'label':'point 6'},
+    {'journalist':20,'developer':70,'designer':10,'label':'point 7'},
+    {'journalist':10,'developer':20,'designer':70,'label':'point 8'},
+    {'journalist':15,'developer':5,'designer':80,'label':'point 9'},
+    {'journalist':10,'developer':10,'designer':80,'label':'point 10'},
+    {'journalist':20,'developer':10,'designer':70,'label':'point 11'},
+];
+
+def makeAxis(title, tickangle):
+    return {
+      'title': {'text': title, 'font': { 'size': 20}},
+      'tickangle': tickangle,
+      'tickfont': { 'size': 15 },
+      'tickcolor': 'rgba(0,0,0,0)',
+      'ticklen': 5,
+      'showline': True,
+      'showgrid': True
+    }
+
+fig = go.Figure(go.Scatterternary({
+    'mode': 'markers',
+    'a': [i for i in map(lambda x: x['journalist'], rawData)],
+    'b': [i for i in map(lambda x: x['developer'], rawData)],
+    'c': [i for i in map(lambda x: x['designer'], rawData)],
+    'text': [i for i in map(lambda x: x['label'], rawData)],
+    'marker': {
+        'symbol': 100,
+        'color': '#DB7365',
+        'size': 14,
+        'line': { 'width': 2 }
+    }
+}))
+
+fig.update_layout({
+    'ternary': {
+        'sum': 100,
+        'aaxis': makeAxis('Journalist', 0),
+        'baxis': makeAxis('<br>Developer', 45),
+        'caxis': makeAxis('<br>Designer', -45)
+    },
+    'annotations': [{
+      'showarrow': False,
+      'text': 'Simple Ternary Plot with Markers',
+        'x': 0.5,
+        'y': 1.3,
+        'font': { 'size': 15 }
+    }]
+})
+
+fig.show()
+```
+
+#### Reference
+See [function reference for `px.(scatter_ternary)`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_ternary) or https://plotly.com/python/reference/scatterternary/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/ternary-scatter-contour.md plotly-7.1.0+dfsg1/doc/python/ternary-scatter-contour.md
--- plotly-5.20.0+dfsg/doc/python/ternary-scatter-contour.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/ternary-scatter-contour.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,155 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make a scatter plot overlaid on ternary contour in Python
+      with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Ternary Overlay
+    order: 8
+    page_type: u-guide
+    permalink: python/ternary-scatter-contour/
+    thumbnail: thumbnail/ternary-scatter-contour.jpg
+---
+
+#### Load and Process Data Files
+
+```python
+import json
+import pandas as pd
+
+contour_raw_data = pd.read_json('https://raw.githubusercontent.com/plotly/datasets/master/contour_data.json')
+scatter_raw_data = pd.read_json('https://raw.githubusercontent.com/plotly/datasets/master/scatter_data.json')
+
+scatter_data =  scatter_raw_data['Data']
+
+def clean_data(data_in):
+    """
+    Cleans data in a format which can be conveniently
+    used for drawing traces. Takes a dictionary as the
+    input, and returns a list in the following format:
+
+    input = {'key': ['a b c']}
+    output = [key, [a, b, c]]
+    """
+    key = list(data_in.keys())[0]
+    data_out = [key]
+    for i in data_in[key]:
+        data_out.append(list(map(float, i.split(' '))))
+
+    return data_out
+
+
+#Example:
+print(clean_data({'L1': ['.03 0.5 0.47','0.4 0.5 0.1']}))
+```
+
+#### Create Ternary Scatter Plot:
+
+```python
+import plotly.graph_objects as go
+
+a_list = []
+b_list = []
+c_list = []
+text = []
+
+for raw_data in scatter_data:
+    data = clean_data(raw_data)
+    text.append(data[0])
+    c_list.append(data[1][0])
+    a_list.append(data[1][1])
+    b_list.append(data[1][2])
+
+fig = go.Figure(go.Scatterternary(
+  text=text,
+  a=a_list,
+  b=b_list,
+  c=c_list,
+  mode='markers',
+  marker={'symbol': 100,
+          'color': 'green',
+          'size': 10},
+))
+
+fig.update_layout({
+    'title': 'Ternary Scatter Plot',
+    'ternary':
+        {
+        'sum':1,
+        'aaxis':{'title': 'X', 'min': 0.01, 'linewidth':2, 'ticks':'outside' },
+        'baxis':{'title': 'W', 'min': 0.01, 'linewidth':2, 'ticks':'outside' },
+        'caxis':{'title': 'S', 'min': 0.01, 'linewidth':2, 'ticks':'outside' }
+    },
+    'showlegend': False
+})
+
+fig.show()
+```
+
+#### Create Ternary Contour Plot:
+
+```python
+import plotly.graph_objects as go
+
+
+contour_dict = contour_raw_data['Data']
+
+# Defining a colormap:
+colors = ['#8dd3c7','#ffffb3','#bebada',
+          '#fb8072','#80b1d3','#fdb462',
+          '#b3de69','#fccde5','#d9d9d9',
+          '#bc80bd']
+colors_iterator = iter(colors)
+
+fig = go.Figure()
+
+for raw_data in contour_dict:
+    data = clean_data(raw_data)
+
+    a = [inner_data[0] for inner_data in data[1:]]
+    a.append(data[1][0]) # Closing the loop
+
+    b = [inner_data[1] for inner_data in data[1:]]
+    b.append(data[1][1]) # Closing the loop
+
+    c = [inner_data[2] for inner_data in data[1:]]
+    c.append(data[1][2]) # Closing the loop
+
+    fig.add_trace(go.Scatterternary(
+        text = data[0],
+        a=a, b=b, c=c, mode='lines',
+        line=dict(color='#444', shape='spline'),
+        fill='toself',
+        fillcolor = colors_iterator.__next__()
+    ))
+
+fig.update_layout(title = 'Ternary Contour Plot')
+fig.show()
+```
+
+```python
+
+```
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/text-and-annotations.md plotly-7.1.0+dfsg1/doc/python/text-and-annotations.md
--- plotly-5.20.0+dfsg/doc/python/text-and-annotations.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/text-and-annotations.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,923 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.14
+  plotly:
+    description: How to add text labels and annotations to plots in python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Text and Annotations
+    order: 23
+    permalink: python/text-and-annotations/
+    thumbnail: thumbnail/text-and-annotations.png
+---
+
+### Adding Text to Figures
+
+As a general rule, there are two ways to add text labels to figures:
+1. Certain trace types, notably in the `scatter` family (e.g. `scatter`, `scatter3d`, `scattergeo` etc), support a `text` attribute, and can be displayed with or without markers.
+2. Standalone text annotations can be added to figures using `fig.add_annotation()`, with or without arrows, and they can be positioned absolutely within the figure, or they can be positioned relative to the axes of 2d or 3d cartesian subplots i.e. in data coordinates.
+
+The differences between these two approaches are that:
+* Traces can optionally support hover labels and can appear in legends.
+* Text annotations can be positioned absolutely or relative to data coordinates in 2d/3d cartesian subplots only.
+* Traces cannot be positioned absolutely but can be positioned relative to data coordinates in any subplot type.
+* Traces also be used to [draw shapes](/python/shapes/), although there is a [shape equivalent to text annotations](/python/shapes/).
+
+
+### Text on scatter plots with Plotly Express
+
+Here is an example that creates a scatter plot with text labels using Plotly Express.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("year==2007 and continent=='Americas'")
+
+fig = px.scatter(df, x="gdpPercap", y="lifeExp", text="country", log_x=True, size_max=60)
+
+fig.update_traces(textposition='top center')
+
+fig.update_layout(
+    height=800,
+    title_text='GDP and Life Expectancy (Americas, 2007)'
+)
+
+fig.show()
+```
+
+### Text on scatter plots with Graph Objects
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2],
+    y=[1, 1, 1],
+    mode="lines+markers+text",
+    name="Lines, Markers and Text",
+    text=["Text A", "Text B", "Text C"],
+    textposition="top center"
+))
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2],
+    y=[2, 2, 2],
+    mode="markers+text",
+    name="Markers and Text",
+    text=["Text D", "Text E", "Text F"],
+    textposition="bottom center"
+))
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2],
+    y=[3, 3, 3],
+    mode="lines+text",
+    name="Lines and Text",
+    text=["Text G", "Text H", "Text I"],
+    textposition="bottom center"
+))
+
+fig.show()
+```
+
+### Text positioning in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'text-and-annotations', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Controlling Text Size with `uniformtext`
+
+For the [pie](/python/pie-charts), [bar](/python/bar-charts)-like, [sunburst](/python/sunburst-charts) and [treemap](/python/treemaps) traces, it is possible to force all the text labels to have the same size thanks to the `uniformtext` layout parameter. The `minsize` attribute sets the font size, and the `mode` attribute sets what happens for labels which cannot fit with the desired fontsize: either `hide` them or `show` them with overflow.
+
+
+Here is a bar chart with the default behavior which will scale down text to fit.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder(year=2007)
+fig = px.bar(df, x='continent', y='pop', color="lifeExp", text='country',
+             title="Default behavior: some text is tiny")
+fig.update_traces(textposition='inside')
+fig.show()
+```
+
+Here is the same figure with uniform text applied: the text for all bars is the same size, with a minimum size of 8. Any text at the minimum size which does not fit in the bar is hidden.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder(year=2007)
+fig = px.bar(df, x='continent', y='pop', color="lifeExp", text='country',
+             title="Uniform Text: min size is 8, hidden if can't fit")
+fig.update_traces(textposition='inside')
+fig.update_layout(uniformtext_minsize=8, uniformtext_mode='hide')
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Asia' and year == 2007")
+fig = px.pie(df, values='pop', names='country')
+fig.update_traces(textposition='inside')
+fig.update_layout(uniformtext_minsize=12, uniformtext_mode='hide')
+fig.show()
+```
+
+### Controlling Maximum Text Size
+
+The `textfont_size` parameter of the [pie](/python/pie-charts), [bar](/python/bar-charts)-like, [sunburst](/python/sunburst-charts) and [treemap](/python/treemaps) traces can be used to set the **maximum font size** used in the chart. Note that the `textfont` parameter sets the `insidetextfont` and `outsidetextfont` parameter, which can also be set independently.
+
+```python
+import plotly.express as px
+
+df = px.data.gapminder().query("continent == 'Asia' and year == 2007")
+fig = px.pie(df, values='pop', names='country')
+fig.update_traces(textposition='inside', textfont_size=14)
+fig.show()
+```
+
+### Text Annotations
+
+Annotations can be added to a figure using `fig.add_annotation()`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[0, 1, 3, 2, 4, 3, 4, 6, 5]
+))
+
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[0, 4, 5, 1, 2, 2, 3, 4, 2]
+))
+
+fig.add_annotation(x=2, y=5,
+            text="Text annotation with arrow",
+            showarrow=True,
+            arrowhead=1)
+fig.add_annotation(x=4, y=4,
+            text="Text annotation without arrow",
+            showarrow=False,
+            yshift=10)
+
+fig.update_layout(showlegend=False)
+
+fig.show()
+```
+
+#### Text Annotations with Log Axes
+
+If the `x` or `y` positions of an annotation reference a log axis, you need to provide that position as a `log10` value when adding the annotation. In this example, the `yaxis` is a log axis so we pass the `log10` value of `1000` to the annotation's `y` position.
+
+```python
+import plotly.graph_objects as go
+import math
+
+dates = [
+    "2024-01-01",
+    "2024-01-02",
+    "2024-01-03",
+    "2024-01-04",
+    "2024-01-05",
+    "2024-01-06",
+]
+y_values = [1, 30, 70, 100, 1000, 10000000]
+
+fig = go.Figure(
+    data=[go.Scatter(x=dates, y=y_values, mode="lines+markers")],
+    layout=go.Layout(
+        yaxis=dict(
+            type="log",
+        )
+    ),
+)
+
+fig.add_annotation(
+    x="2024-01-05",
+    y=math.log10(1000),
+    text="Log axis annotation",
+    showarrow=True,
+    xanchor="right",
+)
+
+fig.show()
+```
+
+### 3D Annotations
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter3d(
+    x=["2017-01-01", "2017-02-10", "2017-03-20"],
+    y=["A", "B", "C"],
+    z=[1, 1000, 100000],
+    name="z",
+))
+
+fig.update_layout(
+    scene=dict(
+        xaxis=dict(type="date"),
+        yaxis=dict(type="category"),
+        zaxis=dict(type="log"),
+        annotations=[
+        dict(
+            showarrow=False,
+            x="2017-01-01",
+            y="A",
+            z=0,
+            text="Point 1",
+            xanchor="left",
+            xshift=10,
+            opacity=0.7),
+        dict(
+            x="2017-02-10",
+            y="B",
+            z=4,
+            text="Point 2",
+            textangle=0,
+            ax=0,
+            ay=-75,
+            font=dict(
+                color="black",
+                size=12
+            ),
+            arrowcolor="black",
+            arrowsize=3,
+            arrowwidth=1,
+            arrowhead=1),
+        dict(
+            x="2017-03-20",
+            y="C",
+            z=5,
+            ax=50,
+            ay=0,
+            text="Point 3",
+            arrowhead=1,
+            xanchor="left",
+            yanchor="bottom"
+        )]
+    ),
+)
+
+fig.show()
+```
+
+### Font Color, Size, and Familiy
+
+Use `textfont` to specify a font `family`, `size`, or `color`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2],
+    y=[1, 1, 1],
+    mode="lines+markers+text",
+    name="Lines, Markers and Text",
+    text=["Text A", "Text B", "Text C"],
+    textposition="top right",
+    textfont=dict(
+        family="sans serif",
+        size=18,
+        color="crimson"
+    )
+))
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2],
+    y=[2, 2, 2],
+    mode="lines+markers+text",
+    name="Lines and Text",
+    text=["Text G", "Text H", "Text I"],
+    textposition="bottom center",
+    textfont=dict(
+        family="sans serif",
+        size=18,
+        color="LightSeaGreen"
+    )
+))
+
+fig.update_layout(showlegend=False)
+
+fig.show()
+```
+
+### Font Style, Variant, and Weight
+
+*New in 5.22*
+
+You can also configure a font's `variant`, `style`, and `weight` on `textfont`. Here, we configure an `italic` style on the first bar, `bold` weight on the second, and `small-caps` as the font variant on the third.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.medals_wide()
+
+fig = go.Figure(
+    data=[
+        go.Bar(
+            x=df.nation,
+            y=df.gold,
+            name="Gold",
+            marker=dict(color="Gold"),
+            text="Gold",
+            textfont=dict(style="italic"),
+        ),
+        go.Bar(
+            x=df.nation,
+            y=df.silver,
+            name="Silver",
+            marker=dict(color="MediumTurquoise"),
+            text="Silver",
+            textfont=dict(weight="bold"),
+        ),
+        go.Bar(
+            x=df.nation,
+            y=df.bronze,
+            name="Bronze",
+            marker=dict(color="LightGreen"),
+            text="Bronze",
+            textfont=dict(variant="small-caps"),
+        ),
+    ],
+    layout=dict(barcornerradius=15, showlegend=False),
+)
+
+fig.show()
+
+```
+
+## Numeric Font Weight
+
+*New in 5.23*
+
+In the previous example, we set a font `weight` using a keyword value. You can also set font `weight` using a numeric value.
+
+The font weights that are available depend on the font family that is set. If you set a font `weight` that isn't available for a particular font family, the weight will be rounded to the nearest available value.
+
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.medals_wide()
+
+fig = go.Figure(
+    data=[
+        go.Bar(
+            x=df.nation,
+            y=df.gold,
+            name="Gold",
+            marker=dict(color="Gold"),
+            text="Gold",
+            textfont=dict(weight=900, size=17),
+        ),
+        go.Bar(
+            x=df.nation,
+            y=df.silver,
+            name="Silver",
+            marker=dict(color="MediumTurquoise"),
+            text="Silver",
+            textfont=dict(size=17),
+        ),
+            go.Bar(
+            x=df.nation,
+            y=df.bronze,
+            name="Bronze",
+            marker=dict(color="LightGreen"),
+            text="Bronze",
+            textfont=dict(size=17),
+        ),
+    ],
+    layout=dict(barcornerradius=15, showlegend=False),
+)
+
+fig.show()
+```
+
+[scattergl](https://plotly.com/python/reference/scattergl) traces do not support all numeric font weights. When you specify a numeric font weight on `scattergl`, weights up to 500 are mapped to the keyword font weight "normal", while weights above 500 are mapped to "bold".
+
+
+## Text Case
+
+*New in 5.23*
+
+You can configure text case using the `textfont.textcase` property. In this example, we set `textfont.textcase="upper"` to transform the text on all bars to uppercase.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+
+grouped = df[df.year == 2007].loc[df[df.year == 2007].groupby('continent')['lifeExp'].idxmax()]
+
+fig = go.Figure(
+    data=go.Bar(
+        x=grouped['lifeExp'],
+        y=grouped['continent'],
+        text=grouped['country'],
+        orientation='h',
+        textfont=dict(
+            family="sans serif",
+            size=14,
+            # Here we set textcase to "upper.
+            # Set to lower" for lowercase text, or "word caps" to capitalize the first letter of each word
+            textcase="upper"
+
+        )
+    ),
+    layout=go.Layout(
+        title_text='Country with Highest Life Expectancy per Continent, 2007',
+        yaxis=dict(showticklabels=False)
+    )
+)
+
+fig.show()
+```
+
+## Text Lines
+
+*New in 5.23*
+
+You can add decoration lines to text using the `textfont.lineposition` property. This property accepts `"under"`, `"over"`, and `"through"`, or a combination of these separated by a `+`.
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+
+grouped = df[df.year == 2002].loc[df[df.year == 2002].groupby('continent')['lifeExp'].idxmax()]
+
+fig = go.Figure(
+    data=go.Bar(
+        x=grouped['lifeExp'],
+        y=grouped['continent'],
+        text=grouped['country'],
+        orientation='h',
+        marker_color='MediumSlateBlue',
+        textfont=dict(
+            lineposition="under" # combine different line positions with a "+" to add more than one: "under+over"
+        )
+    ),
+    layout=go.Layout(
+        title_text='Country with Highest Life Expectancy per Continent, 2002',
+        yaxis=dict(showticklabels=False)
+    )
+)
+
+fig.show()
+```
+
+## Text Shadow
+
+*New in 5.23*
+
+You can apply a shadow effect to text using the `textfont.shadow` property. This property accepts shadow specifications in the same format as the [text-shadow CSS property](https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow).
+
+```python
+import plotly.graph_objects as go
+from plotly import data
+
+df = data.gapminder()
+
+grouped = df[df.year == 1997].loc[df[df.year == 1997].groupby('continent')['lifeExp'].idxmax()]
+
+fig = go.Figure(
+    data=go.Bar(
+        x=grouped['lifeExp'],
+        y=grouped['continent'],
+        text=grouped['country'],
+        orientation='h',
+        textfont=dict(
+            shadow="1px 1px 2px pink"
+        )
+    ),
+    layout=go.Layout(
+        title_text='Country with Highest Life Expectancy per Continent, 1997',
+        yaxis=dict(showticklabels=False)
+    )
+)
+
+fig.show()
+```
+
+### Styling and Coloring Annotations
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[0, 1, 3, 2, 4, 3, 4, 6, 5]
+))
+
+fig.add_trace(go.Scatter(
+    x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+    y=[0, 4, 5, 1, 2, 2, 3, 4, 2]
+))
+
+fig.add_annotation(
+        x=2,
+        y=5,
+        xref="x",
+        yref="y",
+        text="max=5",
+        showarrow=True,
+        font=dict(
+            family="Courier New, monospace",
+            size=16,
+            color="#ffffff"
+            ),
+        align="center",
+        arrowhead=2,
+        arrowsize=1,
+        arrowwidth=2,
+        arrowcolor="#636363",
+        ax=20,
+        ay=-30,
+        bordercolor="#c7c7c7",
+        borderwidth=2,
+        borderpad=4,
+        bgcolor="#ff7f0e",
+        opacity=0.8
+        )
+
+fig.update_layout(showlegend=False)
+fig.show()
+```
+
+### Text Font as an Array - Styling Each Text Element
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Scattergeo(
+    lat=[45.5, 43.4, 49.13, 51.1, 53.34, 45.24, 44.64, 48.25, 49.89, 50.45],
+    lon=[-73.57, -79.24, -123.06, -114.1, -113.28, -75.43, -63.57, -123.21, -97.13,
+         -104.6],
+    marker={
+        "color": ["MidnightBlue", "IndianRed", "MediumPurple", "Orange", "Crimson",
+                  "LightSeaGreen", "RoyalBlue", "LightSalmon", "DarkOrange", "MediumSlateBlue"],
+        "line": {
+            "width": 1
+        },
+        "size": 10
+    },
+    mode="markers+text",
+    name="",
+    text=["Montreal", "Toronto", "Vancouver", "Calgary", "Edmonton", "Ottawa",
+          "Halifax",
+          "Victoria", "Winnipeg", "Regina"],
+    textfont={
+        "color": ["MidnightBlue", "IndianRed", "MediumPurple", "Gold", "Crimson",
+                  "LightSeaGreen",
+                  "RoyalBlue", "LightSalmon", "DarkOrange", "MediumSlateBlue"],
+        "family": ["Arial, sans-serif", "Balto, sans-serif", "Courier New, monospace",
+                   "Droid Sans, sans-serif", "Droid Serif, serif",
+                   "Droid Sans Mono, sans-serif",
+                   "Gravitas One, cursive", "Old Standard TT, serif",
+                   "Open Sans, sans-serif",
+                   "PT Sans Narrow, sans-serif", "Raleway, sans-serif",
+                   "Times New Roman, Times, serif"],
+        "size": [22, 21, 20, 19, 18, 17, 16, 15, 14, 13]
+    },
+    textposition=["top center", "middle left", "top center", "bottom center",
+                  "top right",
+                  "middle left", "bottom right", "bottom left", "top right",
+                  "top right"]
+))
+
+fig.update_layout(
+    title_text="Canadian cities",
+    geo=dict(
+        lataxis=dict(range=[40, 70]),
+        lonaxis=dict(range=[-130, -55]),
+        scope="north america"
+    )
+)
+
+fig.show()
+```
+
+### HTML Tags in Text
+
+The `text` attribute supports the following HTML tags: `<br>`,`<b>`,`<a>`, `<em>`, `<sup>` and `<span>`.
+In version 5.23 and later, `<s>` and `<u>`are also supported.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[
+        go.Scatter(
+            x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+            y=[0, 1, 3, 2, 4, 3, 4, 6, 5],
+            mode="lines+markers",
+            name="Series 1",
+        ),
+        go.Scatter(
+            x=[0, 1, 2, 3, 4, 5, 6, 7, 8],
+            y=[0, 4, 5, 1, 2, 2, 3, 4, 2],
+            mode="lines+markers",
+            name="Series 2",
+        ),
+    ],
+    layout=go.Layout(
+        annotations=[
+            dict(
+                x=2,
+                y=5,
+                text="Text annotation using <b>bolded text</b>, <i>italicized text</i>, <u>underlined text</u>, <br>and a new line",
+                showarrow=True,
+                arrowhead=1,
+            ),
+            dict(
+                x=4,
+                y=4,
+                text="Text annotation with <a href='https://dash.plotly.com'>a link</a>.",
+                showarrow=False,
+                yshift=10,
+            ),
+        ],
+        showlegend=False,
+    ),
+)
+
+fig.show()
+
+```
+
+### Positioning Text Annotations Absolutely
+
+By default, text annotations have `xref` and `yref` set to `"x"` and `"y"`, respectively, meaning that their x/y coordinates are with respect to the axes of the plot. This means that panning the plot will cause the annotations to move. Setting `xref` and/or `yref` to `"paper"` will cause the `x` and `y` attributes to be interpreted in [paper coordinates](/python/figure-structure/#positioning-with-paper-container-coordinates-or-axis-domain-coordinates).
+
+Try panning or zooming in the following figure:
+
+```python
+import plotly.express as px
+
+fig = px.scatter(x=[1, 2, 3], y=[1, 2, 3], title="Try panning or zooming!")
+
+fig.add_annotation(text="Absolutely-positioned annotation",
+                  xref="paper", yref="paper",
+                  x=0.3, y=0.3, showarrow=False)
+
+fig.show()
+```
+
+### Adding Annotations Referenced to an Axis
+
+To place annotations relative to the length or height of an axis, the string
+`' domain'` can be added after the axis reference in the `xref` or `yref` fields.
+For example:
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+
+df = px.data.wind()
+fig = px.scatter(df, y="frequency")
+
+# Set a custom domain to see how the ' domain' string changes the behaviour
+fig.update_layout(xaxis=dict(domain=[0, 0.5]), yaxis=dict(domain=[0.25, 0.75]))
+
+fig.add_annotation(
+    xref="x domain",
+    yref="y domain",
+    # The arrow head will be 25% along the x axis, starting from the left
+    x=0.25,
+    # The arrow head will be 40% along the y axis, starting from the bottom
+    y=0.4,
+    text="An annotation referencing the axes",
+    arrowhead=2,
+)
+
+fig.show()
+```
+
+### Specifying the Text's Position Absolutely
+
+The text coordinates / dimensions of the arrow can be specified absolutely, as
+long as they use exactly the same coordinate system as the arrowhead. For
+example:
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+
+df = px.data.wind()
+fig = px.scatter(df, y="frequency")
+
+fig.update_layout(xaxis=dict(domain=[0, 0.5]), yaxis=dict(domain=[0.25, 0.75]))
+fig.add_annotation(
+    xref="x domain",
+    yref="y",
+    x=0.75,
+    y=1,
+    text="An annotation whose text and arrowhead reference the axes and the data",
+    # If axref is exactly the same as xref, then the text's position is
+    # absolute and specified in the same coordinates as xref.
+    axref="x domain",
+    # The same is the case for yref and ayref, but here the coordinates are data
+    # coordinates
+    ayref="y",
+    ax=0.5,
+    ay=2,
+    arrowhead=2,
+)
+
+fig.show()
+```
+### Specifying Source Lines or Figure Notes on the Bottom of a Figure
+
+This example shows how to add a note about the data source or interpretation at the bottom of the figure. This example aligns the note in the bottom right corner using the title element and container coordinates and then uses an annotation to add a figure title. A near zero container coordinate is an easy and robust way to put text -- such as a source line or figure note -- at the bottom of a figure. It is easier to specify the bottom of the figure in container coordinates than using paper coordinates, since uncertainty about the size of legends and x-axis labels make the paper coordinate of the bottom of the figure uncertain. Making the y container coordinate very slightly positive avoids cutting off the descending strokes of letters like y, p, and q.  Only the title command supports container coordinates, so this example re-purposes the title element to insert the note and re-purposes an annotation element for the title. The top of the figure is typically less cluttered and more predictable than the bottom of the figure, so an annotation with its bottom at a paper y-coordinate slightly greater than 1 is a reasonable title location on many graphs.
+
+```python
+import plotly.express as px
+df = px.data.iris()
+
+fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
+                 size='petal_length', hover_data=['petal_width'])
+
+
+fig.update_layout(
+        title=dict(text="Note: this is the Plotly title element.",
+                 # keeping this title string short avoids getting the text cut off in small windows
+                 # if you need longer text, consider 1) embedding your graphic on a web page and
+                 # putting the note in the HTML to use the browser's automated word wrap,
+                 # 2) using this approach and also specifying a graph width that shows the whole title,
+                 # or 3) using <BR> tags to wrap the text onto multiple lines
+                yref="container",
+                y=0.005,
+                 # The "paper" x-coordinates lets us align this with either the right or left
+                 # edge of the plot region.
+                 # The code to align this flush with the right edge of the plot area is
+                 # predictable and simple.
+                 # Putting the title in the lower left corner, aligned with the left edge of the axis labeling would
+                 # require graph specific coordinate adjustments.
+                xref="paper",
+                xanchor="right",
+                x=1,
+                font=dict(size=12)),
+                plot_bgcolor="white",
+
+  # We move the legend out of the right margin so the right-aligned note is
+  # flush with the right most element of the graph.
+  # Here we put the legend in a corner of the graph region
+  # because it has consistent coordinates at all screen resolutions.
+  legend=dict(
+                yanchor="top",
+                y=1,
+                xanchor="right",
+                x=1,
+                borderwidth=1)
+                )
+
+# Insert a title by repurposing an annotation
+fig.add_annotation(
+    yref="paper",
+    yanchor="bottom",
+    y=1.025,  # y = 1 is the top of the plot area; the top is typically uncluttered, so placing
+              # the bottom of the title slightly above the graph region works on a wide variety of graphs
+            text="This title is a Plotly annotation",
+
+    # Center the title horizontally over the plot area
+    xref="paper",
+    xanchor="center",
+    x=0.5,
+
+    showarrow=False,
+    font=dict(size=18)
+    )
+
+fig.show()
+```
+
+
+### Customize Displayed Text with a Text Template
+
+To show an arbitrary text in your chart you can use [texttemplate](https://plotly.com/python/reference/pie/#pie-texttemplate), which is a template string used for rendering the information, and will override [textinfo](https://plotly.com/python/reference/treemap/#treemap-textinfo).
+This template string can include `variables` in %{variable} format, `numbers` in [d3-format's syntax](https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_forma), and `date` in [d3-time-format's syntax](https://github.com/d3/d3-time-format).
+`texttemplate` customizes the text that appears on your plot vs. [hovertemplate](https://plotly.com/python/reference/pie/#pie-hovertemplate) that customizes the tooltip text.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Pie(
+    values = [40000000, 20000000, 30000000, 10000000],
+    labels = ["Wages", "Operating expenses", "Cost of sales", "Insurance"],
+    texttemplate = "%{label}: %{value:$,s} <br>(%{percent})",
+    textposition = "inside"))
+
+fig.show()
+```
+
+### Customize Text Template
+
+The following example uses [textfont](https://plotly.com/python/reference/scatterternary/#scatterternary-textfont) to customize the added text.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatterternary(
+    a = [3, 2, 5],
+    b = [2, 5, 2],
+    c = [5, 2, 2],
+    mode = "markers+text",
+    text = ["A", "B", "C"],
+    texttemplate = "%{text}<br>(%{a:.2f}, %{b:.2f}, %{c:.2f})",
+    textposition = "bottom center",
+    textfont = {'family': "Times", 'size': [18, 21, 20], 'color': ["IndianRed", "MediumPurple", "DarkOrange"]}
+))
+
+fig.show()
+```
+
+### Set Date in Text Template
+
+The following example shows how to show date by setting [axis.type](https://plotly.com/python/reference/layout/yaxis/#layout-yaxis-type) in [funnel charts](https://plotly.com/python/funnel-charts/).
+As you can see [textinfo](https://plotly.com/python/reference/funnel/#funnel-textinfo) and [texttemplate](https://plotly.com/python/reference/funnel/#funnel-texttemplate) have the same functionality when you want to determine 'just' the trace information on the graph.
+
+```python
+from plotly import graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Funnel(
+    name = 'Montreal',
+    orientation = "h",
+    y = ["2018-01-01", "2018-07-01", "2019-01-01", "2020-01-01"],
+    x = [100, 60, 40, 20],
+    textposition = "inside",
+    texttemplate = "%{y| %a. %_d %b %Y}"))
+
+fig.add_trace(go.Funnel(
+    name = 'Vancouver',
+    orientation = "h",
+    y = ["2018-01-01", "2018-07-01", "2019-01-01", "2020-01-01"],
+    x = [90, 70, 50, 10],
+    textposition = "inside",
+    textinfo = "label"))
+
+fig.update_layout(yaxis = {'type': 'date'})
+
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/layout/annotations/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/tick-formatting.md plotly-7.1.0+dfsg1/doc/python/tick-formatting.md
--- plotly-5.20.0+dfsg/doc/python/tick-formatting.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/tick-formatting.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,214 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to format axes ticks in Python with Plotly.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Formatting Ticks
+    order: 13
+    permalink: python/tick-formatting/
+    thumbnail: thumbnail/tick-formatting.gif
+---
+
+#### Tickmode - Linear
+
+
+If `"linear"`, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick`
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+    y = [28.8, 28.5, 37, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9]
+))
+
+fig.update_layout(
+    xaxis = dict(
+        tickmode = 'linear',
+        tick0 = 0.5,
+        dtick = 0.75
+    )
+)
+
+fig.show()
+```
+
+#### Tickmode - Array
+
+
+If `"array"`, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+    y = [28.8, 28.5, 37, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9]
+))
+
+fig.update_layout(
+    xaxis = dict(
+        tickmode = 'array',
+        tickvals = [1, 3, 5, 7, 9, 11],
+        ticktext = ['One', 'Three', 'Five', 'Seven', 'Nine', 'Eleven']
+    )
+)
+
+fig.show()
+```
+
+### Dynamic tickmode in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'tick-formatting', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+#### Using Tickformat Attribute
+
+
+For more formatting types, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+    y = [28.8, 28.5, 37, 56.8, 69.7, 79.7, 78.5, 77.8, 74.1, 62.6, 45.3, 39.9]
+))
+
+fig.update_layout(yaxis_tickformat = '%')
+
+fig.show()
+```
+
+#### Using Tickformat Attribute - Date/Time
+
+
+For more date/time formatting types, see: https://github.com/d3/d3-time-format/blob/master/README.md
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(go.Scatter(
+    x = df['Date'],
+    y = df['AAPL.High'],
+))
+
+fig.update_layout(
+    title = 'Time Series with Custom Date-Time Format',
+    xaxis_tickformat = '%d %B (%a)<br>%Y'
+)
+
+fig.show()
+```
+
+#### Using Exponentformat Attribute
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scatter(
+    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+    y = [68000, 52000, 60000, 20000, 95000, 40000, 60000, 79000, 74000, 42000, 20000, 90000]
+))
+
+fig.update_layout(
+    yaxis = dict(
+        showexponent = 'all',
+        exponentformat = 'e'
+    )
+)
+
+fig.show()
+```
+
+#### Tickformatstops to customize for different zoom levels
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(go.Scatter(
+    x = df['Date'],
+    y = df['mavg']
+))
+
+fig.update_layout(
+    xaxis_tickformatstops = [
+        dict(dtickrange=[None, 1000], value="%H:%M:%S.%L ms"),
+        dict(dtickrange=[1000, 60000], value="%H:%M:%S s"),
+        dict(dtickrange=[60000, 3600000], value="%H:%M m"),
+        dict(dtickrange=[3600000, 86400000], value="%H:%M h"),
+        dict(dtickrange=[86400000, 604800000], value="%e. %b d"),
+        dict(dtickrange=[604800000, "M1"], value="%e. %b w"),
+        dict(dtickrange=["M1", "M12"], value="%b '%y M"),
+        dict(dtickrange=["M12", None], value="%Y Y")
+    ]
+)
+
+fig.show()
+```
+
+#### Placing ticks and gridlines between categories
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Bar(
+    x = ["apples", "oranges", "pears"],
+    y = [1, 2, 3]
+))
+
+fig.update_xaxes(
+    showgrid=True,
+    ticks="outside",
+    tickson="boundaries",
+    ticklen=20
+)
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/layout/xaxis/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/tile-county-choropleth.md plotly-7.1.0+dfsg1/doc/python/tile-county-choropleth.md
--- plotly-5.20.0+dfsg/doc/python/tile-county-choropleth.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/tile-county-choropleth.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,224 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make tile choropleth maps in Python with Plotly.
+    display_as: maps
+    language: python
+    layout: base
+    name: Tile Choropleth Maps
+    order: 2
+    page_type: example_index
+    permalink: python/tile-county-choropleth/
+    redirect_from: python/mapbox-county-choropleth/
+    thumbnail: thumbnail/mapbox-choropleth.png
+---
+
+A [Choropleth Map](https://en.wikipedia.org/wiki/Choropleth_map) is a map composed of colored polygons. It is used to represent spatial variations of a quantity. This page documents how to build **tile-map** choropleth maps, but you can also build [**outline** choropleth maps](/python/choropleth-maps).
+
+Below we show how to create Choropleth Maps using either Plotly Express' `px.choropleth_map` function or the lower-level `go.Choroplethmap` graph object.
+
+### Introduction: main parameters for choropleth tile maps
+
+Making choropleth maps requires two main types of input:
+
+1. GeoJSON-formatted geometry information where each feature has either an `id` field or some identifying value in `properties`.
+2. A list of values indexed by feature identifier.
+
+The GeoJSON data is passed to the `geojson` argument, and the data is passed into the `color` argument of `px.choropleth_map` (`z` if using `graph_objects`), in the same order as the IDs are passed into the `location` argument.
+
+**Note** the `geojson` attribute can also be the URL to a GeoJSON file, which can speed up map rendering in certain cases.
+
+#### GeoJSON with `feature.id`
+
+Here we load a GeoJSON file containing the geometry information for US counties, where `feature.id` is a [FIPS code](https://en.wikipedia.org/wiki/FIPS_county_code).
+
+```python
+from urllib.request import urlopen
+import json
+with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
+    counties = json.load(response)
+
+counties["features"][0]
+```
+
+#### Data indexed by `id`
+
+Here we load unemployment data by county, also indexed by [FIPS code](https://en.wikipedia.org/wiki/FIPS_county_code).
+
+```python
+import pandas as pd
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
+                   dtype={"fips": str})
+df.head()
+```
+
+### Choropleth map using plotly.express and carto base map
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.choropleth_map`, each row of the DataFrame is represented as a region of the choropleth.
+
+```python
+from urllib.request import urlopen
+import json
+with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
+    counties = json.load(response)
+
+import pandas as pd
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
+                   dtype={"fips": str})
+
+import plotly.express as px
+
+fig = px.choropleth_map(df, geojson=counties, locations='fips', color='unemp',
+                           color_continuous_scale="Viridis",
+                           range_color=(0, 12),
+                           map_style="carto-positron",
+                           zoom=3, center = {"lat": 37.0902, "lon": -95.7129},
+                           opacity=0.5,
+                           labels={'unemp':'unemployment rate'}
+                          )
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Choropleth maps in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'map-county-choropleth', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Indexing by GeoJSON Properties
+
+If the GeoJSON you are using either does not have an `id` field or you wish to use one of the keys in the `properties` field, you may use the `featureidkey` parameter to specify where to match the values of `locations`.
+
+In the following GeoJSON object/data-file pairing, the values of `properties.district` match the values of the `district` column:
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+print(df["district"][2])
+print(geojson["features"][0]["properties"])
+```
+
+To use them together, we set `locations` to `district` and `featureidkey` to `"properties.district"`. The `color` is set to the number of votes by the candidate named Bergeron.
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+fig = px.choropleth_map(df, geojson=geojson, color="Bergeron",
+                           locations="district", featureidkey="properties.district",
+                           center={"lat": 45.5517, "lon": -73.7073},
+                           map_style="carto-positron", zoom=9)
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Discrete Colors
+
+In addition to [continuous colors](/python/colorscales/), we can [discretely-color](/python/discrete-color/) our choropleth maps by setting `color` to a non-numerical column, like the name of the winner of an election.
+
+```python
+import plotly.express as px
+
+df = px.data.election()
+geojson = px.data.election_geojson()
+
+fig = px.choropleth_map(df, geojson=geojson, color="winner",
+                           locations="district", featureidkey="properties.district",
+                           center={"lat": 45.5517, "lon": -73.7073},
+                           map_style="carto-positron", zoom=9)
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+### Using GeoPandas Data Frames
+
+`px.choropleth_map` accepts the `geometry` of a [GeoPandas](https://geopandas.org/) data frame as the input to `geojson` if the `geometry` contains polygons.
+
+```python
+import plotly.express as px
+import geopandas as gpd
+
+df = px.data.election()
+geo_df = gpd.GeoDataFrame.from_features(
+    px.data.election_geojson()["features"]
+).merge(df, on="district").set_index("district")
+
+fig = px.choropleth_map(geo_df,
+                           geojson=geo_df.geometry,
+                           locations=geo_df.index,
+                           color="Joly",
+                           center={"lat": 45.5517, "lon": -73.7073},
+                           map_style="open-street-map",
+                           zoom=8.5)
+fig.show()
+```
+
+### Choropleth map using plotly.graph_objects and carto base map
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Choroplethmap` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+from urllib.request import urlopen
+import json
+with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
+    counties = json.load(response)
+
+import pandas as pd
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
+                   dtype={"fips": str})
+
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Choroplethmap(geojson=counties, locations=df.fips, z=df.unemp,
+                                    colorscale="Viridis", zmin=0, zmax=12,
+                                    marker_opacity=0.5, marker_line_width=0))
+fig.update_layout(map_style="carto-positron",
+                  map_zoom=3, map_center = {"lat": 37.0902, "lon": -95.7129})
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+
+#### Reference
+
+See [function reference for `px.choropleth_map`](https://plotly.com/python-api-reference/generated/plotly.express.choropleth_map) or https://plotly.com/python/reference/choroplethmap/ for more information about the attributes available.
diff -Nru plotly-5.20.0+dfsg/doc/python/tile-map-layers.md plotly-7.1.0+dfsg1/doc/python/tile-map-layers.md
--- plotly-5.20.0+dfsg/doc/python/tile-map-layers.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/tile-map-layers.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,250 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.3
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.0
+  plotly:
+    description: How to make tile-based maps in Python with various base layers.
+    display_as: maps
+    language: python
+    layout: base
+    name: Tile Map Layers
+    order: 9
+    page_type: u-guide
+    permalink: python/tile-map-layers/
+    redirect_from: python/mapbox-layers/
+    thumbnail: thumbnail/mapbox-layers.png
+---
+
+<!-- #region -->
+
+## Tile Maps vs Outline Maps
+
+Plotly supports two different kinds of maps:
+
+- **[Tile-based maps](https://en.wikipedia.org/wiki/Tiled_web_map)**
+
+If your figure is created with a `px.scatter_map`, `px.line_map`, `px.choropleth_map`, or `px.density_map` function or otherwise contains one or more traces of type `go.Scattermap`, `go.Choroplethmap`, or `go.Densitymap`, the `layout.map` object in your figure contains configuration information for the map itself.
+
+- **Outline-based maps**
+
+Geo maps are outline-based maps. If your figure is created with a `px.scatter_geo`, `px.line_geo` or `px.choropleth` function or otherwise contains one or more traces of type `go.Scattergeo` or `go.Choropleth`, the `layout.geo` object in your figure contains configuration information for the map itself.
+
+> This page documents tile-based maps, and the [Geo map documentation](/python/map-configuration/) describes how to configure outline-based maps.
+
+## Tile Map Renderers
+
+Tile-based traces in Plotly use MapLibre.
+
+MapLibre-based traces (new in 5.24) are ones generated in Plotly Express using `px.scatter_map`, `px.line_map`, `px.choropleth_map`, `px.density_map`, or Graph Objects using `go.Scattermap`, `go.Choroplethmap`, or `go.Densitymap`.
+
+
+### MapLibre
+
+*New in 5.24*
+
+MapLibre-based tile maps have three different types of layers:
+
+- `layout.map.style` defines the lowest layers of the map, also known as the "base map".
+- The various traces in `data` are by default rendered above the base map (although this can be controlled via the `below` attribute).
+- `layout.map.layers` is an array that defines more layers that are by default rendered above the traces in `data` (although this can also be controlled via the `below` attribute).
+
+
+#### Base Maps in `layout.map.style`.
+
+The accepted values for `layout.map.style` are one of:
+
+- `"white-bg"`, which yields an empty white canvas which results in no external HTTP requests
+- `'carto-voyager'` (and `"basic"`, `"streets"`, and `"outdoors"`) which yields the [CARTO](https://github.com/cartodb/basemap-styles) Voyager basemap vector tiles
+- `"carto-voyager-nolabels"` which yields the same tiles as the above but without text labels
+- `"carto-positron"` (and `"light"`) which yields the [CARTO](https://github.com/cartodb/basemap-styles) Positron basemap vector tiles
+- `"carto-positron-nolabels"` which yields the same tiles as the above but without text labels
+- `"carto-darkmatter"` (and `"dark"`) which yields the [CARTO](https://github.com/cartodb/basemap-styles) Darkmatter basemap vector tiles
+- `"carto-darkmatter-nolabels"` which yields the same tiles as the above but without text labels
+- `"open-street-map"` which yields _raster_ tiles from [OpenStreetMap](https://wiki.openstreetmap.org/wiki/About_OpenStreetMap).
+- `"satellite"` and `"satellite-streets"` which yield [custom-styled](https://github.com/plotly/plotly.js/blob/master/src/plots/map/styles/) maps using raster tiles from [ESRI / ArcGIS](http://www.esri.com)
+
+- A custom style URL. For example: https://tiles.stadiamaps.com/styles/stamen_watercolor.json?api_key=YOUR-API-KEY
+
+- A Map Style object as defined at https://maplibre.org/maplibre-style-spec/
+
+Note: Style values beginning with `"stamen-"` are no longer supported following the [transition to MapLibre](/python/mapbox-to-maplibre/). The large number of aliases for `'carto-voyager'` are included for backwards-compatibility with previously-supported style values.
+
+
+#### OpenStreetMap tiles
+
+Here is a simple map rendered with OpenStreetMap tiles.
+<!-- #endregion -->
+
+```python
+import pandas as pd
+us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv")
+
+import plotly.express as px
+
+fig = px.scatter_map(us_cities, lat="lat", lon="lon", hover_name="City", hover_data=["State", "Population"],
+                        color_discrete_sequence=["fuchsia"], zoom=3, height=300)
+fig.update_layout(map_style="open-street-map")
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+#### Using `layout.map.layers` to Specify a Base Map
+
+If you have access to your own private tile servers, or wish to use a tile server not included in the list above, the recommended approach is to set `layout.map.style` to `"white-bg"` and to use `layout.map.layers` with `below` to specify a custom base map.
+
+> If you omit the `below` attribute when using this approach, your data will likely be hidden by fully-opaque raster tiles!
+
+#### Base Tiles from the USGS: no token needed
+
+Here is an example of a map which uses a public USGS imagery map, specified in `layout.map.layers`, and which is rendered _below_ the `data` layer.
+
+```python
+import pandas as pd
+us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv")
+
+import plotly.express as px
+
+fig = px.scatter_map(us_cities, lat="lat", lon="lon", hover_name="City", hover_data=["State", "Population"],
+                        color_discrete_sequence=["fuchsia"], zoom=3, height=300)
+fig.update_layout(
+    map_style="white-bg",
+    map_layers=[
+        {
+            "below": 'traces',
+            "sourcetype": "raster",
+            "sourceattribution": "United States Geological Survey",
+            "source": [
+                "https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}"
+            ]
+        }
+      ])
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+
+#### Base Tiles from the USGS, radar overlay from Environment Canada
+
+Here is the same example, with in addition, a WMS layer from Environment Canada which displays near-real-time radar imagery in partly-transparent raster tiles, rendered above the `go.Scattermap` trace, as is the default:
+
+
+```python
+import pandas as pd
+us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv")
+
+import plotly.express as px
+
+fig = px.scatter_map(us_cities, lat="lat", lon="lon", hover_name="City", hover_data=["State", "Population"],
+                        color_discrete_sequence=["fuchsia"], zoom=3, height=300)
+fig.update_layout(
+    map_style="white-bg",
+    map_layers=[
+        {
+            "below": 'traces',
+            "sourcetype": "raster",
+            "sourceattribution": "United States Geological Survey",
+            "source": [
+                "https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}"
+            ]
+        },
+        {
+            "sourcetype": "raster",
+            "sourceattribution": "Government of Canada",
+            "source": ["https://geo.weather.gc.ca/geomet/?"
+                       "SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX={bbox-epsg-3857}&CRS=EPSG:3857"
+                       "&WIDTH=1000&HEIGHT=1000&LAYERS=RADAR_1KM_RDBR&TILED=true&FORMAT=image/png"],
+        }
+      ])
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+
+#### Dark tiles example
+
+Here is a map rendered with the `"dark"` style.
+
+```python
+import pandas as pd
+us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv")
+
+import plotly.express as px
+
+fig = px.scatter_map(us_cities, lat="lat", lon="lon", hover_name="City", hover_data=["State", "Population"],
+                        color_discrete_sequence=["fuchsia"], zoom=3, height=300)
+fig.update_layout(map_style="dark")
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+
+<!-- #region -->
+#### Stamen Watercolor using a Custom Style URL
+
+Here's an example of using a custom style URL that points to the [Stadia Maps](https://docs.stadiamaps.com/map-styles/stamen-watercolor) service to use the `stamen_watercolor` base map.
+
+```python
+import pandas as pd
+quakes = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv')
+
+import plotly.graph_objects as go
+fig = go.Figure(go.Densitymap(lat=quakes.Latitude, lon=quakes.Longitude, z=quakes.Magnitude,
+                                 radius=10))
+fig.update_layout(map_style="https://tiles.stadiamaps.com/styles/stamen_watercolor.json?api_key=YOUR-API-KEY", map_center_lon=180)
+fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
+fig.show()
+```
+<!-- #endregion -->
+
+
+## Setting Map Bounds
+
+*New in 5.11*
+
+Set bounds for a map to specify an area outside which a user interacting with the map can't pan or zoom. Here we set a maximum longitude of `-180`, a minimum longitude of `-50`, a maximum latitude of `90`, and a minimum latitude of `20`.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+us_cities = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv"
+)
+
+fig = px.scatter_map(
+    us_cities,
+    lat="lat",
+    lon="lon",
+    hover_name="City",
+    hover_data=["State", "Population"],
+    color_discrete_sequence=["fuchsia"],
+    zoom=3,
+    height=300,
+)
+fig.update_layout(map_style="open-street-map")
+fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
+fig.update_layout(map_bounds={"west": -180, "east": -50, "south": 20, "north": 90})
+fig.show()
+```
+
+#### Reference
+
+See https://plotly.com/python/reference/layout/map/ for more information and options on MapLibre-based tile maps.
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/tile-scatter-maps.md plotly-7.1.0+dfsg1/doc/python/tile-scatter-maps.md
--- plotly-5.20.0+dfsg/doc/python/tile-scatter-maps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/tile-scatter-maps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,326 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.16
+  plotly:
+    description: How to make scatter plots on tile maps in Python.
+    display_as: maps
+    language: python
+    layout: base
+    name: Scatter Plots on Tile Maps
+    order: 10
+    page_type: u-guide
+    permalink: python/tile-scatter-maps/
+    redirect_from: python/scattermapbox/
+    thumbnail: thumbnail/scatter-mapbox.jpg
+---
+
+### Basic example with Plotly Express
+
+Here we show the [Plotly Express](/python/plotly-express/) function `px.scatter_map` for a scatter plot on a tile map.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.carshare()
+fig = px.scatter_map(df, lat="centroid_lat", lon="centroid_lon",     color="peak_hour", size="car_hours",
+                  color_continuous_scale=px.colors.cyclical.IceFire, size_max=15, zoom=10)
+fig.show()
+```
+
+### Basic Example with GeoPandas
+
+`px.scatter_map` can work well with [GeoPandas](https://geopandas.org/) dataframes whose `geometry` is of type `Point`.
+
+```python
+import plotly.express as px
+import geopandas as gpd
+
+geo_df = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
+
+fig = px.scatter_map(geo_df,
+                        lat=geo_df.geometry.y,
+                        lon=geo_df.geometry.x,
+                        hover_name="name",
+                        zoom=1)
+fig.show()
+```
+
+#### Basic Example
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+        lat=['45.5017'],
+        lon=['-73.5673'],
+        mode='markers',
+        marker=go.scattermap.Marker(
+            size=14
+        ),
+        text=['Montreal'],
+    ))
+
+fig.update_layout(
+    hovermode='closest',
+    map=dict(
+        bearing=0,
+        center=go.layout.map.Center(
+            lat=45,
+            lon=-73
+        ),
+        pitch=0,
+        zoom=5
+    )
+)
+
+fig.show()
+```
+
+#### Multiple Markers
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+        lat=['38.91427','38.91538','38.91458',
+             '38.92239','38.93222','38.90842',
+             '38.91931','38.93260','38.91368',
+             '38.88516','38.921894','38.93206',
+             '38.91275'],
+        lon=['-77.02827','-77.02013','-77.03155',
+             '-77.04227','-77.02854','-77.02419',
+             '-77.02518','-77.03304','-77.04509',
+             '-76.99656','-77.042438','-77.02821',
+             '-77.01239'],
+        mode='markers',
+        marker=go.scattermap.Marker(
+            size=9
+        ),
+        text=["The coffee bar","Bistro Bohem","Black Cat",
+             "Snap","Columbia Heights Coffee","Azi's Cafe",
+             "Blind Dog Cafe","Le Caprice","Filter",
+             "Peregrine","Tryst","The Coupe",
+             "Big Bear Cafe"],
+    ))
+
+fig.update_layout(
+    autosize=True,
+    hovermode='closest',
+    map=dict(
+        bearing=0,
+        center=dict(
+            lat=38.92,
+            lon=-77.07
+        ),
+        pitch=0,
+        zoom=10
+    ),
+)
+
+fig.show()
+```
+
+#### Nuclear Waste Sites on Campuses
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/Nuclear%20Waste%20Sites%20on%20American%20Campuses.csv')
+site_lat = df.lat
+site_lon = df.lon
+locations_name = df.text
+
+fig = go.Figure()
+
+fig.add_trace(go.Scattermap(
+        lat=site_lat,
+        lon=site_lon,
+        mode='markers',
+        marker=go.scattermap.Marker(
+            size=17,
+            color='rgb(255, 0, 0)',
+            opacity=0.7
+        ),
+        text=locations_name,
+        hoverinfo='text'
+    ))
+
+fig.add_trace(go.Scattermap(
+        lat=site_lat,
+        lon=site_lon,
+        mode='markers',
+        marker=go.scattermap.Marker(
+            size=8,
+            color='rgb(242, 177, 172)',
+            opacity=0.7
+        ),
+        hoverinfo='none'
+    ))
+
+fig.update_layout(
+    title=dict(text='Nuclear Waste Sites on Campus'),
+    autosize=True,
+    hovermode='closest',
+    showlegend=False,
+    map=dict(
+        bearing=0,
+        center=dict(
+            lat=38,
+            lon=-94
+        ),
+        pitch=0,
+        zoom=3,
+        style='light'
+    ),
+)
+
+fig.show()
+```
+
+### Set Marker Symbols
+
+You can define the symbol on your map by setting [`symbol`](https://plotly.com/python/reference/scattermap/#scattermap-marker-symbol) attribute.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    mode = "markers+text+lines",
+    lon = [-75, -80, -50], lat = [45, 20, -20],
+    marker = {'size': 20, 'symbol': ["bus", "harbor", "airport"]},
+    text = ["Bus", "Harbor", "airport"],textposition = "bottom right"))
+
+fig.update_layout(
+    map = {
+        'style': "outdoors", 'zoom': 0.7},
+    showlegend = False)
+
+fig.show()
+```
+
+#### Supported Symbols
+
+Plotly uses [Maki v2.1.0](https://app.unpkg.com/maki@2.1.0/files/icons) for symbols and supports the following values for `symbol`:
+
+"aerialway", "airfield", "airport", "alcohol-shop", "america-football",
+"amusement-park", "aquarium", "art-gallery", "attraction", "bakery",
+"bank", "bar", "baseball", "basketball", "beer", "bicycle", "bicycle-share",
+"blood-bank", "buddhism", "building", "bus", "cafe", "campsite", "car",
+"castle", "cemetery", "central-building", "cinema", "circle", "circle-stroked",
+"clothing-store", "college", "commercial", "cricket", "cross", "dam",
+"danger", "dentist", "doctor", "dog-park", "drinking-water", "embassy",
+"entrance", "farm", "fast-food", "ferry", "fire-station", "fuel", "gaming",
+"garden", "garden-center", "gift", "golf", "grocery", "hairdresser",
+"harbor", "heart", "heliport", "hospital", "ice-cream", "industry",
+"information", "karaoke", "landmark", "laundry", "library", "lighthouse",
+"lodging", "marker", "monument", "mountain", "museum", "music", "park",
+"parking", "parking-garage", "pharmacy", "picnic-site", "pitch",
+"place-of-worship", "playground", "police", "post", "prison", "rail",
+"rail-light", "rail-metro", "ranger-station", "religious-christian",
+"religious-jewish", "religious-muslim", "residential-community",
+"restaurant", "roadblock", "rocket", "school", "shelter", "shop",
+"skiing", "soccer", "square", "square-stroked", "stadium", "star",
+"star-stroked", "suitcase", "sushi", "swimming", "teahouse", "telephone",
+"tennis", "theatre", "toilet", "town-hall", "triangle", "triangle-stroked",
+"veterinary", "volcano", "warehouse", "waste-basket", "water", "wetland",
+"wheelchair", "zoo"
+
+
+#### Add Clusters
+
+*New in 5.11*
+
+Display clusters of data points by setting `cluster`. Here, we enable clusters with `enabled=True`. You can also enable clusters by setting other `cluster` properties. Other available properties include `color` (for setting the color of the clusters), `size` (for setting the size of a cluster step), and `step` (for configuring how many points it takes to create a cluster or advance to the next cluster step).
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv(
+    "https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv"
+)
+fig = px.scatter_map(df, lat="lat", lon="long", size="cnt", zoom=3)
+fig.update_traces(cluster=dict(enabled=True))
+fig.show()
+
+```
+
+#### Font Customization
+
+You can customize the font on `go.Scattermap` traces with `textfont`. For example, you can set the font `family`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    mode = "markers+text+lines",
+    lon = [-75, -80, -50], lat = [45, 20, -20],
+    marker = {'size': 20, 'symbol': ["bus", "harbor", "airport"]},
+    text = ["Bus", "Harbor", "airport"], textposition = "bottom right",
+    textfont = dict(size=18, color="black", family="Open Sans Bold")
+    ))
+
+fig.update_layout(
+    map = {
+        'style': "outdoors", 'zoom': 0.7},
+    showlegend = False,)
+
+fig.show()
+```
+
+`go.Scattermap` supports the following values for `textfont.family`:
+
+'Metropolis Black Italic', 'Metropolis Black', 'Metropolis Bold Italic', 'Metropolis Bold', 'Metropolis Extra Bold Italic', 'Metropolis Extra Bold', 'Metropolis Extra Light Italic', 'Metropolis Extra Light', 'Metropolis Light Italic', 'Metropolis Light', 'Metropolis Medium Italic', 'Metropolis Medium', 'Metropolis Regular Italic', 'Metropolis Regular', 'Metropolis Semi Bold Italic', 'Metropolis Semi Bold', 'Metropolis Thin Italic', 'Metropolis Thin', 'Open Sans Bold Italic', 'Open Sans Bold', 'Open Sans Extrabold Italic', 'Open Sans Extrabold', 'Open Sans Italic', 'Open Sans Light Italic', 'Open Sans Light', 'Open Sans Regular', 'Open Sans Semibold Italic', 'Open Sans Semibold', 'Klokantech Noto Sans Bold', 'Klokantech Noto Sans CJK Bold', 'Klokantech Noto Sans CJK Regular', 'Klokantech Noto Sans Italic', and 'Klokantech Noto Sans Regular'.
+
+
+##### Font Weight
+
+*New in 5.23*
+
+You can specify a numeric font weight on `go.Scattermap` with `textfont.weight`.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    mode = "markers+text+lines",
+    lon = [-75, -80, -50], lat = [45, 20, -20],
+    marker = dict(size=20, symbol=["bus", "harbor", "airport"]),
+    text = ["Bus", "Harbor", "airport"], textposition = "bottom right",
+    textfont = dict(size=18, color="black", weight=900)
+    ))
+
+fig.update_layout(
+    map = dict(
+        style="outdoors", zoom=0.7),
+    showlegend = False,)
+
+fig.show()
+```
+
+
+#### Reference
+
+See [function reference for `px.scatter_map`](https://plotly.com/python-api-reference/generated/plotly.express.scatter_map) or https://plotly.com/python/reference/scattermap/ for more information about the attributes available.
diff -Nru plotly-5.20.0+dfsg/doc/python/time-series.md plotly-7.1.0+dfsg1/doc/python/time-series.md
--- plotly-5.20.0+dfsg/doc/python/time-series.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/time-series.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,492 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.8.8
+  plotly:
+    description: How to plot date and time in python.
+    display_as: financial
+    language: python
+    layout: base
+    name: Time Series and Date Axes
+    order: 1
+    page_type: example_index
+    permalink: python/time-series/
+    thumbnail: thumbnail/time-series.jpg
+---
+
+### Time Series using Axes of type `date`
+
+Time series can be represented using either `plotly.express` functions (`px.line`, `px.scatter`, `px.bar` etc) or `plotly.graph_objects` charts objects (`go.Scatter`, `go.Bar` etc). For more examples of such charts, see the documentation of [line and scatter plots](https://plotly.com/python/line-and-scatter/) or [bar charts](/python/bar-charts/).
+
+For financial applications, Plotly can also be used to create [Candlestick charts](/python/candlestick-charts/) and [OHLC charts](/python/ohlc-charts/), which default to date axes.
+
+Plotly auto-sets the axis type to a date format when the corresponding data are either ISO-formatted date strings or if they're a [date pandas column](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html) or [datetime NumPy array](https://docs.scipy.org/doc/numpy/reference/arrays.datetime.html).
+
+```python
+# Using plotly.express
+import plotly.express as px
+
+df = px.data.stocks()
+fig = px.line(df, x='date', y="GOOG")
+fig.show()
+```
+
+```python
+# Using graph_objects
+import plotly.graph_objects as go
+
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure([go.Scatter(x=df['Date'], y=df['AAPL.High'])])
+fig.show()
+```
+
+### Time Series in Dash
+
+[Dash](https://plotly.com/dash/) is the best way to build analytical apps in Python using Plotly figures. To run the app below, run `pip install dash`, click "Download" to get the code and run `python app.py`.
+
+Get started  with [the official Dash docs](https://dash.plotly.com/installation) and **learn how to effortlessly [style](https://plotly.com/dash/design-kit/) & publish apps like this with <a class="plotly-red" href="https://plotly.com/dash/">Dash Enterprise</a> or <a class="plotly-red" href="https://plotly.com/cloud/">Plotly Cloud</a>.**
+
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'time-series', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### Different Chart Types on Date Axes
+
+Any kind of cartesian chart can be placed on `date` axes, for example this bar chart of relative stock ticker values.
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)-1
+fig = px.bar(df, x=df.index, y="GOOG")
+fig.show()
+```
+
+Or this [facetted](/python/facet-plots/) area plot:
+
+```python
+import plotly.express as px
+
+df = px.data.stocks(indexed=True)-1
+fig = px.area(df, facet_col="company", facet_col_wrap=2)
+fig.show()
+```
+
+### Configuring Tick Labels
+
+By default, the tick labels (and optional ticks) are associated with a specific grid-line, and represent an *instant* in time, for example, "00:00 on February 1, 2018". Tick labels can be formatted using the `tickformat` attribute (which accepts the [d3 time-format formatting strings](https://github.com/d3/d3-time-format)) to display only the month and year, but they still represent an instant by default, so in the figure below, the text of the label "Feb 2018" spans part of the month of January and part of the month of February. The `dtick` attribute controls the spacing between gridlines, and the `"M1"` setting means "1 month". This attribute also accepts a number of milliseconds, which can be scaled up to days by multiplying by `24*60*60*1000`.
+
+Date axis tick labels have the special property that any portion after the first instance of `'
'` in `tickformat` will appear on a second line only once per unique value, as with the year numbers in the example below. To have the year number appear on every tick label, `'<br>'` should be used instead of `'
'`.
+
+Note that by default, the formatting of values of X and Y values in the hover label matches that of the tick labels of the corresponding axes, so when customizing the tick labels to something broad like "month", it's usually necessary to [customize the hover label](/python/hover-text-and-formatting/) to something narrower like the actual date, as below.
+
+```python
+import plotly.express as px
+df = px.data.stocks()
+fig = px.line(df, x="date", y=df.columns,
+              hover_data={"date": "|%B %d, %Y"},
+              title='custom tick labels')
+fig.update_xaxes(
+    dtick="M1",
+    tickformat="%b
%Y")
+fig.show()
+```
+
+### Moving Tick Labels to the Middle of the Period
+
+_new in 4.10_
+
+By setting the `ticklabelmode` attribute to `"period"` (the default is `"instant"`) we can move the tick labels to the middle of the period they represent. The gridlines remain at the beginning of each month (thanks to `dtick="M1"`) but the labels now span the month they refer to.
+
+```python
+import plotly.express as px
+df = px.data.stocks()
+fig = px.line(df, x="date", y=df.columns,
+              hover_data={"date": "|%B %d, %Y"},
+              title='custom tick labels with ticklabelmode="period"')
+fig.update_xaxes(
+    dtick="M1",
+    tickformat="%b
%Y",
+    ticklabelmode="period")
+fig.show()
+```
+
+### Adding Minor Ticks
+
+_new in 5.8_
+
+You can add minor ticks to an axis with `minor`. This takes a `dict` of properties to apply to minor ticks. See the [figure reference](https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-minor) for full details on the accepted keys in this dict.
+
+In this example, we've added minor ticks to the inside of the x-axis and turned on minor grid lines.
+
+```python
+import pandas as pd
+import plotly.express as px
+
+df = px.data.stocks()
+fig = px.line(df, x='date', y="GOOG")
+
+fig.update_xaxes(minor=dict(ticks="inside", showgrid=True))
+
+fig.show()
+```
+
+#### Monthly Period Labels With Weekly Minor Ticks
+
+_new in 5.8_
+
+You can set `dtick` on `minor` to control the spacing for minor ticks and grid lines. In the following example, by setting `dtick=7*24*60*60*1000` (the number of milliseconds in a week) and setting `tick0="2016-07-03"` (the first Sunday in our data), a minor tick and grid line is displayed for the start of each week. When zoomed out, we can see where each month and week begins and ends.
+
+```python
+import pandas as pd
+import plotly.express as px
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+df = df.loc[(df["Date"] >= "2016-07-01") & (df["Date"] <= "2016-12-01")]
+
+fig = px.line(df, x='Date', y='AAPL.High')
+fig.update_xaxes(ticks= "outside",
+                 ticklabelmode= "period",
+                 tickcolor= "black",
+                 ticklen=10,
+                 minor=dict(
+                     ticklen=4,
+                     dtick=7*24*60*60*1000,
+                     tick0="2016-07-03",
+                     griddash='dot',
+                     gridcolor='white')
+                )
+
+fig.show()
+```
+
+### Summarizing Time-series Data with Histograms
+
+Plotly [histograms](/python/histograms/) are powerful data-aggregation tools which even work on date axes. In the figure below, we pass in daily data and display it as monthly averages by setting `histfunc="avg` and `xbins_size="M1"`.
+
+```python
+import plotly.express as px
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.histogram(df, x="Date", y="AAPL.Close", histfunc="avg", title="Histogram on Date Axes")
+fig.update_traces(xbins_size="M1")
+fig.update_xaxes(showgrid=True, ticklabelmode="period", dtick="M1", tickformat="%b
%Y")
+fig.update_layout(bargap=0.1)
+fig.add_trace(go.Scatter(mode="markers", x=df["Date"], y=df["AAPL.Close"], name="daily"))
+fig.show()
+```
+
+### Displaying Period Data
+
+_new in 4.11_
+
+If your data coded "January 1" or "January 31" in fact refers to data collected throughout the month of January, for example, you can configure your traces to display their marks at the start end, or middle of the month with the `xperiod` and `xperiodalignment` attributes. In the example below, the raw data is all coded with an X value of the 10th of the month, but is binned into monthly periods with `xperiod="M1"` and then displayed at the start, middle and end of the period.
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.DataFrame(dict(
+    date=["2020-01-10", "2020-02-10", "2020-03-10", "2020-04-10", "2020-05-10", "2020-06-10"],
+    value=[1,2,3,1,2,3]
+))
+
+fig = go.Figure()
+fig.add_trace(go.Scatter(
+    name="Raw Data",
+    mode="markers+lines", x=df["date"], y=df["value"],
+    marker_symbol="star"
+))
+fig.add_trace(go.Scatter(
+    name="Start-aligned",
+    mode="markers+lines", x=df["date"], y=df["value"],
+    xperiod="M1",
+    xperiodalignment="start"
+))
+fig.add_trace(go.Scatter(
+    name="Middle-aligned",
+    mode="markers+lines", x=df["date"], y=df["value"],
+    xperiod="M1",
+    xperiodalignment="middle"
+))
+fig.add_trace(go.Scatter(
+    name="End-aligned",
+    mode="markers+lines", x=df["date"], y=df["value"],
+    xperiod="M1",
+    xperiodalignment="end"
+))
+fig.add_trace(go.Bar(
+    name="Middle-aligned",
+    x=df["date"], y=df["value"],
+    xperiod="M1",
+    xperiodalignment="middle"
+))
+fig.update_xaxes(showgrid=True, ticklabelmode="period")
+fig.show()
+```
+
+### Hover Templates with Mixtures of Period data
+
+*New in v5.0*
+
+When displaying periodic data with mixed-sized periods (i.e. quarterly and monthly) in conjunction with [`x` or `x unified` hovermodes and using `hovertemplate`](https://plotly.com/python/hover-text-and-formatting/), the `xhoverformat` attribute can be used to control how each period's X value is displayed, and the special `%{xother}` hover-template directive can be used to control how the X value is displayed for points that do not share the exact X coordinate with the point that is being hovered on. `%{xother}` will return an empty string when the X value is the one being hovered on, otherwise it will return `(%{x})`. The special `%{_xother}`, `%{xother_}` and `%{_xother_}` variations will display with spaces before, after or around the parentheses, respectively.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Bar(
+    x=["2020-01-01", "2020-04-01", "2020-07-01"],
+    y=[1000, 1500, 1700],
+    xperiod="M3",
+    xperiodalignment="middle",
+    xhoverformat="Q%q",
+    hovertemplate="%{y}%{_xother}"
+))
+
+fig.add_trace(go.Scatter(
+    x=["2020-01-01", "2020-02-01", "2020-03-01",
+      "2020-04-01", "2020-05-01", "2020-06-01",
+      "2020-07-01", "2020-08-01", "2020-09-01"],
+    y=[1100,1050,1200,1300,1400,1700,1500,1400,1600],
+    xperiod="M1",
+    xperiodalignment="middle",
+    hovertemplate="%{y}%{_xother}"
+))
+
+fig.update_layout(hovermode="x unified")
+fig.show()
+```
+
+<!-- #region tags=[] -->
+### Time Series Plot with Custom Date Range
+
+The data range can be set manually using either `datetime.datetime` objects, or date strings.
+<!-- #endregion -->
+
+```python
+# Using plotly.express
+import plotly.express as px
+
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.line(df, x='Date', y='AAPL.High', range_x=['2016-07-01','2016-12-31'])
+fig.show()
+```
+
+```python
+# Using graph_objects
+
+import plotly.graph_objects as go
+import datetime
+
+x = [datetime.datetime(year=2013, month=10, day=4),
+     datetime.datetime(year=2013, month=11, day=5),
+     datetime.datetime(year=2013, month=12, day=6)]
+
+fig = go.Figure(data=[go.Scatter(x=x, y=[1, 3, 6])])
+# Use datetime objects to set xaxis range
+fig.update_layout(xaxis_range=[datetime.datetime(2013, 10, 17),
+                               datetime.datetime(2013, 11, 20)])
+fig.show()
+```
+
+```python
+import plotly.express as px
+import pandas as pd
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.line(df, x='Date', y='AAPL.High')
+
+# Use date string to set xaxis range
+fig.update_layout(xaxis_range=['2016-07-01','2016-12-31'],
+                  title_text="Manually Set Date Range")
+fig.show()
+```
+
+### Time Series With Range Slider
+
+A range slider is a small subplot-like area below a plot which allows users to pan and zoom the X-axis while maintaining an overview of the chart. Check out the reference for more options: https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-rangeslider
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.line(df, x='Date', y='AAPL.High', title='Time Series with Rangeslider')
+
+fig.update_xaxes(rangeslider_visible=True)
+fig.show()
+```
+
+### Time Series with Range Selector Buttons
+
+Range selector buttons are special controls that work well with time series and range sliders, and allow users to easily set the range of the x-axis. Check out the reference for more options: https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-rangeselector
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.line(df, x='Date', y='AAPL.High', title='Time Series with Range Slider and Selectors')
+
+fig.update_xaxes(
+    rangeslider_visible=True,
+    rangeselector=dict(
+        buttons=list([
+            dict(count=1, label="1m", step="month", stepmode="backward"),
+            dict(count=6, label="6m", step="month", stepmode="backward"),
+            dict(count=1, label="YTD", step="year", stepmode="todate"),
+            dict(count=1, label="1y", step="year", stepmode="backward"),
+            dict(step="all")
+        ])
+    )
+)
+fig.show()
+```
+
+### Customizing Tick Label Formatting by Zoom Level
+
+The `tickformatstops` attribute can be used to customize the formatting of tick labels depending on the zoom level. Try zooming in to the chart below and see how the tick label formatting changes. Check out the reference for more options: https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-tickformatstops
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = go.Figure(go.Scatter(
+    x = df['Date'],
+    y = df['mavg']
+))
+
+fig.update_xaxes(
+    rangeslider_visible=True,
+    tickformatstops = [
+        dict(dtickrange=[None, 1000], value="%H:%M:%S.%L ms"),
+        dict(dtickrange=[1000, 60000], value="%H:%M:%S s"),
+        dict(dtickrange=[60000, 3600000], value="%H:%M m"),
+        dict(dtickrange=[3600000, 86400000], value="%H:%M h"),
+        dict(dtickrange=[86400000, 604800000], value="%e. %b d"),
+        dict(dtickrange=[604800000, "M1"], value="%e. %b w"),
+        dict(dtickrange=["M1", "M12"], value="%b '%y M"),
+        dict(dtickrange=["M12", None], value="%Y Y")
+    ]
+)
+
+fig.show()
+```
+
+### Hiding Weekends and Holidays
+
+The `rangebreaks` attribute available on x- and y-axes of type `date` can be used to hide certain time-periods. In the example below, we show two plots: one in default mode to show gaps in the data, and one where we hide weekends and holidays to show an uninterrupted trading history. Note the smaller gaps between the grid lines for December 21 and January 4, where holidays were removed. Check out the reference for more options: https://plotly.com/python/reference/layout/xaxis/#layout-xaxis-rangebreaks
+
+> Note: a known limitation of this feature is that it does not support `scattergl` traces. When using this feature on plots with more than a few hundred data points with `px.scatter` or `px.line` or `px.area`, you may need to pass in `render_mode="svg"` to ensure that the underlying trace type is `scatter` and not `scattergl`.
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.scatter(df, x='Date', y='AAPL.High', range_x=['2015-12-01', '2016-01-15'],
+                 title="Default Display with Gaps")
+fig.show()
+```
+
+```python
+import plotly.express as px
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+
+fig = px.scatter(df, x='Date', y='AAPL.High', range_x=['2015-12-01', '2016-01-15'],
+                 title="Hide Weekend and Holiday Gaps with rangebreaks")
+fig.update_xaxes(
+    rangebreaks=[
+        dict(bounds=["sat", "mon"]), #hide weekends
+        dict(values=["2015-12-25", "2016-01-01"])  # hide Christmas and New Year's
+    ]
+)
+fig.show()
+```
+
+### Hiding Non-Business Hours
+
+The `rangebreaks` feature described above works for hiding hourly periods as well.
+
+```python
+import plotly.express as px
+import pandas as pd
+import numpy as np
+np.random.seed(1)
+
+work_week_40h = pd.date_range(start='2020-03-01', end='2020-03-07', freq="BH")
+
+df = pd.DataFrame(dict(
+    date = work_week_40h,
+    value = np.cumsum(np.random.rand(40)-0.5)
+))
+
+fig = px.scatter(df, x="date", y="value",
+                 title="Default Display with Gaps")
+fig.show()
+```
+
+```python
+import plotly.express as px
+import pandas as pd
+import numpy as np
+np.random.seed(1)
+
+work_week_40h = pd.date_range(start='2020-03-01', end='2020-03-07', freq="BH")
+
+df = pd.DataFrame(dict(
+    date = work_week_40h,
+    value = np.cumsum(np.random.rand(40)-0.5)
+))
+
+fig = px.scatter(df, x="date", y="value",
+                 title="Hide Non-Business Hour Gaps with rangebreaks")
+fig.update_xaxes(
+    rangebreaks=[
+        dict(bounds=[17, 9], pattern="hour"), #hide hours outside of 9am-5pm
+    ]
+)
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/tree-plots.md plotly-7.1.0+dfsg1/doc/python/tree-plots.md
--- plotly-5.20.0+dfsg/doc/python/tree-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/tree-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,140 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.3
+  plotly:
+    description: How to make interactive tree-plot in Python with Plotly. An examples
+      of a tree-plot in Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Tree-plots
+    order: 9
+    permalink: python/tree-plots/
+    thumbnail: thumbnail/treeplot.jpg
+---
+
+#### Set Up Tree with [igraph](http://igraph.org/python/)
+
+Install igraph with `pip install igraph`.
+
+```python
+!pip install igraph
+```
+
+```python
+import igraph
+from igraph import Graph, EdgeSeq
+nr_vertices = 25
+v_label = list(map(str, range(nr_vertices)))
+G = Graph.Tree(nr_vertices, 2) # 2 stands for children number
+lay = G.layout('rt')
+
+position = {k: lay[k] for k in range(nr_vertices)}
+Y = [lay[k][1] for k in range(nr_vertices)]
+M = max(Y)
+
+es = EdgeSeq(G) # sequence of edges
+E = [e.tuple for e in G.es] # list of edges
+
+L = len(position)
+Xn = [position[k][0] for k in range(L)]
+Yn = [2*M-position[k][1] for k in range(L)]
+Xe = []
+Ye = []
+for edge in E:
+    Xe+=[position[edge[0]][0],position[edge[1]][0], None]
+    Ye+=[2*M-position[edge[0]][1],2*M-position[edge[1]][1], None]
+
+labels = v_label
+```
+
+#### Create Plotly Traces
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure()
+fig.add_trace(go.Scatter(x=Xe,
+                   y=Ye,
+                   mode='lines',
+                   line=dict(color='rgb(210,210,210)', width=1),
+                   hoverinfo='none'
+                   ))
+fig.add_trace(go.Scatter(x=Xn,
+                  y=Yn,
+                  mode='markers',
+                  name='bla',
+                  marker=dict(symbol='circle-dot',
+                                size=18,
+                                color='#6175c1',    #'#DB4551',
+                                line=dict(color='rgb(50,50,50)', width=1)
+                                ),
+                  text=labels,
+                  hoverinfo='text',
+                  opacity=0.8
+                  ))
+```
+
+#### Create Text Inside the Circle via Annotations
+
+```python
+def make_annotations(pos, text, font_size=10, font_color='rgb(250,250,250)'):
+    L=len(pos)
+    if len(text)!=L:
+        raise ValueError('The lists pos and text must have the same len')
+    annotations = []
+    for k in range(L):
+        annotations.append(
+            dict(
+                text=labels[k], # or replace labels with a different list for the text within the circle
+                x=pos[k][0], y=2*M-position[k][1],
+                xref='x1', yref='y1',
+                font=dict(color=font_color, size=font_size),
+                showarrow=False)
+        )
+    return annotations
+```
+
+#### Add Axis Specifications and Create the Layout
+
+```python
+axis = dict(showline=False, # hide axis line, grid, ticklabels and  title
+            zeroline=False,
+            showgrid=False,
+            showticklabels=False,
+            )
+
+fig.update_layout(title= 'Tree with Reingold-Tilford Layout',
+              annotations=make_annotations(position, v_label),
+              font_size=12,
+              showlegend=False,
+              xaxis=axis,
+              yaxis=axis,
+              margin=dict(l=40, r=40, b=85, t=100),
+              hovermode='closest',
+              plot_bgcolor='rgb(248,248,248)'
+              )
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/ for more information and chart attribute options and http://igraph.org/python/ for more information about the igraph package!
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/treemaps.md plotly-7.1.0+dfsg1/doc/python/treemaps.md
--- plotly-5.20.0+dfsg/doc/python/treemaps.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/treemaps.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,451 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.6
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.11
+  plotly:
+    description: How to make Treemap Charts with Plotly
+    display_as: basic
+    language: python
+    layout: base
+    name: Treemap Charts
+    order: 13
+    page_type: u-guide
+    permalink: python/treemaps/
+    thumbnail: thumbnail/treemap.png
+---
+
+[Treemap charts](https://en.wikipedia.org/wiki/Treemapping) visualize hierarchical data using nested rectangles. The input data format is the same as for [Sunburst Charts](https://plotly.com/python/sunburst-charts/) and [Icicle Charts](https://plotly.com/python/icicle-charts/): the hierarchy is defined by [labels](https://plotly.com/python/reference/treemap/#treemap-labels) (`names` for `px.treemap`) and [parents](https://plotly.com/python/reference/treemap/#treemap-parents) attributes. Click on one sector to zoom in/out, which also displays a pathbar in the upper-left corner of your treemap. To zoom out you can use the path bar as well.
+
+### Basic Treemap with plotly.express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+With `px.treemap`, each row of the DataFrame is represented as a sector of the treemap.
+
+```python
+import plotly.express as px
+fig = px.treemap(
+    names = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]
+)
+fig.update_traces(root_color="lightgrey")
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Treemap of a rectangular DataFrame with plotly.express
+
+Hierarchical data are often stored as a rectangular dataframe, with different columns corresponding to different levels of the hierarchy. `px.treemap` can take a `path` parameter corresponding to a list of columns. Note that `id` and `parent` should not be provided if `path` is given.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.treemap(df, path=[px.Constant("all"), 'day', 'time', 'sex'], values='total_bill')
+fig.update_traces(root_color="lightgrey")
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Treemap of a rectangular DataFrame with continuous color argument in px.treemap
+
+If a `color` argument is passed, the color of a node is computed as the average of the color values of its children, weighted by their values.
+
+**Note**: for best results, ensure that the first `path` element is a single root node. In the examples below we are creating a dummy column containing identical values for each row to achieve this.
+
+```python
+import plotly.express as px
+import numpy as np
+df = px.data.gapminder().query("year == 2007")
+fig = px.treemap(df, path=[px.Constant("world"), 'continent', 'country'], values='pop',
+                  color='lifeExp', hover_data=['iso_alpha'],
+                  color_continuous_scale='RdBu',
+                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Treemap of a rectangular DataFrame with discrete color argument in px.treemap
+
+When the argument of `color` corresponds to non-numerical data, discrete colors are used. If a sector has the same value of the `color` column for all its children, then the corresponding color is used, otherwise the first color of the discrete color sequence is used.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.treemap(df, path=[px.Constant("all"), 'sex', 'day', 'time'],
+                 values='total_bill', color='day')
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+In the example below the color of Saturday and Sunday sectors is the same as Dinner because there are only Dinner entries for Saturday and Sunday. However, for Female -> Friday there are both lunches and dinners, hence the "mixed" color (blue here) is used.
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.treemap(df, path=[px.Constant("all"), 'sex', 'day', 'time'],
+                 values='total_bill', color='time')
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Using an explicit mapping for discrete colors
+
+For more information about discrete colors, see the [dedicated page](/python/discrete-color).
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.treemap(df, path=[px.Constant("all"), 'sex', 'day', 'time'],
+                 values='total_bill', color='time',
+                  color_discrete_map={'(?)':'lightgrey', 'Lunch':'gold', 'Dinner':'darkblue'})
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Rectangular data with missing values
+
+If the dataset is not fully rectangular, missing values should be supplied as `None`.
+
+```python
+import plotly.express as px
+import pandas as pd
+vendors = ["A", "B", "C", "D", None, "E", "F", "G", "H", None]
+sectors = ["Tech", "Tech", "Finance", "Finance", "Other",
+           "Tech", "Tech", "Finance", "Finance", "Other"]
+regions = ["North", "North", "North", "North", "North",
+           "South", "South", "South", "South", "South"]
+sales = [1, 3, 2, 4, 1, 2, 2, 1, 4, 1]
+df = pd.DataFrame(
+    dict(vendors=vendors, sectors=sectors, regions=regions, sales=sales)
+)
+df["all"] = "all" # in order to have a single root node
+print(df)
+fig = px.treemap(df, path=['all', 'regions', 'sectors', 'vendors'], values='sales')
+fig.update_traces(root_color="lightgrey")
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Treemap with Rounded Corners
+
+
+*New in 5.12*
+
+Update treemap sectors to have rounded corners by configuring the `cornerradius` in px.
+
+```python
+import plotly.express as px
+fig = px.treemap(
+    names = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]
+)
+fig.update_traces(marker=dict(cornerradius=5))
+fig.show()
+```
+
+### Basic Treemap with go.Treemap
+
+If Plotly Express does not provide a good starting point, it is also possible to use [the more generic `go.Treemap` class from `plotly.graph_objects`](/python/graph-objects/).
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Treemap(
+    labels = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+    parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"],
+    root_color="lightgrey"
+))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Set Different Attributes in Treemap
+
+This example uses the following attributes:
+
+1.  [values](https://plotly.com/python/reference/treemap/#treemap-values): sets the values associated with each of the sectors.
+2.  [textinfo](https://plotly.com/python/reference/treemap/#treemap-textinfo): determines which trace information appear on the graph that can be 'text', 'value', 'current path', 'percent root', 'percent entry', and 'percent parent', or any combination of them.
+3.  [pathbar](https://plotly.com/python/reference/treemap/#treemap-pathbar): a main extra feature of treemap to display the current path of the visible portion of the hierarchical map. It may also be useful for zooming out of the graph.
+4.  [branchvalues](https://plotly.com/python/reference/treemap/#treemap-branchvalues): determines how the items in `values` are summed. When set to "total", items in `values` are taken to be value of all its descendants. In the example below Eve = 65, which is equal to 14 + 12 + 10 + 2 + 6 + 6 + 1 + 4.
+    When set to "remainder", items in `values` corresponding to the root and the branches sectors are taken to be the extra part not part of the sum of the values at their leaves.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+
+labels = ["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"]
+parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]
+
+fig = make_subplots(
+    cols = 2, rows = 1,
+    column_widths = [0.4, 0.4],
+    subplot_titles = ('branchvalues: <b>remainder<br /> <br />', 'branchvalues: <b>total<br /> <br />'),
+    specs = [[{'type': 'treemap', 'rowspan': 1}, {'type': 'treemap'}]]
+)
+
+fig.add_trace(go.Treemap(
+    labels = labels,
+    parents = parents,
+    values =  [10, 14, 12, 10, 2, 6, 6, 1, 4],
+    textinfo = "label+value+percent parent+percent entry+percent root",
+    root_color="lightgrey"
+),row = 1, col = 1)
+
+fig.add_trace(go.Treemap(
+    branchvalues = "total",
+    labels = labels,
+    parents = parents,
+    values = [65, 14, 12, 10, 2, 6, 6, 1, 4],
+    textinfo = "label+value+percent parent+percent entry",
+    root_color="lightgrey"
+),row = 1, col = 2)
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Set Color of Treemap Sectors
+
+There are three different ways to change the color of the sectors in Treemap:
+
+1.  [marker.colors](https://plotly.com/python/reference/treemap/#treemap-marker-colors), 2) [colorway](https://plotly.com/python/reference/treemap/#treemap-colorway), 3) [colorscale](https://plotly.com/python/reference/treemap/#treemap-colorscale). The following examples show how to use each of them.
+
+```python
+import plotly.graph_objects as go
+
+values = [0, 11, 12, 13, 14, 15, 20, 30]
+labels = ["container", "A1", "A2", "A3", "A4", "A5", "B1", "B2"]
+parents = ["", "container", "A1", "A2", "A3", "A4", "container", "B1"]
+
+fig = go.Figure(go.Treemap(
+    labels = labels,
+    values = values,
+    parents = parents,
+    marker_colors = ["pink", "royalblue", "lightgray", "purple",
+                     "cyan", "lightgray", "lightblue", "lightgreen"]
+))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+This example uses `treemapcolorway` attribute, which should be set in layout.
+
+```python
+import plotly.graph_objects as go
+
+values = [0, 11, 12, 13, 14, 15, 20, 30]
+labels = ["container", "A1", "A2", "A3", "A4", "A5", "B1", "B2"]
+parents = ["", "container", "A1", "A2", "A3", "A4", "container", "B1"]
+
+fig = go.Figure(go.Treemap(
+    labels = labels,
+    values = values,
+    parents = parents,
+    root_color="lightblue"
+))
+
+fig.update_layout(
+    treemapcolorway = ["pink", "lightgray"],
+    margin = dict(t=50, l=25, r=25, b=25)
+)
+fig.show()
+```
+
+```python
+import plotly.graph_objects as go
+
+values = [0, 11, 12, 13, 14, 15, 20, 30]
+labels = ["container", "A1", "A2", "A3", "A4", "A5", "B1", "B2"]
+parents = ["", "container", "A1", "A2", "A3", "A4", "container", "B1"]
+
+fig = go.Figure(go.Treemap(
+    labels = labels,
+    values = values,
+    parents = parents,
+    marker_colorscale = 'Blues'
+))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+
+fig.show()
+```
+
+### Treemap chart with a continuous colorscale
+
+The example below visualizes a breakdown of sales (corresponding to sector width) and call success rate (corresponding to sector color) by region, county and salesperson level. For example, when exploring the data you can see that although the East region is behaving poorly, the Tyler county is still above average -- however, its performance is reduced by the poor success rate of salesperson GT.
+
+In the right subplot which has a `maxdepth` of two levels, click on a sector to see its breakdown to lower levels.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/sales_success.csv')
+print(df.head())
+
+levels = ['salesperson', 'county', 'region'] # levels used for the hierarchical chart
+color_columns = ['sales', 'calls']
+value_column = 'calls'
+
+def build_hierarchical_dataframe(df, levels, value_column, color_columns=None):
+    """
+    Build a hierarchy of levels for Sunburst or Treemap charts.
+
+    Levels are given starting from the bottom to the top of the hierarchy,
+    ie the last level corresponds to the root.
+    """
+    df_list = []
+    for i, level in enumerate(levels):
+        df_tree = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
+        dfg = df.groupby(levels[i:]).sum()
+        dfg = dfg.reset_index()
+        df_tree['id'] = dfg[level].copy()
+        if i < len(levels) - 1:
+            df_tree['parent'] = dfg[levels[i+1]].copy()
+        else:
+            df_tree['parent'] = 'total'
+        df_tree['value'] = dfg[value_column]
+        df_tree['color'] = dfg[color_columns[0]] / dfg[color_columns[1]]
+        df_list.append(df_tree)
+    total = pd.Series(dict(id='total', parent='',
+                              value=df[value_column].sum(),
+                              color=df[color_columns[0]].sum() / df[color_columns[1]].sum()), name=0)
+    df_list.append(total)
+    df_all_trees = pd.concat(df_list, ignore_index=True)
+    return df_all_trees
+
+
+df_all_trees = build_hierarchical_dataframe(df, levels, value_column, color_columns)
+average_score = df['sales'].sum() / df['calls'].sum()
+
+fig = make_subplots(1, 2, specs=[[{"type": "domain"}, {"type": "domain"}]],)
+
+fig.add_trace(go.Treemap(
+    labels=df_all_trees['id'],
+    parents=df_all_trees['parent'],
+    values=df_all_trees['value'],
+    branchvalues='total',
+    marker=dict(
+        colors=df_all_trees['color'],
+        colorscale='RdBu',
+        cmid=average_score),
+    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
+    name=''
+    ), 1, 1)
+
+fig.add_trace(go.Treemap(
+    labels=df_all_trees['id'],
+    parents=df_all_trees['parent'],
+    values=df_all_trees['value'],
+    branchvalues='total',
+    marker=dict(
+        colors=df_all_trees['color'],
+        colorscale='RdBu',
+        cmid=average_score),
+    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
+    maxdepth=2
+    ), 1, 2)
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+fig.show()
+```
+
+### Nested Layers in Treemap
+
+The following example uses hierarchical data that includes layers and grouping. Treemap and [Sunburst](https://plotly.com/python/sunburst-charts/) charts reveal insights into the data, and the format of your hierarchical data. [maxdepth](https://plotly.com/python/reference/treemap/#treemap-maxdepth) attribute sets the number of rendered sectors from the given level.
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure()
+
+fig.add_trace(go.Treemap(
+    ids = df.ids,
+    labels = df.labels,
+    parents = df.parents,
+    maxdepth=3,
+    root_color="lightgrey"
+))
+
+fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
+
+fig.show()
+```
+
+### Controlling text fontsize with uniformtext
+
+If you want all the text labels to have the same size, you can use the `uniformtext` layout parameter. The `minsize` attribute sets the font size, and the `mode` attribute sets what happens for labels which cannot fit with the desired fontsize: either `hide` them or `show` them with overflow.
+
+*Note: animated transitions are currently not implemented when `uniformtext` is used.*
+
+```python
+import plotly.graph_objects as go
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/96c0bd/sunburst-coffee-flavors-complete.csv')
+
+fig = go.Figure(go.Treemap(
+    ids = df.ids,
+    labels = df.labels,
+    parents = df.parents,
+    pathbar_textfont_size=15,
+    root_color="lightgrey"
+))
+fig.update_layout(
+    uniformtext=dict(minsize=10, mode='hide'),
+    margin = dict(t=50, l=25, r=25, b=25)
+)
+fig.show()
+```
+
+### Pattern Fills
+
+*New in 5.15*
+
+Treemap charts support [patterns](/python/pattern-hatching-texture/) (also known as hatching or texture) in addition to color. In this example, we apply a pattern to the root node.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    go.Treemap(
+        labels = ["Eve","Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
+        parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"],
+        root_color="lightgrey",
+        textfont_size=20,
+        marker=dict(pattern=dict(shape=["|"], solidity=0.80)),
+    )
+)
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.treemap()`](https://plotly.com/python-api-reference/generated/plotly.express.treemap) or https://plotly.com/python/reference/treemap/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/trisurf.md plotly-7.1.0+dfsg1/doc/python/trisurf.md
--- plotly-5.20.0+dfsg/doc/python/trisurf.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/trisurf.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,131 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.2'
+      jupytext_version: 1.4.2
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.7.7
+  plotly:
+    description: How to make tri-surf plots in Python with Plotly. Trisurfs are formed
+      by replacing the boundaries of a compact surface by touching triangles.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: Trisurf Plots
+    order: 8
+    permalink: python/trisurf/
+    thumbnail: thumbnail/trisurf.jpg
+---
+
+Trisurf plots can be made using a [figure factory](/python/figure-factories/) as detailed in this page.
+
+#### Torus
+
+```python
+import plotly.figure_factory as ff
+
+import numpy as np
+from scipy.spatial import Delaunay
+
+u = np.linspace(0, 2*np.pi, 20)
+v = np.linspace(0, 2*np.pi, 20)
+u,v = np.meshgrid(u,v)
+u = u.flatten()
+v = v.flatten()
+
+x = (3 + (np.cos(v)))*np.cos(u)
+y = (3 + (np.cos(v)))*np.sin(u)
+z = np.sin(v)
+
+points2D = np.vstack([u,v]).T
+tri = Delaunay(points2D)
+simplices = tri.simplices
+
+fig = ff.create_trisurf(x=x, y=y, z=z,
+                         simplices=simplices,
+                         title=dict(text="Torus"), aspectratio=dict(x=1, y=1, z=0.3))
+fig.show()
+```
+
+#### Mobius Band
+
+
+```python
+import plotly.figure_factory as ff
+
+import numpy as np
+from scipy.spatial import Delaunay
+
+u = np.linspace(0, 2*np.pi, 24)
+v = np.linspace(-1, 1, 8)
+u,v = np.meshgrid(u,v)
+u = u.flatten()
+v = v.flatten()
+
+tp = 1 + 0.5*v*np.cos(u/2.)
+x = tp*np.cos(u)
+y = tp*np.sin(u)
+z = 0.5*v*np.sin(u/2.)
+
+points2D = np.vstack([u,v]).T
+tri = Delaunay(points2D)
+simplices = tri.simplices
+
+fig = ff.create_trisurf(x=x, y=y, z=z,
+                         colormap="Portland",
+                         simplices=simplices,
+                         title=dict(text="Mobius Band"))
+fig.show()
+```
+
+
+#### Boy's Surface
+
+
+```python
+import plotly.figure_factory as ff
+
+import numpy as np
+from scipy.spatial import Delaunay
+
+u=np.linspace(-np.pi/2, np.pi/2, 60)
+v=np.linspace(0, np.pi, 60)
+u,v=np.meshgrid(u,v)
+u=u.flatten()
+v=v.flatten()
+
+x = (np.sqrt(2)*(np.cos(v)*np.cos(v))*np.cos(2*u) + np.cos(u)*np.sin(2*v))/(2 - np.sqrt(2)*np.sin(3*u)*np.sin(2*v))
+y = (np.sqrt(2)*(np.cos(v)*np.cos(v))*np.sin(2*u) - np.sin(u)*np.sin(2*v))/(2 - np.sqrt(2)*np.sin(3*u)*np.sin(2*v))
+z = (3*(np.cos(v)*np.cos(v)))/(2 - np.sqrt(2)*np.sin(3*u)*np.sin(2*v))
+
+points2D = np.vstack([u, v]).T
+tri = Delaunay(points2D)
+simplices = tri.simplices
+
+fig = ff.create_trisurf(x=x, y=y, z=z,
+                         colormap=['rgb(50, 0, 75)', 'rgb(200, 0, 200)', '#c8dcc8'],
+                         show_colorbar=True,
+                         simplices=simplices,
+                         title=dict(text="Boy's Surface"))
+fig.show()
+```
+
+#### Reference
+
+For more info on `ff.create_trisurf()`, see the [full function reference](https://plotly.com/python-api-reference/generated/plotly.figure_factory.create_trisurf.html)
diff -Nru plotly-5.20.0+dfsg/doc/python/troubleshooting.md plotly-7.1.0+dfsg1/doc/python/troubleshooting.md
--- plotly-5.20.0+dfsg/doc/python/troubleshooting.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/troubleshooting.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,92 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: How to troubleshoot import and rendering problems in Plotly with
+      Python.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Troubleshooting
+    order: 28
+    page_type: u-guide
+    permalink: python/troubleshooting/
+    thumbnail: thumbnail/modebar-icons.png
+---
+
+<!-- #region -->
+### Version Problems
+
+In order to follow the examples in this documentation site, you should have the latest version of `plotly` installed (5.x), as detailed in the [Getting Started](/python/getting-started) guide. This documentation (under https://plotly.com/python) is compatible with `plotly` version 4.x but *not* with version 3.x, for which the documentation is available under https://plotly.com/python/v3. In general you must also have the correct version of the underlying Plotly.js rendering engine installed, and the way to do that depends on the environment in which you are rendering figures: Dash, Jupyter Lab or Classic Notebook, VSCode etc. Read on for details about troubleshooting `plotly` in these environments.
+
+### Import Problems
+
+It's very important that you not have a file named `plotly.py` in the same directory as the Python script you're running, and this includes not naming the script itself `plotly.py`, otherwise importing `plotly` can fail with mysterious error messages.
+
+Beyond this, most `import` problems or `AttributeError`s can be traced back to having multiple versions of `plotly` installed, for example once with `conda` and once with `pip`. It's often worthwhile to uninstall with both methods before following the [Getting Started](/python/getting-started) instructions from scratch with one or the other. You can run the following commands in a terminal to fully remove `plotly` before installing again:
+
+```bash
+$ conda uninstall plotly
+$ pip uninstall plotly
+```
+
+> Problems can also arise if you have a file named `plotly.py` in the same directory as the code you are executing.
+
+### Dash Problems
+
+If you are encountering problems using `plotly` with [Dash](https://dash.plotly.com/) please first ensure that you have upgraded `dash` to the latest version, which will automatically upgrade `dash-core-components` to the latest version, ensuring that Dash is using an up-to-date version of the Plotly.js rendering engine for `plotly`. If this does not resolve your issue, please visit our [Dash Community Forum](https://community.plotly.com/) and we will be glad to help you out.
+
+This is an example of a `plotly` graph correctly rendering inside `dash`:
+<!-- #endregion -->
+
+```python hide_code=true
+from IPython.display import IFrame
+snippet_url = 'https://python-docs-dash-snippets.herokuapp.com/python-docs-dash-snippets/'
+IFrame(snippet_url + 'renderers', width='100%', height=1200)
+```
+
+<div style="font-size: 0.9em;"><div style="width: calc(100% - 30px); box-shadow: none; border: thin solid rgb(229, 229, 229);"><div style="padding: 5px;"><div><p><strong>Sign up for Dash Club</strong> → Free cheat sheets plus updates from Chris Parmer and Adam Schroeder delivered to your inbox every two months. Includes tips and tricks, community apps, and deep dives into the Dash architecture.
+<u><a href="https://go.plotly.com/dash-club?utm_source=Dash+Club+2022&utm_medium=graphing_libraries&utm_content=inline">Join now</a></u>.</p></div></div></div></div>
+
+
+### VSCode Notebook, Nteract and Streamlit Problems
+
+Plotly figures render in VSCode using a Plotly.js version bundled with the [vscode-python extension](https://code.visualstudio.com/docs/languages/python), and unfortunately it's often a little out of date compared to the latest version of the `plotly` module, so the very latest features may not work until the following release of the vscode-python extension. In any case, regularly upgrading your vscode-python extension to the latest version will ensure you have access to the greatest number of recent features.
+
+The situation is similar for environments like Nteract and Streamlit: in these environments you will need a version of these projects that bundles a version Plotly.js that supports the features in the version of `plotly` that you are running.
+
+### Orca Problems
+
+> The Orca image-generation utility is no longer supported in Plotly.py as of version 7.0.0. See the [Static Image Export page](/python/static-image-export/) for details on using Kaleido for static image generation.
+
+### Jupyter and JupyterLab Problems
+
+If a figure appears blank in JupyterLab, first check that the Jupyter server environment and the environment used by the notebook kernel can both access the Plotly packages they need. This is especially important when JupyterLab and `plotly` are installed in separate virtual environments.
+
+As a workaround, try the `notebook` renderer explicitly:
+
+~~~python
+fig.show(renderer="notebook")
+~~~
+
+This can help when the default renderer does not display the figure correctly.
diff -Nru plotly-5.20.0+dfsg/doc/python/v4-migration.md plotly-7.1.0+dfsg1/doc/python/v4-migration.md
--- plotly-5.20.0+dfsg/doc/python/v4-migration.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/v4-migration.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,294 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: Migration guide for upgrading from version 3 to version 4
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Version 4 Migration Guide
+    order: 40
+    page_type: example_index
+    permalink: python/v4-migration/
+    thumbnail: thumbnail/v4-migration.png
+---
+
+### Upgrading to Version 4
+
+Upgrading to version 4 of `plotly` is a matter of following the instructions in the [Getting Started](/python/getting-started/) guide and reinstalling the packages, subject to the notices below.
+
+### Getting Help
+
+If you encounter issues in upgrading from version 3 to version 4, please reach out in our [Community Forum](https://community.plotly.com/c/api/python) or if you've found an issue or regression in version 4, please report a [Github Issue](https://github.com/plotly/plotly.py/issues/new)
+
+<!-- #region -->
+### Online features (`plotly.plotly`) moved to `chart-studio` package
+
+Prior versions of plotly.py contained functionality for creating figures in both "online" and "offline" modes.  In "online" mode figures were uploaded to the Chart Studio cloud (or on-premise) service, whereas in "offline" mode figures were rendered locally.  **Version 4 of `plotly` is "offline"-only: all "online" functionality has been removed from the main `plotly` distribution package and moved to the new `chart-studio` distribution package.**
+
+To migrate version 3 "online" functionality, first install the `chart-studio` package using pip...
+
+```
+$ pip install chart-studio
+```
+
+or conda.
+
+```
+$ conda install -c plotly chart-studio
+```
+
+Then, update your Python import statements to import "online" functionality from the top-level `chart_studio` package, rather than the top-level `plotly` package.  For example. replace
+
+```python
+from plotly.plotly import plot, iplot
+```
+
+with
+
+```python
+from chart_studio.plotly import plot, iplot
+```
+
+Similarly,
+ - Replace **`plotly.api`** with **`chart_studio.api`**
+ - Replace **`plotly.dashboard_objs`** with **`chart_studio.dashboard_objs`**
+ - Replace **`plotly.grid_objs`** with **`chart_studio.grid_objs`**
+ - Replace **`plotly.presentation_objs`** with **`chart_studio.presentation_objs`**
+ - Replace **`plotly.widgets`** with **`chart_studio.widgets`**
+<!-- #endregion -->
+
+<!-- #region -->
+### Offline features (`plotly.offline`) replaced by Renderers framework & HTML export
+
+Version 4 introduces a new renderers framework that is a generalization of version 3's `plotly.offline.init_notebook_mode` and `plotly.offline.iplot` functions for displaying figures.  *This is a non-breaking change*: the `plotly.offline.iplot` function is still available and has been reimplemented on top of the renderers framework, so no changes are required when porting to version 4.  Going forward, we recommend using the renderers framework directly. See [Displaying plotly figures](/python/renderers) for more information.
+
+
+In version 3, the `plotly.offline.plot` function was used to export figures to HTML files.  In version 4, this function has been reimplemented on top of the new `to_html` and `write_html` functions from the `plotly.io` module.  These functions have a slightly more consistent API (see docstrings for details), and going forward we recommend using them directly when performing HTML export. When working with a graph object figure, these functions are also available as the `.to_html` and `.write_html` figure methods.
+<!-- #endregion -->
+
+### New default theme
+An updated `"plotly"` theme has been enabled by default in version 4.
+
+```python
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import pandas as pd
+
+# Make figure with subplots
+fig = make_subplots(rows=1, cols=2, specs=[[{"type": "bar"},
+                                            {"type": "surface"}]])
+
+# Add bar traces to subplot (1, 1)
+fig.add_trace(go.Bar(y=[2, 1, 3]), row=1, col=1)
+fig.add_trace(go.Bar(y=[3, 2, 1]), row=1, col=1)
+fig.add_trace(go.Bar(y=[2.5, 2.5, 3.5]), row=1, col=1)
+
+# Add surface trace to subplot (1, 2)
+# Read data from a csv
+z_data = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv")
+fig.add_surface(z=z_data)
+
+# Hide legend
+fig.update_layout(
+    showlegend=False,
+    title_text="Default Theme",
+    height=500,
+    width=800,
+)
+
+fig.show()
+```
+
+You can revert to the version 3 figure appearance by disabling the default theme as follows:
+
+```python
+import plotly.io as pio
+pio.templates.default = "none"
+
+import plotly.graph_objects as go
+from plotly.subplots import make_subplots
+import pandas as pd
+
+# Make figure with subplots
+fig = make_subplots(rows=1, cols=2, specs=[[{"type": "bar"},
+                                            {"type": "surface"}]])
+
+# Add bar traces to subplot (1, 1)
+fig.add_trace(go.Bar(y=[2, 1, 3]), row=1, col=1)
+fig.add_trace(go.Bar(y=[3, 2, 1]), row=1, col=1)
+fig.add_trace(go.Bar(y=[2.5, 2.5, 3.5]), row=1, col=1)
+
+# Add surface trace to subplot (1, 2)
+# Read data from a csv
+z_data = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv")
+fig.add_surface(z=z_data)
+
+# Hide legend
+fig.update_layout(
+    showlegend=False,
+    title_text="Default Theme Disabled",
+    height=500,
+    width=800,
+)
+
+fig.show()
+```
+
+```python
+# Restore default theme
+pio.templates.default = "plotly"
+```
+
+See [Theming and templates](/python/templates) for more information on theming in plotly.py version 4.
+
+### Add trace return value
+In version 3, the `add_trace` graph object figure method returned a reference to the newly created trace. This was also the case for the `add_{trace_type}` methods (e.g. `add_scatter`, `add_bar`, etc.).  In version 4, these methods return a reference to the calling figure.  This change was made to support method chaining of figure operations. For example
+
+```python
+from plotly.subplots import make_subplots
+(make_subplots(rows=1, cols=2)
+ .add_scatter(y=[2, 1, 3], row=1, col=1)
+ .add_bar(y=[3, 2, 1], row=1, col=2)
+ .update_layout(
+     title_text="Figure title",
+     showlegend=False,
+     width=800,
+     height=500,
+ )
+ .show())
+```
+
+<!-- #region -->
+Code that relied on the `add_*` methods to return a reference to the newly created trace will need to be updated to access the trace from the returned figure.  This can be done by appending `.data[-1]` to the add trace expression.
+
+Here is an example of a version 3 code snippet that adds a scatter trace to a figure, assigns the result to a variable named `scatter`, and then modifies the marker size of the scatter trace.
+
+```python
+import plotly.graph_objs as go
+fig = go.Figure()
+scatter = fig.add_trace(go.Scatter(y=[2, 3, 1]))
+scatter.marker.size = 20
+```
+In version 4, this would be replaced with the following:
+
+```python
+import plotly.graph_objects as go
+fig = go.Figure()
+scatter = fig.add_trace(go.Scatter(y=[2, 3, 1])).data[-1]
+scatter.marker.size = 20
+```
+<!-- #endregion -->
+
+### `make_subplots` updates
+The `make_subplots` function has been overhauled to support all trace types and to support the integration of Plotly Express.  Here are a few changes to be aware of when porting code that uses `make_subplots` to version 4.
+
+#### New preferred import location
+The preferred import location of the `make_subplots` function is now `plotly.subplots.make_subplots`.  For compatibility, this function is still available as `plotly.tools.make_subplots`.
+
+#### Grid no longer printed by default
+When the `print_grid` argument to `make_subplots` is set to `True`, a text representation of the subplot grid is printed by the `make_subplots` function.  In version 3, the default value of `print_grid` was `True`. In version 4, the default value of `print_grid` is `False`.
+
+#### New `row_heights` argument to replace `row_width`
+The legacy argument for specifying the relative height of subplot rows was called `row_width`. A new `row_heights` argument has been introduced for this purpose.
+
+> Note: Although it is not mentioned in the docstring for `plotly.subplots.make_subplots`, the legacy `row_width` argument, with the legacy behavior, is still available in version 4.
+
+In addition to having a more consistent name, values specified to the new `row_heights` argument properly honor the `start_cell` argument.  With the legacy `row_width` argument, the list of heights was always interpreted from the bottom row to the top row, even if `start_cell=="top-left"`. With the new `row_heights` argument, the list of heights is interpreted from top to bottom if `start_cell=="top-left"` and from bottom to top if `start_cell=="bottom-left"`.
+
+When porting code from `row_width` to `row_heights`, the order of the heights list must be reversed if `start_cell=="top-left"` or `start_cell` was unspecified.
+
+Here is a version 3 compatible example that uses the `row_width` argument to create a figure with subplots where the top row is twice as tall as the bottom row.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(
+    rows=2, cols=1,
+    row_width=[0.33, 0.67],
+    start_cell="top-left")
+
+fig.add_scatter(y=[2, 1, 3], row=1, col=1)
+fig.add_bar(y=[2, 3, 1], row=2, col=1)
+fig.show()
+```
+
+And here is the equivalent, version 4 example. Note how the order to the height list is reversed compared to the example above.
+
+```python
+from plotly.subplots import make_subplots
+
+fig = make_subplots(
+    rows=2, cols=1,
+    row_heights=[0.67, 0.33],
+    start_cell="top-left")
+
+fig.add_scatter(y=[2, 1, 3], row=1, col=1)
+fig.add_bar(y=[2, 3, 1], row=2, col=1)
+fig.show()
+```
+
+#### Implementation of shared axes with `make_subplots`
+The implementation of shared axis support in the `make_subplots` function has been simplified.  Prior to version 4, shared y-axes were implemented by associating a single `yaxis` object with multiple `xaxis` objects, and vice versa.
+
+In version 4, every 2D Cartesian subplot has a dedicated x-axis and a dedicated y-axis. Axes are now "shared" by being linked together using the `matches` axis property.
+
+For legacy code that makes use of the `make_subplots` and add trace APIs, this change does not require any action on the user's part.  However, legacy code that uses `make_subplots` to create a figure with shared axes, and then manipulates the axes directly, may require updates.  The output of the `.print_grid` method on a figure created using `make_subplots` can be used to identify which axis objects are associated with each subplot.
+
+```python
+from plotly.subplots import make_subplots
+fig = make_subplots(rows=1, cols=2, shared_yaxes=True)
+fig.print_grid()
+print(fig)
+```
+
+### Trace UIDs
+In version 3, all trace graph objects were copied and assigned a new `uid` property when being added to a `Figure`. In version 4, these `uid` properties are only generated automatically when a trace is added to a `FigureWidget`.  When a trace is added to a standard `Figure` graph object the input `uid`, if provided, is accepted as is.
+
+### Timezones
+Prior to version 4, when plotly.py was passed a `datetime` that included a timezone, the `datetime` was automatically converted to UTC.  In version 4, this conversion is no longer performed, and `datetime` objects are accepted and displayed in local time.
+
+<!-- #region -->
+### Headless image export on Linux with Xvfb.
+In version 4, the static image export logic attempts to automatically detect whether to call the orca image export utility using Xvfb.  Xvfb is needed for orca to work in a Linux environment if an X11 display server is not available. By default, Xvfb is used if plotly.py is running on Linux if no X11 display server is detected and `Xvfb` is available on the system `PATH`.
+
+This new behavior can be disabled by setting the `use_xvfb` orca configuration option to `False` as follows:
+
+```python
+import plotly.io as pio
+pio.orca.config.use_xvfb = False
+```
+<!-- #endregion -->
+
+### Removals
+
+#### fileopt argument removal
+The `fileopt` argument to `chart_studio.plotly.plot` has been removed, so in-place modifications to previously published figures are no longer supported.
+
+#### Legacy online `GraphWidget`
+The legacy online-only `GraphWidget` class has been removed.  Please use the `plotly.graph_objects.FigureWidget` class instead. See the [Figure Widget Overview](/python/figurewidget/) for more information.
+
+### Recommended style updates
+
+#### Import from `graph_objects` instead of `graph_objs`
+The legacy `plotly.graph_objs` package has been aliased as `plotly.graph_objects` because the latter is much easier to communicate verbally. The `plotly.graph_objs` package is still available for backward compatibility.
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/doc/python/v6-changes.md plotly-7.1.0+dfsg1/doc/python/v6-changes.md
--- plotly-5.20.0+dfsg/doc/python/v6-changes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/v6-changes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,144 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: Guide to changes in version 6 of Plotly.py and how to migrate from
+      version 5
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Changes in Version 6
+    order: 8
+    page_type: example_index
+    permalink: python/v6-migration/
+    thumbnail: thumbnail/v4-migration.png
+---
+
+This page outlines the changes in Plotly.py version 6 and cases where you may need to update your charts or tools that you use for working with Plotly.py. For the next release, see [Changes in Version 7](/python/v7-migration/).
+
+<!-- #region -->
+## Jupyter Notebook Support
+
+Versions of Jupyter Notebook earlier than version 7 are no longer supported. To upgrade to the latest Jupyter Notebook:
+
+```
+pip install notebook --upgrade
+```
+
+## Change to anywidget for go.FigureWidget
+
+[go.FigureWidget](https://plotly.com/python/figurewidget/) now uses [anywidget](https://anywidget.dev/). Install `anywidget` with:
+
+```python
+pip install anywidget
+```
+
+## Processing NumPy and NumPy-Convertible Arrays
+
+Plotly.py now takes advantage of recent changes in how Plotly.js handles typed arrays for improved performance. See the [performance page](https://plotly.com/python/performance/) for more details.
+
+> If you are using Plotly.py 6 or later with Dash Design Kit, you may need to upgrade your Dash Design Kit version. See the [Dash Design Kit Compatibility section on the performance page](/python/performance/#dash-design-kit-compatibility) for more details.
+
+
+## Dataframe Support
+
+Plotly Express now uses [Narwhals](https://narwhals-dev.github.io/narwhals/) to natively support pandas, Polars, and PyArrow. With this change, the [performance](https://plotly.com/python/performance/) of using Polars or PyArrow with Plotly Express is significantly improved.
+
+## Mapbox Deprecation
+
+Mapbox-based traces are deprecated and will be removed in a future version of Plotly.py. Use [MapLibre-based](https://plotly.com/python/mapbox-to-maplibre/) traces instead.
+
+## Removed Attributes
+
+The following attributes have been removed in Plotly.py 6.
+
+### `titlefont`,`titleposition`, `titleside`, and `titleoffset`
+
+The layout attributes `titlefont`,`titleposition`, `titleside`, and `titleoffset` have been removed. Replace them with `title.font`, `title.position`, `title.side`, and `title.offset`.
+
+The following example shows how to use `layout.title.font`:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(
+    data=[
+      go.Bar(
+        x=["A", "B", "C", "D"],
+        y=[10, 15, 13, 17]
+        )
+    ],
+    layout=dict(
+      title=dict(
+        text="Chart Title",
+        font=dict(
+          size=40
+          )
+        )
+      ),
+    # Previously the title font could be set like this:
+    # titlefont=dict(size=40)
+)
+
+fig.show()
+```
+
+## Removed Traces
+
+The following traces have been removed.
+
+### `heatmapgl`
+
+The `heatmapgl` trace has been removed. Use [`heatmap`](/python/heatmaps/) instead.
+
+
+### `pointcloud`
+
+The `pointcloud` trace has been removed. Use [`scattergl`](/python/reference/scattergl/).
+
+<!-- #endregion -->
+
+<!-- #region -->
+## Other Removed Features
+
+### Transforms
+
+Transforms, which were deprecated in Plotly.py v5, have been removed. You can achieve similar functionality by preprocessing the data with a dataframe library.
+
+For example, a transform to filter the data:
+
+```python
+  dict(
+    type = 'filter',
+    target = df['year'],
+    orientation = '=',
+    value = 2007
+  ),
+```
+
+Could be rewritten using Pandas:
+
+```python
+df_2007 = df[df['year'] == 2007]
+```
+<!-- #endregion -->
diff -Nru plotly-5.20.0+dfsg/doc/python/v7-changes.md plotly-7.1.0+dfsg1/doc/python/v7-changes.md
--- plotly-5.20.0+dfsg/doc/python/v7-changes.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/v7-changes.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,206 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.16.4
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.11.10
+  plotly:
+    description: Guide to changes in version 7 of Plotly.py and how to migrate from
+      version 6
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Changes in Version 7
+    order: 9
+    page_type: example_index
+    permalink: python/v7-migration/
+    thumbnail: thumbnail/v4-migration.png
+---
+
+This page outlines the changes in Plotly.py version 7 and cases where you may need to update your charts or the tools you use for working with Plotly.py.
+
+Version 7 upgrades the bundled Plotly.js from version 3 to version 4, so it includes the Plotly.js changes as well as the Plotly.py ones. Most figures render without any changes. The sections below cover the cases where you need to update your code.
+
+## Removed Traces
+
+The Mapbox-based traces were deprecated in version 6 and have been removed in version 7. Use the MapLibre-based traces instead, which have the same attributes.
+
+| Removed | Use instead |
+|---|---|
+| `go.Scattermapbox` | `go.Scattermap` |
+| `go.Choroplethmapbox` | `go.Choroplethmap` |
+| `go.Densitymapbox` | `go.Densitymap` |
+| `px.scatter_mapbox` | `px.scatter_map` |
+| `px.line_mapbox` | `px.line_map` |
+| `px.choropleth_mapbox` | `px.choropleth_map` |
+| `px.density_mapbox` | `px.density_map` |
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattermap(
+    lon=[-73.57, -79.38, -123.12],
+    lat=[45.50, 43.65, 49.28],
+    mode="markers",
+    marker=dict(size=12),
+))
+
+fig.show()
+```
+
+See [Migrate to MapLibre](/python/mapbox-to-maplibre/) for the full list of changes when moving from the Mapbox traces.
+
+## Removed Attributes
+
+### `layout.mapbox`
+
+The `mapbox` subplot has been removed. Use `layout.map`, which takes the same attributes. In Plotly Express, `mapbox_style` becomes `map_style`.
+
+### `stream`
+
+The `stream` attribute has been removed from all traces. It configured the Chart Studio streaming service, which is no longer available.
+
+### `*src` attributes
+
+Attributes ending in `src` (`xsrc`, `ysrc`, `textsrc`, `marker.colorsrc`, and so on) have been removed, along with `layout.hidesources`. They referenced data sources in Chart Studio.
+
+### Chart Studio configuration options
+
+The `showLink`, `link_text`, `sendData`, `showSources`, and `showEditInChartStudio` configuration options have been removed. To let users share a chart, use `showSendToCloud`, which is enabled by default in version 7 and adds a "Share chart…" button to the mode bar.
+
+## Removed Figure Factories
+
+The deprecated figure factories `create_2d_density`, `create_annotated_heatmap`, `create_bullet`, `create_candlestick`, `create_choropleth`, `create_distplot`, `create_facet_grid`, `create_gantt`, `create_hexbin_mapbox`, `create_ohlc`, `create_scatterplotmatrix`, and `create_violin` have been removed. [Figure Factories](/python/figure-factories/) lists the recommended alternative for each one.
+
+## Static Image Export
+
+Support for Kaleido versions earlier than 1.0.0 has been removed, along with support for Orca. The `engine` argument has been removed from `fig.write_image()`, `fig.to_image()`, `pio.write_image()`, `pio.write_images()`, `pio.to_image()`, `pio.full_figure_for_development()`, and from renderer constructors. See [Static Image Export](/python/static-image-export/).
+
+## Changed Defaults
+
+### Maps fit to your data
+
+`geo` subplots (used by `go.Scattergeo` and `go.Choropleth`) now fit their initial view to the locations they plot: `layout.geo.fitbounds` defaults to `"locations"` instead of `False`. Tile-based `map` subplots do the same, through a new `layout.map.fitbounds` attribute that also defaults to `"locations"`.
+
+Figures that already set a view render unchanged. To get the previous world view, set `fitbounds=False`:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Choropleth(locations=["CAN", "MEX"], z=[1, 2], showscale=False))
+
+fig.update_layout(geo=dict(fitbounds=False))
+
+fig.show()
+```
+
+Setting your own view attributes also turns auto-fitting off. On a `geo` subplot, `center` and `projection.scale` always do this, and `projection.rotation`, `lonaxis.range`, and `lataxis.range` do except on a scoped subplot with a clipped projection. On a `map` subplot, `center` or `zoom` does it.
+
+### Overlaying axes share tick positions
+
+An axis that overlays another (`yaxis2.overlaying="y"`) now defaults `tickmode` to `"sync"`: it draws ticks and gridlines at the base axis's positions, labeled from its own range, so the two axes share one grid. Set `tickmode="auto"` on the overlaying axis for the previous behavior of two independent grids.
+
+### Scatter plot matrix axes are linked
+
+`go.Splom` now defaults `axis.matches` to `True`, so axes in the same row and column are linked and pan and zoom together. Plotly Express already set this on the figures it generated. Set `matches=False` on the relevant axes for the previous behavior.
+
+## Color Parsing
+
+Plotly.js now parses colors according to the CSS Color 4 specification. Four color string formats that previously worked no longer produce the same color, and an unparseable color falls back to the attribute's default:
+
+| No longer works | Example | Use instead |
+|---|---|---|
+| The `hsv()` color function | `"hsv(200, 80%, 80%)"` | `"hsl(200, 67%, 47%)"`, `"hwb()"`, hexadecimal, or `"rgb()"` |
+| Comma separated saturation and lightness values without percent units | `"hsl(0, 100, 40)"` | `"hsl(0, 100%, 40%)"`, or the space separated `"hsl(0 100 40)"` |
+| Channel values given as fractions of 1 | `"rgb(0.5, 0.5, 0.5)"` (now renders as near black) | `"rgb(128, 128, 128)"` |
+| Hexadecimal values without a leading `#` | `"fff"` | `"#fff"` |
+
+These rules apply to color *strings* only. Numeric arrays used with a colorscale are unaffected. Automatically computed contrast colors, such as text on heatmap cells, can also shift slightly around mid-luminance backgrounds.
+
+Separately, `plotly.colors.hex_to_rgb` now parses 3-digit shorthand hexadecimal colors such as `#FFF` correctly.
+
+## Country Names
+
+`locationmode="country names"` is now resolved by [country-iso-search](https://github.com/plotly/country-iso-search) rather than a set of regular expressions. It accepts more forms — ISO-3166 codes, UN M49 numeric codes, flag emoji, historical and native names such as `"Burma"` and `"Türkiye"` — and ignores case, accents, and punctuation. It rejects partial phrases that previously matched by accident. Unrecognized names are logged and their locations are skipped. Use `locationmode="ISO-3"` with ISO codes if you need certainty.
+
+## Tile Map Rendering
+
+Three rendering details changed for `go.Scattermap`:
+
+- Marker icons are tinted with `marker.color`. Previously they were always black. Pass `marker=dict(color="black")` for the previous appearance.
+- The Maki icon set was updated from version 2.1 to 8.2. A few icon names were removed between those versions.
+- Legend swatches always draw a circle, regardless of `marker.symbol`.
+
+## Sankey Layout
+
+The Sankey layout algorithm was updated (`@plotly/d3-sankey` 0.7.2 to 0.12.3). Node positions and link paths shift slightly for the same data, with links tending to cross less.
+
+Two new Sankey attributes let you override the automatic ordering: `node.sort` and `link.sort`.
+
+For both attributes, the default value `"auto"` reorders nodes within a column, and links within a node, to reduce crossings. `"input"` keeps the order given in `node.label` and in `link.source` / `link.target`, which is useful when the order carries meaning or you need a layout that is stable across renders.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Sankey(
+    node=dict(label=["A", "B", "C", "D", "Z", "Y", "X", "W"], pad=15, thickness=20,
+              sort="input"),
+    link=dict(source=[0, 1, 2, 3], target=[4, 5, 6, 7], value=[4, 3, 2, 1],
+              sort="input"),
+))
+
+fig.show()
+```
+A third attribute, `direction`, controls the flow along the `orientation` axis. The default value of `"forward"` results in a chart which flows from left to right horizontally, or top to bottom vertically. Set it to `"reversed"` to create a chart which flows from right to left or bottom to top. See [Sankey Diagram](/python/sankey-diagram/).
+
+## New Traces and Attributes
+
+### `go.Quiver`
+
+Version 7 adds a `Quiver` trace type for 2D vector fields, which supercedes the `create_quiver` figure factory as the recommended approach for creating quiver plots. See [Quiver Plots](/python/quiver-plots/) for more detail.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Quiver(x=[0, 1, 2, 0, 1, 2], y=[0, 0, 0, 1, 1, 1],
+                          u=[1, 0.5, 0, 0.5, 0, -0.5], v=[0, 0.5, 1, 0.5, 1, 0.5]))
+
+fig.show()
+```
+
+### Geo zoom limits
+
+New attributes `layout.geo.projection.minscale` and `maxscale` clamp how far users can zoom a `geo` subplot. Both are multipliers of `projection.scale`:
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Scattergeo(lon=[2.35, 13.4, 12.5, -3.7], lat=[48.86, 52.52, 41.9, 40.42],
+                              mode="markers"))
+
+fig.update_layout(geo=dict(scope="europe",
+                           projection=dict(scale=1, minscale=0.5, maxscale=4)))
+
+fig.show()
+```
+
+## MathJax
+
+Plotly.js now supports MathJax version 3 and version 4 for rendering LaTeX, and support for MathJax version 2 has been removed. If you render figures in an environment that loads MathJax itself, such as a notebook or a custom HTML page, make sure it loads version 3 or later.
diff -Nru plotly-5.20.0+dfsg/doc/python/violin.md plotly-7.1.0+dfsg1/doc/python/violin.md
--- plotly-5.20.0+dfsg/doc/python/violin.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/violin.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,301 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.13.7
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.9.0
+  plotly:
+    description: How to make violin plots in Python with Plotly.
+    display_as: statistical
+    language: python
+    layout: base
+    name: Violin Plots
+    order: 10
+    page_type: u-guide
+    permalink: python/violin/
+    redirect_from:
+    - /python/violin-plot/
+    - /python/violin-plots/
+    thumbnail: thumbnail/violin.jpg
+---
+
+<!-- #region -->
+## Violin Plot with Plotly Express
+
+A [violin plot](https://en.wikipedia.org/wiki/Violin_plot) is a statistical representation of numerical data. It is similar to a [box plot](https://plotly.com/python/box-plots/), with the addition of a rotated [kernel density](https://en.wikipedia.org/wiki/Kernel_density_estimation) plot on each side.
+
+Alternatives to violin plots for visualizing distributions include [histograms](https://plotly.com/python/histograms/), [box plots](https://plotly.com/python/box-plots/), [ECDF plots](https://plotly.com/python/ecdf-plots/) and [strip charts](https://plotly.com/python/strip-charts/).
+
+
+### Basic Violin Plot with Plotly Express
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+<!-- #endregion -->
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.violin(df, y="total_bill")
+fig.show()
+```
+
+### Violin plot with box and data points
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.violin(df, y="total_bill", box=True, # draw box plot inside the violin
+                points='all', # can be 'outliers', or False
+               )
+fig.show()
+```
+
+### Multiple Violin Plots
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.violin(df, y="tip", x="smoker", color="sex", box=True, points="all",
+          hover_data=df.columns)
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.violin(df, y="tip", color="sex",
+                violinmode='overlay', # draw violins on top of each other
+                # default violinmode is 'group' as in example above
+                hover_data=df.columns)
+fig.show()
+```
+
+## Violin Plot with go.Violin
+
+If Plotly Express does not provide a good starting point, you can use [the more generic `go.Violin` class from `plotly.graph_objects`](/python/graph-objects/). All the options of `go.Violin` are documented in the reference https://plotly.com/python/reference/violin/
+
+#### Basic Violin Plot
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
+
+fig = go.Figure(data=go.Violin(y=df['total_bill'], box_visible=True, line_color='black',
+                               meanline_visible=True, fillcolor='lightseagreen', opacity=0.6,
+                               x0='Total Bill'))
+
+fig.update_layout(yaxis_zeroline=False)
+fig.show()
+```
+
+#### Multiple Traces
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
+
+fig = go.Figure()
+
+days = ['Thur', 'Fri', 'Sat', 'Sun']
+
+for day in days:
+    fig.add_trace(go.Violin(x=df['day'][df['day'] == day],
+                            y=df['total_bill'][df['day'] == day],
+                            name=day,
+                            box_visible=True,
+                            meanline_visible=True))
+
+fig.show()
+```
+
+#### Grouped Violin Plot
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
+
+fig = go.Figure()
+
+fig.add_trace(go.Violin(x=df['day'][ df['sex'] == 'Male' ],
+                        y=df['total_bill'][ df['sex'] == 'Male' ],
+                        legendgroup='M', scalegroup='M', name='M',
+                        line_color='blue')
+             )
+fig.add_trace(go.Violin(x=df['day'][ df['sex'] == 'Female' ],
+                        y=df['total_bill'][ df['sex'] == 'Female' ],
+                        legendgroup='F', scalegroup='F', name='F',
+                        line_color='orange')
+             )
+
+fig.update_traces(box_visible=True, meanline_visible=True)
+fig.update_layout(violinmode='group')
+fig.show()
+```
+
+#### Split Violin Plot
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
+
+fig = go.Figure()
+
+fig.add_trace(go.Violin(x=df['day'][ df['smoker'] == 'Yes' ],
+                        y=df['total_bill'][ df['smoker'] == 'Yes' ],
+                        legendgroup='Yes', scalegroup='Yes', name='Yes',
+                        side='negative',
+                        line_color='blue')
+             )
+fig.add_trace(go.Violin(x=df['day'][ df['smoker'] == 'No' ],
+                        y=df['total_bill'][ df['smoker'] == 'No' ],
+                        legendgroup='No', scalegroup='No', name='No',
+                        side='positive',
+                        line_color='orange')
+             )
+fig.update_traces(meanline_visible=True)
+fig.update_layout(violingap=0, violinmode='overlay')
+fig.show()
+```
+
+#### Advanced Violin Plot
+
+```python
+import plotly.graph_objects as go
+
+import pandas as pd
+
+df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
+
+pointpos_male = [-0.9,-1.1,-0.6,-0.3]
+pointpos_female = [0.45,0.55,1,0.4]
+show_legend = [True,False,False,False]
+
+fig = go.Figure()
+
+for i in range(0,len(pd.unique(df['day']))):
+    fig.add_trace(go.Violin(x=df['day'][(df['sex'] == 'Male') &
+                                        (df['day'] == pd.unique(df['day'])[i])],
+                            y=df['total_bill'][(df['sex'] == 'Male')&
+                                               (df['day'] == pd.unique(df['day'])[i])],
+                            legendgroup='M', scalegroup='M', name='M',
+                            side='negative',
+                            pointpos=pointpos_male[i], # where to position points
+                            line_color='lightseagreen',
+                            showlegend=show_legend[i])
+             )
+    fig.add_trace(go.Violin(x=df['day'][(df['sex'] == 'Female') &
+                                        (df['day'] == pd.unique(df['day'])[i])],
+                            y=df['total_bill'][(df['sex'] == 'Female')&
+                                               (df['day'] == pd.unique(df['day'])[i])],
+                            legendgroup='F', scalegroup='F', name='F',
+                            side='positive',
+                            pointpos=pointpos_female[i],
+                            line_color='mediumpurple',
+                            showlegend=show_legend[i])
+             )
+
+# update characteristics shared by all traces
+fig.update_traces(meanline_visible=True,
+                  points='all', # show all points
+                  jitter=0.05,  # add some jitter on points for better visibility
+                  scalemode='count') #scale violin plot area with total count
+fig.update_layout(
+    title_text="Total bill distribution<br><i>scaled by number of bills per gender",
+    violingap=0, violingroupgap=0, violinmode='overlay')
+fig.show()
+```
+
+#### Ridgeline plot
+
+A ridgeline plot ([previously known as Joy Plot](https://serialmentor.com/blog/2017/9/15/goodbye-joyplots)) shows the distribution of a numerical value for several groups. They can be used for visualizing changes in distributions over time or space.
+
+```python
+import plotly.graph_objects as go
+from plotly.colors import n_colors
+import numpy as np
+np.random.seed(1)
+
+# 12 sets of normal distributed random data, with increasing mean and standard deviation
+data = (np.linspace(1, 2, 12)[:, np.newaxis] * np.random.randn(12, 200) +
+            (np.arange(12) + 2 * np.random.random(12))[:, np.newaxis])
+
+colors = n_colors('rgb(5, 200, 200)', 'rgb(200, 10, 10)', 12, colortype='rgb')
+
+fig = go.Figure()
+for data_line, color in zip(data, colors):
+    fig.add_trace(go.Violin(x=data_line, line_color=color))
+
+fig.update_traces(orientation='h', side='positive', width=3, points=False)
+fig.update_layout(xaxis_showgrid=False, xaxis_zeroline=False)
+fig.show()
+```
+
+### Violin Plot With Only Points
+
+A [strip chart](/python/strip-charts/) is like a violin plot with points showing, and no violin:
+
+```python
+import plotly.express as px
+df = px.data.tips()
+fig = px.strip(df, x='day', y='tip')
+fig.show()
+```
+
+### Choosing The Algorithm For Computing Quartiles
+
+*New in 5.10*
+
+By default, quartiles for violin plots are computed using the `linear` method (for more about linear interpolation, see #10 listed on [http://jse.amstat.org/v14n3/langford.html](http://jse.amstat.org/v14n3/langford.html) and [https://en.wikipedia.org/wiki/Quartile](https://en.wikipedia.org/wiki/Quartile) for more details).
+
+However, you can also choose to use an `exclusive` or an `inclusive` algorithm to compute quartiles.
+
+The _exclusive_ algorithm uses the median to divide the ordered dataset into two halves. If the sample is odd, it does not include the median in either half. Q1 is then the median of the lower half and Q3 is the median of the upper half.
+
+The _inclusive_ algorithm also uses the median to divide the ordered dataset into two halves, but if the sample is odd, it includes the median in both halves. Q1 is then the median of the lower half and Q3 the median of the upper half.
+
+```python
+import plotly.express as px
+
+df = px.data.tips()
+fig = px.violin(df, y="total_bill")
+fig.update_traces(quartilemethod="exclusive") # or "inclusive", or "linear" by default
+
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.violin()`](https://plotly.com/python-api-reference/generated/plotly.express.violin) or https://plotly.com/python/reference/violin/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/waterfall-charts.md plotly-7.1.0+dfsg1/doc/python/waterfall-charts.md
--- plotly-5.20.0+dfsg/doc/python/waterfall-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/waterfall-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,132 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to make waterfall plots in Python with Plotly.
+    display_as: financial
+    language: python
+    layout: base
+    name: Waterfall Charts
+    order: 3
+    page_type: example_index
+    permalink: python/waterfall-charts/
+    thumbnail: thumbnail/waterfall-charts.jpg
+---
+
+### Simple Waterfall Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Waterfall(
+    name = "20", orientation = "v",
+    measure = ["relative", "relative", "total", "relative", "relative", "total"],
+    x = ["Sales", "Consulting", "Net revenue", "Purchases", "Other expenses", "Profit before tax"],
+    textposition = "outside",
+    text = ["+60", "+80", "", "-40", "-20", "Total"],
+    y = [60, 80, 0, -40, -20, 0],
+    connector = {"line":{"color":"rgb(63, 63, 63)"}},
+))
+
+fig.update_layout(
+        title = "Profit and loss statement 2018",
+        showlegend = True
+)
+
+fig.show()
+```
+
+### Multi Category Waterfall Chart
+This example uses the [waterfallgroupgap attribute](https://plotly.com/python/reference/layout/#layout-waterfallgroupgap), which sets a gap between bars.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Waterfall(
+    x = [["2016", "2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018"],
+        ["initial", "q1", "q2", "q3", "total", "q1", "q2", "q3", "total"]],
+    measure = ["absolute", "relative", "relative", "relative", "total", "relative", "relative", "relative", "total"],
+    y = [1, 2, 3, -1, None, 1, 2, -4, None],
+    base = 1000
+))
+
+fig.add_trace(go.Waterfall(
+    x = [["2016", "2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018"],
+        ["initial", "q1", "q2", "q3", "total", "q1", "q2", "q3", "total"]],
+    measure = ["absolute", "relative", "relative", "relative", "total", "relative", "relative", "relative", "total"],
+    y = [1.1, 2.2, 3.3, -1.1, None, 1.1, 2.2, -4.4, None],
+    base = 1000
+))
+
+fig.update_layout(
+    waterfallgroupgap = 0.5,
+)
+
+fig.show()
+```
+
+### Setting Marker Size and Color
+This example uses [decreasing](https://plotly.com/python/reference/waterfall/#waterfall-decreasing), [increasing](https://plotly.com/python/reference/waterfall/#waterfall-increasing), and [totals](https://plotly.com/python/reference/waterfall/#waterfall-totals) attributes to customize the bars.
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Waterfall(
+    x = [["2016", "2017", "2017", "2017", "2017", "2018", "2018", "2018", "2018"],
+       ["initial", "q1", "q2", "q3", "total", "q1", "q2", "q3", "total"]],
+    measure = ["absolute", "relative", "relative", "relative", "total", "relative", "relative", "relative", "total"],
+    y = [10, 20, 30, -10, None, 10, 20, -40, None], base = 300,
+    decreasing = {"marker":{"color":"Maroon", "line":{"color":"red", "width":2}}},
+    increasing = {"marker":{"color":"Teal"}},
+    totals = {"marker":{"color":"deep sky blue", "line":{"color":"blue", "width":3}}}
+))
+
+fig.update_layout(title = "Profit and loss statement", waterfallgap = 0.3)
+
+fig.show()
+```
+
+### Horizontal Waterfall Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure(go.Waterfall(
+    name = "2018", orientation = "h", measure = ["relative", "relative", "relative", "relative", "total", "relative",
+                                              "relative", "relative", "relative", "total", "relative", "relative", "total", "relative", "total"],
+    y = ["Sales", "Consulting", "Maintenance", "Other revenue", "Net revenue", "Purchases", "Material expenses",
+       "Personnel expenses", "Other expenses", "Operating profit", "Investment income", "Financial income",
+       "Profit before tax", "Income tax (15%)", "Profit after tax"],
+    x = [375, 128, 78, 27, None, -327, -12, -78, -12, None, 32, 89, None, -45, None],
+    connector = {"mode":"between", "line":{"width":4, "color":"rgb(0, 0, 0)", "dash":"solid"}}
+))
+
+fig.update_layout(title = "Profit and loss statement 2018")
+
+fig.show()
+```
+
+#### Reference
+See https://plotly.com/python/reference/waterfall/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/python/wide-form.md plotly-7.1.0+dfsg1/doc/python/wide-form.md
--- plotly-5.20.0+dfsg/doc/python/wide-form.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/wide-form.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,317 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.3'
+      jupytext_version: 1.14.7
+  kernelspec:
+    display_name: Python 3 (ipykernel)
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.10.4
+  plotly:
+    description: Plotly Express' 2D-Cartesian functions accept data in long-, wide-,
+      and mixed-form.
+    display_as: file_settings
+    language: python
+    layout: base
+    name: Plotly Express Wide-Form Support
+    order: 35
+    page_type: u-guide
+    permalink: python/wide-form/
+    thumbnail: thumbnail/plotly-express.png
+---
+
+### Plotly Express works with Column-oriented, Matrix or Geographic Data
+
+Plotly Express provides functions to visualize a variety of types of data. Most functions such as `px.bar` or `px.scatter` expect to operate on column-oriented data of the type you might store in a `DataFrame` (in either "long" or "wide" format, see below). These functions use Pandas internally to process the data, but also accept other types of DataFrames as arguments. See the [Plotly Express arguments page](/python/px-arguments/) for more details.
+
+[`px.imshow` operates on matrix-like data](/python/imshow/) you might store in a `numpy` or `xarray` array and functions like [`px.choropleth` can operate on geographic data](/python/maps/) of the kind you might store in a GeoPandas `GeoDataFrame`. This page details how to provide a specific form of column-oriented data to 2D-Cartesian Plotly Express functions, but you can also check out our [detailed column-input-format documentation](/python/px-arguments/).
+
+### Plotly Express works with Long-, Wide-, and Mixed-Form Data
+
+*Until version 4.8, Plotly Express only operated on long-form (previously called "tidy") data, but now accepts wide-form and mixed-form data as well.*
+
+There are three common conventions for storing column-oriented data, usually in a data frame with column names:
+
+* **long-form data** has one row per observation, and one column per variable. This is suitable for storing and displaying multivariate data i.e. with dimension greater than 2. This format is sometimes called "tidy".
+* **wide-form data** has one row per value of one of the first variable, and one column per value of the second variable. This is suitable for storing and displaying 2-dimensional data.
+* **mixed-form data** is a hybrid of long-form and wide-form data, with one row per value of one variable, and some columns representing values of another, and some columns representing more variables.
+
+Every Plotly Express function can operate on long-form data (other than `px.imshow` which operates only on wide-form input), and in addition, the following 2D-Cartesian functions can operate on wide-form and mixed-form data: `px.scatter`, `px.line`, `px.area`, `px.bar`, `px.histogram`, `px.violin`, `px.box`, `px.strip`, `px.funnel`, `px.density_heatmap` and `px.density_contour`.
+
+By way of example here is the same data, represented in long-form first, and then in wide-form:
+
+```python
+import plotly.express as px
+long_df = px.data.medals_long()
+long_df
+```
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+wide_df
+```
+
+Plotly Express can produce **the same plot from either form**. For the long-form input, `x` and `y` are set to the respective column names.
+
+```python
+import plotly.express as px
+long_df = px.data.medals_long()
+
+fig = px.bar(long_df, x="nation", y="count", color="medal", title="Long-Form Input")
+fig.show()
+```
+
+For the wide-form input, we **pass in a list of column-names `y`**, which is enough to trigger the wide-form processing mode. Wide-form mode is also the default if neither `x` nor `y` are specified, see section at bottom regarding Wide-Form Defaults.
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], title="Wide-Form Input")
+fig.show()
+```
+
+### Labeling axes, legends and hover text
+
+You might notice that y-axis and legend labels are slightly different for the second plot: they are "value" and "variable", respectively, and this is also reflected in the hoverlabel text. This is because Plotly Express performed an [internal Pandas `melt()` operation](https://pandas.pydata.org/docs/reference/api/pandas.melt.html) to convert the wide-form data into long-form for plotting, and used the Pandas convention for assign column names to the intermediate long-form data. Note that the labels "medal" and "count" do not appear in the wide-form data frame, so in this case, you must supply these yourself, (or see below regarding using a data frame with named row- and column-indexes). You can [rename these labels with the `labels` argument](/python/styling-plotly-express/):
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], title="Wide-Form Input, relabelled",
+            labels={"value": "count", "variable": "medal"})
+fig.show()
+```
+
+Plotly Express figures created using wide-form data can be [styled just like any other Plotly Express figure](/python/styling-plotly-express/):
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"],
+             title="Wide-Form Input, styled",
+             labels={"value": "Medal Count", "variable": "Medal", "nation": "Olympic Nation"},
+             color_discrete_map={"gold": "gold", "silver": "silver", "bronze": "#c96"},
+             template="simple_white"
+            )
+fig.update_layout(font_family="Rockwell", showlegend=False)
+fig.show()
+```
+
+### Data Frames with Named Indexes
+
+Pandas `DataFrames` support not only column names and "row names" via the value of `index`, but the indexes themselves can be named. Here is how to assign one column of the wide sample data frame above as the index, and to name the column index. The result "indexed" sample data frame can also be obtained by calling `px.data.medals_wide(indexed=True)`
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide()
+wide_df = wide_df.set_index("nation")
+wide_df.columns.name = "medals"
+wide_df
+```
+
+When working with a data frame like the one above, you can pass the index references directly as arguments, to benefit from automatic labelling for everything except the y axis label, which will default to "values", but this can be overridden with the `labels` argument as above:
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=True)
+
+fig = px.bar(wide_df, x=wide_df.index, y=wide_df.columns)
+fig.show()
+```
+
+If you transpose `x` and `y`, thereby assigning the columns to `x`, the orientation will be switched to horizontal:
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=True)
+
+fig = px.bar(wide_df, x=wide_df.columns, y=wide_df.index)
+fig.show()
+```
+
+### Assigning Inferred Columns to Non-Default Arguments
+
+
+In the examples above, the columns of the wide data frame are assigned by default as an "inferred" column named `variable` to the `color` argument (see section below for documentation of the default behaviours), but this is not a hard constraint. The `variable` column can be assigned to any Plotly Express argument, for example to accomplish faceting, and `color` can be reassigned to any other value. More generally, when plotting with a data frame without named indexes, you can reassign the inferred column named `variable` and `value` to any argument:
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=False)
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], facet_col="variable", color="nation")
+fig.show()
+```
+
+You can also prevent `color` from getting assigned if you're mapping `variable` to some other argument:
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=False)
+
+fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], facet_col="variable", color=px.NO_COLOR)
+fig.show()
+```
+
+If using a data frame's named indexes, either explicitly or relying on the defaults, the row-index references (i.e. `df.index`) or column-index names (i.e. the value of `df.columns.name`) must be used:
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=True)
+
+fig = px.bar(wide_df, facet_col="medal", color=wide_df.index)
+fig.show()
+```
+
+### Mixed-Form Data
+
+In some cases, a data frame is neither clearly long-form nor wide-form, and we can call this "mixed-form". For example, in the data frame below, if it contained only the `experiment` columns, the data could be described as wide-form, and if it contained only `gender` and `group` it could be described as long-form, but it contains both, so it is best described as mixed-form data:
+
+```python
+import plotly.express as px
+mixed_df = px.data.experiment(indexed=True)
+mixed_df.head()
+```
+
+We can visualize just the wide-form portion of the data frame easily with a [violin chart](/python/violin/). As a special note, we'll assign the index, which is the participant ID, to the `hover_data`, so that hovering over outlier points will identify their row.
+
+```python
+import plotly.express as px
+mixed_df = px.data.experiment(indexed=True)
+
+fig = px.violin(mixed_df, y=["experiment_1", "experiment_2", "experiment_3"], hover_data=[mixed_df.index])
+fig.show()
+```
+
+
+
+
+We are not limited to visualizing only the wide-form portion of the data, however. We can also leverage the long-form portion of the data frame, for example to color by participant `gender` and facet by participant `group`, all without having to manipulate the data frame:
+
+```python
+import plotly.express as px
+mixed_df = px.data.experiment(indexed=True)
+
+fig = px.violin(mixed_df, y=["experiment_1", "experiment_2", "experiment_3"],
+                color="gender", facet_col="group", hover_data=[mixed_df.index])
+fig.show()
+```
+
+In the plots above, the column names provided to `y` are internally mapped to long-form column called `variable`, as is apparent in the x-axis labels. We can reassign `variable` to another argument as well, in this case we'll assign it to `facet_col` and reassign `group` to the `x` axis. We'll switch to a [box plot](/python/box-plots/) for variety.
+
+```python
+import plotly.express as px
+mixed_df = px.data.experiment(indexed=True)
+
+fig = px.box(mixed_df, x="group", y=["experiment_1", "experiment_2", "experiment_3"],
+                color="gender", facet_col="variable", hover_data=[mixed_df.index])
+fig.show()
+```
+
+One interesting thing about a mixed-form data frame like this is that it remains easy to plot, say, one experiment against another, which would require some preliminary data wrangling if this was represented as a pure long-form dataset:
+
+```python
+import plotly.express as px
+mixed_df = px.data.experiment(indexed=True)
+
+fig = px.scatter(mixed_df, x="experiment_1", y="experiment_2",
+                color="group", facet_col="gender", hover_data=[mixed_df.index])
+fig.show()
+```
+
+In fact, we can even visualize the results of every experiment against every other, using a [scatterplot matrix](/python/splom/):
+
+```python
+import plotly.express as px
+mixed_df = px.data.experiment(indexed=True)
+
+fig = px.scatter_matrix(mixed_df, dimensions=["experiment_1", "experiment_2", "experiment_3"], color="gender")
+fig.show()
+```
+
+### Wide-Form Defaults
+
+For bar, scatter, line and area charts, the pattern of assigning `x=df.index`, `y=df.columns`, `color="variable"` is so common that if you provide neither `x` nor `y` this is the default behaviour. An exception is made for bar charts when the values are not continuous variables, in which case the default is similar to histograms, with `x=df.columns`, `color="variable"` and `y=<constant 1, labeled "count">`.
+
+For violin and box plots, the default is to assign `x=variable`, `y=df.columns` and for histograms the default is `x=df.columns`, `color="variable"`
+
+These defaults are also filled in if you specify only `y` (`x` for histograms) as a list-of-columns. See below for orientation control.
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=True)
+
+fig = px.bar(wide_df)
+fig.show()
+
+fig = px.area(wide_df)
+fig.show()
+
+fig = px.line(wide_df)
+fig.show()
+
+fig = px.scatter(wide_df)
+fig.show()
+```
+
+```python
+import plotly.express as px
+
+mixed_df = px.data.experiment(indexed=True)
+wide_df = mixed_df[["experiment_1", "experiment_2", "experiment_3"]]
+
+fig = px.histogram(wide_df)
+fig.show()
+
+fig = px.violin(wide_df)
+fig.show()
+
+fig = px.box(wide_df)
+fig.show()
+```
+
+### Orientation Control When Using Defaults
+
+If you specify neither `x` nor `y`, you can swap the default behaviour of `x` and `y` by setting `orientation="h"`.
+
+If you specify only `x` as a list-of-columns (`y` in the case of histograms), then the defaults are filled in as if `orientation="h"`
+
+```python
+import plotly.express as px
+wide_df = px.data.medals_wide(indexed=True)
+
+fig = px.bar(wide_df, orientation="h")
+fig.show()
+
+fig = px.area(wide_df, x=wide_df.columns)
+fig.show()
+
+mixed_df = px.data.experiment(indexed=True)
+wide_df = mixed_df[["experiment_1", "experiment_2", "experiment_3"]]
+
+fig = px.histogram(wide_df, orientation="h")
+fig.show()
+
+fig = px.violin(wide_df, orientation="h")
+fig.show()
+
+fig = px.box(wide_df, orientation="h")
+fig.show()
+```
diff -Nru plotly-5.20.0+dfsg/doc/python/wind-rose-charts.md plotly-7.1.0+dfsg1/doc/python/wind-rose-charts.md
--- plotly-5.20.0+dfsg/doc/python/wind-rose-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/python/wind-rose-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,94 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  language_info:
+    codemirror_mode:
+      name: ipython
+      version: 3
+    file_extension: .py
+    mimetype: text/x-python
+    name: python
+    nbconvert_exporter: python
+    pygments_lexer: ipython3
+    version: 3.6.7
+  plotly:
+    description: How to graph wind rose charts in python. Wind Rose charts display
+      wind speed and direction of a given location.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Wind Rose and Polar Bar Charts
+    order: 19
+    page_type: u-guide
+    permalink: python/wind-rose-charts/
+    thumbnail: thumbnail/wind-rose.jpg
+---
+
+### Wind Rose Chart with Plotly Express
+
+A [wind rose chart](https://en.wikipedia.org/wiki/Wind_rose) (also known as a polar bar chart) is a graphical tool used to visualize how wind speed and direction are typically distributed at a given location. You can use the `px.bar_polar` function from Plotly Express as below, otherwise use `go.Barpolar` as explained in the next section.
+
+[Plotly Express](/python/plotly-express/) is the easy-to-use, high-level interface to Plotly, which [operates on a variety of types of data](/python/px-arguments/) and produces [easy-to-style figures](/python/styling-plotly-express/).
+
+```python
+import plotly.express as px
+df = px.data.wind()
+fig = px.bar_polar(df, r="frequency", theta="direction",
+                   color="strength", template="plotly_dark",
+                   color_discrete_sequence= px.colors.sequential.Plasma_r)
+fig.show()
+```
+
+#### Basic Wind Rose Chart
+
+```python
+import plotly.graph_objects as go
+
+fig = go.Figure()
+
+fig.add_trace(go.Barpolar(
+    r=[77.5, 72.5, 70.0, 45.0, 22.5, 42.5, 40.0, 62.5],
+    name='11-14 m/s',
+    marker_color='rgb(106,81,163)'
+))
+fig.add_trace(go.Barpolar(
+    r=[57.5, 50.0, 45.0, 35.0, 20.0, 22.5, 37.5, 55.0],
+    name='8-11 m/s',
+    marker_color='rgb(158,154,200)'
+))
+fig.add_trace(go.Barpolar(
+    r=[40.0, 30.0, 30.0, 35.0, 7.5, 7.5, 32.5, 40.0],
+    name='5-8 m/s',
+    marker_color='rgb(203,201,226)'
+))
+fig.add_trace(go.Barpolar(
+    r=[20.0, 7.5, 15.0, 22.5, 2.5, 2.5, 12.5, 22.5],
+    name='< 5 m/s',
+    marker_color='rgb(242,240,247)'
+))
+
+fig.update_traces(text=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'])
+fig.update_layout(
+    title=dict(text='Wind Speed Distribution in Laurel, NE'),
+    font_size=16,
+    legend_font_size=16,
+    polar_radialaxis_ticksuffix='%',
+    polar_angularaxis_rotation=90,
+
+)
+fig.show()
+```
+
+#### Reference
+
+See [function reference for `px.(bar_polar)`](https://plotly.com/python-api-reference/generated/plotly.express.bar_polar) or https://plotly.com/python/reference/barpolar/ for more information and chart attribute options!
diff -Nru plotly-5.20.0+dfsg/doc/requirements.txt plotly-7.1.0+dfsg1/doc/requirements.txt
--- plotly-5.20.0+dfsg/doc/requirements.txt	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/requirements.txt	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,47 @@
+plotly==7.0.0
+anywidget
+cufflinks==0.17.3
+dash-bio
+dask==2022.2.0
+datashader==0.14.4
+geodatasets==2026.1.0
+geopandas==0.8.1
+geoparse<=2.0.3
+igraph
+jinja2<3.1
+jupyter
+jupyter-client<7
+jupytext==1.16.4
+kaleido
+nbconvert==5.6.1
+networkx==2.8.0
+notebook
+numpy==1.22.4
+orjson
+pandas==1.4.0
+pathlib
+patsy==0.5.6
+polars
+pooch
+psutil
+pyarrow
+python-frontmatter==1.1.0
+recommonmark
+requests
+scikit-image==0.20.0
+scikit-learn
+scipy==1.9.1
+setuptools<=81
+sphinx==3.5.4
+sphinx_bootstrap_theme
+sphinxcontrib-applehelp==1.0.2
+sphinxcontrib-devhelp==1.0.2
+sphinxcontrib-htmlhelp==2.0.0
+sphinxcontrib-jsmath==1.0.1
+sphinxcontrib-qthelp==1.0.3
+sphinxcontrib-serializinghtml==1.1.5
+squarify
+statsmodels==0.14.2
+umap-learn==0.5.7
+wget
+xarray==2022.9.0
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/1d-correlation.md plotly-7.1.0+dfsg1/doc/unconverted/python/1d-correlation.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/1d-correlation.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/1d-correlation.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,167 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: Learn how to perform 1 dimensional correlation between two signals
+      in Python.
+    display_as: signal-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: 1D Correlation
+    order: 5
+    page_type: example_index
+    permalink: python/1d-correlation/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [Plotly](https://plot.ly/python/getting-started/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+import pandas as pd
+import scipy
+
+from scipy import signal
+```
+
+#### Correlation Between Saw and Square Wave
+Similar to convolution, the 1D Cross-Correlation between two functions $f$ and $g$ is a measure of their similarity in terms of the lag of one to another ([source](https://en.wikipedia.org/wiki/Convolution)). Since we are dealing with arrays of data rather than continuous functions, the cross-correlation is mathematically defined as:
+
+$$
+\begin{align*}
+(f*g)[n] = \sum_{m=-\infty}^{\infty} f^{*}[m]g[n+m]
+\end{align*}
+$$
+
+where $f^*$ is the `complex conjugate` of $f$.
+
+To give us an intuitive glance at what this does, let us look at the cross-correlation between a saw wave and a square wave.
+
+```python
+x = np.linspace(0, 20, 50)
+saw_y = signal.sawtooth(t=x)
+square_y = signal.square(t=x)
+convolve_y = signal.convolve(saw_y, square_y)
+
+trace_saw = go.Scatter(
+    x = x,
+    y = saw_y,
+    mode = 'lines',
+    name = 'Saw',
+    marker=dict(
+        color='#57D1C9'
+    )
+)
+
+trace_square = go.Scatter(
+    x = x,
+    y = square_y,
+    mode = 'lines',
+    name = 'Square',
+    marker=dict(
+        color='#ED5485'
+    )
+)
+
+trace_convolution = go.Scatter(
+    x = x,
+    y = convolve_y,
+    mode = 'lines',
+    name = 'Convolution',
+    marker=dict(
+        color='#FFE869'
+    )
+)
+
+data = [trace_saw, trace_square, trace_convolution]
+py.iplot(data, filename='1d-convolution-of-saw-and-square')
+```
+
+#### Correlation Between Saw and Shifted Saw Wave
+To compare with the plot above, we can plot a saw wave, a phase shifted saw wave and the convolution between the two to see how they correlate along the axis.
+
+```python
+x = np.linspace(0, 20, 50)
+
+saw_y = signal.sawtooth(t=x)
+square_y = signal.square(t=x)
+shifted_saw_y = signal.sawtooth(t=np.linspace(10, 30, 50))
+convolve_y = signal.convolve(saw_y, shifted_saw_y)
+
+trace_saw = go.Scatter(
+    x = x,
+    y = saw_y,
+    mode = 'lines',
+    name = 'Saw',
+    marker = dict(
+        color='#FF7844'
+    ),
+    opacity = 0.8
+)
+
+trace_shifted_saw = go.Scatter(
+    x = x,
+    y = shifted_saw_y,
+    mode = 'lines',
+    name = 'Shifted Saw',
+    marker = dict(
+        color='#A64942'
+    ),
+    opacity = 0.8
+)
+
+trace_convolution = go.Scatter(
+    x = x,
+    y = convolve_y,
+    mode = 'lines',
+    name = 'Convolution',
+    marker = dict(
+        color='#53354A'
+    )
+)
+
+data = [trace_saw, trace_shifted_saw, trace_convolution]
+py.iplot(data, filename='1d-convolution-of-saw-and-shifted-saw')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-1D-Correlation.ipynb', 'python/1d-correlation/', '1D Correlation | plotly',
+    'Learn how to perform 1 dimensional correlation between two signals in Python.',
+    title='1D Correlation in Python | plotly',
+    name='1D Correlation',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='signal-analysis', order=5)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/2d-projection-of-3d-surface.md plotly-7.1.0+dfsg1/doc/unconverted/python/2d-projection-of-3d-surface.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/2d-projection-of-3d-surface.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/2d-projection-of-3d-surface.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,202 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to project 3D Surface plots in 2D with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: Projection of 3D Surface
+    order: 19
+    page_type: u-guide
+    permalink: python/2d-projection-of-3d-surface/
+    thumbnail: thumbnail/projection-3d.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+
+#### Projections of a 3d surface onto planes
+
+
+This example will demonstrate how to create heatmaps of projections of a 3d surface onto planes perpendicular to the z, x, respectively y-direction. Usually surfaces in the 3d space are colored with  a colormap associated to the normalized range of the z coordinates of points on that surface.
+Recently, Plotly devised a method to color a surface according to a custom color function.
+
+Namely, if $x, y, z$ are numpy arrays of shape (m, n), defined by a discretization (via a meshgrid) of a surface z=f(x,y) or in parametric form, $x=x(u,v), y=y(u,v), z=z(u,v)$, then a custom function, `Color(x,y,z)`, returns a numpy array `C`, of the same shape as z, and the surface is colored by a colormap, according to the values in `C`.
+
+
+This method allows to project a surface onto planes perpendicular to the z, x or y-direction in the 3d space
+and interpret the projection as a planar surface colored according to the z, x or y value at each point
+of the corresponding plane.
+
+First, define the surface and its discretization:
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+xx=np.linspace(-3.5, 3.5, 100)
+yy=np.linspace(-3.5, 3.5, 100)
+x,y=np.meshgrid(xx, yy)
+z=np.exp(-(x-1)**2-y**2)-10*(x**3+y**4-x/5)*np.exp(-(x**2+y**2))
+```
+
+#### Color according to normalized z-values
+
+```python
+colorscale=[[0.0, 'rgb(20,29,67)'],
+           [0.1, 'rgb(28,76,96)'],
+           [0.2, 'rgb(16,125,121)'],
+           [0.3, 'rgb(92,166,133)'],
+           [0.4, 'rgb(182,202,175)'],
+           [0.5, 'rgb(253,245,243)'],
+           [0.6, 'rgb(230,183,162)'],
+           [0.7, 'rgb(211,118,105)'],
+           [0.8, 'rgb(174,63,95)'],
+           [0.9, 'rgb(116,25,93)'],
+           [1.0, 'rgb(51,13,53)']]
+```
+
+#### Add hover text for the surface:
+
+```python
+textz = [['x: '+'{:0.5f}'.format(x[i][j])+'<br>y: '+'{:0.5f}'.format(y[i][j])+
+        '<br>z: '+'{:0.5f}'.format(z[i][j]) for j in range(z.shape[1])] for i in range(z.shape[0])]
+
+trace1= go.Surface(
+    x=tuple(x),
+    y=tuple(y),
+    z=tuple(z),
+    colorscale=colorscale,
+    text=textz,
+    hoverinfo='text',
+)
+```
+
+#### Set Plot Layout:
+
+```python
+axis = dict(
+showbackground=True,
+backgroundcolor="rgb(230, 230,230)",
+showgrid=False,
+zeroline=False,
+showline=False)
+
+ztickvals=list(range(-6,4))
+layout = go.Layout(title="Projections of a surface onto coordinate planes" ,
+                autosize=False,
+                width=700,
+                height=600,
+                scene=dict(xaxis=dict(axis, range=[-3.5, 3.5]),
+                            yaxis=dict(axis, range=[-3.5, 3.5]),
+                            zaxis=dict(axis , tickvals=ztickvals),
+                            aspectratio=dict(x=1,
+                                             y=1,
+                                             z=0.95)
+                           )
+                )
+```
+
+#### Discretization of each Plane
+The surface projections will be plotted in the planes of equations
+`Z=np.min(z)-2`, `X=np.min(xx)`, respectively `Y=np.min(yy)`.
+
+```python
+z_offset=(np.min(z)-2)*np.ones(z.shape)#
+x_offset=np.min(xx)*np.ones(z.shape)
+y_offset=np.min(yy)*np.ones(z.shape)
+```
+
+Define the color functions and the color numpy arrays, `C_z`, `C_x`, `C_y`, corresponding to each plane:<br>
+Define the 3-tuples of coordinates to be displayed at hovering the mouse over the projections.
+The first two coordinates give the position in the projection plane, whereas the third one  is used
+for assigning the color, just in the same way the coordinate z is used for the z-direction projection.
+
+```python
+proj_z=lambda x, y, z: z#projection in the z-direction
+colorsurfz=proj_z(x,y,z)
+proj_x=lambda x, y, z: x
+colorsurfx=proj_z(x,y,z)
+proj_y=lambda x, y, z: y
+colorsurfy=proj_z(x,y,z)
+
+textx=[['y: '+'{:0.5f}'.format(y[i][j])+'<br>z: '+'{:0.5f}'.format(z[i][j])+
+        '<br>x: '+'{:0.5f}'.format(x[i][j]) for j in range(z.shape[1])]  for i in range(z.shape[0])]
+texty=[['x: '+'{:0.5f}'.format(x[i][j])+'<br>z: '+'{:0.5f}'.format(z[i][j]) +
+        '<br>y: '+'{:0.5f}'.format(y[i][j]) for j in range(z.shape[1])] for i in range(z.shape[0])]
+
+tracex = go.Surface(z=list(z),
+                x=list(x_offset),
+                y=list(y),
+                colorscale=colorscale,
+                showlegend=False,
+                showscale=False,
+                surfacecolor=colorsurfx,
+                text=textx,
+                hoverinfo='text'
+               )
+tracey = go.Surface(z=list(z),
+                x=list(x),
+                y=list(y_offset),
+                colorscale=colorscale,
+                showlegend=False,
+                showscale=False,
+                surfacecolor=colorsurfy,
+                text=texty,
+                hoverinfo='text'
+               )
+tracez = go.Surface(z=list(z_offset),
+                x=list(x),
+                y=list(y),
+                colorscale=colorscale,
+                showlegend=False,
+                showscale=False,
+                surfacecolor=colorsurfx,
+                text=textz,
+                hoverinfo='text'
+               )
+
+data=[trace1, tracex, tracey, tracez]
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig)
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/csshref="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'Plotly-project-3d-onto-a-plane.ipynb', 'python/2d-projection-of-3d-surface/', 'Projection of 3D Surface',
+    'How to project 3D Surface plots in 2D with Plotly.',
+    title = '2D Projection of 3D surface | plotly',
+    has_thumbnail='true', thumbnail='thumbnail/projection-3d.jpg',
+    language='python',
+    display_as='3d_charts', order=19,
+    ipynb= '~notebook_demo/79')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/3d-filled-line-plots.md plotly-7.1.0+dfsg1/doc/unconverted/python/3d-filled-line-plots.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/3d-filled-line-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/3d-filled-line-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,126 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make 3D Filled Line Plots in Python
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Filled Line Plots
+    order: 5
+    permalink: python/3d-filled-line-plots/
+    thumbnail: thumbnail/3d-filled-line-plot.jpg
+---
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Basic Filled Line Plot
+<!-- #endregion -->
+
+```python deletable=true editable=true
+import plotly.plotly as py
+import pandas as pd
+
+# The datasets' url. Thanks Jennifer Bryan!
+url_csv = 'http://www.stat.ubc.ca/~jenny/notOcto/STAT545A/examples/gapminder/data/gapminderDataFiveYear.txt'
+
+df = pd.read_csv(url_csv, sep='\t')
+df.head()
+
+countries = ['China', 'India', 'United States', 'Bangladesh', 'South Africa']
+fill_colors = ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854']
+gf = df.groupby('country')
+
+data = []
+
+for country, fill_color in zip(countries[::-1], fill_colors):
+    group = gf.get_group(country)
+    years = group['year'].tolist()
+    length = len(years)
+    country_coords = [country] * length
+    pop = group['pop'].tolist()
+    zeros = [0] * length
+
+    data.append(dict(
+        type='scatter3d',
+        mode='lines',
+        x=years + years[::-1] + [years[0]],  # year loop: in incr. order then in decr. order then years[0]
+        y=country_coords * 2 + [country_coords[0]],
+        z=pop + zeros + [pop[0]],
+        name='',
+        surfaceaxis=1, # add a surface axis ('1' refers to axes[1] i.e. the y-axis)
+        surfacecolor=fill_color,
+        line=dict(
+            color='black',
+            width=4
+        ),
+    ))
+
+layout = dict(
+    title='Population from 1957 to 2007 [Gapminder]',
+    showlegend=False,
+    scene=dict(
+        xaxis=dict(title=''),
+        yaxis=dict(title=''),
+        zaxis=dict(title=''),
+        camera=dict(
+            eye=dict(x=-1.7, y=-1.7, z=0.5)
+        )
+    )
+)
+
+fig = dict(data=data, layout=layout)
+
+# IPython notebook
+# py.iplot(fig, filename='filled-3d-lines')
+
+py.iplot(fig, filename='filled-3d-lines')
+```
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Reference
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+See https://plot.ly/python/reference/ for more information!
+<!-- #endregion -->
+
+```python deletable=true editable=true
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    '3d-filled-line.ipynb', 'python/3d-filled-line-plots/', '3D Filled Line Plots in Python | plotly',
+    'How to make 3D Filled Line Plots in Python',
+    title = '3D Filled Line Plots in Python | plotly',
+    name = '3D Filled Line Plots',
+    has_thumbnail='true', thumbnail='thumbnail/3d-filled-line-plot.jpg',
+    language='python',
+    display_as='3d_charts', order=5,
+    ipynb= '~notebook_demo/65')
+```
+
+```python deletable=true editable=true
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/3d-network-graph.md plotly-7.1.0+dfsg1/doc/unconverted/python/3d-network-graph.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/3d-network-graph.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/3d-network-graph.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,212 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make 3D Network Graphs in Python.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Network Graphs
+    order: 13
+    page_type: example_index
+    permalink: python/3d-network-graph/
+    thumbnail: thumbnail/3dnetwork.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Network reflecting coappearances of characters in <br>Victor Hugo's novel Les Miserables
+
+
+We define our graph as an `igraph.Graph` object. [Python `igraph`](http://igraph.org/python/)
+is a library for high-performance graph generation  and analysis. Install the Python library with `sudo pip install igraph`.
+
+```python
+import igraph as ig
+```
+
+Read graph data from a `json` file:
+
+```python
+import json
+import urllib2
+
+data = []
+req = urllib2.Request("https://raw.githubusercontent.com/plotly/datasets/master/miserables.json")
+opener = urllib2.build_opener()
+f = opener.open(req)
+data = json.loads(f.read())
+
+print data.keys()
+```
+
+Get the number of nodes:
+
+```python
+N=len(data['nodes'])
+N
+```
+
+Define the list of edges and the Graph object from Edges:
+
+```python
+L=len(data['links'])
+Edges=[(data['links'][k]['source'], data['links'][k]['target']) for k in range(L)]
+
+G=ig.Graph(Edges, directed=False)
+```
+
+Extract the node attributes, 'group', and 'name':
+
+```python
+data['nodes'][0]
+```
+
+```python
+labels=[]
+group=[]
+for node in data['nodes']:
+    labels.append(node['name'])
+    group.append(node['group'])
+```
+
+Get the node positions, set by the Kamada-Kawai layout for 3D graphs:
+
+```python
+layt=G.layout('kk', dim=3)
+```
+
+`layt` is a list of three elements lists (the coordinates of nodes):
+
+```python
+layt[5]
+```
+
+Set data for the Plotly plot of the graph:
+
+```python
+Xn=[layt[k][0] for k in range(N)]# x-coordinates of nodes
+Yn=[layt[k][1] for k in range(N)]# y-coordinates
+Zn=[layt[k][2] for k in range(N)]# z-coordinates
+Xe=[]
+Ye=[]
+Ze=[]
+for e in Edges:
+    Xe+=[layt[e[0]][0],layt[e[1]][0], None]# x-coordinates of edge ends
+    Ye+=[layt[e[0]][1],layt[e[1]][1], None]
+    Ze+=[layt[e[0]][2],layt[e[1]][2], None]
+```
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+trace1=go.Scatter3d(x=Xe,
+               y=Ye,
+               z=Ze,
+               mode='lines',
+               line=dict(color='rgb(125,125,125)', width=1),
+               hoverinfo='none'
+               )
+
+trace2=go.Scatter3d(x=Xn,
+               y=Yn,
+               z=Zn,
+               mode='markers',
+               name='actors',
+               marker=dict(symbol='circle',
+                             size=6,
+                             color=group,
+                             colorscale='Viridis',
+                             line=dict(color='rgb(50,50,50)', width=0.5)
+                             ),
+               text=labels,
+               hoverinfo='text'
+               )
+
+axis=dict(showbackground=False,
+          showline=False,
+          zeroline=False,
+          showgrid=False,
+          showticklabels=False,
+          title=''
+          )
+
+layout = go.Layout(
+         title="Network of coappearances of characters in Victor Hugo's novel<br> Les Miserables (3D visualization)",
+         width=1000,
+         height=1000,
+         showlegend=False,
+         scene=dict(
+             xaxis=dict(axis),
+             yaxis=dict(axis),
+             zaxis=dict(axis),
+        ),
+     margin=dict(
+        t=100
+    ),
+    hovermode='closest',
+    annotations=[
+           dict(
+           showarrow=False,
+            text="Data source: <a href='http://bost.ocks.org/mike/miserables/miserables.json'>[1] miserables.json</a>",
+            xref='paper',
+            yref='paper',
+            x=0,
+            y=0.1,
+            xanchor='left',
+            yanchor='bottom',
+            font=dict(
+            size=14
+            )
+            )
+        ],    )
+```
+
+```python
+data=[trace1, trace2]
+fig=go.Figure(data=data, layout=layout)
+
+py.iplot(fig, filename='Les-Miserables')
+```
+
+#### Reference
+See https://plot.ly/python/reference/#scatter3d for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'Les-miserables-network.ipynb', 'python/3d-network-graph/', 'Python 3D Network Graphs',
+    'How to make 3D Network Graphs in Python. ',
+    title = '3D Network Graphs in Python | plotly',
+    name = '3D Network Graphs',
+    has_thumbnail='true', thumbnail='thumbnail/3dnetwork.jpg',
+    language='python', page_type='example_index',
+    display_as='3d_charts', order=13,
+    ipynb= '~notebook_demo/226')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/3d-parametric-plots.md plotly-7.1.0+dfsg1/doc/unconverted/python/3d-parametric-plots.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/3d-parametric-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/3d-parametric-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,164 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to 3D Parametric Plots in Python
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: Parametric Plots
+    order: 9
+    permalink: python/3d-parametric-plots/
+    thumbnail: thumbnail/parametric.jpg
+---
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Basic Parametric Plot
+<!-- #endregion -->
+
+```python deletable=true editable=true
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+s = np.linspace(0, 2 * np.pi, 240)
+t = np.linspace(0, np.pi, 240)
+tGrid, sGrid = np.meshgrid(s, t)
+
+r = 2 + np.sin(7 * sGrid + 5 * tGrid)  # r = 2 + sin(7s+5t)
+x = r * np.cos(sGrid) * np.sin(tGrid)  # x = r*cos(s)*sin(t)
+y = r * np.sin(sGrid) * np.sin(tGrid)  # y = r*sin(s)*sin(t)
+z = r * np.cos(tGrid)                  # z = r*cos(t)
+
+surface = go.Surface(x=x, y=y, z=z)
+data = [surface]
+
+layout = go.Layout(
+    title='Parametric Plot',
+    scene=dict(
+        xaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        ),
+        yaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        ),
+        zaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        )
+    )
+)
+
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='Parametric_plot')
+```
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Parametric Plot with Colorscale
+<!-- #endregion -->
+
+```python deletable=true editable=true
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+dphi, dtheta = np.pi / 250.0, np.pi / 250.0
+[phi, theta] = np.mgrid[0:np.pi + dphi * 1.5:dphi, 0:2 * np.pi +
+                        dtheta * 1.5:dtheta]
+m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
+
+# Applying the parametric equation..
+r = (np.sin(m0 * phi) ** m1 + np.cos(m2 * phi) ** m3 +
+     np.sin(m4 * theta) ** m5 + np.cos(m6 * theta) ** m7)
+x = r * np.sin(phi) * np.cos(theta)
+y = r * np.cos(phi)
+z = r * np.sin(phi) * np.sin(theta)
+
+
+surface = go.Surface(x=x, y=y, z=z, colorscale='Viridis')
+data = [surface]
+layout = go.Layout(
+    title='Another Parametric Plot',
+    scene=dict(
+        xaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        ),
+        yaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        ),
+        zaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        )
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='parametric-plot-viridis')
+```
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Reference
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+See https://plot.ly/python/reference/#surface for more information!
+<!-- #endregion -->
+
+```python deletable=true editable=true
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    '3d-parametric.ipynb', 'python/3d-parametric-plots/', '3D Parametric Plots | plotly',
+    'How to 3D Parameteric Plots in Python',
+    title= '3D Parametric Plots in Python | plotly',
+    name = 'Parametric Plots',
+    has_thumbnail='true', thumbnail='thumbnail/parametric.jpg',
+    language='python',
+    display_as='3d_charts', order=9,
+    ipynb= '~notebook_demo/69')
+```
+
+```python deletable=true editable=true
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/3d-point-clustering.md plotly-7.1.0+dfsg1/doc/unconverted/python/3d-point-clustering.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/3d-point-clustering.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/3d-point-clustering.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,100 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to cluster points in 3d with alpha shapes in plotly and Python
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3d Clustering
+    order: 14
+    permalink: python/3d-point-clustering/
+    thumbnail: thumbnail/3d-clusters.jpg
+---
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### 3D Clustering with Alpha Shapes
+<!-- #endregion -->
+
+```python deletable=true editable=true
+import plotly.plotly as py
+import pandas as pd
+
+df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/alpha_shape.csv')
+df.head()
+
+scatter = dict(
+    mode = "markers",
+    name = "y",
+    type = "scatter3d",
+    x = df['x'], y = df['y'], z = df['z'],
+    marker = dict( size=2, color="rgb(23, 190, 207)" )
+)
+clusters = dict(
+    alphahull = 7,
+    name = "y",
+    opacity = 0.1,
+    type = "mesh3d",
+    x = df['x'], y = df['y'], z = df['z']
+)
+layout = dict(
+    title = '3d point clustering',
+    scene = dict(
+        xaxis = dict( zeroline=False ),
+        yaxis = dict( zeroline=False ),
+        zaxis = dict( zeroline=False ),
+    )
+)
+fig = dict( data=[scatter, clusters], layout=layout )
+# Use py.iplot() for IPython notebook
+py.iplot(fig, filename='3d point clustering')
+```
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Reference
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+See https://plot.ly/python/reference/#mesh3d for more information regarding subplots!
+<!-- #endregion -->
+
+```python deletable=true editable=true
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    '3d-clusters.ipynb', 'python/3d-point-clustering/', 'Python 3D Clustering | plotly',
+    'How to cluster points in 3d with alpha shapes in plotly and Python',
+    title= '3D Point Clustering in Python | plotly',
+    name = '3d Clustering',
+    has_thumbnail='true', thumbnail='thumbnail/3d-clusters.jpg',
+    language='python',
+    display_as='3d_charts', order=14,
+    ipynb= '~notebook_demo/74')
+```
+
+```python deletable=true editable=true
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/3d-wireframe-plots.md plotly-7.1.0+dfsg1/doc/unconverted/python/3d-wireframe-plots.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/3d-wireframe-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/3d-wireframe-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,113 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make wireframe plots in Python
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: 3D Wireframe Plots
+    order: 8
+    permalink: python/3d-wireframe-plots/
+    thumbnail: thumbnail/wireframe.jpg
+---
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Basic Wireframe Plot
+<!-- #endregion -->
+
+```python deletable=true editable=true
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+# Creating the data
+x = np.linspace(-5, 5, 50)
+y = np.linspace(-5, 5, 50)
+xGrid, yGrid = np.meshgrid(y, x)
+R = np.sqrt(xGrid ** 2 + yGrid ** 2)
+z = np.sin(R)
+
+# Creating the plot
+lines = []
+line_marker = dict(color='#0066FF', width=2)
+for i, j, k in zip(xGrid, yGrid, z):
+    lines.append(go.Scatter3d(x=i, y=j, z=k, mode='lines', line=line_marker))
+
+layout = go.Layout(
+    title='Wireframe Plot',
+    scene=dict(
+        xaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        ),
+        yaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        ),
+        zaxis=dict(
+            gridcolor='rgb(255, 255, 255)',
+            zerolinecolor='rgb(255, 255, 255)',
+            showbackground=True,
+            backgroundcolor='rgb(230, 230,230)'
+        )
+    ),
+    showlegend=False,
+)
+fig = go.Figure(data=lines, layout=layout)
+py.iplot(fig, filename='wireframe_plot')
+```
+
+<!-- #region {"deletable": true, "editable": true} -->
+#### Reference
+<!-- #endregion -->
+
+<!-- #region {"deletable": true, "editable": true} -->
+See https://plot.ly/python/reference/#scatter3d for more information!
+<!-- #endregion -->
+
+```python deletable=true editable=true
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    '3d-wireframe.ipynb', 'python/3d-wireframe-plots/', 'Python Wireframe Plots | plotly',
+    'How to make wireframe plots in Python',
+    title= '3D Wireframe Plots in Python | plotly',
+    name = '3D Wireframe Plots',
+    has_thumbnail='true', thumbnail='thumbnail/wireframe.jpg',
+    language='python',
+    display_as='3d_charts', order=8,
+    ipynb= '~notebook_demo/68')
+```
+
+```python deletable=true editable=true
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/amazon-redshift.md plotly-7.1.0+dfsg1/doc/unconverted/python/amazon-redshift.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/amazon-redshift.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/amazon-redshift.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,432 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: A tutorial showing how to plot Amazon AWS Redshift data with Plotly.
+    display_as: databases
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Plot Data From Amazon Redshift
+    order: 3
+    page_type: example_index
+    permalink: python/amazon-redshift/
+    redirect_from: ipython-notebooks/amazon-redshift/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+This notebook will go over one of the easiest ways to graph data from your [Amazon Redshift data warehouse](http://aws.amazon.com/redshift/) using [Plotly's public platform](https://plot.ly/) for publishing beautiful, interactive graphs from Python to the web.
+
+[Plotly's Enterprise platform](https://plot.ly/product/enterprise/) allows for an easy way for your company to build and share graphs without the data leaving your servers.
+
+#### Imports
+In this notebook we'll be using [Amazon's Sample Redshift Data](http://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) for this notebook. Although we won't be connecting through a JDBC/ODBC connection we'll be using the [psycopg2 package](http://initd.org/psycopg/docs/index.html) with [SQLAlchemy](http://www.sqlalchemy.org/)  and [pandas](http://pandas.pydata.org/) to make it simple to query and analyze our data.
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.tools as tls
+import pandas as pd
+import os
+import requests
+requests.packages.urllib3.disable_warnings() # this squashes insecure SSL warnings - DO NOT DO THIS ON PRODUCTION!
+```
+
+#### Connect to Redshift
+You'll need your [Redshift Endpoint URL](http://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-connect-to-cluster.html) in order to access your Redshift instance. I've obscured mine below but yours will be in a format similar to `datawarehouse.some_chars_here.region_name.redshift.amazonaws.com`. Connecting to Redshift is made extremely simple once you've set your cluster configuration. This configuration needs to include the username, password, port, host and database name. I've opted to store mine as environmental variables on my machine.
+
+
+```python
+redshift_endpoint = os.getenv("REDSHIFT_ENDPOINT")
+redshift_user = os.getenv("REDSHIFT_USER")
+redshift_pass = os.getenv("REDSHIFT_PASS")
+port = 5439
+dbname = 'dev'
+```
+
+As I mentioned there are numerous ways to connect to a Redshift database and I've included two below. We can use either the SQLAlchemy package or we can use the psycopg2 package for a more direct access.
+
+Both will allow us to execute SQL queries and get results however the SQLAlchemy engine makes it a bit easier to directly return our data as a dataframe using pandas. Plotly has a tight integration with pandas as well, making it extremely easy to make interactive graphs to share with your company.
+
+
+#### SQLAlchemy
+
+```python
+from sqlalchemy import create_engine
+engine_string = "postgresql+psycopg2://%s:%s@%s:%d/%s" \
+% (redshift_user, redshift_pass, redshift_endpoint, port, dbname)
+engine = create_engine(engine_string)
+```
+
+#### Psycopg2
+
+```python
+import psycopg2
+conn = psycopg2.connect(
+    host="datawarehouse.cm4z2iunjfsc.us-west-2.redshift.amazonaws.com",
+    user=redshift_user,
+    port=port,
+    password=redshift_pass,
+    dbname=dbname)
+cur = conn.cursor() # create a cursor for executing queries
+```
+
+#### Load Data
+
+This next section goes over loading in the sample data from Amazon's sample database. This is strictly for the purposes of the tutorial so feel free to skim this section if you're going to be working with your own data.
+
+-----------------START DATA LOADING-----------------
+
+```python
+cur.execute("""drop table users;
+
+drop table venue;
+
+drop table category;
+
+drop table date;
+
+drop table event;
+
+drop table listing;
+
+drop table sales;""")
+conn.commit()
+```
+
+```python
+aws_key = os.getenv("AWS_ACCESS_KEY_ID") # needed to access S3 Sample Data
+aws_secret = os.getenv("AWS_SECRET_ACCESS_KEY")
+
+base_copy_string = """copy %s from 's3://awssampledbuswest2/tickit/%s.txt'
+credentials 'aws_access_key_id=%s;aws_secret_access_key=%s'
+delimiter '%s';""" # the base COPY string that we'll be using
+
+#easily generate each table that we'll need to COPY data from
+tables = ["users", "venue", "category", "date", "event", "listing"]
+data_files = ["allusers_pipe", "venue_pipe", "category_pipe", "date2008_pipe", "allevents_pipe", "listings_pipe"]
+delimiters = ["|", "|", "|", "|", "|", "|", "|"]
+
+#the generated COPY statements we'll be using to load data;
+copy_statements = []
+for tab, f, delim in zip(tables, data_files, delimiters):
+    copy_statements.append(base_copy_string % (tab, f, aws_key, aws_secret, delim))
+
+# add in Sales data, delimited by '\t'
+copy_statements.append("""copy sales from 's3://awssampledbuswest2/tickit/sales_tab.txt'
+credentials 'aws_access_key_id=%s;aws_secret_access_key=%s'
+delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS';""" % (aws_key, aws_secret))
+```
+
+```python
+# Create Table Statements
+cur.execute("""
+create table users(
+	userid integer not null distkey sortkey,
+	username char(8),
+	firstname varchar(30),
+	lastname varchar(30),
+	city varchar(30),
+	state char(2),
+	email varchar(100),
+	phone char(14),
+	likesports boolean,
+	liketheatre boolean,
+	likeconcerts boolean,
+	likejazz boolean,
+	likeclassical boolean,
+	likeopera boolean,
+	likerock boolean,
+	likevegas boolean,
+	likebroadway boolean,
+	likemusicals boolean);
+
+create table venue(
+	venueid smallint not null distkey sortkey,
+	venuename varchar(100),
+	venuecity varchar(30),
+	venuestate char(2),
+	venueseats integer);
+
+create table category(
+	catid smallint not null distkey sortkey,
+	catgroup varchar(10),
+	catname varchar(10),
+	catdesc varchar(50));
+
+create table date(
+	dateid smallint not null distkey sortkey,
+	caldate date not null,
+	day character(3) not null,
+	week smallint not null,
+	month character(5) not null,
+	qtr character(5) not null,
+	year smallint not null,
+	holiday boolean default('N'));
+
+create table event(
+	eventid integer not null distkey,
+	venueid smallint not null,
+	catid smallint not null,
+	dateid smallint not null sortkey,
+	eventname varchar(200),
+	starttime timestamp);
+
+create table listing(
+	listid integer not null distkey,
+	sellerid integer not null,
+	eventid integer not null,
+	dateid smallint not null  sortkey,
+	numtickets smallint not null,
+	priceperticket decimal(8,2),
+	totalprice decimal(8,2),
+	listtime timestamp);
+
+create table sales(
+	salesid integer not null,
+	listid integer not null distkey,
+	sellerid integer not null,
+	buyerid integer not null,
+	eventid integer not null,
+	dateid smallint not null sortkey,
+	qtysold smallint not null,
+	pricepaid decimal(8,2),
+	commission decimal(8,2),
+	saletime timestamp);""")
+```
+
+```python
+for copy_statement in copy_statements: # execute each COPY statement
+    cur.execute(copy_statement)
+conn.commit()
+```
+
+```python
+for table in tables + ["sales"]:
+    cur.execute("select count(*) from %s;" % (table,))
+    print(cur.fetchone())
+conn.commit() # make sure data went through and commit our statements permanently.
+```
+
+-----------------END DATA LOADING-----------------
+
+
+Now that we've loaded some data into our Redshift cluster, we can start running queries against it.
+
+We're going to start off by exploring and presenting some of our user's tastes and habits. Pandas makes it easy to query our data base and get back a dataframe in return. In this query, I'm simply getting the preferences of our users. What kinds of events do they like?
+
+```python
+df = pd.read_sql_query("""
+SELECT sum(likesports::int) as sports, sum(liketheatre::int) as theatre,
+sum(likeconcerts::int) as concerts, sum(likejazz::int) as jazz,
+sum(likeclassical::int) as classical, sum(likeopera::int) as opera,
+sum(likerock::int) as rock, sum(likevegas::int) as vegas,
+sum(likebroadway::int) as broadway, sum(likemusicals::int) as musical,
+state
+FROM users
+GROUP BY state
+ORDER BY state asc;
+""", engine)
+```
+
+Now that I've gotten a DataFrame back, let's make a quick heatmap using plotly.
+
+```python
+data = [
+        go.Heatmap(
+            z = df.drop('state', axis=1).values,
+            x = df.drop('state', axis=1).columns,
+            y = df.state,
+            colorscale = 'Hot'
+        )
+    ]
+layout = go.Layout(title="State and Music Tastes", yaxis=dict(tickmode='linear', dtick=1))
+py.iplot(Figure(data=data, layout=layout), filename='redshift/state and music taste heatmap', height=1000)
+```
+
+*the above graph is interactive, click and drag to zoom, double click to return to initial layout, shift click to pan*
+
+
+This graph is simple to produce and even more simple to explore. The interactivity makes it great for those that aren't completely familiar with heatmaps.
+
+Looking at this particular one we can easily get a sense of popularity. We can see here that sports events don't seem to be particularly popular among our users and that certain states have much higher preferences (and possibly users) than others.
+
+A common next step might be to create some box plots of these user preferences.
+
+```python
+layout = go.Layout(title="Declared User Preference Box Plots",
+                yaxis=dict())
+
+data = []
+for pref in df.drop('state', axis=1).columns:
+    # for every preference type, make a box plot
+    data.append(go.Box(y=df[pref], name=pref))
+
+py.iplot(go.Figure(data=data, layout=layout), filename='redshift/user preference box plots')
+```
+
+*the above graph is interactive, click and drag to zoom, double click to return to initial layout, shift click to pan*
+
+
+It seems to be that sports are just a bit more compressed than the rest. This may be because there's simply fewer people interested in sports or our company doesn't have many sporting events.
+
+
+Now that we've explored a little bit about some of our customers we've stumbled upon this sports anomoly. Are we listing less sports events? Do we sell approximately the same amount of all event types and our users just aren't drawn to sports events?
+
+We've got to understand a bit more and to do so we'll be plotting a simple bar graph of our event information.
+
+```python
+df = pd.read_sql_query("""
+SELECT sum(event.catid) as category_sum, catname as category_name
+FROM event, category
+where event.catid = category.catid
+GROUP BY category.catname
+""", engine)
+```
+
+```python
+layout = go.Layout(title="Event Categories Sum", yaxis=dict(title="Sum"))
+data = [go.Bar(x=df.category_name, y=df.category_sum)]
+py.iplot(go.Figure(data=data, layout=layout))
+```
+
+It's a good thing we started exploring this data because we've got to rush to management and report the discrepancy between our users' preferences and the kinds of events that we're hosting! Luckily, sharing plotly's graphs is extremely easy using the `play with this data` link at the bottom right.
+
+However for our report, let's dive a bit deeper into the events that we're listing and when we're listing them. Maybe we're trending upwards with certain event types?
+
+```python
+df = pd.read_sql_query("""
+SELECT sum(sales.qtysold) as quantity_sold, date.caldate
+FROM sales, date
+WHERE sales.dateid = date.dateid
+GROUP BY date.caldate
+ORDER BY date.caldate asc;
+""", engine)
+```
+
+```python
+layout = go.Layout(title="Event Sales Per Day", yaxis=dict(title="Sales Quantity"))
+data = [go.Scatter(x=df.caldate, y=df.quantity_sold)]
+py.iplot(go.Figure(data=data, layout=layout))
+```
+
+```
+Overall it seems inconclusive except that our events seem to be seasonal. This aggregate graph doesn't show too much so it's likely worth exploring a bit more about each category.
+```
+
+```python
+df = pd.read_sql_query("""
+SELECT sum(sales.qtysold) as quantity_sold, date.caldate, category.catname as category_name
+FROM sales, date, event, category
+WHERE sales.dateid = date.dateid
+AND sales.eventid = event.eventid
+AND event.catid = category.catid
+GROUP BY date.caldate, category_name
+ORDER BY date.caldate asc;
+""", engine)
+```
+
+It's always great to try and better understand which graph type conveys your message the best. Sometimes subplots do the best and other times it's best to put them all on one graph. Plotly makes it easy to do either one!
+
+```python
+data = []
+for count, (name, g) in enumerate(df.groupby("category_name")):
+    data.append(go.Scatter(
+            name=name,
+            x=g.caldate,
+            y=g.quantity_sold,
+            xaxis='x' + str(count + 1),
+            yaxis='y' + str(count + 1)
+        ))
+
+fig = tls.make_subplots(rows=2,cols=2)
+fig['layout'].update(title="Event Sales Per Day By Category")
+fig['data'] += data
+py.iplot(fig)
+```
+
+The above subplots seem to tell an interesting story although it's important to note that with subplots the axes are not always aligned. So let's try plotting all of them together, with lines for each category.
+
+```python
+data = []
+for name, g in df.groupby("category_name"):
+    data.append(go.Scatter(
+            name=name,
+            x=g.caldate,
+            y=g.quantity_sold
+        ))
+
+fig = go.Figure()
+fig['layout'].update(title="Event Sales Per Day By Category")
+fig['data'] += data
+py.iplot(fig, filename='redshift/Event Sales Per Day by Category')
+```
+
+This looks much better and explains the story perfectly. It seems that all of our events are fairly regular through the year except for a spike in musicals and plays around March. This might be of interest to so I'm going to mark up this graph and share it with some of the relevant sales representatives in my company.
+
+The rest of my team can edit the graph with me in a web app. Collaborating does not require coding, emailing, or downloading software. I can even fit a function to the data in the web app.
+
+```python
+from IPython.display import Image
+```
+
+```python
+Image(url="http://i.imgur.com/nUVihzx.png")
+```
+
+```python
+tls.embed("https://plot.ly/~bill_chambers/195")
+```
+
+Plotly makes it easier for data analysts and data scientists to share data in meaningful ways. By marking up drawings and embedding comments on the graph, I can make sure that I'm sharing everything within a context. Rather than having to send a static image, I can share an interactive plot a coworker can explore and understand as well. Plotly makes it easy for companies to make sure that information is conveyed in the right context.
+
+#### References
+Learn more about:
+- [Amazon Redshift Data Warehouse](http://aws.amazon.com/redshift/)
+- [Chart Studio Enterprise - Plotly Hosted on your servers](https://plot.ly/product/enterprise/)
+- [Subplots in Plotly](https://plot.ly/python/subplots/)
+- [Creating a plot of best fit](https://plot.ly/online-graphing/tutorials/create-a-line-of-best-fit-online/)
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'redshift.ipynb', 'python/amazon-redshift/', 'Plot Data From Amazon Redshift',
+    'A tutorial showing how to plot Amazon AWS Redshift data with Plotly.',
+    title = 'Plot Data from Amazon Redshift | plotly',
+    has_thumbnail='false', redirect_from='ipython-notebooks/amazon-redshift/',
+    language='python', page_type='example_index',
+    display_as='databases', order=3,
+    ipynb= '~notebook_demo/1')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/anova.md plotly-7.1.0+dfsg1/doc/unconverted/python/anova.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/anova.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/anova.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,136 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform a one and two way ANOVA test using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Anova
+    order: 8
+    page_type: example_index
+    permalink: python/anova/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/), and [Statsmodels](http://statsmodels.sourceforge.net/stable/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+
+import statsmodels
+import statsmodels.api as sm
+from statsmodels.formula.api import ols
+```
+
+#### One-Way ANOVA
+
+
+An `Analysis of Variance Test` or an `ANOVA` is a generalization of the t-tests to more than 2 groups. Our null hypothesis states that there are equal means in the populations from which the groups of data were sampled. More succinctly:
+
+$$
+\begin{align*}
+\mu_1 = \mu_2 = ... = \mu_n
+\end{align*}
+$$
+
+for $n$ groups of data. Our alternative hypothesis would be that any one of the equivalences in the above equation fail to be met.
+
+```python
+moore = sm.datasets.get_rdataset("Moore", "car", cache=True)
+
+data = moore.data
+data = data.rename(columns={"partner.status" :"partner_status"})  # make name pythonic
+
+moore_lm = ols('conformity ~ C(fcategory, Sum)*C(partner_status, Sum)', data=data).fit()
+table = sm.stats.anova_lm(moore_lm, typ=2) # Type 2 ANOVA DataFrame
+
+print(table)
+```
+
+In this ANOVA test, we are dealing with an `F-Statistic` and not a `p-value`. Their connection is integral as they are two ways of expressing the same thing. When we set a `significance level` at the start of our statistical tests (usually 0.05), we are saying that if our variable in question takes on the 5% ends of our distribution, then we can start to make the case that there is evidence against the null, which states that the data belongs to _this particular distribution_.
+
+The F value is the point such that the area of the curve past that point to the tail is just the p-value. Therefore:
+
+$$
+\begin{align*}
+Pr(>F) = p
+\end{align*}
+$$
+
+For more information on the choice of 0.05 for a significance level, check out [this page](http://www.investopedia.com/exam-guide/cfa-level-1/quantitative-methods/hypothesis-testing.asp).
+
+
+Let us import some data for our next analysis. This time some data on tooth growth:
+
+```python
+data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/tooth_growth_csv')
+df = data[0:10]
+
+table = FF.create_table(df)
+py.iplot(table, filename='tooth-data-sample')
+```
+
+#### Two-Way ANOVA
+
+
+In a `Two-Way ANOVA`, there are two variables to consider. The question is whether our variable in question (tooth length `len`) is related to the two other variables `supp` and `dose` by the equation:
+
+$$
+\begin{align*}
+len = supp + dose + supp \times dose
+\end{align*}
+$$
+
+```python
+formula = 'len ~ C(supp) + C(dose) + C(supp):C(dose)'
+model = ols(formula, data).fit()
+aov_table = statsmodels.stats.anova.anova_lm(model, typ=2)
+print(aov_table)
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Anova.ipynb', 'python/anova/', 'Anova | plotly',
+    'Learn how to perform a one and two way ANOVA test using Python.',
+    title='Anova in Python | plotly',
+    name='Anova',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=8,
+    ipynb= '~notebook_demo/108')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/apache-spark.md plotly-7.1.0+dfsg1/doc/unconverted/python/apache-spark.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/apache-spark.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/apache-spark.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,290 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: A tutorial showing how to plot Apache Spark DataFrames with Plotly
+    display_as: databases
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Plot Data from Apache Spark
+    order: 2
+    page_type: example_index
+    permalink: python/apache-spark/
+    redirect_from: ipython-notebooks/apache-spark/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+<!-- #region -->
+#### About Apache Spark
+[Apache Spark](https://spark.apache.org/)'s meteoric rise has been incredible. It is one of the fastest growing open source projects and is a perfect fit for the graphing tools that [Plotly](https://plot.ly/) provides. Plotly's ability to graph and share images from [Spark DataFrames](https://spark.apache.org/docs/latest/sql-programming-guide.html) quickly and easily make it a great tool for any data scientist and [Chart Studio Enterprise](https://plot.ly/product/enterprise/) make it easy to securely host and share those Plotly graphs.
+
+This notebook will go over the details of getting set up with IPython Notebooks for graphing Spark data with Plotly.
+
+#### Create a Profile
+First you'll have to create an ipython profile for pyspark, you can do this locally or you can do it on the cluster that you're running Spark.
+
+Start off by creating a new ipython profile. (Spark should have ipython install but you may need to install ipython notebook yourself).
+
+```sh
+ipython profile create pyspark
+```
+
+Next you'll have to edit some configurations. Spark/Hadoop have plenty of ports that they open up so you'll have to change the below file to avoid any conflicts that might come up.
+
+```sh
+~/.ipython/profile_pyspark/ipython_notebook_config.py
+```
+
+If you're not running Spark locally, you'll have to add some other configurations. [Cloudera's blog](http://blog.cloudera.com/blog/2014/08/how-to-use-ipython-notebook-with-apache-spark/) has a great post about some of the other things you can add, like passwords.
+
+IPython's documentation also has some excellent recommendations for settings that you can find on [the "Securing a Notebook Server" post on ipython.org.](http://ipython.org/ipython-doc/3/notebook/public_server.html#running-a-notebook-server)
+
+You'll likely want to set a port, and an IP address to be able to access the notebook.
+
+Next you'll need to set a couple of environmental variables. You can do this at the command line or you can set it up in your computer's/master node's bash_rc/bash_profile files.
+
+
+```sh
+export SPARK_HOME="$HOME/Downloads/spark-1.3.1"
+```
+<!-- #endregion -->
+
+<!-- #region -->
+#### Setup
+Now we'll need to add a file to make sure that we boot up with the Spark Context. Basically when we start the IPython Notebook, we need to be bring in the Spark Context. We need to set up a startup script that runs everytime we start a notebook from this profile.
+
+Setting startup scripts are actually extremely easy - you just put them in the IPython Notebook directory under the "startup" folder. You can learn more about IPython configurations on the [IPython site](http://ipython.org/ipython-doc/1/config/overview.html).
+
+We'll create a file called `pyspark_setup.py`
+
+in it we'll put
+
+```py
+import os
+import sys
+
+spark_home = os.environ.get('SPARK_HOME', None)
+
+# check if it exists
+if not spark_home:
+    raise ValueError('SPARK_HOME environment variable is not set')
+
+# check if it is a directory
+if not os.path.isdir(spark_home):
+    raise ValueError('SPARK_HOME environment variable is not a directory')
+
+#check if we can find the python sub-directory
+if not os.path.isdir(os.path.join(spark_home, 'python')):
+    raise ValueError('SPARK_HOME directory does not contain python')
+
+sys.path.insert(0, os.path.join(spark_home, 'python'))
+
+#check if we can find the py4j zip file
+if not os.path.exists(os.path.join(spark_home, 'python/lib/py4j-0.8.2.1-src.zip')):
+    raise ValueError('Could not find the py4j library - \
+            maybe your version number is different?(Looking for 0.8.2.1)')
+
+sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.8.2.1-src.zip'))
+
+with open(os.path.join(spark_home, 'python/pyspark/shell.py')) as f:
+    code = compile(f.read(), os.path.join(spark_home, 'python/pyspark/shell.py'), 'exec')
+    exec(code)
+```
+
+And now we're all set! When we start up an ipython notebook, we'll have the Spark Context available in our IPython notebooks. This is one time set up! So now we're ready to run things normally! We just have to start a specific pyspark profile.
+
+`ipython notebook --profile=pyspark`
+
+We can test for the Spark Context's existence with `print sc`.
+<!-- #endregion -->
+
+```python
+print(sc)
+```
+
+#### Spark Tools
+Now that we've got the SparkContext, let's pull in some other useful Spark tools that we'll need. We'll be using pandas for some downstream analysis as well as Plotly for our graphing.
+
+We'll also need the SQLContext to be able to do some nice Spark SQL transformations.
+
+```python
+from pyspark.sql import SQLContext
+sqlContext = SQLContext(sc)
+
+import plotly.plotly as py
+import plotly.graph_objs as go
+import pandas as pd
+import requests
+requests.packages.urllib3.disable_warnings()
+```
+
+The data we'll be working with is a sample of the [open bike rental data.](http://www.bayareabikeshare.com/datachallenge) Essentially people can rent bikes and ride them from one station to another. This data provides that information. [You can snag the sample I am using in JSON format here.](https://github.com/anabranch/Interactive-Graphs-with-Plotly/raw/master/btd2.json).
+
+Now we can import it.
+
+```python
+btd = sqlContext.jsonFile("btd2.json")
+```
+
+Now we can see that it's a DataFrame by printing its type.
+
+```python
+print(type(btd))
+```
+
+Now **RDD** is the base abstraction of Apache Spark, it's the Resilient Distributed Dataset. It is an immutable, partitioned collection of elements that can be operated on in a distributed manner. The DataFrame builds on that but is also immutable - meaning you've got to think in terms of transformations - not just manipulations.
+
+Because we've got a json file, we've loaded it up as a DataFrame - a new introduction in Spark 1.3. The DataFrame interface which is similar to pandas style DataFrames except for that immutability described above.
+
+
+We can print the schema easily, which gives us the layout of the data. Everything that I'm describing can be [found in the Pyspark SQL documentation.](https://spark.apache.org/docs/latest/api/python/pyspark.sql.htm)
+
+```python
+btd.printSchema()
+```
+
+We can grab a couple, to see what the layout looks like.
+
+```python
+btd.take(3)
+```
+
+Now one thing I'd like to look at is the duration distribution - can we see how common certain ride times are?
+
+To answer that we'll get the durations and the way we'll be doing it is through the Spark SQL Interface. To do so we'll register it as a table.
+
+```python
+sqlCtx.registerDataFrameAsTable(btd, "bay_area_bike")
+```
+
+Now as you may have noted above, the durations are in seconds. Let's start off by looking at all rides under 2 hours.
+
+```python
+60 * 60 * 2 # 2 hours in seconds
+```
+
+```python
+df2 = sqlCtx.sql("SELECT Duration as d1 from bay_area_bike where Duration < 7200")
+```
+
+We've created a new DataFrame from the transformation and query - now we're ready to plot it. One of the great things about plotly is that you can throw very large datasets at it and it will do just fine. It's certainly a much more scalable solution than matplotlib.
+
+Below I create a histogram of the data.
+
+```python
+data = [go.Histogram(x=df2.toPandas()['d1'])]
+```
+
+```python
+py.iplot(data, filename="spark/less_2_hour_rides")
+```
+
+That was simple and we can see that plotly was able to handle the data without issue. We can see that big uptick in rides that last less than ~30 minutes (2000 seconds) - so let's look at that distribution.
+
+```python
+df3 = sqlCtx.sql("SELECT Duration as d1 from bay_area_bike where Duration < 2000")
+```
+
+A great thing about Apache Spark is that you can sample easily from large datasets, you just set the amount you would like to sample and you're all set. Plotly converts those samples into beautifully overlayed histograms. This is a great way to eyeball different distributions.
+
+```python
+s1 = df2.sample(False, 0.05, 20)
+s2 = df3.sample(False, 0.05, 2500)
+
+data = [
+        go.Histogram(x=s1.toPandas()['d1'], name="Large Sample"),
+        go.Histogram(x=s2.toPandas()['d1'], name="Small Sample")
+    ]
+
+py.iplot(data, filename="spark/sample_rides")
+```
+
+What's really powerful about Plotly is sharing this data is simple. I can take the above graph and change the styling or bins visually. A common workflow is to make a rough sketch of the graph in code, then make a more refined version with notes to share with management like the one below. Plotly's online interface allows you to edit graphs in other languages as well.
+
+```python
+import plotly.tools as tls
+tls.embed("https://plot.ly/~bill_chambers/101")
+```
+
+Now let's check out bike rentals from individual stations. We can do a groupby with Spark DataFrames just as we might in Pandas. We've also seen at this point how easy it is to convert a Spark DataFrame to a pandas DataFrame.
+
+```python
+dep_stations = btd.groupBy(btd['Start Station']).count().toPandas().sort('count', ascending=False)
+dep_stations['Start Station'][:3] # top 3 stations
+```
+
+we'll add a handy function to help us convert all of these into appropriate count data. We're just using pandas resampling function to turn this into day count data.
+
+```python
+def transform_df(df):
+    df['counts'] = 1
+    df['Start Date'] = df['Start Date'].apply(pd.to_datetime)
+    return df.set_index('Start Date').resample('D', how='sum')
+
+pop_stations = [] # being popular stations - we could easily extend this to more stations
+for station in dep_stations['Start Station'][:3]:
+    temp = transform_df(btd.where(btd['Start Station'] == station).select("Start Date").toPandas())
+    pop_stations.append(
+        go.Scatter(
+        x=temp.index,
+        y=temp.counts,
+        name=station
+        )
+    )
+
+data = pop_stations
+py.iplot(data, filename="spark/over_time")
+```
+
+Interestingly we can see similar patterns for the Embarcadero and Ferry Buildings. We also get a consistent break between work weeks and work days. There also seems to be an interesting pattern between fall and winter usage for the downtown stations that doesn't seem to affect the Caltrain station.
+
+
+#### References
+You can learn more about Chart Studio Enterprise and collaboration tools with the links below:
+- [Collaborations and Language Support](https://plot.ly/ipython-notebooks/collaboration/)
+- [Network Graphing](https://plot.ly/ipython-notebooks/network-graphs/)
+- [Maps with Plotly](https://plot.ly/ipython-notebooks/basemap-maps/)
+- [Chart Studio Enterprise](https://plot.ly/product/enterprise/)
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'apachespark.ipynb', 'python/apache-spark/', 'Plot Data from Apache Spark',
+    'A tutorial showing how to plot Apache Spark DataFrames with Plotly',
+    title='Plotting Spark DataFrames | Plotly', has_thumbnail='false',
+    language='python', page_type='example_index', display_as='databases', order=2,
+    redirect_from= 'ipython-notebooks/apache-spark/')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/average_multiple_curves.md plotly-7.1.0+dfsg1/doc/unconverted/python/average_multiple_curves.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/average_multiple_curves.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/average_multiple_curves.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,112 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to average the values of multiple curves with Python.
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Average Multiple Curves
+    order: 9
+    page_type: example_index
+    permalink: python/average_multiple_curves/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Average of 2 Curves
+
+
+Given two curves defined by functions $f$ and $g$ on $\mathbb{R} \rightarrow \mathbb{R}$, **the average curve** $h$ of $f$ and $g$ is defined by $h = \frac{f(x) + g(x)}{2} $ for $x \in \mathbb{R}$.
+
+```python
+x = np.linspace(0, 2*np.pi, 100)
+f = np.sin(x)
+g = np.cos(x)
+h = [(f[j] + g[j])/2 for j in range(len(x))]
+
+trace1 = go.Scatter(
+    x=x,
+    y=f,
+    mode='lines',
+    name='f(x)',
+    marker=dict(
+        color='rgb(220, 20, 60)'
+    )
+)
+
+trace2 = go.Scatter(
+    x=x,
+    y=g,
+    mode='lines',
+    name='g(x)',
+    marker=dict(
+        color='rgb(100, 149, 237)'
+    )
+)
+
+trace3 = go.Scatter(
+    x=x,
+    y=h,
+    mode='markers+lines',
+    name='Average of f and g',
+    marker=dict(
+        color='rgb(128, 0, 128)',
+        symbol='diamond-open',
+    )
+)
+
+data = [trace1, trace2, trace3]
+py.iplot(data, filename='2-curves')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Average_Multiple_Curves.ipynb', 'python/average_multiple_curves/', 'Average Multiple Curves | plotly',
+    'Learn how to average the values of multiple curves with Python.',
+    title='Average Multiple Curves in Python | plotly',
+    name='Average Multiple Curves',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=9,
+    ipynb= '~notebook_demo/107')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/baseline-detection.md plotly-7.1.0+dfsg1/doc/unconverted/python/baseline-detection.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/baseline-detection.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/baseline-detection.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,113 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to detect baselines on data in Python.
+    display_as: peak-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Baseline Detection
+    order: 1
+    page_type: example_index
+    permalink: python/baseline-detection/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [PeakUtils](http://pythonhosted.org/PeakUtils/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+import scipy
+import peakutils
+```
+
+#### Import Data
+For our baseline detection example, we will import some data on milk production by month:
+
+```python
+milk_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv')
+time_series = milk_data['Monthly milk production (pounds per cow)']
+time_series = np.asarray(time_series)
+
+df = milk_data[0:15]
+
+table = ff.create_table(df)
+py.iplot(table, filename='milk-production-dataframe')
+```
+
+#### Plot with Baseline
+
+```python
+# calculate baseline y values
+baseline_values = peakutils.baseline(time_series)
+
+trace = go.Scatter(
+    x=[j for j in range(len(time_series))],
+    y=time_series,
+    mode='lines',
+    marker=dict(
+        color='#B292EA',
+    ),
+    name='Original Plot'
+)
+
+trace2 = go.Scatter(
+    x=[j for j in range(len(time_series))],
+    y=baseline_values,
+    mode='markers',
+    marker=dict(
+        size=3,
+        color='#EB55BF',
+        symbol='circle-open'
+    ),
+    name='Baseline'
+)
+
+data = [trace, trace2]
+py.iplot(data, filename='milk-production-plot-with-baseline')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Baseline-Detection.ipynb', 'python/baseline-detection/', 'Baseline Detection | plotly',
+    'Learn how to detect baselines on data in Python.',
+    title='Baseline Detection in Python | plotly',
+    name='Baseline Detection',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='peak-analysis', order=1,
+    ipynb= '~notebook_demo/117')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/baseline-subtraction.md plotly-7.1.0+dfsg1/doc/unconverted/python/baseline-subtraction.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/baseline-subtraction.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/baseline-subtraction.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,145 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to subtract baseline estimates from data in Python.
+    display_as: peak-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Baseline Subtraction
+    order: 2
+    page_type: example_index
+    permalink: python/baseline-subtraction/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [PeakUtils](http://pythonhosted.org/PeakUtils/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.tools as tools
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+import scipy
+import peakutils
+```
+
+#### Import Data
+As with our baseline detection example, we will import some data on milk production by month:
+
+```python
+milk_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv')
+time_series = milk_data['Monthly milk production (pounds per cow)']
+time_series = np.asarray(time_series)
+
+df = milk_data[0:15]
+
+table = ff.create_table(df)
+py.iplot(table, filename='milk-production-dataframe')
+```
+
+#### Plot with Baseline
+To subtract a baseline estimate from our data, it is a good idea to first we must first calculate the baseline values then plot the data with the baseline drawn in.
+
+```python
+baseline_values = peakutils.baseline(time_series)
+
+trace = go.Scatter(
+    x=[j for j in range(len(time_series))],
+    y=time_series,
+    mode='lines',
+    marker=dict(
+        color='#547C66',
+    ),
+    name='Original Plot'
+)
+
+trace2 = go.Scatter(
+    x=[j for j in range(len(time_series))],
+    y=baseline_values,
+    mode='markers',
+    marker=dict(
+        size=3,
+        color='#EB55BF',
+        symbol='circle-open'
+    ),
+    name='Baseline'
+)
+
+data = [trace, trace2]
+py.iplot(data, filename='milk-production-plot-with-baseline')
+```
+
+#### Baseline Subtraction
+
+```python
+baseline_values = peakutils.baseline(time_series)
+
+trace = go.Scatter(
+    x=[j for j in range(len(time_series))],
+    y=time_series,
+    mode='lines',
+    marker=dict(
+        color='#547C66',
+    ),
+    name='Original Plot'
+)
+
+trace2 = go.Scatter(
+    x=[j for j in range(len(time_series))],
+    y=baseline_values,
+    mode='markers',
+    marker=dict(
+        size=3,
+        color='#EB55BF',
+        symbol='circle-open'
+    ),
+    name='Baseline'
+)
+
+data = [trace, trace2]
+py.iplot(data, filename='milk-production-plot-with-baseline')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Baseline-Subtraction.ipynb', 'python/baseline-subtraction/', 'Baseline Subtraction | plotly',
+    'Learn how to subtract baseline estimates from data in Python.',
+    title='Baseline Subtraction in Python | plotly',
+    name='Baseline Subtraction',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='peak-analysis', order=2,
+    ipynb= '~notebook_demo/118')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/basic-statistics.md plotly-7.1.0+dfsg1/doc/unconverted/python/basic-statistics.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/basic-statistics.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/basic-statistics.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,174 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform basic statistical operations using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Basic Statistics
+    order: 1
+    page_type: example_index
+    permalink: python/basic-statistics/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Import Data
+
+
+Let us import a dataset to perform our statistics. We will be looking at the consumption of alcohol by country in 2010.
+
+```python
+data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2010_alcohol_consumption_by_country.csv')
+df = data[0:10]
+
+table = FF.create_table(df)
+py.iplot(table, filename='alcohol-data-sample')
+```
+
+#### Mean and Variance
+
+
+Two of the most basic statistical operations are the `mean` $\mu$ and `standard deviation` $\sigma$ of a one-dimension array of data, that is, a sequence of numeric values. The `mean` of a set of numbers $x_1, ..., x_N$ is defined as:
+
+$$\begin{align*}
+\mu = \sum_{i=1}^N{x_i}
+\end{align*}
+$$
+
+The mean is used colloquially as the _average_ of a set of values. The standard deviation on the other hand is a statistical metric that describes the spread of the data, or how far the values are from the mean. The `standard deviation` of a set of data is defined as:
+
+$$\begin{align*}
+\sigma = \sqrt{\frac{1}{N-1}\sum_{i=1}^{N}{(x_i-\mu)^2}}
+\end{align*}
+$$
+
+```python
+mean = np.mean(data['alcohol'])
+st_dev = np.std(data['alcohol'])
+
+print("The mean is %r") %(mean)
+print("The standard deviation is %r") %(st_dev)
+```
+
+#### Secondary Statistics
+
+
+We can also compute other statistics such as the `median`, `maximum` and `minimum` of the data
+
+```python
+median = np.median(data['alcohol'])
+maximum = np.max(data['alcohol'])
+minimum = np.min(data['alcohol'])
+
+print("The median is %r") %(median)
+print("The maximum is %r") %(maximum)
+print("The minimum is %r") %(minimum)
+```
+
+#### Visualize the Statistics
+
+
+We can visualize these statistics by producing a Plotly box or Violin chart.
+
+```python
+y = data['alcohol'].values.tolist()
+
+trace = go.Violin(
+    y=y,
+    name='Violin Plot',
+    box_visible=True,
+    meanline_visible=True,
+    fillcolor='#604d9e',
+    points='all',
+)
+
+layout = go.Layout(
+    width=500,
+    yaxis=dict(
+        title='Alcohol Consumption by Country',
+        zeroline=False
+    ),
+)
+
+fig = go.Figure(data=[trace], layout=layout)
+py.iplot(fig, filename='alcohol-violin-visual')
+```
+
+```python
+y = data['alcohol'].values.tolist()
+
+trace = go.Box(
+    y=y,
+    name = 'Box Plot',
+    boxpoints='all',
+    jitter=0.3,
+    marker = dict(
+        color = 'rgb(214,12,140)',
+    ),
+)
+
+layout = go.Layout(
+    width=500,
+    yaxis=dict(
+        title='Alcohol Consumption by Country',
+        zeroline=False
+    ),
+)
+
+data = [trace]
+fig= go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='alcohol-box-plot')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Basic-Statistics.ipynb', 'python/basic-statistics/', 'Basic Statistics | plotly',
+    'Learn how to perform basic statistical operations using Python.',
+    title='Basic Statistics in Python. | plotly',
+    name='Basic Statistics',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=1,
+    ipynb= '~notebook_demo/109')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/big-data-analytics-with-pandas-and-sqlite.md plotly-7.1.0+dfsg1/doc/unconverted/python/big-data-analytics-with-pandas-and-sqlite.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/big-data-analytics-with-pandas-and-sqlite.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/big-data-analytics-with-pandas-and-sqlite.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,468 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: A primer on out-of-memory analytics of large datasets with Pandas,
+      SQLite, and IPython notebooks.
+    display_as: databases
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Big Data Analytics with Pandas and SQLite
+    order: 4
+    page_type: example_index
+    permalink: python/big-data-analytics-with-pandas-and-sqlite/
+    redirect_from: ipython-notebooks/big-data-analytics-with-pandas-and-sqlite/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Imports
+This notebook explores a 3.9Gb CSV file containing NYC's 311 complaints since 2003. It's the most popular data set in [NYC's open data portal](https://nycopendata.socrata.com/data). This is a primer on out-of-memory data analysis with
+- [pandas](http://pandas.pydata.org/): A library with easy-to-use data structures and data analysis tools. Also, interfaces to out-of-memory databases like SQLite.
+- [IPython notebook](ipython.org/notebook.html): An interface for writing and sharing python code, text, and plots.
+- [SQLite](https://www.sqlite.org/): An self-contained, server-less database that's easy to set-up and query from Pandas.
+- [Plotly](https://plot.ly/python/): A platform for publishing beautiful, interactive graphs from Python to the web.
+
+The dataset is too large to load into a Pandas dataframe. So, instead we'll perform out-of-memory aggregations with SQLite and load the result directly into a dataframe with Panda's `iotools`. It's pretty easy to stream a CSV into SQLite and SQLite requires no setup. The SQL query language is pretty intuitive coming from a Pandas mindset.
+
+```python
+import plotly.tools as tls
+tls.embed('https://plot.ly/~chris/7365')
+```
+
+```python
+import pandas as pd
+from sqlalchemy import create_engine # database connection
+import datetime as dt
+from IPython.display import display
+
+import plotly.plotly as py # interactive graphing
+import plotly.graph_objs as go
+```
+
+#### Import the CSV data into SQLite
+1. Load the CSV, chunk-by-chunk, into a DataFrame
+2. Process the data a bit, strip out uninteresting columns
+3. Append it to the SQLite database
+
+```python
+pd.read_csv('311_100M.csv', nrows=2).head()
+```
+
+```python
+!wc -l < 311_100M.csv # Number of lines in dataset
+```
+
+```python
+disk_engine = create_engine('sqlite:///311_8M.db') # Initializes database with filename 311_8M.db in current directory
+```
+
+```python
+start = dt.datetime.now()
+chunksize = 20000
+j = 0
+index_start = 1
+
+for df in pd.read_csv('311_100M.csv', chunksize=chunksize, iterator=True, encoding='utf-8'):
+
+    df = df.rename(columns={c: c.replace(' ', '') for c in df.columns}) # Remove spaces from columns
+
+    df['CreatedDate'] = pd.to_datetime(df['CreatedDate']) # Convert to datetimes
+    df['ClosedDate'] = pd.to_datetime(df['ClosedDate'])
+
+    df.index += index_start
+
+    # Remove the un-interesting columns
+    columns = ['Agency', 'CreatedDate', 'ClosedDate', 'ComplaintType', 'Descriptor',
+               'CreatedDate', 'ClosedDate', 'TimeToCompletion',
+               'City']
+
+    for c in df.columns:
+        if c not in columns:
+            df = df.drop(c, axis=1)
+
+
+    j+=1
+    print '{} seconds: completed {} rows'.format((dt.datetime.now() - start).seconds, j*chunksize)
+
+    df.to_sql('data', disk_engine, if_exists='append')
+    index_start = df.index[-1] + 1
+```
+
+##### `LIMIT` the number of rows that are retrieved
+
+```python
+df = pd.read_sql_query('SELECT Agency, Descriptor FROM data LIMIT 3', disk_engine)
+df = pd.read_sql_query('SELECT ComplaintType, Descriptor, Agency '
+                       'FROM data '
+                       'LIMIT 10', disk_engine)
+```
+
+###### Filter rows with `WHERE`
+
+```python
+df = pd.read_sql_query('SELECT ComplaintType, Descriptor, Agency '
+                       'FROM data '
+                       'WHERE Agency = "NYPD" '
+                       'LIMIT 10', disk_engine)
+```
+
+###### Filter multiple values in a column with `WHERE` and `IN`
+
+```python
+df = pd.read_sql_query('SELECT ComplaintType, Descriptor, Agency '
+                       'FROM data '
+                       'WHERE Agency IN ("NYPD", "DOB")'
+                       'LIMIT 10', disk_engine)
+```
+
+###### Find the unique values in a column with `DISTINCT`
+
+```python
+df = pd.read_sql_query('SELECT DISTINCT City FROM data', disk_engine)
+```
+
+###### Query value counts with `COUNT(*)` and `GROUP BY`
+
+```python
+df = pd.read_sql_query('SELECT Agency, COUNT(*) as `num_complaints`'
+                       'FROM data '
+                       'GROUP BY Agency ', disk_engine)
+```
+
+###### Order the results with `ORDER` and `-`
+Housing and Development Dept receives the most complaints
+
+```python
+df = pd.read_sql_query('SELECT Agency, COUNT(*) as `num_complaints`'
+                       'FROM data '
+                       'GROUP BY Agency '
+                       'ORDER BY -num_complaints', disk_engine)
+
+py.iplot([go.Bar(x=df.Agency, y=df.num_complaints)], filename='311/most common complaints by agency')
+```
+
+###### Heat / Hot Water is the most common complaint
+
+```python
+df = pd.read_sql_query('SELECT ComplaintType, COUNT(*) as `num_complaints`, Agency '
+                       'FROM data '
+                       'GROUP BY `ComplaintType` '
+                       'ORDER BY -num_complaints', disk_engine)
+
+
+most_common_complaints = df # used later
+py.iplot({
+    'data': [go.Bar(x=df['ComplaintType'], y=df.num_complaints)],
+    'layout': {
+        'margin': {'b': 150}, # Make the bottom margin a bit bigger to handle the long text
+        'xaxis': {'tickangle': 40}} # Angle the labels a bit
+    }, filename='311/most common complaints by complaint type')
+```
+
+*This graph is interactive. Click-and-drag horizontally to zoom, shift-click to pan, double click to autoscale*
+
+
+##### What's the most common complaint in each city?
+
+
+First, let's see how many cities are recorded in the dataset
+
+```python
+len(pd.read_sql_query('SELECT DISTINCT City FROM data', disk_engine))
+```
+
+Yikes - let's just plot the 10 most complained about cities
+
+```python
+df = pd.read_sql_query('SELECT City, COUNT(*) as `num_complaints` '
+                                'FROM data '
+                                'GROUP BY `City` '
+                       'ORDER BY -num_complaints '
+                       'LIMIT 10 ', disk_engine)
+```
+
+Flushing and FLUSHING, Jamaica and JAMAICA... the complaints are case sensitive.
+
+
+###### Perform case insensitive queries with `GROUP BY` with `COLLATE NOCASE`
+
+```python
+df = pd.read_sql_query('SELECT City, COUNT(*) as `num_complaints` '
+                        'FROM data '
+                        'GROUP BY `City` '
+                       'COLLATE NOCASE '
+                       'ORDER BY -num_complaints '
+                       'LIMIT 11 ', disk_engine)
+cities = list(df.City)
+cities.remove(None)
+
+traces = [] # the series in the graph - one trace for each city
+
+for city in cities:
+    df = pd.read_sql_query('SELECT ComplaintType, COUNT(*) as `num_complaints` '
+                           'FROM data '
+                           'WHERE City = "{}" COLLATE NOCASE '
+                           'GROUP BY `ComplaintType` '
+                           'ORDER BY -num_complaints'.format(city), disk_engine)
+
+    traces.append(go.Bar(x=df['ComplaintType'], y=df.num_complaints, name=city.capitalize()))
+
+py.iplot({'data': traces, 'layout': go.Layout(barmode='stack', xaxis={'tickangle': 40}, margin={'b': 150})}, filename='311/complaints by city stacked')
+```
+
+*You can also `click` on the legend entries to hide/show the traces. Click-and-drag to zoom in and shift-drag to pan.*
+
+
+Now let's normalize these counts. This is super easy now that this data has been reduced into a dataframe.
+
+```python
+for trace in traces:
+    trace['y'] = 100.*trace['y']/sum(trace['y'])
+
+py.iplot({'data': traces,
+          'layout': go.Layout(
+                barmode='group',
+                xaxis={'tickangle': 40, 'autorange': False, 'range': [-0.5, 16]},
+                yaxis={'title': 'Percent of Complaints by City'},
+                margin={'b': 150},
+                title='Relative Number of 311 Complaints by City')
+         }, filename='311/relative complaints by city', validate=False)
+```
+
+- New York is loud
+- Staten Island is moldy, wet, and vacant
+- Flushing's muni meters are broken
+- Trash collection is great in the Bronx
+- Woodside doesn't like its graffiti
+
+Click and drag to pan across the graph and see more of the complaints.
+
+
+### Part 2: SQLite time series with Pandas
+
+
+######  Filter SQLite rows with timestamp strings: `YYYY-MM-DD hh:mm:ss`
+
+```python
+df = pd.read_sql_query('SELECT ComplaintType, CreatedDate, City '
+                       'FROM data '
+                       'WHERE CreatedDate < "2014-11-16 23:47:00" '
+                       'AND CreatedDate > "2014-11-16 23:45:00"', disk_engine)
+```
+
+######  Pull out the hour unit from timestamps with `strftime`
+
+
+```python
+df = pd.read_sql_query('SELECT CreatedDate, '
+                              'strftime(\'%H\', CreatedDate) as hour, '
+                              'ComplaintType '
+                       'FROM data '
+                       'LIMIT 5 ', disk_engine)
+```
+
+######  Count the number of complaints (rows) per hour with `strftime`, `GROUP BY`, and `count(*)`
+
+```python
+df = pd.read_sql_query('SELECT CreatedDate, '
+                               'strftime(\'%H\', CreatedDate) as hour,  '
+                               'count(*) as `Complaints per Hour`'
+                       'FROM data '
+                       'GROUP BY hour', disk_engine)
+
+py.iplot({
+    'data': [go.Bar(x=df['hour'], y=df['Complaints per Hour'])],
+    'layout': go.Layout(xaxis={'title': 'Hour in Day'},
+                     yaxis={'title': 'Number of Complaints'})}, filename='311/complaints per hour')
+```
+
+######  Filter noise complaints by hour
+
+```python
+df = pd.read_sql_query('SELECT CreatedDate, '
+                               'strftime(\'%H\', CreatedDate) as `hour`,  '
+                               'count(*) as `Complaints per Hour`'
+                       'FROM data '
+                       'WHERE ComplaintType IN ("Noise", '
+                                               '"Noise - Street/Sidewalk", '
+                                               '"Noise - Commercial", '
+                                               '"Noise - Vehicle", '
+                                               '"Noise - Park", '
+                                               '"Noise - House of Worship", '
+                                               '"Noise - Helicopter", '
+                                               '"Collection Truck Noise") '
+                       'GROUP BY hour', disk_engine)
+
+py.iplot({
+    'data': [go.Bar(x=df['hour'], y=df['Complaints per Hour'])],
+    'layout': go.Layout(xaxis={'title': 'Hour in Day'},
+                     yaxis={'title': 'Number of Complaints'},
+                     title='Number of Noise Complaints in NYC by Hour in Day'
+                    )}, filename='311/noise complaints per hour')
+```
+
+######  Segregate complaints by hour
+
+```python
+complaint_traces = {} # Each series in the graph will represent a complaint
+complaint_traces['Other'] = {}
+
+for hour in range(1, 24):
+    hour_str = '0'+str(hour) if hour < 10 else str(hour)
+    df = pd.read_sql_query('SELECT  CreatedDate, '
+                                   'ComplaintType ,'
+                                   'strftime(\'%H\', CreatedDate) as `hour`,  '
+                                   'COUNT(*) as num_complaints '
+                           'FROM data '
+                           'WHERE hour = "{}" '
+                           'GROUP BY ComplaintType '
+                           'ORDER BY -num_complaints'.format(hour_str), disk_engine)
+
+    complaint_traces['Other'][hour] = sum(df.num_complaints)
+
+    # Grab the 7 most common complaints for that hour
+    for i in range(7):
+        complaint = df.get_value(i, 'ComplaintType')
+        count = df.get_value(i, 'num_complaints')
+        complaint_traces['Other'][hour] -= count
+        if complaint in complaint_traces:
+            complaint_traces[complaint][hour] = count
+        else:
+            complaint_traces[complaint] = {hour: count}
+
+traces = []
+for complaint in complaint_traces:
+    traces.append({
+        'x': range(25),
+        'y': [complaint_traces[complaint].get(i, None) for i in range(25)],
+        'name': complaint,
+        'type': 'bar'
+    })
+
+py.iplot({
+    'data': traces,
+    'layout': {
+        'barmode': 'stack',
+        'xaxis': {'title': 'Hour in Day'},
+        'yaxis': {'title': 'Number of Complaints'},
+        'title': 'The 7 Most Common 311 Complaints by Hour in a Day'
+    }}, filename='311/most common complaints by hour')
+```
+
+##### Aggregated time series
+
+
+First, create a new column with timestamps rounded to the previous 15 minute interval
+
+
+Then, `GROUP BY` that interval and `COUNT(*)`
+
+```python
+minutes = 15
+seconds = 15*60
+
+df = pd.read_sql_query('SELECT CreatedDate, '
+                               'datetime(('
+                                   'strftime(\'%s\', CreatedDate) / {seconds}) * {seconds}, \'unixepoch\') interval '
+                       'FROM data '
+                       'LIMIT 10 '.format(seconds=seconds), disk_engine)
+
+minutes = 15
+seconds = minutes*60
+
+df = pd.read_sql_query('SELECT datetime(('
+                                   'strftime(\'%s\', CreatedDate) / {seconds}) * {seconds}, \'unixepoch\') interval ,'
+                               'COUNT(*) as "Complaints / interval"'
+                       'FROM data '
+                       'GROUP BY interval '
+                       'ORDER BY interval '
+                       'LIMIT 500'.format(seconds=seconds), disk_engine)
+
+py.iplot(
+    {
+        'data': [{
+            'x': df.interval,
+            'y': df['Complaints / interval'],
+            'type': 'bar'
+        }],
+        'layout': {
+            'title': 'Number of 311 Complaints per 15 Minutes'
+        }
+}, filename='311/complaints per 15 minutes')
+```
+
+```python
+hours = 24
+minutes = hours*60
+seconds = minutes*60
+
+df = pd.read_sql_query('SELECT datetime(('
+                                   'strftime(\'%s\', CreatedDate) / {seconds}) * {seconds}, \'unixepoch\') interval ,'
+                               'COUNT(*) as "Complaints / interval"'
+                       'FROM data '
+                       'GROUP BY interval '
+                       'ORDER BY interval'.format(seconds=seconds), disk_engine)
+
+py.iplot(
+    {
+        'data': [{
+            'x': df.interval,
+            'y': df['Complaints / interval'],
+            'type': 'bar'
+        }],
+        'layout': {
+            'title': 'Number of 311 Complaints per Day'
+        }
+}, filename='311/complaints per day')
+```
+
+#### References
+
+- Find more open data sets on [Data.gov](https://data.gov) and [NYC Open Data](https://nycopendata.socrata.com)
+- Learn how to setup [MySql with Pandas and Plotly](http://moderndata.plot.ly/graph-data-from-mysql-database-in-python/)
+- Add [interactive widgets to IPython notebooks](http://moderndata.plot.ly/widgets-in-ipython-notebook-and-plotly/) for customized data exploration
+- Big data workflows with [HDF5 and Pandas](http://stackoverflow.com/questions/14262433/large-data-work-flows-using-pandas)
+- [Interactive graphing with Plotly](https://plot.ly/python/)
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'sqlite.ipynb', 'python/big-data-analytics-with-pandas-and-sqlite/', 'Big Data Analytics with Pandas and SQLite',
+    'A primer on out-of-memory analytics of large datasets with Pandas, SQLite, and IPython notebooks.',
+    title='Big Data Workflow with Pandas and SQLite | Plotly', has_thumbnail='false',
+    redirect_from='ipython-notebooks/big-data-analytics-with-pandas-and-sqlite/',
+    language='python', page_type='example_index', display_as='databases', order=4, ipynb= '~notebook_demo/1')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/cars-exploration.md plotly-7.1.0+dfsg1/doc/unconverted/python/cars-exploration.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/cars-exploration.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/cars-exploration.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,384 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: Use Plotly FigureWidget with hover callbacks and slider widgets
+    display_as: chart_events
+    language: python
+    layout: base
+    name: Car Exploration with Hover Events
+    order: 26
+    permalink: python/cars-exploration/
+    thumbnail: thumbnail/figurewidget-cars.gif
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+# Cars dataset exploration with plotly.py version 3.0
+
+
+## Load cars dataset
+
+```python
+import pandas as pd
+import numpy as np
+import plotly.graph_objs as go
+
+cars_df = pd.read_csv('data/cars/cars.csv',
+                      usecols=['City mpg',
+                               'Fuel Type',
+                               'Horsepower',
+                               'Model Year',
+                               'Torque', 'Hybrid', 'ID'])
+cars_df.sample(5)
+```
+
+```python
+cars_df.shape
+```
+
+## Load images of cars
+
+```python
+import os
+
+image_data = {}
+for img_filename in os.listdir('data/cars/images'):
+    model_year = img_filename.split('.')[0]
+    with open(f"data/cars/images/{img_filename}", "rb") as f:
+        b = f.read()
+        image_data[model_year] = b
+```
+
+```python
+from ipywidgets import Image
+Image(value=image_data['2012_Chevrolet_Camaro_Coupe'])
+```
+
+## Construct plotly.py Figure Widget
+Torqe vs. MPG Scatter Trace
+
+```python
+import plotly.graph_objs as go
+```
+
+```python
+fig = go.FigureWidget(
+    data=[
+        dict(
+            type='scattergl',
+            x=cars_df['Torque'],
+            y=cars_df['City mpg'],
+            mode='markers',
+        )
+    ],
+)
+```
+
+### Display Figure
+Before online or offline `iplot`. Still supported, but not needed with `FigureWidget`
+
+```python
+fig
+```
+
+### Label Figure
+Use property assignment syntax to:
+
+
+Set `fig.layout.title` to `'Torque and Fuel Efficience'`
+
+```python
+fig.layout.title = 'Torque and Fuel Efficience'
+```
+
+Check default font size
+
+```python
+fig.layout.title.font.size
+```
+
+Increase the title font size
+
+```python
+fig.layout.title.font.size = 22
+```
+
+Set `fig.layout.title.font.family` to `'Rockwell'`
+
+```python
+fig.layout.title.font.family = 'Rockwell'
+```
+
+### Create New View for Figure
+If working in JupyterLab, right-click on blue bar to the left of the figure and select "Create New View for Output". Drag view to the right half of the screen.
+
+
+### Label Axes
+
+
+Set the `fig.layout.xaxis.title` property to `'Torque (foot-pounds)'`
+
+```python
+fig.layout.xaxis.title = 'Torque (foot-pounds)'
+```
+
+Set the `fig.layout.yaxis.title` property to `'City MPG'`
+
+```python
+fig.layout.yaxis.title = 'City MPG'
+```
+
+### Notice Quantization
+Zoom in and notice that the dataset is quantized
+
+
+### Apply Jitter
+
+```python
+scatter = fig.data[0]
+scatter
+```
+
+```python
+N = len(cars_df)
+scatter.x = scatter.x + np.random.rand(N) * 10
+scatter.y = scatter.y + np.random.rand(N) * 1
+```
+
+Zoom level did not reset! Plot is updated in-place. Not recreated each time a property changes
+
+
+### Address Overplotting
+
+
+Lower marker opacity
+
+```python
+scatter.marker.opacity = 0.2
+```
+
+Decrease marker size
+
+```python
+scatter.marker.size = 4
+```
+
+### Aside on validation
+
+
+What if I though opacity ranged from 0 to 255?
+
+```python
+# scatter.marker.opacity = 50
+```
+
+What if I forgot the name of an enumeration value?
+
+```python
+# fig.layout.hovermode = 'nearest' # Set to 'closest'
+fig.layout.hovermode = 'closest'
+```
+
+What if I don't know how to spell 'fuchsia'?
+
+```python
+scatter.marker.color = 'fuchsia' # Set to 'fuchsia'
+```
+
+Restore default marker color
+
+```python
+scatter.marker.color = None
+```
+
+### Add density contour
+
+
+Add smoothed density contour trace (`histogram2dcontour`) based on `scatter.x` and `y=scatter.y` values.
+
+```python
+contour = fig.add_histogram2dcontour(
+    x=scatter.x, y=scatter.y)
+```
+
+Set contour colorscale
+
+```python
+contour.colorscale = 'Hot'
+```
+
+Reverse the colorscale
+
+```python
+contour.reversescale = True
+```
+
+Disable tooltips for contour
+
+```python
+contour.hoverinfo = 'skip'
+```
+
+Tweak marker size and opacity
+
+```python
+scatter.marker.opacity = .1
+scatter.marker.size = 3
+```
+
+### Create marker configuration widget
+
+
+Define function that inputs `opacity` and `size` and updates the figure.
+
+```python
+def set_opacity(opacity, size):
+    scatter.marker.opacity = opacity
+    scatter.marker.size = size
+```
+
+Use `ipywidgets.interactive` to generate control panel for function.
+
+```python
+from ipywidgets import interactive
+opacity_slider = interactive(set_opacity,
+                             opacity=(0.0, 1.0, 0.01),
+                             size=(1, 10, 0.25))
+opacity_slider
+```
+
+Adjust the width of the slider widgets
+
+```python
+opacity_slider.children[0].layout.width = '400px'
+opacity_slider.children[1].layout.width = '400px'
+```
+
+Try zooming and then adjusting the marker params
+
+
+### Looking at outliers
+
+
+#### Tooltips
+Use `'ID'` column as tooltip for scatter
+
+```python
+scatter.text = cars_df['ID']
+scatter.hoverinfo = 'text'
+```
+
+#### All properties
+
+
+Create an HTML widget to display the hover properties
+
+```python
+from ipywidgets import HTML
+details = HTML()
+details
+```
+
+Register callback function to be executed on hover events. It will update the HTML widget using the pandas `to_html` method.
+
+```python
+def hover_fn(trace, points, state):
+    ind = points.point_inds[0]
+    details.value = cars_df.iloc[ind].to_frame().to_html()
+
+scatter.on_hover(hover_fn)
+```
+
+#### Vehicle image
+
+
+Create an `ipywidgets.Image` widget to display images
+
+```python
+from ipywidgets import Image, Layout
+image_widget = Image(
+    value=image_data['2012_Chevrolet_Camaro_Coupe'],
+    layout=Layout(height='252px', width='400px')
+)
+image_widget
+```
+
+Update hover function to update the image widget along with the HTML widget
+
+```python
+def hover_fn(trace, points, state):
+
+    ind = points.point_inds[0]
+
+    # Update details HTML widget
+    details.value = cars_df.iloc[ind].to_frame().to_html()
+
+    # Update image widget
+    model_year = cars_df['Model Year'][ind].replace(' ', '_')
+    image_widget.value = image_data[model_year]
+
+scatter.on_hover(hover_fn)
+```
+
+## Bringing it all together
+
+
+Create simple dashboard using `HBox` and `VBox` containers
+
+```python
+from ipywidgets import HBox, VBox
+VBox([fig,
+      opacity_slider,
+      HBox([image_widget, details])])
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/cars_exploration.gif'>
+
+
+#### Reference
+
+
+See [these Jupyter notebooks](https://github.com/jonmmease/plotly_ipywidget_notebooks) for even more FigureWidget examples.
+
+```python
+help(go.FigureWidget)
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'cars-exploration.ipynb', 'python/cars-exploration/', 'Car Exploration with go.FigureWidget, Case Study',
+    'Use Plotly FigureWidget with hover callbacks and slider widgets',
+    title = 'Car Exploration with Hover Events',
+    name = 'Car Exploration with Hover Events',
+    has_thumbnail='true', thumbnail='thumbnail/zoom.jpg',
+    language='python', page_type='example_index',
+    display_as='chart_events', order=26,
+    ipynb= '~notebook_demo/242')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/change-callbacks-datashader.md plotly-7.1.0+dfsg1/doc/unconverted/python/change-callbacks-datashader.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/change-callbacks-datashader.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/change-callbacks-datashader.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,208 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Display Large Datasets with DataShader and Change Callbacks
+    display_as: chart_events
+    language: python
+    layout: base
+    name: DataShader Case Study
+    order: 24
+    permalink: python/change-callbacks-datashader/
+    thumbnail: thumbnail/figurewidget-datashader.gif
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Overview
+This notebook demonstrates how to use DataShader to display large datasets inside a plotly `FigureWidget`. Change callbacks are used to recompute the datashader image whenever the axis range or figure size changes
+
+
+#### Imports
+
+```python
+# core
+import io
+import base64
+import time
+
+# pandas
+import pandas as pd
+
+# numpy
+import numpy as np
+
+# scikit learn
+from sklearn import datasets
+
+# datashader
+import datashader as ds
+import datashader.transfer_functions as tf
+from datashader.colors import inferno
+```
+
+#### Generate dataset
+We will create a large dataset by duplicating the Iris dataset many times with random noise
+
+```python
+num_copies = 7000 # 1,050,000 rows
+
+iris_data = datasets.load_iris()
+feature_names = [name.replace(' (cm)', '').replace(' ', '_') for name in iris_data.feature_names]
+iris_df_orig = pd.DataFrame(iris_data.data, columns=feature_names)
+target_orig = iris_data.target + 1
+
+# frame of features
+iris_df = pd.concat(
+    np.random.normal(scale=0.2, size=iris_df_orig.shape) + iris_df_orig for i in range(num_copies)
+).reset_index(drop=True)
+
+# array of targets
+target = [t for i in range(num_copies) for t in target_orig]
+
+# dataframe that includes target as categorical
+iris_target_df = pd.concat([iris_df, pd.Series(target, name='target', dtype='category')], axis=1)
+
+iris_df.describe()
+```
+
+#### Define DataShader image generation function
+Define a function that inputs an x/y ranges and the plot width/height and generates a DataShader image of the dataset.  The image will be returned as a PIL image object
+
+```python
+def gen_ds_image(x_range, y_range, plot_width, plot_height):
+    if x_range is None or y_range is None or plot_width is None or plot_height is None:
+        return None
+
+    cvs = ds.Canvas(x_range=x_range, y_range=y_range, plot_height=plot_height, plot_width=plot_width)
+    agg_scatter = cvs.points(iris_target_df,
+                         'sepal_length', 'sepal_width',
+                          ds.count_cat('target'))
+    img = tf.shade(agg_scatter)
+    img = tf.dynspread(img, threshold=0.95, max_px=5, shape='circle')
+
+    return img.to_pil()
+```
+
+#### Define initial ranges and plot size
+
+```python
+x_range=[3, 10]
+y_range=[0, 6]
+plot_height=500
+plot_width=700
+```
+
+```python
+# Test image generation function and display the PIL image
+initial_img = gen_ds_image(x_range, y_range, plot_width, plot_height)
+```
+
+```python
+initial_img
+```
+
+#### Create FigureWidget with background image
+
+```python
+import plotly.graph_objs as go
+```
+
+```python
+f = go.FigureWidget(data=[{'x': x_range,
+                           'y': y_range,
+                           'mode': 'markers',
+                           'marker': {'opacity': 0}}], # invisible trace to init axes and to support autoresize
+                    layout={'width': plot_width, 'height': plot_height})
+f
+```
+
+```python
+# Set background image
+f.layout.images = [go.layout.Image(
+    source = initial_img,  # plotly now performs auto conversion of PIL image to png data URI
+    xref = "x",
+    yref = "y",
+    x = x_range[0],
+    y = y_range[1],
+    sizex = x_range[1] - x_range[0],
+    sizey = y_range[1] - y_range[0],
+    sizing = "stretch",
+    layer = "below")]
+```
+
+#### Install change callback to update image on zoom/resize
+
+```python
+def update_ds_image(layout, x_range, y_range, plot_width, plot_height):
+    img = f.layout.images[0]
+
+    # Update with batch_update so all updates happen simultaneously
+    with f.batch_update():
+        img.x = x_range[0]
+        img.y = y_range[1]
+        img.sizex = x_range[1] - x_range[0]
+        img.sizey = y_range[1] - y_range[0]
+        img.source = gen_ds_image(x_range, y_range, plot_width, plot_height)
+
+# Install callback to run exactly once if one or more of the following properties changes
+#  - xaxis range
+#  - yaxis range
+#  - figure width
+#  - figure height
+f.layout.on_change(update_ds_image, 'xaxis.range', 'yaxis.range', 'width', 'height')
+```
+
+#### Image updates on drag zoom
+
+```python
+f.layout.dragmode = 'zoom'
+f
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/datashader_figurewidget.gif'>
+
+
+#### Reference
+
+
+See [these Jupyter notebooks](https://github.com/jonmmease/plotly_ipywidget_notebooks) for even more FigureWidget examples.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'change-callbacks-datashader.ipynb', 'python/change-callbacks-datashader/', 'FigureWidget | plotly',
+    'Display Large Datasets with DataShader and Change Callbacks',
+    title = 'DataShader Case Study',
+    name = 'DataShader Case Study',
+    uses_plotly_offline=True,
+    has_thumbnail='true', thumbnail='thumbnail/ipython_widgets.jpg',
+    language='python', page_type='example_index',
+    display_as='chart_events', order=24,
+    ipynb= '~notebook_demo/239')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/chord-diagram.md plotly-7.1.0+dfsg1/doc/unconverted/python/chord-diagram.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/chord-diagram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/chord-diagram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,325 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make an interactive chord diagram in Python with Plotly and
+      iGraph.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Python Chord Diagram
+    order: 23
+    page_type: u-guide
+    permalink: python/chord-diagram/
+    thumbnail: thumbnail/chord.jpg
+---
+
+# Chord Diagrams with Plotly
+A circular layout places the graph nodes uniformly on a circle. In this example we illustrate how to  draw the graph edges in order to avoid a cluttered visualization.
+
+
+### Eurovision Song Contest Example
+
+As an example, we consider a circular graph with the European countries as nodes. Among these countries, some qualified for the grand final [Eurovision Song Contest](http://www.eurovision.tv/page/timeline).
+
+Each european country is a jury member and rates some contestants on a scale from 1 to 12 (in 2015 a contestant from Australia led to adding this country to the graph).
+
+There is a directed edge from a jury member country to a contestant country  if the contestant acquired at least one point from the jury country voters.
+
+The jury member countries are placed uniformly, in alphabetical order, on the unit circle. If there is an edge between two nodes, then we draw a cubic [Bézier curve](http://nbviewer.ipython.org/github/empet/geom_modeling/blob/master/FP-Bezier-Bspline.ipynb) having  as the first and the last control point the given nodes.
+
+To avoid cluttered edges we adopted the following procedure in choosing the interior control points for the Bézier curve:
+
+- we consider five  equally spaced  points on the unit circle, corresponding to the angles $0, \:\pi/4$ $\pi/2,\: 3\pi/4, \:\pi$: $$P_1(1,0), \: P_2=(\sqrt{2}/2,\: \sqrt{2}/2),\: P_3(0,1), \: P_4=(-\sqrt{2}/2, \sqrt{2}/2),\:  P_5(-1,0)$$
+
+- define a list,  `Dist`, having as elements the distances between the following pairs of points:
+$$(P_1, P_1), \:(P_1, P_2), \: (P_1, P_3),\: (P_1, P_4),\: (P_1, P_5)$$
+
+- In order to assign the control polygon to the Bézier curve that will be the edge between two connected
+nodes, `V[i], V[j]`, we compute the distance between these nodes, and deduce the interval $k$, of two consecutive values in `Dist`, this distance  belongs to.
+
+- Since there are four such intervals indexed $k=0,1,2,3$, we  define the control polygon as follows: $${\bf b}_0=V[i],\:\: {\bf b}_1=V[i]/param,\:\: {\bf b}_2=V[j]/param, \:\:{\bf b}_3=V[j],$$ where `param` is chosen from the list: `params=[1.2, 1.5, 1.8, 2.1]`.
+
+Namely, if the distance(`V[i], V[j]`), belongs to the $K^{th}$ interval associated to `Dist`, then we choose `param= params[K]`.
+
+
+We processed data provided by [Eurovision Song Contest](http://www.eurovision.tv/page/history/by-year/contest?event=2083#Scoreboard), and saved  the corresponding graph in a `gml` file. Now we can read the `gml` file and define  an [`igraph.Graph`](http://igraph.org/python/) object.
+
+Install the Python libraries with `sudo pip install igraph` and `sudo pip install networkx`.
+
+```python
+import igraph as ig
+
+G = ig.Graph.Read_GML('Eurovision15.gml')
+```
+
+Define the list of nodes (vs stands for vertices):
+
+```python
+V=list(G.vs)
+G.vs.attributes()# list node attributes
+```
+
+Define the  label list. Labels  will be displayed in the Plotly plot:
+
+```python
+labels=[v['label']  for v in V]
+```
+
+`G.es` is the sequence of graph edges
+
+```python
+G.es.attributes()# the edge attributes
+```
+
+Get the edge list as a list of tuples, having as elements the end nodes indices:
+
+```python
+E=[e.tuple for e in G.es]# list of edges
+len(E)
+```
+
+Get the list of Contestant countries:
+
+```python
+ContestantLst=[G.vs[e[1]] for e in E]
+Contestant=list(set([v['label'] for  v in ContestantLst]))
+len(Contestant)
+```
+
+Get the node positions, assigned by the circular layout:
+
+```python
+layt=G.layout('circular') #circular layout
+```
+
+`layt` is a list of 2-elements lists, representing the coordinates of nodes placed on the unit circle:
+
+```python
+L=len(layt)
+layt[7]
+```
+
+Define the list of edge weights:
+
+```python
+Weights= map(int, G.es["weight"])
+```
+
+In the sequel we define a few functions that lead to the edge definition as a Bézier curve:<br>`dist(A,B)` computes the distance between two 2D points, A, B:
+
+```python
+import numpy as np
+
+def dist (A,B):
+    return np.linalg.norm(np.array(A)-np.array(B))
+dist(layt[0], layt[5])
+```
+
+Define the list `Dist` of threshold distances between nodes on the unit circle and the list of parameters for interior control points:
+
+```python
+Dist=[0, dist([1,0], 2*[np.sqrt(2)/2]), np.sqrt(2),
+      dist([1,0],  [-np.sqrt(2)/2, np.sqrt(2)/2]), 2.0]
+params=[1.2, 1.5, 1.8, 2.1]
+```
+
+The function `get_idx_interv` returns the index of the interval  the distance `d` belongs to:
+
+```python
+def get_idx_interv(d, D):
+    k=0
+    while(d>D[k]):
+        k+=1
+    return  k-1
+```
+
+Below are defined the function `deCasteljau`  and `BezierCv`. The former  returns the point corresponding to the parameter `t`, on a Bézier curve of control points given in the list `b`.
+
+The latter returns an array of shape (nr, 2) containing the coordinates of
+`nr` points evaluated on the Bézier curve, at equally spaced parameters in [0,1].
+
+For our purpose the default number of points evaluated on a Bézier edge is 5. Then setting the Plotly `shape` of the edge line as `spline`, the five points are  interpolated.
+
+```python
+class InvalidInputError(Exception):
+    pass
+
+def deCasteljau(b,t):
+    N=len(b)
+    if(N<2):
+        raise InvalidInputError("The  control polygon must have at least two points")
+    a=np.copy(b) #shallow copy of the list of control points
+    for r in range(1,N):
+        a[:N-r,:]=(1-t)*a[:N-r,:]+t*a[1:N-r+1,:]
+    return a[0,:]
+
+def BezierCv(b, nr=5):
+    t=np.linspace(0, 1, nr)
+    return np.array([deCasteljau(b, t[k]) for k in range(nr)])
+```
+
+Finally we set data and layout for the Plotly plot of the circular graph:
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+node_color=['rgba(0,51,181, 0.85)'  if v['label'] in Contestant else '#CCCCCC' for v in G.vs]
+line_color=['#FFFFFF'  if v['label'] in Contestant else 'rgb(150,150,150)' for v in G.vs]
+edge_colors=['#d4daff','#84a9dd', '#5588c8', '#6d8acf']
+```
+
+Define the lists of x, respectively y-coordinates of the nodes:
+
+```python
+Xn=[layt[k][0] for k in range(L)]
+Yn=[layt[k][1] for k in range(L)]
+```
+
+On each Bézier edge, at the point corresponding to the parameter $t=0.9$, one displays the source and the target node labels, as well as  the number of points (votes) assigned by source to target.
+
+```python
+lines=[]# the list of dicts defining   edge  Plotly attributes
+edge_info=[]# the list of points on edges where  the information is placed
+
+for j, e in enumerate(E):
+    A=np.array(layt[e[0]])
+    B=np.array(layt[e[1]])
+    d=dist(A, B)
+    K=get_idx_interv(d, Dist)
+    b=[A, A/params[K], B/params[K], B]
+    color=edge_colors[K]
+    pts=BezierCv(b, nr=5)
+    text=V[e[0]]['label']+' to '+V[e[1]]['label']+' '+str(Weights[j])+' pts'
+    mark=deCasteljau(b,0.9)
+    edge_info.append(go.Scatter(x=[mark[0]],
+                             y=[mark[1]],
+                             mode='markers',
+                             marker=dict( size=0.5,  color=edge_colors),
+                             text=text,
+                             hoverinfo='text'
+                             )
+                    )
+    lines.append(go.Scatter(x=pts[:,0],
+                         y=pts[:,1],
+                         mode='lines',
+                         line=dict(color=color,
+                                  shape='spline',
+                                  width=Weights[j]/5#The  width is proportional to the edge weight
+                                 ),
+                        hoverinfo='none'
+                       )
+                )
+
+trace2=go.Scatter(x=Xn,
+           y=Yn,
+           mode='markers',
+           name='',
+           marker=dict(symbol='circle',
+                         size=15,
+                         color=node_color,
+                         line=dict(color=line_color, width=0.5)
+                         ),
+           text=labels,
+           hoverinfo='text',
+           )
+
+axis=dict(showline=False, # hide axis line, grid, ticklabels and  title
+          zeroline=False,
+          showgrid=False,
+          showticklabels=False,
+          title=''
+          )
+
+def make_annotation(anno_text, y_coord):
+    return dict(showarrow=False,
+                      text=anno_text,
+                      xref='paper',
+                      yref='paper',
+                      x=0,
+                      y=y_coord,
+                      xanchor='left',
+                      yanchor='bottom',
+                      font=dict(size=12)
+                     )
+
+anno_text1='Blue nodes mark the countries that are both contestants and jury members'
+anno_text2='Grey nodes mark the countries that are only jury members'
+anno_text3='There is an edge from a Jury country to a contestant country '+\
+           'if the jury country assigned at least one vote to that contestant'
+width=800
+height=850
+title="A circular graph associated to Eurovision Song Contest, 2015<br>Data source:"+\
+"<a href='http://www.eurovision.tv/page/history/by-year/contest?event=2083#Scoreboard'> [1]</a>"
+layout=go.Layout(title= title,
+              font= dict(size=12),
+              showlegend=False,
+              autosize=False,
+              width=width,
+              height=height,
+              xaxis=dict(axis),
+              yaxis=dict(axis),
+              margin=dict(l=40,
+                            r=40,
+                            b=85,
+                            t=100,
+                          ),
+              hovermode='closest',
+              annotations=list([make_annotation(anno_text1, -0.07),
+                                       make_annotation(anno_text2, -0.09),
+                                       make_annotation(anno_text3, -0.11)]
+                                     )
+              )
+
+data=lines+edge_info+[trace2]
+fig=go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='Eurovision-15')
+```
+
+Now we can compare to the Eurovision graph as a networkx.Graph:
+
+```python
+import networkx as nx
+import matplotlib.pyplot as plt
+%matplotlib inline
+
+G=nx.DiGraph()
+G.add_nodes_from(range(L))
+G.add_edges_from(E)
+
+plt.figure(figsize=(18,18))
+nx.draw_circular(G,node_color='g', edge_color='#909090', node_size=900)
+plt.axis('equal')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install publisher --upgrade
+import publisher
+publisher.publish(
+    'chord.ipynb', 'python/chord-diagram/', 'Python Chord Diagram',
+    'How to make an interactive chord diagram in Python with Plotly and iGraph. ',
+    title = 'Chord Diagram | Plotly',
+    thumbnail='thumbnail/chord.jpg', language='python',
+    has_thumbnail='true', display_as='scientific', order=24,
+    ipynb= '~notebook_demo/225')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/cmocean-colorscales.md plotly-7.1.0+dfsg1/doc/unconverted/python/cmocean-colorscales.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/cmocean-colorscales.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/cmocean-colorscales.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,252 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make Cmocean Colorscales in Python with Plotly.
+    display_as: advanced_opt
+    language: python
+    layout: base
+    name: Cmocean Colorscales
+    order: 22
+    page_type: example_index
+    permalink: python/cmocean-colorscales/
+    thumbnail: thumbnail/colorbars.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+### cmocean
+[cmocean](https://github.com/matplotlib/cmocean) is a package containing colormaps for commonly-used oceanographic variables. Below we provide a function to convert a cmocean colormap to a Plotly colorscale. Check out all of the cmocean colormaps below!
+
+
+### Imports
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly import tools
+
+import cmocean
+
+import numpy as np
+import os
+```
+
+### Defining Colormaps
+
+```python
+import cmocean
+
+def cmocean_to_plotly(cmap, pl_entries):
+    h = 1.0/(pl_entries-1)
+    pl_colorscale = []
+
+    for k in range(pl_entries):
+        C = map(np.uint8, np.array(cmap(k*h)[:3])*255)
+        pl_colorscale.append([k*h, 'rgb'+str((C[0], C[1], C[2]))])
+
+    return pl_colorscale
+```
+
+The examples data can be downloaded from [here.](https://github.com/plotly/documentation/blob/source-design-merge/_posts/python/style/cmocean/examples)
+
+```python
+# Plotting the colorscale.
+
+example_dir = os.path.join(os.path.dirname('__file__'), "examples")
+hist2d = np.loadtxt(os.path.join(example_dir, "hist2d.txt"))
+st_helens = np.loadtxt(os.path.join(example_dir,
+                                        "st-helens_before-modified.txt.gz")).T
+dx = dy = 0.05
+y, x = np.mgrid[-5 : 5 + dy : dy, -5 : 10 + dx : dx]
+z = np.sin(x)**10 + np.cos(10 + y*x) + np.cos(x) + 0.2*y + 0.1*x
+
+elem_len = [len(hist2d), len(st_helens), len(z)]
+max_len = max(elem_len)
+
+def colorscale_plot(colorscale, title):
+    trace1 = go.Heatmap(z=hist2d, colorscale=colorscale, showscale=False)
+    trace2 = go.Heatmap(z=st_helens, colorscale=colorscale, y0=-5, x0=-5)
+    trace3 = go.Heatmap(z=z,colorscale=colorscale, showscale=False)
+
+    fig = tools.make_subplots(rows=1, cols=3, print_grid=False)
+    fig.append_trace(trace1, 1, 1)
+    fig.append_trace(trace2, 1, 2)
+    fig.append_trace(trace3, 1, 3)
+
+    fig['layout'].update(title=title)
+    fig['layout']['xaxis2'].update(range=[0, 450])
+    fig['layout']['yaxis2'].update(range=[0, 270])
+
+    return fig
+```
+
+### Thermal
+
+```python
+thermal = cmocean_to_plotly(cmocean.cm.thermal, max_len)
+py.iplot(colorscale_plot(colorscale=thermal, title='Thermal'))
+```
+
+### Haline
+
+```python
+haline = cmocean_to_plotly(cmocean.cm.haline, max_len)
+py.iplot(colorscale_plot(colorscale=haline, title='Haline'))
+```
+
+### Solar
+
+```python
+solar = cmocean_to_plotly(cmocean.cm.solar, max_len)
+py.iplot(colorscale_plot(colorscale=solar, title='Solar'))
+```
+
+### Ice
+
+```python
+ice = cmocean_to_plotly(cmocean.cm.ice, max_len)
+py.iplot(colorscale_plot(colorscale=ice, title='Ice'))
+```
+
+### Gray
+
+```python
+gray = cmocean_to_plotly(cmocean.cm.gray, max_len)
+py.iplot(colorscale_plot(colorscale=gray, title='Gray'))
+```
+
+### Oxy
+
+```python
+oxy = cmocean_to_plotly(cmocean.cm.oxy, max_len)
+py.iplot(colorscale_plot(colorscale=oxy, title='Oxy'))
+```
+
+### Deep
+
+```python
+deep = cmocean_to_plotly(cmocean.cm.deep, max_len)
+py.iplot(colorscale_plot(colorscale=deep, title='Deep'))
+```
+
+### Dense
+
+```python
+dense = cmocean_to_plotly(cmocean.cm.dense, max_len)
+py.iplot(colorscale_plot(colorscale=dense, title='Dense'))
+```
+
+### Algae
+
+```python
+algae = cmocean_to_plotly(cmocean.cm.algae, max_len)
+py.iplot(colorscale_plot(colorscale=algae, title='Algae'))
+```
+
+### Matter
+
+```python
+matter = cmocean_to_plotly(cmocean.cm.matter, max_len)
+py.iplot(colorscale_plot(colorscale=matter, title='Matter'))
+```
+
+### Turbid
+
+```python
+turbid = cmocean_to_plotly(cmocean.cm.turbid, max_len)
+py.iplot(colorscale_plot(colorscale=turbid, title='Turbid'))
+```
+
+### Speed
+
+```python
+speed = cmocean_to_plotly(cmocean.cm.speed, max_len)
+py.iplot(colorscale_plot(colorscale=speed, title='Speed'))
+```
+
+### Amp
+
+```python
+amp = cmocean_to_plotly(cmocean.cm.amp, max_len)
+py.iplot(colorscale_plot(colorscale=amp, title='Amp'))
+```
+
+### Tempo
+
+```python
+tempo = cmocean_to_plotly(cmocean.cm.tempo, max_len)
+py.iplot(colorscale_plot(colorscale=tempo, title='Tempo'))
+```
+
+### Phase
+
+```python
+phase = cmocean_to_plotly(cmocean.cm.phase, max_len)
+py.iplot(colorscale_plot(colorscale=phase, title='Phase'))
+```
+
+### Balance
+
+```python
+balance = cmocean_to_plotly(cmocean.cm.balance, max_len)
+py.iplot(colorscale_plot(colorscale=balance, title='Balance'))
+```
+
+### Delta
+
+```python
+delta = cmocean_to_plotly(cmocean.cm.delta, max_len)
+py.iplot(colorscale_plot(colorscale=delta, title='Delta'))
+```
+
+### Curl
+
+```python
+curl = cmocean_to_plotly(cmocean.cm.curl, max_len)
+py.iplot(colorscale_plot(colorscale=curl, title='Curl'))
+```
+
+### Reference
+Learn more about Plotly colorscales here: [https://plot.ly/python/colorscales/](https://plot.ly/python/colorscales/)
+
+
+### Acknowledgment
+Special thanks to [Kristen Thyng](https://github.com/kthyng) for the statistics of colormaps.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'cmocean.ipynb', 'python/cmocean-colorscales/', 'Cmocean Colorscales | plotly',
+    'How to make Cmocean Colorscales in Python with Plotly.',
+    title = 'Cmocean Colorscales | plotly',
+    name = 'Cmocean Colorscales',
+    has_thumbnail='true', thumbnail='thumbnail/colorbars.jpg',
+    language='python', page_type='example_index',
+    display_as='style_opt', order=22,
+    ipynb= '~notebook_demo/52')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/convolution.md plotly-7.1.0+dfsg1/doc/unconverted/python/convolution.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/convolution.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/convolution.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,127 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform convolution between two signals in Python.
+    display_as: signal-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Convolution
+    order: 4
+    page_type: example_index
+    permalink: python/convolution/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [Plotly](https://plot.ly/python/getting-started/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+import scipy
+
+from scipy import signal
+```
+
+#### Import Data
+Let us import some stock data to apply convolution on.
+
+```python
+stock_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/stockdata.csv')
+df = stock_data[0:15]
+
+table = ff.create_table(df)
+py.iplot(table, filename='stockdata-peak-fitting')
+```
+
+<!-- #region -->
+#### Convolve Two Signals
+`Convolution` is a type of transform that takes two functions `f` and `g` and produces another function via an integration. In particular, the convolution $(f*g)(t)$ is defined as:
+
+$$
+\begin{align*}
+\int_{-\infty}^{\infty} {f(\tau)g(t - \tau)d\tau}
+\end{align*}
+$$
+
+
+We can use convolution in the discrete case between two n-dimensional arrays.
+<!-- #endregion -->
+
+```python
+sample = range(15)
+saw = signal.sawtooth(t=sample)
+
+data_sample = list(stock_data['SBUX'][0:100])
+data_sample2 = list(stock_data['AAPL'][0:100])
+x = list(range(len(data_sample)))
+y_convolve = signal.convolve(saw, data_sample2)
+x_convolve = list(range(len(y_convolve)))
+
+trace1 = go.Scatter(
+    x = x,
+    y = data_sample,
+    mode = 'lines',
+    name = 'SBUX'
+)
+
+trace2 = go.Scatter(
+    x = x,
+    y = data_sample2,
+    mode = 'lines',
+    name = 'AAPL'
+)
+
+trace3 = go.Scatter(
+    x = x_convolve,
+    y = y_convolve,
+    mode = 'lines',
+    name = 'Convolution'
+)
+
+data = [trace1, trace2, trace3]
+py.iplot(data, filename='convolution-of-two-signals')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Convolution.ipynb', 'python/convolution/', 'Convolution | plotly',
+    'Learn how to perform convolution between two signals in Python.',
+    title='Convolution in Python | plotly',
+    name='Convolution',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='signal-analysis', order=4)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/create-online-dashboard-legacy.md plotly-7.1.0+dfsg1/doc/unconverted/python/create-online-dashboard-legacy.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/create-online-dashboard-legacy.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/create-online-dashboard-legacy.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,409 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to create and publish a dashboard with the Python API.
+    display_as: legacy_charts
+    language: python
+    layout: base
+    name: Dashboard API
+    order: 0
+    page_type: u-guide
+    permalink: python/create-online-dashboard-legacy/
+    thumbnail: thumbnail/dashboard.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Note: The dashboard API is available in version <b>2.0.5.+</b><br>
+Run  `pip install plotly --upgrade` to update your Plotly version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Plotly Dashboards
+A dashboard is a collection of plots and images organized with a certain layout. There are two ways to create a Plotly dashboard: using the [online creator](https://plot.ly/dashboard/create/) or programmatically with Plotly's python API.
+
+In Plotly, dashboards can contain plots, text and webpage images. To use the online creator, see https://plot.ly/dashboard/create/. Dashboards are stored in your Plotly account: https://plot.ly/organize
+#### Dashboard Privacy
+In the same way that a `plot` can be `public`, `private` or `secret`, dashboards can also be `public`, `private` or `secret` independent of the plots inside them. So if you're sharing a `dashboard` with someone and one or more of your plots are set to `private`, they will not show for the other user. For more information about this refer to the [Dashboard Privacy Doc](http://help.plot.ly/dashboard-privacy/).
+#### Initialize a Dashboard
+Now you can programmatically create and modify dashboards in Python. These dashboards can be uploaded to the Plotly server to join your other dashboards. You can also retrieve dashboards from Plotly.
+
+Let's start by creating a new dashboard. To get a preview of the HTML representation of the dashboard organization - i.e. where the items in the dashboard are located with respect to one another - run the `.get_preview()` method in a notebook cell. Everytime you modify your dashboard you should run this to check what it looks like.
+
+`IMPORTANT NOTE`: because of the way `.get_preview()` works _only_ one cell of the Jupyter notebook can display the preview of the dashboard after running this method. A good setup is to designate one cell to look like `my_dboard.get_preview()` and then run that every time you make a change to update the HTML representation of the dashboard. For the purposes of clarity, each modification of the dashboard in this tutorial is clearly shown.
+
+```python
+import plotly.dashboard_objs as dashboard
+
+import IPython.display
+from IPython.display import Image
+
+my_dboard = dashboard.Dashboard()
+my_dboard.get_preview()
+```
+
+#### Choose Plots
+In order to use the dashboard, we need to put some plots into it. You can either make these on-the-fly in Jupyter or use a plot you've already created by using its url.
+
+```python
+import plotly.graph_objs as go
+import plotly.plotly as py
+
+import numpy as np
+
+colorscale = [[0, '#FAEE1C'], [0.33, '#F3558E'], [0.66, '#9C1DE7'], [1, '#581B98']]
+trace1 = go.Scatter(
+    y = np.random.randn(500),
+    mode='markers',
+    marker=dict(
+        size=16,
+        color = np.random.randn(500),
+        colorscale=colorscale,
+        showscale=True
+    )
+)
+data = [trace1]
+url_1 = py.plot(data, filename='scatter-for-dashboard', auto_open=False)
+py.iplot(data, filename='scatter-for-dashboard')
+```
+
+Create a plot with a secret key:
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+x0 = np.random.randn(50)
+x1 = np.random.randn(50) + 2
+x2 = np.random.randn(50) + 4
+x3 = np.random.randn(50) + 6
+
+colors = ['#FAEE1C', '#F3558E', '#9C1DE7', '#581B98']
+
+trace0 = go.Box(x=x0, marker={'color': colors[0]})
+trace1 = go.Box(x=x1, marker={'color': colors[1]})
+trace2 = go.Box(x=x2, marker={'color': colors[2]})
+trace3 = go.Box(x=x3, marker={'color': colors[3]})
+data = [trace0, trace1, trace2, trace3]
+
+url_2 = py.plot(data, filename='box-plots-for-dashboard', sharing='secret', auto_open=False)
+py.iplot(data, filename='box-plots-for-dashboard')
+```
+
+```python
+url_2
+```
+
+<!-- #region -->
+#### Add a Box
+If you want to place a plot, text box or a webpage into the dashboard, you need to place it in a `box` (which is just a dictionary) and `insert` it into your dashboard. We will be inserting a plot, a text box, and a secret plot.
+
+A box with a plot in it takes the form:
+```
+{
+    'type': 'box',
+    'boxType': 'plot',
+    'fileId': '',
+    'shareKey': None,
+    'title': ''
+}
+```
+- `fileId` is of the form `username:number` (eg. 'PlotBot:1300') which can be found in the url of your plot once it's up on the Plotly server.
+- `shareKey`: optional - the sharekey if your plot is secret.
+- `title`: optional - sets the title of your box.
+
+A box with text in it takes the form:
+```
+{
+    'type': 'box',
+    'boxType': 'text',
+    'text': '',
+    'title': ''
+}
+```
+- `text`: the text you want displayed in your box.
+- `title`: optional - sets the title of your box.
+
+A box with a webpage in it takes the form:
+```
+{
+    'type': 'box',
+    'boxType': 'webpage',
+    'url': '',
+    'title': ''
+}
+```
+- `url`: the url of your webpage (eg. 'https://en.wikipedia.org/wiki/Main_Page').
+- `title`: optional - sets the title of your box.
+
+Note: As above, you can run `py.plot()` to return the url of your plot and then assign it to a variable to use in a dashboard later.
+<!-- #endregion -->
+
+To extract the fileId from a url, use the `fileId_from_url` below. If your url is `secret`, use `sharekey_from_url` to return the sharekey from the url, then place in your box that contains a secret plot.
+
+```python
+import re
+
+def fileId_from_url(url):
+    """Return fileId from a url."""
+    raw_fileId = re.findall("~[A-z]+/[0-9]+", url)[0][1: ]
+    return raw_fileId.replace('/', ':')
+
+def sharekey_from_url(url):
+    """Return the sharekey from a url."""
+    if 'share_key=' not in url:
+        return "This url is not 'sercret'. It does not have a secret key."
+    return url[url.find('share_key=') + len('share_key='):]
+
+fileId_1 = fileId_from_url(url_1)
+fileId_2 = fileId_from_url(url_2)
+
+box_a = {
+    'type': 'box',
+    'boxType': 'plot',
+    'fileId': fileId_1,
+    'title': 'scatter-for-dashboard'
+}
+
+text_for_box = """
+## Distributions:
+
+
+#### Scatter Plot
+1. Ranging 0 - 500
+2. Even distribution
+
+#### Box Plot
+1. Similar Range
+2. Outliers present in trace 1 and trace 3
+
+You can view more markdown tips [here](https://daringfireball.net/projects/markdown/syntax).
+"""
+
+box_b = {
+    'type': 'box',
+    'boxType': 'text',
+    'text': text_for_box,
+    'title': 'Markdown Options for Text Box'
+}
+
+box_c = {
+    'type': 'box',
+    'boxType': 'plot',
+    'fileId': fileId_2,
+    'title': 'box-for-dashboard',
+    'shareKey': sharekey_from_url(url_2)
+}
+
+my_dboard.insert(box_c)
+```
+
+![IPython terminal](https://images.plot.ly/plotly-documentation/images/dashboard_1.png)
+
+```python
+my_dboard.get_preview()
+```
+
+```python
+my_dboard.insert(box_a, 'above', 1)
+```
+
+![IPython terminal](https://images.plot.ly/plotly-documentation/images/dashboard_2.png)
+
+
+#### Add Box with Custom Sizing
+By default when a box is inserted into the dashboard layout it splits the box it is referencing equally into two parts. You can now manually control the percentage that the new box takes. Use `fill_percent` to specify the percentage of the container box from the given side that the new box occupies. Run `help(dashboard.Dashboard.insert)` for more help.
+
+```python
+my_dboard.insert(box_b, 'left', 1, fill_percent=30)
+```
+
+![IPython terminal](https://images.plot.ly/plotly-documentation/images/dashboard_3.png)
+
+
+#### Get Box
+Each time `my_dboard.get_preview()` is run a layout of the dashboard is returned where each rectangular area is denoted by a number in the center. These numbers or `box ids` are essentially lookup keys that are assigned on-the-fly each time `.get_preview()` is run and are liable to change.
+
+Remember that a box is just a dictionary that specifies the plot, webpage or text that it contains. For example, let's say you want to see what plot will show up in the region `1` of the dashboard. Run `my_dboard.get_box(1)` and the dict of the box will be returned:
+
+```python
+my_dboard.get_box(1)
+```
+
+You can now reassign the values in the dictionary to update that box. For example, you can change the title of that plot:
+
+```python
+my_dboard.get_box(1)['title'] = 'a new title'
+my_dboard.get_box(1)
+```
+
+#### Swap Boxes
+If you want to swap the locations of two boxes you've already placed in the dashboard, run `my_dboard.get_preview()` to look at the layout of the dashboard, then simply pick two _unique_ box ids and you will swap the contents stored at those locations.
+
+```python
+my_dboard.get_box(3)['title']
+```
+
+```python
+my_dboard.swap(2, 3)
+my_dboard.get_box(3)['title']
+```
+
+#### Remove Box
+You can remove a box from the dashboard by identifying its box id from the `my_dboard.get_preview()`.
+
+```python
+my_dboard.insert(box_a, 'below', 2)
+```
+
+![IPython terminal](https://images.plot.ly/plotly-documentation/images/dashboard_4.png)
+
+```python
+my_dboard.remove(3)
+```
+
+![IPython terminal](https://images.plot.ly/plotly-documentation/images/dashboard_3.png)
+
+
+#### Add Title
+Set the title of your dashboard.
+
+```python
+my_dboard['settings']['title'] = 'My First Dashboard with Python'
+```
+
+#### Add a Logo
+Add a logo to the top-left corner of the dashboard.
+
+```python
+my_dboard['settings']['logoUrl'] = 'https://images.plot.ly/language-icons/api-home/python-logo.png'
+```
+
+#### Add Links
+Add some links to the header of the dashboard.
+
+```python
+my_dboard['settings']['links'] = []
+my_dboard['settings']['links'].append({'title': 'Link to Plotly', 'url': 'https://plot.ly/'})
+my_dboard['settings']['links'].append({'title': 'Link to Python Website', 'url': 'https://www.python.org/'})
+```
+
+#### Change Color Settings
+
+```python
+my_dboard['settings']['foregroundColor'] = '#000000'
+my_dboard['settings']['backgroundColor'] = '#adcaea'
+my_dboard['settings']['headerForegroundColor'] = '#ffffff'
+my_dboard['settings']['headerBackgroundColor'] = '#D232C8'
+my_dboard['settings']['boxBackgroundColor'] = '#ffffff'
+my_dboard['settings']['boxBorderColor'] = '#000000'
+my_dboard['settings']['boxHeaderBackgroundColor'] = '#ffffff'
+```
+
+#### Change Font Settings
+
+Note that all other settings available in the [dashboard online creator](https://plot.ly/dashboard/create/#/) are also available to with the dashboard API.
+
+```python
+my_dboard['settings']['fontFamily'] = 'Raleway'
+my_dboard['settings']['headerFontSize'] = '1.6em'
+my_dboard['settings']['headerFontWeight'] = '200'
+```
+
+#### Update Dashboard Size
+
+```python
+stacked_dboard = dashboard.Dashboard()
+text_box = {
+    'type': 'box',
+    'boxType': 'text',
+    'text': 'empty space'
+}
+for _ in range(5):
+    stacked_dboard.insert(text_box, 'below', 1)
+# stacked_dboard.get_preview()
+```
+
+If a dashboard looks like the one above with small boxes, it may be difficult to resize in the [online creator](https://plot.ly/dashboard/create/). To avoid this issue, resize the dashboard:
+
+```python
+stacked_dboard['layout']['size'] = 3000
+```
+
+#### Upload Dashboard
+To upload your dashboard to your [Plotly cloud account](https://plot.ly/organize/home/) use `py.dashboard_ops.upload()`.
+
+```python
+import plotly.plotly as py
+py.dashboard_ops.upload(my_dboard, 'My First Dashboard with Python')
+```
+
+[![](https://images.plot.ly/plotly-documentation/images/my_dboard_from_API_with_logo_and_links.png)](https://plot.ly/~PythonPlotBot/540/my-first-dashboard-with-python/)
+
+
+#### Retrieve Dashboard
+You can also retrieve any of your dashboards from Plotly. To see what dashboards you have in the Plotly cloud, run `py.dashboard_ops.get_dashboard_names()` to get a list of the dashboards you have in your files. To grab a specific dashboard, simply input its name into `py.dashboard_ops.get_dashboard()` to create a `Dashboard()`.
+
+```python
+py.dashboard_ops.get_dashboard_names()
+```
+
+```python
+recent_dboard = py.dashboard_ops.get_dashboard('My First Dashboard with Python')
+```
+
+#### Examples
+- [Twitter Marketing Campaign](https://plot.ly/dashboard/jackp:16823/present)
+- [Shell: Integrated Gas](https://plot.ly/dashboard/jackp:16820/present)
+- [US Wind Turbine Example](https://plot.ly/dashboard/jackluo:430/present)
+- [Motorcars Example](https://plot.ly/dashboard/jackp%3A16818/present).
+
+You can learn more about making dashboards by going to https://plot.ly/python/dashboard/
+
+
+#### Reference
+
+```python
+help(py.dashboard_ops)
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+!pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'dashboard-api.ipynb', 'python/create-online-dashboard/', 'Dashboard API | plotly',
+    'How to create and publish a dashboard with the Python API.',
+    title = 'Dashboard API | plotly',
+    name = 'Dashboard API',
+    thumbnail='thumbnail/dashboard.jpg', language='python',
+    page_type='u-guide', has_thumbnail='true', display_as='legacy_charts',
+    ipynb= '~notebook_demo/148', order=0)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/discrete-frequency.md plotly-7.1.0+dfsg1/doc/unconverted/python/discrete-frequency.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/discrete-frequency.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/discrete-frequency.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,153 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform discrete frequency analysis using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Discrete Frequency
+    order: 3
+    page_type: example_index
+    permalink: python/discrete-frequency/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [Numpy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Import Data
+
+
+We will import a dataset to perform our discrete frequency analysis on. We will look at the consumption of alcohol by country in 2010.
+
+```python
+data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2010_alcohol_consumption_by_country.csv')
+df = data[0:10]
+
+table = FF.create_table(df)
+py.iplot(table, filename='alcohol-data-sample')
+```
+
+#### Probability Distribution
+
+
+We can produce a histogram plot of the data with the y-axis representing the probability distribution of the data.
+
+```python
+x = data['alcohol'].values.tolist()
+
+trace = go.Histogram(x=x, histnorm='probability',
+                     xbins=dict(start=np.min(x),
+                                size=0.25,
+                                end=np.max(x)),
+                     marker=dict(color='rgb(25, 25, 100)'))
+
+layout = go.Layout(
+    title="Histogram with Probability Distribution"
+)
+
+fig = go.Figure(data=go.Data([trace]), layout=layout)
+py.iplot(fig, filename='histogram-prob-dist')
+```
+
+#### Frequency Counts
+
+```python
+trace = go.Histogram(x=x,
+                     xbins=dict(start=np.min(x),
+                                size=0.25,
+                                end=np.max(x)),
+                     marker=dict(color='rgb(25, 25, 100)'))
+
+layout = go.Layout(
+    title="Histogram with Frequency Count"
+)
+
+fig = go.Figure(data=go.Data([trace]), layout=layout)
+py.iplot(fig, filename='histogram-discrete-freq-count')
+```
+
+#### Percentage
+
+```python
+trace = go.Histogram(x=x, histnorm='percent',
+                     xbins=dict(start=np.min(x),
+                                size=0.25,
+                                end=np.max(x)),
+                     marker=dict(color='rgb(50, 50, 125)'))
+
+layout = go.Layout(
+    title="Histogram with Frequency Count"
+)
+
+fig = go.Figure(data=go.Data([trace]), layout=layout)
+py.iplot(fig, filename='histogram-percentage')
+```
+
+#### Cumulative Density Function
+
+
+We can also take the cumulative sum of our dataset and then plot the cumulative density function, or `CDF`, as a scatter plot
+
+```python
+cumsum = np.cumsum(x)
+
+trace = go.Scatter(x=[i for i in range(len(cumsum))], y=10*cumsum/np.linalg.norm(cumsum),
+                     marker=dict(color='rgb(150, 25, 120)'))
+layout = go.Layout(
+    title="Cumulative Distribution Function"
+)
+
+fig = go.Figure(data=go.Data([trace]), layout=layout)
+py.iplot(fig, filename='cdf-dataset')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Discrete-Frequency.ipynb', 'python/discrete-frequency/', 'Discrete Frequency | plotly',
+    'Learn how to perform discrete frequency analysis using Python.',
+    title='Discrete Frequency in Python. | plotly',
+    name='Discrete Frequency',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=3,
+    ipynb= '~notebook_demo/110')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/exponential-fits.md plotly-7.1.0+dfsg1/doc/unconverted/python/exponential-fits.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/exponential-fits.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/exponential-fits.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,126 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Create a exponential fit / regression in Python and add a line of
+      best fit to your chart.
+    display_as: statistics
+    language: python
+    layout: base
+    name: Exponential Fit
+    order: 11
+    page_type: example_index
+    permalink: python/exponential-fits/
+    thumbnail: thumbnail/exponential_fit.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Version Check
+Note: exponential fits are available in version <b>1.9.2+</b><br>
+Run  `pip install plotly --upgrade` to update your Plotly version
+
+```python
+import plotly
+plotly.__version__
+```
+
+### Exponential Fit
+
+```python
+# Learn about API authentication here: https://plot.ly/python/getting-started
+# Find your api_key here: https://plot.ly/settings/api
+
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+# Scientific libraries
+import numpy as np
+from scipy.optimize import curve_fit
+
+
+x = np.array([399.75, 989.25, 1578.75, 2168.25, 2757.75, 3347.25, 3936.75, 4526.25, 5115.75, 5705.25])
+y = np.array([109,62,39,13,10,4,2,0,1,2])
+
+def exponenial_func(x, a, b, c):
+    return a*np.exp(-b*x)+c
+
+
+popt, pcov = curve_fit(exponenial_func, x, y, p0=(1, 1e-6, 1))
+
+xx = np.linspace(300, 6000, 1000)
+yy = exponenial_func(xx, *popt)
+
+# Creating the dataset, and generating the plot
+trace1 = go.Scatter(
+                  x=x,
+                  y=y,
+                  mode='markers',
+                  marker=go.Marker(color='rgb(255, 127, 14)'),
+                  name='Data'
+                  )
+
+trace2 = go.Scatter(
+                  x=xx,
+                  y=yy,
+                  mode='lines',
+                  marker=go.Marker(color='rgb(31, 119, 180)'),
+                  name='Fit'
+                  )
+
+annotation = go.Annotation(
+                  x=2000,
+                  y=100,
+                  text='$\textbf{Fit}: 163.56e^{-0.00097x} - 1.16$',
+                  showarrow=False
+                  )
+layout = go.Layout(
+                title='Exponential Fit in Python',
+                plot_bgcolor='rgb(229, 229, 229)',
+                  xaxis=go.XAxis(zerolinecolor='rgb(255,255,255)', gridcolor='rgb(255,255,255)'),
+                  yaxis=go.YAxis(zerolinecolor='rgb(255,255,255)', gridcolor='rgb(255,255,255)'),
+                  annotations=[annotation]
+                )
+
+data = [trace1, trace2]
+fig = go.Figure(data=data, layout=layout)
+
+py.plot(fig, filename='Exponential-Fit-in-python')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'Exponential-fits.ipynb', 'python/exponential-fits/', 'Exponential Fit',
+    'Create a exponential fit / regression in Python and add a line of best fit to your chart.',
+    title = 'Exponential Fit',
+    name = 'Exponential Fit',
+    has_thumbnail='true', thumbnail='thumbnail/exponential_fit.jpg',
+    language='python', page_type='example_index',
+    display_as='statistics', order=11,
+    ipynb= '~notebook_demo/135')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/fft-filters.md plotly-7.1.0+dfsg1/doc/unconverted/python/fft-filters.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/fft-filters.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/fft-filters.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,236 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how filter out the frequencies of a signal by using low-pass,
+      high-pass and band-pass FFT filtering.
+    display_as: signal-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: FFT Filters
+    order: 2
+    page_type: example_index
+    permalink: python/fft-filters/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [Plotly](https://plot.ly/python/getting-started/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+import scipy
+
+from scipy import signal
+```
+
+#### Import Data
+An `FFT Filter` is a process that involves mapping a time signal from time-space to frequency-space in which frequency becomes an axis. By mapping to this space, we can get a better picture for how much of which frequency is in the original time signal and we can ultimately cut some of these frequencies out to remap back into time-space. Such filter types include `low-pass`, where lower frequencies are allowed to pass and higher ones get cut off -, `high-pass`, where higher frequencies pass, and `band-pass`, which selects only a narrow range or "band" of frequencies to pass through.
+
+Let us import some stock data to apply FFT Filtering:
+
+```python
+data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/wind_speed_laurel_nebraska.csv')
+df = data[0:10]
+
+table = ff.create_table(df)
+py.iplot(table, filename='wind-data-sample')
+```
+
+#### Plot the Data
+Let's look at our data in its raw form before doing any filtering.
+
+```python
+trace1 = go.Scatter(
+    x=list(range(len(list(data['10 Min Std Dev'])))),
+    y=list(data['10 Min Std Dev']),
+    mode='lines',
+    name='Wind Data'
+)
+
+layout = go.Layout(
+    showlegend=True
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+py.iplot(fig, filename='wind-raw-data-plot')
+```
+
+#### Low-Pass Filter
+A `Low-Pass Filter` is used to remove the higher frequencies in a signal of data.
+
+`fc` is the cutoff frequency as a fraction of the sampling rate, and `b` is the transition band also as a function of the sampling rate. `N` must be an odd number in our calculation as well.
+
+```python
+fc = 0.1
+b = 0.08
+N = int(np.ceil((4 / b)))
+if not N % 2: N += 1
+n = np.arange(N)
+
+sinc_func = np.sinc(2 * fc * (n - (N - 1) / 2.))
+window = 0.42 - 0.5 * np.cos(2 * np.pi * n / (N - 1)) + 0.08 * np.cos(4 * np.pi * n / (N - 1))
+sinc_func = sinc_func * window
+sinc_func = sinc_func / np.sum(sinc_func)
+
+s = list(data['10 Min Std Dev'])
+new_signal = np.convolve(s, sinc_func)
+
+trace1 = go.Scatter(
+    x=list(range(len(new_signal))),
+    y=new_signal,
+    mode='lines',
+    name='Low-Pass Filter',
+    marker=dict(
+        color='#C54C82'
+    )
+)
+
+layout = go.Layout(
+    title='Low-Pass Filter',
+    showlegend=True
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+py.iplot(fig, filename='fft-low-pass-filter')
+```
+
+#### High-Pass Filter
+Similarly a `High-Pass Filter` will remove the lower frequencies from a signal of data.
+
+Again, `fc` is the cutoff frequency as a fraction of the sampling rate, and `b` is the transition band also as a function of the sampling rate. `N` must be an odd number.
+
+Only by performing a spectral inversion afterwards after setting up our Low-Pass Filter will we get the High-Pass Filter.
+
+```python
+fc = 0.1
+b = 0.08
+N = int(np.ceil((4 / b)))
+if not N % 2: N += 1
+n = np.arange(N)
+
+sinc_func = np.sinc(2 * fc * (n - (N - 1) / 2.))
+window = np.blackman(N)
+sinc_func = sinc_func * window
+sinc_func = sinc_func / np.sum(sinc_func)
+
+# reverse function
+sinc_func = -sinc_func
+sinc_func[int((N - 1) / 2)] += 1
+
+s = list(data['10 Min Std Dev'])
+new_signal = np.convolve(s, sinc_func)
+
+trace1 = go.Scatter(
+    x=list(range(len(new_signal))),
+    y=new_signal,
+    mode='lines',
+    name='High-Pass Filter',
+    marker=dict(
+        color='#424242'
+    )
+)
+
+layout = go.Layout(
+    title='High-Pass Filter',
+    showlegend=True
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+py.iplot(fig, filename='fft-high-pass-filter')
+```
+
+#### Band-Pass Filter
+The `Band-Pass Filter` will allow you to reduce the frequencies outside of a defined range of frequencies. We can think of it as low-passing and high-passing at the same time.
+
+In the example below, `fL` and `fH` are the low and high cutoff frequencies respectively as a fraction of the sampling rate.
+
+```python
+fL = 0.1
+fH = 0.3
+b = 0.08
+N = int(np.ceil((4 / b)))
+if not N % 2: N += 1  # Make sure that N is odd.
+n = np.arange(N)
+
+# low-pass filter
+hlpf = np.sinc(2 * fH * (n - (N - 1) / 2.))
+hlpf *= np.blackman(N)
+hlpf = hlpf / np.sum(hlpf)
+
+# high-pass filter
+hhpf = np.sinc(2 * fL * (n - (N - 1) / 2.))
+hhpf *= np.blackman(N)
+hhpf = hhpf / np.sum(hhpf)
+hhpf = -hhpf
+hhpf[int((N - 1) / 2)] += 1
+
+h = np.convolve(hlpf, hhpf)
+s = list(data['10 Min Std Dev'])
+new_signal = np.convolve(s, h)
+
+trace1 = go.Scatter(
+    x=list(range(len(new_signal))),
+    y=new_signal,
+    mode='lines',
+    name='Band-Pass Filter',
+    marker=dict(
+        color='#BB47BE'
+    )
+)
+
+layout = go.Layout(
+    title='Band-Pass Filter',
+    showlegend=True
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+py.iplot(fig, filename='fft-band-pass-filter')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-FFT-Filters.ipynb', 'python/fft-filters/', 'FFT Filters | plotly',
+    'Learn how filter out the frequencies of a signal by using low-pass, high-pass and band-pass FFT filtering.',
+    title='FFT Filters in Python | plotly',
+    name='FFT Filters',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='signal-analysis', order=2)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/filled-area-animation.md plotly-7.1.0+dfsg1/doc/unconverted/python/filled-area-animation.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/filled-area-animation.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/filled-area-animation.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,155 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: How to make an animated filled-area plot with apple stock data in
+      Python.
+    display_as: animations
+    language: python
+    layout: base
+    name: Filled-Area Animation
+    order: 3
+    page_type: example_index
+    permalink: python/filled-area-animation/
+    thumbnail: thumbnail/apple_stock_animation.gif
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Version Check
+Note: Animations are available in version 1.12.10+
+Run `pip install plotly --upgrade` to update your Plotly version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Import Data
+Let us import some apple stock data for this animation.
+
+```python
+import plotly.plotly as py
+from plotly.grid_objs import Grid, Column
+from plotly.tools import FigureFactory as FF
+
+import time
+from datetime import datetime
+import numpy as np
+import pandas as pd
+
+appl = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
+appl.columns = [col.replace('AAPL.', '') for col in appl.columns]
+apple_data_matrix = appl.head(10).round(2)
+
+table = FF.create_table(apple_data_matrix)
+py.iplot(table, filename='apple_data_table')
+```
+
+#### Make the Grid
+
+```python
+def to_unix_time(dt):
+    epoch =  datetime.utcfromtimestamp(0)
+    return (dt - epoch).total_seconds() * 1000
+
+appl_price = list(appl['Adjusted'])
+my_columns = []
+for k in range(len(appl.Date) - 1):
+    my_columns.append(Column(list(appl.Date)[:k + 1], 'x{}'.format(k + 1)))
+    my_columns.append(Column(appl_price[:k + 1], 'y{}'.format(k + 1)))
+grid = Grid(my_columns)
+py.grid_ops.upload(grid, 'AAPL-daily-stock-price' + str(time.time()), auto_open=False)
+```
+
+#### Make the Figure
+
+```python
+data=[dict(type='scatter',
+           xsrc=grid.get_column_reference('x1'),
+           ysrc= grid.get_column_reference('y1'),
+           name='AAPL',
+           mode='lines',
+           line=dict(color= 'rgb(114, 186, 59)'),
+           fill='tozeroy',
+           fillcolor='rgba(114, 186, 59, 0.5)')]
+
+axis=dict(ticklen=4,
+          mirror=True,
+          zeroline=False,
+          showline=True,
+          autorange=False,
+          showgrid=False)
+
+layout = dict(title='AAPL Daily Stock Price',
+              font=dict(family='Balto'),
+              showlegend=False,
+              autosize=False,
+              width=800,
+              height=400,
+              xaxis=dict(axis, **{'nticks':12, 'tickangle':-45,
+                                  'range': [to_unix_time(datetime(2015, 2, 17)),
+                                            to_unix_time(datetime(2016, 11, 30))]}),
+              yaxis=dict(axis, **{'title': '$', 'range':[0,170]}),
+              updatemenus=[dict(type='buttons',
+                                showactive=False,
+                                y=1,
+                                x=1.1,
+                                xanchor='right',
+                                yanchor='top',
+                                pad=dict(t=0, r=10),
+                                buttons=[dict(label='Play',
+                                              method='animate',
+                                              args=[None, dict(frame=dict(duration=50, redraw=False),
+                                                               transition=dict(duration=0),
+                                                               fromcurrent=True,
+                                                               mode='immediate')])])])
+
+frames=[{'data':[{'xsrc': grid.get_column_reference('x{}'.format(k + 1)),
+                  'ysrc': grid.get_column_reference('y{}'.format(k + 1))}],
+         'traces': [0]
+        } for k in range(len(appl.Date) - 1)]
+
+fig=dict(data=data, layout=layout, frames=frames)
+py.icreate_animations(fig, 'AAPL-stockprice' + str(time.time()))
+```
+
+#### Reference
+For additional information on filled area plots in Plotly see: https://plot.ly/python/filled-area-plots/.
+For more documentation on creating animations with Plotly, see https://plot.ly/python/#animations.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+!pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'filled-area-animation.ipynb', 'python/filled-area-animation/', 'Filled-Area Animation | plotly',
+    'How to make an animated filled-area plot with apple stock data in Python.',
+    title='Filled-Area Animation | plotly',
+    name='Filled-Area Animation',
+    language='python',
+    page_type='example_index', has_thumbnail='true', thumbnail='thumbnail/apple_stock_animation.gif',
+    display_as='animations', ipynb= '~notebook_demo/128', order=3)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/filled-chord-diagram.md plotly-7.1.0+dfsg1/doc/unconverted/python/filled-chord-diagram.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/filled-chord-diagram.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/filled-chord-diagram.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,625 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make an interactive filled-chord diagram in Python with Plotly
+      and iGraph.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Filled Chord Diagram
+    order: 24
+    page_type: u-guide
+    permalink: python/filled-chord-diagram/
+    thumbnail: thumbnail/filled-chord.jpg
+---
+
+# Filled-Chord Diagrams with Plotly
+
+Circular layout or [Chord diagram](https://en.wikipedia.org/wiki/Chord_diagram) is a method of visualizing  data that describe relationships. It was intensively promoted  through [Circos](http://circos.ca/), a software package in Perl that  was initially designed for displaying genomic data.
+
+M Bostock developed reusable charts  for [chord diagrams](http://bl.ocks.org/mbostock/4062006) in d3.js. Two years ago on [stackoverflow](http://stackoverflow.com/questions/19105801/chord-diagram-in-python), the existence of a Python package for plotting chord diagrams was addressed, but the question was closed due to being *off topic*.<br> Here we show that a chord diagram can be generated in Python with Plotly. We illustrate the method of generating a chord diagram from data recorded in a square matrix. The rows and columns represent the same entities.
+
+This example considers a community of 5 friends on Facebook. We record the number of comments posted by each member on the other friends' walls. The data table is given in the next cell:
+
+```python
+import plotly.plotly as py
+import plotly.figure_factory as ff
+import plotly.graph_objs as go
+
+data = [['', 'Emma', 'Isabella', 'Ava', 'Olivia', 'Sophia', 'row-sum'],
+        ['Emma', 16, 3, 28, 0, 18, 65],
+        ['Isabella', 18, 0, 12, 5, 29, 64],
+        ['Ava', 9, 11, 17, 27, 0, 64],
+        ['Olivia', 19, 0, 31, 11, 12, 73],
+        ['Sophia', 23, 17, 10, 0, 34, 84]]
+
+table = ff.create_table(data, index=True)
+py.iplot(table, filename='Data-Table')
+```
+
+The aim of our visualization is to illustrate the total number of posts by each community member, and the
+flows of posts between pairs of friends.
+
+```python
+import numpy as np
+
+matrix=np.array([[16,  3, 28,  0, 18],
+                 [18,  0, 12,  5, 29],
+                 [ 9, 11, 17, 27,  0],
+                 [19,  0, 31, 11, 12],
+                 [23, 17, 10,  0, 34]], dtype=int)
+
+def check_data(data_matrix):
+    L, M=data_matrix.shape
+    if L!=M:
+        raise ValueError('Data array must have (n,n) shape')
+    return L
+
+L=check_data(matrix)
+```
+
+A chord diagram encodes information in two graphical objects:
+  - ideograms, represented by   distinctly colored arcs of circles;
+  - ribbons, that are planar shapes bounded by two quadratic Bezier curves and two arcs of circle,that can degenerate to a point;
+
+
+### Ideograms ###
+
+
+Summing up the entries on each matrix row, one gets a value (in our example this value is equal to the number of posts by a community member).
+Let us denote by `total_comments` the total number of posts recorded in this community.
+
+Theoretically the interval `[0, total_comments)` is mapped linearly onto the unit circle, identified with the interval $[0,2\pi)$.
+
+For a better looking plot one proceeds as follows: starting from the angular position $0$, in counter-clockwise direction, one draws successively, around the unit circle,  two parallel arcs of length equal to a mapped row sum value, minus a fixed gap. Click the image below:
+
+
+
+
+<div>
+    <a href="https://plot.ly/~empet/12234/" target="_blank" title="Ideograms" style="display: block; text-align: center;"><img src="https://plot.ly/~empet/12234.png" alt="Ideograms" style="max-width: 100%;width: 400px;"  width="400" onerror="this.onerror=null;this.src='https://plot.ly/404.png';" /></a>
+    <script data-plotly="empet:12234"  src="https://plot.ly/embed.js" async></script>
+</div>
+
+
+
+Now we define the functions that process  data in order to get ideogram ends.
+
+As we stressed the unit circle is oriented counter-clockwise.
+In order to get  an arc of circle of  end angular
+coordinates $\theta_0<\theta_1$, we define a function `moduloAB` that resolves the case when an arc contains
+the  point of angular coordinate $0$ (for example $\theta_0=2\pi-\pi/12$, $\theta_1=\pi/9$). The function corresponding to $a=-\pi, b=\pi$  allows to map the interval $[0,2\pi)$ onto $[-\pi, \pi)$. Via this transformation we have:
+
+$\theta_0\mapsto \theta'_0=-\pi/12$, and
+
+$ \theta_1=\mapsto \theta'_1=\pi/9$,
+
+and now $\theta'_0<\theta'_1$.
+
+```python
+PI=np.pi
+
+def moduloAB(x, a, b): #maps a real number onto the unit circle identified with
+                       #the interval [a,b), b-a=2*PI
+        if a>=b:
+            raise ValueError('Incorrect interval ends')
+        y=(x-a)%(b-a)
+        return y+b if y<0 else y+a
+
+def test_2PI(x):
+    return 0<= x <2*PI
+```
+
+Compute the row sums and the lengths of corresponding ideograms:
+
+```python
+row_sum=[np.sum(matrix[k,:]) for k in range(L)]
+
+#set the gap between two consecutive ideograms
+gap=2*PI*0.005
+ideogram_length=2*PI*np.asarray(row_sum)/sum(row_sum)-gap*np.ones(L)
+```
+
+The next function returns the list of  end angular coordinates for each ideogram arc:
+
+```python
+def get_ideogram_ends(ideogram_len, gap):
+    ideo_ends=[]
+    left=0
+    for k in range(len(ideogram_len)):
+        right=left+ideogram_len[k]
+        ideo_ends.append([left, right])
+        left=right+gap
+    return ideo_ends
+
+ideo_ends=get_ideogram_ends(ideogram_length, gap)
+ideo_ends
+```
+
+The function `make_ideogram_arc` returns equally spaced points on an ideogram arc, expressed as complex
+numbers in polar form:
+
+```python
+def make_ideogram_arc(R, phi, a=50):
+    # R is the circle radius
+    # phi is the list of ends angle coordinates of an arc
+    # a is a parameter that controls the number of points to be evaluated on an arc
+    if not test_2PI(phi[0]) or not test_2PI(phi[1]):
+        phi=[moduloAB(t, 0, 2*PI) for t in phi]
+    length=(phi[1]-phi[0])% 2*PI
+    nr=5 if length<=PI/4 else int(a*length/PI)
+
+    if phi[0] < phi[1]:
+        theta=np.linspace(phi[0], phi[1], nr)
+    else:
+        phi=[moduloAB(t, -PI, PI) for t in phi]
+        theta=np.linspace(phi[0], phi[1], nr)
+    return R*np.exp(1j*theta)
+```
+
+The real and imaginary parts of these complex numbers will be used to define the ideogram as a [Plotly
+shape](https://plot.ly/python/shapes/) bounded by a SVG path.
+
+```python
+z=make_ideogram_arc(1.3, [11*PI/6, PI/17])
+print z
+```
+
+Set ideograms labels and colors:
+
+```python
+labels=['Emma', 'Isabella', 'Ava', 'Olivia', 'Sophia']
+ideo_colors=['rgba(244, 109, 67, 0.75)',
+             'rgba(253, 174, 97, 0.75)',
+             'rgba(254, 224, 139, 0.75)',
+             'rgba(217, 239, 139, 0.75)',
+             'rgba(166, 217, 106, 0.75)']#brewer colors with alpha set on 0.75
+```
+
+### Ribbons in a chord diagram ###
+
+
+While ideograms illustrate how many comments posted each member of the Facebook community,  ribbons
+give a comparative information on the flows of comments from one friend to another.
+
+To illustrate this flow we map data onto the unit circle. More precisely, for each matrix row, $k$, the application:
+
+`t`$\mapsto$ `t*ideogram_length[k]/row_sum[k]`
+
+maps the interval `[0, row_sum[k]]` onto
+the interval `[0, ideogram_length[k]]`. Hence each entry `matrix[k][j]` of the $k^{th}$  row is mapped to `matrix[k][j]*ideogram_length[k]/row_value[k]`.
+
+The function `map_data` maps all matrix entries to the corresponding values in the intervals associated to ideograms:
+
+```python
+def map_data(data_matrix, row_value, ideogram_length):
+    mapped=np.zeros(data_matrix.shape)
+    for j  in range(L):
+        mapped[:, j]=ideogram_length*data_matrix[:,j]/row_value
+    return mapped
+
+mapped_data=map_data(matrix, row_sum, ideogram_length)
+mapped_data
+```
+
+- To each pair of values `(mapped_data[k][j], mapped_data[j][k])`, $k<=j$,  one associates a ribbon, that is a curvilinear filled rectangle (that can be degenerate), having as opposite sides two subarcs of the $k^{th}$ ideogram, respectively $j^{th}$ ideogram, and two arcs of quadratic Bézier curves.
+
+
+Here we illustrate the ribbons associated to pairs `(mapped_data[0][j], mapped_data[j][0])`, $j=\overline{0,4}$,
+that illustrate the flow of comments between Emma and all other friends, and  herself:
+
+
+<div>
+    <a href="https://plot.ly/~empet/12519/" target="_blank" title="Ribbons" style="display: block; text-align: center;"><img src="https://plot.ly/~empet/12519.png" alt="Ribbons" style="max-width: 100%;width: 400px;"  width="400" onerror="this.onerror=null;this.src='https://plot.ly/404.png';" /></a>
+    <script data-plotly="empet:12519"  src="https://plot.ly/embed.js" async></script>
+</div>
+
+
+
+
+- For a better looking chord diagram,
+[Circos documentation](http://circos.ca/presentations/articles/vis_tables1/) recommends to sort increasingly each row of the mapped_data.
+
+
+The  array `idx_sort`, defined below, has on each row the indices that sort the corresponding row in `mapped_data`:
+
+```python
+idx_sort=np.argsort(mapped_data, axis=1)
+idx_sort
+```
+
+In the following we call ribbon ends, the lists `l=[l[0], l[1]]`, `r=[r[0], r[1]]` having as elements the angular coordinates
+of the ends of arcs that are opposite sides in a ribbon. These arcs are sub-arcs in the internal boundaries of
+the ideograms, connected by the ribbon
+(see the image above).
+
+
+- Compute the ribbon ends  and store them as tuples
+in a list of lists ($L\times L$):
+
+```python
+def make_ribbon_ends(mapped_data, ideo_ends,  idx_sort):
+    L=mapped_data.shape[0]
+    ribbon_boundary=np.zeros((L,L+1))
+    for k in range(L):
+        start=ideo_ends[k][0]
+        ribbon_boundary[k][0]=start
+        for j in range(1,L+1):
+            J=idx_sort[k][j-1]
+            ribbon_boundary[k][j]=start+mapped_data[k][J]
+            start=ribbon_boundary[k][j]
+    return [[(ribbon_boundary[k][j],ribbon_boundary[k][j+1] ) for j in range(L)] for k in range(L)]
+
+ribbon_ends=make_ribbon_ends(mapped_data, ideo_ends,  idx_sort)
+print 'ribbon ends starting from the ideogram[2]
', ribbon_ends[2]
+```
+
+We note that `ribbon_ends[k][j]` correspond to `mapped_data[i][idx_sort[k][j]]`, i.e. the length of the arc of ends
+in `ribbon_ends[k][j]` is equal to `mapped_data[i][idx_sort[k][j]]`.
+
+
+Now we define a few functions that compute the  control points for Bézier ribbon sides.
+
+
+The function `control_pts` returns the cartesian coordinates of  the  control points, $b_0, b_1, b_2$, supposed as being  initially located on the unit circle, and thus defined only by their angular coordinate.  The angular coordinate
+of the point $b_1$ is the mean of angular coordinates of the points $b_0, b_2$.
+
+Since for a  Bézier ribbon side only $b_0, b_2$ are placed on the unit circle, one gives `radius` as a parameter that controls position of $b_1$.  `radius` is the distance  of $b_1$ to the circle center.
+
+```python
+def control_pts(angle, radius):
+    #angle is a  3-list containing angular coordinates of the control points b0, b1, b2
+    #radius is the distance from b1 to the  origin O(0,0)
+
+    if len(angle)!=3:
+        raise InvalidInputError('angle must have len =3')
+    b_cplx=np.array([np.exp(1j*angle[k]) for k in range(3)])
+    b_cplx[1]=radius*b_cplx[1]
+    return zip(b_cplx.real, b_cplx.imag)
+```
+
+```python
+def ctrl_rib_chords(l, r, radius):
+    # this function returns a 2-list containing control polygons of the two quadratic Bezier
+    #curves that are opposite sides in a ribbon
+    #l (r) the list of angular variables of the ribbon arc ends defining
+    #the ribbon starting (ending) arc
+    # radius is a common parameter for both control polygons
+    if len(l)!=2 or len(r)!=2:
+        raise ValueError('the arc ends must be elements in a list of len 2')
+    return [control_pts([l[j], (l[j]+r[j])/2, r[j]], radius) for j in range(2)]
+```
+
+Each ribbon is colored with the color of one of the two  ideograms it connects.
+We define an L-list of L-lists of colors for ribbons. Denote it by `ribbon_color`.
+
+`ribbon_color[k][j]` is the Plotly color string for the ribbon associated to `mapped_data[k][j]` and `mapped_data[j][k]`, i.e. the ribbon connecting two subarcs in the $k^{th}$, respectively, $j^{th}$ ideogram. Hence  this structure is symmetric.
+
+
+Initially we define:
+
+```python
+ribbon_color=[L*[ideo_colors[k]] for k in range(L)]
+```
+
+and then eventually we change the color in a few positions.
+
+For our example we change:
+
+```python
+ribbon_color[0][4]=ideo_colors[4]
+ribbon_color[1][2]=ideo_colors[2]
+ribbon_color[2][3]=ideo_colors[3]
+ribbon_color[2][4]=ideo_colors[4]
+```
+
+The symmetric locations are not modified, because  we do not access
+`ribbon_color[k][j]`, $k>j$, when drawing the ribbons.
+
+
+Functions that return the Plotly SVG paths that are  ribbon boundaries:
+
+```python
+def make_q_bezier(b):# defines the Plotly SVG path for a quadratic Bezier curve defined by the
+                     #list of its control points
+    if len(b)!=3:
+        raise valueError('control poligon must have 3 points')
+    A, B, C=b
+    return 'M '+str(A[0])+',' +str(A[1])+' '+'Q '+\
+                str(B[0])+', '+str(B[1])+ ' '+\
+                str(C[0])+', '+str(C[1])
+
+b=[(1,4), (-0.5, 2.35), (3.745, 1.47)]
+
+make_q_bezier(b)
+```
+
+`make_ribbon_arc`  returns the Plotly SVG path corresponding to an arc represented by its end angular coordinates `theta0, theta1`.
+
+
+```python
+def make_ribbon_arc(theta0, theta1):
+
+    if test_2PI(theta0) and test_2PI(theta1):
+        if theta0 < theta1:
+            theta0= moduloAB(theta0, -PI, PI)
+            theta1= moduloAB(theta1, -PI, PI)
+            if theta0*theta1>0:
+                raise ValueError('incorrect angle coordinates for ribbon')
+
+        nr=int(40*(theta0-theta1)/PI)
+        if nr<=2: nr=3
+        theta=np.linspace(theta0, theta1, nr)
+        pts=np.exp(1j*theta)# points on arc in polar complex form
+
+        string_arc=''
+        for k in range(len(theta)):
+            string_arc+='L '+str(pts.real[k])+', '+str(pts.imag[k])+' '
+        return   string_arc
+    else:
+        raise ValueError('the angle coordinates for an arc side of a ribbon must be in [0, 2*pi]')
+
+make_ribbon_arc(np.pi/3, np.pi/6)
+```
+
+Finally we are ready to define data and layout for the Plotly plot of the chord diagram.
+
+```python
+def make_layout(title, plot_size):
+    axis=dict(showline=False, # hide axis line, grid, ticklabels and  title
+          zeroline=False,
+          showgrid=False,
+          showticklabels=False,
+          title=''
+          )
+
+    return go.Layout(title=title,
+                  xaxis=dict(axis),
+                  yaxis=dict(axis),
+                  showlegend=False,
+                  width=plot_size,
+                  height=plot_size,
+                  margin=dict(t=25, b=25, l=25, r=25),
+                  hovermode='closest',
+                  shapes=[]# to this list one appends below the dicts defining the ribbon,
+                           #respectively the ideogram shapes
+                 )
+```
+
+Function that returns the Plotly shape of an ideogram:
+
+```python
+def make_ideo_shape(path, line_color, fill_color):
+    #line_color is the color of the shape boundary
+    #fill_collor is the color assigned to an ideogram
+    return  dict(
+                  line=dict(
+                  color=line_color,
+                  width=0.45
+                 ),
+
+            path=  path,
+            type='path',
+            fillcolor=fill_color,
+            layer='below'
+        )
+
+```
+
+We generate two types of ribbons: a ribbon connecting subarcs in two distinct ideograms, respectively
+a ribbon from one ideogram to itself (it corresponds to `mapped_data[k][k]`, i.e. it gives the flow of comments
+from a community member to herself).
+
+```python
+def make_ribbon(l, r, line_color, fill_color, radius=0.2):
+    #l=[l[0], l[1]], r=[r[0], r[1]]  represent the opposite arcs in the ribbon
+    #line_color is the color of the shape boundary
+    #fill_color is the fill color for the ribbon shape
+    poligon=ctrl_rib_chords(l,r, radius)
+    b,c =poligon
+
+    return  dict(
+                line=dict(
+                color=line_color, width=0.5
+            ),
+            path=  make_q_bezier(b)+make_ribbon_arc(r[0], r[1])+
+                   make_q_bezier(c[::-1])+make_ribbon_arc(l[1], l[0]),
+            type='path',
+            fillcolor=fill_color,
+            layer='below'
+        )
+
+def make_self_rel(l, line_color, fill_color, radius):
+    #radius is the radius of Bezier control point b_1
+    b=control_pts([l[0], (l[0]+l[1])/2, l[1]], radius)
+    return  dict(
+                line=dict(
+                color=line_color, width=0.5
+            ),
+            path=  make_q_bezier(b)+make_ribbon_arc(l[1], l[0]),
+            type='path',
+            fillcolor=fill_color,
+            layer='below'
+        )
+
+def invPerm(perm):
+    # function that returns the inverse of a permutation, perm
+    inv = [0] * len(perm)
+    for i, s in enumerate(perm):
+        inv[s] = i
+    return inv
+
+layout=make_layout('Chord diagram', 400)
+
+```
+
+Now let us explain the key point of associating  ribbons  to right data:
+
+From the definition of `ribbon_ends` we notice that `ribbon_ends[k][j]` corresponds to data stored in
+`matrix[k][sigma[j]]`, where `sigma` is the permutation of indices $0, 1, \ldots L-1$, that sort the row k in `mapped_data`.
+If `sigma_inv` is the inverse permutation of `sigma`, we get that to `matrix[k][j]` corresponds the
+`ribbon_ends[k][sigma_inv[j]]`.
+
+
+`ribbon_info` is a list of dicts setting the information that is displayed when hovering the mouse over the  ribbon ends.
+
+
+Set the radius of Bézier control point, $b_1$, for each ribbon associated to a diagonal data entry:
+
+```python
+radii_sribb=[0.4, 0.30, 0.35, 0.39, 0.12]# these value are set after a few trials
+```
+
+```python
+ribbon_info=[]
+for k in range(L):
+
+    sigma=idx_sort[k]
+    sigma_inv=invPerm(sigma)
+    for j in range(k, L):
+        if matrix[k][j]==0 and matrix[j][k]==0: continue
+        eta=idx_sort[j]
+        eta_inv=invPerm(eta)
+        l=ribbon_ends[k][sigma_inv[j]]
+
+        if j==k:
+            layout['shapes'].append(make_self_rel(l, 'rgb(175,175,175)' ,
+                                    ideo_colors[k], radius=radii_sribb[k]))
+            z=0.9*np.exp(1j*(l[0]+l[1])/2)
+            #the text below will be displayed when hovering the mouse over the ribbon
+            text=labels[k]+' commented on '+ '{:d}'.format(matrix[k][k])+' of '+ 'herself Fb posts',
+            ribbon_info.append(go.Scatter(x=[z.real],
+                                       y=[z.imag],
+                                       mode='markers',
+                                       marker=dict(size=0.5, color=ideo_colors[k]),
+                                       text=text,
+                                       hoverinfo='text'
+                                       )
+                              )
+        else:
+            r=ribbon_ends[j][eta_inv[k]]
+            zi=0.9*np.exp(1j*(l[0]+l[1])/2)
+            zf=0.9*np.exp(1j*(r[0]+r[1])/2)
+            #texti and textf are the strings that will be displayed when hovering the mouse
+            #over the two ribbon ends
+            texti=labels[k]+' commented on '+ '{:d}'.format(matrix[k][j])+' of '+\
+                  labels[j]+ ' Fb posts',
+
+            textf=labels[j]+' commented on '+ '{:d}'.format(matrix[j][k])+' of '+\
+            labels[k]+ ' Fb posts',
+            ribbon_info.append(go.Scatter(x=[zi.real],
+                                       y=[zi.imag],
+                                       mode='markers',
+                                       marker=dict(size=0.5, color=ribbon_color[k][j]),
+                                       text=texti,
+                                       hoverinfo='text'
+                                       )
+                              ),
+            ribbon_info.append(go.Scatter(x=[zf.real],
+                                       y=[zf.imag],
+                                       mode='markers',
+                                       marker=dict(size=0.5, color=ribbon_color[k][j]),
+                                       text=textf,
+                                       hoverinfo='text'
+                                       )
+                              )
+            r=(r[1], r[0])#IMPORTANT!!!  Reverse these arc ends because otherwise you get
+                          # a twisted ribbon
+            #append the ribbon shape
+            layout['shapes'].append(make_ribbon(l, r, 'rgb(175,175,175)' , ribbon_color[k][j]))
+
+
+
+```
+
+`ideograms` is a list of dicts that set the position, and color of ideograms, as well as the information associated to each ideogram.
+
+
+```python
+ideograms=[]
+for k in range(len(ideo_ends)):
+    z= make_ideogram_arc(1.1, ideo_ends[k])
+    zi=make_ideogram_arc(1.0, ideo_ends[k])
+    m=len(z)
+    n=len(zi)
+    ideograms.append(go.Scatter(x=z.real,
+                             y=z.imag,
+                             mode='lines',
+                             line=dict(color=ideo_colors[k], shape='spline', width=0.25),
+                             text=labels[k]+'<br>'+'{:d}'.format(row_sum[k]),
+                             hoverinfo='text'
+                             )
+                     )
+
+
+    path='M '
+    for s in range(m):
+        path+=str(z.real[s])+', '+str(z.imag[s])+' L '
+
+    Zi=np.array(zi.tolist()[::-1])
+
+    for s in range(m):
+        path+=str(Zi.real[s])+', '+str(Zi.imag[s])+' L '
+    path+=str(z.real[0])+' ,'+str(z.imag[0])
+
+    layout['shapes'].append(make_ideo_shape(path,'rgb(150,150,150)' , ideo_colors[k]))
+
+data = go.Data(ideograms+ribbon_info)
+fig = go.Figure(data=data, layout=layout)
+
+import plotly.offline as off
+off.init_notebook_mode()
+
+off.iplot(fig, filename='chord-diagram-Fb')
+```
+
+```python
+from plotly.offline import init_notebook_mode
+init_notebook_mode(connected=True)
+
+data = go.Data(ribbon_info+ideograms)
+fig = go.Figure(data=data, layout=layout)
+
+py.iplot(fig, filename='chord-diagram-Fb')
+```
+
+Here is a chord diagram associated to a community of 8 Facebook friends:
+
+
+<div>
+    <a href="https://plot.ly/~empet/12148/" target="_blank" title="Diagram of Facebook Comments" style="display: block; text-align: center;"><img src="https://plot.ly/~empet/12148.png" alt="Ideograms" style="max-width: 100%;width: 400px;"  width="400" onerror="this.onerror=null;this.src='https://plot.ly/404.png';" /></a>
+    <script data-plotly="empet:12148"  src="https://plot.ly/embed.js" async></script>
+</div>
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install publisher --upgrade
+import publisher
+publisher.publish(
+    'filled-chord.ipynb', 'python/filled-chord-diagram/', 'Python Filled Chord Diagram',
+    'How to make an interactive filled-chord diagram in Python with Plotly and iGraph. ',
+    name = 'Filled Chord Diagram',
+    title = "Filled Chord Diagram | Plotly",
+    thumbnail='thumbnail/filled-chord.jpg', language='python',
+    has_thumbnail='true', display_as='scientific', order=25,
+    ipynb= '~notebook_demo/191')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/frequency-counts.md plotly-7.1.0+dfsg1/doc/unconverted/python/frequency-counts.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/frequency-counts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/frequency-counts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,118 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform frequency counts using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Frequency Counts
+    order: 2
+    page_type: example_index
+    permalink: python/frequency-counts/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [numpy](http://www.numpy.org/), [pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [scipy](https://www.scipy.org/)
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Make the Data
+
+
+We are generating a 1D dataset from a `Weibull Distribution` which has the distribution
+
+$$
+\begin{align*}
+X = \log(U)^{\frac{1}{a}}
+\end{align*}
+$$
+
+where $U$ is drawn from the `Uniform Distribution`.
+
+```python
+x=np.random.weibull(1.25, size=1000)
+print(x[:10])
+```
+
+#### Histogram
+
+
+By using a histogram, we can properly divide a 1D dataset into bins with a particular size or width, so as to form a discrete probability distribution
+
+```python
+trace = go.Histogram(x=x, xbins=dict(start=np.min(x), size=0.25, end=np.max(x)),
+                   marker=dict(color='rgb(0, 0, 100)'))
+
+layout = go.Layout(
+    title="Histogram Frequency Counts"
+)
+
+fig = go.Figure(data=go.Data([trace]), layout=layout)
+py.iplot(fig, filename='histogram-freq-counts')
+```
+
+#### Larger Bins
+
+
+We can experiment with our bin size and the histogram by grouping the data into larger intervals
+
+```python
+trace = go.Histogram(x=x, xbins=dict(start=np.min(x), size=0.75, end=np.max(x)),
+                   marker=dict(color='rgb(0, 0, 100)'))
+
+layout = go.Layout(
+    title="Histogram Frequency Counts"
+)
+
+fig = go.Figure(data=go.Data([trace]), layout=layout)
+py.iplot(fig, filename='histogram-freq-counts-larger-bins')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Frequency-Counts.ipynb', 'python/frequency-counts/', 'Frequency Counts | plotly',
+    'Learn how to perform frequency counts using Python.',
+    title='Frequency Counts in Python. | plotly',
+    name='Frequency Counts',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=2,
+    ipynb= '~notebook_demo/111')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/gapminder-example.md plotly-7.1.0+dfsg1/doc/unconverted/python/gapminder-example.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/gapminder-example.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/gapminder-example.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,342 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make the classic Gapminder Animation using sliders and buttons
+      in Python.
+    display_as: animations
+    language: python
+    layout: base
+    name: Adding Sliders to Animations
+    order: 2
+    page_type: example_index
+    permalink: python/gapminder-example/
+    thumbnail: thumbnail/gapminder_animation.gif
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Version Check
+Note: Animations are available in version 1.12.10+
+Run `pip install plotly --upgrade` to update your Plotly version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Import Data
+This tutorial walks you through how to make an example using the [Gapminder dataset](http://www.gapminder.org/world/) to present the GDP per Capita vs Life Expectancy across the years 1952 to 2007 in an animated Bubble Chart, in which the bubbles represent countries and their sizes represent the population.
+
+First import the Gapminder data that we will be using for the example and store in a dataframe:
+
+```python
+import plotly.plotly as py
+import plotly.figure_factory as ff
+from plotly.grid_objs import Grid, Column
+
+import pandas as pd
+import time
+
+url = 'https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv'
+dataset = pd.read_csv(url)
+
+table = ff.create_table(dataset.head(10))
+py.iplot(table, filename='animations-gapminder-data-preview')
+```
+
+#### Make the Grid
+Since we are using the v2 api for animations in Plotly, we need to first make a `grid`. You can learn more in the [introduction to animation doc](https://plot.ly/python/animations/).
+
+We will first define a list of _string_ years which will represent the values that our `slider` will take on. Going through the dataset, we will take out all the unique continents from the column `continent` and store them as well. Finally, we make a grid with each column representing a slice of the dataframe by _year_, _continent_ and _column name_, making sure to name each column uniquely by these variables:
+
+```python
+years_from_col = set(dataset['year'])
+years_ints = sorted(list(years_from_col))
+years = [str(year) for year in years_ints]
+years.remove('1957')
+
+# make list of continents
+continents = []
+for continent in dataset['continent']:
+    if continent not in continents:
+        continents.append(continent)
+
+columns = []
+# make grid
+for year in years:
+    for continent in continents:
+        dataset_by_year = dataset[dataset['year'] == int(year)]
+        dataset_by_year_and_cont = dataset_by_year[dataset_by_year['continent'] == continent]
+        for col_name in dataset_by_year_and_cont:
+            # each column name is unique
+            column_name = '{year}_{continent}_{header}_gapminder_grid'.format(
+                year=year, continent=continent, header=col_name
+            )
+            a_column = Column(list(dataset_by_year_and_cont[col_name]), column_name)
+            columns.append(a_column)
+
+# upload grid
+grid = Grid(columns)
+url = py.grid_ops.upload(grid, 'gapminder_grid'+str(time.time()), auto_open=False)
+url
+```
+
+#### Make the Figure
+
+```python
+figure = {
+    'data': [],
+    'layout': {},
+    'frames': [],
+    'config': {'scrollzoom': True}
+}
+
+# fill in most of layout
+figure['layout']['xaxis'] = {'range': [30, 85], 'title': 'Life Expectancy', 'gridcolor': '#FFFFFF'}
+figure['layout']['yaxis'] = {'title': 'GDP per Capita', 'type': 'log', 'gridcolor': '#FFFFFF'}
+figure['layout']['hovermode'] = 'closest'
+figure['layout']['plot_bgcolor'] = 'rgb(223, 232, 243)'
+```
+
+<!-- #region -->
+#### Add Slider
+For the slider to appear, we need to adda `sliders` dictionary to `layout`. The `sliders` dictionary is set in the following way:
+
+```
+figure['layout']['sliders'] = {
+    'active': 0,
+    'yanchor': 'top',
+    'xanchor': 'left',
+    'currentvalue': {
+        'font': {'size': 20},
+        'prefix': 'text-before-value-on-display',
+        'visible': True,
+        'xanchor': 'right'
+    },
+    'transition': {'duration': 300, 'easing': 'cubic-in-out'},
+    'pad': {'b': 10, 't': 50},
+    'len': 0.9,
+    'x': 0.1,
+    'y': 0,
+    'steps': [...]
+}
+```
+
+- `yanchor` determines whether the slider is on the _top_ or _bottom_ of the chart page
+- `xanchor` is similar, only with _left_ and _right_ as possible values
+- `currentvalue` sets the display of the current value that the slider is hovering on. It contains args such as `prefix`, which sets the text that appears before the value.
+- `steps` is a list of dictionaries each of which corresponds to a frame in the figure. They should be ordered in the sequence in which the frames occur in the animation.
+
+Each dictionary in `steps` has the following form:
+
+```
+{
+    'method': 'animate',
+    'label': 'label-for-frame',
+    'value': 'value-for-frame(defaults to label)',
+    'args': [{'frame': {'duration': 300, 'redraw': False},
+         'mode': 'immediate'}
+    ],
+}
+```
+- the first item in the list `args` is a list containing the slider-value of that frame
+- `label` is the text that appears next to the `prefix` arg mentioned in the `slider` section (eg. _Year: 1952_)
+
+For more information, check out the [documentation](https://plot.ly/python/reference/#layout-sliders).
+<!-- #endregion -->
+
+```python
+sliders_dict = {
+    'active': 0,
+    'yanchor': 'top',
+    'xanchor': 'left',
+    'currentvalue': {
+        'font': {'size': 20},
+        'prefix': 'Year:',
+        'visible': True,
+        'xanchor': 'right'
+    },
+    'transition': {'duration': 300, 'easing': 'cubic-in-out'},
+    'pad': {'b': 10, 't': 50},
+    'len': 0.9,
+    'x': 0.1,
+    'y': 0,
+    'steps': []
+}
+```
+
+### Add Play and Pause Buttons
+
+```python
+figure['layout']['updatemenus'] = [
+    {
+        'buttons': [
+            {
+                'args': [None, {'frame': {'duration': 500, 'redraw': False},
+                         'fromcurrent': True, 'transition': {'duration': 300, 'easing': 'quadratic-in-out'}}],
+                'label': 'Play',
+                'method': 'animate'
+            },
+            {
+                'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate',
+                'transition': {'duration': 0}}],
+                'label': 'Pause',
+                'method': 'animate'
+            }
+        ],
+        'direction': 'left',
+        'pad': {'r': 10, 't': 87},
+        'showactive': False,
+        'type': 'buttons',
+        'x': 0.1,
+        'xanchor': 'right',
+        'y': 0,
+        'yanchor': 'top'
+    }
+]
+
+custom_colors = {
+    'Asia': 'rgb(171, 99, 250)',
+    'Europe': 'rgb(230, 99, 250)',
+    'Africa': 'rgb(99, 110, 250)',
+    'Americas': 'rgb(25, 211, 243)',
+    'Oceania': 'rgb(50, 170, 255)'
+}
+```
+
+#### Fill in Figure with Data and Frames
+Now we can put the data from our grid into the figure. Since we are using referenced data from the grid, we use the `.get_column_reference()` method on the grid and supply the name of the column we want via a looping through all the years and continents. First we
+
+Note: If you are using referenced data for a particular parameter, you `MUST` change the parameter name from `name` to `namesrc` to indicate that you are using referenced data from a grid. For instance, `x` becomes `xsrc`, `text` becomes `textsrc`, etc.
+
+```python
+col_name_template = '{year}_{continent}_{header}_gapminder_grid'
+year = 1952
+for continent in continents:
+    data_dict = {
+        'xsrc': grid.get_column_reference(col_name_template.format(
+            year=year, continent=continent, header='lifeExp'
+        )),
+        'ysrc': grid.get_column_reference(col_name_template.format(
+            year=year, continent=continent, header='gdpPercap'
+        )),
+        'mode': 'markers',
+        'textsrc': grid.get_column_reference(col_name_template.format(
+            year=year, continent=continent, header='country'
+        )),
+        'marker': {
+            'sizemode': 'area',
+            'sizeref': 200000,
+            'sizesrc': grid.get_column_reference(col_name_template.format(
+                 year=year, continent=continent, header='pop'
+            )),
+            'color': custom_colors[continent]
+        },
+        'name': continent
+    }
+    figure['data'].append(data_dict)
+```
+
+<!-- #region -->
+### Create Frames
+Finally we make our `frames`. Here we are running again through the years and continents, but for each combination we instantiate a frame dictionary of the form:
+
+```
+frame = {'data': [], 'name': value-name}
+```
+We add a dictionary of data to this list and at the end of each loop, we ensure to add the `steps` dictionary to the steps list. At the end, we attach the `sliders` dictionary to the figure via:
+
+```
+figure['layout']['sliders'] = [sliders_dict]
+```
+
+and then we plot! Enjoy the Gapminder example!
+<!-- #endregion -->
+
+```python
+for year in years:
+    frame = {'data': [], 'name': str(year)}
+    for continent in continents:
+        data_dict = {
+            'xsrc': grid.get_column_reference(col_name_template.format(
+                year=year, continent=continent, header='lifeExp'
+            )),
+            'ysrc': grid.get_column_reference(col_name_template.format(
+                year=year, continent=continent, header='gdpPercap'
+            )),
+            'mode': 'markers',
+            'textsrc': grid.get_column_reference(col_name_template.format(
+                year=year, continent=continent, header='country'
+                )),
+            'marker': {
+                'sizemode': 'area',
+                'sizeref': 200000,
+                'sizesrc': grid.get_column_reference(col_name_template.format(
+                    year=year, continent=continent, header='pop'
+                )),
+                'color': custom_colors[continent]
+            },
+            'name': continent
+        }
+        frame['data'].append(data_dict)
+
+    figure['frames'].append(frame)
+    slider_step = {'args': [
+        [year],
+        {'frame': {'duration': 300, 'redraw': False},
+         'mode': 'immediate',
+       'transition': {'duration': 300}}
+     ],
+     'label': year,
+     'method': 'animate'}
+    sliders_dict['steps'].append(slider_step)
+
+figure['layout']['sliders'] = [sliders_dict]
+```
+
+### Plot Animation
+
+```python
+py.icreate_animations(figure, 'gapminder_example'+str(time.time()))
+```
+
+#### Reference
+For additional information and attributes for creating bubble charts in Plotly see: https://plot.ly/python/bubble-charts/.
+For more documentation on creating animations with Plotly, see https://plot.ly/python/#animations.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+!pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'gapminder-example.ipynb', 'python/gapminder-example/', 'Adding Sliders to Animations | plotly',
+    'How to make the classic Gapminder Animation using sliders and buttons in Python.',
+    title='Adding Sliders to Animations | plotly',
+    name='Adding Sliders to Animations',
+    language='python',
+    page_type='example_index', has_thumbnail='true', thumbnail='thumbnail/gapminder_animation.gif',
+    display_as='animations', ipynb= '~notebook_demo/129', order=2)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/google_big_query.md plotly-7.1.0+dfsg1/doc/unconverted/python/google_big_query.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/google_big_query.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/google_big_query.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,540 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make your-tutorial-chart plots in Python with Plotly.
+    display_as: databases
+    language: python
+    layout: base
+    name: Google Big-Query
+    order: 7
+    page_type: example_index
+    permalink: python/google_big_query/
+    thumbnail: thumbnail/bigquery2.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### What is BigQuery?
+It's a service by Google, which enables analysis of massive datasets. You can use the traditional SQL-like language to query the data. You can host your own data on BigQuery to use the super fast performance at scale.
+
+
+#### Google BigQuery Public Datasets
+
+There are [a few datasets](https://cloud.google.com/bigquery/public-data/) stored in BigQuery, available for general public to use. Some of the publicly available datasets are:
+- Hacker News (stories and comments)
+- USA Baby Names
+- GitHub activity data
+- USA disease surveillance
+
+
+We will use the [Hacker News](https://cloud.google.com/bigquery/public-data/hacker-news) dataset for our analysis.
+
+
+#### Imports
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+import pandas as pd
+from pandas.io import gbq # to communicate with Google BigQuery
+```
+
+#### Prerequisites
+
+You need to have the following libraries:
+* [python-gflags](http://code.google.com/p/python-gflags/)
+* httplib2
+* google-api-python-client
+
+#### Create Project
+
+A project can be created on the [Google Developer Console](https://console.developers.google.com/iam-admin/projects).
+
+#### Enable BigQuery API
+
+You need to activate the BigQuery API for the project.
+
+
+![Enable BigQuery](https://raw.githubusercontent.com/pravj/gitpool/master/bigquery-tutorial/enable-bq.png)
+
+
+You will have find the `Project ID` for your project to get the queries working.
+
+![Project ID Credentials](https://raw.githubusercontent.com/pravj/gitpool/master/bigquery-tutorial/creds.png)
+
+
+project_id = 'bigquery-plotly'
+
+
+### Top 10 Most Active Users on Hacker News (by total stories submitted)
+
+We will select the top 10 high scoring `author`s and their respective `score` values.
+
+```python
+top10_active_users_query = """
+SELECT
+  author AS User,
+  count(author) as Stories
+FROM
+  [fh-bigquery:hackernews.stories]
+GROUP BY
+  User
+ORDER BY
+  Stories DESC
+LIMIT
+  10
+"""
+```
+
+The `pandas.gbq` module provides a method `read_gbq` to query the BigQuery stored dataset and stores the result as a `DataFrame`.
+
+```python
+try:
+    top10_active_users_df = gbq.read_gbq(top10_active_users_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+Using the `create_table` method from the `FigureFactory` module, we can generate a table from the resulting `DataFrame`.
+
+```python
+top_10_users_table = ff.create_table(top10_active_users_df)
+py.iplot(top_10_users_table, filename='top-10-active-users')
+```
+
+### Top 10 Hacker News Submissions (by score)
+
+We will select the `title` and `score` columns in the descending order of their `score`, keeping only top 10 stories among all.
+
+```python
+top10_story_query = """
+SELECT
+  title,
+  score,
+  time_ts AS timestamp
+FROM
+  [fh-bigquery:hackernews.stories]
+ORDER BY
+  score DESC
+LIMIT
+  10
+"""
+```
+
+```python
+try:
+    top10_story_df = gbq.read_gbq(top10_story_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+```python
+# Create a table figure from the DataFrame
+top10_story_figure = FF.create_table(top10_story_df)
+
+# Scatter trace for the bubble chart timeseries
+story_timeseries_trace = go.Scatter(
+    x=top10_story_df['timestamp'],
+    y=top10_story_df['score'],
+    xaxis='x2',
+    yaxis='y2',
+    mode='markers',
+    text=top10_story_df['title'],
+    marker=dict(
+        color=[80 + i*5 for i in range(10)],
+        size=top10_story_df['score']/50,
+        showscale=False
+    )
+)
+
+# Add the trace data to the figure
+top10_story_figure['data'].extend(go.Data([story_timeseries_trace]))
+
+# Subplot layout
+top10_story_figure.layout.yaxis.update({'domain': [0, .45]})
+top10_story_figure.layout.yaxis2.update({'domain': [.6, 1]})
+
+# Y-axis of the graph should be anchored with X-axis
+top10_story_figure.layout.yaxis2.update({'anchor': 'x2'})
+top10_story_figure.layout.xaxis2.update({'anchor': 'y2'})
+
+# Add the height and title attribute
+top10_story_figure.layout.update({'height':900})
+top10_story_figure.layout.update({'title': 'Highest Scoring Submissions on Hacker News'})
+
+# Update the background color for plot and paper
+top10_story_figure.layout.update({'paper_bgcolor': 'rgb(243, 243, 243)'})
+top10_story_figure.layout.update({'plot_bgcolor': 'rgb(243, 243, 243)'})
+
+# Add the margin to make subplot titles visible
+top10_story_figure.layout.margin.update({'t':75, 'l':50})
+top10_story_figure.layout.yaxis2.update({'title': 'Upvote Score'})
+top10_story_figure.layout.xaxis2.update({'title': 'Post Time'})
+```
+
+```python
+py.image.save_as(top10_story_figure, filename='top10-posts.png')
+py.iplot(top10_story_figure, filename='highest-scoring-submissions')
+```
+
+You can see that the lists consist of the stories involving some big names.
+* "Death of Steve Jobs and Aaron Swartz"
+* "Announcements of the Hyperloop and the game 2048".
+* "Microsoft open sourcing the .NET"
+
+The story title is visible when you `hover` over the bubbles.
+
+
+#### From which Top-level domain (TLD) most of the stories come?
+Here we have used the url-function [TLD](https://cloud.google.com/bigquery/query-reference#tld) from BigQuery's query syntax. We collect the domain for all URLs with their respective count, and group them by it.
+
+```python
+tld_share_query = """
+SELECT
+  TLD(url) AS domain,
+  count(score) AS stories
+FROM
+  [fh-bigquery:hackernews.stories]
+GROUP BY
+  domain
+ORDER BY
+  stories DESC
+LIMIT 10
+"""
+```
+
+```python
+try:
+    tld_share_df = gbq.read_gbq(tld_share_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+```python
+labels = tld_share_df['domain']
+values = tld_share_df['stories']
+
+tld_share_trace = go.Pie(labels=labels, values=values)
+data = [tld_share_trace]
+
+layout = go.Layout(
+    title='Submissions shared by Top-level domains'
+)
+
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig)
+```
+
+We can notice that the **.com** top-level domain contributes to most of the stories on Hacker News.
+#### Public response to the "Who Is Hiring?" posts
+There is an account on Hacker News by the name [whoishiring](https://news.ycombinator.com/user?id=whoishiring). This account automatically submits a 'Who is Hiring?' post at 11 AM Eastern time on the first weekday of every month.
+
+```python
+wih_query = """
+SELECT
+  id,
+  title,
+  score,
+  time_ts
+FROM
+  [fh-bigquery:hackernews.stories]
+WHERE
+  author == 'whoishiring' AND
+  LOWER(title) contains 'who is hiring?'
+ORDER BY
+  time
+"""
+```
+
+```python
+try:
+    wih_df = gbq.read_gbq(wih_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+```python
+trace = go.Scatter(
+    x=wih_df['time_ts'],
+    y=wih_df['score'],
+    mode='markers+lines',
+    text=wih_df['title'],
+    marker=dict(
+        size=wih_df['score']/50
+    )
+)
+
+layout = go.Layout(
+    title='Public response to the "Who Is Hiring?" posts',
+    xaxis=dict(
+        title="Post Time"
+    ),
+    yaxis=dict(
+        title="Upvote Score"
+    )
+)
+
+data = [trace]
+
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='whoishiring-public-response')
+```
+
+### Submission Traffic Volume in a Week
+
+```python
+week_traffic_query = """
+SELECT
+  DAYOFWEEK(time_ts) as Weekday,
+  count(DAYOFWEEK(time_ts)) as story_counts
+FROM
+  [fh-bigquery:hackernews.stories]
+GROUP BY
+  Weekday
+ORDER BY
+  Weekday
+"""
+```
+
+```python
+try:
+    week_traffic_df = gbq.read_gbq(week_traffic_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+```python
+week_traffic_df['Day'] = ['NULL', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
+week_traffic_df = week_traffic_df.drop(week_traffic_df.index[0])
+
+trace = go.Scatter(
+    x=week_traffic_df['Day'],
+    y=week_traffic_df['story_counts'],
+    mode='lines',
+    text=week_traffic_df['Day']
+)
+
+layout = go.Layout(
+    title='Submission Traffic Volume (Week Days)',
+    xaxis=dict(
+        title="Day of the Week"
+    ),
+    yaxis=dict(
+        title="Total Submissions"
+    )
+)
+
+data = [trace]
+
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='submission-traffic-volume')
+```
+
+We can observe that the Hacker News faces fewer submissions during the weekends.
+#### Programming Language Trend on HackerNews
+We will compare the trends for the Python and PHP programming languages, using the Hacker News post titles.
+
+```python
+python_query = """
+SELECT
+  YEAR(time_ts) as years,
+  COUNT(YEAR(time_ts )) as trends
+FROM
+  [fh-bigquery:hackernews.stories]
+WHERE
+  LOWER(title) contains 'python'
+GROUP BY
+  years
+ORDER BY
+  years
+"""
+
+php_query = """
+SELECT
+  YEAR(time_ts) as years,
+  COUNT(YEAR(time_ts )) as trends
+FROM
+  [fh-bigquery:hackernews.stories]
+WHERE
+  LOWER(title) contains 'php'
+GROUP BY
+  years
+ORDER BY
+  years
+"""
+```
+
+```python
+try:
+    python_df = gbq.read_gbq(python_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+```python
+try:
+    php_df = gbq.read_gbq(php_query, project_id=project_id)
+except:
+    print 'Error reading the dataset'
+```
+
+```python
+trace1 = go.Scatter(
+    x=python_df['years'],
+    y=python_df['trends'],
+    mode='lines',
+    line=dict(color='rgba(115,115,115,1)', width=4),
+    connectgaps=True,
+)
+
+trace2 = go.Scatter(
+    x=[python_df['years'][0], python_df['years'][8]],
+    y=[python_df['trends'][0], python_df['trends'][8]],
+    mode='markers',
+    marker=dict(color='rgba(115,115,115,1)', size=8)
+)
+
+trace3 = go.Scatter(
+    x=php_df['years'],
+    y=php_df['trends'],
+    mode='lines',
+    line=dict(color='rgba(189,189,189,1)', width=4),
+    connectgaps=True,
+)
+
+trace4 = go.Scatter(
+    x=[php_df['years'][0], php_df['years'][8]],
+    y=[php_df['trends'][0], php_df['trends'][8]],
+    mode='markers',
+    marker=dict(color='rgba(189,189,189,1)', size=8)
+)
+
+traces = [trace1, trace2, trace3, trace4]
+
+layout = go.Layout(
+    xaxis=dict(
+        showline=True,
+        showgrid=False,
+        showticklabels=True,
+        linecolor='rgb(204, 204, 204)',
+        linewidth=2,
+        tickmode='linear',
+        ticks='outside',
+        tickcolor='rgb(204, 204, 204)',
+        tickwidth=2,
+        ticklen=5,
+        tickfont=dict(
+            family='Arial',
+            size=12,
+            color='rgb(82, 82, 82)',
+        ),
+    ),
+    yaxis=dict(
+        showgrid=False,
+        zeroline=False,
+        showline=False,
+        showticklabels=False,
+    ),
+    autosize=False,
+    margin=dict(
+        autoexpand=False,
+        l=100,
+        r=20,
+        t=110,
+    ),
+    showlegend=False,
+)
+
+annotations = []
+
+annotations.append(
+    dict(xref='paper', x=0.95, y=python_df['trends'][8],
+    xanchor='left', yanchor='middle',
+    text='Python',
+    font=dict(
+        family='Arial',
+        size=14,
+        color='rgba(49,130,189, 1)'
+    ),
+    showarrow=False)
+)
+
+annotations.append(
+    dict(xref='paper', x=0.95, y=php_df['trends'][8],
+    xanchor='left', yanchor='middle',
+    text='PHP',
+    font=dict(
+        family='Arial',
+        size=14,
+        color='rgba(49,130,189, 1)'
+    ),
+    showarrow=False)
+)
+
+annotations.append(
+    dict(xref='paper', yref='paper', x=0.5, y=-0.1,
+    xanchor='center', yanchor='top',
+    text='Source: Hacker News submissions with the title containing Python/PHP',
+    font=dict(
+        family='Arial',
+        size=12,
+        color='rgb(150,150,150)'
+    ),
+    showarrow=False)
+)
+
+layout['annotations'] = annotations
+
+fig = go.Figure(data=traces, layout=layout)
+py.iplot(fig, filename='programming-language-trends')
+```
+
+As we already know about this trend, Python is dominating PHP throughout the timespan.
+
+
+#### Reference
+See https://plot.ly/python/getting-started/ for more information about Plotly's Python Open Source Graphing Library!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'BigQuery-Plotly.ipynb', 'python/google_big_query/', 'Google Big-Query',
+    'How to make your-tutorial-chart plots in Python with Plotly.',
+    title = 'Google Big Query | plotly',
+    has_thumbnail='true', thumbnail='thumbnail/bigquery2.jpg',
+    language='python', page_type='example_index',
+    display_as='databases', order=7)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/graph-data-from-mysql-database-in-python.md plotly-7.1.0+dfsg1/doc/unconverted/python/graph-data-from-mysql-database-in-python.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/graph-data-from-mysql-database-in-python.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/graph-data-from-mysql-database-in-python.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,211 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to graph data from a MySQL database with Python.
+    display_as: databases
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Plot Data from MySQL
+    order: 1
+    page_type: example_index
+    permalink: python/graph-data-from-mysql-database-in-python/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Imports
+This notebook uses the MySQL world database:http://dev.mysql.com/doc/index-other.html. Instructions for setting up the world database in MySQL are [here](https://dev.mysql.com/doc/world-setup/en/). This notebook was created for [this article in <em>Modern Data</em>](http://mod.plot.ly/graph-data-from-mysql-database-in-python/)
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import MySQLdb
+import pandas as pd
+```
+
+#### Connect to MySQL Database
+
+```python
+conn = MySQLdb.connect(host="localhost", user="root", passwd="xxxx", db="world")
+cursor = conn.cursor()
+cursor.execute('select Name, Continent, Population, LifeExpectancy, GNP from Country');
+
+rows = cursor.fetchall()
+str(rows)[0:300]
+```
+
+```python
+df = pd.DataFrame( [[ij for ij in i] for i in rows] )
+df.rename(columns={0: 'Name', 1: 'Continent', 2: 'Population', 3: 'LifeExpectancy', 4:'GNP'}, inplace=True);
+df = df.sort_values(['LifeExpectancy'], ascending=[1]);
+```
+
+Some country names cause serialization errors in early versions of Plotly's Python client. The code block below takes care of this.
+
+```python
+country_names = df['Name']
+for i in range(len(country_names)):
+    try:
+        country_names[i] = str(country_names[i]).decode('utf-8')
+    except:
+        country_names[i] = 'Country name decode error'
+```
+
+```python
+trace1 = go.Scatter(
+    x=df['GNP'],
+    y=df['LifeExpectancy'],
+    text=country_names,
+    mode='markers'
+)
+layout = go.Layout(
+    title='Life expectancy vs GNP from MySQL world database',
+    xaxis=dict( type='log', title='GNP' ),
+    yaxis=dict( title='Life expectancy' )
+)
+data = [trace1]
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='world GNP vs life expectancy')
+```
+
+```python
+# (!) Set 'size' values to be proportional to rendered area,
+#     instead of diameter. This makes the range of bubble sizes smaller
+sizemode='area'
+
+# (!) Set a reference for 'size' values (i.e. a population-to-pixel scaling).
+#     Here the max bubble area will be on the order of 100 pixels
+sizeref=df['Population'].max()/1e2**2
+
+colors = {
+    'Asia':"rgb(255,65,54)",
+    'Europe':"rgb(133,20,75)",
+    'Africa':"rgb(0,116,217)",
+    'North America':"rgb(255,133,27)",
+    'South America':"rgb(23,190,207)",
+    'Antarctica':"rgb(61,153,112)",
+    'Oceania':"rgb(255,220,0)",
+}
+
+# Define a hover-text generating function (returns a list of strings)
+def make_text(X):
+    return 'Country: %s\
+    <br>Life Expectancy: %s years\
+    <br>Population: %s million'\
+    % (X['Name'], X['LifeExpectancy'], X['Population']/1e6)
+
+# Define a trace-generating function (returns a Scatter object)
+def make_trace(X, continent, sizes, color):
+    return go.Scatter(
+        x=X['GNP'],  # GDP on the x-xaxis
+        y=X['LifeExpectancy'],    # life Exp on th y-axis
+        name=continent,    # label continent names on hover
+        mode='markers',    # (!) point markers only on this plot
+        text=X.apply(make_text, axis=1).tolist(),
+        marker= dict(
+            color=color,           # marker color
+            size=sizes,            # (!) marker sizes (sizes is a list)
+            sizeref=sizeref,       # link sizeref
+            sizemode=sizemode,     # link sizemode
+            opacity=0.6,           # (!) partly transparent markers
+            line= dict(width=3,color="white")  # marker borders
+        )
+    )
+
+# Initialize data object
+data = []
+
+# Group data frame by continent sub-dataframe (named X),
+#   make one trace object per continent and append to data object
+for continent, X in df.groupby('Continent'):
+
+    sizes = X['Population']                 # get population array
+    color = colors[continent]               # get bubble color
+
+    data.append(
+        make_trace(X, continent, sizes, color)  # append trace to data object
+    )
+
+    # Set plot and axis titles
+title = "Life expectancy vs GNP from MySQL world database (bubble chart)"
+x_title = "Gross National Product"
+y_title = "Life Expectancy [in years]"
+
+# Define a dictionary of axis style options
+axis_style = dict(
+    type='log',
+    zeroline=False,       # remove thick zero line
+    gridcolor='#FFFFFF',  # white grid lines
+    ticks='outside',      # draw ticks outside axes
+    ticklen=8,            # tick length
+    tickwidth=1.5         #   and width
+)
+
+# Make layout object
+layout = go.Layout(
+    title=title,             # set plot title
+    plot_bgcolor='#EFECEA',  # set plot color to grey
+    hovermode="closest",
+    xaxis=dict(
+        axis_style,      # add axis style dictionary
+        title=x_title,   # x-axis title
+        range=[2.0,7.2], # log of min and max x limits
+    ),
+    yaxis=dict(
+        axis_style,      # add axis style dictionary
+        title=y_title,   # y-axis title
+    )
+)
+
+# Make Figure object
+fig = go.Figure(data=data, layout=layout)
+
+# (@) Send to Plotly and show in notebook
+py.iplot(fig, filename='s3_life-gdp')
+```
+
+#### References
+See https://plot.ly/python/getting-started/ for more information about Plotly's Python API!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish('mysql-ipython-notebook.ipynb', 'python/graph-data-from-mysql-database-in-python/',
+                  'Plot Data from MySQL', 'How to graph data from a MySQL database with Python.',
+                  title='Plot Data from a MySQL Database | Plotly', has_thumbnail='false',
+                  page_type='example_index', display_as='databases', order=1, language='python',
+                  uses_plotly_offline=True)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/heatmap-animation.md plotly-7.1.0+dfsg1/doc/unconverted/python/heatmap-animation.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/heatmap-animation.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/heatmap-animation.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,182 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make an animated heatmap in Python.
+    display_as: animations
+    language: python
+    layout: base
+    name: Heatmap Animation
+    order: 4
+    page_type: example_index
+    permalink: python/heatmap-animation/
+    thumbnail: thumbnail/heatmap_animation.gif
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Version Check
+Note: Animations are available in version 1.12.10+
+Run `pip install plotly --upgrade` to update your Plotly version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Make the Grid
+Our goal is to generate the contours plots of the bivariate normal distributions of mean vector (0,0), standard deviation vector (1,1), and correlation, $\rho$ , varying from `(−1, 1)`. Since we are making an online animation, we must create our grid first and upload it.
+
+```python
+import plotly.plotly as py
+from plotly.grid_objs import Grid, Column
+
+import time
+import numpy as np
+from scipy.stats import multivariate_normal as Nd
+
+colorscale = [
+    [0.0, 'rgb(25, 23, 10)'],
+    [0.05, 'rgb(69, 48, 44)'],
+    [0.1, 'rgb(114, 52, 47)'],
+    [0.15, 'rgb(155, 58, 49)'],
+    [0.2, 'rgb(194, 70, 51)'],
+    [0.25, 'rgb(227, 91, 53)'],
+    [0.3, 'rgb(250, 120, 56)'],
+    [0.35, 'rgb(255, 152, 60)'],
+    [0.4, 'rgb(255, 188, 65)'],
+    [0.45, 'rgb(236, 220, 72)'],
+    [0.5, 'rgb(202, 243, 80)'],
+    [0.55, 'rgb(164, 252, 93)'],
+    [0.6, 'rgb(123, 245, 119)'],
+    [0.65, 'rgb(93, 225, 162)'],
+    [0.7, 'rgb(84, 196, 212)'],
+    [0.75, 'rgb(99, 168, 238)'],
+    [0.8, 'rgb(139, 146, 233)'],
+    [0.85, 'rgb(190, 139, 216)'],
+    [0.9, 'rgb(231, 152, 213)'],
+    [0.95, 'rgb(241, 180, 226)'],
+    [1.0, 'rgb(206, 221, 250)']
+]
+
+# returns V=(X,Y)~N(m, Sigma)
+def bivariate_N(m=[0., 0.], stdev=[1.0, 1.0], rho=0):
+    cov = rho*stdev[0] * stdev[1] # covariance(X,Y)
+    Sigma = np.array([[stdev[0]**2, cov], [cov, stdev[1]**2]]) # covariance  matrix
+    return Nd(mean=m, cov=Sigma) # joint distribution of (X,Y), of mean  vector, m, and cov matrix, Sigma
+
+# returns the pdf of the bivariate normal distribution
+def pdf_bivariate_N(m, stdev, V):
+    X = np.linspace(m[0] - 3*stdev[0], m[0] + 3*stdev[0], 100)
+    Y = np.linspace(m[1] - 3*stdev[1], m[1] + 3*stdev[1], 100)
+    x, y = np.meshgrid(X, Y)
+    pos = np.empty(x.shape + (2, ))
+    pos[:, :, 0] = x; pos[:, :, 1] = y
+    z = V.pdf(pos)
+    return X, Y, z
+
+correls=[-0.95, -0.85, -0.75, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.75, 0.85, 0.95]
+
+m=[0., 0.]
+stdev=[1., 1.]
+V=bivariate_N()
+x, y=pdf_bivariate_N(m, stdev,  V)[:2]
+my_columns=[Column(x, 'x'), Column(y, 'y')]
+zvmax=[]
+for k, rho in enumerate(correls):
+    V = bivariate_N(rho = rho)
+    z = pdf_bivariate_N(m, stdev, V)[2]
+    zvmax.append(np.max(z))
+    my_columns.append(Column(z, 'z{}'.format(k + 1)))
+grid = Grid(my_columns)
+py.grid_ops.upload(grid, 'norm-bivariate1'+str(time.time()), auto_open=False)
+```
+
+#### Make the Figure
+Make the `Figure` which references columns from the grid we made. The `Figure` takes `Data`, `Layout` and `Frames`.
+
+```python
+data=[dict(type='heatmap',
+           xsrc=grid.get_column_reference('x'),
+           ysrc=grid.get_column_reference('y'),
+           zsrc=grid.get_column_reference('z1'),
+           zmin=0,
+           zmax=zvmax[6],
+           zsmooth='best',
+           colorscale=colorscale,
+           colorbar=dict(thickness=20, ticklen=4))]
+
+title='Contour plot for bivariate normal distribution'+\
+'<br> N(m=[0,0], sigma=[1,1], rho in (-1, 1))'
+
+layout = dict(title=title,
+              autosize=False,
+              height=600,
+              width=600,
+              hovermode='closest',
+              xaxis=dict(range=[-3, 3], autorange=False),
+              yaxis=dict(range=[-3, 3], autorange=False),
+              showlegend=False,
+              updatemenus=[dict(type='buttons', showactive=False,
+                                y=1, x=-0.05, xanchor='right',
+                                yanchor='top', pad=dict(t=0, r=10),
+                                buttons=[dict(label='Play',
+                                              method='animate',
+                                              args=[None,
+                                                    dict(frame=dict(duration=100,
+                                                                    redraw=True),
+                                                    transition=dict(duration=0),
+                                                    fromcurrent=True,
+                                                    mode='immediate')])])])
+
+frames=[dict(data=[dict(zsrc=grid.get_column_reference('z{}'.format(k + 1)),
+                        zmax=zvmax[k])],
+                        traces=[0],
+                        name='frame{}'.format(k),
+                        ) for k in range(len(correls))]
+
+
+fig=dict(data=data, layout=layout, frames=frames)
+py.icreate_animations(fig, filename='animheatmap'+str(time.time()))
+```
+
+#### Reference
+For additional information and attributes for creating heatmaps in Plotly see: https://plot.ly/python/reference/#heatmap.
+For more documentation on creating animations with Plotly, see https://plot.ly/python/#animations.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+!pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'heatmap.ipynb', 'python/heatmap-animation/', 'Heatmap Animation | plotly',
+    'How to make an animated heatmap in Python.',
+    title='Heatmap Animation | plotly',
+    name='Heatmap Animation',
+    language='python',
+    page_type='example_index', has_thumbnail='true', thumbnail='thumbnail/heatmap_animation.gif',
+    ipynb= '~notebook_demo/131',
+    display_as='animations', order=4)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/html-reports.md plotly-7.1.0+dfsg1/doc/unconverted/python/html-reports.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/html-reports.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/html-reports.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,303 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make HTML reports with Python, Pandas, and Plotly Graphs.
+    display_as: report_generation
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Python HTML Reports
+    order: 1
+    page_type: example_index
+    permalink: python/html-reports/
+    thumbnail: thumbnail/ipython_10_html_report.jpg
+---
+
+## Generate HTML reports with D3 graphs<br>using Python, Plotly, and Pandas
+
+
+<a href="https://www.dropbox.com/s/egoxoekkq5r2avh/report.html?dl=1">Download the example report generated by this script</a>
+
+
+<a href="d3.js">d3.js</a> is an amazing JavaScript library for creating interactive, online graphics and charts. Plotly lets you create d3.js charts using Python, R, or MATLAB. This IPython notebook shows you how to embed these charts in an HTML report that you can then share by email or host on a website.
+
+
+Once you've created your report generation script, you can automate it with a task scheduler like <a href="http://moderndata.plot.ly/update-plotly-charts-with-cron-jobs-and-python/">cron</a> or Windows Task Manager, and  <a href="https://plot.ly/python/email-reports/">email it to yourself and your team</a>.
+
+```python
+import plotly as py
+import pandas as pd
+import numpy as np
+
+from datetime import datetime
+from datetime import time as dt_tm
+from datetime import date as dt_date
+
+import plotly.plotly as py
+import plotly.tools as plotly_tools
+import plotly.graph_objs as go
+
+import os
+import tempfile
+os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp()
+from matplotlib.finance import quotes_historical_yahoo
+import matplotlib.pyplot as plt
+
+from scipy.stats import gaussian_kde
+
+from IPython.display import HTML
+```
+
+### Step 1: Generate 2 graphs and 2 tables
+
+
+##### First graph: 2014 Apple stock data with moving average
+
+
+Let's grab Apple stock data using the <a href="http://matplotlib.org/api/finance_api.html">matplotlib finance</a> model from 2014, then take a moving average with a <a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.convolve.html">numpy convolution</a>.
+
+```python
+x = []
+y = []
+ma = []
+
+def moving_average(interval, window_size):
+    window = np.ones(int(window_size))/float(window_size)
+    return np.convolve(interval, window, 'same')
+
+date1 = dt_date( 2014, 1, 1 )
+date2 = dt_date( 2014, 12, 12 )
+quotes = quotes_historical_yahoo('AAPL', date1, date2)
+if len(quotes) == 0:
+    print "Couldn't connect to yahoo trading database"
+else:
+    dates = [q[0] for q in quotes]
+    y = [q[1] for q in quotes]
+    for date in dates:
+        x.append(datetime.fromordinal(int(date))\
+                .strftime('%Y-%m-%d')) # Plotly timestamp format
+    ma = moving_average(y, 10)
+```
+
+Now graph the data with Plotly. See here for Plotly's <a href="https://plot.ly/python/line-and-scatter/">line plot syntax</a> and here for <a href="https://plot.ly/python/getting-started/">getting started</a> with the Plotly Python client.
+
+```python
+xy_data = go.Scatter( x=x, y=y, mode='markers', marker=dict(size=4), name='AAPL' )
+# vvv clip first and last points of convolution
+mov_avg = go.Scatter( x=x[5:-4], y=ma[5:-4], \
+                  line=dict(width=2,color='red',opacity=0.5), name='Moving average' )
+data = [xy_data, mov_avg]
+
+py.iplot(data, filename='apple stock moving average')
+```
+
+Save the plot URL - we'll use it when generating the report later.
+
+```python
+first_plot_url = py.plot(data, filename='apple stock moving average', auto_open=False,)
+print first_plot_url
+```
+
+##### Second graph: Scatter matrix of 2014 technology and CPG stocks
+
+
+Let's use the Pandas package and Plotly subplots to compare different tech. and CPG stocks in 2014.<br>
+This graph was inspired by <a href="http://nbviewer.ipython.org/github/twiecki/financial-analysis-python-tutorial/blob/master/1.%20Pandas%20Basics.ipynb">this IPython notebook</a> and GitHub user <a href="https://github.com/twiecki">twiecki</a>.
+
+```python
+tickers = ['AAPL', 'GE', 'IBM', 'KO', 'MSFT', 'PEP']
+prices = []
+for ticker in tickers:
+    quotes = quotes_historical_yahoo(ticker, date1, date2)
+    prices.append( [q[1] for q in quotes] )
+```
+
+We have all the stock prices in a list of lists - use the code snippet below to convert this into a Pandas dataframe.
+
+```python
+df = pd.DataFrame( prices ).transpose()
+df.columns = tickers
+df.head()
+```
+
+Use Plotly's <a href="https://plot.ly/python/overview/">get_subplots()</a> routine to generate an empty matrix of 6x6 subplots. We'll fill these in by plotting all stock ticker combinations against each other (ie, General Electric stock versus Apple stock)
+
+```python
+fig = plotly_tools.get_subplots(rows=6, columns=6, print_grid=True, horizontal_spacing= 0.05, vertical_spacing= 0.05)
+```
+
+```python
+def kde_scipy(x, x_grid, bandwidth=0.4, **kwargs):
+    """Kernel Density Estimation with Scipy"""
+    # From https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/
+    # Note that scipy weights its bandwidth by the covariance of the
+    # input data.  To make the results comparable to the other methods,
+    # we divide the bandwidth by the sample standard deviation here.
+    kde = gaussian_kde(x, bw_method=bandwidth / x.std(ddof=1), **kwargs)
+    return kde.evaluate(x_grid)
+
+subplots = range(1,37)
+sp_index = 0
+data = []
+for i in range(1,7):
+    x_ticker = df.columns[i-1]
+    for j in range(1,7):
+        y_ticker = df.columns[j-1]
+        if i==j:
+            x = df[x_ticker]
+            x_grid = np.linspace(x.min(), x.max(), 100)
+            sp = [ go.Histogram( x=x, histnorm='probability density' ), \
+                  go.Scatter( x=x_grid, y=kde_scipy( x.as_matrix(), x_grid ), \
+                          line=dict(width=2,color='red',opacity='0.5') ) ]
+        else:
+            sp = [ go.Scatter( x=df[x_ticker], y=df[y_ticker], mode='markers', marker=dict(size=3) ) ]
+
+        for ea in sp:
+            ea.update( name='{0} vs {1}'.format(x_ticker,y_ticker),\
+                      xaxis='x{}'.format(subplots[sp_index]),\
+                      yaxis='y{}'.format(subplots[sp_index])
+            )
+        sp_index+=1
+        data += sp
+
+# Add x and y labels
+left_index = 1
+bottom_index = 1
+for tk in tickers:
+    fig['layout']['xaxis{}'.format(left_index)].update( title=tk )
+    fig['layout']['yaxis{}'.format(bottom_index)].update( title=tk )
+    left_index=left_index+1
+    bottom_index=bottom_index+6
+
+# Remove legend by updating 'layout' key
+fig['layout'].update(showlegend=False,height=1000,width=1000, title='Major technology and CPG stock prices in 2014')
+fig['data'] = data
+py.iplot(fig, height=1000, width=1000, filename='Major technology and CPG stock prices in 2014 - scatter matrix')
+```
+
+Save the plot URL - we'll use it when generating the report later.
+
+```python
+second_plot_url = py.plot(fig, height=1000, width=1000, auto_open=False,\
+                          filename='Major technology and CPG stock prices in 2014 - scatter matrix')
+print second_plot_url
+```
+
+##### 2 summary tables: One using Pandas and one using HTML
+
+
+First table: Use Pandas <a href="http://pandas.pydata.org/pandas-docs/version/0.15.1/generated/pandas.DataFrame.to_html.html">to_html()</a> routine to convert Pandas data frame to HTML table. Replace default table styling with <a href="http://getbootstrap.com/css">Bootstrap</a> table styling.
+
+```python
+summary_table_1 = df.describe()
+summary_table_1 = summary_table_1\
+    .to_html()\
+    .replace('<table border="1" class="dataframe">','<table class="table table-striped">') # use bootstrap styling
+```
+
+Second table: Build table as an HTML string. Use <a href="http://getbootstrap.com/css">Bootstrap</a> for table styling.
+
+```python
+summary_table_2 = '''<table class="table table-striped">
+<th>Ticker</th><th>Full name</th>
+<tr>
+    <td>AAPL</td>
+    <td><a href="http://finance.yahoo.com/q?s=AAPL">Apple Inc</a></td>
+</tr>
+<tr>
+    <td>GE</td>
+    <td><a href="http://finance.yahoo.com/q?s=GE">General Electric Company</a></td>
+</tr>
+<tr>
+    <td>IBM</td>
+    <td><a href="http://finance.yahoo.com/q?s=IBM">International Business Machines Corp.</a></td>
+</tr>
+<tr>
+    <td>KO</td>
+    <td><a href="http://finance.yahoo.com/q?s=KO">The Coca-Cola Company</a></td>
+</tr>
+<tr>
+    <td>MSFT</td>
+    <td><a href="http://finance.yahoo.com/q?s=MSFT">Microsoft Corporation</a></td>
+</tr>
+<tr>
+    <td>PEP</td>
+    <td><a href="http://finance.yahoo.com/q?s=PEP">Pepsico, Inc.</a></td>
+</tr>
+</table>
+'''
+HTML(summary_table_2)
+```
+
+### Step 2: Generate HTML report<br>as a string and write to file
+
+
+This is the last step. We have all of the plots and tables that we want to include in the report - now we build an HTML string with the plots and tables embedded.<br>Notice that the <a href="http://getbootstrap.com/css">Bootstrap</a> css library is included in the <head> for styling.
+
+```python
+html_string = '''
+<html>
+    <head>
+        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
+        <style>body{ margin:0 100; background:whitesmoke; }</style>
+    </head>
+    <body>
+        <h1>2014 technology and CPG stock prices</h1>
+
+        <!-- *** Section 1 *** --->
+        <h2>Section 1: Apple Inc. (AAPL) stock in 2014</h2>
+        <iframe width="1000" height="550" frameborder="0" seamless="seamless" scrolling="no" \
+src="''' + first_plot_url + '''.embed?width=800&height=550"></iframe>
+        <p>Apple stock price rose steadily through 2014.</p>
+
+        <!-- *** Section 2 *** --->
+        <h2>Section 2: AAPL compared to other 2014 stocks</h2>
+        <iframe width="1000" height="1000" frameborder="0" seamless="seamless" scrolling="no" \
+src="''' + second_plot_url + '''.embed?width=1000&height=1000"></iframe>
+        <p>GE had the most predictable stock price in 2014. IBM had the highest mean stock price. \
+The red lines are kernel density estimations of each stock price - the peak of each red lines \
+corresponds to its mean stock price for 2014 on the x axis.</p>
+        <h3>Reference table: stock tickers</h3>
+        ''' + summary_table_2 + '''
+        <h3>Summary table: 2014 stock statistics</h3>
+        ''' + summary_table_1 + '''
+    </body>
+</html>'''
+```
+
+Finally, write the html string to a local file.
+
+```python
+f = open('/home/jack/report.html','w')
+f.write(html_string)
+f.close()
+```
+
+```python
+! pip install publisher --upgrade
+
+from IPython.display import HTML, display
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="https://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+import publisher
+publisher.publish('html-reports', '/python/html-reports/',
+                  'Python HTML Reports',
+                  'How to make HTML reports with Python, Pandas, and Plotly Graphs.')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/igraph-networkx-comparison.md plotly-7.1.0+dfsg1/doc/unconverted/python/igraph-networkx-comparison.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/igraph-networkx-comparison.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/igraph-networkx-comparison.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,212 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Comparing a Network Graph created with igraph to one created with
+      networkx in Python with Plotly.
+    display_as: scientific
+    language: python
+    layout: base
+    name: Network Graphs Comparison
+    order: 14
+    page_type: u-guide
+    permalink: python/igraph-networkx-comparison/
+    thumbnail: thumbnail/networks.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!# Network Graphs with Plotly
+
+
+#### Comparison
+In this tutorial we plot the same network - the coauthorship network of scientists working on network theory and experiment - first as an `igraph.Graph` object, with the Kamada-Kawai layout, and then as a `networkx.Graph`, with the Fruchterman-Reingold layout. Install the Python libraries with `sudo pip install igraph` and `sudo pip install networkx`.
+
+The graph data are read from a gml file, posted at UC Irvine [Network Data Repository](http://networkdata.ics.uci.edu/data/netscience/netscience.gml):
+
+
+#### igraph
+
+```python
+import igraph as ig
+
+G=ig.Graph.Read_GML('netscience.gml.txt')
+labels=list(G.vs['label'])
+N=len(labels)
+E=[e.tuple for e in G.es]# list of edges
+layt=G.layout('kk') #kamada-kawai layout
+type(layt)
+```
+
+```python
+import plotly.plotly as py
+from plotly.graph_objs import *
+
+Xn=[layt[k][0] for k in range(N)]
+Yn=[layt[k][1] for k in range(N)]
+Xe=[]
+Ye=[]
+for e in E:
+    Xe+=[layt[e[0]][0],layt[e[1]][0], None]
+    Ye+=[layt[e[0]][1],layt[e[1]][1], None]
+
+trace1=Scatter(x=Xe,
+               y=Ye,
+               mode='lines',
+               line= dict(color='rgb(210,210,210)', width=1),
+               hoverinfo='none'
+               )
+trace2=Scatter(x=Xn,
+               y=Yn,
+               mode='markers',
+               name='ntw',
+               marker=dict(symbol='circle-dot',
+                                        size=5,
+                                        color='#6959CD',
+                                        line=dict(color='rgb(50,50,50)', width=0.5)
+                                        ),
+               text=labels,
+               hoverinfo='text'
+               )
+
+axis=dict(showline=False, # hide axis line, grid, ticklabels and  title
+          zeroline=False,
+          showgrid=False,
+          showticklabels=False,
+          title=''
+          )
+
+width=800
+height=800
+layout=Layout(title= "Coauthorship network of scientists working on network theory and experiment"+\
+              "<br> Data source: <a href='https://networkdata.ics.uci.edu/data.php?id=11'> [1]</a>",
+    font= dict(size=12),
+    showlegend=False,
+    autosize=False,
+    width=width,
+    height=height,
+    xaxis=layout.XAxis(axis),
+    yaxis=layout.YAxis(axis),
+    margin=layout.Margin(
+        l=40,
+        r=40,
+        b=85,
+        t=100,
+    ),
+    hovermode='closest',
+    annotations=[
+           dict(
+           showarrow=False,
+            text='This igraph.Graph has the Kamada-Kawai layout',
+            xref='paper',
+            yref='paper',
+            x=0,
+            y=-0.1,
+            xanchor='left',
+            yanchor='bottom',
+            font=dict(
+            size=14
+            )
+            )
+        ]
+    )
+
+data=[trace1, trace2]
+fig=Figure(data=data, layout=layout)
+py.iplot(fig, filename='Coautorship-network-igraph')
+```
+
+#### Networkx
+Now let us read the same gml file, define the network as a networkx.Graph, and plot it with Fruchterman Reingold layout (networkx does not provide the Kamada-Kawai layout).
+
+Because networkx cannot read the gml file (why?!!), we define the networkx.Graph from data provided by the igraph approach above.
+
+```python
+import networkx as nx
+
+V=range(N)# list of vertices
+g=nx.Graph()
+g.add_nodes_from(V)
+g.add_edges_from(E)# E is the list of edges
+
+pos=nx.fruchterman_reingold_layout(g)
+```
+
+Data for the Plotly plot of the same network but with a different layout:
+
+```python
+Xv=[pos[k][0] for k in range(N)]
+Yv=[pos[k][1] for k in range(N)]
+Xed=[]
+Yed=[]
+for edge in E:
+    Xed+=[pos[edge[0]][0],pos[edge[1]][0], None]
+    Yed+=[pos[edge[0]][1],pos[edge[1]][1], None]
+
+trace3=Scatter(x=Xed,
+               y=Yed,
+               mode='lines',
+               line=dict(color='rgb(210,210,210)', width=1),
+               hoverinfo='none'
+               )
+trace4=Scatter(x=Xv,
+               y=Yv,
+               mode='markers',
+               name='net',
+               marker=dict(symbol='circle-dot',
+                             size=5,
+                             color='#6959CD',
+                             line=dict(color='rgb(50,50,50)', width=0.5)
+                             ),
+               text=labels,
+               hoverinfo='text'
+               )
+
+annot="This networkx.Graph has the Fruchterman-Reingold layout<br>Code:"+\
+"<a href='http://nbviewer.ipython.org/gist/empet/07ea33b2e4e0b84193bd'> [2]</a>"
+
+data1=[trace3, trace4]
+fig1=Figure(data=data1, layout=layout)
+fig1['layout']['annotations'][0]['text']=annot
+py.iplot(fig1, filename='Coautorship-network-nx')
+```
+
+Zoom in a selected region of nodes to see that edges are also plotted, but due to the node positions assigned by FR layout, they are invisible at the first sight.
+
+We get a similar plot setting pos=nx.spring_layout(g).
+
+
+#### Reference
+See https://plot.ly/python/reference/#scatter for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'igraph_vs_networkx.ipynb', 'python/igraph-networkx-comparison/', 'Python Network Graphs Comparison | plotly',
+    'Comparing a Network Graph created with igraph to one created with networkx in Python with Plotly. ',
+    name = 'Network Graphs Comparison',
+    thumbnail='thumbnail/networks.jpg', language='python',
+    has_thumbnail='true', display_as='scientific', order=14,
+    ipynb= '~notebook_demo/222')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/insets.md plotly-7.1.0+dfsg1/doc/unconverted/python/insets.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/insets.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/insets.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,89 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make an inset graph in python.
+    display_as: multiple_axes
+    language: python
+    layout: base
+    name: Inset Plots
+    order: 3
+    page_type: example_index
+    permalink: python/insets/
+    thumbnail: thumbnail/insets.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+### Simple Inset Graph
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+trace1 = go.Scatter(
+    x=[1, 2, 3],
+    y=[4, 3, 2]
+)
+trace2 = go.Scatter(
+    x=[20, 30, 40],
+    y=[30, 40, 50],
+    xaxis='x2',
+    yaxis='y2'
+)
+data = [trace1, trace2]
+layout = go.Layout(
+    xaxis2=dict(
+        domain=[0.6, 0.95],
+        anchor='y2'
+    ),
+    yaxis2=dict(
+        domain=[0.6, 0.95],
+        anchor='x2'
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='simple-inset')
+
+```
+
+### Reference
+
+
+See https://plot.ly/python/reference/#layout-scene for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+!pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'inset.ipynb', 'python/insets/', 'Inset Plots | plotly',
+    'How to make an inset graph in python.',
+    title = 'Inset Plots | plotly',
+    name = 'Inset Plots',
+    has_thumbnail='true', thumbnail='thumbnail/insets.jpg',
+    language='python', page_type='example_index',
+    display_as='multiple_axes', order=3)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/interact-decorator.md plotly-7.1.0+dfsg1/doc/unconverted/python/interact-decorator.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/interact-decorator.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/interact-decorator.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,99 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: Use the Interact decorator with go.FigureWidget
+    display_as: chart_events
+    language: python
+    layout: base
+    name: Use Interact decorator with FigureWidget
+    order: 4
+    permalink: python/interact-decorator/
+    thumbnail: thumbnail/figurewidget-interact.gif
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Interact
+Here is a simple example of using the `interact` decorator from ipywidgets to create a simple set of widgets to control the parameters of a plot.
+
+```python
+import plotly.graph_objs as go
+
+import numpy as np
+from ipywidgets import interact
+```
+
+First we'll create an empty figure, and add an empty scatter trace to it.
+
+```python
+fig = go.FigureWidget()
+scatt = fig.add_scatter()
+fig
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/empty_fw.png'>
+
+
+Then, write an update function that inputs the frequency factor (`a`) and phase factor (`b`) and sets the `x` and `y` properties of the scatter trace.  This function is decorated with the `interact` decorator from the `ipywidgets` package. The decorator parameters are used to specify the ranges of parameters that we want to sweep over. See http://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html for more details.
+
+```python
+xs=np.linspace(0, 6, 100)
+
+@interact(a=(1.0, 4.0, 0.01), b=(0, 10.0, 0.01), color=['red', 'green', 'blue'])
+def update(a=3.6, b=4.3, color='blue'):
+    with fig.batch_update():
+        scatt.x=xs
+        scatt.y=np.sin(a*xs-b)
+        scatt.line.color=color
+```
+
+<img src='https://raw.githubusercontent.com/michaelbabyn/plot_data/master/interact_figurewidget.gif'>
+
+
+#### Reference
+
+
+See [these Jupyter notebooks](https://github.com/jonmmease/plotly_ipywidget_notebooks) for even more FigureWidget examples.
+
+```python
+help(go.FigureWidget)
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'Interact.ipynb', 'python/interact-decorator/', 'Use the Interact decorator with go.FigureWidget',
+    'Use the Interact decorator with go.FigureWidget',
+    title = 'Use Interact decorator with FigureWidget',
+    name = 'Use Interact decorator with FigureWidget',
+    has_thumbnail='true', thumbnail='thumbnail/zoom.jpg',
+    language='python', page_type='example_index',
+    display_as='chart_events', order=4,
+    ipynb= '~notebook_demo/254')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/interpolation-and-extrapolation-in-1d.md plotly-7.1.0+dfsg1/doc/unconverted/python/interpolation-and-extrapolation-in-1d.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/interpolation-and-extrapolation-in-1d.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/interpolation-and-extrapolation-in-1d.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,175 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to interpolation and extrapolate data in one dimension
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Interpolation and Extrapolation in 1D
+    order: 3
+    page_type: example_index
+    permalink: python/interpolation-and-extrapolation-in-1d/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Tips
+Interpolation refers to the process of generating data points between already existing data points. Extrapolation is the process of generating points outside a given set of known data points.
+<br/>(_inter_ and _extra_ are derived from Latin words meaning 'between' and 'outside' respectively)
+
+
+#### Interpolation and Extrapolation
+Interpolate and Extrapolate for a set of points and generate the curve of best fit that intersects all the points.
+
+```python
+points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
+
+x = points[:,0]
+y = points[:,1]
+
+z = np.polyfit(x, y, 3)
+f = np.poly1d(z)
+
+x_new = np.linspace(0, 10, 50)
+y_new = f(x_new)
+
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    name='Data',
+    marker=dict(
+        size=12
+    )
+)
+
+trace2 = go.Scatter(
+    x=x_new,
+    y=y_new,
+    mode='lines',
+    name='Fit'
+)
+
+annotation = go.Annotation(
+    x=6,
+    y=-4.5,
+    text='$0.43X^3 - 0.56X^2 + 16.78X + 10.61$',
+    showarrow=False
+)
+
+layout = go.Layout(
+    title='Polynomial Fit in Python',
+    annotations=[annotation]
+)
+
+data = [trace1, trace2]
+fig = go.Figure(data=data, layout=layout)
+
+py.iplot(fig, filename='interpolation-and-extrapolation')
+```
+
+#### Interpolation and Extrapolation of Y From X
+Interpolation and Extrapolation of (x, y) points with pre-existent points and an array of specific x values.
+
+```python
+points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
+
+# get x and y vectors
+x = points[:,0]
+y = points[:,1]
+
+# calculate polynomial
+z = np.polyfit(x, y, 3)
+f = np.poly1d(z)
+
+# other x values
+other_x = np.array([1.2, 1.34, 1.57, 1.7, 3.6, 3.8, 3.9, 4.0, 5.4, 6.6, 7.2, 7.3, 7.7, 8, 8.9, 9.1, 9.3])
+other_y = f(other_x)
+
+# calculate new x's and y's
+x_new = np.linspace(0, 10, 50)
+y_new = f(x_new)
+
+# Creating the dataset, and generating the plot
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    name='Data',
+    marker=dict(
+        size=12
+    )
+)
+
+trace2 = go.Scatter(
+    x=other_x,
+    y=other_y,
+    name='Interpolated/Extrapolated Data',
+    mode='markers',
+    marker=dict(
+        symbol='square-open',
+        size=12
+    )
+)
+
+layout = go.Layout(
+    title='Interpolation and Extrapolation of Y From X',
+)
+
+data2 = [trace1, trace2]
+fig2 = go.Figure(data=data2, layout=layout)
+
+py.iplot(fig2, filename='interpolation-and-extrapolation-of-y-from-x')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Interpolation_and_Extrapolation_in_1D.ipynb', 'python/interpolation-and-extrapolation-in-1d/', 'Interpolation and Extrapolation in 1D | plotly',
+    'Learn how to interpolation and extrapolate data in one dimension',
+    title='Interpolation and Extrapolation in 1D in Python. | plotly',
+    name='Interpolation and Extrapolation in 1D',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=3,
+    ipynb= '~notebook_demo/106')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/interpolation-and-extrapolation-in-2d.md plotly-7.1.0+dfsg1/doc/unconverted/python/interpolation-and-extrapolation-in-2d.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/interpolation-and-extrapolation-in-2d.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/interpolation-and-extrapolation-in-2d.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,125 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to interpolation and extrapolate data in two dimensions
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Interpolation and Extrapolation in 2D
+    order: 4
+    page_type: example_index
+    permalink: python/interpolation-and-extrapolation-in-2d/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Tips
+Interpolation refers to the process of generating data points between already existing data points. Extrapolation is the process of generating points outside a given set of known data points.
+<br/>(_inter_ and _extra_ are derived from Latin words meaning 'between' and 'outside' respectively)
+
+
+#### Spline Interpolation
+Interpolate for a set of points and generate the curve of best fit that intersects all the points.
+
+```python
+from scipy import interpolate
+
+x = np.arange(-5.0, 5.0, 0.25)
+y = np.arange(-5.0, 5.0, 0.25)
+xx, yy = np.meshgrid(x, y)
+z = np.sin(xx**2+yy**2)
+f = interpolate.interp2d(x, y, z, kind='cubic')
+
+xnew = np.arange(-5.0, 5.0, 1e-1)
+ynew = np.arange(-5.0, 5.0, 1e-1)
+znew = f(xnew, ynew)
+
+trace1 = go.Scatter3d(
+    x=x,
+    y=y,
+    z=z[0, :],
+    mode='markers',
+    name='Data',
+    marker = dict(
+        size = 7
+    )
+)
+
+trace2 = go.Scatter3d(
+    x=ynew,
+    y=xnew,
+    z=znew[0, :],
+    marker=dict(
+        size=3,
+    ),
+    name='Interpolated Data'
+)
+
+layout = go.Layout(
+    title='Interpolation and Extrapolation in 2D',
+    scene=dict(
+            camera= dict(
+                up=dict(x=0, y=0, z=1),
+                center=dict(x=0, y=0, z=0),
+                eye=dict(x=1, y=-1, z=0)
+            )
+    )
+)
+
+data = [trace1, trace2]
+
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='interpolation-and-extrapolation-2d')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Interpolation_and_Extrapolation_in_2D.ipynb', 'python/interpolation-and-extrapolation-in-2d/', 'Interpolation and Extrapolation in 2D | plotly',
+    'Learn how to interpolation and extrapolate data in two dimensions',
+    title='Interpolation and Extrapolation in 2D in Python. | plotly',
+    name='Interpolation and Extrapolation in 2D',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=4,
+    ipynb= '~notebook_demo/105')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/legacy-polar-chart.md plotly-7.1.0+dfsg1/doc/unconverted/python/legacy-polar-chart.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/legacy-polar-chart.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/legacy-polar-chart.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,309 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Legacy polar charts in python.
+    display_as: legacy_charts
+    language: python
+    layout: base
+    name: Polar Charts [Legacy]
+    order: 1
+    page_type: u-guide
+    permalink: python/legacy-polar-chart/
+    thumbnail: thumbnail/polar-scatter.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Legacy Plot
+
+
+These polar charts are legacy and will likely be deprecated in [Plotly 2.0](https://github.com/plotly/plotly.js/issues/420). Please see the new `scatterpolar` and `scatterpolargl` [trace types](https://plot.ly/python/polar-chart/) for latest and greatest in Plotly polar coordinates.
+
+
+#### Basic Polar Chart
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import pandas as pd
+
+df = pd.read_csv('polar_dataset.csv')
+
+trace1 = go.Scatter(
+    r=df['x1'],
+    t=df['y'],
+    mode='lines',
+    name='go.Figure8',
+    marker=dict(
+        color='none',
+        line=dict(
+            color='peru'
+        )
+    )
+)
+trace2 = go.Scatter(
+    r=df['x2'],
+    t=df['y'],
+    mode='lines',
+    name='Cardioid',
+    marker=dict(
+        color='none',
+        line=dict(
+            color='darkviolet'
+        )
+    )
+)
+trace3 = go.Scatter(
+    r=df['x3'],
+    t=df['y'],
+    mode='lines',
+    name='Hypercardioid',
+    marker=dict(
+        color='none',
+        line=dict(
+            color='deepskyblue'
+        )
+    )
+)
+trace4 = go.Scatter(
+    r=df['x4'],
+    t=df['y'],
+    mode='lines',
+    name='Subcardioid',
+    marker=dict(
+        color='none',
+        line=dict(
+            color='orangered'
+        )
+    )
+)
+trace5 = go.Scatter(
+    r=df['x5'],
+    t=df['y'],
+    mode='lines',
+    name='Supercardioid',
+    marker=dict(
+        color='none',
+        line=dict(
+            color='green'
+        )
+    )
+)
+data = [trace1, trace2, trace3, trace4, trace5]
+layout = go.Layout(
+    title='Mic Patterns',
+    font=dict(
+        family='Arial, sans-serif;',
+        size=12,
+        color='#000'
+    ),
+    orientation=-90
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='polar-line')
+```
+
+#### Polar Scatter Chart
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import numpy as np
+
+trace1 = go.Scatter(
+    r = np.random.uniform(1,6,size=62),
+    t = np.random.uniform(30,5,size=62),
+    mode='markers',
+    name='Trial 1',
+    marker=dict(
+        color='rgb(27,158,119)',
+        size=110,
+        line=dict(
+            color='white'
+        ),
+        opacity=0.7
+    )
+)
+trace2 = go.Scatter(
+    r=np.random.uniform(3,8,size=62),
+    t=np.random.uniform(-14,-76,size=62),
+    mode='markers',
+    name='Trial 2',
+    marker=dict(
+        color='rgb(217,95,2)',
+        size=110,
+        line=dict(
+            color='white'
+        ),
+        opacity=0.7
+    )
+)
+trace3 = go.Scatter(
+    r=np.random.uniform(1,7,size=62),
+    t=np.random.uniform(131,111,size=62),
+    mode='markers',
+    name='Trial 3',
+    marker=dict(
+        color='rgb(117,112,179)',
+        size=110,
+        line=dict(
+            color='white'
+        ),
+        opacity=0.7
+    )
+)
+trace4 = go.Scatter(
+    r=np.random.uniform(1,9,size=62),
+    t=np.random.uniform(-140,-177,size=62),
+    mode='markers',
+    name='Trial 4',
+    marker=dict(
+        color='rgb(231,41,138)',
+        size=110,
+        line=dict(
+            color='white'
+        ),
+        opacity=0.7
+    )
+)
+trace5 = go.Scatter(
+    r=np.random.uniform(1,3,size=62),
+    t=np.random.uniform(-100,-163,size=62),
+    mode='markers',
+    name='Trial 5',
+    marker=dict(
+        color='rgb(102,166,30)',
+        size=110,
+        line=dict(
+            color='white'
+        ),
+        opacity=0.7
+    )
+)
+trace6 = go.Scatter(
+    r=np.random.uniform(0,5,size=62),
+    t=np.random.uniform(66,47,size=62),
+    mode='markers',
+    name='Trial 6',
+    marker=dict(
+        color='rgb(230,171,2)',
+        size=110,
+        line=dict(
+            color='white'
+        ),
+        opacity=0.7
+    )
+)
+data = [trace1, trace2, trace3, trace4, trace5, trace6]
+layout = go.Layout(
+    title='Hobbs-Pearson Trials',
+    font=dict(
+        size=15
+    ),
+    plot_bgcolor='rgb(223, 223, 223)',
+    angularaxis=dict(
+        tickcolor='rgb(253,253,253)'
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig)
+```
+
+#### Wind Rose Chart
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+trace1 = go.Area(
+    r=[77.5, 72.5, 70.0, 45.0, 22.5, 42.5, 40.0, 62.5],
+    t=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
+    name='11-14 m/s',
+    marker=dict(
+        color='rgb(106,81,163)'
+    )
+)
+trace2 = go.Area(
+    r=[57.49999999999999, 50.0, 45.0, 35.0, 20.0, 22.5, 37.5, 55.00000000000001],
+    t=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
+    name='8-11 m/s',
+    marker=dict(
+        color='rgb(158,154,200)'
+    )
+)
+trace3 = go.Area(
+    r=[40.0, 30.0, 30.0, 35.0, 7.5, 7.5, 32.5, 40.0],
+    t=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
+    name='5-8 m/s',
+    marker=dict(
+        color='rgb(203,201,226)'
+    )
+)
+trace4 = go.Area(
+    r=[20.0, 7.5, 15.0, 22.5, 2.5, 2.5, 12.5, 22.5],
+    t=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
+    name='< 5 m/s',
+    marker=dict(
+        color='rgb(242,240,247)'
+    )
+)
+data = [trace1, trace2, trace3, trace4]
+layout = go.Layout(
+    title='Wind Speed Distribution in Laurel, NE',
+    font=dict(
+        size=16
+    ),
+    legend=dict(
+        font=dict(
+            size=16
+        )
+    ),
+    radialaxis=dict(
+        ticksuffix='%'
+    ),
+    orientation=270
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='polar-area-chart')
+```
+
+#### Reference
+
+See https://plot.ly/python/reference/#area for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'polar.ipynb', 'python/legacy-polar-chart/', 'Polar Charts [Legacy]',
+    'Legacy polar charts in python.',
+    title = 'Python Polar Charts | plotly',
+    has_thumbnail='true', thumbnail='thumbnail/polar-scatter.jpg',
+    language='python',
+    display_as='legacy_charts', order=1,
+    ipynb= '~notebook_demo/37')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/linear-algebra.md plotly-7.1.0+dfsg1/doc/unconverted/python/linear-algebra.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/linear-algebra.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/linear-algebra.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,192 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform several operations on matrices including inverse,
+      eigenvalues, and determinents
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Linear Algebra
+    order: 10
+    page_type: example_index
+    permalink: python/linear-algebra/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by dowloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.express as px
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Add Two Matrices
+
+
+A Matrix is a 2D array that stores real or complex numbers. A _Real Matrix_ is one such that all its elements $r$ belong to $\mathbb{R}$. Likewise, a _Complex Matrix_ has entries $c$ in $\mathbb{C}$.
+
+```python
+matrix1 = np.matrix(
+    [[0, 4],
+     [2, 0]]
+)
+
+matrix2 = np.matrix(
+    [[-1, 2],
+     [1, -2]]
+)
+
+matrix_sum = matrix1 + matrix2
+px.imshow(matrix_sum, text_auto=True)
+```
+
+#### Multiply Two Matrices
+How to find the product of two matrices
+
+```python
+matrix1 = np.matrix(
+    [[1, 4],
+     [2, 0]]
+)
+
+matrix2 = np.matrix(
+    [[-1, 2],
+     [1, -2]]
+)
+
+matrix_prod = matrix1 * matrix2
+px.imshow(matrix_prod, text_auto=True)
+```
+
+#### Solve Matrix Equation
+How to find the solution of $AX=B$
+
+```python
+A = np.matrix(
+    [[1, 4],
+     [2, 0]]
+)
+
+B = np.matrix(
+    [[-1, 2],
+     [1, -2]]
+)
+
+X = np.linalg.solve(A, B)
+px.imshow(X, text_auto=True)
+```
+
+#### Find the Determinant
+
+```python
+matrix = np.matrix(
+    [[1, 4],
+     [2, 0]]
+)
+
+det = np.linalg.det(matrix)
+det
+```
+
+#### Find the Inverse
+
+```python
+matrix = np.matrix(
+    [[1, 4],
+     [2, 0]]
+)
+
+inverse = np.linalg.inv(matrix)
+px.imshow(inverse, text_auto=True)
+```
+
+#### Find Eigenvalues
+
+```python
+matrix = np.matrix(
+    [[1, 4],
+     [2, 0]]
+)
+
+eigvals = np.linalg.eigvals(matrix)
+print("The eignevalues are %f and %f") %(eigvals[0], eigvals[1])
+```
+
+#### Find SVD
+How to find the Singular Value Decomposition of a matrix, i.e. break up a matrix into the product of three matrices: $U$, $\Sigma$, $V^*$
+
+```python
+matrix = np.matrix(
+    [[1, 4],
+     [2, 0]]
+)
+
+svd = np.linalg.svd(matrix)
+
+u = svd[0]
+sigma = svd[1]
+v = svd[2]
+
+u = u.tolist()
+sigma = sigma.tolist()
+v = v.tolist()
+
+colorscale = [[0, '#111111'],[1, '#222222']]
+font=['#ffffff', '#ffffff']
+
+matrix_prod = [
+    ['$U$', '', '$\Sigma$', '$V^*$', ''],
+    [u[0][0], u[0][1], sigma[0], v[0][0], v[0][1]],
+    [u[1][0], u[1][1], sigma[1], v[1][0], v[1][1]]
+]
+
+table = FF.create_table(matrix_prod)
+py.iplot(table, filename='svd')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Linear_Algebra.ipynb', 'python/linear-algebra/', 'Linear Algebra | plotly',
+    'Learn how to perform several operations on matrices including inverse, eigenvalues, and determinents',
+    title='Linear Algebra in Python. | plotly',
+    name='Linear Algebra',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=10,
+    ipynb= '~notebook_demo/104')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/linear-gauge-chart.md plotly-7.1.0+dfsg1/doc/unconverted/python/linear-gauge-chart.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/linear-gauge-chart.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/linear-gauge-chart.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,167 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make interactive linear-gauge charts in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Linear-Gauge Chart
+    order: 12
+    page_type: u-guide
+    permalink: python/linear-gauge-chart/
+    thumbnail: thumbnail/linear-gauge.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Linear Gauge Chart Shell
+Note the following tutorial shows how to create a linear-gauge chart with 4 gauges. It's recommended to use a `width` between 600-1000px and `ticklen` should be `width/20`. These variables are defined in the code below.
+
+```python
+from plotly import tools
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+# Define Titles and Labels for Each Scale
+scales = ['<b>Tension</b>', '<b>Energy</b>',
+          '<b>Valence</b>', '<b>Prefer</b>']
+scale1 = ['Very <br> Calm ', 'Moderately <br> Calm ',
+          'Slightly <br> Calm ', 'Neutral ',
+          'Slightly <br> Tense ', 'Moderately <br> Tense ',
+          'Very <br> Tense ']
+scale2 = ['Very <br> Tired ', 'Moderately <br> Tired ',
+          'Slightly <br> Tired ', 'Neutral ',
+          'Slightly <br> Awake ', 'Moderately <br> Awake ',
+          'Very <br> Awake ']
+scale3 = ['Very <br> Displeased ', 'Moderately <br> Displeased ',
+          'Slightly <br> Displeased ', 'Neutral ',
+          'Slightly <br> Pleased ', 'Moderately <br> Pleased ',
+          'Very <br> Pleased ']
+scale4 = ['Strongly <br> Dislike ', 'Moderately <br> Dislike ',
+          'Slightly <br> Dislike ', 'Neutral ',
+          'Slightly <br> Like ', 'Moderately <br> Like ',
+          'Strongly <br> Like ']
+scale_labels = [scale1, scale2, scale3, scale4]
+
+# Add Scale Titles to the Plot
+traces = []
+for i in range(len(scales)):
+    traces.append(go.Scatter(
+        x=[0.6], # Pad the title - a longer scale title would need a higher value
+        y=[6.25],
+        text=scales[i],
+        mode='text',
+        hoverinfo='none',
+        showlegend=False,
+        xaxis='x'+str(i+1),
+        yaxis='y'+str(i+1)
+    ))
+
+# Create Scales
+## Since we have 7 lables, the scale will range from 0-6
+shapes = []
+for i in range(len(scales)):
+    shapes.append({'type': 'rect',
+                   'x0': .02, 'x1': 1.02,
+                   'y0': 0, 'y1': 6,
+                   'xref':'x'+str(i+1), 'yref':'y'+str(i+1)})
+
+x_domains = [[0, .25], [.25, .5], [.5, .75], [.75, 1]] # Split for 4 scales
+chart_width = 800
+
+# Define X-Axes
+xaxes = []
+for i in range(len(scales)):
+    xaxes.append({'domain': x_domains[i], 'range':[0, 4],
+                  'showgrid': False, 'showline': False,
+                  'zeroline': False, 'showticklabels': False})
+
+# Define Y-Axes (and set scale labels)
+## ticklen is used to create the segments of the scale,
+## for more information see: https://plot.ly/python/reference/#layout-yaxis-ticklen
+yaxes = []
+for i in range(len(scales)):
+    yaxes.append({'anchor':'x'+str(i+1), 'range':[-.5,6.5],
+                  'showgrid': False, 'showline': False, 'zeroline': False,
+                  'ticks':'inside', 'ticklen': chart_width/20,
+                  'ticktext':scale_labels[i], 'tickvals':[0., 1., 2., 3., 4., 5., 6.]
+                 })
+
+# Put all elements of the layout together
+layout = {'shapes': shapes,
+          'xaxis1': xaxes[0],
+          'xaxis2': xaxes[1],
+          'xaxis3': xaxes[2],
+          'xaxis4': xaxes[3],
+          'yaxis1': yaxes[0],
+          'yaxis2': yaxes[1],
+          'yaxis3': yaxes[2],
+          'yaxis4': yaxes[3],
+          'autosize': False,
+          'width': chart_width,
+          'height': 600
+}
+
+### ADD RATING DATA HERE ###
+
+fig = dict(data=traces, layout=layout)
+py.iplot(fig, filename='linear-gauge-layout')
+```
+
+#### Add Rating Data
+Ratings should be scaled between 0 - 6 to fit the y-values of the scales created above.
+
+```python
+ratings = [4.5, 5, 1, 2.75]
+
+for i in range(len(ratings)):
+    traces.append(go.Scatter(
+            x=[0.5], y=[ratings[i]],
+            xaxis='x'+str(i+1), yaxis='y'+str(i+1),
+            mode='markers', marker={'size': 16, 'color': '#29ABD6'},
+            text=ratings[i], hoverinfo='text', showlegend=False
+    ))
+
+fig = dict(data=traces, layout=layout)
+py.iplot(fig, filename='linear-gauge')
+```
+
+#### Reference
+See https://plot.ly/python/reference/ for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'linear-gauge.ipynb', 'python/linear-gauge-chart/', 'Python Linear-Gauge Chart | plotly',
+    'How to make interactive linear-guage charts in Python with Plotly. ',
+    title = 'Python Linear-Gauge Chart | plotly',
+    name = 'Linear-Gauge Chart',
+    thumbnail='thumbnail/linear-gauge.jpg', language='python',
+    has_thumbnail='true', display_as='basic', order=12,
+    ipynb='~notebook_demo/12')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/logos.md plotly-7.1.0+dfsg1/doc/unconverted/python/logos.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/logos.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/logos.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,210 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to add images as logos to Plotly charts.
+    display_as: advanced_opt
+    language: python
+    layout: base
+    name: Logos
+    order: 6
+    page_type: example_index
+    permalink: python/logos/
+    thumbnail: thumbnail/your-tutorial-chart.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Formatting and Positioning Images as Logos
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+data = [
+    go.Bar(
+        x=['-35.3', '-15.9', '-15.8', '-15.6', '-11.1',
+           '-9.6', '-9.2', '-3.5', '-1.9', '-0.9',
+           '1.0', '1.4', '1.7', '2.0', '2.8', '6.2',
+           '8.1', '8.5', '8.5', '8.6', '11.4', '12.5',
+           '13.3', '13.7', '14.4', '17.5', '17.7',
+           '18.9', '25.1', '28.9', '41.4'],
+        y=['Designers, musicians, artists, etc.',
+           'Secretaries and administrative assistants',
+           'Waiters and servers', 'Archivists, curators, and librarians',
+           'Sales and related', 'Childcare workers, home car workers, etc.',
+           'Food preparation occupations', 'Janitors, maids, etc.',
+           'Healthcare technicians, assistants. and aides',
+           'Counselors, social and religious workers',
+           'Physical, life and social scientists', 'Construction',
+           'Factory assembly workers', 'Machinists, repairmen, etc.',
+           'Media and communications workers', 'Teachers',
+           'Mechanics, repairmen, etc.', 'Financial analysts and advisers',
+           'Farming, fishing and forestry workers',
+           'Truck drivers, heavy equipment operator, etc.','Accountants and auditors',
+           'Human resources, management analysts, etc.', 'Managers',
+           'Lawyers and judges', 'Engineers, architects and surveyors',
+           'Nurses', 'Legal support workers',
+           'Computer programmers and system admin.', 'Police officers and firefighters',
+           'Chief executives', 'Doctors, dentists and surgeons'],
+        marker=dict(
+            color='rgb(253, 240, 54)',
+            line=dict(color='rgb(0, 0, 0)',
+                      width=2)
+        ),
+        orientation='h',
+    )
+]
+
+layout = go.Layout(
+    images=[dict(
+        source="https://raw.githubusercontent.com/cldougl/plot_images/add_r_img/vox.png",
+        xref="paper", yref="paper",
+        x=1, y=1.05,
+        sizex=0.2, sizey=0.2,
+        xanchor="right", yanchor="bottom"
+      )],
+    autosize=False, height=800, width=700,
+    bargap=0.15, bargroupgap=0.1,
+    barmode='stack', hovermode='x',
+    margin=dict(r=20, l=300,
+                  b=75, t=125),
+    title='Moving Up, Moving Down<br><i>Percentile change in income between childhood and adulthood</i>',
+    xaxis=dict(
+        dtick=10, nticks=0,
+        gridcolor='rgba(102, 102, 102, 0.4)',
+        linecolor='#000', linewidth=1,
+        mirror=True,
+        showticklabels=True, tick0=0, tickwidth=1,
+        title='<i>Change in percentile</i>',
+    ),
+    yaxis=dict(
+        anchor='x',
+        gridcolor='rgba(102, 102, 102, 0.4)', gridwidth=1,
+        linecolor='#000', linewidth=1,
+        mirror=True, showgrid=False,
+        showline=True, zeroline=False,
+        showticklabels=True, tick0=0,
+        type='category',
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig)
+```
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+fig = py.get_figure('https://plot.ly/~Dreamshot/8152/', raw=True)
+fig['layout']['yaxis']['tickangle'] = 0
+fig = go.Figure(fig)
+
+fig.layout.images = [dict(
+        source="https://raw.githubusercontent.com/cldougl/plot_images/add_r_img/accuweather.jpeg",
+        xref="paper", yref="paper",
+        x=0.1, y=1.05,
+        sizex=0.4, sizey=0.4,
+        xanchor="center", yanchor="bottom"
+      )]
+
+py.iplot(fig, fileopt='overwrite', filename='Logos/Florida_Rainfall_AccuWeather')
+```
+
+```python
+import plotly.plotly as py
+
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+fig = py.get_figure('https://plot.ly/~Dreamshot/8160/', raw=True)
+for j in range(len(fig['data'])):
+    del fig['data'][j]['autobinx']
+    del fig['data'][j]['autobiny']
+fig = go.Figure(fig)
+
+fig.layout.images = [dict(
+        source="https://raw.githubusercontent.com/cldougl/plot_images/add_r_img/bleacherreport.png",
+        xref="paper", yref="paper",
+        x=0.5, y=-0.35,
+        sizex=0.3, sizey=0.3,
+        xanchor="center", yanchor="top"
+      )]
+
+py.iplot(fig, fileopt='overwrite', filename='Logos/Top_Earners_BleacherReport')
+```
+
+```python
+import plotly.plotly as py
+
+fig = py.get_figure('https://plot.ly/~Dreamshot/8158/')
+
+fig.layout.images = [dict(
+        source="https://raw.githubusercontent.com/cldougl/plot_images/add_r_img/theverge.png",
+        xref="paper", yref="paper",
+        x=0.1, y=1.0,
+        sizex=0.2, sizey=0.3,
+        xanchor="center", yanchor="bottom"
+      )]
+
+fig.layout.legend.orientation = 'h'
+
+py.iplot(fig, fileopt='overwrite', filename='Logos/Apple_Labor_Violations_TheVerge')
+```
+
+```python
+import plotly.plotly as py
+
+fig = py.get_figure('https://plot.ly/~Dreamshot/8155/')
+
+fig.layout.images = [dict(
+        source="https://raw.githubusercontent.com/cldougl/plot_images/add_r_img/politico.png",
+        xref="paper", yref="paper",
+        x=0.1, y=-0.2,
+        sizex=0.4, sizey=0.4,
+        xanchor="center", yanchor="bottom"
+      )]
+
+py.iplot(fig, fileopt='overwrite', filename='Logos/Foreign_Policy_Politico')
+```
+
+#### Reference
+See https://plot.ly/python/images/ for more examples of adding images<br>
+and https://plot.ly/python/reference/#layout-images for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'logos.ipynb', 'python/logos/', 'Add Logos to Charts',
+    'How to add images as logos to Plotly charts.',
+    title = 'Add Logos to Charts | plotly',
+    name = 'Logos',
+    has_thumbnail='false', thumbnail='thumbnail/your-tutorial-chart.jpg',
+    language='python', page_type='example_index',
+    display_as='style_opt', order=6,
+    ipynb= '~notebook_demo/92')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/matplotlib-colorscales.md plotly-7.1.0+dfsg1/doc/unconverted/python/matplotlib-colorscales.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/matplotlib-colorscales.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/matplotlib-colorscales.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,201 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make Matplotlib Colorscales in Python with Plotly.
+    display_as: advanced_opt
+    language: python
+    layout: base
+    name: Matplotlib Colorscales
+    order: 8
+    page_type: example_index
+    permalink: python/matplotlib-colorscales/
+    thumbnail: thumbnail/colorbars.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+
+### Formatting the Colormap
+
+
+Parula Colormap can be downloaded from [here](https://github.com/BIDS/colormap/blob/master/parula.py)
+
+```python
+import parula as par
+import matplotlib
+from matplotlib import cm
+import numpy as np
+
+magma_cmap = matplotlib.cm.get_cmap('magma')
+viridis_cmap = matplotlib.cm.get_cmap('viridis')
+parula_cmap = par.parula_map
+
+viridis_rgb = []
+magma_rgb = []
+parula_rgb = []
+norm = matplotlib.colors.Normalize(vmin=0, vmax=255)
+
+for i in range(0, 255):
+       k = matplotlib.colors.colorConverter.to_rgb(magma_cmap(norm(i)))
+       magma_rgb.append(k)
+
+for i in range(0, 255):
+       k = matplotlib.colors.colorConverter.to_rgb(viridis_cmap(norm(i)))
+       viridis_rgb.append(k)
+
+for i in range(0, 255):
+       k = matplotlib.colors.colorConverter.to_rgb(parula_cmap(norm(i)))
+       parula_rgb.append(k)
+
+def matplotlib_to_plotly(cmap, pl_entries):
+    h = 1.0/(pl_entries-1)
+    pl_colorscale = []
+
+    for k in range(pl_entries):
+        C = map(np.uint8, np.array(cmap(k*h)[:3])*255)
+        pl_colorscale.append([k*h, 'rgb'+str((C[0], C[1], C[2]))])
+
+    return pl_colorscale
+
+magma = matplotlib_to_plotly(magma_cmap, 255)
+viridis = matplotlib_to_plotly(viridis_cmap, 255)
+parula = matplotlib_to_plotly(parula_cmap, 255)
+```
+
+### Colorscales  for Heatmaps
+
+```python
+import plotly.plotly as py
+import numpy as np
+import os
+import plotly.graph_objs as go
+from plotly import tools
+
+def heatmap_plot(colorscale, title):
+    example_dir = os.path.join(os.path.dirname('__file__'), "examples")
+
+    hist2d = np.loadtxt(os.path.join(example_dir, "hist2d.txt"))
+    trace1 = go.Heatmap(z=hist2d, colorscale=colorscale, showscale=False)
+
+    st_helens = np.loadtxt(os.path.join(example_dir,
+                                        "st-helens_before-modified.txt.gz")).T
+    trace2 = go.Heatmap(z=st_helens, colorscale=colorscale, y0=-5, x0=-5)
+
+    dx = dy = 0.05
+    y, x = np.mgrid[-5 : 5 + dy : dy, -5 : 10 + dx : dx]
+    z = np.sin(x)**10 + np.cos(10 + y*x) + np.cos(x) + 0.2*y + 0.1*x
+    trace3 = go.Heatmap(z=z, colorscale=colorscale, showscale=False)
+
+    fig = tools.make_subplots(rows=1, cols=3, print_grid=False)
+    fig.append_trace(trace1, 1, 1)
+    fig.append_trace(trace2, 1, 2)
+    fig.append_trace(trace3, 1, 3)
+    fig['layout'].update(title=title)
+    fig['layout']['xaxis2'].update(range=[0, 450])
+    fig['layout']['yaxis2'].update(range=[0, 270])
+
+    return fig
+```
+
+```python
+py.iplot(heatmap_plot(colorscale=magma, title='MAGMA'))
+```
+
+```python
+py.iplot(heatmap_plot(colorscale=viridis, title='VIRIDIS'))
+```
+
+```python
+py.iplot(heatmap_plot(colorscale=parula, title='PARULA'))
+```
+
+### Colorscales for Trisurf Plots
+
+```python
+import plotly.plotly as py
+from plotly.tools import FigureFactory as FF
+import plotly.graph_objs as go
+import numpy as np
+from scipy.spatial import Delaunay
+
+u = np.linspace(0, 2*np.pi, 24)
+v = np.linspace(-1, 1, 8)
+u,v = np.meshgrid(u, v)
+u = u.flatten()
+v = v.flatten()
+
+tp = 1 + 0.5*v*np.cos(u/2.)
+x = tp*np.cos(u)
+y = tp*np.sin(u)
+z = 0.5*v*np.sin(u/2.)
+
+points2D = np.vstack([u, v]).T
+tri = Delaunay(points2D)
+simplices = tri.simplices
+
+trace1 = FF.create_trisurf(x=x, y=y, z=z,
+                           simplices=simplices, colormap=magma_rgb, plot_edges=False,
+                           title='Magma Colorscale for Trisurf Plot')
+py.iplot(trace1)
+
+```
+
+```python
+trace2 = FF.create_trisurf(x=x, y=y, z=z,
+                           simplices=simplices, colormap=viridis_rgb, plot_edges=False,
+                           title='Viridis Colorscale for Trisurf Plot')
+py.iplot(trace2)
+
+```
+
+```python
+trace3 = FF.create_trisurf(x=x, y=y, z=z,
+                          simplices=simplices, colormap=parula_rgb, plot_edges=False,
+                          title='Parula Colorscale for Trisurf Plot')
+py.iplot(trace3)
+
+```
+
+### Acknowledgment
+
+Special thanks to [Stéfan van der Walt](https://github.com/stefanv) and [Nathaniel Smith](https://github.com/njsmith) for the statistics of colormaps.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/csshref="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'matplotlib-colorscales.ipynb', 'python/matplotlib-colorscales/', 'Matplotlib Colorscales',
+    'How to make Matplotlib Colorscales in Python with Plotly.',
+    title = 'Python Matplotlib Colorscales | plotly',
+    name = 'Matplotlib Colorscales',
+    has_thumbnail='true', thumbnail='thumbnail/colorbars.jpg',
+    language='python', page_type='example_index',
+    display_as='style_opt', order=8,
+    ipynb= '~notebook_demo/48')
+
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/normality-test.md plotly-7.1.0+dfsg1/doc/unconverted/python/normality-test.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/normality-test.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/normality-test.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,387 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: Learn how to generate various normality tests using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Normality Tests
+    order: 2
+    page_type: u-guide
+    permalink: python/normality-test/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+### Normality Tests
+
+
+In statistics, normality tests are used to determine whether a data set is modeled for Normal (Gaussian) Distribution. Many statistical functions require that a distribution be normal or nearly normal.
+
+There are several methods of assessing whether data are normally distributed or not. They fall into two broad categories: _graphical_ and _statistical_.
+The common techniques are:
+
+**_Graphical_**
+   - Histogram Plot
+   - Quantile-Quantile Plot
+
+**_Statistical_**
+   - Shapiro-Wilk Test
+   - Kolmogorov-Smirnov
+   - D'Agostino's $K^{2}$ Test
+   - Anderson-Darling Test
+
+
+### Test Dataset
+
+
+Let's first develop a test dataset that we can use throughout this tutorial.
+
+_The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/)._
+
+```python
+# Imports
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+_Generate Gaussian Data_
+
+```python
+# Seed the random number generator
+np.random.seed(10)
+
+# Generate Univariate Observations
+gauss_data = 5 * np.random.randn(100) + 50
+print('mean=%.3f stdv=%.3f' % (np.mean(gauss_data), np.std(gauss_data)))
+```
+
+We can see that the mean and standard deviation are reasonable but rough estimations of the true underlying population mean and standard deviation, given the small-ish sample size.
+
+
+### Histogram Plot
+A simple and commonly used plot to quickly check the distribution of a sample of data is the histogram.
+
+In the histogram, the data is divided into a pre-specified number of groups called bins. The data is then sorted into each bin and the count of the number of observations in each bin is retained.
+
+The plot shows the bins across the x-axis maintaining their ordinal relationship, and the count in each bin on the y-axis.
+
+A sample of data has a Gaussian distribution of the histogram plot, showing the familiar bell shape. By default, the number of bins is automatically estimated from the data provided.
+
+```python
+trace = go.Histogram(
+    x=gauss_data
+)
+
+py.iplot([trace], filename='normality-histogram')
+```
+
+We can see a Gaussian-like shape to the data, that although is not strongly the familiar bell-shape, is a rough approximation.
+
+
+### Quantile-Quantile Plot
+
+
+Another popular plot for checking the distribution of a data sample is the quantile-quantile plot, Q-Q plot, or QQ plot for short.
+
+This plot generates its own sample of the idealized distribution that we are comparing with, in this case the Gaussian distribution. The idealized samples are divided into groups (e.g. 5), called quantiles. Each data point in the sample is paired with a similar member from the idealized distribution at the same cumulative distribution.
+
+The resulting points are plotted as a scatter plot with the idealized value on the x-axis and the data sample on the y-axis.
+
+A perfect match for the distribution will be shown by a line of dots on a 45-degree angle from the bottom left of the plot to the top right. Often a line is drawn on the plot to help make this expectation clear. Deviations by the dots from the line shows a deviation from the expected distribution.
+
+We can develop a QQ plot in Python using the [qqplot() statsmodels function](http://www.statsmodels.org/dev/generated/statsmodels.graphics.gofplots.qqplot.html). The function takes the data sample and by default assumes we are comparing it to a Gaussian distribution. We can draw the standardized line by setting the `'line'` argument to `'s'`
+
+A complete example of plotting the test dataset as a QQ plot is provided below.
+
+```python
+from statsmodels.graphics.gofplots import qqplot
+
+qqplot_data = qqplot(gauss_data, line='s').gca().lines
+```
+
+```python
+fig = go.Figure()
+
+fig.add_trace({
+    'type': 'scatter',
+    'x': qqplot_data[0].get_xdata(),
+    'y': qqplot_data[0].get_ydata(),
+    'mode': 'markers',
+    'marker': {
+        'color': '#19d3f3'
+    }
+})
+
+fig.add_trace({
+    'type': 'scatter',
+    'x': qqplot_data[1].get_xdata(),
+    'y': qqplot_data[1].get_ydata(),
+    'mode': 'lines',
+    'line': {
+        'color': '#636efa'
+    }
+
+})
+
+
+fig['layout'].update({
+    'title': 'Quantile-Quantile Plot',
+    'xaxis': {
+        'title': 'Theoritical Quantities',
+        'zeroline': False
+    },
+    'yaxis': {
+        'title': 'Sample Quantities'
+    },
+    'showlegend': False,
+    'width': 800,
+    'height': 700,
+})
+
+
+py.iplot(fig, filename='normality-QQ')
+```
+
+Running the example creates the QQ plot showing the scatter plot of points in a diagonal line, closely fitting the expected diagonal pattern for a sample from a Gaussian distribution.
+
+There are a few small deviations, especially at the bottom of the plot, which is to be expected given the small data sample.
+
+
+### Statistical Normality Tests
+
+
+There are many statistical tests that we can use to quantify whether a sample of data looks as though it was drawn from a Gaussian distribution.
+
+Each test makes different assumptions and considers different aspects of the data.
+
+We will look at 3 commonly used tests in this section that you can apply to your own data samples
+
+#### Interpretation of a Test
+Before you can apply the statistical tests, you must know how to interpret the results.
+
+Each test will return at least two things:
+
+- **_Statistic_**: A quantity calculated by the test that can be interpreted in the context of the test via comparing it to critical values from the distribution of the test statistic.
+- **_p-value_**: Used to interpret the test, in this case whether the sample was drawn from a Gaussian distribution.
+
+Each test calculates a test-specific statistic. This statistic can aid in the interpretation of the result, although it may require a deeper proficiency with statistics and a deeper knowledge of the specific statistical test. Instead, the p-value can be used to quickly and accurately interpret the statistic in practical applications.
+
+The tests assume that the sample was drawn from a Gaussian distribution. Technically this is called the null hypothesis, or H0. A threshold level is chosen called alpha, typically 5% (or 0.05), that is used to interpret the p-value.
+
+In the SciPy implementation of these tests, you can interpret the p value as follows.
+ - **_p <= alpha_**: reject H0, not normal.
+ - **_p > alpha_**: fail to reject H0, normal.
+
+This means that, in general, we are seeking results with a larger p-value to confirm that our sample was likely drawn from a Gaussian distribution.
+
+A result above 5% does not mean that the null hypothesis is true. It means that it is very likely true given available evidence. The p-value is not the probability of the data fitting a Gaussian distribution; it can be thought of as a value that helps us interpret the statistical test.
+
+
+### Shapiro-Wilk Test
+
+
+The [Shapiro-Wilk test](https://en.wikipedia.org/wiki/Shapiro%E2%80%93Wilk_test) evaluates a data sample and quantifies how likely it is that the data was drawn from a Gaussian distribution, named for Samuel Shapiro and Martin Wilk.
+
+In practice, the Shapiro-Wilk test is believed to be a reliable test of normality, although there is some suggestion that the test may be suitable for smaller samples of data, e.g. thousands of observations or fewer.
+
+The [shapiro() SciPy](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.shapiro.html) function will calculate the Shapiro-Wilk on a given dataset. The function returns both the W-statistic calculated by the test and the p-value.
+
+The complete example of performing the Shapiro-Wilk test on the dataset is listed below.
+
+```python
+from scipy.stats import shapiro
+stat, p = shapiro(gauss_data)
+
+# interpret
+alpha = 0.05
+if p > alpha:
+    msg = 'Sample looks Gaussian (fail to reject H0)'
+else:
+    msg = 'Sample does not look Gaussian (reject H0)'
+
+result_mat = [
+    ['Length of the sample data', 'Test Statistic', 'p-value', 'Comments'],
+    [len(gauss_data), stat, p, msg]
+]
+
+swt_table = ff.create_table(result_mat)
+swt_table['data'][0].colorscale=[[0, '#2a3f5f'],[1, '#ffffff']]
+swt_table['layout']['height']=200
+swt_table['layout']['margin']['t']=50
+swt_table['layout']['margin']['b']=50
+
+py.iplot(swt_table, filename='shapiro-wilk-table')
+```
+
+Running the above example calculates the statistic and p-value.
+
+The p-value is interested and finds that the data is likely drawn from a Gaussian distribution.
+
+
+### Anderson-Darling Test
+
+
+[Anderson-Darling Test](https://en.wikipedia.org/wiki/Anderson%E2%80%93Darling_test) is a statistical test that can be used to evaluate whether a data sample comes from one of among many known data samples, named for Theodore Anderson and Donald Darling.
+
+It can be used to check whether a data sample is normal. The test is a modified version of a more sophisticated nonparametric goodness-of-fit statistical test called the [Kolmogorov-Smirnov test](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test).
+
+A feature of the Anderson-Darling test is that it returns a list of critical values rather than a single p-value. This can provide the basis for a more thorough interpretation of the result.
+
+The [anderson() SciPy function](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.anderson.html) implements the Anderson-Darling test. It takes as parameters the data sample and the name of the distribution to test it against. By default, the test will check against the Gaussian distribution (`dist='norm'`).
+
+The complete example of calculating the Anderson-Darling test on the sample problem is listed below.
+
+```python
+from scipy.stats import anderson
+
+result = anderson(gauss_data)
+stat = round(result.statistic, 4)
+
+p = 0
+result_mat = []
+for i in range(len(result.critical_values)):
+    sl, cv = result.significance_level[i], result.critical_values[i]
+    if result.statistic < result.critical_values[i]:
+        msg = 'Sample looks Gaussian (fail to reject H0)'
+    else:
+        msg = 'Sample does not look Gaussian (reject H0)'
+    result_mat.append([len(gauss_data), stat, sl, cv, msg])
+
+trace = go.Table(
+    header=dict(values=['<b>Sample Size</b>', '<b>Statistic</b>', '<b>Significance Level</b>', '<b>Critical Value</b>', '<b>Comment</b>'],
+                line = dict(width=0),
+                fill = dict(color='rgba(42,63,95,0.8)'),
+                align = 'center',
+                font = dict(
+                    color = '#ffffff',
+                    size = 12
+                )),
+    cells=dict(values=np.array(result_mat).T,
+               line = dict(width=0),
+               fill = dict(color=[['#EBF0F8', '#ffffff', '#EBF0F8', '#ffffff', '#EBF0F8']]),
+               align = 'center',
+               height = 40),
+    columnwidth=[0.3, 0.25, 0.3, 0.25, 0.5])
+layout = dict(
+    height=300,
+    margin=dict(
+        l=5,
+        r=5,
+        t=30,
+        b=0
+    )
+)
+data = [trace]
+andar_table = dict(data=data, layout=layout)
+
+py.iplot(andar_table, filename='anderson-darling-table')
+```
+
+Running the example calculates the statistic on the test data set and the critical values are tabulated.
+
+Critical values in a statistical test are a range of pre-defined significance boundaries at which the H0 can be failed to be rejected if the calculated statistic is less than the critical value. Rather than just a single p-value, the test returns a critical value for a range of different commonly used significance levels.
+
+We can interpret the results by failing to reject the null hypothesis that the data is normal if the calculated test statistic is less than the critical value at a chosen significance level.
+
+We can see that at each significance level, the test has found that the data follows a normal distribution
+
+
+### D'Agostino's $K^{2}$Test
+
+
+The [D'Agostino's $K^{2}$ test](https://en.wikipedia.org/wiki/D%27Agostino%27s_K-squared_test) calculates summary statistics from the data, namely kurtosis and skewness, to determine if the data distribution departs from the normal distribution, named for Ralph D’Agostino.
+
+ - Skew is a quantification of how much a distribution is pushed left or right, a measure of asymmetry in the distribution.
+ - Kurtosis quantifies how much of the distribution is in the tail. It is a simple and commonly used statistical test for normality.
+
+The D'Agostino's $K^{2}$ test is available via the [normaltest() SciPy function](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.normaltest.html) and returns the test statistic and the p-value.
+
+The complete example of the D'Agostino's $K^{2}$ test on the dataset is listed below.
+
+```python
+from scipy.stats import normaltest
+
+stat, p = normaltest(gauss_data)
+
+# interpret
+alpha = 0.05
+if p > alpha:
+    msg = 'Sample looks Gaussian (fail to reject H0)'
+else:
+    msg = 'Sample does not look Gaussian (reject H0)'
+
+result_mat = [
+    ['Length of the sample data', 'Test Statistic', 'p-value', 'Comments'],
+    [len(gauss_data), stat, p, msg]
+]
+
+normt_table = ff.create_table(result_mat)
+normt_table['data'][0].colorscale=[[0, '#2a3f5f'],[1, '#ffffff']]
+normt_table['layout']['height']=200
+normt_table['layout']['margin']['t']=50
+normt_table['layout']['margin']['b']=50
+
+py.iplot(normt_table, filename="D'Agostino-test-table")
+```
+
+Running the above example calculates the statistic and p-value.
+The p-value is interpreted against an alpha of 5% and finds that the test dataset does not significantly deviate from normal.
+
+<!-- #region -->
+#### Conclusion
+We have covered a few normality tests, but this is not all of the tests that exist. It is recommended to use all possible tests on your data, where appropriate.
+
+
+**_How to interpret the results?_**
+   - Your data may not be normal for many different reasons. Each test looks at the question of whether a sample was drawn from a Gaussian distribution from a slightly different perspective.
+   - Investigate why your data is not normal and perhaps use data preparation techniques to normalize the data.
+   - Start looking into the use of nonparametric statistical methods instead of the parametric methods.
+   - If some of the methods suggest that the sample is Gaussian and some not, then perhaps take this as an indication that your data is Gaussian-like.
+
+_This tutorial is inspired from ["A Gentle Introduction to Normality Tests"](https://machinelearningmastery.com/a-gentle-introduction-to-normality-tests-in-python/)_
+<!-- #endregion -->
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Normality-Test.ipynb', 'python/normality-test/', 'Normality Tests',
+    'Learn how to generate various normality tests using Python. ',
+    title = 'Normality Tests | Plotly',
+    has_thumbnail='false',
+    language='python',
+    # page_type='example_index', // note this is only if you want the tutorial to appear on the main page: plot.ly/python
+    display_as='statistics', order=2, ipynb='~notebook_demo/266')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/normalization.md plotly-7.1.0+dfsg1/doc/unconverted/python/normalization.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/normalization.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/normalization.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,166 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to normalize data by fitting to intervals on the real line
+      and dividing by a constant
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Normalization
+    order: 2
+    page_type: example_index
+    permalink: python/normalization/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.tools as tools
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Import Data
+
+
+To properly visualize our data and normalization, let us import a dataset of Apple Stock prices in 2014:
+
+```python
+apple_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2014_apple_stock.csv')
+df = apple_data[0:10]
+
+table = FF.create_table(df)
+py.iplot(table, filename='apple-data-sample')
+```
+
+#### Normalize by a Constant
+Normalize a dataset by dividing each data point by a constant, such as the standard deviation of the data.
+
+```python
+data = apple_data['AAPL_y']
+
+data_norm_by_std = [number/scipy.std(data) for number in data]
+
+trace1 = go.Histogram(
+    x=data,
+    opacity=0.75,
+    name='data'
+)
+
+trace2 = go.Histogram(
+    x=data_norm_by_std,
+    opacity=0.75,
+    name='normalized by std = ' + str(scipy.std(data)),
+)
+
+fig = tools.make_subplots(rows=2, cols=1)
+
+fig.append_trace(trace1, 1, 1)
+fig.append_trace(trace2, 2, 1)
+
+fig['layout'].update(height=600, width=800, title='Normalize by a Constant')
+py.iplot(fig, filename='apple-data-normalize-constant')
+```
+
+#### Normalize to [0, 1]
+Normalize a dataset by dividing each data point by the norm of the dataset.
+
+```python
+data_norm_to_0_1 = [number/scipy.linalg.norm(data) for number in data]
+
+trace1 = go.Histogram(
+    x=data,
+    opacity=0.75,
+    name='data',
+)
+
+trace2 = go.Histogram(
+    x=data_norm_to_0_1,
+    opacity=0.75,
+    name='normalized to [0,1]',
+)
+
+fig = tools.make_subplots(rows=2, cols=1)
+
+fig.append_trace(trace1, 1, 1)
+fig.append_trace(trace2, 2, 1)
+
+fig['layout'].update(height=600, width=800, title='Normalize to [0,1]')
+py.iplot(fig, filename='apple-data-normalize-0-1')
+```
+
+#### Normalizing to any Interval
+Normalize a dataset to an interval [a, b] where a, b are real numbers.
+
+```python
+a = 10
+b = 50
+data_norm_to_a_b = [(number - a)/(b - a) for number in data]
+
+trace1 = go.Histogram(
+    x=data,
+    opacity=0.75,
+    name='data',
+)
+
+trace2 = go.Histogram(
+    x=data_norm_to_a_b,
+    opacity=0.75,
+    name='normalized to [10,50]',
+)
+
+fig = tools.make_subplots(rows=2, cols=1)
+
+fig.append_trace(trace1, 1, 1)
+fig.append_trace(trace2, 2, 1)
+
+fig['layout'].update(height=600, width=800, title='Normalize to [10,50]')
+py.iplot(fig, filename='apple-data-normalize-a-b')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Normalization.ipynb', 'python/normalization/', 'Normalization | plotly',
+    'Learn how to normalize data by fitting to intervals on the real line and dividing by a constant',
+    title='Normalization in Python. | plotly',
+    name='Normalization',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=2,
+    ipynb= '~notebook_demo/103')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/numerical-differentiation.md plotly-7.1.0+dfsg1/doc/unconverted/python/numerical-differentiation.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/numerical-differentiation.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/numerical-differentiation.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,95 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to differentiate a sequence or list of values numerically
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Numerical Differentiation
+    order: 6
+    page_type: example_index
+    permalink: python/numerical-differentiation/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Differentiate the Sine Function
+How to use numerical differentiation to plot the derivative of the sine function $y = sin(x)$:
+
+```python
+x = np.linspace(0, 2*np.pi, 100)
+y = np.sin(x)
+
+dy = np.zeros(y.shape,np.float)
+dy[0:-1] = np.diff(y)/np.diff(x)
+dy[-1] = (y[-1] - y[-2])/(x[-1] - x[-2])
+
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='lines',
+    name='sin(x)'
+)
+
+trace2 = go.Scatter(
+    x=x,
+    y=dy,
+    mode='lines',
+    name='numerical derivative of sin(x)'
+)
+
+trace_data = [trace1, trace2]
+py.iplot(trace_data, filename='numerical-differentiation')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Numerical_Differentiation.ipynb', 'python/numerical-differentiation/', 'Numerical Differentiation | plotly',
+    'Learn how to differentiate a sequence or list of values numerically',
+    title='Numerical Differentiation in Python. | plotly',
+    name='Numerical Differentiation',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=6,
+    ipynb= '~notebook_demo/102')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/numerical-integration.md plotly-7.1.0+dfsg1/doc/unconverted/python/numerical-integration.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/numerical-integration.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/numerical-integration.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,99 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to integrate a sequence or list of values numerically
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Numerical Integration
+    order: 7
+    page_type: example_index
+    permalink: python/numerical-integration/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Integrate the Sine Function
+How to use numerical integration to find the area of $y = sin(x)$ between $0$ and $2\pi$.
+
+```python
+x = np.linspace(0, 2*np.pi, 100)
+y = np.sin(x)
+
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='lines',
+)
+
+# use numpy's built in trapezoid-rule integration tool
+dy = np.trapz(y, x)
+
+annotation = go.Annotation(
+    x=4.5,
+    y=1.25,
+    text='Numerical Integration of sin(x) is approximately %s' % (dy),
+    showarrow=False
+)
+
+layout = go.Layout(
+    annotations=[annotation]
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+
+py.iplot(fig, filename='1d-numerical-integration')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Numerical_Integration.ipynb', 'python/numerical-integration/', 'Numerical Integration | plotly',
+    'Learn how to integrate a sequence or list of values numerically',
+    title='Numerical Integration in Python. | plotly',
+    name='Numerical Integration',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=7,
+    ipynb= '~notebook_demo/101')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/outlier-test.md plotly-7.1.0+dfsg1/doc/unconverted/python/outlier-test.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/outlier-test.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/outlier-test.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,171 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to test for outliers in datasets using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Outlier Test
+    order: 6
+    page_type: example_index
+    permalink: python/outlier-test/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Import Data
+
+
+In order to start performing outlier tests, we will import some data of average wind speed sampled every 10 minutes, also used in the [Normality Test Tutorial](https://plot.ly/python/normality-test/).
+
+```python
+data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/wind_speed_laurel_nebraska.csv')
+df = data[0:10]
+
+table = FF.create_table(df)
+py.iplot(table, filename='wind-data-sample')
+```
+
+In any set of data, an `outlier` is a datum point that is not consistent with the other data points. If the data sampled from a particular distribution then with high probability, an outlier would not belong to that distribution. There are various tests used for testing if a particular point is an outlier, and this is done with the same null-hypothesis testing used in Normality Tests.
+
+
+#### Q Test
+
+
+Dixon's Q-Test is used to help determine whether there is evidence for a given point to be an outlier of a 1D dataset. It is assumed that the dataset is normally distributed. Since we have very strong evidence that our dataset above is normal from all our [normality tests](https://plot.ly/python/normality-test/), we can use the Q-Test here. As with the normality tests, we are assuming a significance level of $0.05$ and for simplicity, we are only considering the smallest datum point in the set.
+
+For more information on the choice of 0.05 for a significance level, check out [this page](http://www.investopedia.com/exam-guide/cfa-level-1/quantitative-methods/hypothesis-testing.asp).
+
+```python
+def q_test_for_smallest_point(dataset):
+    q_ref = 0.29  # the reference Q value for a significance level of 95% and 30 data points
+    q_stat = (dataset[1] - dataset[0])/(dataset[-1] - dataset[0])
+
+    if q_stat > q_ref:
+        print("Since our Q-statistic is %f and %f > %f, we have evidence that our "
+              "minimum point IS an outlier to the data.") %(q_stat, q_stat, q_ref)
+    else:
+        print("Since our Q-statistic is %f and %f < %f, we have evidence that our "
+              "minimum point is NOT an outlier to the data.") %(q_stat, q_stat, q_ref)
+```
+
+For our example, the Q-statistic is the ratio of the absolute distance between the smallest and closest number in the set, to the range of our dataset. This means:
+
+$$
+\begin{align*}
+Q = \frac{gap}{range}
+\end{align*}
+$$
+
+For our example, we will take 30 values from our dataset that contains the minimum value in full dataset, and apply the test on that sample. Then we'll convert our array to a list and sort it by increasing value.
+
+```python
+dataset = data[100:130]['10 Min Sampled Avg'].values.tolist()
+dataset.sort()
+q_test_for_smallest_point(dataset)
+```
+
+#### Visualize the Q Test
+
+
+To properly visualize our `critical height`, we can make a scatter plot with the dataset points in increasing order and draw a line for our critical height. This critical height is the threshold such that if our lowest point in the dataset was lower than it, than it would be considered an `outlier`. To derive this value, we just take
+
+$$
+\begin{align*}
+Q_{reference} = 0.29
+\end{align*}
+$$
+
+from a [look-up table](http://sebastianraschka.com/Articles/2014_dixon_test.html) and then plug it into our formula for $Q$ above, replacing our smallest value with an unknown $x$
+
+$$
+\begin{align*}
+0.29 = \frac{5.5 - x}{26.0}
+\end{align*}
+$$
+
+and therefore we get
+
+$$
+\begin{align*}
+x = -2.04
+\end{align*}
+$$
+
+```python
+x = [j for j in range(len(dataset))]
+y1 = dataset
+y2 = [-2.04 for j in range(len(dataset))]
+
+trace1 = go.Scatter(
+    x = x,
+    y = y1,
+    mode = 'lines+markers',
+    name='Dataset',
+    marker=dict(symbol=[100, 0])
+)
+
+trace2 = go.Scatter(
+    x = x,
+    y = y2,
+    mode = 'lines',
+    name='Critical Line'
+)
+
+data = [trace1, trace2]
+py.iplot(data, filename='q-test-scatter')
+```
+
+Since our smallest value (the hollowed out circle) is higher than the critical line, this validates the result of the test that the point is `NOT` an outlier.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Outlier-Test.ipynb', 'python/outlier-test/', 'Outlier Test | plotly',
+    'Learn how to test for outliers in datasets using Python.',
+    title='Outlier Test in Python. | plotly',
+    name='Outlier Test',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=6,
+    ipynb= '~notebook_demo/113')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/pdf-reports.md plotly-7.1.0+dfsg1/doc/unconverted/python/pdf-reports.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/pdf-reports.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/pdf-reports.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,194 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make PDF reports with Python and Plotly Graphs.
+    display_as: report_generation
+    language: python
+    layout: base
+    name: Python PDF Reports
+    order: 1
+    page_type: example_index
+    permalink: python/pdf-reports/
+    thumbnail: thumbnail/ipython_10_pdf_report.jpg
+---
+
+Since Plotly graphs can be embedded in HTML or exported as a static image, you can embed Plotly graphs in reports suited for print and for the web. This notebook is a primer on creating PDF reports with Python from HTML with Plotly graphs. This notebook uses:
+- [Plotly](https://plot.ly/python/) for interactive, web native graphs
+- [IPython Notebook](https://plot.ly/ipython-notebooks) to create this notebook, combining text, HTML, and Python code
+- [xhtml2pdf](https://github.com/chrisglass/xhtml2pdf/tree/master/doc) to convert HTML to PDF in Python
+
+Run `! pip install xhtml2pdf` in the Terminal to install the `xhtml2pdf` package.
+
+
+#### Create the HTML Template
+First choose the plots that you'd like to add to the report.
+
+```python
+graphs = ['https://plot.ly/~christopherp/308',
+          'https://plot.ly/~christopherp/306',
+          'https://plot.ly/~christopherp/300',
+          'https://plot.ly/~christopherp/296']
+```
+
+```python
+from IPython.display import display, HTML
+
+def report_block_template(report_type, graph_url, caption=''):
+    if report_type == 'interactive':
+        graph_block = '<iframe style="border: none;" src="{graph_url}.embed" width="100%" height="600px"></iframe>'
+    elif report_type == 'static':
+        graph_block = (''
+            '<a href="{graph_url}" target="_blank">' # Open the interactive graph when you click on the image
+                '<img style="height: 400px;" src="{graph_url}.png">'
+            '</a>')
+
+    report_block = ('' +
+        graph_block +
+        '{caption}' + # Optional caption to include below the graph
+        '<br>'      + # Line break
+        '<a href="{graph_url}" style="color: rgb(190,190,190); text-decoration: none; font-weight: 200;" target="_blank">'+
+            'Click to comment and see the interactive graph' + # Direct readers to Plotly for commenting, interactive graph
+        '</a>' +
+        '<br>' +
+        '<hr>') # horizontal line
+
+    return report_block.format(graph_url=graph_url, caption=caption)
+
+
+interactive_report = ''
+static_report = ''
+
+for graph_url in graphs:
+    _static_block = report_block_template('static', graph_url, caption='')
+    _interactive_block = report_block_template('interactive', graph_url, caption='')
+
+    static_report += _static_block
+    interactive_report += _interactive_block
+```
+
+#### Display the Interactive Report
+
+This version, suited for the web, contains the interactive version of the Plotly graphs, served from Plotly's server.
+
+```python
+display(HTML(interactive_report))
+```
+
+#### Display the Static Report
+This version is easy to convert to PDF. It contains the static version of the Plotly graphs, also served from Plotly's server.
+
+```python
+display(HTML(static_report))
+```
+
+```python
+import xhtml2pdf
+from xhtml2pdf import pisa
+```
+
+### Part 2 - Convert the HTML to PDF with `xhtml2pdf`
+
+```python
+from xhtml2pdf import pisa
+
+# Utility function
+def convert_html_to_pdf(source_html, output_filename):
+    # open output file for writing (truncated binary)
+    result_file = open(output_filename, "w+b")
+
+    # convert HTML to PDF
+    pisa_status = pisa.CreatePDF(
+            source_html,                # the HTML to convert
+            dest=result_file)           # file handle to recieve result
+
+    # close output file
+    result_file.close()                 # close output file
+
+    # return True on success and False on errors
+    return pisa_status.err
+
+convert_html_to_pdf(static_report, 'report.pdf')
+
+! open report.pdf
+```
+
+#### Generating Images *on the fly*
+
+
+The static report in the example above uses graphs that were already created in Plotly. Sometimes it's helpful to use graph images that are created on-the-fly. For example, if you're using [plotly.js](https://plot.ly/javascript-graphing-library) to create the web-reports you might not be saving the graphs to accounts on [plot.ly](https://plot.ly).
+
+To create static images of graphs on-the-fly, use the `plotly.plotly.image` class. This class generates images by making a request to the Plotly image server.
+
+Here's an alternative template that uses `py.image.get` to generate the images and template them into an HTML and PDF report.
+
+```python
+import plotly.plotly as py
+import base64
+
+width = 600
+height = 600
+
+template = (''
+    '<img style="width: {width}; height: {height}" src="data:image/png;base64,{image}">'
+    '{caption}'                              # Optional caption to include below the graph
+    '<br>'
+    '<hr>'
+'')
+
+# A collection of Plotly graphs
+figures = [
+    {'data': [{'x': [1,2,3], 'y': [3,1,6]}], 'layout': {'title': 'the first graph'}},
+    {'data': [{'x': [1,2,3], 'y': [3,7,6], 'type': 'bar'}], 'layout': {'title': 'the second graph'}}
+]
+
+# Generate their images using `py.image.get`
+images = [base64.b64encode(py.image.get(figure, width=width, height=height)).decode('utf-8') for figure in figures]
+
+report_html = ''
+for image in images:
+    _ = template
+    _ = _.format(image=image, caption='', width=width, height=height)
+    report_html += _
+
+display(HTML(report_html))
+convert_html_to_pdf(report_html, 'report-2.pdf')
+```
+
+### Learn more
+- Questions? <support@plot.ly>
+- [Getting started with Plotly and Python](https://plot.ly/python/getting-started)
+- [Updating Plotly graphs with Python and cron jobs](http://moderndata.plot.ly/update-plotly-charts-with-cron-jobs-and-python/)
+- [Using Plotly offline in IPython notebooks](https://plot.ly/python/offline)
+- [Generate HTML reports with Python, Pandas, and Plotly](http://moderndata.plot.ly/generate-html-reports-with-python-pandas-and-plotly/)
+- [Emailing Plotly graphs with Python](https://plot.ly/python/email-reports/)
+- [Edit this tutorial](https://github.com/plotly/documentation/tree/gh-pages)
+
+```python
+! pip install publisher --upgrade
+
+from IPython.display import HTML, display
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="https://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish('pdf-reports.ipynb', 'python/pdf-reports/', 'PDF Reports'
+                  'How to make PDF reports with Python and Plotly Graphs.',
+                  title = 'Python PDF Reports | plotly',
+                  name = 'PDF Reports',
+                  has_thumbnail='true', thumbnail='thumbnail/ipython_10_pdf_report.jpg',
+                  language='python', page_type='example_index',
+                  display_as='report_generation', order=1)
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/peak-fitting.md plotly-7.1.0+dfsg1/doc/unconverted/python/peak-fitting.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/peak-fitting.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/peak-fitting.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,200 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to fit to peaks in Python
+    display_as: peak-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Peak Fitting
+    order: 5
+    page_type: example_index
+    permalink: python/peak-fitting/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [PeakUtils](http://pythonhosted.org/PeakUtils/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+import peakutils
+
+from scipy import signal
+```
+
+#### Import Data
+Let us import some stock data for our fitting:
+
+```python
+stock_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/stockdata.csv')
+df = stock_data[0:15]
+
+table = FF.create_table(df)
+py.iplot(table, filename='stockdata-peak-fitting')
+```
+
+#### Original Plot
+Let us plot the `SBUX` column of the data and highlight a section we will fit to:
+
+```python
+left_endpt=1857
+right_endpt=1940
+
+original_trace = go.Scatter(
+    x = [j for j in range(len(stock_data['SBUX']))],
+    y = stock_data['SBUX'][0:left_endpt].tolist() + [None for k in range(right_endpt - left_endpt)] +
+        stock_data['SBUX'][right_endpt + 1:len(stock_data['SBUX'])].tolist(),
+    mode = 'lines',
+    name = 'Full Data',
+    marker = dict(color = 'rgb(160,200,250)')
+)
+
+highlighted_trace = go.Scatter(
+    x = [j for j in range(left_endpt, right_endpt)],
+    y = stock_data['SBUX'][left_endpt:right_endpt],
+    mode = 'lines',
+    name = 'Highlighted Section',
+    marker = dict(color = 'rgb(0,56,210)')
+)
+
+data = [original_trace, highlighted_trace,]
+py.iplot(data, filename='stock-data-SBUX')
+```
+
+#### Peak Detection
+Before we are able to apply `Peak Fitting` we need to detect the peaks in this waveform to properly specify a peak to fit to.
+
+```python
+x = [j for j in range(len(stock_data))][left_endpt:right_endpt]
+y = stock_data['SBUX'][left_endpt:right_endpt]
+y = y.tolist()
+
+cb = np.array(y)
+indices = peakutils.indexes(cb, thres=0.75, min_dist=0.1)
+
+trace = go.Scatter(
+    x=x,
+    y=y,
+    mode='lines',
+    marker=dict(
+        color='rgb(0,56,210)'
+    ),
+    name='Highlighted Plot'
+)
+
+trace2 = go.Scatter(
+    x=indices + left_endpt,
+    y=[y[j] for j in indices],
+    mode='markers',
+    marker=dict(
+        size=8,
+        color='rgb(255,0,0)',
+        symbol='cross'
+    ),
+    name='Detected Peaks'
+)
+
+data = [trace, trace2]
+py.iplot(data, filename='stock-data-with-peaks')
+```
+
+#### Peak Fitting
+Since we have detected all the local maximum points on the data, we can now isolate a few peaks and superimpose a fitted gaussian over one.
+
+```python
+def gaussian(x, mu, sig):
+    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
+
+first_index = indices[6]
+left_gauss_bound = 1894
+right_gauss_bound = 1910
+
+x_values_1 = np.asarray(x[left_gauss_bound-left_endpt:right_gauss_bound-left_endpt])
+y_values_1 = np.asarray(y[left_gauss_bound-left_endpt:right_gauss_bound-left_endpt])
+
+gaussian_params_1 = peakutils.gaussian_fit(x_values_1, y_values_1, center_only=False)
+gaussian_y_1 = [gaussian(x_dummy, gaussian_params_1[1], 1.5) for x_dummy in x_values_1]
+
+trace = go.Scatter(
+    x=x,
+    y=y,
+    mode='lines',
+    marker=dict(
+        color='rgb(0,56,210)'
+    ),
+    name='Highlighted Plot'
+)
+
+trace2 = go.Scatter(
+    x=indices + left_endpt,
+    y=[y[j] for j in indices],
+    mode='markers',
+    marker=dict(
+        size=8,
+        color='rgb(255,0,0)',
+        symbol='cross'
+    ),
+    name='Detected Peaks'
+)
+
+trace3 = go.Scatter(
+    #x=x_values_1,
+    x=[item_x + 1.5 for item_x in x_values_1],
+    y=[item_y + 38.2 for item_y in gaussian_y_1],
+    mode='lines',
+    marker=dict(
+        size=2,
+        color='rgb(200,0,250)',
+    ),
+    name='Gaussian Fit'
+)
+
+data = [trace, trace2, trace3]
+py.iplot(data, filename='stock-data-with-peaks-and-fit')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Peak-Fitting.ipynb', 'python/peak-fitting/', 'Peak Fitting | plotly',
+    'Learn how to fit to peaks in Python',
+    title='Peak Fitting in Python | plotly',
+    name='Peak Fitting',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='peak-analysis', order=5,
+    ipynb= '~notebook_demo/119')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/peak-integration.md plotly-7.1.0+dfsg1/doc/unconverted/python/peak-integration.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/peak-integration.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/peak-integration.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,159 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to integrate the area between peaks and baseline in Python.
+    display_as: peak-analysis
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Peak Integration
+    order: 4
+    page_type: example_index
+    permalink: python/peak-integration/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), [SciPy](https://www.scipy.org/) and [PeakUtils](http://pythonhosted.org/PeakUtils/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+
+import numpy as np
+import pandas as pd
+import scipy
+import peakutils
+```
+
+#### Tips
+Our method for finding the area under any peak is to find the area from the `data values` to the x-axis, the area from the `baseline` to the x-axis, and then take the difference between them. In particular, we want to find the areas of these functions defined on the x-axis interval $I$ under the peak.
+
+Let $T(x)$ be the function of the data, $B(x)$ the function of the baseline, and $Area$ the peak integration area between the baseline and the first peak. Since $T(x) \geq B(x)$ for all $x$, then we know that
+
+$$
+\begin{align}
+A = \int_{I} T(x)dx - \int_{I} B(x)dx
+\end{align}
+$$
+
+
+#### Import Data
+For our example below we will import some data on milk production by month:
+
+```python
+milk_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/monthly-milk-production-pounds.csv')
+time_series = milk_data['Monthly milk production (pounds per cow)']
+time_series = np.asarray(time_series)
+
+df = milk_data[0:15]
+
+table = ff.create_table(df)
+py.iplot(table, filename='milk-production-dataframe')
+```
+
+#### Area Under One Peak
+
+```python
+baseline_values = peakutils.baseline(time_series)
+
+x = [j for j in range(len(time_series))]
+time_series = time_series.tolist()
+baseline_values = baseline_values.tolist()
+
+rev_baseline_values = baseline_values[:11]
+rev_baseline_values.reverse()
+area_x = [0,1,2,3,4,5,6,7,8,9,10,11,10,9,8,7,6,5,4,3,2,1]
+area_y = time_series[:11] + rev_baseline_values
+
+trace = go.Scatter(
+    x=x,
+    y=time_series,
+    mode='lines',
+    marker=dict(
+        color='#B292EA',
+    ),
+    name='Original Plot'
+)
+
+trace2 = go.Scatter(
+    x=x,
+    y=baseline_values,
+    mode='markers',
+    marker=dict(
+        size=3,
+        color='#EB55BF',
+    ),
+    name='Bassline'
+)
+
+trace3 = go.Scatter(
+    x=area_x,
+    y=area_y,
+    mode='lines+markers',
+    marker=dict(
+        size=4,
+        color='rgb(255,0,0)',
+    ),
+    name='1st Peak Outline'
+)
+
+first_peak_x = [j for j in range(11)]
+area_under_first_peak = np.trapz(time_series[:11], first_peak_x) - np.trapz(baseline_values[:11], first_peak_x)
+area_under_first_peak
+
+annotation = go.Annotation(
+    x=80,
+    y=1000,
+    text='The peak integration for the first peak is approximately %s' % (area_under_first_peak),
+    showarrow=False
+)
+
+layout = go.Layout(
+    annotations=[annotation]
+)
+
+trace_data = [trace, trace2, trace3]
+fig = go.Figure(data=trace_data, layout=layout)
+py.iplot(fig, filename='milk-production-peak-integration')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Peak-Integration.ipynb', 'python/peak-integration/', 'Peak Integration | plotly',
+    'Learn how to integrate the area between peaks and bassline in Python.',
+    title='Peak Integration in Python | plotly',
+    name='Peak Integration',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='peak-analysis', order=4,
+    ipynb= '~notebook_demo/121')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/polygon-area.md plotly-7.1.0+dfsg1/doc/unconverted/python/polygon-area.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/polygon-area.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/polygon-area.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,189 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to find the area of any simple polygon
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Polygon Area
+    order: 8
+    page_type: example_index
+    permalink: python/polygon-area/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Area of a Square
+Sort the defined corners of a polygon, calculate the angles between each pair of points and calculate the area contained.
+
+```python
+def PolygonSort(corners):
+    n = len(corners)
+    cx = float(sum(x for x, y in corners)) / n
+    cy = float(sum(y for x, y in corners)) / n
+    cornersWithAngles = []
+    for x, y in corners:
+        an = (np.arctan2(y - cy, x - cx) + 2.0 * np.pi) % (2.0 * np.pi)
+        cornersWithAngles.append((x, y, an))
+    cornersWithAngles.sort(key = lambda tup: tup[2])
+    return map(lambda (x, y, an): (x, y), cornersWithAngles)
+
+def PolygonArea(corners):
+    n = len(corners)
+    area = 0.0
+    for i in range(n):
+        j = (i + 1) % n
+        area += corners[i][0] * corners[j][1]
+        area -= corners[j][0] * corners[i][1]
+    area = abs(area) / 2.0
+    return area
+
+corners = [(0, 0), (1, 1), (0, 1), (1, 0)]
+corners_sorted = PolygonSort(corners)
+area = PolygonArea(corners_sorted)
+
+x = [corner[0] for corner in corners_sorted]
+y = [corner[1] for corner in corners_sorted]
+
+annotation = go.Annotation(
+    x=1.5,
+    y=1.0,
+    text='The area of the polygon is approximately %s' % (area),
+    showarrow=False
+)
+
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    fill='tonexty',
+)
+
+layout = go.Layout(
+    annotations=[annotation],
+    xaxis=dict(
+        range=[-1, 2]
+    ),
+    yaxis=dict(
+        range=[-1, 2]
+    )
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+
+py.iplot(fig, filename='square-area')
+```
+
+#### Area of a Polygon
+
+```python
+def PolygonSort(corners):
+    n = len(corners)
+    cx = float(sum(x for x, y in corners)) / n
+    cy = float(sum(y for x, y in corners)) / n
+    cornersWithAngles = []
+    for x, y in corners:
+        an = (np.arctan2(y - cy, x - cx) + 2.0 * np.pi) % (2.0 * np.pi)
+        cornersWithAngles.append((x, y, an))
+    cornersWithAngles.sort(key = lambda tup: tup[2])
+    return map(lambda (x, y, an): (x, y), cornersWithAngles)
+
+def PolygonArea(corners):
+    n = len(corners)
+    area = 0.0
+    for i in range(n):
+        j = (i + 1) % n
+        area += corners[i][0] * corners[j][1]
+        area -= corners[j][0] * corners[i][1]
+    area = abs(area) / 2.0
+    return area
+
+corners = [(0, 0), (3, 0), (2, 10), (3, 4), (1, 5.5)]
+corners_sorted = PolygonSort(corners)
+area = PolygonArea(corners_sorted)
+
+x = [corner[0] for corner in corners_sorted]
+y = [corner[1] for corner in corners_sorted]
+
+annotation = go.Annotation(
+    x=5.5,
+    y=8.0,
+    text='The area of the polygon is approximately %s' % (area),
+    showarrow=False
+)
+
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    fill='tozeroy',
+)
+
+layout = go.Layout(
+    annotations=[annotation],
+    xaxis=dict(
+        range=[-1, 9]
+    ),
+    yaxis=dict(
+        range=[-1, 12]
+    )
+)
+
+trace_data = [trace1]
+fig = go.Figure(data=trace_data, layout=layout)
+
+py.iplot(fig, filename='polygon-area')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Polygon_Area.ipynb', 'python/polygon-area/', 'Polygon Area | plotly',
+    'Learn how to find the area of any simple polygon',
+    title='Polygon Area in Python. | plotly',
+    name='Polygon Area',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=8,
+    ipynb= '~notebook_demo/100')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/polynomial-fits.md plotly-7.1.0+dfsg1/doc/unconverted/python/polynomial-fits.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/polynomial-fits.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/polynomial-fits.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,127 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Create a polynomial fit / regression in Python and add a line of
+      best fit to your chart.
+    display_as: statistics
+    language: python
+    layout: base
+    name: Polynomial Fit
+    order: 12
+    page_type: example_index
+    permalink: python/polynomial-fits/
+    thumbnail: thumbnail/polynomial_fit.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Version Check
+Note: Polynomial fits are available in version <b>1.9.2+</b><br>
+Run  `pip install plotly --upgrade` to update your Plotly version
+
+```python
+import plotly
+plotly.__version__
+```
+
+### Polynomial Fit
+
+```python
+# Learn about API authentication here: https://plot.ly/python/getting-started
+# Find your api_key here: https://plot.ly/settings/api
+
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+# Scientific libraries
+import numpy as np
+
+points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
+
+# get x and y vectors
+x = points[:,0]
+y = points[:,1]
+
+# calculate polynomial
+z = np.polyfit(x, y, 3)
+f = np.poly1d(z)
+print f
+
+# calculate new x's and y's
+x_new = np.linspace(x[0], x[-1], 50)
+y_new = f(x_new)
+
+# Creating the dataset, and generating the plot
+trace1 = go.Scatter(
+                  x=x,
+                  y=y,
+                  mode='markers',
+                  marker=go.Marker(color='rgb(255, 127, 14)'),
+                  name='Data'
+                  )
+
+trace2 = go.Scatter(
+                  x=x_new,
+                  y=y_new,
+                  mode='lines',
+                  marker=go.Marker(color='rgb(31, 119, 180)'),
+                  name='Fit'
+                  )
+
+annotation = go.Annotation(
+                  x=6,
+                  y=-4.5,
+                  text='$\textbf{Fit}: 0.43X^3 - 0.56X^2 + 16.78X + 10.61$',
+                  showarrow=False
+                  )
+layout = go.Layout(
+                title='Polynomial Fit in Python',
+                plot_bgcolor='rgb(229, 229, 229)',
+                  xaxis=go.XAxis(zerolinecolor='rgb(255,255,255)', gridcolor='rgb(255,255,255)'),
+                  yaxis=go.YAxis(zerolinecolor='rgb(255,255,255)', gridcolor='rgb(255,255,255)'),
+                  annotations=[annotation]
+                )
+
+data = [trace1, trace2]
+fig = go.Figure(data=data, layout=layout)
+
+py.plot(fig, filename='Polynomial-Fit-in-python')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'Polynomial-fits.ipynb', 'python/polynomial-fits/', 'Polynomial Fit',
+    'Create a polynomial fit / regression in Python and add a line of best fit to your chart.',
+    title = 'Polynomial Fit',
+    name = 'Polynomial Fit',
+    has_thumbnail='true', thumbnail='thumbnail/polynomial_fit.jpg',
+    language='python', page_type='example_index',
+    display_as='statistics', order=12,
+    ipynb= '~notebook_demo/138')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/population-pyramid-charts.md plotly-7.1.0+dfsg1/doc/unconverted/python/population-pyramid-charts.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/population-pyramid-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/population-pyramid-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,198 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 3
+    language: python
+    name: python3
+  plotly:
+    description: How to make Population Pyramid Charts in Python with Plotly.
+    display_as: basic
+    language: python
+    layout: base
+    name: Population Pyramid Charts
+    order: 5.01
+    page_type: u-guide
+    permalink: python/population-pyramid-charts/
+    thumbnail: thumbnail/pyramid.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Basic Population Pyramid Chart
+If you're starting with binned data, use a `go.Bar` trace.
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+women_bins = np.array([-600, -623, -653, -650, -670, -578, -541, -411, -322, -230])
+men_bins = np.array([600, 623, 653, 650, 670, 578, 541, 360, 312, 170])
+
+y = list(range(0, 100, 10))
+
+layout = go.Layout(yaxis=go.layout.YAxis(title='Age'),
+                   xaxis=go.layout.XAxis(
+                       range=[-1200, 1200],
+                       tickvals=[-1000, -700, -300, 0, 300, 700, 1000],
+                       ticktext=[1000, 700, 300, 0, 300, 700, 1000],
+                       title='Number'),
+                   barmode='overlay',
+                   bargap=0.1)
+
+data = [go.Bar(y=y,
+               x=men_bins,
+               orientation='h',
+               name='Men',
+               hoverinfo='x',
+               marker=dict(color='powderblue')
+               ),
+        go.Bar(y=y,
+               x=women_bins,
+               orientation='h',
+               name='Women',
+               text=-1 * women_bins.astype('int'),
+               hoverinfo='text',
+               marker=dict(color='seagreen')
+               )]
+
+py.iplot(dict(data=data, layout=layout), filename='EXAMPLES/bar_pyramid')
+```
+
+#### Stacked Population Pyramid
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+women_bins = np.array([-600, -623, -653, -650, -670, -578, -541, -411, -322, -230])
+men_bins = np.array([600, 623, 653, 650, 670, 578, 541, 360, 312, 170])
+women_with_dogs_bins = np.array([-0, -3, -308, -281, -245, -231, -212, -132, -74, -76])
+men_with_dogs_bins = np.array([0, 1, 300, 273, 256, 211, 201, 170, 145, 43])
+
+y = list(range(0, 100, 10))
+
+layout = go.Layout(yaxis=go.layout.YAxis(title='Age'),
+                   xaxis=go.layout.XAxis(
+                       range=[-1200, 1200],
+                       tickvals=[-1000, -700, -300, 0, 300, 700, 1000],
+                       ticktext=[1000, 700, 300, 0, 300, 700, 1000],
+                       title='Number'),
+                   barmode='overlay',
+                   bargap=0.1)
+
+data = [go.Bar(y=y,
+               x=men_bins,
+               orientation='h',
+               name='Men',
+               hoverinfo='x',
+               marker=dict(color='powderblue')
+               ),
+        go.Bar(y=y,
+               x=women_bins,
+               orientation='h',
+               name='Women',
+               text=-1 * women_bins.astype('int'),
+               hoverinfo='text',
+               marker=dict(color='seagreen')
+               ),
+        go.Bar(y=y,
+               x=men_with_dogs_bins,
+               orientation='h',
+               hoverinfo='x',
+               showlegend=False,
+               opacity=0.5,
+               marker=dict(color='teal')
+               ),
+        go.Bar(y=y,
+               x=women_with_dogs_bins,
+               orientation='h',
+               text=-1 * women_bins.astype('int'),
+               hoverinfo='text',
+               showlegend=False,
+               opacity=0.5,
+               marker=dict(color='darkgreen')
+               )]
+
+py.iplot(dict(data=data, layout=layout), filename='EXAMPLES/stacked_bar_pyramid')
+```
+
+#### Population Pyramid with Binning
+If you want to quickly create a Population Pyramid from raw data, try `go.Histogram`.
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+
+layout = go.Layout(barmode='overlay',
+                   yaxis=go.layout.YAxis(range=[0, 90], title='Age'),
+                   xaxis=go.layout.XAxis(
+                       tickvals=[-150, -100, -50, 0, 50, 100, 150],
+                       ticktext=[150, 100, 50, 0, 50, 100, 150],
+                       title='Number'))
+
+data = [go.Histogram(
+    y=np.random.exponential(50, 1000),
+    orientation='h',
+    name='Men',
+    marker=dict(color='plum'),
+    hoverinfo='skip'
+),
+    go.Histogram(
+        y=np.random.exponential(55, 1000),
+        orientation='h',
+        name='Women',
+        marker=dict(color='purple'),
+        hoverinfo='skip',
+        x=-1 * np.ones(1000),
+        histfunc="sum"
+    )
+]
+
+py.iplot(dict(data=data, layout=layout), filename='EXAMPLES/histogram_pyramid')
+```
+
+### More Bar and Histogram Examples
+See more examples of [horizontal bar charts](https://plot.ly/python/horizontal-bar-charts/), [bar charts](https://plot.ly/python/bar-charts/) and [histograms](https://plot.ly/python/histograms/).
+
+
+### Reference
+See https://plot.ly/python/reference/#bar and https://plot.ly/python/reference/#histogram for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'pyramid-charts.ipynb', 'python/population-pyramid-charts/', 'Python Population Pyramid Charts | Plotly',
+    'How to make Population Pyramid Charts in Python with Plotly.',
+    title = 'Population Pyramid Charts | Plotly',
+    name = 'Population Pyramid Charts',
+    thumbnail='thumbnail/pyramid.jpg', language='python',
+    has_thumbnail='true', display_as='basic', order=5.01,
+    ipynb= '~notebook_demo/221')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/ribbon-plots.md plotly-7.1.0+dfsg1/doc/unconverted/python/ribbon-plots.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/ribbon-plots.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/ribbon-plots.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,95 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make ribbon plots in Python.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: Ribbon Plots
+    order: 4
+    permalink: python/ribbon-plots/
+    thumbnail: thumbnail/ribbon-plot.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Basic Ribbon Plot
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import urllib
+import numpy as np
+
+url = "https://raw.githubusercontent.com/plotly/datasets/master/spectral.csv"
+f = urllib.urlopen(url)
+spectra=np.loadtxt(f, delimiter=',')
+
+traces = []
+y_raw = spectra[:, 0] # wavelength
+sample_size = spectra.shape[1]-1
+for i in range(1, sample_size):
+    z_raw = spectra[:, i]
+    x = []
+    y = []
+    z = []
+    ci = int(255/sample_size*i) # ci = "color index"
+    for j in range(0, len(z_raw)):
+        z.append([z_raw[j], z_raw[j]])
+        y.append([y_raw[j], y_raw[j]])
+        x.append([i*2, i*2+1])
+    traces.append(dict(
+        z=z,
+        x=x,
+        y=y,
+        colorscale=[ [i, 'rgb(%d,%d,255)'%(ci, ci)] for i in np.arange(0,1.1,0.1) ],
+        showscale=False,
+        type='surface',
+    ))
+
+fig = { 'data':traces, 'layout':{'title':'Ribbon Plot'} }
+py.iplot(fig, filename='ribbon-plot-python')
+```
+
+#### Reference
+See https://plot.ly/python/reference/#surface for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'ribbon.ipynb', 'python/ribbon-plots/', 'Python Ribbon Plots | plotly',
+    'How to make ribbon plots in Python. ',
+    title = 'Python Ribbon Plots | plotly',
+    name = 'Ribbon Plots',
+    has_thumbnail='true', thumbnail='thumbnail/ribbon-plot.jpg',
+    language='python', page_type='example_index',
+    display_as='3d_charts', order=4,
+    ipynb= '~notebook_demo/64')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/salesforce.md plotly-7.1.0+dfsg1/doc/unconverted/python/salesforce.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/salesforce.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/salesforce.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,243 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Create interactive graphs with salesforce, IPython Notebooks and
+      Plotly
+    display_as: databases
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Plot Data from Salesforce
+    order: 4
+    page_type: example_index
+    permalink: python/salesforce/
+    redirect_from: ipython-notebooks/salesforce/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+#### Version Check
+Plotly's python package is updated frequently. Run `pip install plotly --upgrade` to use the latest version.
+
+```python
+import plotly
+plotly.__version__
+```
+
+#### Imports
+Salesforce reports are great for getting a handle on the numbers but [Plotly](https://plot.ly/) allows for interactivity not built into the Reports Module in Salesforce. Luckily Salesforce has amazing tools around exporting data, from excel and csv files to a robust and reliable API. With [Simple Salesforce](https://github.com/neworganizing/simple-salesforce), it's simple to make REST calls to the Salesforce API and get your hands on data to make real time, interactive charts.
+
+This notebook walks you through that basic process of getting something like that set up.
+First you'll need [Plotly](https://plot.ly/). Plotly is a free web-based platform for making graphs. You can keep graphs private, make them public, and run Plotly on your own servers (https://plot.ly/product/enterprise/). To get started visit https://plot.ly/python/getting-started/ . It's simple interface makes it easy to get interactive graphics done quickly.
+
+You'll also need a Salesforce Developer (or regular Salesforce Account). [You can get a salesforce developer account for free](https://developer.salesforce.com/signup) at their developer portal.
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import pandas as pd
+import numpy as np
+from collections import Counter
+import requests
+
+from simple_salesforce import Salesforce
+requests.packages.urllib3.disable_warnings() # this squashes insecure SSL warnings - DO NOT DO THIS ON PRODUCTION!
+```
+
+#### Log In to Salesforce
+I've stored my Salesforce login in a text file however you're free to store them as environmental variables. As a reminder, login details should NEVER be included in version control. Logging into Salesforce is as easy as entering in your username, password, and security token given to you by Salesforce. [Here's how to get your security token from Salesforce.](https://help.salesforce.com/apex/HTViewHelpDoc?id=user_security_token.htm)
+
+```python
+with open('salesforce_login.txt') as f:
+    username, password, token = [x.strip("
") for x in f.readlines()]
+sf = Salesforce(username=username, password=password, security_token=token)
+```
+
+#### SOQL Queries
+At this time we're going to write a simple SOQL query to get some basic information from some leads. We'll query the status and Owner from our leads. Further reference for the Salesforce API and writing SOQL queries: http://www.salesforce.com/us/developer/docs/soql_sosl/ SOQL is just Salesforce's version of SQL.
+
+```python
+leads_for_status = sf.query("SELECT Id, Status, Owner.Name FROM Lead")
+```
+
+Now we'll use a quick list comprehension to get just our statuses from those records (which are in an ordered dictionary format).
+
+```python
+statuses = [x['Status'] for x in leads_for_status["records"]]
+status_counts = Counter(statuses)
+```
+
+Now we can take advantage of Plotly's simple IPython Notebook interface to plot the graph in our notebook.
+
+```python
+data = [go.Bar(x=status_counts.keys(), y=status_counts.values())]
+py.iplot(data, filename='salesforce/lead-distributions')
+```
+
+While this graph gives us a great overview what status our leads are in, we'll likely want to know how each of the sales representatives are doing with their own leads. For that we'll need to get the owners using a similar list comprehension as we did above for the status.
+
+```python
+owners = [x['Owner']['Name'] for x in leads_for_status["records"]]
+```
+
+For simplicity in grouping the values, I'm going to plug them into a pandas DataFrame.
+
+```python
+df = pd.DataFrame({'Owners':owners, 'Status':statuses})
+```
+
+Now that we've got that we can do a simple lead comparison to compare how our Sales Reps are doing with their leads. We just create the bars for each lead owner.
+
+```python
+lead_comparison = []
+for name, vals in df.groupby('Owners'):
+    counts = vals.Status.value_counts()
+    lead_comparison.append(Bar(x=counts.index, y=counts.values, name=name))
+```
+
+```python
+py.iplot(lead_comparison, filename='salesforce/lead-owner-status-groupings')
+```
+
+What's great is that plotly makes it simple to compare across groups. However now that we've seen leads, it's worth it to look into Opportunities.
+
+```python
+opportunity_amounts = sf.query("SELECT Id, Probability, StageName, Amount, Owner.Name FROM Opportunity WHERE AMOUNT < 10000")
+```
+
+```python
+amounts = [x['Amount'] for x in opportunity_amounts['records']]
+owners = [x['Owner']['Name'] for x in opportunity_amounts['records']]
+```
+
+```python
+hist1 = go.Histogram(x=amounts)
+```
+
+```python
+py.iplot([hist1], filename='salesforce/opportunity-probability-histogram')
+```
+
+```python
+df2 = pd.DataFrame({'Amounts':amounts,'Owners':owners})
+```
+
+```python
+opportunity_comparisons = []
+for name, vals in df2.groupby('Owners'):
+    temp = Histogram(x=vals['Amounts'], opacity=0.75, name=name)
+    opportunity_comparisons.append(temp)
+```
+
+```python
+layout = go.Layout(
+    barmode='stack'
+)
+fig = go.Figure(data=opportunity_comparisons, layout=layout)
+```
+
+```python
+py.iplot(fig, filename='salesforce/opportunities-histogram')
+```
+
+By clicking on the "play with this data!" you can export, share, collaborate, and embed these plots. I've used it to share annotations about data and try out more colors. The GUI makes it easy for less technically oriented people to play with the data as well. Check out how the above was changed below or you can follow the link to make your own edits.
+
+```python
+from IPython.display import HTML
+HTML("""<div>
+    <a href="https://plot.ly/~bill_chambers/21/" target="_blank" title="Chuck vs Bill Sales Amounts" style="display: block; text-align: center;"><img src="https://plot.ly/~bill_chambers/21.png" alt="Chuck vs Bill Sales Amounts" style="max-width: 100%;width: 1368px;"  width="1368" onerror="this.onerror=null;this.src='https://plot.ly/404.png';" /></a>
+    <script data-plotly="bill_chambers:21" src="https://plot.ly/embed.js" async></script>
+</div>""")
+```
+
+After comparing those two representatives. It's always helpful to have that high level view of the sales pipeline. Below I'm querying all of our open opportunities with their Probabilities and close dates. This will help us make a forecasting graph of what's to come soon.
+
+```python
+large_opps = sf.query("SELECT Id, Name, Probability, ExpectedRevenue, StageName, Amount, CloseDate, Owner.Name FROM Opportunity WHERE StageName NOT IN ('Closed Lost', 'Closed Won') AND Amount > 5000")
+```
+
+```python
+large_opps_df = pd.DataFrame(large_opps['records'])
+large_opps_df['Owner'] = large_opps_df.Owner.apply(lambda x: x['Name']) # just extract owner name
+large_opps_df.drop('attributes', inplace=True, axis=1) # get rid of extra return data from Salesforce
+large_opps_df.head()
+```
+
+```python
+scatters = []
+for name, temp_df in large_opps_df.groupby('Owner'):
+    hover_text = temp_df.Name + "<br>Close Probability: " + temp_df.Probability.map(str) + "<br>Stage:" + temp_df.StageName
+    scatters.append(
+        go.Scatter(
+            x=temp_df.CloseDate,
+            y=temp_df.Amount,
+            mode='markers',
+            name=name,
+            text=hover_text,
+            marker=dict(
+                size=(temp_df.Probability / 2) # helps keep the bubbles of manageable size
+            )
+        )
+    )
+```
+
+```python
+data = scatters
+layout = go.Layout(
+    title='Open Large Deals',
+    xaxis=dict(
+        title='Close Date'
+    ),
+    yaxis=dict(
+        title='Deal Amount',
+        showgrid=False
+    )
+)
+fig = go.Figure(data=data, layout=layout)
+py.iplot(fig, filename='salesforce/open-large-deals-scatter')
+```
+
+Plotly makes it easy to create many different kinds of charts. The above graph shows the deals in the pipeline over the coming months. The larger the bubble, the more likely it is to close. Hover over the bubbles to see that data. This graph is ideal for a sales manager to see how each of his sales reps are doing over the coming months.
+
+One of the benefits of Plotly is the availability of features.
+
+#### References
+
+- [Live update Plotly graphs in Python with cron jobs](http://moderndata.plot.ly/update-plotly-charts-with-cron-jobs-and-python/)
+- [Graph mysql data with Plotly and Python](http://moderndata.plot.ly/graph-data-from-mysql-database-in-python/)
+- [More on creating web-based visualizations in Python with Plotly](https://plot.ly/python/)
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'salesforce.ipynb', 'python/salesforce/', 'Plot Data from Salesforce',
+    'Create interactive graphs with salesforce, IPython Notebooks and Plotly',
+    title='Interactive Salesforce Graphing | Plotly',
+    redirect_from='ipython-notebooks/salesforce/', has_thumbnail='false', language='python', page_type='example_index',
+    display_as='databases', order=4, ipynb= '~notebook_demo/1')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/simple-mathematics-operations.md plotly-7.1.0+dfsg1/doc/unconverted/python/simple-mathematics-operations.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/simple-mathematics-operations.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/simple-mathematics-operations.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,170 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform simple mathematical operations on dataframes
+      such as scaling, adding, and subtracting
+    display_as: mathematics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Simple Mathematics Operations
+    order: 1
+    page_type: example_index
+    permalink: python/simple-mathematics-operations/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Import Data
+Let us import a timeseries dataset to perform mathematical operations on:
+
+```python
+data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/timeseries.csv')
+
+table = FF.create_table(data)
+py.iplot(table, filename='timeseries-data-table')
+```
+
+#### Scale a Dataset
+You can modify a dataset by scaling each number by a constant.
+
+```python
+x = data['Date']
+y = data['A']
+y2 = [2.*k for k in y]
+
+trace1 = go.Scatter(
+    x=x,
+    y=y,
+    mode='markers',
+    name='Data',
+    marker=dict(
+        size=12
+    )
+)
+
+trace2 = go.Scatter(
+    x=x,
+    y=y2,
+    mode='markers',
+    name='Scaled by 2',
+    marker=dict(
+        size=12,
+        symbol='x'
+    )
+)
+
+trace_data = [trace1, trace2]
+py.iplot(trace_data, filename='scale-a-dataset')
+```
+
+#### Subtract Two Columns
+
+```python
+trace1 = go.Scatter(
+    x=data['Date'],
+    y=data['A'],
+    mode='markers',
+    name='Column A',
+    marker=dict(
+        size=12
+    )
+)
+
+trace2 = go.Scatter(
+    x=data['Date'],
+    y=data['D'],
+    mode='markers',
+    name='Column D',
+    marker=dict(
+        size=12
+    )
+)
+
+trace3 = go.Scatter(
+    x=data['Date'],
+    y=data['D'] - data['A'],
+    mode='markers',
+    name='Column D - Column A',
+    marker=dict(
+        size=12,
+        symbol='square-open'
+    )
+)
+
+trace_data1 = [trace1, trace2, trace3]
+py.iplot(trace_data1, filename='subtract-two-dataframe-columns')
+```
+
+#### Modify DataFrame Entries
+Use arithmetic operations including addition, subtraction, multiplication and division to change the values in a DataFrame column:
+
+```python
+dataframe = pd.DataFrame([[1, 2],
+                          [3, 4],
+                          [5, 6],
+                          [7, 8]],
+                         columns=['A', 'B'])
+
+table = FF.create_table(dataframe)
+py.iplot(table, filename='math-operations-dataframe')
+```
+
+```python
+dataframe['A'][0] = 120
+dataframe['B'][3] = -2*dataframe['B'][3]
+
+table = FF.create_table(dataframe)
+py.iplot(table, filename='math-operations-dataframe-changed')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python_Simple_Mathematics_Operations.ipynb', 'python/simple-mathematics-operations/', 'Simple Mathematics Operations | plotly',
+    'Learn how to perform simple mathematical operations on dataframes such as scaling, adding, and subtracting',
+    title='Simple Mathematics Operations in Python. | plotly',
+    name='Simple Mathematics Operations',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='mathematics', order=1,
+    ipynb= '~notebook_demo/99')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/statistics-charts.md plotly-7.1.0+dfsg1/doc/unconverted/python/statistics-charts.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/statistics-charts.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/statistics-charts.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,129 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to plot statistical data with various charts using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Statistics Charts
+    order: 5
+    page_type: example_index
+    permalink: python/statistics-charts/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Import Data
+
+
+For this example we will use some real data of wind speeds sampled every 10 minutes.
+
+```python
+wind_data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/wind_speed_laurel_nebraska.csv')
+df = wind_data[0:10]
+
+table = FF.create_table(df)
+py.iplot(table, filename='wind-data-sample')
+```
+
+#### Histogram
+
+
+We will be producing a `histogram` with the "10 Min Std Dev" column of our data. For more info on the histogram charts, you can checkout the [documentation page](https://plot.ly/python/histograms/).
+
+```python
+data = [
+    go.Histogram(
+        x=wind_data['10 Min Std Dev'],
+        histnorm='probability'
+    )
+]
+py.iplot(data, filename='wind-data-histogram')
+```
+
+#### Box Plots
+
+
+We will be producing a `box plot` with the "10 Min Std Dev" column of our data again. For more info on the histogram charts, you can checkout the [documentation page](https://plot.ly/python/box-plots/).
+
+```python
+data = [
+    go.Box(
+        y=wind_data['10 Min Std Dev'],
+    )
+]
+
+py.iplot(data, filename='wind-data-box-plot')
+```
+
+#### Scatterplot Matrix (SPLOM)
+
+
+We will be producing a scatterplot matrix chart, also known as a SPLOM chart, with all the columns of our data. For more info on SPLOM traces, you can checkout the [documentation page](https://plot.ly/python/splom/).
+
+```python
+fig = go.Figure(data=go.Splom(
+    dimensions=[
+        dict(label=col, values=wind_data[col]) for col in wind_data.columns
+    ]
+))
+
+fig.update_layout(
+    title='Wind Data - Scatterplot Matrix',
+    height=1000,
+    width=1000,
+)
+py.iplot(fig, filename='wind-data-scatterplot-matrix')
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-Statistics-Charts.ipynb', 'python/statistics-charts/', 'Statistics Charts | plotly',
+    'Learn how to plot statistical data with various charts using Python.',
+    title='Statistics Charts in Python. | plotly',
+    name='Statistics Charts',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=5,
+    ipynb= '~notebook_demo/116')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/streaming-tutorial.md plotly-7.1.0+dfsg1/doc/unconverted/python/streaming-tutorial.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/streaming-tutorial.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/streaming-tutorial.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,191 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Plotly Streaming
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: Plotly Streaming
+    page_type: u-guide
+    permalink: python/streaming-tutorial/
+    redirect_from: python/streaming-line-tutorial/
+    thumbnail: /images/static-image
+---
+
+### Streaming Support
+**Streaming is no longer supported in Chart Studio Cloud.<br>Streaming is still available as part of [Chart Studio Enterprise](https://plot.ly/products/on-premise/). Additionally, [Dash](https://plot.ly/products/dash/) supports streaming, as demonstrated by the [Dash Wind Streaming example](https://github.com/plotly/dash-wind-streaming).**
+
+
+### Getting Started with Streaming
+
+```python
+import numpy as np
+import plotly.plotly as py
+import plotly.tools as tls
+import plotly.graph_objs as go
+```
+
+Before you start streaming, you're going to need some [stream tokens](https://plot.ly/settings/api). You will need **one unique stream token for every `trace object` ** you wish to stream to. Thus if you have two traces that you want to plot and stream, you're going to require two unique stream tokens. Notice that more tokens can be added via the settings section of your Plotly profile: https://plot.ly/settings/api
+
+
+![](https://cloud.githubusercontent.com/assets/12302455/15023505/bb729d8c-11fe-11e6-87a6-332ff9dfad2d.png)
+
+
+Now in the same way that you set your credentials, as shown in [Getting Started](https://plot.ly/python/getting-started/), you can add stream tokens to your credentials file.
+
+```python
+stream_ids = tls.get_credentials_file()['stream_ids']
+print stream_ids
+```
+
+You'll see that `stream_ids` will contain a list of the stream tokens we added to the credentials file.
+
+
+#### An Example to Get You Started
+
+
+Now that you have some stream tokens to play with, we're going to go over how we're going to put these into action.
+There are two main objects that will be created and used for streaming:
+- Stream Id Object
+- Stream link Object
+
+We're going to look at these objects sequentially as we work through our first streaming example. For our first example, we're going to be streaming random data to a single scatter trace, and get something that behaves like the following:
+
+![](https://cloud.githubusercontent.com/assets/12302455/14826664/e7d59c56-0bac-11e6-953e-e215410f3f03.png)
+
+
+##### Stream Id Object
+
+
+The `Stream Id Object` comes bundled in the `graph_objs` package. We can then call help to see the description of this object:
+
+```python
+help(go.Stream)
+```
+
+As we can see, the `Stream Id Object` is a dictionary-like object that takes two parameters, and has all the methods that are associated with dictionaries.
+We will need one of these objects for each of trace that we wish to stream data to.
+We'll now create a single stream token for our streaming example, which will include one scatter trace.
+
+```python
+# Get stream id from stream id list
+stream_id = stream_ids[0]
+
+# Make instance of stream id object
+stream_1 = go.Stream(
+    token=stream_id,  # link stream id to 'token' key
+    maxpoints=80      # keep a max of 80 pts on screen
+)
+```
+
+The `'maxpoints'` key sets the maximum number of points to keep on the plotting surface at any given time.
+More over, if you want to avoid the use of these `Stream Id Objects`, you can just create a dictionary with at least the token parameter defined, for example:
+
+```python
+stream_1 = dict(token=stream_id, maxpoints=60)
+```
+
+Now that we have our `Stream Id Object` ready to go, we can set up our plot. We do this in the same way that we would any other plot, the only thing is that we now have to set the stream parameter in our trace object.
+
+```python
+# Initialize trace of streaming plot by embedding the unique stream_id
+trace1 = go.Scatter(
+    x=[],
+    y=[],
+    mode='lines+markers',
+    stream=stream_1         # (!) embed stream id, 1 per trace
+)
+
+data = go.Data([trace1])
+
+# Add title to layout object
+layout = go.Layout(title='Time Series')
+
+# Make a figure object
+fig = go.Figure(data=data, layout=layout)
+```
+
+#### Stream Link Object
+
+
+The Stream Link Object is what will be used to communicate with the Plotly server in order to update the data contained in your trace objects. This object is in the `plotly.plotly` object, an can be reference with `py.Stream`
+
+```python
+help(py.Stream)  # run help() of the Stream link object
+```
+
+You're going to need to set up one of these stream link objects for each trace you wish to stream data to.
+<br>Below we'll set one up for the scatter trace we have in our plot.
+
+```python
+# We will provide the stream link object the same token that's associated with the trace we wish to stream to
+s = py.Stream(stream_id)
+
+# We then open a connection
+s.open()
+```
+
+We can now use the Stream Link object `s` in order to `stream` data to our plot.
+<br>As an example, we will send a time stream and some random numbers:
+
+```python
+# (*) Import module keep track and format current time
+import datetime
+import time
+
+i = 0    # a counter
+k = 5    # some shape parameter
+
+# Delay start of stream by 5 sec (time to switch tabs)
+time.sleep(5)
+
+while True:
+
+    # Current time on x-axis, random numbers on y-axis
+    x = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
+    y = (np.cos(k*i/50.)*np.cos(i/50.)+np.random.randn(1))[0]
+
+    # Send data to your plot
+    s.write(dict(x=x, y=y))
+
+    #     Write numbers to stream to append current data on plot,
+    #     write lists to overwrite existing data on plot
+
+    time.sleep(1)  # plot a point every second
+# Close the stream when done plotting
+s.close()
+```
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'python_streaming', 'python/streaming-tutorial/', 'Plotly Streaming',
+    'Plotly Streaming', name='Plotly Streaming',
+    title = 'Plotly Streaming',
+    redirect_from = 'python/streaming-line-tutorial/',
+    language='python',
+    layout='user-guide',
+    ipynb= '~notebook_demo/80')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/surface-triangulation.md plotly-7.1.0+dfsg1/doc/unconverted/python/surface-triangulation.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/surface-triangulation.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/surface-triangulation.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,369 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to make Tri-Surf plots in Python with Plotly.
+    display_as: 3d_charts
+    language: python
+    layout: base
+    name: Surface Triangulation
+    order: 11
+    page_type: u-guide
+    permalink: python/surface-triangulation/
+    thumbnail: thumbnail/trisurf.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Defining and plotting triangulated surfaces
+#### with Plotly `Mesh3d`
+
+
+A triangulation of a compact surface is a finite collection of triangles that cover the surface in  such a way that every point on the surface is in a triangle,  and  the intersection of any two triangles is either void, a common edge or a common vertex. A triangulated surface is called tri-surface.
+
+
+
+The triangulation of a surface defined as the graph of a continuous function, $z=f(x,y), (x,y)\in D\subset\mathbb{R}^2$ or in a parametric form:
+$$x=x(u,v), y=y(u,v), z=z(u,v), (u,v)\in U\subset\mathbb{R}^2,$$
+is the image through $f$,respectively through the parameterization, of the Delaunay triangulation or an user defined triangulation of the planar domain $D$, respectively $U$.
+
+The Delaunay triangulation of a planar region is defined and illustrated in a Python Plotly tutorial posted [here](https://plot.ly/python/alpha-shapes/).
+
+If the planar region $D$  ($U$) is rectangular, then one defines a meshgrid on it, and the points
+of the grid are the input  points for the `scipy.spatial.Delaunay` function that defines the planar triangulation of $D$, respectively $U$.
+
+
+
+### Triangulation of the Moebius band ###
+
+
+The Moebius band is parameterized by:
+
+$$\begin{align*}
+x(u,v)&=(1+0.5 v\cos(u/2))\cos(u)\\
+y(u,v)&=(1+0.5 v\cos(u/2))\sin(u)\quad\quad u\in[0,2\pi],\: v\in[-1,1]\\
+z(u,v)&=0.5 v\sin(u/2)
+\end{align*}
+$$
+
+
+Define a meshgrid on the rectangle $U=[0,2\pi]\times[-1,1]$:
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+import matplotlib.cm as cm
+from scipy.spatial import Delaunay
+
+u=np.linspace(0,2*np.pi, 24)
+v=np.linspace(-1,1, 8)
+u,v=np.meshgrid(u,v)
+u=u.flatten()
+v=v.flatten()
+
+#evaluate the parameterization at the flattened u and v
+tp=1+0.5*v*np.cos(u/2.)
+x=tp*np.cos(u)
+y=tp*np.sin(u)
+z=0.5*v*np.sin(u/2.)
+
+#define 2D points, as input data for the Delaunay triangulation of U
+points2D=np.vstack([u,v]).T
+tri = Delaunay(points2D)#triangulate the rectangle U
+```
+
+`tri.simplices` is a `np.array` of integers, of shape (`ntri`,3), where `ntri` is the number of triangles generated  by `scipy.spatial.Delaunay`.
+Each row in this array contains  three indices,  i, j, k, such that points2D[i,:], points2D[j,:], points2D[k,:]  are vertices of a triangle in the Delaunay triangularization of the rectangle $U$.
+
+
+```python
+print tri.simplices.shape, '
', tri.simplices[0]
+```
+
+The images  of the `points2D` through the surface parameterization are 3D points. The same simplices define the triangles on the surface.
+
+
+Setting   a combination of  keys in `Mesh3d` leads to generating and plotting of a tri-surface, in the same way as `plot_trisurf` in matplotlib  or `trisurf` in Matlab does.
+
+We note that `Mesh3d` with different combination of keys can generate  [alpha-shapes](https://plot.ly/python/alpha-shapes/).
+
+
+In order to plot a tri-surface, we choose a colormap, and associate to each triangle on the surface,  the  color in colormap, corresponding to  the normalized mean value of z-coordinates of the triangle vertices.
+
+
+Define a function that maps a mean z-value to a matplotlib color, converted to a Plotly color:
+
+```python
+def map_z2color(zval, colormap, vmin, vmax):
+    #map the normalized value zval to a corresponding color in the colormap
+
+    if vmin>vmax:
+        raise ValueError('incorrect relation between vmin and vmax')
+    t=(zval-vmin)/float((vmax-vmin))#normalize val
+    R, G, B, alpha=colormap(t)
+    return 'rgb('+'{:d}'.format(int(R*255+0.5))+','+'{:d}'.format(int(G*255+0.5))+\
+           ','+'{:d}'.format(int(B*255+0.5))+')'
+
+```
+
+To plot the triangles on a surface,  we set in Plotly `Mesh3d` the lists of x, y, respectively z- coordinates of the vertices, and the lists of indices, i, j, k, for x, y, z coordinates of  all  vertices:
+
+```python
+def tri_indices(simplices):
+    #simplices is a numpy array defining the simplices of the triangularization
+    #returns the lists of indices i, j, k
+
+    return ([triplet[c] for triplet in simplices] for c in range(3))
+
+def plotly_trisurf(x, y, z, simplices, colormap=cm.RdBu, plot_edges=None):
+    #x, y, z are lists of coordinates of the triangle vertices
+    #simplices are the simplices that define the triangularization;
+    #simplices  is a numpy array of shape (no_triangles, 3)
+    #insert here the  type check for input data
+
+    points3D=np.vstack((x,y,z)).T
+    tri_vertices=map(lambda index: points3D[index], simplices)# vertices of the surface triangles
+    zmean=[np.mean(tri[:,2]) for tri in tri_vertices ]# mean values of z-coordinates of
+                                                      #triangle vertices
+    min_zmean=np.min(zmean)
+    max_zmean=np.max(zmean)
+    facecolor=[map_z2color(zz,  colormap, min_zmean, max_zmean) for zz in zmean]
+    I,J,K=tri_indices(simplices)
+
+    triangles=go.Mesh3d(x=x,
+                     y=y,
+                     z=z,
+                     facecolor=facecolor,
+                     i=I,
+                     j=J,
+                     k=K,
+                     name=''
+                    )
+
+    if plot_edges is None:# the triangle sides are not plotted
+        return [triangles]
+    else:
+        #define the lists Xe, Ye, Ze, of x, y, resp z coordinates of edge end points for each triangle
+        #None separates data corresponding to two consecutive triangles
+        lists_coord=[[[T[k%3][c] for k in range(4)]+[ None]   for T in tri_vertices]  for c in range(3)]
+        Xe, Ye, Ze=[reduce(lambda x,y: x+y, lists_coord[k]) for k in range(3)]
+
+        #define the lines to be plotted
+        lines=go.Scatter3d(x=Xe,
+                        y=Ye,
+                        z=Ze,
+                        mode='lines',
+                        line=dict(color= 'rgb(50,50,50)', width=1.5)
+               )
+        return [triangles, lines]
+```
+
+Call this  function for data associated to Moebius band:
+
+```python
+data1=plotly_trisurf(x,y,z, tri.simplices, colormap=cm.RdBu, plot_edges=True)
+```
+
+Set the  layout of the plot:
+
+```python
+axis = dict(
+showbackground=True,
+backgroundcolor="rgb(230, 230,230)",
+gridcolor="rgb(255, 255, 255)",
+zerolinecolor="rgb(255, 255, 255)",
+    )
+
+layout = go.Layout(
+         title='Moebius band triangulation',
+         width=800,
+         height=800,
+         scene=dict(
+         xaxis=dict(axis),
+         yaxis=dict(axis),
+         zaxis=dict(axis),
+        aspectratio=dict(
+            x=1,
+            y=1,
+            z=0.5
+        ),
+        )
+        )
+
+fig1 = go.Figure(data=data1, layout=layout)
+
+py.iplot(fig1, filename='Moebius-band-trisurf')
+```
+
+### Triangularization of the surface $z=\sin(-xy)$, defined over a disk ###
+
+
+We consider polar coordinates on the disk, $D(0, 1)$, centered at origin and of radius 1, and define
+a meshgrid on the set of points $(r, \theta)$, with $r\in[0,1]$ and $\theta\in[0,2\pi]$:
+
+```python
+n=12 # number of radii
+h=1.0/(n-1)
+r = np.linspace(h, 1.0, n)
+theta= np.linspace(0, 2*np.pi, 36)
+
+r,theta=np.meshgrid(r,theta)
+r=r.flatten()
+theta=theta.flatten()
+
+#Convert polar coordinates to cartesian coordinates (x,y)
+x=r*np.cos(theta)
+y=r*np.sin(theta)
+x=np.append(x, 0)#  a trick to include the center of the disk in the set of points. It was avoided
+                 # initially when we defined r=np.linspace(h, 1.0, n)
+y=np.append(y,0)
+z = np.sin(-x*y)
+
+points2D=np.vstack([x,y]).T
+tri=Delaunay(points2D)
+```
+
+Plot the  surface with a modified layout:
+
+```python
+data2=plotly_trisurf(x,y,z, tri.simplices, colormap=cm.cubehelix, plot_edges=None)
+fig2 = go.Figure(data=data2, layout=layout)
+fig2['layout'].update(dict(title='Triangulated surface',
+                          scene=dict(camera=dict(eye=dict(x=1.75,
+                                                          y=-0.7,
+                                                          z= 0.75)
+                                                )
+                                    )))
+
+py.iplot(fig2, filename='trisurf-cubehx')
+```
+
+This example is also given as a demo for matplotlib [`plot_trisurf`](http://matplotlib.org/examples/mplot3d/trisurf3d_demo.html).
+
+
+### Plotting tri-surfaces from data stored in  ply-files ###
+
+
+A PLY (Polygon File Format or Stanford Triangle Format) format is a format for storing graphical objects
+that are represented by  a triangulation of an object, resulted usually from scanning that object. A Ply file contains the coordinates of vertices, the codes for faces (triangles) and other elements, as well as the color for faces or the normal direction to faces.
+
+In the following we show how we can read a ply file via the Python package, `plyfile`. This package can be installed with `pip`.
+
+We choose a ply file from a list  provided [here](http://people.sc.fsu.edu/~jburkardt/data/ply/ply.html).
+
+```python
+!pip install plyfile
+from plyfile import PlyData, PlyElement
+
+import urllib2
+req = urllib2.Request('http://people.sc.fsu.edu/~jburkardt/data/ply/chopper.ply')
+opener = urllib2.build_opener()
+f = opener.open(req)
+plydata = PlyData.read(f)
+```
+
+Read the file header:
+
+```python
+for element in plydata.elements:
+    print element
+
+nr_points=plydata.elements[0].count
+nr_faces=plydata.elements[1].count
+```
+
+Read the vertex coordinates:
+
+```python
+points=np.array([plydata['vertex'][k] for k in range(nr_points)])
+points[0]
+
+x,y,z=zip(*points)
+
+faces=[plydata['face'][k][0] for k in range(nr_faces)]
+faces[0]
+```
+
+Now we can get data for a Plotly plot of the graphical object read from the ply file:
+
+```python
+data3=plotly_trisurf(x,y,z, faces, colormap=cm.RdBu, plot_edges=None)
+
+title="Trisurf from a PLY file<br>"+\
+                "Data Source:<a href='http://people.sc.fsu.edu/~jburkardt/data/ply/airplane.ply'> [1]</a>"
+
+noaxis=dict(showbackground=False,
+            showline=False,
+            zeroline=False,
+            showgrid=False,
+            showticklabels=False,
+            title=''
+          )
+
+fig3 = go.Figure(data=data3, layout=layout)
+fig3['layout'].update(dict(title=title,
+                           width=1000,
+                           height=1000,
+                           scene=dict(xaxis=noaxis,
+                                      yaxis=noaxis,
+                                      zaxis=noaxis,
+                                      aspectratio=dict(x=1, y=1, z=0.4),
+                                      camera=dict(eye=dict(x=1.25, y=1.25, z= 1.25)
+                                     )
+                           )
+                     ))
+
+py.iplot(fig3, filename='Chopper-Ply-cls')
+```
+
+This a version of the same object plotted along with  triangle edges:
+
+```python
+from IPython.display import HTML
+HTML('<iframe src=https://plot.ly/~empet/13734/trisurf-from-a-ply-file-data-source-1/ \
+     width=800 height=800></iframe>')
+
+```
+
+#### Reference
+See https://plot.ly/python/reference/ for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'triangulation.ipynb', 'python/surface-triangulation/', 'Surface Triangulation',
+    'How to make Tri-Surf plots in Python with Plotly.',
+    title = 'Python Surface Triangulation | plotly',
+    name = 'Surface Triangulation',
+    has_thumbnail='true', thumbnail='thumbnail/trisurf.jpg',
+    language='python',
+    display_as='3d_charts', order=11,
+    ipynb= '~notebook_demo/71')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/t-test.md plotly-7.1.0+dfsg1/doc/unconverted/python/t-test.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/t-test.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/t-test.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,157 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Learn how to perform a one sample and two sample t-test using Python.
+    display_as: statistics
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: T-Test
+    order: 7
+    page_type: example_index
+    permalink: python/t-test/
+    thumbnail: /images/static-image
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Imports
+The tutorial below imports [NumPy](http://www.numpy.org/), [Pandas](https://plot.ly/pandas/intro-to-pandas-tutorial/), and [SciPy](https://www.scipy.org/).
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+from plotly.tools import FigureFactory as FF
+
+import numpy as np
+import pandas as pd
+import scipy
+```
+
+#### Generate Data
+
+
+Let us generate some random data from the `Normal Distribution`. We will sample 50 points from a normal distribution with mean $\mu = 0$ and variance $\sigma^2 = 1$ and from another with mean $\mu = 2$ and variance $\sigma^2 = 1$.
+
+```python
+data1 = np.random.normal(0, 1, size=50)
+data2 = np.random.normal(2, 1, size=50)
+```
+
+The two normal probability distribution functions (p.d.f) stacked on top of each other look like this:
+
+```python
+x = np.linspace(-4, 4, 160)
+y1 = scipy.stats.norm.pdf(x)
+y2 = scipy.stats.norm.pdf(x, loc=2)
+
+trace1 = go.Scatter(
+    x = x,
+    y = y1,
+    mode = 'lines+markers',
+    name='Mean of 0'
+)
+
+trace2 = go.Scatter(
+    x = x,
+    y = y2,
+    mode = 'lines+markers',
+    name='Mean of 2'
+)
+
+data = [trace1, trace2]
+
+py.iplot(data, filename='normal-dists-plot')
+```
+
+#### One Sample T Test
+
+
+A `One Sample T-Test` is a statistical test used to evaluate the null hypothesis that the mean $m$ of a 1D sample dataset of independent observations is equal to the true mean $\mu$ of the population from which the data is sampled. In other words, our null hypothesis is that
+
+$$
+\begin{align*}
+m = \mu
+\end{align*}
+$$
+
+For our T-test, we will be using a significance level of `0.05`. On the matter of doing ethical science, it is good practice to always state the chosen significance level for a given test _before_ actually conducting the test. This is meant to ensure that the analyst does not modify the significance level for the purpose of achieving a desired outcome.
+
+For more information on the choice of 0.05 for a significance level, check out [this page](http://www.investopedia.com/exam-guide/cfa-level-1/quantitative-methods/hypothesis-testing.asp).
+
+```python
+true_mu = 0
+
+onesample_results = scipy.stats.ttest_1samp(data1, true_mu)
+
+matrix_onesample = [
+    ['', 'Test Statistic', 'p-value'],
+    ['Sample Data', onesample_results[0], onesample_results[1]]
+]
+
+onesample_table = FF.create_table(matrix_onesample, index=True)
+py.iplot(onesample_table, filename='onesample-table')
+```
+
+Since our p-value is greater than our Test-Statistic, we have good evidence to not reject the null-hypothesis at the $0.05$ significance level. This is our expected result because the data was collected from a normal distribution.
+
+
+#### Two Sample T Test
+
+
+If we have two independently sampled datasets (with equal variance) and are interested in exploring the question of whether the true means $\mu_1$ and $\mu_2$ are identical, that is, if the data were sampled from the same population, we would use a `Two Sample T-Test`.
+
+Typically when a researcher in a field is interested in the affect of a given test variable between two populations, they will take one sample from each population and will note them as the experimental group and the control group. The experimental group is the sample which will receive the variable being tested, while the control group will not.
+
+This test variable is observed (eg. blood pressure) for all the subjects and a two sided t-test can be used to investigate if the two groups of subjects were sampled from populations with the same true mean, i.e. "Does the drug have an effect?"
+
+```python
+twosample_results = scipy.stats.ttest_ind(data1, data2)
+
+matrix_twosample = [
+    ['', 'Test Statistic', 'p-value'],
+    ['Sample Data', twosample_results[0], twosample_results[1]]
+]
+
+twosample_table = FF.create_table(matrix_twosample, index=True)
+py.iplot(twosample_table, filename='twosample-table')
+```
+
+Since our p-value is much less than our Test Statistic, then with great evidence we can reject our null hypothesis of identical means. This is in alignment with our setup, since we sampled from two different normal pdfs with different means.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'python-T-Test.ipynb', 'python/t-test/', 'T-Test | plotly',
+    'Learn how to perform a one sample and two sample t-test using Python.',
+    title='T-Test in Python. | plotly',
+    name='T-Test',
+    language='python',
+    page_type='example_index', has_thumbnail='false', display_as='statistics', order=7,
+    ipynb= '~notebook_demo/115')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/tesla-supercharging-stations.md plotly-7.1.0+dfsg1/doc/unconverted/python/tesla-supercharging-stations.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/tesla-supercharging-stations.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/tesla-supercharging-stations.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,211 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to plot car-travel routes between USA and Canada Tesla Supercharging
+      Stations in Python.
+    display_as: maps
+    language: python
+    layout: base
+    name: Tesla Supercharging Stations
+    order: 11
+    page_type: u-guide
+    permalink: python/tesla-supercharging-stations/
+    thumbnail: thumbnail/tesla-stations.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Version Check
+Run  `pip install plotly --upgrade` to update your Plotly version
+
+```python
+import plotly
+plotly.__version__
+```
+
+
+#### Google Maps API
+In order to use the `Google Maps - Directions API`, you need to create an account with Google and get your API key [here](https://developers.google.com/maps/documentation/directions/).
+
+```python
+import plotly.plotly as py
+from plotly.graph_objs import *
+
+import numpy as np
+import requests
+import copy
+import googlemaps
+
+# add your google maps api key here
+my_google_maps_api_key = 'YOUR_API_KEY'
+```
+
+#### Parse Tesla Locations
+Perform a `GET` request to retrieve the HTML of the [Google Maps Page](https://www.tesla.com/en_CA/findus#/bounds/70,-50,42,-142,d?search=supercharger,&name=Canada) with all Tesla locations, then parse through to collect all the USA, Canada ones and store them in a dictionary. The dictionary is indexed by `address` and each address has a parameter for `postal_code`, `country`, `latitude` and `longitude`. Be Patient, it takes a while.
+
+```python
+r = requests.get('https://www.tesla.com/en_CA/findus#/bounds/70,-50,42,-142,d?search=supercharger,&name=Canada')
+r_copy = copy.deepcopy(r.text)
+```
+
+```python
+supercharger_locations = {}
+params_for_locations = ['latitude":"', 'longitude":"']
+location_param = 'location_id":"'
+
+while True:
+    # add address line to the dictionary
+    index = r_copy.find(location_param)
+    if index == -1:
+        break
+    index += len(location_param)
+
+    index_end = index
+    while r_copy[index_end] != '"':
+        index_end += 1
+    address_line_1 = r_copy[index:index_end]
+    address_line_1 = str(address_line_1)
+    supercharger_locations[address_line_1] = {}
+
+    for param in params_for_locations:
+        index = r_copy.find(param)
+        if index == -1:
+            break
+        index += len(param)
+
+        index_end = index
+        while r_copy[index_end] != '"':
+            index_end += 1
+        supercharger_locations[address_line_1][param[0:-3]] = r_copy[index:index_end]
+
+    r_copy = r_copy[index_end:len(r.text)]  # slice off the traversed code
+
+all_keys = supercharger_locations.keys()
+```
+
+#### Table of Locations
+Create a table with a sample of the `supercharger_locations` data.
+
+```python
+import plotly.plotly as py
+import plotly.figure_factory as ff
+
+data_matrix = [['Location ID', 'Latitude', 'Longitude']]
+first_ten_keys = supercharger_locations.keys()[0:10]
+
+for key in first_ten_keys:
+    row = [key,
+           supercharger_locations[key]['latitude'],
+           supercharger_locations[key]['longitude']]
+    data_matrix.append(row)
+
+table = ff.create_table(data_matrix)
+py.iplot(table, filename='supercharger-locations-sample')
+```
+
+#### Plot the Route
+The server_key should be replaced with your own Google Maps Directions API key.
+
+Be careful! Make sure you are picking a start and end point that can be driven between, eg. both in the United States of America. Otherwise, the Google Maps API cannot compute directions and will return an empty list.
+
+```python
+def plot_route_between_tesla_stations(address_start, address_end, zoom=3, endpt_size=6):
+    start = (supercharger_locations[address_start]['latitude'], supercharger_locations[address_start]['longitude'])
+    end = (supercharger_locations[address_end]['latitude'], supercharger_locations[address_end]['longitude'])
+
+    #start = address_start
+    #end = address_end
+
+    directions = gmaps.directions(start, end)
+    steps = []
+    steps.append(start)  # add starting coordinate to trip
+
+    for index in range(len(directions[0]['legs'][0]['steps'])):
+        start_coords = directions[0]['legs'][0]['steps'][index]['start_location']
+        steps.append((start_coords['lat'], start_coords['lng']))
+
+        if index == len(directions[0]['legs'][0]['steps']) - 1:
+            end_coords = directions[0]['legs'][0]['steps'][index]['end_location']
+            steps.append((end_coords['lat'], end_coords['lng']))
+
+    steps.append(end)  # add ending coordinate to trip
+
+    data = Data([
+        Scattermap(
+            lat=[item_x[0] for item_x in steps],
+            lon=[item_y[1] for item_y in steps],
+            mode='markers+lines',
+            marker=Marker(
+                size=[endpt_size] + [4 for j in range(len(steps) - 2)] + [endpt_size]
+            ),
+        )
+    ])
+    layout = Layout(
+        autosize=True,
+        hovermode='closest',
+        map=dict(
+            bearing=0,
+            style='streets',
+            center=dict(
+                lat=np.mean([float(step[0]) for step in steps]),
+                lon=np.mean([float(step[1]) for step in steps]),
+            ),
+            pitch=0,
+            zoom=zoom
+        ),
+    )
+
+    fig = dict(data=data, layout=layout)
+    return fig
+
+server_key = my_google_maps_api_key
+gmaps = googlemaps.Client(key=server_key)
+address_start = supercharger_locations.keys()[0]
+address_end = supercharger_locations.keys()[501]
+zoom=12.2
+endpt_size=20
+
+fig = plot_route_between_tesla_stations(address_start, address_end, zoom=10.2, endpt_size=20)
+py.iplot(fig, filename='tesla-driving-directions-between-superchargers')
+```
+
+#### Reference
+See http://moderndata.plot.ly/visualize-tesla-supercharging-stations-with-mysql-and-plotly/ to visualize Tesla supercharging stations with MYSQL and https://plot.ly/python/scattermap/ for more information on how to plot scatterplots on maps.
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+#! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'tesla-supercharging-stations.ipynb', 'python/tesla-supercharging-stations/', 'Python Tesla Supercharging Stations | Examples | Plotly',
+    'How to plot car-travel routes between USA and Canada Telsa Supercharging Stations in Python.',
+    title = 'Tesla Supercharging Stations | Plotly',
+    name = 'Tesla Supercharging Stations',
+    has_thumbnail='true', thumbnail='thumbnail/tesla-stations.jpg',
+    language='python',
+    display_as='maps', order=10,
+    ipynb= '~notebook_demo/124')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/triangulation.md plotly-7.1.0+dfsg1/doc/unconverted/python/triangulation.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/triangulation.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/triangulation.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,363 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    permalink: python/triangulation/
+    redirect_to: ../surface-triangulation/
+    sitemap: false
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!
+
+
+#### Defining and plotting triangulated surfaces
+#### with Plotly `Mesh3d`
+
+
+A triangulation of a compact surface is a finite collection of triangles that cover the surface in  such a way that every point on the surface is in a triangle,  and  the intersection of any two triangles is either void, a common edge or a common vertex. A triangulated surface is called tri-surface.
+
+
+
+The triangulation of a surface defined as the graph of a continuous function, $z=f(x,y), (x,y)\in D\subset\mathbb{R}^2$ or in a parametric form:
+$$x=x(u,v), y=y(u,v), z=z(u,v), (u,v)\in U\subset\mathbb{R}^2,$$
+is the image through $f$,respectively through the parameterization, of the Delaunay triangulation or an user defined triangulation of the planar domain $D$, respectively $U$.
+
+The Delaunay triangulation of a planar region is defined and illustrated in a Python Plotly tutorial posted [here](https://plot.ly/python/alpha-shapes/).
+
+If the planar region $D$  ($U$) is rectangular, then one defines a meshgrid on it, and the points
+of the grid are the input  points for the `scipy.spatial.Delaunay` function that defines the planar triangulation of $D$, respectively $U$.
+
+
+
+### Triangulation of the Moebius band ###
+
+
+The Moebius band is parameterized by:
+
+$$\begin{align*}
+x(u,v)&=(1+0.5 v\cos(u/2))\cos(u)\\
+y(u,v)&=(1+0.5 v\cos(u/2))\sin(u)\quad\quad u\in[0,2\pi],\: v\in[-1,1]\\
+z(u,v)&=0.5 v\sin(u/2)
+\end{align*}
+$$
+
+
+Define a meshgrid on the rectangle $U=[0,2\pi]\times[-1,1]$:
+
+```python
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+import numpy as np
+import matplotlib.cm as cm
+from scipy.spatial import Delaunay
+
+u=np.linspace(0,2*np.pi, 24)
+v=np.linspace(-1,1, 8)
+u,v=np.meshgrid(u,v)
+u=u.flatten()
+v=v.flatten()
+
+#evaluate the parameterization at the flattened u and v
+tp=1+0.5*v*np.cos(u/2.)
+x=tp*np.cos(u)
+y=tp*np.sin(u)
+z=0.5*v*np.sin(u/2.)
+
+#define 2D points, as input data for the Delaunay triangulation of U
+points2D=np.vstack([u,v]).T
+tri = Delaunay(points2D)#triangulate the rectangle U
+```
+
+`tri.simplices` is a `np.array` of integers, of shape (`ntri`,3), where `ntri` is the number of triangles generated  by `scipy.spatial.Delaunay`.
+Each row in this array contains  three indices,  i, j, k, such that points2D[i,:], points2D[j,:], points2D[k,:]  are vertices of a triangle in the Delaunay triangularization of the rectangle $U$.
+
+
+```python
+print tri.simplices.shape, '
', tri.simplices[0]
+```
+
+The images  of the `points2D` through the surface parameterization are 3D points. The same simplices define the triangles on the surface.
+
+
+Setting   a combination of  keys in `Mesh3d` leads to generating and plotting of a tri-surface, in the same way as `plot_trisurf` in matplotlib  or `trisurf` in Matlab does.
+
+We note that `Mesh3d` with different combination of keys can generate  [alpha-shapes](https://plot.ly/python/alpha-shapes/).
+
+
+In order to plot a tri-surface, we choose a colormap, and associate to each triangle on the surface,  the  color in colormap, corresponding to  the normalized mean value of z-coordinates of the triangle vertices.
+
+
+Define a function that maps a mean z-value to a matplotlib color, converted to a Plotly color:
+
+```python
+def map_z2color(zval, colormap, vmin, vmax):
+    #map the normalized value zval to a corresponding color in the colormap
+
+    if vmin>vmax:
+        raise ValueError('incorrect relation between vmin and vmax')
+    t=(zval-vmin)/float((vmax-vmin))#normalize val
+    R, G, B, alpha=colormap(t)
+    return 'rgb('+'{:d}'.format(int(R*255+0.5))+','+'{:d}'.format(int(G*255+0.5))+\
+           ','+'{:d}'.format(int(B*255+0.5))+')'
+
+```
+
+To plot the triangles on a surface,  we set in Plotly `Mesh3d` the lists of x, y, respectively z- coordinates of the vertices, and the lists of indices, i, j, k, for x, y, z coordinates of  all  vertices:
+
+```python
+def tri_indices(simplices):
+    #simplices is a numpy array defining the simplices of the triangularization
+    #returns the lists of indices i, j, k
+
+    return ([triplet[c] for triplet in simplices] for c in range(3))
+
+def plotly_trisurf(x, y, z, simplices, colormap=cm.RdBu, plot_edges=None):
+    #x, y, z are lists of coordinates of the triangle vertices
+    #simplices are the simplices that define the triangularization;
+    #simplices  is a numpy array of shape (no_triangles, 3)
+    #insert here the  type check for input data
+
+    points3D=np.vstack((x,y,z)).T
+    tri_vertices=map(lambda index: points3D[index], simplices)# vertices of the surface triangles
+    zmean=[np.mean(tri[:,2]) for tri in tri_vertices ]# mean values of z-coordinates of
+                                                      #triangle vertices
+    min_zmean=np.min(zmean)
+    max_zmean=np.max(zmean)
+    facecolor=[map_z2color(zz,  colormap, min_zmean, max_zmean) for zz in zmean]
+    I,J,K=tri_indices(simplices)
+
+    triangles=go.Mesh3d(x=x,
+                     y=y,
+                     z=z,
+                     facecolor=facecolor,
+                     i=I,
+                     j=J,
+                     k=K,
+                     name=''
+                    )
+
+    if plot_edges is None:# the triangle sides are not plotted
+        return [triangles]
+    else:
+        #define the lists Xe, Ye, Ze, of x, y, resp z coordinates of edge end points for each triangle
+        #None separates data corresponding to two consecutive triangles
+        lists_coord=[[[T[k%3][c] for k in range(4)]+[ None]   for T in tri_vertices]  for c in range(3)]
+        Xe, Ye, Ze=[reduce(lambda x,y: x+y, lists_coord[k]) for k in range(3)]
+
+        #define the lines to be plotted
+        lines=go.Scatter3d(x=Xe,
+                        y=Ye,
+                        z=Ze,
+                        mode='lines',
+                        line=dict(color= 'rgb(50,50,50)', width=1.5)
+               )
+        return [triangles, lines]
+```
+
+Call this  function for data associated to Moebius band:
+
+```python
+data1=plotly_trisurf(x,y,z, tri.simplices, colormap=cm.RdBu, plot_edges=True)
+```
+
+Set the  layout of the plot:
+
+```python
+axis = dict(
+showbackground=True,
+backgroundcolor="rgb(230, 230,230)",
+gridcolor="rgb(255, 255, 255)",
+zerolinecolor="rgb(255, 255, 255)",
+    )
+
+layout = go.Layout(
+         title='Moebius band triangulation',
+         width=800,
+         height=800,
+         scene=dict(
+         xaxis=dict(axis),
+         yaxis=dict(axis),
+         zaxis=dict(axis),
+        aspectratio=dict(
+            x=1,
+            y=1,
+            z=0.5
+        ),
+        )
+        )
+
+fig1 = go.Figure(data=data1, layout=layout)
+
+py.iplot(fig1, filename='Moebius-band-trisurf')
+```
+
+### Triangularization of the surface $z=\sin(-xy)$, defined over a disk ###
+
+
+We consider polar coordinates on the disk, $D(0, 1)$, centered at origin and of radius 1, and define
+a meshgrid on the set of points $(r, \theta)$, with $r\in[0,1]$ and $\theta\in[0,2\pi]$:
+
+```python
+n=12 # number of radii
+h=1.0/(n-1)
+r = np.linspace(h, 1.0, n)
+theta= np.linspace(0, 2*np.pi, 36)
+
+r,theta=np.meshgrid(r,theta)
+r=r.flatten()
+theta=theta.flatten()
+
+#Convert polar coordinates to cartesian coordinates (x,y)
+x=r*np.cos(theta)
+y=r*np.sin(theta)
+x=np.append(x, 0)#  a trick to include the center of the disk in the set of points. It was avoided
+                 # initially when we defined r=np.linspace(h, 1.0, n)
+y=np.append(y,0)
+z = np.sin(-x*y)
+
+points2D=np.vstack([x,y]).T
+tri=Delaunay(points2D)
+```
+
+Plot the  surface with a modified layout:
+
+```python
+data2=plotly_trisurf(x,y,z, tri.simplices, colormap=cm.cubehelix, plot_edges=None)
+fig2 = go.Figure(data=data2, layout=layout)
+fig2['layout'].update(dict(title='Triangulated surface',
+                          scene=dict(camera=dict(eye=dict(x=1.75,
+                                                          y=-0.7,
+                                                          z= 0.75)
+                                                )
+                                    )))
+
+py.iplot(fig2, filename='trisurf-cubehx')
+```
+
+This example is also given as a demo for matplotlib [`plot_trisurf`](http://matplotlib.org/examples/mplot3d/trisurf3d_demo.html).
+
+
+### Plotting tri-surfaces from data stored in  ply-files ###
+
+
+A PLY (Polygon File Format or Stanford Triangle Format) format is a format for storing graphical objects
+that are represented by  a triangulation of an object, resulted usually from scanning that object. A Ply file contains the coordinates of vertices, the codes for faces (triangles) and other elements, as well as the color for faces or the normal direction to faces.
+
+In the following we show how we can read a ply file via the Python package, `plyfile`. This package can be installed with `pip`.
+
+We choose a ply file from a list  provided [here](http://people.sc.fsu.edu/~jburkardt/data/ply/ply.html).
+
+```python
+!pip install plyfile
+from plyfile import PlyData, PlyElement
+
+import urllib2
+req = urllib2.Request('http://people.sc.fsu.edu/~jburkardt/data/ply/chopper.ply')
+opener = urllib2.build_opener()
+f = opener.open(req)
+plydata = PlyData.read(f)
+```
+
+Read the file header:
+
+```python
+for element in plydata.elements:
+    print element
+
+nr_points=plydata.elements[0].count
+nr_faces=plydata.elements[1].count
+```
+
+Read the vertex coordinates:
+
+```python
+points=np.array([plydata['vertex'][k] for k in range(nr_points)])
+points[0]
+
+x,y,z=zip(*points)
+
+faces=[plydata['face'][k][0] for k in range(nr_faces)]
+faces[0]
+```
+
+Now we can get data for a Plotly plot of the graphical object read from the ply file:
+
+```python
+data3=plotly_trisurf(x,y,z, faces, colormap=cm.RdBu, plot_edges=None)
+
+title="Trisurf from a PLY file<br>"+\
+                "Data Source:<a href='http://people.sc.fsu.edu/~jburkardt/data/ply/airplane.ply'> [1]</a>"
+
+noaxis=dict(showbackground=False,
+            showline=False,
+            zeroline=False,
+            showgrid=False,
+            showticklabels=False,
+            title=''
+          )
+
+fig3 = go.Figure(data=data3, layout=layout)
+fig3['layout'].update(dict(title=title,
+                           width=1000,
+                           height=1000,
+                           scene=dict(xaxis=noaxis,
+                                      yaxis=noaxis,
+                                      zaxis=noaxis,
+                                      aspectratio=dict(x=1, y=1, z=0.4),
+                                      camera=dict(eye=dict(x=1.25, y=1.25, z= 1.25)
+                                     )
+                           )
+                     ))
+
+py.iplot(fig3, filename='Chopper-Ply-cls')
+```
+
+This a version of the same object plotted along with  triangle edges:
+
+```python
+from IPython.display import HTML
+HTML('<iframe src=https://plot.ly/~empet/13734/trisurf-from-a-ply-file-data-source-1/ \
+     width=800 height=800></iframe>')
+
+```
+
+#### Reference
+See https://plot.ly/python/reference/ for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+
+import publisher
+publisher.publish(
+    'triangulation.ipynb', 'python/surface-triangulation/', 'Surface Triangulation',
+    'How to make Tri-Surf plots in Python with Plotly.',
+    title = 'Python Surface Triangulation | plotly',
+    name = 'Surface Triangulation',
+    has_thumbnail='true', thumbnail='thumbnail/trisurf.jpg',
+    language='python',
+    display_as='3d_charts', order=11,
+    ipynb= '~notebook_demo/71')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/userguide.md plotly-7.1.0+dfsg1/doc/unconverted/python/userguide.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/userguide.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/userguide.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,88 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: Getting Started with Plotly for Python
+    has_thumbnail: false
+    language: python
+    layout: base
+    page_type: u-guide
+    permalink: python/userguide/
+    thumbnail: null
+---
+
+# Plotly for Python User Guide
+
+
+
+
+
+<iframe width="900" height="800" frameborder="0" scrolling="no" src="https://plot.ly/~kevintest/21.embed"></iframe>
+
+
+
+This user guide will provide an in-depth overview of the steps required to get your first `Plotly` graph up and running, as well as more specific and thorough guides on a few of our most popular graph types. Hopefully by the end of this user guide you will have a good idea of how Plotly graphs are defined and constructed, and be on your way to creating amazing data visualizations of your own.
+
+
+### What is the Python API for Plotly?
+
+
+
+As you may know, Plotly is software written to enable users to easily create beautiful interactive plots and graphs to visualize data. All plots are generated using our [javascript library](https://plot.ly/javascript), but we have multiple API's that will allow us to create these plots in our preferred language. Thus the purpose of the Python API is to allow users to generate these plots within a Python environment, including IPython Notebooks!
+
+
+### User Guide Sections:
+
+
+
+The user guide is split into the following sections:
+
+- Section 0. [Getting Started with Plotly](https://plot.ly/python/getting_started)
+- Section 1. [Line and Scatter Plots](https://plot.ly/python/line-and-scatter-plots-tutorial)
+- Section 2. [Bar Charts](https://plot.ly/python/bar-charts-tutorial)
+- Section 3. [Bubble Charts](https://plot.ly/python/bubble-charts-tutorial)
+- Section 4. [Histograms and Box Plots](https://plot.ly/python/histograms-and-box-plots-tutorial)
+- Section 5. [Heatmaps, Contours and 2D Histograms](https://plot.ly/python/heatmaps-contours-and-2dhistograms-tutorial)
+- Section 6. [Converting Matplotlib Figures to Plotly](https://plot.ly/python/matplotlib-to-plotly-tutorial)
+- Section 7. [Streaming API](https://plot.ly/python/intro_streaming)
+- [Appendix A: Getting Started with Python](https://plot.ly/python/python-tutorial)
+
+
+### Want to know what's going on at Plotly?
+
+* Follow us on twitter:
+[@plotlygraphs](https://twitter.com/plotlygraphs)
+
+### Issues or suggestions for the user guide?
+
+* Let us know at: [Plotly Community Support](http://community.plot.ly)
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install publisher --upgrade
+import publisher
+publisher.publish(
+    'user-g.ipynb', 'python/userguide//', 'Getting Started Plotly for Python',
+    'Getting Started with Plotly for Python',
+    title = 'Getting Started Plotly for Python',
+    thumbnail='', language='python',
+    layout='user-guide', has_thumbnail='false')
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/unconverted/python/webgl-text-and-annotations.md plotly-7.1.0+dfsg1/doc/unconverted/python/webgl-text-and-annotations.md
--- plotly-5.20.0+dfsg/doc/unconverted/python/webgl-text-and-annotations.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/unconverted/python/webgl-text-and-annotations.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,100 @@
+---
+jupyter:
+  jupytext:
+    notebook_metadata_filter: all
+    text_representation:
+      extension: .md
+      format_name: markdown
+      format_version: '1.1'
+      jupytext_version: 1.1.1
+  kernelspec:
+    display_name: Python 2
+    language: python
+    name: python2
+  plotly:
+    description: How to add webGL based text labels and annotations to plots in python
+    display_as: advanced_opt
+    has_thumbnail: false
+    language: python
+    layout: base
+    name: WebGL Text and Annotations
+    order: 2
+    page_type: example_index
+    permalink: python/webgl-text-and-annotations/
+    thumbnail: thumbnail/webgl-text-and-annotations.jpg
+---
+
+#### New to Plotly?
+Plotly's Python library is free and open source! [Get started](https://plot.ly/python/getting-started/) by downloading the client and [reading the primer](https://plot.ly/python/getting-started/).
+<br>You can set up Plotly to work in [online](https://plot.ly/python/getting-started/#initialization-for-online-plotting) or [offline](https://plot.ly/python/getting-started/#initialization-for-offline-plotting) mode, or in [jupyter notebooks](https://plot.ly/python/getting-started/#start-plotting-online).
+<br>We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf) (new!) to help you get started!!
+
+
+### Heatmap with Annotations
+
+```python
+import numpy as np
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+n=250
+
+y = [[i]*n for i in range(12)]
+y = [item for sublist in y for item in sublist]
+
+trace = dict(type='heatmap', z=np.random.randint(1, 10,(12, n)), colorscale = 'Viridis')
+data=[trace]
+
+# Here's the key part - Scattergl text!
+
+data.append({'type': 'scattergl',
+                    'mode': 'text',
+                    'x': list(range(n))*12,
+                    'y': y,
+                    'text': np.random.choice(list('ATGC'), 12*250),
+                    'textfont': {
+                        'size': 20
+                    }})
+
+steps = [{'args': ['xaxis', {'range': [-0.5 + e, 30.5 + e]}], 'method': 'relayout'} for e in range(n-30)]
+
+sliders = [dict(
+    active = 0,
+    steps = steps
+)]
+
+layout = dict(sliders=sliders)
+layout['xaxis'] = {'range': [-0.5, 30.5]}
+
+fig = dict(data=data, layout=layout)
+
+py.iplot(fig, validate=False)
+```
+
+### Reference
+
+
+See https://plot.ly/python/reference/#scattergl for more information and chart attribute options!
+
+```python
+from IPython.display import display, HTML
+
+display(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />'))
+display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">'))
+
+! pip install git+https://github.com/plotly/publisher.git --upgrade
+import publisher
+publisher.publish(
+    'webgl-text-and-annotations.ipynb', 'python/webgl-text-and-annotations/', 'WebGL Text and Annotations',
+    'How to add webGL based text labels and annotations to plots in python',
+    title = 'WebGL Text and Annotations | plotly',
+    name = 'WebGL Text and Annotations',
+    has_thumbnail='false', thumbnail='thumbnail/webgl-text-and-annotations.jpg',
+    language='python',
+    page_type='example_index', display_as='style_opt', order=2,
+    ipynb= '~notebook_demo/219', uses_plotly_offline=False)
+```
+
+```python
+
+```
diff -Nru plotly-5.20.0+dfsg/doc/what_about_dash.md plotly-7.1.0+dfsg1/doc/what_about_dash.md
--- plotly-5.20.0+dfsg/doc/what_about_dash.md	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/doc/what_about_dash.md	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,27 @@
+
+
+<!-- #region -->
+### What About Dash?
+
+[Dash](https://dash.plot.ly/) is an open-source framework for building analytical applications, with no Javascript required, and it is tightly integrated with the Plotly graphing library.
+
+Learn about how to install Dash at https://dash.plot.ly/installation.
+
+Everywhere in this page that you see `fig.show()`, you can display the same figure in a Dash application by passing it to the `figure` argument of the [`Graph` component](https://dash.plot.ly/dash-core-components/graph) from the built-in `dash_core_components` package like this:
+
+```python
+import plotly.graph_objects as go # or plotly.express as px
+fig = go.Figure() # or any Plotly Express function e.g. px.bar(...)
+# fig.add_trace( ... )
+# fig.update_layout( ... )
+
+from dash import Dash, dcc, html
+
+app = Dash()
+app.layout = html.Div([
+    dcc.Graph(figure=fig)
+])
+
+app.run(debug=True, use_reloader=False)  # Turn off reloader if inside Jupyter
+```
+<!-- #endregion -->
diff -Nru plotly-5.20.0+dfsg/environment.yml plotly-7.1.0+dfsg1/environment.yml
--- plotly-5.20.0+dfsg/environment.yml	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/environment.yml	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,22 @@
+name: plotly
+channels:
+  - conda-forge
+  - defaults
+dependencies:
+  - nodejs=18
+  - python=3.10
+  - pip=22.3.1
+  - anaconda-client
+  - pandas
+  - black
+  - pytest
+  - inflect
+  - jupyterlab
+  - ipywidgets
+  - statsmodels
+  - numpy
+  - requests
+  - python-frontmatter
+  - twine
+  - pip:
+      - algoliasearch==1.20
diff -Nru plotly-5.20.0+dfsg/js/install.json plotly-7.1.0+dfsg1/js/install.json
--- plotly-5.20.0+dfsg/js/install.json	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/install.json	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,4 @@
+{
+    "packageName": "plotly",
+    "packageManager": "python"
+}
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/js/lib/mimeExtension.js plotly-7.1.0+dfsg1/js/lib/mimeExtension.js
--- plotly-5.20.0+dfsg/js/lib/mimeExtension.js	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/lib/mimeExtension.js	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,3606 @@
+var Dce=Object.create;var xj=Object.defineProperty;var Lce=Object.getOwnPropertyDescriptor;var Fce=Object.getOwnPropertyNames;var Pce=Object.getPrototypeOf,Ice=Object.prototype.hasOwnProperty;var WS=(We,oe)=>()=>{try{return oe||We((oe={exports:{}}).exports,oe),oe.exports}catch(Ie){throw oe=0,Ie}};var Rce=(We,oe,Ie,Oe)=>{if(oe&&typeof oe=="object"||typeof oe=="function")for(let Qe of Fce(oe))!Ice.call(We,Qe)&&Qe!==Ie&&xj(We,Qe,{get:()=>oe[Qe],enumerable:!(Oe=Lce(oe,Qe))||Oe.enumerable});return We};var hp=(We,oe,Ie)=>(Ie=We!=null?Dce(Pce(We)):{},Rce(oe||!We||!We.__esModule?xj(Ie,"default",{value:We,enumerable:!0}):Ie,We));var lv=WS((K2,bj)=>{(function(We,oe){typeof K2=="object"&&typeof bj<"u"?oe(K2):typeof define=="function"&&define.amd?define(["exports"],oe):(We=typeof globalThis<"u"?globalThis:We||self,oe(We.lumino_algorithm={}))})(K2,(function(We){"use strict";We.ArrayExt=void 0,(function(_i){function ia(Ta,La,ki=0,ri=-1){let Ri=Ta.length;if(Ri===0)return-1;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na;ri<ki?Na=ri+1+(Ri-ki):Na=ri-ki+1;for(let xn=0;xn<Na;++xn){let Xo=(ki+xn)%Ri;if(Ta[Xo]===La)return Xo}return-1}_i.firstIndexOf=ia;function Yr(Ta,La,ki=-1,ri=0){let Ri=Ta.length;if(Ri===0)return-1;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na;ki<ri?Na=ki+1+(Ri-ri):Na=ki-ri+1;for(let xn=0;xn<Na;++xn){let Xo=(ki-xn+Ri)%Ri;if(Ta[Xo]===La)return Xo}return-1}_i.lastIndexOf=Yr;function Ba(Ta,La,ki=0,ri=-1){let Ri=Ta.length;if(Ri===0)return-1;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na;ri<ki?Na=ri+1+(Ri-ki):Na=ri-ki+1;for(let xn=0;xn<Na;++xn){let Xo=(ki+xn)%Ri;if(La(Ta[Xo],Xo))return Xo}return-1}_i.findFirstIndex=Ba;function eo(Ta,La,ki=-1,ri=0){let Ri=Ta.length;if(Ri===0)return-1;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na;ki<ri?Na=ki+1+(Ri-ri):Na=ki-ri+1;for(let xn=0;xn<Na;++xn){let Xo=(ki-xn+Ri)%Ri;if(La(Ta[Xo],Xo))return Xo}return-1}_i.findLastIndex=eo;function rs(Ta,La,ki=0,ri=-1){let Ri=Ba(Ta,La,ki,ri);return Ri!==-1?Ta[Ri]:void 0}_i.findFirstValue=rs;function Oo(Ta,La,ki=-1,ri=0){let Ri=eo(Ta,La,ki,ri);return Ri!==-1?Ta[Ri]:void 0}_i.findLastValue=Oo;function da(Ta,La,ki,ri=0,Ri=-1){let Na=Ta.length;if(Na===0)return 0;ri<0?ri=Math.max(0,ri+Na):ri=Math.min(ri,Na-1),Ri<0?Ri=Math.max(0,Ri+Na):Ri=Math.min(Ri,Na-1);let xn=ri,Xo=Ri-ri+1;for(;Xo>0;){let Jo=Xo>>1,ta=xn+Jo;ki(Ta[ta],La)<0?(xn=ta+1,Xo-=Jo+1):Xo=Jo}return xn}_i.lowerBound=da;function cn(Ta,La,ki,ri=0,Ri=-1){let Na=Ta.length;if(Na===0)return 0;ri<0?ri=Math.max(0,ri+Na):ri=Math.min(ri,Na-1),Ri<0?Ri=Math.max(0,Ri+Na):Ri=Math.min(Ri,Na-1);let xn=ri,Xo=Ri-ri+1;for(;Xo>0;){let Jo=Xo>>1,ta=xn+Jo;ki(Ta[ta],La)>0?Xo=Jo:(xn=ta+1,Xo-=Jo+1)}return xn}_i.upperBound=cn;function Ss(Ta,La,ki){if(Ta===La)return!0;if(Ta.length!==La.length)return!1;for(let ri=0,Ri=Ta.length;ri<Ri;++ri)if(ki?!ki(Ta[ri],La[ri]):Ta[ri]!==La[ri])return!1;return!0}_i.shallowEqual=Ss;function is(Ta,La={}){let{start:ki,stop:ri,step:Ri}=La;if(Ri===void 0&&(Ri=1),Ri===0)throw new Error("Slice `step` cannot be zero.");let Na=Ta.length;ki===void 0?ki=Ri<0?Na-1:0:ki<0?ki=Math.max(ki+Na,Ri<0?-1:0):ki>=Na&&(ki=Ri<0?Na-1:Na),ri===void 0?ri=Ri<0?-1:Na:ri<0?ri=Math.max(ri+Na,Ri<0?-1:0):ri>=Na&&(ri=Ri<0?Na-1:Na);let xn;Ri<0&&ri>=ki||Ri>0&&ki>=ri?xn=0:Ri<0?xn=Math.floor((ri-ki+1)/Ri+1):xn=Math.floor((ri-ki-1)/Ri+1);let Xo=[];for(let Jo=0;Jo<xn;++Jo)Xo[Jo]=Ta[ki+Jo*Ri];return Xo}_i.slice=is;function Do(Ta,La,ki){let ri=Ta.length;if(ri<=1||(La<0?La=Math.max(0,La+ri):La=Math.min(La,ri-1),ki<0?ki=Math.max(0,ki+ri):ki=Math.min(ki,ri-1),La===ki))return;let Ri=Ta[La],Na=La<ki?1:-1;for(let xn=La;xn!==ki;xn+=Na)Ta[xn]=Ta[xn+Na];Ta[ki]=Ri}_i.move=Do;function sl(Ta,La=0,ki=-1){let ri=Ta.length;if(!(ri<=1))for(La<0?La=Math.max(0,La+ri):La=Math.min(La,ri-1),ki<0?ki=Math.max(0,ki+ri):ki=Math.min(ki,ri-1);La<ki;){let Ri=Ta[La],Na=Ta[ki];Ta[La++]=Na,Ta[ki--]=Ri}}_i.reverse=sl;function cu(Ta,La,ki=0,ri=-1){let Ri=Ta.length;if(Ri<=1||(ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1),ki>=ri))return;let Na=ri-ki+1;if(La>0?La=La%Na:La<0&&(La=(La%Na+Na)%Na),La===0)return;let xn=ki+La;sl(Ta,ki,xn-1),sl(Ta,xn,ri),sl(Ta,ki,ri)}_i.rotate=cu;function ah(Ta,La,ki=0,ri=-1){let Ri=Ta.length;if(Ri===0)return;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na;ri<ki?Na=ri+1+(Ri-ki):Na=ri-ki+1;for(let xn=0;xn<Na;++xn)Ta[(ki+xn)%Ri]=La}_i.fill=ah;function o1(Ta,La,ki){let ri=Ta.length;La<0?La=Math.max(0,La+ri):La=Math.min(La,ri);for(let Ri=ri;Ri>La;--Ri)Ta[Ri]=Ta[Ri-1];Ta[La]=ki}_i.insert=o1;function l0(Ta,La){let ki=Ta.length;if(La<0&&(La+=ki),La<0||La>=ki)return;let ri=Ta[La];for(let Ri=La+1;Ri<ki;++Ri)Ta[Ri-1]=Ta[Ri];return Ta.length=ki-1,ri}_i.removeAt=l0;function Tp(Ta,La,ki=0,ri=-1){let Ri=ia(Ta,La,ki,ri);return Ri!==-1&&l0(Ta,Ri),Ri}_i.removeFirstOf=Tp;function vw(Ta,La,ki=-1,ri=0){let Ri=Yr(Ta,La,ki,ri);return Ri!==-1&&l0(Ta,Ri),Ri}_i.removeLastOf=vw;function mw(Ta,La,ki=0,ri=-1){let Ri=Ta.length;if(Ri===0)return 0;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na=0;for(let xn=0;xn<Ri;++xn)ki<=ri&&xn>=ki&&xn<=ri&&Ta[xn]===La||ri<ki&&(xn<=ri||xn>=ki)&&Ta[xn]===La?Na++:Na>0&&(Ta[xn-Na]=Ta[xn]);return Na>0&&(Ta.length=Ri-Na),Na}_i.removeAllOf=mw;function u0(Ta,La,ki=0,ri=-1){let Ri,Na=Ba(Ta,La,ki,ri);return Na!==-1&&(Ri=l0(Ta,Na)),{index:Na,value:Ri}}_i.removeFirstWhere=u0;function fn(Ta,La,ki=-1,ri=0){let Ri,Na=eo(Ta,La,ki,ri);return Na!==-1&&(Ri=l0(Ta,Na)),{index:Na,value:Ri}}_i.removeLastWhere=fn;function us(Ta,La,ki=0,ri=-1){let Ri=Ta.length;if(Ri===0)return 0;ki<0?ki=Math.max(0,ki+Ri):ki=Math.min(ki,Ri-1),ri<0?ri=Math.max(0,ri+Ri):ri=Math.min(ri,Ri-1);let Na=0;for(let xn=0;xn<Ri;++xn)ki<=ri&&xn>=ki&&xn<=ri&&La(Ta[xn],xn)||ri<ki&&(xn<=ri||xn>=ki)&&La(Ta[xn],xn)?Na++:Na>0&&(Ta[xn-Na]=Ta[xn]);return Na>0&&(Ta.length=Ri-Na),Na}_i.removeAllWhere=us})(We.ArrayExt||(We.ArrayExt={}));function*oe(..._i){for(let ia of _i)yield*ia}function*Ie(){}function*Oe(_i,ia=0){for(let Yr of _i)yield[ia++,Yr]}function*Qe(_i,ia){let Yr=0;for(let Ba of _i)ia(Ba,Yr++)&&(yield Ba)}function dt(_i,ia){let Yr=0;for(let Ba of _i)if(ia(Ba,Yr++))return Ba}function Jt(_i,ia){let Yr=0;for(let Ba of _i)if(ia(Ba,Yr++))return Yr-1;return-1}function jt(_i,ia){let Yr;for(let Ba of _i){if(Yr===void 0){Yr=Ba;continue}ia(Ba,Yr)<0&&(Yr=Ba)}return Yr}function Xt(_i,ia){let Yr;for(let Ba of _i){if(Yr===void 0){Yr=Ba;continue}ia(Ba,Yr)>0&&(Yr=Ba)}return Yr}function nr(_i,ia){let Yr=!0,Ba,eo;for(let rs of _i)Yr?(Ba=rs,eo=rs,Yr=!1):ia(rs,Ba)<0?Ba=rs:ia(rs,eo)>0&&(eo=rs);return Yr?void 0:[Ba,eo]}function Ht(_i){return Array.from(_i)}function er(_i){let ia={};for(let[Yr,Ba]of _i)ia[Yr]=Ba;return ia}function ur(_i,ia){let Yr=0;for(let Ba of _i)if(ia(Ba,Yr++)===!1)return}function ir(_i,ia){let Yr=0;for(let Ba of _i)if(ia(Ba,Yr++)===!1)return!1;return!0}function Ot(_i,ia){let Yr=0;for(let Ba of _i)if(ia(Ba,Yr++))return!0;return!1}function*ar(_i,ia){let Yr=0;for(let Ba of _i)yield ia(Ba,Yr++)}function*Lr(_i,ia,Yr){ia===void 0?(ia=_i,_i=0,Yr=1):Yr===void 0&&(Yr=1);let Ba=Ir.rangeLength(_i,ia,Yr);for(let eo=0;eo<Ba;eo++)yield _i+Yr*eo}var Ir;(function(_i){function ia(Yr,Ba,eo){return eo===0?1/0:Yr>Ba&&eo>0||Yr<Ba&&eo<0?0:Math.ceil((Ba-Yr)/eo)}_i.rangeLength=ia})(Ir||(Ir={}));function de(_i,ia,Yr){let Ba=_i[Symbol.iterator](),eo=0,rs=Ba.next();if(rs.done&&Yr===void 0)throw new TypeError("Reduce of empty iterable with no initial value.");if(rs.done)return Yr;let Oo=Ba.next();if(Oo.done&&Yr===void 0)return rs.value;if(Oo.done)return ia(Yr,rs.value,eo++);let da;Yr===void 0?da=ia(rs.value,Oo.value,eo++):da=ia(ia(Yr,rs.value,eo++),Oo.value,eo++);let cn;for(;!(cn=Ba.next()).done;)da=ia(da,cn.value,eo++);return da}function*Mr(_i,ia){for(;0<ia--;)yield _i}function*qr(_i){yield _i}function*Vr(_i){if(typeof _i.retro=="function")yield*_i.retro();else for(let ia=_i.length-1;ia>-1;ia--)yield _i[ia]}function ti(_i){let ia=[],Yr=new Set,Ba=new Map;for(let Oo of _i)eo(Oo);for(let[Oo]of Ba)rs(Oo);return ia;function eo(Oo){let[da,cn]=Oo,Ss=Ba.get(cn);Ss?Ss.push(da):Ba.set(cn,[da])}function rs(Oo){if(Yr.has(Oo))return;Yr.add(Oo);let da=Ba.get(Oo);if(da)for(let cn of da)rs(cn);ia.push(Oo)}}function*Xr(_i,ia){let Yr=0;for(let Ba of _i)Yr++%ia===0&&(yield Ba)}We.StringExt=void 0,(function(_i){function ia(Oo,da,cn=0){let Ss=new Array(da.length);for(let is=0,Do=cn,sl=da.length;is<sl;++is,++Do){if(Do=Oo.indexOf(da[is],Do),Do===-1)return null;Ss[is]=Do}return Ss}_i.findIndices=ia;function Yr(Oo,da,cn=0){let Ss=ia(Oo,da,cn);if(!Ss)return null;let is=0;for(let Do=0,sl=Ss.length;Do<sl;++Do){let cu=Ss[Do]-cn;is+=cu*cu}return{score:is,indices:Ss}}_i.matchSumOfSquares=Yr;function Ba(Oo,da,cn=0){let Ss=ia(Oo,da,cn);if(!Ss)return null;let is=0,Do=cn-1;for(let sl=0,cu=Ss.length;sl<cu;++sl){let ah=Ss[sl];is+=ah-Do-1,Do=ah}return{score:is,indices:Ss}}_i.matchSumOfDeltas=Ba;function eo(Oo,da,cn){let Ss=[],is=0,Do=0,sl=da.length;for(;is<sl;){let cu=da[is],ah=da[is];for(;++is<sl&&da[is]===ah+1;)ah++;Do<cu&&Ss.push(Oo.slice(Do,cu)),cu<ah+1&&Ss.push(cn(Oo.slice(cu,ah+1))),Do=ah+1}return Do<Oo.length&&Ss.push(Oo.slice(Do)),Ss}_i.highlight=eo;function rs(Oo,da){return Oo<da?-1:Oo>da?1:0}_i.cmp=rs})(We.StringExt||(We.StringExt={}));function*Ki(_i,ia){if(ia<1)return;let Yr=_i[Symbol.iterator](),Ba;for(;0<ia--&&!(Ba=Yr.next()).done;)yield Ba.value}function*Ia(..._i){let ia=_i.map(Ba=>Ba[Symbol.iterator]()),Yr=ia.map(Ba=>Ba.next());for(;ir(Yr,Ba=>!Ba.done);Yr=ia.map(Ba=>Ba.next()))yield Yr.map(Ba=>Ba.value)}We.chain=oe,We.each=ur,We.empty=Ie,We.enumerate=Oe,We.every=ir,We.filter=Qe,We.find=dt,We.findIndex=Jt,We.map=ar,We.max=Xt,We.min=jt,We.minmax=nr,We.once=qr,We.range=Lr,We.reduce=de,We.repeat=Mr,We.retro=Vr,We.some=Ot,We.stride=Xr,We.take=Ki,We.toArray=Ht,We.toObject=er,We.topologicSort=ti,We.zip=Ia}))});var Q2=WS((J2,wj)=>{(function(We,oe){typeof J2=="object"&&typeof wj<"u"?oe(J2,lv()):typeof define=="function"&&define.amd?define(["exports","@lumino/algorithm"],oe):(We=typeof globalThis<"u"?globalThis:We||self,oe(We.lumino_coreutils={},We.lumino_algorithm))})(J2,(function(We,oe){"use strict";We.JSONExt=void 0,(function(nr){nr.emptyObject=Object.freeze({}),nr.emptyArray=Object.freeze([]);function Ht(Mr){return Mr===null||typeof Mr=="boolean"||typeof Mr=="number"||typeof Mr=="string"}nr.isPrimitive=Ht;function er(Mr){return Array.isArray(Mr)}nr.isArray=er;function ur(Mr){return!Ht(Mr)&&!er(Mr)}nr.isObject=ur;function ir(Mr,qr){if(Mr===qr)return!0;if(Ht(Mr)||Ht(qr))return!1;let Vr=er(Mr),ti=er(qr);return Vr!==ti?!1:Vr&&ti?ar(Mr,qr):Lr(Mr,qr)}nr.deepEqual=ir;function Ot(Mr){return Ht(Mr)?Mr:er(Mr)?Ir(Mr):de(Mr)}nr.deepCopy=Ot;function ar(Mr,qr){if(Mr===qr)return!0;if(Mr.length!==qr.length)return!1;for(let Vr=0,ti=Mr.length;Vr<ti;++Vr)if(!ir(Mr[Vr],qr[Vr]))return!1;return!0}function Lr(Mr,qr){if(Mr===qr)return!0;for(let Vr in Mr)if(Mr[Vr]!==void 0&&!(Vr in qr))return!1;for(let Vr in qr)if(qr[Vr]!==void 0&&!(Vr in Mr))return!1;for(let Vr in Mr){let ti=Mr[Vr],Xr=qr[Vr];if(!(ti===void 0&&Xr===void 0)&&(ti===void 0||Xr===void 0||!ir(ti,Xr)))return!1}return!0}function Ir(Mr){let qr=new Array(Mr.length);for(let Vr=0,ti=Mr.length;Vr<ti;++Vr)qr[Vr]=Ot(Mr[Vr]);return qr}function de(Mr){let qr={};for(let Vr in Mr){let ti=Mr[Vr];ti!==void 0&&(qr[Vr]=Ot(ti))}return qr}})(We.JSONExt||(We.JSONExt={}));class Ie{constructor(){this._types=[],this._values=[]}types(){return this._types.slice()}hasData(Ht){return this._types.indexOf(Ht)!==-1}getData(Ht){let er=this._types.indexOf(Ht);return er!==-1?this._values[er]:void 0}setData(Ht,er){this.clearData(Ht),this._types.push(Ht),this._values.push(er)}clearData(Ht){let er=this._types.indexOf(Ht);er!==-1&&(this._types.splice(er,1),this._values.splice(er,1))}clear(){this._types.length=0,this._values.length=0}}class Oe{constructor(Ht={}){this._application=null,this._validatePlugin=()=>!0,this._plugins=new Map,this._services=new Map,Ht.validatePlugin&&(console.info("Plugins may be rejected by the custom validation plugin method."),this._validatePlugin=Ht.validatePlugin)}get application(){return this._application}set application(Ht){if(this._application!==null)throw Error("PluginRegistry.application is already set. It cannot be overridden.");this._application=Ht}get deferredPlugins(){return Array.from(this._plugins).filter(([Ht,er])=>er.autoStart==="defer").map(([Ht,er])=>Ht)}getPluginDescription(Ht){var er,ur;return(ur=(er=this._plugins.get(Ht))===null||er===void 0?void 0:er.description)!==null&&ur!==void 0?ur:""}hasPlugin(Ht){return this._plugins.has(Ht)}isPluginActivated(Ht){var er,ur;return(ur=(er=this._plugins.get(Ht))===null||er===void 0?void 0:er.activated)!==null&&ur!==void 0?ur:!1}listPlugins(){return Array.from(this._plugins.keys())}registerPlugin(Ht){if(this._plugins.has(Ht.id))throw new TypeError(`Plugin '${Ht.id}' is already registered.`);if(!this._validatePlugin(Ht))throw new Error(`Plugin '${Ht.id}' is not valid.`);let er=Qe.createPluginData(Ht);Qe.ensureNoCycle(er,this._plugins,this._services),er.provides&&this._services.set(er.provides,er.id),this._plugins.set(er.id,er)}registerPlugins(Ht){for(let er of Ht)this.registerPlugin(er)}deregisterPlugin(Ht,er){let ur=this._plugins.get(Ht);if(ur){if(ur.activated&&!er)throw new Error(`Plugin '${Ht}' is still active.`);this._plugins.delete(Ht)}}async activatePlugin(Ht){let er=this._plugins.get(Ht);if(!er)throw new ReferenceError(`Plugin '${Ht}' is not registered.`);if(er.activated)return;if(er.promise)return er.promise;let ur=er.requires.map(Ot=>this.resolveRequiredService(Ot)),ir=er.optional.map(Ot=>this.resolveOptionalService(Ot));return er.promise=Promise.all([...ur,...ir]).then(Ot=>er.activate.apply(void 0,[this.application,...Ot])).then(Ot=>{er.service=Ot,er.activated=!0,er.promise=null}).catch(Ot=>{throw er.promise=null,Ot}),er.promise}async activatePlugins(Ht,er={}){switch(Ht){case"defer":{let ur=this.deferredPlugins.filter(ir=>this._plugins.get(ir).autoStart).map(ir=>this.activatePlugin(ir));await Promise.all(ur);break}case"startUp":{let ir=Qe.collectStartupPlugins(this._plugins,er).map(async Ot=>{try{return await this.activatePlugin(Ot)}catch(ar){console.error(`Plugin '${Ot}' failed to activate.`,ar)}});await Promise.all(ir);break}}}async deactivatePlugin(Ht){let er=this._plugins.get(Ht);if(!er)throw new ReferenceError(`Plugin '${Ht}' is not registered.`);if(!er.activated)return[];if(!er.deactivate)throw new TypeError(`Plugin '${Ht}'#deactivate() method missing`);let ur=Qe.findDependents(Ht,this._plugins,this._services),ir=ur.map(Ot=>this._plugins.get(Ot));for(let Ot of ir)if(!Ot.deactivate)throw new TypeError(`Plugin ${Ot.id}#deactivate() method missing (depends on ${Ht})`);for(let Ot of ir){let ar=[...Ot.requires,...Ot.optional].map(Lr=>{let Ir=this._services.get(Lr);return Ir?this._plugins.get(Ir).service:null});await Ot.deactivate(this.application,...ar),Ot.service=null,Ot.activated=!1}return ur.pop(),ur}async resolveRequiredService(Ht){let er=this._services.get(Ht);if(!er)throw new TypeError(`No provider for: ${Ht.name}.`);let ur=this._plugins.get(er);return ur.activated||await this.activatePlugin(er),ur.service}async resolveOptionalService(Ht){let er=this._services.get(Ht);if(!er)return null;let ur=this._plugins.get(er);if(!ur.activated)try{await this.activatePlugin(er)}catch(ir){return console.error(ir),null}return ur.service}}var Qe;(function(nr){class Ht{constructor(Lr){var Ir,de,Mr,qr;this._activated=!1,this._promise=null,this._service=null,this.id=Lr.id,this.description=(Ir=Lr.description)!==null&&Ir!==void 0?Ir:"",this.activate=Lr.activate,this.deactivate=(de=Lr.deactivate)!==null&&de!==void 0?de:null,this.provides=(Mr=Lr.provides)!==null&&Mr!==void 0?Mr:null,this.autoStart=(qr=Lr.autoStart)!==null&&qr!==void 0?qr:!1,this.requires=Lr.requires?Lr.requires.slice():[],this.optional=Lr.optional?Lr.optional.slice():[]}get activated(){return this._activated}set activated(Lr){this._activated=Lr}get service(){return this._service}set service(Lr){this._service=Lr}get promise(){return this._promise}set promise(Lr){this._promise=Lr}}function er(ar){return new Ht(ar)}nr.createPluginData=er;function ur(ar,Lr,Ir){let de=[...ar.requires,...ar.optional],Mr=Vr=>{if(Vr===ar.provides)return!0;let ti=Ir.get(Vr);if(!ti)return!1;let Xr=Lr.get(ti),Ki=[...Xr.requires,...Xr.optional];return Ki.length===0?!1:(qr.push(ti),Ki.some(Mr)?!0:(qr.pop(),!1))};if(!ar.provides||de.length===0)return;let qr=[ar.id];if(de.some(Mr))throw new ReferenceError(`Cycle detected: ${qr.join(" -> ")}.`)}nr.ensureNoCycle=ur;function ir(ar,Lr,Ir){let de=new Array,Mr=Ki=>{let Ia=Lr.get(Ki),_i=[...Ia.requires,...Ia.optional];de.push(..._i.reduce((ia,Yr)=>{let Ba=Ir.get(Yr);return Ba&&ia.push([Ki,Ba]),ia},[]))};for(let Ki of Lr.keys())Mr(Ki);let qr=de.filter(Ki=>Ki[1]===ar),Vr=0;for(;qr.length>Vr;){let Ki=qr.length,Ia=new Set(qr.map(_i=>_i[0]));for(let _i of Ia)de.filter(ia=>ia[1]===_i).forEach(ia=>{qr.includes(ia)||qr.push(ia)});Vr=Ki}let ti=oe.topologicSort(qr),Xr=ti.findIndex(Ki=>Ki===ar);return Xr===-1?[ar]:ti.slice(0,Xr+1)}nr.findDependents=ir;function Ot(ar,Lr){let Ir=new Set;for(let de of ar.keys())ar.get(de).autoStart===!0&&Ir.add(de);if(Lr.startPlugins)for(let de of Lr.startPlugins)Ir.add(de);if(Lr.ignorePlugins)for(let de of Lr.ignorePlugins)Ir.delete(de);return Array.from(Ir)}nr.collectStartupPlugins=Ot})(Qe||(Qe={}));class dt{constructor(){this.promise=new Promise((Ht,er)=>{this._resolve=Ht,this._reject=er})}resolve(Ht){let er=this._resolve;er(Ht)}reject(Ht){let er=this._reject;er(Ht)}}class Jt{constructor(Ht,er){this.name=Ht,this.description=er??"",this._tokenStructuralPropertyT=null}}function jt(nr){let Ht=0;for(let er=0,ur=nr.length;er<ur;++er)er%4===0&&(Ht=Math.random()*4294967295>>>0),nr[er]=Ht&255,Ht>>>=8}We.Random=void 0,(function(nr){nr.getRandomValues=(()=>{let Ht=typeof window<"u"&&(window.crypto||window.msCrypto)||null;return Ht&&typeof Ht.getRandomValues=="function"?function(ur){return Ht.getRandomValues(ur)}:jt})()})(We.Random||(We.Random={}));function Xt(nr){let Ht=new Uint8Array(16),er=new Array(256);for(let ur=0;ur<16;++ur)er[ur]="0"+ur.toString(16);for(let ur=16;ur<256;++ur)er[ur]=ur.toString(16);return function(){return nr(Ht),Ht[6]=64|Ht[6]&15,Ht[8]=128|Ht[8]&63,er[Ht[0]]+er[Ht[1]]+er[Ht[2]]+er[Ht[3]]+"-"+er[Ht[4]]+er[Ht[5]]+"-"+er[Ht[6]]+er[Ht[7]]+"-"+er[Ht[8]]+er[Ht[9]]+"-"+er[Ht[10]]+er[Ht[11]]+er[Ht[12]]+er[Ht[13]]+er[Ht[14]]+er[Ht[15]]}}We.UUID=void 0,(function(nr){nr.uuid4=Xt(We.Random.getRandomValues)})(We.UUID||(We.UUID={})),We.MimeData=Ie,We.PluginRegistry=Oe,We.PromiseDelegate=dt,We.Token=Jt}))});var hU=WS((fU,pw)=>{(function(We,oe){typeof pw=="object"&&pw.exports?pw.exports=oe():We.moduleName=oe()})(typeof self<"u"?self:fU,()=>{"use strict";var We=(()=>{var oe=Object.create,Ie=Object.defineProperty,Oe=Object.defineProperties,Qe=Object.getOwnPropertyDescriptor,dt=Object.getOwnPropertyDescriptors,Jt=Object.getOwnPropertyNames,jt=Object.getOwnPropertySymbols,Xt=Object.getPrototypeOf,nr=Object.prototype.hasOwnProperty,Ht=Object.prototype.propertyIsEnumerable,er=(e,r)=>(r=Symbol[e])?r:Symbol.for("Symbol."+e),ur=e=>{throw TypeError(e)},ir=(e,r,t)=>r in e?Ie(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,Ot=(e,r)=>{for(var t in r||(r={}))nr.call(r,t)&&ir(e,t,r[t]);if(jt)for(var t of jt(r))Ht.call(r,t)&&ir(e,t,r[t]);return e},ar=(e,r)=>Oe(e,dt(r)),Lr=(e,r)=>{var t={};for(var i in e)nr.call(e,i)&&r.indexOf(i)<0&&(t[i]=e[i]);if(e!=null&&jt)for(var i of jt(e))r.indexOf(i)<0&&Ht.call(e,i)&&(t[i]=e[i]);return t},Ir=(e,r,t)=>function(){if(t)throw t[0];try{return e&&(r=(0,e[Jt(e)[0]])(e=0)),r}catch(a){throw t=[a],a}},de=(e,r)=>function(){try{return r||(0,e[Jt(e)[0]])((r={exports:{}}).exports,r),r.exports}catch(i){throw r=0,i}},Mr=(e,r)=>{for(var t in r)Ie(e,t,{get:r[t],enumerable:!0})},qr=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of Jt(r))!nr.call(e,a)&&a!==t&&Ie(e,a,{get:()=>r[a],enumerable:!(i=Qe(r,a))||i.enumerable});return e},Vr=(e,r,t)=>(t=e!=null?oe(Xt(e)):{},qr(r||!e||!e.__esModule?Ie(t,"default",{value:e,enumerable:!0}):t,e)),ti=e=>qr(Ie({},"__esModule",{value:!0}),e),Xr=(e,r,t)=>new Promise((i,a)=>{var o=n=>{try{l(t.next(n))}catch(u){a(u)}},s=n=>{try{l(t.throw(n))}catch(u){a(u)}},l=n=>n.done?i(n.value):Promise.resolve(n.value).then(o,s);l((t=t.apply(e,r)).next())}),Ki=function(e,r){this[0]=e,this[1]=r},Ia=e=>{var r=e[er("asyncIterator")],t=!1,i,a={};return r==null?(r=e[er("iterator")](),i=o=>a[o]=s=>r[o](s)):(r=r.call(e),i=o=>a[o]=s=>{if(t){if(t=!1,o==="throw")throw s;return s}return t=!0,{done:!1,value:new Ki(new Promise(l=>{var n=r[o](s);n instanceof Object||ur("Object expected"),l(n)}),1)}}),a[er("iterator")]=()=>a,i("next"),"throw"in r?i("throw"):a.throw=o=>{throw o},"return"in r&&i("return"),a},_i=de({"src/version.js"(e){"use strict";e.version="4.1.1"}}),ia=de({"node_modules/native-promise-only/lib/npo.src.js"(e,r){(function(i,a,o){a[i]=a[i]||o(),typeof r<"u"&&r.exports&&(r.exports=a[i])})("Promise",typeof window<"u"?window:e,function(){"use strict";var i,a,o,s=Object.prototype.toString,l=typeof setImmediate<"u"?function(x){return setImmediate(x)}:setTimeout;try{Object.defineProperty({},"x",{}),i=function(x,S,M,C){return Object.defineProperty(x,S,{value:M,writable:!0,configurable:C!==!1})}}catch{i=function(S,M,C){return S[M]=C,S}}o=(function(){var x,S,M;function C(w,k){this.fn=w,this.self=k,this.next=void 0}return{add:function(k,A){M=new C(k,A),S?S.next=M:x=M,S=M,M=void 0},drain:function(){var k=x;for(x=S=a=void 0;k;)k.fn.call(k.self),k=k.next}}})();function n(v,x){o.add(v,x),a||(a=l(o.drain))}function u(v){var x,S=typeof v;return v!=null&&(S=="object"||S=="function")&&(x=v.then),typeof x=="function"?x:!1}function c(){for(var v=0;v<this.chain.length;v++)f(this,this.state===1?this.chain[v].success:this.chain[v].failure,this.chain[v]);this.chain.length=0}function f(v,x,S){var M,C;try{x===!1?S.reject(v.msg):(x===!0?M=v.msg:M=x.call(void 0,v.msg),M===S.promise?S.reject(TypeError("Promise-chain cycle")):(C=u(M))?C.call(M,S.resolve,S.reject):S.resolve(M))}catch(w){S.reject(w)}}function h(v){var x,S=this;if(!S.triggered){S.triggered=!0,S.def&&(S=S.def);try{(x=u(v))?n(function(){var M=new g(S);try{x.call(v,function(){h.apply(M,arguments)},function(){d.apply(M,arguments)})}catch(C){d.call(M,C)}}):(S.msg=v,S.state=1,S.chain.length>0&&n(c,S))}catch(M){d.call(new g(S),M)}}}function d(v){var x=this;x.triggered||(x.triggered=!0,x.def&&(x=x.def),x.msg=v,x.state=2,x.chain.length>0&&n(c,x))}function p(v,x,S,M){for(var C=0;C<x.length;C++)(function(k){v.resolve(x[k]).then(function(b){S(k,b)},M)})(C)}function g(v){this.def=v,this.triggered=!1}function m(v){this.promise=v,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function y(v){if(typeof v!="function")throw TypeError("Not a function");if(this.__NPO__!==0)throw TypeError("Not a promise");this.__NPO__=1;var x=new m(this);this.then=function(M,C){var w={success:typeof M=="function"?M:!0,failure:typeof C=="function"?C:!1};return w.promise=new this.constructor(function(A,b){if(typeof A!="function"||typeof b!="function")throw TypeError("Not a function");w.resolve=A,w.reject=b}),x.chain.push(w),x.state!==0&&n(c,x),w.promise},this.catch=function(M){return this.then(void 0,M)};try{v.call(void 0,function(M){h.call(x,M)},function(M){d.call(x,M)})}catch(S){d.call(x,S)}}var _=i({},"constructor",y,!1);return y.prototype=_,i(_,"__NPO__",0,!1),i(y,"resolve",function(x){var S=this;return x&&typeof x=="object"&&x.__NPO__===1?x:new S(function(C,w){if(typeof C!="function"||typeof w!="function")throw TypeError("Not a function");C(x)})}),i(y,"reject",function(x){return new this(function(M,C){if(typeof M!="function"||typeof C!="function")throw TypeError("Not a function");C(x)})}),i(y,"all",function(x){var S=this;return s.call(x)!="[object Array]"?S.reject(TypeError("Not an array")):x.length===0?S.resolve([]):new S(function(C,w){if(typeof C!="function"||typeof w!="function")throw TypeError("Not a function");var k=x.length,A=Array(k),b=0;p(S,x,function(T,F){A[T]=F,++b===k&&C(A)},w)})}),i(y,"race",function(x){var S=this;return s.call(x)!="[object Array]"?S.reject(TypeError("Not an array")):new S(function(C,w){if(typeof C!="function"||typeof w!="function")throw TypeError("Not a function");p(S,x,function(A,b){C(b)},w)})}),y})}}),Yr=de({"node_modules/@plotly/d3/d3.js"(e,r){(function(){var t={version:"3.8.2"},i=[].slice,a=function(re){return i.call(re)},o=self.document;function s(re){return re&&(re.ownerDocument||re.document||re).documentElement}function l(re){return re&&(re.ownerDocument&&re.ownerDocument.defaultView||re.document&&re||re.defaultView)}if(o)try{a(o.documentElement.childNodes)[0].nodeType}catch{a=function(he){for(var we=he.length,Le=new Array(we);we--;)Le[we]=he[we];return Le}}if(Date.now||(Date.now=function(){return+new Date}),o)try{o.createElement("DIV").style.setProperty("opacity",0,"")}catch{var n=this.Element.prototype,u=n.setAttribute,c=n.setAttributeNS,f=this.CSSStyleDeclaration.prototype,h=f.setProperty;n.setAttribute=function(he,we){u.call(this,he,we+"")},n.setAttributeNS=function(he,we,Le){c.call(this,he,we,Le+"")},f.setProperty=function(he,we,Le){h.call(this,he,we+"",Le)}}t.ascending=d;function d(re,he){return re<he?-1:re>he?1:re>=he?0:NaN}t.descending=function(re,he){return he<re?-1:he>re?1:he>=re?0:NaN},t.min=function(re,he){var we=-1,Le=re.length,Re,Ne;if(arguments.length===1){for(;++we<Le;)if((Ne=re[we])!=null&&Ne>=Ne){Re=Ne;break}for(;++we<Le;)(Ne=re[we])!=null&&Re>Ne&&(Re=Ne)}else{for(;++we<Le;)if((Ne=he.call(re,re[we],we))!=null&&Ne>=Ne){Re=Ne;break}for(;++we<Le;)(Ne=he.call(re,re[we],we))!=null&&Re>Ne&&(Re=Ne)}return Re},t.max=function(re,he){var we=-1,Le=re.length,Re,Ne;if(arguments.length===1){for(;++we<Le;)if((Ne=re[we])!=null&&Ne>=Ne){Re=Ne;break}for(;++we<Le;)(Ne=re[we])!=null&&Ne>Re&&(Re=Ne)}else{for(;++we<Le;)if((Ne=he.call(re,re[we],we))!=null&&Ne>=Ne){Re=Ne;break}for(;++we<Le;)(Ne=he.call(re,re[we],we))!=null&&Ne>Re&&(Re=Ne)}return Re},t.extent=function(re,he){var we=-1,Le=re.length,Re,Ne,ut;if(arguments.length===1){for(;++we<Le;)if((Ne=re[we])!=null&&Ne>=Ne){Re=ut=Ne;break}for(;++we<Le;)(Ne=re[we])!=null&&(Re>Ne&&(Re=Ne),ut<Ne&&(ut=Ne))}else{for(;++we<Le;)if((Ne=he.call(re,re[we],we))!=null&&Ne>=Ne){Re=ut=Ne;break}for(;++we<Le;)(Ne=he.call(re,re[we],we))!=null&&(Re>Ne&&(Re=Ne),ut<Ne&&(ut=Ne))}return[Re,ut]};function p(re){return re===null?NaN:+re}function g(re){return!isNaN(re)}t.sum=function(re,he){var we=0,Le=re.length,Re,Ne=-1;if(arguments.length===1)for(;++Ne<Le;)g(Re=+re[Ne])&&(we+=Re);else for(;++Ne<Le;)g(Re=+he.call(re,re[Ne],Ne))&&(we+=Re);return we},t.mean=function(re,he){var we=0,Le=re.length,Re,Ne=-1,ut=Le;if(arguments.length===1)for(;++Ne<Le;)g(Re=p(re[Ne]))?we+=Re:--ut;else for(;++Ne<Le;)g(Re=p(he.call(re,re[Ne],Ne)))?we+=Re:--ut;if(ut)return we/ut},t.quantile=function(re,he){var we=(re.length-1)*he+1,Le=Math.floor(we),Re=+re[Le-1],Ne=we-Le;return Ne?Re+Ne*(re[Le]-Re):Re},t.median=function(re,he){var we=[],Le=re.length,Re,Ne=-1;if(arguments.length===1)for(;++Ne<Le;)g(Re=p(re[Ne]))&&we.push(Re);else for(;++Ne<Le;)g(Re=p(he.call(re,re[Ne],Ne)))&&we.push(Re);if(we.length)return t.quantile(we.sort(d),.5)},t.variance=function(re,he){var we=re.length,Le=0,Re,Ne,ut=0,et=-1,_t=0;if(arguments.length===1)for(;++et<we;)g(Re=p(re[et]))&&(Ne=Re-Le,Le+=Ne/++_t,ut+=Ne*(Re-Le));else for(;++et<we;)g(Re=p(he.call(re,re[et],et)))&&(Ne=Re-Le,Le+=Ne/++_t,ut+=Ne*(Re-Le));if(_t>1)return ut/(_t-1)},t.deviation=function(){var re=t.variance.apply(this,arguments);return re&&Math.sqrt(re)};function m(re){return{left:function(he,we,Le,Re){for(arguments.length<3&&(Le=0),arguments.length<4&&(Re=he.length);Le<Re;){var Ne=Le+Re>>>1;re(he[Ne],we)<0?Le=Ne+1:Re=Ne}return Le},right:function(he,we,Le,Re){for(arguments.length<3&&(Le=0),arguments.length<4&&(Re=he.length);Le<Re;){var Ne=Le+Re>>>1;re(he[Ne],we)>0?Re=Ne:Le=Ne+1}return Le}}}var y=m(d);t.bisectLeft=y.left,t.bisect=t.bisectRight=y.right,t.bisector=function(re){return m(re.length===1?function(he,we){return d(re(he),we)}:re)},t.shuffle=function(re,he,we){(Le=arguments.length)<3&&(we=re.length,Le<2&&(he=0));for(var Le=we-he,Re,Ne;Le;)Ne=Math.random()*Le--|0,Re=re[Le+he],re[Le+he]=re[Ne+he],re[Ne+he]=Re;return re},t.permute=function(re,he){for(var we=he.length,Le=new Array(we);we--;)Le[we]=re[he[we]];return Le},t.pairs=function(re){for(var he=0,we=re.length-1,Le,Re=re[0],Ne=new Array(we<0?0:we);he<we;)Ne[he]=[Le=Re,Re=re[++he]];return Ne},t.transpose=function(re){if(!(Ne=re.length))return[];for(var he=-1,we=t.min(re,_),Le=new Array(we);++he<we;)for(var Re=-1,Ne,ut=Le[he]=new Array(Ne);++Re<Ne;)ut[Re]=re[Re][he];return Le};function _(re){return re.length}t.zip=function(){return t.transpose(arguments)},t.keys=function(re){var he=[];for(var we in re)he.push(we);return he},t.values=function(re){var he=[];for(var we in re)he.push(re[we]);return he},t.entries=function(re){var he=[];for(var we in re)he.push({key:we,value:re[we]});return he},t.merge=function(re){for(var he=re.length,we,Le=-1,Re=0,Ne,ut;++Le<he;)Re+=re[Le].length;for(Ne=new Array(Re);--he>=0;)for(ut=re[he],we=ut.length;--we>=0;)Ne[--Re]=ut[we];return Ne};var v=Math.abs;t.range=function(re,he,we){if(arguments.length<3&&(we=1,arguments.length<2&&(he=re,re=0)),(he-re)/we===1/0)throw new Error("infinite range");var Le=[],Re=x(v(we)),Ne=-1,ut;if(re*=Re,he*=Re,we*=Re,we<0)for(;(ut=re+we*++Ne)>he;)Le.push(ut/Re);else for(;(ut=re+we*++Ne)<he;)Le.push(ut/Re);return Le};function x(re){for(var he=1;re*he%1;)he*=10;return he}function S(re,he){for(var we in he)Object.defineProperty(re.prototype,we,{value:he[we],enumerable:!1})}t.map=function(re,he){var we=new M;if(re instanceof M)re.forEach(function(et,_t){we.set(et,_t)});else if(Array.isArray(re)){var Le=-1,Re=re.length,Ne;if(arguments.length===1)for(;++Le<Re;)we.set(Le,re[Le]);else for(;++Le<Re;)we.set(he.call(re,Ne=re[Le],Le),Ne)}else for(var ut in re)we.set(ut,re[ut]);return we};function M(){this._=Object.create(null)}var C="__proto__",w="\0";S(M,{has:b,get:function(re){return this._[k(re)]},set:function(re,he){return this._[k(re)]=he},remove:E,keys:T,values:function(){var re=[];for(var he in this._)re.push(this._[he]);return re},entries:function(){var re=[];for(var he in this._)re.push({key:A(he),value:this._[he]});return re},size:F,empty:D,forEach:function(re){for(var he in this._)re.call(this,A(he),this._[he])}});function k(re){return(re+="")===C||re[0]===w?w+re:re}function A(re){return(re+="")[0]===w?re.slice(1):re}function b(re){return k(re)in this._}function E(re){return(re=k(re))in this._&&delete this._[re]}function T(){var re=[];for(var he in this._)re.push(A(he));return re}function F(){var re=0;for(var he in this._)++re;return re}function D(){for(var re in this._)return!1;return!0}t.nest=function(){var re={},he=[],we=[],Le,Re;function Ne(et,_t,Ft){if(Ft>=he.length)return Re?Re.call(re,_t):Le?_t.sort(Le):_t;for(var Rt=-1,lr=_t.length,sr=he[Ft++],Fr,Or,hr,wr=new M,Cr;++Rt<lr;)(Cr=wr.get(Fr=sr(Or=_t[Rt])))?Cr.push(Or):wr.set(Fr,[Or]);return et?(Or=et(),hr=function(Nr,jr){Or.set(Nr,Ne(et,jr,Ft))}):(Or={},hr=function(Nr,jr){Or[Nr]=Ne(et,jr,Ft)}),wr.forEach(hr),Or}function ut(et,_t){if(_t>=he.length)return et;var Ft=[],Rt=we[_t++];return et.forEach(function(lr,sr){Ft.push({key:lr,values:ut(sr,_t)})}),Rt?Ft.sort(function(lr,sr){return Rt(lr.key,sr.key)}):Ft}return re.map=function(et,_t){return Ne(_t,et,0)},re.entries=function(et){return ut(Ne(t.map,et,0),0)},re.key=function(et){return he.push(et),re},re.sortKeys=function(et){return we[he.length-1]=et,re},re.sortValues=function(et){return Le=et,re},re.rollup=function(et){return Re=et,re},re},t.set=function(re){var he=new R;if(re)for(var we=0,Le=re.length;we<Le;++we)he.add(re[we]);return he};function R(){this._=Object.create(null)}S(R,{has:b,add:function(re){return this._[k(re+="")]=!0,re},remove:E,values:T,size:F,empty:D,forEach:function(re){for(var he in this._)re.call(this,A(he))}}),t.behavior={};function P(re){return re}t.rebind=function(re,he){for(var we=1,Le=arguments.length,Re;++we<Le;)re[Re=arguments[we]]=z(re,he,he[Re]);return re};function z(re,he,we){return function(){var Le=we.apply(he,arguments);return Le===he?re:Le}}function I(re,he){if(he in re)return he;he=he.charAt(0).toUpperCase()+he.slice(1);for(var we=0,Le=L.length;we<Le;++we){var Re=L[we]+he;if(Re in re)return Re}}var L=["webkit","ms","moz","Moz","o","O"];function B(){}t.dispatch=function(){for(var re=new O,he=-1,we=arguments.length;++he<we;)re[arguments[he]]=G(re);return re};function O(){}O.prototype.on=function(re,he){var we=re.indexOf("."),Le="";if(we>=0&&(Le=re.slice(we+1),re=re.slice(0,we)),re)return arguments.length<2?this[re].on(Le):this[re].on(Le,he);if(arguments.length===2){if(he==null)for(re in this)this.hasOwnProperty(re)&&this[re].on(Le,null);return this}};function G(re){var he=[],we=new M;function Le(){for(var Re=he,Ne=-1,ut=Re.length,et;++Ne<ut;)(et=Re[Ne].on)&&et.apply(this,arguments);return re}return Le.on=function(Re,Ne){var ut=we.get(Re),et;return arguments.length<2?ut&&ut.on:(ut&&(ut.on=null,he=he.slice(0,et=he.indexOf(ut)).concat(he.slice(et+1)),we.remove(Re)),Ne&&he.push(we.set(Re,{on:Ne})),re)},Le}t.event=null;function W(){t.event.preventDefault()}function X(){for(var re=t.event,he;he=re.sourceEvent;)re=he;return re}function Z(re){for(var he=new O,we=0,Le=arguments.length;++we<Le;)he[arguments[we]]=G(he);return he.of=function(Re,Ne){return function(ut){try{var et=ut.sourceEvent=t.event;ut.target=re,t.event=ut,he[ut.type].apply(Re,Ne)}finally{t.event=et}}},he}t.requote=function(re){return re.replace(J,"\\$&")};var J=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,N={}.__proto__?function(re,he){re.__proto__=he}:function(re,he){for(var we in he)re[we]=he[we]};function H(re){return N(re,j),re}var $=function(re,he){return he.querySelector(re)},U=function(re,he){return he.querySelectorAll(re)},V=function(re,he){var we=re.matches||re[I(re,"matchesSelector")];return V=function(Le,Re){return we.call(Le,Re)},V(re,he)};typeof Sizzle=="function"&&($=function(re,he){return Sizzle(re,he)[0]||null},U=Sizzle,V=Sizzle.matchesSelector),t.selection=function(){return t.select(o.documentElement)};var j=t.selection.prototype=[];j.select=function(re){var he=[],we,Le,Re,Ne;re=q(re);for(var ut=-1,et=this.length;++ut<et;){he.push(we=[]),we.parentNode=(Re=this[ut]).parentNode;for(var _t=-1,Ft=Re.length;++_t<Ft;)(Ne=Re[_t])?(we.push(Le=re.call(Ne,Ne.__data__,_t,ut)),Le&&"__data__"in Ne&&(Le.__data__=Ne.__data__)):we.push(null)}return H(he)};function q(re){return typeof re=="function"?re:function(){return $(re,this)}}j.selectAll=function(re){var he=[],we,Le;re=Y(re);for(var Re=-1,Ne=this.length;++Re<Ne;)for(var ut=this[Re],et=-1,_t=ut.length;++et<_t;)(Le=ut[et])&&(he.push(we=a(re.call(Le,Le.__data__,et,Re))),we.parentNode=Le);return H(he)};function Y(re){return typeof re=="function"?re:function(){return U(re,this)}}var K="http://www.w3.org/1999/xhtml",te={svg:"http://www.w3.org/2000/svg",xhtml:K,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};t.ns={prefix:te,qualify:function(re){var he=re.indexOf(":"),we=re;return he>=0&&(we=re.slice(0,he))!=="xmlns"&&(re=re.slice(he+1)),te.hasOwnProperty(we)?{space:te[we],local:re}:re}},j.attr=function(re,he){if(arguments.length<2){if(typeof re=="string"){var we=this.node();return re=t.ns.qualify(re),re.local?we.getAttributeNS(re.space,re.local):we.getAttribute(re)}for(he in re)this.each(ne(he,re[he]));return this}return this.each(ne(re,he))};function ne(re,he){re=t.ns.qualify(re);function we(){this.removeAttribute(re)}function Le(){this.removeAttributeNS(re.space,re.local)}function Re(){this.setAttribute(re,he)}function Ne(){this.setAttributeNS(re.space,re.local,he)}function ut(){var _t=he.apply(this,arguments);_t==null?this.removeAttribute(re):this.setAttribute(re,_t)}function et(){var _t=he.apply(this,arguments);_t==null?this.removeAttributeNS(re.space,re.local):this.setAttributeNS(re.space,re.local,_t)}return he==null?re.local?Le:we:typeof he=="function"?re.local?et:ut:re.local?Ne:Re}function se(re){return re.trim().replace(/\s+/g," ")}j.classed=function(re,he){if(arguments.length<2){if(typeof re=="string"){var we=this.node(),Le=(re=ce(re)).length,Re=-1;if(he=we.classList){for(;++Re<Le;)if(!he.contains(re[Re]))return!1}else for(he=we.getAttribute("class");++Re<Le;)if(!le(re[Re]).test(he))return!1;return!0}for(he in re)this.each(pe(he,re[he]));return this}return this.each(pe(re,he))};function le(re){return new RegExp("(?:^|\\s+)"+t.requote(re)+"(?:\\s+|$)","g")}function ce(re){return(re+"").trim().split(/^|\s+/)}function pe(re,he){re=ce(re).map(xe);var we=re.length;function Le(){for(var Ne=-1;++Ne<we;)re[Ne](this,he)}function Re(){for(var Ne=-1,ut=he.apply(this,arguments);++Ne<we;)re[Ne](this,ut)}return typeof he=="function"?Re:Le}function xe(re){var he=le(re);return function(we,Le){if(Re=we.classList)return Le?Re.add(re):Re.remove(re);var Re=we.getAttribute("class")||"";Le?(he.lastIndex=0,he.test(Re)||we.setAttribute("class",se(Re+" "+re))):we.setAttribute("class",se(Re.replace(he," ")))}}j.style=function(re,he,we){var Le=arguments.length;if(Le<3){if(typeof re!="string"){Le<2&&(he="");for(we in re)this.each(ye(we,re[we],he));return this}if(Le<2){var Re=this.node();return l(Re).getComputedStyle(Re,null).getPropertyValue(re)}we=""}return this.each(ye(re,he,we))};function ye(re,he,we){function Le(){this.style.removeProperty(re)}function Re(){this.style.setProperty(re,he,we)}function Ne(){var ut=he.apply(this,arguments);ut==null?this.style.removeProperty(re):this.style.setProperty(re,ut,we)}return he==null?Le:typeof he=="function"?Ne:Re}j.property=function(re,he){if(arguments.length<2){if(typeof re=="string")return this.node()[re];for(he in re)this.each(fe(he,re[he]));return this}return this.each(fe(re,he))};function fe(re,he){function we(){delete this[re]}function Le(){this[re]=he}function Re(){var Ne=he.apply(this,arguments);Ne==null?delete this[re]:this[re]=Ne}return he==null?we:typeof he=="function"?Re:Le}j.text=function(re){return arguments.length?this.each(typeof re=="function"?function(){var he=re.apply(this,arguments);this.textContent=he??""}:re==null?function(){this.textContent=""}:function(){this.textContent=re}):this.node().textContent},j.html=function(re){return arguments.length?this.each(typeof re=="function"?function(){var he=re.apply(this,arguments);this.innerHTML=he??""}:re==null?function(){this.innerHTML=""}:function(){this.innerHTML=re}):this.node().innerHTML},j.append=function(re){return re=ae(re),this.select(function(){return this.appendChild(re.apply(this,arguments))})};function ae(re){function he(){var Le=this.ownerDocument,Re=this.namespaceURI;return Re===K&&Le.documentElement.namespaceURI===K?Le.createElement(re):Le.createElementNS(Re,re)}function we(){return this.ownerDocument.createElementNS(re.space,re.local)}return typeof re=="function"?re:(re=t.ns.qualify(re)).local?we:he}j.insert=function(re,he){return re=ae(re),he=q(he),this.select(function(){return this.insertBefore(re.apply(this,arguments),he.apply(this,arguments)||null)})},j.remove=function(){return this.each(ee)};function ee(){var re=this.parentNode;re&&re.removeChild(this)}j.data=function(re,he){var we=-1,Le=this.length,Re,Ne;if(!arguments.length){for(re=new Array(Le=(Re=this[0]).length);++we<Le;)(Ne=Re[we])&&(re[we]=Ne.__data__);return re}function ut(Rt,lr){var sr,Fr=Rt.length,Or=lr.length,hr=Math.min(Fr,Or),wr=new Array(Or),Cr=new Array(Or),Nr=new Array(Fr),jr,Ar;if(he){var Ci=new M,Gi=new Array(Fr),aa;for(sr=-1;++sr<Fr;)(jr=Rt[sr])&&(Ci.has(aa=he.call(jr,jr.__data__,sr))?Nr[sr]=jr:Ci.set(aa,jr),Gi[sr]=aa);for(sr=-1;++sr<Or;)(jr=Ci.get(aa=he.call(lr,Ar=lr[sr],sr)))?jr!==!0&&(wr[sr]=jr,jr.__data__=Ar):Cr[sr]=ie(Ar),Ci.set(aa,!0);for(sr=-1;++sr<Fr;)sr in Gi&&Ci.get(Gi[sr])!==!0&&(Nr[sr]=Rt[sr])}else{for(sr=-1;++sr<hr;)jr=Rt[sr],Ar=lr[sr],jr?(jr.__data__=Ar,wr[sr]=jr):Cr[sr]=ie(Ar);for(;sr<Or;++sr)Cr[sr]=ie(lr[sr]);for(;sr<Fr;++sr)Nr[sr]=Rt[sr]}Cr.update=wr,Cr.parentNode=wr.parentNode=Nr.parentNode=Rt.parentNode,et.push(Cr),_t.push(wr),Ft.push(Nr)}var et=Me([]),_t=H([]),Ft=H([]);if(typeof re=="function")for(;++we<Le;)ut(Re=this[we],re.call(Re,Re.parentNode.__data__,we));else for(;++we<Le;)ut(Re=this[we],re);return _t.enter=function(){return et},_t.exit=function(){return Ft},_t};function ie(re){return{__data__:re}}j.datum=function(re){return arguments.length?this.property("__data__",re):this.property("__data__")},j.filter=function(re){var he=[],we,Le,Re;typeof re!="function"&&(re=Q(re));for(var Ne=0,ut=this.length;Ne<ut;Ne++){he.push(we=[]),we.parentNode=(Le=this[Ne]).parentNode;for(var et=0,_t=Le.length;et<_t;et++)(Re=Le[et])&&re.call(Re,Re.__data__,et,Ne)&&we.push(Re)}return H(he)};function Q(re){return function(){return V(this,re)}}j.order=function(){for(var re=-1,he=this.length;++re<he;)for(var we=this[re],Le=we.length-1,Re=we[Le],Ne;--Le>=0;)(Ne=we[Le])&&(Re&&Re!==Ne.nextSibling&&Re.parentNode.insertBefore(Ne,Re),Re=Ne);return this},j.sort=function(re){re=ue.apply(this,arguments);for(var he=-1,we=this.length;++he<we;)this[he].sort(re);return this.order()};function ue(re){return arguments.length||(re=d),function(he,we){return he&&we?re(he.__data__,we.__data__):!he-!we}}j.each=function(re){return ge(this,function(he,we,Le){re.call(he,he.__data__,we,Le)})};function ge(re,he){for(var we=0,Le=re.length;we<Le;we++)for(var Re=re[we],Ne=0,ut=Re.length,et;Ne<ut;Ne++)(et=Re[Ne])&&he(et,Ne,we);return re}j.call=function(re){var he=a(arguments);return re.apply(he[0]=this,he),this},j.empty=function(){return!this.node()},j.node=function(){for(var re=0,he=this.length;re<he;re++)for(var we=this[re],Le=0,Re=we.length;Le<Re;Le++){var Ne=we[Le];if(Ne)return Ne}return null},j.size=function(){var re=0;return ge(this,function(){++re}),re};function Me(re){return N(re,Te),re}var Te=[];t.selection.enter=Me,t.selection.enter.prototype=Te,Te.append=j.append,Te.empty=j.empty,Te.node=j.node,Te.call=j.call,Te.size=j.size,Te.select=function(re){for(var he=[],we,Le,Re,Ne,ut,et=-1,_t=this.length;++et<_t;){Re=(Ne=this[et]).update,he.push(we=[]),we.parentNode=Ne.parentNode;for(var Ft=-1,Rt=Ne.length;++Ft<Rt;)(ut=Ne[Ft])?(we.push(Re[Ft]=Le=re.call(Ne.parentNode,ut.__data__,Ft,et)),Le.__data__=ut.__data__):we.push(null)}return H(he)},Te.insert=function(re,he){return arguments.length<2&&(he=je(this)),j.insert.call(this,re,he)};function je(re){var he,we;return function(Le,Re,Ne){var ut=re[Ne].update,et=ut.length,_t;for(Ne!=we&&(we=Ne,he=0),Re>=he&&(he=Re+1);!(_t=ut[he])&&++he<et;);return _t}}t.select=function(re){var he;return typeof re=="string"?(he=[$(re,o)],he.parentNode=o.documentElement):(he=[re],he.parentNode=s(re)),H([he])},t.selectAll=function(re){var he;return typeof re=="string"?(he=a(U(re,o)),he.parentNode=o.documentElement):(he=a(re),he.parentNode=null),H([he])},j.on=function(re,he,we){var Le=arguments.length;if(Le<3){if(typeof re!="string"){Le<2&&(he=!1);for(we in re)this.each(Ve(we,re[we],he));return this}if(Le<2)return(Le=this.node()["__on"+re])&&Le._;we=!1}return this.each(Ve(re,he,we))};function Ve(re,he,we){var Le="__on"+re,Re=re.indexOf("."),Ne=Ke;Re>0&&(re=re.slice(0,Re));var ut=Ze.get(re);ut&&(re=ut,Ne=vt);function et(){var Rt=this[Le];Rt&&(this.removeEventListener(re,Rt,Rt.$),delete this[Le])}function _t(){var Rt=Ne(he,a(arguments));et.call(this),this.addEventListener(re,this[Le]=Rt,Rt.$=we),Rt._=he}function Ft(){var Rt=new RegExp("^__on([^.]+)"+t.requote(re)+"$"),lr;for(var sr in this)if(lr=sr.match(Rt)){var Fr=this[sr];this.removeEventListener(lr[1],Fr,Fr.$),delete this[sr]}}return Re?he?_t:et:he?B:Ft}var Ze=t.map({mouseenter:"mouseover",mouseleave:"mouseout"});o&&Ze.forEach(function(re){"on"+re in o&&Ze.remove(re)});function Ke(re,he){return function(we){var Le=t.event;t.event=we,he[0]=this.__data__;try{re.apply(this,he)}finally{t.event=Le}}}function vt(re,he){var we=Ke(re,he);return function(Le){var Re=this,Ne=Le.relatedTarget;(!Ne||Ne!==Re&&!(Ne.compareDocumentPosition(Re)&8))&&we.call(Re,Le)}}var xt,Pt=0;function mt(re){var he=".dragsuppress-"+ ++Pt,we="click"+he,Le=t.select(l(re)).on("touchmove"+he,W).on("dragstart"+he,W).on("selectstart"+he,W);if(xt==null&&(xt="onselectstart"in re?!1:I(re.style,"userSelect")),xt){var Re=s(re).style,Ne=Re[xt];Re[xt]="none"}return function(ut){if(Le.on(he,null),xt&&(Re[xt]=Ne),ut){var et=function(){Le.on(we,null)};Le.on(we,function(){W(),et()},!0),setTimeout(et,0)}}}t.mouse=function(re){return lt(re,X())};var Mt=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function lt(re,he){he.changedTouches&&(he=he.changedTouches[0]);var we=re.ownerSVGElement||re;if(we.createSVGPoint){var Le=we.createSVGPoint();if(Mt<0){var Re=l(re);if(Re.scrollX||Re.scrollY){we=t.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var Ne=we[0][0].getScreenCTM();Mt=!(Ne.f||Ne.e),we.remove()}}return Mt?(Le.x=he.pageX,Le.y=he.pageY):(Le.x=he.clientX,Le.y=he.clientY),Le=Le.matrixTransform(re.getScreenCTM().inverse()),[Le.x,Le.y]}var ut=re.getBoundingClientRect();return[he.clientX-ut.left-re.clientLeft,he.clientY-ut.top-re.clientTop]}t.touch=function(re,he,we){if(arguments.length<3&&(we=he,he=X().changedTouches),he){for(var Le=0,Re=he.length,Ne;Le<Re;++Le)if((Ne=he[Le]).identifier===we)return lt(re,Ne)}},t.behavior.drag=function(){var re=Z(Re,"drag","dragstart","dragend"),he=null,we=Ne(B,t.mouse,l,"mousemove","mouseup"),Le=Ne(qe,t.touch,P,"touchmove","touchend");function Re(){this.on("mousedown.drag",we).on("touchstart.drag",Le)}function Ne(ut,et,_t,Ft,Rt){return function(){var lr=this,sr=t.event.target.correspondingElement||t.event.target,Fr=lr.parentNode,Or=re.of(lr,arguments),hr=0,wr=ut(),Cr=".drag"+(wr==null?"":"-"+wr),Nr,jr=t.select(_t(sr)).on(Ft+Cr,Gi).on(Rt+Cr,aa),Ar=mt(sr),Ci=et(Fr,wr);he?(Nr=he.apply(lr,arguments),Nr=[Nr.x-Ci[0],Nr.y-Ci[1]]):Nr=[0,0],Or({type:"dragstart"});function Gi(){var ga=et(Fr,wr),qa,Fa;ga&&(qa=ga[0]-Ci[0],Fa=ga[1]-Ci[1],hr|=qa|Fa,Ci=ga,Or({type:"drag",x:ga[0]+Nr[0],y:ga[1]+Nr[1],dx:qa,dy:Fa}))}function aa(){et(Fr,wr)&&(jr.on(Ft+Cr,null).on(Rt+Cr,null),Ar(hr),Or({type:"dragend"}))}}}return Re.origin=function(ut){return arguments.length?(he=ut,Re):he},t.rebind(Re,re,"on")};function qe(){return t.event.changedTouches[0].identifier}t.touches=function(re,he){return arguments.length<2&&(he=X().touches),he?a(he).map(function(we){var Le=lt(re,we);return Le.identifier=we.identifier,Le}):[]};var Ye=1e-6,me=Ye*Ye,_e=Math.PI,Ae=2*_e,ke=Ae-Ye,Ee=_e/2,De=_e/180,Je=180/_e;function Ue(re){return re>0?1:re<0?-1:0}function at(re,he,we){return(he[0]-re[0])*(we[1]-re[1])-(he[1]-re[1])*(we[0]-re[0])}function rt(re){return re>1?0:re<-1?_e:Math.acos(re)}function ft(re){return re>1?Ee:re<-1?-Ee:Math.asin(re)}function At(re){return((re=Math.exp(re))-1/re)/2}function ht(re){return((re=Math.exp(re))+1/re)/2}function Gt(re){return((re=Math.exp(2*re))-1)/(re+1)}function fr(re){return(re=Math.sin(re/2))*re}var gt=Math.SQRT2,yt=2,kt=4;t.interpolateZoom=function(re,he){var we=re[0],Le=re[1],Re=re[2],Ne=he[0],ut=he[1],et=he[2],_t=Ne-we,Ft=ut-Le,Rt=_t*_t+Ft*Ft,lr,sr;if(Rt<me)sr=Math.log(et/Re)/gt,lr=function(Nr){return[we+Nr*_t,Le+Nr*Ft,Re*Math.exp(gt*Nr*sr)]};else{var Fr=Math.sqrt(Rt),Or=(et*et-Re*Re+kt*Rt)/(2*Re*yt*Fr),hr=(et*et-Re*Re-kt*Rt)/(2*et*yt*Fr),wr=Math.log(Math.sqrt(Or*Or+1)-Or),Cr=Math.log(Math.sqrt(hr*hr+1)-hr);sr=(Cr-wr)/gt,lr=function(Nr){var jr=Nr*sr,Ar=ht(wr),Ci=Re/(yt*Fr)*(Ar*Gt(gt*jr+wr)-At(wr));return[we+Ci*_t,Le+Ci*Ft,Re*Ar/ht(gt*jr+wr)]}}return lr.duration=sr*1e3,lr},t.behavior.zoom=function(){var re={x:0,y:0,k:1},he,we,Le,Re=[960,500],Ne=Lt,ut=250,et=0,_t="mousedown.zoom",Ft="mousemove.zoom",Rt="mouseup.zoom",lr,sr="touchstart.zoom",Fr,Or=Z(jr,"zoomstart","zoom","zoomend"),hr,wr,Cr,Nr;$t||($t="onwheel"in o?(Ct=function(){return-t.event.deltaY*(t.event.deltaMode?120:1)},"wheel"):"onmousewheel"in o?(Ct=function(){return t.event.wheelDelta},"mousewheel"):(Ct=function(){return-t.event.detail},"MozMousePixelScroll"));function jr(fa){fa.on(_t,Sn).on($t+".zoom",Vs).on("dblclick.zoom",Ho).on(sr,ko)}jr.event=function(fa){fa.each(function(){var jn=Or.of(this,arguments),Gn=re;ol?t.select(this).transition().each("start.zoom",function(){re=this.__chart__||{x:0,y:0,k:1},Fa(jn)}).tween("zoom:zoom",function(){var Po=Re[0],As=Re[1],Qs=we?we[0]:Po/2,Tl=we?we[1]:As/2,Fl=t.interpolateZoom([(Qs-re.x)/re.k,(Tl-re.y)/re.k,Po/re.k],[(Qs-Gn.x)/Gn.k,(Tl-Gn.y)/Gn.k,Po/Gn.k]);return function(su){var bt=Fl(su),dr=Po/bt[2];this.__chart__=re={x:Qs-bt[0]*dr,y:Tl-bt[1]*dr,k:dr},Nn(jn)}}).each("interrupt.zoom",function(){ka(jn)}).each("end.zoom",function(){ka(jn)}):(this.__chart__=re,Fa(jn),Nn(jn),ka(jn))})},jr.translate=function(fa){return arguments.length?(re={x:+fa[0],y:+fa[1],k:re.k},qa(),jr):[re.x,re.y]},jr.scale=function(fa){return arguments.length?(re={x:re.x,y:re.y,k:null},Gi(+fa),qa(),jr):re.k},jr.scaleExtent=function(fa){return arguments.length?(Ne=fa==null?Lt:[+fa[0],+fa[1]],jr):Ne},jr.center=function(fa){return arguments.length?(Le=fa&&[+fa[0],+fa[1]],jr):Le},jr.size=function(fa){return arguments.length?(Re=fa&&[+fa[0],+fa[1]],jr):Re},jr.duration=function(fa){return arguments.length?(ut=+fa,jr):ut},jr.x=function(fa){return arguments.length?(wr=fa,hr=fa.copy(),re={x:0,y:0,k:1},jr):wr},jr.y=function(fa){return arguments.length?(Nr=fa,Cr=fa.copy(),re={x:0,y:0,k:1},jr):Nr};function Ar(fa){return[(fa[0]-re.x)/re.k,(fa[1]-re.y)/re.k]}function Ci(fa){return[fa[0]*re.k+re.x,fa[1]*re.k+re.y]}function Gi(fa){re.k=Math.max(Ne[0],Math.min(Ne[1],fa))}function aa(fa,jn){jn=Ci(jn),re.x+=fa[0]-jn[0],re.y+=fa[1]-jn[1]}function ga(fa,jn,Gn,Po){fa.__chart__={x:re.x,y:re.y,k:re.k},Gi(Math.pow(2,Po)),aa(we=jn,Gn),fa=t.select(fa),ut>0&&(fa=fa.transition().duration(ut)),fa.call(jr.event)}function qa(){wr&&wr.domain(hr.range().map(function(fa){return(fa-re.x)/re.k}).map(hr.invert)),Nr&&Nr.domain(Cr.range().map(function(fa){return(fa-re.y)/re.k}).map(Cr.invert))}function Fa(fa){et++||fa({type:"zoomstart"})}function Nn(fa){qa(),fa({type:"zoom",scale:re.k,translate:[re.x,re.y]})}function ka(fa){--et||(fa({type:"zoomend"}),we=null)}function Sn(){var fa=this,jn=Or.of(fa,arguments),Gn=0,Po=t.select(l(fa)).on(Ft,Tl).on(Rt,Fl),As=Ar(t.mouse(fa)),Qs=mt(fa);Pn.call(fa),Fa(jn);function Tl(){Gn=1,aa(t.mouse(fa),As),Nn(jn)}function Fl(){Po.on(Ft,null).on(Rt,null),Qs(Gn),ka(jn)}}function ko(){var fa=this,jn=Or.of(fa,arguments),Gn={},Po=0,As,Qs=".zoom-"+t.event.changedTouches[0].identifier,Tl="touchmove"+Qs,Fl="touchend"+Qs,su=[],bt=t.select(fa),dr=mt(fa);Kr(),Fa(jn),bt.on(_t,null).on(sr,Kr);function _r(){var si=t.touches(fa);return As=re.k,si.forEach(function(Ni){Ni.identifier in Gn&&(Gn[Ni.identifier]=Ar(Ni))}),si}function Kr(){var si=t.event.target;t.select(si).on(Tl,ci).on(Fl,yi),su.push(si);for(var Ni=t.event.changedTouches,Ji=0,Qi=Ni.length;Ji<Qi;++Ji)Gn[Ni[Ji].identifier]=null;var ra=_r(),mn=Date.now();if(ra.length===1){if(mn-Fr<500){var Wa=ra[0];ga(fa,Wa,Gn[Wa.identifier],Math.floor(Math.log(re.k)/Math.LN2)+1),W()}Fr=mn}else if(ra.length>1){var Wa=ra[0],xa=ra[1],Pi=Wa[0]-xa[0],Hr=Wa[1]-xa[1];Po=Pi*Pi+Hr*Hr}}function ci(){var si=t.touches(fa),Ni,Ji,Qi,ra;Pn.call(fa);for(var mn=0,Wa=si.length;mn<Wa;++mn,ra=null)if(Qi=si[mn],ra=Gn[Qi.identifier]){if(Ji)break;Ni=Qi,Ji=ra}if(ra){var xa=(xa=Qi[0]-Ni[0])*xa+(xa=Qi[1]-Ni[1])*xa,Pi=Po&&Math.sqrt(xa/Po);Ni=[(Ni[0]+Qi[0])/2,(Ni[1]+Qi[1])/2],Ji=[(Ji[0]+ra[0])/2,(Ji[1]+ra[1])/2],Gi(Pi*As)}Fr=null,aa(Ni,Ji),Nn(jn)}function yi(){if(t.event.touches.length){for(var si=t.event.changedTouches,Ni=0,Ji=si.length;Ni<Ji;++Ni)delete Gn[si[Ni].identifier];for(var Qi in Gn)return void _r()}t.selectAll(su).on(Qs,null),bt.on(_t,Sn).on(sr,ko),dr(),ka(jn)}}function Vs(){var fa=Or.of(this,arguments);lr?clearTimeout(lr):(Pn.call(this),he=Ar(we=Le||t.mouse(this)),Fa(fa)),lr=setTimeout(function(){lr=null,ka(fa)},50),W(),Gi(Math.pow(2,Ct()*.002)*re.k),aa(we,he),Nn(fa)}function Ho(){var fa=t.mouse(this),jn=Math.log(re.k)/Math.LN2;ga(this,fa,Ar(fa),t.event.shiftKey?Math.ceil(jn)-1:Math.floor(jn)+1)}return t.rebind(jr,Or,"on")};var Lt=[0,1/0],Ct,$t;t.color=mr;function mr(){}mr.prototype.toString=function(){return this.rgb()+""},t.hsl=br;function br(re,he,we){return this instanceof br?(this.h=+re,this.s=+he,void(this.l=+we)):arguments.length<2?re instanceof br?new br(re.h,re.s,re.l):zt(""+re,Wt,br):new br(re,he,we)}var Er=br.prototype=new mr;Er.brighter=function(re){return re=Math.pow(.7,arguments.length?re:1),new br(this.h,this.s,this.l/re)},Er.darker=function(re){return re=Math.pow(.7,arguments.length?re:1),new br(this.h,this.s,re*this.l)},Er.rgb=function(){return Tr(this.h,this.s,this.l)};function Tr(re,he,we){var Le,Re;re=isNaN(re)?0:(re%=360)<0?re+360:re,he=isNaN(he)||he<0?0:he>1?1:he,we=we<0?0:we>1?1:we,Re=we<=.5?we*(1+he):we+he-we*he,Le=2*we-Re;function Ne(et){return et>360?et-=360:et<0&&(et+=360),et<60?Le+(Re-Le)*et/60:et<180?Re:et<240?Le+(Re-Le)*(240-et)/60:Le}function ut(et){return Math.round(Ne(et)*255)}return new Jr(ut(re+120),ut(re),ut(re-120))}t.hcl=Ur;function Ur(re,he,we){return this instanceof Ur?(this.h=+re,this.c=+he,void(this.l=+we)):arguments.length<2?re instanceof Ur?new Ur(re.h,re.c,re.l):re instanceof Qr?bi(re.l,re.a,re.b):bi((re=Yt((re=t.rgb(re)).r,re.g,re.b)).l,re.a,re.b):new Ur(re,he,we)}var Ai=Ur.prototype=new mr;Ai.brighter=function(re){return new Ur(this.h,this.c,Math.min(100,this.l+ea*(arguments.length?re:1)))},Ai.darker=function(re){return new Ur(this.h,this.c,Math.max(0,this.l-ea*(arguments.length?re:1)))},Ai.rgb=function(){return oi(this.h,this.c,this.l).rgb()};function oi(re,he,we){return isNaN(re)&&(re=0),isNaN(he)&&(he=0),new Qr(we,Math.cos(re*=De)*he,Math.sin(re)*he)}t.lab=Qr;function Qr(re,he,we){return this instanceof Qr?(this.l=+re,this.a=+he,void(this.b=+we)):arguments.length<2?re instanceof Qr?new Qr(re.l,re.a,re.b):re instanceof Ur?oi(re.h,re.c,re.l):Yt((re=Jr(re)).r,re.g,re.b):new Qr(re,he,we)}var ea=18,$i=.95047,ja=1,ya=1.08883,pa=Qr.prototype=new mr;pa.brighter=function(re){return new Qr(Math.min(100,this.l+ea*(arguments.length?re:1)),this.a,this.b)},pa.darker=function(re){return new Qr(Math.max(0,this.l-ea*(arguments.length?re:1)),this.a,this.b)},pa.rgb=function(){return xi(this.l,this.a,this.b)};function xi(re,he,we){var Le=(re+16)/116,Re=Le+he/500,Ne=Le-we/200;return Re=Ua(Re)*$i,Le=Ua(Le)*ja,Ne=Ua(Ne)*ya,new Jr(pi(3.2404542*Re-1.5371385*Le-.4985314*Ne),pi(-.969266*Re+1.8760108*Le+.041556*Ne),pi(.0556434*Re-.2040259*Le+1.0572252*Ne))}function bi(re,he,we){return re>0?new Ur(Math.atan2(we,he)*Je,Math.sqrt(he*he+we*we),re):new Ur(NaN,NaN,re)}function Ua(re){return re>.206893034?re*re*re:(re-4/29)/7.787037}function dn(re){return re>.008856?Math.pow(re,1/3):7.787037*re+4/29}function pi(re){return Math.round(255*(re<=.00304?12.92*re:1.055*Math.pow(re,1/2.4)-.055))}t.rgb=Jr;function Jr(re,he,we){return this instanceof Jr?(this.r=~~re,this.g=~~he,void(this.b=~~we)):arguments.length<2?re instanceof Jr?new Jr(re.r,re.g,re.b):zt(""+re,Jr,Tr):new Jr(re,he,we)}function Be(re){return new Jr(re>>16,re>>8&255,re&255)}function Fe(re){return Be(re)+""}var Et=Jr.prototype=new mr;Et.brighter=function(re){re=Math.pow(.7,arguments.length?re:1);var he=this.r,we=this.g,Le=this.b,Re=30;return!he&&!we&&!Le?new Jr(Re,Re,Re):(he&&he<Re&&(he=Re),we&&we<Re&&(we=Re),Le&&Le<Re&&(Le=Re),new Jr(Math.min(255,he/re),Math.min(255,we/re),Math.min(255,Le/re)))},Et.darker=function(re){return re=Math.pow(.7,arguments.length?re:1),new Jr(re*this.r,re*this.g,re*this.b)},Et.hsl=function(){return Wt(this.r,this.g,this.b)},Et.toString=function(){return"#"+St(this.r)+St(this.g)+St(this.b)};function St(re){return re<16?"0"+Math.max(0,re).toString(16):Math.min(255,re).toString(16)}function zt(re,he,we){var Le=0,Re=0,Ne=0,ut,et,_t;if(ut=/([a-z]+)\((.*)\)/.exec(re=re.toLowerCase()),ut)switch(et=ut[2].split(","),ut[1]){case"hsl":return we(parseFloat(et[0]),parseFloat(et[1])/100,parseFloat(et[2])/100);case"rgb":return he(tt(et[0]),tt(et[1]),tt(et[2]))}return(_t=ct.get(re))?he(_t.r,_t.g,_t.b):(re!=null&&re.charAt(0)==="#"&&!isNaN(_t=parseInt(re.slice(1),16))&&(re.length===4?(Le=(_t&3840)>>4,Le=Le>>4|Le,Re=_t&240,Re=Re>>4|Re,Ne=_t&15,Ne=Ne<<4|Ne):re.length===7&&(Le=(_t&16711680)>>16,Re=(_t&65280)>>8,Ne=_t&255)),he(Le,Re,Ne))}function Wt(re,he,we){var Le=Math.min(re/=255,he/=255,we/=255),Re=Math.max(re,he,we),Ne=Re-Le,ut,et,_t=(Re+Le)/2;return Ne?(et=_t<.5?Ne/(Re+Le):Ne/(2-Re-Le),re==Re?ut=(he-we)/Ne+(he<we?6:0):he==Re?ut=(we-re)/Ne+2:ut=(re-he)/Ne+4,ut*=60):(ut=NaN,et=_t>0&&_t<1?0:ut),new br(ut,et,_t)}function Yt(re,he,we){re=ze(re),he=ze(he),we=ze(we);var Le=dn((.4124564*re+.3575761*he+.1804375*we)/$i),Re=dn((.2126729*re+.7151522*he+.072175*we)/ja),Ne=dn((.0193339*re+.119192*he+.9503041*we)/ya);return Qr(116*Re-16,500*(Le-Re),200*(Re-Ne))}function ze(re){return(re/=255)<=.04045?re/12.92:Math.pow((re+.055)/1.055,2.4)}function tt(re){var he=parseFloat(re);return re.charAt(re.length-1)==="%"?Math.round(he*2.55):he}var ct=t.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ct.forEach(function(re,he){ct.set(re,Be(he))});function wt(re){return typeof re=="function"?re:function(){return re}}t.functor=wt,t.xhr=Nt(P);function Nt(re){return function(he,we,Le){return arguments.length===2&&typeof we=="function"&&(Le=we,we=null),It(he,we,re,Le)}}function It(re,he,we,Le){var Re={},Ne=t.dispatch("beforesend","progress","load","error"),ut={},et=new XMLHttpRequest,_t=null;self.XDomainRequest&&!("withCredentials"in et)&&/^(http(s)?:)?\/\//.test(re)&&(et=new XDomainRequest),"onload"in et?et.onload=et.onerror=Ft:et.onreadystatechange=function(){et.readyState>3&&Ft()};function Ft(){var Rt=et.status,lr;if(!Rt&&qt(et)||Rt>=200&&Rt<300||Rt===304){try{lr=we.call(Re,et)}catch(sr){Ne.error.call(Re,sr);return}Ne.load.call(Re,lr)}else Ne.error.call(Re,et)}return et.onprogress=function(Rt){var lr=t.event;t.event=Rt;try{Ne.progress.call(Re,et)}finally{t.event=lr}},Re.header=function(Rt,lr){return Rt=(Rt+"").toLowerCase(),arguments.length<2?ut[Rt]:(lr==null?delete ut[Rt]:ut[Rt]=lr+"",Re)},Re.mimeType=function(Rt){return arguments.length?(he=Rt==null?null:Rt+"",Re):he},Re.responseType=function(Rt){return arguments.length?(_t=Rt,Re):_t},Re.response=function(Rt){return we=Rt,Re},["get","post"].forEach(function(Rt){Re[Rt]=function(){return Re.send.apply(Re,[Rt].concat(a(arguments)))}}),Re.send=function(Rt,lr,sr){if(arguments.length===2&&typeof lr=="function"&&(sr=lr,lr=null),et.open(Rt,re,!0),he!=null&&!("accept"in ut)&&(ut.accept=he+",*/*"),et.setRequestHeader)for(var Fr in ut)et.setRequestHeader(Fr,ut[Fr]);return he!=null&&et.overrideMimeType&&et.overrideMimeType(he),_t!=null&&(et.responseType=_t),sr!=null&&Re.on("error",sr).on("load",function(Or){sr(null,Or)}),Ne.beforesend.call(Re,et),et.send(lr??null),Re},Re.abort=function(){return et.abort(),Re},t.rebind(Re,Ne,"on"),Le==null?Re:Re.get(Zt(Le))}function Zt(re){return re.length===1?function(he,we){re(he==null?we:null)}:re}function qt(re){var he=re.responseType;return he&&he!=="text"?re.response:re.responseText}t.dsv=function(re,he){var we=new RegExp('["'+re+`
+]`),Le=re.charCodeAt(0);function Re(Ft,Rt,lr){arguments.length<3&&(lr=Rt,Rt=null);var sr=It(Ft,he,Rt==null?Ne:ut(Rt),lr);return sr.row=function(Fr){return arguments.length?sr.response((Rt=Fr)==null?Ne:ut(Fr)):Rt},sr}function Ne(Ft){return Re.parse(Ft.responseText)}function ut(Ft){return function(Rt){return Re.parse(Rt.responseText,Ft)}}Re.parse=function(Ft,Rt){var lr;return Re.parseRows(Ft,function(sr,Fr){if(lr)return lr(sr,Fr-1);var Or=function(hr){for(var wr={},Cr=sr.length,Nr=0;Nr<Cr;++Nr)wr[sr[Nr]]=hr[Nr];return wr};lr=Rt?function(hr,wr){return Rt(Or(hr),wr)}:Or})},Re.parseRows=function(Ft,Rt){var lr={},sr={},Fr=[],Or=Ft.length,hr=0,wr=0,Cr,Nr;function jr(){if(hr>=Or)return sr;if(Nr)return Nr=!1,lr;var Ci=hr;if(Ft.charCodeAt(Ci)===34){for(var Gi=Ci;Gi++<Or;)if(Ft.charCodeAt(Gi)===34){if(Ft.charCodeAt(Gi+1)!==34)break;++Gi}hr=Gi+2;var aa=Ft.charCodeAt(Gi+1);return aa===13?(Nr=!0,Ft.charCodeAt(Gi+2)===10&&++hr):aa===10&&(Nr=!0),Ft.slice(Ci+1,Gi).replace(/""/g,'"')}for(;hr<Or;){var aa=Ft.charCodeAt(hr++),ga=1;if(aa===10)Nr=!0;else if(aa===13)Nr=!0,Ft.charCodeAt(hr)===10&&(++hr,++ga);else if(aa!==Le)continue;return Ft.slice(Ci,hr-ga)}return Ft.slice(Ci)}for(;(Cr=jr())!==sr;){for(var Ar=[];Cr!==lr&&Cr!==sr;)Ar.push(Cr),Cr=jr();Rt&&(Ar=Rt(Ar,wr++))==null||Fr.push(Ar)}return Fr},Re.format=function(Ft){if(Array.isArray(Ft[0]))return Re.formatRows(Ft);var Rt=new R,lr=[];return Ft.forEach(function(sr){for(var Fr in sr)Rt.has(Fr)||lr.push(Rt.add(Fr))}),[lr.map(_t).join(re)].concat(Ft.map(function(sr){return lr.map(function(Fr){return _t(sr[Fr])}).join(re)})).join(`
+`)},Re.formatRows=function(Ft){return Ft.map(et).join(`
+`)};function et(Ft){return Ft.map(_t).join(re)}function _t(Ft){return we.test(Ft)?'"'+Ft.replace(/\"/g,'""')+'"':Ft}return Re},t.csv=t.dsv(",","text/csv"),t.tsv=t.dsv("	","text/tab-separated-values");var vr,Br,Pr,Mi,gi=this[I(this,"requestAnimationFrame")]||function(re){setTimeout(re,17)};t.timer=function(){ba.apply(this,arguments)};function ba(re,he,we){var Le=arguments.length;Le<2&&(he=0),Le<3&&(we=Date.now());var Re=we+he,Ne={c:re,t:Re,n:null};return Br?Br.n=Ne:vr=Ne,Br=Ne,Pr||(Mi=clearTimeout(Mi),Pr=1,gi(Hi)),Ne}function Hi(){var re=Za(),he=oa()-re;he>24?(isFinite(he)&&(clearTimeout(Mi),Mi=setTimeout(Hi,he)),Pr=0):(Pr=1,gi(Hi))}t.timer.flush=function(){Za(),oa()};function Za(){for(var re=Date.now(),he=vr;he;)re>=he.t&&he.c(re-he.t)&&(he.c=null),he=he.n;return re}function oa(){for(var re,he=vr,we=1/0;he;)he.c?(he.t<we&&(we=he.t),he=(re=he).n):he=re?re.n=he.n:vr=he.n;return Br=re,we}t.round=function(re,he){return he?Math.round(re*(he=Math.pow(10,he)))/he:Math.round(re)},t.geom={};function Cn(re){return re[0]}function _n(re){return re[1]}t.geom.hull=function(re){var he=Cn,we=_n;if(arguments.length)return Le(re);function Le(Re){if(Re.length<3)return[];var Ne=wt(he),ut=wt(we),et,_t=Re.length,Ft=[],Rt=[];for(et=0;et<_t;et++)Ft.push([+Ne.call(this,Re[et],et),+ut.call(this,Re[et],et),et]);for(Ft.sort(In),et=0;et<_t;et++)Rt.push([Ft[et][0],-Ft[et][1]]);var lr=Li(Ft),sr=Li(Rt),Fr=sr[0]===lr[0],Or=sr[sr.length-1]===lr[lr.length-1],hr=[];for(et=lr.length-1;et>=0;--et)hr.push(Re[Ft[lr[et]][2]]);for(et=+Fr;et<sr.length-Or;++et)hr.push(Re[Ft[sr[et]][2]]);return hr}return Le.x=function(Re){return arguments.length?(he=Re,Le):he},Le.y=function(Re){return arguments.length?(we=Re,Le):we},Le};function Li(re){for(var he=re.length,we=[0,1],Le=2,Re=2;Re<he;Re++){for(;Le>1&&at(re[we[Le-2]],re[we[Le-1]],re[Re])<=0;)--Le;we[Le++]=Re}return we.slice(0,Le)}function In(re,he){return re[0]-he[0]||re[1]-he[1]}t.geom.polygon=function(re){return N(re,pn),re};var pn=t.geom.polygon.prototype=[];pn.area=function(){for(var re=-1,he=this.length,we,Le=this[he-1],Re=0;++re<he;)we=Le,Le=this[re],Re+=we[1]*Le[0]-we[0]*Le[1];return Re*.5},pn.centroid=function(re){var he=-1,we=this.length,Le=0,Re=0,Ne,ut=this[we-1],et;for(arguments.length||(re=-1/(6*this.area()));++he<we;)Ne=ut,ut=this[he],et=Ne[0]*ut[1]-ut[0]*Ne[1],Le+=(Ne[0]+ut[0])*et,Re+=(Ne[1]+ut[1])*et;return[Le*re,Re*re]},pn.clip=function(re){for(var he,we=tn(re),Le=-1,Re=this.length-tn(this),Ne,ut,et=this[Re-1],_t,Ft,Rt;++Le<Re;){for(he=re.slice(),re.length=0,_t=this[Le],Ft=he[(ut=he.length-we)-1],Ne=-1;++Ne<ut;)Rt=he[Ne],Ka(Rt,et,_t)?(Ka(Ft,et,_t)||re.push(Rn(Ft,Rt,et,_t)),re.push(Rt)):Ka(Ft,et,_t)&&re.push(Rn(Ft,Rt,et,_t)),Ft=Rt;we&&re.push(re[0]),et=_t}return re};function Ka(re,he,we){return(we[0]-he[0])*(re[1]-he[1])<(we[1]-he[1])*(re[0]-he[0])}function Rn(re,he,we,Le){var Re=re[0],Ne=we[0],ut=he[0]-Re,et=Le[0]-Ne,_t=re[1],Ft=we[1],Rt=he[1]-_t,lr=Le[1]-Ft,sr=(et*(_t-Ft)-lr*(Re-Ne))/(lr*ut-et*Rt);return[Re+sr*ut,_t+sr*Rt]}function tn(re){var he=re[0],we=re[re.length-1];return!(he[0]-we[0]||he[1]-we[1])}var Mn,Kn,zn,ua=[],Ea,ln,on=[];function ao(){On(this),this.edge=this.site=this.circle=null}function ho(re){var he=ua.pop()||new ao;return he.site=re,he}function Jn(re){no(re),zn.remove(re),ua.push(re),On(re)}function lo(re){var he=re.circle,we=he.x,Le=he.cy,Re={x:we,y:Le},Ne=re.P,ut=re.N,et=[re];Jn(re);for(var _t=Ne;_t.circle&&v(we-_t.circle.x)<Ye&&v(Le-_t.circle.cy)<Ye;)Ne=_t.P,et.unshift(_t),Jn(_t),_t=Ne;et.unshift(_t),no(_t);for(var Ft=ut;Ft.circle&&v(we-Ft.circle.x)<Ye&&v(Le-Ft.circle.cy)<Ye;)ut=Ft.N,et.push(Ft),Jn(Ft),Ft=ut;et.push(Ft),no(Ft);var Rt=et.length,lr;for(lr=1;lr<Rt;++lr)Ft=et[lr],_t=et[lr-1],vs(Ft.edge,_t.site,Ft.site,Re);_t=et[0],Ft=et[Rt-1],Ft.edge=So(_t.site,Ft.site,null,Re),xo(_t),xo(Ft)}function Fo(re){for(var he=re.x,we=re.y,Le,Re,Ne,ut,et=zn._;et;)if(Ne=uo(et,we)-he,Ne>Ye)et=et.L;else if(ut=he-Qn(et,we),ut>Ye){if(!et.R){Le=et;break}et=et.R}else{Ne>-Ye?(Le=et.P,Re=et):ut>-Ye?(Le=et,Re=et.N):Le=Re=et;break}var _t=ho(re);if(zn.insert(Le,_t),!(!Le&&!Re)){if(Le===Re){no(Le),Re=ho(Le.site),zn.insert(_t,Re),_t.edge=Re.edge=So(Le.site,_t.site),xo(Le),xo(Re);return}if(!Re){_t.edge=So(Le.site,_t.site);return}no(Le),no(Re);var Ft=Le.site,Rt=Ft.x,lr=Ft.y,sr=re.x-Rt,Fr=re.y-lr,Or=Re.site,hr=Or.x-Rt,wr=Or.y-lr,Cr=2*(sr*wr-Fr*hr),Nr=sr*sr+Fr*Fr,jr=hr*hr+wr*wr,Ar={x:(wr*Nr-Fr*jr)/Cr+Rt,y:(sr*jr-hr*Nr)/Cr+lr};vs(Re.edge,Ft,Or,Ar),_t.edge=So(Ft,re,null,Ar),Re.edge=So(re,Or,null,Ar),xo(Le),xo(Re)}}function uo(re,he){var we=re.site,Le=we.x,Re=we.y,Ne=Re-he;if(!Ne)return Le;var ut=re.P;if(!ut)return-1/0;we=ut.site;var et=we.x,_t=we.y,Ft=_t-he;if(!Ft)return et;var Rt=et-Le,lr=1/Ne-1/Ft,sr=Rt/Ft;return lr?(-sr+Math.sqrt(sr*sr-2*lr*(Rt*Rt/(-2*Ft)-_t+Ft/2+Re-Ne/2)))/lr+Le:(Le+et)/2}function Qn(re,he){var we=re.N;if(we)return uo(we,he);var Le=re.site;return Le.y===he?Le.x:1/0}function jo(re){this.site=re,this.edges=[]}jo.prototype.prepare=function(){for(var re=this.edges,he=re.length,we;he--;)we=re[he].edge,(!we.b||!we.a)&&re.splice(he,1);return re.sort(Bn),re.length};function Yn(re){for(var he=re[0][0],we=re[1][0],Le=re[0][1],Re=re[1][1],Ne,ut,et,_t,Ft=Kn,Rt=Ft.length,lr,sr,Fr,Or,hr,wr;Rt--;)if(lr=Ft[Rt],!(!lr||!lr.prepare()))for(Fr=lr.edges,Or=Fr.length,sr=0;sr<Or;)wr=Fr[sr].end(),et=wr.x,_t=wr.y,hr=Fr[++sr%Or].start(),Ne=hr.x,ut=hr.y,(v(et-Ne)>Ye||v(_t-ut)>Ye)&&(Fr.splice(sr,0,new go(nl(lr.site,wr,v(et-he)<Ye&&Re-_t>Ye?{x:he,y:v(Ne-he)<Ye?ut:Re}:v(_t-Re)<Ye&&we-et>Ye?{x:v(ut-Re)<Ye?Ne:we,y:Re}:v(et-we)<Ye&&_t-Le>Ye?{x:we,y:v(Ne-we)<Ye?ut:Le}:v(_t-Le)<Ye&&et-he>Ye?{x:v(ut-Le)<Ye?Ne:he,y:Le}:null),lr.site,null)),++Or)}function Bn(re,he){return he.angle-re.angle}function ps(){On(this),this.x=this.y=this.arc=this.site=this.cy=null}function xo(re){var he=re.P,we=re.N;if(!(!he||!we)){var Le=he.site,Re=re.site,Ne=we.site;if(Le!==Ne){var ut=Re.x,et=Re.y,_t=Le.x-ut,Ft=Le.y-et,Rt=Ne.x-ut,wr=Ne.y-et,lr=2*(_t*wr-Ft*Rt);if(!(lr>=-me)){var sr=_t*_t+Ft*Ft,Fr=Rt*Rt+wr*wr,Or=(wr*sr-Ft*Fr)/lr,hr=(_t*Fr-Rt*sr)/lr,wr=hr+et,Cr=on.pop()||new ps;Cr.arc=re,Cr.site=Re,Cr.x=Or+ut,Cr.y=wr+Math.sqrt(Or*Or+hr*hr),Cr.cy=wr,re.circle=Cr;for(var Nr=null,jr=ln._;jr;)if(Cr.y<jr.y||Cr.y===jr.y&&Cr.x<=jr.x)if(jr.L)jr=jr.L;else{Nr=jr.P;break}else if(jr.R)jr=jr.R;else{Nr=jr;break}ln.insert(Nr,Cr),Nr||(Ea=Cr)}}}}function no(re){var he=re.circle;he&&(he.P||(Ea=he.N),ln.remove(he),on.push(he),On(he),re.circle=null)}function Mo(re,he,we,Le){return function(Re){var Ne=Re.a,ut=Re.b,et=Ne.x,_t=Ne.y,Ft=ut.x,Rt=ut.y,lr=0,sr=1,Fr=Ft-et,Or=Rt-_t,hr;if(hr=re-et,!(!Fr&&hr>0)){if(hr/=Fr,Fr<0){if(hr<lr)return;hr<sr&&(sr=hr)}else if(Fr>0){if(hr>sr)return;hr>lr&&(lr=hr)}if(hr=we-et,!(!Fr&&hr<0)){if(hr/=Fr,Fr<0){if(hr>sr)return;hr>lr&&(lr=hr)}else if(Fr>0){if(hr<lr)return;hr<sr&&(sr=hr)}if(hr=he-_t,!(!Or&&hr>0)){if(hr/=Or,Or<0){if(hr<lr)return;hr<sr&&(sr=hr)}else if(Or>0){if(hr>sr)return;hr>lr&&(lr=hr)}if(hr=Le-_t,!(!Or&&hr<0)){if(hr/=Or,Or<0){if(hr>sr)return;hr>lr&&(lr=hr)}else if(Or>0){if(hr<lr)return;hr<sr&&(sr=hr)}return lr>0&&(Re.a={x:et+lr*Fr,y:_t+lr*Or}),sr<1&&(Re.b={x:et+sr*Fr,y:_t+sr*Or}),Re}}}}}}function Vn(re){for(var he=Mn,we=Mo(re[0][0],re[0][1],re[1][0],re[1][1]),Le=he.length,Re;Le--;)Re=he[Le],(!ts(Re,re)||!we(Re)||v(Re.a.x-Re.b.x)<Ye&&v(Re.a.y-Re.b.y)<Ye)&&(Re.a=Re.b=null,he.splice(Le,1))}function ts(re,he){var we=re.b;if(we)return!0;var Le=re.a,Re=he[0][0],Ne=he[1][0],ut=he[0][1],et=he[1][1],_t=re.l,Ft=re.r,Rt=_t.x,lr=_t.y,sr=Ft.x,Fr=Ft.y,Or=(Rt+sr)/2,hr=(lr+Fr)/2,wr,Cr;if(Fr===lr){if(Or<Re||Or>=Ne)return;if(Rt>sr){if(!Le)Le={x:Or,y:ut};else if(Le.y>=et)return;we={x:Or,y:et}}else{if(!Le)Le={x:Or,y:et};else if(Le.y<ut)return;we={x:Or,y:ut}}}else if(wr=(Rt-sr)/(Fr-lr),Cr=hr-wr*Or,wr<-1||wr>1)if(Rt>sr){if(!Le)Le={x:(ut-Cr)/wr,y:ut};else if(Le.y>=et)return;we={x:(et-Cr)/wr,y:et}}else{if(!Le)Le={x:(et-Cr)/wr,y:et};else if(Le.y<ut)return;we={x:(ut-Cr)/wr,y:ut}}else if(lr<Fr){if(!Le)Le={x:Re,y:wr*Re+Cr};else if(Le.x>=Ne)return;we={x:Ne,y:wr*Ne+Cr}}else{if(!Le)Le={x:Ne,y:wr*Ne+Cr};else if(Le.x<Re)return;we={x:Re,y:wr*Re+Cr}}return re.a=Le,re.b=we,!0}function ws(re,he){this.l=re,this.r=he,this.a=this.b=null}function So(re,he,we,Le){var Re=new ws(re,he);return Mn.push(Re),we&&vs(Re,re,he,we),Le&&vs(Re,he,re,Le),Kn[re.i].edges.push(new go(Re,re,he)),Kn[he.i].edges.push(new go(Re,he,re)),Re}function nl(re,he,we){var Le=new ws(re,null);return Le.a=he,Le.b=we,Mn.push(Le),Le}function vs(re,he,we,Le){!re.a&&!re.b?(re.a=Le,re.l=he,re.r=we):re.l===we?re.b=Le:re.a=Le}function go(re,he,we){var Le=re.a,Re=re.b;this.edge=re,this.site=he,this.angle=we?Math.atan2(we.y-he.y,we.x-he.x):re.l===he?Math.atan2(Re.x-Le.x,Le.y-Re.y):Math.atan2(Le.x-Re.x,Re.y-Le.y)}go.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}};function Xn(){this._=null}function On(re){re.U=re.C=re.L=re.R=re.P=re.N=null}Xn.prototype={insert:function(re,he){var we,Le,Re;if(re){if(he.P=re,he.N=re.N,re.N&&(re.N.P=he),re.N=he,re.R){for(re=re.R;re.L;)re=re.L;re.L=he}else re.R=he;we=re}else this._?(re=mu(this._),he.P=null,he.N=re,re.P=re.L=he,we=re):(he.P=he.N=null,this._=he,we=null);for(he.L=he.R=null,he.U=we,he.C=!0,re=he;we&&we.C;)Le=we.U,we===Le.L?(Re=Le.R,Re&&Re.C?(we.C=Re.C=!1,Le.C=!0,re=Le):(re===we.R&&(Uo(this,we),re=we,we=re.U),we.C=!1,Le.C=!0,kl(this,Le))):(Re=Le.L,Re&&Re.C?(we.C=Re.C=!1,Le.C=!0,re=Le):(re===we.L&&(kl(this,we),re=we,we=re.U),we.C=!1,Le.C=!0,Uo(this,Le))),we=re.U;this._.C=!1},remove:function(re){re.N&&(re.N.P=re.P),re.P&&(re.P.N=re.N),re.N=re.P=null;var he=re.U,we,Le=re.L,Re=re.R,Ne,ut;if(Le?Re?Ne=mu(Re):Ne=Le:Ne=Re,he?he.L===re?he.L=Ne:he.R=Ne:this._=Ne,Le&&Re?(ut=Ne.C,Ne.C=re.C,Ne.L=Le,Le.U=Ne,Ne!==Re?(he=Ne.U,Ne.U=re.U,re=Ne.R,he.L=re,Ne.R=Re,Re.U=Ne):(Ne.U=he,he=Ne,re=Ne.R)):(ut=re.C,re=Ne),re&&(re.U=he),!ut){if(re&&re.C){re.C=!1;return}do{if(re===this._)break;if(re===he.L){if(we=he.R,we.C&&(we.C=!1,he.C=!0,Uo(this,he),we=he.R),we.L&&we.L.C||we.R&&we.R.C){(!we.R||!we.R.C)&&(we.L.C=!1,we.C=!0,kl(this,we),we=he.R),we.C=he.C,he.C=we.R.C=!1,Uo(this,he),re=this._;break}}else if(we=he.L,we.C&&(we.C=!1,he.C=!0,kl(this,he),we=he.L),we.L&&we.L.C||we.R&&we.R.C){(!we.L||!we.L.C)&&(we.R.C=!1,we.C=!0,Uo(this,we),we=he.L),we.C=he.C,he.C=we.L.C=!1,kl(this,he),re=this._;break}we.C=!0,re=he,he=he.U}while(!re.C);re&&(re.C=!1)}}};function Uo(re,he){var we=he,Le=he.R,Re=we.U;Re?Re.L===we?Re.L=Le:Re.R=Le:re._=Le,Le.U=Re,we.U=Le,we.R=Le.L,we.R&&(we.R.U=we),Le.L=we}function kl(re,he){var we=he,Le=he.L,Re=we.U;Re?Re.L===we?Re.L=Le:Re.R=Le:re._=Le,Le.U=Re,we.U=Le,we.L=Le.R,we.L&&(we.L.U=we),Le.R=we}function mu(re){for(;re.L;)re=re.L;return re}function Ul(re,he){var we=re.sort(gu).pop(),Le,Re,Ne;for(Mn=[],Kn=new Array(re.length),zn=new Xn,ln=new Xn;;)if(Ne=Ea,we&&(!Ne||we.y<Ne.y||we.y===Ne.y&&we.x<Ne.x))(we.x!==Le||we.y!==Re)&&(Kn[we.i]=new jo(we),Fo(we),Le=we.x,Re=we.y),we=re.pop();else if(Ne)lo(Ne.arc);else break;he&&(Vn(he),Yn(he));var ut={cells:Kn,edges:Mn};return zn=ln=Mn=Kn=null,ut}function gu(re,he){return he.y-re.y||he.x-re.x}t.geom.voronoi=function(re){var he=Cn,we=_n,Le=he,Re=we,Ne=yu;if(re)return ut(re);function ut(_t){var Ft=new Array(_t.length),Rt=Ne[0][0],lr=Ne[0][1],sr=Ne[1][0],Fr=Ne[1][1];return Ul(et(_t),Ne).cells.forEach(function(Or,hr){var wr=Or.edges,Cr=Or.site,Nr=Ft[hr]=wr.length?wr.map(function(jr){var Ar=jr.start();return[Ar.x,Ar.y]}):Cr.x>=Rt&&Cr.x<=sr&&Cr.y>=lr&&Cr.y<=Fr?[[Rt,Fr],[sr,Fr],[sr,lr],[Rt,lr]]:[];Nr.point=_t[hr]}),Ft}function et(_t){return _t.map(function(Ft,Rt){return{x:Math.round(Le(Ft,Rt)/Ye)*Ye,y:Math.round(Re(Ft,Rt)/Ye)*Ye,i:Rt}})}return ut.links=function(_t){return Ul(et(_t)).edges.filter(function(Ft){return Ft.l&&Ft.r}).map(function(Ft){return{source:_t[Ft.l.i],target:_t[Ft.r.i]}})},ut.triangles=function(_t){var Ft=[];return Ul(et(_t)).cells.forEach(function(Rt,lr){for(var sr=Rt.site,Fr=Rt.edges.sort(Bn),Or=-1,hr=Fr.length,wr,Cr,Nr=Fr[hr-1].edge,jr=Nr.l===sr?Nr.r:Nr.l;++Or<hr;)wr=Nr,Cr=jr,Nr=Fr[Or].edge,jr=Nr.l===sr?Nr.r:Nr.l,lr<Cr.i&&lr<jr.i&&Fu(sr,Cr,jr)<0&&Ft.push([_t[lr],_t[Cr.i],_t[jr.i]])}),Ft},ut.x=function(_t){return arguments.length?(Le=wt(he=_t),ut):he},ut.y=function(_t){return arguments.length?(Re=wt(we=_t),ut):we},ut.clipExtent=function(_t){return arguments.length?(Ne=_t??yu,ut):Ne===yu?null:Ne},ut.size=function(_t){return arguments.length?ut.clipExtent(_t&&[[0,0],_t]):Ne===yu?null:Ne&&Ne[1]},ut};var yu=[[-1e6,-1e6],[1e6,1e6]];function Fu(re,he,we){return(re.x-we.x)*(he.y-re.y)-(re.x-he.x)*(we.y-re.y)}t.geom.delaunay=function(re){return t.geom.voronoi().triangles(re)},t.geom.quadtree=function(re,he,we,Le,Re){var Ne=Cn,ut=_n,et;if(et=arguments.length)return Ne=au,ut=xc,et===3&&(Re=we,Le=he,we=he=0),_t(re);function _t(Ft){var Rt,lr=wt(Ne),sr=wt(ut),Fr,Or,hr,wr,Cr,Nr,jr,Ar;if(he!=null)Cr=he,Nr=we,jr=Le,Ar=Re;else if(jr=Ar=-(Cr=Nr=1/0),Fr=[],Or=[],wr=Ft.length,et)for(hr=0;hr<wr;++hr)Rt=Ft[hr],Rt.x<Cr&&(Cr=Rt.x),Rt.y<Nr&&(Nr=Rt.y),Rt.x>jr&&(jr=Rt.x),Rt.y>Ar&&(Ar=Rt.y),Fr.push(Rt.x),Or.push(Rt.y);else for(hr=0;hr<wr;++hr){var Ci=+lr(Rt=Ft[hr],hr),Gi=+sr(Rt,hr);Ci<Cr&&(Cr=Ci),Gi<Nr&&(Nr=Gi),Ci>jr&&(jr=Ci),Gi>Ar&&(Ar=Gi),Fr.push(Ci),Or.push(Gi)}var aa=jr-Cr,ga=Ar-Nr;aa>ga?Ar=Nr+aa:jr=Cr+ga;function qa(ka,Sn,ko,Vs,Ho,fa,jn,Gn){if(!(isNaN(ko)||isNaN(Vs)))if(ka.leaf){var Po=ka.x,As=ka.y;if(Po!=null)if(v(Po-ko)+v(As-Vs)<.01)Fa(ka,Sn,ko,Vs,Ho,fa,jn,Gn);else{var Qs=ka.point;ka.x=ka.y=ka.point=null,Fa(ka,Qs,Po,As,Ho,fa,jn,Gn),Fa(ka,Sn,ko,Vs,Ho,fa,jn,Gn)}else ka.x=ko,ka.y=Vs,ka.point=Sn}else Fa(ka,Sn,ko,Vs,Ho,fa,jn,Gn)}function Fa(ka,Sn,ko,Vs,Ho,fa,jn,Gn){var Po=(Ho+jn)*.5,As=(fa+Gn)*.5,Qs=ko>=Po,Tl=Vs>=As,Fl=Tl<<1|Qs;ka.leaf=!1,ka=ka.nodes[Fl]||(ka.nodes[Fl]=Pu()),Qs?Ho=Po:jn=Po,Tl?fa=As:Gn=As,qa(ka,Sn,ko,Vs,Ho,fa,jn,Gn)}var Nn=Pu();if(Nn.add=function(ka){qa(Nn,ka,+lr(ka,++hr),+sr(ka,hr),Cr,Nr,jr,Ar)},Nn.visit=function(ka){Cl(ka,Nn,Cr,Nr,jr,Ar)},Nn.find=function(ka){return bc(Nn,ka[0],ka[1],Cr,Nr,jr,Ar)},hr=-1,he==null){for(;++hr<wr;)qa(Nn,Ft[hr],Fr[hr],Or[hr],Cr,Nr,jr,Ar);--hr}else Ft.forEach(Nn.add);return Fr=Or=Ft=Rt=null,Nn}return _t.x=function(Ft){return arguments.length?(Ne=Ft,_t):Ne},_t.y=function(Ft){return arguments.length?(ut=Ft,_t):ut},_t.extent=function(Ft){return arguments.length?(Ft==null?he=we=Le=Re=null:(he=+Ft[0][0],we=+Ft[0][1],Le=+Ft[1][0],Re=+Ft[1][1]),_t):he==null?null:[[he,we],[Le,Re]]},_t.size=function(Ft){return arguments.length?(Ft==null?he=we=Le=Re=null:(he=we=0,Le=+Ft[0],Re=+Ft[1]),_t):he==null?null:[Le-he,Re-we]},_t};function au(re){return re.x}function xc(re){return re.y}function Pu(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function Cl(re,he,we,Le,Re,Ne){if(!re(he,we,Le,Re,Ne)){var ut=(we+Re)*.5,et=(Le+Ne)*.5,_t=he.nodes;_t[0]&&Cl(re,_t[0],we,Le,ut,et),_t[1]&&Cl(re,_t[1],ut,Le,Re,et),_t[2]&&Cl(re,_t[2],we,et,ut,Ne),_t[3]&&Cl(re,_t[3],ut,et,Re,Ne)}}function bc(re,he,we,Le,Re,Ne,ut){var et=1/0,_t;return(function Ft(Rt,lr,sr,Fr,Or){if(!(lr>Ne||sr>ut||Fr<Le||Or<Re)){if(hr=Rt.point){var hr,wr=he-Rt.x,Cr=we-Rt.y,Nr=wr*wr+Cr*Cr;if(Nr<et){var jr=Math.sqrt(et=Nr);Le=he-jr,Re=we-jr,Ne=he+jr,ut=we+jr,_t=hr}}for(var Ar=Rt.nodes,Ci=(lr+Fr)*.5,Gi=(sr+Or)*.5,aa=he>=Ci,ga=we>=Gi,qa=ga<<1|aa,Fa=qa+4;qa<Fa;++qa)if(Rt=Ar[qa&3])switch(qa&3){case 0:Ft(Rt,lr,sr,Ci,Gi);break;case 1:Ft(Rt,Ci,sr,Fr,Gi);break;case 2:Ft(Rt,lr,Gi,Ci,Or);break;case 3:Ft(Rt,Ci,Gi,Fr,Or);break}}})(re,Le,Re,Ne,ut),_t}t.interpolateRgb=Iu;function Iu(re,he){re=t.rgb(re),he=t.rgb(he);var we=re.r,Le=re.g,Re=re.b,Ne=he.r-we,ut=he.g-Le,et=he.b-Re;return function(_t){return"#"+St(Math.round(we+Ne*_t))+St(Math.round(Le+ut*_t))+St(Math.round(Re+et*_t))}}t.interpolateObject=_l;function _l(re,he){var we={},Le={},Re;for(Re in re)Re in he?we[Re]=Tc(re[Re],he[Re]):Le[Re]=re[Re];for(Re in he)Re in re||(Le[Re]=he[Re]);return function(Ne){for(Re in we)Le[Re]=we[Re](Ne);return Le}}t.interpolateNumber=ms;function ms(re,he){return re=+re,he=+he,function(we){return re*(1-we)+he*we}}t.interpolateString=ss;function ss(re,he){var we=fl.lastIndex=wc.lastIndex=0,Le,Re,Ne,ut=-1,et=[],_t=[];for(re=re+"",he=he+"";(Le=fl.exec(re))&&(Re=wc.exec(he));)(Ne=Re.index)>we&&(Ne=he.slice(we,Ne),et[ut]?et[ut]+=Ne:et[++ut]=Ne),(Le=Le[0])===(Re=Re[0])?et[ut]?et[ut]+=Re:et[++ut]=Re:(et[++ut]=null,_t.push({i:ut,x:ms(Le,Re)})),we=wc.lastIndex;return we<he.length&&(Ne=he.slice(we),et[ut]?et[ut]+=Ne:et[++ut]=Ne),et.length<2?_t[0]?(he=_t[0].x,function(Ft){return he(Ft)+""}):function(){return he}:(he=_t.length,function(Ft){for(var Rt=0,lr;Rt<he;++Rt)et[(lr=_t[Rt]).i]=lr.x(Ft);return et.join("")})}var fl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,wc=new RegExp(fl.source,"g");t.interpolate=Tc;function Tc(re,he){for(var we=t.interpolators.length,Le;--we>=0&&!(Le=t.interpolators[we](re,he)););return Le}t.interpolators=[function(re,he){var we=typeof he;return(we==="string"?ct.has(he.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(he)?Iu:ss:he instanceof mr?Iu:Array.isArray(he)?tc:we==="object"&&isNaN(he)?_l:ms)(re,he)}],t.interpolateArray=tc;function tc(re,he){var we=[],Le=[],Re=re.length,Ne=he.length,ut=Math.min(re.length,he.length),et;for(et=0;et<ut;++et)we.push(Tc(re[et],he[et]));for(;et<Re;++et)Le[et]=re[et];for(;et<Ne;++et)Le[et]=he[et];return function(_t){for(et=0;et<ut;++et)Le[et]=we[et](_t);return Le}}var wh=function(){return P},Th=t.map({linear:wh,poly:Mh,quad:function(){return Ah},cubic:function(){return vf},sin:function(){return Mc},exp:function(){return $c},circle:function(){return zu},elastic:mf,back:jf,bounce:function(){return Sc}}),Rd=t.map({in:P,out:Ru,"in-out":Ts,"out-in":function(re){return Ts(Ru(re))}});t.ease=function(re){var he=re.indexOf("-"),we=he>=0?re.slice(0,he):re,Le=he>=0?re.slice(he+1):"in";return we=Th.get(we)||wh,Le=Rd.get(Le)||P,fp(Le(we.apply(null,i.call(arguments,1))))};function fp(re){return function(he){return he<=0?0:he>=1?1:re(he)}}function Ru(re){return function(he){return 1-re(1-he)}}function Ts(re){return function(he){return .5*(he<.5?re(2*he):2-re(2-2*he))}}function Ah(re){return re*re}function vf(re){return re*re*re}function Ac(re){if(re<=0)return 0;if(re>=1)return 1;var he=re*re,we=he*re;return 4*(re<.5?we:3*(re-he)+we-.75)}function Mh(re){return function(he){return Math.pow(he,re)}}function Mc(re){return 1-Math.cos(re*Ee)}function $c(re){return Math.pow(2,10*(re-1))}function zu(re){return 1-Math.sqrt(1-re*re)}function mf(re,he){var we;return arguments.length<2&&(he=.45),arguments.length?we=he/Ae*Math.asin(1/re):(re=1,we=he/4),function(Le){return 1+re*Math.pow(2,-10*Le)*Math.sin((Le-we)*Ae/he)}}function jf(re){return re||(re=1.70158),function(he){return he*he*((re+1)*he-re)}}function Sc(re){return re<1/2.75?7.5625*re*re:re<2/2.75?7.5625*(re-=1.5/2.75)*re+.75:re<2.5/2.75?7.5625*(re-=2.25/2.75)*re+.9375:7.5625*(re-=2.625/2.75)*re+.984375}t.interpolateHcl=id;function id(re,he){re=t.hcl(re),he=t.hcl(he);var we=re.h,Le=re.c,Re=re.l,Ne=he.h-we,ut=he.c-Le,et=he.l-Re;return isNaN(ut)&&(ut=0,Le=isNaN(Le)?he.c:Le),isNaN(Ne)?(Ne=0,we=isNaN(we)?he.h:we):Ne>180?Ne-=360:Ne<-180&&(Ne+=360),function(_t){return oi(we+Ne*_t,Le+ut*_t,Re+et*_t)+""}}t.interpolateHsl=Uf;function Uf(re,he){re=t.hsl(re),he=t.hsl(he);var we=re.h,Le=re.s,Re=re.l,Ne=he.h-we,ut=he.s-Le,et=he.l-Re;return isNaN(ut)&&(ut=0,Le=isNaN(Le)?he.s:Le),isNaN(Ne)?(Ne=0,we=isNaN(we)?he.h:we):Ne>180?Ne-=360:Ne<-180&&(Ne+=360),function(_t){return Tr(we+Ne*_t,Le+ut*_t,Re+et*_t)+""}}t.interpolateLab=zd;function zd(re,he){re=t.lab(re),he=t.lab(he);var we=re.l,Le=re.a,Re=re.b,Ne=he.l-we,ut=he.a-Le,et=he.b-Re;return function(_t){return xi(we+Ne*_t,Le+ut*_t,Re+et*_t)+""}}t.interpolateRound=Bu;function Bu(re,he){return he-=re,function(we){return Math.round(re+he*we)}}t.transform=function(re){var he=o.createElementNS(t.ns.prefix.svg,"g");return(t.transform=function(we){if(we!=null){he.setAttribute("transform",we);var Le=he.transform.baseVal.consolidate()}return new Sh(Le?Le.matrix:gf)})(re)};function Sh(re){var he=[re.a,re.b],we=[re.c,re.d],Le=qf(he),Re=_u(he,we),Ne=qf(Dl(we,he,-Re))||0;he[0]*we[1]<we[0]*he[1]&&(he[0]*=-1,he[1]*=-1,Le*=-1,Re*=-1),this.rotate=(Le?Math.atan2(he[1],he[0]):Math.atan2(-we[0],we[1]))*Je,this.translate=[re.e,re.f],this.scale=[Le,Ne],this.skew=Ne?Math.atan2(Re,Ne)*Je:0}Sh.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};function _u(re,he){return re[0]*he[0]+re[1]*he[1]}function qf(re){var he=Math.sqrt(_u(re,re));return he&&(re[0]/=he,re[1]/=he),he}function Dl(re,he,we){return re[0]+=we*he[0],re[1]+=we*he[1],re}var gf={a:1,b:0,c:0,d:1,e:0,f:0};t.interpolateTransform=Ec;function Ou(re){return re.length?re.pop()+",":""}function yf(re,he,we,Le){if(re[0]!==he[0]||re[1]!==he[1]){var Re=we.push("translate(",null,",",null,")");Le.push({i:Re-4,x:ms(re[0],he[0])},{i:Re-2,x:ms(re[1],he[1])})}else(he[0]||he[1])&&we.push("translate("+he+")")}function _f(re,he,we,Le){re!==he?(re-he>180?he+=360:he-re>180&&(re+=360),Le.push({i:we.push(Ou(we)+"rotate(",null,")")-2,x:ms(re,he)})):he&&we.push(Ou(we)+"rotate("+he+")")}function Vf(re,he,we,Le){re!==he?Le.push({i:we.push(Ou(we)+"skewX(",null,")")-2,x:ms(re,he)}):he&&we.push(Ou(we)+"skewX("+he+")")}function Eh(re,he,we,Le){if(re[0]!==he[0]||re[1]!==he[1]){var Re=we.push(Ou(we)+"scale(",null,",",null,")");Le.push({i:Re-4,x:ms(re[0],he[0])},{i:Re-2,x:ms(re[1],he[1])})}else(he[0]!==1||he[1]!==1)&&we.push(Ou(we)+"scale("+he+")")}function Ec(re,he){var we=[],Le=[];return re=t.transform(re),he=t.transform(he),yf(re.translate,he.translate,we,Le),_f(re.rotate,he.rotate,we,Le),Vf(re.skew,he.skew,we,Le),Eh(re.scale,he.scale,we,Le),re=he=null,function(Re){for(var Ne=-1,ut=Le.length,et;++Ne<ut;)we[(et=Le[Ne]).i]=et.x(Re);return we.join("")}}function kh(re,he){return he=(he-=re=+re)||1/he,function(we){return(we-re)/he}}function rc(re,he){return he=(he-=re=+re)||1/he,function(we){return Math.max(0,Math.min(1,(we-re)/he))}}t.layout={},t.layout.bundle=function(){return function(re){for(var he=[],we=-1,Le=re.length;++we<Le;)he.push(Bd(re[we]));return he}};function Bd(re){for(var he=re.source,we=re.target,Le=xu(he,we),Re=[he];he!==Le;)he=he.parent,Re.push(he);for(var Ne=Re.length;we!==Le;)Re.splice(Ne,0,we),we=we.parent;return Re}function xl(re){for(var he=[],we=re.parent;we!=null;)he.push(re),re=we,we=we.parent;return he.push(re),he}function xu(re,he){if(re===he)return re;for(var we=xl(re),Le=xl(he),Re=we.pop(),Ne=Le.pop(),ut=null;Re===Ne;)ut=Re,Re=we.pop(),Ne=Le.pop();return ut}t.layout.chord=function(){var re={},he,we,Le,Re,Ne=0,ut,et,_t;function Ft(){var lr={},sr=[],Fr=t.range(Re),Or=[],hr,wr,Cr,Nr,jr;for(he=[],we=[],hr=0,Nr=-1;++Nr<Re;){for(wr=0,jr=-1;++jr<Re;)wr+=Le[Nr][jr];sr.push(wr),Or.push(t.range(Re)),hr+=wr}for(ut&&Fr.sort(function(Nn,ka){return ut(sr[Nn],sr[ka])}),et&&Or.forEach(function(Nn,ka){Nn.sort(function(Sn,ko){return et(Le[ka][Sn],Le[ka][ko])})}),hr=(Ae-Ne*Re)/hr,wr=0,Nr=-1;++Nr<Re;){for(Cr=wr,jr=-1;++jr<Re;){var Ar=Fr[Nr],Ci=Or[Ar][jr],Gi=Le[Ar][Ci],aa=wr,ga=wr+=Gi*hr;lr[Ar+"-"+Ci]={index:Ar,subindex:Ci,startAngle:aa,endAngle:ga,value:Gi}}we[Ar]={index:Ar,startAngle:Cr,endAngle:wr,value:sr[Ar]},wr+=Ne}for(Nr=-1;++Nr<Re;)for(jr=Nr-1;++jr<Re;){var qa=lr[Nr+"-"+jr],Fa=lr[jr+"-"+Nr];(qa.value||Fa.value)&&he.push(qa.value<Fa.value?{source:Fa,target:qa}:{source:qa,target:Fa})}_t&&Rt()}function Rt(){he.sort(function(lr,sr){return _t((lr.source.value+lr.target.value)/2,(sr.source.value+sr.target.value)/2)})}return re.matrix=function(lr){return arguments.length?(Re=(Le=lr)&&Le.length,he=we=null,re):Le},re.padding=function(lr){return arguments.length?(Ne=lr,he=we=null,re):Ne},re.sortGroups=function(lr){return arguments.length?(ut=lr,he=we=null,re):ut},re.sortSubgroups=function(lr){return arguments.length?(et=lr,he=null,re):et},re.sortChords=function(lr){return arguments.length?(_t=lr,he&&Rt(),re):_t},re.chords=function(){return he||Ft(),he},re.groups=function(){return we||Ft(),we},re},t.layout.force=function(){var re={},he=t.dispatch("start","tick","end"),we,Le=[1,1],Re,Ne,ut=.9,et=Hf,_t=Od,Ft=-30,Rt=ad,lr=.1,sr=.64,Fr=[],Or=[],hr,wr,Cr;function Nr(Ar){return function(Ci,Gi,aa,ga){if(Ci.point!==Ar){var qa=Ci.cx-Ar.x,Fa=Ci.cy-Ar.y,Nn=ga-Gi,ka=qa*qa+Fa*Fa;if(Nn*Nn/sr<ka){if(ka<Rt){var Sn=Ci.charge/ka;Ar.px-=qa*Sn,Ar.py-=Fa*Sn}return!0}if(Ci.point&&ka&&ka<Rt){var Sn=Ci.pointCharge/ka;Ar.px-=qa*Sn,Ar.py-=Fa*Sn}}return!Ci.charge}}re.tick=function(){if((Ne*=.99)<.005)return we=null,he.end({type:"end",alpha:Ne=0}),!0;var Ar=Fr.length,Ci=Or.length,Gi,aa,ga,qa,Fa,Nn,ka,Sn,ko;for(aa=0;aa<Ci;++aa)ga=Or[aa],qa=ga.source,Fa=ga.target,Sn=Fa.x-qa.x,ko=Fa.y-qa.y,(Nn=Sn*Sn+ko*ko)&&(Nn=Ne*wr[aa]*((Nn=Math.sqrt(Nn))-hr[aa])/Nn,Sn*=Nn,ko*=Nn,Fa.x-=Sn*(ka=qa.weight+Fa.weight?qa.weight/(qa.weight+Fa.weight):.5),Fa.y-=ko*ka,qa.x+=Sn*(ka=1-ka),qa.y+=ko*ka);if((ka=Ne*lr)&&(Sn=Le[0]/2,ko=Le[1]/2,aa=-1,ka))for(;++aa<Ar;)ga=Fr[aa],ga.x+=(Sn-ga.x)*ka,ga.y+=(ko-ga.y)*ka;if(Ft)for(Cc(Gi=t.geom.quadtree(Fr),Ne,Cr),aa=-1;++aa<Ar;)(ga=Fr[aa]).fixed||Gi.visit(Nr(ga));for(aa=-1;++aa<Ar;)ga=Fr[aa],ga.fixed?(ga.x=ga.px,ga.y=ga.py):(ga.x-=(ga.px-(ga.px=ga.x))*ut,ga.y-=(ga.py-(ga.py=ga.y))*ut);he.tick({type:"tick",alpha:Ne})},re.nodes=function(Ar){return arguments.length?(Fr=Ar,re):Fr},re.links=function(Ar){return arguments.length?(Or=Ar,re):Or},re.size=function(Ar){return arguments.length?(Le=Ar,re):Le},re.linkDistance=function(Ar){return arguments.length?(et=typeof Ar=="function"?Ar:+Ar,re):et},re.distance=re.linkDistance,re.linkStrength=function(Ar){return arguments.length?(_t=typeof Ar=="function"?Ar:+Ar,re):_t},re.friction=function(Ar){return arguments.length?(ut=+Ar,re):ut},re.charge=function(Ar){return arguments.length?(Ft=typeof Ar=="function"?Ar:+Ar,re):Ft},re.chargeDistance=function(Ar){return arguments.length?(Rt=Ar*Ar,re):Math.sqrt(Rt)},re.gravity=function(Ar){return arguments.length?(lr=+Ar,re):lr},re.theta=function(Ar){return arguments.length?(sr=Ar*Ar,re):Math.sqrt(sr)},re.alpha=function(Ar){return arguments.length?(Ar=+Ar,Ne?Ar>0?Ne=Ar:(we.c=null,we.t=NaN,we=null,he.end({type:"end",alpha:Ne=0})):Ar>0&&(he.start({type:"start",alpha:Ne=Ar}),we=ba(re.tick)),re):Ne},re.start=function(){var Ar,Ci=Fr.length,Gi=Or.length,aa=Le[0],ga=Le[1],qa,Fa;for(Ar=0;Ar<Ci;++Ar)(Fa=Fr[Ar]).index=Ar,Fa.weight=0;for(Ar=0;Ar<Gi;++Ar)Fa=Or[Ar],typeof Fa.source=="number"&&(Fa.source=Fr[Fa.source]),typeof Fa.target=="number"&&(Fa.target=Fr[Fa.target]),++Fa.source.weight,++Fa.target.weight;for(Ar=0;Ar<Ci;++Ar)Fa=Fr[Ar],isNaN(Fa.x)&&(Fa.x=Nn("x",aa)),isNaN(Fa.y)&&(Fa.y=Nn("y",ga)),isNaN(Fa.px)&&(Fa.px=Fa.x),isNaN(Fa.py)&&(Fa.py=Fa.y);if(hr=[],typeof et=="function")for(Ar=0;Ar<Gi;++Ar)hr[Ar]=+et.call(this,Or[Ar],Ar);else for(Ar=0;Ar<Gi;++Ar)hr[Ar]=et;if(wr=[],typeof _t=="function")for(Ar=0;Ar<Gi;++Ar)wr[Ar]=+_t.call(this,Or[Ar],Ar);else for(Ar=0;Ar<Gi;++Ar)wr[Ar]=_t;if(Cr=[],typeof Ft=="function")for(Ar=0;Ar<Ci;++Ar)Cr[Ar]=+Ft.call(this,Fr[Ar],Ar);else for(Ar=0;Ar<Ci;++Ar)Cr[Ar]=Ft;function Nn(ka,Sn){if(!qa){for(qa=new Array(Ci),Ho=0;Ho<Ci;++Ho)qa[Ho]=[];for(Ho=0;Ho<Gi;++Ho){var ko=Or[Ho];qa[ko.source.index].push(ko.target),qa[ko.target.index].push(ko.source)}}for(var Vs=qa[Ar],Ho=-1,fa=Vs.length,jn;++Ho<fa;)if(!isNaN(jn=Vs[Ho][ka]))return jn;return Math.random()*Sn}return re.resume()},re.resume=function(){return re.alpha(.1)},re.stop=function(){return re.alpha(0)},re.drag=function(){if(Re||(Re=t.behavior.drag().origin(P).on("dragstart.force",kc).on("drag.force",jr).on("dragend.force",hl)),!arguments.length)return Re;this.on("mouseover.force",Gf).on("mouseout.force",Nu).call(Re)};function jr(Ar){Ar.px=t.event.x,Ar.py=t.event.y,re.resume()}return t.rebind(re,he,"on")};function kc(re){re.fixed|=2}function hl(re){re.fixed&=-7}function Gf(re){re.fixed|=4,re.px=re.x,re.py=re.y}function Nu(re){re.fixed&=-5}function Cc(re,he,we){var Le=0,Re=0;if(re.charge=0,!re.leaf)for(var Ne=re.nodes,ut=Ne.length,et=-1,_t;++et<ut;)_t=Ne[et],_t!=null&&(Cc(_t,he,we),re.charge+=_t.charge,Le+=_t.charge*_t.cx,Re+=_t.charge*_t.cy);if(re.point){re.leaf||(re.point.x+=Math.random()-.5,re.point.y+=Math.random()-.5);var Ft=he*we[re.point.index];re.charge+=re.pointCharge=Ft,Le+=Ft*re.point.x,Re+=Ft*re.point.y}re.cx=Le/re.charge,re.cy=Re/re.charge}var Hf=20,Od=1,ad=1/0;t.layout.hierarchy=function(){var re=nd,he=Nd,we=xf;function Le(Re){var Ne=[Re],ut=[],et;for(Re.depth=0;(et=Ne.pop())!=null;)if(ut.push(et),(Ft=he.call(Le,et,et.depth))&&(_t=Ft.length)){for(var _t,Ft,Rt;--_t>=0;)Ne.push(Rt=Ft[_t]),Rt.parent=et,Rt.depth=et.depth+1;we&&(et.value=0),et.children=Ft}else we&&(et.value=+we.call(Le,et,et.depth)||0),delete et.children;return Vl(Re,function(lr){var sr,Fr;re&&(sr=lr.children)&&sr.sort(re),we&&(Fr=lr.parent)&&(Fr.value+=lr.value)}),ut}return Le.sort=function(Re){return arguments.length?(re=Re,Le):re},Le.children=function(Re){return arguments.length?(he=Re,Le):he},Le.value=function(Re){return arguments.length?(we=Re,Le):we},Le.revalue=function(Re){return we&&(ql(Re,function(Ne){Ne.children&&(Ne.value=0)}),Vl(Re,function(Ne){var ut;Ne.children||(Ne.value=+we.call(Le,Ne,Ne.depth)||0),(ut=Ne.parent)&&(ut.value+=Ne.value)})),Re},Le};function ju(re,he){return t.rebind(re,he,"sort","children","value"),re.nodes=re,re.links=nu,re}function ql(re,he){for(var we=[re];(re=we.pop())!=null;)if(he(re),(Re=re.children)&&(Le=Re.length))for(var Le,Re;--Le>=0;)we.push(Re[Le])}function Vl(re,he){for(var we=[re],Le=[];(re=we.pop())!=null;)if(Le.push(re),(ut=re.children)&&(Ne=ut.length))for(var Re=-1,Ne,ut;++Re<Ne;)we.push(ut[Re]);for(;(re=Le.pop())!=null;)he(re)}function Nd(re){return re.children}function xf(re){return re.value}function nd(re,he){return he.value-re.value}function nu(re){return t.merge(re.map(function(he){return(he.children||[]).map(function(we){return{source:he,target:we}})}))}t.layout.partition=function(){var re=t.layout.hierarchy(),he=[1,1];function we(Ne,ut,et,_t){var Ft=Ne.children;if(Ne.x=ut,Ne.y=Ne.depth*_t,Ne.dx=et,Ne.dy=_t,Ft&&(lr=Ft.length)){var Rt=-1,lr,sr,Fr;for(et=Ne.value?et/Ne.value:0;++Rt<lr;)we(sr=Ft[Rt],ut,Fr=sr.value*et,_t),ut+=Fr}}function Le(Ne){var ut=Ne.children,et=0;if(ut&&(Ft=ut.length))for(var _t=-1,Ft;++_t<Ft;)et=Math.max(et,Le(ut[_t]));return 1+et}function Re(Ne,ut){var et=re.call(this,Ne,ut);return we(et[0],0,he[0],he[1]/Le(et[0])),et}return Re.size=function(Ne){return arguments.length?(he=Ne,Re):he},ju(Re,re)},t.layout.pie=function(){var re=Number,he=Wc,we=0,Le=Ae,Re=0;function Ne(ut){var et=ut.length,_t=ut.map(function(Nr,jr){return+re.call(Ne,Nr,jr)}),Ft=+(typeof we=="function"?we.apply(this,arguments):we),Rt=(typeof Le=="function"?Le.apply(this,arguments):Le)-Ft,lr=Math.min(Math.abs(Rt)/et,+(typeof Re=="function"?Re.apply(this,arguments):Re)),sr=lr*(Rt<0?-1:1),Fr=t.sum(_t),Or=Fr?(Rt-et*sr)/Fr:0,hr=t.range(et),wr=[],Cr;return he!=null&&hr.sort(he===Wc?function(Nr,jr){return _t[jr]-_t[Nr]}:function(Nr,jr){return he(ut[Nr],ut[jr])}),hr.forEach(function(Nr){wr[Nr]={data:ut[Nr],value:Cr=_t[Nr],startAngle:Ft,endAngle:Ft+=Cr*Or+sr,padAngle:lr}}),wr}return Ne.value=function(ut){return arguments.length?(re=ut,Ne):re},Ne.sort=function(ut){return arguments.length?(he=ut,Ne):he},Ne.startAngle=function(ut){return arguments.length?(we=ut,Ne):we},Ne.endAngle=function(ut){return arguments.length?(Le=ut,Ne):Le},Ne.padAngle=function(ut){return arguments.length?(Re=ut,Ne):Re},Ne};var Wc={};t.layout.stack=function(){var re=P,he=Lc,we=wf,Le=jd,Re=$f,Ne=bf;function ut(et,_t){if(!(Or=et.length))return et;var Ft=et.map(function(Nr,jr){return re.call(ut,Nr,jr)}),Rt=Ft.map(function(Nr){return Nr.map(function(jr,Ar){return[Re.call(ut,jr,Ar),Ne.call(ut,jr,Ar)]})}),lr=he.call(ut,Rt,_t);Ft=t.permute(Ft,lr),Rt=t.permute(Rt,lr);var sr=we.call(ut,Rt,_t),Fr=Ft[0].length,Or,hr,wr,Cr;for(wr=0;wr<Fr;++wr)for(Le.call(ut,Ft[0][wr],Cr=sr[wr],Rt[0][wr][1]),hr=1;hr<Or;++hr)Le.call(ut,Ft[hr][wr],Cr+=Rt[hr-1][wr][1],Rt[hr][wr][1]);return et}return ut.values=function(et){return arguments.length?(re=et,ut):re},ut.order=function(et){return arguments.length?(he=typeof et=="function"?et:Yc.get(et)||Lc,ut):he},ut.offset=function(et){return arguments.length?(we=typeof et=="function"?et:Dc.get(et)||wf,ut):we},ut.x=function(et){return arguments.length?(Re=et,ut):Re},ut.y=function(et){return arguments.length?(Ne=et,ut):Ne},ut.out=function(et){return arguments.length?(Le=et,ut):Le},ut};function $f(re){return re.x}function bf(re){return re.y}function jd(re,he,we){re.y0=he,re.y=we}var Yc=t.map({"inside-out":function(re){var he=re.length,we,Le,Re=re.map(od),Ne=re.map(Wf),ut=t.range(he).sort(function(lr,sr){return Re[lr]-Re[sr]}),et=0,_t=0,Ft=[],Rt=[];for(we=0;we<he;++we)Le=ut[we],et<_t?(et+=Ne[Le],Ft.push(Le)):(_t+=Ne[Le],Rt.push(Le));return Rt.reverse().concat(Ft)},reverse:function(re){return t.range(re.length).reverse()},default:Lc}),Dc=t.map({silhouette:function(re){var he=re.length,we=re[0].length,Le=[],Re=0,Ne,ut,et,_t=[];for(ut=0;ut<we;++ut){for(Ne=0,et=0;Ne<he;Ne++)et+=re[Ne][ut][1];et>Re&&(Re=et),Le.push(et)}for(ut=0;ut<we;++ut)_t[ut]=(Re-Le[ut])/2;return _t},wiggle:function(re){var he=re.length,we=re[0],Le=we.length,Re,Ne,ut,et,_t,Ft,Rt,lr,sr,Fr=[];for(Fr[0]=lr=sr=0,Ne=1;Ne<Le;++Ne){for(Re=0,et=0;Re<he;++Re)et+=re[Re][Ne][1];for(Re=0,_t=0,Rt=we[Ne][0]-we[Ne-1][0];Re<he;++Re){for(ut=0,Ft=(re[Re][Ne][1]-re[Re][Ne-1][1])/(2*Rt);ut<Re;++ut)Ft+=(re[ut][Ne][1]-re[ut][Ne-1][1])/Rt;_t+=Ft*re[Re][Ne][1]}Fr[Ne]=lr-=et?_t/et*Rt:0,lr<sr&&(sr=lr)}for(Ne=0;Ne<Le;++Ne)Fr[Ne]-=sr;return Fr},expand:function(re){var he=re.length,we=re[0].length,Le=1/he,Re,Ne,ut,et=[];for(Ne=0;Ne<we;++Ne){for(Re=0,ut=0;Re<he;Re++)ut+=re[Re][Ne][1];if(ut)for(Re=0;Re<he;Re++)re[Re][Ne][1]/=ut;else for(Re=0;Re<he;Re++)re[Re][Ne][1]=Le}for(Ne=0;Ne<we;++Ne)et[Ne]=0;return et},zero:wf});function Lc(re){return t.range(re.length)}function wf(re){for(var he=-1,we=re[0].length,Le=[];++he<we;)Le[he]=0;return Le}function od(re){for(var he=1,we=0,Le=re[0][1],Re,Ne=re.length;he<Ne;++he)(Re=re[he][1])>Le&&(we=he,Le=Re);return we}function Wf(re){return re.reduce(Xc,0)}function Xc(re,he){return re+he[1]}t.layout.histogram=function(){var re=!0,he=Number,we=ic,Le=Yf;function Re(Ne,sr){for(var et=[],_t=Ne.map(he,this),Ft=we.call(this,_t,sr),Rt=Le.call(this,Ft,_t,sr),lr,sr=-1,Fr=_t.length,Or=Rt.length-1,hr=re?1:1/Fr,wr;++sr<Or;)lr=et[sr]=[],lr.dx=Rt[sr+1]-(lr.x=Rt[sr]),lr.y=0;if(Or>0)for(sr=-1;++sr<Fr;)wr=_t[sr],wr>=Ft[0]&&wr<=Ft[1]&&(lr=et[t.bisect(Rt,wr,1,Or)-1],lr.y+=hr,lr.push(Ne[sr]));return et}return Re.value=function(Ne){return arguments.length?(he=Ne,Re):he},Re.range=function(Ne){return arguments.length?(we=wt(Ne),Re):we},Re.bins=function(Ne){return arguments.length?(Le=typeof Ne=="number"?function(ut){return Zc(ut,Ne)}:wt(Ne),Re):Le},Re.frequency=function(Ne){return arguments.length?(re=!!Ne,Re):re},Re};function Yf(re,he){return Zc(re,Math.ceil(Math.log(he.length)/Math.LN2+1))}function Zc(re,he){for(var we=-1,Le=+re[0],Re=(re[1]-Le)/he,Ne=[];++we<=he;)Ne[we]=Re*we+Le;return Ne}function ic(re){return[t.min(re),t.max(re)]}t.layout.pack=function(){var re=t.layout.hierarchy().sort(Tf),he=0,we=[1,1],Le;function Re(Ne,ut){var et=re.call(this,Ne,ut),_t=et[0],Ft=we[0],Rt=we[1],lr=Le==null?Math.sqrt:typeof Le=="function"?Le:function(){return Le};if(_t.x=_t.y=0,Vl(_t,function(Fr){Fr.r=+lr(Fr.value)}),Vl(_t,Ud),he){var sr=he*(Le?1:Math.max(2*_t.r/Ft,2*_t.r/Rt))/2;Vl(_t,function(Fr){Fr.r+=sr}),Vl(_t,Ud),Vl(_t,function(Fr){Fr.r-=sr})}return Dh(_t,Ft/2,Rt/2,Le?1:1/Math.max(2*_t.r/Ft,2*_t.r/Rt)),et}return Re.size=function(Ne){return arguments.length?(we=Ne,Re):we},Re.radius=function(Ne){return arguments.length?(Le=Ne==null||typeof Ne=="function"?Ne:+Ne,Re):Le},Re.padding=function(Ne){return arguments.length?(he=+Ne,Re):he},ju(Re,re)};function Tf(re,he){return re.value-he.value}function Xf(re,he){var we=re._pack_next;re._pack_next=he,he._pack_prev=re,he._pack_next=we,we._pack_prev=he}function sd(re,he){re._pack_next=he,he._pack_prev=re}function Ch(re,he){var we=he.x-re.x,Le=he.y-re.y,Re=re.r+he.r;return .999*Re*Re>we*we+Le*Le}function Ud(re){if(!(he=re.children)||!(sr=he.length))return;var he,we=1/0,Le=-1/0,Re=1/0,Ne=-1/0,ut,et,_t,Ft,Rt,lr,sr;function Fr(Ar){we=Math.min(Ar.x-Ar.r,we),Le=Math.max(Ar.x+Ar.r,Le),Re=Math.min(Ar.y-Ar.r,Re),Ne=Math.max(Ar.y+Ar.r,Ne)}if(he.forEach(Zf),ut=he[0],ut.x=-ut.r,ut.y=0,Fr(ut),sr>1&&(et=he[1],et.x=et.r,et.y=0,Fr(et),sr>2))for(_t=he[2],Js(ut,et,_t),Fr(_t),Xf(ut,_t),ut._pack_prev=_t,Xf(_t,et),et=ut._pack_next,Ft=3;Ft<sr;Ft++){Js(ut,et,_t=he[Ft]);var Or=0,hr=1,wr=1;for(Rt=et._pack_next;Rt!==et;Rt=Rt._pack_next,hr++)if(Ch(Rt,_t)){Or=1;break}if(Or==1)for(lr=ut._pack_prev;lr!==Rt._pack_prev&&!Ch(lr,_t);lr=lr._pack_prev,wr++);Or?(hr<wr||hr==wr&&et.r<ut.r?sd(ut,et=Rt):sd(ut=lr,et),Ft--):(Xf(ut,_t),et=_t,Fr(_t))}var Cr=(we+Le)/2,Nr=(Re+Ne)/2,jr=0;for(Ft=0;Ft<sr;Ft++)_t=he[Ft],_t.x-=Cr,_t.y-=Nr,jr=Math.max(jr,_t.r+Math.sqrt(_t.x*_t.x+_t.y*_t.y));re.r=jr,he.forEach(ld)}function Zf(re){re._pack_next=re._pack_prev=re}function ld(re){delete re._pack_next,delete re._pack_prev}function Dh(re,he,we,Le){var Re=re.children;if(re.x=he+=Le*re.x,re.y=we+=Le*re.y,re.r*=Le,Re)for(var Ne=-1,ut=Re.length;++Ne<ut;)Dh(Re[Ne],he,we,Le)}function Js(re,he,we){var Le=re.r+we.r,Re=he.x-re.x,Ne=he.y-re.y;if(Le&&(Re||Ne)){var ut=he.r+we.r,et=Re*Re+Ne*Ne;ut*=ut,Le*=Le;var _t=.5+(Le-ut)/(2*et),Ft=Math.sqrt(Math.max(0,2*ut*(Le+et)-(Le-=et)*Le-ut*ut))/(2*et);we.x=re.x+_t*Re+Ft*Ne,we.y=re.y+_t*Ne-Ft*Re}else we.x=re.x+Le,we.y=re.y}t.layout.tree=function(){var re=t.layout.hierarchy().sort(null).value(null),he=ou,we=[1,1],Le=null;function Re(Rt,lr){var sr=re.call(this,Rt,lr),Fr=sr[0],Or=Ne(Fr);if(Vl(Or,ut),Or.parent.m=-Or.z,ql(Or,et),Le)ql(Fr,Ft);else{var hr=Fr,wr=Fr,Cr=Fr;ql(Fr,function(Ci){Ci.x<hr.x&&(hr=Ci),Ci.x>wr.x&&(wr=Ci),Ci.depth>Cr.depth&&(Cr=Ci)});var Nr=he(hr,wr)/2-hr.x,jr=we[0]/(wr.x+he(wr,hr)/2+Nr),Ar=we[1]/(Cr.depth||1);ql(Fr,function(Ci){Ci.x=(Ci.x+Nr)*jr,Ci.y=Ci.depth*Ar})}return sr}function Ne(Rt){for(var lr={A:null,children:[Rt]},sr=[lr],Fr;(Fr=sr.pop())!=null;)for(var Or=Fr.children,hr,wr=0,Cr=Or.length;wr<Cr;++wr)sr.push((Or[wr]=hr={_:Or[wr],parent:Fr,children:(hr=Or[wr].children)&&hr.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:wr}).a=hr);return lr.children[0]}function ut(Rt){var lr=Rt.children,sr=Rt.parent.children,Fr=Rt.i?sr[Rt.i-1]:null;if(lr.length){Af(Rt);var Or=(lr[0].z+lr[lr.length-1].z)/2;Fr?(Rt.z=Fr.z+he(Rt._,Fr._),Rt.m=Rt.z-Or):Rt.z=Or}else Fr&&(Rt.z=Fr.z+he(Rt._,Fr._));Rt.parent.A=_t(Rt,Fr,Rt.parent.A||sr[0])}function et(Rt){Rt._.x=Rt.z+Rt.parent.m,Rt.m+=Rt.parent.m}function _t(Rt,lr,sr){if(lr){for(var Fr=Rt,Or=Rt,hr=lr,wr=Fr.parent.children[0],Cr=Fr.m,Nr=Or.m,jr=hr.m,Ar=wr.m,Ci;hr=Lh(hr),Fr=Kf(Fr),hr&&Fr;)wr=Kf(wr),Or=Lh(Or),Or.a=Rt,Ci=hr.z+jr-Fr.z-Cr+he(hr._,Fr._),Ci>0&&(Jf(nt(hr,Rt,sr),Rt,Ci),Cr+=Ci,Nr+=Ci),jr+=hr.m,Cr+=Fr.m,Ar+=wr.m,Nr+=Or.m;hr&&!Lh(Or)&&(Or.t=hr,Or.m+=jr-Nr),Fr&&!Kf(wr)&&(wr.t=Fr,wr.m+=Cr-Ar,sr=Rt)}return sr}function Ft(Rt){Rt.x*=we[0],Rt.y=Rt.depth*we[1]}return Re.separation=function(Rt){return arguments.length?(he=Rt,Re):he},Re.size=function(Rt){return arguments.length?(Le=(we=Rt)==null?Ft:null,Re):Le?null:we},Re.nodeSize=function(Rt){return arguments.length?(Le=(we=Rt)==null?null:Ft,Re):Le?we:null},ju(Re,re)};function ou(re,he){return re.parent==he.parent?1:2}function Kf(re){var he=re.children;return he.length?he[0]:re.t}function Lh(re){var he=re.children,we;return(we=he.length)?he[we-1]:re.t}function Jf(re,he,we){var Le=we/(he.i-re.i);he.c-=Le,he.s+=we,re.c+=Le,he.z+=we,he.m+=we}function Af(re){for(var he=0,we=0,Le=re.children,Re=Le.length,Ne;--Re>=0;)Ne=Le[Re],Ne.z+=he,Ne.m+=he,he+=Ne.s+(we+=Ne.c)}function nt(re,he,we){return re.a.parent===he.parent?re.a:we}t.layout.cluster=function(){var re=t.layout.hierarchy().sort(null).value(null),he=ou,we=[1,1],Le=!1;function Re(Ne,ut){var et=re.call(this,Ne,ut),_t=et[0],Ft,Rt=0;Vl(_t,function(hr){var wr=hr.children;wr&&wr.length?(hr.x=Kt(wr),hr.y=Tt(wr)):(hr.x=Ft?Rt+=he(hr,Ft):0,hr.y=0,Ft=hr)});var lr=Bt(_t),sr=yr(_t),Fr=lr.x-he(lr,sr)/2,Or=sr.x+he(sr,lr)/2;return Vl(_t,Le?function(hr){hr.x=(hr.x-_t.x)*we[0],hr.y=(_t.y-hr.y)*we[1]}:function(hr){hr.x=(hr.x-Fr)/(Or-Fr)*we[0],hr.y=(1-(_t.y?hr.y/_t.y:1))*we[1]}),et}return Re.separation=function(Ne){return arguments.length?(he=Ne,Re):he},Re.size=function(Ne){return arguments.length?(Le=(we=Ne)==null,Re):Le?null:we},Re.nodeSize=function(Ne){return arguments.length?(Le=(we=Ne)!=null,Re):Le?we:null},ju(Re,re)};function Tt(re){return 1+t.max(re,function(he){return he.y})}function Kt(re){return re.reduce(function(he,we){return he+we.x},0)/re.length}function Bt(re){var he=re.children;return he&&he.length?Bt(he[0]):re}function yr(re){var he=re.children,we;return he&&(we=he.length)?yr(he[we-1]):re}t.layout.treemap=function(){var re=t.layout.hierarchy(),he=Math.round,we=[1,1],Le=null,Re=zr,Ne=!1,ut,et="squarify",_t=.5*(1+Math.sqrt(5));function Ft(hr,wr){for(var Cr=-1,Nr=hr.length,jr,Ar;++Cr<Nr;)Ar=(jr=hr[Cr]).value*(wr<0?0:wr),jr.area=isNaN(Ar)||Ar<=0?0:Ar}function Rt(hr){var wr=hr.children;if(wr&&wr.length){var Cr=Re(hr),Nr=[],jr=wr.slice(),Ar,Ci=1/0,Gi,aa=et==="slice"?Cr.dx:et==="dice"?Cr.dy:et==="slice-dice"?hr.depth&1?Cr.dy:Cr.dx:Math.min(Cr.dx,Cr.dy),ga;for(Ft(jr,Cr.dx*Cr.dy/hr.value),Nr.area=0;(ga=jr.length)>0;)Nr.push(Ar=jr[ga-1]),Nr.area+=Ar.area,et!=="squarify"||(Gi=sr(Nr,aa))<=Ci?(jr.pop(),Ci=Gi):(Nr.area-=Nr.pop().area,Fr(Nr,aa,Cr,!1),aa=Math.min(Cr.dx,Cr.dy),Nr.length=Nr.area=0,Ci=1/0);Nr.length&&(Fr(Nr,aa,Cr,!0),Nr.length=Nr.area=0),wr.forEach(Rt)}}function lr(hr){var wr=hr.children;if(wr&&wr.length){var Cr=Re(hr),Nr=wr.slice(),jr,Ar=[];for(Ft(Nr,Cr.dx*Cr.dy/hr.value),Ar.area=0;jr=Nr.pop();)Ar.push(jr),Ar.area+=jr.area,jr.z!=null&&(Fr(Ar,jr.z?Cr.dx:Cr.dy,Cr,!Nr.length),Ar.length=Ar.area=0);wr.forEach(lr)}}function sr(hr,wr){for(var Cr=hr.area,Nr,jr=0,Ar=1/0,Ci=-1,Gi=hr.length;++Ci<Gi;)(Nr=hr[Ci].area)&&(Nr<Ar&&(Ar=Nr),Nr>jr&&(jr=Nr));return Cr*=Cr,wr*=wr,Cr?Math.max(wr*jr*_t/Cr,Cr/(wr*Ar*_t)):1/0}function Fr(hr,wr,Cr,Nr){var jr=-1,Ar=hr.length,Ci=Cr.x,Gi=Cr.y,aa=wr?he(hr.area/wr):0,ga;if(wr==Cr.dx){for((Nr||aa>Cr.dy)&&(aa=Cr.dy);++jr<Ar;)ga=hr[jr],ga.x=Ci,ga.y=Gi,ga.dy=aa,Ci+=ga.dx=Math.min(Cr.x+Cr.dx-Ci,aa?he(ga.area/aa):0);ga.z=!0,ga.dx+=Cr.x+Cr.dx-Ci,Cr.y+=aa,Cr.dy-=aa}else{for((Nr||aa>Cr.dx)&&(aa=Cr.dx);++jr<Ar;)ga=hr[jr],ga.x=Ci,ga.y=Gi,ga.dx=aa,Gi+=ga.dy=Math.min(Cr.y+Cr.dy-Gi,aa?he(ga.area/aa):0);ga.z=!1,ga.dy+=Cr.y+Cr.dy-Gi,Cr.x+=aa,Cr.dx-=aa}}function Or(hr){var wr=ut||re(hr),Cr=wr[0];return Cr.x=Cr.y=0,Cr.value?(Cr.dx=we[0],Cr.dy=we[1]):Cr.dx=Cr.dy=0,ut&&re.revalue(Cr),Ft([Cr],Cr.dx*Cr.dy/Cr.value),(ut?lr:Rt)(Cr),Ne&&(ut=wr),wr}return Or.size=function(hr){return arguments.length?(we=hr,Or):we},Or.padding=function(hr){if(!arguments.length)return Le;function wr(jr){var Ar=hr.call(Or,jr,jr.depth);return Ar==null?zr(jr):Gr(jr,typeof Ar=="number"?[Ar,Ar,Ar,Ar]:Ar)}function Cr(jr){return Gr(jr,hr)}var Nr;return Re=(Le=hr)==null?zr:(Nr=typeof hr)=="function"?wr:(Nr==="number"&&(hr=[hr,hr,hr,hr]),Cr),Or},Or.round=function(hr){return arguments.length?(he=hr?Math.round:Number,Or):he!=Number},Or.sticky=function(hr){return arguments.length?(Ne=hr,ut=null,Or):Ne},Or.ratio=function(hr){return arguments.length?(_t=hr,Or):_t},Or.mode=function(hr){return arguments.length?(et=hr+"",Or):et},ju(Or,re)};function zr(re){return{x:re.x,y:re.y,dx:re.dx,dy:re.dy}}function Gr(re,he){var we=re.x+he[3],Le=re.y+he[0],Re=re.dx-he[1]-he[3],Ne=re.dy-he[0]-he[2];return Re<0&&(we+=Re/2,Re=0),Ne<0&&(Le+=Ne/2,Ne=0),{x:we,y:Le,dx:Re,dy:Ne}}t.random={normal:function(re,he){var we=arguments.length;return we<2&&(he=1),we<1&&(re=0),function(){var Le,Re,Ne;do Le=Math.random()*2-1,Re=Math.random()*2-1,Ne=Le*Le+Re*Re;while(!Ne||Ne>1);return re+he*Le*Math.sqrt(-2*Math.log(Ne)/Ne)}},logNormal:function(){var re=t.random.normal.apply(t,arguments);return function(){return Math.exp(re())}},bates:function(re){var he=t.random.irwinHall(re);return function(){return he()/re}},irwinHall:function(re){return function(){for(var he=0,we=0;we<re;we++)he+=Math.random();return he}}},t.scale={};function ii(re){var he=re[0],we=re[re.length-1];return he<we?[he,we]:[we,he]}function li(re){return re.rangeExtent?re.rangeExtent():ii(re.range())}function Fi(re,he,we,Le){var Re=we(re[0],re[1]),Ne=Le(he[0],he[1]);return function(ut){return Ne(Re(ut))}}function $r(re,he){var we=0,Le=re.length-1,Re=re[we],Ne=re[Le],ut;return Ne<Re&&(ut=we,we=Le,Le=ut,ut=Re,Re=Ne,Ne=ut),re[we]=he.floor(Re),re[Le]=he.ceil(Ne),re}function ni(re){return re?{floor:function(he){return Math.floor(he/re)*re},ceil:function(he){return Math.ceil(he/re)*re}}:ui}var ui={floor:P,ceil:P};function Di(re,he,we,Le){var Re=[],Ne=[],ut=0,et=Math.min(re.length,he.length)-1;for(re[et]<re[0]&&(re=re.slice().reverse(),he=he.slice().reverse());++ut<=et;)Re.push(we(re[ut-1],re[ut])),Ne.push(Le(he[ut-1],he[ut]));return function(_t){var Ft=t.bisect(re,_t,1,et)-1;return Ne[Ft](Re[Ft](_t))}}t.scale.linear=function(){return Wi([0,1],[0,1],Tc,!1)};function Wi(re,he,we,Le){var Re,Ne;function ut(){var _t=Math.min(re.length,he.length)>2?Di:Fi,Ft=Le?rc:kh;return Re=_t(re,he,Ft,we),Ne=_t(he,re,Ft,Tc),et}function et(_t){return Re(_t)}return et.invert=function(_t){return Ne(_t)},et.domain=function(_t){return arguments.length?(re=_t.map(Number),ut()):re},et.range=function(_t){return arguments.length?(he=_t,ut()):he},et.rangeRound=function(_t){return et.range(_t).interpolate(Bu)},et.clamp=function(_t){return arguments.length?(Le=_t,ut()):Le},et.interpolate=function(_t){return arguments.length?(we=_t,ut()):we},et.ticks=function(_t){return rn(re,_t)},et.tickFormat=function(_t,Ft){return d3_scale_linearTickFormat(re,_t,Ft)},et.nice=function(_t){return Pa(re,_t),ut()},et.copy=function(){return Wi(re,he,we,Le)},ut()}function Oa(re,he){return t.rebind(re,he,"range","rangeRound","interpolate","clamp")}function Pa(re,he){return $r(re,ni(Ja(re,he)[2])),$r(re,ni(Ja(re,he)[2])),re}function Ja(re,he){he==null&&(he=10);var we=ii(re),Le=we[1]-we[0],Re=Math.pow(10,Math.floor(Math.log(Le/he)/Math.LN10)),Ne=he/Le*Re;return Ne<=.15?Re*=10:Ne<=.35?Re*=5:Ne<=.75&&(Re*=2),we[0]=Math.ceil(we[0]/Re)*Re,we[1]=Math.floor(we[1]/Re)*Re+Re*.5,we[2]=Re,we}function rn(re,he){return t.range.apply(t,Ja(re,he))}var Zi={s:1,g:1,p:1,r:1,e:1};function sa(re){return-Math.floor(Math.log(re)/Math.LN10+.01)}function vn(re,he){var we=sa(he[2]);return re in Zi?Math.abs(we-sa(Math.max(v(he[0]),v(he[1]))))+ +(re!=="e"):we-(re==="%")*2}t.scale.log=function(){return Dn(t.scale.linear().domain([0,1]),10,!0,[1,10])};function Dn(re,he,we,Le){function Re(et){return(we?Math.log(et<0?0:et):-Math.log(et>0?0:-et))/Math.log(he)}function Ne(et){return we?Math.pow(he,et):-Math.pow(he,-et)}function ut(et){return re(Re(et))}return ut.invert=function(et){return Ne(re.invert(et))},ut.domain=function(et){return arguments.length?(we=et[0]>=0,re.domain((Le=et.map(Number)).map(Re)),ut):Le},ut.base=function(et){return arguments.length?(he=+et,re.domain(Le.map(Re)),ut):he},ut.nice=function(){var et=$r(Le.map(Re),we?Math:po);return re.domain(et),Le=et.map(Ne),ut},ut.ticks=function(){var et=ii(Le),_t=[],Ft=et[0],Rt=et[1],lr=Math.floor(Re(Ft)),sr=Math.ceil(Re(Rt)),Fr=he%1?2:he;if(isFinite(sr-lr)){if(we){for(;lr<sr;lr++)for(var Or=1;Or<Fr;Or++)_t.push(Ne(lr)*Or);_t.push(Ne(lr))}else for(_t.push(Ne(lr));lr++<sr;)for(var Or=Fr-1;Or>0;Or--)_t.push(Ne(lr)*Or);for(lr=0;_t[lr]<Ft;lr++);for(sr=_t.length;_t[sr-1]>Rt;sr--);_t=_t.slice(lr,sr)}return _t},ut.copy=function(){return Dn(re.copy(),he,we,Le)},Oa(ut,re)}var po={floor:function(re){return-Math.ceil(-re)},ceil:function(re){return-Math.floor(-re)}};t.scale.pow=function(){return zo(t.scale.linear(),1,[0,1])};function zo(re,he,we){var Le=wo(he),Re=wo(1/he);function Ne(ut){return re(Le(ut))}return Ne.invert=function(ut){return Re(re.invert(ut))},Ne.domain=function(ut){return arguments.length?(re.domain((we=ut.map(Number)).map(Le)),Ne):we},Ne.ticks=function(ut){return rn(we,ut)},Ne.tickFormat=function(ut,et){return d3_scale_linearTickFormat(we,ut,et)},Ne.nice=function(ut){return Ne.domain(Pa(we,ut))},Ne.exponent=function(ut){return arguments.length?(Le=wo(he=ut),Re=wo(1/he),re.domain(we.map(Le)),Ne):he},Ne.copy=function(){return zo(re.copy(),he,we)},Oa(Ne,re)}function wo(re){return function(he){return he<0?-Math.pow(-he,re):Math.pow(he,re)}}t.scale.sqrt=function(){return t.scale.pow().exponent(.5)},t.scale.ordinal=function(){return $o([],{t:"range",a:[[]]})};function $o(re,he){var we,Le,Re;function Ne(et){return Le[((we.get(et)||(he.t==="range"?we.set(et,re.push(et)):NaN))-1)%Le.length]}function ut(et,_t){return t.range(re.length).map(function(Ft){return et+_t*Ft})}return Ne.domain=function(et){if(!arguments.length)return re;re=[],we=new M;for(var _t=-1,Ft=et.length,Rt;++_t<Ft;)we.has(Rt=et[_t])||we.set(Rt,re.push(Rt));return Ne[he.t].apply(Ne,he.a)},Ne.range=function(et){return arguments.length?(Le=et,Re=0,he={t:"range",a:arguments},Ne):Le},Ne.rangePoints=function(et,_t){arguments.length<2&&(_t=0);var Ft=et[0],Rt=et[1],lr=re.length<2?(Ft=(Ft+Rt)/2,0):(Rt-Ft)/(re.length-1+_t);return Le=ut(Ft+lr*_t/2,lr),Re=0,he={t:"rangePoints",a:arguments},Ne},Ne.rangeRoundPoints=function(et,_t){arguments.length<2&&(_t=0);var Ft=et[0],Rt=et[1],lr=re.length<2?(Ft=Rt=Math.round((Ft+Rt)/2),0):(Rt-Ft)/(re.length-1+_t)|0;return Le=ut(Ft+Math.round(lr*_t/2+(Rt-Ft-(re.length-1+_t)*lr)/2),lr),Re=0,he={t:"rangeRoundPoints",a:arguments},Ne},Ne.rangeBands=function(et,_t,Ft){arguments.length<2&&(_t=0),arguments.length<3&&(Ft=_t);var Rt=et[1]<et[0],lr=et[Rt-0],sr=et[1-Rt],Fr=(sr-lr)/(re.length-_t+2*Ft);return Le=ut(lr+Fr*Ft,Fr),Rt&&Le.reverse(),Re=Fr*(1-_t),he={t:"rangeBands",a:arguments},Ne},Ne.rangeRoundBands=function(et,_t,Ft){arguments.length<2&&(_t=0),arguments.length<3&&(Ft=_t);var Rt=et[1]<et[0],lr=et[Rt-0],sr=et[1-Rt],Fr=Math.floor((sr-lr)/(re.length-_t+2*Ft));return Le=ut(lr+Math.round((sr-lr-(re.length-_t)*Fr)/2),Fr),Rt&&Le.reverse(),Re=Math.round(Fr*(1-_t)),he={t:"rangeRoundBands",a:arguments},Ne},Ne.rangeBand=function(){return Re},Ne.rangeExtent=function(){return ii(he.a[0])},Ne.copy=function(){return $o(re,he)},Ne.domain(re)}t.scale.category10=function(){return t.scale.ordinal().range(io)},t.scale.category20=function(){return t.scale.ordinal().range(Us)},t.scale.category20b=function(){return t.scale.ordinal().range(gs)},t.scale.category20c=function(){return t.scale.ordinal().range(Go)};var io=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(Fe),Us=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(Fe),gs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(Fe),Go=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(Fe);t.scale.quantile=function(){return ma([],[])};function ma(re,he){var we;function Le(){var Ne=0,ut=he.length;for(we=[];++Ne<ut;)we[Ne-1]=t.quantile(re,Ne/ut);return Re}function Re(Ne){if(!isNaN(Ne=+Ne))return he[t.bisect(we,Ne)]}return Re.domain=function(Ne){return arguments.length?(re=Ne.map(p).filter(g).sort(d),Le()):re},Re.range=function(Ne){return arguments.length?(he=Ne,Le()):he},Re.quantiles=function(){return we},Re.invertExtent=function(Ne){return Ne=he.indexOf(Ne),Ne<0?[NaN,NaN]:[Ne>0?we[Ne-1]:re[0],Ne<we.length?we[Ne]:re[re.length-1]]},Re.copy=function(){return ma(re,he)},Le()}t.scale.quantize=function(){return vo(0,1,[0,1])};function vo(re,he,we){var Le,Re;function Ne(et){return we[Math.max(0,Math.min(Re,Math.floor(Le*(et-re))))]}function ut(){return Le=we.length/(he-re),Re=we.length-1,Ne}return Ne.domain=function(et){return arguments.length?(re=+et[0],he=+et[et.length-1],ut()):[re,he]},Ne.range=function(et){return arguments.length?(we=et,ut()):we},Ne.invertExtent=function(et){return et=we.indexOf(et),et=et<0?NaN:et/Le+re,[et,et+1/Le]},Ne.copy=function(){return vo(re,he,we)},ut()}t.scale.threshold=function(){return Ds([.5],[0,1])};function Ds(re,he){function we(Le){if(Le<=Le)return he[t.bisect(re,Le)]}return we.domain=function(Le){return arguments.length?(re=Le,we):re},we.range=function(Le){return arguments.length?(he=Le,we):he},we.invertExtent=function(Le){return Le=he.indexOf(Le),[re[Le-1],re[Le]]},we.copy=function(){return Ds(re,he)},we}t.scale.identity=function(){return qs([0,1])};function qs(re){function he(we){return+we}return he.invert=he,he.domain=he.range=function(we){return arguments.length?(re=we.map(he),he):re},he.ticks=function(we){return rn(re,we)},he.tickFormat=function(we,Le){return d3_scale_linearTickFormat(re,we,Le)},he.copy=function(){return qs(re)},he}t.svg={};function Ll(){return 0}t.svg.arc=function(){var re=Gl,he=ac,we=Ll,Le=bu,Re=bl,Ne=Uu,ut=Fc;function et(){var Ft=Math.max(0,+re.apply(this,arguments)),Rt=Math.max(0,+he.apply(this,arguments)),lr=Re.apply(this,arguments)-Ee,sr=Ne.apply(this,arguments)-Ee,Fr=Math.abs(sr-lr),Or=lr>sr?0:1;if(Rt<Ft&&(hr=Rt,Rt=Ft,Ft=hr),Fr>=ke)return _t(Rt,Or)+(Ft?_t(Ft,1-Or):"")+"Z";var hr,wr,Cr,Nr,jr=0,Ar=0,Ci,Gi,aa,ga,qa,Fa,Nn,ka,Sn=[];if((Nr=(+ut.apply(this,arguments)||0)/2)&&(Cr=Le===bu?Math.sqrt(Ft*Ft+Rt*Rt):+Le.apply(this,arguments),Or||(Ar*=-1),Rt&&(Ar=ft(Cr/Rt*Math.sin(Nr))),Ft&&(jr=ft(Cr/Ft*Math.sin(Nr)))),Rt){Ci=Rt*Math.cos(lr+Ar),Gi=Rt*Math.sin(lr+Ar),aa=Rt*Math.cos(sr-Ar),ga=Rt*Math.sin(sr-Ar);var ko=Math.abs(sr-lr-2*Ar)<=_e?0:1;if(Ar&&Kc(Ci,Gi,aa,ga)===Or^ko){var Vs=(lr+sr)/2;Ci=Rt*Math.cos(Vs),Gi=Rt*Math.sin(Vs),aa=ga=null}}else Ci=Gi=0;if(Ft){qa=Ft*Math.cos(sr-jr),Fa=Ft*Math.sin(sr-jr),Nn=Ft*Math.cos(lr+jr),ka=Ft*Math.sin(lr+jr);var Ho=Math.abs(lr-sr+2*jr)<=_e?0:1;if(jr&&Kc(qa,Fa,Nn,ka)===1-Or^Ho){var fa=(lr+sr)/2;qa=Ft*Math.cos(fa),Fa=Ft*Math.sin(fa),Nn=ka=null}}else qa=Fa=0;if(Fr>Ye&&(hr=Math.min(Math.abs(Rt-Ft)/2,+we.apply(this,arguments)))>.001){wr=Ft<Rt^Or?0:1;var jn=hr,Gn=hr;if(Fr<_e){var Po=Nn==null?[qa,Fa]:aa==null?[Ci,Gi]:Rn([Ci,Gi],[Nn,ka],[aa,ga],[qa,Fa]),As=Ci-Po[0],Qs=Gi-Po[1],Tl=aa-Po[0],Fl=ga-Po[1],su=1/Math.sin(Math.acos((As*Tl+Qs*Fl)/(Math.sqrt(As*As+Qs*Qs)*Math.sqrt(Tl*Tl+Fl*Fl)))/2),bt=Math.sqrt(Po[0]*Po[0]+Po[1]*Po[1]);Gn=Math.min(hr,(Ft-bt)/(su-1)),jn=Math.min(hr,(Rt-bt)/(su+1))}if(aa!=null){var dr=ud(Nn==null?[qa,Fa]:[Nn,ka],[Ci,Gi],Rt,jn,Or),_r=ud([aa,ga],[qa,Fa],Rt,jn,Or);hr===jn?Sn.push("M",dr[0],"A",jn,",",jn," 0 0,",wr," ",dr[1],"A",Rt,",",Rt," 0 ",1-Or^Kc(dr[1][0],dr[1][1],_r[1][0],_r[1][1]),",",Or," ",_r[1],"A",jn,",",jn," 0 0,",wr," ",_r[0]):Sn.push("M",dr[0],"A",jn,",",jn," 0 1,",wr," ",_r[0])}else Sn.push("M",Ci,",",Gi);if(Nn!=null){var Kr=ud([Ci,Gi],[Nn,ka],Ft,-Gn,Or),ci=ud([qa,Fa],aa==null?[Ci,Gi]:[aa,ga],Ft,-Gn,Or);hr===Gn?Sn.push("L",ci[0],"A",Gn,",",Gn," 0 0,",wr," ",ci[1],"A",Ft,",",Ft," 0 ",Or^Kc(ci[1][0],ci[1][1],Kr[1][0],Kr[1][1]),",",1-Or," ",Kr[1],"A",Gn,",",Gn," 0 0,",wr," ",Kr[0]):Sn.push("L",ci[0],"A",Gn,",",Gn," 0 0,",wr," ",Kr[0])}else Sn.push("L",qa,",",Fa)}else Sn.push("M",Ci,",",Gi),aa!=null&&Sn.push("A",Rt,",",Rt," 0 ",ko,",",Or," ",aa,",",ga),Sn.push("L",qa,",",Fa),Nn!=null&&Sn.push("A",Ft,",",Ft," 0 ",Ho,",",1-Or," ",Nn,",",ka);return Sn.push("Z"),Sn.join("")}function _t(Ft,Rt){return"M0,"+Ft+"A"+Ft+","+Ft+" 0 1,"+Rt+" 0,"+-Ft+"A"+Ft+","+Ft+" 0 1,"+Rt+" 0,"+Ft}return et.innerRadius=function(Ft){return arguments.length?(re=wt(Ft),et):re},et.outerRadius=function(Ft){return arguments.length?(he=wt(Ft),et):he},et.cornerRadius=function(Ft){return arguments.length?(we=wt(Ft),et):we},et.padRadius=function(Ft){return arguments.length?(Le=Ft==bu?bu:wt(Ft),et):Le},et.startAngle=function(Ft){return arguments.length?(Re=wt(Ft),et):Re},et.endAngle=function(Ft){return arguments.length?(Ne=wt(Ft),et):Ne},et.padAngle=function(Ft){return arguments.length?(ut=wt(Ft),et):ut},et.centroid=function(){var Ft=(+re.apply(this,arguments)+ +he.apply(this,arguments))/2,Rt=(+Re.apply(this,arguments)+ +Ne.apply(this,arguments))/2-Ee;return[Math.cos(Rt)*Ft,Math.sin(Rt)*Ft]},et};var bu="auto";function Gl(re){return re.innerRadius}function ac(re){return re.outerRadius}function bl(re){return re.startAngle}function Uu(re){return re.endAngle}function Fc(re){return re&&re.padAngle}function Kc(re,he,we,Le){return(re-we)*he-(he-Le)*re>0?0:1}function ud(re,he,we,Le,Re){var Ne=re[0]-he[0],ut=re[1]-he[1],et=(Re?Le:-Le)/Math.sqrt(Ne*Ne+ut*ut),_t=et*ut,Ft=-et*Ne,Rt=re[0]+_t,lr=re[1]+Ft,sr=he[0]+_t,Fr=he[1]+Ft,Or=(Rt+sr)/2,hr=(lr+Fr)/2,wr=sr-Rt,Cr=Fr-lr,Nr=wr*wr+Cr*Cr,jr=we-Le,Ar=Rt*Fr-sr*lr,Ci=(Cr<0?-1:1)*Math.sqrt(Math.max(0,jr*jr*Nr-Ar*Ar)),Gi=(Ar*Cr-wr*Ci)/Nr,aa=(-Ar*wr-Cr*Ci)/Nr,ga=(Ar*Cr+wr*Ci)/Nr,qa=(-Ar*wr+Cr*Ci)/Nr,Fa=Gi-Or,Nn=aa-hr,ka=ga-Or,Sn=qa-hr;return Fa*Fa+Nn*Nn>ka*ka+Sn*Sn&&(Gi=ga,aa=qa),[[Gi-_t,aa-Ft],[Gi*we/jr,aa*we/jr]]}function Qf(){return!0}function qd(re){var he=Cn,we=_n,Le=Qf,Re=Hl,Ne=Re.key,ut=.7;function et(_t){var Ft=[],Rt=[],lr=-1,sr=_t.length,Fr,Or=wt(he),hr=wt(we);function wr(){Ft.push("M",Re(re(Rt),ut))}for(;++lr<sr;)Le.call(this,Fr=_t[lr],lr)?Rt.push([+Or.call(this,Fr,lr),+hr.call(this,Fr,lr)]):Rt.length&&(wr(),Rt=[]);return Rt.length&&wr(),Ft.length?Ft.join(""):null}return et.x=function(_t){return arguments.length?(he=_t,et):he},et.y=function(_t){return arguments.length?(we=_t,et):we},et.defined=function(_t){return arguments.length?(Le=_t,et):Le},et.interpolate=function(_t){return arguments.length?(typeof _t=="function"?Ne=Re=_t:Ne=(Re=Fh.get(_t)||Hl).key,et):Ne},et.tension=function(_t){return arguments.length?(ut=_t,et):ut},et}t.svg.line=function(){return qd(P)};var Fh=t.map({linear:Hl,"linear-closed":Vd,step:Mf,"step-before":Ph,"step-after":Ih,basis:wu,"basis-open":ef,"basis-closed":Sf,bundle:fd,cardinal:Jc,"cardinal-open":qu,"cardinal-closed":cd,monotone:Vt});Fh.forEach(function(re,he){he.key=re,he.closed=/-closed$/.test(re)});function Hl(re){return re.length>1?re.join("L"):re+"Z"}function Vd(re){return re.join("L")+"Z"}function Mf(re){for(var he=0,we=re.length,Le=re[0],Re=[Le[0],",",Le[1]];++he<we;)Re.push("H",(Le[0]+(Le=re[he])[0])/2,"V",Le[1]);return we>1&&Re.push("H",Le[0]),Re.join("")}function Ph(re){for(var he=0,we=re.length,Le=re[0],Re=[Le[0],",",Le[1]];++he<we;)Re.push("V",(Le=re[he])[1],"H",Le[0]);return Re.join("")}function Ih(re){for(var he=0,we=re.length,Le=re[0],Re=[Le[0],",",Le[1]];++he<we;)Re.push("H",(Le=re[he])[0],"V",Le[1]);return Re.join("")}function qu(re,he){return re.length<4?Hl(re):re[1]+eh(re.slice(1,-1),Qc(re,he))}function cd(re,he){return re.length<3?Vd(re):re[0]+eh((re.push(re[0]),re),Qc([re[re.length-2]].concat(re,[re[1]]),he))}function Jc(re,he){return re.length<3?Hl(re):re[0]+eh(re,Qc(re,he))}function eh(re,he){if(he.length<1||re.length!=he.length&&re.length!=he.length+2)return Hl(re);var we=re.length!=he.length,Le="",Re=re[0],Ne=re[1],ut=he[0],et=ut,_t=1;if(we&&(Le+="Q"+(Ne[0]-ut[0]*2/3)+","+(Ne[1]-ut[1]*2/3)+","+Ne[0]+","+Ne[1],Re=re[1],_t=2),he.length>1){et=he[1],Ne=re[_t],_t++,Le+="C"+(Re[0]+ut[0])+","+(Re[1]+ut[1])+","+(Ne[0]-et[0])+","+(Ne[1]-et[1])+","+Ne[0]+","+Ne[1];for(var Ft=2;Ft<he.length;Ft++,_t++)Ne=re[_t],et=he[Ft],Le+="S"+(Ne[0]-et[0])+","+(Ne[1]-et[1])+","+Ne[0]+","+Ne[1]}if(we){var Rt=re[_t];Le+="Q"+(Ne[0]+et[0]*2/3)+","+(Ne[1]+et[1]*2/3)+","+Rt[0]+","+Rt[1]}return Le}function Qc(re,he){for(var we=[],Le=(1-he)/2,Re,Ne=re[0],ut=re[1],et=1,_t=re.length;++et<_t;)Re=Ne,Ne=ut,ut=re[et],we.push([Le*(ut[0]-Re[0]),Le*(ut[1]-Re[1])]);return we}function wu(re){if(re.length<3)return Hl(re);var he=1,we=re.length,Le=re[0],Re=Le[0],Ne=Le[1],ut=[Re,Re,Re,(Le=re[1])[0]],et=[Ne,Ne,Ne,Le[1]],_t=[Re,",",Ne,"L",$l(Ge,ut),",",$l(Ge,et)];for(re.push(re[we-1]);++he<=we;)Le=re[he],ut.shift(),ut.push(Le[0]),et.shift(),et.push(Le[1]),$e(_t,ut,et);return re.pop(),_t.push("L",Le),_t.join("")}function ef(re){if(re.length<4)return Hl(re);for(var he=[],we=-1,Le=re.length,Re,Ne=[0],ut=[0];++we<3;)Re=re[we],Ne.push(Re[0]),ut.push(Re[1]);for(he.push($l(Ge,Ne)+","+$l(Ge,ut)),--we;++we<Le;)Re=re[we],Ne.shift(),Ne.push(Re[0]),ut.shift(),ut.push(Re[1]),$e(he,Ne,ut);return he.join("")}function Sf(re){for(var he,we=-1,Le=re.length,Re=Le+4,Ne,ut=[],et=[];++we<4;)Ne=re[we%Le],ut.push(Ne[0]),et.push(Ne[1]);for(he=[$l(Ge,ut),",",$l(Ge,et)],--we;++we<Re;)Ne=re[we%Le],ut.shift(),ut.push(Ne[0]),et.shift(),et.push(Ne[1]),$e(he,ut,et);return he.join("")}function fd(re,he){var we=re.length-1;if(we)for(var Le=re[0][0],Re=re[0][1],Ne=re[we][0]-Le,ut=re[we][1]-Re,et=-1,_t,Ft;++et<=we;)_t=re[et],Ft=et/we,_t[0]=he*_t[0]+(1-he)*(Le+Ft*Ne),_t[1]=he*_t[1]+(1-he)*(Re+Ft*ut);return wu(re)}function $l(re,he){return re[0]*he[0]+re[1]*he[1]+re[2]*he[2]+re[3]*he[3]}var Se=[0,2/3,1/3,0],Pe=[0,1/3,2/3,0],Ge=[0,1/6,2/3,1/6];function $e(re,he,we){re.push("C",$l(Se,he),",",$l(Se,we),",",$l(Pe,he),",",$l(Pe,we),",",$l(Ge,he),",",$l(Ge,we))}function st(re,he){return(he[1]-re[1])/(he[0]-re[0])}function ot(re){for(var he=0,we=re.length-1,Le=[],Re=re[0],Ne=re[1],ut=Le[0]=st(Re,Ne);++he<we;)Le[he]=(ut+(ut=st(Re=Ne,Ne=re[he+1])))/2;return Le[he]=ut,Le}function pt(re){for(var he=[],we,Le,Re,Ne,ut=ot(re),et=-1,_t=re.length-1;++et<_t;)we=st(re[et],re[et+1]),v(we)<Ye?ut[et]=ut[et+1]=0:(Le=ut[et]/we,Re=ut[et+1]/we,Ne=Le*Le+Re*Re,Ne>9&&(Ne=we*3/Math.sqrt(Ne),ut[et]=Ne*Le,ut[et+1]=Ne*Re));for(et=-1;++et<=_t;)Ne=(re[Math.min(_t,et+1)][0]-re[Math.max(0,et-1)][0])/(6*(1+ut[et]*ut[et])),he.push([Ne||0,ut[et]*Ne||0]);return he}function Vt(re){return re.length<3?Hl(re):re[0]+eh(re,pt(re))}t.svg.line.radial=function(){var re=qd(tr);return re.radius=re.x,delete re.x,re.angle=re.y,delete re.y,re};function tr(re){for(var he,we=-1,Le=re.length,Re,Ne;++we<Le;)he=re[we],Re=he[0],Ne=he[1]-Ee,he[0]=Re*Math.cos(Ne),he[1]=Re*Math.sin(Ne);return re}function Ut(re){var he=Cn,we=Cn,Le=0,Re=_n,Ne=Qf,ut=Hl,et=ut.key,_t=ut,Ft="L",Rt=.7;function lr(sr){var Fr=[],Or=[],hr=[],wr=-1,Cr=sr.length,Nr,jr=wt(he),Ar=wt(Le),Ci=he===we?function(){return aa}:wt(we),Gi=Le===Re?function(){return ga}:wt(Re),aa,ga;function qa(){Fr.push("M",ut(re(hr),Rt),Ft,_t(re(Or.reverse()),Rt),"Z")}for(;++wr<Cr;)Ne.call(this,Nr=sr[wr],wr)?(Or.push([aa=+jr.call(this,Nr,wr),ga=+Ar.call(this,Nr,wr)]),hr.push([+Ci.call(this,Nr,wr),+Gi.call(this,Nr,wr)])):Or.length&&(qa(),Or=[],hr=[]);return Or.length&&qa(),Fr.length?Fr.join(""):null}return lr.x=function(sr){return arguments.length?(he=we=sr,lr):we},lr.x0=function(sr){return arguments.length?(he=sr,lr):he},lr.x1=function(sr){return arguments.length?(we=sr,lr):we},lr.y=function(sr){return arguments.length?(Le=Re=sr,lr):Re},lr.y0=function(sr){return arguments.length?(Le=sr,lr):Le},lr.y1=function(sr){return arguments.length?(Re=sr,lr):Re},lr.defined=function(sr){return arguments.length?(Ne=sr,lr):Ne},lr.interpolate=function(sr){return arguments.length?(typeof sr=="function"?et=ut=sr:et=(ut=Fh.get(sr)||Hl).key,_t=ut.reverse||ut,Ft=ut.closed?"M":"L",lr):et},lr.tension=function(sr){return arguments.length?(Rt=sr,lr):Rt},lr}Ph.reverse=Ih,Ih.reverse=Ph,t.svg.area=function(){return Ut(P)},t.svg.area.radial=function(){var re=Ut(tr);return re.radius=re.x,delete re.x,re.innerRadius=re.x0,delete re.x0,re.outerRadius=re.x1,delete re.x1,re.angle=re.y,delete re.y,re.startAngle=re.y0,delete re.y0,re.endAngle=re.y1,delete re.y1,re};function rr(re){return re.source}function pr(re){return re.target}t.svg.chord=function(){var re=rr,he=pr,we=Sr,Le=bl,Re=Uu;function Ne(Rt,lr){var sr=ut(this,re,Rt,lr),Fr=ut(this,he,Rt,lr);return"M"+sr.p0+_t(sr.r,sr.p1,sr.a1-sr.a0)+(et(sr,Fr)?Ft(sr.r,sr.p1,sr.r,sr.p0):Ft(sr.r,sr.p1,Fr.r,Fr.p0)+_t(Fr.r,Fr.p1,Fr.a1-Fr.a0)+Ft(Fr.r,Fr.p1,sr.r,sr.p0))+"Z"}function ut(Rt,lr,sr,Fr){var Or=lr.call(Rt,sr,Fr),hr=we.call(Rt,Or,Fr),wr=Le.call(Rt,Or,Fr)-Ee,Cr=Re.call(Rt,Or,Fr)-Ee;return{r:hr,a0:wr,a1:Cr,p0:[hr*Math.cos(wr),hr*Math.sin(wr)],p1:[hr*Math.cos(Cr),hr*Math.sin(Cr)]}}function et(Rt,lr){return Rt.a0==lr.a0&&Rt.a1==lr.a1}function _t(Rt,lr,sr){return"A"+Rt+","+Rt+" 0 "+ +(sr>_e)+",1 "+lr}function Ft(Rt,lr,sr,Fr){return"Q 0,0 "+Fr}return Ne.radius=function(Rt){return arguments.length?(we=wt(Rt),Ne):we},Ne.source=function(Rt){return arguments.length?(re=wt(Rt),Ne):re},Ne.target=function(Rt){return arguments.length?(he=wt(Rt),Ne):he},Ne.startAngle=function(Rt){return arguments.length?(Le=wt(Rt),Ne):Le},Ne.endAngle=function(Rt){return arguments.length?(Re=wt(Rt),Ne):Re},Ne};function Sr(re){return re.radius}t.svg.diagonal=function(){var re=rr,he=pr,we=Rr;function Le(Re,Ne){var ut=re.call(this,Re,Ne),et=he.call(this,Re,Ne),_t=(ut.y+et.y)/2,Ft=[ut,{x:ut.x,y:_t},{x:et.x,y:_t},et];return Ft=Ft.map(we),"M"+Ft[0]+"C"+Ft[1]+" "+Ft[2]+" "+Ft[3]}return Le.source=function(Re){return arguments.length?(re=wt(Re),Le):re},Le.target=function(Re){return arguments.length?(he=wt(Re),Le):he},Le.projection=function(Re){return arguments.length?(we=Re,Le):we},Le};function Rr(re){return[re.x,re.y]}t.svg.diagonal.radial=function(){var re=t.svg.diagonal(),he=Rr,we=re.projection;return re.projection=function(Le){return arguments.length?we(Zr(he=Le)):he},re};function Zr(re){return function(){var he=re.apply(this,arguments),we=he[0],Le=he[1]-Ee;return[we*Math.cos(Le),we*Math.sin(Le)]}}t.svg.symbol=function(){var re=qi,he=wi;function we(Le,Re){return(un.get(re.call(this,Le,Re))||Aa)(he.call(this,Le,Re))}return we.type=function(Le){return arguments.length?(re=wt(Le),we):re},we.size=function(Le){return arguments.length?(he=wt(Le),we):he},we};function wi(){return 64}function qi(){return"circle"}function Aa(re){var he=Math.sqrt(re/_e);return"M0,"+he+"A"+he+","+he+" 0 1,1 0,"+-he+"A"+he+","+he+" 0 1,1 0,"+he+"Z"}var un=t.map({circle:Aa,cross:function(re){var he=Math.sqrt(re/5)/2;return"M"+-3*he+","+-he+"H"+-he+"V"+-3*he+"H"+he+"V"+-he+"H"+3*he+"V"+he+"H"+he+"V"+3*he+"H"+-he+"V"+he+"H"+-3*he+"Z"},diamond:function(re){var he=Math.sqrt(re/(2*Tn)),we=he*Tn;return"M0,"+-he+"L"+we+",0 0,"+he+" "+-we+",0Z"},square:function(re){var he=Math.sqrt(re)/2;return"M"+-he+","+-he+"L"+he+","+-he+" "+he+","+he+" "+-he+","+he+"Z"},"triangle-down":function(re){var he=Math.sqrt(re/gn),we=he*gn/2;return"M0,"+we+"L"+he+","+-we+" "+-he+","+-we+"Z"},"triangle-up":function(re){var he=Math.sqrt(re/gn),we=he*gn/2;return"M0,"+-we+"L"+he+","+we+" "+-he+","+we+"Z"}});t.svg.symbolTypes=un.keys();var gn=Math.sqrt(3),Tn=Math.tan(30*De);j.transition=function(re){for(var he=ol||++ls,we=dl(re),Le=[],Re,Ne,ut=wl||{time:Date.now(),ease:Ac,delay:0,duration:250},et=-1,_t=this.length;++et<_t;){Le.push(Re=[]);for(var Ft=this[et],Rt=-1,lr=Ft.length;++Rt<lr;)(Ne=Ft[Rt])&&pl(Ne,Rt,we,he,ut),Re.push(Ne)}return qo(Le,we,he)},j.interrupt=function(re){return this.each(re==null?Pn:Eo(dl(re)))};var Pn=Eo(dl());function Eo(re){return function(){var he,we,Le;(he=this[re])&&(Le=he[we=he.active])&&(Le.timer.c=null,Le.timer.t=NaN,--he.count?delete he[we]:delete this[re],he.active+=.5,Le.event&&Le.event.interrupt.call(this,this.__data__,Le.index))}}function qo(re,he,we){return N(re,Wn),re.namespace=he,re.id=we,re}var Wn=[],ls=0,ol,wl;Wn.call=j.call,Wn.empty=j.empty,Wn.node=j.node,Wn.size=j.size,t.transition=function(re,he){return re&&re.transition?ol?re.transition(he):re:t.selection().transition(re)},t.transition.prototype=Wn,Wn.select=function(re){var he=this.id,we=this.namespace,Le=[],Re,Ne,ut;re=q(re);for(var et=-1,_t=this.length;++et<_t;){Le.push(Re=[]);for(var Ft=this[et],Rt=-1,lr=Ft.length;++Rt<lr;)(ut=Ft[Rt])&&(Ne=re.call(ut,ut.__data__,Rt,et))?("__data__"in ut&&(Ne.__data__=ut.__data__),pl(Ne,Rt,we,he,ut[we][he]),Re.push(Ne)):Re.push(null)}return qo(Le,we,he)},Wn.selectAll=function(re){var he=this.id,we=this.namespace,Le=[],Re,Ne,ut,et,_t;re=Y(re);for(var Ft=-1,Rt=this.length;++Ft<Rt;)for(var lr=this[Ft],sr=-1,Fr=lr.length;++sr<Fr;)if(ut=lr[sr]){_t=ut[we][he],Ne=re.call(ut,ut.__data__,sr,Ft),Le.push(Re=[]);for(var Or=-1,hr=Ne.length;++Or<hr;)(et=Ne[Or])&&pl(et,Or,we,he,_t),Re.push(et)}return qo(Le,we,he)},Wn.filter=function(re){var he=[],we,Le,Re;typeof re!="function"&&(re=Q(re));for(var Ne=0,ut=this.length;Ne<ut;Ne++){he.push(we=[]);for(var Le=this[Ne],et=0,_t=Le.length;et<_t;et++)(Re=Le[et])&&re.call(Re,Re.__data__,et,Ne)&&we.push(Re)}return qo(he,this.namespace,this.id)},Wn.tween=function(re,he){var we=this.id,Le=this.namespace;return arguments.length<2?this.node()[Le][we].tween.get(re):ge(this,he==null?function(Re){Re[Le][we].tween.remove(re)}:function(Re){Re[Le][we].tween.set(re,he)})};function Vu(re,he,we,Le){var Re=re.id,Ne=re.namespace;return ge(re,typeof we=="function"?function(ut,et,_t){ut[Ne][Re].tween.set(he,Le(we.call(ut,ut.__data__,et,_t)))}:(we=Le(we),function(ut){ut[Ne][Re].tween.set(he,we)}))}Wn.attr=function(re,he){if(arguments.length<2){for(he in re)this.attr(he,re[he]);return this}var we=re=="transform"?Ec:Tc,Le=t.ns.qualify(re);function Re(){this.removeAttribute(Le)}function Ne(){this.removeAttributeNS(Le.space,Le.local)}function ut(_t){return _t==null?Re:(_t+="",function(){var Ft=this.getAttribute(Le),Rt;return Ft!==_t&&(Rt=we(Ft,_t),function(lr){this.setAttribute(Le,Rt(lr))})})}function et(_t){return _t==null?Ne:(_t+="",function(){var Ft=this.getAttributeNS(Le.space,Le.local),Rt;return Ft!==_t&&(Rt=we(Ft,_t),function(lr){this.setAttributeNS(Le.space,Le.local,Rt(lr))})})}return Vu(this,"attr."+re,he,Le.local?et:ut)},Wn.attrTween=function(re,he){var we=t.ns.qualify(re);function Le(Ne,ut){var et=he.call(this,Ne,ut,this.getAttribute(we));return et&&function(_t){this.setAttribute(we,et(_t))}}function Re(Ne,ut){var et=he.call(this,Ne,ut,this.getAttributeNS(we.space,we.local));return et&&function(_t){this.setAttributeNS(we.space,we.local,et(_t))}}return this.tween("attr."+re,we.local?Re:Le)},Wn.style=function(re,he,we){var Le=arguments.length;if(Le<3){if(typeof re!="string"){Le<2&&(he="");for(we in re)this.style(we,re[we],he);return this}we=""}function Re(){this.style.removeProperty(re)}function Ne(ut){return ut==null?Re:(ut+="",function(){var et=l(this).getComputedStyle(this,null).getPropertyValue(re),_t;return et!==ut&&(_t=Tc(et,ut),function(Ft){this.style.setProperty(re,_t(Ft),we)})})}return Vu(this,"style."+re,he,Ne)},Wn.styleTween=function(re,he,we){arguments.length<3&&(we="");function Le(Re,Ne){var ut=he.call(this,Re,Ne,l(this).getComputedStyle(this,null).getPropertyValue(re));return ut&&function(et){this.style.setProperty(re,ut(et),we)}}return this.tween("style."+re,Le)},Wn.text=function(re){return Vu(this,"text",re,Pc)};function Pc(re){return re==null&&(re=""),function(){this.textContent=re}}Wn.remove=function(){var re=this.namespace;return this.each("end.transition",function(){var he;this[re].count<2&&(he=this.parentNode)&&he.removeChild(this)})},Wn.ease=function(re){var he=this.id,we=this.namespace;return arguments.length<1?this.node()[we][he].ease:(typeof re!="function"&&(re=t.ease.apply(t,arguments)),ge(this,function(Le){Le[we][he].ease=re}))},Wn.delay=function(re){var he=this.id,we=this.namespace;return arguments.length<1?this.node()[we][he].delay:ge(this,typeof re=="function"?function(Le,Re,Ne){Le[we][he].delay=+re.call(Le,Le.__data__,Re,Ne)}:(re=+re,function(Le){Le[we][he].delay=re}))},Wn.duration=function(re){var he=this.id,we=this.namespace;return arguments.length<1?this.node()[we][he].duration:ge(this,typeof re=="function"?function(Le,Re,Ne){Le[we][he].duration=Math.max(1,re.call(Le,Le.__data__,Re,Ne))}:(re=Math.max(1,re),function(Le){Le[we][he].duration=re}))},Wn.each=function(re,he){var we=this.id,Le=this.namespace;if(arguments.length<2){var Re=wl,Ne=ol;try{ol=we,ge(this,function(ut,et,_t){wl=ut[Le][we],re.call(ut,ut.__data__,et,_t)})}finally{wl=Re,ol=Ne}}else ge(this,function(ut){var et=ut[Le][we];(et.event||(et.event=t.dispatch("start","end","interrupt"))).on(re,he)});return this},Wn.transition=function(){for(var re=this.id,he=++ls,we=this.namespace,Le=[],Re,Ne,ut,et,_t=0,Ft=this.length;_t<Ft;_t++){Le.push(Re=[]);for(var Ne=this[_t],Rt=0,lr=Ne.length;Rt<lr;Rt++)(ut=Ne[Rt])&&(et=ut[we][re],pl(ut,Rt,we,he,{time:et.time,ease:et.ease,delay:et.delay+et.duration,duration:et.duration})),Re.push(ut)}return qo(Le,we,he)};function dl(re){return re==null?"__transition__":"__transition_"+re+"__"}function pl(re,he,we,Le,Re){var Ne=re[we]||(re[we]={active:0,count:0}),ut=Ne[Le],et,_t,Ft,Rt,lr;function sr(hr){var wr=ut.delay;if(_t.t=wr+et,wr<=hr)return Fr(hr-wr);_t.c=Fr}function Fr(hr){var wr=Ne.active,Cr=Ne[wr];Cr&&(Cr.timer.c=null,Cr.timer.t=NaN,--Ne.count,delete Ne[wr],Cr.event&&Cr.event.interrupt.call(re,re.__data__,Cr.index));for(var Nr in Ne)if(+Nr<Le){var jr=Ne[Nr];jr.timer.c=null,jr.timer.t=NaN,--Ne.count,delete Ne[Nr]}_t.c=Or,ba(function(){return _t.c&&Or(hr||1)&&(_t.c=null,_t.t=NaN),1},0,et),Ne.active=Le,ut.event&&ut.event.start.call(re,re.__data__,he),lr=[],ut.tween.forEach(function(Ar,Ci){(Ci=Ci.call(re,re.__data__,he))&&lr.push(Ci)}),Rt=ut.ease,Ft=ut.duration}function Or(hr){for(var wr=hr/Ft,Cr=Rt(wr),Nr=lr.length;Nr>0;)lr[--Nr].call(re,Cr);if(wr>=1)return ut.event&&ut.event.end.call(re,re.__data__,he),--Ne.count?delete Ne[Le]:delete re[we],1}ut||(et=Re.time,_t=ba(sr,0,et),ut=Ne[Le]={tween:new M,time:et,timer:_t,delay:Re.delay,duration:Re.duration,ease:Re.ease,index:he},Re=null,++Ne.count)}t.svg.axis=function(){var re=t.scale.linear(),he=Tu,we=6,Le=6,Re=3,Ne=[10],ut=null,et;function _t(Ft){Ft.each(function(){var Rt=t.select(this),lr=this.__chart__||re,sr=this.__chart__=re.copy(),Fr=ut??(sr.ticks?sr.ticks.apply(sr,Ne):sr.domain()),Or=et??(sr.tickFormat?sr.tickFormat.apply(sr,Ne):P),hr=Rt.selectAll(".tick").data(Fr,sr),wr=hr.enter().insert("g",".domain").attr("class","tick").style("opacity",Ye),Cr=t.transition(hr.exit()).style("opacity",Ye).remove(),Nr=t.transition(hr.order()).style("opacity",1),jr=Math.max(we,0)+Re,Ar,Ci=li(sr),Gi=Rt.selectAll(".domain").data([0]),aa=(Gi.enter().append("path").attr("class","domain"),t.transition(Gi));wr.append("line"),wr.append("text");var ga=wr.select("line"),qa=Nr.select("line"),Fa=hr.select("text").text(Or),Nn=wr.select("text"),ka=Nr.select("text"),Sn=he==="top"||he==="left"?-1:1,ko,Vs,Ho,fa;if(he==="bottom"||he==="top"?(Ar=oc,ko="x",Ho="y",Vs="x2",fa="y2",Fa.attr("dy",Sn<0?"0em":".71em").style("text-anchor","middle"),aa.attr("d","M"+Ci[0]+","+Sn*Le+"V0H"+Ci[1]+"V"+Sn*Le)):(Ar=sc,ko="y",Ho="x",Vs="y2",fa="x2",Fa.attr("dy",".32em").style("text-anchor",Sn<0?"end":"start"),aa.attr("d","M"+Sn*Le+","+Ci[0]+"H0V"+Ci[1]+"H"+Sn*Le)),ga.attr(fa,Sn*we),Nn.attr(Ho,Sn*jr),qa.attr(Vs,0).attr(fa,Sn*we),ka.attr(ko,0).attr(Ho,Sn*jr),sr.rangeBand){var jn=sr,Gn=jn.rangeBand()/2;lr=sr=function(Po){return jn(Po)+Gn}}else lr.rangeBand?lr=sr:Cr.call(Ar,sr,lr);wr.call(Ar,lr,sr),Nr.call(Ar,sr,sr)})}return _t.scale=function(Ft){return arguments.length?(re=Ft,_t):re},_t.orient=function(Ft){return arguments.length?(he=Ft in nc?Ft+"":Tu,_t):he},_t.ticks=function(){return arguments.length?(Ne=a(arguments),_t):Ne},_t.tickValues=function(Ft){return arguments.length?(ut=Ft,_t):ut},_t.tickFormat=function(Ft){return arguments.length?(et=Ft,_t):et},_t.tickSize=function(Ft){var Rt=arguments.length;return Rt?(we=+Ft,Le=+arguments[Rt-1],_t):we},_t.innerTickSize=function(Ft){return arguments.length?(we=+Ft,_t):we},_t.outerTickSize=function(Ft){return arguments.length?(Le=+Ft,_t):Le},_t.tickPadding=function(Ft){return arguments.length?(Re=+Ft,_t):Re},_t.tickSubdivide=function(){return arguments.length&&_t},_t};var Tu="bottom",nc={top:1,right:1,bottom:1,left:1};function oc(re,he,we){re.attr("transform",function(Le){var Re=he(Le);return"translate("+(isFinite(Re)?Re:we(Le))+",0)"})}function sc(re,he,we){re.attr("transform",function(Le){var Re=he(Le);return"translate(0,"+(isFinite(Re)?Re:we(Le))+")"})}t.svg.brush=function(){var re=Z(Rt,"brushstart","brush","brushend"),he=null,we=null,Le=[0,0],Re=[0,0],Ne,ut,et=!0,_t=!0,Ft=Gu[0];function Rt(hr){hr.each(function(){var wr=t.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",Or).on("touchstart.brush",Or),Cr=wr.selectAll(".background").data([0]);Cr.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),wr.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var Nr=wr.selectAll(".resize").data(Ft,P);Nr.exit().remove(),Nr.enter().append("g").attr("class",function(Gi){return"resize "+Gi}).style("cursor",function(Gi){return Ic[Gi]}).append("rect").attr("x",function(Gi){return/[ew]$/.test(Gi)?-3:null}).attr("y",function(Gi){return/^[ns]/.test(Gi)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),Nr.style("display",Rt.empty()?"none":null);var jr=t.transition(wr),Ar=t.transition(Cr),Ci;he&&(Ci=li(he),Ar.attr("x",Ci[0]).attr("width",Ci[1]-Ci[0]),sr(jr)),we&&(Ci=li(we),Ar.attr("y",Ci[0]).attr("height",Ci[1]-Ci[0]),Fr(jr)),lr(jr)})}Rt.event=function(hr){hr.each(function(){var wr=re.of(this,arguments),Cr={x:Le,y:Re,i:Ne,j:ut},Nr=this.__chart__||Cr;this.__chart__=Cr,ol?t.select(this).transition().each("start.brush",function(){Ne=Nr.i,ut=Nr.j,Le=Nr.x,Re=Nr.y,wr({type:"brushstart"})}).tween("brush:brush",function(){var jr=tc(Le,Cr.x),Ar=tc(Re,Cr.y);return Ne=ut=null,function(Ci){Le=Cr.x=jr(Ci),Re=Cr.y=Ar(Ci),wr({type:"brush",mode:"resize"})}}).each("end.brush",function(){Ne=Cr.i,ut=Cr.j,wr({type:"brush",mode:"resize"}),wr({type:"brushend"})}):(wr({type:"brushstart"}),wr({type:"brush",mode:"resize"}),wr({type:"brushend"}))})};function lr(hr){hr.selectAll(".resize").attr("transform",function(wr){return"translate("+Le[+/e$/.test(wr)]+","+Re[+/^s/.test(wr)]+")"})}function sr(hr){hr.select(".extent").attr("x",Le[0]),hr.selectAll(".extent,.n>rect,.s>rect").attr("width",Le[1]-Le[0])}function Fr(hr){hr.select(".extent").attr("y",Re[0]),hr.selectAll(".extent,.e>rect,.w>rect").attr("height",Re[1]-Re[0])}function Or(){var hr=this,wr=t.select(t.event.target),Cr=re.of(hr,arguments),Nr=t.select(hr),jr=wr.datum(),Ar=!/^(n|s)$/.test(jr)&&he,Ci=!/^(e|w)$/.test(jr)&&we,Gi=wr.classed("extent"),aa=mt(hr),ga,qa=t.mouse(hr),Fa,Nn=t.select(l(hr)).on("keydown.brush",ko).on("keyup.brush",Vs);if(t.event.changedTouches?Nn.on("touchmove.brush",Ho).on("touchend.brush",jn):Nn.on("mousemove.brush",Ho).on("mouseup.brush",jn),Nr.interrupt().selectAll("*").interrupt(),Gi)qa[0]=Le[0]-qa[0],qa[1]=Re[0]-qa[1];else if(jr){var ka=+/w$/.test(jr),Sn=+/^n/.test(jr);Fa=[Le[1-ka]-qa[0],Re[1-Sn]-qa[1]],qa[0]=Le[ka],qa[1]=Re[Sn]}else t.event.altKey&&(ga=qa.slice());Nr.style("pointer-events","none").selectAll(".resize").style("display",null),t.select("body").style("cursor",wr.style("cursor")),Cr({type:"brushstart"}),Ho();function ko(){t.event.keyCode==32&&(Gi||(ga=null,qa[0]-=Le[1],qa[1]-=Re[1],Gi=2),W())}function Vs(){t.event.keyCode==32&&Gi==2&&(qa[0]+=Le[1],qa[1]+=Re[1],Gi=0,W())}function Ho(){var Gn=t.mouse(hr),Po=!1;Fa&&(Gn[0]+=Fa[0],Gn[1]+=Fa[1]),Gi||(t.event.altKey?(ga||(ga=[(Le[0]+Le[1])/2,(Re[0]+Re[1])/2]),qa[0]=Le[+(Gn[0]<ga[0])],qa[1]=Re[+(Gn[1]<ga[1])]):ga=null),Ar&&fa(Gn,he,0)&&(sr(Nr),Po=!0),Ci&&fa(Gn,we,1)&&(Fr(Nr),Po=!0),Po&&(lr(Nr),Cr({type:"brush",mode:Gi?"move":"resize"}))}function fa(Gn,Po,As){var Qs=li(Po),Tl=Qs[0],Fl=Qs[1],su=qa[As],bt=As?Re:Le,dr=bt[1]-bt[0],_r,Kr;if(Gi&&(Tl-=su,Fl-=dr+su),_r=(As?_t:et)?Math.max(Tl,Math.min(Fl,Gn[As])):Gn[As],Gi?Kr=(_r+=su)+dr:(ga&&(su=Math.max(Tl,Math.min(Fl,2*ga[As]-_r))),su<_r?(Kr=_r,_r=su):Kr=su),bt[0]!=_r||bt[1]!=Kr)return As?ut=null:Ne=null,bt[0]=_r,bt[1]=Kr,!0}function jn(){Ho(),Nr.style("pointer-events","all").selectAll(".resize").style("display",Rt.empty()?"none":null),t.select("body").style("cursor",null),Nn.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),aa(),Cr({type:"brushend"})}}return Rt.x=function(hr){return arguments.length?(he=hr,Ft=Gu[!he<<1|!we],Rt):he},Rt.y=function(hr){return arguments.length?(we=hr,Ft=Gu[!he<<1|!we],Rt):we},Rt.clamp=function(hr){return arguments.length?(he&&we?(et=!!hr[0],_t=!!hr[1]):he?et=!!hr:we&&(_t=!!hr),Rt):he&&we?[et,_t]:he?et:we?_t:null},Rt.extent=function(hr){var wr,Cr,Nr,jr,Ar;return arguments.length?(he&&(wr=hr[0],Cr=hr[1],we&&(wr=wr[0],Cr=Cr[0]),Ne=[wr,Cr],he.invert&&(wr=he(wr),Cr=he(Cr)),Cr<wr&&(Ar=wr,wr=Cr,Cr=Ar),(wr!=Le[0]||Cr!=Le[1])&&(Le=[wr,Cr])),we&&(Nr=hr[0],jr=hr[1],he&&(Nr=Nr[1],jr=jr[1]),ut=[Nr,jr],we.invert&&(Nr=we(Nr),jr=we(jr)),jr<Nr&&(Ar=Nr,Nr=jr,jr=Ar),(Nr!=Re[0]||jr!=Re[1])&&(Re=[Nr,jr])),Rt):(he&&(Ne?(wr=Ne[0],Cr=Ne[1]):(wr=Le[0],Cr=Le[1],he.invert&&(wr=he.invert(wr),Cr=he.invert(Cr)),Cr<wr&&(Ar=wr,wr=Cr,Cr=Ar))),we&&(ut?(Nr=ut[0],jr=ut[1]):(Nr=Re[0],jr=Re[1],we.invert&&(Nr=we.invert(Nr),jr=we.invert(jr)),jr<Nr&&(Ar=Nr,Nr=jr,jr=Ar))),he&&we?[[wr,Nr],[Cr,jr]]:he?[wr,Cr]:we&&[Nr,jr])},Rt.clear=function(){return Rt.empty()||(Le=[0,0],Re=[0,0],Ne=ut=null),Rt},Rt.empty=function(){return!!he&&Le[0]==Le[1]||!!we&&Re[0]==Re[1]},t.rebind(Rt,re,"on")};var Ic={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Gu=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]];t.text=Nt(function(re){return re.responseText}),t.json=function(re,he){return It(re,"application/json",tf,he)};function tf(re){return JSON.parse(re.responseText)}t.html=function(re,he){return It(re,"text/html",th,he)};function th(re){var he=o.createRange();return he.selectNode(o.body),he.createContextualFragment(re.responseText)}t.xml=Nt(function(re){return re.responseXML}),typeof r=="object"&&r.exports?r.exports=t:this.d3=t}).apply(self)}}),Ba=de({"node_modules/d3-time/dist/d3-time.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.d3=t.d3||{}))})(e,function(t){"use strict";var i=new Date,a=new Date;function o(Q,ue,ge,Me){function Te(je){return Q(je=arguments.length===0?new Date:new Date(+je)),je}return Te.floor=function(je){return Q(je=new Date(+je)),je},Te.ceil=function(je){return Q(je=new Date(je-1)),ue(je,1),Q(je),je},Te.round=function(je){var Ve=Te(je),Ze=Te.ceil(je);return je-Ve<Ze-je?Ve:Ze},Te.offset=function(je,Ve){return ue(je=new Date(+je),Ve==null?1:Math.floor(Ve)),je},Te.range=function(je,Ve,Ze){var Ke=[],vt;if(je=Te.ceil(je),Ze=Ze==null?1:Math.floor(Ze),!(je<Ve)||!(Ze>0))return Ke;do Ke.push(vt=new Date(+je)),ue(je,Ze),Q(je);while(vt<je&&je<Ve);return Ke},Te.filter=function(je){return o(function(Ve){if(Ve>=Ve)for(;Q(Ve),!je(Ve);)Ve.setTime(Ve-1)},function(Ve,Ze){if(Ve>=Ve)if(Ze<0)for(;++Ze<=0;)for(;ue(Ve,-1),!je(Ve););else for(;--Ze>=0;)for(;ue(Ve,1),!je(Ve););})},ge&&(Te.count=function(je,Ve){return i.setTime(+je),a.setTime(+Ve),Q(i),Q(a),Math.floor(ge(i,a))},Te.every=function(je){return je=Math.floor(je),!isFinite(je)||!(je>0)?null:je>1?Te.filter(Me?function(Ve){return Me(Ve)%je===0}:function(Ve){return Te.count(0,Ve)%je===0}):Te}),Te}var s=o(function(){},function(Q,ue){Q.setTime(+Q+ue)},function(Q,ue){return ue-Q});s.every=function(Q){return Q=Math.floor(Q),!isFinite(Q)||!(Q>0)?null:Q>1?o(function(ue){ue.setTime(Math.floor(ue/Q)*Q)},function(ue,ge){ue.setTime(+ue+ge*Q)},function(ue,ge){return(ge-ue)/Q}):s};var l=s.range,n=1e3,u=6e4,c=36e5,f=864e5,h=6048e5,d=o(function(Q){Q.setTime(Q-Q.getMilliseconds())},function(Q,ue){Q.setTime(+Q+ue*n)},function(Q,ue){return(ue-Q)/n},function(Q){return Q.getUTCSeconds()}),p=d.range,g=o(function(Q){Q.setTime(Q-Q.getMilliseconds()-Q.getSeconds()*n)},function(Q,ue){Q.setTime(+Q+ue*u)},function(Q,ue){return(ue-Q)/u},function(Q){return Q.getMinutes()}),m=g.range,y=o(function(Q){Q.setTime(Q-Q.getMilliseconds()-Q.getSeconds()*n-Q.getMinutes()*u)},function(Q,ue){Q.setTime(+Q+ue*c)},function(Q,ue){return(ue-Q)/c},function(Q){return Q.getHours()}),_=y.range,v=o(function(Q){Q.setHours(0,0,0,0)},function(Q,ue){Q.setDate(Q.getDate()+ue)},function(Q,ue){return(ue-Q-(ue.getTimezoneOffset()-Q.getTimezoneOffset())*u)/f},function(Q){return Q.getDate()-1}),x=v.range;function S(Q){return o(function(ue){ue.setDate(ue.getDate()-(ue.getDay()+7-Q)%7),ue.setHours(0,0,0,0)},function(ue,ge){ue.setDate(ue.getDate()+ge*7)},function(ue,ge){return(ge-ue-(ge.getTimezoneOffset()-ue.getTimezoneOffset())*u)/h})}var M=S(0),C=S(1),w=S(2),k=S(3),A=S(4),b=S(5),E=S(6),T=M.range,F=C.range,D=w.range,R=k.range,P=A.range,z=b.range,I=E.range,L=o(function(Q){Q.setDate(1),Q.setHours(0,0,0,0)},function(Q,ue){Q.setMonth(Q.getMonth()+ue)},function(Q,ue){return ue.getMonth()-Q.getMonth()+(ue.getFullYear()-Q.getFullYear())*12},function(Q){return Q.getMonth()}),B=L.range,O=o(function(Q){Q.setMonth(0,1),Q.setHours(0,0,0,0)},function(Q,ue){Q.setFullYear(Q.getFullYear()+ue)},function(Q,ue){return ue.getFullYear()-Q.getFullYear()},function(Q){return Q.getFullYear()});O.every=function(Q){return!isFinite(Q=Math.floor(Q))||!(Q>0)?null:o(function(ue){ue.setFullYear(Math.floor(ue.getFullYear()/Q)*Q),ue.setMonth(0,1),ue.setHours(0,0,0,0)},function(ue,ge){ue.setFullYear(ue.getFullYear()+ge*Q)})};var G=O.range,W=o(function(Q){Q.setUTCSeconds(0,0)},function(Q,ue){Q.setTime(+Q+ue*u)},function(Q,ue){return(ue-Q)/u},function(Q){return Q.getUTCMinutes()}),X=W.range,Z=o(function(Q){Q.setUTCMinutes(0,0,0)},function(Q,ue){Q.setTime(+Q+ue*c)},function(Q,ue){return(ue-Q)/c},function(Q){return Q.getUTCHours()}),J=Z.range,N=o(function(Q){Q.setUTCHours(0,0,0,0)},function(Q,ue){Q.setUTCDate(Q.getUTCDate()+ue)},function(Q,ue){return(ue-Q)/f},function(Q){return Q.getUTCDate()-1}),H=N.range;function $(Q){return o(function(ue){ue.setUTCDate(ue.getUTCDate()-(ue.getUTCDay()+7-Q)%7),ue.setUTCHours(0,0,0,0)},function(ue,ge){ue.setUTCDate(ue.getUTCDate()+ge*7)},function(ue,ge){return(ge-ue)/h})}var U=$(0),V=$(1),j=$(2),q=$(3),Y=$(4),K=$(5),te=$(6),ne=U.range,se=V.range,le=j.range,ce=q.range,pe=Y.range,xe=K.range,ye=te.range,fe=o(function(Q){Q.setUTCDate(1),Q.setUTCHours(0,0,0,0)},function(Q,ue){Q.setUTCMonth(Q.getUTCMonth()+ue)},function(Q,ue){return ue.getUTCMonth()-Q.getUTCMonth()+(ue.getUTCFullYear()-Q.getUTCFullYear())*12},function(Q){return Q.getUTCMonth()}),ae=fe.range,ee=o(function(Q){Q.setUTCMonth(0,1),Q.setUTCHours(0,0,0,0)},function(Q,ue){Q.setUTCFullYear(Q.getUTCFullYear()+ue)},function(Q,ue){return ue.getUTCFullYear()-Q.getUTCFullYear()},function(Q){return Q.getUTCFullYear()});ee.every=function(Q){return!isFinite(Q=Math.floor(Q))||!(Q>0)?null:o(function(ue){ue.setUTCFullYear(Math.floor(ue.getUTCFullYear()/Q)*Q),ue.setUTCMonth(0,1),ue.setUTCHours(0,0,0,0)},function(ue,ge){ue.setUTCFullYear(ue.getUTCFullYear()+ge*Q)})};var ie=ee.range;t.timeDay=v,t.timeDays=x,t.timeFriday=b,t.timeFridays=z,t.timeHour=y,t.timeHours=_,t.timeInterval=o,t.timeMillisecond=s,t.timeMilliseconds=l,t.timeMinute=g,t.timeMinutes=m,t.timeMonday=C,t.timeMondays=F,t.timeMonth=L,t.timeMonths=B,t.timeSaturday=E,t.timeSaturdays=I,t.timeSecond=d,t.timeSeconds=p,t.timeSunday=M,t.timeSundays=T,t.timeThursday=A,t.timeThursdays=P,t.timeTuesday=w,t.timeTuesdays=D,t.timeWednesday=k,t.timeWednesdays=R,t.timeWeek=M,t.timeWeeks=T,t.timeYear=O,t.timeYears=G,t.utcDay=N,t.utcDays=H,t.utcFriday=K,t.utcFridays=xe,t.utcHour=Z,t.utcHours=J,t.utcMillisecond=s,t.utcMilliseconds=l,t.utcMinute=W,t.utcMinutes=X,t.utcMonday=V,t.utcMondays=se,t.utcMonth=fe,t.utcMonths=ae,t.utcSaturday=te,t.utcSaturdays=ye,t.utcSecond=d,t.utcSeconds=p,t.utcSunday=U,t.utcSundays=ne,t.utcThursday=Y,t.utcThursdays=pe,t.utcTuesday=j,t.utcTuesdays=le,t.utcWednesday=q,t.utcWednesdays=ce,t.utcWeek=U,t.utcWeeks=ne,t.utcYear=ee,t.utcYears=ie,Object.defineProperty(t,"__esModule",{value:!0})})}}),eo=de({"node_modules/d3-time-format/dist/d3-time-format.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,Ba()):(t=t||self,i(t.d3=t.d3||{},t.d3))})(e,function(t,i){"use strict";function a(Ee){if(0<=Ee.y&&Ee.y<100){var De=new Date(-1,Ee.m,Ee.d,Ee.H,Ee.M,Ee.S,Ee.L);return De.setFullYear(Ee.y),De}return new Date(Ee.y,Ee.m,Ee.d,Ee.H,Ee.M,Ee.S,Ee.L)}function o(Ee){if(0<=Ee.y&&Ee.y<100){var De=new Date(Date.UTC(-1,Ee.m,Ee.d,Ee.H,Ee.M,Ee.S,Ee.L));return De.setUTCFullYear(Ee.y),De}return new Date(Date.UTC(Ee.y,Ee.m,Ee.d,Ee.H,Ee.M,Ee.S,Ee.L))}function s(Ee,De,Je){return{y:Ee,m:De,d:Je,H:0,M:0,S:0,L:0}}function l(Ee){var De=Ee.dateTime,Je=Ee.date,Ue=Ee.time,at=Ee.periods,rt=Ee.days,ft=Ee.shortDays,At=Ee.months,ht=Ee.shortMonths,Gt=p(at),fr=g(at),gt=p(rt),yt=g(rt),kt=p(ft),Lt=g(ft),Ct=p(At),$t=g(At),mr=p(ht),br=g(ht),Er={a:dn,A:pi,b:Jr,B:Be,c:null,d:L,e:L,f:X,g:K,G:ne,H:B,I:O,j:G,L:W,m:Z,M:J,p:Fe,q:Et,Q:mt,s:Mt,S:N,u:H,U:$,V,w:j,W:q,x:null,X:null,y:Y,Y:te,Z:se,"%":Pt},Tr={a:St,A:zt,b:Wt,B:Yt,c:null,d:le,e:le,f:fe,g:Ze,G:vt,H:ce,I:pe,j:xe,L:ye,m:ae,M:ee,p:ze,q:tt,Q:mt,s:Mt,S:ie,u:Q,U:ue,V:Me,w:Te,W:je,x:null,X:null,y:Ve,Y:Ke,Z:xt,"%":Pt},Ur={a:$i,A:ja,b:ya,B:pa,c:xi,d:A,e:A,f:R,g:M,G:S,H:E,I:E,j:b,L:D,m:k,M:T,p:ea,q:w,Q:z,s:I,S:F,u:y,U:_,V:v,w:m,W:x,x:bi,X:Ua,y:M,Y:S,Z:C,"%":P};Er.x=Ai(Je,Er),Er.X=Ai(Ue,Er),Er.c=Ai(De,Er),Tr.x=Ai(Je,Tr),Tr.X=Ai(Ue,Tr),Tr.c=Ai(De,Tr);function Ai(ct,wt){return function(Nt){var It=[],Zt=-1,qt=0,vr=ct.length,Br,Pr,Mi;for(Nt instanceof Date||(Nt=new Date(+Nt));++Zt<vr;)ct.charCodeAt(Zt)===37&&(It.push(ct.slice(qt,Zt)),(Pr=n[Br=ct.charAt(++Zt)])!=null?Br=ct.charAt(++Zt):Pr=Br==="e"?" ":"0",(Mi=wt[Br])&&(Br=Mi(Nt,Pr)),It.push(Br),qt=Zt+1);return It.push(ct.slice(qt,Zt)),It.join("")}}function oi(ct,wt){return function(Nt){var It=s(1900,void 0,1),Zt=Qr(It,ct,Nt+="",0),qt,vr;if(Zt!=Nt.length)return null;if("Q"in It)return new Date(It.Q);if("s"in It)return new Date(It.s*1e3+("L"in It?It.L:0));if(wt&&!("Z"in It)&&(It.Z=0),"p"in It&&(It.H=It.H%12+It.p*12),It.m===void 0&&(It.m="q"in It?It.q:0),"V"in It){if(It.V<1||It.V>53)return null;"w"in It||(It.w=1),"Z"in It?(qt=o(s(It.y,0,1)),vr=qt.getUTCDay(),qt=vr>4||vr===0?i.utcMonday.ceil(qt):i.utcMonday(qt),qt=i.utcDay.offset(qt,(It.V-1)*7),It.y=qt.getUTCFullYear(),It.m=qt.getUTCMonth(),It.d=qt.getUTCDate()+(It.w+6)%7):(qt=a(s(It.y,0,1)),vr=qt.getDay(),qt=vr>4||vr===0?i.timeMonday.ceil(qt):i.timeMonday(qt),qt=i.timeDay.offset(qt,(It.V-1)*7),It.y=qt.getFullYear(),It.m=qt.getMonth(),It.d=qt.getDate()+(It.w+6)%7)}else("W"in It||"U"in It)&&("w"in It||(It.w="u"in It?It.u%7:"W"in It?1:0),vr="Z"in It?o(s(It.y,0,1)).getUTCDay():a(s(It.y,0,1)).getDay(),It.m=0,It.d="W"in It?(It.w+6)%7+It.W*7-(vr+5)%7:It.w+It.U*7-(vr+6)%7);return"Z"in It?(It.H+=It.Z/100|0,It.M+=It.Z%100,o(It)):a(It)}}function Qr(ct,wt,Nt,It){for(var Zt=0,qt=wt.length,vr=Nt.length,Br,Pr;Zt<qt;){if(It>=vr)return-1;if(Br=wt.charCodeAt(Zt++),Br===37){if(Br=wt.charAt(Zt++),Pr=Ur[Br in n?wt.charAt(Zt++):Br],!Pr||(It=Pr(ct,Nt,It))<0)return-1}else if(Br!=Nt.charCodeAt(It++))return-1}return It}function ea(ct,wt,Nt){var It=Gt.exec(wt.slice(Nt));return It?(ct.p=fr[It[0].toLowerCase()],Nt+It[0].length):-1}function $i(ct,wt,Nt){var It=kt.exec(wt.slice(Nt));return It?(ct.w=Lt[It[0].toLowerCase()],Nt+It[0].length):-1}function ja(ct,wt,Nt){var It=gt.exec(wt.slice(Nt));return It?(ct.w=yt[It[0].toLowerCase()],Nt+It[0].length):-1}function ya(ct,wt,Nt){var It=mr.exec(wt.slice(Nt));return It?(ct.m=br[It[0].toLowerCase()],Nt+It[0].length):-1}function pa(ct,wt,Nt){var It=Ct.exec(wt.slice(Nt));return It?(ct.m=$t[It[0].toLowerCase()],Nt+It[0].length):-1}function xi(ct,wt,Nt){return Qr(ct,De,wt,Nt)}function bi(ct,wt,Nt){return Qr(ct,Je,wt,Nt)}function Ua(ct,wt,Nt){return Qr(ct,Ue,wt,Nt)}function dn(ct){return ft[ct.getDay()]}function pi(ct){return rt[ct.getDay()]}function Jr(ct){return ht[ct.getMonth()]}function Be(ct){return At[ct.getMonth()]}function Fe(ct){return at[+(ct.getHours()>=12)]}function Et(ct){return 1+~~(ct.getMonth()/3)}function St(ct){return ft[ct.getUTCDay()]}function zt(ct){return rt[ct.getUTCDay()]}function Wt(ct){return ht[ct.getUTCMonth()]}function Yt(ct){return At[ct.getUTCMonth()]}function ze(ct){return at[+(ct.getUTCHours()>=12)]}function tt(ct){return 1+~~(ct.getUTCMonth()/3)}return{format:function(ct){var wt=Ai(ct+="",Er);return wt.toString=function(){return ct},wt},parse:function(ct){var wt=oi(ct+="",!1);return wt.toString=function(){return ct},wt},utcFormat:function(ct){var wt=Ai(ct+="",Tr);return wt.toString=function(){return ct},wt},utcParse:function(ct){var wt=oi(ct+="",!0);return wt.toString=function(){return ct},wt}}}var n={"-":"",_:" ",0:"0"},u=/^\s*\d+/,c=/^%/,f=/[\\^$*+?|[\]().{}]/g;function h(Ee,De,Je){var Ue=Ee<0?"-":"",at=(Ue?-Ee:Ee)+"",rt=at.length;return Ue+(rt<Je?new Array(Je-rt+1).join(De)+at:at)}function d(Ee){return Ee.replace(f,"\\$&")}function p(Ee){return new RegExp("^(?:"+Ee.map(d).join("|")+")","i")}function g(Ee){for(var De={},Je=-1,Ue=Ee.length;++Je<Ue;)De[Ee[Je].toLowerCase()]=Je;return De}function m(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+1));return Ue?(Ee.w=+Ue[0],Je+Ue[0].length):-1}function y(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+1));return Ue?(Ee.u=+Ue[0],Je+Ue[0].length):-1}function _(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.U=+Ue[0],Je+Ue[0].length):-1}function v(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.V=+Ue[0],Je+Ue[0].length):-1}function x(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.W=+Ue[0],Je+Ue[0].length):-1}function S(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+4));return Ue?(Ee.y=+Ue[0],Je+Ue[0].length):-1}function M(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.y=+Ue[0]+(+Ue[0]>68?1900:2e3),Je+Ue[0].length):-1}function C(Ee,De,Je){var Ue=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(De.slice(Je,Je+6));return Ue?(Ee.Z=Ue[1]?0:-(Ue[2]+(Ue[3]||"00")),Je+Ue[0].length):-1}function w(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+1));return Ue?(Ee.q=Ue[0]*3-3,Je+Ue[0].length):-1}function k(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.m=Ue[0]-1,Je+Ue[0].length):-1}function A(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.d=+Ue[0],Je+Ue[0].length):-1}function b(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+3));return Ue?(Ee.m=0,Ee.d=+Ue[0],Je+Ue[0].length):-1}function E(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.H=+Ue[0],Je+Ue[0].length):-1}function T(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.M=+Ue[0],Je+Ue[0].length):-1}function F(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+2));return Ue?(Ee.S=+Ue[0],Je+Ue[0].length):-1}function D(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+3));return Ue?(Ee.L=+Ue[0],Je+Ue[0].length):-1}function R(Ee,De,Je){var Ue=u.exec(De.slice(Je,Je+6));return Ue?(Ee.L=Math.floor(Ue[0]/1e3),Je+Ue[0].length):-1}function P(Ee,De,Je){var Ue=c.exec(De.slice(Je,Je+1));return Ue?Je+Ue[0].length:-1}function z(Ee,De,Je){var Ue=u.exec(De.slice(Je));return Ue?(Ee.Q=+Ue[0],Je+Ue[0].length):-1}function I(Ee,De,Je){var Ue=u.exec(De.slice(Je));return Ue?(Ee.s=+Ue[0],Je+Ue[0].length):-1}function L(Ee,De){return h(Ee.getDate(),De,2)}function B(Ee,De){return h(Ee.getHours(),De,2)}function O(Ee,De){return h(Ee.getHours()%12||12,De,2)}function G(Ee,De){return h(1+i.timeDay.count(i.timeYear(Ee),Ee),De,3)}function W(Ee,De){return h(Ee.getMilliseconds(),De,3)}function X(Ee,De){return W(Ee,De)+"000"}function Z(Ee,De){return h(Ee.getMonth()+1,De,2)}function J(Ee,De){return h(Ee.getMinutes(),De,2)}function N(Ee,De){return h(Ee.getSeconds(),De,2)}function H(Ee){var De=Ee.getDay();return De===0?7:De}function $(Ee,De){return h(i.timeSunday.count(i.timeYear(Ee)-1,Ee),De,2)}function U(Ee){var De=Ee.getDay();return De>=4||De===0?i.timeThursday(Ee):i.timeThursday.ceil(Ee)}function V(Ee,De){return Ee=U(Ee),h(i.timeThursday.count(i.timeYear(Ee),Ee)+(i.timeYear(Ee).getDay()===4),De,2)}function j(Ee){return Ee.getDay()}function q(Ee,De){return h(i.timeMonday.count(i.timeYear(Ee)-1,Ee),De,2)}function Y(Ee,De){return h(Ee.getFullYear()%100,De,2)}function K(Ee,De){return Ee=U(Ee),h(Ee.getFullYear()%100,De,2)}function te(Ee,De){return h(Ee.getFullYear()%1e4,De,4)}function ne(Ee,De){var Je=Ee.getDay();return Ee=Je>=4||Je===0?i.timeThursday(Ee):i.timeThursday.ceil(Ee),h(Ee.getFullYear()%1e4,De,4)}function se(Ee){var De=Ee.getTimezoneOffset();return(De>0?"-":(De*=-1,"+"))+h(De/60|0,"0",2)+h(De%60,"0",2)}function le(Ee,De){return h(Ee.getUTCDate(),De,2)}function ce(Ee,De){return h(Ee.getUTCHours(),De,2)}function pe(Ee,De){return h(Ee.getUTCHours()%12||12,De,2)}function xe(Ee,De){return h(1+i.utcDay.count(i.utcYear(Ee),Ee),De,3)}function ye(Ee,De){return h(Ee.getUTCMilliseconds(),De,3)}function fe(Ee,De){return ye(Ee,De)+"000"}function ae(Ee,De){return h(Ee.getUTCMonth()+1,De,2)}function ee(Ee,De){return h(Ee.getUTCMinutes(),De,2)}function ie(Ee,De){return h(Ee.getUTCSeconds(),De,2)}function Q(Ee){var De=Ee.getUTCDay();return De===0?7:De}function ue(Ee,De){return h(i.utcSunday.count(i.utcYear(Ee)-1,Ee),De,2)}function ge(Ee){var De=Ee.getUTCDay();return De>=4||De===0?i.utcThursday(Ee):i.utcThursday.ceil(Ee)}function Me(Ee,De){return Ee=ge(Ee),h(i.utcThursday.count(i.utcYear(Ee),Ee)+(i.utcYear(Ee).getUTCDay()===4),De,2)}function Te(Ee){return Ee.getUTCDay()}function je(Ee,De){return h(i.utcMonday.count(i.utcYear(Ee)-1,Ee),De,2)}function Ve(Ee,De){return h(Ee.getUTCFullYear()%100,De,2)}function Ze(Ee,De){return Ee=ge(Ee),h(Ee.getUTCFullYear()%100,De,2)}function Ke(Ee,De){return h(Ee.getUTCFullYear()%1e4,De,4)}function vt(Ee,De){var Je=Ee.getUTCDay();return Ee=Je>=4||Je===0?i.utcThursday(Ee):i.utcThursday.ceil(Ee),h(Ee.getUTCFullYear()%1e4,De,4)}function xt(){return"+0000"}function Pt(){return"%"}function mt(Ee){return+Ee}function Mt(Ee){return Math.floor(+Ee/1e3)}var lt;qe({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function qe(Ee){return lt=l(Ee),t.timeFormat=lt.format,t.timeParse=lt.parse,t.utcFormat=lt.utcFormat,t.utcParse=lt.utcParse,lt}var Ye="%Y-%m-%dT%H:%M:%S.%LZ";function me(Ee){return Ee.toISOString()}var _e=Date.prototype.toISOString?me:t.utcFormat(Ye);function Ae(Ee){var De=new Date(Ee);return isNaN(De)?null:De}var ke=+new Date("2000-01-01T00:00:00.000Z")?Ae:t.utcParse(Ye);t.isoFormat=_e,t.isoParse=ke,t.timeFormatDefaultLocale=qe,t.timeFormatLocale=l,Object.defineProperty(t,"__esModule",{value:!0})})}}),rs=de({"node_modules/d3-format/dist/d3-format.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=typeof globalThis<"u"?globalThis:t||self,i(t.d3=t.d3||{}))})(e,(function(t){"use strict";function i(k){return Math.abs(k=Math.round(k))>=1e21?k.toLocaleString("en").replace(/,/g,""):k.toString(10)}function a(k,A){if((b=(k=A?k.toExponential(A-1):k.toExponential()).indexOf("e"))<0)return null;var b,E=k.slice(0,b);return[E.length>1?E[0]+E.slice(2):E,+k.slice(b+1)]}function o(k){return k=a(Math.abs(k)),k?k[1]:NaN}function s(k,A){return function(b,E){for(var T=b.length,F=[],D=0,R=k[0],P=0;T>0&&R>0&&(P+R+1>E&&(R=Math.max(1,E-P)),F.push(b.substring(T-=R,T+R)),!((P+=R+1)>E));)R=k[D=(D+1)%k.length];return F.reverse().join(A)}}function l(k){return function(A){return A.replace(/[0-9]/g,function(b){return k[+b]})}}var n=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function u(k){if(!(A=n.exec(k)))throw new Error("invalid format: "+k);var A;return new c({fill:A[1],align:A[2],sign:A[3],symbol:A[4],zero:A[5],width:A[6],comma:A[7],precision:A[8]&&A[8].slice(1),trim:A[9],type:A[10]})}u.prototype=c.prototype;function c(k){this.fill=k.fill===void 0?" ":k.fill+"",this.align=k.align===void 0?">":k.align+"",this.sign=k.sign===void 0?"-":k.sign+"",this.symbol=k.symbol===void 0?"":k.symbol+"",this.zero=!!k.zero,this.width=k.width===void 0?void 0:+k.width,this.comma=!!k.comma,this.precision=k.precision===void 0?void 0:+k.precision,this.trim=!!k.trim,this.type=k.type===void 0?"":k.type+""}c.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function f(k){e:for(var A=k.length,b=1,E=-1,T;b<A;++b)switch(k[b]){case".":E=T=b;break;case"0":E===0&&(E=b),T=b;break;default:if(!+k[b])break e;E>0&&(E=0);break}return E>0?k.slice(0,E)+k.slice(T+1):k}var h;function d(k,A){var b=a(k,A);if(!b)return k+"";var E=b[0],T=b[1],F=T-(h=Math.max(-8,Math.min(8,Math.floor(T/3)))*3)+1,D=E.length;return F===D?E:F>D?E+new Array(F-D+1).join("0"):F>0?E.slice(0,F)+"."+E.slice(F):"0."+new Array(1-F).join("0")+a(k,Math.max(0,A+F-1))[0]}function p(k,A){var b=a(k,A);if(!b)return k+"";var E=b[0],T=b[1];return T<0?"0."+new Array(-T).join("0")+E:E.length>T+1?E.slice(0,T+1)+"."+E.slice(T+1):E+new Array(T-E.length+2).join("0")}var g={"%":function(k,A){return(k*100).toFixed(A)},b:function(k){return Math.round(k).toString(2)},c:function(k){return k+""},d:i,e:function(k,A){return k.toExponential(A)},f:function(k,A){return k.toFixed(A)},g:function(k,A){return k.toPrecision(A)},o:function(k){return Math.round(k).toString(8)},p:function(k,A){return p(k*100,A)},r:p,s:d,X:function(k){return Math.round(k).toString(16).toUpperCase()},x:function(k){return Math.round(k).toString(16)}};function m(k){return k}var y=Array.prototype.map,_=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function v(k){var A=k.grouping===void 0||k.thousands===void 0?m:s(y.call(k.grouping,Number),k.thousands+""),b=k.currency===void 0?"":k.currency[0]+"",E=k.currency===void 0?"":k.currency[1]+"",T=k.decimal===void 0?".":k.decimal+"",F=k.numerals===void 0?m:l(y.call(k.numerals,String)),D=k.percent===void 0?"%":k.percent+"",R=k.minus===void 0?"-":k.minus+"",P=k.nan===void 0?"NaN":k.nan+"";function z(L){L=u(L);var B=L.fill,O=L.align,G=L.sign,W=L.symbol,X=L.zero,Z=L.width,J=L.comma,N=L.precision,H=L.trim,$=L.type;$==="n"?(J=!0,$="g"):g[$]||(N===void 0&&(N=12),H=!0,$="g"),(X||B==="0"&&O==="=")&&(X=!0,B="0",O="=");var U=W==="$"?b:W==="#"&&/[boxX]/.test($)?"0"+$.toLowerCase():"",V=W==="$"?E:/[%p]/.test($)?D:"",j=g[$],q=/[defgprs%]/.test($);N=N===void 0?6:/[gprs]/.test($)?Math.max(1,Math.min(21,N)):Math.max(0,Math.min(20,N));function Y(K){var te=U,ne=V,se,le,ce;if($==="c")ne=j(K)+ne,K="";else{K=+K;var pe=K<0||1/K<0;if(K=isNaN(K)?P:j(Math.abs(K),N),H&&(K=f(K)),pe&&+K==0&&G!=="+"&&(pe=!1),te=(pe?G==="("?G:R:G==="-"||G==="("?"":G)+te,ne=($==="s"?_[8+h/3]:"")+ne+(pe&&G==="("?")":""),q){for(se=-1,le=K.length;++se<le;)if(ce=K.charCodeAt(se),48>ce||ce>57){ne=(ce===46?T+K.slice(se+1):K.slice(se))+ne,K=K.slice(0,se);break}}}J&&!X&&(K=A(K,1/0));var xe=te.length+K.length+ne.length,ye=xe<Z?new Array(Z-xe+1).join(B):"";switch(J&&X&&(K=A(ye+K,ye.length?Z-ne.length:1/0),ye=""),O){case"<":K=te+K+ne+ye;break;case"=":K=te+ye+K+ne;break;case"^":K=ye.slice(0,xe=ye.length>>1)+te+K+ne+ye.slice(xe);break;default:K=ye+te+K+ne;break}return F(K)}return Y.toString=function(){return L+""},Y}function I(L,B){var O=z((L=u(L),L.type="f",L)),G=Math.max(-8,Math.min(8,Math.floor(o(B)/3)))*3,W=Math.pow(10,-G),X=_[8+G/3];return function(Z){return O(W*Z)+X}}return{format:z,formatPrefix:I}}var x;S({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});function S(k){return x=v(k),t.format=x.format,t.formatPrefix=x.formatPrefix,x}function M(k){return Math.max(0,-o(Math.abs(k)))}function C(k,A){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(o(A)/3)))*3-o(Math.abs(k)))}function w(k,A){return k=Math.abs(k),A=Math.abs(A)-k,Math.max(0,o(A)-o(k))+1}t.FormatSpecifier=c,t.formatDefaultLocale=S,t.formatLocale=v,t.formatSpecifier=u,t.precisionFixed=M,t.precisionPrefix=C,t.precisionRound=w,Object.defineProperty(t,"__esModule",{value:!0})}))}}),Oo=de({"node_modules/is-string-blank/index.js"(e,r){"use strict";r.exports=function(t){for(var i=t.length,a,o=0;o<i;o++)if(a=t.charCodeAt(o),(a<9||a>13)&&a!==32&&a!==133&&a!==160&&a!==5760&&a!==6158&&(a<8192||a>8205)&&a!==8232&&a!==8233&&a!==8239&&a!==8287&&a!==8288&&a!==12288&&a!==65279)return!1;return!0}}}),da=de({"node_modules/fast-isnumeric/index.js"(e,r){"use strict";var t=Oo();r.exports=function(i){var a=typeof i;if(a==="string"){var o=i;if(i=+i,i===0&&t(o))return!1}else if(a!=="number")return!1;return i-i<1}}}),cn=de({"src/constants/numerical.js"(e,r){"use strict";r.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE*1e-4,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,ONEMILLI:1,ONEMICROSEC:.001,EPOCHJD:24405875e-1,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:"\u2212"}}}),Ss=de({"node_modules/base64-arraybuffer/dist/base64-arraybuffer.umd.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=typeof globalThis<"u"?globalThis:t||self,i(t["base64-arraybuffer"]={}))})(e,(function(t){"use strict";for(var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=typeof Uint8Array>"u"?[]:new Uint8Array(256),o=0;o<i.length;o++)a[i.charCodeAt(o)]=o;var s=function(n){var u=new Uint8Array(n),c,f=u.length,h="";for(c=0;c<f;c+=3)h+=i[u[c]>>2],h+=i[(u[c]&3)<<4|u[c+1]>>4],h+=i[(u[c+1]&15)<<2|u[c+2]>>6],h+=i[u[c+2]&63];return f%3===2?h=h.substring(0,h.length-1)+"=":f%3===1&&(h=h.substring(0,h.length-2)+"=="),h},l=function(n){var u=n.length*.75,c=n.length,f,h=0,d,p,g,m;n[n.length-1]==="="&&(u--,n[n.length-2]==="="&&u--);var y=new ArrayBuffer(u),_=new Uint8Array(y);for(f=0;f<c;f+=4)d=a[n.charCodeAt(f)],p=a[n.charCodeAt(f+1)],g=a[n.charCodeAt(f+2)],m=a[n.charCodeAt(f+3)],_[h++]=d<<2|p>>4,_[h++]=(p&15)<<4|g>>2,_[h++]=(g&3)<<6|m&63;return y};t.decode=l,t.encode=s,Object.defineProperty(t,"__esModule",{value:!0})}))}}),is=de({"src/lib/is_plain_object.js"(e,r){"use strict";r.exports=function(i){return window&&window.process&&window.process.versions?Object.prototype.toString.call(i)==="[object Object]":Object.prototype.toString.call(i)==="[object Object]"&&Object.getPrototypeOf(i).hasOwnProperty("hasOwnProperty")}}}),Do=de({"src/lib/array.js"(e){"use strict";var r=Ss().decode,t=is(),i=Array.isArray,a=ArrayBuffer,o=DataView;function s(d){return a.isView(d)&&!(d instanceof o)}e.isTypedArray=s;function l(d){return i(d)||s(d)}e.isArrayOrTypedArray=l;function n(d){return!l(d[0])}e.isArray1D=n,e.ensureArray=function(d,p){return i(d)||(d=[]),d.length=p,d};var u={u1c:typeof Uint8ClampedArray>"u"?void 0:Uint8ClampedArray,i1:typeof Int8Array>"u"?void 0:Int8Array,u1:typeof Uint8Array>"u"?void 0:Uint8Array,i2:typeof Int16Array>"u"?void 0:Int16Array,u2:typeof Uint16Array>"u"?void 0:Uint16Array,i4:typeof Int32Array>"u"?void 0:Int32Array,u4:typeof Uint32Array>"u"?void 0:Uint32Array,f4:typeof Float32Array>"u"?void 0:Float32Array,f8:typeof Float64Array>"u"?void 0:Float64Array};u.uint8c=u.u1c,u.uint8=u.u1,u.int8=u.i1,u.uint16=u.u2,u.int16=u.i2,u.uint32=u.u4,u.int32=u.i4,u.float32=u.f4,u.float64=u.f8;function c(d){return d.constructor===ArrayBuffer}e.isArrayBuffer=c,e.decodeTypedArraySpec=function(d){var p=[],g=f(d),m=g.dtype,y=u[m];if(!y)throw new Error('Error in dtype: "'+m+'"');var _=y.BYTES_PER_ELEMENT,v=g.bdata;c(v)||(v=r(v));var x=g.shape===void 0?[v.byteLength/_]:(""+g.shape).split(",");x.reverse();var S=x.length,M,C,w=+x[0],k=_*w,A=0;if(S===1)p=new y(v);else if(S===2)for(M=+x[1],C=0;C<M;C++)p[C]=new y(v,A,w),A+=k;else if(S===3){M=+x[1];for(var b=+x[2],E=0;E<b;E++)for(p[E]=[],C=0;C<M;C++)p[E][C]=new y(v,A,w),A+=k}else throw new Error("ndim: "+S+'is not supported with the shape:"'+g.shape+'"');return p.bdata=g.bdata,p.dtype=g.dtype,p.shape=x.reverse().join(","),d._inputArray=p,p},e.isTypedArraySpec=function(d){return t(d)&&d.hasOwnProperty("dtype")&&typeof d.dtype=="string"&&d.hasOwnProperty("bdata")&&(typeof d.bdata=="string"||c(d.bdata))&&(d.shape===void 0||d.hasOwnProperty("shape")&&(typeof d.shape=="string"||typeof d.shape=="number"))};function f(d){return{bdata:d.bdata,dtype:d.dtype,shape:d.shape}}e.concat=function(){var d=[],p=!0,g=0,m,y,_,v,x,S,M,C;for(_=0;_<arguments.length;_++)v=arguments[_],S=v.length,S&&(y?d.push(v):(y=v,x=S),i(v)?m=!1:(p=!1,g?m!==v.constructor&&(m=!1):m=v.constructor),g+=S);if(!g)return[];if(!d.length)return y;if(p)return y.concat.apply(y,d);if(m){for(M=new m(g),M.set(y),_=0;_<d.length;_++)v=d[_],M.set(v,x),x+=v.length;return M}for(M=new Array(g),C=0;C<y.length;C++)M[C]=y[C];for(_=0;_<d.length;_++){for(v=d[_],C=0;C<v.length;C++)M[x+C]=v[C];x+=C}return M},e.maxRowLength=function(d){return h(d,Math.max,0)},e.minRowLength=function(d){return h(d,Math.min,1/0)};function h(d,p,g){if(l(d))if(l(d[0])){for(var m=g,y=0;y<d.length;y++)m=p(m,d[y].length);return m}else return d.length;return 0}}}),sl=de({"src/lib/nested_property.js"(e,r){"use strict";var t=da(),i=Do().isArrayOrTypedArray;r.exports=function(d,p){if(t(p))p=String(p);else if(typeof p!="string"||p.slice(-4)==="[-1]")throw"bad property string";var g=p.split("."),m,y,_,v;for(v=0;v<g.length;v++)if(String(g[v]).slice(0,2)==="__")throw"bad property string";for(v=0;v<g.length;){if(m=String(g[v]).match(/^([^\[\]]*)((\[\-?[0-9]*\])+)$/),m){if(m[1])g[v]=m[1];else if(v===0)g.splice(0,1);else throw"bad property string";for(y=m[2].slice(1,-1).split("]["),_=0;_<y.length;_++)v++,g.splice(v,0,Number(y[_]))}v++}return typeof d!="object"?f(d,p,g):{set:l(d,g,p),get:a(d,g),astr:p,parts:g,obj:d}};function a(h,d){return function(p){var g=h,m,y,_,v,x;for(v=0;v<d.length-1;v++){if(m=d[v],m===-1){for(y=!0,_=[],x=0;x<g.length;x++)_[x]=a(g[x],d.slice(v+1))(p),_[x]!==_[0]&&(y=!1);return y?_[0]:_}if(typeof m=="number"&&!i(g)||(g=g[m],typeof g!="object"||g===null))return}if(!(typeof g!="object"||g===null)&&(_=g[d[v]],!(!p&&_===null)))return _}}var o=/(^|\.)args\[/;function s(h,d){return h===void 0||h===null&&!d.match(o)}function l(h,d,p){return function(g){var m=h,y="",_=[[h,y]],v=s(g,p),x,S;for(S=0;S<d.length-1;S++){if(x=d[S],typeof x=="number"&&!i(m))throw"array index but container is not an array";if(x===-1){if(v=!u(m,d.slice(S+1),g,p),v)break;return}if(!c(m,x,d[S+1],v))break;if(m=m[x],typeof m!="object"||m===null)throw"container is not an object";y=n(y,x),_.push([m,y])}if(v){if(S===d.length-1&&(delete m[d[S]],Array.isArray(m)&&+d[S]===m.length-1))for(;m.length&&m[m.length-1]===void 0;)m.pop()}else m[d[S]]=g}}function n(h,d){var p=d;return t(d)?p="["+d+"]":h&&(p="."+d),h+p}function u(h,d,p,g){var m=i(p),y=!0,_=p,v=g.replace("-1",0),x=m?!1:s(p,v),S=d[0],M;for(M=0;M<h.length;M++)v=g.replace("-1",M),m&&(_=p[M%p.length],x=s(_,v)),x&&(y=!1),c(h,M,S,x)&&l(h[M],d,g.replace("-1",M))(_);return y}function c(h,d,p,g){if(h[d]===void 0){if(g)return!1;typeof p=="number"?h[d]=[]:h[d]={}}return!0}function f(h,d,p){return{set:function(){throw"bad container"},get:function(){},astr:d,parts:p,obj:h}}}}),cu=de({"src/lib/keyed_container.js"(e,r){"use strict";var t=sl(),i=/^\w*$/,a=0,o=1,s=2,l=3,n=4;r.exports=function(c,f,h,d){h=h||"name",d=d||"value";var p,g,m,y={};f&&f.length?(m=t(c,f),g=m.get()):g=c,f=f||"";var _={};if(g)for(p=0;p<g.length;p++)_[g[p][h]]=p;var v=i.test(d),x={set:function(S,M){var C=M===null?n:a;if(!g){if(!m||C===n)return;g=[],m.set(g)}var w=_[S];if(w===void 0){if(C===n)return;C=C|l,w=g.length,_[S]=w}else M!==(v?g[w][d]:t(g[w],d).get())&&(C=C|s);var k=g[w]=g[w]||{};return k[h]=S,v?k[d]=M:t(k,d).set(M),M!==null&&(C=C&~n),y[w]=y[w]|C,x},get:function(S){if(g){var M=_[S];if(M!==void 0)return v?g[M][d]:t(g[M],d).get()}},rename:function(S,M){var C=_[S];return C===void 0||(y[C]=y[C]|o,_[M]=C,delete _[S],g[C][h]=M),x},remove:function(S){var M=_[S];if(M===void 0)return x;var C=g[M];if(Object.keys(C).length>2)return y[M]=y[M]|s,x.set(S,null);if(v){for(p=M;p<g.length;p++)y[p]=y[p]|l;for(p=M;p<g.length;p++)_[g[p][h]]--;g.splice(M,1),delete _[S]}else t(C,d).set(null),y[M]=y[M]|s|n;return x},constructUpdate:function(){for(var S,M,C={},w=Object.keys(y),k=0;k<w.length;k++)M=w[k],S=f+"["+M+"]",g[M]?(y[M]&o&&(C[S+"."+h]=g[M][h]),y[M]&s&&(v?C[S+"."+d]=y[M]&n?null:g[M][d]:C[S+"."+d]=y[M]&n?null:t(g[M],d).get())):C[S]=null;return C}};return x}}}),ah=de({"src/lib/relative_attr.js"(e,r){"use strict";var t=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,i=/^[^\.\[\]]+$/;r.exports=function(a,o){for(;o;){var s=a.match(t);if(s)a=s[1];else if(a.match(i))a="";else throw new Error("bad relativeAttr call:"+[a,o]);if(o.charAt(0)==="^")o=o.slice(1);else break}return a&&o.charAt(0)!=="["?a+"."+o:a+o}}}),o1=de({"src/lib/to_log_range.js"(e,r){"use strict";var t=da();r.exports=function(a,o){if(a>0)return Math.log(a)/Math.LN10;var s=Math.log(Math.min(o[0],o[1]))/Math.LN10;return t(s)||(s=Math.log(Math.max(o[0],o[1]))/Math.LN10-6),s}}}),l0=de({"src/lib/relink_private.js"(e,r){"use strict";var t=Do().isArrayOrTypedArray,i=is();r.exports=function a(o,s){for(var l in s){var n=s[l],u=o[l];if(u!==n)if(l.charAt(0)==="_"||typeof n=="function"){if(l in o)continue;o[l]=n}else if(t(n)&&t(u)&&i(n[0])){if(l==="customdata"||l==="ids")continue;for(var c=Math.min(n.length,u.length),f=0;f<c;f++)u[f]!==n[f]&&i(n[f])&&i(u[f])&&a(u[f],n[f])}else i(n)&&i(u)&&(a(u,n),Object.keys(u).length||delete o[l])}}}}),Tp={};Mr(Tp,{mod:()=>vw,modHalf:()=>mw});function vw(e,r){let t=e%r;return t<0?t+r:t}function mw(e,r){return Math.abs(e)>r/2?e-Math.round(e/r)*r:e}var u0=Ir({"src/lib/mod.ts"(){"use strict"}}),fn=de({"src/lib/extend.js"(e){"use strict";var r=is(),t=Array.isArray;function i(o,s){var l,n;for(l=0;l<o.length;l++){if(n=o[l],n!==null&&typeof n=="object")return!1;n!==void 0&&(s[l]=n)}return!0}e.extendFlat=function(...o){return a(o,!1,!1,!1)},e.extendDeep=function(...o){return a(o,!0,!1,!1)},e.extendDeepAll=function(...o){return a(o,!0,!0,!1)},e.extendDeepNoArrays=function(...o){return a(o,!0,!1,!0)};function a(o,s,l,n){var u=o[0],c=o.length,f,h,d,p,g,m,y;if(c===2&&t(u)&&t(o[1])&&u.length===0){if(y=i(o[1],u),y)return u;u.splice(0,u.length)}for(var _=1;_<c;_++){f=o[_];for(h in f)d=u[h],p=f[h],n&&t(p)?u[h]=p:s&&p&&(r(p)||(g=t(p)))?(g?(g=!1,m=d&&t(d)?d:[]):m=d&&r(d)?d:{},u[h]=a([m,p],s,l,n)):(typeof p<"u"||l)&&(u[h]=p)}return u}}}),us=de({"src/plots/font_attributes.js"(e,r){"use strict";r.exports=function(t){var i=t.variantValues,a=t.editType,o=t.colorEditType;o===void 0&&(o=a);var s={editType:a,valType:"integer",min:1,max:1e3,extras:["normal","bold"],dflt:"normal"};t.noNumericWeightValues&&(s.valType="enumerated",s.values=s.extras,s.extras=void 0,s.min=void 0,s.max=void 0);var l={family:{valType:"string",noBlank:!0,strict:!0,editType:a},size:{valType:"number",min:1,editType:a},color:{valType:"color",editType:o},weight:s,style:{editType:a,valType:"enumerated",values:["normal","italic"],dflt:"normal"},variant:t.noFontVariant?void 0:{editType:a,valType:"enumerated",values:i||["normal","small-caps","all-small-caps","all-petite-caps","petite-caps","unicase"],dflt:"normal"},textcase:t.noFontTextcase?void 0:{editType:a,valType:"enumerated",values:["normal","word caps","upper","lower"],dflt:"normal"},lineposition:t.noFontLineposition?void 0:{editType:a,valType:"flaglist",flags:["under","over","through"],extras:["none"],dflt:"none"},shadow:t.noFontShadow?void 0:{editType:a,valType:"string",dflt:t.autoShadowDflt?"auto":"none"},editType:a};return t.autoSize&&(l.size.dflt="auto"),t.autoColor&&(l.color.dflt="auto"),t.arrayOk&&(l.family.arrayOk=!0,l.weight.arrayOk=!0,l.style.arrayOk=!0,t.noFontVariant||(l.variant.arrayOk=!0),t.noFontTextcase||(l.textcase.arrayOk=!0),t.noFontLineposition||(l.lineposition.arrayOk=!0),t.noFontShadow||(l.shadow.arrayOk=!0),l.size.arrayOk=!0,l.color.arrayOk=!0),l}}}),Ta=de({"src/components/fx/constants.js"(e,r){"use strict";r.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:"Arial, sans-serif",HOVERMINTIME:50,HOVERID:"-hover"}}}),La=de({"src/components/fx/layout_attributes.js"(e,r){"use strict";var t=Ta(),i=us(),a=i({editType:"none"});a.family.dflt=t.HOVERFONT,a.size.dflt=t.HOVERFONTSIZE,r.exports={clickmode:{valType:"flaglist",flags:["event","select"],dflt:"event",editType:"plot",extras:["none"]},dragmode:{valType:"enumerated",values:["zoom","pan","select","lasso","drawclosedpath","drawopenpath","drawline","drawrect","drawcircle","orbit","turntable",!1],dflt:"zoom",editType:"modebar"},hovermode:{valType:"enumerated",values:["x","y","closest",!1,"x unified","y unified"],dflt:"closest",editType:"modebar"},hoversort:{valType:"enumerated",values:["trace","value descending","value ascending"],dflt:"trace",editType:"none"},hoversubplots:{valType:"enumerated",values:["single","overlaying","axis"],dflt:"overlaying",editType:"none"},hoveranywhere:{valType:"boolean",dflt:!1,editType:"none"},clickanywhere:{valType:"boolean",dflt:!1,editType:"none"},hoverdistance:{valType:"integer",min:-1,dflt:20,editType:"none"},spikedistance:{valType:"integer",min:-1,dflt:-1,editType:"none"},hoverlabel:{bgcolor:{valType:"color",editType:"none"},bordercolor:{valType:"color",editType:"none"},font:a,grouptitlefont:i({editType:"none"}),align:{valType:"enumerated",values:["left","right","auto"],dflt:"auto",editType:"none"},namelength:{valType:"integer",min:-1,dflt:15,editType:"none"},showarrow:{valType:"boolean",dflt:!0,editType:"none"},editType:"none"},selectdirection:{valType:"enumerated",values:["h","v","d","any"],dflt:"any",editType:"none"}}}}),ki=de({"src/components/fx/attributes.js"(e,r){"use strict";var t=us(),i=La().hoverlabel,a=fn().extendFlat;r.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:t({arrayOk:!0,editType:"none"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),showarrow:a({},i.showarrow),editType:"none"}}}}),ri=de({"src/plots/attributes.js"(e,r){"use strict";var t=us(),i=ki();r.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes",_noTemplating:!0},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legend:{valType:"subplotid",dflt:"legend",editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},legendgrouptitle:{text:{valType:"string",dflt:"",editType:"style"},font:t({editType:"style"}),editType:"style"},legendrank:{valType:"number",dflt:1e3,editType:"style"},legendwidth:{valType:"number",min:0,editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",editType:"plot",anim:!0},ids:{valType:"data_array",editType:"calc",anim:!0},customdata:{valType:"data_array",editType:"calc"},meta:{valType:"any",arrayOk:!0,editType:"plot"},selectedpoints:{valType:"any",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:i.hoverlabel,uirevision:{valType:"any",editType:"none"}}}}),Ri=de({"node_modules/culori/bundled/culori.cjs"(e,r){var t=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,s=(ve,be)=>{for(var Ce in be)t(ve,Ce,{get:be[Ce],enumerable:!0})},l=(ve,be,Ce,He)=>{if(be&&typeof be=="object"||typeof be=="function")for(let Xe of a(be))!o.call(ve,Xe)&&Xe!==Ce&&t(ve,Xe,{get:()=>be[Xe],enumerable:!(He=i(be,Xe))||He.enumerable});return ve},n=ve=>l(t({},"__esModule",{value:!0}),ve),u={};s(u,{a98:()=>Co,average:()=>zt,averageAngle:()=>Fe,averageNumber:()=>Et,blend:()=>tf,blerp:()=>Te,clampChroma:()=>ci,clampGamut:()=>Kr,clampRgb:()=>_r,colorsNamed:()=>d,convertA98ToXyz65:()=>lt,convertCubehelixToRgb:()=>ea,convertDlchToLab65:()=>zn,convertHsiToRgb:()=>Fo,convertHslToRgb:()=>Yn,convertHsvToRgb:()=>vs,convertHwbToRgb:()=>Uo,convertItpToXyz65:()=>fl,convertJabToJch:()=>_u,convertJabToRgb:()=>Uf,convertJabToXyz65:()=>mf,convertJchToJab:()=>Dl,convertLab65ToDlch:()=>Ea,convertLab65ToRgb:()=>Hi,convertLab65ToXyz65:()=>gi,convertLabToLch:()=>tt,convertLabToRgb:()=>xl,convertLabToXyz50:()=>Ec,convertLchToLab:()=>wt,convertLchuvToLuv:()=>Lc,convertLrgbToOklab:()=>Tt,convertLrgbToRgb:()=>at,convertLuvToLchuv:()=>Yc,convertLuvToXyz50:()=>Zf,convertOkhslToOklab:()=>Pa,convertOkhsvToOklab:()=>sa,convertOklabToLrgb:()=>zr,convertOklabToOkhsl:()=>Oa,convertOklabToOkhsv:()=>Zi,convertOklabToRgb:()=>ii,convertP3ToXyz65:()=>vo,convertProphotoToXyz50:()=>Kc,convertRec2020ToXyz65:()=>Jc,convertRgbToCubehelix:()=>oi,convertRgbToHsi:()=>uo,convertRgbToHsl:()=>Bn,convertRgbToHsv:()=>go,convertRgbToHwb:()=>kl,convertRgbToJab:()=>Sc,convertRgbToLab:()=>Hf,convertRgbToLab65:()=>Li,convertRgbToLrgb:()=>ke,convertRgbToOklab:()=>Bt,convertRgbToXyb:()=>$l,convertRgbToXyz50:()=>kc,convertRgbToXyz65:()=>De,convertRgbToYiq:()=>Zr,convertXybToRgb:()=>Ge,convertXyz50ToLab:()=>Nu,convertXyz50ToLuv:()=>ic,convertXyz50ToProphoto:()=>bl,convertXyz50ToRgb:()=>rc,convertXyz50ToXyz65:()=>rr,convertXyz65ToA98:()=>me,convertXyz65ToItp:()=>tc,convertXyz65ToJab:()=>vf,convertXyz65ToLab65:()=>Cn,convertXyz65ToP3:()=>qs,convertXyz65ToRec2020:()=>Mf,convertXyz65ToRgb:()=>ft,convertXyz65ToXyz50:()=>tr,convertYiqToRgb:()=>qi,converter:()=>L,cubehelix:()=>Rc,differenceCie76:()=>xi,differenceCie94:()=>bi,differenceCiede2000:()=>Ua,differenceCmc:()=>dn,differenceEuclidean:()=>pa,differenceHueChroma:()=>ya,differenceHueNaive:()=>ja,differenceHueSaturation:()=>$i,differenceHyab:()=>pi,differenceItp:()=>Be,differenceKotsarenkoRamos:()=>Jr,displayable:()=>bt,dlab:()=>ys,dlch:()=>Hu,easingGamma:()=>Gn,easingInOutSine:()=>yo,easingMidpoint:()=>lr,easingSmootherstep:()=>Un,easingSmoothstep:()=>Hn,easingSmoothstepInverse:()=>Ca,filterBrightness:()=>Ei,filterContrast:()=>Yi,filterDeficiencyDeuter:()=>Ga,filterDeficiencyProt:()=>va,filterDeficiencyTrit:()=>wn,filterGrayscale:()=>Da,filterHueRotate:()=>bn,filterInvert:()=>wa,filterSaturate:()=>Ui,filterSepia:()=>la,fixupAlpha:()=>vt,fixupHueDecreasing:()=>Ct,fixupHueIncreasing:()=>Lt,fixupHueLonger:()=>kt,fixupHueShorter:()=>yt,formatCss:()=>pl,formatHex:()=>Tu,formatHex8:()=>nc,formatHsl:()=>sc,formatRgb:()=>oc,getMode:()=>J,hsi:()=>lc,hsl:()=>zc,hsv:()=>Pl,hwb:()=>Il,inGamut:()=>dr,interpolate:()=>wr,interpolateWith:()=>Cr,interpolateWithPremultipliedAlpha:()=>Nr,interpolatorLinear:()=>Ke,interpolatorPiecewise:()=>Ze,interpolatorSplineBasis:()=>Ci,interpolatorSplineBasisClosed:()=>Gi,interpolatorSplineMonotone:()=>Vs,interpolatorSplineMonotone2:()=>Ho,interpolatorSplineMonotoneClosed:()=>fa,interpolatorSplineNatural:()=>ga,interpolatorSplineNaturalClosed:()=>qa,itp:()=>Yl,jab:()=>oo,jch:()=>lu,lab:()=>Ms,lab65:()=>uc,lch:()=>Bc,lch65:()=>Oc,lchuv:()=>Zn,lerp:()=>ge,lrgb:()=>Bo,luv:()=>Bs,mapAlphaDivide:()=>Ne,mapAlphaMultiply:()=>Re,mapTransferGamma:()=>et,mapTransferLinear:()=>ut,mapper:()=>Le,modeA98:()=>ht,modeCubehelix:()=>Yt,modeDlab:()=>ho,modeDlch:()=>lo,modeHsi:()=>jo,modeHsl:()=>nl,modeHsv:()=>On,modeHwb:()=>yu,modeItp:()=>Th,modeJab:()=>Bu,modeJch:()=>Ou,modeLab:()=>ql,modeLab65:()=>Nd,modeLch:()=>Wc,modeLch65:()=>bf,modeLchuv:()=>ou,modeLrgb:()=>Lh,modeLuv:()=>Af,modeOkhsl:()=>rn,modeOkhsv:()=>Dn,modeOklab:()=>$o,modeOklch:()=>Go,modeP3:()=>bu,modeProphoto:()=>Qf,modeRec2020:()=>Qc,modeRgb:()=>Pt,modeXyb:()=>st,modeXyz50:()=>pt,modeXyz65:()=>Sr,modeYiq:()=>un,nearest:()=>Ni,okhsl:()=>gr,okhsv:()=>hi,oklab:()=>di,oklch:()=>sn,p3:()=>Io,parse:()=>ae,parseHex:()=>_,parseHsl:()=>ws,parseHslLegacy:()=>Vn,parseHwb:()=>Ul,parseLab:()=>ad,parseLch:()=>nd,parseNamed:()=>g,parseOklab:()=>zo,parseOklch:()=>Us,parseRgb:()=>ie,parseRgbLegacy:()=>R,parseTransparent:()=>ue,prophoto:()=>_s,random:()=>we,rec2020:()=>an,removeParser:()=>H,rgb:()=>cr,round:()=>Pn,samples:()=>As,serializeHex:()=>wl,serializeHex8:()=>Vu,serializeHsl:()=>dl,serializeRgb:()=>Pc,toGamut:()=>yi,trilerp:()=>je,unlerp:()=>Me,useMode:()=>Z,useParser:()=>N,wcagContrast:()=>Wl,wcagLuminance:()=>Gs,xyb:()=>xr,xyz50:()=>kr,xyz65:()=>fi,yiq:()=>Ti}),r.exports=n(u);var c=(ve,be)=>{if(typeof ve=="number"){if(be===3)return{mode:"rgb",r:(ve>>8&15|ve>>4&240)/255,g:(ve>>4&15|ve&240)/255,b:(ve&15|ve<<4&240)/255};if(be===4)return{mode:"rgb",r:(ve>>12&15|ve>>8&240)/255,g:(ve>>8&15|ve>>4&240)/255,b:(ve>>4&15|ve&240)/255,alpha:(ve&15|ve<<4&240)/255};if(be===6)return{mode:"rgb",r:(ve>>16&255)/255,g:(ve>>8&255)/255,b:(ve&255)/255};if(be===8)return{mode:"rgb",r:(ve>>24&255)/255,g:(ve>>16&255)/255,b:(ve>>8&255)/255,alpha:(ve&255)/255}}},f=c,h={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},d=h,p=ve=>f(d[ve.toLowerCase()],6),g=p,m=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,y=ve=>{let be;return(be=ve.match(m))?f(parseInt(be[1],16),be[1].length):void 0},_=y,v="([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)",x=`(?:${v}|none)`,S=`${v}%`,M=`(?:${v}%|none)`,C=`(?:${v}%|${v})`,w=`(?:${v}%|${v}|none)`,k=`(?:${v}(deg|grad|rad|turn)|${v})`,A=`(?:${v}(deg|grad|rad|turn)|${v}|none)`,b="\\s*,\\s*",E=new RegExp("^"+w+"$"),T=new RegExp(`^rgba?\\(\\s*${v}${b}${v}${b}${v}\\s*(?:,\\s*${C}\\s*)?\\)$`),F=new RegExp(`^rgba?\\(\\s*${S}${b}${S}${b}${S}\\s*(?:,\\s*${C}\\s*)?\\)$`),D=ve=>{let be={mode:"rgb"},Ce;if(Ce=ve.match(T))Ce[1]!==void 0&&(be.r=Ce[1]/255),Ce[2]!==void 0&&(be.g=Ce[2]/255),Ce[3]!==void 0&&(be.b=Ce[3]/255);else if(Ce=ve.match(F))Ce[1]!==void 0&&(be.r=Ce[1]/100),Ce[2]!==void 0&&(be.g=Ce[2]/100),Ce[3]!==void 0&&(be.b=Ce[3]/100);else return;return Ce[4]!==void 0?be.alpha=Math.max(0,Math.min(1,Ce[4]/100)):Ce[5]!==void 0&&(be.alpha=Math.max(0,Math.min(1,+Ce[5]))),be},R=D,P=(ve,be)=>ve===void 0?void 0:typeof ve!="object"?ae(ve):ve.mode!==void 0?ve:be?ar(Ot({},ve),{mode:be}):void 0,z=P,I=(ve="rgb")=>be=>(be=z(be,ve))!==void 0?be.mode===ve?be:B[be.mode][ve]?B[be.mode][ve](be):ve==="rgb"?B[be.mode].rgb(be):B.rgb[ve](B[be.mode].rgb(be)):void 0,L=I,B={},O={},G=[],W={},X=ve=>ve,Z=ve=>(B[ve.mode]=Ot(Ot({},B[ve.mode]),ve.toMode),Object.keys(ve.fromMode||{}).forEach(be=>{B[be]||(B[be]={}),B[be][ve.mode]=ve.fromMode[be]}),ve.ranges||(ve.ranges={}),ve.difference||(ve.difference={}),ve.channels.forEach(be=>{if(ve.ranges[be]===void 0&&(ve.ranges[be]=[0,1]),!ve.interpolate[be])throw new Error(`Missing interpolator for: ${be}`);typeof ve.interpolate[be]=="function"&&(ve.interpolate[be]={use:ve.interpolate[be]}),ve.interpolate[be].fixup||(ve.interpolate[be].fixup=X)}),O[ve.mode]=ve,(ve.parse||[]).forEach(be=>{N(be,ve.mode)}),L(ve.mode)),J=ve=>O[ve],N=(ve,be)=>{if(typeof ve=="string"){if(!be)throw new Error("'mode' required when 'parser' is a string");W[ve]=be}else typeof ve=="function"&&G.indexOf(ve)<0&&G.push(ve)},H=ve=>{if(typeof ve=="string")delete W[ve];else if(typeof ve=="function"){let be=G.indexOf(ve);be>0&&G.splice(be,1)}},$=/[^\x00-\x7F]|[a-zA-Z_]/,U=/[^\x00-\x7F]|[-\w]/,V={Function:"function",Ident:"ident",Number:"number",Percentage:"percentage",ParenClose:")",None:"none",Hue:"hue",Alpha:"alpha"},j=0;function q(ve){let be=ve[j],Ce=ve[j+1];return be==="-"||be==="+"?/\d/.test(Ce)||Ce==="."&&/\d/.test(ve[j+2]):be==="."?/\d/.test(Ce):/\d/.test(be)}function Y(ve){if(j>=ve.length)return!1;let be=ve[j];if($.test(be))return!0;if(be==="-"){if(ve.length-j<2)return!1;let Ce=ve[j+1];return!!(Ce==="-"||$.test(Ce))}return!1}var K={deg:1,rad:180/Math.PI,grad:9/10,turn:360};function te(ve){let be="";if((ve[j]==="-"||ve[j]==="+")&&(be+=ve[j++]),be+=ne(ve),ve[j]==="."&&/\d/.test(ve[j+1])&&(be+=ve[j++]+ne(ve)),(ve[j]==="e"||ve[j]==="E")&&((ve[j+1]==="-"||ve[j+1]==="+")&&/\d/.test(ve[j+2])?be+=ve[j++]+ve[j++]+ne(ve):/\d/.test(ve[j+1])&&(be+=ve[j++]+ne(ve))),Y(ve)){let Ce=se(ve);return Ce==="deg"||Ce==="rad"||Ce==="turn"||Ce==="grad"?{type:V.Hue,value:be*K[Ce]}:void 0}return ve[j]==="%"?(j++,{type:V.Percentage,value:+be}):{type:V.Number,value:+be}}function ne(ve){let be="";for(;/\d/.test(ve[j]);)be+=ve[j++];return be}function se(ve){let be="";for(;j<ve.length&&U.test(ve[j]);)be+=ve[j++];return be}function le(ve){let be=se(ve);return ve[j]==="("?(j++,{type:V.Function,value:be}):be==="none"?{type:V.None,value:void 0}:{type:V.Ident,value:be}}function ce(ve=""){let be=ve.trim(),Ce=[],He;for(j=0;j<be.length;){if(He=be[j++],He===`
+`||He==="	"||He===" "){for(;j<be.length&&(be[j]===`
+`||be[j]==="	"||be[j]===" ");)j++;continue}if(He===",")return;if(He===")"){Ce.push({type:V.ParenClose});continue}if(He==="+"){if(j--,q(be)){Ce.push(te(be));continue}return}if(He==="-"){if(j--,q(be)){Ce.push(te(be));continue}if(Y(be)){Ce.push({type:V.Ident,value:se(be)});continue}return}if(He==="."){if(j--,q(be)){Ce.push(te(be));continue}return}if(He==="/"){for(;j<be.length&&(be[j]===`
+`||be[j]==="	"||be[j]===" ");)j++;let Xe;if(q(be)&&(Xe=te(be),Xe.type!==V.Hue)){Ce.push({type:V.Alpha,value:Xe});continue}if(Y(be)&&se(be)==="none"){Ce.push({type:V.Alpha,value:{type:V.None,value:void 0}});continue}return}if(/\d/.test(He)){j--,Ce.push(te(be));continue}if($.test(He)){j--,Ce.push(le(be));continue}return}return Ce}function pe(ve){ve._i=0;let be=ve[ve._i++];if(!be||be.type!==V.Function||be.value!=="color"||(be=ve[ve._i++],be.type!==V.Ident))return;let Ce=W[be.value];if(!Ce)return;let He={mode:Ce},Xe=xe(ve,!1);if(!Xe)return;let it=J(Ce).channels;for(let Dt=0,or,Dr;Dt<it.length;Dt++)or=Xe[Dt],Dr=it[Dt],or.type!==V.None&&(He[Dr]=or.type===V.Number?or.value:or.value/100,Dr==="alpha"&&(He[Dr]=Math.max(0,Math.min(1,He[Dr]))));return He}function xe(ve,be){let Ce=[],He;for(;ve._i<ve.length;){if(He=ve[ve._i++],He.type===V.None||He.type===V.Number||He.type===V.Alpha||He.type===V.Percentage||be&&He.type===V.Hue){Ce.push(He);continue}if(He.type===V.ParenClose){if(ve._i<ve.length)return;continue}return}if(!(Ce.length<3||Ce.length>4)){if(Ce.length===4){if(Ce[3].type!==V.Alpha)return;Ce[3]=Ce[3].value}return Ce.length===3&&Ce.push({type:V.None,value:void 0}),Ce.every(Xe=>Xe.type!==V.Alpha)?Ce:void 0}}function ye(ve,be){ve._i=0;let Ce=ve[ve._i++];if(!Ce||Ce.type!==V.Function)return;let He=xe(ve,be);if(He)return He.unshift(Ce.value),He}var fe=ve=>{if(typeof ve!="string")return;let be=ce(ve),Ce=be?ye(be,!0):void 0,He,Xe=0,it=G.length;for(;Xe<it;)if((He=G[Xe++](ve,Ce))!==void 0)return He;return be?pe(be):void 0},ae=fe;function ee(ve,be){if(!be||be[0]!=="rgb"&&be[0]!=="rgba")return;let Ce={mode:"rgb"},[,He,Xe,it,Dt]=be;if(!(He.type===V.Hue||Xe.type===V.Hue||it.type===V.Hue))return He.type!==V.None&&(Ce.r=He.type===V.Number?He.value/255:He.value/100),Xe.type!==V.None&&(Ce.g=Xe.type===V.Number?Xe.value/255:Xe.value/100),it.type!==V.None&&(Ce.b=it.type===V.Number?it.value/255:it.value/100),Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var ie=ee,Q=ve=>ve==="transparent"?{mode:"rgb",r:0,g:0,b:0,alpha:0}:void 0,ue=Q,ge=(ve,be,Ce)=>ve+Ce*(be-ve),Me=(ve,be,Ce)=>(Ce-ve)/(be-ve),Te=(ve,be,Ce,He,Xe,it)=>ge(ge(ve,be,Xe),ge(Ce,He,Xe),it),je=(ve,be,Ce,He,Xe,it,Dt,or,Dr,vi,ai)=>ge(Te(ve,be,Ce,He,Dr,vi),Te(Xe,it,Dt,or,Dr,vi),ai),Ve=ve=>{let be=[];for(let Ce=0;Ce<ve.length-1;Ce++){let He=ve[Ce],Xe=ve[Ce+1];He===void 0&&Xe===void 0?be.push(void 0):He!==void 0&&Xe!==void 0?be.push([He,Xe]):be.push(He!==void 0?[He,He]:[Xe,Xe])}return be},Ze=ve=>be=>{let Ce=Ve(be);return He=>{let Xe=He*Ce.length,it=He>=1?Ce.length-1:Math.max(Math.floor(Xe),0),Dt=Ce[it];return Dt===void 0?void 0:ve(Dt[0],Dt[1],Xe-it)}},Ke=Ze(ge),vt=ve=>{let be=!1,Ce=ve.map(He=>He!==void 0?(be=!0,He):1);return be?Ce:ve},xt={mode:"rgb",channels:["r","g","b","alpha"],parse:[ie,_,R,g,ue,"srgb"],serialize:"srgb",interpolate:{r:Ke,g:Ke,b:Ke,alpha:{use:Ke,fixup:vt}},gamut:!0,white:{r:1,g:1,b:1},black:{r:0,g:0,b:0}},Pt=xt,mt=(ve=0)=>Math.pow(Math.abs(ve),563/256)*Math.sign(ve),Mt=ve=>{let be=mt(ve.r),Ce=mt(ve.g),He=mt(ve.b),Xe={mode:"xyz65",x:.5766690429101305*be+.1855582379065463*Ce+.1882286462349947*He,y:.297344975250536*be+.6273635662554661*Ce+.0752914584939979*He,z:.0270313613864123*be+.0706888525358272*Ce+.9913375368376386*He};return ve.alpha!==void 0&&(Xe.alpha=ve.alpha),Xe},lt=Mt,qe=ve=>Math.pow(Math.abs(ve),256/563)*Math.sign(ve),Ye=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe={mode:"a98",r:qe(ve*2.0415879038107465-be*.5650069742788597-.3447313507783297*Ce),g:qe(ve*-.9692436362808798+be*1.8759675015077206+.0415550574071756*Ce),b:qe(ve*.0134442806320312-be*.1183623922310184+1.0151749943912058*Ce)};return He!==void 0&&(Xe.alpha=He),Xe},me=Ye,_e=(ve=0)=>{let be=Math.abs(ve);return be<=.04045?ve/12.92:(Math.sign(ve)||1)*Math.pow((be+.055)/1.055,2.4)},Ae=({r:ve,g:be,b:Ce,alpha:He})=>{let Xe={mode:"lrgb",r:_e(ve),g:_e(be),b:_e(Ce)};return He!==void 0&&(Xe.alpha=He),Xe},ke=Ae,Ee=ve=>{let{r:be,g:Ce,b:He,alpha:Xe}=ke(ve),it={mode:"xyz65",x:.4123907992659593*be+.357584339383878*Ce+.1804807884018343*He,y:.2126390058715102*be+.715168678767756*Ce+.0721923153607337*He,z:.0193308187155918*be+.119194779794626*Ce+.9505321522496607*He};return Xe!==void 0&&(it.alpha=Xe),it},De=Ee,Je=(ve=0)=>{let be=Math.abs(ve);return be>.0031308?(Math.sign(ve)||1)*(1.055*Math.pow(be,1/2.4)-.055):ve*12.92},Ue=({r:ve,g:be,b:Ce,alpha:He},Xe="rgb")=>{let it={mode:Xe,r:Je(ve),g:Je(be),b:Je(Ce)};return He!==void 0&&(it.alpha=He),it},at=Ue,rt=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=at({r:ve*3.2409699419045226-be*1.537383177570094-.4986107602930034*Ce,g:ve*-.9692436362808796+be*1.8759675015077204+.0415550574071756*Ce,b:ve*.0556300796969936-be*.2039769588889765+1.0569715142428784*Ce});return He!==void 0&&(Xe.alpha=He),Xe},ft=rt,At=ar(Ot({},Pt),{mode:"a98",parse:["a98-rgb"],serialize:"a98-rgb",fromMode:{rgb:ve=>me(De(ve)),xyz65:me},toMode:{rgb:ve=>ft(lt(ve)),xyz65:lt}}),ht=At,Gt=ve=>(ve=ve%360)<0?ve+360:ve,fr=Gt,gt=(ve,be)=>ve.map((Ce,He,Xe)=>{if(Ce===void 0)return Ce;let it=fr(Ce);return He===0||ve[He-1]===void 0?it:be(it-fr(Xe[He-1]))}).reduce((Ce,He)=>!Ce.length||He===void 0||Ce[Ce.length-1]===void 0?(Ce.push(He),Ce):(Ce.push(He+Ce[Ce.length-1]),Ce),[]),yt=ve=>gt(ve,be=>Math.abs(be)<=180?be:be-360*Math.sign(be)),kt=ve=>gt(ve,be=>Math.abs(be)>=180||be===0?be:be-360*Math.sign(be)),Lt=ve=>gt(ve,be=>be>=0?be:be+360),Ct=ve=>gt(ve,be=>be<=0?be:be-360),$t=[-.14861,1.78277,-.29227,-.90649,1.97294,0],mr=Math.PI/180,br=180/Math.PI,Er=$t[3]*$t[4],Tr=$t[1]*$t[4],Ur=$t[1]*$t[2]-$t[0]*$t[3],Ai=({r:ve,g:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=(Ur*Ce+ve*Er-be*Tr)/(Ur+Er-Tr),it=Ce-Xe,Dt=($t[4]*(be-Xe)-$t[2]*it)/$t[3],or={mode:"cubehelix",l:Xe,s:Xe===0||Xe===1?void 0:Math.sqrt(it*it+Dt*Dt)/($t[4]*Xe*(1-Xe))};return or.s&&(or.h=Math.atan2(Dt,it)*br-120),He!==void 0&&(or.alpha=He),or},oi=Ai,Qr=({h:ve,s:be,l:Ce,alpha:He})=>{let Xe={mode:"rgb"};ve=(ve===void 0?0:ve+120)*mr,Ce===void 0&&(Ce=0);let it=be===void 0?0:be*Ce*(1-Ce),Dt=Math.cos(ve),or=Math.sin(ve);return Xe.r=Ce+it*($t[0]*Dt+$t[1]*or),Xe.g=Ce+it*($t[2]*Dt+$t[3]*or),Xe.b=Ce+it*($t[4]*Dt+$t[5]*or),He!==void 0&&(Xe.alpha=He),Xe},ea=Qr,$i=(ve,be)=>{if(ve.h===void 0||be.h===void 0||!ve.s||!be.s)return 0;let Ce=fr(ve.h),He=fr(be.h),Xe=Math.sin((He-Ce+360)/2*Math.PI/180);return 2*Math.sqrt(ve.s*be.s)*Xe},ja=(ve,be)=>{if(ve.h===void 0||be.h===void 0)return 0;let Ce=fr(ve.h),He=fr(be.h);return Math.abs(He-Ce)>180?Ce-(He-360*Math.sign(He-Ce)):He-Ce},ya=(ve,be)=>{if(ve.h===void 0||be.h===void 0||!ve.c||!be.c)return 0;let Ce=fr(ve.h),He=fr(be.h),Xe=Math.sin((He-Ce+360)/2*Math.PI/180);return 2*Math.sqrt(ve.c*be.c)*Xe},pa=(ve="rgb",be=[1,1,1,0])=>{let Ce=J(ve),He=Ce.channels,Xe=Ce.difference,it=L(ve);return(Dt,or)=>{let Dr=it(Dt),vi=it(or);return Math.sqrt(He.reduce((ai,ei,Oi)=>{let Si=Xe[ei]?Xe[ei](Dr,vi):Dr[ei]-vi[ei];return ai+(be[Oi]||0)*Math.pow(isNaN(Si)?0:Si,2)},0))}},xi=()=>pa("lab65"),bi=(ve=1,be=.045,Ce=.015)=>{let He=L("lab65");return(Xe,it)=>{let Dt=He(Xe),or=He(it),Dr=Dt.l,vi=Dt.a,ai=Dt.b,ei=Math.sqrt(vi*vi+ai*ai),Oi=or.l,Si=or.a,zi=or.b,Vi=Math.sqrt(Si*Si+zi*zi),Xi=Math.pow(Dr-Oi,2),ha=Math.pow(ei-Vi,2),$a=Math.pow(vi-Si,2)+Math.pow(ai-zi,2)-ha;return Math.sqrt(Xi/Math.pow(ve,2)+ha/Math.pow(1+be*ei,2)+$a/Math.pow(1+Ce*ei,2))}},Ua=(ve=1,be=1,Ce=1)=>{let He=L("lab65");return(Xe,it)=>{let Dt=He(Xe),or=He(it),Dr=Dt.l,vi=Dt.a,ai=Dt.b,ei=Math.sqrt(vi*vi+ai*ai),Oi=or.l,Si=or.a,zi=or.b,Vi=Math.sqrt(Si*Si+zi*zi),Xi=(ei+Vi)/2,ha=.5*(1-Math.sqrt(Math.pow(Xi,7)/(Math.pow(Xi,7)+Math.pow(25,7)))),$a=vi*(1+ha),_o=Si*(1+ha),xs=Math.sqrt($a*$a+ai*ai),el=Math.sqrt(_o*_o+zi*zi),vl=Math.abs($a)+Math.abs(ai)===0?0:Math.atan2(ai,$a);vl+=(vl<0)*2*Math.PI;let Al=Math.abs(_o)+Math.abs(zi)===0?0:Math.atan2(zi,_o);Al+=(Al<0)*2*Math.PI;let uu=Oi-Dr,Ef=el-xs,Rh=xs*el===0?0:Al-vl;Rh-=(Rh>Math.PI)*2*Math.PI,Rh+=(Rh<-Math.PI)*2*Math.PI;let Gd=2*Math.sqrt(xs*el)*Math.sin(Rh/2),ov=(Dr+Oi)/2,sv=(xs+el)/2,kf;xs*el===0?kf=vl+Al:(kf=(vl+Al)/2,kf-=(Math.abs(vl-Al)>Math.PI)*Math.PI,kf+=(kf<0)*2*Math.PI);let Y2=Math.pow(ov-50,2),X2=1-.17*Math.cos(kf-Math.PI/6)+.24*Math.cos(2*kf)+.32*Math.cos(3*kf+Math.PI/30)-.2*Math.cos(4*kf-63*Math.PI/180),oy=1+.015*Y2/Math.sqrt(20+Y2),sy=1+.045*sv,Zm=1+.015*sv*X2,GS=30*Math.PI/180*Math.exp(-1*Math.pow((180/Math.PI*kf-275)/25,2)),Z2=2*Math.sqrt(Math.pow(sv,7)/(Math.pow(sv,7)+Math.pow(25,7))),ly=-1*Math.sin(2*GS)*Z2;return Math.sqrt(Math.pow(uu/(ve*oy),2)+Math.pow(Ef/(be*sy),2)+Math.pow(Gd/(Ce*Zm),2)+ly*Ef/(be*sy)*Gd/(Ce*Zm))}},dn=(ve=1,be=1)=>{let Ce=L("lab65");return(He,Xe)=>{let it=Ce(He),Dt=it.l,or=it.a,Dr=it.b,vi=Math.sqrt(or*or+Dr*Dr),ai=Math.atan2(Dr,or);ai=ai+2*Math.PI*(ai<0);let ei=Ce(Xe),Oi=ei.l,Si=ei.a,zi=ei.b,Vi=Math.sqrt(Si*Si+zi*zi),Xi=Math.pow(Dt-Oi,2),ha=Math.pow(vi-Vi,2),$a=Math.pow(or-Si,2)+Math.pow(Dr-zi,2)-ha,_o=Math.sqrt(Math.pow(vi,4)/(Math.pow(vi,4)+1900)),xs=ai>=164/180*Math.PI&&ai<=345/180*Math.PI?.56+Math.abs(.2*Math.cos(ai+168/180*Math.PI)):.36+Math.abs(.4*Math.cos(ai+35/180*Math.PI)),el=Dt<16?.511:.040975*Dt/(1+.01765*Dt),vl=.0638*vi/(1+.0131*vi)+.638,Al=vl*(_o*xs+1-_o);return Math.sqrt(Xi/Math.pow(ve*el,2)+ha/Math.pow(be*vl,2)+$a/Math.pow(Al,2))}},pi=()=>{let ve=L("lab65");return(be,Ce)=>{let He=ve(be),Xe=ve(Ce),it=He.l-Xe.l,Dt=He.a-Xe.a,or=He.b-Xe.b;return Math.abs(it)+Math.sqrt(Dt*Dt+or*or)}},Jr=()=>pa("yiq",[.5053,.299,.1957]),Be=()=>pa("itp",[518400,129600,518400]),Fe=ve=>{let be=ve.reduce((He,Xe)=>{if(Xe!==void 0){let it=Xe*Math.PI/180;He.sin+=Math.sin(it),He.cos+=Math.cos(it)}return He},{sin:0,cos:0}),Ce=Math.atan2(be.sin,be.cos)*180/Math.PI;return Ce<0?360+Ce:Ce},Et=ve=>{let be=ve.filter(Ce=>Ce!==void 0);return be.length?be.reduce((Ce,He)=>Ce+He,0)/be.length:void 0},St=ve=>typeof ve=="function";function zt(ve,be="rgb",Ce){let He=J(be),Xe=ve.map(L(be));return He.channels.reduce((it,Dt)=>{let or=Xe.map(Dr=>Dr[Dt]).filter(Dr=>Dr!==void 0);if(or.length){let Dr;St(Ce)?Dr=Ce:Ce&&St(Ce[Dt])?Dr=Ce[Dt]:He.average&&St(He.average[Dt])?Dr=He.average[Dt]:Dr=Et,it[Dt]=Dr(or,Dt)}return it},{mode:be})}var Wt={mode:"cubehelix",channels:["h","s","l","alpha"],parse:["--cubehelix"],serialize:"--cubehelix",ranges:{h:[0,360],s:[0,4.614],l:[0,1]},fromMode:{rgb:oi},toMode:{rgb:ea},interpolate:{h:{use:Ke,fixup:yt},s:Ke,l:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:$i},average:{h:Fe}},Yt=Wt,ze=({l:ve,a:be,b:Ce,alpha:He},Xe="lch")=>{be===void 0&&(be=0),Ce===void 0&&(Ce=0);let it=Math.sqrt(be*be+Ce*Ce),Dt={mode:Xe,l:ve,c:it};return it&&(Dt.h=fr(Math.atan2(Ce,be)*180/Math.PI)),He!==void 0&&(Dt.alpha=He),Dt},tt=ze,ct=({l:ve,c:be,h:Ce,alpha:He},Xe="lab")=>{Ce===void 0&&(Ce=0);let it={mode:Xe,l:ve,a:be?be*Math.cos(Ce/180*Math.PI):0,b:be?be*Math.sin(Ce/180*Math.PI):0};return He!==void 0&&(it.alpha=He),it},wt=ct,Nt=Math.pow(29,3)/Math.pow(3,3),It=Math.pow(6,3)/Math.pow(29,3),Zt={X:.3457/.3585,Y:1,Z:(1-.3457-.3585)/.3585},qt={X:.3127/.329,Y:1,Z:(1-.3127-.329)/.329},vr=Math.pow(29,3)/Math.pow(3,3),Br=Math.pow(6,3)/Math.pow(29,3),Pr=ve=>Math.pow(ve,3)>It?Math.pow(ve,3):(116*ve-16)/Nt,Mi=({l:ve,a:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=(ve+16)/116,it=be/500+Xe,Dt=Xe-Ce/200,or={mode:"xyz65",x:Pr(it)*qt.X,y:Pr(Xe)*qt.Y,z:Pr(Dt)*qt.Z};return He!==void 0&&(or.alpha=He),or},gi=Mi,ba=ve=>ft(gi(ve)),Hi=ba,Za=ve=>ve>It?Math.cbrt(ve):(Nt*ve+16)/116,oa=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Za(ve/qt.X),it=Za(be/qt.Y),Dt=Za(Ce/qt.Z),or={mode:"lab65",l:116*it-16,a:500*(Xe-it),b:200*(it-Dt)};return He!==void 0&&(or.alpha=He),or},Cn=oa,_n=ve=>{let be=Cn(De(ve));return ve.r===ve.b&&ve.b===ve.g&&(be.a=be.b=0),be},Li=_n,In=1,pn=1,Ka=26/180*Math.PI,Rn=Math.cos(Ka),tn=Math.sin(Ka),Mn=100/Math.log(139/100),Kn=({l:ve,c:be,h:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe={mode:"lab65",l:(Math.exp(ve*In/Mn)-1)/.0039},it=(Math.exp(.0435*be*pn*In)-1)/.075,Dt=it*Math.cos(Ce/180*Math.PI-Ka),or=it*Math.sin(Ce/180*Math.PI-Ka);return Xe.a=Dt*Rn-or/.83*tn,Xe.b=Dt*tn+or/.83*Rn,He!==void 0&&(Xe.alpha=He),Xe},zn=Kn,ua=({l:ve,a:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=be*Rn+Ce*tn,it=.83*(Ce*Rn-be*tn),Dt=Math.sqrt(Xe*Xe+it*it),or={mode:"dlch",l:Mn/In*Math.log(1+.0039*ve),c:Math.log(1+.075*Dt)/(.0435*pn*In)};return or.c&&(or.h=fr((Math.atan2(it,Xe)+Ka)/Math.PI*180)),He!==void 0&&(or.alpha=He),or},Ea=ua,ln=ve=>zn(tt(ve,"dlch")),on=ve=>wt(Ea(ve),"dlab"),ao={mode:"dlab",parse:["--din99o-lab"],serialize:"--din99o-lab",toMode:{lab65:ln,rgb:ve=>Hi(ln(ve))},fromMode:{lab65:on,rgb:ve=>on(Li(ve))},channels:["l","a","b","alpha"],ranges:{l:[0,100],a:[-40.09,45.501],b:[-40.469,44.344]},interpolate:{l:Ke,a:Ke,b:Ke,alpha:{use:Ke,fixup:vt}}},ho=ao,Jn={mode:"dlch",parse:["--din99o-lch"],serialize:"--din99o-lch",toMode:{lab65:zn,dlab:ve=>wt(ve,"dlab"),rgb:ve=>Hi(zn(ve))},fromMode:{lab65:Ea,dlab:ve=>tt(ve,"dlch"),rgb:ve=>Ea(Li(ve))},channels:["l","c","h","alpha"],ranges:{l:[0,100],c:[0,51.484],h:[0,360]},interpolate:{l:Ke,c:Ke,h:{use:Ke,fixup:yt},alpha:{use:Ke,fixup:vt}},difference:{h:ya},average:{h:Fe}},lo=Jn;function Fo({h:ve,s:be,i:Ce,alpha:He}){ve=fr(ve!==void 0?ve:0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.abs(ve/60%2-1),it;switch(Math.floor(ve/60)){case 0:it={r:Ce*(1+be*(3/(2-Xe)-1)),g:Ce*(1+be*(3*(1-Xe)/(2-Xe)-1)),b:Ce*(1-be)};break;case 1:it={r:Ce*(1+be*(3*(1-Xe)/(2-Xe)-1)),g:Ce*(1+be*(3/(2-Xe)-1)),b:Ce*(1-be)};break;case 2:it={r:Ce*(1-be),g:Ce*(1+be*(3/(2-Xe)-1)),b:Ce*(1+be*(3*(1-Xe)/(2-Xe)-1))};break;case 3:it={r:Ce*(1-be),g:Ce*(1+be*(3*(1-Xe)/(2-Xe)-1)),b:Ce*(1+be*(3/(2-Xe)-1))};break;case 4:it={r:Ce*(1+be*(3*(1-Xe)/(2-Xe)-1)),g:Ce*(1-be),b:Ce*(1+be*(3/(2-Xe)-1))};break;case 5:it={r:Ce*(1+be*(3/(2-Xe)-1)),g:Ce*(1-be),b:Ce*(1+be*(3*(1-Xe)/(2-Xe)-1))};break;default:it={r:Ce*(1-be),g:Ce*(1-be),b:Ce*(1-be)}}return it.mode="rgb",He!==void 0&&(it.alpha=He),it}function uo({r:ve,g:be,b:Ce,alpha:He}){ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.max(ve,be,Ce),it=Math.min(ve,be,Ce),Dt={mode:"hsi",s:ve+be+Ce===0?0:1-3*it/(ve+be+Ce),i:(ve+be+Ce)/3};return Xe-it!==0&&(Dt.h=(Xe===ve?(be-Ce)/(Xe-it)+(be<Ce)*6:Xe===be?(Ce-ve)/(Xe-it)+2:(ve-be)/(Xe-it)+4)*60),He!==void 0&&(Dt.alpha=He),Dt}var Qn={mode:"hsi",toMode:{rgb:Fo},parse:["--hsi"],serialize:"--hsi",fromMode:{rgb:uo},channels:["h","s","i","alpha"],ranges:{h:[0,360]},gamut:"rgb",interpolate:{h:{use:Ke,fixup:yt},s:Ke,i:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:$i},average:{h:Fe}},jo=Qn;function Yn({h:ve,s:be,l:Ce,alpha:He}){ve=fr(ve!==void 0?ve:0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Ce+be*(Ce<.5?Ce:1-Ce),it=Xe-(Xe-Ce)*2*Math.abs(ve/60%2-1),Dt;switch(Math.floor(ve/60)){case 0:Dt={r:Xe,g:it,b:2*Ce-Xe};break;case 1:Dt={r:it,g:Xe,b:2*Ce-Xe};break;case 2:Dt={r:2*Ce-Xe,g:Xe,b:it};break;case 3:Dt={r:2*Ce-Xe,g:it,b:Xe};break;case 4:Dt={r:it,g:2*Ce-Xe,b:Xe};break;case 5:Dt={r:Xe,g:2*Ce-Xe,b:it};break;default:Dt={r:2*Ce-Xe,g:2*Ce-Xe,b:2*Ce-Xe}}return Dt.mode="rgb",He!==void 0&&(Dt.alpha=He),Dt}function Bn({r:ve,g:be,b:Ce,alpha:He}){ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.max(ve,be,Ce),it=Math.min(ve,be,Ce),Dt={mode:"hsl",s:Xe===it?0:(Xe-it)/(1-Math.abs(Xe+it-1)),l:.5*(Xe+it)};return Xe-it!==0&&(Dt.h=(Xe===ve?(be-Ce)/(Xe-it)+(be<Ce)*6:Xe===be?(Ce-ve)/(Xe-it)+2:(ve-be)/(Xe-it)+4)*60),He!==void 0&&(Dt.alpha=He),Dt}var ps=(ve,be)=>{switch(be){case"deg":return+ve;case"rad":return ve/Math.PI*180;case"grad":return ve/10*9;case"turn":return ve*360}},xo=ps,no=new RegExp(`^hsla?\\(\\s*${k}${b}${S}${b}${S}\\s*(?:,\\s*${C}\\s*)?\\)$`),Mo=ve=>{let be=ve.match(no);if(!be)return;let Ce={mode:"hsl"};return be[3]!==void 0?Ce.h=+be[3]:be[1]!==void 0&&be[2]!==void 0&&(Ce.h=xo(be[1],be[2])),be[4]!==void 0&&(Ce.s=Math.min(Math.max(0,be[4]/100),1)),be[5]!==void 0&&(Ce.l=Math.min(Math.max(0,be[5]/100),1)),be[6]!==void 0?Ce.alpha=Math.max(0,Math.min(1,be[6]/100)):be[7]!==void 0&&(Ce.alpha=Math.max(0,Math.min(1,+be[7]))),Ce},Vn=Mo;function ts(ve,be){if(!be||be[0]!=="hsl"&&be[0]!=="hsla")return;let Ce={mode:"hsl"},[,He,Xe,it,Dt]=be;if(He.type!==V.None){if(He.type===V.Percentage)return;Ce.h=He.value}if(Xe.type!==V.None){if(Xe.type===V.Hue)return;Ce.s=Xe.value/100}if(it.type!==V.None){if(it.type===V.Hue)return;Ce.l=it.value/100}return Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var ws=ts,So={mode:"hsl",toMode:{rgb:Yn},fromMode:{rgb:Bn},channels:["h","s","l","alpha"],ranges:{h:[0,360]},gamut:"rgb",parse:[ws,Vn],serialize:ve=>`hsl(${ve.h!==void 0?ve.h:"none"} ${ve.s!==void 0?ve.s*100+"%":"none"} ${ve.l!==void 0?ve.l*100+"%":"none"}${ve.alpha<1?` / ${ve.alpha}`:""})`,interpolate:{h:{use:Ke,fixup:yt},s:Ke,l:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:$i},average:{h:Fe}},nl=So;function vs({h:ve,s:be,v:Ce,alpha:He}){ve=fr(ve!==void 0?ve:0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.abs(ve/60%2-1),it;switch(Math.floor(ve/60)){case 0:it={r:Ce,g:Ce*(1-be*Xe),b:Ce*(1-be)};break;case 1:it={r:Ce*(1-be*Xe),g:Ce,b:Ce*(1-be)};break;case 2:it={r:Ce*(1-be),g:Ce,b:Ce*(1-be*Xe)};break;case 3:it={r:Ce*(1-be),g:Ce*(1-be*Xe),b:Ce};break;case 4:it={r:Ce*(1-be*Xe),g:Ce*(1-be),b:Ce};break;case 5:it={r:Ce,g:Ce*(1-be),b:Ce*(1-be*Xe)};break;default:it={r:Ce*(1-be),g:Ce*(1-be),b:Ce*(1-be)}}return it.mode="rgb",He!==void 0&&(it.alpha=He),it}function go({r:ve,g:be,b:Ce,alpha:He}){ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.max(ve,be,Ce),it=Math.min(ve,be,Ce),Dt={mode:"hsv",s:Xe===0?0:1-it/Xe,v:Xe};return Xe-it!==0&&(Dt.h=(Xe===ve?(be-Ce)/(Xe-it)+(be<Ce)*6:Xe===be?(Ce-ve)/(Xe-it)+2:(ve-be)/(Xe-it)+4)*60),He!==void 0&&(Dt.alpha=He),Dt}var Xn={mode:"hsv",toMode:{rgb:vs},parse:["--hsv"],serialize:"--hsv",fromMode:{rgb:go},channels:["h","s","v","alpha"],ranges:{h:[0,360]},gamut:"rgb",interpolate:{h:{use:Ke,fixup:yt},s:Ke,v:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:$i},average:{h:Fe}},On=Xn;function Uo({h:ve,w:be,b:Ce,alpha:He}){if(be===void 0&&(be=0),Ce===void 0&&(Ce=0),be+Ce>1){let Xe=be+Ce;be/=Xe,Ce/=Xe}return vs({h:ve,s:Ce===1?1:1-be/(1-Ce),v:1-Ce,alpha:He})}function kl(ve){let be=go(ve);if(be===void 0)return;let Ce=be.s!==void 0?be.s:0,He=be.v!==void 0?be.v:0,Xe={mode:"hwb",w:(1-Ce)*He,b:1-He};return be.h!==void 0&&(Xe.h=be.h),be.alpha!==void 0&&(Xe.alpha=be.alpha),Xe}function mu(ve,be){if(!be||be[0]!=="hwb")return;let Ce={mode:"hwb"},[,He,Xe,it,Dt]=be;if(He.type!==V.None){if(He.type===V.Percentage)return;Ce.h=He.value}if(Xe.type!==V.None){if(Xe.type===V.Hue)return;Ce.w=Xe.value/100}if(it.type!==V.None){if(it.type===V.Hue)return;Ce.b=it.value/100}return Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var Ul=mu,gu={mode:"hwb",toMode:{rgb:Uo},fromMode:{rgb:kl},channels:["h","w","b","alpha"],ranges:{h:[0,360]},gamut:"rgb",parse:[Ul],serialize:ve=>`hwb(${ve.h!==void 0?ve.h:"none"} ${ve.w!==void 0?ve.w*100+"%":"none"} ${ve.b!==void 0?ve.b*100+"%":"none"}${ve.alpha<1?` / ${ve.alpha}`:""})`,interpolate:{h:{use:Ke,fixup:yt},w:Ke,b:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:ja},average:{h:Fe}},yu=gu,Fu=203,au=.1593017578125,xc=78.84375,Pu=.8359375,Cl=18.8515625,bc=18.6875;function Iu(ve){if(ve<0)return 0;let be=Math.pow(ve,1/xc);return 1e4*Math.pow(Math.max(0,be-Pu)/(Cl-bc*be),1/au)}function _l(ve){if(ve<0)return 0;let be=Math.pow(ve/1e4,au);return Math.pow((Pu+Cl*be)/(1+bc*be),xc)}var ms=ve=>Math.max(ve/Fu,0),ss=({i:ve,t:be,p:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Iu(ve+.008609037037932761*be+.11102962500302593*Ce),it=Iu(ve-.00860903703793275*be-.11102962500302599*Ce),Dt=Iu(ve+.5600313357106791*be-.32062717498731885*Ce),or={mode:"xyz65",x:ms(2.070152218389422*Xe-1.3263473389671556*it+.2066510476294051*Dt),y:ms(.3647385209748074*Xe+.680566024947227*it-.0453045459220346*Dt),z:ms(-.049747207535812*Xe-.0492609666966138*it+1.1880659249923042*Dt)};return He!==void 0&&(or.alpha=He),or},fl=ss,wc=(ve=0)=>Math.max(ve*Fu,0),Tc=({x:ve,y:be,z:Ce,alpha:He})=>{let Xe=wc(ve),it=wc(be),Dt=wc(Ce),or=_l(.3592832590121217*Xe+.6976051147779502*it-.0358915932320289*Dt),Dr=_l(-.1920808463704995*Xe+1.1004767970374323*it+.0753748658519118*Dt),vi=_l(.0070797844607477*Xe+.0748396662186366*it+.8433265453898765*Dt),ai=.5*or+.5*Dr,ei=1.61376953125*or-3.323486328125*Dr+1.709716796875*vi,Oi=4.378173828125*or-4.24560546875*Dr-.132568359375*vi,Si={mode:"itp",i:ai,t:ei,p:Oi};return He!==void 0&&(Si.alpha=He),Si},tc=Tc,wh={mode:"itp",channels:["i","t","p","alpha"],parse:["--ictcp"],serialize:"--ictcp",toMode:{xyz65:fl,rgb:ve=>ft(fl(ve))},fromMode:{xyz65:tc,rgb:ve=>tc(De(ve))},ranges:{i:[0,.581],t:[-.369,.272],p:[-.164,.331]},interpolate:{i:Ke,t:Ke,p:Ke,alpha:{use:Ke,fixup:vt}}},Th=wh,Rd=134.03437499999998,fp=16295499532821565e-27,Ru=ve=>{if(ve<0)return 0;let be=Math.pow(ve/1e4,au);return Math.pow((Pu+Cl*be)/(1+bc*be),Rd)},Ts=(ve=0)=>Math.max(ve*203,0),Ah=({x:ve,y:be,z:Ce,alpha:He})=>{ve=Ts(ve),be=Ts(be),Ce=Ts(Ce);let Xe=1.15*ve-.15*Ce,it=.66*be+.34*ve,Dt=Ru(.41478972*Xe+.579999*it+.014648*Ce),or=Ru(-.20151*Xe+1.120649*it+.0531008*Ce),Dr=Ru(-.0166008*Xe+.2648*it+.6684799*Ce),vi=(Dt+or)/2,ai={mode:"jab",j:.44*vi/(1-.56*vi)-fp,a:3.524*Dt-4.066708*or+.542708*Dr,b:.199076*Dt+1.096799*or-1.295875*Dr};return He!==void 0&&(ai.alpha=He),ai},vf=Ah,Ac=134.03437499999998,Mh=16295499532821565e-27,Mc=ve=>{if(ve<0)return 0;let be=Math.pow(ve,1/Ac);return 1e4*Math.pow((Pu-be)/(bc*be-Cl),1/au)},$c=ve=>ve/203,zu=({j:ve,a:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=(ve+Mh)/(.44+.56*(ve+Mh)),it=Mc(Xe+.13860504*be+.058047316*Ce),Dt=Mc(Xe-.13860504*be-.058047316*Ce),or=Mc(Xe-.096019242*be-.8118919*Ce),Dr={mode:"xyz65",x:$c(1.661373024652174*it-.914523081304348*Dt+.23136208173913045*or),y:$c(-.3250758611844533*it+1.571847026732543*Dt-.21825383453227928*or),z:$c(-.090982811*it-.31272829*Dt+1.5227666*or)};return He!==void 0&&(Dr.alpha=He),Dr},mf=zu,jf=ve=>{let be=vf(De(ve));return ve.r===ve.b&&ve.b===ve.g&&(be.a=be.b=0),be},Sc=jf,id=ve=>ft(mf(ve)),Uf=id,zd={mode:"jab",channels:["j","a","b","alpha"],parse:["--jzazbz"],serialize:"--jzazbz",fromMode:{rgb:Sc,xyz65:vf},toMode:{rgb:Uf,xyz65:mf},ranges:{j:[0,.222],a:[-.109,.129],b:[-.185,.134]},interpolate:{j:Ke,a:Ke,b:Ke,alpha:{use:Ke,fixup:vt}}},Bu=zd,Sh=({j:ve,a:be,b:Ce,alpha:He})=>{be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.sqrt(be*be+Ce*Ce),it={mode:"jch",j:ve,c:Xe};return Xe&&(it.h=fr(Math.atan2(Ce,be)*180/Math.PI)),He!==void 0&&(it.alpha=He),it},_u=Sh,qf=({j:ve,c:be,h:Ce,alpha:He})=>{Ce===void 0&&(Ce=0);let Xe={mode:"jab",j:ve,a:be?be*Math.cos(Ce/180*Math.PI):0,b:be?be*Math.sin(Ce/180*Math.PI):0};return He!==void 0&&(Xe.alpha=He),Xe},Dl=qf,gf={mode:"jch",parse:["--jzczhz"],serialize:"--jzczhz",toMode:{jab:Dl,rgb:ve=>Uf(Dl(ve))},fromMode:{rgb:ve=>_u(Sc(ve)),jab:_u},channels:["j","c","h","alpha"],ranges:{j:[0,.221],c:[0,.19],h:[0,360]},interpolate:{h:{use:Ke,fixup:yt},c:Ke,j:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:ya},average:{h:Fe}},Ou=gf,yf=Math.pow(29,3)/Math.pow(3,3),_f=Math.pow(6,3)/Math.pow(29,3),Vf=ve=>Math.pow(ve,3)>_f?Math.pow(ve,3):(116*ve-16)/yf,Eh=({l:ve,a:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=(ve+16)/116,it=be/500+Xe,Dt=Xe-Ce/200,or={mode:"xyz50",x:Vf(it)*Zt.X,y:Vf(Xe)*Zt.Y,z:Vf(Dt)*Zt.Z};return He!==void 0&&(or.alpha=He),or},Ec=Eh,kh=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=at({r:ve*3.1341359569958707-be*1.6173863321612538-.4906619460083532*Ce,g:ve*-.978795502912089+be*1.916254567259524+.03344273116131949*Ce,b:ve*.07195537988411677-be*.2289768264158322+1.405386058324125*Ce});return He!==void 0&&(Xe.alpha=He),Xe},rc=kh,Bd=ve=>rc(Ec(ve)),xl=Bd,xu=ve=>{let{r:be,g:Ce,b:He,alpha:Xe}=ke(ve),it={mode:"xyz50",x:.436065742824811*be+.3851514688337912*Ce+.14307845442264197*He,y:.22249319175623702*be+.7168870538238823*Ce+.06061979053616537*He,z:.013923904500943465*be+.09708128566574634*Ce+.7140993584005155*He};return Xe!==void 0&&(it.alpha=Xe),it},kc=xu,hl=ve=>ve>_f?Math.cbrt(ve):(yf*ve+16)/116,Gf=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=hl(ve/Zt.X),it=hl(be/Zt.Y),Dt=hl(Ce/Zt.Z),or={mode:"lab",l:116*it-16,a:500*(Xe-it),b:200*(it-Dt)};return He!==void 0&&(or.alpha=He),or},Nu=Gf,Cc=ve=>{let be=Nu(kc(ve));return ve.r===ve.b&&ve.b===ve.g&&(be.a=be.b=0),be},Hf=Cc;function Od(ve,be){if(!be||be[0]!=="lab")return;let Ce={mode:"lab"},[,He,Xe,it,Dt]=be;if(!(He.type===V.Hue||Xe.type===V.Hue||it.type===V.Hue))return He.type!==V.None&&(Ce.l=Math.min(Math.max(0,He.value),100)),Xe.type!==V.None&&(Ce.a=Xe.type===V.Number?Xe.value:Xe.value*125/100),it.type!==V.None&&(Ce.b=it.type===V.Number?it.value:it.value*125/100),Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var ad=Od,ju={mode:"lab",toMode:{xyz50:Ec,rgb:xl},fromMode:{xyz50:Nu,rgb:Hf},channels:["l","a","b","alpha"],ranges:{l:[0,100],a:[-125,125],b:[-125,125]},parse:[ad],serialize:ve=>`lab(${ve.l!==void 0?ve.l:"none"} ${ve.a!==void 0?ve.a:"none"} ${ve.b!==void 0?ve.b:"none"}${ve.alpha<1?` / ${ve.alpha}`:""})`,interpolate:{l:Ke,a:Ke,b:Ke,alpha:{use:Ke,fixup:vt}}},ql=ju,Vl=ar(Ot({},ql),{mode:"lab65",parse:["--lab-d65"],serialize:"--lab-d65",toMode:{xyz65:gi,rgb:Hi},fromMode:{xyz65:Cn,rgb:Li},ranges:{l:[0,100],a:[-125,125],b:[-125,125]}}),Nd=Vl;function xf(ve,be){if(!be||be[0]!=="lch")return;let Ce={mode:"lch"},[,He,Xe,it,Dt]=be;if(He.type!==V.None){if(He.type===V.Hue)return;Ce.l=Math.min(Math.max(0,He.value),100)}if(Xe.type!==V.None&&(Ce.c=Math.max(0,Xe.type===V.Number?Xe.value:Xe.value*150/100)),it.type!==V.None){if(it.type===V.Percentage)return;Ce.h=it.value}return Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var nd=xf,nu={mode:"lch",toMode:{lab:wt,rgb:ve=>xl(wt(ve))},fromMode:{rgb:ve=>tt(Hf(ve)),lab:tt},channels:["l","c","h","alpha"],ranges:{l:[0,100],c:[0,150],h:[0,360]},parse:[nd],serialize:ve=>`lch(${ve.l!==void 0?ve.l:"none"} ${ve.c!==void 0?ve.c:"none"} ${ve.h!==void 0?ve.h:"none"}${ve.alpha<1?` / ${ve.alpha}`:""})`,interpolate:{h:{use:Ke,fixup:yt},c:Ke,l:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:ya},average:{h:Fe}},Wc=nu,$f=ar(Ot({},Wc),{mode:"lch65",parse:["--lch-d65"],serialize:"--lch-d65",toMode:{lab65:ve=>wt(ve,"lab65"),rgb:ve=>Hi(wt(ve,"lab65"))},fromMode:{rgb:ve=>tt(Li(ve),"lch65"),lab65:ve=>tt(ve,"lch65")},ranges:{l:[0,100],c:[0,150],h:[0,360]}}),bf=$f,jd=({l:ve,u:be,v:Ce,alpha:He})=>{be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.sqrt(be*be+Ce*Ce),it={mode:"lchuv",l:ve,c:Xe};return Xe&&(it.h=fr(Math.atan2(Ce,be)*180/Math.PI)),He!==void 0&&(it.alpha=He),it},Yc=jd,Dc=({l:ve,c:be,h:Ce,alpha:He})=>{Ce===void 0&&(Ce=0);let Xe={mode:"luv",l:ve,u:be?be*Math.cos(Ce/180*Math.PI):0,v:be?be*Math.sin(Ce/180*Math.PI):0};return He!==void 0&&(Xe.alpha=He),Xe},Lc=Dc,wf=(ve,be,Ce)=>4*ve/(ve+15*be+3*Ce),od=(ve,be,Ce)=>9*be/(ve+15*be+3*Ce),Wf=wf(Zt.X,Zt.Y,Zt.Z),Xc=od(Zt.X,Zt.Y,Zt.Z),Yf=ve=>ve<=_f?yf*ve:116*Math.cbrt(ve)-16,Zc=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Yf(be/Zt.Y),it=wf(ve,be,Ce),Dt=od(ve,be,Ce);!isFinite(it)||!isFinite(Dt)?Xe=it=Dt=0:(it=13*Xe*(it-Wf),Dt=13*Xe*(Dt-Xc));let or={mode:"luv",l:Xe,u:it,v:Dt};return He!==void 0&&(or.alpha=He),or},ic=Zc,Tf=(ve,be,Ce)=>4*ve/(ve+15*be+3*Ce),Xf=(ve,be,Ce)=>9*be/(ve+15*be+3*Ce),sd=Tf(Zt.X,Zt.Y,Zt.Z),Ch=Xf(Zt.X,Zt.Y,Zt.Z),Ud=({l:ve,u:be,v:Ce,alpha:He})=>{if(ve===void 0&&(ve=0),ve===0)return{mode:"xyz50",x:0,y:0,z:0};be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=be/(13*ve)+sd,it=Ce/(13*ve)+Ch,Dt=Zt.Y*(ve<=8?ve/yf:Math.pow((ve+16)/116,3)),or=Dt*(9*Xe)/(4*it),Dr=Dt*(12-3*Xe-20*it)/(4*it),vi={mode:"xyz50",x:or,y:Dt,z:Dr};return He!==void 0&&(vi.alpha=He),vi},Zf=Ud,ld=ve=>Yc(ic(kc(ve))),Dh=ve=>rc(Zf(Lc(ve))),Js={mode:"lchuv",toMode:{luv:Lc,rgb:Dh},fromMode:{rgb:ld,luv:Yc},channels:["l","c","h","alpha"],parse:["--lchuv"],serialize:"--lchuv",ranges:{l:[0,100],c:[0,176.956],h:[0,360]},interpolate:{h:{use:Ke,fixup:yt},c:Ke,l:Ke,alpha:{use:Ke,fixup:vt}},difference:{h:ya},average:{h:Fe}},ou=Js,Kf=ar(Ot({},Pt),{mode:"lrgb",toMode:{rgb:at},fromMode:{rgb:ke},parse:["srgb-linear"],serialize:"srgb-linear"}),Lh=Kf,Jf={mode:"luv",toMode:{xyz50:Zf,rgb:ve=>rc(Zf(ve))},fromMode:{xyz50:ic,rgb:ve=>ic(kc(ve))},channels:["l","u","v","alpha"],parse:["--luv"],serialize:"--luv",ranges:{l:[0,100],u:[-84.936,175.042],v:[-125.882,87.243]},interpolate:{l:Ke,u:Ke,v:Ke,alpha:{use:Ke,fixup:vt}}},Af=Jf,nt=({r:ve,g:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.cbrt(.412221469470763*ve+.5363325372617348*be+.0514459932675022*Ce),it=Math.cbrt(.2119034958178252*ve+.6806995506452344*be+.1073969535369406*Ce),Dt=Math.cbrt(.0883024591900564*ve+.2817188391361215*be+.6299787016738222*Ce),or={mode:"oklab",l:.210454268309314*Xe+.7936177747023054*it-.0040720430116193*Dt,a:1.9779985324311684*Xe-2.42859224204858*it+.450593709617411*Dt,b:.0259040424655478*Xe+.7827717124575296*it-.8086757549230774*Dt};return He!==void 0&&(or.alpha=He),or},Tt=nt,Kt=ve=>{let be=Tt(ke(ve));return ve.r===ve.b&&ve.b===ve.g&&(be.a=be.b=0),be},Bt=Kt,yr=({l:ve,a:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Math.pow(ve+.3963377773761749*be+.2158037573099136*Ce,3),it=Math.pow(ve-.1055613458156586*be-.0638541728258133*Ce,3),Dt=Math.pow(ve-.0894841775298119*be-1.2914855480194092*Ce,3),or={mode:"lrgb",r:4.076741636075957*Xe-3.3077115392580616*it+.2309699031821044*Dt,g:-1.2684379732850317*Xe+2.6097573492876887*it-.3413193760026573*Dt,b:-.0041960761386756*Xe-.7034186179359362*it+1.7076146940746117*Dt};return He!==void 0&&(or.alpha=He),or},zr=yr,Gr=ve=>at(zr(ve)),ii=Gr;function li(ve){let He=1.170873786407767;return .5*(He*ve-.206+Math.sqrt((He*ve-.206)*(He*ve-.206)+4*.03*He*ve))}function Fi(ve){return(ve*ve+.206*ve)/(1.170873786407767*(ve+.03))}function $r(ve,be){let Ce,He,Xe,it,Dt,or,Dr,vi;-1.88170328*ve-.80936493*be>1?(Ce=1.19086277,He=1.76576728,Xe=.59662641,it=.75515197,Dt=.56771245,or=4.0767416621,Dr=-3.3077115913,vi=.2309699292):1.81444104*ve-1.19445276*be>1?(Ce=.73956515,He=-.45954404,Xe=.08285427,it=.1254107,Dt=.14503204,or=-1.2684380046,Dr=2.6097574011,vi=-.3413193965):(Ce=1.35733652,He=-.00915799,Xe=-1.1513021,it=-.50559606,Dt=.00692167,or=-.0041960863,Dr=-.7034186147,vi=1.707614701);let ai=Ce+He*ve+Xe*be+it*ve*ve+Dt*ve*be,ei=.3963377774*ve+.2158037573*be,Oi=-.1055613458*ve-.0638541728*be,Si=-.0894841775*ve-1.291485548*be;{let zi=1+ai*ei,Vi=1+ai*Oi,Xi=1+ai*Si,ha=zi*zi*zi,$a=Vi*Vi*Vi,_o=Xi*Xi*Xi,xs=3*ei*zi*zi,el=3*Oi*Vi*Vi,vl=3*Si*Xi*Xi,Al=6*ei*ei*zi,uu=6*Oi*Oi*Vi,Ef=6*Si*Si*Xi,Rh=or*ha+Dr*$a+vi*_o,Gd=or*xs+Dr*el+vi*vl,ov=or*Al+Dr*uu+vi*Ef;ai=ai-Rh*Gd/(Gd*Gd-.5*Rh*ov)}return ai}function ni(ve,be){let Ce=$r(ve,be),He=zr({l:1,a:Ce*ve,b:Ce*be}),Xe=Math.cbrt(1/Math.max(He.r,He.g,He.b)),it=Xe*Ce;return[Xe,it]}function ui(ve,be,Ce,He,Xe,it=null){it||(it=ni(ve,be));let Dt;if((Ce-Xe)*it[1]-(it[0]-Xe)*He<=0)Dt=it[1]*Xe/(He*it[0]+it[1]*(Xe-Ce));else{Dt=it[1]*(Xe-1)/(He*(it[0]-1)+it[1]*(Xe-Ce));{let or=Ce-Xe,Dr=He,vi=.3963377774*ve+.2158037573*be,ai=-.1055613458*ve-.0638541728*be,ei=-.0894841775*ve-1.291485548*be,Oi=or+Dr*vi,Si=or+Dr*ai,zi=or+Dr*ei;{let Vi=Xe*(1-Dt)+Dt*Ce,Xi=Dt*He,ha=Vi+Xi*vi,$a=Vi+Xi*ai,_o=Vi+Xi*ei,xs=ha*ha*ha,el=$a*$a*$a,vl=_o*_o*_o,Al=3*Oi*ha*ha,uu=3*Si*$a*$a,Ef=3*zi*_o*_o,Rh=6*Oi*Oi*ha,Gd=6*Si*Si*$a,ov=6*zi*zi*_o,sv=4.0767416621*xs-3.3077115913*el+.2309699292*vl-1,kf=4.0767416621*Al-3.3077115913*uu+.2309699292*Ef,Y2=4.0767416621*Rh-3.3077115913*Gd+.2309699292*ov,X2=kf/(kf*kf-.5*sv*Y2),oy=-sv*X2,sy=-1.2684380046*xs+2.6097574011*el-.3413193965*vl-1,Zm=-1.2684380046*Al+2.6097574011*uu-.3413193965*Ef,GS=-1.2684380046*Rh+2.6097574011*Gd-.3413193965*ov,Z2=Zm/(Zm*Zm-.5*sy*GS),ly=-sy*Z2,yj=-.0041960863*xs-.7034186147*el+1.707614701*vl-1,HS=-.0041960863*Al-.7034186147*uu+1.707614701*Ef,Cce=-.0041960863*Rh-.7034186147*Gd+1.707614701*ov,_j=HS/(HS*HS-.5*yj*Cce),$S=-yj*_j;oy=X2>=0?oy:1e6,ly=Z2>=0?ly:1e6,$S=_j>=0?$S:1e6,Dt+=Math.min(oy,Math.min(ly,$S))}}}return Dt}function Di(ve,be,Ce=null){Ce||(Ce=ni(ve,be));let He=Ce[0],Xe=Ce[1];return[Xe/He,Xe/(1-He)]}function Wi(ve,be,Ce){let He=ni(be,Ce),Xe=ui(be,Ce,ve,1,ve,He),it=Di(be,Ce,He),Dt=.11516993+1/(7.4477897+4.1590124*Ce+be*(-2.19557347+1.75198401*Ce+be*(-2.13704948-10.02301043*Ce+be*(-4.24894561+5.38770819*Ce+4.69891013*be)))),or=.11239642+1/(1.6132032-.68124379*Ce+be*(.40370612+.90148123*Ce+be*(-.27087943+.6122399*Ce+be*(.00299215-.45399568*Ce-.14661872*be)))),Dr=Xe/Math.min(ve*it[0],(1-ve)*it[1]),vi=ve*Dt,ai=(1-ve)*or,ei=.9*Dr*Math.sqrt(Math.sqrt(1/(1/(vi*vi*vi*vi)+1/(ai*ai*ai*ai))));return vi=ve*.4,ai=(1-ve)*.8,[Math.sqrt(1/(1/(vi*vi)+1/(ai*ai))),ei,Xe]}function Oa(ve){let be=ve.l!==void 0?ve.l:0,Ce=ve.a!==void 0?ve.a:0,He=ve.b!==void 0?ve.b:0,Xe={mode:"okhsl",l:li(be)};ve.alpha!==void 0&&(Xe.alpha=ve.alpha);let it=Math.sqrt(Ce*Ce+He*He);if(!it)return Xe.s=0,Xe;let[Dt,or,Dr]=Wi(be,Ce/it,He/it),vi;if(it<or){let ai=0,ei=.8*Dt,Oi=1-ei/or;vi=(it-ai)/(ei+Oi*(it-ai))*.8}else{let ai=or,ei=.2*or*or*1.25*1.25/Dt,Oi=1-ei/(Dr-or);vi=.8+.2*((it-ai)/(ei+Oi*(it-ai)))}return vi&&(Xe.s=vi,Xe.h=fr(Math.atan2(He,Ce)*180/Math.PI)),Xe}function Pa(ve){let be=ve.h!==void 0?ve.h:0,Ce=ve.s!==void 0?ve.s:0,He=ve.l!==void 0?ve.l:0,Xe={mode:"oklab",l:Fi(He)};if(ve.alpha!==void 0&&(Xe.alpha=ve.alpha),!Ce||He===1)return Xe.a=Xe.b=0,Xe;let it=Math.cos(be/180*Math.PI),Dt=Math.sin(be/180*Math.PI),[or,Dr,vi]=Wi(Xe.l,it,Dt),ai,ei,Oi,Si;Ce<.8?(ai=1.25*Ce,ei=0,Oi=.8*or,Si=1-Oi/Dr):(ai=5*(Ce-.8),ei=Dr,Oi=.2*Dr*Dr*1.25*1.25/or,Si=1-Oi/(vi-Dr));let zi=ei+ai*Oi/(1-Si*ai);return Xe.a=zi*it,Xe.b=zi*Dt,Xe}var Ja=ar(Ot({},nl),{mode:"okhsl",channels:["h","s","l","alpha"],parse:["--okhsl"],serialize:"--okhsl",fromMode:{oklab:Oa,rgb:ve=>Oa(Bt(ve))},toMode:{oklab:Pa,rgb:ve=>ii(Pa(ve))}}),rn=Ja;function Zi(ve){let be=ve.l!==void 0?ve.l:0,Ce=ve.a!==void 0?ve.a:0,He=ve.b!==void 0?ve.b:0,Xe=Math.sqrt(Ce*Ce+He*He),it=Xe?Ce/Xe:1,Dt=Xe?He/Xe:1,[or,Dr]=Di(it,Dt),vi=.5,ai=1-vi/or,ei=Dr/(Xe+be*Dr),Oi=ei*be,Si=ei*Xe,zi=Fi(Oi),Vi=Si*zi/Oi,Xi=zr({l:zi,a:it*Vi,b:Dt*Vi}),ha=Math.cbrt(1/Math.max(Xi.r,Xi.g,Xi.b,0));be=be/ha,Xe=Xe/ha*li(be)/be,be=li(be);let $a={mode:"okhsv",s:Xe?(vi+Dr)*Si/(Dr*vi+Dr*ai*Si):0,v:be?be/Oi:0};return $a.s&&($a.h=fr(Math.atan2(He,Ce)*180/Math.PI)),ve.alpha!==void 0&&($a.alpha=ve.alpha),$a}function sa(ve){let be={mode:"oklab"};ve.alpha!==void 0&&(be.alpha=ve.alpha);let Ce=ve.h!==void 0?ve.h:0,He=ve.s!==void 0?ve.s:0,Xe=ve.v!==void 0?ve.v:0,it=Math.cos(Ce/180*Math.PI),Dt=Math.sin(Ce/180*Math.PI),[or,Dr]=Di(it,Dt),vi=.5,ai=1-vi/or,ei=1-He*vi/(vi+Dr-Dr*ai*He),Oi=He*Dr*vi/(vi+Dr-Dr*ai*He),Si=Fi(ei),zi=Oi*Si/ei,Vi=zr({l:Si,a:it*zi,b:Dt*zi}),Xi=Math.cbrt(1/Math.max(Vi.r,Vi.g,Vi.b,0)),ha=Fi(Xe*ei),$a=Oi*ha/ei;return be.l=ha*Xi,be.a=$a*it*Xi,be.b=$a*Dt*Xi,be}var vn=ar(Ot({},On),{mode:"okhsv",channels:["h","s","v","alpha"],parse:["--okhsv"],serialize:"--okhsv",fromMode:{oklab:Zi,rgb:ve=>Zi(Bt(ve))},toMode:{oklab:sa,rgb:ve=>ii(sa(ve))}}),Dn=vn;function po(ve,be){if(!be||be[0]!=="oklab")return;let Ce={mode:"oklab"},[,He,Xe,it,Dt]=be;if(!(He.type===V.Hue||Xe.type===V.Hue||it.type===V.Hue))return He.type!==V.None&&(Ce.l=Math.min(Math.max(0,He.type===V.Number?He.value:He.value/100),1)),Xe.type!==V.None&&(Ce.a=Xe.type===V.Number?Xe.value:Xe.value*.4/100),it.type!==V.None&&(Ce.b=it.type===V.Number?it.value:it.value*.4/100),Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var zo=po,wo=ar(Ot({},ql),{mode:"oklab",toMode:{lrgb:zr,rgb:ii},fromMode:{lrgb:Tt,rgb:Bt},ranges:{l:[0,1],a:[-.4,.4],b:[-.4,.4]},parse:[zo],serialize:ve=>`oklab(${ve.l!==void 0?ve.l:"none"} ${ve.a!==void 0?ve.a:"none"} ${ve.b!==void 0?ve.b:"none"}${ve.alpha<1?` / ${ve.alpha}`:""})`}),$o=wo;function io(ve,be){if(!be||be[0]!=="oklch")return;let Ce={mode:"oklch"},[,He,Xe,it,Dt]=be;if(He.type!==V.None){if(He.type===V.Hue)return;Ce.l=Math.min(Math.max(0,He.type===V.Number?He.value:He.value/100),1)}if(Xe.type!==V.None&&(Ce.c=Math.max(0,Xe.type===V.Number?Xe.value:Xe.value*.4/100)),it.type!==V.None){if(it.type===V.Percentage)return;Ce.h=it.value}return Dt.type!==V.None&&(Ce.alpha=Math.min(1,Math.max(0,Dt.type===V.Number?Dt.value:Dt.value/100))),Ce}var Us=io,gs=ar(Ot({},Wc),{mode:"oklch",toMode:{oklab:ve=>wt(ve,"oklab"),rgb:ve=>ii(wt(ve,"oklab"))},fromMode:{rgb:ve=>tt(Bt(ve),"oklch"),oklab:ve=>tt(ve,"oklch")},parse:[Us],serialize:ve=>`oklch(${ve.l!==void 0?ve.l:"none"} ${ve.c!==void 0?ve.c:"none"} ${ve.h!==void 0?ve.h:"none"}${ve.alpha<1?` / ${ve.alpha}`:""})`,ranges:{l:[0,1],c:[0,.4],h:[0,360]}}),Go=gs,ma=ve=>{let{r:be,g:Ce,b:He,alpha:Xe}=ke(ve),it={mode:"xyz65",x:.486570948648216*be+.265667693169093*Ce+.1982172852343625*He,y:.2289745640697487*be+.6917385218365062*Ce+.079286914093745*He,z:0*be+.0451133818589026*Ce+1.043944368900976*He};return Xe!==void 0&&(it.alpha=Xe),it},vo=ma,Ds=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=at({r:ve*2.4934969119414263-be*.9313836179191242-.402710784450717*Ce,g:ve*-.8294889695615749+be*1.7626640603183465+.0236246858419436*Ce,b:ve*.0358458302437845-be*.0761723892680418+.9568845240076871*Ce},"p3");return He!==void 0&&(Xe.alpha=He),Xe},qs=Ds,Ll=ar(Ot({},Pt),{mode:"p3",parse:["display-p3"],serialize:"display-p3",fromMode:{rgb:ve=>qs(De(ve)),xyz65:qs},toMode:{rgb:ve=>ft(vo(ve)),xyz65:vo}}),bu=Ll,Gl=ve=>{let be=Math.abs(ve);return be>=1/512?Math.sign(ve)*Math.pow(be,1/1.8):16*ve},ac=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe={mode:"prophoto",r:Gl(ve*1.3457868816471585-be*.2555720873797946-.0511018649755453*Ce),g:Gl(ve*-.5446307051249019+be*1.5082477428451466+.0205274474364214*Ce),b:Gl(ve*0+be*0+1.2119675456389452*Ce)};return He!==void 0&&(Xe.alpha=He),Xe},bl=ac,Uu=(ve=0)=>{let be=Math.abs(ve);return be>=16/512?Math.sign(ve)*Math.pow(be,1.8):ve/16},Fc=ve=>{let be=Uu(ve.r),Ce=Uu(ve.g),He=Uu(ve.b),Xe={mode:"xyz50",x:.7977666449006423*be+.1351812974005331*Ce+.0313477341283922*He,y:.2880748288194013*be+.7118352342418731*Ce+899369387256e-16*He,z:0*be+0*Ce+.8251046025104602*He};return ve.alpha!==void 0&&(Xe.alpha=ve.alpha),Xe},Kc=Fc,ud=ar(Ot({},Pt),{mode:"prophoto",parse:["prophoto-rgb"],serialize:"prophoto-rgb",fromMode:{xyz50:bl,rgb:ve=>bl(kc(ve))},toMode:{xyz50:Kc,rgb:ve=>rc(Kc(ve))}}),Qf=ud,qd=1.09929682680944,Fh=.018053968510807,Hl=ve=>{let be=Math.abs(ve);return be>Fh?(Math.sign(ve)||1)*(qd*Math.pow(be,.45)-(qd-1)):4.5*ve},Vd=({x:ve,y:be,z:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe={mode:"rec2020",r:Hl(ve*1.7166511879712683-be*.3556707837763925-.2533662813736599*Ce),g:Hl(ve*-.6666843518324893+be*1.6164812366349395+.0157685458139111*Ce),b:Hl(ve*.0176398574453108-be*.0427706132578085+.9421031212354739*Ce)};return He!==void 0&&(Xe.alpha=He),Xe},Mf=Vd,Ph=1.09929682680944,Ih=.018053968510807,qu=(ve=0)=>{let be=Math.abs(ve);return be<Ih*4.5?ve/4.5:(Math.sign(ve)||1)*Math.pow((be+Ph-1)/Ph,1/.45)},cd=ve=>{let be=qu(ve.r),Ce=qu(ve.g),He=qu(ve.b),Xe={mode:"xyz65",x:.6369580483012911*be+.1446169035862083*Ce+.1688809751641721*He,y:.262700212011267*be+.6779980715188708*Ce+.059301716469862*He,z:0*be+.0280726930490874*Ce+1.0609850577107909*He};return ve.alpha!==void 0&&(Xe.alpha=ve.alpha),Xe},Jc=cd,eh=ar(Ot({},Pt),{mode:"rec2020",fromMode:{xyz65:Mf,rgb:ve=>Mf(De(ve))},toMode:{xyz65:Jc,rgb:ve=>ft(Jc(ve))},parse:["rec2020"],serialize:"rec2020"}),Qc=eh,wu=.0037930732552754493,ef=Math.cbrt(wu),Sf=ve=>Math.cbrt(ve)-ef,fd=ve=>{let{r:be,g:Ce,b:He,alpha:Xe}=ke(ve),it=Sf(.3*be+.622*Ce+.078*He+wu),Dt=Sf(.23*be+.692*Ce+.078*He+wu),or=Sf(.2434226892454782*be+.2047674442449682*Ce+.5518098665095535*He+wu),Dr={mode:"xyb",x:(it-Dt)/2,y:(it+Dt)/2,b:or-(it+Dt)/2};return Xe!==void 0&&(Dr.alpha=Xe),Dr},$l=fd,Se=ve=>Math.pow(ve+ef,3),Pe=({x:ve,y:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe=Se(ve+be)-wu,it=Se(be-ve)-wu,Dt=Se(Ce+be)-wu,or=at({r:11.031566904639861*Xe-9.866943908131562*it-.16462299650829934*Dt,g:-3.2541473810744237*Xe+4.418770377582723*it-.16462299650829934*Dt,b:-3.6588512867136815*Xe+2.7129230459360922*it+1.9459282407775895*Dt});return He!==void 0&&(or.alpha=He),or},Ge=Pe,$e={mode:"xyb",channels:["x","y","b","alpha"],parse:["--xyb"],serialize:"--xyb",toMode:{rgb:Ge},fromMode:{rgb:$l},ranges:{x:[-.0154,.0281],y:[0,.8453],b:[-.2778,.388]},interpolate:{x:Ke,y:Ke,b:Ke,alpha:{use:Ke,fixup:vt}}},st=$e,ot={mode:"xyz50",parse:["xyz-d50"],serialize:"xyz-d50",toMode:{rgb:rc,lab:Nu},fromMode:{rgb:kc,lab:Ec},channels:["x","y","z","alpha"],ranges:{x:[0,.964],y:[0,.999],z:[0,.825]},interpolate:{x:Ke,y:Ke,z:Ke,alpha:{use:Ke,fixup:vt}}},pt=ot,Vt=ve=>{let{x:be,y:Ce,z:He,alpha:Xe}=ve;be===void 0&&(be=0),Ce===void 0&&(Ce=0),He===void 0&&(He=0);let it={mode:"xyz50",x:1.0479298208405488*be+.0229467933410191*Ce-.0501922295431356*He,y:.0296278156881593*be+.990434484573249*Ce-.0170738250293851*He,z:-.0092430581525912*be+.0150551448965779*Ce+.7518742899580008*He};return Xe!==void 0&&(it.alpha=Xe),it},tr=Vt,Ut=ve=>{let{x:be,y:Ce,z:He,alpha:Xe}=ve;be===void 0&&(be=0),Ce===void 0&&(Ce=0),He===void 0&&(He=0);let it={mode:"xyz65",x:.9554734527042182*be-.0230985368742614*Ce+.0632593086610217*He,y:-.0283697069632081*be+1.0099954580058226*Ce+.021041398966943*He,z:.0123140016883199*be-.0205076964334779*Ce+1.3303659366080753*He};return Xe!==void 0&&(it.alpha=Xe),it},rr=Ut,pr={mode:"xyz65",toMode:{rgb:ft,xyz50:tr},fromMode:{rgb:De,xyz50:rr},ranges:{x:[0,.95],y:[0,1],z:[0,1.088]},channels:["x","y","z","alpha"],parse:["xyz","xyz-d65"],serialize:"xyz-d65",interpolate:{x:Ke,y:Ke,z:Ke,alpha:{use:Ke,fixup:vt}}},Sr=pr,Rr=({r:ve,g:be,b:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe={mode:"yiq",y:.29889531*ve+.58662247*be+.11448223*Ce,i:.59597799*ve-.2741761*be-.32180189*Ce,q:.21147017*ve-.52261711*be+.31114694*Ce};return He!==void 0&&(Xe.alpha=He),Xe},Zr=Rr,wi=({y:ve,i:be,q:Ce,alpha:He})=>{ve===void 0&&(ve=0),be===void 0&&(be=0),Ce===void 0&&(Ce=0);let Xe={mode:"rgb",r:ve+.95608445*be+.6208885*Ce,g:ve-.27137664*be-.6486059*Ce,b:ve-1.10561724*be+1.70250126*Ce};return He!==void 0&&(Xe.alpha=He),Xe},qi=wi,Aa={mode:"yiq",toMode:{rgb:qi},fromMode:{rgb:Zr},channels:["y","i","q","alpha"],parse:["--yiq"],serialize:"--yiq",ranges:{i:[-.595,.595],q:[-.522,.522]},interpolate:{y:Ke,i:Ke,q:Ke,alpha:{use:Ke,fixup:vt}}},un=Aa,gn=(ve,be)=>Math.round(ve*(be=Math.pow(10,be)))/be,Tn=(ve=4)=>be=>typeof be=="number"?gn(be,ve):be,Pn=Tn,Eo=Pn(2),qo=ve=>Math.max(0,Math.min(1,ve||0)),Wn=ve=>Math.round(qo(ve)*255),ls=L("rgb"),ol=L("hsl"),wl=ve=>{if(ve===void 0)return;let be=Wn(ve.r),Ce=Wn(ve.g),He=Wn(ve.b);return"#"+(1<<24|be<<16|Ce<<8|He).toString(16).slice(1)},Vu=ve=>{if(ve===void 0)return;let be=Wn(ve.alpha!==void 0?ve.alpha:1);return wl(ve)+(256|be).toString(16).slice(1)},Pc=ve=>{if(ve===void 0)return;let be=Wn(ve.r),Ce=Wn(ve.g),He=Wn(ve.b);return ve.alpha===void 0||ve.alpha===1?`rgb(${be}, ${Ce}, ${He})`:`rgba(${be}, ${Ce}, ${He}, ${Eo(qo(ve.alpha))})`},dl=ve=>{if(ve===void 0)return;let be=Eo(ve.h||0),Ce=Eo(qo(ve.s)*100)+"%",He=Eo(qo(ve.l)*100)+"%";return ve.alpha===void 0||ve.alpha===1?`hsl(${be}, ${Ce}, ${He})`:`hsla(${be}, ${Ce}, ${He}, ${Eo(qo(ve.alpha))})`},pl=ve=>{let be=z(ve);if(!be)return;let Ce=J(be.mode);if(!Ce.serialize||typeof Ce.serialize=="string"){let He=`color(${Ce.serialize||`--${be.mode}`} `;return Ce.channels.forEach((Xe,it)=>{Xe!=="alpha"&&(He+=(it?" ":"")+(be[Xe]!==void 0?be[Xe]:"none"))}),be.alpha!==void 0&&be.alpha<1&&(He+=` / ${be.alpha}`),He+")"}if(typeof Ce.serialize=="function")return Ce.serialize(be)},Tu=ve=>wl(ls(ve)),nc=ve=>Vu(ls(ve)),oc=ve=>Pc(ls(ve)),sc=ve=>dl(ol(ve)),Ic={normal:(ve,be)=>be,multiply:(ve,be)=>ve*be,screen:(ve,be)=>ve+be-ve*be,"hard-light":(ve,be)=>be<.5?ve*2*be:2*be*(1-ve)-1,overlay:(ve,be)=>ve<.5?be*2*ve:2*ve*(1-be)-1,darken:(ve,be)=>Math.min(ve,be),lighten:(ve,be)=>Math.max(ve,be),"color-dodge":(ve,be)=>ve===0?0:be===1?1:Math.min(1,ve/(1-be)),"color-burn":(ve,be)=>ve===1?1:be===0?0:1-Math.min(1,(1-ve)/be),"soft-light":(ve,be)=>be<.5?ve-(1-2*be)*ve*(1-ve):ve+(2*be-1)*((ve<.25?((16*ve-12)*ve+4)*ve:Math.sqrt(ve))-ve),difference:(ve,be)=>Math.abs(ve-be),exclusion:(ve,be)=>ve+be-2*ve*be},Gu=(ve,be="normal",Ce="rgb")=>{let He=typeof be=="function"?be:Ic[be],Xe=L(Ce),it=J(Ce).channels;return ve.map(or=>{let Dr=Xe(or);return Dr.alpha===void 0&&(Dr.alpha=1),Dr}).reduce((or,Dr)=>{if(or===void 0)return Dr;let vi=Dr.alpha+or.alpha*(1-Dr.alpha);return it.reduce((ai,ei)=>(ei!=="alpha"&&(vi===0?ai[ei]=0:(ai[ei]=Dr.alpha*(1-or.alpha)*Dr[ei]+Dr.alpha*or.alpha*He(or[ei],Dr[ei])+(1-Dr.alpha)*or.alpha*or[ei],ai[ei]=Math.max(0,Math.min(1,ai[ei]/vi)))),ai),{mode:Ce,alpha:vi})})},tf=Gu,th=([ve,be])=>ve+Math.random()*(be-ve),re=ve=>Object.keys(ve).reduce((be,Ce)=>{let He=ve[Ce];return be[Ce]=Array.isArray(He)?He:[He,He],be},{}),he=(ve="rgb",be={})=>{let Ce=J(ve),He=re(be);return Ce.channels.reduce((Xe,it)=>((He.alpha||it!=="alpha")&&(Xe[it]=th(He[it]||Ce.ranges[it])),Xe),{mode:ve})},we=he,Le=(ve,be="rgb",Ce=!1)=>{let He=be?J(be).channels:null,Xe=be?L(be):z;return it=>{let Dt=Xe(it);if(!Dt)return;let or=(He||J(Dt.mode).channels).reduce((vi,ai)=>{let ei=ve(Dt[ai],ai,Dt,be);return ei!==void 0&&!isNaN(ei)&&(vi[ai]=ei),vi},{mode:Dt.mode});if(!Ce)return or;let Dr=z(it);return Dr&&Dr.mode!==or.mode?L(Dr.mode)(or):or}},Re=(ve,be,Ce)=>be!=="alpha"?(ve||0)*(Ce.alpha!==void 0?Ce.alpha:1):ve,Ne=(ve,be,Ce)=>be!=="alpha"&&Ce.alpha!==0?(ve||0)/(Ce.alpha!==void 0?Ce.alpha:1):ve,ut=(ve=1,be=0)=>(Ce,He)=>He!=="alpha"?Ce*ve+be:Ce,et=(ve=1,be=1,Ce=0)=>(He,Xe)=>Xe!=="alpha"?ve*Math.pow(He,be)+Ce:He,_t=ve=>{ve[0]===void 0&&(ve[0]=0),ve[ve.length-1]===void 0&&(ve[ve.length-1]=1);let be=1,Ce,He,Xe,it;for(;be<ve.length;){if(ve[be]===void 0){for(He=be,Xe=ve[be-1],Ce=be;ve[Ce]===void 0;)Ce++;for(it=(ve[Ce]-Xe)/(Ce-be+1);be<Ce;)ve[be]=Xe+(be+1-He)*it,be++}else ve[be]<ve[be-1]&&(ve[be]=ve[be-1]);be++}return ve},Ft=_t,Rt=(ve=.5)=>be=>ve<=0?1:ve>=1?0:Math.pow(be,Math.log(.5)/Math.log(ve)),lr=Rt,sr=ve=>typeof ve=="function",Fr=ve=>ve&&typeof ve=="object",Or=ve=>typeof ve=="number",hr=(ve,be="rgb",Ce,He)=>{let Xe=J(be),it=L(be),Dt=[],or=[],Dr={};ve.forEach(Oi=>{Array.isArray(Oi)?(Dt.push(it(Oi[0])),or.push(Oi[1])):Or(Oi)||sr(Oi)?Dr[or.length]=Oi:(Dt.push(it(Oi)),or.push(void 0))}),Ft(or);let vi=Xe.channels.reduce((Oi,Si)=>{let zi;return Fr(Ce)&&Fr(Ce[Si])&&Ce[Si].fixup?zi=Ce[Si].fixup:Fr(Xe.interpolate[Si])&&Xe.interpolate[Si].fixup?zi=Xe.interpolate[Si].fixup:zi=Vi=>Vi,Oi[Si]=zi(Dt.map(Vi=>Vi[Si])),Oi},{});if(He){let Oi=Dt.map((Si,zi)=>Xe.channels.reduce((Vi,Xi)=>(Vi[Xi]=vi[Xi][zi],Vi),{mode:be}));vi=Xe.channels.reduce((Si,zi)=>(Si[zi]=Oi.map(Vi=>{let Xi=He(Vi[zi],zi,Vi,be);return isNaN(Xi)?void 0:Xi}),Si),{})}let ai=Xe.channels.reduce((Oi,Si)=>{let zi;return sr(Ce)?zi=Ce:Fr(Ce)&&sr(Ce[Si])?zi=Ce[Si]:Fr(Ce)&&Fr(Ce[Si])&&Ce[Si].use?zi=Ce[Si].use:sr(Xe.interpolate[Si])?zi=Xe.interpolate[Si]:Fr(Xe.interpolate[Si])&&(zi=Xe.interpolate[Si].use),Oi[Si]=zi(vi[Si]),Oi},{}),ei=Dt.length-1;return Oi=>{if(Oi=Math.min(Math.max(0,Oi),1),Oi<=or[0])return Dt[0];if(Oi>or[ei])return Dt[ei];let Si=0;for(;or[Si]<Oi;)Si++;let zi=or[Si-1],Vi=or[Si]-zi,Xi=(Oi-zi)/Vi,ha=Dr[Si]||Dr[0];ha!==void 0&&(Or(ha)&&(ha=lr((ha-zi)/Vi)),Xi=ha(Xi));let $a=(Si-1+Xi)/ei;return Xe.channels.reduce((_o,xs)=>{let el=ai[xs]($a);return el!==void 0&&(_o[xs]=el),_o},{mode:be})}},wr=(ve,be="rgb",Ce)=>hr(ve,be,Ce),Cr=(ve,be)=>(Ce,He="rgb",Xe)=>{let it=be?Le(be,He):void 0,Dt=hr(Ce,He,Xe,ve);return it?or=>it(Dt(or)):Dt},Nr=Cr(Re,Ne),jr=(ve,be)=>(ve+be)%be,Ar=(ve,be,Ce,He,Xe)=>{let it=Xe*Xe,Dt=it*Xe;return((1-3*Xe+3*it-Dt)*ve+(4-6*it+3*Dt)*be+(1+3*Xe+3*it-3*Dt)*Ce+Dt*He)/6},Ci=ve=>be=>{let Ce=ve.length-1,He=be>=1?Ce-1:Math.max(0,Math.floor(be*Ce));return Ar(He>0?ve[He-1]:2*ve[He]-ve[He+1],ve[He],ve[He+1],He<Ce-1?ve[He+2]:2*ve[He+1]-ve[He],(be-He/Ce)*Ce)},Gi=ve=>be=>{let Ce=ve.length-1,He=Math.floor(be*Ce);return Ar(ve[jr(He-1,ve.length)],ve[jr(He,ve.length)],ve[jr(He+1,ve.length)],ve[jr(He+2,ve.length)],(be-He/Ce)*Ce)},aa=ve=>{let be,Ce=ve.length-1,He=new Array(Ce),Xe=new Array(Ce),it=new Array(Ce);for(He[1]=1/4,Xe[1]=(6*ve[1]-ve[0])/4,be=2;be<Ce;++be)He[be]=1/(4-He[be-1]),Xe[be]=(6*ve[be]-(be==Ce-1?ve[Ce]:0)-Xe[be-1])*He[be];for(it[0]=ve[0],it[Ce]=ve[Ce],Ce-1>0&&(it[Ce-1]=Xe[Ce-1]),be=Ce-2;be>0;--be)it[be]=Xe[be]-He[be]*it[be+1];return it},ga=ve=>Ci(aa(ve)),qa=ve=>Gi(aa(ve)),Fa=Math.sign,Nn=Math.min,ka=Math.abs,Sn=ve=>{let be=ve.length-1,Ce=[],He=[],Xe=[];for(let it=0;it<be;it++)Ce.push((ve[it+1]-ve[it])*be),He.push(it>0?.5*(ve[it+1]-ve[it-1])*be:void 0),Xe.push(it>0?(Fa(Ce[it-1])+Fa(Ce[it]))*Nn(ka(Ce[it-1]),ka(Ce[it]),.5*ka(He[it])):void 0);return[Ce,He,Xe]},ko=(ve,be,Ce)=>{let He=ve.length-1,Xe=He*He;return it=>{let Dt;it>=1?Dt=He-1:Dt=Math.max(0,Math.floor(it*He));let or=it-Dt/He,Dr=or*or,vi=Dr*or;return(be[Dt]+be[Dt+1]-2*Ce[Dt])*Xe*vi+(3*Ce[Dt]-2*be[Dt]-be[Dt+1])*He*Dr+be[Dt]*or+ve[Dt]}},Vs=ve=>{if(ve.length<3)return Ke(ve);let be=ve.length-1,[Ce,,He]=Sn(ve);return He[0]=Ce[0],He[be]=Ce[be-1],ko(ve,He,Ce)},Ho=ve=>{if(ve.length<3)return Ke(ve);let be=ve.length-1,[Ce,He,Xe]=Sn(ve);return He[0]=(ve[1]*2-ve[0]*1.5-ve[2]*.5)*be,He[be]=(ve[be]*1.5-ve[be-1]*2+ve[be-2]*.5)*be,Xe[0]=He[0]*Ce[0]<=0?0:ka(He[0])>2*ka(Ce[0])?2*Ce[0]:He[0],Xe[be]=He[be]*Ce[be-1]<=0?0:ka(He[be])>2*ka(Ce[be-1])?2*Ce[be-1]:He[be],ko(ve,Xe,Ce)},fa=ve=>{let be=ve.length-1,[Ce,He,Xe]=Sn(ve);He[0]=.5*(ve[1]-ve[be])*be,He[be]=.5*(ve[0]-ve[be-1])*be;let it=(ve[0]-ve[be])*be,Dt=it;return Xe[0]=(Fa(it)+Fa(Ce[0]))*Nn(ka(it),ka(Ce[0]),.5*ka(He[0])),Xe[be]=(Fa(Ce[be-1])+Fa(Dt))*Nn(ka(Ce[be-1]),ka(Dt),.5*ka(He[be])),ko(ve,Xe,Ce)},jn=(ve=1)=>ve===1?be=>be:be=>Math.pow(be,ve),Gn=jn,Po=(ve=2,be=1)=>{let Ce=Gn(be);if(ve<2)return ve<1?[]:[Ce(.5)];let He=[];for(let Xe=0;Xe<ve;Xe++)He.push(Ce(Xe/(ve-1)));return He},As=Po,Qs=L("rgb"),Tl=ve=>{let be={mode:ve.mode,r:Math.max(0,Math.min(ve.r!==void 0?ve.r:0,1)),g:Math.max(0,Math.min(ve.g!==void 0?ve.g:0,1)),b:Math.max(0,Math.min(ve.b!==void 0?ve.b:0,1))};return ve.alpha!==void 0&&(be.alpha=ve.alpha),be},Fl=ve=>Tl(Qs(ve)),su=ve=>ve!==void 0&&(ve.r===void 0||ve.r>=0&&ve.r<=1)&&(ve.g===void 0||ve.g>=0&&ve.g<=1)&&(ve.b===void 0||ve.b>=0&&ve.b<=1);function bt(ve){return su(Qs(ve))}function dr(ve="rgb"){let{gamut:be}=J(ve);if(!be)return He=>!0;let Ce=L(typeof be=="string"?be:ve);return He=>su(Ce(He))}function _r(ve){return ve=z(ve),ve===void 0||bt(ve)?ve:L(ve.mode)(Fl(ve))}function Kr(ve="rgb"){let{gamut:be}=J(ve);if(!be)return it=>z(it);let Ce=typeof be=="string"?be:ve,He=L(Ce),Xe=dr(Ce);return it=>{let Dt=z(it);if(!Dt)return;let or=He(Dt);if(Xe(or))return Dt;let Dr=Tl(or);return Dt.mode===Dr.mode?Dr:L(Dt.mode)(Dr)}}function ci(ve,be="lch",Ce="rgb"){ve=z(ve);let He=Ce==="rgb"?bt:dr(Ce),Xe=Ce==="rgb"?Fl:Kr(Ce);if(ve===void 0||He(ve))return ve;let it=L(ve.mode);ve=L(be)(ve);let Dt=ar(Ot({},ve),{c:0});if(!He(Dt))return it(Xe(Dt));let or=0,Dr=ve.c!==void 0?ve.c:0,vi=J(be).ranges.c,ai=(vi[1]-vi[0])/Math.pow(2,13),ei=Dt.c;for(;Dr-or>ai;)Dt.c=or+(Dr-or)*.5,He(Dt)?(ei=Dt.c,or=Dt.c):Dr=Dt.c;return it(He(Dt)?Dt:ar(Ot({},Dt),{c:ei}))}function yi(ve="rgb",be="oklch",Ce=pa("oklch"),He=.02){let Xe=L(ve),it=J(ve);if(!it.gamut)return ai=>Xe(ai);let Dt=dr(ve),or=Kr(ve),Dr=L(be),{ranges:vi}=J(be);if(!vi.l||!vi.c)throw new Error("LCH-like space expected");return ai=>{if(ai=z(ai),ai===void 0)return;let ei=Ot({},Dr(ai));if(ei.l===void 0&&(ei.l=0),ei.c===void 0&&(ei.c=0),ei.l>=vi.l[1]){let Xi=ar(Ot({},it.white),{mode:ve});return ai.alpha!==void 0&&(Xi.alpha=ai.alpha),Xi}if(ei.l<=vi.l[0]){let Xi=ar(Ot({},it.black),{mode:ve});return ai.alpha!==void 0&&(Xi.alpha=ai.alpha),Xi}if(Dt(ei))return Xe(ei);let Oi=0,Si=ei.c,zi=(vi.c[1]-vi.c[0])/4e3,Vi=or(ei);for(;Si-Oi>zi;)ei.c=(Oi+Si)*.5,Vi=or(ei),Dt(ei)||Ce&&He>0&&Ce(ei,Vi)<=He?Oi=ei.c:Si=ei.c;return Xe(Dt(ei)?ei:Vi)}}var si=(ve,be=pa(),Ce=He=>He)=>{let He=ve.map((Xe,it)=>({color:Ce(Xe),i:it}));return(Xe,it=1,Dt=1/0)=>(isFinite(it)&&(it=Math.max(1,Math.min(it,He.length-1))),He.forEach(or=>{or.d=be(Xe,or.color)}),He.sort((or,Dr)=>or.d-Dr.d).slice(0,it).filter(or=>or.d<Dt).map(or=>ve[or.i]))},Ni=si,Ji=ve=>Math.max(ve,0),Qi=ve=>Math.max(Math.min(ve,1),0),ra=(ve,be,Ce)=>ve===void 0||be===void 0?void 0:ve+Ce*(be-ve),mn=ve=>{let be=1-Qi(ve);return[.393+.607*be,.769-.769*be,.189-.189*be,0,.349-.349*be,.686+.314*be,.168-.168*be,0,.272-.272*be,.534-.534*be,.131+.869*be,0,0,0,0,1]},Wa=ve=>{let be=Ji(ve);return[.213+.787*be,.715-.715*be,.072-.072*be,0,.213-.213*be,.715+.285*be,.072-.072*be,0,.213-.213*be,.715-.715*be,.072+.928*be,0,0,0,0,1]},xa=ve=>{let be=1-Qi(ve);return[.2126+.7874*be,.7152-.7152*be,.0722-.0722*be,0,.2126-.2126*be,.7152+.2848*be,.0722-.0722*be,0,.2126-.2126*be,.7152-.7152*be,.0722+.9278*be,0,0,0,0,1]},Pi=ve=>{let be=Math.PI*ve/180,Ce=Math.cos(be),He=Math.sin(be);return[.213+Ce*.787-He*.213,.715-Ce*.715-He*.715,.072-Ce*.072+He*.928,0,.213-Ce*.213+He*.143,.715+Ce*.285+He*.14,.072-Ce*.072-He*.283,0,.213-Ce*.213-He*.787,.715-Ce*.715+He*.715,.072+Ce*.928+He*.072,0,0,0,0,1]},Hr=(ve,be,Ce=!1)=>{let He=L(be),Xe=J(be).channels;return it=>{let Dt=He(it);if(!Dt)return;let or={mode:be},Dr,vi=Xe.length;for(let ei=0;ei<ve.length;ei++)Dr=Xe[Math.floor(ei/vi)],Dt[Dr]!==void 0&&(or[Dr]=(or[Dr]||0)+ve[ei]*(Dt[Xe[ei%vi]]||0));if(!Ce)return or;let ai=z(it);return ai&&or.mode!==ai.mode?L(ai.mode)(or):or}},Ei=(ve=1,be="rgb")=>{let Ce=Ji(ve);return Le(ut(Ce),be,!0)},Yi=(ve=1,be="rgb")=>{let Ce=Ji(ve);return Le(ut(Ce,(1-Ce)/2),be,!0)},la=(ve=1,be="rgb")=>Hr(mn(ve),be,!0),Ui=(ve=1,be="rgb")=>Hr(Wa(ve),be,!0),Da=(ve=1,be="rgb")=>Hr(xa(ve),be,!0),wa=(ve=1,be="rgb")=>{let Ce=Qi(ve);return Le((He,Xe)=>Xe==="alpha"?He:ra(Ce,1-Ce,He),be,!0)},bn=(ve=0,be="rgb")=>Hr(Pi(ve),be,!0),ji=L("rgb"),Ii=[[1,0,-0,0,1,0,-0,-0,1],[.856167,.182038,-.038205,.029342,.955115,.015544,-.00288,-.001563,1.004443],[.734766,.334872,-.069637,.05184,.919198,.028963,-.004928,-.004209,1.009137],[.630323,.465641,-.095964,.069181,.890046,.040773,-.006308,-.007724,1.014032],[.539009,.579343,-.118352,.082546,.866121,.051332,-.007136,-.011959,1.019095],[.458064,.679578,-.137642,.092785,.846313,.060902,-.007494,-.016807,1.024301],[.38545,.769005,-.154455,.100526,.829802,.069673,-.007442,-.02219,1.029632],[.319627,.849633,-.169261,.106241,.815969,.07779,-.007025,-.028051,1.035076],[.259411,.923008,-.18242,.110296,.80434,.085364,-.006276,-.034346,1.040622],[.203876,.990338,-.194214,.112975,.794542,.092483,-.005222,-.041043,1.046265],[.152286,1.052583,-.204868,.114503,.786281,.099216,-.003882,-.048116,1.051998]],Va=[[1,0,-0,0,1,0,-0,-0,1],[.866435,.177704,-.044139,.049567,.939063,.01137,-.003453,.007233,.99622],[.760729,.319078,-.079807,.090568,.889315,.020117,-.006027,.013325,.992702],[.675425,.43385,-.109275,.125303,.847755,.026942,-.00795,.018572,.989378],[.605511,.52856,-.134071,.155318,.812366,.032316,-.009376,.023176,.9862],[.547494,.607765,-.155259,.181692,.781742,.036566,-.01041,.027275,.983136],[.498864,.674741,-.173604,.205199,.754872,.039929,-.011131,.030969,.980162],[.457771,.731899,-.18967,.226409,.731012,.042579,-.011595,.034333,.977261],[.422823,.781057,-.203881,.245752,.709602,.044646,-.011843,.037423,.974421],[.392952,.82361,-.216562,.263559,.69021,.046232,-.01191,.040281,.97163],[.367322,.860646,-.227968,.280085,.672501,.047413,-.01182,.04294,.968881]],_a=[[1,0,-0,0,1,0,-0,-0,1],[.92667,.092514,-.019184,.021191,.964503,.014306,.008437,.054813,.93675],[.89572,.13333,-.02905,.029997,.9454,.024603,.013027,.104707,.882266],[.905871,.127791,-.033662,.026856,.941251,.031893,.01341,.148296,.838294],[.948035,.08949,-.037526,.014364,.946792,.038844,.010853,.193991,.795156],[1.017277,.027029,-.044306,-.006113,.958479,.047634,.006379,.248708,.744913],[1.104996,-.046633,-.058363,-.032137,.971635,.060503,.001336,.317922,.680742],[1.193214,-.109812,-.083402,-.058496,.97941,.079086,-.002346,.403492,.598854],[1.257728,-.139648,-.118081,-.078003,.975409,.102594,-.003316,.501214,.502102],[1.278864,-.125333,-.153531,-.084748,.957674,.127074,-989e-6,.601151,.399838],[1.255528,-.076749,-.178779,-.078411,.930809,.147602,.004733,.691367,.3039]],ca=(ve,be)=>{let Ce=Math.max(0,Math.min(1,be)),He=Math.round(Ce/.1),Xe=Math.round(Ce%.1),it=ve[He];if(Xe>0&&He<ve.length-1){let Dt=ve[He+1];it=it.map((or,Dr)=>ge(it[Dr],Dt[Dr],Xe))}return Dt=>{let or=z(Dt);if(or===void 0)return;let{r:Dr,g:vi,b:ai}=ji(or),ei={mode:"rgb",r:it[0]*Dr+it[1]*vi+it[2]*ai,g:it[3]*Dr+it[4]*vi+it[5]*ai,b:it[6]*Dr+it[7]*vi+it[8]*ai};return or.alpha!==void 0&&(ei.alpha=or.alpha),L(or.mode)(ei)}},va=(ve=1)=>ca(Ii,ve),Ga=(ve=1)=>ca(Va,ve),wn=(ve=1)=>ca(_a,ve),Hn=ve=>ve*ve*(3-2*ve),Ca=ve=>.5-Math.sin(Math.asin(1-2*ve)/3),en=ve=>ve*ve*ve*(ve*(ve*6-15)+10),Un=en,qn=ve=>(1-Math.cos(ve*Math.PI))/2,yo=qn;function Gs(ve){let be=L("lrgb")(ve);return .2126*be.r+.7152*be.g+.0722*be.b}function Wl(ve,be){let Ce=Gs(ve),He=Gs(be);return(Math.max(Ce,He)+.05)/(Math.min(Ce,He)+.05)}var Co=Z(ht),Rc=Z(Yt),ys=Z(ho),Hu=Z(lo),lc=Z(jo),zc=Z(nl),Pl=Z(On),Il=Z(yu),Yl=Z(Th),oo=Z(Bu),lu=Z(Ou),Ms=Z(ql),uc=Z(Nd),Bc=Z(Wc),Oc=Z(bf),Zn=Z(ou),Bo=Z(Lh),Bs=Z(Af),gr=Z(rn),hi=Z(Dn),di=Z($o),sn=Z(Go),Io=Z(bu),_s=Z(Qf),an=Z(Qc),cr=Z(Pt),xr=Z(st),kr=Z(pt),fi=Z(Sr),Ti=Z(un)}}),Na=de({"src/plot_api/plot_config.js"(e,r){"use strict";var t={staticPlot:{valType:"boolean",dflt:!1},typesetMath:{valType:"boolean",dflt:!0},plotlyServerURL:{valType:"string",dflt:"https://cloud.plotly.com/newchart"},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},editSelection:{valType:"boolean",dflt:!0},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","map"],extras:[!0,!1],dflt:"gl3d+geo+map"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},doubleClickDelay:{valType:"number",dflt:500,min:0},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},displayNotifier:{valType:"boolean",dflt:!0},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!0},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{valType:"any",dflt:{}},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/un/"},logging:{valType:"integer",min:0,max:2,dflt:1},notifyOnLogging:{valType:"integer",min:0,max:2,dflt:0},queueLength:{valType:"integer",min:0,dflt:0},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},i={};function a(o,s){for(var l in o){var n=o[l];n.valType?s[l]=n.dflt:(s[l]||(s[l]={}),a(n,s[l]))}}a(t,i),r.exports={configAttributes:t,dfltConfig:i}}}),xn=de({"src/lib/notifier.js"(e,r){"use strict";var t=Yr(),i=da(),a=[];r.exports=function(o,s,l){var n;if(((n=l?._context)==null?void 0:n.displayNotifier)===!1||a.indexOf(o)!==-1)return;a.push(o);var u=1e3;i(s)?u=s:s==="long"&&(u=3e3);var c=t.select("body").selectAll(".plotly-notifier").data([0]);c.enter().append("div").classed("plotly-notifier",!0);var f=c.selectAll(".notifier-note").data(a);function h(d){d.duration(700).style("opacity",0).each("end",function(p){var g=a.indexOf(p);g!==-1&&a.splice(g,1),t.select(this).remove()})}f.enter().append("div").classed("notifier-note",!0).style("opacity",0).each(function(d){var p=t.select(this);p.append("button").classed("notifier-close",!0).html("×").on("click",function(){p.transition().call(h)});for(var g=p.append("p"),m=d.split(/<br\s*\/?>/g),y=0;y<m.length;y++)y&&g.append("br"),g.append("span").text(m[y]);s==="stick"?p.transition().duration(350).style("opacity",1):p.transition().duration(700).style("opacity",1).transition().delay(u).call(h)})}}}),Xo=de({"src/lib/loggers.js"(e,r){"use strict";var t=Na().dfltConfig,i=xn(),a=r.exports={};a.log=function(){var o;if(t.logging>1){var s=["LOG:"];for(o=0;o<arguments.length;o++)s.push(arguments[o]);console.trace.apply(console,s)}if(t.notifyOnLogging>1){var l=[];for(o=0;o<arguments.length;o++)l.push(arguments[o]);i(l.join("<br>"),"long")}},a.warn=function(){var o;if(t.logging>0){var s=["WARN:"];for(o=0;o<arguments.length;o++)s.push(arguments[o]);console.trace.apply(console,s)}if(t.notifyOnLogging>0){var l=[];for(o=0;o<arguments.length;o++)l.push(arguments[o]);i(l.join("<br>"),"stick")}},a.error=function(){var o;if(t.logging>0){var s=["ERROR:"];for(o=0;o<arguments.length;o++)s.push(arguments[o]);console.error.apply(console,s)}if(t.notifyOnLogging>0){var l=[];for(o=0;o<arguments.length;o++)l.push(arguments[o]);i(l.join("<br>"),"stick")}}}}),Jo=de({"src/components/color/attributes.js"(e){"use strict";e.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],e.defaultLine="#444",e.lightLine="#eee",e.background="#fff",e.borderLine="#BEC8D9",e.lightFraction=1e3/11}}),ta=de({"src/components/color/index.js"(e,r){"use strict";var{converter:t,formatHex:i,formatRgb:a,wcagContrast:o,wcagLuminance:s}=Ri(),{isArrayOrTypedArray:l}=Do(),{warn:n}=Xo(),{background:u,defaultLine:c,defaults:f,lightLine:h}=Jo(),d=t("rgb"),p=t("hsl"),g=q=>{if(typeof q!="string")return;let Y=q.trim().toLowerCase();if(!/^[0-9a-f]+$/.test(Y))try{return d(Y)}catch{return}},m=q=>q>0?q>1?1:q:0,y={mode:"rgb",r:0,g:0,b:0,alpha:1},_=q=>Math.round(q*255e6)/255e6,v=q=>ar(Ot({},q),{r:_(q.r),g:_(q.g),b:_(q.b)}),x=q=>a(v(q)),S=q=>i(v(q)),M=q=>{var Y,K,te,ne;return typeof q=="string"?`"${q}"`:l(q)?`${(K=(Y=q.constructor)==null?void 0:Y.name)!=null?K:"Array"}(${q.length})`:typeof q=="object"?(ne=(te=q.constructor)==null?void 0:te.name)!=null?ne:"Object":`${typeof q} ${q}`},C=(q,Y)=>{var K;let te=g(q);return te?((K=te.alpha)!=null||(te.alpha=1),te):(!Y&&q!=null&&n(`Invalid color specifier: ${M(q)}. Defaulting to "#000"`),y)},w=q=>x(ar(Ot({},C(q)),{alpha:1})),k=q=>q?C(q).alpha:0,A=q=>l(q)&&q.length>2&&Number.isFinite(q[0])&&Number.isFinite(q[1])&&Number.isFinite(q[2]),b=q=>{let[Y,K,te,ne]=q,se=Math.max(Y,K,te)>1?1/255:1,le=ne??1;return{mode:"rgb",r:Y*se,g:K*se,b:te*se,alpha:le>1?le/255:le}},E=(q,Y)=>{let K=A(q)?b(q):C(q,!0),te=[m(K.r),m(K.g),m(K.b),m(K.alpha)];return Y==="uint8"||Y==="uint8_clamped"?Uint8Array.from(te,ne=>Math.round(ne*255)):Y==="float32"?Float32Array.from(te):Y==="float64"?Float64Array.from(te):te},T=(q,Y)=>x(ar(Ot({},C(q)),{alpha:m(Y)})),F=(q,Y)=>{let K=C(q),te=K.alpha;if(te===1)return x(K);let ne=C(Y||u),se=ne.alpha,le=(ce,pe)=>(se===1?pe:1-se+pe*se)*(1-te)+ce*te;return x({mode:"rgb",r:le(K.r,ne.r),g:le(K.g,ne.g),b:le(K.b,ne.b)})},D=(q,Y,K)=>{let te=C(q),ne=C(Y),se=(le,ce)=>K*le+(1-K)*ce;return x({mode:"rgb",r:se(te.r,ne.r),g:se(te.g,ne.g),b:se(te.b,ne.b)})},R=(q,Y)=>{let K=C(q),te=p(K)||{mode:"hsl",h:0,s:0,l:0};return x(d(ar(Ot({},te),{l:m((te.l*100+Y)/100),alpha:K.alpha})))},P=(q,Y)=>o(C(q),C(Y)),z=q=>P(q,u)>P(q,c),I=x(C(u)),L=x(C(c)),B=(q,Y,K)=>(C(q).alpha!==1&&(q=F(q,u)),z(q)?Y?R(q,Y):I:K?R(q,-K):L),O=(q,Y)=>{q.style({stroke:w(Y),"stroke-opacity":C(Y).alpha})},G=(q,Y)=>{q.style({fill:w(Y),"fill-opacity":C(Y).alpha})},W=(q,Y)=>!!(q&&Y&&w(q)===w(Y)),X=q=>g(q)!==void 0,Z=(q,Y)=>{Y=Y===0?0:Y||10;let K=C(q),te=Y/100;return x(ar(Ot({},K),{r:m(K.r+te),g:m(K.g+te),b:m(K.b+te)}))},J=(q,Y,K)=>{let te=C(q),ne=C(Y),se=K/100,le=ne.alpha-te.alpha,ce=2*se-1,pe=((ce*le===-1?ce:(ce+le)/(1+ce*le))+1)/2,xe=1-pe,ye=(fe,ae)=>xe*fe+pe*ae;return x({mode:"rgb",r:ye(te.r,ne.r),g:ye(te.g,ne.g),b:ye(te.b,ne.b),alpha:te.alpha*(1-se)+ne.alpha*se})},N=(q,Y=["#000","#fff"])=>{let K,te=-1/0;for(let ne of Y){let se=P(q,ne);se>te&&(te=se,K=x(C(ne)))}return K},H=q=>x(C(q)),$=q=>S(C(q)).toUpperCase(),U=q=>{let Y=C(q);return[m(Y.r)*255,m(Y.g)*255,m(Y.b)*255,m(Y.alpha)]},V=([q,Y,K,te])=>x({mode:"rgb",r:q/255,g:Y/255,b:K/255,alpha:te}),j=q=>{let Y=C(q);return s({mode:"rgb",r:m(Y.r),g:m(Y.g),b:m(Y.b)})};r.exports={addOpacity:T,adjustLightness:R,background:u,brighten:Z,combine:F,contrast:B,defaultLine:c,defaults:f,equals:W,fill:G,hexString:$,interpolate:D,isChannelArray:A,isDark:z,isValid:X,lightLine:h,luminosity:j,mix:J,mostReadable:N,normalize:E,opacity:k,parse:C,rgb:w,rgbaArray:U,rgbaArrayToString:V,rgbaString:H,stroke:O,wcagContrast:P}}}),vv=de({"src/components/colorscale/scales.js"(e,r){"use strict";var t=ta(),i={Greys:[[0,"rgb(0,0,0)"],[1,"rgb(255,255,255)"]],YlGnBu:[[0,"rgb(8,29,88)"],[.125,"rgb(37,52,148)"],[.25,"rgb(34,94,168)"],[.375,"rgb(29,145,192)"],[.5,"rgb(65,182,196)"],[.625,"rgb(127,205,187)"],[.75,"rgb(199,233,180)"],[.875,"rgb(237,248,217)"],[1,"rgb(255,255,217)"]],Greens:[[0,"rgb(0,68,27)"],[.125,"rgb(0,109,44)"],[.25,"rgb(35,139,69)"],[.375,"rgb(65,171,93)"],[.5,"rgb(116,196,118)"],[.625,"rgb(161,217,155)"],[.75,"rgb(199,233,192)"],[.875,"rgb(229,245,224)"],[1,"rgb(247,252,245)"]],YlOrRd:[[0,"rgb(128,0,38)"],[.125,"rgb(189,0,38)"],[.25,"rgb(227,26,28)"],[.375,"rgb(252,78,42)"],[.5,"rgb(253,141,60)"],[.625,"rgb(254,178,76)"],[.75,"rgb(254,217,118)"],[.875,"rgb(255,237,160)"],[1,"rgb(255,255,204)"]],Bluered:[[0,"rgb(0,0,255)"],[1,"rgb(255,0,0)"]],RdBu:[[0,"rgb(5,10,172)"],[.35,"rgb(106,137,247)"],[.5,"rgb(190,190,190)"],[.6,"rgb(220,170,132)"],[.7,"rgb(230,145,90)"],[1,"rgb(178,10,28)"]],Reds:[[0,"rgb(220,220,220)"],[.2,"rgb(245,195,157)"],[.4,"rgb(245,160,105)"],[1,"rgb(178,10,28)"]],Blues:[[0,"rgb(5,10,172)"],[.35,"rgb(40,60,190)"],[.5,"rgb(70,100,245)"],[.6,"rgb(90,120,245)"],[.7,"rgb(106,137,247)"],[1,"rgb(220,220,220)"]],Picnic:[[0,"rgb(0,0,255)"],[.1,"rgb(51,153,255)"],[.2,"rgb(102,204,255)"],[.3,"rgb(153,204,255)"],[.4,"rgb(204,204,255)"],[.5,"rgb(255,255,255)"],[.6,"rgb(255,204,255)"],[.7,"rgb(255,153,255)"],[.8,"rgb(255,102,204)"],[.9,"rgb(255,102,102)"],[1,"rgb(255,0,0)"]],Rainbow:[[0,"rgb(150,0,90)"],[.125,"rgb(0,0,200)"],[.25,"rgb(0,25,255)"],[.375,"rgb(0,152,255)"],[.5,"rgb(44,255,150)"],[.625,"rgb(151,255,0)"],[.75,"rgb(255,234,0)"],[.875,"rgb(255,111,0)"],[1,"rgb(255,0,0)"]],Portland:[[0,"rgb(12,51,131)"],[.25,"rgb(10,136,186)"],[.5,"rgb(242,211,56)"],[.75,"rgb(242,143,56)"],[1,"rgb(217,30,30)"]],Jet:[[0,"rgb(0,0,131)"],[.125,"rgb(0,60,170)"],[.375,"rgb(5,255,255)"],[.625,"rgb(255,255,0)"],[.875,"rgb(250,0,0)"],[1,"rgb(128,0,0)"]],Hot:[[0,"rgb(0,0,0)"],[.3,"rgb(230,0,0)"],[.6,"rgb(255,210,0)"],[1,"rgb(255,255,255)"]],Blackbody:[[0,"rgb(0,0,0)"],[.2,"rgb(230,0,0)"],[.4,"rgb(230,210,0)"],[.7,"rgb(255,255,255)"],[1,"rgb(160,200,255)"]],Earth:[[0,"rgb(0,0,130)"],[.1,"rgb(0,180,180)"],[.2,"rgb(40,210,40)"],[.4,"rgb(230,230,50)"],[.6,"rgb(120,70,20)"],[1,"rgb(255,255,255)"]],Electric:[[0,"rgb(0,0,0)"],[.15,"rgb(30,0,100)"],[.4,"rgb(120,0,100)"],[.6,"rgb(160,90,0)"],[.8,"rgb(230,200,0)"],[1,"rgb(255,250,220)"]],Viridis:[[0,"#440154"],[.06274509803921569,"#48186a"],[.12549019607843137,"#472d7b"],[.18823529411764706,"#424086"],[.25098039215686274,"#3b528b"],[.3137254901960784,"#33638d"],[.3764705882352941,"#2c728e"],[.4392156862745098,"#26828e"],[.5019607843137255,"#21918c"],[.5647058823529412,"#1fa088"],[.6274509803921569,"#28ae80"],[.6901960784313725,"#3fbc73"],[.7529411764705882,"#5ec962"],[.8156862745098039,"#84d44b"],[.8784313725490196,"#addc30"],[.9411764705882353,"#d8e219"],[1,"#fde725"]],Cividis:[[0,"rgb(0,32,76)"],[.058824,"rgb(0,42,102)"],[.117647,"rgb(0,52,110)"],[.176471,"rgb(39,63,108)"],[.235294,"rgb(60,74,107)"],[.294118,"rgb(76,85,107)"],[.352941,"rgb(91,95,109)"],[.411765,"rgb(104,106,112)"],[.470588,"rgb(117,117,117)"],[.529412,"rgb(131,129,120)"],[.588235,"rgb(146,140,120)"],[.647059,"rgb(161,152,118)"],[.705882,"rgb(176,165,114)"],[.764706,"rgb(192,177,109)"],[.823529,"rgb(209,191,102)"],[.882353,"rgb(225,204,92)"],[.941176,"rgb(243,219,79)"],[1,"rgb(255,233,69)"]]},a=i.RdBu;function o(n,u){if(u||(u=a),!n)return u;function c(){try{n=i[n]||JSON.parse(n)}catch{n=u}}return typeof n=="string"&&(c(),typeof n=="string"&&c()),s(n)?n:u}function s(n){var u=0;if(!Array.isArray(n)||n.length<2||!n[0]||!n[n.length-1]||+n[0][0]!=0||+n[n.length-1][0]!=1)return!1;for(var c=0;c<n.length;c++){var f=n[c];if(f.length!==2||+f[0]<u||!t.isValid(f[1]))return!1;u=+f[0]}return!0}function l(n){return i[n]!==void 0?!0:s(n)}r.exports={scales:i,defaultScale:a,get:o,isValid:l}}}),Ap=de({"src/constants/interactions.js"(e,r){"use strict";r.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}}}),mv={};Mr(mv,{counter:()=>pU});function pU(e,r="",t,i){let a=r+(t?"":"$"),o=i===!1?"":"^";return e==="xy"?new RegExp(o+"x"+wy+"y"+wy+a):new RegExp(o+e+wy+a)}var wy,s1=Ir({"src/lib/regex.ts"(){"use strict";wy="([2-9]|[1-9][0-9]+)?"}}),vU=de({"src/lib/coerce.js"(e){"use strict";var r=da(),t=fn().extendFlat,i=ri(),a=vv(),o=ta(),s=Ap().DESELECTDIM,l=sl(),n=(s1(),ti(mv)).counter,u=(u0(),ti(Tp)).modHalf,c=Do().isArrayOrTypedArray,f=Do().isTypedArraySpec,h=Do().decodeTypedArraySpec;e.valObjectMeta={data_array:{coerceFunction:function(p,g,m){g.set(c(p)?p:f(p)?h(p):m)}},enumerated:{coerceFunction:function(p,g,m,y){y.coerceNumber&&(p=+p),y.values.indexOf(p)===-1?g.set(m):g.set(p)},validateFunction:function(p,g){g.coerceNumber&&(p=+p);for(var m=g.values,y=0;y<m.length;y++){var _=String(m[y]);if(_.charAt(0)==="/"&&_.charAt(_.length-1)==="/"){var v=new RegExp(_.slice(1,-1));if(v.test(p))return!0}else if(p===m[y])return!0}return!1}},boolean:{coerceFunction:function(p,g,m,y){let _=v=>v===!0||v===!1;_(p)||y.arrayOk&&Array.isArray(p)&&p.length>0&&p.every(_)?g.set(p):g.set(m)}},number:{coerceFunction:function(p,g,m,y){f(p)&&(p=h(p)),!r(p)||y.min!==void 0&&p<y.min||y.max!==void 0&&p>y.max?g.set(m):g.set(+p)}},integer:{coerceFunction:function(p,g,m,y){if((y.extras||[]).indexOf(p)!==-1){g.set(p);return}f(p)&&(p=h(p)),p%1||!r(p)||y.min!==void 0&&p<y.min||y.max!==void 0&&p>y.max?g.set(m):g.set(+p)}},string:{coerceFunction:function(p,g,m,y){if(typeof p!="string"){var _=typeof p=="number";y.strict===!0||!_?g.set(m):g.set(String(p))}else y.noBlank&&!p?g.set(m):g.set(p)}},color:{coerceFunction:function(p,g,m){f(p)&&(p=h(p)),o.isValid(p)?g.set(p):g.set(m)}},colorlist:{coerceFunction:function(p,g,m){!Array.isArray(p)||!p.length?g.set(m):p.every(y=>o.isValid(y))?g.set(p):g.set(m)}},colorscale:{coerceFunction:function(p,g,m){g.set(a.get(p,m))}},angle:{coerceFunction:function(p,g,m){f(p)&&(p=h(p)),p==="auto"?g.set("auto"):r(p)?g.set(u(+p,360)):g.set(m)}},subplotid:{coerceFunction:function(p,g,m,y){var _=y.regex||n(m);let v=x=>typeof x=="string"&&_.test(x);v(p)||y.arrayOk&&c(p)&&p.length>0&&p.every(v)?g.set(p):g.set(m)},validateFunction:function(p,g){var m=g.dflt;return p===m?!0:typeof p!="string"?!1:!!n(m).test(p)}},flaglist:{coerceFunction:function(p,g,m,y){if((y.extras||[]).indexOf(p)!==-1){g.set(p);return}if(typeof p!="string"){g.set(m);return}for(var _=p.split("+"),v=0;v<_.length;){var x=_[v];y.flags.indexOf(x)===-1||_.indexOf(x)<v?_.splice(v,1):v++}_.length?g.set(_.join("+")):g.set(m)}},any:{coerceFunction:function(p,g,m){p===void 0?g.set(m):g.set(f(p)?h(p):p)}},info_array:{coerceFunction:function(p,g,m,y){function _(R,P,z){var I,L={set:function(B){I=B}};return z===void 0&&(z=P.dflt),e.valObjectMeta[P.valType].coerceFunction(R,L,z,P),I}if(f(p)&&(p=h(p)),!c(p)){g.set(m);return}var v=y.dimensions===2||y.dimensions==="1-2"&&Array.isArray(p)&&c(p[0]),x=y.items,S=[],M=Array.isArray(x),C=M&&v&&c(x[0]),w=v&&M&&!C,k=M&&!w?x.length:p.length,A,b,E,T,F,D;if(m=Array.isArray(m)?m:[],v)for(A=0;A<k;A++)for(S[A]=[],E=c(p[A])?p[A]:[],w?F=x.length:M?F=x[A].length:F=E.length,b=0;b<F;b++)w?T=x[b]:M?T=x[A][b]:T=x,D=_(E[b],T,(m[A]||[])[b]),D!==void 0&&(S[A][b]=D);else for(A=0;A<k;A++)D=_(p[A],M?x[A]:x,m[A]),D!==void 0&&(S[A]=D);g.set(S)},validateFunction:function(p,g){if(!c(p))return!1;var m=g.items,y=Array.isArray(m),_=g.dimensions===2;if(!g.freeLength&&p.length!==m.length)return!1;for(var v=0;v<p.length;v++)if(_){if(!c(p[v])||!g.freeLength&&p[v].length!==m[v].length)return!1;for(var x=0;x<p[v].length;x++)if(!d(p[v][x],y?m[v][x]:m))return!1}else if(!d(p[v],y?m[v]:m))return!1;return!0}}},e.coerce=function(p,g,m,y,_){var v=l(m,y).get(),x=l(p,y),S=l(g,y),M=x.get(),C=g._template;if(M===void 0&&C&&(M=l(C,y).get(),C=0),_===void 0&&(_=v.dflt),v.arrayOk){if(c(M))return S.set(M),M;if(f(M))return M=h(M),S.set(M),M}var w=e.valObjectMeta[v.valType].coerceFunction;w(M,S,_,v);var k=S.get();return C&&k===_&&!d(M,v)&&(M=l(C,y).get(),w(M,S,_,v),k=S.get()),k},e.coerce2=function(p,g,m,y,_){var v=l(p,y),x=e.coerce(p,g,m,y,_),S=v.get();return S!=null?x:!1},e.coerceFont=function(p,g,m,y){y||(y={}),m=t({},m),m=t(m,y.overrideDflt||{});var _={family:p(g+".family",m.family),size:p(g+".size",m.size),color:p(g+".color",m.color),weight:p(g+".weight",m.weight),style:p(g+".style",m.style)};if(y.noFontVariant||(_.variant=p(g+".variant",m.variant)),y.noFontLineposition||(_.lineposition=p(g+".lineposition",m.lineposition)),y.noFontTextcase||(_.textcase=p(g+".textcase",m.textcase)),!y.noFontShadow){var v=m.shadow;v==="none"&&y.autoShadowDflt&&(v="auto"),_.shadow=p(g+".shadow",v)}return _},e.coercePattern=function(p,g,m,y){var _=p(g+".shape"),v;if(_||(v=p(g+".path")),_||v){_&&p(g+".solidity"),p(g+".size");var x=p(g+".fillmode"),S=x==="overlay";if(!y){var M=p(g+".bgcolor",S?m:void 0);p(g+".fgcolor",S?o.contrast(M):m)}p(g+".fgopacity",S?.5:1)}},e.coerceHoverinfo=function(p,g,m){var y=g._module.attributes,_=y.hoverinfo?y:i,v=_.hoverinfo,x;if(m._dataLength===1){var S=v.dflt==="all"?v.flags.slice():v.dflt.split("+");S.splice(S.indexOf("name"),1),x=S.join("+")}return e.coerce(p,g,_,"hoverinfo",x)},e.coerceSelectionMarkerOpacity=function(p,g){if(p.marker){var m=p.marker.opacity;if(m!==void 0){var y,_;!c(m)&&!p.selected&&!p.unselected&&(y=m,_=s*m),g("selected.marker.opacity",y),g("unselected.marker.opacity",_)}}};function d(p,g){var m=e.valObjectMeta[g.valType];if(g.arrayOk&&c(p))return!0;if(m.validateFunction)return m.validateFunction(p,g);var y={},_=y,v={set:function(x){_=x}};return m.coerceFunction(p,v,y,g),_!==y}e.validate=d}}),gw=de({"src/lib/noop.js"(e,r){"use strict";r.exports=function(){}}}),fE=de({"src/lib/push_unique.js"(e,r){"use strict";r.exports=function(i,a){if(a instanceof RegExp){for(var o=a.toString(),s=0;s<i.length;s++)if(i[s]instanceof RegExp&&i[s].toString()===o)return i;i.push(a)}else(a||a===0)&&i.indexOf(a)===-1&&i.push(a);return i}}}),mU=de({"node_modules/gl-mat4/create.js"(e,r){r.exports=t;function t(){var i=new Float32Array(16);return i[0]=1,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=1,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),gU=de({"node_modules/gl-mat4/clone.js"(e,r){r.exports=t;function t(i){var a=new Float32Array(16);return a[0]=i[0],a[1]=i[1],a[2]=i[2],a[3]=i[3],a[4]=i[4],a[5]=i[5],a[6]=i[6],a[7]=i[7],a[8]=i[8],a[9]=i[9],a[10]=i[10],a[11]=i[11],a[12]=i[12],a[13]=i[13],a[14]=i[14],a[15]=i[15],a}}}),yU=de({"node_modules/gl-mat4/copy.js"(e,r){r.exports=t;function t(i,a){return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],i[9]=a[9],i[10]=a[10],i[11]=a[11],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15],i}}}),hE=de({"node_modules/gl-mat4/identity.js"(e,r){r.exports=t;function t(i){return i[0]=1,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=1,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),_U=de({"node_modules/gl-mat4/transpose.js"(e,r){r.exports=t;function t(i,a){if(i===a){var o=a[1],s=a[2],l=a[3],n=a[6],u=a[7],c=a[11];i[1]=a[4],i[2]=a[8],i[3]=a[12],i[4]=o,i[6]=a[9],i[7]=a[13],i[8]=s,i[9]=n,i[11]=a[14],i[12]=l,i[13]=u,i[14]=c}else i[0]=a[0],i[1]=a[4],i[2]=a[8],i[3]=a[12],i[4]=a[1],i[5]=a[5],i[6]=a[9],i[7]=a[13],i[8]=a[2],i[9]=a[6],i[10]=a[10],i[11]=a[14],i[12]=a[3],i[13]=a[7],i[14]=a[11],i[15]=a[15];return i}}}),xU=de({"node_modules/gl-mat4/invert.js"(e,r){r.exports=t;function t(i,a){var o=a[0],s=a[1],l=a[2],n=a[3],u=a[4],c=a[5],f=a[6],h=a[7],d=a[8],p=a[9],g=a[10],m=a[11],y=a[12],_=a[13],v=a[14],x=a[15],S=o*c-s*u,M=o*f-l*u,C=o*h-n*u,w=s*f-l*c,k=s*h-n*c,A=l*h-n*f,b=d*_-p*y,E=d*v-g*y,T=d*x-m*y,F=p*v-g*_,D=p*x-m*_,R=g*x-m*v,P=S*R-M*D+C*F+w*T-k*E+A*b;return P?(P=1/P,i[0]=(c*R-f*D+h*F)*P,i[1]=(l*D-s*R-n*F)*P,i[2]=(_*A-v*k+x*w)*P,i[3]=(g*k-p*A-m*w)*P,i[4]=(f*T-u*R-h*E)*P,i[5]=(o*R-l*T+n*E)*P,i[6]=(v*C-y*A-x*M)*P,i[7]=(d*A-g*C+m*M)*P,i[8]=(u*D-c*T+h*b)*P,i[9]=(s*T-o*D-n*b)*P,i[10]=(y*k-_*C+x*S)*P,i[11]=(p*C-d*k-m*S)*P,i[12]=(c*E-u*F-f*b)*P,i[13]=(o*F-s*E+l*b)*P,i[14]=(_*M-y*w-v*S)*P,i[15]=(d*w-p*M+g*S)*P,i):null}}}),bU=de({"node_modules/gl-mat4/adjoint.js"(e,r){r.exports=t;function t(i,a){var o=a[0],s=a[1],l=a[2],n=a[3],u=a[4],c=a[5],f=a[6],h=a[7],d=a[8],p=a[9],g=a[10],m=a[11],y=a[12],_=a[13],v=a[14],x=a[15];return i[0]=c*(g*x-m*v)-p*(f*x-h*v)+_*(f*m-h*g),i[1]=-(s*(g*x-m*v)-p*(l*x-n*v)+_*(l*m-n*g)),i[2]=s*(f*x-h*v)-c*(l*x-n*v)+_*(l*h-n*f),i[3]=-(s*(f*m-h*g)-c*(l*m-n*g)+p*(l*h-n*f)),i[4]=-(u*(g*x-m*v)-d*(f*x-h*v)+y*(f*m-h*g)),i[5]=o*(g*x-m*v)-d*(l*x-n*v)+y*(l*m-n*g),i[6]=-(o*(f*x-h*v)-u*(l*x-n*v)+y*(l*h-n*f)),i[7]=o*(f*m-h*g)-u*(l*m-n*g)+d*(l*h-n*f),i[8]=u*(p*x-m*_)-d*(c*x-h*_)+y*(c*m-h*p),i[9]=-(o*(p*x-m*_)-d*(s*x-n*_)+y*(s*m-n*p)),i[10]=o*(c*x-h*_)-u*(s*x-n*_)+y*(s*h-n*c),i[11]=-(o*(c*m-h*p)-u*(s*m-n*p)+d*(s*h-n*c)),i[12]=-(u*(p*v-g*_)-d*(c*v-f*_)+y*(c*g-f*p)),i[13]=o*(p*v-g*_)-d*(s*v-l*_)+y*(s*g-l*p),i[14]=-(o*(c*v-f*_)-u*(s*v-l*_)+y*(s*f-l*c)),i[15]=o*(c*g-f*p)-u*(s*g-l*p)+d*(s*f-l*c),i}}}),wU=de({"node_modules/gl-mat4/determinant.js"(e,r){r.exports=t;function t(i){var a=i[0],o=i[1],s=i[2],l=i[3],n=i[4],u=i[5],c=i[6],f=i[7],h=i[8],d=i[9],p=i[10],g=i[11],m=i[12],y=i[13],_=i[14],v=i[15],x=a*u-o*n,S=a*c-s*n,M=a*f-l*n,C=o*c-s*u,w=o*f-l*u,k=s*f-l*c,A=h*y-d*m,b=h*_-p*m,E=h*v-g*m,T=d*_-p*y,F=d*v-g*y,D=p*v-g*_;return x*D-S*F+M*T+C*E-w*b+k*A}}}),TU=de({"node_modules/gl-mat4/multiply.js"(e,r){r.exports=t;function t(i,a,o){var s=a[0],l=a[1],n=a[2],u=a[3],c=a[4],f=a[5],h=a[6],d=a[7],p=a[8],g=a[9],m=a[10],y=a[11],_=a[12],v=a[13],x=a[14],S=a[15],M=o[0],C=o[1],w=o[2],k=o[3];return i[0]=M*s+C*c+w*p+k*_,i[1]=M*l+C*f+w*g+k*v,i[2]=M*n+C*h+w*m+k*x,i[3]=M*u+C*d+w*y+k*S,M=o[4],C=o[5],w=o[6],k=o[7],i[4]=M*s+C*c+w*p+k*_,i[5]=M*l+C*f+w*g+k*v,i[6]=M*n+C*h+w*m+k*x,i[7]=M*u+C*d+w*y+k*S,M=o[8],C=o[9],w=o[10],k=o[11],i[8]=M*s+C*c+w*p+k*_,i[9]=M*l+C*f+w*g+k*v,i[10]=M*n+C*h+w*m+k*x,i[11]=M*u+C*d+w*y+k*S,M=o[12],C=o[13],w=o[14],k=o[15],i[12]=M*s+C*c+w*p+k*_,i[13]=M*l+C*f+w*g+k*v,i[14]=M*n+C*h+w*m+k*x,i[15]=M*u+C*d+w*y+k*S,i}}}),AU=de({"node_modules/gl-mat4/translate.js"(e,r){r.exports=t;function t(i,a,o){var s=o[0],l=o[1],n=o[2],u,c,f,h,d,p,g,m,y,_,v,x;return a===i?(i[12]=a[0]*s+a[4]*l+a[8]*n+a[12],i[13]=a[1]*s+a[5]*l+a[9]*n+a[13],i[14]=a[2]*s+a[6]*l+a[10]*n+a[14],i[15]=a[3]*s+a[7]*l+a[11]*n+a[15]):(u=a[0],c=a[1],f=a[2],h=a[3],d=a[4],p=a[5],g=a[6],m=a[7],y=a[8],_=a[9],v=a[10],x=a[11],i[0]=u,i[1]=c,i[2]=f,i[3]=h,i[4]=d,i[5]=p,i[6]=g,i[7]=m,i[8]=y,i[9]=_,i[10]=v,i[11]=x,i[12]=u*s+d*l+y*n+a[12],i[13]=c*s+p*l+_*n+a[13],i[14]=f*s+g*l+v*n+a[14],i[15]=h*s+m*l+x*n+a[15]),i}}}),MU=de({"node_modules/gl-mat4/scale.js"(e,r){r.exports=t;function t(i,a,o){var s=o[0],l=o[1],n=o[2];return i[0]=a[0]*s,i[1]=a[1]*s,i[2]=a[2]*s,i[3]=a[3]*s,i[4]=a[4]*l,i[5]=a[5]*l,i[6]=a[6]*l,i[7]=a[7]*l,i[8]=a[8]*n,i[9]=a[9]*n,i[10]=a[10]*n,i[11]=a[11]*n,i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15],i}}}),SU=de({"node_modules/gl-mat4/rotate.js"(e,r){r.exports=t;function t(i,a,o,s){var l=s[0],n=s[1],u=s[2],c=Math.sqrt(l*l+n*n+u*u),f,h,d,p,g,m,y,_,v,x,S,M,C,w,k,A,b,E,T,F,D,R,P,z;return Math.abs(c)<1e-6?null:(c=1/c,l*=c,n*=c,u*=c,f=Math.sin(o),h=Math.cos(o),d=1-h,p=a[0],g=a[1],m=a[2],y=a[3],_=a[4],v=a[5],x=a[6],S=a[7],M=a[8],C=a[9],w=a[10],k=a[11],A=l*l*d+h,b=n*l*d+u*f,E=u*l*d-n*f,T=l*n*d-u*f,F=n*n*d+h,D=u*n*d+l*f,R=l*u*d+n*f,P=n*u*d-l*f,z=u*u*d+h,i[0]=p*A+_*b+M*E,i[1]=g*A+v*b+C*E,i[2]=m*A+x*b+w*E,i[3]=y*A+S*b+k*E,i[4]=p*T+_*F+M*D,i[5]=g*T+v*F+C*D,i[6]=m*T+x*F+w*D,i[7]=y*T+S*F+k*D,i[8]=p*R+_*P+M*z,i[9]=g*R+v*P+C*z,i[10]=m*R+x*P+w*z,i[11]=y*R+S*P+k*z,a!==i&&(i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15]),i)}}}),EU=de({"node_modules/gl-mat4/rotateX.js"(e,r){r.exports=t;function t(i,a,o){var s=Math.sin(o),l=Math.cos(o),n=a[4],u=a[5],c=a[6],f=a[7],h=a[8],d=a[9],p=a[10],g=a[11];return a!==i&&(i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15]),i[4]=n*l+h*s,i[5]=u*l+d*s,i[6]=c*l+p*s,i[7]=f*l+g*s,i[8]=h*l-n*s,i[9]=d*l-u*s,i[10]=p*l-c*s,i[11]=g*l-f*s,i}}}),kU=de({"node_modules/gl-mat4/rotateY.js"(e,r){r.exports=t;function t(i,a,o){var s=Math.sin(o),l=Math.cos(o),n=a[0],u=a[1],c=a[2],f=a[3],h=a[8],d=a[9],p=a[10],g=a[11];return a!==i&&(i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15]),i[0]=n*l-h*s,i[1]=u*l-d*s,i[2]=c*l-p*s,i[3]=f*l-g*s,i[8]=n*s+h*l,i[9]=u*s+d*l,i[10]=c*s+p*l,i[11]=f*s+g*l,i}}}),CU=de({"node_modules/gl-mat4/rotateZ.js"(e,r){r.exports=t;function t(i,a,o){var s=Math.sin(o),l=Math.cos(o),n=a[0],u=a[1],c=a[2],f=a[3],h=a[4],d=a[5],p=a[6],g=a[7];return a!==i&&(i[8]=a[8],i[9]=a[9],i[10]=a[10],i[11]=a[11],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15]),i[0]=n*l+h*s,i[1]=u*l+d*s,i[2]=c*l+p*s,i[3]=f*l+g*s,i[4]=h*l-n*s,i[5]=d*l-u*s,i[6]=p*l-c*s,i[7]=g*l-f*s,i}}}),DU=de({"node_modules/gl-mat4/fromRotation.js"(e,r){r.exports=t;function t(i,a,o){var s,l,n,u=o[0],c=o[1],f=o[2],h=Math.sqrt(u*u+c*c+f*f);return Math.abs(h)<1e-6?null:(h=1/h,u*=h,c*=h,f*=h,s=Math.sin(a),l=Math.cos(a),n=1-l,i[0]=u*u*n+l,i[1]=c*u*n+f*s,i[2]=f*u*n-c*s,i[3]=0,i[4]=u*c*n-f*s,i[5]=c*c*n+l,i[6]=f*c*n+u*s,i[7]=0,i[8]=u*f*n+c*s,i[9]=c*f*n-u*s,i[10]=f*f*n+l,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i)}}}),LU=de({"node_modules/gl-mat4/fromRotationTranslation.js"(e,r){r.exports=t;function t(i,a,o){var s=a[0],l=a[1],n=a[2],u=a[3],c=s+s,f=l+l,h=n+n,d=s*c,p=s*f,g=s*h,m=l*f,y=l*h,_=n*h,v=u*c,x=u*f,S=u*h;return i[0]=1-(m+_),i[1]=p+S,i[2]=g-x,i[3]=0,i[4]=p-S,i[5]=1-(d+_),i[6]=y+v,i[7]=0,i[8]=g+x,i[9]=y-v,i[10]=1-(d+m),i[11]=0,i[12]=o[0],i[13]=o[1],i[14]=o[2],i[15]=1,i}}}),FU=de({"node_modules/gl-mat4/fromScaling.js"(e,r){r.exports=t;function t(i,a){return i[0]=a[0],i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=a[1],i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=a[2],i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),PU=de({"node_modules/gl-mat4/fromTranslation.js"(e,r){r.exports=t;function t(i,a){return i[0]=1,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=1,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1,i[11]=0,i[12]=a[0],i[13]=a[1],i[14]=a[2],i[15]=1,i}}}),IU=de({"node_modules/gl-mat4/fromXRotation.js"(e,r){r.exports=t;function t(i,a){var o=Math.sin(a),s=Math.cos(a);return i[0]=1,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=s,i[6]=o,i[7]=0,i[8]=0,i[9]=-o,i[10]=s,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),RU=de({"node_modules/gl-mat4/fromYRotation.js"(e,r){r.exports=t;function t(i,a){var o=Math.sin(a),s=Math.cos(a);return i[0]=s,i[1]=0,i[2]=-o,i[3]=0,i[4]=0,i[5]=1,i[6]=0,i[7]=0,i[8]=o,i[9]=0,i[10]=s,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),zU=de({"node_modules/gl-mat4/fromZRotation.js"(e,r){r.exports=t;function t(i,a){var o=Math.sin(a),s=Math.cos(a);return i[0]=s,i[1]=o,i[2]=0,i[3]=0,i[4]=-o,i[5]=s,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=1,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),BU=de({"node_modules/gl-mat4/fromQuat.js"(e,r){r.exports=t;function t(i,a){var o=a[0],s=a[1],l=a[2],n=a[3],u=o+o,c=s+s,f=l+l,h=o*u,d=s*u,p=s*c,g=l*u,m=l*c,y=l*f,_=n*u,v=n*c,x=n*f;return i[0]=1-p-y,i[1]=d+x,i[2]=g-v,i[3]=0,i[4]=d-x,i[5]=1-h-y,i[6]=m+_,i[7]=0,i[8]=g+v,i[9]=m-_,i[10]=1-h-p,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,i}}}),OU=de({"node_modules/gl-mat4/frustum.js"(e,r){r.exports=t;function t(i,a,o,s,l,n,u){var c=1/(o-a),f=1/(l-s),h=1/(n-u);return i[0]=n*2*c,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=n*2*f,i[6]=0,i[7]=0,i[8]=(o+a)*c,i[9]=(l+s)*f,i[10]=(u+n)*h,i[11]=-1,i[12]=0,i[13]=0,i[14]=u*n*2*h,i[15]=0,i}}}),NU=de({"node_modules/gl-mat4/perspective.js"(e,r){r.exports=t;function t(i,a,o,s,l){var n=1/Math.tan(a/2),u=1/(s-l);return i[0]=n/o,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=n,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=(l+s)*u,i[11]=-1,i[12]=0,i[13]=0,i[14]=2*l*s*u,i[15]=0,i}}}),jU=de({"node_modules/gl-mat4/perspectiveFromFieldOfView.js"(e,r){r.exports=t;function t(i,a,o,s){var l=Math.tan(a.upDegrees*Math.PI/180),n=Math.tan(a.downDegrees*Math.PI/180),u=Math.tan(a.leftDegrees*Math.PI/180),c=Math.tan(a.rightDegrees*Math.PI/180),f=2/(u+c),h=2/(l+n);return i[0]=f,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=h,i[6]=0,i[7]=0,i[8]=-((u-c)*f*.5),i[9]=(l-n)*h*.5,i[10]=s/(o-s),i[11]=-1,i[12]=0,i[13]=0,i[14]=s*o/(o-s),i[15]=0,i}}}),UU=de({"node_modules/gl-mat4/ortho.js"(e,r){r.exports=t;function t(i,a,o,s,l,n,u){var c=1/(a-o),f=1/(s-l),h=1/(n-u);return i[0]=-2*c,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=-2*f,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=2*h,i[11]=0,i[12]=(a+o)*c,i[13]=(l+s)*f,i[14]=(u+n)*h,i[15]=1,i}}}),qU=de({"node_modules/gl-mat4/lookAt.js"(e,r){var t=hE();r.exports=i;function i(a,o,s,l){var n,u,c,f,h,d,p,g,m,y,_=o[0],v=o[1],x=o[2],S=l[0],M=l[1],C=l[2],w=s[0],k=s[1],A=s[2];return Math.abs(_-w)<1e-6&&Math.abs(v-k)<1e-6&&Math.abs(x-A)<1e-6?t(a):(p=_-w,g=v-k,m=x-A,y=1/Math.sqrt(p*p+g*g+m*m),p*=y,g*=y,m*=y,n=M*m-C*g,u=C*p-S*m,c=S*g-M*p,y=Math.sqrt(n*n+u*u+c*c),y?(y=1/y,n*=y,u*=y,c*=y):(n=0,u=0,c=0),f=g*c-m*u,h=m*n-p*c,d=p*u-g*n,y=Math.sqrt(f*f+h*h+d*d),y?(y=1/y,f*=y,h*=y,d*=y):(f=0,h=0,d=0),a[0]=n,a[1]=f,a[2]=p,a[3]=0,a[4]=u,a[5]=h,a[6]=g,a[7]=0,a[8]=c,a[9]=d,a[10]=m,a[11]=0,a[12]=-(n*_+u*v+c*x),a[13]=-(f*_+h*v+d*x),a[14]=-(p*_+g*v+m*x),a[15]=1,a)}}}),VU=de({"node_modules/gl-mat4/str.js"(e,r){r.exports=t;function t(i){return"mat4("+i[0]+", "+i[1]+", "+i[2]+", "+i[3]+", "+i[4]+", "+i[5]+", "+i[6]+", "+i[7]+", "+i[8]+", "+i[9]+", "+i[10]+", "+i[11]+", "+i[12]+", "+i[13]+", "+i[14]+", "+i[15]+")"}}}),dE=de({"node_modules/gl-mat4/index.js"(e,r){r.exports={create:mU(),clone:gU(),copy:yU(),identity:hE(),transpose:_U(),invert:xU(),adjoint:bU(),determinant:wU(),multiply:TU(),translate:AU(),scale:MU(),rotate:SU(),rotateX:EU(),rotateY:kU(),rotateZ:CU(),fromRotation:DU(),fromRotationTranslation:LU(),fromScaling:FU(),fromTranslation:PU(),fromXRotation:IU(),fromYRotation:RU(),fromZRotation:zU(),fromQuat:BU(),frustum:OU(),perspective:NU(),perspectiveFromFieldOfView:jU(),ortho:UU(),lookAt:qU(),str:VU()}}}),yw=de({"src/lib/matrix.js"(e){"use strict";var r=dE();e.init2dArray=function(t,i){for(var a=new Array(t),o=0;o<t;o++)a[o]=new Array(i);return a},e.transposeRagged=function(t){var i=0,a=t.length,o,s;for(o=0;o<a;o++)i=Math.max(i,t[o].length);var l=new Array(i);for(o=0;o<i;o++)for(l[o]=new Array(a),s=0;s<a;s++)l[o][s]=t[s][o];return l},e.dot=function(t,i){if(!(t.length&&i.length)||t.length!==i.length)return null;var a=t.length,o,s;if(t[0].length)for(o=new Array(a),s=0;s<a;s++)o[s]=e.dot(t[s],i);else if(i[0].length){var l=e.transposeRagged(i);for(o=new Array(l.length),s=0;s<l.length;s++)o[s]=e.dot(t,l[s])}else for(o=0,s=0;s<a;s++)o+=t[s]*i[s];return o},e.translationMatrix=function(t,i){return[[1,0,t],[0,1,i],[0,0,1]]},e.rotationMatrix=function(t){var i=t*Math.PI/180;return[[Math.cos(i),-Math.sin(i),0],[Math.sin(i),Math.cos(i),0],[0,0,1]]},e.rotationXYMatrix=function(t,i,a){return e.dot(e.dot(e.translationMatrix(i,a),e.rotationMatrix(t)),e.translationMatrix(-i,-a))},e.apply3DTransform=function(t){return function(){var i=arguments,a=arguments.length===1?i[0]:[i[0],i[1],i[2]||0];return e.dot(t,[a[0],a[1],a[2],1]).slice(0,3)}},e.apply2DTransform=function(t){return function(){var i=arguments;i.length===3&&(i=i[0]);var a=arguments.length===1?i[0]:[i[0],i[1]];return e.dot(t,[a[0],a[1],1]).slice(0,2)}},e.apply2DTransform2=function(t){var i=e.apply2DTransform(t);return function(a){return i(a.slice(0,2)).concat(i(a.slice(2,4)))}},e.convertCssMatrix=function(t){if(t){var i=t.length;if(i===16)return t;if(i===6)return[t[0],t[1],0,0,t[2],t[3],0,0,0,0,1,0,t[4],t[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},e.inverseTransformMatrix=function(t){var i=[];return r.invert(i,t),[[i[0],i[1],i[2],i[3]],[i[4],i[5],i[6],i[7]],[i[8],i[9],i[10],i[11]],[i[12],i[13],i[14],i[15]]]}}}),Ty=de({"src/lib/dom.js"(e,r){"use strict";var t=Yr(),i=Xo(),a=yw(),o=dE();function s(_){var v;if(typeof _=="string"){if(v=document.getElementById(_),v===null)throw new Error("No DOM element with id '"+_+"' exists on the page.");return v}else if(_==null)throw new Error("DOM element provided is null or undefined");return _}function l(_){var v=t.select(_);return v.node()instanceof HTMLElement&&v.size()&&v.classed("js-plotly-plot")}function n(_){var v=_&&_.parentNode;v&&v.removeChild(_)}function u(_,v){c("global",_,v)}function c(_,v,x){var S="plotly.js-style-"+_,M=document.getElementById(S);if(!(M&&M.matches(".no-inline-styles"))){M||(M=document.createElement("style"),M.setAttribute("id",S),M.appendChild(document.createTextNode("")),document.head.appendChild(M));var C=M.sheet;C?C.insertRule?C.insertRule(v+"{"+x+"}",0):C.addRule?C.addRule(v,x,0):i.warn("addStyleRule failed"):i.warn("Cannot addRelatedStyleRule, probably due to strict CSP...")}}function f(_){var v="plotly.js-style-"+_,x=document.getElementById(v);x&&n(x)}function h(_,v,x,S,M,C){var w=S.split(":"),k=M.split(":"),A="data-btn-style-event-added";C||(C=document),C.querySelectorAll(_).forEach(function(b){b.getAttribute(A)||(b.addEventListener("mouseenter",function(){var E=this.querySelector(x);E&&(E.style[w[0]]=w[1])}),b.addEventListener("mouseleave",function(){var E=this.querySelector(x);E&&(v&&this.matches(v)?E.style[w[0]]=w[1]:E.style[k[0]]=k[1])}),b.setAttribute(A,!0))})}function d(_){var v=g(_),x=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return v.forEach(function(S){var M=p(S);if(M){var C=a.convertCssMatrix(M);x=o.multiply(x,x,C)}}),x}function p(_){var v=window.getComputedStyle(_,null),x=v.getPropertyValue("-webkit-transform")||v.getPropertyValue("-moz-transform")||v.getPropertyValue("-ms-transform")||v.getPropertyValue("-o-transform")||v.getPropertyValue("transform");return x==="none"?null:x.replace("matrix","").replace("3d","").slice(1,-1).split(",").map(function(S){return+S})}function g(_){for(var v=[];m(_);)v.push(_),_=_.parentNode,typeof ShadowRoot=="function"&&_ instanceof ShadowRoot&&(_=_.host);return v}function m(_){return _&&(_ instanceof Element||_ instanceof HTMLElement)}function y(_,v){return _&&v&&_.top===v.top&&_.left===v.left&&_.right===v.right&&_.bottom===v.bottom}r.exports={getGraphDiv:s,isPlotDiv:l,removeElement:n,addStyleRule:u,addRelatedStyleRule:c,deleteRelatedStyleRule:f,setStyleOnHover:h,getFullTransformMatrix:d,getElementTransformMatrix:p,getElementAndAncestors:g,equalDomRects:y}}}),Ay=de({"src/plots/animation_attributes.js"(e,r){"use strict";r.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500,editType:"none"},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"],editType:"none"},ordering:{valType:"enumerated",values:["layout first","traces first"],dflt:"layout first",editType:"none"}}}}}),Ps=de({"src/plot_api/edit_types.js"(e,r){"use strict";var t=fn().extendFlat,i=is(),a={valType:"flaglist",extras:["none"],flags:["calc","clearAxisTypes","plot","style","markerSize","colorbars"]},o={valType:"flaglist",extras:["none"],flags:["calc","plot","legend","ticks","axrange","layoutstyle","modebar","camera","arraydraw","colorbars"]},s=a.flags.slice().concat(["fullReplot"]),l=o.flags.slice().concat("layoutReplot");r.exports={traces:a,layout:o,traceFlags:function(){return n(s)},layoutFlags:function(){return n(l)},update:function(f,h){var d=h.editType;if(d&&d!=="none")for(var p=d.split("+"),g=0;g<p.length;g++)f[p[g]]=!0},overrideAll:u};function n(f){for(var h={},d=0;d<f.length;d++)h[f[d]]=!1;return h}function u(f,h,d){var p=t({},f);for(var g in p){var m=p[g];i(m)&&(p[g]=c(m,h,d,g))}return d==="from-root"&&(p.editType=h),p}function c(f,h,d,p){if(f.valType){var g=t({},f);if(g.editType=h,Array.isArray(f.items)){g.items=new Array(f.items.length);for(var m=0;m<f.items.length;m++)g.items[m]=c(f.items[m],h,"from-root")}return g}else return u(f,h,p.charAt(0)==="_"?"nested":"from-root")}}}),fu=de({"src/components/drawing/attributes.js"(e){"use strict";e.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"},e.pattern={shape:{valType:"enumerated",values:["","/","\\","x","-","|","+","."],dflt:"",arrayOk:!0,editType:"style"},path:{valType:"string",arrayOk:!0,editType:"style"},fillmode:{valType:"enumerated",values:["replace","overlay"],dflt:"replace",editType:"style"},bgcolor:{valType:"color",arrayOk:!0,editType:"style"},fgcolor:{valType:"color",arrayOk:!0,editType:"style"},fgopacity:{valType:"number",editType:"style",min:0,max:1},size:{valType:"number",min:0,dflt:8,arrayOk:!0,editType:"style"},solidity:{valType:"number",min:0,max:1,dflt:.3,arrayOk:!0,editType:"style"},editType:"style"}}}),pE=de({"src/constants/docs.js"(e,r){"use strict";r.exports={FORMAT_LINK:"https://github.com/d3/d3-format/tree/v1.4.5#d3-format",DATE_FORMAT_LINK:"https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format"}}}),Vo=de({"src/plots/template_attributes.js"(e){"use strict";var{DATE_FORMAT_LINK:r,FORMAT_LINK:t}=pE(),i=["Variables that can't be found will be replaced with the specifier.",'For example, a template of "data: %{x}, %{y}" will result in a value of "data: 1, %{y}" if x is 1 and y is missing.',"Variables with an undefined value will be replaced with the fallback value."].join(" ");function a({supportOther:o}={}){return["Variables are inserted using %{variable},",'for example "y: %{y}"'+(o?" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown.":"."),`Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example "Price: %{y:$.2f}".`,t,"for details on the formatting syntax.",`Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example "Day: %{2019-01-01|%A}".`,r,"for details on the date formatting syntax.",i].join(" ")}e.templateFormatStringDescription=a,e.hovertemplateAttrs=({editType:o="none",arrayOk:s}={},l={})=>Ot({valType:"string",dflt:"",editType:o},s!==!1?{arrayOk:!0}:{}),e.texttemplateAttrs=({editType:o="calc",arrayOk:s}={},l={})=>Ot({valType:"string",dflt:"",editType:o},s!==!1?{arrayOk:!0}:{}),e.shapeTexttemplateAttrs=({editType:o="arraydraw",newshape:s}={},l={})=>({valType:"string",dflt:"",editType:o}),e.templatefallbackAttrs=({editType:o="none"}={})=>({valType:"any",dflt:"-",editType:o})}}),_w=de({"src/components/shapes/label_texttemplate.js"(e,r){"use strict";function t(M,C){return C?C.d2l(M):M}function i(M,C){return C?C.l2d(M):M}function a(M){return M.x0}function o(M){return M.x1}function s(M){return M.y0}function l(M){return M.y1}function n(M){return M.x0shift||0}function u(M){return M.x1shift||0}function c(M){return M.y0shift||0}function f(M){return M.y1shift||0}function h(M,C){return t(M.x1,C)+u(M)-t(M.x0,C)-n(M)}function d(M,C,w){return t(M.y1,w)+f(M)-t(M.y0,w)-c(M)}function p(M,C){return Math.abs(h(M,C))}function g(M,C,w){return Math.abs(d(M,C,w))}function m(M,C,w){return M.type!=="line"?void 0:Math.sqrt(Math.pow(h(M,C),2)+Math.pow(d(M,C,w),2))}function y(M,C){return i((t(M.x1,C)+u(M)+t(M.x0,C)+n(M))/2,C)}function _(M,C,w){return i((t(M.y1,w)+f(M)+t(M.y0,w)+c(M))/2,w)}function v(M,C,w){return M.type!=="line"?void 0:d(M,C,w)/h(M,C)}var x=["x0","x1","y0","y1","dy","height","ycenter"],S=["x0","x1","y0","y1","dx","width","xcenter"];r.exports={x0:a,x1:o,y0:s,y1:l,slope:v,dx:h,dy:d,width:p,height:g,length:m,xcenter:y,ycenter:_,simpleXVariables:x,simpleYVariables:S}}}),GU=de({"src/components/shapes/draw_newshape/attributes.js"(e,r){"use strict";var t=Ps().overrideAll,i=ri(),a=us(),o=fu().dash,s=fn().extendFlat,{shapeTexttemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=_w();r.exports=t({newshape:{visible:s({},i.visible,{}),showlegend:{valType:"boolean",dflt:!1},legend:s({},i.legend,{}),legendgroup:s({},i.legendgroup,{}),legendgrouptitle:{text:s({},i.legendgrouptitle.text,{}),font:a({})},legendrank:s({},i.legendrank,{}),legendwidth:s({},i.legendwidth,{}),line:{color:{valType:"color"},width:{valType:"number",min:0,dflt:4},dash:s({},o,{dflt:"solid"})},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd"},opacity:{valType:"number",min:0,max:1,dflt:1},layer:{valType:"enumerated",values:["below","above","between"],dflt:"above"},drawdirection:{valType:"enumerated",values:["ortho","horizontal","vertical","diagonal"],dflt:"diagonal"},name:s({},i.name,{}),label:{text:{valType:"string",dflt:""},texttemplate:l({newshape:!0},{keys:Object.keys(u)}),texttemplatefallback:n({editType:"arraydraw"}),font:a({}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right","start","middle","end"]},textangle:{valType:"angle",dflt:"auto"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},padding:{valType:"number",dflt:3,min:0}}},activeshape:{fillcolor:{valType:"color",dflt:"rgb(255,0,255)",description:"Sets the color filling the active shape' interior."},opacity:{valType:"number",min:0,max:1,dflt:.5}}},"none","from-root")}}),HU=de({"src/components/selections/draw_newselection/attributes.js"(e,r){"use strict";var t=fu().dash,i=fn().extendFlat;r.exports={newselection:{mode:{valType:"enumerated",values:["immediate","gradual"],dflt:"immediate",editType:"none"},line:{color:{valType:"color",editType:"none"},width:{valType:"number",min:1,dflt:1,editType:"none"},dash:i({},t,{dflt:"dot",editType:"none"}),editType:"none"},editType:"none"},activeselection:{fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"none"},opacity:{valType:"number",min:0,max:1,dflt:.5,editType:"none"},editType:"none"}}}}),xw=de({"src/plots/pad_attributes.js"(e,r){"use strict";r.exports=function(t){var i=t.editType;return{t:{valType:"number",dflt:0,editType:i},r:{valType:"number",dflt:0,editType:i},b:{valType:"number",dflt:0,editType:i},l:{valType:"number",dflt:0,editType:i},editType:i}}}}),l1=de({"src/plots/layout_attributes.js"(e,r){"use strict";var t=us(),i=Ay(),a=Jo(),o=GU(),s=HU(),l=xw(),n=fn().extendFlat,u=t({editType:"calc"});u.family.dflt='"Open Sans", verdana, arial, sans-serif',u.size.dflt=12,u.color.dflt=a.defaultLine,r.exports={font:u,title:{text:{valType:"string",editType:"layoutstyle"},font:t({editType:"layoutstyle"}),subtitle:{text:{valType:"string",editType:"layoutstyle"},font:t({editType:"layoutstyle"}),editType:"layoutstyle"},xref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},yref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},x:{valType:"number",min:0,max:1,dflt:.5,editType:"layoutstyle"},y:{valType:"number",min:0,max:1,dflt:"auto",editType:"layoutstyle"},xanchor:{valType:"enumerated",dflt:"auto",values:["auto","left","center","right"],editType:"layoutstyle"},yanchor:{valType:"enumerated",dflt:"auto",values:["auto","top","middle","bottom"],editType:"layoutstyle"},pad:n(l({editType:"layoutstyle"}),{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},editType:"layoutstyle"},uniformtext:{mode:{valType:"enumerated",values:[!1,"hide","show"],dflt:!1,editType:"plot"},minsize:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"},autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"plot"},height:{valType:"number",min:10,dflt:450,editType:"plot"},minreducedwidth:{valType:"number",min:2,dflt:64,editType:"plot"},minreducedheight:{valType:"number",min:2,dflt:64,editType:"plot"},margin:{l:{valType:"number",min:0,dflt:80,editType:"plot"},r:{valType:"number",min:0,dflt:80,editType:"plot"},t:{valType:"number",min:0,dflt:100,editType:"plot"},b:{valType:"number",min:0,dflt:80,editType:"plot"},pad:{valType:"number",min:0,dflt:0,editType:"plot"},autoexpand:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},computed:{valType:"any",editType:"none"},paper_bgcolor:{valType:"color",dflt:a.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:a.background,editType:"layoutstyle"},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},separators:{valType:"string",editType:"plot"},showlegend:{valType:"boolean",editType:"legend"},colorway:{valType:"colorlist",dflt:a.defaults,editType:"calc"},datarevision:{valType:"any",editType:"calc"},uirevision:{valType:"any",editType:"none"},editrevision:{valType:"any",editType:"none"},selectionrevision:{valType:"any",editType:"none"},template:{valType:"any",editType:"calc"},newshape:o.newshape,activeshape:o.activeshape,newselection:s.newselection,activeselection:s.activeselection,meta:{valType:"any",arrayOk:!0,editType:"plot"},transition:n({},i.transition,{editType:"none"})}}}),$U=de({"node_modules/maplibre-gl/dist/maplibre-gl.css"(){(function(){if(!document.getElementById("9f215cf04c5486422605d13261cb87401f4e7763b6296af81e98efbc0130da53")){var e=document.createElement("style");e.id="9f215cf04c5486422605d13261cb87401f4e7763b6296af81e98efbc0130da53",e.textContent='.maplibregl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0 0 0/0)}.maplibregl-canvas{position:absolute;left:0;top:0}.maplibregl-map:fullscreen{width:100%;height:100%}.maplibregl-ctrl-group button.maplibregl-ctrl-compass{touch-action:none}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures,.maplibregl-canvas-container.maplibregl-touch-drag-pan.maplibregl-cooperative-gestures .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.maplibregl-ctrl-top-left{top:0;left:0}.maplibregl-ctrl-top-right{top:0;right:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{right:0;bottom:0}.maplibregl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{margin:10px 0 0 10px;float:left}.maplibregl-ctrl-top-right .maplibregl-ctrl{margin:10px 10px 0 0;float:right}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{margin:0 0 10px 10px;float:left}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{margin:0 10px 10px 0;float:right}.maplibregl-ctrl-group{border-radius:4px;background:#fff}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (forced-colors:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{width:29px;height:29px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (forced-colors:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}@media (hover:hover){.maplibregl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}}.maplibregl-ctrl button:not(:disabled):active{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1z%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E")}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22m10.5%2014%204-8%204%208z%22%2F%3E%3Cpath%20fill%3D%22%23ccc%22%20d%3D%22m10.5%2016%204%208%204-8z%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-globe .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22none%22%20stroke%3D%22%23333%22%20viewBox%3D%220%200%2022%2022%22%3E%3Ccircle%20cx%3D%2211%22%20cy%3D%2211%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M17.5%2011c0%204.819-3.02%208.5-6.5%208.5S4.5%2015.819%204.5%2011%207.52%202.5%2011%202.5s6.5%203.681%206.5%208.5Z%22%2F%3E%3Cpath%20d%3D%22M13.5%2011c0%202.447-.331%204.64-.853%206.206-.262.785-.562%201.384-.872%201.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831%2015.64%208.5%2013.446%208.5%2011s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872%201.777.522%201.565.853%203.76.853%206.206Z%22%2F%3E%3Cpath%20d%3D%22M11%207.5c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138q.07-.058.224-.138c.299-.151.763-.302%201.379-.434C7.378%205.666%209.091%205.5%2011%205.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0%209c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138%201.3%201.3%200%200%201%20.224-.138c.299-.151.763-.302%201.379-.434C7.378%2014.666%209.091%2014.5%2011%2014.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138a1.3%201.3%200%200%201-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0-4c-2.46%200-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5%201.5%200%200%201-.39-.272.3.3%200%200%201-.047-.064.3.3%200%200%201%20.048-.064c.066-.073.189-.167.389-.272.399-.21%201.009-.413%201.805-.59C6.328%209.722%208.54%209.5%2011%209.5s4.672.222%206.256.574c.795.177%201.405.38%201.804.59.2.105.323.2.39.272a.3.3%200%200%201%20.047.064.3.3%200%200%201-.048.064%201.4%201.4%200%200%201-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0%20.018v.002zm17.002.002v-.002zm0-.018v-.002z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-globe-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22none%22%20stroke%3D%22%2333b5e5%22%20viewBox%3D%220%200%2022%2022%22%3E%3Ccircle%20cx%3D%2211%22%20cy%3D%2211%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M17.5%2011c0%204.819-3.02%208.5-6.5%208.5S4.5%2015.819%204.5%2011%207.52%202.5%2011%202.5s6.5%203.681%206.5%208.5Z%22%2F%3E%3Cpath%20d%3D%22M13.5%2011c0%202.447-.331%204.64-.853%206.206-.262.785-.562%201.384-.872%201.777-.314.399-.58.517-.775.517s-.461-.118-.775-.517c-.31-.393-.61-.992-.872-1.777C8.831%2015.64%208.5%2013.446%208.5%2011s.331-4.64.853-6.206c.262-.785.562-1.384.872-1.777.314-.399.58-.517.775-.517s.461.118.775.517c.31.393.61.992.872%201.777.522%201.565.853%203.76.853%206.206Z%22%2F%3E%3Cpath%20d%3D%22M11%207.5c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138q.07-.058.224-.138c.299-.151.763-.302%201.379-.434C7.378%205.666%209.091%205.5%2011%205.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138q-.07.058-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0%209c-1.909%200-3.622-.166-4.845-.428-.616-.132-1.08-.283-1.379-.434a1.3%201.3%200%200%201-.224-.138%201.3%201.3%200%200%201%20.224-.138c.299-.151.763-.302%201.379-.434C7.378%2014.666%209.091%2014.5%2011%2014.5s3.622.166%204.845.428c.616.132%201.08.283%201.379.434.105.053.177.1.224.138a1.3%201.3%200%200%201-.224.138c-.299.151-.763.302-1.379.434-1.223.262-2.936.428-4.845.428Zm0-4c-2.46%200-4.672-.222-6.255-.574-.796-.177-1.406-.38-1.805-.59a1.5%201.5%200%200%201-.39-.272.3.3%200%200%201-.047-.064.3.3%200%200%201%20.048-.064c.066-.073.189-.167.389-.272.399-.21%201.009-.413%201.805-.59C6.328%209.722%208.54%209.5%2011%209.5s4.672.222%206.256.574c.795.177%201.405.38%201.804.59.2.105.323.2.39.272a.3.3%200%200%201%20.047.064.3.3%200%200%201-.048.064%201.4%201.4%200%200%201-.389.272c-.399.21-1.009.413-1.804.59-1.584.352-3.796.574-6.256.574Zm-8.501-1.51v.002zm0%20.018v.002zm17.002.002v-.002zm0-.018v-.002z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2022%2022%22%3E%3Cpath%20d%3D%22m1.754%2013.406%204.453-4.851%203.09%203.09%203.281%203.277.969-.969-3.309-3.312%203.844-4.121%206.148%206.886h1.082v-.855l-7.207-8.07-4.84%205.187L6.169%206.57l-5.48%205.965v.871ZM.688%2016.844h20.625v1.375H.688Zm0%200%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-terrain-enabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2222%22%20height%3D%2222%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2022%2022%22%3E%3Cpath%20d%3D%22m1.754%2013.406%204.453-4.851%203.09%203.09%203.281%203.277.969-.969-3.309-3.312%203.844-4.121%206.148%206.886h1.082v-.855l-7.207-8.07-4.84%205.187L6.169%206.57l-5.48%205.965v.871ZM.688%2016.844h20.625v1.375H.688Zm0%200%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23aaa%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e58978%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e54e33%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{animation:maplibregl-spin 2s linear infinite}@media (forced-colors:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23999%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e58978%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%2333b5e5%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23e54e33%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3C%2Fsvg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2229%22%20height%3D%2229%22%20fill%3D%22%23666%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1m0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7%22%2F%3E%3Ccircle%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20fill%3D%22red%22%20d%3D%22m14%205%201%201-9%209-1-1z%22%2F%3E%3C%2Fsvg%3E")}}@keyframes maplibregl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.maplibregl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (forced-colors:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}}@media (forced-colors:active) and (prefers-color-scheme:light){a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2288%22%20height%3D%2223%22%20fill%3D%22none%22%3E%3Cpath%20fill%3D%22%23000%22%20fill-opacity%3D%22.4%22%20fill-rule%3D%22evenodd%22%20d%3D%22M17.408%2016.796h-1.827l2.501-12.095h.198l3.324%206.533.988%202.19.988-2.19%203.258-6.533h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.929%205.644h-.098l-2.914-5.644-.757-1.71-.345%201.71zm1.958-3.42-.726%203.663a1.255%201.255%200%200%201-1.232%201.011h-1.827a1.255%201.255%200%200%201-1.229-1.509l2.501-12.095a1.255%201.255%200%200%201%201.23-1.001h.197a1.25%201.25%200%200%201%201.12.685l3.19%206.273%203.125-6.263a1.25%201.25%200%200%201%201.123-.695h.181a1.255%201.255%200%200%201%201.227.991l1.443%206.71a5%205%200%200%201%20.314-.787l.009-.016a4.6%204.6%200%200%201%201.777-1.887c.782-.46%201.668-.667%202.611-.667a4.6%204.6%200%200%201%201.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255%201.255%200%200%201%201.212.925%201.255%201.255%200%200%201%201.212-.925h1.711c.284%200%20.545.094.755.252.613-.3%201.312-.45%202.075-.45%201.356%200%202.557.445%203.482%201.4q.47.48.763%201.064V4.701a1.255%201.255%200%200%201%201.255-1.255h1.86A1.255%201.255%200%200%201%2054.44%204.7v9.194h2.217c.19%200%20.37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.42%202.42%200%200%201-.682-1.71c0-.665.267-1.253.735-1.7a2.45%202.45%200%200%201%201.722-.674%202.43%202.43%200%200%201%201.705.675q.318.302.504.683V4.7a1.255%201.255%200%200%201%201.255-1.255h1.744A1.255%201.255%200%200%201%2065.812%204.7v3.335a4.8%204.8%200%200%201%201.526-.246c.938%200%201.817.214%202.59.69a4.47%204.47%200%200%201%201.67%201.743v-.98a1.255%201.255%200%200%201%201.256-1.256h1.777c.233%200%20.451.064.639.174a3.4%203.4%200%200%201%201.567-.372c.346%200%20.861.02%201.285.232a1.25%201.25%200%200%201%20.689%201.004%204.7%204.7%200%200%201%20.853-.588c.795-.44%201.675-.647%202.61-.647%201.385%200%202.65.39%203.525%201.396.836.938%201.168%202.173%201.168%203.528q-.001.515-.056%201.051a1.255%201.255%200%200%201-.947%201.09l.408.952a1.255%201.255%200%200%201-.477%201.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06%200-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.8%205.8%200%200%201-.548-2.512q0-.429.053-.843a1.3%201.3%200%200%201-.333-.086l-.166-.004c-.223%200-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255%201.255%200%200%201-1.256%201.256h-1.777a1.255%201.255%200%200%201-1.256-1.256V15.69l-.032.057a4.8%204.8%200%200%201-1.86%201.833%205.04%205.04%200%200%201-2.484.634%204.5%204.5%200%200%201-1.935-.424%201.25%201.25%200%200%201-.764.258h-1.71a1.255%201.255%200%200%201-1.256-1.255V7.687a2.4%202.4%200%200%201-.428.625c.253.23.412.561.412.93v7.553a1.255%201.255%200%200%201-1.256%201.255h-1.843a1.25%201.25%200%200%201-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255%201.255%200%200%201-1.256-1.255v-1.251l-.061.117a4.7%204.7%200%200%201-1.782%201.884%204.77%204.77%200%200%201-2.485.67%205.6%205.6%200%200%201-1.485-.188l.009%202.764a1.255%201.255%200%200%201-1.255%201.259h-1.729a1.255%201.255%200%200%201-1.255-1.255v-3.537a1.255%201.255%200%200%201-1.167.793h-1.679a1.25%201.25%200%200%201-.77-.263%204.5%204.5%200%200%201-1.945.429c-.885%200-1.724-.21-2.495-.632l-.017-.01a5%205%200%200%201-1.081-.836%201.255%201.255%200%200%201-1.254%201.312h-1.81a1.255%201.255%200%200%201-1.228-.99l-.782-3.625-2.044%203.939a1.25%201.25%200%200%201-1.115.676h-.098a1.25%201.25%200%200%201-1.116-.68l-2.061-3.994zM35.92%2016.63l.207-.114.223-.15q.493-.356.735-.785l.061-.118.033%201.332h1.678V9.242h-1.694l-.033%201.267q-.133-.329-.526-.658l-.032-.028a3.2%203.2%200%200%200-.668-.428l-.27-.12a3.3%203.3%200%200%200-1.235-.23q-1.136-.001-1.974.493a3.36%203.36%200%200%200-1.3%201.382q-.445.89-.444%202.074%200%201.2.51%202.107a3.8%203.8%200%200%200%201.382%201.381%203.9%203.9%200%200%200%201.893.477q.795%200%201.455-.33zm-2.789-5.38q-.576.675-.575%201.762%200%201.102.559%201.794.576.675%201.645.675a2.25%202.25%200%200%200%20.934-.19%202.2%202.2%200%200%200%20.468-.29l.178-.161a2.2%202.2%200%200%200%20.397-.561q.244-.5.244-1.15v-.115q0-.708-.296-1.267l-.043-.077a2.2%202.2%200%200%200-.633-.709l-.13-.086-.047-.028a2.1%202.1%200%200%200-1.073-.285q-1.052%200-1.629.692zm2.316%202.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.96.96%200%200%200-.353-.389.85.85%200%200%200-.464-.127c-.4%200-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945%200%20.506.122.801.27.99.097.11.266.224.68.224.303%200%20.504-.09.687-.269zm7.545%201.705a2.6%202.6%200%200%200%20.331.423q.319.33.755.548l.173.074q.65.255%201.49.255%201.02%200%201.844-.493a3.45%203.45%200%200%200%201.316-1.4q.493-.904.493-2.089%200-1.909-.988-2.913-.988-1.02-2.584-1.02-.898%200-1.575.347a3%203%200%200%200-.415.262l-.199.166a3.4%203.4%200%200%200-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138q.206.29.48.5l.155.11.053.034q.51.296%201.119.297%201.07%200%201.645-.675.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.435%200-.835.16a2%202%200%200%200-.284.136%202%202%200%200%200-.363.254%202.2%202.2%200%200%200-.46.569l-.082.162a2.6%202.6%200%200%200-.213%201.072v.115q0%20.707.296%201.267l.135.211zm.964-.818a1.1%201.1%200%200%200%20.367.385.94.94%200%200%200%20.476.118c.423%200%20.59-.117.687-.23.159-.194.28-.478.28-.95%200-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a1%201%200%200%200-.503.135l-.012.007a.86.86%200%200%200-.335.343c-.073.133-.132.324-.132.614v.115a1.4%201.4%200%200%200%20.14.66zm15.7-6.222q.347-.346.346-.856a1.05%201.05%200%200%200-.345-.79%201.18%201.18%200%200%200-.84-.329q-.51%200-.855.33a1.05%201.05%200%200%200-.346.79q0%20.51.346.855.345.346.856.346.51%200%20.839-.346zm4.337%209.314.033-1.332q.191.403.59.747l.098.081a4%204%200%200%200%20.316.224l.223.122a3.2%203.2%200%200%200%201.44.322%203.8%203.8%200%200%200%201.875-.477%203.5%203.5%200%200%200%201.382-1.366q.527-.89.526-2.09%200-1.184-.444-2.073a3.24%203.24%200%200%200-1.283-1.399q-.823-.51-1.942-.51a3.5%203.5%200%200%200-1.527.344l-.086.043-.165.09a3%203%200%200%200-.33.214q-.432.315-.656.707a2%202%200%200%200-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.5%202.5%200%200%200%20.566.7q.117.098.245.18l.144.08a2.1%202.1%200%200%200%20.975.232q1.07%200%201.645-.675.576-.69.576-1.778%200-1.102-.576-1.777-.56-.691-1.645-.692a2.2%202.2%200%200%200-1.015.235q-.22.113-.415.282l-.15.142a2.1%202.1%200%200%200-.42.594q-.223.479-.223%201.1v.115q0%20.705.293%201.26zm2.616-.293c.157-.191.28-.479.28-.967%200-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.87.87%200%200%200-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0%20.285.057.499.144.669a1.1%201.1%200%200%200%20.367.405c.137.082.28.123.455.123.423%200%20.59-.118.686-.23zm8.266-3.013q.345-.13.724-.14l.069-.002q.493%200%20.642.099l.247-1.794q-.196-.099-.717-.099a2.3%202.3%200%200%200-.545.063%202%202%200%200%200-.411.148%202.2%202.2%200%200%200-.4.249%202.5%202.5%200%200%200-.485.499%202.7%202.7%200%200%200-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884q0-.546.159-.943a1.5%201.5%200%200%201%20.466-.636%202.5%202.5%200%200%201%20.399-.253%202%202%200%200%201%20.224-.099zm9.784%202.656.05-.922q0-1.743-.856-2.698-.838-.97-2.584-.97-1.119-.001-2.007.493a3.46%203.46%200%200%200-1.4%201.382q-.493.906-.493%202.106%200%201.07.428%201.975.428.89%201.332%201.432.906.526%202.255.526.973%200%201.668-.185l.044-.012.135-.04q.613-.184.984-.421l-.542-1.267q-.3.162-.642.274l-.297.087q-.51.131-1.3.131-.954%200-1.497-.444a1.6%201.6%200%200%201-.192-.193q-.366-.44-.512-1.234l-.004-.021zm-5.427-1.256-.003.022h3.752v-.138q-.011-.727-.288-1.118a1%201%200%200%200-.156-.176q-.46-.428-1.316-.428-.986%200-1.494.604-.379.45-.494%201.234zm-27.053%202.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z%22%2F%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22m19.63%2011.151-.757-1.71-.345%201.71-1.12%205.644h-1.827L18.083%204.7h.197l3.325%206.533.988%202.19.988-2.19L26.839%204.7h.181l2.6%2012.095h-1.81l-1.218-5.644-.362-1.71-.658%201.71-2.93%205.644h-.098l-2.913-5.644zm14.836%205.81q-1.02%200-1.893-.478a3.8%203.8%200%200%201-1.381-1.382q-.51-.906-.51-2.106%200-1.185.444-2.074a3.36%203.36%200%200%201%201.3-1.382q.839-.494%201.974-.494a3.3%203.3%200%200%201%201.234.231%203.3%203.3%200%200%201%20.97.575q.396.33.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332q-.279.593-1.02%201.053a3.17%203.17%200%200%201-1.662.444zm.296-1.482q.938%200%201.58-.642.642-.66.642-1.711v-.115q0-.708-.296-1.267a2.2%202.2%200%200%200-.807-.872%202.1%202.1%200%200%200-1.119-.313q-1.053%200-1.629.692-.575.675-.575%201.76%200%201.103.559%201.795.577.675%201.645.675zm6.521-6.237h1.711v1.4q.906-1.597%202.83-1.597%201.596%200%202.584%201.02.988%201.005.988%202.914%200%201.185-.493%202.09a3.46%203.46%200%200%201-1.316%201.399%203.5%203.5%200%200%201-1.844.493q-.954%200-1.662-.329a2.67%202.67%200%200%201-1.086-.97l.017%205.134h-1.728zm4.048%206.22q1.07%200%201.645-.674.577-.69.576-1.762%200-1.119-.576-1.777-.558-.675-1.645-.675-.592%200-1.12.296-.51.28-.822.823-.296.527-.296%201.234v.115q0%20.708.296%201.267.313.543.823.855.51.296%201.119.297z%22%2F%3E%3Cpath%20fill%3D%22%23e1e3e9%22%20d%3D%22M51.325%204.7h1.86v10.45h3.473v1.646h-5.333zm7.12%204.542h1.843v7.553h-1.843zm.905-1.415a1.16%201.16%200%200%201-.856-.346%201.17%201.17%200%200%201-.346-.856%201.05%201.05%200%200%201%20.346-.79q.346-.329.856-.329.494%200%20.839.33a1.05%201.05%200%200%201%20.345.79%201.16%201.16%200%200%201-.345.855q-.33.346-.84.346zm7.875%209.133a3.17%203.17%200%200%201-1.662-.444q-.723-.46-1.004-1.053l-.033%201.332h-1.71V4.701h1.743v4.657l-.082%201.283q.279-.658%201.086-1.119a3.5%203.5%200%200%201%201.778-.477q1.119%200%201.942.51a3.24%203.24%200%200%201%201.283%201.4q.445.888.444%202.072%200%201.201-.526%202.09a3.5%203.5%200%200%201-1.382%201.366%203.8%203.8%200%200%201-1.876.477zm-.296-1.481q1.069%200%201.645-.675.577-.69.577-1.778%200-1.102-.577-1.776-.56-.691-1.645-.692a2.12%202.12%200%200%200-1.58.659q-.642.641-.642%201.694v.115q0%20.71.296%201.267a2.4%202.4%200%200%200%20.807.872%202.1%202.1%200%200%200%201.119.313zm5.927-6.237h1.777v1.481q.263-.757.856-1.217a2.14%202.14%200%200%201%201.349-.46q.527%200%20.724.098l-.247%201.794q-.149-.099-.642-.099-.774%200-1.416.494-.626.493-.626%201.58v3.883h-1.777V9.242zm9.534%207.718q-1.35%200-2.255-.526-.904-.543-1.332-1.432a4.6%204.6%200%200%201-.428-1.975q0-1.2.493-2.106a3.46%203.46%200%200%201%201.4-1.382q.889-.495%202.007-.494%201.744%200%202.584.97.855.956.856%202.7%200%20.444-.05.92h-5.43q.18%201.005.708%201.45.542.443%201.497.443.79%200%201.3-.131a4%204%200%200%200%20.938-.362l.542%201.267q-.411.263-1.119.46-.708.198-1.711.197zm1.596-4.558q.016-1.02-.444-1.432-.46-.428-1.316-.428-1.728%200-1.991%201.86z%22%2F%3E%3Cpath%20d%3D%22M5.074%2015.948a.484.657%200%200%200-.486.659v1.84a.484.657%200%200%200%20.486.659h4.101a.484.657%200%200%200%20.486-.659v-1.84a.484.657%200%200%200-.486-.659zm3.56%201.16H5.617v.838h3.017z%22%20style%3D%22fill%3A%23fff%3Bfill-rule%3Aevenodd%3Bstroke-width%3A1.03600001%22%2F%3E%3Cg%20style%3D%22stroke-width%3A1.12603545%22%3E%3Cpath%20d%3D%22M-9.408-1.416c-3.833-.025-7.056%202.912-7.08%206.615-.02%203.08%201.653%204.832%203.107%206.268.903.892%201.721%201.74%202.32%202.902l-.525-.004c-.543-.003-.992.304-1.24.639a1.87%201.87%200%200%200-.362%201.121l-.011%201.877c-.003.402.104.787.347%201.125.244.338.688.653%201.23.656l4.142.028c.542.003.99-.306%201.238-.641a1.87%201.87%200%200%200%20.363-1.121l.012-1.875a1.87%201.87%200%200%200-.348-1.127c-.243-.338-.688-.653-1.23-.656l-.518-.004c.597-1.145%201.425-1.983%202.348-2.87%201.473-1.414%203.18-3.149%203.2-6.226-.016-3.59-2.923-6.684-6.993-6.707m-.006%201.1v.002c3.274.02%205.92%202.532%205.9%205.6-.017%202.706-1.39%204.026-2.863%205.44-1.034.994-2.118%202.033-2.814%203.633-.018.041-.052.055-.075.065q-.013.004-.02.01a.34.34%200%200%201-.226.084.34.34%200%200%201-.224-.086l-.092-.077c-.699-1.615-1.768-2.669-2.781-3.67-1.454-1.435-2.797-2.762-2.78-5.478.02-3.067%202.7-5.545%205.975-5.523m-.02%202.826c-1.62-.01-2.944%201.315-2.955%202.96-.01%201.646%201.295%202.988%202.916%202.999h.002c1.621.01%202.943-1.316%202.953-2.961.011-1.646-1.294-2.988-2.916-2.998m-.005%201.1c1.017.006%201.829.83%201.822%201.89s-.83%201.874-1.848%201.867c-1.018-.006-1.829-.83-1.822-1.89s.83-1.874%201.848-1.868m-2.155%2011.857%204.14.025c.271.002.49.305.487.676l-.013%201.875c-.003.37-.224.67-.495.668l-4.14-.025c-.27-.002-.487-.306-.485-.676l.012-1.875c.003-.37.224-.67.494-.668%22%20style%3D%22color%3A%23000%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3A400%3Bfont-stretch%3Anormal%3Bfont-size%3Amedium%3Bline-height%3Anormal%3Bfont-family%3Asans-serif%3Bfont-variant-ligatures%3Anormal%3Bfont-variant-position%3Anormal%3Bfont-variant-caps%3Anormal%3Bfont-variant-numeric%3Anormal%3Bfont-variant-alternates%3Anormal%3Bfont-feature-settings%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Btext-decoration-line%3Anone%3Btext-decoration-style%3Asolid%3Btext-decoration-color%3A%23000%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bwriting-mode%3Alr-tb%3Bdirection%3Altr%3Btext-orientation%3Amixed%3Bdominant-baseline%3Aauto%3Bbaseline-shift%3Abaseline%3Btext-anchor%3Astart%3Bwhite-space%3Anormal%3Bshape-padding%3A0%3Bclip-rule%3Aevenodd%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Bvisibility%3Avisible%3Bopacity%3A1%3Bisolation%3Aauto%3Bmix-blend-mode%3Anormal%3Bcolor-interpolation%3AsRGB%3Bcolor-interpolation-filters%3AlinearRGB%3Bsolid-color%3A%23000%3Bsolid-opacity%3A1%3Bvector-effect%3Anone%3Bfill%3A%23000%3Bfill-opacity%3A.4%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-linecap%3Abutt%3Bstroke-linejoin%3Amiter%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-dashoffset%3A0%3Bstroke-opacity%3A1%3Bcolor-rendering%3Aauto%3Bimage-rendering%3Aauto%3Bshape-rendering%3Aauto%3Btext-rendering%3Aauto%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-9.415-.316C-12.69-.338-15.37%202.14-15.39%205.207c-.017%202.716%201.326%204.041%202.78%205.477%201.013%201%202.081%202.055%202.78%203.67l.092.076a.34.34%200%200%200%20.225.086.34.34%200%200%200%20.227-.083l.019-.01c.022-.009.057-.024.074-.064.697-1.6%201.78-2.64%202.814-3.634%201.473-1.414%202.847-2.733%202.864-5.44.02-3.067-2.627-5.58-5.901-5.601m-.057%208.784c1.621.011%202.944-1.315%202.955-2.96.01-1.646-1.295-2.988-2.916-2.999-1.622-.01-2.945%201.315-2.955%202.96s1.295%202.989%202.916%203%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23e1e3e9%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3Cpath%20d%3D%22M-11.594%2015.465c-.27-.002-.492.297-.494.668l-.012%201.876c-.003.371.214.673.485.675l4.14.027c.271.002.492-.298.495-.668l.012-1.877c.003-.37-.215-.672-.485-.674z%22%20style%3D%22clip-rule%3Aevenodd%3Bfill%3A%23fff%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%3Bstroke-width%3A2.47727823%3Bstroke-miterlimit%3A4%3Bstroke-dasharray%3Anone%3Bstroke-opacity%3A.4%22%20transform%3D%22translate(15.553%202.85)scale(.88807)%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{min-height:20px;padding:2px 24px 2px 0;margin:10px;position:relative;background-color:#fff;color:#000;border-radius:12px;box-sizing:content-box}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 8px 2px 28px;border-radius:12px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{display:none;cursor:pointer;position:absolute;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px;outline:none;top:0;right:0;border:0}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;list-style:none}.maplibregl-ctrl-attrib summary.maplibregl-ctrl-attrib-button::-webkit-details-marker{display:none}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{top:0;right:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{top:0;left:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (forced-colors:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22%23fff%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E")}}@media screen and (forced-colors:active) and (prefers-color-scheme:light){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;white-space:nowrap;border-color:#333;border-style:none solid solid;border-width:medium 2px 2px;padding:0 5px;color:#333;box-sizing:border-box}.maplibregl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}[dir=rtl] .maplibregl-popup-anchor-left{flex-direction:row-reverse}[dir=rtl] .maplibregl-popup-anchor-right{flex-direction:row}[dir=rtl] .maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-start}[dir=rtl] .maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-end}[dir=rtl] .maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-start}.maplibregl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.maplibregl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.maplibregl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:15px 10px;pointer-events:auto}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{position:absolute;top:0;left:0;will-change:transform;transition:opacity .2s}.maplibregl-marker-draggable{cursor:grab}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.maplibregl-user-location-dot:before{content:"";position:absolute;animation:maplibregl-user-location-dot-pulse 2s infinite}.maplibregl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px rgba(0,0,0,.35)}@media (prefers-reduced-motion:reduce){.maplibregl-user-location-dot:before{animation:none}}@keyframes maplibregl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:#1da1f233;width:1px;height:1px;border-radius:100%}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}.maplibregl-cooperative-gesture-screen{background:rgba(0,0,0,.4);position:absolute;inset:0;display:flex;justify-content:center;align-items:center;color:#fff;padding:1rem;font-size:1.4em;line-height:1.2;opacity:0;pointer-events:none;transition:opacity 1s ease 1s;z-index:99999}.maplibregl-cooperative-gesture-screen.maplibregl-show{opacity:1;transition:opacity .05s}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:none}@media (hover:none),(pointer:coarse){.maplibregl-cooperative-gesture-screen .maplibregl-desktop-message{display:none}.maplibregl-cooperative-gesture-screen .maplibregl-mobile-message{display:block}}.maplibregl-pseudo-fullscreen{position:fixed!important;width:100%!important;height:100%!important;top:0!important;left:0!important;z-index:99999}',document.head.appendChild(e)}})()}}),Ma=de({"src/registry.js"(e){"use strict";var r=Xo(),t=gw(),i=fE(),a=Ty().addStyleRule,o=fn(),s=ri(),l=l1(),n=o.extendFlat,u=o.extendDeepAll;e.modules={},e.allCategories={},e.allTypes=[],e.subplotsRegistry={},e.componentsRegistry={},e.layoutArrayContainers=[],e.layoutArrayRegexes=[],e.traceLayoutAttributes={},e.localeRegistry={},e.apiMethodRegistry={},e.collectableSubplotTypes=null,e.register=function(v){if(e.collectableSubplotTypes=null,v)v&&!Array.isArray(v)&&(v=[v]);else throw new Error("No argument passed to Plotly.register.");for(var x=0;x<v.length;x++){var S=v[x];if(!S)throw new Error("Invalid module was attempted to be registered!");switch(S.moduleType){case"trace":c(S);break;case"component":h(S);break;case"locale":d(S);break;case"apiMethod":var M=S.name;e.apiMethodRegistry[M]=S.fn;break;default:throw new Error("Invalid module was attempted to be registered!")}}},e.getModule=function(_){var v=e.modules[y(_)];return v?v._module:!1},e.traceIs=function(_,v){if(_=y(_),_==="various")return!1;var x=e.modules[_];return x||(_&&r.log("Unrecognized trace type "+_+"."),x=e.modules[s.type.dflt]),!!x.categories[v]},e.getComponentMethod=function(_,v){var x=e.componentsRegistry[_];return x&&x[v]||t},e.call=function(){var _=arguments[0],v=[].slice.call(arguments,1);return e.apiMethodRegistry[_].apply(null,v)};function c(_){var v=_.name,x=_.categories,S=_.meta;if(e.modules[v]){r.log("Type "+v+" already registered");return}e.subplotsRegistry[_.basePlotModule.name]||f(_.basePlotModule);for(var M={},C=0;C<x.length;C++)M[x[C]]=!0,e.allCategories[x[C]]=!0;e.modules[v]={_module:_,categories:M},S&&Object.keys(S).length&&(e.modules[v].meta=S),e.allTypes.push(v);for(var w in e.componentsRegistry)g(w,v);_.layoutAttributes&&n(e.traceLayoutAttributes,_.layoutAttributes);var k=_.basePlotModule,A=k.name;A==="map"&&$U(),(A==="geo"||A==="map")&&window.PlotlyGeoAssets===void 0&&(window.PlotlyGeoAssets={topojson:{}})}function f(_){var v=_.name;if(e.subplotsRegistry[v]){r.log("Plot type "+v+" already registered.");return}p(_),e.subplotsRegistry[v]=_;for(var x in e.componentsRegistry)m(x,_.name)}function h(_){if(typeof _.name!="string")throw new Error("Component module *name* must be a string.");var v=_.name;e.componentsRegistry[v]=_,_.layoutAttributes&&(_.layoutAttributes._isLinkedToArray&&i(e.layoutArrayContainers,v),p(_));for(var x in e.modules)g(v,x);for(var S in e.subplotsRegistry)m(v,S);_.schema&&_.schema.layout&&u(l,_.schema.layout)}function d(_){var v=_.name,x=v.split("-")[0],S=_.dictionary,M=_.format,C=S&&Object.keys(S).length,w=M&&Object.keys(M).length,k=e.localeRegistry,A=k[v];if(A||(k[v]=A={}),x!==v){var b=k[x];b||(k[x]=b={}),C&&b.dictionary===A.dictionary&&(b.dictionary=S),w&&b.format===A.format&&(b.format=M)}C&&(A.dictionary=S),w&&(A.format=M)}function p(_){if(_.layoutAttributes){var v=_.layoutAttributes._arrayAttrRegexps;if(v)for(var x=0;x<v.length;x++)i(e.layoutArrayRegexes,v[x])}}function g(_,v){var x=e.componentsRegistry[_].schema;if(!(!x||!x.traces)){var S=x.traces[v];S&&u(e.modules[v]._module.attributes,S)}}function m(_,v){var x=e.componentsRegistry[_].schema;if(!(!x||!x.subplots)){var S=e.subplotsRegistry[v],M=S.layoutAttributes,C=S.attr==="subplot"?S.name:S.attr;Array.isArray(C)&&(C=C[0]);var w=x.subplots[C];M&&w&&u(M,w)}}function y(_){return typeof _=="object"&&(_=_.type),_}}}),WU=de({"src/lib/dates.js"(e){"use strict";var r=eo().timeFormat,t=da(),i=Xo(),a=(u0(),ti(Tp)).mod,o=cn(),s=o.BADNUM,l=o.ONEDAY,n=o.ONEHOUR,u=o.ONEMIN,c=o.ONESEC,f=o.EPOCHJD,h=Ma(),d=eo().utcFormat,p=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,g=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d(:?\d\d)?)?)?)?)?)?\s*$/m,m=new Date().getFullYear()-70;function y(P){return P&&h.componentsRegistry.calendars&&typeof P=="string"&&P!=="gregorian"}e.dateTick0=function(P,z){var I=_(P,!!z);if(z<2)return I;var L=e.dateTime2ms(I,P);return L+=l*(z-1),e.ms2DateTime(L,0,P)};function _(P,z){return y(P)?z?h.getComponentMethod("calendars","CANONICAL_SUNDAY")[P]:h.getComponentMethod("calendars","CANONICAL_TICK")[P]:z?"2000-01-02":"2000-01-01"}e.dfltRange=function(P){return y(P)?h.getComponentMethod("calendars","DFLTRANGE")[P]:["2000-01-01","2001-01-01"]},e.isJSDate=function(P){return typeof P=="object"&&P!==null&&typeof P.getTime=="function"};var v,x;e.dateTime2ms=function(P,z){if(e.isJSDate(P)){var I=P.getTimezoneOffset()*u,L=(P.getUTCMinutes()-P.getMinutes())*u+(P.getUTCSeconds()-P.getSeconds())*c+(P.getUTCMilliseconds()-P.getMilliseconds());if(L){var B=3*u;I=I-B/2+a(L-I+B/2,B)}return P=Number(P)-I,P>=v&&P<=x?P:s}if(typeof P!="string"&&typeof P!="number")return s;P=String(P);var O=y(z),G=P.charAt(0);O&&(G==="G"||G==="g")&&(P=P.slice(1),z="");var W=O&&z.slice(0,7)==="chinese",X=P.match(W?g:p);if(!X)return s;var Z=X[1],J=X[3]||"1",N=Number(X[5]||1),H=Number(X[7]||0),$=Number(X[9]||0),U=Number(X[11]||0);if(O){if(Z.length===2)return s;Z=Number(Z);var V;try{var j=h.getComponentMethod("calendars","getCal")(z);if(W){var q=J.charAt(J.length-1)==="i";J=parseInt(J,10),V=j.newDate(Z,j.toMonthIndex(Z,J,q),N)}else V=j.newDate(Z,Number(J),N)}catch{return s}return V?(V.toJD()-f)*l+H*n+$*u+U*c:s}Z.length===2?Z=(Number(Z)+2e3-m)%100+m:Z=Number(Z),J-=1;var Y=new Date(Date.UTC(2e3,J,N,H,$));return Y.setUTCFullYear(Z),Y.getUTCMonth()!==J||Y.getUTCDate()!==N?s:Y.getTime()+U*c},v=e.MIN_MS=e.dateTime2ms("-9999"),x=e.MAX_MS=e.dateTime2ms("9999-12-31 23:59:59.9999"),e.isDateTime=function(P,z){return e.dateTime2ms(P,z)!==s};function S(P,z){return String(P+Math.pow(10,z)).slice(1)}var M=90*l,C=3*n,w=5*u;e.ms2DateTime=function(P,z,I){if(typeof P!="number"||!(P>=v&&P<=x))return s;z||(z=0);var L=Math.floor(a(P+.05,1)*10),B=Math.round(P-L/10),O,G,W,X,Z,J;if(y(I)){var N=Math.floor(B/l)+f,H=Math.floor(a(P,l));try{O=h.getComponentMethod("calendars","getCal")(I).fromJD(N).formatDate("yyyy-mm-dd")}catch{O=d("G%Y-%m-%d")(new Date(B))}if(O.charAt(0)==="-")for(;O.length<11;)O="-0"+O.slice(1);else for(;O.length<10;)O="0"+O;G=z<M?Math.floor(H/n):0,W=z<M?Math.floor(H%n/u):0,X=z<C?Math.floor(H%u/c):0,Z=z<w?H%c*10+L:0}else J=new Date(B),O=d("%Y-%m-%d")(J),G=z<M?J.getUTCHours():0,W=z<M?J.getUTCMinutes():0,X=z<C?J.getUTCSeconds():0,Z=z<w?J.getUTCMilliseconds()*10+L:0;return k(O,G,W,X,Z)},e.ms2DateTimeLocal=function(P){if(!(P>=v+l&&P<=x-l))return s;var z=Math.floor(a(P+.05,1)*10),I=new Date(Math.round(P-z/10)),L=r("%Y-%m-%d")(I),B=I.getHours(),O=I.getMinutes(),G=I.getSeconds(),W=I.getUTCMilliseconds()*10+z;return k(L,B,O,G,W)};function k(P,z,I,L,B){if((z||I||L||B)&&(P+=" "+S(z,2)+":"+S(I,2),(L||B)&&(P+=":"+S(L,2),B))){for(var O=4;B%10===0;)O-=1,B/=10;P+="."+S(B,O)}return P}e.cleanDate=function(P,z,I){if(P===s)return z;if(e.isJSDate(P)||typeof P=="number"&&isFinite(P)){if(y(I))return i.error("JS Dates and milliseconds are incompatible with world calendars",P),z;if(P=e.ms2DateTimeLocal(+P),!P&&z!==void 0)return z}else if(!e.isDateTime(P,I))return i.error("unrecognized date",P),z;return P};var A=/%\d?f/g,b=/%h/g,E={1:"1",2:"1",3:"2",4:"2"};function T(P,z,I,L){P=P.replace(A,function(O){var G=Math.min(+O.charAt(1)||6,6),W=(z/1e3%1+2).toFixed(G).slice(2).replace(/0+$/,"")||"0";return W});var B=new Date(Math.floor(z+.05));if(P=P.replace(b,function(){return E[I("%q")(B)]}),y(L))try{P=h.getComponentMethod("calendars","worldCalFmt")(P,z,L)}catch{return"Invalid"}return I(P)(B)}var F=[59,59.9,59.99,59.999,59.9999];function D(P,z){var I=a(P+.05,l),L=S(Math.floor(I/n),2)+":"+S(a(Math.floor(I/u),60),2);if(z!=="M"){t(z)||(z=0);var B=Math.min(a(P/c,60),F[z]),O=(100+B).toFixed(z).slice(1);z>0&&(O=O.replace(/0+$/,"").replace(/[\.]$/,"")),L+=":"+O}return L}e.formatDate=function(P,z,I,L,B,O){if(B=y(B)&&B,!z)if(I==="y")z=O.year;else if(I==="m")z=O.month;else if(I==="d")z=O.dayMonth+`
+`+O.year;else return D(P,I)+`
+`+T(O.dayMonthYear,P,L,B);return T(z,P,L,B)};var R=3*l;e.incrementMonth=function(P,z,I){I=y(I)&&I;var L=a(P,l);if(P=Math.round(P-L),I)try{var B=Math.round(P/l)+f,O=h.getComponentMethod("calendars","getCal")(I),G=O.fromJD(B);return z%12?O.add(G,z,"m"):O.add(G,z/12,"y"),(G.toJD()-f)*l+L}catch{i.error("invalid ms "+P+" in calendar "+I)}var W=new Date(P+R);return W.setUTCMonth(W.getUTCMonth()+z)+L-R},e.findExactDates=function(P,z){for(var I=0,L=0,B=0,O=0,G,W,X=y(z)&&h.getComponentMethod("calendars","getCal")(z),Z=0;Z<P.length;Z++){if(W=P[Z],!t(W)){O++;continue}if(!(W%l))if(X)try{G=X.fromJD(W/l+f),G.day()===1?G.month()===1?I++:L++:B++}catch{}else G=new Date(W),G.getUTCDate()===1?G.getUTCMonth()===0?I++:L++:B++}L+=I,B+=L;var J=P.length-O;return{exactYears:I/J,exactMonths:L/J,exactDays:B/J}}}}),My=de({"src/lib/identity.js"(e,r){"use strict";r.exports=function(i){return i}}}),bw=de({"src/lib/search.js"(e){"use strict";var r=da(),t=Xo(),i=My(),a=cn().BADNUM,o=1e-9;e.findBin=function(c,f,h){if(r(f.start))return h?Math.ceil((c-f.start)/f.size-o)-1:Math.floor((c-f.start)/f.size+o);var d=0,p=f.length,g=0,m=p>1?(f[p-1]-f[0])/(p-1):1,y,_;for(m>=0?_=h?s:l:_=h?u:n,c+=m*o*(h?-1:1)*(m>=0?1:-1);d<p&&g++<100;)y=Math.floor((d+p)/2),_(f[y],c)?d=y+1:p=y;return g>90&&t.log("Long binary search..."),d-1};function s(c,f){return c<f}function l(c,f){return c<=f}function n(c,f){return c>f}function u(c,f){return c>=f}e.sorterAsc=function(c,f){return c-f},e.sorterDes=function(c,f){return f-c},e.distinctVals=function(c){var f=c.slice();f.sort(e.sorterAsc);var h;for(h=f.length-1;h>-1&&f[h]===a;h--);for(var d=f[h]-f[0]||1,p=d/(h||1)/1e4,g=[],m,y=0;y<=h;y++){var _=f[y],v=_-m;m===void 0?(g.push(_),m=_):v>p&&(d=Math.min(d,v),g.push(_),m=_)}return{vals:g,minDiff:d}},e.roundUp=function(c,f,h){for(var d=0,p=f.length-1,g,m=0,y=h?0:1,_=h?1:0,v=h?Math.ceil:Math.floor;d<p&&m++<100;)g=v((d+p)/2),f[g]<=c?d=g+y:p=g-_;return f[d]},e.sort=function(c,f){for(var h=0,d=0,p=1;p<c.length;p++){var g=f(c[p],c[p-1]);if(g<0?h=1:g>0&&(d=1),h&&d)return c.sort(f)}return d?c:c.reverse()},e.findIndexOfMin=function(c,f){f=f||i;for(var h=1/0,d,p=0;p<c.length;p++){var g=f(c[p]);g<h&&(h=g,d=p)}return d}}}),c0={};Mr(c0,{default:()=>vE});function YU(e){return Object.keys(e).sort()}var vE,gv=Ir({"src/lib/sort_object_keys.ts"(){"use strict";vE=YU}}),XU=de({"src/lib/stats.js"(e){"use strict";var r=da(),t=Do().isArrayOrTypedArray;e.aggNums=function(i,a,o,s){var l,n;if((!s||s>o.length)&&(s=o.length),r(a)||(a=!1),t(o[0])){for(n=new Array(s),l=0;l<s;l++)n[l]=e.aggNums(i,a,o[l]);o=n}for(l=0;l<s;l++)r(a)?r(o[l])&&(a=i(+a,+o[l])):a=o[l];return a},e.len=function(i){return e.aggNums(function(a){return a+1},0,i)},e.mean=function(i,a){return a||(a=e.len(i)),e.aggNums(function(o,s){return o+s},0,i)/a},e.geometricMean=function(i,a){return a||(a=e.len(i)),Math.pow(e.aggNums(function(o,s){return o*s},1,i),1/a)},e.midRange=function(i){if(!(i===void 0||i.length===0))return(e.aggNums(Math.max,null,i)+e.aggNums(Math.min,null,i))/2},e.variance=function(i,a,o){return a||(a=e.len(i)),r(o)||(o=e.mean(i,a)),e.aggNums(function(s,l){return s+Math.pow(l-o,2)},0,i)/a},e.stdev=function(i,a,o){return Math.sqrt(e.variance(i,a,o))},e.median=function(i){var a=i.slice().sort();return e.interp(a,.5)},e.interp=function(i,a){if(!r(a))throw"n should be a finite number";if(a=a*i.length-.5,a<0)return i[0];if(a>i.length-1)return i[i.length-1];var o=a%1;return o*i[Math.ceil(a)]+(1-o)*i[Math.floor(a)]}}}),ZU=de({"src/lib/angles.js"(e,r){"use strict";var t=(u0(),ti(Tp)),i=t.mod,a=t.modHalf,o=Math.PI,s=2*o;function l(_){return _/180*o}function n(_){return _/o*180}function u(_){return Math.abs(_[1]-_[0])>s-1e-14}function c(_,v){return a(v-_,s)}function f(_,v){return Math.abs(c(_,v))}function h(_,v){if(u(v))return!0;var x,S;v[0]<v[1]?(x=v[0],S=v[1]):(x=v[1],S=v[0]),x=i(x,s),S=i(S,s),x>S&&(S+=s);var M=i(_,s),C=M+s;return M>=x&&M<=S||C>=x&&C<=S}function d(_,v,x,S){if(!h(v,S))return!1;var M,C;return x[0]<x[1]?(M=x[0],C=x[1]):(M=x[1],C=x[0]),_>=M&&_<=C}function p(_,v,x,S,M,C,w){M=M||0,C=C||0;var k=u([x,S]),A,b,E,T,F;k?(A=0,b=o,E=s):x<S?(A=x,E=S):(A=S,E=x),_<v?(T=_,F=v):(T=v,F=_);function D(I,L){return[I*Math.cos(L)+M,C-I*Math.sin(L)]}var R=Math.abs(E-A)<=o?0:1;function P(I,L,B){return"A"+[I,I]+" "+[0,R,B]+" "+D(I,L)}var z;return k?T===null?z="M"+D(F,A)+P(F,b,0)+P(F,E,0)+"Z":z="M"+D(T,A)+P(T,b,0)+P(T,E,0)+"ZM"+D(F,A)+P(F,b,1)+P(F,E,1)+"Z":T===null?(z="M"+D(F,A)+P(F,E,0),w&&(z+="L0,0Z")):z="M"+D(T,A)+"L"+D(F,A)+P(F,E,0)+"L"+D(T,E)+P(T,A,1)+"Z",z}function g(_,v,x,S,M){return p(null,_,v,x,S,M,0)}function m(_,v,x,S,M){return p(null,_,v,x,S,M,1)}function y(_,v,x,S,M,C){return p(_,v,x,S,M,C,1)}r.exports={deg2rad:l,rad2deg:n,angleDelta:c,angleDist:f,isFullCircle:u,isAngleInsideSector:h,isPtInsideSector:d,pathArc:g,pathSector:m,pathAnnulus:y}}}),KU=de({"src/lib/anchor_utils.js"(e){"use strict";e.isLeftAnchor=function(t){return t.xanchor==="left"||t.xanchor==="auto"&&t.x<=1/3},e.isCenterAnchor=function(t){return t.xanchor==="center"||t.xanchor==="auto"&&t.x>1/3&&t.x<2/3},e.isRightAnchor=function(t){return t.xanchor==="right"||t.xanchor==="auto"&&t.x>=2/3},e.isTopAnchor=function(t){return t.yanchor==="top"||t.yanchor==="auto"&&t.y>=2/3},e.isMiddleAnchor=function(t){return t.yanchor==="middle"||t.yanchor==="auto"&&t.y>1/3&&t.y<2/3},e.isBottomAnchor=function(t){return t.yanchor==="bottom"||t.yanchor==="auto"&&t.y<=1/3}}}),JU=de({"src/lib/geometry2d.js"(e){"use strict";var r=(u0(),ti(Tp)).mod;e.segmentsIntersect=t;function t(l,n,u,c,f,h,d,p){var g=u-l,m=f-l,y=d-f,_=c-n,v=h-n,x=p-h,S=g*x-y*_;if(S===0)return null;var M=(m*x-y*v)/S,C=(m*_-g*v)/S;return C<0||C>1||M<0||M>1?null:{x:l+g*M,y:n+_*M}}e.segmentDistance=function(n,u,c,f,h,d,p,g){if(t(n,u,c,f,h,d,p,g))return 0;var m=c-n,y=f-u,_=p-h,v=g-d,x=m*m+y*y,S=_*_+v*v,M=Math.min(i(m,y,x,h-n,d-u),i(m,y,x,p-n,g-u),i(_,v,S,n-h,u-d),i(_,v,S,c-h,f-d));return Math.sqrt(M)};function i(l,n,u,c,f){var h=c*l+f*n;if(h<0)return c*c+f*f;if(h>u){var d=c-l,p=f-n;return d*d+p*p}else{var g=c*n-f*l;return g*g/u}}var a,o,s;e.getTextLocation=function(n,u,c,f){if((n!==o||f!==s)&&(a={},o=n,s=f),a[c])return a[c];var h=n.getPointAtLength(r(c-f/2,u)),d=n.getPointAtLength(r(c+f/2,u)),p=Math.atan((d.y-h.y)/(d.x-h.x)),g=n.getPointAtLength(r(c,u)),m=(g.x*4+h.x+d.x)/6,y=(g.y*4+h.y+d.y)/6,_={x:m,y,theta:p};return a[c]=_,_},e.clearLocationCache=function(){o=null},e.getVisibleSegment=function(n,u,c){var f=u.left,h=u.right,d=u.top,p=u.bottom,g=0,m=n.getTotalLength(),y=m,_,v;function x(M){var C=n.getPointAtLength(M);M===0?_=C:M===m&&(v=C);var w=C.x<f?f-C.x:C.x>h?C.x-h:0,k=C.y<d?d-C.y:C.y>p?C.y-p:0;return Math.sqrt(w*w+k*k)}for(var S=x(g);S;){if(g+=S+c,g>y)return;S=x(g)}for(S=x(y);S;){if(y-=S+c,g>y)return;S=x(y)}return{min:g,max:y,len:y-g,total:m,isClosed:g===0&&y===m&&Math.abs(_.x-v.x)<.1&&Math.abs(_.y-v.y)<.1}},e.findPointOnPath=function(n,u,c,f){f=f||{};for(var h=f.pathLength||n.getTotalLength(),d=f.tolerance||.001,p=f.iterationLimit||30,g=n.getPointAtLength(0)[c]>n.getPointAtLength(h)[c]?-1:1,m=0,y=0,_=h,v,x,S;m<p;){if(v=(y+_)/2,x=n.getPointAtLength(v),S=x[c]-u,Math.abs(S)<d)return x;g*S>0?_=v:y=v,m++}return x}}}),ww=de({"src/lib/throttle.js"(e){"use strict";var r={};e.throttle=function(a,o,s){var l=r[a],n=Date.now();if(!l){for(var u in r)r[u].ts<n-6e4&&delete r[u];l=r[a]={ts:0,timer:null}}t(l);function c(){s(),l.ts=Date.now(),l.onDone&&(l.onDone(),l.onDone=null)}if(n>l.ts+o){c();return}l.timer=setTimeout(function(){c(),l.timer=null},o)},e.done=function(i){var a=r[i];return!a||!a.timer?Promise.resolve():new Promise(function(o){var s=a.onDone;a.onDone=function(){s&&s(),o(),a.onDone=null}})},e.clear=function(i){if(i)t(r[i]),delete r[i];else for(var a in r)e.clear(a)};function t(i){i&&i.timer!==null&&(clearTimeout(i.timer),i.timer=null)}}}),QU=de({"src/lib/clear_responsive.js"(e,r){"use strict";r.exports=function(i){i._responsiveChartHandler&&(window.removeEventListener("resize",i._responsiveChartHandler),delete i._responsiveChartHandler)}}}),eq=de({"node_modules/is-mobile/index.js"(e,r){"use strict";r.exports=o,r.exports.isMobile=o,r.exports.default=o;var t=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|redmi|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,i=/CrOS/,a=/android|ipad|playbook|silk/i;function o(s){s||(s={});let l=s.ua;if(!l&&typeof navigator<"u"&&(l=navigator.userAgent),l&&l.headers&&typeof l.headers["user-agent"]=="string"&&(l=l.headers["user-agent"]),typeof l!="string")return!1;let n=t.test(l)&&!i.test(l)||!!s.tablet&&a.test(l);return!n&&s.tablet&&s.featureDetect&&navigator&&navigator.maxTouchPoints>1&&l.indexOf("Macintosh")!==-1&&l.indexOf("Safari")!==-1&&(n=!0),n}}}),tq=de({"src/lib/preserve_drawing_buffer.js"(e,r){"use strict";var t=da(),i=eq();r.exports=function(s){var l;if(s&&s.hasOwnProperty("userAgent")?l=s.userAgent:l=a(),typeof l!="string")return!0;var n=i({ua:{headers:{"user-agent":l}},tablet:!0,featureDetect:!1});if(!n)for(var u=l.split(" "),c=1;c<u.length;c++){var f=u[c];if(f.indexOf("Safari")!==-1)for(var h=c-1;h>-1;h--){var d=u[h];if(d.slice(0,8)==="Version/"){var p=d.slice(8).split(".")[0];if(t(p)&&(p=+p),p>=13)return!0}}}return n};function a(){var o;return typeof navigator<"u"&&(o=navigator.userAgent),o&&o.headers&&typeof o.headers["user-agent"]=="string"&&(o=o.headers["user-agent"]),o}}}),rq=de({"src/lib/make_trace_groups.js"(e,r){"use strict";var t=Yr();r.exports=function(a,o,s){var l=a.selectAll("g."+s.replace(/\s/g,".")).data(o,function(u){return u[0].trace.uid});l.exit().remove(),l.enter().append("g").attr("class",s),l.order();var n=a.classed("rangeplot")?"nodeRangePlot3":"node3";return l.each(function(u){u[0][n]=t.select(this)}),l}}}),iq=de({"src/lib/localize.js"(e,r){"use strict";var t=Ma();r.exports=function(a,o){for(var s=a._context.locale,l=0;l<2;l++){for(var n=a._context.locales,u=0;u<2;u++){var c=(n[s]||{}).dictionary;if(c){var f=c[o];if(f)return f}n=t.localeRegistry}var h=s.split("-")[0];if(h===s)break;s=h}return o}}}),mE=de({"src/lib/filter_unique.js"(e,r){"use strict";r.exports=function(i){for(var a={},o=[],s=0,l=0;l<i.length;l++){var n=i[l];a[n]!==1&&(a[n]=1,o[s++]=n)}return o}}}),aq=de({"src/lib/filter_visible.js"(e,r){"use strict";r.exports=function(s){for(var l=a(s)?i:t,n=[],u=0;u<s.length;u++){var c=s[u];l(c)&&n.push(c)}return n};function t(o){return o.visible===!0}function i(o){var s=o[0].trace;return s.visible===!0&&s._length!==0}function a(o){return Array.isArray(o)&&Array.isArray(o[0])&&o[0][0]&&o[0][0].trace}}}),nq=de({"src/lib/increment.js"(e,r){"use strict";r.exports=function(i,a){if(!a)return i;var o=1/Math.abs(a),s=o>1?(o*i+o*a)/o:i+a,l=String(s).length;if(l>16){var n=String(a).length,u=String(i).length;if(l>=u+n){var c=parseFloat(s).toPrecision(12);c.indexOf("e+")===-1&&(s=+c)}}return s}}}),gE={};Mr(gE,{default:()=>bE});function oq(e){return typeof e=="string"&&(e=e.replace(xE,"")),(0,yE.default)(e)?Number(e):_E.BADNUM}var yE,_E,xE,bE,sq=Ir({"src/lib/clean_number.ts"(){"use strict";yE=Vr(da()),_E=Vr(cn()),xE=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g,bE=oq}}),lq=de({"src/lib/slugify.js"(e,r){"use strict";var t=/<[^>]*>/g,i=/[\p{S}\p{P}]/gu,a=/[\p{Cc}\p{Cf}\uFE00-\uFE0F\u20E3]/gu,o=/�/g,s=/\s+/g,l="-",n=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),u=new RegExp(n+"{3,}","g"),c=new RegExp(n+"$","g"),f=60;function h(d){return typeof d.toWellFormed=="function"?d.toWellFormed():new TextDecoder().decode(new TextEncoder().encode(d))}r.exports=function(p,g=f){var m=h(p??"").replace(o,"").replace(t," ").replace(i,y=>y===l?y:"").toLowerCase().trim().replace(s,l).replace(a,"").replace(u,l);return m.length<=g?m:Array.from(m).slice(0,g).join("").replace(c,"")}}}),Qt=de({"src/lib/index.js"(e,r){"use strict";var t=Yr(),i=eo().utcFormat,a=rs().format,o=da(),s=cn(),l=s.FP_SAFE,n=-l,u=s.BADNUM,c=r.exports={};c.adjustFormat=function(j){if(!j||/^\d[.]\df/.test(j)||/[.]\d%/.test(j))return j;if(j==="0.f")return"~f";if(/^\d%/.test(j))return"~%";if(/^\ds/.test(j))return"~s";var q=(j.match(/^[+\-( ]?/)||[""])[0],Y=j.slice(q.length);return!/^[~,.0$#]/.test(Y)&&/[&fps]/.test(Y)?q+"~"+Y:j};var f={};c.warnBadFormat=function(V){var j=String(V);f[j]||(f[j]=1,c.warn('encountered bad format: "'+j+'"'))},c.noFormat=function(V){return String(V)},c.numberFormat=function(V){var j;try{j=a(c.adjustFormat(V))}catch{return c.warnBadFormat(V),c.noFormat}return j},c.nestedProperty=sl(),c.keyedContainer=cu(),c.relativeAttr=ah(),c.isPlainObject=is(),c.toLogRange=o1(),c.relinkPrivateKeys=l0();var h=Do();c.isArrayBuffer=h.isArrayBuffer,c.isTypedArray=h.isTypedArray,c.isArrayOrTypedArray=h.isArrayOrTypedArray,c.isArray1D=h.isArray1D,c.ensureArray=h.ensureArray,c.concat=h.concat,c.maxRowLength=h.maxRowLength,c.minRowLength=h.minRowLength;var d=(u0(),ti(Tp));c.mod=d.mod,c.modHalf=d.modHalf;var p=vU();c.valObjectMeta=p.valObjectMeta,c.coerce=p.coerce,c.coerce2=p.coerce2,c.coerceFont=p.coerceFont,c.coercePattern=p.coercePattern,c.coerceHoverinfo=p.coerceHoverinfo,c.coerceSelectionMarkerOpacity=p.coerceSelectionMarkerOpacity,c.validate=p.validate;var g=WU();c.dateTime2ms=g.dateTime2ms,c.isDateTime=g.isDateTime,c.ms2DateTime=g.ms2DateTime,c.ms2DateTimeLocal=g.ms2DateTimeLocal,c.cleanDate=g.cleanDate,c.isJSDate=g.isJSDate,c.formatDate=g.formatDate,c.incrementMonth=g.incrementMonth,c.dateTick0=g.dateTick0,c.dfltRange=g.dfltRange,c.findExactDates=g.findExactDates,c.MIN_MS=g.MIN_MS,c.MAX_MS=g.MAX_MS;var m=bw();c.findBin=m.findBin,c.sorterAsc=m.sorterAsc,c.sorterDes=m.sorterDes,c.distinctVals=m.distinctVals,c.roundUp=m.roundUp,c.sort=m.sort,c.findIndexOfMin=m.findIndexOfMin,c.sortObjectKeys=(gv(),ti(c0)).default;var y=XU();c.aggNums=y.aggNums,c.len=y.len,c.mean=y.mean,c.geometricMean=y.geometricMean,c.median=y.median,c.midRange=y.midRange,c.variance=y.variance,c.stdev=y.stdev,c.interp=y.interp;var _=yw();c.init2dArray=_.init2dArray,c.transposeRagged=_.transposeRagged,c.dot=_.dot,c.translationMatrix=_.translationMatrix,c.rotationMatrix=_.rotationMatrix,c.rotationXYMatrix=_.rotationXYMatrix,c.apply3DTransform=_.apply3DTransform,c.apply2DTransform=_.apply2DTransform,c.apply2DTransform2=_.apply2DTransform2,c.convertCssMatrix=_.convertCssMatrix,c.inverseTransformMatrix=_.inverseTransformMatrix;var v=ZU();c.deg2rad=v.deg2rad,c.rad2deg=v.rad2deg,c.angleDelta=v.angleDelta,c.angleDist=v.angleDist,c.isFullCircle=v.isFullCircle,c.isAngleInsideSector=v.isAngleInsideSector,c.isPtInsideSector=v.isPtInsideSector,c.pathArc=v.pathArc,c.pathSector=v.pathSector,c.pathAnnulus=v.pathAnnulus;var x=KU();c.isLeftAnchor=x.isLeftAnchor,c.isCenterAnchor=x.isCenterAnchor,c.isRightAnchor=x.isRightAnchor,c.isTopAnchor=x.isTopAnchor,c.isMiddleAnchor=x.isMiddleAnchor,c.isBottomAnchor=x.isBottomAnchor;var S=JU();c.segmentsIntersect=S.segmentsIntersect,c.segmentDistance=S.segmentDistance,c.getTextLocation=S.getTextLocation,c.clearLocationCache=S.clearLocationCache,c.getVisibleSegment=S.getVisibleSegment,c.findPointOnPath=S.findPointOnPath;var M=fn();c.extendFlat=M.extendFlat,c.extendDeep=M.extendDeep,c.extendDeepAll=M.extendDeepAll,c.extendDeepNoArrays=M.extendDeepNoArrays;var C=Xo();c.log=C.log,c.warn=C.warn,c.error=C.error;var w=(s1(),ti(mv));c.counterRegex=w.counter;var k=ww();c.throttle=k.throttle,c.throttleDone=k.done,c.clearThrottle=k.clear;var A=Ty();c.getGraphDiv=A.getGraphDiv,c.isPlotDiv=A.isPlotDiv,c.removeElement=A.removeElement,c.addStyleRule=A.addStyleRule,c.addRelatedStyleRule=A.addRelatedStyleRule,c.deleteRelatedStyleRule=A.deleteRelatedStyleRule,c.setStyleOnHover=A.setStyleOnHover,c.getFullTransformMatrix=A.getFullTransformMatrix,c.getElementTransformMatrix=A.getElementTransformMatrix,c.getElementAndAncestors=A.getElementAndAncestors,c.equalDomRects=A.equalDomRects,c.clearResponsive=QU(),c.preserveDrawingBuffer=tq(),c.makeTraceGroups=rq(),c._=iq(),c.notifier=xn(),c.filterUnique=mE(),c.filterVisible=aq(),c.pushUnique=fE(),c.increment=nq(),c.cleanNumber=(sq(),ti(gE)).default,c.slugify=lq(),c.ensureNumber=function(j){return o(j)?(j=Number(j),j>l||j<n?u:j):u},c.isIndex=function(V,j){return j!==void 0&&V>=j?!1:o(V)&&V>=0&&V%1===0},c.noop=gw(),c.identity=My(),c.repeat=function(V,j){for(var q=new Array(j),Y=0;Y<j;Y++)q[Y]=V;return q},c.swapAttrs=function(V,j,q,Y){q||(q="x"),Y||(Y="y");for(var K=0;K<j.length;K++){var te=j[K],ne=c.nestedProperty(V,te.replace("?",q)),se=c.nestedProperty(V,te.replace("?",Y)),le=ne.get();ne.set(se.get()),se.set(le)}},c.raiseToTop=function(j){j.parentNode.appendChild(j)},c.cancelTransition=function(V){return V.transition().duration(0)},c.constrain=function(V,j,q){return j>q?Math.max(q,Math.min(j,V)):Math.max(j,Math.min(q,V))},c.bBoxIntersect=function(V,j,q){return q=q||0,V.left<=j.right+q&&j.left<=V.right+q&&V.top<=j.bottom+q&&j.top<=V.bottom+q},c.simpleMap=function(V,j,q,Y,K){for(var te=V.length,ne=new Array(te),se=0;se<te;se++)ne[se]=j(V[se],q,Y,K);return ne},c.randstr=function V(j,q,Y,K){if(Y||(Y=16),q===void 0&&(q=24),q<=0)return"0";var te=Math.log(Math.pow(2,q))/Math.log(Y),ne="",se,le,ce;for(se=2;te===1/0;se*=2)te=Math.log(Math.pow(2,q/se))/Math.log(Y)*se;var pe=te-Math.floor(te);for(se=0;se<Math.floor(te);se++)ce=Math.floor(Math.random()*Y).toString(Y),ne=ce+ne;pe&&(le=Math.pow(Y,pe),ce=Math.floor(Math.random()*le).toString(Y),ne=ce+ne);var xe=parseInt(ne,Y);return j&&j[ne]||xe!==1/0&&xe>=Math.pow(2,q)?K>10?(c.warn("randstr failed uniqueness"),ne):V(j,q,Y,(K||0)+1):ne},c.OptionControl=function(V,j){V||(V={}),j||(j="opt");var q={};return q.optionList=[],q._newoption=function(Y){Y[j]=V,q[Y.name]=Y,q.optionList.push(Y)},q["_"+j]=V,q},c.smooth=function(V,j){if(j=Math.round(j)||0,j<2)return V;var q=V.length,Y=2*q,K=2*j-1,te=new Array(K),ne=new Array(q),se,le,ce,pe;for(se=0;se<K;se++)te[se]=(1-Math.cos(Math.PI*(se+1)/j))/(2*j);for(se=0;se<q;se++){for(pe=0,le=0;le<K;le++)ce=se+le+1-j,ce<-q?ce-=Y*Math.round(ce/Y):ce>=Y&&(ce-=Y*Math.floor(ce/Y)),ce<0?ce=-1-ce:ce>=q&&(ce=Y-1-ce),pe+=V[ce]*te[le];ne[se]=pe}return ne},c.syncOrAsync=function(V,j,q){var Y,K;function te(){return c.syncOrAsync(V,j,q)}for(;V.length;)if(K=V.splice(0,1)[0],Y=K(j),Y&&Y.then)return Y.then(te);return q&&q(j)},c.stripTrailingSlash=function(V){return V.slice(-1)==="/"?V.slice(0,-1):V},c.noneOrAll=function(V,j,q){if(V){var Y=!1,K=!0,te,ne;for(te=0;te<q.length;te++)ne=V[q[te]],ne!=null?Y=!0:K=!1;if(Y&&!K)for(te=0;te<q.length;te++)V[q[te]]=j[q[te]]}},c.mergeArray=function(V,j,q,Y){var K=typeof Y=="function";if(c.isArrayOrTypedArray(V))for(var te=Math.min(V.length,j.length),ne=0;ne<te;ne++){var se=V[ne];j[ne][q]=K?Y(se):se}},c.mergeArrayCastPositive=function(V,j,q){return c.mergeArray(V,j,q,function(Y){var K=+Y;return isFinite(K)&&K>0?K:0})},c.fillArray=function(V,j,q,Y){if(Y=Y||c.identity,c.isArrayOrTypedArray(V))for(var K=0;K<j.length;K++)j[K][q]=Y(V[K])},c.castOption=function(V,j,q,Y){Y=Y||c.identity;var K=c.nestedProperty(V,q).get();return c.isArrayOrTypedArray(K)?Array.isArray(j)&&c.isArrayOrTypedArray(K[j[0]])?Y(K[j[0]][j[1]]):Y(K[j]):K},c.extractOption=function(V,j,q,Y){if(q in V)return V[q];var K=c.nestedProperty(j,Y).get();if(!Array.isArray(K))return K},c.tagSelected=function(V,j,q){var Y=j.selectedpoints;function K(ce){return ce!==void 0&&ce<V.length}for(var te=0;te<Y.length;te++){var ne=Y[te];if(c.isIndex(ne)||c.isArrayOrTypedArray(ne)&&c.isIndex(ne[0])&&c.isIndex(ne[1])){var se=ne,le=q?q[se]:se;K(le)&&(V[le].selected=1)}}},c.getTargetArray=function(V,j){var q=j.target;if(typeof q=="string"&&q){var Y=c.nestedProperty(V,q).get();return c.isArrayOrTypedArray(Y)?Y:!1}else if(c.isArrayOrTypedArray(q))return q;return!1};function b(V,j,q){var Y={};typeof j!="object"&&(j={});var K=q==="pieLike"?-1:3,te=Object.keys(V),ne,se,le;for(ne=0;ne<te.length;ne++)se=te[ne],le=V[se],!(se.charAt(0)==="_"||typeof le=="function")&&(se==="module"?Y[se]=le:Array.isArray(le)?se==="colorscale"||K===-1?Y[se]=le.slice():Y[se]=le.slice(0,K):c.isTypedArray(le)?K===-1?Y[se]=le.subarray():Y[se]=le.subarray(0,K):le&&typeof le=="object"?Y[se]=b(V[se],j[se],q):Y[se]=le);for(te=Object.keys(j),ne=0;ne<te.length;ne++)se=te[ne],le=j[se],(typeof le!="object"||!(se in Y)||typeof Y[se]!="object")&&(Y[se]=le);return Y}c.minExtend=b,c.titleCase=function(V){return V.charAt(0).toUpperCase()+V.slice(1)},c.containsAny=function(V,j){for(var q=0;q<j.length;q++)if(V.indexOf(j[q])!==-1)return!0;return!1};var E=/Version\/[\d\.]+.*Safari/;c.isSafari=function(){return E.test(window.navigator.userAgent)};var T=/iPad|iPhone|iPod/;c.isIOS=function(){return T.test(window.navigator.userAgent)};var F=/Macintosh.+AppleWebKit.+Gecko\)$/;c.isMacWKWebView=()=>F.test(window.navigator.userAgent);var D=/Firefox\/(\d+)\.\d+/;c.getFirefoxVersion=function(){var V=D.exec(window.navigator.userAgent);if(V&&V.length===2){var j=parseInt(V[1]);if(!isNaN(j))return j}return null},c.isD3Selection=function(V){return V instanceof t.selection},c.ensureSingle=function(V,j,q,Y){var K=V.select(j+(q?"."+q:""));if(K.size())return K;var te=V.append(j);return q&&te.classed(q,!0),Y&&te.call(Y),te},c.ensureSingleById=function(V,j,q,Y){var K=V.select(j+"#"+q);if(K.size())return K;var te=V.append(j).attr("id",q);return Y&&te.call(Y),te},c.objectFromPath=function(V,j){for(var q=V.split("."),Y,K=Y={},te=0;te<q.length;te++){var ne=q[te],se=null,le=q[te].match(/(.*)\[([0-9]+)\]/);le?(ne=le[1],se=le[2],Y=Y[ne]=[],te===q.length-1?Y[se]=j:Y[se]={},Y=Y[se]):(te===q.length-1?Y[ne]=j:Y[ne]={},Y=Y[ne])}return K};var R=/^([^\[\.]+)\.(.+)?/,P=/^([^\.]+)\[([0-9]+)\](\.)?(.+)?/;function z(V){return V.slice(0,2)==="__"}c.expandObjectPaths=function(V){var j,q,Y,K,te,ne,se;if(typeof V=="object"&&!Array.isArray(V)){for(q in V)if(V.hasOwnProperty(q))if(j=q.match(R)){if(K=V[q],Y=j[1],z(Y))continue;delete V[q],V[Y]=c.extendDeepNoArrays(V[Y]||{},c.objectFromPath(q,c.expandObjectPaths(K))[Y])}else if(j=q.match(P)){if(K=V[q],Y=j[1],z(Y))continue;if(te=parseInt(j[2]),delete V[q],V[Y]=V[Y]||[],j[3]===".")se=j[4],ne=V[Y][te]=V[Y][te]||{},c.extendDeepNoArrays(ne,c.objectFromPath(se,c.expandObjectPaths(K)));else{if(z(Y))continue;V[Y][te]=c.expandObjectPaths(K)}}else{if(z(q))continue;V[q]=c.expandObjectPaths(V[q])}}return V},c.numSeparate=function(V,j,q){if(q||(q=!1),typeof j!="string"||j.length===0)throw new Error("Separator string required for formatting!");typeof V=="number"&&(V=String(V));var Y=/(\d+)(\d{3})/,K=j.charAt(0),te=j.charAt(1),ne=V.split("."),se=ne[0],le=ne.length>1?K+ne[1]:"";if(te&&(ne.length>1||se.length>4||q))for(;Y.test(se);)se=se.replace(Y,"$1"+te+"$2");return se+le},c.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var I=/^\w*$/;c.templateString=function(V,j){var q={};return V.replace(c.TEMPLATE_STRING_REGEX,function(Y,K){var te;return I.test(K)?te=j[K]:(q[K]=q[K]||c.nestedProperty(j,K).get,te=q[K](!0)),te!==void 0?te:""})};var L={max:10,count:0,name:"hovertemplate"};c.hovertemplateString=V=>Z(ar(Ot({},V),{opts:L}));var B={max:10,count:0,name:"texttemplate"};c.texttemplateString=V=>Z(ar(Ot({},V),{opts:B}));var O=/^(\S+)([\*\/])(-?\d+(\.\d+)?)$/;function G(V){var j=V.match(O);return j?{key:j[1],op:j[2],number:Number(j[3])}:{key:V,op:null,number:null}}var W={max:10,count:0,name:"texttemplate",parseMultDiv:!0};c.texttemplateStringForShapes=V=>Z(ar(Ot({},V),{opts:W}));var X=/^[:|\|]/;function Z({data:V=[],locale:j,fallback:q,labels:Y={},opts:K,template:te}){return te.replace(c.TEMPLATE_STRING_REGEX,(ne,se,le)=>{let ce=["xother","yother"].includes(se),pe=["_xother","_yother"].includes(se),xe=["_xother_","_yother_"].includes(se),ye=["xother_","yother_"].includes(se),fe=ce||pe||ye||xe;(pe||xe)&&(se=se.substring(1)),(ye||xe)&&(se=se.substring(0,se.length-1));let ae=null,ee=null;if(K.parseMultDiv){var ie=G(se);se=ie.key,ae=ie.op,ee=ie.number}let Q;if(fe){if(Y[se]===void 0)return"";Q=Y[se]}else for(let Te of V)if(Te){if(Te.hasOwnProperty(se)){Q=Te[se];break}if(I.test(se)||(Q=c.nestedProperty(Te,se).get(!0)),Q!==void 0)break}if(Q===void 0){let{count:Te,max:je,name:Ve}=K,Ze=q===!1?ne:q;return Te<je&&c.warn([`Variable '${se}' in ${Ve} could not be found!`,"Please verify that the template is correct.",`Using value: '${Ze}'.`].join(" ")),Te===je&&c.warn(`Too many '${Ve}' warnings - additional warnings will be suppressed.`),K.count++,Ze}if(ae==="*"&&(Q*=ee),ae==="/"&&(Q/=ee),le){var ue;if(le[0]===":"&&(ue=j?j.numberFormat:c.numberFormat,Q!==""&&(Q=ue(le.replace(X,""))(Q))),le[0]==="|"){ue=j?j.timeFormat:i;var ge=c.dateTime2ms(Q);Q=c.formatDate(ge,le.replace(X,""),!1,ue)}}else{var Me=se+"Label";Y.hasOwnProperty(Me)&&(Q=Y[Me])}return fe&&(Q="("+Q+")",(pe||xe)&&(Q=" "+Q),(ye||xe)&&(Q=Q+" ")),Q})}var J=48,N=57;c.subplotSort=function(V,j){for(var q=Math.min(V.length,j.length)+1,Y=0,K=0,te=0;te<q;te++){var ne=V.charCodeAt(te)||0,se=j.charCodeAt(te)||0,le=ne>=J&&ne<=N,ce=se>=J&&se<=N;if(le&&(Y=10*Y+ne-J),ce&&(K=10*K+se-J),!le||!ce){if(Y!==K)return Y-K;if(ne!==se)return ne-se}}return K-Y};var H=2e9;c.seedPseudoRandom=function(){H=2e9},c.pseudoRandom=function(){var V=H;return H=(69069*H+1)%4294967296,Math.abs(H-V)<429496729?c.pseudoRandom():H/4294967296},c.fillText=function(V,j,q){var Y=Array.isArray(q)?function(ne){q.push(ne)}:function(ne){q.text=ne},K=c.extractOption(V,j,"htx","hovertext");if(c.isValidTextValue(K))return Y(K);var te=c.extractOption(V,j,"tx","text");if(c.isValidTextValue(te))return Y(te)},c.isValidTextValue=function(V){return V||V===0},c.formatPercent=function(V,j){j=j||0;for(var q=(Math.round(100*V*Math.pow(10,j))*Math.pow(.1,j)).toFixed(j)+"%",Y=0;Y<j;Y++)q.indexOf(".")!==-1&&(q=q.replace("0%","%"),q=q.replace(".%","%"));return q},c.isHidden=function(V){var j=window.getComputedStyle(V).display;return!j||j==="none"},c.strTranslate=function(V,j){return V||j?"translate("+V+","+j+")":""},c.strRotate=function(V){return V?"rotate("+V+")":""},c.strScale=function(V){return V!==1?"scale("+V+")":""},c.getTextTransform=function(V){var j=V.noCenter,q=V.textX,Y=V.textY,K=V.targetX,te=V.targetY,ne=V.anchorX||0,se=V.anchorY||0,le=V.rotate,ce=V.scale;return ce?ce>1&&(ce=1):ce=0,c.strTranslate(K-ce*(q+ne),te-ce*(Y+se))+c.strScale(ce)+(le?"rotate("+le+(j?"":" "+q+" "+Y)+")":"")},c.setTransormAndDisplay=function(V,j){V.attr("transform",c.getTextTransform(j)),V.style("display",j.scale?null:"none")},c.ensureUniformFontSize=function(V,j){var q=c.extendFlat({},j);return q.size=Math.max(j.size,V._fullLayout.uniformtext.minsize||0),q},c.join2=function(V,j,q){var Y=V.length;return Y>1?V.slice(0,-1).join(j)+q+V[Y-1]:V.join(j)},c.bigFont=function(V){return Math.round(1.2*V)};var $=c.getFirefoxVersion(),U=$!==null&&$<86;c.getPositionFromD3Event=function(){return U?[t.event.layerX,t.event.layerY]:[t.event.offsetX,t.event.offsetY]}}}),uq=de({"build/plotcss.js"(){"use strict";var e=Qt(),r={"X,X div":'direction:ltr;font-family:"Open Sans",verdana,arial,sans-serif;margin:0;padding:0;border:0;',"X input,X button":'font-family:"Open Sans",verdana,arial,sans-serif;',"X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;","X .ease-bg":"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;","X .modebar--hover>:not(.watermark)":"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X:focus-within .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-group a":"display:grid;place-content:center;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;border:none;background:rgba(0,0,0,0);","X .modebar-btn svg":"position:relative;","X .modebar-btn:focus-visible":"outline:1px solid #000;outline-offset:1px;border-radius:3px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":'content:"";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',"X [data-title]:after":"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .vertical [data-title]:before,X .vertical [data-title]:after":"top:0%;right:200%;","X .vertical [data-title]:before":"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;","X .plotly-cloud-dialog":'font-family:"Open Sans",verdana,arial,sans-serif;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1001;display:flex;align-items:center;justify-content:center;background-color:rgba(0,0,0,.4);',"X .plotly-cloud-dialog .plotly-cloud-dialog-box":"box-sizing:border-box;min-width:300px;max-width:420px;padding:20px 24px;background-color:#fff;border:1px solid #e0e2e5;border-radius:4px;box-shadow:0 4px 16px rgba(0,0,0,.25);font-size:13px;color:#2a3f5f;","X .plotly-cloud-dialog .plotly-cloud-dialog-title":"font-size:16px;font-weight:bold;margin-bottom:12px;","X .plotly-cloud-dialog .plotly-cloud-dialog-message":"line-height:1.5;overflow-wrap:break-word;word-wrap:break-word;","X .plotly-cloud-dialog .plotly-cloud-dialog-message--hostname":"font-weight:bold;text-decoration:underline;","X .plotly-cloud-dialog .plotly-cloud-dialog-message--account":"margin-top:16px;padding:8px;border-radius:3px;font-size:.9em;background-color:#edf1f8;","X .plotly-cloud-dialog .plotly-cloud-dialog-buttons":"display:flex;justify-content:flex-end;margin-top:20px;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn":"font-family:inherit;font-size:13px;padding:7px 16px;margin-left:8px;border-radius:3px;border:1px solid rgba(0,0,0,0);cursor:pointer;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn:focus-visible":"outline:2px solid #447adb;outline-offset:1px;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel":"background-color:#f3f3f3;margin-left:auto;color:#777;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--cancel:hover":"background-color:#e0e2e5;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm":"background-color:#447adb;color:#fff;","X .plotly-cloud-dialog .plotly-cloud-dialog-btn--confirm:hover":"background-color:#1d3b84;",Y:'font-family:"Open Sans",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',"Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;","Y .notifier-close":"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(i in r)t=i.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier"),e.addStyleRule(t,r[i]);var t,i}}),wE=de({"node_modules/is-browser/client.js"(e,r){r.exports=!0}}),TE=de({"node_modules/has-hover/index.js"(e,r){"use strict";var t=wE(),i;typeof window.matchMedia=="function"?i=!window.matchMedia("(hover: none)").matches:i=t,r.exports=i}}),yv=de({"node_modules/events/events.js"(e,r){"use strict";var t=typeof Reflect=="object"?Reflect:null,i=t&&typeof t.apply=="function"?t.apply:function(C,w,k){return Function.prototype.apply.call(C,w,k)},a;t&&typeof t.ownKeys=="function"?a=t.ownKeys:Object.getOwnPropertySymbols?a=function(C){return Object.getOwnPropertyNames(C).concat(Object.getOwnPropertySymbols(C))}:a=function(C){return Object.getOwnPropertyNames(C)};function o(M){console&&console.warn&&console.warn(M)}var s=Number.isNaN||function(C){return C!==C};function l(){l.init.call(this)}r.exports=l,r.exports.once=v,l.EventEmitter=l,l.prototype._events=void 0,l.prototype._eventsCount=0,l.prototype._maxListeners=void 0;var n=10;function u(M){if(typeof M!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof M)}Object.defineProperty(l,"defaultMaxListeners",{enumerable:!0,get:function(){return n},set:function(M){if(typeof M!="number"||M<0||s(M))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+M+".");n=M}}),l.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},l.prototype.setMaxListeners=function(C){if(typeof C!="number"||C<0||s(C))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+C+".");return this._maxListeners=C,this};function c(M){return M._maxListeners===void 0?l.defaultMaxListeners:M._maxListeners}l.prototype.getMaxListeners=function(){return c(this)},l.prototype.emit=function(C){for(var w=[],k=1;k<arguments.length;k++)w.push(arguments[k]);var A=C==="error",b=this._events;if(b!==void 0)A=A&&b.error===void 0;else if(!A)return!1;if(A){var E;if(w.length>0&&(E=w[0]),E instanceof Error)throw E;var T=new Error("Unhandled error."+(E?" ("+E.message+")":""));throw T.context=E,T}var F=b[C];if(F===void 0)return!1;if(typeof F=="function")i(F,this,w);else for(var D=F.length,R=m(F,D),k=0;k<D;++k)i(R[k],this,w);return!0};function f(M,C,w,k){var A,b,E;if(u(w),b=M._events,b===void 0?(b=M._events=Object.create(null),M._eventsCount=0):(b.newListener!==void 0&&(M.emit("newListener",C,w.listener?w.listener:w),b=M._events),E=b[C]),E===void 0)E=b[C]=w,++M._eventsCount;else if(typeof E=="function"?E=b[C]=k?[w,E]:[E,w]:k?E.unshift(w):E.push(w),A=c(M),A>0&&E.length>A&&!E.warned){E.warned=!0;var T=new Error("Possible EventEmitter memory leak detected. "+E.length+" "+String(C)+" listeners added. Use emitter.setMaxListeners() to increase limit");T.name="MaxListenersExceededWarning",T.emitter=M,T.type=C,T.count=E.length,o(T)}return M}l.prototype.addListener=function(C,w){return f(this,C,w,!1)},l.prototype.on=l.prototype.addListener,l.prototype.prependListener=function(C,w){return f(this,C,w,!0)};function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(M,C,w){var k={fired:!1,wrapFn:void 0,target:M,type:C,listener:w},A=h.bind(k);return A.listener=w,k.wrapFn=A,A}l.prototype.once=function(C,w){return u(w),this.on(C,d(this,C,w)),this},l.prototype.prependOnceListener=function(C,w){return u(w),this.prependListener(C,d(this,C,w)),this},l.prototype.removeListener=function(C,w){var k,A,b,E,T;if(u(w),A=this._events,A===void 0)return this;if(k=A[C],k===void 0)return this;if(k===w||k.listener===w)--this._eventsCount===0?this._events=Object.create(null):(delete A[C],A.removeListener&&this.emit("removeListener",C,k.listener||w));else if(typeof k!="function"){for(b=-1,E=k.length-1;E>=0;E--)if(k[E]===w||k[E].listener===w){T=k[E].listener,b=E;break}if(b<0)return this;b===0?k.shift():y(k,b),k.length===1&&(A[C]=k[0]),A.removeListener!==void 0&&this.emit("removeListener",C,T||w)}return this},l.prototype.off=l.prototype.removeListener,l.prototype.removeAllListeners=function(C){var w,k,A;if(k=this._events,k===void 0)return this;if(k.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):k[C]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete k[C]),this;if(arguments.length===0){var b=Object.keys(k),E;for(A=0;A<b.length;++A)E=b[A],E!=="removeListener"&&this.removeAllListeners(E);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(w=k[C],typeof w=="function")this.removeListener(C,w);else if(w!==void 0)for(A=w.length-1;A>=0;A--)this.removeListener(C,w[A]);return this};function p(M,C,w){var k=M._events;if(k===void 0)return[];var A=k[C];return A===void 0?[]:typeof A=="function"?w?[A.listener||A]:[A]:w?_(A):m(A,A.length)}l.prototype.listeners=function(C){return p(this,C,!0)},l.prototype.rawListeners=function(C){return p(this,C,!1)},l.listenerCount=function(M,C){return typeof M.listenerCount=="function"?M.listenerCount(C):g.call(M,C)},l.prototype.listenerCount=g;function g(M){var C=this._events;if(C!==void 0){var w=C[M];if(typeof w=="function")return 1;if(w!==void 0)return w.length}return 0}l.prototype.eventNames=function(){return this._eventsCount>0?a(this._events):[]};function m(M,C){for(var w=new Array(C),k=0;k<C;++k)w[k]=M[k];return w}function y(M,C){for(;C+1<M.length;C++)M[C]=M[C+1];M.pop()}function _(M){for(var C=new Array(M.length),w=0;w<C.length;++w)C[w]=M[w].listener||M[w];return C}function v(M,C){return new Promise(function(w,k){function A(E){M.removeListener(C,b),k(E)}function b(){typeof M.removeListener=="function"&&M.removeListener("error",A),w([].slice.call(arguments))}S(M,C,b,{once:!0}),C!=="error"&&x(M,A,{once:!0})})}function x(M,C,w){typeof M.on=="function"&&S(M,"error",C,w)}function S(M,C,w,k){if(typeof M.on=="function")k.once?M.once(C,w):M.on(C,w);else if(typeof M.addEventListener=="function")M.addEventListener(C,function A(b){k.once&&M.removeEventListener(C,A),w(b)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof M)}}}),u1=de({"src/lib/events.js"(e,r){"use strict";var t=yv().EventEmitter,i={init:function(a){if(a._ev instanceof t)return a;var o=new t,s=new t;return a._ev=o,a._internalEv=s,a.on=o.on.bind(o),a.once=o.once.bind(o),a.removeListener=o.removeListener.bind(o),a.removeAllListeners=o.removeAllListeners.bind(o),a._internalOn=s.on.bind(s),a._internalOnce=s.once.bind(s),a._removeInternalListener=s.removeListener.bind(s),a._removeAllInternalListeners=s.removeAllListeners.bind(s),a.emit=function(l,n){o.emit(l,n),s.emit(l,n)},typeof a.addEventListener=="function"&&a.addEventListener("wheel",()=>{},{passive:!0}),a},triggerHandler:function(a,o,s){var l,n=a._ev;if(!n)return;var u=n._events[o];if(!u)return;function c(h){if(h.listener){if(n.removeListener(o,h.listener),!h.fired)return h.fired=!0,h.listener.apply(n,[s])}else return h.apply(n,[s])}u=Array.isArray(u)?u:[u];var f;for(f=0;f<u.length-1;f++)c(u[f]);return l=c(u[f]),l},purge:function(a){return delete a._ev,delete a.on,delete a.once,delete a.removeListener,delete a.removeAllListeners,delete a.emit,delete a._ev,delete a._internalEv,delete a._internalOn,delete a._internalOnce,delete a._removeInternalListener,delete a._removeAllInternalListeners,a}};r.exports=i}}),cq=de({"src/lib/queue.js"(e,r){"use strict";var t=Qt(),i=Na().dfltConfig;function a(s,l){for(var n=[],u,c=0;c<l.length;c++)u=l[c],u===s?n[c]=u:typeof u=="object"?n[c]=Array.isArray(u)?t.extendDeep([],u):t.extendDeepAll({},u):n[c]=u;return n}var o={};o.add=function(s,l,n,u,c){var f,h;if(s.undoQueue=s.undoQueue||{index:0,queue:[],sequence:!1},h=s.undoQueue.index,s.autoplay){s.undoQueue.inSequence||(s.autoplay=!1);return}!s.undoQueue.sequence||s.undoQueue.beginSequence?(f={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},s.undoQueue.queue.splice(h,s.undoQueue.queue.length-h,f),s.undoQueue.index+=1):f=s.undoQueue.queue[h-1],s.undoQueue.beginSequence=!1,f&&(f.undo.calls.unshift(l),f.undo.args.unshift(n),f.redo.calls.push(u),f.redo.args.push(c)),s.undoQueue.queue.length>i.queueLength&&(s.undoQueue.queue.shift(),s.undoQueue.index--)},o.startSequence=function(s){s.undoQueue=s.undoQueue||{index:0,queue:[],sequence:!1},s.undoQueue.sequence=!0,s.undoQueue.beginSequence=!0},o.stopSequence=function(s){s.undoQueue=s.undoQueue||{index:0,queue:[],sequence:!1},s.undoQueue.sequence=!1,s.undoQueue.beginSequence=!1},o.undo=function(l){var n,u;if(!(l.undoQueue===void 0||isNaN(l.undoQueue.index)||l.undoQueue.index<=0)){for(l.undoQueue.index--,n=l.undoQueue.queue[l.undoQueue.index],l.undoQueue.inSequence=!0,u=0;u<n.undo.calls.length;u++)o.plotDo(l,n.undo.calls[u],n.undo.args[u]);l.undoQueue.inSequence=!1,l.autoplay=!1}},o.redo=function(l){var n,u;if(!(l.undoQueue===void 0||isNaN(l.undoQueue.index)||l.undoQueue.index>=l.undoQueue.queue.length)){for(n=l.undoQueue.queue[l.undoQueue.index],l.undoQueue.inSequence=!0,u=0;u<n.redo.calls.length;u++)o.plotDo(l,n.redo.calls[u],n.redo.args[u]);l.undoQueue.inSequence=!1,l.autoplay=!1,l.undoQueue.index++}},o.plotDo=function(s,l,n){s.autoplay=!0,n=a(s,n),l.apply(null,n)},r.exports=o}}),AE=de({"src/plots/frame_attributes.js"(e,r){"use strict";r.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}}}),c1=de({"src/plot_api/plot_schema.js"(e){"use strict";var r=Ma(),t=Qt(),i=ri(),a=l1(),o=AE(),s=Ay(),l=Na().configAttributes,n=Ps(),u=t.extendDeepAll,c=t.isPlainObject,f=t.isArrayOrTypedArray,h=t.nestedProperty,d=t.valObjectMeta,p="_isSubplotObj",g="_isLinkedToArray",m="_arrayAttrRegexps",y="_deprecated",_=[p,g,m,y];e.IS_SUBPLOT_OBJ=p,e.IS_LINKED_TO_ARRAY=g,e.DEPRECATED=y,e.UNDERSCORE_ATTRS=_,e.get=function(){var D={};return r.allTypes.forEach(function(R){D[R]=M(R)}),{defs:{valObjects:d,metaKeys:_.concat(["description","role","editType","impliedEdits"]),editType:{traces:n.traces,layout:n.layout},impliedEdits:{}},traces:D,layout:C(),frames:w(),animation:k(s),config:k(l)}},e.crawl=function(D,R,P,z){var I=P||0;z=z||"",Object.keys(D).forEach(function(L){var B=D[L];if(_.indexOf(L)===-1){var O=(z?z+".":"")+L;R(B,L,D,I,O),!e.isValObject(B)&&c(B)&&L!=="impliedEdits"&&e.crawl(B,R,I+1,O)}})},e.isValObject=function(D){return D&&D.valType!==void 0},e.findArrayAttributes=function(D){var R=[],P=[],z=[],I,L;function B(G,W,X,Z){P=P.slice(0,Z).concat([W]),z=z.slice(0,Z).concat([G&&G._isLinkedToArray]);var J=G&&(G.valType==="data_array"||G.arrayOk===!0)&&!(P[Z-1]==="colorbar"&&(W==="ticktext"||W==="tickvals"));J&&O(I,0,"")}function O(G,W,X){var Z=G[P[W]],J=X+P[W];if(W===P.length-1)f(Z)&&R.push(L+J);else if(z[W]){if(Array.isArray(Z))for(var N=0;N<Z.length;N++)c(Z[N])&&O(Z[N],W+1,J+"["+N+"].")}else c(Z)&&O(Z,W+1,J+".")}return I=D,L="",e.crawl(i,B),D._module&&D._module.attributes&&e.crawl(D._module.attributes,B),R},e.getTraceValObject=function(D,R){var P=R[0],z=1,I,L,B=D._module;if(B||(B=(r.modules[D.type||i.type.dflt]||{})._module),!B)return!1;if(I=B.attributes,L=I&&I[P],!L){var O=B.basePlotModule;O&&O.attributes&&(L=O.attributes[P])}return L||(L=i[P]),x(L,R,z)},e.getLayoutValObject=function(D,R){var P=v(D,R[0]);return x(P,R,1)};function v(D,R){var P,z,I,L,B=D._basePlotModules;if(B){var O;for(P=0;P<B.length;P++){if(I=B[P],I.attrRegex&&I.attrRegex.test(R)){if(I.layoutAttrOverrides)return I.layoutAttrOverrides;!O&&I.layoutAttributes&&(O=I.layoutAttributes)}var G=I.baseLayoutAttrOverrides;if(G&&R in G)return G[R]}if(O)return O}var W=D._modules;if(W){for(P=0;P<W.length;P++)if(L=W[P].layoutAttributes,L&&R in L)return L[R]}for(z in r.componentsRegistry){if(I=r.componentsRegistry[z],I.name==="colorscale"&&R.indexOf("coloraxis")===0)return I.layoutAttributes[R];if(!I.schema&&R===I.name)return I.layoutAttributes}return R in a?a[R]:!1}function x(D,R,P){if(!D)return!1;if(D._isLinkedToArray){if(S(R[P]))P++;else if(P<R.length)return!1}for(;P<R.length;P++){var z=D[R[P]];if(c(z))D=z;else break;if(P===R.length-1)break;if(D._isLinkedToArray){if(P++,!S(R[P]))return!1}else if(D.valType==="info_array"){P++;var I=R[P];if(!S(I))return!1;var L=D.items;if(Array.isArray(L)){if(I>=L.length)return!1;if(D.dimensions===2){if(P++,R.length===P)return D;var B=R[P];if(!S(B))return!1;D=L[I][B]}else D=L[I]}else D=L}}return D}function S(D){return D===Math.round(D)&&D>=0}function M(D){var R,P;R=r.modules[D]._module,P=R.basePlotModule;var z={};z.type=null;var I=u({},i),L=u({},R.attributes);e.crawl(L,function(G,W,X,Z,J){h(I,J).set(void 0),G===void 0&&h(L,J).set(void 0)}),u(z,I),r.traceIs(D,"noOpacity")&&delete z.opacity,r.traceIs(D,"showLegend")||(delete z.showlegend,delete z.legendgroup),r.traceIs(D,"noHover")&&(delete z.hoverinfo,delete z.hoverlabel),R.selectPoints||delete z.selectedpoints,u(z,L),P.attributes&&u(z,P.attributes),z.type=D;var B={meta:R.meta||{},categories:R.categories||{},animatable:!!R.animatable,type:D,attributes:k(z)};if(R.layoutAttributes){var O={};u(O,R.layoutAttributes),B.layoutAttributes=k(O)}return R.animatable||e.crawl(B,function(G){e.isValObject(G)&&"anim"in G&&delete G.anim}),B}function C(){var D={},R,P;u(D,a);for(R in r.subplotsRegistry)if(P=r.subplotsRegistry[R],!!P.layoutAttributes)if(Array.isArray(P.attr))for(var z=0;z<P.attr.length;z++)T(D,P,P.attr[z]);else{var I=P.attr==="subplot"?P.name:P.attr;T(D,P,I)}for(R in r.componentsRegistry){P=r.componentsRegistry[R];var L=P.schema;if(L&&(L.subplots||L.layout)){var B=L.subplots;if(B&&B.xaxis&&!B.yaxis)for(var O in B.xaxis)delete D.yaxis[O];delete D.xaxis.shift,delete D.xaxis.autoshift}else P.name==="colorscale"?u(D,P.layoutAttributes):P.layoutAttributes&&F(D,P.layoutAttributes,P.name)}return{layoutAttributes:k(D)}}function w(){var D={frames:u({},o)};return k(D),D.frames}function k(D){return A(D),b(D),E(D),D}function A(D){function R(P,z,I){!e.isValObject(P)&&c(P)&&(P.role="object")}e.crawl(D,R)}function b(D){function R(P,z,I){if(P){var L=P[g];L&&(delete P[g],I[z]={items:{}},I[z].items[L]=P,I[z].role="object")}}e.crawl(D,R)}function E(D){function R(P){for(var z in P)if(c(P[z]))R(P[z]);else if(Array.isArray(P[z]))for(var I=0;I<P[z].length;I++)R(P[z][I]);else P[z]instanceof RegExp&&(P[z]=P[z].toString())}R(D)}function T(D,R,P){var z=h(D,P),I=u({},R.layoutAttributes);I[p]=!0,z.set(I)}function F(D,R,P){var z=h(D,P);z.set(u(z.get()||{},R))}}}),Ro=de({"src/plot_api/plot_template.js"(e){"use strict";var r=Qt(),t=ri(),i="templateitemname",a={name:{valType:"string",editType:"none"}};a[i]={valType:"string",editType:"calc"},e.templatedArray=function(l,n){return n._isLinkedToArray=l,n.name=a.name,n[i]=a[i],n},e.traceTemplater=function(l){var n={},u,c;for(u in l)c=l[u],Array.isArray(c)&&c.length&&(n[u]=0);function f(h){u=r.coerce(h,{},t,"type");var d={type:u,_template:null};if(u in n){c=l[u];var p=n[u]%c.length;n[u]++,d._template=c[p]}return d}return{newTrace:f}},e.newContainer=function(l,n,u){var c=l._template,f=c&&(c[n]||u&&c[u]);r.isPlainObject(f)||(f=null);var h=l[n]={_template:f};return h},e.arrayTemplater=function(l,n,u){var c=l._template,f=c&&c[s(n)],h=c&&c[n];(!Array.isArray(h)||!h.length)&&(h=[]);var d={};function p(m){var y={name:m.name,_input:m},_=y[i]=m[i];if(!o(_))return y._template=f,y;for(var v=0;v<h.length;v++){var x=h[v];if(x.name===_)return d[_]=1,y._template=x,y}return y[u]=m[u]||!1,y._template=!1,y}function g(){for(var m=[],y=0;y<h.length;y++){var _=h[y],v=_.name;if(o(v)&&!d[v]){var x={_template:_,name:v,_input:{_templateitemname:v}};x[i]=_[i],m.push(x),d[v]=1}}return m}return{newItem:p,defaultItems:g}};function o(l){return l&&typeof l=="string"}function s(l){var n=l.length-1;return l.charAt(n)!=="s"&&r.warn("bad argument to arrayDefaultKey: "+l),l.slice(0,-1)+"defaults"}e.arrayDefaultKey=s,e.arrayEditor=function(l,n,u){var c=(r.nestedProperty(l,n).get()||[]).length,f=u._index,h=f>=c&&(u._input||{})._templateitemname;h&&(f=c);var d=n+"["+f+"]",p;function g(){p={},h&&(p[d]={},p[d][i]=h)}g();function m(x,S){p[x]=S}function y(x,S){h?r.nestedProperty(p[d],x).set(S):p[d+"."+x]=S}function _(){var x=p;return g(),x}function v(x,S){x&&y(x,S);var M=_();for(var C in M)r.nestedProperty(l,C).set(M[C])}return{modifyBase:m,modifyItem:y,getUpdateObj:_,applyUpdate:v}}}}),zl=de({"src/plots/cartesian/constants.js"(e,r){"use strict";var t=(s1(),ti(mv)).counter;r.exports={idRegex:{x:t("x","( domain)?"),y:t("y","( domain)?")},attrRegex:t("[xy]axis"),xAxisMatch:t("xaxis"),yAxisMatch:t("yaxis"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:"hour",WEEKDAY_PATTERN:"day of week",MINDRAG:8,MINZOOM:20,DRAGGERSIZE:20,REDRAWDELAY:50,DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:["imagelayer","heatmaplayer","contourcarpetlayer","contourlayer","funnellayer","waterfalllayer","barlayer","carpetlayer","violinlayer","boxlayer","ohlclayer","scattercarpetlayer","scatterlayer"],clipOnAxisFalseQuery:[".scatterlayer",".barlayer",".funnellayer",".waterfalllayer"],layerValue2layerClass:{"above traces":"above","below traces":"below"},zindexSeparator:"z"}}}),Hs=de({"src/plots/cartesian/axis_ids.js"(e){"use strict";var r=Ma(),t=zl();e.id2name=function(o){if(!(typeof o!="string"||!o.match(t.AX_ID_PATTERN))){var s=o.split(" ")[0].slice(1);return s==="1"&&(s=""),o.charAt(0)+"axis"+s}},e.name2id=function(o){if(o.match(t.AX_NAME_PATTERN)){var s=o.slice(5);return s==="1"&&(s=""),o.charAt(0)+s}},e.cleanId=function(o,s,l){var n=/( domain)$/.test(o);if(!(typeof o!="string"||!o.match(t.AX_ID_PATTERN))&&!(s&&o.charAt(0)!==s)&&!(n&&!l)){var u=o.split(" ")[0].slice(1).replace(/^0+/,"");return u==="1"&&(u=""),o.charAt(0)+u+(n&&l?" domain":"")}},e.list=function(a,o,s){var l=a._fullLayout;if(!l)return[];var n=e.listIds(a,o),u=new Array(n.length),c;for(c=0;c<n.length;c++){var f=n[c];u[c]=l[f.charAt(0)+"axis"+f.slice(1)]}if(!s){var h=l._subplots.gl3d||[];for(c=0;c<h.length;c++){var d=l[h[c]];o?u.push(d[o+"axis"]):u.push(d.xaxis,d.yaxis,d.zaxis)}}return u},e.listIds=function(a,o){var s=a._fullLayout;if(!s)return[];var l=s._subplots;return o?l[o+"axis"]:l.xaxis.concat(l.yaxis)},e.getFromId=function(a,o,s){var l=a._fullLayout;return o=o===void 0||typeof o!="string"?o:o.replace(" domain",""),s==="x"?o=o.replace(/y[0-9]*/,""):s==="y"&&(o=o.replace(/x[0-9]*/,"")),l[e.id2name(o)]},e.getFromTrace=function(a,o,s){var l=a._fullLayout,n=null;if(r.traceIs(o,"gl3d")){var u=o.scene;u.slice(0,5)==="scene"&&(n=l[u][s+"axis"])}else n=e.getFromId(a,o[s+"axis"]||s);return n},e.idSort=function(a,o){var s=a.charAt(0),l=o.charAt(0);return s!==l?s>l?1:-1:+(a.slice(1)||1)-+(o.slice(1)||1)},e.ref2id=function(a){return/^[xyz]/.test(a)?a.split(" ")[0]:!1};function i(a,o){if(o&&o.length){for(var s=0;s<o.length;s++)if(o[s][a])return!0}return!1}e.isLinked=function(a,o){return i(o,a._axisMatchGroups)||i(o,a._axisConstraintGroups)}}}),f0=de({"src/components/shapes/handle_outline.js"(e,r){"use strict";function t(a){var o=a._fullLayout._zoomlayer;o&&o.selectAll(".outline-controllers").remove()}function i(a){var o=a._fullLayout._zoomlayer;o&&o.selectAll(".select-outline").remove(),a._fullLayout._outlining=!1}r.exports={clearOutlineControllers:t,clearOutline:i}}}),Tw=de({"src/traces/scatter/layout_attributes.js"(e,r){"use strict";r.exports={scattermode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},scattergap:{valType:"number",min:0,max:1,editType:"calc"}}}}),$u=de({"src/plots/get_data.js"(e){"use strict";var r=Ma(),t=zl().SUBPLOT_PATTERN;e.getSubplotCalcData=function(i,a,o){var s=r.subplotsRegistry[a];if(!s)return[];for(var l=s.attr,n=[],u=0;u<i.length;u++){var c=i[u],f=c[0].trace;f[l]===o&&n.push(c)}return n},e.getModuleCalcData=function(i,a,o){var s=[],l=[],n;if(typeof a=="string"?n=r.getModule(a).plot:typeof a=="function"?n=a:n=a.plot,!n)return[s,i];for(var u=o,c=0;c<i.length;c++){var f=i[c],h=f[0].trace,d=h.zorder!==void 0;h.visible!==!0||h._length===0||(h._module&&h._module.plot===n&&(!d||h.zorder===u)?s.push(f):l.push(f))}return[s,l]},e.getSubplotData=function(a,o,s){if(!r.subplotsRegistry[o])return[];for(var l=r.subplotsRegistry[o].attr,n=[],u,c,f,h=0;h<a.length;h++)u=a[h],u[l]===s&&n.push(u);return n}}}),fq=de({"src/plots/command.js"(e){"use strict";var r=Ma(),t=Qt();e.manageCommandObserver=function(n,u,c,f){var h={},d=!0;u&&u._commandObserver&&(h=u._commandObserver),h.cache||(h.cache={}),h.lookupTable={};var p=e.hasSimpleAPICommandBindings(n,c,h.lookupTable);if(u&&u._commandObserver){if(p)return h;if(u._commandObserver.remove)return u._commandObserver.remove(),u._commandObserver=null,h}if(p){i(n,p,h.cache),h.check=function(){if(d){var _=i(n,p,h.cache);return _.changed&&f&&h.lookupTable[_.value]!==void 0&&(h.disable(),Promise.resolve(f({value:_.value,type:p.type,prop:p.prop,traces:p.traces,index:h.lookupTable[_.value]})).then(h.enable,h.enable)),_.changed}};for(var g=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],m=0;m<g.length;m++)n._internalOn(g[m],h.check);h.remove=function(){for(var y=0;y<g.length;y++)n._removeInternalListener(g[y],h.check)}}else t.log("Unable to automatically bind plot updates to API command"),h.lookupTable={},h.remove=function(){};return h.disable=function(){d=!1},h.enable=function(){d=!0},u&&(u._commandObserver=h),h},e.hasSimpleAPICommandBindings=function(n,u,c){var f,h=u.length,d;for(f=0;f<h;f++){var p,g=u[f],m=g.method,y=g.args;if(Array.isArray(y)||(y=[]),!m)return!1;var _=e.computeAPICommandBindings(n,m,y);if(_.length!==1)return!1;if(!d)d=_[0],Array.isArray(d.traces)&&d.traces.sort();else{if(p=_[0],p.type!==d.type||p.prop!==d.prop)return!1;if(Array.isArray(d.traces))if(Array.isArray(p.traces)){p.traces.sort();for(var v=0;v<d.traces.length;v++)if(d.traces[v]!==p.traces[v])return!1}else return!1;else if(p.prop!==d.prop)return!1}p=_[0];var x=p.value;if(Array.isArray(x))if(x.length===1)x=x[0];else return!1;c&&(c[x]=f)}return d};function i(n,u,c){var f,h,d,p=!1;if(u.type==="data")f=n._fullData[u.traces!==null?u.traces[0]:0];else if(u.type==="layout")f=n._fullLayout;else return!1;return h=t.nestedProperty(f,u.prop).get(),d=c[u.type]=c[u.type]||{},d.hasOwnProperty(u.prop)&&d[u.prop]!==h&&(p=!0),d[u.prop]=h,{changed:p,value:h}}e.executeAPICommand=function(n,u,c){if(u==="skip")return Promise.resolve();var f=r.apiMethodRegistry[u],h=[n];Array.isArray(c)||(c=[]);for(var d=0;d<c.length;d++)h.push(c[d]);return f.apply(null,h).catch(function(p){return t.warn("API call to Plotly."+u+" rejected.",p),Promise.reject(p)})},e.computeAPICommandBindings=function(n,u,c){var f;switch(Array.isArray(c)||(c=[]),u){case"restyle":f=s(n,c);break;case"relayout":f=o(n,c);break;case"update":f=s(n,[c[0],c[2]]).concat(o(n,[c[1]]));break;case"animate":f=a(n,c);break;default:f=[]}return f};function a(n,u){return Array.isArray(u[0])&&u[0].length===1&&["string","number"].indexOf(typeof u[0][0])!==-1?[{type:"layout",prop:"_currentFrame",value:u[0][0].toString()}]:[]}function o(n,u){var c=[],f=u[0],h={};if(typeof f=="string")h[f]=u[1];else if(t.isPlainObject(f))h=f;else return c;return l(h,function(d,p,g){c.push({type:"layout",prop:d,value:g})},"",0),c}function s(n,u){var c,f,h,d,p=[];if(f=u[0],h=u[1],c=u[2],d={},typeof f=="string")d[f]=h;else if(t.isPlainObject(f))d=f,c===void 0&&(c=h);else return p;return c===void 0&&(c=null),l(d,function(g,m,y){var _,v;if(Array.isArray(y)){v=y.slice();var x=Math.min(v.length,n.data.length);c&&(x=Math.min(x,c.length)),_=[];for(var S=0;S<x;S++)_[S]=c?c[S]:S}else v=y,_=c?c.slice():null;if(_===null)Array.isArray(v)&&(v=v[0]);else if(Array.isArray(_)){if(!Array.isArray(v)){var M=v;v=[];for(var C=0;C<_.length;C++)v[C]=M}v.length=Math.min(_.length,v.length)}p.push({type:"data",prop:g,traces:_,value:v})},"",0),p}function l(n,u,c,f){Object.keys(n).forEach(function(h){var d=n[h];if(h[0]!=="_"){var p=c+(f>0?".":"")+h;t.isPlainObject(d)?l(d,u,p,f+1):u(p,h,d)}})}}}),Es=de({"src/plots/plots.js"(e,r){"use strict";var t=Yr(),i=eo().timeFormatLocale,a=rs().formatLocale,o=da(),s=Ss(),l=_i().version,n=Ma(),u=c1(),c=Ro(),f=Qt(),h=ta(),d=cn().BADNUM,p=Hs(),g=f0().clearOutline,m=Tw(),y=Ay(),_=AE(),v=$u().getModuleCalcData,x=f.relinkPrivateKeys,S=f._,M=r.exports={};f.extendFlat(M,n),M.attributes=ri(),M.attributes.type.values=M.allTypes,M.fontAttrs=us(),M.layoutAttributes=l1();var C=fq();M.executeAPICommand=C.executeAPICommand,M.computeAPICommandBindings=C.computeAPICommandBindings,M.manageCommandObserver=C.manageCommandObserver,M.hasSimpleAPICommandBindings=C.hasSimpleAPICommandBindings,M.redrawText=function(N){return N=f.getGraphDiv(N),new Promise(function(H){setTimeout(function(){N._fullLayout&&(n.getComponentMethod("annotations","draw")(N),n.getComponentMethod("legend","draw")(N),n.getComponentMethod("colorbar","draw")(N),H(M.previousPromises(N)))},300)})},M.resize=function(N){N=f.getGraphDiv(N);var H,$=new Promise(function(U,V){(!N||f.isHidden(N))&&V(new Error("Resize must be passed a displayed plot div element.")),N._redrawTimer&&clearTimeout(N._redrawTimer),N._resolveResize&&(H=N._resolveResize),N._resolveResize=U,N._redrawTimer=setTimeout(function(){if(!N.layout||N.layout.width&&N.layout.height||f.isHidden(N)){U(N);return}delete N.layout.width,delete N.layout.height;var j=N.changed;N.autoplay=!0,n.call("relayout",N,{autosize:!0}).then(function(){N.changed=j,N._resolveResize===U&&(delete N._resolveResize,U(N))})},100)});return H&&H($),$},M.previousPromises=function(N){if((N._promises||[]).length)return Promise.all(N._promises).then(function(){N._promises=[]})},M.sendDataToCloud=function(N,H){N.emit("plotly_beforeexport");let $=new URL(H).origin;var U=M.graphJson(N,!1,"object");U.version=l;var V=new URL(H);V.searchParams.set("origin",window.location.origin);var j=window.open(V.href,"_blank");if(!j){console.error("Unable to open Plotly Cloud (the popup may have been blocked)"),N.emit("plotly_exportfail");return}var q=function(Y){Y.origin===$&&Y.data&&Y.data.type==="CHART_AUTH_SUCCESS"&&(j.postMessage({type:"chart",chart:U},$),window.removeEventListener("message",q),N.emit("plotly_afterexport"))};return window.addEventListener("message",q),!1};var w=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],k=["year","month","dayMonth","dayMonthYear"];M.supplyDefaults=function(N,H){var $=H&&H.skipUpdateCalc,U=N._fullLayout||{};if(U._skipDefaults){delete U._skipDefaults;return}var V=N._fullLayout={},j=N.layout||{},q=N._fullData||[],Y=N._fullData=[],K=N.data||[],te=N.calcdata||[],ne=N._context||{},se;N._transitionData||M.createTransitionData(N),V._dfltTitle={plot:S(N,"Click to enter Plot title"),subtitle:S(N,"Click to enter Plot subtitle"),x:S(N,"Click to enter X axis title"),y:S(N,"Click to enter Y axis title"),colorbar:S(N,"Click to enter Colorscale title"),annotation:S(N,"new text")},V._traceWord=S(N,"trace");var le=E(N,w);if(U._initialAutoSizeIsDone){var ce=U.width,pe=U.height;M.supplyLayoutGlobalDefaults(j,V,le),j.width||(V.width=ce),j.height||(V.height=pe),M.sanitizeMargins(V)}else{M.supplyLayoutGlobalDefaults(j,V,le);var xe=!j.width||!j.height,ye=V.autosize,fe=ne.autosizable,ae=xe&&(ye||fe);ae?M.plotAutoSize(N,j,V):xe&&M.sanitizeMargins(V),!ye&&xe&&(j.width=V.width,j.height=V.height)}V._d3locale=T(le,V.separators),V._extraFormat=E(N,k),V._initialAutoSizeIsDone=!0,V._dataLength=K.length,V._modules=[],V._visibleModules=[],V._basePlotModules=[];var ee=V._subplots=b(),ie=V._splomAxes={x:{},y:{}},Q=V._splomSubplots={};V._splomGridDflt={},V._scatterStackOpts={},V._firstScatter={},V._alignmentOpts={},V._colorAxes={},V._requestRangeslider={},V._traceUids=A(q,K),M.supplyDataDefaults(K,Y,j,V);var ue=Object.keys(ie.x),ge=Object.keys(ie.y);if(ue.length>1&&ge.length>1){for(n.getComponentMethod("grid","sizeDefaults")(j,V),se=0;se<ue.length;se++)f.pushUnique(ee.xaxis,ue[se]);for(se=0;se<ge.length;se++)f.pushUnique(ee.yaxis,ge[se]);for(var Me in Q)f.pushUnique(ee.cartesian,Me)}if(V._has=M._hasPlotType.bind(V),q.length===Y.length)for(se=0;se<Y.length;se++)x(Y[se],q[se]);M.supplyLayoutModuleDefaults(j,V,Y,N._transitionData);var Te=V._visibleModules,je=[];for(se=0;se<Te.length;se++){var Ve=Te[se].crossTraceDefaults;Ve&&f.pushUnique(je,Ve)}for(se=0;se<je.length;se++)je[se](Y,V);V._hasOnlyLargeSploms=V._basePlotModules.length===1&&V._basePlotModules[0].name==="splom"&&ue.length>15&&ge.length>15&&V.shapes.length===0&&V.images.length===0,M.linkSubplots(Y,V,q,U),M.cleanPlot(Y,V,q,U);var Ze=!!(U._has&&U._has("cartesian")),Ke=!!(V._has&&V._has("cartesian")),vt=Ze,xt=Ke;vt&&!xt?U._bgLayer.remove():xt&&!vt&&(V._shouldCreateBgLayer=!0),U._zoomlayer&&!N._dragging&&g({_fullLayout:U}),F(Y,V),x(V,U),n.getComponentMethod("colorscale","crossTraceDefaults")(Y,V),V._preGUI||(V._preGUI={}),V._tracePreGUI||(V._tracePreGUI={});var Pt=V._tracePreGUI,mt={},Mt;for(Mt in Pt)mt[Mt]="old";for(se=0;se<Y.length;se++)Mt=Y[se].uid,mt[Mt]||(Pt[Mt]={}),mt[Mt]="new";for(Mt in mt)mt[Mt]==="old"&&delete Pt[Mt];P(V),n.getComponentMethod("rangeslider","makeData")(V),!$&&te.length===Y.length&&M.supplyDefaultsUpdateCalc(te,Y)},M.supplyDefaultsUpdateCalc=function(N,H){for(var $=0;$<H.length;$++){var U=H[$],V=(N[$]||[])[0];V&&V.trace&&(V.trace=U)}};function A(N,H){var $=H.length,U,V=N.length,j=new Array($),q={};function Y(ne,se){j[se]=ne,q[ne]=1}function K(ne,se){if(ne&&typeof ne=="string"&&!q[ne])return Y(ne,se),!0}for(U=0;U<$;U++){var te=H[U].uid;typeof te=="number"&&(te=String(te)),!K(te,U)&&(U<V&&K(N[U].uid,U)||Y(f.randstr(q),U))}return j}function b(){var N=n.collectableSubplotTypes,H={},$,U;if(!N){N=[];var V=n.subplotsRegistry;for(var j in V){var q=V[j],Y=q.attr;if(Y&&(N.push(j),Array.isArray(Y)))for(U=0;U<Y.length;U++)f.pushUnique(N,Y[U])}}for($=0;$<N.length;$++)H[N[$]]=[];return H}function E(N,H){var $=N._context.locale;$||($="en-US");var U=!1,V={};function j(se){for(var le=!0,ce=0;ce<H.length;ce++){var pe=H[ce];V[pe]||(se[pe]?V[pe]=se[pe]:le=!1)}le&&(U=!0)}for(var q=0;q<2;q++){for(var Y=N._context.locales,K=0;K<2;K++){var te=(Y[$]||{}).format;if(te&&(j(te),U))break;Y=n.localeRegistry}var ne=$.split("-")[0];if(U||ne===$)break;$=ne}return U||j(n.localeRegistry.en.format),V}function T(N,H){return N.decimal=H.charAt(0),N.thousands=H.charAt(1),{numberFormat:function($){try{$=a(N).format(f.adjustFormat($))}catch{return f.warnBadFormat($),f.noFormat}return $},timeFormat:i(N).utcFormat}}function F(N,H){var $,U=[];H.meta&&($=H._meta={meta:H.meta,layout:{meta:H.meta}});for(var V=0;V<N.length;V++){var j=N[V];j.meta?U[j.index]=j._meta={meta:j.meta}:H.meta&&(j._meta={meta:H.meta}),H.meta&&(j._meta.layout={meta:H.meta})}U.length&&($||($=H._meta={}),$.data=U)}M.createTransitionData=function(N){N._transitionData||(N._transitionData={}),N._transitionData._frames||(N._transitionData._frames=[]),N._transitionData._frameHash||(N._transitionData._frameHash={}),N._transitionData._counter||(N._transitionData._counter=0),N._transitionData._interruptCallbacks||(N._transitionData._interruptCallbacks=[])},M._hasPlotType=function(N){var H,$=this._basePlotModules||[];for(H=0;H<$.length;H++)if($[H].name===N)return!0;var U=this._modules||[];for(H=0;H<U.length;H++){var V=U[H].name;if(V===N)return!0;var j=n.modules[V];if(j&&j.categories[N])return!0}return!1},M.cleanPlot=function(N,H,$,U){var V,j,q=U._basePlotModules||[];for(V=0;V<q.length;V++){var Y=q[V];Y.clean&&Y.clean(N,H,$,U)}var K=U._has&&U._has("gl"),te=H._has&&H._has("gl");K&&!te&&U._glcontainer!==void 0&&(U._glcontainer.selectAll(".gl-canvas").remove(),U._glcontainer.selectAll(".no-webgl").remove(),U._glcanvas=null);var ne=!!U._infolayer;e:for(V=0;V<$.length;V++){var se=$[V],le=se.uid;for(j=0;j<N.length;j++){var ce=N[j];if(le===ce.uid)continue e}ne&&U._infolayer.select(".cb"+le).remove()}},M.linkSubplots=function(N,H,$,U){var V,j,q=U._plots||{},Y=H._plots={},K=H._subplots,te={_fullData:N,_fullLayout:H},ne=K.cartesian||[];for(V=0;V<ne.length;V++){var se=ne[V],le=q[se],ce=p.getFromId(te,se,"x"),pe=p.getFromId(te,se,"y"),xe;for(le?xe=Y[se]=le:(xe=Y[se]={},xe.id=se),ce._counterAxes.push(pe._id),pe._counterAxes.push(ce._id),ce._subplotsWith.push(se),pe._subplotsWith.push(se),xe.xaxis=ce,xe.yaxis=pe,xe._hasClipOnAxisFalse=!1,j=0;j<N.length;j++){var ye=N[j];if(ye.xaxis===xe.xaxis._id&&ye.yaxis===xe.yaxis._id&&ye.cliponaxis===!1){xe._hasClipOnAxisFalse=!0;break}}}var fe=p.list(te,null,!0),ae;for(V=0;V<fe.length;V++){ae=fe[V];var ee=null;ae.overlaying&&(ee=p.getFromId(te,ae.overlaying),ee&&ee.overlaying&&(ae.overlaying=!1,ee=null)),ae._mainAxis=ee||ae,ee&&(ae.domain=ee.domain.slice()),ae._anchorAxis=ae.anchor==="free"?null:p.getFromId(te,ae.anchor)}for(V=0;V<fe.length;V++)if(ae=fe[V],ae._counterAxes.sort(p.idSort),ae._subplotsWith.sort(f.subplotSort),ae._mainSubplot=D(ae,H),ae._counterAxes.length&&(ae.spikemode&&ae.spikemode.indexOf("across")!==-1||ae.automargin&&ae.mirror&&ae.anchor!=="free"||n.getComponentMethod("rangeslider","isVisible")(ae))){var ie=1,Q=0;for(j=0;j<ae._counterAxes.length;j++){var ue=p.getFromId(te,ae._counterAxes[j]);ie=Math.min(ie,ue.domain[0]),Q=Math.max(Q,ue.domain[1])}ie<Q&&(ae._counterDomainMin=ie,ae._counterDomainMax=Q)}};function D(N,H){var $={_fullLayout:H},U=N._id.charAt(0)==="x",V=N._mainAxis._anchorAxis,j="",q="",Y="";if(V&&(Y=V._mainAxis._id,j=U?N._id+Y:Y+N._id),!j||!H._plots[j]){j="";for(var K=N._counterAxes,te=0;te<K.length;te++){var ne=K[te],se=U?N._id+ne:ne+N._id;q||(q=se);var le=p.getFromId($,ne);if(Y&&le.overlaying===Y){j=se;break}}}return j||q}M.supplyDataDefaults=function(N,H,$,U){var V=U._modules,j=U._visibleModules,q=U._basePlotModules,Y=0,K=0,te,ne,se;function le(ae){H.push(ae);var ee=ae._module;ee&&(f.pushUnique(V,ee),ae.visible===!0&&f.pushUnique(j,ee),f.pushUnique(q,ae._module.basePlotModule),Y++,ae._input.visible!==!1&&K++)}var ce={},pe=[],xe=($.template||{}).data||{},ye=c.traceTemplater(xe);for(te=0;te<N.length;te++)se=N[te],ne=ye.newTrace(se),ne.uid=U._traceUids[te],M.supplyTraceDefaults(se,ne,K,U,te),ne.index=te,ne._input=se,le(ne),n.traceIs(ne,"carpetAxis")&&(ce[ne.carpet]=ne),n.traceIs(ne,"carpetDependent")&&pe.push(te);for(te=0;te<pe.length;te++)if(ne=H[pe[te]],!!ne.visible){var fe=ce[ne.carpet];if(ne._carpet=fe,!fe||!fe.visible){ne.visible=!1;continue}ne.xaxis=fe.xaxis,ne.yaxis=fe.yaxis}},M.supplyAnimationDefaults=function(N){N=N||{};var H,$={};function U(V,j){return f.coerce(N||{},$,y,V,j)}if(U("mode"),U("direction"),U("fromcurrent"),Array.isArray(N.frame))for($.frame=[],H=0;H<N.frame.length;H++)$.frame[H]=M.supplyAnimationFrameDefaults(N.frame[H]||{});else $.frame=M.supplyAnimationFrameDefaults(N.frame||{});if(Array.isArray(N.transition))for($.transition=[],H=0;H<N.transition.length;H++)$.transition[H]=M.supplyAnimationTransitionDefaults(N.transition[H]||{});else $.transition=M.supplyAnimationTransitionDefaults(N.transition||{});return $},M.supplyAnimationFrameDefaults=function(N){var H={};function $(U,V){return f.coerce(N||{},H,y.frame,U,V)}return $("duration"),$("redraw"),H},M.supplyAnimationTransitionDefaults=function(N){var H={};function $(U,V){return f.coerce(N||{},H,y.transition,U,V)}return $("duration"),$("easing"),H},M.supplyFrameDefaults=function(N){var H={};function $(U,V){return f.coerce(N,H,_,U,V)}return $("group"),$("name"),$("traces"),$("baseframe"),$("data"),$("layout"),H},M.supplyTraceDefaults=function(N,H,$,U,V){var j=U.colorway||h.defaults,q=j[$%j.length],Y;function K(ee,ie){return f.coerce(N,H,M.attributes,ee,ie)}var te=K("visible");K("type"),K("name",U._traceWord+" "+V),K("uirevision",U.uirevision);var ne=M.getModule(H);if(H._module=ne,ne){var se=ne.basePlotModule,le=se.attr,ce=se.attributes;if(le&&ce){var pe=U._subplots,xe="";if(Array.isArray(le))for(Y=0;Y<le.length;Y++){var ye=le[Y],fe=f.coerce(N,H,ce,ye);pe[ye]&&f.pushUnique(pe[ye],fe),xe+=fe}else xe=f.coerce(N,H,ce,le);pe[se.name]&&f.pushUnique(pe[se.name],xe)}}if(te&&(K("customdata"),K("ids"),K("meta"),n.traceIs(H,"showLegend")?(f.coerce(N,H,ne.attributes.showlegend?ne.attributes:M.attributes,"showlegend"),f.coerce(N,H,ne.attributes.legend?ne.attributes:M.attributes,"legend"),K("legendwidth"),K("legendgroup"),K("legendgrouptitle.text"),f.coerce(N,H,ne.attributes.legend?ne.attributes:M.attributes,"legendrank"),H._dfltShowLegend=!0):H._dfltShowLegend=!1,ne&&ne.supplyDefaults(N,H,q,U),n.traceIs(H,"noOpacity")||K("opacity"),n.traceIs(H,"notLegendIsolatable")&&(H.visible=!!H.visible),n.traceIs(H,"noHover")||(H.hovertemplate||f.coerceHoverinfo(N,H,U),H.type!=="parcats"&&n.getComponentMethod("fx","supplyDefaults")(N,H,q,U)),ne&&ne.selectPoints)){var ae=K("selectedpoints");f.isTypedArray(ae)&&(H.selectedpoints=Array.from(ae))}return H},M.supplyLayoutGlobalDefaults=function(N,H,$){function U(se,le){return f.coerce(N,H,M.layoutAttributes,se,le)}var V=N.template;f.isPlainObject(V)&&(H.template=V,H._template=V.layout,H._dataTemplate=V.data),U("autotypenumbers");var j=f.coerceFont(U,"font"),q=j.size;f.coerceFont(U,"title.font",j,{overrideDflt:{size:Math.round(q*1.4)}}),U("title.text",H._dfltTitle.plot),U("title.xref");var Y=U("title.yref");U("title.pad.t"),U("title.pad.r"),U("title.pad.b"),U("title.pad.l");var K=U("title.automargin");U("title.x"),U("title.xanchor"),U("title.y"),U("title.yanchor"),U("title.subtitle.text",H._dfltTitle.subtitle),f.coerceFont(U,"title.subtitle.font",j,{overrideDflt:{size:Math.round(H.title.font.size*.7)}}),K&&(Y==="paper"&&(H.title.y!==0&&(H.title.y=1),H.title.yanchor==="auto"&&(H.title.yanchor=H.title.y===0?"top":"bottom")),Y==="container"&&(H.title.y==="auto"&&(H.title.y=1),H.title.yanchor==="auto"&&(H.title.yanchor=H.title.y<.5?"bottom":"top")));var te=U("uniformtext.mode");te&&U("uniformtext.minsize"),U("autosize",!(N.width&&N.height)),U("width"),U("height"),U("minreducedwidth"),U("minreducedheight"),U("margin.l"),U("margin.r"),U("margin.t"),U("margin.b"),U("margin.pad"),U("margin.autoexpand"),N.width&&N.height&&M.sanitizeMargins(H),n.getComponentMethod("grid","sizeDefaults")(N,H),U("paper_bgcolor"),U("separators",$.decimal+$.thousands),U("colorway"),U("datarevision");var ne=U("uirevision");U("editrevision",ne),U("selectionrevision",ne),n.getComponentMethod("modebar","supplyLayoutDefaults")(N,H),n.getComponentMethod("shapes","supplyDrawNewShapeDefaults")(N,H,U),n.getComponentMethod("selections","supplyDrawNewSelectionDefaults")(N,H,U),U("meta"),f.isPlainObject(N.transition)&&(U("transition.duration"),U("transition.easing"),U("transition.ordering")),n.getComponentMethod("calendars","handleDefaults")(N,H,"calendar"),n.getComponentMethod("fx","supplyLayoutGlobalDefaults")(N,H,U),f.coerce(N,H,m,"scattermode")};function R(N){return typeof N=="string"&&N.slice(-2)==="px"&&parseFloat(N)}M.plotAutoSize=function(H,$,U){var V=H._context||{},j=V.frameMargins,q,Y,K=f.isPlotDiv(H);if(K&&H.emit("plotly_autosize"),V.fillFrame)q=window.innerWidth,Y=window.innerHeight,document.body.style.overflow="hidden";else{var te=K?window.getComputedStyle(H):{};if(q=R(te.width)||R(te.maxWidth)||U.width,Y=R(te.height)||R(te.maxHeight)||U.height,o(j)&&j>0){var ne=1-2*j;q=Math.round(ne*q),Y=Math.round(ne*Y)}}var se=M.layoutAttributes.width.min,le=M.layoutAttributes.height.min;q<se&&(q=se),Y<le&&(Y=le);var ce=!$.width&&Math.abs(U.width-q)>1,pe=!$.height&&Math.abs(U.height-Y)>1;(pe||ce)&&(ce&&(U.width=q),pe&&(U.height=Y)),H._initialAutoSize||(H._initialAutoSize={width:q,height:Y}),M.sanitizeMargins(U)},M.supplyLayoutModuleDefaults=function(N,H,$,U){var V=n.componentsRegistry,j=H._basePlotModules,q,Y,K,te=n.subplotsRegistry.cartesian;for(q in V)K=V[q],K.includeBasePlot&&K.includeBasePlot(N,H);j.length||j.push(te),H._has("cartesian")&&(n.getComponentMethod("grid","contentDefaults")(N,H),te.finalizeSubplots(N,H));for(var ne in H._subplots)H._subplots[ne].sort(f.subplotSort);for(Y=0;Y<j.length;Y++)K=j[Y],K.supplyLayoutDefaults&&K.supplyLayoutDefaults(N,H,$);var se=H._modules;for(Y=0;Y<se.length;Y++)K=se[Y],K.supplyLayoutDefaults&&K.supplyLayoutDefaults(N,H,$);for(q in V)K=V[q],K.supplyLayoutDefaults&&K.supplyLayoutDefaults(N,H,$)},M.purge=function(N){var H=N._fullLayout||{};H._glcontainer!==void 0&&(H._glcontainer.selectAll(".gl-canvas").remove(),H._glcontainer.remove(),H._glcanvas=null),H._modeBar&&H._modeBar.destroy(),N._transitionData&&(N._transitionData._interruptCallbacks&&(N._transitionData._interruptCallbacks.length=0),N._transitionData._animationRaf&&window.cancelAnimationFrame(N._transitionData._animationRaf)),f.clearThrottle(),f.clearResponsive(N),delete N.data,delete N.layout,delete N._fullData,delete N._fullLayout,delete N.calcdata,delete N.empty,delete N.fid,delete N.undoqueue,delete N.undonum,delete N.autoplay,delete N.changed,delete N._promises,delete N._redrawTimer,delete N._hmlumcount,delete N._hmpixcount,delete N._transitionData,delete N._transitioning,delete N._initialAutoSize,delete N._transitioningWithDuration,delete N._dragging,delete N._dragged,delete N._dragdata,delete N._hoverdata,delete N._snapshotInProgress,delete N._editing,delete N._mouseDownTime,delete N._legendMouseDownTime,N.removeAllListeners&&N.removeAllListeners()},M.style=function(N){var H=N._fullLayout._visibleModules,$=[],U;for(U=0;U<H.length;U++){var V=H[U];V.style&&f.pushUnique($,V.style)}for(U=0;U<$.length;U++)$[U](N)},M.sanitizeMargins=function(N){if(!(!N||!N.margin)){var H=N.width,$=N.height,U=N.margin,V=H-(U.l+U.r),j=$-(U.t+U.b),q;V<0&&(q=(H-1)/(U.l+U.r),U.l=Math.floor(q*U.l),U.r=Math.floor(q*U.r)),j<0&&(q=($-1)/(U.t+U.b),U.t=Math.floor(q*U.t),U.b=Math.floor(q*U.b))}},M.clearAutoMarginIds=function(N){N._fullLayout._pushmarginIds={}},M.allowAutoMargin=function(N,H){N._fullLayout._pushmarginIds[H]=1};function P(N){var H=N.margin;if(!N._size){var $=N._size={l:Math.round(H.l),r:Math.round(H.r),t:Math.round(H.t),b:Math.round(H.b),p:Math.round(H.pad)};$.w=Math.round(N.width)-$.l-$.r,$.h=Math.round(N.height)-$.t-$.b}N._pushmargin||(N._pushmargin={}),N._pushmarginIds||(N._pushmarginIds={}),N._reservedMargin||(N._reservedMargin={})}var z=2,I=2;M.autoMargin=function(N,H,$){var U=N._fullLayout,V=U.width,j=U.height,q=U.margin,Y=U.minreducedwidth,K=U.minreducedheight,te=f.constrain(V-q.l-q.r,z,Y),ne=f.constrain(j-q.t-q.b,I,K),se=Math.max(0,V-te),le=Math.max(0,j-ne),ce=U._pushmargin,pe=U._pushmarginIds;if(q.autoexpand!==!1){if(!$)delete ce[H],delete pe[H];else{var xe=$.pad;if(xe===void 0&&(xe=Math.min(12,q.l,q.r,q.t,q.b)),se){var ye=($.l+$.r)/se;ye>1&&($.l/=ye,$.r/=ye)}if(le){var fe=($.t+$.b)/le;fe>1&&($.t/=fe,$.b/=fe)}var ae=$.xl!==void 0?$.xl:$.x,ee=$.xr!==void 0?$.xr:$.x,ie=$.yt!==void 0?$.yt:$.y,Q=$.yb!==void 0?$.yb:$.y;ce[H]={l:{val:ae,size:$.l+xe},r:{val:ee,size:$.r+xe},b:{val:Q,size:$.b+xe},t:{val:ie,size:$.t+xe}},pe[H]=1}if(!U._replotting)return M.doAutoMargin(N)}};function L(N){if("_redrawFromAutoMarginCount"in N._fullLayout)return!1;var H=p.list(N,"",!0);for(var $ in H)if(H[$].autoshift||H[$].shift)return!0;return!1}M.doAutoMargin=function(N){var H=N._fullLayout,$=H.width,U=H.height;H._size||(H._size={}),P(H);var V=H._size,j=H.margin,q={t:0,b:0,l:0,r:0},Y=f.extendFlat({},V),K=j.l,te=j.r,ne=j.t,se=j.b,le=H._pushmargin,ce=H._pushmarginIds,pe=H.minreducedwidth,xe=H.minreducedheight;if(j.autoexpand!==!1){for(var ye in le)ce[ye]||delete le[ye];var fe=N._fullLayout._reservedMargin;for(var ae in fe)for(var ee in fe[ae]){var ie=fe[ae][ee];q[ee]=Math.max(q[ee],ie)}le.base={l:{val:0,size:K},r:{val:1,size:te},t:{val:1,size:ne},b:{val:0,size:se}};for(var Q in q){var ue=0;for(var ge in le)ge!=="base"&&o(le[ge][Q].size)&&(ue=le[ge][Q].size>ue?le[ge][Q].size:ue);var Me=Math.max(0,j[Q]-ue);q[Q]=Math.max(0,q[Q]-Me)}for(var Te in le){var je=le[Te].l||{},Ve=le[Te].b||{},Ze=je.val,Ke=je.size,vt=Ve.val,xt=Ve.size,Pt=$-q.r-q.l,mt=U-q.t-q.b;for(var Mt in le){if(o(Ke)&&le[Mt].r){var lt=le[Mt].r.val,qe=le[Mt].r.size;if(lt>Ze){var Ye=(Ke*lt+(qe-Pt)*Ze)/(lt-Ze),me=(qe*(1-Ze)+(Ke-Pt)*(1-lt))/(lt-Ze);Ye+me>K+te&&(K=Ye,te=me)}}if(o(xt)&&le[Mt].t){var _e=le[Mt].t.val,Ae=le[Mt].t.size;if(_e>vt){var ke=(xt*_e+(Ae-mt)*vt)/(_e-vt),Ee=(Ae*(1-vt)+(xt-mt)*(1-_e))/(_e-vt);ke+Ee>se+ne&&(se=ke,ne=Ee)}}}}}var De=f.constrain($-j.l-j.r,z,pe),Je=f.constrain(U-j.t-j.b,I,xe),Ue=Math.max(0,$-De),at=Math.max(0,U-Je);if(Ue){var rt=(K+te)/Ue;rt>1&&(K/=rt,te/=rt)}if(at){var ft=(se+ne)/at;ft>1&&(se/=ft,ne/=ft)}if(V.l=Math.round(K)+q.l,V.r=Math.round(te)+q.r,V.t=Math.round(ne)+q.t,V.b=Math.round(se)+q.b,V.p=Math.round(j.pad),V.w=Math.round($)-V.l-V.r,V.h=Math.round(U)-V.t-V.b,!H._replotting&&(M.didMarginChange(Y,V)||L(N))){"_redrawFromAutoMarginCount"in H?H._redrawFromAutoMarginCount++:H._redrawFromAutoMarginCount=1;var At=3*(1+Object.keys(ce).length);if(H._redrawFromAutoMarginCount<At)return n.call("_doPlot",N);H._size=Y,f.warn("Too many auto-margin redraws.")}B(N)};function B(N){var H=p.list(N,"",!0);["_adjustTickLabelsOverflow","_hideCounterAxisInsideTickLabels"].forEach(function($){for(var U=0;U<H.length;U++){var V=H[U][$];V&&V()}})}var O=["l","r","t","b","p","w","h"];M.didMarginChange=function(N,H){for(var $=0;$<O.length;$++){var U=O[$],V=N[U],j=H[U];if(!o(V)||Math.abs(j-V)>1)return!0}return!1},M.graphJson=function(N,H=!1,$="json",U=!1,V=!1){(U&&H&&!N._fullData||U&&!H&&!N._fullLayout)&&M.supplyDefaults(N);var j=U?N._fullData:N.data,q=U?N._fullLayout:N.layout,Y=(N._transitionData||{})._frames;function K(se,le){if(typeof se=="function")return le?"_function_":null;if(f.isPlainObject(se)){var ce={};return Object.keys(se).sort().forEach(function(fe){if(["_","["].indexOf(fe.charAt(0))===-1){if(typeof se[fe]=="function"){le&&(ce[fe]="_function");return}ce[fe]=K(se[fe],le)}}),ce}var pe=Array.isArray(se),xe=f.isTypedArray(se);if((pe||xe)&&se.dtype&&se.shape){var ye=se.bdata;return K({dtype:se.dtype,shape:se.shape,bdata:f.isArrayBuffer(ye)?s.encode(ye):ye},le)}return pe?se.map(function(fe){return K(fe,le)}):xe?f.simpleMap(se,f.identity):f.isJSDate(se)?f.ms2DateTimeLocal(+se):se}var te={data:(j||[]).map(function(se){var le=K(se);return H&&delete le.fit,le})};if(!H&&(te.layout=K(q),U)){var ne=q._size;te.layout.computed={margin:{b:ne.b,l:ne.l,r:ne.r,t:ne.t}}}return Y&&(te.frames=K(Y)),V&&(te.config=K(N._context,!0)),$==="object"?te:JSON.stringify(te)},M.modifyFrames=function(N,H){var $,U,V,j=N._transitionData._frames,q=N._transitionData._frameHash;for($=0;$<H.length;$++)switch(U=H[$],U.type){case"replace":V=U.value;var Y=(j[U.index]||{}).name,K=V.name;j[U.index]=q[K]=V,K!==Y&&(delete q[Y],q[K]=V);break;case"insert":V=U.value,q[V.name]=V,j.splice(U.index,0,V);break;case"delete":V=j[U.index],delete q[V.name],j.splice(U.index,1);break}return Promise.resolve()},M.computeFrame=function(N,H){var $=N._transitionData._frameHash,U,V,j,q;if(!H)throw new Error("computeFrame must be given a string frame name");var Y=$[H.toString()];if(!Y)return!1;for(var K=[Y],te=[Y.name];Y.baseframe&&(Y=$[Y.baseframe.toString()])&&te.indexOf(Y.name)===-1;)K.push(Y),te.push(Y.name);for(var ne={};Y=K.pop();)if(Y.layout&&(ne.layout=M.extendLayout(ne.layout,Y.layout)),Y.data){if(ne.data||(ne.data=[]),V=Y.traces,!V)for(V=[],U=0;U<Y.data.length;U++)V[U]=U;for(ne.traces||(ne.traces=[]),U=0;U<Y.data.length;U++)j=V[U],j!=null&&(q=ne.traces.indexOf(j),q===-1&&(q=ne.data.length,ne.traces[q]=j),ne.data[q]=M.extendTrace(ne.data[q],Y.data[U]))}return ne},M.recomputeFrameHash=function(N){for(var H=N._transitionData._frameHash={},$=N._transitionData._frames,U=0;U<$.length;U++){var V=$[U];V&&V.name&&(H[V.name]=V)}},M.extendObjectWithContainers=function(N,H,$){var U,V,j,q,Y,K,te,ne,se=f.extendDeepNoArrays({},H||{}),le=f.expandObjectPaths(se),ce={};if($&&$.length)for(j=0;j<$.length;j++)U=f.nestedProperty(le,$[j]),V=U.get(),V===void 0?f.nestedProperty(ce,$[j]).set(null):(U.set(null),f.nestedProperty(ce,$[j]).set(V));if(N=f.extendDeepNoArrays(N||{},le),$&&$.length){for(j=0;j<$.length;j++)if(Y=f.nestedProperty(ce,$[j]),te=Y.get(),!!te){for(K=f.nestedProperty(N,$[j]),ne=K.get(),Array.isArray(ne)||(ne=[],K.set(ne)),q=0;q<te.length;q++){var pe=te[q];pe===null?ne[q]=null:ne[q]=M.extendObjectWithContainers(ne[q],pe)}K.set(ne)}}return N},M.dataArrayContainers=["dimensions"],M.layoutArrayContainers=n.layoutArrayContainers,M.extendTrace=function(N,H){return M.extendObjectWithContainers(N,H,M.dataArrayContainers)},M.extendLayout=function(N,H){return M.extendObjectWithContainers(N,H,M.layoutArrayContainers)},M.transition=function(N,H,$,U,V,j){var q={redraw:V.redraw},Y={},K=[];return q.prepareFn=function(){for(var te=Array.isArray(H)?H.length:0,ne=U.slice(0,te),se=0;se<ne.length;se++){var le=ne[se],ce=N._fullData[le],pe=ce._module;if(pe){if(pe.animatable){var xe=pe.basePlotModule.name;Y[xe]||(Y[xe]=[]),Y[xe].push(le)}N.data[ne[se]]=M.extendTrace(N.data[ne[se]],H[se])}}var ye=f.expandObjectPaths(f.extendDeepNoArrays({},$)),fe=/^[xy]axis[0-9]*$/;for(var ae in ye)fe.test(ae)&&delete ye[ae].range;M.extendLayout(N.layout,ye),delete N.calcdata,M.supplyDefaults(N),M.doCalcdata(N);var ee=f.expandObjectPaths($);if(ee){var ie=N._fullLayout._plots;for(var Q in ie){var ue=ie[Q],ge=ue.xaxis,Me=ue.yaxis,Te=ge.range.slice(),je=Me.range.slice(),Ve=null,Ze=null,Ke=null,vt=null;Array.isArray(ee[ge._name+".range"])?Ve=ee[ge._name+".range"].slice():Array.isArray((ee[ge._name]||{}).range)&&(Ve=ee[ge._name].range.slice()),Array.isArray(ee[Me._name+".range"])?Ze=ee[Me._name+".range"].slice():Array.isArray((ee[Me._name]||{}).range)&&(Ze=ee[Me._name].range.slice()),Te&&Ve&&(ge.r2l(Te[0])!==ge.r2l(Ve[0])||ge.r2l(Te[1])!==ge.r2l(Ve[1]))&&(Ke={xr0:Te,xr1:Ve}),je&&Ze&&(Me.r2l(je[0])!==Me.r2l(Ze[0])||Me.r2l(je[1])!==Me.r2l(Ze[1]))&&(vt={yr0:je,yr1:Ze}),(Ke||vt)&&K.push(f.extendFlat({plotinfo:ue},Ke,vt))}}return Promise.resolve()},q.runFn=function(te){var ne,se=N._fullLayout._basePlotModules,le=K.length,ce;if($)for(ce=0;ce<se.length;ce++)se[ce].transitionAxes&&se[ce].transitionAxes(N,K,j,te);le?(ne=f.extendFlat({},j),ne.duration=0,delete Y.cartesian):ne=j;for(var pe in Y){var xe=Y[pe],ye=N._fullData[xe[0]]._module;ye.basePlotModule.plot(N,xe,ne,te)}},G(N,j,q)},M.transitionFromReact=function(N,H,$,U){var V=N._fullLayout,j=V.transition,q={},Y=[];return q.prepareFn=function(){var K=V._plots;q.redraw=!1,H.anim==="some"&&(q.redraw=!0),$.anim==="some"&&(q.redraw=!0);for(var te in K){var ne=K[te],se=ne.xaxis,le=ne.yaxis,ce=U[se._name].range.slice(),pe=U[le._name].range.slice(),xe=se.range.slice(),ye=le.range.slice();se.setScale(),le.setScale();var fe=null,ae=null;(se.r2l(ce[0])!==se.r2l(xe[0])||se.r2l(ce[1])!==se.r2l(xe[1]))&&(fe={xr0:ce,xr1:xe}),(le.r2l(pe[0])!==le.r2l(ye[0])||le.r2l(pe[1])!==le.r2l(ye[1]))&&(ae={yr0:pe,yr1:ye}),(fe||ae)&&Y.push(f.extendFlat({plotinfo:ne},fe,ae))}return Promise.resolve()},q.runFn=function(K){for(var te=N._fullData,ne=N._fullLayout,se=ne._basePlotModules,le,ce,pe,xe=[],ye=0;ye<te.length;ye++)xe.push(ye);function fe(){if(N._fullLayout)for(var ee=0;ee<se.length;ee++)se[ee].transitionAxes&&se[ee].transitionAxes(N,Y,le,K)}function ae(){if(N._fullLayout)for(var ee=0;ee<se.length;ee++)se[ee].plot(N,pe,ce,K)}Y.length&&H.anim?j.ordering==="traces first"?(le=f.extendFlat({},j,{duration:0}),pe=xe,ce=j,setTimeout(fe,j.duration),ae()):(le=j,pe=null,ce=f.extendFlat({},j,{duration:0}),setTimeout(ae,le.duration),fe()):Y.length?(le=j,fe()):H.anim&&(pe=xe,ce=j,ae())},G(N,j,q)};function G(N,H,$){var U=!1;function V(se){var le=Promise.resolve();if(!se)return le;for(;se.length;)le=le.then(se.shift());return le}function j(se){if(se)for(;se.length;)se.shift()}function q(){return N.emit("plotly_transitioning",[]),new Promise(function(se){N._transitioning=!0,H.duration>0&&(N._transitioningWithDuration=!0),N._transitionData._interruptCallbacks.push(function(){U=!0}),$.redraw&&N._transitionData._interruptCallbacks.push(function(){return n.call("redraw",N)}),N._transitionData._interruptCallbacks.push(function(){N.emit("plotly_transitioninterrupted",[])});var le=0,ce=0;function pe(){return le++,function(){ce++,!U&&ce===le&&Y(se)}}$.runFn(pe),setTimeout(pe())})}function Y(se){if(N._transitionData)return j(N._transitionData._interruptCallbacks),Promise.resolve().then(function(){if($.redraw)return n.call("redraw",N)}).then(function(){N._transitioning=!1,N._transitioningWithDuration=!1,N.emit("plotly_transitioned",[])}).then(se)}function K(){if(N._transitionData)return N._transitioning=!1,V(N._transitionData._interruptCallbacks)}var te=[M.previousPromises,K,$.prepareFn,M.rehover,M.reselect,q],ne=f.syncOrAsync(te,N);return(!ne||!ne.then)&&(ne=Promise.resolve()),ne.then(function(){return N})}M.doCalcdata=function(N,H){var $=p.list(N),U=N._fullData,V=N._fullLayout,j,q,Y,K=new Array(U.length),te=(N.calcdata||[]).slice();for(N.calcdata=K,V._numBoxes=0,V._numViolins=0,V._violinScaleGroupStats={},N._hmpixcount=0,N._hmlumcount=0,V._piecolormap={},V._sunburstcolormap={},V._treemapcolormap={},V._iciclecolormap={},V._funnelareacolormap={},Y=0;Y<U.length;Y++)if(Array.isArray(H)&&H.indexOf(Y)===-1){K[Y]=te[Y];continue}for(Y=0;Y<U.length;Y++)j=U[Y],j._arrayAttrs=u.findArrayAttributes(j),j._extremes={};var ne=V._subplots.polar||[];for(Y=0;Y<ne.length;Y++)$.push(V[ne[Y]].radialaxis,V[ne[Y]].angularaxis);for(var se in V._colorAxes){var le=V[se];le.cauto!==!1&&(delete le.cmin,delete le.cmax)}function ce(xe,ye){if(j=U[xe],q=j._module,!!q.isContainer===ye){var fe=[];j.visible===!0&&j._length!==0&&q&&q.calc&&(fe=q.calc(N,j)),(!Array.isArray(fe)||!fe[0])&&(fe=[{x:d,y:d}]),fe[0].t||(fe[0].t={}),fe[0].trace=j,K[xe]=fe}}for(Z($,U,V),Y=0;Y<U.length;Y++)ce(Y,!0);for(Y=0;Y<U.length;Y++)ce(Y,!1);J(N);var pe=X($,N);if(pe.length){for(V._numBoxes=0,V._numViolins=0,Y=0;Y<pe.length;Y++)ce(pe[Y],!0);for(Y=0;Y<pe.length;Y++)ce(pe[Y],!1);J(N)}n.getComponentMethod("fx","calc")(N),n.getComponentMethod("errorbars","calc")(N)};var W=/(total|sum|min|max|mean|geometric mean|median) (ascending|descending)/;function X(N,H){var $=[],U,V,j,q,Y;function K(Mt,lt,qe){var Ye=lt._id.charAt(0);if(Mt==="histogram2dcontour"){var me=lt._counterAxes[0],_e=p.getFromId(H,me),Ae=Ye==="x"||me==="x"&&_e.type==="category",ke=Ye==="y"||me==="y"&&_e.type==="category";return function(Ee,De){return Ee===0||De===0||Ae&&Ee===qe[De].length-1||ke&&De===qe.length-1?-1:(Ye==="y"?De:Ee)-1}}else return function(Ee,De){return Ye==="y"?De:Ee}}var te={min:function(Mt){return f.aggNums(Math.min,null,Mt)},max:function(Mt){return f.aggNums(Math.max,null,Mt)},sum:function(Mt){return f.aggNums(function(lt,qe){return lt+qe},null,Mt)},total:function(Mt){return f.aggNums(function(lt,qe){return lt+qe},null,Mt)},mean:function(Mt){return f.mean(Mt)},"geometric mean":function(Mt){return f.geometricMean(Mt)},median:function(Mt){return f.median(Mt)}};function ne(Mt,lt){return Mt[1]-lt[1]}function se(Mt,lt){return lt[1]-Mt[1]}for(U=0;U<N.length;U++){var le=N[U];if(le.type==="category"){var ce=le.categoryorder.match(W);if(ce){var pe=ce[1],xe=ce[2],ye=le._id.charAt(0),fe=ye==="x",ae=[];for(V=0;V<le._categories.length;V++)ae.push([le._categories[V],[]]);for(V=0;V<le._traceIndices.length;V++){var ee=le._traceIndices[V],ie=H._fullData[ee];if(ie.visible===!0){var Q=ie.type;n.traceIs(ie,"histogram")&&(delete ie._xautoBinFinished,delete ie._yautoBinFinished);var ue=Q==="splom",ge=Q==="scattergl",Me=H.calcdata[ee];for(j=0;j<Me.length;j++){var Te=Me[j],je,Ve;if(ue){var Ze=ie._axesDim[le._id];if(!fe){var Ke=ie._diag[Ze][0];Ke&&(le=H._fullLayout[p.id2name(Ke)])}var vt=Te.trace.dimensions[Ze].values;for(q=0;q<vt.length;q++)for(je=le._categoriesMap[vt[q]],Y=0;Y<Te.trace.dimensions.length;Y++)if(Y!==Ze){var xt=Te.trace.dimensions[Y];ae[je][1].push(xt.values[q])}}else if(ge){for(q=0;q<Te.t.x.length;q++)fe?(je=Te.t.x[q],Ve=Te.t.y[q]):(je=Te.t.y[q],Ve=Te.t.x[q]),ae[je][1].push(Ve);Te.t&&Te.t._scene&&delete Te.t._scene.dirty}else if(Te.hasOwnProperty("z")){Ve=Te.z;var Pt=K(ie.type,le,Ve);for(q=0;q<Ve.length;q++)for(Y=0;Y<Ve[q].length;Y++)je=Pt(Y,q),je+1&&ae[je][1].push(Ve[q][Y])}else{if(je=Te.p,je===void 0&&(je=Te[ye]),isNaN(je)||je<0)continue;for(Ve=Te.s,Ve===void 0&&(Ve=Te.v),Ve===void 0&&(Ve=fe?Te.y:Te.x),Array.isArray(Ve)||(Ve===void 0?Ve=[]:Ve=[Ve]),q=0;q<Ve.length;q++)ae[je][1].push(Ve[q])}}}}le._categoriesValue=ae;var mt=[];for(V=0;V<ae.length;V++)mt.push([ae[V][0],te[pe](ae[V][1])]);mt.sort(xe==="descending"?se:ne),le._categoriesAggregatedValue=mt,le._initialCategories=mt.map(function(Mt){return Mt[0]}),$=$.concat(le.sortByInitialCategories())}}}return $}function Z(N,H,$){var U={};function V(K){K.clearCalc(),K.type==="multicategory"&&K.setupMultiCategory(H),U[K._id]=1}f.simpleMap(N,V);for(var j=$._axisMatchGroups||[],q=0;q<j.length;q++)for(var Y in j[q])U[Y]||V($[p.id2name(Y)])}function J(N){var H=N._fullLayout,$=H._visibleModules,U={},V,j,q;for(j=0;j<$.length;j++){var Y=$[j],K=Y.crossTraceCalc;if(K){var te=Y.basePlotModule.name;U[te]?f.pushUnique(U[te],K):U[te]=[K]}}for(q in U){var ne=U[q],se=H._subplots[q];if(Array.isArray(se))for(V=0;V<se.length;V++){var le=se[V],ce=q==="cartesian"?H._plots[le]:H[le];for(j=0;j<ne.length;j++)ne[j](N,ce,le)}else for(j=0;j<ne.length;j++)ne[j](N)}}M.rehover=function(N){N._fullLayout._rehover&&N._fullLayout._rehover()},M.redrag=function(N){N._fullLayout._redrag&&N._fullLayout._redrag()},M.reselect=function(N){var H=N._fullLayout,$=(N.layout||{}).selections,U=H._previousSelections;H._previousSelections=$;var V=H._reselect||JSON.stringify($)!==JSON.stringify(U);n.getComponentMethod("selections","reselect")(N,V)},M.generalUpdatePerTraceModule=function(N,H,$,U){var V=H.traceHash,j={},q;for(q=0;q<$.length;q++){var Y=$[q],K=Y[0].trace;K.visible&&(j[K.type]=j[K.type]||[],j[K.type].push(Y))}for(var te in V)if(!j[te]){var ne=V[te][0],se=ne[0].trace;se.visible=!1,j[te]=[ne]}for(var le in j){var ce=j[le],pe=ce[0][0].trace._module;pe.plot(N,H,f.filterVisible(ce),U)}H.traceHash=j},M.plotBasePlot=function(N,H,$,U,V){var j=n.getModule(N),q=v(H.calcdata,j)[0];j.plot(H,q,U,V)},M.cleanBasePlot=function(N,H,$,U,V){var j=V._has&&V._has(N),q=$._has&&$._has(N);j&&!q&&V["_"+N+"layer"].selectAll("g.trace").remove()}}}),Oh=de({"src/constants/xmlns_namespaces.js"(e){"use strict";e.xmlns="http://www.w3.org/2000/xmlns/",e.svg="http://www.w3.org/2000/svg",e.xlink="http://www.w3.org/1999/xlink",e.svgAttrs={xmlns:e.svg,"xmlns:xlink":e.xlink}}}),Bl=de({"src/constants/alignment.js"(e,r){"use strict";r.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:"right",right:"left",top:"bottom",bottom:"top"}}}}),Zo=de({"src/lib/svg_text_utils.js"(e){"use strict";var r=Yr(),t=Qt(),i=t.strTranslate,a=Oh(),o=Bl().LINE_SPACING,s=/([^$]*)([$]+[^$]*[$]+)([^$]*)/,l=W=>W?W.match(s):null;e.matchTex=l,e.convertToTspans=function(W,X,Z){var J=W.text(),N=!W.attr("data-notex")&&X&&X._context.typesetMath&&l(J);N&&!g()&&(N=null);var H=r.select(W.node().parentNode);if(H.empty())return;var $=W.attr("class")?W.attr("class").split(" ")[0]:"text";$+="-math",H.selectAll("svg."+$).remove(),H.selectAll("g."+$+"-group").remove(),W.style("display",null).attr({"data-unformatted":J,"data-math":"N"});function U(){H.empty()||($=W.attr("class")+"-math",H.select("svg."+$).remove()),W.text("").style("white-space","pre");var V=L(W.node(),J);V&&W.style("pointer-events","all"),e.positionText(W),Z&&Z.call(W)}return N?(X&&X._promises||[]).push(new Promise(function(V){W.style("display","none");var j=parseInt(W.node().style.fontSize,10),q={fontSize:j},Y=W.attr("text-anchor");m(N[2],q,function(K,te,ne){H.selectAll("svg."+$).remove(),H.selectAll("g."+$+"-group").remove();var se=K&&K.select("svg");if(!se||!se.node()){U(),V();return}W.style("display","none");var le=H.append("g").classed($+"-group",!0).attr({"pointer-events":"none","data-unformatted":J,"data-math":"Y"});le.node().appendChild(se.node()),te&&te.node()&&se.node().insertBefore(te.node().cloneNode(!0),se.node().firstChild);var ce=ne.width,pe=ne.height;se.attr({class:$,height:pe,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none","font-size":q.fontSize+"px"});var xe=W.node().style.fill||"black",ye=se.select("g");ye.attr({fill:xe,stroke:xe});var fe=ye.node().getBoundingClientRect(),ae=fe.width,ee=fe.height;(ae>ce||ee>pe)&&(se.style("overflow","hidden"),fe=se.node().getBoundingClientRect(),ae=fe.width,ee=fe.height);var ie=+W.attr("x"),Q=+W.attr("y"),ue=j||W.node().getBoundingClientRect().height,ge=-ue/4;$[0]==="y"?le.attr({transform:"rotate("+[-90,ie,Q]+")"+i(-ae/2,ge-ee/2)}):$[0]==="l"?Q=ge-ee/2:$[0]==="a"&&$.indexOf("atitle")!==0?(ie=0,Q=ge):(ie=ie-ae*(Y==="middle"?.5:Y==="end"?1:0),Q=Q+ge-ee/2),se.attr({x:ie,y:Q}),Z&&Z.call(W,le),V(le)})})):U(),W};var n=/(<|<|<)/g,u=/(>|>|>)/g;function c(W){return W.replace(n,"\\lt ").replace(u,"\\gt ")}var f=null,h=()=>typeof MathJax<"u"&&MathJax.version?parseInt(MathJax.version.split(".")[0]):null,d=!1,p=!1;function g(){let W=h();return W===3||W===4?!0:(W===null?d||(d=!0,t.warn("MathJax is not loaded. Math equations will not be rendered.")):p||(p=!0,t.warn("Unsupported MathJax version:",MathJax.version)),!1)}function m(W,X,Z){let J=h();var N;let H=function(){if(!f){let j=MathJax._.output.svg_ts.SVG,q=t.extendFlat({},MathJax.config.svg,{fontCache:"local"});J===4&&(q.linebreaks=t.extendFlat({},q.linebreaks,{inline:!1})),f=MathJax._.mathjax.mathjax.document(document,t.extendFlat({},MathJax.config.options,{InputJax:MathJax.startup.input,OutputJax:new j(q)}))}let U="math-output-"+t.randstr({},64);N=r.select("body").append("div").attr({id:U}).style({visibility:"hidden",position:"absolute","font-size":X.fontSize+"px"});let V=c(W).replace(/^\$+|\$+$/g,"");return MathJax._.mathjax.mathjax.handleRetriesFor(function(){return f.convert(V,{display:!1})}).then(function(j){N.node().appendChild(j)})},$=function(){let U=N.select(".MathJax"),V=!U.empty()&&N.select("svg").node();if(!V)t.log("There was an error in the tex syntax.",W),Z();else{let j=V.getBoundingClientRect(),q=U.select("defs");Z(U,q,j)}N.remove()};Promise.resolve().then(H).then($).catch(U=>{t.log("MathJax typesetting failed.",W,U),N&&N.remove(),Z()})}var y={sup:"font-size:70%",sub:"font-size:70%",s:"text-decoration:line-through",u:"text-decoration:underline",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},_={sub:"0.3em",sup:"-0.6em"},v={sub:"-0.21em",sup:"0.42em"},x="\u200B",S=["http:","https:","mailto:","",void 0,":"],M=e.NEWLINES=/(\r
?|
)/g,C=/(<[^<>]*>)/,w=/<(\/?)([^ >]*)(\s+(.*))?>/i,k=/<br(\s+.*)?>/i;e.BR_TAG_ALL=/<br(\s+.*)?>/gi;var A=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,b=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,E=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,T=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function F(W,X){if(!W)return null;var Z=W.match(X),J=Z&&(Z[3]||Z[4]);return J&&z(J)}var D=/(^|;)\s*color:/;e.plainText=function(W,X){X=X||{};for(var Z=X.len!==void 0&&X.len!==-1?X.len:1/0,J=X.allowedTags!==void 0?X.allowedTags:["br"],N="...",H=N.length,$=W.split(C),U=[],V="",j=0,q=0;q<$.length;q++){var Y=$[q],K=Y.match(w),te=K&&K[2].toLowerCase();if(te)J.indexOf(te)!==-1&&(U.push(Y),V=te);else{var ne=Y.length;if(j+ne<Z)U.push(Y),j+=ne;else if(j<Z){var se=Z-j;V&&(V!=="br"||se<=H||ne<=H)&&U.pop(),Z>H?U.push(Y.slice(0,Math.max(0,se-H))+N):U.push(Y.slice(0,se));break}V=""}}return U.join("")};var R={mu:"\u03BC",amp:"&",lt:"<",gt:">",nbsp:"\xA0",times:"\xD7",plusmn:"\xB1",deg:"\xB0"},P=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function z(W){return W.replace(P,function(X,Z){var J;return Z.charAt(0)==="#"?J=I(Z.charAt(1)==="x"?parseInt(Z.slice(2),16):parseInt(Z.slice(1),10)):J=R[Z],J||X})}e.convertEntities=z;function I(W){if(!(W>1114111)){var X=String.fromCodePoint;if(X)return X(W);var Z=String.fromCharCode;return W<=65535?Z(W):Z((W>>10)+55232,W%1024+56320)}}function L(W,X){X=X.replace(M," ");var Z=!1,J=[],N,H=-1;function $(){H++;var ae=document.createElementNS(a.svg,"tspan");r.select(ae).attr({class:"line",dy:H*o+"em"}),W.appendChild(ae),N=ae;var ee=J;if(J=[{node:ae}],ee.length>1)for(var ie=1;ie<ee.length;ie++)U(ee[ie])}function U(ae){var ee=ae.type,ie={},Q;if(ee==="a"){Q="a";var ue=ae.target,ge=ae.href,Me=ae.popup;ge&&(ie={"xlink:xlink:show":ue==="_blank"||ue.charAt(0)!=="_"?"new":"replace",target:ue,"xlink:xlink:href":ge},Me&&(ie.onclick='window.open(this.href.baseVal,this.target.baseVal,"'+Me+'");return false;'))}else Q="tspan";ae.style&&(ie.style=ae.style);var Te=document.createElementNS(a.svg,Q);if(ee==="sup"||ee==="sub"){V(N,x),N.appendChild(Te);var je=document.createElementNS(a.svg,"tspan");V(je,x),r.select(je).attr("dy",v[ee]),ie.dy=_[ee],N.appendChild(Te),N.appendChild(je)}else N.appendChild(Te);r.select(Te).attr(ie),N=ae.node=Te,J.push(ae)}function V(ae,ee){ae.appendChild(document.createTextNode(ee))}function j(ae){if(J.length===1){t.log("Ignoring unexpected end tag </"+ae+">.",X);return}var ee=J.pop();ae!==ee.type&&t.log("Start tag <"+ee.type+"> doesnt match end tag <"+ae+">. Pretending it did match.",X),N=J[J.length-1].node}var q=k.test(X);q?$():(N=W,J=[{node:W}]);for(var Y=X.split(C),K=0;K<Y.length;K++){var te=Y[K],ne=te.match(w),se=ne&&ne[2].toLowerCase(),le=y[se];if(se==="br")$();else if(le===void 0)V(N,z(te));else if(ne[1])j(se);else{var ce=ne[4],pe={type:se},xe=F(ce,A);if(xe?(xe=xe.replace(D,"$1 fill:"),le&&(xe+=";"+le)):le&&(xe=le),xe&&(pe.style=xe),se==="a"){Z=!0;var ye=F(ce,b);if(ye){var fe=B(ye);fe&&(pe.href=fe,pe.target=F(ce,E)||"_blank",pe.popup=F(ce,T))}}U(pe)}}return Z}function B(W){var X=encodeURI(decodeURI(W)),Z=document.createElement("a"),J=document.createElement("a");Z.href=W,J.href=X;var N=Z.protocol,H=J.protocol;return S.indexOf(N)!==-1&&S.indexOf(H)!==-1?X:""}e.sanitizeHTML=function(X){X=X.replace(M," ");for(var Z=document.createElement("p"),J=Z,N=[],H=X.split(C),$=0;$<H.length;$++){var U=H[$],V=U.match(w),j=V&&V[2].toLowerCase();if(j in y)if(V[1])N.length&&(J=N.pop());else{var q=V[4],Y=F(q,A),K=Y?{style:Y}:{};if(j==="a"){var te=F(q,b);if(te){var ne=B(te);if(ne){K.href=ne;var se=F(q,E);se&&(K.target=se)}}}var le=document.createElement(j);J.appendChild(le),r.select(le).attr(K),J=le,N.push(le)}else J.appendChild(document.createTextNode(z(U)))}var ce="innerHTML";return Z[ce]},e.lineCount=function(X){return X.selectAll("tspan.line").size()||1},e.positionText=function(X,Z,J){return X.each(function(){var N=r.select(this);function H(V,j){return j===void 0?(j=N.attr(V),j===null&&(N.attr(V,0),j=0)):N.attr(V,j),j}var $=H("x",Z),U=H("y",J);this.nodeName==="text"&&N.selectAll("tspan.line").attr({x:$,y:U})})};function O(W,X,Z){var J=Z.horizontalAlign,N=Z.verticalAlign||"top",H=W.node().getBoundingClientRect(),$=X.node().getBoundingClientRect(),U,V,j;return N==="bottom"?V=function(){return H.bottom-U.height}:N==="middle"?V=function(){return H.top+(H.height-U.height)/2}:V=function(){return H.top},J==="right"?j=function(){return H.right-U.width}:J==="center"?j=function(){return H.left+(H.width-U.width)/2}:j=function(){return H.left},function(){U=this.node().getBoundingClientRect();var q=j()-$.left,Y=V()-$.top,K=Z.gd||{};if(Z.gd){K._fullLayout._calcInverseTransform(K);var te=t.apply3DTransform(K._fullLayout._invTransform)(q,Y);q=te[0],Y=te[1]}return this.style({top:Y+"px",left:q+"px","z-index":1e3}),this}}var G="1px ";e.makeTextShadow=function(W){var X=G,Z=G,J=G;return X+Z+J+W+", -"+X+"-"+Z+J+W+", "+X+"-"+Z+J+W+", -"+X+Z+J+W},e.makeEditable=function(W,X){var Z=X.gd,J=X.delegate,N=r.dispatch("edit","input","cancel"),H=J||W;if(W.style({"pointer-events":J?"none":"all"}),W.size()!==1)throw new Error("boo");function $(){V(),W.style({opacity:0});var j=H.attr("class"),q;j?q="."+j.split(" ")[0]+"-math-group":q="[class*=-math-group]",q&&r.select(W.node().parentNode).select(q).style({opacity:0})}function U(j){var q=j.node(),Y=document.createRange();Y.selectNodeContents(q);var K=window.getSelection();K.removeAllRanges(),K.addRange(Y),q.focus()}function V(){var j=r.select(Z),q=j.select(".svg-container"),Y=q.append("div"),K=W.node().style,te=parseFloat(K.fontSize||12),ne=X.text;ne===void 0&&(ne=W.attr("data-unformatted")),Y.classed("plugin-editable editable",!0).style({position:"absolute","font-family":K.fontFamily||"Arial","font-size":te,color:X.fill||K.fill||"black",opacity:1,"background-color":X.background||"transparent",outline:"#ffffff33 1px solid",margin:[-te/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(ne).call(O(W,q,X)).on("blur",function(){Z._editing=!1,W.text(this.textContent).style({opacity:1});var se=r.select(this).attr("class"),le;se?le="."+se.split(" ")[0]+"-math-group":le="[class*=-math-group]",le&&r.select(W.node().parentNode).select(le).style({opacity:0});var ce=this.textContent;r.select(this).transition().duration(0).remove(),r.select(document).on("mouseup",null),N.edit.call(W,ce)}).on("focus",function(){var se=this;Z._editing=!0,r.select(document).on("mouseup",function(){if(r.event.target===se)return!1;document.activeElement===Y.node()&&Y.node().blur()})}).on("keyup",function(){r.event.which===27?(Z._editing=!1,W.style({opacity:1}),r.select(this).style({opacity:0}).on("blur",function(){return!1}).transition().remove(),N.cancel.call(W,this.textContent)):(N.input.call(W,this.textContent),r.select(this).call(O(W,q,X)))}).on("keydown",function(){r.event.which===13&&this.blur()}).call(U)}return X.immediate?$():H.on("click",$),r.rebind(W,N,"on")}}}),Wu=de({"src/components/colorscale/helpers.js"(e,r){"use strict";var t=Yr(),i=da(),a=Qt(),o=ta(),s=vv().isValid;function l(g,m,y){var _=m?a.nestedProperty(g,m).get()||{}:g,v=_[y||"color"];v&&v._inputArray&&(v=v._inputArray);var x=!1;if(a.isArrayOrTypedArray(v)){for(var S=0;S<v.length;S++)if(i(v[S])){x=!0;break}}return a.isPlainObject(_)&&(x||_.showscale===!0||i(_.cmin)&&i(_.cmax)||s(_.colorscale)||a.isPlainObject(_.colorbar))}var n=["showscale","autocolorscale","colorscale","reversescale","colorbar"],u=["min","max","mid","auto"];function c(g){var m=g._colorAx,y=m||g,_={},v,x,S;for(x=0;x<n.length;x++)S=n[x],_[S]=y[S];if(m)for(v="c",x=0;x<u.length;x++)S=u[x],_[S]=y["c"+S];else{var M;for(x=0;x<u.length;x++){if(S=u[x],M="c"+S,M in y){_[S]=y[M];continue}M="z"+S,M in y&&(_[S]=y[M])}v=M.charAt(0)}return _._sync=function(C,w){var k=u.indexOf(C)!==-1?v+C:C;y[k]=y["_"+k]=w},_}function f(g){for(var m=c(g),y=m.min,_=m.max,v=m.reversescale?h(m.colorscale):m.colorscale,x=v.length,S=new Array(x),M=new Array(x),C=0;C<x;C++){var w=v[C];S[C]=y+w[0]*(_-y),M[C]=w[1]}return{domain:S,range:M}}function h(g){for(var m=g.length,y=new Array(m),_=m-1,v=0;_>=0;_--,v++){var x=g[_];y[v]=[1-x[0],x[1]]}return y}function d(g,m){m=m||{};for(var y=g.domain,_=g.range,v=_.length,x=new Array(v),S=0;S<v;S++)x[S]=o.rgbaArray(_[S]);var M=t.scale.linear().domain(y).range(x).clamp(!0),C=m.noNumericCheck,w=m.returnArray,k;return C&&w?k=M:C?k=function(A){return o.rgbaArrayToString(M(A))}:w?k=function(A){return i(A)?M(A):o.isValid(A)?A:o.defaultLine}:k=function(A){return i(A)?o.rgbaArrayToString(M(A)):o.isValid(A)?A:o.defaultLine},k.domain=M.domain,k.range=function(){return _},k}function p(g,m){return d(f(g),m)}r.exports={hasColorscale:l,extractOpts:c,extractScale:f,flipScale:h,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:p}}}),Ns=de({"src/plots/cartesian/axis_format_attributes.js"(e,r){"use strict";var t=pE(),i=t.FORMAT_LINK,a=t.DATE_FORMAT_LINK;function o(n,u){return{valType:"string",dflt:"",editType:"none",description:(u?s:l)("hover text",n)+["By default the values are formatted using "+(u?"generic number format":"`"+n+"axis.hoverformat`")+"."].join(" ")}}function s(n,u){return["Sets the "+n+" formatting rule"+(u?" for `"+u+"`":""),"using d3 formatting mini-languages","which are very similar to those in Python. For numbers, see: "+i+"."].join(" ")}function l(n,u){return s(n,u)+[" And for dates see: "+a+".","We add two items to d3's date formatter:","*%h* for half of the year as a decimal number as well as","*%{n}f* for fractional seconds","with n digits. For example, *2016-10-13 09:15:23.456* with tickformat","*%H~%M~%S.%2f* would display *09~15~23.46*"].join(" ")}r.exports={axisHoverFormat:o,descriptionOnlyNumbers:s,descriptionWithDates:l}}}),Mu=de({"src/plots/cartesian/layout_attributes.js"(e,r){"use strict";var t=us(),i=Jo(),a=fu().dash,o=fn().extendFlat,s=Ro().templatedArray,l=Vo().templateFormatStringDescription,n=Ns().descriptionWithDates,u=cn().ONEDAY,c=zl(),f=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN,d={valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},p=o({},d,{values:d.values.slice().concat(["sync"])});function g(b){return{valType:"integer",min:0,dflt:b?5:0,editType:"ticks"}}var m={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},y={valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},_={valType:"data_array",editType:"ticks"},v={valType:"enumerated",values:["outside","inside",""],editType:"ticks"};function x(b){var E={valType:"number",min:0,editType:"ticks"};return b||(E.dflt=5),E}function S(b){var E={valType:"number",min:0,editType:"ticks"};return b||(E.dflt=1),E}var M={valType:"color",dflt:i.defaultLine,editType:"ticks"},C={valType:"color",dflt:i.lightLine,editType:"ticks"};function w(b){var E={valType:"number",min:0,editType:"ticks"};return b||(E.dflt=1),E}var k=o({},a,{editType:"ticks"}),A={valType:"boolean",editType:"ticks"};r.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:i.defaultLine,editType:"ticks"},title:{text:{valType:"string",editType:"ticks"},font:t({editType:"ticks",description:"Sets this axis' title font."}),standoff:{valType:"number",min:0,editType:"ticks"},editType:"ticks"},type:{valType:"enumerated",values:["-","linear","log","date","category","multicategory"],dflt:"-",editType:"calc",_noTemplating:!0},autotypenumbers:{valType:"enumerated",values:["convert types","strict"],dflt:"convert types",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed","min reversed","max reversed","min","max"],dflt:!0,editType:"axrange",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},autorangeoptions:{minallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmin:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},clipmax:{valType:"any",editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},include:{valType:"any",arrayOk:!0,editType:"plot",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},editType:"plot"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"plot"},range:{valType:"info_array",items:[{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0},{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0}],editType:"axrange",impliedEdits:{autorange:!1},anim:!0},minallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},maxallowed:{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},modebardisable:{valType:"flaglist",flags:["autoscale","zoominout"],extras:["none"],dflt:"none",editType:"modebar"},insiderange:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},scaleanchor:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString(),!1],editType:"plot"},scaleratio:{valType:"number",min:0,dflt:1,editType:"plot"},constrain:{valType:"enumerated",values:["range","domain"],editType:"plot"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"plot"},matches:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"calc"},rangebreaks:s("rangebreak",{enabled:{valType:"boolean",dflt:!0,editType:"calc"},bounds:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},pattern:{valType:"enumerated",values:[h,f,""],editType:"calc"},values:{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"any",editType:"calc"}},dvalue:{valType:"number",editType:"calc",min:0,dflt:u},editType:"calc"}),tickmode:p,nticks:g(),tick0:m,dtick:y,ticklabelstep:{valType:"integer",min:1,dflt:1,editType:"ticks"},tickvals:_,ticktext:{valType:"data_array",editType:"ticks"},ticks:v,tickson:{valType:"enumerated",values:["labels","boundaries"],dflt:"labels",editType:"ticks"},ticklabelmode:{valType:"enumerated",values:["instant","period"],dflt:"instant",editType:"ticks"},ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside",editType:"calc"},ticklabeloverflow:{valType:"enumerated",values:["allow","hide past div","hide past domain"],editType:"calc"},ticklabelshift:{valType:"integer",dflt:0,editType:"ticks"},ticklabelstandoff:{valType:"integer",dflt:0,editType:"ticks"},ticklabelindex:{valType:"integer",arrayOk:!0,editType:"calc"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:x(),tickwidth:S(),tickcolor:M,showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},labelalias:{valType:"any",dflt:!1,editType:"ticks"},automargin:{valType:"flaglist",flags:["height","width","left","right","top","bottom"],extras:[!0,!1],dflt:!1,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:o({},a,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},spikesnap:{valType:"enumerated",values:["data","cursor","hovered data"],dflt:"hovered data",editType:"none"},tickfont:t({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},autotickangles:{valType:"info_array",freeLength:!0,items:{valType:"angle"},dflt:[0,30,90],editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B","SI extended"],dflt:"B",editType:"ticks"},minexponent:{valType:"number",dflt:3,min:0,editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks",description:n("tick label")},tickformatstops:s("tickformatstop",{enabled:{valType:"boolean",dflt:!0,editType:"ticks"},dtickrange:{valType:"info_array",items:[{valType:"any",editType:"ticks"},{valType:"any",editType:"ticks"}],editType:"ticks"},value:{valType:"string",dflt:"",editType:"ticks"},editType:"ticks"}),hoverformat:{valType:"string",dflt:"",editType:"none",description:n("hover text")},unifiedhovertitle:{text:{valType:"string",dflt:"",editType:"none"},editType:"none"},showline:{valType:"boolean",dflt:!1,editType:"ticks+layoutstyle"},linecolor:{valType:"color",dflt:i.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:A,gridcolor:C,gridwidth:w(),griddash:k,zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:i.defaultLine,editType:"ticks"},zerolinelayer:{valType:"enumerated",values:["above traces","below traces"],dflt:"below traces",editType:"plot"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},showdividers:{valType:"boolean",dflt:!0,editType:"ticks"},dividercolor:{valType:"color",dflt:i.defaultLine,editType:"ticks"},dividerwidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},minor:{tickmode:d,nticks:g("minor"),tick0:m,dtick:y,tickvals:_,ticks:v,ticklen:x("minor"),tickwidth:S("minor"),tickcolor:M,gridcolor:C,gridwidth:w("minor"),griddash:k,showgrid:A,editType:"ticks"},minorloglabels:{valType:"enumerated",values:["small digits","complete","none"],dflt:"small digits",editType:"calc"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},autoshift:{valType:"boolean",dflt:!1,editType:"plot"},shift:{valType:"number",editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array","total ascending","total descending","min ascending","min descending","max ascending","max descending","sum ascending","sum descending","mean ascending","mean descending","geometric mean ascending","geometric mean descending","median ascending","median descending"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},uirevision:{valType:"any",editType:"none"},editType:"calc"}}}),Aw=de({"src/components/colorbar/attributes.js"(e,r){"use strict";var t=Mu(),i=us(),a=fn().extendFlat,o=Ps().overrideAll;r.exports=o({orientation:{valType:"enumerated",values:["h","v"],dflt:"v"},thicknessmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels"},thickness:{valType:"number",min:0,dflt:30},lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number"},xref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},xanchor:{valType:"enumerated",values:["left","center","right"]},xpad:{valType:"number",min:0,dflt:10},y:{valType:"number"},yref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},yanchor:{valType:"enumerated",values:["top","middle","bottom"]},ypad:{valType:"number",min:0,dflt:10},outlinecolor:t.linecolor,outlinewidth:t.linewidth,bordercolor:t.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:t.minor.tickmode,nticks:t.nticks,tick0:t.tick0,dtick:t.dtick,tickvals:t.tickvals,ticktext:t.ticktext,ticks:a({},t.ticks,{dflt:""}),ticklabeloverflow:a({},t.ticklabeloverflow,{}),ticklabelposition:{valType:"enumerated",values:["outside","inside","outside top","inside top","outside left","inside left","outside right","inside right","outside bottom","inside bottom"],dflt:"outside"},ticklen:t.ticklen,tickwidth:t.tickwidth,tickcolor:t.tickcolor,ticklabelstep:t.ticklabelstep,showticklabels:t.showticklabels,labelalias:t.labelalias,tickfont:i({description:"Sets the color bar's tick label font"}),tickangle:t.tickangle,tickformat:t.tickformat,tickformatstops:t.tickformatstops,tickprefix:t.tickprefix,showtickprefix:t.showtickprefix,ticksuffix:t.ticksuffix,showticksuffix:t.showticksuffix,separatethousands:t.separatethousands,exponentformat:t.exponentformat,minexponent:t.minexponent,showexponent:t.showexponent,title:{text:{valType:"string"},font:i({description:"Sets this color bar's title font."}),side:{valType:"enumerated",values:["right","top","bottom"]}}},"colorbars","from-root")}}),cs=de({"src/components/colorscale/attributes.js"(e,r){"use strict";var t=Aw(),i=(s1(),ti(mv)).counter,a=(gv(),ti(c0)).default,o=vv().scales,s=a(o);function l(n){return"`"+n+"`"}r.exports=function(u,c){u=u||"",c=c||{};var f=c.cLetter||"c",h="onlyIfNumerical"in c?c.onlyIfNumerical:!!u,d="noScale"in c?c.noScale:u==="marker.line",p="showScaleDflt"in c?c.showScaleDflt:f==="z",g=typeof c.colorscaleDflt=="string"?o[c.colorscaleDflt]:null,m=c.editTypeOverride||"",y=u?u+".":"",_,v;"colorAttr"in c?(_=c.colorAttr,v=c.colorAttr):(_={z:"z",c:"color"}[f],v="in "+l(y+_));var x=h?" Has an effect only if "+v+" is set to a numerical array.":"",S=f+"auto",M=f+"min",C=f+"max",w=f+"mid",k=l(y+S),A=l(y+M),b=l(y+C),E=A+" and "+b,T={};T[M]=T[C]=void 0;var F={};F[S]=!1;var D={};return _==="color"&&(D.color={valType:"color",arrayOk:!0,editType:m||"style"},c.anim&&(D.color.anim=!0)),D[S]={valType:"boolean",dflt:!0,editType:"calc",impliedEdits:T},D[M]={valType:"number",dflt:null,editType:m||"plot",impliedEdits:F},D[C]={valType:"number",dflt:null,editType:m||"plot",impliedEdits:F},D[w]={valType:"number",dflt:null,editType:"calc",impliedEdits:T},D.colorscale={valType:"colorscale",editType:"calc",dflt:g,impliedEdits:{autocolorscale:!1}},D.autocolorscale={valType:"boolean",dflt:c.autoColorDflt!==!1,editType:"calc",impliedEdits:{colorscale:void 0}},D.reversescale={valType:"boolean",dflt:!1,editType:"plot"},d||(D.showscale={valType:"boolean",dflt:p,editType:"calc"},D.colorbar=t),c.noColorAxis||(D.coloraxis={valType:"subplotid",regex:i("coloraxis"),dflt:null,editType:"calc"}),D}}}),ME=de({"src/components/colorscale/layout_attributes.js"(e,r){"use strict";var t=fn().extendFlat,i=cs(),a=vv().scales;r.exports={editType:"calc",colorscale:{editType:"calc",sequential:{valType:"colorscale",dflt:a.Reds,editType:"calc"},sequentialminus:{valType:"colorscale",dflt:a.Blues,editType:"calc"},diverging:{valType:"colorscale",dflt:a.RdBu,editType:"calc"}},coloraxis:t({_isSubplotObj:!0,editType:"calc"},i("",{colorAttr:"corresponding trace color array(s)",noColorAxis:!0,showScaleDflt:!0}))}}}),SE=de({"src/components/colorbar/has_colorbar.js"(e,r){"use strict";var t=Qt();r.exports=function(a){return t.isPlainObject(a.colorbar)}}}),EE=de({"src/plots/cartesian/clean_ticks.js"(e){"use strict";var r=da(),t=Qt(),i=cn(),a=i.ONEDAY,o=i.ONEWEEK;e.dtick=function(s,l){var n=l==="log",u=l==="date",c=l==="category",f=u?a:1;if(!s)return f;if(r(s))return s=Number(s),s<=0?f:c?Math.max(1,Math.round(s)):u?Math.max(.1,s):s;if(typeof s!="string"||!(u||n))return f;var h=s.charAt(0),d=s.slice(1);return d=r(d)?Number(d):0,d<=0||!(u&&h==="M"&&d===Math.round(d)||n&&h==="L"||n&&h==="D"&&(d===1||d===2))?f:s},e.tick0=function(s,l,n,u){if(l==="date")return t.cleanDate(s,t.dateTick0(n,u%o===0?1:0));if(!(u==="D1"||u==="D2"))return r(s)?Number(s):0}}}),_v=de({"src/plots/cartesian/tick_value_defaults.js"(e,r){"use strict";var t=EE(),i=Qt().isArrayOrTypedArray,a=Do().isTypedArraySpec,o=Do().decodeTypedArraySpec;r.exports=function(l,n,u,c,f={}){var h=f.isMinor,d=h?l.minor||{}:l,p=h?n.minor:n,g=h?"minor.":"";function m(A){var b=d[A];return a(b)&&(b=o(b)),b!==void 0?b:(p._template||{})[A]}var y=m("tick0"),_=m("dtick"),v=m("tickvals"),x=m("overlaying"),S=c==="category"||c==="multicategory",M;i(v)?M="array":_?M="linear":x&&!S?M="sync":M="auto";var C=u(g+"tickmode",M);if(C==="auto"||C==="sync")u(g+"nticks");else if(C==="linear"){var w=p.dtick=t.dtick(_,c);p.tick0=t.tick0(y,c,n.calendar,w)}else if(c!=="multicategory"){var k=u(g+"tickvals");k===void 0?p.tickmode="auto":h||u("ticktext")}}}}),f1=de({"src/plots/cartesian/tick_mark_defaults.js"(e,r){"use strict";var t=Qt(),i=Mu();r.exports=function(o,s,l,n){var u=n.isMinor,c=u?o.minor||{}:o,f=u?s.minor:s,h=u?i.minor:i,d=u?"minor.":"",p=t.coerce2(c,f,h,"ticklen",u?(s.ticklen||5)*.6:void 0),g=t.coerce2(c,f,h,"tickwidth",u?s.tickwidth||1:void 0),m=t.coerce2(c,f,h,"tickcolor",(u?s.tickcolor:void 0)||f.color),y=l(d+"ticks",!u&&n.outerTicks||p||g||m?"outside":"");y||(delete f.ticklen,delete f.tickwidth,delete f.tickcolor)}}}),kE=de({"src/plots/cartesian/show_dflt.js"(e,r){"use strict";r.exports=function(i){var a=["showexponent","showtickprefix","showticksuffix"],o=a.filter(function(l){return i[l]!==void 0}),s=function(l){return i[l]===i[o[0]]};if(o.every(s)||o.length===1)return i[o[0]]}}}),fc=de({"src/plots/array_container_defaults.js"(e,r){"use strict";var t=Qt(),i=Ro();r.exports=function(o,s,l){var n=l.name,u=l.inclusionAttr||"visible",c=s[n],f=t.isArrayOrTypedArray(o[n])?o[n]:[],h=s[n]=[],d=i.arrayTemplater(s,n,u),p,g;for(p=0;p<f.length;p++){var m=f[p];t.isPlainObject(m)?g=d.newItem(m):(g=d.newItem({}),g[u]=!1),g._index=p,g[u]!==!1&&l.handleItemDefaults(m,g,s,l),h.push(g)}var y=d.defaultItems();for(p=0;p<y.length;p++)g=y[p],g._index=h.length,l.handleItemDefaults({},g,s,l,{}),h.push(g);if(t.isArrayOrTypedArray(c)){var _=Math.min(c.length,h.length);for(p=0;p<_;p++)t.relinkPrivateKeys(h[p],c[p])}return h}}}),h0=de({"src/plots/cartesian/tick_label_defaults.js"(e,r){"use strict";var t=Qt(),i=ta().contrast,a=Mu(),o=kE(),s=fc();r.exports=function(u,c,f,h,d){d||(d={});var p=f("labelalias");t.isPlainObject(p)||delete c.labelalias;var g=o(u),m=f("showticklabels");if(m){d.noTicklabelshift||f("ticklabelshift"),d.noTicklabelstandoff||f("ticklabelstandoff");var y=d.font||{},_=c.color,v=c.ticklabelposition||"",x=v.indexOf("inside")!==-1?i(d.bgColor):_&&_!==a.color.dflt?_:y.color;if(t.coerceFont(f,"tickfont",y,{overrideDflt:{color:x}}),!d.noTicklabelstep&&h!=="multicategory"&&h!=="log"&&f("ticklabelstep"),!d.noAng){var S=f("tickangle");!d.noAutotickangles&&S==="auto"&&f("autotickangles")}if(h!=="category"){var M=f("tickformat");s(u,c,{name:"tickformatstops",inclusionAttr:"enabled",handleItemDefaults:l}),c.tickformatstops.length||delete c.tickformatstops,!d.noExp&&!M&&h!=="date"&&(f("showexponent",g),f("exponentformat"),f("minexponent"),f("separatethousands"))}!d.noMinorloglabels&&h==="log"&&f("minorloglabels")}};function l(n,u){function c(h,d){return t.coerce(n,u,a.tickformatstops,h,d)}var f=c("enabled");f&&(c("dtickrange"),c("value"))}}}),d0=de({"src/plots/cartesian/prefix_suffix_defaults.js"(e,r){"use strict";var t=kE();r.exports=function(a,o,s,l,n){n||(n={});var u=n.tickSuffixDflt,c=t(a),f=s("tickprefix");f&&s("showtickprefix",c);var h=s("ticksuffix",u);h&&s("showticksuffix",c)}}}),CE=de({"src/components/colorbar/defaults.js"(e,r){"use strict";var t=Qt(),i=Ro(),a=_v(),o=f1(),s=h0(),l=d0(),n=Aw();r.exports=function(c,f,h){var d=i.newContainer(f,"colorbar"),p=c.colorbar||{};function g(L,B){return t.coerce(p,d,n,L,B)}var m=h.margin||{t:0,b:0,l:0,r:0},y=h.width-m.l-m.r,_=h.height-m.t-m.b,v=g("orientation"),x=v==="v",S=g("thicknessmode");g("thickness",S==="fraction"?30/(x?y:_):30);var M=g("lenmode");g("len",M==="fraction"?1:x?_:y);var C=g("yref"),w=g("xref"),k=C==="paper",A=w==="paper",b,E,T,F="left";x?(T="middle",F=A?"left":"right",b=A?1.02:1,E=.5):(T=k?"bottom":"top",F="center",b=.5,E=k?1.02:1),t.coerce(p,d,{x:{valType:"number",min:A?-2:0,max:A?3:1,dflt:b}},"x"),t.coerce(p,d,{y:{valType:"number",min:k?-2:0,max:k?3:1,dflt:E}},"y"),g("xanchor",F),g("xpad"),g("yanchor",T),g("ypad"),t.noneOrAll(p,d,["x","y"]),g("outlinecolor"),g("outlinewidth"),g("bordercolor"),g("borderwidth"),g("bgcolor");var D=t.coerce(p,d,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:x?["outside","inside","outside top","inside top","outside bottom","inside bottom"]:["outside","inside","outside left","inside left","outside right","inside right"]}},"ticklabelposition");g("ticklabeloverflow",D.indexOf("inside")!==-1?"hide past domain":"hide past div"),a(p,d,g,"linear");var R=h.font,P={noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,outerTicks:!1,font:R};D.indexOf("inside")!==-1&&(P.bgColor="black"),l(p,d,g,"linear",P),s(p,d,g,"linear",P),o(p,d,g,"linear",P),g("title.text",h._dfltTitle.colorbar);var z=d.showticklabels?d.tickfont:R,I=t.extendFlat({},R,{family:z.family,size:t.bigFont(z.size)});t.coerceFont(g,"title.font",I),g("title.side",x?"top":"right")}}}),hu=de({"src/components/colorscale/defaults.js"(e,r){"use strict";var t=da(),i=Qt(),a=SE(),o=CE(),s=vv().isValid,l=Ma().traceIs;function n(u,c){var f=c.slice(0,c.length-1);return c?i.nestedProperty(u,f).get()||{}:u}r.exports=function u(c,f,h,d,p){var g=p.prefix,m=p.cLetter,y="_module"in f,_=n(c,g),v=n(f,g),x=n(f._template||{},g)||{},S=function(){return delete c.coloraxis,delete f.coloraxis,u(c,f,h,d,p)};if(y){var M=h._colorAxes||{},C=d(g+"coloraxis");if(C){var w=l(f,"contour")&&i.nestedProperty(f,"contours.coloring").get()||"heatmap",k=M[C];k?(k[2].push(S),k[0]!==w&&(k[0]=!1,i.warn(["Ignoring coloraxis:",C,"setting","as it is linked to incompatible colorscales."].join(" ")))):M[C]=[w,f,[S]];return}}var A=_[m+"min"],b=_[m+"max"],E=t(A)&&t(b)&&A<b,T=d(g+m+"auto",!E);T?d(g+m+"mid"):(d(g+m+"min"),d(g+m+"max"));var F=_.colorscale,D=x.colorscale,R;if(F!==void 0&&(R=!s(F)),D!==void 0&&(R=!s(D)),d(g+"autocolorscale",R),d(g+"colorscale"),d(g+"reversescale"),g!=="marker.line."){var P;g&&y&&(P=a(_));var z=d(g+"showscale",P);z&&(g&&x&&(v._template=x),o(_,v,h))}}}}),hq=de({"src/components/colorscale/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=Ro(),a=ME(),o=hu();r.exports=function(l,n){function u(y,_){return t.coerce(l,n,a,y,_)}u("colorscale.sequential"),u("colorscale.sequentialminus"),u("colorscale.diverging");var c=n._colorAxes,f,h;function d(y,_){return t.coerce(f,h,a.coloraxis,y,_)}for(var p in c){var g=c[p];if(g[0])f=l[p]||{},h=i.newContainer(n,p,"coloraxis"),h._name=p,o(f,h,n,d,{prefix:"",cLetter:"c"});else{for(var m=0;m<g[2].length;m++)g[2][m]();delete n._colorAxes[p]}}}}}),dq=de({"src/components/colorscale/cross_trace_defaults.js"(e,r){"use strict";var t=Qt(),i=Wu().hasColorscale,a=Wu().extractOpts;r.exports=function(s,l){function n(g,m){var y=g["_"+m];y!==void 0&&(g[m]=y)}function u(g,m){var y=m.container?t.nestedProperty(g,m.container).get():g;if(y)if(y.coloraxis)y._colorAx=l[y.coloraxis];else{var _=a(y),v=_.auto;(v||_.min===void 0)&&n(y,m.min),(v||_.max===void 0)&&n(y,m.max),_.autocolorscale&&n(y,"colorscale")}}for(var c=0;c<s.length;c++){var f=s[c],h=f._module.colorbar;if(h)if(Array.isArray(h))for(var d=0;d<h.length;d++)u(f,h[d]);else u(f,h);i(f,"marker.line")&&u(f,{container:"marker.line",min:"cmin",max:"cmax"})}for(var p in l._colorAxes)u(l[p],{min:"cmin",max:"cmax"})}}}),hc=de({"src/components/colorscale/calc.js"(e,r){"use strict";var t=da(),i=Qt(),a=Wu().extractOpts;r.exports=function(s,l,n){var u=s._fullLayout,c=n.vals,f=n.containerStr,h=f?i.nestedProperty(l,f).get():l,d=a(h),p=d.auto!==!1,g=d.min,m=d.max,y=d.mid,_=function(){return i.aggNums(Math.min,null,c)},v=function(){return i.aggNums(Math.max,null,c)};if(g===void 0?g=_():p&&(h._colorAx&&t(g)?g=Math.min(g,_()):g=_()),m===void 0?m=v():p&&(h._colorAx&&t(m)?m=Math.max(m,v()):m=v()),p&&y!==void 0&&(m-y>y-g?g=y-(m-y):m-y<y-g&&(m=y+(y-g))),g===m&&(g-=.5,m+=.5),d._sync("min",g),d._sync("max",m),d.autocolorscale){var x;g*m<0?x=u.colorscale.diverging:g>=0?x=u.colorscale.sequential:x=u.colorscale.sequentialminus,d._sync("colorscale",x)}}}}),ks=de({"src/components/colorscale/index.js"(e,r){"use strict";var t=vv(),i=Wu();r.exports={moduleType:"component",name:"colorscale",attributes:cs(),layoutAttributes:ME(),supplyLayoutDefaults:hq(),handleDefaults:hu(),crossTraceDefaults:dq(),calc:hc(),scales:t.scales,defaultScale:t.defaultScale,getScale:t.get,isValidScale:t.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}}}),bs=de({"src/traces/scatter/subtypes.js"(e,r){"use strict";var t=Qt(),i=Do().isTypedArraySpec;r.exports={hasLines:function(a){return a.visible&&a.mode&&a.mode.indexOf("lines")!==-1},hasMarkers:function(a){return a.visible&&(a.mode&&a.mode.indexOf("markers")!==-1||a.type==="splom")},hasText:function(a){return a.visible&&a.mode&&a.mode.indexOf("text")!==-1},isBubble:function(a){var o=a.marker;return t.isPlainObject(o)&&(t.isArrayOrTypedArray(o.size)||i(o.size))}}}}),Sy=de({"src/traces/scatter/make_bubble_size_func.js"(e,r){"use strict";var t=da();r.exports=function(a,o){o||(o=2);var s=a.marker,l=s.sizeref||1,n=s.sizemin||0,u=s.sizemode==="area"?function(c){return Math.sqrt(c/l)}:function(c){return c/l};return function(c){var f=u(c/o);return t(f)&&f>0?Math.max(f,n):0}}}}),sf=de({"src/components/fx/helpers.js"(e){"use strict";var r=Qt();e.getSubplot=function(l){return l.subplot||l.xaxis+l.yaxis||l.geo},e.isTraceInSubplots=function(l,n){if(l.type==="splom"){for(var u=l.xaxes||[],c=l.yaxes||[],f=0;f<u.length;f++)for(var h=0;h<c.length;h++)if(n.indexOf(u[f]+c[h])!==-1)return!0;return!1}return n.indexOf(e.getSubplot(l))!==-1},e.flat=function(l,n){for(var u=new Array(l.length),c=0;c<l.length;c++)u[c]=n;return u},e.p2c=function(l,n){for(var u=new Array(l.length),c=0;c<l.length;c++)u[c]=l[c].p2c(n);return u},e.c2dApply=function(l,n){l.length!==n.length&&r.warn("c2dApply: axArray and valArray must be the same length");for(var u=new Array(n.length),c=0;c<n.length;c++){var f=l&&l[c];u[c]=f&&f.c2d?f.c2d(n[c]):n[c]}return u},e.getDistanceFunction=function(l,n,u,c){return l==="closest"?c||e.quadrature(n,u):l.charAt(0)==="x"?n:u},e.getClosest=function(l,n,u){if(u.index!==!1)u.index>=0&&u.index<l.length?u.distance=0:u.index=!1;else for(var c=1/0,f=l.length,h=0;h<f;h++)c=n(l[h]),c<=u.distance&&(u.index=h,u.distance=c);return u},e.inbox=function(l,n,u){return l*n<0||l===0?u:1/0},e.quadrature=function(l,n){return function(u){var c=l(u),f=n(u);return Math.sqrt(c*c+f*f)}},e.makeEventData=function(l,n,u){var c="index"in l?l.index:l.pointNumber,f={data:n._input,fullData:n,curveNumber:n.index,pointNumber:c};return f.pointIndex=c,n._module.eventData?f=n._module.eventData(f,l,n,u,c):("xVal"in l?f.x=l.xVal:"x"in l&&(f.x=l.x),"yVal"in l?f.y=l.yVal:"y"in l&&(f.y=l.y),l.xa&&(f.xaxis=l.xa),l.ya&&(f.yaxis=l.ya),l.zLabelVal!==void 0&&(f.z=l.zLabelVal)),e.appendArrayPointValue(f,n,c),f},e.appendArrayPointValue=function(l,n,u){var c=n._arrayAttrs;if(c)for(var f=0;f<c.length;f++){var h=c[f],d=i(h);if(l[d]===void 0){var p=r.nestedProperty(n,h).get(),g=a(p,u);g!==void 0&&(l[d]=g)}}},e.appendArrayMultiPointValues=function(l,n,u){var c=n._arrayAttrs;if(c)for(var f=0;f<c.length;f++){var h=c[f],d=i(h);if(l[d]===void 0){for(var p=r.nestedProperty(n,h).get(),g=new Array(u.length),m=0;m<u.length;m++)g[m]=a(p,u[m]);l[d]=g}}};var t={ids:"id",locations:"location",labels:"label",values:"value","marker.colors":"color",parents:"parent"};function i(l){return t[l]||l}function a(l,n){if(Array.isArray(n)){if(r.isArrayOrTypedArray(l)&&r.isArrayOrTypedArray(l[n[0]]))return l[n[0]][n[1]]}else return l[n]}var o={x:!0,y:!0},s={"x unified":!0,"y unified":!0};e.isUnifiedHover=function(l){return typeof l!="string"?!1:!!s[l]},e.isXYhover=function(l){return typeof l!="string"?!1:!!o[l]}}}),DE=de({"node_modules/parse-svg-path/dist/index.cjs"(e,r){var t={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=/([astvzqmhlc])([^astvzqmhlc]*)/gi,a=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;function o(l){let n=[];return l.replace(i,(u,c,f)=>{let h=c.toLowerCase(),d=c,p=s(f);for(h==="m"&&p.length>2&&(n.push([d,...p.splice(0,2)]),h="l",d=d==="m"?"l":"L");;){if(p.length===t[h])return n.push([d,...p]),"";if(p.length<t[h])throw new Error("malformed path data");n.push([d,...p.splice(0,t[h])])}}),n}function s(l){let n=l.match(a);return n?n.map(Number):[]}r.exports=o}}),pq=de({"src/components/drawing/symbol_defs.js"(e,r){"use strict";var t=DE(),i=(function(m,y){return y?Math.round(m*(y=Math.pow(10,y)))/y:Math.round(m)}),a="M0,0Z",o=Math.sqrt(2),s=Math.sqrt(3),l=Math.PI,n=Math.cos,u=Math.sin;r.exports={circle:{n:0,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x="M"+v+",0A"+v+","+v+" 0 1,1 0,-"+v+"A"+v+","+v+" 0 0,1 "+v+",0Z";return _?g(y,_,x):x}},square:{n:1,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+","+v+"H-"+v+"V-"+v+"H"+v+"Z")}},diamond:{n:2,f:function(m,y,_){if(c(y))return a;var v=i(m*1.3,2);return g(y,_,"M"+v+",0L0,"+v+"L-"+v+",0L0,-"+v+"Z")}},cross:{n:3,f:function(m,y,_){if(c(y))return a;var v=i(m*.4,2),x=i(m*1.2,2);return g(y,_,"M"+x+","+v+"H"+v+"V"+x+"H-"+v+"V"+v+"H-"+x+"V-"+v+"H-"+v+"V-"+x+"H"+v+"V-"+v+"H"+x+"Z")}},x:{n:4,f:function(m,y,_){if(c(y))return a;var v=i(m*.8/o,2),x="l"+v+","+v,S="l"+v+",-"+v,M="l-"+v+",-"+v,C="l-"+v+","+v;return g(y,_,"M0,"+v+x+S+M+S+M+C+M+C+x+C+x+"Z")}},"triangle-up":{n:5,f:function(m,y,_){if(c(y))return a;var v=i(m*2/s,2),x=i(m/2,2),S=i(m,2);return g(y,_,"M-"+v+","+x+"H"+v+"L0,-"+S+"Z")}},"triangle-down":{n:6,f:function(m,y,_){if(c(y))return a;var v=i(m*2/s,2),x=i(m/2,2),S=i(m,2);return g(y,_,"M-"+v+",-"+x+"H"+v+"L0,"+S+"Z")}},"triangle-left":{n:7,f:function(m,y,_){if(c(y))return a;var v=i(m*2/s,2),x=i(m/2,2),S=i(m,2);return g(y,_,"M"+x+",-"+v+"V"+v+"L-"+S+",0Z")}},"triangle-right":{n:8,f:function(m,y,_){if(c(y))return a;var v=i(m*2/s,2),x=i(m/2,2),S=i(m,2);return g(y,_,"M-"+x+",-"+v+"V"+v+"L"+S+",0Z")}},"triangle-ne":{n:9,f:function(m,y,_){if(c(y))return a;var v=i(m*.6,2),x=i(m*1.2,2);return g(y,_,"M-"+x+",-"+v+"H"+v+"V"+x+"Z")}},"triangle-se":{n:10,f:function(m,y,_){if(c(y))return a;var v=i(m*.6,2),x=i(m*1.2,2);return g(y,_,"M"+v+",-"+x+"V"+v+"H-"+x+"Z")}},"triangle-sw":{n:11,f:function(m,y,_){if(c(y))return a;var v=i(m*.6,2),x=i(m*1.2,2);return g(y,_,"M"+x+","+v+"H-"+v+"V-"+x+"Z")}},"triangle-nw":{n:12,f:function(m,y,_){if(c(y))return a;var v=i(m*.6,2),x=i(m*1.2,2);return g(y,_,"M-"+v+","+x+"V-"+v+"H"+x+"Z")}},pentagon:{n:13,f:function(m,y,_){if(c(y))return a;var v=i(m*.951,2),x=i(m*.588,2),S=i(-m,2),M=i(m*-.309,2),C=i(m*.809,2);return g(y,_,"M"+v+","+M+"L"+x+","+C+"H-"+x+"L-"+v+","+M+"L0,"+S+"Z")}},hexagon:{n:14,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m/2,2),S=i(m*s/2,2);return g(y,_,"M"+S+",-"+x+"V"+x+"L0,"+v+"L-"+S+","+x+"V-"+x+"L0,-"+v+"Z")}},hexagon2:{n:15,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m/2,2),S=i(m*s/2,2);return g(y,_,"M-"+x+","+S+"H"+x+"L"+v+",0L"+x+",-"+S+"H-"+x+"L-"+v+",0Z")}},octagon:{n:16,f:function(m,y,_){if(c(y))return a;var v=i(m*.924,2),x=i(m*.383,2);return g(y,_,"M-"+x+",-"+v+"H"+x+"L"+v+",-"+x+"V"+x+"L"+x+","+v+"H-"+x+"L-"+v+","+x+"V-"+x+"Z")}},star:{n:17,f:function(m,y,_){if(c(y))return a;var v=m*1.4,x=i(v*.225,2),S=i(v*.951,2),M=i(v*.363,2),C=i(v*.588,2),w=i(-v,2),k=i(v*-.309,2),A=i(v*.118,2),b=i(v*.809,2),E=i(v*.382,2);return g(y,_,"M"+x+","+k+"H"+S+"L"+M+","+A+"L"+C+","+b+"L0,"+E+"L-"+C+","+b+"L-"+M+","+A+"L-"+S+","+k+"H-"+x+"L0,"+w+"Z")}},hexagram:{n:18,f:function(m,y,_){if(c(y))return a;var v=i(m*.66,2),x=i(m*.38,2),S=i(m*.76,2);return g(y,_,"M-"+S+",0l-"+x+",-"+v+"h"+S+"l"+x+",-"+v+"l"+x+","+v+"h"+S+"l-"+x+","+v+"l"+x+","+v+"h-"+S+"l-"+x+","+v+"l-"+x+",-"+v+"h-"+S+"Z")}},"star-triangle-up":{n:19,f:function(m,y,_){if(c(y))return a;var v=i(m*s*.8,2),x=i(m*.8,2),S=i(m*1.6,2),M=i(m*4,2),C="A "+M+","+M+" 0 0 1 ";return g(y,_,"M-"+v+","+x+C+v+","+x+C+"0,-"+S+C+"-"+v+","+x+"Z")}},"star-triangle-down":{n:20,f:function(m,y,_){if(c(y))return a;var v=i(m*s*.8,2),x=i(m*.8,2),S=i(m*1.6,2),M=i(m*4,2),C="A "+M+","+M+" 0 0 1 ";return g(y,_,"M"+v+",-"+x+C+"-"+v+",-"+x+C+"0,"+S+C+v+",-"+x+"Z")}},"star-square":{n:21,f:function(m,y,_){if(c(y))return a;var v=i(m*1.1,2),x=i(m*2,2),S="A "+x+","+x+" 0 0 1 ";return g(y,_,"M-"+v+",-"+v+S+"-"+v+","+v+S+v+","+v+S+v+",-"+v+S+"-"+v+",-"+v+"Z")}},"star-diamond":{n:22,f:function(m,y,_){if(c(y))return a;var v=i(m*1.4,2),x=i(m*1.9,2),S="A "+x+","+x+" 0 0 1 ";return g(y,_,"M-"+v+",0"+S+"0,"+v+S+v+",0"+S+"0,-"+v+S+"-"+v+",0Z")}},"diamond-tall":{n:23,f:function(m,y,_){if(c(y))return a;var v=i(m*.7,2),x=i(m*1.4,2);return g(y,_,"M0,"+x+"L"+v+",0L0,-"+x+"L-"+v+",0Z")}},"diamond-wide":{n:24,f:function(m,y,_){if(c(y))return a;var v=i(m*1.4,2),x=i(m*.7,2);return g(y,_,"M0,"+x+"L"+v+",0L0,-"+x+"L-"+v+",0Z")}},hourglass:{n:25,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+","+v+"H-"+v+"L"+v+",-"+v+"H-"+v+"Z")},noDot:!0},bowtie:{n:26,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+","+v+"V-"+v+"L-"+v+","+v+"V-"+v+"Z")},noDot:!0},"circle-cross":{n:27,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M0,"+v+"V-"+v+"M"+v+",0H-"+v+"M"+v+",0A"+v+","+v+" 0 1,1 0,-"+v+"A"+v+","+v+" 0 0,1 "+v+",0Z")},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m/o,2);return g(y,_,"M"+x+","+x+"L-"+x+",-"+x+"M"+x+",-"+x+"L-"+x+","+x+"M"+v+",0A"+v+","+v+" 0 1,1 0,-"+v+"A"+v+","+v+" 0 0,1 "+v+",0Z")},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M0,"+v+"V-"+v+"M"+v+",0H-"+v+"M"+v+","+v+"H-"+v+"V-"+v+"H"+v+"Z")},needLine:!0,noDot:!0},"square-x":{n:30,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+","+v+"L-"+v+",-"+v+"M"+v+",-"+v+"L-"+v+","+v+"M"+v+","+v+"H-"+v+"V-"+v+"H"+v+"Z")},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(m,y,_){if(c(y))return a;var v=i(m*1.3,2);return g(y,_,"M"+v+",0L0,"+v+"L-"+v+",0L0,-"+v+"ZM0,-"+v+"V"+v+"M-"+v+",0H"+v)},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(m,y,_){if(c(y))return a;var v=i(m*1.3,2),x=i(m*.65,2);return g(y,_,"M"+v+",0L0,"+v+"L-"+v+",0L0,-"+v+"ZM-"+x+",-"+x+"L"+x+","+x+"M-"+x+","+x+"L"+x+",-"+x)},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(m,y,_){if(c(y))return a;var v=i(m*1.4,2);return g(y,_,"M0,"+v+"V-"+v+"M"+v+",0H-"+v)},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+","+v+"L-"+v+",-"+v+"M"+v+",-"+v+"L-"+v+","+v)},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(m,y,_){if(c(y))return a;var v=i(m*1.2,2),x=i(m*.85,2);return g(y,_,"M0,"+v+"V-"+v+"M"+v+",0H-"+v+"M"+x+","+x+"L-"+x+",-"+x+"M"+x+",-"+x+"L-"+x+","+x)},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(m,y,_){if(c(y))return a;var v=i(m/2,2),x=i(m,2);return g(y,_,"M"+v+","+x+"V-"+x+"M"+(v-x)+",-"+x+"V"+x+"M"+x+","+v+"H-"+x+"M-"+x+","+(v-x)+"H"+x)},needLine:!0,noFill:!0},"y-up":{n:37,f:function(m,y,_){if(c(y))return a;var v=i(m*1.2,2),x=i(m*1.6,2),S=i(m*.8,2);return g(y,_,"M-"+v+","+S+"L0,0M"+v+","+S+"L0,0M0,-"+x+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(m,y,_){if(c(y))return a;var v=i(m*1.2,2),x=i(m*1.6,2),S=i(m*.8,2);return g(y,_,"M-"+v+",-"+S+"L0,0M"+v+",-"+S+"L0,0M0,"+x+"L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(m,y,_){if(c(y))return a;var v=i(m*1.2,2),x=i(m*1.6,2),S=i(m*.8,2);return g(y,_,"M"+S+","+v+"L0,0M"+S+",-"+v+"L0,0M-"+x+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(m,y,_){if(c(y))return a;var v=i(m*1.2,2),x=i(m*1.6,2),S=i(m*.8,2);return g(y,_,"M-"+S+","+v+"L0,0M-"+S+",-"+v+"L0,0M"+x+",0L0,0")},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(m,y,_){if(c(y))return a;var v=i(m*1.4,2);return g(y,_,"M"+v+",0H-"+v)},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(m,y,_){if(c(y))return a;var v=i(m*1.4,2);return g(y,_,"M0,"+v+"V-"+v)},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+",-"+v+"L-"+v+","+v)},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(m,y,_){if(c(y))return a;var v=i(m,2);return g(y,_,"M"+v+","+v+"L-"+v+",-"+v)},needLine:!0,noDot:!0,noFill:!0},"arrow-up":{n:45,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m*2,2);return g(y,_,"M0,0L-"+v+","+x+"H"+v+"Z")},backoff:1,noDot:!0},"arrow-down":{n:46,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m*2,2);return g(y,_,"M0,0L-"+v+",-"+x+"H"+v+"Z")},noDot:!0},"arrow-left":{n:47,f:function(m,y,_){if(c(y))return a;var v=i(m*2,2),x=i(m,2);return g(y,_,"M0,0L"+v+",-"+x+"V"+x+"Z")},noDot:!0},"arrow-right":{n:48,f:function(m,y,_){if(c(y))return a;var v=i(m*2,2),x=i(m,2);return g(y,_,"M0,0L-"+v+",-"+x+"V"+x+"Z")},noDot:!0},"arrow-bar-up":{n:49,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m*2,2);return g(y,_,"M-"+v+",0H"+v+"M0,0L-"+v+","+x+"H"+v+"Z")},backoff:1,needLine:!0,noDot:!0},"arrow-bar-down":{n:50,f:function(m,y,_){if(c(y))return a;var v=i(m,2),x=i(m*2,2);return g(y,_,"M-"+v+",0H"+v+"M0,0L-"+v+",-"+x+"H"+v+"Z")},needLine:!0,noDot:!0},"arrow-bar-left":{n:51,f:function(m,y,_){if(c(y))return a;var v=i(m*2,2),x=i(m,2);return g(y,_,"M0,-"+x+"V"+x+"M0,0L"+v+",-"+x+"V"+x+"Z")},needLine:!0,noDot:!0},"arrow-bar-right":{n:52,f:function(m,y,_){if(c(y))return a;var v=i(m*2,2),x=i(m,2);return g(y,_,"M0,-"+x+"V"+x+"M0,0L-"+v+",-"+x+"V"+x+"Z")},needLine:!0,noDot:!0},arrow:{n:53,f:function(m,y,_){if(c(y))return a;var v=l/2.5,x=2*m*n(v),S=2*m*u(v);return g(y,_,"M0,0L"+-x+","+S+"L"+x+","+S+"Z")},backoff:.9,noDot:!0},"arrow-wide":{n:54,f:function(m,y,_){if(c(y))return a;var v=l/4,x=2*m*n(v),S=2*m*u(v);return g(y,_,"M0,0L"+-x+","+S+"A "+2*m+","+2*m+" 0 0 1 "+x+","+S+"Z")},backoff:.4,noDot:!0}};function c(m){return m===null}var f,h,d,p;function g(m,y,_){if((!m||m%360===0)&&!y)return _;if(d===m&&p===y&&f===_)return h;d=m,p=y,f=_;function v(R,P){var z=n(R),I=u(R),L=P[0],B=P[1]+(y||0);return[L*z-B*I,L*I+B*z]}for(var x=m/180*l,S=0,M=0,C=t(_),w="",k=0;k<C.length;k++){var A=C[k],b=A[0],E=S,T=M;if(b==="M"||b==="L")S=+A[1],M=+A[2];else if(b==="m"||b==="l")S+=+A[1],M+=+A[2];else if(b==="H")S=+A[1];else if(b==="h")S+=+A[1];else if(b==="V")M=+A[1];else if(b==="v")M+=+A[1];else if(b==="A"){S=+A[1],M=+A[2];var F=v(x,[+A[6],+A[7]]);A[6]=F[0],A[7]=F[1],A[3]=+A[3]+m}(b==="H"||b==="V")&&(b="L"),(b==="h"||b==="v")&&(b="l"),(b==="m"||b==="l")&&(S-=E,M-=T);var D=v(x,[S,M]);(b==="H"||b==="V")&&(b="L"),(b==="M"||b==="L"||b==="m"||b==="l")&&(A[1]=D[0],A[2]=D[1]),A[0]=b,w+=A[0]+A.slice(1).join(",")}return h=w,w}}}),hn=de({"src/components/drawing/index.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=i.numberFormat,o=da(),s=Ma(),l=ta(),n=ks(),u=i.strTranslate,c=Zo(),f=Oh(),h=Bl(),d=h.LINE_SPACING,p=Ap().DESELECTDIM,g=bs(),m=Sy(),y=sf().appendArrayPointValue,_=r.exports={};_.font=function(ae,ee){var ie=ee.variant,Q=ee.style,ue=ee.weight,ge=ee.color,Me=ee.size,Te=ee.family,je=ee.shadow,Ve=ee.lineposition,Ze=ee.textcase;Te&&ae.style("font-family",Te),Me+1&&ae.style("font-size",Me+"px"),ge&&ae.call(l.fill,ge),ue&&ae.style("font-weight",ue),Q&&ae.style("font-style",Q),ie&&ae.style("font-variant",ie),Ze&&ae.style("text-transform",v(S(Ze))),je&&ae.style("text-shadow",je==="auto"?c.makeTextShadow(l.contrast(ge)):v(je)),Ve&&ae.style("text-decoration-line",v(M(Ve)))};function v(ae){return ae==="none"?void 0:ae}var x={normal:"none",lower:"lowercase",upper:"uppercase","word caps":"capitalize"};function S(ae){return x[ae]}function M(ae){return ae.replace("under","underline").replace("over","overline").replace("through","line-through").split("+").join(" ")}_.setPosition=function(ae,ee,ie){ae.attr("x",ee).attr("y",ie)},_.setSize=function(ae,ee,ie){ae.attr("width",ee).attr("height",ie)},_.setRect=function(ae,ee,ie,Q,ue){ae.call(_.setPosition,ee,ie).call(_.setSize,Q,ue)},_.translatePoint=function(ae,ee,ie,Q){var ue=ie.c2p(ae.x),ge=Q.c2p(ae.y);if(o(ue)&&o(ge)&&ee.node())ee.node().nodeName==="text"?ee.attr("x",ue).attr("y",ge):ee.attr("transform",u(ue,ge));else return!1;return!0},_.translatePoints=function(ae,ee,ie){ae.each(function(Q){var ue=t.select(this);_.translatePoint(Q,ue,ee,ie)})},_.hideOutsideRangePoint=function(ae,ee,ie,Q,ue,ge){ee.attr("display",ie.isPtWithinRange(ae,ue)&&Q.isPtWithinRange(ae,ge)?null:"none")},_.hideOutsideRangePoints=function(ae,ee){if(ee._hasClipOnAxisFalse){var ie=ee.xaxis,Q=ee.yaxis;ae.each(function(ue){var ge=ue[0].trace,Me=ge.xcalendar,Te=ge.ycalendar,je=s.traceIs(ge,"bar-like")?".bartext":".point,.textpoint";ae.selectAll(je).each(function(Ve){_.hideOutsideRangePoint(Ve,t.select(this),ie,Q,Me,Te)})})}},_.crispRound=function(ae,ee,ie){return!ee||!o(ee)?ie||0:ae._context.staticPlot?ee:ee<1?1:Math.round(ee)},_.singleLineStyle=function(ae,ee,ie,Q,ue){ee.style("fill","none");var ge=(((ae||[])[0]||{}).trace||{}).line||{},Me=ie||ge.width||0,Te=ue||ge.dash||"";l.stroke(ee,Q||ge.color),_.dashLine(ee,Te,Me)},_.lineGroupStyle=function(ae,ee,ie,Q){ae.style("fill","none").each(function(ue){var ge=(((ue||[])[0]||{}).trace||{}).line||{},Me=ee||ge.width||0,Te=Q||ge.dash||"";t.select(this).call(l.stroke,ie||ge.color).call(_.dashLine,Te,Me)})},_.dashLine=function(ae,ee,ie){ie=+ie||0,ee=_.dashStyle(ee,ie),ae.style({"stroke-dasharray":ee,"stroke-width":ie+"px"})},_.dashStyle=function(ae,ee){ee=+ee||1;var ie=Math.max(ee,3);return ae==="solid"?ae="":ae==="dot"?ae=ie+"px,"+ie+"px":ae==="dash"?ae=3*ie+"px,"+3*ie+"px":ae==="longdash"?ae=5*ie+"px,"+5*ie+"px":ae==="dashdot"?ae=3*ie+"px,"+ie+"px,"+ie+"px,"+ie+"px":ae==="longdashdot"&&(ae=5*ie+"px,"+2*ie+"px,"+ie+"px,"+2*ie+"px"),ae};function C(ae,ee,ie,Q){var ue=ee.fillpattern,ge=ee.fillgradient,Me=_.getPatternAttr,Te=ue&&(Me(ue.shape,0,"")||Me(ue.path,0,""));if(Te){var je=Me(ue.bgcolor,0,null),Ve=Me(ue.fgcolor,0,null),Ze=ue.fgopacity,Ke=Me(ue.size,0,8),vt=Me(ue.solidity,0,.3),xt=ee.uid;_.pattern(ae,"point",ie,xt,Te,Ke,vt,void 0,ue.fillmode,je,Ve,Ze)}else if(ge&&ge.type!=="none"){var Pt=ge.type,mt="scatterfill-"+ee.uid;if(Q&&(mt="legendfill-"+ee.uid),!Q&&(ge.start!==void 0||ge.stop!==void 0)){var Mt,lt;Pt==="horizontal"?(Mt={x:ge.start,y:0},lt={x:ge.stop,y:0}):Pt==="vertical"&&(Mt={x:0,y:ge.start},lt={x:0,y:ge.stop}),Mt.x=ee._xA.c2p(Mt.x===void 0?ee._extremes.x.min[0].val:Mt.x,!0),Mt.y=ee._yA.c2p(Mt.y===void 0?ee._extremes.y.min[0].val:Mt.y,!0),lt.x=ee._xA.c2p(lt.x===void 0?ee._extremes.x.max[0].val:lt.x,!0),lt.y=ee._yA.c2p(lt.y===void 0?ee._extremes.y.max[0].val:lt.y,!0),ae.call(F,ie,mt,"linear",ge.colorscale,"fill",Mt,lt,!0,!1)}else Pt==="horizontal"&&(Pt=Pt+"reversed"),ae.call(_.gradient,ie,mt,Pt,ge.colorscale,"fill")}else ee.fillcolor&&ae.call(l.fill,ee.fillcolor)}_.singleFillStyle=function(ae,ee){var ie=t.select(ae.node()),Q=ie.data(),ue=((Q[0]||[])[0]||{}).trace||{};C(ae,ue,ee,!1)},_.fillGroupStyle=function(ae,ee,ie){ae.style("stroke-width",0).each(function(Q){var ue=t.select(this);Q[0].trace&&C(ue,Q[0].trace,ee,ie)})};var w=pq();_.symbolNames=[],_.symbolFuncs=[],_.symbolBackOffs=[],_.symbolNeedLines={},_.symbolNoDot={},_.symbolNoFill={},_.symbolList=[],Object.keys(w).forEach(function(ae){var ee=w[ae],ie=ee.n;_.symbolList.push(ie,String(ie),ae,ie+100,String(ie+100),ae+"-open"),_.symbolNames[ie]=ae,_.symbolFuncs[ie]=ee.f,_.symbolBackOffs[ie]=ee.backoff||0,ee.needLine&&(_.symbolNeedLines[ie]=!0),ee.noDot?_.symbolNoDot[ie]=!0:_.symbolList.push(ie+200,String(ie+200),ae+"-dot",ie+300,String(ie+300),ae+"-open-dot"),ee.noFill&&(_.symbolNoFill[ie]=!0)});var k=_.symbolNames.length,A="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";_.symbolNumber=function(ae){if(o(ae))ae=+ae;else if(typeof ae=="string"){var ee=0;ae.indexOf("-open")>0&&(ee=100,ae=ae.replace("-open","")),ae.indexOf("-dot")>0&&(ee+=200,ae=ae.replace("-dot","")),ae=_.symbolNames.indexOf(ae),ae>=0&&(ae+=ee)}return ae%100>=k||ae>=400?0:Math.floor(Math.max(ae,0))};function b(ae,ee,ie,Q){var ue=ae%100;return _.symbolFuncs[ue](ee,ie,Q)+(ae>=200?A:"")}var E=a("~f"),T={radial:{type:"radial"},radialreversed:{type:"radial",reversed:!0},horizontal:{type:"linear",start:{x:1,y:0},stop:{x:0,y:0}},horizontalreversed:{type:"linear",start:{x:1,y:0},stop:{x:0,y:0},reversed:!0},vertical:{type:"linear",start:{x:0,y:1},stop:{x:0,y:0}},verticalreversed:{type:"linear",start:{x:0,y:1},stop:{x:0,y:0},reversed:!0}};_.gradient=function(ae,ee,ie,Q,ue,ge){var Me=T[Q];return F(ae,ee,ie,Me.type,ue,ge,Me.start,Me.stop,!1,Me.reversed)};function F(ae,ee,ie,Q,ue,ge,Me,Te,je,Ve){var Ze=ue.length,Ke;Q==="linear"?Ke={node:"linearGradient",attrs:{x1:Me.x,y1:Me.y,x2:Te.x,y2:Te.y,gradientUnits:je?"userSpaceOnUse":"objectBoundingBox"},reversed:Ve}:Q==="radial"&&(Ke={node:"radialGradient",reversed:Ve});for(var vt=new Array(Ze),xt=0;xt<Ze;xt++)Ke.reversed?vt[Ze-1-xt]=[E((1-ue[xt][0])*100),ue[xt][1]]:vt[xt]=[E(ue[xt][0]*100),ue[xt][1]];var Pt=ee._fullLayout,mt="g"+Pt._uid+"-"+ie,Mt=Pt._defs.select(".gradients").selectAll("#"+mt).data([Q+vt.join(";")],i.identity);Mt.exit().remove(),Mt.enter().append(Ke.node).each(function(){var lt=t.select(this);Ke.attrs&<.attr(Ke.attrs),lt.attr("id",mt);var qe=lt.selectAll("stop").data(vt);qe.exit().remove(),qe.enter().append("stop"),qe.each(function(Ye){t.select(this).attr({offset:Ye[0]+"%","stop-color":l.rgb(Ye[1]),"stop-opacity":l.parse(Ye[1]).alpha})})}),ae.style(ge,U(mt,ee)).style(ge+"-opacity",null),ae.classed("gradient_filled",!0)}_.pattern=function(ae,ee,ie,Q,ue,ge,Me,Te,je,Ve,Ze,Ke){var vt=ee==="legend";Te&&(je==="overlay"?(Ve=Te,Ze=l.contrast(Ve)):(Ve=void 0,Ze=Te));var xt=ie._fullLayout,Pt="p"+xt._uid+"-"+Q,mt,Mt,lt=function(at,rt,ft,At,ht){return At+(ht-At)*(at-rt)/(ft-rt)},qe,Ye,me,_e,Ae={},ke=l.rgb(Ze),Ee=l.parse(Ze).alpha,De=Ke*Ee;switch(ue){case"/":mt=ge*Math.sqrt(2),Mt=ge*Math.sqrt(2),qe="M-"+mt/4+","+Mt/4+"l"+mt/2+",-"+Mt/2+"M0,"+Mt+"L"+mt+",0M"+mt/4*3+","+Mt/4*5+"l"+mt/2+",-"+Mt/2,Ye=Me*ge,_e="path",Ae={d:qe,opacity:De,stroke:ke,"stroke-width":Ye+"px"};break;case"\\":mt=ge*Math.sqrt(2),Mt=ge*Math.sqrt(2),qe="M"+mt/4*3+",-"+Mt/4+"l"+mt/2+","+Mt/2+"M0,0L"+mt+","+Mt+"M-"+mt/4+","+Mt/4*3+"l"+mt/2+","+Mt/2,Ye=Me*ge,_e="path",Ae={d:qe,opacity:De,stroke:ke,"stroke-width":Ye+"px"};break;case"x":mt=ge*Math.sqrt(2),Mt=ge*Math.sqrt(2),qe="M-"+mt/4+","+Mt/4+"l"+mt/2+",-"+Mt/2+"M0,"+Mt+"L"+mt+",0M"+mt/4*3+","+Mt/4*5+"l"+mt/2+",-"+Mt/2+"M"+mt/4*3+",-"+Mt/4+"l"+mt/2+","+Mt/2+"M0,0L"+mt+","+Mt+"M-"+mt/4+","+Mt/4*3+"l"+mt/2+","+Mt/2,Ye=ge-ge*Math.sqrt(1-Me),_e="path",Ae={d:qe,opacity:De,stroke:ke,"stroke-width":Ye+"px"};break;case"|":mt=ge,Mt=ge,_e="path",qe="M"+mt/2+",0L"+mt/2+","+Mt,Ye=Me*ge,_e="path",Ae={d:qe,opacity:De,stroke:ke,"stroke-width":Ye+"px"};break;case"-":mt=ge,Mt=ge,_e="path",qe="M0,"+Mt/2+"L"+mt+","+Mt/2,Ye=Me*ge,_e="path",Ae={d:qe,opacity:De,stroke:ke,"stroke-width":Ye+"px"};break;case"+":mt=ge,Mt=ge,_e="path",qe="M"+mt/2+",0L"+mt/2+","+Mt+"M0,"+Mt/2+"L"+mt+","+Mt/2,Ye=ge-ge*Math.sqrt(1-Me),_e="path",Ae={d:qe,opacity:De,stroke:ke,"stroke-width":Ye+"px"};break;case".":mt=ge,Mt=ge,Me<Math.PI/4?me=Math.sqrt(Me*ge*ge/Math.PI):me=lt(Me,Math.PI/4,1,ge/2,ge/Math.sqrt(2)),_e="circle",Ae={cx:mt/2,cy:Mt/2,r:me,opacity:De,fill:ke};break;default:mt=ge,Mt=ge,_e="path",Ae={d:ue,opacity:De,fill:ke};break}var Je=[ue||"noSh",Ve||"noBg",Ze||"noFg",ge,Me].join(";"),Ue=xt._defs.select(".patterns").selectAll("#"+Pt).data([Je],i.identity);Ue.exit().remove(),Ue.enter().append("pattern").each(function(){var at=t.select(this);if(at.attr({id:Pt,width:mt+"px",height:Mt+"px",patternUnits:"userSpaceOnUse",patternTransform:vt?"scale(0.8)":""}),Ve){var rt=l.rgb(Ve),ft=l.parse(Ve).alpha,At=at.selectAll("rect").data([0]);At.exit().remove(),At.enter().append("rect").attr({width:mt+"px",height:Mt+"px",fill:rt,"fill-opacity":ft})}var ht=at.selectAll(_e).data([0]);ht.exit().remove(),ht.enter().append(_e).attr(Ae)}),ae.style("fill",U(Pt,ie)).style("fill-opacity",null),ae.classed("pattern_filled",!0)},_.initGradients=function(ae){var ee=ae._fullLayout,ie=i.ensureSingle(ee._defs,"g","gradients");ie.selectAll("linearGradient,radialGradient").remove(),t.select(ae).selectAll(".gradient_filled").classed("gradient_filled",!1)},_.initPatterns=function(ae){var ee=ae._fullLayout,ie=i.ensureSingle(ee._defs,"g","patterns");ie.selectAll("pattern").remove(),t.select(ae).selectAll(".pattern_filled").classed("pattern_filled",!1)},_.getPatternAttr=function(ae,ee,ie){return ae&&i.isArrayOrTypedArray(ae)?ee<ae.length?ae[ee]:ie:ae},_.pointStyle=function(ae,ee,ie,Q){if(ae.size()){var ue=_.makePointStyleFns(ee);ae.each(function(ge){_.singlePointStyle(ge,t.select(this),ee,ue,ie,Q)})}},_.singlePointStyle=function(ae,ee,ie,Q,ue,ge){var Me=ie.marker,Te=Me.line;if(ge&&ge.i>=0&&ae.i===void 0&&(ae.i=ge.i),ee.style("opacity",Q.selectedOpacityFn?Q.selectedOpacityFn(ae):ae.mo===void 0?Me.opacity:ae.mo),Q.ms2mrc){var je;ae.ms==="various"||Me.size==="various"?je=3:je=Q.ms2mrc(ae.ms),ae.mrc=je,Q.selectedSizeFn&&(je=ae.mrc=Q.selectedSizeFn(ae));var Ve=_.symbolNumber(ae.mx||Me.symbol)||0;ae.om=Ve%200>=100;var Ze=fe(ae,ie),Ke=q(ae,ie);ee.attr("d",b(Ve,je,Ze,Ke))}var vt=!1,xt,Pt,mt;if(ae.so)mt=Te.outlierwidth,Pt=Te.outliercolor,xt=Me.outliercolor;else{var Mt=(Te||{}).width;mt=(ae.mlw+1||Mt+1||(ae.trace?(ae.trace.marker.line||{}).width:0)+1)-1||0,"mlc"in ae?Pt=ae.mlcc=Q.lineScale(ae.mlc):i.isArrayOrTypedArray(Te.color)?Pt=l.defaultLine:Pt=Te.color,i.isArrayOrTypedArray(Me.color)&&(xt=l.defaultLine,vt=!0),"mc"in ae?xt=ae.mcc=Q.markerScale(ae.mc):xt=Me.color||Me.colors||"rgba(0,0,0,0)",Q.selectedColorFn&&(xt=Q.selectedColorFn(ae))}let lt=ae.mld||(Te||{}).dash;if(lt&&_.dashLine(ee,lt,mt),ae.om)ee.call(l.stroke,xt).style({"stroke-width":(mt||1)+"px",fill:"none"});else{ee.style("stroke-width",(ae.isBlank?0:mt)+"px");var qe=Me.gradient,Ye=ae.mgt;Ye?vt=!0:Ye=qe&&qe.type,i.isArrayOrTypedArray(Ye)&&(Ye=Ye[0],T[Ye]||(Ye=0));var me=Me.pattern,_e=_.getPatternAttr,Ae=me&&(_e(me.shape,ae.i,"")||_e(me.path,ae.i,""));if(Ye&&Ye!=="none"){var ke=ae.mgc;ke?vt=!0:ke=qe.color;var Ee=ie.uid;vt&&(Ee+="-"+ae.i),_.gradient(ee,ue,Ee,Ye,[[0,ke],[1,xt]],"fill")}else if(Ae){var De=!1,Je=me.fgcolor;!Je&&ge&&ge.color&&(Je=ge.color,De=!0);var Ue=_e(Je,ae.i,ge&&ge.color||null),at=_e(me.bgcolor,ae.i,null),rt=me.fgopacity,ft=_e(me.size,ae.i,8),At=_e(me.solidity,ae.i,.3);De=De||ae.mcc||i.isArrayOrTypedArray(me.shape)||i.isArrayOrTypedArray(me.path)||i.isArrayOrTypedArray(me.bgcolor)||i.isArrayOrTypedArray(me.fgcolor)||i.isArrayOrTypedArray(me.size)||i.isArrayOrTypedArray(me.solidity);var ht=ie.uid;De&&(ht+="-"+ae.i),_.pattern(ee,"point",ue,ht,Ae,ft,At,ae.mcc,me.fillmode,at,Ue,rt)}else i.isArrayOrTypedArray(xt)?l.fill(ee,xt[ae.i]):l.fill(ee,xt);mt&&l.stroke(ee,Pt)}},_.makePointStyleFns=function(ae){var ee={},ie=ae.marker;return ee.markerScale=_.tryColorscale(ie,""),ee.lineScale=_.tryColorscale(ie,"line"),s.traceIs(ae,"symbols")&&(ee.ms2mrc=g.isBubble(ae)?m(ae):function(){return(ie.size||6)/2}),ae.selectedpoints&&i.extendFlat(ee,_.makeSelectedPointStyleFns(ae)),ee},_.makeSelectedPointStyleFns=function(ae){var ee={},ie=ae.selected||{},Q=ae.unselected||{},ue=ae.marker||{},ge=ie.marker||{},Me=Q.marker||{},Te=ue.opacity,je=ge.opacity,Ve=Me.opacity,Ze=je!==void 0,Ke=Ve!==void 0;(i.isArrayOrTypedArray(Te)||Ze||Ke)&&(ee.selectedOpacityFn=function(me){var _e=me.mo===void 0?ue.opacity:me.mo;return me.selected?Ze?je:_e:Ke?Ve:p*_e});var vt=ue.color,xt=ge.color,Pt=Me.color;(xt||Pt)&&(ee.selectedColorFn=function(me){var _e=me.mcc||vt;return me.selected?xt||_e:Pt||_e});var mt=ue.size,Mt=ge.size,lt=Me.size,qe=Mt!==void 0,Ye=lt!==void 0;return s.traceIs(ae,"symbols")&&(qe||Ye)&&(ee.selectedSizeFn=function(me){var _e=me.mrc||mt/2;return me.selected?qe?Mt/2:_e:Ye?lt/2:_e}),ee},_.makeSelectedTextStyleFns=function(ae){var ee={},ie=ae.selected||{},Q=ae.unselected||{},ue=ae.textfont||{},ge=ie.textfont||{},Me=Q.textfont||{},Te=ue.color,je=ge.color,Ve=Me.color;return ee.selectedTextColorFn=function(Ze){var Ke=Ze.tc||Te;return Ze.selected?je||Ke:Ve||(je?Ke:l.addOpacity(Ke,p))},ee},_.selectedPointStyle=function(ae,ee){if(!(!ae.size()||!ee.selectedpoints)){var ie=_.makeSelectedPointStyleFns(ee),Q=ee.marker||{},ue=[];ie.selectedOpacityFn&&ue.push(function(ge,Me){ge.style("opacity",ie.selectedOpacityFn(Me))}),ie.selectedColorFn&&ue.push(function(ge,Me){l.fill(ge,ie.selectedColorFn(Me))}),ie.selectedSizeFn&&ue.push(function(ge,Me){var Te=Me.mx||Q.symbol||0,je=ie.selectedSizeFn(Me);ge.attr("d",b(_.symbolNumber(Te),je,fe(Me,ee),q(Me,ee))),Me.mrc2=je}),ue.length&&ae.each(function(ge){for(var Me=t.select(this),Te=0;Te<ue.length;Te++)ue[Te](Me,ge)})}},_.tryColorscale=function(ae,ee){var ie=ee?i.nestedProperty(ae,ee).get():ae;if(ie){var Q=ie.color;if((ie.colorscale||ie._colorAx)&&i.isArrayOrTypedArray(Q))return n.makeColorScaleFuncFromTrace(ie)}return i.identity};var D={start:1,end:-1,middle:0,bottom:1,top:-1};function R(ae,ee,ie,Q,ue){var ge=t.select(ae.node().parentNode),Me=ee.indexOf("top")!==-1?"top":ee.indexOf("bottom")!==-1?"bottom":"middle",Te=ee.indexOf("left")!==-1?"end":ee.indexOf("right")!==-1?"start":"middle",je=Q?Q/.8+1:0,Ve=(c.lineCount(ae)-1)*d+1,Ze=D[Te]*je,Ke=ie*.75+D[Me]*je+(D[Me]-1)*Ve*ie/2;ae.attr("text-anchor",Te),ue||ge.attr("transform",u(Ze,Ke))}function P(ae,ee){var ie=ae.ts||ee.textfont.size;return o(ie)&&ie>0?ie:0}_.textPointStyle=function(ae,ee,ie){if(ae.size()){var Q;if(ee.selectedpoints){var ue=_.makeSelectedTextStyleFns(ee);Q=ue.selectedTextColorFn}var ge=ee.texttemplate,Me=ie._fullLayout;ae.each(function(Te){var je=t.select(this),Ve=ge?i.extractOption(Te,ee,"txt","texttemplate"):i.extractOption(Te,ee,"tx","text");if(!Ve&&Ve!==0){je.remove();return}if(ge){var Ze=ee._module.formatLabels,Ke=Ze?Ze(Te,ee,Me):{},vt={};y(vt,ee,Te.i),Ve=i.texttemplateString({data:[vt,Te,ee._meta],fallback:ee.texttemplatefallback,labels:Ke,locale:Me._d3locale,template:Ve})}var xt=Te.tp||ee.textposition,Pt=P(Te,ee),mt=Q?Q(Te):Te.tc||ee.textfont.color;je.call(_.font,{family:Te.tf||ee.textfont.family,weight:Te.tw||ee.textfont.weight,style:Te.ty||ee.textfont.style,variant:Te.tv||ee.textfont.variant,textcase:Te.tC||ee.textfont.textcase,lineposition:Te.tE||ee.textfont.lineposition,shadow:Te.tS||ee.textfont.shadow,size:Pt,color:mt}).text(Ve).call(c.convertToTspans,ie).call(R,xt,Pt,Te.mrc)})}},_.selectedTextStyle=function(ae,ee){if(!(!ae.size()||!ee.selectedpoints)){var ie=_.makeSelectedTextStyleFns(ee);ae.each(function(Q){var ue=t.select(this),ge=ie.selectedTextColorFn(Q),Me=Q.tp||ee.textposition,Te=P(Q,ee);l.fill(ue,ge);var je=s.traceIs(ee,"bar-like");R(ue,Me,Te,Q.mrc2||Q.mrc,je)})}};var z=.5;_.smoothopen=function(ae,ee){if(ae.length<3)return"M"+ae.join("L");var ie="M"+ae[0],Q=[],ue;for(ue=1;ue<ae.length-1;ue++)Q.push(W(ae[ue-1],ae[ue],ae[ue+1],ee));for(ie+="Q"+Q[0][0]+" "+ae[1],ue=2;ue<ae.length-1;ue++)ie+="C"+Q[ue-2][1]+" "+Q[ue-1][0]+" "+ae[ue];return ie+="Q"+Q[ae.length-3][1]+" "+ae[ae.length-1],ie},_.smoothclosed=function(ae,ee){if(ae.length<3)return"M"+ae.join("L")+"Z";var ie="M"+ae[0],Q=ae.length-1,ue=[W(ae[Q],ae[0],ae[1],ee)],ge;for(ge=1;ge<Q;ge++)ue.push(W(ae[ge-1],ae[ge],ae[ge+1],ee));for(ue.push(W(ae[Q-1],ae[Q],ae[0],ee)),ge=1;ge<=Q;ge++)ie+="C"+ue[ge-1][1]+" "+ue[ge][0]+" "+ae[ge];return ie+="C"+ue[Q][1]+" "+ue[0][0]+" "+ae[0]+"Z",ie};var I,L;function B(ae,ee,ie){return ie&&(ae=J(ae)),ee?G(ae[1]):O(ae[0])}function O(ae){var ee=t.round(ae,2);return I=ee,ee}function G(ae){var ee=t.round(ae,2);return L=ee,ee}function W(ae,ee,ie,Q){var ue=ae[0]-ee[0],ge=ae[1]-ee[1],Me=ie[0]-ee[0],Te=ie[1]-ee[1],je=Math.pow(ue*ue+ge*ge,z/2),Ve=Math.pow(Me*Me+Te*Te,z/2),Ze=(Ve*Ve*ue-je*je*Me)*Q,Ke=(Ve*Ve*ge-je*je*Te)*Q,vt=3*Ve*(je+Ve),xt=3*je*(je+Ve);return[[O(ee[0]+(vt&&Ze/vt)),G(ee[1]+(vt&&Ke/vt))],[O(ee[0]-(xt&&Ze/xt)),G(ee[1]-(xt&&Ke/xt))]]}var X={hv:function(ae,ee,ie){return"H"+O(ee[0])+"V"+B(ee,1,ie)},vh:function(ae,ee,ie){return"V"+G(ee[1])+"H"+B(ee,0,ie)},hvh:function(ae,ee,ie){return"H"+O((ae[0]+ee[0])/2)+"V"+G(ee[1])+"H"+B(ee,0,ie)},vhv:function(ae,ee,ie){return"V"+G((ae[1]+ee[1])/2)+"H"+O(ee[0])+"V"+B(ee,1,ie)}},Z=function(ae,ee,ie){return"L"+B(ee,0,ie)+","+B(ee,1,ie)};_.steps=function(ae){var ee=X[ae]||Z;return function(ie){for(var Q="M"+O(ie[0][0])+","+G(ie[0][1]),ue=ie.length,ge=1;ge<ue;ge++)Q+=ee(ie[ge-1],ie[ge],ge===ue-1);return Q}};function J(ae,ee){var ie=ae.backoff,Q=ae.trace,ue=ae.d,ge=ae.i;if(ie&&Q&&Q.marker&&Q.marker.angle%360===0&&Q.line&&Q.line.shape!=="spline"){var Me=i.isArrayOrTypedArray(ie),Te=ae,je=ee?ee[0]:I||0,Ve=ee?ee[1]:L||0,Ze=Te[0],Ke=Te[1],vt=Ze-je,xt=Ke-Ve,Pt=Math.atan2(xt,vt),mt=Me?ie[ge]:ie;if(mt==="auto"){var Mt=Te.i;Q.type==="scatter"&&Mt--;var lt=Te.marker,qe=lt.symbol;i.isArrayOrTypedArray(qe)&&(qe=qe[Mt]);var Ye=lt.size;i.isArrayOrTypedArray(Ye)&&(Ye=Ye[Mt]),mt=lt?_.symbolBackOffs[_.symbolNumber(qe)]*Ye:0,mt+=_.getMarkerStandoff(ue[Mt],Q)||0}var me=Ze-mt*Math.cos(Pt),_e=Ke-mt*Math.sin(Pt);(me<=Ze&&me>=je||me>=Ze&&me<=je)&&(_e<=Ke&&_e>=Ve||_e>=Ke&&_e<=Ve)&&(ae=[me,_e])}return ae}_.applyBackoff=J,_.makeTester=function(){var ae=i.ensureSingleById(t.select("body"),"svg","js-plotly-tester",function(ie){ie.attr(f.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"})}),ee=i.ensureSingle(ae,"path","js-reference-point",function(ie){ie.attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"})});_.tester=ae,_.testref=ee},_.savedBBoxes={};var N=0,H=1e4;_.bBox=function(ae,ee,ie){ie||(ie=$(ae));var Q;if(ie){if(Q=_.savedBBoxes[ie],Q)return i.extendFlat({},Q)}else if(ae.childNodes.length===1){var ue=ae.childNodes[0];if(ie=$(ue),ie){var ge=+ue.getAttribute("x")||0,Me=+ue.getAttribute("y")||0,Te=ue.getAttribute("transform");if(!Te){var je=_.bBox(ue,!1,ie);return ge&&(je.left+=ge,je.right+=ge),Me&&(je.top+=Me,je.bottom+=Me),je}if(ie+="~"+ge+"~"+Me+"~"+Te,Q=_.savedBBoxes[ie],Q)return i.extendFlat({},Q)}}var Ve,Ze;ee?Ve=ae:(Ze=_.tester.node(),Ve=ae.cloneNode(!0),Ze.appendChild(Ve)),t.select(Ve).attr("transform",null).call(c.positionText,0,0);var Ke=Ve.getBoundingClientRect(),vt=_.testref.node().getBoundingClientRect();ee||Ze.removeChild(Ve);var xt={height:Ke.height,width:Ke.width,left:Ke.left-vt.left,top:Ke.top-vt.top,right:Ke.right-vt.left,bottom:Ke.bottom-vt.top};return N>=H&&(_.savedBBoxes={},N=0),ie&&(_.savedBBoxes[ie]=xt),N++,i.extendFlat({},xt)};function $(ae){var ee=ae.getAttribute("data-unformatted");if(ee!==null)return ee+ae.getAttribute("data-math")+ae.getAttribute("text-anchor")+ae.getAttribute("style")}_.setClipUrl=function(ae,ee,ie){ae.attr("clip-path",U(ee,ie))};function U(ae,ee){if(!ae)return null;var ie=ee._context,Q=ie._exportedPlot?"":ie._baseUrl||"";return Q?"url('"+Q+"#"+ae+"')":"url(#"+ae+")"}_.getTranslate=function(ae){var ee=/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,ie=ae.attr?"attr":"getAttribute",Q=ae[ie]("transform")||"",ue=Q.replace(ee,function(ge,Me,Te){return[Me,Te].join(" ")}).split(" ");return{x:+ue[0]||0,y:+ue[1]||0}},_.setTranslate=function(ae,ee,ie){var Q=/(\btranslate\(.*?\);?)/,ue=ae.attr?"attr":"getAttribute",ge=ae.attr?"attr":"setAttribute",Me=ae[ue]("transform")||"";return ee=ee||0,ie=ie||0,Me=Me.replace(Q,"").trim(),Me+=u(ee,ie),Me=Me.trim(),ae[ge]("transform",Me),Me},_.getScale=function(ae){var ee=/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,ie=ae.attr?"attr":"getAttribute",Q=ae[ie]("transform")||"",ue=Q.replace(ee,function(ge,Me,Te){return[Me,Te].join(" ")}).split(" ");return{x:+ue[0]||1,y:+ue[1]||1}},_.setScale=function(ae,ee,ie){var Q=/(\bscale\(.*?\);?)/,ue=ae.attr?"attr":"getAttribute",ge=ae.attr?"attr":"setAttribute",Me=ae[ue]("transform")||"";return ee=ee||1,ie=ie||1,Me=Me.replace(Q,"").trim(),Me+="scale("+ee+","+ie+")",Me=Me.trim(),ae[ge]("transform",Me),Me};var V=/\s*sc.*/;_.setPointGroupScale=function(ae,ee,ie){if(ee=ee||1,ie=ie||1,!!ae){var Q=ee===1&&ie===1?"":"scale("+ee+","+ie+")";ae.each(function(){var ue=(this.getAttribute("transform")||"").replace(V,"");ue+=Q,ue=ue.trim(),this.setAttribute("transform",ue)})}};var j=/translate\([^)]*\)\s*$/;_.setTextPointsScale=function(ae,ee,ie){ae&&ae.each(function(){var Q,ue=t.select(this),ge=ue.select("text");if(ge.node()){var Me=parseFloat(ge.attr("x")||0),Te=parseFloat(ge.attr("y")||0),je=(ue.attr("transform")||"").match(j);ee===1&&ie===1?Q=[]:Q=[u(Me,Te),"scale("+ee+","+ie+")",u(-Me,-Te)],je&&Q.push(je),ue.attr("transform",Q.join(""))}})};function q(ae,ee){var ie;return ae&&(ie=ae.mf),ie===void 0&&(ie=ee.marker&&ee.marker.standoff||0),!ee._geo&&!ee._xA?-ie:ie}_.getMarkerStandoff=q;var Y=Math.atan2,K=Math.cos,te=Math.sin;function ne(ae,ee){var ie=ee[0],Q=ee[1];return[ie*K(ae)-Q*te(ae),ie*te(ae)+Q*K(ae)]}var se,le,ce,pe,xe,ye;function fe(ae,ee){var ie=ae.ma;ie===void 0&&(ie=ee.marker.angle,(!o(ie)||i.isArrayOrTypedArray(ie))&&(ie=0));var Q,ue,ge=ee.marker.angleref;if(ge==="previous"||ge==="north"){if(ee._geo){var Me=ee._geo.project(ae.lonlat);Q=Me[0],ue=Me[1]}else{var Te=ee._xA,je=ee._yA;if(Te&&je)Q=Te.c2p(ae.x),ue=je.c2p(ae.y);else return 90}if(ee._geo){var Ve=ae.lonlat[0],Ze=ae.lonlat[1],Ke=ee._geo.project([Ve,Ze+1e-5]),vt=ee._geo.project([Ve+1e-5,Ze]),xt=Y(vt[1]-ue,vt[0]-Q),Pt=Y(Ke[1]-ue,Ke[0]-Q),mt;if(ge==="north")mt=ie/180*Math.PI;else if(ge==="previous"){var Mt=Ve/180*Math.PI,lt=Ze/180*Math.PI,qe=se/180*Math.PI,Ye=le/180*Math.PI,me=qe-Mt,_e=K(Ye)*te(me),Ae=te(Ye)*K(lt)-K(Ye)*te(lt)*K(me);mt=-Y(_e,Ae)-Math.PI,se=Ve,le=Ze}var ke=ne(xt,[K(mt),0]),Ee=ne(Pt,[te(mt),0]);ie=Y(ke[1]+Ee[1],ke[0]+Ee[0])/Math.PI*180,ge==="previous"&&!(ye===ee.uid&&ae.i===xe+1)&&(ie=null)}if(ge==="previous"&&!ee._geo)if(ye===ee.uid&&ae.i===xe+1&&o(Q)&&o(ue)){var De=Q-ce,Je=ue-pe,Ue=ee.line&&ee.line.shape||"",at=Ue.slice(Ue.length-1);at==="h"&&(Je=0),at==="v"&&(De=0),ie+=Y(Je,De)/Math.PI*180+90}else ie=null}return ce=Q,pe=ue,xe=ae.i,ye=ee.uid,ie}_.getMarkerAngle=fe}}),xv=de({"src/components/titles/index.js"(e,r){"use strict";var t=Yr(),i=da(),a=Es(),o=Ma(),s=Qt(),l=s.strTranslate,n=hn(),u=ta(),c=Zo(),f=Ap(),h=Bl().OPPOSITE_SIDE,d=/ [XY][0-9]* /,p=1.6,g=1.6;function m(y,_,v){var x=y._fullLayout,S=v.propContainer,M=v.propName,C=v.placeholder,w=v.traceIndex,k=v.avoid||{},A=v.attributes,b=v.transform,E=v.containerGroup,T=1,F=S.title,D=(F&&F.text?F.text:"").trim(),R=!1,P=F&&F.font?F.font:{},z=P.family,I=P.size,L=P.color,B=P.weight,O=P.style,G=P.variant,W=P.textcase,X=P.lineposition,Z=P.shadow,J=v.subtitlePropName,N=!!J,H=v.subtitlePlaceholder,$=(S.title||{}).subtitle||{text:"",font:{}},U=($.text||"").trim(),V=!1,j=1,q=$.font,Y=q.family,K=q.size,te=q.color,ne=q.weight,se=q.style,le=q.variant,ce=q.textcase,pe=q.lineposition,xe=q.shadow,ye;M==="title.text"?ye="titleText":M.indexOf("axis")!==-1?ye="axisTitleText":M.indexOf("colorbar")!==-1&&(ye="colorbarTitleText");var fe=y._context.edits[ye];function ae(xt,Pt){return xt===void 0||Pt===void 0?!1:xt.replace(d," % ")===Pt.replace(d," % ")}D===""?T=0:ae(D,C)&&(fe||(D=""),T=.2,R=!0),N&&(U===""?j=0:ae(U,H)&&(fe||(U=""),j=.2,V=!0)),v._meta?D=s.templateString(D,v._meta):x._meta&&(D=s.templateString(D,x._meta));var ee=D||U||fe,ie;E||(E=s.ensureSingle(x._infolayer,"g","g-"+_),ie=x._hColorbarMoveTitle);var Q=E.selectAll("text."+_).data(ee?[0]:[]);Q.enter().append("text"),Q.text(D).attr("class",_),Q.exit().remove();var ue=null,ge=_+"-subtitle",Me=U||fe;if(N&&(ue=E.selectAll("text."+ge).data(Me?[0]:[]),ue.enter().append("text"),ue.text(U).attr("class",ge),ue.exit().remove()),!ee)return E;function Te(xt,Pt){s.syncOrAsync([je,Ve],{title:xt,subtitle:Pt})}function je(xt){var Pt=xt.title,mt=xt.subtitle,Mt;!b&&ie&&(b={}),b?(Mt="",b.rotate&&(Mt+="rotate("+[b.rotate,A.x,A.y]+")"),(b.offset||ie)&&(Mt+=l(0,(b.offset||0)-(ie||0)))):Mt=null,Pt.attr("transform",Mt);function lt(ke){if(ke){var Ee=t.select(ke.node().parentNode).select("."+ge);if(!Ee.empty()){var De=ke.node().getBBox();if(De.height){var Je=De.y+De.height+p*K;Ee.attr("y",Je)}}}}if(Pt.style("opacity",T*u.opacity(L)).call(n.font,{color:u.rgb(L),size:t.round(I,2),family:z,weight:B,style:O,variant:G,textcase:W,shadow:Z,lineposition:X}).attr(A).call(c.convertToTspans,y,lt),mt&&!mt.empty()){var qe=E.select("."+_+"-math-group"),Ye=Pt.node().getBBox(),me=qe.node()?qe.node().getBBox():void 0,_e=me?me.y+me.height+p*K:Ye.y+Ye.height+g*K,Ae=s.extendFlat({},A,{y:_e});mt.attr("transform",Mt),mt.style("opacity",j*u.opacity(te)).call(n.font,{color:u.rgb(te),size:t.round(K,2),family:Y,weight:ne,style:se,variant:le,textcase:ce,shadow:xe,lineposition:pe}).attr(Ae).call(c.convertToTspans,y)}return a.previousPromises(y)}function Ve(xt){var Pt=xt.title,mt=t.select(Pt.node().parentNode);if(k&&k.selection&&k.side&&D){mt.attr("transform",null);var Mt=h[k.side],lt=k.side==="left"||k.side==="top"?-1:1,qe=i(k.pad)?k.pad:2,Ye=n.bBox(mt.node()),me={t:0,b:0,l:0,r:0},_e=y._fullLayout._reservedMargin;for(var Ae in _e)for(var ke in _e[Ae]){var Ee=_e[Ae][ke];me[ke]=Math.max(me[ke],Ee)}var De={left:me.l,top:me.t,right:x.width-me.r,bottom:x.height-me.b},Je=k.maxShift||lt*(De[k.side]-Ye[k.side]),Ue=0;if(Je<0)Ue=Je;else{var at=k.offsetLeft||0,rt=k.offsetTop||0;Ye.left-=at,Ye.right-=at,Ye.top-=rt,Ye.bottom-=rt,k.selection.each(function(){var At=n.bBox(this);s.bBoxIntersect(Ye,At,qe)&&(Ue=Math.max(Ue,lt*(At[k.side]-Ye[Mt])+qe))}),Ue=Math.min(Je,Ue),S._titleScoot=Math.abs(Ue)}if(Ue>0||Je<0){var ft={left:[-Ue,0],right:[Ue,0],top:[0,-Ue],bottom:[0,Ue]}[k.side];mt.attr("transform",l(ft[0],ft[1]))}}}Q.call(Te,ue);function Ze(xt,Pt){xt.text(Pt).on("mouseover.opacity",function(){t.select(this).transition().duration(f.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){t.select(this).transition().duration(f.HIDE_PLACEHOLDER).style("opacity",0)})}if(fe&&(D?Q.on(".opacity",null):(Ze(Q,C),R=!0),Q.call(c.makeEditable,{gd:y}).on("edit",function(xt){w!==void 0?o.call("_guiRestyle",y,M,xt,w):o.call("_guiRelayout",y,M,xt)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(Te)}).on("input",function(xt){this.text(xt||" ").call(c.positionText,A.x,A.y)}),N)){if(N&&!D){var Ke=Q.node().getBBox(),vt=Ke.y+Ke.height+g*K;ue.attr("y",vt)}U?ue.on(".opacity",null):(Ze(ue,H),V=!0),ue.call(c.makeEditable,{gd:y}).on("edit",function(xt){o.call("_guiRelayout",y,"title.subtitle.text",xt)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(Te)}).on("input",function(xt){this.text(xt||" ").call(c.positionText,ue.attr("x"),ue.attr("y"))})}return Q.classed("js-placeholder",R),ue&&!ue.empty()&&ue.classed("js-placeholder",V),E}r.exports={draw:m,SUBTITLE_PADDING_EM:g,SUBTITLE_PADDING_MATHJAX_EM:p}}}),Yd=de({"src/plots/cartesian/set_convert.js"(e,r){"use strict";var t=Yr(),i=eo().utcFormat,a=Qt(),o=a.numberFormat,s=da(),l=a.cleanNumber,n=a.ms2DateTime,u=a.dateTime2ms,c=a.ensureNumber,f=a.isArrayOrTypedArray,h=cn(),d=h.FP_SAFE,p=h.BADNUM,g=h.LOG_CLIP,m=h.ONEWEEK,y=h.ONEDAY,_=h.ONEHOUR,v=h.ONEMIN,x=h.ONESEC,S=Hs(),M=zl(),C=M.HOUR_PATTERN,w=M.WEEKDAY_PATTERN;function k(b){return Math.pow(10,b)}function A(b){return b!=null}r.exports=function(E,T){T=T||{};var F=E._id||"x",D=F.charAt(0);function R(U,V){if(U>0)return Math.log(U)/Math.LN10;if(U<=0&&V&&E.range&&E.range.length===2){var j=E.range[0],q=E.range[1];return .5*(j+q-2*g*Math.abs(j-q))}else return p}function P(U,V,j,q){if((q||{}).msUTC&&s(U))return+U;var Y=u(U,j||E.calendar);if(Y===p)if(s(U)){U=+U;var K=Math.floor(a.mod(U+.05,1)*10),te=Math.round(U-K/10);Y=u(new Date(te))+K/10}else return p;return Y}function z(U,V,j){return n(U,V,j||E.calendar)}function I(U){return E._categories[Math.round(U)]}function L(U){if(A(U)){if(E._categoriesMap===void 0&&(E._categoriesMap={}),E._categoriesMap[U]!==void 0)return E._categoriesMap[U];E._categories.push(typeof U=="number"?String(U):U);var V=E._categories.length-1;return E._categoriesMap[U]=V,V}return p}function B(U,V){for(var j=new Array(V),q=0;q<V;q++){var Y=(U[0]||[])[q],K=(U[1]||[])[q];j[q]=O([Y,K])}return j}function O(U){if(E._categoriesMap)return E._categoriesMap[U]}function G(U){var V=O(U);if(V!==void 0)return V;if(s(U))return+U}function W(U){return s(U)?+U:O(U)}function X(U,V,j){return t.round(j+V*U,2)}function Z(U,V,j){return(U-j)/V}var J=function(V){return s(V)?X(V,E._m,E._b):p},N=function(U){return Z(U,E._m,E._b)};if(E.rangebreaks){var H=D==="y";J=function(U){if(!s(U))return p;var V=E._rangebreaks.length;if(!V)return X(U,E._m,E._b);var j=H;E.range[0]>E.range[1]&&(j=!j);for(var q=j?-1:1,Y=q*U,K=0,te=0;te<V;te++){var ne=q*E._rangebreaks[te].min,se=q*E._rangebreaks[te].max;if(Y<ne)break;if(Y>se)K=te+1;else{K=Y<(ne+se)/2?te:te+1;break}}var le=E._B[K]||0;return isFinite(le)?X(U,E._m2,le):0},N=function(U){var V=E._rangebreaks.length;if(!V)return Z(U,E._m,E._b);for(var j=0,q=0;q<V&&!(U<E._rangebreaks[q].pmin);q++)U>E._rangebreaks[q].pmax&&(j=q+1);return Z(U,E._m2,E._B[j])}}E.c2l=E.type==="log"?R:c,E.l2c=E.type==="log"?k:c,E.l2p=J,E.p2l=N,E.c2p=E.type==="log"?function(U,V){return J(R(U,V))}:J,E.p2c=E.type==="log"?function(U){return k(N(U))}:N,["linear","-"].indexOf(E.type)!==-1?(E.d2r=E.r2d=E.d2c=E.r2c=E.d2l=E.r2l=l,E.c2d=E.c2r=E.l2d=E.l2r=c,E.d2p=E.r2p=function(U){return E.l2p(l(U))},E.p2d=E.p2r=N,E.cleanPos=c):E.type==="log"?(E.d2r=E.d2l=function(U,V){return R(l(U),V)},E.r2d=E.r2c=function(U){return k(l(U))},E.d2c=E.r2l=l,E.c2d=E.l2r=c,E.c2r=R,E.l2d=k,E.d2p=function(U,V){return E.l2p(E.d2r(U,V))},E.p2d=function(U){return k(N(U))},E.r2p=function(U){return E.l2p(l(U))},E.p2r=N,E.cleanPos=c):E.type==="date"?(E.d2r=E.r2d=a.identity,E.d2c=E.r2c=E.d2l=E.r2l=P,E.c2d=E.c2r=E.l2d=E.l2r=z,E.d2p=E.r2p=function(U,V,j){return E.l2p(P(U,0,j))},E.p2d=E.p2r=function(U,V,j){return z(N(U),V,j)},E.cleanPos=function(U){return a.cleanDate(U,p,E.calendar)}):E.type==="category"?(E.d2c=E.d2l=L,E.r2d=E.c2d=E.l2d=I,E.d2r=E.d2l_noadd=G,E.r2c=function(U){var V=W(U);return V!==void 0?V:E.fraction2r(.5)},E.l2r=E.c2r=c,E.r2l=W,E.d2p=function(U){return E.l2p(E.r2c(U))},E.p2d=function(U){return I(N(U))},E.r2p=E.d2p,E.p2r=N,E.cleanPos=function(U){return typeof U=="string"&&U!==""?U:c(U)}):E.type==="multicategory"&&(E.r2d=E.c2d=E.l2d=I,E.d2r=E.d2l_noadd=G,E.r2c=function(U){var V=G(U);return V!==void 0?V:E.fraction2r(.5)},E.r2c_just_indices=O,E.l2r=E.c2r=c,E.r2l=G,E.d2p=function(U){return E.l2p(E.r2c(U))},E.p2d=function(U){return I(N(U))},E.r2p=E.d2p,E.p2r=N,E.cleanPos=function(U){return Array.isArray(U)||typeof U=="string"&&U!==""?U:c(U)},E.setupMultiCategory=function(U){var V=E._traceIndices,j,q,Y=E._matchGroup;if(Y&&E._categories.length===0){for(var K in Y)if(K!==F){var te=T[S.id2name(K)];V=V.concat(te._traceIndices)}}var ne=[[0,{}],[0,{}]],se=[];for(j=0;j<V.length;j++){var le=U[V[j]];if(D in le){var ce=le[D],pe=le._length||a.minRowLength(ce);if(f(ce[0])&&f(ce[1]))for(q=0;q<pe;q++){var xe=ce[0][q],ye=ce[1][q];A(xe)&&A(ye)&&(se.push([xe,ye]),xe in ne[0][1]||(ne[0][1][xe]=ne[0][0]++),ye in ne[1][1]||(ne[1][1][ye]=ne[1][0]++))}}}for(se.sort(function(fe,ae){var ee=ne[0][1],ie=ee[fe[0]]-ee[ae[0]];if(ie)return ie;var Q=ne[1][1];return Q[fe[1]]-Q[ae[1]]}),j=0;j<se.length;j++)L(se[j])}),E.fraction2r=function(U){var V=E.r2l(E.range[0]),j=E.r2l(E.range[1]);return E.l2r(V+U*(j-V))},E.r2fraction=function(U){var V=E.r2l(E.range[0]),j=E.r2l(E.range[1]);return(E.r2l(U)-V)/(j-V)},E.limitRange=function(U){var V=E.minallowed,j=E.maxallowed;if(!(V===void 0&&j===void 0)){U||(U="range");var q=a.nestedProperty(E,U).get(),Y=a.simpleMap(q,E.r2l),K=Y[1]<Y[0];K&&Y.reverse();var te=a.simpleMap([V,j],E.r2l);if(V!==void 0&&Y[0]<te[0]&&(q[K?1:0]=V,Y[0]=te[0]),j!==void 0&&Y[1]>te[1]&&(q[K?0:1]=j,Y[1]=te[1]),Y[0]>=Y[1])if(V!==void 0){var ne=te[0]+1;j!==void 0&&(ne=Math.min(ne,te[1])),q[K?0:1]=E.l2r(ne)}else j!==void 0&&(q[K?1:0]=E.l2r(te[1]-1))}},E.cleanRange=function(U,V){E._cleanRange(U,V),E.limitRange(U)},E._cleanRange=function(U,V){V||(V={}),U||(U="range");var j=a.nestedProperty(E,U).get(),q,Y;if(E.type==="date"?Y=a.dfltRange(E.calendar):D==="y"?Y=M.DFLTRANGEY:E._name==="realaxis"?Y=[0,1]:Y=V.dfltRange||M.DFLTRANGEX,Y=Y.slice(),(E.rangemode==="tozero"||E.rangemode==="nonnegative")&&(Y[0]=0),!j||j.length!==2){a.nestedProperty(E,U).set(Y);return}var K=j[0]===null,te=j[1]===null;for(E.type==="date"&&!E.autorange&&(j[0]=a.cleanDate(j[0],p,E.calendar),j[1]=a.cleanDate(j[1],p,E.calendar)),q=0;q<2;q++)if(E.type==="date"){if(!a.isDateTime(j[q],E.calendar)){E[U]=Y;break}if(E.r2l(j[0])===E.r2l(j[1])){var ne=a.constrain(E.r2l(j[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);j[0]=E.l2r(ne-1e3),j[1]=E.l2r(ne+1e3);break}}else{if(!s(j[q]))if(!(K||te)&&s(j[1-q]))j[q]=j[1-q]*(q?10:.1);else{E[U]=Y;break}if(j[q]<-d?j[q]=-d:j[q]>d&&(j[q]=d),j[0]===j[1]){var se=Math.max(1,Math.abs(j[0]*1e-6));j[0]-=se,j[1]+=se}}},E.setScale=function(U){var V=T._size;if(E.overlaying){var j=S.getFromId({_fullLayout:T},E.overlaying);E.domain=j.domain}var q=U&&E._r?"_r":"range",Y=E.calendar;E.cleanRange(q);var K=E.r2l(E[q][0],Y),te=E.r2l(E[q][1],Y),ne=D==="y";if(ne?(E._offset=V.t+(1-E.domain[1])*V.h,E._length=V.h*(E.domain[1]-E.domain[0]),E._m=E._length/(K-te),E._b=-E._m*te):(E._offset=V.l+E.domain[0]*V.w,E._length=V.w*(E.domain[1]-E.domain[0]),E._m=E._length/(te-K),E._b=-E._m*K),E._rangebreaks=[],E._lBreaks=0,E._m2=0,E._B=[],E.rangebreaks){var se,le;if(E._rangebreaks=E.locateBreaks(Math.min(K,te),Math.max(K,te)),E._rangebreaks.length){for(se=0;se<E._rangebreaks.length;se++)le=E._rangebreaks[se],E._lBreaks+=Math.abs(le.max-le.min);var ce=ne;K>te&&(ce=!ce),ce&&E._rangebreaks.reverse();var pe=ce?-1:1;for(E._m2=pe*E._length/(Math.abs(te-K)-E._lBreaks),E._B.push(-E._m2*(ne?te:K)),se=0;se<E._rangebreaks.length;se++)le=E._rangebreaks[se],E._B.push(E._B[E._B.length-1]-pe*E._m2*(le.max-le.min));for(se=0;se<E._rangebreaks.length;se++)le=E._rangebreaks[se],le.pmin=J(le.min),le.pmax=J(le.max)}}if(!isFinite(E._m)||!isFinite(E._b)||E._length<0)throw T._replotting=!1,new Error("Something went wrong with axis scaling")},E.maskBreaks=function(U){var V=E.rangebreaks||[],j,q,Y,K,te;V._cachedPatterns||(V._cachedPatterns=V.map(function(ee){return ee.enabled&&ee.bounds?a.simpleMap(ee.bounds,ee.pattern?l:E.d2c):null})),V._cachedValues||(V._cachedValues=V.map(function(ee){return ee.enabled&&ee.values?a.simpleMap(ee.values,E.d2c).sort(a.sorterAsc):null}));for(var ne=0;ne<V.length;ne++){var se=V[ne];if(se.enabled){if(se.bounds){var le=se.pattern;switch(j=V._cachedPatterns[ne],q=j[0],Y=j[1],le){case w:te=new Date(U),K=te.getUTCDay(),q>Y&&(Y+=7,K<q&&(K+=7));break;case C:te=new Date(U);var ce=te.getUTCHours(),pe=te.getUTCMinutes(),xe=te.getUTCSeconds(),ye=te.getUTCMilliseconds();K=ce+(pe/60+xe/3600+ye/36e5),q>Y&&(Y+=24,K<q&&(K+=24));break;case"":K=U;break}if(K>=q&&K<Y)return p}else for(var fe=V._cachedValues[ne],ae=0;ae<fe.length;ae++)if(q=fe[ae],Y=q+se.dvalue,U>=q&&U<Y)return p}}return U},E.locateBreaks=function(U,V){var j,q,Y,K,te=[];if(!E.rangebreaks)return te;var ne=E.rangebreaks.slice().sort(function(Q,ue){return Q.pattern===w&&ue.pattern===C?-1:ue.pattern===w&&Q.pattern===C?1:0}),se=function(Q,ue){if(Q=a.constrain(Q,U,V),ue=a.constrain(ue,U,V),Q!==ue){for(var ge=!0,Me=0;Me<te.length;Me++){var Te=te[Me];Q<Te.max&&ue>=Te.min&&(Q<Te.min&&(Te.min=Q),ue>Te.max&&(Te.max=ue),ge=!1)}ge&&te.push({min:Q,max:ue})}};for(j=0;j<ne.length;j++){var le=ne[j];if(le.enabled)if(le.bounds){var ce=U,pe=V;le.pattern&&(ce=Math.floor(ce)),q=a.simpleMap(le.bounds,le.pattern?l:E.r2l),Y=q[0],K=q[1];var xe=new Date(ce),ye,fe;switch(le.pattern){case w:fe=m,ye=((K<Y?7:0)+(K-Y))*y,ce+=Y*y-(xe.getUTCDay()*y+xe.getUTCHours()*_+xe.getUTCMinutes()*v+xe.getUTCSeconds()*x+xe.getUTCMilliseconds());break;case C:fe=y,ye=((K<Y?24:0)+(K-Y))*_,ce+=Y*_-(xe.getUTCHours()*_+xe.getUTCMinutes()*v+xe.getUTCSeconds()*x+xe.getUTCMilliseconds());break;default:ce=Math.min(q[0],q[1]),pe=Math.max(q[0],q[1]),fe=pe-ce,ye=fe}for(var ae=ce;ae<pe;ae+=fe)se(ae,ae+ye)}else for(var ee=a.simpleMap(le.values,E.d2c),ie=0;ie<ee.length;ie++)Y=ee[ie],K=Y+le.dvalue,se(Y,K)}return te.sort(function(Q,ue){return Q.min-ue.min}),te},E.makeCalcdata=function(U,V,j){var q,Y,K,te,ne=E.type,se=ne==="date"&&U[V+"calendar"];if(V in U){if(q=U[V],te=U._length||a.minRowLength(q),a.isTypedArray(q)&&(ne==="linear"||ne==="log")){if(te===q.length)return q;if(q.subarray)return q.subarray(0,te)}if(ne==="multicategory")return B(q,te);for(Y=new Array(te),K=0;K<te;K++)Y[K]=E.d2c(q[K],0,se,j)}else{var le=V+"0"in U?E.d2c(U[V+"0"],0,se):0,ce=U["d"+V]?Number(U["d"+V]):1;for(q=U[{x:"y",y:"x"}[V]],te=U._length||q.length,Y=new Array(te),K=0;K<te;K++)Y[K]=le+K*ce}if(E.rangebreaks)for(K=0;K<te;K++)Y[K]=E.maskBreaks(Y[K]);return Y},E.isValidRange=function(U,V){return Array.isArray(U)&&U.length===2&&(V&&U[0]===null||s(E.r2l(U[0])))&&(V&&U[1]===null||s(E.r2l(U[1])))},E.getAutorangeDflt=function(U,V){var j=!E.isValidRange(U,"nullOk");return j&&V&&V.reverseDflt?j="reversed":U&&(U[0]===null&&U[1]===null?j=!0:U[0]===null&&U[1]!==null?j="min":U[0]!==null&&U[1]===null&&(j="max")),j},E.isReversed=function(){var U=E.autorange;return U==="reversed"||U==="min reversed"||U==="max reversed"},E.isPtWithinRange=function(U,V){var j=E.c2l(U[D],null,V),q=E.r2l(E.range[0]),Y=E.r2l(E.range[1]);return q<Y?q<=j&&j<=Y:Y<=j&&j<=q},E._emptyCategories=function(){E._categories=[],E._categoriesMap={}},E.clearCalc=function(){var U=E._matchGroup;if(U){var V=null,j=null;for(var q in U){var Y=T[S.id2name(q)];if(Y._categories){V=Y._categories,j=Y._categoriesMap;break}}V&&j?(E._categories=V,E._categoriesMap=j):E._emptyCategories()}else E._emptyCategories();if(E._initialCategories)for(var K=0;K<E._initialCategories.length;K++)L(E._initialCategories[K])},E.sortByInitialCategories=function(){var U=[];if(E._emptyCategories(),E._initialCategories)for(var V=0;V<E._initialCategories.length;V++)L(E._initialCategories[V]);U=U.concat(E._traceIndices);var j=E._matchGroup;for(var q in j)if(F!==q){var Y=T[S.id2name(q)];Y._categories=E._categories,Y._categoriesMap=E._categoriesMap,U=U.concat(Y._traceIndices)}return U};var $=T._d3locale;E.type==="date"&&(E._dateFormat=$?$.timeFormat:i,E._extraFormat=T._extraFormat),E._separators=T.separators,E._numFormat=$?$.numberFormat:o,delete E._minDtick,delete E._forceTick0}}}),h1=de({"src/plots/cartesian/axis_autotype.js"(e,r){"use strict";var t=da(),i=Qt(),a=cn().BADNUM,o=i.isArrayOrTypedArray,s=i.isDateTime,l=i.cleanNumber,n=Math.round;r.exports=function(m,y,_){var v=m,x=_.noMultiCategory;if(o(v)&&!v.length)return"-";if(!x&&p(v))return"multicategory";if(x&&Array.isArray(v[0])){for(var S=[],M=0;M<v.length;M++)if(o(v[M]))for(var C=0;C<v[M].length;C++)S.push(v[M][C]);v=S}if(f(v,y))return"date";var w=_.autotypenumbers!=="strict";return d(v,w)?"category":c(v,w)?"linear":"-"};function u(g,m){return m?t(g):typeof g=="number"}function c(g,m){for(var y=g.length,_=0;_<y;_++)if(u(g[_],m))return!0;return!1}function f(g,m){for(var y=g.length,_=h(y),v=0,x=0,S={},M=0;M<y;M+=_){var C=n(M),w=g[C],k=String(w);S[k]||(S[k]=1,s(w,m)&&v++,t(w)&&x++)}return v>x*2}function h(g){return Math.max(1,(g-1)/1e3)}function d(g,m){for(var y=g.length,_=h(y),v=0,x=0,S={},M=0;M<y;M+=_){var C=n(M),w=g[C],k=String(w);if(!S[k]){S[k]=1;var A=typeof w;A==="boolean"?x++:(m?l(w)!==a:A==="number")?v++:A==="string"&&x++}}return x>v*2}function p(g){return o(g[0])&&o(g[1])}}}),vd=de({"src/plots/cartesian/autorange.js"(e,r){"use strict";var t=Yr(),i=da(),a=Qt(),o=cn().FP_SAFE,s=Ma(),l=hn(),n=Hs(),u=n.getFromId,c=n.isLinked;r.exports={applyAutorangeOptions:E,getAutoRange:f,makePadFn:d,doAutoRange:y,findExtremes:_,concatExtremes:m};function f(T,F){var D,R,P=[],z=T._fullLayout,I=d(z,F,0),L=d(z,F,1),B=m(T,F),O=B.min,G=B.max;if(O.length===0||G.length===0)return a.simpleMap(F.range,F.r2l);var W=O[0].val,X=G[0].val;for(D=1;D<O.length&&W===X;D++)W=Math.min(W,O[D].val);for(D=1;D<G.length&&W===X;D++)X=Math.max(X,G[D].val);var Z=F.autorange,J=Z==="reversed"||Z==="min reversed"||Z==="max reversed";if(!J&&F.range){var N=a.simpleMap(F.range,F.r2l);J=N[1]<N[0]}F.autorange==="reversed"&&(F.autorange=!0);var H=F.rangemode,$=H==="tozero",U=H==="nonnegative",V=F._length,j=V/10,q=0,Y,K,te,ne,se,le;for(D=0;D<O.length;D++)for(Y=O[D],R=0;R<G.length;R++)K=G[R],le=K.val-Y.val-h(F,Y.val,K.val),le>0&&(se=V-I(Y)-L(K),se>j?le/se>q&&(te=Y,ne=K,q=le/se):le/V>q&&(te={val:Y.val,nopad:1},ne={val:K.val,nopad:1},q=le/V));function ce(ae,ee){return Math.max(ae,L(ee))}if(W===X){var pe=W-1,xe=W+1;if($)if(W===0)P=[0,1];else{var ye=(W>0?G:O).reduce(ce,0),fe=W/(1-Math.min(.5,ye/V));P=W>0?[0,fe]:[fe,0]}else U?P=[Math.max(0,pe),Math.max(1,xe)]:P=[pe,xe]}else $?(te.val>=0&&(te={val:0,nopad:1}),ne.val<=0&&(ne={val:0,nopad:1})):U&&(te.val-q*I(te)<0&&(te={val:0,nopad:1}),ne.val<=0&&(ne={val:1,nopad:1})),q=(ne.val-te.val-h(F,Y.val,K.val))/(V-I(te)-L(ne)),P=[te.val-q*I(te),ne.val+q*L(ne)];return P=E(P,F),F.limitRange&&F.limitRange(),J&&P.reverse(),a.simpleMap(P,F.l2r||Number)}function h(T,F,D){var R=0;if(T.rangebreaks)for(var P=T.locateBreaks(F,D),z=0;z<P.length;z++){var I=P[z];R+=I.max-I.min}return R}function d(T,F,D){var R=.05*F._length,P=F._anchorAxis||{};if((F.ticklabelposition||"").indexOf("inside")!==-1||(P.ticklabelposition||"").indexOf("inside")!==-1){var z=F.isReversed();if(!z){var I=a.simpleMap(F.range,F.r2l);z=I[1]<I[0]}z&&(D=!D)}var L=0;return c(T,F._id)||(L=g(T,F,D)),R=Math.max(L,R),F.constrain==="domain"&&F._inputDomain&&(R*=(F._inputDomain[1]-F._inputDomain[0])/(F.domain[1]-F.domain[0])),function(O){return O.nopad?0:O.pad+(O.extrapad?R:L)}}var p=3;function g(T,F,D){var R=0,P=F._id.charAt(0)==="x";for(var z in T._plots){var I=T._plots[z];if(!(F._id!==I.xaxis._id&&F._id!==I.yaxis._id)){var L=(P?I.yaxis:I.xaxis)||{};if((L.ticklabelposition||"").indexOf("inside")!==-1&&(!D&&(L.side==="left"||L.side==="bottom")||D&&(L.side==="top"||L.side==="right"))){if(L._vals){var B=a.deg2rad(L._tickAngles[L._id+"tick"]||0),O=Math.abs(Math.cos(B)),G=Math.abs(Math.sin(B));if(!L._vals[0].bb){var W=L._id+"tick",X=L._selections[W];X.each(function(U){var V=t.select(this),j=V.select(".text-math-group");j.empty()&&(U.bb=l.bBox(V.node()))})}for(var Z=0;Z<L._vals.length;Z++){var J=L._vals[Z],N=J.bb;if(N){var H=2*p+N.width,$=2*p+N.height;R=Math.max(R,P?Math.max(H*O,$*G):Math.max($*O,H*G))}}}L.ticks==="inside"&&L.ticklabelposition==="inside"&&(R+=L.ticklen||0)}}}return R}function m(T,F,D){var R=F._id,P=T._fullData,z=T._fullLayout,I=[],L=[],B,O,G;function W(H,$){for(B=0;B<$.length;B++){var U=H[$[B]],V=(U._extremes||{})[R];if(U.visible===!0&&V){for(O=0;O<V.min.length;O++)G=V.min[O],v(I,G.val,G.pad,{extrapad:G.extrapad});for(O=0;O<V.max.length;O++)G=V.max[O],x(L,G.val,G.pad,{extrapad:G.extrapad})}}}if(W(P,F._traceIndices),W(z.annotations||[],F._annIndices||[]),W(z.shapes||[],F._shapeIndices||[]),F._matchGroup&&!D){for(var X in F._matchGroup)if(X!==F._id){var Z=u(T,X),J=m(T,Z,!0),N=F._length/Z._length;for(O=0;O<J.min.length;O++)G=J.min[O],v(I,G.val,G.pad*N,{extrapad:G.extrapad});for(O=0;O<J.max.length;O++)G=J.max[O],x(L,G.val,G.pad*N,{extrapad:G.extrapad})}}return{min:I,max:L}}function y(T,F,D){if(F.setScale(),F.autorange){F.range=D?D.slice():f(T,F),F._r=F.range.slice(),F._rl=a.simpleMap(F._r,F.r2l);var R=F._input,P={};P[F._attr+".range"]=F.range,P[F._attr+".autorange"]=F.autorange,s.call("_storeDirectGUIEdit",T.layout,T._fullLayout._preGUI,P),R.range=F.range.slice(),R.autorange=F.autorange}var z=F._anchorAxis;if(z&&z.rangeslider){var I=z.rangeslider[F._name];I&&I.rangemode==="auto"&&(I.range=f(T,F)),z._input.rangeslider[F._name]=a.extendFlat({},I)}}function _(T,F,D){D||(D={}),T._m||T.setScale();var R=[],P=[],z=F.length,I=D.padded||!1,L=D.tozero&&(T.type==="linear"||T.type==="-"),B=T.type==="log",O=!1,G=D.vpadLinearized||!1,W,X,Z,J,N,H,$,U,V;function j(ce){if(Array.isArray(ce))return O=!0,function(xe){return Math.max(Number(ce[xe]||0),0)};var pe=Math.max(Number(ce||0),0);return function(){return pe}}var q=j((T._m>0?D.ppadplus:D.ppadminus)||D.ppad||0),Y=j((T._m>0?D.ppadminus:D.ppadplus)||D.ppad||0),K=j(D.vpadplus||D.vpad),te=j(D.vpadminus||D.vpad);if(!O){if(U=1/0,V=-1/0,B)for(W=0;W<z;W++)X=F[W],X<U&&X>0&&(U=X),X>V&&X<o&&(V=X);else for(W=0;W<z;W++)X=F[W],X<U&&X>-o&&(U=X),X>V&&X<o&&(V=X);F=[U,V],z=2}var ne={tozero:L,extrapad:I};function se(ce){Z=F[ce],i(Z)&&(H=q(ce),$=Y(ce),G?(J=T.c2l(Z)-te(ce),N=T.c2l(Z)+K(ce)):(U=Z-te(ce),V=Z+K(ce),B&&U<V/10&&(U=V/10),J=T.c2l(U),N=T.c2l(V)),L&&(J=Math.min(0,J),N=Math.max(0,N)),M(J)&&v(R,J,$,ne),M(N)&&x(P,N,H,ne))}var le=Math.min(6,z);for(W=0;W<le;W++)se(W);for(W=z-1;W>=le;W--)se(W);return{min:R,max:P,opts:D}}function v(T,F,D,R){S(T,F,D,R,C)}function x(T,F,D,R){S(T,F,D,R,w)}function S(T,F,D,R,P){for(var z=R.tozero,I=R.extrapad,L=!0,B=0;B<T.length&&L;B++){var O=T[B];if(P(O.val,F)&&O.pad>=D&&(O.extrapad||!I)){L=!1;break}else P(F,O.val)&&O.pad<=D&&(I||!O.extrapad)&&(T.splice(B,1),B--)}if(L){var G=z&&F===0;T.push({val:F,pad:G?0:D,extrapad:G?!1:I})}}function M(T){return i(T)&&Math.abs(T)<o}function C(T,F){return T<=F}function w(T,F){return T>=F}function k(T,F){var D=F.autorangeoptions;return D&&D.minallowed!==void 0&&b(F,D.minallowed,D.maxallowed)?D.minallowed:D&&D.clipmin!==void 0&&b(F,D.clipmin,D.clipmax)?Math.max(T,F.d2l(D.clipmin)):T}function A(T,F){var D=F.autorangeoptions;return D&&D.maxallowed!==void 0&&b(F,D.minallowed,D.maxallowed)?D.maxallowed:D&&D.clipmax!==void 0&&b(F,D.clipmin,D.clipmax)?Math.min(T,F.d2l(D.clipmax)):T}function b(T,F,D){return F!==void 0&&D!==void 0?(F=T.d2l(F),D=T.d2l(D),F<D):!0}function E(T,F){if(!F||!F.autorangeoptions)return T;var D=T[0],R=T[1],P=F.autorangeoptions.include;if(P!==void 0){var z=F.d2l(D),I=F.d2l(R);a.isArrayOrTypedArray(P)||(P=[P]);for(var L=0;L<P.length;L++){var B=F.d2l(P[L]);z>=B&&(z=B,D=B),I<=B&&(I=B,R=B)}}return D=k(D,F),R=A(R,F),[D,R]}}}),nn=de({"src/plots/cartesian/axes.js"(e,r){"use strict";var t=Yr(),i=da(),a=Es(),o=Ma(),s=Qt(),l=s.strTranslate,n=Zo(),u=xv(),c=ta(),f=hn(),h=Mu(),d=EE(),p=zl(),g=cn(),m=g.ONEMAXYEAR,y=g.ONEAVGYEAR,_=g.ONEMINYEAR,v=g.ONEMAXQUARTER,x=g.ONEAVGQUARTER,S=g.ONEMINQUARTER,M=g.ONEMAXMONTH,C=g.ONEAVGMONTH,w=g.ONEMINMONTH,k=g.ONEWEEK,A=g.ONEDAY,b=A/2,E=g.ONEHOUR,T=g.ONEMIN,F=g.ONESEC,D=g.ONEMILLI,R=g.ONEMICROSEC,P=g.MINUS_SIGN,z=g.BADNUM,I={K:"zeroline"},L={K:"gridline",L:"path"},B={K:"minor-gridline",L:"path"},O={K:"tick",L:"path"},G={K:"tick",L:"text"},W={width:["x","r","l","xl","xr"],height:["y","t","b","yt","yb"],right:["r","xr"],left:["l","xl"],top:["t","yt"],bottom:["b","yb"]},X=Bl(),Z=X.MID_SHIFT,J=X.CAP_SHIFT,N=X.LINE_SPACING,H=X.OPPOSITE_SIDE,$=3,U=r.exports={};U.setConvert=Yd();var V=h1(),j=Hs(),q=j.idSort,Y=j.isLinked;U.id2name=j.id2name,U.name2id=j.name2id,U.cleanId=j.cleanId,U.list=j.list,U.listIds=j.listIds,U.getFromId=j.getFromId,U.getFromTrace=j.getFromTrace;var K=vd();U.getAutoRange=K.getAutoRange,U.findExtremes=K.findExtremes;var te=1e-4;function ne(Be){var Fe=(Be[1]-Be[0])*te;return[Be[0]-Fe,Be[1]+Fe]}function se(Be,Fe,Et){if(![Et,Be,Fe].every(i)||Et===0)return Be;let St=Math.round((Be-Fe)/Et),zt=Fe+St*Et;return Be!==zt&&Math.abs(Be-zt)<Math.abs(Et)*1e-6?zt:Be}U.coerceRef=function(Be,Fe,Et,St,zt,Wt){var Yt=St.charAt(St.length-1),ze=Et._fullLayout._subplots[Yt+"axis"],tt=St+"ref",ct={};return zt||(zt=ze[0]||(typeof Wt=="string"?Wt:Wt[0])),Wt||(Wt=zt),ze=ze.concat(ze.map(function(wt){return wt+" domain"})),ct[tt]={valType:"enumerated",values:ze.concat(Wt?typeof Wt=="string"?[Wt]:Wt:[]),dflt:zt},s.coerce(Be,Fe,ct,tt)},U.coerceRefArray=function(Be,Fe,Et,St,zt,Wt,Yt){let ze=St.charAt(St.length-1);var tt=Et._fullLayout._subplots[ze+"axis"];let ct=St+"ref";var wt=Be[ct];zt||(zt=tt[0]||(typeof Wt=="string"?Wt:Wt[0])),tt=tt.concat(tt.map(It=>It+" domain")),tt=tt.concat(Wt||[]),wt.length>Yt?(s.warn("Array attribute "+ct+" has more entries than expected, truncating to "+Yt),wt=wt.slice(0,Yt)):wt.length<Yt&&(s.warn("Array attribute "+ct+" has fewer entries than expected, extending with default value"),wt=wt.concat(Array(Yt-wt.length).fill(zt)));for(var Nt=0;Nt<wt.length;Nt++)wt[Nt]=j.cleanId(wt[Nt],ze,!0)||wt[Nt],tt.includes(wt[Nt])||(wt[Nt]=zt);return Fe[ct]=wt,wt},U.getRefType=function(Be){return Be===void 0?Be:Array.isArray(Be)?"array":Be==="paper"?"paper":Be==="pixel"?"pixel":/( domain)$/.test(Be)?"domain":"range"},U.coercePosition=function(Be,Fe,Et,St,zt,Wt){var Yt,ze,tt=U.getRefType(St);if(tt!=="range")Yt=s.ensureNumber,ze=Et(zt,Wt);else{var ct=U.getFromId(Fe,St);Wt=ct.fraction2r(Wt),ze=Et(zt,Wt),Yt=ct.cleanPos}Be[zt]=Yt(ze)},U.cleanPosition=function(Be,Fe,Et){var St=Et==="paper"||Et==="pixel"?s.ensureNumber:U.getFromId(Fe,Et).cleanPos;return St(Be)},U.redrawComponents=function(Be,Fe){Fe=Fe||U.listIds(Be);var Et=Be._fullLayout;function St(zt,Wt,Yt,ze){for(var tt=o.getComponentMethod(zt,Wt),ct={},wt=0;wt<Fe.length;wt++)for(var Nt=Et[U.id2name(Fe[wt])],It=Nt[Yt],Zt=0;Zt<It.length;Zt++){var qt=It[Zt];if(!ct[qt]&&(tt(Be,qt),ct[qt]=1,ze))return}}St("annotations","drawOne","_annIndices"),St("shapes","drawOne","_shapeIndices"),St("images","draw","_imgIndices",!0),St("selections","drawOne","_selectionIndices")};var le=U.getDataConversions=function(Be,Fe,Et,St){var zt,Wt=Et==="x"||Et==="y"||Et==="z"?Et:St;if(s.isArrayOrTypedArray(Wt)){if(zt={type:V(St,void 0,{autotypenumbers:Be._fullLayout.autotypenumbers}),_categories:[]},U.setConvert(zt),zt.type==="category")for(var Yt=0;Yt<St.length;Yt++)zt.d2c(St[Yt])}else zt=U.getFromTrace(Be,Fe,Wt);return zt?{d2c:zt.d2c,c2d:zt.c2d}:Wt==="ids"?{d2c:pe,c2d:pe}:{d2c:ce,c2d:ce}};function ce(Be){return+Be}function pe(Be){return String(Be)}U.getDataToCoordFunc=function(Be,Fe,Et,St){return le(Be,Fe,Et,St).d2c},U.counterLetter=function(Be){var Fe=Be.charAt(0);if(Fe==="x")return"y";if(Fe==="y")return"x"},U.minDtick=function(Be,Fe,Et,St){["log","category","multicategory"].indexOf(Be.type)!==-1||!St?Be._minDtick=0:Be._minDtick===void 0?(Be._minDtick=Fe,Be._forceTick0=Et):Be._minDtick&&((Be._minDtick/Fe+1e-6)%1<2e-6&&((Et-Be._forceTick0)/Fe%1+1.000001)%1<2e-6?(Be._minDtick=Fe,Be._forceTick0=Et):((Fe/Be._minDtick+1e-6)%1>2e-6||((Et-Be._forceTick0)/Be._minDtick%1+1.000001)%1>2e-6)&&(Be._minDtick=0))},U.saveRangeInitial=function(Be,Fe){for(var Et=U.list(Be,"",!0),St=!1,zt=0;zt<Et.length;zt++){var Wt=Et[zt],Yt=Wt._rangeInitial0===void 0&&Wt._rangeInitial1===void 0,ze=Yt||Wt.range[0]!==Wt._rangeInitial0||Wt.range[1]!==Wt._rangeInitial1,tt=Wt.autorange;(Yt&&tt!==!0||Fe&&ze)&&(Wt._rangeInitial0=tt==="min"||tt==="max reversed"?void 0:Wt.range[0],Wt._rangeInitial1=tt==="max"||tt==="min reversed"?void 0:Wt.range[1],Wt._autorangeInitial=tt,St=!0)}return St},U.saveShowSpikeInitial=function(Be,Fe){for(var Et=U.list(Be,"",!0),St=!1,zt="on",Wt=0;Wt<Et.length;Wt++){var Yt=Et[Wt],ze=Yt._showSpikeInitial===void 0,tt=ze||Yt.showspikes!==Yt._showspikes;(ze||Fe&&tt)&&(Yt._showSpikeInitial=Yt.showspikes,St=!0),zt==="on"&&!Yt.showspikes&&(zt="off")}return Be._fullLayout._cartesianSpikesEnabled=zt,St},U.autoBin=function(Be,Fe,Et,St,zt,Wt){var Yt=s.aggNums(Math.min,null,Be),ze=s.aggNums(Math.max,null,Be);if(Fe.type==="category"||Fe.type==="multicategory")return{start:Yt-.5,end:ze+.5,size:Math.max(1,Math.round(Wt)||1),_dataSpan:ze-Yt};zt||(zt=Fe.calendar);var tt;if(Fe.type==="log"?tt={type:"linear",range:[Yt,ze]}:tt={type:Fe.type,range:s.simpleMap([Yt,ze],Fe.c2r,0,zt),calendar:zt},U.setConvert(tt),Wt=Wt&&d.dtick(Wt,tt.type),Wt)tt.dtick=Wt,tt.tick0=d.tick0(void 0,tt.type,zt);else{var ct;if(Et)ct=(ze-Yt)/Et;else{var wt=s.distinctVals(Be),Nt=Math.pow(10,Math.floor(Math.log(wt.minDiff)/Math.LN10)),It=Nt*s.roundUp(wt.minDiff/Nt,[.9,1.9,4.9,9.9],!0);ct=Math.max(It,2*s.stdev(Be)/Math.pow(Be.length,St?.25:.4)),i(ct)||(ct=1)}U.autoTicks(tt,ct)}var Zt=tt.dtick,qt=U.tickIncrement(U.tickFirst(tt),Zt,"reverse",zt),vr,Br;if(typeof Zt=="number")qt=xe(qt,Be,tt,Yt,ze),Br=1+Math.floor((ze-qt)/Zt),vr=qt+Br*Zt;else for(tt.dtick.charAt(0)==="M"&&(qt=ye(qt,Be,Zt,Yt,zt)),vr=qt,Br=0;vr<=ze;)vr=U.tickIncrement(vr,Zt,!1,zt),Br++;return{start:Fe.c2r(qt,0,zt),end:Fe.c2r(vr,0,zt),size:Zt,_dataSpan:ze-Yt}};function xe(Be,Fe,Et,St,zt){var Wt=0,Yt=0,ze=0,tt=0;function ct(Zt){return(1+(Zt-Be)*100/Et.dtick)%100<2}for(var wt=0;wt<Fe.length;wt++)Fe[wt]%1===0?ze++:i(Fe[wt])||tt++,ct(Fe[wt])&&Wt++,ct(Fe[wt]+Et.dtick/2)&&Yt++;var Nt=Fe.length-tt;if(ze===Nt&&Et.type!=="date")Et.dtick<1?Be=St-.5*Et.dtick:(Be-=.5,Be+Et.dtick<St&&(Be+=Et.dtick));else if(Yt<Nt*.1&&(Wt>Nt*.3||ct(St)||ct(zt))){var It=Et.dtick/2;Be+=Be+It<St?It:-It}return Be}function ye(Be,Fe,Et,St,zt){var Wt=s.findExactDates(Fe,zt),Yt=.8;if(Wt.exactDays>Yt){var ze=Number(Et.slice(1));Wt.exactYears>Yt&&ze%12===0?Be=U.tickIncrement(Be,"M6","reverse")+A*1.5:Wt.exactMonths>Yt?Be=U.tickIncrement(Be,"M1","reverse")+A*15.5:Be-=b;var tt=U.tickIncrement(Be,Et);if(tt<=St)return tt}return Be}U.prepMinorTicks=function(Be,Fe,Et){var St,zt;if(!((St=Fe.minor)!=null&&St.dtick)){delete Be.dtick;var Wt=Fe.dtick&&i(Fe._tmin),Yt;if(Wt){var ze=U.tickIncrement(Fe._tmin,Fe.dtick,!0);Yt=[Fe._tmin,ze*.99+Fe._tmin*.01]}else{var tt=s.simpleMap(Fe.range,Fe.r2l);Yt=[tt[0],.8*tt[0]+.2*tt[1]]}if(Be.range=s.simpleMap(Yt,Fe.l2r),Be._isMinor=!0,U.prepTicks(Be,Et),Wt){var ct=i(Fe.dtick),wt=i(Be.dtick),Nt=ct?Fe.dtick:+Fe.dtick.substring(1),It=wt?Be.dtick:+Be.dtick.substring(1);ct&&wt?fe(Nt,It)?Nt===2*k&&It===2*A&&(Be.dtick=k):Nt===2*k&&It===3*A?Be.dtick=k:Nt===k&&!(Fe._input.minor||{}).nticks?Be.dtick=A:ae(Nt/It,2.5)?Be.dtick=Nt/2:Be.dtick=Nt:String(Fe.dtick).charAt(0)==="M"?wt?Be.dtick="M1":fe(Nt,It)?Nt>=12&&It===2&&(Be.dtick="M3"):Be.dtick=Fe.dtick:String(Be.dtick).charAt(0)==="L"?String(Fe.dtick).charAt(0)==="L"?fe(Nt,It)||(Be.dtick=ae(Nt/It,2.5)?Fe.dtick/2:Fe.dtick):Be.dtick="D1":Be.dtick==="D2"&&+Fe.dtick>1&&(Be.dtick=1)}Be.range=Fe.range}((zt=Fe.minor)==null?void 0:zt._tick0Init)===void 0&&(Be.tick0=Fe.tick0)};function fe(Be,Fe){return Math.abs((Be/Fe+.5)%1-.5)<.001}function ae(Be,Fe){return Math.abs(Be/Fe-1)<.001}U.prepTicks=function(Be,Fe){var Et=s.simpleMap(Be.range,Be.r2l,void 0,void 0,Fe);if(Be.tickmode==="auto"||!Be.dtick){var St=Be.nticks,zt;St||(Be.type==="category"||Be.type==="multicategory"?(zt=Be.tickfont?s.bigFont(Be.tickfont.size||12):15,St=Be._length/zt):(zt=Be._id.charAt(0)==="y"?40:80,St=s.constrain(Be._length/zt,4,9)+1),Be._name==="radialaxis"&&(St*=2)),Be.minor&&Be.minor.tickmode!=="array"||Be.tickmode==="array"&&(St*=100),Be._roughDTick=Math.abs(Et[1]-Et[0])/St,U.autoTicks(Be,Be._roughDTick),Be._minDtick>0&&Be.dtick<Be._minDtick*2&&(Be.dtick=Be._minDtick,Be.tick0=Be.l2r(Be._forceTick0))}Be.ticklabelmode==="period"&&ie(Be),Be.tick0||(Be.tick0=Be.type==="date"?"2000-01-01":0),Be.type==="date"&&Be.dtick<.1&&(Be.dtick=.1),mt(Be)};function ee(Be){return+Be.substring(1)}function ie(Be){var Fe;function Et(){return!(i(Be.dtick)||Be.dtick.charAt(0)!=="M")}var St=Et(),zt=U.getTickFormat(Be);if(zt){var Wt=Be._dtickInit!==Be.dtick;/%[fLQsSMX]/.test(zt)||(/%[HI]/.test(zt)?(Fe=E,Wt&&!St&&Be.dtick<E&&(Be.dtick=E)):/%p/.test(zt)?(Fe=b,Wt&&!St&&Be.dtick<b&&(Be.dtick=b)):/%[Aadejuwx]/.test(zt)?(Fe=A,Wt&&!St&&Be.dtick<A&&(Be.dtick=A)):/%[UVW]/.test(zt)?(Fe=k,Wt&&!St&&Be.dtick<k&&(Be.dtick=k)):/%[Bbm]/.test(zt)?(Fe=C,Wt&&(St?ee(Be.dtick)<1:Be.dtick<w)&&(Be.dtick="M1")):/%[q]/.test(zt)?(Fe=x,Wt&&(St?ee(Be.dtick)<3:Be.dtick<S)&&(Be.dtick="M3")):/%[Yy]/.test(zt)&&(Fe=y,Wt&&(St?ee(Be.dtick)<12:Be.dtick<_)&&(Be.dtick="M12")))}St=Et(),St&&Be.tick0===Be._dowTick0&&(Be.tick0=Be._rawTick0),Be._definedDelta=Fe}function Q(Be,Fe,Et){for(var St=0;St<Be.length;St++){var zt=Be[St].value,Wt=St,Yt=St+1;St<Be.length-1?(Wt=St,Yt=St+1):St>0?(Wt=St-1,Yt=St):(Wt=St,Yt=St);var ze=Be[Wt].value,tt=Be[Yt].value,ct=Math.abs(tt-ze),wt=Et||ct,Nt=0;wt>=_?ct>=_&&ct<=m?Nt=ct:Nt=y:Et===x&&wt>=S?ct>=S&&ct<=v?Nt=ct:Nt=x:wt>=w?ct>=w&&ct<=M?Nt=ct:Nt=C:Et===k&&wt>=k?Nt=k:wt>=A?Nt=A:Et===b&&wt>=b?Nt=b:Et===E&&wt>=E&&(Nt=E);var It;Nt>=ct&&(Nt=ct,It=!0);var Zt=zt+Nt;if(Fe.rangebreaks&&Nt>0){for(var qt=84,vr=0,Br=0;Br<qt;Br++){var Pr=(Br+.5)/qt;Fe.maskBreaks(zt*(1-Pr)+Pr*Zt)!==z&&vr++}Nt*=vr/qt,Nt||(Be[St].drop=!0),It&&ct>k&&(Nt=ct)}(Nt>0||St===0)&&(Be[St].periodX=zt+Nt/2)}}U.calcTicks=function(Fe,Et){for(var St=Fe.type,zt=Fe.calendar,Wt=Fe.ticklabelstep,Yt=Fe.ticklabelmode==="period",ze=Fe.range[0]>Fe.range[1],tt=!Fe.ticklabelindex||s.isArrayOrTypedArray(Fe.ticklabelindex)?Fe.ticklabelindex:[Fe.ticklabelindex],ct=s.simpleMap(Fe.range,Fe.r2l,void 0,void 0,Et),wt=ct[1]<ct[0],Nt=Math.min(ct[0],ct[1]),It=Math.max(ct[0],ct[1]),Zt=Math.max(1e3,Fe._length||0),qt=[],vr=[],Br=[],Pr=[],Mi=[],gi=Fe.minor&&(Fe.minor.ticks||Fe.minor.showgrid),ba=gi||tt,Hi=1;Hi>=(ba?0:1);Hi--){var Za=!Hi;Hi?(Fe._dtickInit=Fe.dtick,Fe._tick0Init=Fe.tick0):ba&&(Fe.minor._dtickInit=Fe.minor.dtick,Fe.minor._tick0Init=Fe.minor.tick0);var oa=Hi?Fe:s.extendFlat({},Fe,ba?Fe.minor:{minor:{}});if(Za?U.prepMinorTicks(oa,Fe,Et):U.prepTicks(oa,Et),oa.tickmode==="array"){Hi?(Br=[],qt=Me(Fe,!Za)):(Pr=[],vr=Me(Fe,!Za));continue}if(oa.tickmode==="sync"){Br=[],qt=ge(Fe);continue}var Cn=ne(ct),_n=Cn[0],Li=Cn[1],In=i(oa.dtick),pn=St==="log"&&!(In||oa.dtick.charAt(0)==="L"),Ka=U.tickFirst(oa,Et);if(Hi){if(Fe._tmin=Ka,Ka<_n!==wt)break;(St==="category"||St==="multicategory")&&(Li=wt?Math.max(-.5,Li):Math.min(Fe._categories.length-.5,Li))}var Rn=null,tn=Ka,Mn;if(Hi){var Kn;In?Kn=Fe.dtick:St==="date"?typeof Fe.dtick=="string"&&Fe.dtick.charAt(0)==="M"&&(Kn=C*Fe.dtick.substring(1)):Kn=Fe._roughDTick,Mn=Math.round((Fe.r2l(tn)-Fe.r2l(Fe.tick0))/Kn)-1}var zn=oa.dtick,ua=St==="linear"?oa.r2l(oa.tick0):void 0;for(oa.rangebreaks&&oa._tick0Init!==oa.tick0&&(tn=xi(tn,Fe),wt||(tn=U.tickIncrement(tn,zn,!wt,zt))),(Hi||tt)&&Yt&&(tn=U.tickIncrement(tn,zn,!wt,zt),Hi&&Mn--);wt?tn>=Li:tn<=Li;tn=U.tickIncrement(tn,zn,wt,zt)){if(Hi&&Mn++,oa.rangebreaks&&!wt){if(tn<_n)continue;if(oa.maskBreaks(tn)===z&&xi(tn,oa)>=It)break}if(Br.length>Zt||tn===Rn)break;Rn=tn;var Ea={value:se(tn,ua,zn)};Hi?(tn===Ka&&(Ea.first=!0),pn&&tn!==(tn|0)&&(Ea.simpleLabel=!0),Wt>1&&Mn%Wt&&(Ea.skipLabel=!0),Br.push(Ea)):(Ea.minor=!0,Pr.push(Ea))}}if(!Pr||Pr.length<3)tt=!1;else{var ln=(Pr[2].value-Pr[1].value)*(ze?-1:1);Jr(ln,Fe.tickformat)||(tt=!1,Pr=Pr.slice(1))}if(!tt)Mi=Br;else{var on=Br.concat(Pr);Yt&&Br.length&&(on=on.slice(1)),on=on.sort(function(go,Xn){return go.value-Xn.value}).filter(function(go,Xn,On){return Xn===0||go.value!==On[Xn-1].value});var ao=on.map(function(go,Xn){return go.minor===void 0&&!go.skipLabel?Xn:null}).filter(function(go){return go!==null});ao.forEach(function(go){tt.map(function(Xn){var On=go+Xn;On>=0&&On<on.length&&s.pushUnique(Mi,on[On])})}),Br.forEach(function(go){go.skipLabel=Mi.indexOf(go)===-1})}if(gi){var ho=Fe.minor.ticks==="inside"&&Fe.ticks==="outside"||Fe.minor.ticks==="outside"&&Fe.ticks==="inside";if(!ho){for(var Jn=Br.map(function(go){return go.value}),lo=[],Fo=0;Fo<Pr.length;Fo++){var uo=Pr[Fo],Qn=uo.value;if(Jn.indexOf(Qn)===-1){for(var jo=!1,Yn=0;!jo&&Yn<Br.length;Yn++)1e7+Br[Yn].value===1e7+Qn&&(jo=!0);jo||lo.push(uo)}}Pr=lo}}Yt&&Q(Mi,Fe,Fe._definedDelta);var Bn;if(Fe.rangebreaks){var ps=Fe._id.charAt(0)==="y",xo=1;Fe.tickmode==="auto"&&(xo=Fe.tickfont?Fe.tickfont.size:12);var no=NaN;for(Bn=Br.length-1;Bn>-1;Bn--){if(Br[Bn].drop){Br.splice(Bn,1);continue}Br[Bn].value=xi(Br[Bn].value,Fe);var Mo=Fe.c2p(Br[Bn].value);(ps?no>Mo-xo:no<Mo+xo)?Br.splice(wt?Bn+1:Bn,1):no=Mo}}pa(Fe)&&Math.abs(ct[1]-ct[0])===360&&Br.pop(),Fe._tmax=(Br[Br.length-1]||{}).value,Br.length&&(Br[Br.length-1].last=!0),Fe._prevDateHead="",Fe._inCalcTicks=!0;var Vn,ts=function(go){go.text="",Fe._prevDateHead=Vn};Br=Br.concat(Pr);function ws(go,Xn){var On=U.tickText(go,Xn.value,!1,Xn.simpleLabel,{first:Xn.first,last:Xn.last}),Uo=Xn.periodX;return Uo!==void 0&&(On.periodX=Uo,(Uo>It||Uo<Nt)&&(Uo>It&&(On.periodX=It),Uo<Nt&&(On.periodX=Nt),ts(On))),On}var So;for(Bn=0;Bn<Br.length;Bn++){var nl=Br[Bn].minor,vs=Br[Bn].value;nl?(tt&&Mi.indexOf(Br[Bn])!==-1?So=ws(Fe,Br[Bn]):So={x:vs},So.minor=!0,vr.push(So)):(Vn=Fe._prevDateHead,So=ws(Fe,Br[Bn]),Br[Bn].skipLabel&&ts(So),qt.push(So))}return Yt&&tt&&vr.length&&(vr[0].noTick=!0),qt=qt.concat(vr),Fe._inCalcTicks=!1,Yt&&qt.length&&(qt[0].noTick=!0),qt};function ue(Be,Fe){return Be.rangebreaks&&(Fe=Fe.filter(function(Et){return Be.maskBreaks(Et.x)!==z})),Fe}function ge(Be){var Fe=Be._mainAxis,Et=[];if(Fe._vals){for(var St=-1,zt=-1,Wt=0;Wt<Fe._vals.length;Wt++)Fe._vals[Wt].noTick||Fe._vals[Wt].minor||(St===-1&&(St=Wt),zt=Wt);for(var Yt=0;Yt<Fe._vals.length;Yt++)if(!Fe._vals[Yt].noTick){var ze=Fe.l2p(Fe._vals[Yt].x),tt=Be.p2l(ze),ct=U.tickText(Be,tt,!1,void 0,{first:Yt===St,last:Yt===zt});Fe._vals[Yt].minor&&(ct.minor=!0,ct.text=""),Et.push(ct)}}return Et=ue(Be,Et),Et}function Me(Be,Fe){var Et=s.simpleMap(Be.range,Be.r2l),St=ne(Et),zt=Math.min(St[0],St[1]),Wt=Math.max(St[0],St[1]),Yt=Be.type==="category"?Be.d2l_noadd:Be.d2l;Be.type==="log"&&String(Be.dtick).charAt(0)!=="L"&&(Be.dtick="L"+Math.pow(10,Math.floor(Math.min(Be.range[0],Be.range[1]))-1));for(var ze=[],tt=0;tt<=1;tt++)if(!(Fe!==void 0&&(Fe&&tt||Fe===!1&&!tt))&&!(tt&&!Be.minor)){var ct=tt?Be.minor.tickvals:Be.tickvals,wt=tt?[]:Be.ticktext;if(ct){s.isArrayOrTypedArray(wt)||(wt=[]);var Nt=-1,It=-1;if(!tt)for(var Zt=0;Zt<ct.length;Zt++){var qt=Yt(ct[Zt]);qt>zt&&qt<Wt&&(Nt===-1&&(Nt=Zt),It=Zt)}for(var vr=0;vr<ct.length;vr++){var Br=Yt(ct[vr]);if(Br>zt&&Br<Wt){var Pr=U.tickText(Be,Br,!1,String(wt[vr]),{first:vr===Nt,last:vr===It});tt&&(Pr.minor=!0,Pr.text=""),ze.push(Pr)}}}}return ze=ue(Be,ze),ze}var Te=[2,5,10],je=[1,2,3,6,12],Ve=[1,2,5,10,15,30],Ze=[1,2,3,7,14],Ke=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],vt=[-.301,0,.301,.699,1],xt=[15,30,45,90,180];function Pt(Be,Fe,Et){return Fe*s.roundUp(Be/Fe,Et)}U.autoTicks=function(Be,Fe,Et){var St;function zt(Nt){return Math.pow(Nt,Math.floor(Math.log(Fe)/Math.LN10))}if(Be.type==="date"){Be.tick0=s.dateTick0(Be.calendar,0);var Wt=2*Fe;if(Wt>y)Fe/=y,St=zt(10),Be.dtick="M"+12*Pt(Fe,St,Te);else if(Wt>C)Fe/=C,Be.dtick="M"+Pt(Fe,1,je);else if(Wt>A){if(Be.dtick=Pt(Fe,A,Be._hasDayOfWeekBreaks?[1,2,7,14]:Ze),!Et){var Yt=U.getTickFormat(Be),ze=Be.ticklabelmode==="period";ze&&(Be._rawTick0=Be.tick0),/%[uVW]/.test(Yt)?Be.tick0=s.dateTick0(Be.calendar,2):Be.tick0=s.dateTick0(Be.calendar,1),ze&&(Be._dowTick0=Be.tick0)}}else Wt>E?Be.dtick=Pt(Fe,E,je):Wt>T?Be.dtick=Pt(Fe,T,Ve):Wt>F?Be.dtick=Pt(Fe,F,Ve):(St=zt(10),Be.dtick=Pt(Fe,St,Te))}else if(Be.type==="log"){Be.tick0=0;var tt=s.simpleMap(Be.range,Be.r2l);if(Be._isMinor&&(Fe*=1.5),Fe>.7)Be.dtick=Math.ceil(Fe);else if(Math.abs(tt[1]-tt[0])<1){var ct=1.5*Math.abs((tt[1]-tt[0])/Fe);Fe=Math.abs(Math.pow(10,tt[1])-Math.pow(10,tt[0]))/ct,St=zt(10),Be.dtick="L"+Pt(Fe,St,Te)}else Be.dtick=Fe>.3?"D2":"D1"}else Be.type==="category"||Be.type==="multicategory"?(Be.tick0=0,Be.dtick=Math.ceil(Math.max(Fe,1))):pa(Be)?(Be.tick0=0,St=1,Be.dtick=Pt(Fe,St,xt)):(Be.tick0=0,St=zt(10),Be.dtick=Pt(Fe,St,Te));if(Be.dtick===0&&(Be.dtick=1),!i(Be.dtick)&&typeof Be.dtick!="string"){var wt=Be.dtick;throw Be.dtick=1,"ax.dtick error: "+String(wt)}};function mt(Be){var Fe=Be.dtick;if(Be._tickexponent=0,!i(Fe)&&typeof Fe!="string"&&(Fe=1),(Be.type==="category"||Be.type==="multicategory")&&(Be._tickround=null),Be.type==="date"){var Et=Be.r2l(Be.tick0),St=Be.l2r(Et).replace(/(^-|i)/g,""),zt=St.length;if(String(Fe).charAt(0)==="M")zt>10||St.slice(5)!=="01-01"?Be._tickround="d":Be._tickround=+Fe.slice(1)%12===0?"y":"m";else if(Fe>=A&&zt<=10||Fe>=A*15)Be._tickround="d";else if(Fe>=T&&zt<=16||Fe>=E)Be._tickround="M";else if(Fe>=F&&zt<=19||Fe>=T)Be._tickround="S";else{var Wt=Be.l2r(Et+Fe).replace(/^-/,"").length;Be._tickround=Math.max(zt,Wt)-20,Be._tickround<0&&(Be._tickround=4)}}else if(i(Fe)||Fe.charAt(0)==="L"){var Yt=Be.range.map(Be.r2d||Number);i(Fe)||(Fe=Number(Fe.slice(1))),Be._tickround=2-Math.floor(Math.log(Fe)/Math.LN10+.01);var ze=Math.max(Math.abs(Yt[0]),Math.abs(Yt[1])),tt=Math.floor(Math.log(ze)/Math.LN10+.01),ct=Be.minexponent===void 0?3:Be.minexponent;Math.abs(tt)>ct&&(Je(Be.exponentformat)&&Be.exponentformat!=="SI extended"&&!Ue(tt)||Je(Be.exponentformat)&&Be.exponentformat==="SI extended"&&!at(tt)?Be._tickexponent=3*Math.round((tt-1)/3):Be._tickexponent=tt)}else Be._tickround=null}U.tickIncrement=function(Be,Fe,Et,St){var zt=Et?-1:1;if(i(Fe))return s.increment(Be,zt*Fe);var Wt=Fe.charAt(0),Yt=zt*Number(Fe.slice(1));if(Wt==="M")return s.incrementMonth(Be,Yt,St);if(Wt==="L")return Math.log(Math.pow(10,Be)+Yt)/Math.LN10;if(Wt==="D"){var ze=Fe==="D2"?vt:Ke,tt=Be+zt*.01,ct=s.roundUp(s.mod(tt,1),ze,Et);return Math.floor(tt)+Math.log(t.round(Math.pow(10,ct),1))/Math.LN10}throw"unrecognized dtick "+String(Fe)},U.tickFirst=function(Be,Fe){var Et=Be.r2l||Number,St=s.simpleMap(Be.range,Et,void 0,void 0,Fe),zt=St[1]<St[0],Wt=zt?Math.floor:Math.ceil,Yt=ne(St)[0],ze=Be.dtick,tt=Et(Be.tick0);if(i(ze)){var ct=Wt((Yt-tt)/ze)*ze+tt;return(Be.type==="category"||Be.type==="multicategory")&&(ct=s.constrain(ct,0,Be._categories.length-1)),ct}var wt=ze.charAt(0),Nt=Number(ze.slice(1));if(wt==="M"){for(var It=0,Zt=tt,qt,vr,Br;It<10;){if(qt=U.tickIncrement(Zt,ze,zt,Be.calendar),(qt-Yt)*(Zt-Yt)<=0)return zt?Math.min(Zt,qt):Math.max(Zt,qt);vr=(Yt-(Zt+qt)/2)/(qt-Zt),Br=wt+(Math.abs(Math.round(vr))||1)*Nt,Zt=U.tickIncrement(Zt,Br,vr<0?!zt:zt,Be.calendar),It++}return s.error("tickFirst did not converge",Be),Zt}else{if(wt==="L")return Math.log(Wt((Math.pow(10,Yt)-tt)/Nt)*Nt+tt)/Math.LN10;if(wt==="D"){var Pr=ze==="D2"?vt:Ke,Mi=s.roundUp(s.mod(Yt,1),Pr,zt);return Math.floor(Yt)+Math.log(t.round(Math.pow(10,Mi),1))/Math.LN10}else throw"unrecognized dtick "+String(ze)}},U.tickText=function(Be,Fe,Et,St,zt){var Wt=!!zt?.first,Yt=!!zt?.last,ze=Mt(Be,Fe),tt=Be.tickmode==="array",ct=Et||tt,wt=Be.type,Nt=wt==="category"?Be.d2l_noadd:Be.d2l,It,Zt=function(gi){var ba=Be.l2p(gi);return ba>=0&&ba<=Be._length?gi:null};if(tt&&s.isArrayOrTypedArray(Be.ticktext)){var qt=s.simpleMap(Be.range,Be.r2l),vr=(Math.abs(qt[1]-qt[0])-(Be._lBreaks||0))/1e4;for(It=0;It<Be.ticktext.length&&!(Math.abs(Fe-Nt(Be.tickvals[It]))<vr);It++);if(It<Be.ticktext.length)return ze.text=String(Be.ticktext[It]),ze.xbnd=[Zt(ze.x-.5),Zt(ze.x+Be.dtick-.5)],ze}function Br(gi){return gi===void 0?!0:Et?gi==="none":gi==="all"?!1:gi==="first"?!Wt:gi==="last"?!Yt:!0}var Pr=Et?"never":Be.exponentformat!=="none"&&Br(Be.showexponent)?"hide":"";if(wt==="date"?lt(Be,ze,Et,ct):wt==="log"?qe(Be,ze,Et,ct,Pr):wt==="category"?Ye(Be,ze):wt==="multicategory"?me(Be,ze,Et):pa(Be)?Ae(Be,ze,Et,ct,Pr):_e(Be,ze,Et,ct,Pr),St||(Be.tickprefix&&!Br(Be.showtickprefix)&&(ze.text=Be.tickprefix+ze.text),Be.ticksuffix&&!Br(Be.showticksuffix)&&(ze.text+=Be.ticksuffix)),Be.labelalias&&Be.labelalias.hasOwnProperty(ze.text)){var Mi=Be.labelalias[ze.text];typeof Mi=="string"&&(ze.text=Mi)}return(Be.tickson==="boundaries"||Be.showdividers)&&(ze.xbnd=[Zt(ze.x-.5),Zt(ze.x+Be.dtick-.5)]),ze},U.hoverLabelText=function(Be,Fe,Et){Et&&(Be=s.extendFlat({},Be,{hoverformat:Et}));var St=s.isArrayOrTypedArray(Fe)?Fe[0]:Fe,zt=s.isArrayOrTypedArray(Fe)?Fe[1]:void 0;if(zt!==void 0&&zt!==St)return U.hoverLabelText(Be,St,Et)+" - "+U.hoverLabelText(Be,zt,Et);var Wt=Be.type==="log"&&St<=0,Yt=U.tickText(Be,Be.c2l(Wt?-St:St),"hover").text;return Wt?St===0?"0":P+Yt:Yt};function Mt(Be,Fe,Et){var St=Be.tickfont||{};return{x:Fe,dx:0,dy:0,text:Et||"",fontSize:St.size,font:St.family,fontWeight:St.weight,fontStyle:St.style,fontVariant:St.variant,fontTextcase:St.textcase,fontLineposition:St.lineposition,fontShadow:St.shadow,fontColor:St.color}}function lt(Be,Fe,Et,St){var zt=Be._tickround,Wt=Et&&Be.hoverformat||U.getTickFormat(Be);St=!Wt&&St,St&&(i(zt)?zt=4:zt={y:"m",m:"d",d:"M",M:"S",S:4}[zt]);var Yt=s.formatDate(Fe.x,Wt,zt,Be._dateFormat,Be.calendar,Be._extraFormat),ze,tt=Yt.indexOf(`
+`);if(tt!==-1&&(ze=Yt.slice(tt+1),Yt=Yt.slice(0,tt)),St&&(ze!==void 0&&(Yt==="00:00:00"||Yt==="00:00")?(Yt=ze,ze=""):Yt.length===8&&(Yt=Yt.replace(/:00$/,""))),ze)if(Et)zt==="d"?Yt+=", "+ze:Yt=ze+(Yt?", "+Yt:"");else if(!Be._inCalcTicks||Be._prevDateHead!==ze)Be._prevDateHead=ze,Yt+="<br>"+ze;else{var ct=bi(Be),wt=Be._trueSide||Be.side;(!ct&&wt==="top"||ct&&wt==="bottom")&&(Yt+="<br> ")}Fe.text=Yt}function qe(Be,Fe,Et,St,zt){var Wt=Be.dtick,Yt=Fe.x,ze=Be.tickformat,tt=typeof Wt=="string"&&Wt.charAt(0);if(zt==="never"&&(zt=""),St&&tt!=="L"&&(Wt="L3",tt="L"),ze||tt==="L")Fe.text=ft(Math.pow(10,Yt),Be,zt,St);else if(i(Wt)||tt==="D"&&(Be.minorloglabels==="complete"||s.mod(Yt+.01,1)<.1)){var ct;Be.minorloglabels==="complete"&&!(s.mod(Yt+.01,1)<.1)&&(ct=!0,Fe.fontSize*=.75);var wt=Math.pow(10,Yt).toExponential(0),Nt=wt.split("e"),It=+Nt[1],Zt=Math.abs(It),qt=Be.exponentformat;qt==="power"||Je(qt)&&qt!=="SI extended"&&Ue(It)||Je(qt)&&qt==="SI extended"&&at(It)?(Fe.text=Nt[0],Zt>0&&(Fe.text+="x10"),Fe.text==="1x10"&&(Fe.text="10"),It!==0&&It!==1&&(Fe.text+="<sup>"+(It>0?"":P)+Zt+"</sup>"),Fe.fontSize*=1.25):(qt==="e"||qt==="E")&&Zt>2?Fe.text=Nt[0]+qt+(It>0?"+":P)+Zt:(Fe.text=ft(Math.pow(10,Yt),Be,"","fakehover"),Wt==="D1"&&Be._id.charAt(0)==="y"&&(Fe.dy-=Fe.fontSize/6))}else if(tt==="D")Fe.text=Be.minorloglabels==="none"?"":String(Math.round(Math.pow(10,s.mod(Yt,1)))),Fe.fontSize*=.75;else throw"unrecognized dtick "+String(Wt);if(Be.dtick==="D1"){var vr=String(Fe.text).charAt(0);(vr==="0"||vr==="1")&&(Be._id.charAt(0)==="y"?Fe.dx-=Fe.fontSize/4:(Fe.dy+=Fe.fontSize/2,Fe.dx+=(Be.range[1]>Be.range[0]?1:-1)*Fe.fontSize*(Yt<0?.5:.25)))}}function Ye(Be,Fe){var Et=Be._categories[Math.round(Fe.x)];Et===void 0&&(Et=""),Fe.text=String(Et)}function me(Be,Fe,Et){var St=Math.round(Fe.x),zt=Be._categories[St]||[],Wt=zt[1]===void 0?"":String(zt[1]),Yt=zt[0]===void 0?"":String(zt[0]);Et?Fe.text=Yt+" - "+Wt:(Fe.text=Wt,Fe.text2=Yt)}function _e(Be,Fe,Et,St,zt){zt==="never"?zt="":Be.showexponent==="all"&&Math.abs(Fe.x/Be.dtick)<1e-6&&(zt="hide"),Fe.text=ft(Fe.x,Be,zt,St)}function Ae(Be,Fe,Et,St,zt){if(Be.thetaunit==="radians"&&!Et){var Wt=Fe.x/180;if(Wt===0)Fe.text="0";else{var Yt=ke(Wt);if(Yt[1]>=100)Fe.text=ft(s.deg2rad(Fe.x),Be,zt,St);else{var ze=Fe.x<0;Yt[1]===1?Yt[0]===1?Fe.text="\u03C0":Fe.text=Yt[0]+"\u03C0":Fe.text=["<sup>",Yt[0],"</sup>","\u2044","<sub>",Yt[1],"</sub>","\u03C0"].join(""),ze&&(Fe.text=P+Fe.text)}}}else Fe.text=ft(Fe.x,Be,zt,St)}function ke(Be){function Fe(ze,tt){return Math.abs(ze-tt)<=1e-6}function Et(ze,tt){return Fe(tt,0)?ze:Et(tt,ze%tt)}function St(ze){for(var tt=1;!Fe(Math.round(ze*tt)/tt,ze);)tt*=10;return tt}var zt=St(Be),Wt=Be*zt,Yt=Math.abs(Et(Wt,zt));return[Math.round(Wt/Yt),Math.round(zt/Yt)]}var Ee=["f","p","n","\u03BC","m","","k","M","G","T"],De=["q","r","y","z","a",...Ee,"P","E","Z","Y","R","Q"],Je=Be=>["SI","SI extended","B"].includes(Be);function Ue(Be){return Be>14||Be<-15}function at(Be){return Be>32||Be<-30}function rt(Be,Fe){return Je(Fe)?!!(Fe==="SI extended"&&at(Be)||Fe!=="SI extended"&&Ue(Be)):!1}function ft(Be,Fe,Et,St){var zt=Be<0,Wt=Fe._tickround,Yt=Et||Fe.exponentformat||"B",ze=Fe._tickexponent,tt=U.getTickFormat(Fe),ct=Fe.separatethousands;if(St){var wt={exponentformat:Yt,minexponent:Fe.minexponent,dtick:Fe.showexponent==="none"?Fe.dtick:i(Be)&&Math.abs(Be)||1,range:Fe.showexponent==="none"?Fe.range.map(Fe.r2d):[0,Be||1]};mt(wt),Wt=(Number(wt._tickround)||0)+4,ze=wt._tickexponent,Fe.hoverformat&&(tt=Fe.hoverformat)}if(tt)return Fe._numFormat(tt)(Be).replace(/-/g,P);Yt==="none"&&(ze=0),Be=Math.abs(Be);let Nt=Math.pow(10,-Wt)/2;if(Be<Nt)Be="0",zt=!1;else{if(ze&&(Be*=Math.pow(10,-ze),Wt+=ze),Wt===0)Be=String(Math.round(Be));else if(Wt<0){let Zt=Math.pow(10,-Wt);Be=String(Math.round(Be/Zt)*Zt)}else Be=Be.toFixed(Math.min(20,Wt)).replace(/\.?0+$/,"");Be=s.numSeparate(Be,Fe._separators,ct)}if(ze&&Yt!=="hide"){rt(ze,Yt)&&(Yt="power");var It;ze<0?It=P+-ze:Yt!=="power"?It="+"+ze:It=String(ze),Yt==="e"||Yt==="E"?Be+=Yt+It:Yt==="power"?Be+="\xD710<sup>"+It+"</sup>":Yt==="B"&&ze===9?Be+="B":Je(Yt)&&(Be+=Yt==="SI extended"?De[ze/3+10]:Ee[ze/3+5])}return zt?P+Be:Be}U.getTickFormat=function(Be){var Fe;function Et(tt){return typeof tt!="string"?tt:Number(tt.replace("M",""))*C}function St(tt,ct){var wt=["L","D"];if(typeof tt==typeof ct){if(typeof tt=="number")return tt-ct;var Nt=wt.indexOf(tt.charAt(0)),It=wt.indexOf(ct.charAt(0));return Nt===It?Number(tt.replace(/(L|D)/g,""))-Number(ct.replace(/(L|D)/g,"")):Nt-It}else return typeof tt=="number"?1:-1}function zt(tt,ct,wt){var Nt=wt||function(qt){return qt},It=ct[0],Zt=ct[1];return(!It&&typeof It!="number"||Nt(It)<=Nt(tt))&&(!Zt&&typeof Zt!="number"||Nt(Zt)>=Nt(tt))}function Wt(tt,ct){var wt=ct[0]===null,Nt=ct[1]===null,It=St(tt,ct[0])>=0,Zt=St(tt,ct[1])<=0;return(wt||It)&&(Nt||Zt)}var Yt,ze;if(Be.tickformatstops&&Be.tickformatstops.length>0)switch(Be.type){case"date":case"linear":{for(Fe=0;Fe<Be.tickformatstops.length;Fe++)if(ze=Be.tickformatstops[Fe],ze.enabled&&zt(Be.dtick,ze.dtickrange,Et)){Yt=ze;break}break}case"log":{for(Fe=0;Fe<Be.tickformatstops.length;Fe++)if(ze=Be.tickformatstops[Fe],ze.enabled&&Wt(Be.dtick,ze.dtickrange)){Yt=ze;break}break}default:}return Yt?Yt.value:Be.tickformat},U.getSubplots=function(Be,Fe){var Et=Be._fullLayout._subplots,St=Et.cartesian.concat(Et.gl2d||[]),zt=Fe?U.findSubplotsWithAxis(St,Fe):St;return zt.sort(function(Wt,Yt){var ze=Wt.slice(1).split("y"),tt=Yt.slice(1).split("y");return ze[0]===tt[0]?+ze[1]-+tt[1]:+ze[0]-+tt[0]}),zt},U.findSubplotsWithAxis=function(Be,Fe){for(var Et=new RegExp(Fe._id.charAt(0)==="x"?"^"+Fe._id+"y":Fe._id+"$"),St=[],zt=0;zt<Be.length;zt++){var Wt=Be[zt];Et.test(Wt)&&St.push(Wt)}return St},U.makeClipPaths=function(Be){var Fe=Be._fullLayout;if(!Fe._hasOnlyLargeSploms){var Et={_offset:0,_length:Fe.width,_id:""},St={_offset:0,_length:Fe.height,_id:""},zt=U.list(Be,"x",!0),Wt=U.list(Be,"y",!0),Yt=[],ze,tt;for(ze=0;ze<zt.length;ze++)for(Yt.push({x:zt[ze],y:St}),tt=0;tt<Wt.length;tt++)ze===0&&Yt.push({x:Et,y:Wt[tt]}),Yt.push({x:zt[ze],y:Wt[tt]});var ct=Fe._clips.selectAll(".axesclip").data(Yt,function(wt){return wt.x._id+wt.y._id});ct.enter().append("clipPath").classed("axesclip",!0).attr("id",function(wt){return"clip"+Fe._uid+wt.x._id+wt.y._id}).append("rect"),ct.exit().remove(),ct.each(function(wt){t.select(this).select("rect").attr({x:wt.x._offset||0,y:wt.y._offset||0,width:wt.x._length||1,height:wt.y._length||1})})}},U.draw=function(Be,Fe,Et){var St=Be._fullLayout;Fe==="redraw"&&St._paper.selectAll("g.subplot").each(function(tt){var ct=tt[0],wt=St._plots[ct];if(wt){var Nt=wt.xaxis,It=wt.yaxis;wt.xaxislayer.selectAll("."+Nt._id+"tick").remove(),wt.yaxislayer.selectAll("."+It._id+"tick").remove(),wt.xaxislayer.selectAll("."+Nt._id+"tick2").remove(),wt.yaxislayer.selectAll("."+It._id+"tick2").remove(),wt.xaxislayer.selectAll("."+Nt._id+"divider").remove(),wt.yaxislayer.selectAll("."+It._id+"divider").remove(),wt.minorGridlayer&&wt.minorGridlayer.selectAll("path").remove(),wt.gridlayer&&wt.gridlayer.selectAll("path").remove(),wt.zerolinelayer&&wt.zerolinelayer.selectAll("path").remove(),wt.zerolinelayerAbove&&wt.zerolinelayerAbove.selectAll("path").remove(),St._infolayer.select(".g-"+Nt._id+"title").remove(),St._infolayer.select(".g-"+It._id+"title").remove()}});var zt=!Fe||Fe==="redraw"?U.listIds(Be):Fe,Wt=U.list(Be),Yt=Wt.filter(function(tt){return tt.autoshift}).map(function(tt){return tt.overlaying});zt.map(function(tt){var ct=U.getFromId(Be,tt);if(ct.tickmode==="sync"&&ct.overlaying){var wt=zt.findIndex(function(Nt){return Nt===ct.overlaying});wt>=0&&zt.unshift(zt.splice(wt,1).shift())}});var ze={false:{left:0,right:0}};return s.syncOrAsync(zt.map(function(tt){return function(){if(tt){var ct=U.getFromId(Be,tt);Et||(Et={}),Et.axShifts=ze,Et.overlayingShiftedAx=Yt;var wt=U.drawOne(Be,ct,Et);return ct._shiftPusher&&dn(ct,ct._fullDepth||0,ze,!0),ct._r=ct.range.slice(),ct._rl=s.simpleMap(ct._r,ct.r2l),wt}}}))},U.drawOne=function(Be,Fe,Et){Et=Et||{};var St=Et.axShifts||{},zt=Et.overlayingShiftedAx||[],Wt,Yt,ze;Fe.setScale();var tt=Be._fullLayout,ct=Fe._id,wt=ct.charAt(0),Nt=U.counterLetter(ct),It=tt._plots[Fe._mainSubplot],Zt=Fe.zerolinelayer==="above traces";if(!It)return;if(Fe._shiftPusher=Fe.autoshift||zt.indexOf(Fe._id)!==-1||zt.indexOf(Fe.overlaying)!==-1,Fe._shiftPusher&Fe.anchor==="free"){var qt=Fe.linewidth/2||0;Fe.ticks==="inside"&&(qt+=Fe.ticklen),dn(Fe,qt,St,!0),dn(Fe,Fe.shift||0,St,!1)}(Et.skipTitle!==!0||Fe._shift===void 0)&&(Fe._shift=pi(Fe,St));var vr=It[wt+"axislayer"],Br=Fe._mainLinePosition,Pr=Br+=Fe._shift,Mi=Fe._mainMirrorPosition,gi=Fe._vals=U.calcTicks(Fe),ba=[Fe.mirror,Pr,Mi].join("_");for(Wt=0;Wt<gi.length;Wt++)gi[Wt].axInfo=ba;Fe._selections={},Fe._tickAngles&&(Fe._prevTickAngles=Fe._tickAngles),Fe._tickAngles={},Fe._depth=null;var Hi={};function Za(So){var nl=ct+(So||"tick");return Hi[nl]||(Hi[nl]=gt(Fe,nl,Pr)),Hi[nl]}if(Fe.visible){var oa=U.makeTransTickFn(Fe),Cn=U.makeTransTickLabelFn(Fe),_n,Li,In=Fe.ticks==="inside",pn=Fe.ticks==="outside";if(Fe.tickson==="boundaries"){var Ka=ht(Fe,gi);Li=U.clipEnds(Fe,Ka),_n=In?Li:Ka}else Li=U.clipEnds(Fe,gi),_n=In&&Fe.ticklabelmode!=="period"?Li:gi;var Rn=Fe._gridVals=Li,tn=fr(Fe,gi);if(!tt._hasOnlyLargeSploms){var Mn=Fe._subplotsWith,Kn={};for(Wt=0;Wt<Mn.length;Wt++){Yt=Mn[Wt],ze=tt._plots[Yt];var zn=ze[Nt+"axis"],ua=zn._mainAxis._id;if(!Kn[ua]){Kn[ua]=1;var Ea=wt==="x"?"M0,"+zn._offset+"v"+zn._length:"M"+zn._offset+",0h"+zn._length;U.drawGrid(Be,Fe,{vals:Rn,counterAxis:zn,layer:ze.gridlayer.select("."+ct),minorLayer:ze.minorGridlayer.select("."+ct),path:Ea,transFn:oa}),U.drawZeroLine(Be,Fe,{counterAxis:zn,layer:Zt?ze.zerolinelayerAbove:ze.zerolinelayer,path:Ea,transFn:oa})}}}var ln,on=U.getTickSigns(Fe),ao=U.getTickSigns(Fe,"minor");if(Fe.ticks||Fe.minor&&Fe.minor.ticks){var ho=U.makeTickPath(Fe,Pr,on[2]),Jn=U.makeTickPath(Fe,Pr,ao[2],{minor:!0}),lo,Fo,uo,Qn;if(Fe._anchorAxis&&Fe.mirror&&Fe.mirror!==!0?(lo=U.makeTickPath(Fe,Mi,on[3]),Fo=U.makeTickPath(Fe,Mi,ao[3],{minor:!0}),uo=ho+lo,Qn=Jn+Fo):(lo="",Fo="",uo=ho,Qn=Jn),Fe.showdividers&&pn&&Fe.tickson==="boundaries"){var jo={};for(Wt=0;Wt<tn.length;Wt++)jo[tn[Wt].x]=1;ln=function(So){return jo[So.x]?lo:uo}}else ln=function(So){return So.minor?Qn:uo}}if(U.drawTicks(Be,Fe,{vals:_n,layer:vr,path:ln,transFn:oa}),Fe.mirror==="allticks"){var Yn=Object.keys(Fe._linepositions||{});for(Wt=0;Wt<Yn.length;Wt++){Yt=Yn[Wt],ze=tt._plots[Yt];var Bn=Fe._linepositions[Yt]||[],ps=Bn[0],xo=Bn[1],no=Bn[2],Mo=U.makeTickPath(Fe,ps,no?on[0]:ao[0],{minor:no})+U.makeTickPath(Fe,xo,no?on[1]:ao[1],{minor:no});U.drawTicks(Be,Fe,{vals:_n,layer:ze[wt+"axislayer"],path:Mo,transFn:oa})}}var Vn=[];if(Vn.push(function(){return U.drawLabels(Be,Fe,{vals:gi,layer:vr,plotinfo:ze,transFn:Cn,labelFns:U.makeLabelFns(Fe,Pr)})}),Fe.type==="multicategory"){var ts={x:2,y:10}[wt];Vn.push(function(){var So={x:"height",y:"width"}[wt],nl=Za()[So]+ts+(Fe._tickAngles[ct+"tick"]?Fe.tickfont.size*N:0);return U.drawLabels(Be,Fe,{vals:Gt(Fe,gi),layer:vr,cls:ct+"tick2",repositionOnUpdate:!0,secondary:!0,transFn:oa,labelFns:U.makeLabelFns(Fe,Pr+nl*on[4])})}),Vn.push(function(){return Fe._depth=on[4]*(Za("tick2")[Fe.side]-Pr),Ct(Be,Fe,{vals:tn,layer:vr,path:U.makeTickPath(Fe,Pr,on[4],{len:Fe._depth}),transFn:oa})})}else Fe.title.hasOwnProperty("standoff")&&Vn.push(function(){Fe._depth=on[4]*(Za()[Fe.side]-Pr)});var ws=o.getComponentMethod("rangeslider","isVisible")(Fe);return!Et.skipTitle&&!(ws&&Fe.side==="bottom")&&Vn.push(function(){return mr(Be,Fe)}),Vn.push(function(){var So=Fe.side.charAt(0),nl=H[Fe.side].charAt(0),vs=U.getPxPosition(Be,Fe),go=pn?Fe.ticklen:0,Xn,On,Uo,kl;(Fe.automargin||ws||Fe._shiftPusher)&&(Fe.type==="multicategory"?Xn=Za("tick2"):(Xn=Za(),wt==="x"&&So==="b"&&(Fe._depth=Math.max(Xn.width>0?Xn.bottom-vs:0,go))));var mu=0,Ul=0;if(Fe._shiftPusher&&(mu=Math.max(go,Xn.height>0?So==="l"?vs-Xn.left:Xn.right-vs:0),Fe.title.text!==tt._dfltTitle[wt]&&(Ul=(Fe._titleStandoff||0)+(Fe._titleScoot||0),So==="l"&&(Ul+=$t(Fe))),Fe._fullDepth=Math.max(mu,Ul)),Fe.automargin){On={x:0,y:0,r:0,l:0,t:0,b:0};var gu=[0,1],yu=typeof Fe._shift=="number"?Fe._shift:0;if(wt==="x"){if(So==="b"?On[So]=Fe._depth:(On[So]=Fe._depth=Math.max(Xn.width>0?vs-Xn.top:0,go),gu.reverse()),Xn.width>0){var Fu=Xn.right-(Fe._offset+Fe._length);Fu>0&&(On.xr=1,On.r=Fu);var au=Fe._offset-Xn.left;au>0&&(On.xl=0,On.l=au)}}else if(So==="l"?(Fe._depth=Math.max(Xn.height>0?vs-Xn.left:0,go),On[So]=Fe._depth-yu):(Fe._depth=Math.max(Xn.height>0?Xn.right-vs:0,go),On[So]=Fe._depth+yu,gu.reverse()),Xn.height>0){var xc=Xn.bottom-(Fe._offset+Fe._length);xc>0&&(On.yb=0,On.b=xc);var Pu=Fe._offset-Xn.top;Pu>0&&(On.yt=1,On.t=Pu)}On[Nt]=Fe.anchor==="free"?Fe.position:Fe._anchorAxis.domain[gu[0]],Fe.title.text!==tt._dfltTitle[wt]&&(On[So]+=$t(Fe)+(Fe.title.standoff||0)),Fe.mirror&&Fe.anchor!=="free"&&(Uo={x:0,y:0,r:0,l:0,t:0,b:0},Uo[nl]=Fe.linewidth,Fe.mirror&&Fe.mirror!==!0&&(Uo[nl]+=go),Fe.mirror===!0||Fe.mirror==="ticks"?Uo[Nt]=Fe._anchorAxis.domain[gu[1]]:(Fe.mirror==="all"||Fe.mirror==="allticks")&&(Uo[Nt]=[Fe._counterDomainMin,Fe._counterDomainMax][gu[1]]))}ws&&(kl=o.getComponentMethod("rangeslider","autoMarginOpts")(Be,Fe)),typeof Fe.automargin=="string"&&(At(On,Fe.automargin),At(Uo,Fe.automargin)),a.autoMargin(Be,Ai(Fe),On),a.autoMargin(Be,oi(Fe),Uo),a.autoMargin(Be,Qr(Fe),kl)}),s.syncOrAsync(Vn)}};function At(Be,Fe){if(Be){var Et=Object.keys(W).reduce(function(St,zt){return Fe.indexOf(zt)!==-1&&W[zt].forEach(function(Wt){St[Wt]=1}),St},{});Object.keys(Be).forEach(function(St){Et[St]||(St.length===1?Be[St]=0:delete Be[St])})}}function ht(Be,Fe){var Et=[],St,zt=function(Wt,Yt){var ze=Wt.xbnd[Yt];ze!==null&&Et.push(s.extendFlat({},Wt,{x:ze}))};if(Fe.length){for(St=0;St<Fe.length;St++)zt(Fe[St],0);zt(Fe[St-1],1)}return Et}function Gt(Be,Fe){for(var Et=[],St={},zt=0;zt<Fe.length;zt++){var Wt=Fe[zt];St[Wt.text2]?St[Wt.text2].push(Wt.x):St[Wt.text2]=[Wt.x]}for(var Yt in St)Et.push(Mt(Be,s.interp(St[Yt],.5),Yt));return Et}function fr(Be,Fe){var Et=[],St,zt,Wt=Fe.length&&Fe[Fe.length-1].x<Fe[0].x,Yt=function(tt,ct){var wt=tt.xbnd[ct];wt!==null&&Et.push(s.extendFlat({},tt,{x:wt}))};if(Be.showdividers&&Fe.length){for(St=0;St<Fe.length;St++){var ze=Fe[St];ze.text2!==zt&&Yt(ze,Wt?1:0),zt=ze.text2}Yt(Fe[St-1],Wt?0:1)}return Et}function gt(Be,Fe,Et){var St,zt,Wt,Yt;if(Be._selections[Fe].size())St=1/0,zt=-1/0,Wt=1/0,Yt=-1/0,Be._selections[Fe].each(function(){var tt=Ur(this);if(tt.node().style.display!=="none"){var ct=f.bBox(tt.node().parentNode);St=Math.min(St,ct.top),zt=Math.max(zt,ct.bottom),Wt=Math.min(Wt,ct.left),Yt=Math.max(Yt,ct.right)}});else{var ze=U.makeLabelFns(Be,Et);St=zt=ze.yFn({dx:0,dy:0,fontSize:0}),Wt=Yt=ze.xFn({dx:0,dy:0,fontSize:0})}return{top:St,bottom:zt,left:Wt,right:Yt,height:zt-St,width:Yt-Wt}}U.getTickSigns=function(Be,Fe){var Et=Be._id.charAt(0),St={x:"top",y:"right"}[Et],zt=Be.side===St?1:-1,Wt=[-1,1,zt,-zt],Yt=Fe?(Be.minor||{}).ticks:Be.ticks;return Yt!=="inside"==(Et==="x")&&(Wt=Wt.map(function(ze){return-ze})),Be.side&&Wt.push({l:-1,t:-1,r:1,b:1}[Be.side.charAt(0)]),Wt},U.makeTransTickFn=function(Be){return Be._id.charAt(0)==="x"?function(Fe){return l(Be._offset+Be.l2p(Fe.x),0)}:function(Fe){return l(0,Be._offset+Be.l2p(Fe.x))}},U.makeTransTickLabelFn=function(Be){var Fe=kt(Be),Et=Be.ticklabelshift||0,St=Be.ticklabelstandoff||0,zt=Fe[0],Wt=Fe[1],Yt=Be.range[0]>Be.range[1],ze=Be.ticklabelposition&&Be.ticklabelposition.indexOf("inside")!==-1,tt=!ze;if(Et){var ct=Yt?-1:1;Et=Et*ct}if(St){var wt=Be.side,Nt=ze&&(wt==="top"||wt==="left")||tt&&(wt==="bottom"||wt==="right")?1:-1;St=St*Nt}return Be._id.charAt(0)==="x"?function(It){return l(zt+Be._offset+Be.l2p(yt(It))+Et,Wt+St)}:function(It){return l(Wt+St,zt+Be._offset+Be.l2p(yt(It))+Et)}};function yt(Be){return Be.periodX!==void 0?Be.periodX:Be.x}function kt(Be){var Fe=Be.ticklabelposition||"",Et=Be.tickson||"",St=function(qt){return Fe.indexOf(qt)!==-1},zt=St("top"),Wt=St("left"),Yt=St("right"),ze=St("bottom"),tt=St("inside"),ct=Et!=="boundaries"&&(ze||Wt||zt||Yt);if(!ct&&!tt)return[0,0];var wt=Be.side,Nt=ct?(Be.tickwidth||0)/2:0,It=$,Zt=Be.tickfont?Be.tickfont.size:12;return(ze||zt)&&(Nt+=Zt*J,It+=(Be.linewidth||0)/2),(Wt||Yt)&&(Nt+=(Be.linewidth||0)/2,It+=$),tt&&wt==="top"&&(It-=Zt*(1-J)),(Wt||zt)&&(Nt=-Nt),(wt==="bottom"||wt==="right")&&(It=-It),[ct?Nt:0,tt?It:0]}U.makeTickPath=function(Be,Fe,Et,St){St||(St={});var zt=St.minor;if(zt&&!Be.minor)return"";var Wt=St.len!==void 0?St.len:zt?Be.minor.ticklen:Be.ticklen,Yt=Be._id.charAt(0),ze=(Be.linewidth||1)/2;return Yt==="x"?"M0,"+(Fe+ze*Et)+"v"+Wt*Et:"M"+(Fe+ze*Et)+",0h"+Wt*Et},U.makeLabelFns=function(Be,Fe,Et){var St=Be.ticklabelposition||"",zt=Be.tickson||"",Wt=function(Ka){return St.indexOf(Ka)!==-1},Yt=Wt("top"),ze=Wt("left"),tt=Wt("right"),ct=Wt("bottom"),wt=zt!=="boundaries"&&(ct||ze||Yt||tt),Nt=Wt("inside"),It=St==="inside"&&Be.ticks==="inside"||!Nt&&Be.ticks==="outside"&&zt!=="boundaries",Zt=0,qt=0,vr=It?Be.ticklen:0;if(Nt?vr*=-1:wt&&(vr=0),It&&(Zt+=vr,Et)){var Br=s.deg2rad(Et);Zt=vr*Math.cos(Br)+1,qt=vr*Math.sin(Br)}Be.showticklabels&&(It||Be.showline)&&(Zt+=.2*Be.tickfont.size),Zt+=(Be.linewidth||1)/2*(Nt?-1:1);var Pr={labelStandoff:Zt,labelShift:qt},Mi,gi,ba,Hi,Za=0,oa=Be.side,Cn=Be._id.charAt(0),_n=Be.tickangle,Li;if(Cn==="x")Li=!Nt&&oa==="bottom"||Nt&&oa==="top",Hi=Li?1:-1,Nt&&(Hi*=-1),Mi=qt*Hi,gi=Fe+Zt*Hi,ba=Li?1:-.2,Math.abs(_n)===90&&(Nt?ba+=Z:_n===-90&&oa==="bottom"?ba=J:_n===90&&oa==="top"?ba=Z:ba=.5,Za=Z/2*(_n/90)),Pr.xFn=function(Ka){return Ka.dx+Mi+Za*Ka.fontSize},Pr.yFn=function(Ka){return Ka.dy+gi+Ka.fontSize*ba},Pr.anchorFn=function(Ka,Rn){if(wt){if(ze)return"end";if(tt)return"start"}return!i(Rn)||Rn===0||Rn===180?"middle":Rn*Hi<0!==Nt?"end":"start"},Pr.heightFn=function(Ka,Rn,tn){return Rn<-60||Rn>60?-.5*tn:Be.side==="top"!==Nt?-tn:0};else if(Cn==="y"){if(Li=!Nt&&oa==="left"||Nt&&oa==="right",Hi=Li?1:-1,Nt&&(Hi*=-1),Mi=Zt,gi=qt*Hi,ba=0,!Nt&&Math.abs(_n)===90&&(_n===-90&&oa==="left"||_n===90&&oa==="right"?ba=J:ba=.5),Nt){var In=i(_n)?+_n:0;if(In!==0){var pn=s.deg2rad(In);Za=Math.abs(Math.sin(pn))*J*Hi,ba=0}}Pr.xFn=function(Ka){return Ka.dx+Fe-(Mi+Ka.fontSize*ba)*Hi+Za*Ka.fontSize},Pr.yFn=function(Ka){return Ka.dy+gi+Ka.fontSize*Z},Pr.anchorFn=function(Ka,Rn){return i(Rn)&&Math.abs(Rn)===90?"middle":Li?"end":"start"},Pr.heightFn=function(Ka,Rn,tn){return Be.side==="right"&&(Rn*=-1),Rn<-30?-tn:Rn<30?-.5*tn:0}}return Pr};function Lt(Be){return[Be.text,Be.x,Be.axInfo,Be.font,Be.fontSize,Be.fontColor].join("_")}U.drawTicks=function(Be,Fe,Et){Et=Et||{};var St=Fe._id+"tick",zt=[].concat(Fe.minor&&Fe.minor.ticks?Et.vals.filter(function(Yt){return Yt.minor&&!Yt.noTick}):[]).concat(Fe.ticks?Et.vals.filter(function(Yt){return!Yt.minor&&!Yt.noTick}):[]),Wt=Et.layer.selectAll("path."+St).data(zt,Lt);Wt.exit().remove(),Wt.enter().append("path").classed(St,1).classed("ticks",1).classed("crisp",Et.crisp!==!1).each(function(Yt){return c.stroke(t.select(this),Yt.minor?Fe.minor.tickcolor:Fe.tickcolor)}).style("stroke-width",function(Yt){return f.crispRound(Be,Yt.minor?Fe.minor.tickwidth:Fe.tickwidth,1)+"px"}).attr("d",Et.path).style("display",null),Ua(Fe,[O]),Wt.attr("transform",Et.transFn)},U.drawGrid=function(Be,Fe,Et){if(Et=Et||{},Fe.tickmode!=="sync"){var St=Fe._id+"grid",zt=Fe.minor&&Fe.minor.showgrid,Wt=zt?Et.vals.filter(function(Pr){return Pr.minor}):[],Yt=Fe.showgrid?Et.vals.filter(function(Pr){return!Pr.minor}):[],ze=Et.counterAxis;if(ze&&U.shouldShowZeroLine(Be,Fe,ze))for(var tt=Fe.tickmode==="array",ct=0;ct<Yt.length;ct++){var wt=Yt[ct].x;if(tt?!wt:Math.abs(wt)<Fe.dtick/100)if(Yt=Yt.slice(0,ct).concat(Yt.slice(ct+1)),tt)ct--;else break}Fe._gw=f.crispRound(Be,Fe.gridwidth,1);for(var Nt=zt?f.crispRound(Be,Fe.minor.gridwidth,1):0,It=Et.layer,Zt=Et.minorLayer,qt=1;qt>=0;qt--){var vr=qt?It:Zt;if(vr){var Br=vr.selectAll("path."+St).data(qt?Yt:Wt,Lt);Br.exit().remove(),Br.enter().append("path").classed(St,1).classed("crisp",Et.crisp!==!1),Br.attr("transform",Et.transFn).attr("d",Et.path).each(function(Pr){return c.stroke(t.select(this),Pr.minor?Fe.minor.gridcolor:Fe.gridcolor||"#ddd")}).style("stroke-dasharray",function(Pr){return f.dashStyle(Pr.minor?Fe.minor.griddash:Fe.griddash,Pr.minor?Fe.minor.gridwidth:Fe.gridwidth)}).style("stroke-width",function(Pr){return(Pr.minor?Nt:Fe._gw)+"px"}).style("display",null),typeof Et.path=="function"&&Br.attr("d",Et.path)}}Ua(Fe,[L,B])}},U.drawZeroLine=function(Be,Fe,Et){Et=Et||Et;var St=Fe._id+"zl",zt=U.shouldShowZeroLine(Be,Fe,Et.counterAxis),Wt=Et.layer.selectAll("path."+St).data(zt?[{x:0,id:Fe._id}]:[]);Wt.exit().remove(),Wt.enter().append("path").classed(St,1).classed("zl",1).classed("crisp",Et.crisp!==!1).each(function(){Et.layer.selectAll("path").sort(function(Yt,ze){return q(Yt.id,ze.id)})}),Wt.attr("transform",Et.transFn).attr("d",Et.path).call(c.stroke,Fe.zerolinecolor||c.defaultLine).style("stroke-width",f.crispRound(Be,Fe.zerolinewidth,Fe._gw||1)+"px").style("display",null),Ua(Fe,[I])},U.drawLabels=function(Be,Fe,Et){Et=Et||{};var St=Be._fullLayout,zt=Fe._id,Wt=Fe.zerolinelayer==="above traces",Yt=Et.cls||zt+"tick",ze=Et.vals.filter(function(ua){return ua.text}),tt=Et.labelFns,ct=Et.secondary?0:Fe.tickangle,wt=(Fe._prevTickAngles||{})[Yt],Nt=Et.layer.selectAll("g."+Yt).data(Fe.showticklabels?ze:[],Lt),It=[];Nt.enter().append("g").classed(Yt,1).append("text").attr("text-anchor","middle").each(function(ua){var Ea=t.select(this),ln=Be._promises.length;Ea.call(n.positionText,tt.xFn(ua),tt.yFn(ua)).call(f.font,{family:ua.font,size:ua.fontSize,color:ua.fontColor,weight:ua.fontWeight,style:ua.fontStyle,variant:ua.fontVariant,textcase:ua.fontTextcase,lineposition:ua.fontLineposition,shadow:ua.fontShadow}).text(ua.text).call(n.convertToTspans,Be),Be._promises[ln]?It.push(Be._promises.pop().then(function(){Zt(Ea,ct)})):Zt(Ea,ct)}),Ua(Fe,[G]),Nt.exit().remove(),Et.repositionOnUpdate&&Nt.each(function(ua){t.select(this).select("text").call(n.positionText,tt.xFn(ua),tt.yFn(ua))});function Zt(ua,Ea){ua.each(function(ln){var on=t.select(this),ao=on.select(".text-math-group"),ho=tt.anchorFn(ln,Ea),Jn=Et.transFn.call(on.node(),ln)+(i(Ea)&&+Ea!=0?" rotate("+Ea+","+tt.xFn(ln)+","+(tt.yFn(ln)-ln.fontSize/2)+")":""),lo=n.lineCount(on),Fo=N*ln.fontSize,uo=tt.heightFn(ln,i(Ea)?+Ea:0,(lo-1)*Fo);if(uo&&(Jn+=l(0,uo)),ao.empty()){var Qn=on.select("text");Qn.attr({transform:Jn,"text-anchor":ho}),Qn.style("display",null),Fe._adjustTickLabelsOverflow&&Fe._adjustTickLabelsOverflow()}else{var jo=f.bBox(ao.node()).width,Yn=jo*{end:-.5,start:.5}[ho];ao.attr("transform",Jn+l(Yn,0))}})}Fe._adjustTickLabelsOverflow=function(){var ua=Fe.ticklabeloverflow;if(!(!ua||ua==="allow")){var Ea=ua.indexOf("hide")!==-1,ln=Fe._id.charAt(0)==="x",on=0,ao=ln?Be._fullLayout.width:Be._fullLayout.height;if(ua.indexOf("domain")!==-1){var ho=s.simpleMap(Fe.range,Fe.r2l);on=Fe.l2p(ho[0])+Fe._offset,ao=Fe.l2p(ho[1])+Fe._offset}var Jn=Math.min(on,ao),lo=Math.max(on,ao),Fo=Fe.side,uo=1/0,Qn=-1/0;Nt.each(function(ps){var xo=t.select(this),no=xo.select(".text-math-group");if(no.empty()){var Mo=f.bBox(xo.node()),Vn=0;ln?(Mo.right>lo||Mo.left<Jn)&&(Vn=1):(Mo.bottom>lo||Mo.top+(Fe.tickangle?0:ps.fontSize/4)<Jn)&&(Vn=1);var ts=xo.select("text");Vn?Ea&&ts.style("display","none"):ts.node().style.display!=="none"&&(ts.style("display",null),Fo==="bottom"||Fo==="right"?uo=Math.min(uo,ln?Mo.top:Mo.left):uo=-1/0,Fo==="top"||Fo==="left"?Qn=Math.max(Qn,ln?Mo.bottom:Mo.right):Qn=1/0)}});for(var jo in St._plots){var Yn=St._plots[jo];if(!(Fe._id!==Yn.xaxis._id&&Fe._id!==Yn.yaxis._id)){var Bn=ln?Yn.yaxis:Yn.xaxis;Bn&&(Bn["_visibleLabelMin_"+Fe._id]=uo,Bn["_visibleLabelMax_"+Fe._id]=Qn)}}}},Fe._hideCounterAxisInsideTickLabels=function(ua){var Ea=Fe._id.charAt(0)==="x",ln=[];for(var on in St._plots){var ao=St._plots[on];Fe._id!==ao.xaxis._id&&Fe._id!==ao.yaxis._id||ln.push(Ea?ao.yaxis:ao.xaxis)}ln.forEach(function(ho,Jn){ho&&bi(ho)&&(ua||[I,B,L,O,G]).forEach(function(lo){var Fo=lo.K==="tick"&&lo.L==="text"&&Fe.ticklabelmode==="period",uo=St._plots[Fe._mainSubplot],Qn;if(lo.K===I.K){var jo=Wt?uo.zerolinelayerAbove:uo.zerolinelayer;Qn=jo.selectAll("."+Fe._id+"zl")}else lo.K===B.K?Qn=uo.minorGridlayer.selectAll("."+Fe._id):lo.K===L.K?Qn=uo.gridlayer.selectAll("."+Fe._id):Qn=uo[Fe._id.charAt(0)+"axislayer"];Qn.each(function(){var Yn=t.select(this);lo.L&&(Yn=Yn.selectAll(lo.L)),Yn.each(function(Bn){var ps=Fe.l2p(Fo?yt(Bn):Bn.x)+Fe._offset,xo=t.select(this);ps<Fe["_visibleLabelMax_"+ho._id]&&ps>Fe["_visibleLabelMin_"+ho._id]?xo.style("display","none"):lo.K==="tick"&&!Jn&&xo.node().style.display!=="none"&&xo.style("display",null)})})})})},Zt(Nt,wt+1?wt:ct);function qt(){return It.length&&Promise.all(It)}var vr=null;function Br(){if(Zt(Nt,ct),ze.length&&Fe.autotickangles&&(Fe.type!=="log"||String(Fe.dtick).charAt(0)!=="D")){vr=Fe.autotickangles[0];var ua=0,Ea=[],ln,on=1;Nt.each(function(On){ua=Math.max(ua,On.fontSize);var Uo=Fe.l2p(On.x),kl=Ur(this),mu=f.bBox(kl.node());on=Math.max(on,n.lineCount(kl)),Ea.push({top:0,bottom:10,height:10,left:Uo-mu.width/2,right:Uo+mu.width/2+2,width:mu.width+2})});var ao=(Fe.tickson==="boundaries"||Fe.showdividers)&&!Et.secondary,ho=ze.length,Jn=Math.abs((ze[ho-1].x-ze[0].x)*Fe._m)/(ho-1),lo=ao?Jn/2:Jn,Fo=ao?Fe.ticklen:ua*1.25*on,uo=Math.sqrt(Math.pow(lo,2)+Math.pow(Fo,2)),Qn=lo/uo,jo=Fe.autotickangles.map(function(On){return On*Math.PI/180}),Yn=jo.find(function(On){return Math.abs(Math.cos(On))<=Qn});Yn===void 0&&(Yn=jo.reduce(function(On,Uo){return Math.abs(Math.cos(On))<Math.abs(Math.cos(Uo))?On:Uo},jo[0]));var Bn=Yn*(180/Math.PI);if(ao){var ps=2;for(Fe.ticks&&(ps+=Fe.tickwidth/2),ln=0;ln<Ea.length;ln++){var xo=ze[ln].xbnd,no=Ea[ln];if(xo[0]!==null&&no.left-Fe.l2p(xo[0])<ps||xo[1]!==null&&Fe.l2p(xo[1])-no.right<ps){vr=Bn;break}}}else{var Mo=Fe.ticklabelposition||"",Vn=Fe.tickson||"",ts=function(On){return Mo.indexOf(On)!==-1},ws=ts("top"),So=ts("left"),nl=ts("right"),vs=ts("bottom"),go=Vn!=="boundaries"&&(vs||So||ws||nl),Xn=go?(Fe.tickwidth||0)+2*$:0;for(ln=0;ln<Ea.length-1;ln++)if(s.bBoxIntersect(Ea[ln],Ea[ln+1],Xn)){vr=Bn;break}}vr&&Zt(Nt,vr)}}Fe._selections&&(Fe._selections[Yt]=Nt);var Pr=[qt];Fe.automargin&&St._redrawFromAutoMarginCount&&wt===90?(vr=wt,Pr.push(function(){Zt(Nt,wt)})):Pr.push(Br),Fe._tickAngles&&Pr.push(function(){Fe._tickAngles[Yt]=vr===null?i(ct)?ct:0:vr});var Mi=function(){var ua=0,Ea=0;return Nt.each(function(ln,on){var ao=Ur(this),ho=ao.select(".text-math-group");if(ho.empty()){var Jn;Fe._vals[on]&&(Jn=Fe._vals[on].bb||f.bBox(ao.node()),Fe._vals[on].bb=Jn),ua=Math.max(ua,Jn.width),Ea=Math.max(Ea,Jn.height)}}),{labelsMaxW:ua,labelsMaxH:Ea}},gi=Fe._anchorAxis;if(gi&&(gi.autorange||gi.insiderange)&&bi(Fe)&&!Y(St,Fe._id)&&(St._insideTickLabelsUpdaterange||(St._insideTickLabelsUpdaterange={}),gi.autorange&&(St._insideTickLabelsUpdaterange[gi._name+".autorange"]=gi.autorange,Pr.push(Mi)),gi.insiderange)){var ba=Mi(),Hi=Fe._id.charAt(0)==="y"?ba.labelsMaxW:ba.labelsMaxH;Hi+=2*$,Fe.ticklabelposition==="inside"&&(Hi+=Fe.ticklen||0);var Za=Fe.side==="right"||Fe.side==="top"?1:-1,oa=Za===1?1:0,Cn=Za===1?0:1,_n=[];_n[Cn]=gi.range[Cn];var Li=gi.range,In=gi.r2p(Li[oa]),pn=gi.r2p(Li[Cn]),Ka=St._insideTickLabelsUpdaterange[gi._name+".range"];if(Ka){var Rn=gi.r2p(Ka[oa]),tn=gi.r2p(Ka[Cn]),Mn=Za*(Fe._id.charAt(0)==="y"?1:-1);Mn*In<Mn*Rn&&(In=Rn,_n[oa]=Li[oa]=Ka[oa]),Mn*pn>Mn*tn&&(pn=tn,_n[Cn]=Li[Cn]=Ka[Cn])}var Kn=Math.abs(pn-In);Kn-Hi>0?(Kn-=Hi,Hi*=1+Hi/Kn):Hi=0,Fe._id.charAt(0)!=="y"&&(Hi=-Hi),_n[oa]=gi.p2r(gi.r2p(Li[oa])+Za*Hi),gi.autorange==="min"||gi.autorange==="max reversed"?(_n[0]=null,gi._rangeInitial0=void 0,gi._rangeInitial1=void 0):(gi.autorange==="max"||gi.autorange==="min reversed")&&(_n[1]=null,gi._rangeInitial0=void 0,gi._rangeInitial1=void 0),St._insideTickLabelsUpdaterange[gi._name+".range"]=_n}var zn=s.syncOrAsync(Pr);return zn&&zn.then&&Be._promises.push(zn),zn};function Ct(Be,Fe,Et){var St=Fe._id+"divider",zt=Et.vals,Wt=Et.layer.selectAll("path."+St).data(zt,Lt);Wt.exit().remove(),Wt.enter().insert("path",":first-child").classed(St,1).classed("crisp",1).call(c.stroke,Fe.dividercolor).style("stroke-width",f.crispRound(Be,Fe.dividerwidth,1)+"px"),Wt.attr("transform",Et.transFn).attr("d",Et.path)}U.getPxPosition=function(Be,Fe){var Et=Be._fullLayout._size,St=Fe._id.charAt(0),zt=Fe.side,Wt;if(Fe.anchor!=="free"?Wt=Fe._anchorAxis:St==="x"?Wt={_offset:Et.t+(1-(Fe.position||0))*Et.h,_length:0}:St==="y"&&(Wt={_offset:Et.l+(Fe.position||0)*Et.w+Fe._shift,_length:0}),zt==="top"||zt==="left")return Wt._offset;if(zt==="bottom"||zt==="right")return Wt._offset+Wt._length};function $t(Be){var Fe=Be.title.font.size,Et=(Be.title.text.match(n.BR_TAG_ALL)||[]).length;return Be.title.hasOwnProperty("standoff")?Fe*(J+Et*N):Et?Fe*(Et+1)*N:Fe}function mr(Be,Fe){var Et=Be._fullLayout,St=Fe._id,zt=St.charAt(0),Wt=Fe.title.font.size,Yt,ze=(Fe.title.text.match(n.BR_TAG_ALL)||[]).length;if(Fe.title.hasOwnProperty("standoff"))Fe.side==="bottom"||Fe.side==="right"?Yt=Fe._depth+Fe.title.standoff+Wt*J:(Fe.side==="top"||Fe.side==="left")&&(Yt=Fe._depth+Fe.title.standoff+Wt*(Z+ze*N));else{var tt=bi(Fe);if(Fe.type==="multicategory")Yt=Fe._depth;else{var ct=1.5*Wt;tt&&(ct=.5*Wt,Fe.ticks==="outside"&&(ct+=Fe.ticklen)),Yt=10+ct+(Fe.linewidth?Fe.linewidth-1:0)}tt||(zt==="x"?Yt+=Fe.side==="top"?Wt*(Fe.showticklabels?1:0):Wt*(Fe.showticklabels?1.5:.5):Yt+=Fe.side==="right"?Wt*(Fe.showticklabels?1:.5):Wt*(Fe.showticklabels?.5:0))}var wt=U.getPxPosition(Be,Fe),Nt,It,Zt;zt==="x"?(It=Fe._offset+Fe._length/2,Zt=Fe.side==="top"?wt-Yt:wt+Yt):(Zt=Fe._offset+Fe._length/2,It=Fe.side==="right"?wt+Yt:wt-Yt,Nt={rotate:"-90",offset:0});var qt;if(Fe.type!=="multicategory"){var vr=Fe._selections[Fe._id+"tick"];if(qt={selection:vr,side:Fe.side},vr&&vr.node()&&vr.node().parentNode){var Br=f.getTranslate(vr.node().parentNode);qt.offsetLeft=Br.x,qt.offsetTop=Br.y}Fe.title.hasOwnProperty("standoff")&&(qt.pad=0)}return Fe._titleStandoff=Yt,u.draw(Be,St+"title",{propContainer:Fe,propName:Fe._name+".title.text",placeholder:Et._dfltTitle[zt],avoid:qt,transform:Nt,attributes:{x:It,y:Zt,"text-anchor":"middle"}})}U.shouldShowZeroLine=function(Be,Fe,Et){var St=s.simpleMap(Fe.range,Fe.r2l);return St[0]*St[1]<=0&&Fe.zeroline&&(Fe.type==="linear"||Fe.type==="-")&&!(Fe.rangebreaks&&Fe.maskBreaks(0)===z)&&(br(Fe,0)||!Er(Be,Fe,Et,St)||Tr(Be,Fe))},U.clipEnds=function(Be,Fe){return Fe.filter(function(Et){return br(Be,Et.x)})};function br(Be,Fe){var Et=Be.l2p(Fe);return Et>1&&Et<Be._length-1}function Er(Be,Fe,Et,St){var zt=Et._mainAxis;if(!zt)return;var Wt=Be._fullLayout,Yt=Fe._id.charAt(0),ze=U.counterLetter(Fe._id),tt=Fe._offset+(Math.abs(St[0])<Math.abs(St[1])==(Yt==="x")?0:Fe._length);function ct(qt){if(!qt.showline||!qt.linewidth)return!1;var vr=Math.max((qt.linewidth+Fe.zerolinewidth)/2,1);function Br(gi){return typeof gi=="number"&&Math.abs(gi-tt)<vr}if(Br(qt._mainLinePosition)||Br(qt._mainMirrorPosition))return!0;var Pr=qt._linepositions||{};for(var Mi in Pr)if(Br(Pr[Mi][0])||Br(Pr[Mi][1]))return!0}var wt=Wt._plots[Et._mainSubplot];if(!(wt.mainplotinfo||wt).overlays.length)return ct(Et,tt);for(var Nt=U.list(Be,ze),It=0;It<Nt.length;It++){var Zt=Nt[It];if(Zt._mainAxis===zt&&ct(Zt,tt))return!0}}function Tr(Be,Fe){for(var Et=Be._fullData,St=Fe._mainSubplot,zt=Fe._id.charAt(0),Wt=0;Wt<Et.length;Wt++){var Yt=Et[Wt];if(Yt.visible===!0&&Yt.xaxis+Yt.yaxis===St&&(o.traceIs(Yt,"bar-like")&&Yt.orientation==={x:"h",y:"v"}[zt]||Yt.fill&&Yt.fill.charAt(Yt.fill.length-1)===zt))return!0}return!1}function Ur(Be){var Fe=t.select(Be),Et=Fe.select(".text-math-group");return Et.empty()?Fe.select("text"):Et}U.allowAutoMargin=function(Be){for(var Fe=U.list(Be,"",!0),Et=0;Et<Fe.length;Et++){var St=Fe[Et];St.automargin&&(a.allowAutoMargin(Be,Ai(St)),St.mirror&&a.allowAutoMargin(Be,oi(St))),o.getComponentMethod("rangeslider","isVisible")(St)&&a.allowAutoMargin(Be,Qr(St))}};function Ai(Be){return Be._id+".automargin"}function oi(Be){return Ai(Be)+".mirror"}function Qr(Be){return Be._id+".rangeslider"}U.swap=function(Be,Fe){for(var Et=ea(Be,Fe),St=0;St<Et.length;St++)ja(Be,Et[St].x,Et[St].y)};function ea(Be,Fe){var Et=[],St,zt;for(St=0;St<Fe.length;St++){var Wt=[],Yt=Be._fullData[Fe[St]].xaxis,ze=Be._fullData[Fe[St]].yaxis;if(!(!Yt||!ze)){for(zt=0;zt<Et.length;zt++)(Et[zt].x.indexOf(Yt)!==-1||Et[zt].y.indexOf(ze)!==-1)&&Wt.push(zt);if(!Wt.length){Et.push({x:[Yt],y:[ze]});continue}var tt=Et[Wt[0]],ct;if(Wt.length>1)for(zt=1;zt<Wt.length;zt++)ct=Et[Wt[zt]],$i(tt.x,ct.x),$i(tt.y,ct.y);$i(tt.x,[Yt]),$i(tt.y,[ze])}}return Et}function $i(Be,Fe){for(var Et=0;Et<Fe.length;Et++)Be.indexOf(Fe[Et])===-1&&Be.push(Fe[Et])}function ja(Be,Fe,Et){var St=[],zt=[],Wt=Be.layout,Yt,ze;for(Yt=0;Yt<Fe.length;Yt++)St.push(U.getFromId(Be,Fe[Yt]));for(Yt=0;Yt<Et.length;Yt++)zt.push(U.getFromId(Be,Et[Yt]));var tt=Object.keys(h),ct=["anchor","domain","overlaying","position","side","tickangle","editType"],wt=["linear","log"];for(Yt=0;Yt<tt.length;Yt++){var Nt=tt[Yt],It=St[0][Nt],Zt=zt[0][Nt],qt=!0,vr=!1,Br=!1;if(!(Nt.charAt(0)==="_"||typeof It=="function"||ct.indexOf(Nt)!==-1)){for(ze=1;ze<St.length&&qt;ze++){var Pr=St[ze][Nt];Nt==="type"&&wt.indexOf(It)!==-1&&wt.indexOf(Pr)!==-1&&It!==Pr?vr=!0:Pr!==It&&(qt=!1)}for(ze=1;ze<zt.length&&qt;ze++){var Mi=zt[ze][Nt];Nt==="type"&&wt.indexOf(Zt)!==-1&&wt.indexOf(Mi)!==-1&&Zt!==Mi?Br=!0:zt[ze][Nt]!==Zt&&(qt=!1)}qt&&(vr&&(Wt[St[0]._name].type="linear"),Br&&(Wt[zt[0]._name].type="linear"),ya(Wt,Nt,St,zt,Be._fullLayout._dfltTitle))}}for(Yt=0;Yt<Be._fullLayout.annotations.length;Yt++){var gi=Be._fullLayout.annotations[Yt];Fe.indexOf(gi.xref)!==-1&&Et.indexOf(gi.yref)!==-1&&s.swapAttrs(Wt.annotations[Yt],["?"])}}function ya(Be,Fe,Et,St,zt){var Wt=s.nestedProperty,Yt=Wt(Be[Et[0]._name],Fe).get(),ze=Wt(Be[St[0]._name],Fe).get(),tt;for(Fe==="title"&&(Yt&&Yt.text===zt.x&&(Yt.text=zt.y),ze&&ze.text===zt.y&&(ze.text=zt.x)),tt=0;tt<Et.length;tt++)Wt(Be,Et[tt]._name+"."+Fe).set(ze);for(tt=0;tt<St.length;tt++)Wt(Be,St[tt]._name+"."+Fe).set(Yt)}function pa(Be){return Be._id==="angularaxis"}function xi(Be,Fe){for(var Et=Fe._rangebreaks.length,St=0;St<Et;St++){var zt=Fe._rangebreaks[St];if(Be>=zt.min&&Be<zt.max)return zt.max}return Be}function bi(Be){return(Be.ticklabelposition||"").indexOf("inside")!==-1}function Ua(Be,Fe){bi(Be._anchorAxis||{})&&Be._hideCounterAxisInsideTickLabels&&Be._hideCounterAxisInsideTickLabels(Fe)}function dn(Be,Fe,Et,St){var zt=Be.anchor!=="free"&&(Be.overlaying===void 0||Be.overlaying===!1)?Be._id:Be.overlaying,Wt;St?Wt=Be.side==="right"?Fe:-Fe:Wt=Fe,zt in Et||(Et[zt]={}),Be.side in Et[zt]||(Et[zt][Be.side]=0),Et[zt][Be.side]+=Wt}function pi(Be,Fe){return Be.autoshift?Fe[Be.overlaying][Be.side]:Be.shift||0}function Jr(Be,Fe){return/%f/.test(Fe)?Be>=R:/%L/.test(Fe)?Be>=D:/%[SX]/.test(Fe)?Be>=F:/%M/.test(Fe)?Be>=T:/%[HI]/.test(Fe)?Be>=E:/%p/.test(Fe)?Be>=b:/%[Aadejuwx]/.test(Fe)?Be>=A:/%[UVW]/.test(Fe)?Be>=k:/%[Bbm]/.test(Fe)?Be>=w:/%[q]/.test(Fe)?Be>=S:/%[Yy]/.test(Fe)?Be>=_:!0}}}),LE=de({"src/plots/cartesian/autorange_options_defaults.js"(e,r){"use strict";r.exports=function(i,a,o){var s,l;if(o){var n=a==="reversed"||a==="min reversed"||a==="max reversed";s=o[n?1:0],l=o[n?0:1]}var u=i("autorangeoptions.minallowed",l===null?s:void 0),c=i("autorangeoptions.maxallowed",s===null?l:void 0);u===void 0&&i("autorangeoptions.clipmin"),c===void 0&&i("autorangeoptions.clipmax"),i("autorangeoptions.include")}}}),FE=de({"src/plots/cartesian/range_defaults.js"(e,r){"use strict";var t=LE();r.exports=function(a,o,s,l){var n=o._template||{},u=o.type||n.type||"-";s("minallowed"),s("maxallowed");var c=s("range");if(!c){var f;!l.noInsiderange&&u!=="log"&&(f=s("insiderange"),f&&(f[0]===null||f[1]===null)&&(o.insiderange=!1,f=void 0),f&&(c=s("range",f)))}var h=o.getAutorangeDflt(c,l),d=s("autorange",h),p;c&&(c[0]===null&&c[1]===null||(c[0]===null||c[1]===null)&&(d==="reversed"||d===!0)||c[0]!==null&&(d==="min"||d==="max reversed")||c[1]!==null&&(d==="max"||d==="min reversed"))&&(c=void 0,delete o.range,o.autorange=!0,p=!0),p||(h=o.getAutorangeDflt(c,l),d=s("autorange",h)),d&&(t(s,d,c),(u==="linear"||u==="-")&&s("rangemode")),o.cleanRange()}}}),vq=de({"node_modules/mouse-event-offset/index.js"(e,r){var t={left:0,top:0};r.exports=i;function i(o,s,l){s=s||o.currentTarget||o.srcElement,Array.isArray(l)||(l=[0,0]);var n=o.clientX||0,u=o.clientY||0,c=a(s);return l[0]=n-c.left,l[1]=u-c.top,l}function a(o){return o===window||o===document||o===document.body?t:o.getBoundingClientRect()}}}),Mw=de({"node_modules/has-passive-events/index.js"(e,r){"use strict";var t=wE();function i(){var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){a=!0}});window.addEventListener("test",null,o),window.removeEventListener("test",null,o)}catch{a=!1}return a}r.exports=t&&i()}}),mq=de({"src/components/dragelement/align.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){var n=(i-o)/(s-o),u=n+a/(s-o),c=(n+u)/2;return l==="left"||l==="bottom"?n:l==="center"||l==="middle"?c:l==="right"||l==="top"?u:n<2/3-c?n:u>4/3-c?u:c}}}),gq=de({"src/components/dragelement/cursor.js"(e,r){"use strict";var t=Qt(),i=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];r.exports=function(o,s,l,n){return l==="left"?o=0:l==="center"?o=1:l==="right"?o=2:o=t.constrain(Math.floor(o*3),0,2),n==="bottom"?s=0:n==="middle"?s=1:n==="top"?s=2:s=t.constrain(Math.floor(s*3),0,2),i[s][o]}}}),yq=de({"src/components/dragelement/unhover.js"(e,r){"use strict";var t=u1(),i=ww(),a=Ty().getGraphDiv,o=Ta(),s=r.exports={};s.wrapped=function(l,n,u){var c;l=a(l),l._fullLayout&&i.clear(l._fullLayout._uid+o.HOVERID);let f=l._hoverdata;s.raw(l,n,u)&&l._hoverAnywhereActive&&(l._hoverAnywhereActive=!1,(c=l._fullLayout)!=null&&c.hoveranywhere&&n?.target&&!f&&l.emit("plotly_unhover",{event:n,points:[]}))},s.raw=function(n,u){var c=n._fullLayout,f=n._hoverdata;return u||(u={}),u.target&&!n._dragged&&t.triggerHandler(n,"plotly_beforehover",u)===!1?!1:(c._hoverlayer.selectAll("g").remove(),c._hoverlayer.selectAll("line").remove(),c._hoverlayer.selectAll("circle").remove(),n._hoverdata=void 0,u.target&&f&&n.emit("plotly_unhover",{event:u,points:f}),!0)}}}),Uc=de({"src/components/dragelement/index.js"(e,r){"use strict";var t=vq(),i=TE(),a=Mw(),o=Qt().removeElement,s=zl(),l=r.exports={};l.align=mq(),l.getCursor=gq();var n=yq();l.unhover=n.wrapped,l.unhoverRaw=n.raw,l.init=function(h){var d=h.gd,p=1,g=d._context.doubleClickDelay,m=h.element,y,_,v,x,S,M,C,w;d._mouseDownTime||(d._mouseDownTime=0),m.style.pointerEvents="all",m.onmousedown=b,a?(m._ontouchstart&&m.removeEventListener("touchstart",m._ontouchstart),m._ontouchstart=b,m.addEventListener("touchstart",b,{passive:!1})):m.ontouchstart=b;function k(F,D,R){return Math.abs(F)<R&&(F=0),Math.abs(D)<R&&(D=0),[F,D]}var A=h.clampFn||k;function b(F){d._dragged=!1,d._dragging=!0;var D=c(F);y=D[0],_=D[1],C=F.target,M=F,w=F.buttons===2||F.ctrlKey,typeof F.clientX>"u"&&typeof F.clientY>"u"&&(F.clientX=y,F.clientY=_),v=new Date().getTime(),v-d._mouseDownTime<g?p+=1:(p=1,d._mouseDownTime=v),h.prepFn&&h.prepFn(F,y,_),i&&!w?(S=u(),S.style.cursor=window.getComputedStyle(m).cursor):i||(S=document,x=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(m).cursor),document.addEventListener("mouseup",T),document.addEventListener("touchend",T),h.dragmode!==!1&&(F.preventDefault(),document.addEventListener("mousemove",E),document.addEventListener("touchmove",E,{passive:!1}))}function E(F){F.preventDefault();var D=c(F),R=h.minDrag||s.MINDRAG,P=A(D[0]-y,D[1]-_,R),z=P[0],I=P[1];(z||I)&&(d._dragged=!0,l.unhover(d,F)),d._dragged&&h.moveFn&&!w&&(d._dragdata={element:m,dx:z,dy:I},h.moveFn(z,I))}function T(F){if(delete d._dragdata,h.dragmode!==!1&&(F.preventDefault(),document.removeEventListener("mousemove",E),document.removeEventListener("touchmove",E)),document.removeEventListener("mouseup",T),document.removeEventListener("touchend",T),i?o(S):x&&(S.documentElement.style.cursor=x,x=null),!d._dragging){d._dragged=!1;return}if(d._dragging=!1,new Date().getTime()-d._mouseDownTime>g&&(p=Math.max(p-1,1)),d._dragged)h.doneFn&&h.doneFn();else{var D;M.target===C?D=M:(D={target:C,srcElement:C,toElement:C},Object.keys(M).concat(Object.keys(M.__proto__)).forEach(R=>{var P=M[R];!D[R]&&typeof P!="function"&&(D[R]=P)})),h.clickFn&&h.clickFn(p,D),w||C.dispatchEvent(new MouseEvent("click",F))}d._dragging=!1,d._dragged=!1}};function u(){var f=document.createElement("div");f.className="dragcover";var h=f.style;return h.position="fixed",h.left=0,h.right=0,h.top=0,h.bottom=0,h.zIndex=999999999,h.background="none",document.body.appendChild(f),f}l.coverSlip=u;function c(f){return t(f.changedTouches?f.changedTouches[0]:f,document.body)}}}),md=de({"src/lib/setcursor.js"(e,r){"use strict";r.exports=function(i,a){(i.attr("class")||"").split(" ").forEach(function(o){o.indexOf("cursor-")===0&&i.classed(o,!1)}),a&&i.classed("cursor-"+a,!0)}}}),_q=de({"src/lib/override_cursor.js"(e,r){"use strict";var t=md(),i="data-savedcursor",a="!!";r.exports=function(s,l){var n=s.attr(i);if(l){if(!n){for(var u=(s.attr("class")||"").split(" "),c=0;c<u.length;c++){var f=u[c];f.indexOf("cursor-")===0&&s.attr(i,f.slice(7)).classed(f,!1)}s.attr(i)||s.attr(i,a)}t(s,l)}else n&&(s.attr(i,null),n===a?t(s):t(s,n))}}}),PE=de({"src/components/legend/attributes.js"(e,r){"use strict";var t=us(),i=Jo();r.exports={_isSubplotObj:!0,visible:{valType:"boolean",dflt:!0,editType:"legend"},bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:i.defaultLine,editType:"legend"},maxheight:{valType:"number",min:0,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:t({editType:"legend"}),grouptitlefont:t({editType:"legend"}),orientation:{valType:"enumerated",values:["v","h"],dflt:"v",editType:"legend"},traceorder:{valType:"flaglist",flags:["reversed","grouped"],extras:["normal"],editType:"legend"},tracegroupgap:{valType:"number",min:0,dflt:10,editType:"legend"},entrywidth:{valType:"number",min:0,editType:"legend"},entrywidthmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels",editType:"legend"},indentation:{valType:"number",min:-15,dflt:0,editType:"legend"},itemsizing:{valType:"enumerated",values:["trace","constant"],dflt:"trace",editType:"legend"},itemwidth:{valType:"number",min:30,dflt:30,editType:"legend"},itemclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggle",editType:"legend"},itemdoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggleothers",editType:"legend"},groupclick:{valType:"enumerated",values:["toggleitem","togglegroup"],dflt:"togglegroup",editType:"legend"},groupdoubleclick:{valType:"enumerated",values:["toggleitem","togglegroup"],editType:"legend"},titleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],editType:"legend"},titledoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],editType:"legend"},x:{valType:"number",editType:"legend"},xref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"legend"},y:{valType:"number",editType:"legend"},yref:{valType:"enumerated",dflt:"paper",values:["container","paper"],editType:"layoutstyle"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],editType:"legend"},uirevision:{valType:"any",editType:"none"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"legend"},title:{text:{valType:"string",dflt:"",editType:"legend"},font:t({editType:"legend"}),side:{valType:"enumerated",values:["top","left","top left","top center","top right"],editType:"legend"},editType:"legend"},editType:"legend"}}}),Ey=de({"src/components/legend/helpers.js"(e){"use strict";e.isGrouped=function(t){return(t.traceorder||"").indexOf("grouped")!==-1},e.isVertical=function(t){return t.orientation!=="h"},e.isReversed=function(t){return(t.traceorder||"").indexOf("reversed")!==-1},e.getId=function(t){return t._id||"legend"}}}),IE=de({"src/components/legend/defaults.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=Ro(),o=ri(),s=PE(),l=l1(),n=Ey();function u(c,f,h,d,p){var g=f[c]||{},m=a.newContainer(h,c);function y($,U){return i.coerce(g,m,s,$,U)}var _=i.coerceFont(y,"font",h.font);y("bgcolor",h.paper_bgcolor),y("bordercolor");var v=y("visible");if(!v)return;var x,S=function($,U){var V=x._input,j=x;return i.coerce(V,j,o,$,U)},M=h.font||{},C=i.coerceFont(y,"grouptitlefont",M,{overrideDflt:{size:Math.round(M.size*1.1)}}),w=0,k=!1,A="normal",b=(h.shapes||[]).filter(function($){return $.showlegend});function E($){return t.traceIs($,"pie-like")&&$._length!=null&&(Array.isArray($.legend)||Array.isArray($.showlegend))}d.filter(E).forEach(function($){$.visible&&w++;for(var U=0;U<$._length;U++){var V=(Array.isArray($.legend)?$.legend[U]:$.legend)||"legend";V===c&&((Array.isArray($.showlegend)?$.showlegend[U]:$.showlegend)||$._dfltShowLegend)&&(k=!0,w++)}if(c==="legend"&&$._length>$.legend.length)for(var j=$.legend.length;j<$._length;j++)k=!0,w++});for(var T=d.concat(b).filter(function($){return!E(x)&&c===($.legend||"legend")}),F=0;F<T.length;F++)if(x=T[F],!!x.visible){var D=x._isShape;(x.showlegend||x._dfltShowLegend&&!(x._module&&x._module.attributes&&x._module.attributes.showlegend&&x._module.attributes.showlegend.dflt===!1))&&(w++,x.showlegend&&(k=!0,(!D&&t.traceIs(x,"pie-like")||x._input.showlegend===!0)&&w++),i.coerceFont(S,"legendgrouptitle.font",C)),(!D&&t.traceIs(x,"bar")&&h.barmode==="stack"||["tonextx","tonexty"].indexOf(x.fill)!==-1)&&(A=n.isGrouped({traceorder:A})?"grouped+reversed":"reversed"),x.legendgroup!==void 0&&x.legendgroup!==""&&(A=n.isReversed({traceorder:A})?"reversed+grouped":"grouped")}var R=i.coerce(f,h,l,"showlegend",h.showlegend||k&&w>(c==="legend"?1:0));if(R===!1&&(h[c]=void 0),R===!1&&!g.uirevision||(y("uirevision",h.uirevision),R===!1))return;y("borderwidth");var P=y("orientation"),z=y("yref"),I=y("xref"),L=P==="h",B=z==="paper",O=I==="paper",G,W,X,Z="left";L?(G=0,t.getComponentMethod("rangeslider","isVisible")(f.xaxis)?B?(W=1.1,X="bottom"):(W=1,X="top"):B?(W=-.1,X="top"):(W=0,X="bottom")):(W=1,X="auto",O?G=1.02:(G=1,Z="right")),i.coerce(g,m,{x:{valType:"number",editType:"legend",min:O?-2:0,max:O?3:1,dflt:G}},"x"),i.coerce(g,m,{y:{valType:"number",editType:"legend",min:B?-2:0,max:B?3:1,dflt:W}},"y"),y("traceorder",A),n.isGrouped(h[c])&&y("tracegroupgap"),y("entrywidth"),y("entrywidthmode"),y("indentation"),y("itemsizing"),y("itemwidth"),y("itemclick"),y("itemdoubleclick");let J=y("groupclick");y("groupdoubleclick",J),y("xanchor",Z),y("yanchor",X),y("maxheight"),y("valign"),i.noneOrAll(g,m,["x","y"]);var N=y("title.text");if(N){y("title.side",L?"left":"top");var H=i.extendFlat({},_,{size:i.bigFont(_.size)});i.coerceFont(y,"title.font",H);let $=p>1;y("titleclick",$?"toggle":!1),y("titledoubleclick",$?"toggleothers":!1)}}r.exports=function(f,h,d){var p,g=d.slice(),m=h.shapes;if(m)for(p=0;p<m.length;p++){var y=m[p];if(y.showlegend){var _={_input:y._input,visible:y.visible,showlegend:y.showlegend,legend:y.legend};g.push(_)}}var v=["legend"];for(p=0;p<g.length;p++)Array.isArray(g[p].legend)?v=v.concat(g[p].legend):i.pushUnique(v,g[p].legend);for(h._legends=[],p=0;p<v.length;p++){var x=v[p];u(x,f,h,g,v.length),h[x]&&(h[x]._id=x),h._legends.push(x)}}}}),RE=de({"src/components/legend/handle_click.js"(e){"use strict";var r=Ma(),t=Qt(),i=t.pushUnique,a=Ey(),o=!0;e.handleItemClick=function(l,n,u,c,f){var h=n._fullLayout;if(n._dragged||n._editing)return;var d=l.data()[0][0];if(d.groupTitle&&d.noClick)return;let p=f===2?u.groupdoubleclick:u.groupclick;c==="toggle"&&u.itemdoubleclick==="toggleothers"&&o&&n.data&&n._context.showTips&&(t.notifier(t._(n,"Double-click on legend to isolate one trace"),"long",n),o=!1);var g=p==="togglegroup",m=h.hiddenlabels?h.hiddenlabels.slice():[],y=n._fullData;let _=(h.shapes||[]).filter(ye=>ye.showlegend||ye.legendgroup);var v=y.concat(_),x=d.trace;x._isShape&&(x=h.shapes[x.index]);var S=x.legendgroup,M,C,w,k,A,b,E={},T=[],F=[],D=[];function R(ye,fe){var ae=T.indexOf(ye),ee=E.visible;return ee||(ee=E.visible=[]),T.indexOf(ye)===-1&&(T.push(ye),ae=T.length-1),ee[ae]=fe,ae}var P=(h.shapes||[]).map(function(ye){return ye._input}),z=!1;function I(ye,fe){P[ye].visible=fe,z=!0}function L(ye,fe){if(!(d.groupTitle&&!g)){var ae=ye._isShape,ee=ye.index;ee===void 0&&(ee=ye._index);var ie=ye.visible===!1?!1:fe;ae?I(ee,ie):R(ee,ie)}}var B=x.legend;if(!x._isShape&&r.traceIs(x,"pie-like")){var O=d.label,G=m.indexOf(O);if(c==="toggle")G===-1?m.push(O):m.splice(G,1);else if(c==="toggleothers"){var W=G!==-1,X=[];for(M=0;M<n.calcdata.length;M++){var Z=n.calcdata[M];for(C=0;C<Z.length;C++){var J=Z[C],N=J.label;B===Z[0].trace.legend&&O!==N&&(m.indexOf(N)===-1&&(W=!0),i(m,N),X.push(N))}}if(!W)for(var H=0;H<X.length;H++){var $=m.indexOf(X[H]);$!==-1&&m.splice($,1)}}r.call("_guiRelayout",n,"hiddenlabels",m)}else{var U=S&&S.length,V=[],j;if(U)for(M=0;M<v.length;M++)j=v[M],j.visible&&j.legendgroup===S&&V.push(M);if(c==="toggle"){var q;switch(x.visible){case!0:q="legendonly";break;case!1:q=!1;break;case"legendonly":q=!0;break}if(U)if(g)for(M=0;M<v.length;M++){var Y=v[M];Y.visible!==!1&&Y.legendgroup===S&&L(Y,q)}else L(x,q);else L(x,q)}else if(c==="toggleothers"){var K,te,ne,se,le,ce=!0;let ye=U&&g;for(M=0;M<v.length;M++)if(le=v[M],K=le===x,ne=le.showlegend!==!0,!(K||ne)&&(te=ye&&le.legendgroup===S,!te&&le.legend===B&&le.visible===!0&&!r.traceIs(le,"notLegendIsolatable"))){ce=!1;break}for(M=0;M<v.length;M++)if(le=v[M],!(le.visible===!1||le.legend!==B)&&!r.traceIs(le,"notLegendIsolatable"))switch(x.visible){case"legendonly":L(le,!0);break;case!0:se=ce?!0:"legendonly",K=le===x,ne=le.showlegend!==!0&&!le.legendgroup,te=K||ye&&le.legendgroup===S,L(le,te||ne?!0:se);break}}for(M=0;M<F.length;M++)if(w=F[M],!!w){var pe=w.constructUpdate(),xe=Object.keys(pe);for(C=0;C<xe.length;C++)k=xe[C],b=E[k]=E[k]||[],b[D[M]]=pe[k]}for(A=Object.keys(E),M=0;M<A.length;M++)for(k=A[M],C=0;C<T.length;C++)E[k].hasOwnProperty(C)||(E[k][C]=void 0);z?r.call("_guiUpdate",n,E,{shapes:P},T):r.call("_guiRestyle",n,E,T)}},e.handleTitleClick=function(l,n,u){let c=l._fullLayout,f=l._fullData,h=a.getId(n),d=(c.shapes||[]).filter(C=>C.showlegend||C.legendgroup),p=f.concat(d);function g(C){return(C.legend||"legend")===h}var m,y;if(u==="toggle")m=!p.some(function(w){return g(w)&&w.visible===!0}),y=!1;else{let C=p.some(function(w){return!g(w)&&w.visible===!0&&w.showlegend!==!1});m=!0,y=!C}let _={visible:[]},v=[],x=(c.shapes||[]).map(function(C){return C._input});for(var S=!1,M=0;M<p.length;M++){let C=p[M],w=g(C);if(!w){let b=C.showlegend!==!0&&!C.legendgroup;if(u==="toggle"||b)continue}let A=(w?m:y)?!0:"legendonly";C.visible!==!1&&C.visible!==A&&(C._isShape?(x[C._index].visible=A,S=!0):(v.push(C.index),_.visible.push(A)))}S?r.call("_guiUpdate",l,_,{shapes:x},v):v.length&&r.call("_guiRestyle",l,_,v)}}}),zE=de({"src/components/legend/constants.js"(e,r){"use strict";r.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:"#808BA4",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}}}),xq=de({"src/components/legend/get_legend_data.js"(e,r){"use strict";var{isArrayOrTypedArray:t}=Do(),i=Ma(),a=Ey();r.exports=function(s,l,n){var u=l._inHover,c=a.isGrouped(l),f=a.isReversed(l),h={},d=[],p=!1,g={},m=0,y=0,_,v;function x(X,Z,J){if(l.visible!==!1&&!(n&&X!==l._id))if(Z===""||!a.isGrouped(l)){var N="~~i"+m;d.push(N),h[N]=[J],m++}else d.indexOf(Z)===-1?(d.push(Z),p=!0,h[Z]=[J]):h[Z].push(J)}for(_=0;_<s.length;_++){var S=s[_],M=S[0],C=M.trace,w=C.legend,k=C.legendgroup;if(!(!u&&(!C.visible||!C.showlegend)))if(i.traceIs(C,"pie-like")){var A=Array.isArray(C.legend),b=Array.isArray(C.showlegend);for(g[k]||(g[k]={}),v=0;v<S.length;v++)if(!(b&&C.showlegend[S[v].i]===!1)){A&&(w=C.legend[S[v].i]||"legend");var E=S[v].label;g[k][E]||(x(w,k,{label:E,color:S[v].color,i:S[v].i,trace:C,pts:S[v].pts}),g[k][E]=!0,y=Math.max(y,(E||"").length))}}else x(w,k,M),y=Math.max(y,(C.name||"").length)}if(!d.length)return[];var T=!p||!c,F=[];for(_=0;_<d.length;_++){var D=h[d[_]];T?F.push(D[0]):F.push(D)}for(T&&(F=[F]),_=0;_<F.length;_++){var R=1/0;for(v=0;v<F[_].length;v++){var P=F[_][v].trace.legendrank,z=t(P)?Math.min(P):P;R>z&&(R=z)}F[_][0]._groupMinRank=R,F[_][0]._preGroupSort=_}var I=function(X,Z){return X[0]._groupMinRank-Z[0]._groupMinRank||X[0]._preGroupSort-Z[0]._preGroupSort},L=function(X,Z){var J=t(X.trace.legendrank)?X.trace.legendrank[X.i]:X.trace.legendrank,N=t(Z.trace.legendrank)?Z.trace.legendrank[Z.i]:Z.trace.legendrank;return J-N||X._preSort-Z._preSort};for(F.forEach(function(X,Z){X[0]._preGroupSort=Z}),F.sort(I),_=0;_<F.length;_++){F[_].forEach(function(X,Z){X._preSort=Z}),F[_].sort(L);var B=F[_][0].trace,O=null;for(v=0;v<F[_].length;v++){var G=F[_][v].trace.legendgrouptitle;if(G&&G.text){O=G,u&&(G.font=l._groupTitleFont);break}}if(f&&F[_].reverse(),O){var W=!1;for(v=0;v<F[_].length;v++)if(i.traceIs(F[_][v].trace,"pie-like")){W=!0;break}F[_].unshift({i:-1,groupTitle:O,noClick:W,trace:{showlegend:B.showlegend,legendgroup:B.legendgroup,legend:B.legend,visible:l.groupclick==="toggleitem"?!0:B.visible}})}for(v=0;v<F[_].length;v++)F[_][v]=[F[_][v]]}return l._lgroupsLength=F.length,l._maxNameLength=y,F}}}),p0=de({"src/traces/pie/helpers.js"(e){"use strict";var r=Qt();function t(i){return i.indexOf("e")!==-1?i.replace(/[.]?0+e/,"e"):i.indexOf(".")!==-1?i.replace(/[.]?0+$/,""):i}e.formatPiePercent=function(a,o){var s=t((a*100).toPrecision(3));return r.numSeparate(s,o)+"%"},e.formatPieValue=function(a,o){var s=t(a.toPrecision(10));return r.numSeparate(s,o)},e.getFirstFilled=function(a,o){if(r.isArrayOrTypedArray(a))for(var s=0;s<o.length;s++){var l=a[o[s]];if(l||l===0||l==="")return l}},e.castOption=function(a,o){if(r.isArrayOrTypedArray(a))return e.getFirstFilled(a,o);if(a)return a},e.getRotationAngle=function(i){return(i==="auto"?0:i)*Math.PI/180}}}),bq=de({"src/traces/pie/fill_one.js"(e,r){"use strict";var t=hn(),i=ta();r.exports=function(o,s,l,n){var u=l.marker.pattern;u&&u.shape?t.pointStyle(o,l,n,s):i.fill(o,s.color)}}}),d1=de({"src/traces/pie/style_one.js"(e,r){"use strict";var t=ta(),i=p0().castOption,a=bq();r.exports=function(s,l,n,u){var c=n.marker.line,f=i(c.color,l.pts)||t.defaultLine,h=i(c.width,l.pts)||0;s.call(a,l,n,u).style("stroke-width",h).call(t.stroke,f)}}}),BE=de({"src/components/legend/style.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Qt(),o=a.strTranslate,s=hn(),l=ta(),n=Wu().extractOpts,u=bs(),c=d1(),f=p0().castOption,h=zE(),d=12,p=5,g=2,m=10,y=5;r.exports=function(M,C,w){var k=C._fullLayout;w||(w=k.legend);var A=w.itemsizing==="constant",b=w.itemwidth,E=(b+h.itemGap*2)/2,T=o(E,0),F=function(N,H,$,U){var V;if(N+1)V=N;else if(H&&H.width>0)V=H.width;else return 0;return A?U:Math.min(V,$)};M.each(function(N){var H=t.select(this),$=a.ensureSingle(H,"g","layers");$.style("opacity",N[0].trace.opacity);var U=w.indentation,V=w.valign,j=N[0].lineHeight,q=N[0].height;if(V==="middle"&&U===0||!j||!q)$.attr("transform",null);else{var Y={top:1,bottom:-1}[V],K=Y*(.5*(j-q+3))||0,te=w.indentation;$.attr("transform",o(te,K))}var ne=$.selectAll("g.legendfill").data([N]);ne.enter().append("g").classed("legendfill",!0);var se=$.selectAll("g.legendlines").data([N]);se.enter().append("g").classed("legendlines",!0);var le=$.selectAll("g.legendsymbols").data([N]);le.enter().append("g").classed("legendsymbols",!0),le.selectAll("g.legendpoints").data([N]).enter().append("g").classed("legendpoints",!0)}).each(J).each(P).each(I).each(z).each(B).each(X).each(W).each(D).each(R).each(O).each(G);function D(N){var H=v(N),$=H.showFill,U=H.showLine,V=H.showGradientLine,j=H.showGradientFill,q=H.anyFill,Y=H.anyLine,K=N[0],te=K.trace,ne,se,le=n(te),ce=le.colorscale,pe=le.reversescale,xe=function(ue){if(ue.size())if($)s.fillGroupStyle(ue,C,!0);else{var ge="legendfill-"+te.uid;s.gradient(ue,C,ge,_(pe),ce,"fill")}},ye=function(ue){if(ue.size()){var ge="legendline-"+te.uid;s.lineGroupStyle(ue),s.gradient(ue,C,ge,_(pe),ce,"stroke")}},fe=u.hasMarkers(te)||!q?"M5,0":Y?"M5,-2":"M5,-3",ae=t.select(this),ee=ae.select(".legendfill").selectAll("path").data($||j?[N]:[]);if(ee.enter().append("path").classed("js-fill",!0),ee.exit().remove(),ee.attr("d",fe+"h"+b+"v6h-"+b+"z").call(xe),U||V){var ie=F(void 0,te.line,m,p);se=a.minExtend(te,{line:{width:ie}}),ne=[a.minExtend(K,{trace:se})]}var Q=ae.select(".legendlines").selectAll("path").data(U||V?[ne]:[]);Q.enter().append("path").classed("js-line",!0),Q.exit().remove(),Q.attr("d",fe+(V?"l"+b+",0.0001":"h"+b)).call(U?s.lineGroupStyle:ye)}function R(N){var H=v(N),$=H.anyFill,U=H.anyLine,V=H.showLine,j=H.showMarker,q=N[0],Y=q.trace,K=!j&&!U&&!$&&u.hasText(Y),te,ne;function se(ie,Q,ue,ge){var Me=a.nestedProperty(Y,ie).get(),Te=a.isArrayOrTypedArray(Me)&&Q?Q(Me):Me;if(A&&Te&&ge!==void 0&&(Te=ge),ue){if(Te<ue[0])return ue[0];if(Te>ue[1])return ue[1]}return Te}function le(ie){return q._distinct&&q.index&&ie[q.index]?ie[q.index]:ie[0]}if(j||K||V){var ce={},pe={};if(j){ce.mc=se("marker.color",le);var xe=Y.type==="scattermap";ce.mx=xe?"circle":se("marker.symbol",le),ce.mo=se("marker.opacity",a.mean,[.2,1]),ce.mlc=se("marker.line.color",le),ce.mlw=se("marker.line.width",a.mean,[0,5],g),ce.mld=se("marker.line.dash",le),pe.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var ye=se("marker.size",a.mean,[2,16],d);ce.ms=ye,pe.marker.size=ye}V&&(pe.line={width:se("line.width",le,[0,10],p)}),K&&(ce.tx="Aa",ce.tp=se("textposition",le),ce.ts=10,ce.tc=se("textfont.color",le),ce.tf=se("textfont.family",le),ce.tw=se("textfont.weight",le),ce.ty=se("textfont.style",le),ce.tv=se("textfont.variant",le),ce.tC=se("textfont.textcase",le),ce.tE=se("textfont.lineposition",le),ce.tS=se("textfont.shadow",le)),te=[a.minExtend(q,ce)],ne=a.minExtend(Y,pe),ne.selectedpoints=null,ne.texttemplate=null}var fe=t.select(this).select("g.legendpoints"),ae=fe.selectAll("path.scatterpts").data(j?te:[]);ae.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform",T),ae.exit().remove(),ae.call(s.pointStyle,ne,C),j&&(te[0].mrc=3);var ee=fe.selectAll("g.pointtext").data(K?te:[]);ee.enter().append("g").classed("pointtext",!0).append("text").attr("transform",T),ee.exit().remove(),ee.selectAll("text").call(s.textPointStyle,ne,C)}function P(N){var H=N[0].trace,$=H.type==="waterfall";if(N[0]._distinct&&$){var U=N[0].trace[N[0].dir].marker;return N[0].mc=U.color,N[0].mlw=U.line.width,N[0].mlc=U.line.color,L(N,this,"waterfall")}var V=[];H.visible&&$&&(V=N[0].hasTotals?[["increasing","M-6,-6V6H0Z"],["totals","M6,6H0L-6,-6H-0Z"],["decreasing","M6,6V-6H0Z"]]:[["increasing","M-6,-6V6H6Z"],["decreasing","M6,6V-6H-6Z"]]);var j=t.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(V);j.enter().append("path").classed("legendwaterfall",!0).attr("transform",T).style("stroke-miterlimit",1),j.exit().remove(),j.each(function(q){var Y=t.select(this),K=H[q[0]].marker,te=F(void 0,K.line,y,g);Y.attr("d",q[1]).style("stroke-width",te+"px").call(l.fill,K.color),te&&Y.call(l.stroke,K.line.color)})}function z(N){L(N,this)}function I(N){L(N,this,"funnel")}function L(N,H,$){var U=N[0].trace,V=U.marker||{},j=V.line||{},q=V.cornerradius?"M6,3a3,3,0,0,1-3,3H-3a3,3,0,0,1-3-3V-3a3,3,0,0,1,3-3H3a3,3,0,0,1,3,3Z":"M6,6H-6V-6H6Z",Y=$?U.visible&&U.type===$:i.traceIs(U,"bar"),K=t.select(H).select("g.legendpoints").selectAll("path.legend"+$).data(Y?[N]:[]);K.enter().append("path").classed("legend"+$,!0).attr("d",q).attr("transform",T),K.exit().remove(),K.each(function(te){var ne=t.select(this),se=te[0],le=F(se.mlw,V.line,y,g);ne.style("stroke-width",le+"px");var ce=se.mcc;if(!w._inHover&&"mc"in se){var pe=n(V),xe=pe.mid;xe===void 0&&(xe=(pe.max+pe.min)/2),ce=s.tryColorscale(V,"")(xe)}var ye=ce||se.mc||V.color,fe=V.pattern,ae=s.getPatternAttr,ee=fe&&(ae(fe.shape,0,"")||ae(fe.path,0,""));if(ee){var ie=ae(fe.bgcolor,0,null),Q=ae(fe.fgcolor,0,null),ue=fe.fgopacity,ge=x(fe.size,8,10),Me=x(fe.solidity,.5,1),Te="legend-"+U.uid;ne.call(s.pattern,"legend",C,Te,ee,ge,Me,ce,fe.fillmode,ie,Q,ue)}else ne.call(l.fill,ye);le&&l.stroke(ne,se.mlc||j.color)})}function B(N){var H=N[0].trace,$=t.select(this).select("g.legendpoints").selectAll("path.legendbox").data(H.visible&&i.traceIs(H,"box-violin")?[N]:[]);$.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform",T),$.exit().remove(),$.each(function(){var U=t.select(this);if((H.boxpoints==="all"||H.points==="all")&&l.opacity(H.fillcolor)===0&&l.opacity((H.line||{}).color)===0){var V=a.minExtend(H,{marker:{size:A?d:a.constrain(H.marker.size,2,16),sizeref:1,sizemin:1,sizemode:"diameter"}});$.call(s.pointStyle,V,C)}else{var j=F(void 0,H.line,y,g);U.style("stroke-width",j+"px").call(l.fill,H.fillcolor),j&&l.stroke(U,H.line.color)}})}function O(N){var H=N[0].trace,$=t.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(H.visible&&H.type==="candlestick"?[N,N]:[]);$.enter().append("path").classed("legendcandle",!0).attr("d",function(U,V){return V?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"}).attr("transform",T).style("stroke-miterlimit",1),$.exit().remove(),$.each(function(U,V){var j=t.select(this),q=H[V?"increasing":"decreasing"],Y=F(void 0,q.line,y,g);j.style("stroke-width",Y+"px").call(l.fill,q.fillcolor),Y&&l.stroke(j,q.line.color)})}function G(N){var H=N[0].trace,$=t.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(H.visible&&H.type==="ohlc"?[N,N]:[]);$.enter().append("path").classed("legendohlc",!0).attr("d",function(U,V){return V?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"}).attr("transform",T).style("stroke-miterlimit",1),$.exit().remove(),$.each(function(U,V){var j=t.select(this),q=H[V?"increasing":"decreasing"],Y=F(void 0,q.line,y,g);j.style("fill","none").call(s.dashLine,q.line.dash,Y),Y&&l.stroke(j,q.line.color)})}function W(N){Z(N,this,"pie")}function X(N){Z(N,this,"funnelarea")}function Z(N,H,$){var U=N[0],V=U.trace,j=$?V.visible&&V.type===$:i.traceIs(V,$),q=t.select(H).select("g.legendpoints").selectAll("path.legend"+$).data(j?[N]:[]);if(q.enter().append("path").classed("legend"+$,!0).attr("d","M6,6H-6V-6H6Z").attr("transform",T),q.exit().remove(),q.size()){var Y=V.marker||{},K=F(f(Y.line.width,U.pts),Y.line,y,g),te="pieLike",ne=a.minExtend(V,{marker:{line:{width:K}}},te),se=a.minExtend(U,{trace:ne},te);c(q,se,ne,C)}}function J(N){var H=N[0].trace,$,U=[];if(H.visible)switch(H.type){case"histogram2d":case"heatmap":U=[["M-15,-2V4H15V-2Z"]],$=!0;break;case"choropleth":case"choroplethmap":U=[["M-6,-6V6H6V-6Z"]],$=!0;break;case"densitymap":U=[["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]],$="radial";break;case"cone":U=[["M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z"],["M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z"],["M-6,-2 A2,2 0 0,0 -6,2 L6,0Z"]],$=!1;break;case"streamtube":U=[["M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z"],["M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z"],["M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z"]],$=!1;break;case"surface":U=[["M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z"],["M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z"]],$=!0;break;case"mesh3d":U=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],$=!1;break;case"volume":U=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],$=!0;break;case"isosurface":U=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]],$=!1;break}var V=t.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(U);V.enter().append("path").classed("legend3dandfriends",!0).attr("transform",T).style("stroke-miterlimit",1),V.exit().remove(),V.each(function(j,q){var Y=t.select(this),K=n(H),te=K.colorscale,ne=K.reversescale,se=function(xe){if(xe.size()){var ye="legendfill-"+H.uid;s.gradient(xe,C,ye,_(ne,$==="radial"),te,"fill")}},le;if(te){if(!$){var pe=te.length;le=q===0?te[ne?pe-1:0][1]:q===1?te[ne?0:pe-1][1]:te[Math.floor((pe-1)/2)][1]}}else{var ce=H.vertexcolor||H.facecolor||H.color;le=a.isArrayOrTypedArray(ce)?ce[q]||ce[0]:ce}Y.attr("d",j[0]),le?Y.call(l.fill,le):Y.call(se)})}};function _(S,M){var C=M?"radial":"horizontal";return C+(S?"":"reversed")}function v(S){var M=S[0].trace,C=M.contours,w=u.hasLines(M)||M.visible&&M.type==="quiver",k=u.hasMarkers(M),A=M.visible&&M.fill&&M.fill!=="none",b=!1,E=!1;if(C){var T=C.coloring;T==="lines"?b=!0:w=T==="none"||T==="heatmap"||C.showlines,C.type==="constraint"?A=C._operation!=="=":(T==="fill"||T==="heatmap")&&(E=!0)}return{showMarker:k,showLine:w,showFill:A,showGradientLine:b,showGradientFill:E,anyLine:w||b,anyFill:A||E}}function x(S,M,C){return S&&a.isArrayOrTypedArray(S)?M:S>C?C:S}}}),OE=de({"src/components/legend/draw.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=Es(),o=Ma(),s=u1(),l=Uc(),n=hn(),u=ta(),c=Zo(),f=RE().handleItemClick,h=RE().handleTitleClick,d=zE(),p=Bl(),g=p.LINE_SPACING,m=p.FROM_TL,y=p.FROM_BR,_=xq(),v=BE(),x=Ey(),S=1,M=/^legend[0-9]*$/;r.exports=function(G,W){if(W)w(G,W);else{var X=G._fullLayout,Z=X._legends,J=X._infolayer.selectAll('[class^="legend"]');J.each(function(){var U=t.select(this),V=U.attr("class"),j=V.split(" ")[0];j.match(M)&&Z.indexOf(j)===-1&&U.remove()});for(var N=0;N<Z.length;N++){var H=Z[N],$=G._fullLayout[H];w(G,$)}}};function C(O,G,W){if(!(G.title.side!=="top center"&&G.title.side!=="top right")){var X=G.title.font,Z=X.size*g,J=0,N=O.node(),H=n.bBox(N).width;G.title.side==="top center"?J=.5*(G._width-2*W-2*d.titlePad-H):G.title.side==="top right"&&(J=G._width-2*W-2*d.titlePad-H),c.positionText(O,W+d.titlePad+J,W+Z)}}function w(O,G){var W=G||{},X=O._fullLayout,Z=x.getId(W),J,N,H=W._inHover;if(H?(N=W.layer,J="hover"):(N=X._infolayer,J=Z),!!N){J+=X._uid,O._legendMouseDownTime||(O._legendMouseDownTime=0);var $;if(H){if(!W.entries)return;$=_(W.entries,W)}else{for(var U=(O.calcdata||[]).slice(),V=X.shapes,j=0;j<V.length;j++){var q=V[j];if(q.showlegend){var Y={_isShape:!0,index:q._index,name:q.name||q.label.text||"shape "+q._index,legend:q.legend,legendgroup:q.legendgroup,legendgrouptitle:q.legendgrouptitle,legendrank:q.legendrank,legendwidth:q.legendwidth,showlegend:q.showlegend,visible:q.visible,opacity:q.opacity,mode:q.type==="line"?"lines":"markers",line:q.line,marker:{line:q.line,color:q.fillcolor,size:12,symbol:q.type==="rect"?"square":q.type==="circle"?"circle":"hexagon2"}};U.push([{trace:Y}])}}$=X.showlegend&&_(U,W,X._legends.length>1)}var K=X.hiddenlabels||[];if(!H&&(!X.showlegend||!$.length))return N.selectAll("."+Z).remove(),X._topdefs.select("#"+J).remove(),a.autoMargin(O,Z);var te=i.ensureSingle(N,"g",Z,function(ae){H||ae.attr("pointer-events","all")}),ne=i.ensureSingleById(X._topdefs,"clipPath",J,function(ae){ae.append("rect")}),se=i.ensureSingle(te,"rect","bg",function(ae){ae.attr("shape-rendering","crispEdges")});se.call(u.stroke,W.bordercolor).call(u.fill,W.bgcolor).style("stroke-width",W.borderwidth+"px");var le=i.ensureSingle(te,"g","scrollbox"),ce=W.title;W._titleWidth=0,W._titleHeight=0;var pe;ce.text?(pe=i.ensureSingle(le,"text",Z+"titletext"),pe.attr("text-anchor","start").call(n.font,ce.font).text(ce.text),D(pe,le,O,W,S),!H&&(W.titleclick||W.titledoubleclick)&&F(le,O,W,Z)):(le.selectAll("."+Z+"titletext").remove(),le.selectAll("."+Z+"titletoggle").remove());var xe=i.ensureSingle(te,"rect","scrollbar",function(ae){ae.attr(d.scrollBarEnterAttrs).call(u.fill,d.scrollBarColor)}),ye=le.selectAll("g.groups").data($);ye.enter().append("g").attr("class","groups"),ye.exit().remove();var fe=ye.selectAll("g.traces").data(i.identity);fe.enter().append("g").attr("class","traces"),fe.exit().remove(),fe.style("opacity",function(ae){let ee=ae[0],ie=ee.trace;if(ee.groupTitle){let Q=ie.legendgroup,ue=(X.shapes||[]).filter(function(Me){return Me.showlegend});return O._fullData.concat(ue).some(function(Me){return Me.legendgroup===Q&&(Me.legend||"legend")===Z&&Me.visible===!0})?1:.5}return o.traceIs(ie,"pie-like")?K.indexOf(ae[0].label)!==-1?.5:1:ie.visible==="legendonly"?.5:1}).each(function(){t.select(this).call(b,O,W)}).call(v,O,W).each(function(ae){H||ae[0].groupTitle&&W.groupclick==="toggleitem"||t.select(this).call(T,O,Z)}),i.syncOrAsync([a.previousPromises,function(){return z(O,ye,fe,W,le)},function(){var ae=X._size,ee=W.borderwidth,ie=W.xref==="paper",Q=W.yref==="paper";if(ce.text){let Ue=(X.shapes||[]).filter(function(rt){return rt.showlegend}),at=O._fullData.concat(Ue).some(function(rt){let ft=rt.legend||"legend";var At=Array.isArray(ft)?ft.includes(Z):ft===Z;return At&&rt.visible===!0});pe.style("opacity",at?1:.5)}if(!H){var ue,ge;ie?ue=ae.l+ae.w*W.x-m[L(W)]*W._width:ue=X.width*W.x-m[L(W)]*W._width,Q?ge=ae.t+ae.h*(1-W.y)-m[B(W)]*W._effHeight:ge=X.height*(1-W.y)-m[B(W)]*W._effHeight;var Me=I(O,Z,ue,ge);if(Me)return;if(X.margin.autoexpand){var Te=ue,je=ge;ue=ie?i.constrain(ue,0,X.width-W._width):Te,ge=Q?i.constrain(ge,0,X.height-W._effHeight):je,ue!==Te&&i.log("Constrain "+Z+".x to make legend fit inside graph"),ge!==je&&i.log("Constrain "+Z+".y to make legend fit inside graph")}n.setTranslate(te,ue,ge)}if(xe.on(".drag",null),te.on("wheel",null),H||W._height<=W._maxHeight||O._context.staticPlot){var Ve=W._effHeight;H&&(Ve=W._height),se.attr({width:W._width-ee,height:Ve-ee,x:ee/2,y:ee/2}),n.setTranslate(le,0,0),ne.select("rect").attr({width:W._width-2*ee,height:Ve-2*ee,x:ee,y:ee}),n.setClipUrl(le,J,O),n.setRect(xe,0,0,0,0),delete W._scrollY}else{var Ze=Math.max(d.scrollBarMinHeight,W._effHeight*W._effHeight/W._height),Ke=W._effHeight-Ze-2*d.scrollBarMargin,vt=W._height-W._effHeight,xt=Ke/vt,Pt=Math.min(W._scrollY||0,vt);se.attr({width:W._width-2*ee+d.scrollBarWidth+d.scrollBarMargin,height:W._effHeight-ee,x:ee/2,y:ee/2}),ne.select("rect").attr({width:W._width-2*ee+d.scrollBarWidth+d.scrollBarMargin,height:W._effHeight-2*ee,x:ee,y:ee+Pt}),n.setClipUrl(le,J,O),Ae(Pt,Ze,xt),te.on("wheel",function(){Pt=i.constrain(W._scrollY+t.event.deltaY/vt*Ke,0,vt),Ae(Pt,Ze,xt),Pt!==0&&Pt!==vt&&t.event.preventDefault()});var mt,Mt,lt,qe=function(Ue,at,rt){var ft=(rt-at)/xt+Ue;return i.constrain(ft,0,vt)},Ye=function(Ue,at,rt){var ft=(at-rt)/xt+Ue;return i.constrain(ft,0,vt)},me=t.behavior.drag().on("dragstart",function(){var Ue=t.event.sourceEvent;Ue.type==="touchstart"?mt=Ue.changedTouches[0].clientY:mt=Ue.clientY,lt=Pt}).on("drag",function(){var Ue=t.event.sourceEvent;Ue.buttons===2||Ue.ctrlKey||(Ue.type==="touchmove"?Mt=Ue.changedTouches[0].clientY:Mt=Ue.clientY,Pt=qe(lt,mt,Mt),Ae(Pt,Ze,xt))});xe.call(me);var _e=t.behavior.drag().on("dragstart",function(){var Ue=t.event.sourceEvent;Ue.type==="touchstart"&&(mt=Ue.changedTouches[0].clientY,lt=Pt)}).on("drag",function(){var Ue=t.event.sourceEvent;Ue.type==="touchmove"&&(Mt=Ue.changedTouches[0].clientY,Pt=Ye(lt,mt,Mt),Ae(Pt,Ze,xt))});le.call(_e)}function Ae(Ue,at,rt){W._scrollY=O._fullLayout[Z]._scrollY=Ue,n.setTranslate(le,0,-Ue),n.setRect(xe,W._width,d.scrollBarMargin+Ue*rt,d.scrollBarWidth,at),ne.select("rect").attr("y",ee+Ue)}if(O._context.edits.legendPosition){var ke,Ee,De,Je;te.classed("cursor-move",!0),l.init({element:te.node(),gd:O,prepFn:function(Ue){if(Ue.target!==xe.node()){var at=n.getTranslate(te);De=at.x,Je=at.y}},moveFn:function(Ue,at){if(De!==void 0&&Je!==void 0){var rt=De+Ue,ft=Je+at;n.setTranslate(te,rt,ft),ke=l.align(rt,W._width,ae.l,ae.l+ae.w,W.xanchor),Ee=l.align(ft+W._height,-W._height,ae.t+ae.h,ae.t,W.yanchor)}},doneFn:function(){if(ke!==void 0&&Ee!==void 0){var Ue={};Ue[Z+".x"]=ke,Ue[Z+".y"]=Ee,o.call("_guiRelayout",O,Ue)}},clickFn:function(Ue,at){var rt=N.selectAll("g.traces").filter(function(){var ft=this.getBoundingClientRect();return at.clientX>=ft.left&&at.clientX<=ft.right&&at.clientY>=ft.top&&at.clientY<=ft.bottom});rt.size()>0&&A(O,W,rt,Ue,at)}})}}],O)}}function k(O,G,W){var X=O[0],Z=X.width,J=G.entrywidthmode,N=X.trace.legendwidth||G.entrywidth;return J==="fraction"?G._maxWidth*N:W+(N||Z)}function A(O,G,W,X,Z){var J=O._fullLayout,N=W.data()[0][0].trace,H=G.itemclick,$=G.itemdoubleclick,U={event:Z,node:W.node(),curveNumber:N.index,expandedIndex:N.index,data:O.data,layout:O.layout,frames:O._transitionData._frames,config:O._context,fullData:O._fullData,fullLayout:J};N._group&&(U.group=N._group),o.traceIs(N,"pie-like")&&(U.label=W.datum()[0].label);var V=s.triggerHandler(O,"plotly_legendclick",U);if(X===1){if(V===!1)return;G._clickTimeout=setTimeout(function(){O._fullLayout&&H&&f(W,O,G,H,X)},O._context.doubleClickDelay)}else if(X===2){G._clickTimeout&&clearTimeout(G._clickTimeout),O._legendMouseDownTime=0;var j=s.triggerHandler(O,"plotly_legenddoubleclick",U);j!==!1&&V!==!1&&$&&f(W,O,G,$,X)}}function b(O,G,W){var X=x.getId(W),Z=O.data()[0][0],J=Z.trace,N=o.traceIs(J,"pie-like"),H=!W._inHover&&G._context.edits.legendText&&!N,$=W._maxNameLength,U,V;Z.groupTitle?(U=Z.groupTitle.text,V=Z.groupTitle.font):(V=W.font,W.entries?U=Z.text:(U=N?Z.label:J.name,J._meta&&(U=i.templateString(U,J._meta))));var j=i.ensureSingle(O,"text",X+"text");j.attr("text-anchor","start").call(n.font,V).text(H?E(U,$):U);var q=W.indentation+W.itemwidth+d.itemGap*2;c.positionText(j,q,0),H?j.call(c.makeEditable,{gd:G,text:U}).call(D,O,G,W).on("edit",function(Y){this.text(E(Y,$)).call(D,O,G,W);var K={};return K.name=Y,Z.trace._isShape?o.call("_guiRelayout",G,"shapes["+J.index+"].name",K.name):o.call("_guiRestyle",G,K,J.index)}):D(j,O,G,W)}function E(O,G){var W=Math.max(4,G);if(O&&O.trim().length>=W/2)return O;O=O||"";for(var X=W-O.length;X>0;X--)O+=" ";return O}function T(O,G,W){var X=G._context.doubleClickDelay,Z,J=1,N=i.ensureSingle(O,"rect",W+"toggle",function(H){G._context.staticPlot||H.style("cursor","pointer").attr("pointer-events","all"),H.call(u.fill,"rgba(0,0,0,0)")});G._context.staticPlot||(N.on("mousedown",function(){Z=new Date().getTime(),Z-G._legendMouseDownTime<X?J+=1:(J=1,G._legendMouseDownTime=Z)}),N.on("mouseup",function(){if(!(G._dragged||G._editing)){var H=G._fullLayout[W];new Date().getTime()-G._legendMouseDownTime>X&&(J=Math.max(J-1,1)),A(G,H,O,J,t.event)}}))}function F(O,G,W,X){if(G._fullData.some(function(U){let V=U.legend||"legend";return(Array.isArray(V)?V.includes(X):V===X)&&o.traceIs(U,"pie-like")}))return;let J=G._context.doubleClickDelay;var N,H=1;let $=i.ensureSingle(O,"rect",X+"titletoggle",function(U){G._context.staticPlot||U.style("cursor","pointer").attr("pointer-events","all"),U.call(u.fill,"rgba(0,0,0,0)")});G._context.staticPlot||($.on("mousedown",function(){N=new Date().getTime(),N-G._legendMouseDownTime<J?H+=1:(H=1,G._legendMouseDownTime=N)}),$.on("mouseup",function(){if(G._dragged||G._editing)return;new Date().getTime()-G._legendMouseDownTime>J&&(H=Math.max(H-1,1));let U={event:t.event,legendId:X,data:G.data,layout:G.layout,fullData:G._fullData,fullLayout:G._fullLayout};if(H===1&&W.titleclick){if(s.triggerHandler(G,"plotly_legendtitleclick",U)===!1)return;W._titleClickTimeout=setTimeout(function(){G._fullLayout&&h(G,W,W.titleclick)},J)}else H===2&&(W._titleClickTimeout&&clearTimeout(W._titleClickTimeout),G._legendMouseDownTime=0,s.triggerHandler(G,"plotly_legendtitledoubleclick",U)!==!1&&W.titledoubleclick&&h(G,W,W.titledoubleclick))}))}function D(O,G,W,X,Z){X._inHover&&O.attr("data-notex",!0),c.convertToTspans(O,W,function(){R(G,W,X,Z)})}function R(O,G,W,X){var Z=O.data()[0][0],J=Z&&Z.trace.showlegend;if(Array.isArray(J)&&(J=J[Z.i]!==!1),!W._inHover&&Z&&!J){O.remove();return}var N=O.select("g[class*=math-group]"),H=N.node(),$=x.getId(W);W||(W=G._fullLayout[$]);var U=W.borderwidth,V;X===S?V=W.title.font:Z.groupTitle?V=Z.groupTitle.font:V=W.font;var j=V.size*g,q,Y;if(H){var K=n.bBox(H);q=K.height,Y=K.width,X===S?n.setTranslate(N,U,U+q*.75):n.setTranslate(N,0,q*.25)}else{var te="."+$+(X===S?"title":"")+"text",ne=O.select(te),se=c.lineCount(ne),le=ne.node();if(q=j*se,Y=le?n.bBox(le).width:0,X===S)W.title.side==="left"&&(Y+=d.itemGap*2),c.positionText(ne,U+d.titlePad,U+j);else{var ce=d.itemGap*2+W.indentation+W.itemwidth;Z.groupTitle&&(ce=d.itemGap,Y-=W.indentation+W.itemwidth),c.positionText(ne,ce,-j*((se-1)/2-.3))}}X===S?(W._titleWidth=Y,W._titleHeight=q):(Z.lineHeight=j,Z.height=Math.max(q,16)+3,Z.width=Y)}function P(O){var G=0,W=0,X=O.title.side;return X&&(X.indexOf("left")!==-1&&(G=O._titleWidth),X.indexOf("top")!==-1&&(W=O._titleHeight)),[G,W]}function z(O,G,W,X,Z){var J=O._fullLayout,N=x.getId(X);X||(X=J[N]);var H=J._size,$=x.isVertical(X),U=x.isGrouped(X),V=X.entrywidthmode==="fraction",j=X.borderwidth,q=2*j,Y=d.itemGap,K=X.indentation+X.itemwidth+Y*2,te=2*(j+Y),ne=B(X),se=X.y<0||X.y===0&&ne==="top",le=X.y>1||X.y===1&&ne==="bottom",ce=X.tracegroupgap,pe={};let{orientation:xe,yref:ye}=X,{maxheight:fe}=X,ae=se||le||xe!=="v"||ye!=="paper";fe||(fe=ae?.5:1);let ee=ae?J.height:H.h;X._maxHeight=Math.max(fe>1?fe:fe*ee,30);var ie=0;X._width=0,X._height=0;var Q=P(X);if($)W.each(function(Ue){var at=Ue[0].height;n.setTranslate(this,j+Q[0],j+Q[1]+X._height+at/2+Y),X._height+=at,X._width=Math.max(X._width,Ue[0].width)}),ie=K+X._width,X._width+=Y+K+q,X._height+=te,U&&(G.each(function(Ue,at){n.setTranslate(this,0,at*X.tracegroupgap)}),X._height+=(X._lgroupsLength-1)*X.tracegroupgap);else{var ue=L(X),ge=X.x<0||X.x===0&&ue==="right",Me=X.x>1||X.x===1&&ue==="left",Te=le||se,je=J.width/2;X._maxWidth=Math.max(ge?Te&&ue==="left"?H.l+H.w:je:Me?Te&&ue==="right"?H.r+H.w:je:H.w,2*K);var Ve=0,Ze=0;W.each(function(Ue){var at=k(Ue,X,K);Ve=Math.max(Ve,at),Ze+=at}),ie=null;var Ke=0;if(U){var vt=0,xt=0,Pt=0;G.each(function(){var Ue=0,at=0;t.select(this).selectAll("g.traces").each(function(ft){var At=k(ft,X,K),ht=ft[0].height;n.setTranslate(this,Q[0],Q[1]+j+Y+ht/2+at),at+=ht,Ue=Math.max(Ue,At),pe[ft[0].trace.legendgroup]=Ue});var rt=Ue+Y;xt>0&&rt+j+xt>X._maxWidth?(Ke=Math.max(Ke,xt),xt=0,Pt+=vt+ce,vt=at):vt=Math.max(vt,at),n.setTranslate(this,xt,Pt),xt+=rt}),X._width=Math.max(Ke,xt)+j,X._height=Pt+vt+te}else{var mt=W.size(),Mt=Ze+q+(mt-1)*Y<X._maxWidth,lt=0,qe=0,Ye=0,me=0;W.each(function(Ue){var at=Ue[0].height,rt=k(Ue,X,K,U),ft=Mt?rt:Ve;V||(ft+=Y),ft+j+qe-Y>=X._maxWidth&&(Ke=Math.max(Ke,me),qe=0,Ye+=lt,X._height+=lt,lt=0),n.setTranslate(this,Q[0]+j+qe,Q[1]+j+Ye+at/2+Y),me=qe+rt+Y,qe+=ft,lt=Math.max(lt,at)}),Mt?(X._width=qe+q,X._height=lt+te):(X._width=Math.max(Ke,me)+q,X._height+=lt+te)}}X._width=Math.ceil(Math.max(X._width+Q[0],X._titleWidth+2*(j+d.titlePad))),X._height=Math.ceil(Math.max(X._height+Q[1],X._titleHeight+2*(j+d.itemGap))),X._effHeight=Math.min(X._height,X._maxHeight);var _e=O._context.edits,Ae=_e.legendText||_e.legendPosition;W.each(function(Ue){var at=t.select(this).select("."+N+"toggle"),rt=Ue[0].height,ft=Ue[0].trace.legendgroup,At=k(Ue,X,K);U&&ft!==""&&(At=pe[ft]);var ht=Ae?K:ie||At;!$&&!V&&(ht+=Y/2),n.setRect(at,0,-rt/2,ht,rt)});var ke=Z.select("."+N+"titletext");ke.node()&&C(ke,X,j);var Ee=Z.select("."+N+"titletoggle");if(Ee.size()&&ke.node()){var De=ke.attr("x")||0,Je=d.titlePad;n.setRect(Ee,De-Je,j,X._titleWidth+2*Je,X._titleHeight+2*Je)}}function I(O,G,W,X){var Z=O._fullLayout,J=Z[G],N=L(J),H=B(J),$=J.xref==="paper",U=J.yref==="paper";O._fullLayout._reservedMargin[G]={};var V=J.y<.5?"b":"t",j=J.x<.5?"l":"r",q={r:Z.width-W,l:W+J._width,b:Z.height-X,t:X+J._effHeight};if($&&U)return a.autoMargin(O,G,{x:J.x,y:J.y,l:J._width*m[N],r:J._width*y[N],b:J._effHeight*y[H],t:J._effHeight*m[H]});$?O._fullLayout._reservedMargin[G][V]=q[V]:U||J.orientation==="v"?O._fullLayout._reservedMargin[G][j]=q[j]:O._fullLayout._reservedMargin[G][V]=q[V]}function L(O){return i.isRightAnchor(O)?"right":i.isCenterAnchor(O)?"center":"left"}function B(O){return i.isBottomAnchor(O)?"bottom":i.isMiddleAnchor(O)?"middle":"top"}}}),NE=de({"src/components/fx/hover.js"(e){"use strict";var r=Yr(),t=da(),i=Qt(),a=i.pushUnique,o=i.strTranslate,s=i.strRotate,l=u1(),n=Zo(),u=_q(),c=hn(),f=ta(),h=Uc(),d=nn(),p=zl().zindexSeparator,g=Ma(),m=sf(),y=Ta(),_=IE(),v=OE(),x=y.YANGLE,S=Math.PI*x/180,M=1/Math.sin(S),C=Math.cos(S),w=Math.sin(S),k=y.HOVERARROWSIZE,A=y.HOVERTEXTPAD,b={box:!0,ohlc:!0,violin:!0,candlestick:!0},E={scatter:!0,scattergl:!0,splom:!0};function T(j,q){return j.distance-q.distance}e.hover=function(q,Y,K,te){q=i.getGraphDiv(q);var ne=Y.target;i.throttle(q._fullLayout._uid+y.HOVERID,y.HOVERMINTIME,function(){F(q,Y,K,te,ne)})},e.loneHover=function(q,Y){var K=!0;Array.isArray(q)||(K=!1,q=[q]);var te=Y.gd,ne=$(te),se=U(te),le=q.map(function(Q){var ue=Q._x0||Q.x0||Q.x||0,ge=Q._x1||Q.x1||Q.x||0,Me=Q._y0||Q.y0||Q.y||0,Te=Q._y1||Q.y1||Q.y||0,je=Q.eventData;if(je){var Ve=Math.min(ue,ge),Ze=Math.max(ue,ge),Ke=Math.min(Me,Te),vt=Math.max(Me,Te),xt=Q.trace;if(g.traceIs(xt,"gl3d")){var Pt=te._fullLayout[xt.scene]._scene.container,mt=Pt.offsetLeft,Mt=Pt.offsetTop;Ve+=mt,Ze+=mt,Ke+=Mt,vt+=Mt}je.bbox={x0:Ve+se,x1:Ze+se,y0:Ke+ne,y1:vt+ne},je.xPixel=(ue+ge)/2,je.yPixel=(Me+Te)/2,Y.inOut_bbox&&Y.inOut_bbox.push(je.bbox)}else je=!1;return{color:Q.color||f.defaultLine,x0:Q.x0||Q.x||0,x1:Q.x1||Q.x||0,y0:Q.y0||Q.y||0,y1:Q.y1||Q.y||0,xLabel:Q.xLabel,yLabel:Q.yLabel,zLabel:Q.zLabel,text:Q.text,name:Q.name,idealAlign:Q.idealAlign,borderColor:Q.borderColor,fontFamily:Q.fontFamily,fontSize:Q.fontSize,fontColor:Q.fontColor,fontWeight:Q.fontWeight,fontStyle:Q.fontStyle,fontVariant:Q.fontVariant,nameLength:Q.nameLength,textAlign:Q.textAlign,trace:Q.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:Q.hovertemplate||!1,hovertemplateLabels:Q.hovertemplateLabels||!1,eventData:je}}),ce=!1,pe=P(le,{gd:te,hovermode:"closest",rotateLabels:ce,bgColor:Y.bgColor||f.background,container:r.select(Y.container),outerContainer:Y.outerContainer||Y.container}),xe=pe.hoverLabels,ye=5,fe=0,ae=0;xe.sort(function(Q,ue){return Q.y0-ue.y0}).each(function(Q,ue){var ge=Q.y0-Q.by/2;ge-ye<fe?Q.offset=fe-ge+ye:Q.offset=0,fe=ge+Q.by+Q.offset,ue===Y.anchorIndex&&(ae=Q.offset)}).each(function(Q){Q.offset-=ae});var ee=te._fullLayout._invScaleX,ie=te._fullLayout._invScaleY;return O(xe,ce,ee,ie),K?xe:xe.node()};function F(j,q,Y,K,te){Y||(Y="xy"),typeof Y=="string"&&(Y=Y.split(p)[0]);var ne=Array.isArray(Y)?Y:[Y],se,le=j._fullLayout,ce=le.hoversubplots,pe=le._plots||[],xe=pe[Y],ye=le._has("cartesian"),fe=q.hovermode||le.hovermode,ae=(fe||"").charAt(0)==="x",ee=(fe||"").charAt(0)==="y",ie,Q;if(ye&&(ae||ee)&&ce==="axis"){for(var ue=ne.length,ge=0;ge<ue;ge++)if(se=ne[ge],pe[se]){ie=d.getFromId(j,se,"x"),Q=d.getFromId(j,se,"y");var Me=(ae?ie:Q)._subplotsWith;if(Me&&Me.length)for(var Te=0;Te<Me.length;Te++)a(ne,Me[Te])}}if(xe&&ce!=="single"){var je=xe.overlays.map(function(Li){return Li.id});ne=ne.concat(je)}for(var Ve=ne.length,Ze=new Array(Ve),Ke=new Array(Ve),vt=!1,xt=0;xt<Ve;xt++)if(se=ne[xt],pe[se])vt=!0,Ze[xt]=pe[se].xaxis,Ke[xt]=pe[se].yaxis;else if(le[se]&&le[se]._subplot){var Pt=le[se]._subplot;Ze[xt]=Pt.xaxis,Ke[xt]=Pt.yaxis}else{i.warn("Unrecognized subplot: "+se);return}if(fe&&!vt&&(fe="closest"),["x","y","closest","x unified","y unified"].indexOf(fe)===-1||!j.calcdata||j.querySelector(".zoombox")||j._dragging)return h.unhoverRaw(j,q);var mt=le.hoverdistance;mt===-1&&(mt=1/0);var Mt=le.spikedistance;Mt===-1&&(Mt=1/0);var lt=[],qe=[],Ye,me,_e,Ae,ke,Ee,De,Je,Ue,at,rt,ft,At,ht={hLinePoint:null,vLinePoint:null},Gt=!1;if(Array.isArray(q))for(fe="array",_e=0;_e<q.length;_e++)ke=j.calcdata[q[_e].curveNumber||0],ke&&(Ee=ke[0].trace,ke[0].trace.hoverinfo!=="skip"&&(qe.push(ke),Ee.orientation==="h"&&(Gt=!0)));else{var fr=j.calcdata.slice();for(fr.sort(function(Li,In){var pn=Li[0].trace.zorder||0,Ka=In[0].trace.zorder||0;return pn-Ka}),Ae=0;Ae<fr.length;Ae++)ke=fr[Ae],Ee=ke[0].trace,Ee.hoverinfo!=="skip"&&m.isTraceInSubplots(Ee,ne)&&(qe.push(ke),Ee.orientation==="h"&&(Gt=!0));var gt=!te,yt,kt;if(gt)"xpx"in q?yt=q.xpx:yt=Ze[0]._length/2,"ypx"in q?kt=q.ypx:kt=Ke[0]._length/2;else{if(l.triggerHandler(j,"plotly_beforehover",q)===!1)return;var Lt=te.getBoundingClientRect();yt=q.clientX-Lt.left,kt=q.clientY-Lt.top,le._calcInverseTransform(j);var Ct=i.apply3DTransform(le._invTransform)(yt,kt);if(yt=Ct[0],kt=Ct[1],yt<0||yt>Ze[0]._length||kt<0||kt>Ke[0]._length)return h.unhoverRaw(j,q)}if(q.pointerX=yt+Ze[0]._offset,q.pointerY=kt+Ke[0]._offset,"xval"in q?Ye=m.flat(ne,q.xval):Ye=m.p2c(Ze,yt),"yval"in q?me=m.flat(ne,q.yval):me=m.p2c(Ke,kt),j._hoverPointerX=q.pointerX,j._hoverPointerY=q.pointerY,!t(Ye[0])||!t(me[0]))return i.warn("Fx.hover failed",q,j),h.unhoverRaw(j,q)}le.clickanywhere&&(j._hoverXVals=Ye,j._hoverYVals=me,j._hoverXAxes=Ze,j._hoverYAxes=Ke);var $t=1/0;function mr(Li,In){for(Ae=0;Ae<qe.length;Ae++)if(ke=qe[Ae],!(!ke||!ke[0]||!ke[0].trace)&&(Ee=ke[0].trace,!(Ee.visible!==!0||Ee._length===0)&&["carpet","contourcarpet"].indexOf(Ee._module.name)===-1)){if(Ue=fe,m.isUnifiedHover(Ue)&&(Ue=Ue.charAt(0)),Ee.type==="splom"?(Je=0,De=ne[Je]):(De=m.getSubplot(Ee),Je=ne.indexOf(De)),ft={cd:ke,trace:Ee,xa:Ze[Je],ya:Ke[Je],maxHoverDistance:mt,maxSpikeDistance:Mt,index:!1,distance:Math.min($t,mt),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:f.defaultLine,name:Ee.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},le[De]&&(ft.subplot=le[De]._subplot),le._splomScenes&&le._splomScenes[Ee.uid]&&(ft.scene=le._splomScenes[Ee.uid]),Ue==="array"){var pn=q[Ae];if("pointNumber"in pn){let on=ke[pn.pointNumber];on&&(ft.index=pn.pointNumber,on.lonlat?(at=on.lonlat[0],rt=on.lonlat[1]):(at=on.x,rt=on.y)),Ue="closest"}else Ue="","xval"in pn&&(at=pn.xval,Ue="x"),"yval"in pn&&(rt=pn.yval,Ue=Ue?"closest":"y")}else Li!==void 0&&In!==void 0?(at=Li,rt=In):(at=Ye[Je],rt=me[Je]);if(At=lt.length,mt!==0)if(Ee._module&&Ee._module.hoverPoints){var Ka=Ee._module.hoverPoints(ft,at,rt,Ue,{finiteRange:!0,hoverLayer:le._hoverlayer,hoversubplots:ce,gd:j});if(Ka)for(var Rn,tn=0;tn<Ka.length;tn++)Rn=Ka[tn],t(Rn.x0)&&t(Rn.y0)&<.push(G(Rn,fe))}else i.log("Unrecognized trace type in hover:",Ee);if(fe==="closest"&<.length>At&&(lt.splice(0,At),$t=lt[0].distance),ye&&Mt!==0&<.length===0){ft.distance=Mt,ft.index=!1;var Mn=Ee._module.hoverPoints(ft,at,rt,"closest",{hoverLayer:le._hoverlayer});if(Mn&&(Mn=Mn.filter(function(on){return on.spikeDistance<=Mt})),Mn&&Mn.length){var Kn,zn=Mn.filter(function(on){return on.xa.showspikes&&on.xa.spikesnap!=="hovered data"});if(zn.length){var ua=zn[0];t(ua.x0)&&t(ua.y0)&&(Kn=Er(ua),(!ht.vLinePoint||ht.vLinePoint.spikeDistance>Kn.spikeDistance)&&(ht.vLinePoint=Kn))}var Ea=Mn.filter(function(on){return on.ya.showspikes&&on.ya.spikesnap!=="hovered data"});if(Ea.length){var ln=Ea[0];t(ln.x0)&&t(ln.y0)&&(Kn=Er(ln),(!ht.hLinePoint||ht.hLinePoint.spikeDistance>Kn.spikeDistance)&&(ht.hLinePoint=Kn))}}}}}mr();function br(Li,In,pn){for(var Ka=null,Rn=1/0,tn,Mn=0;Mn<Li.length;Mn++)ie&&ie._id!==Li[Mn].xa._id||Q&&Q._id!==Li[Mn].ya._id||(tn=Li[Mn].spikeDistance,pn&&Mn===0&&(tn=-1/0),tn<=Rn&&tn<=In&&(Ka=Li[Mn],Rn=tn));return Ka}function Er(Li){return Li?{xa:Li.xa,ya:Li.ya,x:Li.xSpike!==void 0?Li.xSpike:(Li.x0+Li.x1)/2,y:Li.ySpike!==void 0?Li.ySpike:(Li.y0+Li.y1)/2,distance:Li.distance,spikeDistance:Li.spikeDistance,curveNumber:Li.trace.index,color:Li.color,pointNumber:Li.index}:null}var Tr={fullLayout:le,container:le._hoverlayer,event:q},Ur=j._spikepoints,Ai={vLinePoint:ht.vLinePoint,hLinePoint:ht.hLinePoint};j._spikepoints=Ai;var oi=function(){var Li=lt.filter(function(pn){return ie&&ie._id===pn.xa._id&&Q&&Q._id===pn.ya._id}),In=lt.filter(function(pn){return!(ie&&ie._id===pn.xa._id&&Q&&Q._id===pn.ya._id)});Li.sort(T),In.sort(T),lt=Li.concat(In),lt=N(lt,fe)};oi();var Qr=fe.charAt(0),ea=(Qr==="x"||Qr==="y")&<[0]&&E[lt[0].trace.type];if(ye&&Mt!==0&<.length!==0){var $i=lt.filter(function(Li){return Li.ya.showspikes}),ja=br($i,Mt,ea);ht.hLinePoint=Er(ja);var ya=lt.filter(function(Li){return Li.xa.showspikes}),pa=br(ya,Mt,ea);ht.vLinePoint=Er(pa)}if(lt.length===0){var xi=h.unhoverRaw(j,q);if(ye&&(ht.hLinePoint!==null||ht.vLinePoint!==null)&&Z(Ur)&&W(j,ht,Tr),le.hoveranywhere&&!K&&te){var bi=j._hoverdata;bi&&bi.length&&(j.emit("plotly_unhover",{event:q,points:bi}),j._hoverdata=[]),_n([]),j._hoverAnywhereActive=!0}return xi}if(ye&&Z(Ur)&&W(j,ht,Tr),m.isXYhover(Ue)&<[0].length!==0&<[0].trace.type!=="splom"){var Ua=lt[0];b[Ua.trace.type]?lt=lt.filter(Li=>Li.trace.index===Ua.trace.index):lt=[Ua];var dn=lt.length,pi=H("x",Ua,le),Jr=H("y",Ua,le);mr(pi,Jr);var Be=[],Fe={},Et=0,St=function(Li){var In=b[Li.trace.type]?D(Li):Li.trace.index;if(!Fe[In])Et++,Fe[In]=Et,Be.push(Li);else{var pn=Fe[In]-1,Ka=Be[pn];pn>0&&Math.abs(Li.distance)<Math.abs(Ka.distance)&&(Be[pn]=Li)}},zt;for(zt=0;zt<dn;zt++)St(lt[zt]);for(zt=lt.length-1;zt>dn-1;zt--)St(lt[zt]);lt=Be,oi()}var Wt=j._hoverdata,Yt=[],ze=$(j),tt=U(j);for(let Li of lt){var ct=m.makeEventData(Li,Li.trace,Li.cd);if(Li.hovertemplate!==!1){var wt=!1;Li.cd[Li.index]&&Li.cd[Li.index].ht&&(wt=Li.cd[Li.index].ht),Li.hovertemplate=wt||Li.trace.hovertemplate||!1}if(Li.xa&&Li.ya){var Nt=Li.x0+Li.xa._offset,It=Li.x1+Li.xa._offset,Zt=Li.y0+Li.ya._offset,qt=Li.y1+Li.ya._offset,vr=Math.min(Nt,It),Br=Math.max(Nt,It),Pr=Math.min(Zt,qt),Mi=Math.max(Zt,qt);ct.bbox={x0:vr+tt,x1:Br+tt,y0:Pr+ze,y1:Mi+ze},ct.xPixel=(Nt+It)/2,ct.yPixel=(Zt+qt)/2}Li.eventData=[ct],Yt.push(ct)}j._hoverdata=Yt;var gi=fe==="y"&&(qe.length>1||lt.length>1)||fe==="closest"&&Gt&<.length>1,ba=f.combine(le.plot_bgcolor||f.background,le.paper_bgcolor),Hi=P(lt,{gd:j,hovermode:fe,rotateLabels:gi,bgColor:ba,container:le._hoverlayer,outerContainer:le._paper.node(),commonLabelOpts:le.hoverlabel,hoverdistance:le.hoverdistance}),Za=Hi.hoverLabels;if(m.isUnifiedHover(fe)||(I(Za,gi,le,Hi.commonLabelBoundingBox),O(Za,gi,le._invScaleX,le._invScaleY)),te&&te.tagName){var oa=g.getComponentMethod("annotations","hasClickToShow")(j,Yt);u(r.select(te),oa?"pointer":"")}var Cn=X(j,q,Wt);if(!te||K||!Cn&&!le.hoveranywhere)return;Wt&&Cn&&j.emit("plotly_unhover",{event:q,points:Wt}),_n(j._hoverdata);function _n(Li){j.emit("plotly_hover",{event:q,points:Li,xaxes:Ze,yaxes:Ke,xvals:m.c2dApply(Ze,Ye),yvals:m.c2dApply(Ke,me),xPixel:q.pointerX,yPixel:q.pointerY})}}function D(j){return[j.trace.index,j.index,j.x0,j.y0,j.name,j.attr,j.xa?j.xa._id:"",j.ya?j.ya._id:""].join(",")}var R=/<extra>([\s\S]*)<\/extra>/;function P(j,q){var Y=q.gd,K=Y._fullLayout,te=q.hovermode,ne=q.rotateLabels,se=q.bgColor,le=q.container,ce=q.outerContainer,pe=q.commonLabelOpts||{};if(j.length===0)return[[]];var xe=q.fontFamily||y.HOVERFONT,ye=q.fontSize||y.HOVERFONTSIZE,fe=q.fontWeight||K.font.weight,ae=q.fontStyle||K.font.style,ee=q.fontVariant||K.font.variant,ie=q.fontTextcase||K.font.textcase,Q=q.fontLineposition||K.font.lineposition,ue=q.fontShadow||K.font.shadow,ge=j[0],Me=ge.xa,Te=ge.ya,je=te.charAt(0),Ve=je+"Label",Ze=ge[Ve];if(Ze===void 0&&Me.type==="multicategory")for(var Ke=0;Ke<j.length&&(Ze=j[Ke][Ve],Ze===void 0);Ke++);var vt=V(Y,ce),xt=vt.top,Pt=vt.width,mt=vt.height,Mt=Ze!==void 0&&ge.distance<=q.hoverdistance&&(te==="x"||te==="y");if(Mt){var lt=!0,qe,Ye;for(qe=0;qe<j.length;qe++)if(lt&&j[qe].zLabel===void 0&&(lt=!1),Ye=j[qe].hoverinfo||j[qe].trace.hoverinfo,Ye){var me=Array.isArray(Ye)?Ye:Ye.split("+");if(me.indexOf("all")===-1&&me.indexOf(te)===-1){Mt=!1;break}}lt&&(Mt=!1)}var _e=le.selectAll("g.axistext").data(Mt?[0]:[]);_e.enter().append("g").classed("axistext",!0),_e.exit().remove();var Ae={minX:0,maxX:0,minY:0,maxY:0};if(_e.each(function(){var xi=r.select(this),bi=i.ensureSingle(xi,"path","",function(Pr){Pr.style({"stroke-width":"1px"})}),Ua=i.ensureSingle(xi,"text","",function(Pr){Pr.attr("data-notex",1)}),dn=pe.bgcolor||f.defaultLine,pi=pe.bordercolor||f.contrast(dn),Jr=f.contrast(dn),Be=pe.font,Fe={weight:Be.weight||fe,style:Be.style||ae,variant:Be.variant||ee,textcase:Be.textcase||ie,lineposition:Be.lineposition||Q,shadow:Be.shadow||ue,family:Be.family||xe,size:Be.size||ye,color:Be.color||Jr};bi.style({fill:dn,stroke:pi}),Ua.text(Ze).call(c.font,Fe).call(n.positionText,0,0).call(n.convertToTspans,Y),xi.attr("transform","");var Et=V(Y,Ua.node()),St,zt;if(te==="x"){var Wt=Me.side==="top"?"-":"";Ua.attr("text-anchor","middle").call(n.positionText,0,Me.side==="top"?xt-Et.bottom-k-A:xt-Et.top+k+A),St=Me._offset+(ge.x0+ge.x1)/2,zt=Te._offset+(Me.side==="top"?0:Te._length);var Yt=Et.width/2+A,ze=St;St<Yt?ze=Yt:St>K.width-Yt&&(ze=K.width-Yt),bi.attr("d","M"+(St-ze)+",0L"+(St-ze+k)+","+Wt+k+"H"+Yt+"v"+Wt+(A*2+Et.height)+"H"+-Yt+"V"+Wt+k+"H"+(St-ze-k)+"Z"),St=ze,Ae.minX=St-Yt,Ae.maxX=St+Yt,Me.side==="top"?(Ae.minY=zt-(A*2+Et.height),Ae.maxY=zt-A):(Ae.minY=zt+A,Ae.maxY=zt+(A*2+Et.height))}else{var tt,ct,wt;Te.side==="right"?(tt="start",ct=1,wt="",St=Me._offset+Me._length):(tt="end",ct=-1,wt="-",St=Me._offset),zt=Te._offset+(ge.y0+ge.y1)/2,Ua.attr("text-anchor",tt),bi.attr("d","M0,0L"+wt+k+","+k+"V"+(A+Et.height/2)+"h"+wt+(A*2+Et.width)+"V-"+(A+Et.height/2)+"H"+wt+k+"V-"+k+"Z"),Ae.minY=zt-(A+Et.height/2),Ae.maxY=zt+(A+Et.height/2),Te.side==="right"?(Ae.minX=St+k,Ae.maxX=St+k+(A*2+Et.width)):(Ae.minX=St-k-(A*2+Et.width),Ae.maxX=St-k);var Nt=Et.height/2,It=xt-Et.top-Nt,Zt="clip"+K._uid+"commonlabel"+Te._id,qt;if(St<Et.width+2*A+k){qt="M-"+(k+A)+"-"+Nt+"h-"+(Et.width-A)+"V"+Nt+"h"+(Et.width-A)+"Z";var vr=Et.width-St+A;n.positionText(Ua,vr,It),tt==="end"&&Ua.selectAll("tspan").each(function(){var Pr=r.select(this),Mi=c.tester.append("text").text(Pr.text()).call(c.font,Fe),gi=V(Y,Mi.node());Math.round(gi.width)<Math.round(Et.width)&&Pr.attr("x",vr-gi.width),Mi.remove()})}else n.positionText(Ua,ct*(A+k),It),qt=null;var Br=K._topclips.selectAll("#"+Zt).data(qt?[0]:[]);Br.enter().append("clipPath").attr("id",Zt).append("path"),Br.exit().remove(),Br.select("path").attr("d",qt),c.setClipUrl(Ua,qt?Zt:null,Y)}xi.attr("transform",o(St,zt))}),m.isUnifiedHover(te)){le.selectAll("g.hovertext").remove();let xi=j.filter(bi=>bi.hoverinfo!=="none");if(xi.length===0)return[];var ke=K.hoverlabel,Ee=ke.font,De=xi[0],Je=((te==="x unified"?De.xa:De.ya).unifiedhovertitle||{}).text,Ue=Je?i.hovertemplateString({data:te==="x unified"?[{xa:De.xa,x:De.xVal}]:[{ya:De.ya,y:De.yVal}],fallback:De.trace.hovertemplatefallback,locale:K._d3locale,template:Je}):Ze,at={showlegend:!0,legend:{title:{text:Ue,font:Ee},font:Ee,bgcolor:ke.bgcolor,bordercolor:ke.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:K.legend?K.legend.traceorder:void 0,orientation:"v"}},rt={font:Ee};_(at,rt,Y._fullData);var ft=rt.legend;ft.entries=[];for(var At=0;At<xi.length;At++){var ht=xi[At];if(ht.hoverinfo!=="none"){var Gt=z(ht,!0,te,K,Ze),fr=Gt[0],gt=Gt[1];ht.name=gt,gt!==""?ht.text=gt+" : "+fr:ht.text=fr;var yt=ht.cd[ht.index];yt&&(yt.mc&&(ht.mc=yt.mc),yt.mcc&&(ht.mc=yt.mcc),yt.mlc&&(ht.mlc=yt.mlc),yt.mlcc&&(ht.mlc=yt.mlcc),yt.mlw&&(ht.mlw=yt.mlw),yt.mrc&&(ht.mrc=yt.mrc),yt.dir&&(ht.dir=yt.dir)),ht._distinct=!0,ft.entries.push([ht])}}ft.entries.sort(function(bi,Ua){var dn=K.hoversort;if(dn==="value descending"||dn==="value ascending"){var pi=te.charAt(0)==="x"?"y":"x",Jr=bi[0][pi+"LabelVal"],Be=Ua[0][pi+"LabelVal"];if(Jr!==Be)return dn==="value descending"?Be-Jr:Jr-Be}return bi[0].trace.index-Ua[0].trace.index}),ft.layer=le,ft._inHover=!0,ft._groupTitleFont=ke.grouptitlefont,v(Y,ft);var kt=le.select("g.legend"),Lt=V(Y,kt.node()),Ct=Lt.width+2*A,$t=Lt.height+2*A,mr=xi[0],br=(mr.x0+mr.x1)/2,Er=(mr.y0+mr.y1)/2,Tr=!(g.traceIs(mr.trace,"bar-like")||g.traceIs(mr.trace,"box-violin")),Ur,Ai;je==="y"?Tr?(Ai=Er-A,Ur=Er+A):(Ai=Math.min.apply(null,xi.map(function(bi){return Math.min(bi.y0,bi.y1)})),Ur=Math.max.apply(null,xi.map(function(bi){return Math.max(bi.y0,bi.y1)}))):Ai=Ur=i.mean(xi.map(function(bi){return(bi.y0+bi.y1)/2}))-$t/2;var oi,Qr;je==="x"?Tr?(oi=br+A,Qr=br-A):(oi=Math.max.apply(null,xi.map(function(bi){return Math.max(bi.x0,bi.x1)})),Qr=Math.min.apply(null,xi.map(function(bi){return Math.min(bi.x0,bi.x1)}))):oi=Qr=i.mean(xi.map(function(bi){return(bi.x0+bi.x1)/2}))-Ct/2;var ea=Me._offset,$i=Te._offset;Ur+=$i,oi+=ea,Qr+=ea-Ct,Ai+=$i-$t;var ja,ya;return oi+Ct<Pt&&oi>=0?ja=oi:Qr+Ct<Pt&&Qr>=0?ja=Qr:ea+Ct<Pt?ja=ea:oi-br<br-Qr+Ct?ja=Pt-Ct:ja=0,ja+=A,Ur+$t<mt&&Ur>=0?ya=Ur:Ai+$t<mt&&Ai>=0?ya=Ai:$i+$t<mt?ya=$i:Ur-Er<Er-Ai+$t?ya=mt-$t:ya=0,ya+=A,kt.attr("transform",o(ja-1,ya-1)),kt}var pa=le.selectAll("g.hovertext").data(j,function(xi){return D(xi)});return pa.enter().append("g").classed("hovertext",!0).each(function(){var xi=r.select(this);xi.append("rect").call(f.fill,f.addOpacity(se,.8)),xi.append("text").classed("name",!0),xi.append("path").style("stroke-width","1px"),xi.append("text").classed("nums",!0).call(c.font,{weight:fe,style:ae,variant:ee,textcase:ie,lineposition:Q,shadow:ue,family:xe,size:ye})}),pa.exit().remove(),pa.each(function(xi){var bi=r.select(this).attr("transform",""),Ua=xi.color;Array.isArray(Ua)&&(Ua=Ua[xi.eventData[0].pointNumber]);var dn=xi.bgcolor||Ua,pi=f.combine(f.opacity(dn)?dn:f.defaultLine,se),Jr=f.combine(f.opacity(Ua)?Ua:f.defaultLine,se),Be=xi.borderColor||f.contrast(pi),Fe=z(xi,Mt,te,K,Ze,bi),Et=Fe[0],St=Fe[1],zt=bi.select("text.nums").call(c.font,{family:xi.fontFamily||xe,size:xi.fontSize||ye,color:xi.fontColor||Be,weight:xi.fontWeight||fe,style:xi.fontStyle||ae,variant:xi.fontVariant||ee,textcase:xi.fontTextcase||ie,lineposition:xi.fontLineposition||Q,shadow:xi.fontShadow||ue}).text(Et).attr("data-notex",1).call(n.positionText,0,0).call(n.convertToTspans,Y),Wt=bi.select("text.name"),Yt=0,ze=0;if(St&&St!==Et){Wt.call(c.font,{family:xi.fontFamily||xe,size:xi.fontSize||ye,color:Jr,weight:xi.fontWeight||fe,style:xi.fontStyle||ae,variant:xi.fontVariant||ee,textcase:xi.fontTextcase||ie,lineposition:xi.fontLineposition||Q,shadow:xi.fontShadow||ue}).text(St).attr("data-notex",1).call(n.positionText,0,0).call(n.convertToTspans,Y);var tt=V(Y,Wt.node());Yt=tt.width+2*A,ze=tt.height+2*A}else Wt.remove(),bi.select("rect").remove();bi.select("path").style({fill:pi,stroke:Be});var ct=xi.xa._offset+(xi.x0+xi.x1)/2,wt=xi.ya._offset+(xi.y0+xi.y1)/2,Nt=Math.abs(xi.x1-xi.x0),It=Math.abs(xi.y1-xi.y0),Zt=V(Y,zt.node()),qt=Zt.width/K._invScaleX,vr=Zt.height/K._invScaleY;xi.ty0=(xt-Zt.top)/K._invScaleY,xi.bx=qt+2*A,xi.by=Math.max(vr+2*A,ze),xi.anchor="start",xi.txwidth=qt,xi.tx2width=Yt,xi.offset=0;var Br=(qt+k+A+Yt)*K._invScaleX,Pr,Mi;if(ne)xi.pos=ct,Pr=wt+It/2+Br<=mt,Mi=wt-It/2-Br>=0,(xi.idealAlign==="top"||!Pr)&&Mi?(wt-=It/2,xi.anchor="end"):Pr?(wt+=It/2,xi.anchor="start"):xi.anchor="middle",xi.crossPos=wt;else{if(xi.pos=wt,Pr=ct+Nt/2+Br<=Pt,Mi=ct-Nt/2-Br>=0,(xi.idealAlign==="left"||!Pr)&&Mi)ct-=Nt/2,xi.anchor="end";else if(Pr)ct+=Nt/2,xi.anchor="start";else{xi.anchor="middle";var gi=Br/2,ba=ct+gi-Pt,Hi=ct-gi;ba>0&&(ct-=ba),Hi<0&&(ct+=-Hi)}xi.crossPos=ct}zt.attr("text-anchor",xi.anchor),Yt&&Wt.attr("text-anchor",xi.anchor),bi.attr("transform",o(ct,wt)+(ne?s(x):""))}),{hoverLabels:pa,commonLabelBoundingBox:Ae}}function z(j,q,Y,K,te,ne){var se,le,ce="",pe="";j.nameOverride!==void 0&&(j.name=j.nameOverride),j.name&&(j.trace._meta&&(j.name=i.templateString(j.name,j.trace._meta)),ce=J(j.name,j.nameLength));var xe=Y.charAt(0),ye=xe==="x"?"y":"x";j.zLabel!==void 0?(j.xLabel!==void 0&&(pe+="x: "+j.xLabel+"<br>"),j.yLabel!==void 0&&(pe+="y: "+j.yLabel+"<br>"),j.trace.type!=="choropleth"&&j.trace.type!=="choroplethmap"&&(pe+=(pe?"z: ":"")+j.zLabel)):q&&j[xe+"Label"]===te?pe=j[ye+"Label"]||"":j.xLabel===void 0?j.yLabel!==void 0&&j.trace.type!=="scattercarpet"&&(pe=j.yLabel):j.yLabel===void 0?pe=j.xLabel:pe="("+j.xLabel+", "+j.yLabel+")",(j.text||j.text===0)&&!Array.isArray(j.text)&&(pe+=(pe?"<br>":"")+j.text),j.extraText!==void 0&&(pe+=(pe?"<br>":"")+j.extraText),ne&&pe===""&&!j.hovertemplate&&(ce===""&&ne.remove(),pe=ce),(le=(se=j.trace)==null?void 0:se.hoverlabel)!=null&&le.split&&(j.hovertemplate="");let{hovertemplate:fe=!1}=j;if(fe){let ae=j.hovertemplateLabels||j;j[xe+"Label"]!==te&&(ae[xe+"other"]=ae[xe+"Val"],ae[xe+"otherLabel"]=ae[xe+"Label"]),pe=i.hovertemplateString({data:[j.eventData[0]||{},j.trace._meta],fallback:j.trace.hovertemplatefallback,labels:ae,locale:K._d3locale,template:fe}),pe=pe.replace(R,(ee,ie)=>(ce=J(ie,j.nameLength),""))}return[pe,ce]}function I(j,q,Y,K){var te=q?"xa":"ya",ne=q?"ya":"xa",se=0,le=1,ce=j.size(),pe=new Array(ce),xe=0,ye=K.minX,fe=K.maxX,ae=K.minY,ee=K.maxY,ie=function(Ye){return Ye*Y._invScaleX},Q=function(Ye){return Ye*Y._invScaleY};j.each(function(Ye){var me=Ye[te],_e=Ye[ne],Ae=me._id.charAt(0)==="x",ke=me.range;xe===0&&ke&&ke[0]>ke[1]!==Ae&&(le=-1);var Ee=0,De=Ae?Y.width:Y.height;if(Y.hovermode==="x"||Y.hovermode==="y"){var Je=L(Ye,q),Ue=Ye.anchor,at=Ue==="end"?-1:1,rt,ft;if(Ue==="middle")rt=Ye.crossPos+(Ae?Q(Je.y-Ye.by/2):ie(Ye.bx/2+Ye.tx2width/2)),ft=rt+(Ae?Q(Ye.by):ie(Ye.bx));else if(Ae)rt=Ye.crossPos+Q(k+Je.y)-Q(Ye.by/2-k),ft=rt+Q(Ye.by);else{var At=ie(at*k+Je.x),ht=At+ie(at*Ye.bx);rt=Ye.crossPos+Math.min(At,ht),ft=Ye.crossPos+Math.max(At,ht)}Ae?ae!==void 0&&ee!==void 0&&Math.min(ft,ee)-Math.max(rt,ae)>1&&(_e.side==="left"?(Ee=_e._mainLinePosition,De=Y.width):De=_e._mainLinePosition):ye!==void 0&&fe!==void 0&&Math.min(ft,fe)-Math.max(rt,ye)>1&&(_e.side==="top"?(Ee=_e._mainLinePosition,De=Y.height):De=_e._mainLinePosition)}pe[xe++]=[{datum:Ye,traceIndex:Ye.trace.index,dp:0,pos:Ye.pos,posref:Ye.posref,size:Ye.by*(Ae?M:1)/2,pmin:Ee,pmax:De}]}),pe.sort(function(Ye,me){return Ye[0].posref-me[0].posref||le*(me[0].traceIndex-Ye[0].traceIndex)});var ue,ge,Me,Te,je,Ve,Ze;function Ke(Ye){var me=Ye[0],_e=Ye[Ye.length-1];if(ge=me.pmin-me.pos-me.dp+me.size,Me=_e.pos+_e.dp+_e.size-me.pmax,ge>.01){for(je=Ye.length-1;je>=0;je--)Ye[je].dp+=ge;ue=!1}if(!(Me<.01)){if(ge<-.01){for(je=Ye.length-1;je>=0;je--)Ye[je].dp-=Me;ue=!1}if(ue){var Ae=0;for(Te=0;Te<Ye.length;Te++)Ve=Ye[Te],Ve.pos+Ve.dp+Ve.size>me.pmax&&Ae++;for(Te=Ye.length-1;Te>=0&&!(Ae<=0);Te--)Ve=Ye[Te],Ve.pos>me.pmax-1&&(Ve.del=!0,Ae--);for(Te=0;Te<Ye.length&&!(Ae<=0);Te++)if(Ve=Ye[Te],Ve.pos<me.pmin+1)for(Ve.del=!0,Ae--,Me=Ve.size*2,je=Ye.length-1;je>=0;je--)Ye[je].dp-=Me;for(Te=Ye.length-1;Te>=0&&!(Ae<=0);Te--)Ve=Ye[Te],Ve.pos+Ve.dp+Ve.size>me.pmax&&(Ve.del=!0,Ae--)}}}for(;!ue&&se<=ce;){for(se++,ue=!0,Te=0;Te<pe.length-1;){var vt=pe[Te],xt=pe[Te+1],Pt=vt[vt.length-1],mt=xt[0];if(ge=Pt.pos+Pt.dp+Pt.size-mt.pos-mt.dp+mt.size,ge>.01){for(je=xt.length-1;je>=0;je--)xt[je].dp+=ge;for(vt.push.apply(vt,xt),pe.splice(Te+1,1),Ze=0,je=vt.length-1;je>=0;je--)Ze+=vt[je].dp;for(Me=Ze/vt.length,je=vt.length-1;je>=0;je--)vt[je].dp-=Me;ue=!1}else Te++}pe.forEach(Ke)}for(Te=pe.length-1;Te>=0;Te--){var Mt=pe[Te];for(je=Mt.length-1;je>=0;je--){var lt=Mt[je],qe=lt.datum;qe.offset=lt.dp,qe.del=lt.del}}}function L(j,q){var Y=0,K=j.offset;return q&&(K*=-w,Y=j.offset*C),{x:Y,y:K}}function B(j){var q={start:1,end:-1,middle:0}[j.anchor],Y=q*(k+A),K=Y+q*(j.txwidth+A),te=j.anchor==="middle";return te&&(Y-=j.tx2width/2,K+=j.txwidth/2+A),{alignShift:q,textShiftX:Y,text2ShiftX:K}}function O(j,q,Y,K){var te=function(se){return se*Y},ne=function(se){return se*K};j.each(function(se){var le=r.select(this);if(se.del)return le.remove();var ce=le.select("text.nums"),pe=se.anchor,xe=pe==="end"?-1:1,ye=B(se),fe=L(se,q),ae=fe.x,ee=fe.y,ie=pe==="middle",Q="hoverlabel"in se.trace?se.trace.hoverlabel.showarrow:!0,ue;ie?ue="M-"+te(se.bx/2+se.tx2width/2)+","+ne(ee-se.by/2)+"h"+te(se.bx)+"v"+ne(se.by)+"h-"+te(se.bx)+"Z":Q?ue="M0,0L"+te(xe*k+ae)+","+ne(k+ee)+"v"+ne(se.by/2-k)+"h"+te(xe*se.bx)+"v-"+ne(se.by)+"H"+te(xe*k+ae)+"V"+ne(ee-k)+"Z":ue="M"+te(xe*k+ae)+","+ne(ee-se.by/2)+"h"+te(xe*se.bx)+"v"+ne(se.by)+"h"+te(-xe*se.bx)+"Z",le.select("path").attr("d",ue);var ge=ae+ye.textShiftX,Me=ee+se.ty0-se.by/2+A,Te=se.textAlign||"auto";Te!=="auto"&&(Te==="left"&&pe!=="start"?(ce.attr("text-anchor","start"),ge=ie?-se.bx/2-se.tx2width/2+A:-se.bx-A):Te==="right"&&pe!=="end"&&(ce.attr("text-anchor","end"),ge=ie?se.bx/2-se.tx2width/2-A:se.bx+A)),ce.call(n.positionText,te(ge),ne(Me)),se.tx2width&&(le.select("text.name").call(n.positionText,te(ye.text2ShiftX+ye.alignShift*A+ae),ne(ee+se.ty0-se.by/2+A)),le.select("rect").call(c.setRect,te(ye.text2ShiftX+(ye.alignShift-1)*se.tx2width/2+ae),ne(ee-se.by/2-1),te(se.tx2width),ne(se.by+2)))})}function G(j,q){var Y=j.index,K=j.trace||{},te=j.cd[0],ne=j.cd[Y]||{};function se(fe){return fe||t(fe)&&fe===0}var le=Array.isArray(Y)?function(fe,ae){var ee=i.castOption(te,Y,fe);return se(ee)?ee:i.extractOption({},K,"",ae)}:function(fe,ae){return i.extractOption(ne,K,fe,ae)};function ce(fe,ae,ee){var ie=le(ae,ee);se(ie)&&(j[fe]=ie)}if(ce("hoverinfo","hi","hoverinfo"),ce("bgcolor","hbg","hoverlabel.bgcolor"),ce("borderColor","hbc","hoverlabel.bordercolor"),ce("fontFamily","htf","hoverlabel.font.family"),ce("fontSize","hts","hoverlabel.font.size"),ce("fontColor","htc","hoverlabel.font.color"),ce("fontWeight","htw","hoverlabel.font.weight"),ce("fontStyle","hty","hoverlabel.font.style"),ce("fontVariant","htv","hoverlabel.font.variant"),ce("nameLength","hnl","hoverlabel.namelength"),ce("textAlign","hta","hoverlabel.align"),j.posref=q==="y"||q==="closest"&&K.orientation==="h"?j.xa._offset+(j.x0+j.x1)/2:j.ya._offset+(j.y0+j.y1)/2,j.x0=i.constrain(j.x0,0,j.xa._length),j.x1=i.constrain(j.x1,0,j.xa._length),j.y0=i.constrain(j.y0,0,j.ya._length),j.y1=i.constrain(j.y1,0,j.ya._length),j.xLabelVal!==void 0&&(j.xLabel="xLabel"in j?j.xLabel:d.hoverLabelText(j.xa,j.xLabelVal,K.xhoverformat),j.xVal=j.xa.c2d(j.xLabelVal)),j.yLabelVal!==void 0&&(j.yLabel="yLabel"in j?j.yLabel:d.hoverLabelText(j.ya,j.yLabelVal,K.yhoverformat),j.yVal=j.ya.c2d(j.yLabelVal)),j.zLabelVal!==void 0&&j.zLabel===void 0&&(j.zLabel=String(j.zLabelVal)),!isNaN(j.xerr)&&!(j.xa.type==="log"&&j.xerr<=0)){var pe=d.tickText(j.xa,j.xa.c2l(j.xerr),"hover").text;j.xerrneg!==void 0?j.xLabel+=" +"+pe+" / -"+d.tickText(j.xa,j.xa.c2l(j.xerrneg),"hover").text:j.xLabel+=" \xB1 "+pe,q==="x"&&(j.distance+=1)}if(!isNaN(j.yerr)&&!(j.ya.type==="log"&&j.yerr<=0)){var xe=d.tickText(j.ya,j.ya.c2l(j.yerr),"hover").text;j.yerrneg!==void 0?j.yLabel+=" +"+xe+" / -"+d.tickText(j.ya,j.ya.c2l(j.yerrneg),"hover").text:j.yLabel+=" \xB1 "+xe,q==="y"&&(j.distance+=1)}var ye=j.hoverinfo||j.trace.hoverinfo;return ye&&ye!=="all"&&(ye=Array.isArray(ye)?ye:ye.split("+"),ye.indexOf("x")===-1&&(j.xLabel=void 0),ye.indexOf("y")===-1&&(j.yLabel=void 0),ye.indexOf("z")===-1&&(j.zLabel=void 0),ye.indexOf("text")===-1&&(j.text=void 0),ye.indexOf("name")===-1&&(j.name=void 0)),j}function W(j,q,Y){var K=Y.container,te=Y.fullLayout,ne=te._size,se=Y.event,le=!!q.hLinePoint,ce=!!q.vLinePoint,pe,xe;if(K.selectAll(".spikeline").remove(),!!(ce||le)){var ye=f.combine(te.plot_bgcolor,te.paper_bgcolor);if(le){var fe=q.hLinePoint,ae,ee;pe=fe&&fe.xa,xe=fe&&fe.ya;var ie=xe.spikesnap;ie==="cursor"?(ae=se.pointerX,ee=se.pointerY):(ae=pe._offset+fe.x,ee=xe._offset+fe.y);var Q=f.wcagContrast(fe.color,ye)<1.5?f.contrast(ye):fe.color,ue=xe.spikemode,ge=xe.spikethickness,Me=xe.spikecolor||Q,Te=d.getPxPosition(j,xe),je,Ve;if(ue.indexOf("toaxis")!==-1||ue.indexOf("across")!==-1){if(ue.indexOf("toaxis")!==-1&&(je=Te,Ve=ae),ue.indexOf("across")!==-1){var Ze=xe._counterDomainMin,Ke=xe._counterDomainMax;xe.anchor==="free"&&(Ze=Math.min(Ze,xe.position),Ke=Math.max(Ke,xe.position)),je=ne.l+Ze*ne.w,Ve=ne.l+Ke*ne.w}K.insert("line",":first-child").attr({x1:je,x2:Ve,y1:ee,y2:ee,"stroke-width":ge,stroke:Me,"stroke-dasharray":c.dashStyle(xe.spikedash,ge)}).classed("spikeline",!0).classed("crisp",!0),K.insert("line",":first-child").attr({x1:je,x2:Ve,y1:ee,y2:ee,"stroke-width":ge+2,stroke:ye}).classed("spikeline",!0).classed("crisp",!0)}ue.indexOf("marker")!==-1&&K.insert("circle",":first-child").attr({cx:Te+(xe.side!=="right"?ge:-ge),cy:ee,r:ge,fill:Me}).classed("spikeline",!0)}if(ce){var vt=q.vLinePoint,xt,Pt;pe=vt&&vt.xa,xe=vt&&vt.ya;var mt=pe.spikesnap;mt==="cursor"?(xt=se.pointerX,Pt=se.pointerY):(xt=pe._offset+vt.x,Pt=xe._offset+vt.y);var Mt=f.wcagContrast(vt.color,ye)<1.5?f.contrast(ye):vt.color,lt=pe.spikemode,qe=pe.spikethickness,Ye=pe.spikecolor||Mt,me=d.getPxPosition(j,pe),_e,Ae;if(lt.indexOf("toaxis")!==-1||lt.indexOf("across")!==-1){if(lt.indexOf("toaxis")!==-1&&(_e=me,Ae=Pt),lt.indexOf("across")!==-1){var ke=pe._counterDomainMin,Ee=pe._counterDomainMax;pe.anchor==="free"&&(ke=Math.min(ke,pe.position),Ee=Math.max(Ee,pe.position)),_e=ne.t+(1-Ee)*ne.h,Ae=ne.t+(1-ke)*ne.h}K.insert("line",":first-child").attr({x1:xt,x2:xt,y1:_e,y2:Ae,"stroke-width":qe,stroke:Ye,"stroke-dasharray":c.dashStyle(pe.spikedash,qe)}).classed("spikeline",!0).classed("crisp",!0),K.insert("line",":first-child").attr({x1:xt,x2:xt,y1:_e,y2:Ae,"stroke-width":qe+2,stroke:ye}).classed("spikeline",!0).classed("crisp",!0)}lt.indexOf("marker")!==-1&&K.insert("circle",":first-child").attr({cx:xt,cy:me-(pe.side!=="top"?qe:-qe),r:qe,fill:Ye}).classed("spikeline",!0)}}}function X(j,q,Y){if(!Y||Y.length!==j._hoverdata.length)return!0;for(var K=Y.length-1;K>=0;K--){var te=Y[K],ne=j._hoverdata[K];if(te.curveNumber!==ne.curveNumber||String(te.pointNumber)!==String(ne.pointNumber)||String(te.pointNumbers)!==String(ne.pointNumbers)||te.binNumber!==ne.binNumber)return!0}return!1}function Z(j,q){return!q||q.vLinePoint!==j._spikepoints.vLinePoint||q.hLinePoint!==j._spikepoints.hLinePoint}function J(j,q){return n.plainText(j||"",{len:q,allowedTags:["br","sub","sup","b","i","em","s","u"]})}function N(j,q){for(var Y=q.charAt(0),K=[],te=[],ne=[],se=0;se<j.length;se++){var le=j[se];g.traceIs(le.trace,"bar-like")||g.traceIs(le.trace,"box-violin")?ne.push(le):le.trace[Y+"period"]?te.push(le):K.push(le)}return K.concat(te).concat(ne)}function H(j,q,Y){var K=q[j+"a"],te=q[j+"Val"],ne=q.cd[0];if(K.type==="category"||K.type==="multicategory")te=K._categoriesMap[te];else if(K.type==="date"){var se=q.trace[j+"periodalignment"];if(se){var le=q.cd[q.index],ce=le[j+"Start"];ce===void 0&&(ce=le[j]);var pe=le[j+"End"];pe===void 0&&(pe=le[j]);var xe=pe-ce;se==="end"?te+=xe:se==="middle"&&(te+=xe/2)}te=K.d2c(te)}return ne&&ne.t&&ne.t.posLetter===K._id&&(Y.boxmode==="group"||Y.violinmode==="group")&&(te+=ne.t.dPos),te}var $=j=>j.offsetTop+j.clientTop,U=j=>j.offsetLeft+j.clientLeft;function V(j,q){var Y=j._fullLayout,K=q.getBoundingClientRect(),te=K.left,ne=K.top,se=te+K.width,le=ne+K.height,ce=i.apply3DTransform(Y._invTransform)(te,ne),pe=i.apply3DTransform(Y._invTransform)(se,le),xe=ce[0],ye=ce[1],fe=pe[0],ae=pe[1];return{x:xe,y:ye,width:fe-xe,height:ae-ye,top:Math.min(ye,ae),left:Math.min(xe,fe),right:Math.max(xe,fe),bottom:Math.max(ye,ae)}}}}),ky=de({"src/components/fx/hoverlabel_defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=sf().isUnifiedHover;r.exports=function(s,l,n,u){u=u||{};var c=l.legend;function f(h){u.font[h]||(u.font[h]=c?l.legend.font[h]:l.font[h])}l&&a(l.hovermode)&&(u.font||(u.font={}),f("size"),f("family"),f("color"),f("weight"),f("style"),f("variant"),c?(u.bgcolor||(u.bgcolor=i.combine(l.legend.bgcolor,l.paper_bgcolor)),u.bordercolor||(u.bordercolor=l.legend.bordercolor)):u.bgcolor||(u.bgcolor=l.paper_bgcolor)),n("hoverlabel.bgcolor",u.bgcolor),n("hoverlabel.bordercolor",u.bordercolor),n("hoverlabel.namelength",u.namelength),n("hoverlabel.showarrow",u.showarrow),t.coerceFont(n,"hoverlabel.font",u.font),n("hoverlabel.align",u.align)}}}),wq=de({"src/components/fx/layout_global_defaults.js"(e,r){"use strict";var t=Qt(),i=ky(),a=La();r.exports=function(s,l){function n(u,c){return t.coerce(s,l,a,u,c)}i(s,l,n)}}}),Tq=de({"src/components/fx/defaults.js"(e,r){"use strict";var t=Qt(),i=ki(),a=ky();r.exports=function(s,l,n,u){function c(h,d){return t.coerce(s,l,i,h,d)}var f=t.extendFlat({},u.hoverlabel);l.hovertemplate&&(f.namelength=-1),a(s,l,c,f)}}}),jE=de({"src/components/fx/hovermode_defaults.js"(e,r){"use strict";var t=Qt(),i=La();r.exports=function(o,s){function l(n,u){return s[n]!==void 0?s[n]:t.coerce(o,s,i,n,u)}return l("clickmode"),l("hoversubplots"),l("hoveranywhere"),l("clickanywhere"),l("hovermode")}}}),Aq=de({"src/components/fx/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=La(),a=jE(),o=ky();r.exports=function(l,n){function u(g,m){return t.coerce(l,n,i,g,m)}var c=a(l,n);c&&(u("hoverdistance"),u("spikedistance"),c.indexOf("unified")!==-1&&u("hoversort"));var f=u("dragmode");f==="select"&&u("selectdirection");var h=n._has("map"),d=n._has("geo"),p=n._basePlotModules.length;n.dragmode==="zoom"&&((h||d)&&p===1||h&&d&&p===2)&&(n.dragmode="pan"),o(l,n,u),t.coerceFont(u,"hoverlabel.grouptitlefont",n.hoverlabel.font)}}}),Mq=de({"src/components/fx/calc.js"(e,r){"use strict";var t=Qt(),i=Ma();r.exports=function(s){var l=s.calcdata,n=s._fullLayout;function u(p){return function(g){return t.coerceHoverinfo({hoverinfo:g},{_module:p._module},n)}}for(var c=0;c<l.length;c++){var f=l[c],h=f[0].trace;if(!i.traceIs(h,"pie-like")){var d=i.traceIs(h,"2dMap")?a:t.fillArray;d(h.hoverinfo,f,"hi",u(h)),h.hovertemplate&&d(h.hovertemplate,f,"ht"),h.hoverlabel&&(d(h.hoverlabel.bgcolor,f,"hbg"),d(h.hoverlabel.bordercolor,f,"hbc"),d(h.hoverlabel.font.size,f,"hts"),d(h.hoverlabel.font.color,f,"htc"),d(h.hoverlabel.font.family,f,"htf"),d(h.hoverlabel.font.weight,f,"htw"),d(h.hoverlabel.font.style,f,"hty"),d(h.hoverlabel.font.variant,f,"htv"),d(h.hoverlabel.namelength,f,"hnl"),d(h.hoverlabel.align,f,"hta"),d(h.hoverlabel.showarrow,f,"htsa"))}}};function a(o,s,l,n){n=n||t.identity,Array.isArray(o)&&(s[0][l]=n(o))}}}),Sq=de({"src/components/fx/click.js"(e,r){"use strict";var t=Ma(),i=sf(),a=NE().hover;r.exports=function(s,l,n){var u=t.getComponentMethod("annotations","onClick")(s,s._hoverdata),c=s._fullLayout;n!==void 0&&a(s,l,n,!0);function f(){var h,d,p,g,m,y,_={points:s._hoverdata,event:l};(h=_.xaxes)!=null||(_.xaxes=s._hoverXAxes),(d=_.yaxes)!=null||(_.yaxes=s._hoverYAxes),(p=_.xvals)!=null||(_.xvals=s._hoverXVals&&i.c2dApply(s._hoverXAxes,s._hoverXVals)),(g=_.yvals)!=null||(_.yvals=s._hoverYVals&&i.c2dApply(s._hoverYAxes,s._hoverYVals)),(m=_.xPixel)!=null||(_.xPixel=s._hoverPointerX),(y=_.yPixel)!=null||(_.yPixel=s._hoverPointerY),s.emit("plotly_click",_)}(s._hoverdata||c.clickanywhere)&&l&&l.target&&(s._hoverdata||(s._hoverdata=[]),u&&u.then?u.then(f):f(),l.stopImmediatePropagation&&l.stopImmediatePropagation())}}}),$s=de({"src/components/fx/index.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=Uc(),o=sf(),s=La(),l=NE();r.exports={moduleType:"component",name:"fx",constants:Ta(),schema:{layout:s},attributes:ki(),layoutAttributes:s,supplyLayoutGlobalDefaults:wq(),supplyDefaults:Tq(),supplyLayoutDefaults:Aq(),calc:Mq(),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:u,castHoverinfo:c,hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:n,click:Sq()};function n(f){var h=i.isD3Selection(f)?f:t.select(f);h.selectAll("g.hovertext").remove(),h.selectAll(".spikeline").remove()}function u(f,h,d){return i.castOption(f,h,"hoverlabel."+d)}function c(f,h,d){function p(g){return i.coerceHoverinfo({hoverinfo:g},{_module:f._module},h)}return i.castOption(f,d,"hoverinfo",p)}}}),Xd=de({"src/components/dragelement/helpers.js"(e){"use strict";e.selectMode=function(r){return r==="lasso"||r==="select"},e.drawMode=function(r){return r==="drawclosedpath"||r==="drawopenpath"||r==="drawline"||r==="drawrect"||r==="drawcircle"},e.openMode=function(r){return r==="drawline"||r==="drawopenpath"},e.rectMode=function(r){return r==="select"||r==="drawline"||r==="drawrect"||r==="drawcircle"},e.freeMode=function(r){return r==="lasso"||r==="drawclosedpath"||r==="drawopenpath"},e.selectingOrDrawing=function(r){return e.freeMode(r)||e.rectMode(r)}}}),Cy=de({"src/lib/clear_gl_canvases.js"(e,r){"use strict";r.exports=function(i){var a=i._fullLayout;a._glcanvas&&a._glcanvas.size()&&a._glcanvas.each(function(o){o.regl&&o.regl.clear({color:!0,depth:!0})})}}}),Sw=de({"src/fonts/ploticon.js"(e,r){"use strict";r.exports={undo:{width:857.1,height:1e3,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",transform:"matrix(1 0 0 -1 0 850)"},home:{width:928.6,height:1e3,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",transform:"matrix(1 0 0 -1 0 850)"},"camera-retro":{width:1e3,height:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",transform:"matrix(1 0 0 -1 0 850)"},curlybraces:{width:18,height:16,path:"M 9,4 C 7.354992,4 6,5.354992 6,7 V 9 C 6,9.2999997 5.8778068,9.8883542 5.5878906,10.291016 5.2979744,10.693677 4.9222213,11 4,11 a 1.0001,1.0001 0 0 0 0,2 c 0.2999997,0 0.8883542,0.122193 1.2910156,0.412109 C 5.693677,13.702026 6,14.077779 6,15 v 2 c 0,1.645008 1.354992,3 3,3 h 0.5 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 H 9 C 8.4358712,18 8,17.564129 8,17 V 15 C 8,13.625876 7.3766799,12.602305 6.6113281,11.96875 6.8086352,11.794047 7.0679793,11.657537 7.2109375,11.458984 7.8210204,10.611647 8,9.6999993 8,9 V 7 C 8,6.4358712 8.4358712,6 9,6 h 0.5 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z m 5.5,0 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 H 15 c 0.564129,0 1,0.4358712 1,1 v 2 c 0,0.6999993 0.17898,1.611647 0.789062,2.458984 0.142959,0.198553 0.402303,0.335063 0.59961,0.509766 C 16.62332,12.602305 16,13.625876 16,15 v 2 c 0,0.564129 -0.435871,1 -1,1 h -0.5 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 H 15 c 1.645008,0 3,-1.354992 3,-3 v -2 c 0,-0.922221 0.306323,-1.297974 0.708984,-1.587891 C 19.111646,13.122193 19.7,13 20,13 a 1.0001,1.0001 0 0 0 0,-2 C 19.077779,11 18.702026,10.693677 18.412109,10.291016 18.122193,9.8883542 18,9.2999997 18,9 V 7 C 18,5.354992 16.645008,4 15,4 Z",transform:"translate(-3 -4)"},zoombox:{width:1e3,height:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",transform:"matrix(1 0 0 -1 0 850)"},pan:{width:1e3,height:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",transform:"matrix(1 0 0 -1 0 850)"},zoom_plus:{width:875,height:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},zoom_minus:{width:875,height:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},autoscale:{width:1e3,height:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_basic:{width:1500,height:1e3,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_compare:{width:1125,height:1e3,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",transform:"matrix(1 0 0 -1 0 850)"},plotlylogo:{width:1542,height:1e3,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",transform:"matrix(1 0 0 -1 0 850)"},"z-axis":{width:1e3,height:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",transform:"matrix(1 0 0 -1 0 850)"},"3d_rotate":{width:1e3,height:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",transform:"matrix(1 0 0 -1 0 850)"},camera:{width:1e3,height:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",transform:"matrix(1 0 0 -1 0 850)"},movie:{width:1e3,height:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",transform:"matrix(1 0 0 -1 0 850)"},question:{width:857.1,height:1e3,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",transform:"matrix(1 0 0 -1 0 850)"},disk:{width:857.1,height:1e3,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",transform:"matrix(1 0 0 -1 0 850)"},cloudupload:{width:640,height:640,path:"M451.5 160C434.9 160 418.8 164.5 404.7 172.7C388.9 156.7 370.5 143.3 350.2 133.2C378.4 109.2 414.3 96 451.5 96C537.9 96 608 166 608 252.5C608 294 591.5 333.8 562.2 363.1L491.1 434.2C461.8 463.5 422 480 380.5 480C294.1 480 224 410 224 323.5C224 322 224 320.5 224.1 319C224.6 301.3 239.3 287.4 257 287.9C274.7 288.4 288.6 303.1 288.1 320.8C288.1 321.7 288.1 322.6 288.1 323.4C288.1 374.5 329.5 415.9 380.6 415.9C405.1 415.9 428.6 406.2 446 388.8L517.1 317.7C534.4 300.4 544.2 276.8 544.2 252.3C544.2 201.2 502.8 159.8 451.7 159.8zM307.2 237.3C305.3 236.5 303.4 235.4 301.7 234.2C289.1 227.7 274.7 224 259.6 224C235.1 224 211.6 233.7 194.2 251.1L123.1 322.2C105.8 339.5 96 363.1 96 387.6C96 438.7 137.4 480.1 188.5 480.1C205 480.1 221.1 475.7 235.2 467.5C251 483.5 269.4 496.9 289.8 507C261.6 530.9 225.8 544.2 188.5 544.2C102.1 544.2 32 474.2 32 387.7C32 346.2 48.5 306.4 77.8 277.1L148.9 206C178.2 176.7 218 160.2 259.5 160.2C346.1 160.2 416 230.8 416 317.1C416 318.4 416 319.7 416 321C415.6 338.7 400.9 352.6 383.2 352.2C365.5 351.8 351.6 337.1 352 319.4C352 318.6 352 317.9 352 317.1C352 283.4 334 253.8 307.2 237.5z",transform:"matrix(1 0 0 1 -15 -15)"},drawopenpath:{width:70,height:70,path:"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z",transform:"matrix(1 0 0 1 -15 -15)"},drawclosedpath:{width:90,height:90,path:"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z",transform:"matrix(1 0 0 1 -5 -5)"},lasso:{width:1031,height:1e3,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",transform:"matrix(1 0 0 -1 0 850)"},selectbox:{width:1e3,height:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",transform:"matrix(1 0 0 -1 0 850)"},drawline:{width:70,height:70,path:"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z",transform:"matrix(1 0 0 1 -15 -15)"},drawrect:{width:80,height:80,path:"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z",transform:"matrix(1 0 0 1 -10 -10)"},drawcircle:{width:80,height:80,path:"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z",transform:"matrix(1 0 0 1 -10 -10)"},eraseshape:{width:80,height:80,path:"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z",transform:"matrix(1 0 0 1 -10 -10)"},spikeline:{width:1e3,height:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",transform:"matrix(1.5 0 0 -1.5 0 850)"},pencil:{width:1792,height:1792,path:"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z",transform:"matrix(1 0 0 1 0 1)"},newplotlylogo:{name:"newplotlylogo",svg:["<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'>"," <title>plotly-logomark</title>"," <g id='symbol'>","  <rect fill='#000' x='0' y='0' width='132' height='132' rx='18' ry='18'/>","  <circle fill='#9EF' cx='102' cy='30' r='6'/>","  <circle fill='#BAC' cx='78' cy='30' r='6'/>","  <circle fill='#BAC' cx='78' cy='54' r='6'/>","  <circle fill='#D69' cx='54' cy='30' r='6'/>","  <circle fill='#F26' cx='30' cy='30' r='6'/>","  <circle fill='#F26' cx='30' cy='54' r='6'/>","  <path fill='#FFF' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/>","  <path fill='#FFF' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/>","  <path fill='#FFF' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/>","  <path fill='#FFF' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/>"," </g>","</svg>"].join("")}}}}),Ew=de({"src/components/shapes/draw_newshape/constants.js"(e,r){"use strict";var t=32;r.exports={CIRCLE_SIDES:t,i000:0,i090:t/4,i180:t/2,i270:t/4*3,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}}}),kw=de({"src/components/selections/helpers.js"(e,r){"use strict";var t=Qt().strTranslate;function i(l,n){switch(l.type){case"log":return l.p2d(n);case"date":return l.p2r(n,0,l.calendar);default:return l.p2r(n)}}function a(l,n){switch(l.type){case"log":return l.d2p(n);case"date":return l.r2p(n,0,l.calendar);default:return l.r2p(n)}}function o(l){var n=l._id.charAt(0)==="y"?1:0;return function(u){return i(l,u[n])}}function s(l){return t(l.xaxis._offset,l.yaxis._offset)}r.exports={p2r:i,r2p:a,axValue:o,getTransform:s}}}),v0=de({"src/components/shapes/draw_newshape/helpers.js"(e){"use strict";var r=DE(),t=Ew(),i=t.CIRCLE_SIDES,a=t.SQRT2,o=kw(),s=o.p2r,l=o.r2p,n=[0,3,4,5,6,1,2],u=[0,3,4,1,2];e.writePaths=function(h){var d=h.length;if(!d)return"M0,0Z";for(var p="",g=0;g<d;g++)for(var m=h[g].length,y=0;y<m;y++){var _=h[g][y][0];if(_==="Z")p+="Z";else for(var v=h[g][y].length,x=0;x<v;x++){var S=x;_==="Q"||_==="S"?S=u[x]:_==="C"&&(S=n[x]),p+=h[g][y][S],x>0&&x<v-1&&(p+=",")}}return p},e.readPaths=function(h,d,p,g){var m=r(h),y=[],_=-1,v=function(){_++,y[_]=[]},x,S=0,M=0,C,w,k=function(){C=S,w=M};k();for(var A=0;A<m.length;A++){var b=[],E,T,F,D,R=m[A][0],P=R;switch(R){case"M":v(),S=+m[A][1],M=+m[A][2],b.push([P,S,M]),k();break;case"Q":case"S":E=+m[A][1],F=+m[A][2],S=+m[A][3],M=+m[A][4],b.push([P,S,M,E,F]);break;case"C":E=+m[A][1],F=+m[A][2],T=+m[A][3],D=+m[A][4],S=+m[A][5],M=+m[A][6],b.push([P,S,M,E,F,T,D]);break;case"T":case"L":S=+m[A][1],M=+m[A][2],b.push([P,S,M]);break;case"H":P="L",S=+m[A][1],b.push([P,S,M]);break;case"V":P="L",M=+m[A][1],b.push([P,S,M]);break;case"A":P="L";var z=+m[A][1],I=+m[A][2];+m[A][4]||(z=-z,I=-I);var L=S-z,B=M;for(x=1;x<=i/2;x++){var O=2*Math.PI*x/i;b.push([P,L+z*Math.cos(O),B+I*Math.sin(O)])}break;case"Z":(S!==C||M!==w)&&(S=C,M=w,b.push([P,S,M]));break}for(var G=(p||{}).domain,W=d._fullLayout._size,X=p&&p.xsizemode==="pixel",Z=p&&p.ysizemode==="pixel",J=g===!1,N=0;N<b.length;N++){for(x=0;x+2<7;x+=2){var H=b[N][x+1],$=b[N][x+2];H===void 0||$===void 0||(S=H,M=$,p&&(p.xaxis&&p.xaxis.p2r?(J&&(H-=p.xaxis._offset),X?H=l(p.xaxis,p.xanchor)+H:H=s(p.xaxis,H)):(J&&(H-=W.l),G?H=G.x[0]+H/W.w:H=H/W.w),p.yaxis&&p.yaxis.p2r?(J&&($-=p.yaxis._offset),Z?$=l(p.yaxis,p.yanchor)-$:$=s(p.yaxis,$)):(J&&($-=W.t),G?$=G.y[1]-$/W.h:$=1-$/W.h)),b[N][x+1]=H,b[N][x+2]=$)}y[_].push(b[N].slice())}}return y};function c(h,d){return Math.abs(h-d)<=1e-6}function f(h,d){var p=d[1]-h[1],g=d[2]-h[2];return Math.sqrt(p*p+g*g)}e.pointsOnRectangle=function(h){var d=h.length;if(d!==5)return!1;for(var p=1;p<3;p++){var g=h[0][p]-h[1][p],m=h[3][p]-h[2][p];if(!c(g,m))return!1;var y=h[0][p]-h[3][p],_=h[1][p]-h[2][p];if(!c(y,_))return!1}return!c(h[0][1],h[1][1])&&!c(h[0][1],h[3][1])?!1:!!(f(h[0],h[1])*f(h[0],h[3]))},e.pointsOnEllipse=function(h){var d=h.length;if(d!==i+1)return!1;d=i;for(var p=0;p<d;p++){var g=(d*2-p)%d,m=(d/2+g)%d,y=(d/2+p)%d;if(!c(f(h[p],h[y]),f(h[g],h[m])))return!1}return!0},e.handleEllipse=function(h,d,p){if(!h)return[d,p];var g=e.ellipseOver({x0:d[0],y0:d[1],x1:p[0],y1:p[1]}),m=(g.x1+g.x0)/2,y=(g.y1+g.y0)/2,_=(g.x1-g.x0)/2,v=(g.y1-g.y0)/2;_||(_=v=v/a),v||(v=_=_/a);for(var x=[],S=0;S<i;S++){var M=S*2*Math.PI/i;x.push([m+_*Math.cos(M),y+v*Math.sin(M)])}return x},e.ellipseOver=function(h){var d=h.x0,p=h.y0,g=h.x1,m=h.y1,y=g-d,_=m-p;d-=y,p-=_;var v=(d+g)/2,x=(p+m)/2,S=a;return y*=S,_*=S,{x0:v-y,y0:x-_,x1:v+y,y1:x+_}},e.fixDatesForPaths=function(h,d,p){var g=d.type==="date",m=p.type==="date";if(!g&&!m)return h;for(var y=0;y<h.length;y++)for(var _=0;_<h[y].length;_++)for(var v=0;v+2<h[y][_].length;v+=2)g&&(h[y][_][v+1]=h[y][_][v+1].replace(" ","_")),m&&(h[y][_][v+2]=h[y][_][v+2].replace(" ","_"));return h}}}),Cw=de({"src/components/shapes/draw_newshape/newshapes.js"(e,r){"use strict";var t=Hs(),i=Xd(),a=i.drawMode,o=i.openMode,s=Ew(),l=s.i000,n=s.i090,u=s.i180,c=s.i270,f=s.cos45,h=s.sin45,d=kw(),p=d.p2r,g=d.r2p,m=f0(),y=m.clearOutline,_=v0(),v=_.readPaths,x=_.writePaths,S=_.ellipseOver,M=_.fixDatesForPaths;function C(k,A){if(k.length){var b=k[0][0];if(b){var E=A.gd,T=A.isActiveShape,F=A.dragmode,D=(E.layout||{}).shapes||[];if(!a(F)&&T!==void 0){var R=E._fullLayout._activeShapeIndex;if(R<D.length)switch(E._fullLayout.shapes[R].type){case"rect":F="drawrect";break;case"circle":F="drawcircle";break;case"line":F="drawline";break;case"path":var P=D[R].path||"";P[P.length-1]==="Z"?F="drawclosedpath":F="drawopenpath";break}}var z=w(k,A,F);y(E);for(var I=A.editHelpers,L=(I||{}).modifyItem,B=[],O=0;O<D.length;O++){var G=E._fullLayout.shapes[O];if(B[O]=G._input,T!==void 0&&O===E._fullLayout._activeShapeIndex){var W=z;switch(G.type){case"line":case"rect":case"circle":var X=t.getFromId(E,G.xref);G.xref.charAt(0)==="x"&&X.type.includes("category")?(L("x0",W.x0-(G.x0shift||0)),L("x1",W.x1-(G.x1shift||0))):(L("x0",W.x0),L("x1",W.x1));var Z=t.getFromId(E,G.yref);G.yref.charAt(0)==="y"&&Z.type.includes("category")?(L("y0",W.y0-(G.y0shift||0)),L("y1",W.y1-(G.y1shift||0))):(L("y0",W.y0),L("y1",W.y1));break;case"path":L("path",W.path);break}}}return T===void 0?(B.push(z),B):I?I.getUpdateObj():{}}}}function w(k,A,b){var E=k[0][0],T=A.gd,F=E.getAttribute("d"),D=T._fullLayout.newshape,R=A.plotinfo,P=A.isActiveShape,z=R.xaxis,I=R.yaxis,L=!!R.domain||!R.xaxis,B=!!R.domain||!R.yaxis,O=o(b),G=v(F,T,R,P),W={editable:!0,visible:D.visible,name:D.name,showlegend:D.showlegend,legend:D.legend,legendwidth:D.legendwidth,legendgroup:D.legendgroup,legendgrouptitle:{text:D.legendgrouptitle.text,font:D.legendgrouptitle.font},legendrank:D.legendrank,label:D.label,xref:L?"paper":z._id,yref:B?"paper":I._id,layer:D.layer,opacity:D.opacity,line:{color:D.line.color,width:D.line.width,dash:D.line.dash}};O||(W.fillcolor=D.fillcolor,W.fillrule=D.fillrule);var X;if(G.length===1&&(X=G[0]),X&&X.length===5&&b==="drawrect")W.type="rect",W.x0=X[0][1],W.y0=X[0][2],W.x1=X[2][1],W.y1=X[2][2];else if(X&&b==="drawline")W.type="line",W.x0=X[0][1],W.y0=X[0][2],W.x1=X[1][1],W.y1=X[1][2];else if(X&&b==="drawcircle"){W.type="circle";var Z=X[l][1],J=X[n][1],N=X[u][1],H=X[c][1],$=X[l][2],U=X[n][2],V=X[u][2],j=X[c][2],q=R.xaxis&&(R.xaxis.type==="date"||R.xaxis.type==="log"),Y=R.yaxis&&(R.yaxis.type==="date"||R.yaxis.type==="log");q&&(Z=g(R.xaxis,Z),J=g(R.xaxis,J),N=g(R.xaxis,N),H=g(R.xaxis,H)),Y&&($=g(R.yaxis,$),U=g(R.yaxis,U),V=g(R.yaxis,V),j=g(R.yaxis,j));var K=(J+H)/2,te=($+V)/2,ne=(H-J+N-Z)/2,se=(j-U+V-$)/2,le=S({x0:K,y0:te,x1:K+ne*f,y1:te+se*h});q&&(le.x0=p(R.xaxis,le.x0),le.x1=p(R.xaxis,le.x1)),Y&&(le.y0=p(R.yaxis,le.y0),le.y1=p(R.yaxis,le.y1)),W.x0=le.x0,W.y0=le.y0,W.x1=le.x1,W.y1=le.y1}else W.type="path",z&&I&&M(G,z,I),W.path=x(G),X=null;return W}r.exports={newShapes:C,createShapeObj:w}}}),UE=de({"src/components/selections/draw_newselection/newselections.js"(e,r){"use strict";var t=Xd(),i=t.selectMode,a=f0(),o=a.clearOutline,s=v0(),l=s.readPaths,n=s.writePaths,u=s.fixDatesForPaths;r.exports=function(f,h){if(f.length){var d=f[0][0];if(d){var p=d.getAttribute("d"),g=h.gd,m=g._fullLayout.newselection,y=h.plotinfo,_=y.xaxis,v=y.yaxis,x=h.isActiveSelection,S=h.dragmode,M=(g.layout||{}).selections||[];if(!i(S)&&x!==void 0){var C=g._fullLayout._activeSelectionIndex;if(C<M.length)switch(g._fullLayout.selections[C].type){case"rect":S="select";break;case"path":S="lasso";break}}var w=l(p,g,y,x),k={xref:_._id,yref:v._id,opacity:m.opacity,line:{color:m.line.color,width:m.line.width,dash:m.line.dash}},A;w.length===1&&(A=w[0]),A&&A.length===5&&S==="select"?(k.type="rect",k.x0=A[0][1],k.y0=A[0][2],k.x1=A[2][1],k.y1=A[2][2]):(k.type="path",_&&v&&u(w,_,v),k.path=n(w),A=null),o(g);for(var b=h.editHelpers,E=(b||{}).modifyItem,T=[],F=0;F<M.length;F++){var D=g._fullLayout.selections[F];if(!D){T[F]=D;continue}if(T[F]=D._input,x!==void 0&&F===g._fullLayout._activeSelectionIndex){var R=k;switch(D.type){case"rect":E("x0",R.x0),E("x1",R.x1),E("y0",R.y0),E("y1",R.y1);break;case"path":E("path",R.path);break}}}return x===void 0?(T.push(k),T):b?b.getUpdateObj():{}}}}}}),Dy=de({"src/components/shapes/constants.js"(e,r){"use strict";r.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:3},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}}}),m0=de({"src/components/shapes/helpers.js"(e){"use strict";var r=Dy(),t=Qt(),i=nn();e.rangeToShapePosition=function(s){return s.type==="log"?s.r2d:function(l){return l}},e.shapePositionToRange=function(s){return s.type==="log"?s.d2r:function(l){return l}},e.decodeDate=function(s){return function(l){return l.replace&&(l=l.replace("_"," ")),s(l)}},e.encodeDate=function(s){return function(l){return s(l).replace(" ","_")}},e.extractPathCoords=function(s,l,n){var u=[],c=s.match(r.segmentRE);return c.forEach(function(f){var h=l[f.charAt(0)].drawn;if(h!==void 0){var d=f.slice(1).match(r.paramRE);if(!(!d||d.length<h)){var p=d[h],g=n?p:t.cleanNumber(p);u.push(g)}}}),u},e.countDefiningCoords=function(s,l,n){if(s!=="path")return 2;if(!l)return 0;let u=l.match(r.segmentRE);if(!u)return 0;let c=n==="x"?r.paramIsX:r.paramIsY;return u.reduce((f,h)=>{let d=h.charAt(0),p=c[d].drawn!==void 0;return f+(p?1:0)},0)},e.getDataToPixel=function(s,l,n,u,c){var f=s._fullLayout._size,h;if(l)if(c==="domain")h=function(p){return l._length*(u?1-p:p)+l._offset};else{var d=e.shapePositionToRange(l);h=function(p){var g=o(l,n);return l._offset+l.r2p(d(p,!0))+g},l.type==="date"&&(h=e.decodeDate(h))}else u?h=function(p){return f.t+f.h*(1-p)}:h=function(p){return f.l+f.w*p};return h},e.getPixelToData=function(s,l,n,u){var c=s._fullLayout._size,f;if(l)if(u==="domain")f=function(d){var p=(d-l._offset)/l._length;return n?1-p:p};else{var h=e.rangeToShapePosition(l);f=function(d){return h(l.p2r(d-l._offset))}}else n?f=function(d){return 1-(d-c.t)/c.h}:f=function(d){return(d-c.l)/c.w};return f},e.roundPositionForSharpStrokeRendering=function(s,l){var n=Math.round(l%2)===1,u=Math.round(s);return n?u+.5:u},e.makeShapesOptionsAndPlotinfo=function(s,l){var n=s._fullLayout.shapes[l]||{},u=s._fullLayout._plots[n.xref+n.yref],c=!!u;return c?u._hadPlotinfo=!0:(u={},n.xref&&n.xref!=="paper"&&(u.xaxis=s._fullLayout[n.xref+"axis"]),n.yref&&n.yref!=="paper"&&(u.yaxis=s._fullLayout[n.yref+"axis"])),u.xsizemode=n.xsizemode,u.ysizemode=n.ysizemode,u.xanchor=n.xanchor,u.yanchor=n.yanchor,{options:n,plotinfo:u}},e.makeSelectionsOptionsAndPlotinfo=function(s,l){var n=s._fullLayout.selections[l]||{},u=s._fullLayout._plots[n.xref+n.yref],c=!!u;return c?u._hadPlotinfo=!0:(u={},n.xref&&(u.xaxis=s._fullLayout[n.xref+"axis"]),n.yref&&(u.yaxis=s._fullLayout[n.yref+"axis"])),{options:n,plotinfo:u}},e.getPathString=function(s,l){let n=l.type,u=i.getRefType(l.xref),c=i.getRefType(l.yref),f=s._fullLayout._size;var h,d,p,g,m,y,_,v,x,S,M,C;function w(R,P,z,I){var L;if(R)if(P==="domain")I?L=function(B){return R._offset+R._length*(1-B)}:L=function(B){return R._offset+R._length*B};else{let B=e.shapePositionToRange(R);L=function(O){return R._offset+R.r2p(B(O,!0))},z==="path"&&R.type==="date"&&(L=e.decodeDate(L))}else I?L=function(B){return f.t+f.h*(1-B)}:L=function(B){return f.l+f.w*B};return L}if(u==="array"?(_=[],h=l.xref.map(function(R){return i.getFromId(s,R)}),_=l.xref.map(function(R,P){return w(h[P],i.getRefType(R),n,!1)})):(h=i.getFromId(s,l.xref),_=w(h,u,n,!1)),c==="array"?(v=[],d=l.yref.map(function(R){return i.getFromId(s,R)}),v=l.yref.map(function(R,P){return w(d[P],i.getRefType(R),n,!0)})):(d=i.getFromId(s,l.yref),v=w(d,c,n,!0)),n==="path")return a(l,_,v);if(u==="array")p=o(h[0],l.x0shift),g=o(h[1],l.x1shift),x=_[0](l.x0)+p,S=_[1](l.x1)+g;else if(p=o(h,l.x0shift),g=o(h,l.x1shift),l.xsizemode==="pixel"){let R=_(l.xanchor);x=R+l.x0+p,S=R+l.x1+g}else x=_(l.x0)+p,S=_(l.x1)+g;if(c==="array")m=o(d[0],l.y0shift),y=o(d[1],l.y1shift),M=v[0](l.y0)+m,C=v[1](l.y1)+y;else if(m=o(d,l.y0shift),y=o(d,l.y1shift),l.ysizemode==="pixel"){let R=v(l.yanchor);M=R-l.y0+m,C=R-l.y1+y}else M=v(l.y0)+m,C=v(l.y1)+y;if(n==="line")return"M"+x+","+M+"L"+S+","+C;if(n==="rect")return"M"+x+","+M+"H"+S+"V"+C+"H"+x+"Z";var k=(x+S)/2,A=(M+C)/2,b=Math.abs(k-x),E=Math.abs(A-M),T="A"+b+","+E,F=k+b+","+A,D=k+","+(A-E);return"M"+F+T+" 0 1,1 "+D+T+" 0 0,1 "+F+"Z"};function a(s,l,n){let u=s.path,c=s.xsizemode,f=s.ysizemode,h=s.xanchor,d=s.yanchor,p=Array.isArray(s.xref),g=Array.isArray(s.yref);var m=0,y=0;return u.replace(r.segmentRE,function(_){var v=0,x=_.charAt(0),S=r.paramIsX[x],M=r.paramIsY[x],C=r.numParams[x];let w=S.drawn!==void 0,k=M.drawn!==void 0,A=p?l[m]:l,b=g?n[y]:n;var E=_.slice(1).replace(r.paramRE,function(T){return S[v]?c==="pixel"?T=A(h)+Number(T):T=A(T):M[v]&&(f==="pixel"?T=b(d)-Number(T):T=b(T)),v++,v>C&&(T="X"),T});return v>C&&(E=E.replace(/[\s,]*X.*/,""),t.log("Ignoring extra params in segment "+_)),w&&m++,k&&y++,x+E})}e.getPixelShift=o;function o(s,l){l=l||0;var n=0;return l&&s&&(s.type==="category"||s.type==="multicategory")&&(n=(s.r2p(1)-s.r2p(0))*l),n}}}),qE=de({"src/components/shapes/display_labels.js"(e,r){"use strict";var t=Qt(),i=nn(),a=Zo(),o=hn(),s=v0().readPaths,l=m0(),n=l.getPathString,u=_w(),c=Bl().FROM_TL;r.exports=function(p,g,m,y){if(y.selectAll(".shape-label").remove(),!!(m.label.text||m.label.texttemplate)){var _;if(m.label.texttemplate){var v={};if(m.type!=="path"){var x=i.getFromId(p,m.xref),S=i.getFromId(p,m.yref);let q=Array.isArray(m.xref),Y=Array.isArray(m.yref);for(var M in u){var C=typeof u[M]=="function",w=!q||u.simpleXVariables.includes(M),k=!Y||u.simpleYVariables.includes(M);if(C&&w&&k){var A=u[M](m,x,S);A!==void 0&&(v[M]=A)}}}_=t.texttemplateStringForShapes({data:[v],fallback:m.label.texttemplatefallback,locale:p._fullLayout._d3locale,template:m.label.texttemplate})}else _=m.label.text;var b={"data-index":g},E=m.label.font,T={"data-notex":1},F=y.append("g").attr(b).classed("shape-label",!0),D=F.append("text").attr(T).classed("shape-label-text",!0).text(_),R,P,z,I;if(m.path){var L=n(p,m),B=s(L,p);R=1/0,z=1/0,P=-1/0,I=-1/0;for(var O=0;O<B.length;O++)for(var G=0;G<B[O].length;G++)for(var W=B[O][G],X=1;X<W.length;X+=2){var Z=W[X],J=W[X+1];R=Math.min(R,Z),P=Math.max(P,Z),z=Math.min(z,J),I=Math.max(I,J)}}else{let q=Array.isArray(m.xref),Y=Array.isArray(m.yref),K=i.getFromId(p,q?m.xref[0]:m.xref),te=i.getFromId(p,q?m.xref[1]:m.xref),ne=i.getFromId(p,Y?m.yref[0]:m.yref),se=i.getFromId(p,Y?m.yref[1]:m.yref),le=i.getRefType(q?m.xref[0]:m.xref),ce=i.getRefType(q?m.xref[1]:m.xref),pe=i.getRefType(Y?m.yref[0]:m.yref),xe=i.getRefType(Y?m.yref[1]:m.yref),ye=(ae,ee,ie,Q)=>l.getDataToPixel(p,ie,ee,!1,Q)(ae),fe=(ae,ee,ie,Q)=>l.getDataToPixel(p,ie,ee,!0,Q)(ae);if(m.xsizemode==="pixel"){let ae=ye(m.xanchor,void 0,K,le),ee=l.getPixelShift(K,m.x0shift),ie=l.getPixelShift(K,m.x1shift);R=ae+m.x0+ee,P=ae+m.x1+ie}else R=ye(m.x0,m.x0shift,K,le),P=ye(m.x1,m.x1shift,te,ce);if(m.ysizemode==="pixel"){let ae=fe(m.yanchor,void 0,ne,pe),ee=l.getPixelShift(ne,m.y0shift),ie=l.getPixelShift(ne,m.y1shift);z=ae-m.y0+ee,I=ae-m.y1+ie}else z=fe(m.y0,m.y0shift,ne,pe),I=fe(m.y1,m.y1shift,se,xe)}var N=m.label.textangle;N==="auto"&&(m.type==="line"?N=f(R,z,P,I):N=0),D.call(function(q){return q.call(o.font,E).attr({}),a.convertToTspans(q,p),q});var H=o.bBox(D.node()),$=h(R,z,P,I,m,N,H),U=$.textx,V=$.texty,j=$.xanchor;D.attr({"text-anchor":{left:"start",center:"middle",right:"end"}[j],y:V,x:U,transform:"rotate("+N+","+U+","+V+")"}).call(a.positionText,U,V)}};function f(d,p,g,m){var y,_;return _=Math.abs(g-d),g>=d?y=p-m:y=m-p,-180/Math.PI*Math.atan2(y,_)}function h(d,p,g,m,y,_,v){var x=y.label.textposition,S=y.label.textangle,M=y.label.padding,C=y.type,w=Math.PI/180*_,k=Math.sin(w),A=Math.cos(w),b=y.label.xanchor,E=y.label.yanchor,T,F,D,R;if(C==="line"){x==="start"?(T=d,F=p):x==="end"?(T=g,F=m):(T=(d+g)/2,F=(p+m)/2),b==="auto"&&(x==="start"?S==="auto"?g>d?b="left":g<d?b="right":b="center":g>d?b="right":g<d?b="left":b="center":x==="end"?S==="auto"?g>d?b="right":g<d?b="left":b="center":g>d?b="left":g<d?b="right":b="center":b="center");var P={left:1,center:0,right:-1},z={bottom:-1,middle:0,top:1};if(S==="auto"){var I=z[E];D=-M*k*I,R=M*A*I}else{var L=P[b],B=z[E];D=M*L,R=M*B}T=T+D,F=F+R}else D=M+3,x.indexOf("right")!==-1?(T=Math.max(d,g)-D,b==="auto"&&(b="right")):x.indexOf("left")!==-1?(T=Math.min(d,g)+D,b==="auto"&&(b="left")):(T=(d+g)/2,b==="auto"&&(b="center")),x.indexOf("top")!==-1?F=Math.min(p,m):x.indexOf("bottom")!==-1?F=Math.max(p,m):F=(p+m)/2,R=M,E==="bottom"?F=F-R:E==="top"&&(F=F+R);var O=c[E],G=y.label.font.size,W=v.height,X=(W*O-G)*k,Z=-(W*O-G)*A;return{textx:T+X,texty:F+Z,xanchor:b}}}}),Dw=de({"src/components/shapes/display_outlines.js"(e,r){"use strict";var t=Qt(),i=t.strTranslate,a=Uc(),o=Xd(),s=o.drawMode,l=o.selectMode,n=Ma(),u=ta(),c=Ew(),f=c.i000,h=c.i090,d=c.i180,p=c.i270,g=f0(),m=g.clearOutlineControllers,y=v0(),_=y.pointsOnRectangle,v=y.pointsOnEllipse,x=y.writePaths,S=Cw().newShapes,M=Cw().createShapeObj,C=UE(),w=qE();r.exports=function E(T,F,D,R){R||(R=0);var P=D.gd;function z(){E(T,F,D,R++),(v(T[0])||D.hasText)&&I({redrawing:!0})}function I(fe){var ae={};D.isActiveShape!==void 0&&(D.isActiveShape=!1,ae=S(F,D)),D.isActiveSelection!==void 0&&(D.isActiveSelection=!1,ae=C(F,D),P._fullLayout._reselect=!0),Object.keys(ae).length&&n.call((fe||{}).redrawing?"relayout":"_guiRelayout",P,ae)}var L=P._fullLayout,B=L._zoomlayer,O=D.dragmode,G=s(O),W=l(O);(G||W)&&(P._fullLayout._outlining=!0),m(P),F.attr("d",x(T));var X,Z,J,N,H;if(!R&&(D.isActiveShape||D.isActiveSelection)){H=k([],T);var $=B.append("g").attr("class","outline-controllers");ne($),ye()}if(G&&D.hasText){var U=B.select(".label-temp"),V=M(F,D,D.dragmode);w(P,"label-temp",V,U)}function j(fe){J=+fe.srcElement.getAttribute("data-i"),N=+fe.srcElement.getAttribute("data-j"),X[J][N].moveFn=q}function q(fe,ae){if(T.length){var ee=H[J][N][1],ie=H[J][N][2],Q=T[J],ue=Q.length;if(_(Q)){var ge=fe,Me=ae;if(D.isActiveSelection){var Te=A(Q,N);Te[1]===Q[N][1]?Me=0:ge=0}for(var je=0;je<ue;je++)if(je!==N){var Ve=Q[je];Ve[1]===Q[N][1]&&(Ve[1]=ee+ge),Ve[2]===Q[N][2]&&(Ve[2]=ie+Me)}if(Q[N][1]=ee+ge,Q[N][2]=ie+Me,!_(Q))for(var Ze=0;Ze<ue;Ze++)for(var Ke=0;Ke<Q[Ze].length;Ke++)Q[Ze][Ke]=H[J][Ze][Ke]}else Q[N][1]=ee+fe,Q[N][2]=ie+ae;z()}}function Y(){I()}function K(){if(T.length&&T[J]&&T[J].length){for(var fe=[],ae=0;ae<T[J].length;ae++)ae!==N&&fe.push(T[J][ae]);fe.length>1&&!(fe.length===2&&fe[1][0]==="Z")&&(N===0&&(fe[0][0]="M"),T[J]=fe,z(),I())}}function te(fe,ae){if(fe===2){J=+ae.srcElement.getAttribute("data-i"),N=+ae.srcElement.getAttribute("data-j");var ee=T[J];!_(ee)&&!v(ee)&&K()}}function ne(fe){X=[];for(var ae=0;ae<T.length;ae++){var ee=T[ae],ie=_(ee),Q=!ie&&v(ee);X[ae]=[];for(var ue=ee.length,ge=0;ge<ue;ge++)if(ee[ge][0]!=="Z"&&!(Q&&ge!==f&&ge!==h&&ge!==d&&ge!==p)){var Me=ie&&D.isActiveSelection,Te;Me&&(Te=A(ee,ge));var je=ee[ge][1],Ve=ee[ge][2],Ze=fe.append(Me?"rect":"circle").attr("data-i",ae).attr("data-j",ge).style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,"shape-rendering":"crispEdges"});if(Me){var Ke=Te[1]-je,vt=Te[2]-Ve,xt=vt?5:Math.max(Math.min(25,Math.abs(Ke)-5),5),Pt=Ke?5:Math.max(Math.min(25,Math.abs(vt)-5),5);Ze.classed(vt?"cursor-ew-resize":"cursor-ns-resize",!0).attr("width",xt).attr("height",Pt).attr("x",je-xt/2).attr("y",Ve-Pt/2).attr("transform",i(Ke/2,vt/2))}else Ze.classed("cursor-grab",!0).attr("r",5).attr("cx",je).attr("cy",Ve);X[ae][ge]={element:Ze.node(),gd:P,prepFn:j,doneFn:Y,clickFn:te},a.init(X[ae][ge])}}}function se(fe,ae){if(T.length)for(var ee=0;ee<T.length;ee++)for(var ie=0;ie<T[ee].length;ie++)for(var Q=0;Q+2<T[ee][ie].length;Q+=2)T[ee][ie][Q+1]=H[ee][ie][Q+1]+fe,T[ee][ie][Q+2]=H[ee][ie][Q+2]+ae}function le(fe,ae){se(fe,ae),z()}function ce(fe){J=+fe.srcElement.getAttribute("data-i"),J||(J=0),Z[J].moveFn=le}function pe(){I()}function xe(fe){fe===2&&b(P)}function ye(){if(Z=[],!!T.length){var fe=0;Z[fe]={element:F[0][0],gd:P,prepFn:ce,doneFn:pe,clickFn:xe},a.init(Z[fe])}}};function k(E,T){for(var F=0;F<T.length;F++){var D=T[F];E[F]=[];for(var R=0;R<D.length;R++){E[F][R]=[];for(var P=0;P<D[R].length;P++)E[F][R][P]=D[R][P]}}return E}function A(E,T){var F=E[T][1],D=E[T][2],R=E.length,P,z,I;return P=(T+1)%R,z=E[P][1],I=E[P][2],z===F&&I===D&&(P=(T+2)%R,z=E[P][1],I=E[P][2]),[P,z,I]}function b(E){if(l(E._fullLayout.dragmode)){m(E);var T=E._fullLayout._activeSelectionIndex,F=(E.layout||{}).selections||[];if(T<F.length){for(var D=[],R=0;R<F.length;R++)R!==T&&D.push(F[R]);delete E._fullLayout._activeSelectionIndex;var P=E._fullLayout.selections[T];E._fullLayout._deselect={xref:P.xref,yref:P.yref},n.call("_guiRelayout",E,{selections:D})}}}}}),Lw=de({"src/components/shapes/draw.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Qt(),o=nn(),s=v0().readPaths,l=Dw(),n=qE(),u=f0().clearOutlineControllers,c=ta(),f=hn(),h=Ro().arrayEditor,d=Uc(),p=$s(),g=md(),m=Dy(),y=m0(),_=y.getPathString;r.exports={draw:v,drawOne:M,eraseActiveShape:F,drawLabel:n};function v(D){var R=D._fullLayout;R._shapeUpperLayer.selectAll("path").remove(),R._shapeLowerLayer.selectAll("path").remove(),R._shapeUpperLayer.selectAll("text").remove(),R._shapeLowerLayer.selectAll("text").remove();for(var P in R._plots){var z=R._plots[P].shapelayer;z&&(z.selectAll("path").remove(),z.selectAll("text").remove())}for(var I=0;I<R.shapes.length;I++)R.shapes[I].visible===!0&&M(D,I)}function x(D){return!!D._fullLayout._outlining}function S(D){return!D._context.edits.shapePosition}function M(D,R){D._fullLayout._paperdiv.selectAll('.shapelayer [data-index="'+R+'"]').remove();var P=y.makeShapesOptionsAndPlotinfo(D,R),z=P.options,I=P.plotinfo;if(!z._input||z.visible!==!0)return;let L=Array.isArray(z.xref)||Array.isArray(z.yref);if(z.layer==="above")O(D._fullLayout._shapeUpperLayer);else if(z.xref.includes("paper")||z.yref.includes("paper"))O(D._fullLayout._shapeLowerLayer);else if(z.layer==="between"&&!L)O(I.shapelayerBetween);else if(I._hadPlotinfo){var B=I.mainplotinfo||I;O(B.shapelayer)}else O(D._fullLayout._shapeLowerLayer);function O(G){var W=_(D,z),X={"data-index":R,"fill-rule":z.fillrule,d:W},Z=z.opacity,J=z.fillcolor,N=z.line.width?z.line.color:"rgba(0,0,0,0)",H=z.line.width,$=z.line.dash;!H&&z.editable===!0&&(H=5,$="solid");var U=W[W.length-1]!=="Z",V=S(D)&&z.editable&&D._fullLayout._activeShapeIndex===R;V&&(J=U?"rgba(0,0,0,0)":D._fullLayout.activeshape.fillcolor,Z=D._fullLayout.activeshape.opacity);var j=G.append("g").classed("shape-group",!0).attr({"data-index":R}),q=j.append("path").attr(X).style("opacity",Z).call(c.stroke,N).call(c.fill,J).call(f.dashLine,$,H);w(j,D,z),n(D,R,z,j);var Y;if((V||D._context.edits.shapePosition)&&(Y=h(D.layout,"shapes",z)),V){q.style({cursor:"move"});var K={element:q.node(),plotinfo:I,gd:D,editHelpers:Y,hasText:z.label.text||z.label.texttemplate,isActiveShape:!0},te=s(W,D);l(te,q,K)}else D._context.edits.shapePosition?A(D,q,z,R,G,Y):z.editable===!0&&q.style("pointer-events",U||c.opacity(J)*Z<=.5?"stroke":"all");q.node().addEventListener("click",function(){return E(D,q)}),C(D,q,I)}}function C(D,R,P){if(!P?.id)return;let z=R.node();function I(L){var B;let O=P.mainplotinfo||P,G=(B=O?.draglayer)==null?void 0:B.select(".nsewdrag").node();return G?{clientX:L.clientX,clientY:L.clientY,target:G}:null}z.addEventListener("mousemove",L=>{if(!D._dragging&&D._fullLayout.hoveranywhere){let B=I(L);B&&p.hover(D,B,P.id)}}),z.addEventListener("click",L=>{if(!D._dragged&&D._fullLayout.clickanywhere){let B=I(L);B&&p.click(D,B,P.id)}})}function w(D,R,P){let z=P.xref,I=P.yref;if(Array.isArray(z)||Array.isArray(I)){let L="clip"+R._fullLayout._uid+"shape"+P._index,B=k(R,z,I);a.ensureSingleById(R._fullLayout._clips,"clipPath",L,function(O){O.append("rect")}).select("rect").attr(B),f.setClipUrl(D,L,R)}else{let L=(z+I).replace(/paper/g,"").replace(/[xyz][0-9]* *domain/g,"");f.setClipUrl(D,L?"clip"+R._fullLayout._uid+L:null,R)}}function k(D,R,P){let z=D._fullLayout._size;function I(O,G){let W=(Array.isArray(O)?O:[O]).map(J=>o.getFromId(D,J)).filter(Boolean);if(!W.length)return G?[z.t,z.t+z.h]:[z.l,z.l+z.w];let X=W.map(function(J){return J._offset}),Z=W.map(function(J){return J._offset+J._length});return[Math.min(...X),Math.max(...Z)]}let L=I(R,!1),B=I(P,!0);return{x:L[0],y:B[0],width:L[1]-L[0],height:B[1]-B[0]}}function A(D,R,P,z,I,L){var B=10,O=10,G=P.xsizemode==="pixel",W=P.ysizemode==="pixel",X=P.type==="line",Z=P.type==="path",J=L.modifyItem,N,H,$,U,V,j,q,Y,K,te,ne,se,le,ce,pe,xe=t.select(R.node().parentNode),ye=o.getFromId(D,P.xref),fe=o.getRefType(P.xref),ae=o.getFromId(D,P.yref),ee=o.getRefType(P.yref),ie=P.x0shift,Q=P.x1shift,ue=P.y0shift,ge=P.y1shift,Me=function(Ee,De){var Je=y.getDataToPixel(D,ye,De,!1,fe);return Je(Ee)},Te=function(Ee,De){var Je=y.getDataToPixel(D,ae,De,!0,ee);return Je(Ee)},je=y.getPixelToData(D,ye,!1,fe),Ve=y.getPixelToData(D,ae,!0,ee),Ze=xt(),Ke={element:Ze.node(),gd:D,prepFn:Mt,doneFn:lt,clickFn:qe},vt;d.init(Ke),Ze.node().onmousemove=mt;function xt(){return X?Pt():R}function Pt(){var Ee=10,De=Math.max(P.line.width,Ee),Je=I.append("g").attr("data-index",z).attr("drag-helper",!0);Je.append("path").attr("d",R.attr("d")).style({cursor:"move","stroke-width":De,"stroke-opacity":"0"});var Ue={"fill-opacity":"0"},at=Math.max(De/2,Ee);return Je.append("circle").attr({"data-line-point":"start-point",cx:G?Me(P.xanchor)+P.x0:Me(P.x0,ie),cy:W?Te(P.yanchor)-P.y0:Te(P.y0,ue),r:at}).style(Ue).classed("cursor-grab",!0),Je.append("circle").attr({"data-line-point":"end-point",cx:G?Me(P.xanchor)+P.x1:Me(P.x1,Q),cy:W?Te(P.yanchor)-P.y1:Te(P.y1,ge),r:at}).style(Ue).classed("cursor-grab",!0),Je}function mt(Ee){if(x(D)){vt=null;return}if(X)Ee.target.tagName==="path"?vt="move":vt=Ee.target.attributes["data-line-point"].value==="start-point"?"resize-over-start-point":"resize-over-end-point";else{var De=Ke.element.getBoundingClientRect(),Je=De.right-De.left,Ue=De.bottom-De.top,at=Ee.clientX-De.left,rt=Ee.clientY-De.top,ft=!Z&&Je>B&&Ue>O&&!Ee.shiftKey?d.getCursor(at/Je,1-rt/Ue):"move";g(R,ft),vt=ft.split("-")[0]}}function Mt(Ee){x(D)||(G&&(V=Me(P.xanchor)),W&&(j=Te(P.yanchor)),P.type==="path"?pe=P.path:(N=G?P.x0:Me(P.x0),H=W?P.y0:Te(P.y0),$=G?P.x1:Me(P.x1),U=W?P.y1:Te(P.y1)),N<$?(K=N,le="x0",te=$,ce="x1"):(K=$,le="x1",te=N,ce="x0"),!W&&H<U||W&&H>U?(q=H,ne="y0",Y=U,se="y1"):(q=U,ne="y1",Y=H,se="y0"),mt(Ee),_e(I,P),ke(R,P,D),Ke.moveFn=vt==="move"?Ye:me,Ke.altKey=Ee.altKey)}function lt(){x(D)||(g(R),Ae(I),w(R,D,P),i.call("_guiRelayout",D,L.getUpdateObj()))}function qe(){x(D)||Ae(I)}function Ye(Ee,De){if(P.type==="path"){var Je=function(rt){return rt},Ue=Je,at=Je;G?J("xanchor",P.xanchor=je(V+Ee)):(Ue=function(ft){return je(Me(ft)+Ee)},ye&&ye.type==="date"&&(Ue=y.encodeDate(Ue))),W?J("yanchor",P.yanchor=Ve(j+De)):(at=function(ft){return Ve(Te(ft)+De)},ae&&ae.type==="date"&&(at=y.encodeDate(at))),J("path",P.path=b(pe,Ue,at))}else G?J("xanchor",P.xanchor=je(V+Ee)):(J("x0",P.x0=je(N+Ee)),J("x1",P.x1=je($+Ee))),W?J("yanchor",P.yanchor=Ve(j+De)):(J("y0",P.y0=Ve(H+De)),J("y1",P.y1=Ve(U+De)));R.attr("d",_(D,P)),_e(I,P),n(D,z,P,xe)}function me(Ee,De){if(Z){var Je=function(br){return br},Ue=Je,at=Je;G?J("xanchor",P.xanchor=je(V+Ee)):(Ue=function(Er){return je(Me(Er)+Ee)},ye&&ye.type==="date"&&(Ue=y.encodeDate(Ue))),W?J("yanchor",P.yanchor=Ve(j+De)):(at=function(Er){return Ve(Te(Er)+De)},ae&&ae.type==="date"&&(at=y.encodeDate(at))),J("path",P.path=b(pe,Ue,at))}else if(X){if(vt==="resize-over-start-point"){var rt=N+Ee,ft=W?H-De:H+De;J("x0",P.x0=G?rt:je(rt)),J("y0",P.y0=W?ft:Ve(ft))}else if(vt==="resize-over-end-point"){var At=$+Ee,ht=W?U-De:U+De;J("x1",P.x1=G?At:je(At)),J("y1",P.y1=W?ht:Ve(ht))}}else{var Gt=function(br){return vt.indexOf(br)!==-1},fr=Gt("n"),gt=Gt("s"),yt=Gt("w"),kt=Gt("e"),Lt=fr?q+De:q,Ct=gt?Y+De:Y,$t=yt?K+Ee:K,mr=kt?te+Ee:te;W&&(fr&&(Lt=q-De),gt&&(Ct=Y-De)),(!W&&Ct-Lt>O||W&&Lt-Ct>O)&&(J(ne,P[ne]=W?Lt:Ve(Lt)),J(se,P[se]=W?Ct:Ve(Ct))),mr-$t>B&&(J(le,P[le]=G?$t:je($t)),J(ce,P[ce]=G?mr:je(mr)))}R.attr("d",_(D,P)),_e(I,P),n(D,z,P,xe)}function _e(Ee,De){(G||W)&&Je();function Je(){var Ue=De.type!=="path",at=Ee.selectAll(".visual-cue").data([0]),rt=1;at.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":rt}).classed("visual-cue",!0);var ft=Me(G?De.xanchor:a.midRange(Ue?[De.x0,De.x1]:y.extractPathCoords(De.path,m.paramIsX))),At=Te(W?De.yanchor:a.midRange(Ue?[De.y0,De.y1]:y.extractPathCoords(De.path,m.paramIsY)));if(ft=y.roundPositionForSharpStrokeRendering(ft,rt),At=y.roundPositionForSharpStrokeRendering(At,rt),G&&W){var ht="M"+(ft-1-rt)+","+(At-1-rt)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";at.attr("d",ht)}else if(G){var Gt="M"+(ft-1-rt)+","+(At-9-rt)+"v18 h2 v-18 Z";at.attr("d",Gt)}else{var fr="M"+(ft-9-rt)+","+(At-1-rt)+"h18 v2 h-18 Z";at.attr("d",fr)}}}function Ae(Ee){Ee.selectAll(".visual-cue").remove()}function ke(Ee,De,Je){var Ue=De.xref,at=De.yref,rt=o.getFromId(Je,Ue),ft=o.getFromId(Je,at),At="";Ue!=="paper"&&!rt.autorange&&(At+=Ue),at!=="paper"&&!ft.autorange&&(At+=at),f.setClipUrl(Ee,At?"clip"+Je._fullLayout._uid+At:null,Je)}}function b(D,R,P){return D.replace(m.segmentRE,function(z){var I=0,L=z.charAt(0),B=m.paramIsX[L],O=m.paramIsY[L],G=m.numParams[L],W=z.slice(1).replace(m.paramRE,function(X){return I>=G||(B[I]?X=R(X):O[I]&&(X=P(X)),I++),X});return L+W})}function E(D,R){if(S(D)){var P=R.node(),z=+P.getAttribute("data-index");if(z>=0){if(z===D._fullLayout._activeShapeIndex){T(D);return}D._fullLayout._activeShapeIndex=z,D._fullLayout._deactivateShape=T,v(D)}}}function T(D){if(S(D)){var R=D._fullLayout._activeShapeIndex;R>=0&&(u(D),delete D._fullLayout._activeShapeIndex,v(D))}}function F(D){if(S(D)){u(D);var R=D._fullLayout._activeShapeIndex,P=(D.layout||{}).shapes||[];if(R<P.length){for(var z=[],I=0;I<P.length;I++)I!==R&&z.push(P[I]);return delete D._fullLayout._activeShapeIndex,i.call("_guiRelayout",D,{shapes:z})}}}}}),Eq=de({"src/components/modebar/share_chart/strings.js"(e,r){"use strict";var t=Qt()._,i=function(a){return{DIALOG_TITLE:t(a,"Share chart"),DIALOG_MESSAGE_CLOUD:t(a,"This chart will be uploaded to {Plotly Cloud} to create a sharing link. Only you can see it until you change its visibility."),DIALOG_MESSAGE_CLOUD_ACCOUNT:t(a,"If you don't have a Plotly Cloud account yet, you'll have a chance to create one."),DIALOG_MESSAGE_OTHER:t(a,"This chart will be sent to {serverUrl}."),DIALOG_CANCEL:t(a,"Cancel"),DIALOG_CONFIRM:t(a,"Share")}};r.exports=i}}),kq=de({"src/components/modebar/share_chart/dialog.js"(e,r){"use strict";var t=Yr(),{dfltConfig:i}=Na(),a=Eq(),o=(l,n,u,c,f)=>{let h=a(l),d=n.append("div").classed("plotly-cloud-dialog-box",!0);if(d.append("div").classed("plotly-cloud-dialog-title",!0).text(h.DIALOG_TITLE),u===i.plotlyServerURL){let g=d.append("div").classed("plotly-cloud-dialog-message",!0),m=new URL(u).origin,y=h.DIALOG_MESSAGE_CLOUD.split(/(\{|\})/),_=y[0],v=y[2],x=y[4];g.append("span").text(_),g.append("a").classed("plotly-cloud-dialog-message--hostname",!0).attr("href",m).attr("target","_blank").text(v),g.append("span").text(x),g.append("div").classed("plotly-cloud-dialog-message--account",!0).text(h.DIALOG_MESSAGE_CLOUD_ACCOUNT)}else{let g=new URL(u),m=g.hostname,y=g.origin,_=h.DIALOG_MESSAGE_OTHER.split(/(\{|\})/),v=_[0],x=_[4],S=d.append("div").classed("plotly-cloud-dialog-message",!0);S.append("span").text(v),S.append("a").classed("plotly-cloud-dialog-message--hostname",!0).attr("href",y).attr("target","_blank").text(m),S.append("span").text(x)}let p=d.append("div").classed("plotly-cloud-dialog-buttons",!0);p.append("button").classed("plotly-cloud-dialog-btn",!0).classed("plotly-cloud-dialog-btn--cancel",!0).text(h.DIALOG_CANCEL).on("click",f),p.append("button").classed("plotly-cloud-dialog-btn",!0).classed("plotly-cloud-dialog-btn--confirm",!0).text(h.DIALOG_CONFIRM).on("click",c)},s=(l,n,u)=>{let c=t.select(l._fullLayout._paperdiv.node());c.selectAll(".plotly-cloud-dialog").remove();let f=c.append("div").classed("plotly-cloud-dialog",!0),h=()=>{f.remove(),document.removeEventListener("keydown",d)},d=p=>{(p.key==="Escape"||p.keyCode===27)&&h()};document.addEventListener("keydown",d),f.on("click",()=>{t.event.target===f.node()&&h()}),o(l,f,n,()=>{h(),u()},h)};r.exports=s}}),VE=de({"src/components/modebar/buttons.js"(e,r){"use strict";var t=Ma(),i=Es(),a=Hs(),o=Sw(),s=Lw().eraseActiveShape,l=kq(),n=Qt(),u=n._,c=r.exports={};c.toImage={name:"toImage",title:function(w){var k=w._context.toImageButtonOptions||{},A=k.format||"png";return A==="png"?u(w,"Download plot as a PNG"):u(w,"Download plot")},icon:o.camera,click:function(w){var k=w._context.toImageButtonOptions,A={format:k.format||"png"};n.notifier(u(w,"Preparing image - this may take a few seconds"),"long",w),["filename","width","height","scale"].forEach(function(b){b in k&&(A[b]=k[b])}),t.call("downloadImage",w,A).then(function(b){n.notifier(u(w,"Image download succeeded")+" - "+b,"long",w)}).catch(function(){n.notifier(u(w,"Sorry, there was a problem downloading your image!"),"long",w)})}},c.downloadJson={name:"downloadJson",title:function(w){return u(w,"Download plot as JSON")},icon:o.curlybraces,click:function(w){t.call("downloadImage",w,{format:"full-json"}).then(function(k){n.notifier(u(w,"JSON download succeeded")+" - "+k,"long",w)}).catch(function(){n.notifier(u(w,"Sorry, there was a problem downloading your JSON file!"),"long",w)})}},c.sendChartToCloud={name:"sendChartToCloud",title:function(w){return u(w,"Share chart...")},icon:o.cloudupload,click:function(w){var k=(window.PLOTLYENV||{}).BASE_URL||w._context.plotlyServerURL;if(!k){console.error("No destination URL provided (plotlyServerURL is empty)");return}var A;try{A=new URL(k)}catch{console.error("Invalid plotlyServerURL: "+k);return}let b=["http:","https:"];if(!b.includes(A.protocol)){console.error(`Invalid protocol '${A.protocol}' in plotlyServerURL '${k}'. Must be one of: ${b.join(", ")}`);return}l(w,k,function(){i.sendDataToCloud(w,k)})}},c.zoom2d={name:"zoom2d",_cat:"zoom",title:function(w){return u(w,"Zoom")},attr:"dragmode",val:"zoom",icon:o.zoombox,click:f},c.pan2d={name:"pan2d",_cat:"pan",title:function(w){return u(w,"Pan")},attr:"dragmode",val:"pan",icon:o.pan,click:f},c.select2d={name:"select2d",_cat:"select",title:function(w){return u(w,"Box Select")},attr:"dragmode",val:"select",icon:o.selectbox,click:f},c.lasso2d={name:"lasso2d",_cat:"lasso",title:function(w){return u(w,"Lasso Select")},attr:"dragmode",val:"lasso",icon:o.lasso,click:f},c.drawclosedpath={name:"drawclosedpath",title:function(w){return u(w,"Draw closed freeform")},attr:"dragmode",val:"drawclosedpath",icon:o.drawclosedpath,click:f},c.drawopenpath={name:"drawopenpath",title:function(w){return u(w,"Draw open freeform")},attr:"dragmode",val:"drawopenpath",icon:o.drawopenpath,click:f},c.drawline={name:"drawline",title:function(w){return u(w,"Draw line")},attr:"dragmode",val:"drawline",icon:o.drawline,click:f},c.drawrect={name:"drawrect",title:function(w){return u(w,"Draw rectangle")},attr:"dragmode",val:"drawrect",icon:o.drawrect,click:f},c.drawcircle={name:"drawcircle",title:function(w){return u(w,"Draw circle")},attr:"dragmode",val:"drawcircle",icon:o.drawcircle,click:f},c.eraseshape={name:"eraseshape",title:function(w){return u(w,"Erase active shape")},icon:o.eraseshape,click:s},c.zoomIn2d={name:"zoomIn2d",_cat:"zoomin",title:function(w){return u(w,"Zoom in")},attr:"zoom",val:"in",icon:o.zoom_plus,click:f},c.zoomOut2d={name:"zoomOut2d",_cat:"zoomout",title:function(w){return u(w,"Zoom out")},attr:"zoom",val:"out",icon:o.zoom_minus,click:f},c.autoScale2d={name:"autoScale2d",_cat:"autoscale",title:function(w){return u(w,"Autoscale")},attr:"zoom",val:"auto",icon:o.autoscale,click:f},c.resetScale2d={name:"resetScale2d",_cat:"resetscale",title:function(w){return u(w,"Reset axes")},attr:"zoom",val:"reset",icon:o.home,click:f},c.hoverClosestCartesian={name:"hoverClosestCartesian",_cat:"hoverclosest",title:function(w){return u(w,"Show closest data on hover")},attr:"hovermode",val:"closest",icon:o.tooltip_basic,gravity:"ne",click:f},c.hoverCompareCartesian={name:"hoverCompareCartesian",_cat:"hoverCompare",title:function(w){return u(w,"Compare data on hover")},attr:"hovermode",val:function(w){return w._fullLayout._isHoriz?"y":"x"},icon:o.tooltip_compare,gravity:"ne",click:f};function f(w,k){var A=k.currentTarget,b=A.getAttribute("data-attr"),E=A.getAttribute("data-val")||!0,T=w._fullLayout,F={},D=a.list(w,null,!0),R=T._cartesianSpikesEnabled,P,z;if(b==="zoom"){var I=E==="in"?.5:2,L=(1+I)/2,B=(1-I)/2,O,G;for(z=0;z<D.length;z++)if(P=D[z],G=P.modebardisable==="none"||P.modebardisable.indexOf(E==="auto"||E==="reset"?"autoscale":"zoominout")===-1,G&&!P.fixedrange)if(O=P._name,E==="auto")F[O+".autorange"]=!0;else if(E==="reset")P._rangeInitial0===void 0&&P._rangeInitial1===void 0?F[O+".autorange"]=!0:P._rangeInitial0===void 0?(F[O+".autorange"]=P._autorangeInitial,F[O+".range"]=[null,P._rangeInitial1]):P._rangeInitial1===void 0?(F[O+".range"]=[P._rangeInitial0,null],F[O+".autorange"]=P._autorangeInitial):F[O+".range"]=[P._rangeInitial0,P._rangeInitial1],P._showSpikeInitial!==void 0&&(F[O+".showspikes"]=P._showSpikeInitial,R==="on"&&!P._showSpikeInitial&&(R="off"));else{var W=[P.r2l(P.range[0]),P.r2l(P.range[1])],X=[L*W[0]+B*W[1],L*W[1]+B*W[0]];F[O+".range[0]"]=P.l2r(X[0]),F[O+".range[1]"]=P.l2r(X[1])}}else b==="hovermode"&&(E==="x"||E==="y")&&(E=T._isHoriz?"y":"x",A.setAttribute("data-val",E)),F[b]=E;T._cartesianSpikesEnabled=R,t.call("_guiRelayout",w,F)}c.zoom3d={name:"zoom3d",_cat:"zoom",title:function(w){return u(w,"Zoom")},attr:"scene.dragmode",val:"zoom",icon:o.zoombox,click:h},c.pan3d={name:"pan3d",_cat:"pan",title:function(w){return u(w,"Pan")},attr:"scene.dragmode",val:"pan",icon:o.pan,click:h},c.orbitRotation={name:"orbitRotation",title:function(w){return u(w,"Orbital rotation")},attr:"scene.dragmode",val:"orbit",icon:o["3d_rotate"],click:h},c.tableRotation={name:"tableRotation",title:function(w){return u(w,"Turntable rotation")},attr:"scene.dragmode",val:"turntable",icon:o["z-axis"],click:h};function h(w,k){for(var A=k.currentTarget,b=A.getAttribute("data-attr"),E=A.getAttribute("data-val")||!0,T=w._fullLayout._subplots.gl3d||[],F={},D=b.split("."),R=0;R<T.length;R++)F[T[R]+"."+D[1]]=E;var P=E==="pan"?E:"zoom";F.dragmode=P,t.call("_guiRelayout",w,F)}c.resetCameraDefault3d={name:"resetCameraDefault3d",_cat:"resetCameraDefault",title:function(w){return u(w,"Reset camera to default")},attr:"resetDefault",icon:o.home,click:d},c.resetCameraLastSave3d={name:"resetCameraLastSave3d",_cat:"resetCameraLastSave",title:function(w){return u(w,"Reset camera to last save")},attr:"resetLastSave",icon:o.movie,click:d};function d(w,k){for(var A=k.currentTarget,b=A.getAttribute("data-attr"),E=b==="resetLastSave",T=b==="resetDefault",F=w._fullLayout,D=F._subplots.gl3d||[],R={},P=0;P<D.length;P++){var z=D[P],I=z+".camera",L=z+".aspectratio",B=z+".aspectmode",O=F[z]._scene,G;E?(R[I+".up"]=O.viewInitial.up,R[I+".eye"]=O.viewInitial.eye,R[I+".center"]=O.viewInitial.center,G=!0):T&&(R[I+".up"]=null,R[I+".eye"]=null,R[I+".center"]=null,G=!0),G&&(R[L+".x"]=O.viewInitial.aspectratio.x,R[L+".y"]=O.viewInitial.aspectratio.y,R[L+".z"]=O.viewInitial.aspectratio.z,R[B]=O.viewInitial.aspectmode)}t.call("_guiRelayout",w,R)}c.hoverClosest3d={name:"hoverClosest3d",_cat:"hoverclosest",title:function(w){return u(w,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:g};function p(w,k){var A=k.currentTarget,b=A._previousVal,E=w._fullLayout,T=E._subplots.gl3d||[],F=["xaxis","yaxis","zaxis"],D={},R={};if(b)R=b,A._previousVal=null;else{for(var P=0;P<T.length;P++){var z=T[P],I=E[z],L=z+".hovermode";D[L]=I.hovermode,R[L]=!1;for(var B=0;B<3;B++){var O=F[B],G=z+"."+O+".showspikes";R[G]=!1,D[G]=I[O].showspikes}}A._previousVal=D}return R}function g(w,k){var A=p(w,k);t.call("_guiRelayout",w,A)}c.zoomInGeo={name:"zoomInGeo",_cat:"zoomin",title:function(w){return u(w,"Zoom in")},attr:"zoom",val:"in",icon:o.zoom_plus,click:y},c.zoomOutGeo={name:"zoomOutGeo",_cat:"zoomout",title:function(w){return u(w,"Zoom out")},attr:"zoom",val:"out",icon:o.zoom_minus,click:y},c.resetGeo={name:"resetGeo",_cat:"reset",title:function(w){return u(w,"Reset")},attr:"reset",val:null,icon:o.autoscale,click:y},c.hoverClosestGeo={name:"hoverClosestGeo",_cat:"hoverclosest",title:function(w){return u(w,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:v};var m=2;function y(w,k){var A;let b=k.currentTarget,E=b.getAttribute("data-attr"),T=b.getAttribute("data-val")||!0,F=w._fullLayout,D=F._subplots.geo||[];for(let R of D){let P=F[R],z=P._subplot;if(E==="zoom"){let I=z.projection,L=I.scale()/z.fitScale,[B,O]=I.rotate().map($=>-$),[G,W]=I.invert(z.midPt),{minscale:X}=P.projection,Z=(A=P.projection.maxscale)!=null?A:1/0,J=Math.min(X,Z),N=Math.max(X,Z),H=T==="in"?m*L:1/m*L;H>N?H=N:H<J&&(H=J),H!==L&&t.call("_guiRelayout",w,{[R+".projection.scale"]:H,[R+".projection.rotation.lon"]:B,[R+".projection.rotation.lat"]:O,[R+".center.lon"]:G,[R+".center.lat"]:W,[R+".fitbounds"]:!1})}}E==="reset"&&C(w,"geo")}c.hoverClosestPie={name:"hoverClosestPie",_cat:"hoverclosest",title:function(w){return u(w,"Toggle show closest data on hover")},attr:"hovermode",val:"closest",icon:o.tooltip_basic,gravity:"ne",click:v};function _(w){var k=w._fullLayout;return k.hovermode?!1:k._has("cartesian")?k._isHoriz?"y":"x":"closest"}function v(w){var k=_(w);t.call("_guiRelayout",w,"hovermode",k)}c.resetViewSankey={name:"resetSankeyGroup",title:function(w){return u(w,"Reset view")},icon:o.home,click:function(w){for(var k={"node.groups":[],"node.x":[],"node.y":[]},A=0;A<w._fullData.length;A++){var b=w._fullData[A]._viewInitial;k["node.groups"].push(b.node.groups.slice()),k["node.x"].push(b.node.x.slice()),k["node.y"].push(b.node.y.slice())}t.call("restyle",w,k)}},c.toggleHover={name:"toggleHover",title:function(w){return u(w,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:o.tooltip_basic,gravity:"ne",click:function(w,k){var A=p(w,k);A.hovermode=_(w),t.call("_guiRelayout",w,A)}},c.resetViews={name:"resetViews",title:function(w){return u(w,"Reset views")},icon:o.home,click:function(w,k){var A=k.currentTarget;A.setAttribute("data-attr","zoom"),A.setAttribute("data-val","reset"),f(w,k),A.setAttribute("data-attr","resetLastSave"),d(w,k),C(w,"geo"),C(w,"map")}},c.toggleSpikelines={name:"toggleSpikelines",title:function(w){return u(w,"Toggle Spike Lines")},icon:o.spikeline,attr:"_cartesianSpikesEnabled",val:"on",click:function(w){var k=w._fullLayout,A=k._cartesianSpikesEnabled;k._cartesianSpikesEnabled=A==="on"?"off":"on",t.call("_guiRelayout",w,x(w))}};function x(w){for(var k=w._fullLayout,A=k._cartesianSpikesEnabled==="on",b=a.list(w,null,!0),E={},T=0;T<b.length;T++){var F=b[T];E[F._name+".showspikes"]=A?!0:F._showSpikeInitial}return E}c.resetViewMap={name:"resetViewMap",_cat:"resetView",title:function(w){return u(w,"Reset view")},attr:"reset",icon:o.home,click:function(w){C(w,"map")}},c.zoomInMap={name:"zoomInMap",_cat:"zoomin",title:function(w){return u(w,"Zoom in")},attr:"zoom",val:"in",icon:o.zoom_plus,click:S},c.zoomOutMap={name:"zoomOutMap",_cat:"zoomout",title:function(w){return u(w,"Zoom out")},attr:"zoom",val:"out",icon:o.zoom_minus,click:S};function S(w,k){M(w,k,"map")}function M(w,k,A){for(var b=k.currentTarget,E=b.getAttribute("data-val"),T=w._fullLayout,F=T._subplots[A]||[],D=1.05,R={},P=0;P<F.length;P++){var z=F[P],I=T[z].zoom,L=E==="in"?D*I:I/D;R[z+".zoom"]=L}t.call("_guiRelayout",w,R)}function C(w,k){for(var A=w._fullLayout,b=A._subplots[k]||[],E={},T=0;T<b.length;T++)for(var F=b[T],D=A[F]._subplot,R=D.viewInitial,P=Object.keys(R),z=0;z<P.length;z++){var I=P[z];E[F+"."+I]=R[I]}t.call("_guiRelayout",w,E)}}}),GE=de({"src/components/modebar/constants.js"(e,r){"use strict";var t=VE(),i=Object.keys(t),a=["drawline","drawopenpath","drawclosedpath","drawcircle","drawrect","eraseshape"],o=["v1hovermode","hoverclosest","hovercompare","togglehover","togglespikelines"].concat(a,["downloadJson"]),s=[],l=function(n){if(o.indexOf(n._cat||n.name)===-1){var u=n.name,c=(n._cat||n.name).toLowerCase();s.indexOf(u)===-1&&s.push(u),s.indexOf(c)===-1&&s.push(c)}};i.forEach(function(n){l(t[n])}),s.sort(),r.exports={DRAW_MODES:a,backButtons:o,foreButtons:s}}}),Fw={};Mr(Fw,{default:()=>$E});var Pw,HE,$E,WE=Ir({"src/components/modebar/attributes.ts"(){"use strict";Pw=Vr(GE()),HE={editType:"modebar",orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"modebar",description:"Sets the orientation of the modebar."},bgcolor:{valType:"color",editType:"modebar",description:"Sets the background color of the modebar."},color:{valType:"color",editType:"modebar",description:"Sets the color of the icons in the modebar."},activecolor:{valType:"color",editType:"modebar",description:"Sets the color of the active or hovered on icons in the modebar."},uirevision:{valType:"any",editType:"none",description:["Controls persistence of user-driven changes related to the modebar,","including `hovermode`, `dragmode`, and `showspikes` at both the","root level and inside subplots. Defaults to `layout.uirevision`."].join(" ")},add:{valType:"string",arrayOk:!0,dflt:"",editType:"modebar",description:["Determines which predefined modebar buttons to add.","Please note that these buttons will only be shown if they are","compatible with all trace types used in a graph.","Similar to `config.modeBarButtonsToAdd` option.",`This may include *${Pw.default.backButtons.join("*, *")}*.`].join(" ")},remove:{valType:"string",arrayOk:!0,dflt:"",editType:"modebar",description:["Determines which predefined modebar buttons to remove.","Similar to `config.modeBarButtonsToRemove` option.",`This may include *${Pw.default.foreButtons.join("*, *")}*.`].join(" ")}},$E=HE}}),Cq=de({"src/components/modebar/defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Ro(),o=(WE(),ti(Fw)).default;r.exports=function(l,n){var u=l.modebar||{},c=a.newContainer(n,"modebar");function f(d,p){return t.coerce(u,c,o,d,p)}f("orientation"),f("bgcolor",i.addOpacity(n.paper_bgcolor,.5));var h=i.contrast(i.rgb(n.modebar.bgcolor));f("color",i.addOpacity(h,.3)),f("activecolor",i.addOpacity(h,.7)),f("uirevision",n.uirevision),f("add"),f("remove")}}}),Dq=de({"src/components/modebar/modebar.js"(e,r){"use strict";var t=Yr(),i=da(),a=Qt(),o=Sw(),s=_i().version,l=new DOMParser;function n(h){this.container=h.container,this.element=document.createElement("div"),this.update(h.graphInfo,h.buttons),this.container.appendChild(this.element)}var u=n.prototype;u.update=function(h,d){this.graphInfo=h;var p=this.graphInfo._context,g=this.graphInfo._fullLayout,m="modebar-"+g._uid;this.element.setAttribute("id",m),this.element.setAttribute("role","toolbar"),this._uid=m,this.element.className="modebar modebar--custom",p.displayModeBar==="hover"&&(this.element.className+=" modebar--hover ease-bg"),g.modebar.orientation==="v"&&(this.element.className+=" vertical",d=d.reverse());var y=g.modebar,_="#"+m+" .modebar-group";document.querySelectorAll(_).forEach(function(C){C.style.backgroundColor=y.bgcolor});var v=!this.hasButtons(d),x=this.hasLogo!==p.displaylogo,S=this.locale!==p.locale;if(this.locale=p.locale,(v||x||S)&&(this.removeAllButtons(),this.updateButtons(d),p.watermark||p.displaylogo)){var M=this.getLogo();p.watermark&&(M.className=M.className+" watermark"),g.modebar.orientation==="v"?this.element.insertBefore(M,this.element.childNodes[0]):this.element.appendChild(M),this.hasLogo=!0}this.updateActiveButton(),a.setStyleOnHover("#"+m+" .modebar-btn",".active",".icon path","fill: "+y.activecolor,"fill: "+y.color,this.element)},u.updateButtons=function(h){var d=this;this.buttons=h,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(p){var g=d.createGroup();p.forEach(function(m){var y=m.name;if(!y)throw new Error("must provide button 'name' in button config");if(d.buttonsNames.indexOf(y)!==-1)throw new Error("button name '"+y+"' is taken");d.buttonsNames.push(y);var _=d.createButton(m);d.buttonElements.push(_),g.appendChild(_)}),d.element.appendChild(g)})},u.createGroup=function(){var h=document.createElement("div");h.className="modebar-group";var d=this.graphInfo._fullLayout.modebar;return h.style.backgroundColor=d.bgcolor,h},u.createButton=function(h){var d=this,p=document.createElement("button");p.setAttribute("type","button"),p.setAttribute("rel","tooltip"),p.className="modebar-btn";var g=h.title;g===void 0?g=h.name:typeof g=="function"&&(g=g(this.graphInfo)),(g||g===0)&&(p.setAttribute("data-title",g),p.setAttribute("aria-label",g)),h.attr!==void 0&&p.setAttribute("data-attr",h.attr);var m=h.val;m!==void 0&&(typeof m=="function"&&(m=m(this.graphInfo)),p.setAttribute("data-val",m));var y=h.click;if(typeof y!="function")throw new Error("must provide button 'click' function in button config");p.addEventListener("click",function(v){h.click(d.graphInfo,v),d.updateActiveButton(v.currentTarget)}),p.setAttribute("data-toggle",h.toggle||!1),h.toggle&&t.select(p).classed("active",!0);var _=h.icon;return typeof _=="function"?p.appendChild(_()):p.appendChild(this.createIcon(_||o.question)),p.setAttribute("data-gravity",h.gravity||"n"),p},u.createIcon=function(h){var d=i(h.height)?Number(h.height):h.ascent-h.descent,p="http://www.w3.org/2000/svg",g;if(h.path){g=document.createElementNS(p,"svg"),g.setAttribute("viewBox",[0,0,h.width,d].join(" ")),g.setAttribute("class","icon");var m=document.createElementNS(p,"path");m.setAttribute("d",h.path),h.transform?m.setAttribute("transform",h.transform):h.ascent!==void 0&&m.setAttribute("transform","matrix(1 0 0 -1 0 "+h.ascent+")"),g.appendChild(m)}if(h.svg){var y=l.parseFromString(h.svg,"application/xml");g=y.childNodes[0]}return g.setAttribute("height","1em"),g.setAttribute("width","1em"),g},u.updateActiveButton=function(h){var d=this.graphInfo._fullLayout,p=h!==void 0?h.getAttribute("data-attr"):null;this.buttonElements.forEach(function(g){var m=g.getAttribute("data-val")||!0,y=g.getAttribute("data-attr"),_=g.getAttribute("data-toggle")==="true",v=t.select(g),x=function(C,w){var k=d.modebar,A=C.querySelector(".icon path");A&&(w||C.matches(":hover")?A.style.fill=k.activecolor:A.style.fill=k.color)};if(_){if(y===p){var S=!v.classed("active");v.classed("active",S),x(g,S)}}else{var M=y===null?y:a.nestedProperty(d,y).get();v.classed("active",M===m),x(g,M===m)}})},u.hasButtons=function(h){var d=this.buttons;if(!d||h.length!==d.length)return!1;for(var p=0;p<h.length;++p){if(h[p].length!==d[p].length)return!1;for(var g=0;g<h[p].length;g++)if(h[p][g].name!==d[p][g].name)return!1}return!0};function c(h){return h+" (v"+s+")"}u.getLogo=function(){var h=this.createGroup(),d=document.createElement("a");return d.href="https://plotly.com/",d.target="_blank",d.setAttribute("data-title",c(a._(this.graphInfo,"Produced with Plotly.js"))),d.className="modebar-btn plotlyjsicon modebar-btn--logo",d.appendChild(this.createIcon(o.newplotlylogo)),h.appendChild(d),h},u.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},u.destroy=function(){a.removeElement(this.container.querySelector(".modebar"))};function f(h,d){var p=h._fullLayout,g=new n({graphInfo:h,container:p._modebardiv.node(),buttons:d});return p._privateplot&&t.select(g.element).append("span").classed("badge-private float--left",!0).text("PRIVATE"),g}r.exports=f}}),Lq=de({"src/components/modebar/manage.js"(e,r){"use strict";var t=Hs(),i=bs(),a=Ma(),o=sf().isUnifiedHover,s=Dq(),l=VE(),n=GE().DRAW_MODES,u=Qt().extendDeep;r.exports=function(y){var _=y._fullLayout,v=y._context,x=_._modeBar;if(!v.displayModeBar&&!v.watermark){x&&(x.destroy(),delete _._modeBar);return}if(!Array.isArray(v.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(v.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var S=v.modeBarButtons,M;Array.isArray(S)&&S.length?M=g(S):!v.displayModeBar&&v.watermark?M=[]:M=c(y),x?x.update(y,M):_._modeBar=s(y,M)};function c(m){var y=m._fullLayout,_=m._fullData,v=m._context;function x(q,Y){if(typeof Y=="string"){if(Y.toLowerCase()===q.toLowerCase())return!0}else{var K=Y.name,te=Y._cat||Y.name;if(K===q||te===q.toLowerCase())return!0}return!1}var S=y.modebar.add;typeof S=="string"&&(S=[S]);var M=y.modebar.remove;typeof M=="string"&&(M=[M]);var C=v.modeBarButtonsToAdd.concat(S.filter(function(q){for(var Y=0;Y<v.modeBarButtonsToRemove.length;Y++)if(x(q,v.modeBarButtonsToRemove[Y]))return!1;return!0})),w=v.modeBarButtonsToRemove.concat(M.filter(function(q){for(var Y=0;Y<v.modeBarButtonsToAdd.length;Y++)if(x(q,v.modeBarButtonsToAdd[Y]))return!1;return!0})),k=y._has("cartesian"),A=y._has("gl3d"),b=y._has("geo"),E=y._has("pie"),T=y._has("funnelarea"),F=y._has("ternary"),D=y._has("map"),R=y._has("polar"),P=y._has("smith"),z=y._has("sankey"),I=f(y),L=o(y.hovermode),B=[];function O(q){if(q.length){for(var Y=[],K=0;K<q.length;K++){for(var te=q[K],ne=l[te],se=ne.name.toLowerCase(),le=(ne._cat||ne.name).toLowerCase(),ce=!1,pe=0;pe<w.length;pe++){var xe=w[pe].toLowerCase();if(xe===se||xe===le){ce=!0;break}}ce||Y.push(l[te])}B.push(Y)}}var G=!1,W=[],X=[],Z=[],J=[];(k||E||T||F)+b+A+D+R+P>1?(X=["toggleHover"],Z=["resetViews"]):b?(W=["zoomInGeo","zoomOutGeo"],X=["hoverClosestGeo"],Z=["resetGeo"]):A?(X=["hoverClosest3d"],Z=["resetCameraDefault3d","resetCameraLastSave3d"]):D?(W=["zoomInMap","zoomOutMap"],X=["toggleHover"],Z=["resetViewMap"]):E?X=["hoverClosestPie"]:z?(X=["hoverClosestCartesian","hoverCompareCartesian"],Z=["resetViewSankey"]):X=["toggleHover"],k&&X.push("toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"),(d(_)||L)&&(X=[]),k&&!I&&(W=["zoomIn2d","zoomOut2d","autoScale2d"],Z[0]!=="resetViews"&&(Z=["resetScale2d"])),A?J=["zoom3d","pan3d","orbitRotation","tableRotation"]:k&&!I||F?J=["zoom2d","pan2d"]:D||b?J=["pan2d"]:R&&(J=["zoom2d"]),h(_)&&J.push("select2d","lasso2d");var N=[],H=function(q){N.indexOf(q)===-1&&X.indexOf(q)!==-1&&N.push(q)};if(Array.isArray(C)){for(var $=[],U=0;U<C.length;U++){var V=C[U];typeof V=="string"?(V=V.toLowerCase(),n.indexOf(V)!==-1?(y._has("map")||y._has("cartesian"))&&J.push(V):V==="togglespikelines"?H("toggleSpikelines"):V==="togglehover"?H("toggleHover"):V==="hovercompare"?H("hoverCompareCartesian"):V==="hoverclosest"?(H("hoverClosestCartesian"),H("hoverClosestGeo"),H("hoverClosest3d"),H("hoverClosestPie")):V==="v1hovermode"?(H("hoverClosestCartesian"),H("hoverCompareCartesian"),H("hoverClosestGeo"),H("hoverClosest3d"),H("hoverClosestPie")):V==="downloadjson"&&(G=!0)):$.push(V)}C=$}var j=["toImage"];return G&&j.push("downloadJson"),v.showSendToCloud&&j.push("sendChartToCloud"),O(j),O(J),O(W.concat(Z)),O(N),p(B,C)}function f(m){for(var y=t.list({_fullLayout:m},null,!0),_=0;_<y.length;_++){var v=y[_].modebardisable;if(!y[_].fixedrange&&v!=="autoscale+zoominout"&&v!=="zoominout+autoscale")return!1}return!0}function h(m){for(var y=!1,_=0;_<m.length&&!y;_++){var v=m[_];!v._module||!v._module.selectPoints||(a.traceIs(v,"scatter-like")&&v.type!=="quiver"?(i.hasMarkers(v)||i.hasText(v))&&(y=!0):a.traceIs(v,"box-violin")?(v.boxpoints==="all"||v.points==="all")&&(y=!0):y=!0)}return y}function d(m){for(var y=0;y<m.length;y++)if(!a.traceIs(m[y],"noHover"))return!1;return!0}function p(m,y){if(y.length)if(Array.isArray(y[0]))for(var _=0;_<y.length;_++)m.push(y[_]);else m.push(y);return m}function g(m){for(var y=u([],m),_=0;_<y.length;_++)for(var v=y[_],x=0;x<v.length;x++){var S=v[x];if(typeof S=="string")if(l[S]!==void 0)y[_][x]=l[S];else throw new Error(["*modeBarButtons* configuration options","invalid button name"].join(" "))}return y}}}),YE=de({"src/components/modebar/index.js"(e,r){"use strict";r.exports={moduleType:"component",name:"modebar",layoutAttributes:(WE(),ti(Fw)).default,supplyLayoutDefaults:Cq(),manage:Lq()}}}),XE=de({"src/plots/cartesian/scale_zoom.js"(e,r){"use strict";var t=Bl().FROM_BL;r.exports=function(a,o,s){s===void 0&&(s=t[a.constraintoward||"center"]);var l=[a.r2l(a.range[0]),a.r2l(a.range[1])],n=l[0]+(l[1]-l[0])*s;a.range=a._input.range=[a.l2r(n+(l[0]-n)*o),a.l2r(n+(l[1]-n)*o)],a.setScale()}}}),bv=de({"src/plots/cartesian/constraints.js"(e){"use strict";var r=Qt(),t=vd(),i=Hs().id2name,a=Mu(),o=XE(),s=Yd(),l=cn().ALMOST_EQUAL,n=Bl().FROM_BL;e.handleDefaults=function(m,y,_){var v=_.axIds,x=_.axHasImage,S=y._axisConstraintGroups=[],M=y._axisMatchGroups=[],C,w,k,A,b,E,T,F;for(C=0;C<v.length;C++)A=i(v[C]),b=m[A],E=y[A],u(b,E,{axIds:v,layoutOut:y,hasImage:x[A]});function D(W,X){for(C=0;C<W.length;C++){w=W[C];for(k in w)y[i(k)][X]=w}}for(D(M,"_matchGroup"),C=0;C<S.length;C++){w=S[C];for(k in w)if(E=y[i(k)],E.fixedrange){for(var R in w){var P=i(R);(m[P]||{}).fixedrange===!1&&r.warn("fixedrange was specified as false for axis "+P+" but was overridden because another axis in its constraint group has fixedrange true"),y[P].fixedrange=!0}break}}for(C=0;C<S.length;){w=S[C];for(k in w){E=y[i(k)],E._matchGroup&&Object.keys(E._matchGroup).length===Object.keys(w).length&&(S.splice(C,1),C--);break}C++}D(S,"_constraintGroup");var z=["constrain","range","autorange","rangemode","rangebreaks","categoryorder","categoryarray"],I=!1,L=!1;function B(){F=E[T],T==="rangebreaks"&&(L=E._hasDayOfWeekBreaks)}for(C=0;C<M.length;C++){w=M[C];for(var O=0;O<z.length;O++){T=z[O],F=null;var G;for(k in w)if(A=i(k),b=m[A],E=y[A],T in E){if(!E.matches&&(G=E,T in b)){B();break}F===null&&T in b&&B()}if(T==="range"&&F&&b.range&&b.range.length===2&&b.range[0]!==null&&b.range[1]!==null&&(I=!0),T==="autorange"&&F===null&&I&&(F=!1),F===null&&T in G&&(F=G[T]),F!==null)for(k in w)E=y[i(k)],E[T]=T==="range"?F.slice():F,T==="rangebreaks"&&(E._hasDayOfWeekBreaks=L,s(E,y))}}};function u(m,y,_){var v=_.axIds,x=_.layoutOut,S=_.hasImage,M=x._axisConstraintGroups,C=x._axisMatchGroups,w=y._id,k=w.charAt(0),A=((x._splomAxes||{})[k]||{})[w]||{},b=y._id,E=b.charAt(0)==="x";y._matchGroup=null,y._constraintGroup=null;function T(N,H){return r.coerce(m,y,a,N,H)}T("constrain",S?"domain":"range"),r.coerce(m,y,{constraintoward:{valType:"enumerated",values:E?["left","center","right"]:["bottom","middle","top"],dflt:E?"center":"middle"}},"constraintoward");var F=y.type,D,R,P=[];for(D=0;D<v.length;D++)if(R=v[D],R!==b){var z=x[i(R)];z.type===F&&P.push(R)}var I=f(M,b);if(I){var L=[];for(D=0;D<P.length;D++)R=P[D],I[R]||L.push(R);P=L}var B=P.length,O,G;B&&(m.matches||A.matches)&&(O=r.coerce(m,y,{matches:{valType:"enumerated",values:P,dflt:P.indexOf(A.matches)!==-1?A.matches:void 0}},"matches"));var W=S&&!E?y.anchor:void 0;if(B&&!O&&(m.scaleanchor||W)&&(G=r.coerce(m,y,{scaleanchor:{valType:"enumerated",values:P.concat([!1])}},"scaleanchor",W)),O){y._matchGroup=h(C,b,O,1);var X=x[i(O)],Z=c(x,y)/c(x,X);E!==(O.charAt(0)==="x")&&(Z=(E?"x":"y")+Z),h(M,b,O,Z)}else m.matches&&v.indexOf(m.matches)!==-1&&r.warn("ignored "+y._name+'.matches: "'+m.matches+'" to avoid an infinite loop');if(G){var J=T("scaleratio");J||(J=y.scaleratio=1),h(M,b,G,J)}else m.scaleanchor&&v.indexOf(m.scaleanchor)!==-1&&r.warn("ignored "+y._name+'.scaleanchor: "'+m.scaleanchor+'" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.')}function c(m,y){var _=y.domain;return _||(_=m[i(y.overlaying)].domain),_[1]-_[0]}function f(m,y){for(var _=0;_<m.length;_++)if(m[_][y])return m[_];return null}function h(m,y,_,v){var x,S,M,C,w,k=f(m,y);k===null?(k={},k[y]=1,w=m.length,m.push(k)):w=m.indexOf(k);var A=Object.keys(k);for(x=0;x<m.length;x++)if(M=m[x],x!==w&&M[_]){var b=M[_];for(S=0;S<A.length;S++)C=A[S],M[C]=d(b,d(v,k[C]));m.splice(w,1);return}if(v!==1)for(S=0;S<A.length;S++){var E=A[S];k[E]=d(v,k[E])}k[_]=1}function d(m,y){var _="",v="",x,S;typeof m=="string"&&(_=m.match(/^[xy]*/)[0],x=_.length,m=+m.slice(x)),typeof y=="string"&&(v=y.match(/^[xy]*/)[0],S=v.length,y=+y.slice(S));var M=m*y;return!x&&!S?M:!x||!S||_.charAt(0)===v.charAt(0)?_+v+m*y:x===S?M:(x>S?_.slice(S):v.slice(x))+M}function p(m,y){for(var _=y._size,v=_.h/_.w,x={},S=Object.keys(m),M=0;M<S.length;M++){var C=S[M],w=m[C];if(typeof w=="string"){var k=w.match(/^[xy]*/)[0],A=k.length;w=+w.slice(A);for(var b=k.charAt(0)==="y"?v:1/v,E=0;E<A;E++)w*=b}x[C]=w}return x}e.enforce=function(y){var _=y._fullLayout,v=_._axisConstraintGroups||[],x,S,M,C,w,k,A,b;for(x=0;x<v.length;x++){M=p(v[x],_);var E=Object.keys(M),T=1/0,F=0,D=1/0,R={},P={},z=!1;for(S=0;S<E.length;S++)C=E[S],P[C]=w=_[i(C)],w._inputDomain?w.domain=w._inputDomain.slice():w._inputDomain=w.domain.slice(),w._inputRange||(w._inputRange=w.range.slice()),w.setScale(),R[C]=k=Math.abs(w._m)/M[C],T=Math.min(T,k),(w.constrain==="domain"||!w._constraintShrinkable)&&(D=Math.min(D,k)),delete w._constraintShrinkable,F=Math.max(F,k),w.constrain==="domain"&&(z=!0);if(!(T>l*F&&!z)){for(S=0;S<E.length;S++)if(C=E[S],k=R[C],w=P[C],A=w.constrain,k!==D||A==="domain")if(b=k/D,A==="range")o(w,b);else{var I=w._inputDomain,L=(w.domain[1]-w.domain[0])/(I[1]-I[0]),B=(w.r2l(w.range[1])-w.r2l(w.range[0]))/(w.r2l(w._inputRange[1])-w.r2l(w._inputRange[0]));if(b/=L,b*B<1){w.domain=w._input.domain=I.slice(),o(w,b);continue}if(B<1&&(w.range=w._input.range=w._inputRange.slice(),b*=B),w.autorange){var O=w.r2l(w.range[0]),G=w.r2l(w.range[1]),W=(O+G)/2,X=W,Z=W,J=Math.abs(G-W),N=W-J*b*1.0001,H=W+J*b*1.0001,$=t.makePadFn(_,w,0),U=t.makePadFn(_,w,1);g(w,b);var V=Math.abs(w._m),j=t.concatExtremes(y,w),q=j.min,Y=j.max,K,te;for(te=0;te<q.length;te++)K=q[te].val-$(q[te])/V,K>N&&K<X&&(X=K);for(te=0;te<Y.length;te++)K=Y[te].val+U(Y[te])/V,K<H&&K>Z&&(Z=K);var ne=(Z-X)/(2*J);b/=ne,X=w.l2r(X),Z=w.l2r(Z),w.range=w._input.range=O<G?[X,Z]:[Z,X]}g(w,b)}}}},e.getAxisGroup=function(y,_){for(var v=y._axisMatchGroups,x=0;x<v.length;x++){var S=v[x];if(S[_])return"g"+x}return _},e.clean=function(y,_){if(_._inputDomain){for(var v=!1,x=_._id,S=y._fullLayout._axisConstraintGroups,M=0;M<S.length;M++)if(S[M][x]){v=!0;break}(!v||_.constrain!=="domain")&&(_._input.domain=_.domain=_._inputDomain,delete _._inputDomain)}};function g(m,y){var _=m._inputDomain,v=n[m.constraintoward],x=_[0]+(_[1]-_[0])*v;m.domain=m._input.domain=[x+(_[0]-x)/y,x+(_[1]-x)/y],m.setScale()}}}),Ly=de({"src/plot_api/subroutines.js"(e){"use strict";var r=Yr(),t=Ma(),i=Es(),a=Qt(),o=Zo(),s=Cy(),l=ta(),n=hn(),u=xv(),c=YE(),f=nn(),h=Bl(),d=bv(),p=d.enforce,g=d.clean,m=vd().doAutoRange,y="start",_="middle",v="end",x=zl().zindexSeparator;e.layoutStyles=function(I){return a.syncOrAsync([i.doAutoMargin,M],I)};function S(I,L,B){for(var O=0;O<B.length;O++){var G=B[O][0],W=B[O][1];if(!(G[0]>=I[1]||G[1]<=I[0])&&W[0]<L[1]&&W[1]>L[0])return!0}return!1}function M(I){var L=I._fullLayout,B=L._size,O=B.p,G=f.list(I,"",!0),W,X,Z,J,N,H;if(L._paperdiv.style({width:I._context.responsive&&L.autosize&&!I._context._hasZeroWidth&&!I.layout.width?"100%":L.width+"px",height:I._context.responsive&&L.autosize&&!I._context._hasZeroHeight&&!I.layout.height?"100%":L.height+"px"}).selectAll(".main-svg").call(n.setSize,L.width,L.height),I._context.setBackground(I,L.paper_bgcolor),e.drawMainTitle(I),c.manage(I),!L._has("cartesian"))return i.previousPromises(I);function $(me,_e,Ae){var ke=me._lw/2;if(me._id.charAt(0)==="x"){if(_e){if(Ae==="top")return _e._offset-O-ke}else return B.t+B.h*(1-(me.position||0))+ke%1;return _e._offset+_e._length+O+ke}if(_e){if(Ae==="right")return _e._offset+_e._length+O+ke}else return B.l+B.w*(me.position||0)+ke%1;return _e._offset-O-ke}for(W=0;W<G.length;W++){J=G[W];var U=J._anchorAxis;J._linepositions={},J._lw=n.crispRound(I,J.linewidth,1),J._mainLinePosition=$(J,U,J.side),J._mainMirrorPosition=J.mirror&&U?$(J,U,h.OPPOSITE_SIDE[J.side]):null}var V=[],j=[],q=[],Y=l.opacity(L.paper_bgcolor)===1&&l.opacity(L.plot_bgcolor)===1&&L.paper_bgcolor===L.plot_bgcolor;for(X in L._plots)if(Z=L._plots[X],Z.mainplot)Z.bg&&Z.bg.remove(),Z.bg=void 0;else{var K=Z.xaxis.domain,te=Z.yaxis.domain,ne=Z.plotgroup;if(S(K,te,q)&&X.indexOf(x)===-1){var se=ne.node(),le=Z.bg=a.ensureSingle(ne,"rect","bg");se.insertBefore(le.node(),se.childNodes[0]),j.push(X)}else ne.select("rect.bg").remove(),q.push([K,te]),Y||(V.push(X),j.push(X))}var ce=L._bgLayer.selectAll(".bg").data(V);for(ce.enter().append("rect").classed("bg",!0),ce.exit().remove(),ce.each(function(me){L._plots[me].bg=r.select(this)}),W=0;W<j.length;W++)Z=L._plots[j[W]],N=Z.xaxis,H=Z.yaxis,Z.bg&&N._offset!==void 0&&H._offset!==void 0&&Z.bg.call(n.setRect,N._offset-O,H._offset-O,N._length+2*O,H._length+2*O).call(l.fill,L.plot_bgcolor).style("stroke-width",0);if(!L._hasOnlyLargeSploms)for(X in L._plots){Z=L._plots[X],N=Z.xaxis,H=Z.yaxis;var pe=Z.clipId="clip"+L._uid+X+"plot",xe=a.ensureSingleById(L._clips,"clipPath",pe,function(me){me.classed("plotclip",!0).append("rect")});Z.clipRect=xe.select("rect").attr({width:N._length,height:H._length}),n.setTranslate(Z.plot,N._offset,H._offset);var ye,fe;Z._hasClipOnAxisFalse?(ye=null,fe=pe):(ye=pe,fe=null),n.setClipUrl(Z.plot,ye,I),Z.layerClipId=fe}var ae,ee,ie,Q,ue,ge,Me,Te,je,Ve,Ze,Ke,vt;function xt(me){return"M"+ae+","+me+"H"+ee}function Pt(me){return"M"+N._offset+","+me+"h"+N._length}function mt(me){return"M"+me+","+Te+"V"+Me}function Mt(me){return H._shift!==void 0&&(me+=H._shift),"M"+me+","+H._offset+"v"+H._length}function lt(me,_e,Ae){if(!me.showline||X!==me._mainSubplot)return"";if(!me._anchorAxis)return Ae(me._mainLinePosition);var ke=_e(me._mainLinePosition);return me.mirror&&(ke+=_e(me._mainMirrorPosition)),ke}for(X in L._plots){Z=L._plots[X],N=Z.xaxis,H=Z.yaxis;var qe="M0,0";C(N,X)&&(ue=k(N,"left",H,G),ae=N._offset-(ue?O+ue:0),ge=k(N,"right",H,G),ee=N._offset+N._length+(ge?O+ge:0),ie=$(N,H,"bottom"),Q=$(N,H,"top"),vt=!N._anchorAxis||X!==N._mainSubplot,vt&&(N.mirror==="allticks"||N.mirror==="all")&&(N._linepositions[X]=[ie,Q]),qe=lt(N,xt,Pt),vt&&N.showline&&(N.mirror==="all"||N.mirror==="allticks")&&(qe+=xt(ie)+xt(Q)),Z.xlines.style("stroke-width",N._lw+"px").call(l.stroke,N.showline?N.linecolor:"rgba(0,0,0,0)")),Z.xlines.attr("d",qe);var Ye="M0,0";C(H,X)&&(Ze=k(H,"bottom",N,G),Me=H._offset+H._length+(Ze?O:0),Ke=k(H,"top",N,G),Te=H._offset-(Ke?O:0),je=$(H,N,"left"),Ve=$(H,N,"right"),vt=!H._anchorAxis||X!==H._mainSubplot,vt&&(H.mirror==="allticks"||H.mirror==="all")&&(H._linepositions[X]=[je,Ve]),Ye=lt(H,mt,Mt),vt&&H.showline&&(H.mirror==="all"||H.mirror==="allticks")&&(Ye+=mt(je)+mt(Ve)),Z.ylines.style("stroke-width",H._lw+"px").call(l.stroke,H.showline?H.linecolor:"rgba(0,0,0,0)")),Z.ylines.attr("d",Ye)}return f.makeClipPaths(I),i.previousPromises(I)}function C(I,L){return(I.ticks||I.showline)&&(L===I._mainSubplot||I.mirror==="all"||I.mirror==="allticks")}function w(I,L,B){if(!B.showline||!B._lw)return!1;if(B.mirror==="all"||B.mirror==="allticks")return!0;var O=B._anchorAxis;if(!O)return!1;var G=h.FROM_BL[L];return B.side===L?O.domain[G]===I.domain[G]:B.mirror&&O.domain[1-G]===I.domain[1-G]}function k(I,L,B,O){if(w(I,L,B))return B._lw;for(var G=0;G<O.length;G++){var W=O[G];if(W._mainAxis===B._mainAxis&&w(I,L,W))return W._lw}return 0}e.drawMainTitle=function(I){var L=I._fullLayout.title,B=I._fullLayout,O=P(B),G=z(B),W=D(B,G),X=F(B,O);if(u.draw(I,"gtitle",{propContainer:B,propName:"title.text",subtitlePropName:"title.subtitle.text",placeholder:B._dfltTitle.plot,subtitlePlaceholder:B._dfltTitle.subtitle,attributes:{x:X,y:W,"text-anchor":O,dy:G}}),L.text&&L.automargin){var Z=r.select(I).selectAll(".gtitle"),J=n.bBox(r.select(I).selectAll(".g-gtitle").node()).height,N=E(I,L,J);if(N>0){T(I,W,N,J),Z.attr({x:X,y:W,"text-anchor":O,dy:R(L.yanchor)}).call(o.positionText,X,W);var H=(L.text.match(o.BR_TAG_ALL)||[]).length;if(H){var $=h.LINE_SPACING*H+h.MID_SHIFT;L.y===0&&($=-$),Z.selectAll(".line").each(function(){var Y=+this.getAttribute("dy").slice(0,-2)-$+"em";this.setAttribute("dy",Y)})}var U=r.select(I).selectAll(".gtitle-subtitle");if(U.node()){var V=Z.node().getBBox(),j=V.y+V.height,q=j+u.SUBTITLE_PADDING_EM*L.subtitle.font.size;U.attr({x:X,y:q,"text-anchor":O,dy:R(L.yanchor)}).call(o.positionText,X,q)}}}};function A(I,L,B,O,G){var W=L.yref==="paper"?I._fullLayout._size.h:I._fullLayout.height,X=a.isTopAnchor(L)?O:O-G,Z=B==="b"?W-X:X;return a.isTopAnchor(L)&&B==="t"||a.isBottomAnchor(L)&&B==="b"?!1:Z<G}function b(I,L,B,O,G){var W=0;return B==="middle"&&(W+=G/2),I==="t"?(B==="top"&&(W+=G),W+=O-L*O):(B==="bottom"&&(W+=G),W+=L*O),W}function E(I,L,B){var O=L.y,G=L.yanchor,W=O>.5?"t":"b",X=I._fullLayout.margin[W],Z=0;return L.yref==="paper"?Z=B+L.pad.t+L.pad.b:L.yref==="container"&&(Z=b(W,O,G,I._fullLayout.height,B)+L.pad.t+L.pad.b),Z>X?Z:0}function T(I,L,B,O){var G="title.automargin",W=I._fullLayout.title,X=W.y>.5?"t":"b",Z={x:W.x,y:W.y,t:0,b:0},J={};W.yref==="paper"&&A(I,W,X,L,O)?Z[X]=B:W.yref==="container"&&(J[X]=B,I._fullLayout._reservedMargin[G]=J),i.allowAutoMargin(I,G),i.autoMargin(I,G,Z)}function F(I,L){var B=I.title,O=I._size,G=0;return L===y?G=B.pad.l:L===v&&(G=-B.pad.r),B.xref==="paper"?O.l+O.w*B.x+G:I.width*B.x+G}function D(I,L){var B=I.title,O=I._size,G=0;return L==="0em"||!L?G=-B.pad.b:L===h.CAP_SHIFT+"em"&&(G=B.pad.t),B.y==="auto"?O.t/2:B.yref==="paper"?O.t+O.h-O.h*B.y+G:I.height-I.height*B.y+G}function R(I){return I==="top"?h.CAP_SHIFT+.3+"em":I==="bottom"?"-0.3em":h.MID_SHIFT+"em"}function P(I){var L=I.title,B=_;return a.isRightAnchor(L)?B=v:a.isLeftAnchor(L)&&(B=y),B}function z(I){var L=I.title,B="0em";return a.isTopAnchor(L)?B=h.CAP_SHIFT+"em":a.isMiddleAnchor(L)&&(B=h.MID_SHIFT+"em"),B}e.doTraceStyle=function(I){var L=I.calcdata,B=[],O;for(O=0;O<L.length;O++){var G=L[O],W=G[0]||{},X=W.trace||{},Z=X._module||{},J=Z.arraysToCalcdata;J&&J(G,X);var N=Z.editStyle;N&&B.push({fn:N,cd0:W})}if(B.length){for(O=0;O<B.length;O++){var H=B[O];H.fn(I,H.cd0)}s(I),e.redrawReglTraces(I)}return i.style(I),t.getComponentMethod("legend","draw")(I),i.previousPromises(I)},e.doColorBars=function(I){return t.getComponentMethod("colorbar","draw")(I),i.previousPromises(I)},e.layoutReplot=function(I){var L=I.layout;return I.layout=void 0,t.call("_doPlot",I,"",L)},e.doLegend=function(I){return t.getComponentMethod("legend","draw")(I),i.previousPromises(I)},e.doTicksRelayout=function(I){var L=f.draw(I,"redraw");return I._fullLayout._hasOnlyLargeSploms&&(t.subplotsRegistry.splom.updateGrid(I),s(I),e.redrawReglTraces(I)),e.drawMainTitle(I),Promise.resolve(L).then(function(){return i.previousPromises(I)})},e.doModeBar=function(I){var L=I._fullLayout;c.manage(I);for(var B=0;B<L._basePlotModules.length;B++){var O=L._basePlotModules[B].updateFx;O&&O(I)}return i.previousPromises(I)},e.doCamera=function(I){for(var L=I._fullLayout,B=L._subplots.gl3d,O=0;O<B.length;O++){var G=L[B[O]],W=G._scene;W.setViewport(G)}},e.drawData=function(I){var L=I._fullLayout;s(I);for(var B=L._basePlotModules,O=0;O<B.length;O++)B[O].plot(I);return e.redrawReglTraces(I),i.style(I),t.getComponentMethod("selections","draw")(I),t.getComponentMethod("shapes","draw")(I),t.getComponentMethod("annotations","draw")(I),t.getComponentMethod("images","draw")(I),L._replotting=!1,i.previousPromises(I)},e.redrawReglTraces=function(I){var L=I._fullLayout;if(L._has("regl")){var B=I._fullData,O=[],G=[],W,X;for(L._hasOnlyLargeSploms&&L._splomGrid.draw(),W=0;W<B.length;W++){var Z=B[W];Z.visible===!0&&Z._length!==0&&(Z.type==="splom"?L._splomScenes[Z.uid].draw():Z.type==="scattergl"?a.pushUnique(O,Z.xaxis+Z.yaxis):Z.type==="scatterpolargl"&&a.pushUnique(G,Z.subplot))}for(W=0;W<O.length;W++)X=L._plots[O[W]],X._scene&&X._scene.draw();for(W=0;W<G.length;W++)X=L[G[W]]._subplot,X._scene&&X._scene.draw()}},e.doAutoRangeAndConstraints=function(I){for(var L=f.list(I,"",!0),B,O={},G=0;G<L.length;G++)if(B=L[G],!O[B._id]){O[B._id]=1,g(I,B),m(I,B);var W=B._matchGroup;if(W)for(var X in W){var Z=f.getFromId(I,X);m(I,Z,B.range),O[X]=1}}p(I)},e.finalDraw=function(I){t.getComponentMethod("rangeslider","draw")(I),t.getComponentMethod("rangeselector","draw")(I)},e.drawMarginPushers=function(I){t.getComponentMethod("legend","draw")(I),t.getComponentMethod("rangeselector","draw")(I),t.getComponentMethod("sliders","draw")(I),t.getComponentMethod("updatemenus","draw")(I),t.getComponentMethod("colorbar","draw")(I)}}}),ZE=de({"src/components/selections/draw.js"(e,r){"use strict";var t=v0().readPaths,i=Dw(),a=f0().clearOutlineControllers,o=ta(),s=hn(),l=Ro().arrayEditor,n=m0(),u=n.getPathString;r.exports={draw:c,drawOne:h,activateLastSelection:g};function c(y){var _=y._fullLayout;a(y),_._selectionLayer.selectAll("path").remove();for(var v in _._plots){var x=_._plots[v].selectionLayer;x&&x.selectAll("path").remove()}for(var S=0;S<_.selections.length;S++)h(y,S)}function f(y){return y._context.editSelection}function h(y,_){y._fullLayout._paperdiv.selectAll('.selectionlayer [data-index="'+_+'"]').remove();var v=n.makeSelectionsOptionsAndPlotinfo(y,_),x=v.options,S=v.plotinfo;if(!x._input)return;M(y._fullLayout._selectionLayer);function M(C){var w=u(y,x),k={"data-index":_,"fill-rule":"evenodd",d:w},A=x.opacity,b="rgba(0,0,0,0)",E=x.line.color||o.contrast(y._fullLayout.plot_bgcolor),T=x.line.width,F=x.line.dash;T||(T=5,F="solid");var D=f(y)&&y._fullLayout._activeSelectionIndex===_;D&&(b=y._fullLayout.activeselection.fillcolor,A=y._fullLayout.activeselection.opacity);for(var R=[],P=1;P>=0;P--){var z=C.append("path").attr(k).style("opacity",P?.1:A).call(o.stroke,E).call(o.fill,b).call(s.dashLine,P?"solid":F,P?4+T:T);if(d(z,y,x),D){var I=l(y.layout,"selections",x);z.style({cursor:"move"});var L={element:z.node(),plotinfo:S,gd:y,editHelpers:I,isActiveSelection:!0},B=t(w,y);i(B,z,L)}else z.style("pointer-events",P?"all":"none");R[P]=z}var O=R[0],G=R[1];G.node().addEventListener("click",function(){return p(y,O)})}}function d(y,_,v){var x=v.xref+v.yref;s.setClipUrl(y,"clip"+_._fullLayout._uid+x,_)}function p(y,_){if(f(y)){var v=_.node(),x=+v.getAttribute("data-index");if(x>=0){if(x===y._fullLayout._activeSelectionIndex){m(y);return}y._fullLayout._activeSelectionIndex=x,y._fullLayout._deactivateSelection=m,c(y)}}}function g(y){if(f(y)){var _=y._fullLayout.selections.length-1;y._fullLayout._activeSelectionIndex=_,y._fullLayout._deactivateSelection=m,c(y)}}function m(y){if(f(y)){var _=y._fullLayout._activeSelectionIndex;_>=0&&(a(y),delete y._fullLayout._activeSelectionIndex,c(y))}}}}),Fq=de({"node_modules/polybooljs/lib/build-log.js"(e,r){function t(){var i,a=0,o=!1;function s(l,n){return i.list.push({type:l,data:n?JSON.parse(JSON.stringify(n)):void 0}),i}return i={list:[],segmentId:function(){return a++},checkIntersection:function(l,n){return s("check",{seg1:l,seg2:n})},segmentChop:function(l,n){return s("div_seg",{seg:l,pt:n}),s("chop",{seg:l,pt:n})},statusRemove:function(l){return s("pop_seg",{seg:l})},segmentUpdate:function(l){return s("seg_update",{seg:l})},segmentNew:function(l,n){return s("new_seg",{seg:l,primary:n})},segmentRemove:function(l){return s("rem_seg",{seg:l})},tempStatus:function(l,n,u){return s("temp_status",{seg:l,above:n,below:u})},rewind:function(l){return s("rewind",{seg:l})},status:function(l,n,u){return s("status",{seg:l,above:n,below:u})},vert:function(l){return l===o?i:(o=l,s("vert",{x:l}))},log:function(l){return typeof l!="string"&&(l=JSON.stringify(l,!1,"  ")),s("log",{txt:l})},reset:function(){return s("reset")},selected:function(l){return s("selected",{segs:l})},chainStart:function(l){return s("chain_start",{seg:l})},chainRemoveHead:function(l,n){return s("chain_rem_head",{index:l,pt:n})},chainRemoveTail:function(l,n){return s("chain_rem_tail",{index:l,pt:n})},chainNew:function(l,n){return s("chain_new",{pt1:l,pt2:n})},chainMatch:function(l){return s("chain_match",{index:l})},chainClose:function(l){return s("chain_close",{index:l})},chainAddHead:function(l,n){return s("chain_add_head",{index:l,pt:n})},chainAddTail:function(l,n){return s("chain_add_tail",{index:l,pt:n})},chainConnect:function(l,n){return s("chain_con",{index1:l,index2:n})},chainReverse:function(l){return s("chain_rev",{index:l})},chainJoin:function(l,n){return s("chain_join",{index1:l,index2:n})},done:function(){return s("done")}},i}r.exports=t}}),Pq=de({"node_modules/polybooljs/lib/epsilon.js"(e,r){function t(i){typeof i!="number"&&(i=1e-10);var a={epsilon:function(o){return typeof o=="number"&&(i=o),i},pointAboveOrOnLine:function(o,s,l){var n=s[0],u=s[1],c=l[0],f=l[1],h=o[0],d=o[1];return(c-n)*(d-u)-(f-u)*(h-n)>=-i},pointBetween:function(o,s,l){var n=o[1]-s[1],u=l[0]-s[0],c=o[0]-s[0],f=l[1]-s[1],h=c*u+n*f;if(h<i)return!1;var d=u*u+f*f;return!(h-d>-i)},pointsSameX:function(o,s){return Math.abs(o[0]-s[0])<i},pointsSameY:function(o,s){return Math.abs(o[1]-s[1])<i},pointsSame:function(o,s){return a.pointsSameX(o,s)&&a.pointsSameY(o,s)},pointsCompare:function(o,s){return a.pointsSameX(o,s)?a.pointsSameY(o,s)?0:o[1]<s[1]?-1:1:o[0]<s[0]?-1:1},pointsCollinear:function(o,s,l){var n=o[0]-s[0],u=o[1]-s[1],c=s[0]-l[0],f=s[1]-l[1];return Math.abs(n*f-c*u)<i},linesIntersect:function(o,s,l,n){var u=s[0]-o[0],c=s[1]-o[1],f=n[0]-l[0],h=n[1]-l[1],d=u*h-c*f;if(Math.abs(d)<i)return!1;var p=o[0]-l[0],g=o[1]-l[1],m=(f*g-h*p)/d,y=(u*g-c*p)/d,_={alongA:0,alongB:0,pt:[o[0]+m*u,o[1]+m*c]};return m<=-i?_.alongA=-2:m<i?_.alongA=-1:m-1<=-i?_.alongA=0:m-1<i?_.alongA=1:_.alongA=2,y<=-i?_.alongB=-2:y<i?_.alongB=-1:y-1<=-i?_.alongB=0:y-1<i?_.alongB=1:_.alongB=2,_},pointInsideRegion:function(o,s){for(var l=o[0],n=o[1],u=s[s.length-1][0],c=s[s.length-1][1],f=!1,h=0;h<s.length;h++){var d=s[h][0],p=s[h][1];p-n>i!=c-n>i&&(u-d)*(n-p)/(c-p)+d-l>i&&(f=!f),u=d,c=p}return f}};return a}r.exports=t}}),Iq=de({"node_modules/polybooljs/lib/linked-list.js"(e,r){var t={create:function(){var i={root:{root:!0,next:null},exists:function(a){return!(a===null||a===i.root)},isEmpty:function(){return i.root.next===null},getHead:function(){return i.root.next},insertBefore:function(a,o){for(var s=i.root,l=i.root.next;l!==null;){if(o(l)){a.prev=l.prev,a.next=l,l.prev.next=a,l.prev=a;return}s=l,l=l.next}s.next=a,a.prev=s,a.next=null},findTransition:function(a){for(var o=i.root,s=i.root.next;s!==null&&!a(s);)o=s,s=s.next;return{before:o===i.root?null:o,after:s,insert:function(l){return l.prev=o,l.next=s,o.next=l,s!==null&&(s.prev=l),l}}}};return i},node:function(i){return i.prev=null,i.next=null,i.remove=function(){i.prev.next=i.next,i.next&&(i.next.prev=i.prev),i.prev=null,i.next=null},i}};r.exports=t}}),Rq=de({"node_modules/polybooljs/lib/intersecter.js"(e,r){var t=Iq();function i(a,o,s){function l(_,v){return{id:s?s.segmentId():-1,start:_,end:v,myFill:{above:null,below:null},otherFill:null}}function n(_,v,x){return{id:s?s.segmentId():-1,start:_,end:v,myFill:{above:x.myFill.above,below:x.myFill.below},otherFill:null}}var u=t.create();function c(_,v,x,S,M,C){var w=o.pointsCompare(v,M);return w!==0?w:o.pointsSame(x,C)?0:_!==S?_?1:-1:o.pointAboveOrOnLine(x,S?M:C,S?C:M)?1:-1}function f(_,v){u.insertBefore(_,function(x){var S=c(_.isStart,_.pt,v,x.isStart,x.pt,x.other.pt);return S<0})}function h(_,v){var x=t.node({isStart:!0,pt:_.start,seg:_,primary:v,other:null,status:null});return f(x,_.end),x}function d(_,v,x){var S=t.node({isStart:!1,pt:v.end,seg:v,primary:x,other:_,status:null});_.other=S,f(S,_.pt)}function p(_,v){var x=h(_,v);return d(x,_,v),x}function g(_,v){s&&s.segmentChop(_.seg,v),_.other.remove(),_.seg.end=v,_.other.pt=v,f(_.other,_.pt)}function m(_,v){var x=n(v,_.seg.end,_.seg);return g(_,v),p(x,_.primary)}function y(_,v){var x=t.create();function S(I,L){var B=I.seg.start,O=I.seg.end,G=L.seg.start,W=L.seg.end;return o.pointsCollinear(B,G,W)?o.pointsCollinear(O,G,W)||o.pointAboveOrOnLine(O,G,W)?1:-1:o.pointAboveOrOnLine(B,G,W)?1:-1}function M(I){return x.findTransition(function(L){var B=S(I,L.ev);return B>0})}function C(I,L){var B=I.seg,O=L.seg,G=B.start,W=B.end,X=O.start,Z=O.end;s&&s.checkIntersection(B,O);var J=o.linesIntersect(G,W,X,Z);if(J===!1){if(!o.pointsCollinear(G,W,X)||o.pointsSame(G,Z)||o.pointsSame(W,X))return!1;var N=o.pointsSame(G,X),H=o.pointsSame(W,Z);if(N&&H)return L;var $=!N&&o.pointBetween(G,X,Z),U=!H&&o.pointBetween(W,X,Z);if(N)return U?m(L,W):m(I,Z),L;$&&(H||(U?m(L,W):m(I,Z)),m(L,G))}else J.alongA===0&&(J.alongB===-1?m(I,X):J.alongB===0?m(I,J.pt):J.alongB===1&&m(I,Z)),J.alongB===0&&(J.alongA===-1?m(L,G):J.alongA===0?m(L,J.pt):J.alongA===1&&m(L,W));return!1}for(var w=[];!u.isEmpty();){var k=u.getHead();if(s&&s.vert(k.pt[0]),k.isStart){let I=function(){if(E){var L=C(k,E);if(L)return L}return T?C(k,T):!1};var A=I;s&&s.segmentNew(k.seg,k.primary);var b=M(k),E=b.before?b.before.ev:null,T=b.after?b.after.ev:null;s&&s.tempStatus(k.seg,E?E.seg:!1,T?T.seg:!1);var F=I();if(F){if(a){var D;k.seg.myFill.below===null?D=!0:D=k.seg.myFill.above!==k.seg.myFill.below,D&&(F.seg.myFill.above=!F.seg.myFill.above)}else F.seg.otherFill=k.seg.myFill;s&&s.segmentUpdate(F.seg),k.other.remove(),k.remove()}if(u.getHead()!==k){s&&s.rewind(k.seg);continue}if(a){var D;k.seg.myFill.below===null?D=!0:D=k.seg.myFill.above!==k.seg.myFill.below,T?k.seg.myFill.below=T.seg.myFill.above:k.seg.myFill.below=_,D?k.seg.myFill.above=!k.seg.myFill.below:k.seg.myFill.above=k.seg.myFill.below}else if(k.seg.otherFill===null){var R;T?k.primary===T.primary?R=T.seg.otherFill.above:R=T.seg.myFill.above:R=k.primary?v:_,k.seg.otherFill={above:R,below:R}}s&&s.status(k.seg,E?E.seg:!1,T?T.seg:!1),k.other.status=b.insert(t.node({ev:k}))}else{var P=k.status;if(P===null)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(x.exists(P.prev)&&x.exists(P.next)&&C(P.prev.ev,P.next.ev),s&&s.statusRemove(P.ev.seg),P.remove(),!k.primary){var z=k.seg.myFill;k.seg.myFill=k.seg.otherFill,k.seg.otherFill=z}w.push(k.seg)}u.getHead().remove()}return s&&s.done(),w}return a?{addRegion:function(_){for(var v,x=_[_.length-1],S=0;S<_.length;S++){v=x,x=_[S];var M=o.pointsCompare(v,x);M!==0&&p(l(M<0?v:x,M<0?x:v),!0)}},calculate:function(_){return y(_,!1)}}:{calculate:function(_,v,x,S){return _.forEach(function(M){p(n(M.start,M.end,M),!0)}),x.forEach(function(M){p(n(M.start,M.end,M),!1)}),y(v,S)}}}r.exports=i}}),zq=de({"node_modules/polybooljs/lib/segment-chainer.js"(e,r){function t(i,a,o){var s=[],l=[];return i.forEach(function(n){var u=n.start,c=n.end;if(a.pointsSame(u,c)){console.warn("PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large");return}o&&o.chainStart(n);var f={index:0,matches_head:!1,matches_pt1:!1},h={index:0,matches_head:!1,matches_pt1:!1},d=f;function p(P,z,I){return d.index=P,d.matches_head=z,d.matches_pt1=I,d===f?(d=h,!1):(d=null,!0)}for(var g=0;g<s.length;g++){var m=s[g],y=m[0],_=m[1],v=m[m.length-1],x=m[m.length-2];if(a.pointsSame(y,u)){if(p(g,!0,!0))break}else if(a.pointsSame(y,c)){if(p(g,!0,!1))break}else if(a.pointsSame(v,u)){if(p(g,!1,!0))break}else if(a.pointsSame(v,c)&&p(g,!1,!1))break}if(d===f){s.push([u,c]),o&&o.chainNew(u,c);return}if(d===h){o&&o.chainMatch(f.index);var S=f.index,M=f.matches_pt1?c:u,C=f.matches_head,m=s[S],w=C?m[0]:m[m.length-1],k=C?m[1]:m[m.length-2],A=C?m[m.length-1]:m[0],b=C?m[m.length-2]:m[1];if(a.pointsCollinear(k,w,M)&&(C?(o&&o.chainRemoveHead(f.index,M),m.shift()):(o&&o.chainRemoveTail(f.index,M),m.pop()),w=k),a.pointsSame(A,M)){s.splice(S,1),a.pointsCollinear(b,A,w)&&(C?(o&&o.chainRemoveTail(f.index,w),m.pop()):(o&&o.chainRemoveHead(f.index,w),m.shift())),o&&o.chainClose(f.index),l.push(m);return}C?(o&&o.chainAddHead(f.index,M),m.unshift(M)):(o&&o.chainAddTail(f.index,M),m.push(M));return}function E(P){o&&o.chainReverse(P),s[P].reverse()}function T(P,z){var I=s[P],L=s[z],B=I[I.length-1],O=I[I.length-2],G=L[0],W=L[1];a.pointsCollinear(O,B,G)&&(o&&o.chainRemoveTail(P,B),I.pop(),B=O),a.pointsCollinear(B,G,W)&&(o&&o.chainRemoveHead(z,G),L.shift()),o&&o.chainJoin(P,z),s[P]=I.concat(L),s.splice(z,1)}var F=f.index,D=h.index;o&&o.chainConnect(F,D);var R=s[F].length<s[D].length;f.matches_head?h.matches_head?R?(E(F),T(F,D)):(E(D),T(D,F)):T(D,F):h.matches_head?T(F,D):R?(E(F),T(D,F)):(E(D),T(F,D))}),l}r.exports=t}}),Bq=de({"node_modules/polybooljs/lib/segment-selector.js"(e,r){function t(a,o,s){var l=[];return a.forEach(function(n){var u=(n.myFill.above?8:0)+(n.myFill.below?4:0)+(n.otherFill&&n.otherFill.above?2:0)+(n.otherFill&&n.otherFill.below?1:0);o[u]!==0&&l.push({id:s?s.segmentId():-1,start:n.start,end:n.end,myFill:{above:o[u]===1,below:o[u]===2},otherFill:null})}),s&&s.selected(l),l}var i={union:function(a,o){return t(a,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],o)},intersect:function(a,o){return t(a,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],o)},difference:function(a,o){return t(a,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],o)},differenceRev:function(a,o){return t(a,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],o)},xor:function(a,o){return t(a,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],o)}};r.exports=i}}),Oq=de({"node_modules/polybooljs/lib/geojson.js"(e,r){var t={toPolygon:function(i,a){function o(n){if(n.length<=0)return i.segments({inverted:!1,regions:[]});function u(h){var d=h.slice(0,h.length-1);return i.segments({inverted:!1,regions:[d]})}for(var c=u(n[0]),f=1;f<n.length;f++)c=i.selectDifference(i.combine(c,u(n[f])));return c}if(a.type==="Polygon")return i.polygon(o(a.coordinates));if(a.type==="MultiPolygon"){for(var s=i.segments({inverted:!1,regions:[]}),l=0;l<a.coordinates.length;l++)s=i.selectUnion(i.combine(s,o(a.coordinates[l])));return i.polygon(s)}throw new Error("PolyBool: Cannot convert GeoJSON object to PolyBool polygon")},fromPolygon:function(i,a,o){o=i.polygon(i.segments(o));function s(m,y){return a.pointInsideRegion([(m[0][0]+m[1][0])*.5,(m[0][1]+m[1][1])*.5],y)}function l(m){return{region:m,children:[]}}var n=l(null);function u(m,y){for(var _=0;_<m.children.length;_++){var v=m.children[_];if(s(y,v.region)){u(v,y);return}}for(var x=l(y),_=0;_<m.children.length;_++){var v=m.children[_];s(v.region,y)&&(x.children.push(v),m.children.splice(_,1),_--)}m.children.push(x)}for(var c=0;c<o.regions.length;c++){var f=o.regions[c];f.length<3||u(n,f)}function h(m,y){for(var _=0,v=m[m.length-1][0],x=m[m.length-1][1],S=[],M=0;M<m.length;M++){var C=m[M][0],w=m[M][1];S.push([C,w]),_+=w*v-C*x,v=C,x=w}var k=_<0;return k!==y&&S.reverse(),S.push([S[0][0],S[0][1]]),S}var d=[];function p(m){var y=[h(m.region,!1)];d.push(y);for(var _=0;_<m.children.length;_++)y.push(g(m.children[_]))}function g(m){for(var y=0;y<m.children.length;y++)p(m.children[y]);return h(m.region,!0)}for(var c=0;c<n.children.length;c++)p(n.children[c]);return d.length<=0?{type:"Polygon",coordinates:[]}:d.length==1?{type:"Polygon",coordinates:d[0]}:{type:"MultiPolygon",coordinates:d}}};r.exports=t}}),Nq=de({"node_modules/polybooljs/index.js"(e,r){var t=Fq(),i=Pq(),a=Rq(),o=zq(),s=Bq(),l=Oq(),n=!1,u=i(),c;c={buildLog:function(h){return h===!0?n=t():h===!1&&(n=!1),n===!1?!1:n.list},epsilon:function(h){return u.epsilon(h)},segments:function(h){var d=a(!0,u,n);return h.regions.forEach(d.addRegion),{segments:d.calculate(h.inverted),inverted:h.inverted}},combine:function(h,d){var p=a(!1,u,n);return{combined:p.calculate(h.segments,h.inverted,d.segments,d.inverted),inverted1:h.inverted,inverted2:d.inverted}},selectUnion:function(h){return{segments:s.union(h.combined,n),inverted:h.inverted1||h.inverted2}},selectIntersect:function(h){return{segments:s.intersect(h.combined,n),inverted:h.inverted1&&h.inverted2}},selectDifference:function(h){return{segments:s.difference(h.combined,n),inverted:h.inverted1&&!h.inverted2}},selectDifferenceRev:function(h){return{segments:s.differenceRev(h.combined,n),inverted:!h.inverted1&&h.inverted2}},selectXor:function(h){return{segments:s.xor(h.combined,n),inverted:h.inverted1!==h.inverted2}},polygon:function(h){return{regions:o(h.segments,u,n),inverted:h.inverted}},polygonFromGeoJSON:function(h){return l.toPolygon(c,h)},polygonToGeoJSON:function(h){return l.fromPolygon(c,u,h)},union:function(h,d){return f(h,d,c.selectUnion)},intersect:function(h,d){return f(h,d,c.selectIntersect)},difference:function(h,d){return f(h,d,c.selectDifference)},differenceRev:function(h,d){return f(h,d,c.selectDifferenceRev)},xor:function(h,d){return f(h,d,c.selectXor)}};function f(h,d,p){var g=c.segments(h),m=c.segments(d),y=c.combine(g,m),_=p(y);return c.polygon(_)}typeof window=="object"&&(window.PolyBool=c),r.exports=c}}),jq=de({"node_modules/point-in-polygon/nested.js"(e,r){r.exports=function(i,a,o,s){var l=i[0],n=i[1],u=!1;o===void 0&&(o=0),s===void 0&&(s=a.length);for(var c=s-o,f=0,h=c-1;f<c;h=f++){var d=a[f+o][0],p=a[f+o][1],g=a[h+o][0],m=a[h+o][1],y=p>n!=m>n&&l<(g-d)*(n-p)/(m-p)+d;y&&(u=!u)}return u}}}),Fy=de({"src/lib/polygon.js"(e,r){"use strict";var t=yw().dot,i=cn().BADNUM,a=r.exports={};a.tester=function(s){var l=s.slice(),n=l[0][0],u=n,c=l[0][1],f=c,h;for((l[l.length-1][0]!==l[0][0]||l[l.length-1][1]!==l[0][1])&&l.push(l[0]),h=1;h<l.length;h++)n=Math.min(n,l[h][0]),u=Math.max(u,l[h][0]),c=Math.min(c,l[h][1]),f=Math.max(f,l[h][1]);var d=!1,p;l.length===5&&(l[0][0]===l[1][0]?l[2][0]===l[3][0]&&l[0][1]===l[3][1]&&l[1][1]===l[2][1]&&(d=!0,p=function(v){return v[0]===l[0][0]}):l[0][1]===l[1][1]&&l[2][1]===l[3][1]&&l[0][0]===l[3][0]&&l[1][0]===l[2][0]&&(d=!0,p=function(v){return v[1]===l[0][1]}));function g(v,x){var S=v[0],M=v[1];return!(S===i||S<n||S>u||M===i||M<c||M>f||x&&p(v))}function m(v,x){var S=v[0],M=v[1];if(S===i||S<n||S>u||M===i||M<c||M>f)return!1;var C=l.length,w=l[0][0],k=l[0][1],A=0,b,E,T,F,D;for(b=1;b<C;b++)if(E=w,T=k,w=l[b][0],k=l[b][1],F=Math.min(E,w),!(S<F||S>Math.max(E,w)||M>Math.max(T,k)))if(M<Math.min(T,k))S!==F&&A++;else{if(w===E?D=M:D=T+(S-E)*(k-T)/(w-E),M===D)return!(b===1&&x);M<=D&&S!==F&&A++}return A%2===1}var y=!0,_=l[0];for(h=1;h<l.length;h++)if(_[0]!==l[h][0]||_[1]!==l[h][1]){y=!1;break}return{xmin:n,xmax:u,ymin:c,ymax:f,pts:l,contains:d?g:m,isRect:d,degenerate:y}},a.isSegmentBent=function(s,l,n,u){var c=s[l],f=[s[n][0]-c[0],s[n][1]-c[1]],h=t(f,f),d=Math.sqrt(h),p=[-f[1]/d,f[0]/d],g,m,y;for(g=l+1;g<n;g++)if(m=[s[g][0]-c[0],s[g][1]-c[1]],y=t(m,f),y<0||y>h||Math.abs(t(m,p))>u)return!0;return!1},a.filter=function(s,l){var n=[s[0]],u=0,c=0;function f(d){s.push(d);var p=n.length,g=u;n.splice(c+1);for(var m=g+1;m<s.length;m++)(m===s.length-1||a.isSegmentBent(s,g,m+1,l))&&(n.push(s[m]),n.length<p-2&&(u=m,c=n.length-1),g=m)}if(s.length>1){var h=s.pop();f(h)}return{addPt:f,raw:s,filtered:n}}}}),Uq=de({"src/components/selections/constants.js"(e,r){"use strict";r.exports={BENDPX:1.5,MINSELECT:12,SELECTDELAY:100,SELECTID:"-select"}}}),qq=de({"src/components/selections/select.js"(e,r){"use strict";var t=Nq(),i=jq(),a=Ma(),o=hn().dashStyle,s=ta(),l=$s(),n=sf().makeEventData,u=Xd(),c=u.freeMode,f=u.rectMode,h=u.drawMode,d=u.openMode,p=u.selectMode,g=m0(),m=Dy(),y=Dw(),_=f0().clearOutline,v=v0(),x=v.handleEllipse,S=v.readPaths,M=Cw().newShapes,C=UE(),w=ZE().activateLastSelection,k=Qt(),A=k.sorterAsc,b=Fy(),E=ww(),T=Hs().getFromId,F=Cy(),D=Ly().redrawReglTraces,R=Uq(),P=R.MINSELECT,z=b.filter,I=b.tester,L=kw(),B=L.p2r,O=L.axValue,G=L.getTransform;function W(qe){return qe.subplot!==void 0}function X(qe,Ye,me,_e,Ae){var ke=!W(_e),Ee=c(Ae),De=f(Ae),Je=d(Ae),Ue=h(Ae),at=p(Ae),rt=Ae==="drawline",ft=Ae==="drawcircle",At=rt||ft,ht=_e.gd,Gt=ht._fullLayout,fr=at&&Gt.newselection.mode==="immediate"&&ke,gt=Gt._zoomlayer,yt=_e.element.getBoundingClientRect(),kt=_e.plotinfo,Lt=G(kt),Ct=Ye-yt.left,$t=me-yt.top;Gt._calcInverseTransform(ht);var mr=k.apply3DTransform(Gt._invTransform)(Ct,$t);Ct=mr[0],$t=mr[1];var br=Gt._invScaleX,Er=Gt._invScaleY,Tr=Ct,Ur=$t,Ai="M"+Ct+","+$t,oi=_e.xaxes[0],Qr=_e.yaxes[0],ea=oi._length,$i=Qr._length,ja=qe.altKey&&!(h(Ae)&&Je),ya,pa,xi,bi,Ua,dn,pi;U(qe,ht,_e),Ee&&(ya=z([[Ct,$t]],R.BENDPX));var Jr=gt.selectAll("path.select-outline-"+kt.id).data([1]),Be=Ue?Gt.newshape:Gt.newselection;Ue&&(_e.hasText=Be.label.text||Be.label.texttemplate);var Fe=Ue&&!Je?Be.fillcolor:"rgba(0,0,0,0)",Et=Be.line.color||(ke?s.contrast(ht._fullLayout.plot_bgcolor):"#7f7f7f");Jr.enter().append("path").attr("class","select-outline select-outline-"+kt.id).style({opacity:Ue?Be.opacity/2:1,"stroke-dasharray":o(Be.line.dash,Be.line.width),"stroke-width":Be.line.width+"px","shape-rendering":"crispEdges"}).call(s.stroke,Et).call(s.fill,Fe).attr("fill-rule","evenodd").classed("cursor-move",!!Ue).attr("transform",Lt).attr("d",Ai+"Z");var St=gt.append("path").attr("class","zoombox-corners").style({fill:s.background,stroke:s.defaultLine,"stroke-width":1}).attr("transform",Lt).attr("d","M0,0Z");if(Ue&&_e.hasText){var zt=gt.select(".label-temp");zt.empty()&&(zt=gt.append("g").classed("label-temp",!0).classed("select-outline",!0).style({opacity:.8}))}var Wt=Gt._uid+R.SELECTID,Yt=[],ze=K(ht,_e.xaxes,_e.yaxes,_e.subplot);fr&&!qe.shiftKey&&(_e._clearSubplotSelections=function(){if(ke){var ct=oi._id,wt=Qr._id;Me(ht,ct,wt,ze);for(var Nt=(ht.layout||{}).selections||[],It=[],Zt=!1,qt=0;qt<Nt.length;qt++){var vr=Gt.selections[qt];!vr||vr.xref!==ct||vr.yref!==wt?It.push(Nt[qt]):Zt=!0}Zt&&(ht._fullLayout._noEmitSelectedAtStart=!0,a.call("_guiRelayout",ht,{selections:It}))}});var tt=Pt(_e);_e.moveFn=function(ct,wt){_e._clearSubplotSelections&&(_e._clearSubplotSelections(),_e._clearSubplotSelections=void 0),Tr=Math.max(0,Math.min(ea,br*ct+Ct)),Ur=Math.max(0,Math.min($i,Er*wt+$t));var Nt=Math.abs(Tr-Ct),It=Math.abs(Ur-$t);if(De){var Zt,qt,vr;if(at){var Br=Gt.selectdirection;switch(Br==="any"?It<Math.min(Nt*.6,P)?Zt="h":Nt<Math.min(It*.6,P)?Zt="v":Zt="d":Zt=Br,Zt){case"h":qt=ft?$i/2:0,vr=$i;break;case"v":qt=ft?ea/2:0,vr=ea;break}}if(Ue)switch(Gt.newshape.drawdirection){case"vertical":Zt="h",qt=ft?$i/2:0,vr=$i;break;case"horizontal":Zt="v",qt=ft?ea/2:0,vr=ea;break;case"ortho":Nt<It?(Zt="h",qt=$t,vr=Ur):(Zt="v",qt=Ct,vr=Tr);break;default:Zt="d"}Zt==="h"?(bi=At?x(ft,[Tr,qt],[Tr,vr]):[[Ct,qt],[Ct,vr],[Tr,vr],[Tr,qt]],bi.xmin=At?Tr:Math.min(Ct,Tr),bi.xmax=At?Tr:Math.max(Ct,Tr),bi.ymin=Math.min(qt,vr),bi.ymax=Math.max(qt,vr),St.attr("d","M"+bi.xmin+","+($t-P)+"h-4v"+2*P+"h4ZM"+(bi.xmax-1)+","+($t-P)+"h4v"+2*P+"h-4Z")):Zt==="v"?(bi=At?x(ft,[qt,Ur],[vr,Ur]):[[qt,$t],[qt,Ur],[vr,Ur],[vr,$t]],bi.xmin=Math.min(qt,vr),bi.xmax=Math.max(qt,vr),bi.ymin=At?Ur:Math.min($t,Ur),bi.ymax=At?Ur:Math.max($t,Ur),St.attr("d","M"+(Ct-P)+","+bi.ymin+"v-4h"+2*P+"v4ZM"+(Ct-P)+","+(bi.ymax-1)+"v4h"+2*P+"v-4Z")):Zt==="d"&&(bi=At?x(ft,[Ct,$t],[Tr,Ur]):[[Ct,$t],[Ct,Ur],[Tr,Ur],[Tr,$t]],bi.xmin=Math.min(Ct,Tr),bi.xmax=Math.max(Ct,Tr),bi.ymin=Math.min($t,Ur),bi.ymax=Math.max($t,Ur),St.attr("d","M0,0Z"))}else Ee&&(ya.addPt([Tr,Ur]),bi=ya.filtered);if(_e.selectionDefs&&_e.selectionDefs.length?(xi=fe(_e.mergedPolygons,bi,ja),bi.subtract=ja,pa=$(_e.selectionDefs.concat([bi]))):(xi=[bi],pa=I(bi)),y(ee(xi,Je),Jr,_e),at){var Pr=Q(ht,!1),Mi=Pr.eventData?Pr.eventData.points.slice():[];Pr=Q(ht,!1,pa,ze,_e),pa=Pr.selectionTesters,pi=Pr.eventData;var gi;ya?gi=ya.filtered:gi=Ke(xi),E.throttle(Wt,R.SELECTDELAY,function(){Yt=ie(pa,ze);for(var ba=Yt.slice(),Hi=0;Hi<Mi.length;Hi++){for(var Za=Mi[Hi],oa=!1,Cn=0;Cn<ba.length;Cn++)if(ba[Cn].curveNumber===Za.curveNumber&&ba[Cn].pointNumber===Za.pointNumber){oa=!0;break}oa||ba.push(Za)}ba.length&&(pi||(pi={}),pi.points=ba),tt(pi,gi),mt(ht,pi)})}},_e.clickFn=function(ct,wt){if(St.remove(),ht._fullLayout._activeShapeIndex>=0){ht._fullLayout._deactivateShape(ht);return}if(!Ue){var Nt=Gt.clickmode;E.done(Wt).then(function(){if(E.clear(Wt),ct===2){for(Jr.remove(),Ua=0;Ua<ze.length;Ua++)dn=ze[Ua],dn._module.selectPoints(dn,!1);if(xe(ht,ze),q(_e),lt(ht),ze.length){var It=ze[0].xaxis,Zt=ze[0].yaxis;if(It&&Zt){for(var qt=[],vr=ht._fullLayout.selections,Br=0;Br<vr.length;Br++){var Pr=vr[Br];Pr&&(Pr.xref!==It._id||Pr.yref!==Zt._id)&&qt.push(Pr)}qt.length<vr.length&&(ht._fullLayout._noEmitSelectedAtStart=!0,a.call("_guiRelayout",ht,{selections:qt}))}}}else Nt.indexOf("select")>-1&&Z(wt,ht,_e.xaxes,_e.yaxes,_e.subplot,_e,Jr),Nt==="event"&&Mt(ht,void 0);l.click(ht,wt,kt.id)}).catch(k.error)}},_e.doneFn=function(){St.remove(),E.done(Wt).then(function(){E.clear(Wt),!fr&&bi&&_e.selectionDefs&&(bi.subtract=ja,_e.selectionDefs.push(bi),_e.mergedPolygons.length=0,[].push.apply(_e.mergedPolygons,xi)),(fr||Ue)&&q(_e,fr),_e.doneFnCompleted&&_e.doneFnCompleted(Yt),at&&Mt(ht,pi)}).catch(k.error)}}function Z(qe,Ye,me,_e,Ae,ke,Ee){var De=Ye._hoverdata,Je=Ye._fullLayout,Ue=Je.clickmode,at=Ue.indexOf("event")>-1,rt=[],ft,At,ht,Gt,fr,gt,yt,kt,Lt,Ct;if(ne(De)){U(qe,Ye,ke),ft=K(Ye,me,_e,Ae);var $t=se(De,ft),mr=$t.pointNumbers.length>0;if(mr?ce(ft,$t):pe(ft)&&(yt=le($t))){for(Ee&&Ee.remove(),Ct=0;Ct<ft.length;Ct++)At=ft[Ct],At._module.selectPoints(At,!1);xe(Ye,ft),q(ke),at&<(Ye)}else{kt=qe.shiftKey&&(yt!==void 0?yt:le($t)),ht=J($t.pointNumber,$t.searchInfo,kt);var br=ke.selectionDefs.concat([ht]);for(Gt=$(br,Gt),Ct=0;Ct<ft.length;Ct++)if(fr=ft[Ct]._module.selectPoints(ft[Ct],Gt),gt=ae(fr,ft[Ct]),rt.length)for(var Er=0;Er<gt.length;Er++)rt.push(gt[Er]);else rt=gt;if(Lt={points:rt},xe(Ye,ft,Lt),ht&&ke&&ke.selectionDefs.push(ht),Ee){var Tr=ke.mergedPolygons,Ur=d(ke.dragmode);y(ee(Tr,Ur),Ee,ke)}at&&Mt(Ye,Lt)}}}function J(qe,Ye,me){return{pointNumber:qe,searchInfo:Ye,subtract:!!me}}function N(qe){return"pointNumber"in qe&&"searchInfo"in qe}function H(qe){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(Ye,me,_e,Ae){var ke=qe.searchInfo.cd[0].trace.index,Ee=Ae.cd[0].trace.index;return Ee===ke&&_e===qe.pointNumber},isRect:!1,degenerate:!1,subtract:!!qe.subtract}}function $(qe){if(!qe.length)return;for(var Ye=[],me=N(qe[0])?0:qe[0][0][0],_e=me,Ae=N(qe[0])?0:qe[0][0][1],ke=Ae,Ee=0;Ee<qe.length;Ee++)if(N(qe[Ee]))Ye.push(H(qe[Ee]));else{var De=I(qe[Ee]);De.subtract=!!qe[Ee].subtract,Ye.push(De),me=Math.min(me,De.xmin),_e=Math.max(_e,De.xmax),Ae=Math.min(Ae,De.ymin),ke=Math.max(ke,De.ymax)}function Je(Ue,at,rt,ft){for(var At=!1,ht=0;ht<Ye.length;ht++)Ye[ht].contains(Ue,at,rt,ft)&&(At=!Ye[ht].subtract);return At}return{xmin:me,xmax:_e,ymin:Ae,ymax:ke,pts:[],contains:Je,isRect:!1,degenerate:!1}}function U(qe,Ye,me){var _e=Ye._fullLayout,Ae=me.plotinfo,ke=me.dragmode,Ee=_e._lastSelectedSubplot&&_e._lastSelectedSubplot===Ae.id,De=(qe.shiftKey||qe.altKey)&&!(h(ke)&&d(ke));Ee&&De&&Ae.selection&&Ae.selection.selectionDefs&&!me.selectionDefs?(me.selectionDefs=Ae.selection.selectionDefs,me.mergedPolygons=Ae.selection.mergedPolygons):(!De||!Ae.selection)&&q(me),Ee||(_(Ye),_e._lastSelectedSubplot=Ae.id)}function V(qe){return qe._fullLayout._activeShapeIndex>=0}function j(qe){return qe._fullLayout._activeSelectionIndex>=0}function q(qe,Ye){var me=qe.dragmode,_e=qe.plotinfo,Ae=qe.gd;V(Ae)&&Ae._fullLayout._deactivateShape(Ae),j(Ae)&&Ae._fullLayout._deactivateSelection(Ae);var ke=Ae._fullLayout,Ee=ke._zoomlayer,De=h(me),Je=p(me);if(De||Je){var Ue=Ee.selectAll(".select-outline-"+_e.id);if(Ue&&Ae._fullLayout._outlining){var at;De&&(at=M(Ue,qe)),at&&a.call("_guiRelayout",Ae,{shapes:at});var rt;Je&&!W(qe)&&(rt=C(Ue,qe)),rt&&(Ae._fullLayout._noEmitSelectedAtStart=!0,a.call("_guiRelayout",Ae,{selections:rt}).then(function(){Ye&&w(Ae)})),Ae._fullLayout._outlining=!1}}_e.selection={},_e.selection.selectionDefs=qe.selectionDefs=[],_e.selection.mergedPolygons=qe.mergedPolygons=[]}function Y(qe){return qe._id}function K(qe,Ye,me,_e){if(!qe.calcdata)return[];var Ae=[],ke=Ye.map(Y),Ee=me.map(Y),De,Je,Ue;for(Ue=0;Ue<qe.calcdata.length;Ue++)if(De=qe.calcdata[Ue],Je=De[0].trace,!(Je.visible!==!0||!Je._module||!Je._module.selectPoints))if(W({subplot:_e})&&(Je.subplot===_e||Je.geo===_e))Ae.push(te(Je._module,De,Ye[0],me[0]));else if(Je.type==="splom"){if(Je._xaxes[ke[0]]&&Je._yaxes[Ee[0]]){var at=te(Je._module,De,Ye[0],me[0]);at.scene=qe._fullLayout._splomScenes[Je.uid],Ae.push(at)}}else if(Je.type==="sankey"){var rt=te(Je._module,De,Ye[0],me[0]);Ae.push(rt)}else{if(ke.indexOf(Je.xaxis)===-1&&(!Je._xA||!Je._xA.overlaying)||Ee.indexOf(Je.yaxis)===-1&&(!Je._yA||!Je._yA.overlaying))continue;Ae.push(te(Je._module,De,T(qe,Je.xaxis),T(qe,Je.yaxis)))}return Ae}function te(qe,Ye,me,_e){return{_module:qe,cd:Ye,xaxis:me,yaxis:_e}}function ne(qe){return qe&&Array.isArray(qe)&&qe[0].hoverOnBox!==!0}function se(qe,Ye){var me=qe[0],_e=-1,Ae=[],ke,Ee;for(Ee=0;Ee<Ye.length;Ee++)if(ke=Ye[Ee],me.fullData.index===ke.cd[0].trace.index){if(me.hoverOnBox===!0)break;me.pointNumber!==void 0?_e=me.pointNumber:me.binNumber!==void 0&&(_e=me.binNumber,Ae=me.pointNumbers);break}return{pointNumber:_e,pointNumbers:Ae,searchInfo:ke}}function le(qe){var Ye=qe.searchInfo.cd[0].trace,me=qe.pointNumber,_e=qe.pointNumbers,Ae=_e.length>0,ke=Ae?_e[0]:me;return Ye.selectedpoints?Ye.selectedpoints.indexOf(ke)>-1:!1}function ce(qe,Ye){var me=[],_e,Ae,ke,Ee;for(Ee=0;Ee<qe.length;Ee++)_e=qe[Ee],_e.cd[0].trace.selectedpoints&&_e.cd[0].trace.selectedpoints.length>0&&me.push(_e);if(me.length===1&&(ke=me[0]===Ye.searchInfo,ke&&(Ae=Ye.searchInfo.cd[0].trace,Ae.selectedpoints.length===Ye.pointNumbers.length))){for(Ee=0;Ee<Ye.pointNumbers.length;Ee++)if(Ae.selectedpoints.indexOf(Ye.pointNumbers[Ee])<0)return!1;return!0}return!1}function pe(qe){var Ye=0,me,_e,Ae;for(Ae=0;Ae<qe.length;Ae++)if(me=qe[Ae],_e=me.cd[0].trace,_e.selectedpoints&&(_e.selectedpoints.length>1||(Ye+=_e.selectedpoints.length,Ye>1)))return!1;return Ye===1}function xe(qe,Ye,me){var _e,Ae;for(_e=0;_e<Ye.length;_e++){Ae=Ye[_e].cd[0].trace;var ke=qe._fullLayout._tracePreGUI[Ae.uid]||{};ke.selectedpoints===void 0&&(ke.selectedpoints=Ae._input.selectedpoints||null)}if(me){var Ee=me.points||[];for(_e=0;_e<Ye.length;_e++)Ae=Ye[_e].cd[0].trace,Ae._input.selectedpoints=Ae.selectedpoints=[];for(var De=0;De<Ee.length;De++){var Je=Ee[De],Ue=Je.data,at=Je.pointIndex,rt=Je.pointIndices;rt?[].push.apply(Ue.selectedpoints,rt):Ue.selectedpoints.push(at)}}else for(_e=0;_e<Ye.length;_e++)Ae=Ye[_e].cd[0].trace,delete Ae.selectedpoints,delete Ae._input.selectedpoints;ye(qe,Ye)}function ye(qe,Ye){for(var me=!1,_e=0;_e<Ye.length;_e++){var Ae=Ye[_e],ke=Ae.cd;a.traceIs(ke[0].trace,"regl")&&(me=!0);var Ee=Ae._module,De=Ee.styleOnSelect||Ee.style;De&&(De(qe,ke,ke[0].node3),ke[0].nodeRangePlot3&&De(qe,ke,ke[0].nodeRangePlot3))}me&&(F(qe),D(qe))}function fe(qe,Ye,me){for(var _e=me?t.difference:t.union,Ae=_e({regions:qe},{regions:[Ye]}),ke=Ae.regions.reverse(),Ee=0;Ee<ke.length;Ee++){var De=ke[Ee];De.subtract=Ve(De,ke.slice(0,Ee))}return ke}function ae(qe,Ye){if(Array.isArray(qe))for(var me=Ye.cd,_e=Ye.cd[0].trace,Ae=0;Ae<qe.length;Ae++)qe[Ae]=n(qe[Ae],_e,me);return qe}function ee(qe,Ye){for(var me=[],_e=0;_e<qe.length;_e++){me[_e]=[];for(var Ae=0;Ae<qe[_e].length;Ae++){me[_e][Ae]=[],me[_e][Ae][0]=Ae?"L":"M";for(var ke=0;ke<qe[_e][Ae].length;ke++)me[_e][Ae].push(qe[_e][Ae][ke])}Ye||me[_e].push(["Z",me[_e][0][1],me[_e][0][2]])}return me}function ie(qe,Ye){for(var me=[],_e,Ae=[],ke,Ee=0;Ee<Ye.length;Ee++){var De=Ye[Ee];ke=De._module.selectPoints(De,qe),Ae.push(ke),_e=ae(ke,De),me=me.concat(_e)}return me}function Q(qe,Ye,me,_e,Ae){var ke=!!_e,Ee,De,Je;Ae&&(Ee=Ae.plotinfo,De=Ae.xaxes[0]._id,Je=Ae.yaxes[0]._id);var Ue=[],at=[],rt=je(qe),ft=qe._fullLayout;if(Ee){var At=ft._zoomlayer,ht=ft.dragmode,Gt=h(ht),fr=p(ht);if(Gt||fr){var gt=T(qe,De,"x"),yt=T(qe,Je,"y");if(gt&&yt){var kt=At.selectAll(".select-outline-"+Ee.id);if(kt&&qe._fullLayout._outlining&&kt.length){for(var Lt=kt[0][0],Ct=Lt.getAttribute("d"),$t=S(Ct,qe,Ee),mr=[],br=0;br<$t.length;br++){for(var Er=$t[br],Tr=[],Ur=0;Ur<Er.length;Ur++)Tr.push([Ze(gt,Er[Ur][1]),Ze(yt,Er[Ur][2])]);Tr.xref=De,Tr.yref=Je,Tr.subtract=Ve(Tr,mr),mr.push(Tr)}rt=rt.concat(mr)}}}}var Ai=De&&Je?[De+Je]:ft._subplots.cartesian;ue(qe);for(var oi={},Qr=0;Qr<Ai.length;Qr++){var ea=Ai[Qr],$i=ea.indexOf("y"),ja=ea.slice(0,$i),ya=ea.slice($i),pa=De&&Je?me:void 0;if(pa=Te(rt,ja,ya,pa),pa){var xi=_e;if(!ke){var bi=T(qe,ja,"x"),Ua=T(qe,ya,"y");xi=K(qe,[bi],[Ua],ea);for(var dn=0;dn<xi.length;dn++){var pi=xi[dn],Jr=pi.cd[0],Be=Jr.trace;if(pi._module.name==="scattergl"&&!Jr.t.xpx){var Fe=Be.x,Et=Be.y,St=Be._length;Jr.t.xpx=[],Jr.t.ypx=[];for(var zt=0;zt<St;zt++)Jr.t.xpx[zt]=bi.c2p(Fe[zt]),Jr.t.ypx[zt]=Ua.c2p(Et[zt])}pi._module.name==="splom"&&(oi[Be.uid]||(oi[Be.uid]=!0))}}var Wt=ie(pa,xi);Ue=Ue.concat(Wt),at=at.concat(xi)}}var Yt={points:Ue};xe(qe,at,Yt);var ze=ft.clickmode,tt=ze.indexOf("event")>-1&&Ye;if(!Ee&&Ye){var ct=je(qe,!0);if(ct.length){var wt=ct[0].xref,Nt=ct[0].yref;if(wt&&Nt){var It=Ke(ct),Zt=xt([T(qe,wt,"x"),T(qe,Nt,"y")]);Zt(Yt,It)}}qe._fullLayout._noEmitSelectedAtStart?qe._fullLayout._noEmitSelectedAtStart=!1:tt&&Mt(qe,Yt),ft._reselect=!1}if(!Ee&&ft._deselect){var qt=ft._deselect;De=qt.xref,Je=qt.yref,ge(De,Je,at)||Me(qe,De,Je,_e),tt&&(Yt.points.length?Mt(qe,Yt):lt(qe)),ft._deselect=!1}return{eventData:Yt,selectionTesters:me}}function ue(qe){var Ye=qe.calcdata;if(Ye)for(var me=0;me<Ye.length;me++){var _e=Ye[me][0],Ae=_e.trace,ke=qe._fullLayout._splomScenes;if(ke){var Ee=ke[Ae.uid];Ee&&(Ee.selectBatch=[])}}}function ge(qe,Ye,me){for(var _e=0;_e<me.length;_e++){var Ae=me[_e];if(Ae.xaxis&&Ae.xaxis._id===qe&&Ae.yaxis&&Ae.yaxis._id===Ye)return!0}return!1}function Me(qe,Ye,me,_e){_e=K(qe,[T(qe,Ye,"x")],[T(qe,me,"y")],Ye+me);for(var Ae=0;Ae<_e.length;Ae++){var ke=_e[Ae];ke._module.selectPoints(ke,!1)}xe(qe,_e)}function Te(qe,Ye,me,_e){for(var Ae,ke=0;ke<qe.length;ke++){var Ee=qe[ke];if(!(Ye!==Ee.xref||me!==Ee.yref))if(Ae){var De=!!Ee.subtract;Ae=fe(Ae,Ee,De),_e=$(Ae)}else Ae=[Ee],_e=I(Ee)}return _e}function je(qe,Ye){for(var me=[],_e=qe._fullLayout,Ae=_e.selections,ke=Ae.length,Ee=0;Ee<ke;Ee++)if(!(Ye&&Ee!==_e._activeSelectionIndex)){var De=Ae[Ee];if(De){var Je=De.xref,Ue=De.yref,at=T(qe,Je,"x"),rt=T(qe,Ue,"y"),ft,At,ht,Gt,fr;if(De.type==="rect"){fr=[];var gt=Ze(at,De.x0),yt=Ze(at,De.x1),kt=Ze(rt,De.y0),Lt=Ze(rt,De.y1);fr=[[gt,kt],[gt,Lt],[yt,Lt],[yt,kt]],ft=Math.min(gt,yt),At=Math.max(gt,yt),ht=Math.min(kt,Lt),Gt=Math.max(kt,Lt),fr.xmin=ft,fr.xmax=At,fr.ymin=ht,fr.ymax=Gt,fr.xref=Je,fr.yref=Ue,fr.subtract=!1,fr.isRect=!0,me.push(fr)}else if(De.type==="path")for(var Ct=De.path.split("Z"),$t=[],mr=0;mr<Ct.length;mr++){var br=Ct[mr];if(br){br+="Z";var Er=g.extractPathCoords(br,m.paramIsX,"raw"),Tr=g.extractPathCoords(br,m.paramIsY,"raw");ft=1/0,At=-1/0,ht=1/0,Gt=-1/0,fr=[];for(var Ur=0;Ur<Er.length;Ur++){var Ai=Ze(at,Er[Ur]),oi=Ze(rt,Tr[Ur]);fr.push([Ai,oi]),ft=Math.min(Ai,ft),At=Math.max(Ai,At),ht=Math.min(oi,ht),Gt=Math.max(oi,Gt)}fr.xmin=ft,fr.xmax=At,fr.ymin=ht,fr.ymax=Gt,fr.xref=Je,fr.yref=Ue,fr.subtract=Ve(fr,$t),$t.push(fr),me.push(fr)}}}}return me}function Ve(qe,Ye){for(var me=!1,_e=0;_e<Ye.length;_e++)for(var Ae=Ye[_e],ke=0;ke<qe.length;ke++)if(i(qe[ke],Ae)){me=!me;break}return me}function Ze(qe,Ye){return qe.type==="date"&&(Ye=Ye.replace("_"," ")),qe.type==="log"?qe.c2p(Ye):qe.r2p(Ye,null,qe.calendar)}function Ke(qe){for(var Ye=qe.length,me=[],_e=0;_e<Ye;_e++){var Ae=qe[_e];me=me.concat(Ae),me=me.concat([Ae[0]])}return vt(me)}function vt(qe){return qe.isRect=qe.length===5&&qe[0][0]===qe[4][0]&&qe[0][1]===qe[4][1]&&qe[0][0]===qe[1][0]&&qe[2][0]===qe[3][0]&&qe[0][1]===qe[3][1]&&qe[1][1]===qe[2][1]||qe[0][1]===qe[1][1]&&qe[2][1]===qe[3][1]&&qe[0][0]===qe[3][0]&&qe[1][0]===qe[2][0],qe.isRect&&(qe.xmin=Math.min(qe[0][0],qe[2][0]),qe.xmax=Math.max(qe[0][0],qe[2][0]),qe.ymin=Math.min(qe[0][1],qe[2][1]),qe.ymax=Math.max(qe[0][1],qe[2][1])),qe}function xt(qe){return function(Ye,me){for(var _e,Ae,ke=0;ke<qe.length;ke++){var Ee=qe[ke],De=Ee._id,Je=De.charAt(0);if(me.isRect){_e||(_e={});var Ue=me[Je+"min"],at=me[Je+"max"];Ue!==void 0&&at!==void 0&&(_e[De]=[B(Ee,Ue),B(Ee,at)].sort(A))}else Ae||(Ae={}),Ae[De]=me.map(O(Ee))}_e&&(Ye.range=_e),Ae&&(Ye.lassoPoints=Ae)}}function Pt(qe){var Ye=qe.plotinfo;return Ye.fillRangeItems||xt(qe.xaxes.concat(qe.yaxes))}function mt(qe,Ye){qe.emit("plotly_selecting",Ye)}function Mt(qe,Ye){Ye&&(Ye.selections=(qe.layout||{}).selections||[]),qe.emit("plotly_selected",Ye)}function lt(qe){qe.emit("plotly_deselect",null)}r.exports={reselect:Q,prepSelect:X,clearOutline:_,clearSelectionsCache:q,selectOnClick:Z}}}),KE=de({"src/components/annotations/arrow_paths.js"(e,r){"use strict";r.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]}}),Py=de({"src/constants/axis_placeable_objects.js"(e,r){"use strict";r.exports={axisRefDescription:function(t,i,a){return["If set to a",t,"axis id (e.g. *"+t+"* or","*"+t+"2*), the `"+t+"` position refers to a",t,"coordinate. If set to *paper*, the `"+t+"`","position refers to the distance from the",i,"of the plotting","area in normalized coordinates where *0* (*1*) corresponds to the",i,"("+a+"). If set to a",t,"axis ID followed by","*domain* (separated by a space), the position behaves like for","*paper*, but refers to the distance in fractions of the domain","length from the",i,"of the domain of that axis: e.g.,","*"+t+"2 domain* refers to the domain of the second",t,"axis and a",t,"position of 0.5 refers to the","point between the",i,"and the",a,"of the domain of the","second",t,"axis."].join(" ")}}}}),g0=de({"src/components/annotations/attributes.js"(e,r){"use strict";var t=KE(),i=us(),a=zl(),o=Ro().templatedArray,s=Py();r.exports=o("annotation",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},text:{valType:"string",editType:"calc+arraydraw"},textangle:{valType:"angle",dflt:0,editType:"calc+arraydraw"},font:i({editType:"calc+arraydraw",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},height:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},showarrow:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:t.length,dflt:1,editType:"arraydraw"},startarrowhead:{valType:"integer",min:0,max:t.length,dflt:1,editType:"arraydraw"},arrowside:{valType:"flaglist",flags:["end","start"],extras:["none"],dflt:"end",editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},startarrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},arrowwidth:{valType:"number",min:.1,editType:"calc+arraydraw"},standoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},startstandoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},ax:{valType:"any",editType:"calc+arraydraw"},ay:{valType:"any",editType:"calc+arraydraw"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",a.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},xshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},yref:{valType:"enumerated",values:["paper",a.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calc+arraydraw"},yshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:i({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc"})}}),Zd=de({"src/traces/scatter/constants.js"(e,r){"use strict";r.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}}}),Kd=de({"src/traces/scatter/fillcolor_attribute.js"(e,r){"use strict";r.exports=function(i){return{valType:"color",editType:"style",anim:!0}}}}),tl=de({"src/traces/scatter/attributes.js"(e,r){"use strict";var t=Ns().axisHoverFormat,{hovertemplateAttrs:i,texttemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=cs(),l=us(),n=fu().dash,u=fu().pattern,c=hn(),f=Zd(),h=fn().extendFlat,d=Kd();function p(y){return{valType:"any",dflt:0,editType:"calc"}}function g(y){return{valType:"any",editType:"calc"}}function m(y){return{valType:"enumerated",values:["start","middle","end"],dflt:"middle",editType:"calc"}}r.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dx:{valType:"number",dflt:1,editType:"calc",anim:!0},y:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dy:{valType:"number",dflt:1,editType:"calc",anim:!0},xperiod:p("x"),yperiod:p("y"),xperiod0:g("x0"),yperiod0:g("y0"),xperiodalignment:m("x"),yperiodalignment:m("y"),xhoverformat:t("x"),yhoverformat:t("y"),offsetgroup:{valType:"string",dflt:"",editType:"calc"},alignmentgroup:{valType:"string",dflt:"",editType:"calc"},stackgroup:{valType:"string",dflt:"",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc"},groupnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},stackgaps:{valType:"enumerated",values:["infer zero","interpolate"],dflt:"infer zero",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},texttemplate:a(),texttemplatefallback:o({editType:"calc"}),hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"],editType:"calc"},hoveron:{valType:"flaglist",flags:["points","fills"],editType:"style"},hovertemplate:i({},{keys:f.eventDataKeys}),hovertemplatefallback:o(),line:{color:{valType:"color",editType:"style",anim:!0},width:{valType:"number",min:0,dflt:2,editType:"style",anim:!0},shape:{valType:"enumerated",values:["linear","spline","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},smoothing:{valType:"number",min:0,max:1.3,dflt:1,editType:"plot"},dash:h({},n,{editType:"style"}),backoff:{valType:"number",min:0,dflt:"auto",arrayOk:!0,editType:"plot"},simplify:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},cliponaxis:{valType:"boolean",dflt:!0,editType:"plot"},fill:{valType:"enumerated",values:["none","tozeroy","tozerox","tonexty","tonextx","toself","tonext"],editType:"calc"},fillcolor:d(!0),fillgradient:h({type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],dflt:"none",editType:"calc"},start:{valType:"number",editType:"calc"},stop:{valType:"number",editType:"calc"},colorscale:{valType:"colorscale",editType:"style"},editType:"calc"}),fillpattern:u,marker:h({symbol:{valType:"enumerated",values:c.symbolList,dflt:"circle",arrayOk:!0,editType:"style"},opacity:{valType:"number",min:0,max:1,arrayOk:!0,editType:"style",anim:!0},angle:{valType:"angle",dflt:0,arrayOk:!0,editType:"plot",anim:!1},angleref:{valType:"enumerated",values:["previous","up"],dflt:"up",editType:"plot",anim:!1},standoff:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"plot",anim:!0},size:{valType:"number",min:0,dflt:6,arrayOk:!0,editType:"calc",anim:!0},maxdisplayed:{valType:"number",min:0,dflt:0,editType:"plot"},sizeref:{valType:"number",dflt:1,editType:"calc"},sizemin:{valType:"number",min:0,dflt:0,editType:"calc"},sizemode:{valType:"enumerated",values:["diameter","area"],dflt:"diameter",editType:"calc"},line:h({width:{valType:"number",min:0,arrayOk:!0,editType:"style",anim:!0},dash:h({},n,{arrayOk:!0}),editType:"calc"},s("marker.line",{anim:!0})),gradient:{type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],arrayOk:!0,dflt:"none",editType:"calc"},color:{valType:"color",arrayOk:!0,editType:"calc"},editType:"calc"},editType:"calc"},s("marker",{anim:!0})),selected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},unselected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"middle center",arrayOk:!0,editType:"calc"},textfont:l({editType:"calc",colorEditType:"style",arrayOk:!0}),zorder:{valType:"integer",dflt:0,editType:"plot"}}}}),JE=de({"src/components/selections/attributes.js"(e,r){"use strict";var t=g0(),i=tl().line,a=fu().dash,o=fn().extendFlat,s=Ps().overrideAll,l=Ro().templatedArray,n=Py();r.exports=s(l("selection",{type:{valType:"enumerated",values:["rect","path"]},xref:o({},t.xref,{}),yref:o({},t.yref,{}),x0:{valType:"any"},x1:{valType:"any"},y0:{valType:"any"},y1:{valType:"any"},path:{valType:"string",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:.7,editType:"arraydraw"},line:{color:i.color,width:o({},i.width,{min:1,dflt:1}),dash:o({},a,{dflt:"dot"})}}),"arraydraw","from-root")}}),Vq=de({"src/components/selections/defaults.js"(e,r){"use strict";var t=Qt(),i=nn(),a=fc(),o=JE(),s=m0();r.exports=function(u,c){a(u,c,{name:"selections",handleItemDefaults:l});for(var f=c.selections,h=0;h<f.length;h++){var d=f[h];d&&d.path===void 0&&(d.x0===void 0||d.x1===void 0||d.y0===void 0||d.y1===void 0)&&(c.selections[h]=null)}};function l(n,u,c){function f(F,D){return t.coerce(n,u,o,F,D)}var h=f("path"),d=h?"path":"rect",p=f("type",d),g=p!=="path";g&&delete u.path,f("opacity"),f("line.color"),f("line.width"),f("line.dash");for(var m=["x","y"],y=0;y<2;y++){var _=m[y],v={_fullLayout:c},x,S,M,C=i.coerceRef(n,u,v,_);if(x=i.getFromId(v,C),x._selectionIndices.push(u._index),M=s.rangeToShapePosition(x),S=s.shapePositionToRange(x),g){var w=_+"0",k=_+"1",A=n[w],b=n[k];n[w]=S(n[w],!0),n[k]=S(n[k],!0),i.coercePosition(u,v,f,C,w),i.coercePosition(u,v,f,C,k);var E=u[w],T=u[k];E!==void 0&&T!==void 0&&(u[w]=M(E),u[k]=M(T),n[w]=A,n[k]=b)}}g&&t.noneOrAll(n,u,["x0","x1","y0","y1"])}}}),Gq=de({"src/components/selections/draw_newselection/defaults.js"(e,r){"use strict";r.exports=function(i,a,o){o("newselection.mode");var s=o("newselection.line.width");s&&(o("newselection.line.color"),o("newselection.line.dash")),o("activeselection.fillcolor"),o("activeselection.opacity")}}}),Iy=de({"src/plots/cartesian/include_components.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=Hs();r.exports=function(s){return function(n,u){var c=n[s];if(Array.isArray(c))for(var f=t.subplotsRegistry.cartesian,h=f.idRegex,d=u._subplots,p=d.xaxis,g=d.yaxis,m=d.cartesian,y=u._has("cartesian"),_=0;_<c.length;_++){var v=c[_];if(i.isPlainObject(v)){var x=a.cleanId(v.xref,"x",!1),S=a.cleanId(v.yref,"y",!1),M=h.x.test(x),C=h.y.test(S);if(M||C){y||i.pushUnique(u._basePlotModules,f);var w=!1;M&&p.indexOf(x)===-1&&(p.push(x),w=!0),C&&g.indexOf(S)===-1&&(g.push(S),w=!0),w&&M&&C&&m.push(x+S)}}}}}}}),Zl=de({"src/components/selections/index.js"(e,r){"use strict";var t=ZE(),i=qq();r.exports={moduleType:"component",name:"selections",layoutAttributes:JE(),supplyLayoutDefaults:Vq(),supplyDrawNewSelectionDefaults:Gq(),includeBasePlot:Iy()("selections"),draw:t.draw,drawOne:t.drawOne,reselect:i.reselect,prepSelect:i.prepSelect,clearOutline:i.clearOutline,clearSelectionsCache:i.clearSelectionsCache,selectOnClick:i.selectOnClick}}}),QE=de({"src/plots/cartesian/dragbox.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=i.numberFormat,o=Mw(),s=Ma(),l=i.strTranslate,n=Zo(),u=ta(),c=hn(),f=$s(),h=nn(),d=md(),p=Uc(),g=Xd(),m=g.selectingOrDrawing,y=g.freeMode,_=Bl().FROM_TL,v=Cy(),x=Ly().redrawReglTraces,S=Es(),M=Hs().getFromId,C=Zl().prepSelect,w=Zl().clearOutline,k=Zl().selectOnClick,A=XE(),b=zl(),E=b.MINDRAG,T=b.MINZOOM,F=!0;function D(K,te,ne,se,le,ce,pe,xe){var ye=K._fullLayout._zoomlayer,fe=pe+xe==="nsew",ae=(pe+xe).length===1,ee,ie,Q,ue,ge,Me,Te,je,Ve,Ze,Ke,vt,xt,Pt,mt,Mt,lt,qe,Ye,me,_e,Ae,ke;ne+=te.yaxis._shift;function Ee(){if(ee=te.xaxis,ie=te.yaxis,Ve=ee._length,Ze=ie._length,Te=ee._offset,je=ie._offset,Q={},Q[ee._id]=ee,ue={},ue[ie._id]=ie,pe&&xe)for(var pi=te.overlays,Jr=0;Jr<pi.length;Jr++){var Be=pi[Jr].xaxis;Q[Be._id]=Be;var Fe=pi[Jr].yaxis;ue[Fe._id]=Fe}ge=Y(Q),Me=Y(ue),xt=z(ge,xe),Pt=z(Me,pe),mt=!Pt&&!xt,vt=j(K,K._fullLayout._axisMatchGroups,Q,ue),Ke=j(K,K._fullLayout._axisConstraintGroups,Q,ue,vt);var Et=Ke.isSubplotConstrained||vt.isSubplotConstrained;Mt=xe||Et,lt=pe||Et;var St=K._fullLayout;qe=St._has("scattergl"),Ye=St._has("splom"),me=St._has("svg")}Ee();var De=G(Pt+xt,K._fullLayout.dragmode,fe),Je=P(te,pe+xe+"drag",De,ne,se,le,ce);if(mt&&!fe)return Je.onmousedown=null,Je.style.pointerEvents="none",Je;var Ue={element:Je,gd:K,plotinfo:te};Ue.prepFn=function(pi,Jr,Be){var Fe=Ue.dragmode,Et=K._fullLayout.dragmode;Et!==Fe&&(Ue.dragmode=Et),Ee(),Ae=K._fullLayout._invScaleX,ke=K._fullLayout._invScaleY,mt||(fe?pi.shiftKey?Et==="pan"?Et="zoom":m(Et)||(Et="pan"):pi.ctrlKey&&(Et="pan"):Et="pan"),y(Et)?Ue.minDrag=1:Ue.minDrag=void 0,m(Et)?(Ue.xaxes=ge,Ue.yaxes=Me,C(pi,Jr,Be,Ue,Et)):(Ue.clickFn=rt,m(Fe)&&at(),mt||(Et==="zoom"?(Ue.moveFn=mr,Ue.doneFn=Er,Ue.minDrag=1,$t(pi,Jr,Be)):Et==="pan"&&(Ue.moveFn=ea,Ue.doneFn=pa))),K._fullLayout._redrag=function(){var St=K._dragdata;if(St&&St.element===Je){var zt=K._fullLayout.dragmode;m(zt)||(Ee(),xi([0,0,Ve,Ze]),Ue.moveFn(St.dx,St.dy))}}};function at(){Ue.plotinfo.selection=!1,w(K)}function rt(pi,Jr){var Be=Ue.gd;if(Be._fullLayout._activeShapeIndex>=0){Be._fullLayout._deactivateShape(Be);return}var Fe=Be._fullLayout.clickmode;if(N(Be),pi===2&&!ae&&ya(),fe)Fe.indexOf("select")>-1&&k(Jr,Be,ge,Me,te.id,Ue),Fe.indexOf("event")>-1&&f.click(Be,Jr,te.id);else if(pi===1&&ae){var Et=pe?ie:ee,St=pe==="s"||xe==="w"?0:1,zt=Et._name+".range["+St+"]",Wt=I(Et,St),Yt="left",ze="middle";if(Et.fixedrange)return;pe?(ze=pe==="n"?"top":"bottom",Et.side==="right"&&(Yt="right")):xe==="e"&&(Yt="right"),Be._context.showAxisRangeEntryBoxes&&t.select(Je).call(n.makeEditable,{gd:Be,immediate:!0,background:Be._fullLayout.paper_bgcolor,text:String(Wt),fill:Et.tickfont?Et.tickfont.color:"#444",horizontalAlign:Yt,verticalAlign:ze}).on("edit",function(tt){var ct=Et.d2r(tt);ct!==void 0&&s.call("_guiRelayout",Be,zt,ct)})}}p.init(Ue);var ft,At,ht,Gt,fr,gt,yt,kt,Lt,Ct;function $t(pi,Jr,Be){var Fe=Je.getBoundingClientRect();ft=Jr-Fe.left,At=Be-Fe.top,K._fullLayout._calcInverseTransform(K);var Et=i.apply3DTransform(K._fullLayout._invTransform)(ft,At);ft=Et[0],At=Et[1],ht={l:ft,r:ft,w:0,t:At,b:At,h:0},Gt=K._hmpixcount?K._hmlumcount/K._hmpixcount:u.luminosity(K._fullLayout.plot_bgcolor),fr="M0,0H"+Ve+"V"+Ze+"H0V0",gt=!1,yt="xy",Ct=!1,kt=W(ye,Gt,Te,je,fr),Lt=X(ye,Te,je)}function mr(pi,Jr){if(K._transitioningWithDuration)return!1;var Be=Math.max(0,Math.min(Ve,Ae*pi+ft)),Fe=Math.max(0,Math.min(Ze,ke*Jr+At)),Et=Math.abs(Be-ft),St=Math.abs(Fe-At);ht.l=Math.min(ft,Be),ht.r=Math.max(ft,Be),ht.t=Math.min(At,Fe),ht.b=Math.max(At,Fe);function zt(){yt="",ht.r=ht.l,ht.t=ht.b,Lt.attr("d","M0,0Z")}if(Ke.isSubplotConstrained)Et>T||St>T?(yt="xy",Et/Ve>St/Ze?(St=Et*Ze/Ve,At>Fe?ht.t=At-St:ht.b=At+St):(Et=St*Ve/Ze,ft>Be?ht.l=ft-Et:ht.r=ft+Et),Lt.attr("d",V(ht))):zt();else if(vt.isSubplotConstrained)if(Et>T||St>T){yt="xy";var Wt=Math.min(ht.l/Ve,(Ze-ht.b)/Ze),Yt=Math.max(ht.r/Ve,(Ze-ht.t)/Ze);ht.l=Wt*Ve,ht.r=Yt*Ve,ht.b=(1-Wt)*Ze,ht.t=(1-Yt)*Ze,Lt.attr("d",V(ht))}else zt();else!Pt||St<Math.min(Math.max(Et*.6,E),T)?Et<E||!xt?zt():(ht.t=0,ht.b=Ze,yt="x",Lt.attr("d",$(ht,At))):!xt||Et<Math.min(St*.6,T)?(ht.l=0,ht.r=Ve,yt="y",Lt.attr("d",U(ht,ft))):(yt="xy",Lt.attr("d",V(ht)));ht.w=ht.r-ht.l,ht.h=ht.b-ht.t,yt&&(Ct=!0),K._dragged=Ct,Z(kt,Lt,ht,fr,gt,Gt),br(),K.emit("plotly_relayouting",_e),gt=!0}function br(){_e={},(yt==="xy"||yt==="x")&&(L(ge,ht.l/Ve,ht.r/Ve,_e,Ke.xaxes),$i("x",_e)),(yt==="xy"||yt==="y")&&(L(Me,(Ze-ht.b)/Ze,(Ze-ht.t)/Ze,_e,Ke.yaxes),$i("y",_e))}function Er(){br(),N(K),pa(),H(K)}var Tr=[0,0,Ve,Ze],Ur=null,Ai=b.REDRAWDELAY,oi=te.mainplot?K._fullLayout._plots[te.mainplot]:te;function Qr(pi){if(!K._context._scrollZoom.cartesian&&!K._fullLayout._enablescrollzoom)return;if(at(),K._transitioningWithDuration){pi.preventDefault(),pi.stopPropagation();return}Ee(),clearTimeout(Ur);var Jr=-pi.deltaY;if(isFinite(Jr)||(Jr=pi.wheelDelta/10),!isFinite(Jr)){i.log("Did not find wheel motion attributes: ",pi);return}K._fullLayout._replotting=!0;var Be=Math.exp(-Math.min(Math.max(Jr,-20),20)/200),Fe=oi.draglayer.select(".nsewdrag").node().getBoundingClientRect(),Et=(pi.clientX-Fe.left)/Fe.width,St=(Fe.bottom-pi.clientY)/Fe.height,zt;function Wt(Yt,ze,tt){if(Yt.fixedrange)return;var ct=i.simpleMap(Yt.range,Yt.r2l),wt=ct[0]+(ct[1]-ct[0])*ze;function Nt(It){return Yt.l2r(wt+(It-wt)*tt)}Yt.range=ct.map(Nt)}if(Mt){for(xe||(Et=.5),zt=0;zt<ge.length;zt++)Wt(ge[zt],Et,Be);$i("x"),Tr[2]*=Be,Tr[0]+=Tr[2]*Et*(1/Be-1)}if(lt){for(pe||(St=.5),zt=0;zt<Me.length;zt++)Wt(Me[zt],St,Be);$i("y"),Tr[3]*=Be,Tr[1]+=Tr[3]*(1-St)*(1/Be-1)}xi(Tr),ja(),K.emit("plotly_relayouting",_e),Ur=setTimeout(function(){K._fullLayout&&(Tr=[0,0,Ve,Ze],pa())},Ai),pi.preventDefault()}pe.length*xe.length!==1&&q(Je,Qr);function ea(pi,Jr){if(pi=pi*Ae,Jr=Jr*ke,K._transitioningWithDuration)return;if(K._fullLayout._replotting=!0,xt==="ew"||Pt==="ns"){var Be=xt?-pi:0,Fe=Pt?-Jr:0;if(vt.isSubplotConstrained){if(xt&&Pt){var Et=(pi/Ve-Jr/Ze)/2;pi=Et*Ve,Jr=-Et*Ze,Be=-pi,Fe=-Jr}Pt?Be=-Fe*Ve/Ze:Fe=-Be*Ze/Ve}xt&&(B(ge,pi),$i("x")),Pt&&(B(Me,Jr),$i("y")),xi([Be,Fe,Ve,Ze]),ja(),K.emit("plotly_relayouting",_e);return}function St(Nt,It,Zt){for(var qt=1-It,vr,Br,Pr=0;Pr<Nt.length;Pr++){var Mi=Nt[Pr];if(!Mi.fixedrange){vr=Mi,Br=Mi._rl[qt]+(Mi._rl[It]-Mi._rl[qt])/O(Zt/Mi._length);var gi=Mi.l2r(Br);gi!==!1&&gi!==void 0&&(Mi.range[It]=gi)}}return vr._length*(vr._rl[It]-Br)/(vr._rl[It]-vr._rl[qt])}var zt=xt==="w"==(Pt==="n")?1:-1;if(xt&&Pt&&(Ke.isSubplotConstrained||vt.isSubplotConstrained)){var Wt=(pi/Ve+zt*Jr/Ze)/2;pi=Wt*Ve,Jr=zt*Wt*Ze}var Yt,ze;if(xt==="w"?pi=St(ge,0,pi):xt==="e"?pi=St(ge,1,-pi):xt||(pi=0),Pt==="n"?Jr=St(Me,1,Jr):Pt==="s"?Jr=St(Me,0,-Jr):Pt||(Jr=0),Yt=xt==="w"?pi:0,ze=Pt==="n"?Jr:0,Ke.isSubplotConstrained&&!vt.isSubplotConstrained||vt.isSubplotConstrained&&xt&&Pt&&zt>0){var tt;if(vt.isSubplotConstrained||!xt&&Pt.length===1){for(tt=0;tt<ge.length;tt++)ge[tt].range=ge[tt]._r.slice(),A(ge[tt],1-Jr/Ze);pi=Jr*Ve/Ze,Yt=pi/2}if(vt.isSubplotConstrained||!Pt&&xt.length===1){for(tt=0;tt<Me.length;tt++)Me[tt].range=Me[tt]._r.slice(),A(Me[tt],1-pi/Ve);Jr=pi*Ze/Ve,ze=Jr/2}}(!vt.isSubplotConstrained||!Pt)&&$i("x"),(!vt.isSubplotConstrained||!xt)&&$i("y");var ct=Ve-pi,wt=Ze-Jr;vt.isSubplotConstrained&&!(xt&&Pt)&&(xt?(ze=Yt?0:pi*Ze/Ve,wt=ct*Ze/Ve):(Yt=ze?0:Jr*Ve/Ze,ct=wt*Ve/Ze)),xi([Yt,ze,ct,wt]),ja(),K.emit("plotly_relayouting",_e)}function $i(pi,Jr){for(var Be=vt.isSubplotConstrained?{x:Me,y:ge}[pi]:vt[pi+"axes"],Fe=vt.isSubplotConstrained?{x:ge,y:Me}[pi]:[],Et=0;Et<Be.length;Et++){var St=Be[Et],zt=St._id,Wt=vt.xLinks[zt]||vt.yLinks[zt],Yt=Fe[0]||Q[Wt]||ue[Wt];Yt&&(Jr?(Jr[St._name+".range[0]"]=Jr[Yt._name+".range[0]"],Jr[St._name+".range[1]"]=Jr[Yt._name+".range[1]"]):St.range=Yt.range.slice())}}function ja(){var pi=[],Jr;function Be(zt){for(Jr=0;Jr<zt.length;Jr++)zt[Jr].fixedrange||pi.push(zt[Jr]._id)}function Fe(zt,Wt){for(Jr=0;Jr<zt.length;Jr++){var Yt=zt[Jr],ze=Yt[Wt],tt=ze._id;!Yt.fixedrange&&ze.tickmode==="sync"&&!pi.includes(tt)&&pi.push(tt)}}for(Mt&&(Be(ge),Be(Ke.xaxes),Be(vt.xaxes),Fe(te.overlays,"xaxis")),lt&&(Be(Me),Be(Ke.yaxes),Be(vt.yaxes),Fe(te.overlays,"yaxis")),_e={},Jr=0;Jr<pi.length;Jr++){var Et=pi[Jr],St=M(K,Et);h.drawOne(K,St,{skipTitle:!0}),_e[St._name+".range[0]"]=St.range[0],_e[St._name+".range[1]"]=St.range[1]}h.redrawComponents(K,pi)}function ya(){if(!K._transitioningWithDuration){var pi=K._context.doubleClick,Jr=[];xt&&(Jr=Jr.concat(ge)),Pt&&(Jr=Jr.concat(Me)),vt.xaxes&&(Jr=Jr.concat(vt.xaxes)),vt.yaxes&&(Jr=Jr.concat(vt.yaxes));var Be={},Fe,Et;if(pi==="reset+autosize")for(pi="autosize",Et=0;Et<Jr.length;Et++){Fe=Jr[Et];var St=Fe._rangeInitial0,zt=Fe._rangeInitial1,Wt=St!==void 0||zt!==void 0;if(Wt&&(St!==void 0&&St!==Fe.range[0]||zt!==void 0&&zt!==Fe.range[1])||!Wt&&Fe.autorange!==!0){pi="reset";break}}if(pi==="autosize")for(Et=0;Et<Jr.length;Et++)Fe=Jr[Et],Fe.fixedrange||(Be[Fe._name+".autorange"]=!0);else if(pi==="reset"){for((xt||Ke.isSubplotConstrained)&&(Jr=Jr.concat(Ke.xaxes)),Pt&&!Ke.isSubplotConstrained&&(Jr=Jr.concat(Ke.yaxes)),Ke.isSubplotConstrained&&(xt?Pt||(Jr=Jr.concat(Me)):Jr=Jr.concat(ge)),Et=0;Et<Jr.length;Et++)if(Fe=Jr[Et],!Fe.fixedrange){var Yt=Fe._name,ze=Fe._autorangeInitial;Fe._rangeInitial0===void 0&&Fe._rangeInitial1===void 0?Be[Yt+".autorange"]=!0:Fe._rangeInitial0===void 0?(Be[Yt+".autorange"]=ze,Be[Yt+".range"]=[null,Fe._rangeInitial1]):Fe._rangeInitial1===void 0?(Be[Yt+".range"]=[Fe._rangeInitial0,null],Be[Yt+".autorange"]=ze):Be[Yt+".range"]=[Fe._rangeInitial0,Fe._rangeInitial1]}}K.emit("plotly_doubleclick",null),s.call("_guiRelayout",K,Be)}}function pa(){xi([0,0,Ve,Ze]),i.syncOrAsync([S.previousPromises,function(){K._fullLayout._replotting=!1,s.call("_guiRelayout",K,_e)}],K)}function xi(pi){var Jr=K._fullLayout,Be=Jr._plots,Fe=Jr._subplots.cartesian,Et,St,zt,Wt;if(Ye&&s.subplotsRegistry.splom.drag(K),qe){for(Et=0;Et<Fe.length;Et++)if(St=Be[Fe[Et]],zt=St.xaxis,Wt=St.yaxis,St._scene){zt.limitRange&&zt.limitRange(),Wt.limitRange&&Wt.limitRange();var Yt=i.simpleMap(zt.range,zt.r2l),ze=i.simpleMap(Wt.range,Wt.r2l);St._scene.update({range:[Yt[0],ze[0],Yt[1],ze[1]]})}}if((Ye||qe)&&(v(K),x(K)),me){var tt=pi[2]/ee._length,ct=pi[3]/ie._length;for(Et=0;Et<Fe.length;Et++){St=Be[Fe[Et]],zt=St.xaxis,Wt=St.yaxis;var wt=(Mt||vt.isSubplotConstrained)&&!zt.fixedrange&&Q[zt._id],Nt=(lt||vt.isSubplotConstrained)&&!Wt.fixedrange&&ue[Wt._id],It,Zt,qt,vr;if(wt?(It=tt,qt=xe||vt.isSubplotConstrained?pi[0]:dn(zt,It)):vt.xaHash[zt._id]?(It=tt,qt=pi[0]*zt._length/ee._length):vt.yaHash[zt._id]?(It=ct,qt=Pt==="ns"?-pi[1]*zt._length/ie._length:dn(zt,It,{n:"top",s:"bottom"}[Pt])):(It=bi(zt,tt,ct),qt=Ua(zt,It)),It>1&&(zt.maxallowed!==void 0&&Mt===(zt.range[0]<zt.range[1]?"e":"w")||zt.minallowed!==void 0&&Mt===(zt.range[0]<zt.range[1]?"w":"e"))&&(It=1,qt=0),Nt?(Zt=ct,vr=pe||vt.isSubplotConstrained?pi[1]:dn(Wt,Zt)):vt.yaHash[Wt._id]?(Zt=ct,vr=pi[1]*Wt._length/ie._length):vt.xaHash[Wt._id]?(Zt=tt,vr=xt==="ew"?-pi[0]*Wt._length/ee._length:dn(Wt,Zt,{e:"right",w:"left"}[xt])):(Zt=bi(Wt,tt,ct),vr=Ua(Wt,Zt)),Zt>1&&(Wt.maxallowed!==void 0&<===(Wt.range[0]<Wt.range[1]?"n":"s")||Wt.minallowed!==void 0&<===(Wt.range[0]<Wt.range[1]?"s":"n"))&&(Zt=1,vr=0),!(!It&&!Zt)){It||(It=1),Zt||(Zt=1);var Br=zt._offset-qt/It,Pr=Wt._offset-vr/Zt;St.clipRect.call(c.setTranslate,qt,vr).call(c.setScale,It,Zt),St.plot.call(c.setTranslate,Br,Pr).call(c.setScale,1/It,1/Zt),(It!==St.xScaleFactor||Zt!==St.yScaleFactor)&&(c.setPointGroupScale(St.zoomScalePts,It,Zt),c.setTextPointsScale(St.zoomScaleTxt,It,Zt)),c.hideOutsideRangePoints(St.clipOnAxisFalseTraces,St),St.xScaleFactor=It,St.yScaleFactor=Zt}}}}function bi(pi,Jr,Be){return pi.fixedrange?0:Mt&&Ke.xaHash[pi._id]?Jr:lt&&(Ke.isSubplotConstrained?Ke.xaHash:Ke.yaHash)[pi._id]?Be:0}function Ua(pi,Jr){return Jr?(pi.range=pi._r.slice(),A(pi,Jr),dn(pi,Jr)):0}function dn(pi,Jr,Be){return pi._length*(1-Jr)*_[Be||pi.constraintoward||"middle"]}return Je}function R(K,te,ne,se){var le=i.ensureSingle(K.draglayer,te,ne,function(ce){ce.classed("drag",!0).style({fill:"transparent","stroke-width":0}).attr("data-subplot",K.id)});return le.call(d,se),le.node()}function P(K,te,ne,se,le,ce,pe){var xe=R(K,"rect",te,ne);return t.select(xe).call(c.setRect,se,le,ce,pe),xe}function z(K,te){for(var ne=0;ne<K.length;ne++)if(!K[ne].fixedrange)return te;return""}function I(K,te){var ne=K.range[te],se=Math.abs(ne-K.range[1-te]),le;return K.type==="date"?ne:K.type==="log"?(le=Math.ceil(Math.max(0,-Math.log(se)/Math.LN10))+3,a("."+le+"g")(Math.pow(10,ne))):(le=Math.floor(Math.log(Math.abs(ne))/Math.LN10)-Math.floor(Math.log(se)/Math.LN10)+4,a("."+String(le)+"g")(ne))}function L(K,te,ne,se,le){for(var ce=0;ce<K.length;ce++){var pe=K[ce];if(!pe.fixedrange)if(pe.rangebreaks){var xe=pe._id.charAt(0)==="y",ye=xe?1-te:te,fe=xe?1-ne:ne;se[pe._name+".range[0]"]=pe.l2r(pe.p2l(ye*pe._length)),se[pe._name+".range[1]"]=pe.l2r(pe.p2l(fe*pe._length))}else{var ae=pe._rl[0],ee=pe._rl[1]-ae;se[pe._name+".range[0]"]=pe.l2r(ae+ee*te),se[pe._name+".range[1]"]=pe.l2r(ae+ee*ne)}}if(le&&le.length){var ie=(te+(1-ne))/2;L(le,ie,1-ie,se,[])}}function B(K,te){for(var ne=0;ne<K.length;ne++){var se=K[ne];if(!se.fixedrange){if(se.rangebreaks){var le=0,ce=se._length,pe=se.p2l(le+te)-se.p2l(le),xe=se.p2l(ce+te)-se.p2l(ce),ye=(pe+xe)/2;se.range=[se.l2r(se._rl[0]-ye),se.l2r(se._rl[1]-ye)]}else se.range=[se.l2r(se._rl[0]-te/se._m),se.l2r(se._rl[1]-te/se._m)];se.limitRange&&se.limitRange()}}}function O(K){return 1-(K>=0?Math.min(K,.9):1/(1/Math.max(K,-.3)+3.222))}function G(K,te,ne){return K?K==="nsew"?ne?"":te==="pan"?"move":"crosshair":K.toLowerCase()+"-resize":"pointer"}function W(K,te,ne,se,le){return K.append("path").attr("class","zoombox").style({fill:te>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform",l(ne,se)).attr("d",le+"Z")}function X(K,te,ne){return K.append("path").attr("class","zoombox-corners").style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,opacity:0}).attr("transform",l(te,ne)).attr("d","M0,0Z")}function Z(K,te,ne,se,le,ce){K.attr("d",se+"M"+ne.l+","+ne.t+"v"+ne.h+"h"+ne.w+"v-"+ne.h+"h-"+ne.w+"Z"),J(K,te,le,ce)}function J(K,te,ne,se){ne||(K.transition().style("fill",se>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),te.transition().style("opacity",1).duration(200))}function N(K){t.select(K).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function H(K){F&&K.data&&K._context.showTips&&(i.notifier(i._(K,"Double-click to zoom back out"),"long",K),F=!1)}function $(K,te){return"M"+(K.l-.5)+","+(te-T-.5)+"h-3v"+(2*T+1)+"h3ZM"+(K.r+.5)+","+(te-T-.5)+"h3v"+(2*T+1)+"h-3Z"}function U(K,te){return"M"+(te-T-.5)+","+(K.t-.5)+"v-3h"+(2*T+1)+"v3ZM"+(te-T-.5)+","+(K.b+.5)+"v3h"+(2*T+1)+"v-3Z"}function V(K){var te=Math.floor(Math.min(K.b-K.t,K.r-K.l,T)/2);return"M"+(K.l-3.5)+","+(K.t-.5+te)+"h3v"+-te+"h"+te+"v-3h-"+(te+3)+"ZM"+(K.r+3.5)+","+(K.t-.5+te)+"h-3v"+-te+"h"+-te+"v-3h"+(te+3)+"ZM"+(K.r+3.5)+","+(K.b+.5-te)+"h-3v"+te+"h"+-te+"v3h"+(te+3)+"ZM"+(K.l-3.5)+","+(K.b+.5-te)+"h3v"+te+"h"+te+"v3h-"+(te+3)+"Z"}function j(K,te,ne,se,le){for(var ce=!1,pe={},xe={},ye,fe,ae,ee,ie=(le||{}).xaHash,Q=(le||{}).yaHash,ue=0;ue<te.length;ue++){var ge=te[ue];for(ye in ne)if(ge[ye]){for(ae in ge)!(le&&(ie[ae]||Q[ae]))&&!(ae.charAt(0)==="x"?ne:se)[ae]&&(pe[ae]=ye);for(fe in se)!(le&&(ie[fe]||Q[fe]))&&ge[fe]&&(ce=!0)}for(fe in se)if(ge[fe])for(ee in ge)!(le&&(ie[ee]||Q[ee]))&&!(ee.charAt(0)==="x"?ne:se)[ee]&&(xe[ee]=fe)}ce&&(i.extendFlat(pe,xe),xe={});var Me={},Te=[];for(ae in pe){var je=M(K,ae);Te.push(je),Me[je._id]=je}var Ve={},Ze=[];for(ee in xe){var Ke=M(K,ee);Ze.push(Ke),Ve[Ke._id]=Ke}return{xaHash:Me,yaHash:Ve,xaxes:Te,yaxes:Ze,xLinks:pe,yLinks:xe,isSubplotConstrained:ce}}function q(K,te){if(!o)K.onwheel!==void 0?K.onwheel=te:K.onmousewheel!==void 0?K.onmousewheel=te:K.isAddedWheelEvent||(K.isAddedWheelEvent=!0,K.addEventListener("wheel",te,{passive:!1}));else{var ne=K.onwheel!==void 0?"wheel":"mousewheel";K._onwheel&&K.removeEventListener(ne,K._onwheel),K._onwheel=te,K.addEventListener(ne,te,{passive:!1})}}function Y(K){var te=[];for(var ne in K)te.push(K[ne]);return te}r.exports={makeDragBox:D,makeDragger:R,makeRectDragger:P,makeZoombox:W,makeCorners:X,updateZoombox:Z,xyCorners:V,transitionZoombox:J,removeZoombox:N,showDoubleClickNotifier:H,attachWheelEventHandler:q}}}),ek=de({"src/plots/cartesian/graph_interact.js"(e){"use strict";var r=Yr(),t=$s(),i=Uc(),a=md(),o=QE().makeDragBox,s=zl().DRAGGERSIZE;e.initInteractions=function(n){var u=n._fullLayout;if(n._context.staticPlot){r.select(n).selectAll(".drag").remove();return}if(!(!u._has("cartesian")&&!u._has("splom"))){var c=Object.keys(u._plots||{}).sort(function(h,d){if((u._plots[h].mainplot&&!0)===(u._plots[d].mainplot&&!0)){var p=h.split("y"),g=d.split("y");return p[0]===g[0]?Number(p[1]||1)-Number(g[1]||1):Number(p[0]||1)-Number(g[0]||1)}return u._plots[h].mainplot?1:-1});c.forEach(function(h){var d=u._plots[h],p=d.xaxis,g=d.yaxis;if(!d.mainplot){var m=o(n,d,p._offset,g._offset,p._length,g._length,"ns","ew");m.onmousemove=function(v){n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===h&&n._fullLayout._plots[h]&&t.hover(n,v,h)},t.hover(n,v,h),n._fullLayout._lasthover=m,n._fullLayout._hoversubplot=h},m.onmouseout=function(v){n._dragging||(n._fullLayout._hoversubplot=null,i.unhover(n,v))},n._context.showAxisDragHandles&&(o(n,d,p._offset-s,g._offset-s,s,s,"n","w"),o(n,d,p._offset+p._length,g._offset-s,s,s,"n","e"),o(n,d,p._offset-s,g._offset+g._length,s,s,"s","w"),o(n,d,p._offset+p._length,g._offset+g._length,s,s,"s","e"))}if(n._context.showAxisDragHandles){if(h===p._mainSubplot){var y=p._mainLinePosition;p.side==="top"&&(y-=s),o(n,d,p._offset+p._length*.1,y,p._length*.8,s,"","ew"),o(n,d,p._offset,y,p._length*.1,s,"","w"),o(n,d,p._offset+p._length*.9,y,p._length*.1,s,"","e")}if(h===g._mainSubplot){var _=g._mainLinePosition;g.side!=="right"&&(_-=s),o(n,d,_,g._offset+g._length*.1,s,g._length*.8,"ns",""),o(n,d,_,g._offset+g._length*.9,s,g._length*.1,"s",""),o(n,d,_,g._offset,s,g._length*.1,"n","")}}});var f=u._hoverlayer.node();f.onmousemove=function(h){h.target=n._fullLayout._lasthover,t.hover(n,h,u._hoversubplot)},f.onclick=function(h){h.target=n._fullLayout._lasthover,t.click(n,h)},f.onmousedown=function(h){n._fullLayout._lasthover.onmousedown(h)},e.updateFx(n)}},e.updateFx=function(l){var n=l._fullLayout,u=n.dragmode==="pan"?"move":"crosshair";a(n._draggers,u)}}}),Hq=de({"src/plot_api/container_array_match.js"(e,r){"use strict";var t=Ma();r.exports=function(a){for(var o=t.layoutArrayContainers,s=t.layoutArrayRegexes,l=a.split("[")[0],n,u,c=0;c<s.length;c++)if(u=a.match(s[c]),u&&u.index===0){n=u[0];break}if(n||(n=o[o.indexOf(l)]),!n)return!1;var f=a.slice(n.length);return f?(u=f.match(/^\[(0|[1-9][0-9]*)\](\.(.+))?$/),u?{array:n,index:Number(u[1]),property:u[3]||""}:!1):{array:n,index:"",property:""}}}}),$q=de({"src/plot_api/manage_arrays.js"(e){"use strict";var r=is(),t=gw(),i=Xo(),a=bw().sorterAsc,o=Ma();e.containerArrayMatch=Hq();var s=e.isAddVal=function(u){return u==="add"||r(u)},l=e.isRemoveVal=function(u){return u===null||u==="remove"};e.applyContainerArrayChanges=function(u,c,f,h,d){var p=c.astr,g=o.getComponentMethod(p,"supplyLayoutDefaults"),m=o.getComponentMethod(p,"draw"),y=o.getComponentMethod(p,"drawOne"),_=h.replot||h.recalc||g===t||m===t,v=u.layout,x=u._fullLayout;if(f[""]){Object.keys(f).length>1&&i.warn("Full array edits are incompatible with other edits",p);var S=f[""][""];if(l(S))c.set(null);else if(Array.isArray(S))c.set(S);else return i.warn("Unrecognized full array edit value",p,S),!0;return _?!1:(g(v,x),m(u),!0)}var M=Object.keys(f).map(Number).sort(a),C=c.get(),w=C||[],k=d(x,p).get(),A=[],b=-1,E=w.length,T,F,D,R,P,z,I,L;for(T=0;T<M.length;T++){if(D=M[T],R=f[D],P=Object.keys(R),z=R[""],I=s(z),D<0||D>w.length-(I?0:1)){i.warn("index out of range",p,D);continue}if(z!==void 0)P.length>1&&i.warn("Insertion & removal are incompatible with edits to the same index.",p,D),l(z)?A.push(D):I?(z==="add"&&(z={}),w.splice(D,0,z),k&&k.splice(D,0,{})):i.warn("Unrecognized full object edit value",p,D,z),b===-1&&(b=D);else for(F=0;F<P.length;F++)L=p+"["+D+"].",d(w[D],P[F],L).set(R[P[F]])}for(T=A.length-1;T>=0;T--)w.splice(A[T],1),k&&k.splice(A[T],1);if(w.length?C||c.set(w):c.set(null),_)return!1;if(g(v,x),y!==t){var B;if(b===-1)B=M;else{for(E=Math.max(w.length,E),B=[],T=0;T<M.length&&(D=M[T],!(D>=b));T++)B.push(D);for(T=b;T<E;T++)B.push(T)}for(T=0;T<B.length;T++)y(u,B[T])}else m(u);return!0}}}),Wq=de({"src/plot_api/helpers.js"(e){"use strict";var r=da(),t=Ma(),i=Qt(),a=Es(),o=Hs(),s=o.cleanId,l=o.getFromTrace,n=t.traceIs,u=["x","y","z"];e.clearPromiseQueue=function(_){Array.isArray(_._promises)&&_._promises.length>0&&i.log("Clearing previous rejected promises from queue."),_._promises=[]},e.cleanLayout=function(_){var v,x;_||(_={}),_.xaxis1&&(_.xaxis||(_.xaxis=_.xaxis1),delete _.xaxis1),_.yaxis1&&(_.yaxis||(_.yaxis=_.yaxis1),delete _.yaxis1),_.scene1&&(_.scene||(_.scene=_.scene1),delete _.scene1);var S=(a.subplotsRegistry.cartesian||{}).attrRegex,M=(a.subplotsRegistry.polar||{}).attrRegex,C=(a.subplotsRegistry.ternary||{}).attrRegex,w=(a.subplotsRegistry.gl3d||{}).attrRegex,k=Object.keys(_);for(v=0;v<k.length;v++){var A=k[v];if(S&&S.test(A)){var b=_[A];b.anchor&&b.anchor!=="free"&&(b.anchor=s(b.anchor)),b.overlaying&&(b.overlaying=s(b.overlaying)),b.type||(b.isdate?b.type="date":b.islog?b.type="log":b.isdate===!1&&b.islog===!1&&(b.type="linear")),(b.autorange==="withzero"||b.autorange==="tozero")&&(b.autorange=!0,b.rangemode="tozero"),b.insiderange&&delete b.range,delete b.islog,delete b.isdate,delete b.categories,p(b,"domain")&&delete b.domain}}var E=Array.isArray(_.annotations)?_.annotations.length:0;for(v=0;v<E;v++){var T=_.annotations[v];i.isPlainObject(T)&&(c(T,"xref"),c(T,"yref"))}var F=Array.isArray(_.shapes)?_.shapes.length:0;for(v=0;v<F;v++){var D=_.shapes[v];i.isPlainObject(D)&&(c(D,"xref",!0),c(D,"yref",!0))}var R=Array.isArray(_.images)?_.images.length:0;for(v=0;v<R;v++){var P=_.images[v];i.isPlainObject(P)&&(c(P,"xref"),c(P,"yref"))}var z=_.legend;return z&&(z.x>3?(z.x=1.02,z.xanchor="left"):z.x<-2&&(z.x=-.02,z.xanchor="right"),z.y>3?(z.y=1.02,z.yanchor="bottom"):z.y<-2&&(z.y=-.02,z.yanchor="top")),_.dragmode==="rotate"&&(_.dragmode="orbit"),_.template&&_.template.layout&&e.cleanLayout(_.template.layout),_};function c(_,v,x=!1){var S=_[v],M=v.charAt(0);x&&Array.isArray(S)||S&&S!=="paper"&&(_[v]=s(S,M,!0))}e.cleanData=function(_){for(var v=0;v<_.length;v++){var x=_[v],S;if(x.type==="histogramy"&&"xbins"in x&&!("ybins"in x)&&(x.ybins=x.xbins,delete x.xbins),x.type==="histogramy"&&e.swapXYData(x),(x.type==="histogramx"||x.type==="histogramy")&&(x.type="histogram"),"scl"in x&&!("colorscale"in x)&&(x.colorscale=x.scl,delete x.scl),"reversescl"in x&&!("reversescale"in x)&&(x.reversescale=x.reversescl,delete x.reversescl),x.xaxis&&(x.xaxis=s(x.xaxis,"x")),x.yaxis&&(x.yaxis=s(x.yaxis,"y")),n(x,"gl3d")&&x.scene&&(x.scene=a.subplotsRegistry.gl3d.cleanId(x.scene)),!n(x,"pie-like")&&!n(x,"bar-like"))if(Array.isArray(x.textposition))for(S=0;S<x.textposition.length;S++)x.textposition[S]=d(x.textposition[S]);else x.textposition&&(x.textposition=d(x.textposition));var M=t.getModule(x);if(M&&M.colorbar){var C=M.colorbar.container,w=C?x[C]:x;w&&w.colorscale&&(w.colorscale==="YIGnBu"&&(w.colorscale="YlGnBu"),w.colorscale==="YIOrRd"&&(w.colorscale="YlOrRd"))}if(x.type==="surface"&&i.isPlainObject(x.contours)){var k=["x","y","z"];for(S=0;S<k.length;S++){var A=x.contours[k[S]];i.isPlainObject(A)&&(A.highlightColor&&(A.highlightcolor=A.highlightColor,delete A.highlightColor),A.highlightWidth&&(A.highlightwidth=A.highlightWidth,delete A.highlightWidth))}}if(x.type==="candlestick"||x.type==="ohlc"){var b=(x.increasing||{}).showlegend!==!1,E=(x.decreasing||{}).showlegend!==!1,T=f(x.increasing),F=f(x.decreasing);if(T!==!1&&F!==!1){var D=h(T,F,b,E);D&&(x.name=D)}else(T||F)&&!x.name&&(x.name=T||F)}p(x,"line")&&delete x.line,"marker"in x&&(p(x.marker,"line")&&delete x.marker.line,p(x,"marker")&&delete x.marker),x.autobinx&&(delete x.autobinx,delete x.xbins),x.autobiny&&(delete x.autobiny,delete x.ybins)}};function f(_){if(!i.isPlainObject(_))return!1;var v=_.name;return delete _.name,delete _.showlegend,(typeof v=="string"||typeof v=="number")&&String(v)}function h(_,v,x,S){if(x&&!S)return _;if(S&&!x||!_.trim())return v;if(!v.trim())return _;var M=Math.min(_.length,v.length),C;for(C=0;C<M&&_.charAt(C)===v.charAt(C);C++);var w=_.slice(0,C);return w.trim()}function d(_){var v="middle",x="center";return typeof _=="string"&&(_.indexOf("top")!==-1?v="top":_.indexOf("bottom")!==-1&&(v="bottom"),_.indexOf("left")!==-1?x="left":_.indexOf("right")!==-1&&(x="right")),v+" "+x}function p(_,v){return v in _&&typeof _[v]=="object"&&Object.keys(_[v]).length===0}e.swapXYData=function(_){var v;if(i.swapAttrs(_,["?","?0","d?","?bins","nbins?","autobin?","error_?"]),Array.isArray(_.z)&&Array.isArray(_.z[0])&&(_.transpose?delete _.transpose:_.transpose=!0),_.error_x&&_.error_y){var x=_.error_y,S="copy_ystyle"in x?x.copy_ystyle:!(x.color||x.thickness||x.width);i.swapAttrs(_,["error_?.copy_ystyle"]),S&&i.swapAttrs(_,["error_?.color","error_?.thickness","error_?.width"])}if(typeof _.hoverinfo=="string"){var M=_.hoverinfo.split("+");for(v=0;v<M.length;v++)M[v]==="x"?M[v]="y":M[v]==="y"&&(M[v]="x");_.hoverinfo=M.join("+")}},e.coerceTraceIndices=function(_,v){if(r(v))return[v];if(!Array.isArray(v)||!v.length)return _.data.map(function(M,C){return C});if(Array.isArray(v)){for(var x=[],S=0;S<v.length;S++)i.isIndex(v[S],_.data.length)?x.push(v[S]):i.warn("trace index (",v[S],") is not a number or is out of bounds");return x}return v},e.manageArrayContainers=function(_,v,x){var S=_.obj,M=_.parts,C=M.length,w=M[C-1],k=r(w);if(k&&v===null){var A=M.slice(0,C-1).join("."),b=i.nestedProperty(S,A).get();b.splice(w,1)}else k&&_.get()===void 0&&_.get()===void 0&&(x[_.astr]=null),_.set(v)};var g=/(\.[^\[\]\.]+|\[[^\[\]\.]+\])$/;function m(_){var v=_.search(g);if(v>0)return _.slice(0,v)}e.hasParent=function(_,v){for(var x=m(v);x;){if(x in _)return!0;x=m(x)}return!1},e.clearAxisTypes=function(_,v,x){for(var S=0;S<v.length;S++)for(var M=_._fullData[S],C=0;C<3;C++){var w=l(_,M,u[C]);if(w&&w.type!=="log"){var k=w._name,A=w._id.slice(1);if(A.slice(0,5)==="scene"){if(x[A]!==void 0)continue;k=A+"."+k}var b=k+".type";x[k]===void 0&&x[b]===void 0&&i.nestedProperty(_.layout,b).set(null)}}};var y=(_,v)=>{let x=(...S)=>S.every(M=>i.isPlainObject(M))||S.every(M=>Array.isArray(M));if([_,v].every(S=>Array.isArray(S))){if(_.length!==v.length)return!1;for(let S=0;S<_.length;S++){let M=_[S],C=v[S];if(M!==C&&!(x(M,C)?y(M,C):!1))return!1}return!0}else if([_,v].every(S=>i.isPlainObject(S))){if(Object.keys(_).length!==Object.keys(v).length)return!1;for(let S in _){if(S.startsWith("_"))continue;let M=_[S],C=v[S];if(M!==C&&!(x(M,C)?y(M,C):!1))return!1}return!0}return!1};e.collectionsAreEqual=y}}),Iw=de({"src/plot_api/plot_api.js"(e){"use strict";var r=Yr(),t=da(),i=TE(),a=Qt(),o=a.nestedProperty,s=u1(),l=cq(),n=Ma(),u=c1(),c=Es(),f=nn(),h=FE(),d=Mu(),p=hn(),g=ta(),m=ek().initInteractions,y=Oh(),_=Zl().clearOutline,v=Na().dfltConfig,x=$q(),S=Wq(),M=Ly(),C=Ps(),w=zl().AX_NAME_PATTERN,k=0,A=5;function b(me,_e,Ae,ke){var Ee;if(me=a.getGraphDiv(me),s.init(me),a.isPlainObject(_e)){var De=_e;_e=De.data,Ae=De.layout,ke=De.config,Ee=De.frames}var Je=s.triggerHandler(me,"plotly_beforeplot",[_e,Ae,ke]);if(Je===!1)return Promise.reject();!_e&&!Ae&&!a.isPlotDiv(me)&&a.warn("Calling _doPlot as if redrawing but this container doesn't yet have a plot.",me);function Ue(){if(Ee)return e.addFrames(me,Ee)}R(me,ke),Ae||(Ae={}),r.select(me).classed("js-plotly-plot",!0),p.makeTester(),Array.isArray(me._promises)||(me._promises=[]);var at=(me.data||[]).length===0&&Array.isArray(_e);Array.isArray(_e)&&(S.cleanData(_e),at?me.data=_e:me.data.push.apply(me.data,_e),me.empty=!1),(!me.layout||at)&&(me.layout=S.cleanLayout(Ae)),c.supplyDefaults(me);var rt=me._fullLayout,ft=rt._has("cartesian");rt._replotting=!0,(at||rt._shouldCreateBgLayer)&&(Ye(me),rt._shouldCreateBgLayer&&delete rt._shouldCreateBgLayer),p.initGradients(me),p.initPatterns(me),at&&f.saveShowSpikeInitial(me);var At=!me.calcdata||me.calcdata.length!==(me._fullData||[]).length;At&&c.doCalcdata(me);for(var ht=0;ht<me.calcdata.length;ht++)me.calcdata[ht][0].trace=me._fullData[ht];me._context.responsive?me._responsiveChartHandler||(me._responsiveChartHandler=function(){a.isHidden(me)||c.resize(me)},window.addEventListener("resize",me._responsiveChartHandler)):a.clearResponsive(me);var Gt=a.extendFlat({},rt._size),fr=0;function gt(){for(var Er=rt._basePlotModules,Tr=0;Tr<Er.length;Tr++)Er[Tr].drawFramework&&Er[Tr].drawFramework(me);!rt._glcanvas&&rt._has("gl")&&(rt._glcanvas=rt._glcontainer.selectAll(".gl-canvas").data([{key:"contextLayer",context:!0,pick:!1},{key:"focusLayer",context:!1,pick:!1},{key:"pickLayer",context:!1,pick:!0}],function(Qr){return Qr.key}),rt._glcanvas.enter().append("canvas").attr("class",function(Qr){return"gl-canvas gl-canvas-"+Qr.key.replace("Layer","")}).style({position:"absolute",top:0,left:0,overflow:"visible","pointer-events":"none"}));var Ur=me._context.plotGlPixelRatio;if(rt._glcanvas){rt._glcanvas.attr("width",rt.width*Ur).attr("height",rt.height*Ur).style("width",rt.width+"px").style("height",rt.height+"px");var Ai=rt._glcanvas.data()[0].regl;if(Ai&&(Math.floor(rt.width*Ur)!==Ai._gl.drawingBufferWidth||Math.floor(rt.height*Ur)!==Ai._gl.drawingBufferHeight)){var oi="WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.";if(fr)a.error(oi);else return a.log(oi+" Clearing graph and plotting again."),c.cleanPlot([],{},me._fullData,rt),c.supplyDefaults(me),rt=me._fullLayout,c.doCalcdata(me),fr++,gt()}}return rt.modebar.orientation==="h"?rt._modebardiv.style("height",null).style("width","100%"):rt._modebardiv.style("width",null).style("height",rt.height+"px"),c.previousPromises(me)}function yt(){if(c.clearAutoMarginIds(me),M.drawMarginPushers(me),f.allowAutoMargin(me),me._fullLayout.title.text&&me._fullLayout.title.automargin&&c.allowAutoMargin(me,"title.automargin"),rt._has("pie"))for(var Er=me._fullData,Tr=0;Tr<Er.length;Tr++){var Ur=Er[Tr];Ur.type==="pie"&&Ur.automargin&&c.allowAutoMargin(me,"pie."+Ur.uid+".automargin")}return c.doAutoMargin(me),c.previousPromises(me)}function kt(){if(c.didMarginChange(Gt,rt._size))return a.syncOrAsync([yt,M.layoutStyles],me)}function Lt(){if(!At){Ct();return}return a.syncOrAsync([n.getComponentMethod("shapes","calcAutorange"),n.getComponentMethod("annotations","calcAutorange"),Ct],me)}function Ct(){me._transitioning||(M.doAutoRangeAndConstraints(me),at&&f.saveRangeInitial(me),n.getComponentMethod("rangeslider","calcAutorange")(me))}function $t(){return f.draw(me,at?"":"redraw")}var mr=[c.previousPromises,Ue,gt,yt,kt];ft&&mr.push(Lt),mr.push(M.layoutStyles),ft&&mr.push($t,function(Tr){var Ur=Tr._fullLayout._insideTickLabelsUpdaterange;if(Ur)return Tr._fullLayout._insideTickLabelsUpdaterange=void 0,ne(Tr,Ur).then(function(){f.saveRangeInitial(Tr,!0)})}),mr.push(M.drawData,M.finalDraw,m,c.rehover,c.redrag,c.reselect,c.doAutoMargin,c.previousPromises);var br=a.syncOrAsync(mr,me);return(!br||!br.then)&&(br=Promise.resolve()),br.then(function(){return E(me),me})}function E(me){var _e=me._fullLayout;_e._redrawFromAutoMarginCount?_e._redrawFromAutoMarginCount--:me.emit("plotly_afterplot")}function T(me){return a.extendFlat(v,me)}function F(me,_e){try{me._fullLayout._paper.style("background",_e)}catch(Ae){a.error(Ae)}}function D(me,_e){var Ae=g.combine(_e,"white");F(me,Ae)}function R(me,_e){if(!me._context){me._context=a.extendDeep({},v);var Ae=r.select("base");me._context._baseUrl=Ae.size()&&Ae.attr("href")?window.location.href.split("#")[0]:""}var ke=me._context,Ee,De,Je;if(_e){for(De=Object.keys(_e),Ee=0;Ee<De.length;Ee++)Je=De[Ee],!(Je==="editable"||Je==="edits")&&Je in ke&&(Je==="setBackground"&&_e[Je]==="opaque"?ke[Je]=D:ke[Je]=_e[Je]);var Ue=_e.editable;if(Ue!==void 0)for(ke.editable=Ue,De=Object.keys(ke.edits),Ee=0;Ee<De.length;Ee++)ke.edits[De[Ee]]=Ue;if(_e.edits)for(De=Object.keys(_e.edits),Ee=0;Ee<De.length;Ee++)Je=De[Ee],Je in ke.edits&&(ke.edits[Je]=_e.edits[Je]);ke._exportedPlot=_e._exportedPlot}ke.staticPlot&&(ke.editable=!1,ke.edits={},ke.autosizable=!1,ke.scrollZoom=!1,ke.doubleClick=!1,ke.showTips=!1,ke.displayModeBar=!1),ke.displayModeBar==="hover"&&!i&&(ke.displayModeBar=!0),(ke.setBackground==="transparent"||typeof ke.setBackground!="function")&&(ke.setBackground=F),ke._hasZeroHeight=ke._hasZeroHeight||me.clientHeight===0,ke._hasZeroWidth=ke._hasZeroWidth||me.clientWidth===0;var at=ke.scrollZoom,rt=ke._scrollZoom={};if(at===!0)rt.cartesian=1,rt.gl3d=1,rt.geo=1,rt.map=1;else if(typeof at=="string"){var ft=at.split("+");for(Ee=0;Ee<ft.length;Ee++)rt[ft[Ee]]=1}else at!==!1&&(rt.gl3d=1,rt.geo=1,rt.map=1)}function P(me){if(me=a.getGraphDiv(me),!a.isPlotDiv(me))throw new Error("This element is not a Plotly plot: "+me);return S.cleanData(me.data),S.cleanLayout(me.layout),me.calcdata=void 0,e._doPlot(me).then(function(){return me.emit("plotly_redraw"),me})}function z(me,_e,Ae,ke){return me=a.getGraphDiv(me),c.cleanPlot([],{},me._fullData||[],me._fullLayout||{}),c.purge(me),e._doPlot(me,_e,Ae,ke)}function I(me,_e){var Ae=_e+1,ke=[],Ee,De;for(Ee=0;Ee<me.length;Ee++)De=me[Ee],De<0?ke.push(Ae+De):ke.push(De);return ke}function L(me,_e,Ae){var ke,Ee;for(ke=0;ke<_e.length;ke++){if(Ee=_e[ke],Ee!==parseInt(Ee,10))throw new Error("all values in "+Ae+" must be integers");if(Ee>=me.data.length||Ee<-me.data.length)throw new Error(Ae+" must be valid indices for gd.data.");if(_e.indexOf(Ee,ke+1)>-1||Ee>=0&&_e.indexOf(-me.data.length+Ee)>-1||Ee<0&&_e.indexOf(me.data.length+Ee)>-1)throw new Error("each index in "+Ae+" must be unique.")}}function B(me,_e,Ae){if(!Array.isArray(me.data))throw new Error("gd.data must be an array.");if(typeof _e>"u")throw new Error("currentIndices is a required argument.");if(Array.isArray(_e)||(_e=[_e]),L(me,_e,"currentIndices"),typeof Ae<"u"&&!Array.isArray(Ae)&&(Ae=[Ae]),typeof Ae<"u"&&L(me,Ae,"newIndices"),typeof Ae<"u"&&_e.length!==Ae.length)throw new Error("current and new indices must be of equal length.")}function O(me,_e,Ae){var ke,Ee;if(!Array.isArray(me.data))throw new Error("gd.data must be an array.");if(typeof _e>"u")throw new Error("traces must be defined.");for(Array.isArray(_e)||(_e=[_e]),ke=0;ke<_e.length;ke++)if(Ee=_e[ke],typeof Ee!="object"||Array.isArray(Ee)||Ee===null)throw new Error("all values in traces array must be non-array objects");if(typeof Ae<"u"&&!Array.isArray(Ae)&&(Ae=[Ae]),typeof Ae<"u"&&Ae.length!==_e.length)throw new Error("if indices is specified, traces.length must equal indices.length")}function G(me,_e,Ae,ke){var Ee=a.isPlainObject(ke);if(!Array.isArray(me.data))throw new Error("gd.data must be an array");if(!a.isPlainObject(_e))throw new Error("update must be a key:value object");if(typeof Ae>"u")throw new Error("indices must be an integer or array of integers");L(me,Ae,"indices");for(var De in _e){if(!Array.isArray(_e[De])||_e[De].length!==Ae.length)throw new Error("attribute "+De+" must be an array of length equal to indices array length");if(Ee&&(!(De in ke)||!Array.isArray(ke[De])||ke[De].length!==_e[De].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 correspondence with the keys and number of traces in the update object")}}function W(me,_e,Ae,ke){var Ee=a.isPlainObject(ke),De=[],Je,Ue,at,rt,ft;Array.isArray(Ae)||(Ae=[Ae]),Ae=I(Ae,me.data.length-1);for(var At in _e)for(var ht=0;ht<Ae.length;ht++){if(Je=me.data[Ae[ht]],at=o(Je,At),Ue=at.get(),rt=_e[At][ht],!a.isArrayOrTypedArray(rt))throw new Error("attribute: "+At+" index: "+ht+" must be an array");if(!a.isArrayOrTypedArray(Ue))throw new Error("cannot extend missing or non-array attribute: "+At);if(Ue.constructor!==rt.constructor)throw new Error("cannot extend array with an array of a different type: "+At);ft=Ee?ke[At][ht]:ke,t(ft)||(ft=-1),De.push({prop:at,target:Ue,insert:rt,maxp:Math.floor(ft)})}return De}function X(me,_e,Ae,ke,Ee){G(me,_e,Ae,ke);for(var De=W(me,_e,Ae,ke),Je={},Ue={},at=0;at<De.length;at++){var rt=De[at].prop,ft=De[at].maxp,At=Ee(De[at].target,De[at].insert,ft);rt.set(At[0]),Array.isArray(Je[rt.astr])||(Je[rt.astr]=[]),Je[rt.astr].push(At[1]),Array.isArray(Ue[rt.astr])||(Ue[rt.astr]=[]),Ue[rt.astr].push(De[at].target.length)}return{update:Je,maxPoints:Ue}}function Z(me,_e){var Ae=new me.constructor(me.length+_e.length);return Ae.set(me),Ae.set(_e,me.length),Ae}function J(me,_e,Ae,ke){me=a.getGraphDiv(me);function Ee(at,rt,ft){var At,ht;if(a.isTypedArray(at))if(ft<0){var Gt=new at.constructor(0),fr=Z(at,rt);ft<0?(At=fr,ht=Gt):(At=Gt,ht=fr)}else if(At=new at.constructor(ft),ht=new at.constructor(at.length+rt.length-ft),ft===rt.length)At.set(rt),ht.set(at);else if(ft<rt.length){var gt=rt.length-ft;At.set(rt.subarray(gt)),ht.set(at),ht.set(rt.subarray(0,gt),at.length)}else{var yt=ft-rt.length,kt=at.length-yt;At.set(at.subarray(kt)),At.set(rt,yt),ht.set(at.subarray(0,kt))}else At=at.concat(rt),ht=ft>=0&&ft<At.length?At.splice(0,At.length-ft):[];return[At,ht]}var De=X(me,_e,Ae,ke,Ee),Je=e.redraw(me),Ue=[me,De.update,Ae,De.maxPoints];return l.add(me,e.prependTraces,Ue,J,arguments),Je}function N(me,_e,Ae,ke){me=a.getGraphDiv(me);function Ee(at,rt,ft){var At,ht;if(a.isTypedArray(at))if(ft<=0){var Gt=new at.constructor(0),fr=Z(rt,at);ft<0?(At=fr,ht=Gt):(At=Gt,ht=fr)}else if(At=new at.constructor(ft),ht=new at.constructor(at.length+rt.length-ft),ft===rt.length)At.set(rt),ht.set(at);else if(ft<rt.length){var gt=rt.length-ft;At.set(rt.subarray(0,gt)),ht.set(rt.subarray(gt)),ht.set(at,gt)}else{var yt=ft-rt.length;At.set(rt),At.set(at.subarray(0,yt),rt.length),ht.set(at.subarray(yt))}else At=rt.concat(at),ht=ft>=0&&ft<At.length?At.splice(ft,At.length):[];return[At,ht]}var De=X(me,_e,Ae,ke,Ee),Je=e.redraw(me),Ue=[me,De.update,Ae,De.maxPoints];return l.add(me,e.extendTraces,Ue,N,arguments),Je}function H(me,_e,Ae){me=a.getGraphDiv(me);var ke=[],Ee=e.deleteTraces,De=H,Je=[me,ke],Ue=[me,_e],at,rt;for(O(me,_e,Ae),Array.isArray(_e)||(_e=[_e]),_e=_e.map(function(ft){return a.extendFlat({},ft)}),S.cleanData(_e),at=0;at<_e.length;at++)me.data.push(_e[at]);for(at=0;at<_e.length;at++)ke.push(-_e.length+at);if(typeof Ae>"u")return rt=e.redraw(me),l.add(me,Ee,Je,De,Ue),rt;Array.isArray(Ae)||(Ae=[Ae]);try{B(me,ke,Ae)}catch(ft){throw me.data.splice(me.data.length-_e.length,_e.length),ft}return l.startSequence(me),l.add(me,Ee,Je,De,Ue),rt=e.moveTraces(me,ke,Ae),l.stopSequence(me),rt}function $(me,_e){me=a.getGraphDiv(me);var Ae=[],ke=e.addTraces,Ee=$,De=[me,Ae,_e],Je=[me,_e],Ue,at;if(typeof _e>"u")throw new Error("indices must be an integer or array of integers.");for(Array.isArray(_e)||(_e=[_e]),L(me,_e,"indices"),_e=I(_e,me.data.length-1),_e.sort(a.sorterDes),Ue=0;Ue<_e.length;Ue+=1)at=me.data.splice(_e[Ue],1)[0],Ae.push(at);var rt=e.redraw(me);return l.add(me,ke,De,Ee,Je),rt}function U(me,_e,Ae){me=a.getGraphDiv(me);var ke=[],Ee=[],De=U,Je=U,Ue=[me,Ae,_e],at=[me,_e,Ae],rt;if(B(me,_e,Ae),_e=Array.isArray(_e)?_e:[_e],typeof Ae>"u")for(Ae=[],rt=0;rt<_e.length;rt++)Ae.push(-_e.length+rt);for(Ae=Array.isArray(Ae)?Ae:[Ae],_e=I(_e,me.data.length-1),Ae=I(Ae,me.data.length-1),rt=0;rt<me.data.length;rt++)_e.indexOf(rt)===-1&&ke.push(me.data[rt]);for(rt=0;rt<_e.length;rt++)Ee.push({newIndex:Ae[rt],trace:me.data[_e[rt]]});for(Ee.sort(function(At,ht){return At.newIndex-ht.newIndex}),rt=0;rt<Ee.length;rt+=1)ke.splice(Ee[rt].newIndex,0,Ee[rt].trace);me.data=ke;var ft=e.redraw(me);return l.add(me,De,Ue,Je,at),ft}function V(me,_e,Ae,ke){me=a.getGraphDiv(me),S.clearPromiseQueue(me);var Ee={};if(typeof _e=="string")Ee[_e]=Ae;else if(a.isPlainObject(_e))Ee=a.extendFlat({},_e),ke===void 0&&(ke=Ae);else return a.warn("Restyle fail.",_e,Ae,ke),Promise.reject();Object.keys(Ee).length&&(me.changed=!0);var De=S.coerceTraceIndices(me,ke),Je=te(me,Ee,De),Ue=Je.flags;Ue.calc&&(me.calcdata=void 0),Ue.clearAxisTypes&&S.clearAxisTypes(me,De,{});var at=[];Ue.fullReplot?at.push(e._doPlot):(at.push(c.previousPromises),c.supplyDefaults(me),Ue.markerSize&&(c.doCalcdata(me),le(at)),Ue.style&&at.push(M.doTraceStyle),Ue.colorbars&&at.push(M.doColorBars),at.push(E)),at.push(c.rehover,c.redrag,c.reselect),l.add(me,V,[me,Je.undoit,Je.traces],V,[me,Je.redoit,Je.traces]);var rt=a.syncOrAsync(at,me);return(!rt||!rt.then)&&(rt=Promise.resolve()),rt.then(function(){return me.emit("plotly_restyle",Je.eventData),me})}function j(me){return me===void 0?null:me}function q(me,_e){return _e?function(Ae,ke,Ee){var De=o(Ae,ke),Je=De.set;return De.set=function(Ue){var at=(Ee||"")+ke;Y(at,De.get(),Ue,me),Je(Ue)},De}:o}function Y(me,_e,Ae,ke){if(Array.isArray(_e)||Array.isArray(Ae))for(var Ee=Array.isArray(_e)?_e:[],De=Array.isArray(Ae)?Ae:[],Je=Math.max(Ee.length,De.length),Ue=0;Ue<Je;Ue++)Y(me+"["+Ue+"]",Ee[Ue],De[Ue],ke);else if(a.isPlainObject(_e)||a.isPlainObject(Ae)){var at=a.isPlainObject(_e)?_e:{},rt=a.isPlainObject(Ae)?Ae:{},ft=a.extendFlat({},at,rt);for(var At in ft)Y(me+"."+At,at[At],rt[At],ke)}else ke[me]===void 0&&(ke[me]=j(_e))}function K(me,_e,Ae){for(var ke in Ae){var Ee=o(me,ke);Y(ke,Ee.get(),Ae[ke],_e)}}function te(me,_e,Ae){var ke=me._fullLayout,Ee=me._fullData,De=me.data,Je=ke._guiEditing,Ue=q(ke._preGUI,Je),at=a.extendDeepAll({},_e),rt,ft=C.traceFlags(),At={},ht={},Gt;function fr(){return Ae.map(function(){})}function gt(ze){var tt=f.id2name(ze);Gt.indexOf(tt)===-1&&Gt.push(tt)}function yt(ze){return"LAYOUT"+ze+".autorange"}function kt(ze){return"LAYOUT"+ze+".range"}function Lt(ze,tt,ct){if(Array.isArray(ze)){ze.forEach(function(Zt){Lt(Zt,tt,ct)});return}if(!(ze in _e||S.hasParent(_e,ze))){var wt;if(ze.slice(0,6)==="LAYOUT")wt=Ue(me.layout,ze.replace("LAYOUT",""));else{var Nt=Ae[ct],It=ke._tracePreGUI[Ee[Nt].uid];wt=q(It,Je)(De[Nt],ze)}ze in ht||(ht[ze]=fr()),ht[ze][ct]===void 0&&(ht[ze][ct]=j(wt.get())),tt!==void 0&&wt.set(tt)}}function Ct(ze){return function(tt){return Ee[tt][ze]}}function $t(ze){return function(tt,ct){return tt===!1?Ee[Ae[ct]][ze]:null}}for(var mr in _e){if(S.hasParent(_e,mr))throw new Error("cannot set "+mr+" and a parent attribute simultaneously");var br=_e[mr],Er,Tr,Ur,Ai,oi,Qr;if((mr==="autobinx"||mr==="autobiny")&&(mr=mr.charAt(mr.length-1)+"bins",Array.isArray(br)?br=br.map($t(mr)):br===!1?br=Ae.map(Ct(mr)):br=null),At[mr]=br,mr.slice(0,6)==="LAYOUT"){Ur=Ue(me.layout,mr.replace("LAYOUT","")),ht[mr]=[j(Ur.get())],Ur.set(Array.isArray(br)?br[0]:br),ft.calc=!0;continue}for(ht[mr]=fr(),rt=0;rt<Ae.length;rt++){Er=De[Ae[rt]],Tr=Ee[Ae[rt]];var ea=ke._tracePreGUI[Tr.uid];if(Ur=q(ea,Je)(Er,mr),Ai=Ur.get(),oi=Array.isArray(br)?br[rt%br.length]:br,oi!==void 0){var $i=Ur.parts[Ur.parts.length-1],ja=mr.slice(0,mr.length-$i.length-1),ya=ja?ja+".":"",pa=ja?o(Tr,ja).get():Tr;if(Qr=u.getTraceValObject(Tr,Ur.parts),Qr&&Qr.impliedEdits&&oi!==null)for(var xi in Qr.impliedEdits)Lt(a.relativeAttr(mr,xi),Qr.impliedEdits[xi],rt);else if(($i==="thicknessmode"||$i==="lenmode")&&Ai!==oi&&(oi==="fraction"||oi==="pixels")&&pa){var bi=ke._size,Ua=pa.orient,dn=Ua==="top"||Ua==="bottom";if($i==="thicknessmode"){var pi=dn?bi.h:bi.w;Lt(ya+"thickness",pa.thickness*(oi==="fraction"?1/pi:pi),rt)}else{var Jr=dn?bi.w:bi.h;Lt(ya+"len",pa.len*(oi==="fraction"?1/Jr:Jr),rt)}}else if(mr==="type"&&(oi==="pie"!=(Ai==="pie")||oi==="funnelarea"!=(Ai==="funnelarea"))){var Be="x",Fe="y";(oi==="bar"||Ai==="bar")&&Er.orientation==="h"&&(Be="y",Fe="x"),a.swapAttrs(Er,["?"],"labels",Be),a.swapAttrs(Er,["d?","?0"],"label",Be),a.swapAttrs(Er,["?"],"values",Fe),Ai==="pie"||Ai==="funnelarea"?(o(Er,"marker.color").set(o(Er,"marker.colors").get()),ke._pielayer.selectAll("g.trace").remove()):n.traceIs(Er,"cartesian")&&o(Er,"marker.colors").set(o(Er,"marker.color").get())}ht[mr][rt]=j(Ai);var Et=["swapxy","swapxyaxes","orientation","orientationaxes"];if(Et.indexOf(mr)!==-1){if(mr==="orientation"){Ur.set(oi);var St=Er.x&&!Er.y?"h":"v";if((Ur.get()||St)===Tr.orientation)continue}else mr==="orientationaxes"&&(Er.orientation={v:"h",h:"v"}[Tr.orientation]);S.swapXYData(Er),ft.calc=ft.clearAxisTypes=!0}else c.dataArrayContainers.indexOf(Ur.parts[0])!==-1?(S.manageArrayContainers(Ur,oi,ht),ft.calc=!0):(Qr?Qr.arrayOk&&!n.traceIs(Tr,"regl")&&(a.isArrayOrTypedArray(oi)||a.isArrayOrTypedArray(Ai))?ft.calc=!0:C.update(ft,Qr):ft.calc=!0,Ur.set(oi))}}if(["swapxyaxes","orientationaxes"].indexOf(mr)!==-1&&f.swap(me,Ae),mr==="orientationaxes"){var zt=o(me.layout,"hovermode"),Wt=zt.get();Wt==="x"?zt.set("y"):Wt==="y"?zt.set("x"):Wt==="x unified"?zt.set("y unified"):Wt==="y unified"&&zt.set("x unified")}if(["orientation","type"].indexOf(mr)!==-1){for(Gt=[],rt=0;rt<Ae.length;rt++){var Yt=De[Ae[rt]];n.traceIs(Yt,"cartesian")&&(gt(Yt.xaxis||"x"),gt(Yt.yaxis||"y"))}Lt(Gt.map(yt),!0,0),Lt(Gt.map(kt),[0,1],0)}}return(ft.calc||ft.plot)&&(ft.fullReplot=!0),{flags:ft,undoit:ht,redoit:At,traces:Ae,eventData:a.extendDeepNoArrays([],[at,Ae])}}function ne(me,_e,Ae){me=a.getGraphDiv(me),S.clearPromiseQueue(me);var ke={};if(typeof _e=="string")ke[_e]=Ae;else if(a.isPlainObject(_e))ke=a.extendFlat({},_e);else return a.warn("Relayout fail.",_e,Ae),Promise.reject();Object.keys(ke).length&&(me.changed=!0);var Ee=ye(me,ke),De=Ee.flags;De.calc&&(me.calcdata=void 0);var Je=[c.previousPromises];De.layoutReplot?Je.push(M.layoutReplot):Object.keys(ke).length&&(se(me,De,Ee)||c.supplyDefaults(me),De.legend&&Je.push(M.doLegend),De.layoutstyle&&Je.push(M.layoutStyles),De.axrange&&le(Je,Ee.rangesAltered),De.ticks&&Je.push(M.doTicksRelayout),De.modebar&&Je.push(M.doModeBar),De.camera&&Je.push(M.doCamera),De.colorbars&&Je.push(M.doColorBars),Je.push(E)),Je.push(c.rehover,c.redrag,c.reselect),l.add(me,ne,[me,Ee.undoit],ne,[me,Ee.redoit]);var Ue=a.syncOrAsync(Je,me);return(!Ue||!Ue.then)&&(Ue=Promise.resolve(me)),Ue.then(function(){return me.emit("plotly_relayout",Ee.eventData),me})}function se(me,_e,Ae){var ke=me._fullLayout;if(!_e.axrange)return!1;for(var Ee in _e)if(Ee!=="axrange"&&_e[Ee])return!1;var De,Je,Ue=function(Gt,fr){return a.coerce(De,Je,d,Gt,fr)},at={};for(var rt in Ae.rangesAltered){var ft=f.id2name(rt);if(De=me.layout[ft],Je=ke[ft],h(De,Je,Ue,at),Je._matchGroup){for(var At in Je._matchGroup)if(At!==rt){var ht=ke[f.id2name(At)];ht.autorange=Je.autorange,ht.range=Je.range.slice(),ht._input.range=Je.range.slice()}}}return!0}function le(me,_e){var Ae=_e?function(ke){var Ee=[],De=!0;for(var Je in _e){var Ue=f.getFromId(ke,Je);if(Ee.push(Je),(Ue.ticklabelposition||"").indexOf("inside")!==-1&&Ue._anchorAxis&&Ee.push(Ue._anchorAxis._id),Ue._matchGroup)for(var at in Ue._matchGroup)_e[at]||Ee.push(at)}return f.draw(ke,Ee,{skipTitle:De})}:function(ke){return f.draw(ke,"redraw")};me.push(_,M.doAutoRangeAndConstraints,Ae,M.drawData,M.finalDraw)}var ce=/^[xyz]axis[0-9]*\.range(\[[0|1]\])?$/,pe=/^[xyz]axis[0-9]*\.autorange$/,xe=/^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/;function ye(me,_e){var Ae=me.layout,ke=me._fullLayout,Ee=ke._guiEditing,De=q(ke._preGUI,Ee),Je=Object.keys(_e),Ue=f.list(me),at=a.extendDeepAll({},_e),rt={},ft,At,ht;for(Je=Object.keys(_e),At=0;At<Je.length;At++)if(Je[At].indexOf("allaxes")===0){for(ht=0;ht<Ue.length;ht++){var Gt=Ue[ht]._id.slice(1),fr=Gt.indexOf("scene")!==-1?Gt+".":"",gt=Je[At].replace("allaxes",fr+Ue[ht]._name);_e[gt]||(_e[gt]=_e[Je[At]])}delete _e[Je[At]]}var yt=C.layoutFlags(),kt={},Lt={};function Ct(Zt,qt){if(Array.isArray(Zt)){Zt.forEach(function(Br){Ct(Br,qt)});return}if(!(Zt in _e||S.hasParent(_e,Zt))){var vr=De(Ae,Zt);Zt in Lt||(Lt[Zt]=j(vr.get())),qt!==void 0&&vr.set(qt)}}var $t={},mr;function br(Zt){var qt=f.name2id(Zt.split(".")[0]);return $t[qt]=1,qt}for(var Er in _e){if(S.hasParent(_e,Er))throw new Error("cannot set "+Er+" and a parent attribute simultaneously");for(var Tr=De(Ae,Er),Ur=_e[Er],Ai=Tr.parts.length,oi=Ai-1;oi>0&&typeof Tr.parts[oi]!="string";)oi--;var Qr=Tr.parts[oi],ea=Tr.parts[oi-1]+"."+Qr,$i=Tr.parts.slice(0,oi).join("."),ja=o(me.layout,$i).get(),ya=o(ke,$i).get(),pa=Tr.get();if(Ur!==void 0){kt[Er]=Ur,Lt[Er]=Qr==="reverse"?Ur:j(pa);var xi=u.getLayoutValObject(ke,Tr.parts);if(xi&&xi.impliedEdits&&Ur!==null)for(var bi in xi.impliedEdits)Ct(a.relativeAttr(Er,bi),xi.impliedEdits[bi]);if(["width","height"].indexOf(Er)!==-1)if(Ur){Ct("autosize",null);var Ua=Er==="height"?"width":"height";Ct(Ua,ke[Ua])}else ke[Er]=me._initialAutoSize[Er];else if(Er==="autosize")Ct("width",Ur?null:ke.width),Ct("height",Ur?null:ke.height);else if(ea.match(ce))br(ea),o(ke,$i+"._inputRange").set(null);else if(ea.match(pe)){br(ea),o(ke,$i+"._inputRange").set(null);var dn=o(ke,$i).get();dn._inputDomain&&(dn._input.domain=dn._inputDomain.slice())}else ea.match(xe)&&o(ke,$i+"._inputDomain").set(null);if(Qr==="type"){mr=ja;var pi=ya.type==="linear"&&Ur==="log",Jr=ya.type==="log"&&Ur==="linear";if(pi||Jr){if(!mr||!mr.range)Ct($i+".autorange",!0);else if(ya.autorange)pi&&(mr.range=mr.range[1]>mr.range[0]?[1,2]:[2,1]);else{var Be=mr.range[0],Fe=mr.range[1];pi?(Be<=0&&Fe<=0&&Ct($i+".autorange",!0),Be<=0?Be=Fe/1e6:Fe<=0&&(Fe=Be/1e6),Ct($i+".range[0]",Math.log(Be)/Math.LN10),Ct($i+".range[1]",Math.log(Fe)/Math.LN10)):(Ct($i+".range[0]",Math.pow(10,Be)),Ct($i+".range[1]",Math.pow(10,Fe)))}Array.isArray(ke._subplots.polar)&&ke._subplots.polar.length&&ke[Tr.parts[0]]&&Tr.parts[1]==="radialaxis"&&delete ke[Tr.parts[0]]._subplot.viewInitial["radialaxis.range"],n.getComponentMethod("annotations","convertCoords")(me,ya,Ur,Ct),n.getComponentMethod("images","convertCoords")(me,ya,Ur,Ct)}else Ct($i+".autorange",!0),Ct($i+".range",null);o(ke,$i+"._inputRange").set(null)}else if(Qr.match(w)){var Et=o(ke,Er).get(),St=(Ur||{}).type;(!St||St==="-")&&(St="linear"),n.getComponentMethod("annotations","convertCoords")(me,Et,St,Ct),n.getComponentMethod("images","convertCoords")(me,Et,St,Ct)}var zt=x.containerArrayMatch(Er);if(zt){ft=zt.array,At=zt.index;var Wt=zt.property,Yt=xi||{editType:"calc"};At!==""&&Wt===""&&(x.isAddVal(Ur)?Lt[Er]=null:x.isRemoveVal(Ur)?Lt[Er]=(o(Ae,ft).get()||[])[At]:a.warn("unrecognized full object value",_e)),C.update(yt,Yt),rt[ft]||(rt[ft]={});var ze=rt[ft][At];ze||(ze=rt[ft][At]={}),ze[Wt]=Ur,delete _e[Er]}else Qr==="reverse"?(ja.range?ja.range.reverse():(Ct($i+".autorange",!0),ja.range=[1,0]),ya.autorange?yt.calc=!0:yt.plot=!0):(Er==="dragmode"&&(Ur===!1&&pa!==!1||Ur!==!1&&pa===!1)||ke._has("scatter-like")&&ke._has("regl")&&Er==="dragmode"&&(Ur==="lasso"||Ur==="select")&&!(pa==="lasso"||pa==="select")?yt.plot=!0:xi?C.update(yt,xi):yt.calc=!0,Tr.set(Ur))}}for(ft in rt){var tt=x.applyContainerArrayChanges(me,De(Ae,ft),rt[ft],yt,De);tt||(yt.plot=!0)}for(var ct in $t){mr=f.getFromId(me,ct);var wt=mr&&mr._constraintGroup;if(wt){yt.calc=!0;for(var Nt in wt)$t[Nt]||(f.getFromId(me,Nt)._constraintShrinkable=!0)}}(fe(me)||_e.height||_e.width)&&(yt.plot=!0);var It=ke.shapes;for(At=0;At<It.length;At++)if(It[At].showlegend){yt.calc=!0;break}return(yt.plot||yt.calc)&&(yt.layoutReplot=!0),{flags:yt,rangesAltered:$t,undoit:Lt,redoit:kt,eventData:at}}function fe(me){var _e=me._fullLayout,Ae=_e.width,ke=_e.height;return me.layout.autosize&&c.plotAutoSize(me,me.layout,_e),_e.width!==Ae||_e.height!==ke}function ae(me,_e,Ae,ke){me=a.getGraphDiv(me),S.clearPromiseQueue(me),a.isPlainObject(_e)||(_e={}),a.isPlainObject(Ae)||(Ae={}),Object.keys(_e).length&&(me.changed=!0),Object.keys(Ae).length&&(me.changed=!0);var Ee=S.coerceTraceIndices(me,ke),De=te(me,a.extendFlat({},_e),Ee),Je=De.flags,Ue=ye(me,a.extendFlat({},Ae)),at=Ue.flags;(Je.calc||at.calc)&&(me.calcdata=void 0),Je.clearAxisTypes&&S.clearAxisTypes(me,Ee,Ae);var rt=[];at.layoutReplot?rt.push(M.layoutReplot):Je.fullReplot?rt.push(e._doPlot):(rt.push(c.previousPromises),se(me,at,Ue)||c.supplyDefaults(me),Je.style&&rt.push(M.doTraceStyle),(Je.colorbars||at.colorbars)&&rt.push(M.doColorBars),at.legend&&rt.push(M.doLegend),at.layoutstyle&&rt.push(M.layoutStyles),at.axrange&&le(rt,Ue.rangesAltered),at.ticks&&rt.push(M.doTicksRelayout),at.modebar&&rt.push(M.doModeBar),at.camera&&rt.push(M.doCamera),rt.push(E)),rt.push(c.rehover,c.redrag,c.reselect),l.add(me,ae,[me,De.undoit,Ue.undoit,De.traces],ae,[me,De.redoit,Ue.redoit,De.traces]);var ft=a.syncOrAsync(rt,me);return(!ft||!ft.then)&&(ft=Promise.resolve(me)),ft.then(function(){return me.emit("plotly_update",{data:De.eventData,layout:Ue.eventData}),me})}function ee(me){return function(Ae){Ae._fullLayout._guiEditing=!0;var ke=me.apply(null,arguments);return Ae._fullLayout._guiEditing=!1,ke}}var ie=[{pattern:/^hiddenlabels/,attr:"legend.uirevision"},{pattern:/^((x|y)axis\d*)\.((auto)?range|title\.text)/},{pattern:/axis\d*\.showspikes$/,attr:"modebar.uirevision"},{pattern:/(hover|drag)mode$/,attr:"modebar.uirevision"},{pattern:/^(scene\d*)\.camera/},{pattern:/^(geo\d*)\.(projection|center|fitbounds)/},{pattern:/^(ternary\d*\.[abc]axis)\.(min|title\.text)$/},{pattern:/^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/},{pattern:/^(polar\d*\.angularaxis)\.rotation/},{pattern:/^(map\d*)\.(center|zoom|bearing|pitch)/},{pattern:/^legend\.(x|y)$/,attr:"editrevision"},{pattern:/^(shapes|annotations)/,attr:"editrevision"},{pattern:/^selections/,attr:"selectionrevision"},{pattern:/^title\.text$/,attr:"editrevision"}],Q=[{pattern:/^selectedpoints$/,attr:"selectionrevision"},{pattern:/^visible$/,attr:"legend.uirevision"},{pattern:/^dimensions\[\d+\]\.constraintrange/},{pattern:/^node\.(x|y|groups)/},{pattern:/^level$/},{pattern:/^name$/},{pattern:/colorbar\.title\.text$/},{pattern:/colorbar\.(x|y)$/,attr:"editrevision"}];function ue(me,_e){for(var Ae=0;Ae<_e.length;Ae++){var ke=_e[Ae],Ee=me.match(ke.pattern);if(Ee){var De=Ee[1]||"";return{head:De,tail:me.slice(De.length+1),attr:ke.attr}}}}function ge(me,_e){var Ae=o(_e,me).get();if(Ae!==void 0)return Ae;var ke=me.split(".");for(ke.pop();ke.length>1;)if(ke.pop(),Ae=o(_e,ke.join(".")+".uirevision").get(),Ae!==void 0)return Ae;return _e.uirevision}function Me(me,_e){for(var Ae=0;Ae<_e.length;Ae++)if(_e[Ae].uid===me)return Ae;return-1}function Te(me,_e,Ae){for(var ke=0;ke<_e.length;ke++)if(_e[ke].uid===me)return ke;return!_e[Ae]||_e[Ae].uid?-1:Ae}function je(me,_e){var Ae=a.isPlainObject(me),ke=Array.isArray(me);return Ae||ke?(Ae&&a.isPlainObject(_e)||ke&&Array.isArray(_e))&&JSON.stringify(me)===JSON.stringify(_e):me===_e}function Ve(me,_e,Ae,ke){var Ee=ke._preGUI,De,Je,Ue,at,rt,ft,At,ht,Gt,fr,gt=[],yt={},kt={};for(De in Ee){if(rt=ue(De,ie),rt){if(Gt=rt.head,fr=rt.tail,Je=rt.attr||Gt+".uirevision",Ue=o(ke,Je).get(),at=Ue&&ge(Je,_e),at&&at===Ue){if(ft=Ee[De],ft===null&&(ft=void 0),At=o(_e,De),ht=At.get(),je(ht,ft)){ht===void 0&&fr==="autorange"&>.push(Gt),At.set(j(o(ke,De).get()));continue}else if(fr==="autorange"||fr.slice(0,6)==="range["){var Lt=Ee[Gt+".range[0]"],Ct=Ee[Gt+".range[1]"],$t=Ee[Gt+".autorange"];if($t||$t===null&&Lt===null&&Ct===null){if(!(Gt in yt)){var mr=o(_e,Gt).get();yt[Gt]=mr&&(mr.autorange||mr.autorange!==!1&&(!mr.range||mr.range.length!==2))}if(yt[Gt]){At.set(j(o(ke,De).get()));continue}}}}}else a.warn("unrecognized GUI edit: "+De);delete Ee[De],rt&&rt.tail.slice(0,6)==="range["&&(kt[rt.head]=1)}for(var br=0;br<gt.length;br++){var Er=gt[br];if(kt[Er]){var Tr=o(_e,Er).get();Tr&&delete Tr.autorange}}var Ur=ke._tracePreGUI;for(var Ai in Ur){var oi=Ur[Ai],Qr=null,ea;for(De in oi){if(!Qr){var $i=Me(Ai,Ae);if($i<0){delete Ur[Ai];break}ea=Ae[$i];var ja=Te(Ai,me,ea.index);if(ja<0){delete Ur[Ai];break}Qr=me[ja]}if(rt=ue(De,Q),rt){if(rt.attr?(Ue=o(ke,rt.attr).get(),at=Ue&&ge(rt.attr,_e)):(Ue=ea.uirevision,at=Qr.uirevision,at===void 0&&(at=_e.uirevision)),at&&at===Ue&&(ft=oi[De],ft===null&&(ft=void 0),At=o(Qr,De),ht=At.get(),je(ht,ft))){At.set(j(o(ea,De).get()));continue}}else a.warn("unrecognized GUI edit: "+De+" in trace uid "+Ai);delete oi[De]}}}function Ze(me,_e,Ae,ke){var Ee,De;function Je(){return e.addFrames(me,Ee)}me=a.getGraphDiv(me),S.clearPromiseQueue(me);var Ue=me._fullData,at=me._fullLayout;if(!a.isPlotDiv(me)||!Ue||!at)De=e.newPlot(me,_e,Ae,ke);else{if(a.isPlainObject(_e)){var rt=_e;_e=rt.data,Ae=rt.layout,ke=rt.config,Ee=rt.frames}var ft=!1;if(ke){let ea=a.extendDeepAll({},me._context);me._context=void 0,R(me,ke),ft=!S.collectionsAreEqual(ea,me._context)}if(ft){let ea=me._ev.eventNames().map($i=>[$i,me._ev.listeners($i)]);De=e.newPlot(me,_e,Ae,ke).then(()=>{for(let[$i,ja]of ea)ja.forEach(ya=>me.on($i,ya));return e.react(me,_e,Ae,ke)})}else{me.data=_e||[],S.cleanData(me.data),me.layout=Ae||{},S.cleanLayout(me.layout),Ve(me.data,me.layout,Ue,at),c.supplyDefaults(me,{skipUpdateCalc:!0});var At=me._fullData,ht=me._fullLayout,Gt=ht.datarevision===void 0,fr=ht.transition,gt=vt(me,at,ht,Gt,fr),yt=gt.newDataRevision,kt=Ke(me,Ue,At,Gt,fr,yt);if(fe(me)&&(gt.layoutReplot=!0),kt.calc||gt.calc){me.calcdata=void 0;for(var Lt=Object.getOwnPropertyNames(ht),Ct=0;Ct<Lt.length;Ct++){var $t=Lt[Ct],mr=$t.substring(0,5);if(mr==="xaxis"||mr==="yaxis"){var br=ht[$t]._emptyCategories;br&&br()}}}else c.supplyDefaultsUpdateCalc(me.calcdata,At);var Er=[];if(Ee&&(me._transitionData={},c.createTransitionData(me),Er.push(Je)),ht.transition&&(kt.anim||gt.anim))gt.ticks&&Er.push(M.doTicksRelayout),c.doCalcdata(me),M.doAutoRangeAndConstraints(me),Er.push(function(){return c.transitionFromReact(me,kt,gt,at)});else if(kt.fullReplot||gt.layoutReplot)me._fullLayout._skipDefaults=!0,Er.push(e._doPlot);else{for(var Tr in gt.arrays){var Ur=gt.arrays[Tr];if(Ur.length){var Ai=n.getComponentMethod(Tr,"drawOne");if(Ai!==a.noop)for(var oi=0;oi<Ur.length;oi++)Ai(me,Ur[oi]);else{var Qr=n.getComponentMethod(Tr,"draw");if(Qr===a.noop)throw new Error("cannot draw components: "+Tr);Qr(me)}}}Er.push(c.previousPromises),kt.style&&Er.push(M.doTraceStyle),(kt.colorbars||gt.colorbars)&&Er.push(M.doColorBars),gt.legend&&Er.push(M.doLegend),gt.layoutstyle&&Er.push(M.layoutStyles),gt.axrange&&le(Er),gt.ticks&&Er.push(M.doTicksRelayout),gt.modebar&&Er.push(M.doModeBar),gt.camera&&Er.push(M.doCamera),Er.push(E)}Er.push(c.rehover,c.redrag,c.reselect),De=a.syncOrAsync(Er,me),(!De||!De.then)&&(De=Promise.resolve(me))}}return De.then(()=>(ft||me.emit("plotly_react",{config:ke,data:_e,layout:Ae}),me))}function Ke(me,_e,Ae,ke,Ee,De){var Je=_e.length===Ae.length;if(!Ee&&!Je)return{fullReplot:!0,calc:!0};var Ue=C.traceFlags();Ue.arrays={},Ue.nChanges=0,Ue.nChangesAnim=0;var at,rt;function ft(Gt){var fr=u.getTraceValObject(rt,Gt);return!rt._module.animatable&&fr.anim&&(fr.anim=!1),fr}var At={getValObject:ft,flags:Ue,immutable:ke,transition:Ee,newDataRevision:De,gd:me},ht={};for(at=0;at<_e.length;at++)if(Ae[at]){if(rt=Ae[at],ht[rt.uid])continue;ht[rt.uid]=1,xt(_e[at],rt,[],At)}return(Ue.calc||Ue.plot)&&(Ue.fullReplot=!0),Ee&&Ue.nChanges&&Ue.nChangesAnim&&(Ue.anim=Ue.nChanges===Ue.nChangesAnim&&Je?"all":"some"),Ue}function vt(me,_e,Ae,ke,Ee){var De=C.layoutFlags();De.arrays={},De.rangesAltered={},De.nChanges=0,De.nChangesAnim=0;function Je(ht){return u.getLayoutValObject(Ae,ht)}for(var Ue in Ae)if(!(!Ue.startsWith("xaxis")&&!Ue.startsWith("yaxis"))&&_e[Ue]){var at=Ae[Ue].domain,rt=_e[Ue].domain,ft=_e[Ue]._inputDomain;_e[Ue]._inputDomain&&(at[0]===ft[0]&&at[1]===ft[1]?Ae[Ue].domain=_e[Ue].domain:(at[0]!==rt[0]||at[1]!==rt[1])&&(Ae[Ue]._inputDomain=null))}var At={getValObject:Je,flags:De,immutable:ke,transition:Ee,gd:me};return xt(_e,Ae,[],At),(De.plot||De.calc)&&(De.layoutReplot=!0),Ee&&De.nChanges&&De.nChangesAnim&&(De.anim=De.nChanges===De.nChangesAnim?"all":"some"),De}function xt(me,_e,Ae,ke){var Ee,De,Je,Ue=ke.getValObject,at=ke.flags,rt=ke.immutable,ft=ke.inArray,At=ke.arrayIndex;function ht(){var $i=Ee.editType;if(ft&&$i.indexOf("arraydraw")!==-1){a.pushUnique(at.arrays[ft],At);return}C.update(at,Ee),$i!=="none"&&at.nChanges++,ke.transition&&Ee.anim&&at.nChangesAnim++,(ce.test(Je)||pe.test(Je))&&(at.rangesAltered[Ae[0]]=1),De==="datarevision"&&(at.newDataRevision=1)}function Gt($i){return $i.valType==="data_array"||$i.arrayOk}for(De in me){if(at.calc&&!ke.transition)return;var fr=me[De],gt=_e[De],yt=Ae.concat(De);if(Je=yt.join("."),!(De.charAt(0)==="_"||typeof fr=="function"||fr===gt)){if((De==="tick0"||De==="dtick")&&Ae[0]!=="geo"){var kt=_e.tickmode;if(kt==="auto"||kt==="array"||!kt)continue}if(!(De==="range"&&_e.autorange)&&!((De==="zmin"||De==="zmax")&&_e.type==="contourcarpet")&&(Ee=Ue(yt),!!Ee&&!(Ee._compareAsJSON&&JSON.stringify(fr)===JSON.stringify(gt)))){var Lt=Ee.valType,Ct,$t=Gt(Ee),mr=Array.isArray(fr),br=Array.isArray(gt);if(mr&&br){var Er="_input_"+De,Tr=me[Er],Ur=_e[Er];if(Array.isArray(Tr)&&Tr===Ur)continue}if(gt===void 0)$t&&mr?at.calc=!0:ht();else if(Ee._isLinkedToArray){var Ai=[],oi=!1;ft||(at.arrays[De]=Ai);var Qr=Math.min(fr.length,gt.length),ea=Math.max(fr.length,gt.length);if(Qr!==ea)if(Ee.editType==="arraydraw")oi=!0;else{ht();continue}for(Ct=0;Ct<Qr;Ct++)xt(fr[Ct],gt[Ct],yt.concat(Ct),a.extendFlat({inArray:De,arrayIndex:Ct},ke));if(oi)for(Ct=Qr;Ct<ea;Ct++)Ai.push(Ct)}else!Lt&&a.isPlainObject(fr)?xt(fr,gt,yt,ke):$t?mr&&br?(rt&&(at.calc=!0),(rt||ke.newDataRevision)&&ht()):mr!==br?at.calc=!0:ht():mr&&br?(fr.length!==gt.length||String(fr)!==String(gt))&&ht():ht()}}}for(De in _e)if(!(De in me||De.charAt(0)==="_"||typeof _e[De]=="function"))if(Ee=Ue(Ae.concat(De)),Gt(Ee)&&Array.isArray(_e[De])){at.calc=!0;return}else ht()}function Pt(me,_e,Ae){if(me=a.getGraphDiv(me),!a.isPlotDiv(me))throw new Error("This element is not a Plotly plot: "+me+". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/");var ke=me._transitionData;ke._frameQueue||(ke._frameQueue=[]),Ae=c.supplyAnimationDefaults(Ae);var Ee=Ae.transition,De=Ae.frame;ke._frameWaitingCnt===void 0&&(ke._frameWaitingCnt=0);function Je(rt){return Array.isArray(Ee)?rt>=Ee.length?Ee[0]:Ee[rt]:Ee}function Ue(rt){return Array.isArray(De)?rt>=De.length?De[0]:De[rt]:De}function at(rt,ft){var At=0;return function(){if(rt&&++At===ft)return rt()}}return new Promise(function(rt,ft){function At(){if(ke._frameQueue.length!==0){for(;ke._frameQueue.length;){var Qr=ke._frameQueue.pop();Qr.onInterrupt&&Qr.onInterrupt()}me.emit("plotly_animationinterrupted",[])}}function ht(Qr){if(Qr.length!==0){for(var ea=0;ea<Qr.length;ea++){var $i;Qr[ea].type==="byname"?$i=c.computeFrame(me,Qr[ea].name):$i=Qr[ea].data;var ja=Ue(ea),ya=Je(ea);ya.duration=Math.min(ya.duration,ja.duration);var pa={frame:$i,name:Qr[ea].name,frameOpts:ja,transitionOpts:ya};ea===Qr.length-1&&(pa.onComplete=at(rt,2),pa.onInterrupt=ft),ke._frameQueue.push(pa)}Ae.mode==="immediate"&&(ke._lastFrameAt=-1/0),ke._animationRaf||gt()}}function Gt(){me.emit("plotly_animated"),window.cancelAnimationFrame(ke._animationRaf),ke._animationRaf=null}function fr(){ke._currentFrame&&ke._currentFrame.onComplete&&ke._currentFrame.onComplete();var Qr=ke._currentFrame=ke._frameQueue.shift();if(Qr){var ea=Qr.name?Qr.name.toString():null;me._fullLayout._currentFrame=ea,ke._lastFrameAt=Date.now(),ke._timeToNext=Qr.frameOpts.duration,c.transition(me,Qr.frame.data,Qr.frame.layout,S.coerceTraceIndices(me,Qr.frame.traces),Qr.frameOpts,Qr.transitionOpts).then(function(){Qr.onComplete&&Qr.onComplete()}),me.emit("plotly_animatingframe",{name:ea,frame:Qr.frame,animation:{frame:Qr.frameOpts,transition:Qr.transitionOpts}})}else Gt()}function gt(){me.emit("plotly_animating"),ke._lastFrameAt=-1/0,ke._timeToNext=0,ke._runningTransitions=0,ke._currentFrame=null;var Qr=function(){ke._animationRaf=window.requestAnimationFrame(Qr),Date.now()-ke._lastFrameAt>ke._timeToNext&&fr()};Qr()}var yt=0;function kt(Qr){return Array.isArray(Ee)?yt>=Ee.length?Qr.transitionOpts=Ee[yt]:Qr.transitionOpts=Ee[0]:Qr.transitionOpts=Ee,yt++,Qr}var Lt,Ct,$t=[],mr=_e==null,br=Array.isArray(_e),Er=!mr&&!br&&a.isPlainObject(_e);if(Er)$t.push({type:"object",data:kt(a.extendFlat({},_e))});else if(mr||["string","number"].indexOf(typeof _e)!==-1)for(Lt=0;Lt<ke._frames.length;Lt++)Ct=ke._frames[Lt],Ct&&(mr||String(Ct.group)===String(_e))&&$t.push({type:"byname",name:String(Ct.name),data:kt({name:Ct.name})});else if(br)for(Lt=0;Lt<_e.length;Lt++){var Tr=_e[Lt];["number","string"].indexOf(typeof Tr)!==-1?(Tr=String(Tr),$t.push({type:"byname",name:Tr,data:kt({name:Tr})})):a.isPlainObject(Tr)&&$t.push({type:"object",data:kt(a.extendFlat({},Tr))})}for(Lt=0;Lt<$t.length;Lt++)if(Ct=$t[Lt],Ct.type==="byname"&&!ke._frameHash[Ct.data.name]){a.warn('animate failure: frame not found: "'+Ct.data.name+'"'),ft();return}["next","immediate"].indexOf(Ae.mode)!==-1&&At(),Ae.direction==="reverse"&&$t.reverse();var Ur=me._fullLayout._currentFrame;if(Ur&&Ae.fromcurrent){var Ai=-1;for(Lt=0;Lt<$t.length;Lt++)if(Ct=$t[Lt],Ct.type==="byname"&&Ct.name===Ur){Ai=Lt;break}if(Ai>0&&Ai<$t.length-1){var oi=[];for(Lt=0;Lt<$t.length;Lt++)Ct=$t[Lt],($t[Lt].type!=="byname"||Lt>Ai)&&oi.push(Ct);$t=oi}}$t.length>0?ht($t):(me.emit("plotly_animated"),rt())})}function mt(me,_e,Ae){if(me=a.getGraphDiv(me),_e==null)return Promise.resolve();if(!a.isPlotDiv(me))throw new Error("This element is not a Plotly plot: "+me+". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/");var ke,Ee,De,Je,Ue=me._transitionData._frames,at=me._transitionData._frameHash;if(!Array.isArray(_e))throw new Error("addFrames failure: frameList must be an Array of frame definitions"+_e);var rt=Ue.length+_e.length*2,ft=[],At={};for(ke=_e.length-1;ke>=0;ke--)if(a.isPlainObject(_e[ke])){var ht=_e[ke].name,Gt=(at[ht]||At[ht]||{}).name,fr=_e[ke].name,gt=at[Gt]||At[Gt];Gt&&fr&&typeof fr=="number"&>&&k<A&&(k++,a.warn('addFrames: overwriting frame "'+(at[Gt]||At[Gt]).name+'" with a frame whose name of type "number" also equates to "'+Gt+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),k===A&&a.warn("addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),At[ht]={name:ht},ft.push({frame:c.supplyFrameDefaults(_e[ke]),index:Ae&&Ae[ke]!==void 0&&Ae[ke]!==null?Ae[ke]:rt+ke})}ft.sort(function(Er,Tr){return Er.index>Tr.index?-1:Er.index<Tr.index?1:0});var yt=[],kt=[],Lt=Ue.length;for(ke=ft.length-1;ke>=0;ke--){if(Ee=ft[ke].frame,typeof Ee.name=="number"&&a.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!Ee.name)for(;at[Ee.name="frame "+me._transitionData._counter++];);if(at[Ee.name]){for(De=0;De<Ue.length&&(Ue[De]||{}).name!==Ee.name;De++);yt.push({type:"replace",index:De,value:Ee}),kt.unshift({type:"replace",index:De,value:Ue[De]})}else Je=Math.max(0,Math.min(ft[ke].index,Lt)),yt.push({type:"insert",index:Je,value:Ee}),kt.unshift({type:"delete",index:Je}),Lt++}var Ct=c.modifyFrames,$t=c.modifyFrames,mr=[me,kt],br=[me,yt];return l&&l.add(me,Ct,mr,$t,br),c.modifyFrames(me,yt)}function Mt(me,_e){if(me=a.getGraphDiv(me),!a.isPlotDiv(me))throw new Error("This element is not a Plotly plot: "+me);var Ae,ke,Ee=me._transitionData._frames,De=[],Je=[];if(!_e)for(_e=[],Ae=0;Ae<Ee.length;Ae++)_e.push(Ae);for(_e=_e.slice(),_e.sort(),Ae=_e.length-1;Ae>=0;Ae--)ke=_e[Ae],De.push({type:"delete",index:ke}),Je.unshift({type:"insert",index:ke,value:Ee[ke]});var Ue=c.modifyFrames,at=c.modifyFrames,rt=[me,Je],ft=[me,De];return l&&l.add(me,Ue,rt,at,ft),c.modifyFrames(me,De)}function lt(me){me=a.getGraphDiv(me);var _e=me._fullLayout||{},Ae=me._fullData||[];return c.cleanPlot([],{},Ae,_e),c.purge(me),s.purge(me),_e._container&&_e._container.remove(),delete me._context,me}function qe(me){var _e=me._fullLayout,Ae=me.getBoundingClientRect();if(!a.equalDomRects(Ae,_e._lastBBox)){var ke=_e._invTransform=a.inverseTransformMatrix(a.getFullTransformMatrix(me));_e._invScaleX=Math.sqrt(ke[0][0]*ke[0][0]+ke[0][1]*ke[0][1]+ke[0][2]*ke[0][2]),_e._invScaleY=Math.sqrt(ke[1][0]*ke[1][0]+ke[1][1]*ke[1][1]+ke[1][2]*ke[1][2]),_e._lastBBox=Ae}}function Ye(me){var _e=r.select(me),Ae=me._fullLayout;if(Ae._calcInverseTransform=qe,Ae._calcInverseTransform(me),Ae._container=_e.selectAll(".plot-container").data([0]),Ae._container.enter().insert("div",":first-child").classed("plot-container",!0).classed("plotly",!0).style({width:"100%",height:"100%"}),Ae._paperdiv=Ae._container.selectAll(".svg-container").data([0]),Ae._paperdiv.enter().append("div").classed("user-select-none",!0).classed("svg-container",!0).style("position","relative"),Ae._glcontainer=Ae._paperdiv.selectAll(".gl-container").data([{}]),Ae._glcontainer.enter().append("div").classed("gl-container",!0),Ae._paperdiv.selectAll(".main-svg").remove(),Ae._paperdiv.select(".modebar-container").remove(),Ae._paper=Ae._paperdiv.insert("svg",":first-child").classed("main-svg",!0),Ae._toppaper=Ae._paperdiv.append("svg").classed("main-svg",!0),Ae._modebardiv=Ae._paperdiv.append("div"),delete Ae._modeBar,Ae._hoverpaper=Ae._paperdiv.append("svg").classed("main-svg",!0),!Ae._uid){var ke={};r.selectAll("defs").each(function(){this.id&&(ke[this.id.split("-")[1]]=1)}),Ae._uid=a.randstr(ke)}Ae._paperdiv.selectAll(".main-svg").attr(y.svgAttrs),Ae._defs=Ae._paper.append("defs").attr("id","defs-"+Ae._uid),Ae._clips=Ae._defs.append("g").classed("clips",!0),Ae._topdefs=Ae._toppaper.append("defs").attr("id","topdefs-"+Ae._uid),Ae._topclips=Ae._topdefs.append("g").classed("clips",!0),Ae._bgLayer=Ae._paper.append("g").classed("bglayer",!0),Ae._draggers=Ae._paper.append("g").classed("draglayer",!0);var Ee=Ae._paper.append("g").classed("layer-below",!0);Ae._imageLowerLayer=Ee.append("g").classed("imagelayer",!0),Ae._shapeLowerLayer=Ee.append("g").classed("shapelayer",!0),Ae._cartesianlayer=Ae._paper.append("g").classed("cartesianlayer",!0),Ae._polarlayer=Ae._paper.append("g").classed("polarlayer",!0),Ae._smithlayer=Ae._paper.append("g").classed("smithlayer",!0),Ae._ternarylayer=Ae._paper.append("g").classed("ternarylayer",!0),Ae._geolayer=Ae._paper.append("g").classed("geolayer",!0),Ae._funnelarealayer=Ae._paper.append("g").classed("funnelarealayer",!0),Ae._pielayer=Ae._paper.append("g").classed("pielayer",!0),Ae._iciclelayer=Ae._paper.append("g").classed("iciclelayer",!0),Ae._treemaplayer=Ae._paper.append("g").classed("treemaplayer",!0),Ae._sunburstlayer=Ae._paper.append("g").classed("sunburstlayer",!0),Ae._indicatorlayer=Ae._toppaper.append("g").classed("indicatorlayer",!0),Ae._glimages=Ae._paper.append("g").classed("glimages",!0);var De=Ae._toppaper.append("g").classed("layer-above",!0);Ae._imageUpperLayer=De.append("g").classed("imagelayer",!0),Ae._shapeUpperLayer=De.append("g").classed("shapelayer",!0),Ae._selectionLayer=Ae._toppaper.append("g").classed("selectionlayer",!0),Ae._infolayer=Ae._toppaper.append("g").classed("infolayer",!0),Ae._menulayer=Ae._toppaper.append("g").classed("menulayer",!0),Ae._zoomlayer=Ae._toppaper.append("g").classed("zoomlayer",!0),Ae._hoverlayer=Ae._hoverpaper.append("g").classed("hoverlayer",!0),Ae._modebardiv.classed("modebar-container",!0).style("position","absolute").style("top","0px").style("right","0px"),me.emit("plotly_framework")}e.animate=Pt,e.addFrames=mt,e.deleteFrames=Mt,e.addTraces=H,e.deleteTraces=$,e.extendTraces=J,e.moveTraces=U,e.prependTraces=N,e.newPlot=z,e._doPlot=b,e.purge=lt,e.react=Ze,e.redraw=P,e.relayout=ne,e.restyle=V,e.setPlotConfig=T,e.update=ae,e._guiRelayout=ee(ne),e._guiRestyle=ee(V),e._guiUpdate=ee(ae),e._storeDirectGUIEdit=K}}),Mp=de({"src/snapshot/helpers.js"(e){"use strict";var r=Ma();e.getDelay=function(a){return a._has&&(a._has("gl3d")||a._has("map"))?500:0},e.getRedrawFunc=function(a){return function(){r.getComponentMethod("colorbar","draw")(a)}},e.encodeSVG=function(a){return"data:image/svg+xml,"+encodeURIComponent(a)},e.encodeJSON=function(a){return"data:application/json,"+encodeURIComponent(a)};var t=window.URL||window.webkitURL;e.createObjectURL=function(a){return t.createObjectURL(a)},e.revokeObjectURL=function(a){return t.revokeObjectURL(a)},e.createBlob=function(a,o){if(o==="svg")return new window.Blob([a],{type:"image/svg+xml;charset=utf-8"});if(o==="full-json")return new window.Blob([a],{type:"application/json;charset=utf-8"});var s=i(window.atob(a));return new window.Blob([s],{type:"image/"+o})},e.octetStream=function(a){document.location.href="data:application/octet-stream"+a},e.getPlotTitle=function(a){var o,s,l,n,u=a._fullLayout;if(u){var c=(o=u.title)==null?void 0:o.text;return c===((s=u._dfltTitle)==null?void 0:s.plot)?void 0:c}return(n=(l=a.layout)==null?void 0:l.title)==null?void 0:n.text},e.getPlotSubtitle=function(a){var o,s,l,n,u,c,f=a._fullLayout;if(f){var h=(s=(o=f.title)==null?void 0:o.subtitle)==null?void 0:s.text;return h===((l=f._dfltTitle)==null?void 0:l.subtitle)?void 0:h}return(c=(u=(n=a.layout)==null?void 0:n.title)==null?void 0:u.subtitle)==null?void 0:c.text};function i(a){for(var o=a.length,s=new ArrayBuffer(o),l=new Uint8Array(s),n=0;n<o;n++)l[n]=a.charCodeAt(n);return s}e.IMAGE_URL_PREFIX=/^data:image\/\w+;base64,/}}),Rw=de({"src/snapshot/tosvg.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=ta(),s=Oh(),l=/"/g,n="TOBESTRIPPED",u=new RegExp(`("${n})|(${n}")|("${n})|(${n}")`,"g"),c=["&","&","&",""",""",""","'","'","'"],f=["<","<","<"],h=[">",">",">"];function d(g){let m=t.select("body").append("div").style({display:"none"}).html(""),y=g.replace(/(&[^;]*;)/gi,_=>{let v=_.toLowerCase();return c.includes(v)?_:f.includes(v)?"<":h.includes(v)?">":_.includes("<")||_.includes(">")?"":m.html(_).text()});return m.remove(),y}function p(g){return g.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&")}r.exports=function(m,y,_){var v=m._fullLayout,x=v._paper,S=v._toppaper,M=v.width,C=v.height,w;x.insert("rect",":first-child").call(a.setRect,0,0,M,C).call(o.fill,v.paper_bgcolor);var k=v._basePlotModules||[];for(w=0;w<k.length;w++){var A=k[w];A.toSVG&&A.toSVG(m)}if(S){var b=S.node().childNodes,E=Array.prototype.slice.call(b);for(w=0;w<E.length;w++){var T=E[w];T.childNodes.length&&x.node().appendChild(T)}}v._draggers&&v._draggers.remove(),x.node().style.background="",x.selectAll("text").attr({"data-unformatted":null,"data-math":null}).each(function(){var D=t.select(this);if(this.style.visibility==="hidden"||this.style.display==="none"){D.remove();return}else D.style({visibility:null,display:null});var R=this.style.fontFamily;R&&R.indexOf('"')!==-1&&D.style("font-family",R.replace(l,n));var P=this.style.fontWeight;P&&(P==="normal"||P==="400")&&D.style("font-weight",void 0);var z=this.style.fontStyle;z&&z==="normal"&&D.style("font-style",void 0);var I=this.style.fontVariant;I&&I==="normal"&&D.style("font-variant",void 0)}),x.selectAll(".gradient_filled,.pattern_filled").each(function(){var D=t.select(this),R=this.style.fill;R&&R.indexOf("url(")!==-1&&D.style("fill",R.replace(l,n));var P=this.style.stroke;P&&P.indexOf("url(")!==-1&&D.style("stroke",P.replace(l,n))}),(y==="pdf"||y==="eps")&&x.selectAll("#MathJax_SVG_glyphs path").attr("stroke-width",0),y==="svg"&&_&&(x.attr("width",_*M),x.attr("height",_*C),x.attr("viewBox","0 0 "+M+" "+C));var F=new window.XMLSerializer().serializeToString(x.node());return F=d(F),F=p(F),F=F.replace(u,"'"),F}}}),zw=de({"src/snapshot/svgtoimg.js"(e,r){"use strict";var t=Qt(),i=yv().EventEmitter,a=Mp();function o(s){var l=s.emitter||new i,n=new Promise(function(u,c){var f=window.Image,h=s.svg,d=s.format||"png",p=s.canvas,g=s.scale||1,m=s.width||300,y=s.height||150,_=g*m,v=g*y,x=p.getContext("2d",{willReadFrequently:!0}),S=new f,M,C;d==="svg"||t.isSafari()?C=a.encodeSVG(h):(M=a.createBlob(h,"svg"),C=a.createObjectURL(M)),p.width=_,p.height=v,S.onload=function(){var w;switch(M=null,a.revokeObjectURL(C),d!=="svg"&&x.drawImage(S,0,0,_,v),d){case"jpeg":w=p.toDataURL("image/jpeg");break;case"png":w=p.toDataURL("image/png");break;case"webp":w=p.toDataURL("image/webp");break;case"svg":w=C;break;default:var k="Image format is not jpeg, png, svg or webp.";if(c(new Error(k)),!s.promise)return l.emit("error",k)}u(w),s.promise||l.emit("success",w)},S.onerror=function(w){if(M=null,a.revokeObjectURL(C),c(w),!s.promise)return l.emit("error",w)},S.src=C});return s.promise?n:l}r.exports=o}}),tk=de({"src/plot_api/to_image.js"(e,r){"use strict";var t=da(),i=Iw(),a=Es(),o=Qt(),s=Mp(),l=Rw(),n=zw(),u=_i().version,c={format:{valType:"enumerated",values:["png","jpeg","webp","svg","full-json"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}};function f(h,d){d=d||{};var p,g,m,y;o.isPlainObject(h)?(p=h.data||[],g=h.layout||{},m=h.config||{},y={}):(h=o.getGraphDiv(h),p=o.extendDeep([],h.data),g=o.extendDeep({},h.layout),m=h._context,y=h._fullLayout||{});function _(z){return!(z in d)||o.validate(d[z],c[z])}if(!_("width")&&d.width!==null||!_("height")&&d.height!==null)throw new Error("Height and width should be pixel values.");if(!_("format"))throw new Error("Export format is not "+o.join2(c.format.values,", "," or ")+".");var v={};function x(z,I){return o.coerce(d,v,c,z,I)}var S=x("format"),M=x("width"),C=x("height"),w=x("scale"),k=x("setBackground"),A=x("imageDataOnly"),b=document.createElement("div");b.style.position="absolute",b.style.left="-5000px",document.body.appendChild(b);var E=o.extendFlat({},g);M?E.width=M:d.width===null&&t(y.width)&&(E.width=y.width),C?E.height=C:d.height===null&&t(y.height)&&(E.height=y.height);var T=o.extendFlat({},m,{_exportedPlot:!0,staticPlot:!0,setBackground:k}),F=s.getRedrawFunc(b);function D(){return new Promise(function(z){setTimeout(z,s.getDelay(b._fullLayout))})}function R(){return new Promise(function(z,I){var L=l(b,S,w),B=b._fullLayout.width,O=b._fullLayout.height;function G(){i.purge(b),document.body.removeChild(b)}if(S==="full-json"){var W=a.graphJson(b,!1,"object",!0,!0);return W.version=u,W=JSON.stringify(W),G(),z(A?W:s.encodeJSON(W))}if(G(),S==="svg")return z(A?L:s.encodeSVG(L));var X=document.createElement("canvas");X.id=o.randstr(),n({format:S,width:B,height:O,scale:w,canvas:X,svg:L,promise:!0}).then(z).catch(I)})}function P(z){return A?z.replace(s.IMAGE_URL_PREFIX,""):z}return new Promise(function(z,I){i.newPlot(b,p,E,T).then(F).then(D).then(R).then(function(L){z(P(L))}).catch(function(L){I(L)})})}r.exports=f}}),Yq=de({"src/plot_api/validate.js"(e,r){"use strict";var t=Qt(),i=Es(),a=c1(),o=Na().dfltConfig,s=t.isPlainObject,l=Array.isArray,n=t.isArrayOrTypedArray;r.exports=function(x,S){x===void 0&&(x=[]),S===void 0&&(S={});var M=a.get(),C=[],w={_context:t.extendFlat({},o)},k,A;l(x)?(w.data=t.extendDeep([],x),k=x):(w.data=[],k=[],C.push(d("array","data"))),s(S)?(w.layout=t.extendDeep({},S),A=S):(w.layout={},A={},arguments.length>1&&C.push(d("object","layout"))),i.supplyDefaults(w);for(var b=w._fullData,E=k.length,T=0;T<E;T++){var F=k[T],D=["data",T];if(!s(F)){C.push(d("object",D));continue}var R=b[T],P=R.type,z=M.traces[P].attributes;z.type={valType:"enumerated",values:[P]},R.visible===!1&&F.visible!==!1&&C.push(d("invisible",D)),u(F,R,z,C,D)}var I=w._fullLayout,L=c(M,b);return u(A,I,L,C,"layout"),C.length===0?void 0:C};function u(v,x,S,M,C,w){w=w||[];for(var k=Object.keys(v),A=0;A<k.length;A++){var b=k[A],E=w.slice();E.push(b);var T=v[b],F=x[b],D=g(S,b),R=(D||{}).valType,P=R==="info_array",z=R==="colorscale",I=(D||{}).items;if(!p(S,b))M.push(d("schema",C,E));else if(s(T)&&s(F)&&R!=="any")u(T,F,D,M,C,E);else if(P&&l(T)){T.length>F.length&&M.push(d("unused",C,E.concat(F.length)));var L=F.length,B=Array.isArray(I);B&&(L=Math.min(L,I.length));var O,G,W,X,Z;if(D.dimensions===2)for(G=0;G<L;G++)if(l(T[G])){T[G].length>F[G].length&&M.push(d("unused",C,E.concat(G,F[G].length)));var J=F[G].length;for(O=0;O<(B?Math.min(J,I[G].length):J);O++)W=B?I[G][O]:I,X=T[G][O],Z=F[G][O],t.validate(X,W)?Z!==X&&Z!==+X&&M.push(d("dynamic",C,E.concat(G,O),X,Z)):M.push(d("value",C,E.concat(G,O),X))}else M.push(d("array",C,E.concat(G),T[G]));else for(G=0;G<L;G++)W=B?I[G]:I,X=T[G],Z=F[G],t.validate(X,W)?Z!==X&&Z!==+X&&M.push(d("dynamic",C,E.concat(G),X,Z)):M.push(d("value",C,E.concat(G),X))}else if(D.items&&!P&&l(T)){var N=I[Object.keys(I)[0]],H=[],$,U;for($=0;$<F.length;$++){var V=F[$]._index||$;if(U=E.slice(),U.push(V),s(T[V])&&s(F[$])){H.push(V);var j=T[V],q=F[$];s(j)&&j.visible!==!1&&q.visible===!1?M.push(d("invisible",C,U)):u(j,q,N,M,C,U)}}for($=0;$<T.length;$++)U=E.slice(),U.push($),s(T[$])?H.indexOf($)===-1&&M.push(d("unused",C,U)):M.push(d("object",C,U,T[$]))}else!s(T)&&s(F)?M.push(d("object",C,E,T)):!n(T)&&n(F)&&!P&&!z?M.push(d("array",C,E,T)):b in x?t.validate(T,D)?D.valType==="enumerated"&&(D.coerceNumber&&T!==+F||!n(T)&&T!==F||String(T)!==String(F))&&M.push(d("dynamic",C,E,T,F)):M.push(d("value",C,E,T)):M.push(d("unused",C,E,T))}return M}function c(v,x){for(var S=v.layout.layoutAttributes,M=0;M<x.length;M++){var C=x[M],w=v.traces[C.type],k=w.layoutAttributes;k&&(C.subplot?t.extendFlat(S[w.attributes.subplot.dflt],k):t.extendFlat(S,k))}return S}var f={object:function(v,x){var S;return v==="layout"&&x===""?S="The layout argument":v[0]==="data"&&x===""?S="Trace "+v[1]+" in the data argument":S=h(v)+"key "+x,S+" must be linked to an object container"},array:function(v,x){var S;return v==="data"?S="The data argument":S=h(v)+"key "+x,S+" must be linked to an array container"},schema:function(v,x){return h(v)+"key "+x+" is not part of the schema"},unused:function(v,x,S){var M=s(S)?"container":"key";return h(v)+M+" "+x+" did not get coerced"},dynamic:function(v,x,S,M){return[h(v)+"key",x,"(set to '"+S+"')","got reset to","'"+M+"'","during defaults."].join(" ")},invisible:function(v,x){return(x?h(v)+"item "+x:"Trace "+v[1])+" got defaulted to be not visible"},value:function(v,x,S){return[h(v)+"key "+x,"is set to an invalid value ("+S+")"].join(" ")}};function h(v){return l(v)?"In data trace "+v[1]+", ":"In "+v+", "}function d(v,x,S,M,C){S=S||"";var w,k;l(x)?(w=x[0],k=x[1]):(w=x,k=null);var A=_(S),b=f[v](x,A,M,C);return t.log(b),{code:v,container:w,trace:k,path:S,astr:A,msg:b}}function p(v,x){var S=y(x),M=S.keyMinusId,C=S.id;return M in v&&v[M]._isSubplotObj&&C?!0:x in v}function g(v,x){if(x in v)return v[x];var S=y(x);return v[S.keyMinusId]}var m=t.counterRegex("([a-z]+)");function y(v){var x=v.match(m);return{keyMinusId:x&&x[1],id:x&&x[2]}}function _(v){if(!l(v))return String(v);for(var x="",S=0;S<v.length;S++){var M=v[S];typeof M=="number"?x=x.slice(0,-1)+"["+M+"]":x+=M,S<v.length-1&&(x+=".")}return x}}}),Xq=de({"src/snapshot/filesaver.js"(e,r){"use strict";var t=Qt(),i=Mp();function a(o,s,l){var n=document.createElement("a"),u="download"in n,c=new Promise(function(f,h){var d,p;if(u)return d=i.createBlob(o,l),p=i.createObjectURL(d),n.href=p,n.download=s,document.body.appendChild(n),n.click(),document.body.removeChild(n),i.revokeObjectURL(p),d=null,f(s);if(t.isSafari()){var g=l==="svg"?",":";base64,";return i.octetStream(g+encodeURIComponent(o)),f(s)}h(new Error("download error"))});return c}r.exports=a}}),rk=de({"src/snapshot/download.js"(e,r){"use strict";var t=Qt(),i=Zo(),a=tk(),o=Xq(),s=Mp(),l=40;function n(u,c){var f;return t.isPlainObject(u)||(f=t.getGraphDiv(u)),c=c||{},c.format=c.format||"png",c.width=c.width||null,c.height=c.height||null,c.imageDataOnly=!0,new Promise(function(h,d){f&&f._snapshotInProgress&&d(new Error("Image capture already in progress.")),f&&(f._snapshotInProgress=!0);var p=a(u,c),g=c.filename||u.fn;if(!g){let y=s.getPlotTitle(u);if(y&&!i.matchTex(y))g=t.slugify(y,l);else{let _=s.getPlotSubtitle(u);_&&!i.matchTex(_)&&(g=t.slugify(_,l))}}var m=g||"plot-image";m+="."+c.format.replace("-","."),p.then(function(y){return f&&(f._snapshotInProgress=!1),o(y,m,c.format)}).then(function(y){h(y)}).catch(function(y){f&&(f._snapshotInProgress=!1),d(y)})})}r.exports=n}}),Zq=de({"src/plot_api/template_api.js"(e){"use strict";var r=Qt(),t=r.isPlainObject,i=c1(),a=Es(),o=ri(),s=Ro(),l=Na().dfltConfig;e.makeTemplate=function(m){m=r.isPlainObject(m)?m:r.getGraphDiv(m),m=r.extendDeep({_context:l},{data:m.data,layout:m.layout}),a.supplyDefaults(m);var y=m.data||[],_=m.layout||{};_._basePlotModules=m._fullLayout._basePlotModules,_._modules=m._fullLayout._modules;var v={data:{},layout:{}};y.forEach(function(T){var F={};c(T,F,h.bind(null,T));var D=r.coerce(T,{},o,"type"),R=v.data[D];R||(R=v.data[D]=[]),R.push(F)}),c(_,v.layout,f.bind(null,_)),delete v.layout.template;var x=_.template;if(t(x)){var S=x.layout,M,C,w,k,A,b;t(S)&&n(S,v.layout);var E=x.data;if(t(E)){for(C in v.data)if(w=E[C],Array.isArray(w)){for(A=v.data[C],b=A.length,k=w.length,M=0;M<b;M++)n(w[M%k],A[M]);for(M=b;M<k;M++)A.push(r.extendDeep({},w[M]))}for(C in E)C in v.data||(v.data[C]=r.extendDeep([],E[C]))}}return v};function n(m,y){m=r.extendDeep({},m);var _=Object.keys(m).sort(),v,x;function S(A,b,E){if(t(b)&&t(A))n(A,b);else if(Array.isArray(b)&&Array.isArray(A)){var T=s.arrayTemplater({_template:m},E);for(x=0;x<b.length;x++){var F=b[x],D=T.newItem(F)._template;D&&n(D,F)}var R=T.defaultItems();for(x=0;x<R.length;x++)b.push(R[x]._template);for(x=0;x<b.length;x++)delete b[x].templateitemname}}for(v=0;v<_.length;v++){var M=_[v],C=m[M];if(M in y?S(C,y[M],M):y[M]=C,u(M)===M)for(var w in y){var k=u(w);w!==k&&k===M&&!(w in m)&&S(C,y[w],M)}}}function u(m){return m.replace(/[0-9]+$/,"")}function c(m,y,_,v,x){var S=x&&_(x);for(var M in m){var C=m[M],w=d(m,M,v),k=d(m,M,x),A=_(k);if(!A){var b=u(M);b!==M&&(k=d(m,b,x),A=_(k))}if(!(S&&S===A)&&!(!A||A._noTemplating||A.valType==="data_array"||A.arrayOk&&Array.isArray(C)))if(!A.valType&&t(C))c(C,y,_,w,k);else if(A._isLinkedToArray&&Array.isArray(C))for(var E=!1,T=0,F={},D=0;D<C.length;D++){var R=C[D];if(t(R)){var P=R.name;if(P)F[P]||(c(R,y,_,d(C,T,w),d(C,T,k)),T++,F[P]=1);else if(!E){var z=s.arrayDefaultKey(M),I=d(m,z,v),L=d(C,T,w);c(R,y,_,L,d(C,T,k));var B=r.nestedProperty(y,L),O=r.nestedProperty(y,I);O.set(B.get()),B.set(null),E=!0}}}else{var G=r.nestedProperty(y,w);G.set(C)}}}function f(m,y){return i.getLayoutValObject(m,r.nestedProperty({},y).parts)}function h(m,y){return i.getTraceValObject(m,r.nestedProperty({},y).parts)}function d(m,y,_){var v;return _?Array.isArray(m)?v=_+"["+y+"]":v=_+"."+y:v=y,v}e.validateTemplate=function(m,y){var _=r.extendDeep({},{_context:l,data:m.data,layout:m.layout}),v=_.layout||{};t(y)||(y=v.template||{});var x=y.layout,S=y.data,M=[];_.layout=v,_.layout.template=y,a.supplyDefaults(_);var C=_._fullLayout,w=_._fullData,k={};function A(I,L){for(var B in I)if(B.charAt(0)!=="_"&&t(I[B])){var O=u(B),G=[],W;for(W=0;W<L.length;W++)G.push(d(I,B,L[W])),O!==B&&G.push(d(I,O,L[W]));for(W=0;W<G.length;W++)k[G[W]]=1;A(I[B],G)}}function b(I,L){for(var B in I)if(B.indexOf("defaults")===-1&&t(I[B])){var O=d(I,B,L);k[O]?b(I[B],O):M.push({code:"unused",path:O})}}if(t(x)?(A(C,["layout"]),b(x,"layout")):M.push({code:"layout"}),!t(S))M.push({code:"data"});else{for(var E={},T,F=0;F<w.length;F++){var D=w[F];T=D.type,E[T]=(E[T]||0)+1,D._template||M.push({code:"missing",index:D.index,traceType:T})}for(T in S){var R=S[T].length,P=E[T]||0;R>P?M.push({code:"unused",traceType:T,templateCount:R,dataCount:P}):P>R&&M.push({code:"reused",traceType:T,templateCount:R,dataCount:P})}}function z(I,L){for(var B in I)if(B.charAt(0)!=="_"){var O=I[B],G=d(I,B,L);t(O)?(Array.isArray(I)&&O._template===!1&&O.templateitemname&&M.push({code:"missing",path:G,templateitemname:O.templateitemname}),z(O,G)):Array.isArray(O)&&p(O)&&z(O,G)}}if(z({data:w,layout:C},""),M.length)return M.map(g)};function p(m){for(var y=0;y<m.length;y++)if(t(m[y]))return!0}function g(m){var y;switch(m.code){case"data":y="The template has no key data.";break;case"layout":y="The template has no key layout.";break;case"missing":m.path?y="There are no templates for item "+m.path+" with name "+m.templateitemname:y="There are no templates for trace "+m.index+", of type "+m.traceType+".";break;case"unused":m.path?y="The template item at "+m.path+" was not used in constructing the plot.":m.dataCount?y="Some of the templates of type "+m.traceType+" were not used. The template has "+m.templateCount+" traces, the data only has "+m.dataCount+" of this type.":y="The template has "+m.templateCount+" traces of type "+m.traceType+" but there are none in the data.";break;case"reused":y="Some of the templates of type "+m.traceType+" were used more than once. The template has "+m.templateCount+" traces, the data has "+m.dataCount+" of this type.";break}return m.msg=y,m}}}),Kq=de({"src/plot_api/index.js"(e){"use strict";var r=Iw();e._doPlot=r._doPlot,e.newPlot=r.newPlot,e.restyle=r.restyle,e.relayout=r.relayout,e.redraw=r.redraw,e.update=r.update,e._guiRestyle=r._guiRestyle,e._guiRelayout=r._guiRelayout,e._guiUpdate=r._guiUpdate,e._storeDirectGUIEdit=r._storeDirectGUIEdit,e.react=r.react,e.extendTraces=r.extendTraces,e.prependTraces=r.prependTraces,e.addTraces=r.addTraces,e.deleteTraces=r.deleteTraces,e.moveTraces=r.moveTraces,e.purge=r.purge,e.addFrames=r.addFrames,e.deleteFrames=r.deleteFrames,e.animate=r.animate,e.setPlotConfig=r.setPlotConfig;var t=Ty().getGraphDiv,i=Lw().eraseActiveShape;e.deleteActiveShape=function(o){return i(t(o))},e.toImage=tk(),e.validate=Yq(),e.downloadImage=rk();var a=Zq();e.makeTemplate=a.makeTemplate,e.validateTemplate=a.validateTemplate}}),wv=de({"src/traces/scatter/xy_defaults.js"(e,r){"use strict";var t=Qt(),i=Ma();r.exports=function(o,s,l,n){var u=n("x"),c=n("y"),f,h=i.getComponentMethod("calendars","handleTraceDefaults");if(h(o,s,["x","y"],l),u){var d=t.minRowLength(u);c?f=Math.min(d,t.minRowLength(c)):(f=d,n("y0"),n("dy"))}else{if(!c)return 0;f=t.minRowLength(c),n("x0"),n("dx")}return s._length=f,f}}}),gd=de({"src/traces/scatter/period_defaults.js"(e,r){"use strict";var t=Qt().dateTick0,i=cn(),a=i.ONEWEEK;function o(s,l){return s%a===0?t(l,1):t(l,0)}r.exports=function(l,n,u,c,f){if(f||(f={x:!0,y:!0}),f.x){var h=c("xperiod");h&&(c("xperiod0",o(h,n.xcalendar)),c("xperiodalignment"))}if(f.y){var d=c("yperiod");d&&(c("yperiod0",o(d,n.ycalendar)),c("yperiodalignment"))}}}}),Jq=de({"src/traces/scatter/stack_defaults.js"(e,r){"use strict";var t=["orientation","groupnorm","stackgaps"];r.exports=function(a,o,s,l){var n=s._scatterStackOpts,u=l("stackgroup");if(u){var c=o.xaxis+o.yaxis,f=n[c];f||(f=n[c]={});var h=f[u],d=!1;h?h.traces.push(o):(h=f[u]={traceIndices:[],traces:[o]},d=!0);for(var p={orientation:o.x&&!o.y?"h":"v"},g=0;g<t.length;g++){var m=t[g],y=m+"Found";if(!h[y]){var _=a[m]!==void 0,v=m==="orientation";if((_||d)&&(h[m]=l(m,p[m]),v&&(h.fillDflt=h[m]==="h"?"tonextx":"tonexty"),_&&(h[y]=!0,!d&&(delete h.traces[0][m],v))))for(var x=0;x<h.traces.length-1;x++){var S=h.traces[x];S._input.fill!==S.fill&&(S.fill=h.fillDflt)}}}return h}}}}),Nh=de({"src/traces/scatter/marker_defaults.js"(e,r){"use strict";var t=ta(),i=Wu().hasColorscale,a=hu(),o=bs();r.exports=function(l,n,u,c,f,h={}){var d=o.isBubble(l),p=(l.line||{}).color,g;if(p&&(u=p),f("marker.symbol"),f("marker.opacity",d?.7:1),f("marker.size"),h.noAngle||(f("marker.angle"),h.noAngleRef||f("marker.angleref"),h.noStandOff||f("marker.standoff")),f("marker.color",u),i(l,"marker")&&a(l,n,c,f,{prefix:"marker.",cLetter:"c"}),h.noSelect||(f("selected.marker.color"),f("unselected.marker.color"),f("selected.marker.size"),f("unselected.marker.size")),h.noLine||(p&&!Array.isArray(p)&&n.marker.color!==p?g=p:d?g=t.background:g=t.defaultLine,f("marker.line.color",g),i(l,"marker.line")&&a(l,n,c,f,{prefix:"marker.line.",cLetter:"c"}),f("marker.line.width",d?1:0),h.noLineDash||f("marker.line.dash")),d&&(f("marker.sizeref"),f("marker.sizemin"),f("marker.sizemode")),h.gradient){var m=f("marker.gradient.type");m!=="none"&&f("marker.gradient.color")}}}}),yd=de({"src/traces/scatter/line_defaults.js"(e,r){"use strict";var t=Qt().isArrayOrTypedArray,i=Wu().hasColorscale,a=hu();r.exports=function(s,l,n,u,c,f){f||(f={});var h=(s.marker||{}).color;if(h&&h._inputArray&&(h=h._inputArray),c("line.color",n),i(s,"line"))a(s,l,u,c,{prefix:"line.",cLetter:"c"});else{var d=(t(h)?!1:h)||n;c("line.color",d)}c("line.width"),f.noDash||c("line.dash"),f.backoff&&c("line.backoff")}}}),p1=de({"src/traces/scatter/line_shape_defaults.js"(e,r){"use strict";r.exports=function(i,a,o){var s=o("line.shape");s==="spline"&&o("line.smoothing")}}}),_d=de({"src/traces/scatter/text_defaults.js"(e,r){"use strict";var t=Qt();r.exports=function(i,a,o,s,l){l=l||{},s("textposition"),t.coerceFont(s,"textfont",l.font||o.font,l),l.noSelect||(s("selected.textfont.color"),s("unselected.textfont.color"))}}}),Jd=de({"src/traces/scatter/fillcolor_defaults.js"(e,r){"use strict";var t=ta(),i=Qt().isArrayOrTypedArray;function a(o){for(var s=t.interpolate(o[0][1],o[1][1],.5),l=2;l<o.length;l++){var n=t.interpolate(o[l-1][1],o[l][1],.5);s=t.interpolate(s,n,o[l-1][0]/o[l][0])}return s}r.exports=function(s,l,n,u,c){c||(c={});var f=!1;if(l.marker){var h=l.marker.color,d=(l.marker.line||{}).color;h&&!i(h)?f=h:d&&!i(d)&&(f=d)}var p;if(c.moduleHasFillgradient){var g=u("fillgradient.type");if(g!=="none"){u("fillgradient.start"),u("fillgradient.stop");var m=u("fillgradient.colorscale");m&&(p=a(m))}}u("fillcolor",t.addOpacity((l.line||{}).color||f||p||n,.5))}}}),Qq=de({"src/traces/scatter/defaults.js"(e,r){"use strict";var t=Qt(),i=Ma(),a=tl(),o=Zd(),s=bs(),l=wv(),n=gd(),u=Jq(),c=Nh(),f=yd(),h=p1(),d=_d(),p=Jd(),g=Qt().coercePattern;r.exports=function(y,_,v,x){function S(T,F){return t.coerce(y,_,a,T,F)}var M=l(y,_,x,S);if(M||(_.visible=!1),!!_.visible){n(y,_,x,S),S("xhoverformat"),S("yhoverformat"),S("zorder");var C=u(y,_,x,S);x.scattermode==="group"&&_.orientation===void 0&&S("orientation","v");var w=!C&&M<o.PTS_LINESONLY?"lines+markers":"lines";S("text"),S("hovertext"),S("mode",w),s.hasMarkers(_)&&c(y,_,v,x,S,{gradient:!0}),s.hasLines(_)&&(f(y,_,v,x,S,{backoff:!0}),h(y,_,S),S("connectgaps"),S("line.simplify")),s.hasText(_)&&(S("texttemplate"),S("texttemplatefallback"),d(y,_,x,S));var k=[];(s.hasMarkers(_)||s.hasText(_))&&(S("cliponaxis"),S("marker.maxdisplayed"),k.push("points")),S("fill",C?C.fillDflt:"none"),_.fill!=="none"&&(p(y,_,v,S,{moduleHasFillgradient:!0}),s.hasLines(_)||h(y,_,S),g(S,"fillpattern",_.fillcolor,!1));var A=(_.line||{}).color,b=(_.marker||{}).color;(_.fill==="tonext"||_.fill==="toself")&&k.push("fills"),S("hoveron",k.join("+")||"points"),_.hoveron!=="fills"&&(S("hovertemplate"),S("hovertemplatefallback"));var E=i.getComponentMethod("errorbars","supplyDefaults");E(y,_,A||b||v,{axis:"y"}),E(y,_,A||b||v,{axis:"x",inherit:"y"}),t.coerceSelectionMarkerOpacity(_,S)}}}}),Tv=de({"src/traces/scatter/grouping_defaults.js"(e,r){"use strict";var t=bv().getAxisGroup;r.exports=function(a,o,s,l,n){var u=o.orientation,c=o[{v:"x",h:"y"}[u]+"axis"],f=t(s,c)+u,h=s._alignmentOpts||{},d=l("alignmentgroup"),p=h[f];p||(p=h[f]={});var g=p[d];g?g.traces.push(o):g=p[d]={traces:[o],alignmentIndex:Object.keys(p).length,offsetGroups:{}};var m=l("offsetgroup")||"",y=g.offsetGroups,_=y[m];o._offsetIndex=0,(n!=="group"||m)&&(_||(_=y[m]={offsetIndex:Object.keys(y).length}),o._offsetIndex=_.offsetIndex)}}}),ik=de({"src/traces/scatter/cross_trace_defaults.js"(e,r){"use strict";var t=Qt(),i=Tv(),a=tl();r.exports=function(s,l){var n,u,c,f=l.scattermode;function h(y){return t.coerce(u._input,u,a,y)}if(l.scattermode==="group")for(c=0;c<s.length;c++)u=s[c],u.type==="scatter"&&(n=u._input,i(n,u,l,h,f));for(c=0;c<s.length;c++){var d=s[c];if(d.type==="scatter"){var p=d.fill;if(!(p==="none"||p==="toself")&&(d.opacity=void 0,p==="tonexty"||p==="tonextx"))for(var g=c-1;g>=0;g--){var m=s[g];if(m.type==="scatter"&&m.xaxis===d.xaxis&&m.yaxis===d.yaxis){m.opacity=void 0;break}}}}}}}),eV=de({"src/traces/scatter/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=Tw();r.exports=function(a,o){function s(n,u){return t.coerce(a,o,i,n,u)}var l=o.barmode==="group";o.scattermode==="group"&&s("scattergap",l?o.bargap:.2)}}}),xd=de({"src/plots/cartesian/align_period.js"(e,r){"use strict";var t=da(),i=Qt(),a=i.dateTime2ms,o=i.incrementMonth,s=cn(),l=s.ONEAVGMONTH;r.exports=function(u,c,f,h){if(c.type!=="date")return{vals:h};var d=u[f+"periodalignment"];if(!d)return{vals:h};var p=u[f+"period"],g;if(t(p)){if(p=+p,p<=0)return{vals:h}}else if(typeof p=="string"&&p.charAt(0)==="M"){var m=+p.substring(1);if(m>0&&Math.round(m)===m)g=m;else return{vals:h}}for(var y=c.calendar,_=d==="start",v=d==="end",x=u[f+"period0"],S=a(x,y)||0,M=[],C=[],w=[],k=h.length,A=0;A<k;A++){var b=h[A],E,T,F;if(g){for(E=Math.round((b-S)/(g*l)),F=o(S,g*E,y);F>b;)F=o(F,-g,y);for(;F<=b;)F=o(F,g,y);T=o(F,-g,y)}else{for(E=Math.round((b-S)/p),F=S+E*p;F>b;)F-=p;for(;F<=b;)F+=p;T=F-p}M[A]=_?T:v?F:(T+F)/2,C[A]=T,w[A]=F}return{vals:M,starts:C,ends:w}}}}),jh=de({"src/traces/scatter/colorscale_calc.js"(e,r){"use strict";var t=Wu().hasColorscale,i=hc(),a=bs();r.exports=function(s,l){a.hasLines(l)&&t(l,"line")&&i(s,l,{vals:l.line.color,containerStr:"line",cLetter:"c"}),a.hasMarkers(l)&&(t(l,"marker")&&i(s,l,{vals:l.marker.color,containerStr:"marker",cLetter:"c"}),t(l,"marker.line")&&i(s,l,{vals:l.marker.line.color,containerStr:"marker.line",cLetter:"c"}))}}}),Qd=de({"src/traces/scatter/arrays_to_calcdata.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){for(var s=0;s<a.length;s++)a[s].i=s;t.mergeArray(o.text,a,"tx"),t.mergeArray(o.texttemplate,a,"txt"),t.mergeArray(o.hovertext,a,"htx"),t.mergeArray(o.customdata,a,"data"),t.mergeArray(o.textposition,a,"tp"),o.textfont&&(t.mergeArrayCastPositive(o.textfont.size,a,"ts"),t.mergeArray(o.textfont.color,a,"tc"),t.mergeArray(o.textfont.family,a,"tf"),t.mergeArray(o.textfont.weight,a,"tw"),t.mergeArray(o.textfont.style,a,"ty"),t.mergeArray(o.textfont.variant,a,"tv"),t.mergeArray(o.textfont.textcase,a,"tC"),t.mergeArray(o.textfont.lineposition,a,"tE"),t.mergeArray(o.textfont.shadow,a,"tS"));var l=o.marker;if(l){t.mergeArrayCastPositive(l.size,a,"ms"),t.mergeArrayCastPositive(l.opacity,a,"mo"),t.mergeArray(l.symbol,a,"mx"),t.mergeArray(l.angle,a,"ma"),t.mergeArray(l.standoff,a,"mf"),t.mergeArray(l.color,a,"mc");var n=l.line;l.line&&(t.mergeArray(n.color,a,"mlc"),t.mergeArrayCastPositive(n.width,a,"mlw"),t.mergeArray(n.dash,a,"mld"));var u=l.gradient;u&&u.type!=="none"&&(t.mergeArray(u.type,a,"mgt"),t.mergeArray(u.color,a,"mgc"))}}}}),nh=de({"src/traces/scatter/calc_selection.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){t.isArrayOrTypedArray(o.selectedpoints)&&t.tagSelected(a,o)}}}),Uh=de({"src/traces/scatter/calc.js"(e,r){"use strict";var t=da(),i=Qt(),a=nn(),o=xd(),s=cn().BADNUM,l=bs(),n=jh(),u=Qd(),c=nh();function f(y,_){var v=y._fullLayout,x=_._xA=a.getFromId(y,_.xaxis||"x","x"),S=_._yA=a.getFromId(y,_.yaxis||"y","y"),M=x.makeCalcdata(_,"x"),C=S.makeCalcdata(_,"y"),w=o(_,x,"x",M),k=o(_,S,"y",C),A=w.vals,b=k.vals,E=_._length,T=new Array(E),F=_.ids,D=m(_,v,x,S),R=!1,P,z,I,L,B,O;p(v,_);var G="x",W="y",X;if(D)i.pushUnique(D.traceIndices,_.index),P=D.orientation==="v",P?(W="s",X="x"):(G="s",X="y"),B=D.stackgaps==="interpolate";else{var Z=d(_,E);h(y,_,x,S,A,b,Z)}var J=!!_.xperiodalignment,N=!!_.yperiodalignment;for(z=0;z<E;z++){var H=T[z]={},$=t(A[z]),U=t(b[z]);$&&U?(H[G]=A[z],H[W]=b[z],J&&(H.orig_x=M[z],H.xEnd=w.ends[z],H.xStart=w.starts[z]),N&&(H.orig_y=C[z],H.yEnd=k.ends[z],H.yStart=k.starts[z])):D&&(P?$:U)?(H[X]=P?A[z]:b[z],H.gap=!0,B?(H.s=s,R=!0):H.s=0):H[G]=H[W]=s,F&&(H.id=String(F[z]))}if(u(T,_),n(y,_),c(T,_),D){for(z=0;z<T.length;)T[z][X]===s?T.splice(z,1):z++;if(i.sort(T,function(Y,K){return Y[X]-K[X]||Y.i-K.i}),R){for(z=0;z<T.length-1&&T[z].gap;)z++;for(O=T[z].s,O||(O=T[z].s=0),I=0;I<z;I++)T[I].s=O;for(L=T.length-1;L>z&&T[L].gap;)L--;for(O=T[L].s,I=T.length-1;I>L;I--)T[I].s=O;for(;z<L;)if(z++,T[z].gap){for(I=z+1;T[I].gap;)I++;for(var V=T[z-1][X],j=T[z-1].s,q=(T[I].s-j)/(T[I][X]-V);z<I;)T[z].s=j+(T[z][X]-V)*q,z++}}}return T}function h(y,_,v,x,S,M,C){var w=_._length,k=y._fullLayout,A=v._id,b=x._id,E=k._firstScatter[g(_)]===_.uid,T=(m(_,k,v,x)||{}).orientation,F=_.fill;v._minDtick=0,x._minDtick=0;var D={padded:!0},R={padded:!0};C&&(D.ppad=R.ppad=C);var P=w<2||S[0]!==S[w-1]||M[0]!==M[w-1];P&&(F==="tozerox"||F==="tonextx"&&(E||T==="h"))?D.tozero=!0:!(_.error_y||{}).visible&&(F==="tonexty"||F==="tozeroy"||!l.hasMarkers(_)&&!l.hasText(_))&&(D.padded=!1,D.ppad=0),P&&(F==="tozeroy"||F==="tonexty"&&(E||T==="v"))?R.tozero=!0:(F==="tonextx"||F==="tozerox")&&(R.padded=!1),A&&(_._extremes[A]=a.findExtremes(v,S,D)),b&&(_._extremes[b]=a.findExtremes(x,M,R))}function d(y,_){if(l.hasMarkers(y)){var v=y.marker,x=1.6*(y.marker.sizeref||1),S;if(y.marker.sizemode==="area"?S=function(A){return Math.max(Math.sqrt((A||0)/x),3)}:S=function(A){return Math.max((A||0)/x,3)},i.isArrayOrTypedArray(v.size)){var M={type:"linear"};a.setConvert(M);for(var C=M.makeCalcdata(y.marker,"size"),w=new Array(_),k=0;k<_;k++)w[k]=S(C[k]);return w}else return S(v.size)}}function p(y,_){var v=g(_),x=y._firstScatter;x[v]||(x[v]=_.uid)}function g(y){var _=y.stackgroup;return y.xaxis+y.yaxis+y.type+(_?"-"+_:"")}function m(y,_,v,x){var S=y.stackgroup;if(S){var M=_._scatterStackOpts[v._id+x._id][S],C=M.orientation==="v"?x:v;if(C.type==="linear"||C.type==="log")return M}}r.exports={calc:f,calcMarkerSize:d,calcAxisExpansion:h,setFirstScatter:p,getStackOpts:m}}}),tV=de({"src/traces/bar/sieve.js"(e,r){"use strict";r.exports=i;var t=Qt().distinctVals;function i(a,o){this.traces=a,this.sepNegVal=o.sepNegVal,this.overlapNoMerge=o.overlapNoMerge;for(var s=1/0,l=o.posAxis._id.charAt(0),n=[],u=0;u<a.length;u++){for(var c=a[u],f=0;f<c.length;f++){var h=c[f],d=h.p;d===void 0&&(d=h[l]),d!==void 0&&n.push(d)}c[0]&&c[0].width1&&(s=Math.min(c[0].width1,s))}this.positions=n;var p=t(n);this.distinctPositions=p.vals,p.vals.length===1&&s!==1/0?this.minDiff=s:this.minDiff=Math.min(p.minDiff,s);var g=(o.posAxis||{}).type;(g==="category"||g==="multicategory")&&(this.minDiff=1),this.binWidth=this.minDiff,this.bins={}}i.prototype.put=function(o,s,l){var n=this.getLabel(o,s,l),u=this.bins[n]||0;return this.bins[n]=u+l,u},i.prototype.get=function(o,s,l){var n=this.getLabel(o,s,l);return this.bins[n]||0},i.prototype.getLabel=function(o,s,l){var n=l<0&&this.sepNegVal?"v":"^",u=this.overlapNoMerge?o:Math.round(o/this.binWidth);return n+u+"g"+s}}}),y0=de({"src/traces/bar/constants.js"(e,r){"use strict";r.exports={TEXTPAD:3,eventDataKeys:["value","label"]}}}),Av=de({"src/traces/bar/cross_trace_calc.js"(e,r){"use strict";var t=da(),{isArrayOrTypedArray:i}=Qt(),{BADNUM:a}=cn(),o=Ma(),s=nn(),{getAxisGroup:l}=bv(),n=tV(),{TEXTPAD:u}=y0(),{LINE_SPACING:c}=Bl(),{BR_TAG_ALL:f}=Zo();function h(P,z){for(var I=z.xaxis,L=z.yaxis,B=P._fullLayout,O=P._fullData,G=P.calcdata,W=[],X=[],Z=0;Z<O.length;Z++){var J=O[Z];if(J.visible===!0&&o.traceIs(J,"bar")&&J.xaxis===I._id&&J.yaxis===L._id&&(J.orientation==="h"?W.push(G[Z]):X.push(G[Z]),J._computePh))for(var N=P.calcdata[Z],H=0;H<N.length;H++)typeof N[H].ph0=="function"&&(N[H].ph0=N[H].ph0()),typeof N[H].ph1=="function"&&(N[H].ph1=N[H].ph1())}var $={xCat:I.type==="category"||I.type==="multicategory",yCat:L.type==="category"||L.type==="multicategory",mode:B.barmode,norm:B.barnorm,gap:B.bargap,groupgap:B.bargroupgap};d(P,I,L,X,$),d(P,L,I,W,$)}function d(P,z,I,L,B){if(L.length){var O,G,W,X,Z;switch(m(I,L),B.mode){case"overlay":y(P,z,I,L,B);break;case"group":for(O=[],G=[],W=0;W<L.length;W++)X=L[W],Z=X[0].trace,Z.offset===void 0?G.push(X):O.push(X);G.length&&_(P,z,I,G,B),O.length&&y(P,z,I,O,B);break;case"stack":case"relative":for(O=[],G=[],W=0;W<L.length;W++)X=L[W],Z=X[0].trace,Z.base===void 0?G.push(X):O.push(X);g(G),G.length&&v(P,z,I,G,B),O.length&&y(P,z,I,O,B);break}p(L),D(L,z)}}function p(P){var z,I,L,B,O,G,W;for(z=0;z<P.length;z++)I=P[z],L=I[0].trace,B=I[0].t,B.cornerradiusvalue===void 0&&(O=L.marker?L.marker.cornerradius:void 0,O!==void 0&&(G=t(O)?+O:+O.slice(0,-1),W=t(O)?"px":"%",B.cornerradiusvalue=G,B.cornerradiusform=W))}function g(P){if(!(P.length<2)){var z,I,L,B,O,G,W;for(z=0;z<P.length&&(I=P[z],L=I[0].trace,O=L.marker?L.marker.cornerradius:void 0,O===void 0);z++);if(O!==void 0)for(G=t(O)?+O:+O.slice(0,-1),W=t(O)?"px":"%",z=0;z<P.length;z++)I=P[z],B=I[0].t,B.cornerradiusvalue=G,B.cornerradiusform=W}}function m(P,z){var I,L;for(I=0;I<z.length;I++){var B=z[I],O=B[0].trace,G=O.type==="funnel"?O._base:O.base,W,X=O.orientation==="h"?O.xcalendar:O.ycalendar,Z=P.type==="category"||P.type==="multicategory"?function(){return null}:P.d2c;if(i(G)){for(L=0;L<Math.min(G.length,B.length);L++)W=Z(G[L],0,X),t(W)?(B[L].b=+W,B[L].hasB=1):B[L].b=0;for(;L<B.length;L++)B[L].b=0}else{W=Z(G,0,X);var J=t(W);for(W=J?W:0,L=0;L<B.length;L++)B[L].b=W,J&&(B[L].hasB=1)}}}function y(P,z,I,L,B){for(var O=0;O<L.length;O++){var G=L[O],W=new n([G],{posAxis:z,sepNegVal:!1,overlapNoMerge:!B.norm});x(P,z,W,B),B.norm?(A(W),E(I,W,B)):w(I,W)}}function _(P,z,I,L,B){var O=new n(L,{posAxis:z,sepNegVal:!1,overlapNoMerge:!B.norm});x(P,z,O,B),b(O,z),B.norm?(A(O),E(I,O,B)):w(I,O)}function v(P,z,I,L,B){var O=new n(L,{posAxis:z,sepNegVal:B.mode==="relative",overlapNoMerge:!(B.norm||B.mode==="stack"||B.mode==="relative")});x(P,z,O,B),k(I,O,B);for(var G=0;G<L.length;G++)for(var W=L[G],X=W[0].t.offsetindex,Z=0;Z<W.length;Z++){var J=W[Z];if(J.s!==a){var N=J.b+J.s===O.get(J.p,X,J.s);N&&(J._outmost=!0)}}B.norm&&E(I,O,B)}function x(P,z,I,L){var B=P._fullLayout,O=I.positions,G=I.distinctPositions,W=I.minDiff,X=I.traces,Z=X.length,J=O.length!==G.length,N=W*(1-L.gap),H,$,U,V;if(z._id==="angularaxis")H=N,$=H*(1-(L.groupgap||0)),U=-$/2;else{var j=l(B,z._id)+X[0][0].trace.orientation;V=B._alignmentOpts[j]||{}}for(var q=0;q<Z;q++){var Y=X[q],K=Y[0].trace;if(z._id!=="angularaxis"){var te=V[K.alignmentgroup]||{},ne=Object.keys(te.offsetGroups||{}).length;ne?H=N/ne:H=J?N/Z:N,$=H*(1-(L.groupgap||0)),ne?U=((2*K._offsetIndex+1-ne)*H-$)/2:U=J?((2*q+1-Z)*H-$)/2:-$/2}var se=Y[0].t;se.barwidth=$,se.offsetindex=K._offsetIndex||0,se.poffset=U,se.bargroupwidth=N,se.bardelta=W}I.binWidth=X[0][0].t.barwidth/100,S(I),M(z,I),z._id==="angularaxis"?C(z,I):C(z,I,J)}function S(P){var z=P.traces,I,L;for(I=0;I<z.length;I++){var B=z[I],O=B[0],G=O.trace,W=O.t,X=G._offset||G.offset,Z=W.poffset,J;if(i(X)){for(J=Array.prototype.slice.call(X,0,B.length),L=0;L<J.length;L++)t(J[L])||(J[L]=Z);for(L=J.length;L<B.length;L++)J.push(Z);W.poffset=J}else X!==void 0&&(W.poffset=X);var N=G._width||G.width,H=W.barwidth;if(i(N)){var $=Array.prototype.slice.call(N,0,B.length);for(L=0;L<$.length;L++)t($[L])||($[L]=H);for(L=$.length;L<B.length;L++)$.push(H);if(W.barwidth=$,X===void 0){for(J=[],L=0;L<B.length;L++)J.push(Z+(H-$[L])/2);W.poffset=J}}else N!==void 0&&(W.barwidth=N,X===void 0&&(W.poffset=Z+(H-N)/2))}}function M(P,z){for(var I=z.traces,L=R(P),B=0;B<I.length;B++)for(var O=I[B],G=O[0].t,W=G.poffset,X=i(W),Z=G.barwidth,J=i(Z),N=0;N<O.length;N++){var H=O[N],$=H.w=J?Z[N]:Z;H.p===void 0&&(H.p=H[L],H["orig_"+L]=H[L]);var U=(X?W[N]:W)+$/2;H[L]=H.p+U}}function C(P,z,I){var L=z.traces,B=z.minDiff,O=B/2;s.minDtick(P,z.minDiff,z.distinctPositions[0],I);for(var G=0;G<L.length;G++){var W=L[G],X=W[0],Z=X.trace,J=[],N,H,$,U;for(U=0;U<W.length;U++)N=W[U],H=N.p-O,$=N.p+O,J.push(H,$);if(Z.width||Z.offset){var V=X.t,j=V.poffset,q=V.barwidth,Y=i(j),K=i(q);for(U=0;U<W.length;U++){N=W[U];var te=Y?j[U]:j,ne=K?q[U]:q;H=N.p+te,$=H+ne,J.push(H,$)}}Z._extremes[P._id]=s.findExtremes(P,J,{padded:!1})}}function w(P,z){for(var I=z.traces,L=R(P),B=0;B<I.length;B++){for(var O=I[B],G=O[0].trace,W=G.type==="scatter",X=G.orientation==="v",Z=[],J=!1,N=0;N<O.length;N++){var H=O[N],$=W?0:H.b,U=W?X?H.y:H.x:$+H.s;H[L]=U,Z.push(U),H.hasB&&Z.push($),(!H.hasB||!H.b)&&(J=!0)}let{ppadminus:V,ppadplus:j}=T(G,O);G._extremes[P._id]=s.findExtremes(P,Z,{tozero:J,padded:!0,ppadplus:j,ppadminus:V})}}function k(P,z,I){var L=R(P),B=z.traces,O,G,W,X,Z,J,N;for(X=0;X<B.length;X++)if(O=B[X],G=O[0].trace,G.type==="funnel")for(N=O[0].t.offsetindex,Z=0;Z<O.length;Z++)J=O[Z],J.s!==a&&z.put(J.p,N,-.5*J.s);for(X=0;X<B.length;X++){O=B[X],G=O[0].trace,W=G.type==="funnel",N=G.type==="barpolar"?0:O[0].t.offsetindex;var H=[];for(Z=0;Z<O.length;Z++)if(J=O[Z],J.s!==a){var $;W?$=J.s:$=J.s+J.b;var U=z.put(J.p,N,$),V=U+$;J.b=U,J[L]=V,I.norm||(H.push(V),J.hasB&&H.push(U))}if(!I.norm){let{ppadminus:j,ppadplus:q}=T(G,O);G._extremes[P._id]=s.findExtremes(P,H,{tozero:!0,padded:!0,ppadplus:q,ppadminus:j})}}}function A(P){for(var z=P.traces,I=0;I<z.length;I++)for(var L=z[I],B=L[0].t.offsetindex,O=0;O<L.length;O++){var G=L[O];G.s!==a&&P.put(G.p,B,G.b+G.s)}}function b(P,z){for(var I=P.traces,L=0;L<I.length;L++){var B=I[L],O=B[0].trace,G=B[0].t.offsetindex;if(O.base===void 0)for(var W=new n([B],{posAxis:z,sepNegVal:!0,overlapNoMerge:!0}),X=0;X<B.length;X++){var Z=B[X];if(Z.p!==a){var J=W.put(Z.p,G,Z.b+Z.s);J&&(Z.b=J)}}}}function E(P,z,I){var L=z.traces,B=R(P),O=I.norm==="fraction"?1:100,G=O/1e9,W=P.l2c(P.c2l(0)),X=I.mode==="stack"?O:W;function Z(se){return t(P.c2l(se))&&(se<W-G||se>X+G||!t(W))}for(var J=0;J<L.length;J++){for(var N=L[J],H=N[0].t.offsetindex,$=N[0].trace,U=[],V=!1,j=!1,q=0;q<N.length;q++){var Y=N[q];if(Y.s!==a){var K=Math.abs(O/z.get(Y.p,H,Y.s));Y.b*=K,Y.s*=K;var te=Y.b,ne=te+Y.s;Y[B]=ne,U.push(ne),j=j||Z(ne),Y.hasB&&(U.push(te),j=j||Z(te)),(!Y.hasB||!Y.b)&&(V=!0)}}let{ppadminus:se,ppadplus:le}=T($,N);$._extremes[P._id]=s.findExtremes(P,U,{tozero:V,padded:j,ppadplus:le,ppadminus:se})}}function T(P,z){if(P.orientation==="v"&&(P.text||P.texttemplate)&&P.textposition==="outside"&&(P.textangle==="auto"||P.textangle===0)){let L=function(O){return!O||typeof O!="string"?0:(O.match(f)||[]).length+1};var I;P.texttemplate?I=L(P.texttemplate):I=i(P.text)?Math.max(...P.text.map(O=>L(O))):L(P.text);let B=P.outsidetextfont.size*c*I+u;return{ppadplus:z.some(O=>O.s<0)?B:0,ppadminus:z.some(O=>O.s>=0)?B:0}}return{ppadplus:void 0,ppadminus:void 0}}function F(P,z,I,L){for(var B=R(L),O=0;O<P.length;O++)for(var G=P[O],W=0;W<G.length;W++){var X=G[W],Z=X[B];X._sMin=z[Z],X._sMax=I[Z]}}function D(P,z){var I=R(z),L={},B,O,G,W=1/0,X=-1/0;for(B=0;B<P.length;B++)for(G=P[B],O=0;O<G.length;O++){var Z=G[O].p;t(Z)&&(W=Math.min(W,Z),X=Math.max(X,Z))}var J=1e4/(X-W),N=L.round=function(ce){return String(Math.round(J*(ce-W)))},H={},$={},U=P.some(function(ce){var pe=ce[0].trace;return"marker"in pe&&pe.marker.cornerradius});for(B=0;B<P.length;B++){G=P[B],G[0].t.extents=L;var V=G[0].t.poffset,j=i(V);for(O=0;O<G.length;O++){var q=G[O],Y=q[I]-q.w/2;if(t(Y)){var K=q[I]+q.w/2,te=N(q.p);L[te]?L[te]=[Math.min(Y,L[te][0]),Math.max(K,L[te][1])]:L[te]=[Y,K]}if(q.p0=q.p+(j?V[O]:V),q.p1=q.p0+q.w,q.s0=q.b,q.s1=q.s0+q.s,U){var ne=Math.min(q.s0,q.s1)||0,se=Math.max(q.s0,q.s1)||0,le=q[I];H[le]=le in H?Math.min(H[le],ne):ne,$[le]=le in $?Math.max($[le],se):se}}}U&&F(P,H,$,z)}function R(P){return P._id.charAt(0)}r.exports={crossTraceCalc:h,setGroupPositions:d}}}),rV=de({"src/traces/scatter/cross_trace_calc.js"(e,r){"use strict";var t=Uh(),i=Av().setGroupPositions;function a(l,n){for(var u=n.xaxis,c=n.yaxis,f=l._fullLayout,h=l._fullData,d=l.calcdata,p=[],g=[],m=0;m<h.length;m++){var y=h[m];y.visible===!0&&y.type==="scatter"&&y.xaxis===u._id&&y.yaxis===c._id&&(y.orientation==="h"?p.push(d[m]):y.orientation==="v"&&g.push(d[m]))}var _={mode:f.scattermode,gap:f.scattergap};i(l,u,c,g,_),i(l,c,u,p,_)}r.exports=function(n,u){n._fullLayout.scattermode==="group"&&a(n,u);var c=u.xaxis,f=u.yaxis,h=c._id+f._id,d=n._fullLayout._scatterStackOpts[h];if(d){var p=n.calcdata,g,m,y,_,v,x,S,M,C,w,k,A,b,E,T;for(var F in d){w=d[F];var D=w.traceIndices;if(D.length){for(k=w.stackgaps==="interpolate",A=w.groupnorm,w.orientation==="v"?(b="x",E="y"):(b="y",E="x"),T=new Array(D.length),g=0;g<T.length;g++)T[g]=!1;x=p[D[0]];var R=new Array(x.length);for(g=0;g<x.length;g++)R[g]=x[g][b];for(g=1;g<D.length;g++){for(v=p[D[g]],m=y=0;m<v.length;m++){for(S=v[m][b];S>R[y]&&y<R.length;y++)o(v,m,R[y],g,T,k,b),m++;if(S!==R[y]){for(_=0;_<g;_++)o(p[D[_]],y,S,_,T,k,b);R.splice(y,0,S)}y++}for(;y<R.length;y++)o(v,m,R[y],g,T,k,b),m++}var P=R.length;for(m=0;m<x.length;m++){for(M=x[m][E]=x[m].s,g=1;g<D.length;g++)v=p[D[g]],v[0].trace._rawLength=v[0].trace._length,v[0].trace._length=P,M+=v[m].s,v[m][E]=M;if(A)for(C=(A==="fraction"?M:M/100)||1,g=0;g<D.length;g++){var z=p[D[g]][m];z[E]/=C,z.sNorm=z.s/C}}for(g=0;g<D.length;g++){v=p[D[g]];var I=v[0].trace,L=t.calcMarkerSize(I,I._rawLength),B=Array.isArray(L);if(L&&T[g]||B){var O=L;for(L=new Array(P),m=0;m<P;m++)L[m]=v[m].gap?0:B?O[v[m].i]:O}var G=new Array(P),W=new Array(P);for(m=0;m<P;m++)G[m]=v[m].x,W[m]=v[m].y;t.calcAxisExpansion(n,I,c,f,G,W,L),v[0].t.orientation=w.orientation}}}}};function o(l,n,u,c,f,h,d){f[c]=!0;var p={i:null,gap:!0,s:0};if(p[d]=u,l.splice(n,0,p),n&&u===l[n-1][d]){var g=l[n-1];p.s=g.s,p.i=g.i,p.gap=g.gap}else h&&(p.s=s(l,n,u,d));n||(l[0].t=l[1].t,l[0].trace=l[1].trace,delete l[1].t,delete l[1].trace)}function s(l,n,u,c){var f=l[n-1],h=l[n+1];return h?f?f.s+(h.s-f.s)*(u-f[c])/(h[c]-f[c]):h.s:f.s}}}),ak=de({"src/traces/scatter/line_points.js"(e,r){"use strict";var t=hn(),i=cn(),a=i.BADNUM,o=i.LOG_CLIP,s=o+.5,l=o-.5,n=Qt(),u=n.segmentsIntersect,c=n.constrain,f=Zd();r.exports=function(d,p){var g=p.trace||{},m=p.xaxis,y=p.yaxis,_=m.type==="log",v=y.type==="log",x=m._length,S=y._length,M=p.backoff,C=g.marker,w=p.connectGaps,k=p.baseTolerance,A=p.shape,b=A==="linear",E=g.fill&&g.fill!=="none",T=[],F=f.minTolerance,D=d.length,R=new Array(D),P=0,z,I,L,B,O,G,W,X,Z,J,N,H,$,U,V,j;function q(Ue){var at=d[Ue];if(!at)return!1;var rt=p.linearized?m.l2p(at.x):m.c2p(at.x),ft=p.linearized?y.l2p(at.y):y.c2p(at.y);if(rt===a){if(_&&(rt=m.c2p(at.x,!0)),rt===a)return!1;v&&ft===a&&(rt*=Math.abs(m._m*S*(m._m>0?s:l)/(y._m*x*(y._m>0?s:l)))),rt*=1e3}if(ft===a){if(v&&(ft=y.c2p(at.y,!0)),ft===a)return!1;ft*=1e3}return[rt,ft]}function Y(Ue,at,rt,ft){var At=rt-Ue,ht=ft-at,Gt=.5-Ue,fr=.5-at,gt=At*At+ht*ht,yt=At*Gt+ht*fr;if(yt>0&&yt<gt){var kt=Gt*ht-fr*At;if(kt*kt<gt)return!0}}var K,te;function ne(Ue,at){var rt=Ue[0]/x,ft=Ue[1]/S,At=Math.max(0,-rt,rt-1,-ft,ft-1);return At&&K!==void 0&&Y(rt,ft,K,te)&&(At=0),At&&at&&Y(rt,ft,at[0]/x,at[1]/S)&&(At=0),(1+f.toleranceGrowth*At)*k}function se(Ue,at){var rt=Ue[0]-at[0],ft=Ue[1]-at[1];return Math.sqrt(rt*rt+ft*ft)}var le=f.maxScreensAway,ce=-x*le,pe=x*(1+le),xe=-S*le,ye=S*(1+le),fe=[[ce,xe,pe,xe],[pe,xe,pe,ye],[pe,ye,ce,ye],[ce,ye,ce,xe]],ae,ee,ie,Q,ue,ge;function Me(Ue,at){for(var rt=[],ft=0,At=0;At<4;At++){var ht=fe[At],Gt=u(Ue[0],Ue[1],at[0],at[1],ht[0],ht[1],ht[2],ht[3]);Gt&&(!ft||Math.abs(Gt.x-rt[0][0])>1||Math.abs(Gt.y-rt[0][1])>1)&&(Gt=[Gt.x,Gt.y],ft&&se(Gt,Ue)<se(rt[0],Ue)?rt.unshift(Gt):rt.push(Gt),ft++)}return rt}function Te(Ue){if(Ue[0]<ce||Ue[0]>pe||Ue[1]<xe||Ue[1]>ye)return[c(Ue[0],ce,pe),c(Ue[1],xe,ye)]}function je(Ue,at){if(Ue[0]===at[0]&&(Ue[0]===ce||Ue[0]===pe)||Ue[1]===at[1]&&(Ue[1]===xe||Ue[1]===ye))return!0}function Ve(Ue,at){var rt=[],ft=Te(Ue),At=Te(at);return ft&&At&&je(ft,At)||(ft&&rt.push(ft),At&&rt.push(At)),rt}function Ze(Ue,at,rt){return function(ft,At){var ht=Te(ft),Gt=Te(At),fr=[];if(ht&&Gt&&je(ht,Gt))return fr;ht&&fr.push(ht),Gt&&fr.push(Gt);var gt=2*n.constrain((ft[Ue]+At[Ue])/2,at,rt)-((ht||ft)[Ue]+(Gt||At)[Ue]);if(gt){var yt;ht&&Gt?yt=gt>0==ht[Ue]>Gt[Ue]?ht:Gt:yt=ht||Gt,yt[Ue]+=gt}return fr}}var Ke;A==="linear"||A==="spline"?Ke=Me:A==="hv"||A==="vh"?Ke=Ve:A==="hvh"?Ke=Ze(0,ce,pe):A==="vhv"&&(Ke=Ze(1,xe,ye));function vt(Ue,at){var rt=at[0]-Ue[0],ft=(at[1]-Ue[1])/rt,At=(Ue[1]*at[0]-at[1]*Ue[0])/rt;return At>0?[ft>0?ce:pe,ye]:[ft>0?pe:ce,xe]}function xt(Ue){var at=Ue[0],rt=Ue[1],ft=at===R[P-1][0],At=rt===R[P-1][1];if(!(ft&&At))if(P>1){var ht=at===R[P-2][0],Gt=rt===R[P-2][1];ft&&(at===ce||at===pe)&&ht?Gt?P--:R[P-1]=Ue:At&&(rt===xe||rt===ye)&&Gt?ht?P--:R[P-1]=Ue:R[P++]=Ue}else R[P++]=Ue}function Pt(Ue){R[P-1][0]!==Ue[0]&&R[P-1][1]!==Ue[1]&&xt([ie,Q]),xt(Ue),ue=null,ie=Q=0}var mt=n.isArrayOrTypedArray(C);function Mt(Ue){if(Ue&&M&&(Ue.i=z,Ue.d=d,Ue.trace=g,Ue.marker=mt?C[Ue.i]:C,Ue.backoff=M),K=Ue[0]/x,te=Ue[1]/S,ae=Ue[0]<ce?ce:Ue[0]>pe?pe:0,ee=Ue[1]<xe?xe:Ue[1]>ye?ye:0,ae||ee){if(!P)R[P++]=[ae||Ue[0],ee||Ue[1]];else if(ue){var at=Ke(ue,Ue);at.length>1&&(Pt(at[0]),R[P++]=at[1])}else ge=Ke(R[P-1],Ue)[0],R[P++]=ge;var rt=R[P-1];ae&&ee&&(rt[0]!==ae||rt[1]!==ee)?(ue&&(ie!==ae&&Q!==ee?xt(ie&&Q?vt(ue,Ue):[ie||ae,Q||ee]):ie&&Q&&xt([ie,Q])),xt([ae,ee])):ie-ae&&Q-ee&&xt([ae||ie,ee||Q]),ue=Ue,ie=ae,Q=ee}else ue&&Pt(Ke(ue,Ue)[0]),R[P++]=Ue}for(z=0;z<D;z++)if(I=q(z),!!I){for(P=0,ue=null,Mt(I),z++;z<D;z++){if(B=q(z),!B){if(w)continue;break}if(!b||!p.simplify){Mt(B);continue}var lt=q(z+1);if(J=se(B,I),!(!(E&&(P===0||P===D-1))&&J<ne(B,lt)*F)){for(X=[(B[0]-I[0])/J,(B[1]-I[1])/J],O=I,N=J,H=U=V=0,W=!1,L=B,z++;z<d.length;z++){if(G=lt,lt=q(z+1),!G){if(w)continue;break}if(Z=[G[0]-I[0],G[1]-I[1]],j=Z[0]*X[1]-Z[1]*X[0],U=Math.min(U,j),V=Math.max(V,j),V-U>ne(G,lt))break;L=G,$=Z[0]*X[0]+Z[1]*X[1],$>N?(N=$,B=G,W=!1):$<H&&(H=$,O=G,W=!0)}if(W?(Mt(B),L!==O&&Mt(O)):(O!==I&&Mt(O),L!==B&&Mt(B)),Mt(L),z>=d.length||!G)break;Mt(G),I=G}}ue&&xt([ie||ue[0],Q||ue[1]]),T.push(R.slice(0,P))}var qe=A.slice(A.length-1);if(M&&qe!=="h"&&qe!=="v"){for(var Ye=!1,me=-1,_e=[],Ae=0;Ae<T.length;Ae++)for(var ke=0;ke<T[Ae].length-1;ke++){var Ee=T[Ae][ke],De=T[Ae][ke+1],Je=t.applyBackoff(De,Ee);(Je[0]!==De[0]||Je[1]!==De[1])&&(Ye=!0),_e[me+1]||(me++,_e[me]=[Ee,[Je[0],Je[1]]])}return Ye?_e:T}return T}}}),nk=de({"src/traces/scatter/link_traces.js"(e,r){"use strict";var t={tonextx:1,tonexty:1,tonext:1};r.exports=function(a,o,s){var l,n,u,c,f,h={},d=!1,p=-1,g=0,m=-1;for(n=0;n<s.length;n++)l=s[n][0].trace,u=l.stackgroup||"",u?u in h?f=h[u]:(f=h[u]=g,g++):l.fill in t&&m>=0?f=m:(f=m=g,g++),f<p&&(d=!0),l._groupIndex=p=f;var y=s.slice();d&&y.sort(function(v,x){var S=v[0].trace,M=x[0].trace;return S._groupIndex-M._groupIndex||S.index-M.index});var _={};for(n=0;n<y.length;n++)l=y[n][0].trace,u=l.stackgroup||"",l.visible===!0?(l._nexttrace=null,l.fill in t&&(c=_[u],l._prevtrace=c||null,c&&(c._nexttrace=l)),l._ownfill=l.fill&&(l.fill.slice(0,6)==="tozero"||l.fill==="toself"||l.fill.slice(0,2)==="to"&&!l._prevtrace),_[u]=l):l._prevtrace=l._nexttrace=l._ownfill=null;return y}}}),v1=de({"src/traces/scatter/plot.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Qt(),o=a.ensureSingle,s=a.identity,l=hn(),n=bs(),u=ak(),c=nk(),f=Fy().tester;r.exports=function(m,y,_,v,x,S){var M,C,w=!x,k=!!x&&x.duration>0,A=c(m,y,_);if(M=v.selectAll("g.trace").data(A,function(E){return E[0].trace.uid}),M.enter().append("g").attr("class",function(E){return"trace scatter trace"+E[0].trace.uid}).style("stroke-miterlimit",2),M.order(),h(m,M,y),k){S&&(C=S());var b=t.transition().duration(x.duration).ease(x.easing).each("end",function(){C&&C()}).each("interrupt",function(){C&&C()});b.each(function(){v.selectAll("g.trace").each(function(E,T){d(m,T,y,E,A,this,x)})})}else M.each(function(E,T){d(m,T,y,E,A,this,x)});w&&M.exit().remove(),v.selectAll("path:not([d])").remove()};function h(g,m,y){m.each(function(_){var v=o(t.select(this),"g","fills");l.setClipUrl(v,y.layerClipId,g);var x=_[0].trace;x._ownFill=null,x._nextFill=null;var S=[];x._ownfill&&S.push("_ownFill"),x._nexttrace&&S.push("_nextFill");var M=v.selectAll("g").data(S,s);M.enter().append("g"),M.exit().remove(),M.order().each(function(C){x[C]=o(t.select(this),"path","js-fill")})})}function d(g,m,y,_,v,x,S){var M=g._context.staticPlot,C;p(g,m,y,_,v);var w=!!S&&S.duration>0;function k(xt){return w?xt.transition():xt}var A=y.xaxis,b=y.yaxis,E=_[0].trace,T=E.line,F=t.select(x),D=o(F,"g","errorbars"),R=o(F,"g","lines"),P=o(F,"g","points"),z=o(F,"g","text");if(i.getComponentMethod("errorbars","plot")(g,D,y,S),E.visible!==!0)return;k(F).style("opacity",E.opacity);var I,L,B=E.fill.charAt(E.fill.length-1);B!=="x"&&B!=="y"&&(B="");var O,G;B==="y"?(O=1,G=b.c2p(0,!0)):B==="x"&&(O=0,G=A.c2p(0,!0)),_[0][y.isRangePlot?"nodeRangePlot3":"node3"]=F;var W="",X=[],Z=E._prevtrace,J=null,N=null;Z&&(W=Z._prevRevpath||"",L=Z._nextFill,X=Z._ownPolygons,J=Z._fillsegments,N=Z._fillElement);var H,$,U="",V="",j,q,Y,K,te,ne,se=[];E._polygons=[];var le=[],ce=[],pe=a.noop;if(I=E._ownFill,n.hasLines(E)||E.fill!=="none"){L&&L.datum(_),["hv","vh","hvh","vhv"].indexOf(T.shape)!==-1?(j=l.steps(T.shape),q=l.steps(T.shape.split("").reverse().join(""))):T.shape==="spline"?j=q=function(xt){var Pt=xt[xt.length-1];return xt.length>1&&xt[0][0]===Pt[0]&&xt[0][1]===Pt[1]?l.smoothclosed(xt.slice(1),T.smoothing):l.smoothopen(xt,T.smoothing)}:j=q=function(xt){return"M"+xt.join("L")},Y=function(xt){return q(xt.reverse())},ce=u(_,{xaxis:A,yaxis:b,trace:E,connectGaps:E.connectgaps,baseTolerance:Math.max(T.width||1,3)/4,shape:T.shape,backoff:T.backoff,simplify:T.simplify,fill:E.fill}),le=new Array(ce.length);var xe=0;for(C=0;C<ce.length;C++){var ye,fe=ce[C];!ye||!B?(ye=fe.slice(),le[xe]=ye,xe++):ye.push.apply(ye,fe)}E._fillElement=null,E._fillExclusionElement=N,E._fillsegments=le.slice(0,xe),le=E._fillsegments,ce.length&&(K=ce[0][0].slice(),te=ce[ce.length-1],ne=te[te.length-1].slice()),pe=function(xt){return function(Pt){if(H=j(Pt),$=Y(Pt),U?B?(U+="L"+H.slice(1),V=$+("L"+V.slice(1))):(U+="Z"+H,V=$+"Z"+V):(U=H,V=$),n.hasLines(E)){var mt=t.select(this);if(mt.datum(_),xt)k(mt.style("opacity",0).attr("d",H).call(l.lineGroupStyle)).style("opacity",1);else{var Mt=k(mt);Mt.attr("d",H),l.singleLineStyle(_,Mt)}}}}}var ae=R.selectAll(".js-line").data(ce);k(ae.exit()).style("opacity",0).remove(),ae.each(pe(!1)),ae.enter().append("path").classed("js-line",!0).style("vector-effect",M?"none":"non-scaling-stroke").call(l.lineGroupStyle).each(pe(!0)),l.setClipUrl(ae,y.layerClipId,g);function ee(xt){k(xt).attr("d","M0,0Z")}var ie=function(){var xt=new Array(le.length);for(C=0;C<le.length;C++)xt[C]=f(le[C]);return xt},Q=function(xt){var Pt,mt;if(!xt||xt.length===0)for(Pt=new Array(le.length),mt=0;mt<le.length;mt++){var Mt=le[mt][0].slice(),lt=le[mt][le[mt].length-1].slice();Mt[O]=lt[O]=G;var qe=[lt,Mt],Ye=qe.concat(le[mt]);Pt[mt]=f(Ye)}else{for(Pt=new Array(xt.length-1+le.length),mt=0;mt<xt.length-1;mt++)Pt[mt]=f(xt[mt]);var me=xt[xt.length-1].slice();for(me.reverse(),mt=0;mt<le.length;mt++)Pt[xt.length-1+mt]=f(le[mt].concat(me))}return Pt};ce.length?(I?(I.datum(_),K&&ne&&(B?(K[O]=ne[O]=G,k(I).attr("d","M"+ne+"L"+K+"L"+U.slice(1)).call(l.singleFillStyle,g),se=Q(null)):(k(I).attr("d",U+"Z").call(l.singleFillStyle,g),se=ie())),E._polygons=se,E._fillElement=I):L&&(E.fill.slice(0,6)==="tonext"&&U&&W?(E.fill==="tonext"?(k(L).attr("d",U+"Z"+W+"Z").call(l.singleFillStyle,g),se=ie(),E._polygons=se.concat(X)):(k(L).attr("d",U+"L"+W.slice(1)+"Z").call(l.singleFillStyle,g),se=Q(J),E._polygons=se),E._fillElement=L):ee(L)),E._prevRevpath=V):(I?ee(I):L&&ee(L),E._prevRevpath=null),E._ownPolygons=se;function ue(xt){return xt.filter(function(Pt){return!Pt.gap&&Pt.vis})}function ge(xt){return xt.filter(function(Pt){return Pt.vis})}function Me(xt){return xt.filter(function(Pt){return!Pt.gap})}function Te(xt){return xt.id}function je(xt){if(xt.ids)return Te}function Ve(){return!1}function Ze(xt,Pt,mt){var Mt,lt,qe,Ye=mt[0].trace,me=n.hasMarkers(Ye),_e=n.hasText(Ye),Ae=je(Ye),ke=Ve,Ee=Ve;if(me||_e){var De=s,Je=Ye.stackgroup,Ue=Je&&g._fullLayout._scatterStackOpts[A._id+b._id][Je].stackgaps==="infer zero";Ye.marker.maxdisplayed||Ye._needsCull?De=Ue?ge:ue:Je&&!Ue&&(De=Me),me&&(ke=De),_e&&(Ee=De)}lt=xt.selectAll("path.point"),Mt=lt.data(ke,Ae);var at=Mt.enter().append("path").classed("point",!0);w&&at.call(l.pointStyle,Ye,g).call(l.translatePoints,A,b).style("opacity",0).transition().style("opacity",1),Mt.order();var rt;me&&(rt=l.makePointStyleFns(Ye)),Mt.each(function(ft){var At=t.select(this),ht=k(At);qe=l.translatePoint(ft,ht,A,b),qe?(l.singlePointStyle(ft,ht,Ye,rt,g),y.layerClipId&&l.hideOutsideRangePoint(ft,ht,A,b,Ye.xcalendar,Ye.ycalendar),Ye.customdata&&At.classed("plotly-customdata",ft.data!==null&&ft.data!==void 0)):ht.remove()}),w?Mt.exit().transition().style("opacity",0).remove():Mt.exit().remove(),lt=Pt.selectAll("g"),Mt=lt.data(Ee,Ae),Mt.enter().append("g").classed("textpoint",!0).append("text"),Mt.order(),Mt.each(function(ft){var At=t.select(this),ht=k(At.select("text"));qe=l.translatePoint(ft,ht,A,b),qe?y.layerClipId&&l.hideOutsideRangePoint(ft,At,A,b,Ye.xcalendar,Ye.ycalendar):At.remove()}),Mt.selectAll("text").call(l.textPointStyle,Ye,g).each(function(ft){var At=A.c2p(ft.x),ht=b.c2p(ft.y);t.select(this).selectAll("tspan.line").each(function(){k(t.select(this)).attr({x:At,y:ht})})}),Mt.exit().remove()}P.datum(_),z.datum(_),Ze(P,z,_);var Ke=E.cliponaxis===!1,vt=Ke?null:y.layerClipId;l.setClipUrl(P,vt,g),l.setClipUrl(z,vt,g)}function p(g,m,y,_,v){var x=y.xaxis,S=y.yaxis,M=t.extent(a.simpleMap(x.range,x.r2c)),C=t.extent(a.simpleMap(S.range,S.r2c)),w=_[0].trace;if(n.hasMarkers(w)){var k=w.marker.maxdisplayed;if(k!==0){var A=_.filter(function(F){return F.x>=M[0]&&F.x<=M[1]&&F.y>=C[0]&&F.y<=C[1]}),b=Math.ceil(A.length/k),E=0;v.forEach(function(F,D){var R=F[0].trace;n.hasMarkers(R)&&R.marker.maxdisplayed>0&&D<m&&E++});var T=Math.round(E*b/3+Math.floor(E/3)*b/7.1);_.forEach(function(F){delete F.vis}),A.forEach(function(F,D){Math.round((D+T)%b)===0&&(F.vis=!0)})}}}}}),Yu=de({"src/traces/scatter/marker_colorbar.js"(e,r){"use strict";r.exports={container:"marker",min:"cmin",max:"cmax"}}}),Bw=de({"src/traces/scatter/format_labels.js"(e,r){"use strict";var t=nn();r.exports=function(a,o,s){var l={},n={_fullLayout:s},u=t.getFromTrace(n,o,"x"),c=t.getFromTrace(n,o,"y"),f=a.orig_x;f===void 0&&(f=a.x);var h=a.orig_y;return h===void 0&&(h=a.y),l.xLabel=t.tickText(u,u.c2l(f),!0).text,l.yLabel=t.tickText(c,c.c2l(h),!0).text,l}}}),lf=de({"src/traces/scatter/style.js"(e,r){"use strict";var t=Yr(),i=hn(),a=Ma();function o(u){var c=t.select(u).selectAll("g.trace.scatter");c.style("opacity",function(f){return f[0].trace.opacity}),c.selectAll("g.points").each(function(f){var h=t.select(this),d=f.trace||f[0].trace;s(h,d,u)}),c.selectAll("g.text").each(function(f){var h=t.select(this),d=f.trace||f[0].trace;l(h,d,u)}),c.selectAll("g.trace path.js-line").call(i.lineGroupStyle),c.selectAll("g.trace path.js-fill").call(i.fillGroupStyle,u,!1),a.getComponentMethod("errorbars","style")(c)}function s(u,c,f){i.pointStyle(u.selectAll("path.point"),c,f)}function l(u,c,f){i.textPointStyle(u.selectAll("text"),c,f)}function n(u,c,f){var h=c[0].trace;h.selectedpoints?(i.selectedPointStyle(f.selectAll("path.point"),h),i.selectedTextStyle(f.selectAll("text"),h)):(s(f,h,u),l(f,h,u))}r.exports={style:o,stylePoints:s,styleText:l,styleOnSelect:n}}}),m1=de({"src/traces/scatter/get_trace_color.js"(e,r){"use strict";var t=ta(),i=bs();r.exports=function(o,s){var l,n;if(o.mode==="lines")return l=o.line.color,l&&t.opacity(l)?l:o.fillcolor;if(o.mode==="none")return o.fill?o.fillcolor:"";var u=s.mcc||s.mc||(o.marker||{}).color,c=s.mlcc||((o.marker||{}).line||{}).color;return n=u&&t.opacity(u)?u:c&&t.opacity(c)&&(s.mlw||((o.marker||{}).line||{}).width)?c:"",n?t.opacity(n)<.3?t.addOpacity(n,.3):n:(l=(o.line||{}).color,l&&t.opacity(l)&&i.hasLines(o)&&o.line.width?l:o.fillcolor)}}}),g1=de({"src/traces/scatter/hover.js"(e,r){"use strict";var t=Qt(),i=$s(),a=Ma(),o=m1(),s=ta(),l=t.fillText;r.exports=function(u,c,f,h){var d=u.cd,p=d[0].trace,g=u.xa,m=u.ya,y=g.c2p(c),_=m.c2p(f),v=[y,_],x=p.hoveron||"",S=p.mode.indexOf("markers")!==-1?3:.5,M=!!p.xperiodalignment,C=!!p.yperiodalignment;if(x.indexOf("points")!==-1){var w=function(X){if(M){var Z=g.c2p(X.xStart),J=g.c2p(X.xEnd);return y>=Math.min(Z,J)&&y<=Math.max(Z,J)?0:1/0}var N=Math.max(3,X.mrc||0),H=1-1/N,$=Math.abs(g.c2p(X.x)-y);return $<N?H*$/N:$-N+H},k=function(X){if(C){var Z=m.c2p(X.yStart),J=m.c2p(X.yEnd);return _>=Math.min(Z,J)&&_<=Math.max(Z,J)?0:1/0}var N=Math.max(3,X.mrc||0),H=1-1/N,$=Math.abs(m.c2p(X.y)-_);return $<N?H*$/N:$-N+H},A=function(X){var Z=Math.max(S,X.mrc||0),J=g.c2p(X.x)-y,N=m.c2p(X.y)-_;return Math.max(Math.sqrt(J*J+N*N)-Z,1-S/Z)},b=i.getDistanceFunction(h,w,k,A);if(i.getClosest(d,b,u),u.index!==!1){var E=d[u.index],T=g.c2p(E.x,!0),F=m.c2p(E.y,!0),D=E.mrc||1;u.index=E.i;var R=d[0].t.orientation,P=R&&(E.sNorm||E.s),z=R==="h"?P:E.orig_x!==void 0?E.orig_x:E.x,I=R==="v"?P:E.orig_y!==void 0?E.orig_y:E.y;return t.extendFlat(u,{color:o(p,E),x0:T-D,x1:T+D,xLabelVal:z,y0:F-D,y1:F+D,yLabelVal:I,spikeDistance:A(E),hovertemplate:p.hovertemplate}),l(E,p,u),a.getComponentMethod("errorbars","hoverInfo")(E,p,u),[u]}}function L(X){if(!X)return!1;var Z=X.node();try{var J=new DOMPoint(v[0],v[1]);return Z.isPointInFill(J)}catch{var N=Z.ownerSVGElement.createSVGPoint();return N.x=v[0],N.y=v[1],Z.isPointInFill(N)}}function B(X){var Z,J=[],N=1/0,H=-1/0,$=1/0,U=-1/0,V;for(Z=0;Z<X.length;Z++){var j=X[Z];j.contains(v)&&(J.push(j),$=Math.min($,j.ymin),U=Math.max(U,j.ymax))}if(J.length===0)return null;$=Math.max($,0),U=Math.min(U,m._length),V=($+U)/2;var q,Y,K,te,ne,se,le;for(Z=0;Z<J.length;Z++)for(Y=J[Z].pts,q=1;q<Y.length;q++)se=Y[q-1][1],le=Y[q][1],se>V!=le>=V&&(te=Y[q-1][0],ne=Y[q][0],le-se&&(K=te+(ne-te)*(V-se)/(le-se),N=Math.min(N,K),H=Math.max(H,K)));return N=Math.max(N,0),H=Math.min(H,g._length),{x0:N,x1:H,y0:V,y1:V}}if(x.indexOf("fills")!==-1&&p._fillElement){var O=L(p._fillElement)&&!L(p._fillExclusionElement);if(O){var G=B(p._polygons);G===null&&(G={x0:v[0],x1:v[0],y0:v[1],y1:v[1]});var W=s.defaultLine;return s.opacity(p.fillcolor)?W=p.fillcolor:s.opacity((p.line||{}).color)&&(W=p.line.color),t.extendFlat(u,{distance:u.maxHoverDistance,x0:G.x0,x1:G.x1,y0:G.y0,y1:G.y1,color:W,hovertemplate:!1}),delete u.index,p.text&&!t.isArrayOrTypedArray(p.text)?u.text=String(p.text):u.text=p.name,[u]}}}}}),Mv=de({"src/traces/scatter/select.js"(e,r){"use strict";var t=bs();r.exports=function(a,o){var s=a.cd,l=a.xaxis,n=a.yaxis,u=[],c=s[0].trace,f,h,d,p,g=c.mode&&!t.hasMarkers(c)&&!t.hasText(c);if(g)return[];if(o===!1)for(f=0;f<s.length;f++)s[f].selected=0;else for(f=0;f<s.length;f++)h=s[f],d=l.c2p(h.x),p=n.c2p(h.y),h.i!==null&&o.contains([d,p],!1,f,a)?(u.push({pointNumber:h.i,x:l.c2d(h.x),y:n.c2d(h.y)}),h.selected=1):h.selected=0;return u}}}),iV=de({"src/plots/cartesian/attributes.js"(e,r){"use strict";r.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}}}),ok=de({"src/plots/cartesian/type_defaults.js"(e,r){"use strict";var t=Ma().traceIs,i=h1();r.exports=function(u,c,f,h){f("autotypenumbers",h.autotypenumbersDflt);var d=f("type",(h.splomStash||{}).type);d==="-"&&(a(c,h.data),c.type==="-"?c.type="linear":u.type=c.type)};function a(n,u){if(n.type==="-"){var c=n._id,f=c.charAt(0),h;c.indexOf("scene")!==-1&&(c=f);var d=o(u,c,f);if(d){if(d.type==="histogram"&&f==={v:"y",h:"x"}[d.orientation||"v"]){n.type="linear";return}var p=f+"calendar",g=d[p],m={noMultiCategory:!t(d,"cartesian")||t(d,"noMultiCategory")};if(d.type==="box"&&d._hasPreCompStats&&f==={h:"x",v:"y"}[d.orientation||"v"]&&(m.noMultiCategory=!0),m.autotypenumbers=n.autotypenumbers,l(d,f)){var y=s(d),_=[];for(h=0;h<u.length;h++){var v=u[h];!t(v,"box-violin")||(v[f+"axis"]||f)!==c||(v[y]!==void 0?_.push(v[y][0]):v.name!==void 0?_.push(v.name):_.push("text"),v[p]!==g&&(g=void 0))}n.type=i(_,g,m)}else if(d.type==="splom"){var x=d.dimensions,S=x[d._axesDim[c]];S.visible&&(n.type=i(S.values,g,m))}else n.type=i(d[f]||[d[f+"0"]],g,m)}}}function o(n,u,c){for(var f=0;f<n.length;f++){var h=n[f];if(h.type==="splom"&&h._length>0&&(h["_"+c+"axes"]||{})[u])return h;if((h[c+"axis"]||c)===u){if(l(h,c))return h;if((h[c]||[]).length||h[c+"0"])return h}}}function s(n){return{v:"x",h:"y"}[n.orientation||"v"]}function l(n,u){var c=s(n),f=t(n,"box-violin");return f&&u===c&&n[c]===void 0&&n[c+"0"]===void 0}}}),Ow=de({"src/plots/cartesian/category_order_defaults.js"(e,r){"use strict";var t=Do().isTypedArraySpec;function i(a,o){var s=o.dataAttr||a._id.charAt(0),l={},n,u,c;if(o.axData)n=o.axData;else for(n=[],u=0;u<o.data.length;u++){var f=o.data[u];f[s+"axis"]===a._id&&n.push(f)}for(u=0;u<n.length;u++){var h=n[u][s];for(c=0;c<h.length;c++){var d=h[c];d!=null&&(l[d]=1)}}return Object.keys(l)}r.exports=function(o,s,l,n){if(s.type==="category"){var u=o.categoryarray,c=Array.isArray(u)&&u.length>0||t(u),f;c&&(f="array");var h=l("categoryorder",f),d;h==="array"&&(d=l("categoryarray")),!c&&h==="array"&&(h=s.categoryorder="trace"),h==="trace"?s._initialCategories=[]:h==="array"?s._initialCategories=d.slice():(d=i(s,n).sort(),h==="category ascending"?s._initialCategories=d:h==="category descending"&&(s._initialCategories=d.reverse()))}}}}),Ry=de({"src/plots/cartesian/line_grid_defaults.js"(e,r){"use strict";var t=ta(),i=Jo(),a=Qt();r.exports=function(s,l,n,u){u=u||{};var c=u.dfltColor;function f(T,F){return a.coerce2(s,l,u.attributes,T,F)}var h=f("linecolor",c),d=f("linewidth"),p=n("showline",u.showLine||!!h||!!d);p||(delete l.linecolor,delete l.linewidth);var g=t.mix(c,u.bgColor,u.blend||i.lightFraction),m=f("gridcolor",g),y=f("gridwidth"),_=f("griddash"),v=n("showgrid",u.showGrid||!!m||!!y||!!_);if(v||(delete l.gridcolor,delete l.gridwidth,delete l.griddash),u.hasMinor){var x=t.mix(l.gridcolor,u.bgColor,67),S=f("minor.gridcolor",x),M=f("minor.gridwidth",l.gridwidth||1),C=f("minor.griddash",l.griddash||"solid"),w=n("minor.showgrid",!!S||!!M||!!C);w||(delete l.minor.gridcolor,delete l.minor.gridwidth,delete l.minor.griddash)}if(!u.noZeroLine){var k=f("zerolinelayer"),A=f("zerolinecolor",c),b=f("zerolinewidth"),E=n("zeroline",u.showGrid||!!A||!!b);E||(delete l.zerolinelayer,delete l.zerolinecolor,delete l.zerolinewidth)}}}}),zy=de({"src/plots/cartesian/axis_defaults.js"(e,r){"use strict";var t=da(),i=Ma(),a=Qt(),o=Ro(),s=fc(),l=Mu(),n=_v(),u=f1(),c=h0(),f=d0(),h=Ow(),d=Ry(),p=FE(),g=Yd(),m=zl().WEEKDAY_PATTERN,y=zl().HOUR_PATTERN;r.exports=function(M,C,w,k,A){var b=k.letter,E=k.font||{},T=k.splomStash||{},F=w("visible",!k.visibleDflt),D=C._template||{},R=C.type||D.type||"-",P;if(R==="date"){var z=i.getComponentMethod("calendars","handleDefaults");z(M,C,"calendar",k.calendar),k.noTicklabelmode||(P=w("ticklabelmode"))}!k.noTicklabelindex&&(R==="date"||R==="linear")&&w("ticklabelindex");var I="";(!k.noTicklabelposition||R==="multicategory")&&(I=a.coerce(M,C,{ticklabelposition:{valType:"enumerated",dflt:"outside",values:P==="period"?["outside","inside"]:b==="x"?["outside","inside","outside left","inside left","outside right","inside right"]:["outside","inside","outside top","inside top","outside bottom","inside bottom"]}},"ticklabelposition")),k.noTicklabeloverflow||w("ticklabeloverflow",I.indexOf("inside")!==-1?"hide past domain":R==="category"||R==="multicategory"?"allow":"hide past div"),g(C,A),p(M,C,w,k),h(M,C,w,k),k.noHover||(R!=="category"&&w("hoverformat"),k.noUnifiedhovertitle||w("unifiedhovertitle.text"));var L=w("color"),B=L!==l.color.dflt?L:E.color,O=T.label||A._dfltTitle[b];if(f(M,C,w,R,k),!F)return C;w("title.text",O),a.coerceFont(w,"title.font",E,{overrideDflt:{size:a.bigFont(E.size),color:B}}),n(M,C,w,R);var G=k.hasMinor;if(G&&(o.newContainer(C,"minor"),n(M,C,w,R,{isMinor:!0})),c(M,C,w,R,k),u(M,C,w,k),G){var W=k.isMinor;k.isMinor=!0,u(M,C,w,k),k.isMinor=W}d(M,C,w,{dfltColor:L,bgColor:k.bgColor,showGrid:k.showGrid,hasMinor:G,attributes:l}),G&&C.ticklabelindex==null&&!C.minor.ticks&&!C.minor.showgrid&&delete C.minor,(C.showline||C.ticks)&&w("mirror");var X=R==="multicategory";if(!k.noTickson&&(R==="category"||X)&&(C.ticks||C.showgrid)&&(X?(w("tickson","boundaries"),delete C.ticklabelposition):w("tickson")),X){var Z=w("showdividers");Z&&(w("dividercolor"),w("dividerwidth"))}if(R==="date")if(s(M,C,{name:"rangebreaks",inclusionAttr:"enabled",handleItemDefaults:_}),!C.rangebreaks.length)delete C.rangebreaks;else{for(var J=0;J<C.rangebreaks.length;J++)if(C.rangebreaks[J].pattern===m){C._hasDayOfWeekBreaks=!0;break}if(g(C,A),A._has("scattergl")||A._has("splom"))for(var N=0;N<k.data.length;N++){var H=k.data[N];(H.type==="scattergl"||H.type==="splom")&&(H.visible=!1,a.warn(H.type+" traces do not work on axes with rangebreaks. Setting trace "+H.index+" to `visible: false`."))}}return C};function _(S,M,C){function w(P,z){return a.coerce(S,M,l.rangebreaks,P,z)}var k=w("enabled");if(k){var A=w("bounds");if(A&&A.length>=2){var b="",E,T;if(A.length===2){for(E=0;E<2;E++)if(T=x(A[E]),T){b=m;break}}var F=w("pattern",b);if(F===m)for(E=0;E<2;E++)T=x(A[E]),T&&(M.bounds[E]=A[E]=T-1);if(F)for(E=0;E<2;E++)switch(T=A[E],F){case m:if(!t(T)){M.enabled=!1;return}if(T=+T,T!==Math.floor(T)||T<0||T>=7){M.enabled=!1;return}M.bounds[E]=A[E]=T;break;case y:if(!t(T)){M.enabled=!1;return}if(T=+T,T<0||T>24){M.enabled=!1;return}M.bounds[E]=A[E]=T;break}if(C.autorange===!1){var D=C.range;if(D[0]<D[1]){if(A[0]<D[0]&&A[1]>D[1]){M.enabled=!1;return}}else if(A[0]>D[0]&&A[1]<D[1]){M.enabled=!1;return}}}else{var R=w("values");if(R&&R.length)w("dvalue");else{M.enabled=!1;return}}}}var v={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function x(S){if(typeof S=="string")return v[S.slice(0,3).toLowerCase()]}}}),Nw=de({"src/plots/cartesian/position_defaults.js"(e,r){"use strict";var t=da(),i=Qt();r.exports=function(o,s,l,n){var u=n.counterAxes||[],c=n.overlayableAxes||[],f=n.letter,h=n.grid,d=n.overlayingDomain,p,g,m,y,_,v;h&&(g=h._domains[f][h._axisMap[s._id]],p=h._anchors[s._id],g&&(m=h[f+"side"].split(" ")[0],y=h.domain[f][m==="right"||m==="top"?1:0])),g=g||[0,1],p=p||(t(o.position)?"free":u[0]||"free"),m=m||(f==="x"?"bottom":"left"),y=y||0,_=0,v=!1;var x=i.coerce(o,s,{anchor:{valType:"enumerated",values:["free"].concat(u),dflt:p}},"anchor"),S=i.coerce(o,s,{side:{valType:"enumerated",values:f==="x"?["bottom","top"]:["left","right"],dflt:m}},"side");if(x==="free"){if(f==="y"){var M=l("autoshift");M&&(y=S==="left"?d[0]:d[1],v=s.automargin?s.automargin:!0,_=S==="left"?-3:3),l("shift",_)}l("position",y)}l("automargin",v);var C=!1;if(c.length&&(C=i.coerce(o,s,{overlaying:{valType:"enumerated",values:[!1].concat(c),dflt:!1}},"overlaying")),!C){var w=l("domain",g);w[0]>w[1]-1/4096&&(s.domain=g),i.noneOrAll(o.domain,s.domain,g),s.tickmode==="sync"&&(s.tickmode="auto")}return l("layer"),s}}}),aV=de({"src/plots/cartesian/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=sf().isUnifiedHover,o=jE(),s=Ro(),l=l1(),n=Mu(),u=ok(),c=zy(),f=bv(),h=Nw(),d=Hs(),p=d.id2name,g=d.name2id,m=zl().AX_ID_PATTERN,y=Ma(),_=y.traceIs,v=y.getComponentMethod;function x(S,M,C){Array.isArray(S[M])?S[M].push(C):S[M]=[C]}r.exports=function(M,C,w){var k=C.autotypenumbers,A={},b={},E={},T={},F={},D={},R={},P={},z={},I={},L,B;for(L=0;L<w.length;L++){var O=w[L];if(_(O,"cartesian")){var G;if(O.xaxis)G=p(O.xaxis),x(A,G,O);else if(O.xaxes)for(B=0;B<O.xaxes.length;B++)x(A,p(O.xaxes[B]),O);var W;if(O.yaxis)W=p(O.yaxis),x(A,W,O);else if(O.yaxes)for(B=0;B<O.yaxes.length;B++)x(A,p(O.yaxes[B]),O);if(O.type==="funnel"?O.orientation==="h"?(G&&(b[G]=!0),W&&(R[W]=!0)):W&&(E[W]=!0):O.type==="image"?(W&&(P[W]=!0),G&&(P[G]=!0)):(W&&(F[W]=!0,D[W]=!0),(!_(O,"carpet")||O.type==="carpet"&&!O._cheater)&&G&&(T[G]=!0)),O.type==="carpet"&&O._cheater&&G&&(b[G]=!0),_(O,"2dMap")&&(z[G]=!0,z[W]=!0),_(O,"oriented")){var X=O.orientation==="h"?W:G;I[X]=!0}}}var Z=C._subplots,J=Z.xaxis,N=Z.yaxis,H=t.simpleMap(J,p),$=t.simpleMap(N,p),U=H.concat($),V=i.background;J.length&&N.length&&(V=t.coerce(M,C,l,"plot_bgcolor"));var j=i.combine(V,C.paper_bgcolor),q,Y,K,te,ne;function se(){var ke=A[q]||[];ne._traceIndices=ke.map(function(Ee){return Ee.index}),ne._annIndices=[],ne._shapeIndices=[],ne._selectionIndices=[],ne._imgIndices=[],ne._subplotsWith=[],ne._counterAxes=[],ne._name=ne._attr=q,ne._id=Y}function le(ke,Ee){return t.coerce(te,ne,n,ke,Ee)}function ce(ke,Ee){return t.coerce2(te,ne,n,ke,Ee)}function pe(ke){return ke==="x"?N:J}function xe(ke,Ee){for(var De=ke==="x"?H:$,Je=[],Ue=0;Ue<De.length;Ue++){var at=De[Ue];at!==Ee&&!(M[at]||{}).overlaying&&Je.push(g(at))}return Je}var ye={x:pe("x"),y:pe("y")},fe=ye.x.concat(ye.y),ae={},ee=[];function ie(){var ke=te.matches;m.test(ke)&&fe.indexOf(ke)===-1&&(ae[ke]=te.type,ee=Object.keys(ae))}var Q=o(M,C),ue=a(Q);for(L=0;L<U.length;L++){q=U[L],Y=g(q),K=q.charAt(0),t.isPlainObject(M[q])||(M[q]={}),te=M[q],ne=s.newContainer(C,q,K+"axis"),se();var ge=K==="x"&&!T[q]&&b[q]||K==="y"&&!F[q]&&E[q],Me=K==="y"&&(!D[q]&&R[q]||P[q]),Te={hasMinor:!0,letter:K,font:C.font,outerTicks:z[q],showGrid:!I[q],data:A[q]||[],bgColor:j,calendar:C.calendar,automargin:!0,visibleDflt:ge,reverseDflt:Me,autotypenumbersDflt:k,splomStash:((C._splomAxes||{})[K]||{})[Y],noAutotickangles:K==="y"};le("uirevision",C.uirevision),u(te,ne,le,Te),c(te,ne,le,Te,C);var je=ue&&K===Q.charAt(0),Ve=ce("spikecolor",ue?ne.color:void 0),Ze=ce("spikethickness",ue?1.5:void 0),Ke=ce("spikedash",ue?"dot":void 0),vt=ce("spikemode",ue?"across":void 0),xt=ce("spikesnap"),Pt=le("showspikes",!!je||!!Ve||!!Ze||!!Ke||!!vt||!!xt);Pt||(delete ne.spikecolor,delete ne.spikethickness,delete ne.spikedash,delete ne.spikemode,delete ne.spikesnap);var mt=p(te.overlaying),Mt=[0,1];if(C[mt]!==void 0){var lt=p(C[mt].anchor);C[lt]!==void 0&&(Mt=C[lt].domain)}h(te,ne,le,{letter:K,counterAxes:ye[K],overlayableAxes:xe(K,q),grid:C.grid,overlayingDomain:Mt}),le("title.standoff"),ie(),ne._input=te}for(L=0;L<ee.length;){Y=ee[L++],q=p(Y),K=q.charAt(0),t.isPlainObject(M[q])||(M[q]={}),te=M[q],ne=s.newContainer(C,q,K+"axis"),se();var qe={letter:K,font:C.font,outerTicks:z[q],showGrid:!I[q],data:[],bgColor:j,calendar:C.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:k,splomStash:((C._splomAxes||{})[K]||{})[Y]};le("uirevision",C.uirevision),ne.type=ae[Y]||"linear",c(te,ne,le,qe,C),h(te,ne,le,{letter:K,counterAxes:ye[K],overlayableAxes:xe(K,q),grid:C.grid}),le("fixedrange"),le("modebardisable"),ie(),ne._input=te}var Ye=v("rangeslider","handleDefaults"),me=v("rangeselector","handleDefaults");for(L=0;L<H.length;L++)q=H[L],te=M[q],ne=C[q],Ye(M,C,q),ne.type==="date"&&me(te,ne,C,$,ne.calendar),le("fixedrange"),le("modebardisable");for(L=0;L<$.length;L++){q=$[L],te=M[q],ne=C[q];var _e=C[p(ne.anchor)],Ae=v("rangeslider","isVisible")(_e);le("fixedrange",Ae),le("modebardisable")}f.handleDefaults(M,C,{axIds:fe.concat(ee).sort(d.idSort),axHasImage:P})}}}),nV=de({"src/plots/cartesian/transition_axes.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Qt(),o=hn(),s=nn();r.exports=function(n,u,c,f){var h=n._fullLayout;if(u.length===0){s.redrawComponents(n);return}function d(C){var w=C.xaxis,k=C.yaxis;h._defs.select("#"+C.clipId+"> rect").call(o.setTranslate,0,0).call(o.setScale,1,1),C.plot.call(o.setTranslate,w._offset,k._offset).call(o.setScale,1,1);var A=C.plot.selectAll(".scatterlayer .trace");A.selectAll(".point").call(o.setPointGroupScale,1,1),A.selectAll(".textpoint").call(o.setTextPointsScale,1,1),A.call(o.hideOutsideRangePoints,C)}function p(C,w){var k=C.plotinfo,A=k.xaxis,b=k.yaxis,E=A._length,T=b._length,F=!!C.xr1,D=!!C.yr1,R=[];if(F){var P=a.simpleMap(C.xr0,A.r2l),z=a.simpleMap(C.xr1,A.r2l),I=P[1]-P[0],L=z[1]-z[0];R[0]=(P[0]*(1-w)+w*z[0]-P[0])/(P[1]-P[0])*E,R[2]=E*(1-w+w*L/I),A.range[0]=A.l2r(P[0]*(1-w)+w*z[0]),A.range[1]=A.l2r(P[1]*(1-w)+w*z[1])}else R[0]=0,R[2]=E;if(D){var B=a.simpleMap(C.yr0,b.r2l),O=a.simpleMap(C.yr1,b.r2l),G=B[1]-B[0],W=O[1]-O[0];R[1]=(B[1]*(1-w)+w*O[1]-B[1])/(B[0]-B[1])*T,R[3]=T*(1-w+w*W/G),b.range[0]=A.l2r(B[0]*(1-w)+w*O[0]),b.range[1]=b.l2r(B[1]*(1-w)+w*O[1])}else R[1]=0,R[3]=T;s.drawOne(n,A,{skipTitle:!0}),s.drawOne(n,b,{skipTitle:!0}),s.redrawComponents(n,[A._id,b._id]);var X=F?E/R[2]:1,Z=D?T/R[3]:1,J=F?R[0]:0,N=D?R[1]:0,H=F?R[0]/R[2]*E:0,$=D?R[1]/R[3]*T:0,U=A._offset-H,V=b._offset-$;k.clipRect.call(o.setTranslate,J,N).call(o.setScale,1/X,1/Z),k.plot.call(o.setTranslate,U,V).call(o.setScale,X,Z),o.setPointGroupScale(k.zoomScalePts,1/X,1/Z),o.setTextPointsScale(k.zoomScaleTxt,1/X,1/Z)}var g;f&&(g=f());function m(){for(var C={},w=0;w<u.length;w++){var k=u[w],A=k.plotinfo.xaxis,b=k.plotinfo.yaxis;k.xr1&&(C[A._name+".range"]=k.xr1.slice()),k.yr1&&(C[b._name+".range"]=k.yr1.slice())}return g&&g(),i.call("relayout",n,C).then(function(){for(var E=0;E<u.length;E++)d(u[E].plotinfo)})}function y(){for(var C={},w=0;w<u.length;w++){var k=u[w],A=k.plotinfo.xaxis,b=k.plotinfo.yaxis;k.xr0&&(C[A._name+".range"]=k.xr0.slice()),k.yr0&&(C[b._name+".range"]=k.yr0.slice())}return i.call("relayout",n,C).then(function(){for(var E=0;E<u.length;E++)d(u[E].plotinfo)})}var _,v,x,S=t.ease(c.easing);n._transitionData._interruptCallbacks.push(function(){return window.cancelAnimationFrame(x),x=null,y()});function M(){v=Date.now();for(var C=Math.min(1,(v-_)/c.duration),w=S(C),k=0;k<u.length;k++)p(u[k],w);v-_>c.duration?(m(),x=window.cancelAnimationFrame(M)):x=window.requestAnimationFrame(M)}return _=Date.now(),x=window.requestAnimationFrame(M),Promise.resolve()}}}),ml=de({"src/plots/cartesian/index.js"(e){"use strict";var r=Yr(),t=Ma(),i=Qt(),a=Es(),o=hn(),s=$u().getModuleCalcData,l=Hs(),n=zl(),u=Oh(),c=i.ensureSingle;function f(_,v,x){return i.ensureSingle(_,v,x,function(S){S.datum(x)})}var h=n.zindexSeparator;e.name="cartesian",e.attr=["xaxis","yaxis"],e.idRoot=["x","y"],e.idRegex=n.idRegex,e.attrRegex=n.attrRegex,e.attributes=iV(),e.layoutAttributes=Mu(),e.supplyLayoutDefaults=aV(),e.transitionAxes=nV(),e.finalizeSubplots=function(_,v){var x=v._subplots,S=x.xaxis,M=x.yaxis,C=x.cartesian,w=C,k={},A={},b,E,T;for(b=0;b<w.length;b++){var F=w[b].split("y");k[F[0]]=1,A["y"+F[1]]=1}for(b=0;b<S.length;b++)E=S[b],k[E]||(T=(_[l.id2name(E)]||{}).anchor,n.idRegex.y.test(T)||(T="y"),C.push(E+T),w.push(E+T),A[T]||(A[T]=1,i.pushUnique(M,T)));for(b=0;b<M.length;b++)T=M[b],A[T]||(E=(_[l.id2name(T)]||{}).anchor,n.idRegex.x.test(E)||(E="x"),C.push(E+T),w.push(E+T),k[E]||(k[E]=1,i.pushUnique(S,E)));if(!w.length){E="",T="";for(var D in _)if(n.attrRegex.test(D)){var R=D.charAt(0);R==="x"?(!E||+D.slice(5)<+E.slice(5))&&(E=D):(!T||+D.slice(5)<+T.slice(5))&&(T=D)}E=E?l.name2id(E):"x",T=T?l.name2id(T):"y",S.push(E),M.push(T),C.push(E+T)}},e.plot=function(_,v,x,S){var M=_._fullLayout,C=M._subplots.cartesian,w=_.calcdata,k;if(!Array.isArray(v))for(v=[],k=0;k<w.length;k++)v.push(k);for(var A=M._zindices,b=0;b<A.length;b++){var E=A[b];for(k=0;k<C.length;k++){var T=C[k],F=M._plots[T];if(b>0){var D=F.id;if(D.indexOf(h)!==-1)continue;D+=h+(b+1),F=i.extendFlat({},F,{id:D,plot:M._cartesianlayer.selectAll(".subplot").select("."+D)})}for(var R=[],P,z=0;z<w.length;z++){var I=w[z],L=I[0].trace;E===(L.zorder||0)&&L.xaxis+L.yaxis===T&&((v.indexOf(L.index)!==-1||L.carpet)&&(P&&P[0].trace.xaxis+P[0].trace.yaxis===T&&["tonextx","tonexty","tonext"].indexOf(L.fill)!==-1&&R.indexOf(P)===-1&&R.push(P),R.push(I)),P=I)}d(_,F,R,x,S)}}};function d(_,v,x,S,M){for(var C=n.traceLayerClasses,w=_._fullLayout,k=w._zindices,A=w._modules,b,E,T,F=[],D=[],R=0;R<k.length;R++)for(var P=k[R],z=0;z<A.length;z++){b=A[z];var I=b.name,L=t.modules[I].categories;if(L.svg){var B=b.layerName||I+"layer",O=B+(R?Number(R)+1:""),G=b.plot;E=s(x,G,P),T=E[0],x=E[1],T.length&&F.push({i:C.indexOf(B),zindex:R,className:O,plotMethod:G,cdModule:T}),L.zoomScale&&D.push("."+O)}}F.sort(function(Z,J){return(Z.zindex||0)-(J.zindex||0)||Z.i-J.i});var W=v.plot.selectAll("g.mlayer").data(F,function(Z){return Z.className});if(W.enter().append("g").attr("class",function(Z){return Z.className}).classed("mlayer",!0).classed("rangeplot",v.isRangePlot),W.exit().remove(),W.order(),W.each(function(Z){var J=r.select(this),N=Z.className;Z.plotMethod(_,v,Z.cdModule,J,S,M),n.clipOnAxisFalseQuery.indexOf("."+N)===-1&&o.setClipUrl(J,v.layerClipId,_)}),w._has("scattergl")&&(b=t.getModule("scattergl"),T=s(x,b)[0],b.plot(_,v,T)),!_._context.staticPlot&&(v._hasClipOnAxisFalse&&(v.clipOnAxisFalseTraces=v.plot.selectAll(n.clipOnAxisFalseQuery.join(",")).selectAll(".trace")),D.length)){var X=v.plot.selectAll(D.join(",")).selectAll(".trace");v.zoomScalePts=X.selectAll("path.point"),v.zoomScaleTxt=X.selectAll(".textpoint")}}e.clean=function(_,v,x,S){var M=S._plots||{},C=v._plots||{},w=S._subplots||{},k,A,b;if(S._hasOnlyLargeSploms&&!v._hasOnlyLargeSploms)for(b in M)k=M[b],k.plotgroup&&k.plotgroup.remove();var E=S._has&&S._has("gl"),T=v._has&&v._has("gl");if(E&&!T)for(b in M)k=M[b],k._scene&&k._scene.destroy();if(w.xaxis&&w.yaxis){var F=l.listIds({_fullLayout:S});for(A=0;A<F.length;A++){var D=F[A];v[l.id2name(D)]||S._infolayer.selectAll(".g-"+D+"title").remove()}}var R=S._has&&S._has("cartesian"),P=v._has&&v._has("cartesian");if(R&&!P)m(S._cartesianlayer.selectAll(".subplot"),S),S._defs.selectAll(".axesclip").remove(),delete S._axisConstraintGroups,delete S._axisMatchGroups;else if(w.cartesian)for(A=0;A<w.cartesian.length;A++){var z=w.cartesian[A];if(z.indexOf(h)===-1&&!C[z]){var I="."+z+",."+z+"-x,."+z+"-y";S._cartesianlayer.selectAll(I).remove(),y(z,S)}}},e.drawFramework=function(_){var v=_._fullLayout,x=_.calcdata,S,M={};for(S=0;S<x.length;S++){var C=x[S][0],w=C.trace,k=w.zorder||0;M[k]||(M[k]=[]),M[k].push(C)}var A=Object.keys(M).map(Number).sort(i.sorterAsc);A.length||(A=[0]),v._zindices=A;var b=p(_),E=b.length,T=[];for(S=0;S<E;S++)T[S]=b[S].slice();for(var F=1;F<A.length;F++){var D=[];for(S=0;S<E;S++)D[S]=b[S].slice(),D[S][0]+=h+(F+1);T=T.concat(D)}var R=v._cartesianlayer.selectAll(".subplot").data(T,String);R.enter().append("g").attr("class",function(P){return"subplot "+P[0]}),R.order(),R.exit().call(m,v),R.each(function(P){var z=P[0],I=z.indexOf(h),L=I!==-1,B=L?z.slice(0,I):z,O=v._plots[z];O||(O=i.extendFlat({},v._plots[B]),O&&(O.id=z,v._plots[z]=O,v._subplots.cartesian.push(z))),O&&(O.plotgroup=r.select(this),g(_,O),L||(O.draglayer=c(v._draggers,"g",z)))})},e.rangePlot=function(_,v,x){g(_,v),d(_,v,x),a.style(_)};function p(_){var v=_._fullLayout,x=v._zindices.length,S=v._subplots.cartesian,M=S.length,C,w,k,A,b,E,T=[],F=[];for(C=0;C<M;C++){k=S[C],A=v._plots[k],b=A.xaxis,E=A.yaxis;var D=b._mainAxis,R=E._mainAxis,P=D._id+R._id,z=v._plots[P];A.overlays=[],P!==k&&z?(A.mainplot=P,A.mainplotinfo=z,F.push(k)):(A.mainplot=void 0,A.mainplotinfo=void 0,T.push(k))}for(C=0;C<F.length;C++)k=F[C],A=v._plots[k],A.mainplotinfo.overlays.push(A);var I=T.concat(F),L=[];for(C=0;C<M;C++){k=I[C],A=v._plots[k],b=A.xaxis,E=A.yaxis;for(var B=[],O=1;O<=x;O++){var G="";for(O>1&&(G+=h+O),B.push(k+G),w=0;w<A.overlays.length;w++)B.push(A.overlays[w].id+G)}B=B.concat([b.layer,E.layer,b.overlaying||"",E.overlaying||""]),L.push(B)}return L}function g(_,v){var x=_._fullLayout,S=v.plotgroup,M=v.id,C=M.indexOf(h),w=C!==-1,k=n.layerValue2layerClass[v.xaxis.layer],A=n.layerValue2layerClass[v.yaxis.layer],b=x._hasOnlyLargeSploms,E=x._zindices.length>1,T=v.mainplotinfo;if(!v.mainplot||E)if(b)v.xlines=c(S,"path","xlines-above"),v.ylines=c(S,"path","ylines-above"),v.xaxislayer=c(S,"g","xaxislayer-above"),v.yaxislayer=c(S,"g","yaxislayer-above");else{if(!w){var F=c(S,"g","layer-subplot");v.shapelayer=c(F,"g","shapelayer"),v.imagelayer=c(F,"g","imagelayer"),T&&E?(v.minorGridlayer=T.minorGridlayer,v.gridlayer=T.gridlayer,v.zerolinelayer=T.zerolinelayer):(v.minorGridlayer=c(S,"g","minor-gridlayer"),v.gridlayer=c(S,"g","gridlayer"),v.zerolinelayer=c(S,"g","zerolinelayer"));var D=c(S,"g","layer-between");v.shapelayerBetween=c(D,"g","shapelayer"),v.imagelayerBetween=c(D,"g","imagelayer"),c(S,"path","xlines-below"),c(S,"path","ylines-below"),v.overlinesBelow=c(S,"g","overlines-below"),c(S,"g","xaxislayer-below"),c(S,"g","yaxislayer-below"),v.overaxesBelow=c(S,"g","overaxes-below")}v.overplot=c(S,"g","overplot"),v.plot=c(v.overplot,"g",M),T&&E?v.zerolinelayerAbove=T.zerolinelayerAbove:v.zerolinelayerAbove=c(S,"g","zerolinelayer-above"),w||(v.xlines=c(S,"path","xlines-above"),v.ylines=c(S,"path","ylines-above"),v.overlinesAbove=c(S,"g","overlines-above"),c(S,"g","xaxislayer-above"),c(S,"g","yaxislayer-above"),v.overaxesAbove=c(S,"g","overaxes-above"),v.xlines=S.select(".xlines-"+k),v.ylines=S.select(".ylines-"+A),v.xaxislayer=S.select(".xaxislayer-"+k),v.yaxislayer=S.select(".yaxislayer-"+A))}else{var R=T.plotgroup,P=M+"-x",z=M+"-y";v.minorGridlayer=T.minorGridlayer,v.gridlayer=T.gridlayer,v.zerolinelayer=T.zerolinelayer,v.zerolinelayerAbove=T.zerolinelayerAbove,c(T.overlinesBelow,"path",P),c(T.overlinesBelow,"path",z),c(T.overaxesBelow,"g",P),c(T.overaxesBelow,"g",z),v.plot=c(T.overplot,"g",M),c(T.overlinesAbove,"path",P),c(T.overlinesAbove,"path",z),c(T.overaxesAbove,"g",P),c(T.overaxesAbove,"g",z),v.xlines=R.select(".overlines-"+k).select("."+P),v.ylines=R.select(".overlines-"+A).select("."+z),v.xaxislayer=R.select(".overaxes-"+k).select("."+P),v.yaxislayer=R.select(".overaxes-"+A).select("."+z)}w||(b||(f(v.minorGridlayer,"g",v.xaxis._id),f(v.minorGridlayer,"g",v.yaxis._id),v.minorGridlayer.selectAll("g").map(function(I){return I[0]}).sort(l.idSort),f(v.gridlayer,"g",v.xaxis._id),f(v.gridlayer,"g",v.yaxis._id),v.gridlayer.selectAll("g").map(function(I){return I[0]}).sort(l.idSort)),v.xlines.style("fill","none").classed("crisp",!0),v.ylines.style("fill","none").classed("crisp",!0))}function m(_,v){if(_){var x={};_.each(function(A){var b=A[0],E=r.select(this);E.remove(),y(b,v),x[b]=!0});for(var S in v._plots)for(var M=v._plots[S],C=M.overlays||[],w=0;w<C.length;w++){var k=C[w];x[k.id]&&k.plot.selectAll(".trace").remove()}}}function y(_,v){v._draggers.selectAll("g."+_).remove(),v._defs.select("#clip"+v._uid+_+"plot").remove()}e.toSVG=function(_){var v=_._fullLayout._glimages,x=r.select(_).selectAll(".svg-container"),S=x.filter(function(C,w){return w===x.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus");function M(){var C=this,w=C.toDataURL("image/png"),k=v.append("svg:image");k.attr({xmlns:u.svg,"xlink:href":w,preserveAspectRatio:"none",x:0,y:0,width:C.style.width,height:C.style.height})}S.each(M)},e.updateFx=ek().updateFx}}),oV=de({"src/traces/scatter/index.js"(e,r){"use strict";var t=bs();r.exports={hasLines:t.hasLines,hasMarkers:t.hasMarkers,hasText:t.hasText,isBubble:t.isBubble,attributes:tl(),layoutAttributes:Tw(),supplyDefaults:Qq(),crossTraceDefaults:ik(),supplyLayoutDefaults:eV(),calc:Uh().calc,crossTraceCalc:rV(),arraysToCalcdata:Qd(),plot:v1(),colorbar:Yu(),formatLabels:Bw(),style:lf().style,styleOnSelect:lf().styleOnSelect,hoverPoints:g1(),selectPoints:Mv(),animatable:!0,moduleType:"trace",name:"scatter",basePlotModule:ml(),categories:["cartesian","svg","symbols","errorBarsOK","showLegend","scatter-like","zoomScale"],meta:{}}}}),sV=de({"src/components/annotations/draw_arrow_head.js"(e,r){"use strict";var t=Yr(),i=ta(),a=KE(),o=Qt(),s=o.strScale,l=o.strRotate,n=o.strTranslate;r.exports=function(c,f,h){var d=c.node(),p=a[h.arrowhead||0],g=a[h.startarrowhead||0],m=(h.arrowwidth||1)*(h.arrowsize||1),y=(h.arrowwidth||1)*(h.startarrowsize||1),_=f.indexOf("start")>=0,v=f.indexOf("end")>=0,x=p.backoff*m+h.standoff,S=g.backoff*y+h.startstandoff,M,C,w,k;if(d.nodeName==="line"){M={x:+c.attr("x1"),y:+c.attr("y1")},C={x:+c.attr("x2"),y:+c.attr("y2")};var A=M.x-C.x,b=M.y-C.y;if(w=Math.atan2(b,A),k=w+Math.PI,x&&S&&x+S>Math.sqrt(A*A+b*b)){G();return}if(x){if(x*x>A*A+b*b){G();return}var E=x*Math.cos(w),T=x*Math.sin(w);C.x+=E,C.y+=T,c.attr({x2:C.x,y2:C.y})}if(S){if(S*S>A*A+b*b){G();return}var F=S*Math.cos(w),D=S*Math.sin(w);M.x-=F,M.y-=D,c.attr({x1:M.x,y1:M.y})}}else if(d.nodeName==="path"){var R=d.getTotalLength(),P="";if(R<x+S){G();return}var z=d.getPointAtLength(0),I=d.getPointAtLength(.1);w=Math.atan2(z.y-I.y,z.x-I.x),M=d.getPointAtLength(Math.min(S,R)),P="0px,"+S+"px,";var L=d.getPointAtLength(R),B=d.getPointAtLength(R-.1);k=Math.atan2(L.y-B.y,L.x-B.x),C=d.getPointAtLength(Math.max(0,R-x));var O=P?S+x:x;P+=R-O+"px,"+R+"px",c.style("stroke-dasharray",P)}function G(){c.style("stroke-dasharray","0px,100px")}function W(X,Z,J,N){X.path&&(X.noRotate&&(J=0),t.select(d.parentNode).append("path").attr({class:c.attr("class"),d:X.path,transform:n(Z.x,Z.y)+l(J*180/Math.PI)+s(N)}).style({fill:i.rgb(h.arrowcolor),"stroke-width":0}))}_&&W(g,M,w,y),v&&W(p,C,k,m)}}}),jw=de({"src/components/annotations/draw.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Es(),o=Qt(),s=o.strTranslate,l=nn(),n=ta(),u=hn(),c=$s(),f=Zo(),h=md(),d=Uc(),p=Ro().arrayEditor,g=sV();r.exports={draw:m,drawOne:y,drawRaw:v};function m(x){var S=x._fullLayout;S._infolayer.selectAll(".annotation").remove();for(var M=0;M<S.annotations.length;M++)S.annotations[M].visible&&y(x,M);return a.previousPromises(x)}function y(x,S){var M=x._fullLayout,C=M.annotations[S]||{},w=l.getFromId(x,C.xref),k=l.getFromId(x,C.yref);w&&w.setScale(),k&&k.setScale(),v(x,C,S,!1,w,k)}function _(x,S,M,C,w){var k=w[M],A=w[M+"ref"],b=M.indexOf("y")!==-1,E=l.getRefType(A)==="domain",T=b?C.h:C.w;return x?E?k+(b?-S:S)/x._length:x.p2r(x.r2p(k)+S):k+(b?-S:S)/T}function v(x,S,M,C,w,k){var A=x._fullLayout,b=x._fullLayout._size,E=x._context.edits,T,F;C?(T="annotation-"+C,F=C+".annotations"):(T="annotation",F="annotations");var D=p(x.layout,F,S),R=D.modifyBase,P=D.modifyItem,z=D.getUpdateObj;A._infolayer.selectAll("."+T+'[data-index="'+M+'"]').remove();var I="clip"+A._uid+"_ann"+M;if(!S._input||S.visible===!1){t.selectAll("#"+I).remove();return}var L={x:{},y:{}},B=+S.textangle||0,O=A._infolayer.append("g").classed(T,!0).attr("data-index",String(M)).style("opacity",S.opacity),G=O.append("g").classed("annotation-text-g",!0),W=E[S.showarrow?"annotationTail":"annotationPosition"],X=S.captureevents||E.annotationText||W;function Z(se){var le={index:M,annotation:S._input,fullAnnotation:S,event:se};return C&&(le.subplotId=C),le}var J=G.append("g").style("pointer-events",X?"all":null).call(h,"pointer").on("click",function(){x._dragging=!1,x.emit("plotly_clickannotation",Z(t.event))});S.hovertext&&J.on("mouseover",function(){var se=S.hoverlabel,le=se.font,ce=this.getBoundingClientRect(),pe=x.getBoundingClientRect();c.loneHover({x0:ce.left-pe.left,x1:ce.right-pe.left,y:(ce.top+ce.bottom)/2-pe.top,text:S.hovertext,color:se.bgcolor,borderColor:se.bordercolor,fontFamily:le.family,fontSize:le.size,fontColor:le.color,fontWeight:le.weight,fontStyle:le.style,fontVariant:le.variant,fontShadow:le.fontShadow,fontLineposition:le.fontLineposition,fontTextcase:le.fontTextcase},{container:A._hoverlayer.node(),outerContainer:A._paper.node(),gd:x})}).on("mouseout",function(){c.loneUnhover(A._hoverlayer.node())});var N=S.borderwidth,H=S.borderpad,$=N+H,U=J.append("rect").attr("class","bg").style("stroke-width",N+"px").call(n.stroke,S.bordercolor).call(n.fill,S.bgcolor),V=S.width||S.height,j=A._topclips.selectAll("#"+I).data(V?[0]:[]);j.enter().append("clipPath").classed("annclip",!0).attr("id",I).append("rect"),j.exit().remove();var q=S.font,Y=A._meta?o.templateString(S.text,A._meta):S.text,K=J.append("text").classed("annotation-text",!0).text(Y);function te(se){return se.call(u.font,q).attr({"text-anchor":{left:"start",right:"end"}[S.align]||"middle"}),f.convertToTspans(se,x,ne),se}function ne(){var se=K.selectAll("a");if(se.size()===1&&se.text()===K.text()){var le=J.insert("a",":first-child").attr({"xlink:xlink:href":se.attr("xlink:href"),"xlink:xlink:show":se.attr("xlink:show")}).style({cursor:"pointer"});le.node().appendChild(U.node())}var ce=J.select(".annotation-text-math-group"),pe=!ce.empty(),xe=u.bBox((pe?ce:K).node()),ye=xe.width,fe=xe.height,ae=S.width||ye,ee=S.height||fe,ie=Math.round(ae+2*$),Q=Math.round(ee+2*$);function ue(Lt,Ct){return Ct==="auto"&&(Lt<1/3?Ct="left":Lt>2/3?Ct="right":Ct="center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[Ct]}for(var ge=!1,Me=["x","y"],Te=0;Te<Me.length;Te++){var je=Me[Te],Ve=S[je+"ref"]||je,Ze=S["a"+je+"ref"],Ke={x:w,y:k}[je],vt=(B+(je==="x"?0:-90))*Math.PI/180,xt=ie*Math.cos(vt),Pt=Q*Math.sin(vt),mt=Math.abs(xt)+Math.abs(Pt),Mt=S[je+"anchor"],lt=S[je+"shift"]*(je==="x"?1:-1),qe=L[je],Ye,me,_e,Ae,ke,Ee=l.getRefType(Ve);if(Ke&&Ee!=="domain"){var De=Ke.r2fraction(S[je]);(De<0||De>1)&&(Ze===Ve?(De=Ke.r2fraction(S["a"+je]),(De<0||De>1)&&(ge=!0)):ge=!0),Ye=Ke._offset+Ke.r2p(S[je]),Ae=.5}else{var Je=Ee==="domain";je==="x"?(_e=S[je],Ye=Je?Ke._offset+Ke._length*_e:Ye=b.l+b.w*_e):(_e=1-S[je],Ye=Je?Ke._offset+Ke._length*_e:Ye=b.t+b.h*_e),Ae=S.showarrow?.5:_e}if(S.showarrow){qe.head=Ye;var Ue=S["a"+je];if(ke=xt*ue(.5,S.xanchor)-Pt*ue(.5,S.yanchor),Ze===Ve){var at=l.getRefType(Ze);at==="domain"?(je==="y"&&(Ue=1-Ue),qe.tail=Ke._offset+Ke._length*Ue):at==="paper"?je==="y"?(Ue=1-Ue,qe.tail=b.t+b.h*Ue):qe.tail=b.l+b.w*Ue:qe.tail=Ke._offset+Ke.r2p(Ue),me=ke}else qe.tail=Ye+Ue,me=ke+Ue;qe.text=qe.tail+ke;var rt=A[je==="x"?"width":"height"];if(Ve==="paper"&&(qe.head=o.constrain(qe.head,1,rt-1)),Ze==="pixel"){var ft=-Math.max(qe.tail-3,qe.text),At=Math.min(qe.tail+3,qe.text)-rt;ft>0?(qe.tail+=ft,qe.text+=ft):At>0&&(qe.tail-=At,qe.text-=At)}qe.tail+=lt,qe.head+=lt}else ke=mt*ue(Ae,Mt),me=ke,qe.text=Ye+ke;qe.text+=lt,ke+=lt,me+=lt,S["_"+je+"padplus"]=mt/2+me,S["_"+je+"padminus"]=mt/2-me,S["_"+je+"size"]=mt,S["_"+je+"shift"]=ke}if(ge){J.remove();return}var ht=0,Gt=0;if(S.align!=="left"&&(ht=(ae-ye)*(S.align==="center"?.5:1)),S.valign!=="top"&&(Gt=(ee-fe)*(S.valign==="middle"?.5:1)),pe)ce.select("svg").attr({x:$+ht-1,y:$+Gt}).call(u.setClipUrl,V?I:null,x);else{var fr=$+Gt-xe.top,gt=$+ht-xe.left;K.call(f.positionText,gt,fr).call(u.setClipUrl,V?I:null,x)}j.select("rect").call(u.setRect,$,$,ae,ee),U.call(u.setRect,N/2,N/2,ie-N,Q-N),J.call(u.setTranslate,Math.round(L.x.text-ie/2),Math.round(L.y.text-Q/2)),G.attr({transform:"rotate("+B+","+L.x.text+","+L.y.text+")"});var yt=function(Lt,Ct){O.selectAll(".annotation-arrow-g").remove();var $t=L.x.head,mr=L.y.head,br=L.x.tail+Lt,Er=L.y.tail+Ct,Tr=L.x.text+Lt,Ur=L.y.text+Ct,Ai=o.rotationXYMatrix(B,Tr,Ur),oi=o.apply2DTransform(Ai),Qr=o.apply2DTransform2(Ai),ea=+U.attr("width"),$i=+U.attr("height"),ja=Tr-.5*ea,ya=ja+ea,pa=Ur-.5*$i,xi=pa+$i,bi=[[ja,pa,ja,xi],[ja,xi,ya,xi],[ya,xi,ya,pa],[ya,pa,ja,pa]].map(Qr);if(!bi.reduce(function(ze,tt){return ze^!!o.segmentsIntersect($t,mr,$t+1e6,mr+1e6,tt[0],tt[1],tt[2],tt[3])},!1)){bi.forEach(function(ze){var tt=o.segmentsIntersect(br,Er,$t,mr,ze[0],ze[1],ze[2],ze[3]);tt&&(br=tt.x,Er=tt.y)});var Ua=S.arrowwidth,dn=S.arrowcolor,pi=S.arrowside,Jr=O.append("g").style({opacity:n.opacity(dn)}).classed("annotation-arrow-g",!0),Be=Jr.append("path").attr("d","M"+br+","+Er+"L"+$t+","+mr).style("stroke-width",Ua+"px").call(n.stroke,n.rgb(dn));if(g(Be,pi,S),E.annotationPosition&&Be.node().parentNode&&!C){var Fe=$t,Et=mr;if(S.standoff){var St=Math.sqrt(Math.pow($t-br,2)+Math.pow(mr-Er,2));Fe+=S.standoff*(br-$t)/St,Et+=S.standoff*(Er-mr)/St}var zt=Jr.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).classed("cursor-move",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(br-Fe)+","+(Er-Et),transform:s(Fe,Et)}).style("stroke-width",Ua+6+"px").call(n.stroke,"rgba(0,0,0,0)").call(n.fill,"rgba(0,0,0,0)"),Wt,Yt;d.init({element:zt.node(),gd:x,prepFn:function(){var ze=u.getTranslate(J);Wt=ze.x,Yt=ze.y,w&&w.autorange&&R(w._name+".autorange",!0),k&&k.autorange&&R(k._name+".autorange",!0)},moveFn:function(ze,tt){var ct=oi(Wt,Yt),wt=ct[0]+ze,Nt=ct[1]+tt;J.call(u.setTranslate,wt,Nt),P("x",_(w,ze,"x",b,S)),P("y",_(k,tt,"y",b,S)),S.axref===S.xref&&P("ax",_(w,ze,"ax",b,S)),S.ayref===S.yref&&P("ay",_(k,tt,"ay",b,S)),Jr.attr("transform",s(ze,tt)),G.attr({transform:"rotate("+B+","+wt+","+Nt+")"})},doneFn:function(){i.call("_guiRelayout",x,z());var ze=document.querySelector(".js-notes-box-panel");ze&&ze.redraw(ze.selectedObj)}})}}};if(S.showarrow&&yt(0,0),W){var kt;d.init({element:J.node(),gd:x,prepFn:function(){kt=G.attr("transform")},moveFn:function(Lt,Ct){var $t="pointer";if(S.showarrow)S.axref===S.xref?P("ax",_(w,Lt,"ax",b,S)):P("ax",S.ax+Lt),S.ayref===S.yref?P("ay",_(k,Ct,"ay",b.w,S)):P("ay",S.ay+Ct),yt(Lt,Ct);else{if(C)return;var mr,br;if(w)mr=_(w,Lt,"x",b,S);else{var Er=S._xsize/b.w,Tr=S.x+(S._xshift-S.xshift)/b.w-Er/2;mr=d.align(Tr+Lt/b.w,Er,0,1,S.xanchor)}if(k)br=_(k,Ct,"y",b,S);else{var Ur=S._ysize/b.h,Ai=S.y-(S._yshift+S.yshift)/b.h-Ur/2;br=d.align(Ai-Ct/b.h,Ur,0,1,S.yanchor)}P("x",mr),P("y",br),(!w||!k)&&($t=d.getCursor(w?.5:mr,k?.5:br,S.xanchor,S.yanchor))}G.attr({transform:s(Lt,Ct)+kt}),h(J,$t)},clickFn:function(Lt,Ct){S.captureevents&&x.emit("plotly_clickannotation",Z(Ct))},doneFn:function(){h(J),i.call("_guiRelayout",x,z());var Lt=document.querySelector(".js-notes-box-panel");Lt&&Lt.redraw(Lt.selectedObj)}})}}E.annotationText?K.call(f.makeEditable,{delegate:J,gd:x}).call(te).on("edit",function(se){S.text=se,this.call(te),P("text",se),w&&w.autorange&&R(w._name+".autorange",!0),k&&k.autorange&&R(k._name+".autorange",!0),i.call("_guiRelayout",x,z())}):K.call(te)}}}),lV=de({"src/components/annotations/click.js"(e,r){"use strict";var t=Qt(),i=Ma(),a=Ro().arrayEditor;r.exports={hasClickToShow:o,onClick:s};function o(u,c){var f=l(u,c);return f.on.length>0||f.explicitOff.length>0}function s(u,c){var f=l(u,c),h=f.on,d=f.off.concat(f.explicitOff),p={},g=u._fullLayout.annotations,m,y;if(h.length||d.length){for(m=0;m<h.length;m++)y=a(u.layout,"annotations",g[h[m]]),y.modifyItem("visible",!0),t.extendFlat(p,y.getUpdateObj());for(m=0;m<d.length;m++)y=a(u.layout,"annotations",g[d[m]]),y.modifyItem("visible",!1),t.extendFlat(p,y.getUpdateObj());return i.call("update",u,{},p)}}function l(u,c){var f=u._fullLayout.annotations,h=[],d=[],p=[],g=(c||[]).length,m,y,_,v,x,S,M,C;for(m=0;m<f.length;m++)if(_=f[m],v=_.clicktoshow,v){for(y=0;y<g;y++)if(x=c[y],S=x.xaxis,M=x.yaxis,S._id===_.xref&&M._id===_.yref&&S.d2r(x.x)===n(_._xclick,S)&&M.d2r(x.y)===n(_._yclick,M)){_.visible?v==="onout"?C=d:C=p:C=h,C.push(m);break}y===g&&_.visible&&v==="onout"&&d.push(m)}return{on:h,off:d,explicitOff:p}}function n(u,c){return c.type==="log"?c.l2r(u):c.d2r(u)}}}),sk=de({"src/components/annotations/common_defaults.js"(e,r){"use strict";var t=Qt(),i=ta();r.exports=function(o,s,l,n){n("opacity");var u=n("bgcolor"),c=n("bordercolor"),f=i.opacity(c);n("borderpad");var h=n("borderwidth"),d=n("showarrow");n("text",d?" ":l._dfltTitle.annotation),n("textangle"),t.coerceFont(n,"font",l.font),n("width"),n("align");var p=n("height");if(p&&n("valign"),d){var g=n("arrowside"),m,y;g.indexOf("end")!==-1&&(m=n("arrowhead"),y=n("arrowsize")),g.indexOf("start")!==-1&&(n("startarrowhead",m),n("startarrowsize",y)),n("arrowcolor",f?s.bordercolor:i.defaultLine),n("arrowwidth",(f&&h||1)*2),n("standoff"),n("startstandoff")}var _=n("hovertext"),v=l.hoverlabel||{};if(_){var x=n("hoverlabel.bgcolor",v.bgcolor||(i.opacity(u)?i.rgb(u):i.defaultLine)),S=n("hoverlabel.bordercolor",v.bordercolor||i.contrast(x)),M=t.extendFlat({},v.font);M.color||(M.color=S),t.coerceFont(n,"hoverlabel.font",M)}n("captureevents",!!_)}}}),uV=de({"src/components/annotations/defaults.js"(e,r){"use strict";var t=Qt(),i=nn(),a=fc(),o=sk(),s=g0();r.exports=function(u,c){a(u,c,{name:"annotations",handleItemDefaults:l})};function l(n,u,c){function f(b,E){return t.coerce(n,u,s,b,E)}var h=f("visible"),d=f("clicktoshow");if(h||d){o(n,u,c,f);for(var p=u.showarrow,g=["x","y"],m=[-10,-30],y={_fullLayout:c},_=0;_<2;_++){var v=g[_],x=i.coerceRef(n,u,y,v,"","paper");if(x!=="paper"){var S=i.getFromId(y,x);S._annIndices.push(u._index)}if(i.coercePosition(u,y,f,x,v,.5),p){var M="a"+v,C=i.coerceRef(n,u,y,M,"pixel",["pixel","paper"]);C!=="pixel"&&C!==x&&(C=u[M]="pixel");var w=C==="pixel"?m[_]:.4;i.coercePosition(u,y,f,C,M,w)}f(v+"anchor"),f(v+"shift")}if(t.noneOrAll(n,u,["x","y"]),p&&t.noneOrAll(n,u,["ax","ay"]),d){var k=f("xclick"),A=f("yclick");u._xclick=k===void 0?u.x:i.cleanPosition(k,y,u.xref),u._yclick=A===void 0?u.y:i.cleanPosition(A,y,u.yref)}}}}}),cV=de({"src/components/annotations/calc_autorange.js"(e,r){"use strict";var t=Qt(),i=nn(),a=jw().draw;r.exports=function(n){var u=n._fullLayout,c=t.filterVisible(u.annotations);if(c.length&&n._fullData.length)return t.syncOrAsync([a,o],n)};function o(l){var n=l._fullLayout;t.filterVisible(n.annotations).forEach(function(u){var c=i.getFromId(l,u.xref),f=i.getFromId(l,u.yref),h=i.getRefType(u.xref),d=i.getRefType(u.yref);u._extremes={},h==="range"&&s(u,c),d==="range"&&s(u,f)})}function s(l,n){var u=n._id,c=u.charAt(0),f=l[c],h=l["a"+c],d=l[c+"ref"],p=l["a"+c+"ref"],g=l["_"+c+"padplus"],m=l["_"+c+"padminus"],y={x:1,y:-1}[c]*l[c+"shift"],_=3*l.arrowsize*l.arrowwidth||0,v=_+y,x=_-y,S=3*l.startarrowsize*l.arrowwidth||0,M=S+y,C=S-y,w;if(p===d){var k=i.findExtremes(n,[n.r2c(f)],{ppadplus:v,ppadminus:x}),A=i.findExtremes(n,[n.r2c(h)],{ppadplus:Math.max(g,M),ppadminus:Math.max(m,C)});w={min:[k.min[0],A.min[0]],max:[k.max[0],A.max[0]]}}else M=h?M+h:M,C=h?C-h:C,w=i.findExtremes(n,[n.r2c(f)],{ppadplus:Math.max(g,v,M),ppadminus:Math.max(m,x,C)});l._extremes[u]=w}}}),fV=de({"src/components/annotations/convert_coords.js"(e,r){"use strict";var t=da(),i=o1();r.exports=function(o,s,l,n){s=s||{};var u=l==="log"&&s.type==="linear",c=l==="linear"&&s.type==="log";if(!(u||c))return;var f=o._fullLayout.annotations,h=s._id.charAt(0),d,p;function g(y){var _=d[y],v=null;u?v=i(_,s.range):v=Math.pow(10,_),t(v)||(v=null),n(p+y,v)}for(var m=0;m<f.length;m++)d=f[m],p="annotations["+m+"].",d[h+"ref"]===s._id&&g(h),d["a"+h+"ref"]===s._id&&g("a"+h)}}}),hV=de({"src/components/annotations/index.js"(e,r){"use strict";var t=jw(),i=lV();r.exports={moduleType:"component",name:"annotations",layoutAttributes:g0(),supplyLayoutDefaults:uV(),includeBasePlot:Iy()("annotations"),calcAutorange:cV(),draw:t.draw,drawOne:t.drawOne,drawRaw:t.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:fV()}}}),Uw=de({"src/components/annotations3d/attributes.js"(e,r){"use strict";var t=g0(),i=Ps().overrideAll,a=Ro().templatedArray;r.exports=i(a("annotation",{visible:t.visible,x:{valType:"any"},y:{valType:"any"},z:{valType:"any"},ax:{valType:"number"},ay:{valType:"number"},xanchor:t.xanchor,xshift:t.xshift,yanchor:t.yanchor,yshift:t.yshift,text:t.text,textangle:t.textangle,font:t.font,width:t.width,height:t.height,opacity:t.opacity,align:t.align,valign:t.valign,bgcolor:t.bgcolor,bordercolor:t.bordercolor,borderpad:t.borderpad,borderwidth:t.borderwidth,showarrow:t.showarrow,arrowcolor:t.arrowcolor,arrowhead:t.arrowhead,startarrowhead:t.startarrowhead,arrowside:t.arrowside,arrowsize:t.arrowsize,startarrowsize:t.startarrowsize,arrowwidth:t.arrowwidth,standoff:t.standoff,startstandoff:t.startstandoff,hovertext:t.hovertext,hoverlabel:t.hoverlabel,captureevents:t.captureevents}),"calc","from-root")}}),dV=de({"src/components/annotations3d/defaults.js"(e,r){"use strict";var t=Qt(),i=nn(),a=fc(),o=sk(),s=Uw();r.exports=function(u,c,f){a(u,c,{name:"annotations",handleItemDefaults:l,fullLayout:f.fullLayout})};function l(n,u,c,f){function h(g,m){return t.coerce(n,u,s,g,m)}function d(g){var m=g+"axis",y={_fullLayout:{}};return y._fullLayout[m]=c[m],i.coercePosition(u,y,h,g,g,.5)}var p=h("visible");p&&(o(n,u,f.fullLayout,h),d("x"),d("y"),d("z"),t.noneOrAll(n,u,["x","y","z"]),u.xref="x",u.yref="y",u.zref="z",h("xanchor"),h("yanchor"),h("xshift"),h("yshift"),u.showarrow&&(u.axref="pixel",u.ayref="pixel",h("ax",-10),h("ay",-30),t.noneOrAll(n,u,["ax","ay"])))}}}),pV=de({"src/components/annotations3d/convert.js"(e,r){"use strict";var t=Qt(),i=nn();r.exports=function(s){for(var l=s.fullSceneLayout,n=l.annotations,u=0;u<n.length;u++)a(n[u],s);s.fullLayout._infolayer.selectAll(".annotation-"+s.id).remove()};function a(o,s){var l=s.fullSceneLayout,n=l.domain,u=s.fullLayout._size,c={pdata:null,type:"linear",autorange:!1,range:[-1/0,1/0]};o._xa={},t.extendFlat(o._xa,c),i.setConvert(o._xa),o._xa._offset=u.l+n.x[0]*u.w,o._xa.l2p=function(){return .5*(1+o._pdata[0]/o._pdata[3])*u.w*(n.x[1]-n.x[0])},o._ya={},t.extendFlat(o._ya,c),i.setConvert(o._ya),o._ya._offset=u.t+(1-n.y[1])*u.h,o._ya.l2p=function(){return .5*(1-o._pdata[1]/o._pdata[3])*u.h*(n.y[1]-n.y[0])}}}}),lk=de({"src/plots/gl3d/project.js"(e,r){"use strict";function t(a,o){var s=[0,0,0,0],l,n;for(l=0;l<4;++l)for(n=0;n<4;++n)s[n]+=a[4*l+n]*o[l];return s}function i(a,o){var s=t(a.projection,t(a.view,t(a.model,[o[0],o[1],o[2],1])));return s}r.exports=i}}),vV=de({"src/components/annotations3d/draw.js"(e,r){"use strict";var t=jw().drawRaw,i=lk(),a=["x","y","z"];r.exports=function(s){for(var l=s.fullSceneLayout,n=s.dataScale,u=l.annotations,c=0;c<u.length;c++){for(var f=u[c],h=!1,d=0;d<3;d++){var p=a[d],g=f[p],m=l[p+"axis"],y=m.r2fraction(g);if(y<0||y>1){h=!0;break}}h?s.fullLayout._infolayer.select(".annotation-"+s.id+'[data-index="'+c+'"]').remove():(f._pdata=i(s.glplot.cameraParams,[l.xaxis.r2l(f.x)*n[0],l.yaxis.r2l(f.y)*n[1],l.zaxis.r2l(f.z)*n[2]]),t(s.graphDiv,f,c,s.id,f._xa,f._ya))}}}}),mV=de({"src/components/annotations3d/index.js"(e,r){"use strict";var t=Ma(),i=Qt();r.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:Uw()}}},layoutAttributes:Uw(),handleDefaults:dV(),includeBasePlot:a,convert:pV(),draw:vV()};function a(o,s){var l=t.subplotsRegistry.gl3d;if(l)for(var n=l.attrRegex,u=Object.keys(o),c=0;c<u.length;c++){var f=u[c];n.test(f)&&(o[f].annotations||[]).length&&(i.pushUnique(s._basePlotModules,l),i.pushUnique(s._subplots.gl3d,f))}}}}),uk=de({"src/components/shapes/attributes.js"(e,r){"use strict";var t=zl(),i=us(),a=tl().line,o=fu().dash,s=fn().extendFlat,l=Ro().templatedArray,n=Py(),u=ri(),c=g0(),{shapeTexttemplateAttrs:f,templatefallbackAttrs:h}=Vo(),d=_w();r.exports=l("shape",{visible:s({},u.visible,{editType:"calc+arraydraw"}),showlegend:{valType:"boolean",dflt:!1,editType:"calc+arraydraw"},legend:s({},u.legend,{editType:"calc+arraydraw"}),legendgroup:s({},u.legendgroup,{editType:"calc+arraydraw"}),legendgrouptitle:{text:s({},u.legendgrouptitle.text,{editType:"calc+arraydraw"}),font:i({editType:"calc+arraydraw"}),editType:"calc+arraydraw"},legendrank:s({},u.legendrank,{editType:"calc+arraydraw"}),legendwidth:s({},u.legendwidth,{editType:"calc+arraydraw"}),type:{valType:"enumerated",values:["circle","rect","path","line"],editType:"calc+arraydraw"},layer:{valType:"enumerated",values:["below","above","between"],dflt:"above",editType:"arraydraw"},xref:s({},c.xref,{arrayOk:!0}),xsizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},xanchor:{valType:"any",editType:"calc+arraydraw"},x0:{valType:"any",editType:"calc+arraydraw"},x1:{valType:"any",editType:"calc+arraydraw"},x0shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},x1shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},yref:s({},c.yref,{arrayOk:!0}),ysizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},yanchor:{valType:"any",editType:"calc+arraydraw"},y0:{valType:"any",editType:"calc+arraydraw"},y1:{valType:"any",editType:"calc+arraydraw"},y0shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},y1shift:{valType:"number",dflt:0,min:-1,max:1,editType:"calc"},path:{valType:"string",editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},line:{color:s({},a.color,{editType:"arraydraw"}),width:s({},a.width,{editType:"calc+arraydraw"}),dash:s({},o,{editType:"arraydraw"}),editType:"calc+arraydraw"},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},fillrule:{valType:"enumerated",values:["evenodd","nonzero"],dflt:"evenodd",editType:"arraydraw"},editable:{valType:"boolean",dflt:!1,editType:"calc+arraydraw"},label:{text:{valType:"string",dflt:"",editType:"arraydraw"},texttemplate:f({},{keys:Object.keys(d)}),texttemplatefallback:h({editType:"arraydraw"}),font:i({editType:"calc+arraydraw",colorEditType:"arraydraw"}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right","start","middle","end"],editType:"arraydraw"},textangle:{valType:"angle",dflt:"auto",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],editType:"calc+arraydraw"},padding:{valType:"number",dflt:3,min:0,editType:"arraydraw"},editType:"arraydraw"},editType:"arraydraw"})}}),gV=de({"src/components/shapes/defaults.js"(e,r){"use strict";var t=Qt(),i=nn(),a=fc(),o=uk(),s=m0();r.exports=function(c,f){a(c,f,{name:"shapes",handleItemDefaults:n})};function l(u,c){return u?"bottom":c.indexOf("top")!==-1?"top":c.indexOf("bottom")!==-1?"bottom":"middle"}function n(u,c,f){function h(E,T){return t.coerce(u,c,o,E,T)}c._isShape=!0;var d=h("visible");if(!d)return;var p=h("showlegend");h("legend"),h("legendgroup"),p&&(h("legendwidth"),h("legendgrouptitle.text"),t.coerceFont(h,"legendgrouptitle.font"),h("legendrank"));var g=h("path"),m=g?"path":"rect",y=h("type",m),_=y!=="path";_&&delete c.path,h("editable"),h("layer"),h("opacity"),h("fillcolor"),h("fillrule");var v=h("line.width");v&&(h("line.color"),h("line.dash"));var x=h("xsizemode"),S=h("ysizemode");let M=[.25,.75],C=[0,10];["x","y"].forEach(E=>{var T=E+"anchor",F=E==="x"?x:S,D={_fullLayout:f},R,P,z,I;let L=E+"ref",B=u[L];if(Array.isArray(B)&&B.length>0){let O=s.countDefiningCoords(y,g,E);I=i.coerceRefArray(u,c,D,E,void 0,"paper",O),c["_"+E+"refArray"]=!0}else I=i.coerceRef(u,c,D,E,void 0,"paper");if(Array.isArray(I))I.forEach(function(O){i.getRefType(O)==="range"&&(R=i.getFromId(D,O),R&&R._shapeIndices.indexOf(c._index)===-1&&R._shapeIndices.push(c._index))}),_&&[0,1].forEach(function(O){let G=I[O];i.getRefType(G)==="range"?(R=i.getFromId(D,G),P=s.shapePositionToRange(R),z=s.rangeToShapePosition(R),(R.type==="category"||R.type==="multicategory")&&h(E+O+"shift")):P=z=t.identity;let X=E+O,Z=u[X];if(u[X]=P(u[X],!0),F==="pixel"?h(X,C[O]):i.coercePosition(c,D,h,G,X,M[O]),c[X]=z(c[X]),u[X]=Z,O===0&&F==="pixel"){let J=u[T];u[T]=P(u[T],!0),i.coercePosition(c,D,h,G,T,.25),c[T]=z(c[T]),u[T]=J}});else{if(i.getRefType(I)==="range"?(R=i.getFromId(D,I),R._shapeIndices.push(c._index),z=s.rangeToShapePosition(R),P=s.shapePositionToRange(R),_&&(R.type==="category"||R.type==="multicategory")&&(h(E+"0shift"),h(E+"1shift"))):P=z=t.identity,_){let G=E+"0",W=E+"1",X=u[G],Z=u[W];u[G]=P(u[G],!0),u[W]=P(u[W],!0),F==="pixel"?(h(G,C[0]),h(W,C[1])):(i.coercePosition(c,D,h,I,G,M[0]),i.coercePosition(c,D,h,I,W,M[1])),c[G]=z(c[G]),c[W]=z(c[W]),u[G]=X,u[W]=Z}if(F==="pixel"){let G=u[T];u[T]=P(u[T],!0),i.coercePosition(c,D,h,I,T,.25),c[T]=z(c[T]),u[T]=G}}}),_&&t.noneOrAll(u,c,["x0","x1","y0","y1"]);var w=y==="line",k,A;if(_&&(k=h("label.texttemplate"),h("label.texttemplatefallback")),k||(A=h("label.text")),A||k){h("label.textangle");var b=h("label.textposition",w?"middle":"middle center");h("label.xanchor"),h("label.yanchor",l(w,b)),h("label.padding"),t.coerceFont(h,"label.font",f.font)}}}}),yV=de({"src/components/shapes/draw_newshape/defaults.js"(e,r){"use strict";var t=ta(),i=Qt();function a(o,s){return o?"bottom":s.indexOf("top")!==-1?"top":s.indexOf("bottom")!==-1?"bottom":"middle"}r.exports=function(s,l,n){n("newshape.visible"),n("newshape.name"),n("newshape.showlegend"),n("newshape.legend"),n("newshape.legendwidth"),n("newshape.legendgroup"),n("newshape.legendgrouptitle.text"),i.coerceFont(n,"newshape.legendgrouptitle.font"),n("newshape.legendrank"),n("newshape.drawdirection"),n("newshape.layer"),n("newshape.fillcolor"),n("newshape.fillrule"),n("newshape.opacity");var u=n("newshape.line.width");if(u){var c=(s||{}).plot_bgcolor||"#FFF";n("newshape.line.color",t.contrast(c)),n("newshape.line.dash")}var f=s.dragmode==="drawline",h=n("newshape.label.text"),d=n("newshape.label.texttemplate");if(n("newshape.label.texttemplatefallback"),h||d){n("newshape.label.textangle");var p=n("newshape.label.textposition",f?"middle":"middle center");n("newshape.label.xanchor"),n("newshape.label.yanchor",a(f,p)),n("newshape.label.padding"),i.coerceFont(n,"newshape.label.font",l.font)}n("activeshape.fillcolor"),n("activeshape.opacity")}}}),_V=de({"src/components/shapes/calc_autorange.js"(e,r){"use strict";var t=Qt(),i=nn(),a=Dy(),o=m0();r.exports=function(h){var d=h._fullLayout,p=t.filterVisible(d.shapes);if(!(!p.length||!h._fullData.length))for(var g=0;g<p.length;g++){var m=p[g];m._extremes={};var y,_,v=i.getRefType(m.xref),x=i.getRefType(m.yref);if(v==="array"){let S=s(h,m,"x");Object.entries(S).forEach(([M,C])=>{y=i.getFromId(h,M),m._extremes[y._id]=i.findExtremes(y,C,l(m))})}else m.xref!=="paper"&&v!=="domain"&&(y=i.getFromId(h,m.xref),_=c(y,m,a.paramIsX),_&&(m._extremes[y._id]=i.findExtremes(y,_,l(m))));if(x==="array"){let S=s(h,m,"y");Object.entries(S).forEach(([M,C])=>{y=i.getFromId(h,M),m._extremes[y._id]=i.findExtremes(y,C,n(m))})}else m.yref!=="paper"&&x!=="domain"&&(y=i.getFromId(h,m.yref),_=c(y,m,a.paramIsY),_&&(m._extremes[y._id]=i.findExtremes(y,_,n(m))))}};function s(f,h,d){let p=h[d+"ref"],g=d==="x"?a.paramIsX:a.paramIsY;function m(M,C){M==="paper"||i.getRefType(M)==="domain"||(y[M]||(y[M]=[]),y[M].push(C))}let y={};if(h.type==="path"&&h.path){let M=h.path.match(a.segmentRE)||[];for(var _=0,v=0;v<M.length;v++){let C=M[v],w=C.charAt(0),k=g[w].drawn;if(k===void 0)continue;let A=C.slice(1).match(a.paramRE);A&&A.length>k&&(m(p[_],A[k]),_++)}}else m(p[0],h[d+"0"]),m(p[1],h[d+"1"]);let x={};for(let M in y){let C=i.getFromId(f,M);if(C){var S=C.type==="category"||C.type==="multicategory"?C.r2c:C.d2c;C.type==="date"&&(S=o.decodeDate(S)),x[C._id]=y[M].map(S)}}return x}function l(f){return u(f.line.width,f.xsizemode,f.x0,f.x1,f.path,!1)}function n(f){return u(f.line.width,f.ysizemode,f.y0,f.y1,f.path,!0)}function u(f,h,d,p,g,m){var y=f/2,_=m;if(h==="pixel"){var v=g?o.extractPathCoords(g,m?a.paramIsY:a.paramIsX):[d,p],x=t.aggNums(Math.max,null,v),S=t.aggNums(Math.min,null,v),M=S<0?Math.abs(S)+y:y,C=x>0?x+y:y;return{ppad:y,ppadplus:_?M:C,ppadminus:_?C:M}}else return{ppad:y}}function c(f,h,d){var p=f._id.charAt(0)==="x"?"x":"y",g=f.type==="category"||f.type==="multicategory",m,y,_=0,v=0,x=g?f.r2c:f.d2c,S=h[p+"sizemode"]==="scaled";if(S?(m=h[p+"0"],y=h[p+"1"],g&&(_=h[p+"0shift"],v=h[p+"1shift"])):(m=h[p+"anchor"],y=h[p+"anchor"]),m!==void 0)return[x(m)+_,x(y)+v];if(h.path){var M=1/0,C=-1/0,w=h.path.match(a.segmentRE),k,A,b,E,T;for(f.type==="date"&&(x=o.decodeDate(x)),k=0;k<w.length;k++)A=w[k],b=d[A.charAt(0)].drawn,b!==void 0&&(E=w[k].slice(1).match(a.paramRE),!(!E||E.length<b)&&(T=x(E[b]),T<M&&(M=T),T>C&&(C=T)));if(C>=M)return[M,C]}}}}),xV=de({"src/components/shapes/index.js"(e,r){"use strict";var t=Lw();r.exports={moduleType:"component",name:"shapes",layoutAttributes:uk(),supplyLayoutDefaults:gV(),supplyDrawNewShapeDefaults:yV(),includeBasePlot:Iy()("shapes"),calcAutorange:_V(),draw:t.draw,drawOne:t.drawOne}}}),ck=de({"src/components/images/attributes.js"(e,r){"use strict";var t=zl(),i=Ro().templatedArray,a=Py();r.exports=i("image",{visible:{valType:"boolean",dflt:!0,editType:"arraydraw"},source:{valType:"string",editType:"arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},sizex:{valType:"number",dflt:0,editType:"arraydraw"},sizey:{valType:"number",dflt:0,editType:"arraydraw"},sizing:{valType:"enumerated",values:["fill","contain","stretch"],dflt:"contain",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},x:{valType:"any",dflt:0,editType:"arraydraw"},y:{valType:"any",dflt:0,editType:"arraydraw"},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left",editType:"arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"top",editType:"arraydraw"},xref:{valType:"enumerated",values:["paper",t.idRegex.x.toString()],dflt:"paper",editType:"arraydraw"},yref:{valType:"enumerated",values:["paper",t.idRegex.y.toString()],dflt:"paper",editType:"arraydraw"},editType:"arraydraw"})}}),bV=de({"src/components/images/defaults.js"(e,r){"use strict";var t=Qt(),i=nn(),a=fc(),o=ck(),s="images";r.exports=function(u,c){var f={name:s,handleItemDefaults:l};a(u,c,f)};function l(n,u,c){function f(x,S){return t.coerce(n,u,o,x,S)}var h=f("source"),d=f("visible",!!h);if(!d)return u;f("layer"),f("xanchor"),f("yanchor"),f("sizex"),f("sizey"),f("sizing"),f("opacity");for(var p={_fullLayout:c},g=["x","y"],m=0;m<2;m++){var y=g[m],_=i.coerceRef(n,u,p,y,"paper",void 0);if(_!=="paper"){var v=i.getFromId(p,_);v._imgIndices.push(u._index)}i.coercePosition(u,p,f,_,y,0)}return u}}}),wV=de({"src/components/images/draw.js"(e,r){"use strict";var t=Yr(),i=hn(),a=nn(),o=Hs(),s=Oh();r.exports=function(n){var u=n._fullLayout,c=[],f={},h=[],d,p;for(p=0;p<u.images.length;p++){var g=u.images[p];if(g.visible)if(g.layer==="below"&&g.xref!=="paper"&&g.yref!=="paper"){d=o.ref2id(g.xref)+o.ref2id(g.yref);var m=u._plots[d];if(!m){h.push(g);continue}m.mainplot&&(d=m.mainplot.id),f[d]||(f[d]=[]),f[d].push(g)}else g.layer==="above"?c.push(g):h.push(g)}var y={x:{left:{sizing:"xMin",offset:0},center:{sizing:"xMid",offset:-1/2},right:{sizing:"xMax",offset:-1}},y:{top:{sizing:"YMin",offset:0},middle:{sizing:"YMid",offset:-1/2},bottom:{sizing:"YMax",offset:-1}}};function _(b){var E=t.select(this);if(this._imgSrc!==b.source)if(E.attr("xmlns",s.svg),!n._context.staticPlot||b.source&&b.source.slice(0,5)==="data:")E.attr("xlink:href",b.source),this._imgSrc=b.source;else{var T=new Promise(function(F){var D=new Image;this.img=D,D.setAttribute("crossOrigin","anonymous"),D.onerror=R,D.onload=function(){var P=document.createElement("canvas");P.width=this.width,P.height=this.height;var z=P.getContext("2d",{willReadFrequently:!0});z.drawImage(this,0,0);var I=P.toDataURL("image/png");E.attr("xlink:href",I),F()},E.on("error",R),D.src=b.source,this._imgSrc=b.source;function R(){E.remove(),F()}}.bind(this));n._promises.push(T)}}function v(b){var E=t.select(this),T=a.getFromId(n,b.xref),F=a.getFromId(n,b.yref),D=a.getRefType(b.xref)==="domain",R=a.getRefType(b.yref)==="domain",P=u._size,z,I;T!==void 0?z=typeof b.xref=="string"&&D?T._length*b.sizex:Math.abs(T.l2p(b.sizex)-T.l2p(0)):z=b.sizex*P.w,F!==void 0?I=typeof b.yref=="string"&&R?F._length*b.sizey:Math.abs(F.l2p(b.sizey)-F.l2p(0)):I=b.sizey*P.h;var L=z*y.x[b.xanchor].offset,B=I*y.y[b.yanchor].offset,O=y.x[b.xanchor].sizing+y.y[b.yanchor].sizing,G,W;switch(T!==void 0?G=typeof b.xref=="string"&&D?T._length*b.x+T._offset:T.r2p(b.x)+T._offset:G=b.x*P.w+P.l,G+=L,F!==void 0?W=typeof b.yref=="string"&&R?F._length*(1-b.y)+F._offset:F.r2p(b.y)+F._offset:W=P.h-b.y*P.h+P.t,W+=B,b.sizing){case"fill":O+=" slice";break;case"stretch":O="none";break}E.attr({x:G,y:W,width:z,height:I,preserveAspectRatio:O,opacity:b.opacity});var X=T&&a.getRefType(b.xref)!=="domain"?T._id:"",Z=F&&a.getRefType(b.yref)!=="domain"?F._id:"",J=X+Z;i.setClipUrl(E,J?"clip"+u._uid+J:null,n)}function x(b){return[b.xref,b.x,b.sizex,b.yref,b.y,b.sizey].join("_")}function S(b,E){return b._index-E._index}var M=u._imageLowerLayer.selectAll("image").data(h,x),C=u._imageUpperLayer.selectAll("image").data(c,x);M.enter().append("image"),C.enter().append("image"),M.exit().remove(),C.exit().remove(),M.each(function(b){_.bind(this)(b),v.bind(this)(b)}),C.each(function(b){_.bind(this)(b),v.bind(this)(b)}),M.sort(S),C.sort(S);var w=Object.keys(u._plots);for(p=0;p<w.length;p++){d=w[p];var k=u._plots[d];if(k.imagelayer){var A=k.imagelayer.selectAll("image").data(f[d]||[],x);A.enter().append("image"),A.exit().remove(),A.each(function(b){_.bind(this)(b),v.bind(this)(b)}),A.sort(S)}}}}}),TV=de({"src/components/images/convert_coords.js"(e,r){"use strict";var t=da(),i=o1();r.exports=function(o,s,l,n){s=s||{};var u=l==="log"&&s.type==="linear",c=l==="linear"&&s.type==="log";if(u||c){for(var f=o._fullLayout.images,h=s._id.charAt(0),d,p,g=0;g<f.length;g++)if(d=f[g],p="images["+g+"].",d[h+"ref"]===s._id){var m=d[h],y=d["size"+h],_=null,v=null;if(u){_=i(m,s.range);var x=y/Math.pow(10,_)/2;v=2*Math.log(x+Math.sqrt(1+x*x))/Math.LN10}else _=Math.pow(10,m),v=_*(Math.pow(10,y/2)-Math.pow(10,-y/2));t(_)?t(v)||(v=null):(_=null,v=null),n(p+h,_),n(p+"size"+h,v)}}}}}),AV=de({"src/components/images/index.js"(e,r){"use strict";r.exports={moduleType:"component",name:"images",layoutAttributes:ck(),supplyLayoutDefaults:bV(),includeBasePlot:Iy()("images"),draw:wV(),convertCoords:TV()}}}),qw=de({"src/components/updatemenus/constants.js"(e,r){"use strict";r.exports={name:"updatemenus",containerClassName:"updatemenu-container",headerGroupClassName:"updatemenu-header-group",headerClassName:"updatemenu-header",headerArrowClassName:"updatemenu-header-arrow",dropdownButtonGroupClassName:"updatemenu-dropdown-button-group",dropdownButtonClassName:"updatemenu-dropdown-button",buttonClassName:"updatemenu-button",itemRectClassName:"updatemenu-item-rect",itemTextClassName:"updatemenu-item-text",menuIndexAttrName:"updatemenu-active-index",autoMarginIdRoot:"updatemenu-",blankHeaderOpts:{label:"  "},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:"#F4FAFF",hoverColor:"#F4FAFF",arrowSymbol:{left:"\u25C4",right:"\u25BA",up:"\u25B2",down:"\u25BC"}}}}),fk=de({"src/components/updatemenus/attributes.js"(e,r){"use strict";var t=us(),i=Jo(),a=fn().extendFlat,o=Ps().overrideAll,s=xw(),l=Ro().templatedArray,n=l("button",{visible:{valType:"boolean"},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},args2:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}});r.exports=o(l("updatemenu",{_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:n,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:a(s({editType:"arraydraw"}),{}),font:t({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:i.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}}),"arraydraw","from-root")}}),MV=de({"src/components/updatemenus/defaults.js"(e,r){"use strict";var t=Qt(),i=fc(),a=fk(),o=qw(),s=o.name,l=a.buttons;r.exports=function(f,h){var d={name:s,handleItemDefaults:n};i(f,h,d)};function n(c,f,h){function d(m,y){return t.coerce(c,f,a,m,y)}var p=i(c,f,{name:"buttons",handleItemDefaults:u}),g=d("visible",p.length>0);g&&(d("active"),d("direction"),d("type"),d("showactive"),d("x"),d("y"),t.noneOrAll(c,f,["x","y"]),d("xanchor"),d("yanchor"),d("pad.t"),d("pad.r"),d("pad.b"),d("pad.l"),t.coerceFont(d,"font",h.font),d("bgcolor",h.paper_bgcolor),d("bordercolor"),d("borderwidth"))}function u(c,f){function h(p,g){return t.coerce(c,f,l,p,g)}var d=h("visible",c.method==="skip"||Array.isArray(c.args));d&&(h("method"),h("args"),h("args2"),h("label"),h("execute"))}}}),SV=de({"src/components/updatemenus/scrollbox.js"(e,r){"use strict";r.exports=s;var t=Yr(),i=ta(),a=hn(),o=Qt();function s(l,n,u){this.gd=l,this.container=n,this.id=u,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll("rect.scrollbox-bg").data([0]),this.bg.exit().on(".drag",null).on("wheel",null).remove(),this.bg.enter().append("rect").classed("scrollbox-bg",!0).style("pointer-events","all").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor="#808BA4",s.prototype.enable=function(n,u,c){var f=this.gd._fullLayout,h=f.width,d=f.height;this.position=n;var p=this.position.l,g=this.position.w,m=this.position.t,y=this.position.h,_=this.position.direction,v=_==="down",x=_==="left",S=_==="right",M=_==="up",C=g,w=y,k,A,b,E;!v&&!x&&!S&&!M&&(this.position.direction="down",v=!0);var T=v||M;T?(k=p,A=k+C,v?(b=m,E=Math.min(b+w,d),w=E-b):(E=m+w,b=Math.max(E-w,0),w=E-b)):(b=m,E=b+w,x?(A=p+C,k=Math.max(A-C,0),C=A-k):(k=p,A=Math.min(k+C,h),C=A-k)),this._box={l:k,t:b,w:C,h:w};var F=g>C,D=s.barLength+2*s.barPad,R=s.barWidth+2*s.barPad,P=p,z=m+y;z+R>d&&(z=d-R);var I=this.container.selectAll("rect.scrollbar-horizontal").data(F?[0]:[]);I.exit().on(".drag",null).remove(),I.enter().append("rect").classed("scrollbar-horizontal",!0).call(i.fill,s.barColor),F?(this.hbar=I.attr({rx:s.barRadius,ry:s.barRadius,x:P,y:z,width:D,height:R}),this._hbarXMin=P+D/2,this._hbarTranslateMax=C-D):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var L=y>w,B=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,G=p+g,W=m;G+B>h&&(G=h-B);var X=this.container.selectAll("rect.scrollbar-vertical").data(L?[0]:[]);X.exit().on(".drag",null).remove(),X.enter().append("rect").classed("scrollbar-vertical",!0).call(i.fill,s.barColor),L?(this.vbar=X.attr({rx:s.barRadius,ry:s.barRadius,x:G,y:W,width:B,height:O}),this._vbarYMin=W+O/2,this._vbarTranslateMax=w-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var Z=this.id,J=k-.5,N=L?A+B+.5:A+.5,H=b-.5,$=F?E+R+.5:E+.5,U=f._topdefs.selectAll("#"+Z).data(F||L?[0]:[]);if(U.exit().remove(),U.enter().append("clipPath").attr("id",Z).append("rect"),F||L?(this._clipRect=U.select("rect").attr({x:Math.floor(J),y:Math.floor(H),width:Math.ceil(N)-Math.floor(J),height:Math.ceil($)-Math.floor(H)}),this.container.call(a.setClipUrl,Z,this.gd),this.bg.attr({x:p,y:m,width:g,height:y})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(a.setClipUrl,null),delete this._clipRect),F||L){var V=t.behavior.drag().on("dragstart",function(){t.event.sourceEvent.preventDefault()}).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(V);var j=t.behavior.drag().on("dragstart",function(){t.event.sourceEvent.preventDefault(),t.event.sourceEvent.stopPropagation()}).on("drag",this._onBarDrag.bind(this));F&&this.hbar.on(".drag",null).call(j),L&&this.vbar.on(".drag",null).call(j)}this.setTranslate(u,c)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var n=this.translateX,u=this.translateY;this.hbar&&(n-=t.event.dx),this.vbar&&(u-=t.event.dy),this.setTranslate(n,u)},s.prototype._onBoxWheel=function(){var n=this.translateX,u=this.translateY;this.hbar&&(n+=t.event.deltaY),this.vbar&&(u+=t.event.deltaY),this.setTranslate(n,u)},s.prototype._onBarDrag=function(){var n=this.translateX,u=this.translateY;if(this.hbar){var c=n+this._hbarXMin,f=c+this._hbarTranslateMax,h=o.constrain(t.event.x,c,f),d=(h-c)/(f-c),p=this.position.w-this._box.w;n=d*p}if(this.vbar){var g=u+this._vbarYMin,m=g+this._vbarTranslateMax,y=o.constrain(t.event.y,g,m),_=(y-g)/(m-g),v=this.position.h-this._box.h;u=_*v}this.setTranslate(n,u)},s.prototype.setTranslate=function(n,u){var c=this.position.w-this._box.w,f=this.position.h-this._box.h;if(n=o.constrain(n||0,0,c),u=o.constrain(u||0,0,f),this.translateX=n,this.translateY=u,this.container.call(a.setTranslate,this._box.l-this.position.l-n,this._box.t-this.position.t-u),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+n-.5),y:Math.floor(this.position.t+u-.5)}),this.hbar){var h=n/c;this.hbar.call(a.setTranslate,n+h*this._hbarTranslateMax,u)}if(this.vbar){var d=u/f;this.vbar.call(a.setTranslate,n,u+d*this._vbarTranslateMax)}}}}),EV=de({"src/components/updatemenus/draw.js"(e,r){"use strict";var t=Yr(),i=Es(),a=ta(),o=hn(),s=Qt(),l=Zo(),n=Ro().arrayEditor,u=Bl().LINE_SPACING,c=qw(),f=SV();r.exports=function(D){var R=D._fullLayout,P=s.filterVisible(R[c.name]);function z(Z){i.autoMargin(D,b(Z))}var I=R._menulayer.selectAll("g."+c.containerClassName).data(P.length>0?[0]:[]);if(I.enter().append("g").classed(c.containerClassName,!0).style("cursor","pointer"),I.exit().each(function(){t.select(this).selectAll("g."+c.headerGroupClassName).each(z)}).remove(),P.length!==0){var L=I.selectAll("g."+c.headerGroupClassName).data(P,h);L.enter().append("g").classed(c.headerGroupClassName,!0);for(var B=s.ensureSingle(I,"g",c.dropdownButtonGroupClassName,function(Z){Z.style("pointer-events","all")}),O=0;O<P.length;O++){var G=P[O];A(D,G)}var W="updatemenus"+R._uid,X=new f(D,B,W);L.enter().size()&&(B.node().parentNode.appendChild(B.node()),B.call(T)),L.exit().each(function(Z){B.call(T),z(Z)}).remove(),L.each(function(Z){var J=t.select(this),N=Z.type==="dropdown"?B:null;i.manageCommandObserver(D,Z,Z.buttons,function(H){g(D,Z,Z.buttons[H.index],J,N,X,H.index,!0)}),Z.type==="dropdown"?(m(D,J,B,X,Z),p(B,Z)&&y(D,J,B,X,Z)):y(D,J,null,null,Z)})}};function h(F){return F._index}function d(F){return+F.attr(c.menuIndexAttrName)==-1}function p(F,D){return+F.attr(c.menuIndexAttrName)===D._index}function g(F,D,R,P,z,I,L,B){D.active=L,n(F.layout,c.name,D).applyUpdate("active",L),D.type==="buttons"?y(F,P,null,null,D):D.type==="dropdown"&&(z.attr(c.menuIndexAttrName,"-1"),m(F,P,z,I,D),B||y(F,P,z,I,D))}function m(F,D,R,P,z){var I=s.ensureSingle(D,"g",c.headerClassName,function(Z){Z.style("pointer-events","all")}),L=z._dims,B=z.active,O=z.buttons[B]||c.blankHeaderOpts,G={y:z.pad.t,yPad:0,x:z.pad.l,xPad:0,index:0},W={width:L.headerWidth,height:L.headerHeight};I.call(x,z,O,F).call(E,z,G,W);var X=s.ensureSingle(D,"text",c.headerArrowClassName,function(Z){Z.attr("text-anchor","end").call(o.font,z.font).text(c.arrowSymbol[z.direction])});X.attr({x:L.headerWidth-c.arrowOffsetX+z.pad.l,y:L.headerHeight/2+c.textOffsetY+z.pad.t}),I.on("click",function(){R.call(T,String(p(R,z)?-1:z._index)),y(F,D,R,P,z)}),I.on("mouseover",function(){I.call(w)}),I.on("mouseout",function(){I.call(k,z)}),o.setTranslate(D,L.lx,L.ly)}function y(F,D,R,P,z){R||(R=D,R.attr("pointer-events","all"));var I=!d(R)||z.type==="buttons"?z.buttons:[],L=z.type==="dropdown"?c.dropdownButtonClassName:c.buttonClassName,B=R.selectAll("g."+L).data(s.filterVisible(I)),O=B.enter().append("g").classed(L,!0),G=B.exit();z.type==="dropdown"?(O.attr("opacity","0").transition().attr("opacity","1"),G.transition().attr("opacity","0").remove()):G.remove();var W=0,X=0,Z=z._dims,J=["up","down"].indexOf(z.direction)!==-1;z.type==="dropdown"&&(J?X=Z.headerHeight+c.gapButtonHeader:W=Z.headerWidth+c.gapButtonHeader),z.type==="dropdown"&&z.direction==="up"&&(X=-c.gapButtonHeader+c.gapButton-Z.openHeight),z.type==="dropdown"&&z.direction==="left"&&(W=-c.gapButtonHeader+c.gapButton-Z.openWidth);var N={x:Z.lx+W+z.pad.l,y:Z.ly+X+z.pad.t,yPad:c.gapButton,xPad:c.gapButton,index:0},H={l:N.x+z.borderwidth,t:N.y+z.borderwidth};B.each(function($,U){var V=t.select(this);V.call(x,z,$,F).call(E,z,N),V.on("click",function(){t.event.defaultPrevented||($.execute&&($.args2&&z.active===U?(g(F,z,$,D,R,P,-1),i.executeAPICommand(F,$.method,$.args2)):(g(F,z,$,D,R,P,U),i.executeAPICommand(F,$.method,$.args))),F.emit("plotly_buttonclicked",{menu:z,button:$,active:z.active}))}),V.on("mouseover",function(){V.call(w)}),V.on("mouseout",function(){V.call(k,z),B.call(C,z)})}),B.call(C,z),J?(H.w=Math.max(Z.openWidth,Z.headerWidth),H.h=N.y-H.t):(H.w=N.x-H.l,H.h=Math.max(Z.openHeight,Z.headerHeight)),H.direction=z.direction,P&&(B.size()?_(F,D,R,P,z,H):v(P))}function _(F,D,R,P,z,I){var L=z.direction,B=L==="up"||L==="down",O=z._dims,G=z.active,W,X,Z;if(B)for(X=0,Z=0;Z<G;Z++)X+=O.heights[Z]+c.gapButton;else for(W=0,Z=0;Z<G;Z++)W+=O.widths[Z]+c.gapButton;P.enable(I,W,X),P.hbar&&P.hbar.attr("opacity","0").transition().attr("opacity","1"),P.vbar&&P.vbar.attr("opacity","0").transition().attr("opacity","1")}function v(F){var D=!!F.hbar,R=!!F.vbar;D&&F.hbar.transition().attr("opacity","0").each("end",function(){D=!1,R||F.disable()}),R&&F.vbar.transition().attr("opacity","0").each("end",function(){R=!1,D||F.disable()})}function x(F,D,R,P){F.call(S,D).call(M,D,R,P)}function S(F,D){var R=s.ensureSingle(F,"rect",c.itemRectClassName,function(P){P.attr({rx:c.rx,ry:c.ry,"shape-rendering":"crispEdges"})});R.call(a.stroke,D.bordercolor).call(a.fill,D.bgcolor).style("stroke-width",D.borderwidth+"px")}function M(F,D,R,P){var z=s.ensureSingle(F,"text",c.itemTextClassName,function(B){B.attr({"text-anchor":"start","data-notex":1})}),I=R.label,L=P._fullLayout._meta;L&&(I=s.templateString(I,L)),z.call(o.font,D.font).text(I).call(l.convertToTspans,P)}function C(F,D){var R=D.active;F.each(function(P,z){var I=t.select(this);z===R&&D.showactive&&I.select("rect."+c.itemRectClassName).call(a.fill,c.activeColor)})}function w(F){F.select("rect."+c.itemRectClassName).call(a.fill,c.hoverColor)}function k(F,D){F.select("rect."+c.itemRectClassName).call(a.fill,D.bgcolor)}function A(F,D){var R=D._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},P=o.tester.selectAll("g."+c.dropdownButtonClassName).data(s.filterVisible(D.buttons));P.enter().append("g").classed(c.dropdownButtonClassName,!0);var z=["up","down"].indexOf(D.direction)!==-1;P.each(function(W,X){var Z=t.select(this);Z.call(x,D,W,F);var J=Z.select("."+c.itemTextClassName),N=J.node()&&o.bBox(J.node()).width,H=Math.max(N+c.textPadX,c.minWidth),$=D.font.size*u,U=l.lineCount(J),V=Math.max($*U,c.minHeight)+c.textOffsetY;V=Math.ceil(V),H=Math.ceil(H),R.widths[X]=H,R.heights[X]=V,R.height1=Math.max(R.height1,V),R.width1=Math.max(R.width1,H),z?(R.totalWidth=Math.max(R.totalWidth,H),R.openWidth=R.totalWidth,R.totalHeight+=V+c.gapButton,R.openHeight+=V+c.gapButton):(R.totalWidth+=H+c.gapButton,R.openWidth+=H+c.gapButton,R.totalHeight=Math.max(R.totalHeight,V),R.openHeight=R.totalHeight)}),z?R.totalHeight-=c.gapButton:R.totalWidth-=c.gapButton,R.headerWidth=R.width1+c.arrowPadX,R.headerHeight=R.height1,D.type==="dropdown"&&(z?(R.width1+=c.arrowPadX,R.totalHeight=R.height1):R.totalWidth=R.width1,R.totalWidth+=c.arrowPadX),P.remove();var I=R.totalWidth+D.pad.l+D.pad.r,L=R.totalHeight+D.pad.t+D.pad.b,B=F._fullLayout._size;R.lx=B.l+B.w*D.x,R.ly=B.t+B.h*(1-D.y);var O="left";s.isRightAnchor(D)&&(R.lx-=I,O="right"),s.isCenterAnchor(D)&&(R.lx-=I/2,O="center");var G="top";s.isBottomAnchor(D)&&(R.ly-=L,G="bottom"),s.isMiddleAnchor(D)&&(R.ly-=L/2,G="middle"),R.totalWidth=Math.ceil(R.totalWidth),R.totalHeight=Math.ceil(R.totalHeight),R.lx=Math.round(R.lx),R.ly=Math.round(R.ly),i.autoMargin(F,b(D),{x:D.x,y:D.y,l:I*({right:1,center:.5}[O]||0),r:I*({left:1,center:.5}[O]||0),b:L*({top:1,middle:.5}[G]||0),t:L*({bottom:1,middle:.5}[G]||0)})}function b(F){return c.autoMarginIdRoot+F._index}function E(F,D,R,P){P=P||{};var z=F.select("."+c.itemRectClassName),I=F.select("."+c.itemTextClassName),L=D.borderwidth,B=R.index,O=D._dims;o.setTranslate(F,L+R.x,L+R.y);var G=["up","down"].indexOf(D.direction)!==-1,W=P.height||(G?O.heights[B]:O.height1);z.attr({x:0,y:0,width:P.width||(G?O.width1:O.widths[B]),height:W});var X=D.font.size*u,Z=l.lineCount(I),J=(Z-1)*X/2;l.positionText(I,c.textOffsetX,W/2-J+c.textOffsetY),G?R.y+=O.heights[B]+R.yPad:R.x+=O.widths[B]+R.xPad,R.index++}function T(F,D){F.attr(c.menuIndexAttrName,D||"-1").selectAll("g."+c.dropdownButtonClassName).remove()}}}),kV=de({"src/components/updatemenus/index.js"(e,r){"use strict";var t=qw();r.exports={moduleType:"component",name:t.name,layoutAttributes:fk(),supplyLayoutDefaults:MV(),draw:EV()}}}),By=de({"src/components/sliders/constants.js"(e,r){"use strict";r.exports={name:"sliders",containerClassName:"slider-container",groupClassName:"slider-group",inputAreaClass:"slider-input-area",railRectClass:"slider-rail-rect",railTouchRectClass:"slider-rail-touch-rect",gripRectClass:"slider-grip-rect",tickRectClass:"slider-tick-rect",inputProxyClass:"slider-input-proxy",labelsClass:"slider-labels",labelGroupClass:"slider-label-group",labelClass:"slider-label",currentValueClass:"slider-current-value",railHeight:5,menuIndexAttrName:"slider-active-index",autoMarginIdRoot:"slider-",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:"#bec8d9",railBgColor:"#f8fafc",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:"#bec8d9",gripBgColor:"#f6f8fa",gripBgActiveColor:"#dbdde0",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:"#333",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:"#333",minorTickLength:4,currentValuePadding:8,currentValueInset:0}}}),hk=de({"src/components/sliders/attributes.js"(e,r){"use strict";var t=us(),i=xw(),a=fn().extendDeepAll,o=Ps().overrideAll,s=Ay(),l=Ro().templatedArray,n=By(),u=l("step",{visible:{valType:"boolean",dflt:!0},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string"},value:{valType:"string"},execute:{valType:"boolean",dflt:!0}});r.exports=o(l("slider",{visible:{valType:"boolean",dflt:!0},active:{valType:"number",min:0,dflt:0},steps:u,lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",min:-2,max:3,dflt:0},pad:a(i({editType:"arraydraw"}),{},{t:{dflt:20}}),xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left"},y:{valType:"number",min:-2,max:3,dflt:0},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},transition:{duration:{valType:"number",min:0,dflt:150},easing:{valType:"enumerated",values:s.transition.easing.values,dflt:"cubic-in-out"}},currentvalue:{visible:{valType:"boolean",dflt:!0},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},offset:{valType:"number",dflt:10},prefix:{valType:"string"},suffix:{valType:"string"},font:t({})},font:t({}),activebgcolor:{valType:"color",dflt:n.gripBgActiveColor},bgcolor:{valType:"color",dflt:n.railBgColor},bordercolor:{valType:"color",dflt:n.railBorderColor},borderwidth:{valType:"number",min:0,dflt:n.railBorderWidth},ticklen:{valType:"number",min:0,dflt:n.tickLength},tickcolor:{valType:"color",dflt:n.tickColor},tickwidth:{valType:"number",min:0,dflt:1},minorticklen:{valType:"number",min:0,dflt:n.minorTickLength}}),"arraydraw","from-root")}}),CV=de({"src/components/sliders/defaults.js"(e,r){"use strict";var t=Qt(),i=fc(),a=hk(),o=By(),s=o.name,l=a.steps;r.exports=function(f,h){i(f,h,{name:s,handleItemDefaults:n})};function n(c,f,h){function d(S,M){return t.coerce(c,f,a,S,M)}for(var p=i(c,f,{name:"steps",handleItemDefaults:u}),g=0,m=0;m<p.length;m++)p[m].visible&&g++;var y;if(g<2?y=f.visible=!1:y=d("visible"),!!y){f._stepCount=g;var _=f._visibleSteps=t.filterVisible(p),v=d("active");(p[v]||{}).visible||(f.active=_[0]._index),d("x"),d("y"),t.noneOrAll(c,f,["x","y"]),d("xanchor"),d("yanchor"),d("len"),d("lenmode"),d("pad.t"),d("pad.r"),d("pad.b"),d("pad.l"),t.coerceFont(d,"font",h.font);var x=d("currentvalue.visible");x&&(d("currentvalue.xanchor"),d("currentvalue.prefix"),d("currentvalue.suffix"),d("currentvalue.offset"),t.coerceFont(d,"currentvalue.font",f.font)),d("transition.duration"),d("transition.easing"),d("bgcolor"),d("activebgcolor"),d("bordercolor"),d("borderwidth"),d("ticklen"),d("tickwidth"),d("tickcolor"),d("minorticklen")}}function u(c,f){function h(g,m){return t.coerce(c,f,l,g,m)}var d;if(c.method!=="skip"&&!Array.isArray(c.args)?d=f.visible=!1:d=h("visible"),d){h("method"),h("args");var p=h("label","step-"+f._index);h("value",p),h("execute")}}}}),DV=de({"src/components/sliders/draw.js"(e,r){"use strict";var t=Yr(),i=Es(),a=ta(),o=hn(),s=Qt(),l=s.strTranslate,n=Zo(),u=Ro().arrayEditor,c=By(),f=Bl(),h=f.LINE_SPACING,d=f.FROM_TL,p=f.FROM_BR;r.exports=function(I){var L=I._context.staticPlot,B=I._fullLayout,O=m(B,I),G=B._infolayer.selectAll("g."+c.containerClassName).data(O.length>0?[0]:[]);G.enter().append("g").classed(c.containerClassName,!0).style("cursor",L?null:"ew-resize");function W(N){N._commandObserver&&(N._commandObserver.remove(),delete N._commandObserver),i.autoMargin(I,g(N))}if(G.exit().each(function(){t.select(this).selectAll("g."+c.groupClassName).each(W)}).remove(),O.length!==0){var X=G.selectAll("g."+c.groupClassName).data(O,y);X.enter().append("g").classed(c.groupClassName,!0),X.exit().each(W).remove();for(var Z=0;Z<O.length;Z++){var J=O[Z];_(I,J)}X.each(function(N){var H=t.select(this);E(N),i.manageCommandObserver(I,N,N._visibleSteps,function($){var U=H.data()[0];U.active!==$.index&&(U._dragging||k(I,H,U,$.index,!1,!0))}),v(I,t.select(this),N)})}};function g(z){return c.autoMarginIdRoot+z._index}function m(z,I){for(var L=z[c.name],B=[],O=0;O<L.length;O++){var G=L[O];G.visible&&(G._gd=I,B.push(G))}return B}function y(z){return z._index}function _(z,I){var L=o.tester.selectAll("g."+c.labelGroupClass).data(I._visibleSteps);L.enter().append("g").classed(c.labelGroupClass,!0);var B=0,O=0;L.each(function(V){var j=t.select(this),q=M(j,{step:V},I),Y=q.node();if(Y){var K=o.bBox(Y);O=Math.max(O,K.height),B=Math.max(B,K.width)}}),L.remove();var G=I._dims={};G.inputAreaWidth=Math.max(c.railWidth,c.gripHeight);var W=z._fullLayout._size;G.lx=W.l+W.w*I.x,G.ly=W.t+W.h*(1-I.y),I.lenmode==="fraction"?G.outerLength=Math.round(W.w*I.len):G.outerLength=I.len,G.inputAreaStart=0,G.inputAreaLength=Math.round(G.outerLength-I.pad.l-I.pad.r);var X=G.inputAreaLength-2*c.stepInset,Z=X/(I._stepCount-1),J=B+c.labelPadding;if(G.labelStride=Math.max(1,Math.ceil(J/Z)),G.labelHeight=O,G.currentValueMaxWidth=0,G.currentValueHeight=0,G.currentValueTotalHeight=0,G.currentValueMaxLines=1,I.currentvalue.visible){var N=o.tester.append("g");L.each(function(V){var j=x(N,I,V.label),q=j.node()&&o.bBox(j.node())||{width:0,height:0},Y=n.lineCount(j);G.currentValueMaxWidth=Math.max(G.currentValueMaxWidth,Math.ceil(q.width)),G.currentValueHeight=Math.max(G.currentValueHeight,Math.ceil(q.height)),G.currentValueMaxLines=Math.max(G.currentValueMaxLines,Y)}),G.currentValueTotalHeight=G.currentValueHeight+I.currentvalue.offset,N.remove()}G.height=G.currentValueTotalHeight+c.tickOffset+I.ticklen+c.labelOffset+G.labelHeight+I.pad.t+I.pad.b;var H="left";s.isRightAnchor(I)&&(G.lx-=G.outerLength,H="right"),s.isCenterAnchor(I)&&(G.lx-=G.outerLength/2,H="center");var $="top";s.isBottomAnchor(I)&&(G.ly-=G.height,$="bottom"),s.isMiddleAnchor(I)&&(G.ly-=G.height/2,$="middle"),G.outerLength=Math.ceil(G.outerLength),G.height=Math.ceil(G.height),G.lx=Math.round(G.lx),G.ly=Math.round(G.ly);var U={y:I.y,b:G.height*p[$],t:G.height*d[$]};I.lenmode==="fraction"?(U.l=0,U.xl=I.x-I.len*d[H],U.r=0,U.xr=I.x+I.len*p[H]):(U.x=I.x,U.l=G.outerLength*d[H],U.r=G.outerLength*p[H]),i.autoMargin(z,g(I),U)}function v(z,I,L){(L.steps[L.active]||{}).visible||(L.active=L._visibleSteps[0]._index),I.call(x,L).call(P,L).call(C,L).call(b,L).call(R,z,L).call(S,z,L);var B=L._dims;o.setTranslate(I,B.lx+L.pad.l,B.ly+L.pad.t),I.call(T,L,!1),I.call(x,L)}function x(z,I,L){if(I.currentvalue.visible){var B=I._dims,O,G;switch(I.currentvalue.xanchor){case"right":O=B.inputAreaLength-c.currentValueInset-B.currentValueMaxWidth,G="left";break;case"center":O=B.inputAreaLength*.5,G="middle";break;default:O=c.currentValueInset,G="left"}var W=s.ensureSingle(z,"text",c.labelClass,function($){$.attr({"text-anchor":G,"data-notex":1})}),X=I.currentvalue.prefix?I.currentvalue.prefix:"";if(typeof L=="string")X+=L;else{var Z=I.steps[I.active].label,J=I._gd._fullLayout._meta;J&&(Z=s.templateString(Z,J)),X+=Z}I.currentvalue.suffix&&(X+=I.currentvalue.suffix),W.call(o.font,I.currentvalue.font).text(X).call(n.convertToTspans,I._gd);var N=n.lineCount(W),H=(B.currentValueMaxLines+1-N)*I.currentvalue.font.size*h;return n.positionText(W,O,H),W}}function S(z,I,L){var B=s.ensureSingle(z,"rect",c.gripRectClass,function(O){O.call(A,I,z,L).style("pointer-events","all")});B.attr({width:c.gripWidth,height:c.gripHeight,rx:c.gripRadius,ry:c.gripRadius}).call(a.stroke,L.bordercolor).call(a.fill,L.bgcolor).style("stroke-width",L.borderwidth+"px")}function M(z,I,L){var B=s.ensureSingle(z,"text",c.labelClass,function(W){W.attr({"text-anchor":"middle","data-notex":1})}),O=I.step.label,G=L._gd._fullLayout._meta;return G&&(O=s.templateString(O,G)),B.call(o.font,L.font).text(O).call(n.convertToTspans,L._gd),B}function C(z,I){var L=s.ensureSingle(z,"g",c.labelsClass),B=I._dims,O=L.selectAll("g."+c.labelGroupClass).data(B.labelSteps);O.enter().append("g").classed(c.labelGroupClass,!0),O.exit().remove(),O.each(function(G){var W=t.select(this);W.call(M,G,I),o.setTranslate(W,F(I,G.fraction),c.tickOffset+I.ticklen+I.font.size*h+c.labelOffset+B.currentValueTotalHeight)})}function w(z,I,L,B,O){var G=Math.round(B*(L._stepCount-1)),W=L._visibleSteps[G]._index;W!==L.active&&k(z,I,L,W,!0,O)}function k(z,I,L,B,O,G){var W=L.active;L.active=B,u(z.layout,c.name,L).applyUpdate("active",B);var X=L.steps[L.active];I.call(T,L,G),I.call(x,L),z.emit("plotly_sliderchange",{slider:L,step:L.steps[L.active],interaction:O,previousActive:W}),X&&X.method&&O&&(I._nextMethod?(I._nextMethod.step=X,I._nextMethod.doCallback=O,I._nextMethod.doTransition=G):(I._nextMethod={step:X,doCallback:O,doTransition:G},I._nextMethodRaf=window.requestAnimationFrame(function(){var Z=I._nextMethod.step;Z.method&&(Z.execute&&i.executeAPICommand(z,Z.method,Z.args),I._nextMethod=null,I._nextMethodRaf=null)})))}function A(z,I,L){if(I._context.staticPlot)return;var B=L.node(),O=t.select(I);function G(){return L.data()[0]}function W(){var X=G();I.emit("plotly_sliderstart",{slider:X});var Z=L.select("."+c.gripRectClass);t.event.stopPropagation(),t.event.preventDefault(),Z.call(a.fill,X.activebgcolor);var J=D(X,t.mouse(B)[0]);w(I,L,X,J,!0),X._dragging=!0;function N(){var $=G(),U=D($,t.mouse(B)[0]);w(I,L,$,U,!1)}O.on("mousemove",N),O.on("touchmove",N);function H(){var $=G();$._dragging=!1,Z.call(a.fill,$.bgcolor),O.on("mouseup",null),O.on("mousemove",null),O.on("touchend",null),O.on("touchmove",null),I.emit("plotly_sliderend",{slider:$,step:$.steps[$.active]})}O.on("mouseup",H),O.on("touchend",H)}z.on("mousedown",W),z.on("touchstart",W)}function b(z,I){var L=z.selectAll("rect."+c.tickRectClass).data(I._visibleSteps),B=I._dims;L.enter().append("rect").classed(c.tickRectClass,!0),L.exit().remove(),L.attr({width:I.tickwidth+"px","shape-rendering":"crispEdges"}),L.each(function(O,G){var W=G%B.labelStride===0,X=t.select(this);X.attr({height:W?I.ticklen:I.minorticklen}).call(a.fill,I.tickcolor),o.setTranslate(X,F(I,G/(I._stepCount-1))-.5*I.tickwidth,(W?c.tickOffset:c.minorTickOffset)+B.currentValueTotalHeight)})}function E(z){var I=z._dims;I.labelSteps=[];for(var L=z._stepCount,B=0;B<L;B+=I.labelStride)I.labelSteps.push({fraction:B/(L-1),step:z._visibleSteps[B]})}function T(z,I,L){for(var B=z.select("rect."+c.gripRectClass),O=0,G=0;G<I._stepCount;G++)if(I._visibleSteps[G]._index===I.active){O=G;break}var W=F(I,O/(I._stepCount-1));if(!I._invokingCommand){var X=B;L&&I.transition.duration>0&&(X=X.transition().duration(I.transition.duration).ease(I.transition.easing)),X.attr("transform",l(W-c.gripWidth*.5,I._dims.currentValueTotalHeight))}}function F(z,I){var L=z._dims;return L.inputAreaStart+c.stepInset+(L.inputAreaLength-2*c.stepInset)*Math.min(1,Math.max(0,I))}function D(z,I){var L=z._dims;return Math.min(1,Math.max(0,(I-c.stepInset-L.inputAreaStart)/(L.inputAreaLength-2*c.stepInset-2*L.inputAreaStart)))}function R(z,I,L){var B=L._dims,O=s.ensureSingle(z,"rect",c.railTouchRectClass,function(G){G.call(A,I,z,L).style("pointer-events","all")});O.attr({width:B.inputAreaLength,height:Math.max(B.inputAreaWidth,c.tickOffset+L.ticklen+B.labelHeight)}).call(a.fill,L.bgcolor).attr("opacity",0),o.setTranslate(O,0,B.currentValueTotalHeight)}function P(z,I){var L=I._dims,B=L.inputAreaLength-c.railInset*2,O=s.ensureSingle(z,"rect",c.railRectClass);O.attr({width:B,height:c.railWidth,rx:c.railRadius,ry:c.railRadius,"shape-rendering":"crispEdges"}).call(a.stroke,I.bordercolor).call(a.fill,I.bgcolor).style("stroke-width",I.borderwidth+"px"),o.setTranslate(O,c.railInset,(L.inputAreaWidth-c.railWidth)*.5+L.currentValueTotalHeight)}}}),LV=de({"src/components/sliders/index.js"(e,r){"use strict";var t=By();r.exports={moduleType:"component",name:t.name,layoutAttributes:hk(),supplyLayoutDefaults:CV(),draw:DV()}}}),Vw=de({"src/components/rangeslider/attributes.js"(e,r){"use strict";var t=Jo();r.exports={bgcolor:{valType:"color",dflt:t.background,editType:"plot"},bordercolor:{valType:"color",dflt:t.defaultLine,editType:"plot"},borderwidth:{valType:"integer",dflt:0,min:0,editType:"plot"},autorange:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},range:{valType:"info_array",items:[{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}}],editType:"calc",impliedEdits:{autorange:!1}},thickness:{valType:"number",dflt:.15,min:0,max:1,editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"}}}),dk=de({"src/components/rangeslider/oppaxis_attributes.js"(e,r){"use strict";r.exports={_isSubplotObj:!0,rangemode:{valType:"enumerated",values:["auto","fixed","match"],dflt:"match",editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},editType:"calc"}}}),Gw=de({"src/components/rangeslider/constants.js"(e,r){"use strict";r.exports={name:"rangeslider",containerClassName:"rangeslider-container",bgClassName:"rangeslider-bg",rangePlotClassName:"rangeslider-rangeplot",maskMinClassName:"rangeslider-mask-min",maskMaxClassName:"rangeslider-mask-max",slideBoxClassName:"rangeslider-slidebox",grabberMinClassName:"rangeslider-grabber-min",grabAreaMinClassName:"rangeslider-grabarea-min",handleMinClassName:"rangeslider-handle-min",grabberMaxClassName:"rangeslider-grabber-max",grabAreaMaxClassName:"rangeslider-grabarea-max",handleMaxClassName:"rangeslider-handle-max",maskMinOppAxisClassName:"rangeslider-mask-min-opp-axis",maskMaxOppAxisClassName:"rangeslider-mask-max-opp-axis",maskColor:"rgba(0,0,0,0.4)",maskOppAxisColor:"rgba(0,0,0,0.2)",slideBoxFill:"transparent",slideBoxCursor:"ew-resize",grabAreaFill:"transparent",grabAreaCursor:"col-resize",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}}}),FV=de({"src/components/rangeslider/helpers.js"(e){"use strict";var r=Hs(),t=Zo(),i=Gw(),a=Bl().LINE_SPACING,o=i.name;function s(l){var n=l&&l[o];return n&&n.visible}e.isVisible=s,e.makeData=function(l){for(var n=r.list({_fullLayout:l},"x",!0),u=l.margin,c=[],f=0;f<n.length;f++){var h=n[f];if(s(h)){c.push(h);var d=h[o];d._id=o+h._id,d._height=(l.height-u.b-u.t)*d.thickness,d._offsetShift=Math.floor(d.borderwidth/2)}}l._rangeSliderData=c},e.autoMarginOpts=function(l,n){var u=l._fullLayout,c=n[o],f=n._id.charAt(0),h=0,d=0;if(n.side==="bottom"&&(h=n._depth,n.title.text!==u._dfltTitle[f])){d=1.5*n.title.font.size+10+c._offsetShift;var p=(n.title.text.match(t.BR_TAG_ALL)||[]).length;d+=p*n.title.font.size*a}return{x:0,y:n._counterDomainMin,l:0,r:0,t:0,b:c._height+h+Math.max(u.margin.b,d),pad:i.extraPad+c._offsetShift*2}}}}),PV=de({"src/components/rangeslider/defaults.js"(e,r){"use strict";var t=Qt(),i=Ro(),a=Hs(),o=Vw(),s=dk();r.exports=function(n,u,c){var f=n[c],h=u[c];if(!(f.rangeslider||u._requestRangeslider[h._id]))return;t.isPlainObject(f.rangeslider)||(f.rangeslider={});var d=f.rangeslider,p=i.newContainer(h,"rangeslider");function g(E,T){return t.coerce(d,p,o,E,T)}var m,y;function _(E,T){return t.coerce(m,y,s,E,T)}var v=g("visible");if(v){g("bgcolor",u.plot_bgcolor),g("bordercolor"),g("borderwidth"),g("thickness"),g("autorange",!h.isValidRange(d.range)),g("range");var x=u._subplots;if(x)for(var S=x.cartesian.filter(function(E){return E.slice(0,Math.max(0,E.indexOf("y")))===a.name2id(c)}).map(function(E){return E.slice(E.indexOf("y"),E.length)}),M=t.simpleMap(S,a.id2name),C=0;C<M.length;C++){var w=M[C];m=d[w]||{},y=i.newContainer(p,w,"yaxis");var k=u[w],A;m.range&&k.isValidRange(m.range)&&(A="fixed");var b=_("rangemode",A);b!=="match"&&_("range",k.range.slice())}p._input=d}}}}),IV=de({"src/components/rangeslider/calc_autorange.js"(e,r){"use strict";var t=Hs().list,i=vd().getAutoRange,a=Gw();r.exports=function(s){for(var l=t(s,"x",!0),n=0;n<l.length;n++){var u=l[n],c=u[a.name];c&&c.visible&&c.autorange&&(c._input.autorange=!0,c._input.range=c.range=i(s,u))}}}}),RV=de({"src/components/rangeslider/draw.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Es(),o=Qt(),s=o.strTranslate,l=hn(),n=ta(),u=xv(),c=ml(),f=Hs(),h=Uc(),d=md(),p=Gw();r.exports=function(A){for(var b=A._fullLayout,E=b._rangeSliderData,T=0;T<E.length;T++){var F=E[T][p.name];F._clipId=F._id+"-"+b._uid}function D(P){return P._name}var R=b._infolayer.selectAll("g."+p.containerClassName).data(E,D);R.exit().each(function(P){var z=P[p.name];b._topdefs.select("#"+z._clipId).remove()}).remove(),E.length!==0&&(R.enter().append("g").classed(p.containerClassName,!0).attr("pointer-events","all"),R.each(function(P){var z=t.select(this),I=P[p.name],L=b[f.id2name(P.anchor)],B=I[f.id2name(P.anchor)];if(I.range){var O=o.simpleMap(I.range,P.r2l),G=o.simpleMap(P.range,P.r2l),W;G[0]<G[1]?W=[Math.min(O[0],G[0]),Math.max(O[1],G[1])]:W=[Math.max(O[0],G[0]),Math.min(O[1],G[1])],I.range=I._input.range=o.simpleMap(W,P.l2r)}P.cleanRange("rangeslider.range");var X=b._size,Z=P.domain;I._width=X.w*(Z[1]-Z[0]);var J=Math.round(X.l+X.w*Z[0]),N=Math.round(X.t+X.h*(1-P._counterDomainMin)+(P.side==="bottom"?P._depth:0)+I._offsetShift+p.extraPad);z.attr("transform",s(J,N)),I._rl=o.simpleMap(I.range,P.r2l);var H=I._rl[0],$=I._rl[1],U=$-H;if(I.p2d=function(ce){return ce/I._width*U+H},I.d2p=function(ce){return(ce-H)/U*I._width},P.rangebreaks){var V=P.locateBreaks(H,$);if(V.length){var j,q,Y=0;for(j=0;j<V.length;j++)q=V[j],Y+=q.max-q.min;var K=I._width/($-H-Y),te=[-K*H];for(j=0;j<V.length;j++)q=V[j],te.push(te[te.length-1]-K*(q.max-q.min));for(I.d2p=function(ce){for(var pe=te[0],xe=0;xe<V.length;xe++){var ye=V[xe];if(ce>=ye.max)pe=te[xe+1];else if(ce<ye.min)break}return pe+K*ce},j=0;j<V.length;j++)q=V[j],q.pmin=I.d2p(q.min),q.pmax=I.d2p(q.max);I.p2d=function(ce){for(var pe=te[0],xe=0;xe<V.length;xe++){var ye=V[xe];if(ce>=ye.pmax)pe=te[xe+1];else if(ce<ye.pmin)break}return(ce-pe)/K}}}if(B.rangemode!=="match"){var ne=L.r2l(B.range[0]),se=L.r2l(B.range[1]),le=se-ne;I.d2pOppAxis=function(ce){return(ce-ne)/le*I._height}}z.call(v,A,P,I).call(x,A,P,I).call(S,A,P,I).call(C,A,P,I,B).call(w,A,P,I).call(k,A,P,I),m(z,A,P,I),_(z,A,P,I,L,B),P.side==="bottom"&&u.draw(A,P._id+"title",{propContainer:P,propName:P._name+".title.text",placeholder:b._dfltTitle.x,attributes:{x:P._offset+P._length/2,y:N+I._height+I._offsetShift+10+1.5*P.title.font.size,"text-anchor":"middle"}})}))};function g(A){return typeof A.clientX=="number"?A.clientX:A.touches&&A.touches.length>0?A.touches[0].clientX:0}function m(A,b,E,T){if(b._context.staticPlot)return;var F=A.select("rect."+p.slideBoxClassName).node(),D=A.select("rect."+p.grabAreaMinClassName).node(),R=A.select("rect."+p.grabAreaMaxClassName).node();function P(){var z=t.event,I=z.target,L=g(z),B=L-A.node().getBoundingClientRect().left,O=T.d2p(E._rl[0]),G=T.d2p(E._rl[1]),W=h.coverSlip();this.addEventListener("touchmove",X),this.addEventListener("touchend",Z),W.addEventListener("mousemove",X),W.addEventListener("mouseup",Z);function X(J){var N=g(J),H=+N-L,$,U,V;switch(I){case F:if(V="ew-resize",O+H>E._length||G+H<0)return;$=O+H,U=G+H;break;case D:if(V="col-resize",O+H>E._length)return;$=O+H,U=G;break;case R:if(V="col-resize",G+H<0)return;$=O,U=G+H;break;default:V="ew-resize",$=B,U=B+H;break}if(U<$){var j=U;U=$,$=j}T._pixelMin=$,T._pixelMax=U,d(t.select(W),V),y(A,b,E,T)}function Z(){W.removeEventListener("mousemove",X),W.removeEventListener("mouseup",Z),this.removeEventListener("touchmove",X),this.removeEventListener("touchend",Z),o.removeElement(W)}}A.on("mousedown",P),A.on("touchstart",P)}function y(A,b,E,T){function F(P){return E.l2r(o.constrain(P,T._rl[0],T._rl[1]))}var D=F(T.p2d(T._pixelMin)),R=F(T.p2d(T._pixelMax));window.requestAnimationFrame(function(){i.call("_guiRelayout",b,E._name+".range",[D,R])})}function _(A,b,E,T,F,D){var R=p.handleWidth/2;function P(J){return o.constrain(J,0,T._width)}function z(J){return o.constrain(J,0,T._height)}function I(J){return o.constrain(J,-R,T._width+R)}var L=P(T.d2p(E._rl[0])),B=P(T.d2p(E._rl[1]));if(A.select("rect."+p.slideBoxClassName).attr("x",L).attr("width",B-L),A.select("rect."+p.maskMinClassName).attr("width",L),A.select("rect."+p.maskMaxClassName).attr("x",B).attr("width",T._width-B),D.rangemode!=="match"){var O=T._height-z(T.d2pOppAxis(F._rl[1])),G=T._height-z(T.d2pOppAxis(F._rl[0]));A.select("rect."+p.maskMinOppAxisClassName).attr("x",L).attr("height",O).attr("width",B-L),A.select("rect."+p.maskMaxOppAxisClassName).attr("x",L).attr("y",G).attr("height",T._height-G).attr("width",B-L),A.select("rect."+p.slideBoxClassName).attr("y",O).attr("height",G-O)}var W=.5,X=Math.round(I(L-R))-W,Z=Math.round(I(B-R))+W;A.select("g."+p.grabberMinClassName).attr("transform",s(X,W)),A.select("g."+p.grabberMaxClassName).attr("transform",s(Z,W))}function v(A,b,E,T){var F=o.ensureSingle(A,"rect",p.bgClassName,function(z){z.attr({x:0,y:0,"shape-rendering":"crispEdges"})}),D=T.borderwidth%2===0?T.borderwidth:T.borderwidth-1,R=-T._offsetShift,P=l.crispRound(b,T.borderwidth);F.attr({width:T._width+D,height:T._height+D,transform:s(R,R),"stroke-width":P}).call(n.stroke,T.bordercolor).call(n.fill,T.bgcolor)}function x(A,b,E,T){var F=b._fullLayout,D=o.ensureSingleById(F._topdefs,"clipPath",T._clipId,function(R){R.append("rect").attr({x:0,y:0})});D.select("rect").attr({width:T._width,height:T._height})}function S(A,b,E,T){var F=b.calcdata,D=A.selectAll("g."+p.rangePlotClassName).data(E._subplotsWith,o.identity);D.enter().append("g").attr("class",function(P){return p.rangePlotClassName+" "+P}).call(l.setClipUrl,T._clipId,b),D.order(),D.exit().remove();var R;D.each(function(P,z){var I=t.select(this),L=z===0,B=f.getFromId(b,P,"y"),O=B._name,G=T[O],W={data:[],layout:{xaxis:{type:E.type,domain:[0,1],range:T.range.slice(),calendar:E.calendar},width:T._width,height:T._height,margin:{t:0,b:0,l:0,r:0}},_context:b._context};E.rangebreaks&&(W.layout.xaxis.rangebreaks=E.rangebreaks),W.layout[O]={type:B.type,domain:[0,1],range:G.rangemode!=="match"?G.range.slice():B.range.slice(),calendar:B.calendar},B.rangebreaks&&(W.layout[O].rangebreaks=B.rangebreaks),a.supplyDefaults(W);var X=W._fullLayout.xaxis,Z=W._fullLayout[O];X.clearCalc(),X.setScale(),Z.clearCalc(),Z.setScale();var J={id:P,plotgroup:I,xaxis:X,yaxis:Z,isRangePlot:!0};L?R=J:(J.mainplot="xy",J.mainplotinfo=R),c.rangePlot(b,J,M(F,P))})}function M(A,b){for(var E=[],T=0;T<A.length;T++){var F=A[T],D=F[0].trace;D.xaxis+D.yaxis===b&&E.push(F)}return E}function C(A,b,E,T,F){var D=o.ensureSingle(A,"rect",p.maskMinClassName,function(I){I.attr({x:0,y:0,"shape-rendering":"crispEdges"})});D.attr("height",T._height).call(n.fill,p.maskColor);var R=o.ensureSingle(A,"rect",p.maskMaxClassName,function(I){I.attr({y:0,"shape-rendering":"crispEdges"})});if(R.attr("height",T._height).call(n.fill,p.maskColor),F.rangemode!=="match"){var P=o.ensureSingle(A,"rect",p.maskMinOppAxisClassName,function(I){I.attr({y:0,"shape-rendering":"crispEdges"})});P.attr("width",T._width).call(n.fill,p.maskOppAxisColor);var z=o.ensureSingle(A,"rect",p.maskMaxOppAxisClassName,function(I){I.attr({y:0,"shape-rendering":"crispEdges"})});z.attr("width",T._width).style("border-top",p.maskOppBorder).call(n.fill,p.maskOppAxisColor)}}function w(A,b,E,T){if(!b._context.staticPlot){var F=o.ensureSingle(A,"rect",p.slideBoxClassName,function(D){D.attr({y:0,cursor:p.slideBoxCursor,"shape-rendering":"crispEdges"})});F.attr({height:T._height,fill:p.slideBoxFill})}}function k(A,b,E,T){var F=o.ensureSingle(A,"g",p.grabberMinClassName),D=o.ensureSingle(A,"g",p.grabberMaxClassName),R={x:0,width:p.handleWidth,rx:p.handleRadius,fill:n.background,stroke:n.defaultLine,"stroke-width":p.handleStrokeWidth,"shape-rendering":"crispEdges"},P={y:Math.round(T._height/4),height:Math.round(T._height/2)},z=o.ensureSingle(F,"rect",p.handleMinClassName,function(G){G.attr(R)});z.attr(P);var I=o.ensureSingle(D,"rect",p.handleMaxClassName,function(G){G.attr(R)});I.attr(P);var L={width:p.grabAreaWidth,x:0,y:0,fill:p.grabAreaFill,cursor:b._context.staticPlot?void 0:p.grabAreaCursor},B=o.ensureSingle(F,"rect",p.grabAreaMinClassName,function(G){G.attr(L)});B.attr("height",T._height);var O=o.ensureSingle(D,"rect",p.grabAreaMaxClassName,function(G){G.attr(L)});O.attr("height",T._height)}}}),zV=de({"src/components/rangeslider/index.js"(e,r){"use strict";var t=Qt(),i=Vw(),a=dk(),o=FV();r.exports={moduleType:"component",name:"rangeslider",schema:{subplots:{xaxis:{rangeslider:t.extendFlat({},i,{yaxis:a})}}},layoutAttributes:Vw(),handleDefaults:PV(),calcAutorange:IV(),draw:RV(),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}}}),Hw=de({"src/components/rangeselector/attributes.js"(e,r){"use strict";var t=us(),i=Jo(),a=Ro().templatedArray,o=a("button",{visible:{valType:"boolean",dflt:!0,editType:"plot"},step:{valType:"enumerated",values:["month","year","day","hour","minute","second","all"],dflt:"month",editType:"plot"},stepmode:{valType:"enumerated",values:["backward","todate"],dflt:"backward",editType:"plot"},count:{valType:"number",min:0,dflt:1,editType:"plot"},label:{valType:"string",editType:"plot"},editType:"plot"});r.exports={visible:{valType:"boolean",editType:"plot"},buttons:o,x:{valType:"number",min:-2,max:3,editType:"plot"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"plot"},y:{valType:"number",min:-2,max:3,editType:"plot"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"bottom",editType:"plot"},font:t({editType:"plot"}),bgcolor:{valType:"color",dflt:i.lightLine,editType:"plot"},activecolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:i.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"}}}),pk=de({"src/components/rangeselector/constants.js"(e,r){"use strict";r.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}}}),BV=de({"src/components/rangeselector/defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Ro(),o=fc(),s=Hw(),l=pk();r.exports=function(f,h,d,p,g){var m=f.rangeselector||{},y=a.newContainer(h,"rangeselector");function _(C,w){return t.coerce(m,y,s,C,w)}var v=o(m,y,{name:"buttons",handleItemDefaults:n,calendar:g}),x=_("visible",v.length>0);if(x){var S=u(h,d,p);_("x",S[0]),_("y",S[1]),t.noneOrAll(f,h,["x","y"]),_("xanchor"),_("yanchor"),t.coerceFont(_,"font",d.font);var M=_("bgcolor");_("activecolor",i.contrast(M,l.lightAmount,l.darkAmount)),_("bordercolor"),_("borderwidth")}};function n(c,f,h,d){var p=d.calendar;function g(_,v){return t.coerce(c,f,s.buttons,_,v)}var m=g("visible");if(m){var y=g("step");y!=="all"&&(p&&p!=="gregorian"&&(y==="month"||y==="year")?f.stepmode="backward":g("stepmode"),g("count")),g("label")}}function u(c,f,h){for(var d=h.filter(function(y){return f[y].anchor===c._id}),p=0,g=0;g<d.length;g++){var m=f[d[g]].domain;m&&(p=Math.max(m[1],p))}return[c.domain[0],p+l.yPad]}}}),OV=de({"src/components/rangeselector/get_update_object.js"(e,r){"use strict";var t=Ba(),i=Qt().titleCase;r.exports=function(s,l){var n=s._name,u={};if(l.step==="all")u[n+".autorange"]=!0;else{var c=a(s,l);u[n+".range[0]"]=c[0],u[n+".range[1]"]=c[1]}return u};function a(o,s){var l=o.range,n=new Date(o.r2l(l[1])),u=s.step,c=t["utc"+i(u)],f=s.count,h;switch(s.stepmode){case"backward":h=o.l2r(+c.offset(n,-f));break;case"todate":var d=c.offset(n,-f);h=o.l2r(+c.ceil(d));break}var p=l[1];return[h,p]}}}),NV=de({"src/components/rangeselector/draw.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Es(),o=ta(),s=hn(),l=Qt(),n=l.strTranslate,u=Zo(),c=Hs(),f=Bl(),h=f.LINE_SPACING,d=f.FROM_TL,p=f.FROM_BR,g=pk(),m=OV();r.exports=function(A){var b=A._fullLayout,E=b._infolayer.selectAll(".rangeselector").data(y(A),_);E.enter().append("g").classed("rangeselector",!0),E.exit().remove(),E.style({cursor:"pointer","pointer-events":"all"}),E.each(function(T){var F=t.select(this),D=T,R=D.rangeselector,P=F.selectAll("g.button").data(l.filterVisible(R.buttons));P.enter().append("g").classed("button",!0),P.exit().remove(),P.each(function(z){var I=t.select(this),L=m(D,z);z._isActive=v(D,z,L),I.call(x,R,z),I.call(M,R,z,A),I.on("click",function(){A._dragged||i.call("_guiRelayout",A,L)}),I.on("mouseover",function(){z._isHovered=!0,I.call(x,R,z)}),I.on("mouseout",function(){z._isHovered=!1,I.call(x,R,z)})}),w(A,P,R,D._name,F)})};function y(k){for(var A=c.list(k,"x",!0),b=[],E=0;E<A.length;E++){var T=A[E];T.rangeselector&&T.rangeselector.visible&&b.push(T)}return b}function _(k){return k._id}function v(k,A,b){if(A.step==="all")return k.autorange===!0;var E=Object.keys(b);return k.range[0]===b[E[0]]&&k.range[1]===b[E[1]]}function x(k,A,b){var E=l.ensureSingle(k,"rect","selector-rect",function(T){T.attr("shape-rendering","crispEdges")});E.attr({rx:g.rx,ry:g.ry}),E.call(o.stroke,A.bordercolor).call(o.fill,S(A,b)).style("stroke-width",A.borderwidth+"px")}function S(k,A){return A._isActive||A._isHovered?k.activecolor:k.bgcolor}function M(k,A,b,E){function T(D){u.convertToTspans(D,E)}var F=l.ensureSingle(k,"text","selector-text",function(D){D.attr("text-anchor","middle")});F.call(s.font,A.font).text(C(b,E._fullLayout._meta)).call(T)}function C(k,A){return k.label?A?l.templateString(k.label,A):k.label:k.step==="all"?"all":k.count+k.step.charAt(0)}function w(k,A,b,E,T){var F=0,D=0,R=b.borderwidth;A.each(function(){var O=t.select(this),G=O.select(".selector-text"),W=b.font.size*h,X=Math.max(W*u.lineCount(G),16)+3;D=Math.max(D,X)}),A.each(function(){var O=t.select(this),G=O.select(".selector-rect"),W=O.select(".selector-text"),X=W.node()&&s.bBox(W.node()).width,Z=b.font.size*h,J=u.lineCount(W),N=Math.max(X+10,g.minButtonWidth);O.attr("transform",n(R+F,R)),G.attr({x:0,y:0,width:N,height:D}),u.positionText(W,N/2,D/2-(J-1)*Z/2+3),F+=N+5});var P=k._fullLayout._size,z=P.l+P.w*b.x,I=P.t+P.h*(1-b.y),L="left";l.isRightAnchor(b)&&(z-=F,L="right"),l.isCenterAnchor(b)&&(z-=F/2,L="center");var B="top";l.isBottomAnchor(b)&&(I-=D,B="bottom"),l.isMiddleAnchor(b)&&(I-=D/2,B="middle"),F=Math.ceil(F),D=Math.ceil(D),z=Math.round(z),I=Math.round(I),a.autoMargin(k,E+"-range-selector",{x:b.x,y:b.y,l:F*d[L],r:F*p[L],b:D*p[B],t:D*d[B]}),T.attr("transform",n(z,I))}}}),jV=de({"src/components/rangeselector/index.js"(e,r){"use strict";r.exports={moduleType:"component",name:"rangeselector",schema:{subplots:{xaxis:{rangeselector:Hw()}}},layoutAttributes:Hw(),handleDefaults:BV(),draw:NV()}}}),Is=de({"src/plots/domain.js"(e){"use strict";var r=fn().extendFlat;e.attributes=function(t,i){t=t||{},i=i||{};var a={valType:"info_array",editType:t.editType,items:[{valType:"number",min:0,max:1,editType:t.editType},{valType:"number",min:0,max:1,editType:t.editType}],dflt:[0,1]},o=t.name?t.name+" ":"",s=t.trace?"trace":"subplot",l=i.description?" "+i.description:"",n={x:r({},a,{}),y:r({},a,{}),editType:t.editType};return t.noGridCell||(n.row={valType:"integer",min:0,dflt:0,editType:t.editType},n.column={valType:"integer",min:0,dflt:0,editType:t.editType}),n},e.defaults=function(t,i,a,o){var s=o&&o.x||[0,1],l=o&&o.y||[0,1],n=i.grid;if(n){var u=a("domain.column");u!==void 0&&(u<n.columns?s=n._domains.x[u]:delete t.domain.column);var c=a("domain.row");c!==void 0&&(c<n.rows?l=n._domains.y[c]:delete t.domain.row)}var f=a("domain.x",s),h=a("domain.y",l);f[0]<f[1]||(t.domain.x=s.slice()),h[0]<h[1]||(t.domain.y=l.slice())}}}),vk=de({"src/components/grid/index.js"(e,r){"use strict";var t=Qt(),i=(s1(),ti(mv)).counter,a=Is().attributes,o=zl().idRegex,s=Ro(),l={rows:{valType:"integer",min:1,editType:"plot"},roworder:{valType:"enumerated",values:["top to bottom","bottom to top"],dflt:"top to bottom",editType:"plot"},columns:{valType:"integer",min:1,editType:"plot"},subplots:{valType:"info_array",freeLength:!0,dimensions:2,items:{valType:"enumerated",values:[i("xy").toString(),""],editType:"plot"},editType:"plot"},xaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.x.toString(),""],editType:"plot"},editType:"plot"},yaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.y.toString(),""],editType:"plot"},editType:"plot"},pattern:{valType:"enumerated",values:["independent","coupled"],dflt:"coupled",editType:"plot"},xgap:{valType:"number",min:0,max:1,editType:"plot"},ygap:{valType:"number",min:0,max:1,editType:"plot"},domain:a({name:"grid",editType:"plot",noGridCell:!0},{}),xside:{valType:"enumerated",values:["bottom","bottom plot","top plot","top"],dflt:"bottom plot",editType:"plot"},yside:{valType:"enumerated",values:["left","left plot","right plot","right"],dflt:"left plot",editType:"plot"},editType:"plot"};function n(d,p,g){var m=p[g+"axes"],y=Object.keys((d._splomAxes||{})[g]||{});if(Array.isArray(m))return m;if(y.length)return y}function u(d,p){var g=d.grid||{},m=n(p,g,"x"),y=n(p,g,"y");if(!d.grid&&!m&&!y)return;var _=Array.isArray(g.subplots)&&Array.isArray(g.subplots[0]),v=Array.isArray(m),x=Array.isArray(y),S=v&&m!==g.xaxes&&x&&y!==g.yaxes,M,C;_?(M=g.subplots.length,C=g.subplots[0].length):(x&&(M=y.length),v&&(C=m.length));var w=s.newContainer(p,"grid");function k(I,L){return t.coerce(g,w,l,I,L)}var A=k("rows",M),b=k("columns",C);if(!(A*b>1)){delete p.grid;return}if(!_&&!v&&!x){var E=k("pattern")==="independent";E&&(_=!0)}w._hasSubplotGrid=_;var T=k("roworder"),F=T==="top to bottom",D=_?.2:.1,R=_?.3:.1,P,z;S&&p._splomGridDflt&&(P=p._splomGridDflt.xside,z=p._splomGridDflt.yside),w._domains={x:c("x",k,D,P,b),y:c("y",k,R,z,A,F)}}function c(d,p,g,m,y,_){var v=p(d+"gap",g),x=p("domain."+d);p(d+"side",m);for(var S=new Array(y),M=x[0],C=(x[1]-M)/(y-v),w=C*(1-v),k=0;k<y;k++){var A=M+C*k;S[_?y-1-k:k]=[A,A+w]}return S}function f(d,p){var g=p.grid;if(!(!g||!g._domains)){var m=d.grid||{},y=p._subplots,_=g._hasSubplotGrid,v=g.rows,x=g.columns,S=g.pattern==="independent",M,C,w,k,A,b,E,T=g._axisMap={};if(_){var F=m.subplots||[];b=g.subplots=new Array(v);var D=1;for(M=0;M<v;M++){var R=b[M]=new Array(x),P=F[M]||[];for(C=0;C<x;C++)if(S?(A=D===1?"xy":"x"+D+"y"+D,D++):A=P[C],R[C]="",y.cartesian.indexOf(A)!==-1){if(E=A.indexOf("y"),w=A.slice(0,E),k=A.slice(E),T[w]!==void 0&&T[w]!==C||T[k]!==void 0&&T[k]!==M)continue;R[C]=A,T[w]=C,T[k]=M}}}else{var z=n(p,m,"x"),I=n(p,m,"y");g.xaxes=h(z,y.xaxis,x,T,"x"),g.yaxes=h(I,y.yaxis,v,T,"y")}var L=g._anchors={},B=g.roworder==="top to bottom";for(var O in T){var G=O.charAt(0),W=g[G+"side"],X,Z,J;if(W.length<8)L[O]="free";else if(G==="x"){if(W.charAt(0)==="t"===B?(X=0,Z=1,J=v):(X=v-1,Z=-1,J=-1),_){var N=T[O];for(M=X;M!==J;M+=Z)if(A=b[M][N],!!A&&(E=A.indexOf("y"),A.slice(0,E)===O)){L[O]=A.slice(E);break}}else for(M=X;M!==J;M+=Z)if(k=g.yaxes[M],y.cartesian.indexOf(O+k)!==-1){L[O]=k;break}}else if(W.charAt(0)==="l"?(X=0,Z=1,J=x):(X=x-1,Z=-1,J=-1),_){var H=T[O];for(M=X;M!==J;M+=Z)if(A=b[H][M],!!A&&(E=A.indexOf("y"),A.slice(E)===O)){L[O]=A.slice(0,E);break}}else for(M=X;M!==J;M+=Z)if(w=g.xaxes[M],y.cartesian.indexOf(w+O)!==-1){L[O]=w;break}}}}function h(d,p,g,m,y){var _=new Array(g),v;function x(S,M){p.indexOf(M)!==-1&&m[M]===void 0?(_[S]=M,m[M]=S):_[S]=""}if(Array.isArray(d))for(v=0;v<g;v++)x(v,d[v]);else for(x(0,y),v=1;v<g;v++)x(v,y+(v+1));return _}r.exports={moduleType:"component",name:"grid",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:u,contentDefaults:f}}}),mk=de({"src/components/errorbars/attributes.js"(e,r){"use strict";r.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc"}}}),UV=de({"src/components/errorbars/defaults.js"(e,r){"use strict";var t=da(),i=Ma(),a=Qt(),o=Ro(),s=mk();r.exports=function(l,n,u,c){var f="error_"+c.axis,h=o.newContainer(n,f),d=l[f]||{};function p(S,M){return a.coerce(d,h,s,S,M)}var g=d.array!==void 0||d.value!==void 0||d.type==="sqrt",m=p("visible",g);if(m!==!1){var y=p("type","array"in d?"data":"percent"),_=!0;y!=="sqrt"&&(_=p("symmetric",!((y==="data"?"arrayminus":"valueminus")in d))),y==="data"?(p("array"),p("traceref"),_||(p("arrayminus"),p("tracerefminus"))):(y==="percent"||y==="constant")&&(p("value"),_||p("valueminus"));var v="copy_"+c.inherit+"style";if(c.inherit){var x=n["error_"+c.inherit];(x||{}).visible&&p(v,!(d.color||t(d.thickness)||t(d.width)))}(!c.inherit||!h[v])&&(p("color",u),p("thickness"),p("width",i.traceIs(n,"gl3d")?0:4))}}}}),gk=de({"src/components/errorbars/compute_error.js"(e,r){"use strict";r.exports=function(a){var o=a.type,s=a.symmetric;if(o==="data"){var l=a.array||[];if(s)return function(h,d){var p=+l[d];return[p,p]};var n=a.arrayminus||[];return function(h,d){var p=+l[d],g=+n[d];return!isNaN(p)||!isNaN(g)?[g||0,p||0]:[NaN,NaN]}}else{var u=t(o,a.value),c=t(o,a.valueminus);return s||a.valueminus===void 0?function(h){var d=u(h);return[d,d]}:function(h){return[c(h),u(h)]}}};function t(i,a){if(i==="percent")return function(o){return Math.abs(o*a/100)};if(i==="constant")return function(){return Math.abs(a)};if(i==="sqrt")return function(o){return Math.sqrt(Math.abs(o))}}}}),qV=de({"src/components/errorbars/calc.js"(e,r){"use strict";var t=da(),i=Ma(),a=nn(),o=Qt(),s=gk();r.exports=function(u){for(var c=u.calcdata,f=0;f<c.length;f++){var h=c[f],d=h[0].trace;if(d.visible===!0&&i.traceIs(d,"errorBarsOK")){var p=a.getFromId(u,d.xaxis),g=a.getFromId(u,d.yaxis);l(h,d,p,"x"),l(h,d,g,"y")}}};function l(n,u,c,f){var h=u["error_"+f]||{},d=h.visible&&["linear","log"].indexOf(c.type)!==-1,p=[];if(d){for(var g=s(h),m=0;m<n.length;m++){var y=n[m],_=y.i;if(_===void 0)_=m;else if(_===null)continue;var v=y[f];if(t(c.c2l(v))){var x=g(v,_);if(t(x[0])&&t(x[1])){var S=y[f+"s"]=v-x[0],M=y[f+"h"]=v+x[1];p.push(S,M)}}}var C=c._id,w=u._extremes[C],k=a.findExtremes(c,p,o.extendFlat({tozero:w.opts.tozero},{padded:!0}));w.min=w.min.concat(k.min),w.max=w.max.concat(k.max)}}}}),VV=de({"src/components/errorbars/plot.js"(e,r){"use strict";var t=Yr(),i=da(),a=hn(),o=bs();r.exports=function(n,u,c,f){var h,d=c.xaxis,p=c.yaxis,g=f&&f.duration>0,m=n._context.staticPlot;u.each(function(y){var _=y[0].trace,v=_.error_x||{},x=_.error_y||{},S;_.ids&&(S=function(k){return k.id});var M=o.hasMarkers(_)&&_.marker.maxdisplayed>0;!x.visible&&!v.visible&&(y=[]);var C=t.select(this).selectAll("g.errorbar").data(y,S);if(C.exit().remove(),!!y.length){v.visible||C.selectAll("path.xerror").remove(),x.visible||C.selectAll("path.yerror").remove(),C.style("opacity",1);var w=C.enter().append("g").classed("errorbar",!0);g&&w.style("opacity",0).transition().duration(f.duration).style("opacity",1),a.setClipUrl(C,c.layerClipId,n),C.each(function(k){var A=t.select(this),b=s(k,d,p);if(!(M&&!k.vis)){var E,T=A.select("path.yerror");if(x.visible&&i(b.x)&&i(b.yh)&&i(b.ys)){var F=x.width;E="M"+(b.x-F)+","+b.yh+"h"+2*F+"m-"+F+",0V"+b.ys,b.noYS||(E+="m-"+F+",0h"+2*F),h=!T.size(),h?T=A.append("path").style("vector-effect",m?"none":"non-scaling-stroke").classed("yerror",!0):g&&(T=T.transition().duration(f.duration).ease(f.easing)),T.attr("d",E)}else T.remove();var D=A.select("path.xerror");if(v.visible&&i(b.y)&&i(b.xh)&&i(b.xs)){var R=(v.copy_ystyle?x:v).width;E="M"+b.xh+","+(b.y-R)+"v"+2*R+"m0,-"+R+"H"+b.xs,b.noXS||(E+="m0,-"+R+"v"+2*R),h=!D.size(),h?D=A.append("path").style("vector-effect",m?"none":"non-scaling-stroke").classed("xerror",!0):g&&(D=D.transition().duration(f.duration).ease(f.easing)),D.attr("d",E)}else D.remove()}})}})};function s(l,n,u){var c={x:n.c2p(l.x),y:u.c2p(l.y)};return l.yh!==void 0&&(c.yh=u.c2p(l.yh),c.ys=u.c2p(l.ys),i(c.ys)||(c.noYS=!0,c.ys=u.c2p(l.ys,!0))),l.xh!==void 0&&(c.xh=n.c2p(l.xh),c.xs=n.c2p(l.xs),i(c.xs)||(c.noXS=!0,c.xs=n.c2p(l.xs,!0))),c}}}),GV=de({"src/components/errorbars/style.js"(e,r){"use strict";var t=Yr(),i=ta();r.exports=function(o){o.each(function(s){var l=s[0].trace,n=l.error_y||{},u=l.error_x||{},c=t.select(this);c.selectAll("path.yerror").style("stroke-width",n.thickness+"px").call(i.stroke,n.color),u.copy_ystyle&&(u=n),c.selectAll("path.xerror").style("stroke-width",u.thickness+"px").call(i.stroke,u.color)})}}}),HV=de({"src/components/errorbars/index.js"(e,r){"use strict";var t=Qt(),i=Ps().overrideAll,a=mk(),o={error_x:t.extendFlat({},a),error_y:t.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:t.extendFlat({},a),error_y:t.extendFlat({},a),error_z:t.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,r.exports={moduleType:"component",name:"errorbars",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,"calc","nested"),scattergl:i(o,"calc","nested")}},supplyDefaults:UV(),calc:qV(),makeComputeError:gk(),plot:VV(),style:GV(),hoverInfo:l};function l(n,u,c){(u.error_y||{}).visible&&(c.yerr=n.yh-n.y,u.error_y.symmetric||(c.yerrneg=n.y-n.ys)),(u.error_x||{}).visible&&(c.xerr=n.xh-n.x,u.error_x.symmetric||(c.xerrneg=n.x-n.xs))}}}),$V=de({"src/components/colorbar/constants.js"(e,r){"use strict";r.exports={cn:{colorbar:"colorbar",cbbg:"cbbg",cbfill:"cbfill",cbfills:"cbfills",cbline:"cbline",cblines:"cblines",cbaxis:"cbaxis",cbtitleunshift:"cbtitleunshift",cbtitle:"cbtitle",cboutline:"cboutline",crisp:"crisp",jsPlaceholder:"js-placeholder"}}}}),WV=de({"src/components/colorbar/draw.js"(e,r){"use strict";var t=Yr(),i=Es(),a=Ma(),o=nn(),s=Uc(),l=Qt(),n=l.strTranslate,u=fn().extendFlat,c=md(),f=hn(),h=ta(),d=xv(),p=Zo(),g=Wu().flipScale,m=zy(),y=Nw(),_=Mu(),v=Bl(),x=v.LINE_SPACING,S=v.FROM_TL,M=v.FROM_BR,C=$V().cn;function w(R){var P=R._fullLayout,z=P._infolayer.selectAll("g."+C.colorbar).data(k(R),function(I){return I._id});z.enter().append("g").attr("class",function(I){return I._id}).classed(C.colorbar,!0),z.each(function(I){var L=t.select(this);l.ensureSingle(L,"rect",C.cbbg),l.ensureSingle(L,"g",C.cbfills),l.ensureSingle(L,"g",C.cblines),l.ensureSingle(L,"g",C.cbaxis,function(O){O.classed(C.crisp,!0)}),l.ensureSingle(L,"g",C.cbtitleunshift,function(O){O.append("g").classed(C.cbtitle,!0)}),l.ensureSingle(L,"rect",C.cboutline);var B=E(L,I,R);B&&B.then&&(R._promises||[]).push(B),R._context.edits.colorbarPosition&&T(L,I,R)}),z.exit().each(function(I){i.autoMargin(R,I._id)}).remove(),z.order()}function k(R){var P=R._fullLayout,z=R.calcdata,I=[],L,B,O,G;function W(Y){return u(Y,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function X(){typeof G.calc=="function"?G.calc(R,O,L):(L._fillgradient=B.reversescale?g(B.colorscale):B.colorscale,L._zrange=[B[G.min],B[G.max]])}for(var Z=0;Z<z.length;Z++){var J=z[Z];if(O=J[0].trace,!!O._module){var N=O._module.colorbar;if(O.visible===!0&&N)for(var H=Array.isArray(N),$=H?N:[N],U=0;U<$.length;U++){G=$[U];var V=G.container;B=V?O[V]:O,B&&B.showscale&&(L=W(B.colorbar),L._id="cb"+O.uid+(H&&V?"-"+V:""),L._traceIndex=O.index,L._propPrefix=(V?V+".":"")+"colorbar.",L._meta=O._meta,X(),I.push(L))}}}for(var j in P._colorAxes)if(B=P[j],B.showscale){var q=P._colorAxes[j];L=W(B.colorbar),L._id="cb"+j,L._propPrefix=j+".colorbar.",L._meta=P._meta,G={min:"cmin",max:"cmax"},q[0]!=="heatmap"&&(O=q[1],G.calc=O._module.colorbar.calc),X(),I.push(L)}return I}var A=(R,P)=>[Math.min(R[0]+P,R[1]),R[1]],b=(R,P)=>[R[0],Math.max(R[1]-P,R[0])];function E(R,P,z){var I=P.orientation==="v",L=P.len,B=P.lenmode,O=P.thickness,G=P.thicknessmode,W=P.outlinewidth,X=P.borderwidth,Z=P.bgcolor,J=P.xanchor,N=P.yanchor,H=P.xpad,$=P.ypad,U=P.x,V=I?P.y:1-P.y,j=P.yref==="paper",q=P.xref==="paper",Y=z._fullLayout,K=Y._size,te=P._fillcolor,ne=P._line,se=P.title,le=se.side,ce=P._zrange||t.extent((typeof te=="function"?te:ne.color).domain()),pe=typeof ne.color=="function"?ne.color:function(){return ne.color},xe=typeof te=="function"?te:function(){return te},ye=P._levels,fe=F(z,P,ce),ae=fe.fill,ee=fe.line,ie=Math.round(O*(G==="fraction"?I?K.w:K.h:1)),Q=ie/(I?K.w:K.h),ue=Math.round(L*(B==="fraction"?I?K.h:K.w:1)),ge=ue/(I?K.h:K.w),Me=q?K.w:z._fullLayout.width,Te=j?K.h:z._fullLayout.height,je=Math.round(I?U*Me+H:V*Te+$),Ve={center:.5,right:1}[J]||0,Ze={top:1,middle:.5}[N]||0,Ke=I?U-Ve*Q:V-Ze*Q,vt=I?V-Ze*ge:U-Ve*ge,xt=Math.round(I?Te*(1-vt):Me*vt);P._lenFrac=ge,P._thickFrac=Q,P._uFrac=Ke,P._vFrac=vt;var Pt=P._axis=D(z,P,ce);Pt.position=Q+(I?U+H/K.w:V+$/K.h);var mt=["top","bottom"].indexOf(le)!==-1;if(I&&mt&&(Pt.title.side=le,Pt.titlex=U+H/K.w,Pt.titley=vt+(se.side==="top"?ge-$/K.h:$/K.h)),!I&&!mt&&(Pt.title.side=le,Pt.titley=V+$/K.h,Pt.titlex=vt+H/K.w),ne.color&&P.tickmode==="auto"){Pt.tickmode="linear",Pt.tick0=ye.start;var Mt=ye.size,lt=l.constrain(ue/50,4,15)+1,qe=(ce[1]-ce[0])/((P.nticks||lt)*Mt);if(qe>1){var Ye=Math.pow(10,Math.floor(Math.log(qe)/Math.LN10));Mt*=Ye*l.roundUp(qe/Ye,[2,5,10]),(Math.abs(ye.start)/ye.size+1e-6)%1<2e-6&&(Pt.tick0=0)}Pt.dtick=Mt}var me=I?$/K.h:H/K.w;Pt.domain=b(A([vt,vt+ge],me),me),Pt.setScale(),R.attr("transform",n(Math.round(K.l),Math.round(K.t)));var _e=R.select("."+C.cbtitleunshift).attr("transform",n(-Math.round(K.l),-Math.round(K.t))),Ae=Pt.ticklabelposition,ke=Pt.title.font.size,Ee=R.select("."+C.cbaxis),De,Je=0,Ue=0;function at(Gt,fr){var gt={propContainer:Pt,propName:P._propPrefix+"title.text",traceIndex:P._traceIndex,_meta:P._meta,placeholder:Y._dfltTitle.colorbar,containerGroup:R.select("."+C.cbtitle)},yt=Gt.charAt(0)==="h"?Gt.slice(1):"h"+Gt;R.selectAll("."+yt+",."+yt+"-math-group").remove(),d.draw(z,Gt,u(gt,fr||{}))}function rt(){if(I&&mt||!I&&!mt){var Gt,fr;le==="top"&&(Gt=H+K.l+Me*U,fr=$+K.t+Te*(1-vt-ge)+3+ke*.75),le==="bottom"&&(Gt=H+K.l+Me*U,fr=$+K.t+Te*(1-vt)-3-ke*.25),le==="right"&&(fr=$+K.t+Te*V+3+ke*.75,Gt=H+K.l+Me*vt),at(Pt._id+"title",{attributes:{x:Gt,y:fr,"text-anchor":I?"start":"middle"}})}}function ft(){if(I&&!mt||!I&&mt){var Gt=Pt.position||0,fr=Pt._offset+Pt._length/2,gt,yt;if(le==="right")yt=fr,gt=K.l+Me*Gt+10+ke*(Pt.showticklabels?1:.5);else if(gt=fr,le==="bottom"&&(yt=K.t+Te*Gt+10+(Ae.indexOf("inside")===-1?Pt.tickfont.size:0)+(Pt.ticks!=="inside"&&P.ticklen||0)),le==="top"){var kt=se.text.split("<br>").length;yt=K.t+Te*Gt+10-ie-x*ke*kt}at((I?"h":"v")+Pt._id+"title",{avoid:{selection:t.select(z).selectAll("g."+Pt._id+"tick"),side:le,offsetTop:I?0:K.t,offsetLeft:I?K.l:0,maxShift:I?Y.width:Y.height},attributes:{x:gt,y:yt,"text-anchor":"middle"},transform:{rotate:I?-90:0,offset:0}})}}function At(){if(!I&&!mt||I&&mt){var Gt=R.select("."+C.cbtitle),fr=Gt.select("text"),gt=[-W/2,W/2],yt=Gt.select(".h"+Pt._id+"title-math-group").node(),kt=15.6;fr.node()&&(kt=parseInt(fr.node().style.fontSize,10)*x);var Lt;if(yt?(Lt=f.bBox(yt),Ue=Lt.width,Je=Lt.height,Je>kt&&(gt[1]-=(Je-kt)/2)):fr.node()&&!fr.classed(C.jsPlaceholder)&&(Lt=f.bBox(fr.node()),Ue=Lt.width,Je=Lt.height),I){if(Je){if(Je+=5,le==="top")Pt.domain=b(Pt.domain,Je/K.h),gt[1]*=-1;else{Pt.domain=A(Pt.domain,Je/K.h);var Ct=p.lineCount(fr);gt[1]+=(1-Ct)*kt}Gt.attr("transform",n(gt[0],gt[1])),Pt.setScale()}}else Ue&&(le==="right"&&(Pt.domain=A(Pt.domain,(Ue+ke/2)/K.w)),Gt.attr("transform",n(gt[0],gt[1])),Pt.setScale())}R.selectAll("."+C.cbfills+",."+C.cblines).attr("transform",I?n(0,Math.round(K.h*(1-Pt.domain[1]))):n(Math.round(K.w*Pt.domain[0]),0)),Ee.attr("transform",I?n(0,Math.round(-K.t)):n(Math.round(-K.l),0));var $t=R.select("."+C.cbfills).selectAll("rect."+C.cbfill).attr("style","").data(ae);$t.enter().append("rect").classed(C.cbfill,!0).attr("style",""),$t.exit().remove();var mr=ce.map(Pt.c2p).map(Math.round).sort(function(Ai,oi){return Ai-oi});$t.each(function(Ai,oi){var Qr=[oi===0?ce[0]:(ae[oi]+ae[oi-1])/2,oi===ae.length-1?ce[1]:(ae[oi]+ae[oi+1])/2].map(Pt.c2p).map(Math.round);I&&(Qr[1]=l.constrain(Qr[1]+(Qr[1]>Qr[0])?1:-1,mr[0],mr[1]));var ea=t.select(this).attr(I?"x":"y",je).attr(I?"y":"x",t.min(Qr)).attr(I?"width":"height",Math.max(ie,2)).attr(I?"height":"width",Math.max(t.max(Qr)-t.min(Qr),2));if(P._fillgradient)f.gradient(ea,z,P._id,I?"vertical":"horizontalreversed",P._fillgradient,"fill");else{var $i=xe(Ai).replace("e-","");ea.attr("fill",h.hexString($i))}});var br=R.select("."+C.cblines).selectAll("path."+C.cbline).data(ne.color&&ne.width?ee:[]);br.enter().append("path").classed(C.cbline,!0),br.exit().remove(),br.each(function(Ai){var oi=je,Qr=Math.round(Pt.c2p(Ai))+ne.width/2%1;t.select(this).attr("d","M"+(I?oi+","+Qr:Qr+","+oi)+(I?"h":"v")+ie).call(f.lineGroupStyle,ne.width,pe(Ai),ne.dash)}),Ee.selectAll("g."+Pt._id+"tick,path").remove();var Er=je+ie+(W||0)/2-(P.ticks==="outside"?1:0),Tr=o.calcTicks(Pt),Ur=o.getTickSigns(Pt)[2];return o.drawTicks(z,Pt,{vals:Pt.ticks==="inside"?o.clipEnds(Pt,Tr):Tr,layer:Ee,path:o.makeTickPath(Pt,Er,Ur),transFn:o.makeTransTickFn(Pt)}),o.drawLabels(z,Pt,{vals:Tr,layer:Ee,transFn:o.makeTransTickLabelFn(Pt),labelFns:o.makeLabelFns(Pt,Er)})}function ht(){var Gt,fr=ie+W/2;Ae.indexOf("inside")===-1&&(Gt=f.bBox(Ee.node()),fr+=I?Gt.width:Gt.height),De=_e.select("text");var gt=0,yt=I&&le==="top",kt=!I&&le==="right",Lt=0;if(De.node()&&!De.classed(C.jsPlaceholder)){var Ct,$t=_e.select(".h"+Pt._id+"title-math-group").node();$t&&(I&&mt||!I&&!mt)?(Gt=f.bBox($t),gt=Gt.width,Ct=Gt.height):(Gt=f.bBox(_e.node()),gt=Gt.right-K.l-(I?je:xt),Ct=Gt.bottom-K.t-(I?xt:je),!I&&le==="top"&&(fr+=Gt.height,Lt=Gt.height)),kt&&(De.attr("transform",n(gt/2+ke/2,0)),gt*=2),fr=Math.max(fr,I?gt:Ct)}var mr=(I?H:$)*2+fr+X+W/2,br=0;!I&&se.text&&N==="bottom"&&V<=0&&(br=mr/2,mr+=br,Lt+=br),Y._hColorbarMoveTitle=br,Y._hColorbarMoveCBTitle=Lt;var Er=X+W,Tr=(I?je:xt)-Er/2-(I?H:0),Ur=(I?xt:je)-(I?ue:$+Lt-br);R.select("."+C.cbbg).attr("x",Tr).attr("y",Ur).attr(I?"width":"height",Math.max(mr-br,2)).attr(I?"height":"width",Math.max(ue+Er,2)).call(h.fill,Z).call(h.stroke,P.bordercolor).style("stroke-width",X);var Ai=kt?Math.max(gt-10,0):0;R.selectAll("."+C.cboutline).attr("x",(I?je:xt+H)+Ai).attr("y",(I?xt+$-ue:je)+(yt?Je:0)).attr(I?"width":"height",Math.max(ie,2)).attr(I?"height":"width",Math.max(ue-(I?2*$+Je:2*H+Ai),2)).call(h.stroke,P.outlinecolor).style({fill:"none","stroke-width":W});var oi=I?Ve*mr:0,Qr=I?0:(1-Ze)*mr-Lt;if(oi=q?K.l-oi:-oi,Qr=j?K.t-Qr:-Qr,R.attr("transform",n(oi,Qr)),!I&&(X||h.opacity(Z)&&!h.equals(Y.paper_bgcolor,Z))){var ea=Ee.selectAll("text"),$i=ea[0].length,ja=R.select("."+C.cbbg).node(),ya=f.bBox(ja),pa=f.getTranslate(R),xi=2;ea.each(function(zt,Wt){var Yt=0,ze=$i-1;if(Wt===Yt||Wt===ze){var tt=f.bBox(this),ct=f.getTranslate(this),wt;if(Wt===ze){var Nt=tt.right+ct.x,It=ya.right+pa.x+xt-X-xi+U;wt=It-Nt,wt>0&&(wt=0)}else if(Wt===Yt){var Zt=tt.left+ct.x,qt=ya.left+pa.x+xt+X+xi;wt=qt-Zt,wt<0&&(wt=0)}wt&&($i<3?this.setAttribute("transform","translate("+wt+",0) "+this.getAttribute("transform")):this.setAttribute("visibility","hidden"))}})}var bi={},Ua=S[J],dn=M[J],pi=S[N],Jr=M[N],Be=mr-ie;I?(B==="pixels"?(bi.y=V,bi.t=ue*pi,bi.b=ue*Jr):(bi.t=bi.b=0,bi.yt=V+L*pi,bi.yb=V-L*Jr),G==="pixels"?(bi.x=U,bi.l=mr*Ua,bi.r=mr*dn):(bi.l=Be*Ua,bi.r=Be*dn,bi.xl=U-O*Ua,bi.xr=U+O*dn)):(B==="pixels"?(bi.x=U,bi.l=ue*Ua,bi.r=ue*dn):(bi.l=bi.r=0,bi.xl=U+L*Ua,bi.xr=U-L*dn),G==="pixels"?(bi.y=1-V,bi.t=mr*pi,bi.b=mr*Jr):(bi.t=Be*pi,bi.b=Be*Jr,bi.yt=V-O*pi,bi.yb=V+O*Jr));var Fe=P.y<.5?"b":"t",Et=P.x<.5?"l":"r";z._fullLayout._reservedMargin[P._id]={};var St={r:Y.width-Tr-oi,l:Tr+bi.r,b:Y.height-Ur-Qr,t:Ur+bi.b};q&&j?i.autoMargin(z,P._id,bi):q?z._fullLayout._reservedMargin[P._id][Fe]=St[Fe]:j||I?z._fullLayout._reservedMargin[P._id][Et]=St[Et]:z._fullLayout._reservedMargin[P._id][Fe]=St[Fe]}return l.syncOrAsync([i.previousPromises,rt,At,ft,i.previousPromises,ht],z)}function T(R,P,z){var I=P.orientation==="v",L=z._fullLayout,B=L._size,O,G,W;s.init({element:R.node(),gd:z,prepFn:function(){O=R.attr("transform"),c(R)},moveFn:function(X,Z){R.attr("transform",O+n(X,Z)),G=s.align((I?P._uFrac:P._vFrac)+X/B.w,I?P._thickFrac:P._lenFrac,0,1,P.xanchor),W=s.align((I?P._vFrac:1-P._uFrac)-Z/B.h,I?P._lenFrac:P._thickFrac,0,1,P.yanchor);var J=s.getCursor(G,W,P.xanchor,P.yanchor);c(R,J)},doneFn:function(){if(c(R),G!==void 0&&W!==void 0){var X={};X[P._propPrefix+"x"]=G,X[P._propPrefix+"y"]=W,P._traceIndex!==void 0?a.call("_guiRestyle",z,X,P._traceIndex):a.call("_guiRelayout",z,X)}}})}function F(R,P,z){var I=P._levels,L=[],B=[],O,G,W=I.end+I.size/100,X=I.size,Z=1.001*z[0]-.001*z[1],J=1.001*z[1]-.001*z[0];for(G=0;G<1e5&&(O=I.start+G*X,!(X>0?O>=W:O<=W));G++)O>Z&&O<J&&L.push(O);if(P._fillgradient)B=[0];else if(typeof P._fillcolor=="function"){var N=P._filllevels;if(N)for(W=N.end+N.size/100,X=N.size,G=0;G<1e5&&(O=N.start+G*X,!(X>0?O>=W:O<=W));G++)O>z[0]&&O<z[1]&&B.push(O);else B=L.map(function(H){return H-I.size/2}),B.push(B[B.length-1]+I.size)}else P._fillcolor&&typeof P._fillcolor=="string"&&(B=[0]);return I.size<0&&(L.reverse(),B.reverse()),{line:L,fill:B}}function D(R,P,z){var I=R._fullLayout,L=P.orientation==="v",B={type:"linear",range:z,tickmode:P.tickmode,nticks:P.nticks,tick0:P.tick0,dtick:P.dtick,tickvals:P.tickvals,ticktext:P.ticktext,ticks:P.ticks,ticklen:P.ticklen,tickwidth:P.tickwidth,tickcolor:P.tickcolor,showticklabels:P.showticklabels,labelalias:P.labelalias,ticklabelposition:P.ticklabelposition,ticklabeloverflow:P.ticklabeloverflow,ticklabelstep:P.ticklabelstep,tickfont:P.tickfont,tickangle:P.tickangle,tickformat:P.tickformat,exponentformat:P.exponentformat,minexponent:P.minexponent,separatethousands:P.separatethousands,showexponent:P.showexponent,showtickprefix:P.showtickprefix,tickprefix:P.tickprefix,showticksuffix:P.showticksuffix,ticksuffix:P.ticksuffix,title:P.title,showline:!0,anchor:"free",side:L?"right":"bottom",position:1},O=L?"y":"x",G={type:"linear",_id:O+P._id},W={letter:O,font:I.font,noAutotickangles:O==="y",noHover:!0,noTickson:!0,noTicklabelmode:!0,noInsideRange:!0,calendar:I.calendar};function X(Z,J){return l.coerce(B,G,_,Z,J)}return m(B,G,X,W,I),y(B,G,X,W),G}r.exports={draw:w}}}),YV=de({"src/components/colorbar/index.js"(e,r){"use strict";r.exports={moduleType:"component",name:"colorbar",attributes:Aw(),supplyDefaults:CE(),draw:WV().draw,hasColorbar:SE()}}}),XV=de({"src/components/legend/index.js"(e,r){"use strict";r.exports={moduleType:"component",name:"legend",layoutAttributes:PE(),supplyLayoutDefaults:IE(),draw:OE(),style:BE()}}}),ZV=de({"src/locale-en.js"(e,r){"use strict";r.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}}}),KV=de({"src/locale-en-us.js"(e,r){"use strict";r.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}}}),yk=de({"src/snapshot/cloneplot.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=i.extendFlat,o=i.extendDeep;function s(n){var u;switch(n){case"themes__thumb":u={autosize:!0,width:150,height:150,title:{text:""},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case"thumbnail":u={title:{text:""},showlegend:!1,borderwidth:0,bordercolor:"",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:u={}}return u}function l(n){var u=["xaxis","yaxis","zaxis"];return u.indexOf(n.slice(0,5))>-1}r.exports=function(u,c){var f,h=u.data,d=u.layout,p=o([],h),g=o({},d,s(c.tileClass)),m=u._context||{};if(c.width&&(g.width=c.width),c.height&&(g.height=c.height),c.tileClass==="thumbnail"||c.tileClass==="themes__thumb"){g.annotations=[];var y=Object.keys(g);for(f=0;f<y.length;f++)l(y[f])&&(g[y[f]].title={text:""});for(f=0;f<p.length;f++){var _=p[f];_.showscale=!1,_.marker&&(_.marker.showscale=!1),t.traceIs(_,"pie-like")&&(_.textposition="none")}}if(Array.isArray(c.annotations))for(f=0;f<c.annotations.length;f++)g.annotations.push(c.annotations[f]);var v=Object.keys(g).filter(function(w){return w.match(/^scene\d*$/)});if(v.length){var x={};for(c.tileClass==="thumbnail"&&(x={title:{text:""},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),f=0;f<v.length;f++){var S=g[v[f]];S.xaxis||(S.xaxis={}),S.yaxis||(S.yaxis={}),S.zaxis||(S.zaxis={}),a(S.xaxis,x),a(S.yaxis,x),a(S.zaxis,x),S._scene=null}}var M=document.createElement("div");c.tileClass&&(M.className=c.tileClass);var C={gd:M,td:M,layout:g,data:p,config:{staticPlot:c.staticPlot===void 0?!0:c.staticPlot,plotGlPixelRatio:c.plotGlPixelRatio===void 0?2:c.plotGlPixelRatio,displaylogo:c.displaylogo||!1,showTips:c.showTips||!1}};return c.setBackground!=="transparent"&&(C.config.setBackground=c.setBackground||"opaque"),C.gd.defaultLayout=s(c.tileClass),C}}}),JV=de({"src/snapshot/toimage.js"(e,r){"use strict";var t=yv().EventEmitter,i=Ma(),a=Qt(),o=Mp(),s=yk(),l=Rw(),n=zw();function u(c,f){var h=new t,d=s(c,{format:"png"}),p=d.gd;p.style.position="absolute",p.style.left="-5000px",document.body.appendChild(p);function g(){var y=o.getDelay(p._fullLayout);setTimeout(function(){var _=l(p),v=document.createElement("canvas");v.id=a.randstr(),h=n({format:f.format,width:p._fullLayout.width,height:p._fullLayout.height,canvas:v,emitter:h,svg:_}),h.clean=function(){p&&document.body.removeChild(p)}},y)}var m=o.getRedrawFunc(p);return i.call("_doPlot",p,d.data,d.layout,d.config).then(m).then(g).catch(function(y){h.emit("error",y)}),h}r.exports=u}}),QV=de({"src/snapshot/index.js"(e,r){"use strict";var t=Mp(),i={getDelay:t.getDelay,getRedrawFunc:t.getRedrawFunc,clone:yk(),toSVG:Rw(),svgToImg:zw(),toImage:JV(),downloadImage:rk()};r.exports=i}}),eG=de({"src/core.js"(e){"use strict";e.version=_i().version,ia(),uq();var r=Ma(),t=e.register=r.register,i=Kq(),a=Object.keys(i);for(s=0;s<a.length;s++)o=a[s],o.charAt(0)!=="_"&&(e[o]=i[o]),t({moduleType:"apiMethod",name:o,fn:i[o]});var o,s;t(oV()),t([hV(),mV(),Zl(),xV(),AV(),kV(),LV(),zV(),jV(),vk(),HV(),ks(),YV(),XV(),$s(),YE()]),t([ZV(),KV()]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(t(window.PlotlyLocales),delete window.PlotlyLocales),e.Icons=Sw();var l=$s(),n=Es();e.Plots={resize:n.resize,graphJson:n.graphJson,sendDataToCloud:n.sendDataToCloud},e.Fx={hover:l.hover,unhover:l.unhover,loneHover:l.loneHover,loneUnhover:l.loneUnhover},e.Snapshot=QV(),e.PlotSchema=c1()}}),tG=de({"lib/core.js"(e,r){"use strict";r.exports=eG()}}),ep=de({"src/traces/bar/attributes.js"(e,r){"use strict";var t=tl(),i=Ns().axisHoverFormat,{hovertemplateAttrs:a,texttemplateAttrs:o,templatefallbackAttrs:s}=Vo(),l=cs(),n=us(),u=y0(),c=fu().pattern,f=fn().extendFlat,h=n({editType:"calc",arrayOk:!0,colorEditType:"style"}),d=t.marker,p=d.line,g=f({},p.width,{dflt:0}),m=f({width:g,editType:"calc"},l("marker.line")),y=f({line:m,editType:"calc"},l("marker"),{opacity:{valType:"number",arrayOk:!0,dflt:1,min:0,max:1,editType:"style"},pattern:c,cornerradius:{valType:"any",editType:"calc"}});r.exports={x:t.x,x0:t.x0,dx:t.dx,y:t.y,y0:t.y0,dy:t.dy,xperiod:t.xperiod,yperiod:t.yperiod,xperiod0:t.xperiod0,yperiod0:t.yperiod0,xperiodalignment:t.xperiodalignment,yperiodalignment:t.yperiodalignment,xhoverformat:i("x"),yhoverformat:i("y"),text:t.text,texttemplate:o({editType:"plot"},{keys:u.eventDataKeys}),texttemplatefallback:s({editType:"plot"}),hovertext:t.hovertext,hovertemplate:a({},{keys:u.eventDataKeys}),hovertemplatefallback:s(),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"calc"},insidetextanchor:{valType:"enumerated",values:["end","middle","start"],dflt:"end",editType:"plot"},textangle:{valType:"angle",dflt:"auto",editType:"plot"},textfont:f({},h,{}),insidetextfont:f({},h,{}),outsidetextfont:f({},h,{}),constraintext:{valType:"enumerated",values:["inside","outside","both","none"],dflt:"both",editType:"calc"},cliponaxis:f({},t.cliponaxis,{}),orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},base:{valType:"any",dflt:null,arrayOk:!0,editType:"calc"},offset:{valType:"number",dflt:null,arrayOk:!0,editType:"calc"},width:{valType:"number",dflt:null,min:0,arrayOk:!0,editType:"calc"},marker:y,offsetgroup:t.offsetgroup,alignmentgroup:t.alignmentgroup,selected:{marker:{opacity:t.selected.marker.opacity,color:t.selected.marker.color,editType:"style"},textfont:t.selected.textfont,editType:"style"},unselected:{marker:{opacity:t.unselected.marker.opacity,color:t.unselected.marker.color,editType:"style"},textfont:t.unselected.textfont,editType:"style"},zorder:t.zorder}}}),$w=de({"src/traces/bar/layout_attributes.js"(e,r){"use strict";r.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},barcornerradius:{valType:"any",editType:"calc"}}}}),Ww=de({"src/traces/bar/style_defaults.js"(e,r){"use strict";var t=ta(),i=Wu().hasColorscale,a=hu(),o=Qt().coercePattern;r.exports=function(l,n,u,c,f){var h=u("marker.color",c),d=i(l,"marker");d&&a(l,n,f,u,{prefix:"marker.",cLetter:"c"}),u("marker.line.color",t.defaultLine),i(l,"marker.line")&&a(l,n,f,u,{prefix:"marker.line.",cLetter:"c"}),u("marker.line.width"),u("marker.opacity"),o(u,"marker.pattern",h,d),u("selected.marker.color"),u("unselected.marker.color")}}}),oh=de({"src/traces/bar/defaults.js"(e,r){"use strict";var t=da(),i=Qt(),a=ta(),o=Ma(),s=wv(),l=gd(),n=Ww(),u=Tv(),c=ep(),f=i.coerceFont;function h(m,y,_,v){function x(k,A){return i.coerce(m,y,c,k,A)}var S=s(m,y,v,x);if(!S){y.visible=!1;return}l(m,y,v,x),x("xhoverformat"),x("yhoverformat"),x("zorder"),x("orientation",y.x&&!y.y?"h":"v"),x("base"),x("offset"),x("width"),x("text"),x("hovertext"),x("hovertemplate"),x("hovertemplatefallback");var M=x("textposition");g(m,y,v,x,M,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),n(m,y,x,_,v);var C=(y.marker.line||{}).color,w=o.getComponentMethod("errorbars","supplyDefaults");w(m,y,C||a.defaultLine,{axis:"y"}),w(m,y,C||a.defaultLine,{axis:"x",inherit:"y"}),i.coerceSelectionMarkerOpacity(y,x)}function d(m,y){var _,v;function x(C,w){return i.coerce(v._input,v,c,C,w)}for(var S=0;S<m.length;S++)if(v=m[S],v.type==="bar"){_=v._input;var M=x("marker.cornerradius",y.barcornerradius);v.marker&&(v.marker.cornerradius=p(M)),u(_,v,y,x,y.barmode)}}function p(m){if(t(m)){if(m=+m,m>=0)return m}else if(typeof m=="string"&&(m=m.trim(),m.slice(-1)==="%"&&t(m.slice(0,-1))&&(m=+m.slice(0,-1),m>=0)))return m+"%"}function g(m,y,_,v,x,S){S=S||{};var M=S.moduleHasSelected!==!1,C=S.moduleHasUnselected!==!1,w=S.moduleHasConstrain!==!1,k=S.moduleHasCliponaxis!==!1,A=S.moduleHasTextangle!==!1,b=S.moduleHasInsideanchor!==!1,E=!!S.hasPathbar,T=Array.isArray(x)||x==="auto",F=T||x==="inside",D=T||x==="outside";if(F||D){var R=f(v,"textfont",_.font),P=i.extendFlat({},R),z=m.textfont&&m.textfont.color,I=!z;if(I&&delete P.color,f(v,"insidetextfont",P),E){var L=i.extendFlat({},R);I&&delete L.color,f(v,"pathbar.textfont",L)}D&&f(v,"outsidetextfont",R),M&&v("selected.textfont.color"),C&&v("unselected.textfont.color"),w&&v("constraintext"),k&&v("cliponaxis"),A&&v("textangle"),v("texttemplate"),v("texttemplatefallback")}F&&b&&v("insidetextanchor")}r.exports={supplyDefaults:h,crossTraceDefaults:d,handleText:g,validateCornerradius:p}}}),_k=de({"src/traces/bar/layout_defaults.js"(e,r){"use strict";var t=Ma(),i=nn(),a=Qt(),o=$w(),s=oh().validateCornerradius;r.exports=function(l,n,u){function c(M,C){return a.coerce(l,n,o,M,C)}for(var f=!1,h=!1,d=!1,p={},g=c("barmode"),m=g==="group",y=0;y<u.length;y++){var _=u[y];if(t.traceIs(_,"bar")&&_.visible)f=!0;else continue;var v=_.xaxis+_.yaxis;if(m?(p[v]&&(d=!0),p[v]=!0):(v+=_._input.offsetgroup,p.length>0&&!p[v]&&(d=!0),p[v]=!0),_.visible&&_.type==="histogram"){var x=i.getFromId({_fullLayout:n},_[_.orientation==="v"?"xaxis":"yaxis"]);x.type!=="category"&&(h=!0)}}if(!f){delete n.barmode;return}g!=="overlay"&&c("barnorm"),c("bargap",h&&!d?0:.2),c("bargroupgap");var S=c("barcornerradius");n.barcornerradius=s(S)}}}),Oy=de({"src/traces/bar/arrays_to_calcdata.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){for(var s=0;s<a.length;s++)a[s].i=s;t.mergeArray(o.text,a,"tx"),t.mergeArray(o.hovertext,a,"htx");var l=o.marker;if(l){t.mergeArray(l.opacity,a,"mo",!0),t.mergeArray(l.color,a,"mc");var n=l.line;n&&(t.mergeArray(n.color,a,"mlc"),t.mergeArrayCastPositive(n.width,a,"mlw"))}}}}),rG=de({"src/traces/bar/calc.js"(e,r){"use strict";var t=nn(),i=xd(),a=Wu().hasColorscale,o=hc(),s=Oy(),l=nh();r.exports=function(u,c){var f=t.getFromId(u,c.xaxis||"x"),h=t.getFromId(u,c.yaxis||"y"),d,p,g,m,y,_,v={msUTC:!!(c.base||c.base===0)};c.orientation==="h"?(d=f.makeCalcdata(c,"x",v),g=h.makeCalcdata(c,"y"),m=i(c,h,"y",g),y=!!c.yperiodalignment,_="y"):(d=h.makeCalcdata(c,"y",v),g=f.makeCalcdata(c,"x"),m=i(c,f,"x",g),y=!!c.xperiodalignment,_="x"),p=m.vals;for(var x=Math.min(p.length,d.length),S=new Array(x),M=0;M<x;M++)S[M]={p:p[M],s:d[M]},y&&(S[M].orig_p=g[M],S[M][_+"End"]=m.ends[M],S[M][_+"Start"]=m.starts[M]),c.ids&&(S[M].id=String(c.ids[M]));return a(c,"marker")&&o(u,c,{vals:c.marker.color,containerStr:"marker",cLetter:"c"}),a(c,"marker.line")&&o(u,c,{vals:c.marker.line.color,containerStr:"marker.line",cLetter:"c"}),s(S,c),l(S,c),S}}}),dc=de({"src/traces/bar/uniform_text.js"(e,r){"use strict";var t=Yr(),i=Qt();function a(n,u,c){var f=n._fullLayout,h=f["_"+c+"Text_minsize"];if(h){var d=f.uniformtext.mode==="hide",p;switch(c){case"funnelarea":case"pie":case"sunburst":p="g.slice";break;case"treemap":case"icicle":p="g.slice, g.pathbar";break;default:p="g.points > g.point"}u.selectAll(p).each(function(g){var m=g.transform;if(m){m.scale=d&&m.hide?0:h/m.fontSize;var y=t.select(this).select("text");i.setTransormAndDisplay(y,m)}})}}function o(n,u,c){if(c.uniformtext.mode){var f=l(n),h=c.uniformtext.minsize,d=u.scale*u.fontSize;u.hide=d<h,c[f]=c[f]||1/0,u.hide||(c[f]=Math.min(c[f],Math.max(d,h)))}}function s(n,u){var c=l(n);u[c]=void 0}function l(n){return"_"+n+"Text_minsize"}r.exports={recordMinTextSize:o,clearMinTextSize:s,resizeText:a}}}),Yw=de({"src/traces/bar/helpers.js"(e){"use strict";var r=ta(),t=da(),i=Qt().isArrayOrTypedArray;e.coerceString=function(a,o,s){if(typeof o=="string"){if(o||!a.noBlank)return o}else if((typeof o=="number"||o===!0)&&!a.strict)return String(o);return s!==void 0?s:a.dflt},e.coerceNumber=function(a,o,s){if(t(o)){o=+o;var l=a.min,n=a.max,u=l!==void 0&&o<l||n!==void 0&&o>n;if(!u)return o}return s!==void 0?s:a.dflt},e.coerceColor=function(a,o,s){return r.isValid(o)?o:s!==void 0?s:a.dflt},e.coerceEnumerated=function(a,o,s){return a.coerceNumber&&(o=+o),a.values.indexOf(o)!==-1?o:s!==void 0?s:a.dflt},e.getValue=function(a,o){var s;return i(a)?o<a.length&&(s=a[o]):s=a,s},e.getLineWidth=function(a,o){var s=0<o.mlw?o.mlw:i(a.marker.line.width)?0:a.marker.line.width;return s}}}),qh=de({"src/traces/bar/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=hn(),o=Qt(),s=Ma(),l=dc().resizeText,n=ep(),u=n.textfont,c=n.insidetextfont,f=n.outsidetextfont,h=Yw();function d(k){var A=t.select(k).selectAll('g[class^="barlayer"]').selectAll("g.trace");l(k,A,"bar");var b=A.size(),E=k._fullLayout;A.style("opacity",function(T){return T[0].trace.opacity}).each(function(T){(E.barmode==="stack"&&b>1||E.bargap===0&&E.bargroupgap===0&&!T[0].trace.marker.line.width)&&t.select(this).attr("shape-rendering","crispEdges")}),A.selectAll("g.points").each(function(T){var F=t.select(this),D=T[0].trace;p(F,D,k)}),s.getComponentMethod("errorbars","style")(A)}function p(k,A,b){a.pointStyle(k.selectAll("path"),A,b),g(k,A,b)}function g(k,A,b){k.selectAll("text").each(function(E){var T=t.select(this),F=o.ensureUniformFontSize(b,v(T,E,A,b));a.font(T,F)})}function m(k,A,b){var E=A[0].trace;E.selectedpoints?y(b,E,k):(p(b,E,k),s.getComponentMethod("errorbars","style")(b))}function y(k,A,b){a.selectedPointStyle(k.selectAll("path"),A),_(k.selectAll("text"),A,b)}function _(k,A,b){k.each(function(E){var T=t.select(this),F;if(E.selected){F=o.ensureUniformFontSize(b,v(T,E,A,b));var D=A.selected.textfont&&A.selected.textfont.color;D&&(F.color=D),a.font(T,F)}else a.selectedTextStyle(T,A)})}function v(k,A,b,E){var T=E._fullLayout.font,F=b.textfont;if(k.classed("bartext-inside")){var D=w(A,b);F=S(b,A.i,T,D)}else k.classed("bartext-outside")&&(F=M(b,A.i,T));return F}function x(k,A,b){return C(u,k.textfont,A,b)}function S(k,A,b,E){var T=x(k,A,b),F=k._input.textfont===void 0||k._input.textfont.color===void 0||Array.isArray(k.textfont.color)&&k.textfont.color[A]===void 0;return F&&(T={color:i.contrast(E),family:T.family,size:T.size,weight:T.weight,style:T.style,variant:T.variant,textcase:T.textcase,lineposition:T.lineposition,shadow:T.shadow}),C(c,k.insidetextfont,A,T)}function M(k,A,b){var E=x(k,A,b);return C(f,k.outsidetextfont,A,E)}function C(k,A,b,E){A=A||{};var T=h.getValue(A.family,b),F=h.getValue(A.size,b),D=h.getValue(A.color,b),R=h.getValue(A.weight,b),P=h.getValue(A.style,b),z=h.getValue(A.variant,b),I=h.getValue(A.textcase,b),L=h.getValue(A.lineposition,b),B=h.getValue(A.shadow,b);return{family:h.coerceString(k.family,T,E.family),size:h.coerceNumber(k.size,F,E.size),color:h.coerceColor(k.color,D,E.color),weight:h.coerceString(k.weight,R,E.weight),style:h.coerceString(k.style,P,E.style),variant:h.coerceString(k.variant,z,E.variant),textcase:h.coerceString(k.variant,I,E.textcase),lineposition:h.coerceString(k.variant,L,E.lineposition),shadow:h.coerceString(k.variant,B,E.shadow)}}function w(k,A){return A.type==="waterfall"?A[k.dir].marker.color:k.mcc||k.mc||A.marker.color}r.exports={style:d,styleTextPoints:g,styleOnSelect:m,getInsideTextFont:S,getOutsideTextFont:M,getBarColor:w,resizeText:l}}}),Sv=de({"src/traces/bar/plot.js"(e,r){"use strict";var t=Yr(),i=da(),a=Qt(),o=Zo(),s=ta(),l=hn(),n=Ma(),u=nn().tickText,c=dc(),f=c.recordMinTextSize,h=c.clearMinTextSize,d=qh(),p=Yw(),g=y0(),m=ep(),y=m.text,_=m.textposition,v=sf().appendArrayPointValue,x=g.TEXTPAD;function S(X){return X.id}function M(X){if(X.ids)return S}function C(X){return(X>0)-(X<0)}function w(X,Z){return X<Z?1:-1}function k(X,Z,J,N){var H=[],$=[],U=N?Z:J,V=N?J:Z;return H[0]=U.c2p(X.s0,!0),$[0]=V.c2p(X.p0,!0),H[1]=U.c2p(X.s1,!0),$[1]=V.c2p(X.p1,!0),N?[H,$]:[$,H]}function A(X,Z,J,N){if(!Z.uniformtext.mode&&b(J)){var H;return N&&(H=N()),X.transition().duration(J.duration).ease(J.easing).each("end",function(){H&&H()}).each("interrupt",function(){H&&H()})}else return X}function b(X){return X&&X.duration>0}function E(X,Z,J,N,H,$){var U=Z.xaxis,V=Z.yaxis,j=X._fullLayout,q=X._context.staticPlot;H||(H={mode:j.barmode,norm:j.barmode,gap:j.bargap,groupgap:j.bargroupgap},h("bar",j));var Y=a.makeTraceGroups(N,J,"trace bars").each(function(K){var te=t.select(this),ne=K[0].trace,se=K[0].t,le=ne.type==="waterfall",ce=ne.type==="funnel",pe=ne.type==="histogram",xe=ne.type==="bar",ye=xe||ce,fe=0;le&&ne.connector.visible&&ne.connector.mode==="between"&&(fe=ne.connector.line.width/2);var ae=ne.orientation==="h",ee=b(H),ie=a.ensureSingle(te,"g","points"),Q=M(ne),ue=ie.selectAll("g.point").data(a.identity,Q);ue.enter().append("g").classed("point",!0),ue.exit().remove(),ue.each(function(Me,Te){var je=t.select(this),Ve=k(Me,U,V,ae),Ze=Ve[0][0],Ke=Ve[0][1],vt=Ve[1][0],xt=Ve[1][1],Pt=(ae?Ke-Ze:xt-vt)===0;Pt&&ye&&p.getLineWidth(ne,Me)&&(Pt=!1),Pt||(Pt=!i(Ze)||!i(Ke)||!i(vt)||!i(xt)),Me.isBlank=Pt,Pt&&(ae?Ke=Ze:xt=vt),fe&&!Pt&&(ae?(Ze-=w(Ze,Ke)*fe,Ke+=w(Ze,Ke)*fe):(vt-=w(vt,xt)*fe,xt+=w(vt,xt)*fe));var mt,Mt;if(ne.type==="waterfall"){if(!Pt){var lt=ne[Me.dir].marker;mt=lt.line.width,Mt=lt.color}}else mt=p.getLineWidth(ne,Me),Mt=Me.mc||ne.marker.color;function qe(br){var Er=t.round(mt/2%1,2);return H.gap===0&&H.groupgap===0?t.round(Math.round(br)-Er,2):br}function Ye(br,Er,Tr){return Tr&&br===Er?br:Math.abs(br-Er)>=2?qe(br):br>Er?Math.ceil(br):Math.floor(br)}var me=s.opacity(Mt),_e=me<1||mt>.01?qe:Ye;X._context.staticPlot||(Ze=_e(Ze,Ke,ae),Ke=_e(Ke,Ze,ae),vt=_e(vt,xt,!ae),xt=_e(xt,vt,!ae));var Ae=ae?U.c2p:V.c2p,ke;Me.s0>0?ke=Me._sMax:Me.s0<0?ke=Me._sMin:ke=Me.s1>0?Me._sMax:Me._sMin;function Ee(br,Er){if(!br)return 0;var Tr=Math.abs(ae?xt-vt:Ke-Ze),Ur=Math.abs(ae?Ke-Ze:xt-vt),Ai=_e(Math.abs(Ae(ke,!0)-Ae(0,!0))),oi=Me.hasB?Math.min(Tr/2,Ur/2):Math.min(Tr/2,Ai),Qr;if(Er==="%"){var ea=Math.min(50,br);Qr=Tr*(ea/100)}else Qr=br;return _e(Math.max(Math.min(Qr,oi),0))}var De=xe||pe?Ee(se.cornerradiusvalue,se.cornerradiusform):0,Je,Ue,at="M"+Ze+","+vt+"V"+xt+"H"+Ke+"V"+vt+"Z",rt=0;if(De&&Me.s){var ft=C(Me.s0)===0||C(Me.s)===C(Me.s0)?Me.s1:Me.s0;if(rt=_e(Me.hasB?0:Math.abs(Ae(ke,!0)-Ae(ft,!0))),rt<De){var At=w(Ze,Ke),ht=w(vt,xt),Gt=At===-ht?1:0;if(ae)if(Me.hasB)Je="M"+(Ze+De*At)+","+vt+"A "+De+","+De+" 0 0 "+Gt+" "+Ze+","+(vt+De*ht)+"V"+(xt-De*ht)+"A "+De+","+De+" 0 0 "+Gt+" "+(Ze+De*At)+","+xt+"H"+(Ke-De*At)+"A "+De+","+De+" 0 0 "+Gt+" "+Ke+","+(xt-De*ht)+"V"+(vt+De*ht)+"A "+De+","+De+" 0 0 "+Gt+" "+(Ke-De*At)+","+vt+"Z";else{Ue=Math.abs(Ke-Ze)+rt;var fr=Ue<De?De-Math.sqrt(Ue*(2*De-Ue)):0,gt=rt>0?Math.sqrt(rt*(2*De-rt)):0,yt=At>0?Math.max:Math.min;Je="M"+Ze+","+vt+"V"+(xt-fr*ht)+"H"+yt(Ke-(De-rt)*At,Ze)+"A "+De+","+De+" 0 0 "+Gt+" "+Ke+","+(xt-De*ht-gt)+"V"+(vt+De*ht+gt)+"A "+De+","+De+" 0 0 "+Gt+" "+yt(Ke-(De-rt)*At,Ze)+","+(vt+fr*ht)+"Z"}else if(Me.hasB)Je="M"+(Ze+De*At)+","+vt+"A "+De+","+De+" 0 0 "+Gt+" "+Ze+","+(vt+De*ht)+"V"+(xt-De*ht)+"A "+De+","+De+" 0 0 "+Gt+" "+(Ze+De*At)+","+xt+"H"+(Ke-De*At)+"A "+De+","+De+" 0 0 "+Gt+" "+Ke+","+(xt-De*ht)+"V"+(vt+De*ht)+"A "+De+","+De+" 0 0 "+Gt+" "+(Ke-De*At)+","+vt+"Z";else{Ue=Math.abs(xt-vt)+rt;var kt=Ue<De?De-Math.sqrt(Ue*(2*De-Ue)):0,Lt=rt>0?Math.sqrt(rt*(2*De-rt)):0,Ct=ht>0?Math.max:Math.min;Je="M"+(Ze+kt*At)+","+vt+"V"+Ct(xt-(De-rt)*ht,vt)+"A "+De+","+De+" 0 0 "+Gt+" "+(Ze+De*At-Lt)+","+xt+"H"+(Ke-De*At+Lt)+"A "+De+","+De+" 0 0 "+Gt+" "+(Ke-kt*At)+","+Ct(xt-(De-rt)*ht,vt)+"V"+vt+"Z"}}else Je=at}else Je=at;var $t=A(a.ensureSingle(je,"path"),j,H,$);if($t.style("vector-effect",q?"none":"non-scaling-stroke").attr("d",isNaN((Ke-Ze)*(xt-vt))||Pt&&X._context.staticPlot?"M0,0Z":Je).call(l.setClipUrl,Z.layerClipId,X),!j.uniformtext.mode&&ee){var mr=l.makePointStyleFns(ne);l.singlePointStyle(Me,$t,ne,mr,X)}T(X,Z,je,K,Te,Ze,Ke,vt,xt,De,rt,H,$),Z.layerClipId&&l.hideOutsideRangePoint(Me,je.select("text"),U,V,ne.xcalendar,ne.ycalendar)});var ge=ne.cliponaxis===!1;l.setClipUrl(te,ge?null:Z.layerClipId,X)});n.getComponentMethod("errorbars","plot")(X,Y,Z,H)}function T(X,Z,J,N,H,$,U,V,j,q,Y,K,te){var ne=Z.xaxis,se=Z.yaxis,le=X._fullLayout,ce;function pe(at,rt,ft){var At=a.ensureSingle(at,"text").text(rt).attr({class:"bartext bartext-"+ce,"text-anchor":"middle","data-notex":1}).call(l.font,ft).call(o.convertToTspans,X);return At}var xe=N[0].trace,ye=xe.orientation==="h",fe=O(N,ye,ne,se),ae=L(le,N,H,ne,se);ce=B(xe,H);var ee=K.mode==="stack"||K.mode==="relative",ie=N[H],Q=!ee||ie._outmost,ue=ie.hasB,ge=q&&q-Y>x;if(!ae||ce==="none"||(ie.isBlank||$===U||V===j)&&(ce==="auto"||ce==="inside")){J.select("text").remove();return}var Me=le.font,Te=d.getBarColor(N[H],xe),je=d.getInsideTextFont(xe,H,Me,Te),Ve=d.getOutsideTextFont(xe,H,Me),Ze=xe.insidetextanchor||"end",Ke=J.datum();ye?ne.type==="log"&&Ke.s0<=0&&(ne.range[0]<ne.range[1]?$=0:$=ne._length):se.type==="log"&&Ke.s0<=0&&(se.range[0]<se.range[1]?V=se._length:V=0);var vt=Math.abs(U-$),xt=Math.abs(j-V),Pt=vt-2*x,mt=xt-2*x,Mt,lt,qe,Ye,me;if(ce==="outside"&&!Q&&!ie.hasB&&(ce="inside"),ce==="auto")if(Q){ce="inside",me=a.ensureUniformFontSize(X,je),Mt=pe(J,ae,me),lt=l.bBox(Mt.node()),qe=lt.width,Ye=lt.height;var _e=qe>0&&Ye>0,Ae;ge?ue?Ae=F(Pt-2*q,mt,qe,Ye,ye)||F(Pt,mt-2*q,qe,Ye,ye):ye?Ae=F(Pt-(q-Y),mt,qe,Ye,ye)||F(Pt,mt-2*(q-Y),qe,Ye,ye):Ae=F(Pt,mt-(q-Y),qe,Ye,ye)||F(Pt-2*(q-Y),mt,qe,Ye,ye):Ae=F(Pt,mt,qe,Ye,ye),_e&&Ae?ce="inside":(ce="outside",Mt.remove(),Mt=null)}else ce="inside";if(!Mt){me=a.ensureUniformFontSize(X,ce==="outside"?Ve:je),Mt=pe(J,ae,me);var ke=Mt.attr("transform");if(Mt.attr("transform",""),lt=l.bBox(Mt.node()),qe=lt.width,Ye=lt.height,Mt.attr("transform",ke),qe<=0||Ye<=0){Mt.remove();return}}var Ee=xe.textangle,De,Je;ce==="outside"?(Je=xe.constraintext==="both"||xe.constraintext==="outside",De=I($,U,V,j,lt,{isHorizontal:ye,constrained:Je,angle:Ee,zeroBarDir:fe})):(Je=xe.constraintext==="both"||xe.constraintext==="inside",De=P($,U,V,j,lt,{isHorizontal:ye,constrained:Je,angle:Ee,anchor:Ze,hasB:ue,r:q,overhead:Y})),De.fontSize=me.size,f(xe.type==="histogram"?"bar":xe.type,De,le),ie.transform=De;var Ue=A(Mt,le,K,te);a.setTransormAndDisplay(Ue,De)}function F(X,Z,J,N,H){if(X<0||Z<0)return!1;var $=J<=X&&N<=Z,U=J<=Z&&N<=X,V=H?X>=J*(Z/N):Z>=N*(X/J);return $||U||V}function D(X){return X==="auto"?0:X}function R(X,Z){var J=Math.PI/180*Z,N=Math.abs(Math.sin(J)),H=Math.abs(Math.cos(J));return{x:X.width*H+X.height*N,y:X.width*N+X.height*H}}function P(X,Z,J,N,H,$){var U=!!$.isHorizontal,V=!!$.constrained,j=$.angle||0,q=$.anchor,Y=q==="end",K=q==="start",te=$.leftToRight||0,ne=(te+1)/2,se=1-ne,le=$.hasB,ce=$.r,pe=$.overhead,xe=H.width,ye=H.height,fe=Math.abs(Z-X),ae=Math.abs(N-J),ee=fe>2*x&&ae>2*x?x:0;fe-=2*ee,ae-=2*ee;var ie=D(j);j==="auto"&&!(xe<=fe&&ye<=ae)&&(xe>fe||ye>ae)&&(!(xe>ae||ye>fe)||xe<ye!=fe<ae)&&(ie+=90);var Q=R(H,ie),ue,ge;if(ce&&ce-pe>x){var Me=z(X,Z,J,N,Q,ce,pe,U,le);ue=Me.scale,ge=Me.pad}else ue=1,V&&(ue=Math.min(1,fe/Q.x,ae/Q.y)),ge=0;var Te=H.left*se+H.right*ne,je=(H.top+H.bottom)/2,Ve=(X+x)*se+(Z-x)*ne,Ze=(J+N)/2,Ke=0,vt=0;if(K||Y){var xt=(U?Q.x:Q.y)/2;ce&&(Y||le)&&(ee+=ge);var Pt=U?w(X,Z):w(J,N);U?K?(Ve=X+Pt*ee,Ke=-Pt*xt):(Ve=Z-Pt*ee,Ke=Pt*xt):K?(Ze=J+Pt*ee,vt=-Pt*xt):(Ze=N-Pt*ee,vt=Pt*xt)}return{textX:Te,textY:je,targetX:Ve,targetY:Ze,anchorX:Ke,anchorY:vt,scale:ue,rotate:ie}}function z(X,Z,J,N,H,$,U,V,j){var q=Math.max(0,Math.abs(Z-X)-2*x),Y=Math.max(0,Math.abs(N-J)-2*x),K=$-x,te=U?K-Math.sqrt(K*K-(K-U)*(K-U)):K,ne=j?K*2:V?K-U:2*te,se=j?K*2:V?2*te:K-U,le,ce,pe,xe,ye;return H.y/H.x>=Y/(q-ne)?xe=Y/H.y:H.y/H.x<=(Y-se)/q?xe=q/H.x:!j&&V?(le=H.x*H.x+H.y*H.y/4,ce=-2*H.x*(q-K)-H.y*(Y/2-K),pe=(q-K)*(q-K)+(Y/2-K)*(Y/2-K)-K*K,xe=(-ce+Math.sqrt(ce*ce-4*le*pe))/(2*le)):j?(le=(H.x*H.x+H.y*H.y)/4,ce=-H.x*(q/2-K)-H.y*(Y/2-K),pe=(q/2-K)*(q/2-K)+(Y/2-K)*(Y/2-K)-K*K,xe=(-ce+Math.sqrt(ce*ce-4*le*pe))/(2*le)):(le=H.x*H.x/4+H.y*H.y,ce=-H.x*(q/2-K)-2*H.y*(Y-K),pe=(q/2-K)*(q/2-K)+(Y-K)*(Y-K)-K*K,xe=(-ce+Math.sqrt(ce*ce-4*le*pe))/(2*le)),xe=Math.min(1,xe),V?ye=Math.max(0,K-Math.sqrt(Math.max(0,K*K-(K-(Y-H.y*xe)/2)*(K-(Y-H.y*xe)/2)))-U):ye=Math.max(0,K-Math.sqrt(Math.max(0,K*K-(K-(q-H.x*xe)/2)*(K-(q-H.x*xe)/2)))-U),{scale:xe,pad:ye}}function I(X,Z,J,N,H,$){var U=!!$.isHorizontal,V=!!$.constrained,j=$.angle||0,q=H.width,Y=H.height,K=Math.abs(Z-X),te=Math.abs(N-J),ne;U?ne=te>2*x?x:0:ne=K>2*x?x:0;var se=1;V&&(se=U?Math.min(1,te/Y):Math.min(1,K/q));var le=D(j),ce=R(H,le),pe=(U?ce.x:ce.y)/2,xe=(H.left+H.right)/2,ye=(H.top+H.bottom)/2,fe=(X+Z)/2,ae=(J+N)/2,ee=0,ie=0,Q;return(U?X===Z:J===N)&&$.zeroBarDir?Q=$.zeroBarDir:Q=U?w(Z,X):w(J,N),U?(fe=Z-Q*ne,ee=Q*pe):(ae=N+Q*ne,ie=-Q*pe),{textX:xe,textY:ye,targetX:fe,targetY:ae,anchorX:ee,anchorY:ie,scale:se,rotate:le}}function L(X,Z,J,N,H){var $=Z[0].trace,U=$.texttemplate,V;return U?V=G(X,Z,J,N,H):$.textinfo?V=W(Z,J,N,H):V=p.getValue($.text,J),p.coerceString(y,V)}function B(X,Z){var J=p.getValue(X.textposition,Z);return p.coerceEnumerated(_,J)}function O(X,Z,J,N){for(var H=!1,$=!1,U=0;U<X.length;U++){var V=X[U].s;if(V>0?H=!0:V<0&&($=!0),H&&$)return 0}var j=Z?J:N,q=-w(j.range[0],j.range[1]);return $?H?0:-q:q}function G(X,Z,J,N,H){var $=Z[0].trace,U=a.castOption($,J,"texttemplate");if(!U)return"";var V=$.type==="histogram",j=$.type==="waterfall",q=$.type==="funnel",Y=$.orientation==="h",K,te,ne,se;Y?(K="y",te=H,ne="x",se=N):(K="x",te=N,ne="y",se=H);function le(ee){return u(te,te.c2l(ee),!0).text}function ce(ee){return u(se,se.c2l(ee),!0).text}var pe=Z[J],xe={};xe.label=pe.p,xe.labelLabel=xe[K+"Label"]=le(pe.p);var ye=a.castOption($,pe.i,"text");(ye===0||ye)&&(xe.text=ye),xe.value=pe.s,xe.valueLabel=xe[ne+"Label"]=ce(pe.s);var fe={};v(fe,$,pe.i),(V||fe.x===void 0)&&(fe.x=Y?xe.value:xe.label),(V||fe.y===void 0)&&(fe.y=Y?xe.label:xe.value),(V||fe.xLabel===void 0)&&(fe.xLabel=Y?xe.valueLabel:xe.labelLabel),(V||fe.yLabel===void 0)&&(fe.yLabel=Y?xe.labelLabel:xe.valueLabel),j&&(xe.delta=+pe.rawS||pe.s,xe.deltaLabel=ce(xe.delta),xe.final=pe.v,xe.finalLabel=ce(xe.final),xe.initial=xe.final-xe.delta,xe.initialLabel=ce(xe.initial)),q&&(xe.value=pe.s,xe.valueLabel=ce(xe.value),xe.percentInitial=pe.begR,xe.percentInitialLabel=a.formatPercent(pe.begR),xe.percentPrevious=pe.difR,xe.percentPreviousLabel=a.formatPercent(pe.difR),xe.percentTotal=pe.sumR,xe.percenTotalLabel=a.formatPercent(pe.sumR));var ae=a.castOption($,pe.i,"customdata");return ae&&(xe.customdata=ae),a.texttemplateString({data:[fe,xe,$._meta],fallback:$.texttemplatefallback,labels:xe,locale:X._d3locale,template:U})}function W(X,Z,J,N){var H=X[0].trace,$=H.orientation==="h",U=H.type==="waterfall",V=H.type==="funnel";function j(ae){var ee=$?N:J;return u(ee,ae,!0).text}function q(ae){var ee=$?J:N;return u(ee,+ae,!0).text}var Y=H.textinfo,K=X[Z],te=Y.split("+"),ne=[],se,le=function(ae){return te.indexOf(ae)!==-1};if(le("label")&&ne.push(j(X[Z].p)),le("text")&&(se=a.castOption(H,K.i,"text"),(se===0||se)&&ne.push(se)),U){var ce=+K.rawS||K.s,pe=K.v,xe=pe-ce;le("initial")&&ne.push(q(xe)),le("delta")&&ne.push(q(ce)),le("final")&&ne.push(q(pe))}if(V){le("value")&&ne.push(q(K.s));var ye=0;le("percent initial")&&ye++,le("percent previous")&&ye++,le("percent total")&&ye++;var fe=ye>1;le("percent initial")&&(se=a.formatPercent(K.begR),fe&&(se+=" of initial"),ne.push(se)),le("percent previous")&&(se=a.formatPercent(K.difR),fe&&(se+=" of previous"),ne.push(se)),le("percent total")&&(se=a.formatPercent(K.sumR),fe&&(se+=" of total"),ne.push(se))}return ne.join("<br>")}r.exports={plot:E,toMoveInsideBar:P}}}),y1=de({"src/traces/bar/hover.js"(e,r){"use strict";var t=$s(),i=Ma(),a=ta(),o=Qt().fillText,s=Yw().getLineWidth,l=nn().hoverLabelText,n=cn().BADNUM;function u(h,d,p,g,m){var y=c(h,d,p,g,m);if(y){var _=y.cd,v=_[0].trace,x=_[y.index];return y.color=f(v,x),i.getComponentMethod("errorbars","hoverInfo")(x,v,y),[y]}}function c(h,d,p,g,m){var y=h.cd,_=y[0].trace,v=y[0].t,x=g==="closest",S=_.type==="waterfall",M=h.maxHoverDistance,C=h.maxSpikeDistance,w,k,A,b,E,T,F;_.orientation==="h"?(w=p,k=d,A="y",b="x",E=J,T=W):(w=d,k=p,A="x",b="y",T=J,E=W);var D=_[A+"period"],R=x||D;function P(ne){return I(ne,-1)}function z(ne){return I(ne,1)}function I(ne,se){var le=ne.w;return ne[A]+se*le/2}function L(ne){return ne[A+"End"]-ne[A+"Start"]}var B=x?P:D?function(ne){return ne.p-L(ne)/2}:function(ne){return Math.min(P(ne),ne.p-v.bardelta/2)},O=x?z:D?function(ne){return ne.p+L(ne)/2}:function(ne){return Math.max(z(ne),ne.p+v.bardelta/2)};function G(ne,se,le){return m.finiteRange&&(le=0),t.inbox(ne-w,se-w,le+Math.min(1,Math.abs(se-ne)/F)-1)}function W(ne){return G(B(ne),O(ne),M)}function X(ne){return G(P(ne),z(ne),C)}function Z(ne){var se=ne[b];if(S){var le=Math.abs(ne.rawS)||0;k>0?se+=le:k<0&&(se-=le)}return se}function J(ne){var se=k,le=ne.b,ce=Z(ne);return t.inbox(le-se,ce-se,M+(ce-se)/(ce-le)-1)}function N(ne){var se=k,le=ne.b,ce=Z(ne);return t.inbox(le-se,ce-se,C+(ce-se)/(ce-le)-1)}var H=h[A+"a"],$=h[b+"a"];F=Math.abs(H.r2c(H.range[1])-H.r2c(H.range[0]));function U(ne){return(E(ne)+T(ne))/2}var V=t.getDistanceFunction(g,E,T,U);if(t.getClosest(y,V,h),h.index!==!1&&y[h.index].p!==n){R||(B=function(ne){return Math.min(P(ne),ne.p-v.bargroupwidth/2)},O=function(ne){return Math.max(z(ne),ne.p+v.bargroupwidth/2)});var j=h.index,q=y[j],Y=_.base?q.b+q.s:q.s;h[b+"0"]=h[b+"1"]=$.c2p(q[b],!0),h[b+"LabelVal"]=Y;var K=v.extents[v.extents.round(q.p)];h[A+"0"]=H.c2p(x?B(q):K[0],!0),h[A+"1"]=H.c2p(x?O(q):K[1],!0);var te=q.orig_p!==void 0;return h[A+"LabelVal"]=te?q.orig_p:q.p,h.labelLabel=l(H,h[A+"LabelVal"],_[A+"hoverformat"]),h.valueLabel=l($,h[b+"LabelVal"],_[b+"hoverformat"]),h.baseLabel=l($,q.b,_[b+"hoverformat"]),h.spikeDistance=(N(q)+X(q))/2,h[A+"Spike"]=H.c2p(q.p,!0),o(q,_,h),h.hovertemplate=_.hovertemplate,h}}function f(h,d){var p=d.mcc||h.marker.color,g=d.mlcc||h.marker.line.color,m=s(h,d);if(a.opacity(p))return p;if(a.opacity(g)&&m)return g}r.exports={hoverPoints:u,hoverOnBars:c,getTraceColor:f}}}),iG=de({"src/traces/bar/event_data.js"(e,r){"use strict";r.exports=function(i,a,o){return i.x="xVal"in a?a.xVal:a.x,i.y="yVal"in a?a.yVal:a.y,a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),o.orientation==="h"?(i.label=i.y,i.value=i.x):(i.label=i.x,i.value=i.y),i}}}),_1=de({"src/traces/bar/select.js"(e,r){"use strict";r.exports=function(a,o){var s=a.cd,l=a.xaxis,n=a.yaxis,u=s[0].trace,c=u.type==="funnel",f=u.orientation==="h",h=[],d;if(o===!1)for(d=0;d<s.length;d++)s[d].selected=0;else for(d=0;d<s.length;d++){var p=s[d],g="ct"in p?p.ct:t(p,l,n,f,c);o.contains(g,!1,d,a)?(h.push({pointNumber:d,x:l.c2d(p.x),y:n.c2d(p.y)}),p.selected=1):p.selected=0}return h};function t(i,a,o,s,l){var n=a.c2p(s?i.s0:i.p0,!0),u=a.c2p(s?i.s1:i.p1,!0),c=o.c2p(s?i.p0:i.s0,!0),f=o.c2p(s?i.p1:i.s1,!0);return l?[(n+u)/2,(c+f)/2]:s?[u,(c+f)/2]:[(n+u)/2,f]}}}),aG=de({"src/traces/bar/index.js"(e,r){"use strict";r.exports={attributes:ep(),layoutAttributes:$w(),supplyDefaults:oh().supplyDefaults,crossTraceDefaults:oh().crossTraceDefaults,supplyLayoutDefaults:_k(),calc:rG(),crossTraceCalc:Av().crossTraceCalc,colorbar:Yu(),arraysToCalcdata:Oy(),plot:Sv().plot,style:qh().style,styleOnSelect:qh().styleOnSelect,hoverPoints:y1().hoverPoints,eventData:iG(),selectPoints:_1(),moduleType:"trace",name:"bar",basePlotModule:ml(),categories:["bar-like","cartesian","svg","bar","oriented","errorBarsOK","showLegend","zoomScale"],animatable:!0,meta:{}}}}),nG=de({"lib/bar.js"(e,r){"use strict";r.exports=aG()}}),Ny=de({"src/traces/box/attributes.js"(e,r){"use strict";var t=Kd(),i=tl(),a=ep(),o=Jo(),s=Ns().axisHoverFormat,{hovertemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=fn().extendFlat,c=i.marker,f=c.line;r.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},dx:{valType:"number",editType:"calc"},dy:{valType:"number",editType:"calc"},xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:s("x"),yhoverformat:s("y"),name:{valType:"string",editType:"calc+clearAxisTypes"},q1:{valType:"data_array",editType:"calc+clearAxisTypes"},median:{valType:"data_array",editType:"calc+clearAxisTypes"},q3:{valType:"data_array",editType:"calc+clearAxisTypes"},lowerfence:{valType:"data_array",editType:"calc"},upperfence:{valType:"data_array",editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},notchspan:{valType:"data_array",editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},sdmultiple:{valType:"number",min:0,editType:"calc",dflt:1},sizemode:{valType:"enumerated",values:["quartiles","sd"],editType:"calc",dflt:"quartiles"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],editType:"calc"},mean:{valType:"data_array",editType:"calc"},sd:{valType:"data_array",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},quartilemethod:{valType:"enumerated",values:["linear","exclusive","inclusive"],dflt:"linear",editType:"calc"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:u({},c.symbol,{arrayOk:!1,editType:"plot"}),opacity:u({},c.opacity,{arrayOk:!1,dflt:1,editType:"style"}),angle:u({},c.angle,{arrayOk:!1,editType:"calc"}),size:u({},c.size,{arrayOk:!1,editType:"calc"}),color:u({},c.color,{arrayOk:!1,editType:"style"}),line:{color:u({},f.color,{arrayOk:!1,dflt:o.defaultLine,editType:"style"}),width:u({},f.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:t(),whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},showwhiskers:{valType:"boolean",editType:"calc"},offsetgroup:a.offsetgroup,alignmentgroup:a.alignmentgroup,selected:{marker:i.selected.marker,editType:"style"},unselected:{marker:i.unselected.marker,editType:"style"},text:u({},i.text,{}),hovertext:u({},i.hovertext,{}),hovertemplate:l({}),hovertemplatefallback:n(),hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"},zorder:i.zorder}}}),jy=de({"src/traces/box/layout_attributes.js"(e,r){"use strict";r.exports={boxmode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},boxgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"},boxgroupgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"}}}}),Uy=de({"src/traces/box/defaults.js"(e,r){"use strict";var t=Qt(),i=Ma(),a=ta(),o=gd(),s=Tv(),l=h1(),n=Ny();function u(d,p,g,m){function y(b,E){return t.coerce(d,p,n,b,E)}if(c(d,p,y,m),p.visible!==!1){o(d,p,m,y),y("xhoverformat"),y("yhoverformat");var _=p._hasPreCompStats;_&&(y("lowerfence"),y("upperfence")),y("line.color",(d.marker||{}).color||g),y("line.width"),y("fillcolor",a.addOpacity(p.line.color,.5));var v=!1;if(_){var x=y("mean"),S=y("sd");x&&x.length&&(v=!0,S&&S.length&&(v="sd"))}y("whiskerwidth");var M=y("sizemode"),C;M==="quartiles"&&(C=y("boxmean",v)),y("showwhiskers",M==="quartiles"),(M==="sd"||C==="sd")&&y("sdmultiple"),y("width"),y("quartilemethod");var w=!1;if(_){var k=y("notchspan");k&&k.length&&(w=!0)}else t.validate(d.notchwidth,n.notchwidth)&&(w=!0);var A=y("notched",w);A&&y("notchwidth"),f(d,p,y,{prefix:"box"}),y("zorder")}}function c(d,p,g,m){function y(G){var W=0;return G&&G.length&&(W+=1,t.isArrayOrTypedArray(G[0])&&G[0].length&&(W+=1)),W}function _(G){return t.validate(d[G],n[G])}var v=g("y"),x=g("x"),S;if(p.type==="box"){var M=g("q1"),C=g("median"),w=g("q3");p._hasPreCompStats=M&&M.length&&C&&C.length&&w&&w.length,S=Math.min(t.minRowLength(M),t.minRowLength(C),t.minRowLength(w))}else p._hasPreCompStats=!1;var k=y(v),A=y(x),b=k&&t.minRowLength(v),E=A&&t.minRowLength(x),T=m.calendar,F={autotypenumbers:m.autotypenumbers},D,R;if(p._hasPreCompStats)switch(String(A)+String(k)){case"00":var P=_("x0")||_("dx"),z=_("y0")||_("dy");z&&!P?D="h":D="v",R=S;break;case"10":D="v",R=Math.min(S,E);break;case"20":D="h",R=Math.min(S,x.length);break;case"01":D="h",R=Math.min(S,b);break;case"02":D="v",R=Math.min(S,v.length);break;case"12":D="v",R=Math.min(S,E,v.length);break;case"21":D="h",R=Math.min(S,x.length,b);break;case"11":R=0;break;case"22":var I=!1,L;for(L=0;L<x.length;L++)if(l(x[L],T,F)==="category"){I=!0;break}if(I)D="v",R=Math.min(S,E,v.length);else{for(L=0;L<v.length;L++)if(l(v[L],T,F)==="category"){I=!0;break}I?(D="h",R=Math.min(S,x.length,b)):(D="v",R=Math.min(S,E,v.length))}break}else k>0?(D="v",A>0?R=Math.min(E,b):R=Math.min(b)):A>0?(D="h",R=Math.min(E)):R=0;if(!R){p.visible=!1;return}p._length=R;var B=g("orientation",D);p._hasPreCompStats?B==="v"&&A===0?(g("x0",0),g("dx",1)):B==="h"&&k===0&&(g("y0",0),g("dy",1)):B==="v"&&A===0?g("x0"):B==="h"&&k===0&&g("y0");var O=i.getComponentMethod("calendars","handleTraceDefaults");O(d,p,["x","y"],m)}function f(d,p,g,m){var y=m.prefix,_=t.coerce2(d,p,n,"marker.outliercolor"),v=g("marker.line.outliercolor"),x="outliers";p._hasPreCompStats?x="all":(_||v)&&(x="suspectedoutliers");var S=g(y+"points",x);S?(g("jitter",S==="all"?.3:0),g("pointpos",S==="all"?-1.5:0),g("marker.symbol"),g("marker.opacity"),g("marker.size"),g("marker.angle"),g("marker.color",p.line.color),g("marker.line.color"),g("marker.line.width"),S==="suspectedoutliers"&&(g("marker.line.outliercolor",p.marker.color),g("marker.line.outlierwidth")),g("selected.marker.color"),g("unselected.marker.color"),g("selected.marker.size"),g("unselected.marker.size"),g("text"),g("hovertext")):delete p.marker;var M=g("hoveron");(M==="all"||M.indexOf("points")!==-1)&&(g("hovertemplate"),g("hovertemplatefallback")),t.coerceSelectionMarkerOpacity(p,g)}function h(d,p){var g,m;function y(S){return t.coerce(m._input,m,n,S)}for(var _=0;_<d.length;_++){m=d[_];var v=m.type;if(v==="box"||v==="violin"){g=m._input;var x=p[v+"mode"];x==="group"&&s(g,m,p,y,x)}}}r.exports={supplyDefaults:u,crossTraceDefaults:h,handleSampleDefaults:c,handlePointsDefaults:f}}}),Xw=de({"src/traces/box/layout_defaults.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=jy();function o(l,n,u,c,f){for(var h=f+"Layout",d=!1,p=0;p<u.length;p++){var g=u[p];if(t.traceIs(g,h)){d=!0;break}}d&&(c(f+"mode"),c(f+"gap"),c(f+"groupgap"))}function s(l,n,u){function c(f,h){return i.coerce(l,n,a,f,h)}o(l,n,u,c,"box")}r.exports={supplyLayoutDefaults:s,_supply:o}}}),xk=de({"src/traces/box/calc.js"(e,r){"use strict";var t=da(),i=nn(),a=xd(),o=Qt(),s=cn().BADNUM,l=o._;r.exports=function(M,C){var w=M._fullLayout,k=i.getFromId(M,C.xaxis||"x"),A=i.getFromId(M,C.yaxis||"y"),b=[],E=C.type==="violin"?"_numViolins":"_numBoxes",T,F,D,R,P,z,I;C.orientation==="h"?(D=k,R="x",P=A,z="y",I=!!C.yperiodalignment):(D=A,R="y",P=k,z="x",I=!!C.xperiodalignment);var L=n(C,z,P,w[E]),B=L[0],O=L[1],G=o.distinctVals(B,P),W=G.vals,X=G.minDiff/2,Z,J,N,H,$,U,V=(C.boxpoints||C.points)==="all"?o.identity:function(xt){return xt.v<Z.lf||xt.v>Z.uf};if(C._hasPreCompStats){var j=C[R],q=function(xt){return D.d2c((C[xt]||[])[T])},Y=1/0,K=-1/0;for(T=0;T<C._length;T++){var te=B[T];if(t(te)){if(Z={},Z.pos=Z[z]=te,I&&O&&(Z.orig_p=O[T]),Z.q1=q("q1"),Z.med=q("median"),Z.q3=q("q3"),J=[],j&&o.isArrayOrTypedArray(j[T]))for(F=0;F<j[T].length;F++)U=D.d2c(j[T][F]),U!==s&&($={v:U,i:[T,F]},h($,C,[T,F]),J.push($));if(Z.pts=J.sort(p),N=Z[R]=J.map(g),H=N.length,Z.med!==s&&Z.q1!==s&&Z.q3!==s&&Z.med>=Z.q1&&Z.q3>=Z.med){var ne=q("lowerfence");Z.lf=ne!==s&&ne<=Z.q1?ne:m(Z,N,H);var se=q("upperfence");Z.uf=se!==s&&se>=Z.q3?se:y(Z,N,H);var le=q("mean");Z.mean=le!==s?le:H?o.mean(N,H):(Z.q1+Z.q3)/2;var ce=q("sd");Z.sd=le!==s&&ce>=0?ce:H?o.stdev(N,H,Z.mean):Z.q3-Z.q1,Z.lo=_(Z),Z.uo=v(Z);var pe=q("notchspan");pe=pe!==s&&pe>0?pe:x(Z,H),Z.ln=Z.med-pe,Z.un=Z.med+pe;var xe=Z.lf,ye=Z.uf;C.boxpoints&&N.length&&(xe=Math.min(xe,N[0]),ye=Math.max(ye,N[H-1])),C.notched&&(xe=Math.min(xe,Z.ln),ye=Math.max(ye,Z.un)),Z.min=xe,Z.max=ye}else{o.warn(["Invalid input - make sure that q1 <= median <= q3","q1 = "+Z.q1,"median = "+Z.med,"q3 = "+Z.q3].join(`
+`));var fe;Z.med!==s?fe=Z.med:Z.q1!==s?Z.q3!==s?fe=(Z.q1+Z.q3)/2:fe=Z.q1:Z.q3!==s?fe=Z.q3:fe=0,Z.med=fe,Z.q1=Z.q3=fe,Z.lf=Z.uf=fe,Z.mean=Z.sd=fe,Z.ln=Z.un=fe,Z.min=Z.max=fe}Y=Math.min(Y,Z.min),K=Math.max(K,Z.max),Z.pts2=J.filter(V),b.push(Z)}}C._extremes[D._id]=i.findExtremes(D,[Y,K],{padded:!0})}else{var ae=D.makeCalcdata(C,R),ee=u(W,X),ie=W.length,Q=c(ie);for(T=0;T<C._length;T++)if(U=ae[T],!!t(U)){var ue=o.findBin(B[T],ee);ue>=0&&ue<ie&&($={v:U,i:T},h($,C,T),Q[ue].push($))}var ge=1/0,Me=-1/0,Te=C.quartilemethod,je=Te==="exclusive",Ve=Te==="inclusive";for(T=0;T<ie;T++)if(Q[T].length>0){if(Z={},Z.pos=Z[z]=W[T],J=Z.pts=Q[T].sort(p),N=Z[R]=J.map(g),H=N.length,Z.min=N[0],Z.max=N[H-1],Z.mean=o.mean(N,H),Z.sd=o.stdev(N,H,Z.mean)*C.sdmultiple,Z.med=o.interp(N,.5),H%2&&(je||Ve)){var Ze,Ke;je?(Ze=N.slice(0,H/2),Ke=N.slice(H/2+1)):Ve&&(Ze=N.slice(0,H/2+1),Ke=N.slice(H/2)),Z.q1=o.interp(Ze,.5),Z.q3=o.interp(Ke,.5)}else Z.q1=o.interp(N,.25),Z.q3=o.interp(N,.75);Z.lf=m(Z,N,H),Z.uf=y(Z,N,H),Z.lo=_(Z),Z.uo=v(Z);var vt=x(Z,H);Z.ln=Z.med-vt,Z.un=Z.med+vt,ge=Math.min(ge,Z.ln),Me=Math.max(Me,Z.un),Z.pts2=J.filter(V),b.push(Z)}C.notched&&o.isTypedArray(ae)&&(ae=Array.from(ae)),C._extremes[D._id]=i.findExtremes(D,C.notched?ae.concat([ge,Me]):ae,{padded:!0})}return d(b,C),b.length>0?(b[0].t={num:w[E],dPos:X,posLetter:z,valLetter:R,labels:{med:l(M,"median:"),min:l(M,"min:"),q1:l(M,"q1:"),q3:l(M,"q3:"),max:l(M,"max:"),mean:C.boxmean==="sd"||C.sizemode==="sd"?l(M,"mean \xB1 \u03C3:").replace("\u03C3",C.sdmultiple===1?"\u03C3":C.sdmultiple+"\u03C3"):l(M,"mean:"),lf:l(M,"lower fence:"),uf:l(M,"upper fence:")}},w[E]++,b):[{t:{empty:!0}}]};function n(S,M,C,w){var k=M in S,A=M+"0"in S,b="d"+M in S;if(k||A&&b){var E=C.makeCalcdata(S,M),T=a(S,C,M,E).vals;return[T,E]}var F;A?F=S[M+"0"]:"name"in S&&(C.type==="category"||t(S.name)&&["linear","log"].indexOf(C.type)!==-1||o.isDateTime(S.name)&&C.type==="date")?F=S.name:F=w;for(var D=C.type==="multicategory"?C.r2c_just_indices(F):C.d2c(F,0,S[M+"calendar"]),R=S._length,P=new Array(R),z=0;z<R;z++)P[z]=D;return[P]}function u(S,M){for(var C=S.length,w=new Array(C+1),k=0;k<C;k++)w[k]=S[k]-M;return w[C]=S[C-1]+M,w}function c(S){for(var M=new Array(S),C=0;C<S;C++)M[C]=[];return M}var f={text:"tx",hovertext:"htx"};function h(S,M,C){for(var w in f)o.isArrayOrTypedArray(M[w])&&(Array.isArray(C)?o.isArrayOrTypedArray(M[w][C[0]])&&(S[f[w]]=M[w][C[0]][C[1]]):S[f[w]]=M[w][C])}function d(S,M){if(o.isArrayOrTypedArray(M.selectedpoints))for(var C=0;C<S.length;C++){for(var w=S[C].pts||[],k={},A=0;A<w.length;A++)k[w[A].i]=A;o.tagSelected(w,M,k)}}function p(S,M){return S.v-M.v}function g(S){return S.v}function m(S,M,C){return C===0?S.q1:Math.min(S.q1,M[Math.min(o.findBin(2.5*S.q1-1.5*S.q3,M,!0)+1,C-1)])}function y(S,M,C){return C===0?S.q3:Math.max(S.q3,M[Math.max(o.findBin(2.5*S.q3-1.5*S.q1,M),0)])}function _(S){return 4*S.q1-3*S.q3}function v(S){return 4*S.q3-3*S.q1}function x(S,M){return M===0?0:1.57*(S.q3-S.q1)/Math.sqrt(M)}}}),Zw=de({"src/traces/box/cross_trace_calc.js"(e,r){"use strict";var t=nn(),i=Qt(),a=bv().getAxisGroup,o=["v","h"];function s(n,u){for(var c=n.calcdata,f=u.xaxis,h=u.yaxis,d=0;d<o.length;d++){for(var p=o[d],g=p==="h"?h:f,m=[],y=0;y<c.length;y++){var _=c[y],v=_[0].t,x=_[0].trace;x.visible===!0&&(x.type==="box"||x.type==="candlestick")&&!v.empty&&(x.orientation||"v")===p&&x.xaxis===f._id&&x.yaxis===h._id&&m.push(y)}l("box",n,m,g)}}function l(n,u,c,f){var h=u.calcdata,d=u._fullLayout,p=f._id,g=p.charAt(0),m,y,_,v=[],x=0;for(m=0;m<c.length;m++)for(_=h[c[m]],y=0;y<_.length;y++)v.push(f.c2l(_[y].pos,!0)),x+=(_[y].pts2||[]).length;if(v.length){var S=i.distinctVals(v);(f.type==="category"||f.type==="multicategory")&&(S.minDiff=1);var M=S.minDiff/2;t.minDtick(f,S.minDiff,S.vals[0],!0);var C=n==="violin"?"_numViolins":"_numBoxes",w=d[C],k=d[n+"mode"]==="group"&&w>1,A=1-d[n+"gap"],b=1-d[n+"groupgap"];for(m=0;m<c.length;m++){_=h[c[m]];var E=_[0].trace,T=_[0].t,F=E.width,D=E.side,R,P,z,I;if(F)R=P=I=F/2,z=0;else if(R=M,k){var L=a(d,f._id)+E.orientation,B=d._alignmentOpts[L]||{},O=B[E.alignmentgroup]||{},G=Object.keys(O.offsetGroups||{}).length,W=G||w,X=G?E._offsetIndex:T.num;P=R*A*b/W,z=2*R*(-.5+(X+.5)/W)*A,I=R*A/W}else P=R*A*b,z=0,I=R;T.dPos=R,T.bPos=z,T.bdPos=P,T.wHover=I;var Z,J,N=z+P,H,$,U,V,j,q,Y=!!F,K=(E.boxpoints||E.points)&&x>0;if(D==="positive"?(Z=R*(F?1:.5),H=N,J=H=z):D==="negative"?(Z=H=z,J=R*(F?1:.5),$=N):(Z=J=R,H=$=N),K){var te=E.pointpos,ne=E.jitter,se=E.marker.size/2,le=0;te+ne>=0&&(le=N*(te+ne),le>Z?(Y=!0,j=se,U=le):le>H&&(j=se,U=Z)),le<=Z&&(U=Z);var ce=0;te-ne<=0&&(ce=-N*(te-ne),ce>J?(Y=!0,q=se,V=ce):ce>$&&(q=se,V=J)),ce<=J&&(V=J)}else U=Z,V=J;var pe=new Array(_.length);for(y=0;y<_.length;y++)pe[y]=_[y].pos;E._extremes[p]=t.findExtremes(f,pe,{padded:Y,vpadminus:V,vpadplus:U,vpadLinearized:!0,ppadminus:{x:q,y:j}[g],ppadplus:{x:j,y:q}[g]})}}}r.exports={crossTraceCalc:s,setPositionOffset:l}}}),Kw=de({"src/traces/box/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=5,s=.01;function l(f,h,d,p){var g=f._context.staticPlot,m=h.xaxis,y=h.yaxis;i.makeTraceGroups(p,d,"trace boxes").each(function(_){var v=t.select(this),x=_[0],S=x.t,M=x.trace;if(S.wdPos=S.bdPos*M.whiskerwidth,M.visible!==!0||S.empty){v.remove();return}var C,w;M.orientation==="h"?(C=y,w=m):(C=m,w=y),n(v,{pos:C,val:w},M,S,g),u(v,{x:m,y},M,S),c(v,{pos:C,val:w},M,S)})}function n(f,h,d,p,g){var m=d.orientation==="h",y=h.val,_=h.pos,v=!!_.rangebreaks,x=p.bPos,S=p.wdPos||0,M=p.bPosPxOffset||0,C=d.whiskerwidth||0,w=d.showwhiskers!==!1,k=d.notched||!1,A=k?1-2*d.notchwidth:1,b,E;Array.isArray(p.bdPos)?(b=p.bdPos[0],E=p.bdPos[1]):(b=p.bdPos,E=p.bdPos);var T=f.selectAll("path.box").data(d.type!=="violin"||d.box.visible?i.identity:[]);T.enter().append("path").style("vector-effect",g?"none":"non-scaling-stroke").attr("class","box"),T.exit().remove(),T.each(function(F){if(F.empty)return t.select(this).attr("d","M0,0Z");var D=_.c2l(F.pos+x,!0),R=_.l2p(D-b)+M,P=_.l2p(D+E)+M,z=v?(R+P)/2:_.l2p(D)+M,I=d.whiskerwidth,L=v?R*I+(1-I)*z:_.l2p(D-S)+M,B=v?P*I+(1-I)*z:_.l2p(D+S)+M,O=_.l2p(D-b*A)+M,G=_.l2p(D+E*A)+M,W=d.sizemode==="sd",X=y.c2p(W?F.mean-F.sd:F.q1,!0),Z=W?y.c2p(F.mean+F.sd,!0):y.c2p(F.q3,!0),J=i.constrain(W?y.c2p(F.mean,!0):y.c2p(F.med,!0),Math.min(X,Z)+1,Math.max(X,Z)-1),N=F.lf===void 0||d.boxpoints===!1||W,H=y.c2p(N?F.min:F.lf,!0),$=y.c2p(N?F.max:F.uf,!0),U=y.c2p(F.ln,!0),V=y.c2p(F.un,!0);m?t.select(this).attr("d","M"+J+","+O+"V"+G+"M"+X+","+R+"V"+P+(k?"H"+U+"L"+J+","+G+"L"+V+","+P:"")+"H"+Z+"V"+R+(k?"H"+V+"L"+J+","+O+"L"+U+","+R:"")+"Z"+(w?"M"+X+","+z+"H"+H+"M"+Z+","+z+"H"+$+(C===0?"":"M"+H+","+L+"V"+B+"M"+$+","+L+"V"+B):"")):t.select(this).attr("d","M"+O+","+J+"H"+G+"M"+R+","+X+"H"+P+(k?"V"+U+"L"+G+","+J+"L"+P+","+V:"")+"V"+Z+"H"+R+(k?"V"+V+"L"+O+","+J+"L"+R+","+U:"")+"Z"+(w?"M"+z+","+X+"V"+H+"M"+z+","+Z+"V"+$+(C===0?"":"M"+L+","+H+"H"+B+"M"+L+","+$+"H"+B):""))})}function u(f,h,d,p){var g=h.x,m=h.y,y=p.bdPos,_=p.bPos,v=d.boxpoints||d.points;i.seedPseudoRandom();var x=function(C){return C.forEach(function(w){w.t=p,w.trace=d}),C},S=f.selectAll("g.points").data(v?x:[]);S.enter().append("g").attr("class","points"),S.exit().remove();var M=S.selectAll("path").data(function(C){var w,k=C.pts2,A=Math.max((C.max-C.min)/10,C.q3-C.q1),b=A*1e-9,E=A*s,T=[],F=0,D;if(d.jitter){if(A===0)for(F=1,T=new Array(k.length),w=0;w<k.length;w++)T[w]=1;else for(w=0;w<k.length;w++){var R=Math.max(0,w-o),P=k[R].v,z=Math.min(k.length-1,w+o),I=k[z].v;v!=="all"&&(k[w].v<C.lf?I=Math.min(I,C.lf):P=Math.max(P,C.uf));var L=Math.sqrt(E*(z-R)/(I-P+b))||0;L=i.constrain(Math.abs(L),0,1),T.push(L),F=Math.max(L,F)}D=d.jitter*2/(F||1)}for(w=0;w<k.length;w++){var B=k[w],O=B.v,G=d.jitter?D*T[w]*(i.pseudoRandom()-.5):0,W=C.pos+_+y*(d.pointpos+G);d.orientation==="h"?(B.y=W,B.x=O):(B.x=W,B.y=O),v==="suspectedoutliers"&&O<C.uo&&O>C.lo&&(B.so=!0)}return k});M.enter().append("path").classed("point",!0),M.exit().remove(),M.call(a.translatePoints,g,m)}function c(f,h,d,p){var g=h.val,m=h.pos,y=!!m.rangebreaks,_=p.bPos,v=p.bPosPxOffset||0,x=d.boxmean||(d.meanline||{}).visible,S,M;Array.isArray(p.bdPos)?(S=p.bdPos[0],M=p.bdPos[1]):(S=p.bdPos,M=p.bdPos);var C=f.selectAll("path.mean").data(d.type==="box"&&d.boxmean||d.type==="violin"&&d.box.visible&&d.meanline.visible?i.identity:[]);C.enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}),C.exit().remove(),C.each(function(w){var k=m.c2l(w.pos+_,!0),A=m.l2p(k-S)+v,b=m.l2p(k+M)+v,E=y?(A+b)/2:m.l2p(k)+v,T=g.c2p(w.mean,!0),F=g.c2p(w.mean-w.sd,!0),D=g.c2p(w.mean+w.sd,!0);d.orientation==="h"?t.select(this).attr("d","M"+T+","+A+"V"+b+(x==="sd"?"m0,0L"+F+","+E+"L"+T+","+A+"L"+D+","+E+"Z":"")):t.select(this).attr("d","M"+A+","+T+"H"+b+(x==="sd"?"m0,0L"+E+","+F+"L"+A+","+T+"L"+E+","+D+"Z":""))})}r.exports={plot:l,plotBoxAndWhiskers:n,plotPoints:u,plotBoxMean:c}}}),Jw=de({"src/traces/box/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=hn();function o(l,n,u){var c=u||t.select(l).selectAll("g.trace.boxes");c.style("opacity",function(f){return f[0].trace.opacity}),c.each(function(f){var h=t.select(this),d=f[0].trace,p=d.line.width;function g(_,v,x,S){_.style("stroke-width",v+"px").call(i.stroke,x).call(i.fill,S)}var m=h.selectAll("path.box");if(d.type==="candlestick")m.each(function(_){if(!_.empty){var v=t.select(this),x=d[_.dir];g(v,x.line.width,x.line.color,x.fillcolor),v.style("opacity",d.selectedpoints&&!_.selected?.3:1)}});else{g(m,p,d.line.color,d.fillcolor),h.selectAll("path.mean").style({"stroke-width":p,"stroke-dasharray":2*p+"px,"+p+"px"}).call(i.stroke,d.line.color);var y=h.selectAll("path.point");a.pointStyle(y,d,l)}})}function s(l,n,u){var c=n[0].trace,f=u.selectAll("path.point");c.selectedpoints?a.selectedPointStyle(f,c):a.pointStyle(f,c,l)}r.exports={style:o,styleOnSelect:s}}}),bk=de({"src/traces/box/hover.js"(e,r){"use strict";var t=nn(),i=Qt(),a=$s(),o=ta(),s=i.fillText;function l(c,f,h,d){var p=c.cd,g=p[0].trace,m=g.hoveron,y=[],_;return m.indexOf("boxes")!==-1&&(y=y.concat(n(c,f,h,d))),m.indexOf("points")!==-1&&(_=u(c,f,h)),d==="closest"?_?[_]:y:(_&&y.push(_),y)}function n(c,f,h,d){var p=c.cd,g=c.xa,m=c.ya,y=p[0].trace,_=p[0].t,v=y.type==="violin",x,S,M,C,w,k,A,b,E,T,F,D=_.bdPos,R,P,z=_.wHover,I=function(ce){return M.c2l(ce.pos)+_.bPos-M.c2l(k)};v&&y.side!=="both"?(y.side==="positive"&&(E=function(ce){var pe=I(ce);return a.inbox(pe,pe+z,T)},R=D,P=0),y.side==="negative"&&(E=function(ce){var pe=I(ce);return a.inbox(pe-z,pe,T)},R=0,P=D)):(E=function(ce){var pe=I(ce);return a.inbox(pe-z,pe+z,T)},R=P=D);var L;v?L=function(ce){return a.inbox(ce.span[0]-w,ce.span[1]-w,T)}:L=function(ce){return a.inbox(ce.min-w,ce.max-w,T)},y.orientation==="h"?(w=f,k=h,A=L,b=E,x="y",M=m,S="x",C=g):(w=h,k=f,A=E,b=L,x="x",M=g,S="y",C=m);var B=Math.min(1,D/Math.abs(M.r2c(M.range[1])-M.r2c(M.range[0])));T=c.maxHoverDistance-B,F=c.maxSpikeDistance-B;function O(ce){return(A(ce)+b(ce))/2}var G=a.getDistanceFunction(d,A,b,O);if(a.getClosest(p,G,c),c.index===!1)return[];var W=p[c.index],X=y.line.color,Z=(y.marker||{}).color;o.opacity(X)&&y.line.width?c.color=X:o.opacity(Z)&&y.boxpoints?c.color=Z:c.color=y.fillcolor,c[x+"0"]=M.c2p(W.pos+_.bPos-P,!0),c[x+"1"]=M.c2p(W.pos+_.bPos+R,!0),c[x+"LabelVal"]=W.orig_p!==void 0?W.orig_p:W.pos;var J=x+"Spike";c.spikeDistance=O(W)*F/T,c[J]=M.c2p(W.pos,!0);var N=y.boxmean||y.sizemode==="sd"||(y.meanline||{}).visible,H=y.boxpoints||y.points,$=H&&N?["max","uf","q3","med","mean","q1","lf","min"]:H&&!N?["max","uf","q3","med","q1","lf","min"]:!H&&N?["max","q3","med","mean","q1","min"]:["max","q3","med","q1","min"],U=C.range[1]<C.range[0];y.orientation===(U?"v":"h")&&$.reverse();for(var V=c.spikeDistance,j=c[J],q=[],Y=0;Y<$.length;Y++){var K=$[Y];if(K in W){var te=W[K],ne=C.c2p(te,!0),se=i.extendFlat({},c);se.attr=K,se[S+"0"]=se[S+"1"]=ne,se[S+"LabelVal"]=te,se[S+"Label"]=(_.labels?_.labels[K]+" ":"")+t.hoverLabelText(C,te,y[S+"hoverformat"]),se.hoverOnBox=!0,K==="mean"&&"sd"in W&&(y.boxmean==="sd"||y.sizemode==="sd")&&(se[S+"err"]=W.sd),se.hovertemplate=!1,q.push(se)}}c.name="",c.spikeDistance=void 0,c[J]=void 0;for(var le=0;le<q.length;le++)q[le].attr!=="med"?(q[le].name="",q[le].spikeDistance=void 0,q[le][J]=void 0):(q[le].spikeDistance=V,q[le][J]=j);return q}function u(c,f,h){for(var d=c.cd,p=c.xa,g=c.ya,m=d[0].trace,y=p.c2p(f),_=g.c2p(h),v,x=function(L){var B=Math.max(3,L.mrc||0);return Math.max(Math.abs(p.c2p(L.x)-y)-B,1-3/B)},S=function(L){var B=Math.max(3,L.mrc||0);return Math.max(Math.abs(g.c2p(L.y)-_)-B,1-3/B)},M=a.quadrature(x,S),C=!1,w,k,A=0;A<d.length;A++){w=d[A];for(var b=0;b<(w.pts||[]).length;b++){k=w.pts[b];var E=M(k);E<=c.distance&&(c.distance=E,C=[A,b])}}if(!C)return!1;w=d[C[0]],k=w.pts[C[1]];var T=p.c2p(k.x,!0),F=g.c2p(k.y,!0),D=k.mrc||1;v=i.extendFlat({},c,{index:k.i,color:(m.marker||{}).color,name:m.name,x0:T-D,x1:T+D,y0:F-D,y1:F+D,spikeDistance:c.distance,hovertemplate:m.hovertemplate});var R=w.orig_p,P=R!==void 0?R:w.pos,z;m.orientation==="h"?(z=g,v.xLabelVal=k.x,v.yLabelVal=P):(z=p,v.xLabelVal=P,v.yLabelVal=k.y);var I=z._id.charAt(0);return v[I+"Spike"]=z.c2p(w.pos,!0),s(k,m,v),v}r.exports={hoverPoints:l,hoverOnBoxes:n,hoverOnPoints:u}}}),oG=de({"src/traces/box/event_data.js"(e,r){"use strict";r.exports=function(i,a){return a.hoverOnBox&&(i.hoverOnBox=a.hoverOnBox),"xVal"in a&&(i.x=a.xVal),"yVal"in a&&(i.y=a.yVal),a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),i}}}),wk=de({"src/traces/box/select.js"(e,r){"use strict";r.exports=function(i,a){var o=i.cd,s=i.xaxis,l=i.yaxis,n=[],u,c;if(a===!1)for(u=0;u<o.length;u++)for(c=0;c<(o[u].pts||[]).length;c++)o[u].pts[c].selected=0;else for(u=0;u<o.length;u++)for(c=0;c<(o[u].pts||[]).length;c++){var f=o[u].pts[c],h=s.c2p(f.x),d=l.c2p(f.y);a.contains([h,d],null,f.i,i)?(n.push({pointNumber:f.i,x:s.c2d(f.x),y:l.c2d(f.y)}),f.selected=1):f.selected=0}return n}}}),sG=de({"src/traces/box/index.js"(e,r){"use strict";r.exports={attributes:Ny(),layoutAttributes:jy(),supplyDefaults:Uy().supplyDefaults,crossTraceDefaults:Uy().crossTraceDefaults,supplyLayoutDefaults:Xw().supplyLayoutDefaults,calc:xk(),crossTraceCalc:Zw().crossTraceCalc,plot:Kw().plot,style:Jw().style,styleOnSelect:Jw().styleOnSelect,hoverPoints:bk().hoverPoints,eventData:oG(),selectPoints:wk(),moduleType:"trace",name:"box",basePlotModule:ml(),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","boxLayout","zoomScale"],meta:{}}}}),lG=de({"lib/box.js"(e,r){"use strict";r.exports=sG()}}),x1=de({"src/traces/heatmap/attributes.js"(e,r){"use strict";var t=cs(),{extendFlat:i}=fn(),a=ri(),{axisHoverFormat:o}=Ns(),s=us(),{hovertemplateAttrs:l,templatefallbackAttrs:n,texttemplateAttrs:u}=Vo(),c=tl();r.exports=i({z:{valType:"data_array",editType:"calc"},x:i({},c.x,{impliedEdits:{xtype:"array"}}),x0:i({},c.x0,{impliedEdits:{xtype:"scaled"}}),dx:i({},c.dx,{impliedEdits:{xtype:"scaled"}}),y:i({},c.y,{impliedEdits:{ytype:"array"}}),y0:i({},c.y0,{impliedEdits:{ytype:"scaled"}}),dy:i({},c.dy,{impliedEdits:{ytype:"scaled"}}),xperiod:i({},c.xperiod,{impliedEdits:{xtype:"scaled"}}),yperiod:i({},c.yperiod,{impliedEdits:{ytype:"scaled"}}),xperiod0:i({},c.xperiod0,{impliedEdits:{xtype:"scaled"}}),yperiod0:i({},c.yperiod0,{impliedEdits:{ytype:"scaled"}}),xperiodalignment:i({},c.xperiodalignment,{impliedEdits:{xtype:"scaled"}}),yperiodalignment:i({},c.yperiodalignment,{impliedEdits:{ytype:"scaled"}}),text:{valType:"data_array",editType:"calc"},hovertext:{valType:"data_array",editType:"calc"},transpose:{valType:"boolean",dflt:!1,editType:"calc"},xtype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},ytype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},zsmooth:{valType:"enumerated",values:["fast","best",!1],dflt:!1,editType:"calc"},hoverongaps:{valType:"boolean",dflt:!0,editType:"none"},connectgaps:{valType:"boolean",editType:"calc"},xgap:{valType:"number",dflt:0,min:0,editType:"plot"},ygap:{valType:"number",dflt:0,min:0,editType:"plot"},xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z",1),hovertemplate:l(),hovertemplatefallback:n(),texttemplate:u({arrayOk:!1,editType:"plot"},{keys:["x","y","z","text"]}),texttemplatefallback:n({editType:"plot"}),textfont:s({editType:"plot",autoSize:!0,autoColor:!0,colorEditType:"style"}),showlegend:i({},a.showlegend,{dflt:!1}),zorder:c.zorder},t("",{cLetter:"z",autoColorDflt:!1}))}}),Qw=de({"src/traces/heatmap/xyz_defaults.js"(e,r){"use strict";var t=da(),i=Qt(),a=Ma();r.exports=function(n,u,c,f,h,d){var p=c("z");h=h||"x",d=d||"y";var g,m;if(p===void 0||!p.length)return 0;if(i.isArray1D(p)){g=c(h),m=c(d);var y=i.minRowLength(g),_=i.minRowLength(m);if(y===0||_===0)return 0;u._length=Math.min(y,_,p.length)}else{if(g=o(h,c),m=o(d,c),!s(p))return 0;c("transpose"),u._length=null}var v=a.getComponentMethod("calendars","handleTraceDefaults");return v(n,u,[h,d],f),!0};function o(l,n){var u=n(l),c=u?n(l+"type","array"):"scaled";return c==="scaled"&&(n(l+"0"),n("d"+l)),u}function s(l){for(var n=!0,u=!1,c=!1,f,h=0;h<l.length;h++){if(f=l[h],!i.isArrayOrTypedArray(f)){n=!1;break}f.length>0&&(u=!0);for(var d=0;d<f.length;d++)if(t(f[d])){c=!0;break}}return n&&u&&c}}}),qy=de({"src/traces/heatmap/label_defaults.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){a("texttemplate"),a("texttemplatefallback");var s=t.extendFlat({},o.font,{color:"auto",size:"auto"});t.coerceFont(a,"textfont",s)}}}),Tk=de({"src/traces/heatmap/style_defaults.js"(e,r){"use strict";r.exports=function(i,a,o){var s=o("zsmooth");s===!1&&(o("xgap"),o("ygap")),o("zhoverformat")}}}),uG=de({"src/traces/heatmap/defaults.js"(e,r){"use strict";var t=Qt(),i=Qw(),a=qy(),o=gd(),s=Tk(),l=hu(),n=x1();r.exports=function(c,f,h,d){function p(m,y){return t.coerce(c,f,n,m,y)}var g=i(c,f,p,d);if(!g){f.visible=!1;return}o(c,f,d,p),p("xhoverformat"),p("yhoverformat"),p("text"),p("hovertext"),p("hovertemplate"),p("hovertemplatefallback"),a(p,d),s(c,f,p,d),p("hoverongaps"),p("connectgaps",t.isArray1D(f.z)&&f.zsmooth!==!1),l(c,f,d,p,{prefix:"",cLetter:"z"}),p("zorder")}}}),Ak=de({"src/traces/histogram/bin_functions.js"(e,r){"use strict";var t=da();r.exports={count:function(i,a,o){return o[i]++,1},sum:function(i,a,o,s){var l=s[a];return t(l)?(l=Number(l),o[i]+=l,l):0},avg:function(i,a,o,s,l){var n=s[a];return t(n)&&(n=Number(n),o[i]+=n,l[i]++),0},min:function(i,a,o,s){var l=s[a];if(t(l))if(l=Number(l),t(o[i])){if(o[i]>l){var n=l-o[i];return o[i]=l,n}}else return o[i]=l,l;return 0},max:function(i,a,o,s){var l=s[a];if(t(l))if(l=Number(l),t(o[i])){if(o[i]<l){var n=l-o[i];return o[i]=l,n}}else return o[i]=l,l;return 0}}}}),Mk=de({"src/traces/histogram/norm_functions.js"(e,r){"use strict";r.exports={percent:function(t,i){for(var a=t.length,o=100/i,s=0;s<a;s++)t[s]*=o},probability:function(t,i){for(var a=t.length,o=0;o<a;o++)t[o]/=i},density:function(t,i,a,o){var s=t.length;o=o||1;for(var l=0;l<s;l++)t[l]*=a[l]*o},"probability density":function(t,i,a,o){var s=t.length;o&&(i/=o);for(var l=0;l<s;l++)t[l]*=a[l]/i}}}}),Sk=de({"src/traces/histogram/average.js"(e,r){"use strict";r.exports=function(i,a){for(var o=i.length,s=0,l=0;l<o;l++)a[l]?(i[l]/=a[l],s+=i[l]):i[l]=null;return s}}}),Ek=de({"src/traces/histogram/bin_label_vals.js"(e,r){"use strict";var t=cn(),i=t.ONEAVGYEAR,a=t.ONEAVGMONTH,o=t.ONEDAY,s=t.ONEHOUR,l=t.ONEMIN,n=t.ONESEC,u=nn().tickIncrement;r.exports=function(g,m,y,_,v){var x=-1.1*m,S=-.1*m,M=g-S,C=y[0],w=y[1],k=Math.min(c(C+S,C+M,_,v),c(w+S,w+M,_,v)),A=Math.min(c(C+x,C+S,_,v),c(w+x,w+S,_,v)),b,E;if(k>A&&A<Math.abs(w-C)/4e3?(b=k,E=!1):(b=Math.min(k,A),E=!0),_.type==="date"&&b>o){var T=b===i?1:6,F=b===i?"M12":"M1";return function(D,R){var P=_.c2d(D,i,v),z=P.indexOf("-",T);z>0&&(P=P.slice(0,z));var I=_.d2c(P,0,v);if(I<D){var L=u(I,F,!1,v);(I+L)/2<D+g&&(I=L)}return R&&E?u(I,F,!0,v):I}}return function(D,R){var P=b*Math.round(D/b);return P+b/10<D&&P+b*.9<D+g&&(P+=b),R&&E&&(P-=b),P}};function c(p,g,m,y){if(p*g<=0)return 1/0;for(var _=Math.abs(g-p),v=m.type==="date",x=f(_,v),S=0;S<10;S++){var M=f(x*80,v);if(x===M)break;if(h(M,p,g,v,m,y))x=M;else break}return x}function f(p,g){return g&&p>n?p>o?p>i*1.1?i:p>a*1.1?a:o:p>s?s:p>l?l:n:Math.pow(10,Math.floor(Math.log(p)/Math.LN10))}function h(p,g,m,y,_,v){if(y&&p>o){var x=d(g,_,v),S=d(m,_,v),M=p===i?0:1;return x[M]!==S[M]}return Math.floor(m/p)-Math.floor(g/p)>.1}function d(p,g,m){var y=g.c2d(p,i,m).split("-");return y[0]===""&&(y.unshift(),y[0]="-"+y[0]),y}}}),kk=de({"src/traces/histogram/calc.js"(e,r){"use strict";var t=da(),i=Qt(),a=Ma(),o=nn(),{hasColorscale:s}=Wu(),l=hc(),n=Oy(),u=Ak(),c=Mk(),f=Sk(),h=Ek();function d(_,v){var x=[],S=[],M=v.orientation==="h",C=o.getFromId(_,M?v.yaxis:v.xaxis),w=M?"y":"x",k={x:"y",y:"x"}[w],A=v[w+"calendar"],b=v.cumulative,E,T=p(_,v,C,w),F=T[0],D=T[1],R=typeof F.size=="string",P=[],z=R?P:F,I=[],L=[],B=[],O=0,G=v.histnorm,W=v.histfunc,X=G.indexOf("density")!==-1,Z,J,N;b.enabled&&X&&(G=G.replace(/ ?density$/,""),X=!1);var H=W==="max"||W==="min",$=H?null:0,U=u.count,V=c[G],j=!1,q=function(ue){return C.r2c(ue,0,A)},Y;for(i.isArrayOrTypedArray(v[k])&&W!=="count"&&(Y=v[k],j=W==="avg",U=u[W]),E=q(F.start),J=q(F.end)+(E-o.tickIncrement(E,F.size,!1,A))/1e6;E<J&&x.length<1e6&&(Z=o.tickIncrement(E,F.size,!1,A),x.push((E+Z)/2),S.push($),B.push([]),P.push(E),X&&I.push(1/(Z-E)),j&&L.push(0),!(Z<=E));)E=Z;P.push(E),!R&&C.type==="date"&&(z={start:q(z.start),end:q(z.end),size:z.size}),_._fullLayout._roundFnOpts||(_._fullLayout._roundFnOpts={});var K=v["_"+w+"bingroup"],te={leftGap:1/0,rightGap:1/0};K&&(_._fullLayout._roundFnOpts[K]||(_._fullLayout._roundFnOpts[K]=te),te=_._fullLayout._roundFnOpts[K]);var ne=S.length,se=!0,le=te.leftGap,ce=te.rightGap,pe={};for(E=0;E<D.length;E++){var xe=D[E];N=i.findBin(xe,z),N>=0&&N<ne&&(O+=U(N,E,S,Y,L),se&&B[N].length&&xe!==D[B[N][0]]&&(se=!1),B[N].push(E),pe[E]=N,le=Math.min(le,xe-P[N]),ce=Math.min(ce,P[N+1]-xe))}te.leftGap=le,te.rightGap=ce;var ye;se||(ye=function(ue,ge){return function(){var Me=_._fullLayout._roundFnOpts[K];return h(Me.leftGap,Me.rightGap,P,C,A)(ue,ge)}}),j&&(O=f(S,L)),V&&V(S,O,I),b.enabled&&y(S,b.direction,b.currentbin);var fe=Math.min(x.length,S.length),ae=[],ee=0,ie=fe-1;for(E=0;E<fe;E++)if(S[E]){ee=E;break}for(E=fe-1;E>=ee;E--)if(S[E]){ie=E;break}for(E=ee;E<=ie;E++)if(t(x[E])&&t(S[E])){var Q={p:x[E],s:S[E],b:0};b.enabled||(Q.pts=B[E],se?Q.ph0=Q.ph1=B[E].length?D[B[E][0]]:x[E]:(v._computePh=!0,Q.ph0=ye(P[E]),Q.ph1=ye(P[E+1],!0))),ae.push(Q)}return ae.length===1&&(ae[0].width1=o.tickIncrement(ae[0].p,F.size,!1,A)-ae[0].p),s(v,"marker")&&l(_,v,{vals:v.marker.color,containerStr:"marker",cLetter:"c"}),s(v,"marker.line")&&l(_,v,{vals:v.marker.line.color,containerStr:"marker.line",cLetter:"c"}),n(ae,v),i.isArrayOrTypedArray(v.selectedpoints)&&i.tagSelected(ae,v,pe),ae}function p(_,v,x,S,M){var C,w=S+"bins",k=_._fullLayout,A=v["_"+S+"bingroup"],b=k._histogramBinOpts[A],E=k.barmode==="overlay",T,F,D,R,P,z,I,L=function(ye){return x.r2c(ye,0,R)},B=function(ye){return x.c2r(ye,0,R)},O=x.type==="date"?function(ye){return ye||ye===0?i.cleanDate(ye,null,R):null}:function(ye){return t(ye)?Number(ye):null};function G(ye,fe,ae){fe[ye+"Found"]?(fe[ye]=O(fe[ye]),fe[ye]===null&&(fe[ye]=ae[ye])):(z[ye]=fe[ye]=ae[ye],i.nestedProperty(F[0],w+"."+ye).set(ae[ye]))}if(v["_"+S+"autoBinFinished"])delete v["_"+S+"autoBinFinished"];else{F=b.traces;var W=[],X=!0,Z=!1,J=!1;for(T=0;T<F.length;T++)if(D=F[T],D.visible){var N=b.dirs[T];P=D["_"+N+"pos0"]=x.makeCalcdata(D,N),W=i.concat(W,P),delete D["_"+S+"autoBinFinished"],v.visible===!0&&(X?X=!1:(delete D._autoBin,D["_"+S+"autoBinFinished"]=1),a.traceIs(D,"2dMap")&&(Z=!0),D.type==="histogram2dcontour"&&(J=!0))}R=F[0][S+"calendar"];var H=o.autoBin(W,x,b.nbins,Z,R,b.sizeFound&&b.size),$=F[0]._autoBin={};if(z=$[b.dirs[0]]={},J&&(b.size||(H.start=B(o.tickIncrement(L(H.start),H.size,!0,R))),b.end===void 0&&(H.end=B(o.tickIncrement(L(H.end),H.size,!1,R)))),E&&!a.traceIs(v,"2dMap")&&H._dataSpan===0&&x.type!=="category"&&x.type!=="multicategory"&&v.bingroup===""&&!((C=v._input[w])!=null&&C.size)){if(M)return[H,P,!0];H=g(_,v,x,S,w)}I=D.cumulative||{},I.enabled&&I.currentbin!=="include"&&(I.direction==="decreasing"?H.start=B(o.tickIncrement(L(H.start),H.size,!0,R)):H.end=B(o.tickIncrement(L(H.end),H.size,!1,R))),b.size=H.size,b.sizeFound||(z.size=H.size,i.nestedProperty(F[0],w+".size").set(H.size)),G("start",b,H),G("end",b,H)}P=v["_"+S+"pos0"],delete v["_"+S+"pos0"];var U=v._input[w]||{},V=i.extendFlat({},b),j=b.start,q=x.r2l(U.start),Y=q!==void 0;if((b.startFound||Y)&&q!==x.r2l(j)){var K=Y?q:i.aggNums(Math.min,null,P),te={type:x.type==="category"||x.type==="multicategory"?"linear":x.type,r2l:x.r2l,dtick:b.size,tick0:j,calendar:R,range:[K,o.tickIncrement(K,b.size,!1,R)].map(x.l2r)},ne=o.tickFirst(te);ne>x.r2l(K)&&(ne=o.tickIncrement(ne,b.size,!0,R)),V.start=x.l2r(ne),Y||i.nestedProperty(v,w+".start").set(V.start)}var se=b.end,le=x.r2l(U.end),ce=le!==void 0;if((b.endFound||ce)&&le!==x.r2l(se)){var pe=ce?le:i.aggNums(Math.max,null,P);V.end=x.l2r(pe),ce||i.nestedProperty(v,w+".start").set(V.end)}var xe="autobin"+S;return v._input[xe]===!1&&(v._input[w]=i.extendFlat({},v[w]||{}),delete v._input[xe],delete v[xe]),[V,P]}function g(_,v,x,S,M){var C=_._fullLayout,w=m(_,v),k=!1,A=1/0,b=[v],E,T,F;for(E=0;E<w.length;E++)if(T=w[E],T===v)k=!0;else if(!k)F=C._histogramBinOpts[T["_"+S+"bingroup"]],A=Math.min(A,F.size||T[M].size);else{var D=p(_,T,x,S,!0),R=D[0],P=D[2];T["_"+S+"autoBinFinished"]=1,T["_"+S+"pos0"]=D[1],P?b.push(T):A=Math.min(A,R.size)}var z=new Array(b.length);for(E=0;E<b.length;E++)for(var I=b[E]["_"+S+"pos0"],L=0;L<I.length;L++)if(I[L]!==void 0){z[E]=I[L];break}for(isFinite(A)||(A=i.distinctVals(z).minDiff),E=0;E<b.length;E++){T=b[E];var B=T[S+"calendar"],O={start:x.c2r(z[E]-A/2,0,B),end:x.c2r(z[E]+A/2,0,B),size:A};T._input[M]=T[M]=O,F=C._histogramBinOpts[T["_"+S+"bingroup"]],F&&i.extendFlat(F,O)}return v[M]}function m(_,v){for(var x=v.xaxis,S=v.yaxis,M=v.orientation,C=[],w=_._fullData,k=0;k<w.length;k++){var A=w[k];A.type==="histogram"&&A.visible===!0&&A.orientation===M&&A.xaxis===x&&A.yaxis===S&&C.push(A)}return C}function y(_,v,x){var S,M,C;function w(A){C=_[A],_[A]/=2}function k(A){M=_[A],_[A]=C+M/2,C+=M}if(x==="half")if(v==="increasing")for(w(0),S=1;S<_.length;S++)k(S);else for(w(_.length-1),S=_.length-2;S>=0;S--)k(S);else if(v==="increasing"){for(S=1;S<_.length;S++)_[S]+=_[S-1];x==="exclude"&&(_.unshift(0),_.pop())}else{for(S=_.length-2;S>=0;S--)_[S]+=_[S+1];x==="exclude"&&(_.push(0),_.shift())}}r.exports={calc:d,calcAllAutoBins:p}}}),cG=de({"src/traces/histogram2d/calc.js"(e,r){"use strict";var t=Qt(),i=nn(),a=Ak(),o=Mk(),s=Sk(),l=Ek(),n=kk().calcAllAutoBins;r.exports=function(d,p){var g=i.getFromId(d,p.xaxis),m=i.getFromId(d,p.yaxis),y=p.xcalendar,_=p.ycalendar,v=function(qe){return g.r2c(qe,0,y)},x=function(qe){return m.r2c(qe,0,_)},S=function(qe){return g.c2r(qe,0,y)},M=function(qe){return m.c2r(qe,0,_)},C,w,k,A,b=n(d,p,g,"x"),E=b[0],T=b[1],F=n(d,p,m,"y"),D=F[0],R=F[1],P=p._length;T.length>P&&T.splice(P,T.length-P),R.length>P&&R.splice(P,R.length-P);var z=[],I=[],L=[],B=typeof E.size=="string",O=typeof D.size=="string",G=[],W=[],X=B?G:E,Z=O?W:D,J=0,N=[],H=[],$=p.histnorm,U=p.histfunc,V=$.indexOf("density")!==-1,j=U==="max"||U==="min",q=j?null:0,Y=a.count,K=o[$],te=!1,ne=[],se=[],le="z"in p?p.z:"marker"in p&&Array.isArray(p.marker.color)?p.marker.color:"";le&&U!=="count"&&(te=U==="avg",Y=a[U]);var ce=E.size,pe=v(E.start),xe=v(E.end)+(pe-i.tickIncrement(pe,ce,!1,y))/1e6;for(C=pe;C<xe;C=i.tickIncrement(C,ce,!1,y))I.push(q),G.push(C),te&&L.push(0);G.push(C);var ye=I.length,fe=(C-pe)/ye,ae=S(pe+fe/2),ee=D.size,ie=x(D.start),Q=x(D.end)+(ie-i.tickIncrement(ie,ee,!1,_))/1e6;for(C=ie;C<Q;C=i.tickIncrement(C,ee,!1,_)){z.push(I.slice()),W.push(C);var ue=new Array(ye);for(w=0;w<ye;w++)ue[w]=[];H.push(ue),te&&N.push(L.slice())}W.push(C);var ge=z.length,Me=(C-ie)/ge,Te=M(ie+Me/2);V&&(ne=u(I.length,X,fe,B),se=u(z.length,Z,Me,O)),!B&&g.type==="date"&&(X=c(v,X)),!O&&m.type==="date"&&(Z=c(x,Z));var je=!0,Ve=!0,Ze=new Array(ye),Ke=new Array(ge),vt=1/0,xt=1/0,Pt=1/0,mt=1/0;for(C=0;C<P;C++){var Mt=T[C],lt=R[C];k=t.findBin(Mt,X),A=t.findBin(lt,Z),k>=0&&k<ye&&A>=0&&A<ge&&(J+=Y(k,C,z[A],le,N[A]),H[A][k].push(C),je&&(Ze[k]===void 0?Ze[k]=Mt:Ze[k]!==Mt&&(je=!1)),Ve&&(Ke[A]===void 0?Ke[A]=lt:Ke[A]!==lt&&(Ve=!1)),vt=Math.min(vt,Mt-G[k]),xt=Math.min(xt,G[k+1]-Mt),Pt=Math.min(Pt,lt-W[A]),mt=Math.min(mt,W[A+1]-lt))}if(te)for(A=0;A<ge;A++)J+=s(z[A],N[A]);if(K)for(A=0;A<ge;A++)K(z[A],J,ne,se[A]);return{x:T,xRanges:f(G,je&&Ze,vt,xt,g,y),x0:ae,dx:fe,y:R,yRanges:f(W,Ve&&Ke,Pt,mt,m,_),y0:Te,dy:Me,z,pts:H}};function u(h,d,p,g){var m=new Array(h),y;if(g)for(y=0;y<h;y++)m[y]=1/(d[y+1]-d[y]);else{var _=1/p;for(y=0;y<h;y++)m[y]=_}return m}function c(h,d){return{start:h(d.start),end:h(d.end),size:d.size}}function f(h,d,p,g,m,y){var _,v=h.length-1,x=new Array(v),S=l(p,g,h,m,y);for(_=0;_<v;_++){var M=(d||[])[_];x[_]=M===void 0?[S(h[_]),S(h[_+1],!0)]:[M,M]}return x}}}),e3=de({"src/traces/heatmap/convert_column_xyz.js"(e,r){"use strict";var t=Qt(),i=cn().BADNUM,a=xd();r.exports=function(s,l,n,u,c,f){var h=s._length,d=l.makeCalcdata(s,u),p=n.makeCalcdata(s,c);d=a(s,l,u,d).vals,p=a(s,n,c,p).vals;var g=s.text,m=g!==void 0&&t.isArray1D(g),y=s.hovertext,_=y!==void 0&&t.isArray1D(y),v,x,S=t.distinctVals(d),M=S.vals,C=t.distinctVals(p),w=C.vals,k=[],A,b,E=w.length,T=M.length;for(v=0;v<f.length;v++)k[v]=t.init2dArray(E,T);m&&(A=t.init2dArray(E,T)),_&&(b=t.init2dArray(E,T));var F=t.init2dArray(E,T);for(v=0;v<h;v++)if(d[v]!==i&&p[v]!==i){var D=t.findBin(d[v]+S.minDiff/2,M),R=t.findBin(p[v]+C.minDiff/2,w);for(x=0;x<f.length;x++){var P=f[x],z=s[P],I=k[x];I[R][D]=z[v],F[R][D]=v}m&&(A[R][D]=g[v]),_&&(b[R][D]=y[v])}for(s["_"+u]=M,s["_"+c]=w,x=0;x<f.length;x++)s["_"+f[x]]=k[x];m&&(s._text=A),_&&(s._hovertext=b),l&&l.type==="category"&&(s["_"+u+"CategoryMap"]=M.map(function(L){return l._categories[L]})),n&&n.type==="category"&&(s["_"+c+"CategoryMap"]=w.map(function(L){return n._categories[L]})),s._after2before=F}}}),t3=de({"src/traces/heatmap/clean_2d_array.js"(e,r){"use strict";var t=da(),i=Qt(),a=cn().BADNUM;r.exports=function(s,l,n,u){var c,f,h,d,p,g;function m(M){if(t(M))return+M}if(l&&l.transpose){for(c=0,p=0;p<s.length;p++)c=Math.max(c,s[p].length);if(c===0)return!1;h=function(M){return M.length},d=function(M,C,w){return(M[w]||[])[C]}}else c=s.length,h=function(M,C){return M[C].length},d=function(M,C,w){return(M[C]||[])[w]};var y=function(M,C,w){return C===a||w===a?a:d(M,C,w)};function _(M){if(l&&l.type!=="carpet"&&l.type!=="contourcarpet"&&M&&M.type==="category"&&l["_"+M._id.charAt(0)].length){var C=M._id.charAt(0),w={},k=l["_"+C+"CategoryMap"]||l[C];for(p=0;p<k.length;p++)w[k[p]]=p;return function(A){var b=w[M._categories[A]];return b+1?b:a}}else return i.identity}var v=_(n),x=_(u);u&&u.type==="category"&&(c=u._categories.length);var S=new Array(c);for(p=0;p<c;p++)for(n&&n.type==="category"?f=n._categories.length:f=h(s,p),S[p]=new Array(f),g=0;g<f;g++)S[p][g]=m(y(s,x(p),v(g)));return S}}}),r3=de({"src/traces/heatmap/interp2d.js"(e,r){"use strict";var t=Qt(),i=.01,a=[[-1,0],[1,0],[0,-1],[0,1]];function o(l){return .5-.25*Math.min(1,l*.5)}r.exports=function(n,u){var c=1,f;for(s(n,u),f=0;f<u.length&&!(u[f][2]<4);f++);for(u=u.slice(f),f=0;f<100&&c>i;f++)c=s(n,u,o(c));return c>i&&t.log("interp2d didn't converge quickly",c),n};function s(l,n,u){var c=0,f,h,d,p,g,m,y,_,v,x,S,M,C;for(p=0;p<n.length;p++){for(f=n[p],h=f[0],d=f[1],S=l[h][d],x=0,v=0,g=0;g<4;g++)m=a[g],y=l[h+m[0]],y&&(_=y[d+m[1]],_!==void 0&&(x===0?M=C=_:(M=Math.min(M,_),C=Math.max(C,_)),v++,x+=_));if(v===0)throw"iterateInterp2d order is wrong: no defined neighbors";l[h][d]=x/v,S===void 0?v<4&&(c=1):(l[h][d]=(1+u)*l[h][d]-u*S,C>M&&(c=Math.max(c,Math.abs(l[h][d]-S)/(C-M))))}return c}}}),i3=de({"src/traces/heatmap/find_empties.js"(e,r){"use strict";var t=Qt().maxRowLength;r.exports=function(a){var o=[],s={},l=[],n=a[0],u=[],c=[0,0,0],f=t(a),h,d,p,g,m,y,_,v;for(d=0;d<a.length;d++)for(h=u,u=n,n=a[d+1]||[],p=0;p<f;p++)u[p]===void 0&&(y=(u[p-1]!==void 0?1:0)+(u[p+1]!==void 0?1:0)+(h[p]!==void 0?1:0)+(n[p]!==void 0?1:0),y?(d===0&&y++,p===0&&y++,d===a.length-1&&y++,p===u.length-1&&y++,y<4&&(s[[d,p]]=[d,p,y]),o.push([d,p,y])):l.push([d,p]));for(;l.length;){for(_={},v=!1,m=l.length-1;m>=0;m--)g=l[m],d=g[0],p=g[1],y=((s[[d-1,p]]||c)[2]+(s[[d+1,p]]||c)[2]+(s[[d,p-1]]||c)[2]+(s[[d,p+1]]||c)[2])/20,y&&(_[g]=[d,p,y],l.splice(m,1),v=!0);if(!v)throw"findEmpties iterated with no new neighbors";for(g in _)s[g]=_[g],o.push(_[g])}return o.sort(function(x,S){return S[2]-x[2]})}}}),Ck=de({"src/traces/heatmap/make_bound_array.js"(e,r){"use strict";var t=Ma(),i=Qt().isArrayOrTypedArray;r.exports=function(o,s,l,n,u,c){var f=[],h=t.traceIs(o,"contour"),d=t.traceIs(o,"histogram"),p,g,m,y=i(s)&&s.length>1;if(y&&!d&&c.type!=="category"){var _=s.length;if(_<=u){if(h)f=Array.from(s).slice(0,u);else if(u===1)c.type==="log"?f=[.5*s[0],2*s[0]]:f=[s[0]-.5,s[0]+.5];else if(c.type==="log"){for(f=[Math.pow(s[0],1.5)/Math.pow(s[1],.5)],m=1;m<_;m++)f.push(Math.sqrt(s[m-1]*s[m]));f.push(Math.pow(s[_-1],1.5)/Math.pow(s[_-2],.5))}else{for(f=[1.5*s[0]-.5*s[1]],m=1;m<_;m++)f.push((s[m-1]+s[m])*.5);f.push(1.5*s[_-1]-.5*s[_-2])}if(_<u){var v=f[f.length-1],x;if(c.type==="log")for(x=v/f[f.length-2],m=_;m<u;m++)v*=x,f.push(v);else for(x=v-f[f.length-2],m=_;m<u;m++)v+=x,f.push(v)}}else return h?s.slice(0,u):s.slice(0,u+1)}else{var S=o[c._id.charAt(0)+"calendar"];if(d)p=c.r2c(l,0,S);else if(i(s)&&s.length===1)p=s[0];else if(l===void 0)p=0;else{var M=c.type==="log"?c.d2c:c.r2c;p=M(l,0,S)}for(g=n||1,m=h?0:-.5;m<u;m++)f.push(p+g*m)}return f}}}),a3=de({"src/traces/heatmap/calc.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=nn(),o=xd(),s=cG(),l=hc(),n=e3(),u=t3(),c=r3(),f=i3(),h=Ck(),d=cn().BADNUM;r.exports=function(y,_){var v=a.getFromId(y,_.xaxis||"x"),x=a.getFromId(y,_.yaxis||"y"),S=t.traceIs(_,"contour"),M=t.traceIs(_,"histogram"),C=S?"best":_.zsmooth,w,k,A,b,E,T,F,D,R,P,z;if(v._minDtick=0,x._minDtick=0,M)z=s(y,_),b=z.orig_x,w=z.x,k=z.x0,A=z.dx,D=z.orig_y,E=z.y,T=z.y0,F=z.dy,R=z.z;else{var I=_.z;i.isArray1D(I)?(n(_,v,x,"x","y",["z"]),w=_._x,E=_._y,I=_._z):(b=_.x?v.makeCalcdata(_,"x"):[],D=_.y?x.makeCalcdata(_,"y"):[],w=o(_,v,"x",b).vals,E=o(_,x,"y",D).vals,_._x=w,_._y=E),k=_.x0,A=_.dx,T=_.y0,F=_.dy,R=u(I,_,v,x)}(v.rangebreaks||x.rangebreaks)&&(R=g(w,E,R),M||(w=p(w),E=p(E),_._x=w,_._y=E)),!M&&(S||_.connectgaps)&&(_._emptypoints=f(R),c(R,_._emptypoints));function L(H){C=_._input.zsmooth=_.zsmooth=!1,i.warn('cannot use zsmooth: "fast": '+H)}function B(H){if(H.length>1){var $=(H[H.length-1]-H[0])/(H.length-1),U=Math.abs($/100);for(P=0;P<H.length-1;P++)if(Math.abs(H[P+1]-H[P]-$)>U)return!1}return!0}_._islinear=!1,v.type==="log"||x.type==="log"?C==="fast"&&L("log axis found"):B(w)?B(E)?_._islinear=!0:C==="fast"&&L("y scale is not linear"):C==="fast"&&L("x scale is not linear");var O=i.maxRowLength(R),G=_.xtype==="scaled"?"":w,W=h(_,G,k,A,O,v),X=_.ytype==="scaled"?"":E,Z=h(_,X,T,F,R.length,x);_._extremes[v._id]=a.findExtremes(v,W),_._extremes[x._id]=a.findExtremes(x,Z);var J={x:W,y:Z,z:R,text:_._text||_.text,hovertext:_._hovertext||_.hovertext};if(_.xperiodalignment&&b&&(J.orig_x=b),_.yperiodalignment&&D&&(J.orig_y=D),G&&G.length===W.length-1&&(J.xCenter=G),X&&X.length===Z.length-1&&(J.yCenter=X),M&&(J.xRanges=z.xRanges,J.yRanges=z.yRanges,J.pts=z.pts),S||l(y,_,{vals:R,cLetter:"z"}),S&&_.contours&&_.contours.coloring==="heatmap"){var N={type:_.type==="contour"?"heatmap":"histogram2d",xcalendar:_.xcalendar,ycalendar:_.ycalendar};J.xfill=h(N,G,k,A,O,v),J.yfill=h(N,X,T,F,R.length,x)}return[J]};function p(m){for(var y=[],_=m.length,v=0;v<_;v++){var x=m[v];x!==d&&y.push(x)}return y}function g(m,y,_){for(var v=[],x=-1,S=0;S<_.length;S++)if(y[S]!==d){x++,v[x]=[];for(var M=0;M<_[S].length;M++)m[M]!==d&&v[x].push(_[S][M])}return v}}}),n3=de({"src/constants/pixelated_image.js"(e){"use strict";e.CSS_DECLARATIONS=[["image-rendering","optimizeSpeed"],["image-rendering","-moz-crisp-edges"],["image-rendering","-o-crisp-edges"],["image-rendering","-webkit-optimize-contrast"],["image-rendering","optimize-contrast"],["image-rendering","crisp-edges"],["image-rendering","pixelated"]],e.STYLE=e.CSS_DECLARATIONS.map(function(r){return r.join(": ")+"; "}).join("")}}),Dk=de({"src/lib/supports_pixelated_image.js"(e,r){"use strict";var t=n3(),i=hn(),a=Qt(),o=null;function s(){if(o!==null)return o;o=!1;var l=a.isSafari()||a.isMacWKWebView()||a.isIOS();if(window.navigator.userAgent&&!l){var n=Array.from(t.CSS_DECLARATIONS).reverse(),u=window.CSS&&window.CSS.supports||window.supportsCSS;if(typeof u=="function")o=n.some(function(d){return u.apply(null,d)});else{var c=i.tester.append("image").attr("style",t.STYLE),f=window.getComputedStyle(c.node()),h=f.imageRendering;o=n.some(function(d){var p=d[1];return h===p||h===p.toLowerCase()}),c.remove()}}return o}r.exports=s}}),o3=de({"src/traces/heatmap/plot.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=hn(),o=nn(),s=Qt(),l=Zo(),n=Bw(),u=ta(),c=ks().extractOpts,f=ks().makeColorScaleFuncFromTrace,h=Oh(),d=Bl(),p=d.LINE_SPACING,g=Dk(),m=n3().STYLE,y="heatmap-label";function _(C){return C.selectAll("g."+y)}function v(C){_(C).remove()}r.exports=function(C,w,k,A){var b=w.xaxis,E=w.yaxis;s.makeTraceGroups(A,k,"hm").each(function(T){var F=t.select(this),D=T[0],R=D.trace,P=R.xgap||0,z=R.ygap||0,I=D.z,L=D.x,B=D.y,O=D.xCenter,G=D.yCenter,W=i.traceIs(R,"contour"),X=W?"best":R.zsmooth,Z=I.length,J=s.maxRowLength(I),N=!1,H=!1,$,U,V,j,q,Y,K,te;for(Y=0;$===void 0&&Y<L.length-1;)$=b.c2p(L[Y]),Y++;for(Y=L.length-1;U===void 0&&Y>0;)U=b.c2p(L[Y]),Y--;for(U<$&&(V=U,U=$,$=V,N=!0),Y=0;j===void 0&&Y<B.length-1;)j=E.c2p(B[Y]),Y++;for(Y=B.length-1;q===void 0&&Y>0;)q=E.c2p(B[Y]),Y--;q<j&&(V=j,j=q,q=V,H=!0),W&&(O=L,G=B,L=D.xfill,B=D.yfill);var ne="default";if(X?ne=X==="best"?"smooth":"fast":R._islinear&&P===0&&z===0&&g()&&(ne="fast"),ne!=="fast"){var se=X==="best"?0:.5;$=Math.max(-se*b._length,$),U=Math.min((1+se)*b._length,U),j=Math.max(-se*E._length,j),q=Math.min((1+se)*E._length,q)}var le=Math.round(U-$),ce=Math.round(q-j),pe=$>=b._length||U<=0||j>=E._length||q<=0;if(pe){var xe=F.selectAll("image").data([]);xe.exit().remove(),v(F);return}var ye,fe;ne==="fast"?(ye=J,fe=Z):(ye=le,fe=ce);var ae=document.createElement("canvas");ae.width=ye,ae.height=fe;var ee=ae.getContext("2d",{willReadFrequently:!0}),ie=f(R,{noNumericCheck:!0,returnArray:!0}),Q,ue;ne==="fast"?(Q=N?function(Zt){return J-1-Zt}:s.identity,ue=H?function(Zt){return Z-1-Zt}:s.identity):(Q=function(Zt){return s.constrain(Math.round(b.c2p(L[Zt])-$),0,le)},ue=function(Zt){return s.constrain(Math.round(E.c2p(B[Zt])-j),0,ce)});var ge=ue(0),Me=[ge,ge],Te=N?0:1,je=H?0:1,Ve=0,Ze=0,Ke=0,vt=0,xt,Pt,mt,Mt,lt;function qe(Zt,qt=0){if(Zt===void 0)return[0,0,0,0];var vr=ie(Zt);return vr[0]=Math.round(vr[0]),vr[1]=Math.round(vr[1]),vr[2]=Math.round(vr[2]),Ve+=qt,Ze+=vr[0]*qt,Ke+=vr[1]*qt,vt+=vr[2]*qt,vr}function Ye(Zt,qt,vr,Br){var Pr=Zt[vr.bin0];if(Pr===void 0)return qe(void 0,1);var Mi=Zt[vr.bin1],gi=qt[vr.bin0],ba=qt[vr.bin1],Hi=Mi-Pr||0,Za=gi-Pr||0,oa;return Mi===void 0?ba===void 0?oa=0:gi===void 0?oa=2*(ba-Pr):oa=(2*ba-gi-Pr)*2/3:ba===void 0?gi===void 0?oa=0:oa=(2*Pr-Mi-gi)*2/3:gi===void 0?oa=(2*ba-Mi-Pr)*2/3:oa=ba+Pr-Mi-gi,qe(Pr+vr.frac*Hi+Br.frac*(Za+vr.frac*oa))}if(ne!=="default"){var me=0,_e;try{_e=new Uint8Array(ye*fe*4)}catch{_e=new Array(ye*fe*4)}if(ne==="smooth"){var Ae=O||L,ke=G||B,Ee=new Array(Ae.length),De=new Array(ke.length),Je=new Array(le),Ue=O?S:x,at=G?S:x,rt,ft,At;for(Y=0;Y<Ae.length;Y++)Ee[Y]=Math.round(b.c2p(Ae[Y])-$);for(Y=0;Y<ke.length;Y++)De[Y]=Math.round(E.c2p(ke[Y])-j);for(Y=0;Y<le;Y++)Je[Y]=Ue(Y,Ee);for(K=0;K<ce;K++)for(rt=at(K,De),ft=I[rt.bin0],At=I[rt.bin1],Y=0;Y<le;Y++,me+=4)lt=Ye(ft,At,Je[Y],rt),M(_e,me,lt)}else for(K=0;K<Z;K++)for(Mt=I[K],Me=ue(K),Y=0;Y<J;Y++)lt=qe(Mt[Y],1),me=(Me*J+Q(Y))*4,M(_e,me,lt);var ht=ee.createImageData(ye,fe);try{ht.data.set(_e)}catch{var Gt=ht.data,fr=Gt.length;for(K=0;K<fr;K++)Gt[K]=_e[K]}ee.putImageData(ht,0,0)}else{var gt=Math.floor(P/2),yt=Math.floor(z/2);for(K=0;K<Z;K++)if(Mt=I[K],Me.reverse(),Me[je]=ue(K+1),!(Me[0]===Me[1]||Me[0]===void 0||Me[1]===void 0))for(Pt=Q(0),xt=[Pt,Pt],Y=0;Y<J;Y++)xt.reverse(),xt[Te]=Q(Y+1),!(xt[0]===xt[1]||xt[0]===void 0||xt[1]===void 0)&&(mt=Mt[Y],lt=qe(mt,(xt[1]-xt[0])*(Me[1]-Me[0])),ee.fillStyle="rgba("+lt.join(",")+")",ee.fillRect(xt[0]+gt,Me[0]+yt,xt[1]-xt[0]-P,Me[1]-Me[0]-z))}if(Ve){Ze=Math.round(Ze/Ve),Ke=Math.round(Ke/Ve),vt=Math.round(vt/Ve);let Zt=`rgb(${Ze}, ${Ke}, ${vt})`;C._hmpixcount=(C._hmpixcount||0)+Ve,C._hmlumcount=(C._hmlumcount||0)+Ve*u.luminosity(Zt)}var kt=F.selectAll("image").data(T);kt.enter().append("svg:image").attr({xmlns:h.svg,preserveAspectRatio:"none"}),kt.attr({height:ce,width:le,x:$,y:j,"xlink:href":ae.toDataURL("image/png")}),ne==="fast"&&!X&&kt.attr("style",m),v(F);var Lt=R.texttemplate;if(Lt){var Ct=c(R),$t={type:"linear",range:[Ct.min,Ct.max],_separators:b._separators,_numFormat:b._numFormat},mr=R.type==="histogram2dcontour",br=R.type==="contour",Er=br?1:0,Tr=br?Z-1:Z,Ur=br?1:0,Ai=br?J-1:J,oi=[];for(Y=Er;Y<Tr;Y++){var Qr;if(br)Qr=D.y[Y];else if(mr){if(Y===0||Y===Z-1)continue;Qr=D.y[Y]}else if(D.yCenter)Qr=D.yCenter[Y];else{if(Y+1===Z&&D.y[Y+1]===void 0)continue;Qr=(D.y[Y]+D.y[Y+1])/2}var ea=Math.round(E.c2p(Qr));if(!(0>ea||ea>E._length))for(K=Ur;K<Ai;K++){var $i;if(br)$i=D.x[K];else if(mr){if(K===0||K===J-1)continue;$i=D.x[K]}else if(D.xCenter)$i=D.xCenter[K];else{if(K+1===J&&D.x[K+1]===void 0)continue;$i=(D.x[K]+D.x[K+1])/2}var ja=Math.round(b.c2p($i));if(!(0>ja||ja>b._length)){var ya=n({x:$i,y:Qr},R,C._fullLayout);ya.x=$i,ya.y=Qr;var pa=D.z[Y][K];pa===void 0?(ya.z="",ya.zLabel=""):(ya.z=pa,ya.zLabel=o.tickText($t,pa,"hover").text);var xi=D.text&&D.text[Y]&&D.text[Y][K];(xi===void 0||xi===!1)&&(xi=""),ya.text=xi;var bi=s.texttemplateString({data:[ya,R._meta],fallback:R.texttemplatefallback,labels:ya,locale:C._fullLayout._d3locale,template:Lt});if(bi){var Ua=bi.split("<br>"),dn=Ua.length,pi=0;for(te=0;te<dn;te++)pi=Math.max(pi,Ua[te].length);oi.push({l:dn,c:pi,t:bi,x:ja,y:ea,z:pa})}}}}var Jr=R.textfont,Be=Jr.size,Fe=C._fullLayout.font.size;if(!Be||Be==="auto"){var Et=1/0,St=1/0,zt=0,Wt=0;for(te=0;te<oi.length;te++){var Yt=oi[te];if(zt=Math.max(zt,Yt.l),Wt=Math.max(Wt,Yt.c),te<oi.length-1){var ze=oi[te+1],tt=Math.abs(ze.x-Yt.x),ct=Math.abs(ze.y-Yt.y);tt&&(Et=Math.min(Et,tt)),ct&&(St=Math.min(St,ct))}}!isFinite(Et)||!isFinite(St)?Be=Fe:(Et-=P,St-=z,Et/=Wt,St/=zt,Et/=p/2,St/=p,Be=Math.min(Math.floor(Et),Math.floor(St),Fe))}if(Be<=0||!isFinite(Be))return;var wt=function(Zt){return Zt.x},Nt=function(Zt){return Zt.y-Be*(Zt.l*p/2-1)},It=_(F).data(oi);It.enter().append("g").classed(y,1).append("text").attr("text-anchor","middle").each(function(Zt){var qt=t.select(this),vr=Jr.color;(!vr||vr==="auto")&&(vr=u.contrast(Zt.z===void 0?C._fullLayout.plot_bgcolor:`rgba(${ie(Zt.z).map(Math.round).join()})`)),qt.attr("data-notex",1).call(l.positionText,wt(Zt),Nt(Zt)).call(a.font,{family:Jr.family,size:Be,color:vr,weight:Jr.weight,style:Jr.style,variant:Jr.variant,textcase:Jr.textcase,lineposition:Jr.lineposition,shadow:Jr.shadow}).text(Zt.t).call(l.convertToTspans,C)})}})};function x(C,w){var k=w.length-2,A=s.constrain(s.findBin(C,w),0,k),b=w[A],E=w[A+1],T=s.constrain(A+(C-b)/(E-b)-.5,0,k),F=Math.round(T),D=Math.abs(T-F);return!T||T===k||!D?{bin0:F,bin1:F,frac:0}:{bin0:F,frac:D,bin1:Math.round(F+D/(T-F))}}function S(C,w){var k=w.length-1,A=s.constrain(s.findBin(C,w),0,k),b=w[A],E=w[A+1],T=(C-b)/(E-b)||0;return T<=0?{bin0:A,bin1:A,frac:0}:T<.5?{bin0:A,bin1:A+1,frac:T}:{bin0:A+1,bin1:A,frac:1-T}}function M(C,w,k){C[w]=k[0],C[w+1]=k[1],C[w+2]=k[2],C[w+3]=Math.round(k[3]*255)}}}),b1=de({"src/traces/heatmap/colorbar.js"(e,r){"use strict";r.exports={min:"zmin",max:"zmax"}}}),s3=de({"src/traces/heatmap/style.js"(e,r){"use strict";var t=Yr();r.exports=function(a){t.select(a).selectAll(".hm image").style("opacity",function(o){return o.trace.opacity})}}}),l3=de({"src/traces/heatmap/hover.js"(e,r){"use strict";var t=$s(),i=Qt(),a=i.isArrayOrTypedArray,o=nn(),s=ks().extractOpts;r.exports=function(n,u,c,f,h){h||(h={});var d=h.isContour,p=n.cd[0],g=p.trace,m=n.xa,y=n.ya,_=p.x,v=p.y,x=p.z,S=p.xCenter,M=p.yCenter,C=p.zmask,w=g.zhoverformat,k=_,A=v,b,E,T,F;if(n.index!==!1){try{T=Math.round(n.index[1]),F=Math.round(n.index[0])}catch{i.error("Error hovering on heatmap, pointNumber must be [row,col], found:",n.index);return}if(T<0||T>=x[0].length||F<0||F>x.length)return}else{if(t.inbox(u-_[0],u-_[_.length-1],0)>0||t.inbox(c-v[0],c-v[v.length-1],0)>0)return;if(d){var D;for(k=[2*_[0]-_[1]],D=1;D<_.length;D++)k.push((_[D]+_[D-1])/2);for(k.push([2*_[_.length-1]-_[_.length-2]]),A=[2*v[0]-v[1]],D=1;D<v.length;D++)A.push((v[D]+v[D-1])/2);A.push([2*v[v.length-1]-v[v.length-2]])}T=Math.max(0,Math.min(k.length-2,i.findBin(u,k))),F=Math.max(0,Math.min(A.length-2,i.findBin(c,A)))}var R=m.c2p(_[T]),P=m.c2p(_[T+1]),z=y.c2p(v[F]),I=y.c2p(v[F+1]),L,B;d?(L=p.orig_x||_,B=p.orig_y||v,P=R,b=L[T],I=z,E=B[F]):(L=p.orig_x||S||_,B=p.orig_y||M||v,b=S?L[T]:(L[T]+L[T+1])/2,E=M?B[F]:(B[F]+B[F+1])/2,m&&m.type==="category"&&(b=_[T]),y&&y.type==="category"&&(E=v[F]),g.zsmooth&&(R=P=m.c2p(b),z=I=y.c2p(E)));var O=x[F][T];if(C&&!C[F][T]&&(O=void 0),!(O===void 0&&!g.hoverongaps)){var G;a(p.hovertext)&&a(p.hovertext[F])?G=p.hovertext[F][T]:a(p.text)&&a(p.text[F])&&(G=p.text[F][T]);var W=s(g),X={type:"linear",range:[W.min,W.max],hoverformat:w,_separators:m._separators,_numFormat:m._numFormat},Z=o.tickText(X,O,"hover").text;return[i.extendFlat(n,{index:g._after2before?g._after2before[F][T]:[F,T],distance:n.maxHoverDistance,spikeDistance:n.maxSpikeDistance,x0:R,x1:P,y0:z,y1:I,xLabelVal:b,yLabelVal:E,zLabelVal:O,zLabel:Z,text:G})]}}}}),fG=de({"src/traces/heatmap/index.js"(e,r){"use strict";r.exports={attributes:x1(),supplyDefaults:uG(),calc:a3(),plot:o3(),colorbar:b1(),style:s3(),hoverPoints:l3(),moduleType:"trace",name:"heatmap",basePlotModule:ml(),categories:["cartesian","svg","2dMap","showLegend"],meta:{}}}}),hG=de({"lib/heatmap.js"(e,r){"use strict";r.exports=fG()}}),Lk=de({"src/traces/histogram/bin_attributes.js"(e,r){"use strict";r.exports=function(i,a){return{start:{valType:"any",editType:"calc"},end:{valType:"any",editType:"calc"},size:{valType:"any",editType:"calc"},editType:"calc"}}}}),dG=de({"src/traces/histogram/constants.js"(e,r){"use strict";r.exports={eventDataKeys:["binNumber"]}}}),u3=de({"src/traces/histogram/attributes.js"(e,r){"use strict";var t=ep(),i=Ns().axisHoverFormat,{hovertemplateAttrs:a,texttemplateAttrs:o,templatefallbackAttrs:s}=Vo(),l=us(),n=Lk(),u=dG(),c=fn().extendFlat;r.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},xhoverformat:i("x"),yhoverformat:i("y"),text:c({},t.text,{}),hovertext:c({},t.hovertext,{}),orientation:t.orientation,histfunc:{valType:"enumerated",values:["count","sum","avg","min","max"],dflt:"count",editType:"calc"},histnorm:{valType:"enumerated",values:["","percent","probability","density","probability density"],dflt:"",editType:"calc"},cumulative:{enabled:{valType:"boolean",dflt:!1,editType:"calc"},direction:{valType:"enumerated",values:["increasing","decreasing"],dflt:"increasing",editType:"calc"},currentbin:{valType:"enumerated",values:["include","exclude","half"],dflt:"include",editType:"calc"},editType:"calc"},nbinsx:{valType:"integer",min:0,dflt:0,editType:"calc"},xbins:n("x",!0),nbinsy:{valType:"integer",min:0,dflt:0,editType:"calc"},ybins:n("y",!0),autobinx:{valType:"boolean",dflt:null,editType:"calc"},autobiny:{valType:"boolean",dflt:null,editType:"calc"},bingroup:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({},{keys:u.eventDataKeys}),hovertemplatefallback:s(),texttemplate:o({arrayOk:!1,editType:"plot"},{keys:["label","value"]}),texttemplatefallback:s({editType:"plot"}),textposition:c({},t.textposition,{arrayOk:!1}),textfont:l({arrayOk:!1,editType:"plot",colorEditType:"style"}),outsidetextfont:l({arrayOk:!1,editType:"plot",colorEditType:"style"}),insidetextfont:l({arrayOk:!1,editType:"plot",colorEditType:"style"}),insidetextanchor:t.insidetextanchor,textangle:t.textangle,cliponaxis:t.cliponaxis,constraintext:t.constraintext,marker:t.marker,offsetgroup:t.offsetgroup,alignmentgroup:t.alignmentgroup,selected:t.selected,unselected:t.unselected,zorder:t.zorder}}}),pG=de({"src/traces/histogram/defaults.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=ta(),o=oh().handleText,s=Ww(),l=u3();r.exports=function(u,c,f,h){function d(A,b){return i.coerce(u,c,l,A,b)}var p=d("x"),g=d("y"),m=d("cumulative.enabled");m&&(d("cumulative.direction"),d("cumulative.currentbin")),d("text");var y=d("textposition");o(u,c,h,d,y,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),d("hovertext"),d("hovertemplate"),d("hovertemplatefallback"),d("xhoverformat"),d("yhoverformat");var _=d("orientation",g&&!p?"h":"v"),v=_==="v"?"x":"y",x=_==="v"?"y":"x",S=p&&g?Math.min(i.minRowLength(p)&&i.minRowLength(g)):i.minRowLength(c[v]||[]);if(!S){c.visible=!1;return}c._length=S;var M=t.getComponentMethod("calendars","handleTraceDefaults");M(u,c,["x","y"],h);var C=c[x];C&&d("histfunc"),d("histnorm"),d("autobin"+v),s(u,c,d,f,h),i.coerceSelectionMarkerOpacity(c,d);var w=(c.marker.line||{}).color,k=t.getComponentMethod("errorbars","supplyDefaults");k(u,c,w||a.defaultLine,{axis:"y"}),k(u,c,w||a.defaultLine,{axis:"x",inherit:"y"}),d("zorder")}}}),c3=de({"src/traces/histogram/cross_trace_defaults.js"(e,r){"use strict";var t=Qt(),i=Hs(),a=Ma().traceIs,o=Tv(),s=oh().validateCornerradius,l=t.nestedProperty,n=bv().getAxisGroup,u=[{aStr:{x:"xbins.start",y:"ybins.start"},name:"start"},{aStr:{x:"xbins.end",y:"ybins.end"},name:"end"},{aStr:{x:"xbins.size",y:"ybins.size"},name:"size"},{aStr:{x:"nbinsx",y:"nbinsy"},name:"nbins"}],c=["x","y"];r.exports=function(h,d){var p=d._histogramBinOpts={},g=[],m={},y=[],_,v,x,S,M,C,w;function k(Z,J){return t.coerce(_._input,_,_._module.attributes,Z,J)}function A(Z){return Z.orientation==="v"?"x":"y"}function b(Z,J){var N=i.getFromTrace({_fullLayout:d},Z,J);return N.type}function E(Z,J,N){var H=Z.uid+"__"+N;J||(J=H);var $=b(Z,N),U=Z[N+"calendar"]||"",V=p[J],j=!0;V&&($===V.axType&&U===V.calendar?(j=!1,V.traces.push(Z),V.dirs.push(N)):(J=H,$!==V.axType&&t.warn(["Attempted to group the bins of trace",Z.index,"set on a","type:"+$,"axis","with bins on","type:"+V.axType,"axis."].join(" ")),U!==V.calendar&&t.warn(["Attempted to group the bins of trace",Z.index,"set with a",U,"calendar","with bins",V.calendar?"on a "+V.calendar+" calendar":"w/o a set calendar"].join(" ")))),j&&(p[J]={traces:[Z],dirs:[N],axType:$,calendar:Z[N+"calendar"]||""}),Z["_"+N+"bingroup"]=J}for(M=0;M<h.length;M++)if(_=h[M],a(_,"histogram")){if(g.push(_),delete _._xautoBinFinished,delete _._yautoBinFinished,_.type==="histogram"){var T=k("marker.cornerradius",d.barcornerradius);_.marker&&(_.marker.cornerradius=s(T))}a(_,"2dMap")||o(_._input,_,d,k,d.barmode)}var F=d._alignmentOpts||{};for(M=0;M<g.length;M++){if(_=g[M],x="",!a(_,"2dMap")){if(S=A(_),d.barmode==="group"&&_.alignmentgroup){var D=_[S+"axis"],R=n(d,D)+_.orientation;(F[R]||{})[_.alignmentgroup]&&(x=R)}!x&&d.barmode!=="overlay"&&(x=n(d,_.xaxis)+n(d,_.yaxis)+A(_))}x?(m[x]||(m[x]=[]),m[x].push(_)):y.push(_)}for(x in m){if(v=m[x],v.length===1){y.push(v[0]);continue}var P=!1;for(v.length&&(_=v[0],P=k("bingroup")),x=P||x,M=0;M<v.length;M++){_=v[M];var z=_._input.bingroup;z&&z!==x&&t.warn(["Trace",_.index,"must match","within bingroup",x+".","Ignoring its bingroup:",z,"setting."].join(" ")),_.bingroup=x,E(_,x,A(_))}}for(M=0;M<y.length;M++){_=y[M];var I=k("bingroup");if(a(_,"2dMap"))for(w=0;w<2;w++){S=c[w];var L=k(S+"bingroup",I?I+"__"+S:null);E(_,L,S)}else E(_,I,A(_))}for(x in p){var B=p[x];for(v=B.traces,C=0;C<u.length;C++){var O=u[C],G=O.name,W,X;if(!(G==="nbins"&&B.sizeFound)){for(M=0;M<v.length;M++){if(_=v[M],S=B.dirs[M],W=O.aStr[S],l(_._input,W).get()!==void 0){B[G]=k(W),B[G+"Found"]=!0;break}X=(_._autoBin||{})[S]||{},X[G]&&l(_,W).set(X[G])}if(G==="start"||G==="end")for(;M<v.length;M++)_=v[M],_["_"+S+"bingroup"]&&(X=(_._autoBin||{})[S]||{},k(W,X[G]));G==="nbins"&&!B.sizeFound&&!B.nbinsFound&&(_=v[0],B[G]=k(W))}}}}}}),vG=de({"src/traces/histogram/hover.js"(e,r){"use strict";var t=y1().hoverPoints,i=nn().hoverLabelText;r.exports=function(o,s,l,n,u){var c=t(o,s,l,n,u);if(c){o=c[0];var f=o.cd[o.index],h=o.cd[0].trace;if(!h.cumulative.enabled){var d=h.orientation==="h"?"y":"x";o[d+"Label"]=i(o[d+"a"],[f.ph0,f.ph1],h[d+"hoverformat"])}return c}}}}),Fk=de({"src/traces/histogram/event_data.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){if(i.x="xVal"in a?a.xVal:a.x,i.y="yVal"in a?a.yVal:a.y,"zLabelVal"in a&&(i.z=a.zLabelVal),a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),!(o.cumulative||{}).enabled){var n=Array.isArray(l)?s[0].pts[l[0]][l[1]]:s[l].pts;i.pointNumbers=n,i.binNumber=i.pointNumber,delete i.pointNumber,delete i.pointIndex,i.pointIndices=n}return i}}}),mG=de({"src/traces/histogram/index.js"(e,r){"use strict";r.exports={attributes:u3(),layoutAttributes:$w(),supplyDefaults:pG(),crossTraceDefaults:c3(),supplyLayoutDefaults:_k(),calc:kk().calc,crossTraceCalc:Av().crossTraceCalc,plot:Sv().plot,layerName:"barlayer",style:qh().style,styleOnSelect:qh().styleOnSelect,colorbar:Yu(),hoverPoints:vG(),selectPoints:_1(),eventData:Fk(),moduleType:"trace",name:"histogram",basePlotModule:ml(),categories:["bar-like","cartesian","svg","bar","histogram","oriented","errorBarsOK","showLegend"],meta:{}}}}),gG=de({"lib/histogram.js"(e,r){"use strict";r.exports=mG()}}),f3=de({"src/traces/histogram2d/attributes.js"(e,r){"use strict";var t=u3(),i=Lk(),a=x1(),o=ri(),s=Ns().axisHoverFormat,{hovertemplateAttrs:l,texttemplateAttrs:n,templatefallbackAttrs:u}=Vo(),c=cs(),f=fn().extendFlat;r.exports=f({x:t.x,y:t.y,z:{valType:"data_array",editType:"calc"},marker:{color:{valType:"data_array",editType:"calc"},editType:"calc"},histnorm:t.histnorm,histfunc:t.histfunc,nbinsx:t.nbinsx,xbins:i("x"),nbinsy:t.nbinsy,ybins:i("y"),autobinx:t.autobinx,autobiny:t.autobiny,bingroup:f({},t.bingroup,{}),xbingroup:f({},t.bingroup,{}),ybingroup:f({},t.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,xhoverformat:s("x"),yhoverformat:s("y"),zhoverformat:s("z",1),hovertemplate:l({},{keys:["z"]}),hovertemplatefallback:u(),texttemplate:n({arrayOk:!1,editType:"plot"},{keys:["z"]}),texttemplatefallback:u({editType:"plot"}),textfont:a.textfont,showlegend:f({},o.showlegend,{dflt:!1})},c("",{cLetter:"z",autoColorDflt:!1}))}}),Pk=de({"src/traces/histogram2d/sample_defaults.js"(e,r){"use strict";var t=Ma(),i=Qt();r.exports=function(o,s,l,n){var u=l("x"),c=l("y"),f=i.minRowLength(u),h=i.minRowLength(c);if(!f||!h){s.visible=!1;return}s._length=Math.min(f,h);var d=t.getComponentMethod("calendars","handleTraceDefaults");d(o,s,["x","y"],n);var p=l("z")||l("marker.color");p&&l("histfunc"),l("histnorm"),l("autobinx"),l("autobiny")}}}),yG=de({"src/traces/histogram2d/defaults.js"(e,r){"use strict";var t=Qt(),i=Pk(),a=Tk(),o=hu(),s=qy(),l=f3();r.exports=function(u,c,f,h){function d(p,g){return t.coerce(u,c,l,p,g)}i(u,c,d,h),c.visible!==!1&&(a(u,c,d,h),o(u,c,h,d,{prefix:"",cLetter:"z"}),d("hovertemplate"),d("hovertemplatefallback"),s(d,h),d("xhoverformat"),d("yhoverformat"))}}}),_G=de({"src/traces/histogram2d/hover.js"(e,r){"use strict";var t=l3(),i=nn().hoverLabelText;r.exports=function(o,s,l,n,u){var c=t(o,s,l,n,u);if(c){o=c[0];var f=o.index,h=f[0],d=f[1],p=o.cd[0],g=p.trace,m=p.xRanges[d],y=p.yRanges[h];return o.xLabel=i(o.xa,[m[0],m[1]],g.xhoverformat),o.yLabel=i(o.ya,[y[0],y[1]],g.yhoverformat),c}}}}),xG=de({"src/traces/histogram2d/index.js"(e,r){"use strict";r.exports={attributes:f3(),supplyDefaults:yG(),crossTraceDefaults:c3(),calc:a3(),plot:o3(),layerName:"heatmaplayer",colorbar:b1(),style:s3(),hoverPoints:_G(),eventData:Fk(),moduleType:"trace",name:"histogram2d",basePlotModule:ml(),categories:["cartesian","svg","2dMap","histogram","showLegend"],meta:{}}}}),bG=de({"lib/histogram2d.js"(e,r){"use strict";r.exports=xG()}}),h3=de({"src/constants/filter_ops.js"(e,r){"use strict";r.exports={COMPARISON_OPS:["=","!=","<",">=",">","<="],COMPARISON_OPS2:["=","<",">=",">","<="],INTERVAL_OPS:["[]","()","[)","(]","][",")(","](",")["],SET_OPS:["{}","}{"],CONSTRAINT_REDUCTION:{"=":"=","<":"<","<=":"<",">":">",">=":">","[]":"[]","()":"[]","[)":"[]","(]":"[]","][":"][",")(":"][","](":"][",")[":"]["}}}}),Vy=de({"src/traces/contour/attributes.js"(e,r){"use strict";var t=x1(),i=tl(),a=Ns(),o=a.axisHoverFormat,s=a.descriptionOnlyNumbers,l=cs(),n=fu().dash,u=us(),c=fn().extendFlat,f=h3(),h=f.COMPARISON_OPS2,d=f.INTERVAL_OPS,p=i.line;r.exports=c({z:t.z,x:t.x,x0:t.x0,dx:t.dx,y:t.y,y0:t.y0,dy:t.dy,xperiod:t.xperiod,yperiod:t.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:t.xperiodalignment,yperiodalignment:t.yperiodalignment,text:t.text,hovertext:t.hovertext,transpose:t.transpose,xtype:t.xtype,ytype:t.ytype,xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z",1),hovertemplate:t.hovertemplate,hovertemplatefallback:t.hovertemplatefallback,texttemplate:c({},t.texttemplate,{}),texttemplatefallback:t.texttemplatefallback,textfont:c({},t.textfont,{}),hoverongaps:t.hoverongaps,connectgaps:c({},t.connectgaps,{}),fillcolor:{valType:"color",editType:"calc"},autocontour:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"contours.start":void 0,"contours.end":void 0,"contours.size":void 0}},ncontours:{valType:"integer",dflt:15,min:1,editType:"calc"},contours:{type:{valType:"enumerated",values:["levels","constraint"],dflt:"levels",editType:"calc"},start:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},end:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},size:{valType:"number",dflt:null,min:0,editType:"plot",impliedEdits:{"^autocontour":!1}},coloring:{valType:"enumerated",values:["fill","heatmap","lines","none"],dflt:"fill",editType:"calc"},showlines:{valType:"boolean",dflt:!0,editType:"plot"},showlabels:{valType:"boolean",dflt:!1,editType:"plot"},labelfont:u({editType:"plot",colorEditType:"style"}),labelformat:{valType:"string",dflt:"",editType:"plot",description:s("contour label")},operation:{valType:"enumerated",values:[].concat(h).concat(d),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},editType:"calc",impliedEdits:{autocontour:!1}},line:{color:c({},p.color,{editType:"style+colorbars"}),width:{valType:"number",min:0,editType:"style+colorbars"},dash:n,smoothing:c({},p.smoothing,{}),editType:"plot"},zorder:i.zorder},l("",{cLetter:"z",autoColorDflt:!1,editTypeOverride:"calc"}))}}),Ik=de({"src/traces/histogram2dcontour/attributes.js"(e,r){"use strict";var t=f3(),i=Vy(),a=cs(),o=Ns().axisHoverFormat,s=fn().extendFlat;r.exports=s({x:t.x,y:t.y,z:t.z,marker:t.marker,histnorm:t.histnorm,histfunc:t.histfunc,nbinsx:t.nbinsx,xbins:t.xbins,nbinsy:t.nbinsy,ybins:t.ybins,autobinx:t.autobinx,autobiny:t.autobiny,bingroup:t.bingroup,xbingroup:t.xbingroup,ybingroup:t.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:{color:i.line.color,width:s({},i.line.width,{dflt:.5}),dash:i.line.dash,smoothing:i.line.smoothing,editType:"plot"},xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z",1),hovertemplate:t.hovertemplate,hovertemplatefallback:t.hovertemplatefallback,texttemplate:i.texttemplate,texttemplatefallback:i.texttemplatefallback,textfont:i.textfont},a("",{cLetter:"z",editTypeOverride:"calc"}))}}),d3=de({"src/traces/contour/contours_defaults.js"(e,r){"use strict";r.exports=function(i,a,o,s){var l=s("contours.start"),n=s("contours.end"),u=l===!1||n===!1,c=o("contours.size"),f;u?f=a.autocontour=!0:f=o("autocontour",!1),(f||!c)&&o("ncontours")}}}),Rk=de({"src/traces/contour/label_defaults.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o,s,l){l||(l={});var n=a("contours.showlabels");if(n){var u=o.font;t.coerceFont(a,"contours.labelfont",u,{overrideDflt:{color:s}}),a("contours.labelformat")}l.hasHover!==!1&&a("zhoverformat")}}}),p3=de({"src/traces/contour/style_defaults.js"(e,r){"use strict";var t=hu(),i=Rk();r.exports=function(o,s,l,n,u){var c=l("contours.coloring"),f,h="";c==="fill"&&(f=l("contours.showlines")),f!==!1&&(c!=="lines"&&(h=l("line.color","#000")),l("line.width",.5),l("line.dash")),c!=="none"&&(o.showlegend!==!0&&(s.showlegend=!1),s._dfltShowLegend=!1,t(o,s,n,l,{prefix:"",cLetter:"z"})),l("line.smoothing"),i(l,n,h,u)}}}),wG=de({"src/traces/histogram2dcontour/defaults.js"(e,r){"use strict";var t=Qt(),i=Pk(),a=d3(),o=p3(),s=qy(),l=Ik();r.exports=function(u,c,f,h){function d(g,m){return t.coerce(u,c,l,g,m)}function p(g){return t.coerce2(u,c,l,g)}i(u,c,d,h),c.visible!==!1&&(a(u,c,d,p),o(u,c,d,h),d("xhoverformat"),d("yhoverformat"),d("hovertemplate"),d("hovertemplatefallback"),c.contours&&c.contours.coloring==="heatmap"&&s(d,h))}}}),zk=de({"src/traces/contour/set_contours.js"(e,r){"use strict";var t=nn(),i=Qt();r.exports=function(s,l){var n=s.contours;if(s.autocontour){var u=s.zmin,c=s.zmax;(s.zauto||u===void 0)&&(u=i.aggNums(Math.min,null,l)),(s.zauto||c===void 0)&&(c=i.aggNums(Math.max,null,l));var f=a(u,c,s.ncontours);n.size=f.dtick,n.start=t.tickFirst(f),f.range.reverse(),n.end=t.tickFirst(f),n.start===u&&(n.start+=n.size),n.end===c&&(n.end-=n.size),n.start>n.end&&(n.start=n.end=(n.start+n.end)/2),s._input.contours||(s._input.contours={}),i.extendFlat(s._input.contours,{start:n.start,end:n.end,size:n.size}),s._input.autocontour=!0}else if(n.type!=="constraint"){var h=n.start,d=n.end,p=s._input.contours;if(h>d&&(n.start=p.start=d,d=n.end=p.end=h,h=n.start),!(n.size>0)){var g;h===d?g=1:g=a(h,d,s.ncontours).dtick,p.size=n.size=g}}};function a(o,s,l){var n={type:"linear",range:[o,s]};return t.autoTicks(n,(s-o)/(l||15)),n}}}),Gy=de({"src/traces/contour/end_plus.js"(e,r){"use strict";r.exports=function(i){return i.end+i.size/1e6}}}),Bk=de({"src/traces/contour/calc.js"(e,r){"use strict";var t=ks(),i=a3(),a=zk(),o=Gy();r.exports=function(l,n){var u=i(l,n),c=u[0].z;a(n,c);var f=n.contours,h=t.extractOpts(n),d;if(f.coloring==="heatmap"&&h.auto&&n.autocontour===!1){var p=f.start,g=o(f),m=f.size||1,y=Math.floor((g-p)/m)+1;isFinite(m)||(m=1,y=1);var _=p-m/2,v=_+y*m;d=[_,v]}else d=c;return t.calc(l,n,{vals:d,cLetter:"z"}),u}}}),Hy=de({"src/traces/contour/constants.js"(e,r){"use strict";r.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}}}),Ok=de({"src/traces/contour/make_crossings.js"(e,r){"use strict";var t=Hy();r.exports=function(o){var s=o[0].z,l=s.length,n=s[0].length,u=l===2||n===2,c,f,h,d,p,g,m,y,_;for(f=0;f<l-1;f++)for(d=[],f===0&&(d=d.concat(t.BOTTOMSTART)),f===l-2&&(d=d.concat(t.TOPSTART)),c=0;c<n-1;c++)for(h=d.slice(),c===0&&(h=h.concat(t.LEFTSTART)),c===n-2&&(h=h.concat(t.RIGHTSTART)),p=c+","+f,g=[[s[f][c],s[f][c+1]],[s[f+1][c],s[f+1][c+1]]],_=0;_<o.length;_++)y=o[_],m=i(y.level,g),m&&(y.crossings[p]=m,h.indexOf(m)!==-1&&(y.starts.push([c,f]),u&&h.indexOf(m,h.indexOf(m)+1)!==-1&&y.starts.push([c,f])))};function i(a,o){var s=(o[0][0]>a?0:1)+(o[0][1]>a?0:2)+(o[1][1]>a?0:4)+(o[1][0]>a?0:8);if(s===5||s===10){var l=(o[0][0]+o[0][1]+o[1][0]+o[1][1])/4;return a>l?s===5?713:1114:s===5?104:208}return s===15?0:s}}}),Nk=de({"src/traces/contour/find_all_paths.js"(e,r){"use strict";var t=Qt(),i=Hy();r.exports=function(c,f,h){var d,p,g,m,y;for(f=f||.01,h=h||.01,g=0;g<c.length;g++){for(m=c[g],y=0;y<m.starts.length;y++)p=m.starts[y],s(m,p,"edge",f,h);for(d=0;Object.keys(m.crossings).length&&d<1e4;)d++,p=Object.keys(m.crossings)[0].split(",").map(Number),s(m,p,void 0,f,h);d===1e4&&t.log("Infinite loop in contour?")}};function a(u,c,f,h){return Math.abs(u[0]-c[0])<f&&Math.abs(u[1]-c[1])<h}function o(u,c){var f=u[2]-c[2],h=u[3]-c[3];return Math.sqrt(f*f+h*h)}function s(u,c,f,h,d){var p=c.join(","),g=u.crossings[p],m=l(g,f,c),y=[n(u,c,[-m[0],-m[1]])],_=u.z.length,v=u.z[0].length,x=c.slice(),S=m.slice(),M;for(M=0;M<1e4;M++){if(g>20?(g=i.CHOOSESADDLE[g][(m[0]||m[1])<0?0:1],u.crossings[p]=i.SADDLEREMAINDER[g]):delete u.crossings[p],m=i.NEWDELTA[g],!m){t.log("Found bad marching index:",g,c,u.level);break}y.push(n(u,c,m)),c[0]+=m[0],c[1]+=m[1],p=c.join(","),a(y[y.length-1],y[y.length-2],h,d)&&y.pop();var C=m[0]&&(c[0]<0||c[0]>v-2)||m[1]&&(c[1]<0||c[1]>_-2),w=c[0]===x[0]&&c[1]===x[1]&&m[0]===S[0]&&m[1]===S[1];if(w||f&&C)break;g=u.crossings[p]}M===1e4&&t.log("Infinite loop in contour?");var k=a(y[0],y[y.length-1],h,d),A=0,b=.2*u.smoothing,E=[],T=0,F,D,R,P,z,I,L,B,O,G,W;for(M=1;M<y.length;M++)L=o(y[M],y[M-1]),A+=L,E.push(L);var X=A/E.length*b;function Z(H){return y[H%y.length]}for(M=y.length-2;M>=T;M--)if(F=E[M],F<X){for(R=0,D=M-1;D>=T&&F+E[D]<X;D--)F+=E[D];if(k&&M===y.length-2)for(R=0;R<D&&F+E[R]<X;R++)F+=E[R];z=M-D+R+1,I=Math.floor((M+D+R+2)/2),!k&&M===y.length-2?P=y[y.length-1]:!k&&D===-1?P=y[0]:z%2?P=Z(I):P=[(Z(I)[0]+Z(I+1)[0])/2,(Z(I)[1]+Z(I+1)[1])/2],y.splice(D+1,M-D+1,P),M=D+1,R&&(T=R),k&&(M===y.length-2?y[R]=y[y.length-1]:M===0&&(y[y.length-1]=y[0]))}for(y.splice(0,T),M=0;M<y.length;M++)y[M].length=2;if(!(y.length<2))if(k)y.pop(),u.paths.push(y);else{f||t.log("Unclosed interior contour?",u.level,x.join(","),y.join("L"));var J=!1;for(B=0;B<u.edgepaths.length;B++)if(G=u.edgepaths[B],!J&&a(G[0],y[y.length-1],h,d)){y.pop(),J=!0;var N=!1;for(O=0;O<u.edgepaths.length;O++)if(W=u.edgepaths[O],a(W[W.length-1],y[0],h,d)){N=!0,y.shift(),u.edgepaths.splice(B,1),O===B?u.paths.push(y.concat(W)):(O>B&&O--,u.edgepaths[O]=W.concat(y,G));break}N||(u.edgepaths[B]=y.concat(G))}for(B=0;B<u.edgepaths.length&&!J;B++)G=u.edgepaths[B],a(G[G.length-1],y[0],h,d)&&(y.shift(),u.edgepaths[B]=G.concat(y),J=!0);J||u.edgepaths.push(y)}}function l(u,c,f){var h=0,d=0;return u>20&&c?u===208||u===1114?h=f[0]===0?1:-1:d=f[1]===0?1:-1:i.BOTTOMSTART.indexOf(u)!==-1?d=1:i.LEFTSTART.indexOf(u)!==-1?h=1:i.TOPSTART.indexOf(u)!==-1?d=-1:h=-1,[h,d]}function n(u,c,f){var h=c[0]+Math.max(f[0],0),d=c[1]+Math.max(f[1],0),p=u.z[d][h],g=u.xaxis,m=u.yaxis;if(f[1]){var y=(u.level-p)/(u.z[d][h+1]-p),_=(y!==1?(1-y)*g.c2l(u.x[h]):0)+(y!==0?y*g.c2l(u.x[h+1]):0);return[g.c2p(g.l2c(_),!0),m.c2p(u.y[d],!0),h+y,d]}else{var v=(u.level-p)/(u.z[d+1][h]-p),x=(v!==1?(1-v)*m.c2l(u.y[d]):0)+(v!==0?v*m.c2l(u.y[d+1]):0);return[g.c2p(u.x[h],!0),m.c2p(m.l2c(x),!0),h,d+v]}}}}),TG=de({"src/traces/contour/constraint_mapping.js"(e,r){"use strict";var t=h3(),i=da();r.exports={"[]":o("[]"),"][":o("]["),">":s(">"),"<":s("<"),"=":s("=")};function a(l,n){var u=Array.isArray(n),c;function f(h){return i(h)?+h:null}return t.COMPARISON_OPS2.indexOf(l)!==-1?c=f(u?n[0]:n):t.INTERVAL_OPS.indexOf(l)!==-1?c=u?[f(n[0]),f(n[1])]:[f(n),f(n)]:t.SET_OPS.indexOf(l)!==-1&&(c=u?n.map(f):[f(n)]),c}function o(l){return function(n){n=a(l,n);var u=Math.min(n[0],n[1]),c=Math.max(n[0],n[1]);return{start:u,end:c,size:c-u}}}function s(l){return function(n){return n=a(l,n),{start:n,end:1/0,size:1/0}}}}}),jk=de({"src/traces/contour/empty_pathinfo.js"(e,r){"use strict";var t=Qt(),i=TG(),a=Gy();r.exports=function(s,l,n){for(var u=s.type==="constraint"?i[s._operation](s.value):s,c=u.size,f=[],h=a(u),d=n.trace._carpetTrace,p=d?{xaxis:d.aaxis,yaxis:d.baxis,x:n.a,y:n.b}:{xaxis:l.xaxis,yaxis:l.yaxis,x:n.x,y:n.y},g=u.start;g<h;g+=c)if(f.push(t.extendFlat({level:g,crossings:{},starts:[],edgepaths:[],paths:[],z:n.z,smoothing:n.trace.line.smoothing},p)),f.length>1e3){t.warn("Too many contours, clipping at 1000",s);break}return f}}}),Uk=de({"src/traces/contour/convert_to_constraints.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){var s,l,n,u=function(h){return h.reverse()},c=function(h){return h};switch(o){case"=":case"<":return a;case">":for(a.length!==1&&t.warn("Contour data invalid for the specified inequality operation."),l=a[0],s=0;s<l.edgepaths.length;s++)l.edgepaths[s]=u(l.edgepaths[s]);for(s=0;s<l.paths.length;s++)l.paths[s]=u(l.paths[s]);for(s=0;s<l.starts.length;s++)l.starts[s]=u(l.starts[s]);return a;case"][":var f=u;u=c,c=f;case"[]":for(a.length!==2&&t.warn("Contour data invalid for the specified inequality range operation."),l=i(a[0]),n=i(a[1]),s=0;s<l.edgepaths.length;s++)l.edgepaths[s]=u(l.edgepaths[s]);for(s=0;s<l.paths.length;s++)l.paths[s]=u(l.paths[s]);for(s=0;s<l.starts.length;s++)l.starts[s]=u(l.starts[s]);for(;n.edgepaths.length;)l.edgepaths.push(c(n.edgepaths.shift()));for(;n.paths.length;)l.paths.push(c(n.paths.shift()));for(;n.starts.length;)l.starts.push(c(n.starts.shift()));return[l]}};function i(a){return t.extendFlat({},a,{edgepaths:t.extendDeep([],a.edgepaths),paths:t.extendDeep([],a.paths),starts:t.extendDeep([],a.starts)})}}}),qk=de({"src/traces/contour/close_boundaries.js"(e,r){"use strict";r.exports=function(t,i){var a=t[0],o=a.z,s;switch(i.type){case"levels":var l=Math.min(o[0][0],o[0][1]);for(s=0;s<t.length;s++){var n=t[s];n.prefixBoundary=!n.edgepaths.length&&(l>n.level||n.starts.length&&l===n.level)}break;case"constraint":if(a.prefixBoundary=!1,a.edgepaths.length)return;var u=a.x.length,c=a.y.length,f=-1/0,h=1/0;for(s=0;s<c;s++)h=Math.min(h,o[s][0]),h=Math.min(h,o[s][u-1]),f=Math.max(f,o[s][0]),f=Math.max(f,o[s][u-1]);for(s=1;s<u-1;s++)h=Math.min(h,o[0][s]),h=Math.min(h,o[c-1][s]),f=Math.max(f,o[0][s]),f=Math.max(f,o[c-1][s]);var d=i.value,p,g;switch(i._operation){case">":d>f&&(a.prefixBoundary=!0);break;case"<":(d<h||a.starts.length&&d===h)&&(a.prefixBoundary=!0);break;case"[]":p=Math.min(d[0],d[1]),g=Math.max(d[0],d[1]),(g<h||p>f||a.starts.length&&g===h)&&(a.prefixBoundary=!0);break;case"][":p=Math.min(d[0],d[1]),g=Math.max(d[0],d[1]),p<h&&g>f&&(a.prefixBoundary=!0);break}break}}}}),v3=de({"src/traces/contour/plot.js"(e){"use strict";var r=Yr(),t=Qt(),i=hn(),a=ks(),o=Zo(),s=nn(),l=Yd(),n=o3(),u=Ok(),c=Nk(),f=jk(),h=Uk(),d=qk(),p=Hy(),g=p.LABELOPTIMIZER;e.plot=function(w,k,A,b){var E=k.xaxis,T=k.yaxis;t.makeTraceGroups(b,A,"contour").each(function(F){var D=r.select(this),R=F[0],P=R.trace,z=R.x,I=R.y,L=P.contours,B=f(L,k,R),O=t.ensureSingle(D,"g","heatmapcoloring"),G=[];L.coloring==="heatmap"&&(G=[F]),n(w,k,G,O),u(B),c(B);var W=E.c2p(z[0],!0),X=E.c2p(z[z.length-1],!0),Z=T.c2p(I[0],!0),J=T.c2p(I[I.length-1],!0),N=[[W,J],[X,J],[X,Z],[W,Z]],H=B;L.type==="constraint"&&(H=h(B,L._operation)),m(D,N,L),y(D,H,N,L),v(D,B,w,R,L),S(D,k,w,R,N)})};function m(C,w,k){var A=t.ensureSingle(C,"g","contourbg"),b=A.selectAll("path").data(k.coloring==="fill"?[0]:[]);b.enter().append("path"),b.exit().remove(),b.attr("d","M"+w.join("L")+"Z").style("stroke","none")}function y(C,w,k,A){var b=A.coloring==="fill"||A.type==="constraint"&&A._operation!=="=",E="M"+k.join("L")+"Z";b&&d(w,A);var T=t.ensureSingle(C,"g","contourfill"),F=T.selectAll("path").data(b?w:[]);F.enter().append("path"),F.exit().remove(),F.each(function(D){var R=(D.prefixBoundary?E:"")+_(D,k);R?r.select(this).attr("d",R).style("stroke","none"):r.select(this).remove()})}function _(C,w){var k="",A=0,b=C.edgepaths.map(function(W,X){return X}),E=!0,T,F,D,R,P,z;function I(W){return Math.abs(W[1]-w[0][1])<.01}function L(W){return Math.abs(W[1]-w[2][1])<.01}function B(W){return Math.abs(W[0]-w[0][0])<.01}function O(W){return Math.abs(W[0]-w[2][0])<.01}for(;b.length;){for(z=i.smoothopen(C.edgepaths[A],C.smoothing),k+=E?z:z.replace(/^M/,"L"),b.splice(b.indexOf(A),1),T=C.edgepaths[A][C.edgepaths[A].length-1],R=-1,D=0;D<4;D++){if(!T){t.log("Missing end?",A,C);break}for(I(T)&&!O(T)?F=w[1]:B(T)?F=w[0]:L(T)?F=w[3]:O(T)&&(F=w[2]),P=0;P<C.edgepaths.length;P++){var G=C.edgepaths[P][0];Math.abs(T[0]-F[0])<.01?Math.abs(T[0]-G[0])<.01&&(G[1]-T[1])*(F[1]-G[1])>=0&&(F=G,R=P):Math.abs(T[1]-F[1])<.01?Math.abs(T[1]-G[1])<.01&&(G[0]-T[0])*(F[0]-G[0])>=0&&(F=G,R=P):t.log("endpt to newendpt is not vert. or horz.",T,F,G)}if(T=F,R>=0)break;k+="L"+F}if(R===C.edgepaths.length){t.log("unclosed perimeter path");break}A=R,E=b.indexOf(A)===-1,E&&(A=b[0],k+="Z")}for(A=0;A<C.paths.length;A++)k+=i.smoothclosed(C.paths[A],C.smoothing);return k}function v(C,w,k,A,b){var E=k._context.staticPlot,T=t.ensureSingle(C,"g","contourlines"),F=b.showlines!==!1,D=b.showlabels,R=F&&D,P=e.createLines(T,F||D,w,E),z=e.createLineClip(T,R,k,A.trace.uid),I=C.selectAll("g.contourlabels").data(D?[0]:[]);if(I.exit().remove(),I.enter().append("g").classed("contourlabels",!0),D){var L=[],B=[];t.clearLocationCache();var O=e.labelFormatter(k,A),G=i.tester.append("text").attr("data-notex",1).call(i.font,b.labelfont),W=w[0].xaxis,X=w[0].yaxis,Z=W._length,J=X._length,N=W.range,H=X.range,$=t.aggNums(Math.min,null,A.x),U=t.aggNums(Math.max,null,A.x),V=t.aggNums(Math.min,null,A.y),j=t.aggNums(Math.max,null,A.y),q=Math.max(W.c2p($,!0),0),Y=Math.min(W.c2p(U,!0),Z),K=Math.max(X.c2p(j,!0),0),te=Math.min(X.c2p(V,!0),J),ne={};N[0]<N[1]?(ne.left=q,ne.right=Y):(ne.left=Y,ne.right=q),H[0]<H[1]?(ne.top=K,ne.bottom=te):(ne.top=te,ne.bottom=K),ne.middle=(ne.top+ne.bottom)/2,ne.center=(ne.left+ne.right)/2,L.push([[ne.left,ne.top],[ne.right,ne.top],[ne.right,ne.bottom],[ne.left,ne.bottom]]);var se=Math.sqrt(Z*Z+J*J),le=p.LABELDISTANCE*se/Math.max(1,w.length/p.LABELINCREASE);P.each(function(ce){var pe=e.calcTextOpts(ce.level,O,G,k);r.select(this).selectAll("path").each(function(){var xe=this,ye=t.getVisibleSegment(xe,ne,pe.height/2);if(ye&&!(ye.len<(pe.width+pe.height)*p.LABELMIN))for(var fe=Math.min(Math.ceil(ye.len/le),p.LABELMAX),ae=0;ae<fe;ae++){var ee=e.findBestTextLocation(xe,ye,pe,B,ne);if(!ee)break;e.addLabelData(ee,pe,B,L)}})}),G.remove(),e.drawLabels(I,B,k,z,R?L:null)}D&&!F&&P.remove()}e.createLines=function(C,w,k,A){var b=k[0].smoothing,E=C.selectAll("g.contourlevel").data(w?k:[]);if(E.exit().remove(),E.enter().append("g").classed("contourlevel",!0),w){var T=E.selectAll("path.openline").data(function(D){return D.pedgepaths||D.edgepaths});T.exit().remove(),T.enter().append("path").classed("openline",!0),T.attr("d",function(D){return i.smoothopen(D,b)}).style("stroke-miterlimit",1).style("vector-effect",A?"none":"non-scaling-stroke");var F=E.selectAll("path.closedline").data(function(D){return D.ppaths||D.paths});F.exit().remove(),F.enter().append("path").classed("closedline",!0),F.attr("d",function(D){return i.smoothclosed(D,b)}).style("stroke-miterlimit",1).style("vector-effect",A?"none":"non-scaling-stroke")}return E},e.createLineClip=function(C,w,k,A){var b=k._fullLayout._clips,E=w?"clipline"+A:null,T=b.selectAll("#"+E).data(w?[0]:[]);return T.exit().remove(),T.enter().append("clipPath").classed("contourlineclip",!0).attr("id",E),i.setClipUrl(C,E,k),T},e.labelFormatter=function(C,w){var k=C._fullLayout,A=w.trace,b=A.contours,E={type:"linear",_id:"ycontour",showexponent:"all",exponentformat:"B"};if(b.labelformat)E.tickformat=b.labelformat,l(E,k);else{var T=a.extractOpts(A);if(T&&T.colorbar&&T.colorbar._axis)E=T.colorbar._axis;else{if(b.type==="constraint"){var F=b.value;t.isArrayOrTypedArray(F)?E.range=[F[0],F[F.length-1]]:E.range=[F,F]}else E.range=[b.start,b.end],E.nticks=(b.end-b.start)/b.size;E.range[0]===E.range[1]&&(E.range[1]+=E.range[0]||1),E.nticks||(E.nticks=1e3),l(E,k),s.prepTicks(E),E._tmin=null,E._tmax=null}}return function(D){return s.tickText(E,D).text}},e.calcTextOpts=function(C,w,k,A){var b=w(C);k.text(b).call(o.convertToTspans,A);var E=k.node(),T=i.bBox(E,!0);return{text:b,width:T.width,height:T.height,fontSize:+E.style["font-size"].replace("px",""),level:C,dy:(T.top+T.bottom)/2}},e.findBestTextLocation=function(C,w,k,A,b){var E=k.width,T,F,D,R,P;w.isClosed?(F=w.len/g.INITIALSEARCHPOINTS,T=w.min+F/2,D=w.max):(F=(w.len-E)/(g.INITIALSEARCHPOINTS+1),T=w.min+F+E/2,D=w.max-(F+E)/2);for(var z=1/0,I=0;I<g.ITERATIONS;I++){for(var L=T;L<D;L+=F){var B=t.getTextLocation(C,w.total,L,E),O=x(B,k,A,b);O<z&&(z=O,P=B,R=L)}if(z>g.MAXCOST*2)break;I&&(F/=2),T=R-F/2,D=T+F*1.5}if(z<=g.MAXCOST)return P};function x(C,w,k,A){var b=w.width/2,E=w.height/2,T=C.x,F=C.y,D=C.theta,R=Math.cos(D)*b,P=Math.sin(D)*b,z=(T>A.center?A.right-T:T-A.left)/(R+Math.abs(Math.sin(D)*E)),I=(F>A.middle?A.bottom-F:F-A.top)/(Math.abs(P)+Math.cos(D)*E);if(z<1||I<1)return 1/0;var L=g.EDGECOST*(1/(z-1)+1/(I-1));L+=g.ANGLECOST*D*D;for(var B=T-R,O=F-P,G=T+R,W=F+P,X=0;X<k.length;X++){var Z=k[X],J=Math.cos(Z.theta)*Z.width/2,N=Math.sin(Z.theta)*Z.width/2,H=t.segmentDistance(B,O,G,W,Z.x-J,Z.y-N,Z.x+J,Z.y+N)*2/(w.height+Z.height),$=Z.level===w.level,U=$?g.SAMELEVELDISTANCE:1;if(H<=U)return 1/0;var V=g.NEIGHBORCOST*($?g.SAMELEVELFACTOR:1);L+=V/(H-U)}return L}e.addLabelData=function(C,w,k,A){var b=w.fontSize,E=w.width+b/3,T=Math.max(0,w.height-b/3),F=C.x,D=C.y,R=C.theta,P=Math.sin(R),z=Math.cos(R),I=function(B,O){return[F+B*z-O*P,D+B*P+O*z]},L=[I(-E/2,-T/2),I(-E/2,T/2),I(E/2,T/2),I(E/2,-T/2)];k.push({text:w.text,x:F,y:D,dy:w.dy,theta:R,level:w.level,width:E,height:T}),A.push(L)},e.drawLabels=function(C,w,k,A,b){var E=C.selectAll("text").data(w,function(R){return R.text+","+R.x+","+R.y+","+R.theta});if(E.exit().remove(),E.enter().append("text").attr({"data-notex":1,"text-anchor":"middle"}).each(function(R){var P=R.x+Math.sin(R.theta)*R.dy,z=R.y-Math.cos(R.theta)*R.dy;r.select(this).text(R.text).attr({x:P,y:z,transform:"rotate("+180*R.theta/Math.PI+" "+P+" "+z+")"}).call(o.convertToTspans,k)}),b){for(var T="",F=0;F<b.length;F++)T+="M"+b[F].join("L")+"Z";var D=t.ensureSingle(A,"path","");D.attr("d",T)}};function S(C,w,k,A,b){var E=A.trace,T=k._fullLayout._clips,F="clip"+E.uid,D=T.selectAll("#"+F).data(E.connectgaps?[]:[0]);if(D.enter().append("clipPath").classed("contourclip",!0).attr("id",F),D.exit().remove(),E.connectgaps===!1){var R={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:w.xaxis,yaxis:w.yaxis,x:A.x,y:A.y,z:M(A),smoothing:0};u([R]),c([R]),d([R],{type:"levels"});var P=t.ensureSingle(D,"path","");P.attr("d",(R.prefixBoundary?"M"+b.join("L")+"Z":"")+_(R,b))}else F=null;i.setClipUrl(C,F,k)}function M(C){var w=C.trace._emptypoints,k=[],A=C.z.length,b=C.z[0].length,E,T=[],F;for(E=0;E<b;E++)T.push(1);for(E=0;E<A;E++)k.push(T.slice());for(E=0;E<w.length;E++)F=w[E],k[F[0]][F[1]]=0;return C.zmask=k,k}}}),Vk=de({"src/traces/contour/make_color_map.js"(e,r){"use strict";var t=Yr(),i=ks(),a=Gy();r.exports=function(s){var l=s.contours,n=l.start,u=a(l),c=l.size||1,f=Math.floor((u-n)/c)+1,h=l.coloring==="lines"?0:1,d=i.extractOpts(s);isFinite(c)||(c=1,f=1);var p=d.reversescale?i.flipScale(d.colorscale):d.colorscale,g=p.length,m=new Array(g),y=new Array(g),_,v,x=d.min,S=d.max;if(l.coloring==="heatmap"){for(v=0;v<g;v++)_=p[v],m[v]=_[0]*(S-x)+x,y[v]=_[1];var M=t.extent([x,S,l.start,l.start+c*(f-1)]),C=M[x<S?0:1],w=M[x<S?1:0];C!==x&&(m.splice(0,0,C),y.splice(0,0,y[0])),w!==S&&(m.push(w),y.push(y[y.length-1]))}else{var k=s._input&&typeof s._input.zmin=="number"&&typeof s._input.zmax=="number";for(k&&(n<=x||u>=S)&&(n<=x&&(n=x),u>=S&&(u=S),f=Math.floor((u-n)/c)+1,h=0),v=0;v<g;v++)_=p[v],m[v]=(_[0]*(f+h-1)-h/2)*c+n,y[v]=_[1];(k||s.autocontour)&&(m[0]>x&&(m.unshift(x),y.unshift(y[0])),m[m.length-1]<S&&(m.push(S),y.push(y[y.length-1])))}return i.makeColorScaleFunc({domain:m,range:y},{noNumericCheck:!0})}}}),m3=de({"src/traces/contour/style.js"(e,r){"use strict";var t=Yr(),i=hn(),a=s3(),o=Vk();r.exports=function(l){var n=t.select(l).selectAll("g.contour");n.style("opacity",function(u){return u[0].trace.opacity}),n.each(function(u){var c=t.select(this),f=u[0].trace,h=f.contours,d=f.line,p=h.size||1,g=h.start,m=h.type==="constraint",y=!m&&h.coloring==="lines",_=!m&&h.coloring==="fill",v=y||_?o(f):null;c.selectAll("g.contourlevel").each(function(M){t.select(this).selectAll("path").call(i.lineGroupStyle,d.width,y?v(M.level):d.color,d.dash)});var x=h.labelfont;if(c.selectAll("g.contourlabels text").each(function(M){i.font(t.select(this),{weight:x.weight,style:x.style,variant:x.variant,textcase:x.textcase,lineposition:x.lineposition,shadow:x.shadow,family:x.family,size:x.size,color:x.color||(y?v(M.level):d.color)})}),m)c.selectAll("g.contourfill path").style("fill",f.fillcolor);else if(_){var S;c.selectAll("g.contourfill path").style("fill",function(M){return S===void 0&&(S=M.level),v(M.level+.5*p)}),S===void 0&&(S=g),c.selectAll("g.contourbg path").style("fill",v(S-.5*p))}}),a(l)}}}),g3=de({"src/traces/contour/colorbar.js"(e,r){"use strict";var t=ks(),i=Vk(),a=Gy();function o(s,l,n){var u=l.contours,c=l.line,f=u.size||1,h=u.coloring,d=i(l,{isColorbar:!0});if(h==="heatmap"){var p=t.extractOpts(l);n._fillgradient=p.reversescale?t.flipScale(p.colorscale):p.colorscale,n._zrange=[p.min,p.max]}else h==="fill"&&(n._fillcolor=d);n._line={color:h==="lines"?d:c.color,width:u.showlines!==!1?c.width:0,dash:c.dash},n._levels={start:u.start,end:a(u),size:f}}r.exports={min:"zmin",max:"zmax",calc:o}}}),Gk=de({"src/traces/contour/hover.js"(e,r){"use strict";var t=ta(),i=l3();r.exports=function(o,s,l,n,u){u||(u={}),u.isContour=!0;var c=i(o,s,l,n,u);return c&&c.forEach(function(f){var h=f.trace;h.contours.type==="constraint"&&(h.fillcolor&&t.opacity(h.fillcolor)?f.color=t.addOpacity(h.fillcolor,1):h.contours.showlines&&t.opacity(h.line.color)&&(f.color=t.addOpacity(h.line.color,1)))}),c}}}),AG=de({"src/traces/histogram2dcontour/index.js"(e,r){"use strict";r.exports={attributes:Ik(),supplyDefaults:wG(),crossTraceDefaults:c3(),calc:Bk(),plot:v3().plot,layerName:"contourlayer",style:m3(),colorbar:g3(),hoverPoints:Gk(),moduleType:"trace",name:"histogram2dcontour",basePlotModule:ml(),categories:["cartesian","svg","2dMap","contour","histogram","showLegend"],meta:{}}}}),MG=de({"lib/histogram2dcontour.js"(e,r){"use strict";r.exports=AG()}}),Hk=de({"src/traces/contour/constraint_defaults.js"(e,r){"use strict";var t=da(),i=Rk(),a=ta(),o=a.addOpacity,s=a.opacity,l=h3(),n=Qt().isArrayOrTypedArray,u=l.CONSTRAINT_REDUCTION,c=l.COMPARISON_OPS2;r.exports=function(d,p,g,m,y,_){var v=p.contours,x,S,M,C=g("contours.operation");if(v._operation=u[C],f(g,v),C==="="?x=v.showlines=!0:(x=g("contours.showlines"),M=g("fillcolor",o((d.line||{}).color||y,.5))),x){var w=M&&s(M)?o(p.fillcolor,1):y;S=g("line.color",w),g("line.width",2),g("line.dash")}g("line.smoothing"),i(g,m,S,_)};function f(h,d){var p;c.indexOf(d.operation)===-1?(h("contours.value",[0,1]),n(d.value)?d.value.length>2?d.value=d.value.slice(2):d.length===0?d.value=[0,1]:d.length<2?(p=parseFloat(d.value[0]),d.value=[p,p+1]):d.value=[parseFloat(d.value[0]),parseFloat(d.value[1])]:t(d.value)&&(p=parseFloat(d.value),d.value=[p,p+1])):(h("contours.value",0),t(d.value)||(n(d.value)?d.value=parseFloat(d.value[0]):d.value=0))}}}),SG=de({"src/traces/contour/defaults.js"(e,r){"use strict";var t=Qt(),i=Qw(),a=gd(),o=Hk(),s=d3(),l=p3(),n=qy(),u=Vy();r.exports=function(f,h,d,p){function g(v,x){return t.coerce(f,h,u,v,x)}function m(v){return t.coerce2(f,h,u,v)}var y=i(f,h,g,p);if(!y){h.visible=!1;return}a(f,h,p,g),g("xhoverformat"),g("yhoverformat"),g("text"),g("hovertext"),g("hoverongaps"),g("hovertemplate"),g("hovertemplatefallback");var _=g("contours.type")==="constraint";g("connectgaps",t.isArray1D(h.z)),_?o(f,h,g,p,d):(s(f,h,g,m),l(f,h,g,p)),h.contours&&h.contours.coloring==="heatmap"&&n(g,p),g("zorder")}}}),EG=de({"src/traces/contour/index.js"(e,r){"use strict";r.exports={attributes:Vy(),supplyDefaults:SG(),calc:Bk(),plot:v3().plot,style:m3(),colorbar:g3(),hoverPoints:Gk(),moduleType:"trace",name:"contour",basePlotModule:ml(),categories:["cartesian","svg","2dMap","contour","showLegend"],meta:{}}}}),kG=de({"lib/contour.js"(e,r){"use strict";r.exports=EG()}}),$k=de({"src/traces/scatterternary/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=Kd(),s=tl(),l=ri(),n=cs(),u=fu().dash,c=fn().extendFlat,f=s.marker,h=s.line,d=f.line;r.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:c({},s.mode,{dflt:"markers"}),text:c({},s.text,{}),texttemplate:i({editType:"plot"},{keys:["a","b","c","text"]}),texttemplatefallback:a({editType:"plot"}),hovertext:c({},s.hovertext,{}),line:{color:h.color,width:h.width,dash:u,backoff:h.backoff,shape:c({},h.shape,{values:["linear","spline"]}),smoothing:h.smoothing,editType:"calc"},connectgaps:s.connectgaps,cliponaxis:s.cliponaxis,fill:c({},s.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:o(),marker:c({symbol:f.symbol,opacity:f.opacity,angle:f.angle,angleref:f.angleref,standoff:f.standoff,maxdisplayed:f.maxdisplayed,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,line:c({width:d.width,dash:d.dash,editType:"calc"},n("marker.line")),gradient:f.gradient,editType:"calc"},n("marker")),textfont:s.textfont,textposition:s.textposition,selected:s.selected,unselected:s.unselected,hoverinfo:c({},l.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:s.hoveron,hovertemplate:t(),hovertemplatefallback:a()}}}),CG=de({"src/traces/scatterternary/defaults.js"(e,r){"use strict";var t=Qt(),i=Zd(),a=bs(),o=Nh(),s=yd(),l=p1(),n=_d(),u=Jd(),c=$k();r.exports=function(h,d,p,g){function m(C,w){return t.coerce(h,d,c,C,w)}var y=m("a"),_=m("b"),v=m("c"),x;if(y?(x=y.length,_?(x=Math.min(x,_.length),v&&(x=Math.min(x,v.length))):v?x=Math.min(x,v.length):x=0):_&&v&&(x=Math.min(_.length,v.length)),!x){d.visible=!1;return}d._length=x,m("sum"),m("text"),m("hovertext"),d.hoveron!=="fills"&&(m("hovertemplate"),m("hovertemplatefallback"));var S=x<i.PTS_LINESONLY?"lines+markers":"lines";m("mode",S),a.hasMarkers(d)&&o(h,d,p,g,m,{gradient:!0}),a.hasLines(d)&&(s(h,d,p,g,m,{backoff:!0}),l(h,d,m),m("connectgaps")),a.hasText(d)&&(m("texttemplate"),m("texttemplatefallback"),n(h,d,g,m));var M=[];(a.hasMarkers(d)||a.hasText(d))&&(m("cliponaxis"),m("marker.maxdisplayed"),M.push("points")),m("fill"),d.fill!=="none"&&(u(h,d,p,m),a.hasLines(d)||l(h,d,m)),(d.fill==="tonext"||d.fill==="toself")&&M.push("fills"),m("hoveron",M.join("+")||"points"),t.coerceSelectionMarkerOpacity(d,m)}}}),DG=de({"src/traces/scatterternary/format_labels.js"(e,r){"use strict";var t=nn();r.exports=function(a,o,s){var l={},n=s[o.subplot]._subplot;return l.aLabel=t.tickText(n.aaxis,a.a,!0).text,l.bLabel=t.tickText(n.baxis,a.b,!0).text,l.cLabel=t.tickText(n.caxis,a.c,!0).text,l}}}),LG=de({"src/traces/scatterternary/calc.js"(e,r){"use strict";var t=da(),i=jh(),a=Qd(),o=nh(),s=Uh().calcMarkerSize,l=["a","b","c"],n={a:["b","c"],b:["a","c"],c:["a","b"]};r.exports=function(c,f){var h=c._fullLayout[f.subplot],d=h.sum,p=f.sum||d,g={a:f.a,b:f.b,c:f.c},m=f.ids,y,_,v,x,S,M;for(y=0;y<l.length;y++)if(v=l[y],!g[v]){for(S=g[n[v][0]],M=g[n[v][1]],x=new Array(S.length),_=0;_<S.length;_++)x[_]=p-S[_]-M[_];g[v]=x}var C=f._length,w=new Array(C),k,A,b,E,T,F;for(y=0;y<C;y++)k=g.a[y],A=g.b[y],b=g.c[y],t(k)&&t(A)&&t(b)?(k=+k,A=+A,b=+b,E=d/(k+A+b),E!==1&&(k*=E,A*=E,b*=E),F=k,T=b-A,w[y]={x:T,y:F,a:k,b:A,c:b},m&&(w[y].id=m[y])):w[y]={x:!1,y:!1};return s(f,C),i(c,f),a(w,f),o(w,f),w}}}),FG=de({"src/traces/scatterternary/plot.js"(e,r){"use strict";var t=v1();r.exports=function(a,o,s){var l=o.plotContainer;l.select(".scatterlayer").selectAll("*").remove();for(var n=o.xaxis,u=o.yaxis,c={xaxis:n,yaxis:u,plot:l,layerClipId:o._hasClipOnAxisFalse?o.clipIdRelative:null},f=o.layers.frontplot.select("g.scatterlayer"),h=0;h<s.length;h++){var d=s[h];d.length&&(d[0].trace._xA=n,d[0].trace._yA=u)}t(a,c,s,f)}}}),PG=de({"src/traces/scatterternary/hover.js"(e,r){"use strict";var t=g1();r.exports=function(a,o,s,l){var n=t(a,o,s,l);if(!n||n[0].index===!1)return;var u=n[0];if(u.index===void 0){var c=1-u.y0/a.ya._length,f=a.xa._length,h=f*c/2,d=f-h;return u.x0=Math.max(Math.min(u.x0,d),h),u.x1=Math.max(Math.min(u.x1,d),h),n}var p=u.cd[u.index],g=u.trace,m=u.subplot;u.a=p.a,u.b=p.b,u.c=p.c,u.xLabelVal=void 0,u.yLabelVal=void 0;var y={};y[g.subplot]={_subplot:m};var _=g._module.formatLabels(p,g,y);u.aLabel=_.aLabel,u.bLabel=_.bLabel,u.cLabel=_.cLabel;var v=p.hi||g.hoverinfo,x=[];function S(C,w){x.push(C._hovertitle+": "+w)}if(!g.hovertemplate){var M=v.split("+");M.indexOf("all")!==-1&&(M=["a","b","c"]),M.indexOf("a")!==-1&&S(m.aaxis,u.aLabel),M.indexOf("b")!==-1&&S(m.baxis,u.bLabel),M.indexOf("c")!==-1&&S(m.caxis,u.cLabel)}return u.extraText=x.join("<br>"),u.hovertemplate=g.hovertemplate,n}}}),IG=de({"src/traces/scatterternary/event_data.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){if(a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),s[l]){var n=s[l];i.a=n.a,i.b=n.b,i.c=n.c}else i.a=a.a,i.b=a.b,i.c=a.c;return i}}}),RG=de({"src/plots/ternary/ternary.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Qt(),o=a.strTranslate,s=a._,l=ta(),n=hn(),u=Yd(),c=fn().extendFlat,f=Es(),h=nn(),d=Uc(),p=$s(),g=Xd(),m=g.freeMode,y=g.rectMode,_=xv(),v=Zl().prepSelect,x=Zl().selectOnClick,S=Zl().clearOutline,M=Zl().clearSelectionsCache,C=zl();function w(I,L){this.id=I.id,this.graphDiv=I.graphDiv,this.init(L),this.makeFramework(L),this.updateFx(L),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}r.exports=w;var k=w.prototype;k.init=function(I){this.container=I._ternarylayer,this.defs=I._defs,this.layoutId=I._uid,this.traceHash={},this.layers={}},k.plot=function(I,L){var B=this,O=L[B.id],G=L._size;B._hasClipOnAxisFalse=!1;for(var W=0;W<I.length;W++){var X=I[W][0].trace;if(X.cliponaxis===!1){B._hasClipOnAxisFalse=!0;break}}B.updateLayers(O),B.adjustLayout(O,G),f.generalUpdatePerTraceModule(B.graphDiv,B,I,O),B.layers.plotbg.select("path").call(l.fill,O.bgcolor)},k.makeFramework=function(I){var L=this,B=L.graphDiv,O=I[L.id],G=L.clipId="clip"+L.layoutId+L.id,W=L.clipIdRelative="clip-relative"+L.layoutId+L.id;L.clipDef=a.ensureSingleById(I._clips,"clipPath",G,function(X){X.append("path").attr("d","M0,0Z")}),L.clipDefRelative=a.ensureSingleById(I._clips,"clipPath",W,function(X){X.append("path").attr("d","M0,0Z")}),L.plotContainer=a.ensureSingle(L.container,"g",L.id),L.updateLayers(O),n.setClipUrl(L.layers.backplot,G,B),n.setClipUrl(L.layers.grids,G,B)},k.updateFx=function(I){I._ternarylayer.selectAll("g.toplevel").style("cursor",I.dragmode==="pan"?"move":"crosshair")},k.updateLayers=function(I){var L=this,B=L.layers,O=["draglayer","plotbg","backplot","grids"];I.aaxis.layer==="below traces"&&O.push("aaxis","aline"),I.baxis.layer==="below traces"&&O.push("baxis","bline"),I.caxis.layer==="below traces"&&O.push("caxis","cline"),O.push("frontplot"),I.aaxis.layer==="above traces"&&O.push("aaxis","aline"),I.baxis.layer==="above traces"&&O.push("baxis","bline"),I.caxis.layer==="above traces"&&O.push("caxis","cline");var G=L.plotContainer.selectAll("g.toplevel").data(O,String),W=["agrid","bgrid","cgrid"];G.enter().append("g").attr("class",function(X){return"toplevel "+X}).each(function(X){var Z=t.select(this);B[X]=Z,X==="frontplot"?Z.append("g").classed("scatterlayer",!0):X==="backplot"?Z.append("g").classed("maplayer",!0):X==="plotbg"?Z.append("path").attr("d","M0,0Z"):X==="aline"||X==="bline"||X==="cline"?Z.append("path"):X==="grids"&&W.forEach(function(J){B[J]=Z.append("g").classed("grid "+J,!0)})}),G.order()};var A=Math.sqrt(4/3);k.adjustLayout=function(I,L){var B=this,O=I.domain,G=(O.x[0]+O.x[1])/2,W=(O.y[0]+O.y[1])/2,X=O.x[1]-O.x[0],Z=O.y[1]-O.y[0],J=X*L.w,N=Z*L.h,H=I.sum,$=I.aaxis.min,U=I.baxis.min,V=I.caxis.min,j,q,Y,K,te,ne;J>A*N?(K=N,Y=K*A):(Y=J,K=Y/A),te=X*Y/J,ne=Z*K/N,j=L.l+L.w*G-Y/2,q=L.t+L.h*(1-W)-K/2,B.x0=j,B.y0=q,B.w=Y,B.h=K,B.sum=H,B.xaxis={type:"linear",range:[$+2*V-H,H-$-2*U],domain:[G-te/2,G+te/2],_id:"x"},u(B.xaxis,B.graphDiv._fullLayout),B.xaxis.setScale(),B.xaxis.isPtWithinRange=function(Q){return Q.a>=B.aaxis.range[0]&&Q.a<=B.aaxis.range[1]&&Q.b>=B.baxis.range[1]&&Q.b<=B.baxis.range[0]&&Q.c>=B.caxis.range[1]&&Q.c<=B.caxis.range[0]},B.yaxis={type:"linear",range:[$,H-U-V],domain:[W-ne/2,W+ne/2],_id:"y"},u(B.yaxis,B.graphDiv._fullLayout),B.yaxis.setScale(),B.yaxis.isPtWithinRange=function(){return!0};var se=B.yaxis.domain[0],le=B.aaxis=c({},I.aaxis,{range:[$,H-U-V],side:"left",tickangle:(+I.aaxis.tickangle||0)-30,domain:[se,se+ne*A],anchor:"free",position:0,_id:"y",_length:Y});u(le,B.graphDiv._fullLayout),le.setScale();var ce=B.baxis=c({},I.baxis,{range:[H-$-V,U],side:"bottom",domain:B.xaxis.domain,anchor:"free",position:0,_id:"x",_length:Y});u(ce,B.graphDiv._fullLayout),ce.setScale();var pe=B.caxis=c({},I.caxis,{range:[H-$-U,V],side:"right",tickangle:(+I.caxis.tickangle||0)+30,domain:[se,se+ne*A],anchor:"free",position:0,_id:"y",_length:Y});u(pe,B.graphDiv._fullLayout),pe.setScale();var xe="M"+j+","+(q+K)+"h"+Y+"l-"+Y/2+",-"+K+"Z";B.clipDef.select("path").attr("d",xe),B.layers.plotbg.select("path").attr("d",xe);var ye="M0,"+K+"h"+Y+"l-"+Y/2+",-"+K+"Z";B.clipDefRelative.select("path").attr("d",ye);var fe=o(j,q);B.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",fe),B.clipDefRelative.select("path").attr("transform",null);var ae=o(j-ce._offset,q+K);B.layers.baxis.attr("transform",ae),B.layers.bgrid.attr("transform",ae);var ee=o(j+Y/2,q)+"rotate(30)"+o(0,-le._offset);B.layers.aaxis.attr("transform",ee),B.layers.agrid.attr("transform",ee);var ie=o(j+Y/2,q)+"rotate(-30)"+o(0,-pe._offset);B.layers.caxis.attr("transform",ie),B.layers.cgrid.attr("transform",ie),B.drawAxes(!0),B.layers.aline.select("path").attr("d",le.showline?"M"+j+","+(q+K)+"l"+Y/2+",-"+K:"M0,0").call(l.stroke,le.linecolor||"#000").style("stroke-width",(le.linewidth||0)+"px"),B.layers.bline.select("path").attr("d",ce.showline?"M"+j+","+(q+K)+"h"+Y:"M0,0").call(l.stroke,ce.linecolor||"#000").style("stroke-width",(ce.linewidth||0)+"px"),B.layers.cline.select("path").attr("d",pe.showline?"M"+(j+Y/2)+","+q+"l"+Y/2+","+K:"M0,0").call(l.stroke,pe.linecolor||"#000").style("stroke-width",(pe.linewidth||0)+"px"),B.graphDiv._context.staticPlot||B.initInteractions(),n.setClipUrl(B.layers.frontplot,B._hasClipOnAxisFalse?null:B.clipId,B.graphDiv)},k.drawAxes=function(I){var L=this,B=L.graphDiv,O=L.id.slice(7)+"title",G=L.layers,W=L.aaxis,X=L.baxis,Z=L.caxis;if(L.drawAx(W),L.drawAx(X),L.drawAx(Z),I){var J=Math.max(W.showticklabels?W.tickfont.size/2:0,(Z.showticklabels?Z.tickfont.size*.75:0)+(Z.ticks==="outside"?Z.ticklen*.87:0)),N=(X.showticklabels?X.tickfont.size:0)+(X.ticks==="outside"?X.ticklen:0)+3;G["a-title"]=_.draw(B,"a"+O,{propContainer:W,propName:L.id+".aaxis.title.text",placeholder:s(B,"Click to enter Component A title"),attributes:{x:L.x0+L.w/2,y:L.y0-W.title.font.size/3-J,"text-anchor":"middle"}}),G["b-title"]=_.draw(B,"b"+O,{propContainer:X,propName:L.id+".baxis.title.text",placeholder:s(B,"Click to enter Component B title"),attributes:{x:L.x0-N,y:L.y0+L.h+X.title.font.size*.83+N,"text-anchor":"middle"}}),G["c-title"]=_.draw(B,"c"+O,{propContainer:Z,propName:L.id+".caxis.title.text",placeholder:s(B,"Click to enter Component C title"),attributes:{x:L.x0+L.w+N,y:L.y0+L.h+Z.title.font.size*.83+N,"text-anchor":"middle"}})}},k.drawAx=function(I){var L=this,B=L.graphDiv,O=I._name,G=O.charAt(0),W=I._id,X=L.layers[O],Z=30,J=G+"tickLayout",N=b(I);L[J]!==N&&(X.selectAll("."+W+"tick").remove(),L[J]=N),I.setScale();var H=h.calcTicks(I),$=h.clipEnds(I,H),U=h.makeTransTickFn(I),V=h.getTickSigns(I)[2],j=a.deg2rad(Z),q=V*(I.linewidth||1)/2,Y=V*I.ticklen,K=L.w,te=L.h,ne=G==="b"?"M0,"+q+"l"+Math.sin(j)*Y+","+Math.cos(j)*Y:"M"+q+",0l"+Math.cos(j)*Y+","+-Math.sin(j)*Y,se={a:"M0,0l"+te+",-"+K/2,b:"M0,0l-"+K/2+",-"+te,c:"M0,0l-"+te+","+K/2}[G];h.drawTicks(B,I,{vals:I.ticks==="inside"?$:H,layer:X,path:ne,transFn:U,crisp:!1}),h.drawGrid(B,I,{vals:$,layer:L.layers[G+"grid"],path:se,transFn:U,crisp:!1}),h.drawLabels(B,I,{vals:H,layer:X,transFn:U,labelFns:h.makeLabelFns(I,0,Z)})};function b(I){return I.ticks+String(I.ticklen)+String(I.showticklabels)}var E=C.MINZOOM/2+.87,T="m-0.87,.5h"+E+"v3h-"+(E+5.2)+"l"+(E/2+2.6)+",-"+(E*.87+4.5)+"l2.6,1.5l-"+E/2+","+E*.87+"Z",F="m0.87,.5h-"+E+"v3h"+(E+5.2)+"l-"+(E/2+2.6)+",-"+(E*.87+4.5)+"l-2.6,1.5l"+E/2+","+E*.87+"Z",D="m0,1l"+E/2+","+E*.87+"l2.6,-1.5l-"+(E/2+2.6)+",-"+(E*.87+4.5)+"l-"+(E/2+2.6)+","+(E*.87+4.5)+"l2.6,1.5l"+E/2+",-"+E*.87+"Z",R="m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z",P=!0;k.clearOutline=function(){M(this.dragOptions),S(this.dragOptions.gd)},k.initInteractions=function(){var I=this,L=I.layers.plotbg.select("path").node(),B=I.graphDiv,O=B._fullLayout._zoomlayer,G,W;this.dragOptions={element:L,gd:B,plotinfo:{id:I.id,domain:B._fullLayout[I.id].domain,xaxis:I.xaxis,yaxis:I.yaxis},subplot:I.id,prepFn:function(ae,ee,ie){I.dragOptions.xaxes=[I.xaxis],I.dragOptions.yaxes=[I.yaxis],G=B._fullLayout._invScaleX,W=B._fullLayout._invScaleY;var Q=I.dragOptions.dragmode=B._fullLayout.dragmode;m(Q)?I.dragOptions.minDrag=1:I.dragOptions.minDrag=void 0,Q==="zoom"?(I.dragOptions.moveFn=ce,I.dragOptions.clickFn=K,I.dragOptions.doneFn=pe,te(ae,ee,ie)):Q==="pan"?(I.dragOptions.moveFn=ye,I.dragOptions.clickFn=K,I.dragOptions.doneFn=fe,xe(),I.clearOutline(B)):(y(Q)||m(Q))&&v(ae,ee,ie,I.dragOptions,Q)}};var X,Z,J,N,H,$,U,V,j,q;function Y(ae){var ee={};return ee[I.id+".aaxis.min"]=ae.a,ee[I.id+".baxis.min"]=ae.b,ee[I.id+".caxis.min"]=ae.c,ee}function K(ae,ee){var ie=B._fullLayout.clickmode;z(B),ae===2&&(B.emit("plotly_doubleclick",null),i.call("_guiRelayout",B,Y({a:0,b:0,c:0}))),ie.indexOf("select")>-1&&ae===1&&x(ee,B,[I.xaxis],[I.yaxis],I.id,I.dragOptions),ie.indexOf("event")>-1&&p.click(B,ee,I.id)}function te(ae,ee,ie){var Q=L.getBoundingClientRect();X=ee-Q.left,Z=ie-Q.top,B._fullLayout._calcInverseTransform(B);var ue=B._fullLayout._invTransform,ge=a.apply3DTransform(ue)(X,Z);X=ge[0],Z=ge[1],J={a:I.aaxis.range[0],b:I.baxis.range[1],c:I.caxis.range[1]},H=J,N=I.aaxis.range[1]-J.a,$=l.luminosity(I.graphDiv._fullLayout[I.id].bgcolor),U="M0,"+I.h+"L"+I.w/2+", 0L"+I.w+","+I.h+"Z",V=!1,j=O.append("path").attr("class","zoombox").attr("transform",o(I.x0,I.y0)).style({fill:$>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",U),q=O.append("path").attr("class","zoombox-corners").attr("transform",o(I.x0,I.y0)).style({fill:l.background,stroke:l.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),I.clearOutline(B)}function ne(ae,ee){return 1-ee/I.h}function se(ae,ee){return 1-(ae+(I.h-ee)/Math.sqrt(3))/I.w}function le(ae,ee){return(ae-(I.h-ee)/Math.sqrt(3))/I.w}function ce(ae,ee){var ie=X+ae*G,Q=Z+ee*W,ue=Math.max(0,Math.min(1,ne(X,Z),ne(ie,Q))),ge=Math.max(0,Math.min(1,se(X,Z),se(ie,Q))),Me=Math.max(0,Math.min(1,le(X,Z),le(ie,Q))),Te=(ue/2+Me)*I.w,je=(1-ue/2-ge)*I.w,Ve=(Te+je)/2,Ze=je-Te,Ke=(1-ue)*I.h,vt=Ke-Ze/A;Ze<C.MINZOOM?(H=J,j.attr("d",U),q.attr("d","M0,0Z")):(H={a:J.a+ue*N,b:J.b+ge*N,c:J.c+Me*N},j.attr("d",U+"M"+Te+","+Ke+"H"+je+"L"+Ve+","+vt+"L"+Te+","+Ke+"Z"),q.attr("d","M"+X+","+Z+R+"M"+Te+","+Ke+T+"M"+je+","+Ke+F+"M"+Ve+","+vt+D)),V||(j.transition().style("fill",$>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),q.transition().style("opacity",1).duration(200),V=!0),B.emit("plotly_relayouting",Y(H))}function pe(){z(B),H!==J&&(i.call("_guiRelayout",B,Y(H)),P&&B.data&&B._context.showTips&&(a.notifier(s(B,"Double-click to zoom back out"),"long",B),P=!1))}function xe(){J={a:I.aaxis.range[0],b:I.baxis.range[1],c:I.caxis.range[1]},H=J}function ye(ae,ee){var ie=ae/I.xaxis._m,Q=ee/I.yaxis._m;H={a:J.a-Q,b:J.b+(ie+Q)/2,c:J.c-(ie-Q)/2};var ue=[H.a,H.b,H.c].sort(a.sorterAsc),ge={a:ue.indexOf(H.a),b:ue.indexOf(H.b),c:ue.indexOf(H.c)};ue[0]<0&&(ue[1]+ue[0]/2<0?(ue[2]+=ue[0]+ue[1],ue[0]=ue[1]=0):(ue[2]+=ue[0]/2,ue[1]+=ue[0]/2,ue[0]=0),H={a:ue[ge.a],b:ue[ge.b],c:ue[ge.c]},ee=(J.a-H.a)*I.yaxis._m,ae=(J.c-H.c-J.b+H.b)*I.xaxis._m);var Me=o(I.x0+ae,I.y0+ee);I.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",Me);var Te=o(-ae,-ee);I.clipDefRelative.select("path").attr("transform",Te),I.aaxis.range=[H.a,I.sum-H.b-H.c],I.baxis.range=[I.sum-H.a-H.c,H.b],I.caxis.range=[I.sum-H.a-H.b,H.c],I.drawAxes(!1),I._hasClipOnAxisFalse&&I.plotContainer.select(".scatterlayer").selectAll(".trace").call(n.hideOutsideRangePoints,I),B.emit("plotly_relayouting",Y(H))}function fe(){i.call("_guiRelayout",B,Y(H))}L.onmousemove=function(ae){p.hover(B,ae,I.id),B._fullLayout._lasthover=L,B._fullLayout._hoversubplot=I.id},L.onmouseout=function(ae){B._dragging||d.unhover(B,ae)},d.init(this.dragOptions)};function z(I){t.select(I).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}}}),Wk=de({"src/plots/ternary/layout_attributes.js"(e,r){"use strict";var t=Jo(),i=Is().attributes,a=Mu(),o=Ps().overrideAll,s=fn().extendFlat,l={title:{text:a.title.text,font:a.title.font},color:a.color,tickmode:a.minor.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,ticklabelstep:a.ticklabelstep,showticklabels:a.showticklabels,labelalias:a.labelalias,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,minexponent:a.minexponent,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,griddash:a.griddash,layer:a.layer,min:{valType:"number",dflt:0,min:0}},n=r.exports=o({domain:i({name:"ternary"}),bgcolor:{valType:"color",dflt:t.background},sum:{valType:"number",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},"plot","from-root");n.uirevision={valType:"any",editType:"none"},n.aaxis.uirevision=n.baxis.uirevision=n.caxis.uirevision={valType:"any",editType:"none"}}}),Ev=de({"src/plots/subplot_defaults.js"(e,r){"use strict";var t=Qt(),i=Ro(),a=Is().defaults;r.exports=function(s,l,n,u){var c=u.type,f=u.attributes,h=u.handleDefaults,d=u.partition||"x",p=l._subplots[c],g=p.length,m=g&&p[0].replace(/\d+$/,""),y,_;function v(C,w){return t.coerce(y,_,f,C,w)}for(var x=0;x<g;x++){var S=p[x];s[S]?y=s[S]:y=s[S]={},_=i.newContainer(l,S,m),u.noUirevision||v("uirevision",l.uirevision);var M={};M[d]=[x/g,(x+1)/g],a(_,l,v,M),u.id=S,h(y,_,v,u)}}}}),zG=de({"src/plots/ternary/layout_defaults.js"(e,r){"use strict";var t=ta(),i=Ro(),a=Qt(),o=Ev(),s=h0(),l=d0(),n=f1(),u=_v(),c=Ry(),f=Wk(),h=["aaxis","baxis","caxis"];r.exports=function(m,y,_){o(m,y,_,{type:"ternary",attributes:f,handleDefaults:d,font:y.font,paper_bgcolor:y.paper_bgcolor})};function d(g,m,y,_){var v=y("bgcolor"),x=y("sum");_.bgColor=t.combine(v,_.paper_bgcolor);for(var S,M,C,w=0;w<h.length;w++)S=h[w],M=g[S]||{},C=i.newContainer(m,S),C._name=S,p(M,C,_,m);var k=m.aaxis,A=m.baxis,b=m.caxis;k.min+A.min+b.min>=x&&(k.min=0,A.min=0,b.min=0,g.aaxis&&delete g.aaxis.min,g.baxis&&delete g.baxis.min,g.caxis&&delete g.caxis.min)}function p(g,m,y,_){var v=f[m._name];function x(E,T){return a.coerce(g,m,v,E,T)}x("uirevision",_.uirevision),m.type="linear";var S=x("color"),M=S!==v.color.dflt?S:y.font.color,C=m._name,w=C.charAt(0).toUpperCase(),k="Component "+w,A=x("title.text",k);m._hovertitle=A===k?A:w,a.coerceFont(x,"title.font",y.font,{overrideDflt:{size:a.bigFont(y.font.size),color:M}}),x("min"),u(g,m,x,"linear"),l(g,m,x,"linear"),s(g,m,x,"linear",{noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0}),n(g,m,x,{outerTicks:!0});var b=x("showticklabels");b&&(a.coerceFont(x,"tickfont",y.font,{overrideDflt:{color:M}}),x("tickangle"),x("tickformat")),c(g,m,x,{dfltColor:S,bgColor:y.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:v}),x("hoverformat"),x("layer")}}}),BG=de({"src/plots/ternary/index.js"(e){"use strict";var r=RG(),t=$u().getSubplotCalcData,i=Qt().counterRegex,a="ternary";e.name=a;var o=e.attr="subplot";e.idRoot=a,e.idRegex=e.attrRegex=i(a);var s=e.attributes={};s[o]={valType:"subplotid",dflt:"ternary",editType:"calc"},e.layoutAttributes=Wk(),e.supplyLayoutDefaults=zG(),e.plot=function(n){for(var u=n._fullLayout,c=n.calcdata,f=u._subplots[a],h=0;h<f.length;h++){var d=f[h],p=t(c,a,d),g=u[d]._subplot;g||(g=new r({id:d,graphDiv:n,container:u._ternarylayer.node()},u),u[d]._subplot=g),g.plot(p,u,n._promises)}},e.clean=function(l,n,u,c){for(var f=c._subplots[a]||[],h=0;h<f.length;h++){var d=f[h],p=c[d]._subplot;!n[d]&&p&&(p.plotContainer.remove(),p.clipDef.remove(),p.clipDefRelative.remove(),p.layers["a-title"].remove(),p.layers["b-title"].remove(),p.layers["c-title"].remove())}},e.updateFx=function(l){var n=l._fullLayout;n._ternarylayer.selectAll("g.toplevel").style("cursor",n.dragmode==="pan"?"move":"crosshair")}}}),OG=de({"src/traces/scatterternary/index.js"(e,r){"use strict";r.exports={attributes:$k(),supplyDefaults:CG(),colorbar:Yu(),formatLabels:DG(),calc:LG(),plot:FG(),style:lf().style,styleOnSelect:lf().styleOnSelect,hoverPoints:PG(),selectPoints:Mv(),eventData:IG(),moduleType:"trace",name:"scatterternary",basePlotModule:BG(),categories:["ternary","symbols","showLegend","scatter-like"],meta:{}}}}),NG=de({"lib/scatterternary.js"(e,r){"use strict";r.exports=OG()}}),Yk=de({"src/traces/violin/attributes.js"(e,r){"use strict";var t=Ny(),i=fn().extendFlat,a=Ns().axisHoverFormat;r.exports={y:t.y,x:t.x,x0:t.x0,y0:t.y0,xhoverformat:a("x"),yhoverformat:a("y"),name:i({},t.name,{}),orientation:i({},t.orientation,{}),bandwidth:{valType:"number",min:0,editType:"calc"},scalegroup:{valType:"string",dflt:"",editType:"calc"},scalemode:{valType:"enumerated",values:["width","count"],dflt:"width",editType:"calc"},spanmode:{valType:"enumerated",values:["soft","hard","manual"],dflt:"soft",editType:"calc"},span:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:t.fillcolor,points:i({},t.boxpoints,{}),jitter:i({},t.jitter,{}),pointpos:i({},t.pointpos,{}),width:i({},t.width,{}),marker:t.marker,text:t.text,hovertext:t.hovertext,hovertemplate:t.hovertemplate,hovertemplatefallback:t.hovertemplatefallback,quartilemethod:t.quartilemethod,box:{visible:{valType:"boolean",dflt:!1,editType:"plot"},width:{valType:"number",min:0,max:1,dflt:.25,editType:"plot"},fillcolor:{valType:"color",editType:"style"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"plot"},meanline:{visible:{valType:"boolean",dflt:!1,editType:"plot"},color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"plot"},side:{valType:"enumerated",values:["both","positive","negative"],dflt:"both",editType:"calc"},offsetgroup:t.offsetgroup,alignmentgroup:t.alignmentgroup,selected:t.selected,unselected:t.unselected,hoveron:{valType:"flaglist",flags:["violins","points","kde"],dflt:"violins+points+kde",extras:["all"],editType:"style"},zorder:t.zorder}}}),Xk=de({"src/traces/violin/layout_attributes.js"(e,r){"use strict";var t=jy(),i=Qt().extendFlat;r.exports={violinmode:i({},t.boxmode,{}),violingap:i({},t.boxgap,{}),violingroupgap:i({},t.boxgroupgap,{})}}}),jG=de({"src/traces/violin/defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Uy(),o=Yk();r.exports=function(l,n,u,c){function f(b,E){return t.coerce(l,n,o,b,E)}function h(b,E){return t.coerce2(l,n,o,b,E)}if(a.handleSampleDefaults(l,n,f,c),n.visible!==!1){f("bandwidth"),f("side");var d=f("width");d||(f("scalegroup",n.name),f("scalemode"));var p=f("span"),g;Array.isArray(p)&&(g="manual"),f("spanmode",g);var m=f("line.color",(l.marker||{}).color||u),y=f("line.width"),_=f("fillcolor",i.addOpacity(n.line.color,.5));a.handlePointsDefaults(l,n,f,{prefix:""});var v=h("box.width"),x=h("box.fillcolor",_),S=h("box.line.color",m),M=h("box.line.width",y),C=f("box.visible",!!(v||x||S||M));C||(n.box={visible:!1});var w=h("meanline.color",m),k=h("meanline.width",y),A=f("meanline.visible",!!(w||k));A||(n.meanline={visible:!1}),f("quartilemethod"),f("zorder")}}}}),UG=de({"src/traces/violin/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=Xk(),a=Xw();r.exports=function(s,l,n){function u(c,f){return t.coerce(s,l,i,c,f)}a._supply(s,l,n,u,"violin")}}}),y3=de({"src/traces/violin/helpers.js"(e){"use strict";var r=Qt(),t={gaussian:function(i){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*i*i)}};e.makeKDE=function(i,a,o){var s=o.length,l=t.gaussian,n=i.bandwidth,u=1/(s*n);return function(c){for(var f=0,h=0;h<s;h++)f+=l((c-o[h])/n);return u*f}},e.getPositionOnKdePath=function(i,a,o){var s,l;a.orientation==="h"?(s="y",l="x"):(s="x",l="y");var n=r.findPointOnPath(i.path,o,l,{pathLength:i.pathLength}),u=i.posCenterPx,c=n[s],f=a.side==="both"?2*u-c:u;return[c,f]},e.getKdeValue=function(i,a,o){var s=i.pts.map(e.extractVal),l=e.makeKDE(i,a,s);return l(o)/i.posDensityScale},e.extractVal=function(i){return i.v}}}),qG=de({"src/traces/violin/calc.js"(e,r){"use strict";var t=Qt(),i=nn(),a=xk(),o=y3(),s=cn().BADNUM;r.exports=function(f,h){var d=a(f,h);if(d[0].t.empty)return d;for(var p=f._fullLayout,g=i.getFromId(f,h[h.orientation==="h"?"xaxis":"yaxis"]),m=1/0,y=-1/0,_=0,v=0,x=0;x<d.length;x++){var S=d[x],M=S.pts.map(o.extractVal),C=S.bandwidth=n(h,S,M),w=S.span=u(h,S,g,C);if(S.min===S.max&&C===0)w=S.span=[S.min,S.max],S.density=[{v:1,t:w[0]}],S.bandwidth=C,_=Math.max(_,1);else{var k=w[1]-w[0],A=Math.ceil(k/(C/3)),b=k/A;if(!isFinite(b)||!isFinite(A))return t.error("Something went wrong with computing the violin span"),d[0].t.empty=!0,d;var E=o.makeKDE(S,h,M);S.density=new Array(A+1);for(var T=0;T<S.density.length;T++){var F=w[0]+T*b,D=E(F);S.density[T]={v:D,t:F},_=Math.max(_,D)}}v=Math.max(v,M.length),m=Math.min(m,w[0]),y=Math.max(y,w[1])}var R=i.findExtremes(g,[m,y],{padded:!0});if(h._extremes[g._id]=R,h.width)d[0].t.maxKDE=_;else{var P=p._violinScaleGroupStats,z=h.scalegroup,I=P[z];I?(I.maxKDE=Math.max(I.maxKDE,_),I.maxCount=Math.max(I.maxCount,v)):P[z]={maxKDE:_,maxCount:v}}return d[0].t.labels.kde=t._(f,"kde:"),d};function l(c,f,h){var d=Math.min(f,h/1.349);return 1.059*d*Math.pow(c,-.2)}function n(c,f,h){var d=f.max-f.min;if(!d)return c.bandwidth?c.bandwidth:0;if(c.bandwidth)return Math.max(c.bandwidth,d/1e4);var p=h.length,g=t.stdev(h,p-1,f.mean);return Math.max(l(p,g,f.q3-f.q1),d/100)}function u(c,f,h,d){var p=c.spanmode,g=c.span||[],m=[f.min,f.max],y=[f.min-2*d,f.max+2*d],_;function v(S){var M=g[S],C=h.type==="multicategory"?h.r2c(M):h.d2c(M,0,c[f.valLetter+"calendar"]);return C===s?y[S]:C}p==="soft"?_=y:p==="hard"?_=m:_=[v(0),v(1)];var x={type:"linear",range:_};return i.setConvert(x),x.cleanRange(),_}}}),VG=de({"src/traces/violin/cross_trace_calc.js"(e,r){"use strict";var t=Zw().setPositionOffset,i=["v","h"];r.exports=function(o,s){for(var l=o.calcdata,n=s.xaxis,u=s.yaxis,c=0;c<i.length;c++){for(var f=i[c],h=f==="h"?u:n,d=[],p=0;p<l.length;p++){var g=l[p],m=g[0].t,y=g[0].trace;y.visible===!0&&y.type==="violin"&&!m.empty&&y.orientation===f&&y.xaxis===n._id&&y.yaxis===u._id&&d.push(p)}t("violin",o,d,h)}}}}),GG=de({"src/traces/violin/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=Kw(),s=ak(),l=y3();r.exports=function(u,c,f,h){var d=u._context.staticPlot,p=u._fullLayout,g=c.xaxis,m=c.yaxis;function y(_,v){var x=s(_,{xaxis:g,yaxis:m,trace:v,connectGaps:!0,baseTolerance:.75,shape:"spline",simplify:!0,linearized:!0});return a.smoothopen(x[0],1)}i.makeTraceGroups(h,f,"trace violins").each(function(_){var v=t.select(this),x=_[0],S=x.t,M=x.trace;if(M.visible!==!0||S.empty){v.remove();return}var C=S.bPos,w=S.bdPos,k=c[S.valLetter+"axis"],A=c[S.posLetter+"axis"],b=M.side==="both",E=b||M.side==="positive",T=b||M.side==="negative",F=v.selectAll("path.violin").data(i.identity);F.enter().append("path").style("vector-effect",d?"none":"non-scaling-stroke").attr("class","violin"),F.exit().remove(),F.each(function(O){var G=t.select(this),W=O.density,X=W.length,Z=A.c2l(O.pos+C,!0),J=A.l2p(Z),N;if(M.width)N=S.maxKDE/w;else{var H=p._violinScaleGroupStats[M.scalegroup];N=M.scalemode==="count"?H.maxKDE/w*(H.maxCount/O.pts.length):H.maxKDE/w}var $,U,V,j,q,Y,K;if(E){for(Y=new Array(X),j=0;j<X;j++)K=Y[j]={},K[S.posLetter]=Z+W[j].v/N,K[S.valLetter]=k.c2l(W[j].t,!0);$=y(Y,M)}if(T){for(Y=new Array(X),q=0,j=X-1;q<X;q++,j--)K=Y[q]={},K[S.posLetter]=Z-W[j].v/N,K[S.valLetter]=k.c2l(W[j].t,!0);U=y(Y,M)}if(b)V=$+"L"+U.slice(1)+"Z";else{var te=[J,k.c2p(W[0].t)],ne=[J,k.c2p(W[X-1].t)];M.orientation==="h"&&(te.reverse(),ne.reverse()),E?V="M"+te+"L"+$.slice(1)+"L"+ne:V="M"+ne+"L"+U.slice(1)+"L"+te}G.attr("d",V),O.posCenterPx=J,O.posDensityScale=N*w,O.path=G.node(),O.pathLength=O.path.getTotalLength()/(b?2:1)});var D=M.box,R=D.width,P=(D.line||{}).width,z,I;b?(z=w*R,I=0):E?(z=[0,w*R/2],I=P*{x:1,y:-1}[S.posLetter]):(z=[w*R/2,0],I=P*{x:-1,y:1}[S.posLetter]),o.plotBoxAndWhiskers(v,{pos:A,val:k},M,{bPos:C,bdPos:z,bPosPxOffset:I}),o.plotBoxMean(v,{pos:A,val:k},M,{bPos:C,bdPos:z,bPosPxOffset:I});var L;!M.box.visible&&M.meanline.visible&&(L=i.identity);var B=v.selectAll("path.meanline").data(L||[]);B.enter().append("path").attr("class","meanline").style("fill","none").style("vector-effect",d?"none":"non-scaling-stroke"),B.exit().remove(),B.each(function(O){var G=k.c2p(O.mean,!0),W=l.getPositionOnKdePath(O,M,G);t.select(this).attr("d",M.orientation==="h"?"M"+G+","+W[0]+"V"+W[1]:"M"+W[0]+","+G+"H"+W[1])}),o.plotPoints(v,{x:g,y:m},M,S)})}}}),HG=de({"src/traces/violin/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=lf().stylePoints;r.exports=function(s){var l=t.select(s).selectAll("g.trace.violins");l.style("opacity",function(n){return n[0].trace.opacity}),l.each(function(n){var u=n[0].trace,c=t.select(this),f=u.box||{},h=f.line||{},d=u.meanline||{},p=d.width;c.selectAll("path.violin").style("stroke-width",u.line.width+"px").call(i.stroke,u.line.color).call(i.fill,u.fillcolor),c.selectAll("path.box").style("stroke-width",h.width+"px").call(i.stroke,h.color).call(i.fill,f.fillcolor);var g={"stroke-width":p+"px","stroke-dasharray":2*p+"px,"+p+"px"};c.selectAll("path.mean").style(g).call(i.stroke,d.color),c.selectAll("path.meanline").style(g).call(i.stroke,d.color),a(c,u,s)})}}}),$G=de({"src/traces/violin/hover.js"(e,r){"use strict";var t=ta(),i=Qt(),a=nn(),o=bk(),s=y3();r.exports=function(n,u,c,f,h){h||(h={});var d=h.hoverLayer,p=n.cd,g=p[0].trace,m=g.hoveron,y=m.indexOf("violins")!==-1,_=m.indexOf("kde")!==-1,v=[],x,S;if(y||_){var M=o.hoverOnBoxes(n,u,c,f);if(_&&M.length>0){var C=n.xa,w=n.ya,k,A,b,E,T;g.orientation==="h"?(T=u,k="y",b=w,A="x",E=C):(T=c,k="x",b=C,A="y",E=w);var F=p[n.index];if(T>=F.span[0]&&T<=F.span[1]){var D=i.extendFlat({},n),R=E.c2p(T,!0),P=s.getKdeValue(F,g,T),z=s.getPositionOnKdePath(F,g,R),I=b._offset,L=b._length;D[k+"0"]=z[0],D[k+"1"]=z[1],D[A+"0"]=D[A+"1"]=R,D[A+"Label"]=A+": "+a.hoverLabelText(E,T,g[A+"hoverformat"])+", "+p[0].t.labels.kde+" "+P.toFixed(3);for(var B=0,O=0;O<M.length;O++)if(M[O].attr==="med"){B=O;break}D.spikeDistance=M[B].spikeDistance;var G=k+"Spike";D[G]=M[B][G],M[B].spikeDistance=void 0,M[B][G]=void 0,D.hovertemplate=!1,v.push(D),S={},S[k+"1"]=i.constrain(I+z[0],I,I+L),S[k+"2"]=i.constrain(I+z[1],I,I+L),S[A+"1"]=S[A+"2"]=E._offset+R}}y&&(v=v.concat(M))}m.indexOf("points")!==-1&&(x=o.hoverOnPoints(n,u,c));var W=d.selectAll(".violinline-"+g.uid).data(S?[0]:[]);return W.enter().append("line").classed("violinline-"+g.uid,!0).attr("stroke-width",1.5),W.exit().remove(),W.attr(S).call(t.stroke,n.color),f==="closest"?x?[x]:v:(x&&v.push(x),v)}}}),WG=de({"src/traces/violin/index.js"(e,r){"use strict";r.exports={attributes:Yk(),layoutAttributes:Xk(),supplyDefaults:jG(),crossTraceDefaults:Uy().crossTraceDefaults,supplyLayoutDefaults:UG(),calc:qG(),crossTraceCalc:VG(),plot:GG(),style:HG(),styleOnSelect:lf().styleOnSelect,hoverPoints:$G(),selectPoints:wk(),moduleType:"trace",name:"violin",basePlotModule:ml(),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","violinLayout","zoomScale"],meta:{}}}}),YG=de({"lib/violin.js"(e,r){"use strict";r.exports=WG()}}),XG=de({"src/traces/funnel/constants.js"(e,r){"use strict";r.exports={eventDataKeys:["percentInitial","percentPrevious","percentTotal"]}}}),Zk=de({"src/traces/funnel/attributes.js"(e,r){"use strict";var t=ep(),i=tl().line,a=ri(),o=Ns().axisHoverFormat,{hovertemplateAttrs:s,texttemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=XG(),c=fn().extendFlat,f=ta();r.exports={x:t.x,x0:t.x0,dx:t.dx,y:t.y,y0:t.y0,dy:t.dy,xperiod:t.xperiod,yperiod:t.yperiod,xperiod0:t.xperiod0,yperiod0:t.yperiod0,xperiodalignment:t.xperiodalignment,yperiodalignment:t.yperiodalignment,xhoverformat:o("x"),yhoverformat:o("y"),hovertext:t.hovertext,hovertemplate:s({},{keys:u.eventDataKeys}),hovertemplatefallback:n(),hoverinfo:c({},a.hoverinfo,{flags:["name","x","y","text","percent initial","percent previous","percent total"]}),textinfo:{valType:"flaglist",flags:["label","text","percent initial","percent previous","percent total","value"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:l({editType:"plot"},{keys:u.eventDataKeys.concat(["label","value"])}),texttemplatefallback:n({editType:"plot"}),text:t.text,textposition:t.textposition,insidetextanchor:c({},t.insidetextanchor,{dflt:"middle"}),textangle:c({},t.textangle,{dflt:0}),textfont:t.textfont,insidetextfont:t.insidetextfont,outsidetextfont:t.outsidetextfont,constraintext:t.constraintext,cliponaxis:t.cliponaxis,orientation:c({},t.orientation,{}),offset:c({},t.offset,{arrayOk:!1}),width:c({},t.width,{arrayOk:!1}),marker:h(),connector:{fillcolor:{valType:"color",editType:"style"},line:{color:c({},i.color,{dflt:f.defaultLine}),width:c({},i.width,{dflt:0,editType:"plot"}),dash:i.dash,editType:"style"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:t.offsetgroup,alignmentgroup:t.alignmentgroup,zorder:t.zorder};function h(){var d=c({},t.marker);return delete d.pattern,delete d.cornerradius,d}}}),Kk=de({"src/traces/funnel/layout_attributes.js"(e,r){"use strict";r.exports={funnelmode:{valType:"enumerated",values:["stack","group","overlay"],dflt:"stack",editType:"calc"},funnelgap:{valType:"number",min:0,max:1,editType:"calc"},funnelgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}}}),Jk=de({"src/traces/funnel/defaults.js"(e,r){"use strict";var t=Qt(),i=Tv(),a=oh().handleText,o=wv(),s=gd(),l=Zk(),n=ta();function u(h,d,p,g){function m(C,w){return t.coerce(h,d,l,C,w)}var y=o(h,d,g,m);if(!y){d.visible=!1;return}s(h,d,g,m),m("xhoverformat"),m("yhoverformat"),m("orientation",d.y&&!d.x?"v":"h"),m("offset"),m("width");var _=m("text");m("hovertext"),m("hovertemplate"),m("hovertemplatefallback");var v=m("textposition");a(h,d,g,m,v,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),d.textposition!=="none"&&!d.texttemplate&&m("textinfo",t.isArrayOrTypedArray(_)?"text+value":"value");var x=m("marker.color",p);m("marker.line.color",n.defaultLine),m("marker.line.width");var S=m("connector.visible");if(S){m("connector.fillcolor",c(x));var M=m("connector.line.width");M&&(m("connector.line.color"),m("connector.line.dash"))}m("zorder")}function c(h){var d=t.isArrayOrTypedArray(h)?"#000":h;return n.addOpacity(d,.5*n.opacity(d))}function f(h,d){var p,g;function m(_){return t.coerce(g._input,g,l,_)}for(var y=0;y<h.length;y++)g=h[y],g.type==="funnel"&&(p=g._input,i(p,g,d,m,d.funnelmode))}r.exports={supplyDefaults:u,crossTraceDefaults:f}}}),ZG=de({"src/traces/funnel/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=Kk();r.exports=function(a,o,s){var l=!1;function n(f,h){return t.coerce(a,o,i,f,h)}for(var u=0;u<s.length;u++){var c=s[u];if(c.visible&&c.type==="funnel"){l=!0;break}}l&&(n("funnelmode"),n("funnelgap",.2),n("funnelgroupgap"))}}}),KG=de({"src/traces/funnel/arrays_to_calcdata.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){for(var s=0;s<a.length;s++)a[s].i=s;t.mergeArray(o.text,a,"tx"),t.mergeArray(o.hovertext,a,"htx");var l=o.marker;if(l){t.mergeArray(l.opacity,a,"mo"),t.mergeArray(l.color,a,"mc");var n=l.line;n&&(t.mergeArray(n.color,a,"mlc"),t.mergeArrayCastPositive(n.width,a,"mlw"))}}}}),JG=de({"src/traces/funnel/calc.js"(e,r){"use strict";var t=nn(),i=xd(),a=KG(),o=nh(),s=cn().BADNUM;r.exports=function(u,c){var f=t.getFromId(u,c.xaxis||"x"),h=t.getFromId(u,c.yaxis||"y"),d,p,g,m,y,_,v,x;c.orientation==="h"?(d=f.makeCalcdata(c,"x"),g=h.makeCalcdata(c,"y"),m=i(c,h,"y",g),y=!!c.yperiodalignment,_="y"):(d=h.makeCalcdata(c,"y"),g=f.makeCalcdata(c,"x"),m=i(c,f,"x",g),y=!!c.xperiodalignment,_="x"),p=m.vals;var S=Math.min(p.length,d.length),M=new Array(S);for(c._base=[],v=0;v<S;v++){d[v]<0&&(d[v]=s);var C=!1;d[v]!==s&&v+1<S&&d[v+1]!==s&&(C=!0),x=M[v]={p:p[v],s:d[v],cNext:C},c._base[v]=-.5*x.s,y&&(M[v].orig_p=g[v],M[v][_+"End"]=m.ends[v],M[v][_+"Start"]=m.starts[v]),c.ids&&(x.id=String(c.ids[v])),v===0&&(M[0].vTotal=0),M[0].vTotal+=l(x.s),x.begR=l(x.s)/l(M[0].s)}var w;for(v=0;v<S;v++)x=M[v],x.s!==s&&(x.sumR=x.s/M[0].vTotal,x.difR=w!==void 0?x.s/w:1,w=x.s);return a(M,c),o(M,c),M};function l(n){return n===s?0:n}}}),QG=de({"src/traces/funnel/cross_trace_calc.js"(e,r){"use strict";var t=Av().setGroupPositions;r.exports=function(a,o){var s=a._fullLayout,l=a._fullData,n=a.calcdata,u=o.xaxis,c=o.yaxis,f=[],h=[],d=[],p,g;for(g=0;g<l.length;g++){var m=l[g],y=m.orientation==="h";m.visible===!0&&m.xaxis===u._id&&m.yaxis===c._id&&m.type==="funnel"&&(p=n[g],y?d.push(p):h.push(p),f.push(p))}var _={mode:s.funnelmode,norm:s.funnelnorm,gap:s.funnelgap,groupgap:s.funnelgroupgap};for(t(a,u,c,h,_),t(a,c,u,d,_),g=0;g<f.length;g++){p=f[g];for(var v=0;v<p.length;v++)v+1<p.length&&(p[v].nextP0=p[v+1].p0,p[v].nextS0=p[v+1].s0,p[v].nextP1=p[v+1].p1,p[v].nextS1=p[v+1].s1)}}}}),eH=de({"src/traces/funnel/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=cn().BADNUM,s=Sv(),l=dc().clearMinTextSize;r.exports=function(h,d,p,g){var m=h._fullLayout;l("funnel",m),n(h,d,p,g),u(h,d,p,g),s.plot(h,d,p,g,{mode:m.funnelmode,norm:m.funnelmode,gap:m.funnelgap,groupgap:m.funnelgroupgap})};function n(f,h,d,p){var g=h.xaxis,m=h.yaxis;i.makeTraceGroups(p,d,"trace bars").each(function(y){var _=t.select(this),v=y[0].trace,x=i.ensureSingle(_,"g","regions");if(!v.connector||!v.connector.visible){x.remove();return}var S=v.orientation==="h",M=x.selectAll("g.region").data(i.identity);M.enter().append("g").classed("region",!0),M.exit().remove();var C=M.size();M.each(function(w,k){if(!(k!==C-1&&!w.cNext)){var A=c(w,g,m,S),b=A[0],E=A[1],T="";b[0]!==o&&E[0]!==o&&b[1]!==o&&E[1]!==o&&b[2]!==o&&E[2]!==o&&b[3]!==o&&E[3]!==o&&(S?T+="M"+b[0]+","+E[1]+"L"+b[2]+","+E[2]+"H"+b[3]+"L"+b[1]+","+E[1]+"Z":T+="M"+b[1]+","+E[1]+"L"+b[2]+","+E[3]+"V"+E[2]+"L"+b[1]+","+E[0]+"Z"),T===""&&(T="M0,0Z"),i.ensureSingle(t.select(this),"path").attr("d",T).call(a.setClipUrl,h.layerClipId,f)}})})}function u(f,h,d,p){var g=h.xaxis,m=h.yaxis;i.makeTraceGroups(p,d,"trace bars").each(function(y){var _=t.select(this),v=y[0].trace,x=i.ensureSingle(_,"g","lines");if(!v.connector||!v.connector.visible||!v.connector.line.width){x.remove();return}var S=v.orientation==="h",M=x.selectAll("g.line").data(i.identity);M.enter().append("g").classed("line",!0),M.exit().remove();var C=M.size();M.each(function(w,k){if(!(k!==C-1&&!w.cNext)){var A=c(w,g,m,S),b=A[0],E=A[1],T="";b[3]!==void 0&&E[3]!==void 0&&(S?(T+="M"+b[0]+","+E[1]+"L"+b[2]+","+E[2],T+="M"+b[1]+","+E[1]+"L"+b[3]+","+E[2]):(T+="M"+b[1]+","+E[1]+"L"+b[2]+","+E[3],T+="M"+b[1]+","+E[0]+"L"+b[2]+","+E[2])),T===""&&(T="M0,0Z"),i.ensureSingle(t.select(this),"path").attr("d",T).call(a.setClipUrl,h.layerClipId,f)}})})}function c(f,h,d,p){var g=[],m=[],y=p?h:d,_=p?d:h;return g[0]=y.c2p(f.s0,!0),m[0]=_.c2p(f.p0,!0),g[1]=y.c2p(f.s1,!0),m[1]=_.c2p(f.p1,!0),g[2]=y.c2p(f.nextS0,!0),m[2]=_.c2p(f.nextP0,!0),g[3]=y.c2p(f.nextS1,!0),m[3]=_.c2p(f.nextP1,!0),p?[g,m]:[m,g]}}}),tH=de({"src/traces/funnel/style.js"(e,r){"use strict";var t=Yr(),i=hn(),a=ta(),o=Ap().DESELECTDIM,s=qh(),l=dc().resizeText,n=s.styleTextPoints;function u(c,f,h){var d=h||t.select(c).selectAll('g[class^="funnellayer"]').selectAll("g.trace");l(c,d,"funnel"),d.style("opacity",function(p){return p[0].trace.opacity}),d.each(function(p){var g=t.select(this),m=p[0].trace;g.selectAll(".point > path").each(function(y){if(!y.isBlank){var _=m.marker;t.select(this).call(a.fill,y.mc||_.color).call(a.stroke,y.mlc||_.line.color).call(i.dashLine,_.line.dash,y.mlw||_.line.width).style("opacity",m.selectedpoints&&!y.selected?o:1)}}),n(g,m,c),g.selectAll(".regions").each(function(){t.select(this).selectAll("path").style("stroke-width",0).call(a.fill,m.connector.fillcolor)}),g.selectAll(".lines").each(function(){var y=m.connector.line;i.lineGroupStyle(t.select(this).selectAll("path"),y.width,y.color,y.dash)})})}r.exports={style:u}}}),rH=de({"src/traces/funnel/hover.js"(e,r){"use strict";var t=ta().opacity,i=y1().hoverOnBars,a=Qt().formatPercent;r.exports=function(l,n,u,c,f){var h=i(l,n,u,c,f);if(h){var d=h.cd,p=d[0].trace,g=p.orientation==="h",m=h.index,y=d[m],_=g?"x":"y";h[_+"LabelVal"]=y.s,h.percentInitial=y.begR,h.percentInitialLabel=a(y.begR,1),h.percentPrevious=y.difR,h.percentPreviousLabel=a(y.difR,1),h.percentTotal=y.sumR,h.percentTotalLabel=a(y.sumR,1);var v=y.hi||p.hoverinfo,x=[];if(v&&v!=="none"&&v!=="skip"){var S=v==="all",M=v.split("+"),C=function(w){return S||M.indexOf(w)!==-1};C("percent initial")&&x.push(h.percentInitialLabel+" of initial"),C("percent previous")&&x.push(h.percentPreviousLabel+" of previous"),C("percent total")&&x.push(h.percentTotalLabel+" of total")}return h.extraText=x.join("<br>"),h.color=o(p,y),[h]}};function o(s,l){var n=s.marker,u=l.mc||n.color,c=l.mlc||n.line.color,f=l.mlw||n.line.width;if(t(u))return u;if(t(c)&&f)return c}}}),iH=de({"src/traces/funnel/event_data.js"(e,r){"use strict";r.exports=function(i,a){return i.x="xVal"in a?a.xVal:a.x,i.y="yVal"in a?a.yVal:a.y,"percentInitial"in a&&(i.percentInitial=a.percentInitial),"percentPrevious"in a&&(i.percentPrevious=a.percentPrevious),"percentTotal"in a&&(i.percentTotal=a.percentTotal),a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),i}}}),aH=de({"src/traces/funnel/index.js"(e,r){"use strict";r.exports={attributes:Zk(),layoutAttributes:Kk(),supplyDefaults:Jk().supplyDefaults,crossTraceDefaults:Jk().crossTraceDefaults,supplyLayoutDefaults:ZG(),calc:JG(),crossTraceCalc:QG(),plot:eH(),style:tH().style,hoverPoints:rH(),eventData:iH(),selectPoints:_1(),moduleType:"trace",name:"funnel",basePlotModule:ml(),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}}}),nH=de({"lib/funnel.js"(e,r){"use strict";r.exports=aH()}}),oH=de({"src/traces/waterfall/constants.js"(e,r){"use strict";r.exports={eventDataKeys:["initial","delta","final"]}}}),Qk=de({"src/traces/waterfall/attributes.js"(e,r){"use strict";var t=ep(),i=tl().line,a=ri(),o=Ns().axisHoverFormat,{hovertemplateAttrs:s,texttemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=oH(),c=fn().extendFlat,f=ta();function h(d){return{marker:{color:c({},t.marker.color,{arrayOk:!1,editType:"style"}),line:{color:c({},t.marker.line.color,{arrayOk:!1,editType:"style"}),width:c({},t.marker.line.width,{arrayOk:!1,editType:"style"}),editType:"style"},editType:"style"},editType:"style"}}r.exports={measure:{valType:"data_array",dflt:[],editType:"calc"},base:{valType:"number",dflt:null,arrayOk:!1,editType:"calc"},x:t.x,x0:t.x0,dx:t.dx,y:t.y,y0:t.y0,dy:t.dy,xperiod:t.xperiod,yperiod:t.yperiod,xperiod0:t.xperiod0,yperiod0:t.yperiod0,xperiodalignment:t.xperiodalignment,yperiodalignment:t.yperiodalignment,xhoverformat:o("x"),yhoverformat:o("y"),hovertext:t.hovertext,hovertemplate:s({},{keys:u.eventDataKeys}),hovertemplatefallback:n(),hoverinfo:c({},a.hoverinfo,{flags:["name","x","y","text","initial","delta","final"]}),textinfo:{valType:"flaglist",flags:["label","text","initial","delta","final"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:l({editType:"plot"},{keys:u.eventDataKeys.concat(["label"])}),texttemplatefallback:n({editType:"plot"}),text:t.text,textposition:t.textposition,insidetextanchor:t.insidetextanchor,textangle:t.textangle,textfont:t.textfont,insidetextfont:t.insidetextfont,outsidetextfont:t.outsidetextfont,constraintext:t.constraintext,cliponaxis:t.cliponaxis,orientation:t.orientation,offset:t.offset,width:t.width,increasing:h("increasing"),decreasing:h("decreasing"),totals:h("intermediate sums and total"),connector:{line:{color:c({},i.color,{dflt:f.defaultLine}),width:c({},i.width,{editType:"plot"}),dash:i.dash,editType:"plot"},mode:{valType:"enumerated",values:["spanning","between"],dflt:"between",editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:t.offsetgroup,alignmentgroup:t.alignmentgroup,zorder:t.zorder}}}),eC=de({"src/traces/waterfall/layout_attributes.js"(e,r){"use strict";r.exports={waterfallmode:{valType:"enumerated",values:["group","overlay"],dflt:"group",editType:"calc"},waterfallgap:{valType:"number",min:0,max:1,editType:"calc"},waterfallgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}}}),w1=de({"src/constants/delta.js"(e,r){"use strict";r.exports={INCREASING:{COLOR:"#3D9970",SYMBOL:"\u25B2"},DECREASING:{COLOR:"#FF4136",SYMBOL:"\u25BC"}}}}),tC=de({"src/traces/waterfall/defaults.js"(e,r){"use strict";var t=Qt(),i=Tv(),a=oh().handleText,o=wv(),s=gd(),l=Qk(),n=ta(),u=w1(),c=u.INCREASING.COLOR,f=u.DECREASING.COLOR,h="#4499FF";function d(m,y,_){m(y+".marker.color",_),m(y+".marker.line.color",n.defaultLine),m(y+".marker.line.width")}function p(m,y,_,v){function x(k,A){return t.coerce(m,y,l,k,A)}var S=o(m,y,v,x);if(!S){y.visible=!1;return}s(m,y,v,x),x("xhoverformat"),x("yhoverformat"),x("measure"),x("orientation",y.x&&!y.y?"h":"v"),x("base"),x("offset"),x("width"),x("text"),x("hovertext"),x("hovertemplate"),x("hovertemplatefallback");var M=x("textposition");a(m,y,v,x,M,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),y.textposition!=="none"&&(x("texttemplate"),x("texttemplatefallback"),y.texttemplate||x("textinfo")),d(x,"increasing",c),d(x,"decreasing",f),d(x,"totals",h);var C=x("connector.visible");if(C){x("connector.mode");var w=x("connector.line.width");w&&(x("connector.line.color"),x("connector.line.dash"))}x("zorder")}function g(m,y){var _,v;function x(M){return t.coerce(v._input,v,l,M)}if(y.waterfallmode==="group")for(var S=0;S<m.length;S++)v=m[S],_=v._input,i(_,v,y,x,y.waterfallmode)}r.exports={supplyDefaults:p,crossTraceDefaults:g}}}),sH=de({"src/traces/waterfall/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=eC();r.exports=function(a,o,s){var l=!1;function n(f,h){return t.coerce(a,o,i,f,h)}for(var u=0;u<s.length;u++){var c=s[u];if(c.visible&&c.type==="waterfall"){l=!0;break}}l&&(n("waterfallmode"),n("waterfallgap",.2),n("waterfallgroupgap"))}}}),lH=de({"src/traces/waterfall/calc.js"(e,r){"use strict";var t=nn(),i=xd(),a=Qt().mergeArray,o=nh(),s=cn().BADNUM;function l(u){return u==="a"||u==="absolute"}function n(u){return u==="t"||u==="total"}r.exports=function(c,f){var h=t.getFromId(c,f.xaxis||"x"),d=t.getFromId(c,f.yaxis||"y"),p,g,m,y,_,v;f.orientation==="h"?(p=h.makeCalcdata(f,"x"),m=d.makeCalcdata(f,"y"),y=i(f,d,"y",m),_=!!f.yperiodalignment,v="y"):(p=d.makeCalcdata(f,"y"),m=h.makeCalcdata(f,"x"),y=i(f,h,"x",m),_=!!f.xperiodalignment,v="x"),g=y.vals;for(var x=Math.min(g.length,p.length),S=new Array(x),M=0,C,w=!1,k=0;k<x;k++){var A=p[k]||0,b=!1;(p[k]!==s||n(f.measure[k])||l(f.measure[k]))&&k+1<x&&(p[k+1]!==s||n(f.measure[k+1])||l(f.measure[k+1]))&&(b=!0);var E=S[k]={i:k,p:g[k],s:A,rawS:A,cNext:b};l(f.measure[k])?(M=E.s,E.isSum=!0,E.dir="totals",E.s=M):n(f.measure[k])?(E.isSum=!0,E.dir="totals",E.s=M):(E.isSum=!1,E.dir=E.rawS<0?"decreasing":"increasing",C=E.s,E.s=M+C,M+=C),E.dir==="totals"&&(w=!0),_&&(S[k].orig_p=m[k],S[k][v+"End"]=y.ends[k],S[k][v+"Start"]=y.starts[k]),f.ids&&(E.id=String(f.ids[k])),E.v=(f.base||0)+M}return S.length&&(S[0].hasTotals=w),a(f.text,S,"tx"),a(f.hovertext,S,"htx"),o(S,f),S}}}),uH=de({"src/traces/waterfall/cross_trace_calc.js"(e,r){"use strict";var t=Av().setGroupPositions;r.exports=function(a,o){var s=a._fullLayout,l=a._fullData,n=a.calcdata,u=o.xaxis,c=o.yaxis,f=[],h=[],d=[],p,g;for(g=0;g<l.length;g++){var m=l[g];m.visible===!0&&m.xaxis===u._id&&m.yaxis===c._id&&m.type==="waterfall"&&(p=n[g],m.orientation==="h"?d.push(p):h.push(p),f.push(p))}var y={mode:s.waterfallmode,norm:s.waterfallnorm,gap:s.waterfallgap,groupgap:s.waterfallgroupgap};for(t(a,u,c,h,y),t(a,c,u,d,y),g=0;g<f.length;g++){p=f[g];for(var _=0;_<p.length;_++){var v=p[_];v.isSum===!1&&(v.s0+=_===0?0:p[_-1].s),_+1<p.length&&(p[_].nextP0=p[_+1].p0,p[_].nextS0=p[_+1].s0)}}}}}),cH=de({"src/traces/waterfall/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=cn().BADNUM,s=Sv(),l=dc().clearMinTextSize;r.exports=function(f,h,d,p){var g=f._fullLayout;l("waterfall",g),s.plot(f,h,d,p,{mode:g.waterfallmode,norm:g.waterfallmode,gap:g.waterfallgap,groupgap:g.waterfallgroupgap}),n(f,h,d,p)};function n(c,f,h,d){var p=f.xaxis,g=f.yaxis;i.makeTraceGroups(d,h,"trace bars").each(function(m){var y=t.select(this),_=m[0].trace,v=i.ensureSingle(y,"g","lines");if(!_.connector||!_.connector.visible){v.remove();return}var x=_.orientation==="h",S=_.connector.mode,M=v.selectAll("g.line").data(i.identity);M.enter().append("g").classed("line",!0),M.exit().remove();var C=M.size();M.each(function(w,k){if(!(k!==C-1&&!w.cNext)){var A=u(w,p,g,x),b=A[0],E=A[1],T="";b[0]!==o&&E[0]!==o&&b[1]!==o&&E[1]!==o&&(S==="spanning"&&!w.isSum&&k>0&&(x?T+="M"+b[0]+","+E[1]+"V"+E[0]:T+="M"+b[1]+","+E[0]+"H"+b[0]),S!=="between"&&(w.isSum||k<C-1)&&(x?T+="M"+b[1]+","+E[0]+"V"+E[1]:T+="M"+b[0]+","+E[1]+"H"+b[1]),b[2]!==o&&E[2]!==o&&(x?T+="M"+b[1]+","+E[1]+"V"+E[2]:T+="M"+b[1]+","+E[1]+"H"+b[2])),T===""&&(T="M0,0Z"),i.ensureSingle(t.select(this),"path").attr("d",T).call(a.setClipUrl,f.layerClipId,c)}})})}function u(c,f,h,d){var p=[],g=[],m=d?f:h,y=d?h:f;return p[0]=m.c2p(c.s0,!0),g[0]=y.c2p(c.p0,!0),p[1]=m.c2p(c.s1,!0),g[1]=y.c2p(c.p1,!0),p[2]=m.c2p(c.nextS0,!0),g[2]=y.c2p(c.nextP0,!0),d?[p,g]:[g,p]}}}),fH=de({"src/traces/waterfall/style.js"(e,r){"use strict";var t=Yr(),i=hn(),a=ta(),o=Ap().DESELECTDIM,s=qh(),l=dc().resizeText,n=s.styleTextPoints;function u(c,f,h){var d=h||t.select(c).selectAll('g[class^="waterfalllayer"]').selectAll("g.trace");l(c,d,"waterfall"),d.style("opacity",function(p){return p[0].trace.opacity}),d.each(function(p){var g=t.select(this),m=p[0].trace;g.selectAll(".point > path").each(function(y){if(!y.isBlank){var _=m[y.dir].marker;t.select(this).call(a.fill,_.color).call(a.stroke,_.line.color).call(i.dashLine,_.line.dash,_.line.width).style("opacity",m.selectedpoints&&!y.selected?o:1)}}),n(g,m,c),g.selectAll(".lines").each(function(){var y=m.connector.line;i.lineGroupStyle(t.select(this).selectAll("path"),y.width,y.color,y.dash)})})}r.exports={style:u}}}),hH=de({"src/traces/waterfall/hover.js"(e,r){"use strict";var t=nn().hoverLabelText,i=ta().opacity,a=y1().hoverOnBars,o=w1(),s={increasing:o.INCREASING.SYMBOL,decreasing:o.DECREASING.SYMBOL};r.exports=function(u,c,f,h,d){var p=a(u,c,f,h,d);if(!p)return;var g=p.cd,m=g[0].trace,y=m.orientation==="h",_=y?"x":"y",v=y?u.xa:u.ya;function x(F){return t(v,F,m[_+"hoverformat"])}var S=p.index,M=g[S],C=M.isSum?M.b+M.s:M.rawS;p.initial=M.b+M.s-C,p.delta=C,p.final=p.initial+p.delta;var w=x(Math.abs(p.delta));p.deltaLabel=C<0?"("+w+")":w,p.finalLabel=x(p.final),p.initialLabel=x(p.initial);var k=M.hi||m.hoverinfo,A=[];if(k&&k!=="none"&&k!=="skip"){var b=k==="all",E=k.split("+"),T=function(F){return b||E.indexOf(F)!==-1};M.isSum||(T("final")&&(y?!T("x"):!T("y"))&&A.push(p.finalLabel),T("delta")&&(C<0?A.push(p.deltaLabel+" "+s.decreasing):A.push(p.deltaLabel+" "+s.increasing)),T("initial")&&A.push("Initial: "+p.initialLabel))}return A.length&&(p.extraText=A.join("<br>")),p.color=l(m,M),[p]};function l(n,u){var c=n[u.dir].marker,f=c.color,h=c.line.color,d=c.line.width;if(i(f))return f;if(i(h)&&d)return h}}}),dH=de({"src/traces/waterfall/event_data.js"(e,r){"use strict";r.exports=function(i,a){return i.x="xVal"in a?a.xVal:a.x,i.y="yVal"in a?a.yVal:a.y,"initial"in a&&(i.initial=a.initial),"delta"in a&&(i.delta=a.delta),"final"in a&&(i.final=a.final),a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),i}}}),pH=de({"src/traces/waterfall/index.js"(e,r){"use strict";r.exports={attributes:Qk(),layoutAttributes:eC(),supplyDefaults:tC().supplyDefaults,crossTraceDefaults:tC().crossTraceDefaults,supplyLayoutDefaults:sH(),calc:lH(),crossTraceCalc:uH(),plot:cH(),style:fH().style,hoverPoints:hH(),eventData:dH(),selectPoints:_1(),moduleType:"trace",name:"waterfall",basePlotModule:ml(),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}}}),vH=de({"lib/waterfall.js"(e,r){"use strict";r.exports=pH()}}),T1=de({"src/traces/image/constants.js"(e,r){"use strict";r.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:["","",""]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:["","","",""]},rgba256:{colormodel:"rgba",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:["","","",""]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var i=t.slice(0,3);return i[1]=i[1]+"%",i[2]=i[2]+"%",i},suffix:["\xB0","%","%"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var i=t.slice(0,4);return i[1]=i[1]+"%",i[2]=i[2]+"%",i},suffix:["\xB0","%","%",""]}}}}}),_3={};Mr(_3,{default:()=>sC});var rC,iC,x3,aC,nC,b3,w3,T3,oC,sC,lC=Ir({"src/traces/image/attributes.ts"(){"use strict";rC=Vr(fn()),iC=Vr(ri()),x3=Vr(Vo()),aC=Vr(tl()),nC=Vr(T1()),b3=["rgb","rgba","rgba256","hsl","hsla"],w3=[],T3=[];for(let e of b3){let r=nC.colormodel[e];w3.push(`For the \`${e}\` colormodel, it is [${(r.zminDflt||r.min).join(", ")}].`),T3.push(`For the \`${e}\` colormodel, it is [${(r.zmaxDflt||r.max).join(", ")}].`)}oC={source:{valType:"string",editType:"calc",description:["Specifies the data URI of the image to be visualized.",'The URI consists of "data:image/[<media subtype\\\\>][;base64\\\\],<data\\\\>"'].join(" ")},z:{valType:"data_array",editType:"calc",description:["A 2-dimensional array in which each element is an array of 3 or 4 numbers representing a color."].join(" ")},colormodel:{valType:"enumerated",values:b3,editType:"calc",description:["Color model used to map the numerical color components described in `z` into colors.","If `source` is specified, this attribute will be set to `rgba256`","otherwise it defaults to `rgb`."].join(" ")},zsmooth:{valType:"enumerated",values:["fast",!1],dflt:!1,editType:"plot",description:["Picks a smoothing algorithm used to smooth `z` data.","This only applies for image traces that use the `source` attribute."].join(" ")},zmin:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc",description:["Array defining the lower bound for each color component.","Note that the default value will depend on the colormodel.",w3.join(" ")].join(" ")},zmax:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc",description:["Array defining the higher bound for each color component.","Note that the default value will depend on the colormodel.",T3.join(" ")].join(" ")},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",description:["Set the image's x position. The left edge of the image","(or the right edge if the x axis is reversed or dx is negative)","will be found at xmin=x0-dx/2"].join(" ")},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",description:["Set the image's y position. The top edge of the image","(or the bottom edge if the y axis is NOT reversed or if dy is negative)","will be found at ymin=y0-dy/2. By default when an image trace is","included, the y axis will be reversed so that the image is right-side-up,","but you can disable this by setting yaxis.autorange=true or by providing","an explicit y axis range."].join(" ")},dx:{valType:"number",dflt:1,editType:"calc",description:"Set the pixel's horizontal size."},dy:{valType:"number",dflt:1,editType:"calc",description:"Set the pixel's vertical size"},text:{valType:"data_array",editType:"plot",description:"Sets the text elements associated with each z value."},hovertext:{valType:"data_array",editType:"plot",description:"Same as `text`."},hoverinfo:(0,rC.extendFlat)({},iC.default.hoverinfo,{flags:["x","y","z","color","name","text"],dflt:"x+y+z+text+name"}),hovertemplate:(0,x3.hovertemplateAttrs)({},{keys:["z","color","colormodel"]}),hovertemplatefallback:(0,x3.templatefallbackAttrs)(),zorder:aC.zorder},sC=oC}}),mH=de({"src/traces/image/defaults.js"(e,r){"use strict";var t=Qt(),i=(lC(),ti(_3)).default,a=T1(),o=Mp().IMAGE_URL_PREFIX;r.exports=function(l,n){function u(h,d){return t.coerce(l,n,i,h,d)}u("source"),n.source&&!n.source.match(o)&&delete n.source,n._hasSource=!!n.source;var c=u("z");if(n._hasZ=!(c===void 0||!c.length||!c[0]||!c[0].length),!n._hasZ&&!n._hasSource){n.visible=!1;return}u("x0"),u("y0"),u("dx"),u("dy");var f;n._hasZ?(u("colormodel","rgb"),f=a.colormodel[n.colormodel],u("zmin",f.zminDflt||f.min),u("zmax",f.zmaxDflt||f.max)):n._hasSource&&(n.colormodel="rgba256",f=a.colormodel[n.colormodel],n.zmin=f.zminDflt,n.zmax=f.zmaxDflt),u("zsmooth"),u("text"),u("hovertext"),u("hovertemplate"),u("hovertemplatefallback"),n._length=null,u("zorder")}}}),Sp=de({"node_modules/inherits/inherits_browser.js"(e,r){typeof Object.create=="function"?r.exports=function(i,a){a&&(i.super_=a,i.prototype=Object.create(a.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}))}:r.exports=function(i,a){if(a){i.super_=a;var o=function(){};o.prototype=a.prototype,i.prototype=new o,i.prototype.constructor=i}}}}),uC=de({"node_modules/readable-stream/lib/internal/streams/stream-browser.js"(e,r){r.exports=yv().EventEmitter}}),gH=de({"node_modules/base64-js/index.js"(e){"use strict";e.byteLength=n,e.toByteArray=c,e.fromByteArray=d;var r=[],t=[],i=typeof Uint8Array<"u"?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(o=0,s=a.length;o<s;++o)r[o]=a[o],t[a.charCodeAt(o)]=o;var o,s;t[45]=62,t[95]=63;function l(p){var g=p.length;if(g%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var m=p.indexOf("=");m===-1&&(m=g);var y=m===g?0:4-m%4;return[m,y]}function n(p){var g=l(p),m=g[0],y=g[1];return(m+y)*3/4-y}function u(p,g,m){return(g+m)*3/4-m}function c(p){var g,m=l(p),y=m[0],_=m[1],v=new i(u(p,y,_)),x=0,S=_>0?y-4:y,M;for(M=0;M<S;M+=4)g=t[p.charCodeAt(M)]<<18|t[p.charCodeAt(M+1)]<<12|t[p.charCodeAt(M+2)]<<6|t[p.charCodeAt(M+3)],v[x++]=g>>16&255,v[x++]=g>>8&255,v[x++]=g&255;return _===2&&(g=t[p.charCodeAt(M)]<<2|t[p.charCodeAt(M+1)]>>4,v[x++]=g&255),_===1&&(g=t[p.charCodeAt(M)]<<10|t[p.charCodeAt(M+1)]<<4|t[p.charCodeAt(M+2)]>>2,v[x++]=g>>8&255,v[x++]=g&255),v}function f(p){return r[p>>18&63]+r[p>>12&63]+r[p>>6&63]+r[p&63]}function h(p,g,m){for(var y,_=[],v=g;v<m;v+=3)y=(p[v]<<16&16711680)+(p[v+1]<<8&65280)+(p[v+2]&255),_.push(f(y));return _.join("")}function d(p){for(var g,m=p.length,y=m%3,_=[],v=16383,x=0,S=m-y;x<S;x+=v)_.push(h(p,x,x+v>S?S:x+v));return y===1?(g=p[m-1],_.push(r[g>>2]+r[g<<4&63]+"==")):y===2&&(g=(p[m-2]<<8)+p[m-1],_.push(r[g>>10]+r[g>>4&63]+r[g<<2&63]+"=")),_.join("")}}}),yH=de({"node_modules/ieee754/index.js"(e){e.read=function(r,t,i,a,o){var s,l,n=o*8-a-1,u=(1<<n)-1,c=u>>1,f=-7,h=i?o-1:0,d=i?-1:1,p=r[t+h];for(h+=d,s=p&(1<<-f)-1,p>>=-f,f+=n;f>0;s=s*256+r[t+h],h+=d,f-=8);for(l=s&(1<<-f)-1,s>>=-f,f+=a;f>0;l=l*256+r[t+h],h+=d,f-=8);if(s===0)s=1-c;else{if(s===u)return l?NaN:(p?-1:1)*(1/0);l=l+Math.pow(2,a),s=s-c}return(p?-1:1)*l*Math.pow(2,s-a)},e.write=function(r,t,i,a,o,s){var l,n,u,c=s*8-o-1,f=(1<<c)-1,h=f>>1,d=o===23?Math.pow(2,-24)-Math.pow(2,-77):0,p=a?0:s-1,g=a?1:-1,m=t<0||t===0&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(n=isNaN(t)?1:0,l=f):(l=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-l))<1&&(l--,u*=2),l+h>=1?t+=d/u:t+=d*Math.pow(2,1-h),t*u>=2&&(l++,u/=2),l+h>=f?(n=0,l=f):l+h>=1?(n=(t*u-1)*Math.pow(2,o),l=l+h):(n=t*Math.pow(2,h-1)*Math.pow(2,o),l=0));o>=8;r[i+p]=n&255,p+=g,n/=256,o-=8);for(l=l<<o|n,c+=o;c>0;r[i+p]=l&255,p+=g,l/=256,c-=8);r[i+p-g]|=m*128}}}),kv=de({"node_modules/buffer/index.js"(e){"use strict";var r=gH(),t=yH(),i=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=l,e.SlowBuffer=_,e.INSPECT_MAX_BYTES=50;var a=2147483647;e.kMaxLength=a,l.TYPED_ARRAY_SUPPORT=o(),!l.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function o(){try{let ee=new Uint8Array(1),ie={foo:function(){return 42}};return Object.setPrototypeOf(ie,Uint8Array.prototype),Object.setPrototypeOf(ee,ie),ee.foo()===42}catch{return!1}}Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,"offset",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}});function s(ee){if(ee>a)throw new RangeError('The value "'+ee+'" is invalid for option "size"');let ie=new Uint8Array(ee);return Object.setPrototypeOf(ie,l.prototype),ie}function l(ee,ie,Q){if(typeof ee=="number"){if(typeof ie=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return f(ee)}return n(ee,ie,Q)}l.poolSize=8192;function n(ee,ie,Q){if(typeof ee=="string")return h(ee,ie);if(ArrayBuffer.isView(ee))return p(ee);if(ee==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof ee);if(pe(ee,ArrayBuffer)||ee&&pe(ee.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(pe(ee,SharedArrayBuffer)||ee&&pe(ee.buffer,SharedArrayBuffer)))return g(ee,ie,Q);if(typeof ee=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let ue=ee.valueOf&&ee.valueOf();if(ue!=null&&ue!==ee)return l.from(ue,ie,Q);let ge=m(ee);if(ge)return ge;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof ee[Symbol.toPrimitive]=="function")return l.from(ee[Symbol.toPrimitive]("string"),ie,Q);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof ee)}l.from=function(ee,ie,Q){return n(ee,ie,Q)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array);function u(ee){if(typeof ee!="number")throw new TypeError('"size" argument must be of type number');if(ee<0)throw new RangeError('The value "'+ee+'" is invalid for option "size"')}function c(ee,ie,Q){return u(ee),ee<=0?s(ee):ie!==void 0?typeof Q=="string"?s(ee).fill(ie,Q):s(ee).fill(ie):s(ee)}l.alloc=function(ee,ie,Q){return c(ee,ie,Q)};function f(ee){return u(ee),s(ee<0?0:y(ee)|0)}l.allocUnsafe=function(ee){return f(ee)},l.allocUnsafeSlow=function(ee){return f(ee)};function h(ee,ie){if((typeof ie!="string"||ie==="")&&(ie="utf8"),!l.isEncoding(ie))throw new TypeError("Unknown encoding: "+ie);let Q=v(ee,ie)|0,ue=s(Q),ge=ue.write(ee,ie);return ge!==Q&&(ue=ue.slice(0,ge)),ue}function d(ee){let ie=ee.length<0?0:y(ee.length)|0,Q=s(ie);for(let ue=0;ue<ie;ue+=1)Q[ue]=ee[ue]&255;return Q}function p(ee){if(pe(ee,Uint8Array)){let ie=new Uint8Array(ee);return g(ie.buffer,ie.byteOffset,ie.byteLength)}return d(ee)}function g(ee,ie,Q){if(ie<0||ee.byteLength<ie)throw new RangeError('"offset" is outside of buffer bounds');if(ee.byteLength<ie+(Q||0))throw new RangeError('"length" is outside of buffer bounds');let ue;return ie===void 0&&Q===void 0?ue=new Uint8Array(ee):Q===void 0?ue=new Uint8Array(ee,ie):ue=new Uint8Array(ee,ie,Q),Object.setPrototypeOf(ue,l.prototype),ue}function m(ee){if(l.isBuffer(ee)){let ie=y(ee.length)|0,Q=s(ie);return Q.length===0||ee.copy(Q,0,0,ie),Q}if(ee.length!==void 0)return typeof ee.length!="number"||xe(ee.length)?s(0):d(ee);if(ee.type==="Buffer"&&Array.isArray(ee.data))return d(ee.data)}function y(ee){if(ee>=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return ee|0}function _(ee){return+ee!=ee&&(ee=0),l.alloc(+ee)}l.isBuffer=function(ie){return ie!=null&&ie._isBuffer===!0&&ie!==l.prototype},l.compare=function(ie,Q){if(pe(ie,Uint8Array)&&(ie=l.from(ie,ie.offset,ie.byteLength)),pe(Q,Uint8Array)&&(Q=l.from(Q,Q.offset,Q.byteLength)),!l.isBuffer(ie)||!l.isBuffer(Q))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(ie===Q)return 0;let ue=ie.length,ge=Q.length;for(let Me=0,Te=Math.min(ue,ge);Me<Te;++Me)if(ie[Me]!==Q[Me]){ue=ie[Me],ge=Q[Me];break}return ue<ge?-1:ge<ue?1:0},l.isEncoding=function(ie){switch(String(ie).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},l.concat=function(ie,Q){if(!Array.isArray(ie))throw new TypeError('"list" argument must be an Array of Buffers');if(ie.length===0)return l.alloc(0);let ue;if(Q===void 0)for(Q=0,ue=0;ue<ie.length;++ue)Q+=ie[ue].length;let ge=l.allocUnsafe(Q),Me=0;for(ue=0;ue<ie.length;++ue){let Te=ie[ue];if(pe(Te,Uint8Array))Me+Te.length>ge.length?(l.isBuffer(Te)||(Te=l.from(Te)),Te.copy(ge,Me)):Uint8Array.prototype.set.call(ge,Te,Me);else if(l.isBuffer(Te))Te.copy(ge,Me);else throw new TypeError('"list" argument must be an Array of Buffers');Me+=Te.length}return ge};function v(ee,ie){if(l.isBuffer(ee))return ee.length;if(ArrayBuffer.isView(ee)||pe(ee,ArrayBuffer))return ee.byteLength;if(typeof ee!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof ee);let Q=ee.length,ue=arguments.length>2&&arguments[2]===!0;if(!ue&&Q===0)return 0;let ge=!1;for(;;)switch(ie){case"ascii":case"latin1":case"binary":return Q;case"utf8":case"utf-8":return te(ee).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Q*2;case"hex":return Q>>>1;case"base64":return le(ee).length;default:if(ge)return ue?-1:te(ee).length;ie=(""+ie).toLowerCase(),ge=!0}}l.byteLength=v;function x(ee,ie,Q){let ue=!1;if((ie===void 0||ie<0)&&(ie=0),ie>this.length||((Q===void 0||Q>this.length)&&(Q=this.length),Q<=0)||(Q>>>=0,ie>>>=0,Q<=ie))return"";for(ee||(ee="utf8");;)switch(ee){case"hex":return I(this,ie,Q);case"utf8":case"utf-8":return F(this,ie,Q);case"ascii":return P(this,ie,Q);case"latin1":case"binary":return z(this,ie,Q);case"base64":return T(this,ie,Q);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,ie,Q);default:if(ue)throw new TypeError("Unknown encoding: "+ee);ee=(ee+"").toLowerCase(),ue=!0}}l.prototype._isBuffer=!0;function S(ee,ie,Q){let ue=ee[ie];ee[ie]=ee[Q],ee[Q]=ue}l.prototype.swap16=function(){let ie=this.length;if(ie%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let Q=0;Q<ie;Q+=2)S(this,Q,Q+1);return this},l.prototype.swap32=function(){let ie=this.length;if(ie%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let Q=0;Q<ie;Q+=4)S(this,Q,Q+3),S(this,Q+1,Q+2);return this},l.prototype.swap64=function(){let ie=this.length;if(ie%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let Q=0;Q<ie;Q+=8)S(this,Q,Q+7),S(this,Q+1,Q+6),S(this,Q+2,Q+5),S(this,Q+3,Q+4);return this},l.prototype.toString=function(){let ie=this.length;return ie===0?"":arguments.length===0?F(this,0,ie):x.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(ie){if(!l.isBuffer(ie))throw new TypeError("Argument must be a Buffer");return this===ie?!0:l.compare(this,ie)===0},l.prototype.inspect=function(){let ie="",Q=e.INSPECT_MAX_BYTES;return ie=this.toString("hex",0,Q).replace(/(.{2})/g,"$1 ").trim(),this.length>Q&&(ie+=" ... "),"<Buffer "+ie+">"},i&&(l.prototype[i]=l.prototype.inspect),l.prototype.compare=function(ie,Q,ue,ge,Me){if(pe(ie,Uint8Array)&&(ie=l.from(ie,ie.offset,ie.byteLength)),!l.isBuffer(ie))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof ie);if(Q===void 0&&(Q=0),ue===void 0&&(ue=ie?ie.length:0),ge===void 0&&(ge=0),Me===void 0&&(Me=this.length),Q<0||ue>ie.length||ge<0||Me>this.length)throw new RangeError("out of range index");if(ge>=Me&&Q>=ue)return 0;if(ge>=Me)return-1;if(Q>=ue)return 1;if(Q>>>=0,ue>>>=0,ge>>>=0,Me>>>=0,this===ie)return 0;let Te=Me-ge,je=ue-Q,Ve=Math.min(Te,je),Ze=this.slice(ge,Me),Ke=ie.slice(Q,ue);for(let vt=0;vt<Ve;++vt)if(Ze[vt]!==Ke[vt]){Te=Ze[vt],je=Ke[vt];break}return Te<je?-1:je<Te?1:0};function M(ee,ie,Q,ue,ge){if(ee.length===0)return-1;if(typeof Q=="string"?(ue=Q,Q=0):Q>2147483647?Q=2147483647:Q<-2147483648&&(Q=-2147483648),Q=+Q,xe(Q)&&(Q=ge?0:ee.length-1),Q<0&&(Q=ee.length+Q),Q>=ee.length){if(ge)return-1;Q=ee.length-1}else if(Q<0)if(ge)Q=0;else return-1;if(typeof ie=="string"&&(ie=l.from(ie,ue)),l.isBuffer(ie))return ie.length===0?-1:C(ee,ie,Q,ue,ge);if(typeof ie=="number")return ie=ie&255,typeof Uint8Array.prototype.indexOf=="function"?ge?Uint8Array.prototype.indexOf.call(ee,ie,Q):Uint8Array.prototype.lastIndexOf.call(ee,ie,Q):C(ee,[ie],Q,ue,ge);throw new TypeError("val must be string, number or Buffer")}function C(ee,ie,Q,ue,ge){let Me=1,Te=ee.length,je=ie.length;if(ue!==void 0&&(ue=String(ue).toLowerCase(),ue==="ucs2"||ue==="ucs-2"||ue==="utf16le"||ue==="utf-16le")){if(ee.length<2||ie.length<2)return-1;Me=2,Te/=2,je/=2,Q/=2}function Ve(Ke,vt){return Me===1?Ke[vt]:Ke.readUInt16BE(vt*Me)}let Ze;if(ge){let Ke=-1;for(Ze=Q;Ze<Te;Ze++)if(Ve(ee,Ze)===Ve(ie,Ke===-1?0:Ze-Ke)){if(Ke===-1&&(Ke=Ze),Ze-Ke+1===je)return Ke*Me}else Ke!==-1&&(Ze-=Ze-Ke),Ke=-1}else for(Q+je>Te&&(Q=Te-je),Ze=Q;Ze>=0;Ze--){let Ke=!0;for(let vt=0;vt<je;vt++)if(Ve(ee,Ze+vt)!==Ve(ie,vt)){Ke=!1;break}if(Ke)return Ze}return-1}l.prototype.includes=function(ie,Q,ue){return this.indexOf(ie,Q,ue)!==-1},l.prototype.indexOf=function(ie,Q,ue){return M(this,ie,Q,ue,!0)},l.prototype.lastIndexOf=function(ie,Q,ue){return M(this,ie,Q,ue,!1)};function w(ee,ie,Q,ue){Q=Number(Q)||0;let ge=ee.length-Q;ue?(ue=Number(ue),ue>ge&&(ue=ge)):ue=ge;let Me=ie.length;ue>Me/2&&(ue=Me/2);let Te;for(Te=0;Te<ue;++Te){let je=parseInt(ie.substr(Te*2,2),16);if(xe(je))return Te;ee[Q+Te]=je}return Te}function k(ee,ie,Q,ue){return ce(te(ie,ee.length-Q),ee,Q,ue)}function A(ee,ie,Q,ue){return ce(ne(ie),ee,Q,ue)}function b(ee,ie,Q,ue){return ce(le(ie),ee,Q,ue)}function E(ee,ie,Q,ue){return ce(se(ie,ee.length-Q),ee,Q,ue)}l.prototype.write=function(ie,Q,ue,ge){if(Q===void 0)ge="utf8",ue=this.length,Q=0;else if(ue===void 0&&typeof Q=="string")ge=Q,ue=this.length,Q=0;else if(isFinite(Q))Q=Q>>>0,isFinite(ue)?(ue=ue>>>0,ge===void 0&&(ge="utf8")):(ge=ue,ue=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let Me=this.length-Q;if((ue===void 0||ue>Me)&&(ue=Me),ie.length>0&&(ue<0||Q<0)||Q>this.length)throw new RangeError("Attempt to write outside buffer bounds");ge||(ge="utf8");let Te=!1;for(;;)switch(ge){case"hex":return w(this,ie,Q,ue);case"utf8":case"utf-8":return k(this,ie,Q,ue);case"ascii":case"latin1":case"binary":return A(this,ie,Q,ue);case"base64":return b(this,ie,Q,ue);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,ie,Q,ue);default:if(Te)throw new TypeError("Unknown encoding: "+ge);ge=(""+ge).toLowerCase(),Te=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(ee,ie,Q){return ie===0&&Q===ee.length?r.fromByteArray(ee):r.fromByteArray(ee.slice(ie,Q))}function F(ee,ie,Q){Q=Math.min(ee.length,Q);let ue=[],ge=ie;for(;ge<Q;){let Me=ee[ge],Te=null,je=Me>239?4:Me>223?3:Me>191?2:1;if(ge+je<=Q){let Ve,Ze,Ke,vt;switch(je){case 1:Me<128&&(Te=Me);break;case 2:Ve=ee[ge+1],(Ve&192)===128&&(vt=(Me&31)<<6|Ve&63,vt>127&&(Te=vt));break;case 3:Ve=ee[ge+1],Ze=ee[ge+2],(Ve&192)===128&&(Ze&192)===128&&(vt=(Me&15)<<12|(Ve&63)<<6|Ze&63,vt>2047&&(vt<55296||vt>57343)&&(Te=vt));break;case 4:Ve=ee[ge+1],Ze=ee[ge+2],Ke=ee[ge+3],(Ve&192)===128&&(Ze&192)===128&&(Ke&192)===128&&(vt=(Me&15)<<18|(Ve&63)<<12|(Ze&63)<<6|Ke&63,vt>65535&&vt<1114112&&(Te=vt))}}Te===null?(Te=65533,je=1):Te>65535&&(Te-=65536,ue.push(Te>>>10&1023|55296),Te=56320|Te&1023),ue.push(Te),ge+=je}return R(ue)}var D=4096;function R(ee){let ie=ee.length;if(ie<=D)return String.fromCharCode.apply(String,ee);let Q="",ue=0;for(;ue<ie;)Q+=String.fromCharCode.apply(String,ee.slice(ue,ue+=D));return Q}function P(ee,ie,Q){let ue="";Q=Math.min(ee.length,Q);for(let ge=ie;ge<Q;++ge)ue+=String.fromCharCode(ee[ge]&127);return ue}function z(ee,ie,Q){let ue="";Q=Math.min(ee.length,Q);for(let ge=ie;ge<Q;++ge)ue+=String.fromCharCode(ee[ge]);return ue}function I(ee,ie,Q){let ue=ee.length;(!ie||ie<0)&&(ie=0),(!Q||Q<0||Q>ue)&&(Q=ue);let ge="";for(let Me=ie;Me<Q;++Me)ge+=ye[ee[Me]];return ge}function L(ee,ie,Q){let ue=ee.slice(ie,Q),ge="";for(let Me=0;Me<ue.length-1;Me+=2)ge+=String.fromCharCode(ue[Me]+ue[Me+1]*256);return ge}l.prototype.slice=function(ie,Q){let ue=this.length;ie=~~ie,Q=Q===void 0?ue:~~Q,ie<0?(ie+=ue,ie<0&&(ie=0)):ie>ue&&(ie=ue),Q<0?(Q+=ue,Q<0&&(Q=0)):Q>ue&&(Q=ue),Q<ie&&(Q=ie);let ge=this.subarray(ie,Q);return Object.setPrototypeOf(ge,l.prototype),ge};function B(ee,ie,Q){if(ee%1!==0||ee<0)throw new RangeError("offset is not uint");if(ee+ie>Q)throw new RangeError("Trying to access beyond buffer length")}l.prototype.readUintLE=l.prototype.readUIntLE=function(ie,Q,ue){ie=ie>>>0,Q=Q>>>0,ue||B(ie,Q,this.length);let ge=this[ie],Me=1,Te=0;for(;++Te<Q&&(Me*=256);)ge+=this[ie+Te]*Me;return ge},l.prototype.readUintBE=l.prototype.readUIntBE=function(ie,Q,ue){ie=ie>>>0,Q=Q>>>0,ue||B(ie,Q,this.length);let ge=this[ie+--Q],Me=1;for(;Q>0&&(Me*=256);)ge+=this[ie+--Q]*Me;return ge},l.prototype.readUint8=l.prototype.readUInt8=function(ie,Q){return ie=ie>>>0,Q||B(ie,1,this.length),this[ie]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(ie,Q){return ie=ie>>>0,Q||B(ie,2,this.length),this[ie]|this[ie+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(ie,Q){return ie=ie>>>0,Q||B(ie,2,this.length),this[ie]<<8|this[ie+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(ie,Q){return ie=ie>>>0,Q||B(ie,4,this.length),(this[ie]|this[ie+1]<<8|this[ie+2]<<16)+this[ie+3]*16777216},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(ie,Q){return ie=ie>>>0,Q||B(ie,4,this.length),this[ie]*16777216+(this[ie+1]<<16|this[ie+2]<<8|this[ie+3])},l.prototype.readBigUInt64LE=fe(function(ie){ie=ie>>>0,j(ie,"offset");let Q=this[ie],ue=this[ie+7];(Q===void 0||ue===void 0)&&q(ie,this.length-8);let ge=Q+this[++ie]*2**8+this[++ie]*2**16+this[++ie]*2**24,Me=this[++ie]+this[++ie]*2**8+this[++ie]*2**16+ue*2**24;return BigInt(ge)+(BigInt(Me)<<BigInt(32))}),l.prototype.readBigUInt64BE=fe(function(ie){ie=ie>>>0,j(ie,"offset");let Q=this[ie],ue=this[ie+7];(Q===void 0||ue===void 0)&&q(ie,this.length-8);let ge=Q*2**24+this[++ie]*2**16+this[++ie]*2**8+this[++ie],Me=this[++ie]*2**24+this[++ie]*2**16+this[++ie]*2**8+ue;return(BigInt(ge)<<BigInt(32))+BigInt(Me)}),l.prototype.readIntLE=function(ie,Q,ue){ie=ie>>>0,Q=Q>>>0,ue||B(ie,Q,this.length);let ge=this[ie],Me=1,Te=0;for(;++Te<Q&&(Me*=256);)ge+=this[ie+Te]*Me;return Me*=128,ge>=Me&&(ge-=Math.pow(2,8*Q)),ge},l.prototype.readIntBE=function(ie,Q,ue){ie=ie>>>0,Q=Q>>>0,ue||B(ie,Q,this.length);let ge=Q,Me=1,Te=this[ie+--ge];for(;ge>0&&(Me*=256);)Te+=this[ie+--ge]*Me;return Me*=128,Te>=Me&&(Te-=Math.pow(2,8*Q)),Te},l.prototype.readInt8=function(ie,Q){return ie=ie>>>0,Q||B(ie,1,this.length),this[ie]&128?(255-this[ie]+1)*-1:this[ie]},l.prototype.readInt16LE=function(ie,Q){ie=ie>>>0,Q||B(ie,2,this.length);let ue=this[ie]|this[ie+1]<<8;return ue&32768?ue|4294901760:ue},l.prototype.readInt16BE=function(ie,Q){ie=ie>>>0,Q||B(ie,2,this.length);let ue=this[ie+1]|this[ie]<<8;return ue&32768?ue|4294901760:ue},l.prototype.readInt32LE=function(ie,Q){return ie=ie>>>0,Q||B(ie,4,this.length),this[ie]|this[ie+1]<<8|this[ie+2]<<16|this[ie+3]<<24},l.prototype.readInt32BE=function(ie,Q){return ie=ie>>>0,Q||B(ie,4,this.length),this[ie]<<24|this[ie+1]<<16|this[ie+2]<<8|this[ie+3]},l.prototype.readBigInt64LE=fe(function(ie){ie=ie>>>0,j(ie,"offset");let Q=this[ie],ue=this[ie+7];(Q===void 0||ue===void 0)&&q(ie,this.length-8);let ge=this[ie+4]+this[ie+5]*2**8+this[ie+6]*2**16+(ue<<24);return(BigInt(ge)<<BigInt(32))+BigInt(Q+this[++ie]*2**8+this[++ie]*2**16+this[++ie]*2**24)}),l.prototype.readBigInt64BE=fe(function(ie){ie=ie>>>0,j(ie,"offset");let Q=this[ie],ue=this[ie+7];(Q===void 0||ue===void 0)&&q(ie,this.length-8);let ge=(Q<<24)+this[++ie]*2**16+this[++ie]*2**8+this[++ie];return(BigInt(ge)<<BigInt(32))+BigInt(this[++ie]*2**24+this[++ie]*2**16+this[++ie]*2**8+ue)}),l.prototype.readFloatLE=function(ie,Q){return ie=ie>>>0,Q||B(ie,4,this.length),t.read(this,ie,!0,23,4)},l.prototype.readFloatBE=function(ie,Q){return ie=ie>>>0,Q||B(ie,4,this.length),t.read(this,ie,!1,23,4)},l.prototype.readDoubleLE=function(ie,Q){return ie=ie>>>0,Q||B(ie,8,this.length),t.read(this,ie,!0,52,8)},l.prototype.readDoubleBE=function(ie,Q){return ie=ie>>>0,Q||B(ie,8,this.length),t.read(this,ie,!1,52,8)};function O(ee,ie,Q,ue,ge,Me){if(!l.isBuffer(ee))throw new TypeError('"buffer" argument must be a Buffer instance');if(ie>ge||ie<Me)throw new RangeError('"value" argument is out of bounds');if(Q+ue>ee.length)throw new RangeError("Index out of range")}l.prototype.writeUintLE=l.prototype.writeUIntLE=function(ie,Q,ue,ge){if(ie=+ie,Q=Q>>>0,ue=ue>>>0,!ge){let je=Math.pow(2,8*ue)-1;O(this,ie,Q,ue,je,0)}let Me=1,Te=0;for(this[Q]=ie&255;++Te<ue&&(Me*=256);)this[Q+Te]=ie/Me&255;return Q+ue},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(ie,Q,ue,ge){if(ie=+ie,Q=Q>>>0,ue=ue>>>0,!ge){let je=Math.pow(2,8*ue)-1;O(this,ie,Q,ue,je,0)}let Me=ue-1,Te=1;for(this[Q+Me]=ie&255;--Me>=0&&(Te*=256);)this[Q+Me]=ie/Te&255;return Q+ue},l.prototype.writeUint8=l.prototype.writeUInt8=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,1,255,0),this[Q]=ie&255,Q+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,2,65535,0),this[Q]=ie&255,this[Q+1]=ie>>>8,Q+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,2,65535,0),this[Q]=ie>>>8,this[Q+1]=ie&255,Q+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,4,4294967295,0),this[Q+3]=ie>>>24,this[Q+2]=ie>>>16,this[Q+1]=ie>>>8,this[Q]=ie&255,Q+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,4,4294967295,0),this[Q]=ie>>>24,this[Q+1]=ie>>>16,this[Q+2]=ie>>>8,this[Q+3]=ie&255,Q+4};function G(ee,ie,Q,ue,ge){V(ie,ue,ge,ee,Q,7);let Me=Number(ie&BigInt(4294967295));ee[Q++]=Me,Me=Me>>8,ee[Q++]=Me,Me=Me>>8,ee[Q++]=Me,Me=Me>>8,ee[Q++]=Me;let Te=Number(ie>>BigInt(32)&BigInt(4294967295));return ee[Q++]=Te,Te=Te>>8,ee[Q++]=Te,Te=Te>>8,ee[Q++]=Te,Te=Te>>8,ee[Q++]=Te,Q}function W(ee,ie,Q,ue,ge){V(ie,ue,ge,ee,Q,7);let Me=Number(ie&BigInt(4294967295));ee[Q+7]=Me,Me=Me>>8,ee[Q+6]=Me,Me=Me>>8,ee[Q+5]=Me,Me=Me>>8,ee[Q+4]=Me;let Te=Number(ie>>BigInt(32)&BigInt(4294967295));return ee[Q+3]=Te,Te=Te>>8,ee[Q+2]=Te,Te=Te>>8,ee[Q+1]=Te,Te=Te>>8,ee[Q]=Te,Q+8}l.prototype.writeBigUInt64LE=fe(function(ie,Q=0){return G(this,ie,Q,BigInt(0),BigInt("0xffffffffffffffff"))}),l.prototype.writeBigUInt64BE=fe(function(ie,Q=0){return W(this,ie,Q,BigInt(0),BigInt("0xffffffffffffffff"))}),l.prototype.writeIntLE=function(ie,Q,ue,ge){if(ie=+ie,Q=Q>>>0,!ge){let Ve=Math.pow(2,8*ue-1);O(this,ie,Q,ue,Ve-1,-Ve)}let Me=0,Te=1,je=0;for(this[Q]=ie&255;++Me<ue&&(Te*=256);)ie<0&&je===0&&this[Q+Me-1]!==0&&(je=1),this[Q+Me]=(ie/Te>>0)-je&255;return Q+ue},l.prototype.writeIntBE=function(ie,Q,ue,ge){if(ie=+ie,Q=Q>>>0,!ge){let Ve=Math.pow(2,8*ue-1);O(this,ie,Q,ue,Ve-1,-Ve)}let Me=ue-1,Te=1,je=0;for(this[Q+Me]=ie&255;--Me>=0&&(Te*=256);)ie<0&&je===0&&this[Q+Me+1]!==0&&(je=1),this[Q+Me]=(ie/Te>>0)-je&255;return Q+ue},l.prototype.writeInt8=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,1,127,-128),ie<0&&(ie=255+ie+1),this[Q]=ie&255,Q+1},l.prototype.writeInt16LE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,2,32767,-32768),this[Q]=ie&255,this[Q+1]=ie>>>8,Q+2},l.prototype.writeInt16BE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,2,32767,-32768),this[Q]=ie>>>8,this[Q+1]=ie&255,Q+2},l.prototype.writeInt32LE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,4,2147483647,-2147483648),this[Q]=ie&255,this[Q+1]=ie>>>8,this[Q+2]=ie>>>16,this[Q+3]=ie>>>24,Q+4},l.prototype.writeInt32BE=function(ie,Q,ue){return ie=+ie,Q=Q>>>0,ue||O(this,ie,Q,4,2147483647,-2147483648),ie<0&&(ie=4294967295+ie+1),this[Q]=ie>>>24,this[Q+1]=ie>>>16,this[Q+2]=ie>>>8,this[Q+3]=ie&255,Q+4},l.prototype.writeBigInt64LE=fe(function(ie,Q=0){return G(this,ie,Q,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),l.prototype.writeBigInt64BE=fe(function(ie,Q=0){return W(this,ie,Q,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function X(ee,ie,Q,ue,ge,Me){if(Q+ue>ee.length)throw new RangeError("Index out of range");if(Q<0)throw new RangeError("Index out of range")}function Z(ee,ie,Q,ue,ge){return ie=+ie,Q=Q>>>0,ge||X(ee,ie,Q,4,34028234663852886e22,-34028234663852886e22),t.write(ee,ie,Q,ue,23,4),Q+4}l.prototype.writeFloatLE=function(ie,Q,ue){return Z(this,ie,Q,!0,ue)},l.prototype.writeFloatBE=function(ie,Q,ue){return Z(this,ie,Q,!1,ue)};function J(ee,ie,Q,ue,ge){return ie=+ie,Q=Q>>>0,ge||X(ee,ie,Q,8,17976931348623157e292,-17976931348623157e292),t.write(ee,ie,Q,ue,52,8),Q+8}l.prototype.writeDoubleLE=function(ie,Q,ue){return J(this,ie,Q,!0,ue)},l.prototype.writeDoubleBE=function(ie,Q,ue){return J(this,ie,Q,!1,ue)},l.prototype.copy=function(ie,Q,ue,ge){if(!l.isBuffer(ie))throw new TypeError("argument should be a Buffer");if(ue||(ue=0),!ge&&ge!==0&&(ge=this.length),Q>=ie.length&&(Q=ie.length),Q||(Q=0),ge>0&&ge<ue&&(ge=ue),ge===ue||ie.length===0||this.length===0)return 0;if(Q<0)throw new RangeError("targetStart out of bounds");if(ue<0||ue>=this.length)throw new RangeError("Index out of range");if(ge<0)throw new RangeError("sourceEnd out of bounds");ge>this.length&&(ge=this.length),ie.length-Q<ge-ue&&(ge=ie.length-Q+ue);let Me=ge-ue;return this===ie&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(Q,ue,ge):Uint8Array.prototype.set.call(ie,this.subarray(ue,ge),Q),Me},l.prototype.fill=function(ie,Q,ue,ge){if(typeof ie=="string"){if(typeof Q=="string"?(ge=Q,Q=0,ue=this.length):typeof ue=="string"&&(ge=ue,ue=this.length),ge!==void 0&&typeof ge!="string")throw new TypeError("encoding must be a string");if(typeof ge=="string"&&!l.isEncoding(ge))throw new TypeError("Unknown encoding: "+ge);if(ie.length===1){let Te=ie.charCodeAt(0);(ge==="utf8"&&Te<128||ge==="latin1")&&(ie=Te)}}else typeof ie=="number"?ie=ie&255:typeof ie=="boolean"&&(ie=Number(ie));if(Q<0||this.length<Q||this.length<ue)throw new RangeError("Out of range index");if(ue<=Q)return this;Q=Q>>>0,ue=ue===void 0?this.length:ue>>>0,ie||(ie=0);let Me;if(typeof ie=="number")for(Me=Q;Me<ue;++Me)this[Me]=ie;else{let Te=l.isBuffer(ie)?ie:l.from(ie,ge),je=Te.length;if(je===0)throw new TypeError('The value "'+ie+'" is invalid for argument "value"');for(Me=0;Me<ue-Q;++Me)this[Me+Q]=Te[Me%je]}return this};var N={};function H(ee,ie,Q){N[ee]=class extends Q{constructor(){super(),Object.defineProperty(this,"message",{value:ie.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${ee}]`,this.stack,delete this.name}get code(){return ee}set code(ge){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:ge,writable:!0})}toString(){return`${this.name} [${ee}]: ${this.message}`}}}H("ERR_BUFFER_OUT_OF_BOUNDS",function(ee){return ee?`${ee} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),H("ERR_INVALID_ARG_TYPE",function(ee,ie){return`The "${ee}" argument must be of type number. Received type ${typeof ie}`},TypeError),H("ERR_OUT_OF_RANGE",function(ee,ie,Q){let ue=`The value of "${ee}" is out of range.`,ge=Q;return Number.isInteger(Q)&&Math.abs(Q)>2**32?ge=$(String(Q)):typeof Q=="bigint"&&(ge=String(Q),(Q>BigInt(2)**BigInt(32)||Q<-(BigInt(2)**BigInt(32)))&&(ge=$(ge)),ge+="n"),ue+=` It must be ${ie}. Received ${ge}`,ue},RangeError);function $(ee){let ie="",Q=ee.length,ue=ee[0]==="-"?1:0;for(;Q>=ue+4;Q-=3)ie=`_${ee.slice(Q-3,Q)}${ie}`;return`${ee.slice(0,Q)}${ie}`}function U(ee,ie,Q){j(ie,"offset"),(ee[ie]===void 0||ee[ie+Q]===void 0)&&q(ie,ee.length-(Q+1))}function V(ee,ie,Q,ue,ge,Me){if(ee>Q||ee<ie){let Te=typeof ie=="bigint"?"n":"",je;throw Me>3?ie===0||ie===BigInt(0)?je=`>= 0${Te} and < 2${Te} ** ${(Me+1)*8}${Te}`:je=`>= -(2${Te} ** ${(Me+1)*8-1}${Te}) and < 2 ** ${(Me+1)*8-1}${Te}`:je=`>= ${ie}${Te} and <= ${Q}${Te}`,new N.ERR_OUT_OF_RANGE("value",je,ee)}U(ue,ge,Me)}function j(ee,ie){if(typeof ee!="number")throw new N.ERR_INVALID_ARG_TYPE(ie,"number",ee)}function q(ee,ie,Q){throw Math.floor(ee)!==ee?(j(ee,Q),new N.ERR_OUT_OF_RANGE(Q||"offset","an integer",ee)):ie<0?new N.ERR_BUFFER_OUT_OF_BOUNDS:new N.ERR_OUT_OF_RANGE(Q||"offset",`>= ${Q?1:0} and <= ${ie}`,ee)}var Y=/[^+/0-9A-Za-z-_]/g;function K(ee){if(ee=ee.split("=")[0],ee=ee.trim().replace(Y,""),ee.length<2)return"";for(;ee.length%4!==0;)ee=ee+"=";return ee}function te(ee,ie){ie=ie||1/0;let Q,ue=ee.length,ge=null,Me=[];for(let Te=0;Te<ue;++Te){if(Q=ee.charCodeAt(Te),Q>55295&&Q<57344){if(!ge){if(Q>56319){(ie-=3)>-1&&Me.push(239,191,189);continue}else if(Te+1===ue){(ie-=3)>-1&&Me.push(239,191,189);continue}ge=Q;continue}if(Q<56320){(ie-=3)>-1&&Me.push(239,191,189),ge=Q;continue}Q=(ge-55296<<10|Q-56320)+65536}else ge&&(ie-=3)>-1&&Me.push(239,191,189);if(ge=null,Q<128){if((ie-=1)<0)break;Me.push(Q)}else if(Q<2048){if((ie-=2)<0)break;Me.push(Q>>6|192,Q&63|128)}else if(Q<65536){if((ie-=3)<0)break;Me.push(Q>>12|224,Q>>6&63|128,Q&63|128)}else if(Q<1114112){if((ie-=4)<0)break;Me.push(Q>>18|240,Q>>12&63|128,Q>>6&63|128,Q&63|128)}else throw new Error("Invalid code point")}return Me}function ne(ee){let ie=[];for(let Q=0;Q<ee.length;++Q)ie.push(ee.charCodeAt(Q)&255);return ie}function se(ee,ie){let Q,ue,ge,Me=[];for(let Te=0;Te<ee.length&&!((ie-=2)<0);++Te)Q=ee.charCodeAt(Te),ue=Q>>8,ge=Q%256,Me.push(ge),Me.push(ue);return Me}function le(ee){return r.toByteArray(K(ee))}function ce(ee,ie,Q,ue){let ge;for(ge=0;ge<ue&&!(ge+Q>=ie.length||ge>=ee.length);++ge)ie[ge+Q]=ee[ge];return ge}function pe(ee,ie){return ee instanceof ie||ee!=null&&ee.constructor!=null&&ee.constructor.name!=null&&ee.constructor.name===ie.name}function xe(ee){return ee!==ee}var ye=(function(){let ee="0123456789abcdef",ie=new Array(256);for(let Q=0;Q<16;++Q){let ue=Q*16;for(let ge=0;ge<16;++ge)ie[ue+ge]=ee[Q]+ee[ge]}return ie})();function fe(ee){return typeof BigInt>"u"?ae:ee}function ae(){throw new Error("BigInt not supported")}}}),A3=de({"node_modules/has-symbols/shams.js"(e,r){"use strict";r.exports=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var i={},a=Symbol("test"),o=Object(a);if(typeof a=="string"||Object.prototype.toString.call(a)!=="[object Symbol]"||Object.prototype.toString.call(o)!=="[object Symbol]")return!1;var s=42;i[a]=s;for(var l in i)return!1;if(typeof Object.keys=="function"&&Object.keys(i).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(i).length!==0)return!1;var n=Object.getOwnPropertySymbols(i);if(n.length!==1||n[0]!==a||!Object.prototype.propertyIsEnumerable.call(i,a))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var u=Object.getOwnPropertyDescriptor(i,a);if(u.value!==s||u.enumerable!==!0)return!1}return!0}}}),$y=de({"node_modules/has-tostringtag/shams.js"(e,r){"use strict";var t=A3();r.exports=function(){return t()&&!!Symbol.toStringTag}}}),M3=de({"node_modules/es-object-atoms/index.js"(e,r){"use strict";r.exports=Object}}),_H=de({"node_modules/es-errors/index.js"(e,r){"use strict";r.exports=Error}}),xH=de({"node_modules/es-errors/eval.js"(e,r){"use strict";r.exports=EvalError}}),bH=de({"node_modules/es-errors/range.js"(e,r){"use strict";r.exports=RangeError}}),wH=de({"node_modules/es-errors/ref.js"(e,r){"use strict";r.exports=ReferenceError}}),cC=de({"node_modules/es-errors/syntax.js"(e,r){"use strict";r.exports=SyntaxError}}),A1=de({"node_modules/es-errors/type.js"(e,r){"use strict";r.exports=TypeError}}),TH=de({"node_modules/es-errors/uri.js"(e,r){"use strict";r.exports=URIError}}),AH=de({"node_modules/math-intrinsics/abs.js"(e,r){"use strict";r.exports=Math.abs}}),MH=de({"node_modules/math-intrinsics/floor.js"(e,r){"use strict";r.exports=Math.floor}}),SH=de({"node_modules/math-intrinsics/max.js"(e,r){"use strict";r.exports=Math.max}}),EH=de({"node_modules/math-intrinsics/min.js"(e,r){"use strict";r.exports=Math.min}}),kH=de({"node_modules/math-intrinsics/pow.js"(e,r){"use strict";r.exports=Math.pow}}),CH=de({"node_modules/math-intrinsics/round.js"(e,r){"use strict";r.exports=Math.round}}),DH=de({"node_modules/math-intrinsics/isNaN.js"(e,r){"use strict";r.exports=Number.isNaN||function(i){return i!==i}}}),LH=de({"node_modules/math-intrinsics/sign.js"(e,r){"use strict";var t=DH();r.exports=function(a){return t(a)||a===0?a:a<0?-1:1}}}),FH=de({"node_modules/gopd/gOPD.js"(e,r){"use strict";r.exports=Object.getOwnPropertyDescriptor}}),Cv=de({"node_modules/gopd/index.js"(e,r){"use strict";var t=FH();if(t)try{t([],"length")}catch{t=null}r.exports=t}}),Wy=de({"node_modules/es-define-property/index.js"(e,r){"use strict";var t=Object.defineProperty||!1;if(t)try{t({},"a",{value:1})}catch{t=!1}r.exports=t}}),PH=de({"node_modules/has-symbols/index.js"(e,r){"use strict";var t=typeof Symbol<"u"&&Symbol,i=A3();r.exports=function(){return typeof t!="function"||typeof Symbol!="function"||typeof t("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:i()}}}),fC=de({"node_modules/get-proto/Reflect.getPrototypeOf.js"(e,r){"use strict";r.exports=typeof Reflect<"u"&&Reflect.getPrototypeOf||null}}),hC=de({"node_modules/get-proto/Object.getPrototypeOf.js"(e,r){"use strict";var t=M3();r.exports=t.getPrototypeOf||null}}),IH=de({"node_modules/function-bind/implementation.js"(e,r){"use strict";var t="Function.prototype.bind called on incompatible ",i=Object.prototype.toString,a=Math.max,o="[object Function]",s=function(c,f){for(var h=[],d=0;d<c.length;d+=1)h[d]=c[d];for(var p=0;p<f.length;p+=1)h[p+c.length]=f[p];return h},l=function(c,f){for(var h=[],d=f||0,p=0;d<c.length;d+=1,p+=1)h[p]=c[d];return h},n=function(u,c){for(var f="",h=0;h<u.length;h+=1)f+=u[h],h+1<u.length&&(f+=c);return f};r.exports=function(c){var f=this;if(typeof f!="function"||i.apply(f)!==o)throw new TypeError(t+f);for(var h=l(arguments,1),d,p=function(){if(this instanceof d){var v=f.apply(this,s(h,arguments));return Object(v)===v?v:this}return f.apply(c,s(h,arguments))},g=a(0,f.length-h.length),m=[],y=0;y<g;y++)m[y]="$"+y;if(d=Function("binder","return function ("+n(m,",")+"){ return binder.apply(this,arguments); }")(p),f.prototype){var _=function(){};_.prototype=f.prototype,d.prototype=new _,_.prototype=null}return d}}}),M1=de({"node_modules/function-bind/index.js"(e,r){"use strict";var t=IH();r.exports=Function.prototype.bind||t}}),S3=de({"node_modules/call-bind-apply-helpers/functionCall.js"(e,r){"use strict";r.exports=Function.prototype.call}}),E3=de({"node_modules/call-bind-apply-helpers/functionApply.js"(e,r){"use strict";r.exports=Function.prototype.apply}}),RH=de({"node_modules/call-bind-apply-helpers/reflectApply.js"(e,r){"use strict";r.exports=typeof Reflect<"u"&&Reflect&&Reflect.apply}}),dC=de({"node_modules/call-bind-apply-helpers/actualApply.js"(e,r){"use strict";var t=M1(),i=E3(),a=S3(),o=RH();r.exports=o||t.call(a,i)}}),k3=de({"node_modules/call-bind-apply-helpers/index.js"(e,r){"use strict";var t=M1(),i=A1(),a=S3(),o=dC();r.exports=function(l){if(l.length<1||typeof l[0]!="function")throw new i("a function is required");return o(t,a,l)}}}),zH=de({"node_modules/dunder-proto/get.js"(e,r){"use strict";var t=k3(),i=Cv(),a;try{a=[].__proto__===Array.prototype}catch(n){if(!n||typeof n!="object"||!("code"in n)||n.code!=="ERR_PROTO_ACCESS")throw n}var o=!!a&&i&&i(Object.prototype,"__proto__"),s=Object,l=s.getPrototypeOf;r.exports=o&&typeof o.get=="function"?t([o.get]):typeof l=="function"?(function(u){return l(u==null?u:s(u))}):!1}}),C3=de({"node_modules/get-proto/index.js"(e,r){"use strict";var t=fC(),i=hC(),a=zH();r.exports=t?function(s){return t(s)}:i?function(s){if(!s||typeof s!="object"&&typeof s!="function")throw new TypeError("getProto: not an object");return i(s)}:a?function(s){return a(s)}:null}}),pC=de({"node_modules/hasown/index.js"(e,r){"use strict";var t=Function.prototype.call,i=Object.prototype.hasOwnProperty,a=M1();r.exports=a.call(t,i)}}),D3=de({"node_modules/get-intrinsic/index.js"(e,r){"use strict";var t,i=M3(),a=_H(),o=xH(),s=bH(),l=wH(),n=cC(),u=A1(),c=TH(),f=AH(),h=MH(),d=SH(),p=EH(),g=kH(),m=CH(),y=LH(),_=Function,v=function(U){try{return _('"use strict"; return ('+U+").constructor;")()}catch{}},x=Cv(),S=Wy(),M=function(){throw new u},C=x?(function(){try{return arguments.callee,M}catch{try{return x(arguments,"callee").get}catch{return M}}})():M,w=PH()(),k=C3(),A=hC(),b=fC(),E=E3(),T=S3(),F={},D=typeof Uint8Array>"u"||!k?t:k(Uint8Array),R={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?t:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?t:ArrayBuffer,"%ArrayIteratorPrototype%":w&&k?k([][Symbol.iterator]()):t,"%AsyncFromSyncIteratorPrototype%":t,"%AsyncFunction%":F,"%AsyncGenerator%":F,"%AsyncGeneratorFunction%":F,"%AsyncIteratorPrototype%":F,"%Atomics%":typeof Atomics>"u"?t:Atomics,"%BigInt%":typeof BigInt>"u"?t:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?t:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?t:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?t:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":a,"%eval%":eval,"%EvalError%":o,"%Float16Array%":typeof Float16Array>"u"?t:Float16Array,"%Float32Array%":typeof Float32Array>"u"?t:Float32Array,"%Float64Array%":typeof Float64Array>"u"?t:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?t:FinalizationRegistry,"%Function%":_,"%GeneratorFunction%":F,"%Int8Array%":typeof Int8Array>"u"?t:Int8Array,"%Int16Array%":typeof Int16Array>"u"?t:Int16Array,"%Int32Array%":typeof Int32Array>"u"?t:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":w&&k?k(k([][Symbol.iterator]())):t,"%JSON%":typeof JSON=="object"?JSON:t,"%Map%":typeof Map>"u"?t:Map,"%MapIteratorPrototype%":typeof Map>"u"||!w||!k?t:k(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":i,"%Object.getOwnPropertyDescriptor%":x,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?t:Promise,"%Proxy%":typeof Proxy>"u"?t:Proxy,"%RangeError%":s,"%ReferenceError%":l,"%Reflect%":typeof Reflect>"u"?t:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?t:Set,"%SetIteratorPrototype%":typeof Set>"u"||!w||!k?t:k(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?t:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":w&&k?k(""[Symbol.iterator]()):t,"%Symbol%":w?Symbol:t,"%SyntaxError%":n,"%ThrowTypeError%":C,"%TypedArray%":D,"%TypeError%":u,"%Uint8Array%":typeof Uint8Array>"u"?t:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?t:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?t:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?t:Uint32Array,"%URIError%":c,"%WeakMap%":typeof WeakMap>"u"?t:WeakMap,"%WeakRef%":typeof WeakRef>"u"?t:WeakRef,"%WeakSet%":typeof WeakSet>"u"?t:WeakSet,"%Function.prototype.call%":T,"%Function.prototype.apply%":E,"%Object.defineProperty%":S,"%Object.getPrototypeOf%":A,"%Math.abs%":f,"%Math.floor%":h,"%Math.max%":d,"%Math.min%":p,"%Math.pow%":g,"%Math.round%":m,"%Math.sign%":y,"%Reflect.getPrototypeOf%":b};if(k)try{null.error}catch(U){P=k(k(U)),R["%Error.prototype%"]=P}var P,z=function U(V){var j;if(V==="%AsyncFunction%")j=v("async function () {}");else if(V==="%GeneratorFunction%")j=v("function* () {}");else if(V==="%AsyncGeneratorFunction%")j=v("async function* () {}");else if(V==="%AsyncGenerator%"){var q=U("%AsyncGeneratorFunction%");q&&(j=q.prototype)}else if(V==="%AsyncIteratorPrototype%"){var Y=U("%AsyncGenerator%");Y&&k&&(j=k(Y.prototype))}return R[V]=j,j},I={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},L=M1(),B=pC(),O=L.call(T,Array.prototype.concat),G=L.call(E,Array.prototype.splice),W=L.call(T,String.prototype.replace),X=L.call(T,String.prototype.slice),Z=L.call(T,RegExp.prototype.exec),J=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,N=/\\(\\)?/g,H=function(V){var j=X(V,0,1),q=X(V,-1);if(j==="%"&&q!=="%")throw new n("invalid intrinsic syntax, expected closing `%`");if(q==="%"&&j!=="%")throw new n("invalid intrinsic syntax, expected opening `%`");var Y=[];return W(V,J,function(K,te,ne,se){Y[Y.length]=ne?W(se,N,"$1"):te||K}),Y},$=function(V,j){var q=V,Y;if(B(I,q)&&(Y=I[q],q="%"+Y[0]+"%"),B(R,q)){var K=R[q];if(K===F&&(K=z(q)),typeof K>"u"&&!j)throw new u("intrinsic "+V+" exists, but is not available. Please file an issue!");return{alias:Y,name:q,value:K}}throw new n("intrinsic "+V+" does not exist!")};r.exports=function(V,j){if(typeof V!="string"||V.length===0)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof j!="boolean")throw new u('"allowMissing" argument must be a boolean');if(Z(/^%?[^%]*%?$/,V)===null)throw new n("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var q=H(V),Y=q.length>0?q[0]:"",K=$("%"+Y+"%",j),te=K.name,ne=K.value,se=!1,le=K.alias;le&&(Y=le[0],G(q,O([0,1],le)));for(var ce=1,pe=!0;ce<q.length;ce+=1){var xe=q[ce],ye=X(xe,0,1),fe=X(xe,-1);if((ye==='"'||ye==="'"||ye==="`"||fe==='"'||fe==="'"||fe==="`")&&ye!==fe)throw new n("property names with quotes must have matching quotes");if((xe==="constructor"||!pe)&&(se=!0),Y+="."+xe,te="%"+Y+"%",B(R,te))ne=R[te];else if(ne!=null){if(!(xe in ne)){if(!j)throw new u("base intrinsic for "+V+" exists, but the property is not available.");return}if(x&&ce+1>=q.length){var ae=x(ne,xe);pe=!!ae,pe&&"get"in ae&&!("originalValue"in ae.get)?ne=ae.get:ne=ne[xe]}else pe=B(ne,xe),ne=ne[xe];pe&&!se&&(R[te]=ne)}}return ne}}}),Dv=de({"node_modules/call-bound/index.js"(e,r){"use strict";var t=D3(),i=k3(),a=i([t("%String.prototype.indexOf%")]);r.exports=function(s,l){var n=t(s,!!l);return typeof n=="function"&&a(s,".prototype.")>-1?i([n]):n}}}),BH=de({"node_modules/is-arguments/index.js"(e,r){"use strict";var t=$y()(),i=Dv(),a=i("Object.prototype.toString"),o=function(u){return t&&u&&typeof u=="object"&&Symbol.toStringTag in u?!1:a(u)==="[object Arguments]"},s=function(u){return o(u)?!0:u!==null&&typeof u=="object"&&"length"in u&&typeof u.length=="number"&&u.length>=0&&a(u)!=="[object Array]"&&"callee"in u&&a(u.callee)==="[object Function]"},l=(function(){return o(arguments)})();o.isLegacyArguments=s,r.exports=l?o:s}}),OH=de({"node_modules/is-regex/index.js"(e,r){"use strict";var t=Dv(),i=$y()(),a=pC(),o=Cv(),s;i?(l=t("RegExp.prototype.exec"),n={},u=function(){throw n},c={toString:u,valueOf:u},typeof Symbol.toPrimitive=="symbol"&&(c[Symbol.toPrimitive]=u),s=function(p){if(!p||typeof p!="object")return!1;var g=o(p,"lastIndex"),m=g&&a(g,"value");if(!m)return!1;try{l(p,c)}catch(y){return y===n}}):(f=t("Object.prototype.toString"),h="[object RegExp]",s=function(p){return!p||typeof p!="object"&&typeof p!="function"?!1:f(p)===h});var l,n,u,c,f,h;r.exports=s}}),NH=de({"node_modules/safe-regex-test/index.js"(e,r){"use strict";var t=Dv(),i=OH(),a=t("RegExp.prototype.exec"),o=A1();r.exports=function(l){if(!i(l))throw new o("`regex` must be a RegExp");return function(u){return a(l,u)!==null}}}}),jH=de({"node_modules/generator-function/index.js"(e,r){"use strict";var t=function*(){}.constructor;r.exports=()=>t}}),UH=de({"node_modules/is-generator-function/index.js"(e,r){"use strict";var t=Dv(),i=NH(),a=i(/^\s*(?:function)?\*/),o=$y()(),s=C3(),l=t("Object.prototype.toString"),n=t("Function.prototype.toString"),u=jH();r.exports=function(f){if(typeof f!="function")return!1;if(a(n(f)))return!0;if(!o){var h=l(f);return h==="[object GeneratorFunction]"}if(!s)return!1;var d=u();return d&&s(f)===d.prototype}}}),qH=de({"node_modules/is-callable/index.js"(e,r){"use strict";var t=Function.prototype.toString,i=typeof Reflect=="object"&&Reflect!==null&&Reflect.apply,a,o;if(typeof i=="function"&&typeof Object.defineProperty=="function")try{a=Object.defineProperty({},"length",{get:function(){throw o}}),o={},i(function(){throw 42},null,a)}catch(x){x!==o&&(i=null)}else i=null;var s=/^\s*class\b/,l=function(S){try{var M=t.call(S);return s.test(M)}catch{return!1}},n=function(S){try{return l(S)?!1:(t.call(S),!0)}catch{return!1}},u=Object.prototype.toString,c="[object Object]",f="[object Function]",h="[object GeneratorFunction]",d="[object HTMLAllCollection]",p="[object HTML document.all class]",g="[object HTMLCollection]",m=typeof Symbol=="function"&&!!Symbol.toStringTag,y=!(0 in[,]),_=function(){return!1};typeof document=="object"&&(v=document.all,u.call(v)===u.call(document.all)&&(_=function(S){if((y||!S)&&(typeof S>"u"||typeof S=="object"))try{var M=u.call(S);return(M===d||M===p||M===g||M===c)&&S("")==null}catch{}return!1}));var v;r.exports=i?function(S){if(_(S))return!0;if(!S||typeof S!="function"&&typeof S!="object")return!1;try{i(S,null,a)}catch(M){if(M!==o)return!1}return!l(S)&&n(S)}:function(S){if(_(S))return!0;if(!S||typeof S!="function"&&typeof S!="object")return!1;if(m)return n(S);if(l(S))return!1;var M=u.call(S);return M!==f&&M!==h&&!/^\[object HTML/.test(M)?!1:n(S)}}}),VH=de({"node_modules/for-each/index.js"(e,r){"use strict";var t=qH(),i=Object.prototype.toString,a=Object.prototype.hasOwnProperty,o=function(c,f,h){for(var d=0,p=c.length;d<p;d++)a.call(c,d)&&(h==null?f(c[d],d,c):f.call(h,c[d],d,c))},s=function(c,f,h){for(var d=0,p=c.length;d<p;d++)h==null?f(c.charAt(d),d,c):f.call(h,c.charAt(d),d,c)},l=function(c,f,h){for(var d in c)a.call(c,d)&&(h==null?f(c[d],d,c):f.call(h,c[d],d,c))};function n(u){return i.call(u)==="[object Array]"}r.exports=function(c,f,h){if(!t(f))throw new TypeError("iterator must be a function");var d;arguments.length>=3&&(d=h),n(c)?o(c,f,d):typeof c=="string"?s(c,f,d):l(c,f,d)}}}),GH=de({"node_modules/possible-typed-array-names/index.js"(e,r){"use strict";r.exports=["Float16Array","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]}}),HH=de({"node_modules/available-typed-arrays/index.js"(e,r){"use strict";var t=GH(),i=typeof globalThis>"u"?window:globalThis;r.exports=function(){for(var o=[],s=0;s<t.length;s++)typeof i[t[s]]=="function"&&(o[o.length]=t[s]);return o}}}),vC=de({"node_modules/define-data-property/index.js"(e,r){"use strict";var t=Wy(),i=cC(),a=A1(),o=Cv();r.exports=function(l,n,u){if(!l||typeof l!="object"&&typeof l!="function")throw new a("`obj` must be an object or a function`");if(typeof n!="string"&&typeof n!="symbol")throw new a("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new a("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new a("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new a("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new a("`loose`, if provided, must be a boolean");var c=arguments.length>3?arguments[3]:null,f=arguments.length>4?arguments[4]:null,h=arguments.length>5?arguments[5]:null,d=arguments.length>6?arguments[6]:!1,p=!!o&&o(l,n);if(t)t(l,n,{configurable:h===null&&p?p.configurable:!h,enumerable:c===null&&p?p.enumerable:!c,value:u,writable:f===null&&p?p.writable:!f});else if(d||!c&&!f&&!h)l[n]=u;else throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")}}}),mC=de({"node_modules/has-property-descriptors/index.js"(e,r){"use strict";var t=Wy(),i=function(){return!!t};i.hasArrayLengthDefineBug=function(){if(!t)return null;try{return t([],"length",{value:1}).length!==1}catch{return!0}},r.exports=i}}),$H=de({"node_modules/set-function-length/index.js"(e,r){"use strict";var t=D3(),i=vC(),a=mC()(),o=Cv(),s=A1(),l=t("%Math.floor%");r.exports=function(u,c){if(typeof u!="function")throw new s("`fn` is not a function");if(typeof c!="number"||c<0||c>4294967295||l(c)!==c)throw new s("`length` must be a positive 32-bit integer");var f=arguments.length>2&&!!arguments[2],h=!0,d=!0;if("length"in u&&o){var p=o(u,"length");p&&!p.configurable&&(h=!1),p&&!p.writable&&(d=!1)}return(h||d||!f)&&(a?i(u,"length",c,!0,!0):i(u,"length",c)),u}}}),WH=de({"node_modules/call-bind-apply-helpers/applyBind.js"(e,r){"use strict";var t=M1(),i=E3(),a=dC();r.exports=function(){return a(t,i,arguments)}}}),Yy=de({"node_modules/call-bind/index.js"(e,r){"use strict";var t=$H(),i=Wy(),a=k3(),o=WH();r.exports=function(l){var n=a(arguments),u=1+l.length-(arguments.length-1);return t(n,u>0?u:0,!0)},i?i(r.exports,"apply",{value:o}):r.exports.apply=o}}),gC=de({"node_modules/which-typed-array/index.js"(e,r){"use strict";var t=VH(),i=HH(),a=Yy(),o=Dv(),s=Cv(),l=C3(),n=o("Object.prototype.toString"),u=$y()(),c=typeof globalThis>"u"?window:globalThis,f=i(),h=o("String.prototype.slice"),d=o("Array.prototype.indexOf",!0)||function(v,x){for(var S=0;S<v.length;S+=1)if(v[S]===x)return S;return-1},p={__proto__:null};u&&s&&l?t(f,function(_){var v=new c[_];if(Symbol.toStringTag in v&&l){var x=l(v),S=s(x,Symbol.toStringTag);if(!S&&x){var M=l(x);S=s(M,Symbol.toStringTag)}if(S&&S.get){var C=a(S.get);p["$"+_]=C}}}):t(f,function(_){var v=new c[_],x=v.slice||v.set;if(x){var S=a(x);p["$"+_]=S}});function g(_){var v=!1;return t(p,function(x,S){if(!v)try{"$"+x(_)===S&&(v=h(S,1))}catch{}}),v}function m(_){var v=!1;return t(p,function(x,S){if(!v)try{x(_),v=h(S,1)}catch{}}),v}function y(_){return d(f,_)>-1}r.exports=function(v){if(!v||typeof v!="object")return!1;if(!u){var x=h(n(v),8,-1);return y(x)?x:x!=="Object"?!1:m(v)}return s?g(v):null}}}),YH=de({"node_modules/is-typed-array/index.js"(e,r){"use strict";var t=gC();r.exports=function(a){return!!t(a)}}}),yC=de({"node_modules/util/support/types.js"(e){"use strict";var r=BH(),t=UH(),i=gC(),a=YH();function o(se){return se.call.bind(se)}var s=typeof BigInt<"u",l=typeof Symbol<"u",n=o(Object.prototype.toString),u=o(Number.prototype.valueOf),c=o(String.prototype.valueOf),f=o(Boolean.prototype.valueOf);s&&(h=o(BigInt.prototype.valueOf));var h;l&&(d=o(Symbol.prototype.valueOf));var d;function p(se,le){if(typeof se!="object")return!1;try{return le(se),!0}catch{return!1}}e.isArgumentsObject=r,e.isGeneratorFunction=t,e.isTypedArray=a;function g(se){return typeof Promise<"u"&&se instanceof Promise||se!==null&&typeof se=="object"&&typeof se.then=="function"&&typeof se.catch=="function"}e.isPromise=g;function m(se){return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?ArrayBuffer.isView(se):a(se)||G(se)}e.isArrayBufferView=m;function y(se){return i(se)==="Uint8Array"}e.isUint8Array=y;function _(se){return i(se)==="Uint8ClampedArray"}e.isUint8ClampedArray=_;function v(se){return i(se)==="Uint16Array"}e.isUint16Array=v;function x(se){return i(se)==="Uint32Array"}e.isUint32Array=x;function S(se){return i(se)==="Int8Array"}e.isInt8Array=S;function M(se){return i(se)==="Int16Array"}e.isInt16Array=M;function C(se){return i(se)==="Int32Array"}e.isInt32Array=C;function w(se){return i(se)==="Float32Array"}e.isFloat32Array=w;function k(se){return i(se)==="Float64Array"}e.isFloat64Array=k;function A(se){return i(se)==="BigInt64Array"}e.isBigInt64Array=A;function b(se){return i(se)==="BigUint64Array"}e.isBigUint64Array=b;function E(se){return n(se)==="[object Map]"}E.working=typeof Map<"u"&&E(new Map);function T(se){return typeof Map>"u"?!1:E.working?E(se):se instanceof Map}e.isMap=T;function F(se){return n(se)==="[object Set]"}F.working=typeof Set<"u"&&F(new Set);function D(se){return typeof Set>"u"?!1:F.working?F(se):se instanceof Set}e.isSet=D;function R(se){return n(se)==="[object WeakMap]"}R.working=typeof WeakMap<"u"&&R(new WeakMap);function P(se){return typeof WeakMap>"u"?!1:R.working?R(se):se instanceof WeakMap}e.isWeakMap=P;function z(se){return n(se)==="[object WeakSet]"}z.working=typeof WeakSet<"u"&&z(new WeakSet);function I(se){return z(se)}e.isWeakSet=I;function L(se){return n(se)==="[object ArrayBuffer]"}L.working=typeof ArrayBuffer<"u"&&L(new ArrayBuffer);function B(se){return typeof ArrayBuffer>"u"?!1:L.working?L(se):se instanceof ArrayBuffer}e.isArrayBuffer=B;function O(se){return n(se)==="[object DataView]"}O.working=typeof ArrayBuffer<"u"&&typeof DataView<"u"&&O(new DataView(new ArrayBuffer(1),0,1));function G(se){return typeof DataView>"u"?!1:O.working?O(se):se instanceof DataView}e.isDataView=G;var W=typeof SharedArrayBuffer<"u"?SharedArrayBuffer:void 0;function X(se){return n(se)==="[object SharedArrayBuffer]"}function Z(se){return typeof W>"u"?!1:(typeof X.working>"u"&&(X.working=X(new W)),X.working?X(se):se instanceof W)}e.isSharedArrayBuffer=Z;function J(se){return n(se)==="[object AsyncFunction]"}e.isAsyncFunction=J;function N(se){return n(se)==="[object Map Iterator]"}e.isMapIterator=N;function H(se){return n(se)==="[object Set Iterator]"}e.isSetIterator=H;function $(se){return n(se)==="[object Generator]"}e.isGeneratorObject=$;function U(se){return n(se)==="[object WebAssembly.Module]"}e.isWebAssemblyCompiledModule=U;function V(se){return p(se,u)}e.isNumberObject=V;function j(se){return p(se,c)}e.isStringObject=j;function q(se){return p(se,f)}e.isBooleanObject=q;function Y(se){return s&&p(se,h)}e.isBigIntObject=Y;function K(se){return l&&p(se,d)}e.isSymbolObject=K;function te(se){return V(se)||j(se)||q(se)||Y(se)||K(se)}e.isBoxedPrimitive=te;function ne(se){return typeof Uint8Array<"u"&&(B(se)||Z(se))}e.isAnyArrayBuffer=ne,["isProxy","isExternal","isModuleNamespaceObject"].forEach(function(se){Object.defineProperty(e,se,{enumerable:!1,value:function(){throw new Error(se+" is not supported in userland")}})})}}),_C=de({"node_modules/util/support/isBufferBrowser.js"(e,r){r.exports=function(i){return i&&typeof i=="object"&&typeof i.copy=="function"&&typeof i.fill=="function"&&typeof i.readUInt8=="function"}}}),xC=de({"(disabled):node_modules/util/util.js"(e){var r=Object.getOwnPropertyDescriptors||function(G){for(var W=Object.keys(G),X={},Z=0;Z<W.length;Z++)X[W[Z]]=Object.getOwnPropertyDescriptor(G,W[Z]);return X},t=/%[sdj%]/g;e.format=function(O){if(!S(O)){for(var G=[],W=0;W<arguments.length;W++)G.push(s(arguments[W]));return G.join(" ")}for(var W=1,X=arguments,Z=X.length,J=String(O).replace(t,function(H){if(H==="%%")return"%";if(W>=Z)return H;switch(H){case"%s":return String(X[W++]);case"%d":return Number(X[W++]);case"%j":try{return JSON.stringify(X[W++])}catch{return"[Circular]"}default:return H}}),N=X[W];W<Z;N=X[++W])_(N)||!k(N)?J+=" "+N:J+=" "+s(N);return J},e.deprecate=function(O,G){if(typeof process<"u"&&process.noDeprecation===!0)return O;if(typeof process>"u")return function(){return e.deprecate(O,G).apply(this,arguments)};var W=!1;function X(){if(!W){if(process.throwDeprecation)throw new Error(G);process.traceDeprecation?console.trace(G):console.error(G),W=!0}return O.apply(this,arguments)}return X};var i={},a=/^$/;o="false",o=o.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".*").replace(/,/g,"$|^").toUpperCase(),a=new RegExp("^"+o+"$","i");var o;e.debuglog=function(O){if(O=O.toUpperCase(),!i[O])if(a.test(O)){var G=process.pid;i[O]=function(){var W=e.format.apply(e,arguments);console.error("%s %d: %s",O,G,W)}}else i[O]=function(){};return i[O]};function s(O,G){var W={seen:[],stylize:n};return arguments.length>=3&&(W.depth=arguments[2]),arguments.length>=4&&(W.colors=arguments[3]),y(G)?W.showHidden=G:G&&e._extend(W,G),C(W.showHidden)&&(W.showHidden=!1),C(W.depth)&&(W.depth=2),C(W.colors)&&(W.colors=!1),C(W.customInspect)&&(W.customInspect=!0),W.colors&&(W.stylize=l),c(W,O,W.depth)}e.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function l(O,G){var W=s.styles[G];return W?"\x1B["+s.colors[W][0]+"m"+O+"\x1B["+s.colors[W][1]+"m":O}function n(O,G){return O}function u(O){var G={};return O.forEach(function(W,X){G[W]=!0}),G}function c(O,G,W){if(O.customInspect&&G&&E(G.inspect)&&G.inspect!==e.inspect&&!(G.constructor&&G.constructor.prototype===G)){var X=G.inspect(W,O);return S(X)||(X=c(O,X,W)),X}var Z=f(O,G);if(Z)return Z;var J=Object.keys(G),N=u(J);if(O.showHidden&&(J=Object.getOwnPropertyNames(G)),b(G)&&(J.indexOf("message")>=0||J.indexOf("description")>=0))return h(G);if(J.length===0){if(E(G)){var H=G.name?": "+G.name:"";return O.stylize("[Function"+H+"]","special")}if(w(G))return O.stylize(RegExp.prototype.toString.call(G),"regexp");if(A(G))return O.stylize(Date.prototype.toString.call(G),"date");if(b(G))return h(G)}var $="",U=!1,V=["{","}"];if(m(G)&&(U=!0,V=["[","]"]),E(G)){var j=G.name?": "+G.name:"";$=" [Function"+j+"]"}if(w(G)&&($=" "+RegExp.prototype.toString.call(G)),A(G)&&($=" "+Date.prototype.toUTCString.call(G)),b(G)&&($=" "+h(G)),J.length===0&&(!U||G.length==0))return V[0]+$+V[1];if(W<0)return w(G)?O.stylize(RegExp.prototype.toString.call(G),"regexp"):O.stylize("[Object]","special");O.seen.push(G);var q;return U?q=d(O,G,W,N,J):q=J.map(function(Y){return p(O,G,W,N,Y,U)}),O.seen.pop(),g(q,$,V)}function f(O,G){if(C(G))return O.stylize("undefined","undefined");if(S(G)){var W="'"+JSON.stringify(G).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return O.stylize(W,"string")}if(x(G))return O.stylize(""+G,"number");if(y(G))return O.stylize(""+G,"boolean");if(_(G))return O.stylize("null","null")}function h(O){return"["+Error.prototype.toString.call(O)+"]"}function d(O,G,W,X,Z){for(var J=[],N=0,H=G.length;N<H;++N)z(G,String(N))?J.push(p(O,G,W,X,String(N),!0)):J.push("");return Z.forEach(function($){$.match(/^\d+$/)||J.push(p(O,G,W,X,$,!0))}),J}function p(O,G,W,X,Z,J){var N,H,$;if($=Object.getOwnPropertyDescriptor(G,Z)||{value:G[Z]},$.get?$.set?H=O.stylize("[Getter/Setter]","special"):H=O.stylize("[Getter]","special"):$.set&&(H=O.stylize("[Setter]","special")),z(X,Z)||(N="["+Z+"]"),H||(O.seen.indexOf($.value)<0?(_(W)?H=c(O,$.value,null):H=c(O,$.value,W-1),H.indexOf(`
+`)>-1&&(J?H=H.split(`
+`).map(function(U){return"  "+U}).join(`
+`).slice(2):H=`
+`+H.split(`
+`).map(function(U){return"   "+U}).join(`
+`))):H=O.stylize("[Circular]","special")),C(N)){if(J&&Z.match(/^\d+$/))return H;N=JSON.stringify(""+Z),N.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(N=N.slice(1,-1),N=O.stylize(N,"name")):(N=N.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),N=O.stylize(N,"string"))}return N+": "+H}function g(O,G,W){var X=0,Z=O.reduce(function(J,N){return X++,N.indexOf(`
+`)>=0&&X++,J+N.replace(/\u001b\[\d\d?m/g,"").length+1},0);return Z>60?W[0]+(G===""?"":G+`
+ `)+" "+O.join(`,
+  `)+" "+W[1]:W[0]+G+" "+O.join(", ")+" "+W[1]}e.types=yC();function m(O){return Array.isArray(O)}e.isArray=m;function y(O){return typeof O=="boolean"}e.isBoolean=y;function _(O){return O===null}e.isNull=_;function v(O){return O==null}e.isNullOrUndefined=v;function x(O){return typeof O=="number"}e.isNumber=x;function S(O){return typeof O=="string"}e.isString=S;function M(O){return typeof O=="symbol"}e.isSymbol=M;function C(O){return O===void 0}e.isUndefined=C;function w(O){return k(O)&&F(O)==="[object RegExp]"}e.isRegExp=w,e.types.isRegExp=w;function k(O){return typeof O=="object"&&O!==null}e.isObject=k;function A(O){return k(O)&&F(O)==="[object Date]"}e.isDate=A,e.types.isDate=A;function b(O){return k(O)&&(F(O)==="[object Error]"||O instanceof Error)}e.isError=b,e.types.isNativeError=b;function E(O){return typeof O=="function"}e.isFunction=E;function T(O){return O===null||typeof O=="boolean"||typeof O=="number"||typeof O=="string"||typeof O=="symbol"||typeof O>"u"}e.isPrimitive=T,e.isBuffer=_C();function F(O){return Object.prototype.toString.call(O)}function D(O){return O<10?"0"+O.toString(10):O.toString(10)}var R=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function P(){var O=new Date,G=[D(O.getHours()),D(O.getMinutes()),D(O.getSeconds())].join(":");return[O.getDate(),R[O.getMonth()],G].join(" ")}e.log=function(){console.log("%s - %s",P(),e.format.apply(e,arguments))},e.inherits=Sp(),e._extend=function(O,G){if(!G||!k(G))return O;for(var W=Object.keys(G),X=W.length;X--;)O[W[X]]=G[W[X]];return O};function z(O,G){return Object.prototype.hasOwnProperty.call(O,G)}var I=typeof Symbol<"u"?Symbol("util.promisify.custom"):void 0;e.promisify=function(G){if(typeof G!="function")throw new TypeError('The "original" argument must be of type Function');if(I&&G[I]){var W=G[I];if(typeof W!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(W,I,{value:W,enumerable:!1,writable:!1,configurable:!0}),W}function W(){for(var X,Z,J=new Promise(function($,U){X=$,Z=U}),N=[],H=0;H<arguments.length;H++)N.push(arguments[H]);N.push(function($,U){$?Z($):X(U)});try{G.apply(this,N)}catch($){Z($)}return J}return Object.setPrototypeOf(W,Object.getPrototypeOf(G)),I&&Object.defineProperty(W,I,{value:W,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(W,r(G))},e.promisify.custom=I;function L(O,G){if(!O){var W=new Error("Promise was rejected with a falsy value");W.reason=O,O=W}return G(O)}function B(O){if(typeof O!="function")throw new TypeError('The "original" argument must be of type Function');function G(){for(var W=[],X=0;X<arguments.length;X++)W.push(arguments[X]);var Z=W.pop();if(typeof Z!="function")throw new TypeError("The last argument must be of type Function");var J=this,N=function(){return Z.apply(J,arguments)};O.apply(this,W).then(function(H){process.nextTick(N.bind(null,null,H))},function(H){process.nextTick(L.bind(null,H,N))})}return Object.setPrototypeOf(G,Object.getPrototypeOf(O)),Object.defineProperties(G,r(O)),G}e.callbackify=B}}),XH=de({"node_modules/readable-stream/lib/internal/streams/buffer_list.js"(e,r){"use strict";function t(m,y){var _=Object.keys(m);if(Object.getOwnPropertySymbols){var v=Object.getOwnPropertySymbols(m);y&&(v=v.filter(function(x){return Object.getOwnPropertyDescriptor(m,x).enumerable})),_.push.apply(_,v)}return _}function i(m){for(var y=1;y<arguments.length;y++){var _=arguments[y]!=null?arguments[y]:{};y%2?t(Object(_),!0).forEach(function(v){a(m,v,_[v])}):Object.getOwnPropertyDescriptors?Object.defineProperties(m,Object.getOwnPropertyDescriptors(_)):t(Object(_)).forEach(function(v){Object.defineProperty(m,v,Object.getOwnPropertyDescriptor(_,v))})}return m}function a(m,y,_){return y=n(y),y in m?Object.defineProperty(m,y,{value:_,enumerable:!0,configurable:!0,writable:!0}):m[y]=_,m}function o(m,y){if(!(m instanceof y))throw new TypeError("Cannot call a class as a function")}function s(m,y){for(var _=0;_<y.length;_++){var v=y[_];v.enumerable=v.enumerable||!1,v.configurable=!0,"value"in v&&(v.writable=!0),Object.defineProperty(m,n(v.key),v)}}function l(m,y,_){return y&&s(m.prototype,y),_&&s(m,_),Object.defineProperty(m,"prototype",{writable:!1}),m}function n(m){var y=u(m,"string");return typeof y=="symbol"?y:String(y)}function u(m,y){if(typeof m!="object"||m===null)return m;var _=m[Symbol.toPrimitive];if(_!==void 0){var v=_.call(m,y||"default");if(typeof v!="object")return v;throw new TypeError("@@toPrimitive must return a primitive value.")}return(y==="string"?String:Number)(m)}var c=kv(),f=c.Buffer,h=xC(),d=h.inspect,p=d&&d.custom||"inspect";function g(m,y,_){f.prototype.copy.call(m,y,_)}r.exports=(function(){function m(){o(this,m),this.head=null,this.tail=null,this.length=0}return l(m,[{key:"push",value:function(_){var v={data:_,next:null};this.length>0?this.tail.next=v:this.head=v,this.tail=v,++this.length}},{key:"unshift",value:function(_){var v={data:_,next:this.head};this.length===0&&(this.tail=v),this.head=v,++this.length}},{key:"shift",value:function(){if(this.length!==0){var _=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,_}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(_){if(this.length===0)return"";for(var v=this.head,x=""+v.data;v=v.next;)x+=_+v.data;return x}},{key:"concat",value:function(_){if(this.length===0)return f.alloc(0);for(var v=f.allocUnsafe(_>>>0),x=this.head,S=0;x;)g(x.data,v,S),S+=x.data.length,x=x.next;return v}},{key:"consume",value:function(_,v){var x;return _<this.head.data.length?(x=this.head.data.slice(0,_),this.head.data=this.head.data.slice(_)):_===this.head.data.length?x=this.shift():x=v?this._getString(_):this._getBuffer(_),x}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(_){var v=this.head,x=1,S=v.data;for(_-=S.length;v=v.next;){var M=v.data,C=_>M.length?M.length:_;if(C===M.length?S+=M:S+=M.slice(0,_),_-=C,_===0){C===M.length?(++x,v.next?this.head=v.next:this.head=this.tail=null):(this.head=v,v.data=M.slice(C));break}++x}return this.length-=x,S}},{key:"_getBuffer",value:function(_){var v=f.allocUnsafe(_),x=this.head,S=1;for(x.data.copy(v),_-=x.data.length;x=x.next;){var M=x.data,C=_>M.length?M.length:_;if(M.copy(v,v.length-_,0,C),_-=C,_===0){C===M.length?(++S,x.next?this.head=x.next:this.head=this.tail=null):(this.head=x,x.data=M.slice(C));break}++S}return this.length-=S,v}},{key:p,value:function(_,v){return d(this,i(i({},v),{},{depth:0,customInspect:!1}))}}]),m})()}}),bC=de({"node_modules/readable-stream/lib/internal/streams/destroy.js"(e,r){"use strict";function t(n,u){var c=this,f=this._readableState&&this._readableState.destroyed,h=this._writableState&&this._writableState.destroyed;return f||h?(u?u(n):n&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(s,this,n)):process.nextTick(s,this,n)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(n||null,function(d){!u&&d?c._writableState?c._writableState.errorEmitted?process.nextTick(a,c):(c._writableState.errorEmitted=!0,process.nextTick(i,c,d)):process.nextTick(i,c,d):u?(process.nextTick(a,c),u(d)):process.nextTick(a,c)}),this)}function i(n,u){s(n,u),a(n)}function a(n){n._writableState&&!n._writableState.emitClose||n._readableState&&!n._readableState.emitClose||n.emit("close")}function o(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function s(n,u){n.emit("error",u)}function l(n,u){var c=n._readableState,f=n._writableState;c&&c.autoDestroy||f&&f.autoDestroy?n.destroy(u):n.emit("error",u)}r.exports={destroy:t,undestroy:o,errorOrDestroy:l}}}),Lv=de({"node_modules/readable-stream/errors-browser.js"(e,r){"use strict";function t(u,c){u.prototype=Object.create(c.prototype),u.prototype.constructor=u,u.__proto__=c}var i={};function a(u,c,f){f||(f=Error);function h(p,g,m){return typeof c=="string"?c:c(p,g,m)}var d=(function(p){t(g,p);function g(m,y,_){return p.call(this,h(m,y,_))||this}return g})(f);d.prototype.name=f.name,d.prototype.code=u,i[u]=d}function o(u,c){if(Array.isArray(u)){var f=u.length;return u=u.map(function(h){return String(h)}),f>2?"one of ".concat(c," ").concat(u.slice(0,f-1).join(", "),", or ")+u[f-1]:f===2?"one of ".concat(c," ").concat(u[0]," or ").concat(u[1]):"of ".concat(c," ").concat(u[0])}else return"of ".concat(c," ").concat(String(u))}function s(u,c,f){return u.substr(!f||f<0?0:+f,c.length)===c}function l(u,c,f){return(f===void 0||f>u.length)&&(f=u.length),u.substring(f-c.length,f)===c}function n(u,c,f){return typeof f!="number"&&(f=0),f+c.length>u.length?!1:u.indexOf(c,f)!==-1}a("ERR_INVALID_OPT_VALUE",function(u,c){return'The value "'+c+'" is invalid for option "'+u+'"'},TypeError),a("ERR_INVALID_ARG_TYPE",function(u,c,f){var h;typeof c=="string"&&s(c,"not ")?(h="must not be",c=c.replace(/^not /,"")):h="must be";var d;if(l(u," argument"))d="The ".concat(u," ").concat(h," ").concat(o(c,"type"));else{var p=n(u,".")?"property":"argument";d='The "'.concat(u,'" ').concat(p," ").concat(h," ").concat(o(c,"type"))}return d+=". Received type ".concat(typeof f),d},TypeError),a("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),a("ERR_METHOD_NOT_IMPLEMENTED",function(u){return"The "+u+" method is not implemented"}),a("ERR_STREAM_PREMATURE_CLOSE","Premature close"),a("ERR_STREAM_DESTROYED",function(u){return"Cannot call "+u+" after a stream was destroyed"}),a("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),a("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),a("ERR_STREAM_WRITE_AFTER_END","write after end"),a("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),a("ERR_UNKNOWN_ENCODING",function(u){return"Unknown encoding: "+u},TypeError),a("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),r.exports.codes=i}}),wC=de({"node_modules/readable-stream/lib/internal/streams/state.js"(e,r){"use strict";var t=Lv().codes.ERR_INVALID_OPT_VALUE;function i(o,s,l){return o.highWaterMark!=null?o.highWaterMark:s?o[l]:null}function a(o,s,l,n){var u=i(s,n,l);if(u!=null){if(!(isFinite(u)&&Math.floor(u)===u)||u<0){var c=n?l:"highWaterMark";throw new t(c,u)}return Math.floor(u)}return o.objectMode?16:16*1024}r.exports={getHighWaterMark:a}}}),ZH=de({"node_modules/util-deprecate/browser.js"(e,r){r.exports=t;function t(a,o){if(i("noDeprecation"))return a;var s=!1;function l(){if(!s){if(i("throwDeprecation"))throw new Error(o);i("traceDeprecation")?console.trace(o):console.warn(o),s=!0}return a.apply(this,arguments)}return l}function i(a){try{if(!window.localStorage)return!1}catch{return!1}var o=window.localStorage[a];return o==null?!1:String(o).toLowerCase()==="true"}}}),TC=de({"node_modules/readable-stream/lib/_stream_writable.js"(e,r){"use strict";r.exports=A;function t(N){var H=this;this.next=null,this.entry=null,this.finish=function(){J(H,N)}}var i;A.WritableState=w;var a={deprecate:ZH()},o=uC(),s=kv().Buffer,l=(typeof window<"u"||typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function n(N){return s.from(N)}function u(N){return s.isBuffer(N)||N instanceof l}var c=bC(),f=wC(),h=f.getHighWaterMark,d=Lv().codes,p=d.ERR_INVALID_ARG_TYPE,g=d.ERR_METHOD_NOT_IMPLEMENTED,m=d.ERR_MULTIPLE_CALLBACK,y=d.ERR_STREAM_CANNOT_PIPE,_=d.ERR_STREAM_DESTROYED,v=d.ERR_STREAM_NULL_VALUES,x=d.ERR_STREAM_WRITE_AFTER_END,S=d.ERR_UNKNOWN_ENCODING,M=c.errorOrDestroy;Sp()(A,o);function C(){}function w(N,H,$){i=i||Fv(),N=N||{},typeof $!="boolean"&&($=H instanceof i),this.objectMode=!!N.objectMode,$&&(this.objectMode=this.objectMode||!!N.writableObjectMode),this.highWaterMark=h(this,N,"writableHighWaterMark",$),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var U=N.decodeStrings===!1;this.decodeStrings=!U,this.defaultEncoding=N.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(V){z(H,V)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=N.emitClose!==!1,this.autoDestroy=!!N.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new t(this)}w.prototype.getBuffer=function(){for(var H=this.bufferedRequest,$=[];H;)$.push(H),H=H.next;return $},(function(){try{Object.defineProperty(w.prototype,"buffer",{get:a.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var k;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(k=Function.prototype[Symbol.hasInstance],Object.defineProperty(A,Symbol.hasInstance,{value:function(H){return k.call(this,H)?!0:this!==A?!1:H&&H._writableState instanceof w}})):k=function(H){return H instanceof this};function A(N){i=i||Fv();var H=this instanceof i;if(!H&&!k.call(A,this))return new A(N);this._writableState=new w(N,this,H),this.writable=!0,N&&(typeof N.write=="function"&&(this._write=N.write),typeof N.writev=="function"&&(this._writev=N.writev),typeof N.destroy=="function"&&(this._destroy=N.destroy),typeof N.final=="function"&&(this._final=N.final)),o.call(this)}A.prototype.pipe=function(){M(this,new y)};function b(N,H){var $=new x;M(N,$),process.nextTick(H,$)}function E(N,H,$,U){var V;return $===null?V=new v:typeof $!="string"&&!H.objectMode&&(V=new p("chunk",["string","Buffer"],$)),V?(M(N,V),process.nextTick(U,V),!1):!0}A.prototype.write=function(N,H,$){var U=this._writableState,V=!1,j=!U.objectMode&&u(N);return j&&!s.isBuffer(N)&&(N=n(N)),typeof H=="function"&&($=H,H=null),j?H="buffer":H||(H=U.defaultEncoding),typeof $!="function"&&($=C),U.ending?b(this,$):(j||E(this,U,N,$))&&(U.pendingcb++,V=F(this,U,j,N,H,$)),V},A.prototype.cork=function(){this._writableState.corked++},A.prototype.uncork=function(){var N=this._writableState;N.corked&&(N.corked--,!N.writing&&!N.corked&&!N.bufferProcessing&&N.bufferedRequest&&B(this,N))},A.prototype.setDefaultEncoding=function(H){if(typeof H=="string"&&(H=H.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((H+"").toLowerCase())>-1))throw new S(H);return this._writableState.defaultEncoding=H,this},Object.defineProperty(A.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function T(N,H,$){return!N.objectMode&&N.decodeStrings!==!1&&typeof H=="string"&&(H=s.from(H,$)),H}Object.defineProperty(A.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function F(N,H,$,U,V,j){if(!$){var q=T(H,U,V);U!==q&&($=!0,V="buffer",U=q)}var Y=H.objectMode?1:U.length;H.length+=Y;var K=H.length<H.highWaterMark;if(K||(H.needDrain=!0),H.writing||H.corked){var te=H.lastBufferedRequest;H.lastBufferedRequest={chunk:U,encoding:V,isBuf:$,callback:j,next:null},te?te.next=H.lastBufferedRequest:H.bufferedRequest=H.lastBufferedRequest,H.bufferedRequestCount+=1}else D(N,H,!1,Y,U,V,j);return K}function D(N,H,$,U,V,j,q){H.writelen=U,H.writecb=q,H.writing=!0,H.sync=!0,H.destroyed?H.onwrite(new _("write")):$?N._writev(V,H.onwrite):N._write(V,j,H.onwrite),H.sync=!1}function R(N,H,$,U,V){--H.pendingcb,$?(process.nextTick(V,U),process.nextTick(X,N,H),N._writableState.errorEmitted=!0,M(N,U)):(V(U),N._writableState.errorEmitted=!0,M(N,U),X(N,H))}function P(N){N.writing=!1,N.writecb=null,N.length-=N.writelen,N.writelen=0}function z(N,H){var $=N._writableState,U=$.sync,V=$.writecb;if(typeof V!="function")throw new m;if(P($),H)R(N,$,U,H,V);else{var j=O($)||N.destroyed;!j&&!$.corked&&!$.bufferProcessing&&$.bufferedRequest&&B(N,$),U?process.nextTick(I,N,$,j,V):I(N,$,j,V)}}function I(N,H,$,U){$||L(N,H),H.pendingcb--,U(),X(N,H)}function L(N,H){H.length===0&&H.needDrain&&(H.needDrain=!1,N.emit("drain"))}function B(N,H){H.bufferProcessing=!0;var $=H.bufferedRequest;if(N._writev&&$&&$.next){var U=H.bufferedRequestCount,V=new Array(U),j=H.corkedRequestsFree;j.entry=$;for(var q=0,Y=!0;$;)V[q]=$,$.isBuf||(Y=!1),$=$.next,q+=1;V.allBuffers=Y,D(N,H,!0,H.length,V,"",j.finish),H.pendingcb++,H.lastBufferedRequest=null,j.next?(H.corkedRequestsFree=j.next,j.next=null):H.corkedRequestsFree=new t(H),H.bufferedRequestCount=0}else{for(;$;){var K=$.chunk,te=$.encoding,ne=$.callback,se=H.objectMode?1:K.length;if(D(N,H,!1,se,K,te,ne),$=$.next,H.bufferedRequestCount--,H.writing)break}$===null&&(H.lastBufferedRequest=null)}H.bufferedRequest=$,H.bufferProcessing=!1}A.prototype._write=function(N,H,$){$(new g("_write()"))},A.prototype._writev=null,A.prototype.end=function(N,H,$){var U=this._writableState;return typeof N=="function"?($=N,N=null,H=null):typeof H=="function"&&($=H,H=null),N!=null&&this.write(N,H),U.corked&&(U.corked=1,this.uncork()),U.ending||Z(this,U,$),this},Object.defineProperty(A.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}});function O(N){return N.ending&&N.length===0&&N.bufferedRequest===null&&!N.finished&&!N.writing}function G(N,H){N._final(function($){H.pendingcb--,$&&M(N,$),H.prefinished=!0,N.emit("prefinish"),X(N,H)})}function W(N,H){!H.prefinished&&!H.finalCalled&&(typeof N._final=="function"&&!H.destroyed?(H.pendingcb++,H.finalCalled=!0,process.nextTick(G,N,H)):(H.prefinished=!0,N.emit("prefinish")))}function X(N,H){var $=O(H);if($&&(W(N,H),H.pendingcb===0&&(H.finished=!0,N.emit("finish"),H.autoDestroy))){var U=N._readableState;(!U||U.autoDestroy&&U.endEmitted)&&N.destroy()}return $}function Z(N,H,$){H.ending=!0,X(N,H),$&&(H.finished?process.nextTick($):N.once("finish",$)),H.ended=!0,N.writable=!1}function J(N,H,$){var U=N.entry;for(N.entry=null;U;){var V=U.callback;H.pendingcb--,V($),U=U.next}H.corkedRequestsFree.next=N}Object.defineProperty(A.prototype,"destroyed",{enumerable:!1,get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(H){this._writableState&&(this._writableState.destroyed=H)}}),A.prototype.destroy=c.destroy,A.prototype._undestroy=c.undestroy,A.prototype._destroy=function(N,H){H(N)}}}),Fv=de({"node_modules/readable-stream/lib/_stream_duplex.js"(e,r){"use strict";var t=Object.keys||function(f){var h=[];for(var d in f)h.push(d);return h};r.exports=n;var i=MC(),a=TC();for(Sp()(n,i),o=t(a.prototype),l=0;l<o.length;l++)s=o[l],n.prototype[s]||(n.prototype[s]=a.prototype[s]);var o,s,l;function n(f){if(!(this instanceof n))return new n(f);i.call(this,f),a.call(this,f),this.allowHalfOpen=!0,f&&(f.readable===!1&&(this.readable=!1),f.writable===!1&&(this.writable=!1),f.allowHalfOpen===!1&&(this.allowHalfOpen=!1,this.once("end",u)))}Object.defineProperty(n.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(n.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(n.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}});function u(){this._writableState.ended||process.nextTick(c,this)}function c(f){f.end()}Object.defineProperty(n.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(h){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=h,this._writableState.destroyed=h)}})}}),KH=de({"node_modules/safe-buffer/index.js"(e,r){var t=kv(),i=t.Buffer;function a(s,l){for(var n in s)l[n]=s[n]}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?r.exports=t:(a(t,e),e.Buffer=o);function o(s,l,n){return i(s,l,n)}o.prototype=Object.create(i.prototype),a(i,o),o.from=function(s,l,n){if(typeof s=="number")throw new TypeError("Argument must not be a number");return i(s,l,n)},o.alloc=function(s,l,n){if(typeof s!="number")throw new TypeError("Argument must be a number");var u=i(s);return l!==void 0?typeof n=="string"?u.fill(l,n):u.fill(l):u.fill(0),u},o.allocUnsafe=function(s){if(typeof s!="number")throw new TypeError("Argument must be a number");return i(s)},o.allocUnsafeSlow=function(s){if(typeof s!="number")throw new TypeError("Argument must be a number");return t.SlowBuffer(s)}}}),AC=de({"node_modules/string_decoder/lib/string_decoder.js"(e){"use strict";var r=KH().Buffer,t=r.isEncoding||function(_){switch(_=""+_,_&&_.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function i(_){if(!_)return"utf8";for(var v;;)switch(_){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return _;default:if(v)return;_=(""+_).toLowerCase(),v=!0}}function a(_){var v=i(_);if(typeof v!="string"&&(r.isEncoding===t||!t(_)))throw new Error("Unknown encoding: "+_);return v||_}e.StringDecoder=o;function o(_){this.encoding=a(_);var v;switch(this.encoding){case"utf16le":this.text=h,this.end=d,v=4;break;case"utf8":this.fillLast=u,v=4;break;case"base64":this.text=p,this.end=g,v=3;break;default:this.write=m,this.end=y;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(v)}o.prototype.write=function(_){if(_.length===0)return"";var v,x;if(this.lastNeed){if(v=this.fillLast(_),v===void 0)return"";x=this.lastNeed,this.lastNeed=0}else x=0;return x<_.length?v?v+this.text(_,x):this.text(_,x):v||""},o.prototype.end=f,o.prototype.text=c,o.prototype.fillLast=function(_){if(this.lastNeed<=_.length)return _.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,this.lastTotal-this.lastNeed,0,_.length),this.lastNeed-=_.length};function s(_){return _<=127?0:_>>5===6?2:_>>4===14?3:_>>3===30?4:_>>6===2?-1:-2}function l(_,v,x){var S=v.length-1;if(S<x)return 0;var M=s(v[S]);return M>=0?(M>0&&(_.lastNeed=M-1),M):--S<x||M===-2?0:(M=s(v[S]),M>=0?(M>0&&(_.lastNeed=M-2),M):--S<x||M===-2?0:(M=s(v[S]),M>=0?(M>0&&(M===2?M=0:_.lastNeed=M-3),M):0))}function n(_,v,x){if((v[0]&192)!==128)return _.lastNeed=0,"\uFFFD";if(_.lastNeed>1&&v.length>1){if((v[1]&192)!==128)return _.lastNeed=1,"\uFFFD";if(_.lastNeed>2&&v.length>2&&(v[2]&192)!==128)return _.lastNeed=2,"\uFFFD"}}function u(_){var v=this.lastTotal-this.lastNeed,x=n(this,_,v);if(x!==void 0)return x;if(this.lastNeed<=_.length)return _.copy(this.lastChar,v,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);_.copy(this.lastChar,v,0,_.length),this.lastNeed-=_.length}function c(_,v){var x=l(this,_,v);if(!this.lastNeed)return _.toString("utf8",v);this.lastTotal=x;var S=_.length-(x-this.lastNeed);return _.copy(this.lastChar,0,S),_.toString("utf8",v,S)}function f(_){var v=_&&_.length?this.write(_):"";return this.lastNeed?v+"\uFFFD":v}function h(_,v){if((_.length-v)%2===0){var x=_.toString("utf16le",v);if(x){var S=x.charCodeAt(x.length-1);if(S>=55296&&S<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1],x.slice(0,-1)}return x}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=_[_.length-1],_.toString("utf16le",v,_.length-1)}function d(_){var v=_&&_.length?this.write(_):"";if(this.lastNeed){var x=this.lastTotal-this.lastNeed;return v+this.lastChar.toString("utf16le",0,x)}return v}function p(_,v){var x=(_.length-v)%3;return x===0?_.toString("base64",v):(this.lastNeed=3-x,this.lastTotal=3,x===1?this.lastChar[0]=_[_.length-1]:(this.lastChar[0]=_[_.length-2],this.lastChar[1]=_[_.length-1]),_.toString("base64",v,_.length-x))}function g(_){var v=_&&_.length?this.write(_):"";return this.lastNeed?v+this.lastChar.toString("base64",0,3-this.lastNeed):v}function m(_){return _.toString(this.encoding)}function y(_){return _&&_.length?this.write(_):""}}}),L3=de({"node_modules/readable-stream/lib/internal/streams/end-of-stream.js"(e,r){"use strict";var t=Lv().codes.ERR_STREAM_PREMATURE_CLOSE;function i(l){var n=!1;return function(){if(!n){n=!0;for(var u=arguments.length,c=new Array(u),f=0;f<u;f++)c[f]=arguments[f];l.apply(this,c)}}}function a(){}function o(l){return l.setHeader&&typeof l.abort=="function"}function s(l,n,u){if(typeof n=="function")return s(l,null,n);n||(n={}),u=i(u||a);var c=n.readable||n.readable!==!1&&l.readable,f=n.writable||n.writable!==!1&&l.writable,h=function(){l.writable||p()},d=l._writableState&&l._writableState.finished,p=function(){f=!1,d=!0,c||u.call(l)},g=l._readableState&&l._readableState.endEmitted,m=function(){c=!1,g=!0,f||u.call(l)},y=function(S){u.call(l,S)},_=function(){var S;if(c&&!g)return(!l._readableState||!l._readableState.ended)&&(S=new t),u.call(l,S);if(f&&!d)return(!l._writableState||!l._writableState.ended)&&(S=new t),u.call(l,S)},v=function(){l.req.on("finish",p)};return o(l)?(l.on("complete",p),l.on("abort",_),l.req?v():l.on("request",v)):f&&!l._writableState&&(l.on("end",h),l.on("close",h)),l.on("end",m),l.on("finish",p),n.error!==!1&&l.on("error",y),l.on("close",_),function(){l.removeListener("complete",p),l.removeListener("abort",_),l.removeListener("request",v),l.req&&l.req.removeListener("finish",p),l.removeListener("end",h),l.removeListener("close",h),l.removeListener("finish",p),l.removeListener("end",m),l.removeListener("error",y),l.removeListener("close",_)}}r.exports=s}}),JH=de({"node_modules/readable-stream/lib/internal/streams/async_iterator.js"(e,r){"use strict";var t;function i(S,M,C){return M=a(M),M in S?Object.defineProperty(S,M,{value:C,enumerable:!0,configurable:!0,writable:!0}):S[M]=C,S}function a(S){var M=o(S,"string");return typeof M=="symbol"?M:String(M)}function o(S,M){if(typeof S!="object"||S===null)return S;var C=S[Symbol.toPrimitive];if(C!==void 0){var w=C.call(S,M||"default");if(typeof w!="object")return w;throw new TypeError("@@toPrimitive must return a primitive value.")}return(M==="string"?String:Number)(S)}var s=L3(),l=Symbol("lastResolve"),n=Symbol("lastReject"),u=Symbol("error"),c=Symbol("ended"),f=Symbol("lastPromise"),h=Symbol("handlePromise"),d=Symbol("stream");function p(S,M){return{value:S,done:M}}function g(S){var M=S[l];if(M!==null){var C=S[d].read();C!==null&&(S[f]=null,S[l]=null,S[n]=null,M(p(C,!1)))}}function m(S){process.nextTick(g,S)}function y(S,M){return function(C,w){S.then(function(){if(M[c]){C(p(void 0,!0));return}M[h](C,w)},w)}}var _=Object.getPrototypeOf(function(){}),v=Object.setPrototypeOf((t={get stream(){return this[d]},next:function(){var M=this,C=this[u];if(C!==null)return Promise.reject(C);if(this[c])return Promise.resolve(p(void 0,!0));if(this[d].destroyed)return new Promise(function(b,E){process.nextTick(function(){M[u]?E(M[u]):b(p(void 0,!0))})});var w=this[f],k;if(w)k=new Promise(y(w,this));else{var A=this[d].read();if(A!==null)return Promise.resolve(p(A,!1));k=new Promise(this[h])}return this[f]=k,k}},i(t,Symbol.asyncIterator,function(){return this}),i(t,"return",function(){var M=this;return new Promise(function(C,w){M[d].destroy(null,function(k){if(k){w(k);return}C(p(void 0,!0))})})}),t),_),x=function(M){var C,w=Object.create(v,(C={},i(C,d,{value:M,writable:!0}),i(C,l,{value:null,writable:!0}),i(C,n,{value:null,writable:!0}),i(C,u,{value:null,writable:!0}),i(C,c,{value:M._readableState.endEmitted,writable:!0}),i(C,h,{value:function(A,b){var E=w[d].read();E?(w[f]=null,w[l]=null,w[n]=null,A(p(E,!1))):(w[l]=A,w[n]=b)},writable:!0}),C));return w[f]=null,s(M,function(k){if(k&&k.code!=="ERR_STREAM_PREMATURE_CLOSE"){var A=w[n];A!==null&&(w[f]=null,w[l]=null,w[n]=null,A(k)),w[u]=k;return}var b=w[l];b!==null&&(w[f]=null,w[l]=null,w[n]=null,b(p(void 0,!0))),w[c]=!0}),M.on("readable",m.bind(null,w)),w};r.exports=x}}),QH=de({"node_modules/readable-stream/lib/internal/streams/from-browser.js"(e,r){r.exports=function(){throw new Error("Readable.from is not available in the browser")}}}),MC=de({"node_modules/readable-stream/lib/_stream_readable.js"(e,r){"use strict";r.exports=E;var t;E.ReadableState=b;var i=yv().EventEmitter,a=function(Y,K){return Y.listeners(K).length},o=uC(),s=kv().Buffer,l=(typeof window<"u"||typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function n(q){return s.from(q)}function u(q){return s.isBuffer(q)||q instanceof l}var c=xC(),f;c&&c.debuglog?f=c.debuglog("stream"):f=function(){};var h=XH(),d=bC(),p=wC(),g=p.getHighWaterMark,m=Lv().codes,y=m.ERR_INVALID_ARG_TYPE,_=m.ERR_STREAM_PUSH_AFTER_EOF,v=m.ERR_METHOD_NOT_IMPLEMENTED,x=m.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,S,M,C;Sp()(E,o);var w=d.errorOrDestroy,k=["error","close","destroy","pause","resume"];function A(q,Y,K){if(typeof q.prependListener=="function")return q.prependListener(Y,K);!q._events||!q._events[Y]?q.on(Y,K):Array.isArray(q._events[Y])?q._events[Y].unshift(K):q._events[Y]=[K,q._events[Y]]}function b(q,Y,K){t=t||Fv(),q=q||{},typeof K!="boolean"&&(K=Y instanceof t),this.objectMode=!!q.objectMode,K&&(this.objectMode=this.objectMode||!!q.readableObjectMode),this.highWaterMark=g(this,q,"readableHighWaterMark",K),this.buffer=new h,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=q.emitClose!==!1,this.autoDestroy=!!q.autoDestroy,this.destroyed=!1,this.defaultEncoding=q.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,q.encoding&&(S||(S=AC().StringDecoder),this.decoder=new S(q.encoding),this.encoding=q.encoding)}function E(q){if(t=t||Fv(),!(this instanceof E))return new E(q);var Y=this instanceof t;this._readableState=new b(q,this,Y),this.readable=!0,q&&(typeof q.read=="function"&&(this._read=q.read),typeof q.destroy=="function"&&(this._destroy=q.destroy)),o.call(this)}Object.defineProperty(E.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(Y){this._readableState&&(this._readableState.destroyed=Y)}}),E.prototype.destroy=d.destroy,E.prototype._undestroy=d.undestroy,E.prototype._destroy=function(q,Y){Y(q)},E.prototype.push=function(q,Y){var K=this._readableState,te;return K.objectMode?te=!0:typeof q=="string"&&(Y=Y||K.defaultEncoding,Y!==K.encoding&&(q=s.from(q,Y),Y=""),te=!0),T(this,q,Y,!1,te)},E.prototype.unshift=function(q){return T(this,q,null,!0,!1)};function T(q,Y,K,te,ne){f("readableAddChunk",Y);var se=q._readableState;if(Y===null)se.reading=!1,I(q,se);else{var le;if(ne||(le=D(se,Y)),le)w(q,le);else if(se.objectMode||Y&&Y.length>0)if(typeof Y!="string"&&!se.objectMode&&Object.getPrototypeOf(Y)!==s.prototype&&(Y=n(Y)),te)se.endEmitted?w(q,new x):F(q,se,Y,!0);else if(se.ended)w(q,new _);else{if(se.destroyed)return!1;se.reading=!1,se.decoder&&!K?(Y=se.decoder.write(Y),se.objectMode||Y.length!==0?F(q,se,Y,!1):O(q,se)):F(q,se,Y,!1)}else te||(se.reading=!1,O(q,se))}return!se.ended&&(se.length<se.highWaterMark||se.length===0)}function F(q,Y,K,te){Y.flowing&&Y.length===0&&!Y.sync?(Y.awaitDrain=0,q.emit("data",K)):(Y.length+=Y.objectMode?1:K.length,te?Y.buffer.unshift(K):Y.buffer.push(K),Y.needReadable&&L(q)),O(q,Y)}function D(q,Y){var K;return!u(Y)&&typeof Y!="string"&&Y!==void 0&&!q.objectMode&&(K=new y("chunk",["string","Buffer","Uint8Array"],Y)),K}E.prototype.isPaused=function(){return this._readableState.flowing===!1},E.prototype.setEncoding=function(q){S||(S=AC().StringDecoder);var Y=new S(q);this._readableState.decoder=Y,this._readableState.encoding=this._readableState.decoder.encoding;for(var K=this._readableState.buffer.head,te="";K!==null;)te+=Y.write(K.data),K=K.next;return this._readableState.buffer.clear(),te!==""&&this._readableState.buffer.push(te),this._readableState.length=te.length,this};var R=1073741824;function P(q){return q>=R?q=R:(q--,q|=q>>>1,q|=q>>>2,q|=q>>>4,q|=q>>>8,q|=q>>>16,q++),q}function z(q,Y){return q<=0||Y.length===0&&Y.ended?0:Y.objectMode?1:q!==q?Y.flowing&&Y.length?Y.buffer.head.data.length:Y.length:(q>Y.highWaterMark&&(Y.highWaterMark=P(q)),q<=Y.length?q:Y.ended?Y.length:(Y.needReadable=!0,0))}E.prototype.read=function(q){f("read",q),q=parseInt(q,10);var Y=this._readableState,K=q;if(q!==0&&(Y.emittedReadable=!1),q===0&&Y.needReadable&&((Y.highWaterMark!==0?Y.length>=Y.highWaterMark:Y.length>0)||Y.ended))return f("read: emitReadable",Y.length,Y.ended),Y.length===0&&Y.ended?U(this):L(this),null;if(q=z(q,Y),q===0&&Y.ended)return Y.length===0&&U(this),null;var te=Y.needReadable;f("need readable",te),(Y.length===0||Y.length-q<Y.highWaterMark)&&(te=!0,f("length less than watermark",te)),Y.ended||Y.reading?(te=!1,f("reading or ended",te)):te&&(f("do read"),Y.reading=!0,Y.sync=!0,Y.length===0&&(Y.needReadable=!0),this._read(Y.highWaterMark),Y.sync=!1,Y.reading||(q=z(K,Y)));var ne;return q>0?ne=$(q,Y):ne=null,ne===null?(Y.needReadable=Y.length<=Y.highWaterMark,q=0):(Y.length-=q,Y.awaitDrain=0),Y.length===0&&(Y.ended||(Y.needReadable=!0),K!==q&&Y.ended&&U(this)),ne!==null&&this.emit("data",ne),ne};function I(q,Y){if(f("onEofChunk"),!Y.ended){if(Y.decoder){var K=Y.decoder.end();K&&K.length&&(Y.buffer.push(K),Y.length+=Y.objectMode?1:K.length)}Y.ended=!0,Y.sync?L(q):(Y.needReadable=!1,Y.emittedReadable||(Y.emittedReadable=!0,B(q)))}}function L(q){var Y=q._readableState;f("emitReadable",Y.needReadable,Y.emittedReadable),Y.needReadable=!1,Y.emittedReadable||(f("emitReadable",Y.flowing),Y.emittedReadable=!0,process.nextTick(B,q))}function B(q){var Y=q._readableState;f("emitReadable_",Y.destroyed,Y.length,Y.ended),!Y.destroyed&&(Y.length||Y.ended)&&(q.emit("readable"),Y.emittedReadable=!1),Y.needReadable=!Y.flowing&&!Y.ended&&Y.length<=Y.highWaterMark,H(q)}function O(q,Y){Y.readingMore||(Y.readingMore=!0,process.nextTick(G,q,Y))}function G(q,Y){for(;!Y.reading&&!Y.ended&&(Y.length<Y.highWaterMark||Y.flowing&&Y.length===0);){var K=Y.length;if(f("maybeReadMore read 0"),q.read(0),K===Y.length)break}Y.readingMore=!1}E.prototype._read=function(q){w(this,new v("_read()"))},E.prototype.pipe=function(q,Y){var K=this,te=this._readableState;switch(te.pipesCount){case 0:te.pipes=q;break;case 1:te.pipes=[te.pipes,q];break;default:te.pipes.push(q);break}te.pipesCount+=1,f("pipe count=%d opts=%j",te.pipesCount,Y);var ne=(!Y||Y.end!==!1)&&q!==process.stdout&&q!==process.stderr,se=ne?ce:Q;te.endEmitted?process.nextTick(se):K.once("end",se),q.on("unpipe",le);function le(ue,ge){f("onunpipe"),ue===K&&ge&&ge.hasUnpiped===!1&&(ge.hasUnpiped=!0,ye())}function ce(){f("onend"),q.end()}var pe=W(K);q.on("drain",pe);var xe=!1;function ye(){f("cleanup"),q.removeListener("close",ee),q.removeListener("finish",ie),q.removeListener("drain",pe),q.removeListener("error",ae),q.removeListener("unpipe",le),K.removeListener("end",ce),K.removeListener("end",Q),K.removeListener("data",fe),xe=!0,te.awaitDrain&&(!q._writableState||q._writableState.needDrain)&&pe()}K.on("data",fe);function fe(ue){f("ondata");var ge=q.write(ue);f("dest.write",ge),ge===!1&&((te.pipesCount===1&&te.pipes===q||te.pipesCount>1&&j(te.pipes,q)!==-1)&&!xe&&(f("false write response, pause",te.awaitDrain),te.awaitDrain++),K.pause())}function ae(ue){f("onerror",ue),Q(),q.removeListener("error",ae),a(q,"error")===0&&w(q,ue)}A(q,"error",ae);function ee(){q.removeListener("finish",ie),Q()}q.once("close",ee);function ie(){f("onfinish"),q.removeListener("close",ee),Q()}q.once("finish",ie);function Q(){f("unpipe"),K.unpipe(q)}return q.emit("pipe",K),te.flowing||(f("pipe resume"),K.resume()),q};function W(q){return function(){var K=q._readableState;f("pipeOnDrain",K.awaitDrain),K.awaitDrain&&K.awaitDrain--,K.awaitDrain===0&&a(q,"data")&&(K.flowing=!0,H(q))}}E.prototype.unpipe=function(q){var Y=this._readableState,K={hasUnpiped:!1};if(Y.pipesCount===0)return this;if(Y.pipesCount===1)return q&&q!==Y.pipes?this:(q||(q=Y.pipes),Y.pipes=null,Y.pipesCount=0,Y.flowing=!1,q&&q.emit("unpipe",this,K),this);if(!q){var te=Y.pipes,ne=Y.pipesCount;Y.pipes=null,Y.pipesCount=0,Y.flowing=!1;for(var se=0;se<ne;se++)te[se].emit("unpipe",this,{hasUnpiped:!1});return this}var le=j(Y.pipes,q);return le===-1?this:(Y.pipes.splice(le,1),Y.pipesCount-=1,Y.pipesCount===1&&(Y.pipes=Y.pipes[0]),q.emit("unpipe",this,K),this)},E.prototype.on=function(q,Y){var K=o.prototype.on.call(this,q,Y),te=this._readableState;return q==="data"?(te.readableListening=this.listenerCount("readable")>0,te.flowing!==!1&&this.resume()):q==="readable"&&!te.endEmitted&&!te.readableListening&&(te.readableListening=te.needReadable=!0,te.flowing=!1,te.emittedReadable=!1,f("on readable",te.length,te.reading),te.length?L(this):te.reading||process.nextTick(Z,this)),K},E.prototype.addListener=E.prototype.on,E.prototype.removeListener=function(q,Y){var K=o.prototype.removeListener.call(this,q,Y);return q==="readable"&&process.nextTick(X,this),K},E.prototype.removeAllListeners=function(q){var Y=o.prototype.removeAllListeners.apply(this,arguments);return(q==="readable"||q===void 0)&&process.nextTick(X,this),Y};function X(q){var Y=q._readableState;Y.readableListening=q.listenerCount("readable")>0,Y.resumeScheduled&&!Y.paused?Y.flowing=!0:q.listenerCount("data")>0&&q.resume()}function Z(q){f("readable nexttick read 0"),q.read(0)}E.prototype.resume=function(){var q=this._readableState;return q.flowing||(f("resume"),q.flowing=!q.readableListening,J(this,q)),q.paused=!1,this};function J(q,Y){Y.resumeScheduled||(Y.resumeScheduled=!0,process.nextTick(N,q,Y))}function N(q,Y){f("resume",Y.reading),Y.reading||q.read(0),Y.resumeScheduled=!1,q.emit("resume"),H(q),Y.flowing&&!Y.reading&&q.read(0)}E.prototype.pause=function(){return f("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(f("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function H(q){var Y=q._readableState;for(f("flow",Y.flowing);Y.flowing&&q.read()!==null;);}E.prototype.wrap=function(q){var Y=this,K=this._readableState,te=!1;q.on("end",function(){if(f("wrapped end"),K.decoder&&!K.ended){var le=K.decoder.end();le&&le.length&&Y.push(le)}Y.push(null)}),q.on("data",function(le){if(f("wrapped data"),K.decoder&&(le=K.decoder.write(le)),!(K.objectMode&&le==null)&&!(!K.objectMode&&(!le||!le.length))){var ce=Y.push(le);ce||(te=!0,q.pause())}});for(var ne in q)this[ne]===void 0&&typeof q[ne]=="function"&&(this[ne]=(function(ce){return function(){return q[ce].apply(q,arguments)}})(ne));for(var se=0;se<k.length;se++)q.on(k[se],this.emit.bind(this,k[se]));return this._read=function(le){f("wrapped _read",le),te&&(te=!1,q.resume())},this},typeof Symbol=="function"&&(E.prototype[Symbol.asyncIterator]=function(){return M===void 0&&(M=JH()),M(this)}),Object.defineProperty(E.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(E.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(E.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(Y){this._readableState&&(this._readableState.flowing=Y)}}),E._fromList=$,Object.defineProperty(E.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}});function $(q,Y){if(Y.length===0)return null;var K;return Y.objectMode?K=Y.buffer.shift():!q||q>=Y.length?(Y.decoder?K=Y.buffer.join(""):Y.buffer.length===1?K=Y.buffer.first():K=Y.buffer.concat(Y.length),Y.buffer.clear()):K=Y.buffer.consume(q,Y.decoder),K}function U(q){var Y=q._readableState;f("endReadable",Y.endEmitted),Y.endEmitted||(Y.ended=!0,process.nextTick(V,Y,q))}function V(q,Y){if(f("endReadableNT",q.endEmitted,q.length),!q.endEmitted&&q.length===0&&(q.endEmitted=!0,Y.readable=!1,Y.emit("end"),q.autoDestroy)){var K=Y._writableState;(!K||K.autoDestroy&&K.finished)&&Y.destroy()}}typeof Symbol=="function"&&(E.from=function(q,Y){return C===void 0&&(C=QH()),C(E,q,Y)});function j(q,Y){for(var K=0,te=q.length;K<te;K++)if(q[K]===Y)return K;return-1}}}),SC=de({"node_modules/readable-stream/lib/_stream_transform.js"(e,r){"use strict";r.exports=u;var t=Lv().codes,i=t.ERR_METHOD_NOT_IMPLEMENTED,a=t.ERR_MULTIPLE_CALLBACK,o=t.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=t.ERR_TRANSFORM_WITH_LENGTH_0,l=Fv();Sp()(u,l);function n(h,d){var p=this._transformState;p.transforming=!1;var g=p.writecb;if(g===null)return this.emit("error",new a);p.writechunk=null,p.writecb=null,d!=null&&this.push(d),g(h);var m=this._readableState;m.reading=!1,(m.needReadable||m.length<m.highWaterMark)&&this._read(m.highWaterMark)}function u(h){if(!(this instanceof u))return new u(h);l.call(this,h),this._transformState={afterTransform:n.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,h&&(typeof h.transform=="function"&&(this._transform=h.transform),typeof h.flush=="function"&&(this._flush=h.flush)),this.on("prefinish",c)}function c(){var h=this;typeof this._flush=="function"&&!this._readableState.destroyed?this._flush(function(d,p){f(h,d,p)}):f(this,null,null)}u.prototype.push=function(h,d){return this._transformState.needTransform=!1,l.prototype.push.call(this,h,d)},u.prototype._transform=function(h,d,p){p(new i("_transform()"))},u.prototype._write=function(h,d,p){var g=this._transformState;if(g.writecb=p,g.writechunk=h,g.writeencoding=d,!g.transforming){var m=this._readableState;(g.needTransform||m.needReadable||m.length<m.highWaterMark)&&this._read(m.highWaterMark)}},u.prototype._read=function(h){var d=this._transformState;d.writechunk!==null&&!d.transforming?(d.transforming=!0,this._transform(d.writechunk,d.writeencoding,d.afterTransform)):d.needTransform=!0},u.prototype._destroy=function(h,d){l.prototype._destroy.call(this,h,function(p){d(p)})};function f(h,d,p){if(d)return h.emit("error",d);if(p!=null&&h.push(p),h._writableState.length)throw new s;if(h._transformState.transforming)throw new o;return h.push(null)}}}),e$=de({"node_modules/readable-stream/lib/_stream_passthrough.js"(e,r){"use strict";r.exports=i;var t=SC();Sp()(i,t);function i(a){if(!(this instanceof i))return new i(a);t.call(this,a)}i.prototype._transform=function(a,o,s){s(null,a)}}}),t$=de({"node_modules/readable-stream/lib/internal/streams/pipeline.js"(e,r){"use strict";var t;function i(p){var g=!1;return function(){g||(g=!0,p.apply(void 0,arguments))}}var a=Lv().codes,o=a.ERR_MISSING_ARGS,s=a.ERR_STREAM_DESTROYED;function l(p){if(p)throw p}function n(p){return p.setHeader&&typeof p.abort=="function"}function u(p,g,m,y){y=i(y);var _=!1;p.on("close",function(){_=!0}),t===void 0&&(t=L3()),t(p,{readable:g,writable:m},function(x){if(x)return y(x);_=!0,y()});var v=!1;return function(x){if(!_&&!v){if(v=!0,n(p))return p.abort();if(typeof p.destroy=="function")return p.destroy();y(x||new s("pipe"))}}}function c(p){p()}function f(p,g){return p.pipe(g)}function h(p){return!p.length||typeof p[p.length-1]!="function"?l:p.pop()}function d(){for(var p=arguments.length,g=new Array(p),m=0;m<p;m++)g[m]=arguments[m];var y=h(g);if(Array.isArray(g[0])&&(g=g[0]),g.length<2)throw new o("streams");var _,v=g.map(function(x,S){var M=S<g.length-1,C=S>0;return u(x,M,C,function(w){_||(_=w),w&&v.forEach(c),!M&&(v.forEach(c),y(_))})});return g.reduce(f)}r.exports=d}}),r$=de({"node_modules/stream-browserify/index.js"(e,r){r.exports=a;var t=yv().EventEmitter,i=Sp();i(a,t),a.Readable=MC(),a.Writable=TC(),a.Duplex=Fv(),a.Transform=SC(),a.PassThrough=e$(),a.finished=L3(),a.pipeline=t$(),a.Stream=a;function a(){t.call(this)}a.prototype.pipe=function(o,s){var l=this;function n(g){o.writable&&o.write(g)===!1&&l.pause&&l.pause()}l.on("data",n);function u(){l.readable&&l.resume&&l.resume()}o.on("drain",u),!o._isStdio&&(!s||s.end!==!1)&&(l.on("end",f),l.on("close",h));var c=!1;function f(){c||(c=!0,o.end())}function h(){c||(c=!0,typeof o.destroy=="function"&&o.destroy())}function d(g){if(p(),t.listenerCount(this,"error")===0)throw g}l.on("error",d),o.on("error",d);function p(){l.removeListener("data",n),o.removeListener("drain",u),l.removeListener("end",f),l.removeListener("close",h),l.removeListener("error",d),o.removeListener("error",d),l.removeListener("end",p),l.removeListener("close",p),o.removeListener("close",p)}return l.on("end",p),l.on("close",p),o.on("close",p),o.emit("pipe",l),o}}}),S1=de({"node_modules/util/util.js"(e){var r=Object.getOwnPropertyDescriptors||function(G){for(var W=Object.keys(G),X={},Z=0;Z<W.length;Z++)X[W[Z]]=Object.getOwnPropertyDescriptor(G,W[Z]);return X},t=/%[sdj%]/g;e.format=function(O){if(!S(O)){for(var G=[],W=0;W<arguments.length;W++)G.push(s(arguments[W]));return G.join(" ")}for(var W=1,X=arguments,Z=X.length,J=String(O).replace(t,function(H){if(H==="%%")return"%";if(W>=Z)return H;switch(H){case"%s":return String(X[W++]);case"%d":return Number(X[W++]);case"%j":try{return JSON.stringify(X[W++])}catch{return"[Circular]"}default:return H}}),N=X[W];W<Z;N=X[++W])_(N)||!k(N)?J+=" "+N:J+=" "+s(N);return J},e.deprecate=function(O,G){if(typeof process<"u"&&process.noDeprecation===!0)return O;if(typeof process>"u")return function(){return e.deprecate(O,G).apply(this,arguments)};var W=!1;function X(){if(!W){if(process.throwDeprecation)throw new Error(G);process.traceDeprecation?console.trace(G):console.error(G),W=!0}return O.apply(this,arguments)}return X};var i={},a=/^$/;o="false",o=o.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".*").replace(/,/g,"$|^").toUpperCase(),a=new RegExp("^"+o+"$","i");var o;e.debuglog=function(O){if(O=O.toUpperCase(),!i[O])if(a.test(O)){var G=process.pid;i[O]=function(){var W=e.format.apply(e,arguments);console.error("%s %d: %s",O,G,W)}}else i[O]=function(){};return i[O]};function s(O,G){var W={seen:[],stylize:n};return arguments.length>=3&&(W.depth=arguments[2]),arguments.length>=4&&(W.colors=arguments[3]),y(G)?W.showHidden=G:G&&e._extend(W,G),C(W.showHidden)&&(W.showHidden=!1),C(W.depth)&&(W.depth=2),C(W.colors)&&(W.colors=!1),C(W.customInspect)&&(W.customInspect=!0),W.colors&&(W.stylize=l),c(W,O,W.depth)}e.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function l(O,G){var W=s.styles[G];return W?"\x1B["+s.colors[W][0]+"m"+O+"\x1B["+s.colors[W][1]+"m":O}function n(O,G){return O}function u(O){var G={};return O.forEach(function(W,X){G[W]=!0}),G}function c(O,G,W){if(O.customInspect&&G&&E(G.inspect)&&G.inspect!==e.inspect&&!(G.constructor&&G.constructor.prototype===G)){var X=G.inspect(W,O);return S(X)||(X=c(O,X,W)),X}var Z=f(O,G);if(Z)return Z;var J=Object.keys(G),N=u(J);if(O.showHidden&&(J=Object.getOwnPropertyNames(G)),b(G)&&(J.indexOf("message")>=0||J.indexOf("description")>=0))return h(G);if(J.length===0){if(E(G)){var H=G.name?": "+G.name:"";return O.stylize("[Function"+H+"]","special")}if(w(G))return O.stylize(RegExp.prototype.toString.call(G),"regexp");if(A(G))return O.stylize(Date.prototype.toString.call(G),"date");if(b(G))return h(G)}var $="",U=!1,V=["{","}"];if(m(G)&&(U=!0,V=["[","]"]),E(G)){var j=G.name?": "+G.name:"";$=" [Function"+j+"]"}if(w(G)&&($=" "+RegExp.prototype.toString.call(G)),A(G)&&($=" "+Date.prototype.toUTCString.call(G)),b(G)&&($=" "+h(G)),J.length===0&&(!U||G.length==0))return V[0]+$+V[1];if(W<0)return w(G)?O.stylize(RegExp.prototype.toString.call(G),"regexp"):O.stylize("[Object]","special");O.seen.push(G);var q;return U?q=d(O,G,W,N,J):q=J.map(function(Y){return p(O,G,W,N,Y,U)}),O.seen.pop(),g(q,$,V)}function f(O,G){if(C(G))return O.stylize("undefined","undefined");if(S(G)){var W="'"+JSON.stringify(G).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return O.stylize(W,"string")}if(x(G))return O.stylize(""+G,"number");if(y(G))return O.stylize(""+G,"boolean");if(_(G))return O.stylize("null","null")}function h(O){return"["+Error.prototype.toString.call(O)+"]"}function d(O,G,W,X,Z){for(var J=[],N=0,H=G.length;N<H;++N)z(G,String(N))?J.push(p(O,G,W,X,String(N),!0)):J.push("");return Z.forEach(function($){$.match(/^\d+$/)||J.push(p(O,G,W,X,$,!0))}),J}function p(O,G,W,X,Z,J){var N,H,$;if($=Object.getOwnPropertyDescriptor(G,Z)||{value:G[Z]},$.get?$.set?H=O.stylize("[Getter/Setter]","special"):H=O.stylize("[Getter]","special"):$.set&&(H=O.stylize("[Setter]","special")),z(X,Z)||(N="["+Z+"]"),H||(O.seen.indexOf($.value)<0?(_(W)?H=c(O,$.value,null):H=c(O,$.value,W-1),H.indexOf(`
+`)>-1&&(J?H=H.split(`
+`).map(function(U){return"  "+U}).join(`
+`).slice(2):H=`
+`+H.split(`
+`).map(function(U){return"   "+U}).join(`
+`))):H=O.stylize("[Circular]","special")),C(N)){if(J&&Z.match(/^\d+$/))return H;N=JSON.stringify(""+Z),N.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(N=N.slice(1,-1),N=O.stylize(N,"name")):(N=N.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),N=O.stylize(N,"string"))}return N+": "+H}function g(O,G,W){var X=0,Z=O.reduce(function(J,N){return X++,N.indexOf(`
+`)>=0&&X++,J+N.replace(/\u001b\[\d\d?m/g,"").length+1},0);return Z>60?W[0]+(G===""?"":G+`
+ `)+" "+O.join(`,
+  `)+" "+W[1]:W[0]+G+" "+O.join(", ")+" "+W[1]}e.types=yC();function m(O){return Array.isArray(O)}e.isArray=m;function y(O){return typeof O=="boolean"}e.isBoolean=y;function _(O){return O===null}e.isNull=_;function v(O){return O==null}e.isNullOrUndefined=v;function x(O){return typeof O=="number"}e.isNumber=x;function S(O){return typeof O=="string"}e.isString=S;function M(O){return typeof O=="symbol"}e.isSymbol=M;function C(O){return O===void 0}e.isUndefined=C;function w(O){return k(O)&&F(O)==="[object RegExp]"}e.isRegExp=w,e.types.isRegExp=w;function k(O){return typeof O=="object"&&O!==null}e.isObject=k;function A(O){return k(O)&&F(O)==="[object Date]"}e.isDate=A,e.types.isDate=A;function b(O){return k(O)&&(F(O)==="[object Error]"||O instanceof Error)}e.isError=b,e.types.isNativeError=b;function E(O){return typeof O=="function"}e.isFunction=E;function T(O){return O===null||typeof O=="boolean"||typeof O=="number"||typeof O=="string"||typeof O=="symbol"||typeof O>"u"}e.isPrimitive=T,e.isBuffer=_C();function F(O){return Object.prototype.toString.call(O)}function D(O){return O<10?"0"+O.toString(10):O.toString(10)}var R=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function P(){var O=new Date,G=[D(O.getHours()),D(O.getMinutes()),D(O.getSeconds())].join(":");return[O.getDate(),R[O.getMonth()],G].join(" ")}e.log=function(){console.log("%s - %s",P(),e.format.apply(e,arguments))},e.inherits=Sp(),e._extend=function(O,G){if(!G||!k(G))return O;for(var W=Object.keys(G),X=W.length;X--;)O[W[X]]=G[W[X]];return O};function z(O,G){return Object.prototype.hasOwnProperty.call(O,G)}var I=typeof Symbol<"u"?Symbol("util.promisify.custom"):void 0;e.promisify=function(G){if(typeof G!="function")throw new TypeError('The "original" argument must be of type Function');if(I&&G[I]){var W=G[I];if(typeof W!="function")throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(W,I,{value:W,enumerable:!1,writable:!1,configurable:!0}),W}function W(){for(var X,Z,J=new Promise(function($,U){X=$,Z=U}),N=[],H=0;H<arguments.length;H++)N.push(arguments[H]);N.push(function($,U){$?Z($):X(U)});try{G.apply(this,N)}catch($){Z($)}return J}return Object.setPrototypeOf(W,Object.getPrototypeOf(G)),I&&Object.defineProperty(W,I,{value:W,enumerable:!1,writable:!1,configurable:!0}),Object.defineProperties(W,r(G))},e.promisify.custom=I;function L(O,G){if(!O){var W=new Error("Promise was rejected with a falsy value");W.reason=O,O=W}return G(O)}function B(O){if(typeof O!="function")throw new TypeError('The "original" argument must be of type Function');function G(){for(var W=[],X=0;X<arguments.length;X++)W.push(arguments[X]);var Z=W.pop();if(typeof Z!="function")throw new TypeError("The last argument must be of type Function");var J=this,N=function(){return Z.apply(J,arguments)};O.apply(this,W).then(function(H){process.nextTick(N.bind(null,null,H))},function(H){process.nextTick(L.bind(null,H,N))})}return Object.setPrototypeOf(G,Object.getPrototypeOf(O)),Object.defineProperties(G,r(O)),G}e.callbackify=B}}),EC=de({"node_modules/assert/build/internal/errors.js"(e,r){"use strict";function t(C){"@babel/helpers - typeof";return t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(w){return typeof w}:function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},t(C)}function i(C,w){for(var k=0;k<w.length;k++){var A=w[k];A.enumerable=A.enumerable||!1,A.configurable=!0,"value"in A&&(A.writable=!0),Object.defineProperty(C,o(A.key),A)}}function a(C,w,k){return w&&i(C.prototype,w),k&&i(C,k),Object.defineProperty(C,"prototype",{writable:!1}),C}function o(C){var w=s(C,"string");return t(w)==="symbol"?w:String(w)}function s(C,w){if(t(C)!=="object"||C===null)return C;var k=C[Symbol.toPrimitive];if(k!==void 0){var A=k.call(C,w||"default");if(t(A)!=="object")return A;throw new TypeError("@@toPrimitive must return a primitive value.")}return(w==="string"?String:Number)(C)}function l(C,w){if(!(C instanceof w))throw new TypeError("Cannot call a class as a function")}function n(C,w){if(typeof w!="function"&&w!==null)throw new TypeError("Super expression must either be null or a function");C.prototype=Object.create(w&&w.prototype,{constructor:{value:C,writable:!0,configurable:!0}}),Object.defineProperty(C,"prototype",{writable:!1}),w&&u(C,w)}function u(C,w){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(A,b){return A.__proto__=b,A},u(C,w)}function c(C){var w=d();return function(){var A=p(C),b;if(w){var E=p(this).constructor;b=Reflect.construct(A,arguments,E)}else b=A.apply(this,arguments);return f(this,b)}}function f(C,w){if(w&&(t(w)==="object"||typeof w=="function"))return w;if(w!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return h(C)}function h(C){if(C===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return C}function d(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function p(C){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(k){return k.__proto__||Object.getPrototypeOf(k)},p(C)}var g={},m,y;function _(C,w,k){k||(k=Error);function A(E,T,F){return typeof w=="string"?w:w(E,T,F)}var b=(function(E){n(F,E);var T=c(F);function F(D,R,P){var z;return l(this,F),z=T.call(this,A(D,R,P)),z.code=C,z}return a(F)})(k);g[C]=b}function v(C,w){if(Array.isArray(C)){var k=C.length;return C=C.map(function(A){return String(A)}),k>2?"one of ".concat(w," ").concat(C.slice(0,k-1).join(", "),", or ")+C[k-1]:k===2?"one of ".concat(w," ").concat(C[0]," or ").concat(C[1]):"of ".concat(w," ").concat(C[0])}else return"of ".concat(w," ").concat(String(C))}function x(C,w,k){return C.substr(!k||k<0?0:+k,w.length)===w}function S(C,w,k){return(k===void 0||k>C.length)&&(k=C.length),C.substring(k-w.length,k)===w}function M(C,w,k){return typeof k!="number"&&(k=0),k+w.length>C.length?!1:C.indexOf(w,k)!==-1}_("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError),_("ERR_INVALID_ARG_TYPE",function(C,w,k){m===void 0&&(m=P3()),m(typeof C=="string","'name' must be a string");var A;typeof w=="string"&&x(w,"not ")?(A="must not be",w=w.replace(/^not /,"")):A="must be";var b;if(S(C," argument"))b="The ".concat(C," ").concat(A," ").concat(v(w,"type"));else{var E=M(C,".")?"property":"argument";b='The "'.concat(C,'" ').concat(E," ").concat(A," ").concat(v(w,"type"))}return b+=". Received type ".concat(t(k)),b},TypeError),_("ERR_INVALID_ARG_VALUE",function(C,w){var k=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"is invalid";y===void 0&&(y=S1());var A=y.inspect(w);return A.length>128&&(A="".concat(A.slice(0,128),"...")),"The argument '".concat(C,"' ").concat(k,". Received ").concat(A)},TypeError,RangeError),_("ERR_INVALID_RETURN_VALUE",function(C,w,k){var A;return k&&k.constructor&&k.constructor.name?A="instance of ".concat(k.constructor.name):A="type ".concat(t(k)),"Expected ".concat(C,' to be returned from the "').concat(w,'"')+" function but got ".concat(A,".")},TypeError),_("ERR_MISSING_ARGS",function(){for(var C=arguments.length,w=new Array(C),k=0;k<C;k++)w[k]=arguments[k];m===void 0&&(m=P3()),m(w.length>0,"At least one arg needs to be specified");var A="The ",b=w.length;switch(w=w.map(function(E){return'"'.concat(E,'"')}),b){case 1:A+="".concat(w[0]," argument");break;case 2:A+="".concat(w[0]," and ").concat(w[1]," arguments");break;default:A+=w.slice(0,b-1).join(", "),A+=", and ".concat(w[b-1]," arguments");break}return"".concat(A," must be specified")},TypeError),r.exports.codes=g}}),i$=de({"node_modules/assert/build/internal/assert/assertion_error.js"(e,r){"use strict";function t(B,O){var G=Object.keys(B);if(Object.getOwnPropertySymbols){var W=Object.getOwnPropertySymbols(B);O&&(W=W.filter(function(X){return Object.getOwnPropertyDescriptor(B,X).enumerable})),G.push.apply(G,W)}return G}function i(B){for(var O=1;O<arguments.length;O++){var G=arguments[O]!=null?arguments[O]:{};O%2?t(Object(G),!0).forEach(function(W){a(B,W,G[W])}):Object.getOwnPropertyDescriptors?Object.defineProperties(B,Object.getOwnPropertyDescriptors(G)):t(Object(G)).forEach(function(W){Object.defineProperty(B,W,Object.getOwnPropertyDescriptor(G,W))})}return B}function a(B,O,G){return O=n(O),O in B?Object.defineProperty(B,O,{value:G,enumerable:!0,configurable:!0,writable:!0}):B[O]=G,B}function o(B,O){if(!(B instanceof O))throw new TypeError("Cannot call a class as a function")}function s(B,O){for(var G=0;G<O.length;G++){var W=O[G];W.enumerable=W.enumerable||!1,W.configurable=!0,"value"in W&&(W.writable=!0),Object.defineProperty(B,n(W.key),W)}}function l(B,O,G){return O&&s(B.prototype,O),G&&s(B,G),Object.defineProperty(B,"prototype",{writable:!1}),B}function n(B){var O=u(B,"string");return x(O)==="symbol"?O:String(O)}function u(B,O){if(x(B)!=="object"||B===null)return B;var G=B[Symbol.toPrimitive];if(G!==void 0){var W=G.call(B,O||"default");if(x(W)!=="object")return W;throw new TypeError("@@toPrimitive must return a primitive value.")}return(O==="string"?String:Number)(B)}function c(B,O){if(typeof O!="function"&&O!==null)throw new TypeError("Super expression must either be null or a function");B.prototype=Object.create(O&&O.prototype,{constructor:{value:B,writable:!0,configurable:!0}}),Object.defineProperty(B,"prototype",{writable:!1}),O&&_(B,O)}function f(B){var O=m();return function(){var W=v(B),X;if(O){var Z=v(this).constructor;X=Reflect.construct(W,arguments,Z)}else X=W.apply(this,arguments);return h(this,X)}}function h(B,O){if(O&&(x(O)==="object"||typeof O=="function"))return O;if(O!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return d(B)}function d(B){if(B===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return B}function p(B){var O=typeof Map=="function"?new Map:void 0;return p=function(W){if(W===null||!y(W))return W;if(typeof W!="function")throw new TypeError("Super expression must either be null or a function");if(typeof O<"u"){if(O.has(W))return O.get(W);O.set(W,X)}function X(){return g(W,arguments,v(this).constructor)}return X.prototype=Object.create(W.prototype,{constructor:{value:X,enumerable:!1,writable:!0,configurable:!0}}),_(X,W)},p(B)}function g(B,O,G){return m()?g=Reflect.construct.bind():g=function(X,Z,J){var N=[null];N.push.apply(N,Z);var H=Function.bind.apply(X,N),$=new H;return J&&_($,J.prototype),$},g.apply(null,arguments)}function m(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function y(B){return Function.toString.call(B).indexOf("[native code]")!==-1}function _(B,O){return _=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(W,X){return W.__proto__=X,W},_(B,O)}function v(B){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(G){return G.__proto__||Object.getPrototypeOf(G)},v(B)}function x(B){"@babel/helpers - typeof";return x=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(O){return typeof O}:function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O},x(B)}var S=S1(),M=S.inspect,C=EC(),w=C.codes.ERR_INVALID_ARG_TYPE;function k(B,O,G){return(G===void 0||G>B.length)&&(G=B.length),B.substring(G-O.length,G)===O}function A(B,O){if(O=Math.floor(O),B.length==0||O==0)return"";var G=B.length*O;for(O=Math.floor(Math.log(O)/Math.log(2));O;)B+=B,O--;return B+=B.substring(0,G-B.length),B}var b="",E="",T="",F="",D={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"},R=10;function P(B){var O=Object.keys(B),G=Object.create(Object.getPrototypeOf(B));return O.forEach(function(W){G[W]=B[W]}),Object.defineProperty(G,"message",{value:B.message}),G}function z(B){return M(B,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}function I(B,O,G){var W="",X="",Z=0,J="",N=!1,H=z(B),$=H.split(`
+`),U=z(O).split(`
+`),V=0,j="";if(G==="strictEqual"&&x(B)==="object"&&x(O)==="object"&&B!==null&&O!==null&&(G="strictEqualObject"),$.length===1&&U.length===1&&$[0]!==U[0]){var q=$[0].length+U[0].length;if(q<=R){if((x(B)!=="object"||B===null)&&(x(O)!=="object"||O===null)&&(B!==0||O!==0))return"".concat(D[G],`
+
+`)+"".concat($[0]," !== ").concat(U[0],`
+`)}else if(G!=="strictEqualObject"){var Y=process.stderr&&process.stderr.isTTY?process.stderr.columns:80;if(q<Y){for(;$[0][V]===U[0][V];)V++;V>2&&(j=`
+  `.concat(A(" ",V),"^"),V=0)}}}for(var K=$[$.length-1],te=U[U.length-1];K===te&&(V++<2?J=`
+  `.concat(K).concat(J):W=K,$.pop(),U.pop(),!($.length===0||U.length===0));)K=$[$.length-1],te=U[U.length-1];var ne=Math.max($.length,U.length);if(ne===0){var se=H.split(`
+`);if(se.length>30)for(se[26]="".concat(b,"...").concat(F);se.length>27;)se.pop();return"".concat(D.notIdentical,`
+
+`).concat(se.join(`
+`),`
+`)}V>3&&(J=`
+`.concat(b,"...").concat(F).concat(J),N=!0),W!==""&&(J=`
+  `.concat(W).concat(J),W="");var le=0,ce=D[G]+`
+`.concat(E,"+ actual").concat(F," ").concat(T,"- expected").concat(F),pe=" ".concat(b,"...").concat(F," Lines skipped");for(V=0;V<ne;V++){var xe=V-Z;if($.length<V+1)xe>1&&V>2&&(xe>4?(X+=`
+`.concat(b,"...").concat(F),N=!0):xe>3&&(X+=`
+  `.concat(U[V-2]),le++),X+=`
+  `.concat(U[V-1]),le++),Z=V,W+=`
+`.concat(T,"-").concat(F," ").concat(U[V]),le++;else if(U.length<V+1)xe>1&&V>2&&(xe>4?(X+=`
+`.concat(b,"...").concat(F),N=!0):xe>3&&(X+=`
+  `.concat($[V-2]),le++),X+=`
+  `.concat($[V-1]),le++),Z=V,X+=`
+`.concat(E,"+").concat(F," ").concat($[V]),le++;else{var ye=U[V],fe=$[V],ae=fe!==ye&&(!k(fe,",")||fe.slice(0,-1)!==ye);ae&&k(ye,",")&&ye.slice(0,-1)===fe&&(ae=!1,fe+=","),ae?(xe>1&&V>2&&(xe>4?(X+=`
+`.concat(b,"...").concat(F),N=!0):xe>3&&(X+=`
+  `.concat($[V-2]),le++),X+=`
+  `.concat($[V-1]),le++),Z=V,X+=`
+`.concat(E,"+").concat(F," ").concat(fe),W+=`
+`.concat(T,"-").concat(F," ").concat(ye),le+=2):(X+=W,W="",(xe===1||V===0)&&(X+=`
+  `.concat(fe),le++))}if(le>20&&V<ne-2)return"".concat(ce).concat(pe,`
+`).concat(X,`
+`).concat(b,"...").concat(F).concat(W,`
+`)+"".concat(b,"...").concat(F)}return"".concat(ce).concat(N?pe:"",`
+`).concat(X).concat(W).concat(J).concat(j)}var L=(function(B,O){c(W,B);var G=f(W);function W(X){var Z;if(o(this,W),x(X)!=="object"||X===null)throw new w("options","Object",X);var J=X.message,N=X.operator,H=X.stackStartFn,$=X.actual,U=X.expected,V=Error.stackTraceLimit;if(Error.stackTraceLimit=0,J!=null)Z=G.call(this,String(J));else if(process.stderr&&process.stderr.isTTY&&(process.stderr&&process.stderr.getColorDepth&&process.stderr.getColorDepth()!==1?(b="\x1B[34m",E="\x1B[32m",F="\x1B[39m",T="\x1B[31m"):(b="",E="",F="",T="")),x($)==="object"&&$!==null&&x(U)==="object"&&U!==null&&"stack"in $&&$ instanceof Error&&"stack"in U&&U instanceof Error&&($=P($),U=P(U)),N==="deepStrictEqual"||N==="strictEqual")Z=G.call(this,I($,U,N));else if(N==="notDeepStrictEqual"||N==="notStrictEqual"){var j=D[N],q=z($).split(`
+`);if(N==="notStrictEqual"&&x($)==="object"&&$!==null&&(j=D.notStrictEqualObject),q.length>30)for(q[26]="".concat(b,"...").concat(F);q.length>27;)q.pop();q.length===1?Z=G.call(this,"".concat(j," ").concat(q[0])):Z=G.call(this,"".concat(j,`
+
+`).concat(q.join(`
+`),`
+`))}else{var Y=z($),K="",te=D[N];N==="notDeepEqual"||N==="notEqual"?(Y="".concat(D[N],`
+
+`).concat(Y),Y.length>1024&&(Y="".concat(Y.slice(0,1021),"..."))):(K="".concat(z(U)),Y.length>512&&(Y="".concat(Y.slice(0,509),"...")),K.length>512&&(K="".concat(K.slice(0,509),"...")),N==="deepEqual"||N==="equal"?Y="".concat(te,`
+
+`).concat(Y,`
+
+should equal
+
+`):K=" ".concat(N," ").concat(K)),Z=G.call(this,"".concat(Y).concat(K))}return Error.stackTraceLimit=V,Z.generatedMessage=!J,Object.defineProperty(d(Z),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),Z.code="ERR_ASSERTION",Z.actual=$,Z.expected=U,Z.operator=N,Error.captureStackTrace&&Error.captureStackTrace(d(Z),H),Z.stack,Z.name="AssertionError",h(Z)}return l(W,[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:O,value:function(Z,J){return M(this,i(i({},J),{},{customInspect:!1,depth:0}))}}]),W})(p(Error),M.custom);r.exports=L}}),kC=de({"node_modules/object-keys/isArguments.js"(e,r){"use strict";var t=Object.prototype.toString;r.exports=function(a){var o=t.call(a),s=o==="[object Arguments]";return s||(s=o!=="[object Array]"&&a!==null&&typeof a=="object"&&typeof a.length=="number"&&a.length>=0&&t.call(a.callee)==="[object Function]"),s}}}),a$=de({"node_modules/object-keys/implementation.js"(e,r){"use strict";var t;Object.keys||(i=Object.prototype.hasOwnProperty,a=Object.prototype.toString,o=kC(),s=Object.prototype.propertyIsEnumerable,l=!s.call({toString:null},"toString"),n=s.call(function(){},"prototype"),u=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],c=function(p){var g=p.constructor;return g&&g.prototype===p},f={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=(function(){if(typeof window>"u")return!1;for(var p in window)try{if(!f["$"+p]&&i.call(window,p)&&window[p]!==null&&typeof window[p]=="object")try{c(window[p])}catch{return!0}}catch{return!0}return!1})(),d=function(p){if(typeof window>"u"||!h)return c(p);try{return c(p)}catch{return!1}},t=function(g){var m=g!==null&&typeof g=="object",y=a.call(g)==="[object Function]",_=o(g),v=m&&a.call(g)==="[object String]",x=[];if(!m&&!y&&!_)throw new TypeError("Object.keys called on a non-object");var S=n&&y;if(v&&g.length>0&&!i.call(g,0))for(var M=0;M<g.length;++M)x.push(String(M));if(_&&g.length>0)for(var C=0;C<g.length;++C)x.push(String(C));else for(var w in g)!(S&&w==="prototype")&&i.call(g,w)&&x.push(String(w));if(l)for(var k=d(g),A=0;A<u.length;++A)!(k&&u[A]==="constructor")&&i.call(g,u[A])&&x.push(u[A]);return x});var i,a,o,s,l,n,u,c,f,h,d;r.exports=t}}),CC=de({"node_modules/object-keys/index.js"(e,r){"use strict";var t=Array.prototype.slice,i=kC(),a=Object.keys,o=a?function(n){return a(n)}:a$(),s=Object.keys;o.shim=function(){if(Object.keys){var n=(function(){var u=Object.keys(arguments);return u&&u.length===arguments.length})(1,2);n||(Object.keys=function(c){return i(c)?s(t.call(c)):s(c)})}else Object.keys=o;return Object.keys||o},r.exports=o}}),n$=de({"node_modules/object.assign/implementation.js"(e,r){"use strict";var t=CC(),i=A3()(),a=Dv(),o=M3(),s=a("Array.prototype.push"),l=a("Object.prototype.propertyIsEnumerable"),n=i?o.getOwnPropertySymbols:null;r.exports=function(c,f){if(c==null)throw new TypeError("target must be an object");var h=o(c);if(arguments.length===1)return h;for(var d=1;d<arguments.length;++d){var p=o(arguments[d]),g=t(p),m=i&&(o.getOwnPropertySymbols||n);if(m)for(var y=m(p),_=0;_<y.length;++_){var v=y[_];l(p,v)&&s(g,v)}for(var x=0;x<g.length;++x){var S=g[x];if(l(p,S)){var M=p[S];h[S]=M}}}return h}}}),o$=de({"node_modules/object.assign/polyfill.js"(e,r){"use strict";var t=n$(),i=function(){if(!Object.assign)return!1;for(var o="abcdefghijklmnopqrst",s=o.split(""),l={},n=0;n<s.length;++n)l[s[n]]=s[n];var u=Object.assign({},l),c="";for(var f in u)c+=f;return o!==c},a=function(){if(!Object.assign||!Object.preventExtensions)return!1;var o=Object.preventExtensions({1:2});try{Object.assign(o,"xy")}catch{return o[1]==="y"}return!1};r.exports=function(){return!Object.assign||i()||a()?t:Object.assign}}}),DC=de({"node_modules/object-is/implementation.js"(e,r){"use strict";var t=function(i){return i!==i};r.exports=function(a,o){return a===0&&o===0?1/a===1/o:!!(a===o||t(a)&&t(o))}}}),F3=de({"node_modules/object-is/polyfill.js"(e,r){"use strict";var t=DC();r.exports=function(){return typeof Object.is=="function"?Object.is:t}}}),s$=de({"node_modules/call-bind/callBound.js"(e,r){"use strict";var t=D3(),i=Yy(),a=i(t("String.prototype.indexOf"));r.exports=function(s,l){var n=t(s,!!l);return typeof n=="function"&&a(s,".prototype.")>-1?i(n):n}}}),Xy=de({"node_modules/define-properties/index.js"(e,r){"use strict";var t=CC(),i=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",a=Object.prototype.toString,o=Array.prototype.concat,s=vC(),l=function(f){return typeof f=="function"&&a.call(f)==="[object Function]"},n=mC()(),u=function(f,h,d,p){if(h in f){if(p===!0){if(f[h]===d)return}else if(!l(p)||!p())return}n?s(f,h,d,!0):s(f,h,d)},c=function(f,h){var d=arguments.length>2?arguments[2]:{},p=t(h);i&&(p=o.call(p,Object.getOwnPropertySymbols(h)));for(var g=0;g<p.length;g+=1)u(f,p[g],h[p[g]],d[p[g]])};c.supportsDescriptors=!!n,r.exports=c}}),l$=de({"node_modules/object-is/shim.js"(e,r){"use strict";var t=F3(),i=Xy();r.exports=function(){var o=t();return i(Object,{is:o},{is:function(){return Object.is!==o}}),o}}}),u$=de({"node_modules/object-is/index.js"(e,r){"use strict";var t=Xy(),i=Yy(),a=DC(),o=F3(),s=l$(),l=i(o(),Object);t(l,{getPolyfill:o,implementation:a,shim:s}),r.exports=l}}),LC=de({"node_modules/is-nan/implementation.js"(e,r){"use strict";r.exports=function(i){return i!==i}}}),FC=de({"node_modules/is-nan/polyfill.js"(e,r){"use strict";var t=LC();r.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:t}}}),c$=de({"node_modules/is-nan/shim.js"(e,r){"use strict";var t=Xy(),i=FC();r.exports=function(){var o=i();return t(Number,{isNaN:o},{isNaN:function(){return Number.isNaN!==o}}),o}}}),f$=de({"node_modules/is-nan/index.js"(e,r){"use strict";var t=Yy(),i=Xy(),a=LC(),o=FC(),s=c$(),l=t(o(),Number);i(l,{getPolyfill:o,implementation:a,shim:s}),r.exports=l}}),h$=de({"node_modules/assert/build/internal/util/comparisons.js"(e,r){"use strict";function t(ee,ie){return l(ee)||s(ee,ie)||a(ee,ie)||i()}function i(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function a(ee,ie){if(ee){if(typeof ee=="string")return o(ee,ie);var Q=Object.prototype.toString.call(ee).slice(8,-1);if(Q==="Object"&&ee.constructor&&(Q=ee.constructor.name),Q==="Map"||Q==="Set")return Array.from(ee);if(Q==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Q))return o(ee,ie)}}function o(ee,ie){(ie==null||ie>ee.length)&&(ie=ee.length);for(var Q=0,ue=new Array(ie);Q<ie;Q++)ue[Q]=ee[Q];return ue}function s(ee,ie){var Q=ee==null?null:typeof Symbol<"u"&&ee[Symbol.iterator]||ee["@@iterator"];if(Q!=null){var ue,ge,Me,Te,je=[],Ve=!0,Ze=!1;try{if(Me=(Q=Q.call(ee)).next,ie===0){if(Object(Q)!==Q)return;Ve=!1}else for(;!(Ve=(ue=Me.call(Q)).done)&&(je.push(ue.value),je.length!==ie);Ve=!0);}catch(Ke){Ze=!0,ge=Ke}finally{try{if(!Ve&&Q.return!=null&&(Te=Q.return(),Object(Te)!==Te))return}finally{if(Ze)throw ge}}return je}}function l(ee){if(Array.isArray(ee))return ee}function n(ee){"@babel/helpers - typeof";return n=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ie){return typeof ie}:function(ie){return ie&&typeof Symbol=="function"&&ie.constructor===Symbol&&ie!==Symbol.prototype?"symbol":typeof ie},n(ee)}var u=/a/g.flags!==void 0,c=function(ie){var Q=[];return ie.forEach(function(ue){return Q.push(ue)}),Q},f=function(ie){var Q=[];return ie.forEach(function(ue,ge){return Q.push([ge,ue])}),Q},h=Object.is?Object.is:u$(),d=Object.getOwnPropertySymbols?Object.getOwnPropertySymbols:function(){return[]},p=Number.isNaN?Number.isNaN:f$();function g(ee){return ee.call.bind(ee)}var m=g(Object.prototype.hasOwnProperty),y=g(Object.prototype.propertyIsEnumerable),_=g(Object.prototype.toString),v=S1().types,x=v.isAnyArrayBuffer,S=v.isArrayBufferView,M=v.isDate,C=v.isMap,w=v.isRegExp,k=v.isSet,A=v.isNativeError,b=v.isBoxedPrimitive,E=v.isNumberObject,T=v.isStringObject,F=v.isBooleanObject,D=v.isBigIntObject,R=v.isSymbolObject,P=v.isFloat32Array,z=v.isFloat64Array;function I(ee){if(ee.length===0||ee.length>10)return!0;for(var ie=0;ie<ee.length;ie++){var Q=ee.charCodeAt(ie);if(Q<48||Q>57)return!0}return ee.length===10&&ee>=Math.pow(2,32)}function L(ee){return Object.keys(ee).filter(I).concat(d(ee).filter(Object.prototype.propertyIsEnumerable.bind(ee)))}function B(ee,ie){if(ee===ie)return 0;for(var Q=ee.length,ue=ie.length,ge=0,Me=Math.min(Q,ue);ge<Me;++ge)if(ee[ge]!==ie[ge]){Q=ee[ge],ue=ie[ge];break}return Q<ue?-1:ue<Q?1:0}var O=void 0,G=!0,W=!1,X=0,Z=1,J=2,N=3;function H(ee,ie){return u?ee.source===ie.source&&ee.flags===ie.flags:RegExp.prototype.toString.call(ee)===RegExp.prototype.toString.call(ie)}function $(ee,ie){if(ee.byteLength!==ie.byteLength)return!1;for(var Q=0;Q<ee.byteLength;Q++)if(ee[Q]!==ie[Q])return!1;return!0}function U(ee,ie){return ee.byteLength!==ie.byteLength?!1:B(new Uint8Array(ee.buffer,ee.byteOffset,ee.byteLength),new Uint8Array(ie.buffer,ie.byteOffset,ie.byteLength))===0}function V(ee,ie){return ee.byteLength===ie.byteLength&&B(new Uint8Array(ee),new Uint8Array(ie))===0}function j(ee,ie){return E(ee)?E(ie)&&h(Number.prototype.valueOf.call(ee),Number.prototype.valueOf.call(ie)):T(ee)?T(ie)&&String.prototype.valueOf.call(ee)===String.prototype.valueOf.call(ie):F(ee)?F(ie)&&Boolean.prototype.valueOf.call(ee)===Boolean.prototype.valueOf.call(ie):D(ee)?D(ie)&&BigInt.prototype.valueOf.call(ee)===BigInt.prototype.valueOf.call(ie):R(ie)&&Symbol.prototype.valueOf.call(ee)===Symbol.prototype.valueOf.call(ie)}function q(ee,ie,Q,ue){if(ee===ie)return ee!==0?!0:Q?h(ee,ie):!0;if(Q){if(n(ee)!=="object")return typeof ee=="number"&&p(ee)&&p(ie);if(n(ie)!=="object"||ee===null||ie===null||Object.getPrototypeOf(ee)!==Object.getPrototypeOf(ie))return!1}else{if(ee===null||n(ee)!=="object")return ie===null||n(ie)!=="object"?ee==ie:!1;if(ie===null||n(ie)!=="object")return!1}var ge=_(ee),Me=_(ie);if(ge!==Me)return!1;if(Array.isArray(ee)){if(ee.length!==ie.length)return!1;var Te=L(ee,O),je=L(ie,O);return Te.length!==je.length?!1:K(ee,ie,Q,ue,Z,Te)}if(ge==="[object Object]"&&(!C(ee)&&C(ie)||!k(ee)&&k(ie)))return!1;if(M(ee)){if(!M(ie)||Date.prototype.getTime.call(ee)!==Date.prototype.getTime.call(ie))return!1}else if(w(ee)){if(!w(ie)||!H(ee,ie))return!1}else if(A(ee)||ee instanceof Error){if(ee.message!==ie.message||ee.name!==ie.name)return!1}else if(S(ee)){if(!Q&&(P(ee)||z(ee))){if(!$(ee,ie))return!1}else if(!U(ee,ie))return!1;var Ve=L(ee,O),Ze=L(ie,O);return Ve.length!==Ze.length?!1:K(ee,ie,Q,ue,X,Ve)}else{if(k(ee))return!k(ie)||ee.size!==ie.size?!1:K(ee,ie,Q,ue,J);if(C(ee))return!C(ie)||ee.size!==ie.size?!1:K(ee,ie,Q,ue,N);if(x(ee)){if(!V(ee,ie))return!1}else if(b(ee)&&!j(ee,ie))return!1}return K(ee,ie,Q,ue,X)}function Y(ee,ie){return ie.filter(function(Q){return y(ee,Q)})}function K(ee,ie,Q,ue,ge,Me){if(arguments.length===5){Me=Object.keys(ee);var Te=Object.keys(ie);if(Me.length!==Te.length)return!1}for(var je=0;je<Me.length;je++)if(!m(ie,Me[je]))return!1;if(Q&&arguments.length===5){var Ve=d(ee);if(Ve.length!==0){var Ze=0;for(je=0;je<Ve.length;je++){var Ke=Ve[je];if(y(ee,Ke)){if(!y(ie,Ke))return!1;Me.push(Ke),Ze++}else if(y(ie,Ke))return!1}var vt=d(ie);if(Ve.length!==vt.length&&Y(ie,vt).length!==Ze)return!1}else{var xt=d(ie);if(xt.length!==0&&Y(ie,xt).length!==0)return!1}}if(Me.length===0&&(ge===X||ge===Z&&ee.length===0||ee.size===0))return!0;if(ue===void 0)ue={val1:new Map,val2:new Map,position:0};else{var Pt=ue.val1.get(ee);if(Pt!==void 0){var mt=ue.val2.get(ie);if(mt!==void 0)return Pt===mt}ue.position++}ue.val1.set(ee,ue.position),ue.val2.set(ie,ue.position);var Mt=ye(ee,ie,Q,Me,ue,ge);return ue.val1.delete(ee),ue.val2.delete(ie),Mt}function te(ee,ie,Q,ue){for(var ge=c(ee),Me=0;Me<ge.length;Me++){var Te=ge[Me];if(q(ie,Te,Q,ue))return ee.delete(Te),!0}return!1}function ne(ee){switch(n(ee)){case"undefined":return null;case"object":return;case"symbol":return!1;case"string":ee=+ee;case"number":if(p(ee))return!1}return!0}function se(ee,ie,Q){var ue=ne(Q);return ue??(ie.has(ue)&&!ee.has(ue))}function le(ee,ie,Q,ue,ge){var Me=ne(Q);if(Me!=null)return Me;var Te=ie.get(Me);return Te===void 0&&!ie.has(Me)||!q(ue,Te,!1,ge)?!1:!ee.has(Me)&&q(ue,Te,!1,ge)}function ce(ee,ie,Q,ue){for(var ge=null,Me=c(ee),Te=0;Te<Me.length;Te++){var je=Me[Te];if(n(je)==="object"&&je!==null)ge===null&&(ge=new Set),ge.add(je);else if(!ie.has(je)){if(Q||!se(ee,ie,je))return!1;ge===null&&(ge=new Set),ge.add(je)}}if(ge!==null){for(var Ve=c(ie),Ze=0;Ze<Ve.length;Ze++){var Ke=Ve[Ze];if(n(Ke)==="object"&&Ke!==null){if(!te(ge,Ke,Q,ue))return!1}else if(!Q&&!ee.has(Ke)&&!te(ge,Ke,Q,ue))return!1}return ge.size===0}return!0}function pe(ee,ie,Q,ue,ge,Me){for(var Te=c(ee),je=0;je<Te.length;je++){var Ve=Te[je];if(q(Q,Ve,ge,Me)&&q(ue,ie.get(Ve),ge,Me))return ee.delete(Ve),!0}return!1}function xe(ee,ie,Q,ue){for(var ge=null,Me=f(ee),Te=0;Te<Me.length;Te++){var je=t(Me[Te],2),Ve=je[0],Ze=je[1];if(n(Ve)==="object"&&Ve!==null)ge===null&&(ge=new Set),ge.add(Ve);else{var Ke=ie.get(Ve);if(Ke===void 0&&!ie.has(Ve)||!q(Ze,Ke,Q,ue)){if(Q||!le(ee,ie,Ve,Ze,ue))return!1;ge===null&&(ge=new Set),ge.add(Ve)}}}if(ge!==null){for(var vt=f(ie),xt=0;xt<vt.length;xt++){var Pt=t(vt[xt],2),mt=Pt[0],Mt=Pt[1];if(n(mt)==="object"&&mt!==null){if(!pe(ge,ee,mt,Mt,Q,ue))return!1}else if(!Q&&(!ee.has(mt)||!q(ee.get(mt),Mt,!1,ue))&&!pe(ge,ee,mt,Mt,!1,ue))return!1}return ge.size===0}return!0}function ye(ee,ie,Q,ue,ge,Me){var Te=0;if(Me===J){if(!ce(ee,ie,Q,ge))return!1}else if(Me===N){if(!xe(ee,ie,Q,ge))return!1}else if(Me===Z)for(;Te<ee.length;Te++)if(m(ee,Te)){if(!m(ie,Te)||!q(ee[Te],ie[Te],Q,ge))return!1}else{if(m(ie,Te))return!1;for(var je=Object.keys(ee);Te<je.length;Te++){var Ve=je[Te];if(!m(ie,Ve)||!q(ee[Ve],ie[Ve],Q,ge))return!1}return je.length===Object.keys(ie).length}for(Te=0;Te<ue.length;Te++){var Ze=ue[Te];if(!q(ee[Ze],ie[Ze],Q,ge))return!1}return!0}function fe(ee,ie){return q(ee,ie,W)}function ae(ee,ie){return q(ee,ie,G)}r.exports={isDeepEqual:fe,isDeepStrictEqual:ae}}}),P3=de({"node_modules/assert/build/assert.js"(e,r){"use strict";function t(H){"@babel/helpers - typeof";return t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function($){return typeof $}:function($){return $&&typeof Symbol=="function"&&$.constructor===Symbol&&$!==Symbol.prototype?"symbol":typeof $},t(H)}function i(H,$){for(var U=0;U<$.length;U++){var V=$[U];V.enumerable=V.enumerable||!1,V.configurable=!0,"value"in V&&(V.writable=!0),Object.defineProperty(H,o(V.key),V)}}function a(H,$,U){return $&&i(H.prototype,$),U&&i(H,U),Object.defineProperty(H,"prototype",{writable:!1}),H}function o(H){var $=s(H,"string");return t($)==="symbol"?$:String($)}function s(H,$){if(t(H)!=="object"||H===null)return H;var U=H[Symbol.toPrimitive];if(U!==void 0){var V=U.call(H,$||"default");if(t(V)!=="object")return V;throw new TypeError("@@toPrimitive must return a primitive value.")}return($==="string"?String:Number)(H)}function l(H,$){if(!(H instanceof $))throw new TypeError("Cannot call a class as a function")}var n=EC(),u=n.codes,c=u.ERR_AMBIGUOUS_ARGUMENT,f=u.ERR_INVALID_ARG_TYPE,h=u.ERR_INVALID_ARG_VALUE,d=u.ERR_INVALID_RETURN_VALUE,p=u.ERR_MISSING_ARGS,g=i$(),m=S1(),y=m.inspect,_=S1().types,v=_.isPromise,x=_.isRegExp,S=o$()(),M=F3()(),C=s$()("RegExp.prototype.test"),w,k;function A(){var H=h$();w=H.isDeepEqual,k=H.isDeepStrictEqual}var b=!1,E=r.exports=P,T={};function F(H){throw H.message instanceof Error?H.message:new g(H)}function D(H,$,U,V,j){var q=arguments.length,Y;if(q===0)Y="Failed";else if(q===1)U=H,H=void 0;else{if(b===!1){b=!0;var K=process.emitWarning?process.emitWarning:console.warn.bind(console);K("assert.fail() with more than one argument is deprecated. Please use assert.strictEqual() instead or only pass a message.","DeprecationWarning","DEP0094")}q===2&&(V="!=")}if(U instanceof Error)throw U;var te={actual:H,expected:$,operator:V===void 0?"fail":V,stackStartFn:j||D};U!==void 0&&(te.message=U);var ne=new g(te);throw Y&&(ne.message=Y,ne.generatedMessage=!0),ne}E.fail=D,E.AssertionError=g;function R(H,$,U,V){if(!U){var j=!1;if($===0)j=!0,V="No value argument passed to `assert.ok()`";else if(V instanceof Error)throw V;var q=new g({actual:U,expected:!0,message:V,operator:"==",stackStartFn:H});throw q.generatedMessage=j,q}}function P(){for(var H=arguments.length,$=new Array(H),U=0;U<H;U++)$[U]=arguments[U];R.apply(void 0,[P,$.length].concat($))}E.ok=P,E.equal=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");$!=U&&F({actual:$,expected:U,message:V,operator:"==",stackStartFn:H})},E.notEqual=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");$==U&&F({actual:$,expected:U,message:V,operator:"!=",stackStartFn:H})},E.deepEqual=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");w===void 0&&A(),w($,U)||F({actual:$,expected:U,message:V,operator:"deepEqual",stackStartFn:H})},E.notDeepEqual=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");w===void 0&&A(),w($,U)&&F({actual:$,expected:U,message:V,operator:"notDeepEqual",stackStartFn:H})},E.deepStrictEqual=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");w===void 0&&A(),k($,U)||F({actual:$,expected:U,message:V,operator:"deepStrictEqual",stackStartFn:H})},E.notDeepStrictEqual=z;function z(H,$,U){if(arguments.length<2)throw new p("actual","expected");w===void 0&&A(),k(H,$)&&F({actual:H,expected:$,message:U,operator:"notDeepStrictEqual",stackStartFn:z})}E.strictEqual=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");M($,U)||F({actual:$,expected:U,message:V,operator:"strictEqual",stackStartFn:H})},E.notStrictEqual=function H($,U,V){if(arguments.length<2)throw new p("actual","expected");M($,U)&&F({actual:$,expected:U,message:V,operator:"notStrictEqual",stackStartFn:H})};var I=a(function H($,U,V){var j=this;l(this,H),U.forEach(function(q){q in $&&(V!==void 0&&typeof V[q]=="string"&&x($[q])&&C($[q],V[q])?j[q]=V[q]:j[q]=$[q])})});function L(H,$,U,V,j,q){if(!(U in H)||!k(H[U],$[U])){if(!V){var Y=new I(H,j),K=new I($,j,H),te=new g({actual:Y,expected:K,operator:"deepStrictEqual",stackStartFn:q});throw te.actual=H,te.expected=$,te.operator=q.name,te}F({actual:H,expected:$,message:V,operator:q.name,stackStartFn:q})}}function B(H,$,U,V){if(typeof $!="function"){if(x($))return C($,H);if(arguments.length===2)throw new f("expected",["Function","RegExp"],$);if(t(H)!=="object"||H===null){var j=new g({actual:H,expected:$,message:U,operator:"deepStrictEqual",stackStartFn:V});throw j.operator=V.name,j}var q=Object.keys($);if($ instanceof Error)q.push("name","message");else if(q.length===0)throw new h("error",$,"may not be an empty object");return w===void 0&&A(),q.forEach(function(Y){typeof H[Y]=="string"&&x($[Y])&&C($[Y],H[Y])||L(H,$,Y,U,q,V)}),!0}return $.prototype!==void 0&&H instanceof $?!0:Error.isPrototypeOf($)?!1:$.call({},H)===!0}function O(H){if(typeof H!="function")throw new f("fn","Function",H);try{H()}catch($){return $}return T}function G(H){return v(H)||H!==null&&t(H)==="object"&&typeof H.then=="function"&&typeof H.catch=="function"}function W(H){return Promise.resolve().then(function(){var $;if(typeof H=="function"){if($=H(),!G($))throw new d("instance of Promise","promiseFn",$)}else if(G(H))$=H;else throw new f("promiseFn",["Function","Promise"],H);return Promise.resolve().then(function(){return $}).then(function(){return T}).catch(function(U){return U})})}function X(H,$,U,V){if(typeof U=="string"){if(arguments.length===4)throw new f("error",["Object","Error","Function","RegExp"],U);if(t($)==="object"&&$!==null){if($.message===U)throw new c("error/message",'The error message "'.concat($.message,'" is identical to the message.'))}else if($===U)throw new c("error/message",'The error "'.concat($,'" is identical to the message.'));V=U,U=void 0}else if(U!=null&&t(U)!=="object"&&typeof U!="function")throw new f("error",["Object","Error","Function","RegExp"],U);if($===T){var j="";U&&U.name&&(j+=" (".concat(U.name,")")),j+=V?": ".concat(V):".";var q=H.name==="rejects"?"rejection":"exception";F({actual:void 0,expected:U,operator:H.name,message:"Missing expected ".concat(q).concat(j),stackStartFn:H})}if(U&&!B($,U,V,H))throw $}function Z(H,$,U,V){if($!==T){if(typeof U=="string"&&(V=U,U=void 0),!U||B($,U)){var j=V?": ".concat(V):".",q=H.name==="doesNotReject"?"rejection":"exception";F({actual:$,expected:U,operator:H.name,message:"Got unwanted ".concat(q).concat(j,`
+`)+'Actual message: "'.concat($&&$.message,'"'),stackStartFn:H})}throw $}}E.throws=function H($){for(var U=arguments.length,V=new Array(U>1?U-1:0),j=1;j<U;j++)V[j-1]=arguments[j];X.apply(void 0,[H,O($)].concat(V))},E.rejects=function H($){for(var U=arguments.length,V=new Array(U>1?U-1:0),j=1;j<U;j++)V[j-1]=arguments[j];return W($).then(function(q){return X.apply(void 0,[H,q].concat(V))})},E.doesNotThrow=function H($){for(var U=arguments.length,V=new Array(U>1?U-1:0),j=1;j<U;j++)V[j-1]=arguments[j];Z.apply(void 0,[H,O($)].concat(V))},E.doesNotReject=function H($){for(var U=arguments.length,V=new Array(U>1?U-1:0),j=1;j<U;j++)V[j-1]=arguments[j];return W($).then(function(q){return Z.apply(void 0,[H,q].concat(V))})},E.ifError=function H($){if($!=null){var U="ifError got unwanted exception: ";t($)==="object"&&typeof $.message=="string"?$.message.length===0&&$.constructor?U+=$.constructor.name:U+=$.message:U+=y($);var V=new g({actual:$,expected:null,operator:"ifError",message:U,stackStartFn:H}),j=$.stack;if(typeof j=="string"){var q=j.split(`
+`);q.shift();for(var Y=V.stack.split(`
+`),K=0;K<q.length;K++){var te=Y.indexOf(q[K]);if(te!==-1){Y=Y.slice(0,te);break}}V.stack="".concat(Y.join(`
+`),`
+`).concat(q.join(`
+`))}throw V}};function J(H,$,U,V,j){if(!x($))throw new f("regexp","RegExp",$);var q=j==="match";if(typeof H!="string"||C($,H)!==q){if(U instanceof Error)throw U;var Y=!U;U=U||(typeof H!="string"?'The "string" argument must be of type string. Received type '+"".concat(t(H)," (").concat(y(H),")"):(q?"The input did not match the regular expression ":"The input was expected to not match the regular expression ")+"".concat(y($),`. Input:
+
+`).concat(y(H),`
+`));var K=new g({actual:H,expected:$,message:U,operator:j,stackStartFn:V});throw K.generatedMessage=Y,K}}E.match=function H($,U,V){J($,U,V,H,"match")},E.doesNotMatch=function H($,U,V){J($,U,V,H,"doesNotMatch")};function N(){for(var H=arguments.length,$=new Array(H),U=0;U<H;U++)$[U]=arguments[U];R.apply(void 0,[N,$.length].concat($))}E.strict=S(N,E,{equal:E.strictEqual,deepEqual:E.deepStrictEqual,notEqual:E.notStrictEqual,notDeepEqual:E.notDeepStrictEqual}),E.strict.strict=E.strict}}),d$=de({"node_modules/ms/index.js"(e,r){var t=1e3,i=t*60,a=i*60,o=a*24,s=o*365.25;r.exports=function(f,h){h=h||{};var d=typeof f;if(d==="string"&&f.length>0)return l(f);if(d==="number"&&isNaN(f)===!1)return h.long?u(f):n(f);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(f))};function l(f){if(f=String(f),!(f.length>100)){var h=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(f);if(h){var d=parseFloat(h[1]),p=(h[2]||"ms").toLowerCase();switch(p){case"years":case"year":case"yrs":case"yr":case"y":return d*s;case"days":case"day":case"d":return d*o;case"hours":case"hour":case"hrs":case"hr":case"h":return d*a;case"minutes":case"minute":case"mins":case"min":case"m":return d*i;case"seconds":case"second":case"secs":case"sec":case"s":return d*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return d;default:return}}}}function n(f){return f>=o?Math.round(f/o)+"d":f>=a?Math.round(f/a)+"h":f>=i?Math.round(f/i)+"m":f>=t?Math.round(f/t)+"s":f+"ms"}function u(f){return c(f,o,"day")||c(f,a,"hour")||c(f,i,"minute")||c(f,t,"second")||f+" ms"}function c(f,h,d){if(!(f<h))return f<h*1.5?Math.floor(f/h)+" "+d:Math.ceil(f/h)+" "+d+"s"}}}),p$=de({"node_modules/debug/src/debug.js"(e,r){e=r.exports=a.debug=a.default=a,e.coerce=n,e.disable=s,e.enable=o,e.enabled=l,e.humanize=d$(),e.names=[],e.skips=[],e.formatters={};var t;function i(u){var c=0,f;for(f in u)c=(c<<5)-c+u.charCodeAt(f),c|=0;return e.colors[Math.abs(c)%e.colors.length]}function a(u){function c(){if(c.enabled){var f=c,h=+new Date,d=h-(t||h);f.diff=d,f.prev=t,f.curr=h,t=h;for(var p=new Array(arguments.length),g=0;g<p.length;g++)p[g]=arguments[g];p[0]=e.coerce(p[0]),typeof p[0]!="string"&&p.unshift("%O");var m=0;p[0]=p[0].replace(/%([a-zA-Z%])/g,function(_,v){if(_==="%%")return _;m++;var x=e.formatters[v];if(typeof x=="function"){var S=p[m];_=x.call(f,S),p.splice(m,1),m--}return _}),e.formatArgs.call(f,p);var y=c.log||e.log||console.log.bind(console);y.apply(f,p)}}return c.namespace=u,c.enabled=e.enabled(u),c.useColors=e.useColors(),c.color=i(u),typeof e.init=="function"&&e.init(c),c}function o(u){e.save(u),e.names=[],e.skips=[];for(var c=(typeof u=="string"?u:"").split(/[\s,]+/),f=c.length,h=0;h<f;h++)c[h]&&(u=c[h].replace(/\*/g,".*?"),u[0]==="-"?e.skips.push(new RegExp("^"+u.substr(1)+"$")):e.names.push(new RegExp("^"+u+"$")))}function s(){e.enable("")}function l(u){var c,f;for(c=0,f=e.skips.length;c<f;c++)if(e.skips[c].test(u))return!1;for(c=0,f=e.names.length;c<f;c++)if(e.names[c].test(u))return!0;return!1}function n(u){return u instanceof Error?u.stack||u.message:u}}}),v$=de({"node_modules/debug/src/browser.js"(e,r){e=r.exports=p$(),e.log=a,e.formatArgs=i,e.save=o,e.load=s,e.useColors=t,e.storage=typeof chrome<"u"&&typeof chrome.storage<"u"?chrome.storage.local:l(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];function t(){return typeof window<"u"&&window.process&&window.process.type==="renderer"?!0:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}e.formatters.j=function(n){try{return JSON.stringify(n)}catch(u){return"[UnexpectedJSONParseError]: "+u.message}};function i(n){var u=this.useColors;if(n[0]=(u?"%c":"")+this.namespace+(u?" %c":" ")+n[0]+(u?"%c ":" ")+"+"+e.humanize(this.diff),!!u){var c="color: "+this.color;n.splice(1,0,c,"color: inherit");var f=0,h=0;n[0].replace(/%[a-zA-Z%]/g,function(d){d!=="%%"&&(f++,d==="%c"&&(h=f))}),n.splice(h,0,c)}}function a(){return typeof console=="object"&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function o(n){try{n==null?e.storage.removeItem("debug"):e.storage.debug=n}catch{}}function s(){var n;try{n=e.storage.debug}catch{}return!n&&typeof process<"u"&&"env"in process&&(n=process.env.DEBUG),n}e.enable(s());function l(){try{return window.localStorage}catch{}}}}),m$=de({"node_modules/stream-parser/index.js"(e,r){var t=P3(),i=v$()("stream-parser");r.exports=n;var a=-1,o=0,s=1,l=2;function n(v){var x=v&&typeof v._transform=="function",S=v&&typeof v._write=="function";if(!x&&!S)throw new Error("must pass a Writable or Transform stream in");i("extending Parser into stream"),v._bytes=c,v._skipBytes=f,x&&(v._passthrough=h),x?v._transform=p:v._write=d}function u(v){i("initializing parser stream"),v._parserBytesLeft=0,v._parserBuffers=[],v._parserBuffered=0,v._parserState=a,v._parserCallback=null,typeof v.push=="function"&&(v._parserOutput=v.push.bind(v)),v._parserInit=!0}function c(v,x){t(!this._parserCallback,'there is already a "callback" set!'),t(isFinite(v)&&v>0,'can only buffer a finite number of bytes > 0, got "'+v+'"'),this._parserInit||u(this),i("buffering %o bytes",v),this._parserBytesLeft=v,this._parserCallback=x,this._parserState=o}function f(v,x){t(!this._parserCallback,'there is already a "callback" set!'),t(v>0,'can only skip > 0 bytes, got "'+v+'"'),this._parserInit||u(this),i("skipping %o bytes",v),this._parserBytesLeft=v,this._parserCallback=x,this._parserState=s}function h(v,x){t(!this._parserCallback,'There is already a "callback" set!'),t(v>0,'can only pass through > 0 bytes, got "'+v+'"'),this._parserInit||u(this),i("passing through %o bytes",v),this._parserBytesLeft=v,this._parserCallback=x,this._parserState=l}function d(v,x,S){this._parserInit||u(this),i("write(%o bytes)",v.length),typeof x=="function"&&(S=x),y(this,v,null,S)}function p(v,x,S){this._parserInit||u(this),i("transform(%o bytes)",v.length),typeof x!="function"&&(x=this._parserOutput),y(this,v,x,S)}function g(v,x,S,M){return v._parserBytesLeft<=0?M(new Error("got data but not currently parsing anything")):x.length<=v._parserBytesLeft?function(){return m(v,x,S,M)}:function(){var C=x.slice(0,v._parserBytesLeft);return m(v,C,S,function(w){if(w)return M(w);if(x.length>C.length)return function(){return g(v,x.slice(C.length),S,M)}})}}function m(v,x,S,M){if(v._parserBytesLeft-=x.length,i("%o bytes left for stream piece",v._parserBytesLeft),v._parserState===o?(v._parserBuffers.push(x),v._parserBuffered+=x.length):v._parserState===l&&S(x),v._parserBytesLeft===0){var C=v._parserCallback;if(C&&v._parserState===o&&v._parserBuffers.length>1&&(x=Buffer.concat(v._parserBuffers,v._parserBuffered)),v._parserState!==o&&(x=null),v._parserCallback=null,v._parserBuffered=0,v._parserState=a,v._parserBuffers.splice(0),C){var w=[];x&&w.push(x),S&&w.push(S);var k=C.length>w.length;k&&w.push(_(M));var A=C.apply(v,w);if(!k||M===A)return M}}else return M}var y=_(g);function _(v){return function(){for(var x=v.apply(this,arguments);typeof x=="function";)x=x();return x}}}}),as=de({"node_modules/probe-image-size/lib/common.js"(e){"use strict";var r=r$().Transform,t=m$();function i(){r.call(this,{readableObjectMode:!0})}i.prototype=Object.create(r.prototype),i.prototype.constructor=i,t(i.prototype),e.ParserStream=i,e.sliceEq=function(o,s,l){for(var n=s,u=0;u<l.length;)if(o[n++]!==l[u++])return!1;return!0},e.str2arr=function(o,s){var l=[],n=0;if(s&&s==="hex")for(;n<o.length;)l.push(parseInt(o.slice(n,n+2),16)),n+=2;else for(;n<o.length;n++)l.push(o.charCodeAt(n)&255);return l},e.readUInt16LE=function(o,s){return o[s]|o[s+1]<<8},e.readUInt16BE=function(o,s){return o[s]<<8|o[s+1]},e.readInt16LE=function(o,s){return e.readUInt16LE(o,s)<<16>>16},e.readInt16BE=function(o,s){return e.readUInt16BE(o,s)<<16>>16},e.readUInt32LE=function(o,s){return(o[s]|o[s+1]<<8|o[s+2]<<16)+o[s+3]*16777216},e.readUInt32BE=function(o,s){return o[s]*16777216+(o[s+1]<<16|o[s+2]<<8|o[s+3])},e.readInt32LE=function(o,s){return e.readUInt32LE(o,s)|0},e.readInt32BE=function(o,s){return e.readUInt32BE(o,s)|0};function a(o,s,l){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||"",this.name=this.constructor.name,this.message=o,s&&(this.code=s),l&&(this.statusCode=l)}a.prototype=Object.create(Error.prototype),a.prototype.constructor=a,e.ProbeError=a}}),g$=de({"node_modules/probe-image-size/lib/miaf_utils.js"(e,r){"use strict";var t=as().readUInt16BE,i=as().readUInt32BE;function a(h,d){if(h.length<4+d)return null;var p=i(h,d);return h.length<p+d||p<8?null:{boxtype:String.fromCharCode.apply(null,h.slice(d+4,d+8)),data:h.slice(d+8,d+p),end:d+p}}r.exports.unbox=a;function o(h,d){for(var p=0;;){var g=a(h,p);if(!g)break;switch(g.boxtype){case"ispe":d.sizes.push({width:i(g.data,4),height:i(g.data,8)});break;case"irot":d.transforms.push({type:"irot",value:g.data[0]&3});break;case"imir":d.transforms.push({type:"imir",value:g.data[0]&1});break}p=g.end}}function s(h,d,p){for(var g=0,m=0;m<p;m++)g=g*256+(h[d+m]||0);return g}function l(h,d){for(var p=h[4]>>4&15,g=h[4]&15,m=h[5]>>4&15,y=t(h,6),_=8,v=0;v<y;v++){var x=t(h,_);_+=2;var S=t(h,_);_+=2;var M=s(h,_,m);_+=m;var C=t(h,_);if(_+=2,S===0&&C===1){var w=s(h,_,p),k=s(h,_+p,g);d.item_loc[x]={length:k,offset:w+M}}_+=C*(p+g)}}function n(h,d){for(var p=t(h,4),g=6,m=0;m<p;m++){var y=a(h,g);if(!y)break;if(y.boxtype==="infe"){for(var _=t(y.data,4),v="",x=8;x<y.data.length&&y.data[x];x++)v+=String.fromCharCode(y.data[x]);d.item_inf[v]=_}g=y.end}}function u(h,d){for(var p=0;;){var g=a(h,p);if(!g)break;g.boxtype==="ipco"&&o(g.data,d),p=g.end}}function c(h,d){for(var p=4;;){var g=a(h,p);if(!g)break;g.boxtype==="iprp"&&u(g.data,d),g.boxtype==="iloc"&&l(g.data,d),g.boxtype==="iinf"&&n(g.data,d),p=g.end}}function f(h){var d=h.reduce(function(m,y){return m.width>y.width||m.width===y.width&&m.height>y.height?m:y}),p=h.reduce(function(m,y){return m.height>y.height||m.height===y.height&&m.width>y.width?m:y}),g;return d.width>p.height||d.width===p.height&&d.height>p.width?g=d:g=p,g}r.exports.readSizeFromMeta=function(h){var d={sizes:[],transforms:[],item_inf:{},item_loc:{}};if(c(h,d),!!d.sizes.length){var p=f(d.sizes),g=1;d.transforms.forEach(function(y){var _={1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},v={1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if(y.type==="imir"&&(y.value===0?g=v[g]:(g=v[g],g=_[g],g=_[g])),y.type==="irot")for(var x=0;x<y.value;x++)g=_[g]});var m=null;return d.item_inf.Exif&&(m=d.item_loc[d.item_inf.Exif]),{width:p.width,height:p.height,orientation:d.transforms.length?g:null,variants:d.sizes,exif_location:m}}},r.exports.getMimeType=function(h){var d=String.fromCharCode.apply(null,h.slice(0,4)),p={};p[d]=!0;for(var g=8;g<h.length;g+=4)p[String.fromCharCode.apply(null,h.slice(g,g+4))]=!0;if(!(!p.mif1&&!p.msf1&&!p.miaf))return d==="avif"||d==="avis"||d==="avio"?{type:"avif",mime:"image/avif"}:d==="heic"||d==="heix"?{type:"heic",mime:"image/heic"}:d==="hevc"||d==="hevx"?{type:"heic",mime:"image/heic-sequence"}:p.avif||p.avis?{type:"avif",mime:"image/avif"}:p.heic||p.heix||p.hevc||p.hevx||p.heis?p.msf1?{type:"heif",mime:"image/heif-sequence"}:{type:"heif",mime:"image/heif"}:{type:"avif",mime:"image/avif"}}}}),I3=de({"node_modules/probe-image-size/lib/exif_utils.js"(e,r){"use strict";function t(o,s){var l=new Error(o);return l.code=s,l}function i(o){try{return decodeURIComponent(escape(o))}catch{return o}}function a(o,s,l){this.input=o.subarray(s,l),this.start=s;var n=String.fromCharCode.apply(null,this.input.subarray(0,4));if(n!=="II*\0"&&n!=="MM\0*")throw t("invalid TIFF signature","EBADDATA");this.big_endian=n[0]==="M"}a.prototype.each=function(o){this.aborted=!1;var s=this.read_uint32(4);for(this.ifds_to_read=[{id:0,offset:s}];this.ifds_to_read.length>0&&!this.aborted;){var l=this.ifds_to_read.shift();l.offset&&this.scan_ifd(l.id,l.offset,o)}},a.prototype.read_uint16=function(o){var s=this.input;if(o+2>s.length)throw t("unexpected EOF","EBADDATA");return this.big_endian?s[o]*256+s[o+1]:s[o]+s[o+1]*256},a.prototype.read_uint32=function(o){var s=this.input;if(o+4>s.length)throw t("unexpected EOF","EBADDATA");return this.big_endian?s[o]*16777216+s[o+1]*65536+s[o+2]*256+s[o+3]:s[o]+s[o+1]*256+s[o+2]*65536+s[o+3]*16777216},a.prototype.is_subifd_link=function(o,s){return o===0&&s===34665||o===0&&s===34853||o===34665&&s===40965},a.prototype.exif_format_length=function(o){switch(o){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}},a.prototype.exif_format_read=function(o,s){var l;switch(o){case 1:case 2:return l=this.input[s],l;case 6:return l=this.input[s],l|(l&128)*33554430;case 3:return l=this.read_uint16(s),l;case 8:return l=this.read_uint16(s),l|(l&32768)*131070;case 4:return l=this.read_uint32(s),l;case 9:return l=this.read_uint32(s),l|0;case 5:case 10:case 11:case 12:return null;case 7:return null;default:return null}},a.prototype.scan_ifd=function(o,s,l){var n=this.read_uint16(s);s+=2;for(var u=0;u<n;u++){var c=this.read_uint16(s),f=this.read_uint16(s+2),h=this.read_uint32(s+4),d=this.exif_format_length(f),p=h*d,g=p<=4?s+8:this.read_uint32(s+8),m=!1;if(g+p>this.input.length)throw t("unexpected EOF","EBADDATA");for(var y=[],_=g,v=0;v<h;v++,_+=d){var x=this.exif_format_read(f,_);if(x===null){y=null;break}y.push(x)}Array.isArray(y)&&f===2&&(y=i(String.fromCharCode.apply(null,y)),y&&y[y.length-1]==="\0"&&(y=y.slice(0,-1))),this.is_subifd_link(o,c)&&Array.isArray(y)&&Number.isInteger(y[0])&&y[0]>0&&(this.ifds_to_read.push({id:c,offset:y[0]}),m=!0);var S={is_big_endian:this.big_endian,ifd:o,tag:c,format:f,count:h,entry_offset:s+this.start,data_length:p,data_offset:g+this.start,value:y,is_subifd_link:m};if(l(S)===!1){this.aborted=!0;return}s+=12}o===0&&this.ifds_to_read.push({id:1,offset:this.read_uint32(s)})},r.exports.ExifParser=a,r.exports.get_orientation=function(o){var s=0;try{return new a(o,0,o.length).each(function(l){if(l.ifd===0&&l.tag===274&&Array.isArray(l.value))return s=l.value[0],!1}),s}catch{return-1}}}}),y$=de({"node_modules/probe-image-size/lib/parse_sync/avif.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readUInt32BE,o=g$(),s=I3(),l=t("ftyp");r.exports=function(n){if(i(n,4,l)){var u=o.unbox(n,0);if(u){var c=o.getMimeType(u.data);if(c){for(var f,h=u.end;;){var d=o.unbox(n,h);if(!d)break;if(h=d.end,d.boxtype==="mdat")return;if(d.boxtype==="meta"){f=d.data;break}}if(f){var p=o.readSizeFromMeta(f);if(p){var g={width:p.width,height:p.height,type:c.type,mime:c.mime,wUnits:"px",hUnits:"px"};if(p.variants.length>1&&(g.variants=p.variants),p.orientation&&(g.orientation=p.orientation),p.exif_location&&p.exif_location.offset+p.exif_location.length<=n.length){var m=a(n,p.exif_location.offset),y=n.slice(p.exif_location.offset+m+4,p.exif_location.offset+p.exif_location.length),_=s.get_orientation(y);_>0&&(g.orientation=_)}return g}}}}}}}}),_$=de({"node_modules/probe-image-size/lib/parse_sync/bmp.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readInt16LE,o=as().readInt32LE,s=as().readUInt32LE,l=t("BM");r.exports=function(n){if(!(n.length<26)&&i(n,0,l)){var u,c,f=s(n,14);if(f===12)c=a(n,18),u=a(n,20);else if(f>12)c=o(n,18),u=o(n,22);else return;return{width:c,height:Math.abs(u),type:"bmp",mime:"image/bmp",wUnits:"px",hUnits:"px"}}}}}),x$=de({"node_modules/probe-image-size/lib/parse_sync/gif.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readUInt16LE,o=t("GIF87a"),s=t("GIF89a");r.exports=function(l){if(!(l.length<10)&&!(!i(l,0,o)&&!i(l,0,s)))return{width:a(l,6),height:a(l,8),type:"gif",mime:"image/gif",wUnits:"px",hUnits:"px"}}}}),b$=de({"node_modules/probe-image-size/lib/parse_sync/ico.js"(e,r){"use strict";var t=as().readUInt16LE,i=0,a=1,o=16;r.exports=function(s){var l=t(s,0),n=t(s,2),u=t(s,4);if(!(l!==i||n!==a||!u)&&!(s.length<6+u*o)){for(var c=[],f={width:0,height:0},h=0;h<u;h++){var d=s[6+o*h]||256,p=s[6+o*h+1]||256,g={width:d,height:p};c.push(g),(d>f.width||p>f.height)&&(f=g)}return{width:f.width,height:f.height,variants:c,type:"ico",mime:"image/x-icon",wUnits:"px",hUnits:"px"}}}}}),w$=de({"node_modules/probe-image-size/lib/parse_sync/jpeg.js"(e,r){"use strict";var t=as().readUInt16BE,i=as().str2arr,a=as().sliceEq,o=I3(),s=i("Exif\0\0");r.exports=function(l){if(!(l.length<2)&&!(l[0]!==255||l[1]!==216||l[2]!==255))for(var n=2;;){for(;;){if(l.length-n<2)return;if(l[n++]===255)break}for(var u=l[n++],c;u===255;)u=l[n++];if(u>=208&&u<=217||u===1)c=0;else if(u>=192&&u<=254){if(l.length-n<2)return;c=t(l,n)-2,n+=2}else return;if(u===217||u===218)return;var f;if(u===225&&c>=10&&a(l,n,s)&&(f=o.get_orientation(l.slice(n+6,n+c))),c>=5&&u>=192&&u<=207&&u!==196&&u!==200&&u!==204){if(l.length-n<c)return;var h={width:t(l,n+3),height:t(l,n+1),type:"jpg",mime:"image/jpeg",wUnits:"px",hUnits:"px"};return f>0&&(h.orientation=f),h}n+=c}}}}),T$=de({"node_modules/probe-image-size/lib/parse_sync/png.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readUInt32BE,o=t(`\x89PNG\r
+
+`),s=t("IHDR");r.exports=function(l){if(!(l.length<24)&&i(l,0,o)&&i(l,12,s))return{width:a(l,16),height:a(l,20),type:"png",mime:"image/png",wUnits:"px",hUnits:"px"}}}}),A$=de({"node_modules/probe-image-size/lib/parse_sync/psd.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readUInt32BE,o=t("8BPS\0");r.exports=function(s){if(!(s.length<22)&&i(s,0,o))return{width:a(s,18),height:a(s,14),type:"psd",mime:"image/vnd.adobe.photoshop",wUnits:"px",hUnits:"px"}}}}),M$=de({"node_modules/probe-image-size/lib/parse_sync/svg.js"(e,r){"use strict";function t(d){return d===32||d===9||d===13||d===10}function i(d){return typeof d=="number"&&isFinite(d)&&d>0}function a(d){var p=0,g=d.length;for(d[0]===239&&d[1]===187&&d[2]===191&&(p=3);p<g&&t(d[p]);)p++;return p===g?!1:d[p]===60}var o=/<[-_.:a-zA-Z0-9][^>]*>/,s=/^<([-_.:a-zA-Z0-9]+:)?svg\s/,l=/[^-]\bwidth="([^%]+?)"|[^-]\bwidth='([^%]+?)'/,n=/\bheight="([^%]+?)"|\bheight='([^%]+?)'/,u=/\bview[bB]ox="(.+?)"|\bview[bB]ox='(.+?)'/,c=/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function f(d){var p=d.match(l),g=d.match(n),m=d.match(u);return{width:p&&(p[1]||p[2]),height:g&&(g[1]||g[2]),viewbox:m&&(m[1]||m[2])}}function h(d){return c.test(d)?d.match(c)[0]:"px"}r.exports=function(d){if(a(d)){for(var p="",g=0;g<d.length;g++)p+=String.fromCharCode(d[g]);var m=(p.match(o)||[""])[0];if(s.test(m)){var y=f(m),_=parseFloat(y.width),v=parseFloat(y.height);if(y.width&&y.height)return!i(_)||!i(v)?void 0:{width:_,height:v,type:"svg",mime:"image/svg+xml",wUnits:h(y.width),hUnits:h(y.height)};var x=(y.viewbox||"").split(" "),S={width:x[2],height:x[3]},M=parseFloat(S.width),C=parseFloat(S.height);if(!(!i(M)||!i(C))&&h(S.width)===h(S.height)){var w=M/C;return y.width?i(_)?{width:_,height:_/w,type:"svg",mime:"image/svg+xml",wUnits:h(y.width),hUnits:h(y.width)}:void 0:y.height?i(v)?{width:v*w,height:v,type:"svg",mime:"image/svg+xml",wUnits:h(y.height),hUnits:h(y.height)}:void 0:{width:M,height:C,type:"svg",mime:"image/svg+xml",wUnits:h(S.width),hUnits:h(S.height)}}}}}}}),S$=de({"node_modules/probe-image-size/lib/parse_sync/tiff.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readUInt16LE,o=as().readUInt16BE,s=as().readUInt32LE,l=as().readUInt32BE,n=t("II*\0"),u=t("MM\0*");function c(d,p,g){return g?o(d,p):a(d,p)}function f(d,p,g){return g?l(d,p):s(d,p)}function h(d,p,g){var m=c(d,p+2,g),y=f(d,p+4,g);return y!==1||m!==3&&m!==4?null:m===3?c(d,p+8,g):f(d,p+8,g)}r.exports=function(d){if(!(d.length<8)&&!(!i(d,0,n)&&!i(d,0,u))){var p=d[0]===77,g=f(d,4,p)-8;if(!(g<0)){var m=g+8;if(!(d.length-m<2)){var y=c(d,m+0,p)*12;if(!(y<=0)&&(m+=2,!(d.length-m<y))){var _,v,x,S;for(_=0;_<y;_+=12)S=c(d,m+_,p),S===256?v=h(d,m+_,p):S===257&&(x=h(d,m+_,p));if(v&&x)return{width:v,height:x,type:"tiff",mime:"image/tiff",wUnits:"px",hUnits:"px"}}}}}}}}),E$=de({"node_modules/probe-image-size/lib/parse_sync/webp.js"(e,r){"use strict";var t=as().str2arr,i=as().sliceEq,a=as().readUInt16LE,o=as().readUInt32LE,s=I3(),l=t("RIFF"),n=t("WEBP");function u(h,d){if(!(h[d+3]!==157||h[d+4]!==1||h[d+5]!==42))return{width:a(h,d+6)&16383,height:a(h,d+8)&16383,type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}function c(h,d){if(h[d]===47){var p=o(h,d+1);return{width:(p&16383)+1,height:(p>>14&16383)+1,type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}}function f(h,d){return{width:(h[d+6]<<16|h[d+5]<<8|h[d+4])+1,height:(h[d+9]<<16|h[d+8]<<8|h[d+7])+1,type:"webp",mime:"image/webp",wUnits:"px",hUnits:"px"}}r.exports=function(h){if(!(h.length<16)&&!(!i(h,0,l)||!i(h,8,n))){var d=12,p=null,g=0,m=o(h,4)+8;if(!(m>h.length)){for(;d+8<m;){if(h[d]===0){d++;continue}var y=String.fromCharCode.apply(null,h.slice(d,d+4)),_=o(h,d+4);y==="VP8 "&&_>=10?p=p||u(h,d+8):y==="VP8L"&&_>=5?p=p||c(h,d+8):y==="VP8X"&&_>=10?p=p||f(h,d+8):y==="EXIF"&&(g=s.get_orientation(h.slice(d+8,d+8+_)),d=1/0),d+=8+_}if(p)return g>0&&(p.orientation=g),p}}}}}),k$=de({"node_modules/probe-image-size/lib/parsers_sync.js"(e,r){"use strict";r.exports={avif:y$(),bmp:_$(),gif:x$(),ico:b$(),jpeg:w$(),png:T$(),psd:A$(),svg:M$(),tiff:S$(),webp:E$()}}}),C$=de({"node_modules/probe-image-size/sync.js"(e,r){"use strict";var t=k$();function i(a){for(var o=Object.keys(t),s=0;s<o.length;s++){var l=t[o[s]](a);if(l)return l.width>0&&l.height>0?l:null}return null}r.exports=function(o){return i(o)},r.exports.parsers=t}}),D$=de({"src/traces/image/helpers.js"(e){"use strict";var r=C$(),t=Mp().IMAGE_URL_PREFIX,i=kv().Buffer;e.getImageSize=function(a){var o=a.replace(t,""),s=new i(o,"base64");return r(s)}}}),L$=de({"src/traces/image/calc.js"(e,r){"use strict";var t=Qt(),i=T1(),a=da(),o=nn(),s=Qt().maxRowLength,l=D$().getImageSize;r.exports=function(h,d){var p,g;if(d._hasZ)p=d.z.length,g=s(d.z);else if(d._hasSource){var m=l(d.source);p=m.height,g=m.width}var y=o.getFromId(h,d.xaxis||"x"),_=o.getFromId(h,d.yaxis||"y"),v=y.d2c(d.x0)-d.dx/2,x=_.d2c(d.y0)-d.dy/2,S,M=[v,v+g*d.dx],C=[x,x+p*d.dy];if(y&&y.type==="log")for(S=0;S<g;S++)M.push(v+S*d.dx);if(_&&_.type==="log")for(S=0;S<p;S++)C.push(x+S*d.dy);d._extremes[y._id]=o.findExtremes(y,M),d._extremes[_._id]=o.findExtremes(_,C),d._scaler=c(d);var w={x0:v,y0:x,z:d.z,w:g,h:p};return[w]};function n(f,h,d,p){return function(g){return t.constrain((g-f)*h,d,p)}}function u(f,h){return function(d){return t.constrain(d,f,h)}}function c(f){var h=i.colormodel[f.colormodel],d=h.colormodel||f.colormodel,p=d.length;f._sArray=[];for(var g=0;g<p;g++)h.min[g]!==f.zmin[g]||h.max[g]!==f.zmax[g]?f._sArray.push(n(f.zmin[g],(h.max[g]-h.min[g])/(f.zmax[g]-f.zmin[g]),h.min[g],h.max[g])):f._sArray.push(u(h.min[g],h.max[g]));return function(m){for(var y=m.slice(0,p),_=0;_<p;_++){var v=y[_];if(!a(v))return!1;y[_]=f._sArray[_](v)}return y}}}}),F$=de({"src/traces/image/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=i.strTranslate,o=Oh(),s=T1(),l=Dk(),n=n3().STYLE;r.exports=function(c,f,h,d){var p=f.xaxis,g=f.yaxis,m=!c._context._exportedPlot&&l();i.makeTraceGroups(d,h,"im").each(function(y){var _=t.select(this),v=y[0],x=v.trace,S=(x.zsmooth==="fast"||x.zsmooth===!1&&m)&&!x._hasZ&&x._hasSource&&p.type==="linear"&&g.type==="linear";x._realImage=S;var M=v.z,C=v.x0,w=v.y0,k=v.w,A=v.h,b=x.dx,E=x.dy,T,F,D,R,P,z;for(z=0;T===void 0&&z<k;)T=p.c2p(C+z*b),z++;for(z=k;F===void 0&&z>0;)F=p.c2p(C+z*b),z--;for(z=0;R===void 0&&z<A;)R=g.c2p(w+z*E),z++;for(z=A;P===void 0&&z>0;)P=g.c2p(w+z*E),z--;if(F<T&&(D=F,F=T,T=D),P<R&&(D=R,R=P,P=D),!S){var I=.5;T=Math.max(-I*p._length,T),F=Math.min((1+I)*p._length,F),R=Math.max(-I*g._length,R),P=Math.min((1+I)*g._length,P)}var L=Math.round(F-T),B=Math.round(P-R),O=L<=0||B<=0;if(O){var G=_.selectAll("image").data([]);G.exit().remove();return}function W(q){var Y=document.createElement("canvas");Y.width=L,Y.height=B;var K=Y.getContext("2d",{willReadFrequently:!0}),te=function(ie){return i.constrain(Math.round(p.c2p(C+ie*b)-T),0,L)},ne=function(ie){return i.constrain(Math.round(g.c2p(w+ie*E)-R),0,B)},se=s.colormodel[x.colormodel],le=se.colormodel||x.colormodel,ce=se.fmt,pe;for(z=0;z<v.w;z++){var xe=te(z),ye=te(z+1);if(!(ye===xe||isNaN(ye)||isNaN(xe)))for(var fe=0;fe<v.h;fe++){var ae=ne(fe),ee=ne(fe+1);ee===ae||isNaN(ee)||isNaN(ae)||!q(z,fe)||(pe=x._scaler(q(z,fe)),pe?K.fillStyle=le+"("+ce(pe).join(",")+")":K.fillStyle="rgba(0,0,0,0)",K.fillRect(xe,ae,ye-xe,ee-ae))}}return Y}var X=_.selectAll("image").data([y]);X.enter().append("svg:image").attr({xmlns:o.svg,preserveAspectRatio:"none"}),X.exit().remove();var Z=x.zsmooth===!1?n:"";if(S){var J=i.simpleMap(p.range,p.r2l),N=i.simpleMap(g.range,g.r2l),H=J[1]<J[0],$=N[1]>N[0];if(H||$){var U=T+L/2,V=R+B/2;Z+="transform:"+a(U+"px",V+"px")+"scale("+(H?-1:1)+","+($?-1:1)+")"+a(-U+"px",-V+"px")+";"}}X.attr("style",Z);var j=new Promise(function(q){if(x._hasZ)q();else if(x._hasSource)if(x._canvas&&x._canvas.el.width===k&&x._canvas.el.height===A&&x._canvas.source===x.source)q();else{var Y=document.createElement("canvas");Y.width=k,Y.height=A;var K=Y.getContext("2d",{willReadFrequently:!0});x._image=x._image||new Image;var te=x._image;te.onload=function(){K.drawImage(te,0,0),x._canvas={el:Y,source:x.source},q()},te.setAttribute("src",x.source)}}).then(function(){var q,Y;if(x._hasZ)Y=W(function(ne,se){var le=M[se][ne];return i.isTypedArray(le)&&(le=Array.from(le)),le}),q=Y.toDataURL("image/png");else if(x._hasSource)if(S)q=x.source;else{var K=x._canvas.el.getContext("2d",{willReadFrequently:!0}),te=K.getImageData(0,0,k,A).data;Y=W(function(ne,se){var le=4*(se*k+ne);return[te[le],te[le+1],te[le+2],te[le+3]]}),q=Y.toDataURL("image/png")}X.attr({"xlink:href":q,height:B,width:L,x:T,y:R})});c._promises.push(j)})}}}),P$=de({"src/traces/image/style.js"(e,r){"use strict";var t=Yr();r.exports=function(a){t.select(a).selectAll(".im image").style("opacity",function(o){return o[0].trace.opacity})}}}),I$=de({"src/traces/image/hover.js"(e,r){"use strict";var t=$s(),i=Qt(),a=i.isArrayOrTypedArray,o=T1();r.exports=function(l,n,u){var c=l.cd[0],f=c.trace,h=l.xa,d=l.ya;if(!(t.inbox(n-c.x0,n-(c.x0+c.w*f.dx),0)>0||t.inbox(u-c.y0,u-(c.y0+c.h*f.dy),0)>0)){var p=Math.floor((n-c.x0)/f.dx),g=Math.floor(Math.abs(u-c.y0)/f.dy),m;if(f._hasZ?m=c.z[g][p]:f._hasSource&&(m=f._canvas.el.getContext("2d",{willReadFrequently:!0}).getImageData(p,g,1,1).data),!!m){var y=c.hi||f.hoverinfo,_;if(y){var v=y.split("+");v.indexOf("all")!==-1&&(v=["color"]),v.indexOf("color")!==-1&&(_=!0)}var x=o.colormodel[f.colormodel],S=x.colormodel||f.colormodel,M=S.length,C=f._scaler(m),w=x.suffix,k=[];(f.hovertemplate||_)&&(k.push("["+[C[0]+w[0],C[1]+w[1],C[2]+w[2]].join(", ")),M===4&&k.push(", "+C[3]+w[3]),k.push("]"),k=k.join(""),l.extraText=S.toUpperCase()+": "+k);var A;a(f.hovertext)&&a(f.hovertext[g])?A=f.hovertext[g][p]:a(f.text)&&a(f.text[g])&&(A=f.text[g][p]);var b=d.c2p(c.y0+(g+.5)*f.dy),E=c.x0+(p+.5)*f.dx,T=c.y0+(g+.5)*f.dy,F="["+m.slice(0,f.colormodel.length).join(", ")+"]";return[i.extendFlat(l,{index:[g,p],x0:h.c2p(c.x0+p*f.dx),x1:h.c2p(c.x0+(p+1)*f.dx),y0:b,y1:b,color:C,xVal:E,xLabelVal:E,yVal:T,yLabelVal:T,zLabelVal:F,text:A,hovertemplateLabels:{zLabel:F,colorLabel:k,"color[0]Label":C[0]+w[0],"color[1]Label":C[1]+w[1],"color[2]Label":C[2]+w[2],"color[3]Label":C[3]+w[3]}})]}}}}}),R$=de({"src/traces/image/event_data.js"(e,r){"use strict";r.exports=function(i,a){return"xVal"in a&&(i.x=a.xVal),"yVal"in a&&(i.y=a.yVal),a.xa&&(i.xaxis=a.xa),a.ya&&(i.yaxis=a.ya),i.color=a.color,i.colormodel=a.trace.colormodel,i.z||(i.z=a.color),i}}}),z$=de({"src/traces/image/index.js"(e,r){"use strict";r.exports={attributes:(lC(),ti(_3)).default,supplyDefaults:mH(),calc:L$(),plot:F$(),style:P$(),hoverPoints:I$(),eventData:R$(),moduleType:"trace",name:"image",basePlotModule:ml(),categories:["cartesian","svg","2dMap","noSortingByValue"],animatable:!1,meta:{}}}}),B$=de({"lib/image.js"(e,r){"use strict";r.exports=z$()}}),Pv=de({"src/traces/pie/attributes.js"(e,r){"use strict";var t=ri(),i=Is().attributes,a=us(),o=Jo(),{hovertemplateAttrs:s,texttemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=fn().extendFlat,c=fu().pattern,f=a({editType:"plot",arrayOk:!0,colorEditType:"plot"});r.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:o.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},pattern:c,editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:u({},t.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:s({},{keys:["label","color","value","percent","text"]}),hovertemplatefallback:n(),texttemplate:l({editType:"plot"},{keys:["label","color","value","percent","text"]}),texttemplatefallback:n({editType:"plot"}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"plot"},textfont:u({},f,{}),insidetextorientation:{valType:"enumerated",values:["horizontal","radial","tangential","auto"],dflt:"auto",editType:"plot"},insidetextfont:u({},f,{}),outsidetextfont:u({},f,{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},showlegend:u({},t.showlegend,{arrayOk:!0}),legend:u({},t.legend,{arrayOk:!0}),legendrank:u({},t.legendrank,{arrayOk:!0}),title:{text:{valType:"string",dflt:"",editType:"plot"},font:u({},f,{}),position:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"plot"},editType:"plot"},domain:i({name:"pie",trace:!0,editType:"calc"}),hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"}}}}),Iv=de({"src/traces/pie/defaults.js"(e,r){"use strict";var t=da(),i=Qt(),a=Pv(),o=Is().defaults,s=oh().handleText,l=Qt().coercePattern;function n(f,h){var d=i.isArrayOrTypedArray(f),p=i.isArrayOrTypedArray(h),g=Math.min(d?f.length:1/0,p?h.length:1/0);if(isFinite(g)||(g=0),g&&p){for(var m,y=0;y<g;y++){var _=h[y];if(t(_)&&_>0){m=!0;break}}m||(g=0)}return{hasLabels:d,hasValues:p,len:g}}function u(f,h,d,p,g){var m=p("marker.line.width");m&&p("marker.line.color",g?void 0:d.paper_bgcolor);var y=p("marker.colors");l(p,"marker.pattern",y),f.marker&&!h.marker.pattern.fgcolor&&(h.marker.pattern.fgcolor=f.marker.colors),h.marker.pattern.bgcolor||(h.marker.pattern.bgcolor=d.paper_bgcolor)}function c(f,h,d,p){function g(T,F){return i.coerce(f,h,a,T,F)}var m=g("labels"),y=g("values"),_=n(m,y),v=_.len;if(h._hasLabels=_.hasLabels,h._hasValues=_.hasValues,!h._hasLabels&&h._hasValues&&(g("label0"),g("dlabel")),!v){h.visible=!1;return}h._length=v,u(f,h,p,g,!0),g("scalegroup");var x=g("text"),S=g("texttemplate");g("texttemplatefallback");var M;if(S||(M=g("textinfo",i.isArrayOrTypedArray(x)?"text+percent":"percent")),g("hovertext"),g("hovertemplate"),g("hovertemplatefallback"),S||M&&M!=="none"){var C=g("textposition");s(f,h,p,g,C,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1});var w=Array.isArray(C)||C==="auto",k=w||C==="outside";k&&g("automargin"),(C==="inside"||C==="auto"||Array.isArray(C))&&g("insidetextorientation")}else M==="none"&&g("textposition","none");o(h,p,g);var A=g("hole"),b=g("title.text");if(b){var E=g("title.position",A?"middle center":"top center");!A&&E==="middle center"&&(h.title.position="top center"),i.coerceFont(g,"title.font",p.font)}g("sort"),g("direction"),g("rotation"),g("pull")}r.exports={handleLabelsAndValues:n,handleMarkerDefaults:u,supplyDefaults:c}}}),R3=de({"src/traces/pie/layout_attributes.js"(e,r){"use strict";r.exports={hiddenlabels:{valType:"data_array",editType:"calc"},piecolorway:{valType:"colorlist",editType:"calc"},extendpiecolors:{valType:"boolean",dflt:!0,editType:"calc"}}}}),O$=de({"src/traces/pie/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=R3();r.exports=function(o,s){function l(n,u){return t.coerce(o,s,i,n,u)}l("hiddenlabels"),l("piecolorway",s.colorway),l("extendpiecolors")}}}),E1=de({"src/traces/pie/calc.js"(e,r){"use strict";var t=da(),i=ta(),a={};function o(u,c){var f=[],h=u._fullLayout,d=h.hiddenlabels||[],p=c.labels,g=c.marker.colors||[],m=c.values,y=c._length,_=c._hasValues&&y,v,x;if(c.dlabel)for(p=new Array(y),v=0;v<y;v++)p[v]=String(c.label0+v*c.dlabel);var S={},M=s(h["_"+c.type+"colormap"]),C=0,w=!1;for(v=0;v<y;v++){var k,A,b;if(_){if(k=m[v],!t(k))continue;k=+k}else k=1;A=p[v],(A===void 0||A==="")&&(A=v),A=String(A);var E=S[A];E===void 0?(S[A]=f.length,b=d.indexOf(A)!==-1,b||(C+=k),f.push({v:k,label:A,color:M(g[v],A),i:v,pts:[v],hidden:b})):(w=!0,x=f[E],x.v+=k,x.pts.push(v),x.hidden||(C+=k),x.color===!1&&g[v]&&(x.color=M(g[v],A)))}f=f.filter(function(F){return F.v>=0});var T=c.type==="funnelarea"?w:c.sort;return T&&f.sort(function(F,D){return D.v-F.v}),f[0]&&(f[0].vTotal=C),f}function s(u){return function(f,h){if(!f||!i.isValid(f))return!1;let d=i.rgbaString(f);return u[h]||(u[h]=d),d}}function l(u,c){var f=(c||{}).type;f||(f="pie");var h=u._fullLayout,d=u.calcdata,p=h[f+"colorway"],g=h["_"+f+"colormap"];h["extend"+f+"colors"]&&(p=n(p,a));for(var m=0,y=0;y<d.length;y++){var _=d[y],v=_[0].trace.type;if(v===f)for(var x=0;x<_.length;x++){var S=_[x];S.color===!1&&(g[S.label]?S.color=g[S.label]:(g[S.label]=S.color=p[m%p.length],m++))}}}function n(u,c){var f,h=JSON.stringify(u),d=c[h];if(!d){for(d=u.slice(),f=0;f<u.length;f++)d.push(i.hexString(i.adjustLightness(u[f],20)));for(f=0;f<u.length;f++)d.push(i.hexString(i.adjustLightness(u[f],-20)));c[h]=d}return d}r.exports={calc:o,crossTraceCalc:l,makePullColorFn:s,generateExtendedColors:n}}}),N$=de({"src/traces/pie/event_data.js"(e,r){"use strict";var t=sf().appendArrayMultiPointValues;r.exports=function(a,o){var s={curveNumber:o.index,pointNumbers:a.pts,data:o._input,fullData:o,label:a.label,color:a.color,value:a.v,percent:a.percent,text:a.text,bbox:a.bbox,v:a.v};return a.pts.length===1&&(s.pointNumber=s.i=a.pts[0]),t(s,o,a.pts),o.type==="funnelarea"&&(delete s.v,delete s.i),s}}}),z3=de({"src/traces/pie/plot.js"(e,r){"use strict";var t=Yr(),i=Es(),a=$s(),o=ta(),s=hn(),l=Qt(),n=l.strScale,u=l.strTranslate,c=Zo(),f=dc(),h=f.recordMinTextSize,d=f.clearMinTextSize,p=y0().TEXTPAD,g=p0(),m=N$(),y=Qt().isValidTextValue;function _(H,$){var U=H._context.staticPlot,V=H._fullLayout,j=V._size;d("pie",V),C($,H),G($,j);var q=l.makeTraceGroups(V._pielayer,$,"trace").each(function(Y){var K=t.select(this),te=Y[0],ne=te.trace;X(Y),K.attr("stroke-linejoin","round"),K.each(function(){var se=t.select(this).selectAll("g.slice").data(Y);se.enter().append("g").classed("slice",!0),se.exit().remove();var le=[[[],[]],[[],[]]],ce=!1;se.each(function(Q,ue){if(Q.hidden){t.select(this).selectAll("path,g").remove();return}Q.pointNumber=Q.i,Q.curveNumber=ne.index,le[Q.pxmid[1]<0?0:1][Q.pxmid[0]<0?0:1].push(Q);var ge=te.cx,Me=te.cy,Te=t.select(this),je=Te.selectAll("path.surface").data([Q]);if(je.enter().append("path").classed("surface",!0).style({"pointer-events":U?"none":"all"}),Te.call(x,H,Y),ne.pull){var Ve=+g.castOption(ne.pull,Q.pts)||0;Ve>0&&(ge+=Ve*Q.pxmid[0],Me+=Ve*Q.pxmid[1])}Q.cxFinal=ge,Q.cyFinal=Me;function Ze(lt,qe,Ye,me){var _e=me*(qe[0]-lt[0]),Ae=me*(qe[1]-lt[1]);return"a"+me*te.r+","+me*te.r+" 0 "+Q.largeArc+(Ye?" 1 ":" 0 ")+_e+","+Ae}var Ke=ne.hole;if(Q.v===te.vTotal){var vt="M"+(ge+Q.px0[0])+","+(Me+Q.px0[1])+Ze(Q.px0,Q.pxmid,!0,1)+Ze(Q.pxmid,Q.px0,!0,1)+"Z";Ke?je.attr("d","M"+(ge+Ke*Q.px0[0])+","+(Me+Ke*Q.px0[1])+Ze(Q.px0,Q.pxmid,!1,Ke)+Ze(Q.pxmid,Q.px0,!1,Ke)+"Z"+vt):je.attr("d",vt)}else{var xt=Ze(Q.px0,Q.px1,!0,1);if(Ke){var Pt=1-Ke;je.attr("d","M"+(ge+Ke*Q.px1[0])+","+(Me+Ke*Q.px1[1])+Ze(Q.px1,Q.px0,!1,Ke)+"l"+Pt*Q.px0[0]+","+Pt*Q.px0[1]+xt+"Z")}else je.attr("d","M"+ge+","+Me+"l"+Q.px0[0]+","+Q.px0[1]+xt+"Z")}J(H,Q,te);var mt=g.castOption(ne.textposition,Q.pts),Mt=Te.selectAll("g.slicetext").data(Q.text&&mt!=="none"?[0]:[]);Mt.enter().append("g").classed("slicetext",!0),Mt.exit().remove(),Mt.each(function(){var lt=l.ensureSingle(t.select(this),"text","",function(De){De.attr("data-notex",1)}),qe=l.ensureUniformFontSize(H,mt==="outside"?S(ne,Q,V.font):M(ne,Q,V.font));lt.text(Q.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(s.font,qe).call(c.convertToTspans,H);var Ye=s.bBox(lt.node()),me;if(mt==="outside")me=R(Ye,Q);else if(me=w(Ye,Q,te),mt==="auto"&&me.scale<1){var _e=l.ensureUniformFontSize(H,ne.outsidetextfont);lt.call(s.font,_e),Ye=s.bBox(lt.node()),me=R(Ye,Q)}var Ae=me.textPosAngle,ke=Ae===void 0?Q.pxmid:Z(te.r,Ae);if(me.targetX=ge+ke[0]*me.rCenter+(me.x||0),me.targetY=Me+ke[1]*me.rCenter+(me.y||0),N(me,Ye),me.outside){var Ee=me.targetY;Q.yLabelMin=Ee-Ye.height/2,Q.yLabelMid=Ee,Q.yLabelMax=Ee+Ye.height/2,Q.labelExtraX=0,Q.labelExtraY=0,ce=!0}me.fontSize=qe.size,h(ne.type,me,V),Y[ue].transform=me,l.setTransormAndDisplay(lt,me)})});var pe=t.select(this).selectAll("g.titletext").data(ne.title.text?[0]:[]);if(pe.enter().append("g").classed("titletext",!0),pe.exit().remove(),pe.each(function(){var Q=l.ensureSingle(t.select(this),"text","",function(Me){Me.attr("data-notex",1)}),ue=ne.title.text;ne._meta&&(ue=l.templateString(ue,ne._meta)),Q.text(ue).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(s.font,ne.title.font).call(c.convertToTspans,H);var ge;ne.title.position==="middle center"?ge=P(te):ge=z(te,j),Q.attr("transform",u(ge.x,ge.y)+n(Math.min(1,ge.scale))+u(ge.tx,ge.ty))}),ce&&O(le,ne),v(se,ne),ce&&ne.automargin){var xe=s.bBox(K.node()),ye=ne.domain,fe=j.w*(ye.x[1]-ye.x[0]),ae=j.h*(ye.y[1]-ye.y[0]),ee=(.5*fe-te.r)/j.w,ie=(.5*ae-te.r)/j.h;i.autoMargin(H,"pie."+ne.uid+".automargin",{xl:ye.x[0]-ee,xr:ye.x[1]+ee,yb:ye.y[0]-ie,yt:ye.y[1]+ie,l:Math.max(te.cx-te.r-xe.left,0),r:Math.max(xe.right-(te.cx+te.r),0),b:Math.max(xe.bottom-(te.cy+te.r),0),t:Math.max(te.cy-te.r-xe.top,0),pad:5})}})});setTimeout(function(){q.selectAll("tspan").each(function(){var Y=t.select(this);Y.attr("dy")&&Y.attr("dy",Y.attr("dy"))})},0)}function v(H,$){H.each(function(U){var V=t.select(this);if(!U.labelExtraX&&!U.labelExtraY){V.select("path.textline").remove();return}var j=V.select("g.slicetext text");U.transform.targetX+=U.labelExtraX,U.transform.targetY+=U.labelExtraY,l.setTransormAndDisplay(j,U.transform);var q=U.cxFinal+U.pxmid[0],Y=U.cyFinal+U.pxmid[1],K="M"+q+","+Y,te=(U.yLabelMax-U.yLabelMin)*(U.pxmid[0]<0?-1:1)/4;if(U.labelExtraX){var ne=U.labelExtraX*U.pxmid[1]/U.pxmid[0],se=U.yLabelMid+U.labelExtraY-(U.cyFinal+U.pxmid[1]);Math.abs(ne)>Math.abs(se)?K+="l"+se*U.pxmid[0]/U.pxmid[1]+","+se+"H"+(q+U.labelExtraX+te):K+="l"+U.labelExtraX+","+ne+"v"+(se-ne)+"h"+te}else K+="V"+(U.yLabelMid+U.labelExtraY)+"h"+te;l.ensureSingle(V,"path","textline").call(o.stroke,$.outsidetextfont.color).attr({"stroke-width":Math.min(2,$.outsidetextfont.size/8),d:K,fill:"none"})})}function x(H,$,U){var V=U[0],j=V.cx,q=V.cy,Y=V.trace,K=Y.type==="funnelarea";"_hasHoverLabel"in Y||(Y._hasHoverLabel=!1),"_hasHoverEvent"in Y||(Y._hasHoverEvent=!1),H.on("mouseover",function(te){var ne=$._fullLayout,se=$._fullData[Y.index];if(!($._dragging||ne.hovermode===!1)){var le=se.hoverinfo;if(Array.isArray(le)&&(le=a.castHoverinfo({hoverinfo:[g.castOption(le,te.pts)],_module:Y._module},ne,0)),le==="all"&&(le="label+text+value+percent+name"),se.hovertemplate||le!=="none"&&le!=="skip"&&le){var ce=te.rInscribed||0,pe=j+te.pxmid[0]*(1-ce),xe=q+te.pxmid[1]*(1-ce),ye=ne.separators,fe=[];if(le&&le.indexOf("label")!==-1&&fe.push(te.label),te.text=g.castOption(se.hovertext||se.text,te.pts),le&&le.indexOf("text")!==-1){var ae=te.text;l.isValidTextValue(ae)&&fe.push(ae)}te.value=te.v,te.valueLabel=g.formatPieValue(te.v,ye),le&&le.indexOf("value")!==-1&&fe.push(te.valueLabel),te.percent=te.v/V.vTotal,te.percentLabel=g.formatPiePercent(te.percent,ye),le&&le.indexOf("percent")!==-1&&fe.push(te.percentLabel);var ee=se.hoverlabel,ie=ee.font,Q=[];a.loneHover({trace:Y,x0:pe-ce*V.r,x1:pe+ce*V.r,y:xe,_x0:K?j+te.TL[0]:pe-ce*V.r,_x1:K?j+te.TR[0]:pe+ce*V.r,_y0:K?q+te.TL[1]:xe-ce*V.r,_y1:K?q+te.BL[1]:xe+ce*V.r,text:fe.join("<br>"),name:se.hovertemplate||le.indexOf("name")!==-1?se.name:void 0,idealAlign:te.pxmid[0]<0?"left":"right",color:g.castOption(ee.bgcolor,te.pts)||te.color,borderColor:g.castOption(ee.bordercolor,te.pts),fontFamily:g.castOption(ie.family,te.pts),fontSize:g.castOption(ie.size,te.pts),fontColor:g.castOption(ie.color,te.pts),nameLength:g.castOption(ee.namelength,te.pts),textAlign:g.castOption(ee.align,te.pts),hovertemplate:g.castOption(se.hovertemplate,te.pts),hovertemplateLabels:te,eventData:[m(te,se)]},{container:ne._hoverlayer.node(),outerContainer:ne._paper.node(),gd:$,inOut_bbox:Q}),te.bbox=Q[0],Y._hasHoverLabel=!0}Y._hasHoverEvent=!0,$.emit("plotly_hover",{points:[m(te,se)],event:t.event})}}),H.on("mouseout",function(te){var ne=$._fullLayout,se=$._fullData[Y.index],le=t.select(this).datum();Y._hasHoverEvent&&(te.originalEvent=t.event,$.emit("plotly_unhover",{points:[m(le,se)],event:t.event}),Y._hasHoverEvent=!1),Y._hasHoverLabel&&(a.loneUnhover(ne._hoverlayer.node()),Y._hasHoverLabel=!1)}),H.on("click",function(te){var ne=$._fullLayout,se=$._fullData[Y.index];$._dragging||ne.hovermode===!1||($._hoverdata=[m(te,se)],a.click($,t.event))})}function S(H,$,U){var V=g.castOption(H.outsidetextfont.color,$.pts)||g.castOption(H.textfont.color,$.pts)||U.color,j=g.castOption(H.outsidetextfont.family,$.pts)||g.castOption(H.textfont.family,$.pts)||U.family,q=g.castOption(H.outsidetextfont.size,$.pts)||g.castOption(H.textfont.size,$.pts)||U.size,Y=g.castOption(H.outsidetextfont.weight,$.pts)||g.castOption(H.textfont.weight,$.pts)||U.weight,K=g.castOption(H.outsidetextfont.style,$.pts)||g.castOption(H.textfont.style,$.pts)||U.style,te=g.castOption(H.outsidetextfont.variant,$.pts)||g.castOption(H.textfont.variant,$.pts)||U.variant,ne=g.castOption(H.outsidetextfont.textcase,$.pts)||g.castOption(H.textfont.textcase,$.pts)||U.textcase,se=g.castOption(H.outsidetextfont.lineposition,$.pts)||g.castOption(H.textfont.lineposition,$.pts)||U.lineposition,le=g.castOption(H.outsidetextfont.shadow,$.pts)||g.castOption(H.textfont.shadow,$.pts)||U.shadow;return{color:V,family:j,size:q,weight:Y,style:K,variant:te,textcase:ne,lineposition:se,shadow:le}}function M(H,$,U){var V=g.castOption(H.insidetextfont.color,$.pts);!V&&H._input.textfont&&(V=g.castOption(H._input.textfont.color,$.pts));var j=g.castOption(H.insidetextfont.family,$.pts)||g.castOption(H.textfont.family,$.pts)||U.family,q=g.castOption(H.insidetextfont.size,$.pts)||g.castOption(H.textfont.size,$.pts)||U.size,Y=g.castOption(H.insidetextfont.weight,$.pts)||g.castOption(H.textfont.weight,$.pts)||U.weight,K=g.castOption(H.insidetextfont.style,$.pts)||g.castOption(H.textfont.style,$.pts)||U.style,te=g.castOption(H.insidetextfont.variant,$.pts)||g.castOption(H.textfont.variant,$.pts)||U.variant,ne=g.castOption(H.insidetextfont.textcase,$.pts)||g.castOption(H.textfont.textcase,$.pts)||U.textcase,se=g.castOption(H.insidetextfont.lineposition,$.pts)||g.castOption(H.textfont.lineposition,$.pts)||U.lineposition,le=g.castOption(H.insidetextfont.shadow,$.pts)||g.castOption(H.textfont.shadow,$.pts)||U.shadow;return{color:V||o.contrast($.color),family:j,size:q,weight:Y,style:K,variant:te,textcase:ne,lineposition:se,shadow:le}}function C(H,$){for(var U,V,j=0;j<H.length;j++)if(U=H[j][0],V=U.trace,V.title.text){var q=V.title.text;V._meta&&(q=l.templateString(q,V._meta));var Y=s.tester.append("text").attr("data-notex",1).text(q).call(s.font,V.title.font).call(c.convertToTspans,$),K=s.bBox(Y.node(),!0);U.titleBox={width:K.width,height:K.height},Y.remove()}}function w(H,$,U){var V=U.r||$.rpx1,j=$.rInscribed,q=$.startangle===$.stopangle;if(q)return{rCenter:1-j,scale:0,rotate:0,textPosAngle:0};var Y=$.ring,K=Y===1&&Math.abs($.startangle-$.stopangle)===Math.PI*2,te=$.halfangle,ne=$.midangle,se=U.trace.insidetextorientation,le=se==="horizontal",ce=se==="tangential",pe=se==="radial",xe=se==="auto",ye=[],fe;if(!xe){var ae=function(Te,je){if(k($,Te)){var Ve=Math.abs(Te-$.startangle),Ze=Math.abs(Te-$.stopangle),Ke=Ve<Ze?Ve:Ze;je==="tan"?fe=b(H,V,Y,Ke,0):fe=A(H,V,Y,Ke,Math.PI/2),fe.textPosAngle=Te,ye.push(fe)}},ee;if(le||ce){for(ee=4;ee>=-4;ee-=2)ae(Math.PI*ee,"tan");for(ee=4;ee>=-4;ee-=2)ae(Math.PI*(ee+1),"tan")}if(le||pe){for(ee=4;ee>=-4;ee-=2)ae(Math.PI*(ee+1.5),"rad");for(ee=4;ee>=-4;ee-=2)ae(Math.PI*(ee+.5),"rad")}}if(K||xe||le){var ie=Math.sqrt(H.width*H.width+H.height*H.height);if(fe={scale:j*V*2/ie,rCenter:1-j,rotate:0},fe.textPosAngle=($.startangle+$.stopangle)/2,fe.scale>=1)return fe;ye.push(fe)}(xe||pe)&&(fe=A(H,V,Y,te,ne),fe.textPosAngle=($.startangle+$.stopangle)/2,ye.push(fe)),(xe||ce)&&(fe=b(H,V,Y,te,ne),fe.textPosAngle=($.startangle+$.stopangle)/2,ye.push(fe));for(var Q=0,ue=0,ge=0;ge<ye.length;ge++){var Me=ye[ge].scale;if(ue<Me&&(ue=Me,Q=ge),!xe&&ue>=1)break}return ye[Q]}function k(H,$){var U=H.startangle,V=H.stopangle;return U>$&&$>V||U<$&&$<V}function A(H,$,U,V,j){$=Math.max(0,$-2*p);var q=H.width/H.height,Y=F(q,V,$,U);return{scale:Y*2/H.height,rCenter:E(q,Y/$),rotate:T(j)}}function b(H,$,U,V,j){$=Math.max(0,$-2*p);var q=H.height/H.width,Y=F(q,V,$,U);return{scale:Y*2/H.width,rCenter:E(q,Y/$),rotate:T(j+Math.PI/2)}}function E(H,$){return Math.cos($)-H*$}function T(H){return(180/Math.PI*H+720)%180-90}function F(H,$,U,V){var j=H+1/(2*Math.tan($));return U*Math.min(1/(Math.sqrt(j*j+.5)+j),V/(Math.sqrt(H*H+V/2)+H))}function D(H,$){return H.v===$.vTotal&&!$.trace.hole?1:Math.min(1/(1+1/Math.sin(H.halfangle)),H.ring/2)}function R(H,$){var U=$.pxmid[0],V=$.pxmid[1],j=H.width/2,q=H.height/2;return U<0&&(j*=-1),V<0&&(q*=-1),{scale:1,rCenter:1,rotate:0,x:j+Math.abs(q)*(j>0?1:-1)/2,y:q/(1+U*U/(V*V)),outside:!0}}function P(H){var $=Math.sqrt(H.titleBox.width*H.titleBox.width+H.titleBox.height*H.titleBox.height);return{x:H.cx,y:H.cy,scale:H.trace.hole*H.r*2/$,tx:0,ty:-H.titleBox.height/2+H.trace.title.font.size}}function z(H,$){var U=1,V=1,j,q=H.trace,Y={x:H.cx,y:H.cy},K={tx:0,ty:0};K.ty+=q.title.font.size,j=B(q),q.title.position.indexOf("top")!==-1?(Y.y-=(1+j)*H.r,K.ty-=H.titleBox.height):q.title.position.indexOf("bottom")!==-1&&(Y.y+=(1+j)*H.r);var te=I(H.r,H.trace.aspectratio),ne=$.w*(q.domain.x[1]-q.domain.x[0])/2;return q.title.position.indexOf("left")!==-1?(ne=ne+te,Y.x-=(1+j)*te,K.tx+=H.titleBox.width/2):q.title.position.indexOf("center")!==-1?ne*=2:q.title.position.indexOf("right")!==-1&&(ne=ne+te,Y.x+=(1+j)*te,K.tx-=H.titleBox.width/2),U=ne/H.titleBox.width,V=L(H,$)/H.titleBox.height,{x:Y.x,y:Y.y,scale:Math.min(U,V),tx:K.tx,ty:K.ty}}function I(H,$){return H/($===void 0?1:$)}function L(H,$){var U=H.trace,V=$.h*(U.domain.y[1]-U.domain.y[0]);return Math.min(H.titleBox.height,V/2)}function B(H){var $=H.pull;if(!$)return 0;var U;if(l.isArrayOrTypedArray($))for($=0,U=0;U<H.pull.length;U++)H.pull[U]>$&&($=H.pull[U]);return $}function O(H,$){var U,V,j,q,Y,K,te,ne,se,le,ce,pe,xe;function ye(ie,Q){return ie.pxmid[1]-Q.pxmid[1]}function fe(ie,Q){return Q.pxmid[1]-ie.pxmid[1]}function ae(ie,Q){Q||(Q={});var ue=Q.labelExtraY+(V?Q.yLabelMax:Q.yLabelMin),ge=V?ie.yLabelMin:ie.yLabelMax,Me=V?ie.yLabelMax:ie.yLabelMin,Te=ie.cyFinal+Y(ie.px0[1],ie.px1[1]),je=ue-ge,Ve,Ze,Ke,vt,xt,Pt;if(je*te>0&&(ie.labelExtraY=je),!!l.isArrayOrTypedArray($.pull))for(Ze=0;Ze<le.length;Ze++)Ke=le[Ze],!(Ke===ie||(g.castOption($.pull,ie.pts)||0)>=(g.castOption($.pull,Ke.pts)||0))&&((ie.pxmid[1]-Ke.pxmid[1])*te>0?(vt=Ke.cyFinal+Y(Ke.px0[1],Ke.px1[1]),je=vt-ge-ie.labelExtraY,je*te>0&&(ie.labelExtraY+=je)):(Me+ie.labelExtraY-Te)*te>0&&(Ve=3*K*Math.abs(Ze-le.indexOf(ie)),xt=Ke.cxFinal+q(Ke.px0[0],Ke.px1[0]),Pt=xt+Ve-(ie.cxFinal+ie.pxmid[0])-ie.labelExtraX,Pt*K>0&&(ie.labelExtraX+=Pt)))}for(V=0;V<2;V++)for(j=V?ye:fe,Y=V?Math.max:Math.min,te=V?1:-1,U=0;U<2;U++){for(q=U?Math.max:Math.min,K=U?1:-1,ne=H[V][U],ne.sort(j),se=H[1-V][U],le=se.concat(ne),pe=[],ce=0;ce<ne.length;ce++)ne[ce].yLabelMid!==void 0&&pe.push(ne[ce]);for(xe=!1,ce=0;V&&ce<se.length;ce++)if(se[ce].yLabelMid!==void 0){xe=se[ce];break}for(ce=0;ce<pe.length;ce++){var ee=ce&&pe[ce-1];xe&&!ce&&(ee=xe),ae(pe[ce],ee)}}}function G(H,$){for(var U=[],V=0;V<H.length;V++){var j=H[V][0],q=j.trace,Y=q.domain,K=$.w*(Y.x[1]-Y.x[0]),te=$.h*(Y.y[1]-Y.y[0]);q.title.text&&q.title.position!=="middle center"&&(te-=L(j,$));var ne=K/2,se=te/2;q.type==="funnelarea"&&!q.scalegroup&&(se/=q.aspectratio),j.r=Math.min(ne,se)/(1+B(q)),j.cx=$.l+$.w*(q.domain.x[1]+q.domain.x[0])/2,j.cy=$.t+$.h*(1-q.domain.y[0])-te/2,q.title.text&&q.title.position.indexOf("bottom")!==-1&&(j.cy-=L(j,$)),q.scalegroup&&U.indexOf(q.scalegroup)===-1&&U.push(q.scalegroup)}W(H,U)}function W(H,$){for(var U,V,j,q=0;q<$.length;q++){var Y=1/0,K=$[q];for(V=0;V<H.length;V++)if(U=H[V][0],j=U.trace,j.scalegroup===K){var te;if(j.type==="pie")te=U.r*U.r;else if(j.type==="funnelarea"){var ne,se;j.aspectratio>1?(ne=U.r,se=ne/j.aspectratio):(se=U.r,ne=se*j.aspectratio),ne*=(1+j.baseratio)/2,te=ne*se}Y=Math.min(Y,te/U.vTotal)}for(V=0;V<H.length;V++)if(U=H[V][0],j=U.trace,j.scalegroup===K){var le=Y*U.vTotal;j.type==="funnelarea"&&(le/=(1+j.baseratio)/2,le/=j.aspectratio),U.r=Math.sqrt(le)}}}function X(H){var $=H[0],U=$.r,V=$.trace,j=g.getRotationAngle(V.rotation),q=2*Math.PI/$.vTotal,Y="px0",K="px1",te,ne,se;if(V.direction==="counterclockwise"){for(te=0;te<H.length&&H[te].hidden;te++);if(te===H.length)return;j+=q*H[te].v,q*=-1,Y="px1",K="px0"}for(se=Z(U,j),te=0;te<H.length;te++)ne=H[te],!ne.hidden&&(ne[Y]=se,ne.startangle=j,j+=q*ne.v/2,ne.pxmid=Z(U,j),ne.midangle=j,j+=q*ne.v/2,se=Z(U,j),ne.stopangle=j,ne[K]=se,ne.largeArc=ne.v>$.vTotal/2?1:0,ne.halfangle=Math.PI*Math.min(ne.v/$.vTotal,.5),ne.ring=1-V.hole,ne.rInscribed=D(ne,$))}function Z(H,$){return[H*Math.sin($),-H*Math.cos($)]}function J(H,$,U){var V=H._fullLayout,j=U.trace,q=j.texttemplate,Y=j.textinfo;if(!q&&Y&&Y!=="none"){var K=Y.split("+"),te=function(Q){return K.indexOf(Q)!==-1},ne=te("label"),se=te("text"),le=te("value"),ce=te("percent"),pe=V.separators,xe;if(xe=ne?[$.label]:[],se){var ye=g.getFirstFilled(j.text,$.pts);y(ye)&&xe.push(ye)}le&&xe.push(g.formatPieValue($.v,pe)),ce&&xe.push(g.formatPiePercent($.v/U.vTotal,pe)),$.text=xe.join("<br>")}function fe(Q){return{label:Q.label,value:Q.v,valueLabel:g.formatPieValue(Q.v,V.separators),percent:Q.v/U.vTotal,percentLabel:g.formatPiePercent(Q.v/U.vTotal,V.separators),color:Q.color,text:Q.text,customdata:l.castOption(j,Q.i,"customdata")}}if(q){var ae=l.castOption(j,$.i,"texttemplate");if(!ae)$.text="";else{var ee=fe($),ie=g.getFirstFilled(j.text,$.pts);(y(ie)||ie==="")&&(ee.text=ie),$.text=l.texttemplateString({data:[ee,j._meta],fallback:j.texttemplatefallback,labels:ee,locale:H._fullLayout._d3locale,template:ae})}}}function N(H,$){var U=H.rotate*Math.PI/180,V=Math.cos(U),j=Math.sin(U),q=($.left+$.right)/2,Y=($.top+$.bottom)/2;H.textX=q*V-Y*j,H.textY=q*j+Y*V,H.noCenter=!0}r.exports={plot:_,formatSliceLabel:J,transformInsideText:w,determineInsideTextFont:M,positionTitleOutside:z,prerenderTitles:C,layoutAreas:G,attachFxHandlers:x,computeTransform:N}}}),j$=de({"src/traces/pie/style.js"(e,r){"use strict";var t=Yr(),i=d1(),a=dc().resizeText;r.exports=function(s){var l=s._fullLayout._pielayer.selectAll(".trace");a(s,l,"pie"),l.each(function(n){var u=n[0],c=u.trace,f=t.select(this);f.style({opacity:c.opacity}),f.selectAll("path.surface").each(function(h){t.select(this).call(i,h,c,s)})})}}}),U$=de({"src/traces/pie/base_plot.js"(e){"use strict";var r=Es();e.name="pie",e.plot=function(t,i,a,o){r.plotBasePlot(e.name,t,i,a,o)},e.clean=function(t,i,a,o){r.cleanBasePlot(e.name,t,i,a,o)}}}),q$=de({"src/traces/pie/index.js"(e,r){"use strict";r.exports={attributes:Pv(),supplyDefaults:Iv().supplyDefaults,supplyLayoutDefaults:O$(),layoutAttributes:R3(),calc:E1().calc,crossTraceCalc:E1().crossTraceCalc,plot:z3().plot,style:j$(),styleOne:d1(),moduleType:"trace",name:"pie",basePlotModule:U$(),categories:["pie-like","pie","showLegend"],meta:{}}}}),V$=de({"lib/pie.js"(e,r){"use strict";r.exports=q$()}}),G$=de({"src/traces/sunburst/base_plot.js"(e){"use strict";var r=Es();e.name="sunburst",e.plot=function(t,i,a,o){r.plotBasePlot(e.name,t,i,a,o)},e.clean=function(t,i,a,o){r.cleanBasePlot(e.name,t,i,a,o)}}}),PC=de({"src/traces/sunburst/constants.js"(e,r){"use strict";r.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"linear",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"]}}}),Zy=de({"src/traces/sunburst/attributes.js"(e,r){"use strict";var t=ri(),{hovertemplateAttrs:i,texttemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=cs(),l=Is().attributes,n=Pv(),u=PC(),c=fn().extendFlat,f=fu().pattern;r.exports={labels:{valType:"data_array",editType:"calc"},parents:{valType:"data_array",editType:"calc"},values:{valType:"data_array",editType:"calc"},branchvalues:{valType:"enumerated",values:["remainder","total"],dflt:"remainder",editType:"calc"},count:{valType:"flaglist",flags:["branches","leaves"],dflt:"leaves",editType:"calc"},level:{valType:"any",editType:"plot",anim:!0},maxdepth:{valType:"integer",editType:"plot",dflt:-1},marker:c({colors:{valType:"data_array",editType:"calc"},line:{color:c({},n.marker.line.color,{dflt:null}),width:c({},n.marker.line.width,{dflt:1}),editType:"calc"},pattern:f,editType:"calc"},s("marker",{colorAttr:"colors",anim:!1})),leaf:{opacity:{valType:"number",editType:"style",min:0,max:1},editType:"plot"},text:n.text,textinfo:{valType:"flaglist",flags:["label","text","value","current path","percent root","percent entry","percent parent"],extras:["none"],editType:"plot"},texttemplate:a({editType:"plot"},{keys:u.eventDataKeys.concat(["label","value"])}),texttemplatefallback:o({editType:"plot"}),hovertext:n.hovertext,hoverinfo:c({},t.hoverinfo,{flags:["label","text","value","name","current path","percent root","percent entry","percent parent"],dflt:"label+text+value+name"}),hovertemplate:i({},{keys:u.eventDataKeys}),hovertemplatefallback:o(),textfont:n.textfont,insidetextorientation:n.insidetextorientation,insidetextfont:n.insidetextfont,outsidetextfont:c({},n.outsidetextfont,{}),rotation:{valType:"angle",dflt:0,editType:"plot"},sort:n.sort,root:{color:{valType:"color",editType:"calc",dflt:"rgba(0,0,0,0)"},editType:"calc"},domain:l({name:"sunburst",trace:!0,editType:"calc"})}}}),IC=de({"src/traces/sunburst/layout_attributes.js"(e,r){"use strict";r.exports={sunburstcolorway:{valType:"colorlist",editType:"calc"},extendsunburstcolors:{valType:"boolean",dflt:!0,editType:"calc"}}}}),H$=de({"src/traces/sunburst/defaults.js"(e,r){"use strict";var t=Qt(),i=Zy(),a=Is().defaults,o=oh().handleText,s=Iv().handleMarkerDefaults,l=ks(),n=l.hasColorscale,u=l.handleDefaults;r.exports=function(f,h,d,p){function g(M,C){return t.coerce(f,h,i,M,C)}var m=g("labels"),y=g("parents");if(!m||!m.length||!y||!y.length){h.visible=!1;return}var _=g("values");_&&_.length?g("branchvalues"):g("count"),g("level"),g("maxdepth"),s(f,h,p,g);var v=h._hasColorscale=n(f,"marker","colors")||(f.marker||{}).coloraxis;v&&u(f,h,p,g,{prefix:"marker.",cLetter:"c"}),g("leaf.opacity",v?1:.7);var x=g("text");g("texttemplate"),g("texttemplatefallback"),h.texttemplate||g("textinfo",t.isArrayOrTypedArray(x)?"text+label":"label"),g("hovertext"),g("hovertemplate"),g("hovertemplatefallback");var S="auto";o(f,h,p,g,S,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),g("insidetextorientation"),g("sort"),g("rotation"),g("root.color"),a(h,p,g),h._length=null}}}),$$=de({"src/traces/sunburst/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=IC();r.exports=function(o,s){function l(n,u){return t.coerce(o,s,i,n,u)}l("sunburstcolorway",s.colorway),l("extendsunburstcolors")}}}),Ky=de({"node_modules/d3-hierarchy/dist/d3-hierarchy.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.d3=t.d3||{}))})(e,function(t){"use strict";function i(me,_e){return me.parent===_e.parent?1:2}function a(me){return me.reduce(o,0)/me.length}function o(me,_e){return me+_e.x}function s(me){return 1+me.reduce(l,0)}function l(me,_e){return Math.max(me,_e.y)}function n(me){for(var _e;_e=me.children;)me=_e[0];return me}function u(me){for(var _e;_e=me.children;)me=_e[_e.length-1];return me}function c(){var me=i,_e=1,Ae=1,ke=!1;function Ee(De){var Je,Ue=0;De.eachAfter(function(ht){var Gt=ht.children;Gt?(ht.x=a(Gt),ht.y=s(Gt)):(ht.x=Je?Ue+=me(ht,Je):0,ht.y=0,Je=ht)});var at=n(De),rt=u(De),ft=at.x-me(at,rt)/2,At=rt.x+me(rt,at)/2;return De.eachAfter(ke?function(ht){ht.x=(ht.x-De.x)*_e,ht.y=(De.y-ht.y)*Ae}:function(ht){ht.x=(ht.x-ft)/(At-ft)*_e,ht.y=(1-(De.y?ht.y/De.y:1))*Ae})}return Ee.separation=function(De){return arguments.length?(me=De,Ee):me},Ee.size=function(De){return arguments.length?(ke=!1,_e=+De[0],Ae=+De[1],Ee):ke?null:[_e,Ae]},Ee.nodeSize=function(De){return arguments.length?(ke=!0,_e=+De[0],Ae=+De[1],Ee):ke?[_e,Ae]:null},Ee}function f(me){var _e=0,Ae=me.children,ke=Ae&&Ae.length;if(!ke)_e=1;else for(;--ke>=0;)_e+=Ae[ke].value;me.value=_e}function h(){return this.eachAfter(f)}function d(me){var _e=this,Ae,ke=[_e],Ee,De,Je;do for(Ae=ke.reverse(),ke=[];_e=Ae.pop();)if(me(_e),Ee=_e.children,Ee)for(De=0,Je=Ee.length;De<Je;++De)ke.push(Ee[De]);while(ke.length);return this}function p(me){for(var _e=this,Ae=[_e],ke,Ee;_e=Ae.pop();)if(me(_e),ke=_e.children,ke)for(Ee=ke.length-1;Ee>=0;--Ee)Ae.push(ke[Ee]);return this}function g(me){for(var _e=this,Ae=[_e],ke=[],Ee,De,Je;_e=Ae.pop();)if(ke.push(_e),Ee=_e.children,Ee)for(De=0,Je=Ee.length;De<Je;++De)Ae.push(Ee[De]);for(;_e=ke.pop();)me(_e);return this}function m(me){return this.eachAfter(function(_e){for(var Ae=+me(_e.data)||0,ke=_e.children,Ee=ke&&ke.length;--Ee>=0;)Ae+=ke[Ee].value;_e.value=Ae})}function y(me){return this.eachBefore(function(_e){_e.children&&_e.children.sort(me)})}function _(me){for(var _e=this,Ae=v(_e,me),ke=[_e];_e!==Ae;)_e=_e.parent,ke.push(_e);for(var Ee=ke.length;me!==Ae;)ke.splice(Ee,0,me),me=me.parent;return ke}function v(me,_e){if(me===_e)return me;var Ae=me.ancestors(),ke=_e.ancestors(),Ee=null;for(me=Ae.pop(),_e=ke.pop();me===_e;)Ee=me,me=Ae.pop(),_e=ke.pop();return Ee}function x(){for(var me=this,_e=[me];me=me.parent;)_e.push(me);return _e}function S(){var me=[];return this.each(function(_e){me.push(_e)}),me}function M(){var me=[];return this.eachBefore(function(_e){_e.children||me.push(_e)}),me}function C(){var me=this,_e=[];return me.each(function(Ae){Ae!==me&&_e.push({source:Ae.parent,target:Ae})}),_e}function w(me,_e){var Ae=new T(me),ke=+me.value&&(Ae.value=me.value),Ee,De=[Ae],Je,Ue,at,rt;for(_e==null&&(_e=A);Ee=De.pop();)if(ke&&(Ee.value=+Ee.data.value),(Ue=_e(Ee.data))&&(rt=Ue.length))for(Ee.children=new Array(rt),at=rt-1;at>=0;--at)De.push(Je=Ee.children[at]=new T(Ue[at])),Je.parent=Ee,Je.depth=Ee.depth+1;return Ae.eachBefore(E)}function k(){return w(this).eachBefore(b)}function A(me){return me.children}function b(me){me.data=me.data.data}function E(me){var _e=0;do me.height=_e;while((me=me.parent)&&me.height<++_e)}function T(me){this.data=me,this.depth=this.height=0,this.parent=null}T.prototype=w.prototype={constructor:T,count:h,each:d,eachAfter:g,eachBefore:p,sum:m,sort:y,path:_,ancestors:x,descendants:S,leaves:M,links:C,copy:k};var F=Array.prototype.slice;function D(me){for(var _e=me.length,Ae,ke;_e;)ke=Math.random()*_e--|0,Ae=me[_e],me[_e]=me[ke],me[ke]=Ae;return me}function R(me){for(var _e=0,Ae=(me=D(F.call(me))).length,ke=[],Ee,De;_e<Ae;)Ee=me[_e],De&&I(De,Ee)?++_e:(De=B(ke=P(ke,Ee)),_e=0);return De}function P(me,_e){var Ae,ke;if(L(_e,me))return[_e];for(Ae=0;Ae<me.length;++Ae)if(z(_e,me[Ae])&&L(G(me[Ae],_e),me))return[me[Ae],_e];for(Ae=0;Ae<me.length-1;++Ae)for(ke=Ae+1;ke<me.length;++ke)if(z(G(me[Ae],me[ke]),_e)&&z(G(me[Ae],_e),me[ke])&&z(G(me[ke],_e),me[Ae])&&L(W(me[Ae],me[ke],_e),me))return[me[Ae],me[ke],_e];throw new Error}function z(me,_e){var Ae=me.r-_e.r,ke=_e.x-me.x,Ee=_e.y-me.y;return Ae<0||Ae*Ae<ke*ke+Ee*Ee}function I(me,_e){var Ae=me.r-_e.r+1e-6,ke=_e.x-me.x,Ee=_e.y-me.y;return Ae>0&&Ae*Ae>ke*ke+Ee*Ee}function L(me,_e){for(var Ae=0;Ae<_e.length;++Ae)if(!I(me,_e[Ae]))return!1;return!0}function B(me){switch(me.length){case 1:return O(me[0]);case 2:return G(me[0],me[1]);case 3:return W(me[0],me[1],me[2])}}function O(me){return{x:me.x,y:me.y,r:me.r}}function G(me,_e){var Ae=me.x,ke=me.y,Ee=me.r,De=_e.x,Je=_e.y,Ue=_e.r,at=De-Ae,rt=Je-ke,ft=Ue-Ee,At=Math.sqrt(at*at+rt*rt);return{x:(Ae+De+at/At*ft)/2,y:(ke+Je+rt/At*ft)/2,r:(At+Ee+Ue)/2}}function W(me,_e,Ae){var ke=me.x,Ee=me.y,De=me.r,Je=_e.x,Ue=_e.y,at=_e.r,rt=Ae.x,ft=Ae.y,At=Ae.r,ht=ke-Je,Gt=ke-rt,fr=Ee-Ue,gt=Ee-ft,yt=at-De,kt=At-De,Lt=ke*ke+Ee*Ee-De*De,Ct=Lt-Je*Je-Ue*Ue+at*at,$t=Lt-rt*rt-ft*ft+At*At,mr=Gt*fr-ht*gt,br=(fr*$t-gt*Ct)/(mr*2)-ke,Er=(gt*yt-fr*kt)/mr,Tr=(Gt*Ct-ht*$t)/(mr*2)-Ee,Ur=(ht*kt-Gt*yt)/mr,Ai=Er*Er+Ur*Ur-1,oi=2*(De+br*Er+Tr*Ur),Qr=br*br+Tr*Tr-De*De,ea=-(Ai?(oi+Math.sqrt(oi*oi-4*Ai*Qr))/(2*Ai):Qr/oi);return{x:ke+br+Er*ea,y:Ee+Tr+Ur*ea,r:ea}}function X(me,_e,Ae){var ke=me.x-_e.x,Ee,De,Je=me.y-_e.y,Ue,at,rt=ke*ke+Je*Je;rt?(De=_e.r+Ae.r,De*=De,at=me.r+Ae.r,at*=at,De>at?(Ee=(rt+at-De)/(2*rt),Ue=Math.sqrt(Math.max(0,at/rt-Ee*Ee)),Ae.x=me.x-Ee*ke-Ue*Je,Ae.y=me.y-Ee*Je+Ue*ke):(Ee=(rt+De-at)/(2*rt),Ue=Math.sqrt(Math.max(0,De/rt-Ee*Ee)),Ae.x=_e.x+Ee*ke-Ue*Je,Ae.y=_e.y+Ee*Je+Ue*ke)):(Ae.x=_e.x+Ae.r,Ae.y=_e.y)}function Z(me,_e){var Ae=me.r+_e.r-1e-6,ke=_e.x-me.x,Ee=_e.y-me.y;return Ae>0&&Ae*Ae>ke*ke+Ee*Ee}function J(me){var _e=me._,Ae=me.next._,ke=_e.r+Ae.r,Ee=(_e.x*Ae.r+Ae.x*_e.r)/ke,De=(_e.y*Ae.r+Ae.y*_e.r)/ke;return Ee*Ee+De*De}function N(me){this._=me,this.next=null,this.previous=null}function H(me){if(!(Ee=me.length))return 0;var _e,Ae,ke,Ee,De,Je,Ue,at,rt,ft,At;if(_e=me[0],_e.x=0,_e.y=0,!(Ee>1))return _e.r;if(Ae=me[1],_e.x=-Ae.r,Ae.x=_e.r,Ae.y=0,!(Ee>2))return _e.r+Ae.r;X(Ae,_e,ke=me[2]),_e=new N(_e),Ae=new N(Ae),ke=new N(ke),_e.next=ke.previous=Ae,Ae.next=_e.previous=ke,ke.next=Ae.previous=_e;e:for(Ue=3;Ue<Ee;++Ue){X(_e._,Ae._,ke=me[Ue]),ke=new N(ke),at=Ae.next,rt=_e.previous,ft=Ae._.r,At=_e._.r;do if(ft<=At){if(Z(at._,ke._)){Ae=at,_e.next=Ae,Ae.previous=_e,--Ue;continue e}ft+=at._.r,at=at.next}else{if(Z(rt._,ke._)){_e=rt,_e.next=Ae,Ae.previous=_e,--Ue;continue e}At+=rt._.r,rt=rt.previous}while(at!==rt.next);for(ke.previous=_e,ke.next=Ae,_e.next=Ae.previous=Ae=ke,De=J(_e);(ke=ke.next)!==Ae;)(Je=J(ke))<De&&(_e=ke,De=Je);Ae=_e.next}for(_e=[Ae._],ke=Ae;(ke=ke.next)!==Ae;)_e.push(ke._);for(ke=R(_e),Ue=0;Ue<Ee;++Ue)_e=me[Ue],_e.x-=ke.x,_e.y-=ke.y;return ke.r}function $(me){return H(me),me}function U(me){return me==null?null:V(me)}function V(me){if(typeof me!="function")throw new Error;return me}function j(){return 0}function q(me){return function(){return me}}function Y(me){return Math.sqrt(me.value)}function K(){var me=null,_e=1,Ae=1,ke=j;function Ee(De){return De.x=_e/2,De.y=Ae/2,me?De.eachBefore(te(me)).eachAfter(ne(ke,.5)).eachBefore(se(1)):De.eachBefore(te(Y)).eachAfter(ne(j,1)).eachAfter(ne(ke,De.r/Math.min(_e,Ae))).eachBefore(se(Math.min(_e,Ae)/(2*De.r))),De}return Ee.radius=function(De){return arguments.length?(me=U(De),Ee):me},Ee.size=function(De){return arguments.length?(_e=+De[0],Ae=+De[1],Ee):[_e,Ae]},Ee.padding=function(De){return arguments.length?(ke=typeof De=="function"?De:q(+De),Ee):ke},Ee}function te(me){return function(_e){_e.children||(_e.r=Math.max(0,+me(_e)||0))}}function ne(me,_e){return function(Ae){if(ke=Ae.children){var ke,Ee,De=ke.length,Je=me(Ae)*_e||0,Ue;if(Je)for(Ee=0;Ee<De;++Ee)ke[Ee].r+=Je;if(Ue=H(ke),Je)for(Ee=0;Ee<De;++Ee)ke[Ee].r-=Je;Ae.r=Ue+Je}}}function se(me){return function(_e){var Ae=_e.parent;_e.r*=me,Ae&&(_e.x=Ae.x+me*_e.x,_e.y=Ae.y+me*_e.y)}}function le(me){me.x0=Math.round(me.x0),me.y0=Math.round(me.y0),me.x1=Math.round(me.x1),me.y1=Math.round(me.y1)}function ce(me,_e,Ae,ke,Ee){for(var De=me.children,Je,Ue=-1,at=De.length,rt=me.value&&(ke-_e)/me.value;++Ue<at;)Je=De[Ue],Je.y0=Ae,Je.y1=Ee,Je.x0=_e,Je.x1=_e+=Je.value*rt}function pe(){var me=1,_e=1,Ae=0,ke=!1;function Ee(Je){var Ue=Je.height+1;return Je.x0=Je.y0=Ae,Je.x1=me,Je.y1=_e/Ue,Je.eachBefore(De(_e,Ue)),ke&&Je.eachBefore(le),Je}function De(Je,Ue){return function(at){at.children&&ce(at,at.x0,Je*(at.depth+1)/Ue,at.x1,Je*(at.depth+2)/Ue);var rt=at.x0,ft=at.y0,At=at.x1-Ae,ht=at.y1-Ae;At<rt&&(rt=At=(rt+At)/2),ht<ft&&(ft=ht=(ft+ht)/2),at.x0=rt,at.y0=ft,at.x1=At,at.y1=ht}}return Ee.round=function(Je){return arguments.length?(ke=!!Je,Ee):ke},Ee.size=function(Je){return arguments.length?(me=+Je[0],_e=+Je[1],Ee):[me,_e]},Ee.padding=function(Je){return arguments.length?(Ae=+Je,Ee):Ae},Ee}var xe="$",ye={depth:-1},fe={};function ae(me){return me.id}function ee(me){return me.parentId}function ie(){var me=ae,_e=ee;function Ae(ke){var Ee,De,Je=ke.length,Ue,at,rt,ft=new Array(Je),At,ht,Gt={};for(De=0;De<Je;++De)Ee=ke[De],rt=ft[De]=new T(Ee),(At=me(Ee,De,ke))!=null&&(At+="")&&(ht=xe+(rt.id=At),Gt[ht]=ht in Gt?fe:rt);for(De=0;De<Je;++De)if(rt=ft[De],At=_e(ke[De],De,ke),At==null||!(At+="")){if(Ue)throw new Error("multiple roots");Ue=rt}else{if(at=Gt[xe+At],!at)throw new Error("missing: "+At);if(at===fe)throw new Error("ambiguous: "+At);at.children?at.children.push(rt):at.children=[rt],rt.parent=at}if(!Ue)throw new Error("no root");if(Ue.parent=ye,Ue.eachBefore(function(fr){fr.depth=fr.parent.depth+1,--Je}).eachBefore(E),Ue.parent=null,Je>0)throw new Error("cycle");return Ue}return Ae.id=function(ke){return arguments.length?(me=V(ke),Ae):me},Ae.parentId=function(ke){return arguments.length?(_e=V(ke),Ae):_e},Ae}function Q(me,_e){return me.parent===_e.parent?1:2}function ue(me){var _e=me.children;return _e?_e[0]:me.t}function ge(me){var _e=me.children;return _e?_e[_e.length-1]:me.t}function Me(me,_e,Ae){var ke=Ae/(_e.i-me.i);_e.c-=ke,_e.s+=Ae,me.c+=ke,_e.z+=Ae,_e.m+=Ae}function Te(me){for(var _e=0,Ae=0,ke=me.children,Ee=ke.length,De;--Ee>=0;)De=ke[Ee],De.z+=_e,De.m+=_e,_e+=De.s+(Ae+=De.c)}function je(me,_e,Ae){return me.a.parent===_e.parent?me.a:Ae}function Ve(me,_e){this._=me,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=_e}Ve.prototype=Object.create(T.prototype);function Ze(me){for(var _e=new Ve(me,0),Ae,ke=[_e],Ee,De,Je,Ue;Ae=ke.pop();)if(De=Ae._.children)for(Ae.children=new Array(Ue=De.length),Je=Ue-1;Je>=0;--Je)ke.push(Ee=Ae.children[Je]=new Ve(De[Je],Je)),Ee.parent=Ae;return(_e.parent=new Ve(null,0)).children=[_e],_e}function Ke(){var me=Q,_e=1,Ae=1,ke=null;function Ee(rt){var ft=Ze(rt);if(ft.eachAfter(De),ft.parent.m=-ft.z,ft.eachBefore(Je),ke)rt.eachBefore(at);else{var At=rt,ht=rt,Gt=rt;rt.eachBefore(function(Lt){Lt.x<At.x&&(At=Lt),Lt.x>ht.x&&(ht=Lt),Lt.depth>Gt.depth&&(Gt=Lt)});var fr=At===ht?1:me(At,ht)/2,gt=fr-At.x,yt=_e/(ht.x+fr+gt),kt=Ae/(Gt.depth||1);rt.eachBefore(function(Lt){Lt.x=(Lt.x+gt)*yt,Lt.y=Lt.depth*kt})}return rt}function De(rt){var ft=rt.children,At=rt.parent.children,ht=rt.i?At[rt.i-1]:null;if(ft){Te(rt);var Gt=(ft[0].z+ft[ft.length-1].z)/2;ht?(rt.z=ht.z+me(rt._,ht._),rt.m=rt.z-Gt):rt.z=Gt}else ht&&(rt.z=ht.z+me(rt._,ht._));rt.parent.A=Ue(rt,ht,rt.parent.A||At[0])}function Je(rt){rt._.x=rt.z+rt.parent.m,rt.m+=rt.parent.m}function Ue(rt,ft,At){if(ft){for(var ht=rt,Gt=rt,fr=ft,gt=ht.parent.children[0],yt=ht.m,kt=Gt.m,Lt=fr.m,Ct=gt.m,$t;fr=ge(fr),ht=ue(ht),fr&&ht;)gt=ue(gt),Gt=ge(Gt),Gt.a=rt,$t=fr.z+Lt-ht.z-yt+me(fr._,ht._),$t>0&&(Me(je(fr,rt,At),rt,$t),yt+=$t,kt+=$t),Lt+=fr.m,yt+=ht.m,Ct+=gt.m,kt+=Gt.m;fr&&!ge(Gt)&&(Gt.t=fr,Gt.m+=Lt-kt),ht&&!ue(gt)&&(gt.t=ht,gt.m+=yt-Ct,At=rt)}return At}function at(rt){rt.x*=_e,rt.y=rt.depth*Ae}return Ee.separation=function(rt){return arguments.length?(me=rt,Ee):me},Ee.size=function(rt){return arguments.length?(ke=!1,_e=+rt[0],Ae=+rt[1],Ee):ke?null:[_e,Ae]},Ee.nodeSize=function(rt){return arguments.length?(ke=!0,_e=+rt[0],Ae=+rt[1],Ee):ke?[_e,Ae]:null},Ee}function vt(me,_e,Ae,ke,Ee){for(var De=me.children,Je,Ue=-1,at=De.length,rt=me.value&&(Ee-Ae)/me.value;++Ue<at;)Je=De[Ue],Je.x0=_e,Je.x1=ke,Je.y0=Ae,Je.y1=Ae+=Je.value*rt}var xt=(1+Math.sqrt(5))/2;function Pt(me,_e,Ae,ke,Ee,De){for(var Je=[],Ue=_e.children,at,rt,ft=0,At=0,ht=Ue.length,Gt,fr,gt=_e.value,yt,kt,Lt,Ct,$t,mr,br;ft<ht;){Gt=Ee-Ae,fr=De-ke;do yt=Ue[At++].value;while(!yt&&At<ht);for(kt=Lt=yt,mr=Math.max(fr/Gt,Gt/fr)/(gt*me),br=yt*yt*mr,$t=Math.max(Lt/br,br/kt);At<ht;++At){if(yt+=rt=Ue[At].value,rt<kt&&(kt=rt),rt>Lt&&(Lt=rt),br=yt*yt*mr,Ct=Math.max(Lt/br,br/kt),Ct>$t){yt-=rt;break}$t=Ct}Je.push(at={value:yt,dice:Gt<fr,children:Ue.slice(ft,At)}),at.dice?ce(at,Ae,ke,Ee,gt?ke+=fr*yt/gt:De):vt(at,Ae,ke,gt?Ae+=Gt*yt/gt:Ee,De),gt-=yt,ft=At}return Je}var mt=(function me(_e){function Ae(ke,Ee,De,Je,Ue){Pt(_e,ke,Ee,De,Je,Ue)}return Ae.ratio=function(ke){return me((ke=+ke)>1?ke:1)},Ae})(xt);function Mt(){var me=mt,_e=!1,Ae=1,ke=1,Ee=[0],De=j,Je=j,Ue=j,at=j,rt=j;function ft(ht){return ht.x0=ht.y0=0,ht.x1=Ae,ht.y1=ke,ht.eachBefore(At),Ee=[0],_e&&ht.eachBefore(le),ht}function At(ht){var Gt=Ee[ht.depth],fr=ht.x0+Gt,gt=ht.y0+Gt,yt=ht.x1-Gt,kt=ht.y1-Gt;yt<fr&&(fr=yt=(fr+yt)/2),kt<gt&&(gt=kt=(gt+kt)/2),ht.x0=fr,ht.y0=gt,ht.x1=yt,ht.y1=kt,ht.children&&(Gt=Ee[ht.depth+1]=De(ht)/2,fr+=rt(ht)-Gt,gt+=Je(ht)-Gt,yt-=Ue(ht)-Gt,kt-=at(ht)-Gt,yt<fr&&(fr=yt=(fr+yt)/2),kt<gt&&(gt=kt=(gt+kt)/2),me(ht,fr,gt,yt,kt))}return ft.round=function(ht){return arguments.length?(_e=!!ht,ft):_e},ft.size=function(ht){return arguments.length?(Ae=+ht[0],ke=+ht[1],ft):[Ae,ke]},ft.tile=function(ht){return arguments.length?(me=V(ht),ft):me},ft.padding=function(ht){return arguments.length?ft.paddingInner(ht).paddingOuter(ht):ft.paddingInner()},ft.paddingInner=function(ht){return arguments.length?(De=typeof ht=="function"?ht:q(+ht),ft):De},ft.paddingOuter=function(ht){return arguments.length?ft.paddingTop(ht).paddingRight(ht).paddingBottom(ht).paddingLeft(ht):ft.paddingTop()},ft.paddingTop=function(ht){return arguments.length?(Je=typeof ht=="function"?ht:q(+ht),ft):Je},ft.paddingRight=function(ht){return arguments.length?(Ue=typeof ht=="function"?ht:q(+ht),ft):Ue},ft.paddingBottom=function(ht){return arguments.length?(at=typeof ht=="function"?ht:q(+ht),ft):at},ft.paddingLeft=function(ht){return arguments.length?(rt=typeof ht=="function"?ht:q(+ht),ft):rt},ft}function lt(me,_e,Ae,ke,Ee){var De=me.children,Je,Ue=De.length,at,rt=new Array(Ue+1);for(rt[0]=at=Je=0;Je<Ue;++Je)rt[Je+1]=at+=De[Je].value;ft(0,Ue,me.value,_e,Ae,ke,Ee);function ft(At,ht,Gt,fr,gt,yt,kt){if(At>=ht-1){var Lt=De[At];Lt.x0=fr,Lt.y0=gt,Lt.x1=yt,Lt.y1=kt;return}for(var Ct=rt[At],$t=Gt/2+Ct,mr=At+1,br=ht-1;mr<br;){var Er=mr+br>>>1;rt[Er]<$t?mr=Er+1:br=Er}$t-rt[mr-1]<rt[mr]-$t&&At+1<mr&&--mr;var Tr=rt[mr]-Ct,Ur=Gt-Tr;if(yt-fr>kt-gt){var Ai=(fr*Ur+yt*Tr)/Gt;ft(At,mr,Tr,fr,gt,Ai,kt),ft(mr,ht,Ur,Ai,gt,yt,kt)}else{var oi=(gt*Ur+kt*Tr)/Gt;ft(At,mr,Tr,fr,gt,yt,oi),ft(mr,ht,Ur,fr,oi,yt,kt)}}}function qe(me,_e,Ae,ke,Ee){(me.depth&1?vt:ce)(me,_e,Ae,ke,Ee)}var Ye=(function me(_e){function Ae(ke,Ee,De,Je,Ue){if((at=ke._squarify)&&at.ratio===_e)for(var at,rt,ft,At,ht=-1,Gt,fr=at.length,gt=ke.value;++ht<fr;){for(rt=at[ht],ft=rt.children,At=rt.value=0,Gt=ft.length;At<Gt;++At)rt.value+=ft[At].value;rt.dice?ce(rt,Ee,De,Je,De+=(Ue-De)*rt.value/gt):vt(rt,Ee,De,Ee+=(Je-Ee)*rt.value/gt,Ue),gt-=rt.value}else ke._squarify=at=Pt(_e,ke,Ee,De,Je,Ue),at.ratio=_e}return Ae.ratio=function(ke){return me((ke=+ke)>1?ke:1)},Ae})(xt);t.cluster=c,t.hierarchy=w,t.pack=K,t.packEnclose=R,t.packSiblings=$,t.partition=pe,t.stratify=ie,t.tree=Ke,t.treemap=Mt,t.treemapBinary=lt,t.treemapDice=ce,t.treemapResquarify=Ye,t.treemapSlice=vt,t.treemapSliceDice=qe,t.treemapSquarify=mt,Object.defineProperty(t,"__esModule",{value:!0})})}}),Jy=de({"src/traces/sunburst/calc.js"(e){"use strict";var r=Ky(),t=da(),i=Qt(),a=ks().makeColorScaleFuncFromTrace,o=E1().makePullColorFn,s=E1().generateExtendedColors,l=ks().calc,n=cn().ALMOST_EQUAL,u={},c={},f={};e.calc=function(d,p){var g=d._fullLayout,m=p.ids,y=i.isArrayOrTypedArray(m),_=p.labels,v=p.parents,x=p.values,S=i.isArrayOrTypedArray(x),M=[],C={},w={},k=function($,U){C[$]?C[$].push(U):C[$]=[U],w[U]=1},A=function($){return $||typeof $=="number"},b=function($){return!S||t(x[$])&&x[$]>=0},E,T,F;y?(E=Math.min(m.length,v.length),T=function($){return A(m[$])&&b($)},F=function($){return String(m[$])}):(E=Math.min(_.length,v.length),T=function($){return A(_[$])&&b($)},F=function($){return String(_[$])}),S&&(E=Math.min(E,x.length));for(var D=0;D<E;D++)if(T(D)){var R=F(D),P=A(v[D])?String(v[D]):"",z={i:D,id:R,pid:P,label:A(_[D])?String(_[D]):""};S&&(z.v=+x[D]),M.push(z),k(P,R)}if(C[""]){if(C[""].length>1){for(var B=i.randstr(),O=0;O<M.length;O++)M[O].pid===""&&(M[O].pid=B);M.unshift({hasMultipleRoots:!0,id:B,pid:"",label:""})}}else{var I=[],L;for(L in C)w[L]||I.push(L);if(I.length===1)L=I[0],M.unshift({hasImpliedRoot:!0,id:L,pid:"",label:L});else return i.warn(["Multiple implied roots, cannot build",p.type,"hierarchy of",p.name+".","These roots include:",I.join(", ")].join(" "))}var G;try{G=r.stratify().id(function($){return $.id}).parentId(function($){return $.pid})(M)}catch($){return i.warn(["Failed to build",p.type,"hierarchy of",p.name+".","Error:",$.message].join(" "))}var W=r.hierarchy(G),X=!1;if(S)switch(p.branchvalues){case"remainder":W.sum(function($){return $.data.v});break;case"total":W.each(function($){var U=$.data.data,V=U.v;if($.children){var j=$.children.reduce(function(q,Y){return q+Y.data.data.v},0);if((U.hasImpliedRoot||U.hasMultipleRoots)&&(V=j),V<j*n)return X=!0,i.warn(["Total value for node",$.data.data.id,"of",p.name,"is smaller than the sum of its children.",`
+parent value =`,V,`
+children sum =`,j].join(" "))}$.value=V});break}else h(W,p,{branches:p.count.indexOf("branches")!==-1,leaves:p.count.indexOf("leaves")!==-1});if(!X){p.sort&&W.sort(function($,U){return U.value-$.value});var Z,J,N=p.marker.colors||[],H=!!N.length;return p._hasColorscale?(H||(N=S?p.values:p._values),l(d,p,{vals:N,containerStr:"marker",cLetter:"c"}),J=a(p.marker)):Z=o(g["_"+p.type+"colormap"]),W.each(function($){var U=$.data.data;U.color=p._hasColorscale?J(N[U.i]):Z(N[U.i],U.id)}),M[0].hierarchy=W,M}},e._runCrossTraceCalc=function(d,p){var g=p._fullLayout,m=p.calcdata,y=g[d+"colorway"],_=g["_"+d+"colormap"];g["extend"+d+"colors"]&&(y=s(y,d==="icicle"?f:d==="treemap"?c:u));var v=0,x;function S(k){var A=k.data.data,b=A.id;A.color===!1&&(_[b]?A.color=_[b]:k.parent?k.parent.parent?A.color=k.parent.data.data.color:(_[b]=A.color=y[v%y.length],v++):A.color=x)}for(var M=0;M<m.length;M++){var C=m[M],w=C[0];w.trace.type===d&&w.hierarchy&&(x=w.trace.root.color,w.hierarchy.each(S))}},e.crossTraceCalc=function(d){return e._runCrossTraceCalc("sunburst",d)};function h(d,p,g){var m=0,y=d.children;if(y){for(var _=y.length,v=0;v<_;v++)m+=h(y[v],p,g);g.branches&&m++}else g.leaves&&m++;return d.value=d.data.data.value=m,p._values||(p._values=[]),p._values[d.data.data.i]=m,m}}});function Rv(e,r,t){e.prototype=r.prototype=t,t.constructor=e}function k1(e,r){var t=Object.create(e.prototype);for(var i in r)t[i]=r[i];return t}var B3=Ir({"node_modules/d3-color/src/define.js"(){}});function Ep(){}function RC(){return this.rgb().formatHex()}function W$(){return this.rgb().formatHex8()}function Y$(){return UC(this).formatHsl()}function zC(){return this.rgb().formatRgb()}function C1(e){var r,t;return e=(e+"").trim().toLowerCase(),(r=VC.exec(e))?(t=r[1].length,r=parseInt(r[1],16),t===6?BC(r):t===3?new Su(r>>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):t===8?Qy(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):t===4?Qy(r>>12&15|r>>8&240,r>>8&15|r>>4&240,r>>4&15|r&240,((r&15)<<4|r&15)/255):null):(r=GC.exec(e))?new Su(r[1],r[2],r[3],1):(r=HC.exec(e))?new Su(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=$C.exec(e))?Qy(r[1],r[2],r[3],r[4]):(r=WC.exec(e))?Qy(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=YC.exec(e))?jC(r[1],r[2]/100,r[3]/100,1):(r=XC.exec(e))?jC(r[1],r[2]/100,r[3]/100,r[4]):U3.hasOwnProperty(e)?BC(U3[e]):e==="transparent"?new Su(NaN,NaN,NaN,0):null}function BC(e){return new Su(e>>16&255,e>>8&255,e&255,1)}function Qy(e,r,t,i){return i<=0&&(e=r=t=NaN),new Su(e,r,t,i)}function O3(e){return e instanceof Ep||(e=C1(e)),e?(e=e.rgb(),new Su(e.r,e.g,e.b,e.opacity)):new Su}function e_(e,r,t,i){return arguments.length===1?O3(e):new Su(e,r,t,i??1)}function Su(e,r,t,i){this.r=+e,this.g=+r,this.b=+t,this.opacity=+i}function OC(){return`#${x0(this.r)}${x0(this.g)}${x0(this.b)}`}function X$(){return`#${x0(this.r)}${x0(this.g)}${x0(this.b)}${x0((isNaN(this.opacity)?1:this.opacity)*255)}`}function NC(){let e=t_(this.opacity);return`${e===1?"rgb(":"rgba("}${_0(this.r)}, ${_0(this.g)}, ${_0(this.b)}${e===1?")":`, ${e})`}`}function t_(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function _0(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function x0(e){return e=_0(e),(e<16?"0":"")+e.toString(16)}function jC(e,r,t,i){return i<=0?e=r=t=NaN:t<=0||t>=1?e=r=NaN:r<=0&&(e=NaN),new Vh(e,r,t,i)}function UC(e){if(e instanceof Vh)return new Vh(e.h,e.s,e.l,e.opacity);if(e instanceof Ep||(e=C1(e)),!e)return new Vh;if(e instanceof Vh)return e;e=e.rgb();var r=e.r/255,t=e.g/255,i=e.b/255,a=Math.min(r,t,i),o=Math.max(r,t,i),s=NaN,l=o-a,n=(o+a)/2;return l?(r===o?s=(t-i)/l+(t<i)*6:t===o?s=(i-r)/l+2:s=(r-t)/l+4,l/=n<.5?o+a:2-o-a,s*=60):l=n>0&&n<1?0:s,new Vh(s,l,n,e.opacity)}function N3(e,r,t,i){return arguments.length===1?UC(e):new Vh(e,r,t,i??1)}function Vh(e,r,t,i){this.h=+e,this.s=+r,this.l=+t,this.opacity=+i}function qC(e){return e=(e||0)%360,e<0?e+360:e}function r_(e){return Math.max(0,Math.min(1,e||0))}function j3(e,r,t){return(e<60?r+(t-r)*e/60:e<180?t:e<240?r+(t-r)*(240-e)/60:r)*255}var kp,b0,w0,zv,Gh,VC,GC,HC,$C,WC,YC,XC,U3,q3=Ir({"node_modules/d3-color/src/color.js"(){B3(),kp=.7,b0=1/kp,w0="\\s*([+-]?\\d+)\\s*",zv="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Gh="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",VC=/^#([0-9a-f]{3,8})$/,GC=new RegExp(`^rgb\\(${w0},${w0},${w0}\\)$`),HC=new RegExp(`^rgb\\(${Gh},${Gh},${Gh}\\)$`),$C=new RegExp(`^rgba\\(${w0},${w0},${w0},${zv}\\)$`),WC=new RegExp(`^rgba\\(${Gh},${Gh},${Gh},${zv}\\)$`),YC=new RegExp(`^hsl\\(${zv},${Gh},${Gh}\\)$`),XC=new RegExp(`^hsla\\(${zv},${Gh},${Gh},${zv}\\)$`),U3={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Rv(Ep,C1,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:RC,formatHex:RC,formatHex8:W$,formatHsl:Y$,formatRgb:zC,toString:zC}),Rv(Su,e_,k1(Ep,{brighter(e){return e=e==null?b0:Math.pow(b0,e),new Su(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?kp:Math.pow(kp,e),new Su(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Su(_0(this.r),_0(this.g),_0(this.b),t_(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:OC,formatHex:OC,formatHex8:X$,formatRgb:NC,toString:NC})),Rv(Vh,N3,k1(Ep,{brighter(e){return e=e==null?b0:Math.pow(b0,e),new Vh(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?kp:Math.pow(kp,e),new Vh(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,r=isNaN(e)||isNaN(this.s)?0:this.s,t=this.l,i=t+(t<.5?t:1-t)*r,a=2*t-i;return new Su(j3(e>=240?e-240:e+120,a,i),j3(e,a,i),j3(e<120?e+240:e-120,a,i),this.opacity)},clamp(){return new Vh(qC(this.h),r_(this.s),r_(this.l),t_(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=t_(this.opacity);return`${e===1?"hsl(":"hsla("}${qC(this.h)}, ${r_(this.s)*100}%, ${r_(this.l)*100}%${e===1?")":`, ${e})`}`}}))}}),V3,G3,ZC=Ir({"node_modules/d3-color/src/math.js"(){V3=Math.PI/180,G3=180/Math.PI}});function KC(e){if(e instanceof bd)return new bd(e.l,e.a,e.b,e.opacity);if(e instanceof tp)return JC(e);e instanceof Su||(e=O3(e));var r=X3(e.r),t=X3(e.g),i=X3(e.b),a=$3((.2225045*r+.7168786*t+.0606169*i)/J3),o,s;return r===t&&t===i?o=s=a:(o=$3((.4360747*r+.3850649*t+.1430804*i)/K3),s=$3((.0139322*r+.0971045*t+.7141733*i)/Q3)),new bd(116*a-16,500*(o-a),200*(a-s),e.opacity)}function H3(e,r,t,i){return arguments.length===1?KC(e):new bd(e,r,t,i??1)}function bd(e,r,t,i){this.l=+e,this.a=+r,this.b=+t,this.opacity=+i}function $3(e){return e>QC?Math.pow(e,.3333333333333333):e/t4+e4}function W3(e){return e>T0?e*e*e:t4*(e-e4)}function Y3(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,.4166666666666667)-.055)}function X3(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function Z$(e){if(e instanceof tp)return new tp(e.h,e.c,e.l,e.opacity);if(e instanceof bd||(e=KC(e)),e.a===0&&e.b===0)return new tp(NaN,0<e.l&&e.l<100?0:NaN,e.l,e.opacity);var r=Math.atan2(e.b,e.a)*G3;return new tp(r<0?r+360:r,Math.sqrt(e.a*e.a+e.b*e.b),e.l,e.opacity)}function Z3(e,r,t,i){return arguments.length===1?Z$(e):new tp(e,r,t,i??1)}function tp(e,r,t,i){this.h=+e,this.c=+r,this.l=+t,this.opacity=+i}function JC(e){if(isNaN(e.h))return new bd(e.l,0,0,e.opacity);var r=e.h*V3;return new bd(e.l,Math.cos(r)*e.c,Math.sin(r)*e.c,e.opacity)}var D1,K3,J3,Q3,e4,T0,t4,QC,K$=Ir({"node_modules/d3-color/src/lab.js"(){B3(),q3(),ZC(),D1=18,K3=.96422,J3=1,Q3=.82521,e4=4/29,T0=6/29,t4=3*T0*T0,QC=T0*T0*T0,Rv(bd,H3,k1(Ep,{brighter(e){return new bd(this.l+D1*(e??1),this.a,this.b,this.opacity)},darker(e){return new bd(this.l-D1*(e??1),this.a,this.b,this.opacity)},rgb(){var e=(this.l+16)/116,r=isNaN(this.a)?e:e+this.a/500,t=isNaN(this.b)?e:e-this.b/200;return r=K3*W3(r),e=J3*W3(e),t=Q3*W3(t),new Su(Y3(3.1338561*r-1.6168667*e-.4906146*t),Y3(-.9787684*r+1.9161415*e+.033454*t),Y3(.0719453*r-.2289914*e+1.4052427*t),this.opacity)}})),Rv(tp,Z3,k1(Ep,{brighter(e){return new tp(this.h,this.c,this.l+D1*(e??1),this.opacity)},darker(e){return new tp(this.h,this.c,this.l-D1*(e??1),this.opacity)},rgb(){return JC(this).rgb()}}))}});function J$(e){if(e instanceof A0)return new A0(e.h,e.s,e.l,e.opacity);e instanceof Su||(e=O3(e));var r=e.r/255,t=e.g/255,i=e.b/255,a=(o4*i+a4*r-n4*t)/(o4+a4-n4),o=i-a,s=(Bv*(t-a)-a_*o)/L1,l=Math.sqrt(s*s+o*o)/(Bv*a*(1-a)),n=l?Math.atan2(s,o)*G3-120:NaN;return new A0(n<0?n+360:n,l,a,e.opacity)}function r4(e,r,t,i){return arguments.length===1?J$(e):new A0(e,r,t,i??1)}function A0(e,r,t,i){this.h=+e,this.s=+r,this.l=+t,this.opacity=+i}var i4,i_,a_,L1,Bv,a4,n4,o4,Q$=Ir({"node_modules/d3-color/src/cubehelix.js"(){B3(),q3(),ZC(),i4=-.14861,i_=1.78277,a_=-.29227,L1=-.90649,Bv=1.97294,a4=Bv*L1,n4=Bv*i_,o4=i_*a_-L1*i4,Rv(A0,r4,k1(Ep,{brighter(e){return e=e==null?b0:Math.pow(b0,e),new A0(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?kp:Math.pow(kp,e),new A0(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=isNaN(this.h)?0:(this.h+120)*V3,r=+this.l,t=isNaN(this.s)?0:this.s*r*(1-r),i=Math.cos(e),a=Math.sin(e);return new Su(255*(r+t*(i4*i+i_*a)),255*(r+t*(a_*i+L1*a)),255*(r+t*(Bv*i)),this.opacity)}}))}}),Ov=Ir({"node_modules/d3-color/src/index.js"(){q3(),K$(),Q$()}});function eD(e,r,t,i,a){var o=e*e,s=o*e;return((1-3*e+3*o-s)*r+(4-6*o+3*s)*t+(1+3*e+3*o-3*s)*i+s*a)/6}function tD(e){var r=e.length-1;return function(t){var i=t<=0?t=0:t>=1?(t=1,r-1):Math.floor(t*r),a=e[i],o=e[i+1],s=i>0?e[i-1]:2*a-o,l=i<r-1?e[i+2]:2*o-a;return eD((t-i/r)*r,s,a,o,l)}}var s4=Ir({"node_modules/d3-interpolate/src/basis.js"(){}});function rD(e){var r=e.length;return function(t){var i=Math.floor(((t%=1)<0?++t:t)*r),a=e[(i+r-1)%r],o=e[i%r],s=e[(i+1)%r],l=e[(i+2)%r];return eD((t-i/r)*r,a,o,s,l)}}var iD=Ir({"node_modules/d3-interpolate/src/basisClosed.js"(){s4()}}),F1,aD=Ir({"node_modules/d3-interpolate/src/constant.js"(){F1=e=>()=>e}});function nD(e,r){return function(t){return e+t*r}}function eW(e,r,t){return e=Math.pow(e,t),r=Math.pow(r,t)-e,t=1/t,function(i){return Math.pow(e+i*r,t)}}function n_(e,r){var t=r-e;return t?nD(e,t>180||t<-180?t-360*Math.round(t/360):t):F1(isNaN(e)?r:e)}function tW(e){return(e=+e)==1?Eu:function(r,t){return t-r?eW(r,t,e):F1(isNaN(r)?t:r)}}function Eu(e,r){var t=r-e;return t?nD(e,t):F1(isNaN(e)?r:e)}var Nv=Ir({"node_modules/d3-interpolate/src/color.js"(){aD()}});function oD(e){return function(r){var t=r.length,i=new Array(t),a=new Array(t),o=new Array(t),s,l;for(s=0;s<t;++s)l=e_(r[s]),i[s]=l.r||0,a[s]=l.g||0,o[s]=l.b||0;return i=e(i),a=e(a),o=e(o),l.opacity=1,function(n){return l.r=i(n),l.g=a(n),l.b=o(n),l+""}}}var o_,sD,lD,uD=Ir({"node_modules/d3-interpolate/src/rgb.js"(){Ov(),s4(),iD(),Nv(),o_=(function e(r){var t=tW(r);function i(a,o){var s=t((a=e_(a)).r,(o=e_(o)).r),l=t(a.g,o.g),n=t(a.b,o.b),u=Eu(a.opacity,o.opacity);return function(c){return a.r=s(c),a.g=l(c),a.b=n(c),a.opacity=u(c),a+""}}return i.gamma=e,i})(1),sD=oD(tD),lD=oD(rD)}});function l4(e,r){r||(r=[]);var t=e?Math.min(r.length,e.length):0,i=r.slice(),a;return function(o){for(a=0;a<t;++a)i[a]=e[a]*(1-o)+r[a]*o;return i}}function cD(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}var u4=Ir({"node_modules/d3-interpolate/src/numberArray.js"(){}});function rW(e,r){return(cD(r)?l4:fD)(e,r)}function fD(e,r){var t=r?r.length:0,i=e?Math.min(t,e.length):0,a=new Array(i),o=new Array(t),s;for(s=0;s<i;++s)a[s]=c_(e[s],r[s]);for(;s<t;++s)o[s]=r[s];return function(l){for(s=0;s<i;++s)o[s]=a[s](l);return o}}var hD=Ir({"node_modules/d3-interpolate/src/array.js"(){f_(),u4()}});function dD(e,r){var t=new Date;return e=+e,r=+r,function(i){return t.setTime(e*(1-i)+r*i),t}}var pD=Ir({"node_modules/d3-interpolate/src/date.js"(){}});function wd(e,r){return e=+e,r=+r,function(t){return e*(1-t)+r*t}}var s_=Ir({"node_modules/d3-interpolate/src/number.js"(){}});function vD(e,r){var t={},i={},a;(e===null||typeof e!="object")&&(e={}),(r===null||typeof r!="object")&&(r={});for(a in r)a in e?t[a]=c_(e[a],r[a]):i[a]=r[a];return function(o){for(a in t)i[a]=t[a](o);return i}}var mD=Ir({"node_modules/d3-interpolate/src/object.js"(){f_()}});function iW(e){return function(){return e}}function aW(e){return function(r){return e(r)+""}}function gD(e,r){var t=l_.lastIndex=u_.lastIndex=0,i,a,o,s=-1,l=[],n=[];for(e=e+"",r=r+"";(i=l_.exec(e))&&(a=u_.exec(r));)(o=a.index)>t&&(o=r.slice(t,o),l[s]?l[s]+=o:l[++s]=o),(i=i[0])===(a=a[0])?l[s]?l[s]+=a:l[++s]=a:(l[++s]=null,n.push({i:s,x:wd(i,a)})),t=u_.lastIndex;return t<r.length&&(o=r.slice(t),l[s]?l[s]+=o:l[++s]=o),l.length<2?n[0]?aW(n[0].x):iW(r):(r=n.length,function(u){for(var c=0,f;c<r;++c)l[(f=n[c]).i]=f.x(u);return l.join("")})}var l_,u_,yD=Ir({"node_modules/d3-interpolate/src/string.js"(){s_(),l_=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,u_=new RegExp(l_.source,"g")}});function c_(e,r){var t=typeof r,i;return r==null||t==="boolean"?F1(r):(t==="number"?wd:t==="string"?(i=C1(r))?(r=i,o_):gD:r instanceof C1?o_:r instanceof Date?dD:cD(r)?l4:Array.isArray(r)?fD:typeof r.valueOf!="function"&&typeof r.toString!="function"||isNaN(r)?vD:wd)(e,r)}var f_=Ir({"node_modules/d3-interpolate/src/value.js"(){Ov(),uD(),hD(),pD(),s_(),mD(),yD(),aD(),u4()}});function nW(e){var r=e.length;return function(t){return e[Math.max(0,Math.min(r-1,Math.floor(t*r)))]}}var oW=Ir({"node_modules/d3-interpolate/src/discrete.js"(){}});function sW(e,r){var t=n_(+e,+r);return function(i){var a=t(i);return a-360*Math.floor(a/360)}}var lW=Ir({"node_modules/d3-interpolate/src/hue.js"(){Nv()}});function uW(e,r){return e=+e,r=+r,function(t){return Math.round(e*(1-t)+r*t)}}var cW=Ir({"node_modules/d3-interpolate/src/round.js"(){}});function _D(e,r,t,i,a,o){var s,l,n;return(s=Math.sqrt(e*e+r*r))&&(e/=s,r/=s),(n=e*t+r*i)&&(t-=e*n,i-=r*n),(l=Math.sqrt(t*t+i*i))&&(t/=l,i/=l,n/=l),e*i<r*t&&(e=-e,r=-r,n=-n,s=-s),{translateX:a,translateY:o,rotate:Math.atan2(r,e)*c4,skewX:Math.atan(n)*c4,scaleX:s,scaleY:l}}var c4,h_,fW=Ir({"node_modules/d3-interpolate/src/transform/decompose.js"(){c4=180/Math.PI,h_={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1}}});function hW(e){let r=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return r.isIdentity?h_:_D(r.a,r.b,r.c,r.d,r.e,r.f)}function dW(e){return e==null||(d_||(d_=document.createElementNS("http://www.w3.org/2000/svg","g")),d_.setAttribute("transform",e),!(e=d_.transform.baseVal.consolidate()))?h_:(e=e.matrix,_D(e.a,e.b,e.c,e.d,e.e,e.f))}var d_,pW=Ir({"node_modules/d3-interpolate/src/transform/parse.js"(){fW()}});function xD(e,r,t,i){function a(u){return u.length?u.pop()+" ":""}function o(u,c,f,h,d,p){if(u!==f||c!==h){var g=d.push("translate(",null,r,null,t);p.push({i:g-4,x:wd(u,f)},{i:g-2,x:wd(c,h)})}else(f||h)&&d.push("translate("+f+r+h+t)}function s(u,c,f,h){u!==c?(u-c>180?c+=360:c-u>180&&(u+=360),h.push({i:f.push(a(f)+"rotate(",null,i)-2,x:wd(u,c)})):c&&f.push(a(f)+"rotate("+c+i)}function l(u,c,f,h){u!==c?h.push({i:f.push(a(f)+"skewX(",null,i)-2,x:wd(u,c)}):c&&f.push(a(f)+"skewX("+c+i)}function n(u,c,f,h,d,p){if(u!==f||c!==h){var g=d.push(a(d)+"scale(",null,",",null,")");p.push({i:g-4,x:wd(u,f)},{i:g-2,x:wd(c,h)})}else(f!==1||h!==1)&&d.push(a(d)+"scale("+f+","+h+")")}return function(u,c){var f=[],h=[];return u=e(u),c=e(c),o(u.translateX,u.translateY,c.translateX,c.translateY,f,h),s(u.rotate,c.rotate,f,h),l(u.skewX,c.skewX,f,h),n(u.scaleX,u.scaleY,c.scaleX,c.scaleY,f,h),u=c=null,function(d){for(var p=-1,g=h.length,m;++p<g;)f[(m=h[p]).i]=m.x(d);return f.join("")}}}var bD,wD,vW=Ir({"node_modules/d3-interpolate/src/transform/index.js"(){s_(),pW(),bD=xD(hW,"px, ","px)","deg)"),wD=xD(dW,", ",")",")")}});function TD(e){return((e=Math.exp(e))+1/e)/2}function mW(e){return((e=Math.exp(e))-1/e)/2}function gW(e){return((e=Math.exp(2*e))-1)/(e+1)}var AD,MD,yW=Ir({"node_modules/d3-interpolate/src/zoom.js"(){AD=1e-12,MD=(function e(r,t,i){function a(o,s){var l=o[0],n=o[1],u=o[2],c=s[0],f=s[1],h=s[2],d=c-l,p=f-n,g=d*d+p*p,m,y;if(g<AD)y=Math.log(h/u)/r,m=function(C){return[l+C*d,n+C*p,u*Math.exp(r*C*y)]};else{var _=Math.sqrt(g),v=(h*h-u*u+i*g)/(2*u*t*_),x=(h*h-u*u-i*g)/(2*h*t*_),S=Math.log(Math.sqrt(v*v+1)-v),M=Math.log(Math.sqrt(x*x+1)-x);y=(M-S)/r,m=function(C){var w=C*y,k=TD(S),A=u/(t*_)*(k*gW(r*w+S)-mW(S));return[l+A*d,n+A*p,u*k/TD(r*w+S)]}}return m.duration=y*1e3*r/Math.SQRT2,m}return a.rho=function(o){var s=Math.max(.001,+o),l=s*s,n=l*l;return e(s,l,n)},a})(Math.SQRT2,2,4)}});function SD(e){return function(r,t){var i=e((r=N3(r)).h,(t=N3(t)).h),a=Eu(r.s,t.s),o=Eu(r.l,t.l),s=Eu(r.opacity,t.opacity);return function(l){return r.h=i(l),r.s=a(l),r.l=o(l),r.opacity=s(l),r+""}}}var ED,kD,_W=Ir({"node_modules/d3-interpolate/src/hsl.js"(){Ov(),Nv(),ED=SD(n_),kD=SD(Eu)}});function xW(e,r){var t=Eu((e=H3(e)).l,(r=H3(r)).l),i=Eu(e.a,r.a),a=Eu(e.b,r.b),o=Eu(e.opacity,r.opacity);return function(s){return e.l=t(s),e.a=i(s),e.b=a(s),e.opacity=o(s),e+""}}var bW=Ir({"node_modules/d3-interpolate/src/lab.js"(){Ov(),Nv()}});function CD(e){return function(r,t){var i=e((r=Z3(r)).h,(t=Z3(t)).h),a=Eu(r.c,t.c),o=Eu(r.l,t.l),s=Eu(r.opacity,t.opacity);return function(l){return r.h=i(l),r.c=a(l),r.l=o(l),r.opacity=s(l),r+""}}}var DD,LD,wW=Ir({"node_modules/d3-interpolate/src/hcl.js"(){Ov(),Nv(),DD=CD(n_),LD=CD(Eu)}});function FD(e){return(function r(t){t=+t;function i(a,o){var s=e((a=r4(a)).h,(o=r4(o)).h),l=Eu(a.s,o.s),n=Eu(a.l,o.l),u=Eu(a.opacity,o.opacity);return function(c){return a.h=s(c),a.s=l(c),a.l=n(Math.pow(c,t)),a.opacity=u(c),a+""}}return i.gamma=r,i})(1)}var PD,ID,TW=Ir({"node_modules/d3-interpolate/src/cubehelix.js"(){Ov(),Nv(),PD=FD(n_),ID=FD(Eu)}});function AW(e,r){r===void 0&&(r=e,e=c_);for(var t=0,i=r.length-1,a=r[0],o=new Array(i<0?0:i);t<i;)o[t]=e(a,a=r[++t]);return function(s){var l=Math.max(0,Math.min(i-1,Math.floor(s*=i)));return o[l](s-l)}}var MW=Ir({"node_modules/d3-interpolate/src/piecewise.js"(){f_()}});function SW(e,r){for(var t=new Array(r),i=0;i<r;++i)t[i]=e(i/(r-1));return t}var EW=Ir({"node_modules/d3-interpolate/src/quantize.js"(){}}),M0={};Mr(M0,{interpolate:()=>c_,interpolateArray:()=>rW,interpolateBasis:()=>tD,interpolateBasisClosed:()=>rD,interpolateCubehelix:()=>PD,interpolateCubehelixLong:()=>ID,interpolateDate:()=>dD,interpolateDiscrete:()=>nW,interpolateHcl:()=>DD,interpolateHclLong:()=>LD,interpolateHsl:()=>ED,interpolateHslLong:()=>kD,interpolateHue:()=>sW,interpolateLab:()=>xW,interpolateNumber:()=>wd,interpolateNumberArray:()=>l4,interpolateObject:()=>vD,interpolateRgb:()=>o_,interpolateRgbBasis:()=>sD,interpolateRgbBasisClosed:()=>lD,interpolateRound:()=>uW,interpolateString:()=>gD,interpolateTransformCss:()=>bD,interpolateTransformSvg:()=>wD,interpolateZoom:()=>MD,piecewise:()=>AW,quantize:()=>SW});var jv=Ir({"node_modules/d3-interpolate/src/index.js"(){f_(),hD(),s4(),iD(),pD(),oW(),lW(),s_(),u4(),mD(),cW(),yD(),vW(),yW(),uD(),_W(),bW(),wW(),TW(),MW(),EW()}}),f4=de({"src/traces/sunburst/fill_one.js"(e,r){"use strict";var t=hn(),i=ta();r.exports=function(o,s,l,n,u){var c=s.data.data,f=c.i,h=u||c.color;if(f>=0){s.i=c.i;var d=l.marker;d.pattern?(!d.colors||!d.pattern.shape)&&(d.color=h,s.color=h):(d.color=h,s.color=h),t.pointStyle(o,l,n,s)}else i.fill(o,h)}}}),RD=de({"src/traces/sunburst/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=Qt(),o=dc().resizeText,s=f4();function l(u){var c=u._fullLayout._sunburstlayer.selectAll(".trace");o(u,c,"sunburst"),c.each(function(f){var h=t.select(this),d=f[0],p=d.trace;h.style("opacity",p.opacity),h.selectAll("path.surface").each(function(g){t.select(this).call(n,g,p,u)})})}function n(u,c,f,h){var d=c.data.data,p=!c.children,g=d.i,m=a.castOption(f,g,"marker.line.color")||i.defaultLine,y=a.castOption(f,g,"marker.line.width")||0;u.call(s,c,f,h).style("stroke-width",y).call(i.stroke,m).style("opacity",p?f.leaf.opacity:null)}r.exports={style:l,styleOne:n}}}),Cp=de({"src/traces/sunburst/helpers.js"(e){"use strict";var r=Qt(),t=ta(),i=md(),a=p0();e.findEntryWithLevel=function(n,u){var c;return u&&n.eachAfter(function(f){if(e.getPtId(f)===u)return c=f.copy()}),c||n},e.findEntryWithChild=function(n,u){var c;return n.eachAfter(function(f){for(var h=f.children||[],d=0;d<h.length;d++){var p=h[d];if(e.getPtId(p)===u)return c=f.copy()}}),c||n},e.isEntry=function(n){return!n.parent},e.isLeaf=function(n){return!n.children},e.getPtId=function(n){return n.data.data.id},e.getPtLabel=function(n){return n.data.data.label},e.getValue=function(n){return n.value},e.isHierarchyRoot=function(n){return l(n)===""},e.setSliceCursor=function(n,u,c){var f=c.isTransitioning;if(!f){var h=n.datum();f=c.hideOnRoot&&e.isHierarchyRoot(h)||c.hideOnLeaves&&e.isLeaf(h)}i(n,f?null:"pointer")};function o(n,u,c){return{color:e.getOutsideTextFontKey("color",n,u,c),family:e.getOutsideTextFontKey("family",n,u,c),size:e.getOutsideTextFontKey("size",n,u,c),weight:e.getOutsideTextFontKey("weight",n,u,c),style:e.getOutsideTextFontKey("style",n,u,c),variant:e.getOutsideTextFontKey("variant",n,u,c),textcase:e.getOutsideTextFontKey("textcase",n,u,c),lineposition:e.getOutsideTextFontKey("lineposition",n,u,c),shadow:e.getOutsideTextFontKey("shadow",n,u,c)}}function s(n,u,c,f){var h=(f||{}).onPathbar,d=u.data.data,p=d.i,g=r.castOption(n,p,(h?"pathbar.textfont":"insidetextfont")+".color");return!g&&n._input.textfont&&(g=r.castOption(n._input,p,"textfont.color")),{color:g||t.contrast(d.color),family:e.getInsideTextFontKey("family",n,u,c,f),size:e.getInsideTextFontKey("size",n,u,c,f),weight:e.getInsideTextFontKey("weight",n,u,c,f),style:e.getInsideTextFontKey("style",n,u,c,f),variant:e.getInsideTextFontKey("variant",n,u,c,f),textcase:e.getInsideTextFontKey("textcase",n,u,c,f),lineposition:e.getInsideTextFontKey("lineposition",n,u,c,f),shadow:e.getInsideTextFontKey("shadow",n,u,c,f)}}e.getInsideTextFontKey=function(n,u,c,f,h){var d=(h||{}).onPathbar,p=d?"pathbar.textfont":"insidetextfont",g=c.data.data.i;return r.castOption(u,g,p+"."+n)||r.castOption(u,g,"textfont."+n)||f.size},e.getOutsideTextFontKey=function(n,u,c,f){var h=c.data.data.i;return r.castOption(u,h,"outsidetextfont."+n)||r.castOption(u,h,"textfont."+n)||f.size},e.isOutsideText=function(n,u){return!n._hasColorscale&&e.isHierarchyRoot(u)},e.determineTextFont=function(n,u,c,f){return e.isOutsideText(n,u)?o(n,u,c):s(n,u,c,f)},e.hasTransition=function(n){return!!(n&&n.duration>0)},e.getMaxDepth=function(n){return n.maxdepth>=0?n.maxdepth:1/0},e.isHeader=function(n,u){return!(e.isLeaf(n)||n.depth===u._maxDepth-1)};function l(n){return n.data.data.pid}e.getParent=function(n,u){return e.findEntryWithLevel(n,l(u))},e.listPath=function(n,u){var c=n.parent;if(!c)return[];var f=u?[c.data[u]]:[c];return e.listPath(c,u).concat(f)},e.getPath=function(n){return e.listPath(n,"label").join("/")+"/"},e.formatValue=a.formatPieValue,e.formatPercent=function(n,u){var c=r.formatPercent(n,0);return c==="0%"&&(c=a.formatPiePercent(n,u)),c}}}),p_=de({"src/traces/sunburst/fx.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=sf().appendArrayPointValue,o=$s(),s=Qt(),l=u1(),n=Cp(),u=p0(),c=u.formatPieValue;r.exports=function(d,p,g,m,y){var _=m[0],v=_.trace,x=_.hierarchy,S=v.type==="sunburst",M=v.type==="treemap"||v.type==="icicle";"_hasHoverLabel"in v||(v._hasHoverLabel=!1),"_hasHoverEvent"in v||(v._hasHoverEvent=!1);var C=function(A){var b=g._fullLayout;if(!(g._dragging||b.hovermode===!1)){var E=g._fullData[v.index],T=A.data.data,F=T.i,D=n.isHierarchyRoot(A),R=n.getParent(x,A),P=n.getValue(A),z=function(Y){return s.castOption(E,F,Y)},I=z("hovertemplate"),L=o.castHoverinfo(E,b,F),B=b.separators,O;if(I||L&&L!=="none"&&L!=="skip"){var G,W;S&&(G=_.cx+A.pxmid[0]*(1-A.rInscribed),W=_.cy+A.pxmid[1]*(1-A.rInscribed)),M&&(G=A._hoverX,W=A._hoverY);var X={},Z=[],J=[],N=function(Y){return Z.indexOf(Y)!==-1};L&&(Z=L==="all"?E._module.attributes.hoverinfo.flags:L.split("+")),X.label=T.label,N("label")&&X.label&&J.push(X.label),T.hasOwnProperty("v")&&(X.value=T.v,X.valueLabel=c(X.value,B),N("value")&&J.push(X.valueLabel)),X.currentPath=A.currentPath=n.getPath(A.data),N("current path")&&!D&&J.push(X.currentPath);var H,$=[],U=function(){$.indexOf(H)===-1&&(J.push(H),$.push(H))};X.percentParent=A.percentParent=P/n.getValue(R),X.parent=A.parentString=n.getPtLabel(R),N("percent parent")&&(H=n.formatPercent(X.percentParent,B)+" of "+X.parent,U()),X.percentEntry=A.percentEntry=P/n.getValue(p),X.entry=A.entry=n.getPtLabel(p),N("percent entry")&&!D&&!A.onPathbar&&(H=n.formatPercent(X.percentEntry,B)+" of "+X.entry,U()),X.percentRoot=A.percentRoot=P/n.getValue(x),X.root=A.root=n.getPtLabel(x),N("percent root")&&!D&&(H=n.formatPercent(X.percentRoot,B)+" of "+X.root,U()),X.text=z("hovertext")||z("text"),N("text")&&(H=X.text,s.isValidTextValue(H)&&J.push(H)),O=[f(A,E,y.eventDataKeys)];var V={trace:E,y:W,_x0:A._x0,_x1:A._x1,_y0:A._y0,_y1:A._y1,text:J.join("<br>"),name:I||N("name")?E.name:void 0,color:z("hoverlabel.bgcolor")||T.color,borderColor:z("hoverlabel.bordercolor"),fontFamily:z("hoverlabel.font.family"),fontSize:z("hoverlabel.font.size"),fontColor:z("hoverlabel.font.color"),fontWeight:z("hoverlabel.font.weight"),fontStyle:z("hoverlabel.font.style"),fontVariant:z("hoverlabel.font.variant"),nameLength:z("hoverlabel.namelength"),textAlign:z("hoverlabel.align"),hovertemplate:I,hovertemplateLabels:X,eventData:O};S&&(V.x0=G-A.rInscribed*A.rpx1,V.x1=G+A.rInscribed*A.rpx1,V.idealAlign=A.pxmid[0]<0?"left":"right"),M&&(V.x=G,V.idealAlign=G<0?"left":"right");var j=[];o.loneHover(V,{container:b._hoverlayer.node(),outerContainer:b._paper.node(),gd:g,inOut_bbox:j}),O[0].bbox=j[0],v._hasHoverLabel=!0}if(M){var q=d.select("path.surface");y.styleOne(q,A,E,g,{hovered:!0})}v._hasHoverEvent=!0,g.emit("plotly_hover",{points:O||[f(A,E,y.eventDataKeys)],event:t.event})}},w=function(A){var b=g._fullLayout,E=g._fullData[v.index],T=t.select(this).datum();if(v._hasHoverEvent&&(A.originalEvent=t.event,g.emit("plotly_unhover",{points:[f(T,E,y.eventDataKeys)],event:t.event}),v._hasHoverEvent=!1),v._hasHoverLabel&&(o.loneUnhover(b._hoverlayer.node()),v._hasHoverLabel=!1),M){var F=d.select("path.surface");y.styleOne(F,T,E,g,{hovered:!1})}},k=function(A){var b=g._fullLayout,E=g._fullData[v.index],T=S&&(n.isHierarchyRoot(A)||n.isLeaf(A)),F=n.getPtId(A),D=n.isEntry(A)?n.findEntryWithChild(x,F):n.findEntryWithLevel(x,F),R=n.getPtId(D),P={points:[f(A,E,y.eventDataKeys)],event:t.event};T||(P.nextLevel=R);var z=l.triggerHandler(g,"plotly_"+v.type+"click",P);if(z!==!1&&b.hovermode&&(g._hoverdata=[f(A,E,y.eventDataKeys)],o.click(g,t.event)),!T&&z!==!1&&!g._dragging&&!g._transitioning){i.call("_storeDirectGUIEdit",E,b._tracePreGUI[E.uid],{level:E.level});var I={data:[{level:R}],traces:[v.index]},L={frame:{redraw:!1,duration:y.transitionTime},transition:{duration:y.transitionTime,easing:y.transitionEasing},mode:"immediate",fromcurrent:!0};o.loneUnhover(b._hoverlayer.node()),i.call("animate",g,I,L)}};d.on("mouseover",C),d.on("mouseout",w),d.on("click",k)};function f(h,d,p){for(var g=h.data.data,m={curveNumber:d.index,pointNumber:g.i,data:d._input,fullData:d},y=0;y<p.length;y++){var _=p[y];_ in h&&(m[_]=h[_])}return"parentString"in h&&!n.isHierarchyRoot(h)&&(m.parent=h.parentString),a(m,d,g.i),m}}}),h4=de({"src/traces/sunburst/plot.js"(e){"use strict";var r=Yr(),t=Ky(),i=(jv(),ti(M0)).interpolate,a=hn(),o=Qt(),s=Zo(),l=dc(),n=l.recordMinTextSize,u=l.clearMinTextSize,c=z3(),f=p0().getRotationAngle,h=c.computeTransform,d=c.transformInsideText,p=RD().styleOne,g=qh().resizeText,m=p_(),y=PC(),_=Cp();e.plot=function(w,k,A,b){var E=w._fullLayout,T=E._sunburstlayer,F,D,R=!A,P=!E.uniformtext.mode&&_.hasTransition(A);if(u("sunburst",E),F=T.selectAll("g.trace.sunburst").data(k,function(I){return I[0].trace.uid}),F.enter().append("g").classed("trace",!0).classed("sunburst",!0).attr("stroke-linejoin","round"),F.order(),P){b&&(D=b());var z=r.transition().duration(A.duration).ease(A.easing).each("end",function(){D&&D()}).each("interrupt",function(){D&&D()});z.each(function(){T.selectAll("g.trace").each(function(I){v(w,I,this,A)})})}else F.each(function(I){v(w,I,this,A)}),E.uniformtext.mode&&g(w,E._sunburstlayer.selectAll(".trace"),"sunburst");R&&F.exit().remove()};function v(w,k,A,b){var E=w._context.staticPlot,T=w._fullLayout,F=!T.uniformtext.mode&&_.hasTransition(b),D=r.select(A),R=D.selectAll("g.slice"),P=k[0],z=P.trace,I=P.hierarchy,L=_.findEntryWithLevel(I,z.level),B=_.getMaxDepth(z),O=T._size,G=z.domain,W=O.w*(G.x[1]-G.x[0]),X=O.h*(G.y[1]-G.y[0]),Z=.5*Math.min(W,X),J=P.cx=O.l+O.w*(G.x[1]+G.x[0])/2,N=P.cy=O.t+O.h*(1-G.y[0])-X/2;if(!L)return R.remove();var H=null,$={};F&&R.each(function(Q){$[_.getPtId(Q)]={rpx0:Q.rpx0,rpx1:Q.rpx1,x0:Q.x0,x1:Q.x1,transform:Q.transform},!H&&_.isEntry(Q)&&(H=Q)});var U=x(L).descendants(),V=L.height+1,j=0,q=B;P.hasMultipleRoots&&_.isHierarchyRoot(L)&&(U=U.slice(1),V-=1,j=1,q+=1),U=U.filter(function(Q){return Q.y1<=q});var Y=f(z.rotation);Y&&U.forEach(function(Q){Q.x0+=Y,Q.x1+=Y});var K=Math.min(V,B),te=function(Q){return(Q-j)/K*Z},ne=function(Q,ue){return[Q*Math.cos(ue),-Q*Math.sin(ue)]},se=function(Q){return o.pathAnnulus(Q.rpx0,Q.rpx1,Q.x0,Q.x1,J,N)},le=function(Q){return J+M(Q)[0]*(Q.transform.rCenter||0)+(Q.transform.x||0)},ce=function(Q){return N+M(Q)[1]*(Q.transform.rCenter||0)+(Q.transform.y||0)};R=R.data(U,_.getPtId),R.enter().append("g").classed("slice",!0),F?R.exit().transition().each(function(){var Q=r.select(this),ue=Q.select("path.surface");ue.transition().attrTween("d",function(Me){var Te=fe(Me);return function(je){return se(Te(je))}});var ge=Q.select("g.slicetext");ge.attr("opacity",0)}).remove():R.exit().remove(),R.order();var pe=null;if(F&&H){var xe=_.getPtId(H);R.each(function(Q){pe===null&&_.getPtId(Q)===xe&&(pe=Q.x1)})}var ye=R;F&&(ye=ye.transition().each("end",function(){var Q=r.select(this);_.setSliceCursor(Q,w,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})})),ye.each(function(Q){var ue=r.select(this),ge=o.ensureSingle(ue,"path","surface",function(Ke){Ke.style("pointer-events",E?"none":"all")});Q.rpx0=te(Q.y0),Q.rpx1=te(Q.y1),Q.xmid=(Q.x0+Q.x1)/2,Q.pxmid=ne(Q.rpx1,Q.xmid),Q.midangle=-(Q.xmid-Math.PI/2),Q.startangle=-(Q.x0-Math.PI/2),Q.stopangle=-(Q.x1-Math.PI/2),Q.halfangle=.5*Math.min(o.angleDelta(Q.x0,Q.x1)||Math.PI,Math.PI),Q.ring=1-Q.rpx0/Q.rpx1,Q.rInscribed=S(Q,z),F?ge.transition().attrTween("d",function(Ke){var vt=ae(Ke);return function(xt){return se(vt(xt))}}):ge.attr("d",se),ue.call(m,L,w,k,{eventDataKeys:y.eventDataKeys,transitionTime:y.CLICK_TRANSITION_TIME,transitionEasing:y.CLICK_TRANSITION_EASING}).call(_.setSliceCursor,w,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:w._transitioning}),ge.call(p,Q,z,w);var Me=o.ensureSingle(ue,"g","slicetext"),Te=o.ensureSingle(Me,"text","",function(Ke){Ke.attr("data-notex",1)}),je=o.ensureUniformFontSize(w,_.determineTextFont(z,Q,T.font));Te.text(e.formatSliceLabel(Q,L,z,k,T)).classed("slicetext",!0).attr("text-anchor","middle").call(a.font,je).call(s.convertToTspans,w);var Ve=a.bBox(Te.node());Q.transform=d(Ve,Q,P),Q.transform.targetX=le(Q),Q.transform.targetY=ce(Q);var Ze=function(Ke,vt){var xt=Ke.transform;return h(xt,vt),xt.fontSize=je.size,n(z.type,xt,T),o.getTextTransform(xt)};F?Te.transition().attrTween("transform",function(Ke){var vt=ee(Ke);return function(xt){return Ze(vt(xt),Ve)}}):Te.attr("transform",Ze(Q,Ve))});function fe(Q){var ue=_.getPtId(Q),ge=$[ue],Me=$[_.getPtId(L)],Te;if(Me){var je=(Q.x1>Me.x1?2*Math.PI:0)+Y;Te=Q.rpx1<Me.rpx1?{x0:Q.x0,x1:Q.x1,rpx0:0,rpx1:0}:{x0:je,x1:je,rpx0:Q.rpx0,rpx1:Q.rpx1}}else{var Ve,Ze=_.getPtId(Q.parent);R.each(function(mt){if(_.getPtId(mt)===Ze)return Ve=mt});var Ke=Ve.children,vt;Ke.forEach(function(mt,Mt){if(_.getPtId(mt)===ue)return vt=Mt});var xt=Ke.length,Pt=i(Ve.x0,Ve.x1);Te={rpx0:Z,rpx1:Z,x0:Pt(vt/xt),x1:Pt((vt+1)/xt)}}return i(ge,Te)}function ae(Q){var ue=$[_.getPtId(Q)],ge,Me={x0:Q.x0,x1:Q.x1,rpx0:Q.rpx0,rpx1:Q.rpx1};if(ue)ge=ue;else if(H)if(Q.parent)if(pe){var Te=(Q.x1>pe?2*Math.PI:0)+Y;ge={x0:Te,x1:Te}}else ge={rpx0:Z,rpx1:Z},o.extendFlat(ge,ie(Q));else ge={rpx0:0,rpx1:0};else ge={x0:Y,x1:Y};return i(ge,Me)}function ee(Q){var ue=$[_.getPtId(Q)],ge,Me=Q.transform;if(ue)ge=ue;else if(ge={rpx1:Q.rpx1,transform:{textPosAngle:Me.textPosAngle,scale:0,rotate:Me.rotate,rCenter:Me.rCenter,x:Me.x,y:Me.y}},H)if(Q.parent)if(pe){var Te=Q.x1>pe?2*Math.PI:0;ge.x0=ge.x1=Te}else o.extendFlat(ge,ie(Q));else ge.x0=ge.x1=Y;else ge.x0=ge.x1=Y;var je=i(ge.transform.textPosAngle,Q.transform.textPosAngle),Ve=i(ge.rpx1,Q.rpx1),Ze=i(ge.x0,Q.x0),Ke=i(ge.x1,Q.x1),vt=i(ge.transform.scale,Me.scale),xt=i(ge.transform.rotate,Me.rotate),Pt=Me.rCenter===0?3:ge.transform.rCenter===0?1/3:1,mt=i(ge.transform.rCenter,Me.rCenter),Mt=function(lt){return mt(Math.pow(lt,Pt))};return function(lt){var qe=Ve(lt),Ye=Ze(lt),me=Ke(lt),_e=Mt(lt),Ae=ne(qe,(Ye+me)/2),ke=je(lt),Ee={pxmid:Ae,rpx1:qe,transform:{textPosAngle:ke,rCenter:_e,x:Me.x,y:Me.y}};return n(z.type,Me,T),{transform:{targetX:le(Ee),targetY:ce(Ee),scale:vt(lt),rotate:xt(lt),rCenter:_e}}}}function ie(Q){var ue=Q.parent,ge=$[_.getPtId(ue)],Me={};if(ge){var Te=ue.children,je=Te.indexOf(Q),Ve=Te.length,Ze=i(ge.x0,ge.x1);Me.x0=Ze(je/Ve),Me.x1=Ze(je/Ve)}else Me.x0=Me.x1=0;return Me}}function x(w){return t.partition().size([2*Math.PI,w.height+1])(w)}e.formatSliceLabel=function(w,k,A,b,E){var T=A.texttemplate,F=A.textinfo;if(!T&&(!F||F==="none"))return"";var D=E.separators,R=b[0],P=w.data.data,z=R.hierarchy,I=_.isHierarchyRoot(w),L=_.getParent(z,w),B=_.getValue(w);if(!T){var O=F.split("+"),G=function(j){return O.indexOf(j)!==-1},W=[],X;if(G("label")&&P.label&&W.push(P.label),P.hasOwnProperty("v")&&G("value")&&W.push(_.formatValue(P.v,D)),!I){G("current path")&&W.push(_.getPath(w.data));var Z=0;G("percent parent")&&Z++,G("percent entry")&&Z++,G("percent root")&&Z++;var J=Z>1;if(Z){var N,H=function(j){X=_.formatPercent(N,D),J&&(X+=" of "+j),W.push(X)};G("percent parent")&&!I&&(N=B/_.getValue(L),H("parent")),G("percent entry")&&(N=B/_.getValue(k),H("entry")),G("percent root")&&(N=B/_.getValue(z),H("root"))}}return G("text")&&(X=o.castOption(A,P.i,"text"),o.isValidTextValue(X)&&W.push(X)),W.join("<br>")}var $=o.castOption(A,P.i,"texttemplate");if(!$)return"";var U={};P.label&&(U.label=P.label),P.hasOwnProperty("v")&&(U.value=P.v,U.valueLabel=_.formatValue(P.v,D)),U.currentPath=_.getPath(w.data),I||(U.percentParent=B/_.getValue(L),U.percentParentLabel=_.formatPercent(U.percentParent,D),U.parent=_.getPtLabel(L)),U.percentEntry=B/_.getValue(k),U.percentEntryLabel=_.formatPercent(U.percentEntry,D),U.entry=_.getPtLabel(k),U.percentRoot=B/_.getValue(z),U.percentRootLabel=_.formatPercent(U.percentRoot,D),U.root=_.getPtLabel(z),P.hasOwnProperty("color")&&(U.color=P.color);var V=o.castOption(A,P.i,"text");return(o.isValidTextValue(V)||V==="")&&(U.text=V),U.customdata=o.castOption(A,P.i,"customdata"),o.texttemplateString({data:[U,A._meta],fallback:A.texttemplatefallback,labels:U,locale:E._d3locale,template:$})};function S(w){return w.rpx0===0&&o.isFullCircle([w.x0,w.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(w.halfangle)),w.ring/2))}function M(w){return C(w.rpx1,w.transform.textPosAngle)}function C(w,k){return[w*Math.sin(k),-w*Math.cos(k)]}}}),kW=de({"src/traces/sunburst/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"sunburst",basePlotModule:G$(),categories:[],animatable:!0,attributes:Zy(),layoutAttributes:IC(),supplyDefaults:H$(),supplyLayoutDefaults:$$(),calc:Jy().calc,crossTraceCalc:Jy().crossTraceCalc,plot:h4().plot,style:RD().style,colorbar:Yu(),meta:{}}}}),CW=de({"lib/sunburst.js"(e,r){"use strict";r.exports=kW()}}),DW=de({"src/traces/treemap/base_plot.js"(e){"use strict";var r=Es();e.name="treemap",e.plot=function(t,i,a,o){r.plotBasePlot(e.name,t,i,a,o)},e.clean=function(t,i,a,o){r.cleanBasePlot(e.name,t,i,a,o)}}}),Uv=de({"src/traces/treemap/constants.js"(e,r){"use strict";r.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"poly",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"],gapWithPathbar:1}}}),d4=de({"src/traces/treemap/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=cs(),s=Is().attributes,l=Pv(),n=Zy(),u=Uv(),c=fn().extendFlat,f=fu().pattern;r.exports={labels:n.labels,parents:n.parents,values:n.values,branchvalues:n.branchvalues,count:n.count,level:n.level,maxdepth:n.maxdepth,tiling:{packing:{valType:"enumerated",values:["squarify","binary","dice","slice","slice-dice","dice-slice"],dflt:"squarify",editType:"plot"},squarifyratio:{valType:"number",min:1,dflt:1,editType:"plot"},flip:{valType:"flaglist",flags:["x","y"],dflt:"",editType:"plot"},pad:{valType:"number",min:0,dflt:3,editType:"plot"},editType:"calc"},marker:c({pad:{t:{valType:"number",min:0,editType:"plot"},l:{valType:"number",min:0,editType:"plot"},r:{valType:"number",min:0,editType:"plot"},b:{valType:"number",min:0,editType:"plot"},editType:"calc"},colors:n.marker.colors,pattern:f,depthfade:{valType:"enumerated",values:[!0,!1,"reversed"],editType:"style"},line:n.marker.line,cornerradius:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},o("marker",{colorAttr:"colors",anim:!1})),pathbar:{visible:{valType:"boolean",dflt:!0,editType:"plot"},side:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},edgeshape:{valType:"enumerated",values:[">","<","|","/","\\"],dflt:">",editType:"plot"},thickness:{valType:"number",min:12,editType:"plot"},textfont:c({},l.textfont,{}),editType:"calc"},text:l.text,textinfo:n.textinfo,texttemplate:i({editType:"plot"},{keys:u.eventDataKeys.concat(["label","value"])}),texttemplatefallback:a({editType:"plot"}),hovertext:l.hovertext,hoverinfo:n.hoverinfo,hovertemplate:t({},{keys:u.eventDataKeys}),hovertemplatefallback:a(),textfont:l.textfont,insidetextfont:l.insidetextfont,outsidetextfont:c({},l.outsidetextfont,{}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"top left",editType:"plot"},sort:l.sort,root:n.root,domain:s({name:"treemap",trace:!0,editType:"calc"})}}}),zD=de({"src/traces/treemap/layout_attributes.js"(e,r){"use strict";r.exports={treemapcolorway:{valType:"colorlist",editType:"calc"},extendtreemapcolors:{valType:"boolean",dflt:!0,editType:"calc"}}}}),LW=de({"src/traces/treemap/defaults.js"(e,r){"use strict";var t=Qt(),i=d4(),a=ta(),o=Is().defaults,s=oh().handleText,l=y0().TEXTPAD,n=Iv().handleMarkerDefaults,u=ks(),c=u.hasColorscale,f=u.handleDefaults;r.exports=function(d,p,g,m){function y(E,T){return t.coerce(d,p,i,E,T)}var _=y("labels"),v=y("parents");if(!_||!_.length||!v||!v.length){p.visible=!1;return}var x=y("values");x&&x.length?y("branchvalues"):y("count"),y("level"),y("maxdepth");var S=y("tiling.packing");S==="squarify"&&y("tiling.squarifyratio"),y("tiling.flip"),y("tiling.pad");var M=y("text");y("texttemplate"),y("texttemplatefallback"),p.texttemplate||y("textinfo",t.isArrayOrTypedArray(M)?"text+label":"label"),y("hovertext"),y("hovertemplate"),y("hovertemplatefallback");var C=y("pathbar.visible"),w="auto";s(d,p,m,y,w,{hasPathbar:C,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),y("textposition");var k=p.textposition.indexOf("bottom")!==-1;n(d,p,m,y);var A=p._hasColorscale=c(d,"marker","colors")||(d.marker||{}).coloraxis;A?f(d,p,m,y,{prefix:"marker.",cLetter:"c"}):y("marker.depthfade",!(p.marker.colors||[]).length);var b=p.textfont.size*2;y("marker.pad.t",k?b/4:b),y("marker.pad.l",b/4),y("marker.pad.r",b/4),y("marker.pad.b",k?b:b/4),y("marker.cornerradius"),p._hovered={marker:{line:{width:2,color:a.contrast(m.paper_bgcolor)}}},C&&(y("pathbar.thickness",p.pathbar.textfont.size+2*l),y("pathbar.side"),y("pathbar.edgeshape")),y("sort"),y("root.color"),o(p,m,y),p._length=null}}}),FW=de({"src/traces/treemap/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=zD();r.exports=function(o,s){function l(n,u){return t.coerce(o,s,i,n,u)}l("treemapcolorway",s.colorway),l("extendtreemapcolors")}}}),BD=de({"src/traces/treemap/calc.js"(e){"use strict";var r=Jy();e.calc=function(t,i){return r.calc(t,i)},e.crossTraceCalc=function(t){return r._runCrossTraceCalc("treemap",t)}}}),OD=de({"src/traces/treemap/flip_tree.js"(e,r){"use strict";r.exports=function t(i,a,o){var s;o.swapXY&&(s=i.x0,i.x0=i.y0,i.y0=s,s=i.x1,i.x1=i.y1,i.y1=s),o.flipX&&(s=i.x0,i.x0=a[0]-i.x1,i.x1=a[0]-s),o.flipY&&(s=i.y0,i.y0=a[1]-i.y1,i.y1=a[1]-s);var l=i.children;if(l)for(var n=0;n<l.length;n++)t(l[n],a,o)}}}),ND=de({"src/traces/treemap/partition.js"(e,r){"use strict";var t=Ky(),i=OD();r.exports=function(s,l,n){var u=n.flipX,c=n.flipY,f=n.packing==="dice-slice",h=n.pad[c?"bottom":"top"],d=n.pad[u?"right":"left"],p=n.pad[u?"left":"right"],g=n.pad[c?"top":"bottom"],m;f&&(m=d,d=h,h=m,m=p,p=g,g=m);var y=t.treemap().tile(a(n.packing,n.squarifyratio)).paddingInner(n.pad.inner).paddingLeft(d).paddingRight(p).paddingTop(h).paddingBottom(g).size(f?[l[1],l[0]]:l)(s);return(f||u||c)&&i(y,l,{swapXY:f,flipX:u,flipY:c}),y};function a(o,s){switch(o){case"squarify":return t.treemapSquarify.ratio(s);case"binary":return t.treemapBinary;case"dice":return t.treemapDice;case"slice":return t.treemapSlice;default:return t.treemapSliceDice}}}}),p4=de({"src/traces/treemap/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=Qt(),o=Cp(),s=dc().resizeText,l=f4();function n(c){var f=c._fullLayout._treemaplayer.selectAll(".trace");s(c,f,"treemap"),f.each(function(h){var d=t.select(this),p=h[0],g=p.trace;d.style("opacity",g.opacity),d.selectAll("path.surface").each(function(m){t.select(this).call(u,m,g,c,{hovered:!1})})})}function u(c,f,h,d,p){var g=(p||{}).hovered,m=f.data.data,y=m.i,_,v,x=m.color,S=o.isHierarchyRoot(f),M=1;if(g)_=h._hovered.marker.line.color,v=h._hovered.marker.line.width;else if(S&&x===h.root.color)M=100,_="rgba(0,0,0,0)",v=0;else if(_=a.castOption(h,y,"marker.line.color")||i.defaultLine,v=a.castOption(h,y,"marker.line.width")||0,!h._hasColorscale&&!f.onPathbar){var C=h.marker.depthfade;if(C){var w=i.combine(i.addOpacity(h._backgroundColor,.75),x),k;if(C===!0){var A=o.getMaxDepth(h);isFinite(A)?o.isLeaf(f)?k=0:k=h._maxVisibleLayers-(f.data.depth-h._entryDepth):k=f.data.height+1}else k=f.data.depth-h._entryDepth,h._atRootLevel||k++;if(k>0)for(var b=0;b<k;b++){var E=.5*b/k;x=i.combine(i.addOpacity(w,E),x)}}}c.call(l,f,h,d,x).style("stroke-width",v).call(i.stroke,_).style("opacity",M)}r.exports={style:n,styleOne:u}}}),PW=de({"src/traces/treemap/draw_ancestors.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=Zo(),s=ND(),l=p4().styleOne,n=Uv(),u=Cp(),c=p_(),f=!0;r.exports=function(d,p,g,m,y){var _=y.barDifY,v=y.width,x=y.height,S=y.viewX,M=y.viewY,C=y.pathSlice,w=y.toMoveInsideSlice,k=y.strTransform,A=y.hasTransition,b=y.handleSlicesExit,E=y.makeUpdateSliceInterpolator,T=y.makeUpdateTextInterpolator,F={},D=d._context.staticPlot,R=d._fullLayout,P=p[0],z=P.trace,I=P.hierarchy,L=v/z._entryDepth,B=u.listPath(g.data,"id"),O=s(I.copy(),[v,x],{packing:"dice",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();O=O.filter(function(W){var X=B.indexOf(W.data.id);return X===-1?!1:(W.x0=L*X,W.x1=L*(X+1),W.y0=_,W.y1=_+x,W.onPathbar=!0,!0)}),O.reverse(),m=m.data(O,u.getPtId),m.enter().append("g").classed("pathbar",!0),b(m,f,F,[v,x],C),m.order();var G=m;A&&(G=G.transition().each("end",function(){var W=t.select(this);u.setSliceCursor(W,d,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})})),G.each(function(W){W._x0=S(W.x0),W._x1=S(W.x1),W._y0=M(W.y0),W._y1=M(W.y1),W._hoverX=S(W.x1-Math.min(v,x)/2),W._hoverY=M(W.y1-x/2);var X=t.select(this),Z=i.ensureSingle(X,"path","surface",function($){$.style("pointer-events",D?"none":"all")});A?Z.transition().attrTween("d",function($){var U=E($,f,F,[v,x]);return function(V){return C(U(V))}}):Z.attr("d",C),X.call(c,g,d,p,{styleOne:l,eventDataKeys:n.eventDataKeys,transitionTime:n.CLICK_TRANSITION_TIME,transitionEasing:n.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,d,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:d._transitioning}),Z.call(l,W,z,d,{hovered:!1}),W._text=(u.getPtLabel(W)||"").split("<br>").join(" ")||"";var J=i.ensureSingle(X,"g","slicetext"),N=i.ensureSingle(J,"text","",function($){$.attr("data-notex",1)}),H=i.ensureUniformFontSize(d,u.determineTextFont(z,W,R.font,{onPathbar:!0}));N.text(W._text||" ").classed("slicetext",!0).attr("text-anchor","start").call(a.font,H).call(o.convertToTspans,d),W.textBB=a.bBox(N.node()),W.transform=w(W,{fontSize:H.size,onPathbar:!0}),W.transform.fontSize=H.size,A?N.transition().attrTween("transform",function($){var U=T($,f,F,[v,x]);return function(V){return k(U(V))}}):N.attr("transform",k(W))})}}}),IW=de({"src/traces/treemap/plot_one.js"(e,r){"use strict";var t=Yr(),i=(jv(),ti(M0)).interpolate,a=Cp(),o=Qt(),s=y0().TEXTPAD,l=Sv(),n=l.toMoveInsideBar,u=dc(),c=u.recordMinTextSize,f=Uv(),h=PW();function d(p){return a.isHierarchyRoot(p)?"":a.getPtId(p)}r.exports=function(g,m,y,_,v){var x=g._fullLayout,S=m[0],M=S.trace,C=M.type,w=C==="icicle",k=S.hierarchy,A=a.findEntryWithLevel(k,M.level),b=t.select(y),E=b.selectAll("g.pathbar"),T=b.selectAll("g.slice");if(!A){E.remove(),T.remove();return}var F=a.isHierarchyRoot(A),D=!x.uniformtext.mode&&a.hasTransition(_),R=a.getMaxDepth(M),P=function(mt){return mt.data.depth-A.data.depth<R},z=x._size,I=M.domain,L=z.w*(I.x[1]-I.x[0]),B=z.h*(I.y[1]-I.y[0]),O=L,G=M.pathbar.thickness,W=M.marker.line.width+f.gapWithPathbar,X=M.pathbar.visible?M.pathbar.side.indexOf("bottom")>-1?B+W:-(G+W):0,Z={x0:O,x1:O,y0:X,y1:X+G},J=function(mt,Mt,lt){var qe=M.tiling.pad,Ye=function(ke){return ke-qe<=Mt.x0},me=function(ke){return ke+qe>=Mt.x1},_e=function(ke){return ke-qe<=Mt.y0},Ae=function(ke){return ke+qe>=Mt.y1};return mt.x0===Mt.x0&&mt.x1===Mt.x1&&mt.y0===Mt.y0&&mt.y1===Mt.y1?{x0:mt.x0,x1:mt.x1,y0:mt.y0,y1:mt.y1}:{x0:Ye(mt.x0-qe)?0:me(mt.x0-qe)?lt[0]:mt.x0,x1:Ye(mt.x1+qe)?0:me(mt.x1+qe)?lt[0]:mt.x1,y0:_e(mt.y0-qe)?0:Ae(mt.y0-qe)?lt[1]:mt.y0,y1:_e(mt.y1+qe)?0:Ae(mt.y1+qe)?lt[1]:mt.y1}},N=null,H={},$={},U=null,V=function(mt,Mt){return Mt?H[d(mt)]:$[d(mt)]},j=function(mt,Mt,lt,qe){if(Mt)return H[d(k)]||Z;var Ye=$[M.level]||lt;return P(mt)?J(mt,Ye,qe):{}};S.hasMultipleRoots&&F&&R++,M._maxDepth=R,M._backgroundColor=x.paper_bgcolor,M._entryDepth=A.data.depth,M._atRootLevel=F;var q=-L/2+z.l+z.w*(I.x[1]+I.x[0])/2,Y=-B/2+z.t+z.h*(1-(I.y[1]+I.y[0])/2),K=function(mt){return q+mt},te=function(mt){return Y+mt},ne=te(0),se=K(0),le=function(mt){return se+mt},ce=function(mt){return ne+mt};function pe(mt,Mt){return mt+","+Mt}var xe=le(0),ye=function(mt){mt.x=Math.max(xe,mt.x)},fe=M.pathbar.edgeshape,ae=function(mt){var Mt=le(Math.max(Math.min(mt.x0,mt.x0),0)),lt=le(Math.min(Math.max(mt.x1,mt.x1),O)),qe=ce(mt.y0),Ye=ce(mt.y1),me=G/2,_e={},Ae={};_e.x=Mt,Ae.x=lt,_e.y=Ae.y=(qe+Ye)/2;var ke={x:Mt,y:qe},Ee={x:lt,y:qe},De={x:lt,y:Ye},Je={x:Mt,y:Ye};return fe===">"?(ke.x-=me,Ee.x-=me,De.x-=me,Je.x-=me):fe==="/"?(De.x-=me,Je.x-=me,_e.x-=me/2,Ae.x-=me/2):fe==="\\"?(ke.x-=me,Ee.x-=me,_e.x-=me/2,Ae.x-=me/2):fe==="<"&&(_e.x-=me,Ae.x-=me),ye(ke),ye(Je),ye(_e),ye(Ee),ye(De),ye(Ae),"M"+pe(ke.x,ke.y)+"L"+pe(Ee.x,Ee.y)+"L"+pe(Ae.x,Ae.y)+"L"+pe(De.x,De.y)+"L"+pe(Je.x,Je.y)+"L"+pe(_e.x,_e.y)+"Z"},ee=M[w?"tiling":"marker"].pad,ie=function(mt){return M.textposition.indexOf(mt)!==-1},Q=ie("top"),ue=ie("left"),ge=ie("right"),Me=ie("bottom"),Te=function(mt){var Mt=K(mt.x0),lt=K(mt.x1),qe=te(mt.y0),Ye=te(mt.y1),me=lt-Mt,_e=Ye-qe;if(!me||!_e)return"";var Ae=M.marker.cornerradius||0,ke=Math.min(Ae,me/2,_e/2);ke&&mt.data&&mt.data.data&&mt.data.data.label&&(Q&&(ke=Math.min(ke,ee.t)),ue&&(ke=Math.min(ke,ee.l)),ge&&(ke=Math.min(ke,ee.r)),Me&&(ke=Math.min(ke,ee.b)));var Ee=function(De,Je){return ke?"a"+pe(ke,ke)+" 0 0 1 "+pe(De,Je):""};return"M"+pe(Mt,qe+ke)+Ee(ke,-ke)+"L"+pe(lt-ke,qe)+Ee(ke,ke)+"L"+pe(lt,Ye-ke)+Ee(-ke,ke)+"L"+pe(Mt+ke,Ye)+Ee(-ke,-ke)+"Z"},je=function(mt,Mt){var lt=mt.x0,qe=mt.x1,Ye=mt.y0,me=mt.y1,_e=mt.textBB,Ae=Q||Mt.isHeader&&!Me,ke=Ae?"start":Me?"end":"middle",Ee=ie("right"),De=ie("left")||Mt.onPathbar,Je=De?-1:Ee?1:0;if(Mt.isHeader){if(lt+=(w?ee:ee.l)-s,qe-=(w?ee:ee.r)-s,lt>=qe){var Ue=(lt+qe)/2;lt=Ue,qe=Ue}var at;Me?(at=me-(w?ee:ee.b),Ye<at&&at<me&&(Ye=at)):(at=Ye+(w?ee:ee.t),Ye<at&&at<me&&(me=at))}var rt=n(lt,qe,Ye,me,_e,{isHorizontal:!1,constrained:!0,angle:0,anchor:ke,leftToRight:Je});return rt.fontSize=Mt.fontSize,rt.targetX=K(rt.targetX),rt.targetY=te(rt.targetY),isNaN(rt.targetX)||isNaN(rt.targetY)?{}:(lt!==qe&&Ye!==me&&c(M.type,rt,x),{scale:rt.scale,rotate:rt.rotate,textX:rt.textX,textY:rt.textY,anchorX:rt.anchorX,anchorY:rt.anchorY,targetX:rt.targetX,targetY:rt.targetY})},Ve=function(mt,Mt){for(var lt,qe=0,Ye=mt;!lt&&qe<R;)qe++,Ye=Ye.parent,Ye?lt=V(Ye,Mt):qe=R;return lt||{}},Ze=function(mt,Mt,lt,qe){var Ye=V(mt,Mt),me;if(Mt)me=Z;else{var _e=V(A,Mt);_e?me=J(mt,_e,qe):me={}}return i(Ye,me)},Ke=function(mt,Mt,lt,qe,Ye){var me=V(mt,Mt),_e;if(me)_e=me;else if(Mt)_e=Z;else if(N)if(mt.parent){var Ae=U||lt;Ae&&!Mt?_e=J(mt,Ae,qe):(_e={},o.extendFlat(_e,Ve(mt,Mt)))}else _e=o.extendFlat({},mt),w&&(Ye.orientation==="h"?Ye.flipX?_e.x0=mt.x1:_e.x1=0:Ye.flipY?_e.y0=mt.y1:_e.y1=0);else _e={};return i(_e,{x0:mt.x0,x1:mt.x1,y0:mt.y0,y1:mt.y1})},vt=function(mt,Mt,lt,qe){var Ye=V(mt,Mt),me={},_e=j(mt,Mt,lt,qe);o.extendFlat(me,{transform:je({x0:_e.x0,x1:_e.x1,y0:_e.y0,y1:_e.y1,textBB:mt.textBB,_text:mt._text},{isHeader:a.isHeader(mt,M)})}),Ye?me=Ye:mt.parent&&o.extendFlat(me,Ve(mt,Mt));var Ae=mt.transform;return mt.x0!==mt.x1&&mt.y0!==mt.y1&&c(M.type,Ae,x),i(me,{transform:{scale:Ae.scale,rotate:Ae.rotate,textX:Ae.textX,textY:Ae.textY,anchorX:Ae.anchorX,anchorY:Ae.anchorY,targetX:Ae.targetX,targetY:Ae.targetY}})},xt=function(mt,Mt,lt,qe,Ye){var me=qe[0],_e=qe[1];D?mt.exit().transition().each(function(){var Ae=t.select(this),ke=Ae.select("path.surface");ke.transition().attrTween("d",function(De){var Je=Ze(De,Mt,lt,[me,_e]);return function(Ue){return Ye(Je(Ue))}});var Ee=Ae.select("g.slicetext");Ee.attr("opacity",0)}).remove():mt.exit().remove()},Pt=function(mt){var Mt=mt.transform;return mt.x0!==mt.x1&&mt.y0!==mt.y1&&c(M.type,Mt,x),o.getTextTransform({textX:Mt.textX,textY:Mt.textY,anchorX:Mt.anchorX,anchorY:Mt.anchorY,targetX:Mt.targetX,targetY:Mt.targetY,scale:Mt.scale,rotate:Mt.rotate})};D&&(E.each(function(mt){H[d(mt)]={x0:mt.x0,x1:mt.x1,y0:mt.y0,y1:mt.y1},mt.transform&&(H[d(mt)].transform={textX:mt.transform.textX,textY:mt.transform.textY,anchorX:mt.transform.anchorX,anchorY:mt.transform.anchorY,targetX:mt.transform.targetX,targetY:mt.transform.targetY,scale:mt.transform.scale,rotate:mt.transform.rotate})}),T.each(function(mt){$[d(mt)]={x0:mt.x0,x1:mt.x1,y0:mt.y0,y1:mt.y1},mt.transform&&($[d(mt)].transform={textX:mt.transform.textX,textY:mt.transform.textY,anchorX:mt.transform.anchorX,anchorY:mt.transform.anchorY,targetX:mt.transform.targetX,targetY:mt.transform.targetY,scale:mt.transform.scale,rotate:mt.transform.rotate}),!N&&a.isEntry(mt)&&(N=mt)})),U=v(g,m,A,T,{width:L,height:B,viewX:K,viewY:te,pathSlice:Te,toMoveInsideSlice:je,prevEntry:N,makeUpdateSliceInterpolator:Ke,makeUpdateTextInterpolator:vt,handleSlicesExit:xt,hasTransition:D,strTransform:Pt}),M.pathbar.visible?h(g,m,A,E,{barDifY:X,width:O,height:G,viewX:le,viewY:ce,pathSlice:ae,toMoveInsideSlice:je,makeUpdateSliceInterpolator:Ke,makeUpdateTextInterpolator:vt,handleSlicesExit:xt,hasTransition:D,strTransform:Pt}):E.remove()}}}),jD=de({"src/traces/treemap/draw.js"(e,r){"use strict";var t=Yr(),i=Cp(),a=dc(),o=a.clearMinTextSize,s=qh().resizeText,l=IW();r.exports=function(u,c,f,h,d){var p=d.type,g=d.drawDescendants,m=u._fullLayout,y=m["_"+p+"layer"],_,v,x=!f;if(o(p,m),_=y.selectAll("g.trace."+p).data(c,function(M){return M[0].trace.uid}),_.enter().append("g").classed("trace",!0).classed(p,!0),_.order(),!m.uniformtext.mode&&i.hasTransition(f)){h&&(v=h());var S=t.transition().duration(f.duration).ease(f.easing).each("end",function(){v&&v()}).each("interrupt",function(){v&&v()});S.each(function(){y.selectAll("g.trace").each(function(M){l(u,M,this,f,g)})})}else _.each(function(M){l(u,M,this,f,g)}),m.uniformtext.mode&&s(u,y.selectAll(".trace"),p);x&&_.exit().remove()}}}),RW=de({"src/traces/treemap/draw_descendants.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=Zo(),s=ND(),l=p4().styleOne,n=Uv(),u=Cp(),c=p_(),f=h4().formatSliceLabel,h=!1;r.exports=function(p,g,m,y,_){var v=_.width,x=_.height,S=_.viewX,M=_.viewY,C=_.pathSlice,w=_.toMoveInsideSlice,k=_.strTransform,A=_.hasTransition,b=_.handleSlicesExit,E=_.makeUpdateSliceInterpolator,T=_.makeUpdateTextInterpolator,F=_.prevEntry,D={},R=p._context.staticPlot,P=p._fullLayout,z=g[0],I=z.trace,L=I.textposition.indexOf("left")!==-1,B=I.textposition.indexOf("right")!==-1,O=I.textposition.indexOf("bottom")!==-1,G=!O&&!I.marker.pad.t||O&&!I.marker.pad.b,W=s(m,[v,x],{packing:I.tiling.packing,squarifyratio:I.tiling.squarifyratio,flipX:I.tiling.flip.indexOf("x")>-1,flipY:I.tiling.flip.indexOf("y")>-1,pad:{inner:I.tiling.pad,top:I.marker.pad.t,left:I.marker.pad.l,right:I.marker.pad.r,bottom:I.marker.pad.b}}),X=W.descendants(),Z=1/0,J=-1/0;X.forEach(function(V){var j=V.depth;j>=I._maxDepth?(V.x0=V.x1=(V.x0+V.x1)/2,V.y0=V.y1=(V.y0+V.y1)/2):(Z=Math.min(Z,j),J=Math.max(J,j))}),y=y.data(X,u.getPtId),I._maxVisibleLayers=isFinite(J)?J-Z+1:0,y.enter().append("g").classed("slice",!0),b(y,h,D,[v,x],C),y.order();var N=null;if(A&&F){var H=u.getPtId(F);y.each(function(V){N===null&&u.getPtId(V)===H&&(N={x0:V.x0,x1:V.x1,y0:V.y0,y1:V.y1})})}var $=function(){return N||{x0:0,x1:v,y0:0,y1:x}},U=y;return A&&(U=U.transition().each("end",function(){var V=t.select(this);u.setSliceCursor(V,p,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})})),U.each(function(V){var j=u.isHeader(V,I);V._x0=S(V.x0),V._x1=S(V.x1),V._y0=M(V.y0),V._y1=M(V.y1),V._hoverX=S(V.x1-I.marker.pad.r),V._hoverY=M(O?V.y1-I.marker.pad.b/2:V.y0+I.marker.pad.t/2);var q=t.select(this),Y=i.ensureSingle(q,"path","surface",function(ce){ce.style("pointer-events",R?"none":"all")});A?Y.transition().attrTween("d",function(ce){var pe=E(ce,h,$(),[v,x]);return function(xe){return C(pe(xe))}}):Y.attr("d",C),q.call(c,m,p,g,{styleOne:l,eventDataKeys:n.eventDataKeys,transitionTime:n.CLICK_TRANSITION_TIME,transitionEasing:n.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,p,{isTransitioning:p._transitioning}),Y.call(l,V,I,p,{hovered:!1}),V.x0===V.x1||V.y0===V.y1?V._text="":j?V._text=G?"":u.getPtLabel(V)||"":V._text=f(V,m,I,g,P)||"";var K=i.ensureSingle(q,"g","slicetext"),te=i.ensureSingle(K,"text","",function(ce){ce.attr("data-notex",1)}),ne=i.ensureUniformFontSize(p,u.determineTextFont(I,V,P.font)),se=V._text||" ",le=j&&se.indexOf("<br>")===-1;te.text(se).classed("slicetext",!0).attr("text-anchor",B?"end":L||le?"start":"middle").call(a.font,ne).call(o.convertToTspans,p),V.textBB=a.bBox(te.node()),V.transform=w(V,{fontSize:ne.size,isHeader:j}),V.transform.fontSize=ne.size,A?te.transition().attrTween("transform",function(ce){var pe=T(ce,h,$(),[v,x]);return function(xe){return k(pe(xe))}}):te.attr("transform",k(V))}),N}}}),zW=de({"src/traces/treemap/plot.js"(e,r){"use strict";var t=jD(),i=RW();r.exports=function(o,s,l,n){return t(o,s,l,n,{type:"treemap",drawDescendants:i})}}}),BW=de({"src/traces/treemap/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"treemap",basePlotModule:DW(),categories:[],animatable:!0,attributes:d4(),layoutAttributes:zD(),supplyDefaults:LW(),supplyLayoutDefaults:FW(),calc:BD().calc,crossTraceCalc:BD().crossTraceCalc,plot:zW(),style:p4().style,colorbar:Yu(),meta:{}}}}),OW=de({"lib/treemap.js"(e,r){"use strict";r.exports=BW()}}),NW=de({"src/traces/icicle/base_plot.js"(e){"use strict";var r=Es();e.name="icicle",e.plot=function(t,i,a,o){r.plotBasePlot(e.name,t,i,a,o)},e.clean=function(t,i,a,o){r.cleanBasePlot(e.name,t,i,a,o)}}}),UD=de({"src/traces/icicle/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=cs(),s=Is().attributes,l=Pv(),n=Zy(),u=d4(),c=Uv(),f=fn().extendFlat,h=fu().pattern;r.exports={labels:n.labels,parents:n.parents,values:n.values,branchvalues:n.branchvalues,count:n.count,level:n.level,maxdepth:n.maxdepth,tiling:{orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"plot"},flip:u.tiling.flip,pad:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},marker:f({colors:n.marker.colors,line:n.marker.line,pattern:h,editType:"calc"},o("marker",{colorAttr:"colors",anim:!1})),leaf:n.leaf,pathbar:u.pathbar,text:l.text,textinfo:n.textinfo,texttemplate:i({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),texttemplatefallback:a({editType:"plot"}),hovertext:l.hovertext,hoverinfo:n.hoverinfo,hovertemplate:t({},{keys:c.eventDataKeys}),hovertemplatefallback:a(),textfont:l.textfont,insidetextfont:l.insidetextfont,outsidetextfont:u.outsidetextfont,textposition:u.textposition,sort:l.sort,root:n.root,domain:s({name:"icicle",trace:!0,editType:"calc"})}}}),qD=de({"src/traces/icicle/layout_attributes.js"(e,r){"use strict";r.exports={iciclecolorway:{valType:"colorlist",editType:"calc"},extendiciclecolors:{valType:"boolean",dflt:!0,editType:"calc"}}}}),jW=de({"src/traces/icicle/defaults.js"(e,r){"use strict";var t=Qt(),i=UD(),a=ta(),o=Is().defaults,s=oh().handleText,l=y0().TEXTPAD,n=Iv().handleMarkerDefaults,u=ks(),c=u.hasColorscale,f=u.handleDefaults;r.exports=function(d,p,g,m){function y(k,A){return t.coerce(d,p,i,k,A)}var _=y("labels"),v=y("parents");if(!_||!_.length||!v||!v.length){p.visible=!1;return}var x=y("values");x&&x.length?y("branchvalues"):y("count"),y("level"),y("maxdepth"),y("tiling.orientation"),y("tiling.flip"),y("tiling.pad");var S=y("text");y("texttemplate"),y("texttemplatefallback"),p.texttemplate||y("textinfo",t.isArrayOrTypedArray(S)?"text+label":"label"),y("hovertext"),y("hovertemplate"),y("hovertemplatefallback");var M=y("pathbar.visible"),C="auto";s(d,p,m,y,C,{hasPathbar:M,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),y("textposition"),n(d,p,m,y);var w=p._hasColorscale=c(d,"marker","colors")||(d.marker||{}).coloraxis;w&&f(d,p,m,y,{prefix:"marker.",cLetter:"c"}),y("leaf.opacity",w?1:.7),p._hovered={marker:{line:{width:2,color:a.contrast(m.paper_bgcolor)}}},M&&(y("pathbar.thickness",p.pathbar.textfont.size+2*l),y("pathbar.side"),y("pathbar.edgeshape")),y("sort"),y("root.color"),o(p,m,y),p._length=null}}}),UW=de({"src/traces/icicle/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=qD();r.exports=function(o,s){function l(n,u){return t.coerce(o,s,i,n,u)}l("iciclecolorway",s.colorway),l("extendiciclecolors")}}}),VD=de({"src/traces/icicle/calc.js"(e){"use strict";var r=Jy();e.calc=function(t,i){return r.calc(t,i)},e.crossTraceCalc=function(t){return r._runCrossTraceCalc("icicle",t)}}}),qW=de({"src/traces/icicle/partition.js"(e,r){"use strict";var t=Ky(),i=OD();r.exports=function(o,s,l){var n=l.flipX,u=l.flipY,c=l.orientation==="h",f=l.maxDepth,h=s[0],d=s[1];f&&(h=(o.height+1)*s[0]/Math.min(o.height+1,f),d=(o.height+1)*s[1]/Math.min(o.height+1,f));var p=t.partition().padding(l.pad.inner).size(c?[s[1],h]:[s[0],d])(o);return(c||n||u)&&i(p,s,{swapXY:c,flipX:n,flipY:u}),p}}}),GD=de({"src/traces/icicle/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=Qt(),o=dc().resizeText,s=f4();function l(u){var c=u._fullLayout._iciclelayer.selectAll(".trace");o(u,c,"icicle"),c.each(function(f){var h=t.select(this),d=f[0],p=d.trace;h.style("opacity",p.opacity),h.selectAll("path.surface").each(function(g){t.select(this).call(n,g,p,u)})})}function n(u,c,f,h){var d=c.data.data,p=!c.children,g=d.i,m=a.castOption(f,g,"marker.line.color")||i.defaultLine,y=a.castOption(f,g,"marker.line.width")||0;u.call(s,c,f,h).style("stroke-width",y).call(i.stroke,m).style("opacity",p?f.leaf.opacity:null)}r.exports={style:l,styleOne:n}}}),VW=de({"src/traces/icicle/draw_descendants.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=Zo(),s=qW(),l=GD().styleOne,n=Uv(),u=Cp(),c=p_(),f=h4().formatSliceLabel,h=!1;r.exports=function(p,g,m,y,_){var v=_.width,x=_.height,S=_.viewX,M=_.viewY,C=_.pathSlice,w=_.toMoveInsideSlice,k=_.strTransform,A=_.hasTransition,b=_.handleSlicesExit,E=_.makeUpdateSliceInterpolator,T=_.makeUpdateTextInterpolator,F=_.prevEntry,D={},R=p._context.staticPlot,P=p._fullLayout,z=g[0],I=z.trace,L=I.textposition.indexOf("left")!==-1,B=I.textposition.indexOf("right")!==-1,O=I.textposition.indexOf("bottom")!==-1,G=s(m,[v,x],{flipX:I.tiling.flip.indexOf("x")>-1,flipY:I.tiling.flip.indexOf("y")>-1,orientation:I.tiling.orientation,pad:{inner:I.tiling.pad},maxDepth:I._maxDepth}),W=G.descendants(),X=1/0,Z=-1/0;W.forEach(function(U){var V=U.depth;V>=I._maxDepth?(U.x0=U.x1=(U.x0+U.x1)/2,U.y0=U.y1=(U.y0+U.y1)/2):(X=Math.min(X,V),Z=Math.max(Z,V))}),y=y.data(W,u.getPtId),I._maxVisibleLayers=isFinite(Z)?Z-X+1:0,y.enter().append("g").classed("slice",!0),b(y,h,D,[v,x],C),y.order();var J=null;if(A&&F){var N=u.getPtId(F);y.each(function(U){J===null&&u.getPtId(U)===N&&(J={x0:U.x0,x1:U.x1,y0:U.y0,y1:U.y1})})}var H=function(){return J||{x0:0,x1:v,y0:0,y1:x}},$=y;return A&&($=$.transition().each("end",function(){var U=t.select(this);u.setSliceCursor(U,p,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})})),$.each(function(U){U._x0=S(U.x0),U._x1=S(U.x1),U._y0=M(U.y0),U._y1=M(U.y1),U._hoverX=S(U.x1-I.tiling.pad),U._hoverY=M(O?U.y1-I.tiling.pad/2:U.y0+I.tiling.pad/2);var V=t.select(this),j=i.ensureSingle(V,"path","surface",function(te){te.style("pointer-events",R?"none":"all")});A?j.transition().attrTween("d",function(te){var ne=E(te,h,H(),[v,x],{orientation:I.tiling.orientation,flipX:I.tiling.flip.indexOf("x")>-1,flipY:I.tiling.flip.indexOf("y")>-1});return function(se){return C(ne(se))}}):j.attr("d",C),V.call(c,m,p,g,{styleOne:l,eventDataKeys:n.eventDataKeys,transitionTime:n.CLICK_TRANSITION_TIME,transitionEasing:n.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,p,{isTransitioning:p._transitioning}),j.call(l,U,I,p,{hovered:!1}),U.x0===U.x1||U.y0===U.y1?U._text="":U._text=f(U,m,I,g,P)||"";var q=i.ensureSingle(V,"g","slicetext"),Y=i.ensureSingle(q,"text","",function(te){te.attr("data-notex",1)}),K=i.ensureUniformFontSize(p,u.determineTextFont(I,U,P.font));Y.text(U._text||" ").classed("slicetext",!0).attr("text-anchor",B?"end":L?"start":"middle").call(a.font,K).call(o.convertToTspans,p),U.textBB=a.bBox(Y.node()),U.transform=w(U,{fontSize:K.size}),U.transform.fontSize=K.size,A?Y.transition().attrTween("transform",function(te){var ne=T(te,h,H(),[v,x]);return function(se){return k(ne(se))}}):Y.attr("transform",k(U))}),J}}}),GW=de({"src/traces/icicle/plot.js"(e,r){"use strict";var t=jD(),i=VW();r.exports=function(o,s,l,n){return t(o,s,l,n,{type:"icicle",drawDescendants:i})}}}),HW=de({"src/traces/icicle/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"icicle",basePlotModule:NW(),categories:[],animatable:!0,attributes:UD(),layoutAttributes:qD(),supplyDefaults:jW(),supplyLayoutDefaults:UW(),calc:VD().calc,crossTraceCalc:VD().crossTraceCalc,plot:GW(),style:GD().style,colorbar:Yu(),meta:{}}}}),$W=de({"lib/icicle.js"(e,r){"use strict";r.exports=HW()}}),WW=de({"src/traces/funnelarea/base_plot.js"(e){"use strict";var r=Es();e.name="funnelarea",e.plot=function(t,i,a,o){r.plotBasePlot(e.name,t,i,a,o)},e.clean=function(t,i,a,o){r.cleanBasePlot(e.name,t,i,a,o)}}}),HD=de({"src/traces/funnelarea/attributes.js"(e,r){"use strict";var t=Pv(),i=ri(),a=Is().attributes,{hovertemplateAttrs:o,texttemplateAttrs:s,templatefallbackAttrs:l}=Vo(),n=fn().extendFlat;r.exports={labels:t.labels,label0:t.label0,dlabel:t.dlabel,values:t.values,marker:{colors:t.marker.colors,line:{color:n({},t.marker.line.color,{dflt:null}),width:n({},t.marker.line.width,{dflt:1}),editType:"calc"},pattern:t.marker.pattern,editType:"calc"},text:t.text,hovertext:t.hovertext,scalegroup:n({},t.scalegroup,{}),textinfo:n({},t.textinfo,{flags:["label","text","value","percent"]}),texttemplate:s({editType:"plot"},{keys:["label","color","value","text","percent"]}),texttemplatefallback:l({editType:"plot"}),hoverinfo:n({},i.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:o({},{keys:["label","color","value","text","percent"]}),hovertemplatefallback:l(),textposition:n({},t.textposition,{values:["inside","none"],dflt:"inside"}),textfont:t.textfont,insidetextfont:t.insidetextfont,title:{text:t.title.text,font:t.title.font,position:n({},t.title.position,{values:["top left","top center","top right"],dflt:"top center"}),editType:"plot"},domain:a({name:"funnelarea",trace:!0,editType:"calc"}),aspectratio:{valType:"number",min:0,dflt:1,editType:"plot"},baseratio:{valType:"number",min:0,max:1,dflt:.333,editType:"plot"}}}}),$D=de({"src/traces/funnelarea/layout_attributes.js"(e,r){"use strict";var t=R3().hiddenlabels;r.exports={hiddenlabels:t,funnelareacolorway:{valType:"colorlist",editType:"calc"},extendfunnelareacolors:{valType:"boolean",dflt:!0,editType:"calc"}}}}),YW=de({"src/traces/funnelarea/defaults.js"(e,r){"use strict";var t=Qt(),i=HD(),a=Is().defaults,o=oh().handleText,s=Iv().handleLabelsAndValues,l=Iv().handleMarkerDefaults;r.exports=function(u,c,f,h){function d(C,w){return t.coerce(u,c,i,C,w)}var p=d("labels"),g=d("values"),m=s(p,g),y=m.len;if(c._hasLabels=m.hasLabels,c._hasValues=m.hasValues,!c._hasLabels&&c._hasValues&&(d("label0"),d("dlabel")),!y){c.visible=!1;return}c._length=y,l(u,c,h,d),d("scalegroup");var _=d("text"),v=d("texttemplate");d("texttemplatefallback");var x;if(v||(x=d("textinfo",Array.isArray(_)?"text+percent":"percent")),d("hovertext"),d("hovertemplate"),d("hovertemplatefallback"),v||x&&x!=="none"){var S=d("textposition");o(u,c,h,d,S,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}else x==="none"&&d("textposition","none");a(c,h,d);var M=d("title.text");M&&(d("title.position"),t.coerceFont(d,"title.font",h.font)),d("aspectratio"),d("baseratio")}}}),XW=de({"src/traces/funnelarea/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=$D();r.exports=function(o,s){function l(n,u){return t.coerce(o,s,i,n,u)}l("hiddenlabels"),l("funnelareacolorway",s.colorway),l("extendfunnelareacolors")}}}),WD=de({"src/traces/funnelarea/calc.js"(e,r){"use strict";var t=E1();function i(o,s){return t.calc(o,s)}function a(o){t.crossTraceCalc(o,{type:"funnelarea"})}r.exports={calc:i,crossTraceCalc:a}}}),ZW=de({"src/traces/funnelarea/plot.js"(e,r){"use strict";var t=Yr(),i=hn(),a=Qt(),o=a.strScale,s=a.strTranslate,l=Zo(),n=Sv(),u=n.toMoveInsideBar,c=dc(),f=c.recordMinTextSize,h=c.clearMinTextSize,d=p0(),p=z3(),g=p.attachFxHandlers,m=p.determineInsideTextFont,y=p.layoutAreas,_=p.prerenderTitles,v=p.positionTitleOutside,x=p.formatSliceLabel;r.exports=function(k,A){var b=k._context.staticPlot,E=k._fullLayout;h("funnelarea",E),_(A,k),y(A,E._size),a.makeTraceGroups(E._funnelarealayer,A,"trace").each(function(T){var F=t.select(this),D=T[0],R=D.trace;C(T),F.each(function(){var P=t.select(this).selectAll("g.slice").data(T);P.enter().append("g").classed("slice",!0),P.exit().remove(),P.each(function(I,L){if(I.hidden){t.select(this).selectAll("path,g").remove();return}I.pointNumber=I.i,I.curveNumber=R.index;var B=D.cx,O=D.cy,G=t.select(this),W=G.selectAll("path.surface").data([I]);W.enter().append("path").classed("surface",!0).style({"pointer-events":b?"none":"all"}),G.call(g,k,T);var X="M"+(B+I.TR[0])+","+(O+I.TR[1])+S(I.TR,I.BR)+S(I.BR,I.BL)+S(I.BL,I.TL)+"Z";W.attr("d",X),x(k,I,D);var Z=d.castOption(R.textposition,I.pts),J=G.selectAll("g.slicetext").data(I.text&&Z!=="none"?[0]:[]);J.enter().append("g").classed("slicetext",!0),J.exit().remove(),J.each(function(){var N=a.ensureSingle(t.select(this),"text","",function(K){K.attr("data-notex",1)}),H=a.ensureUniformFontSize(k,m(R,I,E.font));N.text(I.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(i.font,H).call(l.convertToTspans,k);var $=i.bBox(N.node()),U,V,j,q=Math.min(I.BL[1],I.BR[1])+O,Y=Math.max(I.TL[1],I.TR[1])+O;V=Math.max(I.TL[0],I.BL[0])+B,j=Math.min(I.TR[0],I.BR[0])+B,U=u(V,j,q,Y,$,{isHorizontal:!0,constrained:!0,angle:0,anchor:"middle"}),U.fontSize=H.size,f(R.type,U,E),T[L].transform=U,a.setTransormAndDisplay(N,U)})});var z=t.select(this).selectAll("g.titletext").data(R.title.text?[0]:[]);z.enter().append("g").classed("titletext",!0),z.exit().remove(),z.each(function(){var I=a.ensureSingle(t.select(this),"text","",function(O){O.attr("data-notex",1)}),L=R.title.text;R._meta&&(L=a.templateString(L,R._meta)),I.text(L).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(i.font,R.title.font).call(l.convertToTspans,k);var B=v(D,E._size);I.attr("transform",s(B.x,B.y)+o(Math.min(1,B.scale))+s(B.tx,B.ty))})})})};function S(w,k){var A=k[0]-w[0],b=k[1]-w[1];return"l"+A+","+b}function M(w,k){return[.5*(w[0]+k[0]),.5*(w[1]+k[1])]}function C(w){if(!w.length)return;var k=w[0],A=k.trace,b=A.aspectratio,E=A.baseratio;E>.999&&(E=.999);var T=Math.pow(E,2),F=k.vTotal,D=F*T/(1-T),R=F,P=D/F;function z(){var te=Math.sqrt(P);return{x:te,y:-te}}function I(){var te=z();return[te.x,te.y]}var L,B=[];B.push(I());var O,G;for(O=w.length-1;O>-1;O--)if(G=w[O],!G.hidden){var W=G.v/R;P+=W,B.push(I())}var X=1/0,Z=-1/0;for(O=0;O<B.length;O++)L=B[O],X=Math.min(X,L[1]),Z=Math.max(Z,L[1]);for(O=0;O<B.length;O++)B[O][1]-=(Z+X)/2;var J=B[B.length-1][0],N=k.r,H=(Z-X)/2,$=N/J,U=N/H*b;for(k.r=U*H,O=0;O<B.length;O++)B[O][0]*=$,B[O][1]*=U;L=B[0];var V=[-L[0],L[1]],j=[L[0],L[1]],q=0;for(O=w.length-1;O>-1;O--)if(G=w[O],!G.hidden){q+=1;var Y=B[q][0],K=B[q][1];G.TL=[-Y,K],G.TR=[Y,K],G.BL=V,G.BR=j,G.pxmid=M(G.TR,G.BR),V=G.TL,j=G.TR}}}}),KW=de({"src/traces/funnelarea/style.js"(e,r){"use strict";var t=Yr(),i=d1(),a=dc().resizeText;r.exports=function(s){var l=s._fullLayout._funnelarealayer.selectAll(".trace");a(s,l,"funnelarea"),l.each(function(n){var u=n[0],c=u.trace,f=t.select(this);f.style({opacity:c.opacity}),f.selectAll("path.surface").each(function(h){t.select(this).call(i,h,c,s)})})}}}),JW=de({"src/traces/funnelarea/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"funnelarea",basePlotModule:WW(),categories:["pie-like","funnelarea","showLegend"],attributes:HD(),layoutAttributes:$D(),supplyDefaults:YW(),supplyLayoutDefaults:XW(),calc:WD().calc,crossTraceCalc:WD().crossTraceCalc,plot:ZW(),style:KW(),styleOne:d1(),meta:{}}}}),QW=de({"lib/funnelarea.js"(e,r){"use strict";r.exports=JW()}}),ku=de({"stackgl_modules/index.js"(e,r){"use strict";(()=>{var t={3065(s,l,n){s.exports={alpha_shape:n(3502),convex_hull:n(7352),delaunay_triangulate:n(7642),gl_cone3d:n(6405),gl_error3d:n(9165),gl_line3d:n(5714),gl_mesh3d:n(7201),gl_plot3d:n(4100),gl_scatter3d:n(8418),gl_streamtube3d:n(7815),gl_surface3d:n(9499),ndarray:n(9618),ndarray_linear_interpolate:n(4317)}},6296(s,l,n){"use strict";s.exports=p;var u=n(7261),c=n(9977),f=n(1811);function h(g,m){this._controllerNames=Object.keys(g),this._controllerList=this._controllerNames.map(function(y){return g[y]}),this._mode=m,this._active=g[m],this._active||(this._mode="turntable",this._active=g.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var d=h.prototype;d.flush=function(g){for(var m=this._controllerList,y=0;y<m.length;++y)m[y].flush(g)},d.idle=function(g){for(var m=this._controllerList,y=0;y<m.length;++y)m[y].idle(g)},d.lookAt=function(g,m,y,_){for(var v=this._controllerList,x=0;x<v.length;++x)v[x].lookAt(g,m,y,_)},d.rotate=function(g,m,y,_){for(var v=this._controllerList,x=0;x<v.length;++x)v[x].rotate(g,m,y,_)},d.pan=function(g,m,y,_){for(var v=this._controllerList,x=0;x<v.length;++x)v[x].pan(g,m,y,_)},d.translate=function(g,m,y,_){for(var v=this._controllerList,x=0;x<v.length;++x)v[x].translate(g,m,y,_)},d.setMatrix=function(g,m){for(var y=this._controllerList,_=0;_<y.length;++_)y[_].setMatrix(g,m)},d.setDistanceLimits=function(g,m){for(var y=this._controllerList,_=0;_<y.length;++_)y[_].setDistanceLimits(g,m)},d.setDistance=function(g,m){for(var y=this._controllerList,_=0;_<y.length;++_)y[_].setDistance(g,m)},d.recalcMatrix=function(g){this._active.recalcMatrix(g)},d.getDistance=function(g){return this._active.getDistance(g)},d.getDistanceLimits=function(g){return this._active.getDistanceLimits(g)},d.lastT=function(){return this._active.lastT()},d.setMode=function(g){if(g!==this._mode){var m=this._controllerNames.indexOf(g);if(!(m<0)){var y=this._active,_=this._controllerList[m],v=Math.max(y.lastT(),_.lastT());y.recalcMatrix(v),_.setMatrix(v,y.computedMatrix),this._active=_,this._mode=g,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},d.getMode=function(){return this._mode};function p(g){g=g||{};var m=g.eye||[0,0,1],y=g.center||[0,0,0],_=g.up||[0,1,0],v=g.distanceLimits||[0,1/0],x=g.mode||"turntable",S=u(),M=c(),C=f();return S.setDistanceLimits(v[0],v[1]),S.lookAt(0,m,y,_),M.setDistanceLimits(v[0],v[1]),M.lookAt(0,m,y,_),C.setDistanceLimits(v[0],v[1]),C.lookAt(0,m,y,_),new h({turntable:S,orbit:M,matrix:C},x)}},7169(s,l,n){"use strict";var u=typeof WeakMap>"u"?n(1538):WeakMap,c=n(2762),f=n(8116),h=new u;function d(p){var g=h.get(p),m=g&&(g._triangleBuffer.handle||g._triangleBuffer.buffer);if(!m||!p.isBuffer(m)){var y=c(p,new Float32Array([-1,-1,-1,4,4,-1]));g=f(p,[{buffer:y,type:p.FLOAT,size:2}]),g._triangleBuffer=y,h.set(p,g)}g.bind(),p.drawArrays(p.TRIANGLES,0,3),g.unbind()}s.exports=d},1085(s,l,n){var u=n(1371);s.exports=c;function c(f,h,d){h=typeof h=="number"?h:1,d=d||": ";var p=f.split(/\r?
/),g=String(p.length+h-1).length;return p.map(function(m,y){var _=y+h,v=String(_).length,x=u(_,g-v);return x+d+m}).join(`
+`)}},3952(s,l,n){"use strict";s.exports=f;var u=n(3250);function c(h,d){for(var p=new Array(d+1),g=0;g<h.length;++g)p[g]=h[g];for(var g=0;g<=h.length;++g){for(var m=h.length;m<=d;++m){for(var y=new Array(d),_=0;_<d;++_)y[_]=Math.pow(m+1-g,_);p[m]=y}var v=u.apply(void 0,p);if(v)return!0}return!1}function f(h){var d=h.length;if(d===0)return[];if(d===1)return[0];for(var p=h[0].length,g=[h[0]],m=[0],y=1;y<d;++y){if(g.push(h[y]),!c(g,p)){g.pop();continue}if(m.push(y),m.length===p+1)return m}return m}},5995(s,l,n){"use strict";s.exports=f;var u=n(7642),c=n(6037);function f(h,d){return u(d).filter(function(p){for(var g=new Array(p.length),m=0;m<p.length;++m)g[m]=d[p[m]];return c(g)*h<1})}},3502(s,l,n){s.exports=f;var u=n(5995),c=n(9127);function f(h,d){return c(u(h,d))}},6468(s){s.exports=function(n){return atob(n)}},2642(s,l,n){"use strict";s.exports=f;var u=n(727);function c(h){for(var d=0,p=0;p<h.length;++p)d+=h[p];return d}function f(h,d){for(var p=d.length,g=new Array(p+1),m=0;m<p;++m){for(var y=new Array(p+1),_=0;_<=p;++_)y[_]=h[_][m];g[m]=y}g[p]=new Array(p+1);for(var m=0;m<=p;++m)g[p][m]=1;for(var v=new Array(p+1),m=0;m<p;++m)v[m]=d[m];v[p]=1;var x=u(g,v),S=c(x[p+1]);S===0&&(S=1);for(var M=new Array(p+1),m=0;m<=p;++m)M[m]=c(x[m])/S;return M}},7507(s,l){"use strict";l.byteLength=g,l.toByteArray=y,l.fromByteArray=x;for(var n=[],u=[],c=typeof Uint8Array<"u"?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,d=f.length;h<d;++h)n[h]=f[h],u[f.charCodeAt(h)]=h;u[45]=62,u[95]=63;function p(S){var M=S.length;if(M%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var C=S.indexOf("=");C===-1&&(C=M);var w=C===M?0:4-C%4;return[C,w]}function g(S){var M=p(S),C=M[0],w=M[1];return(C+w)*3/4-w}function m(S,M,C){return(M+C)*3/4-C}function y(S){var M,C=p(S),w=C[0],k=C[1],A=new c(m(S,w,k)),b=0,E=k>0?w-4:w,T;for(T=0;T<E;T+=4)M=u[S.charCodeAt(T)]<<18|u[S.charCodeAt(T+1)]<<12|u[S.charCodeAt(T+2)]<<6|u[S.charCodeAt(T+3)],A[b++]=M>>16&255,A[b++]=M>>8&255,A[b++]=M&255;return k===2&&(M=u[S.charCodeAt(T)]<<2|u[S.charCodeAt(T+1)]>>4,A[b++]=M&255),k===1&&(M=u[S.charCodeAt(T)]<<10|u[S.charCodeAt(T+1)]<<4|u[S.charCodeAt(T+2)]>>2,A[b++]=M>>8&255,A[b++]=M&255),A}function _(S){return n[S>>18&63]+n[S>>12&63]+n[S>>6&63]+n[S&63]}function v(S,M,C){for(var w,k=[],A=M;A<C;A+=3)w=(S[A]<<16&16711680)+(S[A+1]<<8&65280)+(S[A+2]&255),k.push(_(w));return k.join("")}function x(S){for(var M,C=S.length,w=C%3,k=[],A=16383,b=0,E=C-w;b<E;b+=A)k.push(v(S,b,b+A>E?E:b+A));return w===1?(M=S[C-1],k.push(n[M>>2]+n[M<<4&63]+"==")):w===2&&(M=(S[C-2]<<8)+S[C-1],k.push(n[M>>10]+n[M>>4&63]+n[M<<2&63]+"=")),k.join("")}},3865(s,l,n){"use strict";var u=n(869);s.exports=c;function c(f,h){return u(f[0].mul(h[1]).add(h[0].mul(f[1])),f[1].mul(h[1]))}},1318(s){"use strict";s.exports=l;function l(n,u){return n[0].mul(u[1]).cmp(u[0].mul(n[1]))}},8697(s,l,n){"use strict";var u=n(869);s.exports=c;function c(f,h){return u(f[0].mul(h[1]),f[1].mul(h[0]))}},7842(s,l,n){"use strict";var u=n(6330),c=n(1533),f=n(2651),h=n(6768),d=n(869),p=n(8697);s.exports=g;function g(m,y){if(u(m))return y?p(m,g(y)):[m[0].clone(),m[1].clone()];var _=0,v,x;if(c(m))v=m.clone();else if(typeof m=="string")v=h(m);else{if(m===0)return[f(0),f(1)];if(m===Math.floor(m))v=f(m);else{for(;m!==Math.floor(m);)m=m*Math.pow(2,256),_-=256;v=f(m)}}if(u(y))v.mul(y[1]),x=y[0].clone();else if(c(y))x=y.clone();else if(typeof y=="string")x=h(y);else if(!y)x=f(1);else if(y===Math.floor(y))x=f(y);else{for(;y!==Math.floor(y);)y=y*Math.pow(2,256),_+=256;x=f(y)}return _>0?v=v.ushln(_):_<0&&(x=x.ushln(-_)),d(v,x)}},6330(s,l,n){"use strict";var u=n(1533);s.exports=c;function c(f){return Array.isArray(f)&&f.length===2&&u(f[0])&&u(f[1])}},5716(s,l,n){"use strict";var u=n(6859);s.exports=c;function c(f){return f.cmp(new u(0))}},1369(s,l,n){"use strict";var u=n(5716);s.exports=c;function c(f){var h=f.length,d=f.words,p=0;if(h===1)p=d[0];else if(h===2)p=d[0]+d[1]*67108864;else for(var g=0;g<h;g++){var m=d[g];p+=m*Math.pow(67108864,g)}return u(f)*p}},4025(s,l,n){"use strict";var u=n(2361),c=n(8828).countTrailingZeros;s.exports=f;function f(h){var d=c(u.lo(h));if(d<32)return d;var p=c(u.hi(h));return p>20?52:p+32}},1533(s,l,n){"use strict";var u=n(6859);s.exports=c;function c(f){return f&&typeof f=="object"&&!!f.words}},2651(s,l,n){"use strict";var u=n(6859),c=n(2361);s.exports=f;function f(h){var d=c.exponent(h);return d<52?new u(h):new u(h*Math.pow(2,52-d)).ushln(d-52)}},869(s,l,n){"use strict";var u=n(2651),c=n(5716);s.exports=f;function f(h,d){var p=c(h),g=c(d);if(p===0)return[u(0),u(1)];if(g===0)return[u(0),u(0)];g<0&&(h=h.neg(),d=d.neg());var m=h.gcd(d);return m.cmpn(1)?[h.div(m),d.div(m)]:[h,d]}},6768(s,l,n){"use strict";var u=n(6859);s.exports=c;function c(f){return new u(f)}},6504(s,l,n){"use strict";var u=n(869);s.exports=c;function c(f,h){return u(f[0].mul(h[0]),f[1].mul(h[1]))}},7721(s,l,n){"use strict";var u=n(5716);s.exports=c;function c(f){return u(f[0])*u(f[1])}},5572(s,l,n){"use strict";var u=n(869);s.exports=c;function c(f,h){return u(f[0].mul(h[1]).sub(f[1].mul(h[0])),f[1].mul(h[1]))}},946(s,l,n){"use strict";var u=n(1369),c=n(4025);s.exports=f;function f(h){var d=h[0],p=h[1];if(d.cmpn(0)===0)return 0;var g=d.abs().divmod(p.abs()),m=g.div,y=u(m),_=g.mod,v=d.negative!==p.negative?-1:1;if(_.cmpn(0)===0)return v*y;if(y){var x=c(y)+4,S=u(_.ushln(x).divRound(p));return v*(y+S*Math.pow(2,-x))}else{var M=p.bitLength()-_.bitLength()+53,S=u(_.ushln(M).divRound(p));return M<1023?v*S*Math.pow(2,-M):(S*=Math.pow(2,-1023),v*S*Math.pow(2,1023-M))}}},2478(s){"use strict";function l(d,p,g,m,y){for(var _=y+1;m<=y;){var v=m+y>>>1,x=d[v],S=g!==void 0?g(x,p):x-p;S>=0?(_=v,y=v-1):m=v+1}return _}function n(d,p,g,m,y){for(var _=y+1;m<=y;){var v=m+y>>>1,x=d[v],S=g!==void 0?g(x,p):x-p;S>0?(_=v,y=v-1):m=v+1}return _}function u(d,p,g,m,y){for(var _=m-1;m<=y;){var v=m+y>>>1,x=d[v],S=g!==void 0?g(x,p):x-p;S<0?(_=v,m=v+1):y=v-1}return _}function c(d,p,g,m,y){for(var _=m-1;m<=y;){var v=m+y>>>1,x=d[v],S=g!==void 0?g(x,p):x-p;S<=0?(_=v,m=v+1):y=v-1}return _}function f(d,p,g,m,y){for(;m<=y;){var _=m+y>>>1,v=d[_],x=g!==void 0?g(v,p):v-p;if(x===0)return _;x<=0?m=_+1:y=_-1}return-1}function h(d,p,g,m,y,_){return typeof g=="function"?_(d,p,g,m===void 0?0:m|0,y===void 0?d.length-1:y|0):_(d,p,void 0,g===void 0?0:g|0,m===void 0?d.length-1:m|0)}s.exports={ge:function(d,p,g,m,y){return h(d,p,g,m,y,l)},gt:function(d,p,g,m,y){return h(d,p,g,m,y,n)},lt:function(d,p,g,m,y){return h(d,p,g,m,y,u)},le:function(d,p,g,m,y){return h(d,p,g,m,y,c)},eq:function(d,p,g,m,y){return h(d,p,g,m,y,f)}}},8828(s,l){"use strict";"use restrict";var n=32;l.INT_BITS=n,l.INT_MAX=2147483647,l.INT_MIN=-1<<n-1,l.sign=function(f){return(f>0)-(f<0)},l.abs=function(f){var h=f>>n-1;return(f^h)-h},l.min=function(f,h){return h^(f^h)&-(f<h)},l.max=function(f,h){return f^(f^h)&-(f<h)},l.isPow2=function(f){return!(f&f-1)&&!!f},l.log2=function(f){var h,d;return h=(f>65535)<<4,f>>>=h,d=(f>255)<<3,f>>>=d,h|=d,d=(f>15)<<2,f>>>=d,h|=d,d=(f>3)<<1,f>>>=d,h|=d,h|f>>1},l.log10=function(f){return f>=1e9?9:f>=1e8?8:f>=1e7?7:f>=1e6?6:f>=1e5?5:f>=1e4?4:f>=1e3?3:f>=100?2:f>=10?1:0},l.popCount=function(f){return f=f-(f>>>1&1431655765),f=(f&858993459)+(f>>>2&858993459),(f+(f>>>4)&252645135)*16843009>>>24};function u(f){var h=32;return f&=-f,f&&h--,f&65535&&(h-=16),f&16711935&&(h-=8),f&252645135&&(h-=4),f&858993459&&(h-=2),f&1431655765&&(h-=1),h}l.countTrailingZeros=u,l.nextPow2=function(f){return f+=f===0,--f,f|=f>>>1,f|=f>>>2,f|=f>>>4,f|=f>>>8,f|=f>>>16,f+1},l.prevPow2=function(f){return f|=f>>>1,f|=f>>>2,f|=f>>>4,f|=f>>>8,f|=f>>>16,f-(f>>>1)},l.parity=function(f){return f^=f>>>16,f^=f>>>8,f^=f>>>4,f&=15,27030>>>f&1};var c=new Array(256);(function(f){for(var h=0;h<256;++h){var d=h,p=h,g=7;for(d>>>=1;d;d>>>=1)p<<=1,p|=d&1,--g;f[h]=p<<g&255}})(c),l.reverse=function(f){return c[f&255]<<24|c[f>>>8&255]<<16|c[f>>>16&255]<<8|c[f>>>24&255]},l.interleave2=function(f,h){return f&=65535,f=(f|f<<8)&16711935,f=(f|f<<4)&252645135,f=(f|f<<2)&858993459,f=(f|f<<1)&1431655765,h&=65535,h=(h|h<<8)&16711935,h=(h|h<<4)&252645135,h=(h|h<<2)&858993459,h=(h|h<<1)&1431655765,f|h<<1},l.deinterleave2=function(f,h){return f=f>>>h&1431655765,f=(f|f>>>1)&858993459,f=(f|f>>>2)&252645135,f=(f|f>>>4)&16711935,f=(f|f>>>16)&65535,f<<16>>16},l.interleave3=function(f,h,d){return f&=1023,f=(f|f<<16)&4278190335,f=(f|f<<8)&251719695,f=(f|f<<4)&3272356035,f=(f|f<<2)&1227133513,h&=1023,h=(h|h<<16)&4278190335,h=(h|h<<8)&251719695,h=(h|h<<4)&3272356035,h=(h|h<<2)&1227133513,f|=h<<1,d&=1023,d=(d|d<<16)&4278190335,d=(d|d<<8)&251719695,d=(d|d<<4)&3272356035,d=(d|d<<2)&1227133513,f|d<<2},l.deinterleave3=function(f,h){return f=f>>>h&1227133513,f=(f|f>>>2)&3272356035,f=(f|f>>>4)&251719695,f=(f|f>>>8)&4278190335,f=(f|f>>>16)&1023,f<<22>>22},l.nextCombination=function(f){var h=f|f-1;return h+1|(~h&-~h)-1>>>u(f)+1}},6859(s,l,n){s=n.nmd(s),(function(u,c){"use strict";function f(I,L){if(!I)throw new Error(L||"Assertion failed")}function h(I,L){I.super_=L;var B=function(){};B.prototype=L.prototype,I.prototype=new B,I.prototype.constructor=I}function d(I,L,B){if(d.isBN(I))return I;this.negative=0,this.words=null,this.length=0,this.red=null,I!==null&&((L==="le"||L==="be")&&(B=L,L=10),this._init(I||0,L||10,B||"be"))}typeof u=="object"?u.exports=d:c.BN=d,d.BN=d,d.wordSize=26;var p;try{typeof window<"u"&&typeof window.Buffer<"u"?p=window.Buffer:p=n(7790).Buffer}catch{}d.isBN=function(L){return L instanceof d?!0:L!==null&&typeof L=="object"&&L.constructor.wordSize===d.wordSize&&Array.isArray(L.words)},d.max=function(L,B){return L.cmp(B)>0?L:B},d.min=function(L,B){return L.cmp(B)<0?L:B},d.prototype._init=function(L,B,O){if(typeof L=="number")return this._initNumber(L,B,O);if(typeof L=="object")return this._initArray(L,B,O);B==="hex"&&(B=16),f(B===(B|0)&&B>=2&&B<=36),L=L.toString().replace(/\s+/g,"");var G=0;L[0]==="-"&&(G++,this.negative=1),G<L.length&&(B===16?this._parseHex(L,G,O):(this._parseBase(L,B,G),O==="le"&&this._initArray(this.toArray(),B,O)))},d.prototype._initNumber=function(L,B,O){L<0&&(this.negative=1,L=-L),L<67108864?(this.words=[L&67108863],this.length=1):L<4503599627370496?(this.words=[L&67108863,L/67108864&67108863],this.length=2):(f(L<9007199254740992),this.words=[L&67108863,L/67108864&67108863,1],this.length=3),O==="le"&&this._initArray(this.toArray(),B,O)},d.prototype._initArray=function(L,B,O){if(f(typeof L.length=="number"),L.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(L.length/3),this.words=new Array(this.length);for(var G=0;G<this.length;G++)this.words[G]=0;var W,X,Z=0;if(O==="be")for(G=L.length-1,W=0;G>=0;G-=3)X=L[G]|L[G-1]<<8|L[G-2]<<16,this.words[W]|=X<<Z&67108863,this.words[W+1]=X>>>26-Z&67108863,Z+=24,Z>=26&&(Z-=26,W++);else if(O==="le")for(G=0,W=0;G<L.length;G+=3)X=L[G]|L[G+1]<<8|L[G+2]<<16,this.words[W]|=X<<Z&67108863,this.words[W+1]=X>>>26-Z&67108863,Z+=24,Z>=26&&(Z-=26,W++);return this.strip()};function g(I,L){var B=I.charCodeAt(L);return B>=65&&B<=70?B-55:B>=97&&B<=102?B-87:B-48&15}function m(I,L,B){var O=g(I,B);return B-1>=L&&(O|=g(I,B-1)<<4),O}d.prototype._parseHex=function(L,B,O){this.length=Math.ceil((L.length-B)/6),this.words=new Array(this.length);for(var G=0;G<this.length;G++)this.words[G]=0;var W=0,X=0,Z;if(O==="be")for(G=L.length-1;G>=B;G-=2)Z=m(L,B,G)<<W,this.words[X]|=Z&67108863,W>=18?(W-=18,X+=1,this.words[X]|=Z>>>26):W+=8;else{var J=L.length-B;for(G=J%2===0?B+1:B;G<L.length;G+=2)Z=m(L,B,G)<<W,this.words[X]|=Z&67108863,W>=18?(W-=18,X+=1,this.words[X]|=Z>>>26):W+=8}this.strip()};function y(I,L,B,O){for(var G=0,W=Math.min(I.length,B),X=L;X<W;X++){var Z=I.charCodeAt(X)-48;G*=O,Z>=49?G+=Z-49+10:Z>=17?G+=Z-17+10:G+=Z}return G}d.prototype._parseBase=function(L,B,O){this.words=[0],this.length=1;for(var G=0,W=1;W<=67108863;W*=B)G++;G--,W=W/B|0;for(var X=L.length-O,Z=X%G,J=Math.min(X,X-Z)+O,N=0,H=O;H<J;H+=G)N=y(L,H,H+G,B),this.imuln(W),this.words[0]+N<67108864?this.words[0]+=N:this._iaddn(N);if(Z!==0){var $=1;for(N=y(L,H,L.length,B),H=0;H<Z;H++)$*=B;this.imuln($),this.words[0]+N<67108864?this.words[0]+=N:this._iaddn(N)}this.strip()},d.prototype.copy=function(L){L.words=new Array(this.length);for(var B=0;B<this.length;B++)L.words[B]=this.words[B];L.length=this.length,L.negative=this.negative,L.red=this.red},d.prototype.clone=function(){var L=new d(null);return this.copy(L),L},d.prototype._expand=function(L){for(;this.length<L;)this.words[this.length++]=0;return this},d.prototype.strip=function(){for(;this.length>1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},d.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},d.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],x=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];d.prototype.toString=function(L,B){L=L||10,B=B|0||1;var O;if(L===16||L==="hex"){O="";for(var G=0,W=0,X=0;X<this.length;X++){var Z=this.words[X],J=((Z<<G|W)&16777215).toString(16);W=Z>>>24-G&16777215,G+=2,G>=26&&(G-=26,X--),W!==0||X!==this.length-1?O=_[6-J.length]+J+O:O=J+O}for(W!==0&&(O=W.toString(16)+O);O.length%B!==0;)O="0"+O;return this.negative!==0&&(O="-"+O),O}if(L===(L|0)&&L>=2&&L<=36){var N=v[L],H=x[L];O="";var $=this.clone();for($.negative=0;!$.isZero();){var U=$.modn(H).toString(L);$=$.idivn(H),$.isZero()?O=U+O:O=_[N-U.length]+U+O}for(this.isZero()&&(O="0"+O);O.length%B!==0;)O="0"+O;return this.negative!==0&&(O="-"+O),O}f(!1,"Base should be between 2 and 36")},d.prototype.toNumber=function(){var L=this.words[0];return this.length===2?L+=this.words[1]*67108864:this.length===3&&this.words[2]===1?L+=4503599627370496+this.words[1]*67108864:this.length>2&&f(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-L:L},d.prototype.toJSON=function(){return this.toString(16)},d.prototype.toBuffer=function(L,B){return f(typeof p<"u"),this.toArrayLike(p,L,B)},d.prototype.toArray=function(L,B){return this.toArrayLike(Array,L,B)},d.prototype.toArrayLike=function(L,B,O){var G=this.byteLength(),W=O||Math.max(1,G);f(G<=W,"byte array longer than desired length"),f(W>0,"Requested array length <= 0"),this.strip();var X=B==="le",Z=new L(W),J,N,H=this.clone();if(X){for(N=0;!H.isZero();N++)J=H.andln(255),H.iushrn(8),Z[N]=J;for(;N<W;N++)Z[N]=0}else{for(N=0;N<W-G;N++)Z[N]=0;for(N=0;!H.isZero();N++)J=H.andln(255),H.iushrn(8),Z[W-N-1]=J}return Z},Math.clz32?d.prototype._countBits=function(L){return 32-Math.clz32(L)}:d.prototype._countBits=function(L){var B=L,O=0;return B>=4096&&(O+=13,B>>>=13),B>=64&&(O+=7,B>>>=7),B>=8&&(O+=4,B>>>=4),B>=2&&(O+=2,B>>>=2),O+B},d.prototype._zeroBits=function(L){if(L===0)return 26;var B=L,O=0;return(B&8191)===0&&(O+=13,B>>>=13),(B&127)===0&&(O+=7,B>>>=7),(B&15)===0&&(O+=4,B>>>=4),(B&3)===0&&(O+=2,B>>>=2),(B&1)===0&&O++,O},d.prototype.bitLength=function(){var L=this.words[this.length-1],B=this._countBits(L);return(this.length-1)*26+B};function S(I){for(var L=new Array(I.bitLength()),B=0;B<L.length;B++){var O=B/26|0,G=B%26;L[B]=(I.words[O]&1<<G)>>>G}return L}d.prototype.zeroBits=function(){if(this.isZero())return 0;for(var L=0,B=0;B<this.length;B++){var O=this._zeroBits(this.words[B]);if(L+=O,O!==26)break}return L},d.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},d.prototype.toTwos=function(L){return this.negative!==0?this.abs().inotn(L).iaddn(1):this.clone()},d.prototype.fromTwos=function(L){return this.testn(L-1)?this.notn(L).iaddn(1).ineg():this.clone()},d.prototype.isNeg=function(){return this.negative!==0},d.prototype.neg=function(){return this.clone().ineg()},d.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},d.prototype.iuor=function(L){for(;this.length<L.length;)this.words[this.length++]=0;for(var B=0;B<L.length;B++)this.words[B]=this.words[B]|L.words[B];return this.strip()},d.prototype.ior=function(L){return f((this.negative|L.negative)===0),this.iuor(L)},d.prototype.or=function(L){return this.length>L.length?this.clone().ior(L):L.clone().ior(this)},d.prototype.uor=function(L){return this.length>L.length?this.clone().iuor(L):L.clone().iuor(this)},d.prototype.iuand=function(L){var B;this.length>L.length?B=L:B=this;for(var O=0;O<B.length;O++)this.words[O]=this.words[O]&L.words[O];return this.length=B.length,this.strip()},d.prototype.iand=function(L){return f((this.negative|L.negative)===0),this.iuand(L)},d.prototype.and=function(L){return this.length>L.length?this.clone().iand(L):L.clone().iand(this)},d.prototype.uand=function(L){return this.length>L.length?this.clone().iuand(L):L.clone().iuand(this)},d.prototype.iuxor=function(L){var B,O;this.length>L.length?(B=this,O=L):(B=L,O=this);for(var G=0;G<O.length;G++)this.words[G]=B.words[G]^O.words[G];if(this!==B)for(;G<B.length;G++)this.words[G]=B.words[G];return this.length=B.length,this.strip()},d.prototype.ixor=function(L){return f((this.negative|L.negative)===0),this.iuxor(L)},d.prototype.xor=function(L){return this.length>L.length?this.clone().ixor(L):L.clone().ixor(this)},d.prototype.uxor=function(L){return this.length>L.length?this.clone().iuxor(L):L.clone().iuxor(this)},d.prototype.inotn=function(L){f(typeof L=="number"&&L>=0);var B=Math.ceil(L/26)|0,O=L%26;this._expand(B),O>0&&B--;for(var G=0;G<B;G++)this.words[G]=~this.words[G]&67108863;for(O>0&&(this.words[G]=~this.words[G]&67108863>>26-O,G++);G<this.length;G++)this.words[G]=0;return this.strip()},d.prototype.notn=function(L){return this.clone().inotn(L)},d.prototype.setn=function(L,B){f(typeof L=="number"&&L>=0);var O=L/26|0,G=L%26;return this._expand(O+1),B?this.words[O]=this.words[O]|1<<G:this.words[O]=this.words[O]&~(1<<G),this.strip()},d.prototype.iadd=function(L){var B;if(this.negative!==0&&L.negative===0)return this.negative=0,B=this.isub(L),this.negative^=1,this._normSign();if(this.negative===0&&L.negative!==0)return L.negative=0,B=this.isub(L),L.negative=1,B._normSign();var O,G;this.length>L.length?(O=this,G=L):(O=L,G=this);for(var W=0,X=0;X<G.length;X++)B=(O.words[X]|0)+(G.words[X]|0)+W,this.words[X]=B&67108863,W=B>>>26;for(;W!==0&&X<O.length;X++)B=(O.words[X]|0)+W,this.words[X]=B&67108863,W=B>>>26;if(this.length=O.length,W!==0)this.words[this.length]=W,this.length++;else if(O!==this)for(;X<O.length;X++)this.words[X]=O.words[X];return this},d.prototype.add=function(L){var B;return L.negative!==0&&this.negative===0?(L.negative=0,B=this.sub(L),L.negative^=1,B):L.negative===0&&this.negative!==0?(this.negative=0,B=L.sub(this),this.negative=1,B):this.length>L.length?this.clone().iadd(L):L.clone().iadd(this)},d.prototype.isub=function(L){if(L.negative!==0){L.negative=0;var B=this.iadd(L);return L.negative=1,B._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(L),this.negative=1,this._normSign();var O=this.cmp(L);if(O===0)return this.negative=0,this.length=1,this.words[0]=0,this;var G,W;O>0?(G=this,W=L):(G=L,W=this);for(var X=0,Z=0;Z<W.length;Z++)B=(G.words[Z]|0)-(W.words[Z]|0)+X,X=B>>26,this.words[Z]=B&67108863;for(;X!==0&&Z<G.length;Z++)B=(G.words[Z]|0)+X,X=B>>26,this.words[Z]=B&67108863;if(X===0&&Z<G.length&&G!==this)for(;Z<G.length;Z++)this.words[Z]=G.words[Z];return this.length=Math.max(this.length,Z),G!==this&&(this.negative=1),this.strip()},d.prototype.sub=function(L){return this.clone().isub(L)};function M(I,L,B){B.negative=L.negative^I.negative;var O=I.length+L.length|0;B.length=O,O=O-1|0;var G=I.words[0]|0,W=L.words[0]|0,X=G*W,Z=X&67108863,J=X/67108864|0;B.words[0]=Z;for(var N=1;N<O;N++){for(var H=J>>>26,$=J&67108863,U=Math.min(N,L.length-1),V=Math.max(0,N-I.length+1);V<=U;V++){var j=N-V|0;G=I.words[j]|0,W=L.words[V]|0,X=G*W+$,H+=X/67108864|0,$=X&67108863}B.words[N]=$|0,J=H|0}return J!==0?B.words[N]=J|0:B.length--,B.strip()}var C=function(L,B,O){var G=L.words,W=B.words,X=O.words,Z=0,J,N,H,$=G[0]|0,U=$&8191,V=$>>>13,j=G[1]|0,q=j&8191,Y=j>>>13,K=G[2]|0,te=K&8191,ne=K>>>13,se=G[3]|0,le=se&8191,ce=se>>>13,pe=G[4]|0,xe=pe&8191,ye=pe>>>13,fe=G[5]|0,ae=fe&8191,ee=fe>>>13,ie=G[6]|0,Q=ie&8191,ue=ie>>>13,ge=G[7]|0,Me=ge&8191,Te=ge>>>13,je=G[8]|0,Ve=je&8191,Ze=je>>>13,Ke=G[9]|0,vt=Ke&8191,xt=Ke>>>13,Pt=W[0]|0,mt=Pt&8191,Mt=Pt>>>13,lt=W[1]|0,qe=lt&8191,Ye=lt>>>13,me=W[2]|0,_e=me&8191,Ae=me>>>13,ke=W[3]|0,Ee=ke&8191,De=ke>>>13,Je=W[4]|0,Ue=Je&8191,at=Je>>>13,rt=W[5]|0,ft=rt&8191,At=rt>>>13,ht=W[6]|0,Gt=ht&8191,fr=ht>>>13,gt=W[7]|0,yt=gt&8191,kt=gt>>>13,Lt=W[8]|0,Ct=Lt&8191,$t=Lt>>>13,mr=W[9]|0,br=mr&8191,Er=mr>>>13;O.negative=L.negative^B.negative,O.length=19,J=Math.imul(U,mt),N=Math.imul(U,Mt),N=N+Math.imul(V,mt)|0,H=Math.imul(V,Mt);var Tr=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Tr>>>26)|0,Tr&=67108863,J=Math.imul(q,mt),N=Math.imul(q,Mt),N=N+Math.imul(Y,mt)|0,H=Math.imul(Y,Mt),J=J+Math.imul(U,qe)|0,N=N+Math.imul(U,Ye)|0,N=N+Math.imul(V,qe)|0,H=H+Math.imul(V,Ye)|0;var Ur=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Ur>>>26)|0,Ur&=67108863,J=Math.imul(te,mt),N=Math.imul(te,Mt),N=N+Math.imul(ne,mt)|0,H=Math.imul(ne,Mt),J=J+Math.imul(q,qe)|0,N=N+Math.imul(q,Ye)|0,N=N+Math.imul(Y,qe)|0,H=H+Math.imul(Y,Ye)|0,J=J+Math.imul(U,_e)|0,N=N+Math.imul(U,Ae)|0,N=N+Math.imul(V,_e)|0,H=H+Math.imul(V,Ae)|0;var Ai=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Ai>>>26)|0,Ai&=67108863,J=Math.imul(le,mt),N=Math.imul(le,Mt),N=N+Math.imul(ce,mt)|0,H=Math.imul(ce,Mt),J=J+Math.imul(te,qe)|0,N=N+Math.imul(te,Ye)|0,N=N+Math.imul(ne,qe)|0,H=H+Math.imul(ne,Ye)|0,J=J+Math.imul(q,_e)|0,N=N+Math.imul(q,Ae)|0,N=N+Math.imul(Y,_e)|0,H=H+Math.imul(Y,Ae)|0,J=J+Math.imul(U,Ee)|0,N=N+Math.imul(U,De)|0,N=N+Math.imul(V,Ee)|0,H=H+Math.imul(V,De)|0;var oi=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(oi>>>26)|0,oi&=67108863,J=Math.imul(xe,mt),N=Math.imul(xe,Mt),N=N+Math.imul(ye,mt)|0,H=Math.imul(ye,Mt),J=J+Math.imul(le,qe)|0,N=N+Math.imul(le,Ye)|0,N=N+Math.imul(ce,qe)|0,H=H+Math.imul(ce,Ye)|0,J=J+Math.imul(te,_e)|0,N=N+Math.imul(te,Ae)|0,N=N+Math.imul(ne,_e)|0,H=H+Math.imul(ne,Ae)|0,J=J+Math.imul(q,Ee)|0,N=N+Math.imul(q,De)|0,N=N+Math.imul(Y,Ee)|0,H=H+Math.imul(Y,De)|0,J=J+Math.imul(U,Ue)|0,N=N+Math.imul(U,at)|0,N=N+Math.imul(V,Ue)|0,H=H+Math.imul(V,at)|0;var Qr=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Qr>>>26)|0,Qr&=67108863,J=Math.imul(ae,mt),N=Math.imul(ae,Mt),N=N+Math.imul(ee,mt)|0,H=Math.imul(ee,Mt),J=J+Math.imul(xe,qe)|0,N=N+Math.imul(xe,Ye)|0,N=N+Math.imul(ye,qe)|0,H=H+Math.imul(ye,Ye)|0,J=J+Math.imul(le,_e)|0,N=N+Math.imul(le,Ae)|0,N=N+Math.imul(ce,_e)|0,H=H+Math.imul(ce,Ae)|0,J=J+Math.imul(te,Ee)|0,N=N+Math.imul(te,De)|0,N=N+Math.imul(ne,Ee)|0,H=H+Math.imul(ne,De)|0,J=J+Math.imul(q,Ue)|0,N=N+Math.imul(q,at)|0,N=N+Math.imul(Y,Ue)|0,H=H+Math.imul(Y,at)|0,J=J+Math.imul(U,ft)|0,N=N+Math.imul(U,At)|0,N=N+Math.imul(V,ft)|0,H=H+Math.imul(V,At)|0;var ea=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(ea>>>26)|0,ea&=67108863,J=Math.imul(Q,mt),N=Math.imul(Q,Mt),N=N+Math.imul(ue,mt)|0,H=Math.imul(ue,Mt),J=J+Math.imul(ae,qe)|0,N=N+Math.imul(ae,Ye)|0,N=N+Math.imul(ee,qe)|0,H=H+Math.imul(ee,Ye)|0,J=J+Math.imul(xe,_e)|0,N=N+Math.imul(xe,Ae)|0,N=N+Math.imul(ye,_e)|0,H=H+Math.imul(ye,Ae)|0,J=J+Math.imul(le,Ee)|0,N=N+Math.imul(le,De)|0,N=N+Math.imul(ce,Ee)|0,H=H+Math.imul(ce,De)|0,J=J+Math.imul(te,Ue)|0,N=N+Math.imul(te,at)|0,N=N+Math.imul(ne,Ue)|0,H=H+Math.imul(ne,at)|0,J=J+Math.imul(q,ft)|0,N=N+Math.imul(q,At)|0,N=N+Math.imul(Y,ft)|0,H=H+Math.imul(Y,At)|0,J=J+Math.imul(U,Gt)|0,N=N+Math.imul(U,fr)|0,N=N+Math.imul(V,Gt)|0,H=H+Math.imul(V,fr)|0;var $i=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+($i>>>26)|0,$i&=67108863,J=Math.imul(Me,mt),N=Math.imul(Me,Mt),N=N+Math.imul(Te,mt)|0,H=Math.imul(Te,Mt),J=J+Math.imul(Q,qe)|0,N=N+Math.imul(Q,Ye)|0,N=N+Math.imul(ue,qe)|0,H=H+Math.imul(ue,Ye)|0,J=J+Math.imul(ae,_e)|0,N=N+Math.imul(ae,Ae)|0,N=N+Math.imul(ee,_e)|0,H=H+Math.imul(ee,Ae)|0,J=J+Math.imul(xe,Ee)|0,N=N+Math.imul(xe,De)|0,N=N+Math.imul(ye,Ee)|0,H=H+Math.imul(ye,De)|0,J=J+Math.imul(le,Ue)|0,N=N+Math.imul(le,at)|0,N=N+Math.imul(ce,Ue)|0,H=H+Math.imul(ce,at)|0,J=J+Math.imul(te,ft)|0,N=N+Math.imul(te,At)|0,N=N+Math.imul(ne,ft)|0,H=H+Math.imul(ne,At)|0,J=J+Math.imul(q,Gt)|0,N=N+Math.imul(q,fr)|0,N=N+Math.imul(Y,Gt)|0,H=H+Math.imul(Y,fr)|0,J=J+Math.imul(U,yt)|0,N=N+Math.imul(U,kt)|0,N=N+Math.imul(V,yt)|0,H=H+Math.imul(V,kt)|0;var ja=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(ja>>>26)|0,ja&=67108863,J=Math.imul(Ve,mt),N=Math.imul(Ve,Mt),N=N+Math.imul(Ze,mt)|0,H=Math.imul(Ze,Mt),J=J+Math.imul(Me,qe)|0,N=N+Math.imul(Me,Ye)|0,N=N+Math.imul(Te,qe)|0,H=H+Math.imul(Te,Ye)|0,J=J+Math.imul(Q,_e)|0,N=N+Math.imul(Q,Ae)|0,N=N+Math.imul(ue,_e)|0,H=H+Math.imul(ue,Ae)|0,J=J+Math.imul(ae,Ee)|0,N=N+Math.imul(ae,De)|0,N=N+Math.imul(ee,Ee)|0,H=H+Math.imul(ee,De)|0,J=J+Math.imul(xe,Ue)|0,N=N+Math.imul(xe,at)|0,N=N+Math.imul(ye,Ue)|0,H=H+Math.imul(ye,at)|0,J=J+Math.imul(le,ft)|0,N=N+Math.imul(le,At)|0,N=N+Math.imul(ce,ft)|0,H=H+Math.imul(ce,At)|0,J=J+Math.imul(te,Gt)|0,N=N+Math.imul(te,fr)|0,N=N+Math.imul(ne,Gt)|0,H=H+Math.imul(ne,fr)|0,J=J+Math.imul(q,yt)|0,N=N+Math.imul(q,kt)|0,N=N+Math.imul(Y,yt)|0,H=H+Math.imul(Y,kt)|0,J=J+Math.imul(U,Ct)|0,N=N+Math.imul(U,$t)|0,N=N+Math.imul(V,Ct)|0,H=H+Math.imul(V,$t)|0;var ya=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(ya>>>26)|0,ya&=67108863,J=Math.imul(vt,mt),N=Math.imul(vt,Mt),N=N+Math.imul(xt,mt)|0,H=Math.imul(xt,Mt),J=J+Math.imul(Ve,qe)|0,N=N+Math.imul(Ve,Ye)|0,N=N+Math.imul(Ze,qe)|0,H=H+Math.imul(Ze,Ye)|0,J=J+Math.imul(Me,_e)|0,N=N+Math.imul(Me,Ae)|0,N=N+Math.imul(Te,_e)|0,H=H+Math.imul(Te,Ae)|0,J=J+Math.imul(Q,Ee)|0,N=N+Math.imul(Q,De)|0,N=N+Math.imul(ue,Ee)|0,H=H+Math.imul(ue,De)|0,J=J+Math.imul(ae,Ue)|0,N=N+Math.imul(ae,at)|0,N=N+Math.imul(ee,Ue)|0,H=H+Math.imul(ee,at)|0,J=J+Math.imul(xe,ft)|0,N=N+Math.imul(xe,At)|0,N=N+Math.imul(ye,ft)|0,H=H+Math.imul(ye,At)|0,J=J+Math.imul(le,Gt)|0,N=N+Math.imul(le,fr)|0,N=N+Math.imul(ce,Gt)|0,H=H+Math.imul(ce,fr)|0,J=J+Math.imul(te,yt)|0,N=N+Math.imul(te,kt)|0,N=N+Math.imul(ne,yt)|0,H=H+Math.imul(ne,kt)|0,J=J+Math.imul(q,Ct)|0,N=N+Math.imul(q,$t)|0,N=N+Math.imul(Y,Ct)|0,H=H+Math.imul(Y,$t)|0,J=J+Math.imul(U,br)|0,N=N+Math.imul(U,Er)|0,N=N+Math.imul(V,br)|0,H=H+Math.imul(V,Er)|0;var pa=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(pa>>>26)|0,pa&=67108863,J=Math.imul(vt,qe),N=Math.imul(vt,Ye),N=N+Math.imul(xt,qe)|0,H=Math.imul(xt,Ye),J=J+Math.imul(Ve,_e)|0,N=N+Math.imul(Ve,Ae)|0,N=N+Math.imul(Ze,_e)|0,H=H+Math.imul(Ze,Ae)|0,J=J+Math.imul(Me,Ee)|0,N=N+Math.imul(Me,De)|0,N=N+Math.imul(Te,Ee)|0,H=H+Math.imul(Te,De)|0,J=J+Math.imul(Q,Ue)|0,N=N+Math.imul(Q,at)|0,N=N+Math.imul(ue,Ue)|0,H=H+Math.imul(ue,at)|0,J=J+Math.imul(ae,ft)|0,N=N+Math.imul(ae,At)|0,N=N+Math.imul(ee,ft)|0,H=H+Math.imul(ee,At)|0,J=J+Math.imul(xe,Gt)|0,N=N+Math.imul(xe,fr)|0,N=N+Math.imul(ye,Gt)|0,H=H+Math.imul(ye,fr)|0,J=J+Math.imul(le,yt)|0,N=N+Math.imul(le,kt)|0,N=N+Math.imul(ce,yt)|0,H=H+Math.imul(ce,kt)|0,J=J+Math.imul(te,Ct)|0,N=N+Math.imul(te,$t)|0,N=N+Math.imul(ne,Ct)|0,H=H+Math.imul(ne,$t)|0,J=J+Math.imul(q,br)|0,N=N+Math.imul(q,Er)|0,N=N+Math.imul(Y,br)|0,H=H+Math.imul(Y,Er)|0;var xi=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(xi>>>26)|0,xi&=67108863,J=Math.imul(vt,_e),N=Math.imul(vt,Ae),N=N+Math.imul(xt,_e)|0,H=Math.imul(xt,Ae),J=J+Math.imul(Ve,Ee)|0,N=N+Math.imul(Ve,De)|0,N=N+Math.imul(Ze,Ee)|0,H=H+Math.imul(Ze,De)|0,J=J+Math.imul(Me,Ue)|0,N=N+Math.imul(Me,at)|0,N=N+Math.imul(Te,Ue)|0,H=H+Math.imul(Te,at)|0,J=J+Math.imul(Q,ft)|0,N=N+Math.imul(Q,At)|0,N=N+Math.imul(ue,ft)|0,H=H+Math.imul(ue,At)|0,J=J+Math.imul(ae,Gt)|0,N=N+Math.imul(ae,fr)|0,N=N+Math.imul(ee,Gt)|0,H=H+Math.imul(ee,fr)|0,J=J+Math.imul(xe,yt)|0,N=N+Math.imul(xe,kt)|0,N=N+Math.imul(ye,yt)|0,H=H+Math.imul(ye,kt)|0,J=J+Math.imul(le,Ct)|0,N=N+Math.imul(le,$t)|0,N=N+Math.imul(ce,Ct)|0,H=H+Math.imul(ce,$t)|0,J=J+Math.imul(te,br)|0,N=N+Math.imul(te,Er)|0,N=N+Math.imul(ne,br)|0,H=H+Math.imul(ne,Er)|0;var bi=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(bi>>>26)|0,bi&=67108863,J=Math.imul(vt,Ee),N=Math.imul(vt,De),N=N+Math.imul(xt,Ee)|0,H=Math.imul(xt,De),J=J+Math.imul(Ve,Ue)|0,N=N+Math.imul(Ve,at)|0,N=N+Math.imul(Ze,Ue)|0,H=H+Math.imul(Ze,at)|0,J=J+Math.imul(Me,ft)|0,N=N+Math.imul(Me,At)|0,N=N+Math.imul(Te,ft)|0,H=H+Math.imul(Te,At)|0,J=J+Math.imul(Q,Gt)|0,N=N+Math.imul(Q,fr)|0,N=N+Math.imul(ue,Gt)|0,H=H+Math.imul(ue,fr)|0,J=J+Math.imul(ae,yt)|0,N=N+Math.imul(ae,kt)|0,N=N+Math.imul(ee,yt)|0,H=H+Math.imul(ee,kt)|0,J=J+Math.imul(xe,Ct)|0,N=N+Math.imul(xe,$t)|0,N=N+Math.imul(ye,Ct)|0,H=H+Math.imul(ye,$t)|0,J=J+Math.imul(le,br)|0,N=N+Math.imul(le,Er)|0,N=N+Math.imul(ce,br)|0,H=H+Math.imul(ce,Er)|0;var Ua=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Ua>>>26)|0,Ua&=67108863,J=Math.imul(vt,Ue),N=Math.imul(vt,at),N=N+Math.imul(xt,Ue)|0,H=Math.imul(xt,at),J=J+Math.imul(Ve,ft)|0,N=N+Math.imul(Ve,At)|0,N=N+Math.imul(Ze,ft)|0,H=H+Math.imul(Ze,At)|0,J=J+Math.imul(Me,Gt)|0,N=N+Math.imul(Me,fr)|0,N=N+Math.imul(Te,Gt)|0,H=H+Math.imul(Te,fr)|0,J=J+Math.imul(Q,yt)|0,N=N+Math.imul(Q,kt)|0,N=N+Math.imul(ue,yt)|0,H=H+Math.imul(ue,kt)|0,J=J+Math.imul(ae,Ct)|0,N=N+Math.imul(ae,$t)|0,N=N+Math.imul(ee,Ct)|0,H=H+Math.imul(ee,$t)|0,J=J+Math.imul(xe,br)|0,N=N+Math.imul(xe,Er)|0,N=N+Math.imul(ye,br)|0,H=H+Math.imul(ye,Er)|0;var dn=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(dn>>>26)|0,dn&=67108863,J=Math.imul(vt,ft),N=Math.imul(vt,At),N=N+Math.imul(xt,ft)|0,H=Math.imul(xt,At),J=J+Math.imul(Ve,Gt)|0,N=N+Math.imul(Ve,fr)|0,N=N+Math.imul(Ze,Gt)|0,H=H+Math.imul(Ze,fr)|0,J=J+Math.imul(Me,yt)|0,N=N+Math.imul(Me,kt)|0,N=N+Math.imul(Te,yt)|0,H=H+Math.imul(Te,kt)|0,J=J+Math.imul(Q,Ct)|0,N=N+Math.imul(Q,$t)|0,N=N+Math.imul(ue,Ct)|0,H=H+Math.imul(ue,$t)|0,J=J+Math.imul(ae,br)|0,N=N+Math.imul(ae,Er)|0,N=N+Math.imul(ee,br)|0,H=H+Math.imul(ee,Er)|0;var pi=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(pi>>>26)|0,pi&=67108863,J=Math.imul(vt,Gt),N=Math.imul(vt,fr),N=N+Math.imul(xt,Gt)|0,H=Math.imul(xt,fr),J=J+Math.imul(Ve,yt)|0,N=N+Math.imul(Ve,kt)|0,N=N+Math.imul(Ze,yt)|0,H=H+Math.imul(Ze,kt)|0,J=J+Math.imul(Me,Ct)|0,N=N+Math.imul(Me,$t)|0,N=N+Math.imul(Te,Ct)|0,H=H+Math.imul(Te,$t)|0,J=J+Math.imul(Q,br)|0,N=N+Math.imul(Q,Er)|0,N=N+Math.imul(ue,br)|0,H=H+Math.imul(ue,Er)|0;var Jr=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Jr>>>26)|0,Jr&=67108863,J=Math.imul(vt,yt),N=Math.imul(vt,kt),N=N+Math.imul(xt,yt)|0,H=Math.imul(xt,kt),J=J+Math.imul(Ve,Ct)|0,N=N+Math.imul(Ve,$t)|0,N=N+Math.imul(Ze,Ct)|0,H=H+Math.imul(Ze,$t)|0,J=J+Math.imul(Me,br)|0,N=N+Math.imul(Me,Er)|0,N=N+Math.imul(Te,br)|0,H=H+Math.imul(Te,Er)|0;var Be=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Be>>>26)|0,Be&=67108863,J=Math.imul(vt,Ct),N=Math.imul(vt,$t),N=N+Math.imul(xt,Ct)|0,H=Math.imul(xt,$t),J=J+Math.imul(Ve,br)|0,N=N+Math.imul(Ve,Er)|0,N=N+Math.imul(Ze,br)|0,H=H+Math.imul(Ze,Er)|0;var Fe=(Z+J|0)+((N&8191)<<13)|0;Z=(H+(N>>>13)|0)+(Fe>>>26)|0,Fe&=67108863,J=Math.imul(vt,br),N=Math.imul(vt,Er),N=N+Math.imul(xt,br)|0,H=Math.imul(xt,Er);var Et=(Z+J|0)+((N&8191)<<13)|0;return Z=(H+(N>>>13)|0)+(Et>>>26)|0,Et&=67108863,X[0]=Tr,X[1]=Ur,X[2]=Ai,X[3]=oi,X[4]=Qr,X[5]=ea,X[6]=$i,X[7]=ja,X[8]=ya,X[9]=pa,X[10]=xi,X[11]=bi,X[12]=Ua,X[13]=dn,X[14]=pi,X[15]=Jr,X[16]=Be,X[17]=Fe,X[18]=Et,Z!==0&&(X[19]=Z,O.length++),O};Math.imul||(C=M);function w(I,L,B){B.negative=L.negative^I.negative,B.length=I.length+L.length;for(var O=0,G=0,W=0;W<B.length-1;W++){var X=G;G=0;for(var Z=O&67108863,J=Math.min(W,L.length-1),N=Math.max(0,W-I.length+1);N<=J;N++){var H=W-N,$=I.words[H]|0,U=L.words[N]|0,V=$*U,j=V&67108863;X=X+(V/67108864|0)|0,j=j+Z|0,Z=j&67108863,X=X+(j>>>26)|0,G+=X>>>26,X&=67108863}B.words[W]=Z,O=X,X=G}return O!==0?B.words[W]=O:B.length--,B.strip()}function k(I,L,B){var O=new A;return O.mulp(I,L,B)}d.prototype.mulTo=function(L,B){var O,G=this.length+L.length;return this.length===10&&L.length===10?O=C(this,L,B):G<63?O=M(this,L,B):G<1024?O=w(this,L,B):O=k(this,L,B),O};function A(I,L){this.x=I,this.y=L}A.prototype.makeRBT=function(L){for(var B=new Array(L),O=d.prototype._countBits(L)-1,G=0;G<L;G++)B[G]=this.revBin(G,O,L);return B},A.prototype.revBin=function(L,B,O){if(L===0||L===O-1)return L;for(var G=0,W=0;W<B;W++)G|=(L&1)<<B-W-1,L>>=1;return G},A.prototype.permute=function(L,B,O,G,W,X){for(var Z=0;Z<X;Z++)G[Z]=B[L[Z]],W[Z]=O[L[Z]]},A.prototype.transform=function(L,B,O,G,W,X){this.permute(X,L,B,O,G,W);for(var Z=1;Z<W;Z<<=1)for(var J=Z<<1,N=Math.cos(2*Math.PI/J),H=Math.sin(2*Math.PI/J),$=0;$<W;$+=J)for(var U=N,V=H,j=0;j<Z;j++){var q=O[$+j],Y=G[$+j],K=O[$+j+Z],te=G[$+j+Z],ne=U*K-V*te;te=U*te+V*K,K=ne,O[$+j]=q+K,G[$+j]=Y+te,O[$+j+Z]=q-K,G[$+j+Z]=Y-te,j!==J&&(ne=N*U-H*V,V=N*V+H*U,U=ne)}},A.prototype.guessLen13b=function(L,B){var O=Math.max(B,L)|1,G=O&1,W=0;for(O=O/2|0;O;O=O>>>1)W++;return 1<<W+1+G},A.prototype.conjugate=function(L,B,O){if(!(O<=1))for(var G=0;G<O/2;G++){var W=L[G];L[G]=L[O-G-1],L[O-G-1]=W,W=B[G],B[G]=-B[O-G-1],B[O-G-1]=-W}},A.prototype.normalize13b=function(L,B){for(var O=0,G=0;G<B/2;G++){var W=Math.round(L[2*G+1]/B)*8192+Math.round(L[2*G]/B)+O;L[G]=W&67108863,W<67108864?O=0:O=W/67108864|0}return L},A.prototype.convert13b=function(L,B,O,G){for(var W=0,X=0;X<B;X++)W=W+(L[X]|0),O[2*X]=W&8191,W=W>>>13,O[2*X+1]=W&8191,W=W>>>13;for(X=2*B;X<G;++X)O[X]=0;f(W===0),f((W&-8192)===0)},A.prototype.stub=function(L){for(var B=new Array(L),O=0;O<L;O++)B[O]=0;return B},A.prototype.mulp=function(L,B,O){var G=2*this.guessLen13b(L.length,B.length),W=this.makeRBT(G),X=this.stub(G),Z=new Array(G),J=new Array(G),N=new Array(G),H=new Array(G),$=new Array(G),U=new Array(G),V=O.words;V.length=G,this.convert13b(L.words,L.length,Z,G),this.convert13b(B.words,B.length,H,G),this.transform(Z,X,J,N,G,W),this.transform(H,X,$,U,G,W);for(var j=0;j<G;j++){var q=J[j]*$[j]-N[j]*U[j];N[j]=J[j]*U[j]+N[j]*$[j],J[j]=q}return this.conjugate(J,N,G),this.transform(J,N,V,X,G,W),this.conjugate(V,X,G),this.normalize13b(V,G),O.negative=L.negative^B.negative,O.length=L.length+B.length,O.strip()},d.prototype.mul=function(L){var B=new d(null);return B.words=new Array(this.length+L.length),this.mulTo(L,B)},d.prototype.mulf=function(L){var B=new d(null);return B.words=new Array(this.length+L.length),k(this,L,B)},d.prototype.imul=function(L){return this.clone().mulTo(L,this)},d.prototype.imuln=function(L){f(typeof L=="number"),f(L<67108864);for(var B=0,O=0;O<this.length;O++){var G=(this.words[O]|0)*L,W=(G&67108863)+(B&67108863);B>>=26,B+=G/67108864|0,B+=W>>>26,this.words[O]=W&67108863}return B!==0&&(this.words[O]=B,this.length++),L===0&&(this.length=1,this._normSign()),this},d.prototype.muln=function(L){return this.clone().imuln(L)},d.prototype.sqr=function(){return this.mul(this)},d.prototype.isqr=function(){return this.imul(this.clone())},d.prototype.pow=function(L){var B=S(L);if(B.length===0)return new d(1);for(var O=this,G=0;G<B.length&&B[G]===0;G++,O=O.sqr());if(++G<B.length)for(var W=O.sqr();G<B.length;G++,W=W.sqr())B[G]!==0&&(O=O.mul(W));return O},d.prototype.iushln=function(L){f(typeof L=="number"&&L>=0);var B=L%26,O=(L-B)/26,G=67108863>>>26-B<<26-B,W;if(B!==0){var X=0;for(W=0;W<this.length;W++){var Z=this.words[W]&G,J=(this.words[W]|0)-Z<<B;this.words[W]=J|X,X=Z>>>26-B}X&&(this.words[W]=X,this.length++)}if(O!==0){for(W=this.length-1;W>=0;W--)this.words[W+O]=this.words[W];for(W=0;W<O;W++)this.words[W]=0;this.length+=O}return this.strip()},d.prototype.ishln=function(L){return f(this.negative===0),this.iushln(L)},d.prototype.iushrn=function(L,B,O){f(typeof L=="number"&&L>=0);var G;B?G=(B-B%26)/26:G=0;var W=L%26,X=Math.min((L-W)/26,this.length),Z=67108863^67108863>>>W<<W,J=O;if(G-=X,G=Math.max(0,G),J){for(var N=0;N<X;N++)J.words[N]=this.words[N];J.length=X}if(X!==0)if(this.length>X)for(this.length-=X,N=0;N<this.length;N++)this.words[N]=this.words[N+X];else this.words[0]=0,this.length=1;var H=0;for(N=this.length-1;N>=0&&(H!==0||N>=G);N--){var $=this.words[N]|0;this.words[N]=H<<26-W|$>>>W,H=$&Z}return J&&H!==0&&(J.words[J.length++]=H),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},d.prototype.ishrn=function(L,B,O){return f(this.negative===0),this.iushrn(L,B,O)},d.prototype.shln=function(L){return this.clone().ishln(L)},d.prototype.ushln=function(L){return this.clone().iushln(L)},d.prototype.shrn=function(L){return this.clone().ishrn(L)},d.prototype.ushrn=function(L){return this.clone().iushrn(L)},d.prototype.testn=function(L){f(typeof L=="number"&&L>=0);var B=L%26,O=(L-B)/26,G=1<<B;if(this.length<=O)return!1;var W=this.words[O];return!!(W&G)},d.prototype.imaskn=function(L){f(typeof L=="number"&&L>=0);var B=L%26,O=(L-B)/26;if(f(this.negative===0,"imaskn works only with positive numbers"),this.length<=O)return this;if(B!==0&&O++,this.length=Math.min(O,this.length),B!==0){var G=67108863^67108863>>>B<<B;this.words[this.length-1]&=G}return this.length===0&&(this.words[0]=0,this.length=1),this.strip()},d.prototype.maskn=function(L){return this.clone().imaskn(L)},d.prototype.iaddn=function(L){return f(typeof L=="number"),f(L<67108864),L<0?this.isubn(-L):this.negative!==0?this.length===1&&(this.words[0]|0)<L?(this.words[0]=L-(this.words[0]|0),this.negative=0,this):(this.negative=0,this.isubn(L),this.negative=1,this):this._iaddn(L)},d.prototype._iaddn=function(L){this.words[0]+=L;for(var B=0;B<this.length&&this.words[B]>=67108864;B++)this.words[B]-=67108864,B===this.length-1?this.words[B+1]=1:this.words[B+1]++;return this.length=Math.max(this.length,B+1),this},d.prototype.isubn=function(L){if(f(typeof L=="number"),f(L<67108864),L<0)return this.iaddn(-L);if(this.negative!==0)return this.negative=0,this.iaddn(L),this.negative=1,this;if(this.words[0]-=L,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var B=0;B<this.length&&this.words[B]<0;B++)this.words[B]+=67108864,this.words[B+1]-=1;return this.strip()},d.prototype.addn=function(L){return this.clone().iaddn(L)},d.prototype.subn=function(L){return this.clone().isubn(L)},d.prototype.iabs=function(){return this.negative=0,this},d.prototype.abs=function(){return this.clone().iabs()},d.prototype._ishlnsubmul=function(L,B,O){var G=L.length+O,W;this._expand(G);var X,Z=0;for(W=0;W<L.length;W++){X=(this.words[W+O]|0)+Z;var J=(L.words[W]|0)*B;X-=J&67108863,Z=(X>>26)-(J/67108864|0),this.words[W+O]=X&67108863}for(;W<this.length-O;W++)X=(this.words[W+O]|0)+Z,Z=X>>26,this.words[W+O]=X&67108863;if(Z===0)return this.strip();for(f(Z===-1),Z=0,W=0;W<this.length;W++)X=-(this.words[W]|0)+Z,Z=X>>26,this.words[W]=X&67108863;return this.negative=1,this.strip()},d.prototype._wordDiv=function(L,B){var O=this.length-L.length,G=this.clone(),W=L,X=W.words[W.length-1]|0,Z=this._countBits(X);O=26-Z,O!==0&&(W=W.ushln(O),G.iushln(O),X=W.words[W.length-1]|0);var J=G.length-W.length,N;if(B!=="mod"){N=new d(null),N.length=J+1,N.words=new Array(N.length);for(var H=0;H<N.length;H++)N.words[H]=0}var $=G.clone()._ishlnsubmul(W,1,J);$.negative===0&&(G=$,N&&(N.words[J]=1));for(var U=J-1;U>=0;U--){var V=(G.words[W.length+U]|0)*67108864+(G.words[W.length+U-1]|0);for(V=Math.min(V/X|0,67108863),G._ishlnsubmul(W,V,U);G.negative!==0;)V--,G.negative=0,G._ishlnsubmul(W,1,U),G.isZero()||(G.negative^=1);N&&(N.words[U]=V)}return N&&N.strip(),G.strip(),B!=="div"&&O!==0&&G.iushrn(O),{div:N||null,mod:G}},d.prototype.divmod=function(L,B,O){if(f(!L.isZero()),this.isZero())return{div:new d(0),mod:new d(0)};var G,W,X;return this.negative!==0&&L.negative===0?(X=this.neg().divmod(L,B),B!=="mod"&&(G=X.div.neg()),B!=="div"&&(W=X.mod.neg(),O&&W.negative!==0&&W.iadd(L)),{div:G,mod:W}):this.negative===0&&L.negative!==0?(X=this.divmod(L.neg(),B),B!=="mod"&&(G=X.div.neg()),{div:G,mod:X.mod}):(this.negative&L.negative)!==0?(X=this.neg().divmod(L.neg(),B),B!=="div"&&(W=X.mod.neg(),O&&W.negative!==0&&W.isub(L)),{div:X.div,mod:W}):L.length>this.length||this.cmp(L)<0?{div:new d(0),mod:this}:L.length===1?B==="div"?{div:this.divn(L.words[0]),mod:null}:B==="mod"?{div:null,mod:new d(this.modn(L.words[0]))}:{div:this.divn(L.words[0]),mod:new d(this.modn(L.words[0]))}:this._wordDiv(L,B)},d.prototype.div=function(L){return this.divmod(L,"div",!1).div},d.prototype.mod=function(L){return this.divmod(L,"mod",!1).mod},d.prototype.umod=function(L){return this.divmod(L,"mod",!0).mod},d.prototype.divRound=function(L){var B=this.divmod(L);if(B.mod.isZero())return B.div;var O=B.mod.abs(),G=L.abs().iushrn(1),W=L.words[0]&1,X=O.cmp(G);if(X<0||W===1&&X===0)return B.div;var Z=new d(1);return Z.negative=this.negative^L.negative,B.div.iadd(Z)},d.prototype.modn=function(L){f(L<=67108863);for(var B=(1<<26)%L,O=0,G=this.length-1;G>=0;G--)O=(B*O+(this.words[G]|0))%L;return O},d.prototype.idivn=function(L){f(L<=67108863);for(var B=0,O=this.length-1;O>=0;O--){var G=(this.words[O]|0)+B*67108864;this.words[O]=G/L|0,B=G%L}return this.strip()},d.prototype.divn=function(L){return this.clone().idivn(L)},d.prototype.egcd=function(L){f(L.negative===0),f(!L.isZero());var B=this,O=L.clone();B.negative!==0?B=B.umod(L):B=B.clone();for(var G=new d(1),W=new d(0),X=new d(0),Z=new d(1),J=0;B.isEven()&&O.isEven();)B.iushrn(1),O.iushrn(1),++J;for(var N=O.clone(),H=B.clone();!B.isZero();){for(var $=0,U=1;(B.words[0]&U)===0&&$<26;++$,U<<=1);if($>0)for(B.iushrn($);$-- >0;)(G.isOdd()||W.isOdd())&&(G.iadd(N),W.isub(H)),G.iushrn(1),W.iushrn(1);for(var V=0,j=1;(O.words[0]&j)===0&&V<26;++V,j<<=1);if(V>0)for(O.iushrn(V);V-- >0;)(X.isOdd()||Z.isOdd())&&(X.iadd(N),Z.isub(H)),X.iushrn(1),Z.iushrn(1);B.cmp(O)>=0?(B.isub(O),G.isub(X),W.isub(Z)):(O.isub(B),X.isub(G),Z.isub(W))}return{a:X,b:Z,gcd:O.iushln(J)}},d.prototype._invmp=function(L){f(L.negative===0),f(!L.isZero());var B=this,O=L.clone();B.negative!==0?B=B.umod(L):B=B.clone();for(var G=new d(1),W=new d(0),X=O.clone();B.cmpn(1)>0&&O.cmpn(1)>0;){for(var Z=0,J=1;(B.words[0]&J)===0&&Z<26;++Z,J<<=1);if(Z>0)for(B.iushrn(Z);Z-- >0;)G.isOdd()&&G.iadd(X),G.iushrn(1);for(var N=0,H=1;(O.words[0]&H)===0&&N<26;++N,H<<=1);if(N>0)for(O.iushrn(N);N-- >0;)W.isOdd()&&W.iadd(X),W.iushrn(1);B.cmp(O)>=0?(B.isub(O),G.isub(W)):(O.isub(B),W.isub(G))}var $;return B.cmpn(1)===0?$=G:$=W,$.cmpn(0)<0&&$.iadd(L),$},d.prototype.gcd=function(L){if(this.isZero())return L.abs();if(L.isZero())return this.abs();var B=this.clone(),O=L.clone();B.negative=0,O.negative=0;for(var G=0;B.isEven()&&O.isEven();G++)B.iushrn(1),O.iushrn(1);do{for(;B.isEven();)B.iushrn(1);for(;O.isEven();)O.iushrn(1);var W=B.cmp(O);if(W<0){var X=B;B=O,O=X}else if(W===0||O.cmpn(1)===0)break;B.isub(O)}while(!0);return O.iushln(G)},d.prototype.invm=function(L){return this.egcd(L).a.umod(L)},d.prototype.isEven=function(){return(this.words[0]&1)===0},d.prototype.isOdd=function(){return(this.words[0]&1)===1},d.prototype.andln=function(L){return this.words[0]&L},d.prototype.bincn=function(L){f(typeof L=="number");var B=L%26,O=(L-B)/26,G=1<<B;if(this.length<=O)return this._expand(O+1),this.words[O]|=G,this;for(var W=G,X=O;W!==0&&X<this.length;X++){var Z=this.words[X]|0;Z+=W,W=Z>>>26,Z&=67108863,this.words[X]=Z}return W!==0&&(this.words[X]=W,this.length++),this},d.prototype.isZero=function(){return this.length===1&&this.words[0]===0},d.prototype.cmpn=function(L){var B=L<0;if(this.negative!==0&&!B)return-1;if(this.negative===0&&B)return 1;this.strip();var O;if(this.length>1)O=1;else{B&&(L=-L),f(L<=67108863,"Number is too big");var G=this.words[0]|0;O=G===L?0:G<L?-1:1}return this.negative!==0?-O|0:O},d.prototype.cmp=function(L){if(this.negative!==0&&L.negative===0)return-1;if(this.negative===0&&L.negative!==0)return 1;var B=this.ucmp(L);return this.negative!==0?-B|0:B},d.prototype.ucmp=function(L){if(this.length>L.length)return 1;if(this.length<L.length)return-1;for(var B=0,O=this.length-1;O>=0;O--){var G=this.words[O]|0,W=L.words[O]|0;if(G!==W){G<W?B=-1:G>W&&(B=1);break}}return B},d.prototype.gtn=function(L){return this.cmpn(L)===1},d.prototype.gt=function(L){return this.cmp(L)===1},d.prototype.gten=function(L){return this.cmpn(L)>=0},d.prototype.gte=function(L){return this.cmp(L)>=0},d.prototype.ltn=function(L){return this.cmpn(L)===-1},d.prototype.lt=function(L){return this.cmp(L)===-1},d.prototype.lten=function(L){return this.cmpn(L)<=0},d.prototype.lte=function(L){return this.cmp(L)<=0},d.prototype.eqn=function(L){return this.cmpn(L)===0},d.prototype.eq=function(L){return this.cmp(L)===0},d.red=function(L){return new P(L)},d.prototype.toRed=function(L){return f(!this.red,"Already a number in reduction context"),f(this.negative===0,"red works only with positives"),L.convertTo(this)._forceRed(L)},d.prototype.fromRed=function(){return f(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},d.prototype._forceRed=function(L){return this.red=L,this},d.prototype.forceRed=function(L){return f(!this.red,"Already a number in reduction context"),this._forceRed(L)},d.prototype.redAdd=function(L){return f(this.red,"redAdd works only with red numbers"),this.red.add(this,L)},d.prototype.redIAdd=function(L){return f(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,L)},d.prototype.redSub=function(L){return f(this.red,"redSub works only with red numbers"),this.red.sub(this,L)},d.prototype.redISub=function(L){return f(this.red,"redISub works only with red numbers"),this.red.isub(this,L)},d.prototype.redShl=function(L){return f(this.red,"redShl works only with red numbers"),this.red.shl(this,L)},d.prototype.redMul=function(L){return f(this.red,"redMul works only with red numbers"),this.red._verify2(this,L),this.red.mul(this,L)},d.prototype.redIMul=function(L){return f(this.red,"redMul works only with red numbers"),this.red._verify2(this,L),this.red.imul(this,L)},d.prototype.redSqr=function(){return f(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},d.prototype.redISqr=function(){return f(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},d.prototype.redSqrt=function(){return f(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},d.prototype.redInvm=function(){return f(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},d.prototype.redNeg=function(){return f(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},d.prototype.redPow=function(L){return f(this.red&&!L.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,L)};var b={k256:null,p224:null,p192:null,p25519:null};function E(I,L){this.name=I,this.p=new d(L,16),this.n=this.p.bitLength(),this.k=new d(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}E.prototype._tmp=function(){var L=new d(null);return L.words=new Array(Math.ceil(this.n/13)),L},E.prototype.ireduce=function(L){var B=L,O;do this.split(B,this.tmp),B=this.imulK(B),B=B.iadd(this.tmp),O=B.bitLength();while(O>this.n);var G=O<this.n?-1:B.ucmp(this.p);return G===0?(B.words[0]=0,B.length=1):G>0?B.isub(this.p):B.strip!==void 0?B.strip():B._strip(),B},E.prototype.split=function(L,B){L.iushrn(this.n,0,B)},E.prototype.imulK=function(L){return L.imul(this.k)};function T(){E.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}h(T,E),T.prototype.split=function(L,B){for(var O=4194303,G=Math.min(L.length,9),W=0;W<G;W++)B.words[W]=L.words[W];if(B.length=G,L.length<=9){L.words[0]=0,L.length=1;return}var X=L.words[9];for(B.words[B.length++]=X&O,W=10;W<L.length;W++){var Z=L.words[W]|0;L.words[W-10]=(Z&O)<<4|X>>>22,X=Z}X>>>=22,L.words[W-10]=X,X===0&&L.length>10?L.length-=10:L.length-=9},T.prototype.imulK=function(L){L.words[L.length]=0,L.words[L.length+1]=0,L.length+=2;for(var B=0,O=0;O<L.length;O++){var G=L.words[O]|0;B+=G*977,L.words[O]=B&67108863,B=G*64+(B/67108864|0)}return L.words[L.length-1]===0&&(L.length--,L.words[L.length-1]===0&&L.length--),L};function F(){E.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}h(F,E);function D(){E.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}h(D,E);function R(){E.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}h(R,E),R.prototype.imulK=function(L){for(var B=0,O=0;O<L.length;O++){var G=(L.words[O]|0)*19+B,W=G&67108863;G>>>=26,L.words[O]=W,B=G}return B!==0&&(L.words[L.length++]=B),L},d._prime=function(L){if(b[L])return b[L];var B;if(L==="k256")B=new T;else if(L==="p224")B=new F;else if(L==="p192")B=new D;else if(L==="p25519")B=new R;else throw new Error("Unknown prime "+L);return b[L]=B,B};function P(I){if(typeof I=="string"){var L=d._prime(I);this.m=L.p,this.prime=L}else f(I.gtn(1),"modulus must be greater than 1"),this.m=I,this.prime=null}P.prototype._verify1=function(L){f(L.negative===0,"red works only with positives"),f(L.red,"red works only with red numbers")},P.prototype._verify2=function(L,B){f((L.negative|B.negative)===0,"red works only with positives"),f(L.red&&L.red===B.red,"red works only with red numbers")},P.prototype.imod=function(L){return this.prime?this.prime.ireduce(L)._forceRed(this):L.umod(this.m)._forceRed(this)},P.prototype.neg=function(L){return L.isZero()?L.clone():this.m.sub(L)._forceRed(this)},P.prototype.add=function(L,B){this._verify2(L,B);var O=L.add(B);return O.cmp(this.m)>=0&&O.isub(this.m),O._forceRed(this)},P.prototype.iadd=function(L,B){this._verify2(L,B);var O=L.iadd(B);return O.cmp(this.m)>=0&&O.isub(this.m),O},P.prototype.sub=function(L,B){this._verify2(L,B);var O=L.sub(B);return O.cmpn(0)<0&&O.iadd(this.m),O._forceRed(this)},P.prototype.isub=function(L,B){this._verify2(L,B);var O=L.isub(B);return O.cmpn(0)<0&&O.iadd(this.m),O},P.prototype.shl=function(L,B){return this._verify1(L),this.imod(L.ushln(B))},P.prototype.imul=function(L,B){return this._verify2(L,B),this.imod(L.imul(B))},P.prototype.mul=function(L,B){return this._verify2(L,B),this.imod(L.mul(B))},P.prototype.isqr=function(L){return this.imul(L,L.clone())},P.prototype.sqr=function(L){return this.mul(L,L)},P.prototype.sqrt=function(L){if(L.isZero())return L.clone();var B=this.m.andln(3);if(f(B%2===1),B===3){var O=this.m.add(new d(1)).iushrn(2);return this.pow(L,O)}for(var G=this.m.subn(1),W=0;!G.isZero()&&G.andln(1)===0;)W++,G.iushrn(1);f(!G.isZero());var X=new d(1).toRed(this),Z=X.redNeg(),J=this.m.subn(1).iushrn(1),N=this.m.bitLength();for(N=new d(2*N*N).toRed(this);this.pow(N,J).cmp(Z)!==0;)N.redIAdd(Z);for(var H=this.pow(N,G),$=this.pow(L,G.addn(1).iushrn(1)),U=this.pow(L,G),V=W;U.cmp(X)!==0;){for(var j=U,q=0;j.cmp(X)!==0;q++)j=j.redSqr();f(q<V);var Y=this.pow(H,new d(1).iushln(V-q-1));$=$.redMul(Y),H=Y.redSqr(),U=U.redMul(H),V=q}return $},P.prototype.invm=function(L){var B=L._invmp(this.m);return B.negative!==0?(B.negative=0,this.imod(B).redNeg()):this.imod(B)},P.prototype.pow=function(L,B){if(B.isZero())return new d(1).toRed(this);if(B.cmpn(1)===0)return L.clone();var O=4,G=new Array(1<<O);G[0]=new d(1).toRed(this),G[1]=L;for(var W=2;W<G.length;W++)G[W]=this.mul(G[W-1],L);var X=G[0],Z=0,J=0,N=B.bitLength()%26;for(N===0&&(N=26),W=B.length-1;W>=0;W--){for(var H=B.words[W],$=N-1;$>=0;$--){var U=H>>$&1;if(X!==G[0]&&(X=this.sqr(X)),U===0&&Z===0){J=0;continue}Z<<=1,Z|=U,J++,!(J!==O&&(W!==0||$!==0))&&(X=this.mul(X,G[Z]),J=0,Z=0)}N=26}return X},P.prototype.convertTo=function(L){var B=L.umod(this.m);return B===L?B.clone():B},P.prototype.convertFrom=function(L){var B=L.clone();return B.red=null,B},d.mont=function(L){return new z(L)};function z(I){P.call(this,I),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new d(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}h(z,P),z.prototype.convertTo=function(L){return this.imod(L.ushln(this.shift))},z.prototype.convertFrom=function(L){var B=this.imod(L.mul(this.rinv));return B.red=null,B},z.prototype.imul=function(L,B){if(L.isZero()||B.isZero())return L.words[0]=0,L.length=1,L;var O=L.imul(B),G=O.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),W=O.isub(G).iushrn(this.shift),X=W;return W.cmp(this.m)>=0?X=W.isub(this.m):W.cmpn(0)<0&&(X=W.iadd(this.m)),X._forceRed(this)},z.prototype.mul=function(L,B){if(L.isZero()||B.isZero())return new d(0)._forceRed(this);var O=L.mul(B),G=O.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),W=O.isub(G).iushrn(this.shift),X=W;return W.cmp(this.m)>=0?X=W.isub(this.m):W.cmpn(0)<0&&(X=W.iadd(this.m)),X._forceRed(this)},z.prototype.invm=function(L){var B=this.imod(L._invmp(this.m).mul(this.r2));return B._forceRed(this)}})(s,this)},6204(s){"use strict";s.exports=l;function l(n){var u,c,f,h=n.length,d=0;for(u=0;u<h;++u)d+=n[u].length;var p=new Array(d),g=0;for(u=0;u<h;++u){var m=n[u],y=m.length;for(c=0;c<y;++c){var _=p[g++]=new Array(y-1),v=0;for(f=0;f<y;++f)f!==c&&(_[v++]=m[f]);if(c&1){var x=_[1];_[1]=_[0],_[0]=x}}}return p}},6867(s,l,n){"use strict";s.exports=v;var u=n(1888),c=n(855),f=n(7150);function h(x,S){for(var M=0;M<x;++M)if(!(S[M]<=S[M+x]))return!0;return!1}function d(x,S,M,C){for(var w=0,k=0,A=0,b=x.length;A<b;++A){var E=x[A];if(!h(S,E)){for(var T=0;T<2*S;++T)M[w++]=E[T];C[k++]=A}}return k}function p(x,S,M,C){var w=x.length,k=S.length;if(!(w<=0||k<=0)){var A=x[0].length>>>1;if(!(A<=0)){var b,E=u.mallocDouble(2*A*w),T=u.mallocInt32(w);if(w=d(x,A,E,T),w>0){if(A===1&&C)c.init(w),b=c.sweepComplete(A,M,0,w,E,T,0,w,E,T);else{var F=u.mallocDouble(2*A*k),D=u.mallocInt32(k);k=d(S,A,F,D),k>0&&(c.init(w+k),A===1?b=c.sweepBipartite(A,M,0,w,E,T,0,k,F,D):b=f(A,M,C,w,E,T,k,F,D),u.free(F),u.free(D))}u.free(E),u.free(T)}return b}}}var g;function m(x,S){g.push([x,S])}function y(x){return g=[],p(x,x,m,!0),g}function _(x,S){return g=[],p(x,S,m,!1),g}function v(x,S,M){switch(arguments.length){case 1:return y(x);case 2:return typeof S=="function"?p(x,x,S,!0):_(x,S);case 3:return p(x,S,M,!1);default:throw new Error("box-intersect: Invalid arguments")}}},2455(s,l){"use strict";function n(){function f(p,g,m,y,_,v,x,S,M,C,w){for(var k=2*p,A=y,b=k*y;A<_;++A,b+=k){var E=v[g+b],T=v[g+b+p],F=x[A];e:for(var D=S,R=k*S;D<M;++D,R+=k){var P=C[g+R],z=C[g+R+p],I=w[D];if(!(z<E||T<P)){for(var L=g+1;L<p;++L){var B=v[L+b],O=v[L+p+b],G=C[L+R],W=C[L+p+R];if(O<G||W<B)continue e}var X=m(F,I);if(X!==void 0)return X}}}}function h(p,g,m,y,_,v,x,S,M,C,w){for(var k=2*p,A=S,b=k*S;A<M;++A,b+=k){var E=C[g+b],T=C[g+b+p],F=w[A];e:for(var D=y,R=k*y;D<_;++D,R+=k){var P=v[g+R],z=v[g+R+p],I=x[D];if(!(T<P||z<E)){for(var L=g+1;L<p;++L){var B=v[L+R],O=v[L+p+R],G=C[L+b],W=C[L+p+b];if(O<G||W<B)continue e}var X=m(I,F);if(X!==void 0)return X}}}}function d(p,g,m,y,_,v,x,S,M,C,w){return _-y>M-S?f(p,g,m,y,_,v,x,S,M,C,w):h(p,g,m,y,_,v,x,S,M,C,w)}return d}function u(){function f(m,y,_,v,x,S,M,C,w,k,A){for(var b=2*m,E=v,T=b*v;E<x;++E,T+=b){var F=S[y+T],D=S[y+T+m],R=M[E];e:for(var P=C,z=b*C;P<w;++P,z+=b){var I=k[y+z],L=A[P];if(!(I<=F||D<I)){for(var B=y+1;B<m;++B){var O=S[B+T],G=S[B+m+T],W=k[B+z],X=k[B+m+z];if(G<W||X<O)continue e}var Z=_(L,R);if(Z!==void 0)return Z}}}}function h(m,y,_,v,x,S,M,C,w,k,A){for(var b=2*m,E=v,T=b*v;E<x;++E,T+=b){var F=S[y+T],D=S[y+T+m],R=M[E];e:for(var P=C,z=b*C;P<w;++P,z+=b){var I=k[y+z],L=A[P];if(!(I<F||D<I)){for(var B=y+1;B<m;++B){var O=S[B+T],G=S[B+m+T],W=k[B+z],X=k[B+m+z];if(G<W||X<O)continue e}var Z=_(R,L);if(Z!==void 0)return Z}}}}function d(m,y,_,v,x,S,M,C,w,k,A){for(var b=2*m,E=C,T=b*C;E<w;++E,T+=b){var F=k[y+T],D=A[E];e:for(var R=v,P=b*v;R<x;++R,P+=b){var z=S[y+P],I=S[y+P+m],L=M[R];if(!(F<=z||I<F)){for(var B=y+1;B<m;++B){var O=S[B+P],G=S[B+m+P],W=k[B+T],X=k[B+m+T];if(G<W||X<O)continue e}var Z=_(D,L);if(Z!==void 0)return Z}}}}function p(m,y,_,v,x,S,M,C,w,k,A){for(var b=2*m,E=C,T=b*C;E<w;++E,T+=b){var F=k[y+T],D=A[E];e:for(var R=v,P=b*v;R<x;++R,P+=b){var z=S[y+P],I=S[y+P+m],L=M[R];if(!(F<z||I<F)){for(var B=y+1;B<m;++B){var O=S[B+P],G=S[B+m+P],W=k[B+T],X=k[B+m+T];if(G<W||X<O)continue e}var Z=_(L,D);if(Z!==void 0)return Z}}}}function g(m,y,_,v,x,S,M,C,w,k,A,b){return S-x>k-w?v?f(m,y,_,x,S,M,C,w,k,A,b):h(m,y,_,x,S,M,C,w,k,A,b):v?d(m,y,_,x,S,M,C,w,k,A,b):p(m,y,_,x,S,M,C,w,k,A,b)}return g}function c(f){return f?n():u()}l.partial=c(!1),l.full=c(!0)},7150(s,l,n){"use strict";s.exports=I;var u=n(1888),c=n(8828),f=n(2455),h=f.partial,d=f.full,p=n(855),g=n(3545),m=n(8105),y=128,_=1<<22,v=1<<22,x=m("!(lo>=p0)&&!(p1>=hi)"),S=m("lo===p0"),M=m("lo<p0"),C=m("hi<=p0"),w=m("lo<=p0&&p0<=hi"),k=m("lo<p0&&p0<=hi"),A=6,b=2,E=1024,T=u.mallocInt32(E),F=u.mallocDouble(E);function D(L,B){var O=8*c.log2(B+1)*(L+1)|0,G=c.nextPow2(A*O);T.length<G&&(u.free(T),T=u.mallocInt32(G));var W=c.nextPow2(b*O);F.length<W&&(u.free(F),F=u.mallocDouble(W))}function R(L,B,O,G,W,X,Z,J,N){var H=A*L;T[H]=B,T[H+1]=O,T[H+2]=G,T[H+3]=W,T[H+4]=X,T[H+5]=Z;var $=b*L;F[$]=J,F[$+1]=N}function P(L,B,O,G,W,X,Z,J,N,H,$){var U=2*L,V=N*U,j=H[V+B];e:for(var q=W,Y=W*U;q<X;++q,Y+=U){var K=Z[Y+B],te=Z[Y+B+L];if(!(j<K||te<j)&&!(G&&j===K)){for(var ne=J[q],se=B+1;se<L;++se){var K=Z[Y+se],te=Z[Y+se+L],le=H[V+se],ce=H[V+se+L];if(te<le||ce<K)continue e}var pe;if(G?pe=O($,ne):pe=O(ne,$),pe!==void 0)return pe}}}function z(L,B,O,G,W,X,Z,J,N,H){var $=2*L,U=J*$,V=N[U+B];e:for(var j=G,q=G*$;j<W;++j,q+=$){var Y=Z[j];if(Y!==H){var K=X[q+B],te=X[q+B+L];if(!(V<K||te<V)){for(var ne=B+1;ne<L;++ne){var K=X[q+ne],te=X[q+ne+L],se=N[U+ne],le=N[U+ne+L];if(te<se||le<K)continue e}var ce=O(Y,H);if(ce!==void 0)return ce}}}}function I(L,B,O,G,W,X,Z,J,N){D(L,G+Z);var H=0,$=2*L,U;for(R(H++,0,0,G,0,Z,O?16:0,-1/0,1/0),O||R(H++,0,0,Z,0,G,1,-1/0,1/0);H>0;){H-=1;var V=H*A,j=T[V],q=T[V+1],Y=T[V+2],K=T[V+3],te=T[V+4],ne=T[V+5],se=H*b,le=F[se],ce=F[se+1],pe=ne&1,xe=!!(ne&16),ye=W,fe=X,ae=J,ee=N;if(pe&&(ye=J,fe=N,ae=W,ee=X),!(ne&2&&(Y=M(L,j,q,Y,ye,fe,ce),q>=Y))&&!(ne&4&&(q=C(L,j,q,Y,ye,fe,le),q>=Y))){var ie=Y-q,Q=te-K;if(xe){if(L*ie*(ie+Q)<v){if(U=p.scanComplete(L,j,B,q,Y,ye,fe,K,te,ae,ee),U!==void 0)return U;continue}}else if(L*Math.min(ie,Q)<y){if(U=h(L,j,B,pe,q,Y,ye,fe,K,te,ae,ee),U!==void 0)return U;continue}else if(L*ie*Q<_){if(U=p.scanBipartite(L,j,B,pe,q,Y,ye,fe,K,te,ae,ee),U!==void 0)return U;continue}var ue=x(L,j,q,Y,ye,fe,le,ce);if(q<ue)if(L*(ue-q)<y){if(U=d(L,j+1,B,q,ue,ye,fe,K,te,ae,ee),U!==void 0)return U}else if(j===L-2){if(pe?U=p.sweepBipartite(L,B,K,te,ae,ee,q,ue,ye,fe):U=p.sweepBipartite(L,B,q,ue,ye,fe,K,te,ae,ee),U!==void 0)return U}else R(H++,j+1,q,ue,K,te,pe,-1/0,1/0),R(H++,j+1,K,te,q,ue,pe^1,-1/0,1/0);if(ue<Y){var ge=g(L,j,K,te,ae,ee),Me=ae[$*ge+j],Te=S(L,j,ge,te,ae,ee,Me);if(Te<te&&R(H++,j,ue,Y,Te,te,(pe|4)+(xe?16:0),Me,ce),K<ge&&R(H++,j,ue,Y,K,ge,(pe|2)+(xe?16:0),le,Me),ge+1===Te){if(xe?U=z(L,j,B,ue,Y,ye,fe,ge,ae,ee[ge]):U=P(L,j,B,pe,ue,Y,ye,fe,ge,ae,ee[ge]),U!==void 0)return U}else if(ge<Te){var je;if(xe){if(je=w(L,j,ue,Y,ye,fe,Me),ue<je){var Ve=S(L,j,ue,je,ye,fe,Me);if(j===L-2){if(ue<Ve&&(U=p.sweepComplete(L,B,ue,Ve,ye,fe,ge,Te,ae,ee),U!==void 0)||Ve<je&&(U=p.sweepBipartite(L,B,Ve,je,ye,fe,ge,Te,ae,ee),U!==void 0))return U}else ue<Ve&&R(H++,j+1,ue,Ve,ge,Te,16,-1/0,1/0),Ve<je&&(R(H++,j+1,Ve,je,ge,Te,0,-1/0,1/0),R(H++,j+1,ge,Te,Ve,je,1,-1/0,1/0))}}else pe?je=k(L,j,ue,Y,ye,fe,Me):je=w(L,j,ue,Y,ye,fe,Me),ue<je&&(j===L-2?pe?U=p.sweepBipartite(L,B,ge,Te,ae,ee,ue,je,ye,fe):U=p.sweepBipartite(L,B,ue,je,ye,fe,ge,Te,ae,ee):(R(H++,j+1,ue,je,ge,Te,pe,-1/0,1/0),R(H++,j+1,ge,Te,ue,je,pe^1,-1/0,1/0)))}}}}}},3545(s,l,n){"use strict";s.exports=d;var u=n(8105),c=u("lo<p0"),f=8;function h(p,g,m,y,_,v){for(var x=2*p,S=x*(m+1)+g,M=m+1;M<y;++M,S+=x)for(var C=_[S],w=M,k=x*(M-1);w>m&&_[k+g]>C;--w,k-=x){for(var A=k,b=k+x,E=0;E<x;++E,++A,++b){var T=_[A];_[A]=_[b],_[b]=T}var F=v[w];v[w]=v[w-1],v[w-1]=F}}function d(p,g,m,y,_,v){if(y<=m+1)return m;for(var x=m,S=y,M=y+m>>>1,C=2*p,w=M,k=_[C*M+g];x<S;){if(S-x<f){h(p,g,x,S,_,v),k=_[C*M+g];break}var A=S-x,b=Math.random()*A+x|0,E=_[C*b+g],T=Math.random()*A+x|0,F=_[C*T+g],D=Math.random()*A+x|0,R=_[C*D+g];E<=F?R>=F?(w=T,k=F):E>=R?(w=b,k=E):(w=D,k=R):F>=R?(w=T,k=F):R>=E?(w=b,k=E):(w=D,k=R);for(var I=C*(S-1),L=C*w,P=0;P<C;++P,++I,++L){var z=_[I];_[I]=_[L],_[L]=z}var B=v[S-1];v[S-1]=v[w],v[w]=B,w=c(p,g,x,S-1,_,v,k);for(var I=C*(S-1),L=C*w,P=0;P<C;++P,++I,++L){var z=_[I];_[I]=_[L],_[L]=z}var B=v[S-1];if(v[S-1]=v[w],v[w]=B,M<w){for(S=w-1;x<S&&_[C*(S-1)+g]===k;)S-=1;S+=1}else if(w<M)for(x=w+1;x<S&&_[C*x+g]===k;)x+=1;else break}return c(p,g,m,M,_,v,_[C*M+g])}},8105(s){"use strict";s.exports=n;var l={"lo===p0":u,"lo<p0":c,"lo<=p0":f,"hi<=p0":h,"lo<p0&&p0<=hi":p,"lo<=p0&&p0<=hi":d,"!(lo>=p0)&&!(p1>=hi)":g};function n(m){return l[m]}function u(m,y,_,v,x,S,M){for(var C=2*m,w=C*_,k=w,A=_,b=y,E=m+y,T=_;v>T;++T,w+=C){var F=x[w+b];if(F===M)if(A===T)A+=1,k+=C;else{for(var D=0;C>D;++D){var R=x[w+D];x[w+D]=x[k],x[k++]=R}var P=S[T];S[T]=S[A],S[A++]=P}}return A}function c(m,y,_,v,x,S,M){for(var C=2*m,w=C*_,k=w,A=_,b=y,E=m+y,T=_;v>T;++T,w+=C){var F=x[w+b];if(F<M)if(A===T)A+=1,k+=C;else{for(var D=0;C>D;++D){var R=x[w+D];x[w+D]=x[k],x[k++]=R}var P=S[T];S[T]=S[A],S[A++]=P}}return A}function f(m,y,_,v,x,S,M){for(var C=2*m,w=C*_,k=w,A=_,b=y,E=m+y,T=_;v>T;++T,w+=C){var F=x[w+E];if(F<=M)if(A===T)A+=1,k+=C;else{for(var D=0;C>D;++D){var R=x[w+D];x[w+D]=x[k],x[k++]=R}var P=S[T];S[T]=S[A],S[A++]=P}}return A}function h(m,y,_,v,x,S,M){for(var C=2*m,w=C*_,k=w,A=_,b=y,E=m+y,T=_;v>T;++T,w+=C){var F=x[w+E];if(F<=M)if(A===T)A+=1,k+=C;else{for(var D=0;C>D;++D){var R=x[w+D];x[w+D]=x[k],x[k++]=R}var P=S[T];S[T]=S[A],S[A++]=P}}return A}function d(m,y,_,v,x,S,M){for(var C=2*m,w=C*_,k=w,A=_,b=y,E=m+y,T=_;v>T;++T,w+=C){var F=x[w+b],D=x[w+E];if(F<=M&&M<=D)if(A===T)A+=1,k+=C;else{for(var R=0;C>R;++R){var P=x[w+R];x[w+R]=x[k],x[k++]=P}var z=S[T];S[T]=S[A],S[A++]=z}}return A}function p(m,y,_,v,x,S,M){for(var C=2*m,w=C*_,k=w,A=_,b=y,E=m+y,T=_;v>T;++T,w+=C){var F=x[w+b],D=x[w+E];if(F<M&&M<=D)if(A===T)A+=1,k+=C;else{for(var R=0;C>R;++R){var P=x[w+R];x[w+R]=x[k],x[k++]=P}var z=S[T];S[T]=S[A],S[A++]=z}}return A}function g(m,y,_,v,x,S,M,C){for(var w=2*m,k=w*_,A=k,b=_,E=y,T=m+y,F=_;v>F;++F,k+=w){var D=x[k+E],R=x[k+T];if(!(D>=M)&&!(C>=R))if(b===F)b+=1,A+=w;else{for(var P=0;w>P;++P){var z=x[k+P];x[k+P]=x[A],x[A++]=z}var I=S[F];S[F]=S[b],S[b++]=I}}return b}},4192(s){"use strict";s.exports=n;var l=32;function n(y,_){_<=4*l?u(0,_-1,y):m(0,_-1,y)}function u(y,_,v){for(var x=2*(y+1),S=y+1;S<=_;++S){for(var M=v[x++],C=v[x++],w=S,k=x-2;w-- >y;){var A=v[k-2],b=v[k-1];if(A<M)break;if(A===M&&b<C)break;v[k]=A,v[k+1]=b,k-=2}v[k]=M,v[k+1]=C}}function c(y,_,v){y*=2,_*=2;var x=v[y],S=v[y+1];v[y]=v[_],v[y+1]=v[_+1],v[_]=x,v[_+1]=S}function f(y,_,v){y*=2,_*=2,v[y]=v[_],v[y+1]=v[_+1]}function h(y,_,v,x){y*=2,_*=2,v*=2;var S=x[y],M=x[y+1];x[y]=x[_],x[y+1]=x[_+1],x[_]=x[v],x[_+1]=x[v+1],x[v]=S,x[v+1]=M}function d(y,_,v,x,S){y*=2,_*=2,S[y]=S[_],S[_]=v,S[y+1]=S[_+1],S[_+1]=x}function p(y,_,v){y*=2,_*=2;var x=v[y],S=v[_];return x<S?!1:x===S?v[y+1]>v[_+1]:!0}function g(y,_,v,x){y*=2;var S=x[y];return S<_?!0:S===_?x[y+1]<v:!1}function m(y,_,v){var x=(_-y+1)/6|0,S=y+x,M=_-x,C=y+_>>1,w=C-x,k=C+x,A=S,b=w,E=C,T=k,F=M,D=y+1,R=_-1,P=0;p(A,b,v)&&(P=A,A=b,b=P),p(T,F,v)&&(P=T,T=F,F=P),p(A,E,v)&&(P=A,A=E,E=P),p(b,E,v)&&(P=b,b=E,E=P),p(A,T,v)&&(P=A,A=T,T=P),p(E,T,v)&&(P=E,E=T,T=P),p(b,F,v)&&(P=b,b=F,F=P),p(b,E,v)&&(P=b,b=E,E=P),p(T,F,v)&&(P=T,T=F,F=P);for(var z=v[2*b],I=v[2*b+1],L=v[2*T],B=v[2*T+1],O=2*A,G=2*E,W=2*F,X=2*S,Z=2*C,J=2*M,N=0;N<2;++N){var H=v[O+N],$=v[G+N],U=v[W+N];v[X+N]=H,v[Z+N]=$,v[J+N]=U}f(w,y,v),f(k,_,v);for(var V=D;V<=R;++V)if(g(V,z,I,v))V!==D&&c(V,D,v),++D;else if(!g(V,L,B,v))for(;;)if(g(R,L,B,v)){g(R,z,I,v)?(h(V,D,R,v),++D,--R):(c(V,R,v),--R);break}else{if(--R<V)break;continue}d(y,D-1,z,I,v),d(_,R+1,L,B,v),D-2-y<=l?u(y,D-2,v):m(y,D-2,v),_-(R+2)<=l?u(R+2,_,v):m(R+2,_,v),R-D<=l?u(D,R,v):m(D,R,v)}},855(s,l,n){"use strict";s.exports={init:S,sweepBipartite:w,sweepComplete:k,scanBipartite:A,scanComplete:b};var u=n(1888),c=n(8828),f=n(4192),h=1<<28,d=1024,p=u.mallocInt32(d),g=u.mallocInt32(d),m=u.mallocInt32(d),y=u.mallocInt32(d),_=u.mallocInt32(d),v=u.mallocInt32(d),x=u.mallocDouble(d*8);function S(E){var T=c.nextPow2(E);p.length<T&&(u.free(p),p=u.mallocInt32(T)),g.length<T&&(u.free(g),g=u.mallocInt32(T)),m.length<T&&(u.free(m),m=u.mallocInt32(T)),y.length<T&&(u.free(y),y=u.mallocInt32(T)),_.length<T&&(u.free(_),_=u.mallocInt32(T)),v.length<T&&(u.free(v),v=u.mallocInt32(T));var F=8*T;x.length<F&&(u.free(x),x=u.mallocDouble(F))}function M(E,T,F,D){var R=T[D],P=E[F-1];E[R]=P,T[P]=R}function C(E,T,F,D){E[F]=D,T[D]=F}function w(E,T,F,D,R,P,z,I,L,B){for(var O=0,G=2*E,W=E-1,X=G-1,Z=F;Z<D;++Z){var J=P[Z],N=G*Z;x[O++]=R[N+W],x[O++]=-(J+1),x[O++]=R[N+X],x[O++]=J}for(var Z=z;Z<I;++Z){var J=B[Z]+h,H=G*Z;x[O++]=L[H+W],x[O++]=-J,x[O++]=L[H+X],x[O++]=J}var $=O>>>1;f(x,$);for(var U=0,V=0,Z=0;Z<$;++Z){var j=x[2*Z+1]|0;if(j>=h)j=j-h|0,M(m,y,V--,j);else if(j>=0)M(p,g,U--,j);else if(j<=-h){j=-j-h|0;for(var q=0;q<U;++q){var Y=T(p[q],j);if(Y!==void 0)return Y}C(m,y,V++,j)}else{j=-j-1|0;for(var q=0;q<V;++q){var Y=T(j,m[q]);if(Y!==void 0)return Y}C(p,g,U++,j)}}}function k(E,T,F,D,R,P,z,I,L,B){for(var O=0,G=2*E,W=E-1,X=G-1,Z=F;Z<D;++Z){var J=P[Z]+1<<1,N=G*Z;x[O++]=R[N+W],x[O++]=-J,x[O++]=R[N+X],x[O++]=J}for(var Z=z;Z<I;++Z){var J=B[Z]+1<<1,H=G*Z;x[O++]=L[H+W],x[O++]=-J|1,x[O++]=L[H+X],x[O++]=J|1}var $=O>>>1;f(x,$);for(var U=0,V=0,j=0,Z=0;Z<$;++Z){var q=x[2*Z+1]|0,Y=q&1;if(Z<$-1&&q>>1===x[2*Z+3]>>1&&(Y=2,Z+=1),q<0){for(var K=-(q>>1)-1,te=0;te<j;++te){var ne=T(_[te],K);if(ne!==void 0)return ne}if(Y!==0)for(var te=0;te<U;++te){var ne=T(p[te],K);if(ne!==void 0)return ne}if(Y!==1)for(var te=0;te<V;++te){var ne=T(m[te],K);if(ne!==void 0)return ne}Y===0?C(p,g,U++,K):Y===1?C(m,y,V++,K):Y===2&&C(_,v,j++,K)}else{var K=(q>>1)-1;Y===0?M(p,g,U--,K):Y===1?M(m,y,V--,K):Y===2&&M(_,v,j--,K)}}}function A(E,T,F,D,R,P,z,I,L,B,O,G){var W=0,X=2*E,Z=T,J=T+E,N=1,H=1;D?H=h:N=h;for(var $=R;$<P;++$){var U=$+N,V=X*$;x[W++]=z[V+Z],x[W++]=-U,x[W++]=z[V+J],x[W++]=U}for(var $=L;$<B;++$){var U=$+H,j=X*$;x[W++]=O[j+Z],x[W++]=-U}var q=W>>>1;f(x,q);for(var Y=0,$=0;$<q;++$){var K=x[2*$+1]|0;if(K<0){var U=-K,te=!1;if(U>=h?(te=!D,U-=h):(te=!!D,U-=1),te)C(p,g,Y++,U);else{var ne=G[U],se=X*U,le=O[se+T+1],ce=O[se+T+1+E];e:for(var pe=0;pe<Y;++pe){var xe=p[pe],ye=X*xe;if(!(ce<z[ye+T+1]||z[ye+T+1+E]<le)){for(var fe=T+2;fe<E;++fe)if(O[se+fe+E]<z[ye+fe]||z[ye+fe+E]<O[se+fe])continue e;var ae=I[xe],ee;if(D?ee=F(ne,ae):ee=F(ae,ne),ee!==void 0)return ee}}}}else M(p,g,Y--,K-N)}}function b(E,T,F,D,R,P,z,I,L,B,O){for(var G=0,W=2*E,X=T,Z=T+E,J=D;J<R;++J){var N=J+h,H=W*J;x[G++]=P[H+X],x[G++]=-N,x[G++]=P[H+Z],x[G++]=N}for(var J=I;J<L;++J){var N=J+1,$=W*J;x[G++]=B[$+X],x[G++]=-N}var U=G>>>1;f(x,U);for(var V=0,J=0;J<U;++J){var j=x[2*J+1]|0;if(j<0){var N=-j;if(N>=h)p[V++]=N-h;else{N-=1;var q=O[N],Y=W*N,K=B[Y+T+1],te=B[Y+T+1+E];e:for(var ne=0;ne<V;++ne){var se=p[ne],le=z[se];if(le===q)break;var ce=W*se;if(!(te<P[ce+T+1]||P[ce+T+1+E]<K)){for(var pe=T+2;pe<E;++pe)if(B[Y+pe+E]<P[ce+pe]||P[ce+pe+E]<B[Y+pe])continue e;var xe=F(le,q);if(xe!==void 0)return xe}}}}else{for(var N=j-h,ne=V-1;ne>=0;--ne)if(p[ne]===N){for(var pe=ne+1;pe<V;++pe)p[pe-1]=p[pe];break}--V}}}},5500(s,l,n){"use strict";var u,c=n(7507),f=n(3778),h=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;l.hp=m,u=b,l.IS=50;var d=2147483647;u=d,m.TYPED_ARRAY_SUPPORT=p(),!m.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function p(){try{var fe=new Uint8Array(1),ae={foo:function(){return 42}};return Object.setPrototypeOf(ae,Uint8Array.prototype),Object.setPrototypeOf(fe,ae),fe.foo()===42}catch{return!1}}Object.defineProperty(m.prototype,"parent",{enumerable:!0,get:function(){if(m.isBuffer(this))return this.buffer}}),Object.defineProperty(m.prototype,"offset",{enumerable:!0,get:function(){if(m.isBuffer(this))return this.byteOffset}});function g(fe){if(fe>d)throw new RangeError('The value "'+fe+'" is invalid for option "size"');var ae=new Uint8Array(fe);return Object.setPrototypeOf(ae,m.prototype),ae}function m(fe,ae,ee){if(typeof fe=="number"){if(typeof ae=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return x(fe)}return y(fe,ae,ee)}m.poolSize=8192;function y(fe,ae,ee){if(typeof fe=="string")return S(fe,ae);if(ArrayBuffer.isView(fe))return C(fe);if(fe==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof fe);if(pe(fe,ArrayBuffer)||fe&&pe(fe.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(pe(fe,SharedArrayBuffer)||fe&&pe(fe.buffer,SharedArrayBuffer)))return w(fe,ae,ee);if(typeof fe=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var ie=fe.valueOf&&fe.valueOf();if(ie!=null&&ie!==fe)return m.from(ie,ae,ee);var Q=k(fe);if(Q)return Q;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof fe[Symbol.toPrimitive]=="function")return m.from(fe[Symbol.toPrimitive]("string"),ae,ee);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof fe)}m.from=function(fe,ae,ee){return y(fe,ae,ee)},Object.setPrototypeOf(m.prototype,Uint8Array.prototype),Object.setPrototypeOf(m,Uint8Array);function _(fe){if(typeof fe!="number")throw new TypeError('"size" argument must be of type number');if(fe<0)throw new RangeError('The value "'+fe+'" is invalid for option "size"')}function v(fe,ae,ee){return _(fe),fe<=0?g(fe):ae!==void 0?typeof ee=="string"?g(fe).fill(ae,ee):g(fe).fill(ae):g(fe)}m.alloc=function(fe,ae,ee){return v(fe,ae,ee)};function x(fe){return _(fe),g(fe<0?0:A(fe)|0)}m.allocUnsafe=function(fe){return x(fe)},m.allocUnsafeSlow=function(fe){return x(fe)};function S(fe,ae){if((typeof ae!="string"||ae==="")&&(ae="utf8"),!m.isEncoding(ae))throw new TypeError("Unknown encoding: "+ae);var ee=E(fe,ae)|0,ie=g(ee),Q=ie.write(fe,ae);return Q!==ee&&(ie=ie.slice(0,Q)),ie}function M(fe){for(var ae=fe.length<0?0:A(fe.length)|0,ee=g(ae),ie=0;ie<ae;ie+=1)ee[ie]=fe[ie]&255;return ee}function C(fe){if(pe(fe,Uint8Array)){var ae=new Uint8Array(fe);return w(ae.buffer,ae.byteOffset,ae.byteLength)}return M(fe)}function w(fe,ae,ee){if(ae<0||fe.byteLength<ae)throw new RangeError('"offset" is outside of buffer bounds');if(fe.byteLength<ae+(ee||0))throw new RangeError('"length" is outside of buffer bounds');var ie;return ae===void 0&&ee===void 0?ie=new Uint8Array(fe):ee===void 0?ie=new Uint8Array(fe,ae):ie=new Uint8Array(fe,ae,ee),Object.setPrototypeOf(ie,m.prototype),ie}function k(fe){if(m.isBuffer(fe)){var ae=A(fe.length)|0,ee=g(ae);return ee.length===0||fe.copy(ee,0,0,ae),ee}if(fe.length!==void 0)return typeof fe.length!="number"||xe(fe.length)?g(0):M(fe);if(fe.type==="Buffer"&&Array.isArray(fe.data))return M(fe.data)}function A(fe){if(fe>=d)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+d.toString(16)+" bytes");return fe|0}function b(fe){return+fe!=fe&&(fe=0),m.alloc(+fe)}m.isBuffer=function(ae){return ae!=null&&ae._isBuffer===!0&&ae!==m.prototype},m.compare=function(ae,ee){if(pe(ae,Uint8Array)&&(ae=m.from(ae,ae.offset,ae.byteLength)),pe(ee,Uint8Array)&&(ee=m.from(ee,ee.offset,ee.byteLength)),!m.isBuffer(ae)||!m.isBuffer(ee))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(ae===ee)return 0;for(var ie=ae.length,Q=ee.length,ue=0,ge=Math.min(ie,Q);ue<ge;++ue)if(ae[ue]!==ee[ue]){ie=ae[ue],Q=ee[ue];break}return ie<Q?-1:Q<ie?1:0},m.isEncoding=function(ae){switch(String(ae).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},m.concat=function(ae,ee){if(!Array.isArray(ae))throw new TypeError('"list" argument must be an Array of Buffers');if(ae.length===0)return m.alloc(0);var ie;if(ee===void 0)for(ee=0,ie=0;ie<ae.length;++ie)ee+=ae[ie].length;var Q=m.allocUnsafe(ee),ue=0;for(ie=0;ie<ae.length;++ie){var ge=ae[ie];if(pe(ge,Uint8Array))ue+ge.length>Q.length?m.from(ge).copy(Q,ue):Uint8Array.prototype.set.call(Q,ge,ue);else if(m.isBuffer(ge))ge.copy(Q,ue);else throw new TypeError('"list" argument must be an Array of Buffers');ue+=ge.length}return Q};function E(fe,ae){if(m.isBuffer(fe))return fe.length;if(ArrayBuffer.isView(fe)||pe(fe,ArrayBuffer))return fe.byteLength;if(typeof fe!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof fe);var ee=fe.length,ie=arguments.length>2&&arguments[2]===!0;if(!ie&&ee===0)return 0;for(var Q=!1;;)switch(ae){case"ascii":case"latin1":case"binary":return ee;case"utf8":case"utf-8":return te(fe).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ee*2;case"hex":return ee>>>1;case"base64":return le(fe).length;default:if(Q)return ie?-1:te(fe).length;ae=(""+ae).toLowerCase(),Q=!0}}m.byteLength=E;function T(fe,ae,ee){var ie=!1;if((ae===void 0||ae<0)&&(ae=0),ae>this.length||((ee===void 0||ee>this.length)&&(ee=this.length),ee<=0)||(ee>>>=0,ae>>>=0,ee<=ae))return"";for(fe||(fe="utf8");;)switch(fe){case"hex":return N(this,ae,ee);case"utf8":case"utf-8":return G(this,ae,ee);case"ascii":return Z(this,ae,ee);case"latin1":case"binary":return J(this,ae,ee);case"base64":return O(this,ae,ee);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return H(this,ae,ee);default:if(ie)throw new TypeError("Unknown encoding: "+fe);fe=(fe+"").toLowerCase(),ie=!0}}m.prototype._isBuffer=!0;function F(fe,ae,ee){var ie=fe[ae];fe[ae]=fe[ee],fe[ee]=ie}m.prototype.swap16=function(){var ae=this.length;if(ae%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var ee=0;ee<ae;ee+=2)F(this,ee,ee+1);return this},m.prototype.swap32=function(){var ae=this.length;if(ae%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var ee=0;ee<ae;ee+=4)F(this,ee,ee+3),F(this,ee+1,ee+2);return this},m.prototype.swap64=function(){var ae=this.length;if(ae%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var ee=0;ee<ae;ee+=8)F(this,ee,ee+7),F(this,ee+1,ee+6),F(this,ee+2,ee+5),F(this,ee+3,ee+4);return this},m.prototype.toString=function(){var ae=this.length;return ae===0?"":arguments.length===0?G(this,0,ae):T.apply(this,arguments)},m.prototype.toLocaleString=m.prototype.toString,m.prototype.equals=function(ae){if(!m.isBuffer(ae))throw new TypeError("Argument must be a Buffer");return this===ae?!0:m.compare(this,ae)===0},m.prototype.inspect=function(){var ae="",ee=l.IS;return ae=this.toString("hex",0,ee).replace(/(.{2})/g,"$1 ").trim(),this.length>ee&&(ae+=" ... "),"<Buffer "+ae+">"},h&&(m.prototype[h]=m.prototype.inspect),m.prototype.compare=function(ae,ee,ie,Q,ue){if(pe(ae,Uint8Array)&&(ae=m.from(ae,ae.offset,ae.byteLength)),!m.isBuffer(ae))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof ae);if(ee===void 0&&(ee=0),ie===void 0&&(ie=ae?ae.length:0),Q===void 0&&(Q=0),ue===void 0&&(ue=this.length),ee<0||ie>ae.length||Q<0||ue>this.length)throw new RangeError("out of range index");if(Q>=ue&&ee>=ie)return 0;if(Q>=ue)return-1;if(ee>=ie)return 1;if(ee>>>=0,ie>>>=0,Q>>>=0,ue>>>=0,this===ae)return 0;for(var ge=ue-Q,Me=ie-ee,Te=Math.min(ge,Me),je=this.slice(Q,ue),Ve=ae.slice(ee,ie),Ze=0;Ze<Te;++Ze)if(je[Ze]!==Ve[Ze]){ge=je[Ze],Me=Ve[Ze];break}return ge<Me?-1:Me<ge?1:0};function D(fe,ae,ee,ie,Q){if(fe.length===0)return-1;if(typeof ee=="string"?(ie=ee,ee=0):ee>2147483647?ee=2147483647:ee<-2147483648&&(ee=-2147483648),ee=+ee,xe(ee)&&(ee=Q?0:fe.length-1),ee<0&&(ee=fe.length+ee),ee>=fe.length){if(Q)return-1;ee=fe.length-1}else if(ee<0)if(Q)ee=0;else return-1;if(typeof ae=="string"&&(ae=m.from(ae,ie)),m.isBuffer(ae))return ae.length===0?-1:R(fe,ae,ee,ie,Q);if(typeof ae=="number")return ae=ae&255,typeof Uint8Array.prototype.indexOf=="function"?Q?Uint8Array.prototype.indexOf.call(fe,ae,ee):Uint8Array.prototype.lastIndexOf.call(fe,ae,ee):R(fe,[ae],ee,ie,Q);throw new TypeError("val must be string, number or Buffer")}function R(fe,ae,ee,ie,Q){var ue=1,ge=fe.length,Me=ae.length;if(ie!==void 0&&(ie=String(ie).toLowerCase(),ie==="ucs2"||ie==="ucs-2"||ie==="utf16le"||ie==="utf-16le")){if(fe.length<2||ae.length<2)return-1;ue=2,ge/=2,Me/=2,ee/=2}function Te(vt,xt){return ue===1?vt[xt]:vt.readUInt16BE(xt*ue)}var je;if(Q){var Ve=-1;for(je=ee;je<ge;je++)if(Te(fe,je)===Te(ae,Ve===-1?0:je-Ve)){if(Ve===-1&&(Ve=je),je-Ve+1===Me)return Ve*ue}else Ve!==-1&&(je-=je-Ve),Ve=-1}else for(ee+Me>ge&&(ee=ge-Me),je=ee;je>=0;je--){for(var Ze=!0,Ke=0;Ke<Me;Ke++)if(Te(fe,je+Ke)!==Te(ae,Ke)){Ze=!1;break}if(Ze)return je}return-1}m.prototype.includes=function(ae,ee,ie){return this.indexOf(ae,ee,ie)!==-1},m.prototype.indexOf=function(ae,ee,ie){return D(this,ae,ee,ie,!0)},m.prototype.lastIndexOf=function(ae,ee,ie){return D(this,ae,ee,ie,!1)};function P(fe,ae,ee,ie){ee=Number(ee)||0;var Q=fe.length-ee;ie?(ie=Number(ie),ie>Q&&(ie=Q)):ie=Q;var ue=ae.length;ie>ue/2&&(ie=ue/2);for(var ge=0;ge<ie;++ge){var Me=parseInt(ae.substr(ge*2,2),16);if(xe(Me))return ge;fe[ee+ge]=Me}return ge}function z(fe,ae,ee,ie){return ce(te(ae,fe.length-ee),fe,ee,ie)}function I(fe,ae,ee,ie){return ce(ne(ae),fe,ee,ie)}function L(fe,ae,ee,ie){return ce(le(ae),fe,ee,ie)}function B(fe,ae,ee,ie){return ce(se(ae,fe.length-ee),fe,ee,ie)}m.prototype.write=function(ae,ee,ie,Q){if(ee===void 0)Q="utf8",ie=this.length,ee=0;else if(ie===void 0&&typeof ee=="string")Q=ee,ie=this.length,ee=0;else if(isFinite(ee))ee=ee>>>0,isFinite(ie)?(ie=ie>>>0,Q===void 0&&(Q="utf8")):(Q=ie,ie=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var ue=this.length-ee;if((ie===void 0||ie>ue)&&(ie=ue),ae.length>0&&(ie<0||ee<0)||ee>this.length)throw new RangeError("Attempt to write outside buffer bounds");Q||(Q="utf8");for(var ge=!1;;)switch(Q){case"hex":return P(this,ae,ee,ie);case"utf8":case"utf-8":return z(this,ae,ee,ie);case"ascii":case"latin1":case"binary":return I(this,ae,ee,ie);case"base64":return L(this,ae,ee,ie);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,ae,ee,ie);default:if(ge)throw new TypeError("Unknown encoding: "+Q);Q=(""+Q).toLowerCase(),ge=!0}},m.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function O(fe,ae,ee){return ae===0&&ee===fe.length?c.fromByteArray(fe):c.fromByteArray(fe.slice(ae,ee))}function G(fe,ae,ee){ee=Math.min(fe.length,ee);for(var ie=[],Q=ae;Q<ee;){var ue=fe[Q],ge=null,Me=ue>239?4:ue>223?3:ue>191?2:1;if(Q+Me<=ee){var Te,je,Ve,Ze;switch(Me){case 1:ue<128&&(ge=ue);break;case 2:Te=fe[Q+1],(Te&192)===128&&(Ze=(ue&31)<<6|Te&63,Ze>127&&(ge=Ze));break;case 3:Te=fe[Q+1],je=fe[Q+2],(Te&192)===128&&(je&192)===128&&(Ze=(ue&15)<<12|(Te&63)<<6|je&63,Ze>2047&&(Ze<55296||Ze>57343)&&(ge=Ze));break;case 4:Te=fe[Q+1],je=fe[Q+2],Ve=fe[Q+3],(Te&192)===128&&(je&192)===128&&(Ve&192)===128&&(Ze=(ue&15)<<18|(Te&63)<<12|(je&63)<<6|Ve&63,Ze>65535&&Ze<1114112&&(ge=Ze))}}ge===null?(ge=65533,Me=1):ge>65535&&(ge-=65536,ie.push(ge>>>10&1023|55296),ge=56320|ge&1023),ie.push(ge),Q+=Me}return X(ie)}var W=4096;function X(fe){var ae=fe.length;if(ae<=W)return String.fromCharCode.apply(String,fe);for(var ee="",ie=0;ie<ae;)ee+=String.fromCharCode.apply(String,fe.slice(ie,ie+=W));return ee}function Z(fe,ae,ee){var ie="";ee=Math.min(fe.length,ee);for(var Q=ae;Q<ee;++Q)ie+=String.fromCharCode(fe[Q]&127);return ie}function J(fe,ae,ee){var ie="";ee=Math.min(fe.length,ee);for(var Q=ae;Q<ee;++Q)ie+=String.fromCharCode(fe[Q]);return ie}function N(fe,ae,ee){var ie=fe.length;(!ae||ae<0)&&(ae=0),(!ee||ee<0||ee>ie)&&(ee=ie);for(var Q="",ue=ae;ue<ee;++ue)Q+=ye[fe[ue]];return Q}function H(fe,ae,ee){for(var ie=fe.slice(ae,ee),Q="",ue=0;ue<ie.length-1;ue+=2)Q+=String.fromCharCode(ie[ue]+ie[ue+1]*256);return Q}m.prototype.slice=function(ae,ee){var ie=this.length;ae=~~ae,ee=ee===void 0?ie:~~ee,ae<0?(ae+=ie,ae<0&&(ae=0)):ae>ie&&(ae=ie),ee<0?(ee+=ie,ee<0&&(ee=0)):ee>ie&&(ee=ie),ee<ae&&(ee=ae);var Q=this.subarray(ae,ee);return Object.setPrototypeOf(Q,m.prototype),Q};function $(fe,ae,ee){if(fe%1!==0||fe<0)throw new RangeError("offset is not uint");if(fe+ae>ee)throw new RangeError("Trying to access beyond buffer length")}m.prototype.readUintLE=m.prototype.readUIntLE=function(ae,ee,ie){ae=ae>>>0,ee=ee>>>0,ie||$(ae,ee,this.length);for(var Q=this[ae],ue=1,ge=0;++ge<ee&&(ue*=256);)Q+=this[ae+ge]*ue;return Q},m.prototype.readUintBE=m.prototype.readUIntBE=function(ae,ee,ie){ae=ae>>>0,ee=ee>>>0,ie||$(ae,ee,this.length);for(var Q=this[ae+--ee],ue=1;ee>0&&(ue*=256);)Q+=this[ae+--ee]*ue;return Q},m.prototype.readUint8=m.prototype.readUInt8=function(ae,ee){return ae=ae>>>0,ee||$(ae,1,this.length),this[ae]},m.prototype.readUint16LE=m.prototype.readUInt16LE=function(ae,ee){return ae=ae>>>0,ee||$(ae,2,this.length),this[ae]|this[ae+1]<<8},m.prototype.readUint16BE=m.prototype.readUInt16BE=function(ae,ee){return ae=ae>>>0,ee||$(ae,2,this.length),this[ae]<<8|this[ae+1]},m.prototype.readUint32LE=m.prototype.readUInt32LE=function(ae,ee){return ae=ae>>>0,ee||$(ae,4,this.length),(this[ae]|this[ae+1]<<8|this[ae+2]<<16)+this[ae+3]*16777216},m.prototype.readUint32BE=m.prototype.readUInt32BE=function(ae,ee){return ae=ae>>>0,ee||$(ae,4,this.length),this[ae]*16777216+(this[ae+1]<<16|this[ae+2]<<8|this[ae+3])},m.prototype.readIntLE=function(ae,ee,ie){ae=ae>>>0,ee=ee>>>0,ie||$(ae,ee,this.length);for(var Q=this[ae],ue=1,ge=0;++ge<ee&&(ue*=256);)Q+=this[ae+ge]*ue;return ue*=128,Q>=ue&&(Q-=Math.pow(2,8*ee)),Q},m.prototype.readIntBE=function(ae,ee,ie){ae=ae>>>0,ee=ee>>>0,ie||$(ae,ee,this.length);for(var Q=ee,ue=1,ge=this[ae+--Q];Q>0&&(ue*=256);)ge+=this[ae+--Q]*ue;return ue*=128,ge>=ue&&(ge-=Math.pow(2,8*ee)),ge},m.prototype.readInt8=function(ae,ee){return ae=ae>>>0,ee||$(ae,1,this.length),this[ae]&128?(255-this[ae]+1)*-1:this[ae]},m.prototype.readInt16LE=function(ae,ee){ae=ae>>>0,ee||$(ae,2,this.length);var ie=this[ae]|this[ae+1]<<8;return ie&32768?ie|4294901760:ie},m.prototype.readInt16BE=function(ae,ee){ae=ae>>>0,ee||$(ae,2,this.length);var ie=this[ae+1]|this[ae]<<8;return ie&32768?ie|4294901760:ie},m.prototype.readInt32LE=function(ae,ee){return ae=ae>>>0,ee||$(ae,4,this.length),this[ae]|this[ae+1]<<8|this[ae+2]<<16|this[ae+3]<<24},m.prototype.readInt32BE=function(ae,ee){return ae=ae>>>0,ee||$(ae,4,this.length),this[ae]<<24|this[ae+1]<<16|this[ae+2]<<8|this[ae+3]},m.prototype.readFloatLE=function(ae,ee){return ae=ae>>>0,ee||$(ae,4,this.length),f.read(this,ae,!0,23,4)},m.prototype.readFloatBE=function(ae,ee){return ae=ae>>>0,ee||$(ae,4,this.length),f.read(this,ae,!1,23,4)},m.prototype.readDoubleLE=function(ae,ee){return ae=ae>>>0,ee||$(ae,8,this.length),f.read(this,ae,!0,52,8)},m.prototype.readDoubleBE=function(ae,ee){return ae=ae>>>0,ee||$(ae,8,this.length),f.read(this,ae,!1,52,8)};function U(fe,ae,ee,ie,Q,ue){if(!m.isBuffer(fe))throw new TypeError('"buffer" argument must be a Buffer instance');if(ae>Q||ae<ue)throw new RangeError('"value" argument is out of bounds');if(ee+ie>fe.length)throw new RangeError("Index out of range")}m.prototype.writeUintLE=m.prototype.writeUIntLE=function(ae,ee,ie,Q){if(ae=+ae,ee=ee>>>0,ie=ie>>>0,!Q){var ue=Math.pow(2,8*ie)-1;U(this,ae,ee,ie,ue,0)}var ge=1,Me=0;for(this[ee]=ae&255;++Me<ie&&(ge*=256);)this[ee+Me]=ae/ge&255;return ee+ie},m.prototype.writeUintBE=m.prototype.writeUIntBE=function(ae,ee,ie,Q){if(ae=+ae,ee=ee>>>0,ie=ie>>>0,!Q){var ue=Math.pow(2,8*ie)-1;U(this,ae,ee,ie,ue,0)}var ge=ie-1,Me=1;for(this[ee+ge]=ae&255;--ge>=0&&(Me*=256);)this[ee+ge]=ae/Me&255;return ee+ie},m.prototype.writeUint8=m.prototype.writeUInt8=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,1,255,0),this[ee]=ae&255,ee+1},m.prototype.writeUint16LE=m.prototype.writeUInt16LE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,2,65535,0),this[ee]=ae&255,this[ee+1]=ae>>>8,ee+2},m.prototype.writeUint16BE=m.prototype.writeUInt16BE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,2,65535,0),this[ee]=ae>>>8,this[ee+1]=ae&255,ee+2},m.prototype.writeUint32LE=m.prototype.writeUInt32LE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,4,4294967295,0),this[ee+3]=ae>>>24,this[ee+2]=ae>>>16,this[ee+1]=ae>>>8,this[ee]=ae&255,ee+4},m.prototype.writeUint32BE=m.prototype.writeUInt32BE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,4,4294967295,0),this[ee]=ae>>>24,this[ee+1]=ae>>>16,this[ee+2]=ae>>>8,this[ee+3]=ae&255,ee+4},m.prototype.writeIntLE=function(ae,ee,ie,Q){if(ae=+ae,ee=ee>>>0,!Q){var ue=Math.pow(2,8*ie-1);U(this,ae,ee,ie,ue-1,-ue)}var ge=0,Me=1,Te=0;for(this[ee]=ae&255;++ge<ie&&(Me*=256);)ae<0&&Te===0&&this[ee+ge-1]!==0&&(Te=1),this[ee+ge]=(ae/Me>>0)-Te&255;return ee+ie},m.prototype.writeIntBE=function(ae,ee,ie,Q){if(ae=+ae,ee=ee>>>0,!Q){var ue=Math.pow(2,8*ie-1);U(this,ae,ee,ie,ue-1,-ue)}var ge=ie-1,Me=1,Te=0;for(this[ee+ge]=ae&255;--ge>=0&&(Me*=256);)ae<0&&Te===0&&this[ee+ge+1]!==0&&(Te=1),this[ee+ge]=(ae/Me>>0)-Te&255;return ee+ie},m.prototype.writeInt8=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,1,127,-128),ae<0&&(ae=255+ae+1),this[ee]=ae&255,ee+1},m.prototype.writeInt16LE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,2,32767,-32768),this[ee]=ae&255,this[ee+1]=ae>>>8,ee+2},m.prototype.writeInt16BE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,2,32767,-32768),this[ee]=ae>>>8,this[ee+1]=ae&255,ee+2},m.prototype.writeInt32LE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,4,2147483647,-2147483648),this[ee]=ae&255,this[ee+1]=ae>>>8,this[ee+2]=ae>>>16,this[ee+3]=ae>>>24,ee+4},m.prototype.writeInt32BE=function(ae,ee,ie){return ae=+ae,ee=ee>>>0,ie||U(this,ae,ee,4,2147483647,-2147483648),ae<0&&(ae=4294967295+ae+1),this[ee]=ae>>>24,this[ee+1]=ae>>>16,this[ee+2]=ae>>>8,this[ee+3]=ae&255,ee+4};function V(fe,ae,ee,ie,Q,ue){if(ee+ie>fe.length)throw new RangeError("Index out of range");if(ee<0)throw new RangeError("Index out of range")}function j(fe,ae,ee,ie,Q){return ae=+ae,ee=ee>>>0,Q||V(fe,ae,ee,4,34028234663852886e22,-34028234663852886e22),f.write(fe,ae,ee,ie,23,4),ee+4}m.prototype.writeFloatLE=function(ae,ee,ie){return j(this,ae,ee,!0,ie)},m.prototype.writeFloatBE=function(ae,ee,ie){return j(this,ae,ee,!1,ie)};function q(fe,ae,ee,ie,Q){return ae=+ae,ee=ee>>>0,Q||V(fe,ae,ee,8,17976931348623157e292,-17976931348623157e292),f.write(fe,ae,ee,ie,52,8),ee+8}m.prototype.writeDoubleLE=function(ae,ee,ie){return q(this,ae,ee,!0,ie)},m.prototype.writeDoubleBE=function(ae,ee,ie){return q(this,ae,ee,!1,ie)},m.prototype.copy=function(ae,ee,ie,Q){if(!m.isBuffer(ae))throw new TypeError("argument should be a Buffer");if(ie||(ie=0),!Q&&Q!==0&&(Q=this.length),ee>=ae.length&&(ee=ae.length),ee||(ee=0),Q>0&&Q<ie&&(Q=ie),Q===ie||ae.length===0||this.length===0)return 0;if(ee<0)throw new RangeError("targetStart out of bounds");if(ie<0||ie>=this.length)throw new RangeError("Index out of range");if(Q<0)throw new RangeError("sourceEnd out of bounds");Q>this.length&&(Q=this.length),ae.length-ee<Q-ie&&(Q=ae.length-ee+ie);var ue=Q-ie;return this===ae&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(ee,ie,Q):Uint8Array.prototype.set.call(ae,this.subarray(ie,Q),ee),ue},m.prototype.fill=function(ae,ee,ie,Q){if(typeof ae=="string"){if(typeof ee=="string"?(Q=ee,ee=0,ie=this.length):typeof ie=="string"&&(Q=ie,ie=this.length),Q!==void 0&&typeof Q!="string")throw new TypeError("encoding must be a string");if(typeof Q=="string"&&!m.isEncoding(Q))throw new TypeError("Unknown encoding: "+Q);if(ae.length===1){var ue=ae.charCodeAt(0);(Q==="utf8"&&ue<128||Q==="latin1")&&(ae=ue)}}else typeof ae=="number"?ae=ae&255:typeof ae=="boolean"&&(ae=Number(ae));if(ee<0||this.length<ee||this.length<ie)throw new RangeError("Out of range index");if(ie<=ee)return this;ee=ee>>>0,ie=ie===void 0?this.length:ie>>>0,ae||(ae=0);var ge;if(typeof ae=="number")for(ge=ee;ge<ie;++ge)this[ge]=ae;else{var Me=m.isBuffer(ae)?ae:m.from(ae,Q),Te=Me.length;if(Te===0)throw new TypeError('The value "'+ae+'" is invalid for argument "value"');for(ge=0;ge<ie-ee;++ge)this[ge+ee]=Me[ge%Te]}return this};var Y=/[^+/0-9A-Za-z-_]/g;function K(fe){if(fe=fe.split("=")[0],fe=fe.trim().replace(Y,""),fe.length<2)return"";for(;fe.length%4!==0;)fe=fe+"=";return fe}function te(fe,ae){ae=ae||1/0;for(var ee,ie=fe.length,Q=null,ue=[],ge=0;ge<ie;++ge){if(ee=fe.charCodeAt(ge),ee>55295&&ee<57344){if(!Q){if(ee>56319){(ae-=3)>-1&&ue.push(239,191,189);continue}else if(ge+1===ie){(ae-=3)>-1&&ue.push(239,191,189);continue}Q=ee;continue}if(ee<56320){(ae-=3)>-1&&ue.push(239,191,189),Q=ee;continue}ee=(Q-55296<<10|ee-56320)+65536}else Q&&(ae-=3)>-1&&ue.push(239,191,189);if(Q=null,ee<128){if((ae-=1)<0)break;ue.push(ee)}else if(ee<2048){if((ae-=2)<0)break;ue.push(ee>>6|192,ee&63|128)}else if(ee<65536){if((ae-=3)<0)break;ue.push(ee>>12|224,ee>>6&63|128,ee&63|128)}else if(ee<1114112){if((ae-=4)<0)break;ue.push(ee>>18|240,ee>>12&63|128,ee>>6&63|128,ee&63|128)}else throw new Error("Invalid code point")}return ue}function ne(fe){for(var ae=[],ee=0;ee<fe.length;++ee)ae.push(fe.charCodeAt(ee)&255);return ae}function se(fe,ae){for(var ee,ie,Q,ue=[],ge=0;ge<fe.length&&!((ae-=2)<0);++ge)ee=fe.charCodeAt(ge),ie=ee>>8,Q=ee%256,ue.push(Q),ue.push(ie);return ue}function le(fe){return c.toByteArray(K(fe))}function ce(fe,ae,ee,ie){for(var Q=0;Q<ie&&!(Q+ee>=ae.length||Q>=fe.length);++Q)ae[Q+ee]=fe[Q];return Q}function pe(fe,ae){return fe instanceof ae||fe!=null&&fe.constructor!=null&&fe.constructor.name!=null&&fe.constructor.name===ae.name}function xe(fe){return fe!==fe}var ye=(function(){for(var fe="0123456789abcdef",ae=new Array(256),ee=0;ee<16;++ee)for(var ie=ee*16,Q=0;Q<16;++Q)ae[ie+Q]=fe[ee]+fe[Q];return ae})()},2538(s,l,n){"use strict";var u=n(8902),c=n(5542),f=n(2272),h=n(5023);s.exports=y;function d(_){return[Math.min(_[0],_[1]),Math.max(_[0],_[1])]}function p(_,v){return _[0]-v[0]||_[1]-v[1]}function g(_){return _.map(d).sort(p)}function m(_,v,x){return v in _?_[v]:x}function y(_,v,x){Array.isArray(v)?(x=x||{},v=v||[]):(x=v||{},v=[]);var S=!!m(x,"delaunay",!0),M=!!m(x,"interior",!0),C=!!m(x,"exterior",!0),w=!!m(x,"infinity",!1);if(!M&&!C||_.length===0)return[];var k=u(_,v);if(S||M!==C||w){for(var A=c(_.length,g(v)),b=0;b<k.length;++b){var E=k[b];A.addTriangle(E[0],E[1],E[2])}return S&&f(_,A),C?M?w?h(A,0,w):A.cells():h(A,1,w):h(A,-1)}else return k}},2272(s,l,n){"use strict";var u=n(2646)[4],c=n(2478);s.exports=h;function f(d,p,g,m,y,_){var v=p.opposite(m,y);if(!(v<0)){if(y<m){var x=m;m=y,y=x,x=_,_=v,v=x}p.isConstraint(m,y)||u(d[m],d[y],d[_],d[v])<0&&g.push(m,y)}}function h(d,p){for(var g=[],m=d.length,y=p.stars,_=0;_<m;++_)for(var v=y[_],x=1;x<v.length;x+=2){var S=v[x];if(!(S<_)&&!p.isConstraint(_,S)){for(var M=v[x-1],C=-1,w=1;w<v.length;w+=2)if(v[w-1]===S){C=v[w];break}C<0||u(d[_],d[S],d[M],d[C])<0&&g.push(_,S)}}for(;g.length>0;){for(var S=g.pop(),_=g.pop(),M=-1,C=-1,v=y[_],k=1;k<v.length;k+=2){var A=v[k-1],b=v[k];A===S?C=b:b===S&&(M=A)}M<0||C<0||u(d[_],d[S],d[M],d[C])>=0||(p.flip(_,S),f(d,p,g,M,_,C),f(d,p,g,_,C,M),f(d,p,g,C,S,M),f(d,p,g,S,M,C))}}},5023(s,l,n){"use strict";var u=n(2478);s.exports=g;function c(m,y,_,v,x,S,M){this.cells=m,this.neighbor=y,this.flags=v,this.constraint=_,this.active=x,this.next=S,this.boundary=M}var f=c.prototype;function h(m,y){return m[0]-y[0]||m[1]-y[1]||m[2]-y[2]}f.locate=(function(){var m=[0,0,0];return function(y,_,v){var x=y,S=_,M=v;return _<v?_<y&&(x=_,S=v,M=y):v<y&&(x=v,S=y,M=_),x<0?-1:(m[0]=x,m[1]=S,m[2]=M,u.eq(this.cells,m,h))}})();function d(m,y){for(var _=m.cells(),v=_.length,x=0;x<v;++x){var S=_[x],M=S[0],C=S[1],w=S[2];C<w?C<M&&(S[0]=C,S[1]=w,S[2]=M):w<M&&(S[0]=w,S[1]=M,S[2]=C)}_.sort(h);for(var k=new Array(v),x=0;x<k.length;++x)k[x]=0;var A=[],b=[],E=new Array(3*v),T=new Array(3*v),F=null;y&&(F=[]);for(var D=new c(_,E,T,k,A,b,F),x=0;x<v;++x)for(var S=_[x],R=0;R<3;++R){var M=S[R],C=S[(R+1)%3],P=E[3*x+R]=D.locate(C,M,m.opposite(C,M)),z=T[3*x+R]=m.isConstraint(M,C);P<0&&(z?b.push(x):(A.push(x),k[x]=1),y&&F.push([C,M,-1]))}return D}function p(m,y,_){for(var v=0,x=0;x<m.length;++x)y[x]===_&&(m[v++]=m[x]);return m.length=v,m}function g(m,y,_){var v=d(m,_);if(y===0)return _?v.cells.concat(v.boundary):v.cells;for(var x=1,S=v.active,M=v.next,C=v.flags,w=v.cells,k=v.constraint,A=v.neighbor;S.length>0||M.length>0;){for(;S.length>0;){var b=S.pop();if(C[b]!==-x){C[b]=x;for(var E=w[b],T=0;T<3;++T){var F=A[3*b+T];F>=0&&C[F]===0&&(k[3*b+T]?M.push(F):(S.push(F),C[F]=x))}}}var D=M;M=S,S=D,M.length=0,x=-x}var R=p(w,C,y);return _?R.concat(v.boundary):R}},8902(s,l,n){"use strict";var u=n(2478),c=n(3250)[3],f=0,h=1,d=2;s.exports=M;function p(C,w,k,A,b){this.a=C,this.b=w,this.idx=k,this.lowerIds=A,this.upperIds=b}function g(C,w,k,A){this.a=C,this.b=w,this.type=k,this.idx=A}function m(C,w){var k=C.a[0]-w.a[0]||C.a[1]-w.a[1]||C.type-w.type;return k||C.type!==f&&(k=c(C.a,C.b,w.b),k)?k:C.idx-w.idx}function y(C,w){return c(C.a,C.b,w)}function _(C,w,k,A,b){for(var E=u.lt(w,A,y),T=u.gt(w,A,y),F=E;F<T;++F){for(var D=w[F],R=D.lowerIds,z=R.length;z>1&&c(k[R[z-2]],k[R[z-1]],A)>0;)C.push([R[z-1],R[z-2],b]),z-=1;R.length=z,R.push(b);for(var P=D.upperIds,z=P.length;z>1&&c(k[P[z-2]],k[P[z-1]],A)<0;)C.push([P[z-2],P[z-1],b]),z-=1;P.length=z,P.push(b)}}function v(C,w){var k;return C.a[0]<w.a[0]?k=c(C.a,C.b,w.a):k=c(w.b,w.a,C.a),k||(w.b[0]<C.b[0]?k=c(C.a,C.b,w.b):k=c(w.b,w.a,C.b),k||C.idx-w.idx)}function x(C,w,k){var A=u.le(C,k,v),b=C[A],E=b.upperIds,T=E[E.length-1];b.upperIds=[T],C.splice(A+1,0,new p(k.a,k.b,k.idx,[T],E))}function S(C,w,k){var A=k.a;k.a=k.b,k.b=A;var b=u.eq(C,k,v),E=C[b],T=C[b-1];T.upperIds=E.upperIds,C.splice(b,1)}function M(C,w){for(var k=C.length,A=w.length,b=[],E=0;E<k;++E)b.push(new g(C[E],null,f,E));for(var E=0;E<A;++E){var T=w[E],F=C[T[0]],D=C[T[1]];F[0]<D[0]?b.push(new g(F,D,d,E),new g(D,F,h,E)):F[0]>D[0]&&b.push(new g(D,F,d,E),new g(F,D,h,E))}b.sort(m);for(var R=b[0].a[0]-(1+Math.abs(b[0].a[0]))*Math.pow(2,-52),P=[new p([R,1],[R,0],-1,[],[],[],[])],z=[],E=0,I=b.length;E<I;++E){var L=b[E],B=L.type;B===f?_(z,P,C,L.a,L.idx):B===d?x(P,C,L):S(P,C,L)}return z}},5542(s,l,n){"use strict";var u=n(2478);s.exports=d;function c(p,g){this.stars=p,this.edges=g}var f=c.prototype;function h(p,g,m){for(var y=1,_=p.length;y<_;y+=2)if(p[y-1]===g&&p[y]===m){p[y-1]=p[_-2],p[y]=p[_-1],p.length=_-2;return}}f.isConstraint=(function(){var p=[0,0];function g(m,y){return m[0]-y[0]||m[1]-y[1]}return function(m,y){return p[0]=Math.min(m,y),p[1]=Math.max(m,y),u.eq(this.edges,p,g)>=0}})(),f.removeTriangle=function(p,g,m){var y=this.stars;h(y[p],g,m),h(y[g],m,p),h(y[m],p,g)},f.addTriangle=function(p,g,m){var y=this.stars;y[p].push(g,m),y[g].push(m,p),y[m].push(p,g)},f.opposite=function(p,g){for(var m=this.stars[g],y=1,_=m.length;y<_;y+=2)if(m[y]===p)return m[y-1];return-1},f.flip=function(p,g){var m=this.opposite(p,g),y=this.opposite(g,p);this.removeTriangle(p,g,m),this.removeTriangle(g,p,y),this.addTriangle(p,y,m),this.addTriangle(g,m,y)},f.edges=function(){for(var p=this.stars,g=[],m=0,y=p.length;m<y;++m)for(var _=p[m],v=0,x=_.length;v<x;v+=2)g.push([_[v],_[v+1]]);return g},f.cells=function(){for(var p=this.stars,g=[],m=0,y=p.length;m<y;++m)for(var _=p[m],v=0,x=_.length;v<x;v+=2){var S=_[v],M=_[v+1];m<Math.min(S,M)&&g.push([m,S,M])}return g};function d(p,g){for(var m=new Array(p),y=0;y<p;++y)m[y]=[];return new c(m,g)}},2419(s){"use strict";s.exports=l;function l(n){for(var u=1,c=1;c<n.length;++c)for(var f=0;f<c;++f)if(n[c]<n[f])u=-u;else if(n[f]===n[c])return 0;return u}},3628(s,l,n){"use strict";var u=n(1338),c=n(727);function f(p,g){for(var m=0,y=p.length,_=0;_<y;++_)m+=p[_]*g[_];return m}function h(p){var g=p.length;if(g===0)return[];var m=p[0].length,y=u([p.length+1,p.length+1],1),_=u([p.length+1],1);y[g][g]=0;for(var v=0;v<g;++v){for(var x=0;x<=v;++x)y[x][v]=y[v][x]=2*f(p[v],p[x]);_[v]=f(p[v],p[v])}for(var S=c(y,_),M=0,C=S[g+1],v=0;v<C.length;++v)M+=C[v];for(var w=new Array(g),v=0;v<g;++v){for(var C=S[v],k=0,x=0;x<C.length;++x)k+=C[x];w[v]=k/M}return w}function d(p){if(p.length===0)return[];for(var g=p[0].length,m=u([g]),y=h(p),_=0;_<p.length;++_)for(var v=0;v<g;++v)m[v]+=p[_][v]*y[_];return m}d.barycenetric=h,s.exports=d},6037(s,l,n){s.exports=c;var u=n(3628);function c(f){for(var h=u(f),d=0,p=0;p<f.length;++p)for(var g=f[p],m=0;m<h.length;++m)d+=Math.pow(g[m]-h[m],2);return Math.sqrt(d/f.length)}},332(s,l,n){"use strict";s.exports=F;var u=n(1755),c=n(6867),f=n(1125),h=n(7842),d=n(1318),p=n(946),g=n(5838),m=n(1278),y=n(3637);function _(D){var R=p(D);return[m(R,-1/0),m(R,1/0)]}function v(D,R){for(var P=new Array(R.length),z=0;z<R.length;++z){var I=R[z],L=D[I[0]],B=D[I[1]];P[z]=[m(Math.min(L[0],B[0]),-1/0),m(Math.min(L[1],B[1]),-1/0),m(Math.max(L[0],B[0]),1/0),m(Math.max(L[1],B[1]),1/0)]}return P}function x(D){for(var R=new Array(D.length),P=0;P<D.length;++P){var z=D[P];R[P]=[m(z[0],-1/0),m(z[1],-1/0),m(z[0],1/0),m(z[1],1/0)]}return R}function S(D,R,P){var z=[];return c(P,function(I,L){var B=R[I],O=R[L];if(!(B[0]===O[0]||B[0]===O[1]||B[1]===O[0]||B[1]===O[1])){var G=D[B[0]],W=D[B[1]],X=D[O[0]],Z=D[O[1]];f(G,W,X,Z)&&z.push([I,L])}}),z}function M(D,R,P,z){var I=[];return c(P,z,function(L,B){var O=R[L];if(!(O[0]===B||O[1]===B)){var G=D[B],W=D[O[0]],X=D[O[1]];f(W,X,G,G)&&I.push([L,B])}}),I}function C(D,R,P,z,I){var L,B,O=D.map(function(se){return[h(se[0]),h(se[1])]});for(L=0;L<P.length;++L){var G=P[L];B=G[0];var W=G[1],X=R[B],Z=R[W],J=y(g(D[X[0]]),g(D[X[1]]),g(D[Z[0]]),g(D[Z[1]]));if(J){var N=D.length;D.push([p(J[0]),p(J[1])]),O.push(J),z.push([B,N],[W,N])}}for(z.sort(function(se,le){if(se[0]!==le[0])return se[0]-le[0];var ce=O[se[1]],pe=O[le[1]];return d(ce[0],pe[0])||d(ce[1],pe[1])}),L=z.length-1;L>=0;--L){var H=z[L];B=H[0];var $=R[B],U=$[0],V=$[1],j=D[U],q=D[V];if((j[0]-q[0]||j[1]-q[1])<0){var Y=U;U=V,V=Y}$[0]=U;var K=$[1]=H[1],te;for(I&&(te=$[2]);L>0&&z[L-1][0]===B;){var H=z[--L],ne=H[1];I?R.push([K,ne,te]):R.push([K,ne]),K=ne}I?R.push([K,V,te]):R.push([K,V])}return O}function w(D,R,P){for(var z=R.length,I=new u(z),L=[],B=0;B<R.length;++B){var O=R[B],G=_(O[0]),W=_(O[1]);L.push([m(G[0],-1/0),m(W[0],-1/0),m(G[1],1/0),m(W[1],1/0)])}c(L,function(H,$){I.link(H,$)});for(var X=!0,Z=new Array(z),B=0;B<z;++B){var J=I.find(B);J!==B&&(X=!1,D[J]=[Math.min(D[B][0],D[J][0]),Math.min(D[B][1],D[J][1])])}if(X)return null;for(var N=0,B=0;B<z;++B){var J=I.find(B);J===B?(Z[B]=N,D[N++]=D[B]):Z[B]=-1}D.length=N;for(var B=0;B<z;++B)Z[B]<0&&(Z[B]=Z[I.find(B)]);return Z}function k(D,R){return D[0]-R[0]||D[1]-R[1]}function A(D,R){var P=D[0]-R[0]||D[1]-R[1];return P||(D[2]<R[2]?-1:D[2]>R[2]?1:0)}function b(D,R,P){if(D.length!==0){if(R)for(var z=0;z<D.length;++z){var I=D[z],L=R[I[0]],B=R[I[1]];I[0]=Math.min(L,B),I[1]=Math.max(L,B)}else for(var z=0;z<D.length;++z){var I=D[z],L=I[0],B=I[1];I[0]=Math.min(L,B),I[1]=Math.max(L,B)}P?D.sort(A):D.sort(k);for(var O=1,z=1;z<D.length;++z){var G=D[z-1],W=D[z];W[0]===G[0]&&W[1]===G[1]&&(!P||W[2]===G[2])||(D[O++]=W)}D.length=O}}function E(D,R,P){var z=w(D,[],x(D));return b(R,z,P),!!z}function T(D,R,P){var z=v(D,R),I=S(D,R,z),L=x(D),B=M(D,R,z,L),O=C(D,R,I,B,P),G=w(D,O,L);return b(R,G,P),G?!0:I.length>0||B.length>0}function F(D,R,P){var z;if(P){z=R;for(var I=new Array(R.length),L=0;L<R.length;++L){var B=R[L];I[L]=[B[0],B[1],P[L]]}R=I}for(var O=E(D,R,!!P);T(D,R,!!P);)O=!0;if(P&&O){z.length=0,P.length=0;for(var L=0;L<R.length;++L){var B=R[L];z.push([B[0],B[1]]),P.push(B[2])}}return O}},3637(s,l,n){"use strict";s.exports=y;var u=n(6504),c=n(8697),f=n(5572),h=n(7721),d=n(544),p=n(2653),g=n(8987);function m(_,v){return f(u(_[0],v[1]),u(_[1],v[0]))}function y(_,v,x,S){var M=d(v,_),C=d(S,x),w=m(M,C);if(h(w)===0)return null;var k=d(_,x),A=m(C,k),b=c(A,w),E=g(M,b),T=p(_,E);return T}},3642(s){s.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],"rainbow-soft":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],"freesurface-blue":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],"freesurface-red":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],"velocity-blue":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],"velocity-green":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},6729(s,l,n){"use strict";var u=n(3642),c=n(395);s.exports=f;function f(g){var m,y,_,v,x,S,M,C,b,w,k;if(g||(g={}),C=(g.nshades||72)-1,M=g.format||"hex",S=g.colormap,S||(S="jet"),typeof S=="string"){if(S=S.toLowerCase(),!u[S])throw Error(S+" not a supported colorscale");x=u[S]}else if(Array.isArray(S))x=S.slice();else throw Error("unsupported colormap option",S);if(x.length>C+1)throw new Error(S+" map requires nshades to be at least size "+x.length);Array.isArray(g.alpha)?g.alpha.length!==2?w=[1,1]:w=g.alpha.slice():typeof g.alpha=="number"?w=[g.alpha,g.alpha]:w=[1,1],m=x.map(function(F){return Math.round(F.index*C)}),w[0]=Math.min(Math.max(w[0],0),1),w[1]=Math.min(Math.max(w[1],0),1);var A=x.map(function(F,D){var R=x[D].index,P=x[D].rgb.slice();return P.length===4&&P[3]>=0&&P[3]<=1||(P[3]=w[0]+(w[1]-w[0])*R),P}),b=[];for(k=0;k<m.length-1;++k){v=m[k+1]-m[k],y=A[k],_=A[k+1];for(var E=0;E<v;E++){var T=E/v;b.push([Math.round(c(y[0],_[0],T)),Math.round(c(y[1],_[1],T)),Math.round(c(y[2],_[2],T)),c(y[3],_[3],T)])}}return b.push(x[x.length-1].rgb.concat(w[1])),M==="hex"?b=b.map(d):M==="rgbaString"?b=b.map(p):M==="float"&&(b=b.map(h)),b}function h(g){return[g[0]/255,g[1]/255,g[2]/255,g[3]]}function d(g){for(var m,y="#",_=0;_<3;++_)m=g[_],m=m.toString(16),y+=("00"+m).substr(m.length);return y}function p(g){return"rgba("+g.join(",")+")"}},3140(s,l,n){"use strict";s.exports=g;var u=n(3250),c=n(8572),f=n(9362),h=n(5382),d=n(8210);function p(m,y,_){var v=f(m[0],-y[0]),x=f(m[1],-y[1]),S=f(_[0],-y[0]),M=f(_[1],-y[1]),C=d(h(v,S),h(x,M));return C[C.length-1]>=0}function g(m,y,_,v){var x=u(y,_,v);if(x===0){var S=c(u(m,y,_)),M=c(u(m,y,v));if(S===M){if(S===0){var C=p(m,y,_),w=p(m,y,v);return C===w?0:C?1:-1}return 0}else{if(M===0)return S>0||p(m,y,v)?-1:1;if(S===0)return M>0||p(m,y,_)?1:-1}return c(M-S)}var k=u(m,y,_);if(k>0)return x>0&&u(m,y,v)>0?1:-1;if(k<0)return x>0||u(m,y,v)>0?1:-1;var A=u(m,y,v);return A>0||p(m,y,_)?1:-1}},8572(s){"use strict";s.exports=function(n){return n<0?-1:n>0?1:0}},8507(s){s.exports=u;var l=Math.min;function n(c,f){return c-f}function u(c,f){var h=c.length,d=c.length-f.length;if(d)return d;switch(h){case 0:return 0;case 1:return c[0]-f[0];case 2:return c[0]+c[1]-f[0]-f[1]||l(c[0],c[1])-l(f[0],f[1]);case 3:var p=c[0]+c[1],g=f[0]+f[1];if(d=p+c[2]-(g+f[2]),d)return d;var m=l(c[0],c[1]),y=l(f[0],f[1]);return l(m,c[2])-l(y,f[2])||l(m+c[2],p)-l(y+f[2],g);case 4:var _=c[0],v=c[1],x=c[2],S=c[3],M=f[0],C=f[1],w=f[2],k=f[3];return _+v+x+S-(M+C+w+k)||l(_,v,x,S)-l(M,C,w,k,M)||l(_+v,_+x,_+S,v+x,v+S,x+S)-l(M+C,M+w,M+k,C+w,C+k,w+k)||l(_+v+x,_+v+S,_+x+S,v+x+S)-l(M+C+w,M+C+k,M+w+k,C+w+k);default:for(var A=c.slice().sort(n),b=f.slice().sort(n),E=0;E<h;++E)if(d=A[E]-b[E],d)return d;return 0}}},3788(s,l,n){"use strict";var u=n(8507),c=n(2419);s.exports=f;function f(h,d){return u(h,d)||c(h)-c(d)}},7352(s,l,n){"use strict";var u=n(5721),c=n(4750),f=n(2690);s.exports=h;function h(d){var p=d.length;if(p===0)return[];if(p===1)return[[0]];var g=d[0].length;return g===0?[]:g===1?u(d):g===2?c(d):f(d,g)}},5721(s){"use strict";s.exports=l;function l(n){for(var u=0,c=0,f=1;f<n.length;++f)n[f][0]<n[u][0]&&(u=f),n[f][0]>n[c][0]&&(c=f);return u<c?[[u],[c]]:u>c?[[c],[u]]:[[u]]}},4750(s,l,n){"use strict";s.exports=c;var u=n(3090);function c(f){var h=u(f),d=h.length;if(d<=2)return[];for(var p=new Array(d),g=h[d-1],m=0;m<d;++m){var y=h[m];p[m]=[g,y],g=y}return p}},2690(s,l,n){"use strict";s.exports=d;var u=n(8954),c=n(3952);function f(p,g){for(var m=p.length,y=new Array(m),_=0;_<g.length;++_)y[_]=p[g[_]];for(var v=g.length,_=0;_<m;++_)g.indexOf(_)<0&&(y[v++]=p[_]);return y}function h(p,g){for(var m=p.length,y=g.length,_=0;_<m;++_)for(var v=p[_],x=0;x<v.length;++x){var S=v[x];if(S<y)v[x]=g[S];else{S=S-y;for(var M=0;M<y;++M)S>=g[M]&&(S+=1);v[x]=S}}return p}function d(p,g){try{return u(p,!0)}catch{var m=c(p);if(m.length<=g)return[];var y=f(p,m),_=u(y,!0);return h(_,m)}}},4769(s){"use strict";function l(u,c,f,h,d,p){var g=6*d*d-6*d,m=3*d*d-4*d+1,y=-6*d*d+6*d,_=3*d*d-2*d;if(u.length){p||(p=new Array(u.length));for(var v=u.length-1;v>=0;--v)p[v]=g*u[v]+m*c[v]+y*f[v]+_*h[v];return p}return g*u+m*c+y*f[v]+_*h}function n(u,c,f,h,d,p){var g=d-1,m=d*d,y=g*g,_=(1+2*d)*y,v=d*y,x=m*(3-2*d),S=m*g;if(u.length){p||(p=new Array(u.length));for(var M=u.length-1;M>=0;--M)p[M]=_*u[M]+v*c[M]+x*f[M]+S*h[M];return p}return _*u+v*c+x*f+S*h}s.exports=n,s.exports.derivative=l},7642(s,l,n){"use strict";var u=n(8954),c=n(1682);s.exports=p;function f(g,m){this.point=g,this.index=m}function h(g,m){for(var y=g.point,_=m.point,v=y.length,x=0;x<v;++x){var S=_[x]-y[x];if(S)return S}return 0}function d(g,m,y){if(g===1)return y?[[-1,0]]:[];var _=m.map(function(C,w){return[C[0],w]});_.sort(function(C,w){return C[0]-w[0]});for(var v=new Array(g-1),x=1;x<g;++x){var S=_[x-1],M=_[x];v[x-1]=[S[1],M[1]]}return y&&v.push([-1,v[0][1]],[v[g-1][1],-1]),v}function p(g,m){var y=g.length;if(y===0)return[];var _=g[0].length;if(_<1)return[];if(_===1)return d(y,g,m);for(var v=new Array(y),x=1,S=0;S<y;++S){for(var M=g[S],C=new Array(_+1),w=0,k=0;k<_;++k){var A=M[k];C[k]=A,w+=A*A}C[_]=w,v[S]=new f(C,S),x=Math.max(w,x)}c(v,h),y=v.length;for(var b=new Array(y+_+1),E=new Array(y+_+1),T=(_+1)*(_+1)*x,F=new Array(_+1),S=0;S<=_;++S)F[S]=0;F[_]=T,b[0]=F.slice(),E[0]=-1;for(var S=0;S<=_;++S){var C=F.slice();C[S]=1,b[S+1]=C,E[S+1]=-1}for(var S=0;S<y;++S){var D=v[S];b[S+_+1]=D.point,E[S+_+1]=D.index}var R=u(b,!1);if(m?R=R.filter(function(P){for(var z=0,I=0;I<=_;++I){var L=E[P[I]];if(L<0&&++z>=2)return!1;P[I]=L}return!0}):R=R.filter(function(P){for(var z=0;z<=_;++z){var I=E[P[z]];if(I<0)return!1;P[z]=I}return!0}),_&1)for(var S=0;S<R.length;++S){var D=R[S],C=D[0];D[0]=D[1],D[1]=C}return R}},2361(s){var l=!1;if(typeof Float64Array<"u"){var n=new Float64Array(1),u=new Uint32Array(n.buffer);if(n[0]=1,l=!0,u[1]===1072693248){let x=function(C,w){return u[0]=C,u[1]=w,n[0]},S=function(C){return n[0]=C,u[0]},M=function(C){return n[0]=C,u[1]};var c=x,f=S,h=M;s.exports=function(w){return n[0]=w,[u[0],u[1]]},s.exports.pack=x,s.exports.lo=S,s.exports.hi=M}else if(u[0]===1072693248){let x=function(C,w){return u[1]=C,u[0]=w,n[0]},S=function(C){return n[0]=C,u[1]},M=function(C){return n[0]=C,u[0]};var d=x,p=S,g=M;s.exports=function(w){return n[0]=w,[u[1],u[0]]},s.exports.pack=x,s.exports.lo=S,s.exports.hi=M}else l=!1}if(!l){let x=function(C,w){return v.writeUInt32LE(C,0,!0),v.writeUInt32LE(w,4,!0),v.readDoubleLE(0,!0)},S=function(C){return v.writeDoubleLE(C,0,!0),v.readUInt32LE(0,!0)},M=function(C){return v.writeDoubleLE(C,0,!0),v.readUInt32LE(4,!0)};var m=x,y=S,_=M,v=new Buffer(8);s.exports=function(w){return v.writeDoubleLE(w,0,!0),[v.readUInt32LE(0,!0),v.readUInt32LE(4,!0)]},s.exports.pack=x,s.exports.lo=S,s.exports.hi=M}s.exports.sign=function(x){return s.exports.hi(x)>>>31},s.exports.exponent=function(x){var S=s.exports.hi(x);return(S<<1>>>21)-1023},s.exports.fraction=function(x){var S=s.exports.lo(x),M=s.exports.hi(x),C=M&(1<<20)-1;return M&2146435072&&(C+=1048576),[S,C]},s.exports.denormalized=function(x){var S=s.exports.hi(x);return!(S&2146435072)}},1338(s){"use strict";function l(c,f,h){var d=c[h]|0;if(d<=0)return[];var p=new Array(d),g;if(h===c.length-1)for(g=0;g<d;++g)p[g]=f;else for(g=0;g<d;++g)p[g]=l(c,f,h+1);return p}function n(c,f){var h,d;for(h=new Array(c),d=0;d<c;++d)h[d]=f;return h}function u(c,f){switch(typeof f>"u"&&(f=0),typeof c){case"number":if(c>0)return n(c|0,f);break;case"object":if(typeof c.length=="number")return l(c,f,0);break}return[]}s.exports=u},3134(s,l,n){"use strict";s.exports=c;var u=n(1682);function c(f,h){var d=f.length;if(typeof h!="number"){h=0;for(var p=0;p<d;++p){var g=f[p];h=Math.max(h,g[0],g[1])}h=(h|0)+1}h=h|0;for(var m=new Array(h),p=0;p<h;++p)m[p]=[];for(var p=0;p<d;++p){var g=f[p];m[g[0]].push(g[1]),m[g[1]].push(g[0])}for(var y=0;y<h;++y)u(m[y],function(_,v){return _-v});return m}},5033(s){"use strict";s.exports=l;function l(n,u,c){var f=u||0,h=c||1;return[[n[12]+n[0],n[13]+n[1],n[14]+n[2],n[15]+n[3]],[n[12]-n[0],n[13]-n[1],n[14]-n[2],n[15]-n[3]],[n[12]+n[4],n[13]+n[5],n[14]+n[6],n[15]+n[7]],[n[12]-n[4],n[13]-n[5],n[14]-n[6],n[15]-n[7]],[f*n[12]+n[8],f*n[13]+n[9],f*n[14]+n[10],f*n[15]+n[11]],[h*n[12]-n[8],h*n[13]-n[9],h*n[14]-n[10],h*n[15]-n[11]]]}},9215(s,l,n){"use strict";s.exports=g;var u=n(4769),c=n(2478);function f(m,y,_){return Math.min(y,Math.max(m,_))}function h(m,y,_){this.dimension=m.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var v=0;v<this.dimension;++v)this.bounds[0][v]=-1/0,this.bounds[1][v]=1/0;this._state=m.slice().reverse(),this._velocity=y.slice().reverse(),this._time=[_],this._scratch=[m.slice(),m.slice(),m.slice(),m.slice(),m.slice()]}var d=h.prototype;d.flush=function(m){var y=c.gt(this._time,m)-1;y<=0||(this._time.splice(0,y),this._state.splice(0,y*this.dimension),this._velocity.splice(0,y*this.dimension))},d.curve=function(m){var y=this._time,_=y.length,v=c.le(y,m),x=this._scratch[0],S=this._state,M=this._velocity,C=this.dimension,w=this.bounds;if(v<0)for(var k=C-1,A=0;A<C;++A,--k)x[A]=S[k];else if(v>=_-1)for(var k=S.length-1,b=m-y[_-1],A=0;A<C;++A,--k)x[A]=S[k]+b*M[k];else{for(var k=C*(v+1)-1,E=y[v],T=y[v+1],F=T-E||1,D=this._scratch[1],R=this._scratch[2],P=this._scratch[3],z=this._scratch[4],I=!0,A=0;A<C;++A,--k)D[A]=S[k],P[A]=M[k]*F,R[A]=S[k+C],z[A]=M[k+C]*F,I=I&&D[A]===R[A]&&P[A]===z[A]&&P[A]===0;if(I)for(var A=0;A<C;++A)x[A]=D[A];else u(D,P,R,z,(m-E)/F,x)}for(var L=w[0],B=w[1],A=0;A<C;++A)x[A]=f(L[A],B[A],x[A]);return x},d.dcurve=function(m){var y=this._time,_=y.length,v=c.le(y,m),x=this._scratch[0],S=this._state,M=this._velocity,C=this.dimension;if(v>=_-1)for(var w=S.length-1,k=m-y[_-1],A=0;A<C;++A,--w)x[A]=M[w];else{for(var w=C*(v+1)-1,b=y[v],E=y[v+1],T=E-b||1,F=this._scratch[1],D=this._scratch[2],R=this._scratch[3],P=this._scratch[4],z=!0,A=0;A<C;++A,--w)F[A]=S[w],R[A]=M[w]*T,D[A]=S[w+C],P[A]=M[w+C]*T,z=z&&F[A]===D[A]&&R[A]===P[A]&&R[A]===0;if(z)for(var A=0;A<C;++A)x[A]=0;else{u.derivative(F,R,D,P,(m-b)/T,x);for(var A=0;A<C;++A)x[A]/=T}}return x},d.lastT=function(){var m=this._time;return m[m.length-1]},d.stable=function(){for(var m=this._velocity,y=m.length,_=this.dimension-1;_>=0;--_)if(m[--y])return!1;return!0},d.jump=function(m){var y=this.lastT(),_=this.dimension;if(!(m<y||arguments.length!==_+1)){var v=this._state,x=this._velocity,S=v.length-this.dimension,M=this.bounds,C=M[0],w=M[1];this._time.push(y,m);for(var k=0;k<2;++k)for(var A=0;A<_;++A)v.push(v[S++]),x.push(0);this._time.push(m);for(var A=_;A>0;--A)v.push(f(C[A-1],w[A-1],arguments[A])),x.push(0)}},d.push=function(m){var y=this.lastT(),_=this.dimension;if(!(m<y||arguments.length!==_+1)){var v=this._state,x=this._velocity,S=v.length-this.dimension,M=m-y,C=this.bounds,w=C[0],k=C[1],A=M>1e-6?1/M:0;this._time.push(m);for(var b=_;b>0;--b){var E=f(w[b-1],k[b-1],arguments[b]);v.push(E),x.push((E-v[S++])*A)}}},d.set=function(m){var y=this.dimension;if(!(m<this.lastT()||arguments.length!==y+1)){var _=this._state,v=this._velocity,x=this.bounds,S=x[0],M=x[1];this._time.push(m);for(var C=y;C>0;--C)_.push(f(S[C-1],M[C-1],arguments[C])),v.push(0)}},d.move=function(m){var y=this.lastT(),_=this.dimension;if(!(m<=y||arguments.length!==_+1)){var v=this._state,x=this._velocity,S=v.length-this.dimension,M=this.bounds,C=M[0],w=M[1],k=m-y,A=k>1e-6?1/k:0;this._time.push(m);for(var b=_;b>0;--b){var E=arguments[b];v.push(f(C[b-1],w[b-1],v[S++]+E)),x.push(E*A)}}},d.idle=function(m){var y=this.lastT();if(!(m<y)){var _=this.dimension,v=this._state,x=this._velocity,S=v.length-_,M=this.bounds,C=M[0],w=M[1],k=m-y;this._time.push(m);for(var A=_-1;A>=0;--A)v.push(f(C[A],w[A],v[S]+k*x[S])),x.push(0),S+=1}};function p(m){for(var y=new Array(m),_=0;_<m;++_)y[_]=0;return y}function g(m,y,_){switch(arguments.length){case 0:return new h([0],[0],0);case 1:if(typeof m=="number"){var v=p(m);return new h(v,v,0)}else return new h(m,p(m.length),0);case 2:if(typeof y=="number"){var v=p(m.length);return new h(m,v,+y)}else _=0;case 3:if(m.length!==y.length)throw new Error("state and velocity lengths must match");return new h(m,y,_)}}},3840(s){"use strict";s.exports=C;var l=0,n=1;function u(w,k,A,b,E,T){this._color=w,this.key=k,this.value=A,this.left=b,this.right=E,this._count=T}function c(w){return new u(w._color,w.key,w.value,w.left,w.right,w._count)}function f(w,k){return new u(w,k.key,k.value,k.left,k.right,k._count)}function h(w){w._count=1+(w.left?w.left._count:0)+(w.right?w.right._count:0)}function d(w,k){this._compare=w,this.root=k}var p=d.prototype;Object.defineProperty(p,"keys",{get:function(){var w=[];return this.forEach(function(k,A){w.push(k)}),w}}),Object.defineProperty(p,"values",{get:function(){var w=[];return this.forEach(function(k,A){w.push(A)}),w}}),Object.defineProperty(p,"length",{get:function(){return this.root?this.root._count:0}}),p.insert=function(w,k){for(var A=this._compare,b=this.root,E=[],T=[];b;){var F=A(w,b.key);E.push(b),T.push(F),F<=0?b=b.left:b=b.right}E.push(new u(l,w,k,null,null,1));for(var D=E.length-2;D>=0;--D){var b=E[D];T[D]<=0?E[D]=new u(b._color,b.key,b.value,E[D+1],b.right,b._count+1):E[D]=new u(b._color,b.key,b.value,b.left,E[D+1],b._count+1)}for(var D=E.length-1;D>1;--D){var R=E[D-1],b=E[D];if(R._color===n||b._color===n)break;var P=E[D-2];if(P.left===R)if(R.left===b){var z=P.right;if(z&&z._color===l)R._color=n,P.right=f(n,z),P._color=l,D-=1;else{if(P._color=l,P.left=R.right,R._color=n,R.right=P,E[D-2]=R,E[D-1]=b,h(P),h(R),D>=3){var I=E[D-3];I.left===P?I.left=R:I.right=R}break}}else{var z=P.right;if(z&&z._color===l)R._color=n,P.right=f(n,z),P._color=l,D-=1;else{if(R.right=b.left,P._color=l,P.left=b.right,b._color=n,b.left=R,b.right=P,E[D-2]=b,E[D-1]=R,h(P),h(R),h(b),D>=3){var I=E[D-3];I.left===P?I.left=b:I.right=b}break}}else if(R.right===b){var z=P.left;if(z&&z._color===l)R._color=n,P.left=f(n,z),P._color=l,D-=1;else{if(P._color=l,P.right=R.left,R._color=n,R.left=P,E[D-2]=R,E[D-1]=b,h(P),h(R),D>=3){var I=E[D-3];I.right===P?I.right=R:I.left=R}break}}else{var z=P.left;if(z&&z._color===l)R._color=n,P.left=f(n,z),P._color=l,D-=1;else{if(R.left=b.right,P._color=l,P.right=b.left,b._color=n,b.right=R,b.left=P,E[D-2]=b,E[D-1]=R,h(P),h(R),h(b),D>=3){var I=E[D-3];I.right===P?I.right=b:I.left=b}break}}}return E[0]._color=n,new d(A,E[0])};function g(w,k){if(k.left){var A=g(w,k.left);if(A)return A}var A=w(k.key,k.value);if(A)return A;if(k.right)return g(w,k.right)}function m(w,k,A,b){var E=k(w,b.key);if(E<=0){if(b.left){var T=m(w,k,A,b.left);if(T)return T}var T=A(b.key,b.value);if(T)return T}if(b.right)return m(w,k,A,b.right)}function y(w,k,A,b,E){var T=A(w,E.key),F=A(k,E.key),D;if(T<=0&&(E.left&&(D=y(w,k,A,b,E.left),D)||F>0&&(D=b(E.key,E.value),D)))return D;if(F>0&&E.right)return y(w,k,A,b,E.right)}p.forEach=function(k,A,b){if(this.root)switch(arguments.length){case 1:return g(k,this.root);case 2:return m(A,this._compare,k,this.root);case 3:return this._compare(A,b)>=0?void 0:y(A,b,this._compare,k,this.root)}},Object.defineProperty(p,"begin",{get:function(){for(var w=[],k=this.root;k;)w.push(k),k=k.left;return new _(this,w)}}),Object.defineProperty(p,"end",{get:function(){for(var w=[],k=this.root;k;)w.push(k),k=k.right;return new _(this,w)}}),p.at=function(w){if(w<0)return new _(this,[]);for(var k=this.root,A=[];;){if(A.push(k),k.left){if(w<k.left._count){k=k.left;continue}w-=k.left._count}if(!w)return new _(this,A);if(w-=1,k.right){if(w>=k.right._count)break;k=k.right}else break}return new _(this,[])},p.ge=function(w){for(var k=this._compare,A=this.root,b=[],E=0;A;){var T=k(w,A.key);b.push(A),T<=0&&(E=b.length),T<=0?A=A.left:A=A.right}return b.length=E,new _(this,b)},p.gt=function(w){for(var k=this._compare,A=this.root,b=[],E=0;A;){var T=k(w,A.key);b.push(A),T<0&&(E=b.length),T<0?A=A.left:A=A.right}return b.length=E,new _(this,b)},p.lt=function(w){for(var k=this._compare,A=this.root,b=[],E=0;A;){var T=k(w,A.key);b.push(A),T>0&&(E=b.length),T<=0?A=A.left:A=A.right}return b.length=E,new _(this,b)},p.le=function(w){for(var k=this._compare,A=this.root,b=[],E=0;A;){var T=k(w,A.key);b.push(A),T>=0&&(E=b.length),T<0?A=A.left:A=A.right}return b.length=E,new _(this,b)},p.find=function(w){for(var k=this._compare,A=this.root,b=[];A;){var E=k(w,A.key);if(b.push(A),E===0)return new _(this,b);E<=0?A=A.left:A=A.right}return new _(this,[])},p.remove=function(w){var k=this.find(w);return k?k.remove():this},p.get=function(w){for(var k=this._compare,A=this.root;A;){var b=k(w,A.key);if(b===0)return A.value;b<=0?A=A.left:A=A.right}};function _(w,k){this.tree=w,this._stack=k}var v=_.prototype;Object.defineProperty(v,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(v,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),v.clone=function(){return new _(this.tree,this._stack.slice())};function x(w,k){w.key=k.key,w.value=k.value,w.left=k.left,w.right=k.right,w._color=k._color,w._count=k._count}function S(w){for(var k,A,b,E,T=w.length-1;T>=0;--T){if(k=w[T],T===0){k._color=n;return}if(A=w[T-1],A.left===k){if(b=A.right,b.right&&b.right._color===l){if(b=A.right=c(b),E=b.right=c(b.right),A.right=b.left,b.left=A,b.right=E,b._color=A._color,k._color=n,A._color=n,E._color=n,h(A),h(b),T>1){var F=w[T-2];F.left===A?F.left=b:F.right=b}w[T-1]=b;return}else if(b.left&&b.left._color===l){if(b=A.right=c(b),E=b.left=c(b.left),A.right=E.left,b.left=E.right,E.left=A,E.right=b,E._color=A._color,A._color=n,b._color=n,k._color=n,h(A),h(b),h(E),T>1){var F=w[T-2];F.left===A?F.left=E:F.right=E}w[T-1]=E;return}if(b._color===n)if(A._color===l){A._color=n,A.right=f(l,b);return}else{A.right=f(l,b);continue}else{if(b=c(b),A.right=b.left,b.left=A,b._color=A._color,A._color=l,h(A),h(b),T>1){var F=w[T-2];F.left===A?F.left=b:F.right=b}w[T-1]=b,w[T]=A,T+1<w.length?w[T+1]=k:w.push(k),T=T+2}}else{if(b=A.left,b.left&&b.left._color===l){if(b=A.left=c(b),E=b.left=c(b.left),A.left=b.right,b.right=A,b.left=E,b._color=A._color,k._color=n,A._color=n,E._color=n,h(A),h(b),T>1){var F=w[T-2];F.right===A?F.right=b:F.left=b}w[T-1]=b;return}else if(b.right&&b.right._color===l){if(b=A.left=c(b),E=b.right=c(b.right),A.left=E.right,b.right=E.left,E.right=A,E.left=b,E._color=A._color,A._color=n,b._color=n,k._color=n,h(A),h(b),h(E),T>1){var F=w[T-2];F.right===A?F.right=E:F.left=E}w[T-1]=E;return}if(b._color===n)if(A._color===l){A._color=n,A.left=f(l,b);return}else{A.left=f(l,b);continue}else{if(b=c(b),A.left=b.right,b.right=A,b._color=A._color,A._color=l,h(A),h(b),T>1){var F=w[T-2];F.right===A?F.right=b:F.left=b}w[T-1]=b,w[T]=A,T+1<w.length?w[T+1]=k:w.push(k),T=T+2}}}}v.remove=function(){var w=this._stack;if(w.length===0)return this.tree;var k=new Array(w.length),A=w[w.length-1];k[k.length-1]=new u(A._color,A.key,A.value,A.left,A.right,A._count);for(var b=w.length-2;b>=0;--b){var A=w[b];A.left===w[b+1]?k[b]=new u(A._color,A.key,A.value,k[b+1],A.right,A._count):k[b]=new u(A._color,A.key,A.value,A.left,k[b+1],A._count)}if(A=k[k.length-1],A.left&&A.right){var E=k.length;for(A=A.left;A.right;)k.push(A),A=A.right;var T=k[E-1];k.push(new u(A._color,T.key,T.value,A.left,A.right,A._count)),k[E-1].key=A.key,k[E-1].value=A.value;for(var b=k.length-2;b>=E;--b)A=k[b],k[b]=new u(A._color,A.key,A.value,A.left,k[b+1],A._count);k[E-1].left=k[E]}if(A=k[k.length-1],A._color===l){var F=k[k.length-2];F.left===A?F.left=null:F.right===A&&(F.right=null),k.pop();for(var b=0;b<k.length;++b)k[b]._count--;return new d(this.tree._compare,k[0])}else if(A.left||A.right){A.left?x(A,A.left):A.right&&x(A,A.right),A._color=n;for(var b=0;b<k.length-1;++b)k[b]._count--;return new d(this.tree._compare,k[0])}else{if(k.length===1)return new d(this.tree._compare,null);for(var b=0;b<k.length;++b)k[b]._count--;var D=k[k.length-2];S(k),D.left===A?D.left=null:D.right=null}return new d(this.tree._compare,k[0])},Object.defineProperty(v,"key",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(v,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(v,"index",{get:function(){var w=0,k=this._stack;if(k.length===0){var A=this.tree.root;return A?A._count:0}else k[k.length-1].left&&(w=k[k.length-1].left._count);for(var b=k.length-2;b>=0;--b)k[b+1]===k[b].right&&(++w,k[b].left&&(w+=k[b].left._count));return w},enumerable:!0}),v.next=function(){var w=this._stack;if(w.length!==0){var k=w[w.length-1];if(k.right)for(k=k.right;k;)w.push(k),k=k.left;else for(w.pop();w.length>0&&w[w.length-1].right===k;)k=w[w.length-1],w.pop()}},Object.defineProperty(v,"hasNext",{get:function(){var w=this._stack;if(w.length===0)return!1;if(w[w.length-1].right)return!0;for(var k=w.length-1;k>0;--k)if(w[k-1].left===w[k])return!0;return!1}}),v.update=function(w){var k=this._stack;if(k.length===0)throw new Error("Can't update empty node!");var A=new Array(k.length),b=k[k.length-1];A[A.length-1]=new u(b._color,b.key,w,b.left,b.right,b._count);for(var E=k.length-2;E>=0;--E)b=k[E],b.left===k[E+1]?A[E]=new u(b._color,b.key,b.value,A[E+1],b.right,b._count):A[E]=new u(b._color,b.key,b.value,b.left,A[E+1],b._count);return new d(this.tree._compare,A[0])},v.prev=function(){var w=this._stack;if(w.length!==0){var k=w[w.length-1];if(k.left)for(k=k.left;k;)w.push(k),k=k.right;else for(w.pop();w.length>0&&w[w.length-1].left===k;)k=w[w.length-1],w.pop()}},Object.defineProperty(v,"hasPrev",{get:function(){var w=this._stack;if(w.length===0)return!1;if(w[w.length-1].left)return!0;for(var k=w.length-1;k>0;--k)if(w[k-1].right===w[k])return!0;return!1}});function M(w,k){return w<k?-1:w>k?1:0}function C(w){return new d(w||M,null)}},3837(s,l,n){"use strict";s.exports=D;var u=n(4935),c=n(501),f=n(5304),h=n(6429),d=n(6444),p=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),g=ArrayBuffer,m=DataView;function y(R){return g.isView(R)&&!(R instanceof m)}function _(R){return Array.isArray(R)||y(R)}function v(R,P){return R[0]=P[0],R[1]=P[1],R[2]=P[2],R}function x(R){this.gl=R,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickFontStyle=["normal","normal","normal"],this.tickFontWeight=["normal","normal","normal"],this.tickFontVariant=["normal","normal","normal"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=["auto","auto","auto"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont=["sans-serif","sans-serif","sans-serif"],this.labelFontStyle=["normal","normal","normal"],this.labelFontWeight=["normal","normal","normal"],this.labelFontVariant=["normal","normal","normal"],this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=["auto","auto","auto"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=f(R)}var S=x.prototype;S.update=function(R){R=R||{};function P(U,V,j){if(j in R){var q=R[j],Y=this[j],K;(U?_(q)&&_(q[0]):_(q))?this[j]=K=[V(q[0]),V(q[1]),V(q[2])]:this[j]=K=[V(q),V(q),V(q)];for(var te=0;te<3;++te)if(K[te]!==Y[te])return!0}return!1}var z=P.bind(this,!1,Number),I=P.bind(this,!1,Boolean),L=P.bind(this,!1,String),B=P.bind(this,!0,function(U){if(_(U)){if(U.length===3)return[+U[0],+U[1],+U[2],1];if(U.length===4)return[+U[0],+U[1],+U[2],+U[3]]}return[0,0,0,1]}),O,G=!1,W=!1;if("bounds"in R)for(var X=R.bounds,Z=0;Z<2;++Z)for(var J=0;J<3;++J)X[Z][J]!==this.bounds[Z][J]&&(W=!0),this.bounds[Z][J]=X[Z][J];if("ticks"in R){O=R.ticks,G=!0,this.autoTicks=!1;for(var Z=0;Z<3;++Z)this.tickSpacing[Z]=0}else z("tickSpacing")&&(this.autoTicks=!0,W=!0);if(this._firstInit&&("ticks"in R||"tickSpacing"in R||(this.autoTicks=!0),W=!0,G=!0,this._firstInit=!1),W&&this.autoTicks&&(O=d.create(this.bounds,this.tickSpacing),G=!0),G){for(var Z=0;Z<3;++Z)O[Z].sort(function(V,j){return V.x-j.x});d.equal(O,this.ticks)?G=!1:this.ticks=O}I("tickEnable"),L("tickFont")&&(G=!0),L("tickFontStyle")&&(G=!0),L("tickFontWeight")&&(G=!0),L("tickFontVariant")&&(G=!0),z("tickSize"),z("tickAngle"),z("tickPad"),B("tickColor");var N=L("labels");L("labelFont")&&(N=!0),L("labelFontStyle")&&(N=!0),L("labelFontWeight")&&(N=!0),L("labelFontVariant")&&(N=!0),I("labelEnable"),z("labelSize"),z("labelPad"),B("labelColor"),I("lineEnable"),I("lineMirror"),z("lineWidth"),B("lineColor"),I("lineTickEnable"),I("lineTickMirror"),z("lineTickLength"),z("lineTickWidth"),B("lineTickColor"),I("gridEnable"),z("gridWidth"),B("gridColor"),I("zeroEnable"),B("zeroLineColor"),z("zeroLineWidth"),I("backgroundEnable"),B("backgroundColor");var H=[{family:this.labelFont[0],style:this.labelFontStyle[0],weight:this.labelFontWeight[0],variant:this.labelFontVariant[0]},{family:this.labelFont[1],style:this.labelFontStyle[1],weight:this.labelFontWeight[1],variant:this.labelFontVariant[1]},{family:this.labelFont[2],style:this.labelFontStyle[2],weight:this.labelFontWeight[2],variant:this.labelFontVariant[2]}],$=[{family:this.tickFont[0],style:this.tickFontStyle[0],weight:this.tickFontWeight[0],variant:this.tickFontVariant[0]},{family:this.tickFont[1],style:this.tickFontStyle[1],weight:this.tickFontWeight[1],variant:this.tickFontVariant[1]},{family:this.tickFont[2],style:this.tickFontStyle[2],weight:this.tickFontWeight[2],variant:this.tickFontVariant[2]}];this._text?this._text&&(N||G)&&this._text.update(this.bounds,this.labels,H,this.ticks,$):this._text=u(this.gl,this.bounds,this.labels,H,this.ticks,$),this._lines&&G&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=c(this.gl,this.bounds,this.ticks))};function M(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}var C=[new M,new M,new M];function w(R,P,z,I,L){for(var B=R.primalOffset,O=R.primalMinor,G=R.mirrorOffset,W=R.mirrorMinor,X=I[P],Z=0;Z<3;++Z)if(P!==Z){var J=B,N=G,H=O,$=W;X&1<<Z&&(J=G,N=B,H=W,$=O),J[Z]=z[0][Z],N[Z]=z[1][Z],L[Z]>0?(H[Z]=-1,$[Z]=0):(H[Z]=0,$[Z]=1)}}var k=[0,0,0],A={model:p,view:p,projection:p,_ortho:!1};S.isOpaque=function(){return!0},S.isTransparent=function(){return!1},S.drawTransparent=function(R){};var b=0,E=[0,0,0],T=[0,0,0],F=[0,0,0];S.draw=function(R){R=R||A;for(var j=this.gl,P=R.model||p,z=R.view||p,I=R.projection||p,L=this.bounds,B=R._ortho||!1,O=h(P,z,I,L,B),G=O.cubeEdges,W=O.axis,X=z[12],Z=z[13],J=z[14],N=z[15],H=B?2:1,$=H*this.pixelRatio*(I[3]*X+I[7]*Z+I[11]*J+I[15]*N)/j.drawingBufferHeight,U=0;U<3;++U)this.lastCubeProps.cubeEdges[U]=G[U],this.lastCubeProps.axis[U]=W[U];for(var V=C,U=0;U<3;++U)w(C[U],U,this.bounds,G,W);for(var j=this.gl,q=k,U=0;U<3;++U)this.backgroundEnable[U]?q[U]=W[U]:q[U]=0;this._background.draw(P,z,I,L,q,this.backgroundColor),this._lines.bind(P,z,I,this);for(var U=0;U<3;++U){var Y=[0,0,0];W[U]>0?Y[U]=L[1][U]:Y[U]=L[0][U];for(var K=0;K<2;++K){var te=(U+1+K)%3,ne=(U+1+(K^1))%3;this.gridEnable[te]&&this._lines.drawGrid(te,ne,this.bounds,Y,this.gridColor[te],this.gridWidth[te]*this.pixelRatio)}for(var K=0;K<2;++K){var te=(U+1+K)%3,ne=(U+1+(K^1))%3;this.zeroEnable[ne]&&Math.min(L[0][ne],L[1][ne])<=0&&Math.max(L[0][ne],L[1][ne])>=0&&this._lines.drawZero(te,ne,this.bounds,Y,this.zeroLineColor[ne],this.zeroLineWidth[ne]*this.pixelRatio)}}for(var U=0;U<3;++U){this.lineEnable[U]&&this._lines.drawAxisLine(U,this.bounds,V[U].primalOffset,this.lineColor[U],this.lineWidth[U]*this.pixelRatio),this.lineMirror[U]&&this._lines.drawAxisLine(U,this.bounds,V[U].mirrorOffset,this.lineColor[U],this.lineWidth[U]*this.pixelRatio);for(var se=v(E,V[U].primalMinor),le=v(T,V[U].mirrorMinor),ce=this.lineTickLength,K=0;K<3;++K){var pe=$/P[5*K];se[K]*=ce[K]*pe,le[K]*=ce[K]*pe}this.lineTickEnable[U]&&this._lines.drawAxisTicks(U,V[U].primalOffset,se,this.lineTickColor[U],this.lineTickWidth[U]*this.pixelRatio),this.lineTickMirror[U]&&this._lines.drawAxisTicks(U,V[U].mirrorOffset,le,this.lineTickColor[U],this.lineTickWidth[U]*this.pixelRatio)}this._lines.unbind(),this._text.bind(P,z,I,this.pixelRatio);var xe,ye=.5,fe,ae;function ee(Te){ae=[0,0,0],ae[Te]=1}function ie(Te,je,Ve){var Ze=(Te+1)%3,Ke=(Te+2)%3,vt=je[Ze],xt=je[Ke],Pt=Ve[Ze],mt=Ve[Ke];if(vt>0&&mt>0){ee(Ze);return}else if(vt>0&&mt<0){ee(Ze);return}else if(vt<0&&mt>0){ee(Ze);return}else if(vt<0&&mt<0){ee(Ze);return}else if(xt>0&&Pt>0){ee(Ke);return}else if(xt>0&&Pt<0){ee(Ke);return}else if(xt<0&&Pt>0){ee(Ke);return}else if(xt<0&&Pt<0){ee(Ke);return}}for(var U=0;U<3;++U){for(var Q=V[U].primalMinor,ue=V[U].mirrorMinor,ge=v(F,V[U].primalOffset),K=0;K<3;++K)this.lineTickEnable[U]&&(ge[K]+=$*Q[K]*Math.max(this.lineTickLength[K],0)/P[5*K]);var Me=[0,0,0];if(Me[U]=1,this.tickEnable[U]){this.tickAngle[U]===-3600?(this.tickAngle[U]=0,this.tickAlign[U]="auto"):this.tickAlign[U]=-1,fe=1,xe=[this.tickAlign[U],ye,fe],xe[0]==="auto"?xe[0]=b:xe[0]=parseInt(""+xe[0]),ae=[0,0,0],ie(U,Q,ue);for(var K=0;K<3;++K)ge[K]+=$*Q[K]*this.tickPad[K]/P[5*K];this._text.drawTicks(U,this.tickSize[U],this.tickAngle[U],ge,this.tickColor[U],Me,ae,xe)}if(this.labelEnable[U]){fe=0,ae=[0,0,0],this.labels[U].length>4&&(ee(U),fe=1),xe=[this.labelAlign[U],ye,fe],xe[0]==="auto"?xe[0]=b:xe[0]=parseInt(""+xe[0]);for(var K=0;K<3;++K)ge[K]+=$*Q[K]*this.labelPad[K]/P[5*K];ge[U]+=.5*(L[0][U]+L[1][U]),this._text.drawLabel(U,this.labelSize[U],this.labelAngle[U],ge,this.labelColor[U],[0,0,0],ae,xe)}}this._text.unbind()},S.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null};function D(R,P){var z=new x(R);return z.update(P),z}},5304(s,l,n){"use strict";s.exports=p;var u=n(2762),c=n(8116),f=n(1879).bg;function h(g,m,y,_){this.gl=g,this.buffer=m,this.vao=y,this.shader=_}var d=h.prototype;d.draw=function(g,m,y,_,v,x){for(var S=!1,M=0;M<3;++M)S=S||v[M];if(S){var C=this.gl;C.enable(C.POLYGON_OFFSET_FILL),C.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:g,view:m,projection:y,bounds:_,enable:v,colors:x},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),C.disable(C.POLYGON_OFFSET_FILL)}},d.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()};function p(g){for(var m=[],y=[],_=0,v=0;v<3;++v)for(var x=(v+1)%3,S=(v+2)%3,M=[0,0,0],C=[0,0,0],w=-1;w<=1;w+=2){y.push(_,_+2,_+1,_+1,_+2,_+3),M[v]=w,C[v]=w;for(var k=-1;k<=1;k+=2){M[x]=k;for(var A=-1;A<=1;A+=2)M[S]=A,m.push(M[0],M[1],M[2],C[0],C[1],C[2]),_+=1}var b=x;x=S,S=b}var E=u(g,new Float32Array(m)),T=u(g,new Uint16Array(y),g.ELEMENT_ARRAY_BUFFER),F=c(g,[{buffer:E,type:g.FLOAT,size:3,offset:0,stride:24},{buffer:E,type:g.FLOAT,size:3,offset:12,stride:24}],T),D=f(g);return D.attributes.position.location=0,D.attributes.normal.location=1,new h(g,E,F,D)}},6429(s,l,n){"use strict";s.exports=w;var u=n(8828),c=n(6760),f=n(5202),h=n(3250),d=new Array(16),p=new Array(8),g=new Array(8),m=new Array(3),y=[0,0,0];(function(){for(var k=0;k<8;++k)p[k]=[1,1,1,1],g[k]=[1,1,1]})();function _(k,A,b){for(var E=0;E<4;++E){k[E]=b[12+E];for(var T=0;T<3;++T)k[E]+=A[T]*b[4*T+E]}}var v=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function x(k){for(var A=0;A<v.length;++A)if(k=f.positive(k,v[A]),k.length<3)return 0;for(var b=k[0],E=b[0]/b[3],T=b[1]/b[3],F=0,A=1;A+1<k.length;++A){var D=k[A],R=k[A+1],P=D[0]/D[3],z=D[1]/D[3],I=R[0]/R[3],L=R[1]/R[3],B=P-E,O=z-T,G=I-E,W=L-T;F+=Math.abs(B*W-O*G)}return F}var S=[1,1,1],M=[0,0,0],C={cubeEdges:S,axis:M};function w(k,A,b,E,T){c(d,A,k),c(d,b,d);for(var F=0,D=0;D<2;++D){m[2]=E[D][2];for(var R=0;R<2;++R){m[1]=E[R][1];for(var P=0;P<2;++P)m[0]=E[P][0],_(p[F],m,d),F+=1}}for(var z=-1,D=0;D<8;++D){for(var I=p[D][3],L=0;L<3;++L)g[D][L]=p[D][L]/I;T&&(g[D][2]*=-1),I<0&&(z<0||g[D][2]<g[z][2])&&(z=D)}if(z<0){z=0;for(var B=0;B<3;++B){for(var O=(B+2)%3,G=(B+1)%3,W=-1,X=-1,Z=0;Z<2;++Z){var J=Z<<B,N=J+(Z<<O)+(1-Z<<G),H=J+(1-Z<<O)+(Z<<G);h(g[J],g[N],g[H],y)<0||(Z?W=1:X=1)}if(W<0||X<0){X>W&&(z|=1<<B);continue}for(var Z=0;Z<2;++Z){var J=Z<<B,N=J+(Z<<O)+(1-Z<<G),H=J+(1-Z<<O)+(Z<<G),$=x([p[J],p[N],p[H],p[J+(1<<O)+(1<<G)]]);Z?W=$:X=$}if(X>W){z|=1<<B;continue}}}for(var U=7^z,V=-1,D=0;D<8;++D)D===z||D===U||(V<0||g[V][1]>g[D][1])&&(V=D);for(var j=-1,D=0;D<3;++D){var q=V^1<<D;if(!(q===z||q===U)){j<0&&(j=q);var G=g[q];G[0]<g[j][0]&&(j=q)}}for(var Y=-1,D=0;D<3;++D){var q=V^1<<D;if(!(q===z||q===U||q===j)){Y<0&&(Y=q);var G=g[q];G[0]>g[Y][0]&&(Y=q)}}var K=S;K[0]=K[1]=K[2]=0,K[u.log2(j^V)]=V&j,K[u.log2(V^Y)]=V&Y;var te=Y^7;te===z||te===U?(te=j^7,K[u.log2(Y^te)]=te&Y):K[u.log2(j^te)]=te&j;for(var ne=M,se=z,B=0;B<3;++B)se&1<<B?ne[B]=-1:ne[B]=1;return C}},501(s,l,n){"use strict";s.exports=S;var u=n(2762),c=n(8116),f=n(1879).n,h=[0,0,0],d=[0,0,0],p=[0,0,0],g=[0,0,0],m=[1,1];function y(M){return M[0]=M[1]=M[2]=0,M}function _(M,C){return M[0]=C[0],M[1]=C[1],M[2]=C[2],M}function v(M,C,w,k,A,b,E,T){this.gl=M,this.vertBuffer=C,this.vao=w,this.shader=k,this.tickCount=A,this.tickOffset=b,this.gridCount=E,this.gridOffset=T}var x=v.prototype;x.bind=function(M,C,w){this.shader.bind(),this.shader.uniforms.model=M,this.shader.uniforms.view=C,this.shader.uniforms.projection=w,m[0]=this.gl.drawingBufferWidth,m[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=m,this.vao.bind()},x.unbind=function(){this.vao.unbind()},x.drawAxisLine=function(M,C,w,k,A){var b=y(d);this.shader.uniforms.majorAxis=d,b[M]=C[1][M]-C[0][M],this.shader.uniforms.minorAxis=b;var E=_(g,w);E[M]+=C[0][M],this.shader.uniforms.offset=E,this.shader.uniforms.lineWidth=A,this.shader.uniforms.color=k;var T=y(p);T[(M+2)%3]=1,this.shader.uniforms.screenAxis=T,this.vao.draw(this.gl.TRIANGLES,6);var T=y(p);T[(M+1)%3]=1,this.shader.uniforms.screenAxis=T,this.vao.draw(this.gl.TRIANGLES,6)},x.drawAxisTicks=function(M,C,w,k,A){if(this.tickCount[M]){var b=y(h);b[M]=1,this.shader.uniforms.majorAxis=b,this.shader.uniforms.offset=C,this.shader.uniforms.minorAxis=w,this.shader.uniforms.color=k,this.shader.uniforms.lineWidth=A;var E=y(p);E[M]=1,this.shader.uniforms.screenAxis=E,this.vao.draw(this.gl.TRIANGLES,this.tickCount[M],this.tickOffset[M])}},x.drawGrid=function(M,C,w,k,A,b){if(this.gridCount[M]){var E=y(d);E[C]=w[1][C]-w[0][C],this.shader.uniforms.minorAxis=E;var T=_(g,k);T[C]+=w[0][C],this.shader.uniforms.offset=T;var F=y(h);F[M]=1,this.shader.uniforms.majorAxis=F;var D=y(p);D[M]=1,this.shader.uniforms.screenAxis=D,this.shader.uniforms.lineWidth=b,this.shader.uniforms.color=A,this.vao.draw(this.gl.TRIANGLES,this.gridCount[M],this.gridOffset[M])}},x.drawZero=function(M,C,w,k,A,b){var E=y(d);this.shader.uniforms.majorAxis=E,E[M]=w[1][M]-w[0][M],this.shader.uniforms.minorAxis=E;var T=_(g,k);T[M]+=w[0][M],this.shader.uniforms.offset=T;var F=y(p);F[C]=1,this.shader.uniforms.screenAxis=F,this.shader.uniforms.lineWidth=b,this.shader.uniforms.color=A,this.vao.draw(this.gl.TRIANGLES,6)},x.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()};function S(M,C,w){var k=[],A=[0,0,0],b=[0,0,0],E=[0,0,0],T=[0,0,0];k.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var F=0;F<3;++F){for(var P=k.length/3|0,D=0;D<w[F].length;++D){var R=+w[F][D].x;k.push(R,0,1,R,1,1,R,0,-1,R,0,-1,R,1,1,R,1,-1)}var I=k.length/3|0;A[F]=P,b[F]=I-P;for(var P=k.length/3|0,z=0;z<w[F].length;++z){var R=+w[F][z].x;k.push(R,0,1,R,1,1,R,0,-1,R,0,-1,R,1,1,R,1,-1)}var I=k.length/3|0;E[F]=P,T[F]=I-P}var L=u(M,new Float32Array(k)),B=c(M,[{buffer:L,type:M.FLOAT,size:3,stride:0,offset:0}]),O=f(M);return O.attributes.position.location=0,new v(M,L,B,O,b,A,T,E)}},1879(s,l,n){"use strict";var u=n(3236),c=n(9405),f=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position;
+
+uniform mat4 model, view, projection;
+uniform vec3 offset, majorAxis, minorAxis, screenAxis;
+uniform float lineWidth;
+uniform vec2 screenShape;
+
+vec3 project(vec3 p) {
+  vec4 pp = projection * (view * (model * vec4(p, 1.0)));
+  return pp.xyz / max(pp.w, 0.0001);
+}
+
+void main() {
+  vec3 major = position.x * majorAxis;
+  vec3 minor = position.y * minorAxis;
+
+  vec3 vPosition = major + minor + offset;
+  vec3 pPosition = project(vPosition);
+  vec3 offset = project(vPosition + screenAxis * position.z);
+
+  vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;
+
+  gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);
+}
+`]),h=u([`precision highp float;
+#define GLSLIFY 1
+
+uniform vec4 color;
+void main() {
+  gl_FragColor = color;
+}`]);l.n=function(y){return c(y,f,h,null,[{name:"position",type:"vec3"}])};var d=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position;
+
+uniform mat4 model, view, projection;
+uniform vec3 offset, axis, alignDir, alignOpt;
+uniform float scale, angle, pixelScale;
+uniform vec2 resolution;
+
+vec3 project(vec3 p) {
+  vec4 pp = projection * (view * (model * vec4(p, 1.0)));
+  return pp.xyz / max(pp.w, 0.0001);
+}
+
+float computeViewAngle(vec3 a, vec3 b) {
+  vec3 A = project(a);
+  vec3 B = project(b);
+
+  return atan(
+    (B.y - A.y) * resolution.y,
+    (B.x - A.x) * resolution.x
+  );
+}
+
+const float PI = 3.141592;
+const float TWO_PI = 2.0 * PI;
+const float HALF_PI = 0.5 * PI;
+const float ONE_AND_HALF_PI = 1.5 * PI;
+
+int option = int(floor(alignOpt.x + 0.001));
+float hv_ratio =       alignOpt.y;
+bool enableAlign =    (alignOpt.z != 0.0);
+
+float mod_angle(float a) {
+  return mod(a, PI);
+}
+
+float positive_angle(float a) {
+  return mod_angle((a < 0.0) ?
+    a + TWO_PI :
+    a
+  );
+}
+
+float look_upwards(float a) {
+  float b = positive_angle(a);
+  return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?
+    b - PI :
+    b;
+}
+
+float look_horizontal_or_vertical(float a, float ratio) {
+  // ratio controls the ratio between being horizontal to (vertical + horizontal)
+  // if ratio is set to 0.5 then it is 50%, 50%.
+  // when using a higher ratio e.g. 0.75 the result would
+  // likely be more horizontal than vertical.
+
+  float b = positive_angle(a);
+
+  return
+    (b < (      ratio) * HALF_PI) ? 0.0 :
+    (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :
+    (b < (2.0 + ratio) * HALF_PI) ? 0.0 :
+    (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :
+                                    0.0;
+}
+
+float roundTo(float a, float b) {
+  return float(b * floor((a + 0.5 * b) / b));
+}
+
+float look_round_n_directions(float a, int n) {
+  float b = positive_angle(a);
+  float div = TWO_PI / float(n);
+  float c = roundTo(b, div);
+  return look_upwards(c);
+}
+
+float applyAlignOption(float rawAngle, float delta) {
+  return
+    (option >  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions
+    (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical
+    (option == 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis
+    (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards
+    (option ==-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal
+                    rawAngle;                // otherwise return back raw input angle
+}
+
+bool isAxisTitle = (axis.x == 0.0) &&
+                   (axis.y == 0.0) &&
+                   (axis.z == 0.0);
+
+void main() {
+  //Compute world offset
+  float axisDistance = position.z;
+  vec3 dataPosition = axisDistance * axis + offset;
+
+  float beta = angle; // i.e. user defined attributes for each tick
+
+  float axisAngle;
+  float clipAngle;
+  float flip;
+
+  if (enableAlign) {
+    axisAngle = (isAxisTitle) ? HALF_PI :
+                      computeViewAngle(dataPosition, dataPosition + axis);
+    clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);
+
+    axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;
+    clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;
+
+    flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),
+                vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;
+
+    beta += applyAlignOption(clipAngle, flip * PI);
+  }
+
+  //Compute plane offset
+  vec2 planeCoord = position.xy * pixelScale;
+
+  mat2 planeXform = scale * mat2(
+     cos(beta), sin(beta),
+    -sin(beta), cos(beta)
+  );
+
+  vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;
+
+  //Compute clip position
+  vec3 clipPosition = project(dataPosition);
+
+  //Apply text offset in clip coordinates
+  clipPosition += vec3(viewOffset, 0.0);
+
+  //Done
+  gl_Position = vec4(clipPosition, 1.0);
+}
+`]),p=u([`precision highp float;
+#define GLSLIFY 1
+
+uniform vec4 color;
+void main() {
+  gl_FragColor = color;
+}`]);l.Q=function(y){return c(y,d,p,null,[{name:"position",type:"vec3"}])};var g=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position;
+attribute vec3 normal;
+
+uniform mat4 model, view, projection;
+uniform vec3 enable;
+uniform vec3 bounds[2];
+
+varying vec3 colorChannel;
+
+void main() {
+
+  vec3 signAxis = sign(bounds[1] - bounds[0]);
+
+  vec3 realNormal = signAxis * normal;
+
+  if(dot(realNormal, enable) > 0.0) {
+    vec3 minRange = min(bounds[0], bounds[1]);
+    vec3 maxRange = max(bounds[0], bounds[1]);
+    vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));
+    gl_Position = projection * (view * (model * vec4(nPosition, 1.0)));
+  } else {
+    gl_Position = vec4(0,0,0,0);
+  }
+
+  colorChannel = abs(realNormal);
+}
+`]),m=u([`precision highp float;
+#define GLSLIFY 1
+
+uniform vec4 colors[3];
+
+varying vec3 colorChannel;
+
+void main() {
+  gl_FragColor = colorChannel.x * colors[0] +
+                 colorChannel.y * colors[1] +
+                 colorChannel.z * colors[2];
+}`]);l.bg=function(y){return c(y,g,m,null,[{name:"position",type:"vec3"},{name:"normal",type:"vec3"}])}},4935(s,l,n){"use strict";s.exports=x;var u=n(2762),c=n(8116),f=n(4359),h=n(1879).Q,d=window||process.global||{},p=d.__TEXT_CACHE||{};d.__TEXT_CACHE={};var g=3;function m(S,M,C,w){this.gl=S,this.shader=M,this.buffer=C,this.vao=w,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}var y=m.prototype,_=[0,0];y.bind=function(S,M,C,w){this.vao.bind(),this.shader.bind();var k=this.shader.uniforms;k.model=S,k.view=M,k.projection=C,k.pixelScale=w,_[0]=this.gl.drawingBufferWidth,_[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=_},y.unbind=function(){this.vao.unbind()},y.update=function(S,M,C,w,k){var A=[];function b(B,O,G,W,X,Z){var J=[G.style,G.weight,G.variant,G.family].join("_"),N=p[J];N||(N=p[J]={});var H=N[O];H||(H=N[O]=v(O,{triangles:!0,font:G.family,fontStyle:G.style,fontWeight:G.weight,fontVariant:G.variant,textAlign:"center",textBaseline:"middle",lineSpacing:X,styletags:Z}));for(var $=(W||12)/12,U=H.positions,V=H.cells,j=0,q=V.length;j<q;++j)for(var Y=V[j],K=2;K>=0;--K){var te=U[Y[K]];A.push($*te[0],-$*te[1],B)}}for(var E=[0,0,0],T=[0,0,0],F=[0,0,0],D=[0,0,0],R=1.25,P={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},z=0;z<3;++z){F[z]=A.length/g|0,b(.5*(S[0][z]+S[1][z]),M[z],C[z],12,R,P),D[z]=(A.length/g|0)-F[z],E[z]=A.length/g|0;for(var I=0;I<w[z].length;++I)if(w[z][I].text){var L={family:w[z][I].font||k[z].family,style:k[z].fontStyle||k[z].style,weight:k[z].fontWeight||k[z].weight,variant:k[z].fontVariant||k[z].variant};b(w[z][I].x,w[z][I].text,L,w[z][I].fontSize||12,R,P)}T[z]=(A.length/g|0)-E[z]}this.buffer.update(A),this.tickOffset=E,this.tickCount=T,this.labelOffset=F,this.labelCount=D},y.drawTicks=function(S,M,C,w,k,A,b,E){this.tickCount[S]&&(this.shader.uniforms.axis=A,this.shader.uniforms.color=k,this.shader.uniforms.angle=C,this.shader.uniforms.scale=M,this.shader.uniforms.offset=w,this.shader.uniforms.alignDir=b,this.shader.uniforms.alignOpt=E,this.vao.draw(this.gl.TRIANGLES,this.tickCount[S],this.tickOffset[S]))},y.drawLabel=function(S,M,C,w,k,A,b,E){this.labelCount[S]&&(this.shader.uniforms.axis=A,this.shader.uniforms.color=k,this.shader.uniforms.angle=C,this.shader.uniforms.scale=M,this.shader.uniforms.offset=w,this.shader.uniforms.alignDir=b,this.shader.uniforms.alignOpt=E,this.vao.draw(this.gl.TRIANGLES,this.labelCount[S],this.labelOffset[S]))},y.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()};function v(S,M){try{return f(S,M)}catch(C){return console.warn('error vectorizing text:"'+S+'" error:',C),{cells:[],positions:[]}}}function x(S,M,C,w,k,A){var b=u(S),E=c(S,[{buffer:b,size:3}]),T=h(S);T.attributes.position.location=0;var F=new m(S,T,b,E);return F.update(M,C,w,k,A),F}},6444(s,l){"use strict";l.create=u,l.equal=c;function n(f,h){var d=f+"",p=d.indexOf("."),g=0;p>=0&&(g=d.length-p-1);var m=Math.pow(10,g),y=Math.round(f*h*m),_=y+"";if(_.indexOf("e")>=0)return _;var v=y/m,x=y%m;y<0?(v=-Math.ceil(v)|0,x=-x|0):(v=Math.floor(v)|0,x=x|0);var S=""+v;if(y<0&&(S="-"+S),g){for(var M=""+x;M.length<g;)M="0"+M;return S+"."+M}else return S}function u(f,h){for(var d=[],p=0;p<3;++p){for(var g=[],m=.5*(f[0][p]+f[1][p]),y=0;y*h[p]<=f[1][p];++y)g.push({x:y*h[p],text:n(h[p],y)});for(var y=-1;y*h[p]>=f[0][p];--y)g.push({x:y*h[p],text:n(h[p],y)});d.push(g)}return d}function c(f,h){for(var d=0;d<3;++d){if(f[d].length!==h[d].length)return!1;for(var p=0;p<f[d].length;++p){var g=f[d][p],m=h[d][p];if(g.x!==m.x||g.text!==m.text||g.font!==m.font||g.fontColor!==m.fontColor||g.fontSize!==m.fontSize||g.dx!==m.dx||g.dy!==m.dy)return!1}}return!0}},5445(s,l,n){"use strict";s.exports=C;var u=n(5033),c=n(5202),f=n(6429),h=n(6760),d=n(5665),p=n(5352),g=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),m=new Float32Array(16);function y(w,k,A){this.lo=w,this.hi=k,this.pixelsPerDataUnit=A}var _=[0,0,0,1],v=[0,0,0,1];function x(w,k,A,b,E){for(var T=0;T<3;++T){for(var F=_,D=v,R=0;R<3;++R)D[R]=F[R]=A[R];D[3]=F[3]=1,D[T]+=1,p(D,D,k),D[3]<0&&(w[T]=1/0),F[T]-=1,p(F,F,k),F[3]<0&&(w[T]=1/0);var P=(F[0]/F[3]-D[0]/D[3])*b,z=(F[1]/F[3]-D[1]/D[3])*E;w[T]=.25*Math.sqrt(P*P+z*z)}return w}var S=[new y(1/0,-1/0,1/0),new y(1/0,-1/0,1/0),new y(1/0,-1/0,1/0)],M=[0,0,0];function C(w,k,A,b,z){var T=k.model||g,F=k.view||g,D=k.projection||g,R=k._ortho||!1,P=w.bounds,z=z||f(T,F,D,P,R),I=z.axis;h(m,F,T),h(m,D,m);for(var L=S,B=0;B<3;++B)L[B].lo=1/0,L[B].hi=-1/0,L[B].pixelsPerDataUnit=1/0;var O=u(d(m,m));d(m,m);for(var G=0;G<3;++G){var W=(G+1)%3,X=(G+2)%3,Z=M;e:for(var B=0;B<2;++B){var J=[];if(I[G]<0!=!!B){Z[G]=P[B][G];for(var N=0;N<2;++N){Z[W]=P[N^B][W];for(var H=0;H<2;++H)Z[X]=P[H^N^B][X],J.push(Z.slice())}for(var $=R?5:4,N=$;N===$;++N){if(J.length===0)continue e;J=c.positive(J,O[N])}for(var N=0;N<J.length;++N)for(var X=J[N],U=x(M,m,X,A,b),H=0;H<3;++H)L[H].lo=Math.min(L[H].lo,X[H]),L[H].hi=Math.max(L[H].hi,X[H]),H!==G&&(L[H].pixelsPerDataUnit=Math.min(L[H].pixelsPerDataUnit,Math.abs(U[H])))}}}return L}},2762(s,l,n){"use strict";var u=n(1888),c=n(5298),f=n(9618),h=["uint8","uint8_clamped","uint16","uint32","int8","int16","int32","float32"];function d(v,x,S,M,C){this.gl=v,this.type=x,this.handle=S,this.length=M,this.usage=C}var p=d.prototype;p.bind=function(){this.gl.bindBuffer(this.type,this.handle)},p.unbind=function(){this.gl.bindBuffer(this.type,null)},p.dispose=function(){this.gl.deleteBuffer(this.handle)};function g(v,x,S,M,C,w){var k=C.length*C.BYTES_PER_ELEMENT;if(w<0)return v.bufferData(x,C,M),k;if(k+w>S)throw new Error("gl-buffer: If resizing buffer, must not specify offset");return v.bufferSubData(x,w,C),S}function m(v,x){for(var S=u.malloc(v.length,x),M=v.length,C=0;C<M;++C)S[C]=v[C];return S}function y(v,x){for(var S=1,M=x.length-1;M>=0;--M){if(x[M]!==S)return!1;S*=v[M]}return!0}p.update=function(v,x){if(typeof x!="number"&&(x=-1),this.bind(),typeof v=="object"&&typeof v.shape<"u"){var S=v.dtype;if(h.indexOf(S)<0&&(S="float32"),this.type===this.gl.ELEMENT_ARRAY_BUFFER){var M=gl.getExtension("OES_element_index_uint");M&&S!=="uint16"?S="uint32":S="uint16"}if(S===v.dtype&&y(v.shape,v.stride))v.offset===0&&v.data.length===v.shape[0]?this.length=g(this.gl,this.type,this.length,this.usage,v.data,x):this.length=g(this.gl,this.type,this.length,this.usage,v.data.subarray(v.offset,v.shape[0]),x);else{var C=u.malloc(v.size,S),w=f(C,v.shape);c.assign(w,v),x<0?this.length=g(this.gl,this.type,this.length,this.usage,C,x):this.length=g(this.gl,this.type,this.length,this.usage,C.subarray(0,v.size),x),u.free(C)}}else if(Array.isArray(v)){var k;this.type===this.gl.ELEMENT_ARRAY_BUFFER?k=m(v,"uint16"):k=m(v,"float32"),x<0?this.length=g(this.gl,this.type,this.length,this.usage,k,x):this.length=g(this.gl,this.type,this.length,this.usage,k.subarray(0,v.length),x),u.free(k)}else if(typeof v=="object"&&typeof v.length=="number")this.length=g(this.gl,this.type,this.length,this.usage,v,x);else if(typeof v=="number"||v===void 0){if(x>=0)throw new Error("gl-buffer: Cannot specify offset when resizing buffer");v=v|0,v<=0&&(v=1),this.gl.bufferData(this.type,v|0,this.usage),this.length=v}else throw new Error("gl-buffer: Invalid data type")};function _(v,x,S,M){if(S=S||v.ARRAY_BUFFER,M=M||v.DYNAMIC_DRAW,S!==v.ARRAY_BUFFER&&S!==v.ELEMENT_ARRAY_BUFFER)throw new Error("gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER");if(M!==v.DYNAMIC_DRAW&&M!==v.STATIC_DRAW&&M!==v.STREAM_DRAW)throw new Error("gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW");var C=v.createBuffer(),w=new d(v,S,C,0,M);return w.update(x),w}s.exports=_},6405(s,l,n){"use strict";var u=n(2931);s.exports=function(f,h){var d=f.positions,p=f.vectors,g={positions:[],vertexIntensity:[],vertexIntensityBounds:f.vertexIntensityBounds,vectors:[],cells:[],coneOffset:f.coneOffset,colormap:f.colormap};if(f.positions.length===0)return h&&(h[0]=[0,0,0],h[1]=[0,0,0]),g;for(var m=0,y=1/0,_=-1/0,v=1/0,x=-1/0,S=1/0,M=-1/0,C=null,w=null,k=[],A=1/0,b=!1,E=f.coneSizemode==="raw",T=0;T<d.length;T++){var F=d[T];y=Math.min(F[0],y),_=Math.max(F[0],_),v=Math.min(F[1],v),x=Math.max(F[1],x),S=Math.min(F[2],S),M=Math.max(F[2],M);var D=p[T];if(u.length(D)>m&&(m=u.length(D)),T&&!E){var R=2*u.distance(C,F)/(u.length(w)+u.length(D));R?(A=Math.min(A,R),b=!1):b=!0}b||(C=F,w=D),k.push(D)}var P=[y,v,S],z=[_,x,M];h&&(h[0]=P,h[1]=z),m===0&&(m=1);var I=1/m;isFinite(A)||(A=1),g.vectorScale=A;var L=f.coneSize||(E?1:.5);f.absoluteConeSize&&(L=f.absoluteConeSize*I),g.coneScale=L;for(var T=0,B=0;T<d.length;T++)for(var F=d[T],O=F[0],G=F[1],W=F[2],X=k[T],Z=u.length(X)*I,J=0,N=8;J<N;J++){g.positions.push([O,G,W,B++]),g.positions.push([O,G,W,B++]),g.positions.push([O,G,W,B++]),g.positions.push([O,G,W,B++]),g.positions.push([O,G,W,B++]),g.positions.push([O,G,W,B++]),g.vectors.push(X),g.vectors.push(X),g.vectors.push(X),g.vectors.push(X),g.vectors.push(X),g.vectors.push(X),g.vertexIntensity.push(Z,Z,Z),g.vertexIntensity.push(Z,Z,Z);var H=g.positions.length;g.cells.push([H-6,H-5,H-4],[H-3,H-2,H-1])}return g};var c=n(614);s.exports.createMesh=n(9060),s.exports.createConeMesh=function(f,h){return s.exports.createMesh(f,h,{shaders:c,traceType:"cone"})}},9060(s,l,n){"use strict";var u=n(9405),c=n(2762),f=n(8116),h=n(7766),d=n(6760),p=n(7608),g=n(9618),m=n(6729),y=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function _(k,A,b,E,T,F,D,R,P,z,I){this.gl=k,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=A,this.dirty=!0,this.triShader=b,this.pickShader=E,this.trianglePositions=T,this.triangleVectors=F,this.triangleColors=R,this.triangleUVs=P,this.triangleIds=D,this.triangleVAO=z,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=I,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=y,this._view=y,this._projection=y,this._resolution=[1,1]}var v=_.prototype;v.isOpaque=function(){return this.opacity>=1},v.isTransparent=function(){return this.opacity<1},v.pickSlots=1,v.setPickBase=function(k){this.pickId=k};function x(k){for(var A=m({colormap:k,nshades:256,format:"rgba"}),b=new Uint8Array(256*4),E=0;E<256;++E){for(var T=A[E],F=0;F<3;++F)b[4*E+F]=T[F];b[4*E+3]=T[3]*255}return g(b,[256,256,4],[4,0,1])}function S(k){for(var A=k.length,b=new Array(A),E=0;E<A;++E)b[E]=k[E][2];return b}v.update=function(k){k=k||{};var A=this.gl;this.dirty=!0,"lightPosition"in k&&(this.lightPosition=k.lightPosition),"opacity"in k&&(this.opacity=k.opacity),"ambient"in k&&(this.ambientLight=k.ambient),"diffuse"in k&&(this.diffuseLight=k.diffuse),"specular"in k&&(this.specularLight=k.specular),"roughness"in k&&(this.roughness=k.roughness),"fresnel"in k&&(this.fresnel=k.fresnel),k.tubeScale!==void 0&&(this.tubeScale=k.tubeScale),k.vectorScale!==void 0&&(this.vectorScale=k.vectorScale),k.coneScale!==void 0&&(this.coneScale=k.coneScale),k.coneOffset!==void 0&&(this.coneOffset=k.coneOffset),k.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=A.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=A.LINEAR,this.texture.setPixels(x(k.colormap)),this.texture.generateMipmap());var b=k.cells,E=k.positions,T=k.vectors;if(!(!E||!b||!T)){var F=[],D=[],R=[],P=[],z=[];this.cells=b,this.positions=E,this.vectors=T;var I=k.meshColor||[1,1,1,1],L=k.vertexIntensity,B=1/0,O=-1/0;if(L)if(k.vertexIntensityBounds)B=+k.vertexIntensityBounds[0],O=+k.vertexIntensityBounds[1];else for(var G=0;G<L.length;++G){var W=L[G];B=Math.min(B,W),O=Math.max(O,W)}else for(var G=0;G<E.length;++G){var W=E[G][2];B=Math.min(B,W),O=Math.max(O,W)}L?this.intensity=L:this.intensity=S(E),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(var G=0;G<E.length;++G)for(var X=E[G],Z=0;Z<3;++Z)isNaN(X[Z])||!isFinite(X[Z])||(this.bounds[0][Z]=Math.min(this.bounds[0][Z],X[Z]),this.bounds[1][Z]=Math.max(this.bounds[1][Z],X[Z]));var J=0;e:for(var G=0;G<b.length;++G){var N=b[G];switch(N.length){case 3:for(var Z=0;Z<3;++Z)for(var H=N[Z],X=E[H],$=0;$<3;++$)if(isNaN(X[$])||!isFinite(X[$]))continue e;for(var Z=0;Z<3;++Z){var H=N[2-Z],X=E[H];F.push(X[0],X[1],X[2],X[3]);var U=T[H];D.push(U[0],U[1],U[2],U[3]||0);var V=I;V.length===3?R.push(V[0],V[1],V[2],1):R.push(V[0],V[1],V[2],V[3]);var j;L?j=[(L[H]-B)/(O-B),0]:j=[(X[2]-B)/(O-B),0],P.push(j[0],j[1]),z.push(G)}J+=1;break;default:break}}this.triangleCount=J,this.trianglePositions.update(F),this.triangleVectors.update(D),this.triangleColors.update(R),this.triangleUVs.update(P),this.triangleIds.update(new Uint32Array(z))}},v.drawTransparent=v.draw=function(k){k=k||{};for(var A=this.gl,b=k.model||y,E=k.view||y,T=k.projection||y,F=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],D=0;D<3;++D)F[0][D]=Math.max(F[0][D],this.clipBounds[0][D]),F[1][D]=Math.min(F[1][D],this.clipBounds[1][D]);var R={model:b,view:E,projection:T,inverseModel:y.slice(),clipBounds:F,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};R.inverseModel=p(R.inverseModel,R.model),A.disable(A.CULL_FACE),this.texture.bind(0);var P=new Array(16);d(P,R.view,R.model),d(P,R.projection,P),p(P,P);for(var D=0;D<3;++D)R.eyePosition[D]=P[12+D]/P[15];for(var z=P[15],D=0;D<3;++D)z+=this.lightPosition[D]*P[4*D+3];for(var D=0;D<3;++D){for(var I=P[12+D],L=0;L<3;++L)I+=P[4*L+D]*this.lightPosition[L];R.lightPosition[D]=I/z}if(this.triangleCount>0){var B=this.triShader;B.bind(),B.uniforms=R,this.triangleVAO.bind(),A.drawArrays(A.TRIANGLES,0,this.triangleCount*3),this.triangleVAO.unbind()}},v.drawPick=function(k){k=k||{};for(var A=this.gl,b=k.model||y,E=k.view||y,T=k.projection||y,F=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],D=0;D<3;++D)F[0][D]=Math.max(F[0][D],this.clipBounds[0][D]),F[1][D]=Math.min(F[1][D],this.clipBounds[1][D]);this._model=[].slice.call(b),this._view=[].slice.call(E),this._projection=[].slice.call(T),this._resolution=[A.drawingBufferWidth,A.drawingBufferHeight];var R={model:b,view:E,projection:T,clipBounds:F,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},P=this.pickShader;P.bind(),P.uniforms=R,this.triangleCount>0&&(this.triangleVAO.bind(),A.drawArrays(A.TRIANGLES,0,this.triangleCount*3),this.triangleVAO.unbind())},v.pick=function(k){if(!k||k.id!==this.pickId)return null;var A=k.value[0]+256*k.value[1]+65536*k.value[2],b=this.cells[A],E=this.positions[b[1]].slice(0,3),T={position:E,dataCoordinate:E,index:Math.floor(b[1]/48)};return this.traceType==="cone"?T.index=Math.floor(b[1]/48):this.traceType==="streamtube"&&(T.intensity=this.intensity[b[1]],T.velocity=this.vectors[b[1]].slice(0,3),T.divergence=this.vectors[b[1]][3],T.index=A),T},v.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()};function M(k,A){var b=u(k,A.meshShader.vertex,A.meshShader.fragment,null,A.meshShader.attributes);return b.attributes.position.location=0,b.attributes.color.location=2,b.attributes.uv.location=3,b.attributes.vector.location=4,b}function C(k,A){var b=u(k,A.pickShader.vertex,A.pickShader.fragment,null,A.pickShader.attributes);return b.attributes.position.location=0,b.attributes.id.location=1,b.attributes.vector.location=4,b}function w(k,A,b){var E=b.shaders;arguments.length===1&&(A=k,k=A.gl);var T=M(k,E),F=C(k,E),D=h(k,g(new Uint8Array([255,255,255,255]),[1,1,4]));D.generateMipmap(),D.minFilter=k.LINEAR_MIPMAP_LINEAR,D.magFilter=k.LINEAR;var R=c(k),P=c(k),z=c(k),I=c(k),L=c(k),B=f(k,[{buffer:R,type:k.FLOAT,size:4},{buffer:L,type:k.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:z,type:k.FLOAT,size:4},{buffer:I,type:k.FLOAT,size:2},{buffer:P,type:k.FLOAT,size:4}]),O=new _(k,D,T,F,R,P,L,z,I,B,b.traceType||"cone");return O.update(A),O}s.exports=w},614(s,l,n){var u=n(3236),c=u([`precision highp float;
+
+precision highp float;
+#define GLSLIFY 1
+
+vec3 getOrthogonalVector(vec3 v) {
+  // Return up-vector for only-z vector.
+  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).
+  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.
+  // Assign z = 0, x = -b, y = a:
+  // a*-b + b*a + c*0 = -ba + ba + 0 = 0
+  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {
+    return normalize(vec3(-v.y, v.x, 0.0));
+  } else {
+    return normalize(vec3(0.0, v.z, -v.y));
+  }
+}
+
+// Calculate the cone vertex and normal at the given index.
+//
+// The returned vertex is for a cone with its top at origin and height of 1.0,
+// pointing in the direction of the vector attribute.
+//
+// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.
+// These vertices are used to make up the triangles of the cone by the following:
+//   segment + 0 top vertex
+//   segment + 1 perimeter vertex a+1
+//   segment + 2 perimeter vertex a
+//   segment + 3 center base vertex
+//   segment + 4 perimeter vertex a
+//   segment + 5 perimeter vertex a+1
+// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.
+// To go from index to segment, floor(index / 6)
+// To go from segment to angle, 2*pi * (segment/segmentCount)
+// To go from index to segment index, index - (segment*6)
+//
+vec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {
+
+  const float segmentCount = 8.0;
+
+  float index = rawIndex - floor(rawIndex /
+    (segmentCount * 6.0)) *
+    (segmentCount * 6.0);
+
+  float segment = floor(0.001 + index/6.0);
+  float segmentIndex = index - (segment*6.0);
+
+  normal = -normalize(d);
+
+  if (segmentIndex > 2.99 && segmentIndex < 3.01) {
+    return mix(vec3(0.0), -d, coneOffset);
+  }
+
+  float nextAngle = (
+    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||
+    (segmentIndex > 4.99 &&  segmentIndex < 5.01)
+  ) ? 1.0 : 0.0;
+  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);
+
+  vec3 v1 = mix(d, vec3(0.0), coneOffset);
+  vec3 v2 = v1 - d;
+
+  vec3 u = getOrthogonalVector(d);
+  vec3 v = normalize(cross(u, d));
+
+  vec3 x = u * cos(angle) * length(d)*0.25;
+  vec3 y = v * sin(angle) * length(d)*0.25;
+  vec3 v3 = v2 + x + y;
+  if (segmentIndex < 3.0) {
+    vec3 tx = u * sin(angle);
+    vec3 ty = v * -cos(angle);
+    vec3 tangent = tx + ty;
+    normal = normalize(cross(v3 - v1, tangent));
+  }
+
+  if (segmentIndex == 0.0) {
+    return mix(d, vec3(0.0), coneOffset);
+  }
+  return v3;
+}
+
+attribute vec3 vector;
+attribute vec4 color, position;
+attribute vec2 uv;
+
+uniform float vectorScale, coneScale, coneOffset;
+uniform mat4 model, view, projection, inverseModel;
+uniform vec3 eyePosition, lightPosition;
+
+varying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  // Scale the vector magnitude to stay constant with
+  // model & view changes.
+  vec3 normal;
+  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);
+  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);
+
+  //Lighting geometry parameters
+  vec4 cameraCoordinate = view * conePosition;
+  cameraCoordinate.xyz /= cameraCoordinate.w;
+  f_lightDirection = lightPosition - cameraCoordinate.xyz;
+  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;
+  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);
+
+  // vec4 m_position  = model * vec4(conePosition, 1.0);
+  vec4 t_position  = view * conePosition;
+  gl_Position      = projection * t_position;
+
+  f_color          = color;
+  f_data           = conePosition.xyz;
+  f_position       = position.xyz;
+  f_uv             = uv;
+}
+`]),f=u([`#extension GL_OES_standard_derivatives : enable
+
+precision highp float;
+#define GLSLIFY 1
+
+float beckmannDistribution(float x, float roughness) {
+  float NdotH = max(x, 0.0001);
+  float cos2Alpha = NdotH * NdotH;
+  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;
+  float roughness2 = roughness * roughness;
+  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;
+  return exp(tan2Alpha / roughness2) / denom;
+}
+
+float cookTorranceSpecular(
+  vec3 lightDirection,
+  vec3 viewDirection,
+  vec3 surfaceNormal,
+  float roughness,
+  float fresnel) {
+
+  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);
+  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);
+
+  //Half angle vector
+  vec3 H = normalize(lightDirection + viewDirection);
+
+  //Geometric term
+  float NdotH = max(dot(surfaceNormal, H), 0.0);
+  float VdotH = max(dot(viewDirection, H), 0.000001);
+  float LdotH = max(dot(lightDirection, H), 0.000001);
+  float G1 = (2.0 * NdotH * VdotN) / VdotH;
+  float G2 = (2.0 * NdotH * LdotN) / LdotH;
+  float G = min(1.0, min(G1, G2));
+
+  //Distribution term
+  float D = beckmannDistribution(NdotH, roughness);
+
+  //Fresnel term
+  float F = pow(1.0 - VdotN, fresnel);
+
+  //Multiply terms and done
+  return  G * F * D / max(3.14159265 * VdotN, 0.000001);
+}
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 clipBounds[2];
+uniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;
+uniform sampler2D texture;
+
+varying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;
+  vec3 N = normalize(f_normal);
+  vec3 L = normalize(f_lightDirection);
+  vec3 V = normalize(f_eyeDirection);
+
+  if(gl_FrontFacing) {
+    N = -N;
+  }
+
+  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));
+  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);
+
+  vec4 surfaceColor = f_color * texture2D(texture, f_uv);
+  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);
+
+  gl_FragColor = litColor * opacity;
+}
+`]),h=u([`precision highp float;
+
+precision highp float;
+#define GLSLIFY 1
+
+vec3 getOrthogonalVector(vec3 v) {
+  // Return up-vector for only-z vector.
+  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).
+  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.
+  // Assign z = 0, x = -b, y = a:
+  // a*-b + b*a + c*0 = -ba + ba + 0 = 0
+  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {
+    return normalize(vec3(-v.y, v.x, 0.0));
+  } else {
+    return normalize(vec3(0.0, v.z, -v.y));
+  }
+}
+
+// Calculate the cone vertex and normal at the given index.
+//
+// The returned vertex is for a cone with its top at origin and height of 1.0,
+// pointing in the direction of the vector attribute.
+//
+// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.
+// These vertices are used to make up the triangles of the cone by the following:
+//   segment + 0 top vertex
+//   segment + 1 perimeter vertex a+1
+//   segment + 2 perimeter vertex a
+//   segment + 3 center base vertex
+//   segment + 4 perimeter vertex a
+//   segment + 5 perimeter vertex a+1
+// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.
+// To go from index to segment, floor(index / 6)
+// To go from segment to angle, 2*pi * (segment/segmentCount)
+// To go from index to segment index, index - (segment*6)
+//
+vec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {
+
+  const float segmentCount = 8.0;
+
+  float index = rawIndex - floor(rawIndex /
+    (segmentCount * 6.0)) *
+    (segmentCount * 6.0);
+
+  float segment = floor(0.001 + index/6.0);
+  float segmentIndex = index - (segment*6.0);
+
+  normal = -normalize(d);
+
+  if (segmentIndex > 2.99 && segmentIndex < 3.01) {
+    return mix(vec3(0.0), -d, coneOffset);
+  }
+
+  float nextAngle = (
+    (segmentIndex > 0.99 &&  segmentIndex < 1.01) ||
+    (segmentIndex > 4.99 &&  segmentIndex < 5.01)
+  ) ? 1.0 : 0.0;
+  float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);
+
+  vec3 v1 = mix(d, vec3(0.0), coneOffset);
+  vec3 v2 = v1 - d;
+
+  vec3 u = getOrthogonalVector(d);
+  vec3 v = normalize(cross(u, d));
+
+  vec3 x = u * cos(angle) * length(d)*0.25;
+  vec3 y = v * sin(angle) * length(d)*0.25;
+  vec3 v3 = v2 + x + y;
+  if (segmentIndex < 3.0) {
+    vec3 tx = u * sin(angle);
+    vec3 ty = v * -cos(angle);
+    vec3 tangent = tx + ty;
+    normal = normalize(cross(v3 - v1, tangent));
+  }
+
+  if (segmentIndex == 0.0) {
+    return mix(d, vec3(0.0), coneOffset);
+  }
+  return v3;
+}
+
+attribute vec4 vector;
+attribute vec4 position;
+attribute vec4 id;
+
+uniform mat4 model, view, projection;
+uniform float vectorScale, coneScale, coneOffset;
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  vec3 normal;
+  vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);
+  vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);
+  gl_Position = projection * (view * conePosition);
+  f_id        = id;
+  f_position  = position.xyz;
+}
+`]),d=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3  clipBounds[2];
+uniform float pickId;
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;
+
+  gl_FragColor = vec4(pickId, f_id.xyz);
+}`]);l.meshShader={vertex:c,fragment:f,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec3"}]},l.pickShader={vertex:h,fragment:d,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec3"}]}},737(s){s.exports={0:"NONE",1:"ONE",2:"LINE_LOOP",3:"LINE_STRIP",4:"TRIANGLES",5:"TRIANGLE_STRIP",6:"TRIANGLE_FAN",256:"DEPTH_BUFFER_BIT",512:"NEVER",513:"LESS",514:"EQUAL",515:"LEQUAL",516:"GREATER",517:"NOTEQUAL",518:"GEQUAL",519:"ALWAYS",768:"SRC_COLOR",769:"ONE_MINUS_SRC_COLOR",770:"SRC_ALPHA",771:"ONE_MINUS_SRC_ALPHA",772:"DST_ALPHA",773:"ONE_MINUS_DST_ALPHA",774:"DST_COLOR",775:"ONE_MINUS_DST_COLOR",776:"SRC_ALPHA_SATURATE",1024:"STENCIL_BUFFER_BIT",1028:"FRONT",1029:"BACK",1032:"FRONT_AND_BACK",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",2304:"CW",2305:"CCW",2849:"LINE_WIDTH",2884:"CULL_FACE",2885:"CULL_FACE_MODE",2886:"FRONT_FACE",2928:"DEPTH_RANGE",2929:"DEPTH_TEST",2930:"DEPTH_WRITEMASK",2931:"DEPTH_CLEAR_VALUE",2932:"DEPTH_FUNC",2960:"STENCIL_TEST",2961:"STENCIL_CLEAR_VALUE",2962:"STENCIL_FUNC",2963:"STENCIL_VALUE_MASK",2964:"STENCIL_FAIL",2965:"STENCIL_PASS_DEPTH_FAIL",2966:"STENCIL_PASS_DEPTH_PASS",2967:"STENCIL_REF",2968:"STENCIL_WRITEMASK",2978:"VIEWPORT",3024:"DITHER",3042:"BLEND",3088:"SCISSOR_BOX",3089:"SCISSOR_TEST",3106:"COLOR_CLEAR_VALUE",3107:"COLOR_WRITEMASK",3317:"UNPACK_ALIGNMENT",3333:"PACK_ALIGNMENT",3379:"MAX_TEXTURE_SIZE",3386:"MAX_VIEWPORT_DIMS",3408:"SUBPIXEL_BITS",3410:"RED_BITS",3411:"GREEN_BITS",3412:"BLUE_BITS",3413:"ALPHA_BITS",3414:"DEPTH_BITS",3415:"STENCIL_BITS",3553:"TEXTURE_2D",4352:"DONT_CARE",4353:"FASTEST",4354:"NICEST",5120:"BYTE",5121:"UNSIGNED_BYTE",5122:"SHORT",5123:"UNSIGNED_SHORT",5124:"INT",5125:"UNSIGNED_INT",5126:"FLOAT",5386:"INVERT",5890:"TEXTURE",6401:"STENCIL_INDEX",6402:"DEPTH_COMPONENT",6406:"ALPHA",6407:"RGB",6408:"RGBA",6409:"LUMINANCE",6410:"LUMINANCE_ALPHA",7680:"KEEP",7681:"REPLACE",7682:"INCR",7683:"DECR",7936:"VENDOR",7937:"RENDERER",7938:"VERSION",9728:"NEAREST",9729:"LINEAR",9984:"NEAREST_MIPMAP_NEAREST",9985:"LINEAR_MIPMAP_NEAREST",9986:"NEAREST_MIPMAP_LINEAR",9987:"LINEAR_MIPMAP_LINEAR",10240:"TEXTURE_MAG_FILTER",10241:"TEXTURE_MIN_FILTER",10242:"TEXTURE_WRAP_S",10243:"TEXTURE_WRAP_T",10497:"REPEAT",10752:"POLYGON_OFFSET_UNITS",16384:"COLOR_BUFFER_BIT",32769:"CONSTANT_COLOR",32770:"ONE_MINUS_CONSTANT_COLOR",32771:"CONSTANT_ALPHA",32772:"ONE_MINUS_CONSTANT_ALPHA",32773:"BLEND_COLOR",32774:"FUNC_ADD",32777:"BLEND_EQUATION_RGB",32778:"FUNC_SUBTRACT",32779:"FUNC_REVERSE_SUBTRACT",32819:"UNSIGNED_SHORT_4_4_4_4",32820:"UNSIGNED_SHORT_5_5_5_1",32823:"POLYGON_OFFSET_FILL",32824:"POLYGON_OFFSET_FACTOR",32854:"RGBA4",32855:"RGB5_A1",32873:"TEXTURE_BINDING_2D",32926:"SAMPLE_ALPHA_TO_COVERAGE",32928:"SAMPLE_COVERAGE",32936:"SAMPLE_BUFFERS",32937:"SAMPLES",32938:"SAMPLE_COVERAGE_VALUE",32939:"SAMPLE_COVERAGE_INVERT",32968:"BLEND_DST_RGB",32969:"BLEND_SRC_RGB",32970:"BLEND_DST_ALPHA",32971:"BLEND_SRC_ALPHA",33071:"CLAMP_TO_EDGE",33170:"GENERATE_MIPMAP_HINT",33189:"DEPTH_COMPONENT16",33306:"DEPTH_STENCIL_ATTACHMENT",33635:"UNSIGNED_SHORT_5_6_5",33648:"MIRRORED_REPEAT",33901:"ALIASED_POINT_SIZE_RANGE",33902:"ALIASED_LINE_WIDTH_RANGE",33984:"TEXTURE0",33985:"TEXTURE1",33986:"TEXTURE2",33987:"TEXTURE3",33988:"TEXTURE4",33989:"TEXTURE5",33990:"TEXTURE6",33991:"TEXTURE7",33992:"TEXTURE8",33993:"TEXTURE9",33994:"TEXTURE10",33995:"TEXTURE11",33996:"TEXTURE12",33997:"TEXTURE13",33998:"TEXTURE14",33999:"TEXTURE15",34e3:"TEXTURE16",34001:"TEXTURE17",34002:"TEXTURE18",34003:"TEXTURE19",34004:"TEXTURE20",34005:"TEXTURE21",34006:"TEXTURE22",34007:"TEXTURE23",34008:"TEXTURE24",34009:"TEXTURE25",34010:"TEXTURE26",34011:"TEXTURE27",34012:"TEXTURE28",34013:"TEXTURE29",34014:"TEXTURE30",34015:"TEXTURE31",34016:"ACTIVE_TEXTURE",34024:"MAX_RENDERBUFFER_SIZE",34041:"DEPTH_STENCIL",34055:"INCR_WRAP",34056:"DECR_WRAP",34067:"TEXTURE_CUBE_MAP",34068:"TEXTURE_BINDING_CUBE_MAP",34069:"TEXTURE_CUBE_MAP_POSITIVE_X",34070:"TEXTURE_CUBE_MAP_NEGATIVE_X",34071:"TEXTURE_CUBE_MAP_POSITIVE_Y",34072:"TEXTURE_CUBE_MAP_NEGATIVE_Y",34073:"TEXTURE_CUBE_MAP_POSITIVE_Z",34074:"TEXTURE_CUBE_MAP_NEGATIVE_Z",34076:"MAX_CUBE_MAP_TEXTURE_SIZE",34338:"VERTEX_ATTRIB_ARRAY_ENABLED",34339:"VERTEX_ATTRIB_ARRAY_SIZE",34340:"VERTEX_ATTRIB_ARRAY_STRIDE",34341:"VERTEX_ATTRIB_ARRAY_TYPE",34342:"CURRENT_VERTEX_ATTRIB",34373:"VERTEX_ATTRIB_ARRAY_POINTER",34466:"NUM_COMPRESSED_TEXTURE_FORMATS",34467:"COMPRESSED_TEXTURE_FORMATS",34660:"BUFFER_SIZE",34661:"BUFFER_USAGE",34816:"STENCIL_BACK_FUNC",34817:"STENCIL_BACK_FAIL",34818:"STENCIL_BACK_PASS_DEPTH_FAIL",34819:"STENCIL_BACK_PASS_DEPTH_PASS",34877:"BLEND_EQUATION_ALPHA",34921:"MAX_VERTEX_ATTRIBS",34922:"VERTEX_ATTRIB_ARRAY_NORMALIZED",34930:"MAX_TEXTURE_IMAGE_UNITS",34962:"ARRAY_BUFFER",34963:"ELEMENT_ARRAY_BUFFER",34964:"ARRAY_BUFFER_BINDING",34965:"ELEMENT_ARRAY_BUFFER_BINDING",34975:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",35040:"STREAM_DRAW",35044:"STATIC_DRAW",35048:"DYNAMIC_DRAW",35632:"FRAGMENT_SHADER",35633:"VERTEX_SHADER",35660:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",35661:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",35663:"SHADER_TYPE",35664:"FLOAT_VEC2",35665:"FLOAT_VEC3",35666:"FLOAT_VEC4",35667:"INT_VEC2",35668:"INT_VEC3",35669:"INT_VEC4",35670:"BOOL",35671:"BOOL_VEC2",35672:"BOOL_VEC3",35673:"BOOL_VEC4",35674:"FLOAT_MAT2",35675:"FLOAT_MAT3",35676:"FLOAT_MAT4",35678:"SAMPLER_2D",35680:"SAMPLER_CUBE",35712:"DELETE_STATUS",35713:"COMPILE_STATUS",35714:"LINK_STATUS",35715:"VALIDATE_STATUS",35716:"INFO_LOG_LENGTH",35717:"ATTACHED_SHADERS",35718:"ACTIVE_UNIFORMS",35719:"ACTIVE_UNIFORM_MAX_LENGTH",35720:"SHADER_SOURCE_LENGTH",35721:"ACTIVE_ATTRIBUTES",35722:"ACTIVE_ATTRIBUTE_MAX_LENGTH",35724:"SHADING_LANGUAGE_VERSION",35725:"CURRENT_PROGRAM",36003:"STENCIL_BACK_REF",36004:"STENCIL_BACK_VALUE_MASK",36005:"STENCIL_BACK_WRITEMASK",36006:"FRAMEBUFFER_BINDING",36007:"RENDERBUFFER_BINDING",36048:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",36049:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",36050:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",36051:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",36053:"FRAMEBUFFER_COMPLETE",36054:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",36055:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",36057:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",36061:"FRAMEBUFFER_UNSUPPORTED",36064:"COLOR_ATTACHMENT0",36096:"DEPTH_ATTACHMENT",36128:"STENCIL_ATTACHMENT",36160:"FRAMEBUFFER",36161:"RENDERBUFFER",36162:"RENDERBUFFER_WIDTH",36163:"RENDERBUFFER_HEIGHT",36164:"RENDERBUFFER_INTERNAL_FORMAT",36168:"STENCIL_INDEX8",36176:"RENDERBUFFER_RED_SIZE",36177:"RENDERBUFFER_GREEN_SIZE",36178:"RENDERBUFFER_BLUE_SIZE",36179:"RENDERBUFFER_ALPHA_SIZE",36180:"RENDERBUFFER_DEPTH_SIZE",36181:"RENDERBUFFER_STENCIL_SIZE",36194:"RGB565",36336:"LOW_FLOAT",36337:"MEDIUM_FLOAT",36338:"HIGH_FLOAT",36339:"LOW_INT",36340:"MEDIUM_INT",36341:"HIGH_INT",36346:"SHADER_COMPILER",36347:"MAX_VERTEX_UNIFORM_VECTORS",36348:"MAX_VARYING_VECTORS",36349:"MAX_FRAGMENT_UNIFORM_VECTORS",37440:"UNPACK_FLIP_Y_WEBGL",37441:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",37442:"CONTEXT_LOST_WEBGL",37443:"UNPACK_COLORSPACE_CONVERSION_WEBGL",37444:"BROWSER_DEFAULT_WEBGL"}},5171(s,l,n){var u=n(737);s.exports=function(f){return u[f]}},9165(s,l,n){"use strict";s.exports=_;var u=n(2762),c=n(8116),f=n(3436),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(v,x,S,M){this.gl=v,this.shader=M,this.buffer=x,this.vao=S,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var p=d.prototype;p.isOpaque=function(){return!this.hasAlpha},p.isTransparent=function(){return this.hasAlpha},p.drawTransparent=p.draw=function(v){var x=this.gl,S=this.shader.uniforms;this.shader.bind();var M=S.view=v.view||h,C=S.projection=v.projection||h;S.model=v.model||h,S.clipBounds=this.clipBounds,S.opacity=this.opacity;var w=M[12],k=M[13],A=M[14],b=M[15],E=v._ortho||!1,T=E?2:1,F=T*this.pixelRatio*(C[3]*w+C[7]*k+C[11]*A+C[15]*b)/x.drawingBufferHeight;this.vao.bind();for(var D=0;D<3;++D)x.lineWidth(this.lineWidth[D]*this.pixelRatio),S.capSize=this.capSize[D]*F,this.lineCount[D]&&x.drawArrays(x.LINES,this.lineOffset[D],this.lineCount[D]);this.vao.unbind()};function g(v,x){for(var S=0;S<3;++S)v[0][S]=Math.min(v[0][S],x[S]),v[1][S]=Math.max(v[1][S],x[S])}var m=(function(){for(var v=new Array(3),x=0;x<3;++x){for(var S=[],M=1;M<=2;++M)for(var C=-1;C<=1;C+=2){var w=(M+x)%3,k=[0,0,0];k[w]=C,S.push(k)}v[x]=S}return v})();function y(v,x,S,M){for(var C=m[M],w=0;w<C.length;++w){var k=C[w];v.push(x[0],x[1],x[2],S[0],S[1],S[2],S[3],k[0],k[1],k[2])}return C.length}p.update=function(v){v=v||{},"lineWidth"in v&&(this.lineWidth=v.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),"capSize"in v&&(this.capSize=v.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,"opacity"in v&&(this.opacity=+v.opacity,this.opacity<1&&(this.hasAlpha=!0));var x=v.color||[[0,0,0],[0,0,0],[0,0,0]],S=v.position,M=v.error;if(Array.isArray(x[0])||(x=[x,x,x]),S&&M){var C=[],w=S.length,k=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var A=0;A<3;++A){this.lineOffset[A]=k;e:for(var b=0;b<w;++b){for(var E=S[b],T=0;T<3;++T)if(isNaN(E[T])||!isFinite(E[T]))continue e;var F=M[b],D=x[A];if(Array.isArray(D[0])&&(D=x[b]),D.length===3?D=[D[0],D[1],D[2],1]:D.length===4&&(D=[D[0],D[1],D[2],D[3]],!this.hasAlpha&&D[3]<1&&(this.hasAlpha=!0)),!(isNaN(F[0][A])||isNaN(F[1][A]))){if(F[0][A]<0){var R=E.slice();R[A]+=F[0][A],C.push(E[0],E[1],E[2],D[0],D[1],D[2],D[3],0,0,0,R[0],R[1],R[2],D[0],D[1],D[2],D[3],0,0,0),g(this.bounds,R),k+=2+y(C,R,D,A)}if(F[1][A]>0){var R=E.slice();R[A]+=F[1][A],C.push(E[0],E[1],E[2],D[0],D[1],D[2],D[3],0,0,0,R[0],R[1],R[2],D[0],D[1],D[2],D[3],0,0,0),g(this.bounds,R),k+=2+y(C,R,D,A)}}}this.lineCount[A]=k-this.lineOffset[A]}this.buffer.update(C)}},p.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()};function _(v){var x=v.gl,S=u(x),M=c(x,[{buffer:S,type:x.FLOAT,size:3,offset:0,stride:40},{buffer:S,type:x.FLOAT,size:4,offset:12,stride:40},{buffer:S,type:x.FLOAT,size:3,offset:28,stride:40}]),C=f(x);C.attributes.position.location=0,C.attributes.color.location=1,C.attributes.offset.location=2;var w=new d(x,S,M,C);return w.update(v),w}},3436(s,l,n){"use strict";var u=n(3236),c=n(9405),f=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position, offset;
+attribute vec4 color;
+uniform mat4 model, view, projection;
+uniform float capSize;
+varying vec4 fragColor;
+varying vec3 fragPosition;
+
+void main() {
+  vec4 worldPosition  = model * vec4(position, 1.0);
+  worldPosition       = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);
+  gl_Position         = projection * (view * worldPosition);
+  fragColor           = color;
+  fragPosition        = position;
+}`]),h=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 clipBounds[2];
+uniform float opacity;
+varying vec3 fragPosition;
+varying vec4 fragColor;
+
+void main() {
+  if (
+    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||
+    fragColor.a * opacity == 0.
+  ) discard;
+
+  gl_FragColor = opacity * fragColor;
+}`]);s.exports=function(d){return c(d,f,h,null,[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"offset",type:"vec3"}])}},2260(s,l,n){"use strict";var u=n(7766);s.exports=k;var c=null,f,h,d,p;function g(A){var b=A.getParameter(A.FRAMEBUFFER_BINDING),E=A.getParameter(A.RENDERBUFFER_BINDING),T=A.getParameter(A.TEXTURE_BINDING_2D);return[b,E,T]}function m(A,b){A.bindFramebuffer(A.FRAMEBUFFER,b[0]),A.bindRenderbuffer(A.RENDERBUFFER,b[1]),A.bindTexture(A.TEXTURE_2D,b[2])}function y(A,b){var E=A.getParameter(b.MAX_COLOR_ATTACHMENTS_WEBGL);c=new Array(E+1);for(var T=0;T<=E;++T){for(var F=new Array(E),D=0;D<T;++D)F[D]=A.COLOR_ATTACHMENT0+D;for(var D=T;D<E;++D)F[D]=A.NONE;c[T]=F}}function _(A){switch(A){case f:throw new Error("gl-fbo: Framebuffer unsupported");case h:throw new Error("gl-fbo: Framebuffer incomplete attachment");case d:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case p:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function v(A,b,E,T,F,D){if(!T)return null;var R=u(A,b,E,F,T);return R.magFilter=A.NEAREST,R.minFilter=A.NEAREST,R.mipSamples=1,R.bind(),A.framebufferTexture2D(A.FRAMEBUFFER,D,A.TEXTURE_2D,R.handle,0),R}function x(A,b,E,T,F){var D=A.createRenderbuffer();return A.bindRenderbuffer(A.RENDERBUFFER,D),A.renderbufferStorage(A.RENDERBUFFER,T,b,E),A.framebufferRenderbuffer(A.FRAMEBUFFER,F,A.RENDERBUFFER,D),D}function S(A){var b=g(A.gl),E=A.gl,T=A.handle=E.createFramebuffer(),F=A._shape[0],D=A._shape[1],R=A.color.length,P=A._ext,z=A._useStencil,I=A._useDepth,L=A._colorType;E.bindFramebuffer(E.FRAMEBUFFER,T);for(var B=0;B<R;++B)A.color[B]=v(E,F,D,L,E.RGBA,E.COLOR_ATTACHMENT0+B);R===0?(A._color_rb=x(E,F,D,E.RGBA4,E.COLOR_ATTACHMENT0),P&&P.drawBuffersWEBGL(c[0])):R>1&&P.drawBuffersWEBGL(c[R]);var O=E.getExtension("WEBGL_depth_texture");O?z?A.depth=v(E,F,D,O.UNSIGNED_INT_24_8_WEBGL,E.DEPTH_STENCIL,E.DEPTH_STENCIL_ATTACHMENT):I&&(A.depth=v(E,F,D,E.UNSIGNED_SHORT,E.DEPTH_COMPONENT,E.DEPTH_ATTACHMENT)):I&&z?A._depth_rb=x(E,F,D,E.DEPTH_STENCIL,E.DEPTH_STENCIL_ATTACHMENT):I?A._depth_rb=x(E,F,D,E.DEPTH_COMPONENT16,E.DEPTH_ATTACHMENT):z&&(A._depth_rb=x(E,F,D,E.STENCIL_INDEX,E.STENCIL_ATTACHMENT));var G=E.checkFramebufferStatus(E.FRAMEBUFFER);if(G!==E.FRAMEBUFFER_COMPLETE){A._destroyed=!0,E.bindFramebuffer(E.FRAMEBUFFER,null),E.deleteFramebuffer(A.handle),A.handle=null,A.depth&&(A.depth.dispose(),A.depth=null),A._depth_rb&&(E.deleteRenderbuffer(A._depth_rb),A._depth_rb=null);for(var B=0;B<A.color.length;++B)A.color[B].dispose(),A.color[B]=null;A._color_rb&&(E.deleteRenderbuffer(A._color_rb),A._color_rb=null),m(E,b),_(G)}m(E,b)}function M(A,b,E,T,F,D,R,P){this.gl=A,this._shape=[b|0,E|0],this._destroyed=!1,this._ext=P,this.color=new Array(F);for(var z=0;z<F;++z)this.color[z]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=T,this._useDepth=D,this._useStencil=R;var I=this,L=[b|0,E|0];Object.defineProperties(L,{0:{get:function(){return I._shape[0]},set:function(B){return I.width=B}},1:{get:function(){return I._shape[1]},set:function(B){return I.height=B}}}),this._shapeVector=L,S(this)}var C=M.prototype;function w(A,b,E){if(A._destroyed)throw new Error("gl-fbo: Can't resize destroyed FBO");if(!(A._shape[0]===b&&A._shape[1]===E)){var T=A.gl,F=T.getParameter(T.MAX_RENDERBUFFER_SIZE);if(b<0||b>F||E<0||E>F)throw new Error("gl-fbo: Can't resize FBO, invalid dimensions");A._shape[0]=b,A._shape[1]=E;for(var D=g(T),R=0;R<A.color.length;++R)A.color[R].shape=A._shape;A._color_rb&&(T.bindRenderbuffer(T.RENDERBUFFER,A._color_rb),T.renderbufferStorage(T.RENDERBUFFER,T.RGBA4,A._shape[0],A._shape[1])),A.depth&&(A.depth.shape=A._shape),A._depth_rb&&(T.bindRenderbuffer(T.RENDERBUFFER,A._depth_rb),A._useDepth&&A._useStencil?T.renderbufferStorage(T.RENDERBUFFER,T.DEPTH_STENCIL,A._shape[0],A._shape[1]):A._useDepth?T.renderbufferStorage(T.RENDERBUFFER,T.DEPTH_COMPONENT16,A._shape[0],A._shape[1]):A._useStencil&&T.renderbufferStorage(T.RENDERBUFFER,T.STENCIL_INDEX,A._shape[0],A._shape[1])),T.bindFramebuffer(T.FRAMEBUFFER,A.handle);var P=T.checkFramebufferStatus(T.FRAMEBUFFER);P!==T.FRAMEBUFFER_COMPLETE&&(A.dispose(),m(T,D),_(P)),m(T,D)}}Object.defineProperties(C,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(A){if(Array.isArray(A)||(A=[A|0,A|0]),A.length!==2)throw new Error("gl-fbo: Shape vector must be length 2");var b=A[0]|0,E=A[1]|0;return w(this,b,E),[b,E]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(A){return A=A|0,w(this,A,this._shape[1]),A},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(A){return A=A|0,w(this,this._shape[0],A),A},enumerable:!1}}),C.bind=function(){if(!this._destroyed){var A=this.gl;A.bindFramebuffer(A.FRAMEBUFFER,this.handle),A.viewport(0,0,this._shape[0],this._shape[1])}},C.dispose=function(){if(!this._destroyed){this._destroyed=!0;var A=this.gl;A.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(A.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var b=0;b<this.color.length;++b)this.color[b].dispose(),this.color[b]=null;this._color_rb&&(A.deleteRenderbuffer(this._color_rb),this._color_rb=null)}};function k(A,b,E,T){f||(f=A.FRAMEBUFFER_UNSUPPORTED,h=A.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,d=A.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,p=A.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var F=A.getExtension("WEBGL_draw_buffers");if(!c&&F&&y(A,F),Array.isArray(b)&&(T=E,E=b[1]|0,b=b[0]|0),typeof b!="number")throw new Error("gl-fbo: Missing shape parameter");var D=A.getParameter(A.MAX_RENDERBUFFER_SIZE);if(b<0||b>D||E<0||E>D)throw new Error("gl-fbo: Parameters are too large for FBO");T=T||{};var R=1;if("color"in T){if(R=Math.max(T.color|0,0),R<0)throw new Error("gl-fbo: Must specify a nonnegative number of colors");if(R>1)if(F){if(R>A.getParameter(F.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error("gl-fbo: Context does not support "+R+" draw buffers")}else throw new Error("gl-fbo: Multiple draw buffer extension not supported")}var P=A.UNSIGNED_BYTE,z=A.getExtension("OES_texture_float");if(T.float&&R>0){if(!z)throw new Error("gl-fbo: Context does not support floating point textures");P=A.FLOAT}else T.preferFloat&&R>0&&z&&(P=A.FLOAT);var I=!0;"depth"in T&&(I=!!T.depth);var L=!1;return"stencil"in T&&(L=!!T.stencil),new M(A,b,E,P,R,I,L,F)}},2992(s,l,n){var u=n(3387).sprintf,c=n(5171),f=n(1848),h=n(1085);s.exports=d;function d(p,g,m){"use strict";var y=f(g)||"of unknown name (see npm glsl-shader-name)",_="unknown type";m!==void 0&&(_=m===c.FRAGMENT_SHADER?"fragment":"vertex");for(var v=u(`Error compiling %s shader %s:
+`,_,y),x=u("%s%s",v,p),S=p.split(`
+`),M={},C=0;C<S.length;C++){var w=S[C];if(!(w===""||w==="\0")){var k=parseInt(w.split(":")[2]);if(isNaN(k))throw new Error(u("Could not parse error: %s",w));M[k]=w}}for(var A=h(g).split(`
+`),C=0;C<A.length;C++)if(!(!M[C+3]&&!M[C+2]&&!M[C+1])){var b=A[C];if(v+=b+`
+`,M[C+1]){var E=M[C+1];E=E.substr(E.split(":",3).join(":").length+1).trim(),v+=u(`^^^ %s
+
+`,E)}}return{long:v.trim(),short:x.trim()}}},7319(s,l,n){var u=n(3236),c=n(9405),f=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position, nextPosition;
+attribute float arcLength, lineWidth;
+attribute vec4 color;
+
+uniform vec2 screenShape;
+uniform float pixelRatio;
+uniform mat4 model, view, projection;
+
+varying vec4 fragColor;
+varying vec3 worldPosition;
+varying float pixelArcLength;
+
+vec4 project(vec3 p) {
+  return projection * (view * (model * vec4(p, 1.0)));
+}
+
+void main() {
+  vec4 startPoint = project(position);
+  vec4 endPoint   = project(nextPosition);
+
+  vec2 A = startPoint.xy / startPoint.w;
+  vec2 B =   endPoint.xy /   endPoint.w;
+
+  float clipAngle = atan(
+    (B.y - A.y) * screenShape.y,
+    (B.x - A.x) * screenShape.x
+  );
+
+  vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(
+    sin(clipAngle),
+    -cos(clipAngle)
+  ) / screenShape;
+
+  gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);
+
+  worldPosition = position;
+  pixelArcLength = arcLength;
+  fragColor = color;
+}
+`]),h=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3      clipBounds[2];
+uniform sampler2D dashTexture;
+uniform float     dashScale;
+uniform float     opacity;
+
+varying vec3    worldPosition;
+varying float   pixelArcLength;
+varying vec4    fragColor;
+
+void main() {
+  if (
+    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||
+    fragColor.a * opacity == 0.
+  ) discard;
+
+  float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;
+  if(dashWeight < 0.5) {
+    discard;
+  }
+  gl_FragColor = fragColor * opacity;
+}
+`]),d=u([`precision highp float;
+#define GLSLIFY 1
+
+#define FLOAT_MAX  1.70141184e38
+#define FLOAT_MIN  1.17549435e-38
+
+// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl
+vec4 packFloat(float v) {
+  float av = abs(v);
+
+  //Handle special cases
+  if(av < FLOAT_MIN) {
+    return vec4(0.0, 0.0, 0.0, 0.0);
+  } else if(v > FLOAT_MAX) {
+    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;
+  } else if(v < -FLOAT_MAX) {
+    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;
+  }
+
+  vec4 c = vec4(0,0,0,0);
+
+  //Compute exponent and mantissa
+  float e = floor(log2(av));
+  float m = av * pow(2.0, -e) - 1.0;
+
+  //Unpack mantissa
+  c[1] = floor(128.0 * m);
+  m -= c[1] / 128.0;
+  c[2] = floor(32768.0 * m);
+  m -= c[2] / 32768.0;
+  c[3] = floor(8388608.0 * m);
+
+  //Unpack exponent
+  float ebias = e + 127.0;
+  c[0] = floor(ebias / 2.0);
+  ebias -= c[0] * 2.0;
+  c[1] += floor(ebias) * 128.0;
+
+  //Unpack sign bit
+  c[0] += 128.0 * step(0.0, -v);
+
+  //Scale back to range
+  return c / 255.0;
+}
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform float pickId;
+uniform vec3 clipBounds[2];
+
+varying vec3 worldPosition;
+varying float pixelArcLength;
+varying vec4 fragColor;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;
+
+  gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);
+}`]),p=[{name:"position",type:"vec3"},{name:"nextPosition",type:"vec3"},{name:"arcLength",type:"float"},{name:"lineWidth",type:"float"},{name:"color",type:"vec4"}];l.createShader=function(g){return c(g,f,h,null,p)},l.createPickShader=function(g){return c(g,f,d,null,p)}},5714(s,l,n){"use strict";s.exports=A;var u=n(2762),c=n(8116),f=n(7766),h=new Uint8Array(4),d=new Float32Array(h.buffer);function p(b,E,T,F){return h[0]=F,h[1]=T,h[2]=E,h[3]=b,d[0]}var g=n(2478),m=n(9618),y=n(7319),_=y.createShader,v=y.createPickShader,x=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function S(b,E){for(var T=0,F=0;F<3;++F){var D=b[F]-E[F];T+=D*D}return Math.sqrt(T)}function M(b){for(var E=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],T=0;T<3;++T)E[0][T]=Math.max(b[0][T],E[0][T]),E[1][T]=Math.min(b[1][T],E[1][T]);return E}function C(b,E,T,F){this.arcLength=b,this.position=E,this.index=T,this.dataCoordinate=F}function w(b,E,T,F,D,R){this.gl=b,this.shader=E,this.pickShader=T,this.buffer=F,this.vao=D,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=R,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var k=w.prototype;k.isTransparent=function(){return this.hasAlpha},k.isOpaque=function(){return!this.hasAlpha},k.pickSlots=1,k.setPickBase=function(b){this.pickId=b},k.drawTransparent=k.draw=function(b){if(this.vertexCount){var E=this.gl,T=this.shader,F=this.vao;T.bind(),T.uniforms={model:b.model||x,view:b.view||x,projection:b.projection||x,clipBounds:M(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[E.drawingBufferWidth,E.drawingBufferHeight],pixelRatio:this.pixelRatio},F.bind(),F.draw(E.TRIANGLE_STRIP,this.vertexCount),F.unbind()}},k.drawPick=function(b){if(this.vertexCount){var E=this.gl,T=this.pickShader,F=this.vao;T.bind(),T.uniforms={model:b.model||x,view:b.view||x,projection:b.projection||x,pickId:this.pickId,clipBounds:M(this.clipBounds),screenShape:[E.drawingBufferWidth,E.drawingBufferHeight],pixelRatio:this.pixelRatio},F.bind(),F.draw(E.TRIANGLE_STRIP,this.vertexCount),F.unbind()}},k.update=function(b){var E,T;this.dirty=!0;var F=!!b.connectGaps;"dashScale"in b&&(this.dashScale=b.dashScale),this.hasAlpha=!1,"opacity"in b&&(this.opacity=+b.opacity,this.opacity<1&&(this.hasAlpha=!0));var D=[],R=[],P=[],z=0,I=0,L=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],B=b.position||b.positions;if(B){var O=b.color||b.colors||[0,0,0,1],G=b.lineWidth||1,W=!1;e:for(E=1;E<B.length;++E){var X=B[E-1],Z=B[E];for(R.push(z),P.push(X.slice()),T=0;T<3;++T){if(isNaN(X[T])||isNaN(Z[T])||!isFinite(X[T])||!isFinite(Z[T])){if(!F&&D.length>0){for(var J=0;J<24;++J)D.push(D[D.length-12]);I+=2,W=!0}continue e}L[0][T]=Math.min(L[0][T],X[T],Z[T]),L[1][T]=Math.max(L[1][T],X[T],Z[T])}var N,H;Array.isArray(O[0])?(N=O.length>E-1?O[E-1]:O.length>0?O[O.length-1]:[0,0,0,1],H=O.length>E?O[E]:O.length>0?O[O.length-1]:[0,0,0,1]):N=H=O,N.length===3&&(N=[N[0],N[1],N[2],1]),H.length===3&&(H=[H[0],H[1],H[2],1]),!this.hasAlpha&&N[3]<1&&(this.hasAlpha=!0);var $;Array.isArray(G)?$=G.length>E-1?G[E-1]:G.length>0?G[G.length-1]:[0,0,0,1]:$=G;var U=z;if(z+=S(X,Z),W){for(T=0;T<2;++T)D.push(X[0],X[1],X[2],Z[0],Z[1],Z[2],U,$,N[0],N[1],N[2],N[3]);I+=2,W=!1}D.push(X[0],X[1],X[2],Z[0],Z[1],Z[2],U,$,N[0],N[1],N[2],N[3],X[0],X[1],X[2],Z[0],Z[1],Z[2],U,-$,N[0],N[1],N[2],N[3],Z[0],Z[1],Z[2],X[0],X[1],X[2],z,-$,H[0],H[1],H[2],H[3],Z[0],Z[1],Z[2],X[0],X[1],X[2],z,$,H[0],H[1],H[2],H[3]),I+=4}}if(this.buffer.update(D),R.push(z),P.push(B[B.length-1].slice()),this.bounds=L,this.vertexCount=I,this.points=P,this.arcLength=R,"dashes"in b){var V=b.dashes,j=V.slice();for(j.unshift(0),E=1;E<j.length;++E)j[E]=j[E-1]+j[E];var q=m(new Array(256*4),[256,1,4]);for(E=0;E<256;++E){for(T=0;T<4;++T)q.set(E,0,T,0);g.le(j,j[j.length-1]*E/255)&1?q.set(E,0,0,0):q.set(E,0,0,255)}this.texture.setPixels(q)}},k.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},k.pick=function(b){if(!b||b.id!==this.pickId)return null;var E=p(b.value[0],b.value[1],b.value[2],0),T=g.le(this.arcLength,E);if(T<0)return null;if(T===this.arcLength.length-1)return new C(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),T);for(var F=this.points[T],D=this.points[Math.min(T+1,this.points.length-1)],R=(E-this.arcLength[T])/(this.arcLength[T+1]-this.arcLength[T]),P=1-R,z=[0,0,0],I=0;I<3;++I)z[I]=P*F[I]+R*D[I];var L=Math.min(R<.5?T:T+1,this.points.length-1);return new C(E,z,L,this.points[L])};function A(b){var E=b.gl||b.scene&&b.scene.gl,T=_(E);T.attributes.position.location=0,T.attributes.nextPosition.location=1,T.attributes.arcLength.location=2,T.attributes.lineWidth.location=3,T.attributes.color.location=4;var F=v(E);F.attributes.position.location=0,F.attributes.nextPosition.location=1,F.attributes.arcLength.location=2,F.attributes.lineWidth.location=3,F.attributes.color.location=4;for(var D=u(E),R=c(E,[{buffer:D,size:3,offset:0,stride:48},{buffer:D,size:3,offset:12,stride:48},{buffer:D,size:1,offset:24,stride:48},{buffer:D,size:1,offset:28,stride:48},{buffer:D,size:4,offset:32,stride:48}]),P=m(new Array(256*4),[256,1,4]),z=0;z<1024;++z)P.data[z]=255;var I=f(E,P);I.wrap=E.REPEAT;var L=new w(E,T,F,D,R,I);return L.update(b),L}},1903(s){s.exports=l;function l(n){var u=new Float32Array(16);return u[0]=n[0],u[1]=n[1],u[2]=n[2],u[3]=n[3],u[4]=n[4],u[5]=n[5],u[6]=n[6],u[7]=n[7],u[8]=n[8],u[9]=n[9],u[10]=n[10],u[11]=n[11],u[12]=n[12],u[13]=n[13],u[14]=n[14],u[15]=n[15],u}},6864(s){s.exports=l;function l(){var n=new Float32Array(16);return n[0]=1,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=1,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}},9921(s){s.exports=l;function l(n){var u=n[0],c=n[1],f=n[2],h=n[3],d=n[4],p=n[5],g=n[6],m=n[7],y=n[8],_=n[9],v=n[10],x=n[11],S=n[12],M=n[13],C=n[14],w=n[15],k=u*p-c*d,A=u*g-f*d,b=u*m-h*d,E=c*g-f*p,T=c*m-h*p,F=f*m-h*g,D=y*M-_*S,R=y*C-v*S,P=y*w-x*S,z=_*C-v*M,I=_*w-x*M,L=v*w-x*C;return k*L-A*I+b*z+E*P-T*R+F*D}},7399(s){s.exports=l;function l(n,u){var c=u[0],f=u[1],h=u[2],d=u[3],p=c+c,g=f+f,m=h+h,y=c*p,_=f*p,v=f*g,x=h*p,S=h*g,M=h*m,C=d*p,w=d*g,k=d*m;return n[0]=1-v-M,n[1]=_+k,n[2]=x-w,n[3]=0,n[4]=_-k,n[5]=1-y-M,n[6]=S+C,n[7]=0,n[8]=x+w,n[9]=S-C,n[10]=1-y-v,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}},6743(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=u[3],g=f+f,m=h+h,y=d+d,_=f*g,v=f*m,x=f*y,S=h*m,M=h*y,C=d*y,w=p*g,k=p*m,A=p*y;return n[0]=1-(S+C),n[1]=v+A,n[2]=x-k,n[3]=0,n[4]=v-A,n[5]=1-(_+C),n[6]=M+w,n[7]=0,n[8]=x+k,n[9]=M-w,n[10]=1-(_+S),n[11]=0,n[12]=c[0],n[13]=c[1],n[14]=c[2],n[15]=1,n}},7894(s){s.exports=l;function l(n){return n[0]=1,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=1,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}},7608(s){s.exports=l;function l(n,u){var c=u[0],f=u[1],h=u[2],d=u[3],p=u[4],g=u[5],m=u[6],y=u[7],_=u[8],v=u[9],x=u[10],S=u[11],M=u[12],C=u[13],w=u[14],k=u[15],A=c*g-f*p,b=c*m-h*p,E=c*y-d*p,T=f*m-h*g,F=f*y-d*g,D=h*y-d*m,R=_*C-v*M,P=_*w-x*M,z=_*k-S*M,I=v*w-x*C,L=v*k-S*C,B=x*k-S*w,O=A*B-b*L+E*I+T*z-F*P+D*R;return O?(O=1/O,n[0]=(g*B-m*L+y*I)*O,n[1]=(h*L-f*B-d*I)*O,n[2]=(C*D-w*F+k*T)*O,n[3]=(x*F-v*D-S*T)*O,n[4]=(m*z-p*B-y*P)*O,n[5]=(c*B-h*z+d*P)*O,n[6]=(w*E-M*D-k*b)*O,n[7]=(_*D-x*E+S*b)*O,n[8]=(p*L-g*z+y*R)*O,n[9]=(f*z-c*L-d*R)*O,n[10]=(M*F-C*E+k*A)*O,n[11]=(v*E-_*F-S*A)*O,n[12]=(g*P-p*I-m*R)*O,n[13]=(c*I-f*P+h*R)*O,n[14]=(C*b-M*T-w*A)*O,n[15]=(_*T-v*b+x*A)*O,n):null}},6582(s,l,n){var u=n(7894);s.exports=c;function c(f,h,d,p){var g,m,y,_,v,x,S,M,C,w,k=h[0],A=h[1],b=h[2],E=p[0],T=p[1],F=p[2],D=d[0],R=d[1],P=d[2];return Math.abs(k-D)<1e-6&&Math.abs(A-R)<1e-6&&Math.abs(b-P)<1e-6?u(f):(S=k-D,M=A-R,C=b-P,w=1/Math.sqrt(S*S+M*M+C*C),S*=w,M*=w,C*=w,g=T*C-F*M,m=F*S-E*C,y=E*M-T*S,w=Math.sqrt(g*g+m*m+y*y),w?(w=1/w,g*=w,m*=w,y*=w):(g=0,m=0,y=0),_=M*y-C*m,v=C*g-S*y,x=S*m-M*g,w=Math.sqrt(_*_+v*v+x*x),w?(w=1/w,_*=w,v*=w,x*=w):(_=0,v=0,x=0),f[0]=g,f[1]=_,f[2]=S,f[3]=0,f[4]=m,f[5]=v,f[6]=M,f[7]=0,f[8]=y,f[9]=x,f[10]=C,f[11]=0,f[12]=-(g*k+m*A+y*b),f[13]=-(_*k+v*A+x*b),f[14]=-(S*k+M*A+C*b),f[15]=1,f)}},6760(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=u[3],g=u[4],m=u[5],y=u[6],_=u[7],v=u[8],x=u[9],S=u[10],M=u[11],C=u[12],w=u[13],k=u[14],A=u[15],b=c[0],E=c[1],T=c[2],F=c[3];return n[0]=b*f+E*g+T*v+F*C,n[1]=b*h+E*m+T*x+F*w,n[2]=b*d+E*y+T*S+F*k,n[3]=b*p+E*_+T*M+F*A,b=c[4],E=c[5],T=c[6],F=c[7],n[4]=b*f+E*g+T*v+F*C,n[5]=b*h+E*m+T*x+F*w,n[6]=b*d+E*y+T*S+F*k,n[7]=b*p+E*_+T*M+F*A,b=c[8],E=c[9],T=c[10],F=c[11],n[8]=b*f+E*g+T*v+F*C,n[9]=b*h+E*m+T*x+F*w,n[10]=b*d+E*y+T*S+F*k,n[11]=b*p+E*_+T*M+F*A,b=c[12],E=c[13],T=c[14],F=c[15],n[12]=b*f+E*g+T*v+F*C,n[13]=b*h+E*m+T*x+F*w,n[14]=b*d+E*y+T*S+F*k,n[15]=b*p+E*_+T*M+F*A,n}},4040(s){s.exports=l;function l(n,u,c,f,h,d,p){var g=1/(u-c),m=1/(f-h),y=1/(d-p);return n[0]=-2*g,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=-2*m,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=2*y,n[11]=0,n[12]=(u+c)*g,n[13]=(h+f)*m,n[14]=(p+d)*y,n[15]=1,n}},4772(s){s.exports=l;function l(n,u,c,f,h){var d=1/Math.tan(u/2),p=1/(f-h);return n[0]=d/c,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=d,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=(h+f)*p,n[11]=-1,n[12]=0,n[13]=0,n[14]=2*h*f*p,n[15]=0,n}},6079(s){s.exports=l;function l(n,u,c,f){var h=f[0],d=f[1],p=f[2],g=Math.sqrt(h*h+d*d+p*p),m,y,_,v,x,S,M,C,w,k,A,b,E,T,F,D,R,P,z,I,L,B,O,G;return Math.abs(g)<1e-6?null:(g=1/g,h*=g,d*=g,p*=g,m=Math.sin(c),y=Math.cos(c),_=1-y,v=u[0],x=u[1],S=u[2],M=u[3],C=u[4],w=u[5],k=u[6],A=u[7],b=u[8],E=u[9],T=u[10],F=u[11],D=h*h*_+y,R=d*h*_+p*m,P=p*h*_-d*m,z=h*d*_-p*m,I=d*d*_+y,L=p*d*_+h*m,B=h*p*_+d*m,O=d*p*_-h*m,G=p*p*_+y,n[0]=v*D+C*R+b*P,n[1]=x*D+w*R+E*P,n[2]=S*D+k*R+T*P,n[3]=M*D+A*R+F*P,n[4]=v*z+C*I+b*L,n[5]=x*z+w*I+E*L,n[6]=S*z+k*I+T*L,n[7]=M*z+A*I+F*L,n[8]=v*B+C*O+b*G,n[9]=x*B+w*O+E*G,n[10]=S*B+k*O+T*G,n[11]=M*B+A*O+F*G,u!==n&&(n[12]=u[12],n[13]=u[13],n[14]=u[14],n[15]=u[15]),n)}},5567(s){s.exports=l;function l(n,u,c){var f=Math.sin(c),h=Math.cos(c),d=u[4],p=u[5],g=u[6],m=u[7],y=u[8],_=u[9],v=u[10],x=u[11];return u!==n&&(n[0]=u[0],n[1]=u[1],n[2]=u[2],n[3]=u[3],n[12]=u[12],n[13]=u[13],n[14]=u[14],n[15]=u[15]),n[4]=d*h+y*f,n[5]=p*h+_*f,n[6]=g*h+v*f,n[7]=m*h+x*f,n[8]=y*h-d*f,n[9]=_*h-p*f,n[10]=v*h-g*f,n[11]=x*h-m*f,n}},2408(s){s.exports=l;function l(n,u,c){var f=Math.sin(c),h=Math.cos(c),d=u[0],p=u[1],g=u[2],m=u[3],y=u[8],_=u[9],v=u[10],x=u[11];return u!==n&&(n[4]=u[4],n[5]=u[5],n[6]=u[6],n[7]=u[7],n[12]=u[12],n[13]=u[13],n[14]=u[14],n[15]=u[15]),n[0]=d*h-y*f,n[1]=p*h-_*f,n[2]=g*h-v*f,n[3]=m*h-x*f,n[8]=d*f+y*h,n[9]=p*f+_*h,n[10]=g*f+v*h,n[11]=m*f+x*h,n}},7089(s){s.exports=l;function l(n,u,c){var f=Math.sin(c),h=Math.cos(c),d=u[0],p=u[1],g=u[2],m=u[3],y=u[4],_=u[5],v=u[6],x=u[7];return u!==n&&(n[8]=u[8],n[9]=u[9],n[10]=u[10],n[11]=u[11],n[12]=u[12],n[13]=u[13],n[14]=u[14],n[15]=u[15]),n[0]=d*h+y*f,n[1]=p*h+_*f,n[2]=g*h+v*f,n[3]=m*h+x*f,n[4]=y*h-d*f,n[5]=_*h-p*f,n[6]=v*h-g*f,n[7]=x*h-m*f,n}},2504(s){s.exports=l;function l(n,u,c){var f=c[0],h=c[1],d=c[2];return n[0]=u[0]*f,n[1]=u[1]*f,n[2]=u[2]*f,n[3]=u[3]*f,n[4]=u[4]*h,n[5]=u[5]*h,n[6]=u[6]*h,n[7]=u[7]*h,n[8]=u[8]*d,n[9]=u[9]*d,n[10]=u[10]*d,n[11]=u[11]*d,n[12]=u[12],n[13]=u[13],n[14]=u[14],n[15]=u[15],n}},7656(s){s.exports=l;function l(n,u,c){var f=c[0],h=c[1],d=c[2],p,g,m,y,_,v,x,S,M,C,w,k;return u===n?(n[12]=u[0]*f+u[4]*h+u[8]*d+u[12],n[13]=u[1]*f+u[5]*h+u[9]*d+u[13],n[14]=u[2]*f+u[6]*h+u[10]*d+u[14],n[15]=u[3]*f+u[7]*h+u[11]*d+u[15]):(p=u[0],g=u[1],m=u[2],y=u[3],_=u[4],v=u[5],x=u[6],S=u[7],M=u[8],C=u[9],w=u[10],k=u[11],n[0]=p,n[1]=g,n[2]=m,n[3]=y,n[4]=_,n[5]=v,n[6]=x,n[7]=S,n[8]=M,n[9]=C,n[10]=w,n[11]=k,n[12]=p*f+_*h+M*d+u[12],n[13]=g*f+v*h+C*d+u[13],n[14]=m*f+x*h+w*d+u[14],n[15]=y*f+S*h+k*d+u[15]),n}},5665(s){s.exports=l;function l(n,u){if(n===u){var c=u[1],f=u[2],h=u[3],d=u[6],p=u[7],g=u[11];n[1]=u[4],n[2]=u[8],n[3]=u[12],n[4]=c,n[6]=u[9],n[7]=u[13],n[8]=f,n[9]=d,n[11]=u[14],n[12]=h,n[13]=p,n[14]=g}else n[0]=u[0],n[1]=u[4],n[2]=u[8],n[3]=u[12],n[4]=u[1],n[5]=u[5],n[6]=u[9],n[7]=u[13],n[8]=u[2],n[9]=u[6],n[10]=u[10],n[11]=u[14],n[12]=u[3],n[13]=u[7],n[14]=u[11],n[15]=u[15];return n}},7626(s,l,n){"use strict";var u=n(2642),c=n(9346);s.exports=g;function f(m,y){for(var _=[0,0,0,0],v=0;v<4;++v)for(var x=0;x<4;++x)_[x]+=m[4*v+x]*y[v];return _}function h(m,y,_,v,x){for(var S=f(v,f(_,f(y,[m[0],m[1],m[2],1]))),M=0;M<3;++M)S[M]/=S[3];return[.5*x[0]*(1+S[0]),.5*x[1]*(1-S[1])]}function d(m,y){if(m.length===2){for(var _=0,v=0,x=0;x<2;++x)_+=Math.pow(y[x]-m[0][x],2),v+=Math.pow(y[x]-m[1][x],2);return _=Math.sqrt(_),v=Math.sqrt(v),_+v<1e-6?[1,0]:[v/(_+v),_/(v+_)]}else if(m.length===3){var S=[0,0];return c(m[0],m[1],m[2],y,S),u(m,S)}return[]}function p(m,y){for(var _=[0,0,0],v=0;v<m.length;++v)for(var x=m[v],S=y[v],M=0;M<3;++M)_[M]+=S*x[M];return _}function g(m,y,_,v,x,S){if(m.length===1)return[0,m[0].slice()];for(var M=new Array(m.length),C=0;C<m.length;++C)M[C]=h(m[C],_,v,x,S);for(var w=0,k=1/0,C=0;C<M.length;++C){for(var A=0,b=0;b<2;++b)A+=Math.pow(M[C][b]-y[b],2);A<k&&(k=A,w=C)}for(var E=d(M,y),T=0,C=0;C<3;++C){if(E[C]<-.001||E[C]>1.0001)return null;T+=E[C]}return Math.abs(T-1)>.001?null:[w,p(m,E),E]}},840(s,l,n){var u=n(3236),c=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position, normal;
+attribute vec4 color;
+attribute vec2 uv;
+
+uniform mat4 model
+           , view
+           , projection
+           , inverseModel;
+uniform vec3 eyePosition
+           , lightPosition;
+
+varying vec3 f_normal
+           , f_lightDirection
+           , f_eyeDirection
+           , f_data;
+varying vec4 f_color;
+varying vec2 f_uv;
+
+vec4 project(vec3 p) {
+  return projection * (view * (model * vec4(p, 1.0)));
+}
+
+void main() {
+  gl_Position      = project(position);
+
+  //Lighting geometry parameters
+  vec4 cameraCoordinate = view * vec4(position , 1.0);
+  cameraCoordinate.xyz /= cameraCoordinate.w;
+  f_lightDirection = lightPosition - cameraCoordinate.xyz;
+  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;
+  f_normal  = normalize((vec4(normal, 0.0) * inverseModel).xyz);
+
+  f_color          = color;
+  f_data           = position;
+  f_uv             = uv;
+}
+`]),f=u([`#extension GL_OES_standard_derivatives : enable
+
+precision highp float;
+#define GLSLIFY 1
+
+float beckmannDistribution(float x, float roughness) {
+  float NdotH = max(x, 0.0001);
+  float cos2Alpha = NdotH * NdotH;
+  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;
+  float roughness2 = roughness * roughness;
+  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;
+  return exp(tan2Alpha / roughness2) / denom;
+}
+
+float cookTorranceSpecular(
+  vec3 lightDirection,
+  vec3 viewDirection,
+  vec3 surfaceNormal,
+  float roughness,
+  float fresnel) {
+
+  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);
+  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);
+
+  //Half angle vector
+  vec3 H = normalize(lightDirection + viewDirection);
+
+  //Geometric term
+  float NdotH = max(dot(surfaceNormal, H), 0.0);
+  float VdotH = max(dot(viewDirection, H), 0.000001);
+  float LdotH = max(dot(lightDirection, H), 0.000001);
+  float G1 = (2.0 * NdotH * VdotN) / VdotH;
+  float G2 = (2.0 * NdotH * LdotN) / LdotH;
+  float G = min(1.0, min(G1, G2));
+
+  //Distribution term
+  float D = beckmannDistribution(NdotH, roughness);
+
+  //Fresnel term
+  float F = pow(1.0 - VdotN, fresnel);
+
+  //Multiply terms and done
+  return  G * F * D / max(3.14159265 * VdotN, 0.000001);
+}
+
+//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 clipBounds[2];
+uniform float roughness
+            , fresnel
+            , kambient
+            , kdiffuse
+            , kspecular;
+uniform sampler2D texture;
+
+varying vec3 f_normal
+           , f_lightDirection
+           , f_eyeDirection
+           , f_data;
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  if (f_color.a == 0.0 ||
+    outOfRange(clipBounds[0], clipBounds[1], f_data)
+  ) discard;
+
+  vec3 N = normalize(f_normal);
+  vec3 L = normalize(f_lightDirection);
+  vec3 V = normalize(f_eyeDirection);
+
+  if(gl_FrontFacing) {
+    N = -N;
+  }
+
+  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));
+  //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d
+
+  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);
+
+  vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);
+  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);
+
+  gl_FragColor = litColor * f_color.a;
+}
+`]),h=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position;
+attribute vec4 color;
+attribute vec2 uv;
+
+uniform mat4 model, view, projection;
+
+varying vec4 f_color;
+varying vec3 f_data;
+varying vec2 f_uv;
+
+void main() {
+  gl_Position = projection * (view * (model * vec4(position, 1.0)));
+  f_color = color;
+  f_data  = position;
+  f_uv    = uv;
+}`]),d=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 clipBounds[2];
+uniform sampler2D texture;
+uniform float opacity;
+
+varying vec4 f_color;
+varying vec3 f_data;
+varying vec2 f_uv;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;
+
+  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;
+}`]),p=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+attribute vec3 position;
+attribute vec4 color;
+attribute vec2 uv;
+attribute float pointSize;
+
+uniform mat4 model, view, projection;
+uniform vec3 clipBounds[2];
+
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], position)) {
+
+    gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);
+  } else {
+    gl_Position = projection * (view * (model * vec4(position, 1.0)));
+  }
+  gl_PointSize = pointSize;
+  f_color = color;
+  f_uv = uv;
+}`]),g=u([`precision highp float;
+#define GLSLIFY 1
+
+uniform sampler2D texture;
+uniform float opacity;
+
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);
+  if(dot(pointR, pointR) > 0.25) {
+    discard;
+  }
+  gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;
+}`]),m=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position;
+attribute vec4 id;
+
+uniform mat4 model, view, projection;
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  gl_Position = projection * (view * (model * vec4(position, 1.0)));
+  f_id        = id;
+  f_position  = position;
+}`]),y=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3  clipBounds[2];
+uniform float pickId;
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;
+
+  gl_FragColor = vec4(pickId, f_id.xyz);
+}`]),_=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+attribute vec3  position;
+attribute float pointSize;
+attribute vec4  id;
+
+uniform mat4 model, view, projection;
+uniform vec3 clipBounds[2];
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], position)) {
+
+    gl_Position = vec4(0.0, 0.0, 0.0, 0.0);
+  } else {
+    gl_Position  = projection * (view * (model * vec4(position, 1.0)));
+    gl_PointSize = pointSize;
+  }
+  f_id         = id;
+  f_position   = position;
+}`]),v=u([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec3 position;
+
+uniform mat4 model, view, projection;
+
+void main() {
+  gl_Position = projection * (view * (model * vec4(position, 1.0)));
+}`]),x=u([`precision highp float;
+#define GLSLIFY 1
+
+uniform vec3 contourColor;
+
+void main() {
+  gl_FragColor = vec4(contourColor, 1.0);
+}
+`]);l.meshShader={vertex:c,fragment:f,attributes:[{name:"position",type:"vec3"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},l.wireShader={vertex:h,fragment:d,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},l.pointShader={vertex:p,fragment:g,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"pointSize",type:"float"}]},l.pickShader={vertex:m,fragment:y,attributes:[{name:"position",type:"vec3"},{name:"id",type:"vec4"}]},l.pointPickShader={vertex:_,fragment:y,attributes:[{name:"position",type:"vec3"},{name:"pointSize",type:"float"},{name:"id",type:"vec4"}]},l.contourShader={vertex:v,fragment:x,attributes:[{name:"position",type:"vec3"}]}},7201(s,l,n){"use strict";var u=1e-6,c=1e-6,f=n(9405),h=n(2762),d=n(8116),p=n(7766),g=n(8406),m=n(6760),y=n(7608),_=n(9618),v=n(6729),x=n(7765),S=n(1888),M=n(840),C=n(7626),w=M.meshShader,k=M.wireShader,A=M.pointShader,b=M.pickShader,E=M.pointPickShader,T=M.contourShader,F=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function D(J,N,H,$,U,V,j,q,Y,K,te,ne,se,le,ce,pe,xe,ye,fe,ae,ee,ie,Q,ue,ge,Me,Te){this.gl=J,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=N,this.dirty=!0,this.triShader=H,this.lineShader=$,this.pointShader=U,this.pickShader=V,this.pointPickShader=j,this.contourShader=q,this.trianglePositions=Y,this.triangleColors=te,this.triangleNormals=se,this.triangleUVs=ne,this.triangleIds=K,this.triangleVAO=le,this.triangleCount=0,this.lineWidth=1,this.edgePositions=ce,this.edgeColors=xe,this.edgeUVs=ye,this.edgeIds=pe,this.edgeVAO=fe,this.edgeCount=0,this.pointPositions=ae,this.pointColors=ie,this.pointUVs=Q,this.pointSizes=ue,this.pointIds=ee,this.pointVAO=ge,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=Me,this.contourVAO=Te,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=F,this._view=F,this._projection=F,this._resolution=[1,1]}var R=D.prototype;R.isOpaque=function(){return!this.hasAlpha},R.isTransparent=function(){return this.hasAlpha},R.pickSlots=1,R.setPickBase=function(J){this.pickId=J};function P(J,N){if(!N||!N.length)return 1;for(var H=0;H<N.length;++H){if(N.length<2)return 1;if(N[H][0]===J)return N[H][1];if(N[H][0]>J&&H>0){var $=(N[H][0]-J)/(N[H][0]-N[H-1][0]);return N[H][1]*(1-$)+$*N[H-1][1]}}return 1}function z(J,N){for(var H=v({colormap:J,nshades:256,format:"rgba"}),$=new Uint8Array(256*4),U=0;U<256;++U){for(var V=H[U],j=0;j<3;++j)$[4*U+j]=V[j];N?$[4*U+3]=255*P(U/255,N):$[4*U+3]=255*V[3]}return _($,[256,256,4],[4,0,1])}function I(J){for(var N=J.length,H=new Array(N),$=0;$<N;++$)H[$]=J[$][2];return H}R.highlight=function(J){if(!J||!this.contourEnable){this.contourCount=0;return}for(var N=x(this.cells,this.intensity,J.intensity),H=N.cells,$=N.vertexIds,U=N.vertexWeights,V=H.length,j=S.mallocFloat32(6*V),q=0,Y=0;Y<V;++Y)for(var K=H[Y],te=0;te<2;++te){var ne=K[0];K.length===2&&(ne=K[te]);for(var se=$[ne][0],le=$[ne][1],ce=U[ne],pe=1-ce,xe=this.positions[se],ye=this.positions[le],fe=0;fe<3;++fe)j[q++]=ce*xe[fe]+pe*ye[fe]}this.contourCount=q/3|0,this.contourPositions.update(j.subarray(0,q)),S.free(j)},R.update=function(J){J=J||{};var N=this.gl;this.dirty=!0,"contourEnable"in J&&(this.contourEnable=J.contourEnable),"contourColor"in J&&(this.contourColor=J.contourColor),"lineWidth"in J&&(this.lineWidth=J.lineWidth),"lightPosition"in J&&(this.lightPosition=J.lightPosition),this.hasAlpha=!1,"opacity"in J&&(this.opacity=J.opacity,this.opacity<1&&(this.hasAlpha=!0)),"opacityscale"in J&&(this.opacityscale=J.opacityscale,this.hasAlpha=!0),"ambient"in J&&(this.ambientLight=J.ambient),"diffuse"in J&&(this.diffuseLight=J.diffuse),"specular"in J&&(this.specularLight=J.specular),"roughness"in J&&(this.roughness=J.roughness),"fresnel"in J&&(this.fresnel=J.fresnel),J.texture?(this.texture.dispose(),this.texture=p(N,J.texture)):J.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=N.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=N.LINEAR,this.texture.setPixels(z(J.colormap,this.opacityscale)),this.texture.generateMipmap());var H=J.cells,$=J.positions;if(!(!$||!H)){var U=[],V=[],j=[],q=[],Y=[],K=[],te=[],ne=[],se=[],le=[],ce=[],pe=[],xe=[],ye=[];this.cells=H,this.positions=$;var fe=J.vertexNormals,ae=J.cellNormals,ee=J.vertexNormalsEpsilon===void 0?u:J.vertexNormalsEpsilon,ie=J.faceNormalsEpsilon===void 0?c:J.faceNormalsEpsilon;J.useFacetNormals&&!ae&&(ae=g.faceNormals(H,$,ie)),!ae&&!fe&&(fe=g.vertexNormals(H,$,ee));var Q=J.vertexColors,ue=J.cellColors,ge=J.meshColor||[1,1,1,1],Me=J.vertexUVs,Te=J.vertexIntensity,je=J.cellUVs,Ve=J.cellIntensity,Ze=1/0,Ke=-1/0;if(!Me&&!je)if(Te)if(J.vertexIntensityBounds)Ze=+J.vertexIntensityBounds[0],Ke=+J.vertexIntensityBounds[1];else for(var vt=0;vt<Te.length;++vt){var xt=Te[vt];Ze=Math.min(Ze,xt),Ke=Math.max(Ke,xt)}else if(Ve)if(J.cellIntensityBounds)Ze=+J.cellIntensityBounds[0],Ke=+J.cellIntensityBounds[1];else for(var vt=0;vt<Ve.length;++vt){var xt=Ve[vt];Ze=Math.min(Ze,xt),Ke=Math.max(Ke,xt)}else for(var vt=0;vt<$.length;++vt){var xt=$[vt][2];Ze=Math.min(Ze,xt),Ke=Math.max(Ke,xt)}Te?this.intensity=Te:Ve?this.intensity=Ve:this.intensity=I($),this.pickVertex=!(Ve||ue);var Pt=J.pointSizes,mt=J.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(var vt=0;vt<$.length;++vt)for(var Mt=$[vt],lt=0;lt<3;++lt)isNaN(Mt[lt])||!isFinite(Mt[lt])||(this.bounds[0][lt]=Math.min(this.bounds[0][lt],Mt[lt]),this.bounds[1][lt]=Math.max(this.bounds[1][lt],Mt[lt]));var qe=0,Ye=0,me=0;e:for(var vt=0;vt<H.length;++vt){var _e=H[vt];switch(_e.length){case 1:for(var Ae=_e[0],Mt=$[Ae],lt=0;lt<3;++lt)if(isNaN(Mt[lt])||!isFinite(Mt[lt]))continue e;le.push(Mt[0],Mt[1],Mt[2]);var ke;Q?ke=Q[Ae]:ue?ke=ue[vt]:ke=ge,this.opacityscale&&Te?V.push(ke[0],ke[1],ke[2],this.opacity*P((Te[Ae]-Ze)/(Ke-Ze),this.opacityscale)):ke.length===3?ce.push(ke[0],ke[1],ke[2],this.opacity):(ce.push(ke[0],ke[1],ke[2],ke[3]*this.opacity),ke[3]<1&&(this.hasAlpha=!0));var Ee;Me?Ee=Me[Ae]:Te?Ee=[(Te[Ae]-Ze)/(Ke-Ze),0]:je?Ee=je[vt]:Ve?Ee=[(Ve[vt]-Ze)/(Ke-Ze),0]:Ee=[(Mt[2]-Ze)/(Ke-Ze),0],pe.push(Ee[0],Ee[1]),Pt?xe.push(Pt[Ae]):xe.push(mt),ye.push(vt),me+=1;break;case 2:for(var lt=0;lt<2;++lt)for(var Ae=_e[lt],Mt=$[Ae],De=0;De<3;++De)if(isNaN(Mt[De])||!isFinite(Mt[De]))continue e;for(var lt=0;lt<2;++lt){var Ae=_e[lt],Mt=$[Ae];K.push(Mt[0],Mt[1],Mt[2]);var ke;Q?ke=Q[Ae]:ue?ke=ue[vt]:ke=ge,this.opacityscale&&Te?V.push(ke[0],ke[1],ke[2],this.opacity*P((Te[Ae]-Ze)/(Ke-Ze),this.opacityscale)):ke.length===3?te.push(ke[0],ke[1],ke[2],this.opacity):(te.push(ke[0],ke[1],ke[2],ke[3]*this.opacity),ke[3]<1&&(this.hasAlpha=!0));var Ee;Me?Ee=Me[Ae]:Te?Ee=[(Te[Ae]-Ze)/(Ke-Ze),0]:je?Ee=je[vt]:Ve?Ee=[(Ve[vt]-Ze)/(Ke-Ze),0]:Ee=[(Mt[2]-Ze)/(Ke-Ze),0],ne.push(Ee[0],Ee[1]),se.push(vt)}Ye+=1;break;case 3:for(var lt=0;lt<3;++lt)for(var Ae=_e[lt],Mt=$[Ae],De=0;De<3;++De)if(isNaN(Mt[De])||!isFinite(Mt[De]))continue e;for(var lt=0;lt<3;++lt){var Ae=_e[2-lt],Mt=$[Ae];U.push(Mt[0],Mt[1],Mt[2]);var ke;Q?ke=Q[Ae]:ue?ke=ue[vt]:ke=ge,ke?this.opacityscale&&Te?V.push(ke[0],ke[1],ke[2],this.opacity*P((Te[Ae]-Ze)/(Ke-Ze),this.opacityscale)):ke.length===3?V.push(ke[0],ke[1],ke[2],this.opacity):(V.push(ke[0],ke[1],ke[2],ke[3]*this.opacity),ke[3]<1&&(this.hasAlpha=!0)):V.push(.5,.5,.5,1);var Ee;Me?Ee=Me[Ae]:Te?Ee=[(Te[Ae]-Ze)/(Ke-Ze),0]:je?Ee=je[vt]:Ve?Ee=[(Ve[vt]-Ze)/(Ke-Ze),0]:Ee=[(Mt[2]-Ze)/(Ke-Ze),0],q.push(Ee[0],Ee[1]);var Je;fe?Je=fe[Ae]:Je=ae[vt],j.push(Je[0],Je[1],Je[2]),Y.push(vt)}qe+=1;break;default:break}}this.pointCount=me,this.edgeCount=Ye,this.triangleCount=qe,this.pointPositions.update(le),this.pointColors.update(ce),this.pointUVs.update(pe),this.pointSizes.update(xe),this.pointIds.update(new Uint32Array(ye)),this.edgePositions.update(K),this.edgeColors.update(te),this.edgeUVs.update(ne),this.edgeIds.update(new Uint32Array(se)),this.trianglePositions.update(U),this.triangleColors.update(V),this.triangleUVs.update(q),this.triangleNormals.update(j),this.triangleIds.update(new Uint32Array(Y))}},R.drawTransparent=R.draw=function(J){J=J||{};for(var N=this.gl,H=J.model||F,$=J.view||F,U=J.projection||F,V=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],j=0;j<3;++j)V[0][j]=Math.max(V[0][j],this.clipBounds[0][j]),V[1][j]=Math.min(V[1][j],this.clipBounds[1][j]);var q={model:H,view:$,projection:U,inverseModel:F.slice(),clipBounds:V,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};q.inverseModel=y(q.inverseModel,q.model),N.disable(N.CULL_FACE),this.texture.bind(0);var Y=new Array(16);m(Y,q.view,q.model),m(Y,q.projection,Y),y(Y,Y);for(var j=0;j<3;++j)q.eyePosition[j]=Y[12+j]/Y[15];for(var K=Y[15],j=0;j<3;++j)K+=this.lightPosition[j]*Y[4*j+3];for(var j=0;j<3;++j){for(var te=Y[12+j],ne=0;ne<3;++ne)te+=Y[4*ne+j]*this.lightPosition[ne];q.lightPosition[j]=te/K}if(this.triangleCount>0){var se=this.triShader;se.bind(),se.uniforms=q,this.triangleVAO.bind(),N.drawArrays(N.TRIANGLES,0,this.triangleCount*3),this.triangleVAO.unbind()}if(this.edgeCount>0&&this.lineWidth>0){var se=this.lineShader;se.bind(),se.uniforms=q,this.edgeVAO.bind(),N.lineWidth(this.lineWidth*this.pixelRatio),N.drawArrays(N.LINES,0,this.edgeCount*2),this.edgeVAO.unbind()}if(this.pointCount>0){var se=this.pointShader;se.bind(),se.uniforms=q,this.pointVAO.bind(),N.drawArrays(N.POINTS,0,this.pointCount),this.pointVAO.unbind()}if(this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0){var se=this.contourShader;se.bind(),se.uniforms=q,this.contourVAO.bind(),N.drawArrays(N.LINES,0,this.contourCount),this.contourVAO.unbind()}},R.drawPick=function(J){J=J||{};for(var N=this.gl,H=J.model||F,$=J.view||F,U=J.projection||F,V=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],j=0;j<3;++j)V[0][j]=Math.max(V[0][j],this.clipBounds[0][j]),V[1][j]=Math.min(V[1][j],this.clipBounds[1][j]);this._model=[].slice.call(H),this._view=[].slice.call($),this._projection=[].slice.call(U),this._resolution=[N.drawingBufferWidth,N.drawingBufferHeight];var q={model:H,view:$,projection:U,clipBounds:V,pickId:this.pickId/255},Y=this.pickShader;if(Y.bind(),Y.uniforms=q,this.triangleCount>0&&(this.triangleVAO.bind(),N.drawArrays(N.TRIANGLES,0,this.triangleCount*3),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),N.lineWidth(this.lineWidth*this.pixelRatio),N.drawArrays(N.LINES,0,this.edgeCount*2),this.edgeVAO.unbind()),this.pointCount>0){var Y=this.pointPickShader;Y.bind(),Y.uniforms=q,this.pointVAO.bind(),N.drawArrays(N.POINTS,0,this.pointCount),this.pointVAO.unbind()}},R.pick=function(J){if(!J||J.id!==this.pickId)return null;for(var N=J.value[0]+256*J.value[1]+65536*J.value[2],H=this.cells[N],$=this.positions,U=new Array(H.length),V=0;V<H.length;++V)U[V]=$[H[V]];var j=J.coord[0],q=J.coord[1];if(!this.pickVertex){var Y=this.positions[H[0]],K=this.positions[H[1]],te=this.positions[H[2]],ne=[(Y[0]+K[0]+te[0])/3,(Y[1]+K[1]+te[1])/3,(Y[2]+K[2]+te[2])/3];return{_cellCenter:!0,position:[j,q],index:N,cell:H,cellId:N,intensity:this.intensity[N],dataCoordinate:ne}}var se=C(U,[j*this.pixelRatio,this._resolution[1]-q*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!se)return null;for(var le=se[2],ce=0,V=0;V<H.length;++V)ce+=le[V]*this.intensity[H[V]];return{position:se[1],index:H[se[0]],cell:H,cellId:N,intensity:ce,dataCoordinate:this.positions[H[se[0]]]}},R.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()};function L(J){var N=f(J,w.vertex,w.fragment);return N.attributes.position.location=0,N.attributes.color.location=2,N.attributes.uv.location=3,N.attributes.normal.location=4,N}function B(J){var N=f(J,k.vertex,k.fragment);return N.attributes.position.location=0,N.attributes.color.location=2,N.attributes.uv.location=3,N}function O(J){var N=f(J,A.vertex,A.fragment);return N.attributes.position.location=0,N.attributes.color.location=2,N.attributes.uv.location=3,N.attributes.pointSize.location=4,N}function G(J){var N=f(J,b.vertex,b.fragment);return N.attributes.position.location=0,N.attributes.id.location=1,N}function W(J){var N=f(J,E.vertex,E.fragment);return N.attributes.position.location=0,N.attributes.id.location=1,N.attributes.pointSize.location=4,N}function X(J){var N=f(J,T.vertex,T.fragment);return N.attributes.position.location=0,N}function Z(J,N){arguments.length===1&&(N=J,J=N.gl);var H=J.getExtension("OES_standard_derivatives")||J.getExtension("MOZ_OES_standard_derivatives")||J.getExtension("WEBKIT_OES_standard_derivatives");if(!H)throw new Error("derivatives not supported");var $=L(J),U=B(J),V=O(J),j=G(J),q=W(J),Y=X(J),K=p(J,_(new Uint8Array([255,255,255,255]),[1,1,4]));K.generateMipmap(),K.minFilter=J.LINEAR_MIPMAP_LINEAR,K.magFilter=J.LINEAR;var te=h(J),ne=h(J),se=h(J),le=h(J),ce=h(J),pe=d(J,[{buffer:te,type:J.FLOAT,size:3},{buffer:ce,type:J.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:ne,type:J.FLOAT,size:4},{buffer:se,type:J.FLOAT,size:2},{buffer:le,type:J.FLOAT,size:3}]),xe=h(J),ye=h(J),fe=h(J),ae=h(J),ee=d(J,[{buffer:xe,type:J.FLOAT,size:3},{buffer:ae,type:J.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:ye,type:J.FLOAT,size:4},{buffer:fe,type:J.FLOAT,size:2}]),ie=h(J),Q=h(J),ue=h(J),ge=h(J),Me=h(J),Te=d(J,[{buffer:ie,type:J.FLOAT,size:3},{buffer:Me,type:J.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:Q,type:J.FLOAT,size:4},{buffer:ue,type:J.FLOAT,size:2},{buffer:ge,type:J.FLOAT,size:1}]),je=h(J),Ve=d(J,[{buffer:je,type:J.FLOAT,size:3}]),Ze=new D(J,K,$,U,V,j,q,Y,te,ce,ne,se,le,pe,xe,ae,ye,fe,ee,ie,Me,Q,ue,ge,Te,je,Ve);return Ze.update(N),Ze}s.exports=Z},4437(s,l,n){"use strict";s.exports=g;var u=n(3025),c=n(6296),f=n(351),h=n(8512),d=n(24),p=n(7520);function g(m,y){m=m||document.body,y=y||{};var _=[.01,1/0];"distanceLimits"in y&&(_[0]=y.distanceLimits[0],_[1]=y.distanceLimits[1]),"zoomMin"in y&&(_[0]=y.zoomMin),"zoomMax"in y&&(_[1]=y.zoomMax);var v=c({center:y.center||[0,0,0],up:y.up||[0,1,0],eye:y.eye||[0,0,10],mode:y.mode||"orbit",distanceLimits:_}),x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],S=0,M=m.clientWidth,C=m.clientHeight,w={keyBindingMode:"rotate",enableWheel:!0,view:v,element:m,delay:y.delay||16,rotateSpeed:y.rotateSpeed||1,zoomSpeed:y.zoomSpeed||1,translateSpeed:y.translateSpeed||1,flipX:!!y.flipX,flipY:!!y.flipY,modes:v.modes,_ortho:y._ortho||y.projection&&y.projection.type==="orthographic"||!1,tick:function(){var k=u(),A=this.delay,b=k-2*A;v.idle(k-A),v.recalcMatrix(b),v.flush(k-(100+A*2));for(var E=!0,T=v.computedMatrix,F=0;F<16;++F)E=E&&x[F]===T[F],x[F]=T[F];var D=m.clientWidth===M&&m.clientHeight===C;return M=m.clientWidth,C=m.clientHeight,E?!D:(S=Math.exp(v.computedRadius[0]),!0)},lookAt:function(k,A,b){v.lookAt(v.lastT(),k,A,b)},rotate:function(k,A,b){v.rotate(v.lastT(),k,A,b)},pan:function(k,A,b){v.pan(v.lastT(),k,A,b)},translate:function(k,A,b){v.translate(v.lastT(),k,A,b)}};return Object.defineProperties(w,{matrix:{get:function(){return v.computedMatrix},set:function(k){return v.setMatrix(v.lastT(),k),v.computedMatrix},enumerable:!0},mode:{get:function(){return v.getMode()},set:function(k){var A=v.computedUp.slice(),b=v.computedEye.slice(),E=v.computedCenter.slice();if(v.setMode(k),k==="turntable"){var T=u();v._active.lookAt(T,b,E,A),v._active.lookAt(T+500,b,E,[0,0,1]),v._active.flush(T)}return v.getMode()},enumerable:!0},center:{get:function(){return v.computedCenter},set:function(k){return v.lookAt(v.lastT(),null,k),v.computedCenter},enumerable:!0},eye:{get:function(){return v.computedEye},set:function(k){return v.lookAt(v.lastT(),k),v.computedEye},enumerable:!0},up:{get:function(){return v.computedUp},set:function(k){return v.lookAt(v.lastT(),null,null,k),v.computedUp},enumerable:!0},distance:{get:function(){return S},set:function(k){return v.setDistance(v.lastT(),k),k},enumerable:!0},distanceLimits:{get:function(){return v.getDistanceLimits(_)},set:function(k){return v.setDistanceLimits(k),k},enumerable:!0}}),m.addEventListener("contextmenu",function(k){return k.preventDefault(),!1}),w._lastX=-1,w._lastY=-1,w._lastMods={shift:!1,control:!1,alt:!1,meta:!1},w.enableMouseListeners=function(){w.mouseListener=f(m,k),m.addEventListener("touchstart",function(A){var b=d(A.changedTouches[0],m);k(0,b[0],b[1],w._lastMods),k(1,b[0],b[1],w._lastMods)},p?{passive:!0}:!1),m.addEventListener("touchmove",function(A){var b=d(A.changedTouches[0],m);k(1,b[0],b[1],w._lastMods),A.preventDefault()},p?{passive:!1}:!1),m.addEventListener("touchend",function(A){k(0,w._lastX,w._lastY,w._lastMods)},p?{passive:!0}:!1);function k(A,b,E,T){var F=w.keyBindingMode;if(F!==!1){var D=F==="rotate",R=F==="pan",P=F==="zoom",z=!!T.control,I=!!T.alt,L=!!T.shift,B=!!(A&1),O=!!(A&2),G=!!(A&4),W=1/m.clientHeight,X=W*(b-w._lastX),Z=W*(E-w._lastY),J=w.flipX?1:-1,N=w.flipY?1:-1,H=Math.PI*w.rotateSpeed,$=u();if(w._lastX!==-1&&w._lastY!==-1&&((D&&B&&!z&&!I&&!L||B&&!z&&!I&&L)&&v.rotate($,J*H*X,-N*H*Z,0),(R&&B&&!z&&!I&&!L||O||B&&z&&!I&&!L)&&v.pan($,-w.translateSpeed*X*S,w.translateSpeed*Z*S,0),P&&B&&!z&&!I&&!L||G||B&&!z&&I&&!L)){var U=-w.zoomSpeed*Z/window.innerHeight*($-v.lastT())*100;v.pan($,0,0,S*(Math.exp(U)-1))}return w._lastX=b,w._lastY=E,w._lastMods=T,!0}}w.wheelListener=h(m,function(A,b){if(w.keyBindingMode!==!1&&w.enableWheel){var E=w.flipX?1:-1,T=w.flipY?1:-1,F=u();if(Math.abs(A)>Math.abs(b))v.rotate(F,0,0,-A*E*Math.PI*w.rotateSpeed/window.innerWidth);else if(!w._ortho){var D=-w.zoomSpeed*T*b/window.innerHeight*(F-v.lastT())/20;v.pan(F,0,0,S*(Math.exp(D)-1))}}},!0)},w.enableMouseListeners(),w}},799(s,l,n){var u=n(3236),c=n(9405),f=u([`precision mediump float;
+#define GLSLIFY 1
+attribute vec2 position;
+varying vec2 uv;
+void main() {
+  uv = position;
+  gl_Position = vec4(position, 0, 1);
+}`]),h=u([`precision mediump float;
+#define GLSLIFY 1
+
+uniform sampler2D accumBuffer;
+varying vec2 uv;
+
+void main() {
+  vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));
+  gl_FragColor = min(vec4(1,1,1,1), accum);
+}`]);s.exports=function(d){return c(d,f,h,null,[{name:"position",type:"vec2"}])}},4100(s,l,n){"use strict";var u=n(4437),c=n(3837),f=n(5445),h=n(4449),d=n(3589),p=n(2260),g=n(7169),m=n(351),y=n(4772),_=n(4040),v=n(799),x=n(2431)({tablet:!0,featureDetect:!0});s.exports={createScene:k,createCamera:u};function S(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function M(b,E){var T=null;try{T=b.getContext("webgl",E),T||(T=b.getContext("experimental-webgl",E))}catch{return null}return T}function C(b){var E=Math.round(Math.log(Math.abs(b))/Math.log(10));if(E<0){var T=Math.round(Math.pow(10,-E));return Math.ceil(b*T)/T}else if(E>0){var T=Math.round(Math.pow(10,E));return Math.ceil(b/T)*T}return Math.ceil(b)}function w(b){return typeof b=="boolean"?b:!0}function k(b){b=b||{},b.camera=b.camera||{};var E=b.canvas;if(!E)if(E=document.createElement("canvas"),b.container){var T=b.container;T.appendChild(E)}else document.body.appendChild(E);var F=b.gl;if(F||(b.glOptions&&(x=!!b.glOptions.preserveDrawingBuffer),F=M(E,b.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:x})),!F)throw new Error("webgl not supported");var D=b.bounds||[[-10,-10,-10],[10,10,10]],R=new S,P=p(F,F.drawingBufferWidth,F.drawingBufferHeight,{preferFloat:!x}),z=v(F),I=b.cameraObject&&b.cameraObject._ortho===!0||b.camera.projection&&b.camera.projection.type==="orthographic"||!1,L={eye:b.camera.eye||[2,0,0],center:b.camera.center||[0,0,0],up:b.camera.up||[0,1,0],zoomMin:b.camera.zoomMax||.1,zoomMax:b.camera.zoomMin||100,mode:b.camera.mode||"turntable",_ortho:I},B=b.axes||{},O=c(F,B);O.enable=!B.disable;var G=b.spikes||{},W=h(F,G),X=[],Z=[],J=[],N=[],H=!0,j=!0,$=new Array(16),U=new Array(16),V={view:null,projection:$,model:U,_ortho:!1},j=!0,q=[F.drawingBufferWidth,F.drawingBufferHeight],Y=b.cameraObject||u(E,L),K={gl:F,contextLost:!1,pixelRatio:b.pixelRatio||1,canvas:E,selection:R,camera:Y,axes:O,axesPixels:null,spikes:W,bounds:D,objects:X,shape:q,aspect:b.aspectRatio||[1,1,1],pickRadius:b.pickRadius||10,zNear:b.zNear||.01,zFar:b.zFar||1e3,fovy:b.fovy||Math.PI/4,clearColor:b.clearColor||[0,0,0,0],autoResize:w(b.autoResize),autoBounds:w(b.autoBounds),autoScale:!!b.autoScale,autoCenter:w(b.autoCenter),clipToBounds:w(b.clipToBounds),snapToData:!!b.snapToData,onselect:b.onselect||null,onrender:b.onrender||null,onclick:b.onclick||null,cameraParams:V,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(ae){this.aspect[0]=ae.x,this.aspect[1]=ae.y,this.aspect[2]=ae.z,j=!0},setBounds:function(ae,ee){this.bounds[0][ae]=ee.min,this.bounds[1][ae]=ee.max},setClearColor:function(ae){this.clearColor=ae},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},te=[F.drawingBufferWidth/K.pixelRatio|0,F.drawingBufferHeight/K.pixelRatio|0];function ne(){if(!K._stopped&&K.autoResize){var ae=E.parentNode,ee=1,ie=1;ae&&ae!==document.body?(ee=ae.clientWidth,ie=ae.clientHeight):(ee=window.innerWidth,ie=window.innerHeight);var Q=Math.ceil(ee*K.pixelRatio)|0,ue=Math.ceil(ie*K.pixelRatio)|0;if(Q!==E.width||ue!==E.height){E.width=Q,E.height=ue;var ge=E.style;ge.position=ge.position||"absolute",ge.left="0px",ge.top="0px",ge.width=ee+"px",ge.height=ie+"px",H=!0}}}K.autoResize&&ne(),window.addEventListener("resize",ne);function se(){for(var ae=X.length,ee=N.length,ie=0;ie<ee;++ie)J[ie]=0;e:for(var ie=0;ie<ae;++ie){var Q=X[ie],ue=Q.pickSlots;if(!ue){Z[ie]=-1;continue}for(var ge=0;ge<ee;++ge)if(J[ge]+ue<255){Z[ie]=ge,Q.setPickBase(J[ge]+1),J[ge]+=ue;continue e}var Me=d(F,q);Z[ie]=ee,N.push(Me),J.push(ue),Q.setPickBase(1),ee+=1}for(;ee>0&&J[ee-1]===0;)J.pop(),N.pop().dispose()}K.update=function(ae){K._stopped||(ae=ae||{},H=!0,j=!0)},K.add=function(ae){K._stopped||(ae.axes=O,X.push(ae),Z.push(-1),H=!0,j=!0,se())},K.remove=function(ae){if(!K._stopped){var ee=X.indexOf(ae);ee<0||(X.splice(ee,1),Z.pop(),H=!0,j=!0,se())}},K.dispose=function(){if(!K._stopped&&(K._stopped=!0,window.removeEventListener("resize",ne),E.removeEventListener("webglcontextlost",le),K.mouseListener.enabled=!1,!K.contextLost)){O.dispose(),W.dispose();for(var ae=0;ae<X.length;++ae)X[ae].dispose();P.dispose();for(var ae=0;ae<N.length;++ae)N[ae].dispose();z.dispose(),F=null,O=null,W=null,X=[]}},K._mouseRotating=!1,K._prevButtons=0,K.enableMouseListeners=function(){K.mouseListener=m(E,function(ae,ee,ie){if(!K._stopped){var Q=N.length,ue=X.length,ge=R.object;R.distance=1/0,R.mouse[0]=ee,R.mouse[1]=ie,R.object=null,R.screen=null,R.dataCoordinate=R.dataPosition=null;var Me=!1;if(ae&&K._prevButtons)K._mouseRotating=!0;else{K._mouseRotating&&(j=!0),K._mouseRotating=!1;for(var Te=0;Te<Q;++Te){var je=N[Te].query(ee,te[1]-ie-1,K.pickRadius);if(je){if(je.distance>R.distance)continue;for(var Ve=0;Ve<ue;++Ve){var Ze=X[Ve];if(Z[Ve]===Te){var Ke=Ze.pick(je);Ke&&(R.buttons=ae,R.screen=je.coord,R.distance=je.distance,R.object=Ze,R.index=Ke.distance,R.dataPosition=Ke.position,R.dataCoordinate=Ke.dataCoordinate,R.data=Ke,Me=!0)}}}}}ge&&ge!==R.object&&(ge.highlight&&ge.highlight(null),H=!0),R.object&&(R.object.highlight&&R.object.highlight(R.data),H=!0),Me=Me||R.object!==ge,Me&&K.onselect&&K.onselect(R),ae&1&&!(K._prevButtons&1)&&K.onclick&&K.onclick(R),K._prevButtons=ae}})};function le(){if(K.contextLost)return!0;F.isContextLost()&&(K.contextLost=!0,K.mouseListener.enabled=!1,K.selection.object=null,K.oncontextloss&&K.oncontextloss())}E.addEventListener("webglcontextlost",le);function ce(){if(!le()){F.colorMask(!0,!0,!0,!0),F.depthMask(!0),F.disable(F.BLEND),F.enable(F.DEPTH_TEST),F.depthFunc(F.LEQUAL);for(var ae=X.length,ee=N.length,ie=0;ie<ee;++ie){var Q=N[ie];Q.shape=te,Q.begin();for(var ue=0;ue<ae;++ue)if(Z[ue]===ie){var ge=X[ue];ge.drawPick&&(ge.pixelRatio=1,ge.drawPick(V))}Q.end()}}}var pe=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],xe=[pe[0].slice(),pe[1].slice()];function ye(){if(!le()){ne();var ae=K.camera.tick();V.view=K.camera.matrix,H=H||ae,j=j||ae,O.pixelRatio=K.pixelRatio,W.pixelRatio=K.pixelRatio;var ee=X.length,ie=pe[0],Q=pe[1];ie[0]=ie[1]=ie[2]=1/0,Q[0]=Q[1]=Q[2]=-1/0;for(var ue=0;ue<ee;++ue){var ge=X[ue];ge.pixelRatio=K.pixelRatio,ge.axes=K.axes,H=H||!!ge.dirty,j=j||!!ge.dirty;var Me=ge.bounds;if(Me)for(var Te=Me[0],je=Me[1],Ve=0;Ve<3;++Ve)ie[Ve]=Math.min(ie[Ve],Te[Ve]),Q[Ve]=Math.max(Q[Ve],je[Ve])}var Ze=K.bounds;if(K.autoBounds)for(var Ve=0;Ve<3;++Ve){if(Q[Ve]<ie[Ve])ie[Ve]=-1,Q[Ve]=1;else{ie[Ve]===Q[Ve]&&(ie[Ve]-=1,Q[Ve]+=1);var Ke=.05*(Q[Ve]-ie[Ve]);ie[Ve]=ie[Ve]-Ke,Q[Ve]=Q[Ve]+Ke}Ze[0][Ve]=ie[Ve],Ze[1][Ve]=Q[Ve]}for(var vt=!1,Ve=0;Ve<3;++Ve)vt=vt||xe[0][Ve]!==Ze[0][Ve]||xe[1][Ve]!==Ze[1][Ve],xe[0][Ve]=Ze[0][Ve],xe[1][Ve]=Ze[1][Ve];if(j=j||vt,H=H||vt,!!H){if(vt){for(var xt=[0,0,0],ue=0;ue<3;++ue)xt[ue]=C((Ze[1][ue]-Ze[0][ue])/10);O.autoTicks?O.update({bounds:Ze,tickSpacing:xt}):O.update({bounds:Ze})}var Pt=F.drawingBufferWidth,mt=F.drawingBufferHeight;q[0]=Pt,q[1]=mt,te[0]=Math.max(Pt/K.pixelRatio,1)|0,te[1]=Math.max(mt/K.pixelRatio,1)|0,A(K,I);for(var ue=0;ue<ee;++ue){var ge=X[ue];ge.axesBounds=Ze,K.clipToBounds&&(ge.clipBounds=Ze)}R.object&&(K.snapToData?W.position=R.dataCoordinate:W.position=R.dataPosition,W.bounds=Ze),j&&(j=!1,ce()),K.axesPixels=f(K.axes,V,Pt,mt),K.onrender&&K.onrender(),F.bindFramebuffer(F.FRAMEBUFFER,null),F.viewport(0,0,Pt,mt),K.clearRGBA(),F.depthMask(!0),F.colorMask(!0,!0,!0,!0),F.enable(F.DEPTH_TEST),F.depthFunc(F.LEQUAL),F.disable(F.BLEND),F.disable(F.CULL_FACE);var Mt=!1;O.enable&&(Mt=Mt||O.isTransparent(),O.draw(V)),W.axes=O,R.object&&W.draw(V),F.disable(F.CULL_FACE);for(var ue=0;ue<ee;++ue){var ge=X[ue];ge.axes=O,ge.pixelRatio=K.pixelRatio,ge.isOpaque&&ge.isOpaque()&&ge.draw(V),ge.isTransparent&&ge.isTransparent()&&(Mt=!0)}if(Mt){P.shape=q,P.bind(),F.clear(F.DEPTH_BUFFER_BIT),F.colorMask(!1,!1,!1,!1),F.depthMask(!0),F.depthFunc(F.LESS),O.enable&&O.isTransparent()&&O.drawTransparent(V);for(var ue=0;ue<ee;++ue){var ge=X[ue];ge.isOpaque&&ge.isOpaque()&&ge.draw(V)}F.enable(F.BLEND),F.blendEquation(F.FUNC_ADD),F.blendFunc(F.ONE,F.ONE_MINUS_SRC_ALPHA),F.colorMask(!0,!0,!0,!0),F.depthMask(!1),F.clearColor(0,0,0,0),F.clear(F.COLOR_BUFFER_BIT),O.isTransparent()&&O.drawTransparent(V);for(var ue=0;ue<ee;++ue){var ge=X[ue];ge.isTransparent&&ge.isTransparent()&&ge.drawTransparent(V)}F.bindFramebuffer(F.FRAMEBUFFER,null),F.blendFunc(F.ONE,F.ONE_MINUS_SRC_ALPHA),F.disable(F.DEPTH_TEST),z.bind(),P.color[0].bind(0),z.uniforms.accumBuffer=0,g(F),F.disable(F.BLEND)}H=!1;for(var ue=0;ue<ee;++ue)X[ue].dirty=!1}}}function fe(){K._stopped||K.contextLost||(ye(),requestAnimationFrame(fe))}return K.enableMouseListeners(),fe(),K.redraw=function(){K._stopped||(H=!0,ye())},K}function A(b,E){var T=b.bounds,F=b.cameraParams,D=F.projection,R=F.model,P=b.gl.drawingBufferWidth,z=b.gl.drawingBufferHeight,I=b.zNear,L=b.zFar,B=b.fovy,O=P/z;E?(_(D,-O,O,-1,1,I,L),F._ortho=!0):(y(D,B,O,I,L),F._ortho=!1);for(var G=0;G<16;++G)R[G]=0;R[15]=1;for(var W=0,G=0;G<3;++G)W=Math.max(W,T[1][G]-T[0][G]);for(var G=0;G<3;++G)b.autoScale?R[5*G]=b.aspect[G]/(T[1][G]-T[0][G]):R[5*G]=1/W,b.autoCenter&&(R[12+G]=-R[5*G]*.5*(T[0][G]+T[1][G]))}},783(s){s.exports=l;function l(n,u,c,f){var h=u[0],d=u[1],p=u[2],g=u[3],m=c[0],y=c[1],_=c[2],v=c[3],x,S,M,C,w;return S=h*m+d*y+p*_+g*v,S<0&&(S=-S,m=-m,y=-y,_=-_,v=-v),1-S>1e-6?(x=Math.acos(S),M=Math.sin(x),C=Math.sin((1-f)*x)/M,w=Math.sin(f*x)/M):(C=1-f,w=f),n[0]=C*h+w*m,n[1]=C*d+w*y,n[2]=C*p+w*_,n[3]=C*g+w*v,n}},5964(s){"use strict";s.exports=function(l){return!l&&l!==0?"":l.toString()}},9366(s,l,n){"use strict";var u=n(4359);s.exports=f;var c={};function f(h,d,p){var g=[d.style,d.weight,d.variant,d.family].join("_"),m=c[g];if(m||(m=c[g]={}),h in m)return m[h];var y={textAlign:"center",textBaseline:"middle",lineHeight:1,font:d.family,fontStyle:d.style,fontWeight:d.weight,fontVariant:d.variant,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}};y.triangles=!0;var _=u(h,y);y.triangles=!1;var v=u(h,y),x,S;if(p&&p!==1){for(x=0;x<_.positions.length;++x)for(S=0;S<_.positions[x].length;++S)_.positions[x][S]/=p;for(x=0;x<v.positions.length;++x)for(S=0;S<v.positions[x].length;++S)v.positions[x][S]/=p}var M=[[1/0,1/0],[-1/0,-1/0]],C=v.positions.length;for(x=0;x<C;++x){var w=v.positions[x];for(S=0;S<2;++S)M[0][S]=Math.min(M[0][S],w[S]),M[1][S]=Math.max(M[1][S],w[S])}return m[h]=[_,v,M]}},1283(s,l,n){var u=n(9405),c=n(3236),f=c([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+attribute vec3 position;
+attribute vec4 color;
+attribute vec2 glyph;
+attribute vec4 id;
+
+uniform vec4 highlightId;
+uniform float highlightScale;
+uniform mat4 model, view, projection;
+uniform vec3 clipBounds[2];
+
+varying vec4 interpColor;
+varying vec4 pickId;
+varying vec3 dataCoordinate;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], position)) {
+
+    gl_Position = vec4(0,0,0,0);
+  } else {
+    float scale = 1.0;
+    if(distance(highlightId, id) < 0.0001) {
+      scale = highlightScale;
+    }
+
+    vec4 worldPosition = model * vec4(position, 1);
+    vec4 viewPosition = view * worldPosition;
+    viewPosition = viewPosition / viewPosition.w;
+    vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));
+
+    gl_Position = clipPosition;
+    interpColor = color;
+    pickId = id;
+    dataCoordinate = position;
+  }
+}`]),h=c([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+attribute vec3 position;
+attribute vec4 color;
+attribute vec2 glyph;
+attribute vec4 id;
+
+uniform mat4 model, view, projection;
+uniform vec2 screenSize;
+uniform vec3 clipBounds[2];
+uniform float highlightScale, pixelRatio;
+uniform vec4 highlightId;
+
+varying vec4 interpColor;
+varying vec4 pickId;
+varying vec3 dataCoordinate;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], position)) {
+
+    gl_Position = vec4(0,0,0,0);
+  } else {
+    float scale = pixelRatio;
+    if(distance(highlightId.bgr, id.bgr) < 0.001) {
+      scale *= highlightScale;
+    }
+
+    vec4 worldPosition = model * vec4(position, 1.0);
+    vec4 viewPosition = view * worldPosition;
+    vec4 clipPosition = projection * viewPosition;
+    clipPosition /= clipPosition.w;
+
+    gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);
+    interpColor = color;
+    pickId = id;
+    dataCoordinate = position;
+  }
+}`]),d=c([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+attribute vec3 position;
+attribute vec4 color;
+attribute vec2 glyph;
+attribute vec4 id;
+
+uniform float highlightScale;
+uniform vec4 highlightId;
+uniform vec3 axes[2];
+uniform mat4 model, view, projection;
+uniform vec2 screenSize;
+uniform vec3 clipBounds[2];
+uniform float scale, pixelRatio;
+
+varying vec4 interpColor;
+varying vec4 pickId;
+varying vec3 dataCoordinate;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], position)) {
+
+    gl_Position = vec4(0,0,0,0);
+  } else {
+    float lscale = pixelRatio * scale;
+    if(distance(highlightId, id) < 0.0001) {
+      lscale *= highlightScale;
+    }
+
+    vec4 clipCenter   = projection * (view * (model * vec4(position, 1)));
+    vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;
+    vec4 clipPosition = projection * (view * (model * vec4(dataPosition, 1)));
+
+    gl_Position = clipPosition;
+    interpColor = color;
+    pickId = id;
+    dataCoordinate = dataPosition;
+  }
+}
+`]),p=c([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 fragClipBounds[2];
+uniform float opacity;
+
+varying vec4 interpColor;
+varying vec3 dataCoordinate;
+
+void main() {
+  if (
+    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||
+    interpColor.a * opacity == 0.
+  ) discard;
+  gl_FragColor = interpColor * opacity;
+}
+`]),g=c([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 fragClipBounds[2];
+uniform float pickGroup;
+
+varying vec4 pickId;
+varying vec3 dataCoordinate;
+
+void main() {
+  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;
+
+  gl_FragColor = vec4(pickGroup, pickId.bgr);
+}`]),m=[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"glyph",type:"vec2"},{name:"id",type:"vec4"}],y={vertex:f,fragment:p,attributes:m},_={vertex:h,fragment:p,attributes:m},v={vertex:d,fragment:p,attributes:m},x={vertex:f,fragment:g,attributes:m},S={vertex:h,fragment:g,attributes:m},M={vertex:d,fragment:g,attributes:m};function C(w,k){var A=u(w,k),b=A.attributes;return b.position.location=0,b.color.location=1,b.glyph.location=2,b.id.location=3,A}l.createPerspective=function(w){return C(w,y)},l.createOrtho=function(w){return C(w,_)},l.createProject=function(w){return C(w,v)},l.createPickPerspective=function(w){return C(w,x)},l.createPickOrtho=function(w){return C(w,S)},l.createPickProject=function(w){return C(w,M)}},8418(s,l,n){"use strict";var u=n(5219),c=n(2762),f=n(8116),h=n(1888),d=n(6760),p=n(1283),g=n(9366),m=n(5964),y=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],_=ArrayBuffer,v=DataView;function x(U){return _.isView(U)&&!(U instanceof v)}function S(U){return Array.isArray(U)||x(U)}s.exports=$;function M(U,V){var j=U[0],q=U[1],Y=U[2],K=U[3];return U[0]=V[0]*j+V[4]*q+V[8]*Y+V[12]*K,U[1]=V[1]*j+V[5]*q+V[9]*Y+V[13]*K,U[2]=V[2]*j+V[6]*q+V[10]*Y+V[14]*K,U[3]=V[3]*j+V[7]*q+V[11]*Y+V[15]*K,U}function C(U,V,j,q){return M(q,q,j),M(q,q,V),M(q,q,U)}function w(U,V){this.index=U,this.dataCoordinate=this.position=V}function k(U){return U===!0||U>1?1:U}function A(U,V,j,q,Y,K,te,ne,se,le,ce,pe){this.gl=U,this.pixelRatio=1,this.shader=V,this.orthoShader=j,this.projectShader=q,this.pointBuffer=Y,this.colorBuffer=K,this.glyphBuffer=te,this.idBuffer=ne,this.vao=se,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[.6666666666666666,.6666666666666666,.6666666666666666],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=le,this.pickOrthoShader=ce,this.pickProjectShader=pe,this.points=[],this._selectResult=new w(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}var b=A.prototype;b.pickSlots=1,b.setPickBase=function(U){this.pickId=U},b.isTransparent=function(){if(this.hasAlpha)return!0;for(var U=0;U<3;++U)if(this.axesProject[U]&&this.projectHasAlpha)return!0;return!1},b.isOpaque=function(){if(!this.hasAlpha)return!0;for(var U=0;U<3;++U)if(this.axesProject[U]&&!this.projectHasAlpha)return!0;return!1};var E=[0,0],T=[0,0,0],F=[0,0,0],D=[0,0,0,1],R=[0,0,0,1],P=y.slice(),z=[0,0,0],I=[[0,0,0],[0,0,0]];function L(U){return U[0]=U[1]=U[2]=0,U}function B(U,V){return U[0]=V[0],U[1]=V[1],U[2]=V[2],U[3]=1,U}function O(U,V,j,q){return U[0]=V[0],U[1]=V[1],U[2]=V[2],U[j]=q,U}function G(U){for(var V=I,j=0;j<2;++j)for(var q=0;q<3;++q)V[j][q]=Math.max(Math.min(U[j][q],1e8),-1e8);return V}function W(U,V,j,q){var Y=V.axesProject,K=V.gl,te=U.uniforms,ne=j.model||y,se=j.view||y,le=j.projection||y,ce=V.axesBounds,pe=G(V.clipBounds),xe;V.axes&&V.axes.lastCubeProps?xe=V.axes.lastCubeProps.axis:xe=[1,1,1],E[0]=2/K.drawingBufferWidth,E[1]=2/K.drawingBufferHeight,U.bind(),te.view=se,te.projection=le,te.screenSize=E,te.highlightId=V.highlightId,te.highlightScale=V.highlightScale,te.clipBounds=pe,te.pickGroup=V.pickId/255,te.pixelRatio=q;for(var ye=0;ye<3;++ye)if(Y[ye]){te.scale=V.projectScale[ye],te.opacity=V.projectOpacity[ye];for(var fe=P,ae=0;ae<16;++ae)fe[ae]=0;for(var ae=0;ae<4;++ae)fe[5*ae]=1;fe[5*ye]=0,xe[ye]<0?fe[12+ye]=ce[0][ye]:fe[12+ye]=ce[1][ye],d(fe,ne,fe),te.model=fe;var ee=(ye+1)%3,ie=(ye+2)%3,Q=L(T),ue=L(F);Q[ee]=1,ue[ie]=1;var ge=C(le,se,ne,B(D,Q)),Me=C(le,se,ne,B(R,ue));if(Math.abs(ge[1])>Math.abs(Me[1])){var Te=ge;ge=Me,Me=Te,Te=Q,Q=ue,ue=Te;var je=ee;ee=ie,ie=je}ge[0]<0&&(Q[ee]=-1),Me[1]>0&&(ue[ie]=-1);for(var Ve=0,Ze=0,ae=0;ae<4;++ae)Ve+=Math.pow(ne[4*ee+ae],2),Ze+=Math.pow(ne[4*ie+ae],2);Q[ee]/=Math.sqrt(Ve),ue[ie]/=Math.sqrt(Ze),te.axes[0]=Q,te.axes[1]=ue,te.fragClipBounds[0]=O(z,pe[0],ye,-1e8),te.fragClipBounds[1]=O(z,pe[1],ye,1e8),V.vao.bind(),V.vao.draw(K.TRIANGLES,V.vertexCount),V.lineWidth>0&&(K.lineWidth(V.lineWidth*q),V.vao.draw(K.LINES,V.lineVertexCount,V.vertexCount)),V.vao.unbind()}}var X=[-1e8,-1e8,-1e8],Z=[1e8,1e8,1e8],J=[X,Z];function N(U,V,j,q,Y,K,te){var ne=j.gl;if((K===j.projectHasAlpha||te)&&W(V,j,q,Y),K===j.hasAlpha||te){U.bind();var se=U.uniforms;se.model=q.model||y,se.view=q.view||y,se.projection=q.projection||y,E[0]=2/ne.drawingBufferWidth,E[1]=2/ne.drawingBufferHeight,se.screenSize=E,se.highlightId=j.highlightId,se.highlightScale=j.highlightScale,se.fragClipBounds=J,se.clipBounds=j.axes.bounds,se.opacity=j.opacity,se.pickGroup=j.pickId/255,se.pixelRatio=Y,j.vao.bind(),j.vao.draw(ne.TRIANGLES,j.vertexCount),j.lineWidth>0&&(ne.lineWidth(j.lineWidth*Y),j.vao.draw(ne.LINES,j.lineVertexCount,j.vertexCount)),j.vao.unbind()}}b.draw=function(U){var V=this.useOrtho?this.orthoShader:this.shader;N(V,this.projectShader,this,U,this.pixelRatio,!1,!1)},b.drawTransparent=function(U){var V=this.useOrtho?this.orthoShader:this.shader;N(V,this.projectShader,this,U,this.pixelRatio,!0,!1)},b.drawPick=function(U){var V=this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader;N(V,this.pickProjectShader,this,U,1,!0,!0)},b.pick=function(U){if(!U||U.id!==this.pickId)return null;var V=U.value[2]+(U.value[1]<<8)+(U.value[0]<<16);if(V>=this.pointCount||V<0)return null;var j=this.points[V],q=this._selectResult;q.index=V;for(var Y=0;Y<3;++Y)q.position[Y]=q.dataCoordinate[Y]=j[Y];return q},b.highlight=function(U){if(!U)this.highlightId=[1,1,1,1];else{var V=U.index,j=V&255,q=V>>8&255,Y=V>>16&255;this.highlightId=[j/255,q/255,Y/255,0]}};function H(U,V,j,q){var Y;S(U)?V<U.length?Y=U[V]:Y=void 0:Y=U,Y=m(Y);var K=!0;u(Y)&&(Y="\u25BC",K=!1),j||(j={});var te=j.family;S(te)&&(te=te[V]),te||(te="normal");var ne=j.weight;S(ne)&&(ne=ne[V]),ne||(ne="normal");var se=j.style;S(se)&&(se=se[V]),se||(se="normal");var le=j.variant;S(le)&&(le=le[V]),le||(le="normal");var ce=g(Y,{family:te,weight:ne,style:se,variant:le},q),ce=g(Y,j,q);return{mesh:ce[0],lines:ce[1],bounds:ce[2],visible:K}}b.update=function(U){if(U=U||{},"perspective"in U&&(this.useOrtho=!U.perspective),"orthographic"in U&&(this.useOrtho=!!U.orthographic),"lineWidth"in U&&(this.lineWidth=U.lineWidth),"project"in U)if(S(U.project))this.axesProject=U.project;else{var V=!!U.project;this.axesProject=[V,V,V]}if("projectScale"in U)if(S(U.projectScale))this.projectScale=U.projectScale.slice();else{var j=+U.projectScale;this.projectScale=[j,j,j]}if(this.projectHasAlpha=!1,"projectOpacity"in U){if(S(U.projectOpacity))this.projectOpacity=U.projectOpacity.slice();else{var j=+U.projectOpacity;this.projectOpacity=[j,j,j]}for(var q=0;q<3;++q)this.projectOpacity[q]=k(this.projectOpacity[q]),this.projectOpacity[q]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,"opacity"in U&&(this.opacity=k(U.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var Y=U.position,K={family:U.font||"normal",style:U.fontStyle||"normal",weight:U.fontWeight||"normal",variant:U.fontVariant||"normal"},te=U.alignment||[0,0],ne,se;if(te.length===2)ne=te[0],se=te[1];else{ne=[],se=[];for(var q=0;q<te.length;++q)ne[q]=te[q][0],se[q]=te[q][1]}var le=[1/0,1/0,1/0],ce=[-1/0,-1/0,-1/0],pe=U.glyph,xe=U.color,ye=U.size,fe=U.angle,ae=U.lineColor,ee=-1,ie=0,Q=0,ue=0;if(Y.length){ue=Y.length;e:for(var q=0;q<ue;++q){for(var ge=Y[q],Me=0;Me<3;++Me)if(isNaN(ge[Me])||!isFinite(ge[Me]))continue e;var Te=H(pe,q,K,this.pixelRatio),je=Te.mesh,Ve=Te.lines,Ze=Te.bounds;ie+=je.cells.length*3,Q+=Ve.edges.length*2}}var Ke=ie+Q,vt=h.mallocFloat(3*Ke),xt=h.mallocFloat(4*Ke),Pt=h.mallocFloat(2*Ke),mt=h.mallocUint32(Ke);if(Ke>0){var Mt=0,lt=ie,qe=[0,0,0,1],Ye=[0,0,0,1],me=S(xe)&&S(xe[0]),_e=S(ae)&&S(ae[0]);e:for(var q=0;q<ue;++q){ee+=1;for(var ge=Y[q],Me=0;Me<3;++Me){if(isNaN(ge[Me])||!isFinite(ge[Me]))continue e;ce[Me]=Math.max(ce[Me],ge[Me]),le[Me]=Math.min(le[Me],ge[Me])}var Te=H(pe,q,K,this.pixelRatio),je=Te.mesh,Ve=Te.lines,Ze=Te.bounds,Ae=Te.visible;if(!Ae)qe=[1,1,1,0];else if(S(xe)){var ke;if(me?q<xe.length?ke=xe[q]:ke=[0,0,0,0]:ke=xe,ke.length===3){for(var Me=0;Me<3;++Me)qe[Me]=ke[Me];qe[3]=1}else if(ke.length===4){for(var Me=0;Me<4;++Me)qe[Me]=ke[Me];!this.hasAlpha&&ke[3]<1&&(this.hasAlpha=!0)}}else qe[0]=qe[1]=qe[2]=0,qe[3]=1;if(!Ae)Ye=[1,1,1,0];else if(S(ae)){var ke;if(_e?q<ae.length?ke=ae[q]:ke=[0,0,0,0]:ke=ae,ke.length===3){for(var Me=0;Me<3;++Me)Ye[Me]=ke[Me];Ye[Me]=1}else if(ke.length===4){for(var Me=0;Me<4;++Me)Ye[Me]=ke[Me];!this.hasAlpha&&ke[3]<1&&(this.hasAlpha=!0)}}else Ye[0]=Ye[1]=Ye[2]=0,Ye[3]=1;var Ee=.5;Ae?S(ye)?q<ye.length?Ee=+ye[q]:Ee=12:ye?Ee=+ye:this.useOrtho&&(Ee=12):Ee=0;var De=0;S(fe)?q<fe.length?De=+fe[q]:De=0:fe&&(De=+fe);for(var Je=Math.cos(De),Ue=Math.sin(De),ge=Y[q],Me=0;Me<3;++Me)ce[Me]=Math.max(ce[Me],ge[Me]),le[Me]=Math.min(le[Me],ge[Me]);var at=ne,rt=se,at=0;S(ne)?q<ne.length?at=ne[q]:at=0:ne&&(at=ne);var rt=0;S(se)?q<se.length?rt=se[q]:rt=0:se&&(rt=se),at*=at>0?1-Ze[0][0]:at<0?1+Ze[1][0]:1,rt*=rt>0?1-Ze[0][1]:rt<0?1+Ze[1][1]:1;for(var ft=[at,rt],gt=je.cells||[],yt=je.positions||[],Me=0;Me<gt.length;++Me)for(var At=gt[Me],ht=0;ht<3;++ht){for(var Gt=0;Gt<3;++Gt)vt[3*Mt+Gt]=ge[Gt];for(var Gt=0;Gt<4;++Gt)xt[4*Mt+Gt]=qe[Gt];mt[Mt]=ee;var fr=yt[At[ht]];Pt[2*Mt]=Ee*(Je*fr[0]-Ue*fr[1]+ft[0]),Pt[2*Mt+1]=Ee*(Ue*fr[0]+Je*fr[1]+ft[1]),Mt+=1}for(var gt=Ve.edges,yt=Ve.positions,Me=0;Me<gt.length;++Me)for(var At=gt[Me],ht=0;ht<2;++ht){for(var Gt=0;Gt<3;++Gt)vt[3*lt+Gt]=ge[Gt];for(var Gt=0;Gt<4;++Gt)xt[4*lt+Gt]=Ye[Gt];mt[lt]=ee;var fr=yt[At[ht]];Pt[2*lt]=Ee*(Je*fr[0]-Ue*fr[1]+ft[0]),Pt[2*lt+1]=Ee*(Ue*fr[0]+Je*fr[1]+ft[1]),lt+=1}}}this.bounds=[le,ce],this.points=Y,this.pointCount=Y.length,this.vertexCount=ie,this.lineVertexCount=Q,this.pointBuffer.update(vt),this.colorBuffer.update(xt),this.glyphBuffer.update(Pt),this.idBuffer.update(mt),h.free(vt),h.free(xt),h.free(Pt),h.free(mt)},b.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()};function $(U){var V=U.gl,j=p.createPerspective(V),q=p.createOrtho(V),Y=p.createProject(V),K=p.createPickPerspective(V),te=p.createPickOrtho(V),ne=p.createPickProject(V),se=c(V),le=c(V),ce=c(V),pe=c(V),xe=f(V,[{buffer:se,size:3,type:V.FLOAT},{buffer:le,size:4,type:V.FLOAT},{buffer:ce,size:2,type:V.FLOAT},{buffer:pe,size:4,type:V.UNSIGNED_BYTE,normalized:!0}]),ye=new A(V,j,q,Y,se,le,ce,pe,xe,K,te,ne);return ye.update(U),ye}},3589(s,l,n){"use strict";s.exports=y;var u=n(2260),c=n(1888),f=n(9618),h=n(8828).nextPow2,d=function(_,v,x){for(var S=1e8,M=-1,C=-1,w=_.shape[0],k=_.shape[1],A=0;A<w;A++)for(var b=0;b<k;b++){var E=_.get(A,b,0),T=_.get(A,b,1),F=_.get(A,b,2),D=_.get(A,b,3);if(E<255||T<255||F<255||D<255){var R=v-A,P=x-b,z=R*R+P*P;z<S&&(S=z,M=A,C=b)}}return[M,C,S]};function p(_,v,x,S,M){this.coord=[_,v],this.id=x,this.value=S,this.distance=M}function g(_,v,x){this.gl=_,this.fbo=v,this.buffer=x,this._readTimeout=null;var S=this;this._readCallback=function(){S.gl&&(v.bind(),_.readPixels(0,0,v.shape[0],v.shape[1],_.RGBA,_.UNSIGNED_BYTE,S.buffer),S._readTimeout=null)}}var m=g.prototype;Object.defineProperty(m,"shape",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(_){if(this.gl){this.fbo.shape=_;var v=this.fbo.shape[0],x=this.fbo.shape[1];if(x*v*4>this.buffer.length){c.free(this.buffer);for(var S=this.buffer=c.mallocUint8(h(x*v*4)),M=0;M<x*v*4;++M)S[M]=255}return _}}}),m.begin=function(){var _=this.gl,v=this.shape;_&&(this.fbo.bind(),_.clearColor(1,1,1,1),_.clear(_.COLOR_BUFFER_BIT|_.DEPTH_BUFFER_BIT))},m.end=function(){var _=this.gl;_&&(_.bindFramebuffer(_.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},m.query=function(_,v,x){if(!this.gl)return null;var S=this.fbo.shape.slice();_=_|0,v=v|0,typeof x!="number"&&(x=1);var M=Math.min(Math.max(_-x,0),S[0])|0,C=Math.min(Math.max(_+x,0),S[0])|0,w=Math.min(Math.max(v-x,0),S[1])|0,k=Math.min(Math.max(v+x,0),S[1])|0;if(C<=M||k<=w)return null;var A=[C-M,k-w],b=f(this.buffer,[A[0],A[1],4],[4,S[0]*4,1],4*(M+S[0]*w)),E=d(b.hi(A[0],A[1],1),x,x),T=E[0],F=E[1];if(T<0||Math.pow(this.radius,2)<E[2])return null;var D=b.get(T,F,0),R=b.get(T,F,1),P=b.get(T,F,2),z=b.get(T,F,3);return new p(T+M|0,F+w|0,D,[R,P,z],Math.sqrt(E[2]))},m.dispose=function(){this.gl&&(this.fbo.dispose(),c.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))};function y(_,v){var x=v[0],S=v[1],M={},C=u(_,x,S,M),w=c.mallocUint8(x*S*4);return new g(_,C,w)}},9405(s,l,n){"use strict";var u=n(3327),c=n(8731),f=n(216),h=n(5091),d=n(2145),p=n(8866);function g(v){this.gl=v,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var m=g.prototype;m.bind=function(){this.program||this._relink();var v,x=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),S=this.gl.lastAttribCount;if(x>S)for(v=S;v<x;v++)this.gl.enableVertexAttribArray(v);else if(S>x)for(v=x;v<S;v++)this.gl.disableVertexAttribArray(v);this.gl.lastAttribCount=x,this.gl.useProgram(this.program)},m.dispose=function(){for(var v=this.gl.lastAttribCount,x=0;x<v;x++)this.gl.disableVertexAttribArray(x);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null};function y(v,x){return v.name<x.name?-1:1}m.update=function(v,x,S,M){if(!x||arguments.length===1){var C=v;v=C.vertex,x=C.fragment,S=C.uniforms,M=C.attributes}var w=this,k=w.gl,A=w._vref;w._vref=h.shader(k,k.VERTEX_SHADER,v),A&&A.dispose(),w.vertShader=w._vref.shader;var b=this._fref;if(w._fref=h.shader(k,k.FRAGMENT_SHADER,x),b&&b.dispose(),w.fragShader=w._fref.shader,!S||!M){var E=k.createProgram();if(k.attachShader(E,w.fragShader),k.attachShader(E,w.vertShader),k.linkProgram(E),!k.getProgramParameter(E,k.LINK_STATUS)){var T=k.getProgramInfoLog(E);throw new p(T,"Error linking program:"+T)}S=S||d.uniforms(k,E),M=M||d.attributes(k,E),k.deleteProgram(E)}M=M.slice(),M.sort(y);var F=[],D=[],R=[],P;for(P=0;P<M.length;++P){var z=M[P];if(z.type.indexOf("mat")>=0){for(var I=z.type.charAt(z.type.length-1)|0,L=new Array(I),B=0;B<I;++B)L[B]=R.length,D.push(z.name+"["+B+"]"),typeof z.location=="number"?R.push(z.location+B):Array.isArray(z.location)&&z.location.length===I&&typeof z.location[B]=="number"?R.push(z.location[B]|0):R.push(-1);F.push({name:z.name,type:z.type,locations:L})}else F.push({name:z.name,type:z.type,locations:[R.length]}),D.push(z.name),typeof z.location=="number"?R.push(z.location|0):R.push(-1)}var O=0;for(P=0;P<R.length;++P)if(R[P]<0){for(;R.indexOf(O)>=0;)O+=1;R[P]=O}var G=new Array(S.length);function W(){w.program=h.program(k,w._vref,w._fref,D,R);for(var X=0;X<S.length;++X)G[X]=k.getUniformLocation(w.program,S[X].name)}W(),w._relink=W,w.types={uniforms:f(S),attributes:f(M)},w.attributes=c(k,w,F,R),Object.defineProperty(w,"uniforms",u(k,w,S,G))};function _(v,x,S,M,C){var w=new g(v);return w.update(x,S,M,C),w}s.exports=_},8866(s){function l(n,u,c){this.shortMessage=u||"",this.longMessage=c||"",this.rawError=n||"",this.message="gl-shader: "+(u||n||"")+(c?`
+`+c:""),this.stack=new Error().stack}l.prototype=new Error,l.prototype.name="GLError",l.prototype.constructor=l,s.exports=l},8731(s,l,n){"use strict";s.exports=g;var u=n(8866);function c(m,y,_,v,x,S){this._gl=m,this._wrapper=y,this._index=_,this._locations=v,this._dimension=x,this._constFunc=S}var f=c.prototype;f.pointer=function(y,_,v,x){var S=this,M=S._gl,C=S._locations[S._index];M.vertexAttribPointer(C,S._dimension,y||M.FLOAT,!!_,v||0,x||0),M.enableVertexAttribArray(C)},f.set=function(m,y,_,v){return this._constFunc(this._locations[this._index],m,y,_,v)},Object.defineProperty(f,"location",{get:function(){return this._locations[this._index]},set:function(m){return m!==this._locations[this._index]&&(this._locations[this._index]=m|0,this._wrapper.program=null),m|0}});var h=[function(m,y,_){return _.length===void 0?m.vertexAttrib1f(y,_):m.vertexAttrib1fv(y,_)},function(m,y,_,v){return _.length===void 0?m.vertexAttrib2f(y,_,v):m.vertexAttrib2fv(y,_)},function(m,y,_,v,x){return _.length===void 0?m.vertexAttrib3f(y,_,v,x):m.vertexAttrib3fv(y,_)},function(m,y,_,v,x,S){return _.length===void 0?m.vertexAttrib4f(y,_,v,x,S):m.vertexAttrib4fv(y,_)}];function d(m,y,_,v,x,S,M){var C=h[x],w=new c(m,y,_,v,x,C);Object.defineProperty(S,M,{set:function(k){return m.disableVertexAttribArray(v[_]),C(m,v[_],k),k},get:function(){return w},enumerable:!0})}function p(m,y,_,v,x,S,M){for(var C=new Array(x),w=new Array(x),k=0;k<x;++k)d(m,y,_[k],v,x,C,k),w[k]=C[k];Object.defineProperty(C,"location",{set:function(E){if(Array.isArray(E))for(var T=0;T<x;++T)w[T].location=E[T];else for(var T=0;T<x;++T)w[T].location=E+T;return E},get:function(){for(var E=new Array(x),T=0;T<x;++T)E[T]=v[_[T]];return E},enumerable:!0}),C.pointer=function(E,T,F,D){E=E||m.FLOAT,T=!!T,F=F||x*x,D=D||0;for(var R=0;R<x;++R){var P=v[_[R]];m.vertexAttribPointer(P,x,E,T,F,D+R*x),m.enableVertexAttribArray(P)}};var A=new Array(x),b=m["vertexAttrib"+x+"fv"];Object.defineProperty(S,M,{set:function(E){for(var T=0;T<x;++T){var F=v[_[T]];if(m.disableVertexAttribArray(F),Array.isArray(E[0]))b.call(m,F,E[T]);else{for(var D=0;D<x;++D)A[D]=E[x*T+D];b.call(m,F,A)}}return E},get:function(){return C},enumerable:!0})}function g(m,y,_,v){for(var x={},S=0,M=_.length;S<M;++S){var C=_[S],w=C.name,k=C.type,A=C.locations;switch(k){case"bool":case"int":case"float":d(m,y,A[0],v,1,x,w);break;default:if(k.indexOf("vec")>=0){var b=k.charCodeAt(k.length-1)-48;if(b<2||b>4)throw new u("","Invalid data type for attribute "+w+": "+k);d(m,y,A[0],v,b,x,w)}else if(k.indexOf("mat")>=0){var b=k.charCodeAt(k.length-1)-48;if(b<2||b>4)throw new u("","Invalid data type for attribute "+w+": "+k);p(m,y,A,v,b,x,w)}else throw new u("","Unknown data type for attribute "+w+": "+k);break}}return x}},3327(s,l,n){"use strict";var u=n(216),c=n(8866);s.exports=d;function f(p){return function(){return p}}function h(p,g){for(var m=new Array(p),y=0;y<p;++y)m[y]=g;return m}function d(p,g,m,y){function _(k){return function(A,b,E){return A.getUniform(b.program,E[k])}}function v(k){return function(b){for(var E=x("",k),T=0;T<E.length;++T){var F=E[T],D=F[0],R=F[1];if(y[R]){var P=b;if(typeof D=="string"&&(D.indexOf(".")===0||D.indexOf("[")===0)){var z=D;if(D.indexOf(".")===0&&(z=D.slice(1)),z.indexOf("]")===z.length-1){var I=z.indexOf("["),L=z.slice(0,I),B=z.slice(I+1,z.length-1);P=L?b[L][B]:b[B]}else P=b[z]}var O=m[R].type,G;switch(O){case"bool":case"int":case"sampler2D":case"samplerCube":p.uniform1i(y[R],P);break;case"float":p.uniform1f(y[R],P);break;default:var W=O.indexOf("vec");if(0<=W&&W<=1&&O.length===4+W){if(G=O.charCodeAt(O.length-1)-48,G<2||G>4)throw new c("","Invalid data type");switch(O.charAt(0)){case"b":case"i":p["uniform"+G+"iv"](y[R],P);break;case"v":p["uniform"+G+"fv"](y[R],P);break;default:throw new c("","Unrecognized data type for vector "+name+": "+O)}}else if(O.indexOf("mat")===0&&O.length===4){if(G=O.charCodeAt(O.length-1)-48,G<2||G>4)throw new c("","Invalid uniform dimension type for matrix "+name+": "+O);p["uniformMatrix"+G+"fv"](y[R],!1,P);break}else throw new c("","Unknown uniform data type for "+name+": "+O)}}}}}function x(k,A){if(typeof A!="object")return[[k,A]];var b=[];for(var E in A){var T=A[E],F=k;parseInt(E)+""===E?F+="["+E+"]":F+="."+E,typeof T=="object"?b.push.apply(b,x(F,T)):b.push([F,T])}return b}function S(k){switch(k){case"bool":return!1;case"int":case"sampler2D":case"samplerCube":return 0;case"float":return 0;default:var A=k.indexOf("vec");if(0<=A&&A<=1&&k.length===4+A){var b=k.charCodeAt(k.length-1)-48;if(b<2||b>4)throw new c("","Invalid data type");return k.charAt(0)==="b"?h(b,!1):h(b,0)}else if(k.indexOf("mat")===0&&k.length===4){var b=k.charCodeAt(k.length-1)-48;if(b<2||b>4)throw new c("","Invalid uniform dimension type for matrix "+name+": "+k);return h(b*b,0)}else throw new c("","Unknown uniform data type for "+name+": "+k)}}function M(k,A,b){if(typeof b=="object"){var E=C(b);Object.defineProperty(k,A,{get:f(E),set:v(b),enumerable:!0,configurable:!1})}else y[b]?Object.defineProperty(k,A,{get:_(b),set:v(b),enumerable:!0,configurable:!1}):k[A]=S(m[b].type)}function C(k){var A;if(Array.isArray(k)){A=new Array(k.length);for(var b=0;b<k.length;++b)M(A,b,k[b])}else{A={};for(var E in k)M(A,E,k[E])}return A}var w=u(m,!0);return{get:f(C(w)),set:v(w),enumerable:!0,configurable:!0}}},216(s){"use strict";s.exports=l;function l(n,u){for(var c={},f=0;f<n.length;++f)for(var h=n[f].name,d=h.split("."),p=c,g=0;g<d.length;++g){var m=d[g].split("[");if(m.length>1){m[0]in p||(p[m[0]]=[]),p=p[m[0]];for(var y=1;y<m.length;++y){var _=parseInt(m[y]);y<m.length-1||g<d.length-1?(_ in p||(y<m.length-1?p[_]=[]:p[_]={}),p=p[_]):u?p[_]=f:p[_]=n[f].type}}else g<d.length-1?(m[0]in p||(p[m[0]]={}),p=p[m[0]]):u?p[m[0]]=f:p[m[0]]=n[f].type}return c}},2145(s,l){"use strict";l.uniforms=f,l.attributes=h;var n={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},u=null;function c(d,p){if(!u){var g=Object.keys(n);u={};for(var m=0;m<g.length;++m){var y=g[m];u[d[y]]=n[y]}}return u[p]}function f(d,p){for(var g=d.getProgramParameter(p,d.ACTIVE_UNIFORMS),m=[],y=0;y<g;++y){var _=d.getActiveUniform(p,y);if(_){var v=c(d,_.type);if(_.size>1)for(var x=0;x<_.size;++x)m.push({name:_.name.replace("[0]","["+x+"]"),type:v});else m.push({name:_.name,type:v})}}return m}function h(d,p){for(var g=d.getProgramParameter(p,d.ACTIVE_ATTRIBUTES),m=[],y=0;y<g;++y){var _=d.getActiveAttrib(p,y);_&&m.push({name:_.name,type:c(d,_.type)})}return m}},5091(s,l,n){"use strict";l.shader=x,l.program=S;var u=n(8866),c=n(2992),f=typeof WeakMap>"u"?n(606):WeakMap,h=new f,d=0;function p(M,C,w,k,A,b,E){this.id=M,this.src=C,this.type=w,this.shader=k,this.count=b,this.programs=[],this.cache=E}p.prototype.dispose=function(){if(--this.count===0){for(var M=this.cache,C=M.gl,w=this.programs,k=0,A=w.length;k<A;++k){var b=M.programs[w[k]];b&&(delete M.programs[k],C.deleteProgram(b))}C.deleteShader(this.shader),delete M.shaders[this.type===C.FRAGMENT_SHADER|0][this.src]}};function g(M){this.gl=M,this.shaders=[{},{}],this.programs={}}var m=g.prototype;function y(M,C,w){var k=M.createShader(C);if(M.shaderSource(k,w),M.compileShader(k),!M.getShaderParameter(k,M.COMPILE_STATUS)){var A=M.getShaderInfoLog(k);try{var b=c(A,w,C)}catch(E){throw console.warn("Failed to format compiler error: "+E),new u(A,`Error compiling shader:
+`+A)}throw new u(A,b.short,b.long)}return k}m.getShaderReference=function(M,C){var w=this.gl,k=this.shaders[M===w.FRAGMENT_SHADER|0],A=k[C];if(!A||!w.isShader(A.shader)){var b=y(w,M,C);A=k[C]=new p(d++,C,M,b,[],1,this)}else A.count+=1;return A};function _(M,C,w,k,A){var b=M.createProgram();M.attachShader(b,C),M.attachShader(b,w);for(var E=0;E<k.length;++E)M.bindAttribLocation(b,A[E],k[E]);if(M.linkProgram(b),!M.getProgramParameter(b,M.LINK_STATUS)){var T=M.getProgramInfoLog(b);throw new u(T,"Error linking program: "+T)}return b}m.getProgram=function(M,C,w,k){var A=[M.id,C.id,w.join(":"),k.join(":")].join("@"),b=this.programs[A];return(!b||!this.gl.isProgram(b))&&(this.programs[A]=b=_(this.gl,M.shader,C.shader,w,k),M.programs.push(A),C.programs.push(A)),b};function v(M){var C=h.get(M);return C||(C=new g(M),h.set(M,C)),C}function x(M,C,w){return v(M).getShaderReference(C,w)}function S(M,C,w,k,A){return v(M).getProgram(C,w,k,A)}},1493(s,l,n){"use strict";var u=n(3236),c=n(9405),f=u([`precision mediump float;
+#define GLSLIFY 1
+
+attribute vec3 position, color;
+attribute float weight;
+
+uniform mat4 model, view, projection;
+uniform vec3 coordinates[3];
+uniform vec4 colors[3];
+uniform vec2 screenShape;
+uniform float lineWidth;
+
+varying vec4 fragColor;
+
+void main() {
+  vec3 vertexPosition = mix(coordinates[0],
+    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));
+
+  vec4 clipPos = projection * (view * (model * vec4(vertexPosition, 1.0)));
+  vec2 clipOffset = (projection * (view * (model * vec4(color, 0.0)))).xy;
+  vec2 delta = weight * clipOffset * screenShape;
+  vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;
+
+  gl_Position   = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);
+  fragColor     = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];
+}
+`]),h=u([`precision mediump float;
+#define GLSLIFY 1
+
+varying vec4 fragColor;
+
+void main() {
+  gl_FragColor = fragColor;
+}`]);s.exports=function(d){return c(d,f,h,null,[{name:"position",type:"vec3"},{name:"color",type:"vec3"},{name:"weight",type:"float"}])}},4449(s,l,n){"use strict";var u=n(2762),c=n(8116),f=n(1493);s.exports=_;var h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(v,x,S,M){this.gl=v,this.buffer=x,this.vao=S,this.shader=M,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var p=d.prototype,g=[0,0,0],m=[0,0,0],y=[0,0];p.isTransparent=function(){return!1},p.drawTransparent=function(v){},p.draw=function(v){var x=this.gl,S=this.vao,M=this.shader;S.bind(),M.bind();var C=v.model||h,w=v.view||h,k=v.projection||h,A;this.axes&&(A=this.axes.lastCubeProps.axis);for(var b=g,E=m,T=0;T<3;++T)A&&A[T]<0?(b[T]=this.bounds[0][T],E[T]=this.bounds[1][T]):(b[T]=this.bounds[1][T],E[T]=this.bounds[0][T]);y[0]=x.drawingBufferWidth,y[1]=x.drawingBufferHeight,M.uniforms.model=C,M.uniforms.view=w,M.uniforms.projection=k,M.uniforms.coordinates=[this.position,b,E],M.uniforms.colors=this.colors,M.uniforms.screenShape=y;for(var T=0;T<3;++T)M.uniforms.lineWidth=this.lineWidth[T]*this.pixelRatio,this.enabled[T]&&(S.draw(x.TRIANGLES,6,6*T),this.drawSides[T]&&S.draw(x.TRIANGLES,12,18+12*T));S.unbind()},p.update=function(v){v&&("bounds"in v&&(this.bounds=v.bounds),"position"in v&&(this.position=v.position),"lineWidth"in v&&(this.lineWidth=v.lineWidth),"colors"in v&&(this.colors=v.colors),"enabled"in v&&(this.enabled=v.enabled),"drawSides"in v&&(this.drawSides=v.drawSides))},p.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()};function _(v,x){var S=[];function M(b,E,T,F,D,R){var P=[b,E,T,0,0,0,1];P[F+3]=1,P[F]=D,S.push.apply(S,P),P[6]=-1,S.push.apply(S,P),P[F]=R,S.push.apply(S,P),S.push.apply(S,P),P[6]=1,S.push.apply(S,P),P[F]=D,S.push.apply(S,P)}M(0,0,0,0,0,1),M(0,0,0,1,0,1),M(0,0,0,2,0,1),M(1,0,0,1,-1,1),M(1,0,0,2,-1,1),M(0,1,0,0,-1,1),M(0,1,0,2,-1,1),M(0,0,1,0,-1,1),M(0,0,1,1,-1,1);var C=u(v,S),w=c(v,[{type:v.FLOAT,buffer:C,size:3,offset:0,stride:28},{type:v.FLOAT,buffer:C,size:3,offset:12,stride:28},{type:v.FLOAT,buffer:C,size:1,offset:24,stride:28}]),k=f(v);k.attributes.position.location=0,k.attributes.color.location=1,k.attributes.weight.location=2;var A=new d(v,C,w,k);return A.update(x),A}},6740(s,l,n){var u=n(3236),c=u([`precision highp float;
+
+precision highp float;
+#define GLSLIFY 1
+
+vec3 getOrthogonalVector(vec3 v) {
+  // Return up-vector for only-z vector.
+  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).
+  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.
+  // Assign z = 0, x = -b, y = a:
+  // a*-b + b*a + c*0 = -ba + ba + 0 = 0
+  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {
+    return normalize(vec3(-v.y, v.x, 0.0));
+  } else {
+    return normalize(vec3(0.0, v.z, -v.y));
+  }
+}
+
+// Calculate the tube vertex and normal at the given index.
+//
+// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.
+//
+// Each tube segment is made up of a ring of vertices.
+// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.
+// The indexes of tube segments run from 0 to 8.
+//
+vec3 getTubePosition(vec3 d, float index, out vec3 normal) {
+  float segmentCount = 8.0;
+
+  float angle = 2.0 * 3.14159 * (index / segmentCount);
+
+  vec3 u = getOrthogonalVector(d);
+  vec3 v = normalize(cross(u, d));
+
+  vec3 x = u * cos(angle) * length(d);
+  vec3 y = v * sin(angle) * length(d);
+  vec3 v3 = x + y;
+
+  normal = normalize(v3);
+
+  return v3;
+}
+
+attribute vec4 vector;
+attribute vec4 color, position;
+attribute vec2 uv;
+
+uniform float vectorScale, tubeScale;
+uniform mat4 model, view, projection, inverseModel;
+uniform vec3 eyePosition, lightPosition;
+
+varying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  // Scale the vector magnitude to stay constant with
+  // model & view changes.
+  vec3 normal;
+  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);
+  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);
+
+  //Lighting geometry parameters
+  vec4 cameraCoordinate = view * tubePosition;
+  cameraCoordinate.xyz /= cameraCoordinate.w;
+  f_lightDirection = lightPosition - cameraCoordinate.xyz;
+  f_eyeDirection   = eyePosition - cameraCoordinate.xyz;
+  f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);
+
+  // vec4 m_position  = model * vec4(tubePosition, 1.0);
+  vec4 t_position  = view * tubePosition;
+  gl_Position      = projection * t_position;
+
+  f_color          = color;
+  f_data           = tubePosition.xyz;
+  f_position       = position.xyz;
+  f_uv             = uv;
+}
+`]),f=u([`#extension GL_OES_standard_derivatives : enable
+
+precision highp float;
+#define GLSLIFY 1
+
+float beckmannDistribution(float x, float roughness) {
+  float NdotH = max(x, 0.0001);
+  float cos2Alpha = NdotH * NdotH;
+  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;
+  float roughness2 = roughness * roughness;
+  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;
+  return exp(tan2Alpha / roughness2) / denom;
+}
+
+float cookTorranceSpecular(
+  vec3 lightDirection,
+  vec3 viewDirection,
+  vec3 surfaceNormal,
+  float roughness,
+  float fresnel) {
+
+  float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);
+  float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);
+
+  //Half angle vector
+  vec3 H = normalize(lightDirection + viewDirection);
+
+  //Geometric term
+  float NdotH = max(dot(surfaceNormal, H), 0.0);
+  float VdotH = max(dot(viewDirection, H), 0.000001);
+  float LdotH = max(dot(lightDirection, H), 0.000001);
+  float G1 = (2.0 * NdotH * VdotN) / VdotH;
+  float G2 = (2.0 * NdotH * LdotN) / LdotH;
+  float G = min(1.0, min(G1, G2));
+
+  //Distribution term
+  float D = beckmannDistribution(NdotH, roughness);
+
+  //Fresnel term
+  float F = pow(1.0 - VdotN, fresnel);
+
+  //Multiply terms and done
+  return  G * F * D / max(3.14159265 * VdotN, 0.000001);
+}
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 clipBounds[2];
+uniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;
+uniform sampler2D texture;
+
+varying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;
+varying vec4 f_color;
+varying vec2 f_uv;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;
+  vec3 N = normalize(f_normal);
+  vec3 L = normalize(f_lightDirection);
+  vec3 V = normalize(f_eyeDirection);
+
+  if(gl_FrontFacing) {
+    N = -N;
+  }
+
+  float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));
+  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);
+
+  vec4 surfaceColor = f_color * texture2D(texture, f_uv);
+  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);
+
+  gl_FragColor = litColor * opacity;
+}
+`]),h=u([`precision highp float;
+
+precision highp float;
+#define GLSLIFY 1
+
+vec3 getOrthogonalVector(vec3 v) {
+  // Return up-vector for only-z vector.
+  // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).
+  // From the above if-statement we have ||a|| > 0  U  ||b|| > 0.
+  // Assign z = 0, x = -b, y = a:
+  // a*-b + b*a + c*0 = -ba + ba + 0 = 0
+  if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {
+    return normalize(vec3(-v.y, v.x, 0.0));
+  } else {
+    return normalize(vec3(0.0, v.z, -v.y));
+  }
+}
+
+// Calculate the tube vertex and normal at the given index.
+//
+// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.
+//
+// Each tube segment is made up of a ring of vertices.
+// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.
+// The indexes of tube segments run from 0 to 8.
+//
+vec3 getTubePosition(vec3 d, float index, out vec3 normal) {
+  float segmentCount = 8.0;
+
+  float angle = 2.0 * 3.14159 * (index / segmentCount);
+
+  vec3 u = getOrthogonalVector(d);
+  vec3 v = normalize(cross(u, d));
+
+  vec3 x = u * cos(angle) * length(d);
+  vec3 y = v * sin(angle) * length(d);
+  vec3 v3 = x + y;
+
+  normal = normalize(v3);
+
+  return v3;
+}
+
+attribute vec4 vector;
+attribute vec4 position;
+attribute vec4 id;
+
+uniform mat4 model, view, projection;
+uniform float tubeScale;
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  vec3 normal;
+  vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);
+  vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);
+
+  gl_Position = projection * (view * tubePosition);
+  f_id        = id;
+  f_position  = position.xyz;
+}
+`]),d=u([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3  clipBounds[2];
+uniform float pickId;
+
+varying vec3 f_position;
+varying vec4 f_id;
+
+void main() {
+  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;
+
+  gl_FragColor = vec4(pickId, f_id.xyz);
+}`]);l.meshShader={vertex:c,fragment:f,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec4"}]},l.pickShader={vertex:h,fragment:d,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec4"}]}},7815(s,l,n){"use strict";var u=n(2931),c=n(9970),f=["xyz","xzy","yxz","yzx","zxy","zyx"],h=function(M,C,w,k){for(var A=M.points,b=M.velocities,E=M.divergences,T=[],F=[],D=[],R=[],P=[],z=[],I=0,L=0,B=c.create(),O=c.create(),G=8,W=0;W<A.length;W++){var X=A[W],Z=b[W],J=E[W];C===0&&(J=w*.05),L=u.length(Z)/k,B=c.create(),u.copy(B,Z),B[3]=J;for(var N=0;N<G;N++)P[N]=[X[0],X[1],X[2],N];if(R.length>0)for(var N=0;N<G;N++){var H=(N+1)%G;T.push(R[N],P[N],P[H],P[H],R[H],R[N]),D.push(O,B,B,B,O,O),z.push(I,L,L,L,I,I);var $=T.length;F.push([$-6,$-5,$-4],[$-3,$-2,$-1])}var U=R;R=P,P=U;var V=O;O=B,B=V;var j=I;I=L,L=j}return{positions:T,cells:F,vectors:D,vertexIntensity:z}},d=function(M,C,w,k){for(var A=0,b=0;b<M.length;b++)for(var E=M[b].velocities,T=0;T<E.length;T++)A=Math.max(A,u.length(E[T]));for(var F=M.map(function(W){return h(W,w,k,A)}),D=[],R=[],P=[],z=[],b=0;b<F.length;b++){var I=F[b],L=D.length;D=D.concat(I.positions),P=P.concat(I.vectors),z=z.concat(I.vertexIntensity);for(var T=0;T<I.cells.length;T++){var B=I.cells[T],O=[];R.push(O);for(var G=0;G<B.length;G++)O.push(B[G]+L)}}return{positions:D,cells:R,vectors:P,vertexIntensity:z,colormap:C}},p=function(M,C){var w=M.length,k;for(k=0;k<w;k++){var A=M[k];if(A===C)return k;if(A>C)return k-1}return k},g=function(M,C,w){return M<C?C:M>w?w:M},m=function(M,C,w){var k=C.vectors,A=C.meshgrid,b=M[0],E=M[1],T=M[2],F=A[0].length,D=A[1].length,R=A[2].length,P=p(A[0],b),z=p(A[1],E),I=p(A[2],T),L=P+1,B=z+1,O=I+1;if(P=g(P,0,F-1),L=g(L,0,F-1),z=g(z,0,D-1),B=g(B,0,D-1),I=g(I,0,R-1),O=g(O,0,R-1),P<0||z<0||I<0||L>F-1||B>D-1||O>R-1)return u.create();var G=A[0][P],W=A[0][L],X=A[1][z],Z=A[1][B],J=A[2][I],N=A[2][O],H=(b-G)/(W-G),$=(E-X)/(Z-X),U=(T-J)/(N-J);isFinite(H)||(H=.5),isFinite($)||($=.5),isFinite(U)||(U=.5);var V,j,q,Y,K,te;switch(w.reversedX&&(P=F-1-P,L=F-1-L),w.reversedY&&(z=D-1-z,B=D-1-B),w.reversedZ&&(I=R-1-I,O=R-1-O),w.filled){case 5:K=I,te=O,q=z*R,Y=B*R,V=P*R*D,j=L*R*D;break;case 4:K=I,te=O,V=P*R,j=L*R,q=z*R*F,Y=B*R*F;break;case 3:q=z,Y=B,K=I*D,te=O*D,V=P*D*R,j=L*D*R;break;case 2:q=z,Y=B,V=P*D,j=L*D,K=I*D*F,te=O*D*F;break;case 1:V=P,j=L,K=I*F,te=O*F,q=z*F*R,Y=B*F*R;break;default:V=P,j=L,q=z*F,Y=B*F,K=I*F*D,te=O*F*D;break}var ne=k[V+q+K],se=k[V+q+te],le=k[V+Y+K],ce=k[V+Y+te],pe=k[j+q+K],xe=k[j+q+te],ye=k[j+Y+K],fe=k[j+Y+te],ae=u.create(),ee=u.create(),ie=u.create(),Q=u.create();u.lerp(ae,ne,pe,H),u.lerp(ee,se,xe,H),u.lerp(ie,le,ye,H),u.lerp(Q,ce,fe,H);var ue=u.create(),ge=u.create();u.lerp(ue,ae,ie,$),u.lerp(ge,ee,Q,$);var Me=u.create();return u.lerp(Me,ue,ge,U),Me},y=function(M,C){var w=C[0],k=C[1],A=C[2];return M[0]=w<0?-w:w,M[1]=k<0?-k:k,M[2]=A<0?-A:A,M},_=function(M){var C=1/0;M.sort(function(b,E){return b-E});for(var w=M.length,k=1;k<w;k++){var A=Math.abs(M[k]-M[k-1]);A<C&&(C=A)}return C},v=function(M){for(var C=[],w=[],k=[],A={},b={},E={},T=M.length,F=0;F<T;F++){var D=M[F],R=D[0],P=D[1],z=D[2];A[R]||(C.push(R),A[R]=!0),b[P]||(w.push(P),b[P]=!0),E[z]||(k.push(z),E[z]=!0)}var I=_(C),L=_(w),B=_(k),O=Math.min(I,L,B);return isFinite(O)?O:1};s.exports=function(M,C){var w=M.startingPositions,k=M.maxLength||1e3,A=M.tubeSize||1,b=M.absoluteTubeSize,E=M.gridFill||"+x+y+z",T={};E.indexOf("-x")!==-1&&(T.reversedX=!0),E.indexOf("-y")!==-1&&(T.reversedY=!0),E.indexOf("-z")!==-1&&(T.reversedZ=!0),T.filled=f.indexOf(E.replace(/-/g,"").replace(/\+/g,""));var F=M.getVelocity||function(xe){return m(xe,M,T)},D=M.getDivergence||function(xe,ye){var fe=u.create(),ae=1e-4;u.add(fe,xe,[ae,0,0]);var ee=F(fe);u.subtract(ee,ee,ye),u.scale(ee,ee,1/ae),u.add(fe,xe,[0,ae,0]);var ie=F(fe);u.subtract(ie,ie,ye),u.scale(ie,ie,1/ae),u.add(fe,xe,[0,0,ae]);var Q=F(fe);return u.subtract(Q,Q,ye),u.scale(Q,Q,1/ae),u.add(fe,ee,ie),u.add(fe,fe,Q),fe},R=[],P=C[0][0],z=C[0][1],I=C[0][2],L=C[1][0],B=C[1][1],O=C[1][2],G=function(xe){var ye=xe[0],fe=xe[1],ae=xe[2];return!(ye<P||ye>L||fe<z||fe>B||ae<I||ae>O)},W=u.distance(C[0],C[1]),X=10*W/k,Z=X*X,J=1,N=0,H=w.length;H>1&&(J=v(w));for(var $=0;$<H;$++){var U=u.create();u.copy(U,w[$]);var V=[U],j=[],q=F(U),Y=U;j.push(q);var K=[],te=D(U,q),ne=u.length(te);isFinite(ne)&&ne>N&&(N=ne),K.push(ne),R.push({points:V,velocities:j,divergences:K});for(var se=0;se<k*100&&V.length<k&&G(U);){se++;var le=u.clone(q),ce=u.squaredLength(le);if(ce===0)break;if(ce>Z&&u.scale(le,le,X/Math.sqrt(ce)),u.add(le,le,U),q=F(le),u.squaredDistance(Y,le)-Z>-1e-4*Z){V.push(le),Y=le,j.push(q);var te=D(le,q),ne=u.length(te);isFinite(ne)&&ne>N&&(N=ne),K.push(ne)}U=le}}var pe=d(R,M.colormap,N,J);return b?pe.tubeScale=b:(N===0&&(N=1),pe.tubeScale=A*.5*J/N),pe};var x=n(6740),S=n(6405).createMesh;s.exports.createTubeMesh=function(M,C){return S(M,C,{shaders:x,traceType:"streamtube"})}},990(s,l,n){var u=n(9405),c=n(3236),f=c([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec4 uv;
+attribute vec3 f;
+attribute vec3 normal;
+
+uniform vec3 objectOffset;
+uniform mat4 model, view, projection, inverseModel;
+uniform vec3 lightPosition, eyePosition;
+uniform sampler2D colormap;
+
+varying float value, kill;
+varying vec3 worldCoordinate;
+varying vec2 planeCoordinate;
+varying vec3 lightDirection, eyeDirection, surfaceNormal;
+varying vec4 vColor;
+
+void main() {
+  vec3 localCoordinate = vec3(uv.zw, f.x);
+  worldCoordinate = objectOffset + localCoordinate;
+  mat4 objectOffsetTranslation = mat4(1.0) + mat4(vec4(0), vec4(0), vec4(0), vec4(objectOffset, 0));
+  vec4 worldPosition = (model * objectOffsetTranslation) * vec4(localCoordinate, 1.0);
+  vec4 clipPosition = projection * (view * worldPosition);
+  gl_Position = clipPosition;
+  kill = f.y;
+  value = f.z;
+  planeCoordinate = uv.xy;
+
+  vColor = texture2D(colormap, vec2(value, value));
+
+  //Lighting geometry parameters
+  vec4 cameraCoordinate = view * worldPosition;
+  cameraCoordinate.xyz /= cameraCoordinate.w;
+  lightDirection = lightPosition - cameraCoordinate.xyz;
+  eyeDirection   = eyePosition - cameraCoordinate.xyz;
+  surfaceNormal  = normalize((vec4(normal,0) * inverseModel).xyz);
+}
+`]),h=c([`precision highp float;
+#define GLSLIFY 1
+
+float beckmannDistribution(float x, float roughness) {
+  float NdotH = max(x, 0.0001);
+  float cos2Alpha = NdotH * NdotH;
+  float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;
+  float roughness2 = roughness * roughness;
+  float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;
+  return exp(tan2Alpha / roughness2) / denom;
+}
+
+float beckmannSpecular(
+  vec3 lightDirection,
+  vec3 viewDirection,
+  vec3 surfaceNormal,
+  float roughness) {
+  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);
+}
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec3 lowerBound, upperBound;
+uniform float contourTint;
+uniform vec4 contourColor;
+uniform sampler2D colormap;
+uniform vec3 clipBounds[2];
+uniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;
+uniform float vertexColor;
+
+varying float value, kill;
+varying vec3 worldCoordinate;
+varying vec3 lightDirection, eyeDirection, surfaceNormal;
+varying vec4 vColor;
+
+void main() {
+  if (
+    kill > 0.0 ||
+    vColor.a == 0.0 ||
+    outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)
+  ) discard;
+
+  vec3 N = normalize(surfaceNormal);
+  vec3 V = normalize(eyeDirection);
+  vec3 L = normalize(lightDirection);
+
+  if(gl_FrontFacing) {
+    N = -N;
+  }
+
+  float specular = max(beckmannSpecular(L, V, N, roughness), 0.);
+  float diffuse  = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);
+
+  //decide how to interpolate color \u2014 in vertex or in fragment
+  vec4 surfaceColor =
+    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +
+    step(.5, vertexColor) * vColor;
+
+  vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);
+
+  gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;
+}
+`]),d=c([`precision highp float;
+#define GLSLIFY 1
+
+attribute vec4 uv;
+attribute float f;
+
+uniform vec3 objectOffset;
+uniform mat3 permutation;
+uniform mat4 model, view, projection;
+uniform float height, zOffset;
+uniform sampler2D colormap;
+
+varying float value, kill;
+varying vec3 worldCoordinate;
+varying vec2 planeCoordinate;
+varying vec3 lightDirection, eyeDirection, surfaceNormal;
+varying vec4 vColor;
+
+void main() {
+  vec3 dataCoordinate = permutation * vec3(uv.xy, height);
+  worldCoordinate = objectOffset + dataCoordinate;
+  mat4 objectOffsetTranslation = mat4(1.0) + mat4(vec4(0), vec4(0), vec4(0), vec4(objectOffset, 0));
+  vec4 worldPosition = (model * objectOffsetTranslation) * vec4(dataCoordinate, 1.0);
+
+  vec4 clipPosition = projection * (view * worldPosition);
+  clipPosition.z += zOffset;
+
+  gl_Position = clipPosition;
+  value = f + objectOffset.z;
+  kill = -1.0;
+  planeCoordinate = uv.zw;
+
+  vColor = texture2D(colormap, vec2(value, value));
+
+  //Don't do lighting for contours
+  surfaceNormal   = vec3(1,0,0);
+  eyeDirection    = vec3(0,1,0);
+  lightDirection  = vec3(0,0,1);
+}
+`]),p=c([`precision highp float;
+#define GLSLIFY 1
+
+bool outOfRange(float a, float b, float p) {
+  return ((p > max(a, b)) ||
+          (p < min(a, b)));
+}
+
+bool outOfRange(vec2 a, vec2 b, vec2 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y));
+}
+
+bool outOfRange(vec3 a, vec3 b, vec3 p) {
+  return (outOfRange(a.x, b.x, p.x) ||
+          outOfRange(a.y, b.y, p.y) ||
+          outOfRange(a.z, b.z, p.z));
+}
+
+bool outOfRange(vec4 a, vec4 b, vec4 p) {
+  return outOfRange(a.xyz, b.xyz, p.xyz);
+}
+
+uniform vec2 shape;
+uniform vec3 clipBounds[2];
+uniform float pickId;
+
+varying float value, kill;
+varying vec3 worldCoordinate;
+varying vec2 planeCoordinate;
+varying vec3 surfaceNormal;
+
+vec2 splitFloat(float v) {
+  float vh = 255.0 * v;
+  float upper = floor(vh);
+  float lower = fract(vh);
+  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);
+}
+
+void main() {
+  if ((kill > 0.0) ||
+      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;
+
+  vec2 ux = splitFloat(planeCoordinate.x / shape.x);
+  vec2 uy = splitFloat(planeCoordinate.y / shape.y);
+  gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));
+}
+`]);l.createShader=function(g){var m=u(g,f,h,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return m.attributes.uv.location=0,m.attributes.f.location=1,m.attributes.normal.location=2,m},l.createPickShader=function(g){var m=u(g,f,p,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return m.attributes.uv.location=0,m.attributes.f.location=1,m.attributes.normal.location=2,m},l.createContourShader=function(g){var m=u(g,d,h,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return m.attributes.uv.location=0,m.attributes.f.location=1,m},l.createPickContourShader=function(g){var m=u(g,d,p,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return m.attributes.uv.location=0,m.attributes.f.location=1,m}},9499(s,l,n){"use strict";s.exports=V;var u=n(8828),c=n(2762),f=n(8116),h=n(7766),d=n(1888),p=n(6729),g=n(5298),m=n(9994),y=n(9618),_=n(3711),v=n(6760),x=n(7608),S=n(2478),M=n(6199),C=n(990),w=C.createShader,k=C.createContourShader,A=C.createPickShader,b=C.createPickContourShader,E=40,T=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],F=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],D=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];(function(){for(var j=0;j<3;++j){var q=D[j],Y=(j+1)%3,K=(j+2)%3;q[Y+0]=1,q[K+3]=1,q[j+6]=1}})();function R(j,q,Y,K,te){this.position=j,this.index=q,this.uv=Y,this.level=K,this.dataCoordinate=te}var P=256;function z(j,q,Y,K,te,ne,se,le,ce,pe,xe,ye,fe,ae,ee){this.gl=j,this.shape=q,this.bounds=Y,this.objectOffset=ee,this.intensityBounds=[],this._shader=K,this._pickShader=te,this._coordinateBuffer=ne,this._vao=se,this._colorMap=le,this._contourShader=ce,this._contourPickShader=pe,this._contourBuffer=xe,this._contourVAO=ye,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new R([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=fe,this._dynamicVAO=ae,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[y(d.mallocFloat(1024),[0,0]),y(d.mallocFloat(1024),[0,0]),y(d.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var I=z.prototype;I.genColormap=function(j,q){var Y=!1,K=m([p({colormap:j,nshades:P,format:"rgba"}).map(function(te,ne){var se=q?L(ne/255,q):te[3];return se<1&&(Y=!0),[te[0],te[1],te[2],255*se]})]);return g.divseq(K,255),this.hasAlphaScale=Y,K},I.isTransparent=function(){return this.opacity<1||this.hasAlphaScale},I.isOpaque=function(){return!this.isTransparent()},I.pickSlots=1,I.setPickBase=function(j){this.pickId=j};function L(j,q){if(!q||!q.length)return 1;for(var Y=0;Y<q.length;++Y){if(q.length<2)return 1;if(q[Y][0]===j)return q[Y][1];if(q[Y][0]>j&&Y>0){var K=(q[Y][0]-j)/(q[Y][0]-q[Y-1][0]);return q[Y][1]*(1-K)+K*q[Y-1][1]}}return 1}var B=[0,0,0],O={showSurface:!1,showContour:!1,projections:[T.slice(),T.slice(),T.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function G(j,q){var Y,K,te,ne=q.axes&&q.axes.lastCubeProps.axis||B,se=q.showSurface,le=q.showContour;for(Y=0;Y<3;++Y)for(se=se||q.surfaceProject[Y],K=0;K<3;++K)le=le||q.contourProject[Y][K];for(Y=0;Y<3;++Y){var ce=O.projections[Y];for(K=0;K<16;++K)ce[K]=0;for(K=0;K<4;++K)ce[5*K]=1;ce[5*Y]=0,ce[12+Y]=q.axesBounds[+(ne[Y]>0)][Y],v(ce,j.model,ce);var pe=O.clipBounds[Y];for(te=0;te<2;++te)for(K=0;K<3;++K)pe[te][K]=j.clipBounds[te][K];pe[0][Y]=-1e8,pe[1][Y]=1e8}return O.showSurface=se,O.showContour=le,O}var W={model:T,view:T,projection:T,inverseModel:T.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},X=T.slice(),Z=[1,0,0,0,1,0,0,0,1];function J(j,q){j=j||{};var Y=this.gl;Y.disable(Y.CULL_FACE),this._colorMap.bind(0);var K=W;K.model=j.model||T,K.view=j.view||T,K.projection=j.projection||T,K.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],K.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],K.objectOffset=this.objectOffset,K.contourColor=this.contourColor[0],K.inverseModel=x(K.inverseModel,K.model);for(var te=0;te<2;++te)for(var ne=K.clipBounds[te],se=0;se<3;++se)ne[se]=Math.min(Math.max(this.clipBounds[te][se],-1e8),1e8);K.kambient=this.ambientLight,K.kdiffuse=this.diffuseLight,K.kspecular=this.specularLight,K.roughness=this.roughness,K.fresnel=this.fresnel,K.opacity=this.opacity,K.height=0,K.permutation=Z,K.vertexColor=this.vertexColor;var le=X;for(v(le,K.view,K.model),v(le,K.projection,le),x(le,le),te=0;te<3;++te)K.eyePosition[te]=le[12+te]/le[15];var ce=le[15];for(te=0;te<3;++te)ce+=this.lightPosition[te]*le[4*te+3];for(te=0;te<3;++te){var pe=le[12+te];for(se=0;se<3;++se)pe+=le[4*se+te]*this.lightPosition[se];K.lightPosition[te]=pe/ce}var xe=G(K,this);if(xe.showSurface){for(this._shader.bind(),this._shader.uniforms=K,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(Y.TRIANGLES,this._vertexCount),te=0;te<3;++te)!this.surfaceProject[te]||!this.vertexCount||(this._shader.uniforms.model=xe.projections[te],this._shader.uniforms.clipBounds=xe.clipBounds[te],this._vao.draw(Y.TRIANGLES,this._vertexCount));this._vao.unbind()}if(xe.showContour){var ye=this._contourShader;K.kambient=1,K.kdiffuse=0,K.kspecular=0,K.opacity=1,ye.bind(),ye.uniforms=K;var fe=this._contourVAO;for(fe.bind(),te=0;te<3;++te)for(ye.uniforms.permutation=D[te],Y.lineWidth(this.contourWidth[te]*this.pixelRatio),se=0;se<this.contourLevels[te].length;++se)se===this.highlightLevel[te]?(ye.uniforms.contourColor=this.highlightColor[te],ye.uniforms.contourTint=this.highlightTint[te]):(se===0||se-1===this.highlightLevel[te])&&(ye.uniforms.contourColor=this.contourColor[te],ye.uniforms.contourTint=this.contourTint[te]),this._contourCounts[te][se]&&(ye.uniforms.height=this.contourLevels[te][se],fe.draw(Y.LINES,this._contourCounts[te][se],this._contourOffsets[te][se]));for(te=0;te<3;++te)for(ye.uniforms.model=xe.projections[te],ye.uniforms.clipBounds=xe.clipBounds[te],se=0;se<3;++se)if(this.contourProject[te][se]){ye.uniforms.permutation=D[se],Y.lineWidth(this.contourWidth[se]*this.pixelRatio);for(var ae=0;ae<this.contourLevels[se].length;++ae)ae===this.highlightLevel[se]?(ye.uniforms.contourColor=this.highlightColor[se],ye.uniforms.contourTint=this.highlightTint[se]):(ae===0||ae-1===this.highlightLevel[se])&&(ye.uniforms.contourColor=this.contourColor[se],ye.uniforms.contourTint=this.contourTint[se]),this._contourCounts[se][ae]&&(ye.uniforms.height=this.contourLevels[se][ae],fe.draw(Y.LINES,this._contourCounts[se][ae],this._contourOffsets[se][ae]))}for(fe.unbind(),fe=this._dynamicVAO,fe.bind(),te=0;te<3;++te)if(this._dynamicCounts[te]!==0)for(ye.uniforms.model=K.model,ye.uniforms.clipBounds=K.clipBounds,ye.uniforms.permutation=D[te],Y.lineWidth(this.dynamicWidth[te]*this.pixelRatio),ye.uniforms.contourColor=this.dynamicColor[te],ye.uniforms.contourTint=this.dynamicTint[te],ye.uniforms.height=this.dynamicLevel[te],fe.draw(Y.LINES,this._dynamicCounts[te],this._dynamicOffsets[te]),se=0;se<3;++se)this.contourProject[se][te]&&(ye.uniforms.model=xe.projections[se],ye.uniforms.clipBounds=xe.clipBounds[se],fe.draw(Y.LINES,this._dynamicCounts[te],this._dynamicOffsets[te]));fe.unbind()}}I.draw=function(j){return J.call(this,j,!1)},I.drawTransparent=function(j){return J.call(this,j,!0)};var N={model:T,view:T,projection:T,inverseModel:T,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};I.drawPick=function(j){j=j||{};var q=this.gl;q.disable(q.CULL_FACE);var Y=N;Y.model=j.model||T,Y.view=j.view||T,Y.projection=j.projection||T,Y.shape=this._field[2].shape,Y.pickId=this.pickId/255,Y.lowerBound=this.bounds[0],Y.upperBound=this.bounds[1],Y.objectOffset=this.objectOffset,Y.permutation=Z;for(var K=0;K<2;++K)for(var te=Y.clipBounds[K],ne=0;ne<3;++ne)te[ne]=Math.min(Math.max(this.clipBounds[K][ne],-1e8),1e8);var se=G(Y,this);if(se.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=Y,this._vao.bind(),this._vao.draw(q.TRIANGLES,this._vertexCount),K=0;K<3;++K)this.surfaceProject[K]&&(this._pickShader.uniforms.model=se.projections[K],this._pickShader.uniforms.clipBounds=se.clipBounds[K],this._vao.draw(q.TRIANGLES,this._vertexCount));this._vao.unbind()}if(se.showContour){var le=this._contourPickShader;le.bind(),le.uniforms=Y;var ce=this._contourVAO;for(ce.bind(),ne=0;ne<3;++ne)for(q.lineWidth(this.contourWidth[ne]*this.pixelRatio),le.uniforms.permutation=D[ne],K=0;K<this.contourLevels[ne].length;++K)this._contourCounts[ne][K]&&(le.uniforms.height=this.contourLevels[ne][K],ce.draw(q.LINES,this._contourCounts[ne][K],this._contourOffsets[ne][K]));for(K=0;K<3;++K)for(le.uniforms.model=se.projections[K],le.uniforms.clipBounds=se.clipBounds[K],ne=0;ne<3;++ne)if(this.contourProject[K][ne]){le.uniforms.permutation=D[ne],q.lineWidth(this.contourWidth[ne]*this.pixelRatio);for(var pe=0;pe<this.contourLevels[ne].length;++pe)this._contourCounts[ne][pe]&&(le.uniforms.height=this.contourLevels[ne][pe],ce.draw(q.LINES,this._contourCounts[ne][pe],this._contourOffsets[ne][pe]))}ce.unbind()}},I.pick=function(j){if(!j||j.id!==this.pickId)return null;var q=this._field[2].shape,Y=this._pickResult,K=q[0]*(j.value[0]+(j.value[2]>>4)/16)/255,te=Math.floor(K),ne=K-te,se=q[1]*(j.value[1]+(j.value[2]&15)/16)/255,le=Math.floor(se),ce=se-le;te+=1,le+=1;var pe=Y.position;pe[0]=pe[1]=pe[2]=0;for(var xe=0;xe<2;++xe)for(var ye=xe?ne:1-ne,fe=0;fe<2;++fe)for(var ae=fe?ce:1-ce,ee=te+xe,ie=le+fe,Q=ye*ae,ue=0;ue<3;++ue)pe[ue]+=this._field[ue].get(ee,ie)*Q;for(var ge=this._pickResult.level,Me=0;Me<3;++Me)if(ge[Me]=S.le(this.contourLevels[Me],pe[Me]),ge[Me]<0)this.contourLevels[Me].length>0&&(ge[Me]=0);else if(ge[Me]<this.contourLevels[Me].length-1){var Te=this.contourLevels[Me][ge[Me]],je=this.contourLevels[Me][ge[Me]+1];Math.abs(Te-pe[Me])>Math.abs(je-pe[Me])&&(ge[Me]+=1)}for(Y.index[0]=ne<.5?te:te+1,Y.index[1]=ce<.5?le:le+1,Y.uv[0]=K/q[0],Y.uv[1]=se/q[1],ue=0;ue<3;++ue)Y.dataCoordinate[ue]=this._field[ue].get(Y.index[0],Y.index[1]);return Y},I.padField=function(j,q){var Y=q.shape.slice(),K=j.shape.slice();g.assign(j.lo(1,1).hi(Y[0],Y[1]),q),g.assign(j.lo(1).hi(Y[0],1),q.hi(Y[0],1)),g.assign(j.lo(1,K[1]-1).hi(Y[0],1),q.lo(0,Y[1]-1).hi(Y[0],1)),g.assign(j.lo(0,1).hi(1,Y[1]),q.hi(1)),g.assign(j.lo(K[0]-1,1).hi(1,Y[1]),q.lo(Y[0]-1)),j.set(0,0,q.get(0,0)),j.set(0,K[1]-1,q.get(0,Y[1]-1)),j.set(K[0]-1,0,q.get(Y[0]-1,0)),j.set(K[0]-1,K[1]-1,q.get(Y[0]-1,Y[1]-1))};function H(j,q){return Array.isArray(j)?[q(j[0]),q(j[1]),q(j[2])]:[q(j),q(j),q(j)]}function $(j){return Array.isArray(j)?j.length===3?[j[0],j[1],j[2],1]:[j[0],j[1],j[2],j[3]]:[0,0,0,1]}function U(j){if(Array.isArray(j)){if(Array.isArray(j))return[$(j[0]),$(j[1]),$(j[2])];var q=$(j);return[q.slice(),q.slice(),q.slice()]}}I.update=function(j){j=j||{},this.objectOffset=j.objectOffset||this.objectOffset,this.dirty=!0,"contourWidth"in j&&(this.contourWidth=H(j.contourWidth,Number)),"showContour"in j&&(this.showContour=H(j.showContour,Boolean)),"showSurface"in j&&(this.showSurface=!!j.showSurface),"contourTint"in j&&(this.contourTint=H(j.contourTint,Boolean)),"contourColor"in j&&(this.contourColor=U(j.contourColor)),"contourProject"in j&&(this.contourProject=H(j.contourProject,function(xi){return H(xi,Boolean)})),"surfaceProject"in j&&(this.surfaceProject=j.surfaceProject),"dynamicColor"in j&&(this.dynamicColor=U(j.dynamicColor)),"dynamicTint"in j&&(this.dynamicTint=H(j.dynamicTint,Number)),"dynamicWidth"in j&&(this.dynamicWidth=H(j.dynamicWidth,Number)),"opacity"in j&&(this.opacity=j.opacity),"opacityscale"in j&&(this.opacityscale=j.opacityscale),"colorBounds"in j&&(this.colorBounds=j.colorBounds),"vertexColor"in j&&(this.vertexColor=j.vertexColor?1:0),"colormap"in j&&this._colorMap.setPixels(this.genColormap(j.colormap,this.opacityscale));var q=j.field||j.coords&&j.coords[2]||null,Y=!1;if(q||(this._field[2].shape[0]||this._field[2].shape[2]?q=this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):q=this._field[2].hi(0,0)),"field"in j||"coords"in j){var K=(q.shape[0]+2)*(q.shape[1]+2);K>this._field[2].data.length&&(d.freeFloat(this._field[2].data),this._field[2].data=d.mallocFloat(u.nextPow2(K))),this._field[2]=y(this._field[2].data,[q.shape[0]+2,q.shape[1]+2]),this.padField(this._field[2],q),this.shape=q.shape.slice();for(var te=this.shape,ne=0;ne<2;++ne)this._field[2].size>this._field[ne].data.length&&(d.freeFloat(this._field[ne].data),this._field[ne].data=d.mallocFloat(this._field[2].size)),this._field[ne]=y(this._field[ne].data,[te[0]+2,te[1]+2]);if(j.coords){var se=j.coords;if(!Array.isArray(se)||se.length!==3)throw new Error("gl-surface: invalid coordinates for x/y");for(ne=0;ne<2;++ne){var le=se[ne];for(fe=0;fe<2;++fe)if(le.shape[fe]!==te[fe])throw new Error("gl-surface: coords have incorrect shape");this.padField(this._field[ne],le)}}else if(j.ticks){var ce=j.ticks;if(!Array.isArray(ce)||ce.length!==2)throw new Error("gl-surface: invalid ticks");for(ne=0;ne<2;++ne){var pe=ce[ne];if((Array.isArray(pe)||pe.length)&&(pe=y(pe)),pe.shape[0]!==te[ne])throw new Error("gl-surface: invalid tick length");var xe=y(pe.data,te);xe.stride[ne]=pe.stride[0],xe.stride[ne^1]=0,this.padField(this._field[ne],xe)}}else{for(ne=0;ne<2;++ne){var ye=[0,0];ye[ne]=1,this._field[ne]=y(this._field[ne].data,[te[0]+2,te[1]+2],ye,0)}this._field[0].set(0,0,0);for(var fe=0;fe<te[0];++fe)this._field[0].set(fe+1,0,fe);for(this._field[0].set(te[0]+1,0,te[0]-1),this._field[1].set(0,0,0),fe=0;fe<te[1];++fe)this._field[1].set(0,fe+1,fe);this._field[1].set(0,te[1]+1,te[1]-1)}var ae=this._field,ee=y(d.mallocFloat(ae[2].size*3*2),[3,te[0]+2,te[1]+2,2]);for(ne=0;ne<3;++ne)M(ee.pick(ne),ae[ne],"mirror");var ie=y(d.mallocFloat(ae[2].size*3),[te[0]+2,te[1]+2,3]);for(ne=0;ne<te[0]+2;++ne)for(fe=0;fe<te[1]+2;++fe){var Q=ee.get(0,ne,fe,0),ue=ee.get(0,ne,fe,1),ge=ee.get(1,ne,fe,0),Me=ee.get(1,ne,fe,1),Te=ee.get(2,ne,fe,0),je=ee.get(2,ne,fe,1),Ve=ge*je-Me*Te,Ze=Te*ue-je*Q,Ke=Q*Me-ue*ge,vt=Math.sqrt(Ve*Ve+Ze*Ze+Ke*Ke);vt<1e-8?(vt=Math.max(Math.abs(Ve),Math.abs(Ze),Math.abs(Ke)),vt<1e-8?(Ke=1,Ze=Ve=0,vt=1):vt=1/vt):vt=1/Math.sqrt(vt),ie.set(ne,fe,0,Ve*vt),ie.set(ne,fe,1,Ze*vt),ie.set(ne,fe,2,Ke*vt)}d.free(ee.data);var xt=[1/0,1/0,1/0],Pt=[-1/0,-1/0,-1/0],mt=1/0,Mt=-1/0,lt=(te[0]-1)*(te[1]-1)*6,qe=d.mallocFloat(u.nextPow2(10*lt)),Ye=0,me=0;for(ne=0;ne<te[0]-1;++ne)e:for(fe=0;fe<te[1]-1;++fe){for(var _e=0;_e<2;++_e)for(var Ae=0;Ae<2;++Ae)for(var ke=0;ke<3;++ke){var Ee=this._field[ke].get(1+ne+_e,1+fe+Ae);if(isNaN(Ee)||!isFinite(Ee))continue e}for(ke=0;ke<6;++ke){var De=ne+F[ke][0],Je=fe+F[ke][1],Ue=this._field[0].get(De+1,Je+1),at=this._field[1].get(De+1,Je+1);Ee=this._field[2].get(De+1,Je+1),Ve=ie.get(De+1,Je+1,0),Ze=ie.get(De+1,Je+1,1),Ke=ie.get(De+1,Je+1,2),j.intensity&&(rt=j.intensity.get(De,Je));var rt=j.intensity?j.intensity.get(De,Je):Ee+this.objectOffset[2];qe[Ye++]=De,qe[Ye++]=Je,qe[Ye++]=Ue,qe[Ye++]=at,qe[Ye++]=Ee,qe[Ye++]=0,qe[Ye++]=rt,qe[Ye++]=Ve,qe[Ye++]=Ze,qe[Ye++]=Ke,xt[0]=Math.min(xt[0],Ue+this.objectOffset[0]),xt[1]=Math.min(xt[1],at+this.objectOffset[1]),xt[2]=Math.min(xt[2],Ee+this.objectOffset[2]),mt=Math.min(mt,rt),Pt[0]=Math.max(Pt[0],Ue+this.objectOffset[0]),Pt[1]=Math.max(Pt[1],at+this.objectOffset[1]),Pt[2]=Math.max(Pt[2],Ee+this.objectOffset[2]),Mt=Math.max(Mt,rt),me+=1}}for(j.intensityBounds&&(mt=+j.intensityBounds[0],Mt=+j.intensityBounds[1]),ne=6;ne<Ye;ne+=10)qe[ne]=(qe[ne]-mt)/(Mt-mt);this._vertexCount=me,this._coordinateBuffer.update(qe.subarray(0,Ye)),d.freeFloat(qe),d.free(ie.data),this.bounds=[xt,Pt],this.intensity=j.intensity||this._field[2],(this.intensityBounds[0]!==mt||this.intensityBounds[1]!==Mt)&&(Y=!0),this.intensityBounds=[mt,Mt]}if("levels"in j){var ft=j.levels;for(Array.isArray(ft[0])?ft=ft.slice():ft=[[],[],ft],ne=0;ne<3;++ne)ft[ne]=ft[ne].slice(),ft[ne].sort(function(xi,bi){return xi-bi});for(ne=0;ne<3;++ne)for(fe=0;fe<ft[ne].length;++fe)ft[ne][fe]-=this.objectOffset[ne];e:for(ne=0;ne<3;++ne){if(ft[ne].length!==this.contourLevels[ne].length){Y=!0;break}for(fe=0;fe<ft[ne].length;++fe)if(ft[ne][fe]!==this.contourLevels[ne][fe]){Y=!0;break e}}this.contourLevels=ft}if(Y){ae=this._field,te=this.shape;for(var At=[],ht=0;ht<3;++ht){var Gt=this.contourLevels[ht],fr=[],gt=[],yt=[0,0,0];for(ne=0;ne<Gt.length;++ne){var kt=_(this._field[ht],Gt[ne]);fr.push(At.length/5|0),me=0;e:for(fe=0;fe<kt.cells.length;++fe){var Lt=kt.cells[fe];for(ke=0;ke<2;++ke){var Ct=kt.positions[Lt[ke]],$t=Ct[0],mr=Math.floor($t)|0,br=$t-mr,Er=Ct[1],Tr=Math.floor(Er)|0,Ur=Er-Tr,Ai=!1;t:for(var oi=0;oi<3;++oi){yt[oi]=0;var Qr=(ht+oi+1)%3;for(_e=0;_e<2;++_e){var ea=_e?br:1-br;for(De=Math.min(Math.max(mr+_e,0),te[0])|0,Ae=0;Ae<2;++Ae){var $i=Ae?Ur:1-Ur;if(Je=Math.min(Math.max(Tr+Ae,0),te[1])|0,oi<2?Ee=this._field[Qr].get(De,Je):Ee=(this.intensity.get(De,Je)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(Ee)||isNaN(Ee)){Ai=!0;break t}var ja=ea*$i;yt[oi]+=ja*Ee}}}if(!Ai)At.push(yt[0],yt[1],Ct[0],Ct[1],yt[2]),me+=1;else{if(ke>0){for(var ya=0;ya<5;++ya)At.pop();me-=1}continue e}}}gt.push(me)}this._contourOffsets[ht]=fr,this._contourCounts[ht]=gt}var pa=d.mallocFloat(At.length);for(ne=0;ne<At.length;++ne)pa[ne]=At[ne];this._contourBuffer.update(pa),d.freeFloat(pa)}},I.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var j=0;j<3;++j)d.freeFloat(this._field[j].data)},I.highlight=function(j){var q;if(!j){this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],this.highlightLevel=[-1,-1,-1];return}for(q=0;q<3;++q)this.enableHighlight[q]?this.highlightLevel[q]=j.level[q]:this.highlightLevel[q]=-1;var Y;for(this.snapToData?Y=j.dataCoordinate:Y=j.position,q=0;q<3;++q)Y[q]-=this.objectOffset[q];if(!((!this.enableDynamic[0]||Y[0]===this.dynamicLevel[0])&&(!this.enableDynamic[1]||Y[1]===this.dynamicLevel[1])&&(!this.enableDynamic[2]||Y[2]===this.dynamicLevel[2]))){for(var K=0,te=this.shape,ne=d.mallocFloat(12*te[0]*te[1]),se=0;se<3;++se){if(!this.enableDynamic[se]){this.dynamicLevel[se]=NaN,this._dynamicCounts[se]=0;continue}this.dynamicLevel[se]=Y[se];var le=(se+1)%3,ce=(se+2)%3,pe=this._field[se],xe=this._field[le],ye=this._field[ce],fe=_(pe,Y[se]),ae=fe.cells,ee=fe.positions;for(this._dynamicOffsets[se]=K,q=0;q<ae.length;++q)for(var ie=ae[q],Q=0;Q<2;++Q){var ue=ee[ie[Q]],ge=+ue[0],Me=ge|0,Te=Math.min(Me+1,te[0])|0,je=ge-Me,Ve=1-je,Ze=+ue[1],Ke=Ze|0,vt=Math.min(Ke+1,te[1])|0,xt=Ze-Ke,Pt=1-xt,mt=Ve*Pt,Mt=Ve*xt,lt=je*Pt,qe=je*xt,Ye=mt*xe.get(Me,Ke)+Mt*xe.get(Me,vt)+lt*xe.get(Te,Ke)+qe*xe.get(Te,vt),me=mt*ye.get(Me,Ke)+Mt*ye.get(Me,vt)+lt*ye.get(Te,Ke)+qe*ye.get(Te,vt);if(isNaN(Ye)||isNaN(me)){Q&&(K-=1);break}ne[2*K+0]=Ye,ne[2*K+1]=me,K+=1}this._dynamicCounts[se]=K-this._dynamicOffsets[se]}this._dynamicBuffer.update(ne.subarray(0,2*K)),d.freeFloat(ne)}};function V(j){var q=j.gl,Y=w(q),K=A(q),te=k(q),ne=b(q),se=c(q),le=f(q,[{buffer:se,size:4,stride:E,offset:0},{buffer:se,size:3,stride:E,offset:16},{buffer:se,size:3,stride:E,offset:28}]),ce=c(q),pe=f(q,[{buffer:ce,size:4,stride:20,offset:0},{buffer:ce,size:1,stride:20,offset:16}]),xe=c(q),ye=f(q,[{buffer:xe,size:2,type:q.FLOAT}]),fe=h(q,1,P,q.RGBA,q.UNSIGNED_BYTE);fe.minFilter=q.LINEAR,fe.magFilter=q.LINEAR;var ae=new z(q,[0,0],[[0,0,0],[0,0,0]],Y,K,se,le,fe,te,ne,ce,pe,xe,ye,[0,0,0]),ee={levels:[[],[],[]]};for(var ie in j)ee[ie]=j[ie];return ee.colormap=ee.colormap||"jet",ae.update(ee),ae}},7766(s,l,n){"use strict";var u=n(9618),c=n(5298),f=n(1888);s.exports=b;var h=null,d=null,p=null;function g(E){h=[E.LINEAR,E.NEAREST_MIPMAP_LINEAR,E.LINEAR_MIPMAP_NEAREST,E.LINEAR_MIPMAP_NEAREST],d=[E.NEAREST,E.LINEAR,E.NEAREST_MIPMAP_NEAREST,E.NEAREST_MIPMAP_LINEAR,E.LINEAR_MIPMAP_NEAREST,E.LINEAR_MIPMAP_LINEAR],p=[E.REPEAT,E.CLAMP_TO_EDGE,E.MIRRORED_REPEAT]}function m(E){return typeof HTMLCanvasElement<"u"&&E instanceof HTMLCanvasElement||typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement||typeof HTMLVideoElement<"u"&&E instanceof HTMLVideoElement||typeof ImageData<"u"&&E instanceof ImageData}var y=function(E,T){c.muls(E,T,255)};function _(E,T,F){var D=E.gl,R=D.getParameter(D.MAX_TEXTURE_SIZE);if(T<0||T>R||F<0||F>R)throw new Error("gl-texture2d: Invalid texture size");return E._shape=[T,F],E.bind(),D.texImage2D(D.TEXTURE_2D,0,E.format,T,F,0,E.format,E.type,null),E._mipLevels=[0],E}function v(E,T,F,D,R,P){this.gl=E,this.handle=T,this.format=R,this.type=P,this._shape=[F,D],this._mipLevels=[0],this._magFilter=E.NEAREST,this._minFilter=E.NEAREST,this._wrapS=E.CLAMP_TO_EDGE,this._wrapT=E.CLAMP_TO_EDGE,this._anisoSamples=1;var z=this,I=[this._wrapS,this._wrapT];Object.defineProperties(I,[{get:function(){return z._wrapS},set:function(B){return z.wrapS=B}},{get:function(){return z._wrapT},set:function(B){return z.wrapT=B}}]),this._wrapVector=I;var L=[this._shape[0],this._shape[1]];Object.defineProperties(L,[{get:function(){return z._shape[0]},set:function(B){return z.width=B}},{get:function(){return z._shape[1]},set:function(B){return z.height=B}}]),this._shapeVector=L}var x=v.prototype;Object.defineProperties(x,{minFilter:{get:function(){return this._minFilter},set:function(E){this.bind();var T=this.gl;if(this.type===T.FLOAT&&h.indexOf(E)>=0&&(T.getExtension("OES_texture_float_linear")||(E=T.NEAREST)),d.indexOf(E)<0)throw new Error("gl-texture2d: Unknown filter mode "+E);return T.texParameteri(T.TEXTURE_2D,T.TEXTURE_MIN_FILTER,E),this._minFilter=E}},magFilter:{get:function(){return this._magFilter},set:function(E){this.bind();var T=this.gl;if(this.type===T.FLOAT&&h.indexOf(E)>=0&&(T.getExtension("OES_texture_float_linear")||(E=T.NEAREST)),d.indexOf(E)<0)throw new Error("gl-texture2d: Unknown filter mode "+E);return T.texParameteri(T.TEXTURE_2D,T.TEXTURE_MAG_FILTER,E),this._magFilter=E}},mipSamples:{get:function(){return this._anisoSamples},set:function(E){var T=this._anisoSamples;if(this._anisoSamples=Math.max(E,1)|0,T!==this._anisoSamples){var F=this.gl.getExtension("EXT_texture_filter_anisotropic");F&&this.gl.texParameterf(this.gl.TEXTURE_2D,F.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(E){if(this.bind(),p.indexOf(E)<0)throw new Error("gl-texture2d: Unknown wrap mode "+E);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,E),this._wrapS=E}},wrapT:{get:function(){return this._wrapT},set:function(E){if(this.bind(),p.indexOf(E)<0)throw new Error("gl-texture2d: Unknown wrap mode "+E);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,E),this._wrapT=E}},wrap:{get:function(){return this._wrapVector},set:function(E){if(Array.isArray(E)||(E=[E,E]),E.length!==2)throw new Error("gl-texture2d: Must specify wrap mode for rows and columns");for(var T=0;T<2;++T)if(p.indexOf(E[T])<0)throw new Error("gl-texture2d: Unknown wrap mode "+E);this._wrapS=E[0],this._wrapT=E[1];var F=this.gl;return this.bind(),F.texParameteri(F.TEXTURE_2D,F.TEXTURE_WRAP_S,this._wrapS),F.texParameteri(F.TEXTURE_2D,F.TEXTURE_WRAP_T,this._wrapT),E}},shape:{get:function(){return this._shapeVector},set:function(E){if(!Array.isArray(E))E=[E|0,E|0];else if(E.length!==2)throw new Error("gl-texture2d: Invalid texture shape");return _(this,E[0]|0,E[1]|0),[E[0]|0,E[1]|0]}},width:{get:function(){return this._shape[0]},set:function(E){return E=E|0,_(this,E,this._shape[1]),E}},height:{get:function(){return this._shape[1]},set:function(E){return E=E|0,_(this,this._shape[0],E),E}}}),x.bind=function(E){var T=this.gl;return E!==void 0&&T.activeTexture(T.TEXTURE0+(E|0)),T.bindTexture(T.TEXTURE_2D,this.handle),E!==void 0?E|0:T.getParameter(T.ACTIVE_TEXTURE)-T.TEXTURE0},x.dispose=function(){this.gl.deleteTexture(this.handle)},x.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var E=Math.min(this._shape[0],this._shape[1]),T=0;E>0;++T,E>>>=1)this._mipLevels.indexOf(T)<0&&this._mipLevels.push(T)},x.setPixels=function(E,T,F,D){var R=this.gl;this.bind(),Array.isArray(T)?(D=F,F=T[1]|0,T=T[0]|0):(T=T||0,F=F||0),D=D||0;var P=m(E)?E:E.raw;if(P){var z=this._mipLevels.indexOf(D)<0;z?(R.texImage2D(R.TEXTURE_2D,0,this.format,this.format,this.type,P),this._mipLevels.push(D)):R.texSubImage2D(R.TEXTURE_2D,D,T,F,this.format,this.type,P)}else if(E.shape&&E.stride&&E.data){if(E.shape.length<2||T+E.shape[1]>this._shape[1]>>>D||F+E.shape[0]>this._shape[0]>>>D||T<0||F<0)throw new Error("gl-texture2d: Texture dimensions are out of bounds");M(R,T,F,D,this.format,this.type,this._mipLevels,E)}else throw new Error("gl-texture2d: Unsupported data type")};function S(E,T){return E.length===3?T[2]===1&&T[1]===E[0]*E[2]&&T[0]===E[2]:T[0]===1&&T[1]===E[0]}function M(E,T,F,D,R,P,z,I){var L=I.dtype,B=I.shape.slice();if(B.length<2||B.length>3)throw new Error("gl-texture2d: Invalid ndarray, must be 2d or 3d");var O=0,G=0,W=S(B,I.stride.slice());L==="float32"?O=E.FLOAT:L==="float64"?(O=E.FLOAT,W=!1,L="float32"):L==="uint8"?O=E.UNSIGNED_BYTE:(O=E.UNSIGNED_BYTE,W=!1,L="uint8");var X=1;if(B.length===2)G=E.LUMINANCE,B=[B[0],B[1],1],I=u(I.data,B,[I.stride[0],I.stride[1],1],I.offset);else if(B.length===3){if(B[2]===1)G=E.ALPHA;else if(B[2]===2)G=E.LUMINANCE_ALPHA;else if(B[2]===3)G=E.RGB;else if(B[2]===4)G=E.RGBA;else throw new Error("gl-texture2d: Invalid shape for pixel coords");X=B[2]}else throw new Error("gl-texture2d: Invalid shape for texture");if((G===E.LUMINANCE||G===E.ALPHA)&&(R===E.LUMINANCE||R===E.ALPHA)&&(G=R),G!==R)throw new Error("gl-texture2d: Incompatible texture format for setPixels");var Z=I.size,J=z.indexOf(D)<0;if(J&&z.push(D),O===P&&W)I.offset===0&&I.data.length===Z?J?E.texImage2D(E.TEXTURE_2D,D,R,B[0],B[1],0,R,P,I.data):E.texSubImage2D(E.TEXTURE_2D,D,T,F,B[0],B[1],R,P,I.data):J?E.texImage2D(E.TEXTURE_2D,D,R,B[0],B[1],0,R,P,I.data.subarray(I.offset,I.offset+Z)):E.texSubImage2D(E.TEXTURE_2D,D,T,F,B[0],B[1],R,P,I.data.subarray(I.offset,I.offset+Z));else{var N;P===E.FLOAT?N=f.mallocFloat32(Z):N=f.mallocUint8(Z);var H=u(N,B,[B[2],B[2]*B[0],1]);O===E.FLOAT&&P===E.UNSIGNED_BYTE?y(H,I):c.assign(H,I),J?E.texImage2D(E.TEXTURE_2D,D,R,B[0],B[1],0,R,P,N.subarray(0,Z)):E.texSubImage2D(E.TEXTURE_2D,D,T,F,B[0],B[1],R,P,N.subarray(0,Z)),P===E.FLOAT?f.freeFloat32(N):f.freeUint8(N)}}function C(E){var T=E.createTexture();return E.bindTexture(E.TEXTURE_2D,T),E.texParameteri(E.TEXTURE_2D,E.TEXTURE_MIN_FILTER,E.NEAREST),E.texParameteri(E.TEXTURE_2D,E.TEXTURE_MAG_FILTER,E.NEAREST),E.texParameteri(E.TEXTURE_2D,E.TEXTURE_WRAP_S,E.CLAMP_TO_EDGE),E.texParameteri(E.TEXTURE_2D,E.TEXTURE_WRAP_T,E.CLAMP_TO_EDGE),T}function w(E,T,F,D,R){var P=E.getParameter(E.MAX_TEXTURE_SIZE);if(T<0||T>P||F<0||F>P)throw new Error("gl-texture2d: Invalid texture shape");if(R===E.FLOAT&&!E.getExtension("OES_texture_float"))throw new Error("gl-texture2d: Floating point textures not supported on this platform");var z=C(E);return E.texImage2D(E.TEXTURE_2D,0,D,T,F,0,D,R,null),new v(E,z,T,F,D,R)}function k(E,T,F,D,R,P){var z=C(E);return E.texImage2D(E.TEXTURE_2D,0,R,R,P,T),new v(E,z,F,D,R,P)}function A(E,T){var F=T.dtype,D=T.shape.slice(),R=E.getParameter(E.MAX_TEXTURE_SIZE);if(D[0]<0||D[0]>R||D[1]<0||D[1]>R)throw new Error("gl-texture2d: Invalid texture size");var P=S(D,T.stride.slice()),z=0;F==="float32"?z=E.FLOAT:F==="float64"?(z=E.FLOAT,P=!1,F="float32"):F==="uint8"?z=E.UNSIGNED_BYTE:(z=E.UNSIGNED_BYTE,P=!1,F="uint8");var I=0;if(D.length===2)I=E.LUMINANCE,D=[D[0],D[1],1],T=u(T.data,D,[T.stride[0],T.stride[1],1],T.offset);else if(D.length===3)if(D[2]===1)I=E.ALPHA;else if(D[2]===2)I=E.LUMINANCE_ALPHA;else if(D[2]===3)I=E.RGB;else if(D[2]===4)I=E.RGBA;else throw new Error("gl-texture2d: Invalid shape for pixel coords");else throw new Error("gl-texture2d: Invalid shape for texture");z===E.FLOAT&&!E.getExtension("OES_texture_float")&&(z=E.UNSIGNED_BYTE,P=!1);var L,B,O=T.size;if(P)T.offset===0&&T.data.length===O?L=T.data:L=T.data.subarray(T.offset,T.offset+O);else{var G=[D[2],D[2]*D[0],1];B=f.malloc(O,F);var W=u(B,D,G,0);(F==="float32"||F==="float64")&&z===E.UNSIGNED_BYTE?y(W,T):c.assign(W,T),L=B.subarray(0,O)}var X=C(E);return E.texImage2D(E.TEXTURE_2D,0,I,D[0],D[1],0,I,z,L),P||f.free(B),new v(E,X,D[0],D[1],I,z)}function b(E){if(arguments.length<=1)throw new Error("gl-texture2d: Missing arguments for texture2d constructor");if(h||g(E),typeof arguments[1]=="number")return w(E,arguments[1],arguments[2],arguments[3]||E.RGBA,arguments[4]||E.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return w(E,arguments[1][0]|0,arguments[1][1]|0,arguments[2]||E.RGBA,arguments[3]||E.UNSIGNED_BYTE);if(typeof arguments[1]=="object"){var T=arguments[1],F=m(T)?T:T.raw;if(F)return k(E,F,T.width|0,T.height|0,arguments[2]||E.RGBA,arguments[3]||E.UNSIGNED_BYTE);if(T.shape&&T.data&&T.stride)return A(E,T)}throw new Error("gl-texture2d: Invalid arguments for texture2d constructor")}},1433(s){"use strict";function l(n,u,c){u?u.bind():n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,null);var f=n.getParameter(n.MAX_VERTEX_ATTRIBS)|0;if(c){if(c.length>f)throw new Error("gl-vao: Too many vertex attributes");for(var h=0;h<c.length;++h){var d=c[h];if(d.buffer){var p=d.buffer,g=d.size||4,m=d.type||n.FLOAT,y=!!d.normalized,_=d.stride||0,v=d.offset||0;p.bind(),n.enableVertexAttribArray(h),n.vertexAttribPointer(h,g,m,y,_,v)}else{if(typeof d=="number")n.vertexAttrib1f(h,d);else if(d.length===1)n.vertexAttrib1f(h,d[0]);else if(d.length===2)n.vertexAttrib2f(h,d[0],d[1]);else if(d.length===3)n.vertexAttrib3f(h,d[0],d[1],d[2]);else if(d.length===4)n.vertexAttrib4f(h,d[0],d[1],d[2],d[3]);else throw new Error("gl-vao: Invalid vertex attribute");n.disableVertexAttribArray(h)}}for(;h<f;++h)n.disableVertexAttribArray(h)}else{n.bindBuffer(n.ARRAY_BUFFER,null);for(var h=0;h<f;++h)n.disableVertexAttribArray(h)}}s.exports=l},870(s,l,n){"use strict";var u=n(1433);function c(h){this.gl=h,this._elements=null,this._attributes=null,this._elementsType=h.UNSIGNED_SHORT}c.prototype.bind=function(){u(this.gl,this._elements,this._attributes)},c.prototype.update=function(h,d,p){this._elements=d,this._attributes=h,this._elementsType=p||this.gl.UNSIGNED_SHORT},c.prototype.dispose=function(){},c.prototype.unbind=function(){},c.prototype.draw=function(h,d,p){p=p||0;var g=this.gl;this._elements?g.drawElements(h,d,this._elementsType,p):g.drawArrays(h,p,d)};function f(h){return new c(h)}s.exports=f},7518(s,l,n){"use strict";var u=n(1433);function c(d,p,g,m,y,_){this.location=d,this.dimension=p,this.a=g,this.b=m,this.c=y,this.d=_}c.prototype.bind=function(d){switch(this.dimension){case 1:d.vertexAttrib1f(this.location,this.a);break;case 2:d.vertexAttrib2f(this.location,this.a,this.b);break;case 3:d.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:d.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d);break}};function f(d,p,g){this.gl=d,this._ext=p,this.handle=g,this._attribs=[],this._useElements=!1,this._elementsType=d.UNSIGNED_SHORT}f.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var d=0;d<this._attribs.length;++d)this._attribs[d].bind(this.gl)},f.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},f.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},f.prototype.update=function(d,p,g){if(this.bind(),u(this.gl,p,d),this.unbind(),this._attribs.length=0,d)for(var m=0;m<d.length;++m){var y=d[m];typeof y=="number"?this._attribs.push(new c(m,1,y)):Array.isArray(y)&&this._attribs.push(new c(m,y.length,y[0],y[1],y[2],y[3]))}this._useElements=!!p,this._elementsType=g||this.gl.UNSIGNED_SHORT},f.prototype.draw=function(d,p,g){g=g||0;var m=this.gl;this._useElements?m.drawElements(d,p,this._elementsType,g):m.drawArrays(d,g,p)};function h(d,p){return new f(d,p,p.createVertexArrayOES())}s.exports=h},8116(s,l,n){"use strict";var u=n(7518),c=n(870);function f(d){this.bindVertexArrayOES=d.bindVertexArray.bind(d),this.createVertexArrayOES=d.createVertexArray.bind(d),this.deleteVertexArrayOES=d.deleteVertexArray.bind(d)}function h(d,p,g,m){var y=d.createVertexArray?new f(d):d.getExtension("OES_vertex_array_object"),_;return y?_=u(d,y):_=c(d),_.update(p,g,m),_}s.exports=h},5632(s){s.exports=l;function l(n,u,c){return n[0]=u[0]+c[0],n[1]=u[1]+c[1],n[2]=u[2]+c[2],n}},8192(s,l,n){s.exports=h;var u=n(2825),c=n(3536),f=n(244);function h(d,p){var g=u(d[0],d[1],d[2]),m=u(p[0],p[1],p[2]);c(g,g),c(m,m);var y=f(g,m);return y>1?0:Math.acos(y)}},9226(s){s.exports=l;function l(n,u){return n[0]=Math.ceil(u[0]),n[1]=Math.ceil(u[1]),n[2]=Math.ceil(u[2]),n}},3126(s){s.exports=l;function l(n){var u=new Float32Array(3);return u[0]=n[0],u[1]=n[1],u[2]=n[2],u}},3990(s){s.exports=l;function l(n,u){return n[0]=u[0],n[1]=u[1],n[2]=u[2],n}},1091(s){s.exports=l;function l(){var n=new Float32Array(3);return n[0]=0,n[1]=0,n[2]=0,n}},5911(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=c[0],g=c[1],m=c[2];return n[0]=h*m-d*g,n[1]=d*p-f*m,n[2]=f*g-h*p,n}},5455(s,l,n){s.exports=n(7056)},7056(s){s.exports=l;function l(n,u){var c=u[0]-n[0],f=u[1]-n[1],h=u[2]-n[2];return Math.sqrt(c*c+f*f+h*h)}},4008(s,l,n){s.exports=n(6690)},6690(s){s.exports=l;function l(n,u,c){return n[0]=u[0]/c[0],n[1]=u[1]/c[1],n[2]=u[2]/c[2],n}},244(s){s.exports=l;function l(n,u){return n[0]*u[0]+n[1]*u[1]+n[2]*u[2]}},2613(s){s.exports=1e-6},9922(s,l,n){s.exports=c;var u=n(2613);function c(f,h){var d=f[0],p=f[1],g=f[2],m=h[0],y=h[1],_=h[2];return Math.abs(d-m)<=u*Math.max(1,Math.abs(d),Math.abs(m))&&Math.abs(p-y)<=u*Math.max(1,Math.abs(p),Math.abs(y))&&Math.abs(g-_)<=u*Math.max(1,Math.abs(g),Math.abs(_))}},9265(s){s.exports=l;function l(n,u){return n[0]===u[0]&&n[1]===u[1]&&n[2]===u[2]}},2681(s){s.exports=l;function l(n,u){return n[0]=Math.floor(u[0]),n[1]=Math.floor(u[1]),n[2]=Math.floor(u[2]),n}},5137(s,l,n){s.exports=c;var u=n(1091)();function c(f,h,d,p,g,m){var y,_;for(h||(h=3),d||(d=0),p?_=Math.min(p*h+d,f.length):_=f.length,y=d;y<_;y+=h)u[0]=f[y],u[1]=f[y+1],u[2]=f[y+2],g(u,u,m),f[y]=u[0],f[y+1]=u[1],f[y+2]=u[2];return f}},2825(s){s.exports=l;function l(n,u,c){var f=new Float32Array(3);return f[0]=n,f[1]=u,f[2]=c,f}},2931(s,l,n){s.exports={EPSILON:n(2613),create:n(1091),clone:n(3126),angle:n(8192),fromValues:n(2825),copy:n(3990),set:n(1463),equals:n(9922),exactEquals:n(9265),add:n(5632),subtract:n(6843),sub:n(2229),multiply:n(5847),mul:n(4505),divide:n(6690),div:n(4008),min:n(8107),max:n(7417),floor:n(2681),ceil:n(9226),round:n(2447),scale:n(6621),scaleAndAdd:n(8489),distance:n(7056),dist:n(5455),squaredDistance:n(2953),sqrDist:n(6141),length:n(1387),len:n(868),squaredLength:n(3066),sqrLen:n(5486),negate:n(5093),inverse:n(811),normalize:n(3536),dot:n(244),cross:n(5911),lerp:n(6658),random:n(7636),transformMat4:n(5673),transformMat3:n(492),transformQuat:n(264),rotateX:n(6894),rotateY:n(109),rotateZ:n(8692),forEach:n(5137)}},811(s){s.exports=l;function l(n,u){return n[0]=1/u[0],n[1]=1/u[1],n[2]=1/u[2],n}},868(s,l,n){s.exports=n(1387)},1387(s){s.exports=l;function l(n){var u=n[0],c=n[1],f=n[2];return Math.sqrt(u*u+c*c+f*f)}},6658(s){s.exports=l;function l(n,u,c,f){var h=u[0],d=u[1],p=u[2];return n[0]=h+f*(c[0]-h),n[1]=d+f*(c[1]-d),n[2]=p+f*(c[2]-p),n}},7417(s){s.exports=l;function l(n,u,c){return n[0]=Math.max(u[0],c[0]),n[1]=Math.max(u[1],c[1]),n[2]=Math.max(u[2],c[2]),n}},8107(s){s.exports=l;function l(n,u,c){return n[0]=Math.min(u[0],c[0]),n[1]=Math.min(u[1],c[1]),n[2]=Math.min(u[2],c[2]),n}},4505(s,l,n){s.exports=n(5847)},5847(s){s.exports=l;function l(n,u,c){return n[0]=u[0]*c[0],n[1]=u[1]*c[1],n[2]=u[2]*c[2],n}},5093(s){s.exports=l;function l(n,u){return n[0]=-u[0],n[1]=-u[1],n[2]=-u[2],n}},3536(s){s.exports=l;function l(n,u){var c=u[0],f=u[1],h=u[2],d=c*c+f*f+h*h;return d>0&&(d=1/Math.sqrt(d),n[0]=u[0]*d,n[1]=u[1]*d,n[2]=u[2]*d),n}},7636(s){s.exports=l;function l(n,u){u=u||1;var c=Math.random()*2*Math.PI,f=Math.random()*2-1,h=Math.sqrt(1-f*f)*u;return n[0]=Math.cos(c)*h,n[1]=Math.sin(c)*h,n[2]=f*u,n}},6894(s){s.exports=l;function l(n,u,c,f){var h=c[1],d=c[2],p=u[1]-h,g=u[2]-d,m=Math.sin(f),y=Math.cos(f);return n[0]=u[0],n[1]=h+p*y-g*m,n[2]=d+p*m+g*y,n}},109(s){s.exports=l;function l(n,u,c,f){var h=c[0],d=c[2],p=u[0]-h,g=u[2]-d,m=Math.sin(f),y=Math.cos(f);return n[0]=h+g*m+p*y,n[1]=u[1],n[2]=d+g*y-p*m,n}},8692(s){s.exports=l;function l(n,u,c,f){var h=c[0],d=c[1],p=u[0]-h,g=u[1]-d,m=Math.sin(f),y=Math.cos(f);return n[0]=h+p*y-g*m,n[1]=d+p*m+g*y,n[2]=u[2],n}},2447(s){s.exports=l;function l(n,u){return n[0]=Math.round(u[0]),n[1]=Math.round(u[1]),n[2]=Math.round(u[2]),n}},6621(s){s.exports=l;function l(n,u,c){return n[0]=u[0]*c,n[1]=u[1]*c,n[2]=u[2]*c,n}},8489(s){s.exports=l;function l(n,u,c,f){return n[0]=u[0]+c[0]*f,n[1]=u[1]+c[1]*f,n[2]=u[2]+c[2]*f,n}},1463(s){s.exports=l;function l(n,u,c,f){return n[0]=u,n[1]=c,n[2]=f,n}},6141(s,l,n){s.exports=n(2953)},5486(s,l,n){s.exports=n(3066)},2953(s){s.exports=l;function l(n,u){var c=u[0]-n[0],f=u[1]-n[1],h=u[2]-n[2];return c*c+f*f+h*h}},3066(s){s.exports=l;function l(n){var u=n[0],c=n[1],f=n[2];return u*u+c*c+f*f}},2229(s,l,n){s.exports=n(6843)},6843(s){s.exports=l;function l(n,u,c){return n[0]=u[0]-c[0],n[1]=u[1]-c[1],n[2]=u[2]-c[2],n}},492(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2];return n[0]=f*c[0]+h*c[3]+d*c[6],n[1]=f*c[1]+h*c[4]+d*c[7],n[2]=f*c[2]+h*c[5]+d*c[8],n}},5673(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=c[3]*f+c[7]*h+c[11]*d+c[15];return p=p||1,n[0]=(c[0]*f+c[4]*h+c[8]*d+c[12])/p,n[1]=(c[1]*f+c[5]*h+c[9]*d+c[13])/p,n[2]=(c[2]*f+c[6]*h+c[10]*d+c[14])/p,n}},264(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=c[0],g=c[1],m=c[2],y=c[3],_=g*d-m*h,v=m*f-p*d,x=p*h-g*f;return _*=2,v*=2,x*=2,n[0]=f+y*_+g*x-m*v,n[1]=h+y*v+m*_-p*x,n[2]=d+y*x+p*v-g*_,n}},4361(s){s.exports=l;function l(n,u,c){return n[0]=u[0]+c[0],n[1]=u[1]+c[1],n[2]=u[2]+c[2],n[3]=u[3]+c[3],n}},2335(s){s.exports=l;function l(n){var u=new Float32Array(4);return u[0]=n[0],u[1]=n[1],u[2]=n[2],u[3]=n[3],u}},2933(s){s.exports=l;function l(n,u){return n[0]=u[0],n[1]=u[1],n[2]=u[2],n[3]=u[3],n}},7536(s){s.exports=l;function l(){var n=new Float32Array(4);return n[0]=0,n[1]=0,n[2]=0,n[3]=0,n}},4691(s){s.exports=l;function l(n,u){var c=u[0]-n[0],f=u[1]-n[1],h=u[2]-n[2],d=u[3]-n[3];return Math.sqrt(c*c+f*f+h*h+d*d)}},1373(s){s.exports=l;function l(n,u,c){return n[0]=u[0]/c[0],n[1]=u[1]/c[1],n[2]=u[2]/c[2],n[3]=u[3]/c[3],n}},3750(s){s.exports=l;function l(n,u){return n[0]*u[0]+n[1]*u[1]+n[2]*u[2]+n[3]*u[3]}},3390(s){s.exports=l;function l(n,u,c,f){var h=new Float32Array(4);return h[0]=n,h[1]=u,h[2]=c,h[3]=f,h}},9970(s,l,n){s.exports={create:n(7536),clone:n(2335),fromValues:n(3390),copy:n(2933),set:n(4578),add:n(4361),subtract:n(6860),multiply:n(3576),divide:n(1373),min:n(2334),max:n(160),scale:n(9288),scaleAndAdd:n(4844),distance:n(4691),squaredDistance:n(7960),length:n(6808),squaredLength:n(483),negate:n(1498),inverse:n(4494),normalize:n(5177),dot:n(3750),lerp:n(2573),random:n(9131),transformMat4:n(5352),transformQuat:n(4041)}},4494(s){s.exports=l;function l(n,u){return n[0]=1/u[0],n[1]=1/u[1],n[2]=1/u[2],n[3]=1/u[3],n}},6808(s){s.exports=l;function l(n){var u=n[0],c=n[1],f=n[2],h=n[3];return Math.sqrt(u*u+c*c+f*f+h*h)}},2573(s){s.exports=l;function l(n,u,c,f){var h=u[0],d=u[1],p=u[2],g=u[3];return n[0]=h+f*(c[0]-h),n[1]=d+f*(c[1]-d),n[2]=p+f*(c[2]-p),n[3]=g+f*(c[3]-g),n}},160(s){s.exports=l;function l(n,u,c){return n[0]=Math.max(u[0],c[0]),n[1]=Math.max(u[1],c[1]),n[2]=Math.max(u[2],c[2]),n[3]=Math.max(u[3],c[3]),n}},2334(s){s.exports=l;function l(n,u,c){return n[0]=Math.min(u[0],c[0]),n[1]=Math.min(u[1],c[1]),n[2]=Math.min(u[2],c[2]),n[3]=Math.min(u[3],c[3]),n}},3576(s){s.exports=l;function l(n,u,c){return n[0]=u[0]*c[0],n[1]=u[1]*c[1],n[2]=u[2]*c[2],n[3]=u[3]*c[3],n}},1498(s){s.exports=l;function l(n,u){return n[0]=-u[0],n[1]=-u[1],n[2]=-u[2],n[3]=-u[3],n}},5177(s){s.exports=l;function l(n,u){var c=u[0],f=u[1],h=u[2],d=u[3],p=c*c+f*f+h*h+d*d;return p>0&&(p=1/Math.sqrt(p),n[0]=c*p,n[1]=f*p,n[2]=h*p,n[3]=d*p),n}},9131(s,l,n){var u=n(5177),c=n(9288);s.exports=f;function f(h,d){return d=d||1,h[0]=Math.random(),h[1]=Math.random(),h[2]=Math.random(),h[3]=Math.random(),u(h,h),c(h,h,d),h}},9288(s){s.exports=l;function l(n,u,c){return n[0]=u[0]*c,n[1]=u[1]*c,n[2]=u[2]*c,n[3]=u[3]*c,n}},4844(s){s.exports=l;function l(n,u,c,f){return n[0]=u[0]+c[0]*f,n[1]=u[1]+c[1]*f,n[2]=u[2]+c[2]*f,n[3]=u[3]+c[3]*f,n}},4578(s){s.exports=l;function l(n,u,c,f,h){return n[0]=u,n[1]=c,n[2]=f,n[3]=h,n}},7960(s){s.exports=l;function l(n,u){var c=u[0]-n[0],f=u[1]-n[1],h=u[2]-n[2],d=u[3]-n[3];return c*c+f*f+h*h+d*d}},483(s){s.exports=l;function l(n){var u=n[0],c=n[1],f=n[2],h=n[3];return u*u+c*c+f*f+h*h}},6860(s){s.exports=l;function l(n,u,c){return n[0]=u[0]-c[0],n[1]=u[1]-c[1],n[2]=u[2]-c[2],n[3]=u[3]-c[3],n}},5352(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=u[3];return n[0]=c[0]*f+c[4]*h+c[8]*d+c[12]*p,n[1]=c[1]*f+c[5]*h+c[9]*d+c[13]*p,n[2]=c[2]*f+c[6]*h+c[10]*d+c[14]*p,n[3]=c[3]*f+c[7]*h+c[11]*d+c[15]*p,n}},4041(s){s.exports=l;function l(n,u,c){var f=u[0],h=u[1],d=u[2],p=c[0],g=c[1],m=c[2],y=c[3],_=y*f+g*d-m*h,v=y*h+m*f-p*d,x=y*d+p*h-g*f,S=-p*f-g*h-m*d;return n[0]=_*y+S*-p+v*-m-x*-g,n[1]=v*y+S*-g+x*-p-_*-m,n[2]=x*y+S*-m+_*-g-v*-p,n[3]=u[3],n}},1848(s,l,n){var u=n(4905),c=n(6468);s.exports=f;function f(h){for(var d=Array.isArray(h)?h:u(h),p=0;p<d.length;p++){var g=d[p];if(g.type==="preprocessor"){var m=g.data.match(/\#define\s+SHADER_NAME(_B64)?\s+(.+)$/);if(m&&m[2]){var y=m[1],_=m[2];return(y?c(_):_).trim()}}}}},5874(s,l,n){s.exports=T;var u=n(620),c=n(7827),f=n(6852),h=n(7932),d=n(3508),p=999,g=9999,m=0,y=1,_=2,v=3,x=4,S=5,M=6,C=7,w=8,k=9,A=10,b=11,E=["block-comment","line-comment","preprocessor","operator","integer","float","ident","builtin","keyword","whitespace","eof","integer"];function T(F){var D=0,R=0,P=p,z,I,L=[],B=[],O=0,G=0,W=1,X=0,Z=0,J=!1,N=!1,H="",$;F=F||{};var U=f,V=u;F.version==="300 es"&&(U=d,V=h);for(var j={},q={},D=0;D<U.length;D++)j[U[D]]=!0;for(var D=0;D<V.length;D++)q[V[D]]=!0;return function(Q){return B=[],Q!==null?K(Q):te()};function Y(Q){Q.length&&B.push({type:E[P],data:Q,position:Z,line:W,column:X})}function K(Q){D=0,Q.toString&&(Q=Q.toString()),H+=Q.replace(/\r
/g,`
+`),$=H.length;for(var ue;z=H[D],D<$;){switch(ue=D,P){case m:D=pe();break;case y:D=ce();break;case _:D=le();break;case v:D=xe();break;case x:D=ae();break;case b:D=fe();break;case S:D=ee();break;case g:D=ie();break;case k:D=se();break;case p:D=ne();break}ue!==D&&(H[ue]===`
+`?(X=0,++W):++X)}return R+=D,H=H.slice(D),B}function te(Q){return L.length&&Y(L.join("")),P=A,Y("(eof)"),B}function ne(){return L=L.length?[]:L,I==="/"&&z==="*"?(Z=R+D-1,P=m,I=z,D+1):I==="/"&&z==="/"?(Z=R+D-1,P=y,I=z,D+1):z==="#"?(P=_,Z=R+D,D):/\s/.test(z)?(P=k,Z=R+D,D):(J=/\d/.test(z),N=/[^\w_]/.test(z),Z=R+D,P=J?x:N?v:g,D)}function se(){return/[^\s]/g.test(z)?(Y(L.join("")),P=p,D):(L.push(z),I=z,D+1)}function le(){return(z==="\r"||z===`
+`)&&I!=="\\"?(Y(L.join("")),P=p,D):(L.push(z),I=z,D+1)}function ce(){return le()}function pe(){return z==="/"&&I==="*"?(L.push(z),Y(L.join("")),P=p,D+1):(L.push(z),I=z,D+1)}function xe(){if(I==="."&&/\d/.test(z))return P=S,D;if(I==="/"&&z==="*")return P=m,D;if(I==="/"&&z==="/")return P=y,D;if(z==="."&&L.length){for(;ye(L););return P=S,D}if(z===";"||z===")"||z==="("){if(L.length)for(;ye(L););return Y(z),P=p,D+1}var Q=L.length===2&&z!=="=";if(/[\w_\d\s]/.test(z)||Q){for(;ye(L););return P=p,D}return L.push(z),I=z,D+1}function ye(Q){var ue=0,ge,Me;do{if(ge=c.indexOf(Q.slice(0,Q.length+ue).join("")),Me=c[ge],ge===-1){if(ue--+Q.length>0)continue;Me=Q.slice(0,1).join("")}return Y(Me),Z+=Me.length,L=L.slice(Me.length),L.length}while(!0)}function fe(){return/[^a-fA-F0-9]/.test(z)?(Y(L.join("")),P=p,D):(L.push(z),I=z,D+1)}function ae(){return z==="."||/[eE]/.test(z)?(L.push(z),P=S,I=z,D+1):z==="x"&&L.length===1&&L[0]==="0"?(P=b,L.push(z),I=z,D+1):/[^\d]/.test(z)?(Y(L.join("")),P=p,D):(L.push(z),I=z,D+1)}function ee(){return z==="f"&&(L.push(z),I=z,D+=1),/[eE]/.test(z)||(z==="-"||z==="+")&&/[eE]/.test(I)?(L.push(z),I=z,D+1):/[^\d]/.test(z)?(Y(L.join("")),P=p,D):(L.push(z),I=z,D+1)}function ie(){if(/[^\d\w_]/.test(z)){var Q=L.join("");return q[Q]?P=w:j[Q]?P=C:P=M,Y(L.join("")),P=p,D}return L.push(z),I=z,D+1}}},3508(s,l,n){var u=n(6852);u=u.slice().filter(function(c){return!/^(gl\_|texture)/.test(c)}),s.exports=u.concat(["gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","trunc","round","roundEven","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","outerProduct","transpose","determinant","inverse","texture","textureSize","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset"])},6852(s){s.exports=["abs","acos","all","any","asin","atan","ceil","clamp","cos","cross","dFdx","dFdy","degrees","distance","dot","equal","exp","exp2","faceforward","floor","fract","gl_BackColor","gl_BackLightModelProduct","gl_BackLightProduct","gl_BackMaterial","gl_BackSecondaryColor","gl_ClipPlane","gl_ClipVertex","gl_Color","gl_DepthRange","gl_DepthRangeParameters","gl_EyePlaneQ","gl_EyePlaneR","gl_EyePlaneS","gl_EyePlaneT","gl_Fog","gl_FogCoord","gl_FogFragCoord","gl_FogParameters","gl_FragColor","gl_FragCoord","gl_FragData","gl_FragDepth","gl_FragDepthEXT","gl_FrontColor","gl_FrontFacing","gl_FrontLightModelProduct","gl_FrontLightProduct","gl_FrontMaterial","gl_FrontSecondaryColor","gl_LightModel","gl_LightModelParameters","gl_LightModelProducts","gl_LightProducts","gl_LightSource","gl_LightSourceParameters","gl_MaterialParameters","gl_MaxClipPlanes","gl_MaxCombinedTextureImageUnits","gl_MaxDrawBuffers","gl_MaxFragmentUniformComponents","gl_MaxLights","gl_MaxTextureCoords","gl_MaxTextureImageUnits","gl_MaxTextureUnits","gl_MaxVaryingFloats","gl_MaxVertexAttribs","gl_MaxVertexTextureImageUnits","gl_MaxVertexUniformComponents","gl_ModelViewMatrix","gl_ModelViewMatrixInverse","gl_ModelViewMatrixInverseTranspose","gl_ModelViewMatrixTranspose","gl_ModelViewProjectionMatrix","gl_ModelViewProjectionMatrixInverse","gl_ModelViewProjectionMatrixInverseTranspose","gl_ModelViewProjectionMatrixTranspose","gl_MultiTexCoord0","gl_MultiTexCoord1","gl_MultiTexCoord2","gl_MultiTexCoord3","gl_MultiTexCoord4","gl_MultiTexCoord5","gl_MultiTexCoord6","gl_MultiTexCoord7","gl_Normal","gl_NormalMatrix","gl_NormalScale","gl_ObjectPlaneQ","gl_ObjectPlaneR","gl_ObjectPlaneS","gl_ObjectPlaneT","gl_Point","gl_PointCoord","gl_PointParameters","gl_PointSize","gl_Position","gl_ProjectionMatrix","gl_ProjectionMatrixInverse","gl_ProjectionMatrixInverseTranspose","gl_ProjectionMatrixTranspose","gl_SecondaryColor","gl_TexCoord","gl_TextureEnvColor","gl_TextureMatrix","gl_TextureMatrixInverse","gl_TextureMatrixInverseTranspose","gl_TextureMatrixTranspose","gl_Vertex","greaterThan","greaterThanEqual","inversesqrt","length","lessThan","lessThanEqual","log","log2","matrixCompMult","max","min","mix","mod","normalize","not","notEqual","pow","radians","reflect","refract","sign","sin","smoothstep","sqrt","step","tan","texture2D","texture2DLod","texture2DProj","texture2DProjLod","textureCube","textureCubeLod","texture2DLodEXT","texture2DProjLodEXT","textureCubeLodEXT","texture2DGradEXT","texture2DProjGradEXT","textureCubeGradEXT"]},7932(s,l,n){var u=n(620);s.exports=u.slice().concat(["layout","centroid","smooth","case","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","uvec2","uvec3","uvec4","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","coherent","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","image1DShadow","image2DShadow","image1DArrayShadow","image2DArrayShadow","imageBuffer","iimageBuffer","uimageBuffer","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray"])},620(s){s.exports=["precision","highp","mediump","lowp","attribute","const","uniform","varying","break","continue","do","for","while","if","else","in","out","inout","float","int","uint","void","bool","true","false","discard","return","mat2","mat3","mat4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","struct","asm","class","union","enum","typedef","template","this","packed","goto","switch","default","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler2DRect","sampler3DRect","sampler2DRectShadow","sizeof","cast","namespace","using"]},7827(s){s.exports=["<<=",">>=","++","--","<<",">>","<=",">=","==","!=","&&","||","+=","-=","*=","/=","%=","&=","^^","^=","|=","(",")","[","]",".","!","~","*","/","%","+","-","<",">","&","^","|","?",":","=",",",";","{","}"]},4905(s,l,n){var u=n(5874);s.exports=c;function c(f,h){var d=u(h),p=[];return p=p.concat(d(f)),p=p.concat(d(null)),p}},3236(s){s.exports=function(l){typeof l=="string"&&(l=[l]);for(var n=[].slice.call(arguments,1),u=[],c=0;c<l.length-1;c++)u.push(l[c],n[c]||"");return u.push(l[c]),u.join("")}},7520(s,l,n){"use strict";var u=n(9507);function c(){var f=!1;try{var h=Object.defineProperty({},"passive",{get:function(){f=!0}});window.addEventListener("test",null,h),window.removeEventListener("test",null,h)}catch{f=!1}return f}s.exports=u&&c()},3778(s,l){l.read=function(n,u,c,f,h){var d,p,g=h*8-f-1,m=(1<<g)-1,y=m>>1,_=-7,v=c?h-1:0,x=c?-1:1,S=n[u+v];for(v+=x,d=S&(1<<-_)-1,S>>=-_,_+=g;_>0;d=d*256+n[u+v],v+=x,_-=8);for(p=d&(1<<-_)-1,d>>=-_,_+=f;_>0;p=p*256+n[u+v],v+=x,_-=8);if(d===0)d=1-y;else{if(d===m)return p?NaN:(S?-1:1)*(1/0);p=p+Math.pow(2,f),d=d-y}return(S?-1:1)*p*Math.pow(2,d-f)},l.write=function(n,u,c,f,h,d){var p,g,m,y=d*8-h-1,_=(1<<y)-1,v=_>>1,x=h===23?Math.pow(2,-24)-Math.pow(2,-77):0,S=f?0:d-1,M=f?1:-1,C=u<0||u===0&&1/u<0?1:0;for(u=Math.abs(u),isNaN(u)||u===1/0?(g=isNaN(u)?1:0,p=_):(p=Math.floor(Math.log(u)/Math.LN2),u*(m=Math.pow(2,-p))<1&&(p--,m*=2),p+v>=1?u+=x/m:u+=x*Math.pow(2,1-v),u*m>=2&&(p++,m/=2),p+v>=_?(g=0,p=_):p+v>=1?(g=(u*m-1)*Math.pow(2,h),p=p+v):(g=u*Math.pow(2,v-1)*Math.pow(2,h),p=0));h>=8;n[c+S]=g&255,S+=M,g/=256,h-=8);for(p=p<<h|g,y+=h;y>0;n[c+S]=p&255,S+=M,p/=256,y-=8);n[c+S-M]|=C*128}},8954(s,l,n){"use strict";s.exports=v;var u=n(3250),c=n(6803).Fw;function f(x,S,M){this.vertices=x,this.adjacent=S,this.boundary=M,this.lastVisited=-1}f.prototype.flip=function(){var x=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=x;var S=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=S};function h(x,S,M){this.vertices=x,this.cell=S,this.index=M}function d(x,S){return c(x.vertices,S.vertices)}function p(x){return function(){var S=this.tuple;return x.apply(this,S)}}function g(x){var S=u[x+1];return S||(S=u),p(S)}var m=[];function y(x,S,M){this.dimension=x,this.vertices=S,this.simplices=M,this.interior=M.filter(function(k){return!k.boundary}),this.tuple=new Array(x+1);for(var C=0;C<=x;++C)this.tuple[C]=this.vertices[C];var w=m[x];w||(w=m[x]=g(x)),this.orient=w}var _=y.prototype;_.handleBoundaryDegeneracy=function(x,S){var M=this.dimension,C=this.vertices.length-1,w=this.tuple,k=this.vertices,A=[x];for(x.lastVisited=-C;A.length>0;){x=A.pop();for(var b=x.adjacent,E=0;E<=M;++E){var T=b[E];if(!(!T.boundary||T.lastVisited<=-C)){for(var F=T.vertices,D=0;D<=M;++D){var R=F[D];R<0?w[D]=S:w[D]=k[R]}var P=this.orient();if(P>0)return T;T.lastVisited=-C,P===0&&A.push(T)}}}return null},_.walk=function(x,S){var M=this.vertices.length-1,C=this.dimension,w=this.vertices,k=this.tuple,A=S?this.interior.length*Math.random()|0:this.interior.length-1,b=this.interior[A];e:for(;!b.boundary;){for(var E=b.vertices,T=b.adjacent,F=0;F<=C;++F)k[F]=w[E[F]];b.lastVisited=M;for(var F=0;F<=C;++F){var D=T[F];if(!(D.lastVisited>=M)){var R=k[F];k[F]=x;var P=this.orient();if(k[F]=R,P<0){b=D;continue e}else D.boundary?D.lastVisited=-M:D.lastVisited=M}}return}return b},_.addPeaks=function(x,S){var M=this.vertices.length-1,C=this.dimension,w=this.vertices,k=this.tuple,A=this.interior,b=this.simplices,E=[S];S.lastVisited=M,S.vertices[S.vertices.indexOf(-1)]=M,S.boundary=!1,A.push(S);for(var T=[];E.length>0;){var S=E.pop(),F=S.vertices,D=S.adjacent,R=F.indexOf(M);if(!(R<0)){for(var P=0;P<=C;++P)if(P!==R){var z=D[P];if(!(!z.boundary||z.lastVisited>=M)){var I=z.vertices;if(z.lastVisited!==-M){for(var L=0,B=0;B<=C;++B)I[B]<0?(L=B,k[B]=x):k[B]=w[I[B]];var O=this.orient();if(O>0){I[L]=M,z.boundary=!1,A.push(z),E.push(z),z.lastVisited=M;continue}else z.lastVisited=-M}var G=z.adjacent,W=F.slice(),X=D.slice(),Z=new f(W,X,!0);b.push(Z);var J=G.indexOf(S);if(!(J<0)){G[J]=Z,X[R]=z,W[P]=-1,X[P]=S,D[P]=Z,Z.flip();for(var B=0;B<=C;++B){var N=W[B];if(!(N<0||N===M)){for(var H=new Array(C-1),$=0,U=0;U<=C;++U){var V=W[U];V<0||U===B||(H[$++]=V)}T.push(new h(H,Z,B))}}}}}}}T.sort(d);for(var P=0;P+1<T.length;P+=2){var j=T[P],q=T[P+1],Y=j.index,K=q.index;Y<0||K<0||(j.cell.adjacent[j.index]=q.cell,q.cell.adjacent[q.index]=j.cell)}},_.insert=function(x,S){var M=this.vertices;M.push(x);var C=this.walk(x,S);if(C){for(var w=this.dimension,k=this.tuple,A=0;A<=w;++A){var b=C.vertices[A];b<0?k[A]=x:k[A]=M[b]}var E=this.orient(k);E<0||E===0&&(C=this.handleBoundaryDegeneracy(C,x),!C)||this.addPeaks(x,C)}},_.boundary=function(){for(var x=this.dimension,S=[],M=this.simplices,C=M.length,w=0;w<C;++w){var k=M[w];if(k.boundary){for(var A=new Array(x),b=k.vertices,E=0,T=0,F=0;F<=x;++F)b[F]>=0?A[E++]=b[F]:T=F&1;if(T===(x&1)){var D=A[0];A[0]=A[1],A[1]=D}S.push(A)}}return S};function v(x,S){var M=x.length;if(M===0)throw new Error("Must have at least d+1 points");var C=x[0].length;if(M<=C)throw new Error("Must input at least d+1 points");var w=x.slice(0,C+1),k=u.apply(void 0,w);if(k===0)throw new Error("Input not in general position");for(var A=new Array(C+1),b=0;b<=C;++b)A[b]=b;k<0&&(A[0]=1,A[1]=0);for(var E=new f(A,new Array(C+1),!1),T=E.adjacent,F=new Array(C+2),b=0;b<=C;++b){for(var D=A.slice(),R=0;R<=C;++R)R===b&&(D[R]=-1);var P=D[0];D[0]=D[1],D[1]=P;var z=new f(D,new Array(C+1),!0);T[b]=z,F[b]=z}F[C+1]=E;for(var b=0;b<=C;++b)for(var D=T[b].vertices,I=T[b].adjacent,R=0;R<=C;++R){var L=D[R];if(L<0){I[R]=E;continue}for(var B=0;B<=C;++B)T[B].vertices.indexOf(L)<0&&(I[R]=T[B])}for(var O=new y(C,w,F),G=!!S,b=C+1;b<M;++b)O.insert(x[b],G);return O.boundary()}},3352(s,l,n){"use strict";var u=n(2478),c=0,f=1,h=2;s.exports=E;function d(T,F,D,R,P){this.mid=T,this.left=F,this.right=D,this.leftPoints=R,this.rightPoints=P,this.count=(F?F.count:0)+(D?D.count:0)+R.length}var p=d.prototype;function g(T,F){T.mid=F.mid,T.left=F.left,T.right=F.right,T.leftPoints=F.leftPoints,T.rightPoints=F.rightPoints,T.count=F.count}function m(T,F){var D=k(F);T.mid=D.mid,T.left=D.left,T.right=D.right,T.leftPoints=D.leftPoints,T.rightPoints=D.rightPoints,T.count=D.count}function y(T,F){var D=T.intervals([]);D.push(F),m(T,D)}function _(T,F){var D=T.intervals([]),R=D.indexOf(F);return R<0?c:(D.splice(R,1),m(T,D),f)}p.intervals=function(T){return T.push.apply(T,this.leftPoints),this.left&&this.left.intervals(T),this.right&&this.right.intervals(T),T},p.insert=function(T){var F=this.count-this.leftPoints.length;if(this.count+=1,T[1]<this.mid)this.left?4*(this.left.count+1)>3*(F+1)?y(this,T):this.left.insert(T):this.left=k([T]);else if(T[0]>this.mid)this.right?4*(this.right.count+1)>3*(F+1)?y(this,T):this.right.insert(T):this.right=k([T]);else{var D=u.ge(this.leftPoints,T,C),R=u.ge(this.rightPoints,T,w);this.leftPoints.splice(D,0,T),this.rightPoints.splice(R,0,T)}},p.remove=function(T){var F=this.count-this.leftPoints;if(T[1]<this.mid){if(!this.left)return c;var D=this.right?this.right.count:0;if(4*D>3*(F-1))return _(this,T);var R=this.left.remove(T);return R===h?(this.left=null,this.count-=1,f):(R===f&&(this.count-=1),R)}else if(T[0]>this.mid){if(!this.right)return c;var P=this.left?this.left.count:0;if(4*P>3*(F-1))return _(this,T);var R=this.right.remove(T);return R===h?(this.right=null,this.count-=1,f):(R===f&&(this.count-=1),R)}else{if(this.count===1)return this.leftPoints[0]===T?h:c;if(this.leftPoints.length===1&&this.leftPoints[0]===T){if(this.left&&this.right){for(var z=this,I=this.left;I.right;)z=I,I=I.right;if(z===this)I.right=this.right;else{var L=this.left,R=this.right;z.count-=I.count,z.right=I.left,I.left=L,I.right=R}g(this,I),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?g(this,this.left):g(this,this.right);return f}for(var L=u.ge(this.leftPoints,T,C);L<this.leftPoints.length&&this.leftPoints[L][0]===T[0];++L)if(this.leftPoints[L]===T){this.count-=1,this.leftPoints.splice(L,1);for(var R=u.ge(this.rightPoints,T,w);R<this.rightPoints.length&&this.rightPoints[R][1]===T[1];++R)if(this.rightPoints[R]===T)return this.rightPoints.splice(R,1),f}return c}};function v(T,F,D){for(var R=0;R<T.length&&T[R][0]<=F;++R){var P=D(T[R]);if(P)return P}}function x(T,F,D){for(var R=T.length-1;R>=0&&T[R][1]>=F;--R){var P=D(T[R]);if(P)return P}}function S(T,F){for(var D=0;D<T.length;++D){var R=F(T[D]);if(R)return R}}p.queryPoint=function(T,F){if(T<this.mid){if(this.left){var D=this.left.queryPoint(T,F);if(D)return D}return v(this.leftPoints,T,F)}else if(T>this.mid){if(this.right){var D=this.right.queryPoint(T,F);if(D)return D}return x(this.rightPoints,T,F)}else return S(this.leftPoints,F)},p.queryInterval=function(T,F,D){if(T<this.mid&&this.left){var R=this.left.queryInterval(T,F,D);if(R)return R}if(F>this.mid&&this.right){var R=this.right.queryInterval(T,F,D);if(R)return R}return F<this.mid?v(this.leftPoints,F,D):T>this.mid?x(this.rightPoints,T,D):S(this.leftPoints,D)};function M(T,F){return T-F}function C(T,F){var D=T[0]-F[0];return D||T[1]-F[1]}function w(T,F){var D=T[1]-F[1];return D||T[0]-F[0]}function k(T){if(T.length===0)return null;for(var F=[],D=0;D<T.length;++D)F.push(T[D][0],T[D][1]);F.sort(M);for(var R=F[F.length>>1],P=[],z=[],I=[],D=0;D<T.length;++D){var L=T[D];L[1]<R?P.push(L):R<L[0]?z.push(L):I.push(L)}var B=I,O=I.slice();return B.sort(C),O.sort(w),new d(R,k(P),k(z),B,O)}function A(T){this.root=T}var b=A.prototype;b.insert=function(T){this.root?this.root.insert(T):this.root=new d(T[0],null,null,[T],[T])},b.remove=function(T){if(this.root){var F=this.root.remove(T);return F===h&&(this.root=null),F!==c}return!1},b.queryPoint=function(T,F){if(this.root)return this.root.queryPoint(T,F)},b.queryInterval=function(T,F,D){if(T<=F&&this.root)return this.root.queryInterval(T,F,D)},Object.defineProperty(b,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(b,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}});function E(T){return!T||T.length===0?new A(null):new A(k(T))}},9507(s){s.exports=!0},7163(s){s.exports=function(u){return u!=null&&(l(u)||n(u)||!!u._isBuffer)};function l(u){return!!u.constructor&&typeof u.constructor.isBuffer=="function"&&u.constructor.isBuffer(u)}function n(u){return typeof u.readFloatLE=="function"&&typeof u.slice=="function"&&l(u.slice(0,0))}},2431(s){"use strict";s.exports=c,s.exports.isMobile=c,s.exports.default=c;let l=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|redmi|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,n=/CrOS/,u=/android|ipad|playbook|silk/i;function c(f){f||(f={});let h=f.ua;if(!h&&typeof navigator<"u"&&(h=navigator.userAgent),h&&h.headers&&typeof h.headers["user-agent"]=="string"&&(h=h.headers["user-agent"]),typeof h!="string")return!1;let d=l.test(h)&&!n.test(h)||!!f.tablet&&u.test(h);return!d&&f.tablet&&f.featureDetect&&navigator&&navigator.maxTouchPoints>1&&h.indexOf("Macintosh")!==-1&&h.indexOf("Safari")!==-1&&(d=!0),d}},5219(s){"use strict";s.exports=function(l){for(var n=l.length,u,c=0;c<n;c++)if(u=l.charCodeAt(c),(u<9||u>13)&&u!==32&&u!==133&&u!==160&&u!==5760&&u!==6158&&(u<8192||u>8205)&&u!==8232&&u!==8233&&u!==8239&&u!==8287&&u!==8288&&u!==12288&&u!==65279)return!1;return!0}},395(s){function l(n,u,c){return n*(1-c)+u*c}s.exports=l},2652(s,l,n){var u=n(4335),c=n(6864),f=n(1903),h=n(9921),d=n(7608),p=n(5665),g={length:n(1387),normalize:n(3536),dot:n(244),cross:n(5911)},m=c(),y=c(),_=[0,0,0,0],v=[[0,0,0],[0,0,0],[0,0,0]],x=[0,0,0];s.exports=function(k,A,b,E,T,F){if(A||(A=[0,0,0]),b||(b=[0,0,0]),E||(E=[0,0,0]),T||(T=[0,0,0,1]),F||(F=[0,0,0,1]),!u(m,k)||(f(y,m),y[3]=0,y[7]=0,y[11]=0,y[15]=1,Math.abs(h(y)<1e-8)))return!1;var D=m[3],R=m[7],P=m[11],z=m[12],I=m[13],L=m[14],B=m[15];if(D!==0||R!==0||P!==0){_[0]=D,_[1]=R,_[2]=P,_[3]=B;var O=d(y,y);if(!O)return!1;p(y,y),S(T,_,y)}else T[0]=T[1]=T[2]=0,T[3]=1;if(A[0]=z,A[1]=I,A[2]=L,M(v,m),b[0]=g.length(v[0]),g.normalize(v[0],v[0]),E[0]=g.dot(v[0],v[1]),C(v[1],v[1],v[0],1,-E[0]),b[1]=g.length(v[1]),g.normalize(v[1],v[1]),E[0]/=b[1],E[1]=g.dot(v[0],v[2]),C(v[2],v[2],v[0],1,-E[1]),E[2]=g.dot(v[1],v[2]),C(v[2],v[2],v[1],1,-E[2]),b[2]=g.length(v[2]),g.normalize(v[2],v[2]),E[1]/=b[2],E[2]/=b[2],g.cross(x,v[1],v[2]),g.dot(v[0],x)<0)for(var G=0;G<3;G++)b[G]*=-1,v[G][0]*=-1,v[G][1]*=-1,v[G][2]*=-1;return F[0]=.5*Math.sqrt(Math.max(1+v[0][0]-v[1][1]-v[2][2],0)),F[1]=.5*Math.sqrt(Math.max(1-v[0][0]+v[1][1]-v[2][2],0)),F[2]=.5*Math.sqrt(Math.max(1-v[0][0]-v[1][1]+v[2][2],0)),F[3]=.5*Math.sqrt(Math.max(1+v[0][0]+v[1][1]+v[2][2],0)),v[2][1]>v[1][2]&&(F[0]=-F[0]),v[0][2]>v[2][0]&&(F[1]=-F[1]),v[1][0]>v[0][1]&&(F[2]=-F[2]),!0};function S(w,k,A){var b=k[0],E=k[1],T=k[2],F=k[3];return w[0]=A[0]*b+A[4]*E+A[8]*T+A[12]*F,w[1]=A[1]*b+A[5]*E+A[9]*T+A[13]*F,w[2]=A[2]*b+A[6]*E+A[10]*T+A[14]*F,w[3]=A[3]*b+A[7]*E+A[11]*T+A[15]*F,w}function M(w,k){w[0][0]=k[0],w[0][1]=k[1],w[0][2]=k[2],w[1][0]=k[4],w[1][1]=k[5],w[1][2]=k[6],w[2][0]=k[8],w[2][1]=k[9],w[2][2]=k[10]}function C(w,k,A,b,E){w[0]=k[0]*b+A[0]*E,w[1]=k[1]*b+A[1]*E,w[2]=k[2]*b+A[2]*E}},4335(s){s.exports=function(n,u){var c=u[15];if(c===0)return!1;for(var f=1/c,h=0;h<16;h++)n[h]=u[h]*f;return!0}},7442(s,l,n){var u=n(6658),c=n(7182),f=n(2652),h=n(9921),d=n(8648),p=_(),g=_(),m=_();s.exports=y;function y(S,M,C,w){if(h(M)===0||h(C)===0)return!1;var k=f(M,p.translate,p.scale,p.skew,p.perspective,p.quaternion),A=f(C,g.translate,g.scale,g.skew,g.perspective,g.quaternion);return!k||!A?!1:(u(m.translate,p.translate,g.translate,w),u(m.skew,p.skew,g.skew,w),u(m.scale,p.scale,g.scale,w),u(m.perspective,p.perspective,g.perspective,w),d(m.quaternion,p.quaternion,g.quaternion,w),c(S,m.translate,m.scale,m.skew,m.perspective,m.quaternion),!0)}function _(){return{translate:v(),scale:v(1),skew:v(),perspective:x(),quaternion:x()}}function v(S){return[S||0,S||0,S||0]}function x(){return[0,0,0,1]}},7182(s,l,n){var u={identity:n(7894),translate:n(7656),multiply:n(6760),create:n(6864),scale:n(2504),fromRotationTranslation:n(6743)},c=u.create(),f=u.create();s.exports=function(d,p,g,m,y,_){return u.identity(d),u.fromRotationTranslation(d,_,p),d[3]=y[0],d[7]=y[1],d[11]=y[2],d[15]=y[3],u.identity(f),m[2]!==0&&(f[9]=m[2],u.multiply(d,d,f)),m[1]!==0&&(f[9]=0,f[8]=m[1],u.multiply(d,d,f)),m[0]!==0&&(f[8]=0,f[4]=m[0],u.multiply(d,d,f)),u.scale(d,d,g),d}},1811(s,l,n){"use strict";var u=n(2478),c=n(7442),f=n(7608),h=n(5567),d=n(2408),p=n(7089),g=n(6582),m=n(7656),y=n(2504),_=n(3536),v=[0,0,0];s.exports=C;function x(w){this._components=w.slice(),this._time=[0],this.prevMatrix=w.slice(),this.nextMatrix=w.slice(),this.computedMatrix=w.slice(),this.computedInverse=w.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}var S=x.prototype;S.recalcMatrix=function(w){var k=this._time,A=u.le(k,w),b=this.computedMatrix;if(!(A<0)){var E=this._components;if(A===k.length-1)for(var T=16*A,F=0;F<16;++F)b[F]=E[T++];else{for(var D=k[A+1]-k[A],T=16*A,R=this.prevMatrix,P=!0,F=0;F<16;++F)R[F]=E[T++];for(var z=this.nextMatrix,F=0;F<16;++F)z[F]=E[T++],P=P&&R[F]===z[F];if(D<1e-6||P)for(var F=0;F<16;++F)b[F]=R[F];else c(b,R,z,(w-k[A])/D)}var I=this.computedUp;I[0]=b[1],I[1]=b[5],I[2]=b[9],_(I,I);var L=this.computedInverse;f(L,b);var B=this.computedEye,O=L[15];B[0]=L[12]/O,B[1]=L[13]/O,B[2]=L[14]/O;for(var G=this.computedCenter,W=Math.exp(this.computedRadius[0]),F=0;F<3;++F)G[F]=B[F]-b[2+4*F]*W}},S.idle=function(w){if(!(w<this.lastT())){for(var k=this._components,A=k.length-16,b=0;b<16;++b)k.push(k[A++]);this._time.push(w)}},S.flush=function(w){var k=u.gt(this._time,w)-2;k<0||(this._time.splice(0,k),this._components.splice(0,16*k))},S.lastT=function(){return this._time[this._time.length-1]},S.lookAt=function(w,k,A,b){this.recalcMatrix(w),k=k||this.computedEye,A=A||v,b=b||this.computedUp,this.setMatrix(w,g(this.computedMatrix,k,A,b));for(var E=0,T=0;T<3;++T)E+=Math.pow(A[T]-k[T],2);E=Math.log(Math.sqrt(E)),this.computedRadius[0]=E},S.rotate=function(w,k,A,b){this.recalcMatrix(w);var E=this.computedInverse;k&&d(E,E,k),A&&h(E,E,A),b&&p(E,E,b),this.setMatrix(w,f(this.computedMatrix,E))};var M=[0,0,0];S.pan=function(w,k,A,b){M[0]=-(k||0),M[1]=-(A||0),M[2]=-(b||0),this.recalcMatrix(w);var E=this.computedInverse;m(E,E,M),this.setMatrix(w,f(E,E))},S.translate=function(w,k,A,b){M[0]=k||0,M[1]=A||0,M[2]=b||0,this.recalcMatrix(w);var E=this.computedMatrix;m(E,E,M),this.setMatrix(w,E)},S.setMatrix=function(w,k){if(!(w<this.lastT())){this._time.push(w);for(var A=0;A<16;++A)this._components.push(k[A])}},S.setDistance=function(w,k){this.computedRadius[0]=k},S.setDistanceLimits=function(w,k){var A=this._limits;A[0]=w,A[1]=k},S.getDistanceLimits=function(w){var k=this._limits;return w?(w[0]=k[0],w[1]=k[1],w):k};function C(w){w=w||{};var k=w.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return new x(k)}},3090(s,l,n){"use strict";s.exports=c;var u=n(3250)[3];function c(f){var h=f.length;if(h<3){for(var x=new Array(h),d=0;d<h;++d)x[d]=d;return h===2&&f[0][0]===f[1][0]&&f[0][1]===f[1][1]?[0]:x}for(var p=new Array(h),d=0;d<h;++d)p[d]=d;p.sort(function(w,k){var A=f[w][0]-f[k][0];return A||f[w][1]-f[k][1]});for(var g=[p[0],p[1]],m=[p[0],p[1]],d=2;d<h;++d){for(var y=p[d],_=f[y],v=g.length;v>1&&u(f[g[v-2]],f[g[v-1]],_)<=0;)v-=1,g.pop();for(g.push(y),v=m.length;v>1&&u(f[m[v-2]],f[m[v-1]],_)>=0;)v-=1,m.pop();m.push(y)}for(var x=new Array(m.length+g.length-2),S=0,d=0,M=g.length;d<M;++d)x[S++]=g[d];for(var C=m.length-2;C>0;--C)x[S++]=m[C];return x}},351(s,l,n){"use strict";s.exports=c;var u=n(4687);function c(f,h){h||(h=f,f=window);var d=0,p=0,g=0,m={shift:!1,alt:!1,control:!1,meta:!1},y=!1;function _(T){var F=!1;return"altKey"in T&&(F=F||T.altKey!==m.alt,m.alt=!!T.altKey),"shiftKey"in T&&(F=F||T.shiftKey!==m.shift,m.shift=!!T.shiftKey),"ctrlKey"in T&&(F=F||T.ctrlKey!==m.control,m.control=!!T.ctrlKey),"metaKey"in T&&(F=F||T.metaKey!==m.meta,m.meta=!!T.metaKey),F}function v(T,F){var D=u.x(F),R=u.y(F);"buttons"in F&&(T=F.buttons|0),(T!==d||D!==p||R!==g||_(F))&&(d=T|0,p=D||0,g=R||0,h&&h(d,p,g,m))}function x(T){v(0,T)}function S(){(d||p||g||m.shift||m.alt||m.meta||m.control)&&(p=g=0,d=0,m.shift=m.alt=m.control=m.meta=!1,h&&h(0,0,0,m))}function M(T){_(T)&&h&&h(d,p,g,m)}function C(T){u.buttons(T)===0?v(0,T):v(d,T)}function w(T){v(d|u.buttons(T),T)}function k(T){v(d&~u.buttons(T),T)}function A(){y||(y=!0,f.addEventListener("mousemove",C),f.addEventListener("mousedown",w),f.addEventListener("mouseup",k),f.addEventListener("mouseleave",x),f.addEventListener("mouseenter",x),f.addEventListener("mouseout",x),f.addEventListener("mouseover",x),f.addEventListener("blur",S),f.addEventListener("keyup",M),f.addEventListener("keydown",M),f.addEventListener("keypress",M),f!==window&&(window.addEventListener("blur",S),window.addEventListener("keyup",M),window.addEventListener("keydown",M),window.addEventListener("keypress",M)))}function b(){y&&(y=!1,f.removeEventListener("mousemove",C),f.removeEventListener("mousedown",w),f.removeEventListener("mouseup",k),f.removeEventListener("mouseleave",x),f.removeEventListener("mouseenter",x),f.removeEventListener("mouseout",x),f.removeEventListener("mouseover",x),f.removeEventListener("blur",S),f.removeEventListener("keyup",M),f.removeEventListener("keydown",M),f.removeEventListener("keypress",M),f!==window&&(window.removeEventListener("blur",S),window.removeEventListener("keyup",M),window.removeEventListener("keydown",M),window.removeEventListener("keypress",M)))}A();var E={element:f};return Object.defineProperties(E,{enabled:{get:function(){return y},set:function(T){T?A():b()},enumerable:!0},buttons:{get:function(){return d},enumerable:!0},x:{get:function(){return p},enumerable:!0},y:{get:function(){return g},enumerable:!0},mods:{get:function(){return m},enumerable:!0}}),E}},24(s){var l={left:0,top:0};s.exports=n;function n(c,f,h){f=f||c.currentTarget||c.srcElement,Array.isArray(h)||(h=[0,0]);var d=c.clientX||0,p=c.clientY||0,g=u(f);return h[0]=d-g.left,h[1]=p-g.top,h}function u(c){return c===window||c===document||c===document.body?l:c.getBoundingClientRect()}},4687(s,l){"use strict";function n(h){if(typeof h=="object"){if("buttons"in h)return h.buttons;if("which"in h){var d=h.which;if(d===2)return 4;if(d===3)return 2;if(d>0)return 1<<d-1}else if("button"in h){var d=h.button;if(d===1)return 4;if(d===2)return 2;if(d>=0)return 1<<d}}return 0}l.buttons=n;function u(h){return h.target||h.srcElement||window}l.element=u;function c(h){if(typeof h=="object"){if("offsetX"in h)return h.offsetX;var d=u(h),p=d.getBoundingClientRect();return h.clientX-p.left}return 0}l.x=c;function f(h){if(typeof h=="object"){if("offsetY"in h)return h.offsetY;var d=u(h),p=d.getBoundingClientRect();return h.clientY-p.top}return 0}l.y=f},2288(s,l,n){"use strict";var u=n(3202);s.exports=d;var c=96;function f(p,g){var m=u(getComputedStyle(p).getPropertyValue(g));return m[0]*d(m[1],p)}function h(p,g){var m=document.createElement("div");m.style["font-size"]="128"+p,g.appendChild(m);var y=f(m,"font-size")/128;return g.removeChild(m),y}function d(p,g){switch(g=g||document.body,p=(p||"px").trim().toLowerCase(),(g===window||g===document)&&(g=document.body),p){case"%":return g.clientHeight/100;case"ch":case"ex":return h(p,g);case"em":return f(g,"font-size");case"rem":return f(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return c;case"cm":return c/2.54;case"mm":return c/25.4;case"pt":return c/72;case"pc":return c/6}return 1}},8512(s,l,n){"use strict";var u=n(2288);s.exports=c;function c(f,h,d){typeof f=="function"&&(d=!!h,h=f,f=window);var p=u("ex",f),g=function(m){d&&m.preventDefault();var y=m.deltaX||0,_=m.deltaY||0,v=m.deltaZ||0,x=m.deltaMode,S=1;switch(x){case 1:S=p;break;case 2:S=window.innerHeight;break}if(y*=S,_*=S,v*=S,y||_||v)return h(y,_,v,m)};return f.addEventListener("wheel",g),g}},2640(s,l,n){"use strict";var u=n(1888);s.exports=h;var c={"false,0,1":function(p,g,m,y,_){return function(x,S,M,C){var w=x.shape[0]|0,k=x.shape[1]|0,A=x.data,b=x.offset|0,E=x.stride[0]|0,T=x.stride[1]|0,F=b,D,R=-E|0,P=0,z=-T|0,I=0,L=-E-T|0,B=0,O=E|0,G=T-E*w|0,W=0,X=0,Z=0,J=2*w|0,N=y(J),H=y(J),$=0,U=0,V=-1,j=-1,q=0,Y=-w|0,K=w|0,te=0,ne=-w-1|0,se=w-1|0,le=0,ce=0,pe=0;for(W=0;W<w;++W)N[$++]=m(A[F],S,M,C),F+=O;if(F+=G,k>0){if(X=1,N[$++]=m(A[F],S,M,C),F+=O,w>0)for(W=1,D=A[F],U=N[$]=m(D,S,M,C),q=N[$+V],te=N[$+Y],le=N[$+ne],(U!==q||U!==te||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,q,te,le,S,M,C),ce=H[$]=Z++),$+=1,F+=O,W=2;W<w;++W)D=A[F],U=N[$]=m(D,S,M,C),q=N[$+V],te=N[$+Y],le=N[$+ne],(U!==q||U!==te||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,q,te,le,S,M,C),ce=H[$]=Z++,le!==q&&g(H[$+V],ce,B,P,le,q,S,M,C)),$+=1,F+=O;for(F+=G,$=0,pe=V,V=j,j=pe,pe=Y,Y=K,K=pe,pe=ne,ne=se,se=pe,X=2;X<k;++X){if(N[$++]=m(A[F],S,M,C),F+=O,w>0)for(W=1,D=A[F],U=N[$]=m(D,S,M,C),q=N[$+V],te=N[$+Y],le=N[$+ne],(U!==q||U!==te||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,q,te,le,S,M,C),ce=H[$]=Z++,le!==te&&g(H[$+Y],ce,I,B,te,le,S,M,C)),$+=1,F+=O,W=2;W<w;++W)D=A[F],U=N[$]=m(D,S,M,C),q=N[$+V],te=N[$+Y],le=N[$+ne],(U!==q||U!==te||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,q,te,le,S,M,C),ce=H[$]=Z++,le!==te&&g(H[$+Y],ce,I,B,te,le,S,M,C),le!==q&&g(H[$+V],ce,B,P,le,q,S,M,C)),$+=1,F+=O;X&1&&($=0),pe=V,V=j,j=pe,pe=Y,Y=K,K=pe,pe=ne,ne=se,se=pe,F+=G}}_(H),_(N)}},"false,1,0":function(p,g,m,y,_){return function(x,S,M,C){var w=x.shape[0]|0,k=x.shape[1]|0,A=x.data,b=x.offset|0,E=x.stride[0]|0,T=x.stride[1]|0,F=b,D,R=-E|0,P=0,z=-T|0,I=0,L=-E-T|0,B=0,O=T|0,G=E-T*k|0,W=0,X=0,Z=0,J=2*k|0,N=y(J),H=y(J),$=0,U=0,V=-1,j=-1,q=0,Y=-k|0,K=k|0,te=0,ne=-k-1|0,se=k-1|0,le=0,ce=0,pe=0;for(X=0;X<k;++X)N[$++]=m(A[F],S,M,C),F+=O;if(F+=G,w>0){if(W=1,N[$++]=m(A[F],S,M,C),F+=O,k>0)for(X=1,D=A[F],U=N[$]=m(D,S,M,C),te=N[$+Y],q=N[$+V],le=N[$+ne],(U!==te||U!==q||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,te,q,le,S,M,C),ce=H[$]=Z++),$+=1,F+=O,X=2;X<k;++X)D=A[F],U=N[$]=m(D,S,M,C),te=N[$+Y],q=N[$+V],le=N[$+ne],(U!==te||U!==q||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,te,q,le,S,M,C),ce=H[$]=Z++,le!==q&&g(H[$+V],ce,I,B,q,le,S,M,C)),$+=1,F+=O;for(F+=G,$=0,pe=Y,Y=K,K=pe,pe=V,V=j,j=pe,pe=ne,ne=se,se=pe,W=2;W<w;++W){if(N[$++]=m(A[F],S,M,C),F+=O,k>0)for(X=1,D=A[F],U=N[$]=m(D,S,M,C),te=N[$+Y],q=N[$+V],le=N[$+ne],(U!==te||U!==q||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,te,q,le,S,M,C),ce=H[$]=Z++,le!==te&&g(H[$+Y],ce,B,P,le,te,S,M,C)),$+=1,F+=O,X=2;X<k;++X)D=A[F],U=N[$]=m(D,S,M,C),te=N[$+Y],q=N[$+V],le=N[$+ne],(U!==te||U!==q||U!==le)&&(P=A[F+R],I=A[F+z],B=A[F+L],p(W,X,D,P,I,B,U,te,q,le,S,M,C),ce=H[$]=Z++,le!==q&&g(H[$+V],ce,I,B,q,le,S,M,C),le!==te&&g(H[$+Y],ce,B,P,le,te,S,M,C)),$+=1,F+=O;W&1&&($=0),pe=Y,Y=K,K=pe,pe=V,V=j,j=pe,pe=ne,ne=se,se=pe,F+=G}}_(H),_(N)}}};function f(d,p,g,m,y,_){var v=[_,y].join(","),x=c[v];return x(d,p,g,u.mallocUint32,u.freeUint32)}function h(d){function p(S){throw new Error("ndarray-extract-contour: "+S)}typeof d!="object"&&p("Must specify arguments");var g=d.order;Array.isArray(g)||p("Must specify order");var m=d.arrayArguments||1;m<1&&p("Must have at least one array argument");var y=d.scalarArguments||0;y<0&&p("Scalar arg count must be > 0"),typeof d.vertex!="function"&&p("Must specify vertex creation function"),typeof d.cell!="function"&&p("Must specify cell creation function"),typeof d.phase!="function"&&p("Must specify phase function");for(var _=d.getters||[],v=new Array(m),x=0;x<m;++x)_.indexOf(x)>=0?v[x]=!0:v[x]=!1;return f(d.vertex,d.cell,d.phase,y,g,v)}},6199(s,l,n){"use strict";var u=n(1338),c={zero:function(C,w,k,A){var b=C[0],E=k[0];A|=0;var T=0,F=E;for(T=0;T<b;++T)w[A]=0,A+=F},fdTemplate1:function(C,w,k,A,b,E,T){var F=C[0],D=k[0],R=E[0],P=-1*D,z=D;A|=0,T|=0;var I=0,L=D,B=R;for(I=0;I<F;++I)b[T]=.5*(w[A+P]-w[A+z]),A+=L,T+=B},fdTemplate2:function(C,w,k,A,b,E,T,F,D,R){var P=C[0],z=C[1],I=k[0],L=k[1],B=E[0],O=E[1],G=D[0],W=D[1],X=-1*I,Z=I,J=-1*L,N=L;A|=0,T|=0,R|=0;var H=0,$=0,U=L,V=I-z*L,j=O,q=B-z*O,Y=W,K=G-z*W;for($=0;$<P;++$){for(H=0;H<z;++H)b[T]=.5*(w[A+X]-w[A+Z]),F[R]=.5*(w[A+J]-w[A+N]),A+=U,T+=j,R+=Y;A+=V,T+=q,R+=K}}},f={cdiff:function(C){var w={};return function(A,b,E){var T=A.dtype,F=A.order,D=b.dtype,R=b.order,P=E.dtype,z=E.order,I=[T,F.join(),D,R.join(),P,z.join()].join(),L=w[I];return L||(w[I]=L=C([T,F,D,R,P,z])),L(A.shape.slice(0),A.data,A.stride,A.offset|0,b.data,b.stride,b.offset|0,E.data,E.stride,E.offset|0)}},zero:function(C){var w={};return function(A){var b=A.dtype,E=A.order,T=[b,E.join()].join(),F=w[T];return F||(w[T]=F=C([b,E])),F(A.shape.slice(0),A.data,A.stride,A.offset|0)}},fdTemplate1:function(C){var w={};return function(A,b){var E=A.dtype,T=A.order,F=b.dtype,D=b.order,R=[E,T.join(),F,D.join()].join(),P=w[R];return P||(w[R]=P=C([E,T,F,D])),P(A.shape.slice(0),A.data,A.stride,A.offset|0,b.data,b.stride,b.offset|0)}},fdTemplate2:function(C){var w={};return function(A,b,E){var T=A.dtype,F=A.order,D=b.dtype,R=b.order,P=E.dtype,z=E.order,I=[T,F.join(),D,R.join(),P,z.join()].join(),L=w[I];return L||(w[I]=L=C([T,F,D,R,P,z])),L(A.shape.slice(0),A.data,A.stride,A.offset|0,b.data,b.stride,b.offset|0,E.data,E.stride,E.offset|0)}}};function h(C){var w=f[C.funcName];return w(d.bind(void 0,C))}function d(C){return c[C.funcName]}function p(C){return h({funcName:C.funcName})}var g={},m={},y=null,_=p({funcName:"cdiff"}),v=p({funcName:"zero"});function x(C){return C in g?g[C]:g[C]=p({funcName:"fdTemplate"+C})}function S(C,w,k,A){return function(b,E){var T=E.shape.slice();return T[0]>2&&T[1]>2&&A(E.pick(-1,-1).lo(1,1).hi(T[0]-2,T[1]-2),b.pick(-1,-1,0).lo(1,1).hi(T[0]-2,T[1]-2),b.pick(-1,-1,1).lo(1,1).hi(T[0]-2,T[1]-2)),T[1]>2&&(k(E.pick(0,-1).lo(1).hi(T[1]-2),b.pick(0,-1,1).lo(1).hi(T[1]-2)),w(b.pick(0,-1,0).lo(1).hi(T[1]-2))),T[1]>2&&(k(E.pick(T[0]-1,-1).lo(1).hi(T[1]-2),b.pick(T[0]-1,-1,1).lo(1).hi(T[1]-2)),w(b.pick(T[0]-1,-1,0).lo(1).hi(T[1]-2))),T[0]>2&&(k(E.pick(-1,0).lo(1).hi(T[0]-2),b.pick(-1,0,0).lo(1).hi(T[0]-2)),w(b.pick(-1,0,1).lo(1).hi(T[0]-2))),T[0]>2&&(k(E.pick(-1,T[1]-1).lo(1).hi(T[0]-2),b.pick(-1,T[1]-1,0).lo(1).hi(T[0]-2)),w(b.pick(-1,T[1]-1,1).lo(1).hi(T[0]-2))),b.set(0,0,0,0),b.set(0,0,1,0),b.set(T[0]-1,0,0,0),b.set(T[0]-1,0,1,0),b.set(0,T[1]-1,0,0),b.set(0,T[1]-1,1,0),b.set(T[0]-1,T[1]-1,0,0),b.set(T[0]-1,T[1]-1,1,0),b}}function M(C){var w=C.join(),T=m[w];if(T)return T;for(var k=C.length,A=[_,v],b=1;b<=k;++b)A.push(x(b));var E=S,T=E.apply(void 0,A);return m[w]=T,T}s.exports=function(w,k,A){if(Array.isArray(A)||(typeof A=="string"?A=u(k.dimension,A):A=u(k.dimension,"clamp")),k.size===0)return w;if(k.dimension===0)return w.set(0),w;var b=M(A);return b(w,k)}},4317(s){"use strict";function l(h,d){var p=Math.floor(d),g=d-p,m=0<=p&&p<h.shape[0],y=0<=p+1&&p+1<h.shape[0],_=m?+h.get(p):0,v=y?+h.get(p+1):0;return(1-g)*_+g*v}function n(h,d,p){var g=Math.floor(d),m=d-g,y=0<=g&&g<h.shape[0],_=0<=g+1&&g+1<h.shape[0],v=Math.floor(p),x=p-v,S=0<=v&&v<h.shape[1],M=0<=v+1&&v+1<h.shape[1],C=y&&S?h.get(g,v):0,w=y&&M?h.get(g,v+1):0,k=_&&S?h.get(g+1,v):0,A=_&&M?h.get(g+1,v+1):0;return(1-x)*((1-m)*C+m*k)+x*((1-m)*w+m*A)}function u(h,d,p,g){var m=Math.floor(d),y=d-m,_=0<=m&&m<h.shape[0],v=0<=m+1&&m+1<h.shape[0],x=Math.floor(p),S=p-x,M=0<=x&&x<h.shape[1],C=0<=x+1&&x+1<h.shape[1],w=Math.floor(g),k=g-w,A=0<=w&&w<h.shape[2],b=0<=w+1&&w+1<h.shape[2],E=_&&M&&A?h.get(m,x,w):0,T=_&&C&&A?h.get(m,x+1,w):0,F=v&&M&&A?h.get(m+1,x,w):0,D=v&&C&&A?h.get(m+1,x+1,w):0,R=_&&M&&b?h.get(m,x,w+1):0,P=_&&C&&b?h.get(m,x+1,w+1):0,z=v&&M&&b?h.get(m+1,x,w+1):0,I=v&&C&&b?h.get(m+1,x+1,w+1):0;return(1-k)*((1-S)*((1-y)*E+y*F)+S*((1-y)*T+y*D))+k*((1-S)*((1-y)*R+y*z)+S*((1-y)*P+y*I))}function c(h){var d=h.shape.length|0,p=new Array(d),g=new Array(d),m=new Array(d),y=new Array(d),_,v;for(_=0;_<d;++_)v=+arguments[_+1],p[_]=Math.floor(v),g[_]=v-p[_],m[_]=0<=p[_]&&p[_]<h.shape[_],y[_]=0<=p[_]+1&&p[_]+1<h.shape[_];var x=0,S,M,C;e:for(_=0;_<1<<d;++_){for(M=1,C=h.offset,S=0;S<d;++S)if(_&1<<S){if(!y[S])continue e;M*=g[S],C+=h.stride[S]*(p[S]+1)}else{if(!m[S])continue e;M*=1-g[S],C+=h.stride[S]*p[S]}x+=M*h.data[C]}return x}function f(h,d,p,g){switch(h.shape.length){case 0:return 0;case 1:return l(h,d);case 2:return n(h,d,p);case 3:return u(h,d,p,g);default:return c.apply(void 0,arguments)}}s.exports=f,s.exports.d1=l,s.exports.d2=n,s.exports.d3=u},5298(s,l){"use strict";var n={"float64,2,1,0":function(){return function(m,y,_,v,x){var S=m[0],M=m[1],C=m[2],w=_[0],k=_[1],A=_[2];v|=0;var b=0,E=0,T=0,F=A,D=k-C*A,R=w-M*k;for(T=0;T<S;++T){for(E=0;E<M;++E){for(b=0;b<C;++b)y[v]/=x,v+=F;v+=D}v+=R}}},"uint8,2,0,1,float64,2,1,0":function(){return function(m,y,_,v,x,S,M,C){var w=m[0],k=m[1],A=m[2],b=_[0],E=_[1],T=_[2],F=S[0],D=S[1],R=S[2];v|=0,M|=0;for(var P=v,z=M,I=m[0]|0;I>0;){I<64?(w=I,I=0):(w=64,I-=64);for(var L=m[1]|0;L>0;){L<64?(k=L,L=0):(k=64,L-=64),v=P+I*b+L*E,M=z+I*F+L*D;var B=0,O=0,G=0,W=T,X=b-A*T,Z=E-w*b,J=R,N=F-A*R,H=D-w*F;for(G=0;G<k;++G){for(O=0;O<w;++O){for(B=0;B<A;++B)y[v]=x[M]*C,v+=W,M+=J;v+=X,M+=N}v+=Z,M+=H}}}}},"float32,1,0,float32,1,0":function(){return function(m,y,_,v,x,S,M){var C=m[0],w=m[1],k=_[0],A=_[1],b=S[0],E=S[1];v|=0,M|=0;var T=0,F=0,D=A,R=k-w*A,P=E,z=b-w*E;for(F=0;F<C;++F){for(T=0;T<w;++T)y[v]=x[M],v+=D,M+=P;v+=R,M+=z}}},"float32,1,0,float32,0,1":function(){return function(m,y,_,v,x,S,M){var C=m[0],w=m[1],k=_[0],A=_[1],b=S[0],E=S[1];v|=0,M|=0;for(var T=v,F=M,D=m[1]|0;D>0;){D<64?(w=D,D=0):(w=64,D-=64);for(var R=m[0]|0;R>0;){R<64?(C=R,R=0):(C=64,R-=64),v=T+D*A+R*k,M=F+D*E+R*b;var P=0,z=0,I=A,L=k-w*A,B=E,O=b-w*E;for(z=0;z<C;++z){for(P=0;P<w;++P)y[v]=x[M],v+=I,M+=B;v+=L,M+=O}}}}},"uint8,2,0,1,uint8,1,2,0":function(){return function(m,y,_,v,x,S,M){var C=m[0],w=m[1],k=m[2],A=_[0],b=_[1],E=_[2],T=S[0],F=S[1],D=S[2];v|=0,M|=0;for(var R=v,P=M,z=m[2]|0;z>0;){z<64?(k=z,z=0):(k=64,z-=64);for(var I=m[0]|0;I>0;){I<64?(C=I,I=0):(C=64,I-=64);for(var L=m[1]|0;L>0;){L<64?(w=L,L=0):(w=64,L-=64),v=R+z*E+I*A+L*b,M=P+z*D+I*T+L*F;var B=0,O=0,G=0,W=E,X=A-k*E,Z=b-C*A,J=D,N=T-k*D,H=F-C*T;for(G=0;G<w;++G){for(O=0;O<C;++O){for(B=0;B<k;++B)y[v]=x[M],v+=W,M+=J;v+=X,M+=N}v+=Z,M+=H}}}}}},"uint8,2,0,1,array,2,0,1":function(){return function(m,y,_,v,x,S,M){var C=m[0],w=m[1],k=m[2],A=_[0],b=_[1],E=_[2],T=S[0],F=S[1],D=S[2];v|=0,M|=0;var R=0,P=0,z=0,I=E,L=A-k*E,B=b-C*A,O=D,G=T-k*D,W=F-C*T;for(z=0;z<w;++z){for(P=0;P<C;++P){for(R=0;R<k;++R)y[v]=x[M],v+=I,M+=O;v+=L,M+=G}v+=B,M+=W}}}};function u(g,m){var y=m.join(","),_=n[y];return _()}var c=u,f={mul:function(g){var m={};return function(_,v,x){var S=_.dtype,M=_.order,C=v.dtype,w=v.order,k=x.dtype,A=x.order,b=[S,M.join(),C,w.join(),k,A.join()].join(),E=m[b];return E||(m[b]=E=g([S,M,C,w,k,A])),E(_.shape.slice(0),_.data,_.stride,_.offset|0,v.data,v.stride,v.offset|0,x.data,x.stride,x.offset|0)}},muls:function(g){var m={};return function(_,v,x){var S=_.dtype,M=_.order,C=v.dtype,w=v.order,k=[S,M.join(),C,w.join()].join(),A=m[k];return A||(m[k]=A=g([S,M,C,w])),A(_.shape.slice(0),_.data,_.stride,_.offset|0,v.data,v.stride,v.offset|0,x)}},mulseq:function(g){var m={};return function(_,v){var x=_.dtype,S=_.order,M=[x,S.join()].join(),C=m[M];return C||(m[M]=C=g([x,S])),C(_.shape.slice(0),_.data,_.stride,_.offset|0,v)}},div:function(g){var m={};return function(_,v,x){var S=_.dtype,M=_.order,C=v.dtype,w=v.order,k=x.dtype,A=x.order,b=[S,M.join(),C,w.join(),k,A.join()].join(),E=m[b];return E||(m[b]=E=g([S,M,C,w,k,A])),E(_.shape.slice(0),_.data,_.stride,_.offset|0,v.data,v.stride,v.offset|0,x.data,x.stride,x.offset|0)}},divs:function(g){var m={};return function(_,v,x){var S=_.dtype,M=_.order,C=v.dtype,w=v.order,k=[S,M.join(),C,w.join()].join(),A=m[k];return A||(m[k]=A=g([S,M,C,w])),A(_.shape.slice(0),_.data,_.stride,_.offset|0,v.data,v.stride,v.offset|0,x)}},divseq:function(g){var m={};return function(_,v){var x=_.dtype,S=_.order,M=[x,S.join()].join(),C=m[M];return C||(m[M]=C=g([x,S])),C(_.shape.slice(0),_.data,_.stride,_.offset|0,v)}},assign:function(g){var m={};return function(_,v){var x=_.dtype,S=_.order,M=v.dtype,C=v.order,w=[x,S.join(),M,C.join()].join(),k=m[w];return k||(m[w]=k=g([x,S,M,C])),k(_.shape.slice(0),_.data,_.stride,_.offset|0,v.data,v.stride,v.offset|0)}}};function h(g){var m=f[g.funcName];return m(c.bind(void 0,g))}function d(g){return h({funcName:g.funcName})}var p={mul:"*",div:"/"};(function(){for(var g in p)l[g]=d({funcName:g}),l[g+"s"]=d({funcName:g+"s"}),l[g+"seq"]=d({funcName:g+"seq"})})(),l.assign=d({funcName:"assign"})},9994(s,l,n){"use strict";var u=n(9618),c=n(8277);s.exports=function(h,d){for(var p=[],g=h,m=1;Array.isArray(g);)p.push(g.length),m*=g.length,g=g[0];return p.length===0?u():(d||(d=u(new Float64Array(m),p)),c(d,h),d)}},8277(s){"use strict";function l(){return function(d,p,g,m,y){var _=d[0],v=d[1],x=d[2],S=g[0],M=g[1],C=g[2],w=[0,0,0];m|=0;var k=0,A=0,b=0,E=C,T=M-x*C,F=S-v*M;for(b=0;b<_;++b){for(A=0;A<v;++A){for(k=0;k<x;++k){{var D=y,R;for(R=0;R<w.length-1;++R)D=D[w[R]];p[m]=D[w[w.length-1]]}m+=E,++w[2]}m+=T,w[2]-=x,++w[1]}m+=F,w[1]-=v,++w[0]}}}function n(){return l()}var u=n;function c(d){var p={};return function(m,y){var _=m.dtype,v=m.order,x=[_,v.join()].join(),S=p[x];return S||(p[x]=S=d([_,v])),S(m.shape.slice(0),m.data,m.stride,m.offset|0,y)}}function f(d){return c(u.bind(void 0,d))}function h(d){return f({funcName:d.funcName})}s.exports=h({funcName:"convert"})},7640(s,l,n){"use strict";var u=n(1888);function c(y){return y==="uint32"?[u.mallocUint32,u.freeUint32]:null}var f={"uint32,1,0":function(y,_){return function(x,S,M,C,w,k,A,b,E,T,F){var D,R,P,z=x*w+C,I,L=y(b),B,O,G,W;for(D=x+1;D<=S;++D){for(R=D,z+=w,P=z,B=0,O=z,I=0;I<b;++I)L[B++]=M[O],O+=E;e:for(;R-- >x;){B=0,O=P-w;t:for(I=0;I<b;++I){if(G=M[O],W=L[B],G<W)break e;if(G>W)break t;O+=T,B+=F}for(B=P,O=P-w,I=0;I<b;++I)M[B]=M[O],B+=E,O+=E;P-=w}for(B=P,O=0,I=0;I<b;++I)M[B]=L[O++],B+=E}_(L)}}};function h(y,_){var v=c(_),x=[_,y].join(","),S=f[x];return v?S(v[0],v[1]):S()}var d={"uint32,1,0":function(y,_,v){return function x(S,M,C,w,k,A,b,E,T,F,D){var R=(M-S+1)/6|0,P=S+R,z=M-R,I=S+M>>1,L=I-R,B=I+R,O=P,G=L,W=I,X=B,Z=z,J=S+1,N=M-1,H=!0,$,U,V,j,q,Y,K,te,ne,se=0,le=0,ce=0,pe,xe,ye,fe,ae,ee,ie,Q,ue,ge,Me,Te,je,Ve,Ze,Ke,vt=E,xt=_(vt),Pt=_(vt);xe=k*O,ye=k*G,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=O,O=G,G=U;break e}if(ce<0)break e;Ke+=F}xe=k*X,ye=k*Z,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=X,X=Z,Z=U;break e}if(ce<0)break e;Ke+=F}xe=k*O,ye=k*W,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=O,O=W,W=U;break e}if(ce<0)break e;Ke+=F}xe=k*G,ye=k*W,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=G,G=W,W=U;break e}if(ce<0)break e;Ke+=F}xe=k*O,ye=k*X,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=O,O=X,X=U;break e}if(ce<0)break e;Ke+=F}xe=k*W,ye=k*X,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=W,W=X,X=U;break e}if(ce<0)break e;Ke+=F}xe=k*G,ye=k*Z,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=G,G=Z,Z=U;break e}if(ce<0)break e;Ke+=F}xe=k*G,ye=k*W,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=G,G=W,W=U;break e}if(ce<0)break e;Ke+=F}xe=k*X,ye=k*Z,Ke=w;e:for(pe=0;pe<E;++pe){if(K=xe+Ke,te=ye+Ke,ce=C[K]-C[te],ce>0){U=X,X=Z,Z=U;break e}if(ce<0)break e;Ke+=F}for(xe=k*O,ye=k*G,fe=k*W,ae=k*X,ee=k*Z,ie=k*P,Q=k*I,ue=k*z,Ze=0,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,ne=fe+Ke,ge=ae+Ke,Me=ee+Ke,Te=ie+Ke,je=Q+Ke,Ve=ue+Ke,xt[Ze]=C[te],Pt[Ze]=C[ge],H=H&&xt[Ze]===Pt[Ze],V=C[K],j=C[ne],q=C[Me],C[Te]=V,C[je]=j,C[Ve]=q,++Ze,Ke+=T;for(xe=k*L,ye=k*S,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,C[K]=C[te],Ke+=T;for(xe=k*B,ye=k*M,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,C[K]=C[te],Ke+=T;if(H)for(Y=J;Y<=N;++Y){K=w+Y*k,Ze=0;e:for(pe=0;pe<E;++pe){if(ce=C[K]-xt[Ze],ce!==0)break e;Ze+=D,K+=F}if(ce!==0)if(ce<0){if(Y!==J)for(xe=k*Y,ye=k*J,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,$=C[K],C[K]=C[te],C[te]=$,Ke+=T;++J}else for(;;){K=w+N*k,Ze=0;e:for(pe=0;pe<E;++pe){if(ce=C[K]-xt[Ze],ce!==0)break e;Ze+=D,K+=F}if(ce>0)N--;else if(ce<0){for(xe=k*Y,ye=k*J,fe=k*N,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,ne=fe+Ke,$=C[K],C[K]=C[te],C[te]=C[ne],C[ne]=$,Ke+=T;++J,--N;break}else{for(xe=k*Y,ye=k*N,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,$=C[K],C[K]=C[te],C[te]=$,Ke+=T;--N;break}}}else for(Y=J;Y<=N;++Y){K=w+Y*k,Ze=0;e:for(pe=0;pe<E;++pe){if(se=C[K]-xt[Ze],se!==0)break e;Ze+=D,K+=F}if(se<0){if(Y!==J)for(xe=k*Y,ye=k*J,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,$=C[K],C[K]=C[te],C[te]=$,Ke+=T;++J}else{K=w+Y*k,Ze=0;e:for(pe=0;pe<E;++pe){if(le=C[K]-Pt[Ze],le!==0)break e;Ze+=D,K+=F}if(le>0)for(;;){K=w+N*k,Ze=0;e:for(pe=0;pe<E;++pe){if(ce=C[K]-Pt[Ze],ce!==0)break e;Ze+=D,K+=F}if(ce>0){if(--N<Y)break;continue}else{K=w+N*k,Ze=0;e:for(pe=0;pe<E;++pe){if(ce=C[K]-xt[Ze],ce!==0)break e;Ze+=D,K+=F}if(ce<0){for(xe=k*Y,ye=k*J,fe=k*N,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,ne=fe+Ke,$=C[K],C[K]=C[te],C[te]=C[ne],C[ne]=$,Ke+=T;++J,--N}else{for(xe=k*Y,ye=k*N,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,$=C[K],C[K]=C[te],C[te]=$,Ke+=T;--N}break}}}}for(xe=k*S,ye=k*(J-1),Ze=0,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,C[K]=C[te],C[te]=xt[Ze],++Ze,Ke+=T;for(xe=k*M,ye=k*(N+1),Ze=0,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,C[K]=C[te],C[te]=Pt[Ze],++Ze,Ke+=T;if(J-2-S<=32?y(S,J-2,C,w,k,A,b,E,T,F,D):x(S,J-2,C,w,k,A,b,E,T,F,D),M-(N+2)<=32?y(N+2,M,C,w,k,A,b,E,T,F,D):x(N+2,M,C,w,k,A,b,E,T,F,D),H){v(xt),v(Pt);return}if(J<P&&N>z){e:for(;;){for(K=w+J*k,Ze=0,Ke=w,pe=0;pe<E;++pe){if(C[K]!==xt[Ze])break e;++Ze,K+=T}++J}e:for(;;){for(K=w+N*k,Ze=0,Ke=w,pe=0;pe<E;++pe){if(C[K]!==Pt[Ze])break e;++Ze,K+=T}--N}for(Y=J;Y<=N;++Y){K=w+Y*k,Ze=0;e:for(pe=0;pe<E;++pe){if(se=C[K]-xt[Ze],se!==0)break e;Ze+=D,K+=F}if(se===0){if(Y!==J)for(xe=k*Y,ye=k*J,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,$=C[K],C[K]=C[te],C[te]=$,Ke+=T;++J}else{K=w+Y*k,Ze=0;e:for(pe=0;pe<E;++pe){if(le=C[K]-Pt[Ze],le!==0)break e;Ze+=D,K+=F}if(le===0)for(;;){K=w+N*k,Ze=0;e:for(pe=0;pe<E;++pe){if(ce=C[K]-Pt[Ze],ce!==0)break e;Ze+=D,K+=F}if(ce===0){if(--N<Y)break;continue}else{K=w+N*k,Ze=0;e:for(pe=0;pe<E;++pe){if(ce=C[K]-xt[Ze],ce!==0)break e;Ze+=D,K+=F}if(ce<0){for(xe=k*Y,ye=k*J,fe=k*N,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,ne=fe+Ke,$=C[K],C[K]=C[te],C[te]=C[ne],C[ne]=$,Ke+=T;++J,--N}else{for(xe=k*Y,ye=k*N,Ke=w,pe=0;pe<E;++pe)K=xe+Ke,te=ye+Ke,$=C[K],C[K]=C[te],C[te]=$,Ke+=T;--N}break}}}}}v(xt),v(Pt),N-J<=32?y(J,N,C,w,k,A,b,E,T,F,D):x(J,N,C,w,k,A,b,E,T,F,D)}}};function p(y,_,v){var x=c(_),S=[_,y].join(","),M=d[S];return y.length>1&&x?M(v,x[0],x[1]):M(v)}var g={"uint32,1,0":function(y,_){return function(v){var x=v.data,S=v.offset|0,M=v.shape,C=v.stride,w=C[0]|0,k=M[0]|0,A=C[1]|0,b=M[1]|0,E=A,T=A,F=1;k<=32?y(0,k-1,x,S,w,A,k,b,E,T,F):_(0,k-1,x,S,w,A,k,b,E,T,F)}}};function m(y,_){var v=[_,y].join(","),x=g[v],S=h(y,_),M=p(y,_,S);return x(S,M)}s.exports=m},446(s,l,n){"use strict";var u=n(7640),c={};function f(h){var d=h.order,p=h.dtype,g=[d,p],m=g.join(":"),y=c[m];return y||(c[m]=y=u(d,p)),y(h),h}s.exports=f},9618(s,l,n){var u=n(7163),c=typeof Float64Array<"u";function f(_,v){return _[0]-v[0]}function h(){var _=this.stride,v=new Array(_.length),x;for(x=0;x<v.length;++x)v[x]=[Math.abs(_[x]),x];v.sort(f);var S=new Array(v.length);for(x=0;x<S.length;++x)S[x]=v[x][1];return S}var d={T:function(_){function v(S){this.data=S}var x=v.prototype;return x.dtype=_,x.index=function(){return-1},x.size=0,x.dimension=-1,x.shape=x.stride=x.order=[],x.lo=x.hi=x.transpose=x.step=function(){return new v(this.data)},x.get=x.set=function(){},x.pick=function(){return null},function(M){return new v(M)}},0:function(_,v){function x(M,C){this.data=M,this.offset=C}var S=x.prototype;return S.dtype=_,S.index=function(){return this.offset},S.dimension=0,S.size=1,S.shape=S.stride=S.order=[],S.lo=S.hi=S.transpose=S.step=function(){return new x(this.data,this.offset)},S.pick=function(){return v(this.data)},S.valueOf=S.get=function(){return _==="generic"?this.data.get(this.offset):this.data[this.offset]},S.set=function(C){return _==="generic"?this.data.set(this.offset,C):this.data[this.offset]=C},function(C,w,k,A){return new x(C,A)}},1:function(_,v,x){function S(C,w,k,A){this.data=C,this.shape=[w],this.stride=[k],this.offset=A|0}var M=S.prototype;return M.dtype=_,M.dimension=1,Object.defineProperty(M,"size",{get:function(){return this.shape[0]}}),M.order=[0],M.set=function(w,k){return _==="generic"?this.data.set(this.offset+this.stride[0]*w,k):this.data[this.offset+this.stride[0]*w]=k},M.get=function(w){return _==="generic"?this.data.get(this.offset+this.stride[0]*w):this.data[this.offset+this.stride[0]*w]},M.index=function(w){return this.offset+this.stride[0]*w},M.hi=function(w){return new S(this.data,typeof w!="number"||w<0?this.shape[0]:w|0,this.stride[0],this.offset)},M.lo=function(w){var k=this.offset,A=0,b=this.shape[0],E=this.stride[0];return typeof w=="number"&&w>=0&&(A=w|0,k+=E*A,b-=A),new S(this.data,b,E,k)},M.step=function(w){var k=this.shape[0],A=this.stride[0],b=this.offset,E=0,T=Math.ceil;return typeof w=="number"&&(E=w|0,E<0?(b+=A*(k-1),k=T(-k/E)):k=T(k/E),A*=E),new S(this.data,k,A,b)},M.transpose=function(w){w=w===void 0?0:w|0;var k=this.shape,A=this.stride;return new S(this.data,k[w],A[w],this.offset)},M.pick=function(w){var k=[],A=[],b=this.offset;typeof w=="number"&&w>=0?b=b+this.stride[0]*w|0:(k.push(this.shape[0]),A.push(this.stride[0]));var E=v[k.length+1];return E(this.data,k,A,b)},function(w,k,A,b){return new S(w,k[0],A[0],b)}},2:function(_,v,x){function S(C,w,k,A,b,E){this.data=C,this.shape=[w,k],this.stride=[A,b],this.offset=E|0}var M=S.prototype;return M.dtype=_,M.dimension=2,Object.defineProperty(M,"size",{get:function(){return this.shape[0]*this.shape[1]}}),Object.defineProperty(M,"order",{get:function(){return Math.abs(this.stride[0])>Math.abs(this.stride[1])?[1,0]:[0,1]}}),M.set=function(w,k,A){return _==="generic"?this.data.set(this.offset+this.stride[0]*w+this.stride[1]*k,A):this.data[this.offset+this.stride[0]*w+this.stride[1]*k]=A},M.get=function(w,k){return _==="generic"?this.data.get(this.offset+this.stride[0]*w+this.stride[1]*k):this.data[this.offset+this.stride[0]*w+this.stride[1]*k]},M.index=function(w,k){return this.offset+this.stride[0]*w+this.stride[1]*k},M.hi=function(w,k){return new S(this.data,typeof w!="number"||w<0?this.shape[0]:w|0,typeof k!="number"||k<0?this.shape[1]:k|0,this.stride[0],this.stride[1],this.offset)},M.lo=function(w,k){var A=this.offset,b=0,E=this.shape[0],T=this.shape[1],F=this.stride[0],D=this.stride[1];return typeof w=="number"&&w>=0&&(b=w|0,A+=F*b,E-=b),typeof k=="number"&&k>=0&&(b=k|0,A+=D*b,T-=b),new S(this.data,E,T,F,D,A)},M.step=function(w,k){var A=this.shape[0],b=this.shape[1],E=this.stride[0],T=this.stride[1],F=this.offset,D=0,R=Math.ceil;return typeof w=="number"&&(D=w|0,D<0?(F+=E*(A-1),A=R(-A/D)):A=R(A/D),E*=D),typeof k=="number"&&(D=k|0,D<0?(F+=T*(b-1),b=R(-b/D)):b=R(b/D),T*=D),new S(this.data,A,b,E,T,F)},M.transpose=function(w,k){w=w===void 0?0:w|0,k=k===void 0?1:k|0;var A=this.shape,b=this.stride;return new S(this.data,A[w],A[k],b[w],b[k],this.offset)},M.pick=function(w,k){var A=[],b=[],E=this.offset;typeof w=="number"&&w>=0?E=E+this.stride[0]*w|0:(A.push(this.shape[0]),b.push(this.stride[0])),typeof k=="number"&&k>=0?E=E+this.stride[1]*k|0:(A.push(this.shape[1]),b.push(this.stride[1]));var T=v[A.length+1];return T(this.data,A,b,E)},function(w,k,A,b){return new S(w,k[0],k[1],A[0],A[1],b)}},3:function(_,v,x){function S(C,w,k,A,b,E,T,F){this.data=C,this.shape=[w,k,A],this.stride=[b,E,T],this.offset=F|0}var M=S.prototype;return M.dtype=_,M.dimension=3,Object.defineProperty(M,"size",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]}}),Object.defineProperty(M,"order",{get:function(){var w=Math.abs(this.stride[0]),k=Math.abs(this.stride[1]),A=Math.abs(this.stride[2]);return w>k?k>A?[2,1,0]:w>A?[1,2,0]:[1,0,2]:w>A?[2,0,1]:A>k?[0,1,2]:[0,2,1]}}),M.set=function(w,k,A,b){return _==="generic"?this.data.set(this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A,b):this.data[this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A]=b},M.get=function(w,k,A){return _==="generic"?this.data.get(this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A):this.data[this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A]},M.index=function(w,k,A){return this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A},M.hi=function(w,k,A){return new S(this.data,typeof w!="number"||w<0?this.shape[0]:w|0,typeof k!="number"||k<0?this.shape[1]:k|0,typeof A!="number"||A<0?this.shape[2]:A|0,this.stride[0],this.stride[1],this.stride[2],this.offset)},M.lo=function(w,k,A){var b=this.offset,E=0,T=this.shape[0],F=this.shape[1],D=this.shape[2],R=this.stride[0],P=this.stride[1],z=this.stride[2];return typeof w=="number"&&w>=0&&(E=w|0,b+=R*E,T-=E),typeof k=="number"&&k>=0&&(E=k|0,b+=P*E,F-=E),typeof A=="number"&&A>=0&&(E=A|0,b+=z*E,D-=E),new S(this.data,T,F,D,R,P,z,b)},M.step=function(w,k,A){var b=this.shape[0],E=this.shape[1],T=this.shape[2],F=this.stride[0],D=this.stride[1],R=this.stride[2],P=this.offset,z=0,I=Math.ceil;return typeof w=="number"&&(z=w|0,z<0?(P+=F*(b-1),b=I(-b/z)):b=I(b/z),F*=z),typeof k=="number"&&(z=k|0,z<0?(P+=D*(E-1),E=I(-E/z)):E=I(E/z),D*=z),typeof A=="number"&&(z=A|0,z<0?(P+=R*(T-1),T=I(-T/z)):T=I(T/z),R*=z),new S(this.data,b,E,T,F,D,R,P)},M.transpose=function(w,k,A){w=w===void 0?0:w|0,k=k===void 0?1:k|0,A=A===void 0?2:A|0;var b=this.shape,E=this.stride;return new S(this.data,b[w],b[k],b[A],E[w],E[k],E[A],this.offset)},M.pick=function(w,k,A){var b=[],E=[],T=this.offset;typeof w=="number"&&w>=0?T=T+this.stride[0]*w|0:(b.push(this.shape[0]),E.push(this.stride[0])),typeof k=="number"&&k>=0?T=T+this.stride[1]*k|0:(b.push(this.shape[1]),E.push(this.stride[1])),typeof A=="number"&&A>=0?T=T+this.stride[2]*A|0:(b.push(this.shape[2]),E.push(this.stride[2]));var F=v[b.length+1];return F(this.data,b,E,T)},function(w,k,A,b){return new S(w,k[0],k[1],k[2],A[0],A[1],A[2],b)}},4:function(_,v,x){function S(C,w,k,A,b,E,T,F,D,R){this.data=C,this.shape=[w,k,A,b],this.stride=[E,T,F,D],this.offset=R|0}var M=S.prototype;return M.dtype=_,M.dimension=4,Object.defineProperty(M,"size",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]}}),Object.defineProperty(M,"order",{get:x}),M.set=function(w,k,A,b,E){return _==="generic"?this.data.set(this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A+this.stride[3]*b,E):this.data[this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A+this.stride[3]*b]=E},M.get=function(w,k,A,b){return _==="generic"?this.data.get(this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A+this.stride[3]*b):this.data[this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A+this.stride[3]*b]},M.index=function(w,k,A,b){return this.offset+this.stride[0]*w+this.stride[1]*k+this.stride[2]*A+this.stride[3]*b},M.hi=function(w,k,A,b){return new S(this.data,typeof w!="number"||w<0?this.shape[0]:w|0,typeof k!="number"||k<0?this.shape[1]:k|0,typeof A!="number"||A<0?this.shape[2]:A|0,typeof b!="number"||b<0?this.shape[3]:b|0,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.offset)},M.lo=function(w,k,A,b){var E=this.offset,T=0,F=this.shape[0],D=this.shape[1],R=this.shape[2],P=this.shape[3],z=this.stride[0],I=this.stride[1],L=this.stride[2],B=this.stride[3];return typeof w=="number"&&w>=0&&(T=w|0,E+=z*T,F-=T),typeof k=="number"&&k>=0&&(T=k|0,E+=I*T,D-=T),typeof A=="number"&&A>=0&&(T=A|0,E+=L*T,R-=T),typeof b=="number"&&b>=0&&(T=b|0,E+=B*T,P-=T),new S(this.data,F,D,R,P,z,I,L,B,E)},M.step=function(w,k,A,b){var E=this.shape[0],T=this.shape[1],F=this.shape[2],D=this.shape[3],R=this.stride[0],P=this.stride[1],z=this.stride[2],I=this.stride[3],L=this.offset,B=0,O=Math.ceil;return typeof w=="number"&&(B=w|0,B<0?(L+=R*(E-1),E=O(-E/B)):E=O(E/B),R*=B),typeof k=="number"&&(B=k|0,B<0?(L+=P*(T-1),T=O(-T/B)):T=O(T/B),P*=B),typeof A=="number"&&(B=A|0,B<0?(L+=z*(F-1),F=O(-F/B)):F=O(F/B),z*=B),typeof b=="number"&&(B=b|0,B<0?(L+=I*(D-1),D=O(-D/B)):D=O(D/B),I*=B),new S(this.data,E,T,F,D,R,P,z,I,L)},M.transpose=function(w,k,A,b){w=w===void 0?0:w|0,k=k===void 0?1:k|0,A=A===void 0?2:A|0,b=b===void 0?3:b|0;var E=this.shape,T=this.stride;return new S(this.data,E[w],E[k],E[A],E[b],T[w],T[k],T[A],T[b],this.offset)},M.pick=function(w,k,A,b){var E=[],T=[],F=this.offset;typeof w=="number"&&w>=0?F=F+this.stride[0]*w|0:(E.push(this.shape[0]),T.push(this.stride[0])),typeof k=="number"&&k>=0?F=F+this.stride[1]*k|0:(E.push(this.shape[1]),T.push(this.stride[1])),typeof A=="number"&&A>=0?F=F+this.stride[2]*A|0:(E.push(this.shape[2]),T.push(this.stride[2])),typeof b=="number"&&b>=0?F=F+this.stride[3]*b|0:(E.push(this.shape[3]),T.push(this.stride[3]));var D=v[E.length+1];return D(this.data,E,T,F)},function(w,k,A,b){return new S(w,k[0],k[1],k[2],k[3],A[0],A[1],A[2],A[3],b)}},5:function(v,x,S){function M(w,k,A,b,E,T,F,D,R,P,z,I){this.data=w,this.shape=[k,A,b,E,T],this.stride=[F,D,R,P,z],this.offset=I|0}var C=M.prototype;return C.dtype=v,C.dimension=5,Object.defineProperty(C,"size",{get:function(){return this.shape[0]*this.shape[1]*this.shape[2]*this.shape[3]*this.shape[4]}}),Object.defineProperty(C,"order",{get:S}),C.set=function(k,A,b,E,T,F){return v==="generic"?this.data.set(this.offset+this.stride[0]*k+this.stride[1]*A+this.stride[2]*b+this.stride[3]*E+this.stride[4]*T,F):this.data[this.offset+this.stride[0]*k+this.stride[1]*A+this.stride[2]*b+this.stride[3]*E+this.stride[4]*T]=F},C.get=function(k,A,b,E,T){return v==="generic"?this.data.get(this.offset+this.stride[0]*k+this.stride[1]*A+this.stride[2]*b+this.stride[3]*E+this.stride[4]*T):this.data[this.offset+this.stride[0]*k+this.stride[1]*A+this.stride[2]*b+this.stride[3]*E+this.stride[4]*T]},C.index=function(k,A,b,E,T){return this.offset+this.stride[0]*k+this.stride[1]*A+this.stride[2]*b+this.stride[3]*E+this.stride[4]*T},C.hi=function(k,A,b,E,T){return new M(this.data,typeof k!="number"||k<0?this.shape[0]:k|0,typeof A!="number"||A<0?this.shape[1]:A|0,typeof b!="number"||b<0?this.shape[2]:b|0,typeof E!="number"||E<0?this.shape[3]:E|0,typeof T!="number"||T<0?this.shape[4]:T|0,this.stride[0],this.stride[1],this.stride[2],this.stride[3],this.stride[4],this.offset)},C.lo=function(k,A,b,E,T){var F=this.offset,D=0,R=this.shape[0],P=this.shape[1],z=this.shape[2],I=this.shape[3],L=this.shape[4],B=this.stride[0],O=this.stride[1],G=this.stride[2],W=this.stride[3],X=this.stride[4];return typeof k=="number"&&k>=0&&(D=k|0,F+=B*D,R-=D),typeof A=="number"&&A>=0&&(D=A|0,F+=O*D,P-=D),typeof b=="number"&&b>=0&&(D=b|0,F+=G*D,z-=D),typeof E=="number"&&E>=0&&(D=E|0,F+=W*D,I-=D),typeof T=="number"&&T>=0&&(D=T|0,F+=X*D,L-=D),new M(this.data,R,P,z,I,L,B,O,G,W,X,F)},C.step=function(k,A,b,E,T){var F=this.shape[0],D=this.shape[1],R=this.shape[2],P=this.shape[3],z=this.shape[4],I=this.stride[0],L=this.stride[1],B=this.stride[2],O=this.stride[3],G=this.stride[4],W=this.offset,X=0,Z=Math.ceil;return typeof k=="number"&&(X=k|0,X<0?(W+=I*(F-1),F=Z(-F/X)):F=Z(F/X),I*=X),typeof A=="number"&&(X=A|0,X<0?(W+=L*(D-1),D=Z(-D/X)):D=Z(D/X),L*=X),typeof b=="number"&&(X=b|0,X<0?(W+=B*(R-1),R=Z(-R/X)):R=Z(R/X),B*=X),typeof E=="number"&&(X=E|0,X<0?(W+=O*(P-1),P=Z(-P/X)):P=Z(P/X),O*=X),typeof T=="number"&&(X=T|0,X<0?(W+=G*(z-1),z=Z(-z/X)):z=Z(z/X),G*=X),new M(this.data,F,D,R,P,z,I,L,B,O,G,W)},C.transpose=function(k,A,b,E,T){k=k===void 0?0:k|0,A=A===void 0?1:A|0,b=b===void 0?2:b|0,E=E===void 0?3:E|0,T=T===void 0?4:T|0;var F=this.shape,D=this.stride;return new M(this.data,F[k],F[A],F[b],F[E],F[T],D[k],D[A],D[b],D[E],D[T],this.offset)},C.pick=function(k,A,b,E,T){var F=[],D=[],R=this.offset;typeof k=="number"&&k>=0?R=R+this.stride[0]*k|0:(F.push(this.shape[0]),D.push(this.stride[0])),typeof A=="number"&&A>=0?R=R+this.stride[1]*A|0:(F.push(this.shape[1]),D.push(this.stride[1])),typeof b=="number"&&b>=0?R=R+this.stride[2]*b|0:(F.push(this.shape[2]),D.push(this.stride[2])),typeof E=="number"&&E>=0?R=R+this.stride[3]*E|0:(F.push(this.shape[3]),D.push(this.stride[3])),typeof T=="number"&&T>=0?R=R+this.stride[4]*T|0:(F.push(this.shape[4]),D.push(this.stride[4]));var P=x[F.length+1];return P(this.data,F,D,R)},function(k,A,b,E){return new M(k,A[0],A[1],A[2],A[3],A[4],b[0],b[1],b[2],b[3],b[4],E)}}};function p(_,v){var x=v===-1?"T":String(v),S=d[x];return v===-1?S(_):v===0?S(_,m[_][0]):S(_,m[_],h)}function g(_){if(u(_))return"buffer";if(c)switch(Object.prototype.toString.call(_)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8ClampedArray]":return"uint8_clamped";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object BigInt64Array]":return"bigint64";case"[object BigUint64Array]":return"biguint64"}return Array.isArray(_)?"array":"generic"}var m={generic:[],buffer:[],array:[],float32:[],float64:[],int8:[],int16:[],int32:[],uint8_clamped:[],uint8:[],uint16:[],uint32:[],bigint64:[],biguint64:[]};function y(_,v,x,S){if(_===void 0){var b=m.array[0];return b([])}else typeof _=="number"&&(_=[_]);v===void 0&&(v=[_.length]);var M=v.length;if(x===void 0){x=new Array(M);for(var C=M-1,w=1;C>=0;--C)x[C]=w,w*=v[C]}if(S===void 0){S=0;for(var C=0;C<M;++C)x[C]<0&&(S-=(v[C]-1)*x[C])}for(var k=g(_),A=m[k];A.length<=M+1;)A.push(p(k,A.length-1));var b=A[M+1];return b(_,v,x,S)}s.exports=y},1278(s,l,n){"use strict";var u=n(2361),c=Math.pow(2,-1074),f=-1>>>0;s.exports=h;function h(d,p){if(isNaN(d)||isNaN(p))return NaN;if(d===p)return d;if(d===0)return p<0?-c:c;var g=u.hi(d),m=u.lo(d);return p>d==d>0?m===f?(g+=1,m=0):m+=1:m===0?(m=f,g-=1):m-=1,u.pack(m,g)}},8406(s,l){var n=1e-6,u=1e-6;l.vertexNormals=function(c,f,h){for(var d=f.length,p=new Array(d),g=h===void 0?n:h,m=0;m<d;++m)p[m]=[0,0,0];for(var m=0;m<c.length;++m)for(var y=c[m],_=0,v=y[y.length-1],x=y[0],S=0;S<y.length;++S){_=v,v=x,x=y[(S+1)%y.length];for(var M=f[_],C=f[v],w=f[x],k=new Array(3),A=0,b=new Array(3),E=0,T=0;T<3;++T)k[T]=M[T]-C[T],A+=k[T]*k[T],b[T]=w[T]-C[T],E+=b[T]*b[T];if(A*E>g)for(var F=p[v],D=1/Math.sqrt(A*E),T=0;T<3;++T){var R=(T+1)%3,P=(T+2)%3;F[T]+=D*(b[R]*k[P]-b[P]*k[R])}}for(var m=0;m<d;++m){for(var F=p[m],z=0,T=0;T<3;++T)z+=F[T]*F[T];if(z>g)for(var D=1/Math.sqrt(z),T=0;T<3;++T)F[T]*=D;else for(var T=0;T<3;++T)F[T]=0}return p},l.faceNormals=function(c,f,h){for(var d=c.length,p=new Array(d),g=h===void 0?u:h,m=0;m<d;++m){for(var y=c[m],_=new Array(3),v=0;v<3;++v)_[v]=f[y[v]];for(var x=new Array(3),S=new Array(3),v=0;v<3;++v)x[v]=_[1][v]-_[0][v],S[v]=_[2][v]-_[0][v];for(var M=new Array(3),C=0,v=0;v<3;++v){var w=(v+1)%3,k=(v+2)%3;M[v]=x[w]*S[k]-x[k]*S[w],C+=M[v]*M[v]}C>g?C=1/Math.sqrt(C):C=0;for(var v=0;v<3;++v)M[v]*=C;p[m]=M}return p}},4081(s){"use strict";s.exports=l;function l(n,u,c,f,h,d,p,g,m,y){var _=u+d+y;if(v>0){var v=Math.sqrt(_+1);n[0]=.5*(p-m)/v,n[1]=.5*(g-f)/v,n[2]=.5*(c-d)/v,n[3]=.5*v}else{var x=Math.max(u,d,y),v=Math.sqrt(2*x-_+1);u>=x?(n[0]=.5*v,n[1]=.5*(h+c)/v,n[2]=.5*(g+f)/v,n[3]=.5*(p-m)/v):d>=x?(n[0]=.5*(c+h)/v,n[1]=.5*v,n[2]=.5*(m+p)/v,n[3]=.5*(g-f)/v):(n[0]=.5*(f+g)/v,n[1]=.5*(p+m)/v,n[2]=.5*v,n[3]=.5*(c-h)/v)}return n}},9977(s,l,n){"use strict";s.exports=v;var u=n(9215),c=n(6582),f=n(7399),h=n(7608),d=n(4081);function p(x,S,M){return Math.sqrt(Math.pow(x,2)+Math.pow(S,2)+Math.pow(M,2))}function g(x,S,M,C){return Math.sqrt(Math.pow(x,2)+Math.pow(S,2)+Math.pow(M,2)+Math.pow(C,2))}function m(x,S){var M=S[0],C=S[1],w=S[2],k=S[3],A=g(M,C,w,k);A>1e-6?(x[0]=M/A,x[1]=C/A,x[2]=w/A,x[3]=k/A):(x[0]=x[1]=x[2]=0,x[3]=1)}function y(x,S,M){this.radius=u([M]),this.center=u(S),this.rotation=u(x),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var _=y.prototype;_.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},_.recalcMatrix=function(x){this.radius.curve(x),this.center.curve(x),this.rotation.curve(x);var S=this.computedRotation;m(S,S);var M=this.computedMatrix;f(M,S);var C=this.computedCenter,w=this.computedEye,k=this.computedUp,A=Math.exp(this.computedRadius[0]);w[0]=C[0]+A*M[2],w[1]=C[1]+A*M[6],w[2]=C[2]+A*M[10],k[0]=M[1],k[1]=M[5],k[2]=M[9];for(var b=0;b<3;++b){for(var E=0,T=0;T<3;++T)E+=M[b+4*T]*w[T];M[12+b]=-E}},_.getMatrix=function(x,S){this.recalcMatrix(x);var M=this.computedMatrix;if(S){for(var C=0;C<16;++C)S[C]=M[C];return S}return M},_.idle=function(x){this.center.idle(x),this.radius.idle(x),this.rotation.idle(x)},_.flush=function(x){this.center.flush(x),this.radius.flush(x),this.rotation.flush(x)},_.pan=function(x,S,M,C){S=S||0,M=M||0,C=C||0,this.recalcMatrix(x);var w=this.computedMatrix,k=w[1],A=w[5],b=w[9],E=p(k,A,b);k/=E,A/=E,b/=E;var T=w[0],F=w[4],D=w[8],R=T*k+F*A+D*b;T-=k*R,F-=A*R,D-=b*R;var P=p(T,F,D);T/=P,F/=P,D/=P;var z=w[2],I=w[6],L=w[10],B=z*k+I*A+L*b,O=z*T+I*F+L*D;z-=B*k+O*T,I-=B*A+O*F,L-=B*b+O*D;var G=p(z,I,L);z/=G,I/=G,L/=G;var W=T*S+k*M,X=F*S+A*M,Z=D*S+b*M;this.center.move(x,W,X,Z);var J=Math.exp(this.computedRadius[0]);J=Math.max(1e-4,J+C),this.radius.set(x,Math.log(J))},_.rotate=function(x,S,M,C){this.recalcMatrix(x),S=S||0,M=M||0;var w=this.computedMatrix,k=w[0],A=w[4],b=w[8],E=w[1],T=w[5],F=w[9],D=w[2],R=w[6],P=w[10],z=S*k+M*E,I=S*A+M*T,L=S*b+M*F,B=-(R*L-P*I),O=-(P*z-D*L),G=-(D*I-R*z),W=Math.sqrt(Math.max(0,1-Math.pow(B,2)-Math.pow(O,2)-Math.pow(G,2))),X=g(B,O,G,W);X>1e-6?(B/=X,O/=X,G/=X,W/=X):(B=O=G=0,W=1);var Z=this.computedRotation,J=Z[0],N=Z[1],H=Z[2],$=Z[3],U=J*W+$*B+N*G-H*O,V=N*W+$*O+H*B-J*G,j=H*W+$*G+J*O-N*B,q=$*W-J*B-N*O-H*G;if(C){B=D,O=R,G=P;var Y=Math.sin(C)/p(B,O,G);B*=Y,O*=Y,G*=Y,W=Math.cos(S),U=U*W+q*B+V*G-j*O,V=V*W+q*O+j*B-U*G,j=j*W+q*G+U*O-V*B,q=q*W-U*B-V*O-j*G}var K=g(U,V,j,q);K>1e-6?(U/=K,V/=K,j/=K,q/=K):(U=V=j=0,q=1),this.rotation.set(x,U,V,j,q)},_.lookAt=function(x,S,M,C){this.recalcMatrix(x),M=M||this.computedCenter,S=S||this.computedEye,C=C||this.computedUp;var w=this.computedMatrix;c(w,S,M,C);var k=this.computedRotation;d(k,w[0],w[1],w[2],w[4],w[5],w[6],w[8],w[9],w[10]),m(k,k),this.rotation.set(x,k[0],k[1],k[2],k[3]);for(var A=0,b=0;b<3;++b)A+=Math.pow(M[b]-S[b],2);this.radius.set(x,.5*Math.log(Math.max(A,1e-6))),this.center.set(x,M[0],M[1],M[2])},_.translate=function(x,S,M,C){this.center.move(x,S||0,M||0,C||0)},_.setMatrix=function(x,S){var M=this.computedRotation;d(M,S[0],S[1],S[2],S[4],S[5],S[6],S[8],S[9],S[10]),m(M,M),this.rotation.set(x,M[0],M[1],M[2],M[3]);var C=this.computedMatrix;h(C,S);var w=C[15];if(Math.abs(w)>1e-6){var k=C[12]/w,A=C[13]/w,b=C[14]/w;this.recalcMatrix(x);var E=Math.exp(this.computedRadius[0]);this.center.set(x,k-C[2]*E,A-C[6]*E,b-C[10]*E),this.radius.idle(x)}else this.center.idle(x),this.radius.idle(x)},_.setDistance=function(x,S){S>0&&this.radius.set(x,Math.log(S))},_.setDistanceLimits=function(x,S){x>0?x=Math.log(x):x=-1/0,S>0?S=Math.log(S):S=1/0,S=Math.max(S,x),this.radius.bounds[0][0]=x,this.radius.bounds[1][0]=S},_.getDistanceLimits=function(x){var S=this.radius.bounds;return x?(x[0]=Math.exp(S[0][0]),x[1]=Math.exp(S[1][0]),x):[Math.exp(S[0][0]),Math.exp(S[1][0])]},_.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},_.fromJSON=function(x){var S=this.lastT(),M=x.center;M&&this.center.set(S,M[0],M[1],M[2]);var C=x.rotation;C&&this.rotation.set(S,C[0],C[1],C[2],C[3]);var w=x.distance;w&&w>0&&this.radius.set(S,Math.log(w)),this.setDistanceLimits(x.zoomMin,x.zoomMax)};function v(x){x=x||{};var S=x.center||[0,0,0],M=x.rotation||[0,0,0,1],C=x.radius||1;S=[].slice.call(S,0,3),M=[].slice.call(M,0,4),m(M,M);var w=new y(M,S,Math.log(C));return w.setDistanceLimits(x.zoomMin,x.zoomMax),("eye"in x||"up"in x)&&w.lookAt(0,x.eye,x.center,x.up),w}},1371(s,l,n){"use strict";var u=n(3233);s.exports=function(f,h,d){return d=typeof d<"u"?d+"":" ",u(d,h)+f}},3202(s){s.exports=function(n,u){u||(u=[0,""]),n=String(n);var c=parseFloat(n,10);return u[0]=c,u[1]=n.match(/[\d.\-\+]*\s*(.*)/)[1]||"",u}},3088(s,l,n){"use strict";s.exports=c;var u=n(3140);function c(f,h){for(var d=h.length|0,p=f.length,g=[new Array(d),new Array(d)],m=0;m<d;++m)g[0][m]=[],g[1][m]=[];for(var m=0;m<p;++m){var y=f[m];g[0][y[0]].push(y),g[1][y[1]].push(y)}for(var _=[],m=0;m<d;++m)g[0][m].length+g[1][m].length===0&&_.push([m]);function v(b,E){var T=g[E][b[E]];T.splice(T.indexOf(b),1)}function x(b,E,T){for(var F,D,R,P=0;P<2;++P)if(g[P][E].length>0){F=g[P][E][0],R=P;break}D=F[R^1];for(var z=0;z<2;++z)for(var I=g[z][E],L=0;L<I.length;++L){var B=I[L],O=B[z^1],G=u(h[b],h[E],h[D],h[O]);G>0&&(F=B,D=O,R=z)}return T||F&&v(F,R),D}function S(b,E){var T=g[E][b][0],F=[b];v(T,E);for(var D=T[E^1],R=E;;){for(;D!==b;)F.push(D),D=x(F[F.length-2],D,!1);if(g[0][b].length+g[1][b].length===0)break;var P=F[F.length-1],z=b,I=F[1],L=x(P,z,!0);if(u(h[P],h[z],h[I],h[L])<0)break;F.push(b),D=x(P,z)}return F}function M(b,E){return E[1]===E[E.length-1]}for(var m=0;m<d;++m)for(var C=0;C<2;++C){for(var w=[];g[C][m].length>0;){var k=g[0][m].length,A=S(m,C);M(w,A)?w.push.apply(w,A):(w.length>0&&_.push(w),w=A)}w.length>0&&_.push(w)}return _}},5609(s,l,n){"use strict";s.exports=c;var u=n(3134);function c(f,h){for(var d=u(f,h.length),p=new Array(h.length),g=new Array(h.length),m=[],y=0;y<h.length;++y){var _=d[y].length;g[y]=_,p[y]=!0,_<=1&&m.push(y)}for(;m.length>0;){var v=m.pop();p[v]=!1;for(var x=d[v],y=0;y<x.length;++y){var S=x[y];--g[S]===0&&m.push(S)}}for(var M=new Array(h.length),C=[],y=0;y<h.length;++y)if(p[y]){var v=C.length;M[y]=v,C.push(h[y])}else M[y]=-1;for(var w=[],y=0;y<f.length;++y){var k=f[y];p[k[0]]&&p[k[1]]&&w.push([M[k[0]],M[k[1]]])}return[w,C]}},2095(s,l,n){"use strict";s.exports=_;var u=n(3134),c=n(3088),f=n(5085),h=n(5250),d=n(8210),p=n(1682),g=n(5609);function m(v,x){for(var S=new Array(v),M=0;M<v;++M)S[M]=x;return S}function y(v){for(var x=new Array(v),S=0;S<v;++S)x[S]=[];return x}function _(v,x){var Y=g(v,x);v=Y[0],x=Y[1];for(var S=x.length,M=v.length,C=u(v,x.length),w=0;w<S;++w)if(C[w].length%2===1)throw new Error("planar-graph-to-polyline: graph must be manifold");var k=c(v,x);function A(pe){for(var xe=pe.length,ye=[0],fe=0;fe<xe;++fe){var ae=x[pe[fe]],ee=x[pe[(fe+1)%xe]],ie=h(-ae[0],ae[1]),Q=h(-ae[0],ee[1]),ue=h(ee[0],ae[1]),ge=h(ee[0],ee[1]);ye=d(ye,d(d(ie,Q),d(ue,ge)))}return ye[ye.length-1]>0}k=k.filter(A);for(var b=k.length,E=new Array(b),T=new Array(b),w=0;w<b;++w){E[w]=w;var F=new Array(b),D=k[w].map(function(xe){return x[xe]}),R=f([D]),P=0;e:for(var z=0;z<b;++z)if(F[z]=0,w!==z){for(var I=k[z],L=I.length,B=0;B<L;++B){var O=R(x[I[B]]);if(O!==0){O<0&&(F[z]=1,P+=1);continue e}}F[z]=1,P+=1}T[w]=[P,w,F]}T.sort(function(pe,xe){return xe[0]-pe[0]});for(var w=0;w<b;++w)for(var F=T[w],G=F[1],W=F[2],z=0;z<b;++z)W[z]&&(E[z]=G);for(var X=y(b),w=0;w<b;++w)X[w].push(E[w]),X[E[w]].push(w);for(var Z={},J=m(S,!1),w=0;w<b;++w)for(var I=k[w],L=I.length,z=0;z<L;++z){var N=I[z],H=I[(z+1)%L],$=Math.min(N,H)+":"+Math.max(N,H);if($ in Z){var U=Z[$];X[U].push(w),X[w].push(U),J[N]=J[H]=!0}else Z[$]=w}function V(pe){for(var xe=pe.length,ye=0;ye<xe;++ye)if(!J[pe[ye]])return!1;return!0}for(var j=[],q=m(b,-1),w=0;w<b;++w)E[w]===w&&!V(k[w])?(j.push(w),q[w]=0):q[w]=-1;for(var Y=[];j.length>0;){var K=j.pop(),te=X[K];p(te,function(pe,xe){return pe-xe});var ne=te.length,se=q[K],le;if(se===0){var I=k[K];le=[I]}for(var w=0;w<ne;++w){var ce=te[w];if(!(q[ce]>=0)&&(q[ce]=se^1,j.push(ce),se===0)){var I=k[ce];V(I)||(I.reverse(),le.push(I))}}se===0&&Y.push(le)}return Y}},5085(s,l,n){s.exports=x;var u=n(3250)[3],c=n(4209),f=n(3352),h=n(2478);function d(){return!0}function p(S){return function(M,C){var w=S[M];return w?!!w.queryPoint(C,d):!1}}function g(S){for(var M={},C=0;C<S.length;++C){var w=S[C],k=w[0][0],A=w[0][1],b=w[1][1],E=[Math.min(A,b),Math.max(A,b)];k in M?M[k].push(E):M[k]=[E]}for(var T={},F=Object.keys(M),C=0;C<F.length;++C){var D=M[F[C]];T[F[C]]=f(D)}return p(T)}function m(S,M){return function(C){var w=h.le(M,C[0]);if(w<0)return 1;var k=S[w];if(!k)if(w>0&&M[w]===C[0])k=S[w-1];else return 1;for(var A=1;k;){var b=k.key,E=u(C,b[0],b[1]);if(b[0][0]<b[1][0])if(E<0)k=k.left;else if(E>0)A=-1,k=k.right;else return 0;else if(E>0)k=k.left;else if(E<0)A=1,k=k.right;else return 0}return A}}function y(S){return 1}function _(S){return function(C){return S(C[0],C[1])?0:1}}function v(S,M){return function(w){return S(w[0],w[1])?0:M(w)}}function x(S){for(var M=S.length,C=[],w=[],k=0,A=0;A<M;++A)for(var b=S[A],E=b.length,T=E-1,F=0;F<E;T=F++){var D=b[T],R=b[F];D[0]===R[0]?w.push([D,R]):C.push([D,R])}if(C.length===0)return w.length===0?y:_(g(w));var P=c(C),z=m(P.slabs,P.coordinates);return w.length===0?z:v(g(w),z)}},9346(s){"use strict";var l=new Float64Array(4),n=new Float64Array(4),u=new Float64Array(4);function c(f,h,d,p,g){l.length<p.length&&(l=new Float64Array(p.length),n=new Float64Array(p.length),u=new Float64Array(p.length));for(var m=0;m<p.length;++m)l[m]=f[m]-p[m],n[m]=h[m]-f[m],u[m]=d[m]-f[m];for(var y=0,_=0,v=0,x=0,S=0,M=0,m=0;m<p.length;++m){var C=n[m],w=u[m],k=l[m];y+=C*C,_+=C*w,v+=w*w,x+=k*C,S+=k*w,M+=k*k}var A=Math.abs(y*v-_*_),b=_*S-v*x,E=_*x-y*S,T;if(b+E<=A)if(b<0)E<0&&x<0?(E=0,-x>=y?(b=1,T=y+2*x+M):(b=-x/y,T=x*b+M)):(b=0,S>=0?(E=0,T=M):-S>=v?(E=1,T=v+2*S+M):(E=-S/v,T=S*E+M));else if(E<0)E=0,x>=0?(b=0,T=M):-x>=y?(b=1,T=y+2*x+M):(b=-x/y,T=x*b+M);else{var F=1/A;b*=F,E*=F,T=b*(y*b+_*E+2*x)+E*(_*b+v*E+2*S)+M}else{var D,R,P,z;b<0?(D=_+x,R=v+S,R>D?(P=R-D,z=y-2*_+v,P>=z?(b=1,E=0,T=y+2*x+M):(b=P/z,E=1-b,T=b*(y*b+_*E+2*x)+E*(_*b+v*E+2*S)+M)):(b=0,R<=0?(E=1,T=v+2*S+M):S>=0?(E=0,T=M):(E=-S/v,T=S*E+M))):E<0?(D=_+S,R=y+x,R>D?(P=R-D,z=y-2*_+v,P>=z?(E=1,b=0,T=v+2*S+M):(E=P/z,b=1-E,T=b*(y*b+_*E+2*x)+E*(_*b+v*E+2*S)+M)):(E=0,R<=0?(b=1,T=y+2*x+M):x>=0?(b=0,T=M):(b=-x/y,T=x*b+M))):(P=v+S-_-x,P<=0?(b=0,E=1,T=v+2*S+M):(z=y-2*_+v,P>=z?(b=1,E=0,T=y+2*x+M):(b=P/z,E=1-b,T=b*(y*b+_*E+2*x)+E*(_*b+v*E+2*S)+M)))}for(var I=1-b-E,m=0;m<p.length;++m)g[m]=I*f[m]+b*h[m]+E*d[m];return T<0?0:T}s.exports=c},8648(s,l,n){s.exports=n(783)},2653(s,l,n){"use strict";var u=n(3865);s.exports=c;function c(f,h){for(var d=f.length,p=new Array(d),g=0;g<d;++g)p[g]=u(f[g],h[g]);return p}},5838(s,l,n){"use strict";s.exports=c;var u=n(7842);function c(f){for(var h=new Array(f.length),d=0;d<f.length;++d)h[d]=u(f[d]);return h}},8987(s,l,n){"use strict";var u=n(7842),c=n(6504);s.exports=f;function f(h,d){for(var p=u(d),g=h.length,m=new Array(g),y=0;y<g;++y)m[y]=c(h[y],p);return m}},544(s,l,n){"use strict";var u=n(5572);s.exports=c;function c(f,h){for(var d=f.length,p=new Array(d),g=0;g<d;++g)p[g]=u(f[g],h[g]);return p}},5771(s,l,n){"use strict";var u=n(8507),c=n(3788),f=n(2419);s.exports=h;function h(d){d.sort(c);for(var p=d.length,g=0,m=0;m<p;++m){var y=d[m],_=f(y);if(_!==0){if(g>0){var v=d[g-1];if(u(y,v)===0&&f(v)!==_){g-=1;continue}}d[g++]=y}}return d.length=g,d}},3233(s){"use strict";var l="",n;s.exports=u;function u(c,f){if(typeof c!="string")throw new TypeError("expected a string");if(f===1)return c;if(f===2)return c+c;var h=c.length*f;if(n!==c||typeof n>"u")n=c,l="";else if(l.length>=h)return l.substr(0,h);for(;h>l.length&&f>1;)f&1&&(l+=c),f>>=1,c+=c;return l+=c,l=l.substr(0,h),l}},3025(s,l,n){s.exports=n.g.performance&&n.g.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}},7004(s){"use strict";s.exports=l;function l(n){for(var u=n.length,c=n[n.length-1],f=u,h=u-2;h>=0;--h){var d=c,p=n[h];c=d+p;var g=c-d,m=p-g;m&&(n[--f]=c,c=m)}for(var y=0,h=f;h<u;++h){var d=n[h],p=c;c=d+p;var g=c-d,m=p-g;m&&(n[y++]=m)}return n[y++]=c,n.length=y,n}},2962(s,l,n){"use strict";var u=n(5250),c=n(8210),f=n(3012),h=n(7004),d=6;function p(M,C,w,k){return function(b){return k(M(w(b[0][0],b[1][1]),w(-b[0][1],b[1][0])))}}function g(M,C,w,k){return function(b){return k(M(C(M(w(b[1][1],b[2][2]),w(-b[1][2],b[2][1])),b[0][0]),M(C(M(w(b[1][0],b[2][2]),w(-b[1][2],b[2][0])),-b[0][1]),C(M(w(b[1][0],b[2][1]),w(-b[1][1],b[2][0])),b[0][2]))))}}function m(M,C,w,k){return function(b){return k(M(M(C(M(C(M(w(b[2][2],b[3][3]),w(-b[2][3],b[3][2])),b[1][1]),M(C(M(w(b[2][1],b[3][3]),w(-b[2][3],b[3][1])),-b[1][2]),C(M(w(b[2][1],b[3][2]),w(-b[2][2],b[3][1])),b[1][3]))),b[0][0]),C(M(C(M(w(b[2][2],b[3][3]),w(-b[2][3],b[3][2])),b[1][0]),M(C(M(w(b[2][0],b[3][3]),w(-b[2][3],b[3][0])),-b[1][2]),C(M(w(b[2][0],b[3][2]),w(-b[2][2],b[3][0])),b[1][3]))),-b[0][1])),M(C(M(C(M(w(b[2][1],b[3][3]),w(-b[2][3],b[3][1])),b[1][0]),M(C(M(w(b[2][0],b[3][3]),w(-b[2][3],b[3][0])),-b[1][1]),C(M(w(b[2][0],b[3][1]),w(-b[2][1],b[3][0])),b[1][3]))),b[0][2]),C(M(C(M(w(b[2][1],b[3][2]),w(-b[2][2],b[3][1])),b[1][0]),M(C(M(w(b[2][0],b[3][2]),w(-b[2][2],b[3][0])),-b[1][1]),C(M(w(b[2][0],b[3][1]),w(-b[2][1],b[3][0])),b[1][2]))),-b[0][3]))))}}function y(M,C,w,k){return function(b){return k(M(M(C(M(M(C(M(C(M(w(b[3][3],b[4][4]),w(-b[3][4],b[4][3])),b[2][2]),M(C(M(w(b[3][2],b[4][4]),w(-b[3][4],b[4][2])),-b[2][3]),C(M(w(b[3][2],b[4][3]),w(-b[3][3],b[4][2])),b[2][4]))),b[1][1]),C(M(C(M(w(b[3][3],b[4][4]),w(-b[3][4],b[4][3])),b[2][1]),M(C(M(w(b[3][1],b[4][4]),w(-b[3][4],b[4][1])),-b[2][3]),C(M(w(b[3][1],b[4][3]),w(-b[3][3],b[4][1])),b[2][4]))),-b[1][2])),M(C(M(C(M(w(b[3][2],b[4][4]),w(-b[3][4],b[4][2])),b[2][1]),M(C(M(w(b[3][1],b[4][4]),w(-b[3][4],b[4][1])),-b[2][2]),C(M(w(b[3][1],b[4][2]),w(-b[3][2],b[4][1])),b[2][4]))),b[1][3]),C(M(C(M(w(b[3][2],b[4][3]),w(-b[3][3],b[4][2])),b[2][1]),M(C(M(w(b[3][1],b[4][3]),w(-b[3][3],b[4][1])),-b[2][2]),C(M(w(b[3][1],b[4][2]),w(-b[3][2],b[4][1])),b[2][3]))),-b[1][4]))),b[0][0]),C(M(M(C(M(C(M(w(b[3][3],b[4][4]),w(-b[3][4],b[4][3])),b[2][2]),M(C(M(w(b[3][2],b[4][4]),w(-b[3][4],b[4][2])),-b[2][3]),C(M(w(b[3][2],b[4][3]),w(-b[3][3],b[4][2])),b[2][4]))),b[1][0]),C(M(C(M(w(b[3][3],b[4][4]),w(-b[3][4],b[4][3])),b[2][0]),M(C(M(w(b[3][0],b[4][4]),w(-b[3][4],b[4][0])),-b[2][3]),C(M(w(b[3][0],b[4][3]),w(-b[3][3],b[4][0])),b[2][4]))),-b[1][2])),M(C(M(C(M(w(b[3][2],b[4][4]),w(-b[3][4],b[4][2])),b[2][0]),M(C(M(w(b[3][0],b[4][4]),w(-b[3][4],b[4][0])),-b[2][2]),C(M(w(b[3][0],b[4][2]),w(-b[3][2],b[4][0])),b[2][4]))),b[1][3]),C(M(C(M(w(b[3][2],b[4][3]),w(-b[3][3],b[4][2])),b[2][0]),M(C(M(w(b[3][0],b[4][3]),w(-b[3][3],b[4][0])),-b[2][2]),C(M(w(b[3][0],b[4][2]),w(-b[3][2],b[4][0])),b[2][3]))),-b[1][4]))),-b[0][1])),M(C(M(M(C(M(C(M(w(b[3][3],b[4][4]),w(-b[3][4],b[4][3])),b[2][1]),M(C(M(w(b[3][1],b[4][4]),w(-b[3][4],b[4][1])),-b[2][3]),C(M(w(b[3][1],b[4][3]),w(-b[3][3],b[4][1])),b[2][4]))),b[1][0]),C(M(C(M(w(b[3][3],b[4][4]),w(-b[3][4],b[4][3])),b[2][0]),M(C(M(w(b[3][0],b[4][4]),w(-b[3][4],b[4][0])),-b[2][3]),C(M(w(b[3][0],b[4][3]),w(-b[3][3],b[4][0])),b[2][4]))),-b[1][1])),M(C(M(C(M(w(b[3][1],b[4][4]),w(-b[3][4],b[4][1])),b[2][0]),M(C(M(w(b[3][0],b[4][4]),w(-b[3][4],b[4][0])),-b[2][1]),C(M(w(b[3][0],b[4][1]),w(-b[3][1],b[4][0])),b[2][4]))),b[1][3]),C(M(C(M(w(b[3][1],b[4][3]),w(-b[3][3],b[4][1])),b[2][0]),M(C(M(w(b[3][0],b[4][3]),w(-b[3][3],b[4][0])),-b[2][1]),C(M(w(b[3][0],b[4][1]),w(-b[3][1],b[4][0])),b[2][3]))),-b[1][4]))),b[0][2]),M(C(M(M(C(M(C(M(w(b[3][2],b[4][4]),w(-b[3][4],b[4][2])),b[2][1]),M(C(M(w(b[3][1],b[4][4]),w(-b[3][4],b[4][1])),-b[2][2]),C(M(w(b[3][1],b[4][2]),w(-b[3][2],b[4][1])),b[2][4]))),b[1][0]),C(M(C(M(w(b[3][2],b[4][4]),w(-b[3][4],b[4][2])),b[2][0]),M(C(M(w(b[3][0],b[4][4]),w(-b[3][4],b[4][0])),-b[2][2]),C(M(w(b[3][0],b[4][2]),w(-b[3][2],b[4][0])),b[2][4]))),-b[1][1])),M(C(M(C(M(w(b[3][1],b[4][4]),w(-b[3][4],b[4][1])),b[2][0]),M(C(M(w(b[3][0],b[4][4]),w(-b[3][4],b[4][0])),-b[2][1]),C(M(w(b[3][0],b[4][1]),w(-b[3][1],b[4][0])),b[2][4]))),b[1][2]),C(M(C(M(w(b[3][1],b[4][2]),w(-b[3][2],b[4][1])),b[2][0]),M(C(M(w(b[3][0],b[4][2]),w(-b[3][2],b[4][0])),-b[2][1]),C(M(w(b[3][0],b[4][1]),w(-b[3][1],b[4][0])),b[2][2]))),-b[1][4]))),-b[0][3]),C(M(M(C(M(C(M(w(b[3][2],b[4][3]),w(-b[3][3],b[4][2])),b[2][1]),M(C(M(w(b[3][1],b[4][3]),w(-b[3][3],b[4][1])),-b[2][2]),C(M(w(b[3][1],b[4][2]),w(-b[3][2],b[4][1])),b[2][3]))),b[1][0]),C(M(C(M(w(b[3][2],b[4][3]),w(-b[3][3],b[4][2])),b[2][0]),M(C(M(w(b[3][0],b[4][3]),w(-b[3][3],b[4][0])),-b[2][2]),C(M(w(b[3][0],b[4][2]),w(-b[3][2],b[4][0])),b[2][3]))),-b[1][1])),M(C(M(C(M(w(b[3][1],b[4][3]),w(-b[3][3],b[4][1])),b[2][0]),M(C(M(w(b[3][0],b[4][3]),w(-b[3][3],b[4][0])),-b[2][1]),C(M(w(b[3][0],b[4][1]),w(-b[3][1],b[4][0])),b[2][3]))),b[1][2]),C(M(C(M(w(b[3][1],b[4][2]),w(-b[3][2],b[4][1])),b[2][0]),M(C(M(w(b[3][0],b[4][2]),w(-b[3][2],b[4][0])),-b[2][1]),C(M(w(b[3][0],b[4][1]),w(-b[3][1],b[4][0])),b[2][2]))),-b[1][3]))),b[0][4])))))}}function _(M){var C=M===2?p:M===3?g:M===4?m:M===5?y:void 0;return C(c,f,u,h)}var v=[function(){return[0]},function(C){return[C[0][0]]}];function x(M,C,w,k,A,b,E,T){return function(D){switch(D.length){case 0:return M(D);case 1:return C(D);case 2:return w(D);case 3:return k(D);case 4:return A(D);case 5:return b(D)}var R=E[D.length];return R||(R=E[D.length]=T(D.length)),R(D)}}function S(){for(;v.length<d;)v.push(_(v.length));s.exports=x.apply(void 0,v.concat([v,_]));for(var M=0;M<v.length;++M)s.exports[M]=v[M]}S()},1944(s,l,n){"use strict";var u=n(5250),c=n(8210);s.exports=f;function f(h,d){for(var p=u(h[0],d[0]),g=1;g<h.length;++g)p=c(p,u(h[g],d[g]));return p}},2646(s,l,n){"use strict";var u=n(5250),c=n(8210),f=n(8545),h=n(3012),d=6;function p(A){var b=A===3?_:A===4?v:A===5?x:S;return b(c,f,u,h)}function g(){return 0}function m(){return 0}function y(){return 0}function _(A,b,E,T){function F(D,R,P){var z=E(D[0],D[0]),I=T(z,R[0]),L=T(z,P[0]),B=E(R[0],R[0]),O=T(B,D[0]),G=T(B,P[0]),W=E(P[0],P[0]),X=T(W,D[0]),Z=T(W,R[0]),J=A(b(Z,G),b(O,I)),N=b(X,L),H=b(J,N);return H[H.length-1]}return F}function v(A,b,E,T){function F(D,R,P,z){var I=A(E(D[0],D[0]),E(D[1],D[1])),L=T(I,R[0]),B=T(I,P[0]),O=T(I,z[0]),G=A(E(R[0],R[0]),E(R[1],R[1])),W=T(G,D[0]),X=T(G,P[0]),Z=T(G,z[0]),J=A(E(P[0],P[0]),E(P[1],P[1])),N=T(J,D[0]),H=T(J,R[0]),$=T(J,z[0]),U=A(E(z[0],z[0]),E(z[1],z[1])),V=T(U,D[0]),j=T(U,R[0]),q=T(U,P[0]),Y=A(A(T(b(q,$),R[1]),A(T(b(j,Z),-P[1]),T(b(H,X),z[1]))),A(T(b(j,Z),D[1]),A(T(b(V,O),-R[1]),T(b(W,L),z[1])))),K=A(A(T(b(q,$),D[1]),A(T(b(V,O),-P[1]),T(b(N,B),z[1]))),A(T(b(H,X),D[1]),A(T(b(N,B),-R[1]),T(b(W,L),P[1])))),te=b(Y,K);return te[te.length-1]}return F}function x(A,b,E,T){function F(D,R,P,z,I){var L=A(E(D[0],D[0]),A(E(D[1],D[1]),E(D[2],D[2]))),B=T(L,R[0]),O=T(L,P[0]),G=T(L,z[0]),W=T(L,I[0]),X=A(E(R[0],R[0]),A(E(R[1],R[1]),E(R[2],R[2]))),Z=T(X,D[0]),J=T(X,P[0]),N=T(X,z[0]),H=T(X,I[0]),$=A(E(P[0],P[0]),A(E(P[1],P[1]),E(P[2],P[2]))),U=T($,D[0]),V=T($,R[0]),j=T($,z[0]),q=T($,I[0]),Y=A(E(z[0],z[0]),A(E(z[1],z[1]),E(z[2],z[2]))),K=T(Y,D[0]),te=T(Y,R[0]),ne=T(Y,P[0]),se=T(Y,I[0]),le=A(E(I[0],I[0]),A(E(I[1],I[1]),E(I[2],I[2]))),ce=T(le,D[0]),pe=T(le,R[0]),xe=T(le,P[0]),ye=T(le,z[0]),fe=A(A(A(T(A(T(b(ye,se),P[1]),A(T(b(xe,q),-z[1]),T(b(ne,j),I[1]))),R[2]),A(T(A(T(b(ye,se),R[1]),A(T(b(pe,H),-z[1]),T(b(te,N),I[1]))),-P[2]),T(A(T(b(xe,q),R[1]),A(T(b(pe,H),-P[1]),T(b(V,J),I[1]))),z[2]))),A(T(A(T(b(ne,j),R[1]),A(T(b(te,N),-P[1]),T(b(V,J),z[1]))),-I[2]),A(T(A(T(b(ye,se),R[1]),A(T(b(pe,H),-z[1]),T(b(te,N),I[1]))),D[2]),T(A(T(b(ye,se),D[1]),A(T(b(ce,W),-z[1]),T(b(K,G),I[1]))),-R[2])))),A(A(T(A(T(b(pe,H),D[1]),A(T(b(ce,W),-R[1]),T(b(Z,B),I[1]))),z[2]),A(T(A(T(b(te,N),D[1]),A(T(b(K,G),-R[1]),T(b(Z,B),z[1]))),-I[2]),T(A(T(b(ne,j),R[1]),A(T(b(te,N),-P[1]),T(b(V,J),z[1]))),D[2]))),A(T(A(T(b(ne,j),D[1]),A(T(b(K,G),-P[1]),T(b(U,O),z[1]))),-R[2]),A(T(A(T(b(te,N),D[1]),A(T(b(K,G),-R[1]),T(b(Z,B),z[1]))),P[2]),T(A(T(b(V,J),D[1]),A(T(b(U,O),-R[1]),T(b(Z,B),P[1]))),-z[2]))))),ae=A(A(A(T(A(T(b(ye,se),P[1]),A(T(b(xe,q),-z[1]),T(b(ne,j),I[1]))),D[2]),T(A(T(b(ye,se),D[1]),A(T(b(ce,W),-z[1]),T(b(K,G),I[1]))),-P[2])),A(T(A(T(b(xe,q),D[1]),A(T(b(ce,W),-P[1]),T(b(U,O),I[1]))),z[2]),T(A(T(b(ne,j),D[1]),A(T(b(K,G),-P[1]),T(b(U,O),z[1]))),-I[2]))),A(A(T(A(T(b(xe,q),R[1]),A(T(b(pe,H),-P[1]),T(b(V,J),I[1]))),D[2]),T(A(T(b(xe,q),D[1]),A(T(b(ce,W),-P[1]),T(b(U,O),I[1]))),-R[2])),A(T(A(T(b(pe,H),D[1]),A(T(b(ce,W),-R[1]),T(b(Z,B),I[1]))),P[2]),T(A(T(b(V,J),D[1]),A(T(b(U,O),-R[1]),T(b(Z,B),P[1]))),-I[2])))),ee=b(fe,ae);return ee[ee.length-1]}return F}function S(A,b,E,T){function F(D,R,P,z,I,L){var B=A(A(E(D[0],D[0]),E(D[1],D[1])),A(E(D[2],D[2]),E(D[3],D[3]))),O=T(B,R[0]),G=T(B,P[0]),W=T(B,z[0]),X=T(B,I[0]),Z=T(B,L[0]),J=A(A(E(R[0],R[0]),E(R[1],R[1])),A(E(R[2],R[2]),E(R[3],R[3]))),N=T(J,D[0]),H=T(J,P[0]),$=T(J,z[0]),U=T(J,I[0]),V=T(J,L[0]),j=A(A(E(P[0],P[0]),E(P[1],P[1])),A(E(P[2],P[2]),E(P[3],P[3]))),q=T(j,D[0]),Y=T(j,R[0]),K=T(j,z[0]),te=T(j,I[0]),ne=T(j,L[0]),se=A(A(E(z[0],z[0]),E(z[1],z[1])),A(E(z[2],z[2]),E(z[3],z[3]))),le=T(se,D[0]),ce=T(se,R[0]),pe=T(se,P[0]),xe=T(se,I[0]),ye=T(se,L[0]),fe=A(A(E(I[0],I[0]),E(I[1],I[1])),A(E(I[2],I[2]),E(I[3],I[3]))),ae=T(fe,D[0]),ee=T(fe,R[0]),ie=T(fe,P[0]),Q=T(fe,z[0]),ue=T(fe,L[0]),ge=A(A(E(L[0],L[0]),E(L[1],L[1])),A(E(L[2],L[2]),E(L[3],L[3]))),Me=T(ge,D[0]),Te=T(ge,R[0]),je=T(ge,P[0]),Ve=T(ge,z[0]),Ze=T(ge,I[0]),Ke=A(A(A(T(A(A(T(A(T(b(Ze,ue),z[1]),A(T(b(Ve,ye),-I[1]),T(b(Q,xe),L[1]))),P[2]),T(A(T(b(Ze,ue),P[1]),A(T(b(je,ne),-I[1]),T(b(ie,te),L[1]))),-z[2])),A(T(A(T(b(Ve,ye),P[1]),A(T(b(je,ne),-z[1]),T(b(pe,K),L[1]))),I[2]),T(A(T(b(Q,xe),P[1]),A(T(b(ie,te),-z[1]),T(b(pe,K),I[1]))),-L[2]))),R[3]),A(T(A(A(T(A(T(b(Ze,ue),z[1]),A(T(b(Ve,ye),-I[1]),T(b(Q,xe),L[1]))),R[2]),T(A(T(b(Ze,ue),R[1]),A(T(b(Te,V),-I[1]),T(b(ee,U),L[1]))),-z[2])),A(T(A(T(b(Ve,ye),R[1]),A(T(b(Te,V),-z[1]),T(b(ce,$),L[1]))),I[2]),T(A(T(b(Q,xe),R[1]),A(T(b(ee,U),-z[1]),T(b(ce,$),I[1]))),-L[2]))),-P[3]),T(A(A(T(A(T(b(Ze,ue),P[1]),A(T(b(je,ne),-I[1]),T(b(ie,te),L[1]))),R[2]),T(A(T(b(Ze,ue),R[1]),A(T(b(Te,V),-I[1]),T(b(ee,U),L[1]))),-P[2])),A(T(A(T(b(je,ne),R[1]),A(T(b(Te,V),-P[1]),T(b(Y,H),L[1]))),I[2]),T(A(T(b(ie,te),R[1]),A(T(b(ee,U),-P[1]),T(b(Y,H),I[1]))),-L[2]))),z[3]))),A(A(T(A(A(T(A(T(b(Ve,ye),P[1]),A(T(b(je,ne),-z[1]),T(b(pe,K),L[1]))),R[2]),T(A(T(b(Ve,ye),R[1]),A(T(b(Te,V),-z[1]),T(b(ce,$),L[1]))),-P[2])),A(T(A(T(b(je,ne),R[1]),A(T(b(Te,V),-P[1]),T(b(Y,H),L[1]))),z[2]),T(A(T(b(pe,K),R[1]),A(T(b(ce,$),-P[1]),T(b(Y,H),z[1]))),-L[2]))),-I[3]),T(A(A(T(A(T(b(Q,xe),P[1]),A(T(b(ie,te),-z[1]),T(b(pe,K),I[1]))),R[2]),T(A(T(b(Q,xe),R[1]),A(T(b(ee,U),-z[1]),T(b(ce,$),I[1]))),-P[2])),A(T(A(T(b(ie,te),R[1]),A(T(b(ee,U),-P[1]),T(b(Y,H),I[1]))),z[2]),T(A(T(b(pe,K),R[1]),A(T(b(ce,$),-P[1]),T(b(Y,H),z[1]))),-I[2]))),L[3])),A(T(A(A(T(A(T(b(Ze,ue),z[1]),A(T(b(Ve,ye),-I[1]),T(b(Q,xe),L[1]))),R[2]),T(A(T(b(Ze,ue),R[1]),A(T(b(Te,V),-I[1]),T(b(ee,U),L[1]))),-z[2])),A(T(A(T(b(Ve,ye),R[1]),A(T(b(Te,V),-z[1]),T(b(ce,$),L[1]))),I[2]),T(A(T(b(Q,xe),R[1]),A(T(b(ee,U),-z[1]),T(b(ce,$),I[1]))),-L[2]))),D[3]),T(A(A(T(A(T(b(Ze,ue),z[1]),A(T(b(Ve,ye),-I[1]),T(b(Q,xe),L[1]))),D[2]),T(A(T(b(Ze,ue),D[1]),A(T(b(Me,Z),-I[1]),T(b(ae,X),L[1]))),-z[2])),A(T(A(T(b(Ve,ye),D[1]),A(T(b(Me,Z),-z[1]),T(b(le,W),L[1]))),I[2]),T(A(T(b(Q,xe),D[1]),A(T(b(ae,X),-z[1]),T(b(le,W),I[1]))),-L[2]))),-R[3])))),A(A(A(T(A(A(T(A(T(b(Ze,ue),R[1]),A(T(b(Te,V),-I[1]),T(b(ee,U),L[1]))),D[2]),T(A(T(b(Ze,ue),D[1]),A(T(b(Me,Z),-I[1]),T(b(ae,X),L[1]))),-R[2])),A(T(A(T(b(Te,V),D[1]),A(T(b(Me,Z),-R[1]),T(b(N,O),L[1]))),I[2]),T(A(T(b(ee,U),D[1]),A(T(b(ae,X),-R[1]),T(b(N,O),I[1]))),-L[2]))),z[3]),T(A(A(T(A(T(b(Ve,ye),R[1]),A(T(b(Te,V),-z[1]),T(b(ce,$),L[1]))),D[2]),T(A(T(b(Ve,ye),D[1]),A(T(b(Me,Z),-z[1]),T(b(le,W),L[1]))),-R[2])),A(T(A(T(b(Te,V),D[1]),A(T(b(Me,Z),-R[1]),T(b(N,O),L[1]))),z[2]),T(A(T(b(ce,$),D[1]),A(T(b(le,W),-R[1]),T(b(N,O),z[1]))),-L[2]))),-I[3])),A(T(A(A(T(A(T(b(Q,xe),R[1]),A(T(b(ee,U),-z[1]),T(b(ce,$),I[1]))),D[2]),T(A(T(b(Q,xe),D[1]),A(T(b(ae,X),-z[1]),T(b(le,W),I[1]))),-R[2])),A(T(A(T(b(ee,U),D[1]),A(T(b(ae,X),-R[1]),T(b(N,O),I[1]))),z[2]),T(A(T(b(ce,$),D[1]),A(T(b(le,W),-R[1]),T(b(N,O),z[1]))),-I[2]))),L[3]),T(A(A(T(A(T(b(Ve,ye),P[1]),A(T(b(je,ne),-z[1]),T(b(pe,K),L[1]))),R[2]),T(A(T(b(Ve,ye),R[1]),A(T(b(Te,V),-z[1]),T(b(ce,$),L[1]))),-P[2])),A(T(A(T(b(je,ne),R[1]),A(T(b(Te,V),-P[1]),T(b(Y,H),L[1]))),z[2]),T(A(T(b(pe,K),R[1]),A(T(b(ce,$),-P[1]),T(b(Y,H),z[1]))),-L[2]))),D[3]))),A(A(T(A(A(T(A(T(b(Ve,ye),P[1]),A(T(b(je,ne),-z[1]),T(b(pe,K),L[1]))),D[2]),T(A(T(b(Ve,ye),D[1]),A(T(b(Me,Z),-z[1]),T(b(le,W),L[1]))),-P[2])),A(T(A(T(b(je,ne),D[1]),A(T(b(Me,Z),-P[1]),T(b(q,G),L[1]))),z[2]),T(A(T(b(pe,K),D[1]),A(T(b(le,W),-P[1]),T(b(q,G),z[1]))),-L[2]))),-R[3]),T(A(A(T(A(T(b(Ve,ye),R[1]),A(T(b(Te,V),-z[1]),T(b(ce,$),L[1]))),D[2]),T(A(T(b(Ve,ye),D[1]),A(T(b(Me,Z),-z[1]),T(b(le,W),L[1]))),-R[2])),A(T(A(T(b(Te,V),D[1]),A(T(b(Me,Z),-R[1]),T(b(N,O),L[1]))),z[2]),T(A(T(b(ce,$),D[1]),A(T(b(le,W),-R[1]),T(b(N,O),z[1]))),-L[2]))),P[3])),A(T(A(A(T(A(T(b(je,ne),R[1]),A(T(b(Te,V),-P[1]),T(b(Y,H),L[1]))),D[2]),T(A(T(b(je,ne),D[1]),A(T(b(Me,Z),-P[1]),T(b(q,G),L[1]))),-R[2])),A(T(A(T(b(Te,V),D[1]),A(T(b(Me,Z),-R[1]),T(b(N,O),L[1]))),P[2]),T(A(T(b(Y,H),D[1]),A(T(b(q,G),-R[1]),T(b(N,O),P[1]))),-L[2]))),-z[3]),T(A(A(T(A(T(b(pe,K),R[1]),A(T(b(ce,$),-P[1]),T(b(Y,H),z[1]))),D[2]),T(A(T(b(pe,K),D[1]),A(T(b(le,W),-P[1]),T(b(q,G),z[1]))),-R[2])),A(T(A(T(b(ce,$),D[1]),A(T(b(le,W),-R[1]),T(b(N,O),z[1]))),P[2]),T(A(T(b(Y,H),D[1]),A(T(b(q,G),-R[1]),T(b(N,O),P[1]))),-z[2]))),L[3]))))),vt=A(A(A(T(A(A(T(A(T(b(Ze,ue),z[1]),A(T(b(Ve,ye),-I[1]),T(b(Q,xe),L[1]))),P[2]),T(A(T(b(Ze,ue),P[1]),A(T(b(je,ne),-I[1]),T(b(ie,te),L[1]))),-z[2])),A(T(A(T(b(Ve,ye),P[1]),A(T(b(je,ne),-z[1]),T(b(pe,K),L[1]))),I[2]),T(A(T(b(Q,xe),P[1]),A(T(b(ie,te),-z[1]),T(b(pe,K),I[1]))),-L[2]))),D[3]),A(T(A(A(T(A(T(b(Ze,ue),z[1]),A(T(b(Ve,ye),-I[1]),T(b(Q,xe),L[1]))),D[2]),T(A(T(b(Ze,ue),D[1]),A(T(b(Me,Z),-I[1]),T(b(ae,X),L[1]))),-z[2])),A(T(A(T(b(Ve,ye),D[1]),A(T(b(Me,Z),-z[1]),T(b(le,W),L[1]))),I[2]),T(A(T(b(Q,xe),D[1]),A(T(b(ae,X),-z[1]),T(b(le,W),I[1]))),-L[2]))),-P[3]),T(A(A(T(A(T(b(Ze,ue),P[1]),A(T(b(je,ne),-I[1]),T(b(ie,te),L[1]))),D[2]),T(A(T(b(Ze,ue),D[1]),A(T(b(Me,Z),-I[1]),T(b(ae,X),L[1]))),-P[2])),A(T(A(T(b(je,ne),D[1]),A(T(b(Me,Z),-P[1]),T(b(q,G),L[1]))),I[2]),T(A(T(b(ie,te),D[1]),A(T(b(ae,X),-P[1]),T(b(q,G),I[1]))),-L[2]))),z[3]))),A(A(T(A(A(T(A(T(b(Ve,ye),P[1]),A(T(b(je,ne),-z[1]),T(b(pe,K),L[1]))),D[2]),T(A(T(b(Ve,ye),D[1]),A(T(b(Me,Z),-z[1]),T(b(le,W),L[1]))),-P[2])),A(T(A(T(b(je,ne),D[1]),A(T(b(Me,Z),-P[1]),T(b(q,G),L[1]))),z[2]),T(A(T(b(pe,K),D[1]),A(T(b(le,W),-P[1]),T(b(q,G),z[1]))),-L[2]))),-I[3]),T(A(A(T(A(T(b(Q,xe),P[1]),A(T(b(ie,te),-z[1]),T(b(pe,K),I[1]))),D[2]),T(A(T(b(Q,xe),D[1]),A(T(b(ae,X),-z[1]),T(b(le,W),I[1]))),-P[2])),A(T(A(T(b(ie,te),D[1]),A(T(b(ae,X),-P[1]),T(b(q,G),I[1]))),z[2]),T(A(T(b(pe,K),D[1]),A(T(b(le,W),-P[1]),T(b(q,G),z[1]))),-I[2]))),L[3])),A(T(A(A(T(A(T(b(Ze,ue),P[1]),A(T(b(je,ne),-I[1]),T(b(ie,te),L[1]))),R[2]),T(A(T(b(Ze,ue),R[1]),A(T(b(Te,V),-I[1]),T(b(ee,U),L[1]))),-P[2])),A(T(A(T(b(je,ne),R[1]),A(T(b(Te,V),-P[1]),T(b(Y,H),L[1]))),I[2]),T(A(T(b(ie,te),R[1]),A(T(b(ee,U),-P[1]),T(b(Y,H),I[1]))),-L[2]))),D[3]),T(A(A(T(A(T(b(Ze,ue),P[1]),A(T(b(je,ne),-I[1]),T(b(ie,te),L[1]))),D[2]),T(A(T(b(Ze,ue),D[1]),A(T(b(Me,Z),-I[1]),T(b(ae,X),L[1]))),-P[2])),A(T(A(T(b(je,ne),D[1]),A(T(b(Me,Z),-P[1]),T(b(q,G),L[1]))),I[2]),T(A(T(b(ie,te),D[1]),A(T(b(ae,X),-P[1]),T(b(q,G),I[1]))),-L[2]))),-R[3])))),A(A(A(T(A(A(T(A(T(b(Ze,ue),R[1]),A(T(b(Te,V),-I[1]),T(b(ee,U),L[1]))),D[2]),T(A(T(b(Ze,ue),D[1]),A(T(b(Me,Z),-I[1]),T(b(ae,X),L[1]))),-R[2])),A(T(A(T(b(Te,V),D[1]),A(T(b(Me,Z),-R[1]),T(b(N,O),L[1]))),I[2]),T(A(T(b(ee,U),D[1]),A(T(b(ae,X),-R[1]),T(b(N,O),I[1]))),-L[2]))),P[3]),T(A(A(T(A(T(b(je,ne),R[1]),A(T(b(Te,V),-P[1]),T(b(Y,H),L[1]))),D[2]),T(A(T(b(je,ne),D[1]),A(T(b(Me,Z),-P[1]),T(b(q,G),L[1]))),-R[2])),A(T(A(T(b(Te,V),D[1]),A(T(b(Me,Z),-R[1]),T(b(N,O),L[1]))),P[2]),T(A(T(b(Y,H),D[1]),A(T(b(q,G),-R[1]),T(b(N,O),P[1]))),-L[2]))),-I[3])),A(T(A(A(T(A(T(b(ie,te),R[1]),A(T(b(ee,U),-P[1]),T(b(Y,H),I[1]))),D[2]),T(A(T(b(ie,te),D[1]),A(T(b(ae,X),-P[1]),T(b(q,G),I[1]))),-R[2])),A(T(A(T(b(ee,U),D[1]),A(T(b(ae,X),-R[1]),T(b(N,O),I[1]))),P[2]),T(A(T(b(Y,H),D[1]),A(T(b(q,G),-R[1]),T(b(N,O),P[1]))),-I[2]))),L[3]),T(A(A(T(A(T(b(Q,xe),P[1]),A(T(b(ie,te),-z[1]),T(b(pe,K),I[1]))),R[2]),T(A(T(b(Q,xe),R[1]),A(T(b(ee,U),-z[1]),T(b(ce,$),I[1]))),-P[2])),A(T(A(T(b(ie,te),R[1]),A(T(b(ee,U),-P[1]),T(b(Y,H),I[1]))),z[2]),T(A(T(b(pe,K),R[1]),A(T(b(ce,$),-P[1]),T(b(Y,H),z[1]))),-I[2]))),D[3]))),A(A(T(A(A(T(A(T(b(Q,xe),P[1]),A(T(b(ie,te),-z[1]),T(b(pe,K),I[1]))),D[2]),T(A(T(b(Q,xe),D[1]),A(T(b(ae,X),-z[1]),T(b(le,W),I[1]))),-P[2])),A(T(A(T(b(ie,te),D[1]),A(T(b(ae,X),-P[1]),T(b(q,G),I[1]))),z[2]),T(A(T(b(pe,K),D[1]),A(T(b(le,W),-P[1]),T(b(q,G),z[1]))),-I[2]))),-R[3]),T(A(A(T(A(T(b(Q,xe),R[1]),A(T(b(ee,U),-z[1]),T(b(ce,$),I[1]))),D[2]),T(A(T(b(Q,xe),D[1]),A(T(b(ae,X),-z[1]),T(b(le,W),I[1]))),-R[2])),A(T(A(T(b(ee,U),D[1]),A(T(b(ae,X),-R[1]),T(b(N,O),I[1]))),z[2]),T(A(T(b(ce,$),D[1]),A(T(b(le,W),-R[1]),T(b(N,O),z[1]))),-I[2]))),P[3])),A(T(A(A(T(A(T(b(ie,te),R[1]),A(T(b(ee,U),-P[1]),T(b(Y,H),I[1]))),D[2]),T(A(T(b(ie,te),D[1]),A(T(b(ae,X),-P[1]),T(b(q,G),I[1]))),-R[2])),A(T(A(T(b(ee,U),D[1]),A(T(b(ae,X),-R[1]),T(b(N,O),I[1]))),P[2]),T(A(T(b(Y,H),D[1]),A(T(b(q,G),-R[1]),T(b(N,O),P[1]))),-I[2]))),-z[3]),T(A(A(T(A(T(b(pe,K),R[1]),A(T(b(ce,$),-P[1]),T(b(Y,H),z[1]))),D[2]),T(A(T(b(pe,K),D[1]),A(T(b(le,W),-P[1]),T(b(q,G),z[1]))),-R[2])),A(T(A(T(b(ce,$),D[1]),A(T(b(le,W),-R[1]),T(b(N,O),z[1]))),P[2]),T(A(T(b(Y,H),D[1]),A(T(b(q,G),-R[1]),T(b(N,O),P[1]))),-z[2]))),I[3]))))),xt=b(Ke,vt);return xt[xt.length-1]}return F}var M=[g,m,y];function C(A){var b=M[A.length];return b||(b=M[A.length]=p(A.length)),b.apply(void 0,A)}function w(A,b,E,T,F,D,R,P){function z(I,L,B,O,G,W){switch(arguments.length){case 0:case 1:return 0;case 2:return T(I,L);case 3:return F(I,L,B);case 4:return D(I,L,B,O);case 5:return R(I,L,B,O,G);case 6:return P(I,L,B,O,G,W)}for(var X=new Array(arguments.length),Z=0;Z<arguments.length;++Z)X[Z]=arguments[Z];return A(X)}return z}function k(){for(;M.length<=d;)M.push(p(M.length));s.exports=w.apply(void 0,[C].concat(M));for(var A=0;A<=d;++A)s.exports[A]=M[A]}k()},727(s,l,n){"use strict";var u=n(2962),c=6;function f(M){var C=M===2?p:M===3?g:M===4?m:M===5?y:_;return M<6?C(u[M]):C(u)}function h(){return[[0]]}function d(M,C){return[[C[0]],[M[0][0]]]}function p(M){return function(w,k){return[M([[+k[0],+w[0][1]],[+k[1],+w[1][1]]]),M([[+w[0][0],+k[0]],[+w[1][0],+k[1]]]),M(w)]}}function g(M){return function(w,k){return[M([[+k[0],+w[0][1],+w[0][2]],[+k[1],+w[1][1],+w[1][2]],[+k[2],+w[2][1],+w[2][2]]]),M([[+w[0][0],+k[0],+w[0][2]],[+w[1][0],+k[1],+w[1][2]],[+w[2][0],+k[2],+w[2][2]]]),M([[+w[0][0],+w[0][1],+k[0]],[+w[1][0],+w[1][1],+k[1]],[+w[2][0],+w[2][1],+k[2]]]),M(w)]}}function m(M){return function(w,k){return[M([[+k[0],+w[0][1],+w[0][2],+w[0][3]],[+k[1],+w[1][1],+w[1][2],+w[1][3]],[+k[2],+w[2][1],+w[2][2],+w[2][3]],[+k[3],+w[3][1],+w[3][2],+w[3][3]]]),M([[+w[0][0],+k[0],+w[0][2],+w[0][3]],[+w[1][0],+k[1],+w[1][2],+w[1][3]],[+w[2][0],+k[2],+w[2][2],+w[2][3]],[+w[3][0],+k[3],+w[3][2],+w[3][3]]]),M([[+w[0][0],+w[0][1],+k[0],+w[0][3]],[+w[1][0],+w[1][1],+k[1],+w[1][3]],[+w[2][0],+w[2][1],+k[2],+w[2][3]],[+w[3][0],+w[3][1],+k[3],+w[3][3]]]),M([[+w[0][0],+w[0][1],+w[0][2],+k[0]],[+w[1][0],+w[1][1],+w[1][2],+k[1]],[+w[2][0],+w[2][1],+w[2][2],+k[2]],[+w[3][0],+w[3][1],+w[3][2],+k[3]]]),M(w)]}}function y(M){return function(w,k){return[M([[+k[0],+w[0][1],+w[0][2],+w[0][3],+w[0][4]],[+k[1],+w[1][1],+w[1][2],+w[1][3],+w[1][4]],[+k[2],+w[2][1],+w[2][2],+w[2][3],+w[2][4]],[+k[3],+w[3][1],+w[3][2],+w[3][3],+w[3][4]],[+k[4],+w[4][1],+w[4][2],+w[4][3],+w[4][4]]]),M([[+w[0][0],+k[0],+w[0][2],+w[0][3],+w[0][4]],[+w[1][0],+k[1],+w[1][2],+w[1][3],+w[1][4]],[+w[2][0],+k[2],+w[2][2],+w[2][3],+w[2][4]],[+w[3][0],+k[3],+w[3][2],+w[3][3],+w[3][4]],[+w[4][0],+k[4],+w[4][2],+w[4][3],+w[4][4]]]),M([[+w[0][0],+w[0][1],+k[0],+w[0][3],+w[0][4]],[+w[1][0],+w[1][1],+k[1],+w[1][3],+w[1][4]],[+w[2][0],+w[2][1],+k[2],+w[2][3],+w[2][4]],[+w[3][0],+w[3][1],+k[3],+w[3][3],+w[3][4]],[+w[4][0],+w[4][1],+k[4],+w[4][3],+w[4][4]]]),M([[+w[0][0],+w[0][1],+w[0][2],+k[0],+w[0][4]],[+w[1][0],+w[1][1],+w[1][2],+k[1],+w[1][4]],[+w[2][0],+w[2][1],+w[2][2],+k[2],+w[2][4]],[+w[3][0],+w[3][1],+w[3][2],+k[3],+w[3][4]],[+w[4][0],+w[4][1],+w[4][2],+k[4],+w[4][4]]]),M([[+w[0][0],+w[0][1],+w[0][2],+w[0][3],+k[0]],[+w[1][0],+w[1][1],+w[1][2],+w[1][3],+k[1]],[+w[2][0],+w[2][1],+w[2][2],+w[2][3],+k[2]],[+w[3][0],+w[3][1],+w[3][2],+w[3][3],+k[3]],[+w[4][0],+w[4][1],+w[4][2],+w[4][3],+k[4]]]),M(w)]}}function _(M){return function(w,k){return[M([[+k[0],+w[0][1],+w[0][2],+w[0][3],+w[0][4],+w[0][5]],[+k[1],+w[1][1],+w[1][2],+w[1][3],+w[1][4],+w[1][5]],[+k[2],+w[2][1],+w[2][2],+w[2][3],+w[2][4],+w[2][5]],[+k[3],+w[3][1],+w[3][2],+w[3][3],+w[3][4],+w[3][5]],[+k[4],+w[4][1],+w[4][2],+w[4][3],+w[4][4],+w[4][5]],[+k[5],+w[5][1],+w[5][2],+w[5][3],+w[5][4],+w[5][5]]]),M([[+w[0][0],+k[0],+w[0][2],+w[0][3],+w[0][4],+w[0][5]],[+w[1][0],+k[1],+w[1][2],+w[1][3],+w[1][4],+w[1][5]],[+w[2][0],+k[2],+w[2][2],+w[2][3],+w[2][4],+w[2][5]],[+w[3][0],+k[3],+w[3][2],+w[3][3],+w[3][4],+w[3][5]],[+w[4][0],+k[4],+w[4][2],+w[4][3],+w[4][4],+w[4][5]],[+w[5][0],+k[5],+w[5][2],+w[5][3],+w[5][4],+w[5][5]]]),M([[+w[0][0],+w[0][1],+k[0],+w[0][3],+w[0][4],+w[0][5]],[+w[1][0],+w[1][1],+k[1],+w[1][3],+w[1][4],+w[1][5]],[+w[2][0],+w[2][1],+k[2],+w[2][3],+w[2][4],+w[2][5]],[+w[3][0],+w[3][1],+k[3],+w[3][3],+w[3][4],+w[3][5]],[+w[4][0],+w[4][1],+k[4],+w[4][3],+w[4][4],+w[4][5]],[+w[5][0],+w[5][1],+k[5],+w[5][3],+w[5][4],+w[5][5]]]),M([[+w[0][0],+w[0][1],+w[0][2],+k[0],+w[0][4],+w[0][5]],[+w[1][0],+w[1][1],+w[1][2],+k[1],+w[1][4],+w[1][5]],[+w[2][0],+w[2][1],+w[2][2],+k[2],+w[2][4],+w[2][5]],[+w[3][0],+w[3][1],+w[3][2],+k[3],+w[3][4],+w[3][5]],[+w[4][0],+w[4][1],+w[4][2],+k[4],+w[4][4],+w[4][5]],[+w[5][0],+w[5][1],+w[5][2],+k[5],+w[5][4],+w[5][5]]]),M([[+w[0][0],+w[0][1],+w[0][2],+w[0][3],+k[0],+w[0][5]],[+w[1][0],+w[1][1],+w[1][2],+w[1][3],+k[1],+w[1][5]],[+w[2][0],+w[2][1],+w[2][2],+w[2][3],+k[2],+w[2][5]],[+w[3][0],+w[3][1],+w[3][2],+w[3][3],+k[3],+w[3][5]],[+w[4][0],+w[4][1],+w[4][2],+w[4][3],+k[4],+w[4][5]],[+w[5][0],+w[5][1],+w[5][2],+w[5][3],+k[5],+w[5][5]]]),M([[+w[0][0],+w[0][1],+w[0][2],+w[0][3],+w[0][4],+k[0]],[+w[1][0],+w[1][1],+w[1][2],+w[1][3],+w[1][4],+k[1]],[+w[2][0],+w[2][1],+w[2][2],+w[2][3],+w[2][4],+k[2]],[+w[3][0],+w[3][1],+w[3][2],+w[3][3],+w[3][4],+k[3]],[+w[4][0],+w[4][1],+w[4][2],+w[4][3],+w[4][4],+k[4]],[+w[5][0],+w[5][1],+w[5][2],+w[5][3],+w[5][4],+k[5]]]),M(w)]}}var v=[h,d];function x(M,C,w,k,A,b,E,T){return function(D,R){switch(D.length){case 0:return M(D,R);case 1:return C(D,R);case 2:return w(D,R);case 3:return k(D,R);case 4:return A(D,R);case 5:return b(D,R)}var P=E[D.length];return P||(P=E[D.length]=T(D.length)),P(D,R)}}function S(){for(;v.length<c;)v.push(f(v.length));s.exports=x.apply(void 0,v.concat([v,f]));for(var M=0;M<c;++M)s.exports[M]=v[M]}S()},3250(s,l,n){"use strict";var u=n(5250),c=n(8210),f=n(3012),h=n(8545),d=5,p=11102230246251565e-32,g=(3+16*p)*p,m=(7+56*p)*p;function y(b,E,T,F){return function(R,P,z){var I=b(b(E(P[1],z[0]),E(-z[1],P[0])),b(E(R[1],P[0]),E(-P[1],R[0]))),L=b(E(R[1],z[0]),E(-z[1],R[0])),B=F(I,L);return B[B.length-1]}}function _(b,E,T,F){return function(R,P,z,I){var L=b(b(T(b(E(z[1],I[0]),E(-I[1],z[0])),P[2]),b(T(b(E(P[1],I[0]),E(-I[1],P[0])),-z[2]),T(b(E(P[1],z[0]),E(-z[1],P[0])),I[2]))),b(T(b(E(P[1],I[0]),E(-I[1],P[0])),R[2]),b(T(b(E(R[1],I[0]),E(-I[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),I[2])))),B=b(b(T(b(E(z[1],I[0]),E(-I[1],z[0])),R[2]),b(T(b(E(R[1],I[0]),E(-I[1],R[0])),-z[2]),T(b(E(R[1],z[0]),E(-z[1],R[0])),I[2]))),b(T(b(E(P[1],z[0]),E(-z[1],P[0])),R[2]),b(T(b(E(R[1],z[0]),E(-z[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),z[2])))),O=F(L,B);return O[O.length-1]}}function v(b,E,T,F){return function(R,P,z,I,L){var B=b(b(b(T(b(T(b(E(I[1],L[0]),E(-L[1],I[0])),z[2]),b(T(b(E(z[1],L[0]),E(-L[1],z[0])),-I[2]),T(b(E(z[1],I[0]),E(-I[1],z[0])),L[2]))),P[3]),b(T(b(T(b(E(I[1],L[0]),E(-L[1],I[0])),P[2]),b(T(b(E(P[1],L[0]),E(-L[1],P[0])),-I[2]),T(b(E(P[1],I[0]),E(-I[1],P[0])),L[2]))),-z[3]),T(b(T(b(E(z[1],L[0]),E(-L[1],z[0])),P[2]),b(T(b(E(P[1],L[0]),E(-L[1],P[0])),-z[2]),T(b(E(P[1],z[0]),E(-z[1],P[0])),L[2]))),I[3]))),b(T(b(T(b(E(z[1],I[0]),E(-I[1],z[0])),P[2]),b(T(b(E(P[1],I[0]),E(-I[1],P[0])),-z[2]),T(b(E(P[1],z[0]),E(-z[1],P[0])),I[2]))),-L[3]),b(T(b(T(b(E(I[1],L[0]),E(-L[1],I[0])),P[2]),b(T(b(E(P[1],L[0]),E(-L[1],P[0])),-I[2]),T(b(E(P[1],I[0]),E(-I[1],P[0])),L[2]))),R[3]),T(b(T(b(E(I[1],L[0]),E(-L[1],I[0])),R[2]),b(T(b(E(R[1],L[0]),E(-L[1],R[0])),-I[2]),T(b(E(R[1],I[0]),E(-I[1],R[0])),L[2]))),-P[3])))),b(b(T(b(T(b(E(P[1],L[0]),E(-L[1],P[0])),R[2]),b(T(b(E(R[1],L[0]),E(-L[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),L[2]))),I[3]),b(T(b(T(b(E(P[1],I[0]),E(-I[1],P[0])),R[2]),b(T(b(E(R[1],I[0]),E(-I[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),I[2]))),-L[3]),T(b(T(b(E(z[1],I[0]),E(-I[1],z[0])),P[2]),b(T(b(E(P[1],I[0]),E(-I[1],P[0])),-z[2]),T(b(E(P[1],z[0]),E(-z[1],P[0])),I[2]))),R[3]))),b(T(b(T(b(E(z[1],I[0]),E(-I[1],z[0])),R[2]),b(T(b(E(R[1],I[0]),E(-I[1],R[0])),-z[2]),T(b(E(R[1],z[0]),E(-z[1],R[0])),I[2]))),-P[3]),b(T(b(T(b(E(P[1],I[0]),E(-I[1],P[0])),R[2]),b(T(b(E(R[1],I[0]),E(-I[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),I[2]))),z[3]),T(b(T(b(E(P[1],z[0]),E(-z[1],P[0])),R[2]),b(T(b(E(R[1],z[0]),E(-z[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),z[2]))),-I[3]))))),O=b(b(b(T(b(T(b(E(I[1],L[0]),E(-L[1],I[0])),z[2]),b(T(b(E(z[1],L[0]),E(-L[1],z[0])),-I[2]),T(b(E(z[1],I[0]),E(-I[1],z[0])),L[2]))),R[3]),T(b(T(b(E(I[1],L[0]),E(-L[1],I[0])),R[2]),b(T(b(E(R[1],L[0]),E(-L[1],R[0])),-I[2]),T(b(E(R[1],I[0]),E(-I[1],R[0])),L[2]))),-z[3])),b(T(b(T(b(E(z[1],L[0]),E(-L[1],z[0])),R[2]),b(T(b(E(R[1],L[0]),E(-L[1],R[0])),-z[2]),T(b(E(R[1],z[0]),E(-z[1],R[0])),L[2]))),I[3]),T(b(T(b(E(z[1],I[0]),E(-I[1],z[0])),R[2]),b(T(b(E(R[1],I[0]),E(-I[1],R[0])),-z[2]),T(b(E(R[1],z[0]),E(-z[1],R[0])),I[2]))),-L[3]))),b(b(T(b(T(b(E(z[1],L[0]),E(-L[1],z[0])),P[2]),b(T(b(E(P[1],L[0]),E(-L[1],P[0])),-z[2]),T(b(E(P[1],z[0]),E(-z[1],P[0])),L[2]))),R[3]),T(b(T(b(E(z[1],L[0]),E(-L[1],z[0])),R[2]),b(T(b(E(R[1],L[0]),E(-L[1],R[0])),-z[2]),T(b(E(R[1],z[0]),E(-z[1],R[0])),L[2]))),-P[3])),b(T(b(T(b(E(P[1],L[0]),E(-L[1],P[0])),R[2]),b(T(b(E(R[1],L[0]),E(-L[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),L[2]))),z[3]),T(b(T(b(E(P[1],z[0]),E(-z[1],P[0])),R[2]),b(T(b(E(R[1],z[0]),E(-z[1],R[0])),-P[2]),T(b(E(R[1],P[0]),E(-P[1],R[0])),z[2]))),-L[3])))),G=F(B,O);return G[G.length-1]}}function x(b){var E=b===3?y:b===4?_:v;return E(c,u,f,h)}var S=x(3),M=x(4),C=[function(){return 0},function(){return 0},function(E,T){return T[0]-E[0]},function(E,T,F){var D=(E[1]-F[1])*(T[0]-F[0]),R=(E[0]-F[0])*(T[1]-F[1]),P=D-R,z;if(D>0){if(R<=0)return P;z=D+R}else if(D<0){if(R>=0)return P;z=-(D+R)}else return P;var I=g*z;return P>=I||P<=-I?P:S(E,T,F)},function(E,T,F,D){var R=E[0]-D[0],P=T[0]-D[0],z=F[0]-D[0],I=E[1]-D[1],L=T[1]-D[1],B=F[1]-D[1],O=E[2]-D[2],G=T[2]-D[2],W=F[2]-D[2],X=P*B,Z=z*L,J=z*I,N=R*B,H=R*L,$=P*I,U=O*(X-Z)+G*(J-N)+W*(H-$),V=(Math.abs(X)+Math.abs(Z))*Math.abs(O)+(Math.abs(J)+Math.abs(N))*Math.abs(G)+(Math.abs(H)+Math.abs($))*Math.abs(W),j=m*V;return U>j||-U>j?U:M(E,T,F,D)}];function w(b){var E=C[b.length];return E||(E=C[b.length]=x(b.length)),E.apply(void 0,b)}function k(b,E,T,F,D,R,P){return function(I,L,B,O,G){switch(arguments.length){case 0:case 1:return 0;case 2:return F(I,L);case 3:return D(I,L,B);case 4:return R(I,L,B,O);case 5:return P(I,L,B,O,G)}for(var W=new Array(arguments.length),X=0;X<arguments.length;++X)W[X]=arguments[X];return b(W)}}function A(){for(;C.length<=d;)C.push(x(C.length));s.exports=k.apply(void 0,[w].concat(C));for(var b=0;b<=d;++b)s.exports[b]=C[b]}A()},5382(s,l,n){"use strict";var u=n(8210),c=n(3012);s.exports=f;function f(h,d){if(h.length===1)return c(d,h[0]);if(d.length===1)return c(h,d[0]);if(h.length===0||d.length===0)return[0];var p=[0];if(h.length<d.length)for(var g=0;g<h.length;++g)p=u(p,c(d,h[g]));else for(var g=0;g<d.length;++g)p=u(p,c(h,d[g]));return p}},3012(s,l,n){"use strict";var u=n(5250),c=n(9362);s.exports=f;function f(h,d){var p=h.length;if(p===1){var g=u(h[0],d);return g[0]?g:[g[1]]}var m=new Array(2*p),y=[.1,.1],_=[.1,.1],v=0;u(h[0],d,y),y[0]&&(m[v++]=y[0]);for(var x=1;x<p;++x){u(h[x],d,_);var S=y[1];c(S,_[0],y),y[0]&&(m[v++]=y[0]);var M=_[1],C=y[1],w=M+C,k=w-M,A=C-k;y[1]=w,A&&(m[v++]=A)}return y[1]&&(m[v++]=y[1]),v===0&&(m[v++]=0),m.length=v,m}},1125(s,l,n){"use strict";s.exports=f;var u=n(3250)[3];function c(h,d,p,g){for(var m=0;m<2;++m){var y=h[m],_=d[m],v=Math.min(y,_),x=Math.max(y,_),S=p[m],M=g[m],C=Math.min(S,M),w=Math.max(S,M);if(w<v||x<C)return!1}return!0}function f(h,d,p,g){var m=u(h,p,g),y=u(d,p,g);if(m>0&&y>0||m<0&&y<0)return!1;var _=u(p,h,d),v=u(g,h,d);return _>0&&v>0||_<0&&v<0?!1:m===0&&y===0&&_===0&&v===0?c(h,d,p,g):!0}},8545(s){"use strict";s.exports=n;function l(u,c){var f=u+c,h=f-u,d=f-h,p=c-h,g=u-d,m=g+p;return m?[m,f]:[f]}function n(u,c){var f=u.length|0,h=c.length|0;if(f===1&&h===1)return l(u[0],-c[0]);var d=f+h,p=new Array(d),g=0,m=0,y=0,_=Math.abs,v=u[m],x=_(v),S=-c[y],M=_(S),C,w;x<M?(w=v,m+=1,m<f&&(v=u[m],x=_(v))):(w=S,y+=1,y<h&&(S=-c[y],M=_(S))),m<f&&x<M||y>=h?(C=v,m+=1,m<f&&(v=u[m],x=_(v))):(C=S,y+=1,y<h&&(S=-c[y],M=_(S)));for(var k=C+w,A=k-C,b=w-A,E=b,T=k,F,D,R,P,z;m<f&&y<h;)x<M?(C=v,m+=1,m<f&&(v=u[m],x=_(v))):(C=S,y+=1,y<h&&(S=-c[y],M=_(S))),w=E,k=C+w,A=k-C,b=w-A,b&&(p[g++]=b),F=T+k,D=F-T,R=F-D,P=k-D,z=T-R,E=z+P,T=F;for(;m<f;)C=v,w=E,k=C+w,A=k-C,b=w-A,b&&(p[g++]=b),F=T+k,D=F-T,R=F-D,P=k-D,z=T-R,E=z+P,T=F,m+=1,m<f&&(v=u[m]);for(;y<h;)C=S,w=E,k=C+w,A=k-C,b=w-A,b&&(p[g++]=b),F=T+k,D=F-T,R=F-D,P=k-D,z=T-R,E=z+P,T=F,y+=1,y<h&&(S=-c[y]);return E&&(p[g++]=E),T&&(p[g++]=T),g||(p[g++]=0),p.length=g,p}},8210(s){"use strict";s.exports=n;function l(u,c){var f=u+c,h=f-u,d=f-h,p=c-h,g=u-d,m=g+p;return m?[m,f]:[f]}function n(u,c){var f=u.length|0,h=c.length|0;if(f===1&&h===1)return l(u[0],c[0]);var d=f+h,p=new Array(d),g=0,m=0,y=0,_=Math.abs,v=u[m],x=_(v),S=c[y],M=_(S),C,w;x<M?(w=v,m+=1,m<f&&(v=u[m],x=_(v))):(w=S,y+=1,y<h&&(S=c[y],M=_(S))),m<f&&x<M||y>=h?(C=v,m+=1,m<f&&(v=u[m],x=_(v))):(C=S,y+=1,y<h&&(S=c[y],M=_(S)));for(var k=C+w,A=k-C,b=w-A,E=b,T=k,F,D,R,P,z;m<f&&y<h;)x<M?(C=v,m+=1,m<f&&(v=u[m],x=_(v))):(C=S,y+=1,y<h&&(S=c[y],M=_(S))),w=E,k=C+w,A=k-C,b=w-A,b&&(p[g++]=b),F=T+k,D=F-T,R=F-D,P=k-D,z=T-R,E=z+P,T=F;for(;m<f;)C=v,w=E,k=C+w,A=k-C,b=w-A,b&&(p[g++]=b),F=T+k,D=F-T,R=F-D,P=k-D,z=T-R,E=z+P,T=F,m+=1,m<f&&(v=u[m]);for(;y<h;)C=S,w=E,k=C+w,A=k-C,b=w-A,b&&(p[g++]=b),F=T+k,D=F-T,R=F-D,P=k-D,z=T-R,E=z+P,T=F,y+=1,y<h&&(S=c[y]);return E&&(p[g++]=E),T&&(p[g++]=T),g||(p[g++]=0),p.length=g,p}},9127(s,l,n){"use strict";s.exports=f;var u=n(6204),c=n(5771);function f(h){return c(u(h))}},7765(s,l,n){"use strict";s.exports=v;var u=n(9618),c=n(1888),f=n(446),h=n(1570);function d(x){for(var S=x.length,M=0,C=0;C<S;++C)M=Math.max(M,x[C].length)|0;return M-1}function p(x,S){for(var M=x.length,C=c.mallocUint8(M),w=0;w<M;++w)C[w]=x[w]<S|0;return C}function g(x,S){for(var M=x.length,C=S*(S+1)/2*M|0,w=c.mallocUint32(C*2),k=0,A=0;A<M;++A)for(var b=x[A],S=b.length,E=0;E<S;++E)for(var T=0;T<E;++T){var F=b[T],D=b[E];w[k++]=Math.min(F,D)|0,w[k++]=Math.max(F,D)|0}var R=k/2|0;f(u(w,[R,2]));for(var P=2,A=2;A<k;A+=2)w[A-2]===w[A]&&w[A-1]===w[A+1]||(w[P++]=w[A],w[P++]=w[A+1]);return u(w,[P/2|0,2])}function m(x,S,M,C){for(var w=x.data,k=x.shape[0],A=c.mallocDouble(k),b=0,E=0;E<k;++E){var T=w[2*E],F=w[2*E+1];if(M[T]!==M[F]){var D=S[T],R=S[F];w[2*b]=T,w[2*b+1]=F,A[b++]=(R-C)/(R-D)}}return x.shape[0]=b,u(A,[b])}function y(x,S){var M=c.mallocInt32(S*2),C=x.shape[0],w=x.data;M[0]=0;for(var k=0,A=0;A<C;++A){var b=w[2*A];if(b!==k){for(M[2*k+1]=A;++k<b;)M[2*k]=A,M[2*k+1]=A;M[2*k]=A}}for(M[2*k+1]=C;++k<S;)M[2*k]=M[2*k+1]=C;return M}function _(x){for(var S=x.shape[0]|0,M=x.data,C=new Array(S),w=0;w<S;++w)C[w]=[M[2*w],M[2*w+1]];return C}function v(x,S,M,C){M=M||0,typeof C>"u"&&(C=d(x));var w=x.length;if(w===0||C<1)return{cells:[],vertexIds:[],vertexWeights:[]};var k=p(S,+M),A=g(x,C),b=m(A,S,k,+M),E=y(A,S.length|0),T=h(C)(x,A.data,E,k),F=_(A),D=[].slice.call(b.data,0,b.shape[0]);return c.free(k),c.free(A.data),c.free(b.data),c.free(E),{cells:T,vertexIds:F,vertexWeights:D}}},1570(s){"use strict";s.exports=n;var l=[function(){function c(h,d,p,g){for(var m=Math.min(p,g)|0,y=Math.max(p,g)|0,_=h[2*m],v=h[2*m+1];_<v;){var x=_+v>>1,S=d[2*x+1];if(S===y)return x;y<S?v=x:_=x+1}return _}function f(h,d,p,g){for(var m=h.length,y=[],_=0;_<m;++_)var v=h[_],x=v.length;return y}return f},function(){function c(h,d,p,g){for(var m=Math.min(p,g)|0,y=Math.max(p,g)|0,_=h[2*m],v=h[2*m+1];_<v;){var x=_+v>>1,S=d[2*x+1];if(S===y)return x;y<S?v=x:_=x+1}return _}function f(h,d,p,g){for(var m=h.length,y=[],_=0;_<m;++_){var v=h[_],x=v.length;if(x===2){var S=(g[v[0]]<<0)+(g[v[1]]<<1);if(S===0||S===3)continue;switch(S){case 0:break;case 1:y.push([c(p,d,v[0],v[1])]);break;case 2:y.push([c(p,d,v[1],v[0])]);break;case 3:break}}}return y}return f},function(){function c(h,d,p,g){for(var m=Math.min(p,g)|0,y=Math.max(p,g)|0,_=h[2*m],v=h[2*m+1];_<v;){var x=_+v>>1,S=d[2*x+1];if(S===y)return x;y<S?v=x:_=x+1}return _}function f(h,d,p,g){for(var m=h.length,y=[],_=0;_<m;++_){var v=h[_],x=v.length;if(x===3){var S=(g[v[0]]<<0)+(g[v[1]]<<1)+(g[v[2]]<<2);if(S===0||S===7)continue;switch(S){case 0:break;case 1:y.push([c(p,d,v[0],v[2]),c(p,d,v[0],v[1])]);break;case 2:y.push([c(p,d,v[1],v[0]),c(p,d,v[1],v[2])]);break;case 3:y.push([c(p,d,v[0],v[2]),c(p,d,v[1],v[2])]);break;case 4:y.push([c(p,d,v[2],v[1]),c(p,d,v[2],v[0])]);break;case 5:y.push([c(p,d,v[2],v[1]),c(p,d,v[0],v[1])]);break;case 6:y.push([c(p,d,v[1],v[0]),c(p,d,v[2],v[0])]);break;case 7:break}}else if(x===2){var S=(g[v[0]]<<0)+(g[v[1]]<<1);if(S===0||S===3)continue;switch(S){case 0:break;case 1:y.push([c(p,d,v[0],v[1])]);break;case 2:y.push([c(p,d,v[1],v[0])]);break;case 3:break}}}return y}return f},function(){function c(h,d,p,g){for(var m=Math.min(p,g)|0,y=Math.max(p,g)|0,_=h[2*m],v=h[2*m+1];_<v;){var x=_+v>>1,S=d[2*x+1];if(S===y)return x;y<S?v=x:_=x+1}return _}function f(h,d,p,g){for(var m=h.length,y=[],_=0;_<m;++_){var v=h[_],x=v.length;if(x===4){var S=(g[v[0]]<<0)+(g[v[1]]<<1)+(g[v[2]]<<2)+(g[v[3]]<<3);if(S===0||S===15)continue;switch(S){case 0:break;case 1:y.push([c(p,d,v[0],v[1]),c(p,d,v[0],v[2]),c(p,d,v[0],v[3])]);break;case 2:y.push([c(p,d,v[1],v[2]),c(p,d,v[1],v[0]),c(p,d,v[1],v[3])]);break;case 3:y.push([c(p,d,v[1],v[2]),c(p,d,v[0],v[2]),c(p,d,v[0],v[3])],[c(p,d,v[1],v[3]),c(p,d,v[1],v[2]),c(p,d,v[0],v[3])]);break;case 4:y.push([c(p,d,v[2],v[0]),c(p,d,v[2],v[1]),c(p,d,v[2],v[3])]);break;case 5:y.push([c(p,d,v[0],v[1]),c(p,d,v[2],v[1]),c(p,d,v[0],v[3])],[c(p,d,v[2],v[1]),c(p,d,v[2],v[3]),c(p,d,v[0],v[3])]);break;case 6:y.push([c(p,d,v[2],v[0]),c(p,d,v[1],v[0]),c(p,d,v[1],v[3])],[c(p,d,v[2],v[3]),c(p,d,v[2],v[0]),c(p,d,v[1],v[3])]);break;case 7:y.push([c(p,d,v[0],v[3]),c(p,d,v[1],v[3]),c(p,d,v[2],v[3])]);break;case 8:y.push([c(p,d,v[3],v[1]),c(p,d,v[3],v[0]),c(p,d,v[3],v[2])]);break;case 9:y.push([c(p,d,v[3],v[1]),c(p,d,v[0],v[1]),c(p,d,v[0],v[2])],[c(p,d,v[3],v[2]),c(p,d,v[3],v[1]),c(p,d,v[0],v[2])]);break;case 10:y.push([c(p,d,v[1],v[0]),c(p,d,v[3],v[0]),c(p,d,v[1],v[2])],[c(p,d,v[3],v[0]),c(p,d,v[3],v[2]),c(p,d,v[1],v[2])]);break;case 11:y.push([c(p,d,v[1],v[2]),c(p,d,v[0],v[2]),c(p,d,v[3],v[2])]);break;case 12:y.push([c(p,d,v[3],v[0]),c(p,d,v[2],v[0]),c(p,d,v[2],v[1])],[c(p,d,v[3],v[1]),c(p,d,v[3],v[0]),c(p,d,v[2],v[1])]);break;case 13:y.push([c(p,d,v[0],v[1]),c(p,d,v[2],v[1]),c(p,d,v[3],v[1])]);break;case 14:y.push([c(p,d,v[2],v[0]),c(p,d,v[1],v[0]),c(p,d,v[3],v[0])]);break;case 15:break}}else if(x===3){var S=(g[v[0]]<<0)+(g[v[1]]<<1)+(g[v[2]]<<2);if(S===0||S===7)continue;switch(S){case 0:break;case 1:y.push([c(p,d,v[0],v[2]),c(p,d,v[0],v[1])]);break;case 2:y.push([c(p,d,v[1],v[0]),c(p,d,v[1],v[2])]);break;case 3:y.push([c(p,d,v[0],v[2]),c(p,d,v[1],v[2])]);break;case 4:y.push([c(p,d,v[2],v[1]),c(p,d,v[2],v[0])]);break;case 5:y.push([c(p,d,v[2],v[1]),c(p,d,v[0],v[1])]);break;case 6:y.push([c(p,d,v[1],v[0]),c(p,d,v[2],v[0])]);break;case 7:break}}else if(x===2){var S=(g[v[0]]<<0)+(g[v[1]]<<1);if(S===0||S===3)continue;switch(S){case 0:break;case 1:y.push([c(p,d,v[0],v[1])]);break;case 2:y.push([c(p,d,v[1],v[0])]);break;case 3:break}}}return y}return f}];function n(u){return l[u]()}},6803(s,l,n){"use strict";var u,c=n(8828),f=n(1755);function h(E){for(var T=0,F=Math.max,D=0,R=E.length;D<R;++D)T=F(T,E[D].length);return T-1}u=h;function d(E){for(var T=-1,F=Math.max,D=0,R=E.length;D<R;++D)for(var P=E[D],z=0,I=P.length;z<I;++z)T=F(T,P[z]);return T+1}u=d;function p(E){for(var T=new Array(E.length),F=0,D=E.length;F<D;++F)T[F]=E[F].slice(0);return T}u=p;function g(E,T){var F=E.length,D=E.length-T.length,R=Math.min;if(D)return D;switch(F){case 0:return 0;case 1:return E[0]-T[0];case 2:var B=E[0]+E[1]-T[0]-T[1];return B||R(E[0],E[1])-R(T[0],T[1]);case 3:var P=E[0]+E[1],z=T[0]+T[1];if(B=P+E[2]-(z+T[2]),B)return B;var I=R(E[0],E[1]),L=R(T[0],T[1]),B=R(I,E[2])-R(L,T[2]);return B||R(I+E[2],P)-R(L+T[2],z);default:var O=E.slice(0);O.sort();var G=T.slice(0);G.sort();for(var W=0;W<F;++W)if(D=O[W]-G[W],D)return D;return 0}}l.Fw=g;function m(E,T){return g(E[0],T[0])}function y(E,T){if(T){for(var F=E.length,D=new Array(F),R=0;R<F;++R)D[R]=[E[R],T[R]];D.sort(m);for(var R=0;R<F;++R)E[R]=D[R][0],T[R]=D[R][1];return E}else return E.sort(g),E}u=y;function _(E){if(E.length===0)return[];for(var T=1,F=E.length,D=1;D<F;++D){var R=E[D];if(g(R,E[D-1])){if(D===T){T++;continue}E[T++]=R}}return E.length=T,E}u=_;function v(E,T){for(var F=0,D=E.length-1,R=-1;F<=D;){var P=F+D>>1,z=g(E[P],T);z<=0?(z===0&&(R=P),F=P+1):z>0&&(D=P-1)}return R}u=v;function x(E,T){for(var F=new Array(E.length),D=0,R=F.length;D<R;++D)F[D]=[];for(var P=[],D=0,z=T.length;D<z;++D)for(var I=T[D],L=I.length,B=1,O=1<<L;B<O;++B){P.length=c.popCount(B);for(var G=0,W=0;W<L;++W)B&1<<W&&(P[G++]=I[W]);var X=v(E,P);if(!(X<0))for(;F[X++].push(D),!(X>=E.length||g(E[X],P)!==0););}return F}u=x;function S(E,T){if(!T)return x(_(C(E,0)),E,0);for(var F=new Array(T),D=0;D<T;++D)F[D]=[];for(var D=0,R=E.length;D<R;++D)for(var P=E[D],z=0,I=P.length;z<I;++z)F[P[z]].push(D);return F}u=S;function M(E){for(var T=[],F=0,D=E.length;F<D;++F)for(var R=E[F],P=R.length|0,z=1,I=1<<P;z<I;++z){for(var L=[],B=0;B<P;++B)z>>>B&1&&L.push(R[B]);T.push(L)}return y(T)}u=M;function C(E,T){if(T<0)return[];for(var F=[],D=(1<<T+1)-1,R=0;R<E.length;++R)for(var P=E[R],z=D;z<1<<P.length;z=c.nextCombination(z)){for(var I=new Array(T+1),L=0,B=0;B<P.length;++B)z&1<<B&&(I[L++]=P[B]);F.push(I)}return y(F)}u=C;function w(E){for(var T=[],F=0,D=E.length;F<D;++F)for(var R=E[F],P=0,z=R.length;P<z;++P){for(var I=new Array(R.length-1),L=0,B=0;L<z;++L)L!==P&&(I[B++]=R[L]);T.push(I)}return y(T)}u=w;function k(E,T){for(var F=new f(T),D=0;D<E.length;++D)for(var R=E[D],P=0;P<R.length;++P)for(var z=P+1;z<R.length;++z)F.link(R[P],R[z]);for(var I=[],L=F.ranks,D=0;D<L.length;++D)L[D]=-1;for(var D=0;D<E.length;++D){var B=F.find(E[D][0]);L[B]<0?(L[B]=I.length,I.push([E[D].slice(0)])):I[L[B]].push(E[D].slice(0))}return I}function A(E){for(var T=_(y(C(E,0))),F=new f(T.length),D=0;D<E.length;++D)for(var R=E[D],P=0;P<R.length;++P)for(var z=v(T,[R[P]]),I=P+1;I<R.length;++I)F.link(z,v(T,[R[I]]));for(var L=[],B=F.ranks,D=0;D<B.length;++D)B[D]=-1;for(var D=0;D<E.length;++D){var O=F.find(v(T,[E[D][0]]));B[O]<0?(B[O]=L.length,L.push([E[D].slice(0)])):L[B[O]].push(E[D].slice(0))}return L}function b(E,T){return T?k(E,T):A(E)}u=b},3105(s,l){"use strict";"use restrict";var n=32;l.INT_BITS=n,l.INT_MAX=2147483647,l.INT_MIN=-1<<n-1,l.sign=function(f){return(f>0)-(f<0)},l.abs=function(f){var h=f>>n-1;return(f^h)-h},l.min=function(f,h){return h^(f^h)&-(f<h)},l.max=function(f,h){return f^(f^h)&-(f<h)},l.isPow2=function(f){return!(f&f-1)&&!!f},l.log2=function(f){var h,d;return h=(f>65535)<<4,f>>>=h,d=(f>255)<<3,f>>>=d,h|=d,d=(f>15)<<2,f>>>=d,h|=d,d=(f>3)<<1,f>>>=d,h|=d,h|f>>1},l.log10=function(f){return f>=1e9?9:f>=1e8?8:f>=1e7?7:f>=1e6?6:f>=1e5?5:f>=1e4?4:f>=1e3?3:f>=100?2:f>=10?1:0},l.popCount=function(f){return f=f-(f>>>1&1431655765),f=(f&858993459)+(f>>>2&858993459),(f+(f>>>4)&252645135)*16843009>>>24};function u(f){var h=32;return f&=-f,f&&h--,f&65535&&(h-=16),f&16711935&&(h-=8),f&252645135&&(h-=4),f&858993459&&(h-=2),f&1431655765&&(h-=1),h}l.countTrailingZeros=u,l.nextPow2=function(f){return f+=f===0,--f,f|=f>>>1,f|=f>>>2,f|=f>>>4,f|=f>>>8,f|=f>>>16,f+1},l.prevPow2=function(f){return f|=f>>>1,f|=f>>>2,f|=f>>>4,f|=f>>>8,f|=f>>>16,f-(f>>>1)},l.parity=function(f){return f^=f>>>16,f^=f>>>8,f^=f>>>4,f&=15,27030>>>f&1};var c=new Array(256);(function(f){for(var h=0;h<256;++h){var d=h,p=h,g=7;for(d>>>=1;d;d>>>=1)p<<=1,p|=d&1,--g;f[h]=p<<g&255}})(c),l.reverse=function(f){return c[f&255]<<24|c[f>>>8&255]<<16|c[f>>>16&255]<<8|c[f>>>24&255]},l.interleave2=function(f,h){return f&=65535,f=(f|f<<8)&16711935,f=(f|f<<4)&252645135,f=(f|f<<2)&858993459,f=(f|f<<1)&1431655765,h&=65535,h=(h|h<<8)&16711935,h=(h|h<<4)&252645135,h=(h|h<<2)&858993459,h=(h|h<<1)&1431655765,f|h<<1},l.deinterleave2=function(f,h){return f=f>>>h&1431655765,f=(f|f>>>1)&858993459,f=(f|f>>>2)&252645135,f=(f|f>>>4)&16711935,f=(f|f>>>16)&65535,f<<16>>16},l.interleave3=function(f,h,d){return f&=1023,f=(f|f<<16)&4278190335,f=(f|f<<8)&251719695,f=(f|f<<4)&3272356035,f=(f|f<<2)&1227133513,h&=1023,h=(h|h<<16)&4278190335,h=(h|h<<8)&251719695,h=(h|h<<4)&3272356035,h=(h|h<<2)&1227133513,f|=h<<1,d&=1023,d=(d|d<<16)&4278190335,d=(d|d<<8)&251719695,d=(d|d<<4)&3272356035,d=(d|d<<2)&1227133513,f|d<<2},l.deinterleave3=function(f,h){return f=f>>>h&1227133513,f=(f|f>>>2)&3272356035,f=(f|f>>>4)&251719695,f=(f|f>>>8)&4278190335,f=(f|f>>>16)&1023,f<<22>>22},l.nextCombination=function(f){var h=f|f-1;return h+1|(~h&-~h)-1>>>u(f)+1}},2014(s,l,n){"use strict";"use restrict";var u=n(3105),c=n(4623);function f(b){for(var E=0,T=Math.max,F=0,D=b.length;F<D;++F)E=T(E,b[F].length);return E-1}l.dimension=f;function h(b){for(var E=-1,T=Math.max,F=0,D=b.length;F<D;++F)for(var R=b[F],P=0,z=R.length;P<z;++P)E=T(E,R[P]);return E+1}l.countVertices=h;function d(b){for(var E=new Array(b.length),T=0,F=b.length;T<F;++T)E[T]=b[T].slice(0);return E}l.cloneCells=d;function p(b,E){var T=b.length,F=b.length-E.length,D=Math.min;if(F)return F;switch(T){case 0:return 0;case 1:return b[0]-E[0];case 2:var L=b[0]+b[1]-E[0]-E[1];return L||D(b[0],b[1])-D(E[0],E[1]);case 3:var R=b[0]+b[1],P=E[0]+E[1];if(L=R+b[2]-(P+E[2]),L)return L;var z=D(b[0],b[1]),I=D(E[0],E[1]),L=D(z,b[2])-D(I,E[2]);return L||D(z+b[2],R)-D(I+E[2],P);default:var B=b.slice(0);B.sort();var O=E.slice(0);O.sort();for(var G=0;G<T;++G)if(F=B[G]-O[G],F)return F;return 0}}l.compareCells=p;function g(b,E){return p(b[0],E[0])}function m(b,E){if(E){for(var T=b.length,F=new Array(T),D=0;D<T;++D)F[D]=[b[D],E[D]];F.sort(g);for(var D=0;D<T;++D)b[D]=F[D][0],E[D]=F[D][1];return b}else return b.sort(p),b}l.normalize=m;function y(b){if(b.length===0)return[];for(var E=1,T=b.length,F=1;F<T;++F){var D=b[F];if(p(D,b[F-1])){if(F===E){E++;continue}b[E++]=D}}return b.length=E,b}l.unique=y;function _(b,E){for(var T=0,F=b.length-1,D=-1;T<=F;){var R=T+F>>1,P=p(b[R],E);P<=0?(P===0&&(D=R),T=R+1):P>0&&(F=R-1)}return D}l.findCell=_;function v(b,E){for(var T=new Array(b.length),F=0,D=T.length;F<D;++F)T[F]=[];for(var R=[],F=0,P=E.length;F<P;++F)for(var z=E[F],I=z.length,L=1,B=1<<I;L<B;++L){R.length=u.popCount(L);for(var O=0,G=0;G<I;++G)L&1<<G&&(R[O++]=z[G]);var W=_(b,R);if(!(W<0))for(;T[W++].push(F),!(W>=b.length||p(b[W],R)!==0););}return T}l.incidence=v;function x(b,E){if(!E)return v(y(M(b,0)),b,0);for(var T=new Array(E),F=0;F<E;++F)T[F]=[];for(var F=0,D=b.length;F<D;++F)for(var R=b[F],P=0,z=R.length;P<z;++P)T[R[P]].push(F);return T}l.dual=x;function S(b){for(var E=[],T=0,F=b.length;T<F;++T)for(var D=b[T],R=D.length|0,P=1,z=1<<R;P<z;++P){for(var I=[],L=0;L<R;++L)P>>>L&1&&I.push(D[L]);E.push(I)}return m(E)}l.explode=S;function M(b,E){if(E<0)return[];for(var T=[],F=(1<<E+1)-1,D=0;D<b.length;++D)for(var R=b[D],P=F;P<1<<R.length;P=u.nextCombination(P)){for(var z=new Array(E+1),I=0,L=0;L<R.length;++L)P&1<<L&&(z[I++]=R[L]);T.push(z)}return m(T)}l.skeleton=M;function C(b){for(var E=[],T=0,F=b.length;T<F;++T)for(var D=b[T],R=0,P=D.length;R<P;++R){for(var z=new Array(D.length-1),I=0,L=0;I<P;++I)I!==R&&(z[L++]=D[I]);E.push(z)}return m(E)}l.boundary=C;function w(b,E){for(var T=new c(E),F=0;F<b.length;++F)for(var D=b[F],R=0;R<D.length;++R)for(var P=R+1;P<D.length;++P)T.link(D[R],D[P]);for(var z=[],I=T.ranks,F=0;F<I.length;++F)I[F]=-1;for(var F=0;F<b.length;++F){var L=T.find(b[F][0]);I[L]<0?(I[L]=z.length,z.push([b[F].slice(0)])):z[I[L]].push(b[F].slice(0))}return z}function k(b){for(var E=y(m(M(b,0))),T=new c(E.length),F=0;F<b.length;++F)for(var D=b[F],R=0;R<D.length;++R)for(var P=_(E,[D[R]]),z=R+1;z<D.length;++z)T.link(P,_(E,[D[z]]));for(var I=[],L=T.ranks,F=0;F<L.length;++F)L[F]=-1;for(var F=0;F<b.length;++F){var B=T.find(_(E,[b[F][0]]));L[B]<0?(L[B]=I.length,I.push([b[F].slice(0)])):I[L[B]].push(b[F].slice(0))}return I}function A(b,E){return E?w(b,E):k(b)}l.connectedComponents=A},4623(s){"use strict";"use restrict";s.exports=l;function l(n){this.roots=new Array(n),this.ranks=new Array(n);for(var u=0;u<n;++u)this.roots[u]=u,this.ranks[u]=0}l.prototype.length=function(){return this.roots.length},l.prototype.makeSet=function(){var n=this.roots.length;return this.roots.push(n),this.ranks.push(0),n},l.prototype.find=function(n){for(var u=this.roots;u[n]!==n;){var c=u[n];u[n]=u[c],n=c}return n},l.prototype.link=function(n,u){var c=this.find(n),f=this.find(u);if(c!==f){var h=this.ranks,d=this.roots,p=h[c],g=h[f];p<g?d[c]=f:g<p?d[f]=c:(d[f]=c,++h[c])}}},5878(s,l,n){"use strict";s.exports=h;var u=n(3250),c=n(2014);function f(d,p,g){var m=Math.abs(u(d,p,g)),y=Math.sqrt(Math.pow(p[0]-g[0],2)+Math.pow(p[1]-g[1],2));return m/y}function h(d,p,g){for(var m=p.length,y=d.length,_=new Array(m),v=new Array(m),x=new Array(m),S=new Array(m),M=0;M<m;++M)_[M]=v[M]=-1,x[M]=1/0,S[M]=!1;for(var M=0;M<y;++M){var C=d[M];if(C.length!==2)throw new Error("Input must be a graph");var w=C[1],k=C[0];v[k]!==-1?v[k]=-2:v[k]=w,_[w]!==-1?_[w]=-2:_[w]=k}function A(N){if(S[N])return 1/0;var H=_[N],$=v[N];return H<0||$<0?1/0:f(p[N],p[H],p[$])}function b(N,H){var $=I[N],U=I[H];I[N]=U,I[H]=$,L[$]=H,L[U]=N}function E(N){return x[I[N]]}function T(N){return N&1?N-1>>1:(N>>1)-1}function F(N){for(var H=E(N);;){var $=H,U=2*N+1,V=2*(N+1),j=N;if(U<O){var q=E(U);q<$&&(j=U,$=q)}if(V<O){var Y=E(V);Y<$&&(j=V)}if(j===N)return N;b(N,j),N=j}}function D(N){for(var H=E(N);N>0;){var $=T(N);if($>=0){var U=E($);if(H<U){b(N,$),N=$;continue}}return N}}function R(){if(O>0){var N=I[0];return b(0,O-1),O-=1,F(0),N}return-1}function P(N,H){var $=I[N];return x[$]===H?N:(x[$]=-1/0,D(N),R(),x[$]=H,O+=1,D(O-1))}function z(N){if(!S[N]){S[N]=!0;var H=_[N],$=v[N];_[$]>=0&&(_[$]=H),v[H]>=0&&(v[H]=$),L[H]>=0&&P(L[H],A(H)),L[$]>=0&&P(L[$],A($))}}for(var I=[],L=new Array(m),M=0;M<m;++M){var B=x[M]=A(M);B<1/0?(L[M]=I.length,I.push(M)):L[M]=-1}for(var O=I.length,M=O>>1;M>=0;--M)F(M);for(;;){var G=R();if(G<0||x[G]>g)break;z(G)}for(var W=[],M=0;M<m;++M)S[M]||(L[M]=W.length,W.push(p[M].slice()));var X=W.length;function Z(N,H){if(N[H]<0)return H;var $=H,U=H;do{var V=N[U];if(!S[U]||V<0||V===U||(U=V,V=N[U],!S[U]||V<0||V===U))break;U=V,$=N[$]}while($!==U);for(var j=H;j!==U;j=N[j])N[j]=U;return U}var J=[];return d.forEach(function(N){var H=Z(_,N[0]),$=Z(v,N[1]);if(H>=0&&$>=0&&H!==$){var U=L[H],V=L[$];U!==V&&J.push([U,V])}}),c.unique(c.normalize(J)),{positions:W,edges:J}}},1303(s,l,n){"use strict";s.exports=f;var u=n(3250);function c(h,d){var p,g;if(d[0][0]<d[1][0])p=d[0],g=d[1];else if(d[0][0]>d[1][0])p=d[1],g=d[0];else{var m=Math.min(h[0][1],h[1][1]),y=Math.max(h[0][1],h[1][1]),_=Math.min(d[0][1],d[1][1]),v=Math.max(d[0][1],d[1][1]);return y<_?y-_:m>v?m-v:y-v}var x,S;h[0][1]<h[1][1]?(x=h[0],S=h[1]):(x=h[1],S=h[0]);var M=u(g,p,x);return M||(M=u(g,p,S),M)?M:S-g}function f(h,d){var p,g;if(d[0][0]<d[1][0])p=d[0],g=d[1];else if(d[0][0]>d[1][0])p=d[1],g=d[0];else return c(d,h);var m,y;if(h[0][0]<h[1][0])m=h[0],y=h[1];else if(h[0][0]>h[1][0])m=h[1],y=h[0];else return-c(h,d);var _=u(p,g,y),v=u(p,g,m);if(_<0){if(v<=0)return _}else if(_>0){if(v>=0)return _}else if(v)return v;if(_=u(y,m,g),v=u(y,m,p),_<0){if(v<=0)return _}else if(_>0){if(v>=0)return _}else if(v)return v;return g[0]-y[0]}},4209(s,l,n){"use strict";s.exports=v;var u=n(2478),c=n(3840),f=n(3250),h=n(1303);function d(x,S,M){this.slabs=x,this.coordinates=S,this.horizontal=M}var p=d.prototype;function g(x,S){return x.y-S}function m(x,S){for(var M=null;x;){var C=x.key,w,k;C[0][0]<C[1][0]?(w=C[0],k=C[1]):(w=C[1],k=C[0]);var A=f(w,k,S);if(A<0)x=x.left;else if(A>0)if(S[0]!==C[1][0])M=x,x=x.right;else{var b=m(x.right,S);if(b)return b;x=x.left}else{if(S[0]!==C[1][0])return x;var b=m(x.right,S);if(b)return b;x=x.left}}return M}p.castUp=function(x){var S=u.le(this.coordinates,x[0]);if(S<0)return-1;var M=this.slabs[S],C=m(this.slabs[S],x),w=-1;if(C&&(w=C.value),this.coordinates[S]===x[0]){var k=null;if(C&&(k=C.key),S>0){var A=m(this.slabs[S-1],x);A&&(k?h(A.key,k)>0&&(k=A.key,w=A.value):(w=A.value,k=A.key))}var b=this.horizontal[S];if(b.length>0){var E=u.ge(b,x[1],g);if(E<b.length){var T=b[E];if(x[1]===T.y){if(T.closed)return T.index;for(;E<b.length-1&&b[E+1].y===x[1];)if(E=E+1,T=b[E],T.closed)return T.index;if(T.y===x[1]&&!T.start){if(E=E+1,E>=b.length)return w;T=b[E]}}if(T.start)if(k){var F=f(k[0],k[1],[x[0],T.y]);k[0][0]>k[1][0]&&(F=-F),F>0&&(w=T.index)}else w=T.index;else T.y!==x[1]&&(w=T.index)}}}return w};function y(x,S,M,C){this.y=x,this.index=S,this.start=M,this.closed=C}function _(x,S,M,C){this.x=x,this.segment=S,this.create=M,this.index=C}function v(x){for(var S=x.length,M=2*S,C=new Array(M),w=0;w<S;++w){var k=x[w],A=k[0][0]<k[1][0];C[2*w]=new _(k[0][0],k,A,w),C[2*w+1]=new _(k[1][0],k,!A,w)}C.sort(function(I,L){var B=I.x-L.x;return B||(B=I.create-L.create,B)?B:Math.min(I.segment[0][1],I.segment[1][1])-Math.min(L.segment[0][1],L.segment[1][1])});for(var b=c(h),E=[],T=[],F=[],D=-1/0,w=0;w<M;){for(var R=C[w].x,P=[];w<M;){var z=C[w];if(z.x!==R)break;w+=1,z.segment[0][0]===z.x&&z.segment[1][0]===z.x?z.create&&(z.segment[0][1]<z.segment[1][1]?(P.push(new y(z.segment[0][1],z.index,!0,!0)),P.push(new y(z.segment[1][1],z.index,!1,!1))):(P.push(new y(z.segment[1][1],z.index,!0,!1)),P.push(new y(z.segment[0][1],z.index,!1,!0)))):z.create?b=b.insert(z.segment,z.index):b=b.remove(z.segment)}E.push(b.root),T.push(R),F.push(P)}return new d(E,T,F)}},5202(s,l,n){"use strict";var u=n(1944),c=n(8210);s.exports=d,s.exports.positive=p,s.exports.negative=g;function f(m,y){var _=c(u(m,y),[y[y.length-1]]);return _[_.length-1]}function h(m,y,_,v){var x=v-y,S=-y/x;S<0?S=0:S>1&&(S=1);for(var M=1-S,C=m.length,w=new Array(C),k=0;k<C;++k)w[k]=S*m[k]+M*_[k];return w}function d(m,y){for(var _=[],v=[],x=f(m[m.length-1],y),S=m[m.length-1],M=m[0],C=0;C<m.length;++C,S=M){M=m[C];var w=f(M,y);if(x<0&&w>0||x>0&&w<0){var k=h(S,w,M,x);_.push(k),v.push(k.slice())}w<0?v.push(M.slice()):w>0?_.push(M.slice()):(_.push(M.slice()),v.push(M.slice())),x=w}return{positive:_,negative:v}}function p(m,y){for(var _=[],v=f(m[m.length-1],y),x=m[m.length-1],S=m[0],M=0;M<m.length;++M,x=S){S=m[M];var C=f(S,y);(v<0&&C>0||v>0&&C<0)&&_.push(h(x,C,S,v)),C>=0&&_.push(S.slice()),v=C}return _}function g(m,y){for(var _=[],v=f(m[m.length-1],y),x=m[m.length-1],S=m[0],M=0;M<m.length;++M,x=S){S=m[M];var C=f(S,y);(v<0&&C>0||v>0&&C<0)&&_.push(h(x,C,S,v)),C<=0&&_.push(S.slice()),v=C}return _}},3387(s,l,n){var u;(function(){"use strict";var c={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function f(m){return d(g(m),arguments)}function h(m,y){return f.apply(null,[m].concat(y||[]))}function d(m,y){var _=1,v=m.length,x,S="",M,C,w,k,A,b,E,T;for(M=0;M<v;M++)if(typeof m[M]=="string")S+=m[M];else if(typeof m[M]=="object"){if(w=m[M],w.keys)for(x=y[_],C=0;C<w.keys.length;C++){if(x==null)throw new Error(f('[sprintf] Cannot access property "%s" of undefined value "%s"',w.keys[C],w.keys[C-1]));x=x[w.keys[C]]}else w.param_no?x=y[w.param_no]:x=y[_++];if(c.not_type.test(w.type)&&c.not_primitive.test(w.type)&&x instanceof Function&&(x=x()),c.numeric_arg.test(w.type)&&typeof x!="number"&&isNaN(x))throw new TypeError(f("[sprintf] expecting number but found %T",x));switch(c.number.test(w.type)&&(E=x>=0),w.type){case"b":x=parseInt(x,10).toString(2);break;case"c":x=String.fromCharCode(parseInt(x,10));break;case"d":case"i":x=parseInt(x,10);break;case"j":x=JSON.stringify(x,null,w.width?parseInt(w.width):0);break;case"e":x=w.precision?parseFloat(x).toExponential(w.precision):parseFloat(x).toExponential();break;case"f":x=w.precision?parseFloat(x).toFixed(w.precision):parseFloat(x);break;case"g":x=w.precision?String(Number(x.toPrecision(w.precision))):parseFloat(x);break;case"o":x=(parseInt(x,10)>>>0).toString(8);break;case"s":x=String(x),x=w.precision?x.substring(0,w.precision):x;break;case"t":x=String(!!x),x=w.precision?x.substring(0,w.precision):x;break;case"T":x=Object.prototype.toString.call(x).slice(8,-1).toLowerCase(),x=w.precision?x.substring(0,w.precision):x;break;case"u":x=parseInt(x,10)>>>0;break;case"v":x=x.valueOf(),x=w.precision?x.substring(0,w.precision):x;break;case"x":x=(parseInt(x,10)>>>0).toString(16);break;case"X":x=(parseInt(x,10)>>>0).toString(16).toUpperCase();break}c.json.test(w.type)?S+=x:(c.number.test(w.type)&&(!E||w.sign)?(T=E?"+":"-",x=x.toString().replace(c.sign,"")):T="",A=w.pad_char?w.pad_char==="0"?"0":w.pad_char.charAt(1):" ",b=w.width-(T+x).length,k=w.width&&b>0?A.repeat(b):"",S+=w.align?T+x+k:A==="0"?T+k+x:k+T+x)}return S}var p=Object.create(null);function g(m){if(p[m])return p[m];for(var y=m,_,v=[],x=0;y;){if((_=c.text.exec(y))!==null)v.push(_[0]);else if((_=c.modulo.exec(y))!==null)v.push("%");else if((_=c.placeholder.exec(y))!==null){if(_[2]){x|=1;var S=[],M=_[2],C=[];if((C=c.key.exec(M))!==null)for(S.push(C[1]);(M=M.substring(C[0].length))!=="";)if((C=c.key_access.exec(M))!==null)S.push(C[1]);else if((C=c.index_access.exec(M))!==null)S.push(C[1]);else throw new SyntaxError("[sprintf] failed to parse named argument key");else throw new SyntaxError("[sprintf] failed to parse named argument key");_[2]=S}else x|=2;if(x===3)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");v.push({placeholder:_[0],param_no:_[1],keys:_[2],sign:_[3],pad_char:_[4],align:_[5],width:_[6],precision:_[7],type:_[8]})}else throw new SyntaxError("[sprintf] unexpected placeholder");y=y.substring(_[0].length)}return p[m]=v}l.sprintf=f,l.vsprintf=h,typeof window<"u"&&(window.sprintf=f,window.vsprintf=h,u=(function(){return{sprintf:f,vsprintf:h}}).call(l,n,l,s),u!==void 0&&(s.exports=u))})()},3711(s,l,n){"use strict";s.exports=g;var u=n(2640),c=n(781),f={"2d":function(m,y,_){var v=m({order:y,scalarArguments:3,getters:_==="generic"?[0]:void 0,phase:function(S,M,C,w){return S>w|0},vertex:function(S,M,C,w,k,A,b,E,T,F,D,R,P){var z=(b<<0)+(E<<1)+(T<<2)+(F<<3)|0;if(!(z===0||z===15))switch(z){case 0:D.push([S-.5,M-.5]);break;case 1:D.push([S-.25-.25*(w+C-2*P)/(C-w),M-.25-.25*(k+C-2*P)/(C-k)]);break;case 2:D.push([S-.75-.25*(-w-C+2*P)/(w-C),M-.25-.25*(A+w-2*P)/(w-A)]);break;case 3:D.push([S-.5,M-.5-.5*(k+C+A+w-4*P)/(C-k+w-A)]);break;case 4:D.push([S-.25-.25*(A+k-2*P)/(k-A),M-.75-.25*(-k-C+2*P)/(k-C)]);break;case 5:D.push([S-.5-.5*(w+C+A+k-4*P)/(C-w+k-A),M-.5]);break;case 6:D.push([S-.5-.25*(-w-C+A+k)/(w-C+k-A),M-.5-.25*(-k-C+A+w)/(k-C+w-A)]);break;case 7:D.push([S-.75-.25*(A+k-2*P)/(k-A),M-.75-.25*(A+w-2*P)/(w-A)]);break;case 8:D.push([S-.75-.25*(-A-k+2*P)/(A-k),M-.75-.25*(-A-w+2*P)/(A-w)]);break;case 9:D.push([S-.5-.25*(w+C+-A-k)/(C-w+A-k),M-.5-.25*(k+C+-A-w)/(C-k+A-w)]);break;case 10:D.push([S-.5-.5*(-w-C+-A-k+4*P)/(w-C+A-k),M-.5]);break;case 11:D.push([S-.25-.25*(-A-k+2*P)/(A-k),M-.75-.25*(k+C-2*P)/(C-k)]);break;case 12:D.push([S-.5,M-.5-.5*(-k-C+-A-w+4*P)/(k-C+A-w)]);break;case 13:D.push([S-.75-.25*(w+C-2*P)/(C-w),M-.25-.25*(-A-w+2*P)/(A-w)]);break;case 14:D.push([S-.25-.25*(-w-C+2*P)/(w-C),M-.25-.25*(-k-C+2*P)/(k-C)]);break;case 15:D.push([S-.5,M-.5]);break}},cell:function(S,M,C,w,k,A,b,E,T){k?E.push([S,M]):E.push([M,S])}});return function(x,S){var M=[],C=[];return v(x,M,C,S),{positions:M,cells:C}}}};function h(m,y){var _=m.length+"d",v=f[_];if(v)return v(u,m,y)}function d(m,y){for(var _=c(m,y),v=_.length,x=new Array(v),S=new Array(v),M=0;M<v;++M)x[M]=[_[M]],S[M]=[M];return{positions:x,cells:S}}var p={};function g(m,x){if(m.dimension<=0)return{positions:[],cells:[]};if(m.dimension===1)return d(m,x);var _=m.order.join()+"-"+m.dtype,v=p[_],x=+x||0;return v||(v=p[_]=h(m.order,m.dtype)),v(m,x)}},7261(s,l,n){"use strict";s.exports=S;var u=n(9215),c=n(7608),f=n(6079),h=n(5911),d=n(3536),p=n(244);function g(M,C,w){return Math.sqrt(Math.pow(M,2)+Math.pow(C,2)+Math.pow(w,2))}function m(M){return Math.min(1,Math.max(-1,M))}function y(M){var C=Math.abs(M[0]),w=Math.abs(M[1]),k=Math.abs(M[2]),A=[0,0,0];C>Math.max(w,k)?A[2]=1:w>Math.max(C,k)?A[0]=1:A[1]=1;for(var b=0,E=0,T=0;T<3;++T)b+=M[T]*M[T],E+=A[T]*M[T];for(var T=0;T<3;++T)A[T]-=E/b*M[T];return d(A,A),A}function _(M,C,w,k,A,b,E,T){this.center=u(w),this.up=u(k),this.right=u(A),this.radius=u([b]),this.angle=u([E,T]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(M,C),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var F=0;F<16;++F)this.computedMatrix[F]=.5;this.recalcMatrix(0)}var v=_.prototype;v.setDistanceLimits=function(M,C){M>0?M=Math.log(M):M=-1/0,C>0?C=Math.log(C):C=1/0,C=Math.max(C,M),this.radius.bounds[0][0]=M,this.radius.bounds[1][0]=C},v.getDistanceLimits=function(M){var C=this.radius.bounds[0];return M?(M[0]=Math.exp(C[0][0]),M[1]=Math.exp(C[1][0]),M):[Math.exp(C[0][0]),Math.exp(C[1][0])]},v.recalcMatrix=function(M){this.center.curve(M),this.up.curve(M),this.right.curve(M),this.radius.curve(M),this.angle.curve(M);for(var C=this.computedUp,w=this.computedRight,k=0,A=0,b=0;b<3;++b)A+=C[b]*w[b],k+=C[b]*C[b];for(var E=Math.sqrt(k),T=0,b=0;b<3;++b)w[b]-=C[b]*A/k,T+=w[b]*w[b],C[b]/=E;for(var F=Math.sqrt(T),b=0;b<3;++b)w[b]/=F;var D=this.computedToward;h(D,C,w),d(D,D);for(var R=Math.exp(this.computedRadius[0]),P=this.computedAngle[0],z=this.computedAngle[1],I=Math.cos(P),L=Math.sin(P),B=Math.cos(z),O=Math.sin(z),G=this.computedCenter,W=I*B,X=L*B,Z=O,J=-I*O,N=-L*O,H=B,$=this.computedEye,U=this.computedMatrix,b=0;b<3;++b){var V=W*w[b]+X*D[b]+Z*C[b];U[4*b+1]=J*w[b]+N*D[b]+H*C[b],U[4*b+2]=V,U[4*b+3]=0}var j=U[1],q=U[5],Y=U[9],K=U[2],te=U[6],ne=U[10],se=q*ne-Y*te,le=Y*K-j*ne,ce=j*te-q*K,pe=g(se,le,ce);se/=pe,le/=pe,ce/=pe,U[0]=se,U[4]=le,U[8]=ce;for(var b=0;b<3;++b)$[b]=G[b]+U[2+4*b]*R;for(var b=0;b<3;++b){for(var T=0,xe=0;xe<3;++xe)T+=U[b+4*xe]*$[xe];U[12+b]=-T}U[15]=1},v.getMatrix=function(M,C){this.recalcMatrix(M);var w=this.computedMatrix;if(C){for(var k=0;k<16;++k)C[k]=w[k];return C}return w};var x=[0,0,0];v.rotate=function(M,C,w,k){if(this.angle.move(M,C,w),k){this.recalcMatrix(M);var A=this.computedMatrix;x[0]=A[2],x[1]=A[6],x[2]=A[10];for(var b=this.computedUp,E=this.computedRight,T=this.computedToward,F=0;F<3;++F)A[4*F]=b[F],A[4*F+1]=E[F],A[4*F+2]=T[F];f(A,A,k,x);for(var F=0;F<3;++F)b[F]=A[4*F],E[F]=A[4*F+1];this.up.set(M,b[0],b[1],b[2]),this.right.set(M,E[0],E[1],E[2])}},v.pan=function(M,C,w,k){C=C||0,w=w||0,k=k||0,this.recalcMatrix(M);var A=this.computedMatrix,b=Math.exp(this.computedRadius[0]),E=A[1],T=A[5],F=A[9],D=g(E,T,F);E/=D,T/=D,F/=D;var R=A[0],P=A[4],z=A[8],I=R*E+P*T+z*F;R-=E*I,P-=T*I,z-=F*I;var L=g(R,P,z);R/=L,P/=L,z/=L;var B=R*C+E*w,O=P*C+T*w,G=z*C+F*w;this.center.move(M,B,O,G);var W=Math.exp(this.computedRadius[0]);W=Math.max(1e-4,W+k),this.radius.set(M,Math.log(W))},v.translate=function(M,C,w,k){this.center.move(M,C||0,w||0,k||0)},v.setMatrix=function(M,C,w,k){var A=1;typeof w=="number"&&(A=w|0),(A<0||A>3)&&(A=1);var b=(A+2)%3,E=(A+1)%3;C||(this.recalcMatrix(M),C=this.computedMatrix);var T=C[A],F=C[A+4],D=C[A+8];if(k){var P=Math.abs(T),z=Math.abs(F),I=Math.abs(D),L=Math.max(P,z,I);P===L?(T=T<0?-1:1,F=D=0):I===L?(D=D<0?-1:1,T=F=0):(F=F<0?-1:1,T=D=0)}else{var R=g(T,F,D);T/=R,F/=R,D/=R}var B=C[b],O=C[b+4],G=C[b+8],W=B*T+O*F+G*D;B-=T*W,O-=F*W,G-=D*W;var X=g(B,O,G);B/=X,O/=X,G/=X;var Z=F*G-D*O,J=D*B-T*G,N=T*O-F*B,H=g(Z,J,N);Z/=H,J/=H,N/=H,this.center.jump(M,ie,Q,ue),this.radius.idle(M),this.up.jump(M,T,F,D),this.right.jump(M,B,O,G);var $,U;if(A===2){var V=C[1],j=C[5],q=C[9],Y=V*B+j*O+q*G,K=V*Z+j*J+q*N;le<0?$=-Math.PI/2:$=Math.PI/2,U=Math.atan2(K,Y)}else{var te=C[2],ne=C[6],se=C[10],le=te*T+ne*F+se*D,ce=te*B+ne*O+se*G,pe=te*Z+ne*J+se*N;$=Math.asin(m(le)),U=Math.atan2(pe,ce)}this.angle.jump(M,U,$),this.recalcMatrix(M);var xe=C[2],ye=C[6],fe=C[10],ae=this.computedMatrix;c(ae,C);var ee=ae[15],ie=ae[12]/ee,Q=ae[13]/ee,ue=ae[14]/ee,ge=Math.exp(this.computedRadius[0]);this.center.jump(M,ie-xe*ge,Q-ye*ge,ue-fe*ge)},v.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},v.idle=function(M){this.center.idle(M),this.up.idle(M),this.right.idle(M),this.radius.idle(M),this.angle.idle(M)},v.flush=function(M){this.center.flush(M),this.up.flush(M),this.right.flush(M),this.radius.flush(M),this.angle.flush(M)},v.setDistance=function(M,C){C>0&&this.radius.set(M,Math.log(C))},v.lookAt=function(M,C,w,k){this.recalcMatrix(M),C=C||this.computedEye,w=w||this.computedCenter,k=k||this.computedUp;var A=k[0],b=k[1],E=k[2],T=g(A,b,E);if(!(T<1e-6)){A/=T,b/=T,E/=T;var F=C[0]-w[0],D=C[1]-w[1],R=C[2]-w[2],P=g(F,D,R);if(!(P<1e-6)){F/=P,D/=P,R/=P;var z=this.computedRight,I=z[0],L=z[1],B=z[2],O=A*I+b*L+E*B;I-=O*A,L-=O*b,B-=O*E;var G=g(I,L,B);if(!(G<.01&&(I=b*R-E*D,L=E*F-A*R,B=A*D-b*F,G=g(I,L,B),G<1e-6))){I/=G,L/=G,B/=G,this.up.set(M,A,b,E),this.right.set(M,I,L,B),this.center.set(M,w[0],w[1],w[2]),this.radius.set(M,Math.log(P));var W=b*B-E*L,X=E*I-A*B,Z=A*L-b*I,J=g(W,X,Z);W/=J,X/=J,Z/=J;var N=A*F+b*D+E*R,H=I*F+L*D+B*R,$=W*F+X*D+Z*R,U=Math.asin(m(N)),V=Math.atan2($,H),j=this.angle._state,q=j[j.length-1],Y=j[j.length-2];q=q%(2*Math.PI);var K=Math.abs(q+2*Math.PI-V),te=Math.abs(q-V),ne=Math.abs(q-2*Math.PI-V);K<te&&(q+=2*Math.PI),ne<te&&(q-=2*Math.PI),this.angle.jump(this.angle.lastT(),q,Y),this.angle.set(M,V,U)}}}};function S(M){M=M||{};var C=M.center||[0,0,0],w=M.up||[0,1,0],k=M.right||y(w),A=M.radius||1,b=M.theta||0,E=M.phi||0;if(C=[].slice.call(C,0,3),w=[].slice.call(w,0,3),d(w,w),k=[].slice.call(k,0,3),d(k,k),"eye"in M){var T=M.eye,F=[T[0]-C[0],T[1]-C[1],T[2]-C[2]];h(k,F,w),g(k[0],k[1],k[2])<1e-6?k=y(w):d(k,k),A=g(F[0],F[1],F[2]);var D=p(w,F)/A,R=p(k,F)/A;E=Math.acos(D),b=Math.acos(R)}return A=Math.log(A),new _(M.zoomMin,M.zoomMax,C,w,k,A,b,E)}},5250(s){"use strict";s.exports=n;var l=+(Math.pow(2,27)+1);function n(u,c,f){var h=u*c,d=l*u,p=d-u,g=d-p,m=u-g,y=l*c,_=y-c,v=y-_,x=c-v,S=h-g*v,M=S-m*v,C=M-g*x,w=m*x-C;return f?(f[0]=w,f[1]=h,f):[w,h]}},9362(s){"use strict";s.exports=l;function l(n,u,c){var f=n+u,h=f-n,d=f-h,p=u-h,g=n-d;return c?(c[0]=g+p,c[1]=f,c):[g+p,f]}},1888(s,l,n){"use strict";var u=n(8828),c=n(1338),f=n(5500).hp;n.g.__TYPEDARRAY_POOL||(n.g.__TYPEDARRAY_POOL={UINT8:c([32,0]),UINT16:c([32,0]),UINT32:c([32,0]),BIGUINT64:c([32,0]),INT8:c([32,0]),INT16:c([32,0]),INT32:c([32,0]),BIGINT64:c([32,0]),FLOAT:c([32,0]),DOUBLE:c([32,0]),DATA:c([32,0]),UINT8C:c([32,0]),BUFFER:c([32,0])});var h=typeof Uint8ClampedArray<"u",d=typeof BigUint64Array<"u",p=typeof BigInt64Array<"u",g=n.g.__TYPEDARRAY_POOL;g.UINT8C||(g.UINT8C=c([32,0])),g.BIGUINT64||(g.BIGUINT64=c([32,0])),g.BIGINT64||(g.BIGINT64=c([32,0])),g.BUFFER||(g.BUFFER=c([32,0]));var m=g.DATA,y=g.BUFFER;l.free=function(I){if(f.isBuffer(I))y[u.log2(I.length)].push(I);else{if(Object.prototype.toString.call(I)!=="[object ArrayBuffer]"&&(I=I.buffer),!I)return;var L=I.length||I.byteLength,B=u.log2(L)|0;m[B].push(I)}};function _(z){if(z){var I=z.length||z.byteLength,L=u.log2(I);m[L].push(z)}}function v(z){_(z.buffer)}l.freeUint8=l.freeUint16=l.freeUint32=l.freeBigUint64=l.freeInt8=l.freeInt16=l.freeInt32=l.freeBigInt64=l.freeFloat32=l.freeFloat=l.freeFloat64=l.freeDouble=l.freeUint8Clamped=l.freeDataView=v,l.freeArrayBuffer=_,l.freeBuffer=function(I){y[u.log2(I.length)].push(I)},l.malloc=function(I,L){if(L===void 0||L==="arraybuffer")return x(I);switch(L){case"uint8":return S(I);case"uint16":return M(I);case"uint32":return C(I);case"int8":return w(I);case"int16":return k(I);case"int32":return A(I);case"float":case"float32":return b(I);case"double":case"float64":return E(I);case"uint8_clamped":return T(I);case"bigint64":return D(I);case"biguint64":return F(I);case"buffer":return P(I);case"data":case"dataview":return R(I);default:return null}return null};function x(I){var I=u.nextPow2(I),L=u.log2(I),B=m[L];return B.length>0?B.pop():new ArrayBuffer(I)}l.mallocArrayBuffer=x;function S(z){return new Uint8Array(x(z),0,z)}l.mallocUint8=S;function M(z){return new Uint16Array(x(2*z),0,z)}l.mallocUint16=M;function C(z){return new Uint32Array(x(4*z),0,z)}l.mallocUint32=C;function w(z){return new Int8Array(x(z),0,z)}l.mallocInt8=w;function k(z){return new Int16Array(x(2*z),0,z)}l.mallocInt16=k;function A(z){return new Int32Array(x(4*z),0,z)}l.mallocInt32=A;function b(z){return new Float32Array(x(4*z),0,z)}l.mallocFloat32=l.mallocFloat=b;function E(z){return new Float64Array(x(8*z),0,z)}l.mallocFloat64=l.mallocDouble=E;function T(z){return h?new Uint8ClampedArray(x(z),0,z):S(z)}l.mallocUint8Clamped=T;function F(z){return d?new BigUint64Array(x(8*z),0,z):null}l.mallocBigUint64=F;function D(z){return p?new BigInt64Array(x(8*z),0,z):null}l.mallocBigInt64=D;function R(z){return new DataView(x(z),0,z)}l.mallocDataView=R;function P(z){z=u.nextPow2(z);var I=u.log2(z),L=y[I];return L.length>0?L.pop():new f(z)}l.mallocBuffer=P,l.clearCache=function(){for(var I=0;I<32;++I)g.UINT8[I].length=0,g.UINT16[I].length=0,g.UINT32[I].length=0,g.INT8[I].length=0,g.INT16[I].length=0,g.INT32[I].length=0,g.FLOAT[I].length=0,g.DOUBLE[I].length=0,g.BIGUINT64[I].length=0,g.BIGINT64[I].length=0,g.UINT8C[I].length=0,m[I].length=0,y[I].length=0}},1755(s){"use strict";"use restrict";s.exports=l;function l(u){this.roots=new Array(u),this.ranks=new Array(u);for(var c=0;c<u;++c)this.roots[c]=c,this.ranks[c]=0}var n=l.prototype;Object.defineProperty(n,"length",{get:function(){return this.roots.length}}),n.makeSet=function(){var u=this.roots.length;return this.roots.push(u),this.ranks.push(0),u},n.find=function(u){for(var c=u,f=this.roots;f[u]!==u;)u=f[u];for(;f[c]!==u;){var h=f[c];f[c]=u,c=h}return u},n.link=function(u,c){var f=this.find(u),h=this.find(c);if(f!==h){var d=this.ranks,p=this.roots,g=d[f],m=d[h];g<m?p[f]=h:m<g?p[h]=f:(p[h]=f,++d[f])}}},1682(s){"use strict";function l(c,f){for(var h=1,d=c.length,p=c[0],g=c[0],m=1;m<d;++m)if(g=p,p=c[m],f(p,g)){if(m===h){h++;continue}c[h++]=p}return c.length=h,c}function n(c){for(var f=1,h=c.length,d=c[0],p=c[0],g=1;g<h;++g,p=d)if(p=d,d=c[g],d!==p){if(g===f){f++;continue}c[f++]=d}return c.length=f,c}function u(c,f,h){return c.length===0?c:f?(h||c.sort(f),l(c,f)):(h||c.sort(),n(c))}s.exports=u},4359(s,l,n){"use strict";s.exports=h;var u=n(7718),c=null,f=null;typeof document<"u"&&(c=document.createElement("canvas"),c.width=8192,c.height=1024,f=c.getContext("2d"));function h(d,p){return(typeof p!="object"||p===null)&&(p={}),u(d,p.canvas||c,p.context||f,p)}},7718(s,l,n){s.exports=D,s.exports.processPixels=F;var u=n(3711),c=n(9618),f=n(5878),h=n(332),d=n(2538),p=n(2095),g="b",m="b|",y="i",_="i|",v="sup",x="+",S="+1",M="sub",C="-",w="-1";function k(R,P,z,I){for(var L="<"+R+">",B="</"+R+">",O=L.length,G=B.length,W=P[0]===x||P[0]===C,X=0,Z=-G;X>-1&&(X=z.indexOf(L,X),!(X===-1||(Z=z.indexOf(B,X+O),Z===-1)||Z<=X));){for(var J=X;J<Z+G;++J)if(J<X+O||J>=Z)I[J]=null,z=z.substr(0,J)+" "+z.substr(J+1);else if(I[J]!==null){var N=I[J].indexOf(P[0]);N===-1?I[J]+=P:W&&(I[J]=I[J].substr(0,N+1)+(1+parseInt(I[J][N+1]))+I[J].substr(N+2))}var H=X+O,$=z.substr(H,Z-H),U=$.indexOf(L);U!==-1?X=U:X=Z+G}return I}function A(R,P,z){for(var I=P.textAlign||"start",L=P.textBaseline||"alphabetic",B=[1<<30,1<<30],O=[0,0],G=R.length,W=0;W<G;++W)for(var X=R[W],Z=0;Z<2;++Z)B[Z]=Math.min(B[Z],X[Z])|0,O[Z]=Math.max(O[Z],X[Z])|0;var J=0;switch(I){case"center":J=-.5*(B[0]+O[0]);break;case"right":case"end":J=-O[0];break;case"left":case"start":J=-B[0];break;default:throw new Error("vectorize-text: Unrecognized textAlign: '"+I+"'")}var N=0;switch(L){case"hanging":case"top":N=-B[1];break;case"middle":N=-.5*(B[1]+O[1]);break;case"alphabetic":case"ideographic":N=-3*z;break;case"bottom":N=-O[1];break;default:throw new Error("vectorize-text: Unrecoginized textBaseline: '"+L+"'")}var H=1/z;return"lineHeight"in P?H*=+P.lineHeight:"width"in P?H=P.width/(O[0]-B[0]):"height"in P&&(H=P.height/(O[1]-B[1])),R.map(function($){return[H*($[0]+J),H*($[1]+N)]})}function b(R,P,z,I,L,B){z=z.replace(/
/g,""),B.breaklines===!0?z=z.replace(/\<br\>/g,`
+`):z=z.replace(/\<br\>/g," ");var O="",G=[];for(q=0;q<z.length;++q)G[q]=O;B.bolds===!0&&(G=k(g,m,z,G)),B.italics===!0&&(G=k(y,_,z,G)),B.superscripts===!0&&(G=k(v,S,z,G)),B.subscripts===!0&&(G=k(M,w,z,G));var W=[],X="";for(q=0;q<z.length;++q)G[q]!==null&&(X+=z[q],W.push(G[q]));var Z=X.split(`
+`),J=Z.length,N=Math.round(L*I),H=I,$=I*2,U=0,V=J*N+$;R.height<V&&(R.height=V),P.fillStyle="#000",P.fillRect(0,0,R.width,R.height),P.fillStyle="#fff";var j,q,Y,K,te,ne=0,se="";function le(){if(se!==""){var Q=P.measureText(se).width;P.fillText(se,H+Y,$+K),Y+=Q}}function ce(){return""+Math.round(te)+"px "}function pe(Q,ue){var ge=""+P.font;if(B.subscripts===!0){var Me=Q.indexOf(C),Te=ue.indexOf(C),je=Me>-1?parseInt(Q[1+Me]):0,Ve=Te>-1?parseInt(ue[1+Te]):0;je!==Ve&&(ge=ge.replace(ce(),"?px "),te*=Math.pow(.75,Ve-je),ge=ge.replace("?px ",ce())),K+=.25*N*(Ve-je)}if(B.superscripts===!0){var Ze=Q.indexOf(x),Ke=ue.indexOf(x),vt=Ze>-1?parseInt(Q[1+Ze]):0,xt=Ke>-1?parseInt(ue[1+Ke]):0;vt!==xt&&(ge=ge.replace(ce(),"?px "),te*=Math.pow(.75,xt-vt),ge=ge.replace("?px ",ce())),K-=.25*N*(xt-vt)}if(B.bolds===!0){var Pt=Q.indexOf(m)>-1,mt=ue.indexOf(m)>-1;!Pt&&mt&&(Mt?ge=ge.replace("italic ","italic bold "):ge="bold "+ge),Pt&&!mt&&(ge=ge.replace("bold ",""))}if(B.italics===!0){var Mt=Q.indexOf(_)>-1,lt=ue.indexOf(_)>-1;!Mt&<&&(ge="italic "+ge),Mt&&!lt&&(ge=ge.replace("italic ",""))}P.font=ge}for(j=0;j<J;++j){var xe=Z[j]+`
+`;for(Y=0,K=j*N,te=I,se="",q=0;q<xe.length;++q){var ye=q+ne<W.length?W[q+ne]:W[W.length-1];O===ye?se+=xe[q]:(le(),se=xe[q],ye!==void 0&&(pe(O,ye),O=ye))}le(),ne+=xe.length;var fe=Math.round(Y+2*H)|0;U<fe&&(U=fe)}var ae=U,ee=$+N*J,ie=c(P.getImageData(0,0,ae,ee).data,[ee,ae,4]);return ie.pick(-1,-1,0).transpose(1,0)}function E(R,P){var z=u(R,128);return P?f(z.cells,z.positions,.25):{edges:z.cells,positions:z.positions}}function T(R,P,z,I){var L=E(R,I),B=A(L.positions,P,z),O=L.edges,G=P.orientation==="ccw";if(h(B,O),P.polygons||P.polygon||P.polyline){for(var W=p(O,B),X=new Array(W.length),Z=0;Z<W.length;++Z){for(var J=W[Z],N=new Array(J.length),H=0;H<J.length;++H){for(var $=J[H],U=new Array($.length),V=0;V<$.length;++V)U[V]=B[$[V]].slice();G&&U.reverse(),N[H]=U}X[Z]=N}return X}else return P.triangles||P.triangulate||P.triangle?{cells:d(B,O,{delaunay:!1,exterior:!1,interior:!0}),positions:B}:{edges:O,positions:B}}function F(R,P,z){try{return T(R,P,z,!0)}catch{}try{return T(R,P,z,!1)}catch{}return P.polygons||P.polyline||P.polygon?[]:P.triangles||P.triangulate||P.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}function D(R,P,z,I){var L=64,B=1.25,O={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};I&&(I.size&&I.size>0&&(L=I.size),I.lineSpacing&&I.lineSpacing>0&&(B=I.lineSpacing),I.styletags&&I.styletags.breaklines&&(O.breaklines=!!I.styletags.breaklines),I.styletags&&I.styletags.bolds&&(O.bolds=!!I.styletags.bolds),I.styletags&&I.styletags.italics&&(O.italics=!!I.styletags.italics),I.styletags&&I.styletags.subscripts&&(O.subscripts=!!I.styletags.subscripts),I.styletags&&I.styletags.superscripts&&(O.superscripts=!!I.styletags.superscripts)),z.font=[I.fontStyle,I.fontVariant,I.fontWeight,L+"px",I.font].filter(function(W){return W}).join(" "),z.textAlign="start",z.textBaseline="alphabetic",z.direction="ltr";var G=b(P,z,R,L,B,O);return F(G,I,L)}},1538(s){(function(){"use strict";if(typeof ses<"u"&&ses.ok&&!ses.ok())return;function n(T){T.permitHostObjects___&&T.permitHostObjects___(n)}typeof ses<"u"&&(ses.weakMapPermitHostObjects=n);var u=!1;if(typeof WeakMap=="function"){var c=WeakMap;if(!(typeof navigator<"u"&&/Firefox/.test(navigator.userAgent))){var f=new c,h=Object.freeze({});if(f.set(h,1),f.get(h)!==1)u=!0;else{s.exports=WeakMap;return}}}var d=Object.prototype.hasOwnProperty,p=Object.getOwnPropertyNames,g=Object.defineProperty,m=Object.isExtensible,y="weakmap:",_=y+"ident:"+Math.random()+"___";if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function"&&typeof ArrayBuffer=="function"&&typeof Uint8Array=="function"){var v=new ArrayBuffer(25),x=new Uint8Array(v);crypto.getRandomValues(x),_=y+"rand:"+Array.prototype.map.call(x,function(T){return(T%36).toString(36)}).join("")+"___"}function S(T){return!(T.substr(0,y.length)==y&&T.substr(T.length-3)==="___")}if(g(Object,"getOwnPropertyNames",{value:function(F){return p(F).filter(S)}}),"getPropertyNames"in Object){var M=Object.getPropertyNames;g(Object,"getPropertyNames",{value:function(F){return M(F).filter(S)}})}function C(T){if(T!==Object(T))throw new TypeError("Not an object: "+T);var F=T[_];if(F&&F.key===T)return F;if(m(T)){F={key:T};try{return g(T,_,{value:F,writable:!1,enumerable:!1,configurable:!1}),F}catch{return}}}(function(){var T=Object.freeze;g(Object,"freeze",{value:function(P){return C(P),T(P)}});var F=Object.seal;g(Object,"seal",{value:function(P){return C(P),F(P)}});var D=Object.preventExtensions;g(Object,"preventExtensions",{value:function(P){return C(P),D(P)}})})();function w(T){return T.prototype=null,Object.freeze(T)}var k=!1;function A(){!k&&typeof console<"u"&&(k=!0,console.warn("WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future."))}var b=0,E=function(){this instanceof E||A();var T=[],F=[],D=b++;function R(L,B){var O,G=C(L);return G?D in G?G[D]:B:(O=T.indexOf(L),O>=0?F[O]:B)}function P(L){var B=C(L);return B?D in B:T.indexOf(L)>=0}function z(L,B){var O,G=C(L);return G?G[D]=B:(O=T.indexOf(L),O>=0?F[O]=B:(O=T.length,F[O]=B,T[O]=L)),this}function I(L){var B=C(L),O,G;return B?D in B&&delete B[D]:(O=T.indexOf(L),O<0?!1:(G=T.length-1,T[O]=void 0,F[O]=F[G],T[O]=T[G],T.length=G,F.length=G,!0))}return Object.create(E.prototype,{get___:{value:w(R)},has___:{value:w(P)},set___:{value:w(z)},delete___:{value:w(I)}})};E.prototype=Object.create(Object.prototype,{get:{value:function(F,D){return this.get___(F,D)},writable:!0,configurable:!0},has:{value:function(F){return this.has___(F)},writable:!0,configurable:!0},set:{value:function(F,D){return this.set___(F,D)},writable:!0,configurable:!0},delete:{value:function(F){return this.delete___(F)},writable:!0,configurable:!0}}),typeof c=="function"?(function(){u&&typeof Proxy<"u"&&(Proxy=void 0);function T(){this instanceof E||A();var F=new c,D=void 0,R=!1;function P(B,O){return D?F.has(B)?F.get(B):D.get___(B,O):F.get(B,O)}function z(B){return F.has(B)||(D?D.has___(B):!1)}var I;u?I=function(B,O){return F.set(B,O),F.has(B)||(D||(D=new E),D.set(B,O)),this}:I=function(B,O){if(R)try{F.set(B,O)}catch{D||(D=new E),D.set___(B,O)}else F.set(B,O);return this};function L(B){var O=!!F.delete(B);return D&&D.delete___(B)||O}return Object.create(E.prototype,{get___:{value:w(P)},has___:{value:w(z)},set___:{value:w(I)},delete___:{value:w(L)},permitHostObjects___:{value:w(function(B){if(B===n)R=!0;else throw new Error("bogus call to permitHostObjects___")})}})}T.prototype=E.prototype,s.exports=T,Object.defineProperty(WeakMap.prototype,"constructor",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})})():(typeof Proxy<"u"&&(Proxy=void 0),s.exports=E)})()},236(s,l,n){var u=n(8284);s.exports=c;function c(){var f={};return function(h){if((typeof h!="object"||h===null)&&typeof h!="function")throw new Error("Weakmap-shim: Key must be object");var d=h.valueOf(f);return d&&d.identity===f?d:u(h,f)}}},8284(s){s.exports=l;function l(n,u){var c={identity:u},f=n.valueOf;return Object.defineProperty(n,"valueOf",{value:function(h){return h!==u?f.apply(this,arguments):c},writable:!0}),c}},606(s,l,n){var u=n(236);s.exports=c;function c(){var f=u();return{get:function(h,d){var p=f(h);return p.hasOwnProperty("value")?p.value:d},set:function(h,d){return f(h).value=d,this},has:function(h){return"value"in f(h)},delete:function(h){return delete f(h).value}}}},3349(s){"use strict";function l(){return function(d,p,g,m,y,_){var v=d[0],x=g[0],S=[0],M=x;m|=0;var C=0,w=x;for(C=0;C<v;++C){{var k=p[m]-_,A=p[m+M]-_;k>=0!=A>=0&&y.push(S[0]+.5+.5*(k+A)/(k-A))}m+=w,++S[0]}}}function n(){return l()}var u=n;function c(d){var p={};return function(m,y,_){var v=m.dtype,x=m.order,S=[v,x.join()].join(),M=p[S];return M||(p[S]=M=d([v,x])),M(m.shape.slice(0),m.data,m.stride,m.offset|0,y,_)}}function f(d){return c(u.bind(void 0,d))}function h(d){return f({funcName:d.funcName})}s.exports=h({funcName:"zeroCrossings"})},781(s,l,n){"use strict";s.exports=c;var u=n(3349);function c(f,h){var d=[];return h=+h||0,u(f.hi(f.shape[0]-1),d,h),d}},7790(){}};let i={};function a(s){let l=i[s];if(l!==void 0)return l.exports;let n=i[s]={id:s,loaded:!1,exports:{}};return t[s].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.g=(function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}})(),a.nmd=s=>(s.paths=[],s.children||(s.children=[]),s);let o=a(3065);r.exports=o})()}}),Dp=de({"src/lib/str2rgbarray.js"(e,r){"use strict";var{normalize:t}=ta();function i(a){return a?t(a):[0,0,0,1]}r.exports=i}}),Lp=de({"src/lib/gl_format_color.js"(e,r){"use strict";var t=da(),i=ks(),a=ta(),o=Jo().defaultLine,s=Do().isArrayOrTypedArray,l=a.normalize(o),n=1;function u(p,g){return[p[0],p[1],p[2],p[3]*g]}function c(p){return t(p)||!a.isChannelArray(p)&&!a.isValid(p)?l:a.normalize(p)}function f(p){return t(p)?p:n}function h(p,g,m){var y=p.color;y&&y._inputArray&&(y=y._inputArray);var _=s(y),v=s(g),x=i.extractOpts(p),S=[],M,C,w,k,A;if(x.colorscale!==void 0?M=i.makeColorScaleFuncFromTrace(p):M=c,_?C=(E,T)=>E[T]===void 0?l:x.colorscale===void 0?M(E[T]):a.normalize(M(E[T])):C=c,v?w=function(E,T){return E[T]===void 0?n:f(E[T])}:w=f,_||v)for(var b=0;b<m;b++)k=C(y,b),A=w(g,b),S[b]=u(k,A);else S=u(c(y),g);return S}function d(p){var g=i.extractOpts(p),m=g.colorscale;return g.reversescale&&(m=i.flipScale(g.colorscale)),m.map(function(y){return{index:y[0],rgb:a.rgbaArray(y[1])}})}r.exports={formatColor:h,parseColorScale:d}}}),YD=de({"src/constants/gl3d_dashes.js"(e,r){"use strict";r.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}}}),v4=de({"src/constants/gl3d_markers.js"(e,r){"use strict";r.exports={circle:"\u25CF","circle-open":"\u25CB",square:"\u25A0","square-open":"\u25A1",diamond:"\u25C6","diamond-open":"\u25C7",cross:"+",x:"\u274C"}}}),eY=de({"src/traces/scatter3d/calc_errors.js"(e,r){"use strict";var t=Ma();function i(s,l,n,u){if(!l||!l.visible)return null;for(var c=t.getComponentMethod("errorbars","makeComputeError")(l),f=new Array(s.length),h=0;h<s.length;h++){var d=c(+s[h],h);if(u.type==="log"){var p=u.c2l(s[h]),g=s[h]-d[0],m=s[h]+d[1];if(f[h]=[(u.c2l(g,!0)-p)*n,(u.c2l(m,!0)-p)*n],g>0){var y=u.c2l(g);u._lowerLogErrorBound||(u._lowerLogErrorBound=y),u._lowerErrorBound=Math.min(u._lowerLogErrorBound,y)}}else f[h]=[-d[0]*n,d[1]*n]}return f}function a(s){for(var l=0;l<s.length;l++)if(s[l])return s[l].length;return 0}function o(s,l,n){var u=[i(s.x,s.error_x,l[0],n.xaxis),i(s.y,s.error_y,l[1],n.yaxis),i(s.z,s.error_z,l[2],n.zaxis)],c=a(u);if(c===0)return null;for(var f=new Array(c),h=0;h<c;h++){for(var d=[[0,0,0],[0,0,0]],p=0;p<3;p++)if(u[p])for(var g=0;g<2;g++)d[g][p]=u[p][h][g];f[h]=d}return f}r.exports=o}}),tY=de({"src/traces/scatter3d/convert.js"(e,r){"use strict";var t=ku().gl_line3d,i=ku().gl_scatter3d,a=ku().gl_error3d,o=ku().gl_mesh3d,s=ku().delaunay_triangulate,l=Qt(),n=Dp(),u=Lp().formatColor,c=Sy(),f=YD(),h=v4(),d=nn(),p=sf().appendArrayPointValue,g=eY();function m(F,D){this.scene=F,this.uid=D,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode="",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var y=m.prototype;y.handlePick=function(F){if(F.object&&(F.object===this.linePlot||F.object===this.delaunayMesh||F.object===this.textMarkers||F.object===this.scatterPlot)){var D=F.index=F.data.index;return F.object.highlight&&F.object.highlight(null),this.scatterPlot&&(F.object=this.scatterPlot,this.scatterPlot.highlight(F.data)),F.textLabel="",this.textLabels&&(l.isArrayOrTypedArray(this.textLabels)?(this.textLabels[D]||this.textLabels[D]===0)&&(F.textLabel=this.textLabels[D]):F.textLabel=this.textLabels),F.traceCoordinate=[this.data.x[D],this.data.y[D],this.data.z[D]],!0}};function _(F,D,R){var P=(R+1)%3,z=(R+2)%3,I=[],L=[],B;for(B=0;B<F.length;++B){var O=F[B];isNaN(O[P])||!isFinite(O[P])||isNaN(O[z])||!isFinite(O[z])||(I.push([O[P],O[z]]),L.push(B))}var G=s(I);for(B=0;B<G.length;++B)for(var W=G[B],X=0;X<W.length;++X)W[X]=L[W[X]];return{positions:F,cells:G,meshColor:D}}function v(F){for(var D=[0,0,0],R=[[0,0,0],[0,0,0],[0,0,0]],P=[1,1,1],z=0;z<3;z++){var I=F[z];I&&I.copy_zstyle!==!1&&F[2].visible!==!1&&(I=F[2]),!(!I||!I.visible)&&(D[z]=I.width/2,R[z]=n(I.color),P[z]=I.thickness)}return{capSize:D,color:R,lineWidth:P}}function x(F){return F==null?0:F.indexOf("left")>-1?-1:F.indexOf("right")>-1?1:0}function S(F){return F==null?0:F.indexOf("top")>-1?-1:F.indexOf("bottom")>-1?1:0}function M(F){var D=0,R=0,P=[D,R];if(Array.isArray(F))for(var z=0;z<F.length;z++)P[z]=[D,R],F[z]&&(P[z][0]=x(F[z]),P[z][1]=S(F[z]));else P[0]=x(F),P[1]=S(F);return P}function C(F,D){return D(F*4)}function w(F){return h[F]}function k(F,D,R,P,z){var I=null;if(l.isArrayOrTypedArray(F)){I=[];for(var L=0;L<D;L++)F[L]===void 0?I[L]=P:I[L]=R(F[L],z)}else I=R(F,l.identity);return I}function A(F,D){var R=[],P=F.fullSceneLayout,z=F.dataScale,I=P.xaxis,L=P.yaxis,B=P.zaxis,O=D.marker,G=D.line,W=D.x||[],X=D.y||[],Z=D.z||[],J=W.length,N=D.xcalendar,H=D.ycalendar,$=D.zcalendar,U,V,j,q,Y,K;for(Y=0;Y<J;Y++)U=I.d2l(W[Y],0,N)*z[0],V=L.d2l(X[Y],0,H)*z[1],j=B.d2l(Z[Y],0,$)*z[2],R[Y]=[U,V,j];if(Array.isArray(D.text))K=D.text;else if(l.isTypedArray(D.text))K=Array.from(D.text);else if(D.text!==void 0)for(K=new Array(J),Y=0;Y<J;Y++)K[Y]=D.text;function te(ge,Me){var Te=P[ge];return d.tickText(Te,Te.d2l(Me),!0).text}var ne=D.texttemplate;if(ne){var se=F.fullLayout,le=se._d3locale,ce=Array.isArray(ne),pe=ce?Math.min(ne.length,J):J,xe=ce?function(ge){return ne[ge]}:function(){return ne};for(K=new Array(pe),Y=0;Y<pe;Y++){var ye={x:W[Y],y:X[Y],z:Z[Y]},fe={xLabel:te("xaxis",W[Y]),yLabel:te("yaxis",X[Y]),zLabel:te("zaxis",Z[Y])},ae={};p(ae,D,Y),K[Y]=l.texttemplateString({data:[ae,ye,D._meta],fallback:D.texttemplatefallback,labels:fe,locale:le,template:xe(Y)})}}if(q={position:R,mode:D.mode,text:K},"line"in D&&(q.lineColor=u(G,1,J),q.lineWidth=G.width,q.lineDashes=G.dash),"marker"in D){var ee=c(D);q.scatterColor=u(O,1,J),q.scatterSize=k(O.size,J,C,20,ee),q.scatterMarker=k(O.symbol,J,w,"\u25CF"),q.scatterLineWidth=O.line.width,q.scatterLineColor=u(O.line,1,J),q.scatterAngle=0}"textposition"in D&&(q.textOffset=M(D.textposition),q.textColor=u(D.textfont,1,J),q.textSize=k(D.textfont.size,J,l.identity,12),q.textFontFamily=D.textfont.family,q.textFontWeight=D.textfont.weight,q.textFontStyle=D.textfont.style,q.textFontVariant=D.textfont.variant,q.textAngle=0);var ie=["x","y","z"];for(q.project=[!1,!1,!1],q.projectScale=[1,1,1],q.projectOpacity=[1,1,1],Y=0;Y<3;++Y){var Q=D.projection[ie[Y]];(q.project[Y]=Q.show)&&(q.projectOpacity[Y]=Q.opacity,q.projectScale[Y]=Q.scale)}q.errorBounds=g(D,z,P);var ue=v([D.error_x,D.error_y,D.error_z]);return q.errorColor=ue.color,q.errorLineWidth=ue.lineWidth,q.errorCapSize=ue.capSize,q.delaunayAxis=D.surfaceaxis,q.delaunayColor=n(D.surfacecolor),q}function b(F){if(l.isArrayOrTypedArray(F)){var D=F[0];return l.isArrayOrTypedArray(D)&&(F=D),"rgb("+F.slice(0,3).map(function(R){return Math.round(R*255)})+")"}return null}function E(F){return l.isArrayOrTypedArray(F)?F.length===4&&typeof F[0]=="number"?b(F):F.map(b):null}y.update=function(F){var D=this.scene.glplot.gl,R,P,z,I,L=f.solid;this.data=F;var B=A(this.scene,F);"mode"in B&&(this.mode=B.mode),"lineDashes"in B&&B.lineDashes in f&&(L=f[B.lineDashes]),this.color=E(B.scatterColor)||E(B.lineColor),this.dataPoints=B.position,R={gl:this.scene.glplot.gl,position:B.position,color:B.lineColor,lineWidth:B.lineWidth||1,dashes:L[0],dashScale:L[1],opacity:F.opacity,connectGaps:F.connectgaps},this.mode.indexOf("lines")!==-1?this.linePlot?this.linePlot.update(R):(this.linePlot=t(R),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var O=F.opacity;if(F.marker&&F.marker.opacity!==void 0&&(O*=F.marker.opacity),P={gl:this.scene.glplot.gl,position:B.position,color:B.scatterColor,size:B.scatterSize,glyph:B.scatterMarker,opacity:O,orthographic:!0,lineWidth:B.scatterLineWidth,lineColor:B.scatterLineColor,project:B.project,projectScale:B.projectScale,projectOpacity:B.projectOpacity},this.mode.indexOf("markers")!==-1?this.scatterPlot?this.scatterPlot.update(P):(this.scatterPlot=i(P),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),I={gl:this.scene.glplot.gl,position:B.position,glyph:B.text,color:B.textColor,size:B.textSize,angle:B.textAngle,alignment:B.textOffset,font:B.textFontFamily,fontWeight:B.textFontWeight,fontStyle:B.textFontStyle,fontVariant:B.textFontVariant,orthographic:!0,lineWidth:0,project:!1,opacity:F.opacity},this.textLabels=F.hovertext||F.text,this.mode.indexOf("text")!==-1?this.textMarkers?this.textMarkers.update(I):(this.textMarkers=i(I),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),z={gl:this.scene.glplot.gl,position:B.position,color:B.errorColor,error:B.errorBounds,lineWidth:B.errorLineWidth,capSize:B.errorCapSize,opacity:F.opacity},this.errorBars?B.errorBounds?this.errorBars.update(z):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):B.errorBounds&&(this.errorBars=a(z),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),B.delaunayAxis>=0){var G=_(B.position,B.delaunayColor,B.delaunayAxis);G.opacity=F.opacity,this.delaunayMesh?this.delaunayMesh.update(G):(G.gl=D,this.delaunayMesh=o(G),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},y.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())};function T(F,D){var R=new m(F,D.uid);return R.update(D),R}r.exports=T}}),XD=de({"src/traces/scatter3d/attributes.js"(e,r){"use strict";var t=tl(),i=us(),a=cs(),o=Ns().axisHoverFormat,{hovertemplateAttrs:s,texttemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=ri(),c=YD(),f=v4(),h=fn().extendFlat,d=Ps().overrideAll,p=(gv(),ti(c0)).default,g=t.line,m=t.marker,y=m.line,_=h({width:g.width,dash:{valType:"enumerated",values:p(c),dflt:"solid"}},a("line"));function v(S){return{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}}}var x=r.exports=d({x:t.x,y:t.y,z:{valType:"data_array"},text:h({},t.text,{}),texttemplate:l(),texttemplatefallback:n({editType:"calc"}),hovertext:h({},t.hovertext,{}),hovertemplate:s(),hovertemplatefallback:n(),xhoverformat:o("x"),yhoverformat:o("y"),zhoverformat:o("z"),mode:h({},t.mode,{dflt:"lines+markers"}),surfaceaxis:{valType:"enumerated",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:"color"},projection:{x:v("x"),y:v("y"),z:v("z")},connectgaps:t.connectgaps,line:_,marker:h({symbol:{valType:"enumerated",values:p(f),dflt:"circle",arrayOk:!0},size:h({},m.size,{dflt:8}),sizeref:m.sizeref,sizemin:m.sizemin,sizemode:m.sizemode,opacity:h({},m.opacity,{arrayOk:!1}),colorbar:m.colorbar,line:h({width:h({},y.width,{arrayOk:!1})},a("marker.line"))},a("marker")),textposition:h({},t.textposition,{dflt:"top center"}),textfont:i({noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0,editType:"calc",colorEditType:"style",arrayOk:!0,variantValues:["normal","small-caps"]}),opacity:u.opacity,hoverinfo:h({},u.hoverinfo)},"calc","nested");x.x.editType=x.y.editType=x.z.editType="calc+clearAxisTypes"}}),rY=de({"src/traces/scatter3d/defaults.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=bs(),o=Nh(),s=yd(),l=_d(),n=XD();r.exports=function(f,h,d,p){function g(C,w){return i.coerce(f,h,n,C,w)}var m=u(f,h,g,p);if(!m){h.visible=!1;return}g("text"),g("hovertext"),g("hovertemplate"),g("hovertemplatefallback"),g("xhoverformat"),g("yhoverformat"),g("zhoverformat"),g("mode"),a.hasMarkers(h)&&o(f,h,d,p,g,{noAngle:!0,noLineDash:!0,noSelect:!0}),a.hasLines(h)&&(g("connectgaps"),s(f,h,d,p,g)),a.hasText(h)&&(g("texttemplate"),g("texttemplatefallback"),l(f,h,p,g,{noSelect:!0,noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0}));var y=(h.line||{}).color,_=(h.marker||{}).color;g("surfaceaxis")>=0&&g("surfacecolor",y||_);for(var v=["x","y","z"],x=0;x<3;++x){var S="projection."+v[x];g(S+".show")&&(g(S+".opacity"),g(S+".scale"))}var M=t.getComponentMethod("errorbars","supplyDefaults");M(f,h,y||_||d,{axis:"z"}),M(f,h,y||_||d,{axis:"y",inherit:"z"}),M(f,h,y||_||d,{axis:"x",inherit:"z"})};function u(c,f,h,d){var p=0,g=h("x"),m=h("y"),y=h("z"),_=t.getComponentMethod("calendars","handleTraceDefaults");return _(c,f,["x","y","z"],d),g&&m&&y&&(p=Math.min(g.length,m.length,y.length),f._length=f._xlength=f._ylength=f._zlength=p),p}}}),iY=de({"src/traces/scatter3d/calc.js"(e,r){"use strict";var t=Qd(),i=jh();r.exports=function(o,s){var l=[{x:!1,y:!1,trace:s,t:{}}];return t(l,s),i(o,s),l}}}),aY=de({"node_modules/get-canvas-context/index.js"(e,r){r.exports=t;function t(i,a){if(typeof i!="string")throw new TypeError("must specify type string");if(a=a||{},typeof document>"u"&&!a.canvas)return null;var o=a.canvas||document.createElement("canvas");typeof a.width=="number"&&(o.width=a.width),typeof a.height=="number"&&(o.height=a.height);var s=a,l;try{var n=[i];i.indexOf("webgl")===0&&n.push("experimental-"+i);for(var u=0;u<n.length;u++)if(l=o.getContext(n[u],s),l)return l}catch{l=null}return l||null}}}),nY=de({"node_modules/webgl-context/index.js"(e,r){var t=aY();r.exports=function(a){return t("webgl",a)}}}),ZD=de({"src/lib/show_no_webgl_msg.js"(e,r){"use strict";var t=ta(),i=function(){};r.exports=function(o){for(var s in o)typeof o[s]=="function"&&(o[s]=i);o.destroy=function(){o.container.parentNode.removeChild(o.container)};var l=document.createElement("div");l.className="no-webgl",l.style.cursor="pointer",l.style.fontSize="24px",l.style.color=t.defaults[0],l.style.position="absolute",l.style.left=l.style.top="0px",l.style.width=l.style.height="100%",l.style["background-color"]=t.lightLine,l.style["z-index"]=30;var n=document.createElement("p");return n.textContent="WebGL is not supported by your browser - visit https://get.webgl.org for more info",n.style.position="relative",n.style.top="50%",n.style.left="50%",n.style.height="30%",n.style.width="50%",n.style.margin="-15% 0 0 -25%",l.appendChild(n),o.container.appendChild(l),o.container.style.background="#FFFFFF",o.container.onclick=function(){window.open("https://get.webgl.org")},!1}}}),oY=de({"src/plots/gl3d/layout/convert.js"(e,r){"use strict";var t=Dp(),i=Qt(),a=["xaxis","yaxis","zaxis"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickFontWeight=["normal","normal","normal","normal"],this.tickFontStyle=["normal","normal","normal","normal"],this.tickFontVariant=["normal","normal","normal","normal"],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont=["Open Sans","Open Sans","Open Sans"],this.labelSize=[20,20,20],this.labelFontWeight=["normal","normal","normal","normal"],this.labelFontStyle=["normal","normal","normal","normal"],this.labelFontVariant=["normal","normal","normal","normal"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}var s=o.prototype;s.merge=function(n,u){for(var c=this,f=0;f<3;++f){var h=u[a[f]];if(!h.visible){c.tickEnable[f]=!1,c.labelEnable[f]=!1,c.lineEnable[f]=!1,c.lineTickEnable[f]=!1,c.gridEnable[f]=!1,c.zeroEnable[f]=!1,c.backgroundEnable[f]=!1;continue}c.labels[f]=n._meta?i.templateString(h.title.text,n._meta):h.title.text,"font"in h.title&&(h.title.font.color&&(c.labelColor[f]=t(h.title.font.color)),h.title.font.family&&(c.labelFont[f]=h.title.font.family),h.title.font.size&&(c.labelSize[f]=h.title.font.size),h.title.font.weight&&(c.labelFontWeight[f]=h.title.font.weight),h.title.font.style&&(c.labelFontStyle[f]=h.title.font.style),h.title.font.variant&&(c.labelFontVariant[f]=h.title.font.variant)),"showline"in h&&(c.lineEnable[f]=h.showline),"linecolor"in h&&(c.lineColor[f]=t(h.linecolor)),"linewidth"in h&&(c.lineWidth[f]=h.linewidth),"showgrid"in h&&(c.gridEnable[f]=h.showgrid),"gridcolor"in h&&(c.gridColor[f]=t(h.gridcolor)),"gridwidth"in h&&(c.gridWidth[f]=h.gridwidth),h.type==="log"?c.zeroEnable[f]=!1:"zeroline"in h&&(c.zeroEnable[f]=h.zeroline),"zerolinecolor"in h&&(c.zeroLineColor[f]=t(h.zerolinecolor)),"zerolinewidth"in h&&(c.zeroLineWidth[f]=h.zerolinewidth),"ticks"in h&&h.ticks?c.lineTickEnable[f]=!0:c.lineTickEnable[f]=!1,"ticklen"in h&&(c.lineTickLength[f]=c._defaultLineTickLength[f]=h.ticklen),"tickcolor"in h&&(c.lineTickColor[f]=t(h.tickcolor)),"tickwidth"in h&&(c.lineTickWidth[f]=h.tickwidth),"tickangle"in h&&(c.tickAngle[f]=h.tickangle==="auto"?-3600:Math.PI*-h.tickangle/180),"showticklabels"in h&&(c.tickEnable[f]=h.showticklabels),"tickfont"in h&&(h.tickfont.color&&(c.tickColor[f]=t(h.tickfont.color)),h.tickfont.family&&(c.tickFont[f]=h.tickfont.family),h.tickfont.size&&(c.tickSize[f]=h.tickfont.size),h.tickfont.weight&&(c.tickFontWeight[f]=h.tickfont.weight),h.tickfont.style&&(c.tickFontStyle[f]=h.tickfont.style),h.tickfont.variant&&(c.tickFontVariant[f]=h.tickfont.variant)),"mirror"in h?["ticks","all","allticks"].indexOf(h.mirror)!==-1?(c.lineTickMirror[f]=!0,c.lineMirror[f]=!0):h.mirror===!0?(c.lineTickMirror[f]=!1,c.lineMirror[f]=!0):(c.lineTickMirror[f]=!1,c.lineMirror[f]=!1):c.lineMirror[f]=!1,"showbackground"in h&&h.showbackground!==!1?(c.backgroundEnable[f]=!0,c.backgroundColor[f]=t(h.backgroundcolor)):c.backgroundEnable[f]=!1}};function l(n,u){var c=new o;return c.merge(n,u),c}r.exports=l}}),sY=de({"src/plots/gl3d/layout/spikes.js"(e,r){"use strict";var t=Dp(),i=["xaxis","yaxis","zaxis"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}var o=a.prototype;o.merge=function(l){for(var n=0;n<3;++n){var u=l[i[n]];if(!u.visible){this.enabled[n]=!1,this.drawSides[n]=!1;continue}this.enabled[n]=u.showspikes,this.colors[n]=t(u.spikecolor),this.drawSides[n]=u.spikesides,this.lineWidth[n]=u.spikethickness}};function s(l){var n=new a;return n.merge(l),n}r.exports=s}}),lY=de({"src/plots/gl3d/layout/tick_marks.js"(e,r){"use strict";r.exports=l;var t=nn(),i=Qt(),a=["xaxis","yaxis","zaxis"],o=[0,0,0];function s(n){for(var u=new Array(3),c=0;c<3;++c){for(var f=n[c],h=new Array(f.length),d=0;d<f.length;++d)h[d]=f[d].x;u[c]=h}return u}function l(n){for(var u=n.axesOptions,c=n.glplot.axesPixels,f=n.fullSceneLayout,h=[[],[],[]],d=0;d<3;++d){var p=f[a[d]];if(p._length=(c[d].hi-c[d].lo)*c[d].pixelsPerDataUnit/n.dataScale[d],Math.abs(p._length)===1/0||isNaN(p._length))h[d]=[];else{p._input_range=p.range.slice(),p.range[0]=c[d].lo/n.dataScale[d],p.range[1]=c[d].hi/n.dataScale[d],p._m=1/(n.dataScale[d]*c[d].pixelsPerDataUnit),p.range[0]===p.range[1]&&(p.range[0]-=1,p.range[1]+=1);var g=p.tickmode;if(p.tickmode==="auto"){p.tickmode="linear";var m=p.nticks||i.constrain(p._length/40,4,9);t.autoTicks(p,Math.abs(p.range[1]-p.range[0])/m)}for(var y=t.calcTicks(p,{msUTC:!0}),_=0;_<y.length;++_)y[_].x=y[_].x*n.dataScale[d],p.type==="date"&&(y[_].text=y[_].text.replace(/\<br\>/g," "));h[d]=y,p.tickmode=g}}u.ticks=h;for(var d=0;d<3;++d){o[d]=.5*(n.glplot.bounds[0][d]+n.glplot.bounds[1][d]);for(var _=0;_<2;++_)u.bounds[_][d]=n.glplot.bounds[_][d]}n.contourLevels=s(h)}}}),uY=de({"src/plots/gl3d/scene.js"(e,r){"use strict";var t=ku().gl_plot3d,i=t.createCamera,a=t.createScene,o=nY(),s=Mw(),l=Ma(),n=Qt(),u=n.preserveDrawingBuffer(),c=nn(),f=$s(),h=Dp(),d=ZD(),p=lk(),g=oY(),m=sY(),y=lY(),_=vd().applyAutorangeOptions,v,x,S=!1;function M(R,P){var z=document.createElement("div"),I=R.container;this.graphDiv=R.graphDiv;var L=document.createElementNS("http://www.w3.org/2000/svg","svg");L.style.position="absolute",L.style.top=L.style.left="0px",L.style.width=L.style.height="100%",L.style["z-index"]=20,L.style["pointer-events"]="none",z.appendChild(L),this.svgContainer=L,z.id=R.id,z.style.position="absolute",z.style.top=z.style.left="0px",z.style.width=z.style.height="100%",I.appendChild(z),this.fullLayout=P,this.id=R.id||"scene",this.fullSceneLayout=P[this.id],this.plotArgs=[[],{},{}],this.axesOptions=g(P,P[this.id]),this.spikeOptions=m(P[this.id]),this.container=z,this.staticMode=!!R.staticPlot,this.pixelRatio=this.pixelRatio||R.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=l.getComponentMethod("annotations3d","convert"),this.drawAnnotations=l.getComponentMethod("annotations3d","draw"),this.initializeGLPlot()}var C=M.prototype;C.prepareOptions=function(){var R=this,P={canvas:R.canvas,gl:R.gl,glOptions:{preserveDrawingBuffer:u,premultipliedAlpha:!0,antialias:!0},container:R.container,axes:R.axesOptions,spikes:R.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:R.camera,pixelRatio:R.pixelRatio};if(R.staticMode){if(!x&&(v=document.createElement("canvas"),x=o({canvas:v,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}),!x))throw new Error("error creating static canvas/context for image server");P.gl=x,P.canvas=v}return P};var w=!0;C.tryCreatePlot=function(){var R=this,P=R.prepareOptions(),z=!0;try{R.glplot=a(P)}catch{if(R.staticMode||!w||u)z=!1;else{n.warn(["webgl setup failed possibly due to","false preserveDrawingBuffer config.","The mobile/tablet device may not be detected by is-mobile module.","Enabling preserveDrawingBuffer in second attempt to create webgl scene..."].join(" "));try{u=P.glOptions.preserveDrawingBuffer=!0,R.glplot=a(P)}catch{u=P.glOptions.preserveDrawingBuffer=!1,z=!1}}}return w=!1,z},C.initializeGLCamera=function(){var R=this,P=R.fullSceneLayout.camera,z=P.projection.type==="orthographic";R.camera=i(R.container,{center:[P.center.x,P.center.y,P.center.z],eye:[P.eye.x,P.eye.y,P.eye.z],up:[P.up.x,P.up.y,P.up.z],_ortho:z,zoomMin:.01,zoomMax:100,mode:"orbit"})},C.initializeGLPlot=function(){var R=this;R.initializeGLCamera();var P=R.tryCreatePlot();if(!P)return d(R);R.traces={},R.make4thDimension();var z=R.graphDiv,I=z.layout,L=function(){var O={};return R.isCameraChanged(I)&&(O[R.id+".camera"]=R.getCamera()),R.isAspectChanged(I)&&(O[R.id+".aspectratio"]=R.glplot.getAspectratio(),I[R.id].aspectmode!=="manual"&&(R.fullSceneLayout.aspectmode=I[R.id].aspectmode=O[R.id+".aspectmode"]="manual")),O},B=function(O){if(O.fullSceneLayout.dragmode!==!1){var G=L();O.saveLayout(I),O.graphDiv.emit("plotly_relayout",G)}};return R.glplot.canvas&&(R.glplot.canvas.addEventListener("mouseup",function(){B(R)}),R.glplot.canvas.addEventListener("touchstart",function(){S=!0}),R.glplot.canvas.addEventListener("wheel",function(O){if(z._context._scrollZoom.gl3d){if(R.camera._ortho){var G=O.deltaX>O.deltaY?1.1:.9090909090909091,W=R.glplot.getAspectratio();R.glplot.setAspectratio({x:G*W.x,y:G*W.y,z:G*W.z})}B(R)}},s?{passive:!1}:!1),R.glplot.canvas.addEventListener("mousemove",function(){if(R.fullSceneLayout.dragmode!==!1&&R.camera.mouseListener.buttons!==0){var O=L();R.graphDiv.emit("plotly_relayouting",O)}}),R.staticMode||R.glplot.canvas.addEventListener("webglcontextlost",function(O){z&&z.emit&&z.emit("plotly_webglcontextlost",{event:O,layer:R.id})},!1)),R.glplot.oncontextloss=function(){R.recoverContext()},R.glplot.onrender=function(){R.render()},!0},C.render=function(){var R=this,P=R.graphDiv,z,I=R.svgContainer,L=R.container.getBoundingClientRect();P._fullLayout._calcInverseTransform(P);var B=P._fullLayout._invScaleX,O=P._fullLayout._invScaleY,G=L.width*B,W=L.height*O;I.setAttributeNS(null,"viewBox","0 0 "+G+" "+W),I.setAttributeNS(null,"width",G),I.setAttributeNS(null,"height",W),y(R),R.glplot.axes.update(R.axesOptions);for(var X=Object.keys(R.traces),Z=null,J=R.glplot.selection,N=0;N<X.length;++N)z=R.traces[X[N]],z.data.hoverinfo!=="skip"&&z.handlePick(J)&&(Z=z),z.setContourLevels&&z.setContourLevels();function H(pe,xe,ye){var fe=R.fullSceneLayout[pe+"axis"];return fe.type!=="log"&&(xe=fe.d2l(xe)),c.hoverLabelText(fe,xe,ye)}if(Z!==null){var $=p(R.glplot.cameraParams,J.dataCoordinate);z=Z.data;var U=P._fullData[z.index],V=J.index,j={xLabel:H("x",J.traceCoordinate[0],z.xhoverformat),yLabel:H("y",J.traceCoordinate[1],z.yhoverformat),zLabel:H("z",J.traceCoordinate[2],z.zhoverformat)},q=f.castHoverinfo(U,R.fullLayout,V),Y=(q||"").split("+"),K=q&&q==="all";!U.hovertemplate&&!K&&(Y.indexOf("x")===-1&&(j.xLabel=void 0),Y.indexOf("y")===-1&&(j.yLabel=void 0),Y.indexOf("z")===-1&&(j.zLabel=void 0),Y.indexOf("text")===-1&&(J.textLabel=void 0),Y.indexOf("name")===-1&&(Z.name=void 0));var te,ne=[];z.type==="cone"||z.type==="streamtube"?(j.uLabel=H("x",J.traceCoordinate[3],z.uhoverformat),(K||Y.indexOf("u")!==-1)&&ne.push("u: "+j.uLabel),j.vLabel=H("y",J.traceCoordinate[4],z.vhoverformat),(K||Y.indexOf("v")!==-1)&&ne.push("v: "+j.vLabel),j.wLabel=H("z",J.traceCoordinate[5],z.whoverformat),(K||Y.indexOf("w")!==-1)&&ne.push("w: "+j.wLabel),j.normLabel=J.traceCoordinate[6].toPrecision(3),(K||Y.indexOf("norm")!==-1)&&ne.push("norm: "+j.normLabel),z.type==="streamtube"&&(j.divergenceLabel=J.traceCoordinate[7].toPrecision(3),(K||Y.indexOf("divergence")!==-1)&&ne.push("divergence: "+j.divergenceLabel)),J.textLabel&&ne.push(J.textLabel),te=ne.join("<br>")):z.type==="isosurface"||z.type==="volume"?(j.valueLabel=c.hoverLabelText(R._mockAxis,R._mockAxis.d2l(J.traceCoordinate[3]),z.valuehoverformat),ne.push("value: "+j.valueLabel),J.textLabel&&ne.push(J.textLabel),te=ne.join("<br>")):te=J.textLabel;var se={x:J.traceCoordinate[0],y:J.traceCoordinate[1],z:J.traceCoordinate[2],data:U._input,fullData:U,curveNumber:U.index,pointNumber:V};f.appendArrayPointValue(se,U,V),z._module.eventData&&(se=U._module.eventData(se,J,U,{},V));var le={points:[se]};if(R.fullSceneLayout.hovermode){var ce=[];f.loneHover({trace:U,x:(.5+.5*$[0]/$[3])*G,y:(.5-.5*$[1]/$[3])*W,xLabel:j.xLabel,yLabel:j.yLabel,zLabel:j.zLabel,text:te,name:Z.name,color:f.castHoverOption(U,V,"bgcolor")||Z.color,borderColor:f.castHoverOption(U,V,"bordercolor"),fontFamily:f.castHoverOption(U,V,"font.family"),fontSize:f.castHoverOption(U,V,"font.size"),fontColor:f.castHoverOption(U,V,"font.color"),nameLength:f.castHoverOption(U,V,"namelength"),textAlign:f.castHoverOption(U,V,"align"),hovertemplate:n.castOption(U,V,"hovertemplate"),hovertemplateLabels:n.extendFlat({},se,j),eventData:[se]},{container:I,gd:P,inOut_bbox:ce}),se.bbox=ce[0]}J.distance<5&&(J.buttons||S)?P.emit("plotly_click",le):P.emit("plotly_hover",le),this.oldEventData=le}else f.loneUnhover(I),this.oldEventData&&P.emit("plotly_unhover",this.oldEventData),this.oldEventData=void 0;R.drawAnnotations(R)},C.recoverContext=function(){var R=this;R.glplot.dispose();var P=function(){if(R.glplot.gl.isContextLost()){requestAnimationFrame(P);return}if(!R.initializeGLPlot()){n.error("Catastrophic and unrecoverable WebGL error. Context lost.");return}R.plot.apply(R,R.plotArgs)};requestAnimationFrame(P)};var k=["xaxis","yaxis","zaxis"];function A(R,P,z){for(var I=R.fullSceneLayout,L=0;L<3;L++){var B=k[L],O=B.charAt(0),G=I[B],W=P[O],X=P[O+"calendar"],Z=P["_"+O+"length"];if(!n.isArrayOrTypedArray(W))z[0][L]=Math.min(z[0][L],0),z[1][L]=Math.max(z[1][L],Z-1);else for(var J,N=0;N<(Z||W.length);N++)if(n.isArrayOrTypedArray(W[N]))for(var H=0;H<W[N].length;++H)J=G.d2l(W[N][H],0,X),!isNaN(J)&&isFinite(J)&&(z[0][L]=Math.min(z[0][L],J),z[1][L]=Math.max(z[1][L],J));else J=G.d2l(W[N],0,X),!isNaN(J)&&isFinite(J)&&(z[0][L]=Math.min(z[0][L],J),z[1][L]=Math.max(z[1][L],J))}}function b(R,P){for(var z=R.fullSceneLayout,I=z.annotations||[],L=0;L<3;L++)for(var B=k[L],O=B.charAt(0),G=z[B],W=0;W<I.length;W++){var X=I[W];if(X.visible){var Z=G.r2l(X[O]);!isNaN(Z)&&isFinite(Z)&&(P[0][L]=Math.min(P[0][L],Z),P[1][L]=Math.max(P[1][L],Z))}}}C.plot=function(R,P,z){var I=this;if(I.plotArgs=[R,P,z],!I.glplot.contextLost){var L,B,O,G,W,X,Z=P[I.id],J=z[I.id];I.fullLayout=P,I.fullSceneLayout=Z,I.axesOptions.merge(P,Z),I.spikeOptions.merge(Z),I.setViewport(Z),I.updateFx(Z.dragmode,Z.hovermode),I.camera.enableWheel=I.graphDiv._context._scrollZoom.gl3d,I.glplot.setClearColor(h(Z.bgcolor)),I.setConvert(W),R?Array.isArray(R)||(R=[R]):R=[];var N=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(O=0;O<R.length;++O)L=R[O],!(L.visible!==!0||L._length===0)&&A(this,L,N);b(this,N);var H=[1,1,1];for(G=0;G<3;++G)N[1][G]===N[0][G]?H[G]=1:H[G]=1/(N[1][G]-N[0][G]);for(I.dataScale=H,I.convertAnnotations(this),O=0;O<R.length;++O)L=R[O],!(L.visible!==!0||L._length===0)&&(B=I.traces[L.uid],B?B.data.type===L.type?B.update(L):(B.dispose(),B=L._module.plot(this,L),I.traces[L.uid]=B):(B=L._module.plot(this,L),I.traces[L.uid]=B),B.name=L.name);var $=Object.keys(I.traces);e:for(O=0;O<$.length;++O){for(G=0;G<R.length;++G)if(R[G].uid===$[O]&&R[G].visible===!0&&R[G]._length!==0)continue e;B=I.traces[$[O]],B.dispose(),delete I.traces[$[O]]}I.glplot.objects.sort(function(Te,je){return Te._trace.data.index-je._trace.data.index});var U=[[0,0,0],[0,0,0]],V=[],j={};for(O=0;O<3;++O){W=Z[k[O]],X=W.type,X in j?(j[X].acc*=H[O],j[X].count+=1):j[X]={acc:H[O],count:1};var q;if(W.autorange){U[0][O]=1/0,U[1][O]=-1/0;var Y=I.glplot.objects,K=I.fullSceneLayout.annotations||[],te=W._name.charAt(0);for(G=0;G<Y.length;G++){var ne=Y[G],se=ne.bounds,le=ne._trace.data._pad||0;ne.constructor.name==="ErrorBars"&&W._lowerLogErrorBound?U[0][O]=Math.min(U[0][O],W._lowerLogErrorBound):U[0][O]=Math.min(U[0][O],se[0][O]/H[O]-le),U[1][O]=Math.max(U[1][O],se[1][O]/H[O]+le)}for(G=0;G<K.length;G++){var ce=K[G];if(ce.visible){var pe=W.r2l(ce[te]);U[0][O]=Math.min(U[0][O],pe),U[1][O]=Math.max(U[1][O],pe)}}if("rangemode"in W&&W.rangemode==="tozero"&&(U[0][O]=Math.min(U[0][O],0),U[1][O]=Math.max(U[1][O],0)),U[0][O]>U[1][O])U[0][O]=-1,U[1][O]=1;else{var xe=U[1][O]-U[0][O];U[0][O]-=xe/32,U[1][O]+=xe/32}if(q=[U[0][O],U[1][O]],q=_(q,W),U[0][O]=q[0],U[1][O]=q[1],W.isReversed()){var ye=U[0][O];U[0][O]=U[1][O],U[1][O]=ye}}else q=W.range,U[0][O]=W.r2l(q[0]),U[1][O]=W.r2l(q[1]);U[0][O]===U[1][O]&&(U[0][O]-=1,U[1][O]+=1),V[O]=U[1][O]-U[0][O],W.range=[U[0][O],U[1][O]],W.limitRange(),I.glplot.setBounds(O,{min:W.range[0]*H[O],max:W.range[1]*H[O]})}var fe,ae=Z.aspectmode;if(ae==="cube")fe=[1,1,1];else if(ae==="manual"){var ee=Z.aspectratio;fe=[ee.x,ee.y,ee.z]}else if(ae==="auto"||ae==="data"){var ie=[1,1,1];for(O=0;O<3;++O){W=Z[k[O]],X=W.type;var Q=j[X];ie[O]=Math.pow(Q.acc,1/Q.count)/H[O]}ae==="data"||Math.max.apply(null,ie)/Math.min.apply(null,ie)<=4?fe=ie:fe=[1,1,1]}else throw new Error("scene.js aspectRatio was not one of the enumerated types");Z.aspectratio.x=J.aspectratio.x=fe[0],Z.aspectratio.y=J.aspectratio.y=fe[1],Z.aspectratio.z=J.aspectratio.z=fe[2],I.glplot.setAspectratio(Z.aspectratio),I.viewInitial.aspectratio||(I.viewInitial.aspectratio={x:Z.aspectratio.x,y:Z.aspectratio.y,z:Z.aspectratio.z}),I.viewInitial.aspectmode||(I.viewInitial.aspectmode=Z.aspectmode);var ue=Z.domain||null,ge=P._size||null;if(ue&&ge){var Me=I.container.style;Me.position="absolute",Me.left=ge.l+ue.x[0]*ge.w+"px",Me.top=ge.t+(1-ue.y[1])*ge.h+"px",Me.width=ge.w*(ue.x[1]-ue.x[0])+"px",Me.height=ge.h*(ue.y[1]-ue.y[0])+"px"}I.glplot.redraw()}},C.destroy=function(){var R=this;R.glplot&&(R.camera.mouseListener.enabled=!1,R.container.removeEventListener("wheel",R.camera.wheelListener),R.camera=null,R.glplot.dispose(),R.container.parentNode.removeChild(R.container),R.glplot=null)};function E(R){return[[R.eye.x,R.eye.y,R.eye.z],[R.center.x,R.center.y,R.center.z],[R.up.x,R.up.y,R.up.z]]}function T(R){return{up:{x:R.up[0],y:R.up[1],z:R.up[2]},center:{x:R.center[0],y:R.center[1],z:R.center[2]},eye:{x:R.eye[0],y:R.eye[1],z:R.eye[2]},projection:{type:R._ortho===!0?"orthographic":"perspective"}}}C.getCamera=function(){var R=this;return R.camera.view.recalcMatrix(R.camera.view.lastT()),T(R.camera)},C.setViewport=function(R){var P=this,z=R.camera;P.camera.lookAt.apply(this,E(z)),P.glplot.setAspectratio(R.aspectratio);var I=z.projection.type==="orthographic",L=P.camera._ortho;I!==L&&(P.glplot.redraw(),P.glplot.clearRGBA(),P.glplot.dispose(),P.initializeGLPlot())},C.isCameraChanged=function(R){var P=this,z=P.getCamera(),I=n.nestedProperty(R,P.id+".camera"),L=I.get();function B(X,Z,J,N){var H=["up","center","eye"],$=["x","y","z"];return Z[H[J]]&&X[H[J]][$[N]]===Z[H[J]][$[N]]}var O=!1;if(L===void 0)O=!0;else{for(var G=0;G<3;G++)for(var W=0;W<3;W++)if(!B(z,L,G,W)){O=!0;break}(!L.projection||z.projection&&z.projection.type!==L.projection.type)&&(O=!0)}return O},C.isAspectChanged=function(R){var P=this,z=P.glplot.getAspectratio(),I=n.nestedProperty(R,P.id+".aspectratio"),L=I.get();return L===void 0||L.x!==z.x||L.y!==z.y||L.z!==z.z},C.saveLayout=function(R){var P=this,z=P.fullLayout,I,L,B,O,G,W,X=P.isCameraChanged(R),Z=P.isAspectChanged(R),J=X||Z;if(J){var N={};if(X&&(I=P.getCamera(),L=n.nestedProperty(R,P.id+".camera"),B=L.get(),N[P.id+".camera"]=B),Z&&(O=P.glplot.getAspectratio(),G=n.nestedProperty(R,P.id+".aspectratio"),W=G.get(),N[P.id+".aspectratio"]=W),l.call("_storeDirectGUIEdit",R,z._preGUI,N),X){L.set(I);var H=n.nestedProperty(z,P.id+".camera");H.set(I)}if(Z){G.set(O);var $=n.nestedProperty(z,P.id+".aspectratio");$.set(O),P.glplot.redraw()}}return J},C.updateFx=function(R,P){var z=this,I=z.camera;if(I)if(R==="orbit")I.mode="orbit",I.keyBindingMode="rotate";else if(R==="turntable"){I.up=[0,0,1],I.mode="turntable",I.keyBindingMode="rotate";var L=z.graphDiv,B=L._fullLayout,O=z.fullSceneLayout.camera,G=O.up.x,W=O.up.y,X=O.up.z;if(X/Math.sqrt(G*G+W*W+X*X)<.999){var Z=z.id+".camera.up",J={x:0,y:0,z:1},N={};N[Z]=J;var H=L.layout;l.call("_storeDirectGUIEdit",H,B._preGUI,N),O.up=J,n.nestedProperty(H,Z).set(J)}}else I.keyBindingMode=R;z.fullSceneLayout.hovermode=P};function F(R,P,z){for(var I=0,L=z-1;I<L;++I,--L)for(var B=0;B<P;++B)for(var O=0;O<4;++O){var G=4*(P*I+B)+O,W=4*(P*L+B)+O,X=R[G];R[G]=R[W],R[W]=X}}function D(R,P,z){for(var I=0;I<z;++I)for(var L=0;L<P;++L){var B=4*(P*I+L),O=R[B+3];if(O>0)for(var G=255/O,W=0;W<3;++W)R[B+W]=Math.min(G*R[B+W],255)}}C.toImage=function(R){var P=this;R||(R="png"),P.staticMode&&P.container.appendChild(v),P.glplot.redraw();var z=P.glplot.gl,I=z.drawingBufferWidth,L=z.drawingBufferHeight;z.bindFramebuffer(z.FRAMEBUFFER,null);var B=new Uint8Array(I*L*4);z.readPixels(0,0,I,L,z.RGBA,z.UNSIGNED_BYTE,B),F(B,I,L),D(B,I,L);var O=document.createElement("canvas");O.width=I,O.height=L;var G=O.getContext("2d",{willReadFrequently:!0}),W=G.createImageData(I,L);W.data.set(B),G.putImageData(W,0,0);var X;switch(R){case"jpeg":X=O.toDataURL("image/jpeg");break;case"webp":X=O.toDataURL("image/webp");break;default:X=O.toDataURL("image/png")}return P.staticMode&&P.container.removeChild(v),X},C.setConvert=function(){for(var R=this,P=0;P<3;P++){var z=R.fullSceneLayout[k[P]];c.setConvert(z,R.fullLayout),z.setScale=n.noop}},C.make4thDimension=function(){var R=this,P=R.graphDiv,z=P._fullLayout;R._mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},c.setConvert(R._mockAxis,z)},r.exports=M}}),cY=de({"src/plots/gl3d/layout/attributes.js"(e,r){"use strict";r.exports={scene:{valType:"subplotid",dflt:"scene",editType:"calc+clearAxisTypes"}}}}),KD=de({"src/plots/gl3d/layout/axis_attributes.js"(e,r){"use strict";var t=ta(),i=Mu(),a=fn().extendFlat,o=Ps().overrideAll;r.exports=o({visible:i.visible,showspikes:{valType:"boolean",dflt:!0},spikesides:{valType:"boolean",dflt:!0},spikethickness:{valType:"number",min:0,dflt:2},spikecolor:{valType:"color",dflt:t.defaultLine},showbackground:{valType:"boolean",dflt:!1},backgroundcolor:{valType:"color",dflt:"rgba(204, 204, 204, 0.5)"},showaxeslabels:{valType:"boolean",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:{text:i.title.text,font:i.title.font},type:a({},i.type,{values:["-","linear","log","date","category"]}),autotypenumbers:i.autotypenumbers,autorange:i.autorange,autorangeoptions:{minallowed:i.autorangeoptions.minallowed,maxallowed:i.autorangeoptions.maxallowed,clipmin:i.autorangeoptions.clipmin,clipmax:i.autorangeoptions.clipmax,include:i.autorangeoptions.include,editType:"plot"},rangemode:i.rangemode,minallowed:i.minallowed,maxallowed:i.maxallowed,range:a({},i.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],anim:!1}),tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:"rgb(204, 204, 204)"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth},"plot","from-root")}}),JD=de({"src/plots/gl3d/layout/layout_attributes.js"(e,r){"use strict";var t=KD(),i=Is().attributes,a=fn().extendFlat,o=Qt().counterRegex;function s(l,n,u){return{x:{valType:"number",dflt:l,editType:"camera"},y:{valType:"number",dflt:n,editType:"camera"},z:{valType:"number",dflt:u,editType:"camera"},editType:"camera"}}r.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:"enumerated",values:["perspective","orthographic"],dflt:"perspective",editType:"calc"},editType:"calc"},editType:"camera"},domain:i({name:"scene",editType:"plot"}),aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:t,yaxis:t,zaxis:t,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"plot"}}}),fY=de({"src/plots/gl3d/layout/axis_defaults.js"(e,r){"use strict";var t=ta(),i=Qt(),a=Ro(),o=KD(),s=ok(),l=zy(),n=["xaxis","yaxis","zaxis"],u=13600/187;r.exports=function(f,h,d){var p,g;function m(v,x){return i.coerce(p,g,o,v,x)}for(var y=0;y<n.length;y++){var _=n[y];p=f[_]||{},g=a.newContainer(h,_),g._id=_[0]+d.scene,g._name=_,s(p,g,m,d),l(p,g,m,{font:d.font,letter:_[0],data:d.data,showGrid:!0,noAutotickangles:!0,noMinorloglabels:!0,noTicklabelindex:!0,noTickson:!0,noTicklabelmode:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,noTicklabelstep:!0,noTicklabelposition:!0,noTicklabeloverflow:!0,noInsiderange:!0,noUnifiedhovertitle:!0,bgColor:d.bgColor,calendar:d.calendar},d.fullLayout),m("gridcolor",t.mix(g.color,d.bgColor,u)),m("title.text",_[0]),g.setScale=i.noop,m("showspikes")&&(m("spikesides"),m("spikethickness"),m("spikecolor",g.color)),m("showaxeslabels"),m("showbackground")&&m("backgroundcolor")}}}}),hY=de({"src/plots/gl3d/layout/defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Ma(),o=Ev(),s=fY(),l=JD(),n=$u().getSubplotData,u="gl3d";r.exports=function(h,d,p){var g=d._basePlotModules.length>1;function m(y){if(!g){var _=t.validate(h[y],l[y]);if(_)return h[y]}}o(h,d,p,{type:u,attributes:l,handleDefaults:c,fullLayout:d,font:d.font,fullData:p,getDfltFromLayout:m,autotypenumbersDflt:d.autotypenumbers,paper_bgcolor:d.paper_bgcolor,calendar:d.calendar})};function c(f,h,d,p){for(var g=d("bgcolor"),m=i.combine(g,p.paper_bgcolor),y=["up","center","eye"],_=0;_<y.length;_++)d("camera."+y[_]+".x"),d("camera."+y[_]+".y"),d("camera."+y[_]+".z");d("camera.projection.type");var v=!!d("aspectratio.x")&&!!d("aspectratio.y")&&!!d("aspectratio.z"),x=v?"manual":"auto",S=d("aspectmode",x);v||(f.aspectratio=h.aspectratio={x:1,y:1,z:1},S==="manual"&&(h.aspectmode="auto"),f.aspectmode=h.aspectmode);var M=n(p.fullData,u,p.id);s(f,h,{font:p.font,scene:p.id,data:M,bgColor:m,calendar:p.calendar,autotypenumbersDflt:p.autotypenumbersDflt,fullLayout:p.fullLayout}),a.getComponentMethod("annotations3d","handleDefaults")(f,h,p);var C=p.getDfltFromLayout("dragmode");if(C!==!1&&!C)if(C="orbit",f.camera&&f.camera.up){var w=f.camera.up.x,k=f.camera.up.y,A=f.camera.up.z;A!==0&&(!w||!k||!A||A/Math.sqrt(w*w+k*k+A*A)>.999)&&(C="turntable")}else C="turntable";d("dragmode",C),d("hovermode",p.getDfltFromLayout("hovermode"))}}}),S0=de({"src/plots/gl3d/index.js"(e){"use strict";var r=Ps().overrideAll,t=La(),i=uY(),a=$u().getSubplotData,o=Qt(),s=Oh(),l="gl3d",n="scene";e.name=l,e.attr=n,e.idRoot=n,e.idRegex=e.attrRegex=o.counterRegex("scene"),e.attributes=cY(),e.layoutAttributes=JD(),e.baseLayoutAttrOverrides=r({hoverlabel:t.hoverlabel},"plot","nested"),e.supplyLayoutDefaults=hY(),e.plot=function(c){for(var f=c._fullLayout,h=c._fullData,d=f._subplots[l],p=0;p<d.length;p++){var g=d[p],m=a(h,l,g),y=f[g],_=y.camera,v=y._scene;v||(v=new i({id:g,graphDiv:c,container:c.querySelector(".gl-container"),staticPlot:c._context.staticPlot,plotGlPixelRatio:c._context.plotGlPixelRatio,camera:_},f),y._scene=v),v.viewInitial||(v.viewInitial={up:{x:_.up.x,y:_.up.y,z:_.up.z},eye:{x:_.eye.x,y:_.eye.y,z:_.eye.z},center:{x:_.center.x,y:_.center.y,z:_.center.z}}),v.plot(m,f,c.layout)}},e.clean=function(u,c,f,h){for(var d=h._subplots[l]||[],p=0;p<d.length;p++){var g=d[p];!c[g]&&h[g]._scene&&(h[g]._scene.destroy(),h._infolayer&&h._infolayer.selectAll(".annotation-"+g).remove())}},e.toSVG=function(u){for(var c=u._fullLayout,f=c._subplots[l],h=c._size,d=0;d<f.length;d++){var p=c[f[d]],g=p.domain,m=p._scene,y=m.toImage("png"),_=c._glimages.append("svg:image");_.attr({xmlns:s.svg,"xlink:href":y,x:h.l+h.w*g.x[0],y:h.t+h.h*(1-g.y[1]),width:h.w*(g.x[1]-g.x[0]),height:h.h*(g.y[1]-g.y[0]),preserveAspectRatio:"none"}),m.destroy()}},e.cleanId=function(c){if(c.match(/^scene[0-9]*$/)){var f=c.slice(5);return f==="1"&&(f=""),n+f}},e.updateFx=function(u){for(var c=u._fullLayout,f=c._subplots[l],h=0;h<f.length;h++){var d=c[f[h]]._scene;d.updateFx(c.dragmode,c.hovermode)}}}}),dY=de({"src/traces/scatter3d/index.js"(e,r){"use strict";r.exports={plot:tY(),attributes:XD(),markerSymbols:v4(),supplyDefaults:rY(),colorbar:[{container:"marker",min:"cmin",max:"cmax"},{container:"line",min:"cmin",max:"cmax"}],calc:iY(),moduleType:"trace",name:"scatter3d",basePlotModule:S0(),categories:["gl3d","symbols","showLegend","scatter-like"],meta:{}}}}),pY=de({"lib/scatter3d.js"(e,r){"use strict";r.exports=dY()}}),v_=de({"src/traces/surface/attributes.js"(e,r){"use strict";var t=ta(),i=cs(),a=Ns().axisHoverFormat,{hovertemplateAttrs:o,templatefallbackAttrs:s}=Vo(),l=ri(),n=fn().extendFlat,u=Ps().overrideAll;function c(d){return{valType:"boolean",dflt:!1}}function f(d){return{show:{valType:"boolean",dflt:!1},start:{valType:"number",dflt:null,editType:"plot"},end:{valType:"number",dflt:null,editType:"plot"},size:{valType:"number",dflt:null,min:0,editType:"plot"},project:{x:c("x"),y:c("y"),z:c("z")},color:{valType:"color",dflt:t.defaultLine},usecolormap:{valType:"boolean",dflt:!1},width:{valType:"number",min:1,max:16,dflt:2},highlight:{valType:"boolean",dflt:!0},highlightcolor:{valType:"color",dflt:t.defaultLine},highlightwidth:{valType:"number",min:1,max:16,dflt:2}}}var h=r.exports=u(n({z:{valType:"data_array"},x:{valType:"data_array"},y:{valType:"data_array"},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:o(),hovertemplatefallback:s(),xhoverformat:a("x"),yhoverformat:a("y"),zhoverformat:a("z"),connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},surfacecolor:{valType:"data_array"}},i("",{colorAttr:"z or surfacecolor",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:"calc"}),{contours:{x:f("x"),y:f("y"),z:f("z")},hidesurface:{valType:"boolean",dflt:!1},lightposition:{x:{valType:"number",min:-1e5,max:1e5,dflt:10},y:{valType:"number",min:-1e5,max:1e5,dflt:1e4},z:{valType:"number",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:"number",min:0,max:1,dflt:.8},diffuse:{valType:"number",min:0,max:1,dflt:.8},specular:{valType:"number",min:0,max:2,dflt:.05,description:"Represents the level that incident rays are reflected in a single direction, causing shine."},roughness:{valType:"number",min:0,max:1,dflt:.5,description:"Alters specular reflection; the rougher the surface, the wider and less contrasty the shine."},fresnel:{valType:"number",min:0,max:5,dflt:.2}},opacity:{valType:"number",min:0,max:1,dflt:1},opacityscale:{valType:"any",editType:"calc"},hoverinfo:n({},l.hoverinfo),showlegend:n({},l.showlegend,{dflt:!1})}),"calc","nested");h.x.editType=h.y.editType=h.z.editType="calc+clearAxisTypes"}}),QD=de({"src/traces/surface/defaults.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=hu(),o=v_(),s=.1;function l(f,h){for(var d=[],p=32,g=0;g<p;g++){var m=g/(p-1),y=h+(1-h)*(1-Math.pow(Math.sin(f*m*Math.PI),2));d.push([m,Math.max(0,Math.min(1,y))])}return d}function n(f){var h=0;if(!Array.isArray(f)||f.length<2||!f[0]||!f[f.length-1]||+f[0][0]!=0||+f[f.length-1][0]!=1)return!1;for(var d=0;d<f.length;d++){var p=f[d];if(p.length!==2||+p[0]<h)return!1;h=+p[0]}return!0}function u(f,h,d,p){var g,m;function y(b,E){return i.coerce(f,h,o,b,E)}var _=y("x"),v=y("y"),x=y("z");if(!x||!x.length||_&&_.length<1||v&&v.length<1){h.visible=!1;return}h._xlength=Array.isArray(_)&&i.isArrayOrTypedArray(_[0])?x.length:x[0].length,h._ylength=x.length;var S=t.getComponentMethod("calendars","handleTraceDefaults");S(f,h,["x","y","z"],p),y("text"),y("hovertext"),y("hovertemplate"),y("hovertemplatefallback"),y("xhoverformat"),y("yhoverformat"),y("zhoverformat"),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lightposition.x","lightposition.y","lightposition.z","hidesurface","connectgaps","opacity"].forEach(function(b){y(b)});var M=y("surfacecolor"),C=["x","y","z"];for(g=0;g<3;++g){var w="contours."+C[g],k=y(w+".show"),A=y(w+".highlight");if(k||A)for(m=0;m<3;++m)y(w+".project."+C[m]);k&&(y(w+".color"),y(w+".width"),y(w+".usecolormap")),A&&(y(w+".highlightcolor"),y(w+".highlightwidth")),y(w+".start"),y(w+".end"),y(w+".size")}a(f,h,p,y,{prefix:"",cLetter:"c"}),c(f,h,p,y),h._length=null}function c(f,h,d,p){var g=p("opacityscale");g==="max"?h.opacityscale=[[0,s],[1,1]]:g==="min"?h.opacityscale=[[0,1],[1,s]]:g==="extremes"?h.opacityscale=l(1,s):n(g)||(h.opacityscale=void 0)}r.exports={supplyDefaults:u,opacityscaleDefaults:c}}}),vY=de({"src/traces/surface/calc.js"(e,r){"use strict";var t=hc();r.exports=function(a,o){o.surfacecolor?t(a,o,{vals:o.surfacecolor,containerStr:"",cLetter:"c"}):t(a,o,{vals:o.z,containerStr:"",cLetter:"c"})}}}),mY=de({"src/traces/surface/convert.js"(e,r){"use strict";var t=ku().gl_surface3d,i=ku().ndarray,a=ku().ndarray_linear_interpolate.d2,o=r3(),s=i3(),l=Qt().isArrayOrTypedArray,n=Lp().parseColorScale,u=Dp(),c=ks().extractOpts;function f(E,T,F){this.scene=E,this.uid=F,this.surface=T,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var h=f.prototype;h.getXat=function(E,T,F,D){var R=l(this.data.x)?l(this.data.x[0])?this.data.x[T][E]:this.data.x[E]:E;return F===void 0?R:D.d2l(R,0,F)},h.getYat=function(E,T,F,D){var R=l(this.data.y)?l(this.data.y[0])?this.data.y[T][E]:this.data.y[T]:T;return F===void 0?R:D.d2l(R,0,F)},h.getZat=function(E,T,F,D){var R=this.data.z[T][E];return R===null&&this.data.connectgaps&&this.data._interpolatedZ&&(R=this.data._interpolatedZ[T][E]),F===void 0?R:D.d2l(R,0,F)},h.handlePick=function(E){if(E.object===this.surface){var T=(E.data.index[0]-1)/this.dataScaleX-1,F=(E.data.index[1]-1)/this.dataScaleY-1,D=Math.max(Math.min(Math.round(T),this.data.z[0].length-1),0),R=Math.max(Math.min(Math.round(F),this.data._ylength-1),0);E.index=[D,R],E.traceCoordinate=[this.getXat(D,R),this.getYat(D,R),this.getZat(D,R)],E.dataCoordinate=[this.getXat(D,R,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(D,R,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(D,R,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var P=0;P<3;P++){var z=E.dataCoordinate[P];z!=null&&(E.dataCoordinate[P]*=this.scene.dataScale[P])}var I=this.data.hovertext||this.data.text;return l(I)&&I[R]&&I[R][D]!==void 0?E.textLabel=I[R][D]:I?E.textLabel=I:E.textLabel="",E.data.dataCoordinate=E.dataCoordinate.slice(),this.surface.highlight(E.data),this.scene.glplot.spikes.position=E.dataCoordinate,!0}};function d(E){var T=E[0].rgb,F=E[E.length-1].rgb;return T[0]===F[0]&&T[1]===F[1]&&T[2]===F[2]&&T[3]===F[3]}var p=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function g(E,T){if(E<T)return 0;for(var F=0;Math.floor(E%T)===0;)E/=T,F++;return F}function m(E){for(var T=[],F=0;F<p.length;F++){var D=p[F];T.push(g(E,D))}return T}function y(E){for(var T=m(E),F=E,D=0;D<p.length;D++)if(T[D]>0){F=p[D];break}return F}function _(E,T){if(!(E<1||T<1)){for(var F=m(E),D=m(T),R=1,P=0;P<p.length;P++)R*=Math.pow(p[P],Math.max(F[P],D[P]));return R}}function v(E){if(E.length!==0){for(var T=1,F=0;F<E.length;F++)T=_(T,E[F]);return T}}h.calcXnums=function(E){var T,F=[];for(T=1;T<E;T++){var D=this.getXat(T-1,0),R=this.getXat(T,0);R!==D&&D!==void 0&&D!==null&&R!==void 0&&R!==null?F[T-1]=Math.abs(R-D):F[T-1]=0}var P=0;for(T=1;T<E;T++)P+=F[T-1];for(T=1;T<E;T++)F[T-1]===0?F[T-1]=1:F[T-1]=Math.round(P/F[T-1]);return F},h.calcYnums=function(E){var T,F=[];for(T=1;T<E;T++){var D=this.getYat(0,T-1),R=this.getYat(0,T);R!==D&&D!==void 0&&D!==null&&R!==void 0&&R!==null?F[T-1]=Math.abs(R-D):F[T-1]=0}var P=0;for(T=1;T<E;T++)P+=F[T-1];for(T=1;T<E;T++)F[T-1]===0?F[T-1]=1:F[T-1]=Math.round(P/F[T-1]);return F};var x=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],S=x[9],M=x[13];h.estimateScale=function(E,T){for(var F=T===0?this.calcXnums(E):this.calcYnums(E),D=1+v(F);D<S;)D*=2;for(;D>M;)D--,D/=y(D),D++,D<S&&(D=M);var R=Math.round(D/E);return R>1?R:1};function C(E,T,F){var D=F[8]+F[2]*T[0]+F[5]*T[1];return E[0]=(F[6]+F[0]*T[0]+F[3]*T[1])/D,E[1]=(F[7]+F[1]*T[0]+F[4]*T[1])/D,E}function w(E,T,F){return k(E,T,C,F),E}function k(E,T,F,D){for(var R=[0,0],P=E.shape[0],z=E.shape[1],I=0;I<P;I++)for(var L=0;L<z;L++)F(R,[I,L],D),E.set(I,L,a(T,R[0],R[1]));return E}h.refineCoords=function(E){for(var T=this.dataScaleX,F=this.dataScaleY,D=E[0].shape[0],R=E[0].shape[1],P=Math.floor(E[0].shape[0]*T+1)|0,z=Math.floor(E[0].shape[1]*F+1)|0,I=1+D+1,L=1+R+1,B=i(new Float32Array(I*L),[I,L]),O=[1/T,0,0,0,1/F,0,0,0,1],G=0;G<E.length;++G){this.surface.padField(B,E[G]);var W=i(new Float32Array(P*z),[P,z]);w(W,B,O),E[G]=W}};function A(E,T){for(var F=!1,D=0;D<E.length;D++)if(T===E[D]){F=!0;break}F===!1&&E.push(T)}h.setContourLevels=function(){var E=[[],[],[]],T=[!1,!1,!1],F=!1,D,R,P;for(D=0;D<3;++D)if(this.showContour[D]&&(F=!0,this.contourSize[D]>0&&this.contourStart[D]!==null&&this.contourEnd[D]!==null&&this.contourEnd[D]>this.contourStart[D]))for(T[D]=!0,R=this.contourStart[D];R<this.contourEnd[D];R+=this.contourSize[D])P=R*this.scene.dataScale[D],A(E[D],P);if(F){var z=[[],[],[]];for(D=0;D<3;++D)this.showContour[D]&&(z[D]=T[D]?E[D]:this.scene.contourLevels[D]);this.surface.update({levels:z})}},h.update=function(E){var T=this.scene,F=T.fullSceneLayout,D=this.surface,R=n(E),P=T.dataScale,z=E.z[0].length,I=E._ylength,L=T.contourLevels;this.data=E;var B,O,G,W,X=[];for(B=0;B<3;B++)for(X[B]=[],O=0;O<z;O++)X[B][O]=[];for(O=0;O<z;O++)for(G=0;G<I;G++)X[0][O][G]=this.getXat(O,G,E.xcalendar,F.xaxis),X[1][O][G]=this.getYat(O,G,E.ycalendar,F.yaxis),X[2][O][G]=this.getZat(O,G,E.zcalendar,F.zaxis);if(E.connectgaps)for(E._emptypoints=s(X[2]),o(X[2],E._emptypoints),E._interpolatedZ=[],O=0;O<z;O++)for(E._interpolatedZ[O]=[],G=0;G<I;G++)E._interpolatedZ[O][G]=X[2][O][G];for(B=0;B<3;B++)for(O=0;O<z;O++)for(G=0;G<I;G++)W=X[B][O][G],W==null?X[B][O][G]=NaN:W=X[B][O][G]*=P[B];for(B=0;B<3;B++)for(O=0;O<z;O++)for(G=0;G<I;G++)W=X[B][O][G],W!=null&&(this.minValues[B]>W&&(this.minValues[B]=W),this.maxValues[B]<W&&(this.maxValues[B]=W));for(B=0;B<3;B++)this.objectOffset[B]=.5*(this.minValues[B]+this.maxValues[B]);for(B=0;B<3;B++)for(O=0;O<z;O++)for(G=0;G<I;G++)W=X[B][O][G],W!=null&&(X[B][O][G]-=this.objectOffset[B]);var Z=[i(new Float32Array(z*I),[z,I]),i(new Float32Array(z*I),[z,I]),i(new Float32Array(z*I),[z,I])];for(B=0;B<3;B++)for(O=0;O<z;O++)for(G=0;G<I;G++)Z[B].set(O,G,X[B][O][G]);X=[];var J={colormap:R,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!E.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:E.opacityscale,opacity:E.opacity},N=c(E);if(J.intensityBounds=[N.min,N.max],E.surfacecolor){var H=i(new Float32Array(z*I),[z,I]);for(O=0;O<z;O++)for(G=0;G<I;G++)H.set(O,G,E.surfacecolor[G][O]);Z.push(H)}else J.intensityBounds[0]*=P[2],J.intensityBounds[1]*=P[2];(M<Z[0].shape[0]||M<Z[0].shape[1])&&(this.refineData=!1),this.refineData===!0&&(this.dataScaleX=this.estimateScale(Z[0].shape[0],0),this.dataScaleY=this.estimateScale(Z[0].shape[1],1),(this.dataScaleX!==1||this.dataScaleY!==1)&&this.refineCoords(Z)),E.surfacecolor&&(J.intensity=Z.pop());var $=[!0,!0,!0],U=["x","y","z"];for(B=0;B<3;++B){var V=E.contours[U[B]];$[B]=V.highlight,J.showContour[B]=V.show||V.highlight,J.showContour[B]&&(J.contourProject[B]=[V.project.x,V.project.y,V.project.z],V.show?(this.showContour[B]=!0,J.levels[B]=L[B],D.highlightColor[B]=J.contourColor[B]=u(V.color),V.usecolormap?D.highlightTint[B]=J.contourTint[B]=0:D.highlightTint[B]=J.contourTint[B]=1,J.contourWidth[B]=V.width,this.contourStart[B]=V.start,this.contourEnd[B]=V.end,this.contourSize[B]=V.size):(this.showContour[B]=!1,this.contourStart[B]=null,this.contourEnd[B]=null,this.contourSize[B]=0),V.highlight&&(J.dynamicColor[B]=u(V.highlightcolor),J.dynamicWidth[B]=V.highlightwidth))}d(R)&&(J.vertexColor=!0),J.objectOffset=this.objectOffset,J.coords=Z,D.update(J),D.visible=E.visible,D.enableDynamic=$,D.enableHighlight=$,D.snapToData=!0,"lighting"in E&&(D.ambientLight=E.lighting.ambient,D.diffuseLight=E.lighting.diffuse,D.specularLight=E.lighting.specular,D.roughness=E.lighting.roughness,D.fresnel=E.lighting.fresnel),"lightposition"in E&&(D.lightPosition=[E.lightposition.x,E.lightposition.y,E.lightposition.z])},h.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()};function b(E,T){var F=E.glplot.gl,D=t({gl:F}),R=new f(E,D,T.uid);return D._trace=R,R.update(T),E.glplot.add(D),R}r.exports=b}}),gY=de({"src/traces/surface/index.js"(e,r){"use strict";r.exports={attributes:v_(),supplyDefaults:QD().supplyDefaults,colorbar:{min:"cmin",max:"cmax"},calc:vY(),plot:mY(),moduleType:"trace",name:"surface",basePlotModule:S0(),categories:["gl3d","2dMap","showLegend"],meta:{}}}}),yY=de({"lib/surface.js"(e,r){"use strict";r.exports=gY()}}),P1=de({"src/traces/mesh3d/attributes.js"(e,r){"use strict";var t=cs(),i=Ns().axisHoverFormat,{hovertemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=v_(),l=ri(),n=fn().extendFlat;r.exports=n({x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},i:{valType:"data_array",editType:"calc"},j:{valType:"data_array",editType:"calc"},k:{valType:"data_array",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"}),hovertemplatefallback:o({editType:"calc"}),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),delaunayaxis:{valType:"enumerated",values:["x","y","z"],dflt:"z",editType:"calc"},alphahull:{valType:"number",dflt:-1,editType:"calc"},intensity:{valType:"data_array",editType:"calc"},intensitymode:{valType:"enumerated",values:["vertex","cell"],dflt:"vertex",editType:"calc"},color:{valType:"color",editType:"calc"},vertexcolor:{valType:"data_array",editType:"calc"},facecolor:{valType:"data_array",editType:"calc"}},t("",{colorAttr:"`intensity`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:s.opacity,flatshading:{valType:"boolean",dflt:!1,editType:"calc"},contour:{show:n({},s.contours.x.show,{}),color:s.contours.x.color,width:s.contours.x.width,editType:"calc"},lightposition:{x:n({},s.lightposition.x,{dflt:1e5}),y:n({},s.lightposition.y,{dflt:1e5}),z:n({},s.lightposition.z,{dflt:0}),editType:"calc"},lighting:n({vertexnormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-12,editType:"calc",description:"Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry."},facenormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-6,editType:"calc",description:"Epsilon for face normals calculation avoids math issues arising from degenerate geometry."},editType:"calc"},s.lighting),hoverinfo:n({},l.hoverinfo,{editType:"calc"}),showlegend:n({},l.showlegend,{dflt:!1})})}}),m4=de({"src/traces/isosurface/attributes.js"(e,r){"use strict";var t=cs(),i=Ns().axisHoverFormat,{hovertemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=P1(),l=ri(),n=fn().extendFlat,u=Ps().overrideAll;function c(d){return{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}}}function f(d){return{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}}}var h=r.exports=u(n({x:{valType:"data_array"},y:{valType:"data_array"},z:{valType:"data_array"},value:{valType:"data_array"},isomin:{valType:"number"},isomax:{valType:"number"},surface:{show:{valType:"boolean",dflt:!0},count:{valType:"integer",dflt:2,min:1},fill:{valType:"number",min:0,max:1,dflt:1},pattern:{valType:"flaglist",flags:["A","B","C","D","E"],extras:["all","odd","even"],dflt:"all"}},spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:.15}},slices:{x:c("x"),y:c("y"),z:c("z")},caps:{x:f("x"),y:f("y"),z:f("z")},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:a(),hovertemplatefallback:o(),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),valuehoverformat:i("value",1),showlegend:n({},l.showlegend,{dflt:!1})},t("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:s.opacity,lightposition:s.lightposition,lighting:s.lighting,flatshading:s.flatshading,contour:s.contour,hoverinfo:n({},l.hoverinfo)}),"calc","nested");h.flatshading.dflt=!0,h.lighting.facenormalsepsilon.dflt=0,h.x.editType=h.y.editType=h.z.editType=h.value.editType="calc+clearAxisTypes"}}),e7=de({"src/traces/isosurface/defaults.js"(e,r){"use strict";var t=Qt(),i=Ma(),a=m4(),o=hu();function s(n,u,c,f){function h(d,p){return t.coerce(n,u,a,d,p)}l(n,u,c,f,h)}function l(n,u,c,f,h){var d=h("isomin"),p=h("isomax");p!=null&&d!==void 0&&d!==null&&d>p&&(u.isomin=null,u.isomax=null);var g=h("x"),m=h("y"),y=h("z"),_=h("value");if(!g||!g.length||!m||!m.length||!y||!y.length||!_||!_.length){u.visible=!1;return}var v=i.getComponentMethod("calendars","handleTraceDefaults");v(n,u,["x","y","z"],f),h("valuehoverformat"),["x","y","z"].forEach(function(C){h(C+"hoverformat");var w="caps."+C,k=h(w+".show");k&&h(w+".fill");var A="slices."+C,b=h(A+".show");b&&(h(A+".fill"),h(A+".locations"))});var x=h("spaceframe.show");x&&h("spaceframe.fill");var S=h("surface.show");S&&(h("surface.count"),h("surface.fill"),h("surface.pattern"));var M=h("contour.show");M&&(h("contour.color"),h("contour.width")),["text","hovertext","hovertemplate","lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","opacity"].forEach(function(C){h(C)}),o(n,u,f,h,{prefix:"",cLetter:"c"}),u._length=null}r.exports={supplyDefaults:s,supplyIsoDefaults:l}}}),g4=de({"src/traces/streamtube/calc.js"(e,r){"use strict";var t=Qt(),i=hc();function a(n,u){u._len=Math.min(u.u.length,u.v.length,u.w.length,u.x.length,u.y.length,u.z.length),u._u=l(u.u,u._len),u._v=l(u.v,u._len),u._w=l(u.w,u._len),u._x=l(u.x,u._len),u._y=l(u.y,u._len),u._z=l(u.z,u._len);var c=o(u);u._gridFill=c.fill,u._Xs=c.Xs,u._Ys=c.Ys,u._Zs=c.Zs,u._len=c.len;var f=0,h,d,p;u.starts&&(h=l(u.starts.x||[]),d=l(u.starts.y||[]),p=l(u.starts.z||[]),f=Math.min(h.length,d.length,p.length)),u._startsX=h||[],u._startsY=d||[],u._startsZ=p||[];var g=0,m=1/0,y;for(y=0;y<u._len;y++){var _=u._u[y],v=u._v[y],x=u._w[y],S=Math.sqrt(_*_+v*v+x*x);g=Math.max(g,S),m=Math.min(m,S)}for(i(n,u,{vals:[m,g],containerStr:"",cLetter:"c"}),y=0;y<f;y++){var M=h[y];c.xMax=Math.max(c.xMax,M),c.xMin=Math.min(c.xMin,M);var C=d[y];c.yMax=Math.max(c.yMax,C),c.yMin=Math.min(c.yMin,C);var w=p[y];c.zMax=Math.max(c.zMax,w),c.zMin=Math.min(c.zMin,w)}u._slen=f,u._normMax=g,u._xbnds=[c.xMin,c.xMax],u._ybnds=[c.yMin,c.yMax],u._zbnds=[c.zMin,c.zMax]}function o(n){var u=n._x,c=n._y,f=n._z,h=n._len,d,p,g,m=-1/0,y=1/0,_=-1/0,v=1/0,x=-1/0,S=1/0,M="",C,w,k,A,b,E,T,F,D;for(h&&(A=u[0],E=c[0],F=f[0]),h>1&&(b=u[h-1],T=c[h-1],D=f[h-1]),d=0;d<h;d++)m=Math.max(m,u[d]),y=Math.min(y,u[d]),_=Math.max(_,c[d]),v=Math.min(v,c[d]),x=Math.max(x,f[d]),S=Math.min(S,f[d]),!C&&u[d]!==A&&(C=!0,M+="x"),!w&&c[d]!==E&&(w=!0,M+="y"),!k&&f[d]!==F&&(k=!0,M+="z");C||(M+="x"),w||(M+="y"),k||(M+="z");var R=s(n._x),P=s(n._y),z=s(n._z);M=M.replace("x",(A>b?"-":"+")+"x"),M=M.replace("y",(E>T?"-":"+")+"y"),M=M.replace("z",(F>D?"-":"+")+"z");var I=function(){h=0,R=[],P=[],z=[]};(!h||h<R.length*P.length*z.length)&&I();var L=function(ne){return ne==="x"?u:ne==="y"?c:f},B=function(ne){return ne==="x"?R:ne==="y"?P:z},O=function(ne){return ne[h-1]<ne[0]?-1:1},G=L(M[1]),W=L(M[3]),X=L(M[5]),Z=B(M[1]).length,J=B(M[3]).length,N=B(M[5]).length,H=!1,$=function(ne,se,le){return Z*(J*ne+se)+le},U=O(L(M[1])),V=O(L(M[3])),j=O(L(M[5]));for(d=0;d<N-1;d++){for(p=0;p<J-1;p++){for(g=0;g<Z-1;g++){var q=$(d,p,g),Y=$(d,p,g+1),K=$(d,p+1,g),te=$(d+1,p,g);if((!(G[q]*U<G[Y]*U)||!(W[q]*V<W[K]*V)||!(X[q]*j<X[te]*j))&&(H=!0),H)break}if(H)break}if(H)break}return H&&(t.warn("Encountered arbitrary coordinates! Unable to input data grid."),I()),{xMin:y,yMin:v,zMin:S,xMax:m,yMax:_,zMax:x,Xs:R,Ys:P,Zs:z,len:h,fill:M}}function s(n){return t.distinctVals(n).vals}function l(n,u){if(u===void 0&&(u=n.length),t.isTypedArray(n))return n.subarray(0,u);for(var c=[],f=0;f<u;f++)c[f]=+n[f];return c}r.exports={calc:a,filter:l,processGrid:o}}}),t7=de({"src/traces/isosurface/calc.js"(e,r){"use strict";var t=hc(),i=g4().processGrid,a=g4().filter;r.exports=function(s,l){l._len=Math.min(l.x.length,l.y.length,l.z.length,l.value.length),l._x=a(l.x,l._len),l._y=a(l.y,l._len),l._z=a(l.z,l._len),l._value=a(l.value,l._len);var n=i(l);l._gridFill=n.fill,l._Xs=n.Xs,l._Ys=n.Ys,l._Zs=n.Zs,l._len=n.len;for(var u=1/0,c=-1/0,f=0;f<l._len;f++){var h=l._value[f];u=Math.min(u,h),c=Math.max(c,h)}l._minValues=u,l._maxValues=c,l._vMin=l.isomin===void 0||l.isomin===null?u:l.isomin,l._vMax=l.isomax===void 0||l.isomax===null?c:l.isomax,t(s,l,{vals:[l._vMin,l._vMax],containerStr:"",cLetter:"c"})}}}),I1=de({"src/plots/gl3d/zip3.js"(e,r){"use strict";r.exports=function(i,a,o,s){s=s||i.length;for(var l=new Array(s),n=0;n<s;n++)l[n]=[i[n],a[n],o[n]];return l}}}),y4=de({"src/traces/isosurface/convert.js"(e,r){"use strict";var t=ku().gl_mesh3d,i=Lp().parseColorScale,a=Qt().isArrayOrTypedArray,o=Dp(),s=ks().extractOpts,l=I1(),n=function(p,g){for(var m=g.length-1;m>0;m--){var y=Math.min(g[m],g[m-1]),_=Math.max(g[m],g[m-1]);if(_>y&&y<p&&p<=_)return{id:m,distRatio:(_-p)/(_-y)}}return{id:0,distRatio:0}};function u(p,g,m){this.scene=p,this.uid=m,this.mesh=g,this.name="",this.data=null,this.showContour=!1}var c=u.prototype;c.handlePick=function(p){if(p.object===this.mesh){var g=p.data.index,m=this.data._meshX[g],y=this.data._meshY[g],_=this.data._meshZ[g],v=this.data._Ys.length,x=this.data._Zs.length,S=n(m,this.data._Xs).id,M=n(y,this.data._Ys).id,C=n(_,this.data._Zs).id,w=p.index=C+x*M+x*v*S;p.traceCoordinate=[this.data._meshX[w],this.data._meshY[w],this.data._meshZ[w],this.data._value[w]];var k=this.data.hovertext||this.data.text;return a(k)&&k[w]!==void 0?p.textLabel=k[w]:k&&(p.textLabel=k),!0}},c.update=function(p){var g=this.scene,m=g.fullSceneLayout;this.data=h(p);function y(M,C,w,k){return C.map(function(A){return M.d2l(A,0,k)*w})}var _=l(y(m.xaxis,p._meshX,g.dataScale[0],p.xcalendar),y(m.yaxis,p._meshY,g.dataScale[1],p.ycalendar),y(m.zaxis,p._meshZ,g.dataScale[2],p.zcalendar)),v=l(p._meshI,p._meshJ,p._meshK),x={positions:_,cells:v,lightPosition:[p.lightposition.x,p.lightposition.y,p.lightposition.z],ambient:p.lighting.ambient,diffuse:p.lighting.diffuse,specular:p.lighting.specular,roughness:p.lighting.roughness,fresnel:p.lighting.fresnel,vertexNormalsEpsilon:p.lighting.vertexnormalsepsilon,faceNormalsEpsilon:p.lighting.facenormalsepsilon,opacity:p.opacity,contourEnable:p.contour.show,contourColor:o(p.contour.color).slice(0,3),contourWidth:p.contour.width,useFacetNormals:p.flatshading},S=s(p);x.vertexIntensity=p._meshIntensity,x.vertexIntensityBounds=[S.min,S.max],x.colormap=i(p),this.mesh.update(x)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var f=["xyz","xzy","yxz","yzx","zxy","zyx"];function h(p){p._meshI=[],p._meshJ=[],p._meshK=[];var g=p.surface.show,m=p.spaceframe.show,y=p.surface.fill,_=p.spaceframe.fill,v=!1,x=!1,S=0,M,C,w=p._Xs,k=p._Ys,A=p._Zs,b=w.length,E=k.length,T=A.length,F=f.indexOf(p._gridFill.replace(/-/g,"").replace(/\+/g,"")),D=function(lt,qe,Ye){switch(F){case 5:return Ye+T*qe+T*E*lt;case 4:return Ye+T*lt+T*b*qe;case 3:return qe+E*Ye+E*T*lt;case 2:return qe+E*lt+E*b*Ye;case 1:return lt+b*Ye+b*T*qe;default:return lt+b*qe+b*E*Ye}},R=p._minValues,P=p._maxValues,z=p._vMin,I=p._vMax,L,B,O,G;function W(lt,qe,Ye){for(var me=G.length,_e=C;_e<me;_e++)if(lt===L[_e]&&qe===B[_e]&&Ye===O[_e])return _e;return-1}function X(){C=M}function Z(){L=[],B=[],O=[],G=[],M=0,X()}function J(lt,qe,Ye,me){return L.push(lt),B.push(qe),O.push(Ye),G.push(me),M++,M-1}function N(lt,qe,Ye){return p._meshI.push(lt),p._meshJ.push(qe),p._meshK.push(Ye),S++,S-1}function H(lt,qe,Ye){for(var me=[],_e=0;_e<lt.length;_e++)me[_e]=(lt[_e]+qe[_e]+Ye[_e])/3;return me}function $(lt,qe,Ye){for(var me=[],_e=0;_e<lt.length;_e++)me[_e]=lt[_e]*(1-Ye)+Ye*qe[_e];return me}var U;function V(lt){U=lt}function j(lt,qe){var Ye=lt[0],me=lt[1],_e=lt[2],Ae=H(Ye,me,_e),ke=Math.sqrt(1-U),Ee=$(Ae,Ye,ke),De=$(Ae,me,ke),Je=$(Ae,_e,ke),Ue=qe[0],at=qe[1],rt=qe[2];return{xyzv:[[Ye,me,De],[De,Ee,Ye],[me,_e,Je],[Je,De,me],[_e,Ye,Ee],[Ee,Je,_e]],abc:[[Ue,at,-1],[-1,-1,Ue],[at,rt,-1],[-1,-1,at],[rt,Ue,-1],[-1,-1,rt]]}}function q(lt,qe){return lt==="all"||lt===null?!0:lt.indexOf(qe)>-1}function Y(lt,qe){return lt===null?qe:lt}function K(lt,qe,Ye){X();var me=[qe],_e=[Ye];if(U>=1)me=[qe],_e=[Ye];else if(U>0){var Ae=j(qe,Ye);me=Ae.xyzv,_e=Ae.abc}for(var ke=0;ke<me.length;ke++){qe=me[ke],Ye=_e[ke];for(var Ee=[],De=0;De<3;De++){var Je=qe[De][0],Ue=qe[De][1],at=qe[De][2],rt=qe[De][3],ft=Ye[De]>-1?Ye[De]:W(Je,Ue,at);ft>-1?Ee[De]=ft:Ee[De]=J(Je,Ue,at,Y(lt,rt))}N(Ee[0],Ee[1],Ee[2])}}function te(lt,qe,Ye){var me=function(_e,Ae,ke){K(lt,[qe[_e],qe[Ae],qe[ke]],[Ye[_e],Ye[Ae],Ye[ke]])};me(0,1,2),me(2,3,0)}function ne(lt,qe,Ye){var me=function(_e,Ae,ke){K(lt,[qe[_e],qe[Ae],qe[ke]],[Ye[_e],Ye[Ae],Ye[ke]])};me(0,1,2),me(3,0,1),me(2,3,0),me(1,2,3)}function se(lt,qe,Ye,me){var _e=lt[3];_e<Ye&&(_e=Ye),_e>me&&(_e=me);for(var Ae=(lt[3]-_e)/(lt[3]-qe[3]+1e-9),ke=[],Ee=0;Ee<4;Ee++)ke[Ee]=(1-Ae)*lt[Ee]+Ae*qe[Ee];return ke}function le(lt,qe,Ye){return lt>=qe&<<=Ye}function ce(lt){var qe=.001*(I-z);return lt>=z-qe&<<=I+qe}function pe(lt){for(var qe=[],Ye=0;Ye<4;Ye++){var me=lt[Ye];qe.push([p._x[me],p._y[me],p._z[me],p._value[me]])}return qe}var xe=3;function ye(lt,qe,Ye,me,_e,Ae){Ae||(Ae=1),Ye=[-1,-1,-1];var ke=!1,Ee=[le(qe[0][3],me,_e),le(qe[1][3],me,_e),le(qe[2][3],me,_e)];if(!Ee[0]&&!Ee[1]&&!Ee[2])return!1;var De=function(Ue,at,rt){return ce(at[0][3])&&ce(at[1][3])&&ce(at[2][3])?(K(Ue,at,rt),!0):Ae<xe?ye(Ue,at,rt,z,I,++Ae):!1};if(Ee[0]&&Ee[1]&&Ee[2])return De(lt,qe,Ye)||ke;var Je=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach(function(Ue){if(Ee[Ue[0]]&&Ee[Ue[1]]&&!Ee[Ue[2]]){var at=qe[Ue[0]],rt=qe[Ue[1]],ft=qe[Ue[2]],At=se(ft,at,me,_e),ht=se(ft,rt,me,_e);ke=De(lt,[ht,At,at],[-1,-1,Ye[Ue[0]]])||ke,ke=De(lt,[at,rt,ht],[Ye[Ue[0]],Ye[Ue[1]],-1])||ke,Je=!0}}),Je||[[0,1,2],[1,2,0],[2,0,1]].forEach(function(Ue){if(Ee[Ue[0]]&&!Ee[Ue[1]]&&!Ee[Ue[2]]){var at=qe[Ue[0]],rt=qe[Ue[1]],ft=qe[Ue[2]],At=se(rt,at,me,_e),ht=se(ft,at,me,_e);ke=De(lt,[ht,At,at],[-1,-1,Ye[Ue[0]]])||ke,Je=!0}}),ke}function fe(lt,qe,Ye,me){var _e=!1,Ae=pe(qe),ke=[le(Ae[0][3],Ye,me),le(Ae[1][3],Ye,me),le(Ae[2][3],Ye,me),le(Ae[3][3],Ye,me)];if(!ke[0]&&!ke[1]&&!ke[2]&&!ke[3])return _e;if(ke[0]&&ke[1]&&ke[2]&&ke[3])return x&&(_e=ne(lt,Ae,qe)||_e),_e;var Ee=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach(function(De){if(ke[De[0]]&&ke[De[1]]&&ke[De[2]]&&!ke[De[3]]){var Je=Ae[De[0]],Ue=Ae[De[1]],at=Ae[De[2]],rt=Ae[De[3]];if(x)_e=K(lt,[Je,Ue,at],[qe[De[0]],qe[De[1]],qe[De[2]]])||_e;else{var ft=se(rt,Je,Ye,me),At=se(rt,Ue,Ye,me),ht=se(rt,at,Ye,me);_e=K(null,[ft,At,ht],[-1,-1,-1])||_e}Ee=!0}}),Ee||([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach(function(De){if(ke[De[0]]&&ke[De[1]]&&!ke[De[2]]&&!ke[De[3]]){var Je=Ae[De[0]],Ue=Ae[De[1]],at=Ae[De[2]],rt=Ae[De[3]],ft=se(at,Je,Ye,me),At=se(at,Ue,Ye,me),ht=se(rt,Ue,Ye,me),Gt=se(rt,Je,Ye,me);x?(_e=K(lt,[Je,Gt,ft],[qe[De[0]],-1,-1])||_e,_e=K(lt,[Ue,At,ht],[qe[De[1]],-1,-1])||_e):_e=te(null,[ft,At,ht,Gt],[-1,-1,-1,-1])||_e,Ee=!0}}),Ee)||[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach(function(De){if(ke[De[0]]&&!ke[De[1]]&&!ke[De[2]]&&!ke[De[3]]){var Je=Ae[De[0]],Ue=Ae[De[1]],at=Ae[De[2]],rt=Ae[De[3]],ft=se(Ue,Je,Ye,me),At=se(at,Je,Ye,me),ht=se(rt,Je,Ye,me);x?(_e=K(lt,[Je,ft,At],[qe[De[0]],-1,-1])||_e,_e=K(lt,[Je,At,ht],[qe[De[0]],-1,-1])||_e,_e=K(lt,[Je,ht,ft],[qe[De[0]],-1,-1])||_e):_e=K(null,[ft,At,ht],[-1,-1,-1])||_e,Ee=!0}}),_e}function ae(lt,qe,Ye,me,_e,Ae,ke,Ee,De,Je,Ue){var at=!1;return v&&(q(lt,"A")&&(at=fe(null,[qe,Ye,me,Ae],Je,Ue)||at),q(lt,"B")&&(at=fe(null,[Ye,me,_e,De],Je,Ue)||at),q(lt,"C")&&(at=fe(null,[Ye,Ae,ke,De],Je,Ue)||at),q(lt,"D")&&(at=fe(null,[me,Ae,Ee,De],Je,Ue)||at),q(lt,"E")&&(at=fe(null,[Ye,me,Ae,De],Je,Ue)||at)),x&&(at=fe(lt,[Ye,me,Ae,De],Je,Ue)||at),at}function ee(lt,qe,Ye,me,_e,Ae,ke,Ee){return[Ee[0]===!0?!0:ye(lt,pe([qe,Ye,me]),[qe,Ye,me],Ae,ke),Ee[1]===!0?!0:ye(lt,pe([me,_e,qe]),[me,_e,qe],Ae,ke)]}function ie(lt,qe,Ye,me,_e,Ae,ke,Ee,De){return Ee?ee(lt,qe,Ye,_e,me,Ae,ke,De):ee(lt,Ye,_e,me,qe,Ae,ke,De)}function Q(lt,qe,Ye,me,_e,Ae,ke){var Ee=!1,De,Je,Ue,at,rt=function(){Ee=ye(lt,[De,Je,Ue],[-1,-1,-1],_e,Ae)||Ee,Ee=ye(lt,[Ue,at,De],[-1,-1,-1],_e,Ae)||Ee},ft=ke[0],At=ke[1],ht=ke[2];return ft&&(De=$(pe([D(qe,Ye-0,me-0)])[0],pe([D(qe-1,Ye-0,me-0)])[0],ft),Je=$(pe([D(qe,Ye-0,me-1)])[0],pe([D(qe-1,Ye-0,me-1)])[0],ft),Ue=$(pe([D(qe,Ye-1,me-1)])[0],pe([D(qe-1,Ye-1,me-1)])[0],ft),at=$(pe([D(qe,Ye-1,me-0)])[0],pe([D(qe-1,Ye-1,me-0)])[0],ft),rt()),At&&(De=$(pe([D(qe-0,Ye,me-0)])[0],pe([D(qe-0,Ye-1,me-0)])[0],At),Je=$(pe([D(qe-0,Ye,me-1)])[0],pe([D(qe-0,Ye-1,me-1)])[0],At),Ue=$(pe([D(qe-1,Ye,me-1)])[0],pe([D(qe-1,Ye-1,me-1)])[0],At),at=$(pe([D(qe-1,Ye,me-0)])[0],pe([D(qe-1,Ye-1,me-0)])[0],At),rt()),ht&&(De=$(pe([D(qe-0,Ye-0,me)])[0],pe([D(qe-0,Ye-0,me-1)])[0],ht),Je=$(pe([D(qe-0,Ye-1,me)])[0],pe([D(qe-0,Ye-1,me-1)])[0],ht),Ue=$(pe([D(qe-1,Ye-1,me)])[0],pe([D(qe-1,Ye-1,me-1)])[0],ht),at=$(pe([D(qe-1,Ye-0,me)])[0],pe([D(qe-1,Ye-0,me-1)])[0],ht),rt()),Ee}function ue(lt,qe,Ye,me,_e,Ae,ke,Ee,De,Je,Ue,at){var rt=lt;return at?(v&<==="even"&&(rt=null),ae(rt,qe,Ye,me,_e,Ae,ke,Ee,De,Je,Ue)):(v&<==="odd"&&(rt=null),ae(rt,De,Ee,ke,Ae,_e,me,Ye,qe,Je,Ue))}function ge(lt,qe,Ye,me,_e){for(var Ae=[],ke=0,Ee=0;Ee<qe.length;Ee++)for(var De=qe[Ee],Je=1;Je<T;Je++)for(var Ue=1;Ue<E;Ue++)Ae.push(ie(lt,D(De,Ue-1,Je-1),D(De,Ue-1,Je),D(De,Ue,Je-1),D(De,Ue,Je),Ye,me,(De+Ue+Je)%2,_e&&_e[ke]?_e[ke]:[])),ke++;return Ae}function Me(lt,qe,Ye,me,_e){for(var Ae=[],ke=0,Ee=0;Ee<qe.length;Ee++)for(var De=qe[Ee],Je=1;Je<b;Je++)for(var Ue=1;Ue<T;Ue++)Ae.push(ie(lt,D(Je-1,De,Ue-1),D(Je,De,Ue-1),D(Je-1,De,Ue),D(Je,De,Ue),Ye,me,(Je+De+Ue)%2,_e&&_e[ke]?_e[ke]:[])),ke++;return Ae}function Te(lt,qe,Ye,me,_e){for(var Ae=[],ke=0,Ee=0;Ee<qe.length;Ee++)for(var De=qe[Ee],Je=1;Je<E;Je++)for(var Ue=1;Ue<b;Ue++)Ae.push(ie(lt,D(Ue-1,Je-1,De),D(Ue-1,Je,De),D(Ue,Je-1,De),D(Ue,Je,De),Ye,me,(Ue+Je+De)%2,_e&&_e[ke]?_e[ke]:[])),ke++;return Ae}function je(lt,qe,Ye){for(var me=1;me<T;me++)for(var _e=1;_e<E;_e++)for(var Ae=1;Ae<b;Ae++)ue(lt,D(Ae-1,_e-1,me-1),D(Ae-1,_e-1,me),D(Ae-1,_e,me-1),D(Ae-1,_e,me),D(Ae,_e-1,me-1),D(Ae,_e-1,me),D(Ae,_e,me-1),D(Ae,_e,me),qe,Ye,(Ae+_e+me)%2)}function Ve(lt,qe,Ye){x=!0,je(lt,qe,Ye),x=!1}function Ze(lt,qe,Ye){v=!0,je(lt,qe,Ye),v=!1}function Ke(lt,qe,Ye,me,_e,Ae){for(var ke=[],Ee=0,De=0;De<qe.length;De++)for(var Je=qe[De],Ue=1;Ue<T;Ue++)for(var at=1;at<E;at++)ke.push(Q(lt,Je,at,Ue,Ye,me,_e[De],Ae&&Ae[Ee]?Ae[Ee]:[])),Ee++;return ke}function vt(lt,qe,Ye,me,_e,Ae){for(var ke=[],Ee=0,De=0;De<qe.length;De++)for(var Je=qe[De],Ue=1;Ue<b;Ue++)for(var at=1;at<T;at++)ke.push(Q(lt,Ue,Je,at,Ye,me,_e[De],Ae&&Ae[Ee]?Ae[Ee]:[])),Ee++;return ke}function xt(lt,qe,Ye,me,_e,Ae){for(var ke=[],Ee=0,De=0;De<qe.length;De++)for(var Je=qe[De],Ue=1;Ue<E;Ue++)for(var at=1;at<b;at++)ke.push(Q(lt,at,Ue,Je,Ye,me,_e[De],Ae&&Ae[Ee]?Ae[Ee]:[])),Ee++;return ke}function Pt(lt,qe){for(var Ye=[],me=lt;me<qe;me++)Ye.push(me);return Ye}function mt(){for(var lt=0;lt<b;lt++)for(var qe=0;qe<E;qe++)for(var Ye=0;Ye<T;Ye++){var me=D(lt,qe,Ye);J(p._x[me],p._y[me],p._z[me],p._value[me])}}function Mt(){Z(),mt();var lt=null;if(m&&_&&(V(_),Ve(lt,z,I)),g&&y){V(y);for(var qe=p.surface.pattern,Ye=p.surface.count,me=0;me<Ye;me++){var _e=Ye===1?.5:me/(Ye-1),Ae=(1-_e)*z+_e*I,ke=Math.abs(Ae-R),Ee=Math.abs(Ae-P),De=ke>Ee?[R,Ae]:[Ae,P];Ze(qe,De[0],De[1])}}var Je=[[Math.min(z,P),Math.max(z,P)],[Math.min(R,I),Math.max(R,I)]];["x","y","z"].forEach(function(Ue){for(var at=[],rt=0;rt<Je.length;rt++){var ft=0,At=Je[rt][0],ht=Je[rt][1],Gt=p.slices[Ue];if(Gt.show&&Gt.fill){V(Gt.fill);var fr=[],gt=[],yt=[];if(Gt.locations.length)for(var kt=0;kt<Gt.locations.length;kt++){var Lt=n(Gt.locations[kt],Ue==="x"?w:Ue==="y"?k:A);Lt.distRatio===0?fr.push(Lt.id):Lt.id>0&&(gt.push(Lt.id),Ue==="x"?yt.push([Lt.distRatio,0,0]):Ue==="y"?yt.push([0,Lt.distRatio,0]):yt.push([0,0,Lt.distRatio]))}else Ue==="x"?fr=Pt(1,b-1):Ue==="y"?fr=Pt(1,E-1):fr=Pt(1,T-1);gt.length>0&&(Ue==="x"?at[ft]=Ke(lt,gt,At,ht,yt,at[ft]):Ue==="y"?at[ft]=vt(lt,gt,At,ht,yt,at[ft]):at[ft]=xt(lt,gt,At,ht,yt,at[ft]),ft++),fr.length>0&&(Ue==="x"?at[ft]=ge(lt,fr,At,ht,at[ft]):Ue==="y"?at[ft]=Me(lt,fr,At,ht,at[ft]):at[ft]=Te(lt,fr,At,ht,at[ft]),ft++)}var Ct=p.caps[Ue];Ct.show&&Ct.fill&&(V(Ct.fill),Ue==="x"?at[ft]=ge(lt,[0,b-1],At,ht,at[ft]):Ue==="y"?at[ft]=Me(lt,[0,E-1],At,ht,at[ft]):at[ft]=Te(lt,[0,T-1],At,ht,at[ft]),ft++)}}),S===0&&Z(),p._meshX=L,p._meshY=B,p._meshZ=O,p._meshIntensity=G,p._Xs=w,p._Ys=k,p._Zs=A}return Mt(),p}function d(p,g){var m=p.glplot.gl,y=t({gl:m}),_=new u(p,y,g.uid);return y._trace=_,_.update(g),p.glplot.add(y),_}r.exports={findNearestOnAxis:n,generateIsoMeshes:h,createIsosurfaceTrace:d}}}),_Y=de({"src/traces/isosurface/index.js"(e,r){"use strict";r.exports={attributes:m4(),supplyDefaults:e7().supplyDefaults,calc:t7(),colorbar:{min:"cmin",max:"cmax"},plot:y4().createIsosurfaceTrace,moduleType:"trace",name:"isosurface",basePlotModule:S0(),categories:["gl3d","showLegend"],meta:{}}}}),xY=de({"lib/isosurface.js"(e,r){"use strict";r.exports=_Y()}}),r7=de({"src/traces/volume/attributes.js"(e,r){"use strict";var t=cs(),i=m4(),a=v_(),o=ri(),s=fn().extendFlat,l=Ps().overrideAll,n=r.exports=l(s({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,xhoverformat:i.xhoverformat,yhoverformat:i.yhoverformat,zhoverformat:i.zhoverformat,valuehoverformat:i.valuehoverformat,hovertemplate:i.hovertemplate,hovertemplatefallback:i.hovertemplatefallback},t("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:a.opacityscale,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),"calc","nested");n.x.editType=n.y.editType=n.z.editType=n.value.editType="calc+clearAxisTypes"}}),bY=de({"src/traces/volume/defaults.js"(e,r){"use strict";var t=Qt(),i=r7(),a=e7().supplyIsoDefaults,o=QD().opacityscaleDefaults;r.exports=function(l,n,u,c){function f(h,d){return t.coerce(l,n,i,h,d)}a(l,n,u,c,f),o(l,n,c,f)}}}),wY=de({"src/traces/volume/convert.js"(e,r){"use strict";var t=ku().gl_mesh3d,i=Lp().parseColorScale,a=Qt().isArrayOrTypedArray,o=Dp(),s=ks().extractOpts,l=I1(),n=y4().findNearestOnAxis,u=y4().generateIsoMeshes;function c(d,p,g){this.scene=d,this.uid=g,this.mesh=p,this.name="",this.data=null,this.showContour=!1}var f=c.prototype;f.handlePick=function(d){if(d.object===this.mesh){var p=d.data.index,g=this.data._meshX[p],m=this.data._meshY[p],y=this.data._meshZ[p],_=this.data._Ys.length,v=this.data._Zs.length,x=n(g,this.data._Xs).id,S=n(m,this.data._Ys).id,M=n(y,this.data._Zs).id,C=d.index=M+v*S+v*_*x;d.traceCoordinate=[this.data._meshX[C],this.data._meshY[C],this.data._meshZ[C],this.data._value[C]];var w=this.data.hovertext||this.data.text;return a(w)&&w[C]!==void 0?d.textLabel=w[C]:w&&(d.textLabel=w),!0}},f.update=function(d){var p=this.scene,g=p.fullSceneLayout;this.data=u(d);function m(S,M,C,w){return M.map(function(k){return S.d2l(k,0,w)*C})}var y=l(m(g.xaxis,d._meshX,p.dataScale[0],d.xcalendar),m(g.yaxis,d._meshY,p.dataScale[1],d.ycalendar),m(g.zaxis,d._meshZ,p.dataScale[2],d.zcalendar)),_=l(d._meshI,d._meshJ,d._meshK),v={positions:y,cells:_,lightPosition:[d.lightposition.x,d.lightposition.y,d.lightposition.z],ambient:d.lighting.ambient,diffuse:d.lighting.diffuse,specular:d.lighting.specular,roughness:d.lighting.roughness,fresnel:d.lighting.fresnel,vertexNormalsEpsilon:d.lighting.vertexnormalsepsilon,faceNormalsEpsilon:d.lighting.facenormalsepsilon,opacity:d.opacity,opacityscale:d.opacityscale,contourEnable:d.contour.show,contourColor:o(d.contour.color).slice(0,3),contourWidth:d.contour.width,useFacetNormals:d.flatshading},x=s(d);v.vertexIntensity=d._meshIntensity,v.vertexIntensityBounds=[x.min,x.max],v.colormap=i(d),this.mesh.update(v)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};function h(d,p){var g=d.glplot.gl,m=t({gl:g}),y=new c(d,m,p.uid);return m._trace=y,y.update(p),d.glplot.add(m),y}r.exports=h}}),TY=de({"src/traces/volume/index.js"(e,r){"use strict";r.exports={attributes:r7(),supplyDefaults:bY(),calc:t7(),colorbar:{min:"cmin",max:"cmax"},plot:wY(),moduleType:"trace",name:"volume",basePlotModule:S0(),categories:["gl3d","showLegend"],meta:{}}}}),AY=de({"lib/volume.js"(e,r){"use strict";r.exports=TY()}}),MY=de({"src/traces/mesh3d/defaults.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=hu(),o=P1();r.exports=function(l,n,u,c){function f(m,y){return i.coerce(l,n,o,m,y)}function h(m){var y=m.map(function(_){var v=f(_);return v&&i.isArrayOrTypedArray(v)?v:null});return y.every(function(_){return _&&_.length===y[0].length})&&y}var d=h(["x","y","z"]);if(!d){n.visible=!1;return}if(h(["i","j","k"]),n.i&&(!n.j||!n.k)||n.j&&(!n.k||!n.i)||n.k&&(!n.i||!n.j)){n.visible=!1;return}var p=t.getComponentMethod("calendars","handleTraceDefaults");p(l,n,["x","y","z"],c),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","alphahull","delaunayaxis","opacity"].forEach(function(m){f(m)});var g=f("contour.show");g&&(f("contour.color"),f("contour.width")),"intensity"in l?(f("intensity"),f("intensitymode"),a(l,n,c,f,{prefix:"",cLetter:"c"})):(n.showscale=!1,"facecolor"in l?f("facecolor"):"vertexcolor"in l?f("vertexcolor"):f("color",u)),f("text"),f("hovertext"),f("hovertemplate"),f("hovertemplatefallback"),f("xhoverformat"),f("yhoverformat"),f("zhoverformat"),n._length=null}}}),SY=de({"src/traces/mesh3d/calc.js"(e,r){"use strict";var t=hc();r.exports=function(a,o){o.intensity&&t(a,o,{vals:o.intensity,containerStr:"",cLetter:"c"})}}}),EY=de({"src/traces/mesh3d/convert.js"(e,r){"use strict";var t=ku().gl_mesh3d,i=ku().delaunay_triangulate,a=ku().alpha_shape,o=ku().convex_hull,s=Lp().parseColorScale,l=Qt().isArrayOrTypedArray,n=Dp(),u=ks().extractOpts,c=I1();function f(v,x,S){this.scene=v,this.uid=S,this.mesh=x,this.name="",this.color="#fff",this.data=null,this.showContour=!1}var h=f.prototype;h.handlePick=function(v){if(v.object===this.mesh){var x=v.index=v.data.index;v.data._cellCenter?v.traceCoordinate=v.data.dataCoordinate:v.traceCoordinate=[this.data.x[x],this.data.y[x],this.data.z[x]];var S=this.data.hovertext||this.data.text;return l(S)&&S[x]!==void 0?v.textLabel=S[x]:S&&(v.textLabel=S),!0}};function d(v){for(var x=[],S=v.length,M=0;M<S;M++)x[M]=n(v[M]);return x}function p(v,x,S,M){for(var C=[],w=x.length,k=0;k<w;k++)C[k]=v.d2l(x[k],0,M)*S;return C}function g(v){for(var x=[],S=v.length,M=0;M<S;M++)x[M]=Math.round(v[M]);return x}function m(v,x){for(var S=["x","y","z"].indexOf(v),M=[],C=x.length,w=0;w<C;w++)M[w]=[x[w][(S+1)%3],x[w][(S+2)%3]];return i(M)}function y(v,x){for(var S=v.length,M=0;M<S;M++)if(v[M]<=-.5||v[M]>=x-.5)return!1;return!0}h.update=function(v){var x=this.scene,S=x.fullSceneLayout;this.data=v;var M=v.x.length,C=c(p(S.xaxis,v.x,x.dataScale[0],v.xcalendar),p(S.yaxis,v.y,x.dataScale[1],v.ycalendar),p(S.zaxis,v.z,x.dataScale[2],v.zcalendar)),w;if(v.i&&v.j&&v.k){if(v.i.length!==v.j.length||v.j.length!==v.k.length||!y(v.i,M)||!y(v.j,M)||!y(v.k,M))return;w=c(g(v.i),g(v.j),g(v.k))}else v.alphahull===0?w=o(C):v.alphahull>0?w=a(v.alphahull,C):w=m(v.delaunayaxis,C);var k={positions:C,cells:w,lightPosition:[v.lightposition.x,v.lightposition.y,v.lightposition.z],ambient:v.lighting.ambient,diffuse:v.lighting.diffuse,specular:v.lighting.specular,roughness:v.lighting.roughness,fresnel:v.lighting.fresnel,vertexNormalsEpsilon:v.lighting.vertexnormalsepsilon,faceNormalsEpsilon:v.lighting.facenormalsepsilon,opacity:v.opacity,contourEnable:v.contour.show,contourColor:n(v.contour.color).slice(0,3),contourWidth:v.contour.width,useFacetNormals:v.flatshading};if(v.intensity){var A=u(v);this.color="#fff";var b=v.intensitymode;k[b+"Intensity"]=v.intensity,k[b+"IntensityBounds"]=[A.min,A.max],k.colormap=s(v)}else v.vertexcolor?(this.color=v.vertexcolor[0],k.vertexColors=d(v.vertexcolor)):v.facecolor?(this.color=v.facecolor[0],k.cellColors=d(v.facecolor)):(this.color=v.color,k.meshColor=n(v.color));this.mesh.update(k)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};function _(v,x){var S=v.glplot.gl,M=t({gl:S}),C=new f(v,M,x.uid);return M._trace=C,C.update(x),v.glplot.add(M),C}r.exports=_}}),kY=de({"src/traces/mesh3d/index.js"(e,r){"use strict";r.exports={attributes:P1(),supplyDefaults:MY(),calc:SY(),colorbar:{min:"cmin",max:"cmax"},plot:EY(),moduleType:"trace",name:"mesh3d",basePlotModule:S0(),categories:["gl3d","showLegend"],meta:{}}}}),CY=de({"lib/mesh3d.js"(e,r){"use strict";r.exports=kY()}}),i7=de({"src/traces/cone/attributes.js"(e,r){"use strict";var t=cs(),i=Ns().axisHoverFormat,{hovertemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=P1(),l=ri(),n=fn().extendFlat,u={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},sizemode:{valType:"enumerated",values:["scaled","absolute","raw"],editType:"calc",dflt:"scaled"},sizeref:{valType:"number",editType:"calc",min:0},anchor:{valType:"enumerated",editType:"calc",values:["tip","tail","cm","center"],dflt:"cm"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["norm"]}),hovertemplatefallback:o({editType:"calc"}),uhoverformat:i("u",1),vhoverformat:i("v",1),whoverformat:i("w",1),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),showlegend:n({},l.showlegend,{dflt:!1})};n(u,t("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"}));var c=["opacity","lightposition","lighting"];c.forEach(function(f){u[f]=s[f]}),u.hoverinfo=n({},l.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","text","name"],dflt:"x+y+z+norm+text+name"}),r.exports=u}}),DY=de({"src/traces/cone/defaults.js"(e,r){"use strict";var t=Qt(),i=hu(),a=i7();r.exports=function(s,l,n,u){function c(_,v){return t.coerce(s,l,a,_,v)}var f=c("u"),h=c("v"),d=c("w"),p=c("x"),g=c("y"),m=c("z");if(!f||!f.length||!h||!h.length||!d||!d.length||!p||!p.length||!g||!g.length||!m||!m.length){l.visible=!1;return}var y=c("sizemode");c("sizeref",y==="raw"?1:.5),c("anchor"),c("lighting.ambient"),c("lighting.diffuse"),c("lighting.specular"),c("lighting.roughness"),c("lighting.fresnel"),c("lightposition.x"),c("lightposition.y"),c("lightposition.z"),i(s,l,u,c,{prefix:"",cLetter:"c"}),c("text"),c("hovertext"),c("hovertemplate"),c("hovertemplatefallback"),c("uhoverformat"),c("vhoverformat"),c("whoverformat"),c("xhoverformat"),c("yhoverformat"),c("zhoverformat"),l._length=null}}}),LY=de({"src/traces/cone/calc.js"(e,r){"use strict";var t=hc();r.exports=function(a,o){for(var s=o.u,l=o.v,n=o.w,u=Math.min(o.x.length,o.y.length,o.z.length,s.length,l.length,n.length),c=-1/0,f=1/0,h=0;h<u;h++){var d=s[h],p=l[h],g=n[h],m=Math.sqrt(d*d+p*p+g*g);c=Math.max(c,m),f=Math.min(f,m)}o._len=u,o._normMax=c,t(a,o,{vals:[f,c],containerStr:"",cLetter:"c"})}}}),FY=de({"src/traces/cone/convert.js"(e,r){"use strict";var t=ku().gl_cone3d,i=ku().gl_cone3d.createConeMesh,a=Qt().simpleMap,o=Lp().parseColorScale,s=ks().extractOpts,l=Qt().isArrayOrTypedArray,n=I1();function u(m,y){this.scene=m,this.uid=y,this.mesh=null,this.data=null}var c=u.prototype;c.handlePick=function(m){if(m.object===this.mesh){var y=m.index=m.data.index,_=this.data.x[y],v=this.data.y[y],x=this.data.z[y],S=this.data.u[y],M=this.data.v[y],C=this.data.w[y];m.traceCoordinate=[_,v,x,S,M,C,Math.sqrt(S*S+M*M+C*C)];var w=this.data.hovertext||this.data.text;return l(w)&&w[y]!==void 0?m.textLabel=w[y]:w&&(m.textLabel=w),!0}};var f={xaxis:0,yaxis:1,zaxis:2},h={tip:1,tail:0,cm:.25,center:.5},d={tip:1,tail:1,cm:.75,center:.5};function p(m,y){var _=m.fullSceneLayout,v=m.dataScale,x={};function S(A,b){var E=_[b],T=v[f[b]];return a(A,function(F){return E.d2l(F)*T})}x.vectors=n(S(y.u,"xaxis"),S(y.v,"yaxis"),S(y.w,"zaxis"),y._len),x.positions=n(S(y.x,"xaxis"),S(y.y,"yaxis"),S(y.z,"zaxis"),y._len);var M=s(y);x.colormap=o(y),x.vertexIntensityBounds=[M.min/y._normMax,M.max/y._normMax],x.coneOffset=h[y.anchor];var C=y.sizemode;C==="scaled"?x.coneSize=y.sizeref||.5:C==="absolute"?x.coneSize=y.sizeref&&y._normMax?y.sizeref/y._normMax:.5:C==="raw"&&(x.coneSize=y.sizeref),x.coneSizemode=C;var w=t(x),k=y.lightposition;return w.lightPosition=[k.x,k.y,k.z],w.ambient=y.lighting.ambient,w.diffuse=y.lighting.diffuse,w.specular=y.lighting.specular,w.roughness=y.lighting.roughness,w.fresnel=y.lighting.fresnel,w.opacity=y.opacity,y._pad=d[y.anchor]*w.vectorScale*w.coneScale*y._normMax,w}c.update=function(m){this.data=m;var y=p(this.scene,m);this.mesh.update(y)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};function g(m,y){var _=m.glplot.gl,v=p(m,y),x=i(_,v),S=new u(m,y.uid);return S.mesh=x,S.data=y,x._trace=S,m.glplot.add(x),S}r.exports=g}}),PY=de({"src/traces/cone/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"cone",basePlotModule:S0(),categories:["gl3d","showLegend"],attributes:i7(),supplyDefaults:DY(),colorbar:{min:"cmin",max:"cmax"},calc:LY(),plot:FY(),eventData:function(t,i){return t.norm=i.traceCoordinate[6],t},meta:{}}}}),IY=de({"lib/cone.js"(e,r){"use strict";r.exports=PY()}}),a7=de({"src/traces/streamtube/attributes.js"(e,r){"use strict";var t=cs(),i=Ns().axisHoverFormat,{hovertemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=P1(),l=ri(),n=fn().extendFlat,u={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},starts:{x:{valType:"data_array",editType:"calc"},y:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},editType:"calc"},maxdisplayed:{valType:"integer",min:0,dflt:1e3,editType:"calc"},sizeref:{valType:"number",editType:"calc",min:0,dflt:1},text:{valType:"string",dflt:"",editType:"calc"},hovertext:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["tubex","tubey","tubez","tubeu","tubev","tubew","norm","divergence"]}),hovertemplatefallback:o({editType:"calc"}),uhoverformat:i("u",1),vhoverformat:i("v",1),whoverformat:i("w",1),xhoverformat:i("x"),yhoverformat:i("y"),zhoverformat:i("z"),showlegend:n({},l.showlegend,{dflt:!1})};n(u,t("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"}));var c=["opacity","lightposition","lighting"];c.forEach(function(f){u[f]=s[f]}),u.hoverinfo=n({},l.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","divergence","text","name"],dflt:"x+y+z+norm+text+name"}),r.exports=u}}),RY=de({"src/traces/streamtube/defaults.js"(e,r){"use strict";var t=Qt(),i=hu(),a=a7();r.exports=function(s,l,n,u){function c(y,_){return t.coerce(s,l,a,y,_)}var f=c("u"),h=c("v"),d=c("w"),p=c("x"),g=c("y"),m=c("z");if(!f||!f.length||!h||!h.length||!d||!d.length||!p||!p.length||!g||!g.length||!m||!m.length){l.visible=!1;return}c("starts.x"),c("starts.y"),c("starts.z"),c("maxdisplayed"),c("sizeref"),c("lighting.ambient"),c("lighting.diffuse"),c("lighting.specular"),c("lighting.roughness"),c("lighting.fresnel"),c("lightposition.x"),c("lightposition.y"),c("lightposition.z"),i(s,l,u,c,{prefix:"",cLetter:"c"}),c("text"),c("hovertext"),c("hovertemplate"),c("hovertemplatefallback"),c("uhoverformat"),c("vhoverformat"),c("whoverformat"),c("xhoverformat"),c("yhoverformat"),c("zhoverformat"),l._length=null}}}),zY=de({"src/traces/streamtube/convert.js"(e,r){"use strict";var t=ku().gl_streamtube3d,i=t.createTubeMesh,a=Qt(),o=Lp().parseColorScale,s=ks().extractOpts,l=I1(),n={xaxis:0,yaxis:1,zaxis:2};function u(g,m){this.scene=g,this.uid=m,this.mesh=null,this.data=null}var c=u.prototype;c.handlePick=function(g){var m=this.scene.fullSceneLayout,y=this.scene.dataScale;function _(S,M){var C=m[M],w=y[n[M]];return C.l2c(S)/w}if(g.object===this.mesh){var v=g.data.position,x=g.data.velocity;return g.traceCoordinate=[_(v[0],"xaxis"),_(v[1],"yaxis"),_(v[2],"zaxis"),_(x[0],"xaxis"),_(x[1],"yaxis"),_(x[2],"zaxis"),g.data.intensity*this.data._normMax,g.data.divergence],g.textLabel=this.data.hovertext||this.data.text,!0}};function f(g){var m=g.length,y;return m>2?y=g.slice(1,m-1):m===2?y=[(g[0]+g[1])/2]:y=g,y}function h(g){var m=g.length;return m===1?[.5,.5]:[g[1]-g[0],g[m-1]-g[m-2]]}function d(g,m){var y=g.fullSceneLayout,_=g.dataScale,v=m._len,x={};function S(J,N){var H=y[N],$=_[n[N]];return a.simpleMap(J,function(U){return H.d2l(U)*$})}if(x.vectors=l(S(m._u,"xaxis"),S(m._v,"yaxis"),S(m._w,"zaxis"),v),!v)return{positions:[],cells:[]};var M=S(m._Xs,"xaxis"),C=S(m._Ys,"yaxis"),w=S(m._Zs,"zaxis");x.meshgrid=[M,C,w],x.gridFill=m._gridFill;var k=m._slen;if(k)x.startingPositions=l(S(m._startsX,"xaxis"),S(m._startsY,"yaxis"),S(m._startsZ,"zaxis"));else{for(var A=C[0],b=f(M),E=f(w),T=new Array(b.length*E.length),F=0,D=0;D<b.length;D++)for(var R=0;R<E.length;R++)T[F++]=[b[D],A,E[R]];x.startingPositions=T}x.colormap=o(m),x.tubeSize=m.sizeref,x.maxLength=m.maxdisplayed;var P=S(m._xbnds,"xaxis"),z=S(m._ybnds,"yaxis"),I=S(m._zbnds,"zaxis"),L=h(M),B=h(C),O=h(w),G=[[P[0]-L[0],z[0]-B[0],I[0]-O[0]],[P[1]+L[1],z[1]+B[1],I[1]+O[1]]],W=t(x,G),X=s(m);W.vertexIntensityBounds=[X.min/m._normMax,X.max/m._normMax];var Z=m.lightposition;return W.lightPosition=[Z.x,Z.y,Z.z],W.ambient=m.lighting.ambient,W.diffuse=m.lighting.diffuse,W.specular=m.lighting.specular,W.roughness=m.lighting.roughness,W.fresnel=m.lighting.fresnel,W.opacity=m.opacity,m._pad=W.tubeScale*m.sizeref*2,W}c.update=function(g){this.data=g;var m=d(this.scene,g);this.mesh.update(m)},c.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};function p(g,m){var y=g.glplot.gl,_=d(g,m),v=i(y,_),x=new u(g,m.uid);return x.mesh=v,x.data=m,v._trace=x,g.glplot.add(v),x}r.exports=p}}),BY=de({"src/traces/streamtube/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"streamtube",basePlotModule:S0(),categories:["gl3d","showLegend"],attributes:a7(),supplyDefaults:RY(),colorbar:{min:"cmin",max:"cmax"},calc:g4().calc,plot:zY(),eventData:function(t,i){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=i.traceCoordinate[3],t.tubev=i.traceCoordinate[4],t.tubew=i.traceCoordinate[5],t.norm=i.traceCoordinate[6],t.divergence=i.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}}}),OY=de({"lib/streamtube.js"(e,r){"use strict";r.exports=BY()}}),R1=de({"src/traces/scattergeo/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=Kd(),s=tl(),l=ri(),n=cs(),u=fu().dash,c=fn().extendFlat,f=Ps().overrideAll,h=s.marker,d=s.line,p=h.line;r.exports=f({lon:{valType:"data_array"},lat:{valType:"data_array"},locations:{valType:"data_array"},locationmode:{valType:"enumerated",values:["ISO-3","USA-states","country names","geojson-id"],dflt:"ISO-3"},geojson:{valType:"any",editType:"calc"},featureidkey:{valType:"string",editType:"calc",dflt:"id"},mode:c({},s.mode,{dflt:"markers"}),text:c({},s.text,{}),texttemplate:i({editType:"plot"},{keys:["lat","lon","location","text"]}),texttemplatefallback:a({editType:"plot"}),hovertext:c({},s.hovertext,{}),textfont:s.textfont,textposition:s.textposition,line:{color:d.color,width:d.width,dash:u},connectgaps:s.connectgaps,marker:c({symbol:h.symbol,opacity:h.opacity,angle:h.angle,angleref:c({},h.angleref,{values:["previous","up","north"]}),standoff:h.standoff,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,colorbar:h.colorbar,line:c({width:p.width,dash:p.dash},n("marker.line")),gradient:h.gradient},n("marker")),fill:{valType:"enumerated",values:["none","toself"],dflt:"none"},fillcolor:o(),selected:s.selected,unselected:s.unselected,hoverinfo:c({},l.hoverinfo,{flags:["lon","lat","location","text","name"]}),hovertemplate:t(),hovertemplatefallback:a()},"calc","nested")}}),NY=de({"src/traces/scattergeo/defaults.js"(e,r){"use strict";var t=Qt(),i=bs(),a=Nh(),o=yd(),s=_d(),l=Jd(),n=R1();r.exports=function(c,f,h,d){function p(M,C){return t.coerce(c,f,n,M,C)}var g=p("locations"),m;if(g&&g.length){var y=p("geojson"),_;(typeof y=="string"&&y!==""||t.isPlainObject(y))&&(_="geojson-id");var v=p("locationmode",_);v==="geojson-id"&&p("featureidkey"),m=g.length}else{var x=p("lon")||[],S=p("lat")||[];m=Math.min(x.length,S.length)}if(!m){f.visible=!1;return}f._length=m,p("text"),p("hovertext"),p("hovertemplate"),p("hovertemplatefallback"),p("mode"),i.hasMarkers(f)&&a(c,f,h,d,p,{gradient:!0}),i.hasLines(f)&&(o(c,f,h,d,p),p("connectgaps")),i.hasText(f)&&(p("texttemplate"),p("texttemplatefallback"),s(c,f,d,p)),p("fill"),f.fill!=="none"&&l(c,f,h,p),t.coerceSelectionMarkerOpacity(f,p)}}}),jY=de({"src/traces/scattergeo/format_labels.js"(e,r){"use strict";var t=nn();r.exports=function(a,o,s){var l={},n=s[o.geo]._subplot,u=n.mockAxis,c=a.lonlat;return l.lonLabel=t.tickText(u,u.c2l(c[0]),!0).text,l.latLabel=t.tickText(u,u.c2l(c[1]),!0).text,l}}}),n7=de({"src/traces/scattergeo/calc.js"(e,r){"use strict";var t=da(),i=cn().BADNUM,a=jh(),o=Qd(),s=nh(),l=Qt().isArrayOrTypedArray,n=Qt()._;function u(c){return c&&typeof c=="string"}r.exports=function(f,h){var d=l(h.locations),p=d?h.locations.length:h._length,g=new Array(p),m;h.geojson?m=function(M){return u(M)||t(M)}:m=u;for(var y=0;y<p;y++){var _=g[y]={};if(d){var v=h.locations[y];_.loc=m(v)?v:null}else{var x=h.lon[y],S=h.lat[y];t(x)&&t(S)?_.lonlat=[+x,+S]:_.lonlat=[i,i]}}return o(g,h),a(f,h),s(g,h),p&&(g[0].t={labels:{lat:n(f,"lat:")+" ",lon:n(f,"lon:")+" "}}),g}}}),m_=de({"src/plots/geo/constants.js"(e){"use strict";e.projNames={airy:"airy",aitoff:"aitoff","albers usa":"albersUsa",albers:"albers",august:"august","azimuthal equal area":"azimuthalEqualArea","azimuthal equidistant":"azimuthalEquidistant",baker:"baker",bertin1953:"bertin1953",boggs:"boggs",bonne:"bonne",bottomley:"bottomley",bromley:"bromley",collignon:"collignon","conic conformal":"conicConformal","conic equal area":"conicEqualArea","conic equidistant":"conicEquidistant",craig:"craig",craster:"craster","cylindrical equal area":"cylindricalEqualArea","cylindrical stereographic":"cylindricalStereographic",eckert1:"eckert1",eckert2:"eckert2",eckert3:"eckert3",eckert4:"eckert4",eckert5:"eckert5",eckert6:"eckert6",eisenlohr:"eisenlohr","equal earth":"equalEarth",equirectangular:"equirectangular",fahey:"fahey","foucaut sinusoidal":"foucautSinusoidal",foucaut:"foucaut",ginzburg4:"ginzburg4",ginzburg5:"ginzburg5",ginzburg6:"ginzburg6",ginzburg8:"ginzburg8",ginzburg9:"ginzburg9",gnomonic:"gnomonic","gringorten quincuncial":"gringortenQuincuncial",gringorten:"gringorten",guyou:"guyou",hammer:"hammer",hill:"hill",homolosine:"homolosine",hufnagel:"hufnagel",hyperelliptical:"hyperelliptical",kavrayskiy7:"kavrayskiy7",lagrange:"lagrange",larrivee:"larrivee",laskowski:"laskowski",loximuthal:"loximuthal",mercator:"mercator",miller:"miller",mollweide:"mollweide","mt flat polar parabolic":"mtFlatPolarParabolic","mt flat polar quartic":"mtFlatPolarQuartic","mt flat polar sinusoidal":"mtFlatPolarSinusoidal","natural earth":"naturalEarth","natural earth1":"naturalEarth1","natural earth2":"naturalEarth2","nell hammer":"nellHammer",nicolosi:"nicolosi",orthographic:"orthographic",patterson:"patterson","peirce quincuncial":"peirceQuincuncial",polyconic:"polyconic","rectangular polyconic":"rectangularPolyconic",robinson:"robinson",satellite:"satellite","sinu mollweide":"sinuMollweide",sinusoidal:"sinusoidal",stereographic:"stereographic",times:"times","transverse mercator":"transverseMercator","van der grinten":"vanDerGrinten","van der grinten2":"vanDerGrinten2","van der grinten3":"vanDerGrinten3","van der grinten4":"vanDerGrinten4",wagner4:"wagner4",wagner6:"wagner6",wiechel:"wiechel","winkel tripel":"winkel3",winkel3:"winkel3"},e.axesNames=["lonaxis","lataxis"],e.lonaxisSpan={orthographic:180,"azimuthal equal area":360,"azimuthal equidistant":360,"conic conformal":180,gnomonic:160,stereographic:180,"transverse mercator":180,"*":360},e.lataxisSpan={"conic conformal":150,stereographic:179.5,"*":180},e.fitboundsIncompatible=new Set(["albers usa","craig","peirce quincuncial","satellite"]),e.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:"equirectangular",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:"albers usa"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:"conic conformal",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:"mercator",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:"mercator",projRotate:[0,0,0]},"north america":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:"conic conformal",projRotate:[-100,0,0],projParallels:[29.5,45.5]},"south america":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:"mercator",projRotate:[0,0,0]},antarctica:{lonaxisRange:[-180,180],lataxisRange:[-90,-60],projType:"equirectangular",projRotate:[0,0,0]},oceania:{lonaxisRange:[-180,180],lataxisRange:[-50,25],projType:"equirectangular",projRotate:[0,0,0]}},e.clipPad=.001,e.precision=.1,e.landColor="#F0DC82",e.waterColor="#3399FF",e.locationmodeToLayer={"ISO-3":"countries","USA-states":"subunits","country names":"countries"},e.sphereSVG={type:"Sphere"},e.fillLayers={ocean:1,land:1,lakes:1},e.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},e.layers=["bg","ocean","land","lakes","subunits","countries","coastlines","rivers","lataxis","lonaxis","frame","backplot","frontplot"],e.layersForChoropleth=["bg","ocean","land","subunits","countries","coastlines","lataxis","lonaxis","frame","backplot","rivers","lakes","frontplot"],e.layerNameToAdjective={ocean:"ocean",land:"land",lakes:"lake",subunits:"subunit",countries:"country",coastlines:"coastline",rivers:"river",frame:"frame"}}}),o7=de({"node_modules/topojson-client/dist/topojson-client.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.topojson=t.topojson||{}))})(e,function(t){"use strict";function i(S){return S}function a(S){if(S==null)return i;var M,C,w=S.scale[0],k=S.scale[1],A=S.translate[0],b=S.translate[1];return function(E,T){T||(M=C=0);var F=2,D=E.length,R=new Array(D);for(R[0]=(M+=E[0])*w+A,R[1]=(C+=E[1])*k+b;F<D;)R[F]=E[F],++F;return R}}function o(S){var M=a(S.transform),C,w=1/0,k=w,A=-w,b=-w;function E(F){F=M(F),F[0]<w&&(w=F[0]),F[0]>A&&(A=F[0]),F[1]<k&&(k=F[1]),F[1]>b&&(b=F[1])}function T(F){switch(F.type){case"GeometryCollection":F.geometries.forEach(T);break;case"Point":E(F.coordinates);break;case"MultiPoint":F.coordinates.forEach(E);break}}S.arcs.forEach(function(F){for(var D=-1,R=F.length,P;++D<R;)P=M(F[D],D),P[0]<w&&(w=P[0]),P[0]>A&&(A=P[0]),P[1]<k&&(k=P[1]),P[1]>b&&(b=P[1])});for(C in S.objects)T(S.objects[C]);return[w,k,A,b]}function s(S,M){for(var C,w=S.length,k=w-M;k<--w;)C=S[k],S[k++]=S[w],S[w]=C}function l(S,M){return typeof M=="string"&&(M=S.objects[M]),M.type==="GeometryCollection"?{type:"FeatureCollection",features:M.geometries.map(function(C){return n(S,C)})}:n(S,M)}function n(S,M){var C=M.id,w=M.bbox,k=M.properties==null?{}:M.properties,A=u(S,M);return C==null&&w==null?{type:"Feature",properties:k,geometry:A}:w==null?{type:"Feature",id:C,properties:k,geometry:A}:{type:"Feature",id:C,bbox:w,properties:k,geometry:A}}function u(S,M){var C=a(S.transform),w=S.arcs;function k(D,R){R.length&&R.pop();for(var P=w[D<0?~D:D],z=0,I=P.length;z<I;++z)R.push(C(P[z],z));D<0&&s(R,I)}function A(D){return C(D)}function b(D){for(var R=[],P=0,z=D.length;P<z;++P)k(D[P],R);return R.length<2&&R.push(R[0]),R}function E(D){for(var R=b(D);R.length<4;)R.push(R[0]);return R}function T(D){return D.map(E)}function F(D){var R=D.type,P;switch(R){case"GeometryCollection":return{type:R,geometries:D.geometries.map(F)};case"Point":P=A(D.coordinates);break;case"MultiPoint":P=D.coordinates.map(A);break;case"LineString":P=b(D.arcs);break;case"MultiLineString":P=D.arcs.map(b);break;case"Polygon":P=T(D.arcs);break;case"MultiPolygon":P=D.arcs.map(T);break;default:return null}return{type:R,coordinates:P}}return F(M)}function c(S,M){var C={},w={},k={},A=[],b=-1;M.forEach(function(F,D){var R=S.arcs[F<0?~F:F],P;R.length<3&&!R[1][0]&&!R[1][1]&&(P=M[++b],M[b]=F,M[D]=P)}),M.forEach(function(F){var D=E(F),R=D[0],P=D[1],z,I;if(z=k[R])if(delete k[z.end],z.push(F),z.end=P,I=w[P]){delete w[I.start];var L=I===z?z:z.concat(I);w[L.start=z.start]=k[L.end=I.end]=L}else w[z.start]=k[z.end]=z;else if(z=w[P])if(delete w[z.start],z.unshift(F),z.start=R,I=k[R]){delete k[I.end];var B=I===z?z:I.concat(z);w[B.start=I.start]=k[B.end=z.end]=B}else w[z.start]=k[z.end]=z;else z=[F],w[z.start=R]=k[z.end=P]=z});function E(F){var D=S.arcs[F<0?~F:F],R=D[0],P;return S.transform?(P=[0,0],D.forEach(function(z){P[0]+=z[0],P[1]+=z[1]})):P=D[D.length-1],F<0?[P,R]:[R,P]}function T(F,D){for(var R in F){var P=F[R];delete D[P.start],delete P.start,delete P.end,P.forEach(function(z){C[z<0?~z:z]=1}),A.push(P)}}return T(k,w),T(w,k),M.forEach(function(F){C[F<0?~F:F]||A.push([F])}),A}function f(S){return u(S,h.apply(this,arguments))}function h(S,M,C){var w,k,A;if(arguments.length>1)w=d(S,M,C);else for(k=0,w=new Array(A=S.arcs.length);k<A;++k)w[k]=k;return{type:"MultiLineString",arcs:c(S,w)}}function d(S,M,C){var w=[],k=[],A;function b(R){var P=R<0?~R:R;(k[P]||(k[P]=[])).push({i:R,g:A})}function E(R){R.forEach(b)}function T(R){R.forEach(E)}function F(R){R.forEach(T)}function D(R){switch(A=R,R.type){case"GeometryCollection":R.geometries.forEach(D);break;case"LineString":E(R.arcs);break;case"MultiLineString":case"Polygon":T(R.arcs);break;case"MultiPolygon":F(R.arcs);break}}return D(M),k.forEach(C==null?function(R){w.push(R[0].i)}:function(R){C(R[0].g,R[R.length-1].g)&&w.push(R[0].i)}),w}function p(S){for(var M=-1,C=S.length,w,k=S[C-1],A=0;++M<C;)w=k,k=S[M],A+=w[0]*k[1]-w[1]*k[0];return Math.abs(A)}function g(S){return u(S,m.apply(this,arguments))}function m(S,M){var C={},w=[],k=[];M.forEach(A);function A(T){switch(T.type){case"GeometryCollection":T.geometries.forEach(A);break;case"Polygon":b(T.arcs);break;case"MultiPolygon":T.arcs.forEach(b);break}}function b(T){T.forEach(function(F){F.forEach(function(D){(C[D=D<0?~D:D]||(C[D]=[])).push(T)})}),w.push(T)}function E(T){return p(u(S,{type:"Polygon",arcs:[T]}).coordinates[0])}return w.forEach(function(T){if(!T._){var F=[],D=[T];for(T._=1,k.push(F);T=D.pop();)F.push(T),T.forEach(function(R){R.forEach(function(P){C[P<0?~P:P].forEach(function(z){z._||(z._=1,D.push(z))})})})}}),w.forEach(function(T){delete T._}),{type:"MultiPolygon",arcs:k.map(function(T){var F=[],D;if(T.forEach(function(L){L.forEach(function(B){B.forEach(function(O){C[O<0?~O:O].length<2&&F.push(O)})})}),F=c(S,F),(D=F.length)>1)for(var R=1,P=E(F[0]),z,I;R<D;++R)(z=E(F[R]))>P&&(I=F[0],F[0]=F[R],F[R]=I,P=z);return F}).filter(function(T){return T.length>0})}}function y(S,M){for(var C=0,w=S.length;C<w;){var k=C+w>>>1;S[k]<M?C=k+1:w=k}return C}function _(S){var M={},C=S.map(function(){return[]});function w(L,B){L.forEach(function(O){O<0&&(O=~O);var G=M[O];G?G.push(B):M[O]=[B]})}function k(L,B){L.forEach(function(O){w(O,B)})}function A(L,B){L.type==="GeometryCollection"?L.geometries.forEach(function(O){A(O,B)}):L.type in b&&b[L.type](L.arcs,B)}var b={LineString:w,MultiLineString:k,Polygon:k,MultiPolygon:function(L,B){L.forEach(function(O){k(O,B)})}};S.forEach(A);for(var E in M)for(var T=M[E],F=T.length,D=0;D<F;++D)for(var R=D+1;R<F;++R){var P=T[D],z=T[R],I;(I=C[P])[E=y(I,z)]!==z&&I.splice(E,0,z),(I=C[z])[E=y(I,P)]!==P&&I.splice(E,0,P)}return C}function v(S){if(S==null)return i;var M,C,w=S.scale[0],k=S.scale[1],A=S.translate[0],b=S.translate[1];return function(E,T){T||(M=C=0);var F=2,D=E.length,R=new Array(D),P=Math.round((E[0]-A)/w),z=Math.round((E[1]-b)/k);for(R[0]=P-M,M=P,R[1]=z-C,C=z;F<D;)R[F]=E[F],++F;return R}}function x(S,M){if(S.transform)throw new Error("already quantized");if(!M||!M.scale){if(!((b=Math.floor(M))>=2))throw new Error("n must be \u22652");T=S.bbox||o(S);var C=T[0],w=T[1],k=T[2],A=T[3],b;M={scale:[k-C?(k-C)/(b-1):1,A-w?(A-w)/(b-1):1],translate:[C,w]}}else T=S.bbox;var E=v(M),T,F,D=S.objects,R={};function P(L){return E(L)}function z(L){var B;switch(L.type){case"GeometryCollection":B={type:"GeometryCollection",geometries:L.geometries.map(z)};break;case"Point":B={type:"Point",coordinates:P(L.coordinates)};break;case"MultiPoint":B={type:"MultiPoint",coordinates:L.coordinates.map(P)};break;default:return L}return L.id!=null&&(B.id=L.id),L.bbox!=null&&(B.bbox=L.bbox),L.properties!=null&&(B.properties=L.properties),B}function I(L){var B=0,O=1,G=L.length,W,X=new Array(G);for(X[0]=E(L[0],0);++B<G;)((W=E(L[B],B))[0]||W[1])&&(X[O++]=W);return O===1&&(X[O++]=[0,0]),X.length=O,X}for(F in D)R[F]=z(D[F]);return{type:"Topology",bbox:T,transform:M,objects:R,arcs:S.arcs.map(I)}}t.bbox=o,t.feature=l,t.merge=g,t.mergeArcs=m,t.mesh=f,t.meshArcs=h,t.neighbors=_,t.quantize=x,t.transform=a,t.untransform=v,Object.defineProperty(t,"__esModule",{value:!0})})}}),_4=de({"src/lib/topojson_utils.js"(e,r){"use strict";var t=r.exports={},i=m_().locationmodeToLayer,a=o7().feature;t.getTopojsonName=function(o){return[o.scope.replace(/ /g,"-"),"_",o.resolution.toString(),"m"].join("")},t.getTopojsonPath=function(o,s){return o+=o.endsWith("/")?"":"/",`${o}${s}.json`},t.getTopojsonFeatures=function(o,s){var l=i[o.locationmode],n=s.objects[l];return a(s,n).features}}}),g_=de({"src/lib/geojson_utils.js"(e){"use strict";var r=cn().BADNUM;e.calcTraceToLineCoords=function(t){for(var i=t[0].trace,a=i.connectgaps,o=[],s=[],l=0;l<t.length;l++){var n=t[l],u=n.lonlat;u[0]!==r?s.push(u):!a&&s.length>0&&(o.push(s),s=[])}return s.length>0&&o.push(s),o},e.makeLine=function(t){return t.length===1?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},e.makePolygon=function(t){if(t.length===1)return{type:"Polygon",coordinates:t};for(var i=new Array(t.length),a=0;a<t.length;a++)i[a]=[t[a]];return{type:"MultiPolygon",coordinates:i}},e.makeBlank=function(){return{type:"Point",coordinates:[]}}}}),UY=de({"node_modules/country-iso-search/dist/index.cjs"(e,r){"use strict";var t=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,s=(v,x)=>{for(var S in x)t(v,S,{get:x[S],enumerable:!0})},l=(v,x,S,M)=>{if(x&&typeof x=="object"||typeof x=="function")for(let C of a(x))!o.call(v,C)&&C!==S&&t(v,C,{get:()=>x[C],enumerable:!(M=i(x,C))||M.enumerable});return v},n=v=>l(t({},"__esModule",{value:!0}),v),u={};s(u,{COUNTRIES:()=>c,byAlpha2:()=>y,byAlpha3:()=>m,byM49:()=>_,createLookup:()=>h,lookup:()=>p,lookupAlpha3:()=>g,sanitize:()=>f}),r.exports=n(u);var c=[{iso3:"ABW",iso2:"AW",m49:"533",name:"Aruba",aliases:["\u{1F1E6}\u{1F1FC}","country of aruba","land aruba","pais aruba"]},{iso3:"AFG",iso2:"AF",m49:"004",name:"Afghanistan",aliases:["\u{1F1E6}\u{1F1EB}","affghanistan","affghanisthan","affghaunistan","afghania","afghanisthan","afghaunistan","afghaunistaun","afgoniston","de afghanistan islami jumhuriyat","owganystan","\u0430\u0444\u0493\u043E\u043D\u0438\u0441\u0442\u043E\u043D","\u0623\u0641\u063A\u0627\u0646\u0633\u062A\u0627\u0646","\u0627\u0641\u063A\u0627\u0646\u0633\u062A\u0627\u0646","\u062F \u0627\u0641\u063A\u0627\u0646\u0633\u062A\u0627\u0646 \u0627\u0633\u0644\u0627\u0645\u06CC \u062C\u0645\u0647\u0648\u0631\u06CC\u062A"]},{iso3:"AGO",iso2:"AO",m49:"024",name:"Angola",aliases:["\u{1F1E6}\u{1F1F4}","republic of angola","republica de angola"]},{iso3:"AIA",iso2:"AI",m49:"660",name:"Anguilla",aliases:["\u{1F1E6}\u{1F1EE}","malliouhana"]},{iso3:"ALA",iso2:"AX",m49:"248",name:"\xC5land Islands",aliases:["\u{1F1E6}\u{1F1FD}","aaland","aaland islands","ahvenanmaa","aland","aland isles","aland region","alands lan","landskapet aland"]},{iso3:"ALB",iso2:"AL",m49:"008",name:"Albania",aliases:["\u{1F1E6}\u{1F1F1}","peoples republic of albania","peoples socialist republic of albania","republic of albania","republika e shqiperise","shqiperi","shqiperia","shqiperise","socialist republic of albania"]},{iso3:"AND",iso2:"AD",m49:"020",name:"Andorra",aliases:["\u{1F1E6}\u{1F1E9}","el pais dels pirineus","les valls dandorra","principality of andorra","principality of the valleys of andorra","principat dandorra","valls dandorra"]},{iso3:"ARE",iso2:"AE",m49:"784",name:"United Arab Emirates",aliases:["\u{1F1E6}\u{1F1EA}","emirates","uae","\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A","\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629","\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062A","\u0627\u0644\u0627\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629","\u062F\u0648\u0644\u0629 \u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0645\u062A\u062D\u062F\u0629"]},{iso3:"ARG",iso2:"AR",m49:"032",name:"Argentina",aliases:["\u{1F1E6}\u{1F1F7}","argentine republic","nacion argentina","republic of argentina","republica argentina"]},{iso3:"ARM",iso2:"AM",m49:"051",name:"Armenia",aliases:["\u{1F1E6}\u{1F1F2}","hayastan","hayastani hanrapetutyun","republic of armenia","\u0570\u0561\u0575\u0561\u057D\u057F\u0561\u0576","\u0570\u0561\u0575\u0561\u057D\u057F\u0561\u0576\u056B \u0570\u0561\u0576\u0580\u0561\u057A\u0565\u057F\u0578\u0582\u0569\u0575\u0578\u0582\u0576","\u0570\u0561\u0575\u0584","\u0570\u0570"]},{iso3:"ASM",iso2:"AS",m49:"016",name:"American Samoa",aliases:["\u{1F1E6}\u{1F1F8}","amerika samoa","east samoa","samoa american","samoa united states","territory of american samoa","us samoa"]},{iso3:"ATA",iso2:"AQ",m49:"010",name:"Antarctica",aliases:["\u{1F1E6}\u{1F1F6}","antarctica treaty area"]},{iso3:"ATF",iso2:"TF",m49:"260",name:"French Southern Territories",aliases:["\u{1F1F9}\u{1F1EB}","taaf","terres australes et antarctiques francaises","terres australes francaises","terres australes francaises les","territoire des terres australes et antarctiques francaises"]},{iso3:"ATG",iso2:"AG",m49:"028",name:"Antigua and Barbuda",aliases:["\u{1F1E6}\u{1F1EC}","antigua","antigua barbuda","barbuda"]},{iso3:"AUS",iso2:"AU",m49:"036",name:"Australia",aliases:["\u{1F1E6}\u{1F1FA}","commonwealth of australia","new holland","new hollandia","nova hollandia"]},{iso3:"AUT",iso2:"AT",m49:"040",name:"Austria",aliases:["\u{1F1E6}\u{1F1F9}","osterreich","republic of austria","republik osterreich","zweite republik"]},{iso3:"AZE",iso2:"AZ",m49:"031",name:"Azerbaijan",aliases:["\u{1F1E6}\u{1F1FF}","az\u0259rbaycan","az\u0259rbaycan respublikas\u0131","republic of azerbaijan"]},{iso3:"BDI",iso2:"BI",m49:"108",name:"Burundi",aliases:["\u{1F1E7}\u{1F1EE}","gouvernement du burundi","la republique du burundi","republic of burundi","republika yu burundi","republika yuburundi","republique du burundi","repuburika yuburundi","uburundi"]},{iso3:"BEL",iso2:"BE",m49:"056",name:"Belgium",aliases:["\u{1F1E7}\u{1F1EA}","belg","belgie","belgien","belgique","kingdom of belgium","konigreich belgien","koninkrijk belgie","royaume de belgique"]},{iso3:"BEN",iso2:"BJ",m49:"204",name:"Benin",aliases:["\u{1F1E7}\u{1F1EF}","dahomey","la republique du benin","republic of benin","republique du benin"]},{iso3:"BES",iso2:"BQ",m49:"535",name:"Bonaire, Sint Eustatius and Saba",aliases:["\u{1F1E7}\u{1F1F6}","bes eilanden","bes islands","bijzondere gemeente","bonaire","bonaire saint eustatius and saba","bonaire sint eustatius en saba","caraibisch nederland","caribbean netherlands","caribisch nederland","hulanda karibense","islanan bes","netherlands antilles","saba","sint eustatius"]},{iso3:"BFA",iso2:"BF",m49:"854",name:"Burkina Faso",aliases:["\u{1F1E7}\u{1F1EB}","republic of burkina faso","republic of upper volta"]},{iso3:"BGD",iso2:"BD",m49:"050",name:"Bangladesh",aliases:["\u{1F1E7}\u{1F1E9}","bangla desh","east pakistan","gonaoprojatontri bangladesh","peoples republic of bangladesh","\u0997\u09A3\u09AA\u09CD\u09B0\u099C\u09BE\u09A4\u09A8\u09CD\u09A4\u09CD\u09B0\u09C0 \u09AC\u09BE\u0982\u09B2\u09BE\u09A6\u09C7\u09B6","\u09AC\u09BE\u0982\u09B2\u09BE \u09A6\u09C7\u09B6","\u09AC\u09BE\u0982\u09B2\u09BE\u09A6\u09C7\u09B6","\u09AC\u09BF\u09A1\u09BF"]},{iso3:"BGR",iso2:"BG",m49:"100",name:"Bulgaria",aliases:["\u{1F1E7}\u{1F1EC}","bulgarian republic","republic of bulgaria","republika bulgaria","republika bulgariya","\u0431\u0433","\u0431\u044A\u043B\u0433\u0430\u0440\u0438\u044F","\u0440\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u0431\u044A\u043B\u0433\u0430\u0440\u0438\u044F"]},{iso3:"BHR",iso2:"BH",m49:"048",name:"Bahrain",aliases:["\u{1F1E7}\u{1F1ED}","bahrein islands","kingdom of bahrain","\u0627\u0644\u0628\u062D\u0631\u064A\u0646","\u062F\u0648\u0644\u0629 \u0627\u0644\u0628\u062D\u0631\u064A\u0646","\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0628\u062D\u0631\u064A\u0646"]},{iso3:"BHS",iso2:"BS",m49:"044",name:"Bahamas",aliases:["\u{1F1E7}\u{1F1F8}","bahama islands","bahamas the","commonwealth of the bahamas"]},{iso3:"BIH",iso2:"BA",m49:"070",name:"Bosnia and Herzegovina",aliases:["\u{1F1E7}\u{1F1E6}","bosna","bosna i hercegovina","bosnia","bosnia and hercegovina","bosnia herzegovina","hercegovina","herzegovina","\u0431\u0438\u0445","\u0431\u043E\u0441\u043D\u0430","\u0431\u043E\u0441\u043D\u0430 \u0438 \u0445\u0435\u0440\u0446\u0435\u0433\u043E\u0432\u0438\u043D\u0430","\u0431\u0445"]},{iso3:"BLM",iso2:"BL",m49:"652",name:"Saint Barth\xE9lemy",aliases:["\u{1F1E7}\u{1F1F1}","collectivite doutre mer de saint barthelemy","collectivite territoriale de saint barthelemy","collectivity of saint barthelemy","saint barth","saint barths","saint barts","saint bartz"]},{iso3:"BLR",iso2:"BY",m49:"112",name:"Belarus",aliases:["\u{1F1E7}\u{1F1FE}","republic of belarus","respublika belarus","respublika byelarus","\u0431\u0435\u043B\u0430\u0440\u0443\u0441\u043A\u0430\u044F \u0440\u044D\u0441\u043F\u0443\u0431\u043B\u0456\u043A\u0430","\u0431\u0435\u043B\u0430\u0440\u0443\u0441\u044C","\u0431\u0435\u043B\u0430\u044F \u0440\u0443\u0441\u044C","\u0431\u0435\u043B\u043E\u0440\u0443\u0441\u0441\u0438\u044F","\u0440\u0431","\u0440\u0435\u0441\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u0431\u0435\u043B\u0430\u0440\u0443\u0441\u044C","\u0440\u044D\u0441\u043F\u0443\u0431\u043B\u0456\u043A\u0430 \u0431\u0435\u043B\u0430\u0440\u0443\u0441\u044C"]},{iso3:"BLZ",iso2:"BZ",m49:"084",name:"Belize",aliases:["\u{1F1E7}\u{1F1FF}"]},{iso3:"BMU",iso2:"BM",m49:"060",name:"Bermuda",aliases:["\u{1F1E7}\u{1F1F2}","barmuda","barmuda i","barmuda isl","barmuda islands","barmudas","bermoothes","bermuda islands","bermudas","bermudian islands","colony of bermuda","devils isles","isle of devils","somers islands","somers isles","summers isles","territory of bermuda","virgineola"]},{iso3:"BOL",iso2:"BO",m49:"068",name:"Bolivia (Plurinational State of)",aliases:["\u{1F1E7}\u{1F1F4}","bolivia","bulibiya","estado plurinacional de bolivia","plurinational state of bolivia","puliwya","republic of bolivia","republica de bolivia","volivia","wuliwiya","wuliwya"]},{iso3:"BRA",iso2:"BR",m49:"076",name:"Brazil",aliases:["\u{1F1E7}\u{1F1F7}","brasil","federative republic of brazil","pindorama","republica federativa do brasil"]},{iso3:"BRB",iso2:"BB",m49:"052",name:"Barbados",aliases:["\u{1F1E7}\u{1F1E7}","barbadoes"]},{iso3:"BRN",iso2:"BN",m49:"096",name:"Brunei Darussalam",aliases:["\u{1F1E7}\u{1F1F3}","brunei","nation of brunei the abode of peace","negara brunei darussalam"]},{iso3:"BTN",iso2:"BT",m49:"064",name:"Bhutan",aliases:["\u{1F1E7}\u{1F1F9}","kingdom of bhutan","\u0F60\u0F56\u0FB2\u0F74\u0F42","\u0F60\u0F56\u0FB2\u0F74\u0F42\u0F0B\u0F61\u0F74\u0F63\u0F0B","\u0F60\u0F56\u0FB2\u0F74\u0F42\u0F61\u0F74\u0F63\u0F0B\u0F0B"]},{iso3:"BVT",iso2:"BV",m49:"074",name:"Bouvet Island",aliases:["\u{1F1E7}\u{1F1FB}"]},{iso3:"BWA",iso2:"BW",m49:"072",name:"Botswana",aliases:["\u{1F1E7}\u{1F1FC}","lefatshe la botswana","republic of botswana"]},{iso3:"CAF",iso2:"CF",m49:"140",name:"Central African Republic",aliases:["\u{1F1E8}\u{1F1EB}","centrafricaine republique","centrafrique","central africa","kodorosese ti beafrika","la republique","rep centrafrique","republique centrafricaine"]},{iso3:"CAN",iso2:"CA",m49:"124",name:"Canada",aliases:["\u{1F1E8}\u{1F1E6}","le canada"]},{iso3:"CCK",iso2:"CC",m49:"166",name:"Cocos (Keeling) Islands",aliases:["\u{1F1E8}\u{1F1E8}","cocos islands","keeling islands","territory of the cocos keeling islands"]},{iso3:"CHE",iso2:"CH",m49:"756",name:"Switzerland",aliases:["\u{1F1E8}\u{1F1ED}","confederation helvetique","confederation suisse","confederazione elvetica","confederazione svizzera","confederaziun svizra","confoederatio helvetica","conf\u0153deratio helvetica","eidgenossenschaft","elvezia","helvetie","la confederation suisse","schweiz","schweizerische eidgenossenschaft","suisse","svizra","svizzera","swiss","swiss confederation"]},{iso3:"CHL",iso2:"CL",m49:"152",name:"Chile",aliases:["\u{1F1E8}\u{1F1F1}","republic of chile","republica de chile"]},{iso3:"CHN",iso2:"CN",m49:"156",name:"China",aliases:["\u{1F1E8}\u{1F1F3}","china pr","peoples republic of china","pr china","prc","\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD","\u4E2D\u56FD"]},{iso3:"CIV",iso2:"CI",m49:"384",name:"C\xF4te d'Ivoire",aliases:["\u{1F1E8}\u{1F1EE}","cote ivoire","ivory coast","republic of cote divoire","republic of ivory coast","republic of the ivory coast","republique de cote divoire"]},{iso3:"CMR",iso2:"CM",m49:"120",name:"Cameroon",aliases:["\u{1F1E8}\u{1F1F2}","cameroun","la republique du cameroun","republic of cameroon","republique du cameroun"]},{iso3:"COD",iso2:"CD",m49:"180",name:"Democratic Republic of the Congo",aliases:["\u{1F1E8}\u{1F1E9}","congo belge","congo democratic republic of the","congo kinshasa","dem rep congo","dem republic of congo","dem republic of the congo","democratic republic of congo","dr congo","drc","rd congo","rep demcongo","republic of the congo","republique democratique du congo","republique du zaire","zaire"]},{iso3:"COG",iso2:"CG",m49:"178",name:"Congo",aliases:["\u{1F1E8}\u{1F1EC}","congo brazza","congo brazzaville","congo republic","rep congo","republic of congo","republique du congo"]},{iso3:"COK",iso2:"CK",m49:"184",name:"Cook Islands",aliases:["\u{1F1E8}\u{1F1F0}","cook group","hervey islands"]},{iso3:"COL",iso2:"CO",m49:"170",name:"Colombia",aliases:["\u{1F1E8}\u{1F1F4}","republic of colombia","republica de colombia"]},{iso3:"COM",iso2:"KM",m49:"174",name:"Comoros",aliases:["\u{1F1F0}\u{1F1F2}","comores","comores archipel","etat comorien","lunion des comores","republique des comores","republique federale et islamique des comores","republique federale islamique des comores","territoire des comores","union des comores","union of the comoros","\u0625\u062A\u062D\u0627\u062F \u0627\u0644\u0642\u0645\u0631","\u0627\u062A\u062D\u0627\u062F \u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631","\u0627\u0644\u0627\u062A\u062D\u0627\u062F \u0627\u0644\u0642\u0645\u0631\u064A","\u0627\u0644\u0642\u0645\u0631","\u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0642\u0645\u0631 \u0627\u0644\u0645\u062A\u062D\u062F\u0629","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631 \u0627\u0644\u0627\u062A\u062D\u0627\u062F\u064A\u0629 \u0627\u0644\u0625\u0633\u0644\u0627\u0645\u064A\u0629","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u062C\u0632\u0631\u0627\u0644\u0642\u0645\u0631 \u0627\u0644\u0645\u062A\u062D\u062F\u0629"]},{iso3:"CPV",iso2:"CV",m49:"132",name:"Cabo Verde",aliases:["\u{1F1E8}\u{1F1FB}","cape verde","cape verde islands","kab verd","kabu verdi","kauberdi","republic of cabo verde","republic of cape verde","republica de cabo verde"]},{iso3:"CRI",iso2:"CR",m49:"188",name:"Costa Rica",aliases:["\u{1F1E8}\u{1F1F7}","republic of costa rica","republica de costa rica"]},{iso3:"CUB",iso2:"CU",m49:"192",name:"Cuba",aliases:["\u{1F1E8}\u{1F1FA}","isla juana","republic of cuba","republica de cuba"]},{iso3:"CUW",iso2:"CW",m49:"531",name:"Cura\xE7ao",aliases:["\u{1F1E8}\u{1F1FC}","corsou","corsouw","corsow","country of curacao","curacau","curacoa","curazao","cura\u03C2ao","curocao","island territory of curacao","korsou","land curacao","pais korsou"]},{iso3:"CXR",iso2:"CX",m49:"162",name:"Christmas Island",aliases:["\u{1F1E8}\u{1F1FD}","christmas island other territories","christmas island other territories australia","territory of christmas island"]},{iso3:"CYM",iso2:"KY",m49:"136",name:"Cayman Islands",aliases:["\u{1F1F0}\u{1F1FE}","caymans"]},{iso3:"CYP",iso2:"CY",m49:"196",name:"Cyprus",aliases:["\u{1F1E8}\u{1F1FE}","greek administration of southern cyprus","greek cypriot state","guney k\u0131br\u0131s","guney k\u0131br\u0131s rum cumhuriyeti","guney k\u0131br\u0131s rum kesimi","guney k\u0131br\u0131s rum yonetimi","kipriaki dhimokratia","k\u0131br\u0131s","k\u0131br\u0131s cumhuriyeti","k\u0131br\u0131s rum kesimi","kypriaki dimokratia","kypros","republic of cyprus","\u03BA\u03C5\u03C0\u03C1\u03B9\u03B1\u03BA\u03B7 \u03B4\u03B7\u03BC\u03BF\u03BA\u03C1\u03B1\u03C4\u03B9\u03B1","\u03BA\u03C5\u03C0\u03C1\u03BF\u03C2"]},{iso3:"CZE",iso2:"CZ",m49:"203",name:"Czechia",aliases:["\u{1F1E8}\u{1F1FF}","ceska republika","ceske kraje","ceske uzemi","ceske zeme","cesko","cr","czech republic"]},{iso3:"DEU",iso2:"DE",m49:"276",name:"Germany",aliases:["\u{1F1E9}\u{1F1EA}","br deutschland","bundesrepublik","bundesrepublik deutschland","deutschland","federal republic of germany"]},{iso3:"DJI",iso2:"DJ",m49:"262",name:"Djibouti",aliases:["\u{1F1E9}\u{1F1EF}","la republique de djibouti","republic of djibouti","republique de djibouti","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u062C\u064A\u0628\u0648\u062A\u064A","\u062C\u064A\u0628\u0648\u062A\u064A"]},{iso3:"DMA",iso2:"DM",m49:"212",name:"Dominica",aliases:["\u{1F1E9}\u{1F1F2}","commonwealth of dominica","island of dominica","waitu kubuli"]},{iso3:"DNK",iso2:"DK",m49:"208",name:"Denmark",aliases:["\u{1F1E9}\u{1F1F0}","dania","danmark","denmark proper","kongeriget danmark","metropolitan denmark"]},{iso3:"DOM",iso2:"DO",m49:"214",name:"Dominican Republic",aliases:["\u{1F1E9}\u{1F1F4}","dominicana","domrep","haiti espanol","quisqueya","republica de santo domingo","republica dominicana","santo domingo"]},{iso3:"DZA",iso2:"DZ",m49:"012",name:"Algeria",aliases:["\u{1F1E9}\u{1F1FF}","peoples democratic republic of algeria","\u0627\u0644\u062C\u0632\u0627\u0626\u0631","\u0627\u0644\u062C\u0632\u0627\u064A\u0631","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u062C\u0632\u0627\u0626\u0631\u064A\u0629 \u0627\u0644\u062F\u064A\u0645\u0642\u0631\u0627\u0637\u064A\u0629 \u0627\u0644\u0634\u0639\u0628\u064A\u0629","\u0627\u0644\u062F\u0632\u0627\u064A\u0631","\u062F\u0632\u0627\u064A\u0631"]},{iso3:"ECU",iso2:"EC",m49:"218",name:"Ecuador",aliases:["\u{1F1EA}\u{1F1E8}","ecuadorian state","el ecuador","estado ecuatoriano","republic of ecuador","republic of equator","republic of the equator","republica del ecuador"]},{iso3:"EGY",iso2:"EG",m49:"818",name:"Egypt",aliases:["\u{1F1EA}\u{1F1EC}","arab rep egypt","arab republic of egypt","rep egypt","republic of egypt","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0645\u0635\u0631 \u0627\u0644\u0639\u0631\u0628\u064A\u0629","\u0645\u0635\u0631"]},{iso3:"ERI",iso2:"ER",m49:"232",name:"Eritrea",aliases:["\u{1F1EA}\u{1F1F7}","ertra","hagere ertra","hagere iertra","iertra","iritriya","state of eritrea","\u0625\u0631\u062A\u0631\u064A\u0627","\u0625\u0631\u064A\u062A\u0631\u064A\u0627","\u0627\u0631\u062A\u0631\u064A\u0627","\u0627\u0631\u062A\u064A\u0631\u064A\u0627","\u0627\u0631\u064A\u062A\u0631\u064A\u0627","\u062F\u0648\u0644\u0629 \u0625\u0631\u062A\u0631\u064A\u0627","\u062F\u0648\u0644\u0629 \u0625\u0631\u064A\u062A\u0631\u064A\u0627","\u1203\u1308\u1228 \u12A4\u122D\u1275\u122B","\u12A4\u122D\u1275\u122B"]},{iso3:"ESH",iso2:"EH",m49:"732",name:"Western Sahara",aliases:["\u{1F1EA}\u{1F1ED}","southern provinces","spanish sahara","west sahara"]},{iso3:"ESP",iso2:"ES",m49:"724",name:"Spain",aliases:["\u{1F1EA}\u{1F1F8}","espana","estado espanol","kingdom of spain","reino de espana"]},{iso3:"EST",iso2:"EE",m49:"233",name:"Estonia",aliases:["\u{1F1EA}\u{1F1EA}","eesti","eesti noukogude sotsialistlik vabariik","eesti vabariik","estland","republic of estonia"]},{iso3:"ETH",iso2:"ET",m49:"231",name:"Ethiopia",aliases:["\u{1F1EA}\u{1F1F9}","federal democratic republic of ethiopia","ityopiya","yeityopiya federalawi demokrasiyawi ripeblik","yeityopiya hizbawi dimokrasiyawi ripublik","\u12A2\u1275\u12EE\u1335\u12EB","\u12E8\u12A2\u1275\u12EE\u1335\u12EB \u134C\u12F4\u122B\u120B\u12CA \u12F4\u121E\u12AD\u122B\u1232\u12EB\u12CA \u122A\u1350\u1265\u120A\u12AD"]},{iso3:"FIN",iso2:"FI",m49:"246",name:"Finland",aliases:["\u{1F1EB}\u{1F1EE}","republic of finland","republiken finland","suomen tasavalta","suomi"]},{iso3:"FJI",iso2:"FJ",m49:"242",name:"Fiji",aliases:["\u{1F1EB}\u{1F1EF}","fiji ganarajya","matanitu ko viti","matanitu tugalala o viti","republic of fiji","republic of the fiji islands","viti"]},{iso3:"FLK",iso2:"FK",m49:"238",name:"Falkland Islands (Malvinas)",aliases:["\u{1F1EB}\u{1F1F0}","colony of the falkland islands","falkland islands","falklands","islas malvinas","malvinas","malvinas islands"]},{iso3:"FRA",iso2:"FR",m49:"250",name:"France",aliases:["\u{1F1EB}\u{1F1F7}","fr","french republic","la france","la republique francaise","lhexagone","republique francaise"]},{iso3:"FRO",iso2:"FO",m49:"234",name:"Faroe Islands",aliases:["\u{1F1EB}\u{1F1F4}","faer oer","f\xE6r\xF8","faeroe is","faeroe islands","faeroe isles","f\xE6r\xF8erne","faeroes","far oer","faroe island","faroe isles","faroes","faroese islands","f\xF8roya","f\xF8royar","f\xF8royum"]},{iso3:"FSM",iso2:"FM",m49:"583",name:"Micronesia (Federated States of)",aliases:["\u{1F1EB}\u{1F1F2}","fed sts micronesia","fed sts of micronesia","federated states of micronesia","federated states of micronesia fsm","micronesia"]},{iso3:"GAB",iso2:"GA",m49:"266",name:"Gabon",aliases:["\u{1F1EC}\u{1F1E6}","gabonese republic","la republique gabonaise","le gabon","republique du gabon","republique gabonaise"]},{iso3:"GBR",iso2:"GB",m49:"826",name:"United Kingdom of Great Britain and Northern Ireland",aliases:["\u{1F1EC}\u{1F1E7}","britain","england","great britain","great britain and northern ireland","northern ireland","scotland","uk","united kingdom","wales"]},{iso3:"GEO",iso2:"GE",m49:"268",name:"Georgia",aliases:["\u{1F1EC}\u{1F1EA}","georgia country","republic of georgia","sakartvelo","\u049B\u044B\u0440\u04AD\u0442\u04D9\u044B\u043B\u0430","\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD","\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD\u10E1 \u10E0\u10D4\u10E1\u10DE\u10E3\u10D1\u10DA\u10D8\u10D9\u10D0"]},{iso3:"GGY",iso2:"GG",m49:"831",name:"Guernsey",aliases:["\u{1F1EC}\u{1F1EC}","bailiwick of guernsey","bailliage de guernesey","bailliage de guernesi","giernesi","great britain guernsey","guernesey","lisia"]},{iso3:"GHA",iso2:"GH",m49:"288",name:"Ghana",aliases:["\u{1F1EC}\u{1F1ED}","republic of ghana"]},{iso3:"GIB",iso2:"GI",m49:"292",name:"Gibraltar",aliases:["\u{1F1EC}\u{1F1EE}","rock of gibraltar"]},{iso3:"GIN",iso2:"GN",m49:"324",name:"Guinea",aliases:["\u{1F1EC}\u{1F1F3}","guinee","guinee conakry","republic of guinea","republique de guinee"]},{iso3:"GLP",iso2:"GP",m49:"312",name:"Guadeloupe",aliases:["\u{1F1EC}\u{1F1F5}"]},{iso3:"GMB",iso2:"GM",m49:"270",name:"Gambia",aliases:["\u{1F1EC}\u{1F1F2}","islamic republic of the gambia","republic of the gambia"]},{iso3:"GNB",iso2:"GW",m49:"624",name:"Guinea-Bissau",aliases:["\u{1F1EC}\u{1F1FC}","guine bissau","republic of guinea bissau","republica da guine bissau"]},{iso3:"GNQ",iso2:"GQ",m49:"226",name:"Equatorial Guinea",aliases:["\u{1F1EC}\u{1F1F6}","guine equatorial","guinea ecuatorial","guinea espanola","guinee equat","guinee equatoriale","la republique de guinee equatoriale","posesiones espanolas del golfo de guinea","provincia de la guinea ecuatorial","republic of equatorial guinea","republica da guine equatorial","republica de guinea ecuatorial","territorios espanoles del golfo de guinea"]},{iso3:"GRC",iso2:"GR",m49:"300",name:"Greece",aliases:["\u{1F1EC}\u{1F1F7}","ellada","ellas","elliniki dhimokratia","elliniki dimokratia","greek republic","hellas","hellas greece","hellenic republic","vasilion tis ellados","\u03B4\u03B7\u03BC\u03BF\u03BA\u03C1\u03B1\u03C4\u03B9\u03B1 \u03C4\u03B7\u03C2 \u03B5\u03BB\u03BB\u03B1\u03B4\u03B1\u03C2","\u03B4\u03B7\u03BC\u03BF\u03BA\u03C1\u03B1\u03C4\u03B9\u03B1 \u03C4\u03B7\u03C2 \u03B5\u03BB\u03BB\u03B1\u03B4\u03BF\u03C2","\u03B5\u03BB\u03BB\u03B1\u03B4\u03B1","\u03B5\u03BB\u03BB\u03B1\u03C2","\u03B5\u03BB\u03BB\u03B1\u03C2 \u03B5\u03BB\u03BB\u03B1\u03B4\u03B1","\u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03B7 \u03B4\u03B7\u03BC\u03BF\u03BA\u03C1\u03B1\u03C4\u03B9\u03B1"]},{iso3:"GRD",iso2:"GD",m49:"308",name:"Grenada",aliases:["\u{1F1EC}\u{1F1E9}"]},{iso3:"GRL",iso2:"GL",m49:"304",name:"Greenland",aliases:["\u{1F1EC}\u{1F1F1}","kalaallit nunaat"]},{iso3:"GTM",iso2:"GT",m49:"320",name:"Guatemala",aliases:["\u{1F1EC}\u{1F1F9}","republic of guatemala","republica de guatemala"]},{iso3:"GUF",iso2:"GF",m49:"254",name:"French Guiana",aliases:["\u{1F1EC}\u{1F1EB}","fr 973","guiana","guiana france","guyane","guyane francaise","gwiyann","gwiyann franse","lagwiyann"]},{iso3:"GUM",iso2:"GU",m49:"316",name:"Guam",aliases:["\u{1F1EC}\u{1F1FA}","guahan","guam usa","islan guahan","island of guam","territory of guam"]},{iso3:"GUY",iso2:"GY",m49:"328",name:"Guyana",aliases:["\u{1F1EC}\u{1F1FE}","co operative republic of guyana","republic of guyana"]},{iso3:"HKG",iso2:"HK",m49:"344",name:"Hong Kong",aliases:["\u{1F1ED}\u{1F1F0}","hksar","hong kong sar","hong kong special administrative region","hong kong special administrative region of the peoples republic of china","hongkong"]},{iso3:"HMD",iso2:"HM",m49:"334",name:"Heard Island and McDonald Islands",aliases:["\u{1F1ED}\u{1F1F2}","heard","heard & mcdonald islands","heard and macdonald islands","heard island","himi","mcdonald","mcdonald island","territory of heard island and mcdonald islands"]},{iso3:"HND",iso2:"HN",m49:"340",name:"Honduras",aliases:["\u{1F1ED}\u{1F1F3}","guaymuras","higueras","honduran republic","republic of honduras","republica de honduras"]},{iso3:"HRV",iso2:"HR",m49:"191",name:"Croatia",aliases:["\u{1F1ED}\u{1F1F7}","hrvatska","republic of croatia","republika hrvatska"]},{iso3:"HTI",iso2:"HT",m49:"332",name:"Haiti",aliases:["\u{1F1ED}\u{1F1F9}","ayiti","haitian republic","la republique dhaiti","repiblik d ayiti","republic of haiti","republique dhaiti"]},{iso3:"HUN",iso2:"HU",m49:"348",name:"Hungary",aliases:["\u{1F1ED}\u{1F1FA}","a magyar koztarsasag","a magyar nepkoztarsasag","harmadik magyar koztarsasag","magyar koztarsasag","magyar nepkoztarsasag","magyarorszag","mo"]},{iso3:"IDN",iso2:"ID",m49:"360",name:"Indonesia",aliases:["\u{1F1EE}\u{1F1E9}","negara kesatuan republik indonesia","nkri","republic of indonesia","republik indonesia"]},{iso3:"IMN",iso2:"IM",m49:"833",name:"Isle of Man",aliases:["\u{1F1EE}\u{1F1F2}","ellan vannin","i man","i mann","i mannin","isle of mann","mann","mannin","manx"]},{iso3:"IND",iso2:"IN",m49:"356",name:"India",aliases:["\u{1F1EE}\u{1F1F3}","al hind","bharat","bharat ganarajya","bharata","bharatvarsh","hindoostan","hindustan","indostan","republic of india","tenjiku","tianzhu","\u0906\u0930\u094D\u092F\u0935\u0930\u094D\u0924","\u0907\u0902\u0921\u093F\u092F\u093E","\u0907\u0923\u094D\u0921\u093F\u092F\u093E","\u092D\u093E\u0930\u0924","\u092D\u093E\u0930\u0924 \u0917\u0923\u0930\u093E\u091C\u094D\u092F","\u092D\u093E\u0930\u0924\u0935\u0930\u094D\u0937","\u0939\u093F\u0902\u0926\u0941\u0938\u094D\u0924\u093E\u0928","\u0939\u093F\u0928\u094D\u0926\u0941\u0938\u094D\u0924\u093E\u0928","\u0939\u093F\u0928\u094D\u0926\u094B\u0938\u094D\u0924\u093E\u0928"]},{iso3:"IOT",iso2:"IO",m49:"086",name:"British Indian Ocean Territory",aliases:["\u{1F1EE}\u{1F1F4}","biot"]},{iso3:"IRL",iso2:"IE",m49:"372",name:"Ireland",aliases:["\u{1F1EE}\u{1F1EA}","eire","hibernia","irish republic","poblacht na heireann","republic of ireland","southern ireland"]},{iso3:"IRN",iso2:"IR",m49:"364",name:"Iran (Islamic Republic of)",aliases:["\u{1F1EE}\u{1F1F7}","iran","islamic rep iran","islamic republic of iran","persia","\u0627\u06CC\u0631\u0627\u0646","\u0627\u06CC\u0631\u0627\u0646\u0632\u0645\u06CC\u0646","\u067E\u0627\u0631\u0633","\u062C\u0645\u0647\u0648\u0631\u06CC \u0627\u0633\u0644\u0627\u0645\u06CC \u0627\u064A\u0631\u0627\u0646","\u062C\u0645\u0647\u0648\u0631\u06CC \u0627\u0633\u0644\u0627\u0645\u06CC \u0627\u06CC\u0631\u0627\u0646","\u0643\u0634\u0648\u0631 \u0634\u0627\u0647\u0646\u0634\u0627\u0647\u06CC \u0627\u064A\u0631\u0627\u0646"]},{iso3:"IRQ",iso2:"IQ",m49:"368",name:"Iraq",aliases:["\u{1F1EE}\u{1F1F6}","eraq","iraqe","komar i eraq","republic of iraq","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0639\u0631\u0627\u0642\u064A\u0629","\u0627\u0644\u0639\u0631\u0627\u0642","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0639\u0631\u0627\u0642","\u0639\u0631\u0627\u0642","\u0639\u06CE\u0631\u0627\u0642"]},{iso3:"ISL",iso2:"IS",m49:"352",name:"Iceland",aliases:["\u{1F1EE}\u{1F1F8}","icelandic republic","island","ly\xF0veldi\xF0 island","republic of iceland","ysland"]},{iso3:"ISR",iso2:"IL",m49:"376",name:"Israel",aliases:["\u{1F1EE}\u{1F1F1}","erez yisrael","medinat yisrael","state of israel","yisrael","\u05D9\u05E9\u05E8\u05D0\u05DC","\u05DE\u05D3\u05D9\u05E0\u05EA \u05D9\u05E9\u05E8\u05D0\u05DC"]},{iso3:"ITA",iso2:"IT",m49:"380",name:"Italy",aliases:["\u{1F1EE}\u{1F1F9}","il bel paese","italia","italian republic","repubblica italiana","republic of italy"]},{iso3:"JAM",iso2:"JM",m49:"388",name:"Jamaica",aliases:["\u{1F1EF}\u{1F1F2}","commonwealth of jamaica","jamieka","jomieka","jumieka"]},{iso3:"JEY",iso2:"JE",m49:"832",name:"Jersey",aliases:["\u{1F1EF}\u{1F1EA}","bailliage de jerri","bailliage de jersey","balliwick of jersey","i iersey","i jersey","iersey","iersey i","isle of jersey","jerri","jersey i","jersey island"]},{iso3:"JOR",iso2:"JO",m49:"400",name:"Jordan",aliases:["\u{1F1EF}\u{1F1F4}","giordania","hashemite kingdom of jordan","kingdom of jordan","state of jordan","yarden","\u0627\u0644\u0623\u0631\u062F\u0646","\u0627\u0644\u0627\u0631\u062F\u0646","\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0623\u0631\u062F\u0646\u064A\u0629 \u0627\u0644\u0647\u0627\u0634\u0645\u064A\u0629","\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0627\u0631\u062F\u0646\u064A\u0629 \u0627\u0644\u0647\u0627\u0634\u0645\u064A\u0629"]},{iso3:"JPN",iso2:"JP",m49:"392",name:"Japan",aliases:["\u{1F1EF}\u{1F1F5}","state of japan","\u3042\u304D\u3064\u3057\u307E","\u304A\u304A\u3084\u3057\u307E","\u3057\u304D\u3057\u307E","\u30B8\u30E3\u30D1\u30F3","\u3057\u3093\u3057\u3085\u3046","\u306B\u3063\u307D\u3093","\u306B\u3063\u307D\u3093\u3053\u304F","\u306B\u307B\u3093","\u306B\u307B\u3093\u3053\u304F","\u3072\u3044\u305A\u308B\u304F\u306B","\u3075\u305D\u3046","\u5927\u516B\u5DDE","\u6276\u6728\u4E4B\u5730","\u6276\u6851","\u6276\u6851\u56FD","\u6577\u5CF6","\u65E5\u51FA\u308B\u56FD","\u65E5\u672C","\u6991\u6728\u4E4B\u5730","\u745E\u7A42\u56FD","\u795E\u5DDE","\u79CB\u6D25\u5CF6","\u8466\u539F\u4E2D\u56FD"]},{iso3:"KAZ",iso2:"KZ",m49:"398",name:"Kazakhstan",aliases:["\u{1F1F0}\u{1F1FF}","qazaqstan","qazaqstan respublikasy","republic of kazakhstan","\u043A\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043D","\u049B\u0430\u0437\u0430\u049B\u0441\u0442\u0430\u043D","\u049B\u0430\u0437\u0430\u049B\u0441\u0442\u0430\u043D \u0440\u0435\u0441\u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0441\u044B","\u0440\u0435\u0441\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u043A\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043D","\u0440\u043A"]},{iso3:"KEN",iso2:"KE",m49:"404",name:"Kenya",aliases:["\u{1F1F0}\u{1F1EA}","jamhuri ya kenya","republic of kenya"]},{iso3:"KGZ",iso2:"KG",m49:"417",name:"Kyrgyzstan",aliases:["\u{1F1F0}\u{1F1EC}","kyrgyz republic","kyrgyz respublikasy","kyrgyzstan respublikasy","\u043A\u0440","\u043A\u044B\u0440\u0433\u044B\u0437 \u0440\u0435\u0441\u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0441\u044B","\u043A\u044B\u0440\u0433\u044B\u0437\u0441\u0442\u0430\u043D"]},{iso3:"KHM",iso2:"KH",m49:"116",name:"Cambodia",aliases:["\u{1F1F0}\u{1F1ED}","camboya","campuchia","kambodzha","kamboja","kampuchea","kingdom of cambodia","\u1780\u1798\u17D2\u1796\u17BB\u1787\u17B6","\u1796\u17D2\u179A\u17C7\u179A\u17B6\u1787\u17B6\u178E\u17B6\u1785\u1780\u17D2\u179A\u1780\u1798\u17D2\u1796\u17BB\u1787\u17B6"]},{iso3:"KIR",iso2:"KI",m49:"296",name:"Kiribati",aliases:["\u{1F1F0}\u{1F1EE}","republic of kiribati"]},{iso3:"KNA",iso2:"KN",m49:"659",name:"Saint Kitts and Nevis",aliases:["\u{1F1F0}\u{1F1F3}","federation of saint christopher and nevis","federation of saint kitts and nevis","kitts & nevis","nevis","saint christopher","saint christopher and nevis","saint kitts"]},{iso3:"KOR",iso2:"KR",m49:"410",name:"Republic of Korea",aliases:["\u{1F1F0}\u{1F1F7}","korea","korea republic","korea republic of","korea south","rep korea","s korea","south korea","taehan minguk","\uB0A8\uC870\uC120","\uB0A8\uD55C","\uB300\uD55C","\uB300\uD55C\uBBFC\uAD6D","\uCF54\uB9AC\uC544","\uD55C\uAD6D"]},{iso3:"KWT",iso2:"KW",m49:"414",name:"Kuwait",aliases:["\u{1F1F0}\u{1F1FC}","state of kuwait","\u0627\u0644\u0643\u0648\u064A\u062A","\u062F\u0648\u0644\u0629 \u0627\u0644\u0643\u0648\u064A\u062A"]},{iso3:"LAO",iso2:"LA",m49:"418",name:"Lao People's Democratic Republic",aliases:["\u{1F1F1}\u{1F1E6}","laos","sathalanalat paxathipatai paxaxon lao","\u0EAA\u0EB2\u0E97\u0EB2\u0EA5\u0EB0\u0E99\u0EB0\u0EA5\u0EB1\u0E94 \u0E9B\u0EB0\u0E8A\u0EB2\u0E97\u0EB4\u0E9B\u0EB0\u0EC4\u0E95 \u0E9B\u0EB0\u0E8A\u0EB2\u0E8A\u0EBB\u0E99\u0EA5\u0EB2\u0EA7","\u0E9B\u0EB0\u0EC0\u0E97\u0E94\u0EA5\u0EB2\u0EA7","\u0EA5\u0EB2\u0EA7"]},{iso3:"LBN",iso2:"LB",m49:"422",name:"Lebanon",aliases:["\u{1F1F1}\u{1F1E7}","lebanese republic","republic of lebanon","state of lebanon","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0644\u0628\u0646\u0627\u0646\u064A\u0629","\u0644\u0628\u0646\u0627\u0646"]},{iso3:"LBR",iso2:"LR",m49:"430",name:"Liberia",aliases:["\u{1F1F1}\u{1F1F7}","liber","republic of liberia"]},{iso3:"LBY",iso2:"LY",m49:"434",name:"Libya",aliases:["\u{1F1F1}\u{1F1FE}","state of libya","\u0627\u0644\u062C\u0645\u0627\u0647\u064A\u0631\u064A\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0644\u064A\u0628\u064A\u0629 \u0627\u0644\u0634\u0639\u0628\u064A\u0629 \u0627\u0644\u0625\u0634\u062A\u0631\u0627\u0643\u064A\u0629","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0644\u064A\u0628\u064A\u0629","\u0627\u0644\u0644\u064A\u0628\u064A","\u0627\u0644\u0644\u064A\u0628\u064A\u0629","\u0627\u0644\u0644\u064A\u0628\u064A\u0646","\u062F\u0648\u0644\u0629 \u0644\u064A\u0628\u064A\u0627","\u0644\u064A\u0628\u0628\u064A\u0627","\u0644\u064A\u0628\u064A","\u0644\u064A\u0628\u064A\u0627","\u0644\u064A\u0628\u064A\u0629"]},{iso3:"LCA",iso2:"LC",m49:"662",name:"Saint Lucia",aliases:["\u{1F1F1}\u{1F1E8}","hewanorra","iyonola"]},{iso3:"LIE",iso2:"LI",m49:"438",name:"Liechtenstein",aliases:["\u{1F1F1}\u{1F1EE}","furstentum lichtenstein","furstentum liechtenstein","principality of liechtenstein"]},{iso3:"LKA",iso2:"LK",m49:"144",name:"Sri Lanka",aliases:["\u{1F1F1}\u{1F1F0}","ceylan","ceylon","democratic socialist republic of sri lanka","ilankaic cananayaka cocalicak kutiyarcu","lankava","prajatantravadi samajavadi janarajaya sri lanka","serendib","srilanka","taprobane","\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8","\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8 \u0B9A\u0BA9\u0BA8\u0BBE\u0BAF\u0B95 \u0B9A\u0BCB\u0B9A\u0BB2\u0BBF\u0B9A\u0B95\u0BCD \u0B95\u0BC1\u0B9F\u0BBF\u0BAF\u0BB0\u0B9A\u0BC1","\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8 \u0B9A\u0BA9\u0BA8\u0BBE\u0BAF\u0B95 \u0B9A\u0BCB\u0BB7\u0BB2\u0BBF\u0B9A\u0B95\u0BCD \u0B95\u0BC1\u0B9F\u0BBF\u0BAF\u0BB0\u0B9A\u0BC1","\u0B88\u0BB4\u0BAE\u0BCD","\u0B9A\u0BBF\u0BB2\u0BCB\u0BA9\u0BCD","\u0DBD\u0D82\u0D9A\u0DCF\u0DC0","\u0DC1\u0DCA\u0DBB\u0DD3 \u0DBD\u0D82\u0D9A\u0DCF \u0DB4\u0DCA\u0DBB\u0DA2\u0DCF\u0DAD\u0DB1\u0DCA\u0DAD\u0DCA\u0DBB\u0DC0\u0DCF\u0DAF\u0DD3 \u0DC3\u0DB8\u0DCF\u0DA2\u0DC0\u0DCF\u0DAF\u0DD3 \u0DA2\u0DB1\u0DBB\u0DA2\u0DBA","\u0DC1\u0DCA\u0DBB\u0DD3 \u0DBD\u0D82\u0D9A\u0DCF\u0DC0","\u0DC1\u0DCA\u200D\u0DBB\u0DD3 \u0DBD\u0D82\u0D9A\u0DCF\u0DC0"]},{iso3:"LSO",iso2:"LS",m49:"426",name:"Lesotho",aliases:["\u{1F1F1}\u{1F1F8}","kingdom of lesotho","mmuso wa lesotho","mountain kingdom"]},{iso3:"LTU",iso2:"LT",m49:"440",name:"Lithuania",aliases:["\u{1F1F1}\u{1F1F9}","lietuva","lietuvos respublika","republic of lithuania"]},{iso3:"LUX",iso2:"LU",m49:"442",name:"Luxembourg",aliases:["\u{1F1F1}\u{1F1FA}","grand duche","grand duche de luxembourg","grand duchy of luxembourg","gro\xDFherzogtum luxemburg","groussherzogtum letzebuerg","le grand duche de luxembourg","letzebuerg","letzebuerger land","lux","luxemburg"]},{iso3:"LVA",iso2:"LV",m49:"428",name:"Latvia",aliases:["\u{1F1F1}\u{1F1FB}","latveja","latvejas republika","latvian republic","latvija","latvijas republika","letm\u043E","letm\u043E vabam\u043E","republic of latvia"]},{iso3:"MAC",iso2:"MO",m49:"446",name:"Macao",aliases:["\u{1F1F2}\u{1F1F4}","aomen","macao sar","macao special administrative region","macao special administrative region of the peoples republic of china","macau","macau rae da china","macau sar","macau special administrative region","macau special administrative region of the peoples republic of china","raem","regiao administrativa especial de macau","regiao administrativa especial de macau da republica popular da china","\u4E2D\u570B\u6FB3\u9580\u7279\u5225\u884C\u653F\u5340","\u6FB3\u9580"]},{iso3:"MAF",iso2:"MF",m49:"663",name:"Saint Martin (French Part)",aliases:["\u{1F1F2}\u{1F1EB}","collectivite de saint martin","collectivity of saint martin","saint martin","saint martin antilles francaises","saint martin france"]},{iso3:"MAR",iso2:"MA",m49:"504",name:"Morocco",aliases:["\u{1F1F2}\u{1F1E6}","kingdom of morocco","\u0627\u0644\u0645\u063A\u0631\u0628","\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0645\u063A\u0631\u0628\u064A\u0629","\u2D30\u2D4E\u2D53\u2D54 \u2D4F \u2D61\u2D30\u2D3D\u2D53\u2D5B","\u2D30\u2D4E\u2D55\u2D55\u2D53\u2D3D","\u2D4D\u2D4E\u2D55\u2D55\u2D53\u2D3D","\u2D4D\u2D4E\u2D56\u2D54\u2D49\u2D31","\u2D5C\u2D30\u2D33\u2D4D\u2D37\u2D49\u2D5C \u2D4F \u2D4D\u2D4E\u2D56\u2D54\u2D49\u2D31"]},{iso3:"MCO",iso2:"MC",m49:"492",name:"Monaco",aliases:["\u{1F1F2}\u{1F1E8}","fort hercule","la principaute de monaco","monaco rattachee au district de menton en 1793","munegu","principality and diocese of monaco","principality of monaco","principatu de munegu","principaute de monaco"]},{iso3:"MDA",iso2:"MD",m49:"498",name:"Republic of Moldova",aliases:["\u{1F1F2}\u{1F1E9}","moldavia","moldova","moldova republic of","moldova republica","r moldova","rep moldova","republica moldova","\u043C\u043E\u043B\u0434\u043E\u0432\u0430"]},{iso3:"MDG",iso2:"MG",m49:"450",name:"Madagascar",aliases:["\u{1F1F2}\u{1F1EC}","la republique de madagascar","madagasikara","repoblikani madagasikara","republic of madagascar","republique de madagascar"]},{iso3:"MDV",iso2:"MV",m49:"462",name:"Maldives",aliases:["\u{1F1F2}\u{1F1FB}","dhivehi raajjeyge jumhooriyyaa","republic of maldives","\u078B\u07A8\u0788\u07AC\u0780\u07A8 \u0783\u07A7\u0787\u07B0\u0796\u07AC","\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0783\u07A7\u0787\u07B0\u0796\u07AC","\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0783\u07A7\u0787\u07B0\u0796\u07AD\u078E\u07AC \u0796\u07AA\u0789\u07AA\u0780\u07AB\u0783\u07A8\u0787\u07B0\u0794\u07A7","\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0783\u07A7\u0787\u07B0\u0796\u07AD\u078E\u07AC \u0796\u07AA\u0789\u07B0\u0780\u07AB\u0783\u07A8\u0787\u07B0\u0794\u07A7"]},{iso3:"MEX",iso2:"MX",m49:"484",name:"Mexico",aliases:["\u{1F1F2}\u{1F1FD}","estados unidos mejicanos","estados unidos mexicanos","mejico","mexican republic","mexican united states","mexihco","mexihko","mexika sentik wexteyowalko","mexiko","mexko","mexko axkayotl","mexko tlalli","nueva espana","republica mejicana","republica mexicana","united mexican states","united states of mexico"]},{iso3:"MHL",iso2:"MH",m49:"584",name:"Marshall Islands",aliases:["\u{1F1F2}\u{1F1ED}","aelon kein ad","aolepan aorokin majel","jolet jen anij","majel","majol","republic of the marshall islands"]},{iso3:"MKD",iso2:"MK",m49:"807",name:"North Macedonia",aliases:["\u{1F1F2}\u{1F1F0}","former yugoslav republic of macedonia","fyr macedonia","fyrom","irjm","ish republika jugosllave e maqedonise","macedonia","macedonia former yugoslav republic of","macedonia fyr","maqedoni","maqedonia","maqedonia e veriut","republic of macedonia","republic of north macedonia","republika e maqedonise","republika e maqedonise se veriut","\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430","\u0440\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430","\u0440\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u0441\u0435\u0432\u0435\u0440\u043D\u0430 \u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430","\u0440\u043C","\u0440\u0441\u043C","\u0441\u0435\u0432\u0435\u0440\u043D\u0430 \u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430"]},{iso3:"MLI",iso2:"ML",m49:"466",name:"Mali",aliases:["\u{1F1F2}\u{1F1F1}","maali","republic of mali"]},{iso3:"MLT",iso2:"MT",m49:"470",name:"Malta",aliases:["\u{1F1F2}\u{1F1F9}","malta island","repubblika ta malta","republic of malta"]},{iso3:"MMR",iso2:"MM",m49:"104",name:"Myanmar",aliases:["\u{1F1F2}\u{1F1F2}","burma","pyidaungzu myanma naingngandaw","pyidaungzu thammada myanma naingngandaw","republic of the union of myanmar","union of burma","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F \u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F \u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036\u1010\u1031\u102C\u103A","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F \u101E\u1019\u1039\u1019\u1010 \u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F \u101E\u1019\u1039\u1019\u1010 \u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036\u1010\u1031\u102C\u103A","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F\u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036\u1010\u1031\u102C\u103A","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F\u101E\u1019\u1039\u1019\u1010\u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036","\u1015\u103C\u200C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F\u101E\u1019\u1039\u1019\u1010\u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036","\u1015\u103C\u100A\u103A\u1011\u1031\u102C\u1004\u103A\u1005\u102F\u101E\u1019\u1039\u1019\u1010\u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036\u1010\u1031\u102C\u103A","\u1017\u1019\u102C\u1015\u103C\u100A\u103A","\u1019\u103C\u1014\u103A\u1019\u102C","\u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036","\u1019\u103C\u1014\u103A\u1019\u102C\u1014\u102D\u102F\u1004\u103A\u1004\u1036\u1010\u1031\u102C\u103A","\u1019\u103C\u1014\u103A\u1019\u102C\u1015\u103C\u100A\u103A"]},{iso3:"MNE",iso2:"ME",m49:"499",name:"Montenegro",aliases:["\u{1F1F2}\u{1F1EA}","crna cora","\u0446\u0440\u043D\u0430 \u0433\u043E\u0440\u0430"]},{iso3:"MNG",iso2:"MN",m49:"496",name:"Mongolia",aliases:["\u{1F1F2}\u{1F1F3}","bugd nayramdah mongol ard uls","mongol uls","state of mongolia","\u043C\u043E\u043D\u0433\u043E\u043B","\u043C\u043E\u043D\u0433\u043E\u043B \u0443\u043B\u0441","\u182E\u1824\u1829\u182D\u1824\u182F \u1824\u182F\u1824\u1830"]},{iso3:"MNP",iso2:"MP",m49:"580",name:"Northern Mariana Islands",aliases:["\u{1F1F2}\u{1F1F5}","cnmi","commonwealth of the northern maria islands","commonwealth of the northern mariana islands","northern marianas","notte marianas","sankattan siha na islas marianas"]},{iso3:"MOZ",iso2:"MZ",m49:"508",name:"Mozambique",aliases:["\u{1F1F2}\u{1F1FF}","mocambique","republic of mozambique","republica de mocambique"]},{iso3:"MRT",iso2:"MR",m49:"478",name:"Mauritania",aliases:["\u{1F1F2}\u{1F1F7}","islamic republic of mauritania","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0625\u0633\u0644\u0627\u0645\u064A\u0629 \u0627\u0644\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0629","\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627"]},{iso3:"MSR",iso2:"MS",m49:"500",name:"Montserrat",aliases:["\u{1F1F2}\u{1F1F8}","island of montserrat"]},{iso3:"MTQ",iso2:"MQ",m49:"474",name:"Martinique",aliases:["\u{1F1F2}\u{1F1F6}","territorial collectivity of martinique"]},{iso3:"MUS",iso2:"MU",m49:"480",name:"Mauritius",aliases:["\u{1F1F2}\u{1F1FA}","ile maurice","la republique de maurice","maurice","moris","republic of mauritius","republique de maurice"]},{iso3:"MWI",iso2:"MW",m49:"454",name:"Malawi",aliases:["\u{1F1F2}\u{1F1FC}","republic of malawi"]},{iso3:"MYS",iso2:"MY",m49:"458",name:"Malaysia",aliases:["\u{1F1F2}\u{1F1FE}","federation of malaysia","malaysia federation","negara seberang tambak","persekutuan malaysia"]},{iso3:"MYT",iso2:"YT",m49:"175",name:"Mayotte",aliases:["\u{1F1FE}\u{1F1F9}","departement de mayotte","departement region de mayotte","department of mayotte"]},{iso3:"NAM",iso2:"NA",m49:"516",name:"Namibia",aliases:["\u{1F1F3}\u{1F1E6}","republic of namibia"]},{iso3:"NCL",iso2:"NC",m49:"540",name:"New Caledonia",aliases:["\u{1F1F3}\u{1F1E8}","caledonie","kanaky","kanaky nouvelle caledonie","nouvelle caledonie","territoire de la nouvelle caledonie et dependances","territoire des nouvelle caledonie et dependances","territory of new caledonia and dependencies"]},{iso3:"NER",iso2:"NE",m49:"562",name:"Niger",aliases:["\u{1F1F3}\u{1F1EA}","jamhuriyar nijar","nijar","republic niger","republic of niger","republic of the niger"]},{iso3:"NFK",iso2:"NF",m49:"574",name:"Norfolk Island",aliases:["\u{1F1F3}\u{1F1EB}","norfolk island australia","norfolk island other territories","norfolk island other territories australia","territory of norfolk island"]},{iso3:"NGA",iso2:"NG",m49:"566",name:"Nigeria",aliases:["\u{1F1F3}\u{1F1EC}","federal republic of nigeria","naija"]},{iso3:"NIC",iso2:"NI",m49:"558",name:"Nicaragua",aliases:["\u{1F1F3}\u{1F1EE}","republic of nicaragua","republica de nicaragua"]},{iso3:"NIU",iso2:"NU",m49:"570",name:"Niue",aliases:["\u{1F1F3}\u{1F1FA}"]},{iso3:"NLD",iso2:"NL",m49:"528",name:"Kingdom of the Netherlands",aliases:["\u{1F1F3}\u{1F1F1}","hollandt","kingdom of netherlands","koninkrijk der nederlanden","nederland","nederlanden","nederlandt","netherlands","netherlands kingdom of the"]},{iso3:"NOR",iso2:"NO",m49:"578",name:"Norway",aliases:["\u{1F1F3}\u{1F1F4}","kingdom of norway","kongeriket noreg","kongeriket norge","noreg","norge"]},{iso3:"NPL",iso2:"NP",m49:"524",name:"Nepal",aliases:["\u{1F1F3}\u{1F1F5}","bal bo","bal poi yul","bal yul","balbo","balpo","balpo yul","nipal","sanghiya loktantrik ganatantra nepal","\u0928\u0947\u092A\u093E\u0932","\u0938\u0902\u0918\u093F\u092F \u0932\u094B\u0915\u0924\u093E\u0928\u094D\u0924\u094D\u0930\u093F\u0915 \u0917\u0923\u0924\u0928\u094D\u0924\u094D\u0930 \u0928\u0947\u092A\u093E\u0932","\u0938\u0902\u0918\u093F\u092F \u0932\u094B\u0915\u0924\u093E\u0928\u094D\u0924\u094D\u0930\u093F\u0915 \u0917\u0923\u0924\u0928\u094D\u0924\u094D\u0930\u093E\u0924\u094D\u092E\u0915 \u0928\u0947\u092A\u093E\u0932","\u0938\u0902\u0918\u0940\u092F \u0932\u094B\u0915\u0924\u093E\u0928\u094D\u0924\u094D\u0930\u093F\u0915 \u0917\u0923\u0924\u0928\u094D\u0924\u094D\u0930 \u0928\u0947\u092A\u093E\u0932"]},{iso3:"NRU",iso2:"NR",m49:"520",name:"Naoero",aliases:["\u{1F1F3}\u{1F1F7}","nauru","pleasant island","republic of naoero","republic of nauru"]},{iso3:"NZL",iso2:"NZ",m49:"554",name:"New Zealand",aliases:["\u{1F1F3}\u{1F1FF}","aotearoa","aotearoa new zealand","dominion of new zealand"]},{iso3:"OMN",iso2:"OM",m49:"512",name:"Oman",aliases:["\u{1F1F4}\u{1F1F2}","sultanate of oman","uman","\u0633\u0644\u0637\u0646\u0629 \u0639\u0645\u0627\u0646","\u0639\u0645\u0627\u0646"]},{iso3:"PAK",iso2:"PK",m49:"586",name:"Pakistan",aliases:["\u{1F1F5}\u{1F1F0}","hoi quoc","islamic republic of pakistan","republic of pakistan","tay hoi","\u0627\u0633\u0644\u0627\u0645\u06CC \u062C\u0645\u06C1\u0648\u0631\u06CC\u06C1 \u067E\u0627\u06A9\u0633\u062A\u0627\u0646","\u0628\u0627\u06A9\u0633\u062A\u0627\u0646","\u067E\u0627\u06A9\u0633\u062A\u0627\u0646"]},{iso3:"PAN",iso2:"PA",m49:"591",name:"Panama",aliases:["\u{1F1F5}\u{1F1E6}","republic of panama","republica de panama"]},{iso3:"PCN",iso2:"PN",m49:"612",name:"Pitcairn",aliases:["\u{1F1F5}\u{1F1F3}","occas island","pisskern ali\u0435n","pitcairn henderson ducie and oeno islands","pitcairn island","pitcairn islands","pitkern ailen"]},{iso3:"PER",iso2:"PE",m49:"604",name:"Peru",aliases:["\u{1F1F5}\u{1F1EA}","piruw","piruw ripuwlika","republic of peru","republica del peru"]},{iso3:"PHL",iso2:"PH",m49:"608",name:"Philippines",aliases:["\u{1F1F5}\u{1F1ED}","philippine islands","republic of the philippines"]},{iso3:"PLW",iso2:"PW",m49:"585",name:"Palau",aliases:["\u{1F1F5}\u{1F1FC}","belau","peeloo","pelew","pelew islands","pellew","republic of belau","republic of palau","\u30D1\u30E9\u30AA","\u30D1\u30E9\u30AA\u5171\u548C\u56FD"]},{iso3:"PNG",iso2:"PG",m49:"598",name:"Papua New Guinea",aliases:["\u{1F1F5}\u{1F1EC}","independent state of papua new guinea","papua niugini"]},{iso3:"POL",iso2:"PL",m49:"616",name:"Poland",aliases:["\u{1F1F5}\u{1F1F1}","polska","republic of poland","rzeczpospolita polska"]},{iso3:"PRI",iso2:"PR",m49:"630",name:"Puerto Rico",aliases:["\u{1F1F5}\u{1F1F7}","boriken","borinquen","boriquen","commonwealth of puerto rico","estado libre asociado de puerto rico","free associated state of puerto rico","isla del encanto","island of enchantment","isle of enchantment","mancomunidad de puerto rico","porto rico","territorio de puerto rico","territorio estadounidense de puerto rico","territory of porto rico","territory of puerto rico"]},{iso3:"PRK",iso2:"KP",m49:"408",name:"Democratic People's Republic of Korea",aliases:["\u{1F1F0}\u{1F1F5}","choson minjujuui inmin konghwaguk","dpr korea","dprk","korea democratic peoples republic of","n korea","north korea","\uACF5\uD654\uAD6D","\uBD81\uC870\uC120","\uBD81\uD55C","\uC870\uC120","\uC870\uC120\uBBFC\uC8FC\uC8FC\uC758\uC778\uBBFC\uACF5\uD654\uAD6D"]},{iso3:"PRT",iso2:"PT",m49:"620",name:"Portugal",aliases:["\u{1F1F5}\u{1F1F9}","republica portuguesa"]},{iso3:"PRY",iso2:"PY",m49:"600",name:"Paraguay",aliases:["\u{1F1F5}\u{1F1FE}","paraguai","republic of paraguay","republica del paraguay","teta paraguai"]},{iso3:"PSE",iso2:"PS",m49:"275",name:"State of Palestine",aliases:["\u{1F1F5}\u{1F1F8}","palestine","palestine state of","palestinian authority","palestinian national authority","palestinian territory","west bank and gaza","\u0623\u0631\u0627\u0636\u064A \u0641\u0644\u0633\u0637\u064A\u0646\u064A\u0629","\u0627\u0644\u0623\u0631\u0627\u0636\u064A \u0627\u0644\u0641\u0644\u0633\u0637\u064A\u0646\u064A\u0629","\u0627\u0644\u062F\u0648\u0644\u0629 \u0627\u0644\u0641\u0644\u0633\u0637\u064A\u0646\u064A\u0629","\u0627\u0644\u0633\u0644\u0637\u0629 \u0627\u0644\u0641\u0644\u0633\u0637\u064A\u0646\u064A\u0629","\u0627\u0644\u0633\u0644\u0637\u0629 \u0627\u0644\u0648\u0637\u0646\u064A\u0629 \u0627\u0644\u0641\u0644\u0633\u0637\u064A\u0646\u064A\u0629","\u0627\u0644\u0636\u0641\u0629 \u0627\u0644\u063A\u0631\u0628\u064A\u0629 \u0648\u0642\u0637\u0627\u0639 \u063A\u0632\u0629","\u062F\u0648\u0644\u0629 \u0641\u0644\u0633\u0637\u064A\u0646","\u0641\u0644\u0633\u0637\u064A\u0646"]},{iso3:"PYF",iso2:"PF",m49:"258",name:"French Polynesia",aliases:["\u{1F1F5}\u{1F1EB}","f oh","french establishments in oceania","french oceania","french settlements in oceania","polynesie francaise","territoire de la polynesie francaise","territory of french polynesia"]},{iso3:"QAT",iso2:"QA",m49:"634",name:"Qatar",aliases:["\u{1F1F6}\u{1F1E6}","state of qatar","\u0625\u0645\u0627\u0631\u0629 \u0642\u0637\u0631","\u062F\u0648\u0644\u0629 \u0642\u0637\u0631","\u0642\u0637\u0631"]},{iso3:"REU",iso2:"RE",m49:"638",name:"R\xE9union",aliases:["\u{1F1F7}\u{1F1EA}","ile bourbon","ile de la reunion","la reunion","re","region reunion","reunion island"]},{iso3:"ROU",iso2:"RO",m49:"642",name:"Romania",aliases:["\u{1F1F7}\u{1F1F4}"]},{iso3:"RUS",iso2:"RU",m49:"643",name:"Russian Federation",aliases:["\u{1F1F7}\u{1F1FA}","federation of russia","russia","\u0440\u043E\u0441\u0441\u0438\u0438\u0441\u043A\u0430\u044F \u0444\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044F","\u0440\u043E\u0441\u0441\u0438\u044F","\u0440\u0444"]},{iso3:"RWA",iso2:"RW",m49:"646",name:"Rwanda",aliases:["\u{1F1F7}\u{1F1FC}","igihugu cyimisozi igihumbi","jamhuri ya rwanda","la republique du rwanda","land of a thousand hills","republic of rwanda","republika yu rwanda","republique du rwanda","republique rwandaise","repubulika yu rwanda","u rwanda"]},{iso3:"SAU",iso2:"SA",m49:"682",name:"Saudi Arabia",aliases:["\u{1F1F8}\u{1F1E6}","kingdom of saudi arabia","\u0627\u0644\u062F\u0648\u0644\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629","\u0627\u0644\u062F\u0648\u0644\u0647 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0647","\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629","\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0647","\u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629","\u0627\u0644\u0645\u0645\u0644\u0643\u0629","\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629","\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629","\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629","\u0627\u0644\u0645\u0645\u0644\u0643\u0647","\u0627\u0644\u0645\u0645\u0644\u0643\u0647 \u0627\u0644\u0639\u0631\u0628\u064A\u0647 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0647","\u0628\u0644\u0627\u062F \u0627\u0644\u062D\u0631\u0645\u064A\u0646 \u0627\u0644\u0634\u0631\u064A\u0641\u064A\u0646","\u062F\u0648\u0644\u0629 \u0622\u0644 \u0633\u0639\u0648\u062F","\u0633\u0639\u0648\u062F\u064A\u0629","\u0633\u0639\u0648\u062F\u064A\u0647","\u0645\u0646\u0628\u0639 \u0627\u0644\u0631\u0633\u0627\u0644\u0629","\u0645\u0647\u0628\u0637 \u0627\u0644\u0648\u062D\u064A"]},{iso3:"SDN",iso2:"SD",m49:"729",name:"Sudan",aliases:["\u{1F1F8}\u{1F1E9}","al sudan","as sudan","north sudan","republic of sudan","republic of the sudan","soudan","\u0627\u0644\u0633\u0648\u062F\u0627\u0646","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0633\u0648\u062F\u0627\u0646"]},{iso3:"SEN",iso2:"SN",m49:"686",name:"Senegal",aliases:["\u{1F1F8}\u{1F1F3}","la republique du senegal","republic of senegal","republique du senegal","sen","senegaal"]},{iso3:"SGP",iso2:"SG",m49:"702",name:"Singapore",aliases:["\u{1F1F8}\u{1F1EC}","garden city","lion city","republic of singapore","republik singapura","singapore city","singapura","spore","\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD","\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD \u0B95\u0BC1\u0B9F\u0BBF\u0BAF\u0BB0\u0B9A\u0BC1","\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BC8","\u0BB8\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BC2\u0BB0\u0BCD"]},{iso3:"SGS",iso2:"GS",m49:"239",name:"South Georgia and the South Sandwich Islands",aliases:["\u{1F1EC}\u{1F1F8}","falkland islands dependencies","sgssi","south georgia","south georgia & south sandwich islands","south sandwich islands"]},{iso3:"SHN",iso2:"SH",m49:"654",name:"Saint Helena",aliases:["\u{1F1F8}\u{1F1ED}","ascension","saint helena and dependencies","saint helena ascension and tristan da cunha","tristan da cunha"]},{iso3:"SJM",iso2:"SJ",m49:"744",name:"Svalbard and Jan Mayen Islands",aliases:["\u{1F1F8}\u{1F1EF}","jan mayen","svalbard","svalbard and jan mayen","svalbard og jan mayen"]},{iso3:"SLB",iso2:"SB",m49:"090",name:"Solomon Islands",aliases:["\u{1F1F8}\u{1F1E7}"]},{iso3:"SLE",iso2:"SL",m49:"694",name:"Sierra Leone",aliases:["\u{1F1F8}\u{1F1F1}","republic of sierra leone"]},{iso3:"SLV",iso2:"SV",m49:"222",name:"El Salvador",aliases:["\u{1F1F8}\u{1F1FB}","republic of el salvador","republica de el salvador","salvador"]},{iso3:"SMR",iso2:"SM",m49:"674",name:"San Marino",aliases:["\u{1F1F8}\u{1F1F2}","most serene republic of san marino","repubblica di san marino","serenissima repubblica di san marino"]},{iso3:"SOM",iso2:"SO",m49:"706",name:"Somalia",aliases:["\u{1F1F8}\u{1F1F4}","as sumal","federal republic of somalia","jamhuuriyadda federaalka soomaaliya","jamhuuriyadda soomaaliyeed","soomaaliya","soomaaliyeey toosoo","\u0627\u0644\u0635\u0648\u0645\u0627\u0644","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0635\u0648\u0645\u0627\u0644","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0635\u0648\u0645\u0627\u0644 \u0627\u0644\u062F\u064A\u0645\u0648\u0642\u0631\u0627\u0637\u064A\u0629","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0635\u0648\u0645\u0627\u0644 \u0627\u0644\u0641\u064A\u062F\u0631\u0627\u0644\u064A\u0629","\u0635\u0648\u0645\u0627\u0644"]},{iso3:"SPM",iso2:"PM",m49:"666",name:"Saint Pierre and Miquelon",aliases:["\u{1F1F5}\u{1F1F2}","collectivite territoriale de saint pierre et miquelon","miquelon","saint pierre","saint pierre et miquelon","territorial collectivity of saint pierre and miquelon"]},{iso3:"SRB",iso2:"RS",m49:"688",name:"Serbia",aliases:["\u{1F1F7}\u{1F1F8}","republic of serbia","republika srbija","\u0440\u0435\u043F\u0443\u0431\u043B\u0438\u043A\u0430 \u0441\u0440\u0431\u0438\u0458\u0430","\u0441\u0440\u0431\u0438\u0458\u0430"]},{iso3:"SSD",iso2:"SS",m49:"728",name:"South Sudan",aliases:["\u{1F1F8}\u{1F1F8}","republic of south sudan","southern sudan"]},{iso3:"STP",iso2:"ST",m49:"678",name:"Sao Tome and Principe",aliases:["\u{1F1F8}\u{1F1F9}","democratic republic of sao tome and principe","principe","republica democratica de sao tome e principe","sao tome","sao tome e principe","sao tome og principe"]},{iso3:"SUR",iso2:"SR",m49:"740",name:"Suriname",aliases:["\u{1F1F8}\u{1F1F7}","dutch guiana","republic of surinam","republic of suriname","republiek suriname","surinam","surrinam"]},{iso3:"SVK",iso2:"SK",m49:"703",name:"Slovakia",aliases:["\u{1F1F8}\u{1F1F0}","slovak republic","slovenska republika","slovensko"]},{iso3:"SVN",iso2:"SI",m49:"705",name:"Slovenia",aliases:["\u{1F1F8}\u{1F1EE}","republic of slovenia","republika slovenija","slovenija"]},{iso3:"SWE",iso2:"SE",m49:"752",name:"Sweden",aliases:["\u{1F1F8}\u{1F1EA}","kingdom of sweden","konungadomet sverige","konungariket sverige","kungadomet sverige","kungariket sverige","sverige","swedish kingdom"]},{iso3:"SWZ",iso2:"SZ",m49:"748",name:"Eswatini",aliases:["\u{1F1F8}\u{1F1FF}","kingdom of eswatini","kingdom of swaziland","swaziland","umbuso weswatini"]},{iso3:"SXM",iso2:"SX",m49:"534",name:"Sint Maarten (Dutch part)",aliases:["\u{1F1F8}\u{1F1FD}","country of sint maarten","eilandgebied sint maarten","land sint maarten","saint maarten","saint martin dutch part","sint maarten","sint martin"]},{iso3:"SYC",iso2:"SC",m49:"690",name:"Seychelles",aliases:["\u{1F1F8}\u{1F1E8}","la republique des seychelles","repiblik sesel","republic of seychelles","republique des seychelles"]},{iso3:"SYR",iso2:"SY",m49:"760",name:"Syrian Arab Republic",aliases:["\u{1F1F8}\u{1F1FE}","surya","syria","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0648\u0631\u064A\u0629","\u0627\u0644\u0634\u0627\u0645","\u0633\u0648\u0631\u064A\u0627","\u0633\u0648\u0631\u064A\u0629"]},{iso3:"TCA",iso2:"TC",m49:"796",name:"Turks and Caicos Islands",aliases:["\u{1F1F9}\u{1F1E8}","caicos","caicos islands","turks","turks & caicos","turks islands"]},{iso3:"TCD",iso2:"TD",m49:"148",name:"Chad",aliases:["\u{1F1F9}\u{1F1E9}","la republique du tchad","republic of chad","republique du tchad","tchad","\u062A\u0634\u0627\u062F","\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u062A\u0634\u0627\u062F"]},{iso3:"TGO",iso2:"TG",m49:"768",name:"Togo",aliases:["\u{1F1F9}\u{1F1EC}","la republique togolaise","republique togolaise","togolese republic"]},{iso3:"THA",iso2:"TH",m49:"764",name:"Thailand",aliases:["\u{1F1F9}\u{1F1ED}","kingdom of siam","kingdom of thailand","siam","thai","\u0E44\u0E17\u0E22","\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28\u0E44\u0E17\u0E22","\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28\u0E2A\u0E22\u0E32\u0E21","\u0E40\u0E21\u0E37\u0E2D\u0E07\u0E44\u0E17\u0E22","\u0E23\u0E32\u0E0A\u0E2D\u0E32\u0E13\u0E32\u0E08\u0E31\u0E01\u0E23\u0E44\u0E17\u0E22","\u0E23\u0E32\u0E0A\u0E2D\u0E32\u0E13\u0E32\u0E08\u0E31\u0E01\u0E23\u0E2A\u0E22\u0E32\u0E21","\u0E2A\u0E22\u0E32\u0E21"]},{iso3:"TJK",iso2:"TJ",m49:"762",name:"Tajikistan",aliases:["\u{1F1F9}\u{1F1EF}","jumhurii tojikiston","republic of tajikistan","\u0442\u043E\u04B7\u0438\u043A\u0438\u0441\u0442\u043E\u043D","\u0442\u04B7","\u0442\u04B7\u043A","\u04B7\u0442","\u04B7\u0443\u043C\u04B3\u0443\u0440\u0438\u0438 \u0442\u043E\u04B7\u0438\u043A\u0438\u0441\u0442\u043E\u043D"]},{iso3:"TKL",iso2:"TK",m49:"772",name:"Tokelau",aliases:["\u{1F1F9}\u{1F1F0}","tokelau islands","union islands"]},{iso3:"TKM",iso2:"TM",m49:"795",name:"Turkmenistan",aliases:["\u{1F1F9}\u{1F1F2}"]},{iso3:"TLS",iso2:"TL",m49:"626",name:"Timor-Leste",aliases:["\u{1F1F9}\u{1F1F1}","democratic republic of timor leste","east timor","republica democratica de timor leste","republika demokratika timor lorosae","timor loro sae","timor lorosae"]},{iso3:"TON",iso2:"TO",m49:"776",name:"Tonga",aliases:["\u{1F1F9}\u{1F1F4}","friendly islands","kingdom of tonga","puleanga fakatui o tonga","tonga islands"]},{iso3:"TTO",iso2:"TT",m49:"780",name:"Trinidad and Tobago",aliases:["\u{1F1F9}\u{1F1F9}","republic of trinidad and tobago","tobago","trinidad"]},{iso3:"TUN",iso2:"TN",m49:"788",name:"Tunisia",aliases:["\u{1F1F9}\u{1F1F3}","republic of tunisia","tunisian republic","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u062A\u0648\u0646\u0633\u064A\u0629","\u062A\u0648\u0646\u0633","\u062A\u0648\u0646\u0633 \u0627\u0644\u062E\u0636\u0631\u0627\u0621"]},{iso3:"TUR",iso2:"TR",m49:"792",name:"T\xFCrkiye",aliases:["\u{1F1F9}\u{1F1F7}","republic of turkey","republic of turkiye","turkey","turkiye cumhuriyeti"]},{iso3:"TUV",iso2:"TV",m49:"798",name:"Tuvalu",aliases:["\u{1F1F9}\u{1F1FB}","ellice islands"]},{iso3:"TWN",iso2:"TW",m49:"158",name:"Taiwan",aliases:["\u{1F1F9}\u{1F1FC}","chinese republic","chinese taipei","chunghwa minkuo","chunghwa minkwo","conghwaminku","cunghwa minkwo","cyukamingkok","formosa","nanasian","nationalist china","republic of china","republic of china taiwan","roc","taivang","taiwan province of china","taiwan roc","taywan","taywang","teywan","\u4E2D\u83EF\u6C11\u570B","\u4E2D\u83EF\u6C11\u570B\uFF08\u81FA\u7063\uFF09","\u4E2D\u83EF\u81FA\u5317","\u53F0\u7063","\u81FA\u6F8E\u91D1\u99AC","\u81FA\u7063"]},{iso3:"TZA",iso2:"TZ",m49:"834",name:"United Republic of Tanzania",aliases:["\u{1F1F9}\u{1F1FF}","jamhuri ya muungano wa tanganyika na zanzibar","jamhuri ya muungano wa tanzania","tanzania","tanzania jamhuri ya muungano wa","tanzania united republic of","united republic of tanganyika and zanzibar"]},{iso3:"UGA",iso2:"UG",m49:"800",name:"Uganda",aliases:["\u{1F1FA}\u{1F1EC}","jamhuri ya uganda","lulu ya afrika","ouganda","pearl of africa","republic of uganda","ugandah"]},{iso3:"UKR",iso2:"UA",m49:"804",name:"Ukraine",aliases:["\u{1F1FA}\u{1F1E6}","ukr","ukraina","ukrainia","ukrayina","\u0432\u043A\u0440\u0430\u0456\u043D\u0430","\u0443\u043A\u0440\u0430\u0456\u043D\u0430"]},{iso3:"UMI",iso2:"UM",m49:"581",name:"United States Minor Outlying Islands",aliases:["\u{1F1FA}\u{1F1F2}","us minor outlying islands","us outlying islands","usmoi"]},{iso3:"URY",iso2:"UY",m49:"858",name:"Uruguay",aliases:["\u{1F1FA}\u{1F1FE}","eastern republic of uruguay","oriental republic of uruguay"]},{iso3:"USA",iso2:"US",m49:"840",name:"United States of America",aliases:["\u{1F1FA}\u{1F1F8}","amelika","amelika hui pu ia","amelika huipuia","amelika mokuaina hui pu ia","america","eeuu","eeuu de america","estados unidos","estados unidos de america","los estados","los estados unidos","los estados unidos de america","mokuaina hui pu ia","union americana","united states","us","us of a","us of america","usa"]},{iso3:"UZB",iso2:"UZ",m49:"860",name:"Uzbekistan",aliases:["\u{1F1FA}\u{1F1FF}","ozbek","ozbekiston","ozbekiston respublikasi","republic of uzbekistan","uzbekiston respublikasi"]},{iso3:"VAT",iso2:"VA",m49:"336",name:"Holy See",aliases:["\u{1F1FB}\u{1F1E6}","citta del vaticano","civitas vaticana","colle vaticano","papal state","santa sede citta del vaticano","state of vatican city","stato della citta del vaticano","status civitatis vaticanae","status civitatis vatican\xE6","vatican","vatican city","vatican city state","vaticano"]},{iso3:"VCT",iso2:"VC",m49:"670",name:"Saint Vincent and the Grenadines",aliases:["\u{1F1FB}\u{1F1E8}","grenadines","saint vincent","saint vincent and grenadines"]},{iso3:"VEN",iso2:"VE",m49:"862",name:"Venezuela (Bolivarian Republic of)",aliases:["\u{1F1FB}\u{1F1EA}","bolivarian republic of venezuela","br venezuela","estados unidos de venezuela","rb venezuela","republic of venezuela","republica bolivariana de venezuela","republica de venezuela","venezuela"]},{iso3:"VGB",iso2:"VG",m49:"092",name:"British Virgin Islands",aliases:["\u{1F1FB}\u{1F1EC}","bvi","virgin islands british","virgin islands of the united kingdom","virgin islands united kingdom"]},{iso3:"VIR",iso2:"VI",m49:"850",name:"United States Virgin Islands",aliases:["\u{1F1FB}\u{1F1EE}","american virgin islands","us virgin islands","virgin islands of the united states","virgin islands us"]},{iso3:"VNM",iso2:"VN",m49:"704",name:"Viet Nam",aliases:["\u{1F1FB}\u{1F1F3}","chxhcn viet nam","chxhcnvn","cong hoa xa hoi chu nghia viet nam","socialist republic of viet nam","socialist republic of vietnam","vietnam"]},{iso3:"VUT",iso2:"VU",m49:"548",name:"Vanuatu",aliases:["\u{1F1FB}\u{1F1FA}","la republique du vanuatu","republic of vanuatu","republique de vanuatu","ripablik blong vanuatu"]},{iso3:"WLF",iso2:"WF",m49:"876",name:"Wallis and Futuna Islands",aliases:["\u{1F1FC}\u{1F1EB}","collectivite des iles wallis et futuna","emeni simete","futuna","iles wallis et futuna","makape papilio","territoire de wallis et futuna","territoire des iles wallis et futuna","wallis","wallis & futuna","wallis et futuna"]},{iso3:"WSM",iso2:"WS",m49:"882",name:"Samoa",aliases:["\u{1F1FC}\u{1F1F8}","independent state of samoa","malo saoloto tutoatasi o samoa","samoa i sisifo","western samoa"]},{iso3:"YEM",iso2:"YE",m49:"887",name:"Yemen",aliases:["\u{1F1FE}\u{1F1EA}","rep yemen","republic of yemen","\u0627\u0644\u062C\u0645\u0647\u0648\u0631\u064A\u0629 \u0627\u0644\u064A\u0645\u0646\u064A\u0629","\u0627\u0644\u064A\u0645\u0646","\u062F\u0648\u0644\u0629 \u0627\u0644\u064A\u0645\u0646"]},{iso3:"ZAF",iso2:"ZA",m49:"710",name:"South Africa",aliases:["\u{1F1FF}\u{1F1E6}","aferika borwa","aforika borwa","afrika boroa","afrika borwa","afrika dzonga","afurika tshipembe","emzantsi afrika","iningizimu afrika","iriphabhulikhi ye ningizimu afrika","iriphabhulikhi yeningizimu afrika","iriphabhuliki yase ningizimu afrika","iriphabliki yasemzantsi afrika","iriphabliki yaseningizimu afrika","iriphabliki yom zantsi afrika","isewula afrika","repabliki ya afrika borwa","rephaboliki ya aforika borwa","rephaboliki ya afrika borwa","republic of south africa","republiek van suid afrika","riphabliki ra afrika dzonga","rsa","suid afrika","umzansi","umzantsi afrika","unie van suid afrika","union of south africa"]},{iso3:"ZMB",iso2:"ZM",m49:"894",name:"Zambia",aliases:["\u{1F1FF}\u{1F1F2}","northern rhodesia","republic of zambia"]},{iso3:"ZWE",iso2:"ZW",m49:"716",name:"Zimbabwe",aliases:["\u{1F1FF}\u{1F1FC}","ezimbabwe","izimbabwe","republic of zimbabwe","rhodesia","southern rhodesia","zimbabwe rhodesia","zimbagwe"]}];function f(v){return v.normalize("NFD").replace(/[\u0300-\u036F]/g,"").normalize("NFC").toLowerCase().replace(/[\u064B-\u065F]/g,"").replace(/['\u2018\u2019\u02BB\u02BC\u02BD\u02C8\u2032`]/g,"").replace(/&/g," and ").replace(/([,(])\s*the\b/g,"$1").replace(/[.(),[\]]/g,"").replace(/[-\u2013\u2014]/g," ").replace(/\bst\b/g,"saint").trim().replace(/\s+/g," ").replace(/^the\s+/,"")}function h(v){let x=new Map,S=new Map,M=new Map;for(let A of v)x.set(A.iso3,A),A.iso2&&S.set(A.iso2,A),A.m49&&M.set(A.m49,A);let C=new Map;for(let A of v)for(let b of[A.name,...A.aliases]){let E=f(b),T=C.get(E);if(T!==void 0&&T!==A.iso3)throw new Error(`Duplicate name/alias "${E}": ${T} vs ${A.iso3}`);C.set(E,A.iso3)}function w(A){if(A==null)return;let b=String(A).trim();if(!b)return;if(/^\d+$/.test(b)){let T=M.get(String(parseInt(b,10)).padStart(3,"0"));if(T)return T}if(/^[A-Za-z]{2}$/.test(b)){let T=S.get(b.toUpperCase());if(T)return T}if(/^[A-Za-z]{3}$/.test(b)){let T=x.get(b.toUpperCase());if(T)return T}let E=C.get(f(b));return E===void 0?void 0:x.get(E)}function k(A){var b;return(b=w(A))==null?void 0:b.iso3}return{lookup:w,lookupAlpha3:k,byAlpha3:x,byAlpha2:S,byM49:M}}var d=h(c),p=d.lookup,g=d.lookupAlpha3,m=d.byAlpha3,y=d.byAlpha2,_=d.byM49}}),x4=de({"node_modules/@turf/helpers/dist/cjs/index.cjs"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=63710088e-1,t={centimeters:r*100,centimetres:r*100,degrees:360/(2*Math.PI),feet:r*3.28084,inches:r*39.37,kilometers:r/1e3,kilometres:r/1e3,meters:r,metres:r,miles:r/1609.344,millimeters:r*1e3,millimetres:r*1e3,nauticalmiles:r/1852,radians:1,yards:r*1.0936},i={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,nauticalmiles:29155334959812285e-23,millimeters:1e6,millimetres:1e6,yards:1.195990046};function a(D,R,P={}){let z={type:"Feature"};return(P.id===0||P.id)&&(z.id=P.id),P.bbox&&(z.bbox=P.bbox),z.properties=R||{},z.geometry=D,z}function o(D,R,P={}){switch(D){case"Point":return s(R).geometry;case"LineString":return c(R).geometry;case"Polygon":return n(R).geometry;case"MultiPoint":return p(R).geometry;case"MultiLineString":return d(R).geometry;case"MultiPolygon":return g(R).geometry;default:throw new Error(D+" is invalid")}}function s(D,R,P={}){if(!D)throw new Error("coordinates is required");if(!Array.isArray(D))throw new Error("coordinates must be an Array");if(D.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!b(D[0])||!b(D[1]))throw new Error("coordinates must contain numbers");return a({type:"Point",coordinates:D},R,P)}function l(D,R,P={}){return h(D.map(z=>s(z,R)),P)}function n(D,R,P={}){for(let I of D){if(I.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(I[I.length-1].length!==I[0].length)throw new Error("First and last Position are not equivalent.");for(let L=0;L<I[I.length-1].length;L++)if(I[I.length-1][L]!==I[0][L])throw new Error("First and last Position are not equivalent.")}return a({type:"Polygon",coordinates:D},R,P)}function u(D,R,P={}){return h(D.map(z=>n(z,R)),P)}function c(D,R,P={}){if(D.length<2)throw new Error("coordinates must be an array of two or more positions");return a({type:"LineString",coordinates:D},R,P)}function f(D,R,P={}){return h(D.map(z=>c(z,R)),P)}function h(D,R={}){let P={type:"FeatureCollection"};return R.id&&(P.id=R.id),R.bbox&&(P.bbox=R.bbox),P.features=D,P}function d(D,R,P={}){return a({type:"MultiLineString",coordinates:D},R,P)}function p(D,R,P={}){return a({type:"MultiPoint",coordinates:D},R,P)}function g(D,R,P={}){return a({type:"MultiPolygon",coordinates:D},R,P)}function m(D,R,P={}){return a({type:"GeometryCollection",geometries:D},R,P)}function y(D,R=0){if(R&&!(R>=0))throw new Error("precision must be a positive number");let P=Math.pow(10,R||0);return Math.round(D*P)/P}function _(D,R="kilometers"){let P=t[R];if(!P)throw new Error(R+" units is invalid");return D*P}function v(D,R="kilometers"){let P=t[R];if(!P)throw new Error(R+" units is invalid");return D/P}function x(D,R){return C(v(D,R))}function S(D){let R=D%360;return R<0&&(R+=360),R}function M(D){return D=D%360,D>180?D-360:D<-180?D+360:D}function C(D){return D%(2*Math.PI)*180/Math.PI}function w(D){return D%360*Math.PI/180}function k(D,R="kilometers",P="kilometers"){if(!(D>=0))throw new Error("length must be a positive number");return _(v(D,R),P)}function A(D,R="meters",P="kilometers"){if(!(D>=0))throw new Error("area must be a positive number");let z=i[R];if(!z)throw new Error("invalid original units");let I=i[P];if(!I)throw new Error("invalid final units");return D/z*I}function b(D){return!isNaN(D)&&D!==null&&!Array.isArray(D)}function E(D){return D!==null&&typeof D=="object"&&!Array.isArray(D)}function T(D){if(!D)throw new Error("bbox is required");if(!Array.isArray(D))throw new Error("bbox must be an Array");if(D.length!==4&&D.length!==6)throw new Error("bbox must be an Array of 4 or 6 numbers");D.forEach(R=>{if(!b(R))throw new Error("bbox must only contain numbers")})}function F(D){if(!D)throw new Error("id is required");if(["string","number"].indexOf(typeof D)===-1)throw new Error("id must be a number or a string")}e.areaFactors=i,e.azimuthToBearing=M,e.bearingToAzimuth=S,e.convertArea=A,e.convertLength=k,e.degreesToRadians=w,e.earthRadius=r,e.factors=t,e.feature=a,e.featureCollection=h,e.geometry=o,e.geometryCollection=m,e.isNumber=b,e.isObject=E,e.lengthToDegrees=x,e.lengthToRadians=v,e.lineString=c,e.lineStrings=f,e.multiLineString=d,e.multiPoint=p,e.multiPolygon=g,e.point=s,e.points=l,e.polygon=n,e.polygons=u,e.radiansToDegrees=C,e.radiansToLength=_,e.round=y,e.validateBBox=T,e.validateId=F}}),b4=de({"node_modules/@turf/meta/dist/cjs/index.cjs"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=x4();function t(v,x,S){if(v!==null)for(var M,C,w,k,A,b,E,T=0,F=0,D,R=v.type,P=R==="FeatureCollection",z=R==="Feature",I=P?v.features.length:1,L=0;L<I;L++){E=P?v.features[L].geometry:z?v.geometry:v,D=E?E.type==="GeometryCollection":!1,A=D?E.geometries.length:1;for(var B=0;B<A;B++){var O=0,G=0;if(k=D?E.geometries[B]:E,k!==null){b=k.coordinates;var W=k.type;switch(T=S&&(W==="Polygon"||W==="MultiPolygon")?1:0,W){case null:break;case"Point":if(x(b,F,L,O,G)===!1)return!1;F++,O++;break;case"LineString":case"MultiPoint":for(M=0;M<b.length;M++){if(x(b[M],F,L,O,G)===!1)return!1;F++,W==="MultiPoint"&&O++}W==="LineString"&&O++;break;case"Polygon":case"MultiLineString":for(M=0;M<b.length;M++){for(C=0;C<b[M].length-T;C++){if(x(b[M][C],F,L,O,G)===!1)return!1;F++}W==="MultiLineString"&&O++,W==="Polygon"&&G++}W==="Polygon"&&O++;break;case"MultiPolygon":for(M=0;M<b.length;M++){for(G=0,C=0;C<b[M].length;C++){for(w=0;w<b[M][C].length-T;w++){if(x(b[M][C][w],F,L,O,G)===!1)return!1;F++}G++}O++}break;case"GeometryCollection":for(M=0;M<k.geometries.length;M++)if(t(k.geometries[M],x,S)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function i(v,x,S,M){var C=S;return t(v,function(w,k,A,b,E){k===0&&S===void 0?C=w:C=x(C,w,k,A,b,E)},M),C}function a(v,x){var S;switch(v.type){case"FeatureCollection":for(S=0;S<v.features.length&&x(v.features[S].properties,S)!==!1;S++);break;case"Feature":x(v.properties,0);break}}function o(v,x,S){var M=S;return a(v,function(C,w){w===0&&S===void 0?M=C:M=x(M,C,w)}),M}function s(v,x){if(v.type==="Feature")x(v,0);else if(v.type==="FeatureCollection")for(var S=0;S<v.features.length&&x(v.features[S],S)!==!1;S++);}function l(v,x,S){var M=S;return s(v,function(C,w){w===0&&S===void 0?M=C:M=x(M,C,w)}),M}function n(v){var x=[];return t(v,function(S){x.push(S)}),x}function u(v,x){var S,M,C,w,k,A,b,E,T,F,D=0,R=v.type==="FeatureCollection",P=v.type==="Feature",z=R?v.features.length:1;for(S=0;S<z;S++){for(A=R?v.features[S].geometry:P?v.geometry:v,E=R?v.features[S].properties:P?v.properties:{},T=R?v.features[S].bbox:P?v.bbox:void 0,F=R?v.features[S].id:P?v.id:void 0,b=A?A.type==="GeometryCollection":!1,k=b?A.geometries.length:1,C=0;C<k;C++){if(w=b?A.geometries[C]:A,w===null){if(x(null,D,E,T,F)===!1)return!1;continue}switch(w.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(x(w,D,E,T,F)===!1)return!1;break}case"GeometryCollection":{for(M=0;M<w.geometries.length;M++)if(x(w.geometries[M],D,E,T,F)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}D++}}function c(v,x,S){var M=S;return u(v,function(C,w,k,A,b){w===0&&S===void 0?M=C:M=x(M,C,w,k,A,b)}),M}function f(v,x){u(v,function(S,M,C,w,k){var A=S===null?null:S.type;switch(A){case null:case"Point":case"LineString":case"Polygon":return x(r.feature.call(void 0,S,C,{bbox:w,id:k}),M,0)===!1?!1:void 0}var b;switch(A){case"MultiPoint":b="Point";break;case"MultiLineString":b="LineString";break;case"MultiPolygon":b="Polygon";break}for(var E=0;E<S.coordinates.length;E++){var T=S.coordinates[E],F={type:b,coordinates:T};if(x(r.feature.call(void 0,F,C),M,E)===!1)return!1}})}function h(v,x,S){var M=S;return f(v,function(C,w,k){w===0&&k===0&&S===void 0?M=C:M=x(M,C,w,k)}),M}function d(v,x){f(v,function(S,M,C){var w=0;if(S.geometry){var k=S.geometry.type;if(!(k==="Point"||k==="MultiPoint")){var A,b=0,E=0,T=0;if(t(S,function(F,D,R,P,z){if(A===void 0||M>b||P>E||z>T){A=F,b=M,E=P,T=z,w=0;return}var I=r.lineString.call(void 0,[A,F],S.properties);if(x(I,M,C,z,w)===!1)return!1;w++,A=F})===!1)return!1}}})}function p(v,x,S){var M=S,C=!1;return d(v,function(w,k,A,b,E){C===!1&&S===void 0?M=w:M=x(M,w,k,A,b,E),C=!0}),M}function g(v,x){if(!v)throw new Error("geojson is required");f(v,function(S,M,C){if(S.geometry!==null){var w=S.geometry.type,k=S.geometry.coordinates;switch(w){case"LineString":if(x(S,M,C,0,0)===!1)return!1;break;case"Polygon":for(var A=0;A<k.length;A++)if(x(r.lineString.call(void 0,k[A],S.properties),M,C,A)===!1)return!1;break}}})}function m(v,x,S){var M=S;return g(v,function(C,w,k,A){w===0&&S===void 0?M=C:M=x(M,C,w,k,A)}),M}function y(v,x){if(x=x||{},!r.isObject.call(void 0,x))throw new Error("options is invalid");var S=x.featureIndex||0,M=x.multiFeatureIndex||0,C=x.geometryIndex||0,w=x.segmentIndex||0,k=x.properties,A;switch(v.type){case"FeatureCollection":S<0&&(S=v.features.length+S),k=k||v.features[S].properties,A=v.features[S].geometry;break;case"Feature":k=k||v.properties,A=v.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":A=v;break;default:throw new Error("geojson is invalid")}if(A===null)return null;var b=A.coordinates;switch(A.type){case"Point":case"MultiPoint":return null;case"LineString":return w<0&&(w=b.length+w-1),r.lineString.call(void 0,[b[w],b[w+1]],k,x);case"Polygon":return C<0&&(C=b.length+C),w<0&&(w=b[C].length+w-1),r.lineString.call(void 0,[b[C][w],b[C][w+1]],k,x);case"MultiLineString":return M<0&&(M=b.length+M),w<0&&(w=b[M].length+w-1),r.lineString.call(void 0,[b[M][w],b[M][w+1]],k,x);case"MultiPolygon":return M<0&&(M=b.length+M),C<0&&(C=b[M].length+C),w<0&&(w=b[M][C].length-w-1),r.lineString.call(void 0,[b[M][C][w],b[M][C][w+1]],k,x)}throw new Error("geojson is invalid")}function _(v,x){if(x=x||{},!r.isObject.call(void 0,x))throw new Error("options is invalid");var S=x.featureIndex||0,M=x.multiFeatureIndex||0,C=x.geometryIndex||0,w=x.coordIndex||0,k=x.properties,A;switch(v.type){case"FeatureCollection":S<0&&(S=v.features.length+S),k=k||v.features[S].properties,A=v.features[S].geometry;break;case"Feature":k=k||v.properties,A=v.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":A=v;break;default:throw new Error("geojson is invalid")}if(A===null)return null;var b=A.coordinates;switch(A.type){case"Point":return r.point.call(void 0,b,k,x);case"MultiPoint":return M<0&&(M=b.length+M),r.point.call(void 0,b[M],k,x);case"LineString":return w<0&&(w=b.length+w),r.point.call(void 0,b[w],k,x);case"Polygon":return C<0&&(C=b.length+C),w<0&&(w=b[C].length+w),r.point.call(void 0,b[C][w],k,x);case"MultiLineString":return M<0&&(M=b.length+M),w<0&&(w=b[M].length+w),r.point.call(void 0,b[M][w],k,x);case"MultiPolygon":return M<0&&(M=b.length+M),C<0&&(C=b[M].length+C),w<0&&(w=b[M][C].length-w),r.point.call(void 0,b[M][C][w],k,x)}throw new Error("geojson is invalid")}e.coordAll=n,e.coordEach=t,e.coordReduce=i,e.featureEach=s,e.featureReduce=l,e.findPoint=_,e.findSegment=y,e.flattenEach=f,e.flattenReduce=h,e.geomEach=u,e.geomReduce=c,e.lineEach=g,e.lineReduce=m,e.propEach=a,e.propReduce=o,e.segmentEach=d,e.segmentReduce=p}}),qY=de({"node_modules/@turf/area/dist/cjs/index.cjs"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=x4(),t=b4();function i(c){return t.geomReduce.call(void 0,c,(f,h)=>f+a(h),0)}function a(c){let f=0,h;switch(c.type){case"Polygon":return o(c.coordinates);case"MultiPolygon":for(h=0;h<c.coordinates.length;h++)f+=o(c.coordinates[h]);return f;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}function o(c){let f=0;if(c&&c.length>0){f+=Math.abs(n(c[0]));for(let h=1;h<c.length;h++)f-=Math.abs(n(c[h]))}return f}var s=r.earthRadius*r.earthRadius/2,l=Math.PI/180;function n(c){let f=c.length-1;if(f<=2)return 0;let h=0,d=0;for(;d<f;){let p=c[d],g=c[d+1===f?0:d+1],m=c[d+2>=f?(d+2)%f:d+2],y=p[0]*l,_=g[1]*l,v=m[0]*l;h+=(v-y)*Math.sin(_),d++}return h*s}var u=i;e.area=i,e.default=u}}),VY=de({"node_modules/@turf/centroid/dist/cjs/index.cjs"(e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=x4(),t=b4();function i(o,s={}){let l=0,n=0,u=0;return t.coordEach.call(void 0,o,function(c){l+=c[0],n+=c[1],u++},!0),r.point.call(void 0,[l/u,n/u],s.properties)}var a=i;e.centroid=i,e.default=a}}),GY=de({"node_modules/d3-geo/node_modules/d3-array/dist/d3-array.js"(e,r){(function(t,i){i(typeof e=="object"&&typeof r<"u"?e:t.d3=t.d3||{})})(e,(function(t){"use strict";function i($,U){return $<U?-1:$>U?1:$>=U?0:NaN}function a($){return $.length===1&&($=o($)),{left:function(U,V,j,q){for(j==null&&(j=0),q==null&&(q=U.length);j<q;){var Y=j+q>>>1;$(U[Y],V)<0?j=Y+1:q=Y}return j},right:function(U,V,j,q){for(j==null&&(j=0),q==null&&(q=U.length);j<q;){var Y=j+q>>>1;$(U[Y],V)>0?q=Y:j=Y+1}return j}}}function o($){return function(U,V){return i($(U),V)}}var s=a(i),l=s.right,n=s.left;function u($,U){U==null&&(U=c);for(var V=0,j=$.length-1,q=$[0],Y=new Array(j<0?0:j);V<j;)Y[V]=U(q,q=$[++V]);return Y}function c($,U){return[$,U]}function f($,U,V){var j=$.length,q=U.length,Y=new Array(j*q),K,te,ne,se;for(V==null&&(V=c),K=ne=0;K<j;++K)for(se=$[K],te=0;te<q;++te,++ne)Y[ne]=V(se,U[te]);return Y}function h($,U){return U<$?-1:U>$?1:U>=$?0:NaN}function d($){return $===null?NaN:+$}function p($,U){var V=$.length,j=0,q=-1,Y=0,K,te,ne=0;if(U==null)for(;++q<V;)isNaN(K=d($[q]))||(te=K-Y,Y+=te/++j,ne+=te*(K-Y));else for(;++q<V;)isNaN(K=d(U($[q],q,$)))||(te=K-Y,Y+=te/++j,ne+=te*(K-Y));if(j>1)return ne/(j-1)}function g($,U){var V=p($,U);return V&&Math.sqrt(V)}function m($,U){var V=$.length,j=-1,q,Y,K;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=K=q;++j<V;)(q=$[j])!=null&&(Y>q&&(Y=q),K<q&&(K=q))}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=K=q;++j<V;)(q=U($[j],j,$))!=null&&(Y>q&&(Y=q),K<q&&(K=q));return[Y,K]}var y=Array.prototype,_=y.slice,v=y.map;function x($){return function(){return $}}function S($){return $}function M($,U,V){$=+$,U=+U,V=(q=arguments.length)<2?(U=$,$=0,1):q<3?1:+V;for(var j=-1,q=Math.max(0,Math.ceil((U-$)/V))|0,Y=new Array(q);++j<q;)Y[j]=$+j*V;return Y}var C=Math.sqrt(50),w=Math.sqrt(10),k=Math.sqrt(2);function A($,U,V){var j,q=-1,Y,K,te;if(U=+U,$=+$,V=+V,$===U&&V>0)return[$];if((j=U<$)&&(Y=$,$=U,U=Y),(te=b($,U,V))===0||!isFinite(te))return[];if(te>0)for($=Math.ceil($/te),U=Math.floor(U/te),K=new Array(Y=Math.ceil(U-$+1));++q<Y;)K[q]=($+q)*te;else for($=Math.floor($*te),U=Math.ceil(U*te),K=new Array(Y=Math.ceil($-U+1));++q<Y;)K[q]=($-q)/te;return j&&K.reverse(),K}function b($,U,V){var j=(U-$)/Math.max(0,V),q=Math.floor(Math.log(j)/Math.LN10),Y=j/Math.pow(10,q);return q>=0?(Y>=C?10:Y>=w?5:Y>=k?2:1)*Math.pow(10,q):-Math.pow(10,-q)/(Y>=C?10:Y>=w?5:Y>=k?2:1)}function E($,U,V){var j=Math.abs(U-$)/Math.max(0,V),q=Math.pow(10,Math.floor(Math.log(j)/Math.LN10)),Y=j/q;return Y>=C?q*=10:Y>=w?q*=5:Y>=k&&(q*=2),U<$?-q:q}function T($){return Math.ceil(Math.log($.length)/Math.LN2)+1}function F(){var $=S,U=m,V=T;function j(q){var Y,K=q.length,te,ne=new Array(K);for(Y=0;Y<K;++Y)ne[Y]=$(q[Y],Y,q);var se=U(ne),le=se[0],ce=se[1],pe=V(ne,le,ce);Array.isArray(pe)||(pe=E(le,ce,pe),pe=M(Math.ceil(le/pe)*pe,ce,pe));for(var xe=pe.length;pe[0]<=le;)pe.shift(),--xe;for(;pe[xe-1]>ce;)pe.pop(),--xe;var ye=new Array(xe+1),fe;for(Y=0;Y<=xe;++Y)fe=ye[Y]=[],fe.x0=Y>0?pe[Y-1]:le,fe.x1=Y<xe?pe[Y]:ce;for(Y=0;Y<K;++Y)te=ne[Y],le<=te&&te<=ce&&ye[l(pe,te,0,xe)].push(q[Y]);return ye}return j.value=function(q){return arguments.length?($=typeof q=="function"?q:x(q),j):$},j.domain=function(q){return arguments.length?(U=typeof q=="function"?q:x([q[0],q[1]]),j):U},j.thresholds=function(q){return arguments.length?(V=typeof q=="function"?q:Array.isArray(q)?x(_.call(q)):x(q),j):V},j}function D($,U,V){if(V==null&&(V=d),!!(j=$.length)){if((U=+U)<=0||j<2)return+V($[0],0,$);if(U>=1)return+V($[j-1],j-1,$);var j,q=(j-1)*U,Y=Math.floor(q),K=+V($[Y],Y,$),te=+V($[Y+1],Y+1,$);return K+(te-K)*(q-Y)}}function R($,U,V){return $=v.call($,d).sort(i),Math.ceil((V-U)/(2*(D($,.75)-D($,.25))*Math.pow($.length,-1/3)))}function P($,U,V){return Math.ceil((V-U)/(3.5*g($)*Math.pow($.length,-1/3)))}function z($,U){var V=$.length,j=-1,q,Y;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=q;++j<V;)(q=$[j])!=null&&q>Y&&(Y=q)}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=q;++j<V;)(q=U($[j],j,$))!=null&&q>Y&&(Y=q);return Y}function I($,U){var V=$.length,j=V,q=-1,Y,K=0;if(U==null)for(;++q<V;)isNaN(Y=d($[q]))?--j:K+=Y;else for(;++q<V;)isNaN(Y=d(U($[q],q,$)))?--j:K+=Y;if(j)return K/j}function L($,U){var V=$.length,j=-1,q,Y=[];if(U==null)for(;++j<V;)isNaN(q=d($[j]))||Y.push(q);else for(;++j<V;)isNaN(q=d(U($[j],j,$)))||Y.push(q);return D(Y.sort(i),.5)}function B($){for(var U=$.length,V,j=-1,q=0,Y,K;++j<U;)q+=$[j].length;for(Y=new Array(q);--U>=0;)for(K=$[U],V=K.length;--V>=0;)Y[--q]=K[V];return Y}function O($,U){var V=$.length,j=-1,q,Y;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=q;++j<V;)(q=$[j])!=null&&Y>q&&(Y=q)}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=q;++j<V;)(q=U($[j],j,$))!=null&&Y>q&&(Y=q);return Y}function G($,U){for(var V=U.length,j=new Array(V);V--;)j[V]=$[U[V]];return j}function W($,U){if(V=$.length){var V,j=0,q=0,Y,K=$[q];for(U==null&&(U=i);++j<V;)(U(Y=$[j],K)<0||U(K,K)!==0)&&(K=Y,q=j);if(U(K,K)===0)return q}}function X($,U,V){for(var j=(V??$.length)-(U=U==null?0:+U),q,Y;j;)Y=Math.random()*j--|0,q=$[j+U],$[j+U]=$[Y+U],$[Y+U]=q;return $}function Z($,U){var V=$.length,j=-1,q,Y=0;if(U==null)for(;++j<V;)(q=+$[j])&&(Y+=q);else for(;++j<V;)(q=+U($[j],j,$))&&(Y+=q);return Y}function J($){if(!(Y=$.length))return[];for(var U=-1,V=O($,N),j=new Array(V);++U<V;)for(var q=-1,Y,K=j[U]=new Array(Y);++q<Y;)K[q]=$[q][U];return j}function N($){return $.length}function H(){return J(arguments)}t.bisect=l,t.bisectRight=l,t.bisectLeft=n,t.ascending=i,t.bisector=a,t.cross=f,t.descending=h,t.deviation=g,t.extent=m,t.histogram=F,t.thresholdFreedmanDiaconis=R,t.thresholdScott=P,t.thresholdSturges=T,t.max=z,t.mean=I,t.median=L,t.merge=B,t.min=O,t.pairs=u,t.permute=G,t.quantile=D,t.range=M,t.scan=W,t.shuffle=X,t.sum=Z,t.ticks=A,t.tickIncrement=b,t.tickStep=E,t.transpose=J,t.variance=p,t.zip=H,Object.defineProperty(t,"__esModule",{value:!0})}))}}),w4=de({"node_modules/d3-geo/dist/d3-geo.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,GY()):(t=t||self,i(t.d3=t.d3||{},t.d3))})(e,(function(t,i){"use strict";function a(){return new o}function o(){this.reset()}o.prototype={constructor:o,reset:function(){this.s=this.t=0},add:function(nt){l(s,nt,this.t),l(this,s.s,this.s),this.s?this.t+=s.t:this.s=s.t},valueOf:function(){return this.s}};var s=new o;function l(nt,Tt,Kt){var Bt=nt.s=Tt+Kt,yr=Bt-Tt,zr=Bt-yr;nt.t=Tt-zr+(Kt-yr)}var n=1e-6,u=1e-12,c=Math.PI,f=c/2,h=c/4,d=c*2,p=180/c,g=c/180,m=Math.abs,y=Math.atan,_=Math.atan2,v=Math.cos,x=Math.ceil,S=Math.exp,M=Math.log,C=Math.pow,w=Math.sin,k=Math.sign||function(nt){return nt>0?1:nt<0?-1:0},A=Math.sqrt,b=Math.tan;function E(nt){return nt>1?0:nt<-1?c:Math.acos(nt)}function T(nt){return nt>1?f:nt<-1?-f:Math.asin(nt)}function F(nt){return(nt=w(nt/2))*nt}function D(){}function R(nt,Tt){nt&&z.hasOwnProperty(nt.type)&&z[nt.type](nt,Tt)}var P={Feature:function(nt,Tt){R(nt.geometry,Tt)},FeatureCollection:function(nt,Tt){for(var Kt=nt.features,Bt=-1,yr=Kt.length;++Bt<yr;)R(Kt[Bt].geometry,Tt)}},z={Sphere:function(nt,Tt){Tt.sphere()},Point:function(nt,Tt){nt=nt.coordinates,Tt.point(nt[0],nt[1],nt[2])},MultiPoint:function(nt,Tt){for(var Kt=nt.coordinates,Bt=-1,yr=Kt.length;++Bt<yr;)nt=Kt[Bt],Tt.point(nt[0],nt[1],nt[2])},LineString:function(nt,Tt){I(nt.coordinates,Tt,0)},MultiLineString:function(nt,Tt){for(var Kt=nt.coordinates,Bt=-1,yr=Kt.length;++Bt<yr;)I(Kt[Bt],Tt,0)},Polygon:function(nt,Tt){L(nt.coordinates,Tt)},MultiPolygon:function(nt,Tt){for(var Kt=nt.coordinates,Bt=-1,yr=Kt.length;++Bt<yr;)L(Kt[Bt],Tt)},GeometryCollection:function(nt,Tt){for(var Kt=nt.geometries,Bt=-1,yr=Kt.length;++Bt<yr;)R(Kt[Bt],Tt)}};function I(nt,Tt,Kt){var Bt=-1,yr=nt.length-Kt,zr;for(Tt.lineStart();++Bt<yr;)zr=nt[Bt],Tt.point(zr[0],zr[1],zr[2]);Tt.lineEnd()}function L(nt,Tt){var Kt=-1,Bt=nt.length;for(Tt.polygonStart();++Kt<Bt;)I(nt[Kt],Tt,1);Tt.polygonEnd()}function B(nt,Tt){nt&&P.hasOwnProperty(nt.type)?P[nt.type](nt,Tt):R(nt,Tt)}var O=a(),G=a(),W,X,Z,J,N,H={point:D,lineStart:D,lineEnd:D,polygonStart:function(){O.reset(),H.lineStart=$,H.lineEnd=U},polygonEnd:function(){var nt=+O;G.add(nt<0?d+nt:nt),this.lineStart=this.lineEnd=this.point=D},sphere:function(){G.add(d)}};function $(){H.point=V}function U(){j(W,X)}function V(nt,Tt){H.point=j,W=nt,X=Tt,nt*=g,Tt*=g,Z=nt,J=v(Tt=Tt/2+h),N=w(Tt)}function j(nt,Tt){nt*=g,Tt*=g,Tt=Tt/2+h;var Kt=nt-Z,Bt=Kt>=0?1:-1,yr=Bt*Kt,zr=v(Tt),Gr=w(Tt),ii=N*Gr,li=J*zr+ii*v(yr),Fi=ii*Bt*w(yr);O.add(_(Fi,li)),Z=nt,J=zr,N=Gr}function q(nt){return G.reset(),B(nt,H),G*2}function Y(nt){return[_(nt[1],nt[0]),T(nt[2])]}function K(nt){var Tt=nt[0],Kt=nt[1],Bt=v(Kt);return[Bt*v(Tt),Bt*w(Tt),w(Kt)]}function te(nt,Tt){return nt[0]*Tt[0]+nt[1]*Tt[1]+nt[2]*Tt[2]}function ne(nt,Tt){return[nt[1]*Tt[2]-nt[2]*Tt[1],nt[2]*Tt[0]-nt[0]*Tt[2],nt[0]*Tt[1]-nt[1]*Tt[0]]}function se(nt,Tt){nt[0]+=Tt[0],nt[1]+=Tt[1],nt[2]+=Tt[2]}function le(nt,Tt){return[nt[0]*Tt,nt[1]*Tt,nt[2]*Tt]}function ce(nt){var Tt=A(nt[0]*nt[0]+nt[1]*nt[1]+nt[2]*nt[2]);nt[0]/=Tt,nt[1]/=Tt,nt[2]/=Tt}var pe,xe,ye,fe,ae,ee,ie,Q,ue=a(),ge,Me,Te={point:je,lineStart:Ze,lineEnd:Ke,polygonStart:function(){Te.point=vt,Te.lineStart=xt,Te.lineEnd=Pt,ue.reset(),H.polygonStart()},polygonEnd:function(){H.polygonEnd(),Te.point=je,Te.lineStart=Ze,Te.lineEnd=Ke,O<0?(pe=-(ye=180),xe=-(fe=90)):ue>n?fe=90:ue<-n&&(xe=-90),Me[0]=pe,Me[1]=ye},sphere:function(){pe=-(ye=180),xe=-(fe=90)}};function je(nt,Tt){ge.push(Me=[pe=nt,ye=nt]),Tt<xe&&(xe=Tt),Tt>fe&&(fe=Tt)}function Ve(nt,Tt){var Kt=K([nt*g,Tt*g]);if(Q){var Bt=ne(Q,Kt),yr=[Bt[1],-Bt[0],0],zr=ne(yr,Bt);ce(zr),zr=Y(zr);var Gr=nt-ae,ii=Gr>0?1:-1,li=zr[0]*p*ii,Fi,$r=m(Gr)>180;$r^(ii*ae<li&&li<ii*nt)?(Fi=zr[1]*p,Fi>fe&&(fe=Fi)):(li=(li+360)%360-180,$r^(ii*ae<li&&li<ii*nt)?(Fi=-zr[1]*p,Fi<xe&&(xe=Fi)):(Tt<xe&&(xe=Tt),Tt>fe&&(fe=Tt))),$r?nt<ae?mt(pe,nt)>mt(pe,ye)&&(ye=nt):mt(nt,ye)>mt(pe,ye)&&(pe=nt):ye>=pe?(nt<pe&&(pe=nt),nt>ye&&(ye=nt)):nt>ae?mt(pe,nt)>mt(pe,ye)&&(ye=nt):mt(nt,ye)>mt(pe,ye)&&(pe=nt)}else ge.push(Me=[pe=nt,ye=nt]);Tt<xe&&(xe=Tt),Tt>fe&&(fe=Tt),Q=Kt,ae=nt}function Ze(){Te.point=Ve}function Ke(){Me[0]=pe,Me[1]=ye,Te.point=je,Q=null}function vt(nt,Tt){if(Q){var Kt=nt-ae;ue.add(m(Kt)>180?Kt+(Kt>0?360:-360):Kt)}else ee=nt,ie=Tt;H.point(nt,Tt),Ve(nt,Tt)}function xt(){H.lineStart()}function Pt(){vt(ee,ie),H.lineEnd(),m(ue)>n&&(pe=-(ye=180)),Me[0]=pe,Me[1]=ye,Q=null}function mt(nt,Tt){return(Tt-=nt)<0?Tt+360:Tt}function Mt(nt,Tt){return nt[0]-Tt[0]}function lt(nt,Tt){return nt[0]<=nt[1]?nt[0]<=Tt&&Tt<=nt[1]:Tt<nt[0]||nt[1]<Tt}function qe(nt){var Tt,Kt,Bt,yr,zr,Gr,ii;if(fe=ye=-(pe=xe=1/0),ge=[],B(nt,Te),Kt=ge.length){for(ge.sort(Mt),Tt=1,Bt=ge[0],zr=[Bt];Tt<Kt;++Tt)yr=ge[Tt],lt(Bt,yr[0])||lt(Bt,yr[1])?(mt(Bt[0],yr[1])>mt(Bt[0],Bt[1])&&(Bt[1]=yr[1]),mt(yr[0],Bt[1])>mt(Bt[0],Bt[1])&&(Bt[0]=yr[0])):zr.push(Bt=yr);for(Gr=-1/0,Kt=zr.length-1,Tt=0,Bt=zr[Kt];Tt<=Kt;Bt=yr,++Tt)yr=zr[Tt],(ii=mt(Bt[1],yr[0]))>Gr&&(Gr=ii,pe=yr[0],ye=Bt[1])}return ge=Me=null,pe===1/0||xe===1/0?[[NaN,NaN],[NaN,NaN]]:[[pe,xe],[ye,fe]]}var Ye,me,_e,Ae,ke,Ee,De,Je,Ue,at,rt,ft,At,ht,Gt,fr,gt={sphere:D,point:yt,lineStart:Lt,lineEnd:mr,polygonStart:function(){gt.lineStart=br,gt.lineEnd=Er},polygonEnd:function(){gt.lineStart=Lt,gt.lineEnd=mr}};function yt(nt,Tt){nt*=g,Tt*=g;var Kt=v(Tt);kt(Kt*v(nt),Kt*w(nt),w(Tt))}function kt(nt,Tt,Kt){++Ye,_e+=(nt-_e)/Ye,Ae+=(Tt-Ae)/Ye,ke+=(Kt-ke)/Ye}function Lt(){gt.point=Ct}function Ct(nt,Tt){nt*=g,Tt*=g;var Kt=v(Tt);ht=Kt*v(nt),Gt=Kt*w(nt),fr=w(Tt),gt.point=$t,kt(ht,Gt,fr)}function $t(nt,Tt){nt*=g,Tt*=g;var Kt=v(Tt),Bt=Kt*v(nt),yr=Kt*w(nt),zr=w(Tt),Gr=_(A((Gr=Gt*zr-fr*yr)*Gr+(Gr=fr*Bt-ht*zr)*Gr+(Gr=ht*yr-Gt*Bt)*Gr),ht*Bt+Gt*yr+fr*zr);me+=Gr,Ee+=Gr*(ht+(ht=Bt)),De+=Gr*(Gt+(Gt=yr)),Je+=Gr*(fr+(fr=zr)),kt(ht,Gt,fr)}function mr(){gt.point=yt}function br(){gt.point=Tr}function Er(){Ur(ft,At),gt.point=yt}function Tr(nt,Tt){ft=nt,At=Tt,nt*=g,Tt*=g,gt.point=Ur;var Kt=v(Tt);ht=Kt*v(nt),Gt=Kt*w(nt),fr=w(Tt),kt(ht,Gt,fr)}function Ur(nt,Tt){nt*=g,Tt*=g;var Kt=v(Tt),Bt=Kt*v(nt),yr=Kt*w(nt),zr=w(Tt),Gr=Gt*zr-fr*yr,ii=fr*Bt-ht*zr,li=ht*yr-Gt*Bt,Fi=A(Gr*Gr+ii*ii+li*li),$r=T(Fi),ni=Fi&&-$r/Fi;Ue+=ni*Gr,at+=ni*ii,rt+=ni*li,me+=$r,Ee+=$r*(ht+(ht=Bt)),De+=$r*(Gt+(Gt=yr)),Je+=$r*(fr+(fr=zr)),kt(ht,Gt,fr)}function Ai(nt){Ye=me=_e=Ae=ke=Ee=De=Je=Ue=at=rt=0,B(nt,gt);var Tt=Ue,Kt=at,Bt=rt,yr=Tt*Tt+Kt*Kt+Bt*Bt;return yr<u&&(Tt=Ee,Kt=De,Bt=Je,me<n&&(Tt=_e,Kt=Ae,Bt=ke),yr=Tt*Tt+Kt*Kt+Bt*Bt,yr<u)?[NaN,NaN]:[_(Kt,Tt)*p,T(Bt/A(yr))*p]}function oi(nt){return function(){return nt}}function Qr(nt,Tt){function Kt(Bt,yr){return Bt=nt(Bt,yr),Tt(Bt[0],Bt[1])}return nt.invert&&Tt.invert&&(Kt.invert=function(Bt,yr){return Bt=Tt.invert(Bt,yr),Bt&&nt.invert(Bt[0],Bt[1])}),Kt}function ea(nt,Tt){return[m(nt)>c?nt+Math.round(-nt/d)*d:nt,Tt]}ea.invert=ea;function $i(nt,Tt,Kt){return(nt%=d)?Tt||Kt?Qr(ya(nt),pa(Tt,Kt)):ya(nt):Tt||Kt?pa(Tt,Kt):ea}function ja(nt){return function(Tt,Kt){return Tt+=nt,[Tt>c?Tt-d:Tt<-c?Tt+d:Tt,Kt]}}function ya(nt){var Tt=ja(nt);return Tt.invert=ja(-nt),Tt}function pa(nt,Tt){var Kt=v(nt),Bt=w(nt),yr=v(Tt),zr=w(Tt);function Gr(ii,li){var Fi=v(li),$r=v(ii)*Fi,ni=w(ii)*Fi,ui=w(li),Di=ui*Kt+$r*Bt;return[_(ni*yr-Di*zr,$r*Kt-ui*Bt),T(Di*yr+ni*zr)]}return Gr.invert=function(ii,li){var Fi=v(li),$r=v(ii)*Fi,ni=w(ii)*Fi,ui=w(li),Di=ui*yr-ni*zr;return[_(ni*yr+ui*zr,$r*Kt+Di*Bt),T(Di*Kt-$r*Bt)]},Gr}function xi(nt){nt=$i(nt[0]*g,nt[1]*g,nt.length>2?nt[2]*g:0);function Tt(Kt){return Kt=nt(Kt[0]*g,Kt[1]*g),Kt[0]*=p,Kt[1]*=p,Kt}return Tt.invert=function(Kt){return Kt=nt.invert(Kt[0]*g,Kt[1]*g),Kt[0]*=p,Kt[1]*=p,Kt},Tt}function bi(nt,Tt,Kt,Bt,yr,zr){if(Kt){var Gr=v(Tt),ii=w(Tt),li=Bt*Kt;yr==null?(yr=Tt+Bt*d,zr=Tt-li/2):(yr=Ua(Gr,yr),zr=Ua(Gr,zr),(Bt>0?yr<zr:yr>zr)&&(yr+=Bt*d));for(var Fi,$r=yr;Bt>0?$r>zr:$r<zr;$r-=li)Fi=Y([Gr,-ii*v($r),-ii*w($r)]),nt.point(Fi[0],Fi[1])}}function Ua(nt,Tt){Tt=K(Tt),Tt[0]-=nt,ce(Tt);var Kt=E(-Tt[1]);return((-Tt[2]<0?-Kt:Kt)+d-n)%d}function dn(){var nt=oi([0,0]),Tt=oi(90),Kt=oi(6),Bt,yr,zr={point:Gr};function Gr(li,Fi){Bt.push(li=yr(li,Fi)),li[0]*=p,li[1]*=p}function ii(){var li=nt.apply(this,arguments),Fi=Tt.apply(this,arguments)*g,$r=Kt.apply(this,arguments)*g;return Bt=[],yr=$i(-li[0]*g,-li[1]*g,0).invert,bi(zr,Fi,$r,1),li={type:"Polygon",coordinates:[Bt]},Bt=yr=null,li}return ii.center=function(li){return arguments.length?(nt=typeof li=="function"?li:oi([+li[0],+li[1]]),ii):nt},ii.radius=function(li){return arguments.length?(Tt=typeof li=="function"?li:oi(+li),ii):Tt},ii.precision=function(li){return arguments.length?(Kt=typeof li=="function"?li:oi(+li),ii):Kt},ii}function pi(){var nt=[],Tt;return{point:function(Kt,Bt,yr){Tt.push([Kt,Bt,yr])},lineStart:function(){nt.push(Tt=[])},lineEnd:D,rejoin:function(){nt.length>1&&nt.push(nt.pop().concat(nt.shift()))},result:function(){var Kt=nt;return nt=[],Tt=null,Kt}}}function Jr(nt,Tt){return m(nt[0]-Tt[0])<n&&m(nt[1]-Tt[1])<n}function Be(nt,Tt,Kt,Bt){this.x=nt,this.z=Tt,this.o=Kt,this.e=Bt,this.v=!1,this.n=this.p=null}function Fe(nt,Tt,Kt,Bt,yr){var zr=[],Gr=[],ii,li;if(nt.forEach(function(Wi){if(!((Oa=Wi.length-1)<=0)){var Oa,Pa=Wi[0],Ja=Wi[Oa],rn;if(Jr(Pa,Ja)){if(!Pa[2]&&!Ja[2]){for(yr.lineStart(),ii=0;ii<Oa;++ii)yr.point((Pa=Wi[ii])[0],Pa[1]);yr.lineEnd();return}Ja[0]+=2*n}zr.push(rn=new Be(Pa,Wi,null,!0)),Gr.push(rn.o=new Be(Pa,null,rn,!1)),zr.push(rn=new Be(Ja,Wi,null,!1)),Gr.push(rn.o=new Be(Ja,null,rn,!0))}}),!!zr.length){for(Gr.sort(Tt),Et(zr),Et(Gr),ii=0,li=Gr.length;ii<li;++ii)Gr[ii].e=Kt=!Kt;for(var Fi=zr[0],$r,ni;;){for(var ui=Fi,Di=!0;ui.v;)if((ui=ui.n)===Fi)return;$r=ui.z,yr.lineStart();do{if(ui.v=ui.o.v=!0,ui.e){if(Di)for(ii=0,li=$r.length;ii<li;++ii)yr.point((ni=$r[ii])[0],ni[1]);else Bt(ui.x,ui.n.x,1,yr);ui=ui.n}else{if(Di)for($r=ui.p.z,ii=$r.length-1;ii>=0;--ii)yr.point((ni=$r[ii])[0],ni[1]);else Bt(ui.x,ui.p.x,-1,yr);ui=ui.p}ui=ui.o,$r=ui.z,Di=!Di}while(!ui.v);yr.lineEnd()}}}function Et(nt){if(Tt=nt.length){for(var Tt,Kt=0,Bt=nt[0],yr;++Kt<Tt;)Bt.n=yr=nt[Kt],yr.p=Bt,Bt=yr;Bt.n=yr=nt[0],yr.p=Bt}}var St=a();function zt(nt){return m(nt[0])<=c?nt[0]:k(nt[0])*((m(nt[0])+c)%d-c)}function Wt(nt,Tt){var Kt=zt(Tt),Bt=Tt[1],yr=w(Bt),zr=[w(Kt),-v(Kt),0],Gr=0,ii=0;St.reset(),yr===1?Bt=f+n:yr===-1&&(Bt=-f-n);for(var li=0,Fi=nt.length;li<Fi;++li)if(ni=($r=nt[li]).length)for(var $r,ni,ui=$r[ni-1],Di=zt(ui),Wi=ui[1]/2+h,Oa=w(Wi),Pa=v(Wi),Ja=0;Ja<ni;++Ja,Di=Zi,Oa=vn,Pa=Dn,ui=rn){var rn=$r[Ja],Zi=zt(rn),sa=rn[1]/2+h,vn=w(sa),Dn=v(sa),po=Zi-Di,zo=po>=0?1:-1,wo=zo*po,$o=wo>c,io=Oa*vn;if(St.add(_(io*zo*w(wo),Pa*Dn+io*v(wo))),Gr+=$o?po+zo*d:po,$o^Di>=Kt^Zi>=Kt){var Us=ne(K(ui),K(rn));ce(Us);var gs=ne(zr,Us);ce(gs);var Go=($o^po>=0?-1:1)*T(gs[2]);(Bt>Go||Bt===Go&&(Us[0]||Us[1]))&&(ii+=$o^po>=0?1:-1)}}return(Gr<-n||Gr<n&&St<-n)^ii&1}function Yt(nt,Tt,Kt,Bt){return function(yr){var zr=Tt(yr),Gr=pi(),ii=Tt(Gr),li=!1,Fi,$r,ni,ui={point:Di,lineStart:Oa,lineEnd:Pa,polygonStart:function(){ui.point=Ja,ui.lineStart=rn,ui.lineEnd=Zi,$r=[],Fi=[]},polygonEnd:function(){ui.point=Di,ui.lineStart=Oa,ui.lineEnd=Pa,$r=i.merge($r);var sa=Wt(Fi,Bt);$r.length?(li||(yr.polygonStart(),li=!0),Fe($r,tt,sa,Kt,yr)):sa&&(li||(yr.polygonStart(),li=!0),yr.lineStart(),Kt(null,null,1,yr),yr.lineEnd()),li&&(yr.polygonEnd(),li=!1),$r=Fi=null},sphere:function(){yr.polygonStart(),yr.lineStart(),Kt(null,null,1,yr),yr.lineEnd(),yr.polygonEnd()}};function Di(sa,vn){nt(sa,vn)&&yr.point(sa,vn)}function Wi(sa,vn){zr.point(sa,vn)}function Oa(){ui.point=Wi,zr.lineStart()}function Pa(){ui.point=Di,zr.lineEnd()}function Ja(sa,vn){ni.push([sa,vn]),ii.point(sa,vn)}function rn(){ii.lineStart(),ni=[]}function Zi(){Ja(ni[0][0],ni[0][1]),ii.lineEnd();var sa=ii.clean(),vn=Gr.result(),Dn,po=vn.length,zo,wo,$o;if(ni.pop(),Fi.push(ni),ni=null,!!po){if(sa&1){if(wo=vn[0],(zo=wo.length-1)>0){for(li||(yr.polygonStart(),li=!0),yr.lineStart(),Dn=0;Dn<zo;++Dn)yr.point(($o=wo[Dn])[0],$o[1]);yr.lineEnd()}return}po>1&&sa&2&&vn.push(vn.pop().concat(vn.shift())),$r.push(vn.filter(ze))}}return ui}}function ze(nt){return nt.length>1}function tt(nt,Tt){return((nt=nt.x)[0]<0?nt[1]-f-n:f-nt[1])-((Tt=Tt.x)[0]<0?Tt[1]-f-n:f-Tt[1])}var ct=Yt(function(){return!0},wt,It,[-c,-f]);function wt(nt){var Tt=NaN,Kt=NaN,Bt=NaN,yr;return{lineStart:function(){nt.lineStart(),yr=1},point:function(zr,Gr){var ii=zr>0?c:-c,li=m(zr-Tt);m(li-c)<n?(nt.point(Tt,Kt=(Kt+Gr)/2>0?f:-f),nt.point(Bt,Kt),nt.lineEnd(),nt.lineStart(),nt.point(ii,Kt),nt.point(zr,Kt),yr=0):Bt!==ii&&li>=c&&(m(Tt-Bt)<n&&(Tt-=Bt*n),m(zr-ii)<n&&(zr-=ii*n),Kt=Nt(Tt,Kt,zr,Gr),nt.point(Bt,Kt),nt.lineEnd(),nt.lineStart(),nt.point(ii,Kt),yr=0),nt.point(Tt=zr,Kt=Gr),Bt=ii},lineEnd:function(){nt.lineEnd(),Tt=Kt=NaN},clean:function(){return 2-yr}}}function Nt(nt,Tt,Kt,Bt){var yr,zr,Gr=w(nt-Kt);return m(Gr)>n?y((w(Tt)*(zr=v(Bt))*w(Kt)-w(Bt)*(yr=v(Tt))*w(nt))/(yr*zr*Gr)):(Tt+Bt)/2}function It(nt,Tt,Kt,Bt){var yr;if(nt==null)yr=Kt*f,Bt.point(-c,yr),Bt.point(0,yr),Bt.point(c,yr),Bt.point(c,0),Bt.point(c,-yr),Bt.point(0,-yr),Bt.point(-c,-yr),Bt.point(-c,0),Bt.point(-c,yr);else if(m(nt[0]-Tt[0])>n){var zr=nt[0]<Tt[0]?c:-c;yr=Kt*zr/2,Bt.point(-zr,yr),Bt.point(0,yr),Bt.point(zr,yr)}else Bt.point(Tt[0],Tt[1])}function Zt(nt){var Tt=v(nt),Kt=6*g,Bt=Tt>0,yr=m(Tt)>n;function zr($r,ni,ui,Di){bi(Di,nt,Kt,ui,$r,ni)}function Gr($r,ni){return v($r)*v(ni)>Tt}function ii($r){var ni,ui,Di,Wi,Oa;return{lineStart:function(){Wi=Di=!1,Oa=1},point:function(Pa,Ja){var rn=[Pa,Ja],Zi,sa=Gr(Pa,Ja),vn=Bt?sa?0:Fi(Pa,Ja):sa?Fi(Pa+(Pa<0?c:-c),Ja):0;if(!ni&&(Wi=Di=sa)&&$r.lineStart(),sa!==Di&&(Zi=li(ni,rn),(!Zi||Jr(ni,Zi)||Jr(rn,Zi))&&(rn[2]=1)),sa!==Di)Oa=0,sa?($r.lineStart(),Zi=li(rn,ni),$r.point(Zi[0],Zi[1])):(Zi=li(ni,rn),$r.point(Zi[0],Zi[1],2),$r.lineEnd()),ni=Zi;else if(yr&&ni&&Bt^sa){var Dn;!(vn&ui)&&(Dn=li(rn,ni,!0))&&(Oa=0,Bt?($r.lineStart(),$r.point(Dn[0][0],Dn[0][1]),$r.point(Dn[1][0],Dn[1][1]),$r.lineEnd()):($r.point(Dn[1][0],Dn[1][1]),$r.lineEnd(),$r.lineStart(),$r.point(Dn[0][0],Dn[0][1],3)))}sa&&(!ni||!Jr(ni,rn))&&$r.point(rn[0],rn[1]),ni=rn,Di=sa,ui=vn},lineEnd:function(){Di&&$r.lineEnd(),ni=null},clean:function(){return Oa|(Wi&&Di)<<1}}}function li($r,ni,ui){var Di=K($r),Wi=K(ni),Oa=[1,0,0],Pa=ne(Di,Wi),Ja=te(Pa,Pa),rn=Pa[0],Zi=Ja-rn*rn;if(!Zi)return!ui&&$r;var sa=Tt*Ja/Zi,vn=-Tt*rn/Zi,Dn=ne(Oa,Pa),po=le(Oa,sa),zo=le(Pa,vn);se(po,zo);var wo=Dn,$o=te(po,wo),io=te(wo,wo),Us=$o*$o-io*(te(po,po)-1);if(!(Us<0)){var gs=A(Us),Go=le(wo,(-$o-gs)/io);if(se(Go,po),Go=Y(Go),!ui)return Go;var ma=$r[0],vo=ni[0],Ds=$r[1],qs=ni[1],Ll;vo<ma&&(Ll=ma,ma=vo,vo=Ll);var bu=vo-ma,Gl=m(bu-c)<n,ac=Gl||bu<n;if(!Gl&&qs<Ds&&(Ll=Ds,Ds=qs,qs=Ll),ac?Gl?Ds+qs>0^Go[1]<(m(Go[0]-ma)<n?Ds:qs):Ds<=Go[1]&&Go[1]<=qs:bu>c^(ma<=Go[0]&&Go[0]<=vo)){var bl=le(wo,(-$o+gs)/io);return se(bl,po),[Go,Y(bl)]}}}function Fi($r,ni){var ui=Bt?nt:c-nt,Di=0;return $r<-ui?Di|=1:$r>ui&&(Di|=2),ni<-ui?Di|=4:ni>ui&&(Di|=8),Di}return Yt(Gr,ii,zr,Bt?[0,-nt]:[-c,nt-c])}function qt(nt,Tt,Kt,Bt,yr,zr){var Gr=nt[0],ii=nt[1],li=Tt[0],Fi=Tt[1],$r=0,ni=1,ui=li-Gr,Di=Fi-ii,Wi;if(Wi=Kt-Gr,!(!ui&&Wi>0)){if(Wi/=ui,ui<0){if(Wi<$r)return;Wi<ni&&(ni=Wi)}else if(ui>0){if(Wi>ni)return;Wi>$r&&($r=Wi)}if(Wi=yr-Gr,!(!ui&&Wi<0)){if(Wi/=ui,ui<0){if(Wi>ni)return;Wi>$r&&($r=Wi)}else if(ui>0){if(Wi<$r)return;Wi<ni&&(ni=Wi)}if(Wi=Bt-ii,!(!Di&&Wi>0)){if(Wi/=Di,Di<0){if(Wi<$r)return;Wi<ni&&(ni=Wi)}else if(Di>0){if(Wi>ni)return;Wi>$r&&($r=Wi)}if(Wi=zr-ii,!(!Di&&Wi<0)){if(Wi/=Di,Di<0){if(Wi>ni)return;Wi>$r&&($r=Wi)}else if(Di>0){if(Wi<$r)return;Wi<ni&&(ni=Wi)}return $r>0&&(nt[0]=Gr+$r*ui,nt[1]=ii+$r*Di),ni<1&&(Tt[0]=Gr+ni*ui,Tt[1]=ii+ni*Di),!0}}}}}var vr=1e9,Br=-vr;function Pr(nt,Tt,Kt,Bt){function yr(Fi,$r){return nt<=Fi&&Fi<=Kt&&Tt<=$r&&$r<=Bt}function zr(Fi,$r,ni,ui){var Di=0,Wi=0;if(Fi==null||(Di=Gr(Fi,ni))!==(Wi=Gr($r,ni))||li(Fi,$r)<0^ni>0)do ui.point(Di===0||Di===3?nt:Kt,Di>1?Bt:Tt);while((Di=(Di+ni+4)%4)!==Wi);else ui.point($r[0],$r[1])}function Gr(Fi,$r){return m(Fi[0]-nt)<n?$r>0?0:3:m(Fi[0]-Kt)<n?$r>0?2:1:m(Fi[1]-Tt)<n?$r>0?1:0:$r>0?3:2}function ii(Fi,$r){return li(Fi.x,$r.x)}function li(Fi,$r){var ni=Gr(Fi,1),ui=Gr($r,1);return ni!==ui?ni-ui:ni===0?$r[1]-Fi[1]:ni===1?Fi[0]-$r[0]:ni===2?Fi[1]-$r[1]:$r[0]-Fi[0]}return function(Fi){var $r=Fi,ni=pi(),ui,Di,Wi,Oa,Pa,Ja,rn,Zi,sa,vn,Dn,po={point:zo,lineStart:Us,lineEnd:gs,polygonStart:$o,polygonEnd:io};function zo(ma,vo){yr(ma,vo)&&$r.point(ma,vo)}function wo(){for(var ma=0,vo=0,Ds=Di.length;vo<Ds;++vo)for(var qs=Di[vo],Ll=1,bu=qs.length,Gl=qs[0],ac,bl,Uu=Gl[0],Fc=Gl[1];Ll<bu;++Ll)ac=Uu,bl=Fc,Gl=qs[Ll],Uu=Gl[0],Fc=Gl[1],bl<=Bt?Fc>Bt&&(Uu-ac)*(Bt-bl)>(Fc-bl)*(nt-ac)&&++ma:Fc<=Bt&&(Uu-ac)*(Bt-bl)<(Fc-bl)*(nt-ac)&&--ma;return ma}function $o(){$r=ni,ui=[],Di=[],Dn=!0}function io(){var ma=wo(),vo=Dn&&ma,Ds=(ui=i.merge(ui)).length;(vo||Ds)&&(Fi.polygonStart(),vo&&(Fi.lineStart(),zr(null,null,1,Fi),Fi.lineEnd()),Ds&&Fe(ui,ii,ma,zr,Fi),Fi.polygonEnd()),$r=Fi,ui=Di=Wi=null}function Us(){po.point=Go,Di&&Di.push(Wi=[]),vn=!0,sa=!1,rn=Zi=NaN}function gs(){ui&&(Go(Oa,Pa),Ja&&sa&&ni.rejoin(),ui.push(ni.result())),po.point=zo,sa&&$r.lineEnd()}function Go(ma,vo){var Ds=yr(ma,vo);if(Di&&Wi.push([ma,vo]),vn)Oa=ma,Pa=vo,Ja=Ds,vn=!1,Ds&&($r.lineStart(),$r.point(ma,vo));else if(Ds&&sa)$r.point(ma,vo);else{var qs=[rn=Math.max(Br,Math.min(vr,rn)),Zi=Math.max(Br,Math.min(vr,Zi))],Ll=[ma=Math.max(Br,Math.min(vr,ma)),vo=Math.max(Br,Math.min(vr,vo))];qt(qs,Ll,nt,Tt,Kt,Bt)?(sa||($r.lineStart(),$r.point(qs[0],qs[1])),$r.point(Ll[0],Ll[1]),Ds||$r.lineEnd(),Dn=!1):Ds&&($r.lineStart(),$r.point(ma,vo),Dn=!1)}rn=ma,Zi=vo,sa=Ds}return po}}function Mi(){var nt=0,Tt=0,Kt=960,Bt=500,yr,zr,Gr;return Gr={stream:function(ii){return yr&&zr===ii?yr:yr=Pr(nt,Tt,Kt,Bt)(zr=ii)},extent:function(ii){return arguments.length?(nt=+ii[0][0],Tt=+ii[0][1],Kt=+ii[1][0],Bt=+ii[1][1],yr=zr=null,Gr):[[nt,Tt],[Kt,Bt]]}}}var gi=a(),ba,Hi,Za,oa={sphere:D,point:D,lineStart:Cn,lineEnd:D,polygonStart:D,polygonEnd:D};function Cn(){oa.point=Li,oa.lineEnd=_n}function _n(){oa.point=oa.lineEnd=D}function Li(nt,Tt){nt*=g,Tt*=g,ba=nt,Hi=w(Tt),Za=v(Tt),oa.point=In}function In(nt,Tt){nt*=g,Tt*=g;var Kt=w(Tt),Bt=v(Tt),yr=m(nt-ba),zr=v(yr),Gr=w(yr),ii=Bt*Gr,li=Za*Kt-Hi*Bt*zr,Fi=Hi*Kt+Za*Bt*zr;gi.add(_(A(ii*ii+li*li),Fi)),ba=nt,Hi=Kt,Za=Bt}function pn(nt){return gi.reset(),B(nt,oa),+gi}var Ka=[null,null],Rn={type:"LineString",coordinates:Ka};function tn(nt,Tt){return Ka[0]=nt,Ka[1]=Tt,pn(Rn)}var Mn={Feature:function(nt,Tt){return zn(nt.geometry,Tt)},FeatureCollection:function(nt,Tt){for(var Kt=nt.features,Bt=-1,yr=Kt.length;++Bt<yr;)if(zn(Kt[Bt].geometry,Tt))return!0;return!1}},Kn={Sphere:function(){return!0},Point:function(nt,Tt){return ua(nt.coordinates,Tt)},MultiPoint:function(nt,Tt){for(var Kt=nt.coordinates,Bt=-1,yr=Kt.length;++Bt<yr;)if(ua(Kt[Bt],Tt))return!0;return!1},LineString:function(nt,Tt){return Ea(nt.coordinates,Tt)},MultiLineString:function(nt,Tt){for(var Kt=nt.coordinates,Bt=-1,yr=Kt.length;++Bt<yr;)if(Ea(Kt[Bt],Tt))return!0;return!1},Polygon:function(nt,Tt){return ln(nt.coordinates,Tt)},MultiPolygon:function(nt,Tt){for(var Kt=nt.coordinates,Bt=-1,yr=Kt.length;++Bt<yr;)if(ln(Kt[Bt],Tt))return!0;return!1},GeometryCollection:function(nt,Tt){for(var Kt=nt.geometries,Bt=-1,yr=Kt.length;++Bt<yr;)if(zn(Kt[Bt],Tt))return!0;return!1}};function zn(nt,Tt){return nt&&Kn.hasOwnProperty(nt.type)?Kn[nt.type](nt,Tt):!1}function ua(nt,Tt){return tn(nt,Tt)===0}function Ea(nt,Tt){for(var Kt,Bt,yr,zr=0,Gr=nt.length;zr<Gr;zr++){if(Bt=tn(nt[zr],Tt),Bt===0||zr>0&&(yr=tn(nt[zr],nt[zr-1]),yr>0&&Kt<=yr&&Bt<=yr&&(Kt+Bt-yr)*(1-Math.pow((Kt-Bt)/yr,2))<u*yr))return!0;Kt=Bt}return!1}function ln(nt,Tt){return!!Wt(nt.map(on),ao(Tt))}function on(nt){return nt=nt.map(ao),nt.pop(),nt}function ao(nt){return[nt[0]*g,nt[1]*g]}function ho(nt,Tt){return(nt&&Mn.hasOwnProperty(nt.type)?Mn[nt.type]:zn)(nt,Tt)}function Jn(nt,Tt,Kt){var Bt=i.range(nt,Tt-n,Kt).concat(Tt);return function(yr){return Bt.map(function(zr){return[yr,zr]})}}function lo(nt,Tt,Kt){var Bt=i.range(nt,Tt-n,Kt).concat(Tt);return function(yr){return Bt.map(function(zr){return[zr,yr]})}}function Fo(){var nt,Tt,Kt,Bt,yr,zr,Gr,ii,li=10,Fi=li,$r=90,ni=360,ui,Di,Wi,Oa,Pa=2.5;function Ja(){return{type:"MultiLineString",coordinates:rn()}}function rn(){return i.range(x(Bt/$r)*$r,Kt,$r).map(Wi).concat(i.range(x(ii/ni)*ni,Gr,ni).map(Oa)).concat(i.range(x(Tt/li)*li,nt,li).filter(function(Zi){return m(Zi%$r)>n}).map(ui)).concat(i.range(x(zr/Fi)*Fi,yr,Fi).filter(function(Zi){return m(Zi%ni)>n}).map(Di))}return Ja.lines=function(){return rn().map(function(Zi){return{type:"LineString",coordinates:Zi}})},Ja.outline=function(){return{type:"Polygon",coordinates:[Wi(Bt).concat(Oa(Gr).slice(1),Wi(Kt).reverse().slice(1),Oa(ii).reverse().slice(1))]}},Ja.extent=function(Zi){return arguments.length?Ja.extentMajor(Zi).extentMinor(Zi):Ja.extentMinor()},Ja.extentMajor=function(Zi){return arguments.length?(Bt=+Zi[0][0],Kt=+Zi[1][0],ii=+Zi[0][1],Gr=+Zi[1][1],Bt>Kt&&(Zi=Bt,Bt=Kt,Kt=Zi),ii>Gr&&(Zi=ii,ii=Gr,Gr=Zi),Ja.precision(Pa)):[[Bt,ii],[Kt,Gr]]},Ja.extentMinor=function(Zi){return arguments.length?(Tt=+Zi[0][0],nt=+Zi[1][0],zr=+Zi[0][1],yr=+Zi[1][1],Tt>nt&&(Zi=Tt,Tt=nt,nt=Zi),zr>yr&&(Zi=zr,zr=yr,yr=Zi),Ja.precision(Pa)):[[Tt,zr],[nt,yr]]},Ja.step=function(Zi){return arguments.length?Ja.stepMajor(Zi).stepMinor(Zi):Ja.stepMinor()},Ja.stepMajor=function(Zi){return arguments.length?($r=+Zi[0],ni=+Zi[1],Ja):[$r,ni]},Ja.stepMinor=function(Zi){return arguments.length?(li=+Zi[0],Fi=+Zi[1],Ja):[li,Fi]},Ja.precision=function(Zi){return arguments.length?(Pa=+Zi,ui=Jn(zr,yr,90),Di=lo(Tt,nt,Pa),Wi=Jn(ii,Gr,90),Oa=lo(Bt,Kt,Pa),Ja):Pa},Ja.extentMajor([[-180,-90+n],[180,90-n]]).extentMinor([[-180,-80-n],[180,80+n]])}function uo(){return Fo()()}function Qn(nt,Tt){var Kt=nt[0]*g,Bt=nt[1]*g,yr=Tt[0]*g,zr=Tt[1]*g,Gr=v(Bt),ii=w(Bt),li=v(zr),Fi=w(zr),$r=Gr*v(Kt),ni=Gr*w(Kt),ui=li*v(yr),Di=li*w(yr),Wi=2*T(A(F(zr-Bt)+Gr*li*F(yr-Kt))),Oa=w(Wi),Pa=Wi?function(Ja){var rn=w(Ja*=Wi)/Oa,Zi=w(Wi-Ja)/Oa,sa=Zi*$r+rn*ui,vn=Zi*ni+rn*Di,Dn=Zi*ii+rn*Fi;return[_(vn,sa)*p,_(Dn,A(sa*sa+vn*vn))*p]}:function(){return[Kt*p,Bt*p]};return Pa.distance=Wi,Pa}function jo(nt){return nt}var Yn=a(),Bn=a(),ps,xo,no,Mo,Vn={point:D,lineStart:D,lineEnd:D,polygonStart:function(){Vn.lineStart=ts,Vn.lineEnd=nl},polygonEnd:function(){Vn.lineStart=Vn.lineEnd=Vn.point=D,Yn.add(m(Bn)),Bn.reset()},result:function(){var nt=Yn/2;return Yn.reset(),nt}};function ts(){Vn.point=ws}function ws(nt,Tt){Vn.point=So,ps=no=nt,xo=Mo=Tt}function So(nt,Tt){Bn.add(Mo*nt-no*Tt),no=nt,Mo=Tt}function nl(){So(ps,xo)}var vs=1/0,go=vs,Xn=-vs,On=Xn,Uo={point:kl,lineStart:D,lineEnd:D,polygonStart:D,polygonEnd:D,result:function(){var nt=[[vs,go],[Xn,On]];return Xn=On=-(go=vs=1/0),nt}};function kl(nt,Tt){nt<vs&&(vs=nt),nt>Xn&&(Xn=nt),Tt<go&&(go=Tt),Tt>On&&(On=Tt)}var mu=0,Ul=0,gu=0,yu=0,Fu=0,au=0,xc=0,Pu=0,Cl=0,bc,Iu,_l,ms,ss={point:fl,lineStart:wc,lineEnd:wh,polygonStart:function(){ss.lineStart=Th,ss.lineEnd=Rd},polygonEnd:function(){ss.point=fl,ss.lineStart=wc,ss.lineEnd=wh},result:function(){var nt=Cl?[xc/Cl,Pu/Cl]:au?[yu/au,Fu/au]:gu?[mu/gu,Ul/gu]:[NaN,NaN];return mu=Ul=gu=yu=Fu=au=xc=Pu=Cl=0,nt}};function fl(nt,Tt){mu+=nt,Ul+=Tt,++gu}function wc(){ss.point=Tc}function Tc(nt,Tt){ss.point=tc,fl(_l=nt,ms=Tt)}function tc(nt,Tt){var Kt=nt-_l,Bt=Tt-ms,yr=A(Kt*Kt+Bt*Bt);yu+=yr*(_l+nt)/2,Fu+=yr*(ms+Tt)/2,au+=yr,fl(_l=nt,ms=Tt)}function wh(){ss.point=fl}function Th(){ss.point=fp}function Rd(){Ru(bc,Iu)}function fp(nt,Tt){ss.point=Ru,fl(bc=_l=nt,Iu=ms=Tt)}function Ru(nt,Tt){var Kt=nt-_l,Bt=Tt-ms,yr=A(Kt*Kt+Bt*Bt);yu+=yr*(_l+nt)/2,Fu+=yr*(ms+Tt)/2,au+=yr,yr=ms*nt-_l*Tt,xc+=yr*(_l+nt),Pu+=yr*(ms+Tt),Cl+=yr*3,fl(_l=nt,ms=Tt)}function Ts(nt){this._context=nt}Ts.prototype={_radius:4.5,pointRadius:function(nt){return this._radius=nt,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._context.closePath(),this._point=NaN},point:function(nt,Tt){switch(this._point){case 0:{this._context.moveTo(nt,Tt),this._point=1;break}case 1:{this._context.lineTo(nt,Tt);break}default:{this._context.moveTo(nt+this._radius,Tt),this._context.arc(nt,Tt,this._radius,0,d);break}}},result:D};var Ah=a(),vf,Ac,Mh,Mc,$c,zu={point:D,lineStart:function(){zu.point=mf},lineEnd:function(){vf&&jf(Ac,Mh),zu.point=D},polygonStart:function(){vf=!0},polygonEnd:function(){vf=null},result:function(){var nt=+Ah;return Ah.reset(),nt}};function mf(nt,Tt){zu.point=jf,Ac=Mc=nt,Mh=$c=Tt}function jf(nt,Tt){Mc-=nt,$c-=Tt,Ah.add(A(Mc*Mc+$c*$c)),Mc=nt,$c=Tt}function Sc(){this._string=[]}Sc.prototype={_radius:4.5,_circle:id(4.5),pointRadius:function(nt){return(nt=+nt)!==this._radius&&(this._radius=nt,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._string.push("Z"),this._point=NaN},point:function(nt,Tt){switch(this._point){case 0:{this._string.push("M",nt,",",Tt),this._point=1;break}case 1:{this._string.push("L",nt,",",Tt);break}default:{this._circle==null&&(this._circle=id(this._radius)),this._string.push("M",nt,",",Tt,this._circle);break}}},result:function(){if(this._string.length){var nt=this._string.join("");return this._string=[],nt}else return null}};function id(nt){return"m0,"+nt+"a"+nt+","+nt+" 0 1,1 0,"+-2*nt+"a"+nt+","+nt+" 0 1,1 0,"+2*nt+"z"}function Uf(nt,Tt){var Kt=4.5,Bt,yr;function zr(Gr){return Gr&&(typeof Kt=="function"&&yr.pointRadius(+Kt.apply(this,arguments)),B(Gr,Bt(yr))),yr.result()}return zr.area=function(Gr){return B(Gr,Bt(Vn)),Vn.result()},zr.measure=function(Gr){return B(Gr,Bt(zu)),zu.result()},zr.bounds=function(Gr){return B(Gr,Bt(Uo)),Uo.result()},zr.centroid=function(Gr){return B(Gr,Bt(ss)),ss.result()},zr.projection=function(Gr){return arguments.length?(Bt=Gr==null?(nt=null,jo):(nt=Gr).stream,zr):nt},zr.context=function(Gr){return arguments.length?(yr=Gr==null?(Tt=null,new Sc):new Ts(Tt=Gr),typeof Kt!="function"&&yr.pointRadius(Kt),zr):Tt},zr.pointRadius=function(Gr){return arguments.length?(Kt=typeof Gr=="function"?Gr:(yr.pointRadius(+Gr),+Gr),zr):Kt},zr.projection(nt).context(Tt)}function zd(nt){return{stream:Bu(nt)}}function Bu(nt){return function(Tt){var Kt=new Sh;for(var Bt in nt)Kt[Bt]=nt[Bt];return Kt.stream=Tt,Kt}}function Sh(){}Sh.prototype={constructor:Sh,point:function(nt,Tt){this.stream.point(nt,Tt)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};function _u(nt,Tt,Kt){var Bt=nt.clipExtent&&nt.clipExtent();return nt.scale(150).translate([0,0]),Bt!=null&&nt.clipExtent(null),B(Kt,nt.stream(Uo)),Tt(Uo.result()),Bt!=null&&nt.clipExtent(Bt),nt}function qf(nt,Tt,Kt){return _u(nt,function(Bt){var yr=Tt[1][0]-Tt[0][0],zr=Tt[1][1]-Tt[0][1],Gr=Math.min(yr/(Bt[1][0]-Bt[0][0]),zr/(Bt[1][1]-Bt[0][1])),ii=+Tt[0][0]+(yr-Gr*(Bt[1][0]+Bt[0][0]))/2,li=+Tt[0][1]+(zr-Gr*(Bt[1][1]+Bt[0][1]))/2;nt.scale(150*Gr).translate([ii,li])},Kt)}function Dl(nt,Tt,Kt){return qf(nt,[[0,0],Tt],Kt)}function gf(nt,Tt,Kt){return _u(nt,function(Bt){var yr=+Tt,zr=yr/(Bt[1][0]-Bt[0][0]),Gr=(yr-zr*(Bt[1][0]+Bt[0][0]))/2,ii=-zr*Bt[0][1];nt.scale(150*zr).translate([Gr,ii])},Kt)}function Ou(nt,Tt,Kt){return _u(nt,function(Bt){var yr=+Tt,zr=yr/(Bt[1][1]-Bt[0][1]),Gr=-zr*Bt[0][0],ii=(yr-zr*(Bt[1][1]+Bt[0][1]))/2;nt.scale(150*zr).translate([Gr,ii])},Kt)}var yf=16,_f=v(30*g);function Vf(nt,Tt){return+Tt?Ec(nt,Tt):Eh(nt)}function Eh(nt){return Bu({point:function(Tt,Kt){Tt=nt(Tt,Kt),this.stream.point(Tt[0],Tt[1])}})}function Ec(nt,Tt){function Kt(Bt,yr,zr,Gr,ii,li,Fi,$r,ni,ui,Di,Wi,Oa,Pa){var Ja=Fi-Bt,rn=$r-yr,Zi=Ja*Ja+rn*rn;if(Zi>4*Tt&&Oa--){var sa=Gr+ui,vn=ii+Di,Dn=li+Wi,po=A(sa*sa+vn*vn+Dn*Dn),zo=T(Dn/=po),wo=m(m(Dn)-1)<n||m(zr-ni)<n?(zr+ni)/2:_(vn,sa),$o=nt(wo,zo),io=$o[0],Us=$o[1],gs=io-Bt,Go=Us-yr,ma=rn*gs-Ja*Go;(ma*ma/Zi>Tt||m((Ja*gs+rn*Go)/Zi-.5)>.3||Gr*ui+ii*Di+li*Wi<_f)&&(Kt(Bt,yr,zr,Gr,ii,li,io,Us,wo,sa/=po,vn/=po,Dn,Oa,Pa),Pa.point(io,Us),Kt(io,Us,wo,sa,vn,Dn,Fi,$r,ni,ui,Di,Wi,Oa,Pa))}}return function(Bt){var yr,zr,Gr,ii,li,Fi,$r,ni,ui,Di,Wi,Oa,Pa={point:Ja,lineStart:rn,lineEnd:sa,polygonStart:function(){Bt.polygonStart(),Pa.lineStart=vn},polygonEnd:function(){Bt.polygonEnd(),Pa.lineStart=rn}};function Ja(zo,wo){zo=nt(zo,wo),Bt.point(zo[0],zo[1])}function rn(){ni=NaN,Pa.point=Zi,Bt.lineStart()}function Zi(zo,wo){var $o=K([zo,wo]),io=nt(zo,wo);Kt(ni,ui,$r,Di,Wi,Oa,ni=io[0],ui=io[1],$r=zo,Di=$o[0],Wi=$o[1],Oa=$o[2],yf,Bt),Bt.point(ni,ui)}function sa(){Pa.point=Ja,Bt.lineEnd()}function vn(){rn(),Pa.point=Dn,Pa.lineEnd=po}function Dn(zo,wo){Zi(yr=zo,wo),zr=ni,Gr=ui,ii=Di,li=Wi,Fi=Oa,Pa.point=Zi}function po(){Kt(ni,ui,$r,Di,Wi,Oa,zr,Gr,yr,ii,li,Fi,yf,Bt),Pa.lineEnd=sa,sa()}return Pa}}var kh=Bu({point:function(nt,Tt){this.stream.point(nt*g,Tt*g)}});function rc(nt){return Bu({point:function(Tt,Kt){var Bt=nt(Tt,Kt);return this.stream.point(Bt[0],Bt[1])}})}function Bd(nt,Tt,Kt,Bt,yr){function zr(Gr,ii){return Gr*=Bt,ii*=yr,[Tt+nt*Gr,Kt-nt*ii]}return zr.invert=function(Gr,ii){return[(Gr-Tt)/nt*Bt,(Kt-ii)/nt*yr]},zr}function xl(nt,Tt,Kt,Bt,yr,zr){var Gr=v(zr),ii=w(zr),li=Gr*nt,Fi=ii*nt,$r=Gr/nt,ni=ii/nt,ui=(ii*Kt-Gr*Tt)/nt,Di=(ii*Tt+Gr*Kt)/nt;function Wi(Oa,Pa){return Oa*=Bt,Pa*=yr,[li*Oa-Fi*Pa+Tt,Kt-Fi*Oa-li*Pa]}return Wi.invert=function(Oa,Pa){return[Bt*($r*Oa-ni*Pa+ui),yr*(Di-ni*Oa-$r*Pa)]},Wi}function xu(nt){return kc(function(){return nt})()}function kc(nt){var Tt,Kt=150,Bt=480,yr=250,zr=0,Gr=0,ii=0,li=0,Fi=0,$r,ni=0,ui=1,Di=1,Wi=null,Oa=ct,Pa=null,Ja,rn,Zi,sa=jo,vn=.5,Dn,po,zo,wo,$o;function io(ma){return zo(ma[0]*g,ma[1]*g)}function Us(ma){return ma=zo.invert(ma[0],ma[1]),ma&&[ma[0]*p,ma[1]*p]}io.stream=function(ma){return wo&&$o===ma?wo:wo=kh(rc($r)(Oa(Dn(sa($o=ma)))))},io.preclip=function(ma){return arguments.length?(Oa=ma,Wi=void 0,Go()):Oa},io.postclip=function(ma){return arguments.length?(sa=ma,Pa=Ja=rn=Zi=null,Go()):sa},io.clipAngle=function(ma){return arguments.length?(Oa=+ma?Zt(Wi=ma*g):(Wi=null,ct),Go()):Wi*p},io.clipExtent=function(ma){return arguments.length?(sa=ma==null?(Pa=Ja=rn=Zi=null,jo):Pr(Pa=+ma[0][0],Ja=+ma[0][1],rn=+ma[1][0],Zi=+ma[1][1]),Go()):Pa==null?null:[[Pa,Ja],[rn,Zi]]},io.scale=function(ma){return arguments.length?(Kt=+ma,gs()):Kt},io.translate=function(ma){return arguments.length?(Bt=+ma[0],yr=+ma[1],gs()):[Bt,yr]},io.center=function(ma){return arguments.length?(zr=ma[0]%360*g,Gr=ma[1]%360*g,gs()):[zr*p,Gr*p]},io.rotate=function(ma){return arguments.length?(ii=ma[0]%360*g,li=ma[1]%360*g,Fi=ma.length>2?ma[2]%360*g:0,gs()):[ii*p,li*p,Fi*p]},io.angle=function(ma){return arguments.length?(ni=ma%360*g,gs()):ni*p},io.reflectX=function(ma){return arguments.length?(ui=ma?-1:1,gs()):ui<0},io.reflectY=function(ma){return arguments.length?(Di=ma?-1:1,gs()):Di<0},io.precision=function(ma){return arguments.length?(Dn=Vf(po,vn=ma*ma),Go()):A(vn)},io.fitExtent=function(ma,vo){return qf(io,ma,vo)},io.fitSize=function(ma,vo){return Dl(io,ma,vo)},io.fitWidth=function(ma,vo){return gf(io,ma,vo)},io.fitHeight=function(ma,vo){return Ou(io,ma,vo)};function gs(){var ma=xl(Kt,0,0,ui,Di,ni).apply(null,Tt(zr,Gr)),vo=(ni?xl:Bd)(Kt,Bt-ma[0],yr-ma[1],ui,Di,ni);return $r=$i(ii,li,Fi),po=Qr(Tt,vo),zo=Qr($r,po),Dn=Vf(po,vn),Go()}function Go(){return wo=$o=null,io}return function(){return Tt=nt.apply(this,arguments),io.invert=Tt.invert&&Us,gs()}}function hl(nt){var Tt=0,Kt=c/3,Bt=kc(nt),yr=Bt(Tt,Kt);return yr.parallels=function(zr){return arguments.length?Bt(Tt=zr[0]*g,Kt=zr[1]*g):[Tt*p,Kt*p]},yr}function Gf(nt){var Tt=v(nt);function Kt(Bt,yr){return[Bt*Tt,w(yr)/Tt]}return Kt.invert=function(Bt,yr){return[Bt/Tt,T(yr*Tt)]},Kt}function Nu(nt,Tt){var Kt=w(nt),Bt=(Kt+w(Tt))/2;if(m(Bt)<n)return Gf(nt);var yr=1+Kt*(2*Bt-Kt),zr=A(yr)/Bt;function Gr(ii,li){var Fi=A(yr-2*Bt*w(li))/Bt;return[Fi*w(ii*=Bt),zr-Fi*v(ii)]}return Gr.invert=function(ii,li){var Fi=zr-li,$r=_(ii,m(Fi))*k(Fi);return Fi*Bt<0&&($r-=c*k(ii)*k(Fi)),[$r/Bt,T((yr-(ii*ii+Fi*Fi)*Bt*Bt)/(2*Bt))]},Gr}function Cc(){return hl(Nu).scale(155.424).center([0,33.6442])}function Hf(){return Cc().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function Od(nt){var Tt=nt.length;return{point:function(Kt,Bt){for(var yr=-1;++yr<Tt;)nt[yr].point(Kt,Bt)},sphere:function(){for(var Kt=-1;++Kt<Tt;)nt[Kt].sphere()},lineStart:function(){for(var Kt=-1;++Kt<Tt;)nt[Kt].lineStart()},lineEnd:function(){for(var Kt=-1;++Kt<Tt;)nt[Kt].lineEnd()},polygonStart:function(){for(var Kt=-1;++Kt<Tt;)nt[Kt].polygonStart()},polygonEnd:function(){for(var Kt=-1;++Kt<Tt;)nt[Kt].polygonEnd()}}}function ad(){var nt,Tt,Kt=Hf(),Bt,yr=Cc().rotate([154,0]).center([-2,58.5]).parallels([55,65]),zr,Gr=Cc().rotate([157,0]).center([-3,19.9]).parallels([8,18]),ii,li,Fi={point:function(ui,Di){li=[ui,Di]}};function $r(ui){var Di=ui[0],Wi=ui[1];return li=null,Bt.point(Di,Wi),li||(zr.point(Di,Wi),li)||(ii.point(Di,Wi),li)}$r.invert=function(ui){var Di=Kt.scale(),Wi=Kt.translate(),Oa=(ui[0]-Wi[0])/Di,Pa=(ui[1]-Wi[1])/Di;return(Pa>=.12&&Pa<.234&&Oa>=-.425&&Oa<-.214?yr:Pa>=.166&&Pa<.234&&Oa>=-.214&&Oa<-.115?Gr:Kt).invert(ui)},$r.stream=function(ui){return nt&&Tt===ui?nt:nt=Od([Kt.stream(Tt=ui),yr.stream(ui),Gr.stream(ui)])},$r.precision=function(ui){return arguments.length?(Kt.precision(ui),yr.precision(ui),Gr.precision(ui),ni()):Kt.precision()},$r.scale=function(ui){return arguments.length?(Kt.scale(ui),yr.scale(ui*.35),Gr.scale(ui),$r.translate(Kt.translate())):Kt.scale()},$r.translate=function(ui){if(!arguments.length)return Kt.translate();var Di=Kt.scale(),Wi=+ui[0],Oa=+ui[1];return Bt=Kt.translate(ui).clipExtent([[Wi-.455*Di,Oa-.238*Di],[Wi+.455*Di,Oa+.238*Di]]).stream(Fi),zr=yr.translate([Wi-.307*Di,Oa+.201*Di]).clipExtent([[Wi-.425*Di+n,Oa+.12*Di+n],[Wi-.214*Di-n,Oa+.234*Di-n]]).stream(Fi),ii=Gr.translate([Wi-.205*Di,Oa+.212*Di]).clipExtent([[Wi-.214*Di+n,Oa+.166*Di+n],[Wi-.115*Di-n,Oa+.234*Di-n]]).stream(Fi),ni()},$r.fitExtent=function(ui,Di){return qf($r,ui,Di)},$r.fitSize=function(ui,Di){return Dl($r,ui,Di)},$r.fitWidth=function(ui,Di){return gf($r,ui,Di)},$r.fitHeight=function(ui,Di){return Ou($r,ui,Di)};function ni(){return nt=Tt=null,$r}return $r.scale(1070)}function ju(nt){return function(Tt,Kt){var Bt=v(Tt),yr=v(Kt),zr=nt(Bt*yr);return[zr*yr*w(Tt),zr*w(Kt)]}}function ql(nt){return function(Tt,Kt){var Bt=A(Tt*Tt+Kt*Kt),yr=nt(Bt),zr=w(yr),Gr=v(yr);return[_(Tt*zr,Bt*Gr),T(Bt&&Kt*zr/Bt)]}}var Vl=ju(function(nt){return A(2/(1+nt))});Vl.invert=ql(function(nt){return 2*T(nt/2)});function Nd(){return xu(Vl).scale(124.75).clipAngle(180-.001)}var xf=ju(function(nt){return(nt=E(nt))&&nt/w(nt)});xf.invert=ql(function(nt){return nt});function nd(){return xu(xf).scale(79.4188).clipAngle(180-.001)}function nu(nt,Tt){return[nt,M(b((f+Tt)/2))]}nu.invert=function(nt,Tt){return[nt,2*y(S(Tt))-f]};function Wc(){return $f(nu).scale(961/d)}function $f(nt){var Tt=xu(nt),Kt=Tt.center,Bt=Tt.scale,yr=Tt.translate,zr=Tt.clipExtent,Gr=null,ii,li,Fi;Tt.scale=function(ni){return arguments.length?(Bt(ni),$r()):Bt()},Tt.translate=function(ni){return arguments.length?(yr(ni),$r()):yr()},Tt.center=function(ni){return arguments.length?(Kt(ni),$r()):Kt()},Tt.clipExtent=function(ni){return arguments.length?(ni==null?Gr=ii=li=Fi=null:(Gr=+ni[0][0],ii=+ni[0][1],li=+ni[1][0],Fi=+ni[1][1]),$r()):Gr==null?null:[[Gr,ii],[li,Fi]]};function $r(){var ni=c*Bt(),ui=Tt(xi(Tt.rotate()).invert([0,0]));return zr(Gr==null?[[ui[0]-ni,ui[1]-ni],[ui[0]+ni,ui[1]+ni]]:nt===nu?[[Math.max(ui[0]-ni,Gr),ii],[Math.min(ui[0]+ni,li),Fi]]:[[Gr,Math.max(ui[1]-ni,ii)],[li,Math.min(ui[1]+ni,Fi)]])}return $r()}function bf(nt){return b((f+nt)/2)}function jd(nt,Tt){var Kt=v(nt),Bt=nt===Tt?w(nt):M(Kt/v(Tt))/M(bf(Tt)/bf(nt)),yr=Kt*C(bf(nt),Bt)/Bt;if(!Bt)return nu;function zr(Gr,ii){yr>0?ii<-f+n&&(ii=-f+n):ii>f-n&&(ii=f-n);var li=yr/C(bf(ii),Bt);return[li*w(Bt*Gr),yr-li*v(Bt*Gr)]}return zr.invert=function(Gr,ii){var li=yr-ii,Fi=k(Bt)*A(Gr*Gr+li*li),$r=_(Gr,m(li))*k(li);return li*Bt<0&&($r-=c*k(Gr)*k(li)),[$r/Bt,2*y(C(yr/Fi,1/Bt))-f]},zr}function Yc(){return hl(jd).scale(109.5).parallels([30,30])}function Dc(nt,Tt){return[nt,Tt]}Dc.invert=Dc;function Lc(){return xu(Dc).scale(152.63)}function wf(nt,Tt){var Kt=v(nt),Bt=nt===Tt?w(nt):(Kt-v(Tt))/(Tt-nt),yr=Kt/Bt+nt;if(m(Bt)<n)return Dc;function zr(Gr,ii){var li=yr-ii,Fi=Bt*Gr;return[li*w(Fi),yr-li*v(Fi)]}return zr.invert=function(Gr,ii){var li=yr-ii,Fi=_(Gr,m(li))*k(li);return li*Bt<0&&(Fi-=c*k(Gr)*k(li)),[Fi/Bt,yr-k(Bt)*A(Gr*Gr+li*li)]},zr}function od(){return hl(wf).scale(131.154).center([0,13.9389])}var Wf=1.340264,Xc=-.081106,Yf=893e-6,Zc=.003796,ic=A(3)/2,Tf=12;function Xf(nt,Tt){var Kt=T(ic*w(Tt)),Bt=Kt*Kt,yr=Bt*Bt*Bt;return[nt*v(Kt)/(ic*(Wf+3*Xc*Bt+yr*(7*Yf+9*Zc*Bt))),Kt*(Wf+Xc*Bt+yr*(Yf+Zc*Bt))]}Xf.invert=function(nt,Tt){for(var Kt=Tt,Bt=Kt*Kt,yr=Bt*Bt*Bt,zr=0,Gr,ii,li;zr<Tf&&(ii=Kt*(Wf+Xc*Bt+yr*(Yf+Zc*Bt))-Tt,li=Wf+3*Xc*Bt+yr*(7*Yf+9*Zc*Bt),Kt-=Gr=ii/li,Bt=Kt*Kt,yr=Bt*Bt*Bt,!(m(Gr)<u));++zr);return[ic*nt*(Wf+3*Xc*Bt+yr*(7*Yf+9*Zc*Bt))/v(Kt),T(w(Kt)/ic)]};function sd(){return xu(Xf).scale(177.158)}function Ch(nt,Tt){var Kt=v(Tt),Bt=v(nt)*Kt;return[Kt*w(nt)/Bt,w(Tt)/Bt]}Ch.invert=ql(y);function Ud(){return xu(Ch).scale(144.049).clipAngle(60)}function Zf(){var nt=1,Tt=0,Kt=0,Bt=1,yr=1,zr=0,Gr,ii,li=null,Fi,$r,ni,ui=1,Di=1,Wi=Bu({point:function(sa,vn){var Dn=Zi([sa,vn]);this.stream.point(Dn[0],Dn[1])}}),Oa=jo,Pa,Ja;function rn(){return ui=nt*Bt,Di=nt*yr,Pa=Ja=null,Zi}function Zi(sa){var vn=sa[0]*ui,Dn=sa[1]*Di;if(zr){var po=Dn*Gr-vn*ii;vn=vn*Gr+Dn*ii,Dn=po}return[vn+Tt,Dn+Kt]}return Zi.invert=function(sa){var vn=sa[0]-Tt,Dn=sa[1]-Kt;if(zr){var po=Dn*Gr+vn*ii;vn=vn*Gr-Dn*ii,Dn=po}return[vn/ui,Dn/Di]},Zi.stream=function(sa){return Pa&&Ja===sa?Pa:Pa=Wi(Oa(Ja=sa))},Zi.postclip=function(sa){return arguments.length?(Oa=sa,li=Fi=$r=ni=null,rn()):Oa},Zi.clipExtent=function(sa){return arguments.length?(Oa=sa==null?(li=Fi=$r=ni=null,jo):Pr(li=+sa[0][0],Fi=+sa[0][1],$r=+sa[1][0],ni=+sa[1][1]),rn()):li==null?null:[[li,Fi],[$r,ni]]},Zi.scale=function(sa){return arguments.length?(nt=+sa,rn()):nt},Zi.translate=function(sa){return arguments.length?(Tt=+sa[0],Kt=+sa[1],rn()):[Tt,Kt]},Zi.angle=function(sa){return arguments.length?(zr=sa%360*g,ii=w(zr),Gr=v(zr),rn()):zr*p},Zi.reflectX=function(sa){return arguments.length?(Bt=sa?-1:1,rn()):Bt<0},Zi.reflectY=function(sa){return arguments.length?(yr=sa?-1:1,rn()):yr<0},Zi.fitExtent=function(sa,vn){return qf(Zi,sa,vn)},Zi.fitSize=function(sa,vn){return Dl(Zi,sa,vn)},Zi.fitWidth=function(sa,vn){return gf(Zi,sa,vn)},Zi.fitHeight=function(sa,vn){return Ou(Zi,sa,vn)},Zi}function ld(nt,Tt){var Kt=Tt*Tt,Bt=Kt*Kt;return[nt*(.8707-.131979*Kt+Bt*(-.013791+Bt*(.003971*Kt-.001529*Bt))),Tt*(1.007226+Kt*(.015085+Bt*(-.044475+.028874*Kt-.005916*Bt)))]}ld.invert=function(nt,Tt){var Kt=Tt,Bt=25,yr;do{var zr=Kt*Kt,Gr=zr*zr;Kt-=yr=(Kt*(1.007226+zr*(.015085+Gr*(-.044475+.028874*zr-.005916*Gr)))-Tt)/(1.007226+zr*(.015085*3+Gr*(-.044475*7+.028874*9*zr-.005916*11*Gr)))}while(m(yr)>n&&--Bt>0);return[nt/(.8707+(zr=Kt*Kt)*(-.131979+zr*(-.013791+zr*zr*zr*(.003971-.001529*zr)))),Kt]};function Dh(){return xu(ld).scale(175.295)}function Js(nt,Tt){return[v(Tt)*w(nt),w(Tt)]}Js.invert=ql(T);function ou(){return xu(Js).scale(249.5).clipAngle(90+n)}function Kf(nt,Tt){var Kt=v(Tt),Bt=1+v(nt)*Kt;return[Kt*w(nt)/Bt,w(Tt)/Bt]}Kf.invert=ql(function(nt){return 2*y(nt)});function Lh(){return xu(Kf).scale(250).clipAngle(142)}function Jf(nt,Tt){return[M(b((f+Tt)/2)),-nt]}Jf.invert=function(nt,Tt){return[-Tt,2*y(S(nt))-f]};function Af(){var nt=$f(Jf),Tt=nt.center,Kt=nt.rotate;return nt.center=function(Bt){return arguments.length?Tt([-Bt[1],Bt[0]]):(Bt=Tt(),[Bt[1],-Bt[0]])},nt.rotate=function(Bt){return arguments.length?Kt([Bt[0],Bt[1],Bt.length>2?Bt[2]+90:90]):(Bt=Kt(),[Bt[0],Bt[1],Bt[2]-90])},Kt([0,0,90]).scale(159.155)}t.geoAlbers=Hf,t.geoAlbersUsa=ad,t.geoArea=q,t.geoAzimuthalEqualArea=Nd,t.geoAzimuthalEqualAreaRaw=Vl,t.geoAzimuthalEquidistant=nd,t.geoAzimuthalEquidistantRaw=xf,t.geoBounds=qe,t.geoCentroid=Ai,t.geoCircle=dn,t.geoClipAntimeridian=ct,t.geoClipCircle=Zt,t.geoClipExtent=Mi,t.geoClipRectangle=Pr,t.geoConicConformal=Yc,t.geoConicConformalRaw=jd,t.geoConicEqualArea=Cc,t.geoConicEqualAreaRaw=Nu,t.geoConicEquidistant=od,t.geoConicEquidistantRaw=wf,t.geoContains=ho,t.geoDistance=tn,t.geoEqualEarth=sd,t.geoEqualEarthRaw=Xf,t.geoEquirectangular=Lc,t.geoEquirectangularRaw=Dc,t.geoGnomonic=Ud,t.geoGnomonicRaw=Ch,t.geoGraticule=Fo,t.geoGraticule10=uo,t.geoIdentity=Zf,t.geoInterpolate=Qn,t.geoLength=pn,t.geoMercator=Wc,t.geoMercatorRaw=nu,t.geoNaturalEarth1=Dh,t.geoNaturalEarth1Raw=ld,t.geoOrthographic=ou,t.geoOrthographicRaw=Js,t.geoPath=Uf,t.geoProjection=xu,t.geoProjectionMutator=kc,t.geoRotation=xi,t.geoStereographic=Lh,t.geoStereographicRaw=Kf,t.geoStream=B,t.geoTransform=zd,t.geoTransverseMercator=Af,t.geoTransverseMercatorRaw=Jf,Object.defineProperty(t,"__esModule",{value:!0})}))}}),HY=de({"src/lib/usa_location_names.js"(e,r){"use strict";var t={alabama:"AL",alaska:"AK",arizona:"AZ",arkansas:"AR",california:"CA",colorado:"CO",connecticut:"CT",delaware:"DE","district of columbia":"DC",florida:"FL",georgia:"GA",hawaii:"HI",idaho:"ID",illinois:"IL",indiana:"IN",iowa:"IA",kansas:"KS",kentucky:"KY",louisiana:"LA",maine:"ME",maryland:"MD",massachusetts:"MA",michigan:"MI",minnesota:"MN",mississippi:"MS",missouri:"MO",montana:"MT",nebraska:"NE",nevada:"NV","new hampshire":"NH","new jersey":"NJ","new mexico":"NM","new york":"NY","north carolina":"NC","north dakota":"ND",ohio:"OH",oklahoma:"OK",oregon:"OR",pennsylvania:"PA","rhode island":"RI","south carolina":"SC","south dakota":"SD",tennessee:"TN",texas:"TX",utah:"UT",vermont:"VT",virginia:"VA",washington:"WA","washington dc":"DC","washington d.c.":"DC","west virginia":"WV",wisconsin:"WI",wyoming:"WY"},i=new Set(Object.values(t));r.exports={usaLocationAbbreviations:i,usaLocationList:t}}}),s7={};Mr(s7,{COUNTRIES_X:()=>l7});var l7,$Y=Ir({"src/lib/custom_country_codes.ts"(){"use strict";l7=[{iso3:"XAC",iso2:"",m49:"",name:"Aksai Chin",aliases:[]},{iso3:"XAP",iso2:"",m49:"",name:"Arunachal Pradesh",aliases:[]},{iso3:"XBT",iso2:"",m49:"",name:"Bir Tawil",aliases:[]},{iso3:"XHT",iso2:"",m49:"",name:"Halaib Triangle",aliases:[]},{iso3:"XIT",iso2:"",m49:"",name:"Ilemi Triangle",aliases:[]},{iso3:"XJK",iso2:"",m49:"",name:"Jammu and Kashmir",aliases:[]}]}}),Fp=de({"src/lib/geo_location_utils.js"(e,r){"use strict";var t=Yr(),{COUNTRIES:i,createLookup:a}=UY(),{area:o}=qY(),{centroid:s}=VY(),{coordAll:l}=b4(),{geoBounds:n}=w4(),u=My(),c=Xo(),f=is(),h=sl(),d=Fy(),{usaLocationAbbreviations:p,usaLocationList:g}=HY(),{COUNTRIES_X:m}=($Y(),ti(s7)),{lookupAlpha3:y}=a([...i,...m]),_={"ISO-3":u,"USA-states":x,"country names":v};function v(L){let B=y(L);return B||(c.log("Unrecognized country name: "+L+"."),!1)}function x(L){L=L.trim();let B=p.has(L.toUpperCase())?L.toUpperCase():g[L.toLowerCase()];return B||(c.log("Unrecognized US location: "+L+"."),!1)}function S(L,B,O){var G;if(!B||typeof B!="string")return!1;let W=_[L](B);if(W){let X;if(L==="USA-states"){X=[];for(let Z of O)((G=Z?.properties)==null?void 0:G.gu)==="USA"&&X.push(Z)}else X=O;for(let Z of X)if(Z.id===W)return Z;c.log(`Location with id ${W} does not have a matching topojson feature at this resolution.`)}return!1}var M=360;function C(L){for(let B=0;B<L.length-1;B++)if(L[B][0]>0&&L[B+1][0]<0)return B;return null}function w(L){var B=L.geometry,O=B.coordinates,G=L.id,W=[],X,Z,J,N;switch(G==="RUS"||G==="FJI"?X=function(H){var $;if(C(H)===null)$=H;else for($=new Array(H.length),N=0;N<H.length;N++)$[N]=[H[N][0]<0?H[N][0]+M:H[N][0],H[N][1]];W.push(d.tester($))}:G==="ATA"?X=function(H){var $=C(H);if($===null)return W.push(d.tester(H));var U=new Array(H.length+1),V=0;for(N=0;N<H.length;N++)N>$?U[V++]=[H[N][0]+M,H[N][1]]:N===$?(U[V++]=H[N],U[V++]=[H[N][0],-90]):U[V++]=H[N];var j=d.tester(U);j.pts.pop(),W.push(j)}:X=function(H){W.push(d.tester(H))},B.type){case"MultiPolygon":for(Z=0;Z<O.length;Z++)for(J=0;J<O[Z].length;J++)X(O[Z][J]);break;case"Polygon":for(Z=0;Z<O.length;Z++)X(O[Z]);break}return W}function k(L){var B=L.geojson,O=window.PlotlyGeoAssets||{},G=typeof B=="string"?O[B]:B;return f(G)?G:(c.error("Oops ... something went wrong when fetching "+B),!1)}function A(L){var B=L[0].trace,O=k(B);if(!O)return!1;var G={},W=[],X;for(X=0;X<B._length;X++){var Z=L[X];(Z.loc||Z.loc===0)&&(G[Z.loc]=Z)}function J($){var U=h($,B.featureidkey||"id").get(),V=G[U];if(V){var j=$.geometry;if(j.type==="Polygon"||j.type==="MultiPolygon"){var q={type:"Feature",id:U,geometry:j,properties:{}};q.properties.ct=b(q),isNaN(q.properties.ct[0])&&c.log(["Location",V.loc,"has no polygon with positive area.","Its centroid could not be computed,","so hover and selection will not work for it."].join(" ")),V.fIn=$,V.fOut=q,W.push(q)}else c.log(["Location",V.loc,"does not have a valid GeoJSON geometry.","Traces with locationmode *geojson-id* only support","*Polygon* and *MultiPolygon* geometries."].join(" "))}delete G[U]}switch(O.type){case"FeatureCollection":var N=O.features;for(X=0;X<N.length;X++)J(N[X]);break;case"Feature":J(O);break;default:return c.warn(["Invalid GeoJSON type",(O.type||"none")+".","Traces with locationmode *geojson-id* only support","*FeatureCollection* and *Feature* types."].join(" ")),!1}for(var H in G)c.log(["Location *"+H+"*","does not have a matching feature with id-key","*"+B.featureidkey+"*."].join(" "));return W}function b(L){var B=L.geometry,O;if(B.type==="MultiPolygon")for(var G=B.coordinates,W=0,X=0;X<G.length;X++){var Z={type:"Polygon",coordinates:G[X]},J=o(Z);J>W&&(W=J,O=Z)}else O=B;return!O||!O.coordinates.some(N=>N.length>0)?[NaN,NaN]:s(O).geometry.coordinates}function E(L){var B=window.PlotlyGeoAssets||{},O=[];function G(N){return new Promise(function(H,$){t.json(N,function(U,V){if(U){delete B[N];var j=U.status===404?'GeoJSON at URL "'+N+'" does not exist.':"Unexpected error while fetching from "+N;return $(new Error(j))}return B[N]=V,H(V)})})}function W(N){return new Promise(function(H,$){var U=0,V=setInterval(function(){if(B[N]&&B[N]!=="pending")return clearInterval(V),H(B[N]);if(U>100)return clearInterval(V),$("Unexpected error while fetching from "+N);U++},50)})}for(var X=0;X<L.length;X++){var Z=L[X][0].trace,J=Z.geojson;typeof J=="string"&&(B[J]?B[J]==="pending"&&O.push(W(J)):(B[J]="pending",O.push(G(J))))}return O}var T=L=>D(F(L));function F(L){try{return l(L)}catch{return[]}}function D(L){if(L.length===0)return null;if(L.length===1){let[X,Z]=L[0];return[X,Z,X,Z]}let[[B,O],[G,W]]=n({type:"MultiPoint",coordinates:L});return[B,O,I([B,G])[1],W]}var R=(L,B)=>B.fitbounds==="geojson"&&L.locationmode==="geojson-id",P=(L,B)=>R(L,B)?F(k(L)):[],z=(L,B)=>D(P(L,B));function I([L,B]){return[L,L>B?B+M:B]}r.exports={locationToFeature:S,feature2polygons:w,getTraceGeojson:k,extractTraceFeature:A,fetchTraceGeoData:E,boundsOfCoords:D,computeBbox:T,coordsOf:F,doesCrossAntiMeridian:C,fitGeojsonBbox:z,fitGeojsonCoords:P,unwrapLonRange:I,ANTIMERIDIAN_LON_SHIFT:M}}}),u7=de({"src/traces/scattergeo/style.js"(e,r){"use strict";var t=Yr(),i=hn(),a=ta(),o=lf(),s=o.stylePoints,l=o.styleText;r.exports=function(c,f){f&&n(c,f)};function n(u,c){var f=c[0].trace,h=c[0].node3;h.style("opacity",c[0].trace.opacity),s(h,f,u),l(h,f,u),h.selectAll("path.js-line").style("fill","none").each(function(d){var p=t.select(this),g=d.trace,m=g.line||{};p.call(a.stroke,m.color).call(i.dashLine,m.dash||"",m.width||0),g.fill!=="none"&&p.call(a.fill,g.fillcolor)})}}}),T4=de({"src/traces/scattergeo/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=_4().getTopojsonFeatures,o=g_(),s=Fp(),l=vd().findExtremes,n=cn().BADNUM,u=Uh().calcMarkerSize,c=bs(),f=u7();function h(g,m,y){var _=m.layers.frontplot.select(".scatterlayer"),v=i.makeTraceGroups(_,y,"trace scattergeo");function x(S,M){S.lonlat[0]===n&&t.select(M).remove()}v.selectAll("*").remove(),v.each(function(S){var M=t.select(this),C=S[0].trace;if(c.hasLines(C)||C.fill!=="none"){var w=o.calcTraceToLineCoords(S),k=C.fill!=="none"?o.makePolygon(w):o.makeLine(w);M.selectAll("path.js-line").data([{geojson:k,trace:C}]).enter().append("path").classed("js-line",!0).style("stroke-miterlimit",2)}c.hasMarkers(C)&&M.selectAll("path.point").data(i.identity).enter().append("path").classed("point",!0).each(function(A){x(A,this)}),c.hasText(C)&&M.selectAll("g").data(i.identity).enter().append("g").append("text").each(function(A){x(A,this)}),f(g,S)})}function d(g,m){var y=g[0].trace,_=m[y.geo],v=_._subplot,x=y._length,S,M;if(i.isArrayOrTypedArray(y.locations)){var C=y.locationmode,w=C==="geojson-id"?s.extractTraceFeature(g):a(y,v.topojson);for(S=0;S<x;S++){M=g[S];var k=C==="geojson-id"?M.fOut:s.locationToFeature(C,M.loc,w);M.lonlat=k?k.properties.ct:[n,n]}}var A={padded:!0},b,E;let T=s.fitGeojsonBbox(y,_);if(T){let[F,D,R,P]=T;b=[F,R],E=[D,P]}else{for(b=new Array(x),E=new Array(x),S=0;S<x;S++)M=g[S],b[S]=M.lonlat[0],E[S]=M.lonlat[1];A.ppad=u(y,x)}y._extremes.lon=l(_.lonaxis._ax,b,A),y._extremes.lat=l(_.lataxis._ax,E,A)}function p(g,m){let y=s.fitGeojsonCoords(g[0].trace,m);if(y.length)return y;let _=[];for(let v of g)v.lonlat&&isFinite(v.lonlat[0])&&_.push(v.lonlat);return _}r.exports={calcGeoJSON:d,fitCoords:p,plot:h}}}),WY=de({"src/traces/scattergeo/hover.js"(e,r){"use strict";var t=$s(),i=cn().BADNUM,a=m1(),o=Qt().fillText,s=R1();r.exports=function(u,c,f){var h=u.cd,d=h[0].trace,p=u.xa,g=u.ya,m=u.subplot,y=m.projection.isLonLatOverEdges,_=m.project;function v(A){var b=A.lonlat;if(b[0]===i||y(b))return 1/0;var E=_(b),T=_([c,f]),F=Math.abs(E[0]-T[0]),D=Math.abs(E[1]-T[1]),R=Math.max(3,A.mrc||0);return Math.max(Math.sqrt(F*F+D*D)-R,1-3/R)}if(t.getClosest(h,v,u),u.index!==!1){var x=h[u.index],S=x.lonlat,M=[p.c2p(S),g.c2p(S)],C=x.mrc||1;u.x0=M[0]-C,u.x1=M[0]+C,u.y0=M[1]-C,u.y1=M[1]+C,u.loc=x.loc,u.lon=S[0],u.lat=S[1];var w={};w[d.geo]={_subplot:m};var k=d._module.formatLabels(x,d,w);return u.lonLabel=k.lonLabel,u.latLabel=k.latLabel,u.color=a(d,x),u.extraText=l(d,x,u,h[0].t.labels),u.hovertemplate=d.hovertemplate,[u]}};function l(n,u,c,f){if(n.hovertemplate)return;var h=u.hi||n.hoverinfo,d=h==="all"?s.hoverinfo.flags:h.split("+"),p=d.indexOf("location")!==-1&&Array.isArray(n.locations),g=d.indexOf("lon")!==-1,m=d.indexOf("lat")!==-1,y=d.indexOf("text")!==-1,_=[];function v(x){return x+"\xB0"}return p?_.push(u.loc):g&&m?_.push("("+v(c.latLabel)+", "+v(c.lonLabel)+")"):g?_.push(f.lon+v(c.lonLabel)):m&&_.push(f.lat+v(c.latLabel)),y&&o(u,n,_),_.join("<br>")}}}),YY=de({"src/traces/scattergeo/event_data.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){i.lon=a.lon,i.lat=a.lat,i.location=a.loc?a.loc:null;var n=s[l];return n.fIn&&n.fIn.properties&&(i.properties=n.fIn.properties),i}}}),XY=de({"src/traces/scattergeo/select.js"(e,r){"use strict";var t=bs(),i=cn().BADNUM;r.exports=function(o,s){var l=o.cd,n=o.xaxis,u=o.yaxis,c=[],f=l[0].trace,h,d,p,g,m,y=!t.hasMarkers(f)&&!t.hasText(f);if(y)return[];if(s===!1)for(m=0;m<l.length;m++)l[m].selected=0;else for(m=0;m<l.length;m++)h=l[m],d=h.lonlat,d[0]!==i&&(p=n.c2p(d),g=u.c2p(d),s.contains([p,g],null,m,o)?(c.push({pointNumber:m,lon:d[0],lat:d[1]}),h.selected=1):h.selected=0);return c}}}),ZY=de({"node_modules/d3-geo-projection/node_modules/d3-array/dist/d3-array.js"(e,r){(function(t,i){i(typeof e=="object"&&typeof r<"u"?e:t.d3=t.d3||{})})(e,(function(t){"use strict";function i($,U){return $<U?-1:$>U?1:$>=U?0:NaN}function a($){return $.length===1&&($=o($)),{left:function(U,V,j,q){for(j==null&&(j=0),q==null&&(q=U.length);j<q;){var Y=j+q>>>1;$(U[Y],V)<0?j=Y+1:q=Y}return j},right:function(U,V,j,q){for(j==null&&(j=0),q==null&&(q=U.length);j<q;){var Y=j+q>>>1;$(U[Y],V)>0?q=Y:j=Y+1}return j}}}function o($){return function(U,V){return i($(U),V)}}var s=a(i),l=s.right,n=s.left;function u($,U){U==null&&(U=c);for(var V=0,j=$.length-1,q=$[0],Y=new Array(j<0?0:j);V<j;)Y[V]=U(q,q=$[++V]);return Y}function c($,U){return[$,U]}function f($,U,V){var j=$.length,q=U.length,Y=new Array(j*q),K,te,ne,se;for(V==null&&(V=c),K=ne=0;K<j;++K)for(se=$[K],te=0;te<q;++te,++ne)Y[ne]=V(se,U[te]);return Y}function h($,U){return U<$?-1:U>$?1:U>=$?0:NaN}function d($){return $===null?NaN:+$}function p($,U){var V=$.length,j=0,q=-1,Y=0,K,te,ne=0;if(U==null)for(;++q<V;)isNaN(K=d($[q]))||(te=K-Y,Y+=te/++j,ne+=te*(K-Y));else for(;++q<V;)isNaN(K=d(U($[q],q,$)))||(te=K-Y,Y+=te/++j,ne+=te*(K-Y));if(j>1)return ne/(j-1)}function g($,U){var V=p($,U);return V&&Math.sqrt(V)}function m($,U){var V=$.length,j=-1,q,Y,K;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=K=q;++j<V;)(q=$[j])!=null&&(Y>q&&(Y=q),K<q&&(K=q))}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=K=q;++j<V;)(q=U($[j],j,$))!=null&&(Y>q&&(Y=q),K<q&&(K=q));return[Y,K]}var y=Array.prototype,_=y.slice,v=y.map;function x($){return function(){return $}}function S($){return $}function M($,U,V){$=+$,U=+U,V=(q=arguments.length)<2?(U=$,$=0,1):q<3?1:+V;for(var j=-1,q=Math.max(0,Math.ceil((U-$)/V))|0,Y=new Array(q);++j<q;)Y[j]=$+j*V;return Y}var C=Math.sqrt(50),w=Math.sqrt(10),k=Math.sqrt(2);function A($,U,V){var j,q=-1,Y,K,te;if(U=+U,$=+$,V=+V,$===U&&V>0)return[$];if((j=U<$)&&(Y=$,$=U,U=Y),(te=b($,U,V))===0||!isFinite(te))return[];if(te>0)for($=Math.ceil($/te),U=Math.floor(U/te),K=new Array(Y=Math.ceil(U-$+1));++q<Y;)K[q]=($+q)*te;else for($=Math.floor($*te),U=Math.ceil(U*te),K=new Array(Y=Math.ceil($-U+1));++q<Y;)K[q]=($-q)/te;return j&&K.reverse(),K}function b($,U,V){var j=(U-$)/Math.max(0,V),q=Math.floor(Math.log(j)/Math.LN10),Y=j/Math.pow(10,q);return q>=0?(Y>=C?10:Y>=w?5:Y>=k?2:1)*Math.pow(10,q):-Math.pow(10,-q)/(Y>=C?10:Y>=w?5:Y>=k?2:1)}function E($,U,V){var j=Math.abs(U-$)/Math.max(0,V),q=Math.pow(10,Math.floor(Math.log(j)/Math.LN10)),Y=j/q;return Y>=C?q*=10:Y>=w?q*=5:Y>=k&&(q*=2),U<$?-q:q}function T($){return Math.ceil(Math.log($.length)/Math.LN2)+1}function F(){var $=S,U=m,V=T;function j(q){var Y,K=q.length,te,ne=new Array(K);for(Y=0;Y<K;++Y)ne[Y]=$(q[Y],Y,q);var se=U(ne),le=se[0],ce=se[1],pe=V(ne,le,ce);Array.isArray(pe)||(pe=E(le,ce,pe),pe=M(Math.ceil(le/pe)*pe,ce,pe));for(var xe=pe.length;pe[0]<=le;)pe.shift(),--xe;for(;pe[xe-1]>ce;)pe.pop(),--xe;var ye=new Array(xe+1),fe;for(Y=0;Y<=xe;++Y)fe=ye[Y]=[],fe.x0=Y>0?pe[Y-1]:le,fe.x1=Y<xe?pe[Y]:ce;for(Y=0;Y<K;++Y)te=ne[Y],le<=te&&te<=ce&&ye[l(pe,te,0,xe)].push(q[Y]);return ye}return j.value=function(q){return arguments.length?($=typeof q=="function"?q:x(q),j):$},j.domain=function(q){return arguments.length?(U=typeof q=="function"?q:x([q[0],q[1]]),j):U},j.thresholds=function(q){return arguments.length?(V=typeof q=="function"?q:Array.isArray(q)?x(_.call(q)):x(q),j):V},j}function D($,U,V){if(V==null&&(V=d),!!(j=$.length)){if((U=+U)<=0||j<2)return+V($[0],0,$);if(U>=1)return+V($[j-1],j-1,$);var j,q=(j-1)*U,Y=Math.floor(q),K=+V($[Y],Y,$),te=+V($[Y+1],Y+1,$);return K+(te-K)*(q-Y)}}function R($,U,V){return $=v.call($,d).sort(i),Math.ceil((V-U)/(2*(D($,.75)-D($,.25))*Math.pow($.length,-1/3)))}function P($,U,V){return Math.ceil((V-U)/(3.5*g($)*Math.pow($.length,-1/3)))}function z($,U){var V=$.length,j=-1,q,Y;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=q;++j<V;)(q=$[j])!=null&&q>Y&&(Y=q)}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=q;++j<V;)(q=U($[j],j,$))!=null&&q>Y&&(Y=q);return Y}function I($,U){var V=$.length,j=V,q=-1,Y,K=0;if(U==null)for(;++q<V;)isNaN(Y=d($[q]))?--j:K+=Y;else for(;++q<V;)isNaN(Y=d(U($[q],q,$)))?--j:K+=Y;if(j)return K/j}function L($,U){var V=$.length,j=-1,q,Y=[];if(U==null)for(;++j<V;)isNaN(q=d($[j]))||Y.push(q);else for(;++j<V;)isNaN(q=d(U($[j],j,$)))||Y.push(q);return D(Y.sort(i),.5)}function B($){for(var U=$.length,V,j=-1,q=0,Y,K;++j<U;)q+=$[j].length;for(Y=new Array(q);--U>=0;)for(K=$[U],V=K.length;--V>=0;)Y[--q]=K[V];return Y}function O($,U){var V=$.length,j=-1,q,Y;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=q;++j<V;)(q=$[j])!=null&&Y>q&&(Y=q)}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=q;++j<V;)(q=U($[j],j,$))!=null&&Y>q&&(Y=q);return Y}function G($,U){for(var V=U.length,j=new Array(V);V--;)j[V]=$[U[V]];return j}function W($,U){if(V=$.length){var V,j=0,q=0,Y,K=$[q];for(U==null&&(U=i);++j<V;)(U(Y=$[j],K)<0||U(K,K)!==0)&&(K=Y,q=j);if(U(K,K)===0)return q}}function X($,U,V){for(var j=(V??$.length)-(U=U==null?0:+U),q,Y;j;)Y=Math.random()*j--|0,q=$[j+U],$[j+U]=$[Y+U],$[Y+U]=q;return $}function Z($,U){var V=$.length,j=-1,q,Y=0;if(U==null)for(;++j<V;)(q=+$[j])&&(Y+=q);else for(;++j<V;)(q=+U($[j],j,$))&&(Y+=q);return Y}function J($){if(!(Y=$.length))return[];for(var U=-1,V=O($,N),j=new Array(V);++U<V;)for(var q=-1,Y,K=j[U]=new Array(Y);++q<Y;)K[q]=$[q][U];return j}function N($){return $.length}function H(){return J(arguments)}t.bisect=l,t.bisectRight=l,t.bisectLeft=n,t.ascending=i,t.bisector=a,t.cross=f,t.descending=h,t.deviation=g,t.extent=m,t.histogram=F,t.thresholdFreedmanDiaconis=R,t.thresholdScott=P,t.thresholdSturges=T,t.max=z,t.mean=I,t.median=L,t.merge=B,t.min=O,t.pairs=u,t.permute=G,t.quantile=D,t.range=M,t.scan=W,t.shuffle=X,t.sum=Z,t.ticks=A,t.tickIncrement=b,t.tickStep=E,t.transpose=J,t.variance=p,t.zip=H,Object.defineProperty(t,"__esModule",{value:!0})}))}}),KY=de({"node_modules/d3-geo-projection/dist/d3-geo-projection.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,w4(),ZY()):i(t.d3=t.d3||{},t.d3,t.d3)})(e,(function(t,i,a){"use strict";var o=Math.abs,s=Math.atan,l=Math.atan2,n=Math.cos,u=Math.exp,c=Math.floor,f=Math.log,h=Math.max,d=Math.min,p=Math.pow,g=Math.round,m=Math.sign||function(Se){return Se>0?1:Se<0?-1:0},y=Math.sin,_=Math.tan,v=1e-6,x=1e-12,S=Math.PI,M=S/2,C=S/4,w=Math.SQRT1_2,k=P(2),A=P(S),b=S*2,E=180/S,T=S/180;function F(Se){return Se?Se/Math.sin(Se):1}function D(Se){return Se>1?M:Se<-1?-M:Math.asin(Se)}function R(Se){return Se>1?0:Se<-1?S:Math.acos(Se)}function P(Se){return Se>0?Math.sqrt(Se):0}function z(Se){return Se=u(2*Se),(Se-1)/(Se+1)}function I(Se){return(u(Se)-u(-Se))/2}function L(Se){return(u(Se)+u(-Se))/2}function B(Se){return f(Se+P(Se*Se+1))}function O(Se){return f(Se+P(Se*Se-1))}function G(Se){var Pe=_(Se/2),Ge=2*f(n(Se/2))/(Pe*Pe);function $e(st,ot){var pt=n(st),Vt=n(ot),tr=y(ot),Ut=Vt*pt,rr=-((1-Ut?f((1+Ut)/2)/(1-Ut):-.5)+Ge/(1+Ut));return[rr*Vt*y(st),rr*tr]}return $e.invert=function(st,ot){var pt=P(st*st+ot*ot),Vt=-Se/2,tr=50,Ut;if(!pt)return[0,0];do{var rr=Vt/2,pr=n(rr),Sr=y(rr),Rr=Sr/pr,Zr=-f(o(pr));Vt-=Ut=(2/Rr*Zr-Ge*Rr-pt)/(-Zr/(Sr*Sr)+1-Ge/(2*pr*pr))*(pr<0?.7:1)}while(o(Ut)>v&&--tr>0);var wi=y(Vt);return[l(st*wi,pt*n(Vt)),D(ot*wi/pt)]},$e}function W(){var Se=M,Pe=i.geoProjectionMutator(G),Ge=Pe(Se);return Ge.radius=function($e){return arguments.length?Pe(Se=$e*T):Se*E},Ge.scale(179.976).clipAngle(147)}function X(Se,Pe){var Ge=n(Pe),$e=F(R(Ge*n(Se/=2)));return[2*Ge*y(Se)*$e,y(Pe)*$e]}X.invert=function(Se,Pe){if(!(Se*Se+4*Pe*Pe>S*S+v)){var Ge=Se,$e=Pe,st=25;do{var ot=y(Ge),pt=y(Ge/2),Vt=n(Ge/2),tr=y($e),Ut=n($e),rr=y(2*$e),pr=tr*tr,Sr=Ut*Ut,Rr=pt*pt,Zr=1-Sr*Vt*Vt,wi=Zr?R(Ut*Vt)*P(qi=1/Zr):qi=0,qi,Aa=2*wi*Ut*pt-Se,un=wi*tr-Pe,gn=qi*(Sr*Rr+wi*Ut*Vt*pr),Tn=qi*(.5*ot*rr-wi*2*tr*pt),Pn=qi*.25*(rr*pt-wi*tr*Sr*ot),Eo=qi*(pr*Vt+wi*Rr*Ut),qo=Tn*Pn-Eo*gn;if(!qo)break;var Wn=(un*Tn-Aa*Eo)/qo,ls=(Aa*Pn-un*gn)/qo;Ge-=Wn,$e-=ls}while((o(Wn)>v||o(ls)>v)&&--st>0);return[Ge,$e]}};function Z(){return i.geoProjection(X).scale(152.63)}function J(Se){var Pe=y(Se),Ge=n(Se),$e=Se>=0?1:-1,st=_($e*Se),ot=(1+Pe-Ge)/2;function pt(Vt,tr){var Ut=n(tr),rr=n(Vt/=2);return[(1+Ut)*y(Vt),($e*tr>-l(rr,st)-.001?0:-$e*10)+ot+y(tr)*Ge-(1+Ut)*Pe*rr]}return pt.invert=function(Vt,tr){var Ut=0,rr=0,pr=50;do{var Sr=n(Ut),Rr=y(Ut),Zr=n(rr),wi=y(rr),qi=1+Zr,Aa=qi*Rr-Vt,un=ot+wi*Ge-qi*Pe*Sr-tr,gn=qi*Sr/2,Tn=-Rr*wi,Pn=Pe*qi*Rr/2,Eo=Ge*Zr+Pe*Sr*wi,qo=Tn*Pn-Eo*gn,Wn=(un*Tn-Aa*Eo)/qo/2,ls=(Aa*Pn-un*gn)/qo;o(ls)>2&&(ls/=2),Ut-=Wn,rr-=ls}while((o(Wn)>v||o(ls)>v)&&--pr>0);return $e*rr>-l(n(Ut),st)-.001?[Ut*2,rr]:null},pt}function N(){var Se=20*T,Pe=Se>=0?1:-1,Ge=_(Pe*Se),$e=i.geoProjectionMutator(J),st=$e(Se),ot=st.stream;return st.parallel=function(pt){return arguments.length?(Ge=_((Pe=(Se=pt*T)>=0?1:-1)*Se),$e(Se)):Se*E},st.stream=function(pt){var Vt=st.rotate(),tr=ot(pt),Ut=(st.rotate([0,0]),ot(pt)),rr=st.precision();return st.rotate(Vt),tr.sphere=function(){Ut.polygonStart(),Ut.lineStart();for(var pr=Pe*-180;Pe*pr<180;pr+=Pe*90)Ut.point(pr,Pe*90);if(Se)for(;Pe*(pr-=3*Pe*rr)>=-180;)Ut.point(pr,Pe*-l(n(pr*T/2),Ge)*E);Ut.lineEnd(),Ut.polygonEnd()},tr},st.scale(218.695).center([0,28.0974])}function H(Se,Pe){var Ge=_(Pe/2),$e=P(1-Ge*Ge),st=1+$e*n(Se/=2),ot=y(Se)*$e/st,pt=Ge/st,Vt=ot*ot,tr=pt*pt;return[4/3*ot*(3+Vt-3*tr),4/3*pt*(3+3*Vt-tr)]}H.invert=function(Se,Pe){if(Se*=3/8,Pe*=3/8,!Se&&o(Pe)>1)return null;var Ge=Se*Se,$e=Pe*Pe,st=1+Ge+$e,ot=P((st-P(st*st-4*Pe*Pe))/2),pt=D(ot)/3,Vt=ot?O(o(Pe/ot))/3:B(o(Se))/3,tr=n(pt),Ut=L(Vt),rr=Ut*Ut-tr*tr;return[m(Se)*2*l(I(Vt)*tr,.25-rr),m(Pe)*2*l(Ut*y(pt),.25+rr)]};function $(){return i.geoProjection(H).scale(66.1603)}var U=P(8),V=f(1+k);function j(Se,Pe){var Ge=o(Pe);return Ge<C?[Se,f(_(C+Pe/2))]:[Se*n(Ge)*(2*k-1/y(Ge)),m(Pe)*(2*k*(Ge-C)-f(_(Ge/2)))]}j.invert=function(Se,Pe){if((ot=o(Pe))<V)return[Se,2*s(u(Pe))-M];var Ge=C,$e=25,st,ot;do{var pt=n(Ge/2),Vt=_(Ge/2);Ge-=st=(U*(Ge-C)-f(Vt)-ot)/(U-pt*pt/(2*Vt))}while(o(st)>x&&--$e>0);return[Se/(n(Ge)*(U-1/y(Ge))),m(Pe)*Ge]};function q(){return i.geoProjection(j).scale(112.314)}function Y(Se){var Pe=2*S/Se;function Ge($e,st){var ot=i.geoAzimuthalEquidistantRaw($e,st);if(o($e)>M){var pt=l(ot[1],ot[0]),Vt=P(ot[0]*ot[0]+ot[1]*ot[1]),tr=Pe*g((pt-M)/Pe)+M,Ut=l(y(pt-=tr),2-n(pt));pt=tr+D(S/Vt*y(Ut))-Ut,ot[0]=Vt*n(pt),ot[1]=Vt*y(pt)}return ot}return Ge.invert=function($e,st){var ot=P($e*$e+st*st);if(ot>M){var pt=l(st,$e),Vt=Pe*g((pt-M)/Pe)+M,tr=pt>Vt?-1:1,Ut=ot*n(Vt-pt),rr=1/_(tr*R((Ut-S)/P(S*(S-2*Ut)+ot*ot)));pt=Vt+2*s((rr+tr*P(rr*rr-3))/3),$e=ot*n(pt),st=ot*y(pt)}return i.geoAzimuthalEquidistantRaw.invert($e,st)},Ge}function K(){var Se=5,Pe=i.geoProjectionMutator(Y),Ge=Pe(Se),$e=Ge.stream,st=.01,ot=-n(st*T),pt=y(st*T);return Ge.lobes=function(Vt){return arguments.length?Pe(Se=+Vt):Se},Ge.stream=function(Vt){var tr=Ge.rotate(),Ut=$e(Vt),rr=(Ge.rotate([0,0]),$e(Vt));return Ge.rotate(tr),Ut.sphere=function(){rr.polygonStart(),rr.lineStart();for(var pr=0,Sr=360/Se,Rr=2*S/Se,Zr=90-180/Se,wi=M;pr<Se;++pr,Zr-=Sr,wi-=Rr)rr.point(l(pt*n(wi),ot)*E,D(pt*y(wi))*E),Zr<-90?(rr.point(-90,-180-Zr-st),rr.point(-90,-180-Zr+st)):(rr.point(90,Zr+st),rr.point(90,Zr-st));rr.lineEnd(),rr.polygonEnd()},Ut},Ge.scale(87.8076).center([0,17.1875]).clipAngle(180-.001)}function te(Se,Pe){if(arguments.length<2&&(Pe=Se),Pe===1)return i.geoAzimuthalEqualAreaRaw;if(Pe===1/0)return ne;function Ge($e,st){var ot=i.geoAzimuthalEqualAreaRaw($e/Pe,st);return ot[0]*=Se,ot}return Ge.invert=function($e,st){var ot=i.geoAzimuthalEqualAreaRaw.invert($e/Se,st);return ot[0]*=Pe,ot},Ge}function ne(Se,Pe){return[Se*n(Pe)/n(Pe/=2),2*y(Pe)]}ne.invert=function(Se,Pe){var Ge=2*D(Pe/2);return[Se*n(Ge/2)/n(Ge),Ge]};function se(){var Se=2,Pe=i.geoProjectionMutator(te),Ge=Pe(Se);return Ge.coefficient=function($e){return arguments.length?Pe(Se=+$e):Se},Ge.scale(169.529)}function le(Se,Pe,Ge){var $e=100,st,ot,pt;Ge=Ge===void 0?0:+Ge,Pe=+Pe;do ot=Se(Ge),pt=Se(Ge+v),ot===pt&&(pt=ot+v),Ge-=st=-1*v*(ot-Pe)/(ot-pt);while($e-- >0&&o(st)>v);return $e<0?NaN:Ge}function ce(Se,Pe,Ge){return Pe===void 0&&(Pe=40),Ge===void 0&&(Ge=x),function($e,st,ot,pt){var Vt,tr,Ut;ot=ot===void 0?0:+ot,pt=pt===void 0?0:+pt;for(var rr=0;rr<Pe;rr++){var pr=Se(ot,pt),Sr=pr[0]-$e,Rr=pr[1]-st;if(o(Sr)<Ge&&o(Rr)<Ge)break;var Zr=Sr*Sr+Rr*Rr;if(Zr>Vt){ot-=tr/=2,pt-=Ut/=2;continue}Vt=Zr;var wi=(ot>0?-1:1)*Ge,qi=(pt>0?-1:1)*Ge,Aa=Se(ot+wi,pt),un=Se(ot,pt+qi),gn=(Aa[0]-pr[0])/wi,Tn=(Aa[1]-pr[1])/wi,Pn=(un[0]-pr[0])/qi,Eo=(un[1]-pr[1])/qi,qo=Eo*gn-Tn*Pn,Wn=(o(qo)<.5?.5:1)/qo;if(tr=(Rr*Pn-Sr*Eo)*Wn,Ut=(Sr*Tn-Rr*gn)*Wn,ot+=tr,pt+=Ut,o(tr)<Ge&&o(Ut)<Ge)break}return[ot,pt]}}function pe(){var Se=te(1.68,2),Pe=1.4,Ge=12;function $e(st,ot){if(st+ot<-Pe){var pt=(st-ot+1.6)*(st+ot+Pe)/8;st+=pt,ot-=.8*pt*y(ot+S/2)}var Vt=Se(st,ot),tr=(1-n(st*ot))/Ge;return Vt[1]<0&&(Vt[0]*=1+tr),Vt[1]>0&&(Vt[1]*=1+tr/1.5*Vt[0]*Vt[0]),Vt}return $e.invert=ce($e),$e}function xe(){return i.geoProjection(pe()).rotate([-16.5,-42]).scale(176.57).center([7.93,.09])}function ye(Se,Pe){var Ge=Se*y(Pe),$e=30,st;do Pe-=st=(Pe+y(Pe)-Ge)/(1+n(Pe));while(o(st)>v&&--$e>0);return Pe/2}function fe(Se,Pe,Ge){function $e(st,ot){return[Se*st*n(ot=ye(Ge,ot)),Pe*y(ot)]}return $e.invert=function(st,ot){return ot=D(ot/Pe),[st/(Se*n(ot)),D((2*ot+y(2*ot))/Ge)]},$e}var ae=fe(k/M,k,S);function ee(){return i.geoProjection(ae).scale(169.529)}var ie=2.00276,Q=1.11072;function ue(Se,Pe){var Ge=ye(S,Pe);return[ie*Se/(1/n(Pe)+Q/n(Ge)),(Pe+k*y(Ge))/ie]}ue.invert=function(Se,Pe){var Ge=ie*Pe,$e=Pe<0?-C:C,st=25,ot,pt;do pt=Ge-k*y($e),$e-=ot=(y(2*$e)+2*$e-S*y(pt))/(2*n(2*$e)+2+S*n(pt)*k*n($e));while(o(ot)>v&&--st>0);return pt=Ge-k*y($e),[Se*(1/n(pt)+Q/n($e))/ie,pt]};function ge(){return i.geoProjection(ue).scale(160.857)}function Me(Se){var Pe=0,Ge=i.geoProjectionMutator(Se),$e=Ge(Pe);return $e.parallel=function(st){return arguments.length?Ge(Pe=st*T):Pe*E},$e}function Te(Se,Pe){return[Se*n(Pe),Pe]}Te.invert=function(Se,Pe){return[Se/n(Pe),Pe]};function je(){return i.geoProjection(Te).scale(152.63)}function Ve(Se){if(!Se)return Te;var Pe=1/_(Se);function Ge($e,st){var ot=Pe+Se-st,pt=ot&&$e*n(st)/ot;return[ot*y(pt),Pe-ot*n(pt)]}return Ge.invert=function($e,st){var ot=P($e*$e+(st=Pe-st)*st),pt=Pe+Se-ot;return[ot/n(pt)*l($e,st),pt]},Ge}function Ze(){return Me(Ve).scale(123.082).center([0,26.1441]).parallel(45)}function Ke(Se){function Pe(Ge,$e){var st=M-$e,ot=st&&Ge*Se*y(st)/st;return[st*y(ot)/Se,M-st*n(ot)]}return Pe.invert=function(Ge,$e){var st=Ge*Se,ot=M-$e,pt=P(st*st+ot*ot),Vt=l(st,ot);return[(pt?pt/y(pt):1)*Vt/Se,M-pt]},Pe}function vt(){var Se=.5,Pe=i.geoProjectionMutator(Ke),Ge=Pe(Se);return Ge.fraction=function($e){return arguments.length?Pe(Se=+$e):Se},Ge.scale(158.837)}var xt=fe(1,4/S,S);function Pt(){return i.geoProjection(xt).scale(152.63)}function mt(Se,Pe,Ge,$e,st,ot){var pt=n(ot),Vt;if(o(Se)>1||o(ot)>1)Vt=R(Ge*st+Pe*$e*pt);else{var tr=y(Se/2),Ut=y(ot/2);Vt=2*D(P(tr*tr+Pe*$e*Ut*Ut))}return o(Vt)>v?[Vt,l($e*y(ot),Pe*st-Ge*$e*pt)]:[0,0]}function Mt(Se,Pe,Ge){return R((Se*Se+Pe*Pe-Ge*Ge)/(2*Se*Pe))}function lt(Se){return Se-2*S*c((Se+S)/(2*S))}function qe(Se,Pe,Ge){for(var $e=[[Se[0],Se[1],y(Se[1]),n(Se[1])],[Pe[0],Pe[1],y(Pe[1]),n(Pe[1])],[Ge[0],Ge[1],y(Ge[1]),n(Ge[1])]],st=$e[2],ot,pt=0;pt<3;++pt,st=ot)ot=$e[pt],st.v=mt(ot[1]-st[1],st[3],st[2],ot[3],ot[2],ot[0]-st[0]),st.point=[0,0];var Vt=Mt($e[0].v[0],$e[2].v[0],$e[1].v[0]),tr=Mt($e[0].v[0],$e[1].v[0],$e[2].v[0]),Ut=S-Vt;$e[2].point[1]=0,$e[0].point[0]=-($e[1].point[0]=$e[0].v[0]/2);var rr=[$e[2].point[0]=$e[0].point[0]+$e[2].v[0]*n(Vt),2*($e[0].point[1]=$e[1].point[1]=$e[2].v[0]*y(Vt))];function pr(Sr,Rr){var Zr=y(Rr),wi=n(Rr),qi=new Array(3),Aa;for(Aa=0;Aa<3;++Aa){var un=$e[Aa];if(qi[Aa]=mt(Rr-un[1],un[3],un[2],wi,Zr,Sr-un[0]),!qi[Aa][0])return un.point;qi[Aa][1]=lt(qi[Aa][1]-un.v[1])}var gn=rr.slice();for(Aa=0;Aa<3;++Aa){var Tn=Aa==2?0:Aa+1,Pn=Mt($e[Aa].v[0],qi[Aa][0],qi[Tn][0]);qi[Aa][1]<0&&(Pn=-Pn),Aa?Aa==1?(Pn=tr-Pn,gn[0]-=qi[Aa][0]*n(Pn),gn[1]-=qi[Aa][0]*y(Pn)):(Pn=Ut-Pn,gn[0]+=qi[Aa][0]*n(Pn),gn[1]+=qi[Aa][0]*y(Pn)):(gn[0]+=qi[Aa][0]*n(Pn),gn[1]-=qi[Aa][0]*y(Pn))}return gn[0]/=3,gn[1]/=3,gn}return pr}function Ye(Se){return Se[0]*=T,Se[1]*=T,Se}function me(){return _e([0,22],[45,22],[22.5,-22]).scale(380).center([22.5,2])}function _e(Se,Pe,Ge){var $e=i.geoCentroid({type:"MultiPoint",coordinates:[Se,Pe,Ge]}),st=[-$e[0],-$e[1]],ot=i.geoRotation(st),pt=qe(Ye(ot(Se)),Ye(ot(Pe)),Ye(ot(Ge)));pt.invert=ce(pt);var Vt=i.geoProjection(pt).rotate(st),tr=Vt.center;return delete Vt.rotate,Vt.center=function(Ut){return arguments.length?tr(ot(Ut)):ot.invert(tr())},Vt.clipAngle(90)}function Ae(Se,Pe){var Ge=P(1-y(Pe));return[2/A*Se*Ge,A*(1-Ge)]}Ae.invert=function(Se,Pe){var Ge=(Ge=Pe/A-1)*Ge;return[Ge>0?Se*P(S/Ge)/2:0,D(1-Ge)]};function ke(){return i.geoProjection(Ae).scale(95.6464).center([0,30])}function Ee(Se){var Pe=_(Se);function Ge($e,st){return[$e,($e?$e/y($e):1)*(y(st)*n($e)-Pe*n(st))]}return Ge.invert=Pe?function($e,st){$e&&(st*=y($e)/$e);var ot=n($e);return[$e,2*l(P(ot*ot+Pe*Pe-st*st)-ot,Pe-st)]}:function($e,st){return[$e,D($e?st*_($e)/$e:st)]},Ge}function De(){return Me(Ee).scale(249.828).clipAngle(90)}var Je=P(3);function Ue(Se,Pe){return[Je*Se*(2*n(2*Pe/3)-1)/A,Je*A*y(Pe/3)]}Ue.invert=function(Se,Pe){var Ge=3*D(Pe/(Je*A));return[A*Se/(Je*(2*n(2*Ge/3)-1)),Ge]};function at(){return i.geoProjection(Ue).scale(156.19)}function rt(Se){var Pe=n(Se);function Ge($e,st){return[$e*Pe,y(st)/Pe]}return Ge.invert=function($e,st){return[$e/Pe,D(st*Pe)]},Ge}function ft(){return Me(rt).parallel(38.58).scale(195.044)}function At(Se){var Pe=n(Se);function Ge($e,st){return[$e*Pe,(1+Pe)*_(st/2)]}return Ge.invert=function($e,st){return[$e/Pe,s(st/(1+Pe))*2]},Ge}function ht(){return Me(At).scale(124.75)}function Gt(Se,Pe){var Ge=P(8/(3*S));return[Ge*Se*(1-o(Pe)/S),Ge*Pe]}Gt.invert=function(Se,Pe){var Ge=P(8/(3*S)),$e=Pe/Ge;return[Se/(Ge*(1-o($e)/S)),$e]};function fr(){return i.geoProjection(Gt).scale(165.664)}function gt(Se,Pe){var Ge=P(4-3*y(o(Pe)));return[2/P(6*S)*Se*Ge,m(Pe)*P(2*S/3)*(2-Ge)]}gt.invert=function(Se,Pe){var Ge=2-o(Pe)/P(2*S/3);return[Se*P(6*S)/(2*Ge),m(Pe)*D((4-Ge*Ge)/3)]};function yt(){return i.geoProjection(gt).scale(165.664)}function kt(Se,Pe){var Ge=P(S*(4+S));return[2/Ge*Se*(1+P(1-4*Pe*Pe/(S*S))),4/Ge*Pe]}kt.invert=function(Se,Pe){var Ge=P(S*(4+S))/2;return[Se*Ge/(1+P(1-Pe*Pe*(4+S)/(4*S))),Pe*Ge/2]};function Lt(){return i.geoProjection(kt).scale(180.739)}function Ct(Se,Pe){var Ge=(2+M)*y(Pe);Pe/=2;for(var $e=0,st=1/0;$e<10&&o(st)>v;$e++){var ot=n(Pe);Pe-=st=(Pe+y(Pe)*(ot+2)-Ge)/(2*ot*(1+ot))}return[2/P(S*(4+S))*Se*(1+n(Pe)),2*P(S/(4+S))*y(Pe)]}Ct.invert=function(Se,Pe){var Ge=Pe*P((4+S)/S)/2,$e=D(Ge),st=n($e);return[Se/(2/P(S*(4+S))*(1+st)),D(($e+Ge*(st+2))/(2+M))]};function $t(){return i.geoProjection(Ct).scale(180.739)}function mr(Se,Pe){return[Se*(1+n(Pe))/P(2+S),2*Pe/P(2+S)]}mr.invert=function(Se,Pe){var Ge=P(2+S),$e=Pe*Ge/2;return[Ge*Se/(1+n($e)),$e]};function br(){return i.geoProjection(mr).scale(173.044)}function Er(Se,Pe){for(var Ge=(1+M)*y(Pe),$e=0,st=1/0;$e<10&&o(st)>v;$e++)Pe-=st=(Pe+y(Pe)-Ge)/(1+n(Pe));return Ge=P(2+S),[Se*(1+n(Pe))/Ge,2*Pe/Ge]}Er.invert=function(Se,Pe){var Ge=1+M,$e=P(Ge/2);return[Se*2*$e/(1+n(Pe*=$e)),D((Pe+y(Pe))/Ge)]};function Tr(){return i.geoProjection(Er).scale(173.044)}var Ur=3+2*k;function Ai(Se,Pe){var Ge=y(Se/=2),$e=n(Se),st=P(n(Pe)),ot=n(Pe/=2),pt=y(Pe)/(ot+k*$e*st),Vt=P(2/(1+pt*pt)),tr=P((k*ot+($e+Ge)*st)/(k*ot+($e-Ge)*st));return[Ur*(Vt*(tr-1/tr)-2*f(tr)),Ur*(Vt*pt*(tr+1/tr)-2*s(pt))]}Ai.invert=function(Se,Pe){if(!(ot=H.invert(Se/1.2,Pe*1.065)))return null;var Ge=ot[0],$e=ot[1],st=20,ot;Se/=Ur,Pe/=Ur;do{var pt=Ge/2,Vt=$e/2,tr=y(pt),Ut=n(pt),rr=y(Vt),pr=n(Vt),Sr=n($e),Rr=P(Sr),Zr=rr/(pr+k*Ut*Rr),wi=Zr*Zr,qi=P(2/(1+wi)),Aa=k*pr+(Ut+tr)*Rr,un=k*pr+(Ut-tr)*Rr,gn=Aa/un,Tn=P(gn),Pn=Tn-1/Tn,Eo=Tn+1/Tn,qo=qi*Pn-2*f(Tn)-Se,Wn=qi*Zr*Eo-2*s(Zr)-Pe,ls=rr&&w*Rr*tr*wi/rr,ol=(k*Ut*pr+Rr)/(2*(pr+k*Ut*Rr)*(pr+k*Ut*Rr)*Rr),wl=-.5*Zr*qi*qi*qi,Vu=wl*ls,Pc=wl*ol,dl=(dl=2*pr+k*Rr*(Ut-tr))*dl*Tn,pl=(k*Ut*pr*Rr+Sr)/dl,Tu=-(k*tr*rr)/(Rr*dl),nc=Pn*Vu-2*pl/Tn+qi*(pl+pl/gn),oc=Pn*Pc-2*Tu/Tn+qi*(Tu+Tu/gn),sc=Zr*Eo*Vu-2*ls/(1+wi)+qi*Eo*ls+qi*Zr*(pl-pl/gn),Ic=Zr*Eo*Pc-2*ol/(1+wi)+qi*Eo*ol+qi*Zr*(Tu-Tu/gn),Gu=oc*sc-Ic*nc;if(!Gu)break;var tf=(Wn*oc-qo*Ic)/Gu,th=(qo*sc-Wn*nc)/Gu;Ge-=tf,$e=h(-M,d(M,$e-th))}while((o(tf)>v||o(th)>v)&&--st>0);return o(o($e)-M)<v?[0,$e]:st&&[Ge,$e]};function oi(){return i.geoProjection(Ai).scale(62.5271)}var Qr=n(35*T);function ea(Se,Pe){var Ge=_(Pe/2);return[Se*Qr*P(1-Ge*Ge),(1+Qr)*Ge]}ea.invert=function(Se,Pe){var Ge=Pe/(1+Qr);return[Se&&Se/(Qr*P(1-Ge*Ge)),2*s(Ge)]};function $i(){return i.geoProjection(ea).scale(137.152)}function ja(Se,Pe){var Ge=Pe/2,$e=n(Ge);return[2*Se/A*n(Pe)*$e*$e,A*_(Ge)]}ja.invert=function(Se,Pe){var Ge=s(Pe/A),$e=n(Ge),st=2*Ge;return[Se*A/2/(n(st)*$e*$e),st]};function ya(){return i.geoProjection(ja).scale(135.264)}function pa(Se){var Pe=1-Se,Ge=ot(S,0)[0]-ot(-S,0)[0],$e=ot(0,M)[1]-ot(0,-M)[1],st=P(2*$e/Ge);function ot(tr,Ut){var rr=n(Ut),pr=y(Ut);return[rr/(Pe+Se*rr)*tr,Pe*Ut+Se*pr]}function pt(tr,Ut){var rr=ot(tr,Ut);return[rr[0]*st,rr[1]/st]}function Vt(tr){return pt(0,tr)[1]}return pt.invert=function(tr,Ut){var rr=le(Vt,Ut),pr=tr/st*(Se+Pe/n(rr));return[pr,rr]},pt}function xi(){var Se=.5,Pe=i.geoProjectionMutator(pa),Ge=Pe(Se);return Ge.alpha=function($e){return arguments.length?Pe(Se=+$e):Se},Ge.scale(168.725)}function bi(Se){return[Se[0]/2,D(_(Se[1]/2*T))*E]}function Ua(Se){return[Se[0]*2,2*s(y(Se[1]*T))*E]}function dn(Se){Se==null&&(Se=i.geoOrthographic);var Pe=Se(),Ge=i.geoEquirectangular().scale(E).precision(0).clipAngle(null).translate([0,0]);function $e(ot){return Pe(bi(ot))}Pe.invert&&($e.invert=function(ot){return Ua(Pe.invert(ot))}),$e.stream=function(ot){var pt=Pe.stream(ot),Vt=Ge.stream({point:function(tr,Ut){pt.point(tr/2,D(_(-Ut/2*T))*E)},lineStart:function(){pt.lineStart()},lineEnd:function(){pt.lineEnd()},polygonStart:function(){pt.polygonStart()},polygonEnd:function(){pt.polygonEnd()}});return Vt.sphere=pt.sphere,Vt};function st(ot){$e[ot]=function(){return arguments.length?(Pe[ot].apply(Pe,arguments),$e):Pe[ot]()}}return $e.rotate=function(ot){return arguments.length?(Ge.rotate(ot),$e):Ge.rotate()},$e.center=function(ot){return arguments.length?(Pe.center(bi(ot)),$e):Ua(Pe.center())},st("angle"),st("clipAngle"),st("clipExtent"),st("fitExtent"),st("fitHeight"),st("fitSize"),st("fitWidth"),st("scale"),st("translate"),st("precision"),$e.scale(249.5)}function pi(Se,Pe){var Ge=2*S/Pe,$e=Se*Se;function st(ot,pt){var Vt=i.geoAzimuthalEquidistantRaw(ot,pt),tr=Vt[0],Ut=Vt[1],rr=tr*tr+Ut*Ut;if(rr>$e){var pr=P(rr),Sr=l(Ut,tr),Rr=Ge*g(Sr/Ge),Zr=Sr-Rr,wi=Se*n(Zr),qi=(Se*y(Zr)-Zr*y(wi))/(M-wi),Aa=Jr(Zr,qi),un=(S-Se)/Be(Aa,wi,S);tr=pr;var gn=50,Tn;do tr-=Tn=(Se+Be(Aa,wi,tr)*un-pr)/(Aa(tr)*un);while(o(Tn)>v&&--gn>0);Ut=Zr*y(tr),tr<M&&(Ut-=qi*(tr-M));var Pn=y(Rr),Eo=n(Rr);Vt[0]=tr*Eo-Ut*Pn,Vt[1]=tr*Pn+Ut*Eo}return Vt}return st.invert=function(ot,pt){var Vt=ot*ot+pt*pt;if(Vt>$e){var tr=P(Vt),Ut=l(pt,ot),rr=Ge*g(Ut/Ge),pr=Ut-rr;ot=tr*n(pr),pt=tr*y(pr);for(var Sr=ot-M,Rr=y(ot),Zr=pt/Rr,wi=ot<M?1/0:0,qi=10;;){var Aa=Se*y(Zr),un=Se*n(Zr),gn=y(un),Tn=M-un,Pn=(Aa-Zr*gn)/Tn,Eo=Jr(Zr,Pn);if(o(wi)<x||!--qi)break;Zr-=wi=(Zr*Rr-Pn*Sr-pt)/(Rr-Sr*2*(Tn*(un+Zr*Aa*n(un)-gn)-Aa*(Aa-Zr*gn))/(Tn*Tn))}tr=Se+Be(Eo,un,ot)*(S-Se)/Be(Eo,un,S),Ut=rr+Zr,ot=tr*n(Ut),pt=tr*y(Ut)}return i.geoAzimuthalEquidistantRaw.invert(ot,pt)},st}function Jr(Se,Pe){return function(Ge){var $e=Se*n(Ge);return Ge<M&&($e-=Pe),P(1+$e*$e)}}function Be(Se,Pe,Ge){for(var $e=50,st=(Ge-Pe)/$e,ot=Se(Pe)+Se(Ge),pt=1,Vt=Pe;pt<$e;++pt)ot+=2*Se(Vt+=st);return ot*.5*st}function Fe(){var Se=6,Pe=30*T,Ge=n(Pe),$e=y(Pe),st=i.geoProjectionMutator(pi),ot=st(Pe,Se),pt=ot.stream,Vt=.01,tr=-n(Vt*T),Ut=y(Vt*T);return ot.radius=function(rr){return arguments.length?(Ge=n(Pe=rr*T),$e=y(Pe),st(Pe,Se)):Pe*E},ot.lobes=function(rr){return arguments.length?st(Pe,Se=+rr):Se},ot.stream=function(rr){var pr=ot.rotate(),Sr=pt(rr),Rr=(ot.rotate([0,0]),pt(rr));return ot.rotate(pr),Sr.sphere=function(){Rr.polygonStart(),Rr.lineStart();for(var Zr=0,wi=2*S/Se,qi=0;Zr<Se;++Zr,qi-=wi)Rr.point(l(Ut*n(qi),tr)*E,D(Ut*y(qi))*E),Rr.point(l($e*n(qi-wi/2),Ge)*E,D($e*y(qi-wi/2))*E);Rr.lineEnd(),Rr.polygonEnd()},Sr},ot.rotate([90,-40]).scale(91.7095).clipAngle(180-.001)}function Et(Se,Pe,Ge,$e,st,ot,pt,Vt){arguments.length<8&&(Vt=0);function tr(Ut,rr){if(!rr)return[Se*Ut/S,0];var pr=rr*rr,Sr=Se+pr*(Pe+pr*(Ge+pr*$e)),Rr=rr*(st-1+pr*(ot-Vt+pr*pt)),Zr=(Sr*Sr+Rr*Rr)/(2*Rr),wi=Ut*D(Sr/Zr)/S;return[Zr*y(wi),rr*(1+pr*Vt)+Zr*(1-n(wi))]}return tr.invert=function(Ut,rr){var pr=S*Ut/Se,Sr=rr,Rr,Zr,wi=50;do{var qi=Sr*Sr,Aa=Se+qi*(Pe+qi*(Ge+qi*$e)),un=Sr*(st-1+qi*(ot-Vt+qi*pt)),gn=Aa*Aa+un*un,Tn=2*un,Pn=gn/Tn,Eo=Pn*Pn,qo=D(Aa/Pn)/S,Wn=pr*qo,ls=Aa*Aa,ol=(2*Pe+qi*(4*Ge+qi*6*$e))*Sr,wl=st+qi*(3*ot+qi*5*pt),Vu=2*(Aa*ol+un*(wl-1)),Pc=2*(wl-1),dl=(Vu*Tn-gn*Pc)/(Tn*Tn),pl=n(Wn),Tu=y(Wn),nc=Pn*pl,oc=Pn*Tu,sc=pr/S*(1/P(1-ls/Eo))*(ol*Pn-Aa*dl)/Eo,Ic=oc-Ut,Gu=Sr*(1+qi*Vt)+Pn-nc-rr,tf=dl*Tu+nc*sc,th=nc*qo,re=1+dl-(dl*pl-oc*sc),he=oc*qo,we=tf*he-re*th;if(!we)break;pr-=Rr=(Gu*tf-Ic*re)/we,Sr-=Zr=(Ic*he-Gu*th)/we}while((o(Rr)>v||o(Zr)>v)&&--wi>0);return[pr,Sr]},tr}var St=Et(2.8284,-1.6988,.75432,-.18071,1.76003,-.38914,.042555);function zt(){return i.geoProjection(St).scale(149.995)}var Wt=Et(2.583819,-.835827,.170354,-.038094,1.543313,-.411435,.082742);function Yt(){return i.geoProjection(Wt).scale(153.93)}var ze=Et(5/6*S,-.62636,-.0344,0,1.3493,-.05524,0,.045);function tt(){return i.geoProjection(ze).scale(130.945)}function ct(Se,Pe){var Ge=Se*Se,$e=Pe*Pe;return[Se*(1-.162388*$e)*(.87-952426e-9*Ge*Ge),Pe*(1+$e/12)]}ct.invert=function(Se,Pe){var Ge=Se,$e=Pe,st=50,ot;do{var pt=$e*$e;$e-=ot=($e*(1+pt/12)-Pe)/(1+pt/4)}while(o(ot)>v&&--st>0);st=50,Se/=1-.162388*pt;do{var Vt=(Vt=Ge*Ge)*Vt;Ge-=ot=(Ge*(.87-952426e-9*Vt)-Se)/(.87-.00476213*Vt)}while(o(ot)>v&&--st>0);return[Ge,$e]};function wt(){return i.geoProjection(ct).scale(131.747)}var Nt=Et(2.6516,-.76534,.19123,-.047094,1.36289,-.13965,.031762);function It(){return i.geoProjection(Nt).scale(131.087)}function Zt(Se){var Pe=Se(M,0)[0]-Se(-M,0)[0];function Ge($e,st){var ot=$e>0?-.5:.5,pt=Se($e+ot*S,st);return pt[0]-=ot*Pe,pt}return Se.invert&&(Ge.invert=function($e,st){var ot=$e>0?-.5:.5,pt=Se.invert($e+ot*Pe,st),Vt=pt[0]-ot*S;return Vt<-S?Vt+=2*S:Vt>S&&(Vt-=2*S),pt[0]=Vt,pt}),Ge}function qt(Se,Pe){var Ge=m(Se),$e=m(Pe),st=n(Pe),ot=n(Se)*st,pt=y(Se)*st,Vt=y($e*Pe);Se=o(l(pt,Vt)),Pe=D(ot),o(Se-M)>v&&(Se%=M);var tr=vr(Se>S/4?M-Se:Se,Pe);return Se>S/4&&(Vt=tr[0],tr[0]=-tr[1],tr[1]=-Vt),tr[0]*=Ge,tr[1]*=-$e,tr}qt.invert=function(Se,Pe){o(Se)>1&&(Se=m(Se)*2-Se),o(Pe)>1&&(Pe=m(Pe)*2-Pe);var Ge=m(Se),$e=m(Pe),st=-Ge*Se,ot=-$e*Pe,pt=ot/st<1,Vt=Br(pt?ot:st,pt?st:ot),tr=Vt[0],Ut=Vt[1],rr=n(Ut);return pt&&(tr=-M-tr),[Ge*(l(y(tr)*rr,-y(Ut))+S),$e*D(n(tr)*rr)]};function vr(Se,Pe){if(Pe===M)return[0,0];var Ge=y(Pe),$e=Ge*Ge,st=$e*$e,ot=1+st,pt=1+3*st,Vt=1-st,tr=D(1/P(ot)),Ut=Vt+$e*ot*tr,rr=(1-Ge)/Ut,pr=P(rr),Sr=rr*ot,Rr=P(Sr),Zr=pr*Vt,wi,qi;if(Se===0)return[0,-(Zr+$e*Rr)];var Aa=n(Pe),un=1/Aa,gn=2*Ge*Aa,Tn=(-3*$e+tr*pt)*gn,Pn=(-Ut*Aa-(1-Ge)*Tn)/(Ut*Ut),Eo=.5*Pn/pr,qo=Vt*Eo-2*$e*pr*gn,Wn=$e*ot*Pn+rr*pt*gn,ls=-un*gn,ol=-un*Wn,wl=-2*un*qo,Vu=4*Se/S,Pc;if(Se>.222*S||Pe<S/4&&Se>.175*S){if(wi=(Zr+$e*P(Sr*(1+st)-Zr*Zr))/(1+st),Se>S/4)return[wi,wi];var dl=wi,pl=.5*wi;wi=.5*(pl+dl),qi=50;do{var Tu=P(Sr-wi*wi),nc=wi*(wl+ls*Tu)+ol*D(wi/Rr)-Vu;if(!nc)break;nc<0?pl=wi:dl=wi,wi=.5*(pl+dl)}while(o(dl-pl)>v&&--qi>0)}else{wi=v,qi=25;do{var oc=wi*wi,sc=P(Sr-oc),Ic=wl+ls*sc,Gu=wi*Ic+ol*D(wi/Rr)-Vu,tf=Ic+(ol-ls*oc)/sc;wi-=Pc=sc?Gu/tf:0}while(o(Pc)>v&&--qi>0)}return[wi,-Zr-$e*P(Sr-wi*wi)]}function Br(Se,Pe){for(var Ge=0,$e=1,st=.5,ot=50;;){var pt=st*st,Vt=P(st),tr=D(1/P(1+pt)),Ut=1-pt+st*(1+pt)*tr,rr=(1-Vt)/Ut,pr=P(rr),Sr=rr*(1+pt),Rr=pr*(1-pt),Zr=Sr-Se*Se,wi=P(Zr),qi=Pe+Rr+st*wi;if(o($e-Ge)<x||--ot===0||qi===0)break;qi>0?Ge=st:$e=st,st=.5*(Ge+$e)}if(!ot)return null;var Aa=D(Vt),un=n(Aa),gn=1/un,Tn=2*Vt*un,Pn=(-3*st+tr*(1+3*pt))*Tn,Eo=(-Ut*un-(1-Vt)*Pn)/(Ut*Ut),qo=.5*Eo/pr,Wn=(1-pt)*qo-2*st*pr*Tn,ls=-2*gn*Wn,ol=-gn*Tn,wl=-gn*(st*(1+pt)*Eo+rr*(1+3*pt)*Tn);return[S/4*(Se*(ls+ol*wi)+wl*D(Se/P(Sr))),Aa]}function Pr(){return i.geoProjection(Zt(qt)).scale(239.75)}function Mi(Se,Pe,Ge){var $e,st,ot;return Se?($e=gi(Se,Ge),Pe?(st=gi(Pe,1-Ge),ot=st[1]*st[1]+Ge*$e[0]*$e[0]*st[0]*st[0],[[$e[0]*st[2]/ot,$e[1]*$e[2]*st[0]*st[1]/ot],[$e[1]*st[1]/ot,-$e[0]*$e[2]*st[0]*st[2]/ot],[$e[2]*st[1]*st[2]/ot,-Ge*$e[0]*$e[1]*st[0]/ot]]):[[$e[0],0],[$e[1],0],[$e[2],0]]):(st=gi(Pe,1-Ge),[[0,st[0]/st[1]],[1/st[1],0],[st[2]/st[1],0]])}function gi(Se,Pe){var Ge,$e,st,ot,pt;if(Pe<v)return ot=y(Se),$e=n(Se),Ge=Pe*(Se-ot*$e)/4,[ot-Ge*$e,$e+Ge*ot,1-Pe*ot*ot/2,Se-Ge];if(Pe>=1-v)return Ge=(1-Pe)/4,$e=L(Se),ot=z(Se),st=1/$e,pt=$e*I(Se),[ot+Ge*(pt-Se)/($e*$e),st-Ge*ot*st*(pt-Se),st+Ge*ot*st*(pt+Se),2*s(u(Se))-M+Ge*(pt-Se)/$e];var Vt=[1,0,0,0,0,0,0,0,0],tr=[P(Pe),0,0,0,0,0,0,0,0],Ut=0;for($e=P(1-Pe),pt=1;o(tr[Ut]/Vt[Ut])>v&&Ut<8;)Ge=Vt[Ut++],tr[Ut]=(Ge-$e)/2,Vt[Ut]=(Ge+$e)/2,$e=P(Ge*$e),pt*=2;st=pt*Vt[Ut]*Se;do ot=tr[Ut]*y($e=st)/Vt[Ut],st=(D(ot)+st)/2;while(--Ut);return[y(st),ot=n(st),ot/n(st-$e),st]}function ba(Se,Pe,Ge){var $e=o(Se),st=o(Pe),ot=I(st);if($e){var pt=1/y($e),Vt=1/(_($e)*_($e)),tr=-(Vt+Ge*(ot*ot*pt*pt)-1+Ge),Ut=(Ge-1)*Vt,rr=(-tr+P(tr*tr-4*Ut))/2;return[Hi(s(1/P(rr)),Ge)*m(Se),Hi(s(P((rr/Vt-1)/Ge)),1-Ge)*m(Pe)]}return[0,Hi(s(ot),1-Ge)*m(Pe)]}function Hi(Se,Pe){if(!Pe)return Se;if(Pe===1)return f(_(Se/2+C));for(var Ge=1,$e=P(1-Pe),st=P(Pe),ot=0;o(st)>v;ot++){if(Se%S){var pt=s($e*_(Se)/Ge);pt<0&&(pt+=S),Se+=pt+~~(Se/S)*S}else Se+=Se;st=(Ge+$e)/2,$e=P(Ge*$e),st=((Ge=st)-$e)/2}return Se/(p(2,ot)*Ge)}function Za(Se,Pe){var Ge=(k-1)/(k+1),$e=P(1-Ge*Ge),st=Hi(M,$e*$e),ot=-1,pt=f(_(S/4+o(Pe)/2)),Vt=u(ot*pt)/P(Ge),tr=oa(Vt*n(ot*Se),Vt*y(ot*Se)),Ut=ba(tr[0],tr[1],$e*$e);return[-Ut[1],(Pe>=0?1:-1)*(.5*st-Ut[0])]}function oa(Se,Pe){var Ge=Se*Se,$e=Pe+1,st=1-Ge-Pe*Pe;return[.5*((Se>=0?M:-M)-l(st,2*Se)),-.25*f(st*st+4*Ge)+.5*f($e*$e+Ge)]}function Cn(Se,Pe){var Ge=Pe[0]*Pe[0]+Pe[1]*Pe[1];return[(Se[0]*Pe[0]+Se[1]*Pe[1])/Ge,(Se[1]*Pe[0]-Se[0]*Pe[1])/Ge]}Za.invert=function(Se,Pe){var Ge=(k-1)/(k+1),$e=P(1-Ge*Ge),st=Hi(M,$e*$e),ot=-1,pt=Mi(.5*st-Pe,-Se,$e*$e),Vt=Cn(pt[0],pt[1]),tr=l(Vt[1],Vt[0])/ot;return[tr,2*s(u(.5/ot*f(Ge*Vt[0]*Vt[0]+Ge*Vt[1]*Vt[1])))-M]};function _n(){return i.geoProjection(Zt(Za)).scale(151.496)}function Li(Se){var Pe=y(Se),Ge=n(Se),$e=In(Se);$e.invert=In(-Se);function st(ot,pt){var Vt=$e(ot,pt);ot=Vt[0],pt=Vt[1];var tr=y(pt),Ut=n(pt),rr=n(ot),pr=R(Pe*tr+Ge*Ut*rr),Sr=y(pr),Rr=o(Sr)>v?pr/Sr:1;return[Rr*Ge*y(ot),(o(ot)>M?Rr:-Rr)*(Pe*Ut-Ge*tr*rr)]}return st.invert=function(ot,pt){var Vt=P(ot*ot+pt*pt),tr=-y(Vt),Ut=n(Vt),rr=Vt*Ut,pr=-pt*tr,Sr=Vt*Pe,Rr=P(rr*rr+pr*pr-Sr*Sr),Zr=l(rr*Sr+pr*Rr,pr*Sr-rr*Rr),wi=(Vt>M?-1:1)*l(ot*tr,Vt*n(Zr)*Ut+pt*y(Zr)*tr);return $e.invert(wi,Zr)},st}function In(Se){var Pe=y(Se),Ge=n(Se);return function($e,st){var ot=n(st),pt=n($e)*ot,Vt=y($e)*ot,tr=y(st);return[l(Vt,pt*Ge-tr*Pe),D(tr*Ge+pt*Pe)]}}function pn(){var Se=0,Pe=i.geoProjectionMutator(Li),Ge=Pe(Se),$e=Ge.rotate,st=Ge.stream,ot=i.geoCircle();return Ge.parallel=function(pt){if(!arguments.length)return Se*E;var Vt=Ge.rotate();return Pe(Se=pt*T).rotate(Vt)},Ge.rotate=function(pt){return arguments.length?($e.call(Ge,[pt[0],pt[1]-Se*E]),ot.center([-pt[0],-pt[1]]),Ge):(pt=$e.call(Ge),pt[1]+=Se*E,pt)},Ge.stream=function(pt){return pt=st(pt),pt.sphere=function(){pt.polygonStart();var Vt=.01,tr=ot.radius(90-Vt)().coordinates[0],Ut=tr.length-1,rr=-1,pr;for(pt.lineStart();++rr<Ut;)pt.point((pr=tr[rr])[0],pr[1]);for(pt.lineEnd(),tr=ot.radius(90+Vt)().coordinates[0],Ut=tr.length-1,pt.lineStart();--rr>=0;)pt.point((pr=tr[rr])[0],pr[1]);pt.lineEnd(),pt.polygonEnd()},pt},Ge.scale(79.4187).parallel(45).clipAngle(180-.001)}var Ka=3,Rn=D(1-1/Ka)*E,tn=rt(0);function Mn(Se){var Pe=Rn*T,Ge=Ae(S,Pe)[0]-Ae(-S,Pe)[0],$e=tn(0,Pe)[1],st=Ae(0,Pe)[1],ot=A-st,pt=b/Se,Vt=4/b,tr=$e+ot*ot*4/b;function Ut(rr,pr){var Sr,Rr=o(pr);if(Rr>Pe){var Zr=d(Se-1,h(0,c((rr+S)/pt)));rr+=S*(Se-1)/Se-Zr*pt,Sr=Ae(rr,Rr),Sr[0]=Sr[0]*b/Ge-b*(Se-1)/(2*Se)+Zr*b/Se,Sr[1]=$e+(Sr[1]-st)*4*ot/b,pr<0&&(Sr[1]=-Sr[1])}else Sr=tn(rr,pr);return Sr[0]*=Vt,Sr[1]/=tr,Sr}return Ut.invert=function(rr,pr){rr/=Vt,pr*=tr;var Sr=o(pr);if(Sr>$e){var Rr=d(Se-1,h(0,c((rr+S)/pt)));rr=(rr+S*(Se-1)/Se-Rr*pt)*Ge/b;var Zr=Ae.invert(rr,.25*(Sr-$e)*b/ot+st);return Zr[0]-=S*(Se-1)/Se-Rr*pt,pr<0&&(Zr[1]=-Zr[1]),Zr}return tn.invert(rr,pr)},Ut}function Kn(Se,Pe){return[Se,Pe&1?90-v:Rn]}function zn(Se,Pe){return[Se,Pe&1?-90+v:-Rn]}function ua(Se){return[Se[0]*(1-v),Se[1]]}function Ea(Se){var Pe=[].concat(a.range(-180,180+Se/2,Se).map(Kn),a.range(180,-180-Se/2,-Se).map(zn));return{type:"Polygon",coordinates:[Se===180?Pe.map(ua):Pe]}}function ln(){var Se=4,Pe=i.geoProjectionMutator(Mn),Ge=Pe(Se),$e=Ge.stream;return Ge.lobes=function(st){return arguments.length?Pe(Se=+st):Se},Ge.stream=function(st){var ot=Ge.rotate(),pt=$e(st),Vt=(Ge.rotate([0,0]),$e(st));return Ge.rotate(ot),pt.sphere=function(){i.geoStream(Ea(180/Se),Vt)},pt},Ge.scale(239.75)}function on(Se){var Pe=1+Se,Ge=y(1/Pe),$e=D(Ge),st=2*P(S/(ot=S+4*$e*Pe)),ot,pt=.5*st*(Pe+P(Se*(2+Se))),Vt=Se*Se,tr=Pe*Pe;function Ut(rr,pr){var Sr=1-y(pr),Rr,Zr;if(Sr&&Sr<2){var wi=M-pr,qi=25,Aa;do{var un=y(wi),gn=n(wi),Tn=$e+l(un,Pe-gn),Pn=1+tr-2*Pe*gn;wi-=Aa=(wi-Vt*$e-Pe*un+Pn*Tn-.5*Sr*ot)/(2*Pe*un*Tn)}while(o(Aa)>x&&--qi>0);Rr=st*P(Pn),Zr=rr*Tn/S}else Rr=st*(Se+Sr),Zr=rr*$e/S;return[Rr*y(Zr),pt-Rr*n(Zr)]}return Ut.invert=function(rr,pr){var Sr=rr*rr+(pr-=pt)*pr,Rr=(1+tr-Sr/(st*st))/(2*Pe),Zr=R(Rr),wi=y(Zr),qi=$e+l(wi,Pe-Rr);return[D(rr/P(Sr))*S/qi,D(1-2*(Zr-Vt*$e-Pe*wi+(1+tr-2*Pe*Rr)*qi)/ot)]},Ut}function ao(){var Se=1,Pe=i.geoProjectionMutator(on),Ge=Pe(Se);return Ge.ratio=function($e){return arguments.length?Pe(Se=+$e):Se},Ge.scale(167.774).center([0,18.67])}var ho=.7109889596207567,Jn=.0528035274542;function lo(Se,Pe){return Pe>-ho?(Se=ae(Se,Pe),Se[1]+=Jn,Se):Te(Se,Pe)}lo.invert=function(Se,Pe){return Pe>-ho?ae.invert(Se,Pe-Jn):Te.invert(Se,Pe)};function Fo(){return i.geoProjection(lo).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}function uo(Se,Pe){return o(Pe)>ho?(Se=ae(Se,Pe),Se[1]-=Pe>0?Jn:-Jn,Se):Te(Se,Pe)}uo.invert=function(Se,Pe){return o(Pe)>ho?ae.invert(Se,Pe+(Pe>0?Jn:-Jn)):Te.invert(Se,Pe)};function Qn(){return i.geoProjection(uo).scale(152.63)}function jo(Se,Pe,Ge,$e){var st=P(4*S/(2*Ge+(1+Se-Pe/2)*y(2*Ge)+(Se+Pe)/2*y(4*Ge)+Pe/2*y(6*Ge))),ot=P($e*y(Ge)*P((1+Se*n(2*Ge)+Pe*n(4*Ge))/(1+Se+Pe))),pt=Ge*tr(1);function Vt(pr){return P(1+Se*n(2*pr)+Pe*n(4*pr))}function tr(pr){var Sr=pr*Ge;return(2*Sr+(1+Se-Pe/2)*y(2*Sr)+(Se+Pe)/2*y(4*Sr)+Pe/2*y(6*Sr))/Ge}function Ut(pr){return Vt(pr)*y(pr)}var rr=function(pr,Sr){var Rr=Ge*le(tr,pt*y(Sr)/Ge,Sr/S);isNaN(Rr)&&(Rr=Ge*m(Sr));var Zr=st*Vt(Rr);return[Zr*ot*pr/S*n(Rr),Zr/ot*y(Rr)]};return rr.invert=function(pr,Sr){var Rr=le(Ut,Sr*ot/st);return[pr*S/(n(Rr)*st*ot*Vt(Rr)),D(Ge*tr(Rr/Ge)/pt)]},Ge===0&&(st=P($e/S),rr=function(pr,Sr){return[pr*st,y(Sr)/st]},rr.invert=function(pr,Sr){return[pr/st,D(Sr*st)]}),rr}function Yn(){var Se=1,Pe=0,Ge=45*T,$e=2,st=i.geoProjectionMutator(jo),ot=st(Se,Pe,Ge,$e);return ot.a=function(pt){return arguments.length?st(Se=+pt,Pe,Ge,$e):Se},ot.b=function(pt){return arguments.length?st(Se,Pe=+pt,Ge,$e):Pe},ot.psiMax=function(pt){return arguments.length?st(Se,Pe,Ge=+pt*T,$e):Ge*E},ot.ratio=function(pt){return arguments.length?st(Se,Pe,Ge,$e=+pt):$e},ot.scale(180.739)}function Bn(Se,Pe,Ge,$e,st,ot,pt,Vt,tr,Ut,rr){if(rr.nanEncountered)return NaN;var pr,Sr,Rr,Zr,wi,qi,Aa,un,gn,Tn;if(pr=Ge-Pe,Sr=Se(Pe+pr*.25),Rr=Se(Ge-pr*.25),isNaN(Sr)){rr.nanEncountered=!0;return}if(isNaN(Rr)){rr.nanEncountered=!0;return}return Zr=pr*($e+4*Sr+st)/12,wi=pr*(st+4*Rr+ot)/12,qi=Zr+wi,Tn=(qi-pt)/15,Ut>tr?(rr.maxDepthCount++,qi+Tn):Math.abs(Tn)<Vt?qi+Tn:(Aa=Pe+pr*.5,un=Bn(Se,Pe,Aa,$e,Sr,st,Zr,Vt*.5,tr,Ut+1,rr),isNaN(un)?(rr.nanEncountered=!0,NaN):(gn=Bn(Se,Aa,Ge,st,Rr,ot,wi,Vt*.5,tr,Ut+1,rr),isNaN(gn)?(rr.nanEncountered=!0,NaN):un+gn))}function ps(Se,Pe,Ge,$e,st){var ot={maxDepthCount:0,nanEncountered:!1};$e===void 0&&($e=1e-8),st===void 0&&(st=20);var pt=Se(Pe),Vt=Se(.5*(Pe+Ge)),tr=Se(Ge),Ut=(pt+4*Vt+tr)*(Ge-Pe)/6,rr=Bn(Se,Pe,Ge,pt,Vt,tr,Ut,$e,st,1,ot);return rr}function xo(Se,Pe,Ge){function $e(Rr){return Se+(1-Se)*p(1-p(Rr,Pe),1/Pe)}function st(Rr){return ps($e,0,Rr,1e-4)}for(var ot=1/st(1),pt=1e3,Vt=(1+1e-8)*ot,tr=[],Ut=0;Ut<=pt;Ut++)tr.push(st(Ut/pt)*Vt);function rr(Rr){var Zr=0,wi=pt,qi=pt>>1;do tr[qi]>Rr?wi=qi:Zr=qi,qi=Zr+wi>>1;while(qi>Zr);var Aa=tr[qi+1]-tr[qi];return Aa&&(Aa=(Rr-tr[qi+1])/Aa),(qi+1+Aa)/pt}var pr=2*rr(1)/S*ot/Ge,Sr=function(Rr,Zr){var wi=rr(o(y(Zr))),qi=$e(wi)*Rr;return wi/=pr,[qi,Zr>=0?wi:-wi]};return Sr.invert=function(Rr,Zr){var wi;return Zr*=pr,o(Zr)<1&&(wi=m(Zr)*D(st(o(Zr))*ot)),[Rr/$e(o(Zr)),wi]},Sr}function no(){var Se=0,Pe=2.5,Ge=1.183136,$e=i.geoProjectionMutator(xo),st=$e(Se,Pe,Ge);return st.alpha=function(ot){return arguments.length?$e(Se=+ot,Pe,Ge):Se},st.k=function(ot){return arguments.length?$e(Se,Pe=+ot,Ge):Pe},st.gamma=function(ot){return arguments.length?$e(Se,Pe,Ge=+ot):Ge},st.scale(152.63)}function Mo(Se,Pe){return o(Se[0]-Pe[0])<v&&o(Se[1]-Pe[1])<v}function Vn(Se,Pe){for(var Ge=-1,$e=Se.length,st=Se[0],ot,pt,Vt,tr=[];++Ge<$e;){ot=Se[Ge],pt=(ot[0]-st[0])/Pe,Vt=(ot[1]-st[1])/Pe;for(var Ut=0;Ut<Pe;++Ut)tr.push([st[0]+Ut*pt,st[1]+Ut*Vt]);st=ot}return tr.push(ot),tr}function ts(Se){var Pe=[],Ge,$e,st,ot,pt,Vt,tr,Ut=Se[0].length;for(tr=0;tr<Ut;++tr)Ge=Se[0][tr],$e=Ge[0][0],st=Ge[0][1],ot=Ge[1][1],pt=Ge[2][0],Vt=Ge[2][1],Pe.push(Vn([[$e+v,st+v],[$e+v,ot-v],[pt-v,ot-v],[pt-v,Vt+v]],30));for(tr=Se[1].length-1;tr>=0;--tr)Ge=Se[1][tr],$e=Ge[0][0],st=Ge[0][1],ot=Ge[1][1],pt=Ge[2][0],Vt=Ge[2][1],Pe.push(Vn([[pt-v,Vt-v],[pt-v,ot+v],[$e+v,ot+v],[$e+v,st-v]],30));return{type:"Polygon",coordinates:[a.merge(Pe)]}}function ws(Se,Pe,Ge){var $e,st;function ot(tr,Ut){for(var rr=Ut<0?-1:1,pr=Pe[+(Ut<0)],Sr=0,Rr=pr.length-1;Sr<Rr&&tr>pr[Sr][2][0];++Sr);var Zr=Se(tr-pr[Sr][1][0],Ut);return Zr[0]+=Se(pr[Sr][1][0],rr*Ut>rr*pr[Sr][0][1]?pr[Sr][0][1]:Ut)[0],Zr}Ge?ot.invert=Ge(ot):Se.invert&&(ot.invert=function(tr,Ut){for(var rr=st[+(Ut<0)],pr=Pe[+(Ut<0)],Sr=0,Rr=rr.length;Sr<Rr;++Sr){var Zr=rr[Sr];if(Zr[0][0]<=tr&&tr<Zr[1][0]&&Zr[0][1]<=Ut&&Ut<Zr[1][1]){var wi=Se.invert(tr-Se(pr[Sr][1][0],0)[0],Ut);return wi[0]+=pr[Sr][1][0],Mo(ot(wi[0],wi[1]),[tr,Ut])?wi:null}}});var pt=i.geoProjection(ot),Vt=pt.stream;return pt.stream=function(tr){var Ut=pt.rotate(),rr=Vt(tr),pr=(pt.rotate([0,0]),Vt(tr));return pt.rotate(Ut),rr.sphere=function(){i.geoStream($e,pr)},rr},pt.lobes=function(tr){return arguments.length?($e=ts(tr),Pe=tr.map(function(Ut){return Ut.map(function(rr){return[[rr[0][0]*T,rr[0][1]*T],[rr[1][0]*T,rr[1][1]*T],[rr[2][0]*T,rr[2][1]*T]]})}),st=Pe.map(function(Ut){return Ut.map(function(rr){var pr=Se(rr[0][0],rr[0][1])[0],Sr=Se(rr[2][0],rr[2][1])[0],Rr=Se(rr[1][0],rr[0][1])[1],Zr=Se(rr[1][0],rr[1][1])[1],wi;return Rr>Zr&&(wi=Rr,Rr=Zr,Zr=wi),[[pr,Rr],[Sr,Zr]]})}),pt):Pe.map(function(Ut){return Ut.map(function(rr){return[[rr[0][0]*E,rr[0][1]*E],[rr[1][0]*E,rr[1][1]*E],[rr[2][0]*E,rr[2][1]*E]]})})},Pe!=null&&pt.lobes(Pe),pt}var So=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function nl(){return ws(ue,So).scale(160.857)}var vs=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function go(){return ws(uo,vs).scale(152.63)}var Xn=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];function On(){return ws(ae,Xn).scale(169.529)}var Uo=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function kl(){return ws(ae,Uo).scale(169.529).rotate([20,0])}var mu=[[[[-180,35],[-30,90],[0,35]],[[0,35],[30,90],[180,35]]],[[[-180,-10],[-102,-90],[-65,-10]],[[-65,-10],[5,-90],[77,-10]],[[77,-10],[103,-90],[180,-10]]]];function Ul(){return ws(lo,mu,ce).rotate([-20,-55]).scale(164.263).center([0,-5.4036])}var gu=[[[[-180,0],[-110,90],[-40,0]],[[-40,0],[0,90],[40,0]],[[40,0],[110,90],[180,0]]],[[[-180,0],[-110,-90],[-40,0]],[[-40,0],[0,-90],[40,0]],[[40,0],[110,-90],[180,0]]]];function yu(){return ws(Te,gu).scale(152.63).rotate([-20,0])}function Fu(Se,Pe){return[3/b*Se*P(S*S/3-Pe*Pe),Pe]}Fu.invert=function(Se,Pe){return[b/3*Se/P(S*S/3-Pe*Pe),Pe]};function au(){return i.geoProjection(Fu).scale(158.837)}function xc(Se){function Pe(Ge,$e){if(o(o($e)-M)<v)return[0,$e<0?-2:2];var st=y($e),ot=p((1+st)/(1-st),Se/2),pt=.5*(ot+1/ot)+n(Ge*=Se);return[2*y(Ge)/pt,(ot-1/ot)/pt]}return Pe.invert=function(Ge,$e){var st=o($e);if(o(st-2)<v)return Ge?null:[0,m($e)*M];if(st>2)return null;Ge/=2,$e/=2;var ot=Ge*Ge,pt=$e*$e,Vt=2*$e/(1+ot+pt);return Vt=p((1+Vt)/(1-Vt),1/Se),[l(2*Ge,1-ot-pt)/Se,D((Vt-1)/(Vt+1))]},Pe}function Pu(){var Se=.5,Pe=i.geoProjectionMutator(xc),Ge=Pe(Se);return Ge.spacing=function($e){return arguments.length?Pe(Se=+$e):Se},Ge.scale(124.75)}var Cl=S/k;function bc(Se,Pe){return[Se*(1+P(n(Pe)))/2,Pe/(n(Pe/2)*n(Se/6))]}bc.invert=function(Se,Pe){var Ge=o(Se),$e=o(Pe),st=v,ot=M;$e<Cl?ot*=$e/Cl:st+=6*R(Cl/$e);for(var pt=0;pt<25;pt++){var Vt=y(ot),tr=P(n(ot)),Ut=y(ot/2),rr=n(ot/2),pr=y(st/6),Sr=n(st/6),Rr=.5*st*(1+tr)-Ge,Zr=ot/(rr*Sr)-$e,wi=tr?-.25*st*Vt/tr:0,qi=.5*(1+tr),Aa=(1+.5*ot*Ut/rr)/(rr*Sr),un=ot/rr*(pr/6)/(Sr*Sr),gn=wi*un-Aa*qi,Tn=(Rr*un-Zr*qi)/gn,Pn=(Zr*wi-Rr*Aa)/gn;if(ot-=Tn,st-=Pn,o(Tn)<v&&o(Pn)<v)break}return[Se<0?-st:st,Pe<0?-ot:ot]};function Iu(){return i.geoProjection(bc).scale(97.2672)}function _l(Se,Pe){var Ge=Se*Se,$e=Pe*Pe;return[Se*(.975534+$e*(-.119161+Ge*-.0143059+$e*-.0547009)),Pe*(1.00384+Ge*(.0802894+$e*-.02855+Ge*199025e-9)+$e*(.0998909+$e*-.0491032))]}_l.invert=function(Se,Pe){var Ge=m(Se)*S,$e=Pe/2,st=50;do{var ot=Ge*Ge,pt=$e*$e,Vt=Ge*$e,tr=Ge*(.975534+pt*(-.119161+ot*-.0143059+pt*-.0547009))-Se,Ut=$e*(1.00384+ot*(.0802894+pt*-.02855+ot*199025e-9)+pt*(.0998909+pt*-.0491032))-Pe,rr=.975534-pt*(.119161+3*ot*.0143059+pt*.0547009),pr=-Vt*(2*.119161+4*.0547009*pt+2*.0143059*ot),Sr=Vt*(2*.0802894+4*199025e-9*ot+2*-.02855*pt),Rr=1.00384+ot*(.0802894+199025e-9*ot)+pt*(3*(.0998909-.02855*ot)-5*.0491032*pt),Zr=pr*Sr-Rr*rr,wi=(Ut*pr-tr*Rr)/Zr,qi=(tr*Sr-Ut*rr)/Zr;Ge-=wi,$e-=qi}while((o(wi)>v||o(qi)>v)&&--st>0);return st&&[Ge,$e]};function ms(){return i.geoProjection(_l).scale(139.98)}function ss(Se,Pe){return[y(Se)/n(Pe),_(Pe)*n(Se)]}ss.invert=function(Se,Pe){var Ge=Se*Se,$e=Pe*Pe,st=$e+1,ot=Ge+st,pt=Se?w*P((ot-P(ot*ot-4*Ge))/Ge):1/P(st);return[D(Se*pt),m(Pe)*R(pt)]};function fl(){return i.geoProjection(ss).scale(144.049).clipAngle(90-.001)}function wc(Se){var Pe=n(Se),Ge=_(C+Se/2);function $e(st,ot){var pt=ot-Se,Vt=o(pt)<v?st*Pe:o(Vt=C+ot/2)<v||o(o(Vt)-M)<v?0:st*pt/f(_(Vt)/Ge);return[Vt,pt]}return $e.invert=function(st,ot){var pt,Vt=ot+Se;return[o(ot)<v?st/Pe:o(pt=C+Vt/2)<v||o(o(pt)-M)<v?0:st*f(_(pt)/Ge)/ot,Vt]},$e}function Tc(){return Me(wc).parallel(40).scale(158.837)}function tc(Se,Pe){return[Se,1.25*f(_(C+.4*Pe))]}tc.invert=function(Se,Pe){return[Se,2.5*s(u(.8*Pe))-.625*S]};function wh(){return i.geoProjection(tc).scale(108.318)}function Th(Se){var Pe=Se.length-1;function Ge($e,st){for(var ot=n(st),pt=2/(1+ot*n($e)),Vt=pt*ot*y($e),tr=pt*y(st),Ut=Pe,rr=Se[Ut],pr=rr[0],Sr=rr[1],Rr;--Ut>=0;)rr=Se[Ut],pr=rr[0]+Vt*(Rr=pr)-tr*Sr,Sr=rr[1]+Vt*Sr+tr*Rr;return pr=Vt*(Rr=pr)-tr*Sr,Sr=Vt*Sr+tr*Rr,[pr,Sr]}return Ge.invert=function($e,st){var ot=20,pt=$e,Vt=st;do{for(var tr=Pe,Ut=Se[tr],rr=Ut[0],pr=Ut[1],Sr=0,Rr=0,Zr;--tr>=0;)Ut=Se[tr],Sr=rr+pt*(Zr=Sr)-Vt*Rr,Rr=pr+pt*Rr+Vt*Zr,rr=Ut[0]+pt*(Zr=rr)-Vt*pr,pr=Ut[1]+pt*pr+Vt*Zr;Sr=rr+pt*(Zr=Sr)-Vt*Rr,Rr=pr+pt*Rr+Vt*Zr,rr=pt*(Zr=rr)-Vt*pr-$e,pr=pt*pr+Vt*Zr-st;var wi=Sr*Sr+Rr*Rr,qi,Aa;pt-=qi=(rr*Sr+pr*Rr)/wi,Vt-=Aa=(pr*Sr-rr*Rr)/wi}while(o(qi)+o(Aa)>v*v&&--ot>0);if(ot){var un=P(pt*pt+Vt*Vt),gn=2*s(un*.5),Tn=y(gn);return[l(pt*Tn,un*n(gn)),un?D(Vt*Tn/un):0]}},Ge}var Rd=[[.9972523,0],[.0052513,-.0041175],[.0074606,.0048125],[-.0153783,-.1968253],[.0636871,-.1408027],[.3660976,-.2937382]],fp=[[.98879,0],[0,0],[-.050909,0],[0,0],[.075528,0]],Ru=[[.984299,0],[.0211642,.0037608],[-.1036018,-.0575102],[-.0329095,-.0320119],[.0499471,.1223335],[.026046,.0899805],[7388e-7,-.1435792],[.0075848,-.1334108],[-.0216473,.0776645],[-.0225161,.0853673]],Ts=[[.9245,0],[0,0],[.01943,0]],Ah=[[.721316,0],[0,0],[-.00881625,-.00617325]];function vf(){return zu(Rd,[152,-64]).scale(1400).center([-160.908,62.4864]).clipAngle(30).angle(7.8)}function Ac(){return zu(fp,[95,-38]).scale(1e3).clipAngle(55).center([-96.5563,38.8675])}function Mh(){return zu(Ru,[120,-45]).scale(359.513).clipAngle(55).center([-117.474,53.0628])}function Mc(){return zu(Ts,[-20,-18]).scale(209.091).center([20,16.7214]).clipAngle(82)}function $c(){return zu(Ah,[165,10]).scale(250).clipAngle(130).center([-165,-10])}function zu(Se,Pe){var Ge=i.geoProjection(Th(Se)).rotate(Pe).clipAngle(90),$e=i.geoRotation(Pe),st=Ge.center;return delete Ge.rotate,Ge.center=function(ot){return arguments.length?st($e(ot)):$e.invert(st())},Ge}var mf=P(6),jf=P(7);function Sc(Se,Pe){var Ge=D(7*y(Pe)/(3*mf));return[mf*Se*(2*n(2*Ge/3)-1)/jf,9*y(Ge/3)/jf]}Sc.invert=function(Se,Pe){var Ge=3*D(Pe*jf/9);return[Se*jf/(mf*(2*n(2*Ge/3)-1)),D(y(Ge)*3*mf/7)]};function id(){return i.geoProjection(Sc).scale(164.859)}function Uf(Se,Pe){for(var Ge=(1+w)*y(Pe),$e=Pe,st=0,ot;st<25&&($e-=ot=(y($e/2)+y($e)-Ge)/(.5*n($e/2)+n($e)),!(o(ot)<v));st++);return[Se*(1+2*n($e)/n($e/2))/(3*k),2*P(3)*y($e/2)/P(2+k)]}Uf.invert=function(Se,Pe){var Ge=Pe*P(2+k)/(2*P(3)),$e=2*D(Ge);return[3*k*Se/(1+2*n($e)/n($e/2)),D((Ge+y($e))/(1+w))]};function zd(){return i.geoProjection(Uf).scale(188.209)}function Bu(Se,Pe){for(var Ge=P(6/(4+S)),$e=(1+S/4)*y(Pe),st=Pe/2,ot=0,pt;ot<25&&(st-=pt=(st/2+y(st)-$e)/(.5+n(st)),!(o(pt)<v));ot++);return[Ge*(.5+n(st))*Se/1.5,Ge*st]}Bu.invert=function(Se,Pe){var Ge=P(6/(4+S)),$e=Pe/Ge;return o(o($e)-M)<v&&($e=$e<0?-M:M),[1.5*Se/(Ge*(.5+n($e))),D(($e/2+y($e))/(1+S/4))]};function Sh(){return i.geoProjection(Bu).scale(166.518)}function _u(Se,Pe){var Ge=Pe*Pe,$e=Ge*Ge,st=Ge*$e;return[Se*(.84719-.13063*Ge+st*st*(-.04515+.05494*Ge-.02326*$e+.00331*st)),Pe*(1.01183+$e*$e*(-.02625+.01926*Ge-.00396*$e))]}_u.invert=function(Se,Pe){var Ge=Pe,$e=25,st,ot,pt,Vt;do ot=Ge*Ge,pt=ot*ot,Ge-=st=(Ge*(1.01183+pt*pt*(-.02625+.01926*ot-.00396*pt))-Pe)/(1.01183+pt*pt*(9*-.02625+11*.01926*ot+13*-.00396*pt));while(o(st)>x&&--$e>0);return ot=Ge*Ge,pt=ot*ot,Vt=ot*pt,[Se/(.84719-.13063*ot+Vt*Vt*(-.04515+.05494*ot-.02326*pt+.00331*Vt)),Ge]};function qf(){return i.geoProjection(_u).scale(175.295)}function Dl(Se,Pe){return[Se*(1+n(Pe))/2,2*(Pe-_(Pe/2))]}Dl.invert=function(Se,Pe){for(var Ge=Pe/2,$e=0,st=1/0;$e<10&&o(st)>v;++$e){var ot=n(Pe/2);Pe-=st=(Pe-_(Pe/2)-Ge)/(1-.5/(ot*ot))}return[2*Se/(1+n(Pe)),Pe]};function gf(){return i.geoProjection(Dl).scale(152.63)}var Ou=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function yf(){return ws(te(1/0),Ou).rotate([20,0]).scale(152.63)}function _f(Se,Pe){var Ge=y(Pe),$e=n(Pe),st=m(Se);if(Se===0||o(Pe)===M)return[0,Pe];if(Pe===0)return[Se,0];if(o(Se)===M)return[Se*$e,M*Ge];var ot=S/(2*Se)-2*Se/S,pt=2*Pe/S,Vt=(1-pt*pt)/(Ge-pt),tr=ot*ot,Ut=Vt*Vt,rr=1+tr/Ut,pr=1+Ut/tr,Sr=(ot*Ge/Vt-ot/2)/rr,Rr=(Ut*Ge/tr+Vt/2)/pr,Zr=Sr*Sr+$e*$e/rr,wi=Rr*Rr-(Ut*Ge*Ge/tr+Vt*Ge-1)/pr;return[M*(Sr+P(Zr)*st),M*(Rr+P(wi<0?0:wi)*m(-Pe*ot)*st)]}_f.invert=function(Se,Pe){Se/=M,Pe/=M;var Ge=Se*Se,$e=Pe*Pe,st=Ge+$e,ot=S*S;return[Se?(st-1+P((1-st)*(1-st)+4*Ge))/(2*Se)*M:0,le(function(pt){return st*(S*y(pt)-2*pt)*S+4*pt*pt*(Pe-y(pt))+2*S*pt-ot*Pe},0)]};function Vf(){return i.geoProjection(_f).scale(127.267)}var Eh=1.0148,Ec=.23185,kh=-.14499,rc=.02406,Bd=Eh,xl=5*Ec,xu=7*kh,kc=9*rc,hl=1.790857183;function Gf(Se,Pe){var Ge=Pe*Pe;return[Se,Pe*(Eh+Ge*Ge*(Ec+Ge*(kh+rc*Ge)))]}Gf.invert=function(Se,Pe){Pe>hl?Pe=hl:Pe<-hl&&(Pe=-hl);var Ge=Pe,$e;do{var st=Ge*Ge;Ge-=$e=(Ge*(Eh+st*st*(Ec+st*(kh+rc*st)))-Pe)/(Bd+st*st*(xl+st*(xu+kc*st)))}while(o($e)>v);return[Se,Ge]};function Nu(){return i.geoProjection(Gf).scale(139.319)}function Cc(Se,Pe){if(o(Pe)<v)return[Se,0];var Ge=_(Pe),$e=Se*y(Pe);return[y($e)/Ge,Pe+(1-n($e))/Ge]}Cc.invert=function(Se,Pe){if(o(Pe)<v)return[Se,0];var Ge=Se*Se+Pe*Pe,$e=Pe*.5,st=10,ot;do{var pt=_($e),Vt=1/n($e),tr=Ge-2*Pe*$e+$e*$e;$e-=ot=(pt*tr+2*($e-Pe))/(2+tr*Vt*Vt+2*($e-Pe)*pt)}while(o(ot)>v&&--st>0);return pt=_($e),[(o(Pe)<o($e+1/pt)?D(Se*pt):m(Pe)*m(Se)*(R(o(Se*pt))+M))/y($e),$e]};function Hf(){return i.geoProjection(Cc).scale(103.74)}function Od(Se,Pe){var Ge=ql(Se[1],Se[0]),$e=ql(Pe[1],Pe[0]),st=Nd(Ge,$e),ot=Vl(Ge)/Vl($e);return ju([1,0,Se[0][0],0,1,Se[0][1]],ju([ot,0,0,0,ot,0],ju([n(st),y(st),0,-y(st),n(st),0],[1,0,-Pe[0][0],0,1,-Pe[0][1]])))}function ad(Se){var Pe=1/(Se[0]*Se[4]-Se[1]*Se[3]);return[Pe*Se[4],-Pe*Se[1],Pe*(Se[1]*Se[5]-Se[2]*Se[4]),-Pe*Se[3],Pe*Se[0],Pe*(Se[2]*Se[3]-Se[0]*Se[5])]}function ju(Se,Pe){return[Se[0]*Pe[0]+Se[1]*Pe[3],Se[0]*Pe[1]+Se[1]*Pe[4],Se[0]*Pe[2]+Se[1]*Pe[5]+Se[2],Se[3]*Pe[0]+Se[4]*Pe[3],Se[3]*Pe[1]+Se[4]*Pe[4],Se[3]*Pe[2]+Se[4]*Pe[5]+Se[5]]}function ql(Se,Pe){return[Se[0]-Pe[0],Se[1]-Pe[1]]}function Vl(Se){return P(Se[0]*Se[0]+Se[1]*Se[1])}function Nd(Se,Pe){return l(Se[0]*Pe[1]-Se[1]*Pe[0],Se[0]*Pe[0]+Se[1]*Pe[1])}function xf(Se,Pe,Ge){$e(Se,{transform:null});function $e(Ut,rr){if(Ut.edges=$f(Ut.face),rr.face){var pr=Ut.shared=Wc(Ut.face,rr.face),Sr=Od(pr.map(rr.project),pr.map(Ut.project));Ut.transform=rr.transform?ju(rr.transform,Sr):Sr;for(var Rr=rr.edges,Zr=0,wi=Rr.length;Zr<wi;++Zr)nu(pr[0],Rr[Zr][1])&&nu(pr[1],Rr[Zr][0])&&(Rr[Zr]=Ut),nu(pr[0],Rr[Zr][0])&&nu(pr[1],Rr[Zr][1])&&(Rr[Zr]=Ut);for(Rr=Ut.edges,Zr=0,wi=Rr.length;Zr<wi;++Zr)nu(pr[0],Rr[Zr][0])&&nu(pr[1],Rr[Zr][1])&&(Rr[Zr]=rr),nu(pr[0],Rr[Zr][1])&&nu(pr[1],Rr[Zr][0])&&(Rr[Zr]=rr)}else Ut.transform=rr.transform;return Ut.children&&Ut.children.forEach(function(qi){$e(qi,Ut)}),Ut}function st(Ut,rr){var pr=Pe(Ut,rr),Sr=pr.project([Ut*E,rr*E]),Rr;return(Rr=pr.transform)?[Rr[0]*Sr[0]+Rr[1]*Sr[1]+Rr[2],-(Rr[3]*Sr[0]+Rr[4]*Sr[1]+Rr[5])]:(Sr[1]=-Sr[1],Sr)}bf(Se)&&(st.invert=function(Ut,rr){var pr=ot(Se,[Ut,-rr]);return pr&&(pr[0]*=T,pr[1]*=T,pr)});function ot(Ut,rr){var pr=Ut.project.invert,Sr=Ut.transform,Rr=rr;if(Sr&&(Sr=ad(Sr),Rr=[Sr[0]*Rr[0]+Sr[1]*Rr[1]+Sr[2],Sr[3]*Rr[0]+Sr[4]*Rr[1]+Sr[5]]),pr&&Ut===pt(Zr=pr(Rr)))return Zr;for(var Zr,wi=Ut.children,qi=0,Aa=wi&&wi.length;qi<Aa;++qi)if(Zr=ot(wi[qi],rr))return Zr}function pt(Ut){return Pe(Ut[0]*T,Ut[1]*T)}var Vt=i.geoProjection(st),tr=Vt.stream;return Vt.stream=function(Ut){var rr=Vt.rotate(),pr=tr(Ut),Sr=(Vt.rotate([0,0]),tr(Ut));return Vt.rotate(rr),pr.sphere=function(){Sr.polygonStart(),Sr.lineStart(),nd(Sr,Se),Sr.lineEnd(),Sr.polygonEnd()},pr},Vt.angle(Ge==null?-30:Ge*E)}function nd(Se,Pe,Ge){var $e,st=Pe.edges,ot=st.length,pt,Vt={type:"MultiPoint",coordinates:Pe.face},tr=Pe.face.filter(function(wi){return o(wi[1])!==90}),Ut=i.geoBounds({type:"MultiPoint",coordinates:tr}),rr=!1,pr=-1,Sr=Ut[1][0]-Ut[0][0],Rr=Sr===180||Sr===360?[(Ut[0][0]+Ut[1][0])/2,(Ut[0][1]+Ut[1][1])/2]:i.geoCentroid(Vt);if(Ge)for(;++pr<ot&&st[pr]!==Ge;);++pr;for(var Zr=0;Zr<ot;++Zr)pt=st[(Zr+pr)%ot],Array.isArray(pt)?(rr||(Se.point(($e=i.geoInterpolate(pt[0],Rr)(v))[0],$e[1]),rr=!0),Se.point(($e=i.geoInterpolate(pt[1],Rr)(v))[0],$e[1])):(rr=!1,pt!==Ge&&nd(Se,pt,Pe))}function nu(Se,Pe){return Se&&Pe&&Se[0]===Pe[0]&&Se[1]===Pe[1]}function Wc(Se,Pe){for(var Ge,$e,st=Se.length,ot=null,pt=0;pt<st;++pt){Ge=Se[pt];for(var Vt=Pe.length;--Vt>=0;)if($e=Pe[Vt],Ge[0]===$e[0]&&Ge[1]===$e[1]){if(ot)return[ot,Ge];ot=Ge}}}function $f(Se){for(var Pe=Se.length,Ge=[],$e=Se[Pe-1],st=0;st<Pe;++st)Ge.push([$e,$e=Se[st]]);return Ge}function bf(Se){return Se.project.invert||Se.children&&Se.children.some(bf)}var jd=[[0,90],[-90,0],[0,0],[90,0],[180,0],[0,-90]],Yc=[[0,2,1],[0,3,2],[5,1,2],[5,2,3],[0,1,4],[0,4,3],[5,4,1],[5,3,4]].map(function(Se){return Se.map(function(Pe){return jd[Pe]})});function Dc(Se){Se=Se||function(Ge){var $e=i.geoCentroid({type:"MultiPoint",coordinates:Ge});return i.geoGnomonic().scale(1).translate([0,0]).rotate([-$e[0],-$e[1]])};var Pe=Yc.map(function(Ge){return{face:Ge,project:Se(Ge)}});return[-1,0,0,1,0,1,4,5].forEach(function(Ge,$e){var st=Pe[Ge];st&&(st.children||(st.children=[])).push(Pe[$e])}),xf(Pe[0],function(Ge,$e){return Pe[Ge<-S/2?$e<0?6:4:Ge<0?$e<0?2:0:Ge<S/2?$e<0?3:1:$e<0?7:5]}).angle(-30).scale(101.858).center([0,45])}var Lc=2/P(3);function wf(Se,Pe){var Ge=Ae(Se,Pe);return[Ge[0]*Lc,Ge[1]]}wf.invert=function(Se,Pe){return Ae.invert(Se/Lc,Pe)};function od(Se){Se=Se||function(Ge){var $e=i.geoCentroid({type:"MultiPoint",coordinates:Ge});return i.geoProjection(wf).translate([0,0]).scale(1).rotate($e[1]>0?[-$e[0],0]:[180-$e[0],180])};var Pe=Yc.map(function(Ge){return{face:Ge,project:Se(Ge)}});return[-1,0,0,1,0,1,4,5].forEach(function(Ge,$e){var st=Pe[Ge];st&&(st.children||(st.children=[])).push(Pe[$e])}),xf(Pe[0],function(Ge,$e){return Pe[Ge<-S/2?$e<0?6:4:Ge<0?$e<0?2:0:Ge<S/2?$e<0?3:1:$e<0?7:5]}).angle(-30).scale(121.906).center([0,48.5904])}function Wf(Se){Se=Se||function(pt){var Vt=pt.length===6?i.geoCentroid({type:"MultiPoint",coordinates:pt}):pt[0];return i.geoGnomonic().scale(1).translate([0,0]).rotate([-Vt[0],-Vt[1]])};var Pe=Yc.map(function(pt){for(var Vt=pt.map(ic),tr=Vt.length,Ut=Vt[tr-1],rr,pr=[],Sr=0;Sr<tr;++Sr)rr=Vt[Sr],pr.push(Zc([Ut[0]*.9486832980505138+rr[0]*.31622776601683794,Ut[1]*.9486832980505138+rr[1]*.31622776601683794,Ut[2]*.9486832980505138+rr[2]*.31622776601683794]),Zc([rr[0]*.9486832980505138+Ut[0]*.31622776601683794,rr[1]*.9486832980505138+Ut[1]*.31622776601683794,rr[2]*.9486832980505138+Ut[2]*.31622776601683794])),Ut=rr;return pr}),Ge=[],$e=[-1,0,0,1,0,1,4,5];Pe.forEach(function(pt,Vt){for(var tr=Yc[Vt],Ut=tr.length,rr=Ge[Vt]=[],pr=0;pr<Ut;++pr)Pe.push([tr[pr],pt[(pr*2+2)%(2*Ut)],pt[(pr*2+1)%(2*Ut)]]),$e.push(Vt),rr.push(Yf(ic(pt[(pr*2+2)%(2*Ut)]),ic(pt[(pr*2+1)%(2*Ut)])))});var st=Pe.map(function(pt){return{project:Se(pt),face:pt}});$e.forEach(function(pt,Vt){var tr=st[pt];tr&&(tr.children||(tr.children=[])).push(st[Vt])});function ot(pt,Vt){var tr=n(Vt),Ut=[tr*n(pt),tr*y(pt),y(Vt)],rr=pt<-S/2?Vt<0?6:4:pt<0?Vt<0?2:0:pt<S/2?Vt<0?3:1:Vt<0?7:5,pr=Ge[rr];return st[Xc(pr[0],Ut)<0?8+3*rr:Xc(pr[1],Ut)<0?8+3*rr+1:Xc(pr[2],Ut)<0?8+3*rr+2:rr]}return xf(st[0],ot).angle(-30).scale(110.625).center([0,45])}function Xc(Se,Pe){for(var Ge=0,$e=Se.length,st=0;Ge<$e;++Ge)st+=Se[Ge]*Pe[Ge];return st}function Yf(Se,Pe){return[Se[1]*Pe[2]-Se[2]*Pe[1],Se[2]*Pe[0]-Se[0]*Pe[2],Se[0]*Pe[1]-Se[1]*Pe[0]]}function Zc(Se){return[l(Se[1],Se[0])*E,D(h(-1,d(1,Se[2])))*E]}function ic(Se){var Pe=Se[0]*T,Ge=Se[1]*T,$e=n(Ge);return[$e*n(Pe),$e*y(Pe),y(Ge)]}function Tf(){}function Xf(Se){if((Ge=Se.length)<4)return!1;for(var Pe=0,Ge,$e=Se[Ge-1][1]*Se[0][0]-Se[Ge-1][0]*Se[0][1];++Pe<Ge;)$e+=Se[Pe-1][1]*Se[Pe][0]-Se[Pe-1][0]*Se[Pe][1];return $e<=0}function sd(Se,Pe){for(var Ge=Pe[0],$e=Pe[1],st=!1,ot=0,pt=Se.length,Vt=pt-1;ot<pt;Vt=ot++){var tr=Se[ot],Ut=tr[0],rr=tr[1],pr=Se[Vt],Sr=pr[0],Rr=pr[1];rr>$e^Rr>$e&&Ge<(Sr-Ut)*($e-rr)/(Rr-rr)+Ut&&(st=!st)}return st}function Ch(Se,Pe){var Ge=Pe.stream,$e;if(!Ge)throw new Error("invalid projection");switch(Se&&Se.type){case"Feature":$e=Zf;break;case"FeatureCollection":$e=Ud;break;default:$e=Dh;break}return $e(Se,Ge)}function Ud(Se,Pe){return{type:"FeatureCollection",features:Se.features.map(function(Ge){return Zf(Ge,Pe)})}}function Zf(Se,Pe){return{type:"Feature",id:Se.id,properties:Se.properties,geometry:Dh(Se.geometry,Pe)}}function ld(Se,Pe){return{type:"GeometryCollection",geometries:Se.geometries.map(function(Ge){return Dh(Ge,Pe)})}}function Dh(Se,Pe){if(!Se)return null;if(Se.type==="GeometryCollection")return ld(Se,Pe);var Ge;switch(Se.type){case"Point":Ge=Kf;break;case"MultiPoint":Ge=Kf;break;case"LineString":Ge=Lh;break;case"MultiLineString":Ge=Lh;break;case"Polygon":Ge=Jf;break;case"MultiPolygon":Ge=Jf;break;case"Sphere":Ge=Jf;break;default:return null}return i.geoStream(Se,Pe(Ge)),Ge.result()}var Js=[],ou=[],Kf={point:function(Se,Pe){Js.push([Se,Pe])},result:function(){var Se=Js.length?Js.length<2?{type:"Point",coordinates:Js[0]}:{type:"MultiPoint",coordinates:Js}:null;return Js=[],Se}},Lh={lineStart:Tf,point:function(Se,Pe){Js.push([Se,Pe])},lineEnd:function(){Js.length&&(ou.push(Js),Js=[])},result:function(){var Se=ou.length?ou.length<2?{type:"LineString",coordinates:ou[0]}:{type:"MultiLineString",coordinates:ou}:null;return ou=[],Se}},Jf={polygonStart:Tf,lineStart:Tf,point:function(Se,Pe){Js.push([Se,Pe])},lineEnd:function(){var Se=Js.length;if(Se){do Js.push(Js[0].slice());while(++Se<4);ou.push(Js),Js=[]}},polygonEnd:Tf,result:function(){if(!ou.length)return null;var Se=[],Pe=[];return ou.forEach(function(Ge){Xf(Ge)?Se.push([Ge]):Pe.push(Ge)}),Pe.forEach(function(Ge){var $e=Ge[0];Se.some(function(st){if(sd(st[0],$e))return st.push(Ge),!0})||Se.push([Ge])}),ou=[],Se.length?Se.length>1?{type:"MultiPolygon",coordinates:Se}:{type:"Polygon",coordinates:Se[0]}:null}};function Af(Se){var Pe=Se(M,0)[0]-Se(-M,0)[0];function Ge($e,st){var ot=o($e)<M,pt=Se(ot?$e:$e>0?$e-S:$e+S,st),Vt=(pt[0]-pt[1])*w,tr=(pt[0]+pt[1])*w;if(ot)return[Vt,tr];var Ut=Pe*w,rr=Vt>0^tr>0?-1:1;return[rr*Vt-m(tr)*Ut,rr*tr-m(Vt)*Ut]}return Se.invert&&(Ge.invert=function($e,st){var ot=($e+st)*w,pt=(st-$e)*w,Vt=o(ot)<.5*Pe&&o(pt)<.5*Pe;if(!Vt){var tr=Pe*w,Ut=ot>0^pt>0?-1:1,rr=-Ut*$e+(pt>0?1:-1)*tr,pr=-Ut*st+(ot>0?1:-1)*tr;ot=(-rr-pr)*w,pt=(rr-pr)*w}var Sr=Se.invert(ot,pt);return Vt||(Sr[0]+=ot>0?S:-S),Sr}),i.geoProjection(Ge).rotate([-90,-90,45]).clipAngle(180-.001)}function nt(){return Af(qt).scale(176.423)}function Tt(){return Af(Za).scale(111.48)}function Kt(Se,Pe){if(!(0<=(Pe=+Pe)&&Pe<=20))throw new Error("invalid digits");function Ge(Ut){var rr=Ut.length,pr=2,Sr=new Array(rr);for(Sr[0]=+Ut[0].toFixed(Pe),Sr[1]=+Ut[1].toFixed(Pe);pr<rr;)Sr[pr]=Ut[pr],++pr;return Sr}function $e(Ut){return Ut.map(Ge)}function st(Ut){for(var rr=Ge(Ut[0]),pr=[rr],Sr=1;Sr<Ut.length;Sr++){var Rr=Ge(Ut[Sr]);(Rr.length>2||Rr[0]!=rr[0]||Rr[1]!=rr[1])&&(pr.push(Rr),rr=Rr)}return pr.length===1&&Ut.length>1&&pr.push(Ge(Ut[Ut.length-1])),pr}function ot(Ut){return Ut.map(st)}function pt(Ut){if(Ut==null)return Ut;var rr;switch(Ut.type){case"GeometryCollection":rr={type:"GeometryCollection",geometries:Ut.geometries.map(pt)};break;case"Point":rr={type:"Point",coordinates:Ge(Ut.coordinates)};break;case"MultiPoint":rr={type:Ut.type,coordinates:$e(Ut.coordinates)};break;case"LineString":rr={type:Ut.type,coordinates:st(Ut.coordinates)};break;case"MultiLineString":case"Polygon":rr={type:Ut.type,coordinates:ot(Ut.coordinates)};break;case"MultiPolygon":rr={type:"MultiPolygon",coordinates:Ut.coordinates.map(ot)};break;default:return Ut}return Ut.bbox!=null&&(rr.bbox=Ut.bbox),rr}function Vt(Ut){var rr={type:"Feature",properties:Ut.properties,geometry:pt(Ut.geometry)};return Ut.id!=null&&(rr.id=Ut.id),Ut.bbox!=null&&(rr.bbox=Ut.bbox),rr}if(Se!=null)switch(Se.type){case"Feature":return Vt(Se);case"FeatureCollection":{var tr={type:"FeatureCollection",features:Se.features.map(Vt)};return Se.bbox!=null&&(tr.bbox=Se.bbox),tr}default:return pt(Se)}return Se}function Bt(Se){var Pe=y(Se);function Ge($e,st){var ot=Pe?_($e*Pe/2)/Pe:$e/2;if(!st)return[2*ot,-Se];var pt=2*s(ot*y(st)),Vt=1/_(st);return[y(pt)*Vt,st+(1-n(pt))*Vt-Se]}return Ge.invert=function($e,st){if(o(st+=Se)<v)return[Pe?2*s(Pe*$e/2)/Pe:$e,0];var ot=$e*$e+st*st,pt=0,Vt=10,tr;do{var Ut=_(pt),rr=1/n(pt),pr=ot-2*st*pt+pt*pt;pt-=tr=(Ut*pr+2*(pt-st))/(2+pr*rr*rr+2*(pt-st)*Ut)}while(o(tr)>v&&--Vt>0);var Sr=$e*(Ut=_(pt)),Rr=_(o(st)<o(pt+1/Ut)?D(Sr)*.5:R(Sr)*.5+S/4)/y(pt);return[Pe?2*s(Pe*Rr)/Pe:2*Rr,pt]},Ge}function yr(){return Me(Bt).scale(131.215)}var zr=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];zr.forEach(function(Se){Se[1]*=1.0144});function Gr(Se,Pe){var Ge=d(18,o(Pe)*36/S),$e=c(Ge),st=Ge-$e,ot=(pr=zr[$e])[0],pt=pr[1],Vt=(pr=zr[++$e])[0],tr=pr[1],Ut=(pr=zr[d(19,++$e)])[0],rr=pr[1],pr;return[Se*(Vt+st*(Ut-ot)/2+st*st*(Ut-2*Vt+ot)/2),(Pe>0?M:-M)*(tr+st*(rr-pt)/2+st*st*(rr-2*tr+pt)/2)]}Gr.invert=function(Se,Pe){var Ge=Pe/M,$e=Ge*90,st=d(18,o($e/5)),ot=h(0,c(st));do{var pt=zr[ot][1],Vt=zr[ot+1][1],tr=zr[d(19,ot+2)][1],Ut=tr-pt,rr=tr-2*Vt+pt,pr=2*(o(Ge)-Vt)/Ut,Sr=rr/Ut,Rr=pr*(1-Sr*pr*(1-2*Sr*pr));if(Rr>=0||ot===1){$e=(Pe>=0?5:-5)*(Rr+st);var Zr=50,wi;do st=d(18,o($e)/5),ot=c(st),Rr=st-ot,pt=zr[ot][1],Vt=zr[ot+1][1],tr=zr[d(19,ot+2)][1],$e-=(wi=(Pe>=0?M:-M)*(Vt+Rr*(tr-pt)/2+Rr*Rr*(tr-2*Vt+pt)/2)-Pe)*E;while(o(wi)>x&&--Zr>0);break}}while(--ot>=0);var qi=zr[ot][0],Aa=zr[ot+1][0],un=zr[d(19,ot+2)][0];return[Se/(Aa+Rr*(un-qi)/2+Rr*Rr*(un-2*Aa+qi)/2),$e*T]};function ii(){return i.geoProjection(Gr).scale(152.63)}function li(Se){function Pe(Ge,$e){var st=n($e),ot=(Se-1)/(Se-st*n(Ge));return[ot*st*y(Ge),ot*y($e)]}return Pe.invert=function(Ge,$e){var st=Ge*Ge+$e*$e,ot=P(st),pt=(Se-P(1-st*(Se+1)/(Se-1)))/((Se-1)/ot+ot/(Se-1));return[l(Ge*pt,ot*P(1-pt*pt)),ot?D($e*pt/ot):0]},Pe}function Fi(Se,Pe){var Ge=li(Se);if(!Pe)return Ge;var $e=n(Pe),st=y(Pe);function ot(pt,Vt){var tr=Ge(pt,Vt),Ut=tr[1],rr=Ut*st/(Se-1)+$e;return[tr[0]*$e/rr,Ut/rr]}return ot.invert=function(pt,Vt){var tr=(Se-1)/(Se-1-Vt*st);return Ge.invert(tr*pt,tr*Vt*$e)},ot}function $r(){var Se=2,Pe=0,Ge=i.geoProjectionMutator(Fi),$e=Ge(Se,Pe);return $e.distance=function(st){return arguments.length?Ge(Se=+st,Pe):Se},$e.tilt=function(st){return arguments.length?Ge(Se,Pe=st*T):Pe*E},$e.scale(432.147).clipAngle(R(1/Se)*E-1e-6)}var ni=1e-4,ui=1e4,Di=-180,Wi=Di+ni,Oa=180,Pa=Oa-ni,Ja=-90,rn=Ja+ni,Zi=90,sa=Zi-ni;function vn(Se){return Se.length>0}function Dn(Se){return Math.floor(Se*ui)/ui}function po(Se){return Se===Ja||Se===Zi?[0,Se]:[Di,Dn(Se)]}function zo(Se){var Pe=Se[0],Ge=Se[1],$e=!1;return Pe<=Wi?(Pe=Di,$e=!0):Pe>=Pa&&(Pe=Oa,$e=!0),Ge<=rn?(Ge=Ja,$e=!0):Ge>=sa&&(Ge=Zi,$e=!0),$e?[Pe,Ge]:Se}function wo(Se){return Se.map(zo)}function $o(Se,Pe,Ge){for(var $e=0,st=Se.length;$e<st;++$e){var ot=Se[$e].slice();Ge.push({index:-1,polygon:Pe,ring:ot});for(var pt=0,Vt=ot.length;pt<Vt;++pt){var tr=ot[pt],Ut=tr[0],rr=tr[1];if(Ut<=Wi||Ut>=Pa||rr<=rn||rr>=sa){ot[pt]=zo(tr);for(var pr=pt+1;pr<Vt;++pr){var Sr=ot[pr],Rr=Sr[0],Zr=Sr[1];if(Rr>Wi&&Rr<Pa&&Zr>rn&&Zr<sa)break}if(pr===pt+1)continue;if(pt){var wi={index:-1,polygon:Pe,ring:ot.slice(0,pt+1)};wi.ring[wi.ring.length-1]=po(rr),Ge[Ge.length-1]=wi}else Ge.pop();if(pr>=Vt)break;Ge.push({index:-1,polygon:Pe,ring:ot=ot.slice(pr-1)}),ot[0]=po(ot[0][1]),pt=-1,Vt=ot.length}}}}function io(Se){var Pe,Ge=Se.length,$e={},st={},ot,pt,Vt,tr,Ut;for(Pe=0;Pe<Ge;++Pe){if(ot=Se[Pe],pt=ot.ring[0],tr=ot.ring[ot.ring.length-1],pt[0]===tr[0]&&pt[1]===tr[1]){ot.polygon.push(ot.ring),Se[Pe]=null;continue}ot.index=Pe,$e[pt]=st[tr]=ot}for(Pe=0;Pe<Ge;++Pe)if(ot=Se[Pe],ot){if(pt=ot.ring[0],tr=ot.ring[ot.ring.length-1],Vt=st[pt],Ut=$e[tr],delete $e[pt],delete st[tr],pt[0]===tr[0]&&pt[1]===tr[1]){ot.polygon.push(ot.ring);continue}Vt?(delete st[pt],delete $e[Vt.ring[0]],Vt.ring.pop(),Se[Vt.index]=null,ot={index:-1,polygon:Vt.polygon,ring:Vt.ring.concat(ot.ring)},Vt===Ut?ot.polygon.push(ot.ring):(ot.index=Ge++,Se.push($e[ot.ring[0]]=st[ot.ring[ot.ring.length-1]]=ot))):Ut?(delete $e[tr],delete st[Ut.ring[Ut.ring.length-1]],ot.ring.pop(),ot={index:Ge++,polygon:Ut.polygon,ring:ot.ring.concat(Ut.ring)},Se[Ut.index]=null,Se.push($e[ot.ring[0]]=st[ot.ring[ot.ring.length-1]]=ot)):(ot.ring.push(ot.ring[0]),ot.polygon.push(ot.ring))}}function Us(Se){var Pe={type:"Feature",geometry:gs(Se.geometry)};return Se.id!=null&&(Pe.id=Se.id),Se.bbox!=null&&(Pe.bbox=Se.bbox),Se.properties!=null&&(Pe.properties=Se.properties),Pe}function gs(Se){if(Se==null)return Se;var Pe,Ge,$e,st;switch(Se.type){case"GeometryCollection":Pe={type:"GeometryCollection",geometries:Se.geometries.map(gs)};break;case"Point":Pe={type:"Point",coordinates:zo(Se.coordinates)};break;case"MultiPoint":case"LineString":Pe={type:Se.type,coordinates:wo(Se.coordinates)};break;case"MultiLineString":Pe={type:"MultiLineString",coordinates:Se.coordinates.map(wo)};break;case"Polygon":{var ot=[];$o(Se.coordinates,ot,Ge=[]),io(Ge),Pe={type:"Polygon",coordinates:ot};break}case"MultiPolygon":{Ge=[],$e=-1,st=Se.coordinates.length;for(var pt=new Array(st);++$e<st;)$o(Se.coordinates[$e],pt[$e]=[],Ge);io(Ge),Pe={type:"MultiPolygon",coordinates:pt.filter(vn)};break}default:return Se}return Se.bbox!=null&&(Pe.bbox=Se.bbox),Pe}function Go(Se){if(Se==null)return Se;switch(Se.type){case"Feature":return Us(Se);case"FeatureCollection":{var Pe={type:"FeatureCollection",features:Se.features.map(Us)};return Se.bbox!=null&&(Pe.bbox=Se.bbox),Pe}default:return gs(Se)}}function ma(Se,Pe){var Ge=_(Pe/2),$e=y(C*Ge);return[Se*(.74482-.34588*$e*$e),1.70711*Ge]}ma.invert=function(Se,Pe){var Ge=Pe/1.70711,$e=y(C*Ge);return[Se/(.74482-.34588*$e*$e),2*s(Ge)]};function vo(){return i.geoProjection(ma).scale(146.153)}function Ds(Se,Pe,Ge){var $e=i.geoInterpolate(Pe,Ge),st=$e(.5),ot=i.geoRotation([-st[0],-st[1]])(Pe),pt=$e.distance/2,Vt=-D(y(ot[1]*T)/y(pt)),tr=[-st[0],-st[1],-(ot[0]>0?S-Vt:Vt)*E],Ut=i.geoProjection(Se(pt)).rotate(tr),rr=i.geoRotation(tr),pr=Ut.center;return delete Ut.rotate,Ut.center=function(Sr){return arguments.length?pr(rr(Sr)):rr.invert(pr())},Ut.clipAngle(90)}function qs(Se){var Pe=n(Se);function Ge($e,st){var ot=i.geoGnomonicRaw($e,st);return ot[0]*=Pe,ot}return Ge.invert=function($e,st){return i.geoGnomonicRaw.invert($e/Pe,st)},Ge}function Ll(){return bu([-158,21.5],[-77,39]).clipAngle(60).scale(400)}function bu(Se,Pe){return Ds(qs,Se,Pe)}function Gl(Se){if(!(Se*=2))return i.geoAzimuthalEquidistantRaw;var Pe=-Se/2,Ge=-Pe,$e=Se*Se,st=_(Ge),ot=.5/y(Ge);function pt(Vt,tr){var Ut=R(n(tr)*n(Vt-Pe)),rr=R(n(tr)*n(Vt-Ge)),pr=tr<0?-1:1;return Ut*=Ut,rr*=rr,[(Ut-rr)/(2*Se),pr*P(4*$e*rr-($e-Ut+rr)*($e-Ut+rr))/(2*Se)]}return pt.invert=function(Vt,tr){var Ut=tr*tr,rr=n(P(Ut+(Sr=Vt+Pe)*Sr)),pr=n(P(Ut+(Sr=Vt+Ge)*Sr)),Sr,Rr;return[l(Rr=rr-pr,Sr=(rr+pr)*st),(tr<0?-1:1)*R(P(Sr*Sr+Rr*Rr)*ot)]},pt}function ac(){return bl([-158,21.5],[-77,39]).clipAngle(130).scale(122.571)}function bl(Se,Pe){return Ds(Gl,Se,Pe)}function Uu(Se,Pe){if(o(Pe)<v)return[Se,0];var Ge=o(Pe/M),$e=D(Ge);if(o(Se)<v||o(o(Pe)-M)<v)return[0,m(Pe)*S*_($e/2)];var st=n($e),ot=o(S/Se-Se/S)/2,pt=ot*ot,Vt=st/(Ge+st-1),tr=Vt*(2/Ge-1),Ut=tr*tr,rr=Ut+pt,pr=Vt-Ut,Sr=pt+Vt;return[m(Se)*S*(ot*pr+P(pt*pr*pr-rr*(Vt*Vt-Ut)))/rr,m(Pe)*S*(tr*Sr-ot*P((pt+1)*rr-Sr*Sr))/rr]}Uu.invert=function(Se,Pe){if(o(Pe)<v)return[Se,0];if(o(Se)<v)return[0,M*y(2*s(Pe/S))];var Ge=(Se/=S)*Se,$e=(Pe/=S)*Pe,st=Ge+$e,ot=st*st,pt=-o(Pe)*(1+st),Vt=pt-2*$e+Ge,tr=-2*pt+1+2*$e+ot,Ut=$e/tr+(2*Vt*Vt*Vt/(tr*tr*tr)-9*pt*Vt/(tr*tr))/27,rr=(pt-Vt*Vt/(3*tr))/tr,pr=2*P(-rr/3),Sr=R(3*Ut/(rr*pr))/3;return[S*(st-1+P(1+2*(Ge-$e)+ot))/(2*Se),m(Pe)*S*(-pr*n(Sr+S/3)-Vt/(3*tr))]};function Fc(){return i.geoProjection(Uu).scale(79.4183)}function Kc(Se,Pe){if(o(Pe)<v)return[Se,0];var Ge=o(Pe/M),$e=D(Ge);if(o(Se)<v||o(o(Pe)-M)<v)return[0,m(Pe)*S*_($e/2)];var st=n($e),ot=o(S/Se-Se/S)/2,pt=ot*ot,Vt=st*(P(1+pt)-ot*st)/(1+pt*Ge*Ge);return[m(Se)*S*Vt,m(Pe)*S*P(1-Vt*(2*ot+Vt))]}Kc.invert=function(Se,Pe){if(!Se)return[0,M*y(2*s(Pe/S))];var Ge=o(Se/S),$e=(1-Ge*Ge-(Pe/=S)*Pe)/(2*Ge),st=$e*$e,ot=P(st+1);return[m(Se)*S*(ot-$e),m(Pe)*M*y(2*l(P((1-2*$e*Ge)*($e+ot)-Ge),P(ot+$e+Ge)))]};function ud(){return i.geoProjection(Kc).scale(79.4183)}function Qf(Se,Pe){if(o(Pe)<v)return[Se,0];var Ge=Pe/M,$e=D(Ge);if(o(Se)<v||o(o(Pe)-M)<v)return[0,S*_($e/2)];var st=(S/Se-Se/S)/2,ot=Ge/(1+n($e));return[S*(m(Se)*P(st*st+1-ot*ot)-st),S*ot]}Qf.invert=function(Se,Pe){if(!Pe)return[Se,0];var Ge=Pe/S,$e=(S*S*(1-Ge*Ge)-Se*Se)/(2*S*Se);return[Se?S*(m(Se)*P($e*$e+1)-$e):0,M*y(2*s(Ge))]};function qd(){return i.geoProjection(Qf).scale(79.4183)}function Fh(Se,Pe){if(!Pe)return[Se,0];var Ge=o(Pe);if(!Se||Ge===M)return[0,Pe];var $e=Ge/M,st=$e*$e,ot=(8*$e-st*(st+2)-5)/(2*st*($e-1)),pt=ot*ot,Vt=$e*ot,tr=st+pt+2*Vt,Ut=$e+3*ot,rr=Se/M,pr=rr+1/rr,Sr=m(o(Se)-M)*P(pr*pr-4),Rr=Sr*Sr,Zr=tr*(st+pt*Rr-1)+(1-st)*(st*(Ut*Ut+4*pt)+12*Vt*pt+4*pt*pt),wi=(Sr*(tr+pt-1)+2*P(Zr))/(4*tr+Rr);return[m(Se)*M*wi,m(Pe)*M*P(1+Sr*o(wi)-wi*wi)]}Fh.invert=function(Se,Pe){var Ge;if(!Se||!Pe)return[Se,Pe];Pe/=S;var $e=m(Se)*Se/M,st=($e*$e-1+4*Pe*Pe)/o($e),ot=st*st,pt=2*Pe,Vt=50;do{var tr=pt*pt,Ut=(8*pt-tr*(tr+2)-5)/(2*tr*(pt-1)),rr=(3*pt-tr*pt-10)/(2*tr*pt),pr=Ut*Ut,Sr=pt*Ut,Rr=pt+Ut,Zr=Rr*Rr,wi=pt+3*Ut,qi=Zr*(tr+pr*ot-1)+(1-tr)*(tr*(wi*wi+4*pr)+pr*(12*Sr+4*pr)),Aa=-2*Rr*(4*Sr*pr+(1-4*tr+3*tr*tr)*(1+rr)+pr*(-6+14*tr-ot+(-8+8*tr-2*ot)*rr)+Sr*(-8+12*tr+(-10+10*tr-ot)*rr)),un=P(qi),gn=st*(Zr+pr-1)+2*un-$e*(4*Zr+ot),Tn=st*(2*Ut*rr+2*Rr*(1+rr))+Aa/un-8*Rr*(st*(-1+pr+Zr)+2*un)*(1+rr)/(ot+4*Zr);pt-=Ge=gn/Tn}while(Ge>v&&--Vt>0);return[m(Se)*(P(st*st+4)+st)*S/4,M*pt]};function Hl(){return i.geoProjection(Fh).scale(127.16)}function Vd(Se,Pe,Ge,$e,st){function ot(pt,Vt){var tr=Ge*y($e*Vt),Ut=P(1-tr*tr),rr=P(2/(1+Ut*n(pt*=st)));return[Se*Ut*rr*y(pt),Pe*tr*rr]}return ot.invert=function(pt,Vt){var tr=pt/Se,Ut=Vt/Pe,rr=P(tr*tr+Ut*Ut),pr=2*D(rr/2);return[l(pt*_(pr),Se*rr)/st,rr&&D(Vt*y(pr)/(Pe*Ge*rr))/$e]},ot}function Mf(Se,Pe,Ge,$e){var st=S/3;Se=h(Se,v),Pe=h(Pe,v),Se=d(Se,M),Pe=d(Pe,S-v),Ge=h(Ge,0),Ge=d(Ge,100-v),$e=h($e,v);var ot=Ge/100+1,pt=$e/100,Vt=R(ot*n(st))/st,tr=y(Se)/y(Vt*M),Ut=Pe/S,rr=P(pt*y(Se/2)/y(Pe/2)),pr=rr/P(Ut*tr*Vt),Sr=1/(rr*P(Ut*tr*Vt));return Vd(pr,Sr,tr,Vt,Ut)}function Ph(){var Se=65*T,Pe=60*T,Ge=20,$e=200,st=i.geoProjectionMutator(Mf),ot=st(Se,Pe,Ge,$e);return ot.poleline=function(pt){return arguments.length?st(Se=+pt*T,Pe,Ge,$e):Se*E},ot.parallels=function(pt){return arguments.length?st(Se,Pe=+pt*T,Ge,$e):Pe*E},ot.inflation=function(pt){return arguments.length?st(Se,Pe,Ge=+pt,$e):Ge},ot.ratio=function(pt){return arguments.length?st(Se,Pe,Ge,$e=+pt):$e},ot.scale(163.775)}function Ih(){return Ph().poleline(65).parallels(60).inflation(0).ratio(200).scale(172.633)}var qu=4*S+3*P(3),cd=2*P(2*S*P(3)/qu),Jc=fe(cd*P(3)/S,cd,qu/6);function eh(){return i.geoProjection(Jc).scale(176.84)}function Qc(Se,Pe){return[Se*P(1-3*Pe*Pe/(S*S)),Pe]}Qc.invert=function(Se,Pe){return[Se/P(1-3*Pe*Pe/(S*S)),Pe]};function wu(){return i.geoProjection(Qc).scale(152.63)}function ef(Se,Pe){var Ge=n(Pe),$e=n(Se)*Ge,st=1-$e,ot=n(Se=l(y(Se)*Ge,-y(Pe))),pt=y(Se);return Ge=P(1-$e*$e),[pt*Ge-ot*st,-ot*Ge-pt*st]}ef.invert=function(Se,Pe){var Ge=(Se*Se+Pe*Pe)/-2,$e=P(-Ge*(2+Ge)),st=Pe*Ge+Se*$e,ot=Se*Ge-Pe*$e,pt=P(ot*ot+st*st);return[l($e*st,pt*(1+Ge)),pt?-D($e*ot/pt):0]};function Sf(){return i.geoProjection(ef).rotate([0,-90,45]).scale(124.75).clipAngle(180-.001)}function fd(Se,Pe){var Ge=X(Se,Pe);return[(Ge[0]+Se/M)/2,(Ge[1]+Pe)/2]}fd.invert=function(Se,Pe){var Ge=Se,$e=Pe,st=25;do{var ot=n($e),pt=y($e),Vt=y(2*$e),tr=pt*pt,Ut=ot*ot,rr=y(Ge),pr=n(Ge/2),Sr=y(Ge/2),Rr=Sr*Sr,Zr=1-Ut*pr*pr,wi=Zr?R(ot*pr)*P(qi=1/Zr):qi=0,qi,Aa=.5*(2*wi*ot*Sr+Ge/M)-Se,un=.5*(wi*pt+$e)-Pe,gn=.5*qi*(Ut*Rr+wi*ot*pr*tr)+.5/M,Tn=qi*(rr*Vt/4-wi*pt*Sr),Pn=.125*qi*(Vt*Sr-wi*pt*Ut*rr),Eo=.5*qi*(tr*pr+wi*Rr*ot)+.5,qo=Tn*Pn-Eo*gn,Wn=(un*Tn-Aa*Eo)/qo,ls=(Aa*Pn-un*gn)/qo;Ge-=Wn,$e-=ls}while((o(Wn)>v||o(ls)>v)&&--st>0);return[Ge,$e]};function $l(){return i.geoProjection(fd).scale(158.837)}t.geoNaturalEarth=i.geoNaturalEarth1,t.geoNaturalEarthRaw=i.geoNaturalEarth1Raw,t.geoAiry=W,t.geoAiryRaw=G,t.geoAitoff=Z,t.geoAitoffRaw=X,t.geoArmadillo=N,t.geoArmadilloRaw=J,t.geoAugust=$,t.geoAugustRaw=H,t.geoBaker=q,t.geoBakerRaw=j,t.geoBerghaus=K,t.geoBerghausRaw=Y,t.geoBertin1953=xe,t.geoBertin1953Raw=pe,t.geoBoggs=ge,t.geoBoggsRaw=ue,t.geoBonne=Ze,t.geoBonneRaw=Ve,t.geoBottomley=vt,t.geoBottomleyRaw=Ke,t.geoBromley=Pt,t.geoBromleyRaw=xt,t.geoChamberlin=_e,t.geoChamberlinRaw=qe,t.geoChamberlinAfrica=me,t.geoCollignon=ke,t.geoCollignonRaw=Ae,t.geoCraig=De,t.geoCraigRaw=Ee,t.geoCraster=at,t.geoCrasterRaw=Ue,t.geoCylindricalEqualArea=ft,t.geoCylindricalEqualAreaRaw=rt,t.geoCylindricalStereographic=ht,t.geoCylindricalStereographicRaw=At,t.geoEckert1=fr,t.geoEckert1Raw=Gt,t.geoEckert2=yt,t.geoEckert2Raw=gt,t.geoEckert3=Lt,t.geoEckert3Raw=kt,t.geoEckert4=$t,t.geoEckert4Raw=Ct,t.geoEckert5=br,t.geoEckert5Raw=mr,t.geoEckert6=Tr,t.geoEckert6Raw=Er,t.geoEisenlohr=oi,t.geoEisenlohrRaw=Ai,t.geoFahey=$i,t.geoFaheyRaw=ea,t.geoFoucaut=ya,t.geoFoucautRaw=ja,t.geoFoucautSinusoidal=xi,t.geoFoucautSinusoidalRaw=pa,t.geoGilbert=dn,t.geoGingery=Fe,t.geoGingeryRaw=pi,t.geoGinzburg4=zt,t.geoGinzburg4Raw=St,t.geoGinzburg5=Yt,t.geoGinzburg5Raw=Wt,t.geoGinzburg6=tt,t.geoGinzburg6Raw=ze,t.geoGinzburg8=wt,t.geoGinzburg8Raw=ct,t.geoGinzburg9=It,t.geoGinzburg9Raw=Nt,t.geoGringorten=Pr,t.geoGringortenRaw=qt,t.geoGuyou=_n,t.geoGuyouRaw=Za,t.geoHammer=se,t.geoHammerRaw=te,t.geoHammerRetroazimuthal=pn,t.geoHammerRetroazimuthalRaw=Li,t.geoHealpix=ln,t.geoHealpixRaw=Mn,t.geoHill=ao,t.geoHillRaw=on,t.geoHomolosine=Qn,t.geoHomolosineRaw=uo,t.geoHufnagel=Yn,t.geoHufnagelRaw=jo,t.geoHyperelliptical=no,t.geoHyperellipticalRaw=xo,t.geoInterrupt=ws,t.geoInterruptedBoggs=nl,t.geoInterruptedHomolosine=go,t.geoInterruptedMollweide=On,t.geoInterruptedMollweideHemispheres=kl,t.geoInterruptedSinuMollweide=Ul,t.geoInterruptedSinusoidal=yu,t.geoKavrayskiy7=au,t.geoKavrayskiy7Raw=Fu,t.geoLagrange=Pu,t.geoLagrangeRaw=xc,t.geoLarrivee=Iu,t.geoLarriveeRaw=bc,t.geoLaskowski=ms,t.geoLaskowskiRaw=_l,t.geoLittrow=fl,t.geoLittrowRaw=ss,t.geoLoximuthal=Tc,t.geoLoximuthalRaw=wc,t.geoMiller=wh,t.geoMillerRaw=tc,t.geoModifiedStereographic=zu,t.geoModifiedStereographicRaw=Th,t.geoModifiedStereographicAlaska=vf,t.geoModifiedStereographicGs48=Ac,t.geoModifiedStereographicGs50=Mh,t.geoModifiedStereographicMiller=Mc,t.geoModifiedStereographicLee=$c,t.geoMollweide=ee,t.geoMollweideRaw=ae,t.geoMtFlatPolarParabolic=id,t.geoMtFlatPolarParabolicRaw=Sc,t.geoMtFlatPolarQuartic=zd,t.geoMtFlatPolarQuarticRaw=Uf,t.geoMtFlatPolarSinusoidal=Sh,t.geoMtFlatPolarSinusoidalRaw=Bu,t.geoNaturalEarth2=qf,t.geoNaturalEarth2Raw=_u,t.geoNellHammer=gf,t.geoNellHammerRaw=Dl,t.geoInterruptedQuarticAuthalic=yf,t.geoNicolosi=Vf,t.geoNicolosiRaw=_f,t.geoPatterson=Nu,t.geoPattersonRaw=Gf,t.geoPolyconic=Hf,t.geoPolyconicRaw=Cc,t.geoPolyhedral=xf,t.geoPolyhedralButterfly=Dc,t.geoPolyhedralCollignon=od,t.geoPolyhedralWaterman=Wf,t.geoProject=Ch,t.geoGringortenQuincuncial=nt,t.geoPeirceQuincuncial=Tt,t.geoPierceQuincuncial=Tt,t.geoQuantize=Kt,t.geoQuincuncial=Af,t.geoRectangularPolyconic=yr,t.geoRectangularPolyconicRaw=Bt,t.geoRobinson=ii,t.geoRobinsonRaw=Gr,t.geoSatellite=$r,t.geoSatelliteRaw=Fi,t.geoSinuMollweide=Fo,t.geoSinuMollweideRaw=lo,t.geoSinusoidal=je,t.geoSinusoidalRaw=Te,t.geoStitch=Go,t.geoTimes=vo,t.geoTimesRaw=ma,t.geoTwoPointAzimuthal=bu,t.geoTwoPointAzimuthalRaw=qs,t.geoTwoPointAzimuthalUsa=Ll,t.geoTwoPointEquidistant=bl,t.geoTwoPointEquidistantRaw=Gl,t.geoTwoPointEquidistantUsa=ac,t.geoVanDerGrinten=Fc,t.geoVanDerGrintenRaw=Uu,t.geoVanDerGrinten2=ud,t.geoVanDerGrinten2Raw=Kc,t.geoVanDerGrinten3=qd,t.geoVanDerGrinten3Raw=Qf,t.geoVanDerGrinten4=Hl,t.geoVanDerGrinten4Raw=Fh,t.geoWagner=Ph,t.geoWagner7=Ih,t.geoWagnerRaw=Mf,t.geoWagner4=eh,t.geoWagner4Raw=Jc,t.geoWagner6=wu,t.geoWagner6Raw=Qc,t.geoWiechel=Sf,t.geoWiechelRaw=ef,t.geoWinkel3=$l,t.geoWinkel3Raw=fd,Object.defineProperty(t,"__esModule",{value:!0})}))}}),JY=de({"src/plots/geo/zoom.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=Ma(),o=Math.PI/180,s=180/Math.PI,l={cursor:"pointer"},n={cursor:"auto"};function u(E,T){var F=E.projection,D;return T._isScoped?D=h:T._isClipped?D=p:D=d,D(E,F)}r.exports=u;function c(E,T){return t.behavior.zoom().translate(T.translate()).scaleExtent(T.scaleExtent()).scale(T.scale())}function f(E,T,F){var D=E.id,R=E.graphDiv,P=R.layout,z=P[D],I=R._fullLayout,L=I[D],B={},O={};function G(W,X){B[D+"."+W]=i.nestedProperty(z,W).get(),a.call("_storeDirectGUIEdit",P,I._preGUI,B);var Z=i.nestedProperty(L,W);Z.get()!==X&&(Z.set(X),i.nestedProperty(z,W).set(X),O[D+"."+W]=X)}F(G),G("projection.scale",T.scale()/E.fitScale),G("fitbounds",!1),R.emit("plotly_relayout",O)}function h(E,T){var F=c(E,T);function D(){t.select(this).style(l)}function R(){T.scale(t.event.scale).translate(t.event.translate),E.render(!0);var I=T.invert(E.midPt);E.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":T.scale()/E.fitScale,"geo.center.lon":I[0],"geo.center.lat":I[1]})}function P(I){var L=T.invert(E.midPt);I("center.lon",L[0]),I("center.lat",L[1])}function z(){t.select(this).style(n),f(E,T,P)}return F.on("zoomstart",D).on("zoom",R).on("zoomend",z),F}function d(E,T){var F=c(E,T),D=2,R,P,z,I,L,B,O,G,W;function X(U){return T.invert(U)}function Z(U){var V=X(U);if(!V)return!0;var j=T(V);return Math.abs(j[0]-U[0])>D||Math.abs(j[1]-U[1])>D}function J(){t.select(this).style(l);let{x:U,y:V,width:j,height:q}=this.getBBox();R=t.event.sourceEvent?t.mouse(this):[U+j/2,V+q/2],P=T.rotate(),z=T.translate(),I=P,L=X(R)}function N(){let{x:U,y:V,width:j,height:q}=this.getBBox();if(B=t.event.sourceEvent?t.mouse(this):[U+j/2,V+q/2],Z(R)){F.scale(T.scale()),F.translate(T.translate());return}T.scale(t.event.scale),T.translate([z[0],t.event.translate[1]]),L?X(B)&&(G=X(B),O=[I[0]+(G[0]-L[0]),P[1],P[2]],T.rotate(O),I=O):(R=B,L=X(R)),W=!0,E.render(!0);var Y=T.rotate(),K=T.invert(E.midPt);E.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":T.scale()/E.fitScale,"geo.center.lon":K[0],"geo.center.lat":K[1],"geo.projection.rotation.lon":-Y[0]})}function H(){t.select(this).style(n),W&&f(E,T,$)}function $(U){var V=T.rotate(),j=T.invert(E.midPt);U("projection.rotation.lon",-V[0]),U("center.lon",j[0]),U("center.lat",j[1])}return F.on("zoomstart",J).on("zoom",N).on("zoomend",H),F}function p(E,T){var F={r:T.rotate(),k:T.scale()},D=c(E,T),R=b(D,"zoomstart","zoom","zoomend"),P=0,z=D.on,I;D.on("zoomstart",function(){t.select(this).style(l);let{x:W,y:X,width:Z,height:J}=this.getBBox(),N=t.event.sourceEvent?t.mouse(this):[W+Z/2,X+J/2],H=T.rotate(),$=H,U=T.translate(),V=m(H);I=g(T,N),z.call(D,"zoom",function(){let{x:j,y:q,width:Y,height:K}=this.getBBox(),te=t.event.sourceEvent?t.mouse(this):[j+Y/2,q+K/2];if(T.scale(F.k=t.event.scale),!I)N=te,I=g(T,N);else if(g(T,te)){T.rotate(H).translate(U);var ne=g(T,te),se=_(I,ne),le=C(y(V,se)),ce=F.r=v(le,I,$);(!isFinite(ce[0])||!isFinite(ce[1])||!isFinite(ce[2]))&&(ce=$),T.rotate(ce),$=ce}B(R.of(this,arguments))}),L(R.of(this,arguments))}).on("zoomend",function(){t.select(this).style(n),z.call(D,"zoom",null),O(R.of(this,arguments)),f(E,T,G)}).on("zoom.redraw",function(){E.render(!0);var W=T.rotate();E.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":T.scale()/E.fitScale,"geo.projection.rotation.lon":-W[0],"geo.projection.rotation.lat":-W[1]})});function L(W){P++||W({type:"zoomstart"})}function B(W){W({type:"zoom"})}function O(W){--P||W({type:"zoomend"})}function G(W){var X=T.rotate();W("projection.rotation.lon",-X[0]),W("projection.rotation.lat",-X[1])}return t.rebind(D,R,"on")}function g(E,T){var F=E.invert(T);return F&&isFinite(F[0])&&isFinite(F[1])&&w(F)}function m(E){var T=.5*E[0]*o,F=.5*E[1]*o,D=.5*E[2]*o,R=Math.sin(T),P=Math.cos(T),z=Math.sin(F),I=Math.cos(F),L=Math.sin(D),B=Math.cos(D);return[P*I*B+R*z*L,R*I*B-P*z*L,P*z*B+R*I*L,P*I*L-R*z*B]}function y(E,T){var F=E[0],D=E[1],R=E[2],P=E[3],z=T[0],I=T[1],L=T[2],B=T[3];return[F*z-D*I-R*L-P*B,F*I+D*z+R*B-P*L,F*L-D*B+R*z+P*I,F*B+D*L-R*I+P*z]}function _(E,T){if(!(!E||!T)){var F=A(E,T),D=Math.sqrt(k(F,F)),R=.5*Math.acos(Math.max(-1,Math.min(1,k(E,T)))),P=Math.sin(R)/D;return D&&[Math.cos(R),F[2]*P,-F[1]*P,F[0]*P]}}function v(E,T,F){var D=M(T,2,E[0]);D=M(D,1,E[1]),D=M(D,0,E[2]-F[2]);var R=T[0],P=T[1],z=T[2],I=D[0],L=D[1],B=D[2],O=Math.atan2(P,R)*s,G=Math.sqrt(R*R+P*P),W,X;Math.abs(L)>G?(X=(L>0?90:-90)-O,W=0):(X=Math.asin(L/G)*s-O,W=Math.sqrt(G*G-L*L));var Z=180-X-2*O,J=(Math.atan2(B,I)-Math.atan2(z,W))*s,N=(Math.atan2(B,I)-Math.atan2(z,-W))*s,H=x(F[0],F[1],X,J),$=x(F[0],F[1],Z,N);return H<=$?[X,J,F[2]]:[Z,N,F[2]]}function x(E,T,F,D){var R=S(F-E),P=S(D-T);return Math.sqrt(R*R+P*P)}function S(E){return(E%360+540)%360-180}function M(E,T,F){var D=F*o,R=E.slice(),P=T===0?1:0,z=T===2?1:2,I=Math.cos(D),L=Math.sin(D);return R[P]=E[P]*I-E[z]*L,R[z]=E[z]*I+E[P]*L,R}function C(E){return[Math.atan2(2*(E[0]*E[1]+E[2]*E[3]),1-2*(E[1]*E[1]+E[2]*E[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(E[0]*E[2]-E[3]*E[1]))))*s,Math.atan2(2*(E[0]*E[3]+E[1]*E[2]),1-2*(E[2]*E[2]+E[3]*E[3]))*s]}function w(E){var T=E[0]*o,F=E[1]*o,D=Math.cos(F);return[D*Math.cos(T),D*Math.sin(T),Math.sin(F)]}function k(E,T){for(var F=0,D=0,R=E.length;D<R;++D)F+=E[D]*T[D];return F}function A(E,T){return[E[1]*T[2]-E[2]*T[1],E[2]*T[0]-E[0]*T[2],E[0]*T[1]-E[1]*T[0]]}function b(E){for(var T=0,F=arguments.length,D=[];++T<F;)D.push(arguments[T]);var R=t.dispatch.apply(null,D);return R.of=function(P,z){return function(I){var L;try{L=I.sourceEvent=t.event,I.target=E,t.event=I,R[I.type].apply(P,z)}finally{t.event=L}}},R}}}),QY=de({"src/plots/geo/geo.js"(e,r){"use strict";var t=Yr(),i=w4(),a=i.geoPath,o=i.geoDistance,s=KY(),l=Ma(),n=Qt(),u=n.strTranslate,c=ta(),f=hn(),h=$s(),d=Es(),p=nn(),{concatExtremes:g,getAutoRange:m,makePadFn:y}=vd(),_=Uc(),v=Zl().prepSelect,x=Zl().clearOutline,S=Zl().selectOnClick,M=JY(),C=m_(),w=Fp(),{unwrapLonRange:k}=w,A=_4(),b=o7().feature;function E(P){this.id=P.id,this.graphDiv=P.graphDiv,this.container=P.container,this.topojsonURL=P.topojsonURL,this.isStatic=P.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}var T=E.prototype;r.exports=function(z){return new E(z)},T.plot=function(P,z,I,L){var B=this;if(L)return B.update(P,z,!0);B._geoCalcData=P,B._fullLayout=z;var O=z[this.id],G=[],W=!1;for(var X in C.layerNameToAdjective)if(X!=="frame"&&O["show"+X]){W=!0;break}for(var Z=!1,J=0;J<P.length;J++){var N=P[0][0].trace;N._geo=B,N.locationmode&&(W=!0);var H=N.marker;if(H){var $=H.angle,U=H.angleref;($||U==="north"||U==="previous")&&(Z=!0)}}if(this._hasMarkerAngles=Z,W){var V=A.getTopojsonName(O);(B.topojson===null||V!==B.topojsonName)&&(B.topojsonName=V,PlotlyGeoAssets.topojson[B.topojsonName]===void 0&&G.push(B.fetchTopojson()))}G=G.concat(w.fetchTraceGeoData(P)),I.push(new Promise(function(j,q){Promise.all(G).then(function(){B.topojson=PlotlyGeoAssets.topojson[B.topojsonName],B.update(P,z),j()}).catch(q)}))},T.fetchTopojson=function(){var P=this,z=A.getTopojsonPath(P.topojsonURL,P.topojsonName);return new Promise(function(I,L){t.json(z,function(B,O){if(B)return B.status===404?L(new Error(["plotly.js could not find topojson file at",z+".","Make sure the *topojsonURL* plot config option","is set properly."].join(" "))):L(new Error(["unexpected error while fetching topojson file at",z].join(" ")));PlotlyGeoAssets.topojson[P.topojsonName]=O,I()})})},T.update=function(P,z,I){var L=z[this.id];this.hasChoropleth=!1;for(var B=0;B<P.length;B++){var O=P[B],G=O[0].trace;G.type==="choropleth"&&(this.hasChoropleth=!0),G.visible===!0&&G._length>0&&G._module.calcGeoJSON(O,z)}if(!I){var W=this.updateProjection(P,z);if(W)return;(!this.viewInitial||this.scope!==L.scope)&&this.saveViewInitial(L)}this.scope=L.scope,this.updateBaseLayers(z,L),this.updateDims(z,L),this.updateFx(z,L),d.generalUpdatePerTraceModule(this.graphDiv,this,P,L);var X=this.layers.frontplot.select(".scatterlayer");this.dataPoints.point=X.selectAll(".point"),this.dataPoints.text=X.selectAll("text"),this.dataPaths.line=X.selectAll(".js-line");var Z=this.layers.backplot.select(".choroplethlayer");this.dataPaths.choropleth=Z.selectAll("path"),this._render()},T.updateProjection=function(P,z){var I=this.graphDiv,L=z[this.id],B=z._size,O=L.domain,G=L.projection,W=L.lonaxis,X=L.lataxis,Z=W._ax,J=X._ax,N=this.projection=F(L),H=[[B.l+B.w*O.x[0],B.t+B.h*(1-O.y[1])],[B.l+B.w*O.x[1],B.t+B.h*(1-O.y[0])]],$=L.center||{},U=G.rotation||{},V=W.range||[],j=X.range||[];if(L.fitbounds){Z._length=H[1][0]-H[0][0],J._length=H[1][1]-H[0][1],Z.range=m(I,Z),J.range=m(I,J);let ie=[];for(let vt of P){let xt=vt[0].trace;xt.visible===!0&&xt._module.fitCoords&&ie.push(xt._module.fitCoords(vt,L))}let Q=g(I,Z),ue=Q.min.reduce((vt,{val:xt})=>Math.min(vt,xt),1/0),Me=Q.max.reduce((vt,{val:xt})=>Math.max(vt,xt),-1/0)-ue,Te=w.boundsOfCoords(ie.flat()),[je,,Ve]=Te||[],Ze=Ve-je;if(!!Te&&(Me>360||Me<360&&Ze<Me)){let vt=y(z,Z,0),xt=y(z,Z,1),Pt=Q.min.reduce((Ye,me)=>Math.max(Ye,vt(me)),0),mt=Q.max.reduce((Ye,me)=>Math.max(Ye,xt(me)),0),Mt=Z._length-Pt-mt,lt=Mt>Z._length/10?Ze*Z._length/Mt:Ze,qe=(je+Ve)/2;Z.range=[qe-lt/2,qe+lt/2]}var q=(Z.range[0]+Z.range[1])/2,Y=(J.range[0]+J.range[1])/2;if(L._isScoped)$={lon:q,lat:Y};else if(L._isClipped){$={lon:q,lat:Y},U={lon:q,lat:Y,roll:U.roll};var K=G.type,te=C.lonaxisSpan[K]/2||180,ne=C.lataxisSpan[K]/2||90;V=[q-te,q+te],j=[Y-ne,Y+ne]}else $={lon:q,lat:Y},U={lon:q,lat:U.lat,roll:U.roll}}N.center([$.lon-U.lon,$.lat-U.lat]).rotate([-U.lon,-U.lat,U.roll]).parallels(G.parallels);var se=R(V,j);N.fitExtent(H,se);var le=this.bounds=N.getBounds(se),ce=this.fitScale=N.scale(),pe=N.translate();if(N.scaleExtent=()=>{var ie;let{minscale:Q}=G,ue=(ie=G.maxscale)!=null?ie:1/0;return[ce*Math.min(Q,ue),ce*Math.max(Q,ue)]},L.fitbounds){var xe=N.getBounds(R(Z.range,J.range)),ye=Math.min((le[1][0]-le[0][0])/(xe[1][0]-xe[0][0]),(le[1][1]-le[0][1])/(xe[1][1]-xe[0][1]));isFinite(ye)?N.scale(ye*ce):n.warn("Something went wrong during"+this.id+"fitbounds computations.")}else N.scale(G.scale*ce);var fe=this.midPt=[(le[0][0]+le[1][0])/2,(le[0][1]+le[1][1])/2];if(N.translate([pe[0]+(fe[0]-pe[0]),pe[1]+(fe[1]-pe[1])]).clipExtent(le),L._isAlbersUsa){var ae=N([$.lon,$.lat]);if(ae){var ee=N.translate();N.translate([ee[0]-(ae[0]-ee[0]),ee[1]-(ae[1]-ee[1])])}}},T.updateBaseLayers=function(P,z){var I=this,L=I.topojson,B=I.layers,O=I.basePaths;function G(H){return H==="lonaxis"||H==="lataxis"}function W(H){return!!C.lineLayers[H]}function X(H){return!!C.fillLayers[H]}var Z=this.hasChoropleth?C.layersForChoropleth:C.layers,J=Z.filter(function(H){return W(H)||X(H)?z["show"+H]:G(H)?z[H].showgrid:!0}),N=I.framework.selectAll(".layer").data(J,String);N.exit().each(function(H){delete B[H],delete O[H],t.select(this).remove()}),N.enter().append("g").attr("class",function(H){return"layer "+H}).each(function(H){var $=B[H]=t.select(this);H==="bg"?I.bgRect=$.append("rect").style("pointer-events","all"):G(H)?O[H]=$.append("path").style("fill","none"):H==="backplot"?$.append("g").classed("choroplethlayer",!0):H==="frontplot"?$.append("g").classed("scatterlayer",!0):W(H)?O[H]=$.append("path").style("fill","none").style("stroke-miterlimit",2):X(H)&&(O[H]=$.append("path").style("stroke","none"))}),N.order(),N.each(function(H){var $=O[H],U=C.layerNameToAdjective[H];H==="frame"?$.datum(C.sphereSVG):W(H)||X(H)?$.datum(b(L,L.objects[H])):G(H)&&$.datum(D(H,z,P)).call(c.stroke,z[H].gridcolor).call(f.dashLine,z[H].griddash,z[H].gridwidth),W(H)?$.call(c.stroke,z[U+"color"]).call(f.dashLine,"",z[U+"width"]):X(H)&&$.call(c.fill,z[U+"color"])})},T.updateDims=function(P,z){var I=this.bounds,L=(z.framewidth||0)/2,B=I[0][0]-L,O=I[0][1]-L,G=I[1][0]-B+L,W=I[1][1]-O+L;f.setRect(this.clipRect,B,O,G,W),this.bgRect.call(f.setRect,B,O,G,W).call(c.fill,z.bgcolor),this.xaxis._offset=B,this.xaxis._length=G,this.yaxis._offset=O,this.yaxis._length=W},T.updateFx=function(P,z){var I=this,L=I.graphDiv,B=I.bgRect,O=P.dragmode,G=P.clickmode;if(I.isStatic)return;function W(){var N=I.viewInitial,H={};for(var $ in N)H[I.id+"."+$]=N[$];l.call("_guiRelayout",L,H),L.emit("plotly_doubleclick",null)}function X(N){return I.projection.invert([N[0]+I.xaxis._offset,N[1]+I.yaxis._offset])}var Z=function(N,H){if(H.isRect){var $=N.range={};$[I.id]=[X([H.xmin,H.ymin]),X([H.xmax,H.ymax])]}else{var U=N.lassoPoints={};U[I.id]=H.map(X)}},J={element:I.bgRect.node(),gd:L,plotinfo:{id:I.id,xaxis:I.xaxis,yaxis:I.yaxis,fillRangeItems:Z},xaxes:[I.xaxis],yaxes:[I.yaxis],subplot:I.id,clickFn:function(N){N===2&&x(L)}};if(O==="pan"){B.node().onmousedown=null;let N=M(I,z);if(B.call(N),!t.event){let H=I.projection.scale(),[$,U]=I.projection.scaleExtent();(H<$||H>U)&&N.event(B)}B.on("dblclick.zoom",W),L._context._scrollZoom.geo||B.on("wheel.zoom",null)}else(O==="select"||O==="lasso")&&(B.on(".zoom",null),J.prepFn=function(N,H,$){v(N,H,$,J,O)},_.init(J));B.on("mousemove",function(){var N=I.projection.invert(n.getPositionFromD3Event());if(!N)return _.unhover(L,t.event);I.xaxis.p2c=function(){return N[0]},I.yaxis.p2c=function(){return N[1]},h.hover(L,t.event,I.id)}),B.on("mouseout",function(){L._dragging||_.unhover(L,t.event)}),B.on("click",function(){O!=="select"&&O!=="lasso"&&(G.indexOf("select")>-1&&S(t.event,L,[I.xaxis],[I.yaxis],I.id,J),G.indexOf("event")>-1&&h.click(L,t.event))})},T.makeFramework=function(){var P=this,z=P.graphDiv,I=z._fullLayout,L="clip"+I._uid+P.id;P.clipDef=I._clips.append("clipPath").attr("id",L),P.clipRect=P.clipDef.append("rect"),P.framework=t.select(P.container).append("g").attr("class","geo "+P.id).call(f.setClipUrl,L,z),P.project=function(B){var O=P.projection(B);return O?[O[0]-P.xaxis._offset,O[1]-P.yaxis._offset]:[null,null]},P.xaxis={_id:"x",c2p:function(B){return P.project(B)[0]}},P.yaxis={_id:"y",c2p:function(B){return P.project(B)[1]}},P.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},p.setConvert(P.mockAxis,I)},T.saveViewInitial=function(P){var z=P.center||{},I=P.projection,L=I.rotation||{};this.viewInitial={fitbounds:P.fitbounds,"projection.scale":I.scale};var B;P._isScoped?B={"center.lon":z.lon,"center.lat":z.lat}:P._isClipped?B={"projection.rotation.lon":L.lon,"projection.rotation.lat":L.lat,"center.lon":z.lon,"center.lat":z.lat}:B={"center.lon":z.lon,"center.lat":z.lat,"projection.rotation.lon":L.lon},n.extendFlat(this.viewInitial,B)},T.render=function(P){this._hasMarkerAngles&&P?this.plot(this._geoCalcData,this._fullLayout,[],!0):this._render()},T._render=function(){var P=this.projection,z=P.getPath(),I;function L(O){var G=P(O.lonlat);return G?u(G[0],G[1]):null}function B(O){return P.isLonLatOverEdges(O.lonlat)?"none":null}for(I in this.basePaths)this.basePaths[I].attr("d",z);for(I in this.dataPaths)this.dataPaths[I].attr("d",function(O){return z(O.geojson)});for(I in this.dataPoints)this.dataPoints[I].attr("display",B).attr("transform",L)};function F(P){var z=P.projection,I=z.type,L=C.projNames[I];L="geo"+n.titleCase(L);for(var B=i[L]||s[L],O=B(),G=P._isSatellite?Math.acos(1/z.distance)*180/Math.PI:P._isClipped?C.lonaxisSpan[I]/2:null,W=["center","rotate","parallels","clipExtent"],X=function(N){return N?O:[]},Z=0;Z<W.length;Z++){var J=W[Z];typeof O[J]!="function"&&(O[J]=X)}return O.isLonLatOverEdges=function(N){if(O(N)===null)return!0;if(G){var H=O.rotate(),$=o(N,[-H[0],-H[1]]),U=G*Math.PI/180;return $>U}else return!1},O.getPath=function(){return a().projection(O)},O.getBounds=function(N){return O.getPath().bounds(N)},O.precision(C.precision),P._isSatellite&&O.tilt(z.tilt).distance(z.distance),G&&O.clipAngle(G-C.clipPad),O}function D(P,z,I){var L=1e-6,B=2.5,O=z[P],G=C.scopeDefaults[z.scope],W,X,Z;P==="lonaxis"?(W=G.lonaxisRange,X=G.lataxisRange,Z=function(Y,K){return[Y,K]}):P==="lataxis"&&(W=G.lataxisRange,X=G.lonaxisRange,Z=function(Y,K){return[K,Y]});var J={type:"linear",range:[W[0],W[1]-L],tick0:O.tick0,dtick:O.dtick};p.setConvert(J,I);var N=p.calcTicks(J);!z.isScoped&&P==="lonaxis"&&N.pop();for(var H=N.length,$=new Array(H),U=0;U<H;U++)for(var V=N[U].x,j=$[U]=[],q=X[0];q<X[1]+B;q+=B)j.push(Z(V,q));return{type:"MultiLineString",coordinates:$}}function R(P,z){var I=C.clipPad;let[L,B]=k([P[0]+I,P[1]-I]);var O=z[0]+I,G=z[1]-I,W=(B-L)/4;return{type:"Polygon",coordinates:[[[L,O],[L,G],[L+W,G],[L+2*W,G],[L+3*W,G],[B,G],[B,O],[B-W,O],[B-2*W,O],[B-3*W,O],[L,O]]]}}}}),c7=de({"src/plots/geo/layout_attributes.js"(e,r){"use strict";var t=Jo(),i=Is().attributes,a=fu().dash,o=m_(),s=Ps().overrideAll,l=(gv(),ti(c0)).default,n={range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},showgrid:{valType:"boolean",dflt:!1},tick0:{valType:"number",dflt:0},dtick:{valType:"number"},gridcolor:{valType:"color",dflt:t.lightLine},gridwidth:{valType:"number",min:0,dflt:1},griddash:a},u=r.exports=s({domain:i({name:"geo"},{}),fitbounds:{valType:"enumerated",values:[!1,"locations","geojson"],dflt:"locations",editType:"plot"},resolution:{valType:"enumerated",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:"enumerated",values:l(o.scopeDefaults),dflt:"world"},projection:{type:{valType:"enumerated",values:l(o.projNames)},rotation:{lon:{valType:"number"},lat:{valType:"number"},roll:{valType:"number"}},tilt:{valType:"number",dflt:0},distance:{valType:"number",min:1.001,dflt:2},parallels:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},scale:{valType:"number",min:0,dflt:1},minscale:{valType:"number",min:0,dflt:0},maxscale:{valType:"number",min:0,dflt:null}},center:{lon:{valType:"number"},lat:{valType:"number"}},visible:{valType:"boolean",dflt:!0},showcoastlines:{valType:"boolean"},coastlinecolor:{valType:"color",dflt:t.defaultLine},coastlinewidth:{valType:"number",min:0,dflt:1},showland:{valType:"boolean",dflt:!1},landcolor:{valType:"color",dflt:o.landColor},showocean:{valType:"boolean",dflt:!1},oceancolor:{valType:"color",dflt:o.waterColor},showlakes:{valType:"boolean",dflt:!1},lakecolor:{valType:"color",dflt:o.waterColor},showrivers:{valType:"boolean",dflt:!1},rivercolor:{valType:"color",dflt:o.waterColor},riverwidth:{valType:"number",min:0,dflt:1},showcountries:{valType:"boolean"},countrycolor:{valType:"color",dflt:t.defaultLine},countrywidth:{valType:"number",min:0,dflt:1},showsubunits:{valType:"boolean"},subunitcolor:{valType:"color",dflt:t.defaultLine},subunitwidth:{valType:"number",min:0,dflt:1},showframe:{valType:"boolean"},framecolor:{valType:"color",dflt:t.defaultLine},framewidth:{valType:"number",min:0,dflt:1},bgcolor:{valType:"color",dflt:t.background},lonaxis:n,lataxis:n},"plot","from-root");u.uirevision={valType:"any",editType:"none"}}}),eX=de({"src/plots/geo/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=Ev(),a=$u().getSubplotData,{unwrapLonRange:o}=Fp(),s=m_(),l=c7(),n=s.axesNames;r.exports=function(f,h,d){i(f,h,d,{type:"geo",attributes:l,handleDefaults:u,fullData:d,partition:"y"})};function u(c,f,h,d){var p=a(d.fullData,"geo",d.id),g=p.map(function($){return $.index}),m=h("resolution"),y=h("scope"),_=s.scopeDefaults[y],v=h("projection.type",_.projType),x=f._isAlbersUsa=v==="albers usa";x&&(y=f.scope="usa");var S=f._isScoped=y!=="world",M=f._isSatellite=v==="satellite",C=f._isConic=v.indexOf("conic")!==-1||v==="albers",w=f._isClipped=!!s.lonaxisSpan[v];if(c.visible===!1){var k=t.extendDeep({},f._template);k.showcoastlines=!1,k.showcountries=!1,k.showframe=!1,k.showlakes=!1,k.showland=!1,k.showocean=!1,k.showrivers=!1,k.showsubunits=!1,k.lonaxis&&(k.lonaxis.showgrid=!1),k.lataxis&&(k.lataxis.showgrid=!1),f._template=k}for(var A=h("visible"),b,E=0;E<n.length;E++){var T=n[E],F=[30,10][E],D;if(S)D=_[T+"Range"];else{var R=s[T+"Span"],P=(R[v]||R["*"])/2,z=h("projection.rotation."+T.slice(0,3),_.projRotate[E]);D=[z-P,z+P]}var I=h(T+".range",D);h(T+".tick0"),h(T+".dtick",F),b=h(T+".showgrid",A?void 0:!1),b&&(h(T+".gridcolor"),h(T+".gridwidth"),h(T+".griddash")),f[T]._ax={type:"linear",_id:T.slice(0,3),_traceIndices:g,setScale:t.identity,c2l:t.identity,r2l:t.identity,autorange:!0,range:I.slice(),_m:1,_input:{}}}var L=f.lonaxis.range,B=f.lataxis.range;let[O,G]=o(L);var W=(O+G)/2,X;if(!x){var Z=S?_.projRotate:[W,0,0];X=h("projection.rotation.lon",Z[0]),h("projection.rotation.lat",Z[1]),h("projection.rotation.roll",Z[2]),b=h("showcoastlines",!S&&A),b&&(h("coastlinecolor"),h("coastlinewidth")),b=h("showocean",A?void 0:!1),b&&h("oceancolor")}var J,N;if(x?(J=-96.6,N=38.7):(J=S?W:X,N=(B[0]+B[1])/2),h("center.lon",J),h("center.lat",N),M&&(h("projection.tilt"),h("projection.distance")),C){var H=_.projParallels||[0,60];h("projection.parallels",H)}if(h("projection.scale"),h("projection.minscale"),h("projection.maxscale"),b=h("showland",A?void 0:!1),b&&h("landcolor"),b=h("showlakes",A?void 0:!1),b&&h("lakecolor"),b=h("showrivers",A?void 0:!1),b&&(h("rivercolor"),h("riverwidth")),b=h("showcountries",S&&y!=="usa"&&A),b&&(h("countrycolor"),h("countrywidth")),(y==="usa"||y==="north america"&&m===50)&&(h("showsubunits",A),h("subunitcolor"),h("subunitwidth")),S||(b=h("showframe",A),b&&(h("framecolor"),h("framewidth"))),h("bgcolor"),h("fitbounds"),f.fitbounds){let $=c.center||{},U=c.projection||{},V=U.rotation||{},j=c.lonaxis||{},q=c.lataxis||{},Y=[{dst:f.center,key:"lon",src:$},{dst:f.center,key:"lat",src:$},{dst:f.projection,key:"scale",src:U}];S||(w?Y.push({dst:f.projection.rotation,key:"lon",src:V},{dst:f.projection.rotation,key:"lat",src:V},{dst:f.lonaxis,key:"range",src:j},{dst:f.lataxis,key:"range",src:q}):Y.push({dst:f.projection.rotation,key:"lon",src:V})),w||Y.push({key:"range",src:j},{key:"range",src:q}),Y.some(({src:te,key:ne})=>te[ne]!=null)||s.fitboundsIncompatible.has(v)?f.fitbounds=!1:Y.forEach(({dst:te,key:ne})=>te&&(te[ne]=null))}}}}),f7=de({"src/plots/geo/index.js"(e,r){"use strict";var t=$u().getSubplotCalcData,i=Qt().counterRegex,a=QY(),o="geo",s=i(o),l={};l[o]={valType:"subplotid",dflt:o,editType:"calc"};function n(f){for(var h=f._fullLayout,d=f.calcdata,p=h._subplots[o],g=0;g<p.length;g++){var m=p[g],y=t(d,o,m),_=h[m],v=_._subplot;v||(v=a({id:m,graphDiv:f,container:h._geolayer.node(),topojsonURL:f._context.topojsonURL,staticPlot:f._context.staticPlot}),h[m]._subplot=v),v.plot(y,h,f._promises)}}function u(f,h,d,p){for(var g=p._subplots[o]||[],m=0;m<g.length;m++){var y=g[m],_=p[y]._subplot;!h[y]&&_&&(_.framework.remove(),_.clipDef.remove())}}function c(f){for(var h=f._fullLayout,d=h._subplots[o],p=0;p<d.length;p++){var g=h[d[p]],m=g._subplot;m.updateFx(h,g)}}r.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:c7(),supplyLayoutDefaults:eX(),plot:n,updateFx:c,clean:u}}}),tX=de({"src/traces/scattergeo/index.js"(e,r){"use strict";r.exports={attributes:R1(),supplyDefaults:NY(),colorbar:Yu(),formatLabels:jY(),calc:n7(),calcGeoJSON:T4().calcGeoJSON,fitCoords:T4().fitCoords,plot:T4().plot,style:u7(),styleOnSelect:lf().styleOnSelect,hoverPoints:WY(),eventData:YY(),selectPoints:XY(),moduleType:"trace",name:"scattergeo",basePlotModule:f7(),categories:["geo","symbols","showLegend","scatter-like"],meta:{}}}}),rX=de({"lib/scattergeo.js"(e,r){"use strict";r.exports=tX()}}),y_=de({"src/traces/choropleth/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,templatefallbackAttrs:i}=Vo(),a=R1(),o=cs(),s=ri(),l=Jo().defaultLine,n=fn().extendFlat,u=a.marker.line;r.exports=n({locations:{valType:"data_array",editType:"calc"},locationmode:a.locationmode,z:{valType:"data_array",editType:"calc"},geojson:n({},a.geojson,{}),featureidkey:a.featureidkey,text:n({},a.text,{}),hovertext:n({},a.hovertext,{}),marker:{line:{color:n({},u.color,{dflt:l}),width:n({},u.width,{dflt:1}),editType:"calc"},opacity:{valType:"number",arrayOk:!0,min:0,max:1,dflt:1,editType:"style"},editType:"calc"},selected:{marker:{opacity:a.selected.marker.opacity,editType:"plot"},editType:"plot"},unselected:{marker:{opacity:a.unselected.marker.opacity,editType:"plot"},editType:"plot"},hoverinfo:n({},s.hoverinfo,{editType:"calc",flags:["location","z","text","name"]}),hovertemplate:t(),hovertemplatefallback:i(),showlegend:n({},s.showlegend,{dflt:!1})},o("",{cLetter:"z",editTypeOverride:"calc"}))}}),iX=de({"src/traces/choropleth/defaults.js"(e,r){"use strict";var t=Qt(),i=hu(),a=y_();r.exports=function(s,l,n,u){function c(y,_){return t.coerce(s,l,a,y,_)}var f=c("locations"),h=c("z");if(!(f&&f.length&&t.isArrayOrTypedArray(h)&&h.length)){l.visible=!1;return}l._length=Math.min(f.length,h.length);var d=c("geojson"),p;(typeof d=="string"&&d!==""||t.isPlainObject(d))&&(p="geojson-id");var g=c("locationmode",p);g==="geojson-id"&&c("featureidkey"),c("text"),c("hovertext"),c("hovertemplate"),c("hovertemplatefallback");var m=c("marker.line.width");m&&c("marker.line.color"),c("marker.opacity"),i(s,l,u,c,{prefix:"",cLetter:"z"}),t.coerceSelectionMarkerOpacity(l,c)}}}),h7=de({"src/traces/choropleth/calc.js"(e,r){"use strict";var t=da(),i=cn().BADNUM,a=hc(),o=Qd(),s=nh();function l(n){return n&&typeof n=="string"}r.exports=function(u,c){var f=c._length,h=new Array(f),d;c.geojson?d=function(_){return l(_)||t(_)}:d=l;for(var p=0;p<f;p++){var g=h[p]={},m=c.locations[p],y=c.z[p];d(m)&&t(y)?(g.loc=m,g.z=y):(g.loc=null,g.z=i),g.index=p}return o(h,c),a(u,c,{vals:c.z,containerStr:"",cLetter:"z"}),s(h,c),h}}}),A4=de({"src/traces/choropleth/style.js"(e,r){"use strict";var t=Yr(),i=ta(),a=hn(),o=ks();function s(u,c){c&&l(u,c)}function l(u,c){var f=c[0].trace,h=c[0].node3,d=h.selectAll(".choroplethlocation"),p=f.marker||{},g=p.line||{},m=o.makeColorScaleFuncFromTrace(f);d.each(function(y){t.select(this).attr("fill",m(y.z)).call(i.stroke,y.mlc||g.color).call(a.dashLine,"",y.mlw||g.width||0).style("opacity",p.opacity)}),a.selectedPointStyle(d,f)}function n(u,c){var f=c[0].node3,h=c[0].trace;h.selectedpoints?a.selectedPointStyle(f.selectAll(".choroplethlocation"),h):l(u,c)}r.exports={style:s,styleOnSelect:n}}}),M4=de({"src/traces/choropleth/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=Fp(),o=_4().getTopojsonFeatures,s=vd().findExtremes,l=A4().style;function n(f,h,d){var p=h.layers.backplot.select(".choroplethlayer");i.makeTraceGroups(p,d,"trace choropleth").each(function(g){var m=t.select(this),y=m.selectAll("path.choroplethlocation").data(i.identity);y.enter().append("path").classed("choroplethlocation",!0),y.exit().remove(),l(f,g)})}function u(f,h){var d=f[0].trace,p=h[d.geo],g=p._subplot,m=d.locationmode,y=d._length,_=m==="geojson-id"?a.extractTraceFeature(f):o(d,g.topojson);let v=a.fitGeojsonBbox(d,p);for(var x=[],S=[],M=0;M<y;M++){var C=f[M],w=m==="geojson-id"?C.fOut:a.locationToFeature(m,C.loc,_);if(w){if(C.geojson=w,C.ct=w.properties.ct,C._polygons=a.feature2polygons(w),!v){let A=a.computeBbox(w);if(A){let[b,E,T,F]=A;x.push(b,T),S.push(E,F)}}}else C.geojson=null}if(v){let[A,b,E,T]=v;x=[A,E],S=[b,T]}var k={padded:!0};d._extremes.lon=s(p.lonaxis._ax,x,k),d._extremes.lat=s(p.lataxis._ax,S,k)}function c(f,h){let d=a.fitGeojsonCoords(f[0].trace,h);if(d.length)return d;let p=[];for(let g of f)g.geojson&&p.push(a.coordsOf(g.geojson));return p.flat()}r.exports={calcGeoJSON:u,fitCoords:c,plot:n}}}),d7=de({"src/traces/choropleth/hover.js"(e,r){"use strict";var t=nn(),i=y_(),a=Qt().fillText,{ANTIMERIDIAN_LON_SHIFT:o}=Fp();r.exports=function(n,u,c){var f=n.cd,h=f[0].trace,d=n.subplot,p,g,m,y,_=[u,c];let v=[u+o,c];for(g=0;g<f.length;g++)if(p=f[g],y=!1,p._polygons){for(m=0;m<p._polygons.length;m++)p._polygons[m].contains(_)&&(y=!y),p._polygons[m].contains(v)&&(y=!y);if(y)break}if(!(!y||!p))return n.x0=n.x1=n.xa.c2p(p.ct),n.y0=n.y1=n.ya.c2p(p.ct),n.index=p.index,n.location=p.loc,n.z=p.z,n.zLabel=t.tickText(d.mockAxis,d.mockAxis.c2l(p.z),"hover").text,n.hovertemplate=p.hovertemplate,s(n,h,p),[n]};function s(l,n,u){if(!n.hovertemplate){var c=u.hi||n.hoverinfo,f=String(u.loc),h=c==="all"?i.hoverinfo.flags:c.split("+"),d=h.indexOf("name")!==-1,p=h.indexOf("location")!==-1,g=h.indexOf("z")!==-1,m=h.indexOf("text")!==-1,y=!d&&p,_=[];y?l.nameOverride=f:(d&&(l.nameOverride=n.name),p&&_.push(f)),g&&_.push(l.zLabel),m&&a(u,n,_),l.extraText=_.join("<br>")}}}}),p7=de({"src/traces/choropleth/event_data.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){i.location=a.location,i.z=a.z;var n=s[l];return n.fIn&&n.fIn.properties&&(i.properties=n.fIn.properties),i.ct=n.ct,i}}}),v7=de({"src/traces/choropleth/select.js"(e,r){"use strict";r.exports=function(i,a){var o=i.cd,s=i.xaxis,l=i.yaxis,n=[],u,c,f,h,d;if(a===!1)for(u=0;u<o.length;u++)o[u].selected=0;else for(u=0;u<o.length;u++)c=o[u],f=c.ct,f&&(h=s.c2p(f),d=l.c2p(f),a.contains([h,d],null,u,i)?(n.push({pointNumber:u,lon:f[0],lat:f[1]}),c.selected=1):c.selected=0);return n}}}),aX=de({"src/traces/choropleth/index.js"(e,r){"use strict";r.exports={attributes:y_(),supplyDefaults:iX(),colorbar:b1(),calc:h7(),calcGeoJSON:M4().calcGeoJSON,fitCoords:M4().fitCoords,plot:M4().plot,style:A4().style,styleOnSelect:A4().styleOnSelect,hoverPoints:d7(),eventData:p7(),selectPoints:v7(),moduleType:"trace",name:"choropleth",basePlotModule:f7(),categories:["geo","noOpacity","showLegend"],meta:{}}}}),nX=de({"lib/choropleth.js"(e,r){"use strict";r.exports=aX()}}),S4=de({"src/traces/scattergl/hover.js"(e,r){"use strict";var t=Ma(),i=Qt(),a=m1(),o=hn();function s(n,u,c,f){var h=n.cd,d=h[0].t,p=h[0].trace,g=n.xa,m=n.ya,y=d.x,_=d.y,v=g.c2p(u),x=m.c2p(c),S=n.distance,M;if(d.tree){var C=g.p2c(v-S),w=g.p2c(v+S),k=m.p2c(x-S),A=m.p2c(x+S);f==="x"?M=d.tree.range(Math.min(C,w),Math.min(m._rl[0],m._rl[1]),Math.max(C,w),Math.max(m._rl[0],m._rl[1])):M=d.tree.range(Math.min(C,w),Math.min(k,A),Math.max(C,w),Math.max(k,A))}else M=d.ids;var b,E,T,F,D,R,P,z,I,L=S;if(f==="x"){var B=!!p.xperiodalignment,O=!!p.yperiodalignment;for(D=0;D<M.length;D++){if(b=M[D],T=y[b],R=Math.abs(g.c2p(T)-v),B){var G=g.c2p(p._xStarts[b]),W=g.c2p(p._xEnds[b]);R=v>=Math.min(G,W)&&v<=Math.max(G,W)?0:1/0}if(R<L){if(L=R,F=_[b],P=m.c2p(F)-x,O){var X=m.c2p(p._yStarts[b]),Z=m.c2p(p._yEnds[b]);P=x>=Math.min(X,Z)&&x<=Math.max(X,Z)?0:1/0}I=Math.sqrt(R*R+P*P),E=M[D]}}}else for(D=M.length-1;D>-1;D--)b=M[D],T=y[b],F=_[b],R=g.c2p(T)-v,P=m.c2p(F)-x,z=Math.sqrt(R*R+P*P),z<L&&(L=I=z,E=b);return n.index=E,n.distance=L,n.dxy=I,E===void 0?[n]:[l(n,y,_,p)]}function l(n,u,c,f){var h=n.xa,d=n.ya,p=n.distance,g=n.dxy,m=n.index,y={pointNumber:m,x:u[m],y:c[m]};y.tx=i.isArrayOrTypedArray(f.text)?f.text[m]:f.text,y.htx=Array.isArray(f.hovertext)?f.hovertext[m]:f.hovertext,y.data=Array.isArray(f.customdata)?f.customdata[m]:f.customdata,y.tp=Array.isArray(f.textposition)?f.textposition[m]:f.textposition;var _=f.textfont;_&&(y.ts=i.isArrayOrTypedArray(_.size)?_.size[m]:_.size,y.tc=i.isArrayOrTypedArray(_.color)?_.color[m]:_.color,y.tf=Array.isArray(_.family)?_.family[m]:_.family,y.tw=Array.isArray(_.weight)?_.weight[m]:_.weight,y.ty=Array.isArray(_.style)?_.style[m]:_.style,y.tv=Array.isArray(_.variant)?_.variant[m]:_.variant);var v=f.marker;v&&(y.ms=i.isArrayOrTypedArray(v.size)?v.size[m]:v.size,y.mo=i.isArrayOrTypedArray(v.opacity)?v.opacity[m]:v.opacity,y.mx=i.isArrayOrTypedArray(v.symbol)?v.symbol[m]:v.symbol,y.ma=i.isArrayOrTypedArray(v.angle)?v.angle[m]:v.angle,y.mc=i.isArrayOrTypedArray(v.color)?v.color[m]:v.color,y.mcc=o.tryColorscale(v,"")(y.mc));var x=v&&v.line;x&&(y.mlc=Array.isArray(x.color)?x.color[m]:x.color,y.mlw=i.isArrayOrTypedArray(x.width)?x.width[m]:x.width);var S=v&&v.gradient;S&&S.type!=="none"&&(y.mgt=Array.isArray(S.type)?S.type[m]:S.type,y.mgc=Array.isArray(S.color)?S.color[m]:S.color);var M=h.c2p(y.x,!0),C=d.c2p(y.y,!0),w=y.mrc||1,k=f.hoverlabel;k&&(y.hbg=Array.isArray(k.bgcolor)?k.bgcolor[m]:k.bgcolor,y.hbc=Array.isArray(k.bordercolor)?k.bordercolor[m]:k.bordercolor,y.hts=i.isArrayOrTypedArray(k.font.size)?k.font.size[m]:k.font.size,y.htc=Array.isArray(k.font.color)?k.font.color[m]:k.font.color,y.htf=Array.isArray(k.font.family)?k.font.family[m]:k.font.family,y.hnl=i.isArrayOrTypedArray(k.namelength)?k.namelength[m]:k.namelength);var A=f.hoverinfo;A&&(y.hi=Array.isArray(A)?A[m]:A);var b=f.hovertemplate;b&&(y.ht=Array.isArray(b)?b[m]:b);var E={};E[n.index]=y;var T=f._origX,F=f._origY,D=i.extendFlat({},n,{color:a(f,y),x0:M-w,x1:M+w,xLabelVal:T?T[m]:y.x,y0:C-w,y1:C+w,yLabelVal:F?F[m]:y.y,cd:E,distance:p,spikeDistance:g,hovertemplate:y.ht});return y.htx?D.text=y.htx:y.tx?D.text=y.tx:f.text&&(D.text=f.text),i.fillText(y,f,D),t.getComponentMethod("errorbars","hoverInfo")(y,f,D),D}r.exports={hoverPoints:s,calcHover:l}}}),E0=de({"src/traces/scattergl/constants.js"(e,r){"use strict";var t=20;r.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:t,SYMBOL_STROKE:t/20,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}}}),__=de({"src/traces/scattergl/attributes.js"(e,r){"use strict";var t=ri(),i=us(),a=Kd(),o=tl(),s=Ns().axisHoverFormat,l=cs(),n=(gv(),ti(c0)).default,u=fn().extendFlat,c=Ps().overrideAll,f=E0().DASHES,h=o.line,d=o.marker,p=d.line,g=r.exports=c({x:o.x,x0:o.x0,dx:o.dx,y:o.y,y0:o.y0,dy:o.dy,xperiod:o.xperiod,yperiod:o.yperiod,xperiod0:o.xperiod0,yperiod0:o.yperiod0,xperiodalignment:o.xperiodalignment,yperiodalignment:o.yperiodalignment,xhoverformat:s("x"),yhoverformat:s("y"),text:o.text,hovertext:o.hovertext,textposition:o.textposition,textfont:i({noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0,editType:"calc",colorEditType:"style",arrayOk:!0,noNumericWeightValues:!0,variantValues:["normal","small-caps"]}),mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"]},line:{color:h.color,width:h.width,shape:{valType:"enumerated",values:["linear","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},dash:{valType:"enumerated",values:n(f),dflt:"solid"}},marker:u({},l("marker"),{symbol:d.symbol,angle:d.angle,size:d.size,sizeref:d.sizeref,sizemin:d.sizemin,sizemode:d.sizemode,opacity:d.opacity,colorbar:d.colorbar,line:u({},l("marker.line"),{width:p.width})}),connectgaps:o.connectgaps,fill:u({},o.fill,{dflt:"none"}),fillcolor:a(),selected:{marker:o.selected.marker,textfont:o.selected.textfont},unselected:{marker:o.unselected.marker,textfont:o.unselected.textfont},opacity:t.opacity},"calc","nested");g.x.editType=g.y.editType=g.x0.editType=g.y0.editType="calc+clearAxisTypes",g.hovertemplate=o.hovertemplate,g.hovertemplatefallback=o.hovertemplatefallback,g.texttemplate=o.texttemplate,g.texttemplatefallback=o.texttemplatefallback}}),E4=de({"src/traces/scattergl/helpers.js"(e){"use strict";var r=E0();e.isOpenSymbol=function(t){return typeof t=="string"?r.OPEN_RE.test(t):t%200>100},e.isDotSymbol=function(t){return typeof t=="string"?r.DOT_RE.test(t):t>200}}}),oX=de({"src/traces/scattergl/defaults.js"(e,r){"use strict";var t=Qt(),i=Ma(),a=E4(),o=__(),s=Zd(),l=bs(),n=wv(),u=gd(),c=Nh(),f=yd(),h=Jd(),d=_d();r.exports=function(g,m,y,_){function v(b,E){return t.coerce(g,m,o,b,E)}var x=g.marker?a.isOpenSymbol(g.marker.symbol):!1,S=l.isBubble(g),M=n(g,m,_,v);if(!M){m.visible=!1;return}u(g,m,_,v),v("xhoverformat"),v("yhoverformat");var C=M<s.PTS_LINESONLY?"lines+markers":"lines";v("text"),v("hovertext"),v("hovertemplate"),v("hovertemplatefallback"),v("mode",C),l.hasMarkers(m)&&(c(g,m,y,_,v,{noAngleRef:!0,noLineDash:!0,noStandOff:!0}),v("marker.line.width",x||S?1:0)),l.hasLines(m)&&(v("connectgaps"),f(g,m,y,_,v),v("line.shape")),l.hasText(m)&&(v("texttemplate"),v("texttemplatefallback"),d(g,m,_,v,{noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0}));var w=(m.line||{}).color,k=(m.marker||{}).color;v("fill"),m.fill!=="none"&&h(g,m,y,v);var A=i.getComponentMethod("errorbars","supplyDefaults");A(g,m,w||k||y,{axis:"y"}),A(g,m,w||k||y,{axis:"x",inherit:"y"}),t.coerceSelectionMarkerOpacity(m,v)}}}),sX=de({"src/traces/scattergl/format_labels.js"(e,r){"use strict";var t=Bw();r.exports=function(a,o,s){var l=a.i;return"x"in a||(a.x=o._x[l]),"y"in a||(a.y=o._y[l]),t(a,o,s)}}}),lX=de({"node_modules/binary-search-bounds/search-bounds.js"(e,r){"use strict";function t(n,u,c,f,h){for(var d=h+1;f<=h;){var p=f+h>>>1,g=n[p],m=c!==void 0?c(g,u):g-u;m>=0?(d=p,h=p-1):f=p+1}return d}function i(n,u,c,f,h){for(var d=h+1;f<=h;){var p=f+h>>>1,g=n[p],m=c!==void 0?c(g,u):g-u;m>0?(d=p,h=p-1):f=p+1}return d}function a(n,u,c,f,h){for(var d=f-1;f<=h;){var p=f+h>>>1,g=n[p],m=c!==void 0?c(g,u):g-u;m<0?(d=p,f=p+1):h=p-1}return d}function o(n,u,c,f,h){for(var d=f-1;f<=h;){var p=f+h>>>1,g=n[p],m=c!==void 0?c(g,u):g-u;m<=0?(d=p,f=p+1):h=p-1}return d}function s(n,u,c,f,h){for(;f<=h;){var d=f+h>>>1,p=n[d],g=c!==void 0?c(p,u):p-u;if(g===0)return d;g<=0?f=d+1:h=d-1}return-1}function l(n,u,c,f,h,d){return typeof c=="function"?d(n,u,c,f===void 0?0:f|0,h===void 0?n.length-1:h|0):d(n,u,void 0,c===void 0?0:c|0,f===void 0?n.length-1:f|0)}r.exports={ge:function(n,u,c,f,h){return l(n,u,c,f,h,t)},gt:function(n,u,c,f,h){return l(n,u,c,f,h,i)},lt:function(n,u,c,f,h){return l(n,u,c,f,h,a)},le:function(n,u,c,f,h){return l(n,u,c,f,h,o)},eq:function(n,u,c,f,h){return l(n,u,c,f,h,s)}}}}),m7=de({"node_modules/clamp/index.js"(e,r){r.exports=t;function t(i,a,o){return a<o?i<a?a:i>o?o:i:i<o?o:i>a?a:i}}}),rp=de({"node_modules/pick-by-alias/index.js"(e,r){"use strict";r.exports=function(o,s,l){var n={},u,c;if(typeof s=="string"&&(s=i(s)),Array.isArray(s)){var f={};for(c=0;c<s.length;c++)f[s[c]]=!0;s=f}for(u in s)s[u]=i(s[u]);var h={};for(u in s){var d=s[u];if(Array.isArray(d))for(c=0;c<d.length;c++){var p=d[c];if(l&&(h[p]=!0),p in o){if(n[u]=o[p],l)for(var g=c;g<d.length;g++)h[d[g]]=!0;break}}else u in o&&(s[u]&&(n[u]=o[u]),l&&(h[u]=!0))}if(l)for(u in o)h[u]||(n[u]=o[u]);return n};var t={};function i(a){return t[a]?t[a]:(typeof a=="string"&&(a=t[a]=a.split(/\s*,\s*|\s+/)),a)}}}),z1=de({"node_modules/parse-rect/index.js"(e,r){"use strict";var t=rp();r.exports=i;function i(a){var o;return arguments.length>1&&(a=arguments),typeof a=="string"?a=a.split(/\s/).map(parseFloat):typeof a=="number"&&(a=[a]),a.length&&typeof a[0]=="number"?a.length===1?o={width:a[0],height:a[0],x:0,y:0}:a.length===2?o={width:a[0],height:a[1],x:0,y:0}:o={x:a[0],y:a[1],width:a[2]-a[0]||0,height:a[3]-a[1]||0}:a&&(a=t(a,{left:"x l left Left",top:"y t top Top",width:"w width W Width",height:"h height W Width",bottom:"b bottom Bottom",right:"r right Right"}),o={x:a.left||0,y:a.top||0},a.width==null?a.right?o.width=a.right-o.x:o.width=0:o.width=a.width,a.height==null?a.bottom?o.height=a.bottom-o.y:o.height=0:o.height=a.height),o}}}),qv=de({"node_modules/array-bounds/index.js"(e,r){"use strict";r.exports=t;function t(i,a){if(!i||i.length==null)throw Error("Argument should be an array");a==null?a=1:a=Math.floor(a);for(var o=Array(a*2),s=0;s<a;s++){for(var l=-1/0,n=1/0,u=s,c=i.length;u<c;u+=a)i[u]>l&&(l=i[u]),i[u]<n&&(n=i[u]);o[s]=n,o[a+s]=l}return o}}}),uX=de({"node_modules/defined/index.js"(e,r){"use strict";r.exports=function(){for(var i=0;i<arguments.length;i++)if(typeof arguments[i]<"u")return arguments[i]}}}),k4=de({"node_modules/dtype/index.js"(e,r){r.exports=function(t){switch(t){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}}}),Vv=de({"node_modules/flatten-vertex-data/index.js"(e,r){var t=k4();r.exports=i;function i(a,o,s){if(!a)throw new TypeError("must specify data as first parameter");if(s=+(s||0)|0,Array.isArray(a)&&a[0]&&typeof a[0][0]=="number"){var l=a[0].length,n=a.length*l,u,c,f,h;(!o||typeof o=="string")&&(o=new(t(o||"float32"))(n+s));var d=o.length-s;if(n!==d)throw new Error("source length "+n+" ("+l+"x"+a.length+") does not match destination length "+d);for(u=0,f=s;u<a.length;u++)for(c=0;c<l;c++)o[f++]=a[u][c]===null?NaN:a[u][c]}else if(!o||typeof o=="string"){var p=t(o||"float32");if(Array.isArray(a)||o==="array")for(o=new p(a.length+s),u=0,f=s,h=o.length;f<h;f++,u++)o[f]=a[u]===null?NaN:a[u];else s===0?o=new p(a):(o=new p(a.length+s),o.set(a,s))}else o.set(a,s);return o}}}),cX=de({"node_modules/is-obj/index.js"(e,r){"use strict";r.exports=function(t){var i=typeof t;return t!==null&&(i==="object"||i==="function")}}}),fX=de({"node_modules/math-log2/index.js"(e,r){"use strict";r.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}}}),hX=de({"node_modules/@plotly/point-cluster/quad.js"(e,r){"use strict";var t=lX(),i=m7(),a=z1(),o=qv(),s=rp(),l=uX(),n=Vv(),u=cX(),c=k4(),f=fX(),h=1073741824;r.exports=function(g,m){m||(m={}),g=n(g,"float64"),m=s(m,{bounds:"range bounds dataBox databox",maxDepth:"depth maxDepth maxdepth level maxLevel maxlevel levels",dtype:"type dtype format out dst output destination"});let y=l(m.maxDepth,255),_=l(m.bounds,o(g,2));_[0]===_[2]&&_[2]++,_[1]===_[3]&&_[3]++;let v=d(g,_),x=g.length>>>1,S;m.dtype||(m.dtype="array"),typeof m.dtype=="string"?S=new(c(m.dtype))(x):m.dtype&&(S=m.dtype,Array.isArray(S)&&(S.length=x));for(let D=0;D<x;++D)S[D]=D;let M=[],C=[],w=[],k=[];b(0,0,1,S,0,1);let A=0;for(let D=0;D<M.length;D++){let R=M[D];if(S.set)S.set(R,A);else for(let z=0,I=R.length;z<I;z++)S[z+A]=R[z];let P=A+M[D].length;k[D]=[A,P],A=P}return S.range=E,S;function b(D,R,P,z,I,L){if(!z.length)return null;let B=M[I]||(M[I]=[]),O=w[I]||(w[I]=[]),G=C[I]||(C[I]=[]),W=B.length;if(I++,I>y||L>h){for(let V=0;V<z.length;V++)B.push(z[V]),O.push(L),G.push(null,null,null,null);return W}if(B.push(z[0]),O.push(L),z.length<=1)return G.push(null,null,null,null),W;let X=P*.5,Z=D+X,J=R+X,N=[],H=[],$=[],U=[];for(let V=1,j=z.length;V<j;V++){let q=z[V],Y=v[q*2],K=v[q*2+1];Y<Z?K<J?N.push(q):H.push(q):K<J?$.push(q):U.push(q)}return L<<=2,G.push(b(D,R,X,N,I,L),b(D,J,X,H,I,L+1),b(Z,R,X,$,I,L+2),b(Z,J,X,U,I,L+3)),W}function E(...D){let R;if(u(D[D.length-1])){let $=D.pop();!D.length&&($.x!=null||$.l!=null||$.left!=null)&&(D=[$],R={}),R=s($,{level:"level maxLevel",d:"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize",lod:"lod details ranges offsets"})}else R={};D.length||(D=_);let P=a(...D),[z,I,L,B]=[Math.min(P.x,P.x+P.width),Math.min(P.y,P.y+P.height),Math.max(P.x,P.x+P.width),Math.max(P.y,P.y+P.height)],[O,G,W,X]=d([z,I,L,B],_),Z=l(R.level,M.length);if(R.d!=null){let $;typeof R.d=="number"?$=[R.d,R.d]:R.d.length&&($=R.d),Z=Math.min(Math.max(Math.ceil(-f(Math.abs($[0])/(_[2]-_[0]))),Math.ceil(-f(Math.abs($[1])/(_[3]-_[1])))),Z)}if(Z=Math.min(Z,M.length),R.lod)return T(O,G,W,X,Z);let J=[];N(0,0,1,0,0,1);function N($,U,V,j,q,Y){if(q===null||Y===null)return;let K=$+V,te=U+V;if(O>K||G>te||W<$||X<U||j>=Z||q===Y)return;let ne=M[j];Y===void 0&&(Y=ne.length);for(let ee=q;ee<Y;ee++){let ie=ne[ee],Q=g[ie*2],ue=g[ie*2+1];Q>=z&&Q<=L&&ue>=I&&ue<=B&&J.push(ie)}let se=C[j],le=se[q*4+0],ce=se[q*4+1],pe=se[q*4+2],xe=se[q*4+3],ye=H(se,q+1),fe=V*.5,ae=j+1;N($,U,fe,ae,le,ce||pe||xe||ye),N($,U+fe,fe,ae,ce,pe||xe||ye),N($+fe,U,fe,ae,pe,xe||ye),N($+fe,U+fe,fe,ae,xe,ye)}function H($,U){let V=null,j=0;for(;V===null;)if(V=$[U*4+j],j++,j>$.length)return null;return V}return J}function T(D,R,P,z,I){let L=[];for(let B=0;B<I;B++){let O=w[B],G=k[B][0],W=F(D,R,B),X=F(P,z,B),Z=t.ge(O,W),J=t.gt(O,X,Z,O.length-1);L[B]=[Z+G,J+G]}return L}function F(D,R,P){let z=1,I=.5,L=.5,B=.5;for(let O=0;O<P;O++)z<<=2,z+=D<I?R<L?0:1:R<L?2:3,B*=.5,I+=D<I?-B:B,L+=R<L?-B:B;return z}};function d(p,g){let[m,y,_,v]=g,x=1/(_-m),S=1/(v-y),M=new Array(p.length);for(let C=0,w=p.length/2;C<w;C++)M[2*C]=i((p[2*C]-m)*x,0,1),M[2*C+1]=i((p[2*C+1]-y)*S,0,1);return M}}}),C4=de({"node_modules/@plotly/point-cluster/index.js"(e,r){"use strict";r.exports=hX()}}),dX=de({"node_modules/svg-path-bounds/node_modules/parse-svg-path/index.js"(e,r){r.exports=a;var t={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i=/([astvzqmhlc])([^astvzqmhlc]*)/ig;function a(l){var n=[];return l.replace(i,function(u,c,f){var h=c.toLowerCase();for(f=s(f),h=="m"&&f.length>2&&(n.push([c].concat(f.splice(0,2))),h="l",c=c=="m"?"l":"L");;){if(f.length==t[h])return f.unshift(c),n.push(f);if(f.length<t[h])throw new Error("malformed path data");n.push([c].concat(f.splice(0,t[h])))}}),n}var o=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/ig;function s(l){var n=l.match(o);return n?n.map(Number):[]}}}),pX=de({"node_modules/abs-svg-path/index.js"(e,r){r.exports=t;function t(i){var a=0,o=0,s=0,l=0;return i.map(function(n){n=n.slice();var u=n[0],c=u.toUpperCase();if(u!=c)switch(n[0]=c,u){case"a":n[6]+=s,n[7]+=l;break;case"v":n[1]+=l;break;case"h":n[1]+=s;break;default:for(var f=1;f<n.length;)n[f++]+=s,n[f++]+=l}switch(c){case"Z":s=a,l=o;break;case"H":s=n[1];break;case"V":l=n[1];break;case"M":s=a=n[1],l=o=n[2];break;default:s=n[n.length-2],l=n[n.length-1]}return n})}}}),vX=de({"node_modules/svg-arc-to-cubic-bezier/cjs/index.js"(e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t=(function(){function u(c,f){var h=[],d=!0,p=!1,g=void 0;try{for(var m=c[Symbol.iterator](),y;!(d=(y=m.next()).done)&&(h.push(y.value),!(f&&h.length===f));d=!0);}catch(_){p=!0,g=_}finally{try{!d&&m.return&&m.return()}finally{if(p)throw g}}return h}return function(c,f){if(Array.isArray(c))return c;if(Symbol.iterator in Object(c))return u(c,f);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),i=Math.PI*2,a=function(c,f,h,d,p,g,m){var y=c.x,_=c.y;y*=f,_*=h;var v=d*y-p*_,x=p*y+d*_;return{x:v+g,y:x+m}},o=function(c,f){var h=f===1.5707963267948966?.551915024494:f===-1.5707963267948966?-.551915024494:1.3333333333333333*Math.tan(f/4),d=Math.cos(c),p=Math.sin(c),g=Math.cos(c+f),m=Math.sin(c+f);return[{x:d-p*h,y:p+d*h},{x:g+m*h,y:m-g*h},{x:g,y:m}]},s=function(c,f,h,d){var p=c*d-f*h<0?-1:1,g=c*h+f*d;return g>1&&(g=1),g<-1&&(g=-1),p*Math.acos(g)},l=function(c,f,h,d,p,g,m,y,_,v,x,S){var M=Math.pow(p,2),C=Math.pow(g,2),w=Math.pow(x,2),k=Math.pow(S,2),A=M*C-M*k-C*w;A<0&&(A=0),A/=M*k+C*w,A=Math.sqrt(A)*(m===y?-1:1);var b=A*p/g*S,E=A*-g/p*x,T=v*b-_*E+(c+h)/2,F=_*b+v*E+(f+d)/2,D=(x-b)/p,R=(S-E)/g,P=(-x-b)/p,z=(-S-E)/g,I=s(1,0,D,R),L=s(D,R,P,z);return y===0&&L>0&&(L-=i),y===1&&L<0&&(L+=i),[T,F,I,L]},n=function(c){var f=c.px,h=c.py,d=c.cx,p=c.cy,g=c.rx,m=c.ry,y=c.xAxisRotation,_=y===void 0?0:y,v=c.largeArcFlag,x=v===void 0?0:v,S=c.sweepFlag,M=S===void 0?0:S,C=[];if(g===0||m===0)return[];var w=Math.sin(_*i/360),k=Math.cos(_*i/360),A=k*(f-d)/2+w*(h-p)/2,b=-w*(f-d)/2+k*(h-p)/2;if(A===0&&b===0)return[];g=Math.abs(g),m=Math.abs(m);var E=Math.pow(A,2)/Math.pow(g,2)+Math.pow(b,2)/Math.pow(m,2);E>1&&(g*=Math.sqrt(E),m*=Math.sqrt(E));var T=l(f,h,d,p,g,m,x,M,w,k,A,b),F=t(T,4),D=F[0],R=F[1],P=F[2],z=F[3],I=Math.abs(z)/(i/4);Math.abs(1-I)<1e-7&&(I=1);var L=Math.max(Math.ceil(I),1);z/=L;for(var B=0;B<L;B++)C.push(o(P,z)),P+=z;return C.map(function(O){var G=a(O[0],g,m,k,w,D,R),W=G.x,X=G.y,Z=a(O[1],g,m,k,w,D,R),J=Z.x,N=Z.y,H=a(O[2],g,m,k,w,D,R),$=H.x,U=H.y;return{x1:W,y1:X,x2:J,y2:N,x:$,y:U}})};e.default=n,r.exports=e.default}}),mX=de({"node_modules/normalize-svg-path/index.js"(e,r){"use strict";r.exports=i;var t=vX();function i(s){for(var l,n=[],u=0,c=0,f=0,h=0,d=null,p=null,g=0,m=0,y=0,_=s.length;y<_;y++){var v=s[y],x=v[0];switch(x){case"M":f=v[1],h=v[2];break;case"A":var S=t({px:g,py:m,cx:v[6],cy:v[7],rx:v[1],ry:v[2],xAxisRotation:v[3],largeArcFlag:v[4],sweepFlag:v[5]});if(!S.length)continue;for(var M=0,C;M<S.length;M++)C=S[M],v=["C",C.x1,C.y1,C.x2,C.y2,C.x,C.y],M<S.length-1&&n.push(v);break;case"S":var w=g,k=m;(l=="C"||l=="S")&&(w+=w-u,k+=k-c),v=["C",w,k,v[1],v[2],v[3],v[4]];break;case"T":l=="Q"||l=="T"?(d=g*2-d,p=m*2-p):(d=g,p=m),v=o(g,m,d,p,v[1],v[2]);break;case"Q":d=v[1],p=v[2],v=o(g,m,v[1],v[2],v[3],v[4]);break;case"L":v=a(g,m,v[1],v[2]);break;case"H":v=a(g,m,v[1],m);break;case"V":v=a(g,m,g,v[1]);break;case"Z":v=a(g,m,f,h);break}l=x,g=v[v.length-2],m=v[v.length-1],v.length>4?(u=v[v.length-4],c=v[v.length-3]):(u=g,c=m),n.push(v)}return n}function a(s,l,n,u){return["C",s,l,n,u,n,u]}function o(s,l,n,u,c,f){return["C",s/3+2/3*n,l/3+2/3*u,c/3+2/3*n,f/3+2/3*u,c,f]}}}),g7=de({"node_modules/is-svg-path/index.js"(e,r){"use strict";r.exports=function(i){return typeof i!="string"?!1:(i=i.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(i)&&/[\dz]$/i.test(i)&&i.length>4))}}}),gX=de({"node_modules/svg-path-bounds/index.js"(e,r){"use strict";var t=dX(),i=pX(),a=mX(),o=g7();r.exports=s;function s(l){if(Array.isArray(l)&&l.length===1&&typeof l[0]=="string"&&(l=l[0]),typeof l=="string"){if(!o(l))throw Error("String is not an SVG path.");l=t(l)}if(!Array.isArray(l))throw Error("Argument should be a string or an array of path segments.");if(l=i(l),l=a(l),!l.length)return[0,0,0,0];for(var n=[1/0,1/0,-1/0,-1/0],u=0,c=l.length;u<c;u++)for(var f=l[u].slice(1),h=0;h<f.length;h+=2)f[h+0]<n[0]&&(n[0]=f[h+0]),f[h+1]<n[1]&&(n[1]=f[h+1]),f[h+0]>n[2]&&(n[2]=f[h+0]),f[h+1]>n[3]&&(n[3]=f[h+1]);return n}}}),yX=de({"node_modules/bitmap-sdf/index.js"(e,r){"use strict";r.exports=i;var t=1e20;function i(s,l){l||(l={});var n=l.cutoff==null?.25:l.cutoff,u=l.radius==null?8:l.radius,c=l.channel||0,f,h,d,p,g,m,y,_,v,x,S;if(ArrayBuffer.isView(s)||Array.isArray(s)){if(!l.width||!l.height)throw Error("For raw data width and height should be provided by options");f=l.width,h=l.height,p=s,l.stride?m=l.stride:m=Math.floor(s.length/f/h)}else window.HTMLCanvasElement&&s instanceof window.HTMLCanvasElement?(_=s,y=_.getContext("2d"),f=_.width,h=_.height,v=y.getImageData(0,0,f,h),p=v.data,m=4):window.CanvasRenderingContext2D&&s instanceof window.CanvasRenderingContext2D?(_=s.canvas,y=s,f=_.width,h=_.height,v=y.getImageData(0,0,f,h),p=v.data,m=4):window.ImageData&&s instanceof window.ImageData&&(v=s,f=s.width,h=s.height,p=v.data,m=4);if(d=Math.max(f,h),window.Uint8ClampedArray&&p instanceof window.Uint8ClampedArray||window.Uint8Array&&p instanceof window.Uint8Array)for(g=p,p=Array(f*h),x=0,S=Math.floor(g.length/m);x<S;x++)p[x]=g[x*m+c]/255;else if(m!==1)throw Error("Raw data can have only 1 value per pixel");var M=Array(f*h),C=Array(f*h),w=Array(d),k=Array(d),A=Array(d+1),b=Array(d);for(x=0,S=f*h;x<S;x++){var E=p[x];M[x]=E===1?0:E===0?t:Math.pow(Math.max(0,.5-E),2),C[x]=E===1?t:E===0?0:Math.pow(Math.max(0,E-.5),2)}a(M,f,h,w,k,b,A),a(C,f,h,w,k,b,A);var T=window.Float32Array?new Float32Array(f*h):new Array(f*h);for(x=0,S=f*h;x<S;x++)T[x]=Math.min(Math.max(1-((M[x]-C[x])/u+n),0),1);return T}function a(s,l,n,u,c,f,h){for(var d=0;d<l;d++){for(var p=0;p<n;p++)u[p]=s[p*l+d];for(o(u,c,f,h,n),p=0;p<n;p++)s[p*l+d]=c[p]}for(p=0;p<n;p++){for(d=0;d<l;d++)u[d]=s[p*l+d];for(o(u,c,f,h,l),d=0;d<l;d++)s[p*l+d]=Math.sqrt(c[d])}}function o(s,l,n,u,c){n[0]=0,u[0]=-t,u[1]=+t;for(var f=1,h=0;f<c;f++){for(var d=(s[f]+f*f-(s[n[h]]+n[h]*n[h]))/(2*f-2*n[h]);d<=u[h];)h--,d=(s[f]+f*f-(s[n[h]]+n[h]*n[h]))/(2*f-2*n[h]);h++,n[h]=f,u[h]=d,u[h+1]=+t}for(f=0,h=0;f<c;f++){for(;u[h+1]<f;)h++;l[f]=(f-n[h])*(f-n[h])+s[n[h]]}}}}),y7={};Mr(y7,{default:()=>_X});function _X(e,r={}){if(!(0,x7.default)(e))throw Error("Invalid SVG path");let t,i;r.shape||Array.isArray(r)?[t,i]=r.shape||r:(t=x_.width=r.width||r.w||200,i=x_.height=r.height||r.h||200);let a=Math.min(t,i),o=r.stroke||0,s=r.viewbox||r.viewBox||(0,_7.default)(e),l=[t/(s[2]-s[0]),i/(s[3]-s[1])],n=Math.min(l[0]||0,l[1]||0)/2;sh.fillStyle="black",sh.fillRect(0,0,t,i),sh.fillStyle="white",o&&(typeof o!="number"&&(o=1),sh.strokeStyle=o>0?"white":"black",sh.lineWidth=Math.abs(o)),sh.translate(t*.5,i*.5),sh.scale(n,n);let u=new Path2D(e);return sh.fill(u),o&&sh.stroke(u),sh.setTransform(1,0,0,1,0,0),(0,b7.default)(sh,{cutoff:r.cutoff!=null?r.cutoff:.5,radius:r.radius!=null?r.radius:a*.5})}var _7,x7,b7,x_,sh,xX=Ir({"node_modules/svg-path-sdf/svg-path-sdf.js"(){_7=Vr(gX()),x7=Vr(g7()),b7=Vr(yX()),x_=document.createElement("canvas"),sh=x_.getContext("2d",{willReadFrequently:!0})}}),Gv=de({"src/traces/scattergl/convert.js"(e,r){"use strict";var t=da(),i=(xX(),ti(y7)).default,{normalize:a}=ta(),o=Ma(),s=Qt(),l=s.isArrayOrTypedArray,n=hn(),u=Hs(),c=Lp().formatColor,f=bs(),h=Sy(),d=E4(),p=E0(),g=Ap().DESELECTDIM,m={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},y=sf().appendArrayPointValue;function _(z,I){var L,B={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0},O=z._context.plotGlPixelRatio;if(I.visible!==!0)return B;if(f.hasText(I)&&(B.text=v(z,I),B.textSel=C(z,I,I.selected),B.textUnsel=C(z,I,I.unselected)),f.hasMarkers(I)&&(B.marker=S(z,I),B.markerSel=M(z,I,I.selected),B.markerUnsel=M(z,I,I.unselected),!I.unselected&&l(I.marker.opacity))){var G=I.marker.opacity;for(B.markerUnsel.opacity=new Array(G.length),L=0;L<G.length;L++)B.markerUnsel.opacity[L]=g*G[L]}if(f.hasLines(I)){B.line={overlay:!0,thickness:I.line.width*O,color:I.line.color,opacity:I.opacity};var W=(p.DASHES[I.line.dash]||[1]).slice();for(L=0;L<W.length;++L)W[L]*=I.line.width*O;B.line.dashes=W}return I.error_x&&I.error_x.visible&&(B.errorX=w(I,I.error_x,O)),I.error_y&&I.error_y.visible&&(B.errorY=w(I,I.error_y,O)),I.fill&&I.fill!=="none"&&(B.fill={closed:!0,fill:I.fillcolor,thickness:0}),B}function v(z,I){var L=z._fullLayout,B=I._length,O=I.textfont,G=I.textposition,W=l(G)?G:[G],X=O.color,Z=O.size,J=O.family,N=O.weight,H=O.style,$=O.variant,U={},V,j=z._context.plotGlPixelRatio,q=I.texttemplate;if(q){U.text=[];var Y=L._d3locale,K=Array.isArray(q),te=K?Math.min(q.length,B):B,ne=K?function(ye){return q[ye]}:function(){return q};for(V=0;V<te;V++){var se={i:V},le=I._module.formatLabels(se,I,L),ce={};y(ce,I,V),U.text.push(s.texttemplateString({data:[ce,se,I._meta],fallback:I.texttemplatefallback,labels:le,locale:Y,template:ne(V)}))}}else l(I.text)&&I.text.length<B?U.text=I.text.slice():U.text=I.text;if(l(U.text))for(V=U.text.length;V<B;V++)U.text[V]="";for(U.opacity=I.opacity,U.font={},U.align=[],U.baseline=[],V=0;V<W.length;V++){var pe=W[V].split(/\s+/);switch(pe[1]){case"left":U.align.push("right");break;case"right":U.align.push("left");break;default:U.align.push(pe[1])}switch(pe[0]){case"top":U.baseline.push("bottom");break;case"bottom":U.baseline.push("top");break;default:U.baseline.push(pe[0])}}if(l(X))for(U.color=new Array(B),V=0;V<B;V++)U.color[V]=X[V];else U.color=X;if(l(Z)||Array.isArray(J)||l(N)||Array.isArray(H)||Array.isArray($))for(U.font=new Array(B),V=0;V<B;V++){var xe=U.font[V]={};xe.size=(s.isTypedArray(Z)?Z[V]:l(Z)?t(Z[V])?Z[V]:0:Z)*j,xe.family=Array.isArray(J)?J[V]:J,xe.weight=x(l(N)?N[V]:N),xe.style=Array.isArray(H)?H[V]:H,xe.variant=Array.isArray($)?$[V]:$}else U.font={size:Z*j,family:J,weight:x(N),style:H,variant:$};return U}function x(z){return z<=1e3?z>500?"bold":"normal":z}function S(z,I){var L=I._length,B=I.marker,O={},G,W=l(B.symbol),X=l(B.angle),Z=l(B.color),J=l(B.line.color),N=l(B.opacity),H=l(B.size),$=l(B.line.width),U;if(W||(U=d.isOpenSymbol(B.symbol)),W||Z||J||N||X){O.symbols=new Array(L),O.angles=new Array(L),O.colors=new Array(L),O.borderColors=new Array(L);var V=B.symbol,j=B.angle,q=c(B,B.opacity,L),Y=c(B.line,B.opacity,L);if(!l(Y[0])){var K=Y;for(Y=Array(L),G=0;G<L;G++)Y[G]=K}if(!l(q[0])){var te=q;for(q=Array(L),G=0;G<L;G++)q[G]=te}if(!l(V)){var ne=V;for(V=Array(L),G=0;G<L;G++)V[G]=ne}if(!l(j)){var se=j;for(j=Array(L),G=0;G<L;G++)j[G]=se}for(O.symbols=V,O.angles=j,O.colors=q,O.borderColors=Y,G=0;G<L;G++)W&&(U=d.isOpenSymbol(B.symbol[G])),U&&(Y[G]=q[G].slice(),q[G]=q[G].slice(),q[G][3]=0);for(O.opacity=I.opacity,O.markers=new Array(L),G=0;G<L;G++)O.markers[G]=F({mx:O.symbols[G],ma:O.angles[G]},I)}else U?(O.color=a(B.color,"uint8"),O.color[3]=0,O.borderColor=a(B.color,"uint8")):(O.color=a(B.color,"uint8"),O.borderColor=a(B.line.color,"uint8")),O.opacity=I.opacity*B.opacity,O.marker=F({mx:B.symbol,ma:B.angle},I);var le=1,ce=h(I,le),pe;if(H||$){var xe=O.sizes=new Array(L),ye=O.borderSizes=new Array(L),fe=0,ae;if(H){for(G=0;G<L;G++)xe[G]=ce(B.size[G]),fe+=xe[G];ae=fe/L}else for(pe=ce(B.size),G=0;G<L;G++)xe[G]=pe;if($)for(G=0;G<L;G++)ye[G]=B.line.width[G];else for(pe=B.line.width,G=0;G<L;G++)ye[G]=pe;O.sizeAvg=ae}else O.size=ce(B&&B.size||10),O.borderSizes=ce(B.line.width);return O}function M(z,I,L){var B=I.marker,O={};return L&&(L.marker&&L.marker.symbol?O=S(z,s.extendFlat({},B,L.marker)):L.marker&&(L.marker.size&&(O.size=L.marker.size),L.marker.color&&(O.colors=L.marker.color),L.marker.opacity!==void 0&&(O.opacity=L.marker.opacity))),O}function C(z,I,L){var B={};if(!L)return B;if(L.textfont){var O={opacity:1,text:I.text,texttemplate:I.texttemplate,textposition:I.textposition,textfont:s.extendFlat({},I.textfont)};L.textfont&&s.extendFlat(O.textfont,L.textfont),B=v(z,O)}return B}function w(z,I,L){var B={capSize:I.width*2*L,lineWidth:I.thickness*L,color:I.color};return I.copy_ystyle&&(B=z.error_y),B}var k=p.SYMBOL_SDF_SIZE,A=p.SYMBOL_SIZE,b=p.SYMBOL_STROKE,E={},T=n.symbolFuncs[0](A*.05);function F(z,I){var L=z.mx;if(L==="circle")return null;var B,O,G=n.symbolNumber(L),W=n.symbolFuncs[G%100],X=!!n.symbolNoDot[G%100],Z=!!n.symbolNoFill[G%100],J=d.isDotSymbol(L);if(z.ma&&(L+="_"+z.ma),E[L])return E[L];var N=n.getMarkerAngle(z,I);return J&&!X?B=W(A*1.1,N)+T:B=W(A,N),O=i(B,{w:k,h:k,viewBox:[-A,-A,A,A],stroke:Z?b:-b}),E[L]=O,O||null}function D(z,I,L){var B=L.length,O=B/2,G,W;if(f.hasLines(I)&&O)if(I.line.shape==="hv"){for(G=[],W=0;W<O-1;W++)isNaN(L[W*2])||isNaN(L[W*2+1])?G.push(NaN,NaN,NaN,NaN):(G.push(L[W*2],L[W*2+1]),!isNaN(L[W*2+2])&&!isNaN(L[W*2+3])?G.push(L[W*2+2],L[W*2+1]):G.push(NaN,NaN));G.push(L[B-2],L[B-1])}else if(I.line.shape==="hvh"){for(G=[],W=0;W<O-1;W++)if(isNaN(L[W*2])||isNaN(L[W*2+1])||isNaN(L[W*2+2])||isNaN(L[W*2+3]))!isNaN(L[W*2])&&!isNaN(L[W*2+1])?G.push(L[W*2],L[W*2+1]):G.push(NaN,NaN),G.push(NaN,NaN);else{var X=(L[W*2]+L[W*2+2])/2;G.push(L[W*2],L[W*2+1],X,L[W*2+1],X,L[W*2+3])}G.push(L[B-2],L[B-1])}else if(I.line.shape==="vhv"){for(G=[],W=0;W<O-1;W++)if(isNaN(L[W*2])||isNaN(L[W*2+1])||isNaN(L[W*2+2])||isNaN(L[W*2+3]))!isNaN(L[W*2])&&!isNaN(L[W*2+1])?G.push(L[W*2],L[W*2+1]):G.push(NaN,NaN),G.push(NaN,NaN);else{var Z=(L[W*2+1]+L[W*2+3])/2;G.push(L[W*2],L[W*2+1],L[W*2],Z,L[W*2+2],Z)}G.push(L[B-2],L[B-1])}else if(I.line.shape==="vh"){for(G=[],W=0;W<O-1;W++)isNaN(L[W*2])||isNaN(L[W*2+1])?G.push(NaN,NaN,NaN,NaN):(G.push(L[W*2],L[W*2+1]),!isNaN(L[W*2+2])&&!isNaN(L[W*2+3])?G.push(L[W*2],L[W*2+3]):G.push(NaN,NaN));G.push(L[B-2],L[B-1])}else G=L;var J=!1;for(W=0;W<G.length;W++)if(isNaN(G[W])){J=!0;break}var N=J||G.length>p.TOO_MANY_POINTS||f.hasMarkers(I)?"rect":"round";if(J&&I.connectgaps){var H=G[0],$=G[1];for(W=0;W<G.length;W+=2)isNaN(G[W])||isNaN(G[W+1])?(G[W]=H,G[W+1]=$):(H=G[W],$=G[W+1])}return{join:N,positions:G}}function R(z,I,L,B,O){var G=o.getComponentMethod("errorbars","makeComputeError"),W=u.getFromId(z,I.xaxis,"x"),X=u.getFromId(z,I.yaxis,"y"),Z=L.length/2,J={};function N(H,$){var U=$._id.charAt(0),V=I["error_"+U];if(V&&V.visible&&($.type==="linear"||$.type==="log")){for(var j=G(V),q={x:0,y:1}[U],Y={x:[0,1,2,3],y:[2,3,0,1]}[U],K=new Float64Array(4*Z),te=1/0,ne=-1/0,se=0,le=0;se<Z;se++,le+=4){var ce=H[se];if(t(ce)){var pe=L[se*2+q],xe=j(ce,se),ye=xe[0],fe=xe[1];if(t(ye)&&t(fe)){var ae=ce-ye,ee=ce+fe;K[le+Y[0]]=pe-$.c2l(ae),K[le+Y[1]]=$.c2l(ee)-pe,K[le+Y[2]]=0,K[le+Y[3]]=0,te=Math.min(te,ce-ye),ne=Math.max(ne,ce+fe)}}}J[U]={positions:L,errors:K,_bnds:[te,ne]}}}return N(B,W),N(O,X),J}function P(z,I,L,B){var O=I._length,G={},W;if(f.hasMarkers(I)){var X=L.font,Z=L.align,J=L.baseline;for(G.offset=new Array(O),W=0;W<O;W++){var N=B.sizes?B.sizes[W]:B.size,H=l(X)?X[W].size:X.size,$=l(Z)?Z.length>1?Z[W]:Z[0]:Z,U=l(J)?J.length>1?J[W]:J[0]:J,V=m[$],j=m[U],q=N?N/.8+1:0,Y=-j*q-j*.5;G.offset[W]=[V*q/H,Y/H]}}return G}r.exports={style:_,markerStyle:S,markerSelection:M,linePositions:D,errorBarPositions:R,textPosition:P}}}),w7=de({"src/traces/scattergl/scene_update.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){var s=o._scene,l={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},n={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return o._scene||(s=o._scene={},s.init=function(){t.extendFlat(s,n,l)},s.init(),s.update=function(c){var f=t.repeat(c,s.count);if(s.fill2d&&s.fill2d.update(f),s.scatter2d&&s.scatter2d.update(f),s.line2d&&s.line2d.update(f),s.error2d&&s.error2d.update(f.concat(f)),s.select2d&&s.select2d.update(f),s.glText)for(var h=0;h<s.count;h++)s.glText[h].update(c)},s.draw=function(){for(var c=s.count,f=s.fill2d,h=s.error2d,d=s.line2d,p=s.scatter2d,g=s.glText,m=s.select2d,y=s.selectBatch,_=s.unselectBatch,v=0;v<c;v++){if(f&&s.fillOrder[v]&&f.draw(s.fillOrder[v]),d&&s.lineOptions[v]&&d.draw(v),h&&(s.errorXOptions[v]&&h.draw(v),s.errorYOptions[v]&&h.draw(v+c)),p&&s.markerOptions[v])if(_[v].length){var x=t.repeat([],s.count);x[v]=_[v],p.draw(x)}else y[v].length||p.draw(v);g[v]&&s.textOptions[v]&&g[v].render()}m&&m.draw(y),s.dirty=!1},s.destroy=function(){s.fill2d&&s.fill2d.destroy&&s.fill2d.destroy(),s.scatter2d&&s.scatter2d.destroy&&s.scatter2d.destroy(),s.error2d&&s.error2d.destroy&&s.error2d.destroy(),s.line2d&&s.line2d.destroy&&s.line2d.destroy(),s.select2d&&s.select2d.destroy&&s.select2d.destroy(),s.glText&&s.glText.forEach(function(c){c.destroy&&c.destroy()}),s.lineOptions=null,s.fillOptions=null,s.markerOptions=null,s.markerSelectedOptions=null,s.markerUnselectedOptions=null,s.errorXOptions=null,s.errorYOptions=null,s.textOptions=null,s.textSelectedOptions=null,s.textUnselectedOptions=null,s.selectBatch=null,s.unselectBatch=null,o._scene=null}),s.dirty||t.extendFlat(s,l),s}}}),bX=de({"src/traces/scattergl/calc.js"(e,r){"use strict";var t=C4(),i=Qt(),a=Hs(),o=vd().findExtremes,s=xd(),l=Uh(),n=l.calcMarkerSize,u=l.calcAxisExpansion,c=l.setFirstScatter,f=jh(),h=Gv(),d=w7(),p=cn().BADNUM,g=E0().TOO_MANY_POINTS;r.exports=function(v,x){var S=v._fullLayout,M=x._xA=a.getFromId(v,x.xaxis,"x"),C=x._yA=a.getFromId(v,x.yaxis,"y"),w=S._plots[x.xaxis+x.yaxis],k=x._length,A=k>=g,b=k*2,E={},T,F=M.makeCalcdata(x,"x"),D=C.makeCalcdata(x,"y"),R=s(x,M,"x",F),P=s(x,C,"y",D),z=R.vals,I=P.vals;x._x=z,x._y=I,x.xperiodalignment&&(x._origX=F,x._xStarts=R.starts,x._xEnds=R.ends),x.yperiodalignment&&(x._origY=D,x._yStarts=P.starts,x._yEnds=P.ends);var L=new Array(b),B=new Array(k);for(T=0;T<k;T++)L[T*2]=z[T]===p?NaN:z[T],L[T*2+1]=I[T]===p?NaN:I[T],B[T]=T;if(M.type==="log")for(T=0;T<b;T+=2)L[T]=M.c2l(L[T]);if(C.type==="log")for(T=1;T<b;T+=2)L[T]=C.c2l(L[T]);A&&M.type!=="log"&&C.type!=="log"?E.tree=t(L):E.ids=B,f(v,x);var O=y(v,w,x,L,z,I),G=d(v,w);c(S,x);var W;return A?O.marker&&(W=O.marker.sizeAvg||Math.max(O.marker.size,3)):W=n(x,k),u(v,x,M,C,z,I,W),O.errorX&&m(x,M,O.errorX),O.errorY&&m(x,C,O.errorY),O.fill&&!G.fill2d&&(G.fill2d=!0),O.marker&&!G.scatter2d&&(G.scatter2d=!0),O.line&&!G.line2d&&(G.line2d=!0),(O.errorX||O.errorY)&&!G.error2d&&(G.error2d=!0),O.text&&!G.glText&&(G.glText=!0),O.marker&&(O.marker.snap=k),G.lineOptions.push(O.line),G.errorXOptions.push(O.errorX),G.errorYOptions.push(O.errorY),G.fillOptions.push(O.fill),G.markerOptions.push(O.marker),G.markerSelectedOptions.push(O.markerSel),G.markerUnselectedOptions.push(O.markerUnsel),G.textOptions.push(O.text),G.textSelectedOptions.push(O.textSel),G.textUnselectedOptions.push(O.textUnsel),G.selectBatch.push([]),G.unselectBatch.push([]),E._scene=G,E.index=G.count,E.x=z,E.y=I,E.positions=L,G.count++,[{x:!1,y:!1,t:E,trace:x}]};function m(_,v,x){var S=_._extremes[v._id],M=o(v,x._bnds,{padded:!0});S.min=S.min.concat(M.min),S.max=S.max.concat(M.max)}function y(_,v,x,S,M,C){var w=h.style(_,x);if(w.marker&&(w.marker.positions=S),w.line&&S.length>1&&i.extendFlat(w.line,h.linePositions(_,x,S)),w.errorX||w.errorY){var k=h.errorBarPositions(_,x,S,M,C);w.errorX&&i.extendFlat(w.errorX,k.x),w.errorY&&i.extendFlat(w.errorY,k.y)}return w.text&&(i.extendFlat(w.text,{positions:S},h.textPosition(_,x,w.text,w.marker)),i.extendFlat(w.textSel,{positions:S},h.textPosition(_,x,w.text,w.markerSel)),i.extendFlat(w.textUnsel,{positions:S},h.textPosition(_,x,w.text,w.markerUnsel))),w}}}),T7=de({"src/traces/scattergl/edit_style.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Ap().DESELECTDIM;function o(s){var l=s[0],n=l.trace,u=l.t,c=u._scene,f=u.index,h=c.selectBatch[f],d=c.unselectBatch[f],p=c.textOptions[f],g=c.textSelectedOptions[f]||{},m=c.textUnselectedOptions[f]||{},y=t.extendFlat({},p),_,v;if(h.length||d.length){var x=g.color,S=m.color,M=p.color,C=t.isArrayOrTypedArray(M);for(y.color=new Array(n._length),_=0;_<h.length;_++)v=h[_],y.color[v]=x||(C?M[v]:M);for(_=0;_<d.length;_++){v=d[_];var w=C?M[v]:M;y.color[v]=S||(x?w:i.addOpacity(w,a))}}c.glText[f].update(y)}r.exports={styleTextSelection:o}}}),A7=de({"src/traces/scattergl/select.js"(e,r){"use strict";var t=bs(),i=T7().styleTextSelection;r.exports=function(o,s){var l=o.cd,n=o.xaxis,u=o.yaxis,c=[],f=l[0].trace,h=l[0].t,d=f._length,p=h.x,g=h.y,m=h._scene,y=h.index;if(!m)return c;var _=t.hasText(f),v=t.hasMarkers(f),x=!v&&!_;if(f.visible!==!0||x)return c;var S=[],M=[];if(s!==!1&&!s.degenerate)for(var C=0;C<d;C++)s.contains([h.xpx[C],h.ypx[C]],!1,C,o)?(S.push(C),c.push({pointNumber:C,x:n.c2d(p[C]),y:u.c2d(g[C])})):M.push(C);if(v){var w=m.scatter2d;if(!S.length&&!M.length){var k=new Array(m.count);k[y]=m.markerOptions[y],w.update.apply(w,k)}else if(!m.selectBatch[y].length&&!m.unselectBatch[y].length){var A=new Array(m.count);A[y]=m.markerUnselectedOptions[y],w.update.apply(w,A)}}return m.selectBatch[y]=S,m.unselectBatch[y]=M,_&&i(l),c}}}),wX=de({"src/traces/scattergl/base_index.js"(e,r){"use strict";var t=S4();r.exports={moduleType:"trace",name:"scattergl",basePlotModule:ml(),categories:["gl","regl","cartesian","symbols","errorBarsOK","showLegend","scatter-like"],attributes:__(),supplyDefaults:oX(),crossTraceDefaults:ik(),colorbar:Yu(),formatLabels:sX(),calc:bX(),hoverPoints:t.hoverPoints,selectPoints:A7(),meta:{}}}}),TX=de({"node_modules/color-name/index.js"(e,r){"use strict";r.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}}}),AX=de({"node_modules/color-parse/index.js"(e,r){"use strict";var t=TX();r.exports=a;var i={red:0,orange:60,yellow:120,green:180,blue:240,purple:300};function a(o){var s,l=[],n=1,u;if(typeof o=="string")if(o=o.toLowerCase(),t[o])l=t[o].slice(),u="rgb";else if(o==="transparent")n=0,u="rgb",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(o)){var c=o.slice(1),f=c.length,h=f<=4;n=1,h?(l=[parseInt(c[0]+c[0],16),parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16)],f===4&&(n=parseInt(c[3]+c[3],16)/255)):(l=[parseInt(c[0]+c[1],16),parseInt(c[2]+c[3],16),parseInt(c[4]+c[5],16)],f===8&&(n=parseInt(c[6]+c[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),u="rgb"}else if(s=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(o)){var d=s[1],p=d==="rgb",c=d.replace(/a$/,"");u=c;var f=c==="cmyk"?4:c==="gray"?1:3;l=s[2].trim().split(/\s*[,\/]\s*|\s+/).map(function(y,_){if(/%$/.test(y))return _===f?parseFloat(y)/100:c==="rgb"?parseFloat(y)*255/100:parseFloat(y);if(c[_]==="h"){if(/deg$/.test(y))return parseFloat(y);if(i[y]!==void 0)return i[y]}return parseFloat(y)}),d===c&&l.push(1),n=p||l[f]===void 0?1:l[f],l=l.slice(0,f)}else o.length>10&&/[0-9](?:\s|\/)/.test(o)&&(l=o.match(/([0-9]+)/g).map(function(g){return parseFloat(g)}),u=o.match(/([a-z])/ig).join("").toLowerCase());else isNaN(o)?Array.isArray(o)||o.length?(l=[o[0],o[1],o[2]],u="rgb",n=o.length===4?o[3]:1):o instanceof Object&&(o.r!=null||o.red!=null||o.R!=null?(u="rgb",l=[o.r||o.red||o.R||0,o.g||o.green||o.G||0,o.b||o.blue||o.B||0]):(u="hsl",l=[o.h||o.hue||o.H||0,o.s||o.saturation||o.S||0,o.l||o.lightness||o.L||o.b||o.brightness]),n=o.a||o.alpha||o.opacity||1,o.opacity!=null&&(n/=100)):(u="rgb",l=[o>>>16,(o&65280)>>>8,o&255]);return{space:u,values:l,alpha:n}}}}),MX=de({"node_modules/color-rgba/index.js"(e,r){"use strict";var t=AX();r.exports=function(o){Array.isArray(o)&&o.raw&&(o=String.raw.apply(null,arguments));var s,l,n,u=t(o);if(!u.space)return[];var c=[0,0,0],f=u.space[0]==="h"?[360,100,100]:[255,255,255];return s=Array(3),s[0]=Math.min(Math.max(u.values[0],c[0]),f[0]),s[1]=Math.min(Math.max(u.values[1],c[1]),f[1]),s[2]=Math.min(Math.max(u.values[2],c[2]),f[2]),u.space[0]==="h"&&(s=i(s)),s.push(Math.min(Math.max(u.alpha,0),1)),s};function i(a){var o=a[0]/360,s=a[1]/100,l=a[2]/100,n,u,c,f,h,d=0;if(s===0)return h=l*255,[h,h,h];for(u=l<.5?l*(1+s):l+s-l*s,n=2*l-u,f=[0,0,0];d<3;)c=o+1/3*-(d-1),c<0?c++:c>1&&c--,h=6*c<1?n+(u-n)*6*c:2*c<1?u:3*c<2?n+(u-n)*(2/3-c)*6:n,f[d++]=h*255;return f}}}),b_=de({"node_modules/color-normalize/index.js"(e,r){"use strict";var t=MX(),i=k4();r.exports=function(s,l){(l==="float"||!l)&&(l="array"),l==="uint"&&(l="uint8"),l==="uint_clamped"&&(l="uint8_clamped");var n=i(l),u=new n(4),c=l!=="uint8"&&l!=="uint8_clamped";return(!s.length||typeof s=="string")&&(s=t(s),s[0]/=255,s[1]/=255,s[2]/=255),a(s)?(u[0]=s[0],u[1]=s[1],u[2]=s[2],u[3]=s[3]!=null?s[3]:255,c&&(u[0]/=255,u[1]/=255,u[2]/=255,u[3]/=255),u):(c?(u[0]=s[0],u[1]=s[1],u[2]=s[2],u[3]=s[3]!=null?s[3]:1):(u[0]=Math.min(Math.max(Math.floor(s[0]*255),0),255),u[1]=Math.min(Math.max(Math.floor(s[1]*255),0),255),u[2]=Math.min(Math.max(Math.floor(s[2]*255),0),255),u[3]=s[3]==null?255:Math.min(Math.max(Math.floor(s[3]*255),0),255)),u)};function a(o){return!!(o instanceof Uint8Array||o instanceof Uint8ClampedArray||Array.isArray(o)&&(o[0]>1||o[0]===0)&&(o[1]>1||o[1]===0)&&(o[2]>1||o[2]===0)&&(!o[3]||o[3]>1))}}}),SX=de({"node_modules/color-id/index.js"(e,r){"use strict";var t=m7();r.exports=i,r.exports.to=i,r.exports.from=a;function i(o,s){s==null&&(s=!0);var l=o[0],n=o[1],u=o[2],c=o[3];c==null&&(c=s?1:255),s&&(l*=255,n*=255,u*=255,c*=255),l=t(l,0,255)&255,n=t(n,0,255)&255,u=t(u,0,255)&255,c=t(c,0,255)&255;var f=l*16777216+(n<<16)+(u<<8)+c;return f}function a(o,s){o=+o;var l=o>>>24,n=(o&16711680)>>>16,u=(o&65280)>>>8,c=o&255;return s===!1?[l,n,u,c]:[l/255,n/255,u/255,c/255]}}}),EX=de({"node_modules/glslify/browser.js"(e,r){r.exports=function(t){typeof t=="string"&&(t=[t]);for(var i=[].slice.call(arguments,1),a=[],o=0;o<t.length-1;o++)a.push(t[o],i[o]||"");return a.push(t[o]),a.join("")}}}),M7=de({"node_modules/update-diff/index.js"(e,r){"use strict";r.exports=function(i,a,o){Array.isArray(o)||(o=[].slice.call(arguments,2));for(var s=0,l=o.length;s<l;s++){var n=o[s];for(var u in n)if(!(a[u]!==void 0&&!Array.isArray(a[u])&&i[u]===a[u])&&u in a){var c;if(n[u]===!0)c=a[u];else{if(n[u]===!1)continue;if(typeof n[u]=="function"&&(c=n[u](a[u],i,a),c===void 0))continue}i[u]=c}}return i}}}),D4=de({"node_modules/to-float32/index.js"(e,r){"use strict";r.exports=a,r.exports.float32=r.exports.float=a,r.exports.fract32=r.exports.fract=i;var t=new Float32Array(1);function i(o,s){if(o.length){if(o instanceof Float32Array)return new Float32Array(o.length);s instanceof Float32Array||(s=a(o));for(var l=0,n=s.length;l<n;l++)s[l]=o[l]-s[l];return s}return a(o-a(o))}function a(o){return o.length?o instanceof Float32Array?o:new Float32Array(o):(t[0]=o,t[0])}}}),S7=de({"node_modules/regl-scatter2d/bundle.js"(e,r){"use strict";var t=b_(),i=qv(),a=SX(),o=C4(),s=EX(),l=rp(),n=M7(),u=Vv(),c=D4(),f=z1(),h=d;function d(g,m){if(!(this instanceof d))return new d(g,m);typeof g=="function"?(m||(m={}),m.regl=g):(m=g,g=null),m&&m.length&&(m.positions=m),g=m.regl;let y=g._gl,_,v=[],x={},S=[],M=[null],C=[null],w=255,k=100;this.tooManyColors=!1,_=g.texture({data:new Uint8Array(w*4),width:w,height:1,type:"uint8",format:"rgba",wrapS:"clamp",wrapT:"clamp",mag:"nearest",min:"nearest"}),Object.assign(this,{regl:g,gl:y,groups:S,markerCache:C,markerTextures:M,palette:v,paletteIds:x,paletteTexture:_,maxColors:w,maxSize:k,canvas:y.canvas}),this.update(m);let A={uniforms:{constPointSize:!!m.constPointSize,opacity:g.prop("opacity"),paletteSize:(T,F)=>[this.tooManyColors?0:w,_.height],pixelRatio:g.context("pixelRatio"),scale:g.prop("scale"),scaleFract:g.prop("scaleFract"),translate:g.prop("translate"),translateFract:g.prop("translateFract"),markerTexture:g.prop("markerTexture"),paletteTexture:_},attributes:{x:(T,F)=>F.xAttr||{buffer:F.positionBuffer,stride:8,offset:0},y:(T,F)=>F.yAttr||{buffer:F.positionBuffer,stride:8,offset:4},xFract:(T,F)=>F.xAttr?{constant:[0,0]}:{buffer:F.positionFractBuffer,stride:8,offset:0},yFract:(T,F)=>F.yAttr?{constant:[0,0]}:{buffer:F.positionFractBuffer,stride:8,offset:4},size:(T,F)=>F.size.length?{buffer:F.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(F.size*255/this.maxSize)]},borderSize:(T,F)=>F.borderSize.length?{buffer:F.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(F.borderSize*255/this.maxSize)]},colorId:(T,F)=>F.color.length?{buffer:F.colorBuffer,stride:this.tooManyColors?8:4,offset:0}:{constant:this.tooManyColors?v.slice(F.color*4,F.color*4+4):[F.color]},borderColorId:(T,F)=>F.borderColor.length?{buffer:F.colorBuffer,stride:this.tooManyColors?8:4,offset:this.tooManyColors?4:2}:{constant:this.tooManyColors?v.slice(F.borderColor*4,F.borderColor*4+4):[F.borderColor]},isActive:(T,F)=>F.activation===!0?{constant:[1]}:F.activation?F.activation:{constant:[0]}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},scissor:{enable:!0,box:g.prop("viewport")},viewport:g.prop("viewport"),stencil:{enable:!1},depth:{enable:!1},elements:g.prop("elements"),count:g.prop("count"),offset:g.prop("offset"),primitive:"points"},b=Object.assign({},A);b.frag=s([`precision highp float;
+#define GLSLIFY 1
+
+uniform float opacity;
+uniform sampler2D markerTexture;
+
+varying vec4 fragColor, fragBorderColor;
+varying float fragWidth, fragBorderColorLevel, fragColorLevel;
+
+float smoothStep(float x, float y) {
+  return 1.0 / (1.0 + exp(50.0*(x - y)));
+}
+
+void main() {
+  float dist = texture2D(markerTexture, gl_PointCoord).r, delta = fragWidth;
+
+  // max-distance alpha
+  if (dist < 0.003) discard;
+
+  // null-border case
+  if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {
+    float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);
+    gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);
+  }
+  else {
+    float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);
+    float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);
+
+    vec4 color = fragBorderColor;
+    color.a *= borderColorAmt;
+    color = mix(color, fragColor, colorAmt);
+    color.a *= opacity;
+
+    gl_FragColor = color;
+  }
+
+}
+`]),b.vert=s([`precision highp float;
+#define GLSLIFY 1
+
+attribute float x, y, xFract, yFract;
+attribute float size, borderSize;
+attribute vec4 colorId, borderColorId;
+attribute float isActive;
+
+// \`invariant\` effectively turns off optimizations for the position.
+// We need this because -fast-math on M1 Macs is re-ordering
+// floating point operations in a way that causes floating point
+// precision limits to put points in the wrong locations.
+invariant gl_Position;
+
+uniform bool constPointSize;
+uniform float pixelRatio;
+uniform vec2 scale, scaleFract, translate, translateFract, paletteSize;
+uniform sampler2D paletteTexture;
+
+const float maxSize = 100.;
+const float borderLevel = .5;
+
+varying vec4 fragColor, fragBorderColor;
+varying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;
+
+float pointSizeScale = (constPointSize) ? 2. : pixelRatio;
+
+bool isDirect = (paletteSize.x < 1.);
+
+vec4 getColor(vec4 id) {
+  return isDirect ? id / 255. : texture2D(paletteTexture,
+    vec2(
+      (id.x + .5) / paletteSize.x,
+      (id.y + .5) / paletteSize.y
+    )
+  );
+}
+
+void main() {
+  // ignore inactive points
+  if (isActive == 0.) return;
+
+  vec2 position = vec2(x, y);
+  vec2 positionFract = vec2(xFract, yFract);
+
+  vec4 color = getColor(colorId);
+  vec4 borderColor = getColor(borderColorId);
+
+  float size = size * maxSize / 255.;
+  float borderSize = borderSize * maxSize / 255.;
+
+  gl_PointSize = 2. * size * pointSizeScale;
+  fragPointSize = size * pixelRatio;
+
+  vec2 pos = (position + translate) * scale
+      + (positionFract + translateFract) * scale
+      + (position + translate) * scaleFract
+      + (positionFract + translateFract) * scaleFract;
+
+  gl_Position = vec4(pos * 2. - 1., 0., 1.);
+
+  fragColor = color;
+  fragBorderColor = borderColor;
+  fragWidth = 1. / gl_PointSize;
+
+  fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);
+  fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);
+}
+`]),this.drawMarker=g(b);let E=Object.assign({},A);E.frag=s([`precision highp float;
+#define GLSLIFY 1
+
+varying vec4 fragColor, fragBorderColor;
+varying float fragBorderRadius, fragWidth;
+
+uniform float opacity;
+
+float smoothStep(float edge0, float edge1, float x) {
+	float t;
+	t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
+	return t * t * (3.0 - 2.0 * t);
+}
+
+void main() {
+	float radius, alpha = 1.0, delta = fragWidth;
+
+	radius = length(2.0 * gl_PointCoord.xy - 1.0);
+
+	if (radius > 1.0 + delta) {
+		discard;
+	}
+
+	alpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);
+
+	float borderRadius = fragBorderRadius;
+	float ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);
+	vec4 color = mix(fragColor, fragBorderColor, ratio);
+	color.a *= alpha * opacity;
+	gl_FragColor = color;
+}
+`]),E.vert=s([`precision highp float;
+#define GLSLIFY 1
+
+attribute float x, y, xFract, yFract;
+attribute float size, borderSize;
+attribute vec4 colorId, borderColorId;
+attribute float isActive;
+
+// \`invariant\` effectively turns off optimizations for the position.
+// We need this because -fast-math on M1 Macs is re-ordering
+// floating point operations in a way that causes floating point
+// precision limits to put points in the wrong locations.
+invariant gl_Position;
+
+uniform bool constPointSize;
+uniform float pixelRatio;
+uniform vec2 paletteSize, scale, scaleFract, translate, translateFract;
+uniform sampler2D paletteTexture;
+
+const float maxSize = 100.;
+
+varying vec4 fragColor, fragBorderColor;
+varying float fragBorderRadius, fragWidth;
+
+float pointSizeScale = (constPointSize) ? 2. : pixelRatio;
+
+bool isDirect = (paletteSize.x < 1.);
+
+vec4 getColor(vec4 id) {
+  return isDirect ? id / 255. : texture2D(paletteTexture,
+    vec2(
+      (id.x + .5) / paletteSize.x,
+      (id.y + .5) / paletteSize.y
+    )
+  );
+}
+
+void main() {
+  // ignore inactive points
+  if (isActive == 0.) return;
+
+  vec2 position = vec2(x, y);
+  vec2 positionFract = vec2(xFract, yFract);
+
+  vec4 color = getColor(colorId);
+  vec4 borderColor = getColor(borderColorId);
+
+  float size = size * maxSize / 255.;
+  float borderSize = borderSize * maxSize / 255.;
+
+  gl_PointSize = (size + borderSize) * pointSizeScale;
+
+  vec2 pos = (position + translate) * scale
+      + (positionFract + translateFract) * scale
+      + (position + translate) * scaleFract
+      + (positionFract + translateFract) * scaleFract;
+
+  gl_Position = vec4(pos * 2. - 1., 0., 1.);
+
+  fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);
+  fragColor = color;
+  fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;
+  fragWidth = 1. / gl_PointSize;
+}
+`]),this.drawCircle=g(E)}d.defaults={color:"black",borderColor:"transparent",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},d.prototype.render=function(){return arguments.length&&this.update(...arguments),this.draw(),this},d.prototype.draw=function(){for(var g=arguments.length,m=new Array(g),y=0;y<g;y++)m[y]=arguments[y];let{groups:_}=this;if(m.length===1&&Array.isArray(m[0])&&(m[0][0]===null||Array.isArray(m[0][0]))&&(m=m[0]),this.regl._refresh(),m.length)for(let v=0;v<m.length;v++)this.drawItem(v,m[v]);else _.forEach((v,x)=>{this.drawItem(x)});return this},d.prototype.drawItem=function(g,m){let{groups:y}=this,_=y[g];if(typeof m=="number"&&(g=m,_=y[m],m=null),!(_&&_.count&&_.opacity))return;_.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,_,m));let v=[];for(let x=1;x<_.activation.length;x++)!_.activation[x]||_.activation[x]!==!0&&!_.activation[x].data.length||v.push(...this.getMarkerDrawOptions(x,_,m));v.length&&this.drawMarker(v)},d.prototype.getMarkerDrawOptions=function(g,m,y){let{range:_,tree:v,viewport:x,activation:S,selectionBuffer:M,count:C}=m;if(!v)return y?[Object.assign({},m,{markerTexture:this.markerTextures[g],activation:S[g],count:y.length,elements:y,offset:0})]:[Object.assign({},m,{markerTexture:this.markerTextures[g],activation:S[g],offset:0})];let w=[],k=v.range(_,{lod:!0,px:[(_[2]-_[0])/x.width,(_[3]-_[1])/x.height]});if(y){let b=S[g].data,E=new Uint8Array(C);for(let T=0;T<y.length;T++){let F=y[T];E[F]=b?b[F]:1}M.subdata(E)}for(let A=k.length;A--;){let[b,E]=k[A];w.push(Object.assign({},m,{markerTexture:this.markerTextures[g],activation:y?M:S[g],offset:b,count:E-b}))}return w},d.prototype.update=function(){for(var g=arguments.length,m=new Array(g),y=0;y<g;y++)m[y]=arguments[y];if(!m.length)return;m.length===1&&Array.isArray(m[0])&&(m=m[0]);let{groups:_,gl:v,regl:x,maxSize:S,maxColors:M,palette:C}=this;this.groups=_=m.map((w,k)=>{let A=_[k];if(w===void 0)return A;w===null?w={positions:null}:typeof w=="function"?w={ondraw:w}:typeof w[0]=="number"&&(w={positions:w}),w=l(w,{positions:"positions data points",snap:"snap cluster lod tree",size:"sizes size radius",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",color:"colors color fill fill-color fillColor",borderColor:"borderColors borderColor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range dataBox databox",viewport:"viewport viewPort viewBox viewbox",opacity:"opacity alpha transparency",bounds:"bound bounds boundaries limits",tooManyColors:"tooManyColors palette paletteMode optimizePalette enablePalette"}),w.positions===null&&(w.positions=[]),w.tooManyColors!=null&&(this.tooManyColors=w.tooManyColors),A||(_[k]=A={id:k,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:x.buffer({data:new Uint8Array(0),usage:"stream",type:"uint8"}),sizeBuffer:x.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),colorBuffer:x.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),positionBuffer:x.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"}),positionFractBuffer:x.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"})},w=Object.assign({},d.defaults,w)),w.positions&&!("marker"in w)&&(w.marker=A.marker,delete A.marker),w.marker&&!("positions"in w)&&(w.positions=A.positions,delete A.positions);let b=0,E=0;if(n(A,w,[{snap:!0,size:(T,F)=>(T==null&&(T=d.defaults.size),b+=T&&T.length?1:0,T),borderSize:(T,F)=>(T==null&&(T=d.defaults.borderSize),b+=T&&T.length?1:0,T),opacity:parseFloat,color:(T,F)=>(T==null&&(T=d.defaults.color),T=this.updateColor(T),E++,T),borderColor:(T,F)=>(T==null&&(T=d.defaults.borderColor),T=this.updateColor(T),E++,T),bounds:(T,F,D)=>("range"in D||(D.range=null),T),positions:(T,F,D)=>{let{snap:R}=F,{positionBuffer:P,positionFractBuffer:z,selectionBuffer:I}=F;if(T.x||T.y)return T.x.length?F.xAttr={buffer:x.buffer(T.x),offset:0,stride:4,count:T.x.length}:F.xAttr={buffer:T.x.buffer,offset:T.x.offset*4||0,stride:(T.x.stride||1)*4,count:T.x.count},T.y.length?F.yAttr={buffer:x.buffer(T.y),offset:0,stride:4,count:T.y.length}:F.yAttr={buffer:T.y.buffer,offset:T.y.offset*4||0,stride:(T.y.stride||1)*4,count:T.y.count},F.count=Math.max(F.xAttr.count,F.yAttr.count),T;T=u(T,"float64");let L=F.count=Math.floor(T.length/2),B=F.bounds=L?i(T,2):null;if(!D.range&&!F.range&&(delete F.range,D.range=B),!D.marker&&!F.marker&&(delete F.marker,D.marker=null),R&&(R===!0||L>R)?F.tree=o(T,{bounds:B}):R&&R.length&&(F.tree=R),F.tree){let W={primitive:"points",usage:"static",data:F.tree,type:"uint32"};F.elements?F.elements(W):F.elements=x.elements(W)}var O=c.float32(T);P({data:O,usage:"dynamic"});var G=c.fract32(T,O);return z({data:G,usage:"dynamic"}),I({data:new Uint8Array(L),type:"uint8",usage:"stream"}),T}},{marker:(T,F,D)=>{let{activation:R}=F;if(R.forEach(P=>P&&P.destroy&&P.destroy()),R.length=0,!T||typeof T[0]=="number"){let P=this.addMarker(T);R[P]=!0}else{let P=[];for(let z=0,I=Math.min(T.length,F.count);z<I;z++){let L=this.addMarker(T[z]);P[L]||(P[L]=new Uint8Array(F.count)),P[L][z]=1}for(let z=0;z<P.length;z++){if(!P[z])continue;let I={data:P[z],type:"uint8",usage:"static"};R[z]?R[z](I):R[z]=x.buffer(I),R[z].data=P[z]}}return T},range:(T,F,D)=>{let R=F.bounds;if(R)return T||(T=R),F.scale=[1/(T[2]-T[0]),1/(T[3]-T[1])],F.translate=[-T[0],-T[1]],F.scaleFract=c.fract(F.scale),F.translateFract=c.fract(F.translate),T},viewport:T=>f(T||[v.drawingBufferWidth,v.drawingBufferHeight])}]),b){let{count:T,size:F,borderSize:D,sizeBuffer:R}=A,P=new Uint8Array(T*2);if(F.length||D.length)for(let z=0;z<T;z++)P[z*2]=Math.round((F[z]==null?F:F[z])*255/S),P[z*2+1]=Math.round((D[z]==null?D:D[z])*255/S);R({data:P,usage:"dynamic"})}if(E){let{count:T,color:F,borderColor:D,colorBuffer:R}=A,P;if(this.tooManyColors){if(F.length||D.length){P=new Uint8Array(T*8);for(let z=0;z<T;z++){let I=F[z];P[z*8]=C[I*4],P[z*8+1]=C[I*4+1],P[z*8+2]=C[I*4+2],P[z*8+3]=C[I*4+3];let L=D[z];P[z*8+4]=C[L*4],P[z*8+5]=C[L*4+1],P[z*8+6]=C[L*4+2],P[z*8+7]=C[L*4+3]}}}else if(F.length||D.length){P=new Uint8Array(T*4+2);for(let z=0;z<T;z++)F[z]!=null&&(P[z*4]=F[z]%M,P[z*4+1]=Math.floor(F[z]/M)),D[z]!=null&&(P[z*4+2]=D[z]%M,P[z*4+3]=Math.floor(D[z]/M))}R({data:P||new Uint8Array(0),type:"uint8",usage:"dynamic"})}return A})},d.prototype.addMarker=function(g){let{markerTextures:m,regl:y,markerCache:_}=this,v=g==null?0:_.indexOf(g);if(v>=0)return v;let x;if(g instanceof Uint8Array||g instanceof Uint8ClampedArray)x=g;else{x=new Uint8Array(g.length);for(let M=0,C=g.length;M<C;M++)x[M]=g[M]*255}let S=Math.floor(Math.sqrt(x.length));return v=m.length,_.push(g),m.push(y.texture({channels:1,data:x,radius:S,mag:"linear",min:"linear"})),v},d.prototype.updateColor=function(g){let{paletteIds:m,palette:y,maxColors:_}=this;Array.isArray(g)||(g=[g]);let v=[];if(typeof g[0]=="number"){let x=[];if(Array.isArray(g))for(let S=0;S<g.length;S+=4)x.push(g.slice(S,S+4));else for(let S=0;S<g.length;S+=4)x.push(g.subarray(S,S+4));g=x}for(let x=0;x<g.length;x++){let S=g[x];S=t(S,"uint8");let M=a(S,!1);if(m[M]==null){let C=y.length;m[M]=Math.floor(C/4),y[C]=S[0],y[C+1]=S[1],y[C+2]=S[2],y[C+3]=S[3]}v[x]=m[M]}return!this.tooManyColors&&y.length>_*4&&(this.tooManyColors=!0),this.updatePalette(y),v.length===1?v[0]:v},d.prototype.updatePalette=function(g){if(this.tooManyColors)return;let{maxColors:m,paletteTexture:y}=this,_=Math.ceil(g.length*.25/m);if(_>1){g=g.slice();for(let v=g.length*.25%m;v<_*m;v++)g.push(0,0,0,0)}y.height<_&&y.resize(m,_),y.subimage({width:Math.min(g.length*.25,m),height:_,data:g},0,0)},d.prototype.destroy=function(){return this.groups.forEach(g=>{g.sizeBuffer.destroy(),g.positionBuffer.destroy(),g.positionFractBuffer.destroy(),g.colorBuffer.destroy(),g.activation.forEach(m=>m&&m.destroy&&m.destroy()),g.selectionBuffer.destroy(),g.elements&&g.elements.destroy()}),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach(g=>g&&g.destroy&&g.destroy()),this};var p=function(g,m){var y=new h(g,m),_=y.render.bind(y);return Object.assign(_,{render:_,update:y.update.bind(y),draw:y.draw.bind(y),destroy:y.destroy.bind(y),regl:y.regl,gl:y.gl,canvas:y.gl.canvas,groups:y.groups,markers:y.markerCache,palette:y.palette}),_};r.exports=p}}),du=de({"node_modules/object-assign/index.js"(e,r){"use strict";var t=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;function o(l){if(l==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(l)}function s(){try{if(!Object.assign)return!1;var l=new String("abc");if(l[5]="de",Object.getOwnPropertyNames(l)[0]==="5")return!1;for(var n={},u=0;u<10;u++)n["_"+String.fromCharCode(u)]=u;var c=Object.getOwnPropertyNames(n).map(function(h){return n[h]});if(c.join("")!=="0123456789")return!1;var f={};return"abcdefghijklmnopqrst".split("").forEach(function(h){f[h]=h}),Object.keys(Object.assign({},f)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}r.exports=s()?Object.assign:function(l,n){for(var u,c=o(l),f,h=1;h<arguments.length;h++){u=Object(arguments[h]);for(var d in u)i.call(u,d)&&(c[d]=u[d]);if(t){f=t(u);for(var p=0;p<f.length;p++)a.call(u,f[p])&&(c[f[p]]=u[f[p]])}}return c}}}),kX=de({"node_modules/regl-line2d/node_modules/earcut/src/earcut.js"(e,r){"use strict";r.exports=t,r.exports.default=t;function t(z,I,L){L=L||2;var B=I&&I.length,O=B?I[0]*L:z.length,G=i(z,0,O,L,!0),W=[];if(!G||G.next===G.prev)return W;var X,Z,J,N,H,$,U;if(B&&(G=c(z,I,G,L)),z.length>80*L){X=J=z[0],Z=N=z[1];for(var V=L;V<O;V+=L)H=z[V],$=z[V+1],H<X&&(X=H),$<Z&&(Z=$),H>J&&(J=H),$>N&&(N=$);U=Math.max(J-X,N-Z),U=U!==0?32767/U:0}return o(G,W,L,X,Z,U,0),W}function i(z,I,L,B,O){var G,W;if(O===P(z,I,L,B)>0)for(G=I;G<L;G+=B)W=F(G,z[G],z[G+1],W);else for(G=L-B;G>=I;G-=B)W=F(G,z[G],z[G+1],W);return W&&M(W,W.next)&&(D(W),W=W.next),W}function a(z,I){if(!z)return z;I||(I=z);var L=z,B;do if(B=!1,!L.steiner&&(M(L,L.next)||S(L.prev,L,L.next)===0)){if(D(L),L=I=L.prev,L===L.next)break;B=!0}else L=L.next;while(B||L!==I);return I}function o(z,I,L,B,O,G,W){if(z){!W&&G&&g(z,B,O,G);for(var X=z,Z,J;z.prev!==z.next;){if(Z=z.prev,J=z.next,G?l(z,B,O,G):s(z)){I.push(Z.i/L|0),I.push(z.i/L|0),I.push(J.i/L|0),D(z),z=J.next,X=J.next;continue}if(z=J,z===X){W?W===1?(z=n(a(z),I,L),o(z,I,L,B,O,G,2)):W===2&&u(z,I,L,B,O,G):o(a(z),I,L,B,O,G,1);break}}}}function s(z){var I=z.prev,L=z,B=z.next;if(S(I,L,B)>=0)return!1;for(var O=I.x,G=L.x,W=B.x,X=I.y,Z=L.y,J=B.y,N=O<G?O<W?O:W:G<W?G:W,H=X<Z?X<J?X:J:Z<J?Z:J,$=O>G?O>W?O:W:G>W?G:W,U=X>Z?X>J?X:J:Z>J?Z:J,V=B.next;V!==I;){if(V.x>=N&&V.x<=$&&V.y>=H&&V.y<=U&&v(O,X,G,Z,W,J,V.x,V.y)&&S(V.prev,V,V.next)>=0)return!1;V=V.next}return!0}function l(z,I,L,B){var O=z.prev,G=z,W=z.next;if(S(O,G,W)>=0)return!1;for(var X=O.x,Z=G.x,J=W.x,N=O.y,H=G.y,$=W.y,U=X<Z?X<J?X:J:Z<J?Z:J,V=N<H?N<$?N:$:H<$?H:$,j=X>Z?X>J?X:J:Z>J?Z:J,q=N>H?N>$?N:$:H>$?H:$,Y=y(U,V,I,L,B),K=y(j,q,I,L,B),te=z.prevZ,ne=z.nextZ;te&&te.z>=Y&&ne&&ne.z<=K;){if(te.x>=U&&te.x<=j&&te.y>=V&&te.y<=q&&te!==O&&te!==W&&v(X,N,Z,H,J,$,te.x,te.y)&&S(te.prev,te,te.next)>=0||(te=te.prevZ,ne.x>=U&&ne.x<=j&&ne.y>=V&&ne.y<=q&&ne!==O&&ne!==W&&v(X,N,Z,H,J,$,ne.x,ne.y)&&S(ne.prev,ne,ne.next)>=0))return!1;ne=ne.nextZ}for(;te&&te.z>=Y;){if(te.x>=U&&te.x<=j&&te.y>=V&&te.y<=q&&te!==O&&te!==W&&v(X,N,Z,H,J,$,te.x,te.y)&&S(te.prev,te,te.next)>=0)return!1;te=te.prevZ}for(;ne&&ne.z<=K;){if(ne.x>=U&&ne.x<=j&&ne.y>=V&&ne.y<=q&&ne!==O&&ne!==W&&v(X,N,Z,H,J,$,ne.x,ne.y)&&S(ne.prev,ne,ne.next)>=0)return!1;ne=ne.nextZ}return!0}function n(z,I,L){var B=z;do{var O=B.prev,G=B.next.next;!M(O,G)&&C(O,B,B.next,G)&&b(O,G)&&b(G,O)&&(I.push(O.i/L|0),I.push(B.i/L|0),I.push(G.i/L|0),D(B),D(B.next),B=z=G),B=B.next}while(B!==z);return a(B)}function u(z,I,L,B,O,G){var W=z;do{for(var X=W.next.next;X!==W.prev;){if(W.i!==X.i&&x(W,X)){var Z=T(W,X);W=a(W,W.next),Z=a(Z,Z.next),o(W,I,L,B,O,G,0),o(Z,I,L,B,O,G,0);return}X=X.next}W=W.next}while(W!==z)}function c(z,I,L,B){var O=[],G,W,X,Z,J;for(G=0,W=I.length;G<W;G++)X=I[G]*B,Z=G<W-1?I[G+1]*B:z.length,J=i(z,X,Z,B,!1),J===J.next&&(J.steiner=!0),O.push(_(J));for(O.sort(f),G=0;G<O.length;G++)L=h(O[G],L);return L}function f(z,I){return z.x-I.x}function h(z,I){var L=d(z,I);if(!L)return I;var B=T(L,z);return a(B,B.next),a(L,L.next)}function d(z,I){var L=I,B=z.x,O=z.y,G=-1/0,W;do{if(O<=L.y&&O>=L.next.y&&L.next.y!==L.y){var X=L.x+(O-L.y)*(L.next.x-L.x)/(L.next.y-L.y);if(X<=B&&X>G&&(G=X,W=L.x<L.next.x?L:L.next,X===B))return W}L=L.next}while(L!==I);if(!W)return null;var Z=W,J=W.x,N=W.y,H=1/0,$;L=W;do B>=L.x&&L.x>=J&&B!==L.x&&v(O<N?B:G,O,J,N,O<N?G:B,O,L.x,L.y)&&($=Math.abs(O-L.y)/(B-L.x),b(L,z)&&($<H||$===H&&(L.x>W.x||L.x===W.x&&p(W,L)))&&(W=L,H=$)),L=L.next;while(L!==Z);return W}function p(z,I){return S(z.prev,z,I.prev)<0&&S(I.next,z,z.next)<0}function g(z,I,L,B){var O=z;do O.z===0&&(O.z=y(O.x,O.y,I,L,B)),O.prevZ=O.prev,O.nextZ=O.next,O=O.next;while(O!==z);O.prevZ.nextZ=null,O.prevZ=null,m(O)}function m(z){var I,L,B,O,G,W,X,Z,J=1;do{for(L=z,z=null,G=null,W=0;L;){for(W++,B=L,X=0,I=0;I<J&&(X++,B=B.nextZ,!!B);I++);for(Z=J;X>0||Z>0&&B;)X!==0&&(Z===0||!B||L.z<=B.z)?(O=L,L=L.nextZ,X--):(O=B,B=B.nextZ,Z--),G?G.nextZ=O:z=O,O.prevZ=G,G=O;L=B}G.nextZ=null,J*=2}while(W>1);return z}function y(z,I,L,B,O){return z=(z-L)*O|0,I=(I-B)*O|0,z=(z|z<<8)&16711935,z=(z|z<<4)&252645135,z=(z|z<<2)&858993459,z=(z|z<<1)&1431655765,I=(I|I<<8)&16711935,I=(I|I<<4)&252645135,I=(I|I<<2)&858993459,I=(I|I<<1)&1431655765,z|I<<1}function _(z){var I=z,L=z;do(I.x<L.x||I.x===L.x&&I.y<L.y)&&(L=I),I=I.next;while(I!==z);return L}function v(z,I,L,B,O,G,W,X){return(O-W)*(I-X)>=(z-W)*(G-X)&&(z-W)*(B-X)>=(L-W)*(I-X)&&(L-W)*(G-X)>=(O-W)*(B-X)}function x(z,I){return z.next.i!==I.i&&z.prev.i!==I.i&&!A(z,I)&&(b(z,I)&&b(I,z)&&E(z,I)&&(S(z.prev,z,I.prev)||S(z,I.prev,I))||M(z,I)&&S(z.prev,z,z.next)>0&&S(I.prev,I,I.next)>0)}function S(z,I,L){return(I.y-z.y)*(L.x-I.x)-(I.x-z.x)*(L.y-I.y)}function M(z,I){return z.x===I.x&&z.y===I.y}function C(z,I,L,B){var O=k(S(z,I,L)),G=k(S(z,I,B)),W=k(S(L,B,z)),X=k(S(L,B,I));return!!(O!==G&&W!==X||O===0&&w(z,L,I)||G===0&&w(z,B,I)||W===0&&w(L,z,B)||X===0&&w(L,I,B))}function w(z,I,L){return I.x<=Math.max(z.x,L.x)&&I.x>=Math.min(z.x,L.x)&&I.y<=Math.max(z.y,L.y)&&I.y>=Math.min(z.y,L.y)}function k(z){return z>0?1:z<0?-1:0}function A(z,I){var L=z;do{if(L.i!==z.i&&L.next.i!==z.i&&L.i!==I.i&&L.next.i!==I.i&&C(L,L.next,z,I))return!0;L=L.next}while(L!==z);return!1}function b(z,I){return S(z.prev,z,z.next)<0?S(z,I,z.next)>=0&&S(z,z.prev,I)>=0:S(z,I,z.prev)<0||S(z,z.next,I)<0}function E(z,I){var L=z,B=!1,O=(z.x+I.x)/2,G=(z.y+I.y)/2;do L.y>G!=L.next.y>G&&L.next.y!==L.y&&O<(L.next.x-L.x)*(G-L.y)/(L.next.y-L.y)+L.x&&(B=!B),L=L.next;while(L!==z);return B}function T(z,I){var L=new R(z.i,z.x,z.y),B=new R(I.i,I.x,I.y),O=z.next,G=I.prev;return z.next=I,I.prev=z,L.next=O,O.prev=L,B.next=L,L.prev=B,G.next=B,B.prev=G,B}function F(z,I,L,B){var O=new R(z,I,L);return B?(O.next=B.next,O.prev=B,B.next.prev=O,B.next=O):(O.prev=O,O.next=O),O}function D(z){z.next.prev=z.prev,z.prev.next=z.next,z.prevZ&&(z.prevZ.nextZ=z.nextZ),z.nextZ&&(z.nextZ.prevZ=z.prevZ)}function R(z,I,L){this.i=z,this.x=I,this.y=L,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}t.deviation=function(z,I,L,B){var O=I&&I.length,G=O?I[0]*L:z.length,W=Math.abs(P(z,0,G,L));if(O)for(var X=0,Z=I.length;X<Z;X++){var J=I[X]*L,N=X<Z-1?I[X+1]*L:z.length;W-=Math.abs(P(z,J,N,L))}var H=0;for(X=0;X<B.length;X+=3){var $=B[X]*L,U=B[X+1]*L,V=B[X+2]*L;H+=Math.abs((z[$]-z[V])*(z[U+1]-z[$+1])-(z[$]-z[U])*(z[V+1]-z[$+1]))}return W===0&&H===0?0:Math.abs((H-W)/W)};function P(z,I,L,B){for(var O=0,G=I,W=L-B;G<L;G+=B)O+=(z[W]-z[G])*(z[G+1]+z[W+1]),W=G;return O}t.flatten=function(z){for(var I=z[0][0].length,L={vertices:[],holes:[],dimensions:I},B=0,O=0;O<z.length;O++){for(var G=0;G<z[O].length;G++)for(var W=0;W<I;W++)L.vertices.push(z[O][G][W]);O>0&&(B+=z[O-1].length,L.holes.push(B))}return L}}}),CX=de({"node_modules/array-normalize/index.js"(e,r){"use strict";var t=qv();r.exports=i;function i(a,o,s){if(!a||a.length==null)throw Error("Argument should be an array");o==null&&(o=1),s==null&&(s=t(a,o));for(var l=0;l<o;l++){var n=s[o+l],u=s[l],c=l,f=a.length;if(n===1/0&&u===-1/0)for(c=l;c<f;c+=o)a[c]=a[c]===n?1:a[c]===u?0:.5;else if(n===1/0)for(c=l;c<f;c+=o)a[c]=a[c]===n?1:0;else if(u===-1/0)for(c=l;c<f;c+=o)a[c]=a[c]===u?0:1;else{var h=n-u;for(c=l;c<f;c+=o)isNaN(a[c])||(a[c]=h===0?.5:(a[c]-u)/h)}}return a}}}),DX=de({"node_modules/es6-weak-map/is-implemented.js"(e,r){"use strict";r.exports=function(){var t,i;if(typeof WeakMap!="function")return!1;try{t=new WeakMap([[i={},"one"],[{},"two"],[{},"three"]])}catch{return!1}return!(String(t)!=="[object WeakMap]"||typeof t.set!="function"||t.set({},1)!==t||typeof t.delete!="function"||typeof t.has!="function"||t.get(i)!=="one")}}}),LX=de({"node_modules/es5-ext/function/noop.js"(e,r){"use strict";r.exports=function(){}}}),k0=de({"node_modules/es5-ext/object/is-value.js"(e,r){"use strict";var t=LX()();r.exports=function(i){return i!==t&&i!==null}}}),E7=de({"node_modules/es5-ext/object/set-prototype-of/is-implemented.js"(e,r){"use strict";var t=Object.create,i=Object.getPrototypeOf,a={};r.exports=function(){var o=Object.setPrototypeOf,s=arguments[0]||t;return typeof o!="function"?!1:i(o(s(null),a))===a}}}),k7=de({"node_modules/es5-ext/object/is-object.js"(e,r){"use strict";var t=k0(),i={function:!0,object:!0};r.exports=function(a){return t(a)&&i[typeof a]||!1}}}),Pp=de({"node_modules/es5-ext/object/valid-value.js"(e,r){"use strict";var t=k0();r.exports=function(i){if(!t(i))throw new TypeError("Cannot use null or undefined");return i}}}),FX=de({"node_modules/es5-ext/object/create.js"(e,r){"use strict";var t=Object.create,i;E7()()||(i=C7()),r.exports=(function(){var a,o,s;return!i||i.level!==1?t:(a={},o={},s={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach(function(l){if(l==="__proto__"){o[l]={configurable:!0,enumerable:!1,writable:!0,value:void 0};return}o[l]=s}),Object.defineProperties(a,o),Object.defineProperty(i,"nullPolyfill",{configurable:!1,enumerable:!1,writable:!1,value:a}),function(l,n){return t(l===null?a:l,n)})})()}}),C7=de({"node_modules/es5-ext/object/set-prototype-of/shim.js"(e,r){"use strict";var t=k7(),i=Pp(),a=Object.prototype.isPrototypeOf,o=Object.defineProperty,s={configurable:!0,enumerable:!1,writable:!0,value:void 0},l;l=function(n,u){if(i(n),u===null||t(u))return n;throw new TypeError("Prototype must be null or an object")},r.exports=(function(n){var u,c;return n?(n.level===2?n.set?(c=n.set,u=function(f,h){return c.call(l(f,h),h),f}):u=function(f,h){return l(f,h).__proto__=h,f}:u=function f(h,d){var p;return l(h,d),p=a.call(f.nullPolyfill,h),p&&delete f.nullPolyfill.__proto__,d===null&&(d=f.nullPolyfill),h.__proto__=d,p&&o(f.nullPolyfill,"__proto__",s),h},Object.defineProperty(u,"level",{configurable:!1,enumerable:!1,writable:!1,value:n.level})):null})((function(){var n=Object.create(null),u={},c,f=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(f){try{c=f.set,c.call(n,u)}catch{}if(Object.getPrototypeOf(n)===u)return{set:c,level:2}}return n.__proto__=u,Object.getPrototypeOf(n)===u?{level:2}:(n={},n.__proto__=u,Object.getPrototypeOf(n)===u?{level:1}:!1)})()),FX()}}),L4=de({"node_modules/es5-ext/object/set-prototype-of/index.js"(e,r){"use strict";r.exports=E7()()?Object.setPrototypeOf:C7()}}),PX=de({"node_modules/es5-ext/object/valid-object.js"(e,r){"use strict";var t=k7();r.exports=function(i){if(!t(i))throw new TypeError(i+" is not an Object");return i}}}),IX=de({"node_modules/es5-ext/string/random-uniq.js"(e,r){"use strict";var t=Object.create(null),i=Math.random;r.exports=function(){var a;do a=i().toString(36).slice(2);while(t[a]);return a}}}),Hv=de({"node_modules/type/value/is.js"(e,r){"use strict";var t=void 0;r.exports=function(i){return i!==t&&i!==null}}}),D7=de({"node_modules/type/object/is.js"(e,r){"use strict";var t=Hv(),i={object:!0,function:!0,undefined:!0};r.exports=function(a){return t(a)?hasOwnProperty.call(i,typeof a):!1}}}),RX=de({"node_modules/type/prototype/is.js"(e,r){"use strict";var t=D7();r.exports=function(i){if(!t(i))return!1;try{return i.constructor?i.constructor.prototype===i:!1}catch{return!1}}}}),zX=de({"node_modules/type/function/is.js"(e,r){"use strict";var t=RX();r.exports=function(i){if(typeof i!="function"||!hasOwnProperty.call(i,"length"))return!1;try{if(typeof i.length!="number"||typeof i.call!="function"||typeof i.apply!="function")return!1}catch{return!1}return!t(i)}}}),L7=de({"node_modules/type/plain-function/is.js"(e,r){"use strict";var t=zX(),i=/^\s*class[\s{/}]/,a=Function.prototype.toString;r.exports=function(o){return!(!t(o)||i.test(a.call(o)))}}}),BX=de({"node_modules/es5-ext/object/assign/is-implemented.js"(e,r){"use strict";r.exports=function(){var t=Object.assign,i;return typeof t!="function"?!1:(i={foo:"raz"},t(i,{bar:"dwa"},{trzy:"trzy"}),i.foo+i.bar+i.trzy==="razdwatrzy")}}}),OX=de({"node_modules/es5-ext/object/keys/is-implemented.js"(e,r){"use strict";r.exports=function(){try{return Object.keys("primitive"),!0}catch{return!1}}}}),NX=de({"node_modules/es5-ext/object/keys/shim.js"(e,r){"use strict";var t=k0(),i=Object.keys;r.exports=function(a){return i(t(a)?Object(a):a)}}}),jX=de({"node_modules/es5-ext/object/keys/index.js"(e,r){"use strict";r.exports=OX()()?Object.keys:NX()}}),UX=de({"node_modules/es5-ext/object/assign/shim.js"(e,r){"use strict";var t=jX(),i=Pp(),a=Math.max;r.exports=function(o,s){var l,n,u=a(arguments.length,2),c;for(o=Object(i(o)),c=function(f){try{o[f]=s[f]}catch(h){l||(l=h)}},n=1;n<u;++n)s=arguments[n],t(s).forEach(c);if(l!==void 0)throw l;return o}}}),F4=de({"node_modules/es5-ext/object/assign/index.js"(e,r){"use strict";r.exports=BX()()?Object.assign:UX()}}),F7=de({"node_modules/es5-ext/object/normalize-options.js"(e,r){"use strict";var t=k0(),i=Array.prototype.forEach,a=Object.create,o=function(s,l){var n;for(n in s)l[n]=s[n]};r.exports=function(s){var l=a(null);return i.call(arguments,function(n){t(n)&&o(Object(n),l)}),l}}}),qX=de({"node_modules/es5-ext/string/#/contains/is-implemented.js"(e,r){"use strict";var t="razdwatrzy";r.exports=function(){return typeof t.contains!="function"?!1:t.contains("dwa")===!0&&t.contains("foo")===!1}}}),VX=de({"node_modules/es5-ext/string/#/contains/shim.js"(e,r){"use strict";var t=String.prototype.indexOf;r.exports=function(i){return t.call(this,i,arguments[1])>-1}}}),P7=de({"node_modules/es5-ext/string/#/contains/index.js"(e,r){"use strict";r.exports=qX()()?String.prototype.contains:VX()}}),Ip=de({"node_modules/d/index.js"(e,r){"use strict";var t=Hv(),i=L7(),a=F4(),o=F7(),s=P7(),l=r.exports=function(n,u){var c,f,h,d,p;return arguments.length<2||typeof n!="string"?(d=u,u=n,n=null):d=arguments[2],t(n)?(c=s.call(n,"c"),f=s.call(n,"e"),h=s.call(n,"w")):(c=h=!0,f=!1),p={value:u,configurable:c,enumerable:f,writable:h},d?a(o(d),p):p};l.gs=function(n,u,c){var f,h,d,p;return typeof n!="string"?(d=c,c=u,u=n,n=null):d=arguments[3],t(u)?i(u)?t(c)?i(c)||(d=c,c=void 0):c=void 0:(d=u,u=c=void 0):u=void 0,t(n)?(f=s.call(n,"c"),h=s.call(n,"e")):(f=!0,h=!1),p={get:u,set:c,configurable:f,enumerable:h},d?a(o(d),p):p}}}),w_=de({"node_modules/es5-ext/function/is-arguments.js"(e,r){"use strict";var t=Object.prototype.toString,i=t.call((function(){return arguments})());r.exports=function(a){return t.call(a)===i}}}),T_=de({"node_modules/es5-ext/string/is-string.js"(e,r){"use strict";var t=Object.prototype.toString,i=t.call("");r.exports=function(a){return typeof a=="string"||a&&typeof a=="object"&&(a instanceof String||t.call(a)===i)||!1}}}),GX=de({"node_modules/ext/global-this/is-implemented.js"(e,r){"use strict";r.exports=function(){return typeof globalThis!="object"||!globalThis?!1:globalThis.Array===Array}}}),HX=de({"node_modules/ext/global-this/implementation.js"(e,r){var t=function(){if(typeof self=="object"&&self)return self;if(typeof window=="object"&&window)return window;throw new Error("Unable to resolve global `this`")};r.exports=(function(){if(this)return this;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch{return t()}try{return __global__||t()}finally{delete Object.prototype.__global__}})()}}),A_=de({"node_modules/ext/global-this/index.js"(e,r){"use strict";r.exports=GX()()?globalThis:HX()}}),$X=de({"node_modules/es6-symbol/is-implemented.js"(e,r){"use strict";var t=A_(),i={object:!0,symbol:!0};r.exports=function(){var a=t.Symbol,o;if(typeof a!="function")return!1;o=a("test symbol");try{String(o)}catch{return!1}return!(!i[typeof a.iterator]||!i[typeof a.toPrimitive]||!i[typeof a.toStringTag])}}}),WX=de({"node_modules/es6-symbol/is-symbol.js"(e,r){"use strict";r.exports=function(t){return t?typeof t=="symbol"?!0:!t.constructor||t.constructor.name!=="Symbol"?!1:t[t.constructor.toStringTag]==="Symbol":!1}}}),I7=de({"node_modules/es6-symbol/validate-symbol.js"(e,r){"use strict";var t=WX();r.exports=function(i){if(!t(i))throw new TypeError(i+" is not a symbol");return i}}}),YX=de({"node_modules/es6-symbol/lib/private/generate-name.js"(e,r){"use strict";var t=Ip(),i=Object.create,a=Object.defineProperty,o=Object.prototype,s=i(null);r.exports=function(l){for(var n=0,u,c;s[l+(n||"")];)++n;return l+=n||"",s[l]=!0,u="@@"+l,a(o,u,t.gs(null,function(f){c||(c=!0,a(this,u,t(f)),c=!1)})),u}}}),XX=de({"node_modules/es6-symbol/lib/private/setup/standard-symbols.js"(e,r){"use strict";var t=Ip(),i=A_().Symbol;r.exports=function(a){return Object.defineProperties(a,{hasInstance:t("",i&&i.hasInstance||a("hasInstance")),isConcatSpreadable:t("",i&&i.isConcatSpreadable||a("isConcatSpreadable")),iterator:t("",i&&i.iterator||a("iterator")),match:t("",i&&i.match||a("match")),replace:t("",i&&i.replace||a("replace")),search:t("",i&&i.search||a("search")),species:t("",i&&i.species||a("species")),split:t("",i&&i.split||a("split")),toPrimitive:t("",i&&i.toPrimitive||a("toPrimitive")),toStringTag:t("",i&&i.toStringTag||a("toStringTag")),unscopables:t("",i&&i.unscopables||a("unscopables"))})}}}),ZX=de({"node_modules/es6-symbol/lib/private/setup/symbol-registry.js"(e,r){"use strict";var t=Ip(),i=I7(),a=Object.create(null);r.exports=function(o){return Object.defineProperties(o,{for:t(function(s){return a[s]?a[s]:a[s]=o(String(s))}),keyFor:t(function(s){var l;i(s);for(l in a)if(a[l]===s)return l})})}}}),KX=de({"node_modules/es6-symbol/polyfill.js"(e,r){"use strict";var t=Ip(),i=I7(),a=A_().Symbol,o=YX(),s=XX(),l=ZX(),n=Object.create,u=Object.defineProperties,c=Object.defineProperty,f,h,d;if(typeof a=="function")try{String(a()),d=!0}catch{}else a=null;h=function(g){if(this instanceof h)throw new TypeError("Symbol is not a constructor");return f(g)},r.exports=f=function p(g){var m;if(this instanceof p)throw new TypeError("Symbol is not a constructor");return d?a(g):(m=n(h.prototype),g=g===void 0?"":String(g),u(m,{__description__:t("",g),__name__:t("",o(g))}))},s(f),l(f),u(h.prototype,{constructor:t(f),toString:t("",function(){return this.__name__})}),u(f.prototype,{toString:t(function(){return"Symbol ("+i(this).__description__+")"}),valueOf:t(function(){return i(this)})}),c(f.prototype,f.toPrimitive,t("",function(){var p=i(this);return typeof p=="symbol"?p:p.toString()})),c(f.prototype,f.toStringTag,t("c","Symbol")),c(h.prototype,f.toStringTag,t("c",f.prototype[f.toStringTag])),c(h.prototype,f.toPrimitive,t("c",f.prototype[f.toPrimitive]))}}),C0=de({"node_modules/es6-symbol/index.js"(e,r){"use strict";r.exports=$X()()?A_().Symbol:KX()}}),JX=de({"node_modules/es5-ext/array/#/clear.js"(e,r){"use strict";var t=Pp();r.exports=function(){return t(this).length=0,this}}}),B1=de({"node_modules/es5-ext/object/valid-callable.js"(e,r){"use strict";r.exports=function(t){if(typeof t!="function")throw new TypeError(t+" is not a function");return t}}}),QX=de({"node_modules/type/string/coerce.js"(e,r){"use strict";var t=Hv(),i=D7(),a=Object.prototype.toString;r.exports=function(o){if(!t(o))return null;if(i(o)){var s=o.toString;if(typeof s!="function"||s===a)return null}try{return""+o}catch{return null}}}}),eZ=de({"node_modules/type/lib/safe-to-string.js"(e,r){"use strict";r.exports=function(t){try{return t.toString()}catch{try{return String(t)}catch{return null}}}}}),tZ=de({"node_modules/type/lib/to-short-string.js"(e,r){"use strict";var t=eZ(),i=/[
\r\u2028\u2029]/g;r.exports=function(a){var o=t(a);return o===null?"<Non-coercible to string value>":(o.length>100&&(o=o.slice(0,99)+"\u2026"),o=o.replace(i,function(s){switch(s){case`
+`:return"\
";case"\r":return"\\r";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:throw new Error("Unexpected character")}}),o)}}}),rZ=de({"node_modules/type/lib/resolve-error-message.js"(e,r){"use strict";var t=QX(),i=tZ();r.exports=function(a,o,s){s&&s.errorMessage&&(a=t(s.errorMessage));var l=a.indexOf("%v"),n=l>-1?i(o):null;if(s&&s.name){var u=a.indexOf("%n");if(u>-1){if(l>-1){var c,f,h,d;return u>l?(c=n,h=l,f=s.name,d=u):(c=s.name,h=u,f=n,d=l),a.slice(0,h)+c+a.slice(h+2,d)+f+a.slice(d+2)}return a.slice(0,u)+s.name+a.slice(u+2)}}return l>-1?a.slice(0,l)+n+a.slice(l+2):a}}}),R7=de({"node_modules/type/lib/resolve-exception.js"(e,r){"use strict";var t=Hv(),i=rZ();r.exports=function(a,o,s){if(s&&!t(a)){if("default"in s)return s.default;if(s.isOptional)return null}var l=s&&s.Error||TypeError,n=new l(i(o,a,s));throw s&&s.errorCode&&(n.code=s.errorCode),n}}}),iZ=de({"node_modules/type/value/ensure.js"(e,r){"use strict";var t=R7(),i=Hv();r.exports=function(a){if(i(a))return a;var o=arguments[1],s=o&&o.name?"Expected a value for %n, received %v":"Cannot use %v";return t(a,s,o)}}}),aZ=de({"node_modules/type/plain-function/ensure.js"(e,r){"use strict";var t=R7(),i=L7();r.exports=function(a){if(i(a))return a;var o=arguments[1],s=o&&o.name?"Expected a plain function for %n, received %v":"%v is not a plain function";return t(a,s,o)}}}),nZ=de({"node_modules/es5-ext/array/from/is-implemented.js"(e,r){"use strict";r.exports=function(){var t=Array.from,i,a;return typeof t!="function"?!1:(i=["raz","dwa"],a=t(i),!!(a&&a!==i&&a[1]==="dwa"))}}}),oZ=de({"node_modules/es5-ext/function/is-function.js"(e,r){"use strict";var t=Object.prototype.toString,i=RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);r.exports=function(a){return typeof a=="function"&&i(t.call(a))}}}),sZ=de({"node_modules/es5-ext/math/sign/is-implemented.js"(e,r){"use strict";r.exports=function(){var t=Math.sign;return typeof t!="function"?!1:t(10)===1&&t(-20)===-1}}}),lZ=de({"node_modules/es5-ext/math/sign/shim.js"(e,r){"use strict";r.exports=function(t){return t=Number(t),isNaN(t)||t===0?t:t>0?1:-1}}}),uZ=de({"node_modules/es5-ext/math/sign/index.js"(e,r){"use strict";r.exports=sZ()()?Math.sign:lZ()}}),cZ=de({"node_modules/es5-ext/number/to-integer.js"(e,r){"use strict";var t=uZ(),i=Math.abs,a=Math.floor;r.exports=function(o){return isNaN(o)?0:(o=Number(o),o===0||!isFinite(o)?o:t(o)*a(i(o)))}}}),fZ=de({"node_modules/es5-ext/number/to-pos-integer.js"(e,r){"use strict";var t=cZ(),i=Math.max;r.exports=function(a){return i(0,t(a))}}}),hZ=de({"node_modules/es5-ext/array/from/shim.js"(e,r){"use strict";var t=C0().iterator,i=w_(),a=oZ(),o=fZ(),s=B1(),l=Pp(),n=k0(),u=T_(),c=Array.isArray,f=Function.prototype.call,h={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;r.exports=function(p){var g=arguments[1],m=arguments[2],y,_,v,x,S,M,C,w,k,A;if(p=Object(l(p)),n(g)&&s(g),!this||this===Array||!a(this)){if(!g){if(i(p))return S=p.length,S!==1?Array.apply(null,p):(x=new Array(1),x[0]=p[0],x);if(c(p)){for(x=new Array(S=p.length),_=0;_<S;++_)x[_]=p[_];return x}}x=[]}else y=this;if(!c(p)){if((k=p[t])!==void 0){for(C=s(k).call(p),y&&(x=new y),w=C.next(),_=0;!w.done;)A=g?f.call(g,m,w.value,_):w.value,y?(h.value=A,d(x,_,h)):x[_]=A,w=C.next(),++_;S=_}else if(u(p)){for(S=p.length,y&&(x=new y),_=0,v=0;_<S;++_)A=p[_],_+1<S&&(M=A.charCodeAt(0),M>=55296&&M<=56319&&(A+=p[++_])),A=g?f.call(g,m,A,v):A,y?(h.value=A,d(x,v,h)):x[v]=A,++v;S=v}}if(S===void 0)for(S=o(p.length),y&&(x=new y(S)),_=0;_<S;++_)A=g?f.call(g,m,p[_],_):p[_],y?(h.value=A,d(x,_,h)):x[_]=A;return y&&(h.value=null,x.length=S),x}}}),dZ=de({"node_modules/es5-ext/array/from/index.js"(e,r){"use strict";r.exports=nZ()()?Array.from:hZ()}}),pZ=de({"node_modules/es5-ext/object/copy.js"(e,r){"use strict";var t=dZ(),i=F4(),a=Pp();r.exports=function(o){var s=Object(a(o)),l=arguments[1],n=Object(arguments[2]);if(s!==o&&!l)return s;var u={};return l?t(l,function(c){(n.ensure||c in o)&&(u[c]=o[c])}):i(u,o),u}}}),vZ=de({"node_modules/es5-ext/object/_iterate.js"(e,r){"use strict";var t=B1(),i=Pp(),a=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;r.exports=function(n,u){return function(c,f){var h,d=arguments[2],p=arguments[3];return c=Object(i(c)),t(f),h=s(c),p&&h.sort(typeof p=="function"?a.call(p,c):void 0),typeof n!="function"&&(n=h[n]),o.call(n,h,function(g,m){return l.call(c,g)?o.call(f,d,c[g],g,c,m):u})}}}}),mZ=de({"node_modules/es5-ext/object/for-each.js"(e,r){"use strict";r.exports=vZ()("forEach")}}),gZ=de({"node_modules/es5-ext/object/map.js"(e,r){"use strict";var t=B1(),i=mZ(),a=Function.prototype.call;r.exports=function(o,s){var l={},n=arguments[2];return t(s),i(o,function(u,c,f,h){l[c]=a.call(s,n,u,c,f,h)}),l}}}),yZ=de({"node_modules/d/auto-bind.js"(e,r){"use strict";var t=Hv(),i=iZ(),a=aZ(),o=pZ(),s=F7(),l=gZ(),n=Function.prototype.bind,u=Object.defineProperty,c=Object.prototype.hasOwnProperty,f;f=function(h,d,p){var g=i(d)&&a(d.value),m;return m=o(d),delete m.writable,delete m.value,m.get=function(){return!p.overwriteDefinition&&c.call(this,h)?g:(d.value=n.call(g,p.resolveContext?p.resolveContext(this):this),u(this,h,d),this[h])},m},r.exports=function(h){var d=s(arguments[1]);return t(d.resolveContext)&&a(d.resolveContext),l(h,function(p,g){return f(g,p,d)})}}}),z7=de({"node_modules/es6-iterator/index.js"(e,r){"use strict";var t=JX(),i=F4(),a=B1(),o=Pp(),s=Ip(),l=yZ(),n=C0(),u=Object.defineProperty,c=Object.defineProperties,f;r.exports=f=function(h,d){if(!(this instanceof f))throw new TypeError("Constructor requires 'new'");c(this,{__list__:s("w",o(h)),__context__:s("w",d),__nextIndex__:s("w",0)}),d&&(a(d.on),d.on("_add",this._onAdd),d.on("_delete",this._onDelete),d.on("_clear",this._onClear))},delete f.prototype.constructor,c(f.prototype,i({_next:s(function(){var h;if(this.__list__){if(this.__redo__&&(h=this.__redo__.shift(),h!==void 0))return h;if(this.__nextIndex__<this.__list__.length)return this.__nextIndex__++;this._unBind()}}),next:s(function(){return this._createResult(this._next())}),_createResult:s(function(h){return h===void 0?{done:!0,value:void 0}:{done:!1,value:this._resolve(h)}}),_resolve:s(function(h){return this.__list__[h]}),_unBind:s(function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off("_add",this._onAdd),this.__context__.off("_delete",this._onDelete),this.__context__.off("_clear",this._onClear),this.__context__=null)}),toString:s(function(){return"[object "+(this[n.toStringTag]||"Object")+"]"})},l({_onAdd:s(function(h){if(!(h>=this.__nextIndex__)){if(++this.__nextIndex__,!this.__redo__){u(this,"__redo__",s("c",[h]));return}this.__redo__.forEach(function(d,p){d>=h&&(this.__redo__[p]=++d)},this),this.__redo__.push(h)}}),_onDelete:s(function(h){var d;h>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(d=this.__redo__.indexOf(h),d!==-1&&this.__redo__.splice(d,1),this.__redo__.forEach(function(p,g){p>h&&(this.__redo__[g]=--p)},this)))}),_onClear:s(function(){this.__redo__&&t.call(this.__redo__),this.__nextIndex__=0})}))),u(f.prototype,n.iterator,s(function(){return this}))}}),_Z=de({"node_modules/es6-iterator/array.js"(e,r){"use strict";var t=L4(),i=P7(),a=Ip(),o=C0(),s=z7(),l=Object.defineProperty,n;n=r.exports=function(u,c){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");s.call(this,u),c?i.call(c,"key+value")?c="key+value":i.call(c,"key")?c="key":c="value":c="value",l(this,"__kind__",a("",c))},t&&t(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_resolve:a(function(u){return this.__kind__==="value"?this.__list__[u]:this.__kind__==="key+value"?[u,this.__list__[u]]:u})}),l(n.prototype,o.toStringTag,a("c","Array Iterator"))}}),xZ=de({"node_modules/es6-iterator/string.js"(e,r){"use strict";var t=L4(),i=Ip(),a=C0(),o=z7(),s=Object.defineProperty,l;l=r.exports=function(n){if(!(this instanceof l))throw new TypeError("Constructor requires 'new'");n=String(n),o.call(this,n),s(this,"__length__",i("",n.length))},t&&t(l,o),delete l.prototype.constructor,l.prototype=Object.create(o.prototype,{_next:i(function(){if(this.__list__){if(this.__nextIndex__<this.__length__)return this.__nextIndex__++;this._unBind()}}),_resolve:i(function(n){var u=this.__list__[n],c;return this.__nextIndex__===this.__length__?u:(c=u.charCodeAt(0),c>=55296&&c<=56319?u+this.__list__[this.__nextIndex__++]:u)})}),s(l.prototype,a.toStringTag,i("c","String Iterator"))}}),bZ=de({"node_modules/es6-iterator/is-iterable.js"(e,r){"use strict";var t=w_(),i=k0(),a=T_(),o=C0().iterator,s=Array.isArray;r.exports=function(l){return i(l)?s(l)||a(l)||t(l)?!0:typeof l[o]=="function":!1}}}),wZ=de({"node_modules/es6-iterator/valid-iterable.js"(e,r){"use strict";var t=bZ();r.exports=function(i){if(!t(i))throw new TypeError(i+" is not iterable");return i}}}),B7=de({"node_modules/es6-iterator/get.js"(e,r){"use strict";var t=w_(),i=T_(),a=_Z(),o=xZ(),s=wZ(),l=C0().iterator;r.exports=function(n){return typeof s(n)[l]=="function"?n[l]():t(n)?new a(n):i(n)?new o(n):new a(n)}}}),TZ=de({"node_modules/es6-iterator/for-of.js"(e,r){"use strict";var t=w_(),i=B1(),a=T_(),o=B7(),s=Array.isArray,l=Function.prototype.call,n=Array.prototype.some;r.exports=function(u,c){var f,h=arguments[2],d,p,g,m,y,_,v;if(s(u)||t(u)?f="array":a(u)?f="string":u=o(u),i(c),p=function(){g=!0},f==="array"){n.call(u,function(x){return l.call(c,h,x,p),g});return}if(f==="string"){for(y=u.length,m=0;m<y&&(_=u[m],m+1<y&&(v=_.charCodeAt(0),v>=55296&&v<=56319&&(_+=u[++m])),l.call(c,h,_,p),!g);++m);return}for(d=u.next();!d.done;){if(l.call(c,h,d.value,p),g)return;d=u.next()}}}}),AZ=de({"node_modules/es6-weak-map/is-native-implemented.js"(e,r){"use strict";r.exports=(function(){return typeof WeakMap!="function"?!1:Object.prototype.toString.call(new WeakMap)==="[object WeakMap]"})()}}),MZ=de({"node_modules/es6-weak-map/polyfill.js"(e,r){"use strict";var t=k0(),i=L4(),a=PX(),o=Pp(),s=IX(),l=Ip(),n=B7(),u=TZ(),c=C0().toStringTag,f=AZ(),h=Array.isArray,d=Object.defineProperty,p=Object.prototype.hasOwnProperty,g=Object.getPrototypeOf,m;r.exports=m=function(){var y=arguments[0],_;if(!(this instanceof m))throw new TypeError("Constructor requires 'new'");return _=f&&i&&WeakMap!==m?i(new WeakMap,g(this)):this,t(y)&&(h(y)||(y=n(y))),d(_,"__weakMapData__",l("c","$weakMap$"+s())),y&&u(y,function(v){o(v),_.set(v[0],v[1])}),_},f&&(i&&i(m,WeakMap),m.prototype=Object.create(WeakMap.prototype,{constructor:l(m)})),Object.defineProperties(m.prototype,{delete:l(function(y){return p.call(a(y),this.__weakMapData__)?(delete y[this.__weakMapData__],!0):!1}),get:l(function(y){if(p.call(a(y),this.__weakMapData__))return y[this.__weakMapData__]}),has:l(function(y){return p.call(a(y),this.__weakMapData__)}),set:l(function(y,_){return d(a(y),this.__weakMapData__,l("c",_)),this}),toString:l(function(){return"[object WeakMap]"})}),d(m.prototype,c,l("c","WeakMap"))}}),O7=de({"node_modules/es6-weak-map/index.js"(e,r){"use strict";r.exports=DX()()?WeakMap:MZ()}}),SZ=de({"node_modules/array-find-index/index.js"(e,r){"use strict";r.exports=function(t,i,a){if(typeof Array.prototype.findIndex=="function")return t.findIndex(i,a);if(typeof i!="function")throw new TypeError("predicate must be a function");var o=Object(t),s=o.length;if(s===0)return-1;for(var l=0;l<s;l++)if(i.call(a,o[l],l,o))return l;return-1}}}),N7=de({"node_modules/regl-line2d/index.js"(e,r){"use strict";var t=b_(),i=qv(),a=du(),o=rp(),s=Vv(),l=kX(),n=CX(),{float32:u,fract32:c}=D4(),f=O7(),h=z1(),d=SZ(),p=`
+precision highp float;
+
+attribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;
+attribute vec4 color;
+attribute float lineEnd, lineTop;
+
+uniform vec2 scale, scaleFract, translate, translateFract;
+uniform float thickness, pixelRatio, id, depth;
+uniform vec4 viewport;
+
+varying vec4 fragColor;
+varying vec2 tangent;
+
+vec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {
+	// the order is important
+	return position * scale + translate
+       + positionFract * scale + translateFract
+       + position * scaleFract
+       + positionFract * scaleFract;
+}
+
+void main() {
+	float lineStart = 1. - lineEnd;
+	float lineOffset = lineTop * 2. - 1.;
+
+	vec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);
+	tangent = normalize(diff * scale * viewport.zw);
+	vec2 normal = vec2(-tangent.y, tangent.x);
+
+	vec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart
+		+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd
+
+		+ thickness * normal * .5 * lineOffset / viewport.zw;
+
+	gl_Position = vec4(position * 2.0 - 1.0, depth, 1);
+
+	fragColor = color / 255.;
+}
+`,g=`
+precision highp float;
+
+uniform float dashLength, pixelRatio, thickness, opacity, id;
+uniform sampler2D dashTexture;
+
+varying vec4 fragColor;
+varying vec2 tangent;
+
+void main() {
+	float alpha = 1.;
+
+	float t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;
+	float dash = texture2D(dashTexture, vec2(t, .5)).r;
+
+	gl_FragColor = fragColor;
+	gl_FragColor.a *= alpha * opacity * dash;
+}
+`,m=`
+precision highp float;
+
+attribute vec2 position, positionFract;
+
+uniform vec4 color;
+uniform vec2 scale, scaleFract, translate, translateFract;
+uniform float pixelRatio, id;
+uniform vec4 viewport;
+uniform float opacity;
+
+varying vec4 fragColor;
+
+const float MAX_LINES = 256.;
+
+void main() {
+	float depth = (MAX_LINES - 4. - id) / (MAX_LINES);
+
+	vec2 position = position * scale + translate
+       + positionFract * scale + translateFract
+       + position * scaleFract
+       + positionFract * scaleFract;
+
+	gl_Position = vec4(position * 2.0 - 1.0, depth, 1);
+
+	fragColor = color / 255.;
+	fragColor.a *= opacity;
+}
+`,y=`
+precision highp float;
+varying vec4 fragColor;
+
+void main() {
+	gl_FragColor = fragColor;
+}
+`,_=`
+precision highp float;
+
+attribute vec2 aCoord, bCoord, nextCoord, prevCoord;
+attribute vec4 aColor, bColor;
+attribute float lineEnd, lineTop;
+
+uniform vec2 scale, translate;
+uniform float thickness, pixelRatio, id, depth;
+uniform vec4 viewport;
+uniform float miterLimit, miterMode;
+
+varying vec4 fragColor;
+varying vec4 startCutoff, endCutoff;
+varying vec2 tangent;
+varying vec2 startCoord, endCoord;
+varying float enableStartMiter, enableEndMiter;
+
+const float REVERSE_THRESHOLD = -.875;
+const float MIN_DIFF = 1e-6;
+
+// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead
+// TODO: precalculate dot products, normalize things beforehead etc.
+// TODO: refactor to rectangular algorithm
+
+float distToLine(vec2 p, vec2 a, vec2 b) {
+	vec2 diff = b - a;
+	vec2 perp = normalize(vec2(-diff.y, diff.x));
+	return dot(p - a, perp);
+}
+
+bool isNaN( float val ){
+  return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;
+}
+
+void main() {
+	vec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;
+
+  vec2 adjustedScale;
+  adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;
+  adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;
+
+  vec2 scaleRatio = adjustedScale * viewport.zw;
+	vec2 normalWidth = thickness / scaleRatio;
+
+	float lineStart = 1. - lineEnd;
+	float lineBot = 1. - lineTop;
+
+	fragColor = (lineStart * aColor + lineEnd * bColor) / 255.;
+
+	if (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;
+
+	if (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);
+	if (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);
+
+
+	vec2 prevDiff = aCoord - prevCoord;
+	vec2 currDiff = bCoord - aCoord;
+	vec2 nextDiff = nextCoord - bCoord;
+
+	vec2 prevTangent = normalize(prevDiff * scaleRatio);
+	vec2 currTangent = normalize(currDiff * scaleRatio);
+	vec2 nextTangent = normalize(nextDiff * scaleRatio);
+
+	vec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);
+	vec2 currNormal = vec2(-currTangent.y, currTangent.x);
+	vec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);
+
+	vec2 startJoinDirection = normalize(prevTangent - currTangent);
+	vec2 endJoinDirection = normalize(currTangent - nextTangent);
+
+	// collapsed/unidirectional segment cases
+	// FIXME: there should be more elegant solution
+	vec2 prevTanDiff = abs(prevTangent - currTangent);
+	vec2 nextTanDiff = abs(nextTangent - currTangent);
+	if (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {
+		startJoinDirection = currNormal;
+	}
+	if (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {
+		endJoinDirection = currNormal;
+	}
+	if (aCoord == bCoord) {
+		endJoinDirection = startJoinDirection;
+		currNormal = prevNormal;
+		currTangent = prevTangent;
+	}
+
+	tangent = currTangent;
+
+	//calculate join shifts relative to normals
+	float startJoinShift = dot(currNormal, startJoinDirection);
+	float endJoinShift = dot(currNormal, endJoinDirection);
+
+	float startMiterRatio = abs(1. / startJoinShift);
+	float endMiterRatio = abs(1. / endJoinShift);
+
+	vec2 startJoin = startJoinDirection * startMiterRatio;
+	vec2 endJoin = endJoinDirection * endMiterRatio;
+
+	vec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;
+	startTopJoin = sign(startJoinShift) * startJoin * .5;
+	startBotJoin = -startTopJoin;
+
+	endTopJoin = sign(endJoinShift) * endJoin * .5;
+	endBotJoin = -endTopJoin;
+
+	vec2 aTopCoord = aCoord + normalWidth * startTopJoin;
+	vec2 bTopCoord = bCoord + normalWidth * endTopJoin;
+	vec2 aBotCoord = aCoord + normalWidth * startBotJoin;
+	vec2 bBotCoord = bCoord + normalWidth * endBotJoin;
+
+	//miter anti-clipping
+	float baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));
+	float abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));
+
+	//prevent close to reverse direction switch
+	bool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) <  length(normalWidth * currNormal);
+	bool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) <  length(normalWidth * currNormal);
+
+	if (prevReverse) {
+		//make join rectangular
+		vec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;
+		float normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);
+		aBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;
+		aTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;
+	}
+	else if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {
+		//handle miter clipping
+		bTopCoord -= normalWidth * endTopJoin;
+		bTopCoord += normalize(endTopJoin * normalWidth) * baClipping;
+	}
+
+	if (nextReverse) {
+		//make join rectangular
+		vec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;
+		float normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);
+		bBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;
+		bTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;
+	}
+	else if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {
+		//handle miter clipping
+		aBotCoord -= normalWidth * startBotJoin;
+		aBotCoord += normalize(startBotJoin * normalWidth) * abClipping;
+	}
+
+	vec2 aTopPosition = (aTopCoord) * adjustedScale + translate;
+	vec2 aBotPosition = (aBotCoord) * adjustedScale + translate;
+
+	vec2 bTopPosition = (bTopCoord) * adjustedScale + translate;
+	vec2 bBotPosition = (bBotCoord) * adjustedScale + translate;
+
+	//position is normalized 0..1 coord on the screen
+	vec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;
+
+	startCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;
+	endCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;
+
+	gl_Position = vec4(position  * 2.0 - 1.0, depth, 1);
+
+	enableStartMiter = step(dot(currTangent, prevTangent), .5);
+	enableEndMiter = step(dot(currTangent, nextTangent), .5);
+
+	//bevel miter cutoffs
+	if (miterMode == 1.) {
+		if (enableStartMiter == 1.) {
+			vec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;
+			startCutoff = vec4(aCoord, aCoord);
+			startCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;
+			startCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;
+			startCutoff += viewport.xyxy;
+			startCutoff += startMiterWidth.xyxy;
+		}
+
+		if (enableEndMiter == 1.) {
+			vec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;
+			endCutoff = vec4(bCoord, bCoord);
+			endCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;
+			endCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;
+			endCutoff += viewport.xyxy;
+			endCutoff += endMiterWidth.xyxy;
+		}
+	}
+
+	//round miter cutoffs
+	else if (miterMode == 2.) {
+		if (enableStartMiter == 1.) {
+			vec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;
+			startCutoff = vec4(aCoord, aCoord);
+			startCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;
+			startCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;
+			startCutoff += viewport.xyxy;
+			startCutoff += startMiterWidth.xyxy;
+		}
+
+		if (enableEndMiter == 1.) {
+			vec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;
+			endCutoff = vec4(bCoord, bCoord);
+			endCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;
+			endCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;
+			endCutoff += viewport.xyxy;
+			endCutoff += endMiterWidth.xyxy;
+		}
+	}
+}
+`,v=`
+precision highp float;
+
+uniform float dashLength, pixelRatio, thickness, opacity, id, miterMode;
+uniform sampler2D dashTexture;
+
+varying vec4 fragColor;
+varying vec2 tangent;
+varying vec4 startCutoff, endCutoff;
+varying vec2 startCoord, endCoord;
+varying float enableStartMiter, enableEndMiter;
+
+float distToLine(vec2 p, vec2 a, vec2 b) {
+	vec2 diff = b - a;
+	vec2 perp = normalize(vec2(-diff.y, diff.x));
+	return dot(p - a, perp);
+}
+
+void main() {
+	float alpha = 1., distToStart, distToEnd;
+	float cutoff = thickness * .5;
+
+	//bevel miter
+	if (miterMode == 1.) {
+		if (enableStartMiter == 1.) {
+			distToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);
+			if (distToStart < -1.) {
+				discard;
+				return;
+			}
+			alpha *= min(max(distToStart + 1., 0.), 1.);
+		}
+
+		if (enableEndMiter == 1.) {
+			distToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);
+			if (distToEnd < -1.) {
+				discard;
+				return;
+			}
+			alpha *= min(max(distToEnd + 1., 0.), 1.);
+		}
+	}
+
+	// round miter
+	else if (miterMode == 2.) {
+		if (enableStartMiter == 1.) {
+			distToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);
+			if (distToStart < 0.) {
+				float radius = length(gl_FragCoord.xy - startCoord);
+
+				if(radius > cutoff + .5) {
+					discard;
+					return;
+				}
+
+				alpha -= smoothstep(cutoff - .5, cutoff + .5, radius);
+			}
+		}
+
+		if (enableEndMiter == 1.) {
+			distToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);
+			if (distToEnd < 0.) {
+				float radius = length(gl_FragCoord.xy - endCoord);
+
+				if(radius > cutoff + .5) {
+					discard;
+					return;
+				}
+
+				alpha -= smoothstep(cutoff - .5, cutoff + .5, radius);
+			}
+		}
+	}
+
+	float t = fract(dot(tangent, gl_FragCoord.xy) / dashLength) * .5 + .25;
+	float dash = texture2D(dashTexture, vec2(t, .5)).r;
+
+	gl_FragColor = fragColor;
+	gl_FragColor.a *= alpha * opacity * dash;
+}
+`;r.exports=x;function x(S,M){if(!(this instanceof x))return new x(S,M);if(typeof S=="function"?(M||(M={}),M.regl=S):M=S,M.length&&(M.positions=M),S=M.regl,!S.hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");this.gl=S._gl,this.regl=S,this.passes=[],this.shaders=x.shaders.has(S)?x.shaders.get(S):x.shaders.set(S,x.createShaders(S)).get(S),this.update(M)}x.dashMult=2,x.maxPatternLength=256,x.precisionThreshold=3e6,x.maxPoints=1e4,x.maxLines=2048,x.shaders=new f,x.createShaders=function(S){let M=S.buffer({usage:"static",type:"float",data:[0,1,0,0,1,1,1,0]}),C={primitive:"triangle strip",instances:S.prop("count"),count:4,offset:0,uniforms:{miterMode:(b,E)=>E.join==="round"?2:1,miterLimit:S.prop("miterLimit"),scale:S.prop("scale"),scaleFract:S.prop("scaleFract"),translateFract:S.prop("translateFract"),translate:S.prop("translate"),thickness:S.prop("thickness"),dashTexture:S.prop("dashTexture"),opacity:S.prop("opacity"),pixelRatio:S.context("pixelRatio"),id:S.prop("id"),dashLength:S.prop("dashLength"),viewport:(b,E)=>[E.viewport.x,E.viewport.y,b.viewportWidth,b.viewportHeight],depth:S.prop("depth")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:(b,E)=>!E.overlay},stencil:{enable:!1},scissor:{enable:!0,box:S.prop("viewport")},viewport:S.prop("viewport")},w=S(a({vert:p,frag:g,attributes:{lineEnd:{buffer:M,divisor:0,stride:8,offset:0},lineTop:{buffer:M,divisor:0,stride:8,offset:4},aCoord:{buffer:S.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:S.prop("positionBuffer"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:S.prop("positionFractBuffer"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:S.prop("positionFractBuffer"),stride:8,offset:16,divisor:1},color:{buffer:S.prop("colorBuffer"),stride:4,offset:0,divisor:1}}},C)),k;try{k=S(a({cull:{enable:!0,face:"back"},vert:_,frag:v,attributes:{lineEnd:{buffer:M,divisor:0,stride:8,offset:0},lineTop:{buffer:M,divisor:0,stride:8,offset:4},aColor:{buffer:S.prop("colorBuffer"),stride:4,offset:0,divisor:1},bColor:{buffer:S.prop("colorBuffer"),stride:4,offset:4,divisor:1},prevCoord:{buffer:S.prop("positionBuffer"),stride:8,offset:0,divisor:1},aCoord:{buffer:S.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:S.prop("positionBuffer"),stride:8,offset:16,divisor:1},nextCoord:{buffer:S.prop("positionBuffer"),stride:8,offset:24,divisor:1}}},C))}catch{k=w}return{fill:S({primitive:"triangle",elements:(b,E)=>E.triangles,offset:0,vert:m,frag:y,uniforms:{scale:S.prop("scale"),color:S.prop("fill"),scaleFract:S.prop("scaleFract"),translateFract:S.prop("translateFract"),translate:S.prop("translate"),opacity:S.prop("opacity"),pixelRatio:S.context("pixelRatio"),id:S.prop("id"),viewport:(b,E)=>[E.viewport.x,E.viewport.y,b.viewportWidth,b.viewportHeight]},attributes:{position:{buffer:S.prop("positionBuffer"),stride:8,offset:8},positionFract:{buffer:S.prop("positionFractBuffer"),stride:8,offset:8}},blend:C.blend,depth:{enable:!1},scissor:C.scissor,stencil:C.stencil,viewport:C.viewport}),rect:w,miter:k}},x.defaults={dashes:null,join:"miter",miterLimit:1,thickness:10,cap:"square",color:"black",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},x.prototype.render=function(...S){S.length&&this.update(...S),this.draw()},x.prototype.draw=function(...S){return(S.length?S:this.passes).forEach((M,C)=>{if(M&&Array.isArray(M))return this.draw(...M);typeof M=="number"&&(M=this.passes[M]),M&&M.count>1&&M.opacity&&(this.regl._refresh(),M.fill&&M.triangles&&M.triangles.length>2&&this.shaders.fill(M),M.thickness&&(M.scale[0]*M.viewport.width>x.precisionThreshold||M.scale[1]*M.viewport.height>x.precisionThreshold?this.shaders.rect(M):M.join==="rect"||!M.join&&(M.thickness<=2||M.count>=x.maxPoints)?this.shaders.rect(M):this.shaders.miter(M)))}),this},x.prototype.update=function(S){if(!S)return;S.length!=null?typeof S[0]=="number"&&(S=[{positions:S}]):Array.isArray(S)||(S=[S]);let{regl:M,gl:C}=this;if(S.forEach((k,A)=>{let b=this.passes[A];if(k!==void 0){if(k===null){this.passes[A]=null;return}if(typeof k[0]=="number"&&(k={positions:k}),k=o(k,{positions:"positions points data coords",thickness:"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth",join:"lineJoin linejoin join type mode",miterLimit:"miterlimit miterLimit",dashes:"dash dashes dasharray dash-array dashArray",color:"color colour stroke colors colours stroke-color strokeColor",fill:"fill fill-color fillColor",opacity:"alpha opacity",overlay:"overlay crease overlap intersect",close:"closed close closed-path closePath",range:"range dataBox",viewport:"viewport viewBox",hole:"holes hole hollow",splitNull:"splitNull"}),b||(this.passes[A]=b={id:A,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:M.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:"linear",min:"linear"}),colorBuffer:M.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array}),positionBuffer:M.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),positionFractBuffer:M.buffer({usage:"dynamic",type:"float",data:new Uint8Array})},k=a({},x.defaults,k)),k.thickness!=null&&(b.thickness=parseFloat(k.thickness)),k.opacity!=null&&(b.opacity=parseFloat(k.opacity)),k.miterLimit!=null&&(b.miterLimit=parseFloat(k.miterLimit)),k.overlay!=null&&(b.overlay=!!k.overlay,A<x.maxLines&&(b.depth=2*(x.maxLines-1-A%x.maxLines)/x.maxLines-1)),k.join!=null&&(b.join=k.join),k.hole!=null&&(b.hole=k.hole),k.fill!=null&&(b.fill=k.fill?t(k.fill,"uint8"):null),k.viewport!=null&&(b.viewport=h(k.viewport)),b.viewport||(b.viewport=h([C.drawingBufferWidth,C.drawingBufferHeight])),k.close!=null&&(b.close=k.close),k.positions===null&&(k.positions=[]),k.positions){let F,D;if(k.positions.x&&k.positions.y){let I=k.positions.x,L=k.positions.y;D=b.count=Math.max(I.length,L.length),F=new Float64Array(D*2);for(let B=0;B<D;B++)F[B*2]=I[B],F[B*2+1]=L[B]}else F=s(k.positions,"float64"),D=b.count=Math.floor(F.length/2);let R=b.bounds=i(F,2);if(b.fill){let I=[],L={},B=0;for(let O=0,G=0,W=b.count;O<W;O++){let X=F[O*2],Z=F[O*2+1];isNaN(X)||isNaN(Z)||X==null||Z==null?(X=F[B*2],Z=F[B*2+1],L[O]=B):B=O,I[G++]=X,I[G++]=Z}if(k.splitNull){b.count-1 in L||(L[b.count]=b.count-1);let O=Object.keys(L).map(Number).sort((Z,J)=>Z-J),G=[],W=0,X=b.hole!=null?b.hole[0]:null;if(X!=null){let Z=d(O,J=>J>=X);O=O.slice(0,Z),O.push(X)}for(let Z=0;Z<O.length;Z++){let J=I.slice(W*2,O[Z]*2).concat(X?I.slice(X*2):[]),N=(b.hole||[]).map($=>$-X+(O[Z]-W)),H=l(J,N);H=H.map($=>$+W+($+W<O[Z]?0:X-O[Z])),G.push(...H),W=O[Z]+1}for(let Z=0,J=G.length;Z<J;Z++)L[G[Z]]!=null&&(G[Z]=L[G[Z]]);b.triangles=G}else{let O=l(I,b.hole||[]);for(let G=0,W=O.length;G<W;G++)L[O[G]]!=null&&(O[G]=L[O[G]]);b.triangles=O}}let P=new Float64Array(F);n(P,2,R);let z=new Float64Array(D*2+6);b.close?F[0]===F[D*2-2]&&F[1]===F[D*2-1]?(z[0]=P[D*2-4],z[1]=P[D*2-3]):(z[0]=P[D*2-2],z[1]=P[D*2-1]):(z[0]=P[0],z[1]=P[1]),z.set(P,2),b.close?F[0]===F[D*2-2]&&F[1]===F[D*2-1]?(z[D*2+2]=P[2],z[D*2+3]=P[3],b.count-=1):(z[D*2+2]=P[0],z[D*2+3]=P[1],z[D*2+4]=P[2],z[D*2+5]=P[3]):(z[D*2+2]=P[D*2-2],z[D*2+3]=P[D*2-1],z[D*2+4]=P[D*2-2],z[D*2+5]=P[D*2-1]);var E=u(z);b.positionBuffer(E);var T=c(z,E);b.positionFractBuffer(T)}if(k.range?b.range=k.range:b.range||(b.range=b.bounds),(k.range||k.positions)&&b.count){let F=b.bounds,D=F[2]-F[0],R=F[3]-F[1],P=b.range[2]-b.range[0],z=b.range[3]-b.range[1];b.scale=[D/P,R/z],b.translate=[-b.range[0]/P+F[0]/P||0,-b.range[1]/z+F[1]/z||0],b.scaleFract=c(b.scale),b.translateFract=c(b.translate)}if(k.dashes){let F=0,D;if(!k.dashes||k.dashes.length<2)F=1,D=new Uint8Array([255,255,255,255,255,255,255,255]);else{F=0;for(let z=0;z<k.dashes.length;++z)F+=k.dashes[z];D=new Uint8Array(F*x.dashMult);let R=0,P=255;for(let z=0;z<2;z++)for(let I=0;I<k.dashes.length;++I){for(let L=0,B=k.dashes[I]*x.dashMult*.5;L<B;++L)D[R++]=P;P^=255}}b.dashLength=F,b.dashTexture({channels:1,data:D,width:D.length,height:1,mag:"linear",min:"linear"},0,0)}if(k.color){let F=b.count,D=k.color;D||(D="transparent");let R=new Uint8Array(F*4+4);if(!Array.isArray(D)||typeof D[0]=="number"){let P=t(D,"uint8");for(let z=0;z<F+1;z++)R.set(P,z*4)}else{for(let P=0;P<F;P++){let z=t(D[P],"uint8");R.set(z,P*4)}R.set(t(D[0],"uint8"),F*4)}b.colorBuffer({usage:"dynamic",type:"uint8",data:R})}}}),S.length<this.passes.length){for(let k=S.length;k<this.passes.length;k++){let A=this.passes[k];A&&(A.colorBuffer.destroy(),A.positionBuffer.destroy(),A.dashTexture.destroy())}this.passes.length=S.length}let w=[];for(let k=0;k<this.passes.length;k++)this.passes[k]!==null&&w.push(this.passes[k]);return this.passes=w,this},x.prototype.destroy=function(){return this.passes.forEach(S=>{S.colorBuffer.destroy(),S.positionBuffer.destroy(),S.dashTexture.destroy()}),this.passes.length=0,this}}}),EZ=de({"node_modules/regl-error2d/index.js"(e,r){"use strict";var t=qv(),i=b_(),a=M7(),o=rp(),s=du(),l=Vv(),{float32:n,fract32:u}=D4();r.exports=f;var c=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]];function f(h,d){if(typeof h=="function"?(d||(d={}),d.regl=h):d=h,d.length&&(d.positions=d),h=d.regl,!h.hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");let p=h._gl,g,m,y,_,v,x,S={color:"black",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},M=[];return _=h.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array(0)}),m=h.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),y=h.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),v=h.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),x=h.buffer({usage:"static",type:"float",data:c}),A(d),g=h({vert:`
+		precision highp float;
+
+		attribute vec2 position, positionFract;
+		attribute vec4 error;
+		attribute vec4 color;
+
+		attribute vec2 direction, lineOffset, capOffset;
+
+		uniform vec4 viewport;
+		uniform float lineWidth, capSize;
+		uniform vec2 scale, scaleFract, translate, translateFract;
+
+		varying vec4 fragColor;
+
+		void main() {
+			fragColor = color / 255.;
+
+			vec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;
+
+			vec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;
+
+			vec2 position = position + dxy;
+
+			vec2 pos = (position + translate) * scale
+				+ (positionFract + translateFract) * scale
+				+ (position + translate) * scaleFract
+				+ (positionFract + translateFract) * scaleFract;
+
+			pos += pixelOffset / viewport.zw;
+
+			gl_Position = vec4(pos * 2. - 1., 0, 1);
+		}
+		`,frag:`
+		precision highp float;
+
+		varying vec4 fragColor;
+
+		uniform float opacity;
+
+		void main() {
+			gl_FragColor = fragColor;
+			gl_FragColor.a *= opacity;
+		}
+		`,uniforms:{range:h.prop("range"),lineWidth:h.prop("lineWidth"),capSize:h.prop("capSize"),opacity:h.prop("opacity"),scale:h.prop("scale"),translate:h.prop("translate"),scaleFract:h.prop("scaleFract"),translateFract:h.prop("translateFract"),viewport:(E,T)=>[T.viewport.x,T.viewport.y,E.viewportWidth,E.viewportHeight]},attributes:{color:{buffer:_,offset:(E,T)=>T.offset*4,divisor:1},position:{buffer:m,offset:(E,T)=>T.offset*8,divisor:1},positionFract:{buffer:y,offset:(E,T)=>T.offset*8,divisor:1},error:{buffer:v,offset:(E,T)=>T.offset*16,divisor:1},direction:{buffer:x,stride:24,offset:0},lineOffset:{buffer:x,stride:24,offset:8},capOffset:{buffer:x,stride:24,offset:16}},primitive:"triangles",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:!1},scissor:{enable:!0,box:h.prop("viewport")},viewport:h.prop("viewport"),stencil:!1,instances:h.prop("count"),count:c.length}),s(C,{update:A,draw:w,destroy:b,regl:h,gl:p,canvas:p.canvas,groups:M}),C;function C(E){E?A(E):E===null&&b(),w()}function w(E){if(typeof E=="number")return k(E);E&&!Array.isArray(E)&&(E=[E]),h._refresh(),M.forEach((T,F)=>{if(T){if(E&&(E[F]?T.draw=!0:T.draw=!1),!T.draw){T.draw=!0;return}k(F)}})}function k(E){typeof E=="number"&&(E=M[E]),E!=null&&E&&E.count&&E.color&&E.opacity&&E.positions&&E.positions.length>1&&(E.scaleRatio=[E.scale[0]*E.viewport.width,E.scale[1]*E.viewport.height],g(E),E.after&&E.after(E))}function A(E){if(!E)return;E.length!=null?typeof E[0]=="number"&&(E=[{positions:E}]):Array.isArray(E)||(E=[E]);let T=0,F=0;if(C.groups=M=E.map((P,z)=>{let I=M[z];if(P)typeof P=="function"?P={after:P}:typeof P[0]=="number"&&(P={positions:P});else return I;return P=o(P,{color:"color colors fill",capSize:"capSize cap capsize cap-size",lineWidth:"lineWidth line-width width line thickness",opacity:"opacity alpha",range:"range dataBox",viewport:"viewport viewBox",errors:"errors error",positions:"positions position data points"}),I||(M[z]=I={id:z,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},P=s({},S,P)),a(I,P,[{lineWidth:L=>+L*.5,capSize:L=>+L*.5,opacity:parseFloat,errors:L=>(L=l(L),F+=L.length,L),positions:(L,B)=>(L=l(L,"float64"),B.count=Math.floor(L.length/2),B.bounds=t(L,2),B.offset=T,T+=B.count,L)},{color:(L,B)=>{let O=B.count;if(L||(L="transparent"),!Array.isArray(L)||typeof L[0]=="number"){let W=L;L=Array(O);for(let X=0;X<O;X++)L[X]=W}if(L.length<O)throw Error("Not enough colors");let G=new Uint8Array(O*4);for(let W=0;W<O;W++){let X=i(L[W],"uint8");G.set(X,W*4)}return G},range:(L,B,O)=>{let G=B.bounds;return L||(L=G),B.scale=[1/(L[2]-L[0]),1/(L[3]-L[1])],B.translate=[-L[0],-L[1]],B.scaleFract=u(B.scale),B.translateFract=u(B.translate),L},viewport:L=>{let B;return Array.isArray(L)?B={x:L[0],y:L[1],width:L[2]-L[0],height:L[3]-L[1]}:L?(B={x:L.x||L.left||0,y:L.y||L.top||0},L.right?B.width=L.right-B.x:B.width=L.w||L.width||0,L.bottom?B.height=L.bottom-B.y:B.height=L.h||L.height||0):B={x:0,y:0,width:p.drawingBufferWidth,height:p.drawingBufferHeight},B}}]),I}),T||F){let P=M.reduce((B,O,G)=>B+(O?O.count:0),0),z=new Float64Array(P*2),I=new Uint8Array(P*4),L=new Float32Array(P*4);M.forEach((B,O)=>{if(!B)return;let{positions:G,count:W,offset:X,color:Z,errors:J}=B;W&&(I.set(Z,X*4),L.set(J,X*4),z.set(G,X*2))});var D=n(z);m(D);var R=u(z,D);y(R),_(I),v(L)}}function b(){m.destroy(),y.destroy(),_.destroy(),v.destroy(),x.destroy()}}}}),kZ=de({"node_modules/unquote/index.js"(e,r){var t=/[\'\"]/;r.exports=function(a){return a?(t.test(a.charAt(0))&&(a=a.substr(1)),t.test(a.charAt(a.length-1))&&(a=a.substr(0,a.length-1)),a):""}}}),j7=de({"node_modules/css-global-keywords/index.json"(e,r){r.exports=["inherit","initial","unset"]}}),U7=de({"node_modules/css-system-font-keywords/index.json"(e,r){r.exports=["caption","icon","menu","message-box","small-caption","status-bar"]}}),q7=de({"node_modules/css-font-weight-keywords/index.json"(e,r){r.exports=["normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900"]}}),V7=de({"node_modules/css-font-style-keywords/index.json"(e,r){r.exports=["normal","italic","oblique"]}}),G7=de({"node_modules/css-font-stretch-keywords/index.json"(e,r){r.exports=["normal","condensed","semi-condensed","extra-condensed","ultra-condensed","expanded","semi-expanded","extra-expanded","ultra-expanded"]}}),CZ=de({"node_modules/parenthesis/index.js"(e,r){"use strict";function t(o,s){if(typeof o!="string")return[o];var l=[o];typeof s=="string"||Array.isArray(s)?s={brackets:s}:s||(s={});var n=s.brackets?Array.isArray(s.brackets)?s.brackets:[s.brackets]:["{}","[]","()"],u=s.escape||"___",c=!!s.flat;n.forEach(function(d){var p=new RegExp(["\\",d[0],"[^\\",d[0],"\\",d[1],"]*\\",d[1]].join("")),g=[];function m(y,_,v){var x=l.push(y.slice(d[0].length,-d[1].length))-1;return g.push(x),u+x+u}l.forEach(function(y,_){for(var v,x=0;y!=v;)if(v=y,y=y.replace(p,m),x++>1e4)throw Error("References have circular dependency. Please, check them.");l[_]=y}),g=g.reverse(),l=l.map(function(y){return g.forEach(function(_){y=y.replace(new RegExp("(\\"+u+_+"\\"+u+")","g"),d[0]+"$1"+d[1])}),y})});var f=new RegExp("\\"+u+"([0-9]+)\\"+u);function h(d,p,g){for(var m=[],y,_=0;y=f.exec(d);){if(_++>1e4)throw Error("Circular references in parenthesis");m.push(d.slice(0,y.index)),m.push(h(p[y[1]],p)),d=d.slice(y.index+y[0].length)}return m.push(d),m}return c?l:h(l[0],l)}function i(o,s){if(s&&s.flat){var l=s&&s.escape||"___",n=o[0],u;if(!n)return"";for(var c=new RegExp("\\"+l+"([0-9]+)\\"+l),f=0;n!=u;){if(f++>1e4)throw Error("Circular references in "+o);u=n,n=n.replace(c,h)}return n}return o.reduce(function d(p,g){return Array.isArray(g)&&(g=g.reduce(d,"")),p+g},"");function h(d,p){if(o[p]==null)throw Error("Reference "+p+"is undefined");return o[p]}}function a(o,s){return Array.isArray(o)?i(o,s):t(o,s)}a.parse=t,a.stringify=i,r.exports=a}}),DZ=de({"node_modules/string-split-by/index.js"(e,r){"use strict";var t=CZ();r.exports=function(a,o,s){if(a==null)throw Error("First argument should be a string");if(o==null)throw Error("Separator should be a string or a RegExp");s?(typeof s=="string"||Array.isArray(s))&&(s={ignore:s}):s={},s.escape==null&&(s.escape=!0),s.ignore==null?s.ignore=["[]","()","{}","<>",'""',"''","``","\u201C\u201D","\xAB\xBB"]:(typeof s.ignore=="string"&&(s.ignore=[s.ignore]),s.ignore=s.ignore.map(function(p){return p.length===1&&(p=p+p),p}));var l=t.parse(a,{flat:!0,brackets:s.ignore}),n=l[0],u=n.split(o);if(s.escape){for(var c=[],f=0;f<u.length;f++){var h=u[f],d=u[f+1];h[h.length-1]==="\\"&&h[h.length-2]!=="\\"?(c.push(h+o+d),f++):c.push(h)}u=c}for(var f=0;f<u.length;f++)l[0]=u[f],u[f]=t.stringify(l,{flat:!0});return u}}}),LZ=de({"node_modules/css-font-size-keywords/index.json"(e,r){r.exports=["xx-small","x-small","small","medium","large","x-large","xx-large","larger","smaller"]}}),H7=de({"node_modules/css-font/lib/util.js"(e,r){"use strict";var t=LZ();r.exports={isSize:function(a){return/^[\d\.]/.test(a)||a.indexOf("/")!==-1||t.indexOf(a)!==-1}}}}),FZ=de({"node_modules/css-font/parse.js"(e,r){"use strict";var t=kZ(),i=j7(),a=U7(),o=q7(),s=V7(),l=G7(),n=DZ(),u=H7().isSize;r.exports=f;var c=f.cache={};function f(d){if(typeof d!="string")throw new Error("Font argument must be a string.");if(c[d])return c[d];if(d==="")throw new Error("Cannot parse an empty string.");if(a.indexOf(d)!==-1)return c[d]={system:d};for(var p={style:"normal",variant:"normal",weight:"normal",stretch:"normal",lineHeight:"normal",size:"1rem",family:["serif"]},g=n(d,/\s+/),m;m=g.shift();){if(i.indexOf(m)!==-1)return["style","variant","weight","stretch"].forEach(function(_){p[_]=m}),c[d]=p;if(s.indexOf(m)!==-1){p.style=m;continue}if(m==="normal"||m==="small-caps"){p.variant=m;continue}if(l.indexOf(m)!==-1){p.stretch=m;continue}if(o.indexOf(m)!==-1){p.weight=m;continue}if(u(m)){var y=n(m,"/");if(p.size=y[0],y[1]!=null?p.lineHeight=h(y[1]):g[0]==="/"&&(g.shift(),p.lineHeight=h(g.shift())),!g.length)throw new Error("Missing required font-family.");return p.family=n(g.join(" "),/\s*,\s*/).map(t),c[d]=p}throw new Error("Unknown or unsupported font token: "+m)}throw new Error("Missing required font-size.")}function h(d){var p=parseFloat(d);return p.toString()===d?p:d}}}),$7=de({"node_modules/css-font/stringify.js"(e,r){"use strict";var t=rp(),i=H7().isSize,a=d(j7()),o=d(U7()),s=d(q7()),l=d(V7()),n=d(G7()),u={normal:1,"small-caps":1},c={serif:1,"sans-serif":1,monospace:1,cursive:1,fantasy:1,"system-ui":1},f={style:"normal",variant:"normal",weight:"normal",stretch:"normal",size:"1rem",lineHeight:"normal",family:"serif"};r.exports=function(g){if(g=t(g,{style:"style fontstyle fontStyle font-style slope distinction",variant:"variant font-variant fontVariant fontvariant var capitalization",weight:"weight w font-weight fontWeight fontweight",stretch:"stretch font-stretch fontStretch fontstretch width",size:"size s font-size fontSize fontsize height em emSize",lineHeight:"lh line-height lineHeight lineheight leading",family:"font family fontFamily font-family fontfamily type typeface face",system:"system reserved default global"}),g.system)return g.system&&h(g.system,o),g.system;if(h(g.style,l),h(g.variant,u),h(g.weight,s),h(g.stretch,n),g.size==null&&(g.size=f.size),typeof g.size=="number"&&(g.size+="px"),!i)throw Error("Bad size value `"+g.size+"`");g.family||(g.family=f.family),Array.isArray(g.family)&&(g.family.length||(g.family=[f.family]),g.family=g.family.map(function(y){return c[y]?y:'"'+y+'"'}).join(", "));var m=[];return m.push(g.style),g.variant!==g.style&&m.push(g.variant),g.weight!==g.variant&&g.weight!==g.style&&m.push(g.weight),g.stretch!==g.weight&&g.stretch!==g.variant&&g.stretch!==g.style&&m.push(g.stretch),m.push(g.size+(g.lineHeight==null||g.lineHeight==="normal"||g.lineHeight+""=="1"?"":"/"+g.lineHeight)),m.push(g.family),m.filter(Boolean).join(" ")};function h(p,g){if(p&&!g[p]&&!a[p])throw Error("Unknown keyword `"+p+"`");return p}function d(p){for(var g={},m=0;m<p.length;m++)g[p[m]]=1;return g}}}),PZ=de({"node_modules/css-font/index.js"(e,r){"use strict";r.exports={parse:FZ(),stringify:$7()}}}),W7=de({"node_modules/@plotly/regl/dist/regl.unchecked.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?r.exports=i():t.createREGL=i()})(e,(function(){"use strict";var t=function(bt,dr){for(var _r=Object.keys(dr),Kr=0;Kr<_r.length;++Kr)bt[_r[Kr]]=dr[_r[Kr]];return bt},i=0,a=0,o=5,s=6;function l(bt,dr){this.id=i++,this.type=bt,this.data=dr}function n(bt){return bt.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function u(bt){if(bt.length===0)return[];var dr=bt.charAt(0),_r=bt.charAt(bt.length-1);if(bt.length>1&&dr===_r&&(dr==='"'||dr==="'"))return['"'+n(bt.substr(1,bt.length-2))+'"'];var Kr=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(bt);if(Kr)return u(bt.substr(0,Kr.index)).concat(u(Kr[1])).concat(u(bt.substr(Kr.index+Kr[0].length)));var ci=bt.split(".");if(ci.length===1)return['"'+n(bt)+'"'];for(var yi=[],si=0;si<ci.length;++si)yi=yi.concat(u(ci[si]));return yi}function c(bt){return"["+u(bt).join("][")+"]"}function f(bt,dr){return new l(bt,c(dr+""))}function h(bt){return typeof bt=="function"&&!bt._reglType||bt instanceof l}function d(bt,dr){if(typeof bt=="function")return new l(a,bt);if(typeof bt=="number"||typeof bt=="boolean")return new l(o,bt);if(Array.isArray(bt))return new l(s,bt.map(function(_r,Kr){return d(_r,dr+"["+Kr+"]")}));if(bt instanceof l)return bt}var p={DynamicVariable:l,define:f,isDynamic:h,unbox:d,accessor:c},g={next:typeof requestAnimationFrame=="function"?function(bt){return requestAnimationFrame(bt)}:function(bt){return setTimeout(bt,16)},cancel:typeof cancelAnimationFrame=="function"?function(bt){return cancelAnimationFrame(bt)}:clearTimeout},m=typeof performance<"u"&&performance.now?function(){return performance.now()}:function(){return+new Date};function y(){var bt={"":0},dr=[""];return{id:function(_r){var Kr=bt[_r];return Kr||(Kr=bt[_r]=dr.length,dr.push(_r),Kr)},str:function(_r){return dr[_r]}}}function _(bt,dr,_r){var Kr=document.createElement("canvas");t(Kr.style,{border:0,margin:0,padding:0,top:0,left:0,width:"100%",height:"100%"}),bt.appendChild(Kr),bt===document.body&&(Kr.style.position="absolute",t(bt.style,{margin:0,padding:0}));function ci(){var Ni=window.innerWidth,Ji=window.innerHeight;if(bt!==document.body){var Qi=Kr.getBoundingClientRect();Ni=Qi.right-Qi.left,Ji=Qi.bottom-Qi.top}Kr.width=_r*Ni,Kr.height=_r*Ji}var yi;bt!==document.body&&typeof ResizeObserver=="function"?(yi=new ResizeObserver(function(){setTimeout(ci)}),yi.observe(bt)):window.addEventListener("resize",ci,!1);function si(){yi?yi.disconnect():window.removeEventListener("resize",ci),bt.removeChild(Kr)}return ci(),{canvas:Kr,onDestroy:si}}function v(bt,dr){function _r(Kr){try{return bt.getContext(Kr,dr)}catch{return null}}return _r("webgl")||_r("experimental-webgl")||_r("webgl-experimental")}function x(bt){return typeof bt.nodeName=="string"&&typeof bt.appendChild=="function"&&typeof bt.getBoundingClientRect=="function"}function S(bt){return typeof bt.drawArrays=="function"||typeof bt.drawElements=="function"}function M(bt){return typeof bt=="string"?bt.split():bt}function C(bt){return typeof bt=="string"?document.querySelector(bt):bt}function w(bt){var dr=bt||{},_r,Kr,ci,yi,si={},Ni=[],Ji=[],Qi=typeof window>"u"?1:window.devicePixelRatio,ra=!1,mn={},Wa=function(Hr){},xa=function(){};if(typeof dr=="string"?_r=document.querySelector(dr):typeof dr=="object"&&(x(dr)?_r=dr:S(dr)?(yi=dr,ci=yi.canvas):("gl"in dr?yi=dr.gl:"canvas"in dr?ci=C(dr.canvas):"container"in dr&&(Kr=C(dr.container)),"attributes"in dr&&(si=dr.attributes),"extensions"in dr&&(Ni=M(dr.extensions)),"optionalExtensions"in dr&&(Ji=M(dr.optionalExtensions)),"onDone"in dr&&(Wa=dr.onDone),"profile"in dr&&(ra=!!dr.profile),"pixelRatio"in dr&&(Qi=+dr.pixelRatio),"cachedCode"in dr&&(mn=dr.cachedCode))),_r&&(_r.nodeName.toLowerCase()==="canvas"?ci=_r:Kr=_r),!yi){if(!ci){var Pi=_(Kr||document.body,Wa,Qi);if(!Pi)return null;ci=Pi.canvas,xa=Pi.onDestroy}si.premultipliedAlpha===void 0&&(si.premultipliedAlpha=!0),yi=v(ci,si)}return yi?{gl:yi,canvas:ci,container:Kr,extensions:Ni,optionalExtensions:Ji,pixelRatio:Qi,profile:ra,cachedCode:mn,onDone:Wa,onDestroy:xa}:(xa(),Wa("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function k(bt,dr){var _r={};function Kr(si){var Ni=si.toLowerCase(),Ji;try{Ji=_r[Ni]=bt.getExtension(Ni)}catch{}return!!Ji}for(var ci=0;ci<dr.extensions.length;++ci){var yi=dr.extensions[ci];if(!Kr(yi))return dr.onDestroy(),dr.onDone('"'+yi+'" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return dr.optionalExtensions.forEach(Kr),{extensions:_r,restore:function(){Object.keys(_r).forEach(function(si){if(_r[si]&&!Kr(si))throw new Error("(regl): error restoring extension "+si)})}}}function A(bt,dr){for(var _r=Array(bt),Kr=0;Kr<bt;++Kr)_r[Kr]=dr(Kr);return _r}var b=5120,E=5121,T=5122,F=5123,D=5124,R=5125,P=5126;function z(bt){for(var dr=16;dr<=1<<28;dr*=16)if(bt<=dr)return dr;return 0}function I(bt){var dr,_r;return dr=(bt>65535)<<4,bt>>>=dr,_r=(bt>255)<<3,bt>>>=_r,dr|=_r,_r=(bt>15)<<2,bt>>>=_r,dr|=_r,_r=(bt>3)<<1,bt>>>=_r,dr|=_r,dr|bt>>1}function L(){var bt=A(8,function(){return[]});function dr(yi){var si=z(yi),Ni=bt[I(si)>>2];return Ni.length>0?Ni.pop():new ArrayBuffer(si)}function _r(yi){bt[I(yi.byteLength)>>2].push(yi)}function Kr(yi,si){var Ni=null;switch(yi){case b:Ni=new Int8Array(dr(si),0,si);break;case E:Ni=new Uint8Array(dr(si),0,si);break;case T:Ni=new Int16Array(dr(2*si),0,si);break;case F:Ni=new Uint16Array(dr(2*si),0,si);break;case D:Ni=new Int32Array(dr(4*si),0,si);break;case R:Ni=new Uint32Array(dr(4*si),0,si);break;case P:Ni=new Float32Array(dr(4*si),0,si);break;default:return null}return Ni.length!==si?Ni.subarray(0,si):Ni}function ci(yi){_r(yi.buffer)}return{alloc:dr,free:_r,allocType:Kr,freeType:ci}}var B=L();B.zero=L();var O=3408,G=3410,W=3411,X=3412,Z=3413,J=3414,N=3415,H=33901,$=33902,U=3379,V=3386,j=34921,q=36347,Y=36348,K=35661,te=35660,ne=34930,se=36349,le=34076,ce=34024,pe=7936,xe=7937,ye=7938,fe=35724,ae=34047,ee=36063,ie=34852,Q=3553,ue=34067,ge=34069,Me=33984,Te=6408,je=5126,Ve=5121,Ze=36160,Ke=36053,vt=36064,xt=16384,Pt=function(bt,dr){var _r=1;dr.ext_texture_filter_anisotropic&&(_r=bt.getParameter(ae));var Kr=1,ci=1;dr.webgl_draw_buffers&&(Kr=bt.getParameter(ie),ci=bt.getParameter(ee));var yi=!!dr.oes_texture_float;if(yi){var si=bt.createTexture();bt.bindTexture(Q,si),bt.texImage2D(Q,0,Te,1,1,0,Te,je,null);var Ni=bt.createFramebuffer();if(bt.bindFramebuffer(Ze,Ni),bt.framebufferTexture2D(Ze,vt,Q,si,0),bt.bindTexture(Q,null),bt.checkFramebufferStatus(Ze)!==Ke)yi=!1;else{bt.viewport(0,0,1,1),bt.clearColor(1,0,0,1),bt.clear(xt);var Ji=B.allocType(je,4);bt.readPixels(0,0,1,1,Te,je,Ji),bt.getError()?yi=!1:(bt.deleteFramebuffer(Ni),bt.deleteTexture(si),yi=Ji[0]===1),B.freeType(Ji)}}var Qi=typeof navigator<"u"&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent)),ra=!0;if(!Qi){var mn=bt.createTexture(),Wa=B.allocType(Ve,36);bt.activeTexture(Me),bt.bindTexture(ue,mn),bt.texImage2D(ge,0,Te,3,3,0,Te,Ve,Wa),B.freeType(Wa),bt.bindTexture(ue,null),bt.deleteTexture(mn),ra=!bt.getError()}return{colorBits:[bt.getParameter(G),bt.getParameter(W),bt.getParameter(X),bt.getParameter(Z)],depthBits:bt.getParameter(J),stencilBits:bt.getParameter(N),subpixelBits:bt.getParameter(O),extensions:Object.keys(dr).filter(function(xa){return!!dr[xa]}),maxAnisotropic:_r,maxDrawbuffers:Kr,maxColorAttachments:ci,pointSizeDims:bt.getParameter(H),lineWidthDims:bt.getParameter($),maxViewportDims:bt.getParameter(V),maxCombinedTextureUnits:bt.getParameter(K),maxCubeMapSize:bt.getParameter(le),maxRenderbufferSize:bt.getParameter(ce),maxTextureUnits:bt.getParameter(ne),maxTextureSize:bt.getParameter(U),maxAttributes:bt.getParameter(j),maxVertexUniforms:bt.getParameter(q),maxVertexTextureUnits:bt.getParameter(te),maxVaryingVectors:bt.getParameter(Y),maxFragmentUniforms:bt.getParameter(se),glsl:bt.getParameter(fe),renderer:bt.getParameter(xe),vendor:bt.getParameter(pe),version:bt.getParameter(ye),readFloat:yi,npotTextureCube:ra}},mt=function(bt){return bt instanceof Uint8Array||bt instanceof Uint16Array||bt instanceof Uint32Array||bt instanceof Int8Array||bt instanceof Int16Array||bt instanceof Int32Array||bt instanceof Float32Array||bt instanceof Float64Array||bt instanceof Uint8ClampedArray};function Mt(bt){return!!bt&&typeof bt=="object"&&Array.isArray(bt.shape)&&Array.isArray(bt.stride)&&typeof bt.offset=="number"&&bt.shape.length===bt.stride.length&&(Array.isArray(bt.data)||mt(bt.data))}var lt=function(bt){return Object.keys(bt).map(function(dr){return bt[dr]})},qe={shape:Ee,flatten:ke};function Ye(bt,dr,_r){for(var Kr=0;Kr<dr;++Kr)_r[Kr]=bt[Kr]}function me(bt,dr,_r,Kr){for(var ci=0,yi=0;yi<dr;++yi)for(var si=bt[yi],Ni=0;Ni<_r;++Ni)Kr[ci++]=si[Ni]}function _e(bt,dr,_r,Kr,ci,yi){for(var si=yi,Ni=0;Ni<dr;++Ni)for(var Ji=bt[Ni],Qi=0;Qi<_r;++Qi)for(var ra=Ji[Qi],mn=0;mn<Kr;++mn)ci[si++]=ra[mn]}function Ae(bt,dr,_r,Kr,ci){for(var yi=1,si=_r+1;si<dr.length;++si)yi*=dr[si];var Ni=dr[_r];if(dr.length-_r===4){var Ji=dr[_r+1],Qi=dr[_r+2],ra=dr[_r+3];for(si=0;si<Ni;++si)_e(bt[si],Ji,Qi,ra,Kr,ci),ci+=yi}else for(si=0;si<Ni;++si)Ae(bt[si],dr,_r+1,Kr,ci),ci+=yi}function ke(bt,dr,_r,Kr){var ci=1;if(dr.length)for(var yi=0;yi<dr.length;++yi)ci*=dr[yi];else ci=0;var si=Kr||B.allocType(_r,ci);switch(dr.length){case 0:break;case 1:Ye(bt,dr[0],si);break;case 2:me(bt,dr[0],dr[1],si);break;case 3:_e(bt,dr[0],dr[1],dr[2],si,0);break;default:Ae(bt,dr,0,si,0)}return si}function Ee(bt){for(var dr=[],_r=bt;_r.length;_r=_r[0])dr.push(_r.length);return dr}var De={"[object Int8Array]":5120,"[object Int16Array]":5122,"[object Int32Array]":5124,"[object Uint8Array]":5121,"[object Uint8ClampedArray]":5121,"[object Uint16Array]":5123,"[object Uint32Array]":5125,"[object Float32Array]":5126,"[object Float64Array]":5121,"[object ArrayBuffer]":5121},Je=5120,Ue=5122,at=5124,rt=5121,ft=5123,At=5125,ht=5126,Gt=5126,fr={int8:Je,int16:Ue,int32:at,uint8:rt,uint16:ft,uint32:At,float:ht,float32:Gt},gt=35048,yt=35040,kt={dynamic:gt,stream:yt,static:35044},Lt=qe.flatten,Ct=qe.shape,$t=35044,mr=35040,br=5121,Er=5126,Tr=[];Tr[5120]=1,Tr[5122]=2,Tr[5124]=4,Tr[5121]=1,Tr[5123]=2,Tr[5125]=4,Tr[5126]=4;function Ur(bt){return De[Object.prototype.toString.call(bt)]|0}function Ai(bt,dr){for(var _r=0;_r<dr.length;++_r)bt[_r]=dr[_r]}function oi(bt,dr,_r,Kr,ci,yi,si){for(var Ni=0,Ji=0;Ji<_r;++Ji)for(var Qi=0;Qi<Kr;++Qi)bt[Ni++]=dr[ci*Ji+yi*Qi+si]}function Qr(bt,dr,_r,Kr){var ci=0,yi={};function si(Hr){this.id=ci++,this.buffer=bt.createBuffer(),this.type=Hr,this.usage=$t,this.byteLength=0,this.dimension=1,this.dtype=br,this.persistentData=null,_r.profile&&(this.stats={size:0})}si.prototype.bind=function(){bt.bindBuffer(this.type,this.buffer)},si.prototype.destroy=function(){Wa(this)};var Ni=[];function Ji(Hr,Ei){var Yi=Ni.pop();return Yi||(Yi=new si(Hr)),Yi.bind(),mn(Yi,Ei,mr,0,1,!1),Yi}function Qi(Hr){Ni.push(Hr)}function ra(Hr,Ei,Yi){Hr.byteLength=Ei.byteLength,bt.bufferData(Hr.type,Ei,Yi)}function mn(Hr,Ei,Yi,la,Ui,Da){var wa;if(Hr.usage=Yi,Array.isArray(Ei)){if(Hr.dtype=la||Er,Ei.length>0){var bn;if(Array.isArray(Ei[0])){wa=Ct(Ei);for(var ji=1,Ii=1;Ii<wa.length;++Ii)ji*=wa[Ii];Hr.dimension=ji,bn=Lt(Ei,wa,Hr.dtype),ra(Hr,bn,Yi),Da?Hr.persistentData=bn:B.freeType(bn)}else if(typeof Ei[0]=="number"){Hr.dimension=Ui;var Va=B.allocType(Hr.dtype,Ei.length);Ai(Va,Ei),ra(Hr,Va,Yi),Da?Hr.persistentData=Va:B.freeType(Va)}else mt(Ei[0])&&(Hr.dimension=Ei[0].length,Hr.dtype=la||Ur(Ei[0])||Er,bn=Lt(Ei,[Ei.length,Ei[0].length],Hr.dtype),ra(Hr,bn,Yi),Da?Hr.persistentData=bn:B.freeType(bn))}}else if(mt(Ei))Hr.dtype=la||Ur(Ei),Hr.dimension=Ui,ra(Hr,Ei,Yi),Da&&(Hr.persistentData=new Uint8Array(new Uint8Array(Ei.buffer)));else if(Mt(Ei)){wa=Ei.shape;var _a=Ei.stride,ca=Ei.offset,va=0,Ga=0,wn=0,Hn=0;wa.length===1?(va=wa[0],Ga=1,wn=_a[0],Hn=0):wa.length===2&&(va=wa[0],Ga=wa[1],wn=_a[0],Hn=_a[1]),Hr.dtype=la||Ur(Ei.data)||Er,Hr.dimension=Ga;var Ca=B.allocType(Hr.dtype,va*Ga);oi(Ca,Ei.data,va,Ga,wn,Hn,ca),ra(Hr,Ca,Yi),Da?Hr.persistentData=Ca:B.freeType(Ca)}else Ei instanceof ArrayBuffer&&(Hr.dtype=br,Hr.dimension=Ui,ra(Hr,Ei,Yi),Da&&(Hr.persistentData=new Uint8Array(new Uint8Array(Ei))))}function Wa(Hr){dr.bufferCount--,Kr(Hr);var Ei=Hr.buffer;bt.deleteBuffer(Ei),Hr.buffer=null,delete yi[Hr.id]}function xa(Hr,Ei,Yi,la){dr.bufferCount++;var Ui=new si(Ei);yi[Ui.id]=Ui;function Da(ji){var Ii=$t,Va=null,_a=0,ca=0,va=1;return Array.isArray(ji)||mt(ji)||Mt(ji)||ji instanceof ArrayBuffer?Va=ji:typeof ji=="number"?_a=ji|0:ji&&("data"in ji&&(Va=ji.data),"usage"in ji&&(Ii=kt[ji.usage]),"type"in ji&&(ca=fr[ji.type]),"dimension"in ji&&(va=ji.dimension|0),"length"in ji&&(_a=ji.length|0)),Ui.bind(),Va?mn(Ui,Va,Ii,ca,va,la):(_a&&bt.bufferData(Ui.type,_a,Ii),Ui.dtype=ca||br,Ui.usage=Ii,Ui.dimension=va,Ui.byteLength=_a),_r.profile&&(Ui.stats.size=Ui.byteLength*Tr[Ui.dtype]),Da}function wa(ji,Ii){bt.bufferSubData(Ui.type,Ii,ji)}function bn(ji,Ii){var Va=(Ii||0)|0,_a;if(Ui.bind(),mt(ji)||ji instanceof ArrayBuffer)wa(ji,Va);else if(Array.isArray(ji)){if(ji.length>0){if(typeof ji[0]=="number"){var ca=B.allocType(Ui.dtype,ji.length);Ai(ca,ji),wa(ca,Va),B.freeType(ca)}else if(Array.isArray(ji[0])||mt(ji[0])){_a=Ct(ji);var va=Lt(ji,_a,Ui.dtype);wa(va,Va),B.freeType(va)}}}else if(Mt(ji)){_a=ji.shape;var Ga=ji.stride,wn=0,Hn=0,Ca=0,en=0;_a.length===1?(wn=_a[0],Hn=1,Ca=Ga[0],en=0):_a.length===2&&(wn=_a[0],Hn=_a[1],Ca=Ga[0],en=Ga[1]);var Un=Array.isArray(ji.data)?Ui.dtype:Ur(ji.data),qn=B.allocType(Un,wn*Hn);oi(qn,ji.data,wn,Hn,Ca,en,ji.offset),wa(qn,Va),B.freeType(qn)}return Da}return Yi||Da(Hr),Da._reglType="buffer",Da._buffer=Ui,Da.subdata=bn,_r.profile&&(Da.stats=Ui.stats),Da.destroy=function(){Wa(Ui)},Da}function Pi(){lt(yi).forEach(function(Hr){Hr.buffer=bt.createBuffer(),bt.bindBuffer(Hr.type,Hr.buffer),bt.bufferData(Hr.type,Hr.persistentData||Hr.byteLength,Hr.usage)})}return _r.profile&&(dr.getTotalBufferSize=function(){var Hr=0;return Object.keys(yi).forEach(function(Ei){Hr+=yi[Ei].stats.size}),Hr}),{create:xa,createStream:Ji,destroyStream:Qi,clear:function(){lt(yi).forEach(Wa),Ni.forEach(Wa)},getBuffer:function(Hr){return Hr&&Hr._buffer instanceof si?Hr._buffer:null},restore:Pi,_initBuffer:mn}}var ea=0,$i=0,ja=1,ya=1,pa=4,xi=4,bi={points:ea,point:$i,lines:ja,line:ya,triangles:pa,triangle:xi,"line loop":2,"line strip":3,"triangle strip":5,"triangle fan":6},Ua=0,dn=1,pi=4,Jr=5120,Be=5121,Fe=5122,Et=5123,St=5124,zt=5125,Wt=34963,Yt=35040,ze=35044;function tt(bt,dr,_r,Kr){var ci={},yi=0,si={uint8:Be,uint16:Et};dr.oes_element_index_uint&&(si.uint32=zt);function Ni(Pi){this.id=yi++,ci[this.id]=this,this.buffer=Pi,this.primType=pi,this.vertCount=0,this.type=0}Ni.prototype.bind=function(){this.buffer.bind()};var Ji=[];function Qi(Pi){var Hr=Ji.pop();return Hr||(Hr=new Ni(_r.create(null,Wt,!0,!1)._buffer)),mn(Hr,Pi,Yt,-1,-1,0,0),Hr}function ra(Pi){Ji.push(Pi)}function mn(Pi,Hr,Ei,Yi,la,Ui,Da){Pi.buffer.bind();var wa;if(Hr){var bn=Da;!Da&&(!mt(Hr)||Mt(Hr)&&!mt(Hr.data))&&(bn=dr.oes_element_index_uint?zt:Et),_r._initBuffer(Pi.buffer,Hr,Ei,bn,3)}else bt.bufferData(Wt,Ui,Ei),Pi.buffer.dtype=wa||Be,Pi.buffer.usage=Ei,Pi.buffer.dimension=3,Pi.buffer.byteLength=Ui;if(wa=Da,!Da){switch(Pi.buffer.dtype){case Be:case Jr:wa=Be;break;case Et:case Fe:wa=Et;break;case zt:case St:wa=zt;break;default:}Pi.buffer.dtype=wa}Pi.type=wa;var ji=la;ji<0&&(ji=Pi.buffer.byteLength,wa===Et?ji>>=1:wa===zt&&(ji>>=2)),Pi.vertCount=ji;var Ii=Yi;if(Yi<0){Ii=pi;var Va=Pi.buffer.dimension;Va===1&&(Ii=Ua),Va===2&&(Ii=dn),Va===3&&(Ii=pi)}Pi.primType=Ii}function Wa(Pi){Kr.elementsCount--,delete ci[Pi.id],Pi.buffer.destroy(),Pi.buffer=null}function xa(Pi,Hr){var Ei=_r.create(null,Wt,!0),Yi=new Ni(Ei._buffer);Kr.elementsCount++;function la(Ui){if(!Ui)Ei(),Yi.primType=pi,Yi.vertCount=0,Yi.type=Be;else if(typeof Ui=="number")Ei(Ui),Yi.primType=pi,Yi.vertCount=Ui|0,Yi.type=Be;else{var Da=null,wa=ze,bn=-1,ji=-1,Ii=0,Va=0;Array.isArray(Ui)||mt(Ui)||Mt(Ui)?Da=Ui:("data"in Ui&&(Da=Ui.data),"usage"in Ui&&(wa=kt[Ui.usage]),"primitive"in Ui&&(bn=bi[Ui.primitive]),"count"in Ui&&(ji=Ui.count|0),"type"in Ui&&(Va=si[Ui.type]),"length"in Ui?Ii=Ui.length|0:(Ii=ji,Va===Et||Va===Fe?Ii*=2:(Va===zt||Va===St)&&(Ii*=4))),mn(Yi,Da,wa,bn,ji,Ii,Va)}return la}return la(Pi),la._reglType="elements",la._elements=Yi,la.subdata=function(Ui,Da){return Ei.subdata(Ui,Da),la},la.destroy=function(){Wa(Yi)},la}return{create:xa,createStream:Qi,destroyStream:ra,getElements:function(Pi){return typeof Pi=="function"&&Pi._elements instanceof Ni?Pi._elements:null},clear:function(){lt(ci).forEach(Wa)}}}var ct=new Float32Array(1),wt=new Uint32Array(ct.buffer),Nt=5123;function It(bt){for(var dr=B.allocType(Nt,bt.length),_r=0;_r<bt.length;++_r)if(isNaN(bt[_r]))dr[_r]=65535;else if(bt[_r]===1/0)dr[_r]=31744;else if(bt[_r]===-1/0)dr[_r]=64512;else{ct[0]=bt[_r];var Kr=wt[0],ci=Kr>>>31<<15,yi=(Kr<<1>>>24)-127,si=Kr>>13&1023;if(yi<-24)dr[_r]=ci;else if(yi<-14){var Ni=-14-yi;dr[_r]=ci+(si+1024>>Ni)}else yi>15?dr[_r]=ci+31744:dr[_r]=ci+(yi+15<<10)+si}return dr}function Zt(bt){return Array.isArray(bt)||mt(bt)}var qt=34467,vr=3553,Br=34067,Pr=34069,Mi=6408,gi=6406,ba=6407,Hi=6409,Za=6410,oa=32854,Cn=32855,_n=36194,Li=32819,In=32820,pn=33635,Ka=34042,Rn=6402,tn=34041,Mn=35904,Kn=35906,zn=36193,ua=33776,Ea=33777,ln=33778,on=33779,ao=35986,ho=35987,Jn=34798,lo=35840,Fo=35841,uo=35842,Qn=35843,jo=36196,Yn=5121,Bn=5123,ps=5125,xo=5126,no=10242,Mo=10243,Vn=10497,ts=33071,ws=33648,So=10240,nl=10241,vs=9728,go=9729,Xn=9984,On=9985,Uo=9986,kl=9987,mu=33170,Ul=4352,gu=4353,yu=4354,Fu=34046,au=3317,xc=37440,Pu=37441,Cl=37443,bc=37444,Iu=33984,_l=[Xn,Uo,On,kl],ms=[0,Hi,Za,ba,Mi],ss={};ss[Hi]=ss[gi]=ss[Rn]=1,ss[tn]=ss[Za]=2,ss[ba]=ss[Mn]=3,ss[Mi]=ss[Kn]=4;function fl(bt){return"[object "+bt+"]"}var wc=fl("HTMLCanvasElement"),Tc=fl("OffscreenCanvas"),tc=fl("CanvasRenderingContext2D"),wh=fl("ImageBitmap"),Th=fl("HTMLImageElement"),Rd=fl("HTMLVideoElement"),fp=Object.keys(De).concat([wc,Tc,tc,wh,Th,Rd]),Ru=[];Ru[Yn]=1,Ru[xo]=4,Ru[zn]=2,Ru[Bn]=2,Ru[ps]=4;var Ts=[];Ts[oa]=2,Ts[Cn]=2,Ts[_n]=2,Ts[tn]=4,Ts[ua]=.5,Ts[Ea]=.5,Ts[ln]=1,Ts[on]=1,Ts[ao]=.5,Ts[ho]=1,Ts[Jn]=1,Ts[lo]=.5,Ts[Fo]=.25,Ts[uo]=.5,Ts[Qn]=.25,Ts[jo]=.5;function Ah(bt){return Array.isArray(bt)&&(bt.length===0||typeof bt[0]=="number")}function vf(bt){if(!Array.isArray(bt))return!1;var dr=bt.length;return!(dr===0||!Zt(bt[0]))}function Ac(bt){return Object.prototype.toString.call(bt)}function Mh(bt){return Ac(bt)===wc}function Mc(bt){return Ac(bt)===Tc}function $c(bt){return Ac(bt)===tc}function zu(bt){return Ac(bt)===wh}function mf(bt){return Ac(bt)===Th}function jf(bt){return Ac(bt)===Rd}function Sc(bt){if(!bt)return!1;var dr=Ac(bt);return fp.indexOf(dr)>=0?!0:Ah(bt)||vf(bt)||Mt(bt)}function id(bt){return De[Object.prototype.toString.call(bt)]|0}function Uf(bt,dr){var _r=dr.length;switch(bt.type){case Yn:case Bn:case ps:case xo:var Kr=B.allocType(bt.type,_r);Kr.set(dr),bt.data=Kr;break;case zn:bt.data=It(dr);break;default:}}function zd(bt,dr){return B.allocType(bt.type===zn?xo:bt.type,dr)}function Bu(bt,dr){bt.type===zn?(bt.data=It(dr),B.freeType(dr)):bt.data=dr}function Sh(bt,dr,_r,Kr,ci,yi){for(var si=bt.width,Ni=bt.height,Ji=bt.channels,Qi=si*Ni*Ji,ra=zd(bt,Qi),mn=0,Wa=0;Wa<Ni;++Wa)for(var xa=0;xa<si;++xa)for(var Pi=0;Pi<Ji;++Pi)ra[mn++]=dr[_r*xa+Kr*Wa+ci*Pi+yi];Bu(bt,ra)}function _u(bt,dr,_r,Kr,ci,yi){var si;if(typeof Ts[bt]<"u"?si=Ts[bt]:si=ss[bt]*Ru[dr],yi&&(si*=6),ci){for(var Ni=0,Ji=_r;Ji>=1;)Ni+=si*Ji*Ji,Ji/=2;return Ni}else return si*_r*Kr}function qf(bt,dr,_r,Kr,ci,yi,si){var Ni={"don't care":Ul,"dont care":Ul,nice:yu,fast:gu},Ji={repeat:Vn,clamp:ts,mirror:ws},Qi={nearest:vs,linear:go},ra=t({mipmap:kl,"nearest mipmap nearest":Xn,"linear mipmap nearest":On,"nearest mipmap linear":Uo,"linear mipmap linear":kl},Qi),mn={none:0,browser:bc},Wa={uint8:Yn,rgba4:Li,rgb565:pn,"rgb5 a1":In},xa={alpha:gi,luminance:Hi,"luminance alpha":Za,rgb:ba,rgba:Mi,rgba4:oa,"rgb5 a1":Cn,rgb565:_n},Pi={};dr.ext_srgb&&(xa.srgb=Mn,xa.srgba=Kn),dr.oes_texture_float&&(Wa.float32=Wa.float=xo),dr.oes_texture_half_float&&(Wa.float16=Wa["half float"]=zn),dr.webgl_depth_texture&&(t(xa,{depth:Rn,"depth stencil":tn}),t(Wa,{uint16:Bn,uint32:ps,"depth stencil":Ka})),dr.webgl_compressed_texture_s3tc&&t(Pi,{"rgb s3tc dxt1":ua,"rgba s3tc dxt1":Ea,"rgba s3tc dxt3":ln,"rgba s3tc dxt5":on}),dr.webgl_compressed_texture_atc&&t(Pi,{"rgb atc":ao,"rgba atc explicit alpha":ho,"rgba atc interpolated alpha":Jn}),dr.webgl_compressed_texture_pvrtc&&t(Pi,{"rgb pvrtc 4bppv1":lo,"rgb pvrtc 2bppv1":Fo,"rgba pvrtc 4bppv1":uo,"rgba pvrtc 2bppv1":Qn}),dr.webgl_compressed_texture_etc1&&(Pi["rgb etc1"]=jo);var Hr=Array.prototype.slice.call(bt.getParameter(qt));Object.keys(Pi).forEach(function(gr){var hi=Pi[gr];Hr.indexOf(hi)>=0&&(xa[gr]=hi)});var Ei=Object.keys(xa);_r.textureFormats=Ei;var Yi=[];Object.keys(xa).forEach(function(gr){var hi=xa[gr];Yi[hi]=gr});var la=[];Object.keys(Wa).forEach(function(gr){var hi=Wa[gr];la[hi]=gr});var Ui=[];Object.keys(Qi).forEach(function(gr){var hi=Qi[gr];Ui[hi]=gr});var Da=[];Object.keys(ra).forEach(function(gr){var hi=ra[gr];Da[hi]=gr});var wa=[];Object.keys(Ji).forEach(function(gr){var hi=Ji[gr];wa[hi]=gr});var bn=Ei.reduce(function(gr,hi){var di=xa[hi];return di===Hi||di===gi||di===Hi||di===Za||di===Rn||di===tn||dr.ext_srgb&&(di===Mn||di===Kn)?gr[di]=di:di===Cn||hi.indexOf("rgba")>=0?gr[di]=Mi:gr[di]=ba,gr},{});function ji(){this.internalformat=Mi,this.format=Mi,this.type=Yn,this.compressed=!1,this.premultiplyAlpha=!1,this.flipY=!1,this.unpackAlignment=1,this.colorSpace=bc,this.width=0,this.height=0,this.channels=0}function Ii(gr,hi){gr.internalformat=hi.internalformat,gr.format=hi.format,gr.type=hi.type,gr.compressed=hi.compressed,gr.premultiplyAlpha=hi.premultiplyAlpha,gr.flipY=hi.flipY,gr.unpackAlignment=hi.unpackAlignment,gr.colorSpace=hi.colorSpace,gr.width=hi.width,gr.height=hi.height,gr.channels=hi.channels}function Va(gr,hi){if(!(typeof hi!="object"||!hi)){if("premultiplyAlpha"in hi&&(gr.premultiplyAlpha=hi.premultiplyAlpha),"flipY"in hi&&(gr.flipY=hi.flipY),"alignment"in hi&&(gr.unpackAlignment=hi.alignment),"colorSpace"in hi&&(gr.colorSpace=mn[hi.colorSpace]),"type"in hi){var di=hi.type;gr.type=Wa[di]}var sn=gr.width,Io=gr.height,_s=gr.channels,an=!1;"shape"in hi?(sn=hi.shape[0],Io=hi.shape[1],hi.shape.length===3&&(_s=hi.shape[2],an=!0)):("radius"in hi&&(sn=Io=hi.radius),"width"in hi&&(sn=hi.width),"height"in hi&&(Io=hi.height),"channels"in hi&&(_s=hi.channels,an=!0)),gr.width=sn|0,gr.height=Io|0,gr.channels=_s|0;var cr=!1;if("format"in hi){var xr=hi.format,kr=gr.internalformat=xa[xr];gr.format=bn[kr],xr in Wa&&("type"in hi||(gr.type=Wa[xr])),xr in Pi&&(gr.compressed=!0),cr=!0}!an&&cr?gr.channels=ss[gr.format]:an&&!cr&&gr.channels!==ms[gr.format]&&(gr.format=gr.internalformat=ms[gr.channels])}}function _a(gr){bt.pixelStorei(xc,gr.flipY),bt.pixelStorei(Pu,gr.premultiplyAlpha),bt.pixelStorei(Cl,gr.colorSpace),bt.pixelStorei(au,gr.unpackAlignment)}function ca(){ji.call(this),this.xOffset=0,this.yOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function va(gr,hi){var di=null;if(Sc(hi)?di=hi:hi&&(Va(gr,hi),"x"in hi&&(gr.xOffset=hi.x|0),"y"in hi&&(gr.yOffset=hi.y|0),Sc(hi.data)&&(di=hi.data)),hi.copy){var sn=ci.viewportWidth,Io=ci.viewportHeight;gr.width=gr.width||sn-gr.xOffset,gr.height=gr.height||Io-gr.yOffset,gr.needsCopy=!0}else if(!di)gr.width=gr.width||1,gr.height=gr.height||1,gr.channels=gr.channels||4;else if(mt(di))gr.channels=gr.channels||4,gr.data=di,!("type"in hi)&&gr.type===Yn&&(gr.type=id(di));else if(Ah(di))gr.channels=gr.channels||4,Uf(gr,di),gr.alignment=1,gr.needsFree=!0;else if(Mt(di)){var _s=di.data;!Array.isArray(_s)&&gr.type===Yn&&(gr.type=id(_s));var an=di.shape,cr=di.stride,xr,kr,fi,Ti,ve,be;an.length===3?(fi=an[2],be=cr[2]):(fi=1,be=1),xr=an[0],kr=an[1],Ti=cr[0],ve=cr[1],gr.alignment=1,gr.width=xr,gr.height=kr,gr.channels=fi,gr.format=gr.internalformat=ms[fi],gr.needsFree=!0,Sh(gr,_s,Ti,ve,be,di.offset)}else if(Mh(di)||Mc(di)||$c(di))Mh(di)||Mc(di)?gr.element=di:gr.element=di.canvas,gr.width=gr.element.width,gr.height=gr.element.height,gr.channels=4;else if(zu(di))gr.element=di,gr.width=di.width,gr.height=di.height,gr.channels=4;else if(mf(di))gr.element=di,gr.width=di.naturalWidth,gr.height=di.naturalHeight,gr.channels=4;else if(jf(di))gr.element=di,gr.width=di.videoWidth,gr.height=di.videoHeight,gr.channels=4;else if(vf(di)){var Ce=gr.width||di[0].length,He=gr.height||di.length,Xe=gr.channels;Zt(di[0][0])?Xe=Xe||di[0][0].length:Xe=Xe||1;for(var it=qe.shape(di),Dt=1,or=0;or<it.length;++or)Dt*=it[or];var Dr=zd(gr,Dt);qe.flatten(di,it,"",Dr),Bu(gr,Dr),gr.alignment=1,gr.width=Ce,gr.height=He,gr.channels=Xe,gr.format=gr.internalformat=ms[Xe],gr.needsFree=!0}gr.type===xo||gr.type}function Ga(gr,hi,di){var sn=gr.element,Io=gr.data,_s=gr.internalformat,an=gr.format,cr=gr.type,xr=gr.width,kr=gr.height;_a(gr),sn?bt.texImage2D(hi,di,an,an,cr,sn):gr.compressed?bt.compressedTexImage2D(hi,di,_s,xr,kr,0,Io):gr.needsCopy?(Kr(),bt.copyTexImage2D(hi,di,an,gr.xOffset,gr.yOffset,xr,kr,0)):bt.texImage2D(hi,di,an,xr,kr,0,an,cr,Io||null)}function wn(gr,hi,di,sn,Io){var _s=gr.element,an=gr.data,cr=gr.internalformat,xr=gr.format,kr=gr.type,fi=gr.width,Ti=gr.height;_a(gr),_s?bt.texSubImage2D(hi,Io,di,sn,xr,kr,_s):gr.compressed?bt.compressedTexSubImage2D(hi,Io,di,sn,cr,fi,Ti,an):gr.needsCopy?(Kr(),bt.copyTexSubImage2D(hi,Io,di,sn,gr.xOffset,gr.yOffset,fi,Ti)):bt.texSubImage2D(hi,Io,di,sn,fi,Ti,xr,kr,an)}var Hn=[];function Ca(){return Hn.pop()||new ca}function en(gr){gr.needsFree&&B.freeType(gr.data),ca.call(gr),Hn.push(gr)}function Un(){ji.call(this),this.genMipmaps=!1,this.mipmapHint=Ul,this.mipmask=0,this.images=Array(16)}function qn(gr,hi,di){var sn=gr.images[0]=Ca();gr.mipmask=1,sn.width=gr.width=hi,sn.height=gr.height=di,sn.channels=gr.channels=4}function yo(gr,hi){var di=null;if(Sc(hi))di=gr.images[0]=Ca(),Ii(di,gr),va(di,hi),gr.mipmask=1;else if(Va(gr,hi),Array.isArray(hi.mipmap))for(var sn=hi.mipmap,Io=0;Io<sn.length;++Io)di=gr.images[Io]=Ca(),Ii(di,gr),di.width>>=Io,di.height>>=Io,va(di,sn[Io]),gr.mipmask|=1<<Io;else di=gr.images[0]=Ca(),Ii(di,gr),va(di,hi),gr.mipmask=1;Ii(gr,gr.images[0]),gr.compressed&&(gr.internalformat===ua||gr.internalformat===Ea||gr.internalformat===ln||gr.internalformat)}function Gs(gr,hi){for(var di=gr.images,sn=0;sn<di.length;++sn){if(!di[sn])return;Ga(di[sn],hi,sn)}}var Wl=[];function Co(){var gr=Wl.pop()||new Un;ji.call(gr),gr.mipmask=0;for(var hi=0;hi<16;++hi)gr.images[hi]=null;return gr}function Rc(gr){for(var hi=gr.images,di=0;di<hi.length;++di)hi[di]&&en(hi[di]),hi[di]=null;Wl.push(gr)}function ys(){this.minFilter=vs,this.magFilter=vs,this.wrapS=ts,this.wrapT=ts,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=Ul}function Hu(gr,hi){if("min"in hi){var di=hi.min;gr.minFilter=ra[di],_l.indexOf(gr.minFilter)>=0&&!("faces"in hi)&&(gr.genMipmaps=!0)}if("mag"in hi){var sn=hi.mag;gr.magFilter=Qi[sn]}var Io=gr.wrapS,_s=gr.wrapT;if("wrap"in hi){var an=hi.wrap;typeof an=="string"?Io=_s=Ji[an]:Array.isArray(an)&&(Io=Ji[an[0]],_s=Ji[an[1]])}else{if("wrapS"in hi){var cr=hi.wrapS;Io=Ji[cr]}if("wrapT"in hi){var xr=hi.wrapT;_s=Ji[xr]}}if(gr.wrapS=Io,gr.wrapT=_s,"anisotropic"in hi){var kr=hi.anisotropic;gr.anisotropic=hi.anisotropic}if("mipmap"in hi){var fi=!1;switch(typeof hi.mipmap){case"string":gr.mipmapHint=Ni[hi.mipmap],gr.genMipmaps=!0,fi=!0;break;case"boolean":fi=gr.genMipmaps=hi.mipmap;break;case"object":gr.genMipmaps=!1,fi=!0;break;default:}fi&&!("min"in hi)&&(gr.minFilter=Xn)}}function lc(gr,hi){bt.texParameteri(hi,nl,gr.minFilter),bt.texParameteri(hi,So,gr.magFilter),bt.texParameteri(hi,no,gr.wrapS),bt.texParameteri(hi,Mo,gr.wrapT),dr.ext_texture_filter_anisotropic&&bt.texParameteri(hi,Fu,gr.anisotropic),gr.genMipmaps&&(bt.hint(mu,gr.mipmapHint),bt.generateMipmap(hi))}var zc=0,Pl={},Il=_r.maxTextureUnits,Yl=Array(Il).map(function(){return null});function oo(gr){ji.call(this),this.mipmask=0,this.internalformat=Mi,this.id=zc++,this.refCount=1,this.target=gr,this.texture=bt.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new ys,si.profile&&(this.stats={size:0})}function lu(gr){bt.activeTexture(Iu),bt.bindTexture(gr.target,gr.texture)}function Ms(){var gr=Yl[0];gr?bt.bindTexture(gr.target,gr.texture):bt.bindTexture(vr,null)}function uc(gr){var hi=gr.texture,di=gr.unit,sn=gr.target;di>=0&&(bt.activeTexture(Iu+di),bt.bindTexture(sn,null),Yl[di]=null),bt.deleteTexture(hi),gr.texture=null,gr.params=null,gr.pixels=null,gr.refCount=0,delete Pl[gr.id],yi.textureCount--}t(oo.prototype,{bind:function(){var gr=this;gr.bindCount+=1;var hi=gr.unit;if(hi<0){for(var di=0;di<Il;++di){var sn=Yl[di];if(sn){if(sn.bindCount>0)continue;sn.unit=-1}Yl[di]=gr,hi=di;break}hi>=Il,si.profile&&yi.maxTextureUnits<hi+1&&(yi.maxTextureUnits=hi+1),gr.unit=hi,bt.activeTexture(Iu+hi),bt.bindTexture(gr.target,gr.texture)}return hi},unbind:function(){this.bindCount-=1},decRef:function(){--this.refCount<=0&&uc(this)}});function Bc(gr,hi){var di=new oo(vr);Pl[di.id]=di,yi.textureCount++;function sn(an,cr){var xr=di.texInfo;ys.call(xr);var kr=Co();return typeof an=="number"?typeof cr=="number"?qn(kr,an|0,cr|0):qn(kr,an|0,an|0):an?(Hu(xr,an),yo(kr,an)):qn(kr,1,1),xr.genMipmaps&&(kr.mipmask=(kr.width<<1)-1),di.mipmask=kr.mipmask,Ii(di,kr),di.internalformat=kr.internalformat,sn.width=kr.width,sn.height=kr.height,lu(di),Gs(kr,vr),lc(xr,vr),Ms(),Rc(kr),si.profile&&(di.stats.size=_u(di.internalformat,di.type,kr.width,kr.height,xr.genMipmaps,!1)),sn.format=Yi[di.internalformat],sn.type=la[di.type],sn.mag=Ui[xr.magFilter],sn.min=Da[xr.minFilter],sn.wrapS=wa[xr.wrapS],sn.wrapT=wa[xr.wrapT],sn}function Io(an,cr,xr,kr){var fi=cr|0,Ti=xr|0,ve=kr|0,be=Ca();return Ii(be,di),be.width=0,be.height=0,va(be,an),be.width=be.width||(di.width>>ve)-fi,be.height=be.height||(di.height>>ve)-Ti,lu(di),wn(be,vr,fi,Ti,ve),Ms(),en(be),sn}function _s(an,cr){var xr=an|0,kr=cr|0||xr;if(xr===di.width&&kr===di.height)return sn;sn.width=di.width=xr,sn.height=di.height=kr,lu(di);for(var fi=0;di.mipmask>>fi;++fi){var Ti=xr>>fi,ve=kr>>fi;if(!Ti||!ve)break;bt.texImage2D(vr,fi,di.format,Ti,ve,0,di.format,di.type,null)}return Ms(),si.profile&&(di.stats.size=_u(di.internalformat,di.type,xr,kr,!1,!1)),sn}return sn(gr,hi),sn.subimage=Io,sn.resize=_s,sn._reglType="texture2d",sn._texture=di,si.profile&&(sn.stats=di.stats),sn.destroy=function(){di.decRef()},sn}function Oc(gr,hi,di,sn,Io,_s){var an=new oo(Br);Pl[an.id]=an,yi.cubeCount++;var cr=new Array(6);function xr(Ti,ve,be,Ce,He,Xe){var it,Dt=an.texInfo;for(ys.call(Dt),it=0;it<6;++it)cr[it]=Co();if(typeof Ti=="number"||!Ti){var or=Ti|0||1;for(it=0;it<6;++it)qn(cr[it],or,or)}else if(typeof Ti=="object")if(ve)yo(cr[0],Ti),yo(cr[1],ve),yo(cr[2],be),yo(cr[3],Ce),yo(cr[4],He),yo(cr[5],Xe);else if(Hu(Dt,Ti),Va(an,Ti),"faces"in Ti){var Dr=Ti.faces;for(it=0;it<6;++it)Ii(cr[it],an),yo(cr[it],Dr[it])}else for(it=0;it<6;++it)yo(cr[it],Ti);for(Ii(an,cr[0]),Dt.genMipmaps?an.mipmask=(cr[0].width<<1)-1:an.mipmask=cr[0].mipmask,an.internalformat=cr[0].internalformat,xr.width=cr[0].width,xr.height=cr[0].height,lu(an),it=0;it<6;++it)Gs(cr[it],Pr+it);for(lc(Dt,Br),Ms(),si.profile&&(an.stats.size=_u(an.internalformat,an.type,xr.width,xr.height,Dt.genMipmaps,!0)),xr.format=Yi[an.internalformat],xr.type=la[an.type],xr.mag=Ui[Dt.magFilter],xr.min=Da[Dt.minFilter],xr.wrapS=wa[Dt.wrapS],xr.wrapT=wa[Dt.wrapT],it=0;it<6;++it)Rc(cr[it]);return xr}function kr(Ti,ve,be,Ce,He){var Xe=be|0,it=Ce|0,Dt=He|0,or=Ca();return Ii(or,an),or.width=0,or.height=0,va(or,ve),or.width=or.width||(an.width>>Dt)-Xe,or.height=or.height||(an.height>>Dt)-it,lu(an),wn(or,Pr+Ti,Xe,it,Dt),Ms(),en(or),xr}function fi(Ti){var ve=Ti|0;if(ve!==an.width){xr.width=an.width=ve,xr.height=an.height=ve,lu(an);for(var be=0;be<6;++be)for(var Ce=0;an.mipmask>>Ce;++Ce)bt.texImage2D(Pr+be,Ce,an.format,ve>>Ce,ve>>Ce,0,an.format,an.type,null);return Ms(),si.profile&&(an.stats.size=_u(an.internalformat,an.type,xr.width,xr.height,!1,!0)),xr}}return xr(gr,hi,di,sn,Io,_s),xr.subimage=kr,xr.resize=fi,xr._reglType="textureCube",xr._texture=an,si.profile&&(xr.stats=an.stats),xr.destroy=function(){an.decRef()},xr}function Zn(){for(var gr=0;gr<Il;++gr)bt.activeTexture(Iu+gr),bt.bindTexture(vr,null),Yl[gr]=null;lt(Pl).forEach(uc),yi.cubeCount=0,yi.textureCount=0}si.profile&&(yi.getTotalTextureSize=function(){var gr=0;return Object.keys(Pl).forEach(function(hi){gr+=Pl[hi].stats.size}),gr});function Bo(){for(var gr=0;gr<Il;++gr){var hi=Yl[gr];hi&&(hi.bindCount=0,hi.unit=-1,Yl[gr]=null)}lt(Pl).forEach(function(di){di.texture=bt.createTexture(),bt.bindTexture(di.target,di.texture);for(var sn=0;sn<32;++sn)if((di.mipmask&1<<sn)!==0)if(di.target===vr)bt.texImage2D(vr,sn,di.internalformat,di.width>>sn,di.height>>sn,0,di.internalformat,di.type,null);else for(var Io=0;Io<6;++Io)bt.texImage2D(Pr+Io,sn,di.internalformat,di.width>>sn,di.height>>sn,0,di.internalformat,di.type,null);lc(di.texInfo,di.target)})}function Bs(){for(var gr=0;gr<Il;++gr){var hi=Yl[gr];hi&&(hi.bindCount=0,hi.unit=-1,Yl[gr]=null),bt.activeTexture(Iu+gr),bt.bindTexture(vr,null),bt.bindTexture(Br,null)}}return{create2D:Bc,createCube:Oc,clear:Zn,getTexture:function(gr){return null},restore:Bo,refresh:Bs}}var Dl=36161,gf=32854,Ou=32855,yf=36194,_f=33189,Vf=36168,Eh=34041,Ec=35907,kh=34836,rc=34842,Bd=34843,xl=[];xl[gf]=2,xl[Ou]=2,xl[yf]=2,xl[_f]=2,xl[Vf]=1,xl[Eh]=4,xl[Ec]=4,xl[kh]=16,xl[rc]=8,xl[Bd]=6;function xu(bt,dr,_r){return xl[bt]*dr*_r}var kc=function(bt,dr,_r,Kr,ci){var yi={rgba4:gf,rgb565:yf,"rgb5 a1":Ou,depth:_f,stencil:Vf,"depth stencil":Eh};dr.ext_srgb&&(yi.srgba=Ec),dr.ext_color_buffer_half_float&&(yi.rgba16f=rc,yi.rgb16f=Bd),dr.webgl_color_buffer_float&&(yi.rgba32f=kh);var si=[];Object.keys(yi).forEach(function(xa){var Pi=yi[xa];si[Pi]=xa});var Ni=0,Ji={};function Qi(xa){this.id=Ni++,this.refCount=1,this.renderbuffer=xa,this.format=gf,this.width=0,this.height=0,ci.profile&&(this.stats={size:0})}Qi.prototype.decRef=function(){--this.refCount<=0&&ra(this)};function ra(xa){var Pi=xa.renderbuffer;bt.bindRenderbuffer(Dl,null),bt.deleteRenderbuffer(Pi),xa.renderbuffer=null,xa.refCount=0,delete Ji[xa.id],Kr.renderbufferCount--}function mn(xa,Pi){var Hr=new Qi(bt.createRenderbuffer());Ji[Hr.id]=Hr,Kr.renderbufferCount++;function Ei(la,Ui){var Da=0,wa=0,bn=gf;if(typeof la=="object"&&la){var ji=la;if("shape"in ji){var Ii=ji.shape;Da=Ii[0]|0,wa=Ii[1]|0}else"radius"in ji&&(Da=wa=ji.radius|0),"width"in ji&&(Da=ji.width|0),"height"in ji&&(wa=ji.height|0);"format"in ji&&(bn=yi[ji.format])}else typeof la=="number"?(Da=la|0,typeof Ui=="number"?wa=Ui|0:wa=Da):la||(Da=wa=1);if(!(Da===Hr.width&&wa===Hr.height&&bn===Hr.format))return Ei.width=Hr.width=Da,Ei.height=Hr.height=wa,Hr.format=bn,bt.bindRenderbuffer(Dl,Hr.renderbuffer),bt.renderbufferStorage(Dl,bn,Da,wa),ci.profile&&(Hr.stats.size=xu(Hr.format,Hr.width,Hr.height)),Ei.format=si[Hr.format],Ei}function Yi(la,Ui){var Da=la|0,wa=Ui|0||Da;return Da===Hr.width&&wa===Hr.height||(Ei.width=Hr.width=Da,Ei.height=Hr.height=wa,bt.bindRenderbuffer(Dl,Hr.renderbuffer),bt.renderbufferStorage(Dl,Hr.format,Da,wa),ci.profile&&(Hr.stats.size=xu(Hr.format,Hr.width,Hr.height))),Ei}return Ei(xa,Pi),Ei.resize=Yi,Ei._reglType="renderbuffer",Ei._renderbuffer=Hr,ci.profile&&(Ei.stats=Hr.stats),Ei.destroy=function(){Hr.decRef()},Ei}ci.profile&&(Kr.getTotalRenderbufferSize=function(){var xa=0;return Object.keys(Ji).forEach(function(Pi){xa+=Ji[Pi].stats.size}),xa});function Wa(){lt(Ji).forEach(function(xa){xa.renderbuffer=bt.createRenderbuffer(),bt.bindRenderbuffer(Dl,xa.renderbuffer),bt.renderbufferStorage(Dl,xa.format,xa.width,xa.height)}),bt.bindRenderbuffer(Dl,null)}return{create:mn,clear:function(){lt(Ji).forEach(ra)},restore:Wa}},hl=36160,Gf=36161,Nu=3553,Cc=34069,Hf=36064,Od=36096,ad=36128,ju=33306,ql=36053,Vl=36193,Nd=5121,xf=5126,nd=6407,nu=6408,Wc=[];Wc[nu]=4,Wc[nd]=3;var $f=[];$f[Nd]=1,$f[xf]=4,$f[Vl]=2;function bf(bt,dr,_r,Kr,ci,yi){var si={cur:null,next:null,dirty:!1,setFBO:null},Ni=["rgba"],Ji=["rgba4","rgb565","rgb5 a1"];dr.ext_srgb&&Ji.push("srgba"),dr.ext_color_buffer_half_float&&Ji.push("rgba16f","rgb16f"),dr.webgl_color_buffer_float&&Ji.push("rgba32f");var Qi=["uint8"];dr.oes_texture_half_float&&Qi.push("half float","float16"),dr.oes_texture_float&&Qi.push("float","float32");function ra(ca,va,Ga){this.target=ca,this.texture=va,this.renderbuffer=Ga;var wn=0,Hn=0;va?(wn=va.width,Hn=va.height):Ga&&(wn=Ga.width,Hn=Ga.height),this.width=wn,this.height=Hn}function mn(ca){ca&&(ca.texture&&ca.texture._texture.decRef(),ca.renderbuffer&&ca.renderbuffer._renderbuffer.decRef())}function Wa(ca,va,Ga){if(ca)if(ca.texture){var wn=ca.texture._texture,Hn=Math.max(1,wn.width),Ca=Math.max(1,wn.height);wn.refCount+=1}else{var en=ca.renderbuffer._renderbuffer;en.refCount+=1}}function xa(ca,va){va&&(va.texture?bt.framebufferTexture2D(hl,ca,va.target,va.texture._texture.texture,0):bt.framebufferRenderbuffer(hl,ca,Gf,va.renderbuffer._renderbuffer.renderbuffer))}function Pi(ca){var va=Nu,Ga=null,wn=null,Hn=ca;typeof ca=="object"&&(Hn=ca.data,"target"in ca&&(va=ca.target|0));var Ca=Hn._reglType;return Ca==="texture2d"||Ca==="textureCube"?Ga=Hn:Ca==="renderbuffer"&&(wn=Hn,va=Gf),new ra(va,Ga,wn)}function Hr(ca,va,Ga,wn,Hn){if(Ga){var Ca=Kr.create2D({width:ca,height:va,format:wn,type:Hn});return Ca._texture.refCount=0,new ra(Nu,Ca,null)}else{var en=ci.create({width:ca,height:va,format:wn});return en._renderbuffer.refCount=0,new ra(Gf,null,en)}}function Ei(ca){return ca&&(ca.texture||ca.renderbuffer)}function Yi(ca,va,Ga){ca&&(ca.texture?ca.texture.resize(va,Ga):ca.renderbuffer&&ca.renderbuffer.resize(va,Ga),ca.width=va,ca.height=Ga)}var la=0,Ui={};function Da(){this.id=la++,Ui[this.id]=this,this.framebuffer=bt.createFramebuffer(),this.width=0,this.height=0,this.colorAttachments=[],this.depthAttachment=null,this.stencilAttachment=null,this.depthStencilAttachment=null}function wa(ca){ca.colorAttachments.forEach(mn),mn(ca.depthAttachment),mn(ca.stencilAttachment),mn(ca.depthStencilAttachment)}function bn(ca){var va=ca.framebuffer;bt.deleteFramebuffer(va),ca.framebuffer=null,yi.framebufferCount--,delete Ui[ca.id]}function ji(ca){var va;bt.bindFramebuffer(hl,ca.framebuffer);var Ga=ca.colorAttachments;for(va=0;va<Ga.length;++va)xa(Hf+va,Ga[va]);for(va=Ga.length;va<_r.maxColorAttachments;++va)bt.framebufferTexture2D(hl,Hf+va,Nu,null,0);bt.framebufferTexture2D(hl,ju,Nu,null,0),bt.framebufferTexture2D(hl,Od,Nu,null,0),bt.framebufferTexture2D(hl,ad,Nu,null,0),xa(Od,ca.depthAttachment),xa(ad,ca.stencilAttachment),xa(ju,ca.depthStencilAttachment);var wn=bt.checkFramebufferStatus(hl);bt.isContextLost(),bt.bindFramebuffer(hl,si.next?si.next.framebuffer:null),si.cur=si.next,bt.getError()}function Ii(ca,va){var Ga=new Da;yi.framebufferCount++;function wn(Ca,en){var Un,qn=0,yo=0,Gs=!0,Wl=!0,Co=null,Rc=!0,ys="rgba",Hu="uint8",lc=1,zc=null,Pl=null,Il=null,Yl=!1;if(typeof Ca=="number")qn=Ca|0,yo=en|0||qn;else if(!Ca)qn=yo=1;else{var oo=Ca;if("shape"in oo){var lu=oo.shape;qn=lu[0],yo=lu[1]}else"radius"in oo&&(qn=yo=oo.radius),"width"in oo&&(qn=oo.width),"height"in oo&&(yo=oo.height);("color"in oo||"colors"in oo)&&(Co=oo.color||oo.colors,Array.isArray(Co)),Co||("colorCount"in oo&&(lc=oo.colorCount|0),"colorTexture"in oo&&(Rc=!!oo.colorTexture,ys="rgba4"),"colorType"in oo&&(Hu=oo.colorType,Rc||(Hu==="half float"||Hu==="float16"?ys="rgba16f":(Hu==="float"||Hu==="float32")&&(ys="rgba32f"))),"colorFormat"in oo&&(ys=oo.colorFormat,Ni.indexOf(ys)>=0?Rc=!0:Ji.indexOf(ys)>=0&&(Rc=!1))),("depthTexture"in oo||"depthStencilTexture"in oo)&&(Yl=!!(oo.depthTexture||oo.depthStencilTexture)),"depth"in oo&&(typeof oo.depth=="boolean"?Gs=oo.depth:(zc=oo.depth,Wl=!1)),"stencil"in oo&&(typeof oo.stencil=="boolean"?Wl=oo.stencil:(Pl=oo.stencil,Gs=!1)),"depthStencil"in oo&&(typeof oo.depthStencil=="boolean"?Gs=Wl=oo.depthStencil:(Il=oo.depthStencil,Gs=!1,Wl=!1))}var Ms=null,uc=null,Bc=null,Oc=null;if(Array.isArray(Co))Ms=Co.map(Pi);else if(Co)Ms=[Pi(Co)];else for(Ms=new Array(lc),Un=0;Un<lc;++Un)Ms[Un]=Hr(qn,yo,Rc,ys,Hu);qn=qn||Ms[0].width,yo=yo||Ms[0].height,zc?uc=Pi(zc):Gs&&!Wl&&(uc=Hr(qn,yo,Yl,"depth","uint32")),Pl?Bc=Pi(Pl):Wl&&!Gs&&(Bc=Hr(qn,yo,!1,"stencil","uint8")),Il?Oc=Pi(Il):!zc&&!Pl&&Wl&&Gs&&(Oc=Hr(qn,yo,Yl,"depth stencil","depth stencil"));var Zn=null;for(Un=0;Un<Ms.length;++Un)if(Wa(Ms[Un],qn,yo),Ms[Un]&&Ms[Un].texture){var Bo=Wc[Ms[Un].texture._texture.format]*$f[Ms[Un].texture._texture.type];Zn===null&&(Zn=Bo)}return Wa(uc,qn,yo),Wa(Bc,qn,yo),Wa(Oc,qn,yo),wa(Ga),Ga.width=qn,Ga.height=yo,Ga.colorAttachments=Ms,Ga.depthAttachment=uc,Ga.stencilAttachment=Bc,Ga.depthStencilAttachment=Oc,wn.color=Ms.map(Ei),wn.depth=Ei(uc),wn.stencil=Ei(Bc),wn.depthStencil=Ei(Oc),wn.width=Ga.width,wn.height=Ga.height,ji(Ga),wn}function Hn(Ca,en){var Un=Math.max(Ca|0,1),qn=Math.max(en|0||Un,1);if(Un===Ga.width&&qn===Ga.height)return wn;for(var yo=Ga.colorAttachments,Gs=0;Gs<yo.length;++Gs)Yi(yo[Gs],Un,qn);return Yi(Ga.depthAttachment,Un,qn),Yi(Ga.stencilAttachment,Un,qn),Yi(Ga.depthStencilAttachment,Un,qn),Ga.width=wn.width=Un,Ga.height=wn.height=qn,ji(Ga),wn}return wn(ca,va),t(wn,{resize:Hn,_reglType:"framebuffer",_framebuffer:Ga,destroy:function(){bn(Ga),wa(Ga)},use:function(Ca){si.setFBO({framebuffer:wn},Ca)}})}function Va(ca){var va=Array(6);function Ga(Hn){var Ca,en={color:null},Un=0,qn=null,yo="rgba",Gs="uint8",Wl=1;if(typeof Hn=="number")Un=Hn|0;else if(!Hn)Un=1;else{var Co=Hn;if("shape"in Co){var Rc=Co.shape;Un=Rc[0]}else"radius"in Co&&(Un=Co.radius|0),"width"in Co?(Un=Co.width|0,"height"in Co):"height"in Co&&(Un=Co.height|0);("color"in Co||"colors"in Co)&&(qn=Co.color||Co.colors,Array.isArray(qn)),qn||("colorCount"in Co&&(Wl=Co.colorCount|0),"colorType"in Co&&(Gs=Co.colorType),"colorFormat"in Co&&(yo=Co.colorFormat)),"depth"in Co&&(en.depth=Co.depth),"stencil"in Co&&(en.stencil=Co.stencil),"depthStencil"in Co&&(en.depthStencil=Co.depthStencil)}var ys;if(qn)if(Array.isArray(qn))for(ys=[],Ca=0;Ca<qn.length;++Ca)ys[Ca]=qn[Ca];else ys=[qn];else{ys=Array(Wl);var Hu={radius:Un,format:yo,type:Gs};for(Ca=0;Ca<Wl;++Ca)ys[Ca]=Kr.createCube(Hu)}for(en.color=Array(ys.length),Ca=0;Ca<ys.length;++Ca){var lc=ys[Ca];Un=Un||lc.width,en.color[Ca]={target:Cc,data:ys[Ca]}}for(Ca=0;Ca<6;++Ca){for(var zc=0;zc<ys.length;++zc)en.color[zc].target=Cc+Ca;Ca>0&&(en.depth=va[0].depth,en.stencil=va[0].stencil,en.depthStencil=va[0].depthStencil),va[Ca]?va[Ca](en):va[Ca]=Ii(en)}return t(Ga,{width:Un,height:Un,color:ys})}function wn(Hn){var Ca,en=Hn|0;if(en===Ga.width)return Ga;var Un=Ga.color;for(Ca=0;Ca<Un.length;++Ca)Un[Ca].resize(en);for(Ca=0;Ca<6;++Ca)va[Ca].resize(en);return Ga.width=Ga.height=en,Ga}return Ga(ca),t(Ga,{faces:va,resize:wn,_reglType:"framebufferCube",destroy:function(){va.forEach(function(Hn){Hn.destroy()})}})}function _a(){si.cur=null,si.next=null,si.dirty=!0,lt(Ui).forEach(function(ca){ca.framebuffer=bt.createFramebuffer(),ji(ca)})}return t(si,{getFramebuffer:function(ca){if(typeof ca=="function"&&ca._reglType==="framebuffer"){var va=ca._framebuffer;if(va instanceof Da)return va}return null},create:Ii,createCube:Va,clear:function(){lt(Ui).forEach(bn)},restore:_a})}var jd=5126,Yc=34962,Dc=34963;function Lc(){this.state=0,this.x=0,this.y=0,this.z=0,this.w=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=jd,this.offset=0,this.stride=0,this.divisor=0}function wf(bt,dr,_r,Kr,ci,yi,si){for(var Ni=_r.maxAttributes,Ji=new Array(Ni),Qi=0;Qi<Ni;++Qi)Ji[Qi]=new Lc;var ra=0,mn={},Wa={Record:Lc,scope:{},state:Ji,currentVAO:null,targetVAO:null,restore:Pi()?wa:function(){},createVAO:bn,getVAO:Ei,destroyBuffer:xa,setVAO:Pi()?Yi:la,clear:Pi()?Ui:function(){}};function xa(ji){for(var Ii=0;Ii<Ji.length;++Ii){var Va=Ji[Ii];Va.buffer===ji&&(bt.disableVertexAttribArray(Ii),Va.buffer=null)}}function Pi(){return dr.oes_vertex_array_object}function Hr(){return dr.angle_instanced_arrays}function Ei(ji){return typeof ji=="function"&&ji._vao?ji._vao:null}function Yi(ji){if(ji!==Wa.currentVAO){var Ii=Pi();ji?Ii.bindVertexArrayOES(ji.vao):Ii.bindVertexArrayOES(null),Wa.currentVAO=ji}}function la(ji){if(ji!==Wa.currentVAO){if(ji)ji.bindAttrs();else{for(var Ii=Hr(),Va=0;Va<Ji.length;++Va){var _a=Ji[Va];_a.buffer?(bt.enableVertexAttribArray(Va),_a.buffer.bind(),bt.vertexAttribPointer(Va,_a.size,_a.type,_a.normalized,_a.stride,_a.offfset),Ii&&_a.divisor&&Ii.vertexAttribDivisorANGLE(Va,_a.divisor)):(bt.disableVertexAttribArray(Va),bt.vertexAttrib4f(Va,_a.x,_a.y,_a.z,_a.w))}si.elements?bt.bindBuffer(Dc,si.elements.buffer.buffer):bt.bindBuffer(Dc,null)}Wa.currentVAO=ji}}function Ui(){lt(mn).forEach(function(ji){ji.destroy()})}function Da(){this.id=++ra,this.attributes=[],this.elements=null,this.ownsElements=!1,this.count=0,this.offset=0,this.instances=-1,this.primitive=4;var ji=Pi();ji?this.vao=ji.createVertexArrayOES():this.vao=null,mn[this.id]=this,this.buffers=[]}Da.prototype.bindAttrs=function(){for(var ji=Hr(),Ii=this.attributes,Va=0;Va<Ii.length;++Va){var _a=Ii[Va];_a.buffer?(bt.enableVertexAttribArray(Va),bt.bindBuffer(Yc,_a.buffer.buffer),bt.vertexAttribPointer(Va,_a.size,_a.type,_a.normalized,_a.stride,_a.offset),ji&&_a.divisor&&ji.vertexAttribDivisorANGLE(Va,_a.divisor)):(bt.disableVertexAttribArray(Va),bt.vertexAttrib4f(Va,_a.x,_a.y,_a.z,_a.w))}for(var ca=Ii.length;ca<Ni;++ca)bt.disableVertexAttribArray(ca);var va=yi.getElements(this.elements);va?bt.bindBuffer(Dc,va.buffer.buffer):bt.bindBuffer(Dc,null)},Da.prototype.refresh=function(){var ji=Pi();ji&&(ji.bindVertexArrayOES(this.vao),this.bindAttrs(),Wa.currentVAO=null,ji.bindVertexArrayOES(null))},Da.prototype.destroy=function(){if(this.vao){var ji=Pi();this===Wa.currentVAO&&(Wa.currentVAO=null,ji.bindVertexArrayOES(null)),ji.deleteVertexArrayOES(this.vao),this.vao=null}this.ownsElements&&(this.elements.destroy(),this.elements=null,this.ownsElements=!1),mn[this.id]&&(delete mn[this.id],Kr.vaoCount-=1)};function wa(){var ji=Pi();ji&<(mn).forEach(function(Ii){Ii.refresh()})}function bn(ji){var Ii=new Da;Kr.vaoCount+=1;function Va(_a){var ca;if(Array.isArray(_a))ca=_a,Ii.elements&&Ii.ownsElements&&Ii.elements.destroy(),Ii.elements=null,Ii.ownsElements=!1,Ii.offset=0,Ii.count=0,Ii.instances=-1,Ii.primitive=4;else{if(_a.elements){var va=_a.elements;Ii.ownsElements?typeof va=="function"&&va._reglType==="elements"?(Ii.elements.destroy(),Ii.ownsElements=!1):(Ii.elements(va),Ii.ownsElements=!1):yi.getElements(_a.elements)?(Ii.elements=_a.elements,Ii.ownsElements=!1):(Ii.elements=yi.create(_a.elements),Ii.ownsElements=!0)}else Ii.elements=null,Ii.ownsElements=!1;ca=_a.attributes,Ii.offset=0,Ii.count=-1,Ii.instances=-1,Ii.primitive=4,Ii.elements&&(Ii.count=Ii.elements._elements.vertCount,Ii.primitive=Ii.elements._elements.primType),"offset"in _a&&(Ii.offset=_a.offset|0),"count"in _a&&(Ii.count=_a.count|0),"instances"in _a&&(Ii.instances=_a.instances|0),"primitive"in _a&&(Ii.primitive=bi[_a.primitive])}var Ga={},wn=Ii.attributes;wn.length=ca.length;for(var Hn=0;Hn<ca.length;++Hn){var Ca=ca[Hn],en=wn[Hn]=new Lc,Un=Ca.data||Ca;if(Array.isArray(Un)||mt(Un)||Mt(Un)){var qn;Ii.buffers[Hn]&&(qn=Ii.buffers[Hn],mt(Un)&&qn._buffer.byteLength>=Un.byteLength?qn.subdata(Un):(qn.destroy(),Ii.buffers[Hn]=null)),Ii.buffers[Hn]||(qn=Ii.buffers[Hn]=ci.create(Ca,Yc,!1,!0)),en.buffer=ci.getBuffer(qn),en.size=en.buffer.dimension|0,en.normalized=!1,en.type=en.buffer.dtype,en.offset=0,en.stride=0,en.divisor=0,en.state=1,Ga[Hn]=1}else ci.getBuffer(Ca)?(en.buffer=ci.getBuffer(Ca),en.size=en.buffer.dimension|0,en.normalized=!1,en.type=en.buffer.dtype,en.offset=0,en.stride=0,en.divisor=0,en.state=1):ci.getBuffer(Ca.buffer)?(en.buffer=ci.getBuffer(Ca.buffer),en.size=(+Ca.size||en.buffer.dimension)|0,en.normalized=!!Ca.normalized||!1,"type"in Ca?en.type=fr[Ca.type]:en.type=en.buffer.dtype,en.offset=(Ca.offset||0)|0,en.stride=(Ca.stride||0)|0,en.divisor=(Ca.divisor||0)|0,en.state=1):"x"in Ca&&(en.x=+Ca.x||0,en.y=+Ca.y||0,en.z=+Ca.z||0,en.w=+Ca.w||0,en.state=2)}for(var yo=0;yo<Ii.buffers.length;++yo)!Ga[yo]&&Ii.buffers[yo]&&(Ii.buffers[yo].destroy(),Ii.buffers[yo]=null);return Ii.refresh(),Va}return Va.destroy=function(){for(var _a=0;_a<Ii.buffers.length;++_a)Ii.buffers[_a]&&Ii.buffers[_a].destroy();Ii.buffers.length=0,Ii.ownsElements&&(Ii.elements.destroy(),Ii.elements=null,Ii.ownsElements=!1),Ii.destroy()},Va._vao=Ii,Va._reglType="vao",Va(ji)}return Wa}var od=35632,Wf=35633,Xc=35718,Yf=35721;function Zc(bt,dr,_r,Kr){var ci={},yi={};function si(Hr,Ei,Yi,la){this.name=Hr,this.id=Ei,this.location=Yi,this.info=la}function Ni(Hr,Ei){for(var Yi=0;Yi<Hr.length;++Yi)if(Hr[Yi].id===Ei.id){Hr[Yi].location=Ei.location;return}Hr.push(Ei)}function Ji(Hr,Ei,Yi){var la=Hr===od?ci:yi,Ui=la[Ei];if(!Ui){var Da=dr.str(Ei);Ui=bt.createShader(Hr),bt.shaderSource(Ui,Da),bt.compileShader(Ui),la[Ei]=Ui}return Ui}var Qi={},ra=[],mn=0;function Wa(Hr,Ei){this.id=mn++,this.fragId=Hr,this.vertId=Ei,this.program=null,this.uniforms=[],this.attributes=[],this.refCount=1,Kr.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function xa(Hr,Ei,Yi){var la,Ui,Da=Ji(od,Hr.fragId),wa=Ji(Wf,Hr.vertId),bn=Hr.program=bt.createProgram();if(bt.attachShader(bn,Da),bt.attachShader(bn,wa),Yi)for(la=0;la<Yi.length;++la){var ji=Yi[la];bt.bindAttribLocation(bn,ji[0],ji[1])}bt.linkProgram(bn);var Ii=bt.getProgramParameter(bn,Xc);Kr.profile&&(Hr.stats.uniformsCount=Ii);var Va=Hr.uniforms;for(la=0;la<Ii;++la)if(Ui=bt.getActiveUniform(bn,la),Ui)if(Ui.size>1)for(var _a=0;_a<Ui.size;++_a){var ca=Ui.name.replace("[0]","["+_a+"]");Ni(Va,new si(ca,dr.id(ca),bt.getUniformLocation(bn,ca),Ui))}else Ni(Va,new si(Ui.name,dr.id(Ui.name),bt.getUniformLocation(bn,Ui.name),Ui));var va=bt.getProgramParameter(bn,Yf);Kr.profile&&(Hr.stats.attributesCount=va);var Ga=Hr.attributes;for(la=0;la<va;++la)Ui=bt.getActiveAttrib(bn,la),Ui&&Ni(Ga,new si(Ui.name,dr.id(Ui.name),bt.getAttribLocation(bn,Ui.name),Ui))}Kr.profile&&(_r.getMaxUniformsCount=function(){var Hr=0;return ra.forEach(function(Ei){Ei.stats.uniformsCount>Hr&&(Hr=Ei.stats.uniformsCount)}),Hr},_r.getMaxAttributesCount=function(){var Hr=0;return ra.forEach(function(Ei){Ei.stats.attributesCount>Hr&&(Hr=Ei.stats.attributesCount)}),Hr});function Pi(){ci={},yi={};for(var Hr=0;Hr<ra.length;++Hr)xa(ra[Hr],null,ra[Hr].attributes.map(function(Ei){return[Ei.location,Ei.name]}))}return{clear:function(){var Hr=bt.deleteShader.bind(bt);lt(ci).forEach(Hr),ci={},lt(yi).forEach(Hr),yi={},ra.forEach(function(Ei){bt.deleteProgram(Ei.program)}),ra.length=0,Qi={},_r.shaderCount=0},program:function(Hr,Ei,Yi,la){var Ui=Qi[Ei];Ui||(Ui=Qi[Ei]={});var Da=Ui[Hr];if(Da&&(Da.refCount++,!la))return Da;var wa=new Wa(Ei,Hr);return _r.shaderCount++,xa(wa,Yi,la),Da||(Ui[Hr]=wa),ra.push(wa),t(wa,{destroy:function(){if(wa.refCount--,wa.refCount<=0){bt.deleteProgram(wa.program);var bn=ra.indexOf(wa);ra.splice(bn,1),_r.shaderCount--}Ui[wa.vertId].refCount<=0&&(bt.deleteShader(yi[wa.vertId]),delete yi[wa.vertId],delete Qi[wa.fragId][wa.vertId]),Object.keys(Qi[wa.fragId]).length||(bt.deleteShader(ci[wa.fragId]),delete ci[wa.fragId],delete Qi[wa.fragId])}})},restore:Pi,shader:Ji,frag:-1,vert:-1}}var ic=6408,Tf=5121,Xf=3333,sd=5126;function Ch(bt,dr,_r,Kr,ci,yi,si){function Ni(ra){var mn;dr.next===null?mn=Tf:mn=dr.next.colorAttachments[0].texture._texture.type;var Wa=0,xa=0,Pi=Kr.framebufferWidth,Hr=Kr.framebufferHeight,Ei=null;mt(ra)?Ei=ra:ra&&(Wa=ra.x|0,xa=ra.y|0,Pi=(ra.width||Kr.framebufferWidth-Wa)|0,Hr=(ra.height||Kr.framebufferHeight-xa)|0,Ei=ra.data||null),_r();var Yi=Pi*Hr*4;return Ei||(mn===Tf?Ei=new Uint8Array(Yi):mn===sd&&(Ei=Ei||new Float32Array(Yi))),bt.pixelStorei(Xf,4),bt.readPixels(Wa,xa,Pi,Hr,ic,mn,Ei),Ei}function Ji(ra){var mn;return dr.setFBO({framebuffer:ra.framebuffer},function(){mn=Ni(ra)}),mn}function Qi(ra){return!ra||!("framebuffer"in ra)?Ni(ra):Ji(ra)}return Qi}var Ud=0,Zf="";function ld(bt){return ou(Dh(Jf(bt)))}function Dh(bt){return nt($r(Af(bt),bt.length*8))}function Js(bt,dr){var _r=Af(bt);_r.length>16&&(_r=$r(_r,bt.length*8));for(var Kr=Array(16),ci=Array(16),yi=0;yi<16;yi++)Kr[yi]=_r[yi]^909522486,ci[yi]=_r[yi]^1549556828;var si=$r(Kr.concat(Af(dr)),512+dr.length*8);return nt($r(ci.concat(si),768))}function ou(bt){for(var dr=Ud?"0123456789ABCDEF":"0123456789abcdef",_r="",Kr,ci=0;ci<bt.length;ci++)Kr=bt.charCodeAt(ci),_r+=dr.charAt(Kr>>>4&15)+dr.charAt(Kr&15);return _r}function Kf(bt){for(var dr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",_r="",Kr=bt.length,ci=0;ci<Kr;ci+=3)for(var yi=bt.charCodeAt(ci)<<16|(ci+1<Kr?bt.charCodeAt(ci+1)<<8:0)|(ci+2<Kr?bt.charCodeAt(ci+2):0),si=0;si<4;si++)ci*8+si*6>bt.length*8?_r+=Zf:_r+=dr.charAt(yi>>>6*(3-si)&63);return _r}function Lh(bt,dr){var _r=dr.length,Kr=Array(),ci,yi,si,Ni,Ji=Array(Math.ceil(bt.length/2));for(ci=0;ci<Ji.length;ci++)Ji[ci]=bt.charCodeAt(ci*2)<<8|bt.charCodeAt(ci*2+1);for(;Ji.length>0;){for(Ni=Array(),si=0,ci=0;ci<Ji.length;ci++)si=(si<<16)+Ji[ci],yi=Math.floor(si/_r),si-=yi*_r,(Ni.length>0||yi>0)&&(Ni[Ni.length]=yi);Kr[Kr.length]=si,Ji=Ni}var Qi="";for(ci=Kr.length-1;ci>=0;ci--)Qi+=dr.charAt(Kr[ci]);var ra=Math.ceil(bt.length*8/(Math.log(dr.length)/Math.log(2)));for(ci=Qi.length;ci<ra;ci++)Qi=dr[0]+Qi;return Qi}function Jf(bt){for(var dr="",_r=-1,Kr,ci;++_r<bt.length;)Kr=bt.charCodeAt(_r),ci=_r+1<bt.length?bt.charCodeAt(_r+1):0,55296<=Kr&&Kr<=56319&&56320<=ci&&ci<=57343&&(Kr=65536+((Kr&1023)<<10)+(ci&1023),_r++),Kr<=127?dr+=String.fromCharCode(Kr):Kr<=2047?dr+=String.fromCharCode(192|Kr>>>6&31,128|Kr&63):Kr<=65535?dr+=String.fromCharCode(224|Kr>>>12&15,128|Kr>>>6&63,128|Kr&63):Kr<=2097151&&(dr+=String.fromCharCode(240|Kr>>>18&7,128|Kr>>>12&63,128|Kr>>>6&63,128|Kr&63));return dr}function Af(bt){for(var dr=Array(bt.length>>2),_r=0;_r<dr.length;_r++)dr[_r]=0;for(var _r=0;_r<bt.length*8;_r+=8)dr[_r>>5]|=(bt.charCodeAt(_r/8)&255)<<24-_r%32;return dr}function nt(bt){for(var dr="",_r=0;_r<bt.length*32;_r+=8)dr+=String.fromCharCode(bt[_r>>5]>>>24-_r%32&255);return dr}function Tt(bt,dr){return bt>>>dr|bt<<32-dr}function Kt(bt,dr){return bt>>>dr}function Bt(bt,dr,_r){return bt&dr^~bt&_r}function yr(bt,dr,_r){return bt&dr^bt&_r^dr&_r}function zr(bt){return Tt(bt,2)^Tt(bt,13)^Tt(bt,22)}function Gr(bt){return Tt(bt,6)^Tt(bt,11)^Tt(bt,25)}function ii(bt){return Tt(bt,7)^Tt(bt,18)^Kt(bt,3)}function li(bt){return Tt(bt,17)^Tt(bt,19)^Kt(bt,10)}var Fi=new Array(1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998);function $r(bt,dr){var _r=new Array(1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225),Kr=new Array(64),ci,yi,si,Ni,Ji,Qi,ra,mn,Wa,xa,Pi,Hr;for(bt[dr>>5]|=128<<24-dr%32,bt[(dr+64>>9<<4)+15]=dr,Wa=0;Wa<bt.length;Wa+=16){for(ci=_r[0],yi=_r[1],si=_r[2],Ni=_r[3],Ji=_r[4],Qi=_r[5],ra=_r[6],mn=_r[7],xa=0;xa<64;xa++)xa<16?Kr[xa]=bt[xa+Wa]:Kr[xa]=ni(ni(ni(li(Kr[xa-2]),Kr[xa-7]),ii(Kr[xa-15])),Kr[xa-16]),Pi=ni(ni(ni(ni(mn,Gr(Ji)),Bt(Ji,Qi,ra)),Fi[xa]),Kr[xa]),Hr=ni(zr(ci),yr(ci,yi,si)),mn=ra,ra=Qi,Qi=Ji,Ji=ni(Ni,Pi),Ni=si,si=yi,yi=ci,ci=ni(Pi,Hr);_r[0]=ni(ci,_r[0]),_r[1]=ni(yi,_r[1]),_r[2]=ni(si,_r[2]),_r[3]=ni(Ni,_r[3]),_r[4]=ni(Ji,_r[4]),_r[5]=ni(Qi,_r[5]),_r[6]=ni(ra,_r[6]),_r[7]=ni(mn,_r[7])}return _r}function ni(bt,dr){var _r=(bt&65535)+(dr&65535),Kr=(bt>>16)+(dr>>16)+(_r>>16);return Kr<<16|_r&65535}function ui(bt){return Array.prototype.slice.call(bt)}function Di(bt){return ui(bt).join("")}function Wi(bt){var dr=bt&&bt.cache,_r=0,Kr=[],ci=[],yi=[];function si(Pi,Hr){var Ei=Hr&&Hr.stable;if(!Ei){for(var Yi=0;Yi<ci.length;++Yi)if(ci[Yi]===Pi&&!yi[Yi])return Kr[Yi]}var la="g"+_r++;return Kr.push(la),ci.push(Pi),yi.push(Ei),la}function Ni(){var Pi=[];function Hr(){Pi.push.apply(Pi,ui(arguments))}var Ei=[];function Yi(){var la="v"+_r++;return Ei.push(la),arguments.length>0&&(Pi.push(la,"="),Pi.push.apply(Pi,ui(arguments)),Pi.push(";")),la}return t(Hr,{def:Yi,toString:function(){return Di([Ei.length>0?"var "+Ei.join(",")+";":"",Di(Pi)])}})}function Ji(){var Pi=Ni(),Hr=Ni(),Ei=Pi.toString,Yi=Hr.toString;function la(Ui,Da){Hr(Ui,Da,"=",Pi.def(Ui,Da),";")}return t(function(){Pi.apply(Pi,ui(arguments))},{def:Pi.def,entry:Pi,exit:Hr,save:la,set:function(Ui,Da,wa){la(Ui,Da),Pi(Ui,Da,"=",wa,";")},toString:function(){return Ei()+Yi()}})}function Qi(){var Pi=Di(arguments),Hr=Ji(),Ei=Ji(),Yi=Hr.toString,la=Ei.toString;return t(Hr,{then:function(){return Hr.apply(Hr,ui(arguments)),this},else:function(){return Ei.apply(Ei,ui(arguments)),this},toString:function(){var Ui=la();return Ui&&(Ui="else{"+Ui+"}"),Di(["if(",Pi,"){",Yi(),"}",Ui])}})}var ra=Ni(),mn={};function Wa(Pi,Hr){var Ei=[];function Yi(){var bn="a"+Ei.length;return Ei.push(bn),bn}Hr=Hr||0;for(var la=0;la<Hr;++la)Yi();var Ui=Ji(),Da=Ui.toString,wa=mn[Pi]=t(Ui,{arg:Yi,toString:function(){return Di(["function(",Ei.join(),"){",Da(),"}"])}});return wa}function xa(){var Pi=['"use strict";',ra,"return {"];Object.keys(mn).forEach(function(la){Pi.push('"',la,'":',mn[la].toString(),",")}),Pi.push("}");var Hr=Di(Pi).replace(/;/g,`;
+`).replace(/}/g,`}
+`).replace(/{/g,`{
+`),Ei;if(dr&&(Ei=ld(Hr),dr[Ei]))return dr[Ei].apply(null,ci);var Yi=Function.apply(null,Kr.concat(Hr));return dr&&(dr[Ei]=Yi),Yi.apply(null,ci)}return{global:ra,link:si,block:Ni,proc:Wa,scope:Ji,cond:Qi,compile:xa}}var Oa="xyzw".split(""),Pa=5121,Ja=1,rn=2,Zi=0,sa=1,vn=2,Dn=3,po=4,zo=5,wo=6,$o="dither",io="blend.enable",Us="blend.color",gs="blend.equation",Go="blend.func",ma="depth.enable",vo="depth.func",Ds="depth.range",qs="depth.mask",Ll="colorMask",bu="cull.enable",Gl="cull.face",ac="frontFace",bl="lineWidth",Uu="polygonOffset.enable",Fc="polygonOffset.offset",Kc="sample.alpha",ud="sample.enable",Qf="sample.coverage",qd="stencil.enable",Fh="stencil.mask",Hl="stencil.func",Vd="stencil.opFront",Mf="stencil.opBack",Ph="scissor.enable",Ih="scissor.box",qu="viewport",cd="profile",Jc="framebuffer",eh="vert",Qc="frag",wu="elements",ef="primitive",Sf="count",fd="offset",$l="instances",Se="vao",Pe="Width",Ge="Height",$e=Jc+Pe,st=Jc+Ge,ot=qu+Pe,pt=qu+Ge,Vt="drawingBuffer",tr=Vt+Pe,Ut=Vt+Ge,rr=[Go,gs,Hl,Vd,Mf,Qf,qu,Ih,Fc],pr=34962,Sr=34963,Rr=2884,Zr=3042,wi=3024,qi=2960,Aa=2929,un=3089,gn=32823,Tn=32926,Pn=32928,Eo=5126,qo=35664,Wn=35665,ls=35666,ol=5124,wl=35667,Vu=35668,Pc=35669,dl=35670,pl=35671,Tu=35672,nc=35673,oc=35674,sc=35675,Ic=35676,Gu=35678,tf=35680,th=4,re=1028,he=1029,we=2304,Le=2305,Re=32775,Ne=32776,ut=519,et=7680,_t=0,Ft=1,Rt=32774,lr=513,sr=36160,Fr=36064,Or={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},hr={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},wr={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Cr={cw:we,ccw:Le};function Nr(bt){return Array.isArray(bt)||mt(bt)||Mt(bt)}function jr(bt){return bt.sort(function(dr,_r){return dr===qu?-1:_r===qu?1:dr<_r?-1:1})}function Ar(bt,dr,_r,Kr){this.thisDep=bt,this.contextDep=dr,this.propDep=_r,this.append=Kr}function Ci(bt){return bt&&!(bt.thisDep||bt.contextDep||bt.propDep)}function Gi(bt){return new Ar(!1,!1,!1,bt)}function aa(bt,dr){var _r=bt.type;if(_r===Zi){var Kr=bt.data.length;return new Ar(!0,Kr>=1,Kr>=2,dr)}else if(_r===po){var ci=bt.data;return new Ar(ci.thisDep,ci.contextDep,ci.propDep,dr)}else{if(_r===zo)return new Ar(!1,!1,!1,dr);if(_r===wo){for(var yi=!1,si=!1,Ni=!1,Ji=0;Ji<bt.data.length;++Ji){var Qi=bt.data[Ji];if(Qi.type===sa)Ni=!0;else if(Qi.type===vn)si=!0;else if(Qi.type===Dn)yi=!0;else if(Qi.type===Zi){yi=!0;var ra=Qi.data;ra>=1&&(si=!0),ra>=2&&(Ni=!0)}else Qi.type===po&&(yi=yi||Qi.data.thisDep,si=si||Qi.data.contextDep,Ni=Ni||Qi.data.propDep)}return new Ar(yi,si,Ni,dr)}else return new Ar(_r===Dn,_r===vn,_r===sa,dr)}}var ga=new Ar(!1,!1,!1,function(){});function qa(bt,dr,_r,Kr,ci,yi,si,Ni,Ji,Qi,ra,mn,Wa,xa,Pi,Hr){var Ei=Qi.Record,Yi={add:32774,subtract:32778,"reverse subtract":32779};_r.ext_blend_minmax&&(Yi.min=Re,Yi.max=Ne);var la=_r.angle_instanced_arrays,Ui=_r.webgl_draw_buffers,Da=_r.oes_vertex_array_object,wa={dirty:!0,profile:Hr.profile},bn={},ji=[],Ii={},Va={};function _a(cr){return cr.replace(".","_")}function ca(cr,xr,kr){var fi=_a(cr);ji.push(cr),bn[fi]=wa[fi]=!!kr,Ii[fi]=xr}function va(cr,xr,kr){var fi=_a(cr);ji.push(cr),Array.isArray(kr)?(wa[fi]=kr.slice(),bn[fi]=kr.slice()):wa[fi]=bn[fi]=kr,Va[fi]=xr}function Ga(cr){return!!isNaN(cr)}ca($o,wi),ca(io,Zr),va(Us,"blendColor",[0,0,0,0]),va(gs,"blendEquationSeparate",[Rt,Rt]),va(Go,"blendFuncSeparate",[Ft,_t,Ft,_t]),ca(ma,Aa,!0),va(vo,"depthFunc",lr),va(Ds,"depthRange",[0,1]),va(qs,"depthMask",!0),va(Ll,Ll,[!0,!0,!0,!0]),ca(bu,Rr),va(Gl,"cullFace",he),va(ac,ac,Le),va(bl,bl,1),ca(Uu,gn),va(Fc,"polygonOffset",[0,0]),ca(Kc,Tn),ca(ud,Pn),va(Qf,"sampleCoverage",[1,!1]),ca(qd,qi),va(Fh,"stencilMask",-1),va(Hl,"stencilFunc",[ut,0,-1]),va(Vd,"stencilOpSeparate",[re,et,et,et]),va(Mf,"stencilOpSeparate",[he,et,et,et]),ca(Ph,un),va(Ih,"scissor",[0,0,bt.drawingBufferWidth,bt.drawingBufferHeight]),va(qu,qu,[0,0,bt.drawingBufferWidth,bt.drawingBufferHeight]);var wn={gl:bt,context:Wa,strings:dr,next:bn,current:wa,draw:mn,elements:yi,buffer:ci,shader:ra,attributes:Qi.state,vao:Qi,uniforms:Ji,framebuffer:Ni,extensions:_r,timer:xa,isBufferArgs:Nr},Hn={primTypes:bi,compareFuncs:hr,blendFuncs:Or,blendEquations:Yi,stencilOps:wr,glTypes:fr,orientationType:Cr};Ui&&(Hn.backBuffer=[he],Hn.drawBuffer=A(Kr.maxDrawbuffers,function(cr){return cr===0?[0]:A(cr,function(xr){return Fr+xr})}));var Ca=0;function en(){var cr=Wi({cache:Pi}),xr=cr.link,kr=cr.global;cr.id=Ca++,cr.batchId="0";var fi=xr(wn),Ti=cr.shared={props:"a0"};Object.keys(wn).forEach(function(Xe){Ti[Xe]=kr.def(fi,".",Xe)});var ve=cr.next={},be=cr.current={};Object.keys(Va).forEach(function(Xe){Array.isArray(wa[Xe])&&(ve[Xe]=kr.def(Ti.next,".",Xe),be[Xe]=kr.def(Ti.current,".",Xe))});var Ce=cr.constants={};Object.keys(Hn).forEach(function(Xe){Ce[Xe]=kr.def(JSON.stringify(Hn[Xe]))}),cr.invoke=function(Xe,it){switch(it.type){case Zi:var Dt=["this",Ti.context,Ti.props,cr.batchId];return Xe.def(xr(it.data),".call(",Dt.slice(0,Math.max(it.data.length+1,4)),")");case sa:return Xe.def(Ti.props,it.data);case vn:return Xe.def(Ti.context,it.data);case Dn:return Xe.def("this",it.data);case po:return it.data.append(cr,Xe),it.data.ref;case zo:return it.data.toString();case wo:return it.data.map(function(or){return cr.invoke(Xe,or)})}},cr.attribCache={};var He={};return cr.scopeAttrib=function(Xe){var it=dr.id(Xe);if(it in He)return He[it];var Dt=Qi.scope[it];Dt||(Dt=Qi.scope[it]=new Ei);var or=He[it]=xr(Dt);return or},cr}function Un(cr){var xr=cr.static,kr=cr.dynamic,fi;if(cd in xr){var Ti=!!xr[cd];fi=Gi(function(be,Ce){return Ti}),fi.enable=Ti}else if(cd in kr){var ve=kr[cd];fi=aa(ve,function(be,Ce){return be.invoke(Ce,ve)})}return fi}function qn(cr,xr){var kr=cr.static,fi=cr.dynamic;if(Jc in kr){var Ti=kr[Jc];return Ti?(Ti=Ni.getFramebuffer(Ti),Gi(function(be,Ce){var He=be.link(Ti),Xe=be.shared;Ce.set(Xe.framebuffer,".next",He);var it=Xe.context;return Ce.set(it,"."+$e,He+".width"),Ce.set(it,"."+st,He+".height"),He})):Gi(function(be,Ce){var He=be.shared;Ce.set(He.framebuffer,".next","null");var Xe=He.context;return Ce.set(Xe,"."+$e,Xe+"."+tr),Ce.set(Xe,"."+st,Xe+"."+Ut),"null"})}else if(Jc in fi){var ve=fi[Jc];return aa(ve,function(be,Ce){var He=be.invoke(Ce,ve),Xe=be.shared,it=Xe.framebuffer,Dt=Ce.def(it,".getFramebuffer(",He,")");Ce.set(it,".next",Dt);var or=Xe.context;return Ce.set(or,"."+$e,Dt+"?"+Dt+".width:"+or+"."+tr),Ce.set(or,"."+st,Dt+"?"+Dt+".height:"+or+"."+Ut),Dt})}else return null}function yo(cr,xr,kr){var fi=cr.static,Ti=cr.dynamic;function ve(He){if(He in fi){var Xe=fi[He],it=!0,Dt=Xe.x|0,or=Xe.y|0,Dr,vi;return"width"in Xe?Dr=Xe.width|0:it=!1,"height"in Xe?vi=Xe.height|0:it=!1,new Ar(!it&&xr&&xr.thisDep,!it&&xr&&xr.contextDep,!it&&xr&&xr.propDep,function(Oi,Si){var zi=Oi.shared.context,Vi=Dr;"width"in Xe||(Vi=Si.def(zi,".",$e,"-",Dt));var Xi=vi;return"height"in Xe||(Xi=Si.def(zi,".",st,"-",or)),[Dt,or,Vi,Xi]})}else if(He in Ti){var ai=Ti[He],ei=aa(ai,function(Oi,Si){var zi=Oi.invoke(Si,ai),Vi=Oi.shared.context,Xi=Si.def(zi,".x|0"),ha=Si.def(zi,".y|0"),$a=Si.def('"width" in ',zi,"?",zi,".width|0:","(",Vi,".",$e,"-",Xi,")"),_o=Si.def('"height" in ',zi,"?",zi,".height|0:","(",Vi,".",st,"-",ha,")");return[Xi,ha,$a,_o]});return xr&&(ei.thisDep=ei.thisDep||xr.thisDep,ei.contextDep=ei.contextDep||xr.contextDep,ei.propDep=ei.propDep||xr.propDep),ei}else return xr?new Ar(xr.thisDep,xr.contextDep,xr.propDep,function(Oi,Si){var zi=Oi.shared.context;return[0,0,Si.def(zi,".",$e),Si.def(zi,".",st)]}):null}var be=ve(qu);if(be){var Ce=be;be=new Ar(be.thisDep,be.contextDep,be.propDep,function(He,Xe){var it=Ce.append(He,Xe),Dt=He.shared.context;return Xe.set(Dt,"."+ot,it[2]),Xe.set(Dt,"."+pt,it[3]),it})}return{viewport:be,scissor_box:ve(Ih)}}function Gs(cr,xr){var kr=cr.static,fi=typeof kr[Qc]=="string"&&typeof kr[eh]=="string";if(fi){if(Object.keys(xr.dynamic).length>0)return null;var Ti=xr.static,ve=Object.keys(Ti);if(ve.length>0&&typeof Ti[ve[0]]=="number"){for(var be=[],Ce=0;Ce<ve.length;++Ce)be.push([Ti[ve[Ce]]|0,ve[Ce]]);return be}}return null}function Wl(cr,xr,kr){var fi=cr.static,Ti=cr.dynamic;function ve(it){if(it in fi){var Dt=dr.id(fi[it]),or=Gi(function(){return Dt});return or.id=Dt,or}else if(it in Ti){var Dr=Ti[it];return aa(Dr,function(vi,ai){var ei=vi.invoke(ai,Dr),Oi=ai.def(vi.shared.strings,".id(",ei,")");return Oi})}return null}var be=ve(Qc),Ce=ve(eh),He=null,Xe;return Ci(be)&&Ci(Ce)?(He=ra.program(Ce.id,be.id,null,kr),Xe=Gi(function(it,Dt){return it.link(He)})):Xe=new Ar(be&&be.thisDep||Ce&&Ce.thisDep,be&&be.contextDep||Ce&&Ce.contextDep,be&&be.propDep||Ce&&Ce.propDep,function(it,Dt){var or=it.shared.shader,Dr;be?Dr=be.append(it,Dt):Dr=Dt.def(or,".",Qc);var vi;Ce?vi=Ce.append(it,Dt):vi=Dt.def(or,".",eh);var ai=or+".program("+vi+","+Dr;return Dt.def(ai+")")}),{frag:be,vert:Ce,progVar:Xe,program:He}}function Co(cr,xr){var kr=cr.static,fi=cr.dynamic,Ti={},ve=!1;function be(){if(Se in kr){var Si=kr[Se];return Si!==null&&Qi.getVAO(Si)===null&&(Si=Qi.createVAO(Si)),ve=!0,Ti.vao=Si,Gi(function(Vi){var Xi=Qi.getVAO(Si);return Xi?Vi.link(Xi):"null"})}else if(Se in fi){ve=!0;var zi=fi[Se];return aa(zi,function(Vi,Xi){var ha=Vi.invoke(Xi,zi);return Xi.def(Vi.shared.vao+".getVAO("+ha+")")})}return null}var Ce=be(),He=!1;function Xe(){if(wu in kr){var Si=kr[wu];if(Ti.elements=Si,Nr(Si)){var zi=Ti.elements=yi.create(Si,!0);Si=yi.getElements(zi),He=!0}else Si&&(Si=yi.getElements(Si),He=!0);var Vi=Gi(function(ha,$a){if(Si){var _o=ha.link(Si);return ha.ELEMENTS=_o,_o}return ha.ELEMENTS=null,null});return Vi.value=Si,Vi}else if(wu in fi){He=!0;var Xi=fi[wu];return aa(Xi,function(ha,$a){var _o=ha.shared,xs=_o.isBufferArgs,el=_o.elements,vl=ha.invoke($a,Xi),Al=$a.def("null"),uu=$a.def(xs,"(",vl,")"),Ef=ha.cond(uu).then(Al,"=",el,".createStream(",vl,");").else(Al,"=",el,".getElements(",vl,");");return $a.entry(Ef),$a.exit(ha.cond(uu).then(el,".destroyStream(",Al,");")),ha.ELEMENTS=Al,Al})}else if(ve)return new Ar(Ce.thisDep,Ce.contextDep,Ce.propDep,function(ha,$a){return $a.def(ha.shared.vao+".currentVAO?"+ha.shared.elements+".getElements("+ha.shared.vao+".currentVAO.elements):null")});return null}var it=Xe();function Dt(){if(ef in kr){var Si=kr[ef];return Ti.primitive=Si,Gi(function(Vi,Xi){return bi[Si]})}else if(ef in fi){var zi=fi[ef];return aa(zi,function(Vi,Xi){var ha=Vi.constants.primTypes,$a=Vi.invoke(Xi,zi);return Xi.def(ha,"[",$a,"]")})}else{if(He)return Ci(it)?it.value?Gi(function(Vi,Xi){return Xi.def(Vi.ELEMENTS,".primType")}):Gi(function(){return th}):new Ar(it.thisDep,it.contextDep,it.propDep,function(Vi,Xi){var ha=Vi.ELEMENTS;return Xi.def(ha,"?",ha,".primType:",th)});if(ve)return new Ar(Ce.thisDep,Ce.contextDep,Ce.propDep,function(Vi,Xi){return Xi.def(Vi.shared.vao+".currentVAO?"+Vi.shared.vao+".currentVAO.primitive:"+th)})}return null}function or(Si,zi){if(Si in kr){var Vi=kr[Si]|0;return zi?Ti.offset=Vi:Ti.instances=Vi,Gi(function(ha,$a){return zi&&(ha.OFFSET=Vi),Vi})}else if(Si in fi){var Xi=fi[Si];return aa(Xi,function(ha,$a){var _o=ha.invoke($a,Xi);return zi&&(ha.OFFSET=_o),_o})}else if(zi){if(He)return Gi(function(ha,$a){return ha.OFFSET=0,0});if(ve)return new Ar(Ce.thisDep,Ce.contextDep,Ce.propDep,function(ha,$a){return $a.def(ha.shared.vao+".currentVAO?"+ha.shared.vao+".currentVAO.offset:0")})}else if(ve)return new Ar(Ce.thisDep,Ce.contextDep,Ce.propDep,function(ha,$a){return $a.def(ha.shared.vao+".currentVAO?"+ha.shared.vao+".currentVAO.instances:-1")});return null}var Dr=or(fd,!0);function vi(){if(Sf in kr){var Si=kr[Sf]|0;return Ti.count=Si,Gi(function(){return Si})}else if(Sf in fi){var zi=fi[Sf];return aa(zi,function($a,_o){var xs=$a.invoke(_o,zi);return xs})}else if(He)if(Ci(it)){if(it)return Dr?new Ar(Dr.thisDep,Dr.contextDep,Dr.propDep,function($a,_o){var xs=_o.def($a.ELEMENTS,".vertCount-",$a.OFFSET);return xs}):Gi(function($a,_o){return _o.def($a.ELEMENTS,".vertCount")});var Vi=Gi(function(){return-1});return Vi}else{var Xi=new Ar(it.thisDep||Dr.thisDep,it.contextDep||Dr.contextDep,it.propDep||Dr.propDep,function($a,_o){var xs=$a.ELEMENTS;return $a.OFFSET?_o.def(xs,"?",xs,".vertCount-",$a.OFFSET,":-1"):_o.def(xs,"?",xs,".vertCount:-1")});return Xi}else if(ve){var ha=new Ar(Ce.thisDep,Ce.contextDep,Ce.propDep,function($a,_o){return _o.def($a.shared.vao,".currentVAO?",$a.shared.vao,".currentVAO.count:-1")});return ha}return null}var ai=Dt(),ei=vi(),Oi=or($l,!1);return{elements:it,primitive:ai,count:ei,instances:Oi,offset:Dr,vao:Ce,vaoActive:ve,elementsActive:He,static:Ti}}function Rc(cr,xr){var kr=cr.static,fi=cr.dynamic,Ti={};return ji.forEach(function(ve){var be=_a(ve);function Ce(He,Xe){if(ve in kr){var it=He(kr[ve]);Ti[be]=Gi(function(){return it})}else if(ve in fi){var Dt=fi[ve];Ti[be]=aa(Dt,function(or,Dr){return Xe(or,Dr,or.invoke(Dr,Dt))})}}switch(ve){case bu:case io:case $o:case qd:case ma:case Ph:case Uu:case Kc:case ud:case qs:return Ce(function(He){return He},function(He,Xe,it){return it});case vo:return Ce(function(He){return hr[He]},function(He,Xe,it){var Dt=He.constants.compareFuncs;return Xe.def(Dt,"[",it,"]")});case Ds:return Ce(function(He){return He},function(He,Xe,it){var Dt=Xe.def("+",it,"[0]"),or=Xe.def("+",it,"[1]");return[Dt,or]});case Go:return Ce(function(He){var Xe="srcRGB"in He?He.srcRGB:He.src,it="srcAlpha"in He?He.srcAlpha:He.src,Dt="dstRGB"in He?He.dstRGB:He.dst,or="dstAlpha"in He?He.dstAlpha:He.dst;return[Or[Xe],Or[Dt],Or[it],Or[or]]},function(He,Xe,it){var Dt=He.constants.blendFuncs;function or(zi,Vi){var Xi=Xe.def('"',zi,Vi,'" in ',it,"?",it,".",zi,Vi,":",it,".",zi);return Xi}var Dr=or("src","RGB"),vi=or("dst","RGB"),ai=Xe.def(Dt,"[",Dr,"]"),ei=Xe.def(Dt,"[",or("src","Alpha"),"]"),Oi=Xe.def(Dt,"[",vi,"]"),Si=Xe.def(Dt,"[",or("dst","Alpha"),"]");return[ai,Oi,ei,Si]});case gs:return Ce(function(He){if(typeof He=="string")return[Yi[He],Yi[He]];if(typeof He=="object")return[Yi[He.rgb],Yi[He.alpha]]},function(He,Xe,it){var Dt=He.constants.blendEquations,or=Xe.def(),Dr=Xe.def(),vi=He.cond("typeof ",it,'==="string"');return vi.then(or,"=",Dr,"=",Dt,"[",it,"];"),vi.else(or,"=",Dt,"[",it,".rgb];",Dr,"=",Dt,"[",it,".alpha];"),Xe(vi),[or,Dr]});case Us:return Ce(function(He){return A(4,function(Xe){return+He[Xe]})},function(He,Xe,it){return A(4,function(Dt){return Xe.def("+",it,"[",Dt,"]")})});case Fh:return Ce(function(He){return He|0},function(He,Xe,it){return Xe.def(it,"|0")});case Hl:return Ce(function(He){var Xe=He.cmp||"keep",it=He.ref||0,Dt="mask"in He?He.mask:-1;return[hr[Xe],it,Dt]},function(He,Xe,it){var Dt=He.constants.compareFuncs,or=Xe.def('"cmp" in ',it,"?",Dt,"[",it,".cmp]",":",et),Dr=Xe.def(it,".ref|0"),vi=Xe.def('"mask" in ',it,"?",it,".mask|0:-1");return[or,Dr,vi]});case Vd:case Mf:return Ce(function(He){var Xe=He.fail||"keep",it=He.zfail||"keep",Dt=He.zpass||"keep";return[ve===Mf?he:re,wr[Xe],wr[it],wr[Dt]]},function(He,Xe,it){var Dt=He.constants.stencilOps;function or(Dr){return Xe.def('"',Dr,'" in ',it,"?",Dt,"[",it,".",Dr,"]:",et)}return[ve===Mf?he:re,or("fail"),or("zfail"),or("zpass")]});case Fc:return Ce(function(He){var Xe=He.factor|0,it=He.units|0;return[Xe,it]},function(He,Xe,it){var Dt=Xe.def(it,".factor|0"),or=Xe.def(it,".units|0");return[Dt,or]});case Gl:return Ce(function(He){var Xe=0;return He==="front"?Xe=re:He==="back"&&(Xe=he),Xe},function(He,Xe,it){return Xe.def(it,'==="front"?',re,":",he)});case bl:return Ce(function(He){return He},function(He,Xe,it){return it});case ac:return Ce(function(He){return Cr[He]},function(He,Xe,it){return Xe.def(it+'==="cw"?'+we+":"+Le)});case Ll:return Ce(function(He){return He.map(function(Xe){return!!Xe})},function(He,Xe,it){return A(4,function(Dt){return"!!"+it+"["+Dt+"]"})});case Qf:return Ce(function(He){var Xe="value"in He?He.value:1,it=!!He.invert;return[Xe,it]},function(He,Xe,it){var Dt=Xe.def('"value" in ',it,"?+",it,".value:1"),or=Xe.def("!!",it,".invert");return[Dt,or]})}}),Ti}function ys(cr,xr){var kr=cr.static,fi=cr.dynamic,Ti={};return Object.keys(kr).forEach(function(ve){var be=kr[ve],Ce;if(typeof be=="number"||typeof be=="boolean")Ce=Gi(function(){return be});else if(typeof be=="function"){var He=be._reglType;He==="texture2d"||He==="textureCube"?Ce=Gi(function(Xe){return Xe.link(be)}):(He==="framebuffer"||He==="framebufferCube")&&(Ce=Gi(function(Xe){return Xe.link(be.color[0])}))}else Zt(be)&&(Ce=Gi(function(Xe){var it=Xe.global.def("[",A(be.length,function(Dt){return be[Dt]}),"]");return it}));Ce.value=be,Ti[ve]=Ce}),Object.keys(fi).forEach(function(ve){var be=fi[ve];Ti[ve]=aa(be,function(Ce,He){return Ce.invoke(He,be)})}),Ti}function Hu(cr,xr){var kr=cr.static,fi=cr.dynamic,Ti={};return Object.keys(kr).forEach(function(ve){var be=kr[ve],Ce=dr.id(ve),He=new Ei;if(Nr(be))He.state=Ja,He.buffer=ci.getBuffer(ci.create(be,pr,!1,!0)),He.type=0;else{var Xe=ci.getBuffer(be);if(Xe)He.state=Ja,He.buffer=Xe,He.type=0;else if("constant"in be){var it=be.constant;He.buffer="null",He.state=rn,typeof it=="number"?He.x=it:Oa.forEach(function(Oi,Si){Si<it.length&&(He[Oi]=it[Si])})}else{Nr(be.buffer)?Xe=ci.getBuffer(ci.create(be.buffer,pr,!1,!0)):Xe=ci.getBuffer(be.buffer);var Dt=be.offset|0,or=be.stride|0,Dr=be.size|0,vi=!!be.normalized,ai=0;"type"in be&&(ai=fr[be.type]);var ei=be.divisor|0;He.buffer=Xe,He.state=Ja,He.size=Dr,He.normalized=vi,He.type=ai||Xe.dtype,He.offset=Dt,He.stride=or,He.divisor=ei}}Ti[ve]=Gi(function(Oi,Si){var zi=Oi.attribCache;if(Ce in zi)return zi[Ce];var Vi={isStream:!1};return Object.keys(He).forEach(function(Xi){Vi[Xi]=He[Xi]}),He.buffer&&(Vi.buffer=Oi.link(He.buffer),Vi.type=Vi.type||Vi.buffer+".dtype"),zi[Ce]=Vi,Vi})}),Object.keys(fi).forEach(function(ve){var be=fi[ve];function Ce(He,Xe){var it=He.invoke(Xe,be),Dt=He.shared,or=He.constants,Dr=Dt.isBufferArgs,vi=Dt.buffer,ai={isStream:Xe.def(!1)},ei=new Ei;ei.state=Ja,Object.keys(ei).forEach(function(Vi){ai[Vi]=Xe.def(""+ei[Vi])});var Oi=ai.buffer,Si=ai.type;Xe("if(",Dr,"(",it,")){",ai.isStream,"=true;",Oi,"=",vi,".createStream(",pr,",",it,");",Si,"=",Oi,".dtype;","}else{",Oi,"=",vi,".getBuffer(",it,");","if(",Oi,"){",Si,"=",Oi,".dtype;",'}else if("constant" in ',it,"){",ai.state,"=",rn,";","if(typeof "+it+'.constant === "number"){',ai[Oa[0]],"=",it,".constant;",Oa.slice(1).map(function(Vi){return ai[Vi]}).join("="),"=0;","}else{",Oa.map(function(Vi,Xi){return ai[Vi]+"="+it+".constant.length>"+Xi+"?"+it+".constant["+Xi+"]:0;"}).join(""),"}}else{","if(",Dr,"(",it,".buffer)){",Oi,"=",vi,".createStream(",pr,",",it,".buffer);","}else{",Oi,"=",vi,".getBuffer(",it,".buffer);","}",Si,'="type" in ',it,"?",or.glTypes,"[",it,".type]:",Oi,".dtype;",ai.normalized,"=!!",it,".normalized;");function zi(Vi){Xe(ai[Vi],"=",it,".",Vi,"|0;")}return zi("size"),zi("offset"),zi("stride"),zi("divisor"),Xe("}}"),Xe.exit("if(",ai.isStream,"){",vi,".destroyStream(",Oi,");","}"),ai}Ti[ve]=aa(be,Ce)}),Ti}function lc(cr){var xr=cr.static,kr=cr.dynamic,fi={};return Object.keys(xr).forEach(function(Ti){var ve=xr[Ti];fi[Ti]=Gi(function(be,Ce){return typeof ve=="number"||typeof ve=="boolean"?""+ve:be.link(ve)})}),Object.keys(kr).forEach(function(Ti){var ve=kr[Ti];fi[Ti]=aa(ve,function(be,Ce){return be.invoke(Ce,ve)})}),fi}function zc(cr,xr,kr,fi,Ti){var ve=cr.static,be=cr.dynamic,Ce=Gs(cr,xr),He=qn(cr,Ti),Xe=yo(cr,He,Ti),it=Co(cr,Ti),Dt=Rc(cr,Ti),or=Wl(cr,Ti,Ce);function Dr(zi){var Vi=Xe[zi];Vi&&(Dt[zi]=Vi)}Dr(qu),Dr(_a(Ih));var vi=Object.keys(Dt).length>0,ai={framebuffer:He,draw:it,shader:or,state:Dt,dirty:vi,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}};if(ai.profile=Un(cr,Ti),ai.uniforms=ys(kr,Ti),ai.drawVAO=ai.scopeVAO=it.vao,!ai.drawVAO&&or.program&&!Ce&&_r.angle_instanced_arrays&&it.static.elements){var ei=!0,Oi=or.program.attributes.map(function(zi){var Vi=xr.static[zi];return ei=ei&&!!Vi,Vi});if(ei&&Oi.length>0){var Si=Qi.getVAO(Qi.createVAO({attributes:Oi,elements:it.static.elements}));ai.drawVAO=new Ar(null,null,null,function(zi,Vi){return zi.link(Si)}),ai.useVAO=!0}}return Ce?ai.useVAO=!0:ai.attributes=Hu(xr,Ti),ai.context=lc(fi,Ti),ai}function Pl(cr,xr,kr){var fi=cr.shared,Ti=fi.context,ve=cr.scope();Object.keys(kr).forEach(function(be){xr.save(Ti,"."+be);var Ce=kr[be],He=Ce.append(cr,xr);Array.isArray(He)?ve(Ti,".",be,"=[",He.join(),"];"):ve(Ti,".",be,"=",He,";")}),xr(ve)}function Il(cr,xr,kr,fi){var Ti=cr.shared,ve=Ti.gl,be=Ti.framebuffer,Ce;Ui&&(Ce=xr.def(Ti.extensions,".webgl_draw_buffers"));var He=cr.constants,Xe=He.drawBuffer,it=He.backBuffer,Dt;kr?Dt=kr.append(cr,xr):Dt=xr.def(be,".next"),fi||xr("if(",Dt,"!==",be,".cur){"),xr("if(",Dt,"){",ve,".bindFramebuffer(",sr,",",Dt,".framebuffer);"),Ui&&xr(Ce,".drawBuffersWEBGL(",Xe,"[",Dt,".colorAttachments.length]);"),xr("}else{",ve,".bindFramebuffer(",sr,",null);"),Ui&&xr(Ce,".drawBuffersWEBGL(",it,");"),xr("}",be,".cur=",Dt,";"),fi||xr("}")}function Yl(cr,xr,kr){var fi=cr.shared,Ti=fi.gl,ve=cr.current,be=cr.next,Ce=fi.current,He=fi.next,Xe=cr.cond(Ce,".dirty");ji.forEach(function(it){var Dt=_a(it);if(!(Dt in kr.state)){var or,Dr;if(Dt in be){or=be[Dt],Dr=ve[Dt];var vi=A(wa[Dt].length,function(ei){return Xe.def(or,"[",ei,"]")});Xe(cr.cond(vi.map(function(ei,Oi){return ei+"!=="+Dr+"["+Oi+"]"}).join("||")).then(Ti,".",Va[Dt],"(",vi,");",vi.map(function(ei,Oi){return Dr+"["+Oi+"]="+ei}).join(";"),";"))}else{or=Xe.def(He,".",Dt);var ai=cr.cond(or,"!==",Ce,".",Dt);Xe(ai),Dt in Ii?ai(cr.cond(or).then(Ti,".enable(",Ii[Dt],");").else(Ti,".disable(",Ii[Dt],");"),Ce,".",Dt,"=",or,";"):ai(Ti,".",Va[Dt],"(",or,");",Ce,".",Dt,"=",or,";")}}}),Object.keys(kr.state).length===0&&Xe(Ce,".dirty=false;"),xr(Xe)}function oo(cr,xr,kr,fi){var Ti=cr.shared,ve=cr.current,be=Ti.current,Ce=Ti.gl,He;jr(Object.keys(kr)).forEach(function(Xe){var it=kr[Xe];if(!(fi&&!fi(it))){var Dt=it.append(cr,xr);if(Ii[Xe]){var or=Ii[Xe];Ci(it)?(He=cr.link(Dt,{stable:!0}),xr(cr.cond(He).then(Ce,".enable(",or,");").else(Ce,".disable(",or,");")),xr(be,".",Xe,"=",He,";")):(xr(cr.cond(Dt).then(Ce,".enable(",or,");").else(Ce,".disable(",or,");")),xr(be,".",Xe,"=",Dt,";"))}else if(Zt(Dt)){var Dr=ve[Xe];xr(Ce,".",Va[Xe],"(",Dt,");",Dt.map(function(vi,ai){return Dr+"["+ai+"]="+vi}).join(";"),";")}else Ci(it)?(He=cr.link(Dt,{stable:!0}),xr(Ce,".",Va[Xe],"(",He,");",be,".",Xe,"=",He,";")):xr(Ce,".",Va[Xe],"(",Dt,");",be,".",Xe,"=",Dt,";")}})}function lu(cr,xr){la&&(cr.instancing=xr.def(cr.shared.extensions,".angle_instanced_arrays"))}function Ms(cr,xr,kr,fi,Ti){var ve=cr.shared,be=cr.stats,Ce=ve.current,He=ve.timer,Xe=kr.profile;function it(){return typeof performance>"u"?"Date.now()":"performance.now()"}var Dt,or;function Dr(zi){Dt=xr.def(),zi(Dt,"=",it(),";"),typeof Ti=="string"?zi(be,".count+=",Ti,";"):zi(be,".count++;"),xa&&(fi?(or=xr.def(),zi(or,"=",He,".getNumPendingQueries();")):zi(He,".beginQuery(",be,");"))}function vi(zi){zi(be,".cpuTime+=",it(),"-",Dt,";"),xa&&(fi?zi(He,".pushScopeStats(",or,",",He,".getNumPendingQueries(),",be,");"):zi(He,".endQuery();"))}function ai(zi){var Vi=xr.def(Ce,".profile");xr(Ce,".profile=",zi,";"),xr.exit(Ce,".profile=",Vi,";")}var ei;if(Xe){if(Ci(Xe)){Xe.enable?(Dr(xr),vi(xr.exit),ai("true")):ai("false");return}ei=Xe.append(cr,xr),ai(ei)}else ei=xr.def(Ce,".profile");var Oi=cr.block();Dr(Oi),xr("if(",ei,"){",Oi,"}");var Si=cr.block();vi(Si),xr.exit("if(",ei,"){",Si,"}")}function uc(cr,xr,kr,fi,Ti){var ve=cr.shared;function be(He){switch(He){case qo:case wl:case pl:return 2;case Wn:case Vu:case Tu:return 3;case ls:case Pc:case nc:return 4;default:return 1}}function Ce(He,Xe,it){var Dt=ve.gl,or=xr.def(He,".location"),Dr=xr.def(ve.attributes,"[",or,"]"),vi=it.state,ai=it.buffer,ei=[it.x,it.y,it.z,it.w],Oi=["buffer","normalized","offset","stride"];function Si(){xr("if(!",Dr,".buffer){",Dt,".enableVertexAttribArray(",or,");}");var Vi=it.type,Xi;if(it.size?Xi=xr.def(it.size,"||",Xe):Xi=Xe,xr("if(",Dr,".type!==",Vi,"||",Dr,".size!==",Xi,"||",Oi.map(function($a){return Dr+"."+$a+"!=="+it[$a]}).join("||"),"){",Dt,".bindBuffer(",pr,",",ai,".buffer);",Dt,".vertexAttribPointer(",[or,Xi,Vi,it.normalized,it.stride,it.offset],");",Dr,".type=",Vi,";",Dr,".size=",Xi,";",Oi.map(function($a){return Dr+"."+$a+"="+it[$a]+";"}).join(""),"}"),la){var ha=it.divisor;xr("if(",Dr,".divisor!==",ha,"){",cr.instancing,".vertexAttribDivisorANGLE(",[or,ha],");",Dr,".divisor=",ha,";}")}}function zi(){xr("if(",Dr,".buffer){",Dt,".disableVertexAttribArray(",or,");",Dr,".buffer=null;","}if(",Oa.map(function(Vi,Xi){return Dr+"."+Vi+"!=="+ei[Xi]}).join("||"),"){",Dt,".vertexAttrib4f(",or,",",ei,");",Oa.map(function(Vi,Xi){return Dr+"."+Vi+"="+ei[Xi]+";"}).join(""),"}")}vi===Ja?Si():vi===rn?zi():(xr("if(",vi,"===",Ja,"){"),Si(),xr("}else{"),zi(),xr("}"))}fi.forEach(function(He){var Xe=He.name,it=kr.attributes[Xe],Dt;if(it){if(!Ti(it))return;Dt=it.append(cr,xr)}else{if(!Ti(ga))return;var or=cr.scopeAttrib(Xe);Dt={},Object.keys(new Ei).forEach(function(Dr){Dt[Dr]=xr.def(or,".",Dr)})}Ce(cr.link(He),be(He.info.type),Dt)})}function Bc(cr,xr,kr,fi,Ti,ve){for(var be=cr.shared,Ce=be.gl,He,Xe=0;Xe<fi.length;++Xe){var it=fi[Xe],Dt=it.name,or=it.info.type,Dr=kr.uniforms[Dt],vi=cr.link(it),ai=vi+".location",ei;if(Dr){if(!Ti(Dr))continue;if(Ci(Dr)){var Oi=Dr.value;if(or===Gu||or===tf){var Si=cr.link(Oi._texture||Oi.color[0]._texture);xr(Ce,".uniform1i(",ai,",",Si+".bind());"),xr.exit(Si,".unbind();")}else if(or===oc||or===sc||or===Ic){var zi=cr.global.def("new Float32Array(["+Array.prototype.slice.call(Oi)+"])"),Vi=2;or===sc?Vi=3:or===Ic&&(Vi=4),xr(Ce,".uniformMatrix",Vi,"fv(",ai,",false,",zi,");")}else{switch(or){case Eo:He="1f";break;case qo:He="2f";break;case Wn:He="3f";break;case ls:He="4f";break;case dl:He="1i";break;case ol:He="1i";break;case pl:He="2i";break;case wl:He="2i";break;case Tu:He="3i";break;case Vu:He="3i";break;case nc:He="4i";break;case Pc:He="4i";break}xr(Ce,".uniform",He,"(",ai,",",Zt(Oi)?Array.prototype.slice.call(Oi):Oi,");")}continue}else ei=Dr.append(cr,xr)}else{if(!Ti(ga))continue;ei=xr.def(be.uniforms,"[",dr.id(Dt),"]")}or===Gu?xr("if(",ei,"&&",ei,'._reglType==="framebuffer"){',ei,"=",ei,".color[0];","}"):or===tf&&xr("if(",ei,"&&",ei,'._reglType==="framebufferCube"){',ei,"=",ei,".color[0];","}");var Xi=1;switch(or){case Gu:case tf:var ha=xr.def(ei,"._texture");xr(Ce,".uniform1i(",ai,",",ha,".bind());"),xr.exit(ha,".unbind();");continue;case ol:case dl:He="1i";break;case wl:case pl:He="2i",Xi=2;break;case Vu:case Tu:He="3i",Xi=3;break;case Pc:case nc:He="4i",Xi=4;break;case Eo:He="1f";break;case qo:He="2f",Xi=2;break;case Wn:He="3f",Xi=3;break;case ls:He="4f",Xi=4;break;case oc:He="Matrix2fv";break;case sc:He="Matrix3fv";break;case Ic:He="Matrix4fv";break}if(He.charAt(0)==="M"){xr(Ce,".uniform",He,"(",ai,",");var $a=Math.pow(or-oc+2,2),_o=cr.global.def("new Float32Array(",$a,")");Array.isArray(ei)?xr("false,(",A($a,function(uu){return _o+"["+uu+"]="+ei[uu]}),",",_o,")"):xr("false,(Array.isArray(",ei,")||",ei," instanceof Float32Array)?",ei,":(",A($a,function(uu){return _o+"["+uu+"]="+ei+"["+uu+"]"}),",",_o,")"),xr(");")}else if(Xi>1){for(var xs=[],el=[],vl=0;vl<Xi;++vl)Array.isArray(ei)?el.push(ei[vl]):el.push(xr.def(ei+"["+vl+"]")),ve&&xs.push(xr.def());ve&&xr("if(!",cr.batchId,"||",xs.map(function(uu,Ef){return uu+"!=="+el[Ef]}).join("||"),"){",xs.map(function(uu,Ef){return uu+"="+el[Ef]+";"}).join("")),xr(Ce,".uniform",He,"(",ai,",",el.join(","),");"),ve&&xr("}")}else{if(ve){var Al=xr.def();xr("if(!",cr.batchId,"||",Al,"!==",ei,"){",Al,"=",ei,";")}xr(Ce,".uniform",He,"(",ai,",",ei,");"),ve&&xr("}")}}}function Oc(cr,xr,kr,fi){var Ti=cr.shared,ve=Ti.gl,be=Ti.draw,Ce=fi.draw;function He(){var Xi=Ce.elements,ha,$a=xr;return Xi?((Xi.contextDep&&fi.contextDynamic||Xi.propDep)&&($a=kr),ha=Xi.append(cr,$a),Ce.elementsActive&&$a("if("+ha+")"+ve+".bindBuffer("+Sr+","+ha+".buffer.buffer);")):(ha=$a.def(),$a(ha,"=",be,".",wu,";","if(",ha,"){",ve,".bindBuffer(",Sr,",",ha,".buffer.buffer);}","else if(",Ti.vao,".currentVAO){",ha,"=",cr.shared.elements+".getElements("+Ti.vao,".currentVAO.elements);",Da?"":"if("+ha+")"+ve+".bindBuffer("+Sr+","+ha+".buffer.buffer);","}")),ha}function Xe(){var Xi=Ce.count,ha,$a=xr;return Xi?((Xi.contextDep&&fi.contextDynamic||Xi.propDep)&&($a=kr),ha=Xi.append(cr,$a)):ha=$a.def(be,".",Sf),ha}var it=He();function Dt(Xi){var ha=Ce[Xi];return ha?ha.contextDep&&fi.contextDynamic||ha.propDep?ha.append(cr,kr):ha.append(cr,xr):xr.def(be,".",Xi)}var or=Dt(ef),Dr=Dt(fd),vi=Xe();if(typeof vi=="number"){if(vi===0)return}else kr("if(",vi,"){"),kr.exit("}");var ai,ei;la&&(ai=Dt($l),ei=cr.instancing);var Oi=it+".type",Si=Ce.elements&&Ci(Ce.elements)&&!Ce.vaoActive;function zi(){function Xi(){kr(ei,".drawElementsInstancedANGLE(",[or,vi,Oi,Dr+"<<(("+Oi+"-"+Pa+")>>1)",ai],");")}function ha(){kr(ei,".drawArraysInstancedANGLE(",[or,Dr,vi,ai],");")}it&&it!=="null"?Si?Xi():(kr("if(",it,"){"),Xi(),kr("}else{"),ha(),kr("}")):ha()}function Vi(){function Xi(){kr(ve+".drawElements("+[or,vi,Oi,Dr+"<<(("+Oi+"-"+Pa+")>>1)"]+");")}function ha(){kr(ve+".drawArrays("+[or,Dr,vi]+");")}it&&it!=="null"?Si?Xi():(kr("if(",it,"){"),Xi(),kr("}else{"),ha(),kr("}")):ha()}la&&(typeof ai!="number"||ai>=0)?typeof ai=="string"?(kr("if(",ai,">0){"),zi(),kr("}else if(",ai,"<0){"),Vi(),kr("}")):zi():Vi()}function Zn(cr,xr,kr,fi,Ti){var ve=en(),be=ve.proc("body",Ti);return la&&(ve.instancing=be.def(ve.shared.extensions,".angle_instanced_arrays")),cr(ve,be,kr,fi),ve.compile().body}function Bo(cr,xr,kr,fi){lu(cr,xr),kr.useVAO?kr.drawVAO?xr(cr.shared.vao,".setVAO(",kr.drawVAO.append(cr,xr),");"):xr(cr.shared.vao,".setVAO(",cr.shared.vao,".targetVAO);"):(xr(cr.shared.vao,".setVAO(null);"),uc(cr,xr,kr,fi.attributes,function(){return!0})),Bc(cr,xr,kr,fi.uniforms,function(){return!0},!1),Oc(cr,xr,xr,kr)}function Bs(cr,xr){var kr=cr.proc("draw",1);lu(cr,kr),Pl(cr,kr,xr.context),Il(cr,kr,xr.framebuffer),Yl(cr,kr,xr),oo(cr,kr,xr.state),Ms(cr,kr,xr,!1,!0);var fi=xr.shader.progVar.append(cr,kr);if(kr(cr.shared.gl,".useProgram(",fi,".program);"),xr.shader.program)Bo(cr,kr,xr,xr.shader.program);else{kr(cr.shared.vao,".setVAO(null);");var Ti=cr.global.def("{}"),ve=kr.def(fi,".id"),be=kr.def(Ti,"[",ve,"]");kr(cr.cond(be).then(be,".call(this,a0);").else(be,"=",Ti,"[",ve,"]=",cr.link(function(Ce){return Zn(Bo,cr,xr,Ce,1)}),"(",fi,");",be,".call(this,a0);"))}Object.keys(xr.state).length>0&&kr(cr.shared.current,".dirty=true;"),cr.shared.vao&&kr(cr.shared.vao,".setVAO(null);")}function gr(cr,xr,kr,fi){cr.batchId="a1",lu(cr,xr);function Ti(){return!0}uc(cr,xr,kr,fi.attributes,Ti),Bc(cr,xr,kr,fi.uniforms,Ti,!1),Oc(cr,xr,xr,kr)}function hi(cr,xr,kr,fi){lu(cr,xr);var Ti=kr.contextDep,ve=xr.def(),be="a0",Ce="a1",He=xr.def();cr.shared.props=He,cr.batchId=ve;var Xe=cr.scope(),it=cr.scope();xr(Xe.entry,"for(",ve,"=0;",ve,"<",Ce,";++",ve,"){",He,"=",be,"[",ve,"];",it,"}",Xe.exit);function Dt(Oi){return Oi.contextDep&&Ti||Oi.propDep}function or(Oi){return!Dt(Oi)}if(kr.needsContext&&Pl(cr,it,kr.context),kr.needsFramebuffer&&Il(cr,it,kr.framebuffer),oo(cr,it,kr.state,Dt),kr.profile&&Dt(kr.profile)&&Ms(cr,it,kr,!1,!0),fi)kr.useVAO?kr.drawVAO?Dt(kr.drawVAO)?it(cr.shared.vao,".setVAO(",kr.drawVAO.append(cr,it),");"):Xe(cr.shared.vao,".setVAO(",kr.drawVAO.append(cr,Xe),");"):Xe(cr.shared.vao,".setVAO(",cr.shared.vao,".targetVAO);"):(Xe(cr.shared.vao,".setVAO(null);"),uc(cr,Xe,kr,fi.attributes,or),uc(cr,it,kr,fi.attributes,Dt)),Bc(cr,Xe,kr,fi.uniforms,or,!1),Bc(cr,it,kr,fi.uniforms,Dt,!0),Oc(cr,Xe,it,kr);else{var Dr=cr.global.def("{}"),vi=kr.shader.progVar.append(cr,it),ai=it.def(vi,".id"),ei=it.def(Dr,"[",ai,"]");it(cr.shared.gl,".useProgram(",vi,".program);","if(!",ei,"){",ei,"=",Dr,"[",ai,"]=",cr.link(function(Oi){return Zn(gr,cr,kr,Oi,2)}),"(",vi,");}",ei,".call(this,a0[",ve,"],",ve,");")}}function di(cr,xr){var kr=cr.proc("batch",2);cr.batchId="0",lu(cr,kr);var fi=!1,Ti=!0;Object.keys(xr.context).forEach(function(Dr){fi=fi||xr.context[Dr].propDep}),fi||(Pl(cr,kr,xr.context),Ti=!1);var ve=xr.framebuffer,be=!1;ve?(ve.propDep?fi=be=!0:ve.contextDep&&fi&&(be=!0),be||Il(cr,kr,ve)):Il(cr,kr,null),xr.state.viewport&&xr.state.viewport.propDep&&(fi=!0);function Ce(Dr){return Dr.contextDep&&fi||Dr.propDep}Yl(cr,kr,xr),oo(cr,kr,xr.state,function(Dr){return!Ce(Dr)}),(!xr.profile||!Ce(xr.profile))&&Ms(cr,kr,xr,!1,"a1"),xr.contextDep=fi,xr.needsContext=Ti,xr.needsFramebuffer=be;var He=xr.shader.progVar;if(He.contextDep&&fi||He.propDep)hi(cr,kr,xr,null);else{var Xe=He.append(cr,kr);if(kr(cr.shared.gl,".useProgram(",Xe,".program);"),xr.shader.program)hi(cr,kr,xr,xr.shader.program);else{kr(cr.shared.vao,".setVAO(null);");var it=cr.global.def("{}"),Dt=kr.def(Xe,".id"),or=kr.def(it,"[",Dt,"]");kr(cr.cond(or).then(or,".call(this,a0,a1);").else(or,"=",it,"[",Dt,"]=",cr.link(function(Dr){return Zn(hi,cr,xr,Dr,2)}),"(",Xe,");",or,".call(this,a0,a1);"))}}Object.keys(xr.state).length>0&&kr(cr.shared.current,".dirty=true;"),cr.shared.vao&&kr(cr.shared.vao,".setVAO(null);")}function sn(cr,xr){var kr=cr.proc("scope",3);cr.batchId="a2";var fi=cr.shared,Ti=fi.current;if(Pl(cr,kr,xr.context),xr.framebuffer&&xr.framebuffer.append(cr,kr),jr(Object.keys(xr.state)).forEach(function(Ce){var He=xr.state[Ce],Xe=He.append(cr,kr);Zt(Xe)?Xe.forEach(function(it,Dt){Ga(it)?kr.set(cr.next[Ce],"["+Dt+"]",it):kr.set(cr.next[Ce],"["+Dt+"]",cr.link(it,{stable:!0}))}):Ci(He)?kr.set(fi.next,"."+Ce,cr.link(Xe,{stable:!0})):kr.set(fi.next,"."+Ce,Xe)}),Ms(cr,kr,xr,!0,!0),[wu,fd,Sf,$l,ef].forEach(function(Ce){var He=xr.draw[Ce];if(He){var Xe=He.append(cr,kr);Ga(Xe)?kr.set(fi.draw,"."+Ce,Xe):kr.set(fi.draw,"."+Ce,cr.link(Xe),{stable:!0})}}),Object.keys(xr.uniforms).forEach(function(Ce){var He=xr.uniforms[Ce].append(cr,kr);Array.isArray(He)&&(He="["+He.map(function(Xe){return Ga(Xe)?Xe:cr.link(Xe,{stable:!0})})+"]"),kr.set(fi.uniforms,"["+cr.link(dr.id(Ce),{stable:!0})+"]",He)}),Object.keys(xr.attributes).forEach(function(Ce){var He=xr.attributes[Ce].append(cr,kr),Xe=cr.scopeAttrib(Ce);Object.keys(new Ei).forEach(function(it){kr.set(Xe,"."+it,He[it])})}),xr.scopeVAO){var ve=xr.scopeVAO.append(cr,kr);Ga(ve)?kr.set(fi.vao,".targetVAO",ve):kr.set(fi.vao,".targetVAO",cr.link(ve,{stable:!0}))}function be(Ce){var He=xr.shader[Ce];if(He){var Xe=He.append(cr,kr);Ga(Xe)?kr.set(fi.shader,"."+Ce,Xe):kr.set(fi.shader,"."+Ce,cr.link(Xe,{stable:!0}))}}be(eh),be(Qc),Object.keys(xr.state).length>0&&(kr(Ti,".dirty=true;"),kr.exit(Ti,".dirty=true;")),kr("a1(",cr.shared.context,",a0,",cr.batchId,");")}function Io(cr){if(!(typeof cr!="object"||Zt(cr))){for(var xr=Object.keys(cr),kr=0;kr<xr.length;++kr)if(p.isDynamic(cr[xr[kr]]))return!0;return!1}}function _s(cr,xr,kr){var fi=xr.static[kr];if(!fi||!Io(fi))return;var Ti=cr.global,ve=Object.keys(fi),be=!1,Ce=!1,He=!1,Xe=cr.global.def("{}");ve.forEach(function(Dt){var or=fi[Dt];if(p.isDynamic(or)){typeof or=="function"&&(or=fi[Dt]=p.unbox(or));var Dr=aa(or,null);be=be||Dr.thisDep,He=He||Dr.propDep,Ce=Ce||Dr.contextDep}else{switch(Ti(Xe,".",Dt,"="),typeof or){case"number":Ti(or);break;case"string":Ti('"',or,'"');break;case"object":Array.isArray(or)&&Ti("[",or.join(),"]");break;default:Ti(cr.link(or));break}Ti(";")}});function it(Dt,or){ve.forEach(function(Dr){var vi=fi[Dr];if(p.isDynamic(vi)){var ai=Dt.invoke(or,vi);or(Xe,".",Dr,"=",ai,";")}})}xr.dynamic[kr]=new p.DynamicVariable(po,{thisDep:be,contextDep:Ce,propDep:He,ref:Xe,append:it}),delete xr.static[kr]}function an(cr,xr,kr,fi,Ti){var ve=en();ve.stats=ve.link(Ti),Object.keys(xr.static).forEach(function(Ce){_s(ve,xr,Ce)}),rr.forEach(function(Ce){_s(ve,cr,Ce)});var be=zc(cr,xr,kr,fi,ve);return be.shader.program&&(be.shader.program.attributes.sort(function(Ce,He){return Ce.name<He.name?-1:1}),be.shader.program.uniforms.sort(function(Ce,He){return Ce.name<He.name?-1:1})),Bs(ve,be),sn(ve,be),di(ve,be),t(ve.compile(),{destroy:function(){be.shader.program.destroy()}})}return{next:bn,current:wa,procs:(function(){var cr=en(),xr=cr.proc("poll"),kr=cr.proc("refresh"),fi=cr.block();xr(fi),kr(fi);var Ti=cr.shared,ve=Ti.gl,be=Ti.next,Ce=Ti.current;fi(Ce,".dirty=false;"),Il(cr,xr),Il(cr,kr,null,!0);var He;la&&(He=cr.link(la)),_r.oes_vertex_array_object&&kr(cr.link(_r.oes_vertex_array_object),".bindVertexArrayOES(null);");var Xe=kr.def(Ti.attributes),it=kr.def(0),Dt=cr.cond(it,".buffer");Dt.then(ve,".enableVertexAttribArray(i);",ve,".bindBuffer(",pr,",",it,".buffer.buffer);",ve,".vertexAttribPointer(i,",it,".size,",it,".type,",it,".normalized,",it,".stride,",it,".offset);").else(ve,".disableVertexAttribArray(i);",ve,".vertexAttrib4f(i,",it,".x,",it,".y,",it,".z,",it,".w);",it,".buffer=null;");var or=cr.link(Kr.maxAttributes,{stable:!0});return kr("for(var i=0;i<",or,";++i){",it,"=",Xe,"[i];",Dt,"}"),la&&kr("for(var i=0;i<",or,";++i){",He,".vertexAttribDivisorANGLE(i,",Xe,"[i].divisor);","}"),kr(cr.shared.vao,".currentVAO=null;",cr.shared.vao,".setVAO(",cr.shared.vao,".targetVAO);"),Object.keys(Ii).forEach(function(Dr){var vi=Ii[Dr],ai=fi.def(be,".",Dr),ei=cr.block();ei("if(",ai,"){",ve,".enable(",vi,")}else{",ve,".disable(",vi,")}",Ce,".",Dr,"=",ai,";"),kr(ei),xr("if(",ai,"!==",Ce,".",Dr,"){",ei,"}")}),Object.keys(Va).forEach(function(Dr){var vi=Va[Dr],ai=wa[Dr],ei,Oi,Si=cr.block();if(Si(ve,".",vi,"("),Zt(ai)){var zi=ai.length;ei=cr.global.def(be,".",Dr),Oi=cr.global.def(Ce,".",Dr),Si(A(zi,function(Vi){return ei+"["+Vi+"]"}),");",A(zi,function(Vi){return Oi+"["+Vi+"]="+ei+"["+Vi+"];"}).join("")),xr("if(",A(zi,function(Vi){return ei+"["+Vi+"]!=="+Oi+"["+Vi+"]"}).join("||"),"){",Si,"}")}else ei=fi.def(be,".",Dr),Oi=fi.def(Ce,".",Dr),Si(ei,");",Ce,".",Dr,"=",ei,";"),xr("if(",ei,"!==",Oi,"){",Si,"}");kr(Si)}),cr.compile()})(),compile:an}}function Fa(){return{vaoCount:0,bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0}}var Nn=34918,ka=34919,Sn=35007,ko=function(bt,dr){if(!dr.ext_disjoint_timer_query)return null;var _r=[];function Kr(){return _r.pop()||dr.ext_disjoint_timer_query.createQueryEXT()}function ci(Yi){_r.push(Yi)}var yi=[];function si(Yi){var la=Kr();dr.ext_disjoint_timer_query.beginQueryEXT(Sn,la),yi.push(la),xa(yi.length-1,yi.length,Yi)}function Ni(){dr.ext_disjoint_timer_query.endQueryEXT(Sn)}function Ji(){this.startQueryIndex=-1,this.endQueryIndex=-1,this.sum=0,this.stats=null}var Qi=[];function ra(){return Qi.pop()||new Ji}function mn(Yi){Qi.push(Yi)}var Wa=[];function xa(Yi,la,Ui){var Da=ra();Da.startQueryIndex=Yi,Da.endQueryIndex=la,Da.sum=0,Da.stats=Ui,Wa.push(Da)}var Pi=[],Hr=[];function Ei(){var Yi,la,Ui=yi.length;if(Ui!==0){Hr.length=Math.max(Hr.length,Ui+1),Pi.length=Math.max(Pi.length,Ui+1),Pi[0]=0,Hr[0]=0;var Da=0;for(Yi=0,la=0;la<yi.length;++la){var wa=yi[la];dr.ext_disjoint_timer_query.getQueryObjectEXT(wa,ka)?(Da+=dr.ext_disjoint_timer_query.getQueryObjectEXT(wa,Nn),ci(wa)):yi[Yi++]=wa,Pi[la+1]=Da,Hr[la+1]=Yi}for(yi.length=Yi,Yi=0,la=0;la<Wa.length;++la){var bn=Wa[la],ji=bn.startQueryIndex,Ii=bn.endQueryIndex;bn.sum+=Pi[Ii]-Pi[ji];var Va=Hr[ji],_a=Hr[Ii];_a===Va?(bn.stats.gpuTime+=bn.sum/1e6,mn(bn)):(bn.startQueryIndex=Va,bn.endQueryIndex=_a,Wa[Yi++]=bn)}Wa.length=Yi}}return{beginQuery:si,endQuery:Ni,pushScopeStats:xa,update:Ei,getNumPendingQueries:function(){return yi.length},clear:function(){_r.push.apply(_r,yi);for(var Yi=0;Yi<_r.length;Yi++)dr.ext_disjoint_timer_query.deleteQueryEXT(_r[Yi]);yi.length=0,_r.length=0},restore:function(){yi.length=0,_r.length=0}}},Vs=16384,Ho=256,fa=1024,jn=34962,Gn="webglcontextlost",Po="webglcontextrestored",As=1,Qs=2,Tl=3;function Fl(bt,dr){for(var _r=0;_r<bt.length;++_r)if(bt[_r]===dr)return _r;return-1}function su(bt){var dr=w(bt);if(!dr)return null;var _r=dr.gl,Kr=_r.getContextAttributes(),ci=_r.isContextLost(),yi=k(_r,dr);if(!yi)return null;var si=y(),Ni=Fa(),Ji=dr.cachedCode||{},Qi=yi.extensions,ra=ko(_r,Qi),mn=m(),Wa=_r.drawingBufferWidth,xa=_r.drawingBufferHeight,Pi={tick:0,time:0,viewportWidth:Wa,viewportHeight:xa,framebufferWidth:Wa,framebufferHeight:xa,drawingBufferWidth:Wa,drawingBufferHeight:xa,pixelRatio:dr.pixelRatio},Hr={},Ei={elements:null,primitive:4,count:-1,offset:0,instances:-1},Yi=Pt(_r,Qi),la=Qr(_r,Ni,dr,wa),Ui=tt(_r,Qi,la,Ni),Da=wf(_r,Qi,Yi,Ni,la,Ui,Ei);function wa(Zn){return Da.destroyBuffer(Zn)}var bn=Zc(_r,si,Ni,dr),ji=qf(_r,Qi,Yi,function(){_a.procs.poll()},Pi,Ni,dr),Ii=kc(_r,Qi,Yi,Ni,dr),Va=bf(_r,Qi,Yi,ji,Ii,Ni),_a=qa(_r,si,Qi,Yi,la,Ui,ji,Va,Hr,Da,bn,Ei,Pi,ra,Ji,dr),ca=Ch(_r,Va,_a.procs.poll,Pi,Kr,Qi,Yi),va=_a.next,Ga=_r.canvas,wn=[],Hn=[],Ca=[],en=[dr.onDestroy],Un=null;function qn(){if(wn.length===0){ra&&ra.update(),Un=null;return}Un=g.next(qn),Yl();for(var Zn=wn.length-1;Zn>=0;--Zn){var Bo=wn[Zn];Bo&&Bo(Pi,null,0)}_r.flush(),ra&&ra.update()}function yo(){!Un&&wn.length>0&&(Un=g.next(qn))}function Gs(){Un&&(g.cancel(qn),Un=null)}function Wl(Zn){Zn.preventDefault(),ci=!0,Gs(),Hn.forEach(function(Bo){Bo()})}function Co(Zn){_r.getError(),ci=!1,yi.restore(),bn.restore(),la.restore(),ji.restore(),Ii.restore(),Va.restore(),Da.restore(),ra&&ra.restore(),_a.procs.refresh(),yo(),Ca.forEach(function(Bo){Bo()})}Ga&&(Ga.addEventListener(Gn,Wl,!1),Ga.addEventListener(Po,Co,!1));function Rc(){wn.length=0,Gs(),Ga&&(Ga.removeEventListener(Gn,Wl),Ga.removeEventListener(Po,Co)),bn.clear(),Va.clear(),Ii.clear(),Da.clear(),ji.clear(),Ui.clear(),la.clear(),ra&&ra.clear(),en.forEach(function(Zn){Zn()})}function ys(Zn){function Bo(ve){var be=t({},ve);delete be.uniforms,delete be.attributes,delete be.context,delete be.vao,"stencil"in be&&be.stencil.op&&(be.stencil.opBack=be.stencil.opFront=be.stencil.op,delete be.stencil.op);function Ce(He){if(He in be){var Xe=be[He];delete be[He],Object.keys(Xe).forEach(function(it){be[He+"."+it]=Xe[it]})}}return Ce("blend"),Ce("depth"),Ce("cull"),Ce("stencil"),Ce("polygonOffset"),Ce("scissor"),Ce("sample"),"vao"in ve&&(be.vao=ve.vao),be}function Bs(ve,be){var Ce={},He={};return Object.keys(ve).forEach(function(Xe){var it=ve[Xe];if(p.isDynamic(it)){He[Xe]=p.unbox(it,Xe);return}else if(be&&Array.isArray(it)){for(var Dt=0;Dt<it.length;++Dt)if(p.isDynamic(it[Dt])){He[Xe]=p.unbox(it,Xe);return}}Ce[Xe]=it}),{dynamic:He,static:Ce}}var gr=Bs(Zn.context||{},!0),hi=Bs(Zn.uniforms||{},!0),di=Bs(Zn.attributes||{},!1),sn=Bs(Bo(Zn),!1),Io={gpuTime:0,cpuTime:0,count:0},_s=_a.compile(sn,di,hi,gr,Io),an=_s.draw,cr=_s.batch,xr=_s.scope,kr=[];function fi(ve){for(;kr.length<ve;)kr.push(null);return kr}function Ti(ve,be){var Ce;if(typeof ve=="function")return xr.call(this,null,ve,0);if(typeof be=="function")if(typeof ve=="number")for(Ce=0;Ce<ve;++Ce)xr.call(this,null,be,Ce);else if(Array.isArray(ve))for(Ce=0;Ce<ve.length;++Ce)xr.call(this,ve[Ce],be,Ce);else return xr.call(this,ve,be,0);else if(typeof ve=="number"){if(ve>0)return cr.call(this,fi(ve|0),ve|0)}else if(Array.isArray(ve)){if(ve.length)return cr.call(this,ve,ve.length)}else return an.call(this,ve)}return t(Ti,{stats:Io,destroy:function(){_s.destroy()}})}var Hu=Va.setFBO=ys({framebuffer:p.define.call(null,As,"framebuffer")});function lc(Zn,Bo){var Bs=0;_a.procs.poll();var gr=Bo.color;gr&&(_r.clearColor(+gr[0]||0,+gr[1]||0,+gr[2]||0,+gr[3]||0),Bs|=Vs),"depth"in Bo&&(_r.clearDepth(+Bo.depth),Bs|=Ho),"stencil"in Bo&&(_r.clearStencil(Bo.stencil|0),Bs|=fa),_r.clear(Bs)}function zc(Zn){if("framebuffer"in Zn)if(Zn.framebuffer&&Zn.framebuffer_reglType==="framebufferCube")for(var Bo=0;Bo<6;++Bo)Hu(t({framebuffer:Zn.framebuffer.faces[Bo]},Zn),lc);else Hu(Zn,lc);else lc(null,Zn)}function Pl(Zn){wn.push(Zn);function Bo(){var Bs=Fl(wn,Zn);function gr(){var hi=Fl(wn,gr);wn[hi]=wn[wn.length-1],wn.length-=1,wn.length<=0&&Gs()}wn[Bs]=gr}return yo(),{cancel:Bo}}function Il(){var Zn=va.viewport,Bo=va.scissor_box;Zn[0]=Zn[1]=Bo[0]=Bo[1]=0,Pi.viewportWidth=Pi.framebufferWidth=Pi.drawingBufferWidth=Zn[2]=Bo[2]=_r.drawingBufferWidth,Pi.viewportHeight=Pi.framebufferHeight=Pi.drawingBufferHeight=Zn[3]=Bo[3]=_r.drawingBufferHeight}function Yl(){Pi.tick+=1,Pi.time=lu(),Il(),_a.procs.poll()}function oo(){ji.refresh(),Il(),_a.procs.refresh(),ra&&ra.update()}function lu(){return(m()-mn)/1e3}oo();function Ms(Zn,Bo){var Bs;switch(Zn){case"frame":return Pl(Bo);case"lost":Bs=Hn;break;case"restore":Bs=Ca;break;case"destroy":Bs=en;break;default:}return Bs.push(Bo),{cancel:function(){for(var gr=0;gr<Bs.length;++gr)if(Bs[gr]===Bo){Bs[gr]=Bs[Bs.length-1],Bs.pop();return}}}}function uc(){return Ji}function Bc(Zn){Object.entries(Zn).forEach(function(Bo){Ji[Bo[0]]=Bo[1]})}var Oc=t(ys,{clear:zc,prop:p.define.bind(null,As),context:p.define.bind(null,Qs),this:p.define.bind(null,Tl),draw:ys({}),buffer:function(Zn){return la.create(Zn,jn,!1,!1)},elements:function(Zn){return Ui.create(Zn,!1)},texture:ji.create2D,cube:ji.createCube,renderbuffer:Ii.create,framebuffer:Va.create,framebufferCube:Va.createCube,vao:Da.createVAO,attributes:Kr,frame:Pl,on:Ms,limits:Yi,hasExtension:function(Zn){return Yi.extensions.indexOf(Zn.toLowerCase())>=0},read:ca,destroy:Rc,_gl:_r,_refresh:oo,poll:function(){Yl(),ra&&ra.update()},now:lu,stats:Ni,getCachedCode:uc,preloadCachedCode:Bc});return dr.onDone(null,Oc),Oc}return su}))}}),IZ=de({"node_modules/gl-util/context.js"(e,r){"use strict";var t=rp();r.exports=function(u){if(u?typeof u=="string"&&(u={container:u}):u={},a(u)?u={container:u}:o(u)?u={container:u}:s(u)?u={gl:u}:u=t(u,{container:"container target element el canvas holder parent parentNode wrapper use ref root node",gl:"gl context webgl glContext",attrs:"attributes attrs contextAttributes",pixelRatio:"pixelRatio pxRatio px ratio pxratio pixelratio",width:"w width",height:"h height"},!0),u.pixelRatio||(u.pixelRatio=window.pixelRatio||1),u.gl)return u.gl;if(u.canvas&&(u.container=u.canvas.parentNode),u.container){if(typeof u.container=="string"){var c=document.querySelector(u.container);if(!c)throw Error("Element "+u.container+" is not found");u.container=c}a(u.container)?(u.canvas=u.container,u.container=u.canvas.parentNode):u.canvas||(u.canvas=l(),u.container.appendChild(u.canvas),i(u))}else if(!u.canvas)if(typeof document<"u")u.container=document.body||document.documentElement,u.canvas=l(),u.container.appendChild(u.canvas),i(u);else throw Error("Not DOM environment. Use headless-gl.");return u.gl||["webgl","experimental-webgl","webgl-experimental"].some(function(f){try{u.gl=u.canvas.getContext(f,u.attrs)}catch{}return u.gl}),u.gl};function i(n){if(n.container)if(n.container==document.body)document.body.style.width||(n.canvas.width=n.width||n.pixelRatio*window.innerWidth),document.body.style.height||(n.canvas.height=n.height||n.pixelRatio*window.innerHeight);else{var u=n.container.getBoundingClientRect();n.canvas.width=n.width||u.right-u.left,n.canvas.height=n.height||u.bottom-u.top}}function a(n){return typeof n.getContext=="function"&&"width"in n&&"height"in n}function o(n){return typeof n.nodeName=="string"&&typeof n.appendChild=="function"&&typeof n.getBoundingClientRect=="function"}function s(n){return typeof n.drawArrays=="function"||typeof n.drawElements=="function"}function l(){var n=document.createElement("canvas");return n.style.position="absolute",n.style.top=0,n.style.left=0,n}}}),RZ=de({"node_modules/font-atlas/index.js"(e,r){"use strict";var t=$7(),i=[32,126];r.exports=a;function a(o){o=o||{};var s=o.shape?o.shape:o.canvas?[o.canvas.width,o.canvas.height]:[512,512],l=o.canvas||document.createElement("canvas"),n=o.font,u=typeof o.step=="number"?[o.step,o.step]:o.step||[32,32],c=o.chars||i;if(n&&typeof n!="string"&&(n=t(n)),!Array.isArray(c))c=String(c).split("");else if(c.length===2&&typeof c[0]=="number"&&typeof c[1]=="number"){for(var f=[],h=c[0],d=0;h<=c[1];h++)f[d++]=String.fromCharCode(h);c=f}s=s.slice(),l.width=s[0],l.height=s[1];var p=l.getContext("2d");p.fillStyle="#000",p.fillRect(0,0,l.width,l.height),p.font=n,p.textAlign="center",p.textBaseline="middle",p.fillStyle="#fff";for(var g=u[0]/2,m=u[1]/2,h=0;h<c.length;h++)p.fillText(c[h],g,m),(g+=u[0])>s[0]-u[0]/2&&(g=u[0]/2,m+=u[1]);return l}}}),Y7=de({"node_modules/bit-twiddle/twiddle.js"(e){"use strict";"use restrict";var r=32;e.INT_BITS=r,e.INT_MAX=2147483647,e.INT_MIN=-1<<r-1,e.sign=function(a){return(a>0)-(a<0)},e.abs=function(a){var o=a>>r-1;return(a^o)-o},e.min=function(a,o){return o^(a^o)&-(a<o)},e.max=function(a,o){return a^(a^o)&-(a<o)},e.isPow2=function(a){return!(a&a-1)&&!!a},e.log2=function(a){var o,s;return o=(a>65535)<<4,a>>>=o,s=(a>255)<<3,a>>>=s,o|=s,s=(a>15)<<2,a>>>=s,o|=s,s=(a>3)<<1,a>>>=s,o|=s,o|a>>1},e.log10=function(a){return a>=1e9?9:a>=1e8?8:a>=1e7?7:a>=1e6?6:a>=1e5?5:a>=1e4?4:a>=1e3?3:a>=100?2:a>=10?1:0},e.popCount=function(a){return a=a-(a>>>1&1431655765),a=(a&858993459)+(a>>>2&858993459),(a+(a>>>4)&252645135)*16843009>>>24};function t(a){var o=32;return a&=-a,a&&o--,a&65535&&(o-=16),a&16711935&&(o-=8),a&252645135&&(o-=4),a&858993459&&(o-=2),a&1431655765&&(o-=1),o}e.countTrailingZeros=t,e.nextPow2=function(a){return a+=a===0,--a,a|=a>>>1,a|=a>>>2,a|=a>>>4,a|=a>>>8,a|=a>>>16,a+1},e.prevPow2=function(a){return a|=a>>>1,a|=a>>>2,a|=a>>>4,a|=a>>>8,a|=a>>>16,a-(a>>>1)},e.parity=function(a){return a^=a>>>16,a^=a>>>8,a^=a>>>4,a&=15,27030>>>a&1};var i=new Array(256);(function(a){for(var o=0;o<256;++o){var s=o,l=o,n=7;for(s>>>=1;s;s>>>=1)l<<=1,l|=s&1,--n;a[o]=l<<n&255}})(i),e.reverse=function(a){return i[a&255]<<24|i[a>>>8&255]<<16|i[a>>>16&255]<<8|i[a>>>24&255]},e.interleave2=function(a,o){return a&=65535,a=(a|a<<8)&16711935,a=(a|a<<4)&252645135,a=(a|a<<2)&858993459,a=(a|a<<1)&1431655765,o&=65535,o=(o|o<<8)&16711935,o=(o|o<<4)&252645135,o=(o|o<<2)&858993459,o=(o|o<<1)&1431655765,a|o<<1},e.deinterleave2=function(a,o){return a=a>>>o&1431655765,a=(a|a>>>1)&858993459,a=(a|a>>>2)&252645135,a=(a|a>>>4)&16711935,a=(a|a>>>16)&65535,a<<16>>16},e.interleave3=function(a,o,s){return a&=1023,a=(a|a<<16)&4278190335,a=(a|a<<8)&251719695,a=(a|a<<4)&3272356035,a=(a|a<<2)&1227133513,o&=1023,o=(o|o<<16)&4278190335,o=(o|o<<8)&251719695,o=(o|o<<4)&3272356035,o=(o|o<<2)&1227133513,a|=o<<1,s&=1023,s=(s|s<<16)&4278190335,s=(s|s<<8)&251719695,s=(s|s<<4)&3272356035,s=(s|s<<2)&1227133513,a|s<<2},e.deinterleave3=function(a,o){return a=a>>>o&1227133513,a=(a|a>>>2)&3272356035,a=(a|a>>>4)&251719695,a=(a|a>>>8)&4278190335,a=(a|a>>>16)&1023,a<<22>>22},e.nextCombination=function(a){var o=a|a-1;return o+1|(~o&-~o)-1>>>t(a)+1}}}),zZ=de({"node_modules/dup/dup.js"(e,r){"use strict";function t(o,s,l){var n=o[l]|0;if(n<=0)return[];var u=new Array(n),c;if(l===o.length-1)for(c=0;c<n;++c)u[c]=s;else for(c=0;c<n;++c)u[c]=t(o,s,l+1);return u}function i(o,s){var l,n;for(l=new Array(o),n=0;n<o;++n)l[n]=s;return l}function a(o,s){switch(typeof s>"u"&&(s=0),typeof o){case"number":if(o>0)return i(o|0,s);break;case"object":if(typeof o.length=="number")return t(o,s,0);break}return[]}r.exports=a}}),BZ=de({"node_modules/typedarray-pool/pool.js"(e){"use strict";var r=Y7(),t=zZ(),i=kv().Buffer;window.__TYPEDARRAY_POOL||(window.__TYPEDARRAY_POOL={UINT8:t([32,0]),UINT16:t([32,0]),UINT32:t([32,0]),BIGUINT64:t([32,0]),INT8:t([32,0]),INT16:t([32,0]),INT32:t([32,0]),BIGINT64:t([32,0]),FLOAT:t([32,0]),DOUBLE:t([32,0]),DATA:t([32,0]),UINT8C:t([32,0]),BUFFER:t([32,0])});var a=typeof Uint8ClampedArray<"u",o=typeof BigUint64Array<"u",s=typeof BigInt64Array<"u",l=window.__TYPEDARRAY_POOL;l.UINT8C||(l.UINT8C=t([32,0])),l.BIGUINT64||(l.BIGUINT64=t([32,0])),l.BIGINT64||(l.BIGINT64=t([32,0])),l.BUFFER||(l.BUFFER=t([32,0]));var n=l.DATA,u=l.BUFFER;e.free=function(b){if(i.isBuffer(b))u[r.log2(b.length)].push(b);else{if(Object.prototype.toString.call(b)!=="[object ArrayBuffer]"&&(b=b.buffer),!b)return;var E=b.length||b.byteLength,T=r.log2(E)|0;n[T].push(b)}};function c(A){if(A){var b=A.length||A.byteLength,E=r.log2(b);n[E].push(A)}}function f(A){c(A.buffer)}e.freeUint8=e.freeUint16=e.freeUint32=e.freeBigUint64=e.freeInt8=e.freeInt16=e.freeInt32=e.freeBigInt64=e.freeFloat32=e.freeFloat=e.freeFloat64=e.freeDouble=e.freeUint8Clamped=e.freeDataView=f,e.freeArrayBuffer=c,e.freeBuffer=function(b){u[r.log2(b.length)].push(b)},e.malloc=function(b,E){if(E===void 0||E==="arraybuffer")return h(b);switch(E){case"uint8":return d(b);case"uint16":return p(b);case"uint32":return g(b);case"int8":return m(b);case"int16":return y(b);case"int32":return _(b);case"float":case"float32":return v(b);case"double":case"float64":return x(b);case"uint8_clamped":return S(b);case"bigint64":return C(b);case"biguint64":return M(b);case"buffer":return k(b);case"data":case"dataview":return w(b);default:return null}return null};function h(b){var b=r.nextPow2(b),E=r.log2(b),T=n[E];return T.length>0?T.pop():new ArrayBuffer(b)}e.mallocArrayBuffer=h;function d(A){return new Uint8Array(h(A),0,A)}e.mallocUint8=d;function p(A){return new Uint16Array(h(2*A),0,A)}e.mallocUint16=p;function g(A){return new Uint32Array(h(4*A),0,A)}e.mallocUint32=g;function m(A){return new Int8Array(h(A),0,A)}e.mallocInt8=m;function y(A){return new Int16Array(h(2*A),0,A)}e.mallocInt16=y;function _(A){return new Int32Array(h(4*A),0,A)}e.mallocInt32=_;function v(A){return new Float32Array(h(4*A),0,A)}e.mallocFloat32=e.mallocFloat=v;function x(A){return new Float64Array(h(8*A),0,A)}e.mallocFloat64=e.mallocDouble=x;function S(A){return a?new Uint8ClampedArray(h(A),0,A):d(A)}e.mallocUint8Clamped=S;function M(A){return o?new BigUint64Array(h(8*A),0,A):null}e.mallocBigUint64=M;function C(A){return s?new BigInt64Array(h(8*A),0,A):null}e.mallocBigInt64=C;function w(A){return new DataView(h(A),0,A)}e.mallocDataView=w;function k(A){A=r.nextPow2(A);var b=r.log2(A),E=u[b];return E.length>0?E.pop():new i(A)}e.mallocBuffer=k,e.clearCache=function(){for(var b=0;b<32;++b)l.UINT8[b].length=0,l.UINT16[b].length=0,l.UINT32[b].length=0,l.INT8[b].length=0,l.INT16[b].length=0,l.INT32[b].length=0,l.FLOAT[b].length=0,l.DOUBLE[b].length=0,l.BIGUINT64[b].length=0,l.BIGINT64[b].length=0,l.UINT8C[b].length=0,n[b].length=0,u[b].length=0}}}),OZ=de({"node_modules/is-plain-obj/index.js"(e,r){"use strict";var t=Object.prototype.toString;r.exports=function(i){var a;return t.call(i)==="[object Object]"&&(a=Object.getPrototypeOf(i),a===null||a===Object.getPrototypeOf({}))}}}),X7=de({"node_modules/parse-unit/index.js"(e,r){r.exports=function(i,a){a||(a=[0,""]),i=String(i);var o=parseFloat(i,10);return a[0]=o,a[1]=i.match(/[\d.\-\+]*\s*(.*)/)[1]||"",a}}}),NZ=de({"node_modules/gl-text/node_modules/to-px/topx.js"(e,r){"use strict";var t=X7();r.exports=s;var i=96;function a(l,n){var u=t(getComputedStyle(l).getPropertyValue(n));return u[0]*s(u[1],l)}function o(l,n){var u=document.createElement("div");u.style["font-size"]="128"+l,n.appendChild(u);var c=a(u,"font-size")/128;return n.removeChild(u),c}function s(l,n){switch(n=n||document.body,l=(l||"px").trim().toLowerCase(),(n===window||n===document)&&(n=document.body),l){case"%":return n.clientHeight/100;case"ch":case"ex":return o(l,n);case"em":return a(n,"font-size");case"rem":return a(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return i;case"cm":return i/2.54;case"mm":return i/25.4;case"pt":return i/72;case"pc":return i/6}return 1}}}),jZ=de({"node_modules/detect-kerning/index.js"(e,r){"use strict";r.exports=o;var t=o.canvas=document.createElement("canvas"),i=t.getContext("2d"),a=s([32,126]);o.createPairs=s,o.ascii=a;function o(l,n){Array.isArray(l)&&(l=l.join(", "));var u={},c,f=16,h=.05;n&&(n.length===2&&typeof n[0]=="number"?c=s(n):Array.isArray(n)?c=n:(n.o?c=s(n.o):n.pairs&&(c=n.pairs),n.fontSize&&(f=n.fontSize),n.threshold!=null&&(h=n.threshold))),c||(c=a),i.font=f+"px "+l;for(var d=0;d<c.length;d++){var p=c[d],g=i.measureText(p[0]).width+i.measureText(p[1]).width,m=i.measureText(p).width;if(Math.abs(g-m)>f*h){var y=(m-g)/f;u[p]=y*1e3}}return u}function s(l){for(var n=[],u=l[0];u<=l[1];u++)for(var c=String.fromCharCode(u),f=l[0];f<l[1];f++){var h=String.fromCharCode(f),d=c+h;n.push(d)}return n}}}),UZ=de({"node_modules/font-measure/index.js"(e,r){"use strict";r.exports=t,t.canvas=document.createElement("canvas"),t.cache={};function t(h,l){l||(l={}),(typeof h=="string"||Array.isArray(h))&&(l.family=h);var n=Array.isArray(l.family)?l.family.join(", "):l.family;if(!n)throw Error("`family` must be defined");var u=l.size||l.fontSize||l.em||48,c=l.weight||l.fontWeight||"",f=l.style||l.fontStyle||"",h=[f,c,u].join(" ")+"px "+n,d=l.origin||"top";if(t.cache[n]&&u<=t.cache[n].em)return i(t.cache[n],d);var p=l.canvas||t.canvas,g=p.getContext("2d"),m={upper:l.upper!==void 0?l.upper:"H",lower:l.lower!==void 0?l.lower:"x",descent:l.descent!==void 0?l.descent:"p",ascent:l.ascent!==void 0?l.ascent:"h",tittle:l.tittle!==void 0?l.tittle:"i",overshoot:l.overshoot!==void 0?l.overshoot:"O"},y=Math.ceil(u*1.5);p.height=y,p.width=y*.5,g.font=h;var _="H",v={top:0};g.clearRect(0,0,y,y),g.textBaseline="top",g.fillStyle="black",g.fillText(_,0,0);var x=a(g.getImageData(0,0,y,y));g.clearRect(0,0,y,y),g.textBaseline="bottom",g.fillText(_,0,y);var S=a(g.getImageData(0,0,y,y));v.lineHeight=v.bottom=y-S+x,g.clearRect(0,0,y,y),g.textBaseline="alphabetic",g.fillText(_,0,y);var M=a(g.getImageData(0,0,y,y)),C=y-M-1+x;v.baseline=v.alphabetic=C,g.clearRect(0,0,y,y),g.textBaseline="middle",g.fillText(_,0,y*.5);var w=a(g.getImageData(0,0,y,y));v.median=v.middle=y-w-1+x-y*.5,g.clearRect(0,0,y,y),g.textBaseline="hanging",g.fillText(_,0,y*.5);var k=a(g.getImageData(0,0,y,y));v.hanging=y-k-1+x-y*.5,g.clearRect(0,0,y,y),g.textBaseline="ideographic",g.fillText(_,0,y);var A=a(g.getImageData(0,0,y,y));if(v.ideographic=y-A-1+x,m.upper&&(g.clearRect(0,0,y,y),g.textBaseline="top",g.fillText(m.upper,0,0),v.upper=a(g.getImageData(0,0,y,y)),v.capHeight=v.baseline-v.upper),m.lower&&(g.clearRect(0,0,y,y),g.textBaseline="top",g.fillText(m.lower,0,0),v.lower=a(g.getImageData(0,0,y,y)),v.xHeight=v.baseline-v.lower),m.tittle&&(g.clearRect(0,0,y,y),g.textBaseline="top",g.fillText(m.tittle,0,0),v.tittle=a(g.getImageData(0,0,y,y))),m.ascent&&(g.clearRect(0,0,y,y),g.textBaseline="top",g.fillText(m.ascent,0,0),v.ascent=a(g.getImageData(0,0,y,y))),m.descent&&(g.clearRect(0,0,y,y),g.textBaseline="top",g.fillText(m.descent,0,0),v.descent=o(g.getImageData(0,0,y,y))),m.overshoot){g.clearRect(0,0,y,y),g.textBaseline="top",g.fillText(m.overshoot,0,0);var b=o(g.getImageData(0,0,y,y));v.overshoot=b-C}for(var E in v)v[E]/=u;return v.em=u,t.cache[n]=v,i(v,d)}function i(s,l){var n={};typeof l=="string"&&(l=s[l]);for(var u in s)u!=="em"&&(n[u]=s[u]-l);return n}function a(s){for(var l=s.height,n=s.data,u=3;u<n.length;u+=4)if(n[u]!==0)return Math.floor((u-3)*.25/l)}function o(s){for(var l=s.height,n=s.data,u=n.length-1;u>0;u-=4)if(n[u]!==0)return Math.floor((u-3)*.25/l)}}}),qZ=de({"node_modules/gl-text/dist.js"(e,r){"use strict";var t=PZ(),i=rp(),a=W7(),o=IZ(),s=O7(),l=b_(),n=RZ(),u=BZ(),c=z1(),f=OZ(),h=X7(),d=NZ(),p=jZ(),g=du(),m=UZ(),y=Vv(),_=Y7(),v=_.nextPow2,x=new s,S=!1;document.body&&(M=document.body.appendChild(document.createElement("div")),M.style.font="italic small-caps bold condensed 16px/2 cursive",getComputedStyle(M).fontStretch&&(S=!0),document.body.removeChild(M));var M,C=function(A){w(A)?(A={regl:A},this.gl=A.regl._gl):this.gl=o(A),this.shader=x.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=A.regl||a({gl:this.gl}),this.charBuffer=this.regl.buffer({type:"uint8",usage:"stream"}),this.sizeBuffer=this.regl.buffer({type:"float",usage:"stream"}),this.shader||(this.shader=this.createShader(),x.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(f(A)?A:{})};C.prototype.createShader=function(){var A=this.regl,b=A({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},stencil:{enable:!1},depth:{enable:!1},count:A.prop("count"),offset:A.prop("offset"),attributes:{charOffset:{offset:4,stride:8,buffer:A.this("sizeBuffer")},width:{offset:0,stride:8,buffer:A.this("sizeBuffer")},char:A.this("charBuffer"),position:A.this("position")},uniforms:{atlasSize:function(T,F){return[F.atlas.width,F.atlas.height]},atlasDim:function(T,F){return[F.atlas.cols,F.atlas.rows]},atlas:function(T,F){return F.atlas.texture},charStep:function(T,F){return F.atlas.step},em:function(T,F){return F.atlas.em},color:A.prop("color"),opacity:A.prop("opacity"),viewport:A.this("viewportArray"),scale:A.this("scale"),align:A.prop("align"),baseline:A.prop("baseline"),translate:A.this("translate"),positionOffset:A.prop("positionOffset")},primitive:"points",viewport:A.this("viewport"),vert:`
+			precision highp float;
+			attribute float width, charOffset, char;
+			attribute vec2 position;
+			uniform float fontSize, charStep, em, align, baseline;
+			uniform vec4 viewport;
+			uniform vec4 color;
+			uniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;
+			varying vec2 charCoord, charId;
+			varying float charWidth;
+			varying vec4 fontColor;
+			void main () {
+				vec2 offset = floor(em * (vec2(align + charOffset, baseline)
+					+ vec2(positionOffset.x, -positionOffset.y)))
+					/ (viewport.zw * scale.xy);
+
+				vec2 position = (position + translate) * scale;
+				position += offset * scale;
+
+				charCoord = position * viewport.zw + viewport.xy;
+
+				gl_Position = vec4(position * 2. - 1., 0, 1);
+
+				gl_PointSize = charStep;
+
+				charId.x = mod(char, atlasDim.x);
+				charId.y = floor(char / atlasDim.x);
+
+				charWidth = width * em;
+
+				fontColor = color / 255.;
+			}`,frag:`
+			precision highp float;
+			uniform float fontSize, charStep, opacity;
+			uniform vec2 atlasSize;
+			uniform vec4 viewport;
+			uniform sampler2D atlas;
+			varying vec4 fontColor;
+			varying vec2 charCoord, charId;
+			varying float charWidth;
+
+			float lightness(vec4 color) {
+				return color.r * 0.299 + color.g * 0.587 + color.b * 0.114;
+			}
+
+			void main () {
+				vec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;
+				float halfCharStep = floor(charStep * .5 + .5);
+
+				// invert y and shift by 1px (FF expecially needs that)
+				uv.y = charStep - uv.y;
+
+				// ignore points outside of character bounding box
+				float halfCharWidth = ceil(charWidth * .5);
+				if (floor(uv.x) > halfCharStep + halfCharWidth ||
+					floor(uv.x) < halfCharStep - halfCharWidth) return;
+
+				uv += charId * charStep;
+				uv = uv / atlasSize;
+
+				vec4 color = fontColor;
+				vec4 mask = texture2D(atlas, uv);
+
+				float maskY = lightness(mask);
+				// float colorY = lightness(color);
+				color.a *= maskY;
+				color.a *= opacity;
+
+				// color.a += .1;
+
+				// antialiasing, see yiq color space y-channel formula
+				// color.rgb += (1. - color.rgb) * (1. - mask.rgb);
+
+				gl_FragColor = color;
+			}`}),E={};return{regl:A,draw:b,atlas:E}},C.prototype.update=function(A){var b=this;if(typeof A=="string")A={text:A};else if(!A)return;A=i(A,{position:"position positions coord coords coordinates",font:"font fontFace fontface typeface cssFont css-font family fontFamily",fontSize:"fontSize fontsize size font-size",text:"text texts chars characters value values symbols",align:"align alignment textAlign textbaseline",baseline:"baseline textBaseline textbaseline",direction:"dir direction textDirection",color:"color colour fill fill-color fillColor textColor textcolor",kerning:"kerning kern",range:"range dataBox",viewport:"vp viewport viewBox viewbox viewPort",opacity:"opacity alpha transparency visible visibility opaque",offset:"offset positionOffset padding shift indent indentation"},!0),A.opacity!=null&&(Array.isArray(A.opacity)?this.opacity=A.opacity.map(function(Q){return parseFloat(Q)}):this.opacity=parseFloat(A.opacity)),A.viewport!=null&&(this.viewport=c(A.viewport),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),this.viewport==null&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),A.kerning!=null&&(this.kerning=A.kerning),A.offset!=null&&(typeof A.offset=="number"&&(A.offset=[A.offset,0]),this.positionOffset=y(A.offset)),A.direction&&(this.direction=A.direction),A.range&&(this.range=A.range,this.scale=[1/(A.range[2]-A.range[0]),1/(A.range[3]-A.range[1])],this.translate=[-A.range[0],-A.range[1]]),A.scale&&(this.scale=A.scale),A.translate&&(this.translate=A.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),!this.font.length&&!A.font&&(A.font=C.baseFontSize+"px sans-serif");var E=!1,T=!1;if(A.font&&(Array.isArray(A.font)?A.font:[A.font]).forEach(function(Q,ue){if(typeof Q=="string")try{Q=t.parse(Q)}catch{Q=t.parse(C.baseFontSize+"px "+Q)}else{var ge=Q.style,Me=Q.weight,Te=Q.stretch,je=Q.variant;Q=t.parse(t.stringify(Q)),ge&&(Q.style=ge),Me&&(Q.weight=Me),Te&&(Q.stretch=Te),je&&(Q.variant=je)}var Ve=t.stringify({size:C.baseFontSize,family:Q.family,stretch:S?Q.stretch:void 0,variant:Q.variant,weight:Q.weight,style:Q.style}),Ze=h(Q.size),Ke=Math.round(Ze[0]*d(Ze[1]));if(Ke!==b.fontSize[ue]&&(T=!0,b.fontSize[ue]=Ke),(!b.font[ue]||Ve!=b.font[ue].baseString)&&(E=!0,b.font[ue]=C.fonts[Ve],!b.font[ue])){var vt=Q.family.join(", "),xt=[Q.style];Q.style!=Q.variant&&xt.push(Q.variant),Q.variant!=Q.weight&&xt.push(Q.weight),S&&Q.weight!=Q.stretch&&xt.push(Q.stretch),b.font[ue]={baseString:Ve,family:vt,weight:Q.weight,stretch:Q.stretch,style:Q.style,variant:Q.variant,width:{},kerning:{},metrics:m(vt,{origin:"top",fontSize:C.baseFontSize,fontStyle:xt.join(" ")})},C.fonts[Ve]=b.font[ue]}}),(E||T)&&this.font.forEach(function(Q,ue){var ge=t.stringify({size:b.fontSize[ue],family:Q.family,stretch:S?Q.stretch:void 0,variant:Q.variant,weight:Q.weight,style:Q.style});if(b.fontAtlas[ue]=b.shader.atlas[ge],!b.fontAtlas[ue]){var Me=Q.metrics;b.shader.atlas[ge]=b.fontAtlas[ue]={fontString:ge,step:Math.ceil(b.fontSize[ue]*Me.bottom*.5)*2,em:b.fontSize[ue],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:b.regl.texture()}}A.text==null&&(A.text=b.text)}),typeof A.text=="string"&&A.position&&A.position.length>2){for(var F=Array(A.position.length*.5),D=0;D<F.length;D++)F[D]=A.text;A.text=F}var R;if(A.text!=null||E){if(this.textOffsets=[0],Array.isArray(A.text)){this.count=A.text[0].length,this.counts=[this.count];for(var P=1;P<A.text.length;P++)this.textOffsets[P]=this.textOffsets[P-1]+A.text[P-1].length,this.count+=A.text[P].length,this.counts.push(A.text[P].length);this.text=A.text.join("")}else this.text=A.text,this.count=this.text.length,this.counts=[this.count];R=[],this.font.forEach(function(Q,ue){C.atlasContext.font=Q.baseString;for(var ge=b.fontAtlas[ue],Me=0;Me<b.text.length;Me++){var Te=b.text.charAt(Me);if(ge.ids[Te]==null&&(ge.ids[Te]=ge.chars.length,ge.chars.push(Te),R.push(Te)),Q.width[Te]==null&&(Q.width[Te]=C.atlasContext.measureText(Te).width/C.baseFontSize,b.kerning)){var je=[];for(var Ve in Q.width)je.push(Ve+Te,Te+Ve);g(Q.kerning,p(Q.family,{pairs:je}))}}})}if(A.position)if(A.position.length>2){for(var z=!A.position[0].length,I=u.mallocFloat(this.count*2),L=0,B=0;L<this.counts.length;L++){var O=this.counts[L];if(z)for(var G=0;G<O;G++)I[B++]=A.position[L*2],I[B++]=A.position[L*2+1];else for(var W=0;W<O;W++)I[B++]=A.position[L][0],I[B++]=A.position[L][1]}this.position.call?this.position({type:"float",data:I}):this.position=this.regl.buffer({type:"float",data:I}),u.freeFloat(I)}else this.position.destroy&&this.position.destroy(),this.position={constant:A.position};if(A.text||E){var X=u.mallocUint8(this.count),Z=u.mallocFloat(this.count*2);this.textWidth=[];for(var J=0,N=0;J<this.counts.length;J++){for(var H=this.counts[J],$=this.font[J]||this.font[0],U=this.fontAtlas[J]||this.fontAtlas[0],V=0;V<H;V++){var j=this.text.charAt(N),q=this.text.charAt(N-1);if(X[N]=U.ids[j],Z[N*2]=$.width[j],V){var Y=Z[N*2-2],K=Z[N*2],te=Z[N*2-1],ne=te+Y*.5+K*.5;if(this.kerning){var se=$.kerning[q+j];se&&(ne+=se*.001)}Z[N*2+1]=ne}else Z[N*2+1]=Z[N*2]*.5;N++}this.textWidth.push(Z.length?Z[N*2-2]*.5+Z[N*2-1]:0)}A.align||(A.align=this.align),this.charBuffer({data:X,type:"uint8",usage:"stream"}),this.sizeBuffer({data:Z,type:"float",usage:"stream"}),u.freeUint8(X),u.freeFloat(Z),R.length&&this.font.forEach(function(Q,ue){var ge=b.fontAtlas[ue],Me=ge.step,Te=Math.floor(C.maxAtlasSize/Me),je=Math.min(Te,ge.chars.length),Ve=Math.ceil(ge.chars.length/je),Ze=v(je*Me),Ke=v(Ve*Me);ge.width=Ze,ge.height=Ke,ge.rows=Ve,ge.cols=je,ge.em&&ge.texture({data:n({canvas:C.atlasCanvas,font:ge.fontString,chars:ge.chars,shape:[Ze,Ke],step:[Me,Me]})})})}if(A.align&&(this.align=A.align,this.alignOffset=this.textWidth.map(function(Q,ue){var ge=Array.isArray(b.align)?b.align.length>1?b.align[ue]:b.align[0]:b.align;if(typeof ge=="number")return ge;switch(ge){case"right":case"end":return-Q;case"center":case"centre":case"middle":return-Q*.5}return 0})),this.baseline==null&&A.baseline==null&&(A.baseline=0),A.baseline!=null&&(this.baseline=A.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map(function(Q,ue){var ge=(b.font[ue]||b.font[0]).metrics,Me=0;return Me+=ge.bottom*.5,typeof Q=="number"?Me+=Q-ge.baseline:Me+=-ge[Q],Me*=-1,Me})),A.color!=null)if(A.color||(A.color="transparent"),typeof A.color=="string"||!isNaN(A.color))this.color=l(A.color,"uint8");else{var le;if(typeof A.color[0]=="number"&&A.color.length>this.counts.length){var ce=A.color.length;le=u.mallocUint8(ce);for(var pe=(A.color.subarray||A.color.slice).bind(A.color),xe=0;xe<ce;xe+=4)le.set(l(pe(xe,xe+4),"uint8"),xe)}else{var ye=A.color.length;le=u.mallocUint8(ye*4);for(var fe=0;fe<ye;fe++)le.set(l(A.color[fe]||0,"uint8"),fe*4)}this.color=le}if(A.position||A.text||A.color||A.baseline||A.align||A.font||A.offset||A.opacity){var ae=this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2;if(ae){var ee=Math.max(this.position.length*.5||0,this.color.length*.25||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,this.positionOffset.length*.5||0);this.batch=Array(ee);for(var ie=0;ie<this.batch.length;ie++)this.batch[ie]={count:this.counts.length>1?this.counts[ie]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[ie]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(ie*4,ie*4+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[ie]:this.opacity,baseline:this.baselineOffset[ie]!=null?this.baselineOffset[ie]:this.baselineOffset[0],align:this.align?this.alignOffset[ie]!=null?this.alignOffset[ie]:this.alignOffset[0]:0,atlas:this.fontAtlas[ie]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(ie*2,ie*2+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]}},C.prototype.destroy=function(){},C.prototype.kerning=!0,C.prototype.position={constant:new Float32Array(2)},C.prototype.translate=null,C.prototype.scale=null,C.prototype.font=null,C.prototype.text="",C.prototype.positionOffset=[0,0],C.prototype.opacity=1,C.prototype.color=new Uint8Array([0,0,0,255]),C.prototype.alignOffset=[0,0],C.maxAtlasSize=1024,C.atlasCanvas=document.createElement("canvas"),C.atlasContext=C.atlasCanvas.getContext("2d",{alpha:!1}),C.baseFontSize=64,C.fonts={};function w(k){return typeof k=="function"&&k._gl&&k.prop&&k.texture&&k.buffer}r.exports=C}}),P4=de({"src/lib/prepare_regl.js"(e,r){"use strict";var t=ZD(),i=W7();r.exports=function(o,s,l){var n=o._fullLayout,u=!0;return n._glcanvas.each(function(c){if(c.regl){c.regl.preloadCachedCode(l);return}if(!(c.pick&&!n._has("parcoords"))){try{c.regl=i({canvas:this,attributes:{antialias:!c.pick,preserveDrawingBuffer:!0},pixelRatio:o._context.plotGlPixelRatio||window.devicePixelRatio,extensions:s||[],cachedCode:l||{}})}catch{u=!1}c.regl||(u=!1),u&&this.addEventListener("webglcontextlost",function(f){o&&o.emit&&o.emit("plotly_webglcontextlost",{event:f,layer:c.key})},!1)}}),u||t({container:n._glcontainer.node()}),u}}}),Z7=de({"src/traces/scattergl/plot.js"(p,r){"use strict";var t=S7(),i=N7(),a=EZ(),o=qZ(),s=Qt(),l=Xd().selectMode,n=P4(),u=bs(),c=nk(),f=T7().styleTextSelection,h={};function d(g,m,y,_){var v=g._size,x=g.width*_,S=g.height*_,M=v.l*_,C=v.b*_,w=v.r*_,k=v.t*_,A=v.w*_,b=v.h*_;return[M+m.domain[0]*A,C+y.domain[0]*b,x-w-(1-m.domain[1])*A,S-k-(1-y.domain[1])*b]}var p=r.exports=function(m,y,_){if(_.length){var v=m._fullLayout,x=y._scene,S=y.xaxis,M=y.yaxis,C,w;if(x){var k=n(m,["ANGLE_instanced_arrays","OES_element_index_uint"],h);if(!k){x.init();return}var A=x.count,b=v._glcanvas.data()[0].regl;if(c(m,y,_),x.dirty){if((x.line2d||x.error2d)&&!(x.scatter2d||x.fill2d||x.glText)&&b.clear({color:!0,depth:!0}),x.error2d===!0&&(x.error2d=a(b)),x.line2d===!0&&(x.line2d=i(b)),x.scatter2d===!0&&(x.scatter2d=t(b)),x.fill2d===!0&&(x.fill2d=i(b)),x.glText===!0)for(x.glText=new Array(A),C=0;C<A;C++)x.glText[C]=new o(b);if(x.glText){if(A>x.glText.length){var E=A-x.glText.length;for(C=0;C<E;C++)x.glText.push(new o(b))}else if(A<x.glText.length){var T=x.glText.length-A,F=x.glText.splice(A,T);F.forEach(function(j){j.destroy()})}for(C=0;C<A;C++)x.glText[C].update(x.textOptions[C])}if(x.line2d&&(x.line2d.update(x.lineOptions),x.lineOptions=x.lineOptions.map(function(j){if(j&&j.positions){for(var q=j.positions,Y=0;Y<q.length&&(isNaN(q[Y])||isNaN(q[Y+1]));)Y+=2;for(var K=q.length-2;K>Y&&(isNaN(q[K])||isNaN(q[K+1]));)K-=2;j.positions=q.slice(Y,K+2)}return j}),x.line2d.update(x.lineOptions)),x.error2d){var D=(x.errorXOptions||[]).concat(x.errorYOptions||[]).map(function(j){return j||{positions:[],errors:[]}});x.error2d.update(D)}x.scatter2d&&x.scatter2d.update(x.markerOptions),x.fillOrder=s.repeat(null,A),x.fill2d&&(x.fillOptions=x.fillOptions.map(function(j,q){var Y=_[q];if(!(!j||!Y||!Y[0]||!Y[0].trace)){var K=Y[0],te=K.trace,ne=K.t,se=x.lineOptions[q],le,ce,pe=[];te._ownfill&&pe.push(q),te._nexttrace&&pe.push(q+1),pe.length&&(x.fillOrder[q]=pe);var xe=[],ye=se&&se.positions||ne.positions,fe,ae;if(te.fill==="tozeroy"){for(fe=0;fe<ye.length&&isNaN(ye[fe+1]);)fe+=2;for(ae=ye.length-2;ae>fe&&isNaN(ye[ae+1]);)ae-=2;ye[fe+1]!==0&&(xe=[ye[fe],0]),xe=xe.concat(ye.slice(fe,ae+2)),ye[ae+1]!==0&&(xe=xe.concat([ye[ae],0]))}else if(te.fill==="tozerox"){for(fe=0;fe<ye.length&&isNaN(ye[fe]);)fe+=2;for(ae=ye.length-2;ae>fe&&isNaN(ye[ae]);)ae-=2;ye[fe]!==0&&(xe=[0,ye[fe+1]]),xe=xe.concat(ye.slice(fe,ae+2)),ye[ae]!==0&&(xe=xe.concat([0,ye[ae+1]]))}else if(te.fill==="toself"||te.fill==="tonext"){for(xe=[],le=0,j.splitNull=!0,ce=0;ce<ye.length;ce+=2)(isNaN(ye[ce])||isNaN(ye[ce+1]))&&(xe=xe.concat(ye.slice(le,ce)),xe.push(ye[le],ye[le+1]),xe.push(null,null),le=ce+2);xe=xe.concat(ye.slice(le)),le&&xe.push(ye[le],ye[le+1])}else{var ee=te._nexttrace;if(ee){var ie=x.lineOptions[q+1];if(ie){var Q=ie.positions;if(te.fill==="tonexty"){for(xe=ye.slice(),q=Math.floor(Q.length/2);q--;){var ue=Q[q*2],ge=Q[q*2+1];isNaN(ue)||isNaN(ge)||xe.push(ue,ge)}j.fill=ee.fillcolor}}}}if(te._prevtrace&&te._prevtrace.fill==="tonext"){var Me=x.lineOptions[q-1].positions,Te=xe.length/2;le=Te;var je=[le];for(ce=0;ce<Me.length;ce+=2)(isNaN(Me[ce])||isNaN(Me[ce+1]))&&(je.push(ce/2+Te+1),le=ce+2);xe=xe.concat(Me),j.hole=je}return j.fillmode=te.fill,j.opacity=te.opacity,j.positions=xe,j}}),x.fill2d.update(x.fillOptions))}var R=v.dragmode,P=l(R),z=v.clickmode.indexOf("select")>-1;for(let[j]of _)if(j){var I=j.trace,L=j.t,B=L.index,O=I._length,G=L.x,W=L.y;if(I.selectedpoints||P||z){if(P||(P=!0),I.selectedpoints){var X=x.selectBatch[B]=I.selectedpoints,Z={};for(w=0;w<X.length;w++)Z[X[w]]=1;var J=[];for(w=0;w<O;w++)Z[w]||J.push(w);x.unselectBatch[B]=J}var N=L.xpx=new Array(O),H=L.ypx=new Array(O);for(w=0;w<O;w++)N[w]=S.c2p(G[w]),H[w]=M.c2p(W[w])}else L.xpx=L.ypx=null}if(P){if(x.select2d||(x.select2d=t(v._glcanvas.data()[1].regl)),x.scatter2d){var $=new Array(A);for(C=0;C<A;C++)$[C]=x.selectBatch[C].length||x.unselectBatch[C].length?x.markerUnselectedOptions[C]:{};x.scatter2d.update($)}x.select2d&&(x.select2d.update(x.markerOptions),x.select2d.update(x.markerSelectedOptions)),x.glText&&_.forEach(function(j){var q=((j||[])[0]||{}).trace||{};u.hasText(q)&&f(j)})}else x.scatter2d&&x.scatter2d.update(x.markerOptions);var U={viewport:d(v,S,M,m._context.plotGlPixelRatio),range:[(S._rl||S.range)[0],(M._rl||M.range)[0],(S._rl||S.range)[1],(M._rl||M.range)[1]]},V=s.repeat(U,x.count);x.fill2d&&x.fill2d.update(V),x.line2d&&x.line2d.update(V),x.error2d&&x.error2d.update(V.concat(V)),x.scatter2d&&x.scatter2d.update(V),x.select2d&&x.select2d.update(V),x.glText&&x.glText.forEach(function(j){j.update(U)})}}};p.reglPrecompiled=h}}),VZ=de({"src/traces/scattergl/index.js"(e,r){"use strict";var t=wX();t.plot=Z7(),r.exports=t}}),GZ=de({"lib/scattergl.js"(e,r){"use strict";r.exports=VZ()}}),K7=de({"src/traces/splom/attributes.js"(e,r){"use strict";var t=tl(),i=cs(),a=Ns().axisHoverFormat,{hovertemplateAttrs:o,templatefallbackAttrs:s}=Vo(),l=__(),n=zl().idRegex,u=Ro().templatedArray,c=fn().extendFlat,f=t.marker,h=f.line,d=c(i("marker.line",{editTypeOverride:"calc"}),{width:c({},h.width,{editType:"calc"}),editType:"calc"}),p=c(i("marker"),{symbol:f.symbol,angle:f.angle,size:c({},f.size,{editType:"markerSize"}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:f.opacity,colorbar:f.colorbar,line:d,editType:"calc"});p.color.editType=p.cmin.editType=p.cmax.editType="style";function g(m){return{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"subplotid",regex:n[m],editType:"plot"}}}r.exports={dimensions:u("dimension",{visible:{valType:"boolean",dflt:!0,editType:"calc"},label:{valType:"string",editType:"calc"},values:{valType:"data_array",editType:"calc+clearAxisTypes"},axis:{type:{valType:"enumerated",values:["linear","log","date","category"],editType:"calc+clearAxisTypes"},matches:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc+clearAxisTypes"},editType:"calc+clearAxisTypes"}),text:c({},l.text,{}),hovertext:c({},l.hovertext,{}),hovertemplate:o(),hovertemplatefallback:s(),xhoverformat:a("x"),yhoverformat:a("y"),marker:p,xaxes:g("x"),yaxes:g("y"),diagonal:{visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},showupperhalf:{valType:"boolean",dflt:!0,editType:"calc"},showlowerhalf:{valType:"boolean",dflt:!0,editType:"calc"},selected:{marker:l.selected.marker,editType:"calc"},unselected:{marker:l.unselected.marker,editType:"calc"},opacity:l.opacity}}}),I4=de({"src/traces/parcoords/merge_length.js"(e,r){"use strict";r.exports=function(t,i,a,o){o||(o=1/0);var s,l;for(s=0;s<i.length;s++)l=i[s],l.visible&&(o=Math.min(o,l[a].length));for(o===1/0&&(o=0),t._length=o,s=0;s<i.length;s++)l=i[s],l.visible&&(l._length=o);return o}}}),HZ=de({"src/traces/splom/defaults.js"(e,r){"use strict";var t=Qt(),i=fc(),a=K7(),o=bs(),s=Nh(),l=I4(),n=E4().isOpenSymbol;r.exports=function(h,d,p,g){function m(w,k){return t.coerce(h,d,a,w,k)}var y=i(h,d,{name:"dimensions",handleItemDefaults:u}),_=m("diagonal.visible"),v=m("showupperhalf"),x=m("showlowerhalf"),S=l(d,y,"values");if(!S||!_&&!v&&!x){d.visible=!1;return}m("text"),m("hovertext"),m("hovertemplate"),m("hovertemplatefallback"),m("xhoverformat"),m("yhoverformat"),s(h,d,p,g,m,{noAngleRef:!0,noLineDash:!0,noStandOff:!0});var M=n(d.marker.symbol),C=o.isBubble(d);m("marker.line.width",M||C?1:0),c(h,d,g,m),t.coerceSelectionMarkerOpacity(d,m)};function u(f,h){function d(g,m){return t.coerce(f,h,a.dimensions,g,m)}d("label");var p=d("values");p&&p.length?d("visible"):h.visible=!1,d("axis.type"),d("axis.matches")}function c(f,h,d,p){var g=h.dimensions,m=g.length,y=h.showupperhalf,_=h.showlowerhalf,v=h.diagonal.visible,x,S,M=new Array(m),C=new Array(m);for(x=0;x<m;x++){var w=x?x+1:"";M[x]="x"+w,C[x]="y"+w}var k=p("xaxes",M),A=p("yaxes",C),b=h._diag=new Array(m);h._xaxes={},h._yaxes={};var E=[],T=[];function F(G,W,X,Z){if(G){var J=G.charAt(0),N=d._splomAxes[J];if(h["_"+J+"axes"][G]=1,Z.push(G),!(G in N)){var H=N[G]={};X&&(H.label=X.label||"",X.visible&&X.axis&&(X.axis.type&&(H.type=X.axis.type),X.axis.matches&&(H.matches=W)))}}}var D=!v&&!_,R=!v&&!y;for(h._axesDim={},x=0;x<m;x++){var P=g[x],z=x===0,I=x===m-1,L=z&&D||I&&R?void 0:k[x],B=z&&R||I&&D?void 0:A[x];F(L,B,P,E),F(B,L,P,T),b[x]=[L,B],h._axesDim[L]=x,h._axesDim[B]=x}for(x=0;x<E.length;x++)for(S=0;S<T.length;S++){var O=E[x]+T[S];(x>S&&y||x<S&&_||x===S&&(v||!_||!y))&&(d._splomSubplots[O]=1)}(!_||!v&&y&&_)&&(d._splomGridDflt.xside="bottom",d._splomGridDflt.yside="left")}}}),$Z=de({"src/traces/splom/scene_update.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){var s=a._fullLayout,l=o.uid,n=s._splomScenes;n||(n=s._splomScenes={});var u={dirty:!0,selectBatch:[],unselectBatch:[]},c={matrix:!1,selectBatch:[],unselectBatch:[]},f=n[o.uid];return f||(f=n[l]=t.extendFlat({},u,c),f.draw=function(){f.matrix&&f.matrix.draw&&(f.selectBatch.length||f.unselectBatch.length?f.matrix.draw(f.unselectBatch,f.selectBatch):f.matrix.draw()),f.dirty=!1},f.destroy=function(){f.matrix&&f.matrix.destroy&&f.matrix.destroy(),f.matrixOptions=null,f.selectBatch=null,f.unselectBatch=null,f=null}),f.dirty||t.extendFlat(f,u),f}}}),WZ=de({"src/traces/splom/calc.js"(e,r){"use strict";var t=Qt(),i=Hs(),a=Uh().calcMarkerSize,o=Uh().calcAxisExpansion,s=jh(),l=Gv().markerSelection,n=Gv().markerStyle,u=$Z(),c=cn().BADNUM,f=E0().TOO_MANY_POINTS;r.exports=function(d,p){var g=p.dimensions,m=p._length,y={},_=y.cdata=[],v=y.data=[],x=p._visibleDims=[],S,M,C,w,k;function A(D,R){for(var P=D.makeCalcdata({v:R.values,vcalendar:p.calendar},"v"),z=0;z<P.length;z++)P[z]=P[z]===c?NaN:P[z];_.push(P),v.push(D.type==="log"?t.simpleMap(P,D.c2l):P)}for(S=0;S<g.length;S++)if(C=g[S],C.visible){if(w=i.getFromId(d,p._diag[S][0]),k=i.getFromId(d,p._diag[S][1]),w&&k&&w.type!==k.type){t.log("Skipping splom dimension "+S+" with conflicting axis types");continue}w?(A(w,C),k&&k.type==="category"&&(k._categories=w._categories.slice())):A(k,C),x.push(S)}s(d,p),t.extendFlat(y,n(d,p));var b=_.length,E=b*m>f,T;for(E?T=y.sizeAvg||Math.max(y.size,3):T=a(p,m),M=0;M<x.length;M++)S=x[M],C=g[S],w=i.getFromId(d,p._diag[S][0])||{},k=i.getFromId(d,p._diag[S][1])||{},o(d,p,w,k,_[M],_[M],T);var F=u(d,p);return F.matrix||(F.matrix=!0),F.matrixOptions=y,F.selectedOptions=l(d,p,p.selected),F.unselectedOptions=l(d,p,p.unselected),[{x:!1,y:!1,t:{},trace:p}]}}}),YZ=de({"node_modules/performance-now/lib/performance-now.js"(e,r){(function(){var t,i,a,o,s,l;typeof performance<"u"&&performance!==null&&performance.now?r.exports=function(){return performance.now()}:typeof process<"u"&&process!==null&&process.hrtime?(r.exports=function(){return(t()-s)/1e6},i=process.hrtime,t=function(){var n;return n=i(),n[0]*1e9+n[1]},o=t(),l=process.uptime()*1e9,s=o-l):Date.now?(r.exports=function(){return Date.now()-a},a=Date.now()):(r.exports=function(){return new Date().getTime()-a},a=new Date().getTime())}).call(e)}}),XZ=de({"node_modules/raf/index.js"(e,r){var t=YZ(),i=window,a=["moz","webkit"],o="AnimationFrame",s=i["request"+o],l=i["cancel"+o]||i["cancelRequest"+o];for(n=0;!s&&n<a.length;n++)s=i[a[n]+"Request"+o],l=i[a[n]+"Cancel"+o]||i[a[n]+"CancelRequest"+o];var n;(!s||!l)&&(u=0,c=0,f=[],h=1e3/60,s=function(d){if(f.length===0){var p=t(),g=Math.max(0,h-(p-u));u=g+p,setTimeout(function(){var m=f.slice(0);f.length=0;for(var y=0;y<m.length;y++)if(!m[y].cancelled)try{m[y].callback(u)}catch(_){setTimeout(function(){throw _},0)}},Math.round(g))}return f.push({handle:++c,callback:d,cancelled:!1}),c},l=function(d){for(var p=0;p<f.length;p++)f[p].handle===d&&(f[p].cancelled=!0)});var u,c,f,h;r.exports=function(d){return s.call(i,d)},r.exports.cancel=function(){l.apply(i,arguments)},r.exports.polyfill=function(d){d||(d=i),d.requestAnimationFrame=s,d.cancelAnimationFrame=l}}}),ZZ=de({"node_modules/array-range/index.js"(e,r){r.exports=function(i,a){var o=typeof i=="number",s=typeof a=="number";o&&!s?(a=i,i=0):!o&&!s&&(i=0,a=0),i=i|0,a=a|0;var l=a-i;if(l<0)throw new Error("array length must be positive");for(var n=new Array(l),u=0,c=i;u<l;u++,c++)n[u]=c;return n}}}),KZ=de({"node_modules/regl-splom/index.js"(e,r){"use strict";var t=S7(),i=rp(),a=qv(),o=XZ(),s=ZZ(),l=z1(),n=Vv();r.exports=u;function u(d,p){if(!(this instanceof u))return new u(d,p);this.traces=[],this.passes={},this.regl=d,this.scatter=t(d),this.canvas=this.scatter.canvas}u.prototype.render=function(...d){return d.length&&this.update(...d),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?this.planned==null&&(this.planned=o(()=>{this.draw(),this.dirty=!0,this.planned=null})):(this.draw(),this.dirty=!0,o(()=>{this.dirty=!1})),this)},u.prototype.update=function(...d){if(!d.length)return;for(let m=0;m<d.length;m++)this.updateItem(m,d[m]);this.traces=this.traces.filter(Boolean);let p=[],g=0;for(let m=0;m<this.traces.length;m++){let y=this.traces[m],_=this.traces[m].passes;for(let v=0;v<_.length;v++)p.push(this.passes[_[v]]);y.passOffset=g,g+=y.passes.length}return this.scatter.update(...p),this},u.prototype.updateItem=function(d,p){let{regl:g}=this;if(p===null)return this.traces[d]=null,this;if(!p)return this;let m=i(p,{data:"data items columns rows values dimensions samples x",snap:"snap cluster",size:"sizes size radius",color:"colors color fill fill-color fillColor",opacity:"opacity alpha transparency opaque",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",borderColor:"borderColors borderColor bordercolor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range ranges databox dataBox",viewport:"viewport viewBox viewbox",domain:"domain domains area areas",padding:"pad padding paddings pads margin margins",transpose:"transpose transposed",diagonal:"diagonal diag showDiagonal",upper:"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf",lower:"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower"}),y=this.traces[d]||(this.traces[d]={id:d,buffer:g.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),color:"black",marker:null,size:12,borderColor:"transparent",borderSize:1,viewport:l([g._gl.drawingBufferWidth,g._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(m.color!=null&&(y.color=m.color),m.size!=null&&(y.size=m.size),m.marker!=null&&(y.marker=m.marker),m.borderColor!=null&&(y.borderColor=m.borderColor),m.borderSize!=null&&(y.borderSize=m.borderSize),m.opacity!=null&&(y.opacity=m.opacity),m.viewport&&(y.viewport=l(m.viewport)),m.diagonal!=null&&(y.diagonal=m.diagonal),m.upper!=null&&(y.upper=m.upper),m.lower!=null&&(y.lower=m.lower),m.data){y.buffer(n(m.data)),y.columns=m.data.length,y.count=m.data[0].length,y.bounds=[];for(let E=0;E<y.columns;E++)y.bounds[E]=a(m.data[E],1)}let _;m.range&&(y.range=m.range,_=y.range&&typeof y.range[0]!="number"),m.domain&&(y.domain=m.domain);let v=!1;m.padding!=null&&(Array.isArray(m.padding)&&m.padding.length===y.columns&&typeof m.padding[m.padding.length-1]=="number"?(y.padding=m.padding.map(h),v=!0):y.padding=h(m.padding));let x=y.columns,S=y.count,M=y.viewport.width,C=y.viewport.height,w=y.viewport.x,k=y.viewport.y,A=M/x,b=C/x;y.passes=[];for(let E=0;E<x;E++)for(let T=0;T<x;T++){if(!y.diagonal&&T===E||!y.upper&&E>T||!y.lower&&E<T)continue;let F=c(y.id,E,T),D=this.passes[F]||(this.passes[F]={});if(m.data&&(m.transpose?D.positions={x:{buffer:y.buffer,offset:T,count:S,stride:x},y:{buffer:y.buffer,offset:E,count:S,stride:x}}:D.positions={x:{buffer:y.buffer,offset:T*S,count:S},y:{buffer:y.buffer,offset:E*S,count:S}},D.bounds=f(y.bounds,E,T)),m.domain||m.viewport||m.data){let R=v?f(y.padding,E,T):y.padding;if(y.domain){let[P,z,I,L]=f(y.domain,E,T);D.viewport=[w+P*M+R[0],k+z*C+R[1],w+I*M-R[2],k+L*C-R[3]]}else D.viewport=[w+T*A+A*R[0],k+E*b+b*R[1],w+(T+1)*A-A*R[2],k+(E+1)*b-b*R[3]]}m.color&&(D.color=y.color),m.size&&(D.size=y.size),m.marker&&(D.marker=y.marker),m.borderSize&&(D.borderSize=y.borderSize),m.borderColor&&(D.borderColor=y.borderColor),m.opacity&&(D.opacity=y.opacity),m.range&&(D.range=_?f(y.range,E,T):y.range||D.bounds),y.passes.push(F)}return this},u.prototype.draw=function(...d){if(!d.length)this.scatter.draw();else{let p=[];for(let g=0;g<d.length;g++)if(typeof d[g]=="number"){let{passes:m,passOffset:y}=this.traces[d[g]];p.push(...s(y,y+m.length))}else if(d[g].length){let m=d[g],{passes:y,passOffset:_}=this.traces[g];y=y.map((v,x)=>{p[_+x]=m})}this.scatter.draw(...p)}return this},u.prototype.destroy=function(){return this.traces.forEach(d=>{d.buffer&&d.buffer.destroy&&d.buffer.destroy()}),this.traces=null,this.passes=null,this.scatter.destroy(),this};function c(d,p,g){let m=d.id!=null?d.id:d,y=p,_=g;return m<<16|(y&255)<<8|_&255}function f(d,p,g){let m,y,_,v,x,S,M,C,w=d[p],k=d[g];return w.length>2?(m=w[0],_=w[2],y=w[1],v=w[3]):w.length?(m=y=w[0],_=v=w[1]):(m=w.x,y=w.y,_=w.x+w.width,v=w.y+w.height),k.length>2?(x=k[0],M=k[2],S=k[1],C=k[3]):k.length?(x=S=k[0],M=C=k[1]):(x=k.x,S=k.y,M=k.x+k.width,C=k.y+k.height),[x,y,M,v]}function h(d){if(typeof d=="number")return[d,d,d,d];if(d.length===2)return[d[0],d[1],d[0],d[1]];{let p=l(d);return[p.x,p.y,p.x+p.width,p.y+p.height]}}}}),JZ=de({"src/traces/splom/plot.js"(e,r){"use strict";var t=KZ(),i=Qt(),a=Hs(),o=Xd().selectMode;r.exports=function(n,u,c){if(c.length)for(var f=0;f<c.length;f++)s(n,c[f][0])};function s(l,n){var u=l._fullLayout,c=u._size,f=n.trace,h=n.t,d=u._splomScenes[f.uid],p=d.matrixOptions,g=p.cdata,m=u._glcanvas.data()[0].regl,y=u.dragmode,_,v,x,S,M;if(g.length!==0){p.lower=f.showupperhalf,p.upper=f.showlowerhalf,p.diagonal=f.diagonal.visible;var C=f._visibleDims,w=g.length,k=d.viewOpts={};for(k.ranges=new Array(w),k.domains=new Array(w),M=0;M<C.length;M++){x=C[M];var A=k.ranges[M]=new Array(4),b=k.domains[M]=new Array(4);_=a.getFromId(l,f._diag[x][0]),_&&(A[0]=_._rl[0],A[2]=_._rl[1],b[0]=_.domain[0],b[2]=_.domain[1]),v=a.getFromId(l,f._diag[x][1]),v&&(A[1]=v._rl[0],A[3]=v._rl[1],b[1]=v.domain[0],b[3]=v.domain[1])}var E=l._context.plotGlPixelRatio,T=c.l*E,F=c.b*E,D=c.w*E,R=c.h*E;k.viewport=[T,F,D+T,R+F],d.matrix===!0&&(d.matrix=t(m));var P=u.clickmode.indexOf("select")>-1,z=o(y)||!!f.selectedpoints||P,I=!0;if(z){var L=f._length;if(f.selectedpoints){d.selectBatch=f.selectedpoints;var B=f.selectedpoints,O={};for(x=0;x<B.length;x++)O[B[x]]=!0;var G=[];for(x=0;x<L;x++)O[x]||G.push(x);d.unselectBatch=G}var W=h.xpx=new Array(w),X=h.ypx=new Array(w);for(M=0;M<C.length;M++){if(x=C[M],_=a.getFromId(l,f._diag[x][0]),_)for(W[M]=new Array(L),S=0;S<L;S++)W[M][S]=_.c2p(g[M][S]);if(v=a.getFromId(l,f._diag[x][1]),v)for(X[M]=new Array(L),S=0;S<L;S++)X[M][S]=v.c2p(g[M][S])}if(d.selectBatch.length||d.unselectBatch.length){var Z=i.extendFlat({},p,d.unselectedOptions,k),J=i.extendFlat({},p,d.selectedOptions,k);d.matrix.update(Z,J),I=!1}}else h.xpx=h.ypx=null;if(I){var N=i.extendFlat({},p,k);d.matrix.update(N,null)}}}}}),J7=de({"src/traces/splom/helpers.js"(e){"use strict";e.getDimIndex=function(t,i){for(var a=i._id,o=a.charAt(0),s={x:0,y:1}[o],l=t._visibleDims,n=0;n<l.length;n++){var u=l[n];if(t._diag[u][s]===a)return n}return!1}}}),QZ=de({"src/traces/splom/hover.js"(e,r){"use strict";var t=J7(),i=S4().calcHover,a=nn().getFromId,o=fn().extendFlat;function s(n,u,c,f,h){h||(h={});var d=(f||"").charAt(0)==="x",p=(f||"").charAt(0)==="y",g=l(n,u,c);if((d||p)&&h.hoversubplots==="axis"&&g[0])for(var m=(d?n.xa:n.ya)._subplotsWith,y=h.gd,_=o({},n),v=0;v<m.length;v++){var x=m[v];if(x!==n.xa._id+n.ya._id){p?_.xa=a(y,x,"x"):_.ya=a(y,x,"y");var S=d||p,M=l(_,u,c,S);g=g.concat(M)}}return g}function l(n,u,c,f){var h=n.cd,d=h[0].trace,p=n.scene,g=p.matrixOptions.cdata,m=n.xa,y=n.ya,_=m.c2p(u),v=y.c2p(c),x=n.distance,S=t.getDimIndex(d,m),M=t.getDimIndex(d,y);if(S===!1||M===!1)return[n];for(var C=g[S],w=g[M],k,A,b=x,E=0;E<C.length;E++)if(!(f&&E!==n.index)){var T=C[E],F=w[E],D=m.c2p(T)-_,R=y.c2p(F)-v,P=Math.sqrt(D*D+R*R);(f||P<b)&&(b=A=P,k=E)}return n.index=k,n.distance=b,n.dxy=A,k===void 0?[n]:[i(n,C,w,d)]}r.exports={hoverPoints:s}}}),eK=de({"src/traces/splom/select.js"(e,r){"use strict";var t=Qt(),i=t.pushUnique,a=bs(),o=J7();r.exports=function(l,n){var u=l.cd,c=u[0].trace,f=u[0].t,h=l.scene,d=h.matrixOptions.cdata,p=l.xaxis,g=l.yaxis,m=[];if(!h)return m;var y=!a.hasMarkers(c)&&!a.hasText(c);if(c.visible!==!0||y)return m;var _=o.getDimIndex(c,p),v=o.getDimIndex(c,g);if(_===!1||v===!1)return m;var x=f.xpx[_],S=f.ypx[v],M=d[_],C=d[v],w=(l.scene.selectBatch||[]).slice(),k=[];if(n!==!1&&!n.degenerate)for(var A=0;A<M.length;A++)n.contains([x[A],S[A]],null,A,l)?(m.push({pointNumber:A,x:M[A],y:C[A]}),i(w,A)):w.indexOf(A)!==-1?i(w,A):k.push(A);var b=h.matrixOptions;return!w.length&&!k.length?h.matrix.update(b,null):!h.selectBatch.length&&!h.unselectBatch.length&&h.matrix.update(h.unselectedOptions,t.extendFlat({},b,h.selectedOptions,h.viewOpts)),h.selectBatch=w,h.unselectBatch=k,m}}}),tK=de({"src/traces/splom/edit_style.js"(e,r){"use strict";var t=Qt(),i=jh(),a=Gv().markerStyle;r.exports=function(s,l){var n=l.trace,u=s._fullLayout._splomScenes[n.uid];if(u){i(s,n),t.extendFlat(u.matrixOptions,a(s,n));var c=t.extendFlat({},u.matrixOptions,u.viewOpts);u.matrix.update(c,null)}}}}),rK=de({"src/traces/splom/base_index.js"(e,r){"use strict";var t=Ma(),i=vk();r.exports={moduleType:"trace",name:"splom",categories:["gl","regl","cartesian","symbols","showLegend","scatter-like"],attributes:K7(),supplyDefaults:HZ(),colorbar:Yu(),calc:WZ(),plot:JZ(),hoverPoints:QZ().hoverPoints,selectPoints:eK(),editStyle:tK(),meta:{}},t.register(i)}}),iK=de({"src/traces/splom/base_plot.js"(e,r){"use strict";var t=N7(),i=Ma(),a=P4(),o=$u().getModuleCalcData,s=ml(),l=Hs().getFromId,n=nn().shouldShowZeroLine,u="splom",c={};function f(y){var _=y._fullLayout,v=i.getModule(u),x=o(y.calcdata,v)[0],S=a(y,["ANGLE_instanced_arrays","OES_element_index_uint"],c);S&&(_._hasOnlyLargeSploms&&p(y),v.plot(y,{},x))}function h(y){var _=y.calcdata,v=y._fullLayout;v._hasOnlyLargeSploms&&p(y);for(var x=0;x<_.length;x++){var S=_[x][0],M=S.trace,C=v._splomScenes[M.uid];M.type==="splom"&&C&&C.matrix&&d(y,M,C)}}function d(y,_,v){for(var x=v.matrixOptions.data.length,S=_._visibleDims,M=v.viewOpts.ranges=new Array(x),C=0;C<S.length;C++){var w=S[C],k=M[C]=new Array(4),A=l(y,_._diag[w][0]);A&&(k[0]=A.r2l(A.range[0]),k[2]=A.r2l(A.range[1]));var b=l(y,_._diag[w][1]);b&&(k[1]=b.r2l(b.range[0]),k[3]=b.r2l(b.range[1]))}v.selectBatch.length||v.unselectBatch.length?v.matrix.update({ranges:M},{ranges:M}):v.matrix.update({ranges:M})}function p(y){var _=y._fullLayout,v=_._glcanvas.data()[0].regl,x=_._splomGrid;x||(x=_._splomGrid=t(v)),x.update(g(y))}function g(y){var _=y._context.plotGlPixelRatio,v=y._fullLayout,x=v._size,S=[0,0,v.width*_,v.height*_],M={},C;function w(G,W,X,Z,J,N){X*=_,Z*=_,J*=_,N*=_;var H=W[G+"color"],$=W[G+"width"],U=String(H+$);U in M?M[U].data.push(NaN,NaN,X,Z,J,N):M[U]={data:[X,Z,J,N],join:"rect",thickness:$*_,color:H,viewport:S,range:S,overlay:!1}}for(C in v._splomSubplots){var k=v._plots[C],A=k.xaxis,b=k.yaxis,E=A._gridVals,T=b._gridVals,F=A._offset,D=A._length,R=b._length,P=x.b+b.domain[0]*x.h,z=-b._m,I=-z*b.r2l(b.range[0],b.calendar),L,B;if(A.showgrid)for(C=0;C<E.length;C++)L=F+A.l2p(E[C].x),w("grid",A,L,P,L,P+R);if(b.showgrid)for(C=0;C<T.length;C++)B=P+I+z*T[C].x,w("grid",b,F,B,F+D,B);n(y,A,b)&&(L=F+A.l2p(0),w("zeroline",A,L,P,L,P+R)),n(y,b,A)&&(B=P+I+0,w("zeroline",b,F,B,F+D,B))}var O=[];for(C in M)O.push(M[C]);return O}function m(y,_,v,x){var S={},M;if(x._splomScenes){for(M=0;M<y.length;M++){var C=y[M];C.type==="splom"&&(S[C.uid]=1)}for(M=0;M<v.length;M++){var w=v[M];if(!S[w.uid]){var k=x._splomScenes[w.uid];k&&k.destroy&&k.destroy(),x._splomScenes[w.uid]=null,delete x._splomScenes[w.uid]}}}Object.keys(x._splomScenes||{}).length===0&&delete x._splomScenes,x._splomGrid&&!_._hasOnlyLargeSploms&&x._hasOnlyLargeSploms&&(x._splomGrid.destroy(),x._splomGrid=null,delete x._splomGrid),s.clean(y,_,v,x)}r.exports={name:u,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:f,drag:h,updateGrid:p,clean:m,updateFx:s.updateFx,toSVG:s.toSVG,reglPrecompiled:c}}}),aK=de({"src/traces/splom/index.js"(e,r){"use strict";var t=rK();t.basePlotModule=iK(),r.exports=t}}),nK=de({"lib/splom.js"(e,r){"use strict";r.exports=aK()}}),Q7=de({"src/traces/parcoords/attributes.js"(e,r){"use strict";var t=cs(),i=Mu(),a=us(),o=Is().attributes,s=fn().extendFlat,l=Ro().templatedArray;r.exports={domain:o({name:"parcoords",trace:!0,editType:"plot"}),labelangle:{valType:"angle",dflt:0,editType:"plot"},labelside:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},labelfont:a({editType:"plot"}),tickfont:a({autoShadowDflt:!0,editType:"plot"}),rangefont:a({editType:"plot"}),dimensions:l("dimension",{label:{valType:"string",editType:"plot"},tickvals:s({},i.tickvals,{editType:"plot"}),ticktext:s({},i.ticktext,{editType:"plot"}),tickformat:s({},i.tickformat,{editType:"plot"}),visible:{valType:"boolean",dflt:!0,editType:"plot"},range:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},constraintrange:{valType:"info_array",freeLength:!0,dimensions:"1-2",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},multiselect:{valType:"boolean",dflt:!0,editType:"plot"},values:{valType:"data_array",editType:"calc"},editType:"calc"}),line:s({editType:"calc"},t("line",{colorscaleDflt:"Viridis",autoColorDflt:!1,editTypeOverride:"calc"})),unselected:{line:{color:{valType:"color",dflt:"#7f7f7f",editType:"plot"},opacity:{valType:"number",min:0,max:1,dflt:"auto",editType:"plot"},editType:"plot"},editType:"plot"}}}}),M_=de({"src/traces/parcoords/constants.js"(e,r){"use strict";r.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:["contextLineLayer","focusLineLayer","pickLineLayer"],axisTitleOffset:28,axisExtentOffset:10,bar:{width:4,captureWidth:10,fillColor:"magenta",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:"axis-extent-text",parcoordsLineLayers:"parcoords-line-layers",parcoordsLineLayer:"parcoords-lines",parcoords:"parcoords",parcoordsControlView:"parcoords-control-view",yAxis:"y-axis",axisOverlays:"axis-overlays",axis:"axis",axisHeading:"axis-heading",axisTitle:"axis-title",axisExtent:"axis-extent",axisExtentTop:"axis-extent-top",axisExtentTopText:"axis-extent-top-text",axisExtentBottom:"axis-extent-bottom",axisExtentBottomText:"axis-extent-bottom-text",axisBrush:"axis-brush"},id:{filterBarPattern:"filter-bar-pattern"}}}}),ip=de({"src/lib/gup.js"(e,r){"use strict";var t=My();function i(a){return[a]}r.exports={keyFun:function(a){return a.key},repeat:i,descend:t,wrap:i,unwrap:function(a){return a[0]}}}}),e9=de({"src/traces/parcoords/axisbrush.js"(e,r){"use strict";var t=M_(),i=Yr(),a=ip().keyFun,o=ip().repeat,s=Qt().sorterAsc,l=Qt().strTranslate,n=t.bar.snapRatio;function u(O,G){return O*(1-n)+G*n}var c=t.bar.snapClose;function f(O,G){return O*(1-c)+G*c}function h(O,G,W,X){if(d(W,X))return W;var Z=O?-1:1,J=0,N=G.length-1;if(Z<0){var H=J;J=N,N=H}for(var $=G[J],U=$,V=J;Z*V<Z*N;V+=Z){var j=V+Z,q=G[j];if(Z*W<Z*f($,q))return u($,U);if(Z*W<Z*q||j===N)return u(q,$);U=$,$=q}}function d(O,G){for(var W=0;W<G.length;W++)if(O>=G[W][0]&&O<=G[W][1])return!0;return!1}function p(O){O.attr("x",-t.bar.captureWidth/2).attr("width",t.bar.captureWidth)}function g(O){O.attr("visibility","visible").style("visibility","visible").attr("fill","yellow").attr("opacity",0)}function m(O){if(!O.brush.filterSpecified)return"0,"+O.height;for(var G=y(O.brush.filter.getConsolidated(),O.height),W=[0],X,Z,J,N=G.length?G[0][0]:null,H=0;H<G.length;H++)X=G[H],Z=X[1]-X[0],W.push(N),W.push(Z),J=H+1,J<G.length&&(N=G[J][0]-X[1]);return W.push(O.height),W}function y(O,G){return O.map(function(W){return W.map(function(X){return Math.max(0,X*G)}).sort(s)})}function _(O,G){var W=t.bar.handleHeight;if(!(G>O[1]+W||G<O[0]-W))return G>=.9*O[1]+.1*O[0]?"n":G<=.9*O[0]+.1*O[1]?"s":"ns"}function v(){i.select(document.body).style("cursor",null)}function x(O){O.attr("stroke-dasharray",m)}function S(O,G){var W=i.select(O).selectAll(".highlight, .highlight-shadow"),X=G?W.transition().duration(t.bar.snapDuration).each("end",G):W;x(X)}function M(O,G){var W=O.brush,X=W.filterSpecified,Z=NaN,J={},N;if(X){var H=O.height,$=W.filter.getConsolidated(),U=y($,H),V=NaN,j=NaN,q=NaN;for(N=0;N<=U.length;N++){var Y=U[N];if(Y&&Y[0]<=G&&G<=Y[1]){V=N;break}else if(j=N?N-1:NaN,Y&&Y[0]>G){q=N;break}}if(Z=V,isNaN(Z)&&(isNaN(j)||isNaN(q)?Z=isNaN(j)?q:j:Z=G-U[j][1]<U[q][0]-G?j:q),!isNaN(Z)){var K=U[Z],te=_(K,G);te&&(J.interval=$[Z],J.intervalPix=K,J.region=te)}}if(O.ordinal&&!J.region){var ne=O.unitTickvals,se=O.unitToPaddedPx.invert(G);for(N=0;N<ne.length;N++){var le=[ne[Math.max(N-1,0)]*.25+ne[N]*.75,ne[Math.min(N+1,ne.length-1)]*.25+ne[N]*.75];if(se>=le[0]&&se<=le[1]){J.clickableOrdinalRange=le;break}}}return J}function C(O,G){i.event.sourceEvent.stopPropagation();var W=G.height-i.mouse(O)[1]-2*t.verticalPadding,X=G.unitToPaddedPx.invert(W),Z=G.brush,J=M(G,W),N=J.interval,H=Z.svgBrush;if(H.wasDragged=!1,H.grabbingBar=J.region==="ns",H.grabbingBar){var $=N.map(G.unitToPaddedPx);H.grabPoint=W-$[0]-t.verticalPadding,H.barLength=$[1]-$[0]}H.clickableOrdinalRange=J.clickableOrdinalRange,H.stayingIntervals=G.multiselect&&Z.filterSpecified?Z.filter.getConsolidated():[],N&&(H.stayingIntervals=H.stayingIntervals.filter(function(U){return U[0]!==N[0]&&U[1]!==N[1]})),H.startExtent=J.region?N[J.region==="s"?1:0]:X,G.parent.inBrushDrag=!0,H.brushStartCallback()}function w(O,G){i.event.sourceEvent.stopPropagation();var W=G.height-i.mouse(O)[1]-2*t.verticalPadding,X=G.brush.svgBrush;X.wasDragged=!0,X._dragging=!0,X.grabbingBar?X.newExtent=[W-X.grabPoint,W+X.barLength-X.grabPoint].map(G.unitToPaddedPx.invert):X.newExtent=[X.startExtent,G.unitToPaddedPx.invert(W)].sort(s),G.brush.filterSpecified=!0,X.extent=X.stayingIntervals.concat([X.newExtent]),X.brushCallback(G),S(O.parentNode)}function k(O,G){var W=G.brush,X=W.filter,Z=W.svgBrush;Z._dragging||(A(O,G),w(O,G),G.brush.svgBrush.wasDragged=!1),Z._dragging=!1;var J=i.event;J.sourceEvent.stopPropagation();var N=Z.grabbingBar;if(Z.grabbingBar=!1,Z.grabLocation=void 0,G.parent.inBrushDrag=!1,v(),!Z.wasDragged){Z.wasDragged=void 0,Z.clickableOrdinalRange?W.filterSpecified&&G.multiselect?Z.extent.push(Z.clickableOrdinalRange):(Z.extent=[Z.clickableOrdinalRange],W.filterSpecified=!0):N?(Z.extent=Z.stayingIntervals,Z.extent.length===0&&R(W)):R(W),Z.brushCallback(G),S(O.parentNode),Z.brushEndCallback(W.filterSpecified?X.getConsolidated():[]);return}var H=function(){X.set(X.getConsolidated())};if(G.ordinal){var $=G.unitTickvals;$[$.length-1]<$[0]&&$.reverse(),Z.newExtent=[h(0,$,Z.newExtent[0],Z.stayingIntervals),h(1,$,Z.newExtent[1],Z.stayingIntervals)];var U=Z.newExtent[1]>Z.newExtent[0];Z.extent=Z.stayingIntervals.concat(U?[Z.newExtent]:[]),Z.extent.length||R(W),Z.brushCallback(G),U?S(O.parentNode,H):(H(),S(O.parentNode))}else H();Z.brushEndCallback(W.filterSpecified?X.getConsolidated():[])}function A(O,G){var W=G.height-i.mouse(O)[1]-2*t.verticalPadding,X=M(G,W),Z="crosshair";X.clickableOrdinalRange?Z="pointer":X.region&&(Z=X.region+"-resize"),i.select(document.body).style("cursor",Z)}function b(O){O.on("mousemove",function(G){i.event.preventDefault(),G.parent.inBrushDrag||A(this,G)}).on("mouseleave",function(G){G.parent.inBrushDrag||v()}).call(i.behavior.drag().on("dragstart",function(G){C(this,G)}).on("drag",function(G){w(this,G)}).on("dragend",function(G){k(this,G)}))}function E(O,G){return O[0]-G[0]}function T(O,G,W){var X=W._context.staticPlot,Z=O.selectAll(".background").data(o);Z.enter().append("rect").classed("background",!0).call(p).call(g).style("pointer-events",X?"none":"auto").attr("transform",l(0,t.verticalPadding)),Z.call(b).attr("height",function(H){return H.height-t.verticalPadding});var J=O.selectAll(".highlight-shadow").data(o);J.enter().append("line").classed("highlight-shadow",!0).attr("x",-t.bar.width/2).attr("stroke-width",t.bar.width+t.bar.strokeWidth).attr("stroke",G).attr("opacity",t.bar.strokeOpacity).attr("stroke-linecap","butt"),J.attr("y1",function(H){return H.height}).call(x);var N=O.selectAll(".highlight").data(o);N.enter().append("line").classed("highlight",!0).attr("x",-t.bar.width/2).attr("stroke-width",t.bar.width-t.bar.strokeWidth).attr("stroke",t.bar.fillColor).attr("opacity",t.bar.fillOpacity).attr("stroke-linecap","butt"),N.attr("y1",function(H){return H.height}).call(x)}function F(O,G,W){var X=O.selectAll("."+t.cn.axisBrush).data(o,a);X.enter().append("g").classed(t.cn.axisBrush,!0),T(X,G,W)}function D(O){return O.svgBrush.extent.map(function(G){return G.slice()})}function R(O){O.filterSpecified=!1,O.svgBrush.extent=[[-1/0,1/0]]}function P(O){return function(W){var X=W.brush,Z=D(X),J=Z.slice();X.filter.set(J),O()}}function z(O){for(var G=O.slice(),W=[],X,Z=G.shift();Z;){for(X=Z.slice();(Z=G.shift())&&Z[0]<=X[1];)X[1]=Math.max(X[1],Z[1]);W.push(X)}return W.length===1&&W[0][0]>W[0][1]&&(W=[]),W}function I(){var O=[],G,W;return{set:function(X){O=X.map(function(Z){return Z.slice().sort(s)}).sort(E),O.length===1&&O[0][0]===-1/0&&O[0][1]===1/0&&(O=[[0,-1]]),G=z(O),W=O.reduce(function(Z,J){return[Math.min(Z[0],J[0]),Math.max(Z[1],J[1])]},[1/0,-1/0])},get:function(){return O.slice()},getConsolidated:function(){return G},getBounds:function(){return W}}}function L(O,G,W,X,Z,J){var N=I();return N.set(W),{filter:N,filterSpecified:G,svgBrush:{extent:[],brushStartCallback:X,brushCallback:P(Z),brushEndCallback:J}}}function B(O,G){if(Array.isArray(O[0])?(O=O.map(function(X){return X.sort(s)}),G.multiselect?O=z(O.sort(E)):O=[O[0]]):O=[O.sort(s)],G.tickvals){var W=G.tickvals.slice().sort(s);if(O=O.map(function(X){var Z=[h(0,W,X[0],[]),h(1,W,X[1],[])];if(Z[1]>Z[0])return Z}).filter(function(X){return X}),!O.length)return}return O.length>1?O:O[0]}r.exports={makeBrush:L,ensureAxisBrush:F,cleanRanges:B}}}),oK=de({"src/traces/parcoords/defaults.js"(e,r){"use strict";var t=Qt(),i=Wu().hasColorscale,a=hu(),o=Is().defaults,s=fc(),l=nn(),n=Q7(),u=e9(),c=M_().maxDimensionCount,f=I4();function h(p,g,m,y,_){var v=_("line.color",m);if(i(p,"line")&&t.isArrayOrTypedArray(v)){if(v.length)return _("line.colorscale"),a(p,g,y,_,{prefix:"line.",cLetter:"c"}),v.length;g.line.color=m}return 1/0}function d(p,g,m,y){function _(C,w){return t.coerce(p,g,n.dimensions,C,w)}var v=_("values"),x=_("visible");if(v&&v.length||(x=g.visible=!1),x){_("label"),_("tickvals"),_("ticktext"),_("tickformat");var S=_("range");g._ax={_id:"y",type:"linear",showexponent:"all",exponentformat:"B",range:S},l.setConvert(g._ax,y.layout),_("multiselect");var M=_("constraintrange");M&&(g.constraintrange=u.cleanRanges(M,g))}}r.exports=function(g,m,y,_){function v(w,k){return t.coerce(g,m,n,w,k)}var x=g.dimensions;Array.isArray(x)&&x.length>c&&(t.log("parcoords traces support up to "+c+" dimensions at the moment"),x.splice(c));var S=s(g,m,{name:"dimensions",layout:_,handleItemDefaults:d}),M=h(g,m,y,_,v);o(m,_,v),(!Array.isArray(S)||!S.length)&&(m.visible=!1),f(m,S,"values",M);var C=t.extendFlat({},_.font,{size:Math.round(_.font.size/1.2)});t.coerceFont(v,"labelfont",C),t.coerceFont(v,"tickfont",C,{autoShadowDflt:!0}),t.coerceFont(v,"rangefont",C),v("labelangle"),v("labelside"),v("unselected.line.color"),v("unselected.line.opacity")}}}),sK=de({"src/traces/parcoords/calc.js"(e,r){"use strict";var t=Qt().isArrayOrTypedArray,i=ks(),a=ip().wrap;r.exports=function(l,n){var u,c;return i.hasColorscale(n,"line")&&t(n.line.color)?(u=n.line.color,c=i.extractOpts(n.line).colorscale,i.calc(l,n,{vals:u,containerStr:"line",cLetter:"c"})):(u=o(n._length),c=[[0,n.line.color],[1,n.line.color]]),a({lineColor:u,cscale:c})};function o(s){for(var l=new Array(s),n=0;n<s;n++)l[n]=.5;return l}}}),t9=de({"src/traces/parcoords/helpers.js"(e){"use strict";var r=Qt().isTypedArray;e.convertTypedArray=function(t){return r(t)?Array.prototype.slice.call(t):t},e.isOrdinal=function(t){return!!t.tickvals},e.isVisible=function(t){return t.visible||!("visible"in t)}}}),lK=de({"src/traces/parcoords/lines.js"(e,r){"use strict";var t=["precision highp float;","","varying vec4 fragColor;","","attribute vec4 p01_04, p05_08, p09_12, p13_16,","               p17_20, p21_24, p25_28, p29_32,","               p33_36, p37_40, p41_44, p45_48,","               p49_52, p53_56, p57_60, colors;","","uniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,","             loA, hiA, loB, hiB, loC, hiC, loD, hiD;","","uniform vec2 resolution, viewBoxPos, viewBoxSize;","uniform float maskHeight;","uniform float drwLayer; // 0: context, 1: focus, 2: pick","uniform vec4 contextColor;","uniform sampler2D maskTexture, palette;","","bool isPick    = (drwLayer > 1.5);","bool isContext = (drwLayer < 0.5);","","const vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);","const vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);","","float val(mat4 p, mat4 v) {","    return dot(matrixCompMult(p, v) * UNITS, UNITS);","}","","float axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {","    float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);","    float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);","    return y1 * (1.0 - ratio) + y2 * ratio;","}","","int iMod(int a, int b) {","    return a - b * (a / b);","}","","bool fOutside(float p, float lo, float hi) {","    return (lo < hi) && (lo > p || p > hi);","}","","bool vOutside(vec4 p, vec4 lo, vec4 hi) {","    return (","        fOutside(p[0], lo[0], hi[0]) ||","        fOutside(p[1], lo[1], hi[1]) ||","        fOutside(p[2], lo[2], hi[2]) ||","        fOutside(p[3], lo[3], hi[3])","    );","}","","bool mOutside(mat4 p, mat4 lo, mat4 hi) {","    return (","        vOutside(p[0], lo[0], hi[0]) ||","        vOutside(p[1], lo[1], hi[1]) ||","        vOutside(p[2], lo[2], hi[2]) ||","        vOutside(p[3], lo[3], hi[3])","    );","}","","bool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {","    return mOutside(A, loA, hiA) ||","           mOutside(B, loB, hiB) ||","           mOutside(C, loC, hiC) ||","           mOutside(D, loD, hiD);","}","","bool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {","    mat4 pnts[4];","    pnts[0] = A;","    pnts[1] = B;","    pnts[2] = C;","    pnts[3] = D;","","    for(int i = 0; i < 4; ++i) {","        for(int j = 0; j < 4; ++j) {","            for(int k = 0; k < 4; ++k) {","                if(0 == iMod(","                    int(255.0 * texture2D(maskTexture,","                        vec2(","                            (float(i * 2 + j / 2) + 0.5) / 8.0,","                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight","                        ))[3]","                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),","                    2","                )) return true;","            }","        }","    }","    return false;","}","","vec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {","    float x = 0.5 * sign(v) + 0.5;","    float y = axisY(x, A, B, C, D);","    float z = 1.0 - abs(v);","","    z += isContext ? 0.0 : 2.0 * float(","        outsideBoundingBox(A, B, C, D) ||","        outsideRasterMask(A, B, C, D)","    );","","    return vec4(","        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,","        z,","        1.0","    );","}","","void main() {","    mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);","    mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);","    mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);","    mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);","","    float v = colors[3];","","    gl_Position = position(isContext, v, A, B, C, D);","","    fragColor =","        isContext ? vec4(contextColor) :","        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));","}"].join(`
+`),i=["precision highp float;","","varying vec4 fragColor;","","void main() {","    gl_FragColor = fragColor;","}"].join(`
+`),a=M_().maxDimensionCount,o=Qt(),s=1e-6,l=2048,n=new Uint8Array(4),u=new Uint8Array(4),c={shape:[256,1],format:"rgba",type:"uint8",mag:"nearest",min:"nearest"};function f(k){k.read({x:0,y:0,width:1,height:1,data:n})}function h(k,A,b,E,T){var F=k._gl;F.enable(F.SCISSOR_TEST),F.scissor(A,b,E,T),k.clear({color:[0,0,0,0],depth:1})}function d(k,A,b,E,T,F){var D=F.key;function R(P){var z=Math.min(E,T-P*E);P===0&&(window.cancelAnimationFrame(b.currentRafs[D]),delete b.currentRafs[D],h(k,F.scissorX,F.scissorY,F.scissorWidth,F.viewBoxSize[1])),!b.clearOnly&&(F.count=2*z,F.offset=2*P*E,A(F),P*E+z<T&&(b.currentRafs[D]=window.requestAnimationFrame(function(){R(P+1)})),b.drawCompleted=!1)}b.drawCompleted||(f(k),b.drawCompleted=!0),R(0)}function p(k){return Math.max(s,Math.min(1-s,k))}function g(k,A){for(var b=new Array(256),E=0;E<256;E++)b[E]=k(E/255).concat(A);return b}function m(k,A){return(k>>>8*A)%256/255}function y(k,A,b){for(var E=new Array(k*(a+4)),T=0,F=0;F<k;F++){for(var D=0;D<a;D++)E[T++]=D<A.length?A[D].paddedUnitValues[F]:.5;E[T++]=m(F,2),E[T++]=m(F,1),E[T++]=m(F,0),E[T++]=p(b[F])}return E}function _(k,A,b){for(var E=new Array(A*8),T=0,F=0;F<A;F++)for(var D=0;D<2;D++)for(var R=0;R<4;R++){var P=k*4+R,z=b[F*64+P];P===63&&D===0&&(z*=-1),E[T++]=z}return E}function v(k){var A="0"+k;return A.slice(-2)}function x(k){return k<a?"p"+v(k+1)+"_"+v(k+4):"colors"}function S(k,A,b){for(var E=0;E<=a;E+=4)k[x(E)](_(E/4,A,b))}function M(k){for(var A={},b=0;b<=a;b+=4)A[x(b)]=k.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)});return A}function C(k,A,b,E,T,F,D,R,P,z,I,L,B,O){for(var G=[[],[]],W=0;W<64;W++)G[0][W]=W===T?1:0,G[1][W]=W===F?1:0;D*=O,R*=O,P*=O,z*=O;var X=k.lines.canvasOverdrag*O,Z=k.domain,J=k.canvasWidth*O,N=k.canvasHeight*O,H=k.pad.l*O,$=k.pad.b*O,U=k.layoutHeight*O,V=k.layoutWidth*O,j=k.deselectedLines.color,q=k.deselectedLines.opacity,Y=o.extendFlat({key:I,resolution:[J,N],viewBoxPos:[D+X,R],viewBoxSize:[P,z],i0:T,i1:F,dim0A:G[0].slice(0,16),dim0B:G[0].slice(16,32),dim0C:G[0].slice(32,48),dim0D:G[0].slice(48,64),dim1A:G[1].slice(0,16),dim1B:G[1].slice(16,32),dim1C:G[1].slice(32,48),dim1D:G[1].slice(48,64),drwLayer:L,contextColor:[j[0],j[1],j[2],q!=="auto"?j[3]*q:Math.max(1/255,Math.pow(1/k.lines.color.length,1/3))],scissorX:(E===A?0:D+X)+(H-X)+V*Z.x[0],scissorWidth:(E===b?J-D+X:P+.5)+(E===A?D+X:0),scissorY:R+$+U*Z.y[0],scissorHeight:z,viewportX:H-X+V*Z.x[0],viewportY:$+U*Z.y[0],viewportWidth:J,viewportHeight:N},B);return Y}function w(k){var A=l-1,b=Math.max(0,Math.floor(k[0]*A),0),E=Math.min(A,Math.ceil(k[1]*A),A);return[Math.min(b,E),Math.max(b,E)]}r.exports=function(k,A){var b=A.context,E=A.pick,T=A.regl,F=T._gl,D=F.getParameter(F.ALIASED_LINE_WIDTH_RANGE),R=Math.max(D[0],Math.min(D[1],A.viewModel.plotGlPixelRatio)),P={currentRafs:{},drawCompleted:!0,clearOnly:!1},z,I,L,B,O=M(T),G,W=T.texture(c),X=[];J(A);var Z=T({profile:!1,blend:{enable:b,func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:1,dstAlpha:1},equation:{rgb:"add",alpha:"add"},color:[0,0,0,0]},depth:{enable:!b,mask:!0,func:"less",range:[0,1]},cull:{enable:!0,face:"back"},scissor:{enable:!0,box:{x:T.prop("scissorX"),y:T.prop("scissorY"),width:T.prop("scissorWidth"),height:T.prop("scissorHeight")}},viewport:{x:T.prop("viewportX"),y:T.prop("viewportY"),width:T.prop("viewportWidth"),height:T.prop("viewportHeight")},dither:!1,vert:t,frag:i,primitive:"lines",lineWidth:R,attributes:O,uniforms:{resolution:T.prop("resolution"),viewBoxPos:T.prop("viewBoxPos"),viewBoxSize:T.prop("viewBoxSize"),dim0A:T.prop("dim0A"),dim1A:T.prop("dim1A"),dim0B:T.prop("dim0B"),dim1B:T.prop("dim1B"),dim0C:T.prop("dim0C"),dim1C:T.prop("dim1C"),dim0D:T.prop("dim0D"),dim1D:T.prop("dim1D"),loA:T.prop("loA"),hiA:T.prop("hiA"),loB:T.prop("loB"),hiB:T.prop("hiB"),loC:T.prop("loC"),hiC:T.prop("hiC"),loD:T.prop("loD"),hiD:T.prop("hiD"),palette:W,contextColor:T.prop("contextColor"),maskTexture:T.prop("maskTexture"),drwLayer:T.prop("drwLayer"),maskHeight:T.prop("maskHeight")},offset:T.prop("offset"),count:T.prop("count")});function J(j){z=j.model,I=j.viewModel,L=I.dimensions.slice(),B=L[0]?L[0].values.length:0;var q=z.lines,Y=E?q.color.map(function(te,ne){return ne/q.color.length}):q.color,K=y(B,L,Y);S(O,B,K),!b&&!E&&(W=T.texture(o.extendFlat({data:g(z.unitToColor,255)},c)))}function N(j){var q,Y,K,te=[[],[]];for(K=0;K<64;K++){var ne=!j&&K<L.length?L[K].brush.filter.getBounds():[-1/0,1/0];te[0][K]=ne[0],te[1][K]=ne[1]}var se=l*8,le=new Array(se);for(q=0;q<se;q++)le[q]=255;if(!j)for(q=0;q<L.length;q++){var ce=q%8,pe=(q-ce)/8,xe=Math.pow(2,ce),ye=L[q],fe=ye.brush.filter.get();if(!(fe.length<2)){var ae=w(fe[0])[1];for(Y=1;Y<fe.length;Y++){var ee=w(fe[Y]);for(K=ae+1;K<ee[0];K++)le[K*8+pe]&=~xe;ae=Math.max(ae,ee[1])}}}var ie={shape:[8,l],format:"alpha",type:"uint8",mag:"nearest",min:"nearest",data:le};return G?G(ie):G=T.texture(ie),{maskTexture:G,maskHeight:l,loA:te[0].slice(0,16),loB:te[0].slice(16,32),loC:te[0].slice(32,48),loD:te[0].slice(48,64),hiA:te[1].slice(0,16),hiB:te[1].slice(16,32),hiC:te[1].slice(32,48),hiD:te[1].slice(48,64)}}function H(j,q,Y){var K=j.length,te,ne,se,le=1/0,ce=-1/0;for(te=0;te<K;te++)j[te].dim0.canvasX<le&&(le=j[te].dim0.canvasX,ne=te),j[te].dim1.canvasX>ce&&(ce=j[te].dim1.canvasX,se=te);K===0&&h(T,0,0,z.canvasWidth,z.canvasHeight);var pe=N(b);for(te=0;te<K;te++){var xe=j[te],ye=xe.dim0.crossfilterDimensionIndex,fe=xe.dim1.crossfilterDimensionIndex,ae=xe.canvasX,ee=xe.canvasY,ie=ae+xe.panelSizeX,Q=xe.plotGlPixelRatio;if(q||!X[ye]||X[ye][0]!==ae||X[ye][1]!==ie){X[ye]=[ae,ie];var ue=C(z,ne,se,te,ye,fe,ae,ee,xe.panelSizeX,xe.panelSizeY,xe.dim0.crossfilterDimensionIndex,b?0:E?2:1,pe,Q);P.clearOnly=Y;var ge=q?z.lines.blockLineCount:B;d(T,Z,P,ge,B,ue)}}}function $(j,q){return T.read({x:j,y:q,width:1,height:1,data:u}),u}function U(j,q,Y,K){var te=new Uint8Array(4*Y*K);return T.read({x:j,y:q,width:Y,height:K,data:te}),te}function V(){k.style["pointer-events"]="none",W.destroy(),G&&G.destroy();for(var j in O)O[j].destroy()}return{render:H,readPixel:$,readPixels:U,destroy:V,update:J}}}}),uK=de({"src/traces/parcoords/parcoords.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=i.isArrayOrTypedArray,o=i.numberFormat,s=ta(),l=nn(),n=i.strRotate,u=i.strTranslate,c=Zo(),f=hn(),h=ks(),d=ip(),p=d.keyFun,g=d.repeat,m=d.unwrap,y=t9(),_=M_(),v=e9(),x=lK();function S(X,Z,J){return i.aggNums(X,null,Z,J)}function M(X,Z){return w(S(Math.min,X,Z),S(Math.max,X,Z))}function C(X){var Z=X.range;return Z?w(Z[0],Z[1]):M(X.values,X._length)}function w(X,Z){return(isNaN(X)||!isFinite(X))&&(X=0),(isNaN(Z)||!isFinite(Z))&&(Z=0),X===Z&&(X===0?(X-=1,Z+=1):(X*=.9,Z*=1.1)),[X,Z]}function k(X,Z){return Z?function(J,N){var H=Z[N];return H??X(J)}:X}function A(X,Z,J,N,H){var $=C(J);return N?t.scale.ordinal().domain(N.map(k(o(J.tickformat),H))).range(N.map(function(U){var V=(U-$[0])/($[1]-$[0]);return X-Z+V*(2*Z-X)})):t.scale.linear().domain($).range([X-Z,Z])}function b(X,Z){return t.scale.linear().range([Z,X-Z])}function E(X,Z){return t.scale.linear().domain(C(X)).range([Z,1-Z])}function T(X){if(X.tickvals){var Z=C(X);return t.scale.ordinal().domain(X.tickvals).range(X.tickvals.map(function(J){return(J-Z[0])/(Z[1]-Z[0])}))}}function F(X){var Z=X.map(function($){return $[0]}),J=X.map(function($){let[U,V,j]=s.rgbaArray($[1]);return t.rgb(U,V,j)}),N=function($){return function(U){return U[$]}},H="rgb".split("").map(function($){return t.scale.linear().clamp(!0).domain(Z).range(J.map(N($)))});return function($){return H.map(function(U){return U($)})}}function D(X){return X.dimensions.some(function(Z){return Z.brush.filterSpecified})}function R(X,Z,J){var N=m(Z),H=N.trace,$=y.convertTypedArray(N.lineColor),U=H.line,V={color:s.normalize(H.unselected.line.color),opacity:H.unselected.line.opacity},j=h.extractOpts(U),q=j.reversescale?h.flipScale(N.cscale):N.cscale,Y=H.domain,K=H.dimensions,te=X.width,ne=H.labelangle,se=H.labelside,le=H.labelfont,ce=H.tickfont,pe=H.rangefont,xe=i.extendDeepNoArrays({},U,{color:$.map(t.scale.linear().domain(C({values:$,range:[j.min,j.max],_length:H._length}))),blockLineCount:_.blockLineCount,canvasOverdrag:_.overdrag*_.canvasPixelRatio}),ye=Math.floor(te*(Y.x[1]-Y.x[0])),fe=Math.floor(X.height*(Y.y[1]-Y.y[0])),ae=X.margin||{l:80,r:80,t:100,b:80},ee=ye,ie=fe;return{key:J,colCount:K.filter(y.isVisible).length,dimensions:K,tickDistance:_.tickDistance,unitToColor:F(q),lines:xe,deselectedLines:V,labelAngle:ne,labelSide:se,labelFont:le,tickFont:ce,rangeFont:pe,layoutWidth:te,layoutHeight:X.height,domain:Y,translateX:Y.x[0]*te,translateY:X.height-Y.y[1]*X.height,pad:ae,canvasWidth:ee*_.canvasPixelRatio+2*xe.canvasOverdrag,canvasHeight:ie*_.canvasPixelRatio,width:ee,height:ie,canvasPixelRatio:_.canvasPixelRatio}}function P(X,Z,J){var N=J.width,H=J.height,$=J.dimensions,U=J.canvasPixelRatio,V=function(te){return N*te/Math.max(1,J.colCount-1)},j=_.verticalPadding/H,q=b(H,_.verticalPadding),Y={key:J.key,xScale:V,model:J,inBrushDrag:!1},K={};return Y.dimensions=$.filter(y.isVisible).map(function(te,ne){var se=E(te,j),le=K[te.label];K[te.label]=(le||0)+1;var ce=te.label+(le?"__"+le:""),pe=te.constraintrange,xe=pe&&pe.length;xe&&!a(pe[0])&&(pe=[pe]);var ye=xe?pe.map(function(je){return je.map(se)}):[[-1/0,1/0]],fe=function(){var je=Y;je.focusLayer&&je.focusLayer.render(je.panels,!0);var Ve=D(je);!X.contextShown()&&Ve?(je.contextLayer&&je.contextLayer.render(je.panels,!0),X.contextShown(!0)):X.contextShown()&&!Ve&&(je.contextLayer&&je.contextLayer.render(je.panels,!0,!0),X.contextShown(!1))},ae=te.values;ae.length>te._length&&(ae=ae.slice(0,te._length));var ee=te.tickvals,ie;function Q(je,Ve){return{val:je,text:ie[Ve]}}function ue(je,Ve){return je.val-Ve.val}if(a(ee)&&ee.length){i.isTypedArray(ee)&&(ee=Array.from(ee)),ie=te.ticktext,!a(ie)||!ie.length?ie=ee.map(o(te.tickformat)):ie.length>ee.length?ie=ie.slice(0,ee.length):ee.length>ie.length&&(ee=ee.slice(0,ie.length));for(var ge=1;ge<ee.length;ge++)if(ee[ge]<ee[ge-1]){for(var Me=ee.map(Q).sort(ue),Te=0;Te<ee.length;Te++)ee[Te]=Me[Te].val,ie[Te]=Me[Te].text;break}}else ee=void 0;return ae=y.convertTypedArray(ae),{key:ce,label:te.label,tickFormat:te.tickformat,tickvals:ee,ticktext:ie,ordinal:y.isOrdinal(te),multiselect:te.multiselect,xIndex:ne,crossfilterDimensionIndex:ne,visibleIndex:te._index,height:H,values:ae,paddedUnitValues:ae.map(se),unitTickvals:ee&&ee.map(se),xScale:V,x:V(ne),canvasX:V(ne)*U,unitToPaddedPx:q,domainScale:A(H,_.verticalPadding,te,ee,ie),ordinalScale:T(te),parent:Y,model:J,brush:v.makeBrush(X,xe,ye,function(){X.linePickActive(!1)},fe,function(je){if(Y.focusLayer.render(Y.panels,!0),Y.pickLayer&&Y.pickLayer.render(Y.panels,!0),X.linePickActive(!0),Z&&Z.filterChanged){var Ve=se.invert,Ze=je.map(function(Ke){return Ke.map(Ve).sort(i.sorterAsc)}).sort(function(Ke,vt){return Ke[0]-vt[0]});Z.filterChanged(Y.key,te._index,Ze)}})}}),Y}function z(X){X.classed(_.cn.axisExtentText,!0).attr("text-anchor","middle").style("cursor","default")}function I(){var X=!0,Z=!1;return{linePickActive:function(J){return arguments.length?X=!!J:X},contextShown:function(J){return arguments.length?Z=!!J:Z}}}function L(X,Z){var J=Z==="top"?1:-1,N=X*Math.PI/180,H=Math.sin(N),$=Math.cos(N);return{dir:J,dx:H,dy:$,degrees:X}}function B(X,Z,J){for(var N=Z.panels||(Z.panels=[]),H=X.data(),$=0;$<H.length-1;$++){var U=N[$]||(N[$]={}),V=H[$],j=H[$+1];U.dim0=V,U.dim1=j,U.canvasX=V.canvasX,U.panelSizeX=j.canvasX-V.canvasX,U.panelSizeY=Z.model.canvasHeight,U.y=0,U.canvasY=0,U.plotGlPixelRatio=J}}function O(X){for(var Z=0;Z<X.length;Z++)for(var J=0;J<X[Z].length;J++)for(var N=X[Z][J].trace,H=N.dimensions,$=0;$<H.length;$++){var U=H[$].values,V=H[$]._ax;V&&(V.range?V.range=w(V.range[0],V.range[1]):V.range=M(U,N._length),V.dtick||(V.dtick=.01*(Math.abs(V.range[1]-V.range[0])||1)),V.tickformat=H[$].tickformat,l.calcTicks(V),V.cleanRange())}}function G(X,Z){return l.tickText(X._ax,Z,!1).text}function W(X,Z){if(X.ordinal)return"";var J=X.domainScale.domain(),N=J[Z?J.length-1:0];return G(X.model.dimensions[X.visibleIndex],N)}r.exports=function(Z,J,N,H){var $=Z._context.staticPlot,U=Z._fullLayout,V=U._toppaper,j=U._glcontainer,q=Z._context.plotGlPixelRatio,Y=Z._fullLayout.paper_bgcolor;O(J);var K=I(),te=J.filter(function(Te){return m(Te).trace.visible}).map(R.bind(0,N)).map(P.bind(0,K,H));j.each(function(Te,je){return i.extendFlat(Te,te[je])});var ne=j.selectAll(".gl-canvas").each(function(Te){Te.viewModel=te[0],Te.viewModel.plotGlPixelRatio=q,Te.viewModel.paperColor=Y,Te.model=Te.viewModel?Te.viewModel.model:null}),se=null,le=ne.filter(function(Te){return Te.pick});le.style("pointer-events",$?"none":"auto").on("mousemove",function(Te){if(K.linePickActive()&&Te.lineLayer&&H&&H.hover){var je=t.event,Ve=this.width,Ze=this.height,Ke=t.mouse(this),vt=Ke[0],xt=Ke[1];if(vt<0||xt<0||vt>=Ve||xt>=Ze)return;var Pt=Te.lineLayer.readPixel(vt,Ze-1-xt),mt=Pt[3]!==0,Mt=mt?Pt[2]+256*(Pt[1]+256*Pt[0]):null,lt={x:vt,y:xt,clientX:je.clientX,clientY:je.clientY,dataIndex:Te.model.key,curveNumber:Mt};Mt!==se&&(mt?H.hover(lt):H.unhover&&H.unhover(lt),se=Mt)}}),ne.style("opacity",function(Te){return Te.pick?0:1}),V.style("background","rgba(255, 255, 255, 0)");var ce=V.selectAll("."+_.cn.parcoords).data(te,p);ce.exit().remove(),ce.enter().append("g").classed(_.cn.parcoords,!0).style("shape-rendering","crispEdges").style("pointer-events","none"),ce.attr("transform",function(Te){return u(Te.model.translateX,Te.model.translateY)});var pe=ce.selectAll("."+_.cn.parcoordsControlView).data(g,p);pe.enter().append("g").classed(_.cn.parcoordsControlView,!0),pe.attr("transform",function(Te){return u(Te.model.pad.l,Te.model.pad.t)});var xe=pe.selectAll("."+_.cn.yAxis).data(function(Te){return Te.dimensions},p);xe.enter().append("g").classed(_.cn.yAxis,!0),pe.each(function(Te){B(xe,Te,q)}),ne.each(function(Te){if(Te.viewModel){!Te.lineLayer||H?Te.lineLayer=x(this,Te):Te.lineLayer.update(Te),(Te.key||Te.key===0)&&(Te.viewModel[Te.key]=Te.lineLayer);var je=!Te.context||H;Te.lineLayer.render(Te.viewModel.panels,je)}}),xe.attr("transform",function(Te){return u(Te.xScale(Te.xIndex),0)}),xe.call(t.behavior.drag().origin(function(Te){return Te}).on("drag",function(Te){var je=Te.parent;K.linePickActive(!1),Te.x=Math.max(-_.overdrag,Math.min(Te.model.width+_.overdrag,t.event.x)),Te.canvasX=Te.x*Te.model.canvasPixelRatio,xe.sort(function(Ve,Ze){return Ve.x-Ze.x}).each(function(Ve,Ze){Ve.xIndex=Ze,Ve.x=Te===Ve?Ve.x:Ve.xScale(Ve.xIndex),Ve.canvasX=Ve.x*Ve.model.canvasPixelRatio}),B(xe,je,q),xe.filter(function(Ve){return Math.abs(Te.xIndex-Ve.xIndex)!==0}).attr("transform",function(Ve){return u(Ve.xScale(Ve.xIndex),0)}),t.select(this).attr("transform",u(Te.x,0)),xe.each(function(Ve,Ze,Ke){Ke===Te.parent.key&&(je.dimensions[Ze]=Ve)}),je.contextLayer&&je.contextLayer.render(je.panels,!1,!D(je)),je.focusLayer.render&&je.focusLayer.render(je.panels)}).on("dragend",function(Te){var je=Te.parent;Te.x=Te.xScale(Te.xIndex),Te.canvasX=Te.x*Te.model.canvasPixelRatio,B(xe,je,q),t.select(this).attr("transform",function(Ve){return u(Ve.x,0)}),je.contextLayer&&je.contextLayer.render(je.panels,!1,!D(je)),je.focusLayer&&je.focusLayer.render(je.panels),je.pickLayer&&je.pickLayer.render(je.panels,!0),K.linePickActive(!0),H&&H.axesMoved&&H.axesMoved(je.key,je.dimensions.map(function(Ve){return Ve.crossfilterDimensionIndex}))})),xe.exit().remove();var ye=xe.selectAll("."+_.cn.axisOverlays).data(g,p);ye.enter().append("g").classed(_.cn.axisOverlays,!0),ye.selectAll("."+_.cn.axis).remove();var fe=ye.selectAll("."+_.cn.axis).data(g,p);fe.enter().append("g").classed(_.cn.axis,!0),fe.each(function(Te){var je=Te.model.height/Te.model.tickDistance,Ve=Te.domainScale,Ze=Ve.domain();t.select(this).call(t.svg.axis().orient("left").tickSize(4).outerTickSize(2).ticks(je,Te.tickFormat).tickValues(Te.ordinal?Ze:null).tickFormat(function(Ke){return y.isOrdinal(Te)?Ke:G(Te.model.dimensions[Te.visibleIndex],Ke)}).scale(Ve)),f.font(fe.selectAll("text"),Te.model.tickFont)}),fe.selectAll(".domain, .tick>line").attr("fill","none").attr("stroke","black").attr("stroke-opacity",.25).attr("stroke-width","1px"),fe.selectAll("text").style("cursor","default");var ae=ye.selectAll("."+_.cn.axisHeading).data(g,p);ae.enter().append("g").classed(_.cn.axisHeading,!0);var ee=ae.selectAll("."+_.cn.axisTitle).data(g,p);ee.enter().append("text").classed(_.cn.axisTitle,!0).attr("text-anchor","middle").style("cursor","ew-resize").style("pointer-events",$?"none":"auto"),ee.text(function(Te){return Te.label}).each(function(Te){var je=t.select(this);f.font(je,Te.model.labelFont),c.convertToTspans(je,Z)}).attr("transform",function(Te){var je=L(Te.model.labelAngle,Te.model.labelSide),Ve=_.axisTitleOffset;return(je.dir>0?"":u(0,2*Ve+Te.model.height))+n(je.degrees)+u(-Ve*je.dx,-Ve*je.dy)}).attr("text-anchor",function(Te){var je=L(Te.model.labelAngle,Te.model.labelSide),Ve=Math.abs(je.dx),Ze=Math.abs(je.dy);return 2*Ve>Ze?je.dir*je.dx<0?"start":"end":"middle"});var ie=ye.selectAll("."+_.cn.axisExtent).data(g,p);ie.enter().append("g").classed(_.cn.axisExtent,!0);var Q=ie.selectAll("."+_.cn.axisExtentTop).data(g,p);Q.enter().append("g").classed(_.cn.axisExtentTop,!0),Q.attr("transform",u(0,-_.axisExtentOffset));var ue=Q.selectAll("."+_.cn.axisExtentTopText).data(g,p);ue.enter().append("text").classed(_.cn.axisExtentTopText,!0).call(z),ue.text(function(Te){return W(Te,!0)}).each(function(Te){f.font(t.select(this),Te.model.rangeFont)});var ge=ie.selectAll("."+_.cn.axisExtentBottom).data(g,p);ge.enter().append("g").classed(_.cn.axisExtentBottom,!0),ge.attr("transform",function(Te){return u(0,Te.model.height+_.axisExtentOffset)});var Me=ge.selectAll("."+_.cn.axisExtentBottomText).data(g,p);Me.enter().append("text").classed(_.cn.axisExtentBottomText,!0).attr("dy","0.75em").call(z),Me.text(function(Te){return W(Te,!1)}).each(function(Te){f.font(t.select(this),Te.model.rangeFont)}),v.ensureAxisBrush(ye,Y,Z)}}}),r9=de({"src/traces/parcoords/plot.js"(n,r){"use strict";var t=uK(),i=P4(),a=t9().isVisible,o={};function s(u,c,f){var h=c.indexOf(f),d=u.indexOf(h);return d===-1&&(d+=c.length),d}function l(u,c){return function(h,d){return s(u,c,h)-s(u,c,d)}}var n=r.exports=function(c,f){var h=c._fullLayout,d=i(c,[],o);if(d){var p={},g={},m={},y=h._size;f.forEach(function(M,C){var w=M[0].trace,k=m[C]=w.index;p[C]=c.data[k].dimensions,g[C]=c.data[k].dimensions.slice()});var _=function(M,C,w){var k=g[M][C],A=w.map(function(R){return R.slice()}),b="dimensions["+C+"].constraintrange",E=h._tracePreGUI[c._fullData[m[M]].uid];if(E[b]===void 0){var T=k.constraintrange;E[b]=T||null}var F=c._fullData[m[M]].dimensions[C];A.length?(A.length===1&&(A=A[0]),k.constraintrange=A,F.constraintrange=A.slice(),A=[A]):(delete k.constraintrange,delete F.constraintrange,A=null);var D={};D[b]=A,c.emit("plotly_restyle",[D,[m[M]]])},v=function(M){c.emit("plotly_hover",M)},x=function(M){c.emit("plotly_unhover",M)},S=function(M,C){var w=l(C,g[M].filter(a));p[M].sort(w),g[M].filter(function(k){return!a(k)}).sort(function(k){return g[M].indexOf(k)}).forEach(function(k){p[M].splice(p[M].indexOf(k),1),p[M].splice(g[M].indexOf(k),0,k)}),c.emit("plotly_restyle",[{dimensions:[p[M]]},[m[M]]])};t(c,f,{width:y.w,height:y.h,margin:{t:y.t,r:y.r,b:y.b,l:y.l}},{filterChanged:_,hover:v,unhover:x,axesMoved:S})}};n.reglPrecompiled=o}}),cK=de({"src/traces/parcoords/base_plot.js"(e){"use strict";var r=Yr(),t=$u().getModuleCalcData,i=r9(),a=Oh();e.name="parcoords",e.plot=function(o){var s=t(o.calcdata,"parcoords")[0];s.length&&i(o,s)},e.clean=function(o,s,l,n){var u=n._has&&n._has("parcoords"),c=s._has&&s._has("parcoords");u&&!c&&(n._paperdiv.selectAll(".parcoords").remove(),n._glimages.selectAll("*").remove())},e.toSVG=function(o){var s=o._fullLayout._glimages,l=r.select(o).selectAll(".svg-container"),n=l.filter(function(c,f){return f===l.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus");function u(){var c=this,f=c.toDataURL("image/png"),h=s.append("svg:image");h.attr({xmlns:a.svg,"xlink:href":f,preserveAspectRatio:"none",x:0,y:0,width:c.style.width,height:c.style.height})}n.each(u),window.setTimeout(function(){r.selectAll("#filterBarPattern").attr("id","filterBarPattern")},60)}}}),fK=de({"src/traces/parcoords/base_index.js"(e,r){"use strict";r.exports={attributes:Q7(),supplyDefaults:oK(),calc:sK(),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcoords",basePlotModule:cK(),categories:["gl","regl","noOpacity","noHover"],meta:{}}}}),hK=de({"src/traces/parcoords/index.js"(e,r){"use strict";var t=fK();t.plot=r9(),r.exports=t}}),dK=de({"lib/parcoords.js"(e,r){"use strict";r.exports=hK()}}),i9=de({"src/traces/parcats/attributes.js"(e,r){"use strict";var t=fn().extendFlat,i=ri(),a=us(),o=cs(),{hovertemplateAttrs:s,templatefallbackAttrs:l}=Vo(),n=Is().attributes,u=t({editType:"calc"},o("line",{editTypeOverride:"calc"}),{shape:{valType:"enumerated",values:["linear","hspline"],dflt:"linear",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability"]}),hovertemplatefallback:l({editType:"plot"})});r.exports={domain:n({name:"parcats",trace:!0,editType:"calc"}),hoverinfo:t({},i.hoverinfo,{flags:["count","probability"],editType:"plot",arrayOk:!1}),hoveron:{valType:"enumerated",values:["category","color","dimension"],dflt:"category",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability","category","categorycount","colorcount","bandcolorcount"]}),hovertemplatefallback:l({editType:"plot"}),arrangement:{valType:"enumerated",values:["perpendicular","freeform","fixed"],dflt:"perpendicular",editType:"plot"},bundlecolors:{valType:"boolean",dflt:!0,editType:"plot"},sortpaths:{valType:"enumerated",values:["forward","backward"],dflt:"forward",editType:"plot"},labelfont:a({editType:"calc"}),tickfont:a({autoShadowDflt:!0,editType:"calc"}),dimensions:{_isLinkedToArray:"dimension",label:{valType:"string",editType:"calc"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},values:{valType:"data_array",dflt:[],editType:"calc"},displayindex:{valType:"integer",editType:"calc"},editType:"calc",visible:{valType:"boolean",dflt:!0,editType:"calc"}},line:u,counts:{valType:"number",min:0,dflt:1,arrayOk:!0,editType:"calc"},customdata:void 0,hoverlabel:void 0,ids:void 0,legend:void 0,legendgroup:void 0,legendrank:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}}}),pK=de({"src/traces/parcats/defaults.js"(e,r){"use strict";var t=Qt(),i=Wu().hasColorscale,a=hu(),o=Is().defaults,s=fc(),l=i9(),n=I4(),u=Do().isTypedArraySpec;function c(h,d,p,g,m){m("line.shape"),m("line.hovertemplate"),m("line.hovertemplatefallback");var y=m("line.color",g.colorway[0]);if(i(h,"line")&&t.isArrayOrTypedArray(y)){if(y.length)return m("line.colorscale"),a(h,d,g,m,{prefix:"line.",cLetter:"c"}),y.length;d.line.color=p}return 1/0}function f(h,d){function p(S,M){return t.coerce(h,d,l.dimensions,S,M)}var g=p("values"),m=p("visible");if(g&&g.length||(m=d.visible=!1),m){p("label"),p("displayindex",d._index);var y=h.categoryarray,_=t.isArrayOrTypedArray(y)&&y.length>0||u(y),v;_&&(v="array");var x=p("categoryorder",v);x==="array"?(p("categoryarray"),p("ticktext")):(delete h.categoryarray,delete h.ticktext),!_&&x==="array"&&(d.categoryorder="trace")}}r.exports=function(d,p,g,m){function y(S,M){return t.coerce(d,p,l,S,M)}var _=s(d,p,{name:"dimensions",handleItemDefaults:f}),v=c(d,p,g,m,y);o(p,m,y),(!Array.isArray(_)||!_.length)&&(p.visible=!1),n(p,_,"values",v),y("hoveron"),y("hovertemplate"),y("hovertemplatefallback"),y("arrangement"),y("bundlecolors"),y("sortpaths"),y("counts");var x=m.font;t.coerceFont(y,"labelfont",x,{overrideDflt:{size:Math.round(x.size)}}),t.coerceFont(y,"tickfont",x,{autoShadowDflt:!0,overrideDflt:{size:Math.round(x.size/1.2)}})}}}),vK=de({"src/traces/parcats/calc.js"(e,r){"use strict";var t=ip().wrap,i=Wu().hasColorscale,a=hc(),o=mE(),s=hn(),l=Qt(),n=da();r.exports=function(x,S){var M=l.filterVisible(S.dimensions);if(M.length===0)return[];var C=M.map(function(N){var H;if(N.categoryorder==="trace")H=null;else if(N.categoryorder==="array")H=N.categoryarray;else{H=o(N.values);for(var $=!0,U=0;U<H.length;U++)if(!n(H[U])){$=!1;break}H.sort($?l.sorterAsc:void 0),N.categoryorder==="category descending"&&(H=H.reverse())}return g(N.values,H)}),w,k,A;l.isArrayOrTypedArray(S.counts)?w=S.counts:w=[S.counts],m(M),M.forEach(function(N,H){y(N,C[H])});var b=S.line,E;b?(i(S,"line")&&a(x,S,{vals:S.line.color,containerStr:"line",cLetter:"c"}),E=s.tryColorscale(b)):E=l.identity;function T(N){var H,$;return l.isArrayOrTypedArray(b.color)?(H=b.color[N%b.color.length],$=H):H=b.color,{color:E(H),rawColor:$}}var F=M[0].values.length,D={},R=C.map(function(N){return N.inds});A=0;var P,z;for(P=0;P<F;P++){var I=[];for(z=0;z<R.length;z++)I.push(R[z][P]);k=w[P%w.length],A+=k;var L=T(P),B=I+"-"+L.rawColor;D[B]===void 0&&(D[B]=d(I,L.color,L.rawColor)),p(D[B],P,k)}var O=M.map(function(N,H){return c(H,N._index,N._displayindex,N.label,A)});for(P=0;P<F;P++)for(k=w[P%w.length],z=0;z<O.length;z++){var G=O[z].containerInd,W=C[z].inds[P],X=O[z].categories;if(X[W]===void 0){var Z=S.dimensions[G]._categoryarray[W],J=S.dimensions[G]._ticktext[W];X[W]=f(z,W,Z,J)}h(X[W],P,k)}return t(u(O,D,A))};function u(v,x,S){var M=v.map(function(C){return C.categories.length}).reduce(function(C,w){return Math.max(C,w)});return{dimensions:v,paths:x,trace:void 0,maxCats:M,count:S}}function c(v,x,S,M,C){return{dimensionInd:v,containerInd:x,displayInd:S,dimensionLabel:M,count:C,categories:[],dragX:null}}function f(v,x,S,M){return{dimensionInd:v,categoryInd:x,categoryValue:S,displayInd:x,categoryLabel:M,valueInds:[],count:0,dragY:null}}function h(v,x,S){v.valueInds.push(x),v.count+=S}function d(v,x,S){return{categoryInds:v,color:x,rawColor:S,valueInds:[],count:0}}function p(v,x,S){v.valueInds.push(x),v.count+=S}function g(v,x){x==null?x=[]:x=x.map(function(E){return E});var S={},M={},C=[];x.forEach(function(E,T){S[E]=0,M[E]=T});for(var w=0;w<v.length;w++){var k=v[w],A;S[k]===void 0?(S[k]=1,A=x.push(k)-1,M[k]=A):(S[k]++,A=M[k]),C.push(A)}var b=x.map(function(E){return S[E]});return{uniqueValues:x,uniqueCounts:b,inds:C}}function m(v){var x=v.map(function(M){return M.displayindex}),S;if(_(x))for(S=0;S<v.length;S++)v[S]._displayindex=v[S].displayindex;else for(S=0;S<v.length;S++)v[S]._displayindex=S}function y(v,x){v._categoryarray=x.uniqueValues,v.ticktext===null||v.ticktext===void 0?v._ticktext=[]:v._ticktext=v.ticktext.slice();for(var S=v._ticktext.length;S<x.uniqueValues.length;S++)v._ticktext.push(x.uniqueValues[S])}function _(v){for(var x=new Array(v.length),S=0;S<v.length;S++){if(v[S]<0||v[S]>=v.length||x[v[S]]!==void 0)return!1;x[v[S]]=!0}return!0}}}),mK=de({"src/traces/parcats/parcats.js"(e,r){"use strict";var t=Yr(),i=(jv(),ti(M0)).interpolateNumber,a=Iw(),o=ta(),s=$s(),l=Qt(),n=l.strTranslate,u=hn(),c=Zo();function f(V,j,q,Y){var K=j._context.staticPlot,te=V.map(J.bind(0,j,q)),ne=Y.selectAll("g.parcatslayer").data([null]);ne.enter().append("g").attr("class","parcatslayer").style("pointer-events",K?"none":"all");var se=ne.selectAll("g.trace.parcats").data(te,h),le=se.enter().append("g").attr("class","trace parcats");se.attr("transform",function(ue){return n(ue.x,ue.y)}),le.append("g").attr("class","paths");var ce=se.select("g.paths"),pe=ce.selectAll("path.path").data(function(ue){return ue.paths},h);pe.attr("fill",function(ue){return ue.model.color});var xe=pe.enter().append("path").attr("class","path").attr("stroke-opacity",0).attr("fill",function(ue){return ue.model.color}).attr("fill-opacity",0);S(xe),pe.attr("d",function(ue){return ue.svgD}),xe.empty()||pe.sort(p),pe.exit().remove(),pe.on("mouseover",m).on("mouseout",y).on("click",x),le.append("g").attr("class","dimensions");var ye=se.select("g.dimensions"),fe=ye.selectAll("g.dimension").data(function(ue){return ue.dimensions},h);fe.enter().append("g").attr("class","dimension"),fe.attr("transform",function(ue){return n(ue.x,0)}),fe.exit().remove();var ae=fe.selectAll("g.category").data(function(ue){return ue.categories},h),ee=ae.enter().append("g").attr("class","category");ae.attr("transform",function(ue){return n(0,ue.y)}),ee.append("rect").attr("class","catrect").attr("pointer-events","none"),ae.select("rect.catrect").attr("fill","none").attr("width",function(ue){return ue.width}).attr("height",function(ue){return ue.height}),w(ee);var ie=ae.selectAll("rect.bandrect").data(function(ue){return ue.bands},h);ie.each(function(){l.raiseToTop(this)}),ie.attr("fill",function(ue){return ue.color});var Q=ie.enter().append("rect").attr("class","bandrect").attr("stroke-opacity",0).attr("fill",function(ue){return ue.color}).attr("fill-opacity",0);ie.attr("fill",function(ue){return ue.color}).attr("width",function(ue){return ue.width}).attr("height",function(ue){return ue.height}).attr("y",function(ue){return ue.y}).attr("cursor",function(ue){return ue.parcatsViewModel.arrangement==="fixed"?"default":ue.parcatsViewModel.arrangement==="perpendicular"?"ns-resize":"move"}),A(Q),ie.exit().remove(),ee.append("text").attr("class","catlabel").attr("pointer-events","none"),ae.select("text.catlabel").attr("text-anchor",function(ue){return d(ue)?"start":"end"}).attr("alignment-baseline","middle").style("fill","rgb(0, 0, 0)").attr("x",function(ue){return d(ue)?ue.width+5:-5}).attr("y",function(ue){return ue.height/2}).text(function(ue){return ue.model.categoryLabel}).each(function(ue){u.font(t.select(this),ue.parcatsViewModel.categorylabelfont),c.convertToTspans(t.select(this),j)}),ee.append("text").attr("class","dimlabel"),ae.select("text.dimlabel").attr("text-anchor","middle").attr("alignment-baseline","baseline").attr("cursor",function(ue){return ue.parcatsViewModel.arrangement==="fixed"?"default":"ew-resize"}).attr("x",function(ue){return ue.width/2}).attr("y",-5).text(function(ue,ge){return ge===0?ue.parcatsViewModel.model.dimensions[ue.model.dimensionInd].dimensionLabel:null}).each(function(ue){u.font(t.select(this),ue.parcatsViewModel.labelfont)}),ae.selectAll("rect.bandrect").on("mouseover",I).on("mouseout",L),ae.exit().remove(),fe.call(t.behavior.drag().origin(function(ue){return{x:ue.x,y:0}}).on("dragstart",B).on("drag",O).on("dragend",G)),se.each(function(ue){ue.traceSelection=t.select(this),ue.pathSelection=t.select(this).selectAll("g.paths").selectAll("path.path"),ue.dimensionSelection=t.select(this).selectAll("g.dimensions").selectAll("g.dimension")}),se.exit().remove()}r.exports=function(V,j,q,Y){f(q,V,Y,j)};function h(V){return V.key}function d(V){var j=V.parcatsViewModel.dimensions.length,q=V.parcatsViewModel.dimensions[j-1].model.dimensionInd;return V.model.dimensionInd===q}function p(V,j){return V.model.rawColor>j.model.rawColor?1:V.model.rawColor<j.model.rawColor?-1:0}function g(V,j){for(var q=0;q<Math.min(V.length,j.length);q++){var Y=V[q],K=j[q];if(Y<K)return-1;if(Y>K)return 1;if(Y!==K){var te=isNaN(Y),ne=isNaN(K);if(te!==ne)return te?1:-1}}return V.length-j.length}function m(V){if(!V.parcatsViewModel.dragDimension&&V.parcatsViewModel.hoverinfoItems.indexOf("skip")===-1){l.raiseToTop(this),M(t.select(this));var j=_(V),q=v(V);if(V.parcatsViewModel.graphDiv.emit("plotly_hover",{points:j,event:t.event,constraints:q}),V.parcatsViewModel.hoverinfoItems.indexOf("none")===-1){var Y=t.mouse(this)[0],K=V.parcatsViewModel.graphDiv,te=V.parcatsViewModel.trace,ne=K._fullLayout,se=ne._paperdiv.node().getBoundingClientRect(),le=V.parcatsViewModel.graphDiv.getBoundingClientRect(),ce,pe,xe;for(xe=0;xe<V.leftXs.length-1;xe++)if(V.leftXs[xe]+V.dimWidths[xe]-2<=Y&&Y<=V.leftXs[xe+1]+2){var ye=V.parcatsViewModel.dimensions[xe],fe=V.parcatsViewModel.dimensions[xe+1];ce=(ye.x+ye.width+fe.x)/2,pe=(V.topYs[xe]+V.topYs[xe+1]+V.height)/2;break}var ae=V.parcatsViewModel.x+ce,ee=V.parcatsViewModel.y+pe,ie=o.mostReadable(V.model.color),Q=V.model.count,ue=Q/V.parcatsViewModel.model.count,ge={countLabel:Q,probabilityLabel:ue.toFixed(3)},Me=[];V.parcatsViewModel.hoverinfoItems.indexOf("count")!==-1&&Me.push(["Count:",ge.countLabel].join(" ")),V.parcatsViewModel.hoverinfoItems.indexOf("probability")!==-1&&Me.push(["P:",ge.probabilityLabel].join(" "));var Te=Me.join("<br>"),je=t.mouse(K)[0];s.loneHover({trace:te,x:ae-se.left+le.left,y:ee-se.top+le.top,text:Te,color:V.model.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:10,fontColor:ie,idealAlign:je<ae?"right":"left",hovertemplate:(te.line||{}).hovertemplate,hovertemplateLabels:ge,eventData:[{data:te._input,fullData:te,count:Q,probability:ue}]},{container:ne._hoverlayer.node(),outerContainer:ne._paper.node(),gd:K})}}}function y(V){if(!V.parcatsViewModel.dragDimension&&(S(t.select(this)),s.loneUnhover(V.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),V.parcatsViewModel.pathSelection.sort(p),V.parcatsViewModel.hoverinfoItems.indexOf("skip")===-1)){var j=_(V),q=v(V);V.parcatsViewModel.graphDiv.emit("plotly_unhover",{points:j,event:t.event,constraints:q})}}function _(V){for(var j=[],q=W(V.parcatsViewModel),Y=0;Y<V.model.valueInds.length;Y++){var K=V.model.valueInds[Y];j.push({curveNumber:q,pointNumber:K})}return j}function v(V){for(var j={},q=V.parcatsViewModel.model.dimensions,Y=0;Y<q.length;Y++){var K=q[Y],te=K.categories[V.model.categoryInds[Y]];j[K.containerInd]=te.categoryValue}return V.model.rawColor!==void 0&&(j.color=V.model.rawColor),j}function x(V){if(V.parcatsViewModel.hoverinfoItems.indexOf("skip")===-1){var j=_(V),q=v(V);V.parcatsViewModel.graphDiv.emit("plotly_click",{points:j,event:t.event,constraints:q})}}function S(V){V.attr("fill",function(j){return j.model.color}).attr("fill-opacity",.6).attr("stroke","lightgray").attr("stroke-width",.2).attr("stroke-opacity",1)}function M(V){V.attr("fill-opacity",.8).attr("stroke",j=>o.mostReadable(j.model.color)).attr("stroke-width",.3)}function C(V){V.select("rect.catrect").attr("stroke","black").attr("stroke-width",2.5)}function w(V){V.select("rect.catrect").attr("stroke","black").attr("stroke-width",1).attr("stroke-opacity",1)}function k(V){V.attr("stroke","black").attr("stroke-width",1.5)}function A(V){V.attr("stroke","black").attr("stroke-width",.2).attr("stroke-opacity",1).attr("fill-opacity",1)}function b(V){var j=V.parcatsViewModel.pathSelection,q=V.categoryViewModel.model.dimensionInd,Y=V.categoryViewModel.model.categoryInd;return j.filter(function(K){return K.model.categoryInds[q]===Y&&K.model.color===V.color})}function E(V){var j=t.select(V.parentNode).selectAll("rect.bandrect");j.each(function(q){var Y=b(q);M(Y),Y.each(function(){l.raiseToTop(this)})}),C(t.select(V.parentNode))}function T(V){var j=t.select(V).datum(),q=b(j);M(q),q.each(function(){l.raiseToTop(this)}),t.select(V.parentNode).selectAll("rect.bandrect").filter(function(Y){return Y.color===j.color}).each(function(){l.raiseToTop(this),k(t.select(this))})}function F(V,j,q){var Y=t.select(V).datum(),K=Y.categoryViewModel.model,te=Y.parcatsViewModel.graphDiv,ne=t.select(V.parentNode).selectAll("rect.bandrect"),se=[];ne.each(function(ce){var pe=b(ce);pe.each(function(xe){Array.prototype.push.apply(se,_(xe))})});var le={};le[K.dimensionInd]=K.categoryValue,te.emit(j,{points:se,event:q,constraints:le})}function D(V,j,q){var Y=t.select(V).datum(),K=Y.categoryViewModel.model,te=Y.parcatsViewModel.graphDiv,ne=b(Y),se=[];ne.each(function(ce){Array.prototype.push.apply(se,_(ce))});var le={};le[K.dimensionInd]=K.categoryValue,Y.rawColor!==void 0&&(le.color=Y.rawColor),te.emit(j,{points:se,event:q,constraints:le})}function R(V,j,q){V._fullLayout._calcInverseTransform(V);var Y=V._fullLayout._invScaleX,K=V._fullLayout._invScaleY,te=t.select(q.parentNode).select("rect.catrect"),ne=te.node().getBoundingClientRect(),se=te.datum(),le=se.parcatsViewModel,ce=le.model.dimensions[se.model.dimensionInd],pe=le.trace,xe=ne.top+ne.height/2,ye,fe;le.dimensions.length>1&&ce.displayInd===le.dimensions.length-1?(ye=ne.left,fe="left"):(ye=ne.left+ne.width,fe="right");var ae=se.model.count,ee=se.model.categoryLabel,ie=ae/se.parcatsViewModel.model.count,Q={countLabel:ae,categoryLabel:ee,probabilityLabel:ie.toFixed(3)},ue=[];se.parcatsViewModel.hoverinfoItems.indexOf("count")!==-1&&ue.push(["Count:",Q.countLabel].join(" ")),se.parcatsViewModel.hoverinfoItems.indexOf("probability")!==-1&&ue.push(["P("+Q.categoryLabel+"):",Q.probabilityLabel].join(" "));var ge=ue.join("<br>");return{trace:pe,x:Y*(ye-j.left),y:K*(xe-j.top),text:ge,color:"lightgray",borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:12,fontColor:"black",idealAlign:fe,hovertemplate:pe.hovertemplate,hovertemplateLabels:Q,eventData:[{data:pe._input,fullData:pe,count:ae,category:ee,probability:ie}]}}function P(V,j,q){var Y=[];return t.select(q.parentNode.parentNode).selectAll("g.category").select("rect.catrect").each(function(){var K=this;Y.push(R(V,j,K))}),Y}function z(V,j,q){V._fullLayout._calcInverseTransform(V);var Y=V._fullLayout._invScaleX,K=V._fullLayout._invScaleY,te=q.getBoundingClientRect(),ne=t.select(q).datum(),se=ne.categoryViewModel,le=se.parcatsViewModel,ce=le.model.dimensions[se.model.dimensionInd],pe=le.trace,xe=te.y+te.height/2,ye,fe;le.dimensions.length>1&&ce.displayInd===le.dimensions.length-1?(ye=te.left,fe="left"):(ye=te.left+te.width,fe="right");var ae=se.model.categoryLabel,ee=ne.parcatsViewModel.model.count,ie=0;ne.categoryViewModel.bands.forEach(function(vt){vt.color===ne.color&&(ie+=vt.count)});var Q=se.model.count,ue=0;le.pathSelection.each(function(vt){vt.model.color===ne.color&&(ue+=vt.model.count)});var ge=ie/ee,Me=ie/ue,Te=ie/Q,je={countLabel:ie,categoryLabel:ae,probabilityLabel:ge.toFixed(3)},Ve=[];se.parcatsViewModel.hoverinfoItems.indexOf("count")!==-1&&Ve.push(["Count:",je.countLabel].join(" ")),se.parcatsViewModel.hoverinfoItems.indexOf("probability")!==-1&&(Ve.push("P(color \u2229 "+ae+"): "+je.probabilityLabel),Ve.push("P("+ae+" | color): "+Me.toFixed(3)),Ve.push("P(color | "+ae+"): "+Te.toFixed(3)));var Ze=Ve.join("<br>"),Ke=o.mostReadable(ne.color);return{trace:pe,x:Y*(ye-j.left),y:K*(xe-j.top),text:Ze,color:ne.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontColor:Ke,fontSize:10,idealAlign:fe,hovertemplate:pe.hovertemplate,hovertemplateLabels:je,eventData:[{data:pe._input,fullData:pe,category:ae,count:ee,probability:ge,categorycount:Q,colorcount:ue,bandcolorcount:ie}]}}function I(V){if(!V.parcatsViewModel.dragDimension&&V.parcatsViewModel.hoverinfoItems.indexOf("skip")===-1){var j=t.mouse(this)[1];if(j<-1)return;var q=V.parcatsViewModel.graphDiv,Y=q._fullLayout,K=Y._paperdiv.node().getBoundingClientRect(),te=V.parcatsViewModel.hoveron,ne=this;if(te==="color"?(T(ne),D(ne,"plotly_hover",t.event)):(E(ne),F(ne,"plotly_hover",t.event)),V.parcatsViewModel.hoverinfoItems.indexOf("none")===-1){var se;te==="category"?se=R(q,K,ne):te==="color"?se=z(q,K,ne):te==="dimension"&&(se=P(q,K,ne)),se&&s.loneHover(se,{container:Y._hoverlayer.node(),outerContainer:Y._paper.node(),gd:q})}}}function L(V){var j=V.parcatsViewModel;if(!j.dragDimension&&(S(j.pathSelection),w(j.dimensionSelection.selectAll("g.category")),A(j.dimensionSelection.selectAll("g.category").selectAll("rect.bandrect")),s.loneUnhover(j.graphDiv._fullLayout._hoverlayer.node()),j.pathSelection.sort(p),j.hoverinfoItems.indexOf("skip")===-1)){var q=V.parcatsViewModel.hoveron,Y=this;q==="color"?D(Y,"plotly_unhover",t.event):F(Y,"plotly_unhover",t.event)}}function B(V){V.parcatsViewModel.arrangement!=="fixed"&&(V.dragDimensionDisplayInd=V.model.displayInd,V.initialDragDimensionDisplayInds=V.parcatsViewModel.model.dimensions.map(function(j){return j.displayInd}),V.dragHasMoved=!1,V.dragCategoryDisplayInd=null,t.select(this).selectAll("g.category").select("rect.catrect").each(function(j){var q=t.mouse(this)[0],Y=t.mouse(this)[1];-2<=q&&q<=j.width+2&&-2<=Y&&Y<=j.height+2&&(V.dragCategoryDisplayInd=j.model.displayInd,V.initialDragCategoryDisplayInds=V.model.categories.map(function(K){return K.displayInd}),j.model.dragY=j.y,l.raiseToTop(this.parentNode),t.select(this.parentNode).selectAll("rect.bandrect").each(function(K){K.y<Y&&Y<=K.y+K.height&&(V.potentialClickBand=this)}))}),V.parcatsViewModel.dragDimension=V,s.loneUnhover(V.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function O(V){if(V.parcatsViewModel.arrangement!=="fixed"&&(V.dragHasMoved=!0,V.dragDimensionDisplayInd!==null)){var j=V.dragDimensionDisplayInd,q=j-1,Y=j+1,K=V.parcatsViewModel.dimensions[j];if(V.dragCategoryDisplayInd!==null){var te=K.categories[V.dragCategoryDisplayInd];te.model.dragY+=t.event.dy;var ne=te.model.dragY,se=te.model.displayInd,le=K.categories,ce=le[se-1],pe=le[se+1];ce!==void 0&&ne<ce.y+ce.height/2&&(te.model.displayInd=ce.model.displayInd,ce.model.displayInd=se),pe!==void 0&&ne+te.height>pe.y+pe.height/2&&(te.model.displayInd=pe.model.displayInd,pe.model.displayInd=se),V.dragCategoryDisplayInd=te.model.displayInd}if(V.dragCategoryDisplayInd===null||V.parcatsViewModel.arrangement==="freeform"){K.model.dragX=t.event.x;var xe=V.parcatsViewModel.dimensions[q],ye=V.parcatsViewModel.dimensions[Y];xe!==void 0&&K.model.dragX<xe.x+xe.width&&(K.model.displayInd=xe.model.displayInd,xe.model.displayInd=j),ye!==void 0&&K.model.dragX+K.width>ye.x&&(K.model.displayInd=ye.model.displayInd,ye.model.displayInd=V.dragDimensionDisplayInd),V.dragDimensionDisplayInd=K.model.displayInd}$(V.parcatsViewModel),H(V.parcatsViewModel),Z(V.parcatsViewModel),X(V.parcatsViewModel)}}function G(V){if(V.parcatsViewModel.arrangement!=="fixed"&&V.dragDimensionDisplayInd!==null){t.select(this).selectAll("text").attr("font-weight","normal");var j={},q=W(V.parcatsViewModel),Y=V.parcatsViewModel.model.dimensions.map(function(ye){return ye.displayInd}),K=V.initialDragDimensionDisplayInds.some(function(ye,fe){return ye!==Y[fe]});K&&Y.forEach(function(ye,fe){var ae=V.parcatsViewModel.model.dimensions[fe].containerInd;j["dimensions["+ae+"].displayindex"]=ye});var te=!1;if(V.dragCategoryDisplayInd!==null){var ne=V.model.categories.map(function(ye){return ye.displayInd});if(te=V.initialDragCategoryDisplayInds.some(function(ye,fe){return ye!==ne[fe]}),te){var se=V.model.categories.slice().sort(function(ye,fe){return ye.displayInd-fe.displayInd}),le=se.map(function(ye){return ye.categoryValue}),ce=se.map(function(ye){return ye.categoryLabel});j["dimensions["+V.model.containerInd+"].categoryarray"]=[le],j["dimensions["+V.model.containerInd+"].ticktext"]=[ce],j["dimensions["+V.model.containerInd+"].categoryorder"]="array"}}if(V.parcatsViewModel.hoverinfoItems.indexOf("skip")===-1&&!V.dragHasMoved&&V.potentialClickBand&&(V.parcatsViewModel.hoveron==="color"?D(V.potentialClickBand,"plotly_click",t.event.sourceEvent):F(V.potentialClickBand,"plotly_click",t.event.sourceEvent)),V.model.dragX=null,V.dragCategoryDisplayInd!==null){var pe=V.parcatsViewModel.dimensions[V.dragDimensionDisplayInd].categories[V.dragCategoryDisplayInd];pe.model.dragY=null,V.dragCategoryDisplayInd=null}V.dragDimensionDisplayInd=null,V.parcatsViewModel.dragDimension=null,V.dragHasMoved=null,V.potentialClickBand=null,$(V.parcatsViewModel),H(V.parcatsViewModel);var xe=t.transition().duration(300).ease("cubic-in-out");xe.each(function(){Z(V.parcatsViewModel,!0),X(V.parcatsViewModel,!0)}).each("end",function(){(K||te)&&a.restyle(V.parcatsViewModel.graphDiv,j,[q])})}}function W(V){for(var j,q=V.graphDiv._fullData,Y=0;Y<q.length;Y++)if(V.key===q[Y].uid){j=Y;break}return j}function X(V,j){j===void 0&&(j=!1);function q(Y){return j?Y.transition():Y}V.pathSelection.data(function(Y){return Y.paths},h),q(V.pathSelection).attr("d",function(Y){return Y.svgD})}function Z(V,j){j===void 0&&(j=!1);function q(le){return j?le.transition():le}V.dimensionSelection.data(function(le){return le.dimensions},h);var Y=V.dimensionSelection.selectAll("g.category").data(function(le){return le.categories},h);q(V.dimensionSelection).attr("transform",function(le){return n(le.x,0)}),q(Y).attr("transform",function(le){return n(0,le.y)});var K=Y.select(".dimlabel");K.text(function(le,ce){return ce===0?le.parcatsViewModel.model.dimensions[le.model.dimensionInd].dimensionLabel:null});var te=Y.select(".catlabel");te.attr("text-anchor",function(le){return d(le)?"start":"end"}).attr("x",function(le){return d(le)?le.width+5:-5}).each(function(le){var ce,pe;d(le)?(ce=le.width+5,pe="start"):(ce=-5,pe="end"),t.select(this).selectAll("tspan").attr("x",ce).attr("text-anchor",pe)});var ne=Y.selectAll("rect.bandrect").data(function(le){return le.bands},h),se=ne.enter().append("rect").attr("class","bandrect").attr("cursor","move").attr("stroke-opacity",0).attr("fill",function(le){return le.color}).attr("fill-opacity",0);ne.attr("fill",function(le){return le.color}).attr("width",function(le){return le.width}).attr("height",function(le){return le.height}).attr("y",function(le){return le.y}),A(se),ne.each(function(){l.raiseToTop(this)}),ne.exit().remove()}function J(V,j,q){var Y=q[0],K=j.margin||{l:80,r:80,t:100,b:80},te=Y.trace,ne=te.domain,se=j.width,le=j.height,ce=Math.floor(se*(ne.x[1]-ne.x[0])),pe=Math.floor(le*(ne.y[1]-ne.y[0])),xe=ne.x[0]*se+K.l,ye=j.height-ne.y[1]*j.height+K.t,fe=te.line.shape,ae;te.hoverinfo==="all"?ae=["count","probability"]:ae=(te.hoverinfo||"").split("+");var ee={trace:te,key:te.uid,model:Y,x:xe,y:ye,width:ce,height:pe,hoveron:te.hoveron,hoverinfoItems:ae,arrangement:te.arrangement,bundlecolors:te.bundlecolors,sortpaths:te.sortpaths,labelfont:te.labelfont,categorylabelfont:te.tickfont,pathShape:fe,dragDimension:null,margin:K,paths:[],dimensions:[],graphDiv:V,traceSelection:null,pathSelection:null,dimensionSelection:null};return Y.dimensions&&($(ee),H(ee)),ee}function N(V,j,q,Y,K){var te=[],ne=[],se,le;for(le=0;le<q.length-1;le++)se=i(q[le]+V[le],V[le+1]),te.push(se(K)),ne.push(se(1-K));var ce="M "+V[0]+","+j[0];for(ce+="l"+q[0]+",0 ",le=1;le<q.length;le++)ce+="C"+te[le-1]+","+j[le-1]+" "+ne[le-1]+","+j[le]+" "+V[le]+","+j[le],ce+="l"+q[le]+",0 ";for(ce+="l0,"+Y+" ",ce+="l -"+q[q.length-1]+",0 ",le=q.length-2;le>=0;le--)ce+="C"+ne[le]+","+(j[le+1]+Y)+" "+te[le]+","+(j[le]+Y)+" "+(V[le]+q[le])+","+(j[le]+Y),ce+="l-"+q[le]+",0 ";return ce+="Z",ce}function H(V){var j=V.dimensions,q=V.model,Y=j.map(function(mt){return mt.categories.map(function(Mt){return Mt.y})}),K=V.model.dimensions.map(function(mt){return mt.categories.map(function(Mt){return Mt.displayInd})}),te=V.model.dimensions.map(function(mt){return mt.displayInd}),ne=V.dimensions.map(function(mt){return mt.model.dimensionInd}),se=j.map(function(mt){return mt.x}),le=j.map(function(mt){return mt.width}),ce=[];for(var pe in q.paths)q.paths.hasOwnProperty(pe)&&ce.push(q.paths[pe]);function xe(mt){var Mt=mt.categoryInds.map(function(qe,Ye){return K[Ye][qe]}),lt=ne.map(function(qe){return Mt[qe]});return lt}ce.sort(function(mt,Mt){var lt=xe(mt),qe=xe(Mt);return V.sortpaths==="backward"&&(lt.reverse(),qe.reverse()),lt.push(mt.valueInds[0]),qe.push(Mt.valueInds[0]),V.bundlecolors&&(lt.unshift(mt.rawColor),qe.unshift(Mt.rawColor)),g(lt,qe)});for(var ye=new Array(ce.length),fe=j[0].model.count,ae=j[0].categories.map(function(mt){return mt.height}).reduce(function(mt,Mt){return mt+Mt}),ee=0;ee<ce.length;ee++){var ie=ce[ee],Q;fe>0?Q=ae*(ie.count/fe):Q=0;for(var ue=new Array(Y.length),ge=0;ge<ie.categoryInds.length;ge++){var Me=ie.categoryInds[ge],Te=K[ge][Me],je=te[ge];ue[je]=Y[je][Te],Y[je][Te]+=Q;var Ve=V.dimensions[je].categories[Te],Ze=Ve.bands.length,Ke=Ve.bands[Ze-1];if(Ke===void 0||ie.rawColor!==Ke.rawColor){var vt=Ke===void 0?0:Ke.y+Ke.height;Ve.bands.push({key:vt,color:ie.color,rawColor:ie.rawColor,height:Q,width:Ve.width,count:ie.count,y:vt,categoryViewModel:Ve,parcatsViewModel:V})}else{var xt=Ve.bands[Ze-1];xt.height+=Q,xt.count+=ie.count}}var Pt;V.pathShape==="hspline"?Pt=N(se,ue,le,Q,.5):Pt=N(se,ue,le,Q,0),ye[ee]={key:ie.valueInds[0],model:ie,height:Q,leftXs:se,topYs:ue,dimWidths:le,svgD:Pt,parcatsViewModel:V}}V.paths=ye}function $(V){var j=V.model.dimensions.map(function(ne){return{displayInd:ne.displayInd,dimensionInd:ne.dimensionInd}});j.sort(function(ne,se){return ne.displayInd-se.displayInd});var q=[];for(var Y in j){var K=j[Y].dimensionInd,te=V.model.dimensions[K];q.push(U(V,te))}V.dimensions=q}function U(V,j){var q=40,Y=16,K=V.model.dimensions.length,te=j.displayInd,ne,se,le;K>1?ne=(V.width-2*q-Y)/(K-1):ne=0,se=q,le=se+ne*te;var ce=[],pe=V.model.maxCats,xe=j.categories.length,ye=8,fe=j.count,ae=V.height-ye*(pe-1),ee,ie,Q,ue,ge,Me=(pe-xe)*ye/2,Te=j.categories.map(function(je){return{displayInd:je.displayInd,categoryInd:je.categoryInd}});for(Te.sort(function(je,Ve){return je.displayInd-Ve.displayInd}),ge=0;ge<xe;ge++)ue=Te[ge].categoryInd,ie=j.categories[ue],fe>0?ee=ie.count/fe*ae:ee=0,Q={key:ie.valueInds[0],model:ie,width:Y,height:ee,y:ie.dragY!==null?ie.dragY:Me,bands:[],parcatsViewModel:V},Me=Me+ee+ye,ce.push(Q);return{key:j.dimensionInd,x:j.dragX!==null?j.dragX:le,y:0,width:Y,model:j,categories:ce,parcatsViewModel:V,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}}}),a9=de({"src/traces/parcats/plot.js"(e,r){"use strict";var t=mK();r.exports=function(a,o,s,l){var n=a._fullLayout,u=n._paper,c=n._size;t(a,u,o,{width:c.w,height:c.h,margin:{t:c.t,r:c.r,b:c.b,l:c.l}},s,l)}}}),gK=de({"src/traces/parcats/base_plot.js"(e){"use strict";var r=$u().getModuleCalcData,t=a9(),i="parcats";e.name=i,e.plot=function(a,o,s,l){var n=r(a.calcdata,i);if(n.length){var u=n[0];t(a,u,s,l)}},e.clean=function(a,o,s,l){var n=l._has&&l._has("parcats"),u=o._has&&o._has("parcats");n&&!u&&l._paperdiv.selectAll(".parcats").remove()}}}),yK=de({"src/traces/parcats/index.js"(e,r){"use strict";r.exports={attributes:i9(),supplyDefaults:pK(),calc:vK(),plot:a9(),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcats",basePlotModule:gK(),categories:["noOpacity"],meta:{}}}}),_K=de({"lib/parcats.js"(e,r){"use strict";r.exports=yK()}}),xK=de({"src/plots/map/styles/arcgis-sat-hybrid.js"(e,r){"use strict";r.exports={version:8,name:"orto",metadata:{"maputnik:renderer":"mlgljs"},center:[1.537786,41.837539],zoom:12,bearing:0,pitch:0,light:{anchor:"viewport",color:"white",intensity:.4,position:[1.15,45,30]},sources:{ortoEsri:{type:"raster",tiles:["https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"],tileSize:256,maxzoom:18,attribution:"ESRI © <a href='http://www.esri.com'>ESRI</a>"},ortoInstaMaps:{type:"raster",tiles:["https://tilemaps.icgc.cat/mapfactory/wmts/orto_8_12/CAT3857/{z}/{x}/{y}.png"],tileSize:256,maxzoom:13},ortoICGC:{type:"raster",tiles:["https://geoserveis.icgc.cat/icc_mapesmultibase/noutm/wmts/orto/GRID3857/{z}/{x}/{y}.jpeg"],tileSize:256,minzoom:13.1,maxzoom:20},openmaptiles:{type:"vector",url:"https://geoserveis.icgc.cat/contextmaps/basemap.json"}},sprite:"https://geoserveis.icgc.cat/contextmaps/sprites/sprite@1",glyphs:"https://geoserveis.icgc.cat/contextmaps/glyphs/{fontstack}/{range}.pbf",layers:[{id:"background",type:"background",paint:{"background-color":"#F4F9F4"}},{id:"ortoEsri",type:"raster",source:"ortoEsri",maxzoom:16,layout:{visibility:"visible"}},{id:"ortoICGC",type:"raster",source:"ortoICGC",minzoom:13.1,maxzoom:19,layout:{visibility:"visible"}},{id:"ortoInstaMaps",type:"raster",source:"ortoInstaMaps",maxzoom:13,layout:{visibility:"visible"}},{id:"waterway_tunnel",type:"line",source:"openmaptiles","source-layer":"waterway",minzoom:14,filter:["all",["in","class","river","stream","canal"],["==","brunnel","tunnel"]],layout:{"line-cap":"round"},paint:{"line-color":"#a0c8f0","line-width":{base:1.3,stops:[[13,.5],[20,6]]},"line-dasharray":[2,4]}},{id:"waterway-other",type:"line",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"waterway",filter:["!in","class","canal","river","stream"],layout:{"line-cap":"round"},paint:{"line-color":"#a0c8f0","line-width":{base:1.3,stops:[[13,.5],[20,2]]}}},{id:"waterway-stream-canal",type:"line",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"waterway",filter:["all",["in","class","canal","stream"],["!=","brunnel","tunnel"]],layout:{"line-cap":"round"},paint:{"line-color":"#a0c8f0","line-width":{base:1.3,stops:[[13,.5],[20,6]]}}},{id:"waterway-river",type:"line",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"waterway",filter:["all",["==","class","river"],["!=","brunnel","tunnel"]],layout:{"line-cap":"round"},paint:{"line-color":"#a0c8f0","line-width":{base:1.2,stops:[[10,.8],[20,4]]},"line-opacity":.5}},{id:"water-offset",type:"fill",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"water",maxzoom:8,filter:["==","$type","Polygon"],layout:{visibility:"visible"},paint:{"fill-opacity":0,"fill-color":"#a0c8f0","fill-translate":{base:1,stops:[[6,[2,0]],[8,[0,0]]]}}},{id:"water",type:"fill",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"water",layout:{visibility:"visible"},paint:{"fill-color":"hsl(210, 67%, 85%)","fill-opacity":0}},{id:"water-pattern",type:"fill",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"water",layout:{visibility:"visible"},paint:{"fill-translate":[0,2.5],"fill-pattern":"wave","fill-opacity":1}},{id:"landcover-ice-shelf",type:"fill",metadata:{"mapbox:group":"1444849382550.77"},source:"openmaptiles","source-layer":"landcover",filter:["==","subclass","ice_shelf"],layout:{visibility:"visible"},paint:{"fill-color":"#fff","fill-opacity":{base:1,stops:[[0,.9],[10,.3]]}}},{id:"tunnel-service-track-casing",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["in","class","service","track"]],layout:{"line-join":"round"},paint:{"line-color":"#cfcdca","line-dasharray":[.5,.25],"line-width":{base:1.2,stops:[[15,1],[16,4],[20,11]]}}},{id:"tunnel-minor-casing",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["==","class","minor"]],layout:{"line-join":"round"},paint:{"line-color":"#cfcdca","line-opacity":{stops:[[12,0],[12.5,1]]},"line-width":{base:1.2,stops:[[12,.5],[13,1],[14,4],[20,15]]}}},{id:"tunnel-secondary-tertiary-casing",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["in","class","secondary","tertiary"]],layout:{"line-join":"round"},paint:{"line-color":"#e9ac77","line-opacity":1,"line-width":{base:1.2,stops:[[8,1.5],[20,17]]}}},{id:"tunnel-trunk-primary-casing",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["in","class","primary","trunk"]],layout:{"line-join":"round"},paint:{"line-color":"#e9ac77","line-width":{base:1.2,stops:[[5,.4],[6,.6],[7,1.5],[20,22]]},"line-opacity":.7}},{id:"tunnel-motorway-casing",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["==","class","motorway"]],layout:{"line-join":"round",visibility:"visible"},paint:{"line-color":"#e9ac77","line-dasharray":[.5,.25],"line-width":{base:1.2,stops:[[5,.4],[6,.6],[7,1.5],[20,22]]},"line-opacity":.5}},{id:"tunnel-path",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","brunnel","tunnel"],["==","class","path"]]],paint:{"line-color":"#cba","line-dasharray":[1.5,.75],"line-width":{base:1.2,stops:[[15,1.2],[20,4]]}}},{id:"tunnel-service-track",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["in","class","service","track"]],layout:{"line-join":"round"},paint:{"line-color":"#fff","line-width":{base:1.2,stops:[[15.5,0],[16,2],[20,7.5]]}}},{id:"tunnel-minor",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["==","class","minor_road"]],layout:{"line-join":"round"},paint:{"line-color":"#fff","line-opacity":1,"line-width":{base:1.2,stops:[[13.5,0],[14,2.5],[20,11.5]]}}},{id:"tunnel-secondary-tertiary",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["in","class","secondary","tertiary"]],layout:{"line-join":"round"},paint:{"line-color":"#fff4c6","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,10]]}}},{id:"tunnel-trunk-primary",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["in","class","primary","trunk"]],layout:{"line-join":"round"},paint:{"line-color":"#fff4c6","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,18]]},"line-opacity":.5}},{id:"tunnel-motorway",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["==","class","motorway"]],layout:{"line-join":"round",visibility:"visible"},paint:{"line-color":"#ffdaa6","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,18]]},"line-opacity":.5}},{id:"tunnel-railway",type:"line",metadata:{"mapbox:group":"1444849354174.1904"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","tunnel"],["==","class","rail"]],paint:{"line-color":"#bbb","line-width":{base:1.4,stops:[[14,.4],[15,.75],[20,2]]},"line-dasharray":[2,2]}},{id:"ferry",type:"line",source:"openmaptiles","source-layer":"transportation",filter:["all",["in","class","ferry"]],layout:{"line-join":"round",visibility:"visible"},paint:{"line-color":"rgba(108, 159, 182, 1)","line-width":1.1,"line-dasharray":[2,2]}},{id:"aeroway-taxiway-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"aeroway",minzoom:12,filter:["all",["in","class","taxiway"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"rgba(153, 153, 153, 1)","line-width":{base:1.5,stops:[[11,2],[17,12]]},"line-opacity":1}},{id:"aeroway-runway-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"aeroway",minzoom:12,filter:["all",["in","class","runway"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"rgba(153, 153, 153, 1)","line-width":{base:1.5,stops:[[11,5],[17,55]]},"line-opacity":1}},{id:"aeroway-taxiway",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"aeroway",minzoom:4,filter:["all",["in","class","taxiway"],["==","$type","LineString"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"rgba(255, 255, 255, 1)","line-width":{base:1.5,stops:[[11,1],[17,10]]},"line-opacity":{base:1,stops:[[11,0],[12,1]]}}},{id:"aeroway-runway",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"aeroway",minzoom:4,filter:["all",["in","class","runway"],["==","$type","LineString"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"rgba(255, 255, 255, 1)","line-width":{base:1.5,stops:[[11,4],[17,50]]},"line-opacity":{base:1,stops:[[11,0],[12,1]]}}},{id:"highway-motorway-link-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:12,filter:["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway_link"]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#e9ac77","line-opacity":1,"line-width":{base:1.2,stops:[[12,1],[13,3],[14,4],[20,15]]}}},{id:"highway-link-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:13,filter:["all",["!in","brunnel","bridge","tunnel"],["in","class","primary_link","secondary_link","tertiary_link","trunk_link"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"#e9ac77","line-opacity":1,"line-width":{base:1.2,stops:[[12,1],[13,3],[14,4],[20,15]]}}},{id:"highway-minor-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!=","brunnel","tunnel"],["in","class","minor","service","track"]]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#cfcdca","line-opacity":{stops:[[12,0],[12.5,0]]},"line-width":{base:1.2,stops:[[12,.5],[13,1],[14,4],[20,15]]}}},{id:"highway-secondary-tertiary-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["!in","brunnel","bridge","tunnel"],["in","class","secondary","tertiary"]],layout:{"line-cap":"butt","line-join":"round",visibility:"visible"},paint:{"line-color":"#e9ac77","line-opacity":.5,"line-width":{base:1.2,stops:[[8,1.5],[20,17]]}}},{id:"highway-primary-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:5,filter:["all",["!in","brunnel","bridge","tunnel"],["in","class","primary"]],layout:{"line-cap":"butt","line-join":"round",visibility:"visible"},paint:{"line-color":"#e9ac77","line-opacity":{stops:[[7,0],[8,.6]]},"line-width":{base:1.2,stops:[[7,0],[8,.6],[9,1.5],[20,22]]}}},{id:"highway-trunk-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:5,filter:["all",["!in","brunnel","bridge","tunnel"],["in","class","trunk"]],layout:{"line-cap":"butt","line-join":"round",visibility:"visible"},paint:{"line-color":"#e9ac77","line-opacity":{stops:[[5,0],[6,.5]]},"line-width":{base:1.2,stops:[[5,0],[6,.6],[7,1.5],[20,22]]}}},{id:"highway-motorway-casing",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:4,filter:["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway"]],layout:{"line-cap":"butt","line-join":"round",visibility:"visible"},paint:{"line-color":"#e9ac77","line-width":{base:1.2,stops:[[4,0],[5,.4],[6,.6],[7,1.5],[20,22]]},"line-opacity":{stops:[[4,0],[5,.5]]}}},{id:"highway-path",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!in","brunnel","bridge","tunnel"],["==","class","path"]]],paint:{"line-color":"#cba","line-dasharray":[1.5,.75],"line-width":{base:1.2,stops:[[15,1.2],[20,4]]}}},{id:"highway-motorway-link",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:12,filter:["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway_link"]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#fc8","line-width":{base:1.2,stops:[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}}},{id:"highway-link",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:13,filter:["all",["!in","brunnel","bridge","tunnel"],["in","class","primary_link","secondary_link","tertiary_link","trunk_link"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}}},{id:"highway-minor",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!=","brunnel","tunnel"],["in","class","minor","service","track"]]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#fff","line-opacity":.5,"line-width":{base:1.2,stops:[[13.5,0],[14,2.5],[20,11.5]]}}},{id:"highway-secondary-tertiary",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["!in","brunnel","bridge","tunnel"],["in","class","secondary","tertiary"]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[6.5,0],[8,.5],[20,13]]},"line-opacity":.5}},{id:"highway-primary",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!in","brunnel","bridge","tunnel"],["in","class","primary"]]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[8.5,0],[9,.5],[20,18]]},"line-opacity":0}},{id:"highway-trunk",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!in","brunnel","bridge","tunnel"],["in","class","trunk"]]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,18]]},"line-opacity":.5}},{id:"highway-motorway",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",minzoom:5,filter:["all",["==","$type","LineString"],["all",["!in","brunnel","bridge","tunnel"],["==","class","motorway"]]],layout:{"line-cap":"round","line-join":"round",visibility:"visible"},paint:{"line-color":"#fc8","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,18]]},"line-opacity":.5}},{id:"railway-transit",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","class","transit"],["!in","brunnel","tunnel"]]],layout:{visibility:"visible"},paint:{"line-color":"hsla(0, 0%, 73%, 0.77)","line-width":{base:1.4,stops:[[14,.4],[20,1]]}}},{id:"railway-transit-hatching",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","class","transit"],["!in","brunnel","tunnel"]]],layout:{visibility:"visible"},paint:{"line-color":"hsla(0, 0%, 73%, 0.68)","line-dasharray":[.2,8],"line-width":{base:1.4,stops:[[14.5,0],[15,2],[20,6]]}}},{id:"railway-service",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","class","rail"],["has","service"]]],paint:{"line-color":"hsla(0, 0%, 73%, 0.77)","line-width":{base:1.4,stops:[[14,.4],[20,1]]}}},{id:"railway-service-hatching",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","class","rail"],["has","service"]]],layout:{visibility:"visible"},paint:{"line-color":"hsla(0, 0%, 73%, 0.68)","line-dasharray":[.2,8],"line-width":{base:1.4,stops:[[14.5,0],[15,2],[20,6]]}}},{id:"railway",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!has","service"],["!in","brunnel","bridge","tunnel"],["==","class","rail"]]],paint:{"line-color":"#bbb","line-width":{base:1.4,stops:[[14,.4],[15,.75],[20,2]]}}},{id:"railway-hatching",type:"line",metadata:{"mapbox:group":"1444849345966.4436"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["!has","service"],["!in","brunnel","bridge","tunnel"],["==","class","rail"]]],paint:{"line-color":"#bbb","line-dasharray":[.2,8],"line-width":{base:1.4,stops:[[14.5,0],[15,3],[20,8]]}}},{id:"bridge-motorway-link-casing",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["==","class","motorway_link"]],layout:{"line-join":"round"},paint:{"line-color":"#e9ac77","line-opacity":1,"line-width":{base:1.2,stops:[[12,1],[13,3],[14,4],[20,15]]}}},{id:"bridge-link-casing",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["in","class","primary_link","secondary_link","tertiary_link","trunk_link"]],layout:{"line-join":"round"},paint:{"line-color":"#e9ac77","line-opacity":1,"line-width":{base:1.2,stops:[[12,1],[13,3],[14,4],[20,15]]}}},{id:"bridge-secondary-tertiary-casing",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["in","class","secondary","tertiary"]],layout:{"line-join":"round"},paint:{"line-color":"#e9ac77","line-opacity":1,"line-width":{base:1.2,stops:[[8,1.5],[20,28]]}}},{id:"bridge-trunk-primary-casing",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["in","class","primary","trunk"]],layout:{"line-join":"round"},paint:{"line-color":"hsl(28, 76%, 67%)","line-width":{base:1.2,stops:[[5,.4],[6,.6],[7,1.5],[20,26]]}}},{id:"bridge-motorway-casing",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["==","class","motorway"]],layout:{"line-join":"round"},paint:{"line-color":"#e9ac77","line-width":{base:1.2,stops:[[5,.4],[6,.6],[7,1.5],[20,22]]},"line-opacity":.5}},{id:"bridge-path-casing",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","brunnel","bridge"],["==","class","path"]]],paint:{"line-color":"#f8f4f0","line-width":{base:1.2,stops:[[15,1.2],[20,18]]}}},{id:"bridge-path",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","$type","LineString"],["all",["==","brunnel","bridge"],["==","class","path"]]],paint:{"line-color":"#cba","line-width":{base:1.2,stops:[[15,1.2],[20,4]]},"line-dasharray":[1.5,.75]}},{id:"bridge-motorway-link",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["==","class","motorway_link"]],layout:{"line-join":"round"},paint:{"line-color":"#fc8","line-width":{base:1.2,stops:[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}}},{id:"bridge-link",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["in","class","primary_link","secondary_link","tertiary_link","trunk_link"]],layout:{"line-join":"round"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[12.5,0],[13,1.5],[14,2.5],[20,11.5]]}}},{id:"bridge-secondary-tertiary",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["in","class","secondary","tertiary"]],layout:{"line-join":"round"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,20]]}}},{id:"bridge-trunk-primary",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["in","class","primary","trunk"]],layout:{"line-join":"round"},paint:{"line-color":"#fea","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,18]]}}},{id:"bridge-motorway",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["==","class","motorway"]],layout:{"line-join":"round"},paint:{"line-color":"#fc8","line-width":{base:1.2,stops:[[6.5,0],[7,.5],[20,18]]},"line-opacity":.5}},{id:"bridge-railway",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["==","class","rail"]],paint:{"line-color":"#bbb","line-width":{base:1.4,stops:[[14,.4],[15,.75],[20,2]]}}},{id:"bridge-railway-hatching",type:"line",metadata:{"mapbox:group":"1444849334699.1902"},source:"openmaptiles","source-layer":"transportation",filter:["all",["==","brunnel","bridge"],["==","class","rail"]],paint:{"line-color":"#bbb","line-dasharray":[.2,8],"line-width":{base:1.4,stops:[[14.5,0],[15,3],[20,8]]}}},{id:"cablecar",type:"line",source:"openmaptiles","source-layer":"transportation",minzoom:13,filter:["==","class","cable_car"],layout:{visibility:"visible","line-cap":"round"},paint:{"line-color":"hsl(0, 0%, 70%)","line-width":{base:1,stops:[[11,1],[19,2.5]]}}},{id:"cablecar-dash",type:"line",source:"openmaptiles","source-layer":"transportation",minzoom:13,filter:["==","class","cable_car"],layout:{visibility:"visible","line-cap":"round"},paint:{"line-color":"hsl(0, 0%, 70%)","line-width":{base:1,stops:[[11,3],[19,5.5]]},"line-dasharray":[2,3]}},{id:"boundary-land-level-4",type:"line",source:"openmaptiles","source-layer":"boundary",filter:["all",[">=","admin_level",4],["<=","admin_level",8],["!=","maritime",1]],layout:{"line-join":"round"},paint:{"line-color":"#9e9cab","line-dasharray":[3,1,1,1],"line-width":{base:1.4,stops:[[4,.4],[5,1],[12,3]]},"line-opacity":.6}},{id:"boundary-land-level-2",type:"line",source:"openmaptiles","source-layer":"boundary",filter:["all",["==","admin_level",2],["!=","maritime",1],["!=","disputed",1]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"hsl(248, 7%, 66%)","line-width":{base:1,stops:[[0,.6],[4,1.4],[5,2],[12,2]]}}},{id:"boundary-land-disputed",type:"line",source:"openmaptiles","source-layer":"boundary",filter:["all",["!=","maritime",1],["==","disputed",1]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"hsl(248, 7%, 70%)","line-dasharray":[1,3],"line-width":{base:1,stops:[[0,.6],[4,1.4],[5,2],[12,8]]}}},{id:"boundary-water",type:"line",source:"openmaptiles","source-layer":"boundary",filter:["all",["in","admin_level",2,4],["==","maritime",1]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"rgba(154, 189, 214, 1)","line-width":{base:1,stops:[[0,.6],[4,1],[5,1],[12,1]]},"line-opacity":{stops:[[6,0],[10,0]]}}},{id:"waterway-name",type:"symbol",source:"openmaptiles","source-layer":"waterway",minzoom:13,filter:["all",["==","$type","LineString"],["has","name"]],layout:{"text-font":["Noto Sans Italic"],"text-size":14,"text-field":"{name:latin} {name:nonlatin}","text-max-width":5,"text-rotation-alignment":"map","symbol-placement":"line","text-letter-spacing":.2,"symbol-spacing":350},paint:{"text-color":"#74aee9","text-halo-width":1.5,"text-halo-color":"rgba(255,255,255,0.7)"}},{id:"water-name-lakeline",type:"symbol",source:"openmaptiles","source-layer":"water_name",filter:["==","$type","LineString"],layout:{"text-font":["Noto Sans Italic"],"text-size":14,"text-field":`{name:latin}
+{name:nonlatin}`,"text-max-width":5,"text-rotation-alignment":"map","symbol-placement":"line","symbol-spacing":350,"text-letter-spacing":.2},paint:{"text-color":"#74aee9","text-halo-width":1.5,"text-halo-color":"rgba(255,255,255,0.7)"}},{id:"water-name-ocean",type:"symbol",source:"openmaptiles","source-layer":"water_name",filter:["all",["==","$type","Point"],["==","class","ocean"]],layout:{"text-font":["Noto Sans Italic"],"text-size":14,"text-field":"{name:latin}","text-max-width":5,"text-rotation-alignment":"map","symbol-placement":"point","symbol-spacing":350,"text-letter-spacing":.2},paint:{"text-color":"#74aee9","text-halo-width":1.5,"text-halo-color":"rgba(255,255,255,0.7)"}},{id:"water-name-other",type:"symbol",source:"openmaptiles","source-layer":"water_name",filter:["all",["==","$type","Point"],["!in","class","ocean"]],layout:{"text-font":["Noto Sans Italic"],"text-size":{stops:[[0,10],[6,14]]},"text-field":`{name:latin}
+{name:nonlatin}`,"text-max-width":5,"text-rotation-alignment":"map","symbol-placement":"point","symbol-spacing":350,"text-letter-spacing":.2,visibility:"visible"},paint:{"text-color":"#74aee9","text-halo-width":1.5,"text-halo-color":"rgba(255,255,255,0.7)"}},{id:"poi-level-3",type:"symbol",source:"openmaptiles","source-layer":"poi",minzoom:16,filter:["all",["==","$type","Point"],[">=","rank",25]],layout:{"text-padding":2,"text-font":["Noto Sans Regular"],"text-anchor":"top","icon-image":"{class}_11","text-field":`{name:latin}
+{name:nonlatin}`,"text-offset":[0,.6],"text-size":12,"text-max-width":9},paint:{"text-halo-blur":.5,"text-color":"#666","text-halo-width":1,"text-halo-color":"#ffffff"}},{id:"poi-level-2",type:"symbol",source:"openmaptiles","source-layer":"poi",minzoom:15,filter:["all",["==","$type","Point"],["<=","rank",24],[">=","rank",15]],layout:{"text-padding":2,"text-font":["Noto Sans Regular"],"text-anchor":"top","icon-image":"{class}_11","text-field":`{name:latin}
+{name:nonlatin}`,"text-offset":[0,.6],"text-size":12,"text-max-width":9},paint:{"text-halo-blur":.5,"text-color":"#666","text-halo-width":1,"text-halo-color":"#ffffff"}},{id:"poi-level-1",type:"symbol",source:"openmaptiles","source-layer":"poi",minzoom:14,filter:["all",["==","$type","Point"],["<=","rank",14],["has","name"]],layout:{"text-padding":2,"text-font":["Noto Sans Regular"],"text-anchor":"top","icon-image":"{class}_11","text-field":`{name:latin}
+{name:nonlatin}`,"text-offset":[0,.6],"text-size":11,"text-max-width":9},paint:{"text-halo-blur":.5,"text-color":"rgba(191, 228, 172, 1)","text-halo-width":1,"text-halo-color":"rgba(30, 29, 29, 1)"}},{id:"poi-railway",type:"symbol",source:"openmaptiles","source-layer":"poi",minzoom:13,filter:["all",["==","$type","Point"],["has","name"],["==","class","railway"],["==","subclass","station"]],layout:{"text-padding":2,"text-font":["Noto Sans Regular"],"text-anchor":"top","icon-image":"{class}_11","text-field":`{name:latin}
+{name:nonlatin}`,"text-offset":[0,.6],"text-size":12,"text-max-width":9,"icon-optional":!1,"icon-ignore-placement":!1,"icon-allow-overlap":!1,"text-ignore-placement":!1,"text-allow-overlap":!1,"text-optional":!0},paint:{"text-halo-blur":.5,"text-color":"#666","text-halo-width":1,"text-halo-color":"#ffffff"}},{id:"road_oneway",type:"symbol",source:"openmaptiles","source-layer":"transportation",minzoom:15,filter:["all",["==","oneway",1],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],layout:{"symbol-placement":"line","icon-image":"oneway","symbol-spacing":75,"icon-padding":2,"icon-rotation-alignment":"map","icon-rotate":90,"icon-size":{stops:[[15,.5],[19,1]]}},paint:{"icon-opacity":.5}},{id:"road_oneway_opposite",type:"symbol",source:"openmaptiles","source-layer":"transportation",minzoom:15,filter:["all",["==","oneway",-1],["in","class","motorway","trunk","primary","secondary","tertiary","minor","service"]],layout:{"symbol-placement":"line","icon-image":"oneway","symbol-spacing":75,"icon-padding":2,"icon-rotation-alignment":"map","icon-rotate":-90,"icon-size":{stops:[[15,.5],[19,1]]}},paint:{"icon-opacity":.5}},{id:"highway-name-path",type:"symbol",source:"openmaptiles","source-layer":"transportation_name",minzoom:15.5,filter:["==","class","path"],layout:{"text-size":{base:1,stops:[[13,12],[14,13]]},"text-font":["Noto Sans Regular"],"text-field":"{name:latin} {name:nonlatin}","symbol-placement":"line","text-rotation-alignment":"map"},paint:{"text-halo-color":"#f8f4f0","text-color":"hsl(30, 23%, 62%)","text-halo-width":.5}},{id:"highway-name-minor",type:"symbol",source:"openmaptiles","source-layer":"transportation_name",minzoom:15,filter:["all",["==","$type","LineString"],["in","class","minor","service","track"]],layout:{"text-size":{base:1,stops:[[13,12],[14,13]]},"text-font":["Noto Sans Regular"],"text-field":"{name:latin} {name:nonlatin}","symbol-placement":"line","text-rotation-alignment":"map"},paint:{"text-halo-blur":.5,"text-color":"#765","text-halo-width":1}},{id:"highway-name-major",type:"symbol",source:"openmaptiles","source-layer":"transportation_name",minzoom:12.2,filter:["in","class","primary","secondary","tertiary","trunk"],layout:{"text-size":{base:1,stops:[[13,12],[14,13]]},"text-font":["Noto Sans Regular"],"text-field":"{name:latin} {name:nonlatin}","symbol-placement":"line","text-rotation-alignment":"map"},paint:{"text-halo-blur":.5,"text-color":"#765","text-halo-width":1}},{id:"highway-shield",type:"symbol",source:"openmaptiles","source-layer":"transportation_name",minzoom:8,filter:["all",["<=","ref_length",6],["==","$type","LineString"],["!in","network","us-interstate","us-highway","us-state"]],layout:{"text-size":10,"icon-image":"road_{ref_length}","icon-rotation-alignment":"viewport","symbol-spacing":200,"text-font":["Noto Sans Regular"],"symbol-placement":{base:1,stops:[[10,"point"],[11,"line"]]},"text-rotation-alignment":"viewport","icon-size":1,"text-field":"{ref}"},paint:{"text-opacity":1,"text-color":"rgba(20, 19, 19, 1)","text-halo-color":"rgba(230, 221, 221, 0)","text-halo-width":2,"icon-color":"rgba(183, 18, 18, 1)","icon-opacity":.3,"icon-halo-color":"rgba(183, 55, 55, 0)"}},{id:"highway-shield-us-interstate",type:"symbol",source:"openmaptiles","source-layer":"transportation_name",minzoom:7,filter:["all",["<=","ref_length",6],["==","$type","LineString"],["in","network","us-interstate"]],layout:{"text-size":10,"icon-image":"{network}_{ref_length}","icon-rotation-alignment":"viewport","symbol-spacing":200,"text-font":["Noto Sans Regular"],"symbol-placement":{base:1,stops:[[7,"point"],[7,"line"],[8,"line"]]},"text-rotation-alignment":"viewport","icon-size":1,"text-field":"{ref}"},paint:{"text-color":"rgba(0, 0, 0, 1)"}},{id:"highway-shield-us-other",type:"symbol",source:"openmaptiles","source-layer":"transportation_name",minzoom:9,filter:["all",["<=","ref_length",6],["==","$type","LineString"],["in","network","us-highway","us-state"]],layout:{"text-size":10,"icon-image":"{network}_{ref_length}","icon-rotation-alignment":"viewport","symbol-spacing":200,"text-font":["Noto Sans Regular"],"symbol-placement":{base:1,stops:[[10,"point"],[11,"line"]]},"text-rotation-alignment":"viewport","icon-size":1,"text-field":"{ref}"},paint:{"text-color":"rgba(0, 0, 0, 1)"}},{id:"place-other",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",minzoom:12,filter:["!in","class","city","town","village","country","continent"],layout:{"text-letter-spacing":.1,"text-size":{base:1.2,stops:[[12,10],[15,14]]},"text-font":["Noto Sans Bold"],"text-field":`{name:latin}
+{name:nonlatin}`,"text-transform":"uppercase","text-max-width":9,visibility:"visible"},paint:{"text-color":"rgba(255,255,255,1)","text-halo-width":1.2,"text-halo-color":"rgba(57, 28, 28, 1)"}},{id:"place-village",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",minzoom:10,filter:["==","class","village"],layout:{"text-font":["Noto Sans Regular"],"text-size":{base:1.2,stops:[[10,12],[15,16]]},"text-field":`{name:latin}
+{name:nonlatin}`,"text-max-width":8,visibility:"visible"},paint:{"text-color":"rgba(255, 255, 255, 1)","text-halo-width":1.2,"text-halo-color":"rgba(10, 9, 9, 0.8)"}},{id:"place-town",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["==","class","town"],layout:{"text-font":["Noto Sans Regular"],"text-size":{base:1.2,stops:[[10,14],[15,24]]},"text-field":`{name:latin}
+{name:nonlatin}`,"text-max-width":8,visibility:"visible"},paint:{"text-color":"rgba(255, 255, 255, 1)","text-halo-width":1.2,"text-halo-color":"rgba(22, 22, 22, 0.8)"}},{id:"place-city",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["all",["!=","capital",2],["==","class","city"]],layout:{"text-font":["Noto Sans Regular"],"text-size":{base:1.2,stops:[[7,14],[11,24]]},"text-field":`{name:latin}
+{name:nonlatin}`,"text-max-width":8,visibility:"visible"},paint:{"text-color":"rgba(0, 0, 0, 1)","text-halo-width":1.2,"text-halo-color":"rgba(255,255,255,0.8)"}},{id:"place-city-capital",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["all",["==","capital",2],["==","class","city"]],layout:{"text-font":["Noto Sans Regular"],"text-size":{base:1.2,stops:[[7,14],[11,24]]},"text-field":`{name:latin}
+{name:nonlatin}`,"text-max-width":8,"icon-image":"star_11","text-offset":[.4,0],"icon-size":.8,"text-anchor":"left",visibility:"visible"},paint:{"text-color":"#333","text-halo-width":1.2,"text-halo-color":"rgba(255,255,255,0.8)"}},{id:"place-country-other",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["all",["==","class","country"],[">=","rank",3],["!has","iso_a2"]],layout:{"text-font":["Noto Sans Italic"],"text-field":"{name:latin}","text-size":{stops:[[3,11],[7,17]]},"text-transform":"uppercase","text-max-width":6.25,visibility:"visible"},paint:{"text-halo-blur":1,"text-color":"#334","text-halo-width":2,"text-halo-color":"rgba(255,255,255,0.8)"}},{id:"place-country-3",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["all",["==","class","country"],[">=","rank",3],["has","iso_a2"]],layout:{"text-font":["Noto Sans Bold"],"text-field":"{name:latin}","text-size":{stops:[[3,11],[7,17]]},"text-transform":"uppercase","text-max-width":6.25,visibility:"visible"},paint:{"text-halo-blur":1,"text-color":"#334","text-halo-width":2,"text-halo-color":"rgba(255,255,255,0.8)"}},{id:"place-country-2",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["all",["==","class","country"],["==","rank",2],["has","iso_a2"]],layout:{"text-font":["Noto Sans Bold"],"text-field":"{name:latin}","text-size":{stops:[[2,11],[5,17]]},"text-transform":"uppercase","text-max-width":6.25,visibility:"visible"},paint:{"text-halo-blur":1,"text-color":"#334","text-halo-width":2,"text-halo-color":"rgba(255,255,255,0.8)"}},{id:"place-country-1",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",filter:["all",["==","class","country"],["==","rank",1],["has","iso_a2"]],layout:{"text-font":["Noto Sans Bold"],"text-field":"{name:latin}","text-size":{stops:[[1,11],[4,17]]},"text-transform":"uppercase","text-max-width":6.25,visibility:"visible"},paint:{"text-halo-blur":1,"text-color":"#334","text-halo-width":2,"text-halo-color":"rgba(255,255,255,0.8)"}},{id:"place-continent",type:"symbol",metadata:{"mapbox:group":"1444849242106.713"},source:"openmaptiles","source-layer":"place",maxzoom:1,filter:["==","class","continent"],layout:{"text-font":["Noto Sans Bold"],"text-field":"{name:latin}","text-size":14,"text-max-width":6.25,"text-transform":"uppercase",visibility:"visible"},paint:{"text-halo-blur":1,"text-color":"#334","text-halo-width":2,"text-halo-color":"rgba(255,255,255,0.8)"}}],id:"qebnlkra6"}}}),bK=de({"src/plots/map/styles/arcgis-sat.js"(e,r){"use strict";r.exports={version:8,name:"orto",metadata:{},center:[1.537786,41.837539],zoom:12,bearing:0,pitch:0,light:{anchor:"viewport",color:"white",intensity:.4,position:[1.15,45,30]},sources:{ortoEsri:{type:"raster",tiles:["https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"],tileSize:256,maxzoom:18,attribution:"ESRI © <a href='http://www.esri.com'>ESRI</a>"},ortoInstaMaps:{type:"raster",tiles:["https://tilemaps.icgc.cat/mapfactory/wmts/orto_8_12/CAT3857/{z}/{x}/{y}.png"],tileSize:256,maxzoom:13},ortoICGC:{type:"raster",tiles:["https://geoserveis.icgc.cat/icc_mapesmultibase/noutm/wmts/orto/GRID3857/{z}/{x}/{y}.jpeg"],tileSize:256,minzoom:13.1,maxzoom:20},openmaptiles:{type:"vector",url:"https://geoserveis.icgc.cat/contextmaps/basemap.json"}},sprite:"https://geoserveis.icgc.cat/contextmaps/sprites/sprite@1",glyphs:"https://geoserveis.icgc.cat/contextmaps/glyphs/{fontstack}/{range}.pbf",layers:[{id:"background",type:"background",paint:{"background-color":"#F4F9F4"}},{id:"ortoEsri",type:"raster",source:"ortoEsri",maxzoom:16,layout:{visibility:"visible"}},{id:"ortoICGC",type:"raster",source:"ortoICGC",minzoom:13.1,maxzoom:19,layout:{visibility:"visible"}},{id:"ortoInstaMaps",type:"raster",source:"ortoInstaMaps",maxzoom:13,layout:{visibility:"visible"}}]}}}),D0=de({"src/plots/map/constants.js"(e,r){"use strict";var t=(gv(),ti(c0)).default,i=xK(),a=bK(),o='\xA9 <a target="_blank" href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',s="https://basemaps.cartocdn.com/gl/positron-gl-style/style.json",l="https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json",n="https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json",u="https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",c="https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json",f="https://basemaps.cartocdn.com/gl/voyager-nolabels-gl-style/style.json",h={basic:n,streets:n,outdoors:n,light:s,dark:l,satellite:a,"satellite-streets":i,"open-street-map":{id:"osm",version:8,sources:{"plotly-osm-tiles":{type:"raster",attribution:o,tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-osm-tiles",type:"raster",source:"plotly-osm-tiles",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"white-bg":{id:"white-bg",version:8,sources:{},layers:[{id:"white-bg",type:"background",paint:{"background-color":"#FFFFFF"},minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"carto-positron":s,"carto-darkmatter":l,"carto-voyager":n,"carto-positron-nolabels":u,"carto-darkmatter-nolabels":c,"carto-voyager-nolabels":f},d=t(h);r.exports={styleValueDflt:"basic",stylesMap:h,styleValuesMap:d,traceLayerPrefix:"plotly-trace-layer-",layoutLayerPrefix:"plotly-layout-layer-",missingStyleErrorMsg:["No valid maplibre style found, please set `map.style` to one of:",d.join(", "),"or use a tile service."].join(`
+`),mapOnErrorMsg:"Map error.",fitBoundsPadding:20}}}),S_=de({"src/plots/map/layout_attributes.js"(e,r){"use strict";var t=Qt(),i=ta().defaultLine,a=Is().attributes,o=us(),s=tl().textposition,l=Ps().overrideAll,n=Ro().templatedArray,u=D0(),c=o({noFontVariant:!0,noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0});c.family.dflt="Open Sans Regular, Arial Unicode MS Regular";var f=r.exports=l({_arrayAttrRegexps:[t.counterRegex("map",".layers",!0)],domain:a({name:"map"}),style:{valType:"any",values:u.styleValuesMap,dflt:u.styleValueDflt},center:{lon:{valType:"number",dflt:0},lat:{valType:"number",dflt:0}},zoom:{valType:"number",dflt:1},bearing:{valType:"number",dflt:0},pitch:{valType:"number",dflt:0},fitbounds:{valType:"enumerated",values:[!1,"locations"],dflt:"locations"},bounds:{west:{valType:"number"},east:{valType:"number"},south:{valType:"number"},north:{valType:"number"}},layers:n("layer",{visible:{valType:"boolean",dflt:!0},sourcetype:{valType:"enumerated",values:["geojson","vector","raster","image"],dflt:"geojson"},source:{valType:"any"},sourcelayer:{valType:"string",dflt:""},sourceattribution:{valType:"string"},type:{valType:"enumerated",values:["circle","line","fill","symbol","raster"],dflt:"circle"},coordinates:{valType:"any"},below:{valType:"string"},color:{valType:"color",dflt:i},opacity:{valType:"number",min:0,max:1,dflt:1},minzoom:{valType:"number",min:0,max:24,dflt:0},maxzoom:{valType:"number",min:0,max:24,dflt:24},circle:{radius:{valType:"number",dflt:15}},line:{width:{valType:"number",dflt:2},dash:{valType:"data_array"}},fill:{outlinecolor:{valType:"color",dflt:i}},symbol:{icon:{valType:"string",dflt:"marker"},iconsize:{valType:"number",dflt:10},text:{valType:"string",dflt:""},placement:{valType:"enumerated",values:["point","line","line-center"],dflt:"point"},textfont:c,textposition:t.extendFlat({},s,{arrayOk:!1})}})},"plot","from-root");f.uirevision={valType:"any",editType:"none"}}}),R4=de({"src/traces/scattermap/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=Kd(),s=R1(),l=tl(),n=S_(),u=ri(),c=cs(),f=fn().extendFlat,h=Ps().overrideAll,d=S_(),p=s.line,g=s.marker;r.exports=h({lon:s.lon,lat:s.lat,cluster:{enabled:{valType:"boolean"},maxzoom:f({},d.layers.maxzoom,{}),step:{valType:"number",arrayOk:!0,dflt:-1,min:-1},size:{valType:"number",arrayOk:!0,dflt:20,min:0},color:{valType:"color",arrayOk:!0},opacity:f({},g.opacity,{dflt:1})},mode:f({},l.mode,{dflt:"markers"}),text:f({},l.text,{}),texttemplate:i({editType:"plot"},{keys:["lat","lon","text"]}),texttemplatefallback:a({editType:"plot"}),hovertext:f({},l.hovertext,{}),line:{color:p.color,width:p.width},connectgaps:l.connectgaps,marker:f({symbol:{valType:"string",dflt:"circle",arrayOk:!0},angle:{valType:"number",dflt:"auto",arrayOk:!0},allowoverlap:{valType:"boolean",dflt:!1},opacity:g.opacity,size:g.size,sizeref:g.sizeref,sizemin:g.sizemin,sizemode:g.sizemode},c("marker")),fill:s.fill,fillcolor:o(),textfont:n.layers.symbol.textfont,textposition:n.layers.symbol.textposition,below:{valType:"string"},selected:{marker:l.selected.marker},unselected:{marker:l.unselected.marker},hoverinfo:f({},u.hoverinfo,{flags:["lon","lat","text","name"]}),hovertemplate:t(),hovertemplatefallback:a()},"calc","nested")}}),n9=de({"src/traces/scattermap/constants.js"(e,r){"use strict";var t=["Metropolis Black Italic","Metropolis Black","Metropolis Bold Italic","Metropolis Bold","Metropolis Extra Bold Italic","Metropolis Extra Bold","Metropolis Extra Light Italic","Metropolis Extra Light","Metropolis Light Italic","Metropolis Light","Metropolis Medium Italic","Metropolis Medium","Metropolis Regular Italic","Metropolis Regular","Metropolis Semi Bold Italic","Metropolis Semi Bold","Metropolis Thin Italic","Metropolis Thin","Open Sans Bold Italic","Open Sans Bold","Open Sans Extrabold Italic","Open Sans Extrabold","Open Sans Italic","Open Sans Light Italic","Open Sans Light","Open Sans Regular","Open Sans Semibold Italic","Open Sans Semibold","Klokantech Noto Sans Bold","Klokantech Noto Sans CJK Bold","Klokantech Noto Sans CJK Regular","Klokantech Noto Sans Italic","Klokantech Noto Sans Regular"];r.exports={isSupportedFont:function(i){return t.indexOf(i)!==-1}}}}),wK=de({"src/traces/scattermap/defaults.js"(e,r){"use strict";var t=Qt(),i=bs(),a=Nh(),o=yd(),s=_d(),l=Jd(),n=R4(),u=n9().isSupportedFont;r.exports=function(h,d,p,g){function m(E,T){return t.coerce(h,d,n,E,T)}function y(E,T){return t.coerce2(h,d,n,E,T)}var _=c(h,d,m);if(!_){d.visible=!1;return}if(m("text"),m("texttemplate"),m("texttemplatefallback"),m("hovertext"),m("hovertemplate"),m("hovertemplatefallback"),m("mode"),m("below"),i.hasMarkers(d)){a(h,d,p,g,m,{noLine:!0,noAngle:!0}),m("marker.allowoverlap"),m("marker.angle");var v=d.marker;v.symbol!=="circle"&&(t.isArrayOrTypedArray(v.size)&&(v.size=v.size[0]),t.isArrayOrTypedArray(v.color)&&(v.color=v.color[0]))}i.hasLines(d)&&(o(h,d,p,g,m,{noDash:!0}),m("connectgaps"));var x=y("cluster.maxzoom"),S=y("cluster.step"),M=y("cluster.color",d.marker&&d.marker.color||p),C=y("cluster.size"),w=y("cluster.opacity"),k=x!==!1||S!==!1||M!==!1||C!==!1||w!==!1,A=m("cluster.enabled",k);if(A||i.hasText(d)){var b=g.font.family;s(h,d,g,m,{noSelect:!0,noFontVariant:!0,noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0,font:{family:u(b)?b:"Open Sans Regular",weight:g.font.weight,style:g.font.style,size:g.font.size,color:g.font.color}})}m("fill"),d.fill!=="none"&&l(h,d,p,m),t.coerceSelectionMarkerOpacity(d,m)};function c(f,h,d){var p=d("lon")||[],g=d("lat")||[],m=Math.min(p.length,g.length);return h._length=m,m}}}),o9=de({"src/traces/scattermap/format_labels.js"(e,r){"use strict";var t=nn();r.exports=function(a,o,s){var l={},n=s[o.subplot]._subplot,u=n.mockAxis,c=a.lonlat;return l.lonLabel=t.tickText(u,u.c2l(c[0]),!0).text,l.latLabel=t.tickText(u,u.c2l(c[1]),!0).text,l}}}),s9=de({"src/plots/map/convert_text_opts.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o){var s=a.split(" "),l=s[0],n=s[1],u=t.isArrayOrTypedArray(o)?t.mean(o):o,c=.5+u/100,f=1.5+u/100,h=["",""],d=[0,0];switch(l){case"top":h[0]="top",d[1]=-f;break;case"bottom":h[0]="bottom",d[1]=f;break}switch(n){case"left":h[1]="right",d[0]=-c;break;case"right":h[1]="left",d[0]=c;break}var p;return h[0]&&h[1]?p=h.join("-"):h[0]?p=h[0]:h[1]?p=h[1]:p="center",{anchor:p,offset:d}}}}),TK=de({"src/traces/scattermap/convert.js"(e,r){"use strict";var t=da(),i=Qt(),a=cn().BADNUM,o=g_(),s=ks(),l=hn(),n=Sy(),u=bs(),c=n9().isSupportedFont,f=s9(),h=sf().appendArrayPointValue,d=Zo().NEWLINES,p=Zo().BR_TAG_ALL;r.exports=function(w,k){var A=k[0].trace,b=A.visible===!0&&A._length!==0,E=A.fill!=="none",T=u.hasLines(A),F=u.hasMarkers(A),D=u.hasText(A),R=F&&A.marker.symbol==="circle",P=F&&A.marker.symbol!=="circle",z=A.cluster&&A.cluster.enabled,I=g("fill"),L=g("line"),B=g("circle"),O=g("symbol"),G={fill:I,line:L,circle:B,symbol:O};if(!b)return G;var W;if((E||T)&&(W=o.calcTraceToLineCoords(k)),E&&(I.geojson=o.makePolygon(W),I.layout.visibility="visible",i.extendFlat(I.paint,{"fill-color":A.fillcolor})),T&&(L.geojson=o.makeLine(W),L.layout.visibility="visible",i.extendFlat(L.paint,{"line-width":A.line.width,"line-color":A.line.color,"line-opacity":A.opacity})),R){var X=m(k);B.geojson=X.geojson,B.layout.visibility="visible",z&&(B.filter=["!",["has","point_count"]],G.cluster={type:"circle",filter:["has","point_count"],layout:{visibility:"visible"},paint:{"circle-color":S(A.cluster.color,A.cluster.step),"circle-radius":S(A.cluster.size,A.cluster.step),"circle-opacity":S(A.cluster.opacity,A.cluster.step)}},G.clusterCount={type:"symbol",filter:["has","point_count"],paint:{},layout:{"text-field":"{point_count_abbreviated}","text-font":M(A),"text-size":12}}),i.extendFlat(B.paint,{"circle-color":X.mcc,"circle-radius":X.mrc,"circle-opacity":X.mo})}if(R&&z&&(B.filter=["!",["has","point_count"]]),(P||D)&&(O.geojson=y(k,w),i.extendFlat(O.layout,{visibility:"visible","icon-image":"{symbol}","text-field":"{text}"}),P&&(i.extendFlat(O.layout,{"icon-size":A.marker.size/10}),"angle"in A.marker&&A.marker.angle!=="auto"&&i.extendFlat(O.layout,{"icon-rotate":{type:"identity",property:"angle"},"icon-rotation-alignment":"map"}),O.layout["icon-allow-overlap"]=A.marker.allowoverlap,i.extendFlat(O.paint,{"icon-opacity":A.opacity*A.marker.opacity,"icon-color":A.marker.color,"icon-halo-color":A.marker.color,"icon-halo-width":2,"icon-halo-blur":1.5})),D)){var Z=(A.marker||{}).size,J=f(A.textposition,Z);i.extendFlat(O.layout,{"text-size":A.textfont.size,"text-anchor":J.anchor,"text-offset":J.offset,"text-font":M(A)}),i.extendFlat(O.paint,{"text-color":A.textfont.color,"text-opacity":A.opacity})}return G};function g(C){return{type:C,geojson:o.makeBlank(),layout:{visibility:"none"},filter:null,paint:{}}}function m(C){var w=C[0].trace,k=w.marker,A=w.selectedpoints,b=i.isArrayOrTypedArray(k.color),E=i.isArrayOrTypedArray(k.size),T=i.isArrayOrTypedArray(k.opacity),F;function D(Z){return w.opacity*Z}function R(Z){return Z/2}var P;b&&(s.hasColorscale(w,"marker")?P=s.makeColorScaleFuncFromTrace(k):P=i.identity);var z;E&&(z=n(w));var I;T&&(I=function(Z){var J=t(Z)?+i.constrain(Z,0,1):0;return D(J)});var L=[];for(F=0;F<C.length;F++){var B=C[F],O=B.lonlat;if(!x(O)){var G={};P&&(G.mcc=B.mcc=P(B.mc)),z&&(G.mrc=B.mrc=z(B.ms)),I&&(G.mo=I(B.mo)),A&&(G.selected=B.selected||0),L.push({type:"Feature",id:F+1,geometry:{type:"Point",coordinates:O},properties:G})}}var W;if(A)for(W=l.makeSelectedPointStyleFns(w),F=0;F<L.length;F++){var X=L[F].properties;W.selectedOpacityFn&&(X.mo=D(W.selectedOpacityFn(X))),W.selectedColorFn&&(X.mcc=W.selectedColorFn(X)),W.selectedSizeFn&&(X.mrc=W.selectedSizeFn(X))}return{geojson:{type:"FeatureCollection",features:L},mcc:b||W&&W.selectedColorFn?{type:"identity",property:"mcc"}:k.color,mrc:E||W&&W.selectedSizeFn?{type:"identity",property:"mrc"}:R(k.size),mo:T||W&&W.selectedOpacityFn?{type:"identity",property:"mo"}:D(k.opacity)}}function y(C,w){for(var k=w._fullLayout,A=C[0].trace,b=A.marker||{},E=b.symbol,T=b.angle,F=E!=="circle"?_(E):v,D=T!=="auto"?_(T,!0):v,R=u.hasText(A)?_(A.text):v,P=[],z=0;z<C.length;z++){var I=C[z];if(!x(I.lonlat)){var L=A.texttemplate,B;if(L){var O=Array.isArray(L)?L[z]||"":L,G=A._module.formatLabels(I,A,k),W={};h(W,A,I.i),B=i.texttemplateString({data:[W,I,A._meta],fallback:A.texttemplatefallback,labels:G,locale:k._d3locale,template:O})}else B=R(z);B&&(B=B.replace(d,"").replace(p,`
+`)),P.push({type:"Feature",geometry:{type:"Point",coordinates:I.lonlat},properties:{symbol:F(z),angle:D(z),text:B}})}}return{type:"FeatureCollection",features:P}}function _(C,w){return i.isArrayOrTypedArray(C)?w?function(k){return t(C[k])?+C[k]:0}:function(k){return C[k]}:C?function(){return C}:v}function v(){return""}function x(C){return C[0]===a}function S(C,w){var k;if(i.isArrayOrTypedArray(C)&&i.isArrayOrTypedArray(w)){k=["step",["get","point_count"],C[0]];for(var A=1;A<C.length;A++)k.push(w[A-1],C[A])}else k=C;return k}function M(C){var w=C.textfont,k=w.family,A=w.style,b=w.weight,E=k.split(" "),T=E[E.length-1]==="Italic";T&&E.pop(),T=T||A==="italic";var F=E.join(" ");b==="bold"&&E.indexOf("Bold")===-1?F+=" Bold":b<=1e3&&(E[0]==="Metropolis"?(F="Metropolis",b>850?F+=" Black":b>750?F+=" Extra Bold":b>650?F+=" Bold":b>550?F+=" Semi Bold":b>450?F+=" Medium":b>350?F+=" Regular":b>250?F+=" Light":b>150?F+=" Extra Light":F+=" Thin"):E.slice(0,2).join(" ")==="Open Sans"?(F="Open Sans",b>750?F+=" Extrabold":b>650?F+=" Bold":b>550?F+=" Semibold":b>350?F+=" Regular":F+=" Light"):E.slice(0,3).join(" ")==="Klokantech Noto Sans"&&(F="Klokantech Noto Sans",E[3]==="CJK"&&(F+=" CJK"),F+=b>500?" Bold":" Regular")),T&&(F+=" Italic"),F==="Open Sans Regular Italic"?F="Open Sans Italic":F==="Open Sans Regular Bold"?F="Open Sans Bold":F==="Open Sans Regular Bold Italic"?F="Open Sans Bold Italic":F==="Klokantech Noto Sans Regular Italic"&&(F="Klokantech Noto Sans Italic"),c(F)||(F=k);var D=F.split(", ");return D}}}),AK=de({"src/traces/scattermap/plot.js"(e,r){"use strict";var t=Qt(),i=TK(),a=D0().traceLayerPrefix,o={cluster:["cluster","clusterCount","circle"],nonCluster:["fill","line","circle","symbol"]};function s(n,u,c,f){this.type="scattermap",this.subplot=n,this.uid=u,this.clusterEnabled=c,this.isHidden=f,this.sourceIds={fill:"source-"+u+"-fill",line:"source-"+u+"-line",circle:"source-"+u+"-circle",symbol:"source-"+u+"-symbol",cluster:"source-"+u+"-circle",clusterCount:"source-"+u+"-circle"},this.layerIds={fill:a+u+"-fill",line:a+u+"-line",circle:a+u+"-circle",symbol:a+u+"-symbol",cluster:a+u+"-cluster",clusterCount:a+u+"-cluster-count"},this.below=null}var l=s.prototype;l.addSource=function(n,u,c){var f={type:"geojson",data:u.geojson};c&&c.enabled&&t.extendFlat(f,{cluster:!0,clusterMaxZoom:c.maxzoom});var h=this.subplot.map.getSource(this.sourceIds[n]);h?h.setData(u.geojson):this.subplot.map.addSource(this.sourceIds[n],f)},l.setSourceData=function(n,u){this.subplot.map.getSource(this.sourceIds[n]).setData(u.geojson)},l.addLayer=function(n,u,c){var f={type:u.type,id:this.layerIds[n],source:this.sourceIds[n],layout:u.layout,paint:u.paint};u.filter&&(f.filter=u.filter);for(var h=this.layerIds[n],d,p=this.subplot.getMapLayers(),g=0;g<p.length;g++)if(p[g].id===h){d=!0;break}d?(this.subplot.setOptions(h,"setLayoutProperty",f.layout),f.layout.visibility==="visible"&&this.subplot.setOptions(h,"setPaintProperty",f.paint)):this.subplot.addLayer(f,c)},l.update=function(u){var c=u[0].trace,f=this.subplot,h=f.map,d=i(f.gd,u),p=f.belowLookup["trace-"+this.uid],g=!!(c.cluster&&c.cluster.enabled),m=!!this.clusterEnabled,y=this;function _(b){b||y.addSource("circle",d.circle,c.cluster);for(var E=o.cluster,T=0;T<E.length;T++){var F=E[T],D=d[F];y.addLayer(F,D,p)}}function v(b){for(var E=o.cluster,T=E.length-1;T>=0;T--){var F=E[T];h.removeLayer(y.layerIds[F])}b||h.removeSource(y.sourceIds.circle)}function x(b){for(var E=o.nonCluster,T=0;T<E.length;T++){var F=E[T],D=d[F];b||y.addSource(F,D),y.addLayer(F,D,p)}}function S(b){for(var E=o.nonCluster,T=E.length-1;T>=0;T--){var F=E[T];h.removeLayer(y.layerIds[F]),b||h.removeSource(y.sourceIds[F])}}function M(b){m?v(b):S(b)}function C(b){g?_(b):x(b)}function w(){for(var b=g?o.cluster:o.nonCluster,E=0;E<b.length;E++){var T=b[E],F=d[T];F&&(f.setOptions(y.layerIds[T],"setLayoutProperty",F.layout),F.layout.visibility==="visible"&&(T!=="cluster"&&y.setSourceData(T,F),f.setOptions(y.layerIds[T],"setPaintProperty",F.paint)))}}var k=this.isHidden,A=c.visible!==!0;A?k||M():k?A||C():m!==g?(M(),C()):(this.below!==p&&(M(!0),C(!0)),w()),this.clusterEnabled=g,this.isHidden=A,this.below=p,u[0].trace._glTrace=this},l.dispose=function(){for(var u=this.subplot.map,c=this.clusterEnabled?o.cluster:o.nonCluster,f=c.length-1;f>=0;f--){var h=c[f];u.removeLayer(this.layerIds[h]),u.removeSource(this.sourceIds[h])}},r.exports=function(u,c){var f=c[0].trace,h=f.cluster&&f.cluster.enabled,d=f.visible!==!0,p=new s(u,f.uid,h,d),g=i(u.gd,c),m=p.below=u.belowLookup["trace-"+f.uid],y,_,v;if(h)for(p.addSource("circle",g.circle,f.cluster),y=0;y<o.cluster.length;y++)_=o.cluster[y],v=g[_],p.addLayer(_,v,m);else for(y=0;y<o.nonCluster.length;y++)_=o.nonCluster[y],v=g[_],p.addSource(_,v,f.cluster),p.addLayer(_,v,m);return c[0].trace._glTrace=p,p}}}),z4=de({"src/traces/scattermap/hover.js"(e,r){"use strict";var t=$s(),i=Qt(),a=m1(),o=i.fillText,s=cn().BADNUM,l=D0().traceLayerPrefix;function n(c,f,h){var d=c.cd,p=d[0].trace,g=c.xa,m=c.ya,y=c.subplot,_=[],v=l+p.uid+"-circle",x=p.cluster&&p.cluster.enabled;if(x){var S=y.map.queryRenderedFeatures(null,{layers:[v]});_=S.map(function(z){return z.id})}var M=f>=0?Math.floor((f+180)/360):Math.ceil((f-180)/360),C=M*360,w=f-C;function k(z){var I=z.lonlat;if(I[0]===s||x&&_.indexOf(z.i+1)===-1)return 1/0;var L=i.modHalf(I[0],360),B=I[1],O=y.project([L,B]),G=O.x-g.c2p([w,B]),W=O.y-m.c2p([L,h]),X=Math.max(3,z.mrc||0);return Math.max(Math.sqrt(G*G+W*W)-X,1-3/X)}if(t.getClosest(d,k,c),c.index!==!1){var A=d[c.index],b=A.lonlat,E=[i.modHalf(b[0],360)+C,b[1]],T=g.c2p(E),F=m.c2p(E),D=A.mrc||1;c.x0=T-D,c.x1=T+D,c.y0=F-D,c.y1=F+D;var R={};R[p.subplot]={_subplot:y};var P=p._module.formatLabels(A,p,R);return c.lonLabel=P.lonLabel,c.latLabel=P.latLabel,c.color=a(p,A),c.extraText=u(p,A,d[0].t.labels),c.hovertemplate=p.hovertemplate,[c]}}function u(c,f,h){if(c.hovertemplate)return;var d=f.hi||c.hoverinfo,p=d.split("+"),g=p.indexOf("all")!==-1,m=p.indexOf("lon")!==-1,y=p.indexOf("lat")!==-1,_=f.lonlat,v=[];function x(S){return S+"\xB0"}return g||m&&y?v.push("("+x(_[1])+", "+x(_[0])+")"):m?v.push(h.lon+x(_[0])):y&&v.push(h.lat+x(_[1])),(g||p.indexOf("text")!==-1)&&o(f,c,v),v.join("<br>")}r.exports={hoverPoints:n,getExtraText:u}}}),MK=de({"src/traces/scattermap/event_data.js"(e,r){"use strict";r.exports=function(i,a){return i.lon=a.lon,i.lat=a.lat,i}}}),SK=de({"src/traces/scattermap/select.js"(e,r){"use strict";var t=Qt(),i=bs(),{BADNUM:a}=cn(),o=360,s=.001,l=(c,f,h,d)=>[c.c2p([h,d]),f.c2p([h,d])];function n(c,f,h,d,p){let g=l(c,f,h+o,d),m=l(c,f,h-o,d),y=g[0]-p[0],_=g[1]-p[1],v=Math.abs(y-(p[0]-m[0]))<s&&Math.abs(_-(p[1]-m[1]))<s;return{dx:y,dy:_,uniform:v}}function u(c,f,h){let d=-1/0,p=1/0,g=(m,y,_)=>{if(Math.abs(m)<s)return;let v=y/m,x=_/m;d=Math.max(d,Math.min(v,x)),p=Math.min(p,Math.max(v,x))};return g(c.dx,h.xmin-f[0],h.xmax-f[0]),g(c.dy,h.ymin-f[1],h.ymax-f[1]),!isFinite(d)||!isFinite(p)||d>p?null:[Math.floor(d)-1,Math.ceil(p)+1]}r.exports=function(f,h){var d;let{cd:p,xaxis:g,yaxis:m}=f,{trace:y}=p[0];if(!i.hasMarkers(y))return[];if(h===!1){for(let S of p)S.selected=0;return[]}let _=(d=g._subplot)==null?void 0:d.map,v=!!_?.getRenderWorldCopies()&&h.xmax>h.xmin,x=[];for(let S=0;S<p.length;S++){let M=p[S],[C,w]=M.lonlat;if(C===a)continue;let k=t.modHalf(C,o),A=l(g,m,k,w),b=!1;if(v){let E=n(g,m,k,w,A),T=u(E,A,h);for(let F=T?T[0]:0;T&&F<=T[1]&&!b;F++){let D=E.uniform?[A[0]+F*E.dx,A[1]+F*E.dy]:l(g,m,k+F*o,w);b=h.contains(D,null,S,f)}}else b=h.contains(A,null,S,f);b?(x.push({pointNumber:S,lon:C,lat:w}),M.selected=1):M.selected=0}return x}}});function Wr(e,r){this.x=e,this.y=r}function EK(e,r,t,i){let a=3*e,o=3*(t-e)-a,s=1-a-o,l=3*r,n=3*(i-r)-l,u=1-l-n;return function(c,f=1e-6){if(c<=0)return 0;if(c>=1)return 1;let h=c;for(let g=0;g<8;g++){let m=((s*h+o)*h+a)*h-c;if(Math.abs(m)<f)return((u*h+n)*h+l)*h;let y=(3*s*h+2*o)*h+a;if(Math.abs(y)<1e-6)break;h-=m/y}let d=0,p=1;h=c;for(let g=0;g<20;g++){let m=((s*h+o)*h+a)*h;if(Math.abs(m-c)<f)break;c>m?d=h:p=h,h=(d+p)*.5}return((u*h+n)*h+l)*h}}function B4(){return Tx??(Tx=typeof OffscreenCanvas<"u"&&!!new OffscreenCanvas(1,1).getContext("2d")&&typeof createImageBitmap=="function"),Tx}function l9(){if(Ax==null&&(Ax=!1,B4())){let e=new OffscreenCanvas(5,5).getContext("2d",{willReadFrequently:!0});if(e){for(let t=0;t<25;t++){let i=t*4;e.fillStyle=`rgb(${i},${i+1},${i+2})`,e.fillRect(t%5,Math.floor(t/5),1,1)}let r=e.getImageData(0,0,5,5).data;for(let t=0;t<100;t++)if(t%4!=3&&r[t]!==t){Ax=!0;break}}}return Ax||!1}function u9(){var e=new Ql(9);return Ql!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function kK(e){var r=e[0],t=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],n=e[7],u=e[8];return r*(u*o-s*n)+t*(-u*a+s*l)+i*(n*a-o*l)}function CK(e,r){var t=Math.sin(r),i=Math.cos(r);return e[0]=i,e[1]=t,e[2]=0,e[3]=-t,e[4]=i,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function DK(e,r){var t=r[0],i=r[1],a=r[2],o=r[3],s=t+t,l=i+i,n=a+a,u=t*s,c=i*s,f=i*l,h=a*s,d=a*l,p=a*n,g=o*s,m=o*l,y=o*n;return e[0]=1-f-p,e[3]=c-y,e[6]=h+m,e[1]=c+y,e[4]=1-u-p,e[7]=d-g,e[2]=h-m,e[5]=d+g,e[8]=1-u-f,e}function Rp(){var e=new Ql(16);return Ql!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function O4(e){var r=new Ql(16);return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r}function LK(e,r){return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}function Hh(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function E_(e,r){var t=r[0],i=r[1],a=r[2],o=r[3],s=r[4],l=r[5],n=r[6],u=r[7],c=r[8],f=r[9],h=r[10],d=r[11],p=r[12],g=r[13],m=r[14],y=r[15],_=t*l-i*s,v=t*n-a*s,x=t*u-o*s,S=i*n-a*l,M=i*u-o*l,C=a*u-o*n,w=c*g-f*p,k=c*m-h*p,A=c*y-d*p,b=f*m-h*g,E=f*y-d*g,T=h*y-d*m,F=_*T-v*E+x*b+S*A-M*k+C*w;return F?(F=1/F,e[0]=(l*T-n*E+u*b)*F,e[1]=(a*E-i*T-o*b)*F,e[2]=(g*C-m*M+y*S)*F,e[3]=(h*M-f*C-d*S)*F,e[4]=(n*A-s*T-u*k)*F,e[5]=(t*T-a*A+o*k)*F,e[6]=(m*x-p*C-y*v)*F,e[7]=(c*C-h*x+d*v)*F,e[8]=(s*E-l*A+u*w)*F,e[9]=(i*A-t*E-o*w)*F,e[10]=(p*M-g*x+y*_)*F,e[11]=(f*x-c*M-d*_)*F,e[12]=(l*k-s*b-n*w)*F,e[13]=(t*b-i*k+a*w)*F,e[14]=(g*v-p*S-m*_)*F,e[15]=(c*S-f*v+h*_)*F,e):null}function $v(e,r,t){var i=r[0],a=r[1],o=r[2],s=r[3],l=r[4],n=r[5],u=r[6],c=r[7],f=r[8],h=r[9],d=r[10],p=r[11],g=r[12],m=r[13],y=r[14],_=r[15],v=t[0],x=t[1],S=t[2],M=t[3];return e[0]=v*i+x*l+S*f+M*g,e[1]=v*a+x*n+S*h+M*m,e[2]=v*o+x*u+S*d+M*y,e[3]=v*s+x*c+S*p+M*_,v=t[4],x=t[5],S=t[6],M=t[7],e[4]=v*i+x*l+S*f+M*g,e[5]=v*a+x*n+S*h+M*m,e[6]=v*o+x*u+S*d+M*y,e[7]=v*s+x*c+S*p+M*_,v=t[8],x=t[9],S=t[10],M=t[11],e[8]=v*i+x*l+S*f+M*g,e[9]=v*a+x*n+S*h+M*m,e[10]=v*o+x*u+S*d+M*y,e[11]=v*s+x*c+S*p+M*_,v=t[12],x=t[13],S=t[14],M=t[15],e[12]=v*i+x*l+S*f+M*g,e[13]=v*a+x*n+S*h+M*m,e[14]=v*o+x*u+S*d+M*y,e[15]=v*s+x*c+S*p+M*_,e}function Ol(e,r,t){var i=t[0],a=t[1],o=t[2],s,l,n,u,c,f,h,d,p,g,m,y;return r===e?(e[12]=r[0]*i+r[4]*a+r[8]*o+r[12],e[13]=r[1]*i+r[5]*a+r[9]*o+r[13],e[14]=r[2]*i+r[6]*a+r[10]*o+r[14],e[15]=r[3]*i+r[7]*a+r[11]*o+r[15]):(s=r[0],l=r[1],n=r[2],u=r[3],c=r[4],f=r[5],h=r[6],d=r[7],p=r[8],g=r[9],m=r[10],y=r[11],e[0]=s,e[1]=l,e[2]=n,e[3]=u,e[4]=c,e[5]=f,e[6]=h,e[7]=d,e[8]=p,e[9]=g,e[10]=m,e[11]=y,e[12]=s*i+c*a+p*o+r[12],e[13]=l*i+f*a+g*o+r[13],e[14]=n*i+h*a+m*o+r[14],e[15]=u*i+d*a+y*o+r[15]),e}function Xu(e,r,t){var i=t[0],a=t[1],o=t[2];return e[0]=r[0]*i,e[1]=r[1]*i,e[2]=r[2]*i,e[3]=r[3]*i,e[4]=r[4]*a,e[5]=r[5]*a,e[6]=r[6]*a,e[7]=r[7]*a,e[8]=r[8]*o,e[9]=r[9]*o,e[10]=r[10]*o,e[11]=r[11]*o,e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}function Wv(e,r,t){var i=Math.sin(t),a=Math.cos(t),o=r[4],s=r[5],l=r[6],n=r[7],u=r[8],c=r[9],f=r[10],h=r[11];return r!==e&&(e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[4]=o*a+u*i,e[5]=s*a+c*i,e[6]=l*a+f*i,e[7]=n*a+h*i,e[8]=u*a-o*i,e[9]=c*a-s*i,e[10]=f*a-l*i,e[11]=h*a-n*i,e}function c9(e,r,t){var i=Math.sin(t),a=Math.cos(t),o=r[0],s=r[1],l=r[2],n=r[3],u=r[8],c=r[9],f=r[10],h=r[11];return r!==e&&(e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[0]=o*a-u*i,e[1]=s*a-c*i,e[2]=l*a-f*i,e[3]=n*a-h*i,e[8]=o*i+u*a,e[9]=s*i+c*a,e[10]=l*i+f*a,e[11]=n*i+h*a,e}function zp(e,r,t){var i=Math.sin(t),a=Math.cos(t),o=r[0],s=r[1],l=r[2],n=r[3],u=r[4],c=r[5],f=r[6],h=r[7];return r!==e&&(e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15]),e[0]=o*a+u*i,e[1]=s*a+c*i,e[2]=l*a+f*i,e[3]=n*a+h*i,e[4]=u*a-o*i,e[5]=c*a-s*i,e[6]=f*a-l*i,e[7]=h*a-n*i,e}function FK(e,r){return e[0]=r[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=r[1],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=r[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function PK(e,r,t,i,a){var o=1/Math.tan(r/2);if(e[0]=o/t,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,a!=null&&a!==1/0){var s=1/(i-a);e[10]=(a+i)*s,e[14]=2*a*i*s}else e[10]=-1,e[14]=-2*i;return e}function IK(e,r,t,i,a,o,s){var l=1/(r-t),n=1/(i-a),u=1/(o-s);return e[0]=-2*l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*n,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*u,e[11]=0,e[12]=(r+t)*l,e[13]=(a+i)*n,e[14]=(s+o)*u,e[15]=1,e}function RK(e,r){return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]&&e[4]===r[4]&&e[5]===r[5]&&e[6]===r[6]&&e[7]===r[7]&&e[8]===r[8]&&e[9]===r[9]&&e[10]===r[10]&&e[11]===r[11]&&e[12]===r[12]&&e[13]===r[13]&&e[14]===r[14]&&e[15]===r[15]}function zK(e,r){var t=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],n=e[6],u=e[7],c=e[8],f=e[9],h=e[10],d=e[11],p=e[12],g=e[13],m=e[14],y=e[15],_=r[0],v=r[1],x=r[2],S=r[3],M=r[4],C=r[5],w=r[6],k=r[7],A=r[8],b=r[9],E=r[10],T=r[11],F=r[12],D=r[13],R=r[14],P=r[15];return Math.abs(t-_)<=1e-6*Math.max(1,Math.abs(t),Math.abs(_))&&Math.abs(i-v)<=1e-6*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(a-x)<=1e-6*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(o-S)<=1e-6*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(s-M)<=1e-6*Math.max(1,Math.abs(s),Math.abs(M))&&Math.abs(l-C)<=1e-6*Math.max(1,Math.abs(l),Math.abs(C))&&Math.abs(n-w)<=1e-6*Math.max(1,Math.abs(n),Math.abs(w))&&Math.abs(u-k)<=1e-6*Math.max(1,Math.abs(u),Math.abs(k))&&Math.abs(c-A)<=1e-6*Math.max(1,Math.abs(c),Math.abs(A))&&Math.abs(f-b)<=1e-6*Math.max(1,Math.abs(f),Math.abs(b))&&Math.abs(h-E)<=1e-6*Math.max(1,Math.abs(h),Math.abs(E))&&Math.abs(d-T)<=1e-6*Math.max(1,Math.abs(d),Math.abs(T))&&Math.abs(p-F)<=1e-6*Math.max(1,Math.abs(p),Math.abs(F))&&Math.abs(g-D)<=1e-6*Math.max(1,Math.abs(g),Math.abs(D))&&Math.abs(m-R)<=1e-6*Math.max(1,Math.abs(m),Math.abs(R))&&Math.abs(y-P)<=1e-6*Math.max(1,Math.abs(y),Math.abs(P))}function f9(){var e=new Ql(3);return Ql!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function N4(e){var r=new Ql(3);return r[0]=e[0],r[1]=e[1],r[2]=e[2],r}function ap(e){var r=e[0],t=e[1],i=e[2];return Math.sqrt(r*r+t*t+i*i)}function h9(e,r,t){var i=new Ql(3);return i[0]=e,i[1]=r,i[2]=t,i}function lh(e,r,t){return e[0]=r[0]+t[0],e[1]=r[1]+t[1],e[2]=r[2]+t[2],e}function d9(e,r,t){return e[0]=r[0]-t[0],e[1]=r[1]-t[1],e[2]=r[2]-t[2],e}function Ws(e,r,t){return e[0]=r[0]*t,e[1]=r[1]*t,e[2]=r[2]*t,e}function k_(e,r,t,i){return e[0]=r[0]+t[0]*i,e[1]=r[1]+t[1]*i,e[2]=r[2]+t[2]*i,e}function BK(e,r){var t=r[0]-e[0],i=r[1]-e[1],a=r[2]-e[2];return Math.sqrt(t*t+i*i+a*a)}function OK(e,r){return e[0]=-r[0],e[1]=-r[1],e[2]=-r[2],e}function qc(e,r){var t=r[0],i=r[1],a=r[2],o=t*t+i*i+a*a;return o>0&&(o=1/Math.sqrt(o)),e[0]=r[0]*o,e[1]=r[1]*o,e[2]=r[2]*o,e}function Kl(e,r){return e[0]*r[0]+e[1]*r[1]+e[2]*r[2]}function uf(e,r,t){var i=r[0],a=r[1],o=r[2],s=t[0],l=t[1],n=t[2];return e[0]=a*n-o*l,e[1]=o*s-i*n,e[2]=i*l-a*s,e}function NK(e,r,t){var i=r[0],a=r[1],o=r[2],s=t[3]*i+t[7]*a+t[11]*o+t[15];return s||(s=1),e[0]=(t[0]*i+t[4]*a+t[8]*o+t[12])/s,e[1]=(t[1]*i+t[5]*a+t[9]*o+t[13])/s,e[2]=(t[2]*i+t[6]*a+t[10]*o+t[14])/s,e}function jK(e,r,t){var i=r[0],a=r[1],o=r[2];return e[0]=i*t[0]+a*t[3]+o*t[6],e[1]=i*t[1]+a*t[4]+o*t[7],e[2]=i*t[2]+a*t[5]+o*t[8],e}function j4(e,r,t){var i=t[0],a=t[1],o=t[2],s=t[3],l=r[0],n=r[1],u=r[2],c=a*u-o*n,f=o*l-i*u,h=i*n-a*l;return c+=c,f+=f,h+=h,e[0]=l+s*c+a*h-o*f,e[1]=n+s*f+o*c-i*h,e[2]=u+s*h+i*f-a*c,e}function O1(e,r,t,i){var a=[],o=[];return a[0]=r[0]-t[0],a[1]=r[1]-t[1],a[2]=r[2]-t[2],o[0]=a[0],o[1]=a[1]*Math.cos(i)-a[2]*Math.sin(i),o[2]=a[1]*Math.sin(i)+a[2]*Math.cos(i),e[0]=o[0]+t[0],e[1]=o[1]+t[1],e[2]=o[2]+t[2],e}function Yv(e,r,t,i){var a=[],o=[];return a[0]=r[0]-t[0],a[1]=r[1]-t[1],a[2]=r[2]-t[2],o[0]=a[2]*Math.sin(i)+a[0]*Math.cos(i),o[1]=a[1],o[2]=a[2]*Math.cos(i)-a[0]*Math.sin(i),e[0]=o[0]+t[0],e[1]=o[1]+t[1],e[2]=o[2]+t[2],e}function U4(e,r,t,i){var a=[],o=[];return a[0]=r[0]-t[0],a[1]=r[1]-t[1],a[2]=r[2]-t[2],o[0]=a[0]*Math.cos(i)-a[1]*Math.sin(i),o[1]=a[0]*Math.sin(i)+a[1]*Math.cos(i),o[2]=a[2],e[0]=o[0]+t[0],e[1]=o[1]+t[1],e[2]=o[2]+t[2],e}function UK(e){return e[0]=0,e[1]=0,e[2]=0,e}function qK(){var e=new Ql(4);return Ql!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}function VK(e,r,t,i){var a=new Ql(4);return a[0]=e,a[1]=r,a[2]=t,a[3]=i,a}function GK(e,r,t){return e[0]=r[0]*t[0],e[1]=r[1]*t[1],e[2]=r[2]*t[2],e[3]=r[3]*t[3],e}function HK(e,r,t){return e[0]=r[0]*t,e[1]=r[1]*t,e[2]=r[2]*t,e[3]=r[3]*t,e}function $K(e,r){var t=r[0],i=r[1],a=r[2],o=r[3],s=t*t+i*i+a*a+o*o;return s>0&&(s=1/Math.sqrt(s)),e[0]=t*s,e[1]=i*s,e[2]=a*s,e[3]=o*s,e}function pu(e,r,t){var i=r[0],a=r[1],o=r[2],s=r[3];return e[0]=t[0]*i+t[4]*a+t[8]*o+t[12]*s,e[1]=t[1]*i+t[5]*a+t[9]*o+t[13]*s,e[2]=t[2]*i+t[6]*a+t[10]*o+t[14]*s,e[3]=t[3]*i+t[7]*a+t[11]*o+t[15]*s,e}function p9(){var e=new Ql(4);return Ql!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function WK(e,r,t){t*=.5;var i=Math.sin(t);return e[0]=i*r[0],e[1]=i*r[1],e[2]=i*r[2],e[3]=Math.cos(t),e}function YK(e,r,t){var i=r[0],a=r[1],o=r[2],s=r[3],l=t[0],n=t[1],u=t[2],c=t[3];return e[0]=i*c+s*l+a*u-o*n,e[1]=a*c+s*n+o*l-i*u,e[2]=o*c+s*u+i*n-a*l,e[3]=s*c-i*l-a*n-o*u,e}function C_(e,r,t,i){var a=r[0],o=r[1],s=r[2],l=r[3],n=t[0],u=t[1],c=t[2],f=t[3],h,d=a*n+o*u+s*c+l*f,p,g,m;return d<0&&(d=-d,n=-n,u=-u,c=-c,f=-f),1-d>1e-6?(h=Math.acos(d),p=Math.sin(h),g=Math.sin((1-i)*h)/p,m=Math.sin(i*h)/p):(g=1-i,m=i),e[0]=g*a+m*n,e[1]=g*o+m*u,e[2]=g*s+m*c,e[3]=g*l+m*f,e}function XK(e,r){var t=r[0]+r[4]+r[8],i;if(t>0)i=Math.sqrt(t+1),e[3]=.5*i,i=.5/i,e[0]=(r[5]-r[7])*i,e[1]=(r[6]-r[2])*i,e[2]=(r[1]-r[3])*i;else{var a=0;r[4]>r[0]&&(a=1),r[8]>r[a*3+a]&&(a=2);var o=(a+1)%3,s=(a+2)%3;i=Math.sqrt(r[a*3+a]-r[o*3+o]-r[s*3+s]+1),e[a]=.5*i,i=.5/i,e[3]=(r[o*3+s]-r[s*3+o])*i,e[o]=(r[o*3+a]+r[a*3+o])*i,e[s]=(r[s*3+a]+r[a*3+s])*i}return e}function q4(e,r,t,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"zyx",o=Math.PI/360;r*=o,i*=o,t*=o;var s=Math.sin(r),l=Math.cos(r),n=Math.sin(t),u=Math.cos(t),c=Math.sin(i),f=Math.cos(i);switch(a){case"xyz":e[0]=s*u*f+l*n*c,e[1]=l*n*f-s*u*c,e[2]=l*u*c+s*n*f,e[3]=l*u*f-s*n*c;break;case"xzy":e[0]=s*u*f-l*n*c,e[1]=l*n*f-s*u*c,e[2]=l*u*c+s*n*f,e[3]=l*u*f+s*n*c;break;case"yxz":e[0]=s*u*f+l*n*c,e[1]=l*n*f-s*u*c,e[2]=l*u*c-s*n*f,e[3]=l*u*f+s*n*c;break;case"yzx":e[0]=s*u*f+l*n*c,e[1]=l*n*f+s*u*c,e[2]=l*u*c-s*n*f,e[3]=l*u*f-s*n*c;break;case"zxy":e[0]=s*u*f-l*n*c,e[1]=l*n*f+s*u*c,e[2]=l*u*c+s*n*f,e[3]=l*u*f-s*n*c;break;case"zyx":e[0]=s*u*f-l*n*c,e[1]=l*n*f+s*u*c,e[2]=l*u*c-s*n*f,e[3]=l*u*f+s*n*c;break;default:throw Error("Unknown angle order "+a)}return e}function V4(){var e=new Ql(2);return Ql!=Float32Array&&(e[0]=0,e[1]=0),e}function v9(e,r){var t=new Ql(2);return t[0]=e,t[1]=r,t}function m9(e,r,t){return e[0]=r[0]*t,e[1]=r[1]*t,e}function g9(e){var r=e[0],t=e[1];return Math.sqrt(r*r+t*t)}function ZK(e){var r=e[0],t=e[1];return r*r+t*t}function KK(e,r){return e[0]*r[0]+e[1]*r[1]}function y9(e){return e[0]=0,e[1]=0,e}function Cf(e,r,t){return r*(Bi/(e.tileSize*2**(t-e.tileID.overscaledZ)))}function Zu(e){return e instanceof Error?e:Error(typeof e=="string"?e:String(e))}function Bp(){return new Float64Array(4)}function fs(){return new Float64Array(3)}function L0(){return new Float64Array(16)}function D_(){let e=new Float64Array(16);return Hh(e),e}function _9(){let e=new Float32Array(16);return Hh(e),e}function Op(e,r,t,i,a=!1){if(!t[0]&&!t[1])return[0,0];let o=a?i==="map"?-e.bearingInRadians:0:i==="viewport"?e.bearingInRadians:0;if(o){let s=Math.sin(o),l=Math.cos(o);t=[t[0]*l-t[1]*s,t[0]*s+t[1]*l]}return[a?t[0]:Cf(r,t[0],e.zoom),a?t[1]:Cf(r,t[1],e.zoom)]}function G4(e,r){return e[0]*r[0]+e[1]*r[1]+e[2]*r[2]+e[3]}function uh(e,r,t){let i=kK([e[0],e[1],e[2],r[0],r[1],r[2],t[0],t[1],t[2]]);if(i===0)return null;let a=uf([],[r[0],r[1],r[2]],[t[0],t[1],t[2]]),o=uf([],[t[0],t[1],t[2]],[e[0],e[1],e[2]]),s=uf([],[e[0],e[1],e[2]],[r[0],r[1],r[2]]),l=Ws([],a,-e[3]);return lh(l,l,Ws([],o,-r[3])),lh(l,l,Ws([],s,-t[3])),Ws(l,l,1/i),l}function JK(e,r,t){let i=e[0]*t[0]+e[1]*t[1]+e[2]*t[2],a=r[0]*t[0]+r[1]*t[1]+r[2]*t[2];return a===0?null:(-i-t[3])/a}function L_(e,r,t,i){let a=Math.sqrt(e*e+r*r),o=Math.sqrt(t*t+i*i);e/=a,r/=a,t/=o,i/=o;let s=e*t+r*i,l=Math.acos(s);return-r*t+e*i>0?l:-l}function Df(e,r){let t=F0(e,360),i=F0(r,360),a=i-t,o=i>t?a-360:a+360;return Math.abs(a)<Math.abs(o)?a:o}function F_(e,r){let t=F0(e,Math.PI*2),i=F0(r,Math.PI*2);return Math.min(Math.abs(t-i),Math.abs(t-i+Math.PI*2),Math.abs(t-i-Math.PI*2))}function F0(e,r){return(e%r+r)%r}function P_(e,r,t,i,a){return Xv(i,a,to((e-r)/(t-r),0,1))}function Xv(e,r,t){return e*(1-t)+r*t}function QK(e){let r=1/0,t=1/0,i=-1/0,a=-1/0;for(let o of e)r=Math.min(r,o.x),t=Math.min(t,o.y),i=Math.max(i,o.x),a=Math.max(a,o.y);return[r,t,i,a]}function eJ(e){if(!e.length)return new Set;let r=Math.max(...e.map(n=>n.canonical.z)),t=1/0,i=-1/0,a=1/0,o=-1/0,s=[];for(let n of e){let{x:u,y:c,z:f}=n.canonical,h=2**(r-f),d=u*h,p=c*h;s.push({id:n,x:d,y:p}),d<t&&(t=d),d>i&&(i=d),p<a&&(a=p),p>o&&(o=p)}let l=new Set;for(let n of s)(n.x===t||n.x===i||n.y===a||n.y===o)&&l.add(n.id);return l}function tJ(e){if(e<=0)return 0;if(e>=1)return 1;let r=e*e,t=r*e;return 4*(e<.5?t:3*(e-r)+t-.75)}function H4(e,r,t,i){return EK(e,r,t,i)}function to(e,r,t){return Math.min(t,Math.max(r,e))}function ch(e,r,t){let i=t-r,a=((e-r)%i+i)%i+r;return a===r?t:a}function yn(e,...r){for(let t of r)for(let i in t)e[i]=t[i];return e}function N1(e,r){let t={};for(let i of r)i in e&&(t[i]=e[i]);return t}function x9(){return wP++}function rJ(e){return Math.log(e)/Math.LN2%1==0}function iJ(e){return e<=1?1:2**Math.ceil(Math.log(e)/Math.LN2)}function Vc(e){return 2**e}function Ku(e){return Math.log(e)/Math.LN2}function Lf(e,r,t){if(r<=0)return e;let i=1/r;return t===void 0||Math.abs(t)<1e-10?Math.round(e*i)/i:(t>0?Math.ceil(e*i-1e-9):Math.floor(e*i+1e-10))/i}function $4(e,r,t){let i={};for(let a in e)i[a]=r.call(t||this,e[a],a,e);return i}function b9(e,r,t){let i={};for(let a in e)r.call(t||this,e[a],a,e)&&(i[a]=e[a]);return i}function Td(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!Td(e[t],r[t]))return!1;return!0}if(typeof e=="object"&&e&&r!==null){if(typeof r!="object"||Object.keys(e).length!==Object.keys(r).length)return!1;for(let t in e)if(!Td(e[t],r[t]))return!1;return!0}return e===r}function cf(e){return Array.isArray(e)?e.map(cf):typeof e=="object"&&e?$4(e,cf):e}function To(e){uT[e]||(typeof console<"u"&&console.warn(e),uT[e]=!0)}function Np(e,r,t){return(t.y-e.y)*(r.x-e.x)>(r.y-e.y)*(t.x-e.x)}function aJ(e,r,t,i){let a=r.y-e.y,o=r.x-e.x,s=i.y-t.y,l=i.x-t.x,n=s*o-l*a;if(n===0)return null;let u=e.y-t.y,c=e.x-t.x,f=(l*u-s*c)/n;return new Wr(e.x+f*o,e.y+f*a)}function nJ([e,r,t]){return r+=90,r*=Math.PI/180,t*=Math.PI/180,[e*Math.cos(r)*Math.sin(t),e*Math.sin(r)*Math.sin(t),e*Math.cos(t)]}function Zv(e){return typeof WorkerGlobalScope<"u"&&e!==void 0&&e instanceof WorkerGlobalScope}function oJ(e){let r=/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,t={};if(e.replace(r,(i,a,o,s)=>{let l=o||s;return t[a]=!l||l.toLowerCase(),""}),t["max-age"]){let i=parseInt(t["max-age"],10);isNaN(i)?delete t["max-age"]:t["max-age"]=i}return t}function sJ(e){if(Ex==null){let r=e.navigator?e.navigator.userAgent:null;Ex=!!e.safari||!!(r&&(/\b(iPad|iPhone|iPod)\b/.test(r)||r.match("Safari")&&!r.match("Chrome")))}return Ex}function P0(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap}function lJ(e,r,t,i,a){let o=Math.max(-r,0)*4,s=(Math.max(0,t)-t)*i*4+o,l=i*4,n=Math.max(0,r),u=Math.max(0,t),c=Math.min(e.width,r+i),f=Math.min(e.height,t+a);return{rect:{x:n,y:u,width:c-n,height:f-u},layout:[{offset:s,stride:l}]}}function uJ(e,r,t,i,a){return Xr(this,null,function*(){if(typeof VideoFrame>"u")throw Error("VideoFrame not supported");let o=new VideoFrame(e,{timestamp:0});try{let s=o?.format;if(!s||!(s.startsWith("BGR")||s.startsWith("RGB")))throw Error(`Unrecognized format ${s}`);let l=s.startsWith("BGR"),n=new Uint8ClampedArray(i*a*4);if(yield o.copyTo(n,lJ(e,r,t,i,a)),l)for(let u=0;u<n.length;u+=4){let c=n[u];n[u]=n[u+2],n[u+2]=c}return n}finally{o.close()}})}function W4(e,r,t,i){return e.addEventListener(r,t,i),{unsubscribe:()=>{e.removeEventListener(r,t,i)}}}function rl(e){return e*Math.PI/180}function Ad(e){return e/Math.PI*180}function w9(e,r){return e.roll==r.roll&&e.pitch==r.pitch&&e.bearing==r.bearing}function cJ(e){let r=new Float64Array(9);DK(r,e);let t=Ad(-Math.asin(to(r[2],-1,1))),i,a;return Math.hypot(r[5],r[8])<.001?(i=0,a=-Ad(Math.atan2(r[3],r[4]))):(i=Ad(r[5]===0&&r[8]===0?0:Math.atan2(r[5],r[8])),a=Ad(r[1]===0&&r[0]===0?0:Math.atan2(r[1],r[0]))),{roll:i,pitch:t+90,bearing:a}}function T9(e,r,t){let i=v9(r.x-t.x,r.y-t.y),a=v9(e.x-t.x,e.y-t.y),o=i[0]*a[1]-i[1]*a[0];return Ad(Math.atan2(o,KK(i,a)))}function A9(e,r,t){let i=new Float64Array(4);return q4(i,e,r-90,t),i}function fJ(e,r){return cT[r]&&"touches"in e}function hJ(e,r){var t,i;if(!fT[r])return!1;let a=e,o=((i=(t=a?.target)==null?void 0:t.ownerDocument)==null?void 0:i.defaultView)||window;return a instanceof o.MouseEvent||a instanceof o.WheelEvent}function dJ(e){return cT[e]||fT[e]}function jp(e){return e instanceof Error&&e.name==="AbortError"}function Y4(e){if(e.aborted)throw new vm(e.reason)}function M9(e){return ff.REGISTERED_PROTOCOLS[e.substring(0,e.indexOf("://"))]}function pJ(e,r){ff.REGISTERED_PROTOCOLS[e]=r}function vJ(e){delete ff.REGISTERED_PROTOCOLS[e]}function X4(){var e;if(Zv(self))return(e=self.worker)==null?void 0:e.referrer;if(window.location.protocol==="blob:")try{return window.parent.location.href}catch{}return window.location.href}function mJ(e,r){return Xr(this,null,function*(){let t=new Request(e.url,{method:e.method||"GET",body:e.body,credentials:e.credentials,headers:e.headers,cache:e.cache,referrer:X4(),referrerPolicy:e.referrerPolicy,signal:r.signal});e.type==="json"&&!t.headers.has("Accept")&&t.headers.set("Accept","application/json");let i;try{i=yield fetch(t)}catch(s){throw jp(s)?s:new mm(0,Zu(s).message,e.url,new Blob)}if(!i.ok){let s=yield i.blob();throw new mm(i.status,i.statusText,e.url,s)}let a;a=e.type==="arrayBuffer"||e.type==="image"?i.arrayBuffer():e.type==="json"?i.json():i.text();let o=yield a;return Y4(r.signal),{data:o,cacheControl:i.headers.get("Cache-Control"),expires:i.headers.get("Expires"),etag:i.headers.get("ETag")}})}function gJ(e,r){return new Promise((t,i)=>{var a;let o=new XMLHttpRequest;o.open(e.method||"GET",e.url,!0),(e.type==="arrayBuffer"||e.type==="image")&&(o.responseType="arraybuffer");for(let s in e.headers)o.setRequestHeader(s,e.headers[s]);e.type==="json"&&(o.responseType="text",(a=e.headers)!=null&&a.Accept||o.setRequestHeader("Accept","application/json")),o.withCredentials=e.credentials==="include",o.onerror=()=>{i(Error(o.statusText))},o.onload=()=>{if(!r.signal.aborted)if((o.status>=200&&o.status<300||o.status===0)&&o.response!==null){let s=o.response;if(e.type==="json")try{s=JSON.parse(o.response)}catch(l){i(l);return}t({data:s,cacheControl:o.getResponseHeader("Cache-Control"),expires:o.getResponseHeader("Expires"),etag:o.getResponseHeader("ETag")})}else{let s=new Blob([o.response],{type:o.getResponseHeader("Content-Type")});i(new mm(o.status,o.statusText,e.url,s))}},r.signal.addEventListener("abort",()=>{o.abort(),i(new vm(r.signal.reason))}),o.send(e.body)})}function S9(e){if(!e||e.startsWith("data:image/"))return!0;if(e.startsWith("blob:")&&(e=e.slice(5),e.startsWith("null")))return!1;if(e.indexOf("://")<=0)return!0;let r=new URL(e),t=window.location;return r.protocol===t.protocol&&r.host===t.host}function E9(e,r,t){var i;(i=t[e])!=null&&i.includes(r)||(t[e]||(t[e]=[]),t[e].push(r))}function Z4(e,r,t){if(t?.[e]){let i=t[e].indexOf(r);i!==-1&&t[e].splice(i,1)}}function pc(e,r){return{kind:"array",itemType:e,N:r}}function ll(e){if(e.kind==="array"){let r=ll(e.itemType);return typeof e.N=="number"?`array<${r}, ${e.N}>`:e.itemType.kind==="value"?"array":`array<${r}>`}return e.kind}function j1(e,r){if(r.kind==="error")return null;if(e.kind==="array"){if(r.kind==="array"&&(r.N===0&&r.itemType.kind==="value"||!j1(e.itemType,r.itemType))&&(typeof e.N!="number"||e.N===r.N))return null}else{if(e.kind===r.kind)return null;if(e.kind==="value"){for(let t of CP)if(!j1(t,r))return null}}return`Expected ${ll(e)} but found ${ll(r)} instead.`}function K4(e,r){return r.some(t=>t.kind===e.kind)}function I0(e,r){return r.some(t=>t==="null"?e===null:t==="array"?Array.isArray(e):t==="object"?e&&!Array.isArray(e)&&typeof e=="object":t===typeof e)}function Up(e,r){return e.kind==="array"&&r.kind==="array"?e.itemType.kind===r.itemType.kind&&typeof e.N=="number":e.kind===r.kind}function k9(e){return e%=360,e<0&&(e+=360),e}function C9([e,r,t,i]){e=J4(e),r=J4(r),t=J4(t);let a,o,s=Q4((.2225045*e+.7168786*r+.0606169*t)/1);e===r&&r===t?a=o=s:(a=Q4((.4360747*e+.3850649*r+.1430804*t)/vT),o=Q4((.0139322*e+.0971045*r+.7141733*t)/mT));let l=116*s-16;return[l<0?0:l,500*(a-s),200*(s-o),i]}function J4(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function Q4(e){return e>.008856451679035631?e**.3333333333333333:e/yT+gT}function D9([e,r,t,i]){let a=(e+16)/116,o=isNaN(r)?a:a+r/500,s=isNaN(t)?a:a-t/200;return a=1*t6(a),o=vT*t6(o),s=mT*t6(s),[e6(3.1338561*o-1.6168667*a-.4906146*s),e6(-.9787684*o+1.9161415*a+.033454*s),e6(.0719453*o-.2289914*a+1.4052427*s),i]}function e6(e){return e=e<=.00304?12.92*e:1.055*e**.4166666666666667-.055,e<0?0:e>1?1:e}function t6(e){return e>Cx?e*e*e:yT*(e-gT)}function yJ(e){let[r,t,i,a]=C9(e),o=Math.sqrt(t*t+i*i);return[Math.round(o*1e4)?k9(Math.atan2(i,t)*LP):NaN,o,r,a]}function _J([e,r,t,i]){return e=isNaN(e)?0:e*DP,D9([t,Math.cos(e)*r,Math.sin(e)*r,i])}function xJ([e,r,t,i]){e=k9(e),r/=100,t/=100;function a(o){let s=(o+e/30)%12,l=r*Math.min(t,1-t);return t-l*Math.max(-1,Math.min(s-3,9-s,1))}return[a(0),a(8),a(4),i]}function U1(e,r){return FP(e,r)?e[r]:void 0}function bJ(e){if(e=e.toLowerCase().trim(),e==="transparent")return[0,0,0,0];let r=U1(PP,e);if(r){let[i,a,o]=r;return[i/255,a/255,o/255,1]}if(e.startsWith("#")&&/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(e)){let i=e.length<6?1:2,a=1;return[I_(e.slice(a,a+=i)),I_(e.slice(a,a+=i)),I_(e.slice(a,a+=i)),I_(e.slice(a,a+i)||"ff")]}if(e.startsWith("rgb")){let i=e.match(/^rgba?\(\s*([\de.+-]+)(%)?(?:\s+|\s*(,)\s*)([\de.+-]+)(%)?(?:\s+|\s*(,)\s*)([\de.+-]+)(%)?(?:\s*([,\/])\s*([\de.+-]+)(%)?)?\s*\)$/);if(i){let[a,o,s,l,n,u,c,f,h,d,p,g]=i,m=[l||" ",c||" ",d].join("");if(m==="  "||m==="  /"||m===",,"||m===",,,"){let y=[s,u,h].join(""),_=y==="%%%"?100:y===""?255:0;if(_){let v=[Kv(+o/_,0,1),Kv(+n/_,0,1),Kv(+f/_,0,1),p?L9(+p,g):1];if(F9(v))return v}}return}}let t=e.match(/^hsla?\(\s*([\de.+-]+)(?:deg)?(?:\s+|\s*(,)\s*)([\de.+-]+)%(?:\s+|\s*(,)\s*)([\de.+-]+)%(?:\s*([,\/])\s*([\de.+-]+)(%)?)?\s*\)$/);if(t){let[i,a,o,s,l,n,u,c,f]=t,h=[o||" ",l||" ",u].join("");if(h==="  "||h==="  /"||h===",,"||h===",,,"){let d=[+a,Kv(+s,0,100),Kv(+n,0,100),c?L9(+c,f):1];if(F9(d))return xJ(d)}}}function I_(e){return parseInt(e.padEnd(2,e),16)/255}function L9(e,r){return Kv(r?e/100:e,0,1)}function Kv(e,r,t){return Math.min(Math.max(r,e),t)}function F9(e){return!e.some(Number.isNaN)}function qp(e,r,t){return e+t*(r-e)}function Jv(e,r,t){return e.map((i,a)=>qp(i,r[a],t))}function wJ(e){return e==="rgb"||e==="hcl"||e==="lab"}function P9(e,r,t,i){return typeof e=="number"&&e>=0&&e<=255&&typeof r=="number"&&r>=0&&r<=255&&typeof t=="number"&&t>=0&&t<=255?i===void 0||typeof i=="number"&&i>=0&&i<=1?null:`Invalid rgba value [${[e,r,t,i].join(", ")}]: 'a' must be between 0 and 1.`:`Invalid rgba value [${(typeof i=="number"?[e,r,t,i]:[e,r,t]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}function Qv(e){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"||e instanceof op||e instanceof ro||e instanceof Lx||e instanceof Ed||e instanceof Yh||e instanceof Xh||e instanceof If||e instanceof Zh||e instanceof Kh)return!0;if(Array.isArray(e)){for(let r of e)if(!Qv(r))return!1;return!0}if(typeof e=="object"){for(let r in e)if(!Qv(e[r]))return!1;return!0}return!1}function Ml(e){if(e===null)return gm;if(typeof e=="string")return so;if(typeof e=="boolean")return Ao;if(typeof e=="number")return Ra;if(e instanceof ro)return dh;if(e instanceof op)return mg;if(e instanceof Lx)return gg;if(e instanceof Ed)return ym;if(e instanceof Yh)return yg;if(e instanceof Xh)return _g;if(e instanceof If)return _m;if(e instanceof Zh)return xg;if(e instanceof Kh)return xm;if(Array.isArray(e)){let r=e.length,t;for(let i of e){let a=Ml(i);if(!t)t=a;else{if(t===a)continue;t=co;break}}return pc(t||co,r)}return Wp}function q1(e){let r=typeof e;return e===null?"":r==="string"||r==="number"||r==="boolean"?String(e):e instanceof ro||e instanceof op||e instanceof Ed||e instanceof Yh||e instanceof Xh||e instanceof If||e instanceof Zh||e instanceof Kh?e.toString():JSON.stringify(e)}function R_(e,r,t){let i=e.length-1,a=0,o=i,s=0,l,n;for(;a<=o;)if(s=Math.floor((a+o)/2),l=e[s],n=e[s+1],l<=r){if(s===i||r<n)return s;a=s+1}else if(l>r)o=s-1;else throw new Xs("Input is not a number.",t);return 0}function TJ(e,r,t,i){let a=3*e,o=3*(t-e)-a,s=1-a-o,l=3*r,n=3*(i-r)-l,u=1-l-n;return function(c,f=1e-6){if(c<=0)return 0;if(c>=1)return 1;let h=c;for(let g=0;g<8;g++){let m=((s*h+o)*h+a)*h-c;if(Math.abs(m)<f)return((u*h+n)*h+l)*h;let y=(3*s*h+2*o)*h+a;if(Math.abs(y)<1e-6)break;h-=m/y}let d=0,p=1;h=c;for(let g=0;g<20;g++){let m=((s*h+o)*h+a)*h;if(Math.abs(m-c)<f)break;c>m?d=h:p=h,h=(d+p)*.5}return((u*h+n)*h+l)*h}}function r6(e,r,t,i){let a=i-t,o=e-t;return a===0?0:r===1?o/a:(r**+o-1)/(r**+a-1)}function I9(e,r,t=0,i=e.length-1,a=AJ){for(;i>t;){if(i-t>600){let n=i-t+1,u=r-t+1,c=Math.log(n),f=.5*Math.exp(2*c/3),h=.5*Math.sqrt(c*f*(n-f)/n)*(u-n/2<0?-1:1);I9(e,r,Math.max(t,Math.floor(r-u*f/n+h)),Math.min(i,Math.floor(r+(n-u)*f/n+h)),a)}let o=e[r],s=t,l=i;for(V1(e,t,r),a(e[i],o)>0&&V1(e,t,i);s<l;){for(V1(e,s,l),s++,l--;a(e[s],o)<0;)s++;for(;a(e[l],o)>0;)l--}a(e[t],o)===0?V1(e,t,l):(l++,V1(e,l,i)),l<=r&&(t=l+1),r<=l&&(i=l-1)}}function V1(e,r,t){let i=e[r];e[r]=e[t],e[t]=i}function AJ(e,r){return e<r?-1:+(e>r)}function z_(e,r){if(e.length<=1)return[e];let t=[],i,a;for(let o of e){let s=SJ(o);s!==0&&(o.area=Math.abs(s),a===void 0&&(a=s<0),a===s<0?(i&&t.push(i),i=[o]):i.push(o))}if(i&&t.push(i),r>1)for(let o=0;o<t.length;o++)t[o].length<=r||(I9(t[o],r,1,t[o].length-1,MJ),t[o]=t[o].slice(0,r));return t}function MJ(e,r){return r.area-e.area}function SJ(e){let r=0;for(let t=0,i=e.length,a=i-1,o,s;t<i;a=t++)o=e[t],s=e[a],r+=(s.x-o.x)*(o.y+s.y);return r}function R9(e,r){return e==="=="||e==="!="?r.kind==="boolean"||r.kind==="string"||r.kind==="number"||r.kind==="null"||r.kind==="value":r.kind==="string"||r.kind==="number"||r.kind==="value"}function EJ(e,r,t){return r===t}function kJ(e,r,t){return r!==t}function CJ(e,r,t){return r<t}function DJ(e,r,t){return r>t}function LJ(e,r,t){return r<=t}function FJ(e,r,t){return r>=t}function z9(e,r,t,i){return i.compare(r,t)===0}function PJ(e,r,t,i){return!z9(e,r,t,i)}function IJ(e,r,t,i){return i.compare(r,t)<0}function RJ(e,r,t,i){return i.compare(r,t)>0}function zJ(e,r,t,i){return i.compare(r,t)<=0}function BJ(e,r,t,i){return i.compare(r,t)>=0}function em(e,r,t){let i=e!=="=="&&e!=="!=";return class Cj{constructor(o,s,l,n){this.lhs=o,this.rhs=s,this.key=l,this.collator=n,this.type=Ao,this.hasUntypedArgument=o.type.kind==="value"||s.type.kind==="value"}static parse(o,s){if(o.length!==3&&o.length!==4)return s.error("Expected two or three arguments.");let l=o[0],n=s.parse(o[1],1,co);if(!n)return null;if(!R9(l,n.type))return s.concat(1).error(`"${l}" comparisons are not supported for type '${ll(n.type)}'.`);let u=s.parse(o[2],2,co);if(!u)return null;if(!R9(l,u.type))return s.concat(2).error(`"${l}" comparisons are not supported for type '${ll(u.type)}'.`);if(n.type.kind!==u.type.kind&&n.type.kind!=="value"&&u.type.kind!=="value")return s.error(`Cannot compare types '${ll(n.type)}' and '${ll(u.type)}'.`);i&&(n.type.kind==="value"&&u.type.kind!=="value"?n=new kd(u.type,[n],s.key):n.type.kind!=="value"&&u.type.kind==="value"&&(u=new kd(n.type,[u],s.key)));let c=null;if(o.length===4){if(n.type.kind!=="string"&&u.type.kind!=="string"&&n.type.kind!=="value"&&u.type.kind!=="value")return s.error("Cannot use collator to compare non-string types.");if(c=s.parse(o[3],3,gg),!c)return null}return new Cj(n,u,s.key,c)}evaluate(o){let s=this.lhs.evaluate(o),l=this.rhs.evaluate(o);if(i&&this.hasUntypedArgument){let n=Ml(s),u=Ml(l);if(n.kind!==u.kind||n.kind!=="string"&&n.kind!=="number")throw new Xs(`Expected arguments for "${e}" to be (string, string) or (number, number), but found (${n.kind}, ${u.kind}) instead.`,this.key)}if(this.collator&&!i&&this.hasUntypedArgument){let n=Ml(s),u=Ml(l);if(n.kind!=="string"||u.kind!=="string")return r(o,s,l)}return this.collator?t(o,s,l,this.collator.evaluate(o)):r(o,s,l)}eachChild(o){o(this.lhs),o(this.rhs),this.collator&&o(this.collator)}outputDefined(){return!0}}}function OJ(e,r){let t=NJ(e[0]),i=UJ(e[1]),a=2**r.z;return[Math.round(t*a*Jh),Math.round(i*a*Jh)]}function i6(e,r){let t=2**r.z,i=(e[0]/Jh+r.x)/t,a=(e[1]/Jh+r.y)/t;return[jJ(i),qJ(a)]}function NJ(e){return(180+e)/360}function jJ(e){return e*360-180}function UJ(e){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+e*Math.PI/360)))/360}function qJ(e){return 360/Math.PI*Math.atan(Math.exp((180-e*360)*Math.PI/180))-90}function G1(e,r){e[0]=Math.min(e[0],r[0]),e[1]=Math.min(e[1],r[1]),e[2]=Math.max(e[2],r[0]),e[3]=Math.max(e[3],r[1])}function H1(e,r){return!(e[0]<=r[0]||e[2]>=r[2]||e[1]<=r[1]||e[3]>=r[3])}function VJ(e,r,t){return r[1]>e[1]!=t[1]>e[1]&&e[0]<(t[0]-r[0])*(e[1]-r[1])/(t[1]-r[1])+r[0]}function GJ(e,r,t){let i=e[0]-r[0],a=e[1]-r[1],o=e[0]-t[0],s=e[1]-t[1];return i*s-o*a===0&&i*o<=0&&a*s<=0}function B_(e,r,t,i){let a=[r[0]-e[0],r[1]-e[1]];return YJ([i[0]-t[0],i[1]-t[1]],a)!==0&&!!(O9(e,r,t,i)&&O9(t,i,e,r))}function HJ(e,r,t){for(let i of t)for(let a=0;a<i.length-1;++a)if(B_(e,r,i[a],i[a+1]))return!0;return!1}function tm(e,r,t=!1){let i=!1;for(let a of r)for(let o=0;o<a.length-1;o++){if(GJ(e,a[o],a[o+1]))return t;VJ(e,a[o],a[o+1])&&(i=!i)}return i}function $J(e,r){for(let t of r)if(tm(e,t))return!0;return!1}function B9(e,r){for(let t of e)if(!tm(t,r))return!1;for(let t=0;t<e.length-1;++t)if(HJ(e[t],e[t+1],r))return!1;return!0}function WJ(e,r){for(let t of r)if(B9(e,t))return!0;return!1}function YJ(e,r){return e[0]*r[1]-e[1]*r[0]}function O9(e,r,t,i){let a=e[0]-t[0],o=e[1]-t[1],s=r[0]-t[0],l=r[1]-t[1],n=i[0]-t[0],u=i[1]-t[1],c=a*u-n*o,f=s*u-n*l;return c>0&&f<0||c<0&&f>0}function a6(e,r,t){let i=[];for(let a=0;a<e.length;a++){let o=[];for(let s=0;s<e[a].length;s++){let l=OJ(e[a][s],t);G1(r,l),o.push(l)}i.push(o)}return i}function N9(e,r,t){let i=[];for(let a=0;a<e.length;a++){let o=a6(e[a],r,t);i.push(o)}return i}function j9(e,r,t,i){if(e[0]<t[0]||e[0]>t[2]){let a=i*.5,o=e[0]-t[0]>a?-i:t[0]-e[0]>a?i:0;o===0&&(o=e[0]-t[2]>a?-i:t[2]-e[0]>a?i:0),e[0]+=o}G1(r,e)}function XJ(e){e[0]=e[1]=1/0,e[2]=e[3]=-1/0}function U9(e,r,t,i){let a=2**i.z*Jh,o=[i.x*Jh,i.y*Jh],s=[];for(let l of e)for(let n of l){let u=[n.x+o[0],n.y+o[1]];j9(u,r,t,a),s.push(u)}return s}function q9(e,r,t,i){let a=2**i.z*Jh,o=[i.x*Jh,i.y*Jh],s=[];for(let l of e){let n=[];for(let u of l){let c=[u.x+o[0],u.y+o[1]];G1(r,c),n.push(c)}s.push(n)}if(r[2]-r[0]<=a/2){XJ(r);for(let l of s)for(let n of l)j9(n,r,t,a)}return s}function ZJ(e,r){let t=[1/0,1/0,-1/0,-1/0],i=[1/0,1/0,-1/0,-1/0],a=e.canonicalID();if(r.type==="Polygon"){let o=a6(r.coordinates,i,a),s=U9(e.geometry(),t,i,a);if(!H1(t,i))return!1;for(let l of s)if(!tm(l,o))return!1}if(r.type==="MultiPolygon"){let o=N9(r.coordinates,i,a),s=U9(e.geometry(),t,i,a);if(!H1(t,i))return!1;for(let l of s)if(!$J(l,o))return!1}return!0}function KJ(e,r){let t=[1/0,1/0,-1/0,-1/0],i=[1/0,1/0,-1/0,-1/0],a=e.canonicalID();if(r.type==="Polygon"){let o=a6(r.coordinates,i,a),s=q9(e.geometry(),t,i,a);if(!H1(t,i))return!1;for(let l of s)if(!B9(l,o))return!1}if(r.type==="MultiPolygon"){let o=N9(r.coordinates,i,a),s=q9(e.geometry(),t,i,a);if(!H1(t,i))return!1;for(let l of s)if(!WJ(l,o))return!1}return!0}function V9(e,r){return r[0]-e[0]}function O_(e){return e[1]-e[0]+1}function np(e,r){return e[1]>=e[0]&&e[1]<r}function n6(e,r){if(e[0]>e[1])return[null,null];let t=O_(e);if(r){if(t===2)return[e,null];let a=Math.floor(t/2);return[[e[0],e[0]+a],[e[0]+a,e[1]]]}if(t===1)return[e,null];let i=Math.floor(t/2)-1;return[[e[0],e[0]+i],[e[0]+i+1,e[1]]]}function o6(e,r){if(!np(r,e.length))return[1/0,1/0,-1/0,-1/0];let t=[1/0,1/0,-1/0,-1/0];for(let i=r[0];i<=r[1];++i)G1(t,e[i]);return t}function s6(e){let r=[1/0,1/0,-1/0,-1/0];for(let t of e)for(let i of t)G1(r,i);return r}function G9(e){return e[0]!==-1/0&&e[1]!==-1/0&&e[2]!==1/0&&e[3]!==1/0}function l6(e,r,t){if(!G9(e)||!G9(r))return NaN;let i=0,a=0;return e[2]<r[0]&&(i=r[0]-e[2]),e[0]>r[2]&&(i=e[0]-r[2]),e[1]>r[3]&&(a=e[1]-r[3]),e[3]<r[1]&&(a=r[1]-e[3]),t.distance([0,0],[i,a])}function R0(e,r,t){let i=t.pointOnLine(r,e);return t.distance(e,i.point)}function u6(e,r,t,i,a){let o=Math.min(R0(e,[t,i],a),R0(r,[t,i],a)),s=Math.min(R0(t,[e,r],a),R0(i,[e,r],a));return Math.min(o,s)}function JJ(e,r,t,i,a){if(!(np(r,e.length)&&np(i,t.length)))return 1/0;let o=1/0;for(let s=r[0];s<r[1];++s){let l=e[s],n=e[s+1];for(let u=i[0];u<i[1];++u){let c=t[u],f=t[u+1];if(B_(l,n,c,f))return 0;o=Math.min(o,u6(l,n,c,f,a))}}return o}function QJ(e,r,t,i,a){if(!(np(r,e.length)&&np(i,t.length)))return NaN;let o=1/0;for(let s=r[0];s<=r[1];++s)for(let l=i[0];l<=i[1];++l)if(o=Math.min(o,a.distance(e[s],t[l])),o===0)return o;return o}function eQ(e,r,t){if(tm(e,r,!0))return 0;let i=1/0;for(let a of r){let o=a[0],s=a[a.length-1];if(o!==s&&(i=Math.min(i,R0(e,[s,o],t)),i===0))return i;let l=t.pointOnLine(a,e);if(i=Math.min(i,t.distance(e,l.point)),i===0)return i}return i}function tQ(e,r,t,i){if(!np(r,e.length))return NaN;for(let o=r[0];o<=r[1];++o)if(tm(e[o],t,!0))return 0;let a=1/0;for(let o=r[0];o<r[1];++o){let s=e[o],l=e[o+1];for(let n of t)for(let u=0,c=n.length,f=c-1;u<c;f=u++){let h=n[f],d=n[u];if(B_(s,l,h,d))return 0;a=Math.min(a,u6(s,l,h,d,i))}}return a}function H9(e,r){for(let t of e)for(let i of t)if(tm(i,r,!0))return!0;return!1}function rQ(e,r,t,i=1/0){let a=s6(e),o=s6(r);if(i!==1/0&&l6(a,o,t)>=i)return i;if(H1(a,o)){if(H9(e,r))return 0}else if(H9(r,e))return 0;let s=1/0;for(let l of e)for(let n=0,u=l.length,c=u-1;n<u;c=n++){let f=l[c],h=l[n];for(let d of r)for(let p=0,g=d.length,m=g-1;p<g;m=p++){let y=d[m],_=d[p];if(B_(f,h,y,_))return 0;s=Math.min(s,u6(f,h,y,_,t))}}return s}function $9(e,r,t,i,a,o){if(!o)return;let s=l6(o6(i,o),a,t);s<r&&e.push([s,o,[0,0]])}function N_(e,r,t,i,a,o,s){if(!o||!s)return;let l=l6(o6(i,o),o6(a,s),t);l<r&&e.push([l,o,s])}function j_(e,r,t,i,a=1/0){let o=Math.min(i.distance(e[0],t[0][0]),a);if(o===0)return o;let s=new ST([[0,[0,e.length-1],[0,0]]],V9),l=s6(t);for(;s.length>0;){let n=s.pop();if(n[0]>=o)continue;let u=n[1],c=r?50:100;if(O_(u)<=c){if(!np(u,e.length))return NaN;if(r){let f=tQ(e,u,t,i);if(isNaN(f)||f===0)return f;o=Math.min(o,f)}else for(let f=u[0];f<=u[1];++f){let h=eQ(e[f],t,i);if(o=Math.min(o,h),o===0)return 0}}else{let f=n6(u,r);$9(s,o,i,e,l,f[0]),$9(s,o,i,e,l,f[1])}}return o}function U_(e,r,t,i,a,o=1/0){let s=Math.min(o,a.distance(e[0],t[0]));if(s===0)return s;let l=new ST([[0,[0,e.length-1],[0,t.length-1]]],V9);for(;l.length>0;){let n=l.pop();if(n[0]>=s)continue;let u=n[1],c=n[2],f=r?50:100,h=i?50:100;if(O_(u)<=f&&O_(c)<=h){if(!np(u,e.length)&&np(c,t.length))return NaN;let d;if(r&&i)d=JJ(e,u,t,c,a),s=Math.min(s,d);else if(r&&!i){let p=e.slice(u[0],u[1]+1);for(let g=c[0];g<=c[1];++g)if(d=R0(t[g],p,a),s=Math.min(s,d),s===0)return s}else if(!r&&i){let p=t.slice(c[0],c[1]+1);for(let g=u[0];g<=u[1];++g)if(d=R0(e[g],p,a),s=Math.min(s,d),s===0)return s}else d=QJ(e,u,t,c,a),s=Math.min(s,d)}else{let d=n6(u,r),p=n6(c,i);N_(l,s,a,e,t,d[0],p[0]),N_(l,s,a,e,t,d[0],p[1]),N_(l,s,a,e,t,d[1],p[0]),N_(l,s,a,e,t,d[1],p[1])}}return s}function iQ(e,r){let t=e.geometry(),i=t.flat().map(s=>i6([s.x,s.y],e.canonical));if(t.length===0)return NaN;let a=new Ix(i[0][1]),o=1/0;for(let s of r){switch(s.type){case"Point":o=Math.min(o,U_(i,!1,[s.coordinates],!1,a,o));break;case"LineString":o=Math.min(o,U_(i,!1,s.coordinates,!0,a,o));break;case"Polygon":o=Math.min(o,j_(i,!1,s.coordinates,a,o))}if(o===0)return o}return o}function aQ(e,r){let t=e.geometry(),i=t.flat().map(s=>i6([s.x,s.y],e.canonical));if(t.length===0)return NaN;let a=new Ix(i[0][1]),o=1/0;for(let s of r){switch(s.type){case"Point":o=Math.min(o,U_(i,!0,[s.coordinates],!1,a,o));break;case"LineString":o=Math.min(o,U_(i,!0,s.coordinates,!0,a,o));break;case"Polygon":o=Math.min(o,j_(i,!0,s.coordinates,a,o))}if(o===0)return o}return o}function nQ(e,r){let t=e.geometry();if(t.length===0||t[0].length===0)return NaN;let i=z_(t,0).map(s=>s.map(l=>l.map(n=>i6([n.x,n.y],e.canonical)))),a=new Ix(i[0][0][0][1]),o=1/0;for(let s of r)for(let l of i){switch(s.type){case"Point":o=Math.min(o,j_([s.coordinates],!1,l,a,o));break;case"LineString":o=Math.min(o,j_(s.coordinates,!0,l,a,o));break;case"Polygon":o=Math.min(o,rQ(l,s.coordinates,a,o))}if(o===0)return o}return o}function c6(e){return e.type==="MultiPolygon"?e.coordinates.map(r=>({type:"Polygon",coordinates:r})):e.type==="MultiLineString"?e.coordinates.map(r=>({type:"LineString",coordinates:r})):e.type==="MultiPoint"?e.coordinates.map(r=>({type:"Point",coordinates:r})):[e]}function W9(e,[r,t,i,a],o){r=r.evaluate(e),t=t.evaluate(e),i=i.evaluate(e);let s=a?a.evaluate(e):1,l=P9(r,t,i,s);if(l)throw new Xs(l,o);return new ro(r/255,t/255,i/255,s,!1)}function Y9(e,r){return e in r&&r[e]!==void 0}function f6(e,r){let t=r[e];return t===void 0?null:t}function oQ(e,r,t,i){for(;t<=i;){let a=t+i>>1;if(r[a]===e)return!0;r[a]>e?i=a-1:t=a+1}return!1}function z0(e){return{type:e}}function sQ(e){return Array.isArray(e)?`(${e.map(ll).join(", ")})`:`(${ll(e.type)}...)`}function q_(e){if(e instanceof TT)return q_(e.boundExpression);if(e instanceof Yp&&e.name==="error"||e instanceof MT||e instanceof Px||e instanceof Rx||e instanceof zx)return!1;let r=e instanceof $0||e instanceof kd,t=!0;return e.eachChild(i=>{t&&(t=r?q_(i):i instanceof H0)}),t?V_(e)&&G_(e,["zoom","heatmap-density","elevation","line-progress","accumulated","is-supported-script"]):!1}function V_(e){if(e instanceof Yp&&(e.name==="get"&&e.args.length===1||e.name==="feature-state"||e.name==="has"&&e.args.length===1||e.name==="properties"||e.name==="geometry-type"||e.name==="id"||/^filter-/.test(e.name))||e instanceof Px||e instanceof Rx)return!1;let r=!0;return e.eachChild(t=>{r&&!V_(t)&&(r=!1)}),r}function $1(e){if(e instanceof Yp&&e.name==="feature-state")return!1;let r=!0;return e.eachChild(t=>{r&&!$1(t)&&(r=!1)}),r}function G_(e,r){if(e instanceof Yp&&r.indexOf(e.name)>=0)return!1;let t=!0;return e.eachChild(i=>{t&&!G_(i,r)&&(t=!1)}),t}function rm(e){return e["property-type"]==="data-driven"||e["property-type"]==="cross-faded-data-driven"}function X9(e){return!!e.expression&&e.expression.parameters.indexOf("zoom")>-1}function h6(e){return!!e.expression&&e.expression.interpolated}function W1(e,...r){for(let t of r)for(let i in t)e[i]=t[i];return e}function bo(e){return e instanceof Number?"number":e instanceof String?"string":e instanceof Boolean?"boolean":Array.isArray(e)?"array":e===null?"null":typeof e}function H_(e){return typeof e=="object"&&!!e&&!Array.isArray(e)&&Ml(e)===Wp}function lQ(e){return e}function uQ(e){switch(e.type){case"color":return ro.parse;case"padding":return Yh.parse;case"numberArray":return Xh.parse;case"colorArray":return If.parse;default:return null}}function cQ(e){switch(e){case"exponential":return K9;case"interval":return hQ;case"categorical":return fQ;case"identity":return dQ;default:throw Error(`Unknown function type "${e}"`)}}function Z9(e,r){let t=e.stops&&typeof e.stops[0][0]=="object",i=t||e.property!==void 0,a=t||!i,o=e.type||(h6(r)?"exponential":"interval"),s=uQ(r);if(s&&(e=W1({},e),e.stops&&(e.stops=e.stops.map(c=>[c[0],s(c[1])])),e.default?e.default=s(e.default):e.default=s(r.default)),e.colorSpace&&!wJ(e.colorSpace))throw Error(`Unknown color space: "${e.colorSpace}"`);let l=cQ(o),n,u;if(o==="categorical"){n=Object.create(null);for(let c of e.stops)n[c[0]]=c[1];u=typeof e.stops[0][0]}if(t){let c={},f=[];for(let p=0;p<e.stops.length;p++){let g=e.stops[p],m=g[0].zoom;c[m]===void 0&&(c[m]={zoom:m,type:e.type,property:e.property,default:e.default,stops:[]},f.push(m)),c[m].stops.push([g[0].value,g[1]])}let h=[];for(let p of f)h.push([c[p].zoom,Z9(c[p],r)]);let d={name:"linear"};return{kind:"composite",interpolationType:d,interpolationFactor:Rf.interpolationFactor.bind(void 0,d),zoomStops:h.map(p=>p[0]),evaluate({zoom:p},g){return K9({stops:h,base:e.base},r,p).evaluate(p,g)}}}if(a){let c=o==="exponential"?{name:"exponential",base:e.base===void 0?1:e.base}:null;return{kind:"camera",interpolationType:c,interpolationFactor:Rf.interpolationFactor.bind(void 0,c),zoomStops:e.stops.map(f=>f[0]),evaluate:({zoom:f})=>l(e,r,f,n,u)}}return{kind:"source",evaluate(c,f){let h=f&&f.properties?f.properties[e.property]:void 0;return h===void 0?Y1(e.default,r.default):l(e,r,h,n,u)}}}function Y1(e,r,t){if(e!==void 0)return e;if(r!==void 0)return r;if(t!==void 0)return t}function fQ(e,r,t,i,a){return Y1(typeof t===a?i[t]:void 0,e.default,r.default)}function hQ(e,r,t){if(bo(t)!=="number")return Y1(e.default,r.default);let i=e.stops.length;if(i===1||t<=e.stops[0][0])return e.stops[0][1];if(t>=e.stops[i-1][0])return e.stops[i-1][1];let a=R_(e.stops.map(o=>o[0]),t,"");return e.stops[a][1]}function K9(e,r,t){let i=e.base===void 0?1:e.base;if(bo(t)!=="number")return Y1(e.default,r.default);let a=e.stops.length;if(a===1||t<=e.stops[0][0])return e.stops[0][1];if(t>=e.stops[a-1][0])return e.stops[a-1][1];let o=R_(e.stops.map(c=>c[0]),t,""),s=pQ(t,i,e.stops[o][0],e.stops[o+1][0]),l=e.stops[o][1],n=e.stops[o+1][1],u=Zs[r.type]||lQ;return typeof l.evaluate=="function"?{evaluate(...c){let f=l.evaluate.apply(void 0,c),h=n.evaluate.apply(void 0,c);if(f!==void 0&&h!==void 0)return u(f,h,s,e.colorSpace)}}:u(l,n,s,e.colorSpace)}function dQ(e,r,t){switch(r.type){case"color":t=ro.parse(t);break;case"formatted":t=Ed.fromString(t.toString());break;case"resolvedImage":t=Kh.fromString(t.toString());break;case"padding":t=Yh.parse(t);break;case"colorArray":t=If.parse(t);break;case"numberArray":t=Xh.parse(t);break;default:bo(t)!==r.type&&(r.type!=="enum"||!r.values[t])&&(t=void 0)}return Y1(t,e.default,r.default)}function pQ(e,r,t,i){let a=i-t,o=e-t;return a===0?0:r===1?o/a:(r**+o-1)/(r**+a-1)}function d6(e){return{result:"success",value:e}}function im(e){return{result:"error",value:e}}function J9(e,r,t,i){return`${e}${r}: ${t}${i==null?"":` Falling back to ${String(i)}.`}`}function Q9(e){if(!e)throw Error('rootKey must identify the location of the expression in the style JSON, e.g. "layers[3].paint.line-width".')}function $_(e){return Array.isArray(e)&&e.length>0&&typeof e[0]=="string"&&e[0]in W0}function W_(e,r,t,i){Q9(r);let a=new kT(W0,q_,[],t?gQ(t):void 0),o=a.parse(e,void 0,void 0,void 0,t&&t.type==="string"?{typeAnnotation:"coerce"}:void 0);return o?d6(new Ox(o,r,t,i)):im(a.errors)}function vQ(e){return e._styleExpression!==void 0}function eL(e,r,t,i){let a=W_(e,r,t,i);if(a.result==="error")return a;let o=a.value.expression,s=V_(o);if(!s&&!rm(t))return im([new Qh("","data expressions not supported")]);let l=G_(o,["zoom"]);if(!l&&!X9(t))return im([new Qh("","zoom expressions not supported")]);let n=Y_(o);if(!n&&!l)return im([new Qh("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(n instanceof Qh)return im([n]);if(n instanceof Rf&&!h6(t))return im([new Qh("",'"interpolate" expressions cannot be used with this property')]);if(!n)return d6(s?new bm("constant",a.value,i):new bm("source",a.value,i));let u=n instanceof Rf?n.interpolation:void 0;return d6(s?new wg("camera",a.value,n.labels,u,i):new wg("composite",a.value,n.labels,u,i))}function mQ(e,r,t,i){if(H_(e))return new CT(e,r,t);if($_(e)){let a=eL(e,r,t,i);if(a.result==="error")throw Error(a.value.map(o=>`${o.key}: ${o.message}`).join(", "));return a.value}{let a=e;return t.type==="color"&&typeof e=="string"?a=ro.parse(e):t.type==="padding"&&(typeof e=="number"||Array.isArray(e))?a=Yh.parse(e):t.type==="numberArray"&&(typeof e=="number"||Array.isArray(e))?a=Xh.parse(e):t.type==="colorArray"&&(typeof e=="string"||Array.isArray(e))?a=If.parse(e):t.type==="variableAnchorOffsetCollection"&&Array.isArray(e)?a=Zh.parse(e):t.type==="projectionDefinition"&&typeof e=="string"&&(a=op.parse(e)),{globalStateRefs:new Set,_globalState:null,kind:"constant",evaluate:()=>a}}}function Y_(e){let r=null;if(e instanceof wT)r=Y_(e.result);else if(e instanceof AT){for(let t of e.args)if(r=Y_(t),r)break}else(e instanceof Fx||e instanceof Rf)&&e.input instanceof Yp&&e.input.name==="zoom"&&(r=e);return r instanceof Qh||e.eachChild(t=>{let i=Y_(t);i instanceof Qh?r=i:!r&&i?r=new Qh("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):r&&i&&r!==i&&(r=new Qh("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))}),r}function X1(e,r=new Set){return e instanceof zx&&r.add(e.key),e.eachChild(t=>{X1(t,r)}),r}function gQ(e){let r={color:dh,string:so,number:Ra,enum:so,boolean:Ao,formatted:ym,padding:yg,numberArray:_g,colorArray:_m,projectionDefinition:mg,resolvedImage:xm,variableAnchorOffsetCollection:xg};return e.type==="array"?pc(r[e.value]||co,e.length):r[e.type]}function tL(e){if(e.type==="color"&&H_(e.default))return new ro(0,0,0,0);switch(e.type){case"color":return ro.parse(e.default)||null;case"padding":return Yh.parse(e.default)||null;case"numberArray":return Xh.parse(e.default)||null;case"colorArray":return If.parse(e.default)||null;case"variableAnchorOffsetCollection":return Zh.parse(e.default)||null;case"projectionDefinition":return op.parse(e.default)||null;default:return e.default===void 0?null:e.default}}function am(e,r){let{zoom:t,heatmapDensity:i,elevation:a,lineProgress:o,isSupportedScript:s,accumulated:l}=e??{};return{zoom:t,heatmapDensity:i,elevation:a,lineProgress:o,isSupportedScript:s,accumulated:l,globalState:r}}function yQ(e){let r=!1;for(let t of e){let i=rL(t);if(i==="expression")return"expression";i==="legacy"&&(r=!0)}return r?"legacy":"neutral"}function rL(e){if(typeof e=="boolean")return"neutral";if(!Array.isArray(e)||e.length===0)return"legacy";switch(e[0]){case"has":return e.length<2||e[1]==="$id"||e[1]==="$type"?"legacy":e.length===2?"neutral":"expression";case"in":return e.length>=3&&(typeof e[1]!="string"||Array.isArray(e[2]))?"expression":"legacy";case"!in":case"!has":return"legacy";case"==":case"!=":case">":case">=":case"<":case"<=":return e.length!==3||Array.isArray(e[1])||Array.isArray(e[2])?"expression":"legacy";case"none":return"legacy";case"any":case"all":return yQ(e.slice(1));default:return"expression"}}function p6(e){return rL(e)!=="legacy"}function iL(e){return e==="$type"?["geometry-type"]:e==="$id"?["id"]:["get",e]}function _Q(e){switch(e[0]){case"==":case"!=":case"<":case"<=":case">":case">=":return e.length!==3||typeof e[1]!="string"?null:[e[0],iL(e[1]),e[2]];case"in":case"!in":{if(e.length<2||typeof e[1]!="string")return null;let r=["in",iL(e[1]),["literal",e.slice(2)]];return e[0]==="!in"?["!",r]:r}case"has":case"!has":{if(e.length!==2||typeof e[1]!="string"||e[1]==="$type"||e[1]==="$id")return null;let r=["has",e[1]];return e[0]==="!has"?["!",r]:r}default:return null}}function aL(e){if((e[0]==="<"||e[0]==="<="||e[0]===">"||e[0]===">=")&&e[1]==="$type")return`"$type" cannot be use with operator "${e[0]}"`;let r=_Q(e);return r?`Mixing deprecated filter syntax with expression syntax is not supported. Replace ${JSON.stringify(e)} with ${JSON.stringify(r)}.`:`Mixing deprecated filter syntax with expression syntax is not supported. Convert ${JSON.stringify(e)} to expression syntax.`}function v6(e,r,t){let i=t[e];return Array.isArray(i)?p6(i)?m6(i,r.concat(e)):{path:r.concat(e),legacyFilter:i}:null}function m6(e,r=[]){if(!Array.isArray(e)||e.length<1)return null;switch(e[0]){case"all":case"any":case"none":for(let t=1;t<e.length;t++){let i=v6(t,r,e);if(i)return i}break;case"!":{let t=v6(1,r,e);if(t)return t;break}case"case":for(let t=1;t<e.length-1;t+=2){let i=v6(t,r,e);if(i)return i}}return null}function xQ(e,r){let t=m6(e);if(!t||typeof console>"u")return;let i=t.path.map(a=>`[${a}]`).join("");console.warn(`${r}${i}: ${aL(t.legacyFilter)}`)}function Z1(e,r,t){if(e==null)return{filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set};p6(e)?xQ(e,r):e=X_(e);let i=W_(e,r,eI,t);if(i.result==="error")throw Error(i.value.map(a=>`${a.key}: ${a.message}`).join(", "));return{filter:(a,o,s)=>i.value.evaluate(a,o,{},s),needGeometry:nL(e),getGlobalStateRefs:()=>X1(i.value.expression)}}function bQ(e,r){return e<r?-1:+(e>r)}function nL(e){if(!Array.isArray(e))return!1;if(e[0]==="within"||e[0]==="distance")return!0;for(let r=1;r<e.length;r++)if(nL(e[r]))return!0;return!1}function X_(e){if(!e)return!0;let r=e[0];return e.length<=1?r!=="any":r==="=="?g6(e[1],e[2],"=="):r==="!="?Z_(g6(e[1],e[2],"==")):r==="<"||r===">"||r==="<="||r===">="?g6(e[1],e[2],r):r==="any"?wQ(e.slice(1)):r==="all"?["all"].concat(e.slice(1).map(X_)):r==="none"?["all"].concat(e.slice(1).map(X_).map(Z_)):r==="in"?oL(e[1],e.slice(2)):r==="!in"?Z_(oL(e[1],e.slice(2))):r==="has"?sL(e[1]):r!=="!has"||Z_(sL(e[1]))}function g6(e,r,t){switch(e){case"$type":return[`filter-type-${t}`,r];case"$id":return[`filter-id-${t}`,r];default:return[`filter-${t}`,e,r]}}function wQ(e){return["any"].concat(e.map(X_))}function oL(e,r){if(r.length===0)return!1;switch(e){case"$type":return["filter-type-in",["literal",r]];case"$id":return["filter-id-in",["literal",r]];default:return r.length>200&&!r.some(t=>typeof t!=typeof r[0])?["filter-in-large",e,["literal",r.sort(bQ)]]:["filter-in-small",e,["literal",r]]}}function sL(e){switch(e){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",e]}}function Z_(e){return["!",e]}function lL(e){let r=e.key,t=e.value;return t?[new na(r,t,"constants have been deprecated as of v8")]:[]}function Sl(e){return e instanceof Number||e instanceof String||e instanceof Boolean?e.valueOf():e}function B0(e){if(Array.isArray(e))return e.map(B0);if(e instanceof Object&&!(e instanceof Number||e instanceof String||e instanceof Boolean)){let r={};for(let t in e)r[t]=B0(e[t]);return r}return Sl(e)}function Ff(e){let r=e.key,t=e.value,i=e.valueSpec||{},a=e.objectElementValidators||{},o=e.style,s=e.styleSpec,l=e.validateSpec,n=[],u=bo(t);if(u!=="object")return[new na(r,t,`object expected, ${u} found`)];for(let c in t){let f=c.split(".")[0],h=U1(i,f)||i["*"],d;if(U1(a,f))d=a[f];else if(U1(i,f)){if(t[c]===void 0)continue;d=l}else if(a["*"])d=a["*"];else if(i["*"])d=l;else{n.push(new na(r,t[c],`unknown property "${c}"`));continue}n=n.concat(d({key:(r&&`${r}.`)+c,value:t[c],valueSpec:h,style:o,styleSpec:s,object:t,objectKey:c,validateSpec:l},t))}for(let c in i)a[c]||i[c].required&&i[c].default===void 0&&t[c]===void 0&&n.push(new na(r,t,`missing required property "${c}"`));return n}function y6(e){let r=e.value,t=e.valueSpec,i=e.validateSpec,a=e.style,o=e.styleSpec,s=e.key,l=e.arrayElementValidator||i;if(bo(r)!=="array")return[new na(s,r,`array expected, ${bo(r)} found`)];if(t.length&&r.length!==t.length)return[new na(s,r,`array length ${t.length} expected, length ${r.length} found`)];let n={type:t.value,values:t.values};o.$version<7&&(n.function=t.function),bo(t.value)==="object"&&(n=t.value);let u=[];for(let c=0;c<r.length;c++)u=u.concat(l({array:r,arrayIndex:c,value:r[c],valueSpec:n,validateSpec:e.validateSpec,style:a,styleSpec:o,key:`${s}[${c}]`}));return u}function K_(e){let r=e.key,t=e.value,i=e.valueSpec,a=bo(t);return a==="number"&&t!==t&&(a="NaN"),a==="number"?"minimum"in i&&t<i.minimum?[new na(r,t,`${t} is less than the minimum value ${i.minimum}`)]:"maximum"in i&&t>i.maximum?[new na(r,t,`${t} is greater than the maximum value ${i.maximum}`)]:[]:[new na(r,t,`number expected, ${a} found`)]}function uL(e){let r=e.valueSpec,t=Sl(e.value.type),i,a={},o,s,l=t!=="categorical"&&e.value.property===void 0,n=!l,u=bo(e.value.stops)==="array"&&bo(e.value.stops[0])==="array"&&bo(e.value.stops[0][0])==="object",c=Ff({key:e.key,value:e.value,valueSpec:e.styleSpec.function,validateSpec:e.validateSpec,style:e.style,styleSpec:e.styleSpec,objectElementValidators:{stops:f,default:p}});return t==="identity"&&l&&c.push(new na(e.key,e.value,'missing required property "property"')),t!=="identity"&&!e.value.stops&&c.push(new na(e.key,e.value,'missing required property "stops"')),t==="exponential"&&e.valueSpec.expression&&!h6(e.valueSpec)&&c.push(new na(e.key,e.value,"exponential functions not supported")),e.styleSpec.$version>=8&&(n&&!rm(e.valueSpec)?c.push(new na(e.key,e.value,"property functions not supported")):l&&!X9(e.valueSpec)&&c.push(new na(e.key,e.value,"zoom functions not supported"))),(t==="categorical"||u)&&e.value.property===void 0&&c.push(new na(e.key,e.value,'"property" property is required')),c;function f(g){if(t==="identity")return[new na(g.key,g.value,'identity function may not have a "stops" property')];let m=[],y=g.value;return m=m.concat(y6({key:g.key,value:y,valueSpec:g.valueSpec,validateSpec:g.validateSpec,style:g.style,styleSpec:g.styleSpec,arrayElementValidator:h})),bo(y)==="array"&&y.length===0&&m.push(new na(g.key,y,"array must have at least one stop")),m}function h(g){let m=[],y=g.value,_=g.key;if(bo(y)!=="array")return[new na(_,y,`array expected, ${bo(y)} found`)];if(y.length!==2)return[new na(_,y,`array length 2 expected, length ${y.length} found`)];if(u){if(bo(y[0])!=="object")return[new na(_,y,`object expected, ${bo(y[0])} found`)];if(y[0].zoom===void 0)return[new na(_,y,"object stop key must have zoom")];if(y[0].value===void 0)return[new na(_,y,"object stop key must have value")];if(s&&s>Sl(y[0].zoom))return[new na(_,y[0].zoom,"stop zoom values must appear in ascending order")];Sl(y[0].zoom)!==s&&(s=Sl(y[0].zoom),o=void 0,a={}),m=m.concat(Ff({key:`${_}[0]`,value:y[0],valueSpec:{zoom:{}},validateSpec:g.validateSpec,style:g.style,styleSpec:g.styleSpec,objectElementValidators:{zoom:K_,value:d}}))}else m=m.concat(d({key:`${_}[0]`,value:y[0],valueSpec:{},validateSpec:g.validateSpec,style:g.style,styleSpec:g.styleSpec},y));return $_(B0(y[1]))?m.concat([new na(`${_}[1]`,y[1],"expressions are not allowed in function stops.")]):m.concat(g.validateSpec({key:`${_}[1]`,value:y[1],valueSpec:r,validateSpec:g.validateSpec,style:g.style,styleSpec:g.styleSpec}))}function d(g,m){let y=bo(g.value),_=Sl(g.value),v=g.value===null?m:g.value;if(!i)i=y;else if(y!==i)return[new na(g.key,v,`${y} stop domain type must match previous stop domain type ${i}`)];if(y!=="number"&&y!=="string"&&y!=="boolean")return[new na(g.key,v,"stop domain value must be a number, string, or boolean")];if(y!=="number"&&t!=="categorical"){let x=`number expected, ${y} found`;return rm(r)&&t===void 0&&(x+='
If you intended to use a categorical function, specify `"type": "categorical"`.'),[new na(g.key,v,x)]}return t==="categorical"&&y==="number"&&(!isFinite(_)||Math.floor(_)!==_)?[new na(g.key,v,`integer expected, found ${_}`)]:t!=="categorical"&&y==="number"&&o!==void 0&&_<o?[new na(g.key,v,"stop domain values must appear in ascending order")]:(o=_,t==="categorical"&&_ in a?[new na(g.key,v,"stop domain values must be unique")]:(a[_]=!0,[]))}function p(g){return g.validateSpec({key:g.key,value:g.value,valueSpec:r,validateSpec:g.validateSpec,style:g.style,styleSpec:g.styleSpec})}}function nm(e){let r=(e.expressionContext==="property"?eL:W_)(B0(e.value),e.key,e.valueSpec);if(r.result==="error")return r.value.map(i=>new na(`${e.key}${i.key}`,e.value,i.message));let t=r.value.expression||r.value._styleExpression.expression;if(e.expressionContext==="property"&&e.propertyKey==="text-font"&&!t.outputDefined())return[new na(e.key,e.value,`Invalid data expression for "${e.propertyKey}". Output values must be contained as literals within the expression.`)];if(e.expressionContext==="property"&&e.propertyType==="layout"&&!$1(t))return[new na(e.key,e.value,'"feature-state" data expressions are not supported with layout properties.')];if(e.expressionContext==="filter"&&!$1(t))return[new na(e.key,e.value,'"feature-state" data expressions are not supported with filters.')];if(e.expressionContext&&e.expressionContext.indexOf("cluster")===0){if(!G_(t,["zoom","feature-state"]))return[new na(e.key,e.value,'"zoom" and "feature-state" expressions are not supported with cluster properties.')];if(e.expressionContext==="cluster-initial"&&!V_(t))return[new na(e.key,e.value,"Feature data expressions are not supported with initial expression part of cluster properties.")]}return[]}function TQ(e){let r=e.value,t=e.key,i=bo(r);return i==="boolean"?[]:[new na(t,r,`boolean expected, ${i} found`)]}function _6(e){let r=e.key,t=e.value,i=bo(t);return i==="string"?ro.parse(String(t))?[]:[new na(r,t,`color expected, "${t}" found`)]:[new na(r,t,`color expected, ${i} found`)]}function K1(e){let r=e.key,t=e.value,i=e.valueSpec,a=[];return Array.isArray(i.values)?i.values.indexOf(Sl(t))===-1&&a.push(new na(r,t,`expected one of [${i.values.join(", ")}], ${JSON.stringify(t)} found`)):Object.keys(i.values).indexOf(Sl(t))===-1&&a.push(new na(r,t,`expected one of [${Object.keys(i.values).join(", ")}], ${JSON.stringify(t)} found`)),a}function AQ(e,r){let t=e;for(let i of r)t=t[i];return t}function MQ(e,r){let t=m6(r);return t?[new na(`${e.key}${t.path.map(i=>`[${i}]`).join("")}`,AQ(e.value,t.path),aL(t.legacyFilter),null,"warning")]:[]}function x6(e){let r=B0(e.value);return p6(r)?[...MQ(e,r),...nm(W1({},e,{expressionContext:"filter",valueSpec:{value:"boolean"}}))]:cL(e)}function cL(e){let r=e.value,t=e.key;if(bo(r)!=="array")return[new na(t,r,`array expected, ${bo(r)} found`)];let i=e.styleSpec,a,o=[];if(r.length<1)return[new na(t,r,"filter array must have at least 1 element")];switch(o=o.concat(K1({key:`${t}[0]`,value:r[0],valueSpec:i.filter_operator,style:e.style,styleSpec:e.styleSpec})),Sl(r[0])){case"<":case"<=":case">":case">=":r.length>=2&&Sl(r[1])==="$type"&&o.push(new na(t,r,`"$type" cannot be use with operator "${r[0]}"`));case"==":case"!=":r.length!==3&&o.push(new na(t,r,`filter array for operator "${r[0]}" must have 3 elements`));case"in":case"!in":r.length>=2&&(a=bo(r[1]),a!=="string"&&o.push(new na(`${t}[1]`,r[1],`string expected, ${a} found`)));for(let s=2;s<r.length;s++)a=bo(r[s]),Sl(r[1])==="$type"?o=o.concat(K1({key:`${t}[${s}]`,value:r[s],valueSpec:i.geometry_type,style:e.style,styleSpec:e.styleSpec})):a!=="string"&&a!=="number"&&a!=="boolean"&&o.push(new na(`${t}[${s}]`,r[s],`string, number, or boolean expected, ${a} found`));break;case"any":case"all":case"none":for(let s=1;s<r.length;s++)o=o.concat(cL({key:`${t}[${s}]`,value:r[s],style:e.style,styleSpec:e.styleSpec}));break;case"has":case"!has":a=bo(r[1]),r.length===2?a!=="string"&&o.push(new na(`${t}[1]`,r[1],`string expected, ${a} found`)):o.push(new na(t,r,`filter array for "${r[0]}" operator must have 2 elements`))}return o}function fL(e,r){let t=e.key,i=e.validateSpec,a=e.style,o=e.styleSpec,s=e.value,l=e.objectKey,n=o[`${r}_${e.layerType}`];if(!n)return[];let u=l.match(Bx);if(r==="paint"&&u&&n[u[1]]&&n[u[1]].transition)return i({key:t,value:s,valueSpec:o.transition,style:a,styleSpec:o});let c=e.valueSpec||n[l];if(!c)return[new na(t,s,`unknown property "${l}"`)];let f;if(bo(s)==="string"&&rm(c)&&!c.tokens&&(f=/^{([^}]+)}$/.exec(s)))return[new na(t,s,`"${l}" does not support interpolation syntax
+Use an identity property function instead: \`{ "type": "identity", "property": ${JSON.stringify(f[1])} }\`.`)];let h=[];return e.layerType==="symbol"&&l==="text-font"&&H_(B0(s))&&Sl(s.type)==="identity"&&h.push(new na(t,s,'"text-font" does not support identity functions')),h.concat(i({key:e.key,value:s,valueSpec:c,style:a,styleSpec:o,expressionContext:"property",propertyType:r,propertyKey:l}))}function hL(e){return fL(e,"paint")}function dL(e){return fL(e,"layout")}function pL(e){var r,t;let i=[],a=e.value,o=e.key,s=e.style,l=e.styleSpec;if(bo(a)!=="object")return[new na(o,a,`object expected, ${bo(a)} found`)];!a.type&&!a.ref&&i.push(new na(o,a,'either "type" or "ref" is required'));let n=Sl(a.type),u=Sl(a.ref);if(a.id){let c=Sl(a.id);for(let f=0;f<e.arrayIndex;f++){let h=s.layers[f];Sl(h.id)===c&&i.push(new na(o,a.id,`duplicate layer id "${a.id}", previously used at line ${h.id.__line__}`))}}if("ref"in a){["type","source","source-layer","filter","layout"].forEach(f=>{f in a&&i.push(new na(o,a[f],`"${f}" is prohibited for ref layers`))});let c;s.layers.forEach(f=>{Sl(f.id)===u&&(c=f)}),c?c.ref?i.push(new na(o,a.ref,"ref cannot reference another ref layer")):n=Sl(c.type):i.push(new na(o,a.ref,`ref layer "${u}" not found`))}else if(n!=="background")if(!a.source)i.push(new na(o,a,'missing required property "source"'));else{let c=s.sources&&s.sources[a.source],f=c&&Sl(c.type);c?f==="vector"&&n==="raster"?i.push(new na(o,a.source,`layer "${a.id}" requires a raster source`)):f!=="raster-dem"&&n==="hillshade"||f!=="raster-dem"&&n==="color-relief"?i.push(new na(o,a.source,`layer "${a.id}" requires a raster-dem source`)):f==="raster"&&n!=="raster"?i.push(new na(o,a.source,`layer "${a.id}" requires a vector source`)):f==="vector"&&!a["source-layer"]?i.push(new na(o,a,`layer "${a.id}" must specify a "source-layer"`)):f==="raster-dem"&&n!=="hillshade"&&n!=="color-relief"?i.push(new na(o,a.source,"raster-dem source can only be used with layer type 'hillshade' or 'color-relief'.")):n==="line"&&a.paint&&a.paint["line-gradient"]&&(f!=="geojson"||!c.lineMetrics)&&i.push(new na(o,a,`layer "${a.id}" specifies a line-gradient, which requires a GeoJSON source with \`lineMetrics\` enabled.`)):i.push(new na(o,a.source,`source "${a.source}" not found`))}return n==="raster"&&((r=a.paint)!=null&&r.resampling)&&((t=a.paint)!=null&&t["raster-resampling"])&&i.push(new na(o,a.paint,`layer "${a.id}" redundantly specifies "resampling" and "raster-resampling" paint properties, but only one is allowed. It is advised to use "resampling".`)),i=i.concat(Ff({key:o,value:a,valueSpec:l.layer,style:e.style,styleSpec:e.styleSpec,validateSpec:e.validateSpec,objectElementValidators:{"*"(){return[]},type(){return e.validateSpec({key:`${o}.type`,value:a.type,valueSpec:l.layer.type,style:e.style,styleSpec:e.styleSpec,validateSpec:e.validateSpec,object:a,objectKey:"type"})},filter:x6,layout(c){return Ff({layer:a,key:c.key,value:c.value,style:c.style,styleSpec:c.styleSpec,validateSpec:c.validateSpec,objectElementValidators:{"*"(f){return dL(W1({layerType:n},f))}}})},paint(c){return Ff({layer:a,key:c.key,value:c.value,style:c.style,styleSpec:c.styleSpec,validateSpec:c.validateSpec,objectElementValidators:{"*"(f){return hL(W1({layerType:n},f))}}})}}})),i}function Vp(e){let r=e.value,t=e.key,i=bo(r);return i==="string"?[]:[new na(t,r,`string expected, ${i} found`)]}function SQ(e){var r;let t=(r=e.sourceName)!=null?r:"",i=e.value,a=e.styleSpec,o=a.source_raster_dem,s=e.style,l=[],n=bo(i);if(i===void 0)return l;if(n!=="object")return l.push(new na("source_raster_dem",i,`object expected, ${n} found`)),l;let u=Sl(i.encoding)==="custom",c=["redFactor","greenFactor","blueFactor","baseShift"],f=e.value.encoding?`"${e.value.encoding}"`:"Default";for(let h in i)!u&&c.includes(h)?l.push(new na(h,i[h],`In "${t}": "${h}" is only valid when "encoding" is set to "custom". ${f} encoding found`)):o[h]?l=l.concat(e.validateSpec({key:h,value:i[h],valueSpec:o[h],validateSpec:e.validateSpec,style:s,styleSpec:a})):l.push(new na(h,i[h],`unknown property "${h}"`));return l}function vL(e){let r=e.value,t=e.key,i=e.styleSpec,a=e.style,o=e.validateSpec;if(!r.type)return[new na(t,r,'"type" is required')];let s=Sl(r.type),l;switch(s){case"vector":case"raster":return l=Ff({key:t,value:r,valueSpec:i[`source_${s.replace("-","_")}`],style:e.style,styleSpec:i,objectElementValidators:DT,validateSpec:o}),l;case"raster-dem":return l=SQ({sourceName:t,value:r,style:e.style,styleSpec:i,validateSpec:o}),l;case"geojson":if(l=Ff({key:t,value:r,valueSpec:i.source_geojson,style:a,styleSpec:i,validateSpec:o,objectElementValidators:DT}),r.cluster)for(let n in r.clusterProperties){let[u,c]=r.clusterProperties[n],f=typeof u=="string"?[u,["accumulated"],["get",n]]:u;l.push(...nm({key:`${t}.${n}.map`,value:c,validateSpec:o,expressionContext:"cluster-map"})),l.push(...nm({key:`${t}.${n}.reduce`,value:f,validateSpec:o,expressionContext:"cluster-reduce"}))}return l;case"video":return Ff({key:t,value:r,valueSpec:i.source_video,style:a,validateSpec:o,styleSpec:i});case"image":return Ff({key:t,value:r,valueSpec:i.source_image,style:a,validateSpec:o,styleSpec:i});case"canvas":return[new na(t,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")];default:return K1({key:`${t}.type`,value:r.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:a,validateSpec:o,styleSpec:i})}}function EQ({key:e,value:r}){if(bo(r)==="string")return Vp({key:e,value:r});{let t=[];for(let i in r)t.push(...Vp({key:`${e}.${i}`,value:r[i]}));return t}}function mL(e){let r=e.value,t=e.styleSpec,i=t.light,a=e.style,o=[],s=bo(r);if(r===void 0)return o;if(s!=="object")return o=o.concat([new na("light",r,`object expected, ${s} found`)]),o;for(let l in r){let n=l.match(Bx);o=n&&i[n[1]]&&i[n[1]].transition?o.concat(e.validateSpec({key:l,value:r[l],valueSpec:t.transition,validateSpec:e.validateSpec,style:a,styleSpec:t})):i[l]?o.concat(e.validateSpec({key:l,value:r[l],valueSpec:i[l],validateSpec:e.validateSpec,style:a,styleSpec:t})):o.concat([new na(l,r[l],`unknown property "${l}"`)])}return o}function gL(e){let r=e.value,t=e.styleSpec,i=t.sky,a=e.style,o=bo(r);if(r===void 0)return[];if(o!=="object")return[new na("sky",r,`object expected, ${o} found`)];let s=[];for(let l in r){let n=l.match(Bx);s=n&&i[n[1]]&&i[n[1]].transition?s.concat(e.validateSpec({key:l,value:r[l],valueSpec:t.transition,style:a,styleSpec:t})):i[l]?s.concat(e.validateSpec({key:l,value:r[l],valueSpec:i[l],style:a,styleSpec:t})):s.concat([new na(l,r[l],`unknown property "${l}"`)])}return s}function yL(e){let r=e.value,t=e.styleSpec,i=t.terrain,a=e.style,o=[],s=bo(r);if(r===void 0)return o;if(s!=="object")return o=o.concat([new na("terrain",r,`object expected, ${s} found`)]),o;for(let l in r)o=i[l]?o.concat(e.validateSpec({key:l,value:r[l],valueSpec:i[l],validateSpec:e.validateSpec,style:a,styleSpec:t})):o.concat([new na(l,r[l],`unknown property "${l}"`)]);return o}function kQ(e){return Vp(e).length===0?[]:nm(e)}function CQ(e){return Vp(e).length===0?[]:nm(e)}function DQ(e){let r=e.key,t=e.value;if(bo(t)==="array"){if(t.length<1||t.length>4)return[new na(r,t,`padding requires 1 to 4 values; ${t.length} values found`)];let i={type:"number"},a=[];for(let o=0;o<t.length;o++)a=a.concat(e.validateSpec({key:`${r}[${o}]`,value:t[o],validateSpec:e.validateSpec,valueSpec:i}));return a}return K_({key:r,value:t,valueSpec:{}})}function LQ(e){let r=e.key,t=e.value;if(bo(t)==="array"){let i={type:"number"};if(t.length<1)return[new na(r,t,"array length at least 1 expected, length 0 found")];let a=[];for(let o=0;o<t.length;o++)a=a.concat(e.validateSpec({key:`${r}[${o}]`,value:t[o],validateSpec:e.validateSpec,valueSpec:i}));return a}return K_({key:r,value:t,valueSpec:{}})}function FQ(e){let r=e.key,t=e.value;if(bo(t)==="array"){if(t.length<1)return[new na(r,t,"array length at least 1 expected, length 0 found")];let i=[];for(let a=0;a<t.length;a++)i=i.concat(_6({key:`${r}[${a}]`,value:t[a],valueSpec:{}}));return i}return _6({key:r,value:t,valueSpec:{}})}function PQ(e){let r=e.key,t=e.value,i=bo(t),a=e.styleSpec;if(i!=="array"||t.length<1||t.length%2!=0)return[new na(r,t,"variableAnchorOffsetCollection requires a non-empty array of even length")];let o=[];for(let s=0;s<t.length;s+=2)o=o.concat(K1({key:`${r}[${s}]`,value:t[s],valueSpec:a.layout_symbol["text-anchor"]})),o=o.concat(y6({key:`${r}[${s+1}]`,value:t[s+1],valueSpec:{length:2,value:"number"},validateSpec:e.validateSpec,style:e.style,styleSpec:a}));return o}function _L(e){let r=[],t=e.value,i=e.key;if(Array.isArray(t)){let a=[],o=[];for(let s in t)t[s].id&&a.includes(t[s].id)&&r.push(new na(i,t,`all the sprites' ids must be unique, but ${t[s].id} is duplicated`)),a.push(t[s].id),t[s].url&&o.includes(t[s].url)&&r.push(new na(i,t,`all the sprites' URLs must be unique, but ${t[s].url} is duplicated`)),o.push(t[s].url),r=r.concat(Ff({key:`${i}[${s}]`,value:t[s],valueSpec:{id:{type:"string",required:!0},url:{type:"string",required:!0}},validateSpec:e.validateSpec}));return r}return Vp({key:i,value:t})}function IQ(e){let r=e.value,t=e.styleSpec,i=t.projection,a=e.style,o=bo(r);if(r===void 0)return[];if(o!=="object")return[new na("projection",r,`object expected, ${o} found`)];let s=[];for(let l in r)s=i[l]?s.concat(e.validateSpec({key:l,value:r[l],valueSpec:i[l],style:a,styleSpec:t})):s.concat([new na(l,r[l],`unknown property "${l}"`)]);return s}function RQ(e){let r=e.key,t=e.value;t=t instanceof String?t.valueOf():t;let i=bo(t);return i==="array"&&!BQ(t)&&!zQ(t)?[new na(r,t,`projection expected, invalid array ${JSON.stringify(t)} found`)]:["array","string"].includes(i)?[]:[new na(r,t,`projection expected, invalid type "${i}" found`)]}function zQ(e){return!!["interpolate","step","literal"].includes(e[0])}function BQ(e){return Array.isArray(e)&&e.length===3&&typeof e[0]=="string"&&typeof e[1]=="string"&&typeof e[2]=="number"}function b6(e){return!!e&&e.constructor===Object}function xL(e){return b6(e.value)?[]:[new na(e.key,e.value,`object expected, ${bo(e.value)} found`)]}function OQ(e,r){if(bo(r)!=="string")return[];let t=`${r}`,i=()=>[new na(e,r,'invalid unicode range, expected a value such as "U+26", "U+0-10FFFF" or "U+4??"')],a=t.match(tI);if(!a)return i();let[,o,s,l]=a;if(l!==void 0)return l.length>6?i():[];let n=parseInt(o,16),u=s===void 0?n:parseInt(s,16);return n>LT||u>LT?[new na(e,r,"unicode range is out of bounds, the maximum code point is U+10FFFF")]:n>u?[new na(e,r,`unicode range start must not be greater than its end, but ${t} is`)]:[]}function bL(e){var r,t;let i=(r=e.key)!=null?r:"font-faces",a=e.value,o=e.validateSpec,s=(t=e.styleSpec)!=null?t:pT,l=e.style;if(!b6(a))return[new na(i,a,`object expected, ${bo(a)} found`)];let n=[];for(let u in a){let c=a[u],f=bo(c);if(f==="string")n.push(...Vp({key:`${i}.${u}`,value:c}));else if(f==="array"){let h={url:{type:"string",required:!0},"unicode-range":{type:"array",value:"string"}};for(let[d,p]of c.entries()){let g=`${i}.${u}[${d}]`;n.push(...Ff({key:g,value:p,valueSpec:h,styleSpec:s,style:l,validateSpec:o}));let m=b6(p)?p["unicode-range"]:void 0;if(bo(m)==="array")for(let[y,_]of m.entries())n.push(...OQ(`${g}.unicode-range[${y}]`,_))}}else n.push(new na(`${i}.${u}`,c,`string or array expected, ${f} found`))}return n}function J1(e){let r=e.value,t=e.valueSpec,i=e.styleSpec;return e.validateSpec=J1,t.expression&&H_(Sl(r))?uL(e):t.expression&&$_(B0(r))?nm(e):t.type&&FT[t.type]?FT[t.type](e):Ff(W1({},e,{valueSpec:t.type?i[t.type]:t}))}function wL(e){let r=e.value,t=e.key,i=Vp(e);return i.length||(r.indexOf("{fontstack}")===-1&&i.push(new na(t,r,'"glyphs" url must include a "{fontstack}" token')),r.indexOf("{range}")===-1&&i.push(new na(t,r,'"glyphs" url must include a "{range}" token'))),i}function Pf(e,r=mi){let t=[];return t=t.concat(J1({key:"",value:e,valueSpec:r.$root,styleSpec:r,style:e,validateSpec:J1,objectElementValidators:{glyphs:wL,"*"(){return[]}}})),e.constants&&(t=t.concat(lL({key:"constants",value:e.constants,style:e,styleSpec:r,validateSpec:J1}))),TL(t)}function fh(e){return function(r){return e(Object.assign({},r,{validateSpec:J1}))}}function TL(e){return[].concat(e).sort((r,t)=>r.line-t.line)}function hh(e){return function(...r){return TL(e.apply(this,r))}}function NQ(e,r,t){return new iI(e,r,t)}function jQ(e){var r;return Object.entries((r=e.sources)!=null?r:{}).filter(([,t])=>!PT.has(t.type)).map(([t])=>`sources.${t}`)}function AL(e,r){let t=jQ(r);return w6(e,Hc(r).filter(({message:i})=>!t.some(a=>i.startsWith(`${a}:`)||i.startsWith(`${a}.`))))}function w6(e,r){let t=!1;for(let i of r){if(i.severity==="warning"){To(i.message);continue}e.fire(new Ln(Error(i.message))),t=!0}return t}function Q1(e,r,t,i){return i?.validate!==!1&&w6(e,r(Ot({styleSpec:mi},t)))}function Qa(e,r,t={}){if(Cd[e])throw Error(`${e} is already registered.`);Object.defineProperty(r,"_classRegistryKey",{value:e,writeable:!1}),Cd[e]={klass:r,omit:t.omit||[],shallow:t.shallow||[]}}function ML(e){var r;return e&&typeof ArrayBuffer<"u"&&(e instanceof ArrayBuffer||((r=e.constructor)==null?void 0:r.name)==="ArrayBuffer")}function T6(e){let r=e.constructor;return e.$name||r._classRegistryKey}function UQ(e){if(typeof e!="object"||!e)return!1;let r=T6(e);return r&&r!=="Object"}function SL(e){return!UQ(e)&&(e==null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"||e instanceof Boolean||e instanceof Number||e instanceof String||e instanceof Date||e instanceof RegExp||e instanceof Blob||e instanceof Error||ML(e)||P0(e)||ArrayBuffer.isView(e)||e instanceof ImageData)}function eg(e,r){if(SL(e))return(ML(e)||P0(e))&&r&&r.push(e),ArrayBuffer.isView(e)&&r&&r.push(e.buffer),e instanceof ImageData&&r&&r.push(e.data.buffer),e;if(Array.isArray(e)){let o=[];for(let s of e)o.push(eg(s,r));return o}if(typeof e!="object")throw Error(`can't serialize object of type ${typeof e}`);let t=T6(e);if(!t)throw Error(`can't serialize object of unregistered class ${e.constructor.name}`);if(!Cd[t])throw Error(`${t} is not registered.`);let{klass:i}=Cd[t],a=i.serialize?i.serialize(e,r):{};if(i.serialize){if(a===r?.[r.length-1])throw Error("statically serialized object won't survive transfer of $name property")}else{for(let o in e){if(!e.hasOwnProperty(o)||Cd[t].omit.includes(o))continue;let s=e[o];s!==void 0&&(a[o]=Cd[t].shallow.includes(o)?s:eg(s,r))}e instanceof Error&&(a.message=e.message)}if(a.$name)throw Error("$name property is reserved for worker serialization logic.");return t!=="Object"&&(a.$name=t),a}function tg(e){if(SL(e))return e;if(Array.isArray(e))return e.map(tg);if(typeof e!="object")throw Error(`can't deserialize object of type ${typeof e}`);let r=T6(e)||"Object";if(!Cd[r])throw Error(`can't deserialize unregistered class ${r}`);let{klass:t}=Cd[r];if(!t)throw Error(`can't deserialize unregistered class ${r}`);if(t.deserialize)return t.deserialize(e);let i=Object.create(t.prototype);for(let a of Object.keys(e)){if(a==="$name")continue;let o=e[a];i[a]=Cd[r].shallow.includes(a)?o:tg(o)}return i}function EL(e){if(Array.isArray(e))return e.length;let r=e?.values;return Array.isArray(r)?r.length:void 0}function kL(e,r){let t=EL(e),i=EL(r);return t!==void 0&&i!==void 0&&t!==i}function ul(e,r=1){let t=0,i=0;return{members:e.map(a=>{let o=qQ(a.type),s=t=CL(t,Math.max(r,o)),l=a.components||1;return i=Math.max(i,o),t+=o*l,{name:a.name,type:a.type,components:l,offset:s}}),size:CL(t,Math.max(i,r)),alignment:r}}function qQ(e){return uI[e].BYTES_PER_ELEMENT}function CL(e,r){return Math.ceil(e/r)*r}function DL(e,r){return e=to(Math.floor(e),0,255),r=to(Math.floor(r),0,255),256*e+r}function LL(e){let r=+e;return!isNaN(r)&&r<=9007199254740991?r:(0,hb.default)(String(e))}function A6(e,r,t,i){for(;t<i;){let a=e[t+i>>1],o=t-1,s=i+1;for(;;){do o++;while(e[o]<a);do s--;while(e[s]>a);if(o>=s)break;J_(e,o,s),J_(r,3*o,3*s),J_(r,3*o+1,3*s+1),J_(r,3*o+2,3*s+2)}s-t<i-s?(A6(e,r,t,s),t=s+1):(A6(e,r,s+1,i),i=s)}}function J_(e,r,t){let i=e[r];e[r]=e[t],e[t]=i}function M6(e){return[DL(255*e.r,255*e.g),DL(255*e.b,255*e.a)]}function VQ(e,r){return{"text-opacity":["opacity"],"icon-opacity":["opacity"],"text-color":["fill_color"],"icon-color":["fill_color"],"text-halo-color":["halo_color"],"icon-halo-color":["halo_color"],"text-halo-blur":["halo_blur"],"icon-halo-blur":["halo_blur"],"text-halo-width":["halo_width"],"icon-halo-width":["halo_width"],"line-gap-width":["gapwidth"],"line-dasharray":["dasharray_to","dasharray_from"],"line-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"],"fill-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"],"fill-extrusion-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"]}[e]||[e.replace(`${r}-`,"").replace(/-/g,"_")]}function GQ(e){return{"line-pattern":{source:Y0,composite:Y0},"fill-pattern":{source:Y0,composite:Y0},"fill-extrusion-pattern":{source:Y0,composite:Y0},"line-dasharray":{source:ZT,composite:ZT}}[e]}function FL(e,r,t){var i;let a={color:{source:Mm,composite:ub},number:{source:Cg,composite:Mm}};return((i=GQ(e))==null?void 0:i[t])||a[r][t]}function O0(e){let r=Bi/e.extent,t=e.loadGeometry();for(let i of t)for(let a of i){let o=Math.round(a.x*r),s=Math.round(a.y*r);a.x=to(o,aA,db),a.y=to(s,aA,db),(o<a.x||o>a.x+1||s<a.y||s>a.y+1)&&To("Geometry exceeds allowed extent, reduce your vector tile buffer size")}return t}function N0(e,r){return{type:e.type,id:e.id,properties:e.properties,geometry:r?O0(e):[]}}function HQ(e,r,t,i,a){e.emplaceBack(nA+r*8+i,nA+t*8+a)}function PL(e,r){for(let t of e)if(om(r,t))return!0;for(let t of r)if(om(e,t))return!0;return S6(e,r)}function Q_(e,r,t){return om(e,r)?!0:E6(r,e,t)}function IL(e,r){if(e.length===1)return zL(r,e[0]);for(let t of r)for(let i of t)if(om(e,i))return!0;for(let t of e)if(zL(r,t))return!0;for(let t of r)if(S6(e,t))return!0;return!1}function $Q(e,r,t){for(let i of r){if(e.length>=3){for(let a of i)if(om(e,a))return!0}if(WQ(e,i,t))return!0}return!1}function WQ(e,r,t){if(e.length>1){if(S6(e,r))return!0;for(let i of r)if(E6(i,e,t))return!0}for(let i of e)if(E6(i,r,t))return!0;return!1}function S6(e,r){if(e.length===0||r.length===0)return!1;for(let t=0;t<e.length-1;t++){let i=e[t],a=e[t+1];for(let o=0;o<r.length-1;o++){let s=r[o],l=r[o+1];if(YQ(i,a,s,l))return!0}}return!1}function YQ(e,r,t,i){return Np(e,t,i)!==Np(r,t,i)&&Np(e,r,t)!==Np(e,r,i)}function E6(e,r,t){let i=t*t;if(r.length===1)return e.distSqr(r[0])<i;for(let a=1;a<r.length;a++){let o=r[a-1],s=r[a];if(RL(e,o,s)<i)return!0}return!1}function RL(e,r,t){let i=r.distSqr(t);if(i===0)return e.distSqr(r);let a=((e.x-r.x)*(t.x-r.x)+(e.y-r.y)*(t.y-r.y))/i;return a<0?e.distSqr(r):a>1?e.distSqr(t):e.distSqr(t.sub(r)._mult(a)._add(r))}function zL(e,r){let t=!1,i,a,o;for(let s of e){i=s;for(let l=0,n=i.length-1;l<i.length;n=l++)a=i[l],o=i[n],a.y>r.y!=o.y>r.y&&r.x<(o.x-a.x)*(r.y-a.y)/(o.y-a.y)+a.x&&(t=!t)}return t}function om(e,r){let t=!1;for(let i=0,a=e.length-1;i<e.length;a=i++){let o=e[i],s=e[a];o.y>r.y!=s.y>r.y&&r.x<(s.x-o.x)*(r.y-o.y)/(s.y-o.y)+o.x&&(t=!t)}return t}function XQ(e,r,t,i,a){for(let s of e)if(r<=s.x&&t<=s.y&&i>=s.x&&a>=s.y)return!0;let o=[new Wr(r,t),new Wr(r,a),new Wr(i,a),new Wr(i,t)];if(e.length>2){for(let s of o)if(om(e,s))return!0}for(let s=0;s<e.length-1;s++){let l=e[s],n=e[s+1];if(ZQ(l,n,o))return!0}return!1}function ZQ(e,r,t){let i=t[0],a=t[2];if(e.x<i.x&&r.x<i.x||e.x>a.x&&r.x>a.x||e.y<i.y&&r.y<i.y||e.y>a.y&&r.y>a.y)return!1;let o=Np(e,r,t[0]);return o!==Np(e,r,t[1])||o!==Np(e,r,t[2])||o!==Np(e,r,t[3])}function sm(e,r,t){let i=r.paint.get(e).value;return i.kind==="constant"?i.value:t.programConfigurations.get(r.id).getMaxValue(e)}function ex(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function tx(e,r,t,i,a){if(!r[0]&&!r[1])return e;let o=Wr.convert(r)._mult(a);t==="viewport"&&o._rotate(-i);let s=[];for(let l of e)s.push(l.sub(o));return s}function KQ(e){let r=[];for(let t=0;t<e.length;t++){let i=e[t],a=r.at(-1);(t===0||a&&!i.equals(a))&&r.push(i)}return r}function JQ(e,r){let t=[];for(let i of e){let a=KQ(i),o=[];for(let s=0;s<a.length;s++){let l=a[s],n=a[s-1],u=a[s+1],c=s===0?new Wr(0,0):l.sub(n)._unit()._perp(),f=s===a.length-1?new Wr(0,0):u.sub(l)._unit()._perp(),h=c._add(f)._unit(),d=h.x*f.x+h.y*f.y;d!==0&&h._mult(1/d),o.push(h._mult(r)._add(l))}t.push(o)}return t}function QQ({queryGeometry:e,size:r},t){return Q_(e,t,r)}function eee({queryGeometry:e,size:r,transform:t,unwrappedTileID:i,getElevation:a},o){return Q_(e,o,r*(t.projectTileCoordinates(o.x,o.y,i,a?.(o.x,o.y)).signedDistanceFromCamera/t.cameraToCenterDistance))}function tee({queryGeometry:e,size:r,transform:t,unwrappedTileID:i,getElevation:a},o){let s=t.projectTileCoordinates(o.x,o.y,i,a?.(o.x,o.y)).signedDistanceFromCamera,l=r*(t.cameraToCenterDistance/s);return Q_(e,k6(o,t,i,a),l)}function ree({queryGeometry:e,size:r,transform:t,unwrappedTileID:i,getElevation:a},o){return Q_(e,k6(o,t,i,a),r)}function BL({queryGeometry:e,size:r,transform:t,unwrappedTileID:i,getElevation:a,pitchAlignment:o="map",pitchScale:s="map"},l){let n=o==="map"?s==="map"?QQ:eee:s==="map"?tee:ree,u={queryGeometry:e,size:r,transform:t,unwrappedTileID:i,getElevation:a};for(let c of l)for(let f of c)if(n(u,f))return!0;return!1}function k6(e,r,t,i){let a=r.projectTileCoordinates(e.x,e.y,t,i?.(e.x,e.y)).point;return new Wr((a.x*.5+.5)*r.width,(-a.y*.5+.5)*r.height)}function iee(e,r,t,i){return e.map(a=>k6(a,r,t,i))}function C6(e,{width:r,height:t},i,a){if(!a)a=new Uint8Array(r*t*i);else if(a instanceof Uint8ClampedArray)a=new Uint8Array(a.buffer);else if(a.length!==r*t*i)throw RangeError(`mismatched image size. expected: ${a.length} but got: ${r*t*i}`);return e.width=r,e.height=t,e.data=a,e}function OL(e,{width:r,height:t},i){if(r===e.width&&t===e.height)return;let a=C6({},{width:r,height:t},i);D6(e,a,{x:0,y:0},{x:0,y:0},{width:Math.min(e.width,r),height:Math.min(e.height,t)},i),e.width=r,e.height=t,e.data=a.data}function D6(e,r,t,i,a,o){if(a.width===0||a.height===0)return r;if(a.width>e.width||a.height>e.height||t.x>e.width-a.width||t.y>e.height-a.height)throw RangeError("out of range source coordinates for image copy");if(a.width>r.width||a.height>r.height||i.x>r.width-a.width||i.y>r.height-a.height)throw RangeError("out of range destination coordinates for image copy");let s=e.data,l=r.data;if(s===l)throw Error("srcData equals dstData, so image is already copied");for(let n=0;n<a.height;n++){let u=((t.y+n)*e.width+t.x)*o,c=((i.y+n)*r.width+i.x)*o;for(let f=0;f<a.width*o;f++)l[c+f]=s[u+f]}return r}function L6(e){let r=new Uint8Array(e.length);for(let t=0;t<e.length;t+=4){let i=e[t+3];r[t+0]=Math.round(e[t+0]*i/255),r[t+1]=Math.round(e[t+1]*i/255),r[t+2]=Math.round(e[t+2]*i/255),r[t+3]=i}return r}function NL(e){let r={},t=e.resolution||256,i=e.clips?e.clips.length:1,a=e.image||new Rs({width:t,height:i});if(!rJ(t))throw Error(`width is not a power of 2 - ${t}`);let o=(s,l,n)=>{r[e.evaluationKey]=n;let u=e.expression.evaluate(r);a.setPixel(s/4/t,l/4,u)};if(e.clips)for(let s=0,l=0;s<i;++s,l+=t*4)for(let n=0,u=0;n<t;n++,u+=4){let c=n/(t-1),{start:f,end:h}=e.clips[s],d=f*(1-c)+h*c;o(l,u,d)}else for(let s=0,l=0;s<t;s++,l+=4){let n=s/(t-1);o(0,l,n)}return a}function rx(e){return"data"in e}function jL(e,r){let t=r[0],i=r[1],a=r[2],o=r[3],s=Math.min(t,i,a),l=Math.round((e+o)/s);return{r:Math.floor(l*s/t)%256,g:Math.floor(l*s/i)%256,b:Math.floor(l*s/a)%256}}function ix(e,r,t){let i=t.patternDependencies,a=!1;for(let o of r){let s=o.paint.get(`${e}-pattern`);s.isConstant()||(a=!0);let l=s.constantOr(null);l&&(a=!0,i[l.to]=!0,i[l.from]=!0)}return a}function F6(e,r,t,i,a){let{zoom:o}=i,s=a.patternDependencies;for(let l of r){let n=l.paint.get(`${e}-pattern`).value;if(n.kind!=="constant"){let u=n.evaluate({zoom:o-1},t,{},a.availableImages),c=n.evaluate({zoom:o},t,{},a.availableImages),f=n.evaluate({zoom:o+1},t,{},a.availableImages);u=u?.name?u.name:u,c=c?.name?c.name:c,f=f?.name?f.name:f,s[u]=!0,s[c]=!0,s[f]=!0,t.patterns[l.id]={min:u,mid:c,max:f}}}return t}function aee(e,r,t=2){let i=r&&r.length,a=i?r[0]*t:e.length;Cm.size&&Cm.clear();let o=UL(e,0,a,t,!0),s=[];if(!o||o.next===o.prev)return s;let l=0,n=0,u=0;if(i&&(o=uee(e,r,o,t)),e.length>80*t){l=e[0],n=e[1];let c=l,f=n;for(let h=t;h<a;h+=t){let d=e[h],p=e[h+1];d<l&&(l=d),p<n&&(n=p),d>c&&(c=d),p>f&&(f=p)}u=Math.max(c-l,f-n),u=u===0?0:32767/u}return P6(o,s,l,n,u),s}function UL(e,r,t,i,a){let o=null;if(a===wee(e,r,t,i)>0)for(let s=r;s<t;s+=i)o=WL(s/i|0,e[s],e[s+1],o);else for(let s=t-i;s>=r;s-=i)o=WL(s/i|0,e[s],e[s+1],o);return o&&rg(o,o.next)&&(ag(o),o=o.next),o}function j0(e,r=e){let t=r===e,i=e,a;do a=!1,i!==i.next&&(Cm.size===0||!Cm.has(i))&&(rg(i,i.next)||Jl(i.prev,i,i.next)===0)?((t||i===r)&&(r=i.prev),gb=!0,ag(i),i=i.prev,a=!0):(t||i!==r)&&(i=i.next,a=!t);while(a||i!==r);return r}function P6(e,r,t,i,a){a&&mee(e,t,i,a);let o=e,s=!1;for(;e.prev!==e.next;){let l=e.prev,n=e.next;if(Jl(l,e,n)<0&&(a?oee(e,t,i,a):nee(e))){r.push(l.i,e.i,n.i),ag(e),e=n,o=n;continue}if(e=n,e===o){if(gb=!1,e=j0(e),gb){o=e;continue}if(!s){e=see(e,r),o=e,s=!0;continue}lee(e,r,t,i,a);break}}}function nee(e){let r=e.prev,t=e,i=e.next,a=r.x,o=t.x,s=i.x,l=r.y,n=t.y,u=i.y,c=Math.min(a,o,s),f=Math.min(l,n,u),h=Math.max(a,o,s),d=Math.max(l,n,u),p=i.next;for(;p!==r;){if(p.x>=c&&p.x<=h&&p.y>=f&&p.y<=d&&(a!==p.x||l!==p.y)&&nx(a,l,o,n,s,u,p.x,p.y)&&Jl(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function oee(e,r,t,i){let a=e.prev,o=e,s=e.next,l=a.x,n=o.x,u=s.x,c=a.y,f=o.y,h=s.y,d=Math.min(l,n,u),p=Math.min(c,f,h),g=Math.max(l,n,u),m=Math.max(c,f,h),y=I6(d,p,r,t,i),_=I6(g,m,r,t,i),v=e.prevZ;for(;v&&v.z>=y;){if(v.x>=d&&v.x<=g&&v.y>=p&&v.y<=m&&v!==s&&(l!==v.x||c!==v.y)&&nx(l,c,n,f,u,h,v.x,v.y)&&Jl(v.prev,v,v.next)>=0)return!1;v=v.prevZ}let x=e.nextZ;for(;x&&x.z<=_;){if(x.x>=d&&x.x<=g&&x.y>=p&&x.y<=m&&x!==s&&(l!==x.x||c!==x.y)&&nx(l,c,n,f,u,h,x.x,x.y)&&Jl(x.prev,x,x.next)>=0)return!1;x=x.nextZ}return!0}function see(e,r){let t=e,i=!1;do{let a=t.prev,o=t.next.next;HL(a,t,t.next,o,!1)&&ig(a,o)&&ig(o,a)&&(r.push(a.i,t.i,o.i),ag(t),ag(t.next),t=e=o,i=!0),t=t.next}while(t!==e);return i?j0(t):t}function lee(e,r,t,i,a){let o=e;do{let s=o.next.next;for(;s!==o.prev;){if(o.i!==s.i&&_ee(o,s)){let l=$L(o,s);o=j0(o,o.next),l=j0(l,l.next),P6(o,r,t,i,a),P6(l,r,t,i,a);return}s=s.next}o=o.next}while(o!==e)}function uee(e,r,t,i){let a=[];for(let o=0,s=r.length;o<s;o++){let l=UL(e,r[o]*i,o<s-1?r[o+1]*i:e.length,i,!1);l===l.next&&Cm.add(l),a.push(yee(l))}a.sort(cee),hee(e.length/i,r.length),qL(t,t),yb=!0;for(let o=0;o<a.length;o++)t=fee(a[o],t);return yb=!1,j0(t)}function cee(e,r){return e.x-r.x||e.y-r.y||(e.next.y-e.y)/(e.next.x-e.x)-(r.next.y-r.y)/(r.next.x-r.x)}function fee(e,r){let t=pee(e,r);if(!t)return r;let i=$L(t,e),a=i.next;return qL(t,a.next),j0(i,i.next),j0(t,t.next)}function hee(e,r){let t=Math.ceil((e+2*r)/16)+r+2;yl.length<t*4&&(yl=new Float64Array(t*4)),Lg=0}function qL(e,r){let t=e;do{let i=Lg++;_b[i]=t;let a=1/0,o=1/0,s=-1/0,l=-1/0,n=0;do{let c=t.next;t.z=i,t.x<a&&(a=t.x),t.x>s&&(s=t.x),t.y<o&&(o=t.y),t.y>l&&(l=t.y),c.x<a&&(a=c.x),c.x>s&&(s=c.x),c.y<o&&(o=c.y),c.y>l&&(l=c.y),t=c}while(++n<16&&t!==r);xb[i]=t;let u=i*4;yl[u]=a,yl[u+1]=o,yl[u+2]=s,yl[u+3]=l}while(t!==r)}function dee(e,r){let t=e.z*4;r.x<yl[t]&&(yl[t]=r.x),r.y<yl[t+1]&&(yl[t+1]=r.y),r.x>yl[t+2]&&(yl[t+2]=r.x),r.y>yl[t+3]&&(yl[t+3]=r.y)}function VL(e){let r=xb[e];for(;r.prev.next!==r;)r=r.next;return xb[e]=r,r}function GL(e){let r=_b[e];for(;r.prev.next!==r;)r=r.next;return _b[e]=r,r}function pee(e,r){let t=r,i=e.x,a=e.y,o=-1/0,s;if(rg(e,t))return t;for(let h=0,d=0;h<Lg;h++,d+=4){if(a<yl[d+1]||a>yl[d+3]||yl[d]>i||yl[d+2]<=o)continue;let p=VL(h);t=GL(h);do{if(t.prev.next===t){if(rg(e,t.next))return t.next;if(a<=t.y&&a>=t.next.y&&t.next.y!==t.y){let g=t.x+(a-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(g<=i&&g>o&&(o=g,s=t.x<t.next.x?t:t.next,g===i))return s}}t=t.next}while(t!==p)}if(!s)return null;let l=s.x,n=s.y,u=Math.min(a,n),c=Math.max(a,n),f=1/0;for(let h=0,d=0;h<Lg;h++,d+=4){if(yl[d+2]<l||yl[d]>i||yl[d+3]<u||yl[d+1]>c)continue;let p=VL(h);t=GL(h);do{if(t.prev.next===t&&i>=t.x&&t.x>=l&&i!==t.x&&nx(a<n?i:o,a,l,n,a<n?o:i,a,t.x,t.y)){let g=Math.abs(a-t.y)/(i-t.x);(ig(t,e)||t.y===a&&t.next.y===a&&t.next.x>i)&&(g<f||g===f&&(t.x>s.x||t.x===s.x&&vee(s,t)))&&(s=t,f=g)}t=t.next}while(t!==p)}return s}function vee(e,r){return Jl(e.prev,e,r.prev)<0&&Jl(r.next,e,e.next)<0}function mee(e,r,t,i){let a=e,o=0;do a.z=I6(a.x,a.y,r,t,i),Bf[o++]=a,a=a.next;while(a!==e);gee(o);let s=null;for(let l=0;l<o;l++){let n=Bf[l];n.prevZ=s,s&&(s.nextZ=n),s=n}s.nextZ=null}function gee(e){if(e<=32){for(let r=1;r<e;r++){let t=Bf[r],i=t.z,a=r-1;for(;a>=0&&Bf[a].z>i;)Bf[a+1]=Bf[a],a--;Bf[a+1]=t}return}Kp.length<e&&(Kp=new Uint32Array(e),Lm=new Uint32Array(e),Dm=Array(e));for(let r=0;r<e;r++)Kp[r]=Bf[r].z;ax(e,Bf,Kp,Dm,Lm,0),ax(e,Dm,Lm,Bf,Kp,8),ax(e,Bf,Kp,Dm,Lm,16),ax(e,Dm,Lm,Bf,Kp,24)}function ax(e,r,t,i,a,o){Fm.fill(0);for(let l=0;l<e;l++)Fm[t[l]>>>o&255]++;let s=0;for(let l=0;l<256;l++){let n=Fm[l];Fm[l]=s,s+=n}for(let l=0;l<e;l++){let n=t[l],u=Fm[n>>>o&255]++;i[u]=r[l],a[u]=n}}function I6(e,r,t,i,a){return e=(e-t)*a|0,r=(r-i)*a|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,e|r<<1}function yee(e){let r=e,t=e;do(r.x<t.x||r.x===t.x&&r.y<t.y)&&(t=r),r=r.next;while(r!==e);return t}function nx(e,r,t,i,a,o,s,l){return(a-s)*(r-l)>=(e-s)*(o-l)&&(e-s)*(i-l)>=(t-s)*(r-l)&&(t-s)*(o-l)>=(a-s)*(i-l)}function _ee(e,r){let t=rg(e,r)&&Jl(e.prev,e,e.next)>0&&Jl(r.prev,r,r.next)>0;return e.next.i!==r.i&&(t||ig(e,r)&&ig(r,e)&&(Jl(e.prev,e,r.prev)!==0||Jl(e,r.prev,r)!==0))&&!xee(e,r)&&(t||bee(e,r))}function Jl(e,r,t){return(r.y-e.y)*(t.x-r.x)-(r.x-e.x)*(t.y-r.y)}function rg(e,r){return e.x===r.x&&e.y===r.y}function HL(e,r,t,i,a=!0){let o=Jl(e,r,t),s=Jl(e,r,i),l=Jl(t,i,e),n=Jl(t,i,r);return(o>0&&s<0||o<0&&s>0)&&(l>0&&n<0||l<0&&n>0)?!0:a?!!(o===0&&ox(e,t,r)||s===0&&ox(e,i,r)||l===0&&ox(t,e,i)||n===0&&ox(t,r,i)):!1}function ox(e,r,t){return r.x<=Math.max(e.x,t.x)&&r.x>=Math.min(e.x,t.x)&&r.y<=Math.max(e.y,t.y)&&r.y>=Math.min(e.y,t.y)}function xee(e,r){let t=Math.min(e.x,r.x),i=Math.max(e.x,r.x),a=Math.min(e.y,r.y),o=Math.max(e.y,r.y),s=e;do{let l=s.next;if(s.x>i&&l.x>i||s.x<t&&l.x<t||s.y>o&&l.y>o||s.y<a&&l.y<a){s=l;continue}if(s.i!==e.i&&l.i!==e.i&&s.i!==r.i&&l.i!==r.i&&HL(s,l,e,r))return!0;s=l}while(s!==e);return!1}function ig(e,r){return Jl(e.prev,e,e.next)<0?Jl(e,r,e.next)>=0&&Jl(e,e.prev,r)>=0:Jl(e,r,e.prev)<0||Jl(e,e.next,r)<0}function bee(e,r){let t=e,i=!1,a=(e.x+r.x)/2,o=(e.y+r.y)/2;do{let s=t.next;t.y>o!=s.y>o&&a<(s.x-t.x)*(o-t.y)/(s.y-t.y)+t.x&&(i=!i),t=s}while(t!==e);return i}function $L(e,r){let t=R6(e.i,e.x,e.y),i=R6(r.i,r.x,r.y),a=e.next,o=r.prev;return e.next=r,r.prev=e,t.next=a,a.prev=t,i.next=t,t.prev=i,o.next=i,i.prev=o,i}function WL(e,r,t,i){let a=R6(e,r,t);return i?(a.next=i.next,a.prev=i,i.next.prev=a,i.next=a):(a.prev=a,a.next=a),a}function ag(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ),yb&&dee(e.prev,e.next)}function R6(e,r,t){return{i:e,x:r,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function wee(e,r,t,i){let a=0;for(let o=r,s=t-i;o<t;o+=i)a+=(e[s]-e[o])*(e[o+1]+e[s+1]),s=o;return a}function YL(e,r,t,i=!0){return new eR(t,r).subdividePolygonInternal(e,i)}function U0(e,r,t=!1){if(!e||e.length<1||e.length<2)return[];let i=e[0],a=e[e.length-1],o=t&&(i.x!==a.x||i.y!==a.y);if(r<2)return o?[...e,e[0]]:[...e];let s=Math.floor(Bi/r),l=[];l.push(new Wr(e[0].x,e[0].y));let n=e.length,u=o?n:n-1;for(let c=0;c<u;c++){let f=e[c],h=c<n-1?e[c+1]:e[0],d=f.x,p=f.y,g=h.x,m=h.y,y=d!==g,_=p!==m;if(!y&&!_)continue;let v=g-d,x=m-p,S=Math.abs(v),M=Math.abs(x),C=d,w=p;for(;;){let A=v>0?(Math.floor(C/s)+1)*s:(Math.ceil(C/s)-1)*s,b=x>0?(Math.floor(w/s)+1)*s:(Math.ceil(w/s)-1)*s,E=Math.abs(C-A),T=Math.abs(w-b),F=Math.abs(C-g),D=Math.abs(w-m),R=y?E/S:1/0,P=_?T/M:1/0;if((F<=E||!y)&&(D<=T||!_))break;if(R<P&&y||!_){C=A,w+=x*R;let z=new Wr(C,Math.round(w));(l[l.length-1].x!==z.x||l[l.length-1].y!==z.y)&&l.push(z)}else{C+=v*P,w=b;let z=new Wr(Math.round(C),w);(l[l.length-1].x!==z.x||l[l.length-1].y!==z.y)&&l.push(z)}}let k=new Wr(g,m);(l[l.length-1].x!==k.x||l[l.length-1].y!==k.y)&&l.push(k)}return l}function Tee(e){let r=[],t=[];for(let i of e)if(i.length!==0){i!==e[0]&&r.push(t.length/2);for(let a of i)t.push(a.x),t.push(a.y)}return{flattened:t,holeIndices:r}}function Aee(e,r){let t=[];for(let i=0;i<r.length;i+=3){let a=r[i],o=r[i+1],s=r[i+2],l=e[a*2],n=e[a*2+1],u=e[o*2],c=e[o*2+1],f=e[s*2],h=e[s*2+1],d=u-l,p=c-n,g=f-l;d*(h-n)-p*g>0?(t.push(a),t.push(s),t.push(o)):(t.push(a),t.push(o),t.push(s))}return t}function Mee(e,r,t){if(r.length===0)throw Error("Subdivision vertex ring is empty.");let i=0,a=e[r[0]*2];for(let n=1;n<r.length;n++){let u=e[r[n]*2];u<a&&(a=u,i=n)}let o=r.length,s=i,l=(s+1)%o;for(;;){let n=s-1>=0?s-1:o-1,u=(l+1)%o,c=e[r[n]*2],f=e[r[n]*2+1],h=e[r[u]*2],d=e[r[u]*2+1],p=e[r[s]*2],g=e[r[s]*2+1],m=e[r[l]*2],y=e[r[l]*2+1],_=!1;if(c<h)_=!0;else if(c>h)_=!1;else{let v=y-g,x=-(m-p),S=g<y?1:-1;((c-p)*v+(f-g)*x)*S>((h-p)*v+(d-g)*x)*S&&(_=!0)}if(_){let v=r[n],x=r[s],S=r[l];v!==x&&v!==S&&x!==S&&t.push(S,x,v),s--,s<0&&(s=o-1)}else{let v=r[u],x=r[s],S=r[l];v!==x&&v!==S&&x!==S&&t.push(S,x,v),l++,l>=o&&(l=0)}if(n===u)break}}function XL(e,r,t,i,a,o,s,l,n){let u=a.length/2,c=s&&l&&n;if(u<Ks.MAX_VERTEX_ARRAY_LENGTH){let f=r.prepareSegment(u,t,i),h=f.vertexLength;for(let g=0;g<o.length;g+=3)i.emplaceBack(h+o[g],h+o[g+1],h+o[g+2]);f.vertexLength+=u,f.primitiveLength+=o.length/3;let d,p;c&&(p=s.prepareSegment(u,t,l),d=p.vertexLength,p.vertexLength+=u);for(let g=0;g<a.length;g+=2)e(a[g],a[g+1]);if(c)for(let g of n){for(let m=1;m<g.length;m+=2)l.emplaceBack(d+g[m-1],d+g[m]);p.primitiveLength+=g.length/2}}else See(r,t,i,a,o,e),c&&Eee(s,t,l,a,n,e),r.forceNewSegmentOnNextPrepare(),s?.forceNewSegmentOnNextPrepare()}function ng(e,r,t,i,a,o,s){if(o){let l=i.count;return t(r[a*2],r[a*2+1]),e[a]=i.count,i.count++,s.vertexLength++,l}return e[a]}function See(e,r,t,i,a,o){let s=[];for(let f=0;f<i.length/2;f++)s.push(-1);let l={count:0},n=0,u=e.getOrCreateLatestSegment(r,t),c=u.vertexLength;for(let f=2;f<a.length;f+=3){let h=a[f-2],d=a[f-1],p=a[f],g=s[h]<n,m=s[d]<n,y=s[p]<n,_=+!!g+ +!!m+ +!!y;u.vertexLength+_>Ks.MAX_VERTEX_ARRAY_LENGTH&&(u=e.createNewSegment(r,t),n=l.count,g=!0,m=!0,y=!0,c=0);let v=ng(s,i,o,l,h,g,u),x=ng(s,i,o,l,d,m,u),S=ng(s,i,o,l,p,y,u);t.emplaceBack(c+v-n,c+x-n,c+S-n),u.primitiveLength++}}function Eee(e,r,t,i,a,o){let s=[];for(let f=0;f<i.length/2;f++)s.push(-1);let l={count:0},n=0,u=e.getOrCreateLatestSegment(r,t),c=u.vertexLength;for(let f of a)for(let h=1;h<f.length;h+=2){let d=f[h-1],p=f[h],g=s[d]<n,m=s[p]<n,y=+!!g+ +!!m;u.vertexLength+y>Ks.MAX_VERTEX_ARRAY_LENGTH&&(u=e.createNewSegment(r,t),n=l.count,g=!0,m=!0,c=0);let _=ng(s,i,o,l,d,g,u),v=ng(s,i,o,l,p,m,u);t.emplaceBack(c+_-n,c+v-n),u.primitiveLength++}}function z6(e,r){return e.x===r.x&&(e.x<0||e.x>8192)||e.y===r.y&&(e.y<0||e.y>8192)}function ZL(e){return e.every(r=>r.x<0)||e.every(r=>r.x>8192)||e.every(r=>r.y<0)||e.every(r=>r.y>8192)}function KL(e){let r=e.length;if(r<=1)return[e];let t=[],i,a;for(let o=0;o<r;o++){let s=kee(e[o]);s!==0&&(a===void 0&&(a=s<0),a===s<0?(i&&t.push(i),i=[e[o]]):i&&i.push(e[o]))}return i&&t.push(i),t}function kee(e){let r=0;for(let t=0,i=e.length,a=i-1,o,s;t<i;a=t++)o=e[t],s=e[a],r+=(s.x-o.x)*(o.y+s.y);return r}function Cee(e){let r=null,t=e.readVarint()+e.pos;for(;e.pos<t;){let i=e.readVarint();r=i===10?e.readString():i===21?e.readFloat():i===25?e.readDouble():i===32?e.readVarint(!0):i===40?e.readVarint():i===48?e.readSVarint():i===56?e.readBoolean():(e.skip(i),null)}if(r==null)throw Error("unknown feature value");return r}function JL(e){return lA*Math.cos(e*Math.PI/180)}function lm(e){return(180+e)/360}function um(e){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+e*Math.PI/360)))/360}function q0(e,r){return e/JL(r)}function B6(e){return e*360-180}function og(e){let r=180-e*360;return 360/Math.PI*Math.atan(Math.exp(r*Math.PI/180))-90}function QL(e,r){return e*JL(og(r))}function Dee(e){return 1/Math.cos(e*Math.PI/180)}function eF(e,r,t){let i=1/(1<<t.z);return new Qo(e/Bi*i+t.x*i,r/Bi*i+t.y*i)}function Lee(e,r,t){return eF(e,r,t).toLngLat()}function Md(e,r){let t=to(r.lat,-85.051129,Wh);return new Wr(lm(r.lng)*e,um(t)*e)}function sg(e,r){return new Qo(r.x/e,r.y/e).toLngLat()}function lg(e){return e.cameraToCenterDistance*Math.min(Math.tan(rl(90-e.pitch))*.85,Math.tan(rl(Jp-e.pitch)))}function O6(e,r){let t=e.canonical,i=r/Vc(t.z),a=t.x+2**t.z*e.wrap,o=new Float64Array(16);return Hh(o),Ol(o,o,[a*i,t.y*i,0]),Xu(o,o,[i/Bi,i/Bi,1]),o}function tF(e,r,t,i,a){let o=Qo.fromLngLat(e,r),s=a*q0(1,e.lat),{x:l,y:n,z:u}=N6(t,i),c=s*-l,f=s*-n,h=s*u;return new Qo(o.x+c,o.y+f,o.z+h)}function Fee(e){let r=q0(1,e.center.lat)*e.worldSize;return tF(e.center,e.elevation,e.pitch,e.bearing,e.cameraToCenterDistance/r)}function N6(e,r){let t=rl(e),i=rl(r),a=Math.cos(-t),o=Math.sin(t);return{x:o*Math.sin(i),y:-o*Math.cos(i),z:a}}function rF(e,r,t){if(r<=0||!e||e.length===0)return e;let i=Pee(r,t);return e.map(a=>Iee(a,i))}function Pee(e,r){let t=Lee(Bi/2,Bi/2,r),i=Qo.fromLngLat(t).meterInMercatorCoordinateUnits(),a=(1<<r.z)*Bi;return e*i*a}function Iee(e,r){if(!e||e.length<3)return e;let t=e[0].x===e[e.length-1].x&&e[0].y===e[e.length-1].y,i=t?e.length-1:e.length;if(i<3)return e;let a=[];for(let s=0;s<i;s++){let l=e[(s-1+i)%i],n=e[s],u=e[(s+1)%i];if(z6(l,n)||z6(n,u)){a.push(n.clone());continue}zee(a,l,n,u,r)}let o=Ree(a);return o.length<3?e:(t&&o.push(o[0].clone()),o)}function Ree(e){let r=[];for(let t of e){let i=t.round(),a=r[r.length-1];(a?.x!==i.x||a?.y!==i.y)&&r.push(i)}for(;r.length>1&&r[0].x===r[r.length-1].x&&r[0].y===r[r.length-1].y;)r.pop();return r}function zee(e,r,t,i,a){let o=r.sub(t),s=i.sub(t),l=o.mag(),n=s.mag();if(l<1e-6||n<1e-6){e.push(t.clone());return}o._div(l),s._div(n);let u=o.x*s.x+o.y*s.y;if(Math.abs(u)>Math.cos(5*Math.PI/180)){e.push(t.clone());return}let c=.2,f=Math.min(a,l*c,n*c),h=t.add(o.mult(f)),d=t.add(s.mult(f)),p=Math.sqrt((1+u)/2),g=t.add(o.add(s)._unit()._mult(f/p)),m=h.sub(g).angleWith(d.sub(g)),y=Math.max(2,Math.ceil(Math.abs(m)/(Math.PI/6)-1e-6));for(let _=0;_<=y;_++)e.push(h.rotateAround(_/y*m,g))}function ug(e,r,t,i,a,o,s,l){e.emplaceBack(r,t,Math.floor(i*Ab)*2+s,a*Ab*2,o*Ab*2,Math.round(l))}function Bee(e,r){for(let t=0;t<r.length;t++){let i=r[t];(t!==r.length-1||r[0].x!==i.x||r[0].y!==i.y)&&(e.x+=i.x,e.y+=i.y,e.sampleCount++)}}function cg(e,r){return e.x*r.x+e.y*r.y}function iF(e,r){if(e.length===1){let t=0,i=r[t++],a;for(;!a||i.equals(a);)if(a=r[t++],!a)return 1/0;for(;t<r.length;t++){let o=r[t],s=e[0],l=a.sub(i),n=o.sub(i),u=s.sub(i),c=cg(l,l),f=cg(l,n),h=cg(n,n),d=cg(u,l),p=cg(u,n),g=c*h-f*f,m=(h*d-f*p)/g,y=(c*p-f*d)/g,_=1-m-y,v=i.z*_+a.z*m+o.z*y;if(isFinite(v))return v}return 1/0}{let t=1/0;for(let i of r)t=Math.min(t,i.z);return t}}function Oee(e,r,t){let i=1/0;IL(t,r)&&(i=iF(t,r[0]));for(let a=0;a<r.length;a++){let o=r[a],s=e[a];for(let l=0;l<o.length-1;l++){let n=o[l],u=o[l+1],c=s[l],f=[n,u,s[l+1],c,n];PL(t,f)&&(i=Math.min(i,iF(t,f)))}}return i!==1/0&&i}function Nee(e,r,t,i){let a=[],o=[],s=i[8]*r,l=i[9]*r,n=i[10]*r,u=i[11]*r,c=i[8]*t,f=i[9]*t,h=i[10]*t,d=i[11]*t;for(let p of e){let g=[],m=[];for(let y of p){let _=y.x,v=y.y,x=i[0]*_+i[4]*v+i[12],S=i[1]*_+i[5]*v+i[13],M=i[2]*_+i[6]*v+i[14],C=i[3]*_+i[7]*v+i[15],w=x+s,k=S+l,A=M+n,b=C+u,E=x+c,T=S+f,F=M+h,D=C+d,R=new Wr(w/b,k/b);R.z=A/b,g.push(R);let P=new Wr(E/D,T/D);P.z=F/D,m.push(P)}a.push(g),o.push(m)}return[a,o]}function jee(e,r,t){let i=[];for(let a of e){let o=[a.x,a.y,t,1];pu(o,o,r),i.push(new Wr(o[0]/o[3],o[1]/o[3]))}return i}function aF(e,r){return r>0?r+2*e:e}function Uee(e){return/[\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C-\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u070D\u070F-\u074A\u074D-\u077F\u07C0-\u07FA\u07FD-\u07FF\u0840-\u085B\u085E\u0860-\u086A\u0870-\u0891\u0897-\u08E1\u08E3-\u08FF\u1800\u1801\u1804\u1806-\u1819\u1820-\u1878\u1880-\u18AA\uA840-\uA877\uFB50-\uFD3D\uFD40-\uFDCF\uFDF0-\uFDFF\uFE70-\uFE74\uFE76-\uFEFC]|\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]|\uD803[\uDD00-\uDD27\uDD30-\uDD39\uDE60-\uDE7E\uDEC2-\uDEC7\uDED0-\uDED8\uDEFA-\uDEFF\uDF30-\uDF59\uDF70-\uDF89\uDFB0-\uDFCB]|\uD805[\uDE60-\uDE6C]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]|\uD83A[\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]/gim.test(String.fromCodePoint(e))}function qee(e){return/[\u0591-\u05C7\u05D0-\u05EA\u05EF-\u05F4\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C-\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u070D\u070F-\u074A\u074D-\u07B1\u07C0-\u07FA\u07FD-\u082D\u0830-\u083E\u0840-\u085B\u085E\u0860-\u086A\u0870-\u0891\u0897-\u08E1\u08E3-\u08FF\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFD3D\uFD40-\uFDCF\uFDF0-\uFDFF\uFE70-\uFE74\uFE76-\uFEFC]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC57-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD1F-\uDD39\uDD3F-\uDD59\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE50-\uDE58\uDE60-\uDE9F\uDEC0-\uDEE6\uDEEB-\uDEF6\uDF00-\uDF35\uDF39-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD27\uDD30-\uDD39\uDD40-\uDD65\uDD69-\uDD85\uDD8E\uDD8F\uDE60-\uDE7E\uDE80-\uDEA9\uDEAB-\uDEAD\uDEB0\uDEB1\uDEC2-\uDEC7\uDED0-\uDED8\uDEFA-\uDF27\uDF30-\uDF59\uDF70-\uDF89\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]/gim.test(String.fromCodePoint(e))}function Vee(e){return/[\u02EA\u02EB\u1100-\u11FF\u2E80-\u2FDF\u3000-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFE10-\uFE1F\uFE30-\uFE4F\uFF00-\uFFEF]|\uD81B[\uDFE0-\uDFFF]|[\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFFF]|\uD82C[\uDC00-\uDEFB]|\uD83C[\uDE00-\uDEFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79]/gim.test(String.fromCodePoint(e))}function Gee(e){return/[\u02EA\u02EB\u2E80-\u2FDF\u2FF0-\u303F\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FD-\u30FF\u3105-\u312F\u31A0-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uF900-\uFA6D\uFA70-\uFAD9\uFE10-\uFE1F\uFE30-\uFE4F\uFF00-\uFFEF]|\uD81B[\uDFE0-\uDFFF]|[\uD81C-\uD822\uD840-\uD868\uD86A-\uD86D\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD88C][\uDC00-\uDFFF]|\uD823[\uDC00-\uDCD5\uDCFF-\uDD1E\uDD80-\uDDF2]|\uD82B[\uDFF0-\uDFFF]|\uD82C[\uDC00-\uDEFB]|\uD83C[\uDE00-\uDEFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEAD\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0\uDFF0-\uDFFF]|\uD87B[\uDC00-\uDE5D]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD88D[\uDC00-\uDC79]/gim.test(String.fromCodePoint(e))}function sx(e){return/[\u02EA\u02EB\u1100-\u11FF\u1401-\u167F\u18B0-\u18FF\u2065\u20DD-\u20E0\u20E2-\u20E4\u2B97\u2BF0-\u2BFF\u2E50\u2E51\u2E80-\u3007\u3012\u3013\u3020-\u302F\u3031-\u30FB\u30FD-\uA4CF\uA960-\uA97F\uAC00-\uD7FF\uF900-\uFAFF\uFE10-\uFE1F\uFE30-\uFE48\uFE50-\uFE57\uFE5F-\uFE62\uFE67-\uFE6F\uFF00-\uFF07\uFF0A-\uFF0C\uFF0E-\uFF19\uFF1F-\uFF3A\uFF3C\uFF3E\uFF40-\uFF5A\uFFE0-\uFFE2\uFFE4-\uFFE7\uFFF0-\uFFF8]|\uD802[\uDD80-\uDD9F]|\uD805[\uDD80-\uDDFF]|\uD806[\uDE00-\uDEBF]|[\uD80C-\uD810\uD81C-\uD822\uD83C\uD83D\uD840-\uD87E\uD880-\uD8BE][\uDC00-\uDFFF]|\uD811[\uDC00-\uDE7F]|\uD81B[\uDFE0-\uDFFF]|\uD823[\uDC00-\uDDFF]|\uD82B[\uDFF0-\uDFFF]|\uD82C[\uDC00-\uDEFF]|\uD833[\uDEC0-\uDFCF]|\uD834[\uDC00-\uDDFF\uDEE0-\uDF7F]|\uD836[\uDC00-\uDEAF]|\uD83E[\uDD00-\uDEFF]|[\uD87F\uD8BF][\uDC00-\uDFFD]/gim.test(String.fromCodePoint(e))}function Hee(e){return/[\xA7\xA9\xAE\xB1\xBC-\xBE\xD7\xF7\u2016\u2020\u2021\u2030\u2031\u203B\u203C\u2042\u2047-\u2049\u2051\u2100-\u218F\u221E\u2234\u2235\u2300-\u2307\u230C-\u231F\u2324-\u2328\u232B\u237D-\u239A\u23BE-\u23CD\u23CF\u23D1-\u23DB\u23E2-\u2422\u2424-\u24FF\u25A0-\u2619\u2620-\u2767\u2776-\u2793\u2B12-\u2B2F\u2B50-\u2B59\u2BB8-\u2BEB\u3000-\u303F\u30A0-\u30FF\uE000-\uF8FF\uFE30-\uFE6F\uFF00-\uFFEF\uFFFC\uFFFD]|[\uDB80-\uDBFF][\uDC00-\uDFFF]/gim.test(String.fromCodePoint(e))}function $ee(e){return/[\r\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0600-\u0605\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DD\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u070F\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0890\u0891\u0897-\u089F\u08CA-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CF3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E33-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB3-\u0EBC\u0EC8-\u0ECE\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1037\u1039-\u103E\u1056-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1084-\u1086\u108D\u109D\u1100-\u11FF\u135D-\u135F\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u180F\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60\u1A62\u1A65-\u1A7C\u1A7F\u1AB0-\u1ADD\u1AE0-\u1AEB\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u200C\u200D\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA960-\uA97C\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E\uFF9F]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDD69-\uDD6D\uDEAB\uDEAC\uDEFA-\uDEFF\uDF46-\uDF50\uDF82-\uDF85]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC70\uDC73\uDC74\uDC7F-\uDC82\uDCB0-\uDCBA\uDCBD\uDCC2\uDCCD\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC2\uDDC3\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDE41\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74\uDFB8-\uDFC0\uDFC2\uDFC5\uDFC7-\uDFCA\uDFCC-\uDFD2\uDFE1\uDFE2]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF1F\uDF22-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE84-\uDE99\uDF60-\uDF67]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6\uDF00-\uDF03\uDF34-\uDF3A\uDF3E-\uDF42\uDF5A]|\uD80D[\uDC40\uDC47-\uDC55]|\uD818[\uDD1E-\uDD2F]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDD63\uDD67-\uDD6A\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDC8F\uDD30-\uDD36\uDEAE\uDEEC-\uDEEF]|\uD839[\uDCEC-\uDCEF\uDDEE\uDDEF\uDEE3\uDEE6\uDEEE\uDEEF\uDEF5]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uD83C[\uDDE6-\uDDFF\uDFFB-\uDFFF]|\uDB40[\uDC20-\uDC7F\uDD00-\uDDEF]/.test(e)}function nF(e){return/[\u0E01-\u0E3A\u0E40-\u0E4E\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECE\u0EDC-\u0EDF\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA\u1000-\u103F\u1050-\u108F\u109A-\u109F\u1780-\u17D3\u17D7\u17DC\u17DD\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19DE\u19DF\u1A20-\u1A5E\u1A60-\u1A7C\u1AA0-\u1AAD\u1B00-\u1B4C\u1B4E-\u1B7F\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE-\uA9EF\uA9FA-\uA9FE\uAA60-\uAAC2\uAADB-\uAADF]|\uD805[\uDF00-\uDF1A\uDF1D-\uDF2B\uDF3A\uDF3B\uDF3F-\uDF46]/gim.test(String.fromCodePoint(e))}function Wee(e,r){return/(?:[\u1039\u17D2\u1A60\u1BAB\u200D\uAAF6]|\uD802\uDE3F|\uD804[\uDD33\uDFD0]|\uD806[\uDD3E\uDE47\uDE99]|\uD807[\uDD45\uDD97\uDF42])$/.test(e)||new RegExp("^\\p{gc=Mc}","u").test(r)}function Yee(e,r,t){let i=0;for(let a of e.split(";")){let[o,s]=a.split(",").map(n=>parseInt(n,36)),l=i+o;for(let n=l;n<l+s;n++)t.set(n,r);i=l+s}}function Xee(e){var r;return(r=mA.get(e))!=null?r:"U"}function Zee(e){return e==="D"||e==="L"||e==="C"}function Kee(e){return e==="D"||e==="R"||e==="C"}function Jee(e,r,t){return e==="D"?r&&t?3:r?1:t?2:0:e==="R"?+!!r:e==="L"?t?2:0:null}function Qee(e){return[...e].map(r=>{let t=r.codePointAt(0);return{codePoint:t,type:Xee(t),form:null}})}function ete(e){let r=e.filter(t=>t.type!=="T");for(let t=0;t<r.length;t++){let i=r[t],a=t>0&&Zee(r[t-1].type),o=t+1<r.length&&Kee(r[t+1].type);i.form=Jee(i.type,a,o)}}function tte(e){let r=!1;for(let t of e)t.type==="T"?t.form=r?3:0:r=t.form===2||t.form===3}function rte(e){let r=[];for(let t=0;t<e.length;t++){let i=e[t];if(i.codePoint!==vA){r.push(i);continue}let a=t+1;for(;a<e.length&&e[a].type==="T";)a++;let o=e[a],s=o&&OR[String.fromCodePoint(vA,o.codePoint)];if(!s){r.push(i);continue}let l=i.form===3||i.form===1;r.push({codePoint:s[+!!l],type:"R",form:0}),r.push(...e.slice(t+1,a)),t=a}return r}function ite(e){if(e.form===null)return e.codePoint;let r=BR[e.codePoint];return r&&(r[e.form]||r[0])||e.codePoint}function ate(e){if(!NR.test(e))return e;let r=Qee(e);return ete(r),tte(r),rte(r).map(t=>String.fromCodePoint(ite(t))).join("")}function nte(e,r,t){var i;let a=r.layout.get("text-transform").evaluate(t,{});return a==="uppercase"?e=e.toLocaleUpperCase():a==="lowercase"&&(e=e.toLocaleLowerCase()),((i=Fg.applyArabicShaping)!=null?i:ate)(e)}function ote(e,r,t){for(let i of e.sections)i.text=nte(i.text,r,t);return e}function ste(e){let r={},t={},i=[],a=0;function o(u){i.push(e[u]),a++}function s(u,c,f){let h=t[u];return delete t[u],t[c]=h,i[h].geometry[0].pop(),i[h].geometry[0]=i[h].geometry[0].concat(f[0]),h}function l(u,c,f){let h=r[c];return delete r[c],r[u]=h,i[h].geometry[0].shift(),i[h].geometry[0]=f[0].concat(i[h].geometry[0]),h}function n(u,c,f){let h=f?c[0][c[0].length-1]:c[0][0];return`${u}:${h.x}:${h.y}`}for(let u=0;u<e.length;u++){let c=e[u],f=c.geometry,h=c.text?c.text.toString():null;if(!h){o(u);continue}let d=n(h,f),p=n(h,f,!0);if(d in t&&p in r&&t[d]!==r[p]){let g=l(d,p,f),m=s(d,p,i[g].geometry);delete r[d],delete t[p],t[n(h,i[m].geometry,!0)]=m,i[g].geometry=null}else d in t?s(d,p,f):p in r?l(d,p,f):(o(u),r[d]=a-1,t[p]=a-1)}return i.filter(u=>u.geometry)}function j6(e){if(!gA||!$ee(e))return[...e];kb??(kb=new Intl.Segmenter(void 0,{granularity:"grapheme"}));let r=[];for(let{segment:t}of kb.segment(e)){let i=r.length-1;i>=0&&Wee(r[i],t)?r[i]+=t:r.push(t)}return r}function lte(e){let r=new Set;if(gA){Cb??(Cb=new Intl.Segmenter(void 0,{granularity:"word"}));for(let{index:i}of Cb.segment(e))r.add(i);return r}let t=0;for(let i of e.split(new RegExp("\\b|(?=\\p{Ideo})","u")))r.add(t),t+=i.length;return r}function lx(e){let r=e.codePointAt(0);return e.length>(r>65535?2:1)}function U6(e){return/\s/u.test(String.fromCodePoint(e))}function q6(e){for(let r of e)if(sx(r.codePointAt(0)))return!0;return!1}function ute(e){for(let r of e)if(!cte(r.codePointAt(0)))return!1;return!0}function cte(e){return!Uee(e)}function oF(e){return!(sx(e)||Hee(e))}function sF(e){return new RegExp("\\p{sc=Arab}","u").test(String.fromCodePoint(e))}function lF(e){return qee(e)}function uF(e){for(let r of e)if(lF(r.codePointAt(0)))return!0;return!1}function fte(e){let r="",t={premature:!0,value:void 0},i=e[Symbol.iterator](),a=i.next(),o=e[Symbol.iterator]();o.next();let s=o.next();for(;!a.done;)(s.done||!oF(s.value.codePointAt(0))||X0[s.value])&&(t.premature||!oF(t.value.codePointAt(0))||X0[t.value])&&X0[a.value]?r+=X0[a.value]:r+=a.value,t={value:a.value,premature:!1},a=i.next(),s=o.next();return r}function cF(e,r,t,i,a,o){if("fontStack"in r){let s=t[r.fontStack],l=s?.[e];if(l)return l.metrics.advance*r.scale+a;let n=0;for(let u of e){let c=s?.[u];c&&(n+=c.metrics.advance*r.scale+a)}return n}{let s=i[r.imageName];return s?s.displaySize[0]*r.scale*24/o+a:0}}function fF(e,r,t,i){let a=(e-r)**2;return i?e<r?a/2:a*2:a+Math.abs(t)*t}function hF(e){return/^\s+$/u.test(e)}function hte(e,r,t){let i=0;return(e===10||e===13)&&(i-=1e4),t&&(i+=150),(e===40||e===65288)&&(i+=50),(r===41||r===65289)&&(i+=50),i}function dF(e,r,t,i,a,o){let s=null,l=fF(r,t,a,o);for(let n of i){let u=fF(r-n.x,t,a,o)+n.badness;u<=l&&(s=n,l=u)}return{index:e,x:r,priorBreak:s,badness:l}}function pF(e){return e?pF(e.priorBreak).concat(e.index):[]}function dte(){return(function(e){var r={R:"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73",EN:"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9",ES:"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2",ET:"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj",AN:"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u",CS:"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b",B:"a,3,f+2,2v,690",S:"9,2,k",WS:"c,k,4f4,1vk+a,u,1j,335",ON:"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i",BN:"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1",NSM:"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n",AL:"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d",LRO:"6ct",RLO:"6cu",LRE:"6cq",RLE:"6cr",PDF:"6cs",LRI:"6ee",RLI:"6ef",FSI:"6eg",PDI:"6eh"},t={},i={};t.L=1,i[1]="L",Object.keys(r).forEach(function(te,ne){t[te]=1<<ne+1,i[t[te]]=te}),Object.freeze(t);var a=t.LRI|t.RLI|t.FSI,o=t.L|t.R|t.AL,s=t.B|t.S|t.WS|t.ON|t.FSI|t.LRI|t.RLI|t.PDI,l=t.BN|t.RLE|t.LRE|t.RLO|t.LRO|t.PDF,n=t.S|t.WS|t.B|a|t.PDI|l,u=null;function c(){if(!u){u=new Map;var te=0;for(var ne in r)if(r.hasOwnProperty(ne))for(var se=r[ne],le="",ce=void 0,pe=!1,xe=0,ye=0;ye<=se.length+1;ye+=1){var fe=se[ye];if(fe!==","&&ye!==se.length)fe==="+"?(pe=!0,xe=te=xe+parseInt(le,36),le=""):le+=fe;else{pe?ce=te+parseInt(le,36):(xe=te=xe+parseInt(le,36),ce=te),pe=!1,le="",xe=ce;for(var ae=te;ae<ce+1;ae+=1)u.set(ae,t[ne])}}}}function f(te){return c(),u.get(te.codePointAt(0))||t.L}function h(te){return i[f(te)]}var d={pairs:"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1",canonical:"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye"};function p(te,ne){var se=0,le=new Map,ce=ne&&new Map,pe;return te.split(",").forEach(function xe(ye){if(ye.indexOf("+")!==-1)for(var fe=+ye;fe--;)xe(pe);else{pe=ye;var ae=ye.split(">"),ee=ae[0],ie=ae[1];ee=String.fromCodePoint(se+=parseInt(ee,36)),ie=String.fromCodePoint(se+=parseInt(ie,36)),le.set(ee,ie),ne&&ce.set(ie,ee)}}),{map:le,reverseMap:ce}}var g,m,y;function _(){if(!g){var te=p(d.pairs,!0),ne=te.map,se=te.reverseMap;g=ne,m=se,y=p(d.canonical,!1).map}}function v(te){return _(),g.get(te)||null}function x(te){return _(),m.get(te)||null}function S(te){return _(),y.get(te)||null}var M=t.L,C=t.R,w=t.EN,k=t.ES,A=t.ET,b=t.AN,E=t.CS,T=t.B,F=t.S,D=t.ON,R=t.BN,P=t.NSM,z=t.AL,I=t.LRO,L=t.RLO,B=t.LRE,O=t.RLE,G=t.PDF,W=t.LRI,X=t.RLI,Z=t.FSI,J=t.PDI;function N(te,ne){for(var se=125,le=new Uint32Array(te.length),ce=0;ce<te.length;ce++)le[ce]=f(te[ce]);var pe=new Map;function xe(no,Mo){var Vn=le[no];le[no]=Mo,pe.set(Vn,pe.get(Vn)-1),Vn&s&&pe.set(s,pe.get(s)-1),pe.set(Mo,(pe.get(Mo)||0)+1),Mo&s&&pe.set(s,(pe.get(s)||0)+1)}for(var ye=new Uint8Array(te.length),fe=new Map,ae=[],ee=null,ie=0;ie<te.length;ie++)ee||ae.push(ee={start:ie,end:te.length-1,level:ne==="rtl"?1:ne==="ltr"?0:ps(ie,!1)}),le[ie]&T&&(ee.end=ie,ee=null);for(var Q=O|B|L|I|a|J|G|T,ue=function(no){return no+(no&1?1:2)},ge=function(no){return no+(no&1?2:1)},Me=0;Me<ae.length;Me++){ee=ae[Me];var Te=[{_level:ee.level,_override:0,_isolate:0}],je=void 0,Ve=0,Ze=0,Ke=0;pe.clear();for(var vt=ee.start;vt<=ee.end;vt++){var xt=le[vt];if(je=Te[Te.length-1],pe.set(xt,(pe.get(xt)||0)+1),xt&s&&pe.set(s,(pe.get(s)||0)+1),xt&Q)if(xt&(O|B)){ye[vt]=je._level;var Pt=(xt===O?ge:ue)(je._level);Pt<=se&&!Ve&&!Ze?Te.push({_level:Pt,_override:0,_isolate:0}):Ve||Ze++}else if(xt&(L|I)){ye[vt]=je._level;var mt=(xt===L?ge:ue)(je._level);mt<=se&&!Ve&&!Ze?Te.push({_level:mt,_override:xt&L?C:M,_isolate:0}):Ve||Ze++}else if(xt&a){xt&Z&&(xt=ps(vt+1,!0)===1?X:W),ye[vt]=je._level,je._override&&xe(vt,je._override);var Mt=(xt===X?ge:ue)(je._level);Mt<=se&&Ve===0&&Ze===0?(Ke++,Te.push({_level:Mt,_override:0,_isolate:1,_isolInitIndex:vt})):Ve++}else if(xt&J){if(Ve>0)Ve--;else if(Ke>0){for(Ze=0;!Te[Te.length-1]._isolate;)Te.pop();var lt=Te[Te.length-1]._isolInitIndex;lt!=null&&(fe.set(lt,vt),fe.set(vt,lt)),Te.pop(),Ke--}je=Te[Te.length-1],ye[vt]=je._level,je._override&&xe(vt,je._override)}else xt&G?(Ve===0&&(Ze>0?Ze--:!je._isolate&&Te.length>1&&(Te.pop(),je=Te[Te.length-1])),ye[vt]=je._level):xt&T&&(ye[vt]=ee.level);else ye[vt]=je._level,je._override&&xt!==R&&xe(vt,je._override)}for(var qe=[],Ye=null,me=ee.start;me<=ee.end;me++){var _e=le[me];if(!(_e&l)){var Ae=ye[me],ke=_e&a,Ee=_e===J;Ye&&Ae===Ye._level?(Ye._end=me,Ye._endsWithIsolInit=ke):qe.push(Ye={_start:me,_end:me,_level:Ae,_startsWithPDI:Ee,_endsWithIsolInit:ke})}}for(var De=[],Je=0;Je<qe.length;Je++){var Ue=qe[Je];if(!Ue._startsWithPDI||Ue._startsWithPDI&&!fe.has(Ue._start)){for(var at=[Ye=Ue],rt=void 0;Ye&&Ye._endsWithIsolInit&&(rt=fe.get(Ye._end))!=null;)for(var ft=Je+1;ft<qe.length;ft++)if(qe[ft]._start===rt){at.push(Ye=qe[ft]);break}for(var At=[],ht=0;ht<at.length;ht++)for(var Gt=at[ht],fr=Gt._start;fr<=Gt._end;fr++)At.push(fr);for(var gt=ye[At[0]],yt=ee.level,kt=At[0]-1;kt>=0;kt--)if(!(le[kt]&l)){yt=ye[kt];break}var Lt=At[At.length-1],Ct=ye[Lt],$t=ee.level;if(!(le[Lt]&a)){for(var mr=Lt+1;mr<=ee.end;mr++)if(!(le[mr]&l)){$t=ye[mr];break}}De.push({_seqIndices:At,_sosType:Math.max(yt,gt)%2?C:M,_eosType:Math.max($t,Ct)%2?C:M})}}for(var br=0;br<De.length;br++){var Er=De[br],Tr=Er._seqIndices,Ur=Er._sosType,Ai=Er._eosType,oi=ye[Tr[0]]&1?C:M;if(pe.get(P))for(var Qr=0;Qr<Tr.length;Qr++){var ea=Tr[Qr];if(le[ea]&P){for(var $i=Ur,ja=Qr-1;ja>=0;ja--)if(!(le[Tr[ja]]&l)){$i=le[Tr[ja]];break}xe(ea,$i&(a|J)?D:$i)}}if(pe.get(w))for(var ya=0;ya<Tr.length;ya++){var pa=Tr[ya];if(le[pa]&w)for(var xi=ya-1;xi>=-1;xi--){var bi=xi===-1?Ur:le[Tr[xi]];if(bi&o){bi===z&&xe(pa,b);break}}}if(pe.get(z))for(var Ua=0;Ua<Tr.length;Ua++){var dn=Tr[Ua];le[dn]&z&&xe(dn,C)}if(pe.get(k)||pe.get(E))for(var pi=1;pi<Tr.length-1;pi++){var Jr=Tr[pi];if(le[Jr]&(k|E)){for(var Be=0,Fe=0,Et=pi-1;Et>=0&&(Be=le[Tr[Et]],Be&l);Et--);for(var St=pi+1;St<Tr.length&&(Fe=le[Tr[St]],Fe&l);St++);Be===Fe&&(le[Jr]===k?Be===w:Be&(w|b))&&xe(Jr,Be)}}if(pe.get(w)){for(var zt=0;zt<Tr.length;zt++)if(le[Tr[zt]]&w){for(var Wt=zt-1;Wt>=0&&le[Tr[Wt]]&(A|l);Wt--)xe(Tr[Wt],w);for(zt++;zt<Tr.length&&le[Tr[zt]]&(A|l|w);zt++)le[Tr[zt]]!==w&&xe(Tr[zt],w)}}if(pe.get(A)||pe.get(k)||pe.get(E))for(var Yt=0;Yt<Tr.length;Yt++){var ze=Tr[Yt];if(le[ze]&(A|k|E)){xe(ze,D);for(var tt=Yt-1;tt>=0&&le[Tr[tt]]&l;tt--)xe(Tr[tt],D);for(var ct=Yt+1;ct<Tr.length&&le[Tr[ct]]&l;ct++)xe(Tr[ct],D)}}if(pe.get(w))for(var wt=0,Nt=Ur;wt<Tr.length;wt++){var It=Tr[wt],Zt=le[It];Zt&w?Nt===M&&xe(It,M):Zt&o&&(Nt=Zt)}if(pe.get(s)){for(var qt=C|w|b,vr=qt|M,Br=[],Pr=[],Mi=0;Mi<Tr.length;Mi++)if(le[Tr[Mi]]&s){var gi=te[Tr[Mi]],ba=void 0;if(v(gi)!==null)if(Pr.length<63)Pr.push({char:gi,seqIndex:Mi});else break;else if((ba=x(gi))!==null)for(var Hi=Pr.length-1;Hi>=0;Hi--){var Za=Pr[Hi].char;if(Za===ba||Za===x(S(gi))||v(S(Za))===gi){Br.push([Pr[Hi].seqIndex,Mi]),Pr.length=Hi;break}}}Br.sort(function(no,Mo){return no[0]-Mo[0]});for(var oa=0;oa<Br.length;oa++){for(var Cn=Br[oa],_n=Cn[0],Li=Cn[1],In=!1,pn=0,Ka=_n+1;Ka<Li;Ka++){var Rn=Tr[Ka];if(le[Rn]&vr){In=!0;var tn=le[Rn]&qt?C:M;if(tn===oi){pn=tn;break}}}if(In&&!pn){pn=Ur;for(var Mn=_n-1;Mn>=0;Mn--){var Kn=Tr[Mn];if(le[Kn]&vr){var zn=le[Kn]&qt?C:M;pn=zn===oi?oi:zn;break}}}if(pn){if(le[Tr[_n]]=le[Tr[Li]]=pn,pn!==oi){for(var ua=_n+1;ua<Tr.length;ua++)if(!(le[Tr[ua]]&l)){f(te[Tr[ua]])&P&&(le[Tr[ua]]=pn);break}}if(pn!==oi){for(var Ea=Li+1;Ea<Tr.length;Ea++)if(!(le[Tr[Ea]]&l)){f(te[Tr[Ea]])&P&&(le[Tr[Ea]]=pn);break}}}}for(var ln=0;ln<Tr.length;ln++)if(le[Tr[ln]]&s){for(var on=ln,ao=ln,ho=Ur,Jn=ln-1;Jn>=0;Jn--)if(le[Tr[Jn]]&l)on=Jn;else{ho=le[Tr[Jn]]&qt?C:M;break}for(var lo=Ai,Fo=ln+1;Fo<Tr.length;Fo++)if(le[Tr[Fo]]&(s|l))ao=Fo;else{lo=le[Tr[Fo]]&qt?C:M;break}for(var uo=on;uo<=ao;uo++)le[Tr[uo]]=ho===lo?ho:oi;ln=ao}}}for(var Qn=ee.start;Qn<=ee.end;Qn++){var jo=ye[Qn],Yn=le[Qn];if(jo&1?Yn&(M|w|b)&&ye[Qn]++:Yn&C?ye[Qn]++:Yn&(b|w)&&(ye[Qn]+=2),Yn&l&&(ye[Qn]=Qn===0?ee.level:ye[Qn-1]),Qn===ee.end||f(te[Qn])&(F|T))for(var Bn=Qn;Bn>=0&&f(te[Bn])&n;Bn--)ye[Bn]=ee.level}}return{levels:ye,paragraphs:ae};function ps(no,Mo){for(var Vn=no;Vn<te.length;Vn++){var ts=le[Vn];if(ts&(C|z))return 1;if(ts&(T|M)||Mo&&ts===J)return 0;if(ts&a){var ws=xo(Vn);Vn=ws===-1?te.length:ws}}return 0}function xo(no){for(var Mo=1,Vn=no+1;Vn<te.length;Vn++){var ts=le[Vn];if(ts&T)break;if(ts&J){if(--Mo===0)return Vn}else ts&a&&Mo++}return-1}}var H="14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1",$;function U(){if(!$){var te=p(H,!0),ne=te.map;te.reverseMap.forEach(function(se,le){ne.set(le,se)}),$=ne}}function V(te){return U(),$.get(te)||null}function j(te,ne,se,le){var ce=te.length;se=Math.max(0,se==null?0:+se),le=Math.min(ce-1,le==null?ce-1:+le);for(var pe=new Map,xe=se;xe<=le;xe++)if(ne[xe]&1){var ye=V(te[xe]);ye!==null&&pe.set(xe,ye)}return pe}function q(te,ne,se,le){var ce=te.length;se=Math.max(0,se==null?0:+se),le=Math.min(ce-1,le==null?ce-1:+le);var pe=[];return ne.paragraphs.forEach(function(xe){var ye=Math.max(se,xe.start),fe=Math.min(le,xe.end);if(ye<fe){for(var ae=ne.levels.slice(ye,fe+1),ee=fe;ee>=ye&&f(te[ee])&n;ee--)ae[ee]=xe.level;for(var ie=xe.level,Q=1/0,ue=0;ue<ae.length;ue++){var ge=ae[ue];ge>ie&&(ie=ge),ge<Q&&(Q=ge|1)}for(var Me=ie;Me>=Q;Me--)for(var Te=0;Te<ae.length;Te++)if(ae[Te]>=Me){for(var je=Te;Te+1<ae.length&&ae[Te+1]>=Me;)Te++;Te>je&&pe.push([je+ye,Te+ye])}}}),pe}function Y(te,ne,se,le){var ce=K(te,ne,se,le),pe=[].concat(te);return ce.forEach(function(xe,ye){pe[ye]=(ne.levels[xe]&1?V(te[xe]):null)||te[xe]}),pe.join("")}function K(te,ne,se,le){for(var ce=q(te,ne,se,le),pe=[],xe=0;xe<te.length;xe++)pe[xe]=xe;return ce.forEach(function(ye){for(var fe=ye[0],ae=ye[1],ee=pe.slice(fe,ae+1),ie=ee.length;ie--;)pe[ae-ie]=ee[ie]}),pe}return e.closingToOpeningBracket=x,e.getBidiCharType=f,e.getBidiCharTypeName=h,e.getCanonicalBracket=S,e.getEmbeddingLevels=N,e.getMirroredCharacter=V,e.getMirroredCharactersMap=j,e.getReorderSegments=q,e.getReorderedIndices=K,e.getReorderedString=Y,e.openingToClosingBracket=v,Object.defineProperty(e,"__esModule",{value:!0}),e})({})}function pte(e,r,t,i){let a=[],o=t;for(let s of j6(e.slice(t,i)))a.push({index:o,text:s,level:r[o]}),o+=s.length;return a}function vte(e,r){let t=!0;for(let i=e.length-1;i>=0;i--){let a=Lb.getBidiCharTypeName(e[i].text[0]);GR.has(a)?(e[i].level=r,t=!0):t&&VR.has(a)?e[i].level=r:t=!1}}function mte(e,r){let t=r,i=1/0;for(let{level:o}of e)o>t&&(t=o),(o|1)<i&&(i=o|1);let a=e.slice();for(let o=t;o>=i;o--)for(let s=0;s<a.length;s++){if(a[s].level<o)continue;let l=s;for(;l+1<a.length&&a[l+1].level>=o;)l++;for(let n=s,u=l;n<u;n++,u--)[a[n],a[u]]=[a[u],a[n]];s=l}return a}function gte(e){var r;return e.level%2==0?e.text:(r=Lb.getMirroredCharacter(e.text))!=null?r:e.text}function yte(e,r){var t,i;return(i=(t=e.find(a=>r>=a.start&&r<=a.end))==null?void 0:t.level)!=null?i:0}function _te(e,r,t,i,a){let o=pte(e,r,i,a);vte(o,t);let s="",l=[];for(let n of mte(o,t)){if(qR.test(n.text))continue;let u=gte(n);s+=u,l.push(...Array(u.length).fill(n.index))}return{text:s,sourceIndices:l}}function xte(e,r){let t=r.filter(o=>o>0&&o<e.length),i=[...new Set([0,...t,e.length])].sort((o,s)=>o-s),a=[];for(let o=0;o+1<i.length;o++)a.push([i[o],i[o+1]]);return a}function vF(e,r){let{levels:t,paragraphs:i}=Lb.getEmbeddingLevels(e);return xte(e,r.concat(i.map(a=>a.start))).map(([a,o])=>_te(e,t,yte(i,a),a,o))}function bte(e,r){return vF(e,r).map(t=>t.text)}function wte(e,r,t){return vF(e,t).map(i=>[i.text,i.sourceIndices.map(a=>{var o;return(o=r[a])!=null?o:0})])}function Tte(e,r,t){let i=t.buf,a,o;if(o=i[t.pos++],a=(o&112)>>4,o<128||(o=i[t.pos++],a|=(o&127)<<3,o<128)||(o=i[t.pos++],a|=(o&127)<<10,o<128)||(o=i[t.pos++],a|=(o&127)<<17,o<128)||(o=i[t.pos++],a|=(o&127)<<24,o<128)||(o=i[t.pos++],a|=(o&1)<<31,o<128))return Ate(e,a,r);throw Error("Expected varint not more than 10 bytes")}function Ate(e,r,t){return t?r*4294967296+(e>>>0):(r>>>0)*4294967296+(e>>>0)}function Mte(e,r,t){let i="",a=r;for(;a<t;){let o=e[a],s=null,l=o>239?4:o>223?3:o>191?2:1;if(a+l>t)break;let n,u,c;l===1?o<128&&(s=o):l===2?(n=e[a+1],(n&192)==128&&(s=(o&31)<<6|n&63,s<=127&&(s=null))):l===3?(n=e[a+1],u=e[a+2],(n&192)==128&&(u&192)==128&&(s=(o&15)<<12|(n&63)<<6|u&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):l===4&&(n=e[a+1],u=e[a+2],c=e[a+3],(n&192)==128&&(u&192)==128&&(c&192)==128&&(s=(o&15)<<18|(n&63)<<12|(u&63)<<6|c&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,l=1):s>65535&&(s-=65536,i+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),i+=String.fromCharCode(s),a+=l}return i}function Ste(e,r,t){e===1&&t.readMessage(Ete,r)}function Ete(e,r,t){if(e===3){let{id:i,bitmap:a,width:o,height:s,left:l,top:n,advance:u}=t.readMessage(kte,{});r.push({id:i,bitmap:new vb({width:o+6,height:s+6},a),metrics:{width:o,height:s,left:l,top:n,advance:u}})}}function kte(e,r,t){e===1?r.id=t.readVarint():e===2?r.bitmap=t.readBytes():e===3?r.width=t.readVarint():e===4?r.height=t.readVarint():e===5?r.left=t.readSVarint():e===6?r.top=t.readSVarint():e===7&&(r.advance=t.readVarint())}function Cte(e){return new _A(e).readFields(Ste,[])}function ux(e){return typeof e?.renderWithWebGL=="function"}function Dte(e){let{userImage:r}=e;return!r?.render||!r.render()?!1:(ux(r.data)||e.data.replace(new Uint8Array(r.data.buffer)),!0)}function mF(e){let r=0,t=0;for(let s of e)r+=s.w*s.h,t=Math.max(t,s.w);e.sort((s,l)=>l.h-s.h);let i=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(r/.95)),t),h:1/0}],a=0,o=0;for(let s of e)for(let l=i.length-1;l>=0;l--){let n=i[l];if(!(s.w>n.w||s.h>n.h)){if(s.x=n.x,s.y=n.y,o=Math.max(o,s.y+s.h),a=Math.max(a,s.x+s.w),s.w===n.w&&s.h===n.h){let u=i.pop();u&&l<i.length&&(i[l]=u)}else s.h===n.h?(n.x+=s.w,n.w-=s.w):s.w===n.w?(n.y+=s.h,n.h-=s.h):(i.push({x:n.x+s.w,y:n.y,w:n.w-s.w,h:s.h}),n.y+=s.h,n.h-=s.h);break}}return{w:a,h:o,fill:r/(a*o)||0}}function Lte(e){for(let r of e)if(r.positionedGlyphs.length!==0)return!1;return!0}function Fte(e,r){let t=[],i=0;for(let a of r)t.push(e.substring(i,a)),i=a;return i<e.length()&&t.push(e.substring(i,e.length())),t}function Pte(e){let r=[],t=0;for(;t<e.length;){if(!bA.test(e[t])){r.push(t),t++;continue}let i=t;for(;i<e.length&&bA.test(e[i]);)i++;let a=e[i];if(a!==void 0&&lF(a.codePointAt(0))){r.push(i);for(let o=i-1;o>=t;o--)r.push(o);t=i+1}else{for(let o=t;o<i;o++)r.push(o);t=i}}return r}function Ite(e){let r=[],t=0;for(let i of e.graphemes())r.push(...Array(i.length).fill(e.sectionIndex[t])),t++;return r}function Rte(e,r){let t=r.map(o=>e.toCodeUnitIndex(o)),i=Fg.isParsed()?Fg:null;if(e.sections.length===1)return i?i.processBidirectionalText(e.toString(),t).map(o=>yF(o,e.sections,[...o].map(()=>0))):bte(e.toString(),t).map(o=>V6([...o],e.sections,[...o].map(()=>0)));let a=Ite(e);return i?i.processStyledBidirectionalText(e.text,a,t).map(([o,s])=>yF(o,e.sections,s)):wte(e.text,a,t).map(([o,s])=>{let l=[...o];return V6(l,e.sections,gF(l).map(n=>{var u;return(u=s[n])!=null?u:0}))})}function V6(e,r,t){var i;let a=new Db(e.join(""),r,[]),o=0;for(let s of a.graphemes())a.sectionIndex.push((i=t[o])!=null?i:0),o+=[...s].length;return a}function gF(e){let r=[],t=0;for(let i of e)r.push(t),t+=i.length;return r}function yF(e,r,t){let i=[...e],a=gF(i),o=Pte(i);return V6(o.map(s=>i[s]),r,o.map(s=>{var l;return(l=t[a[s]])!=null?l:0}))}function cx(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p){let g=Db.fromFeature(e,a);f===2&&g.verticalizePunctuation();let m=g.determineLineBreaks(u,o,r,i,d),y=uF(g.text)?Rte(g,m):Fte(g,m),_=[],v={positionedLines:_,text:g.toString(),top:c[1],bottom:c[1],left:c[0],right:c[0],writingMode:f,iconsInText:!1,verticalizable:!1};return Gte(v,r,t,i,y,s,l,n,f,u,h,p),!Lte(_)&&v}function fx(e){let r=.5,t=.5;switch(e){case"right":case"top-right":case"bottom-right":r=1;break;case"left":case"top-left":case"bottom-left":r=0}switch(e){case"bottom":case"bottom-right":case"bottom-left":t=1;break;case"top":case"top-right":case"top-left":t=0}return{horizontalAlign:r,verticalAlign:t}}function zte(e,r,t){let i=r.getMaxScale()*24,{maxImageWidth:a,maxImageHeight:o}=r.getMaxImageSize(e),s=Math.max(i,o*t);return{verticalLineContentWidth:Math.max(i,a*t),horizontalLineContentHeight:s}}function _F(e){switch(e){case"top":return 0;case"center":return .5;default:return 1}}function Bte(e,r,t,i){var a;if(e?.rect)return e;let o=(a=r[t.fontStack])==null?void 0:a[i];return o?{rect:null,metrics:o.metrics}:null}function Ote(e,r,t){return!(e===1||!r&&!sx(t)||r&&(U6(t)||sF(t)))}function hx(e){return new RegExp("\\p{Nd}","u").test(String.fromCodePoint(e))}function xF(e){return new RegExp("\\p{Lu}","u").test(String.fromCodePoint(e))}function Nte(e){return/[\p{P}\p{S}]/u.test(String.fromCodePoint(e))}function jte(e){let r=e.some(hx)&&e.every(i=>hx(i)||Nte(i)),t=e.length<=3&&e.every(i=>xF(i)||hx(i));return r||t}function Ute(e){return(hx(e)||xF(e))&&!sF(e)}function qte(e,r){let t=!1;for(let i=0;i<e.length;i++){if(r[i])continue;let a=X0[e[i]];a&&(i===0||r[i-1])&&(i===e.length-1||r[i+1])&&(e[i]=a,r[i]=!0,t=!0)}return t}function Vte(e){let r=e.graphemes().slice(),t=r.map(o=>o.codePointAt(0)),i=t.map(sx),a=o=>!i[o]&&!U6(t[o])&&!("imageName"in e.getSection(o));for(let o=0;o<t.length;o++){if(!a(o))continue;let s=o;for(;s+1<t.length&&a(s+1);)s++;if(jte(t.slice(o,s+1)))for(let l=o;l<=s;l++)i[l]=Ute(t[l]);o=s}return qte(r,i)&&(e.text=r.join(""),e._graphemes=null),i}function Gte(e,r,t,i,a,o,s,l,n,u,c,f){var h;let d=0,p=0,g=0,m=0,y=l==="right"?1:l==="left"?0:.5,_=24/f,v=0;for(let M of a){M.trim();let C=M.getMaxScale(),w={positionedGlyphs:[],lineOffset:0};e.positionedLines[v]=w;let k=w.positionedGlyphs,A=0;if(!M.length()){p+=o,++v;continue}let b=zte(i,M,_),E=n===2&&!c?Vte(M):null,T=M.graphemes();for(let R=0;R<T.length;R++){let P=M.getSection(R),z=T[R],I=z.codePointAt(0),L=E?E[R]:Ote(n,c,I),B="fontStack"in P&&lx(z)&&!((h=r[P.fontStack])!=null&&h[z])?[...z]:[z];for(let O of B){let G={glyph:O.codePointAt(0),grapheme:O,imageName:null,x:d,y:p+-17,vertical:L,scale:1,fontStack:"",sectionIndex:M.getSectionIndex(R),metrics:null,rect:null},W;if("fontStack"in P){if(W=Hte(P,O,L,b,r,t),!W)continue;G.fontStack=P.fontStack}else{if(e.iconsInText=!0,P.scale*=_,W=$te(P,L,C,b,i),!W)continue;A=Math.max(A,W.imageOffset),G.imageName=P.imageName}let{rect:X,metrics:Z,baselineOffset:J}=W;if(G.y+=J,G.scale=P.scale,G.metrics=Z,G.rect=X,k.push(G),!L)d+=Z.advance*P.scale+u;else{e.verticalizable=!0;let N="imageName"in P?Z.advance:24;d+=N*P.scale+u}}}if(k.length!==0){let R=d-u;g=Math.max(R,g),Wte(k,0,k.length-1,y)}d=0;let F=(C-1)*24;w.lineOffset=Math.max(A,F);let D=o*C+A;p+=D,m=Math.max(D,m),++v}let{horizontalAlign:x,verticalAlign:S}=fx(s);Yte(e.positionedLines,y,x,S,g,m,o,p,a.length),e.top+=-S*p,e.bottom=e.top+p,e.left+=-x*g,e.right=e.left+g}function Hte(e,r,t,i,a,o){var s;let l=(s=o[e.fontStack])==null?void 0:s[r],n=Bte(l,a,e,r);if(n===null)return null;let u;if(t)u=i.verticalLineContentWidth-e.scale*24;else{let c=_F(e.verticalAlign);u=(i.horizontalLineContentHeight-e.scale*24)*c}return{rect:n.rect,metrics:n.metrics,baselineOffset:u}}function $te(e,r,t,i,a){let o=a[e.imageName];if(!o)return null;let s=o.paddedRect,l=o.displaySize,n={width:l[0],height:l[1],left:1,top:-3,advance:r?l[1]:l[0]},u;if(r)u=i.verticalLineContentWidth-l[1]*e.scale;else{let f=_F(e.verticalAlign);u=(i.horizontalLineContentHeight-l[1]*e.scale)*f}let c=(r?l[0]:l[1])*e.scale-24*t;return{rect:s,metrics:n,baselineOffset:u,imageOffset:c}}function Wte(e,r,t,i){if(i===0)return;let a=e[t],o=a.metrics.advance*a.scale,s=(e[t].x+o)*i;for(let l=r;l<=t;l++)e[l].x-=s}function Yte(e,r,t,i,a,o,s,l,n){let u=(r-t)*a,c=0;c=o===s?-i*n*s+.5*s:-l*i- -17;for(let f of e)for(let h of f.positionedGlyphs)h.x+=u,h.y+=c}function Xte(e,r,t){let{horizontalAlign:i,verticalAlign:a}=fx(t),o=r[0],s=r[1],l=o-e.displaySize[0]*i,n=l+e.displaySize[0],u=s-e.displaySize[1]*a;return{image:e,top:u,bottom:u+e.displaySize[1],left:l,right:n}}function bF(e){var r,t;let i=e.left,a=e.top,o=e.right-i,s=e.bottom-a,l=e.image.content[2]-e.image.content[0],n=e.image.content[3]-e.image.content[1],u=(r=e.image.textFitWidth)!=null?r:"stretchOrShrink",c=(t=e.image.textFitHeight)!=null?t:"stretchOrShrink",f=l/n;if(c==="proportional"){if(u==="stretchOnly"&&o/s<f||u==="proportional"){let h=Math.ceil(s*f);i*=h/o,o=h}}else if(u==="proportional"&&c==="stretchOnly"&&f!==0&&o/s>f){let h=Math.ceil(o/f);a*=h/s,s=h}return{x1:i,y1:a,x2:i+o,y2:a+s}}function wF(e,r,t,i,a,o){let s=e.image,l;if(s.content){let m=s.content,y=s.pixelRatio||1;l=[m[0]/y,m[1]/y,s.displaySize[0]-m[2]/y,s.displaySize[1]-m[3]/y]}let n=r.left*o,u=r.right*o,c,f,h,d;t==="width"||t==="both"?(d=a[0]+n-i[3],f=a[0]+u+i[1]):(d=a[0]+(n+u-s.displaySize[0])/2,f=d+s.displaySize[0]);let p=r.top*o,g=r.bottom*o;return t==="height"||t==="both"?(c=a[1]+p-i[0],h=a[1]+g+i[2]):(c=a[1]+(p+g-s.displaySize[1])/2,h=c+s.displaySize[1]),{image:s,top:c,right:f,bottom:h,left:d,collisionPadding:l}}function TF(e,r){let{expression:t}=r;if(t.kind==="constant")return{kind:"constant",layoutSize:t.evaluate(new ns(e+1))};if(t.kind==="source")return{kind:"source"};if(t.kind==="composite"){let{minZoom:i,maxZoom:a}=Zte(t.zoomStops,e);return{kind:"composite",minZoom:i,maxZoom:a,interpolationType:t.interpolationType}}{let i=Kte(t),a=t.evaluate(new ns(e+1));return{kind:"camera",zoomStops:t.zoomStops,sizes:i,layoutSize:a,interpolationType:t.interpolationType}}}function Zte(e,r){let t=0;for(;t<e.length&&e[t]<=r;)t++;t=Math.max(0,t-1);let i=t;for(;i<e.length&&e[i]<r+1;)i++;return i=Math.min(e.length-1,i),{minZoom:e[t],maxZoom:e[i]}}function Kte(e){return e.zoomStops.map(r=>e.evaluate(new ns(r===-1/0?e.zoomStops[1]-1:r)))}function G6(e,{uSize:r,uSizeT:t},{lowerSize:i,upperSize:a}){return e.kind==="source"?i/128:e.kind==="composite"?Zs.number(i/128,a/128,t):r}function dx(e,r){let t=0,i=0;return e.kind==="constant"?i=e.layoutSize:e.kind==="camera"?i=Jte(e,r):e.kind==="composite"&&(t=Qte(e,r)),{uSizeT:t,uSize:i}}function Jte({zoomStops:e,sizes:r,layoutSize:t,interpolationType:i},a){let o=e.length-1;for(;o>0&&e[o]>a;)o--;let s=Math.min(o+1,e.length-1),l=i?to(Rf.interpolationFactor(i,a,e[o],e[s]),0,1):0;return Math.min(Zs.number(r[o],r[s],l),t)}function Qte({interpolationType:e,minZoom:r,maxZoom:t},i){return e?to(Rf.interpolationFactor(e,i,r,t),0,1):0}function AF(e,r,t,i,a){if(r.segment===void 0||t===0)return!0;let o=r,s=r.segment+1,l=0;for(;l>-t/2;){if(s--,s<0)return!1;l-=e[s].dist(o),o=e[s]}l+=e[s].dist(e[s+1]),s++;let n=[],u=0;for(;l<t/2;){let c=e[s-1],f=e[s],h=e[s+1];if(!h)return!1;let d=c.angleTo(f)-f.angleTo(h);for(d=Math.abs((d+3*Math.PI)%(Math.PI*2)-Math.PI),n.push({distance:l,angleDelta:d}),u+=d;l-n[0].distance>i;)u-=n.shift().angleDelta;if(u>a)return!1;s++,l+=f.dist(h)}return!0}function MF(e){let r=0;for(let t=0;t<e.length-1;t++)r+=e[t].dist(e[t+1]);return r}function SF(e,r,t){return e?.6*r*t:0}function EF(e,r){return Math.max(e?e.right-e.left:0,r?r.right-r.left:0)}function ere(e,r,t,i,a,o){let s=SF(t,a,o),l=EF(t,i)*o,n=0,u=MF(e)/2;for(let c=0;c<e.length-1;c++){let f=e[c],h=e[c+1],d=f.dist(h);if(n+d>u){let p=(u-n)/d,g=new Z0(Zs.number(f.x,h.x,p),Zs.number(f.y,h.y,p),h.angleTo(f),c);return g._round(),!s||AF(e,g,l,s,r)?g:void 0}n+=d}}function tre(e,r,t,i,a,o,s,l,n){let u=SF(i,o,s),c=EF(i,a),f=c*s,h=e[0].x===0||e[0].x===n||e[0].y===0||e[0].y===n;r-f<r/4&&(r=f+r/4);let d=o*2;return kF(e,h?r/2*l%r:(c/2+d)*s*l%r,r,u,t,f,h,!1,n)}function kF(e,r,t,i,a,o,s,l,n){let u=o/2,c=MF(e),f=0,h=r-t,d=[];for(let p=0;p<e.length-1;p++){let g=e[p],m=e[p+1],y=g.dist(m),_=m.angleTo(g);for(;h+t<f+y;){h+=t;let v=(h-f)/y,x=Zs.number(g.x,m.x,v),S=Zs.number(g.y,m.y,v);if(x>=0&&x<n&&S>=0&&S<n&&h-u>=0&&h+u<=c){let M=new Z0(x,S,_,p);M._round(),(!i||AF(e,M,o,i,a))&&d.push(M)}}f+=y}return!l&&!d.length&&!s&&(d=kF(e,f/2,t,i,a,o,s,!0,n)),d}function CF(e,r,t,i,a){let o=[];for(let s of e){let l;for(let n=0;n<s.length-1;n++){let u=s[n],c=s[n+1];u.x<r&&c.x<r||(u.x<r?u=new Wr(r,u.y+(c.y-u.y)*((r-u.x)/(c.x-u.x)))._round():c.x<r&&(c=new Wr(r,u.y+(c.y-u.y)*((r-u.x)/(c.x-u.x)))._round()),!(u.y<t&&c.y<t)&&(u.y<t?u=new Wr(u.x+(c.x-u.x)*((t-u.y)/(c.y-u.y)),t)._round():c.y<t&&(c=new Wr(u.x+(c.x-u.x)*((t-u.y)/(c.y-u.y)),t)._round()),!(u.x>=i&&c.x>=i)&&(u.x>=i?u=new Wr(i,u.y+(c.y-u.y)*((i-u.x)/(c.x-u.x)))._round():c.x>=i&&(c=new Wr(i,u.y+(c.y-u.y)*((i-u.x)/(c.x-u.x)))._round()),!(u.y>=a&&c.y>=a)&&(u.y>=a?u=new Wr(u.x+(c.x-u.x)*((a-u.y)/(c.y-u.y)),a)._round():c.y>=a&&(c=new Wr(u.x+(c.x-u.x)*((a-u.y)/(c.y-u.y)),a)._round()),(!l||!u.equals(l[l.length-1]))&&(l=[u],o.push(l)),l.push(c)))))}}return o}function DF(e,r,t,i){let a=[],o=e.image,s=o.pixelRatio,l=o.paddedRect.w-2,n=o.paddedRect.h-2,u={x1:e.left,y1:e.top,x2:e.right,y2:e.bottom},c=o.stretchX||[[0,l]],f=o.stretchY||[[0,n]],h=(F,D)=>F+D[1]-D[0],d=c.reduce(h,0),p=f.reduce(h,0),g=l-d,m=n-p,y=0,_=d,v=0,x=p,S=0,M=g,C=0,w=m;if(o.content&&i){let F=o.content,D=F[2]-F[0],R=F[3]-F[1];(o.textFitWidth||o.textFitHeight)&&(u=bF(e)),y=px(c,0,F[0]),v=px(f,0,F[1]),_=px(c,F[0],F[2]),x=px(f,F[1],F[3]),S=F[0]-y,C=F[1]-v,M=D-_,w=R-x}let k=u.x1,A=u.y1,b=u.x2-k,E=u.y2-A,T=(F,D,R,P)=>{let z=vx(F.stretch-y,_,b,k),I=mx(F.fixed-S,M,F.stretch,d),L=vx(D.stretch-v,x,E,A),B=mx(D.fixed-C,w,D.stretch,p),O=vx(R.stretch-y,_,b,k),G=mx(R.fixed-S,M,R.stretch,d),W=vx(P.stretch-v,x,E,A),X=mx(P.fixed-C,w,P.stretch,p),Z=new Wr(z,L),J=new Wr(O,L),N=new Wr(O,W),H=new Wr(z,W),$=new Wr(I/s,B/s),U=new Wr(G/s,X/s),V=r*Math.PI/180;if(V){let te=Math.sin(V),ne=Math.cos(V),se=[ne,-te,te,ne];Z._matMult(se),J._matMult(se),H._matMult(se),N._matMult(se)}let j=F.stretch+F.fixed,q=R.stretch+R.fixed,Y=D.stretch+D.fixed,K=P.stretch+P.fixed;return{tl:Z,tr:J,bl:H,br:N,tex:{x:o.paddedRect.x+1+j,y:o.paddedRect.y+1+Y,w:q-j,h:K-Y},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:$,pixelOffsetBR:U,minFontScaleX:M/s/b,minFontScaleY:w/s/E,isSDF:t}};if(!i||!o.stretchX&&!o.stretchY)a.push(T({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:l+1},{fixed:0,stretch:n+1}));else{let F=LF(c,g,d),D=LF(f,m,p);for(let R=0;R<F.length-1;R++){let P=F[R],z=F[R+1];for(let I=0;I<D.length-1;I++){let L=D[I],B=D[I+1];a.push(T(P,L,z,B))}}}return a}function px(e,r,t){let i=0;for(let a of e)i+=Math.max(r,Math.min(t,a[1]))-Math.max(r,Math.min(t,a[0]));return i}function LF(e,r,t){let i=[{fixed:-1,stretch:0}];for(let[a,o]of e){let s=i[i.length-1];i.push({fixed:a-s.stretch,stretch:s.stretch}),i.push({fixed:a-s.stretch,stretch:s.stretch+(o-a)})}return i.push({fixed:r+1,stretch:t}),i}function vx(e,r,t,i){return e/r*t+i}function mx(e,r,t,i){return e-r*t/i}function rre(e,r,t,i,a,o,s,l){let n=i.layout.get("text-rotate").evaluate(o,{})*Math.PI/180,u=[];for(let c of r.positionedLines)for(let f of c.positionedGlyphs){if(!f.rect)continue;let h=f.rect||{},d=4,p=!0,g=1,m=0,y=(a||l)&&f.vertical,_=f.metrics.advance*f.scale/2;if(l&&r.verticalizable){let P=(f.scale-1)*24,z=(24-f.metrics.width*f.scale)/2;m=c.lineOffset/2-(f.imageName?-z:P)}if(f.imageName){let P=s[f.imageName];p=P.sdf,g=P.pixelRatio,d=1/g}let v=a?[f.x+_,f.y]:[0,0],x=a?[0,0]:[f.x+_+t[0],f.y+t[1]-m],S=[0,0];y&&(S=x,x=[0,0]);let M=f.metrics.isDoubleResolution?2:1,C=(f.metrics.left-d)*f.scale-_+x[0],w=(-f.metrics.top-d)*f.scale+x[1],k=C+h.w/M*f.scale/g,A=w+h.h/M*f.scale/g,b=new Wr(C,w),E=new Wr(k,w),T=new Wr(C,A),F=new Wr(k,A);if(y){let P=new Wr(-_,_- -17),z=-Math.PI/2,I=12-_,L=f.imageName?I:0,B=new Wr(22-I,-L),O=new Wr(...S);b._rotateAround(z,P)._add(B)._add(O),E._rotateAround(z,P)._add(B)._add(O),T._rotateAround(z,P)._add(B)._add(O),F._rotateAround(z,P)._add(B)._add(O)}if(n){let P=Math.sin(n),z=Math.cos(n),I=[z,-P,P,z];b._matMult(I),E._matMult(I),T._matMult(I),F._matMult(I)}let D=new Wr(0,0),R=new Wr(0,0);u.push({tl:b,tr:E,bl:T,br:F,tex:h,writingMode:r.writingMode,glyphOffset:v,sectionIndex:f.sectionIndex,isSDF:p,pixelOffsetTL:D,pixelOffsetBR:R,minFontScaleX:0,minFontScaleY:0})}return u}function ire(e,r=1){let t=gh.fromPoints(e[0]),i=Math.min(t.width(),t.height()),a=i/2,o=new $R([],are),{minX:s,minY:l,maxX:n,maxY:u}=t;if(i===0)return new Wr(s,l);for(let h=s;h<n;h+=i)for(let d=l;d<u;d+=i)o.push(new K0(h+a,d+a,a,e));let c=ore(e),f=c;for(;o.length;){let h=o.pop();(h.d>f.d||!f.d)&&(f=h),!(h.max-f.d<=r)&&(a=h.h/2,o.push(new K0(h.p.x-a,h.p.y-a,a,e)),o.push(new K0(h.p.x+a,h.p.y-a,a,e)),o.push(new K0(h.p.x-a,h.p.y+a,a,e)),o.push(new K0(h.p.x+a,h.p.y+a,a,e)))}return c.d>0&&f.d-c.d<=r?c.p:f.p}function are(e,r){return r.max-e.max}function nre(e,r){let t=!1,i=1/0;for(let a of r)for(let o=0,s=a.length,l=s-1;o<s;l=o++){let n=a[o],u=a[l];n.y>e.y!=u.y>e.y&&e.x<(u.x-n.x)*(e.y-n.y)/(u.y-n.y)+n.x&&(t=!t),i=Math.min(i,RL(e,n,u))}return(t?1:-1)*Math.sqrt(i)}function ore(e){let r=0,t=0,i=0,a=e[0];for(let o=0,s=a.length,l=s-1;o<s;l=o++){let n=a[o],u=a[l],c=n.x*u.y-u.x*n.y;t+=(n.x+u.x)*c,i+=(n.y+u.y)*c,r+=c*3}return new K0(t/r,i/r,0,e)}function FF(e,r){function t(a,o){let s=0,l=0;o<0&&(o=0);let n=o/Math.SQRT2;switch(a){case"top-right":case"top-left":l=n-7;break;case"bottom-right":case"bottom-left":l=-n+7;break;case"bottom":l=-o+7;break;case"top":l=o-7}switch(a){case"top-right":case"bottom-right":s=-n;break;case"top-left":case"bottom-left":s=n;break;case"left":s=o;break;case"right":s=-o}return[s,l]}function i(a,o,s){let l=0,n=0;switch(o=Math.abs(o),s=Math.abs(s),a){case"top-right":case"top-left":case"top":n=s-7;break;case"bottom-right":case"bottom-left":case"bottom":n=-s+7}switch(a){case"top-right":case"bottom-right":case"right":l=-o;break;case"top-left":case"bottom-left":case"left":l=o}return[l,n]}return r[1]===Rb?t(e,r[0]):i(e,r[0],r[1])}function PF(e,r,t){var i;let a=e.layout,o=(i=a.get("text-variable-anchor-offset"))==null?void 0:i.evaluate(r,{},t);if(o){let l=o.values,n=[];for(let u=0;u<l.length;u+=2){let c=n[u]=l[u],f=l[u+1].map(h=>h*24);c.startsWith("top")?f[1]-=7:c.startsWith("bottom")&&(f[1]+=7),n[u+1]=f}return new Zh(n)}let s=a.get("text-variable-anchor");if(s){let l;l=e._unevaluatedLayout.getValue("text-radial-offset")===void 0?a.get("text-offset").evaluate(r,{},t).map(u=>u*24):[a.get("text-radial-offset").evaluate(r,{},t)*24,Rb];let n=[];for(let u of s)n.push(u,FF(u,l));return new Zh(n)}return null}function sre(e){var r,t;e.bucket.createArrays();let i=512*e.bucket.overscaling;e.bucket.tilePixelRatio=Bi/i,e.bucket.compareText={},e.bucket.iconsNeedLinear=!1;let a=e.bucket.layers[0],o=a.layout,s=a._unevaluatedLayout._values,l={layoutIconSize:s["icon-size"].possiblyEvaluate(new ns(e.bucket.zoom+1),e.canonical),layoutTextSize:s["text-size"].possiblyEvaluate(new ns(e.bucket.zoom+1),e.canonical),textMaxSize:s["text-size"].possiblyEvaluate(new ns(18))};if(e.bucket.textSizeData.kind==="composite"){let{minZoom:h,maxZoom:d}=e.bucket.textSizeData;l.compositeTextSizes=[s["text-size"].possiblyEvaluate(new ns(h),e.canonical),s["text-size"].possiblyEvaluate(new ns(d),e.canonical)]}if(e.bucket.iconSizeData.kind==="composite"){let{minZoom:h,maxZoom:d}=e.bucket.iconSizeData;l.compositeIconSizes=[s["icon-size"].possiblyEvaluate(new ns(h),e.canonical),s["icon-size"].possiblyEvaluate(new ns(d),e.canonical)]}let n=o.get("text-line-height")*24,u=o.get("text-rotation-alignment")!=="viewport"&&o.get("symbol-placement")!=="point",c=o.get("text-keep-upright"),f=o.get("text-size");for(let h of e.bucket.features){let d=o.get("text-font").evaluate(h,{},e.canonical).join(","),p=f.evaluate(h,{},e.canonical),g=l.layoutTextSize.evaluate(h,{},e.canonical),m=l.layoutIconSize.evaluate(h,{},e.canonical),y={horizontal:{},vertical:void 0},_=h.text,v=[0,0];if(_){let C=_.toString(),w=o.get("text-letter-spacing").evaluate(h,{},e.canonical)*24,k=ute(C)?w:0,A=o.get("text-anchor").evaluate(h,{},e.canonical),b=PF(a,h,e.canonical);if(!b){let D=o.get("text-radial-offset").evaluate(h,{},e.canonical);v=D?FF(A,[D*24,Rb]):o.get("text-offset").evaluate(h,{},e.canonical).map(R=>R*24)}let E=u?"center":o.get("text-justify").evaluate(h,{},e.canonical),T=o.get("symbol-placement")==="point"?o.get("text-max-width").evaluate(h,{},e.canonical)*24:1/0,F=()=>{e.bucket.allowVerticalPlacement&&q6(C)&&(y.vertical=cx(_,e.glyphMap,e.glyphPositions,e.imagePositions,d,T,n,A,"left",k,v,2,!0,g,p))};if(!u&&b){let D=new Set;if(E==="auto")for(let P=0;P<b.values.length;P+=2)D.add(H6(b.values[P]));else D.add(E);let R=!1;for(let P of D)if(!y.horizontal[P])if(R)y.horizontal[P]=y.horizontal[0];else{let z=cx(_,e.glyphMap,e.glyphPositions,e.imagePositions,d,T,n,"center",P,k,v,1,!1,g,p);z&&(y.horizontal[P]=z,R=z.positionedLines.length===1)}F()}else{E==="auto"&&(E=H6(A));let D=cx(_,e.glyphMap,e.glyphPositions,e.imagePositions,d,T,n,A,E,k,v,1,!1,g,p);D&&(y.horizontal[E]=D),F(),q6(C)&&u&&c&&(y.vertical=cx(_,e.glyphMap,e.glyphPositions,e.imagePositions,d,T,n,A,E,k,v,2,!1,g,p))}}let x,S=!1;if((r=h.icon)!=null&&r.name){let C=e.imageMap[h.icon.name];C&&(x=Xte(e.imagePositions[h.icon.name],o.get("icon-offset").evaluate(h,{},e.canonical),o.get("icon-anchor").evaluate(h,{},e.canonical)),S=!!C.sdf,e.bucket.sdfIcons===void 0?e.bucket.sdfIcons=S:e.bucket.sdfIcons!==S&&To("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),C.pixelRatio===e.bucket.pixelRatio?o.get("icon-rotate").constantOr(1)!==0&&(e.bucket.iconsNeedLinear=!0):e.bucket.iconsNeedLinear=!0)}let M=RF(y.horizontal)||y.vertical;(t=e.bucket).iconsInText||(t.iconsInText=M?M.iconsInText:!1),(M||x)&&lre(e.bucket,h,y,x,e.imageMap,l,g,m,v,S,e.canonical,e.subdivisionGranularity)}e.showCollisionBoxes&&e.bucket.generateCollisionDebugBuffers()}function H6(e){switch(e){case"right":case"top-right":case"bottom-right":return"right";case"left":case"top-left":case"bottom-left":return"left"}return"center"}function lre(e,r,t,i,a,o,s,l,n,u,c,f){let h=o.textMaxSize.evaluate(r,{});h===void 0&&(h=s);let d=e.layers[0].layout,p=d.get("icon-offset").evaluate(r,{},c),g=RF(t.horizontal),m=s/24,y=e.tilePixelRatio*m,_=e.tilePixelRatio*h/24,v=e.tilePixelRatio*l,x=e.tilePixelRatio*d.get("symbol-spacing"),S=d.get("text-padding")*e.tilePixelRatio,M=pre(d,r,c,e.tilePixelRatio),C=d.get("text-max-angle")/180*Math.PI,w=d.get("text-rotation-alignment")!=="viewport"&&d.get("symbol-placement")!=="point",k=d.get("icon-rotation-alignment").constantOr("viewport")==="map"&&d.get("symbol-placement")!=="point",A=d.get("symbol-placement"),b=x/2,E=d.get("icon-text-fit"),T;i&&E!=="none"&&(e.allowVerticalPlacement&&t.vertical&&(T=wF(i,t.vertical,E,d.get("icon-text-fit-padding"),p,m)),g&&(i=wF(i,g,E,d.get("icon-text-fit-padding"),p,m)));let F=c?f.line.getGranularityForZoomLevel(c.z):1,D=(R,P)=>{P.x<0||P.x>=8192||P.y<0||P.y>=8192||cre(e,P,R,t,i,a,T,e.layers[0],e.collisionBoxArray,r.index,r.sourceLayerIndex,e.index,y,[S,S,S,S],w,n,v,M,k,p,r,o,u,c,s)};if(A==="line")for(let R of CF(r.geometry,0,0,Bi,Bi)){let P=U0(R,F),z=tre(P,x,C,t.vertical||g,i,24,_,e.overscaling,Bi);for(let I of z){let L=g;(!L||!fre(e,L.text,b,I))&&D(P,I)}}else if(A==="line-center"){for(let R of r.geometry)if(R.length>1){let P=U0(R,F),z=ere(P,C,t.vertical||g,i,24,_);z&&D(P,z)}}else if(r.type==="Polygon")for(let R of z_(r.geometry,0)){let P=ire(R,16);D(U0(R[0],F,!0),new Z0(P.x,P.y,0))}else if(r.type==="LineString")for(let R of r.geometry){let P=U0(R,F);D(P,new Z0(P[0].x,P[0].y,0))}else if(r.type==="Point")for(let R of r.geometry)for(let P of R)D([P],new Z0(P.x,P.y,0))}function ure(e,r){let t=e.length,i=r?.values;if(i?.length>0)for(let a=0;a<i.length;a+=2){let o=Ib[i[a]],s=i[a+1];e.emplaceBack(o,s[0],s[1])}return[t,e.length]}function IF(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g){let m=rre(r,t,l,a,o,s,i,e.allowVerticalPlacement),y=e.textSizeData,_=null;y.kind==="source"?(_=[128*a.layout.get("text-size").evaluate(s,{})],_[0]>32640&&To(`${e.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)):y.kind==="composite"&&(_=[128*p.compositeTextSizes[0].evaluate(s,{},g),128*p.compositeTextSizes[1].evaluate(s,{},g)],(_[0]>32640||_[1]>32640)&&To(`${e.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)),e.addSymbols(e.text,m,_,l,o,s,c,r,u.lineStartIndex,u.lineLength,d,g,n);for(let v of f)h[v]=e.text.placedSymbolArray.length-1;return m.length*4}function RF(e){for(let r in e)return e[r];return null}function cre(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_,v,x,S,M,C,w){let k=e.addToLineVertexArray(r,t),A=l.layout.get("symbol-height-offset").evaluate(x,{},C);A>e.maxHeightOffset&&(e.maxHeightOffset=A);let b,E,T,F,D=0,R=0,P=0,z=0,I=-1,L=-1,B={},O=(0,hb.default)("");if(e.allowVerticalPlacement&&i.vertical){let ne=l.layout.get("text-rotate").evaluate(x,{},C)+90,se=i.vertical;T=new Pg(n,r,u,c,f,se,h,d,p,ne),s&&(F=new Pg(n,r,u,c,f,s,m,y,p,ne))}if(a){let ne=l.layout.get("icon-rotate").evaluate(x,{}),se=l.layout.get("icon-text-fit")!=="none",le=DF(a,ne,M,se),ce=s?DF(s,ne,M,se):void 0;E=new Pg(n,r,u,c,f,a,m,y,!1,ne),D=le.length*4;let pe=e.iconSizeData,xe=null;pe.kind==="source"?(xe=[128*l.layout.get("icon-size").evaluate(x,{})],xe[0]>32640&&To(`${e.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)):pe.kind==="composite"&&(xe=[128*S.compositeIconSizes[0].evaluate(x,{},C),128*S.compositeIconSizes[1].evaluate(x,{},C)],(xe[0]>32640||xe[1]>32640)&&To(`${e.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)),e.addSymbols(e.icon,le,xe,v,_,x,0,r,k.lineStartIndex,k.lineLength,-1,C,A),I=e.icon.placedSymbolArray.length-1,ce&&(R=ce.length*4,e.addSymbols(e.icon,ce,xe,v,_,x,2,r,k.lineStartIndex,k.lineLength,-1,C,A),L=e.icon.placedSymbolArray.length-1)}let G=Object.keys(i.horizontal);for(let ne of G){let se=i.horizontal[ne];b||(b=(O=(0,hb.default)(se.text),new Pg(n,r,u,c,f,se,h,d,p,l.layout.get("text-rotate").evaluate(x,{},C))));let le=se.positionedLines.length===1;if(P+=IF(e,r,se,o,l,p,x,g,A,k,i.vertical?1:3,le?G:[ne],B,I,S,C),le)break}i.vertical&&(z+=IF(e,r,i.vertical,o,l,p,x,g,A,k,2,["vertical"],B,L,S,C));let W=b?b.boxStartIndex:e.collisionBoxArray.length,X=b?b.boxEndIndex:e.collisionBoxArray.length,Z=T?T.boxStartIndex:e.collisionBoxArray.length,J=T?T.boxEndIndex:e.collisionBoxArray.length,N=E?E.boxStartIndex:e.collisionBoxArray.length,H=E?E.boxEndIndex:e.collisionBoxArray.length,$=F?F.boxStartIndex:e.collisionBoxArray.length,U=F?F.boxEndIndex:e.collisionBoxArray.length,V=-1,j=(ne,se)=>ne?.circleDiameter?Math.max(ne.circleDiameter,se):se;V=j(b,V),V=j(T,V),V=j(E,V),V=j(F,V);let q=+(V>-1);q&&(V*=w/24),e.glyphOffsetArray.length>=e.maxGlyphs&&To("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),x.sortKey!==void 0&&e.addToSortKeyRanges(e.symbolInstances.length,x.sortKey);let Y=PF(l,x,C),[K,te]=ure(e.textAnchorOffsets,Y);e.symbolInstances.emplaceBack(r.x,r.y,B.right>=0?B.right:-1,B.center>=0?B.center:-1,B.left>=0?B.left:-1,B.vertical||-1,I,L,O,W,X,Z,J,N,H,$,U,u,P,z,D,R,q,0,h,V,K,te,A)}function fre(e,r,t,i){let a=e.compareText;if(!(r in a))a[r]=[];else{let o=a[r];for(let s=o.length-1;s>=0;s--)if(i.dist(o[s])<t)return!0}return a[r].push(i),!1}function gx(e,r,t){let i="never",a=e.get(r);return a?i=a:e.get(t)&&(i="always"),i}function yx(e,r,t,i,a,o,s,l,n,u,c,f,h,d){let p=l?Math.min(wA,Math.round(l[0])):0,g=l?Math.min(wA,Math.round(l[1])):0;e.emplaceBack(r,t,Math.round(i*32),Math.round(a*32),o,s,(p<<1)+ +!!n,g,u*16,c*16,f*256,h*256,d)}function _x(e,r,t){e.emplaceBack(r.x,r.y,t),e.emplaceBack(r.x,r.y,t),e.emplaceBack(r.x,r.y,t),e.emplaceBack(r.x,r.y,t)}function hre(e){for(let r of e.sections)if(uF(r.text))return!0;return!1}function dre(e,r){return r.replace(/{([^{}]+)}/g,(t,i)=>e&&i in e?String(e[i]):"")}function pre(e,r,t,i=1){var a;let o=(a=e.get("icon-padding").evaluate(r,{},t))==null?void 0:a.values;return[o[0]*i,o[1]*i,o[2]*i,o[3]*i]}function vre(e){let r=[],t=e.id;return t===void 0&&r.push(new na(`layers.${t}`,null,'missing required property "id"')),e.render===void 0&&r.push(new na(`layers.${t}`,null,'missing required method "render"')),e.renderingMode&&e.renderingMode!=="2d"&&e.renderingMode!=="3d"&&r.push(new na(`layers.${t}`,null,'property "renderingMode" must be either "2d" or "3d"')),r}function $6(e,r){if(e.type==="custom")return new n5(e,r);switch(e.type){case"background":return new i5(e,r);case"circle":return new zI(e,r);case"color-relief":return new JI(e,r);case"fill":return new sR(e,r);case"fill-extrusion":return new _R(e,r);case"heatmap":return new UI(e,r);case"hillshade":return new $I(e,r);case"line":return new LR(e,r);case"raster":return new lI(e,r);case"symbol":return new JR(e,r)}}function mre(e,r,t){return!(e<0||e>25||t<0||t>=2**e||r<0||r>=2**e)}function zF(e,r){let{x:t,y:i}=Qo.fromLngLat(r);return!(e<0||e>25||i<0||i>=1||t<0||t>=1)}function cm(e,r,t,i,a){e*=2,e<0&&(e=e*-1-1);let o=1<<t;return(o*o*e+o*a+i).toString(36)+t.toString(36)+r.toString(36)}function gre(e,r,t){r=2**t-r-1;let i=BF(e*256,r*256,t),a=BF((e+1)*256,(r+1)*256,t);return`${i[0]},${i[1]},${a[0]},${a[1]}`}function BF(e,r,t){let i=2*Nb/256/2**t;return[e*i-Nb,r*i-Nb]}function yre(e,r,t){let i="";for(let a=e;a>0;a--){let o=1<<a-1;i+=(r&o?1:0)+(t&o?2:0)}return i}function OF(e,r){let t=Math.abs(e.wrap*2)-+(e.wrap<0),i=Math.abs(r.wrap*2)-+(r.wrap<0);return e.overscaledZ-r.overscaledZ||i-t||r.canonical.y-e.canonical.y||r.canonical.x-e.canonical.x}function W6(e,r){return e-e%r}function _re(e){return W6(e+31,32)}function xre(e){if(!Number.isFinite(e)||e<=0)return CA;let r=W6(Math.floor(e),256);return r===0?256:r}function bre(e){let r=e>>>0;return((r&255)<<24|(r&65280)<<8|r>>>8&65280|r>>>24&255)>>>0}function wre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0;t[a++]=o>>>0&3,t[a++]=o>>>2&3,t[a++]=o>>>4&3,t[a++]=o>>>6&3,t[a++]=o>>>8&3,t[a++]=o>>>10&3,t[a++]=o>>>12&3,t[a++]=o>>>14&3,t[a++]=o>>>16&3,t[a++]=o>>>18&3,t[a++]=o>>>20&3,t[a++]=o>>>22&3,t[a++]=o>>>24&3,t[a++]=o>>>26&3,t[a++]=o>>>28&3,t[a++]=o>>>30&3,t[a++]=s>>>0&3,t[a++]=s>>>2&3,t[a++]=s>>>4&3,t[a++]=s>>>6&3,t[a++]=s>>>8&3,t[a++]=s>>>10&3,t[a++]=s>>>12&3,t[a++]=s>>>14&3,t[a++]=s>>>16&3,t[a++]=s>>>18&3,t[a++]=s>>>20&3,t[a++]=s>>>22&3,t[a++]=s>>>24&3,t[a++]=s>>>26&3,t[a++]=s>>>28&3,t[a]=s>>>30&3}function Tre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0;t[a++]=o>>>0&7,t[a++]=o>>>3&7,t[a++]=o>>>6&7,t[a++]=o>>>9&7,t[a++]=o>>>12&7,t[a++]=o>>>15&7,t[a++]=o>>>18&7,t[a++]=o>>>21&7,t[a++]=o>>>24&7,t[a++]=o>>>27&7,t[a++]=(o>>>30|(s&1)<<2)&7,t[a++]=s>>>1&7,t[a++]=s>>>4&7,t[a++]=s>>>7&7,t[a++]=s>>>10&7,t[a++]=s>>>13&7,t[a++]=s>>>16&7,t[a++]=s>>>19&7,t[a++]=s>>>22&7,t[a++]=s>>>25&7,t[a++]=s>>>28&7,t[a++]=(s>>>31|(l&3)<<1)&7,t[a++]=l>>>2&7,t[a++]=l>>>5&7,t[a++]=l>>>8&7,t[a++]=l>>>11&7,t[a++]=l>>>14&7,t[a++]=l>>>17&7,t[a++]=l>>>20&7,t[a++]=l>>>23&7,t[a++]=l>>>26&7,t[a]=l>>>29&7}function Are(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0;t[a++]=o>>>0&15,t[a++]=o>>>4&15,t[a++]=o>>>8&15,t[a++]=o>>>12&15,t[a++]=o>>>16&15,t[a++]=o>>>20&15,t[a++]=o>>>24&15,t[a++]=o>>>28&15,t[a++]=s>>>0&15,t[a++]=s>>>4&15,t[a++]=s>>>8&15,t[a++]=s>>>12&15,t[a++]=s>>>16&15,t[a++]=s>>>20&15,t[a++]=s>>>24&15,t[a++]=s>>>28&15,t[a++]=l>>>0&15,t[a++]=l>>>4&15,t[a++]=l>>>8&15,t[a++]=l>>>12&15,t[a++]=l>>>16&15,t[a++]=l>>>20&15,t[a++]=l>>>24&15,t[a++]=l>>>28&15,t[a++]=n>>>0&15,t[a++]=n>>>4&15,t[a++]=n>>>8&15,t[a++]=n>>>12&15,t[a++]=n>>>16&15,t[a++]=n>>>20&15,t[a++]=n>>>24&15,t[a]=n>>>28&15}function Mre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0;t[a++]=o>>>0&31,t[a++]=o>>>5&31,t[a++]=o>>>10&31,t[a++]=o>>>15&31,t[a++]=o>>>20&31,t[a++]=o>>>25&31,t[a++]=(o>>>30|(s&7)<<2)&31,t[a++]=s>>>3&31,t[a++]=s>>>8&31,t[a++]=s>>>13&31,t[a++]=s>>>18&31,t[a++]=s>>>23&31,t[a++]=(s>>>28|(l&1)<<4)&31,t[a++]=l>>>1&31,t[a++]=l>>>6&31,t[a++]=l>>>11&31,t[a++]=l>>>16&31,t[a++]=l>>>21&31,t[a++]=l>>>26&31,t[a++]=(l>>>31|(n&15)<<1)&31,t[a++]=n>>>4&31,t[a++]=n>>>9&31,t[a++]=n>>>14&31,t[a++]=n>>>19&31,t[a++]=n>>>24&31,t[a++]=(n>>>29|(u&3)<<3)&31,t[a++]=u>>>2&31,t[a++]=u>>>7&31,t[a++]=u>>>12&31,t[a++]=u>>>17&31,t[a++]=u>>>22&31,t[a]=u>>>27&31}function Sre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0;t[a++]=o>>>0&63,t[a++]=o>>>6&63,t[a++]=o>>>12&63,t[a++]=o>>>18&63,t[a++]=o>>>24&63,t[a++]=(o>>>30|(s&15)<<2)&63,t[a++]=s>>>4&63,t[a++]=s>>>10&63,t[a++]=s>>>16&63,t[a++]=s>>>22&63,t[a++]=(s>>>28|(l&3)<<4)&63,t[a++]=l>>>2&63,t[a++]=l>>>8&63,t[a++]=l>>>14&63,t[a++]=l>>>20&63,t[a++]=l>>>26&63,t[a++]=n>>>0&63,t[a++]=n>>>6&63,t[a++]=n>>>12&63,t[a++]=n>>>18&63,t[a++]=n>>>24&63,t[a++]=(n>>>30|(u&15)<<2)&63,t[a++]=u>>>4&63,t[a++]=u>>>10&63,t[a++]=u>>>16&63,t[a++]=u>>>22&63,t[a++]=(u>>>28|(c&3)<<4)&63,t[a++]=c>>>2&63,t[a++]=c>>>8&63,t[a++]=c>>>14&63,t[a++]=c>>>20&63,t[a]=c>>>26&63}function Ere(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0;t[a++]=o>>>0&127,t[a++]=o>>>7&127,t[a++]=o>>>14&127,t[a++]=o>>>21&127,t[a++]=(o>>>28|(s&7)<<4)&127,t[a++]=s>>>3&127,t[a++]=s>>>10&127,t[a++]=s>>>17&127,t[a++]=s>>>24&127,t[a++]=(s>>>31|(l&63)<<1)&127,t[a++]=l>>>6&127,t[a++]=l>>>13&127,t[a++]=l>>>20&127,t[a++]=(l>>>27|(n&3)<<5)&127,t[a++]=n>>>2&127,t[a++]=n>>>9&127,t[a++]=n>>>16&127,t[a++]=n>>>23&127,t[a++]=(n>>>30|(u&31)<<2)&127,t[a++]=u>>>5&127,t[a++]=u>>>12&127,t[a++]=u>>>19&127,t[a++]=(u>>>26|(c&1)<<6)&127,t[a++]=c>>>1&127,t[a++]=c>>>8&127,t[a++]=c>>>15&127,t[a++]=c>>>22&127,t[a++]=(c>>>29|(f&15)<<3)&127,t[a++]=f>>>4&127,t[a++]=f>>>11&127,t[a++]=f>>>18&127,t[a]=f>>>25&127}function kre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0,h=e[r+7]>>>0;t[a++]=o>>>0&255,t[a++]=o>>>8&255,t[a++]=o>>>16&255,t[a++]=o>>>24&255,t[a++]=s>>>0&255,t[a++]=s>>>8&255,t[a++]=s>>>16&255,t[a++]=s>>>24&255,t[a++]=l>>>0&255,t[a++]=l>>>8&255,t[a++]=l>>>16&255,t[a++]=l>>>24&255,t[a++]=n>>>0&255,t[a++]=n>>>8&255,t[a++]=n>>>16&255,t[a++]=n>>>24&255,t[a++]=u>>>0&255,t[a++]=u>>>8&255,t[a++]=u>>>16&255,t[a++]=u>>>24&255,t[a++]=c>>>0&255,t[a++]=c>>>8&255,t[a++]=c>>>16&255,t[a++]=c>>>24&255,t[a++]=f>>>0&255,t[a++]=f>>>8&255,t[a++]=f>>>16&255,t[a++]=f>>>24&255,t[a++]=h>>>0&255,t[a++]=h>>>8&255,t[a++]=h>>>16&255,t[a]=h>>>24&255}function Cre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0,h=e[r+7]>>>0,d=e[r+8]>>>0;t[a++]=o>>>0&511,t[a++]=o>>>9&511,t[a++]=o>>>18&511,t[a++]=(o>>>27|(s&15)<<5)&511,t[a++]=s>>>4&511,t[a++]=s>>>13&511,t[a++]=s>>>22&511,t[a++]=(s>>>31|(l&255)<<1)&511,t[a++]=l>>>8&511,t[a++]=l>>>17&511,t[a++]=(l>>>26|(n&7)<<6)&511,t[a++]=n>>>3&511,t[a++]=n>>>12&511,t[a++]=n>>>21&511,t[a++]=(n>>>30|(u&127)<<2)&511,t[a++]=u>>>7&511,t[a++]=u>>>16&511,t[a++]=(u>>>25|(c&3)<<7)&511,t[a++]=c>>>2&511,t[a++]=c>>>11&511,t[a++]=c>>>20&511,t[a++]=(c>>>29|(f&63)<<3)&511,t[a++]=f>>>6&511,t[a++]=f>>>15&511,t[a++]=(f>>>24|(h&1)<<8)&511,t[a++]=h>>>1&511,t[a++]=h>>>10&511,t[a++]=h>>>19&511,t[a++]=(h>>>28|(d&31)<<4)&511,t[a++]=d>>>5&511,t[a++]=d>>>14&511,t[a]=d>>>23&511}function Dre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0,h=e[r+7]>>>0,d=e[r+8]>>>0,p=e[r+9]>>>0;t[a++]=o>>>0&1023,t[a++]=o>>>10&1023,t[a++]=o>>>20&1023,t[a++]=(o>>>30|(s&255)<<2)&1023,t[a++]=s>>>8&1023,t[a++]=s>>>18&1023,t[a++]=(s>>>28|(l&63)<<4)&1023,t[a++]=l>>>6&1023,t[a++]=l>>>16&1023,t[a++]=(l>>>26|(n&15)<<6)&1023,t[a++]=n>>>4&1023,t[a++]=n>>>14&1023,t[a++]=(n>>>24|(u&3)<<8)&1023,t[a++]=u>>>2&1023,t[a++]=u>>>12&1023,t[a++]=u>>>22&1023,t[a++]=c>>>0&1023,t[a++]=c>>>10&1023,t[a++]=c>>>20&1023,t[a++]=(c>>>30|(f&255)<<2)&1023,t[a++]=f>>>8&1023,t[a++]=f>>>18&1023,t[a++]=(f>>>28|(h&63)<<4)&1023,t[a++]=h>>>6&1023,t[a++]=h>>>16&1023,t[a++]=(h>>>26|(d&15)<<6)&1023,t[a++]=d>>>4&1023,t[a++]=d>>>14&1023,t[a++]=(d>>>24|(p&3)<<8)&1023,t[a++]=p>>>2&1023,t[a++]=p>>>12&1023,t[a]=p>>>22&1023}function Lre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0,h=e[r+7]>>>0,d=e[r+8]>>>0,p=e[r+9]>>>0,g=e[r+10]>>>0;t[a++]=o>>>0&2047,t[a++]=o>>>11&2047,t[a++]=(o>>>22|(s&1)<<10)&2047,t[a++]=s>>>1&2047,t[a++]=s>>>12&2047,t[a++]=(s>>>23|(l&3)<<9)&2047,t[a++]=l>>>2&2047,t[a++]=l>>>13&2047,t[a++]=(l>>>24|(n&7)<<8)&2047,t[a++]=n>>>3&2047,t[a++]=n>>>14&2047,t[a++]=(n>>>25|(u&15)<<7)&2047,t[a++]=u>>>4&2047,t[a++]=u>>>15&2047,t[a++]=(u>>>26|(c&31)<<6)&2047,t[a++]=c>>>5&2047,t[a++]=c>>>16&2047,t[a++]=(c>>>27|(f&63)<<5)&2047,t[a++]=f>>>6&2047,t[a++]=f>>>17&2047,t[a++]=(f>>>28|(h&127)<<4)&2047,t[a++]=h>>>7&2047,t[a++]=h>>>18&2047,t[a++]=(h>>>29|(d&255)<<3)&2047,t[a++]=d>>>8&2047,t[a++]=d>>>19&2047,t[a++]=(d>>>30|(p&511)<<2)&2047,t[a++]=p>>>9&2047,t[a++]=p>>>20&2047,t[a++]=(p>>>31|(g&1023)<<1)&2047,t[a++]=g>>>10&2047,t[a]=g>>>21&2047}function Fre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0,h=e[r+7]>>>0,d=e[r+8]>>>0,p=e[r+9]>>>0,g=e[r+10]>>>0,m=e[r+11]>>>0;t[a++]=o>>>0&4095,t[a++]=o>>>12&4095,t[a++]=(o>>>24|(s&15)<<8)&4095,t[a++]=s>>>4&4095,t[a++]=s>>>16&4095,t[a++]=(s>>>28|(l&255)<<4)&4095,t[a++]=l>>>8&4095,t[a++]=l>>>20&4095,t[a++]=n>>>0&4095,t[a++]=n>>>12&4095,t[a++]=(n>>>24|(u&15)<<8)&4095,t[a++]=u>>>4&4095,t[a++]=u>>>16&4095,t[a++]=(u>>>28|(c&255)<<4)&4095,t[a++]=c>>>8&4095,t[a++]=c>>>20&4095,t[a++]=f>>>0&4095,t[a++]=f>>>12&4095,t[a++]=(f>>>24|(h&15)<<8)&4095,t[a++]=h>>>4&4095,t[a++]=h>>>16&4095,t[a++]=(h>>>28|(d&255)<<4)&4095,t[a++]=d>>>8&4095,t[a++]=d>>>20&4095,t[a++]=p>>>0&4095,t[a++]=p>>>12&4095,t[a++]=(p>>>24|(g&15)<<8)&4095,t[a++]=g>>>4&4095,t[a++]=g>>>16&4095,t[a++]=(g>>>28|(m&255)<<4)&4095,t[a++]=m>>>8&4095,t[a]=m>>>20&4095}function Pre(e,r,t,i){let a=i,o=e[r]>>>0,s=e[r+1]>>>0,l=e[r+2]>>>0,n=e[r+3]>>>0,u=e[r+4]>>>0,c=e[r+5]>>>0,f=e[r+6]>>>0,h=e[r+7]>>>0,d=e[r+8]>>>0,p=e[r+9]>>>0,g=e[r+10]>>>0,m=e[r+11]>>>0,y=e[r+12]>>>0,_=e[r+13]>>>0,v=e[r+14]>>>0,x=e[r+15]>>>0;t[a++]=o>>>0&65535,t[a++]=o>>>16&65535,t[a++]=s>>>0&65535,t[a++]=s>>>16&65535,t[a++]=l>>>0&65535,t[a++]=l>>>16&65535,t[a++]=n>>>0&65535,t[a++]=n>>>16&65535,t[a++]=u>>>0&65535,t[a++]=u>>>16&65535,t[a++]=c>>>0&65535,t[a++]=c>>>16&65535,t[a++]=f>>>0&65535,t[a++]=f>>>16&65535,t[a++]=h>>>0&65535,t[a++]=h>>>16&65535,t[a++]=d>>>0&65535,t[a++]=d>>>16&65535,t[a++]=p>>>0&65535,t[a++]=p>>>16&65535,t[a++]=g>>>0&65535,t[a++]=g>>>16&65535,t[a++]=m>>>0&65535,t[a++]=m>>>16&65535,t[a++]=y>>>0&65535,t[a++]=y>>>16&65535,t[a++]=_>>>0&65535,t[a++]=_>>>16&65535,t[a++]=v>>>0&65535,t[a++]=v>>>16&65535,t[a++]=x>>>0&65535,t[a]=x>>>16&65535}function Ire(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0;t[a++]=l>>>0&1,t[a++]=l>>>1&1,t[a++]=l>>>2&1,t[a++]=l>>>3&1,t[a++]=l>>>4&1,t[a++]=l>>>5&1,t[a++]=l>>>6&1,t[a++]=l>>>7&1,t[a++]=l>>>8&1,t[a++]=l>>>9&1,t[a++]=l>>>10&1,t[a++]=l>>>11&1,t[a++]=l>>>12&1,t[a++]=l>>>13&1,t[a++]=l>>>14&1,t[a++]=l>>>15&1,t[a++]=l>>>16&1,t[a++]=l>>>17&1,t[a++]=l>>>18&1,t[a++]=l>>>19&1,t[a++]=l>>>20&1,t[a++]=l>>>21&1,t[a++]=l>>>22&1,t[a++]=l>>>23&1,t[a++]=l>>>24&1,t[a++]=l>>>25&1,t[a++]=l>>>26&1,t[a++]=l>>>27&1,t[a++]=l>>>28&1,t[a++]=l>>>29&1,t[a++]=l>>>30&1,t[a++]=l>>>31&1}}function Rre(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0;t[a++]=l>>>0&3,t[a++]=l>>>2&3,t[a++]=l>>>4&3,t[a++]=l>>>6&3,t[a++]=l>>>8&3,t[a++]=l>>>10&3,t[a++]=l>>>12&3,t[a++]=l>>>14&3,t[a++]=l>>>16&3,t[a++]=l>>>18&3,t[a++]=l>>>20&3,t[a++]=l>>>22&3,t[a++]=l>>>24&3,t[a++]=l>>>26&3,t[a++]=l>>>28&3,t[a++]=l>>>30&3,t[a++]=n>>>0&3,t[a++]=n>>>2&3,t[a++]=n>>>4&3,t[a++]=n>>>6&3,t[a++]=n>>>8&3,t[a++]=n>>>10&3,t[a++]=n>>>12&3,t[a++]=n>>>14&3,t[a++]=n>>>16&3,t[a++]=n>>>18&3,t[a++]=n>>>20&3,t[a++]=n>>>22&3,t[a++]=n>>>24&3,t[a++]=n>>>26&3,t[a++]=n>>>28&3,t[a++]=n>>>30&3}}function zre(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0,u=e[o++]>>>0;t[a++]=l>>>0&7,t[a++]=l>>>3&7,t[a++]=l>>>6&7,t[a++]=l>>>9&7,t[a++]=l>>>12&7,t[a++]=l>>>15&7,t[a++]=l>>>18&7,t[a++]=l>>>21&7,t[a++]=l>>>24&7,t[a++]=l>>>27&7,t[a++]=(l>>>30|(n&1)<<2)&7,t[a++]=n>>>1&7,t[a++]=n>>>4&7,t[a++]=n>>>7&7,t[a++]=n>>>10&7,t[a++]=n>>>13&7,t[a++]=n>>>16&7,t[a++]=n>>>19&7,t[a++]=n>>>22&7,t[a++]=n>>>25&7,t[a++]=n>>>28&7,t[a++]=(n>>>31|(u&3)<<1)&7,t[a++]=u>>>2&7,t[a++]=u>>>5&7,t[a++]=u>>>8&7,t[a++]=u>>>11&7,t[a++]=u>>>14&7,t[a++]=u>>>17&7,t[a++]=u>>>20&7,t[a++]=u>>>23&7,t[a++]=u>>>26&7,t[a++]=u>>>29&7}}function Bre(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0,u=e[o++]>>>0,c=e[o++]>>>0;t[a++]=l>>>0&15,t[a++]=l>>>4&15,t[a++]=l>>>8&15,t[a++]=l>>>12&15,t[a++]=l>>>16&15,t[a++]=l>>>20&15,t[a++]=l>>>24&15,t[a++]=l>>>28&15,t[a++]=n>>>0&15,t[a++]=n>>>4&15,t[a++]=n>>>8&15,t[a++]=n>>>12&15,t[a++]=n>>>16&15,t[a++]=n>>>20&15,t[a++]=n>>>24&15,t[a++]=n>>>28&15,t[a++]=u>>>0&15,t[a++]=u>>>4&15,t[a++]=u>>>8&15,t[a++]=u>>>12&15,t[a++]=u>>>16&15,t[a++]=u>>>20&15,t[a++]=u>>>24&15,t[a++]=u>>>28&15,t[a++]=c>>>0&15,t[a++]=c>>>4&15,t[a++]=c>>>8&15,t[a++]=c>>>12&15,t[a++]=c>>>16&15,t[a++]=c>>>20&15,t[a++]=c>>>24&15,t[a++]=c>>>28&15}}function Ore(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0,u=e[o++]>>>0,c=e[o++]>>>0,f=e[o++]>>>0;t[a++]=l>>>0&31,t[a++]=l>>>5&31,t[a++]=l>>>10&31,t[a++]=l>>>15&31,t[a++]=l>>>20&31,t[a++]=l>>>25&31,t[a++]=(l>>>30|(n&7)<<2)&31,t[a++]=n>>>3&31,t[a++]=n>>>8&31,t[a++]=n>>>13&31,t[a++]=n>>>18&31,t[a++]=n>>>23&31,t[a++]=(n>>>28|(u&1)<<4)&31,t[a++]=u>>>1&31,t[a++]=u>>>6&31,t[a++]=u>>>11&31,t[a++]=u>>>16&31,t[a++]=u>>>21&31,t[a++]=u>>>26&31,t[a++]=(u>>>31|(c&15)<<1)&31,t[a++]=c>>>4&31,t[a++]=c>>>9&31,t[a++]=c>>>14&31,t[a++]=c>>>19&31,t[a++]=c>>>24&31,t[a++]=(c>>>29|(f&3)<<3)&31,t[a++]=f>>>2&31,t[a++]=f>>>7&31,t[a++]=f>>>12&31,t[a++]=f>>>17&31,t[a++]=f>>>22&31,t[a++]=f>>>27&31}}function Nre(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0,u=e[o++]>>>0,c=e[o++]>>>0,f=e[o++]>>>0,h=e[o++]>>>0;t[a++]=l>>>0&63,t[a++]=l>>>6&63,t[a++]=l>>>12&63,t[a++]=l>>>18&63,t[a++]=l>>>24&63,t[a++]=(l>>>30|(n&15)<<2)&63,t[a++]=n>>>4&63,t[a++]=n>>>10&63,t[a++]=n>>>16&63,t[a++]=n>>>22&63,t[a++]=(n>>>28|(u&3)<<4)&63,t[a++]=u>>>2&63,t[a++]=u>>>8&63,t[a++]=u>>>14&63,t[a++]=u>>>20&63,t[a++]=u>>>26&63,t[a++]=c>>>0&63,t[a++]=c>>>6&63,t[a++]=c>>>12&63,t[a++]=c>>>18&63,t[a++]=c>>>24&63,t[a++]=(c>>>30|(f&15)<<2)&63,t[a++]=f>>>4&63,t[a++]=f>>>10&63,t[a++]=f>>>16&63,t[a++]=f>>>22&63,t[a++]=(f>>>28|(h&3)<<4)&63,t[a++]=h>>>2&63,t[a++]=h>>>8&63,t[a++]=h>>>14&63,t[a++]=h>>>20&63,t[a++]=h>>>26&63}}function jre(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0,u=e[o++]>>>0,c=e[o++]>>>0,f=e[o++]>>>0,h=e[o++]>>>0,d=e[o++]>>>0;t[a++]=l>>>0&127,t[a++]=l>>>7&127,t[a++]=l>>>14&127,t[a++]=l>>>21&127,t[a++]=(l>>>28|(n&7)<<4)&127,t[a++]=n>>>3&127,t[a++]=n>>>10&127,t[a++]=n>>>17&127,t[a++]=n>>>24&127,t[a++]=(n>>>31|(u&63)<<1)&127,t[a++]=u>>>6&127,t[a++]=u>>>13&127,t[a++]=u>>>20&127,t[a++]=(u>>>27|(c&3)<<5)&127,t[a++]=c>>>2&127,t[a++]=c>>>9&127,t[a++]=c>>>16&127,t[a++]=c>>>23&127,t[a++]=(c>>>30|(f&31)<<2)&127,t[a++]=f>>>5&127,t[a++]=f>>>12&127,t[a++]=f>>>19&127,t[a++]=(f>>>26|(h&1)<<6)&127,t[a++]=h>>>1&127,t[a++]=h>>>8&127,t[a++]=h>>>15&127,t[a++]=h>>>22&127,t[a++]=(h>>>29|(d&15)<<3)&127,t[a++]=d>>>4&127,t[a++]=d>>>11&127,t[a++]=d>>>18&127,t[a++]=d>>>25&127}}function Ure(e,r,t,i){let a=i,o=r;for(let s=0;s<8;s++){let l=e[o++]>>>0,n=e[o++]>>>0,u=e[o++]>>>0,c=e[o++]>>>0,f=e[o++]>>>0,h=e[o++]>>>0,d=e[o++]>>>0,p=e[o++]>>>0;t[a++]=l>>>0&255,t[a++]=l>>>8&255,t[a++]=l>>>16&255,t[a++]=l>>>24&255,t[a++]=n>>>0&255,t[a++]=n>>>8&255,t[a++]=n>>>16&255,t[a++]=n>>>24&255,t[a++]=u>>>0&255,t[a++]=u>>>8&255,t[a++]=u>>>16&255,t[a++]=u>>>24&255,t[a++]=c>>>0&255,t[a++]=c>>>8&255,t[a++]=c>>>16&255,t[a++]=c>>>24&255,t[a++]=f>>>0&255,t[a++]=f>>>8&255,t[a++]=f>>>16&255,t[a++]=f>>>24&255,t[a++]=h>>>0&255,t[a++]=h>>>8&255,t[a++]=h>>>16&255,t[a++]=h>>>24&255,t[a++]=d>>>0&255,t[a++]=d>>>8&255,t[a++]=d>>>16&255,t[a++]=d>>>24&255,t[a++]=p>>>0&255,t[a++]=p>>>8&255,t[a++]=p>>>16&255,t[a++]=p>>>24&255}}function qre(e,r,t,i){let a=i,o=r;for(let s=0;s<128;s++){let l=e[o++]>>>0;t[a++]=l&65535,t[a++]=l>>>16&65535}}function Vre(e,r,t,i,a){let o=Hb[a]>>>0,s=r,l=0,n=e[s]>>>0,u=i;for(let c=0;c<8;c++){for(let f=0;f<32;f++)if(l+a<=32){let h=n>>>l&o;t[u+f]=h|0,l+=a,l===32&&(l=0,s++,f!==31&&(n=e[s]>>>0))}else{let h=32-l,d=n>>>l;s++,n=e[s]>>>0;let p=a-h,g=-1>>>32-p>>>0,m=(d|(n&g)<<h)&o;t[u+f]=m|0,l=p}u+=32,l=0,c<7&&(n=e[s]>>>0)}}function NF(){let e=new Uint8Array(f5);return{dataToBePacked:Array(33),dataPointers:new Int32Array(33),byteContainer:e,byteContainerI32:new Int32Array(e.buffer,e.byteOffset,e.byteLength>>>2),exceptionSizes:new Int32Array(33)}}function Gre(e=16){if(e<0)throw RangeError(`initialEncodedWordCapacity must be >= 0, got ${e}`);let r=Math.max(16,e|0);return{encodedWords:new Uint32Array(r),decoderWorkspace:NF()}}function Hre(e,r){if(r<=e.encodedWords.length)return e.encodedWords;let t=new Uint32Array(Math.max(16,r*2));return e.encodedWords=t,t}function $re(e,r,t,i){i.byteContainer.length<t&&(i.byteContainer=new Uint8Array(t*2),i.byteContainerI32=void 0);let a=i.byteContainer,o=t>>>2;if(a.byteOffset&3)for(let l=0;l<o;l=l+1|0){let n=e[r+l|0]|0,u=l<<2;a[u]=n&255,a[u+1|0]=n>>>8&255,a[u+2|0]=n>>>16&255,a[u+3|0]=n>>>24&255}else{let l=i.byteContainerI32;(!l||l.buffer!==a.buffer||l.byteOffset!==a.byteOffset||l.length<o)&&(l=i.byteContainerI32=new Int32Array(a.buffer,a.byteOffset,a.byteLength>>>2)),l.set(e.subarray(r,r+o))}let s=t&3;if(s>0){let l=e[r+o|0]|0,n=o<<2;for(let u=0;u<s;u=u+1|0)a[n+u|0]=l>>>(u<<3)&255}return a}function Wre(e,r,t){let i=e[r++]|0,a=t.dataToBePacked;for(let o=2;o<=32;o=o+1|0){if(!(i>>>o-1&1))continue;if(r>=e.length)throw Error(`FastPFOR decode: truncated exception stream header (bitWidth=${o}, streamWordIndex=${r}, needWords=1, availableWords=${e.length-r}, encodedWords=${e.length})`);let s=e[r++]>>>0,l=_re(s),n=s*o+31>>>5;if(r+n>e.length)throw Error(`FastPFOR decode: truncated exception stream (bitWidth=${o}, size=${s}, streamWordIndex=${r}, needWords=${n}, availableWords=${e.length-r}, encodedWords=${e.length})`);let u=a[o];(!u||u.length<l)&&(u=a[o]=new Uint32Array(l));let c=0;for(;c<s;c=c+32|0)iie(e,r,u,c,o),r=r+o|0;let f=c-s|0;r=r-(f*o>>>5)|0,t.exceptionSizes[o]=s}return r}function Yre(e,r,t,i,a){switch(a){case 1:Ire(e,r,t,i);break;case 2:Rre(e,r,t,i);break;case 3:zre(e,r,t,i);break;case 4:Bre(e,r,t,i);break;case 5:Ore(e,r,t,i);break;case 6:Nre(e,r,t,i);break;case 7:jre(e,r,t,i);break;case 8:Ure(e,r,t,i);break;case 16:qre(e,r,t,i);break;default:Vre(e,r,t,i,a)}return r+(a<<3)|0}function Xre(e,r,t,i){if(t+2>r)throw Error(`FastPFOR decode: byteContainer underflow at block=${i} (need 2 bytes for [bitWidth, exceptionCount], bytePos=${t}, byteSize=${r})`);let a=e[t++],o=e[t++];if(a>32)throw Error(`FastPFOR decode: invalid bitWidth=${a} at block=${i} (expected 0..32). This likely indicates corrupted or truncated input.`);return{bitWidth:a,exceptionCount:o,bytePosIn:t}}function Zre(e,r,t,i,a,o){if(t+1>r)throw Error(`FastPFOR decode: exception header underflow at block=${o} (need 1 byte for maxBits, bytePos=${t}, byteSize=${r})`);let s=e[t++];if(s<i||s>32)throw Error(`FastPFOR decode: invalid maxBits=${s} at block=${o} (bitWidth=${i}, expected ${i}..32)`);let l=s-i|0;if(l<1||l>32)throw Error(`FastPFOR decode: invalid exceptionBitWidth=${l} at block=${o} (bitWidth=${i}, maxBits=${s})`);if(t+a>r)throw Error(`FastPFOR decode: exception positions underflow at block=${o} (need=${a}, have=${r-t})`);return{maxBits:s,exceptionBitWidth:l,bytePosIn:t}}function Kre(e,r,t,i,a,o,s,l,n){let{maxBits:u,exceptionBitWidth:c,bytePosIn:f}=Zre(a,o,s,t,i,n);if(s=f,c===1){let m=1<<t;for(let y=0;y<i;y=y+1|0){let _=a[s++];e[_+r|0]|=m}return s}let h=l.dataToBePacked[c];if(!h)throw Error(`FastPFOR decode: missing exception stream for exceptionBitWidth=${c} (bitWidth=${t}, maxBits=${u}) at block ${n}`);let d=l.dataPointers,p=d[c]|0,g=l.exceptionSizes[c]|0;if(p+i>g)throw Error(`FastPFOR decode: exception stream overflow for exceptionBitWidth=${c} (ptr=${p}, need ${i}, size=${g}) at block ${n}`);for(let m=0;m<i;m=m+1|0){let y=a[s++],_=h[p++]|0;e[y+r|0]|=_<<t}return d[c]=p,s}function Jre(e,r,t,i,a,o,s,l,n,u){let c=t|0,f=0;for(let h=0;h<s;h=h+1|0){let d=Xre(l,n,f,h);f=d.bytePosIn;let p=d.bitWidth,g=d.exceptionCount,m=o+h*256|0;switch(p){case 0:a.fill(0,m,m+256);break;case 32:for(let y=0;y<256;y=y+1|0)a[m+y|0]=e[c+y|0]|0;c=c+256|0;break;default:c=Yre(e,c,a,m,p)}g>0&&(f=Kre(a,m,p,g,l,n,f,u,h))}if(c!==i)throw Error(`FastPFOR decode: packed region mismatch (pageStart=${r}, packedStart=${t}, consumedPackedEnd=${c}, expectedPackedEnd=${i}, packedWords=${i-t}, encoded.length=${e.length})`)}function Qre(e,r,t,i,a,o){let s=t|0,l=e[s]|0;if(l<=0||s+l>e.length-1)throw Error(`FastPFOR decode: invalid whereMeta=${l} at pageStart=${s} (expected > 0 and pageStart+whereMeta < encoded.length=${e.length})`);let n=s+1|0,u=s+l|0,c=e[u]>>>0,f=c+3>>>2,h=u+1,d=h+f;if(d>=e.length)throw Error(`FastPFOR decode: invalid byteSize=${c} (metaInts=${f}, pageStart=${s}, packedEnd=${u}, byteContainerStart=${h}) causes bitmapPos=${d} out of bounds (encoded.length=${e.length})`);let p=$re(e,h,c,o),g=c,m=Wre(e,d,o);return o.dataPointers.fill(0),Jre(e,s,n,u,r,i|0,a/256|0,p,g,o),m}function eie(e,r,t,i,a,o){let s=i+W6(a,256),l=i,n=t;for(;l!==s;){let u=Math.min($b,s-l);n=Qre(e,r,n,l,u,o),l=l+u|0}return n}function tie(e,r,t,i,a,o){if(o===0)return r;let s=0,l=r,n=r+t,u=a,c=a,f=a+o,h=0,d=0;for(;l<n&&c<f;){let p=e[l]>>>s&255;if(s+=8,l+=s>>>5,s&=31,h|=(p&127)<<d,p&128)i[c++]=h|0,h=0,d=0;else if(d+=7,d>28)throw Error(`FastPFOR VByte: unterminated value (expected MSB=1 terminator within 5 bytes; shift=${d}, partial=${h}, decoded=${c-u}/${o}, inPos=${l}, inEnd=${n})`)}if(c!==f)throw Error(`FastPFOR VByte: truncated stream (decoded=${c-u}, expected=${o}, consumedWords=${l-r}/${t}, vbyteStart=${r}, vbyteEnd=${n})`);return l}function rie(e,r,t){let i=0,a=0,o=new Uint32Array(r),s=t??NF();if(e.length>0){let u=e[i]|0;if(i=i+1|0,u&255)throw Error(`FastPFOR decode: invalid alignedLength=${u} (expected multiple of 256)`);if(a+u>o.length)throw Error(`FastPFOR decode: output buffer too small (outPos=${a}, alignedLength=${u}, out.length=${o.length})`);i=eie(e,o,i,a,u,s),a=a+u|0}let l=e.length-i|0,n=r-a|0;return tie(e,i,l,o,a,n),o}function iie(e,r,t,i,a){switch(a){case 2:wre(e,r,t,i);return;case 3:Tre(e,r,t,i);return;case 4:Are(e,r,t,i);return;case 5:Mre(e,r,t,i);return;case 6:Sre(e,r,t,i);return;case 7:Ere(e,r,t,i);return;case 8:kre(e,r,t,i);return;case 9:Cre(e,r,t,i);return;case 10:Dre(e,r,t,i);return;case 11:Lre(e,r,t,i);return;case 12:Fre(e,r,t,i);return;case 16:Pre(e,r,t,i);return;case 32:for(let u=0;u<32;u=u+1|0)t[i+u|0]=e[r+u|0]|0;return}let o=Hb[a]>>>0,s=r,l=0,n=e[s]>>>0;for(let u=0;u<32;u++)if(l+a<=32){let c=n>>>l&o;t[i+u]=c|0,l+=a,l===32&&(l=0,s++,u!==31&&(n=e[s]>>>0))}else{let c=32-l,f=n>>>l;s++,n=e[s]>>>0;let h=Hb[a-c]>>>0,d=(f|(n&h)<<c)&o;t[i+u]=d|0,l=a-c}}function aie(e,r,t,i){if(r<0||t<0||r+t>e.length)throw RangeError(`decodeBigEndianInt32sInto: out of bounds (offset=${r}, byteLength=${t}, bytes.length=${e.length})`);let a=Math.floor(t/4),o=t%4!=0,s=o?a+1:a;if(i.length<s)throw RangeError(`decodeBigEndianInt32sInto: out.length=${i.length} < ${s}`);if(a>0){let l=e.byteOffset+r;if(l&3)for(let n=0;n<a;n++){let u=r+n*4;i[n]=e[u]<<24|e[u+1]<<16|e[u+2]<<8|e[u+3]|0}else{let n=new Uint32Array(e.buffer,l,a);for(let u=0;u<a;u++)i[u]=bre(n[u])|0}}if(o){let l=r+a*4,n=t-a*4,u=0;for(let c=0;c<n;c++)u|=e[l+c]<<24-c*8;i[a]=u|0}return s}function Ju(e,r,t){let i=new Uint32Array(t),a=0,o=r.get();for(let s=0;s<i.length;s++){let l=e[o++],n=l&127;if(l<128){i[a++]=n;continue}if(l=e[o++],n|=(l&127)<<7,l<128){i[a++]=n;continue}if(l=e[o++],n|=(l&127)<<14,l<128){i[a++]=n;continue}if(l=e[o++],n|=(l&127)<<21,l<128){i[a++]=n;continue}l=e[o++],n|=(l&15)<<28,i[a++]=n}return r.set(o),i}function Y6(e,r,t){let i=new BigUint64Array(t);for(let a=0;a<i.length;a++)i[a]=nie(e,r);return i}function nie(e,r){let t=BigInt("0"),i=0,a=r.get();for(;a<e.length;){let o=e[a++];if(t|=BigInt(o&127)<<BigInt(i),!(o&128))break;if(i+=7,i>=64)throw Error("Varint too long")}return r.set(a),t}function oie(e,r,t){let i=new Float64Array(t);for(let a=0;a<t;a++)i[a]=sie(e,r);return i}function sie(e,r){let t,i;return i=e[r.get()],r.increment(),t=i&127,i<128||(i=e[r.get()],r.increment(),t|=(i&127)<<7,i<128)||(i=e[r.get()],r.increment(),t|=(i&127)<<14,i<128)||(i=e[r.get()],r.increment(),t|=(i&127)<<21,i<128)?t:(i=e[r.get()],t|=(i&15)<<28,lie(t,e,r))}function lie(e,r,t){let i,a;if(a=r[t.get()],t.increment(),i=(a&112)>>4,a<128||(a=r[t.get()],t.increment(),i|=(a&127)<<3,a<128)||(a=r[t.get()],t.increment(),i|=(a&127)<<10,a<128)||(a=r[t.get()],t.increment(),i|=(a&127)<<17,a<128)||(a=r[t.get()],t.increment(),i|=(a&127)<<24,a<128)||(a=r[t.get()],t.increment(),i|=(a&1)<<31,a<128))return i*4294967296+(e>>>0);throw Error("Expected varint not more than 10 bytes")}function uie(e,r,t,i){return cie(e,r,t,i,Gre(t>>>2))}function cie(e,r,t,i,a){let o=i.get();if(t&3)throw Error(`FastPFOR: invalid encodedByteLength=${t} at offset=${o} (encodedBytes.length=${e.length}; expected a multiple of 4 bytes for an int32 big-endian word stream)`);let s=t>>>2,l=Hre(a,s);aie(e,o,t,l);let n=rie(l.subarray(0,s),r,a.decoderWorkspace);return i.add(t),n}function No(e){return e>>>1^-(e&1)}function Qu(e){return e>>BigInt("1")^-(e&BigInt("1"))}function Gp(e){return e%2==1?(e+1)/-2:e/2}function fie(e){let r=new Int32Array(e.length);for(let t=0;t<e.length;t++)r[t]=No(e[t]);return r}function hie(e){let r=new BigInt64Array(e.length);for(let t=0;t<e.length;t++)r[t]=Qu(e[t]);return r}function die(e){for(let r=0;r<e.length;r++)e[r]=Gp(e[r])}function X6(e,r,t){if(t===void 0){t=0;for(let o=0;o<r;o++)t+=e[o]}let i=new Uint32Array(t),a=0;for(let o=0;o<r;o++){let s=e[o],l=e[o+r];i.fill(l,a,a+s),a+=s}return i}function Z6(e,r,t){if(t===void 0){t=0;for(let o=0;o<r;o++)t+=Number(e[o])}let i=new BigUint64Array(t),a=0;for(let o=0;o<r;o++){let s=Number(e[o]),l=e[o+r];i.fill(l,a,a+s),a+=s}return i}function jF(e,r,t){let i=new Float64Array(t),a=0;for(let o=0;o<r;o++){let s=e[o],l=e[o+r];i.fill(l,a,a+s),a+=s}return i}function UF(e){let r=new Int32Array(e.length);r[0]=No(e[0]);let t=e.length/4*4,i=1;if(t>=4)for(;i<t-4;i+=4){let a=e[i],o=e[i+1],s=e[i+2],l=e[i+3];r[i]=No(a)+r[i-1],r[i+1]=No(o)+r[i],r[i+2]=No(s)+r[i+1],r[i+3]=No(l)+r[i+2]}for(;i!==e.length;++i)r[i]=No(e[i])+r[i-1];return r}function qF(e){let r=new BigInt64Array(e.length);r[0]=Qu(e[0]);let t=e.length/4*4,i=1;if(t>=4)for(;i<t-4;i+=4){let a=e[i],o=e[i+1],s=e[i+2],l=e[i+3];r[i]=Qu(a)+r[i-1],r[i+1]=Qu(o)+r[i],r[i+2]=Qu(s)+r[i+1],r[i+3]=Qu(l)+r[i+2]}for(;i!==r.length;++i)r[i]=Qu(e[i])+r[i-1];return r}function pie(e){e[0]=Gp(e[0]);let r=e.length/4*4,t=1;if(r>=4)for(;t<r-4;t+=4){let i=e[t],a=e[t+1],o=e[t+2],s=e[t+3];e[t]=Gp(i)+e[t-1],e[t+1]=Gp(a)+e[t],e[t+2]=Gp(o)+e[t+1],e[t+3]=Gp(s)+e[t+2]}for(;t!==e.length;++t)e[t]=Gp(e[t])+e[t-1]}function vie(e,r,t){if(t===void 0){t=0;for(let o=0;o<r;o++)t+=e[o]}let i=new Int32Array(t),a=0;for(let o=0;o<r;o++){let s=e[o],l=e[o+r];l=No(l),i.fill(l,a,a+s),a+=s}return i}function mie(e,r,t){if(t===void 0){t=0;for(let o=0;o<r;o++)t+=Number(e[o])}let i=new BigInt64Array(t),a=0;for(let o=0;o<r;o++){let s=Number(e[o]),l=e[o+r];l=Qu(l),i.fill(l,a,a+s),a+=s}return i}function gie(e,r,t){let i=new Float64Array(t),a=0;for(let o=0;o<r;o++){let s=e[o],l=e[o+r];l=Gp(l),i.fill(l,a,a+s),a+=s}return i}function K6(e){let r=e.length/4*4,t=1;if(r>=4)for(let i=e[0];t<r-4;t+=4)i=e[t]+=i,i=e[t+1]+=i,i=e[t+2]+=i,i=e[t+3]+=i;for(;t!==e.length;)e[t]+=e[t-1],++t}function yie(e){let r=0;for(let t=0;t<e.length;t++)e[t]+=r,r=e[t]}function _ie(e){if(e.length<2)return new Int32Array(e);let r=new Int32Array(e.length);r[0]=No(e[0]),r[1]=No(e[1]);let t=e.length/4*4,i=2;if(t>=4)for(;i<t-4;i+=4){let a=e[i],o=e[i+1],s=e[i+2],l=e[i+3];r[i]=No(a)+r[i-2],r[i+1]=No(o)+r[i-1],r[i+2]=No(s)+r[i],r[i+3]=No(l)+r[i+1]}for(;i!==e.length;i+=2)r[i]=No(e[i])+r[i-2],r[i+1]=No(e[i+1])+r[i-1];return r}function VF(e,r,t,i){if(e.length<2)return new Int32Array(e);let a=new Int32Array(e.length),o=No(e[0]),s=No(e[1]);a[0]=Hp(Math.round(o*r),t,i),a[1]=Hp(Math.round(s*r),t,i);let l=e.length/16,n=2;if(l>=4)for(;n<l-4;n+=4){let u=e[n],c=e[n+1],f=No(u)+o,h=No(c)+s;a[n]=Hp(Math.round(f*r),t,i),a[n+1]=Hp(Math.round(h*r),t,i);let d=e[n+2],p=e[n+3];o=No(d)+f,s=No(p)+h,a[n+2]=Hp(Math.round(o*r),t,i),a[n+3]=Hp(Math.round(s*r),t,i)}for(;n!==e.length;n+=2)o+=No(e[n]),s+=No(e[n+1]),a[n]=Hp(Math.round(o*r),t,i),a[n+1]=Hp(Math.round(s*r),t,i);return a}function Hp(e,r,t){return Math.min(t,Math.max(r,e))}function xie(e){let r=new Int32Array(e.length+1);r[0]=0,r[1]=No(e[0]);let t=r[1];for(let i=2;i!==r.length;++i){let a=e[i-1],o=No(a);t+=o,r[i]=r[i-1]+t}return new Uint32Array(r)}function bie(e,r,t){let i=new Int32Array(t+1);i[0]=0;let a=1,o=i[0];for(let s=0;s<r;s++){let l=e[s],n=e[s+r];n=No(n);for(let u=a;u<a+l;u++)i[u]=n+o,o=i[u];a+=l}return i}function wie(e,r,t){let i=new Uint32Array(t+1);i[0]=0;let a=1,o=i[0];for(let s=0;s<r;s++){let l=e[s],n=e[s+r];for(let u=a;u<a+l;u++)i[u]=n+o,o=i[u];a+=l}return i}function Tie(e,r,t){let i=new Int32Array(t),a=0,o=0;for(let s=0;s<r;s++){let l=e[s],n=e[s+r],u=No(n);for(let c=0;c<l;c++)o+=u,i[a++]=o}return i}function Aie(e,r,t){let i=new BigInt64Array(t),a=0,o=BigInt("0");for(let s=0;s<r;s++){let l=Number(e[s]),n=e[s+r],u=Qu(n);for(let c=0;c<l;c++)o+=u,i[a++]=o}return i}function GF(e){let r=new Uint32Array(e.length);r[0]=No(e[0])>>>0;for(let t=1;t<e.length;t++)r[t]=r[t-1]+No(e[t])>>>0;return r}function HF(e){let r=new BigUint64Array(e.length);r[0]=BigInt.asUintN(64,Qu(e[0]));for(let t=1;t<e.length;t++)r[t]=BigInt.asUintN(64,r[t-1]+Qu(e[t]));return r}function Mie(e){if(e.length<2)return new Uint32Array(e);let r=new Uint32Array(e.length);r[0]=No(e[0])>>>0,r[1]=No(e[1])>>>0;for(let t=2;t<e.length;t+=2)r[t]=r[t-2]+No(e[t])>>>0,r[t+1]=r[t-1]+No(e[t+1])>>>0;return r}function Sie(e,r,t,i){let a=VF(e,r,t,i);return new Uint32Array(a)}function Eie(e){return e[1]}function kie(e){return No(e[1])}function Cie(e){if(e.length===2){let r=No(e[1]);return[r,r]}return[No(e[2]),No(e[3])]}function Die(e){return e[1]}function Lie(e){return Qu(e[1])}function Fie(e){if(e.length===2){let r=Qu(e[1]);return[r,r]}return[Qu(e[2]),Qu(e[3])]}function Ys(e,r){let t=Rie(e,r);return t.logicalLevelTechnique1===fo.MORTON?Pie(t,e,r):(fo.RLE===t.logicalLevelTechnique1||fo.RLE===t.logicalLevelTechnique2)&&Of.NONE!==t.physicalLevelTechnique?Iie(t,e,r):t}function Pie(e,r,t){let i=Ju(r,t,2);return{physicalStreamType:e.physicalStreamType,logicalStreamType:e.logicalStreamType,logicalLevelTechnique1:e.logicalLevelTechnique1,logicalLevelTechnique2:e.logicalLevelTechnique2,physicalLevelTechnique:e.physicalLevelTechnique,numValues:e.numValues,byteLength:e.byteLength,decompressedCount:e.decompressedCount,numBits:i[0],coordinateShift:i[1]}}function Iie(e,r,t){let i=Ju(r,t,2);return{physicalStreamType:e.physicalStreamType,logicalStreamType:e.logicalStreamType,logicalLevelTechnique1:e.logicalLevelTechnique1,logicalLevelTechnique2:e.logicalLevelTechnique2,physicalLevelTechnique:e.physicalLevelTechnique,numValues:e.numValues,byteLength:e.byteLength,decompressedCount:i[1],runs:i[0],numRleValues:i[1]}}function Rie(e,r){let t=e[r.get()],i=h5[t>>4],a={};switch(i){case El.DATA:a={dictionaryType:p5[t&15]};break;case El.OFFSET:a={offsetType:v5[t&15]};break;case El.LENGTH:a={lengthType:m5[t&15]}}r.increment();let o=e[r.get()],s=DA[o>>5],l=DA[o>>2&7],n=d5[o&3];r.increment();let u=Ju(e,r,2),c=u[0],f=u[1];return{physicalStreamType:i,logicalStreamType:a,logicalLevelTechnique1:s,logicalLevelTechnique2:l,physicalLevelTechnique:n,numValues:c,byteLength:f,decompressedCount:c}}function V0(e,r,t){if(!r)return e;let i=r.size(),a=e.constructor,o=new a(i),s=0;for(let l=0;l<i;l++)o[l]=r.get(l)?e[s++]:t;return o}function zie(e,r,t){if(!t)return e;let i=t.size(),a=new yh(e,r),o=new yh(new Uint8Array(Math.ceil(i/8)),i),s=0;for(let l=0;l<i;l++){let n=t.get(l)?a.get(s++):!1;o.set(l,n)}return o.getBuffer()}function $F(e,r,t){for(let i=0;i<e;i++){let a=Ys(r,t);t.add(a.byteLength)}}function fm(e,r,t,i,a){let o=Bie(e,Math.ceil(r/8),t,i);return a?zie(o,r,a):o}function Bie(e,r,t,i){let a=new Uint8Array(r),o=0,s=i.get()+t;for(;o<r&&!(i.get()>=s);){let l=e[i.increment()];if(l<=127){let n=l+3,u=e[i.increment()],c=Math.min(o+n,r);a.fill(u,o,c),o=c}else{let n=256-l;for(let u=0;u<n&&o<r;u++)a[o++]=e[i.increment()]}}return i.set(s),a}function WF(e,r,t,i){let a=r.get(),o=a+t*Float32Array.BYTES_PER_ELEMENT,s=new Uint8Array(e.subarray(a,o)).buffer,l=new Float32Array(s);return r.set(o),i?V0(l,i,0):l}function YF(e,r,t,i){let a=r.get(),o=a+t*Float64Array.BYTES_PER_ELEMENT,s=new Uint8Array(e.subarray(a,o)).buffer,l=new Float64Array(s);return r.set(o),i?V0(l,i,0):l}function Oie(e,r,t){let i=r.get(),a=t*Uint32Array.BYTES_PER_ELEMENT,o=new DataView(e.buffer,e.byteOffset,e.byteLength),s=new Uint32Array(t);for(let l=0;l<t;l++)s[l]=o.getUint32(i+l*Uint32Array.BYTES_PER_ELEMENT,!0);return r.add(a),s}function Nie(e,r,t){let i=r.get(),a=t*BigUint64Array.BYTES_PER_ELEMENT,o=new DataView(e.buffer,e.byteOffset,e.byteLength),s=new BigUint64Array(t);for(let l=0;l<t;l++)s[l]=o.getBigUint64(i+l*BigUint64Array.BYTES_PER_ELEMENT,!0);return r.add(a),s}function J6(e,r,t){return t-r>=12?g5.decode(e.subarray(r,t)):jie(e,r,t)}function jie(e,r,t){let i="",a=r;for(;a<t;){let o=e[a],s=null,l=o>239?4:o>223?3:o>191?2:1;if(a+l>t)break;let n,u,c;l===1?o<128&&(s=o):l===2?(n=e[a+1],(n&192)==128&&(s=(o&31)<<6|n&63,s<=127&&(s=null))):l===3?(n=e[a+1],u=e[a+2],(n&192)==128&&(u&192)==128&&(s=(o&15)<<12|(n&63)<<6|u&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):l===4&&(n=e[a+1],u=e[a+2],c=e[a+3],(n&192)==128&&(u&192)==128&&(c&192)==128&&(s=(o&15)<<18|(n&63)<<12|(u&63)<<6|c&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,l=1):s>65535&&(s-=65536,i+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),i+=String.fromCharCode(s),a+=l}return i}function xx(e,r,t,i,a){return Hie(hm(e,r,t),t,i,a)}function ec(e,r,t,i,a){return $ie(hm(e,r,t),t,i,a)}function $p(e,r,t){return Yie(hm(e,r,t),t)}function hm(e,r,t){let i=t.physicalLevelTechnique;switch(i){case Of.FAST_PFOR:return uie(e,t.numValues,t.byteLength,r);case Of.VARINT:return Ju(e,r,t.numValues);case Of.NONE:return Oie(e,r,t.numValues);default:throw Error(`Specified physicalLevelTechnique ${i} is not supported (yet).`)}}function fg(e,r,t){let i=t.physicalLevelTechnique;switch(i){case Of.VARINT:return Y6(e,r,t.numValues);case Of.NONE:return Nie(e,r,t.numValues);default:throw Error(`Specified physicalLevelTechnique ${i} is not supported (yet).`)}}function Uie(e,r,t){let i=hm(e,r,t);return i.length===1?No(i[0]):kie(i)}function Q6(e,r,t){let i=hm(e,r,t);return i.length===1?t.logicalLevelTechnique1===fo.DELTA?No(i[0]):i[0]:Eie(i)}function XF(e,r,t){return Cie(hm(e,r,t))}function ZF(e,r,t){return Fie(Y6(e,r,t.numValues))}function KF(e,r,t,i){return QF(fg(e,r,t),t,i)}function eT(e,r,t,i){return eP(fg(e,r,t),t,i)}function qie(e,r,t,i){let a=Vie(e,r,t,!1);return i?V0(a,i,0):a}function Vie(e,r,t,i){if(t.physicalLevelTechnique===Of.VARINT)return Wie(oie(e,r,t.numValues),t,i);let a=fg(e,r,t),o=i?QF(a,t):eP(a,t);return Float64Array.from(o,Number)}function Gie(e,r,t){let i=fg(e,r,t);return i.length===1?Qu(i[0]):Lie(i)}function JF(e,r,t){let i=fg(e,r,t);return i.length===1?t.logicalLevelTechnique1===fo.DELTA?Qu(i[0]):i[0]:Die(i)}function Hie(e,r,t,i){let a;switch(r.logicalLevelTechnique1){case fo.DELTA:if(r.logicalLevelTechnique2===fo.RLE){let o=r;if(!i)return Tie(e,o.runs,o.numRleValues);e=X6(e,o.runs,o.numRleValues),a=UF(e)}else a=UF(e);break;case fo.RLE:a=vie(e,r.runs,r.numRleValues);break;case fo.MORTON:K6(e),a=new Int32Array(e);break;case fo.COMPONENTWISE_DELTA:if(t&&!i)return VF(e,t.scale,t.min,t.max);a=_ie(e);break;case fo.NONE:a=fie(e);break;default:throw Error(`The specified Logical level technique is not supported: ${r.logicalLevelTechnique1}`)}return i?V0(a,i,0):a}function $ie(e,r,t,i){let a;switch(r.logicalLevelTechnique1){case fo.DELTA:if(r.logicalLevelTechnique2===fo.RLE){let o=r;a=GF(X6(e,o.runs,o.numRleValues))}else a=GF(e);break;case fo.RLE:a=X6(e,r.runs,r.numRleValues);break;case fo.MORTON:K6(e),a=e;break;case fo.COMPONENTWISE_DELTA:a=t&&!i?Sie(e,t.scale,t.min,t.max):Mie(e);break;case fo.NONE:a=e;break;default:throw Error(`The specified Logical level technique is not supported: ${r.logicalLevelTechnique1}`)}return i?V0(a,i,0):a}function QF(e,r,t){let i;switch(r.logicalLevelTechnique1){case fo.DELTA:if(r.logicalLevelTechnique2===fo.RLE){let a=r;if(!t)return Aie(e,a.runs,a.numRleValues);e=Z6(e,a.runs,a.numRleValues),i=qF(e)}else i=qF(e);break;case fo.RLE:i=mie(e,r.runs,r.numRleValues);break;case fo.NONE:i=hie(e);break;default:throw Error(`The specified Logical level technique is not supported: ${r.logicalLevelTechnique1}`)}return t?V0(i,t,BigInt("0")):i}function eP(e,r,t){let i;switch(r.logicalLevelTechnique1){case fo.DELTA:if(r.logicalLevelTechnique2===fo.RLE){let a=r;i=HF(Z6(e,a.runs,a.numRleValues))}else i=HF(e);break;case fo.RLE:i=Z6(e,r.runs,r.numRleValues);break;case fo.NONE:i=e;break;default:throw Error(`The specified Logical level technique is not supported: ${r.logicalLevelTechnique1}`)}return t?V0(i,t,BigInt("0")):i}function Wie(e,r,t){switch(r.logicalLevelTechnique1){case fo.DELTA:if(r.logicalLevelTechnique2===fo.RLE){let i=r;e=jF(e,i.runs,i.numRleValues)}return pie(e),e;case fo.RLE:return Zie(e,r,t);case fo.NONE:return t&&die(e),e;default:throw Error(`The specified Logical level technique is not supported: ${r.logicalLevelTechnique1}`)}}function Yie(e,r){if(r.logicalLevelTechnique1===fo.DELTA&&r.logicalLevelTechnique2===fo.NONE)return xie(e);if(r.logicalLevelTechnique1===fo.RLE&&r.logicalLevelTechnique2===fo.NONE){let t=r;return wie(e,t.runs,t.numRleValues)}if(r.logicalLevelTechnique1===fo.NONE&&r.logicalLevelTechnique2===fo.NONE){yie(e);let t=new Uint32Array(r.numValues+1);return t[0]=0,t.set(e,1),t}if(r.logicalLevelTechnique1===fo.DELTA&&r.logicalLevelTechnique2===fo.RLE){let t=r,i=bie(e,t.runs,t.numRleValues);return K6(i),new Uint32Array(i)}throw Error("Only delta encoding is supported for transforming length to offset streams yet.")}function bx(e,r,t,i,a="int32"){let o=e.logicalLevelTechnique1;if(o===fo.RLE)return e.runs===1?js.CONST:js.FLAT;if(o!==fo.DELTA||e.logicalLevelTechnique2!==fo.RLE)return e.numValues===1?js.CONST:js.FLAT;let s=r instanceof yh?r.size():r,l=e;if(l.numRleValues!==s)return js.FLAT;if(l.runs===1)return js.SEQUENCE;if(l.runs!==2)return e.numValues===1?js.CONST:js.FLAT;let n=i.get();if(e.physicalLevelTechnique===Of.VARINT)return Xie(t,i,a)?js.SEQUENCE:e.numValues===1?js.CONST:js.FLAT;let u=i.get(),c=new Int32Array(t.buffer,t.byteOffset+u,4);return i.set(n),c[2]===2&&c[3]===2?js.SEQUENCE:e.numValues===1?js.CONST:js.FLAT}function Xie(e,r,t){let i=new kA(r.get());if(t==="int64"){let o=Y6(e,i,4);return o[2]===BigInt("2")&&o[3]===BigInt("2")}let a=Ju(e,i,4);return a[2]===2&&a[3]===2}function Zie(e,r,t){return t?gie(e,r.runs,r.numRleValues):jF(e,r.runs,r.numRleValues)}function tT(e,r,t){return{x:tP(e,r)-t,y:tP(e>>1,r)-t}}function tP(e,r){let t=0;for(let i=0;i<r;i++)t|=(e&1<<2*i)>>i;return t}function Kie(e){let r=Array(e.numGeometries),t=1,i=1,a=1,o=0,s=0,l=0,n=e.mortonSettings,u=e.topologyVector,c=u.geometryOffsets,f=u.partOffsets,h=u.ringOffsets,d=e.vertexOffsets,p=!d||d.length===0,g=e.containsPolygonGeometry(),m=e.vertexBuffer;for(let y=0;y<e.numGeometries;y++){let _=e.geometryType(y);switch(_){case Du.POINT:{let v,x;if(p)v=m[s++],x=m[s++];else if(e.vertexBufferType===e0.MORTON){let S=m[d[l++]],M=tT(S,n.numBits,n.coordinateShift);v=M.x,x=M.y}else{let S=d[l++]*2;v=m[S],x=m[S+1]}r[o++]=[[new Wr(v,x)]],c&&a++,f&&t++,h&&i++}break;case Du.MULTIPOINT:{let v=c[a]-c[a-1];a++;let x;if(p){x=Array(v);for(let S=0;S<v;S++){let M=m[s++],C=m[s++];x[S]=new Wr(M,C)}}else x=G0(e.vertexBufferType,m,d,l,v,!1,n),l+=v;r[o++]=x.map(S=>[S]),t+=v,i+=v}break;case Du.LINESTRING:{let v;g?(v=h[i]-h[i-1],i++):v=f[t]-f[t-1],t++;let x;p?(x=dm(m,s,v,!1),s+=v*2):(x=G0(e.vertexBufferType,m,d,l,v,!1,n),l+=v),r[o++]=[x],c&&a++}break;case Du.POLYGON:{let v=f[t]-f[t-1];t++;let x=Array(v-1),S,M=h[i]-h[i-1];if(i++,p){S=dm(m,s,M,!0),s+=M*2;for(let C=0;C<x.length;C++)M=h[i]-h[i-1],i++,x[C]=dm(m,s,M,!0),s+=M*2}else{S=G0(e.vertexBufferType,m,d,l,M,!0,n),l+=M;for(let C=0;C<x.length;C++)M=h[i]-h[i-1],i++,x[C]=G0(e.vertexBufferType,m,d,l,M,!0,n),l+=M}r[o++]=[S].concat(x),c&&a++}break;case Du.MULTILINESTRING:{let v=c[a]-c[a-1];a++;let x=Array(v);for(let S=0;S<v;S++){let M;if(g?(M=h[i]-h[i-1],i++):M=f[t]-f[t-1],t++,p)x[S]=dm(m,s,M,!1),s+=M*2;else{let C=G0(e.vertexBufferType,m,d,l,M,!1,n);x[S]=C,l+=M}}r[o++]=x}break;case Du.MULTIPOLYGON:{let v=c[a]-c[a-1];a++;let x=Array(v);for(let S=0;S<v;S++){let M=f[t]-f[t-1];t++;let C,w=Array(M-1),k=h[i]-h[i-1];i++,p?(C=dm(m,s,k,!0),s+=k*2):(C=G0(e.vertexBufferType,m,d,l,k,!0,n),l+=k);for(let A=0;A<w.length;A++){let b=h[i]-h[i-1];i++,p?(w[A]=dm(m,s,b,!0),s+=b*2):(w[A]=G0(e.vertexBufferType,m,d,l,b,!0,n),l+=b)}x[S]=[C].concat(w)}r[o++]=x.flat()}break;default:throw Error(`The specified geometry type (${_}) is currently not supported.`)}}return r}function G0(e,r,t,i,a,o,s){return e===e0.MORTON?Qie(r,t,i,a,o,s):Jie(r,t,i,a,o)}function dm(e,r,t,i){let a=Array(i?t+1:t);for(let o=0;o<t*2;o+=2){let s=e[r+o],l=e[r+o+1];a[o/2]=new Wr(s,l)}return i&&(a[a.length-1]=a[0]),a}function Jie(e,r,t,i,a){let o=Array(a?i+1:i);for(let s=0;s<i*2;s+=2){let l=r[t+s/2]*2,n=e[l],u=e[l+1];o[s/2]=new Wr(n,u)}return a&&(o[o.length-1]=o[0]),o}function Qie(e,r,t,i,a,o){let s=Array(a?i+1:i);for(let l=0;l<i;l++){let n=e[r[t+l]],u=tT(n,o.numBits,o.coordinateShift);s[l]=new Wr(u.x,u.y)}return a&&(s[s.length-1]=s[0]),s}function eae(e,r,t,i,a){return new IA(e,r,e0.VEC_2,t,i,a)}function tae(e,r,t,i,a,o){return new IA(e,r,e0.MORTON,t,i,a,o)}function rP(e,r,t,i){return new RA(e0.VEC_2,e,r,t,i)}function rae(e,r,t,i,a){return new RA(e0.MORTON,e,r,t,i,a)}function iP(e,r,t,i,a,o){return new _5(e,r,t,i,a,o)}function aP(e,r,t,i,a){return new x5(e,r,t,i,a)}function iae(e,r,t,i,a){let o=Ys(e,t),s=bx(o,i,e,t),l,n,u,c;if(s===js.CONST){let v=Q6(e,t,o),x,S,M,C;for(let w=0;w<r-1;w++){let k=Ys(e,t);switch(k.physicalStreamType){case El.LENGTH:switch(k.logicalStreamType.lengthType){case eu.GEOMETRIES:x=$p(e,t,k);break;case eu.PARTS:S=$p(e,t,k);break;case eu.RINGS:M=$p(e,t,k);break;case eu.TRIANGLES:C=$p(e,t,k)}break;case El.OFFSET:switch(k.logicalStreamType.offsetType){case Pd.VERTEX:l=ec(e,t,k);break;case Pd.INDEX:c=ec(e,t,k)}break;case El.DATA:if(gc.VERTEX===k.logicalStreamType.dictionaryType)n=xx(e,t,k,a);else{let A=k;u={numBits:A.numBits,coordinateShift:A.coordinateShift},n=ec(e,t,k,a)}}}return c?x!==void 0||S!==void 0?iP(i,v,C,c,n,{geometryOffsets:x,partOffsets:S,ringOffsets:M}):iP(i,v,C,c,n):u===void 0?eae(i,v,{geometryOffsets:x,partOffsets:S,ringOffsets:M},l,n):tae(i,v,{geometryOffsets:x,partOffsets:S,ringOffsets:M},l,n,u)}let f=ec(e,t,o),h,d,p,g;for(let v=0;v<r-1;v++){let x=Ys(e,t);switch(x.physicalStreamType){case El.LENGTH:switch(x.logicalStreamType.lengthType){case eu.GEOMETRIES:h=ec(e,t,x);break;case eu.PARTS:d=ec(e,t,x);break;case eu.RINGS:p=ec(e,t,x);break;case eu.TRIANGLES:g=$p(e,t,x)}break;case El.OFFSET:switch(x.logicalStreamType.offsetType){case Pd.VERTEX:l=ec(e,t,x);break;case Pd.INDEX:c=ec(e,t,x)}break;case El.DATA:if(gc.VERTEX===x.logicalStreamType.dictionaryType)n=xx(e,t,x,a);else{let S=x;u={numBits:S.numBits,coordinateShift:S.coordinateShift},n=ec(e,t,x,a)}}}let m,y,_;return h?(m=rT(f,h,2),d&&p?(y=nP(f,m,d,!1),_=nae(f,m,y,p)):d&&(y=aae(f,m,d))):d&&p?(y=rT(f,d,1),_=nP(f,y,p,!0)):d&&(y=rT(f,d,0)),c&&!y?aP(f,g,c,n):c?aP(f,g,c,n,{geometryOffsets:m,partOffsets:y,ringOffsets:_}):u===void 0?rP(f,{geometryOffsets:m,partOffsets:y,ringOffsets:_},l,n):rae(f,{geometryOffsets:m,partOffsets:y,ringOffsets:_},l,n,u)}function rT(e,r,t){let i=new Uint32Array(e.length+1),a=0;i[0]=a;let o=0;for(let s=0;s<e.length;s++)a=i[s+1]=a+(e[s]>t?r[o++]:1);return i}function nP(e,r,t,i){let a=new Uint32Array(r[r.length-1]+1),o=0;a[0]=o;let s=1,l=0;for(let n=0;n<e.length;n++){let u=e[n],c=r[n+1]-r[n];if(u===5||u===2||i&&(u===4||u===1))for(let f=0;f<c;f++)o=a[s++]=o+t[l++];else for(let f=0;f<c;f++)a[s++]=++o}return a}function aae(e,r,t){let i=new Uint32Array(r[r.length-1]+1),a=0;i[0]=a;let o=1,s=0;for(let l=0;l<e.length;l++){let n=e[l],u=r[l+1]-r[l];if(n===4||n===1)for(let c=0;c<u;c++)a=i[o++]=a+t[s++];else for(let c=0;c<u;c++)i[o++]=++a}return i}function nae(e,r,t,i){let a=new Uint32Array(t[t.length-1]+1),o=0;a[0]=o;let s=1,l=1,n=0;for(let u=0;u<e.length;u++){let c=e[u],f=r[u+1]-r[u];if(c!==0&&c!==3)for(let h=0;h<f;h++){let d=t[s]-t[s-1];s++;for(let p=0;p<d;p++)o=a[l++]=o+i[n++]}else for(let h=0;h<f;h++)a[l++]=++o,s++}return a}function oae(e,r){let t=0;for(let i=0;i<r.length;i++){let a=r[i];a===255?(t++,i++):t+=e[a]}return t}function sae(e,r,t){let i=new Uint32Array(r.length);for(let s=1;s<r.length;s++)i[s]=i[s-1]+r[s-1];let a=new Uint8Array(oae(r,t)),o=0;for(let s=0;s<t.length;s++){let l=t[s];if(l===255)s++,a[o++]=t[s];else{let n=r[l],u=i[l];for(;n-- >0;)a[o++]=e[u++]}}return a}function oP(e,r,t,i,a){var o,s;let l,n,u,c,f,h=a,d,p;for(let g=0;g<i;g++){let m=Ys(r,t);switch(m.physicalStreamType){case El.PRESENT:{let y=new yh(fm(r,m.numValues,m.byteLength,t),m.numValues);h=a??y;break}case El.OFFSET:n=ec(r,t,m,void 0,h);break;case El.LENGTH:{let y=$p(r,t,m);eu.DICTIONARY===m.logicalStreamType.lengthType?l=y:eu.SYMBOL===m.logicalStreamType.lengthType?c=y:d=y;break}case El.DATA:{let y=r.subarray(t.get(),t.get()+m.byteLength);t.add(m.byteLength);let _=m.logicalStreamType.dictionaryType;gc.FSST===_?f=y:gc.SINGLE===_||gc.SHARED===_?u=y:gc.NONE===_&&(p=y);break}}}return(s=(o=lae(e,f,n,l,u,c,h))!=null?o:uae(e,u,n,l,h))!=null?s:cae(e,d,p,n,h)}function lae(e,r,t,i,a,o,s){if(r){if(!t||!i||!a||!o)throw Error(`Incomplete FSST dictionary string column "${e}"`);return new NA(e,t,i,a,o,r,s)}}function uae(e,r,t,i,a){if(r){if(!t||!i)throw Error(`Incomplete dictionary string column "${e}"`);return a?new J0(e,t,i,r,a):new J0(e,t,i,r)}}function cae(e,r,t,i,a){if(r&&t){if(i)return a?new J0(e,i,r,t,a):new J0(e,i,r,t);if(a&&a.size()!==r.length-1){let o=new Uint32Array(a.size()),s=0;for(let l=0;l<a.size();l++)a.get(l)?o[l]=s++:o[l]=0;return new J0(e,o,r,t,a)}return a?new OA(e,r,t,a):new OA(e,r,t)}}function fae(e,r,t,i){let a,o,s,l,n=!1;for(;!n;){let d=Ys(e,r);switch(d.physicalStreamType){case El.LENGTH:eu.DICTIONARY===d.logicalStreamType.lengthType?a=$p(e,r,d):s=$p(e,r,d);break;case El.DATA:gc.SINGLE===d.logicalStreamType.dictionaryType||gc.SHARED===d.logicalStreamType.dictionaryType?(o=e.subarray(r.get(),r.get()+d.byteLength),n=!0):l=e.subarray(r.get(),r.get()+d.byteLength),r.add(d.byteLength)}}if(t.type!=="complexType")throw Error(`Shared dictionary column ${t.name} must be a complex (struct) column.`);if(!a||!o)throw Error(`Incomplete shared dictionary for column "${t.name}"`);let u=t.complexType.children,c=[],f=l?{}:void 0,h=0;for(let d of u){let p=Ju(e,r,1)[0];if(p===0)continue;let g=d.name?`${t.name}${d.name}`:t.name;if(i&&!i.has(g)){$F(p,e,r);continue}if(d.type!=="scalarField"||d.scalarField.physicalType!==Wo.STRING)throw Error("Currently only scalar string fields are implemented for a struct.");if(p>1&&!d.nullable||p===1&&d.nullable)throw Error(`The number of streams for the child field ${d.name} does not match its nullability. nullibilty: ${d.nullable}, numStreams: ${p}`);let m;if(d.nullable){let _=Ys(e,r);m=new yh(fm(e,_.numValues,_.byteLength,r),_.numValues)}let y=ec(e,r,Ys(e,r),void 0,m);if(l){if(!s)throw Error(`Incomplete shared FSST dictionary for column "${g}"`);c[h++]=new NA(g,y,a,o,s,l,m,f)}else c[h++]=new J0(g,y,a,o,m)}return c}function hae(e,r,t,i){let a=dae(t);if(i===0)return a.map(c=>new jA(c,[]));let o=pae(e,r,i),s=(o.presentStream?o.presentCount:o.lengthStream.length)/a.length,l=[],n=0,u=0;for(let c=0;c<a.length;c++){let f=_ae(o,c,s,n,u);l.push(new jA(a[c],f.value,f.nullabilityBuffer)),n=f.countsEnd,u=f.valuesEnd}return l}function dae(e){let r=e.type==="complexType"?e.complexType.children:void 0;return!r||r.length===0?[e.name]:r.map(t=>{var i;return e.name+((i=t.name)!=null?i:"")})}function pae(e,r,t){let i=e[r.get()];r.add(1);let a=ec(e,r,Ys(e,r)),o=t-1,s=[];i&Id.STRING&&(o-=vae(e,r,s)),o-=mae(e,r,i,s),o-=gae(e,r,i,s);let l,n=0;if(i&Id.PRESENCE){let c=yae(e,r);l=c.value,n=c.count,o--}let u=new Uint32Array;if(o>0&&(u=ec(e,r,Ys(e,r)),o--),o!==0)throw Error(`Unexpected number of remaining streams while decoding map column: ${o}`);return{lengthStream:a,dictionary:s,presentStream:l,presentCount:n,flattenedValues:u}}function vae(e,r,t){let i=e[r.get()];r.add(1);let a=oP("",e,r,i);if(a)for(let o=0;o<a.size;o++)t.push(a.getValue(o));return i}function mae(e,r,t,i){let a=0;return t&Id.INT32?(pm(i,xx(e,r,Ys(e,r))),a++):t&Id.INT64&&(pm(i,KF(e,r,Ys(e,r))),a++),t&Id.UINT32?(pm(i,ec(e,r,Ys(e,r))),a++):t&Id.UINT64&&(pm(i,eT(e,r,Ys(e,r))),a++),a}function gae(e,r,t,i){let a=0;return t&Id.FLOAT&&(pm(i,WF(e,r,Ys(e,r).numValues)),a++),t&Id.DOUBLE&&(pm(i,YF(e,r,Ys(e,r).numValues)),a++),a}function yae(e,r){let t=Ys(e,r);if(t.physicalStreamType!==El.PRESENT)throw Error(`Expected PRESENT stream for map column but found: ${t.physicalStreamType}`);let i=t.numValues,a=r.get(),o=new yh(fm(e,i,t.byteLength,r),i);return r.set(a+t.byteLength),{value:o,count:i}}function _ae(e,r,t,i,a){let{lengthStream:o,flattenedValues:s,presentStream:l,dictionary:n}=e,u=r*t,c=t,f;if(l){f=new yh(new Uint8Array(Math.ceil(t/8)),t),c=0;for(let _=0;_<t;_++)l.get(u+_)&&(f.set(_,!0),c++)}let h=i+c;if(h>o.length)throw Error("Merged map counts underflow while decoding child streams");let d=Array(t),p=i,g=a;for(let _=0;_<t;_++){if(l&&!l.get(u+_)){d[_]=null;continue}let v=g+o[p++];if(v>s.length)throw Error("Map value stream underflow while decoding feature payload");let x=xae(s,g,v,n);d[_]=x.value,g=x.nextIndex}let m=0;for(let _=i;_<h;_++)m+=o[_];let y=a+m;if(g!==y)throw Error("Unused flattened map values remain after decode");return{value:d,nullabilityBuffer:f,countsEnd:h,valuesEnd:y}}function xae(e,r,t,i){return t-r===1||e[r]===t0.START_LIST?iT(e,r,t,i):sP(e,r,t,i)}function sP(e,r,t,i){let a=Object.create(null),o=r;for(;o<t;){let s=uP(e[o++],i);if(typeof s!="string")throw Error(`Map key dictionary index does not resolve to a string: ${s}`);let l=iT(e,o,t,i);a[s]=l.value,o=l.nextIndex}return{value:a,nextIndex:o}}function iT(e,r,t,i){if(r>=t)throw Error("Unexpected end of map value stream");let a=e[r];if(a===t0.FALSE)return{value:!1,nextIndex:r+1};if(a===t0.TRUE)return{value:!0,nextIndex:r+1};if(a===t0.START_MAP){let o=lP(e,r,t);return{value:sP(e,r+2,o,i).value,nextIndex:o}}if(a===t0.START_LIST){let o=lP(e,r,t),s=[],l=r+2;for(;l<o;){let n=iT(e,l,o,i);s.push(n.value),l=n.nextIndex}return{value:s,nextIndex:o}}return{value:uP(a,i),nextIndex:r+1}}function lP(e,r,t){if(r+1>=t)throw Error("Missing length for nested map/list payload");let i=e[r+1];if(i<2)throw Error(`Invalid nested payload length: ${i}`);let a=r+i;if(a>t)throw Error("Nested payload exceeds containing payload bounds");return a}function uP(e,r){let t=e-t0.COUNT;if(t<0||t>=r.length)throw Error(`Scalar dictionary index out of range: ${e}`);return r[t]}function pm(e,r){for(let t of r)e.push(t)}function bae(e,r,t,i,a,o){var s;return t.type==="scalarType"?o&&!o.has(t.name)?($F(i,e,r),null):wae(i,e,r,a,t.scalarType,t):((s=t.complexType)==null?void 0:s.physicalType)===cp.MAP?hae(e,r,t,i):i===0?null:fae(e,r,t,o)}function wae(e,r,t,i,a,o){var s;let l;if(e===0)return null;if(o.nullable){let u=Ys(r,t),c=u.numValues,f=t.get(),h=fm(r,c,u.byteLength,t);t.set(f+u.byteLength),l=new yh(h,u.numValues)}let n=l??i;switch(a.physicalType){case Wo.UINT_32:case Wo.INT_32:return Eae(r,t,o,a,n);case Wo.STRING:{let u=o.nullable?e-1:e;return(s=oP(o.name,r,t,u,l))!=null?s:null}case Wo.BOOLEAN:return Tae(r,t,o,i,n);case Wo.UINT_64:case Wo.INT_64:return Sae(r,t,o,n,a);case Wo.FLOAT:return Aae(r,t,o,n);case Wo.DOUBLE:return Mae(r,t,o,n);default:throw Error(`The specified data type for the field is currently not supported: ${a}`)}}function Tae(e,r,t,i,a){let o=Ys(e,r),s=o.numValues,l=r.get(),n=hg(a)?a:void 0,u=fm(e,s,o.byteLength,r,n);r.set(l+o.byteLength);let c=new yh(u,s);return new b5(t.name,c,a)}function Aae(e,r,t,i){let a=Ys(e,r),o=hg(i)?i:void 0,s=WF(e,r,a.numValues,o);return new w5(t.name,s,i)}function Mae(e,r,t,i){let a=Ys(e,r),o=hg(i)?i:void 0,s=YF(e,r,a.numValues,o);return new Ub(t.name,s,i)}function Sae(e,r,t,i,a){let o=Ys(e,r),s=bx(o,i,e,r,"int64"),l=a.physicalType===Wo.INT_64;if(s===js.FLAT){let u=hg(i)?i:void 0,c=l?KF(e,r,o,u):eT(e,r,o,u);return new LA(t.name,c,i)}if(s===js.SEQUENCE){let u=ZF(e,r,o);return new FA(t.name,u[0],u[1],o.numRleValues,l)}let n=l?Gie(e,r,o):JF(e,r,o);return new BA(t.name,n,i,l)}function Eae(e,r,t,i,a){let o=Ys(e,r),s=bx(o,a,e,r),l=i.physicalType===Wo.INT_32;if(s===js.FLAT){let u=hg(a)?a:void 0,c=l?xx(e,r,o,void 0,u):ec(e,r,o,void 0,u);return new jb(t.name,c,a)}if(s===js.SEQUENCE){let u=XF(e,r,o);return new qb(t.name,u[0],u[1],o.numRleValues,l)}let n=l?Uie(e,r,o):Q6(e,r,o);return new Vb(t.name,n,a,l)}function hg(e){return e instanceof yh}function cP(e){switch(e){case tu.ID:case tu.ID|tu.ID_NULLABLE:case tu.ID|tu.ID_LONG:case tu.ID|tu.ID_LONG|tu.ID_NULLABLE:return{nullable:(e&tu.ID_NULLABLE)!==0,columnScope:zm.FEATURE,type:"scalarType",scalarType:{longID:(e&tu.ID_LONG)!==0,type:"logicalType",logicalType:EA.ID}};case tu.GEOMETRY:return{nullable:!1,columnScope:zm.FEATURE,type:"complexType",complexType:{type:"physicalType",physicalType:cp.GEOMETRY,children:[]}};case tu.STRUCT:return{nullable:!1,columnScope:zm.FEATURE,type:"complexType",complexType:{type:"physicalType",physicalType:cp.STRUCT,children:[]}};case tu.MAP:return{nullable:!0,columnScope:zm.FEATURE,type:"complexType",complexType:{type:"physicalType",physicalType:cp.MAP,children:[]}};default:return Fae(e)}}function kae(e){return e>=tu.SCALAR_BASE}function fP(e){return e===tu.STRUCT||e===tu.MAP}function Cae(e){if(e.type==="scalarType"){let r=e.scalarType;if(r.type==="physicalType")switch(r.physicalType){case Wo.BOOLEAN:case Wo.INT_8:case Wo.UINT_8:case Wo.INT_32:case Wo.UINT_32:case Wo.INT_64:case Wo.UINT_64:case Wo.FLOAT:case Wo.DOUBLE:return!1;case Wo.STRING:return!0;default:return!1}if(r.type==="logicalType")return!1}else if(e.type==="complexType"){let r=e.complexType;if(r.type==="physicalType")switch(r.physicalType){case cp.GEOMETRY:case cp.STRUCT:case cp.MAP:return!0;default:return!1}}return console.warn("Unexpected column type in hasStreamCount",e),!1}function Dae(e){var r;return e.type==="scalarType"&&((r=e.scalarType)==null?void 0:r.type)==="logicalType"&&e.scalarType.logicalType===EA.ID}function Lae(e){var r;return e.type==="complexType"&&((r=e.complexType)==null?void 0:r.type)==="physicalType"&&e.complexType.physicalType===cp.GEOMETRY}function Fae(e){let r;switch(e){case 10:case 11:r=Wo.BOOLEAN;break;case 12:case 13:r=Wo.INT_8;break;case 14:case 15:r=Wo.UINT_8;break;case 16:case 17:r=Wo.INT_32;break;case 18:case 19:r=Wo.UINT_32;break;case 20:case 21:r=Wo.INT_64;break;case 22:case 23:r=Wo.UINT_64;break;case 24:case 25:r=Wo.FLOAT;break;case 26:case 27:r=Wo.DOUBLE;break;case 28:case 29:r=Wo.STRING;break;default:return null}return{nullable:!!(e&1),columnScope:zm.FEATURE,type:"scalarType",scalarType:{longID:!1,type:"physicalType",physicalType:r}}}function aT(e,r){let t=Ju(e,r,1)[0];if(t===0)return"";let i=r.get(),a=i+t,o=e.subarray(i,a);return r.add(t),T5.decode(o)}function Pae(e){let r=e.name,t=e.nullable;return e.type==="scalarType"?{type:"scalarField",scalarField:e.scalarType,name:r,nullable:t}:{type:"complexField",complexField:e.complexType,name:r,nullable:t}}function hP(e,r){let t=Ju(e,r,1)[0]>>>0,i=t>=tu.SCALAR_BASE?cP(t):null;if(!i)throw Error(`Unsupported field type code ${t}. Supported: 10-29(scalars), 30(STRUCT), 31(MAP)`);let a=ar(Ot({},i),{name:aT(e,r)});if(a.type==="complexType"&&fP(t)){let o=a.complexType,s=Ju(e,r,1)[0]>>>0;o.children=Array(s);for(let l=0;l<s;l++)o.children[l]=hP(e,r)}return Pae(a)}function Iae(e,r){let t=Ju(e,r,1)[0]>>>0,i=cP(t);if(!i)throw Error(`Unsupported column type code ${t}. Supported: ${UA}`);let a;if(kae(t))a=aT(e,r);else if(t<tu.GEOMETRY)a="id";else if(t===tu.GEOMETRY)a="geometry";else throw Error(`Unsupported column type code ${t}. Supported: ${UA}`);let o=ar(Ot({},i),{name:a});if(o.type==="complexType"&&fP(t)){let s=Ju(e,r,1)[0]>>>0,l=o.complexType;l.children=Array(s);for(let n=0;n<s;n++)l.children[n]=hP(e,r)}return o}function Rae(e,r){let t={};t.featureTables=[];let i={};if(i.name=aT(e,r),i.name.length===0)throw Error("Missing layer name");let a=Ju(e,r,1)[0]>>>0,o=Ju(e,r,1)[0]>>>0;i.columns=Array(o);for(let s=0;s<o;s++)i.columns[s]=Iae(e,r);return t.featureTables.push(i),[t,a]}function zae(e,r,t=!0){let i=new kA(0),a=[];for(;i.get()<e.length;){let o=Ju(e,i,1)[0]>>>0,s=i.get()+o;if(s>e.length)throw Error(`Block overruns tile: ${s} > ${e.length}`);let l=Ju(e,i,1)[0]>>>0;if(l!==1&&l!==2){i.set(s);continue}let[n,u]=Rae(e,i),c=n.featureTables[0],f=null,h=null,d=[],p=0;for(let m of c.columns){let y=m.name;if(Dae(m)){let _=null;if(m.nullable){let x=Ys(e,i),S=i.get(),M=fm(e,x.numValues,x.byteLength,i);i.set(S+x.byteLength),_=new yh(M,x.numValues)}let v=Ys(e,i);p=_?_.size():v.decompressedCount,f=Bae(e,m,i,y,v,_??p,t)}else if(Lae(m)){let _=Ju(e,i,1)[0];if(p===0){let v=i.get();p=Ys(e,i).decompressedCount,i.set(v)}r&&(r.scale=r.extent/u),h=iae(e,_,i,p,r)}else{let _=Cae(m)?Ju(e,i,1)[0]:1;if(_===0)continue;let v=bae(e,i,m,_,p,void 0);if(v)if(Array.isArray(v))for(let x of v)d.push(x);else d.push(v)}}let g=new c5(c.name,h,f,d,u);a.push(g),i.set(s)}return a}function Bae(e,r,t,i,a,o,s=!1){var l;let n=(l=r.scalarType)!=null&&l.longID?Wo.UINT_64:Wo.UINT_32,u=typeof o=="number"?void 0:o,c=bx(a,o,e,t,n===Wo.UINT_64?"int64":"int32");if(n===Wo.UINT_32)switch(c){case js.FLAT:return new jb(i,ec(e,t,a,void 0,u),o);case js.SEQUENCE:{let f=XF(e,t,a);return new qb(i,f[0],f[1],a.numRleValues,!1)}case js.CONST:return new Vb(i,Q6(e,t,a),o,!1)}switch(c){case js.FLAT:return s?new Ub(i,qie(e,t,a,u),o):new LA(i,eT(e,t,a,u),o);case js.SEQUENCE:{let f=ZF(e,t,a);return new FA(i,f[0],f[1],a.numRleValues,!1)}case js.CONST:return new BA(i,JF(e,t,a),o,!1)}throw Error("Vector type not supported for id column.")}function Oae(e){return typeof e=="object"&&!!e&&"evaluate"in e}function dP(e,r,t,i,a){return $4(e,(o,s)=>{let l=r instanceof Mg?r.get(s):null;return Oae(l)?l.evaluate(t,i,void 0,a):l})}function Nae(e,r){return r-e}var pP,nT,vP,mP,gP,oT,wx,yP,_P,Tx,Ax,Ql,Mx,$h,Sd,dg,xP,sT,lT,bP,Bi,Sx,wP,uT,Ex,TP,AP,Wh,cT,fT,hT,vm,ff,kx,mm,MP,pg,vg,dT,SP,hf,Ln,Nl,pT,mi,EP,na,gm,Ra,so,Ao,dh,mg,Wp,co,kP,gg,ym,yg,_m,_g,xm,xg,CP,vT,mT,gT,Cx,yT,DP,LP,FP,PP,Gc,ro,IP,Dx,Ed,Yh,Xh,If,Xs,RP,Zh,Kh,op,Lx,H0,zP,_T,Fx,Rf,Zs,xT,bg,kd,bT,$0,wT,TT,BP,OP,NP,jP,UP,qP,AT,VP,GP,HP,$P,WP,YP,MT,XP,ZP,KP,Jh,Px,ST,ET,Ix,Rx,JP,zx,W0,Qh,QP,kT,Yp,Bx,Ox,bm,wg,CT,eI,DT,LT,tI,FT,rI,iI,Hc,PT,Nx,Cd,jx,ns,Ux,Tg,qx,Ag,IT,RT,aI,zf,Mg,Ha,Fn,wm,zT,Sg,vu,BT,Vx,ph,nI,oI,sI,Gx,lI,uI,Tm,il,Am,Eg,Hx,$x,Wx,Mm,Yx,Xx,Zx,Kx,Jx,Qx,eb,tb,rb,kg,ib,ab,Cg,nb,ob,sb,lb,ub,OT,NT,jT,UT,qT,VT,GT,HT,$T,WT,YT,XT,sp,cI,fI,hI,dI,pI,vI,mI,Y0,ZT,gI,yI,_I,KT,xI,bI,wI,ed,cb,TI,fb,AI,Ks,MI,SI,EI,kI,hb,JT,Dd,En,Xa,mo,vc,Sm,lp,QT,eA,CI,vh,Em,Xp,Ld,mh,up,tA,rA,iA,Zp,db,aA,nA,pb,DI,LI,FI,PI,II,RI,zI,oA,BI,OI,NI,vb,Rs,Dg,jI,UI,qI,VI,GI,HI,$I,WI,YI,XI,jl,km,ZI,KI,JI,mb,QI,Cm,gb,yb,yl,Lg,_b,xb,Bf,Dm,Kp,Lm,Fm,Fd,bb,wb,Pm,Im,eR,sA,tR,rR,iR,aR,nR,oR,sR,Tb,lR,uR,gh,cR,Rm,fR,hR,mc,An,lA,Qo,Jp,Ab,uA,dR,pR,vR,mR,gR,yR,_R,jae,xR,bR,Mb,wR,Sb,TR,AR,cA,fA,hA,MR,SR,ER,kR,dA,CR,Eb,DR,LR,FR,PR,IR,pA,RR,Fg,zR,BR,OR,vA,NR,mA,gA,kb,Cb,X0,jR,UR,Db,Lb,qR,VR,GR,Fb,Uae,yA,_A,Pb,HR,xA,bA,wA,Z0,Pg,$R,K0,Ib,Rb,WR,zb,Bb,Ig,YR,XR,ZR,KR,Ob,TA,AA,JR,QR,e5,t5,r5,i5,a5,n5,o5,s5,l5,Rg,zg,Cu,Nb,Bg,u5,MA,Qp,Og,jb,Ub,SA,qb,Vb,c5,zm,Wo,cp,EA,kA,fo,Of,Gb,Hb,CA,$b,f5,El,gc,Pd,eu,h5,DA,d5,p5,v5,m5,js,yh,g5,LA,FA,Du,y5,e0,PA,IA,RA,zA,_5,x5,b5,w5,BA,Wb,OA,J0,NA,jA,Id,t0,tu,T5,UA,A5,M5,S5,E5,k5,qae=Ir({"node_modules/maplibre-gl/dist/maplibre-gl-shared.mjs"(){pP=Object.create,nT=Object.defineProperty,vP=Object.getOwnPropertyDescriptor,mP=Object.getOwnPropertyNames,gP=Object.getPrototypeOf,oT=Object.prototype.hasOwnProperty,wx=(e,r)=>()=>(r||(e((r={exports:{}}).exports,r),e=null),r.exports),yP=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(var a=mP(r),o=0,s=a.length,l;o<s;o++)l=a[o],!oT.call(e,l)&&l!==t&&nT(e,l,{get:(n=>r[n]).bind(null,l),enumerable:!(i=vP(r,l))||i.enumerable});return e},_P=(e,r,t)=>(t=e==null?{}:pP(gP(e)),yP(r||!e||!e.__esModule||!oT.call(e,"default")?nT(t,"default",{value:e,enumerable:!0}):t,e)),Wr.prototype={clone(){return new Wr(this.x,this.y)},add(e){return this.clone()._add(e)},sub(e){return this.clone()._sub(e)},multByPoint(e){return this.clone()._multByPoint(e)},divByPoint(e){return this.clone()._divByPoint(e)},mult(e){return this.clone()._mult(e)},div(e){return this.clone()._div(e)},rotate(e){return this.clone()._rotate(e)},rotateAround(e,r){return this.clone()._rotateAround(e,r)},matMult(e){return this.clone()._matMult(e)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(e){return this.x===e.x&&this.y===e.y},dist(e){return Math.sqrt(this.distSqr(e))},distSqr(e){let r=e.x-this.x,t=e.y-this.y;return r*r+t*t},angle(){return Math.atan2(this.y,this.x)},angleTo(e){return Math.atan2(this.y-e.y,this.x-e.x)},angleWith(e){return this.angleWithSep(e.x,e.y)},angleWithSep(e,r){return Math.atan2(this.x*r-this.y*e,this.x*e+this.y*r)},_matMult(e){let r=e[0]*this.x+e[1]*this.y,t=e[2]*this.x+e[3]*this.y;return this.x=r,this.y=t,this},_add(e){return this.x+=e.x,this.y+=e.y,this},_sub(e){return this.x-=e.x,this.y-=e.y,this},_mult(e){return this.x*=e,this.y*=e,this},_div(e){return this.x/=e,this.y/=e,this},_multByPoint(e){return this.x*=e.x,this.y*=e.y,this},_divByPoint(e){return this.x/=e.x,this.y/=e.y,this},_unit(){return this._div(this.mag()),this},_perp(){let e=this.y;return this.y=this.x,this.x=-e,this},_rotate(e){let r=Math.cos(e),t=Math.sin(e),i=r*this.x-t*this.y,a=t*this.x+r*this.y;return this.x=i,this.y=a,this},_rotateAround(e,r){let t=Math.cos(e),i=Math.sin(e),a=r.x+t*(this.x-r.x)-i*(this.y-r.y),o=r.y+i*(this.x-r.x)+t*(this.y-r.y);return this.x=a,this.y=o,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:Wr},Wr.convert=function(e){if(e instanceof Wr)return e;if(Array.isArray(e))return new Wr(+e[0],+e[1]);if(e.x!==void 0&&e.y!==void 0)return new Wr(+e.x,+e.y);throw Error("Expected [x, y] or {x, y} point format")},Ql=typeof Float32Array<"u"?Float32Array:Array,Math.PI/180,180/Math.PI,Mx=PK,$h=IK,Sd=d9,dg=ap,(function(){var e=f9();return function(r,t,i,a,o,s){var l,n;for(t||(t=3),i||(i=0),n=a?Math.min(a*t+i,r.length):r.length,l=i;l<n;l+=t)e[0]=r[l],e[1]=r[l+1],e[2]=r[l+2],o(e,e,s),r[l]=e[0],r[l+1]=e[1],r[l+2]=e[2];return r}})(),xP=GK,(function(){var e=qK();return function(r,t,i,a,o,s){var l,n;for(t||(t=4),i||(i=0),n=a?Math.min(a*t+i,r.length):r.length,l=i;l<n;l+=t)e[0]=r[l],e[1]=r[l+1],e[2]=r[l+2],e[3]=r[l+3],o(e,e,s),r[l]=e[0],r[l+1]=e[1],r[l+2]=e[2],r[l+3]=e[3];return r}})(),sT=VK,lT=$K,(function(){var e=f9(),r=h9(1,0,0),t=h9(0,1,0);return function(i,a,o){var s=Kl(a,o);return s<-.999999?(uf(e,r,a),dg(e)<1e-6&&uf(e,t,a),qc(e,e),WK(i,e,Math.PI),i):s>.999999?(i[0]=0,i[1]=0,i[2]=0,i[3]=1,i):(uf(e,a,o),i[0]=e[0],i[1]=e[1],i[2]=e[2],i[3]=1+s,lT(i,i))}})(),(function(){var e=p9(),r=p9();return function(t,i,a,o,s,l){return C_(e,i,s,l),C_(r,a,o,l),C_(t,e,r,2*l*(1-l)),t}})(),(function(){var e=u9();return function(r,t,i,a){return e[0]=i[0],e[3]=i[1],e[6]=i[2],e[1]=a[0],e[4]=a[1],e[7]=a[2],e[2]=-t[0],e[5]=-t[1],e[8]=-t[2],lT(r,XK(r,e))}})(),bP=ZK,(function(){var e=V4();return function(r,t,i,a,o,s){var l,n;for(t||(t=2),i||(i=0),n=a?Math.min(a*t+i,r.length):r.length,l=i;l<n;l+=t)e[0]=r[l],e[1]=r[l+1],o(e,e,s),r[l]=e[0],r[l+1]=e[1];return r}})(),Bi=8192,Sx=H4(.25,.1,.25,1),wP=1,uT={},Ex=null,TP=(e,r)=>Xr(null,null,function*(){let t=new Blob([new Uint8Array(e)],{type:"image/png"});try{return createImageBitmap(t,r)}catch(i){throw Error(`Could not load image because of ${Zu(i).message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`)}}),AP=e=>new Promise((r,t)=>{let i=new Image;i.onload=()=>{r(i),URL.revokeObjectURL(i.src),i.onload=null,window.requestAnimationFrame(()=>i.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=")},i.onerror=()=>t(Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."));let a=new Blob([new Uint8Array(e)],{type:"image/png"});i.src=URL.createObjectURL(a)}),Wh=85.051129,cT={touchstart:!0,touchmove:!0,touchmoveWindow:!0,touchend:!0,touchcancel:!0},fT={dblclick:!0,click:!0,mouseover:!0,mouseout:!0,mousedown:!0,mousemove:!0,mousemoveWindow:!0,mouseup:!0,mouseupWindow:!0,contextmenu:!0,wheel:!0},hT="AbortError",vm=class extends Error{constructor(e=hT){super(e instanceof Error?e.message:e),this.name=hT,e instanceof Error&&e.stack&&(this.stack=e.stack)}},ff={MAX_PARALLEL_IMAGE_REQUESTS:16,MAX_PARALLEL_IMAGE_REQUESTS_PER_FRAME:8,MAX_TILE_CACHE_ZOOM_LEVELS:5,REGISTERED_PROTOCOLS:{},WORKER_URL:""},kx="global-dispatcher",mm=class extends Error{constructor(e,r,t,i){super(`AJAXError: ${r} (${e}): ${t}`),this.status=e,this.statusText=r,this.url=t,this.body=i}},MP=e=>{var r;return e.startsWith("file:")||((r=X4())==null?void 0:r.startsWith("file:"))&&!/^\w+:/.test(e)},pg=function(e,r){return Xr(this,null,function*(){var t,i;if(e.url.includes("://")&&!/^https?:|^file:/.test(e.url)){let a=M9(e.url);if(a){let o=yield a(e,r);return!o.data&&e.type==="arrayBuffer"?yn(o,{data:new ArrayBuffer(0)}):o}if(Zv(self)&&((t=self.worker)!=null&&t.actor))return self.worker.actor.sendAsync({type:"GR",data:e,targetMapId:kx},r)}if(!MP(e.url)){if(fetch&&Request&&AbortController&&Object.hasOwn(Request.prototype,"signal"))return mJ(e,r);if(Zv(self)&&((i=self.worker)!=null&&i.actor))return self.worker.actor.sendAsync({type:"GR",data:e,mustQueue:!0,targetMapId:kx},r)}return gJ(e,r)})},vg=(e,r)=>pg(yn(e,{type:"json"}),r),dT=(e,r)=>pg(yn(e,{type:"arrayBuffer"}),r),SP=e=>{let r=window.document.createElement("video");return r.muted=!0,new Promise(t=>{r.onloadstart=()=>{t(r)};for(let i of e){let a=window.document.createElement("source");S9(i)||(r.crossOrigin="Anonymous"),a.src=i,r.appendChild(a)}})},hf=class{constructor(e,r={}){yn(this,r),this.type=e}},Ln=class extends hf{constructor(e,r={}){super("error",yn({error:e},r))}},Nl=class{on(e,r){return this._listeners||(this._listeners={}),E9(e,r,this._listeners),{unsubscribe:()=>{this.off(e,r)}}}off(e,r){return Z4(e,r,this._listeners),Z4(e,r,this._oneTimeListeners),this}once(e,r){return r?(this._oneTimeListeners||(this._oneTimeListeners={}),E9(e,r,this._oneTimeListeners),this):new Promise(t=>this.once(e,t))}fire(e,r){var t,i,a,o,s,l;let n=typeof e=="string"?new hf(e,r||{}):e,u=n.type;if(this.listens(u)){n.target=this;let c=(a=(i=(t=this._listeners)==null?void 0:t[u])==null?void 0:i.slice())!=null?a:[];for(let d of c)d.call(this,n);let f=(l=(s=(o=this._oneTimeListeners)==null?void 0:o[u])==null?void 0:s.slice())!=null?l:[];for(let d of f)Z4(u,d,this._oneTimeListeners),d.call(this,n);let h=this._eventedParent;h&&(yn(n,typeof this._eventedParentData=="function"?this._eventedParentData():this._eventedParentData),h.fire(n))}else n instanceof Ln&&console.error(n.error);return this}listens(e){var r,t,i,a,o;return!!((t=(r=this._listeners)==null?void 0:r[e])!=null&&t.length||(a=(i=this._oneTimeListeners)==null?void 0:i[e])!=null&&a.length||(o=this._eventedParent)!=null&&o.listens(e))}setEventedParent(e,r){return this._eventedParent=e,this._eventedParentData=r,this}},pT={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number",length:2},centerAltitude:{type:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},roll:{type:"number",default:0,units:"degrees"},state:{type:"state",default:{}},light:{type:"light"},sky:{type:"sky"},projection:{type:"projection"},terrain:{type:"terrain"},sources:{required:!0,type:"sources"},sprite:{type:"sprite"},glyphs:{type:"string"},"font-faces":{type:"fontFaces"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},encoding:{type:"enum",values:{mvt:{},mlt:{}},default:"mvt"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{},custom:{}},default:"mapbox"},redFactor:{type:"number",default:1},blueFactor:{type:"number",default:1},greenFactor:{type:"number",default:1},baseShift:{type:"number",default:0},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{required:!0,type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"filter"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},"color-relief":{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_color-relief","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"},"fill-extrusion-rounded-corner-distance":{type:"number",default:0,minimum:0,units:"meters","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image",{"!":"icon-overlap"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-overlap":{type:"enum",values:{never:{},always:{},cooperative:{}},requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"padding",default:[2],units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},"viewport-glyph":{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-variable-anchor-offset":{type:"variableAnchorOffsetCollection",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field",{"!":"text-overlap"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-overlap":{type:"enum",values:{never:{},always:{},cooperative:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-height-offset":{type:"number",default:0,units:"meters",requires:[{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-height-anchor":{type:"enum",values:{ground:{},absolute:{}},default:"ground",requires:["symbol-height-offset"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},"layout_color-relief":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},filter:{type:"boolean",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"expression_name",minimum:1},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},sky:{"sky-color":{type:"color","property-type":"data-constant",default:"#88C6FC",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-color":{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fog-color":{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fog-ground-blend":{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-fog-blend":{type:"number","property-type":"data-constant",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"sky-horizon-blend":{type:"number","property-type":"data-constant",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"atmosphere-blend":{type:"number","property-type":"data-constant",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number",minimum:0,default:1}},projection:{type:{type:"projectionDefinition",default:"mercator","property-type":"data-constant",transition:!1,expression:{interpolated:!0,parameters:["zoom"]}}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_color-relief","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-layer-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","global-state"]},"property-type":"data-constant"},"fill-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-layer-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","global-state"]},"property-type":"data-constant"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},resampling:{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"numberArray",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-altitude":{type:"numberArray",default:45,minimum:0,maximum:90,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"colorArray",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"colorArray",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-method":{type:"enum",values:{standard:{},basic:{},combined:{},igor:{},multidirectional:{}},default:"standard",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},resampling:{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},"paint_color-relief":{"color-relief-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"color-relief-color":{type:"color",transition:!1,expression:{interpolated:!0,parameters:["elevation"]},"property-type":"color-ramp"},resampling:{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}},interpolation:{type:"array",value:"interpolation_name",minimum:1},interpolation_name:{type:"enum",values:{linear:{syntax:{overloads:[{parameters:[],"output-type":"interpolation"}],parameters:[]}},exponential:{syntax:{overloads:[{parameters:["base"],"output-type":"interpolation"}],parameters:[{name:"base",type:"number literal"}]}},"cubic-bezier":{syntax:{overloads:[{parameters:["x1","y1","x2","y2"],"output-type":"interpolation"}],parameters:[{name:"x1",type:"number literal"},{name:"y1",type:"number literal"},{name:"x2",type:"number literal"},{name:"y2",type:"number literal"}]}}}}},mi=pT,EP=["type","source","source-layer","minzoom","maxzoom","filter","layout"],na=class{constructor(e,r,t,i,a="error"){this.message=(e?`${e}: `:"")+t,i&&(this.identifier=i),this.severity=a,r!=null&&r.__line__&&(this.line=r.__line__)}},gm={kind:"null"},Ra={kind:"number"},so={kind:"string"},Ao={kind:"boolean"},dh={kind:"color"},mg={kind:"projectionDefinition"},Wp={kind:"object"},co={kind:"value"},kP={kind:"error"},gg={kind:"collator"},ym={kind:"formatted"},yg={kind:"padding"},_m={kind:"colorArray"},_g={kind:"numberArray"},xm={kind:"resolvedImage"},xg={kind:"variableAnchorOffsetCollection"},CP=[gm,Ra,so,Ao,dh,mg,ym,Wp,pc(co),yg,_g,_m,xm,xg],vT=.96422,mT=.82521,gT=4/29,Cx=6/29,yT=3*Cx*Cx,DP=Math.PI/180,LP=180/Math.PI,FP=Object.hasOwn||function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},PP={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ro=(Gc=class{constructor(e,r,t,i=1,a=!0){this.r=e,this.g=r,this.b=t,this.a=i,a||(this.r*=i,this.g*=i,this.b*=i,i||this.overwriteGetter("rgb",[e,r,t,i]))}static parse(e){if(e instanceof Gc)return e;if(typeof e!="string")return;let r=bJ(e);if(r)return new Gc(...r,!1)}get rgb(){let{r:e,g:r,b:t,a:i}=this,a=i||1/0;return this.overwriteGetter("rgb",[e/a,r/a,t/a,i])}get hcl(){return this.overwriteGetter("hcl",yJ(this.rgb))}get lab(){return this.overwriteGetter("lab",C9(this.rgb))}overwriteGetter(e,r){return Object.defineProperty(this,e,{value:r}),r}toString(){let[e,r,t,i]=this.rgb;return`rgba(${[e,r,t].map(a=>Math.round(a*255)).join(",")},${i})`}static interpolate(e,r,t,i="rgb"){switch(i){case"rgb":{let[a,o,s,l]=Jv(e.rgb,r.rgb,t);return new Gc(a,o,s,l,!1)}case"hcl":{let[a,o,s,l]=e.hcl,[n,u,c,f]=r.hcl,h,d;if(!isNaN(a)&&!isNaN(n)){let _=n-a;n>a&&_>180?_-=360:n<a&&a-n>180&&(_+=360),h=a+t*_}else isNaN(a)?isNaN(n)?h=NaN:(h=n,(s===1||s===0)&&(d=u)):(h=a,(c===1||c===0)&&(d=o));let[p,g,m,y]=_J([h,d??qp(o,u,t),qp(s,c,t),qp(l,f,t)]);return new Gc(p,g,m,y,!1)}case"lab":{let[a,o,s,l]=D9(Jv(e.lab,r.lab,t));return new Gc(a,o,s,l,!1)}}}},Gc.black=new Gc(0,0,0,1),Gc.white=new Gc(1,1,1,1),Gc.transparent=new Gc(0,0,0,0),Gc.red=new Gc(1,0,0,1),Gc),IP=["bottom","center","top"],Dx=class{constructor(e,r,t,i,a,o){this.text=e,this.image=r,this.scale=t,this.fontStack=i,this.textColor=a,this.verticalAlign=o}},Ed=class cw{constructor(r){this.sections=r}static fromString(r){return new cw([new Dx(r,null,null,null,null,null)])}isEmpty(){return this.sections.length===0||!this.sections.some(r=>r.text.length!==0||r.image&&r.image.name.length!==0)}static factory(r){return r instanceof cw?r:cw.fromString(r)}toString(){return this.sections.length===0?"":this.sections.map(r=>r.text).join("")}},Yh=class gy{constructor(r){this.values=r.slice()}static parse(r){if(r instanceof gy)return r;if(typeof r=="number")return new gy([r,r,r,r]);if(Array.isArray(r)&&!(r.length<1||r.length>4)){for(let t of r)if(typeof t!="number")return;switch(r.length){case 1:r=[r[0],r[0],r[0],r[0]];break;case 2:r=[r[0],r[1],r[0],r[1]];break;case 3:r=[r[0],r[1],r[2],r[1]]}return new gy(r)}}toString(){return JSON.stringify(this.values)}static interpolate(r,t,i){return new gy(Jv(r.values,t.values,i))}},Xh=class yy{constructor(r){this.values=r.slice()}static parse(r){if(r instanceof yy)return r;if(typeof r=="number")return new yy([r]);if(Array.isArray(r)){for(let t of r)if(typeof t!="number")return;return new yy(r)}}toString(){return JSON.stringify(this.values)}static interpolate(r,t,i){return new yy(Jv(r.values,t.values,i))}},If=class _y{constructor(r){this.values=r.slice()}static parse(r){if(r instanceof _y)return r;if(typeof r=="string"){let i=ro.parse(r);return i?new _y([i]):void 0}if(!Array.isArray(r))return;let t=[];for(let i of r){if(typeof i!="string")return;let a=ro.parse(i);if(!a)return;t.push(a)}return new _y(t)}toString(){return JSON.stringify(this.values)}static interpolate(r,t,i,a="rgb"){let o=[];if(r.values.length!=t.values.length)throw Error(`colorArray: Arrays have mismatched length (${r.values.length} vs. ${t.values.length}), cannot interpolate.`);for(let s=0;s<r.values.length;s++)o.push(ro.interpolate(r.values[s],t.values[s],i,a));return new _y(o)}},Xs=class extends Error{constructor(e,r){super(e),this.name="RuntimeError",this.path=r}toJSON(){return this.message}},RP=new Set(["center","left","right","top","bottom","top-left","top-right","bottom-left","bottom-right"]),Zh=class fw{constructor(r){this.values=r.slice()}static parse(r){if(r instanceof fw)return r;if(!(!Array.isArray(r)||r.length<1||r.length%2!=0)){for(let t=0;t<r.length;t+=2){let i=r[t],a=r[t+1];if(typeof i!="string"||!RP.has(i)||!Array.isArray(a)||a.length!==2||typeof a[0]!="number"||typeof a[1]!="number")return}return new fw(r)}}toString(){return JSON.stringify(this.values)}static interpolate(r,t,i,a){let o=r.values,s=t.values;if(o.length!==s.length)throw new Xs(`Cannot interpolate values of different length. from: ${r.toString()}, to: ${t.toString()}`,a);let l=[];for(let n=0;n<o.length;n+=2){if(o[n]!==s[n])throw new Xs(`Cannot interpolate values containing mismatched anchors. from[${n}]: ${o[n]}, to[${n}]: ${s[n]}`,a);l.push(o[n]);let[u,c]=o[n+1],[f,h]=s[n+1];l.push([qp(u,f,i),qp(c,h,i)])}return new fw(l)}},Kh=class Dj{constructor(r){this.name=r.name,this.available=r.available}toString(){return this.name}static fromString(r){return r?new Dj({name:r,available:!1}):null}},op=class a1{constructor(r,t,i){this.from=r,this.to=t,this.transition=i}toString(){return this.from===this.to&&this.transition===1?this.from:JSON.stringify([this.from,this.to,this.transition])}static interpolate(r,t,i){return new a1(r,t,i)}static parse(r){if(r instanceof a1)return r;if(Array.isArray(r)&&r.length===3&&typeof r[0]=="string"&&typeof r[1]=="string"&&typeof r[2]=="number")return new a1(r[0],r[1],r[2]);if(typeof r=="object"&&typeof r.from=="string"&&typeof r.to=="string"&&typeof r.transition=="number")return new a1(r.from,r.to,r.transition);if(typeof r=="string")return new a1(r,r,1)}},Lx=class{constructor(e,r,t){this.sensitivity=e?r?"variant":"case":r?"accent":"base",this.locale=t,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(e,r){return this.collator.compare(e,r)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}},H0=class Lj{constructor(r,t){this.type=r,this.value=t}static parse(r,t){if(r.length!==2)return t.error(`'literal' expression requires exactly one argument, but found ${r.length-1} instead.`);if(!Qv(r[1]))return t.error(`invalid value of type "${typeof r[1]}"`);let i=r[1],a=Ml(i),o=t.expectedType;return a.kind==="array"&&a.N===0&&o&&o.kind==="array"&&(typeof o.N!="number"||o.N===0)&&(a=o),new Lj(a,i)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}},zP=["Unknown","Point","LineString","Polygon"],_T=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache=new Map,this.availableImages=null,this.canonical=null}id(){return this.feature&&"id"in this.feature?this.feature.id:null}geometryType(){return this.feature?typeof this.feature.type=="number"?zP[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}parseColor(e){let r=this._parseColorCache.get(e);return r||(r=ro.parse(e),this._parseColorCache.set(e,r)),r}},Fx=class Fj{constructor(r,t,i,a){this.type=r,this.input=t,this.key=a,this.labels=[],this.outputs=[];for(let[o,s]of i)this.labels.push(o),this.outputs.push(s)}static parse(r,t){if(r.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${r.length-1}.`);if((r.length-1)%2!=0)return t.error("Expected an even number of arguments.");let i=t.parse(r[1],1,Ra);if(!i)return null;let a=[],o=null;t.expectedType&&t.expectedType.kind!=="value"&&(o=t.expectedType);for(let s=1;s<r.length;s+=2){let l=s===1?-1/0:r[s],n=r[s+1],u=s,c=s+1;if(typeof l!="number")return t.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.',u);if(a.length&&a[a.length-1][0]>=l)return t.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',u);let f=t.parse(n,c,o);if(!f)return null;o||(o=f.type),a.push([l,f])}return new Fj(o,i,a,t.key)}evaluate(r){let t=this.labels,i=this.outputs;if(t.length===1)return i[0].evaluate(r);let a=this.input.evaluate(r);if(a<=t[0])return i[0].evaluate(r);let o=t.length;return a>=t[o-1]?i[o-1].evaluate(r):i[R_(t,a,this.key)].evaluate(r)}eachChild(r){r(this.input);for(let t of this.outputs)r(t)}outputDefined(){return this.outputs.every(r=>r.outputDefined())}},Rf=class rE{constructor(r,t,i,a,o,s){this.type=r,this.operator=t,this.interpolation=i,this.input=a,this.key=s,this.labels=[],this.outputs=[];for(let[l,n]of o)this.labels.push(l),this.outputs.push(n)}static interpolationFactor(r,t,i,a){let o=0;if(r.name==="exponential")o=r6(t,r.base,i,a);else if(r.name==="linear")o=r6(t,1,i,a);else if(r.name==="cubic-bezier"){let s=r.controlPoints;o=TJ(s[0],s[1],s[2],s[3])(r6(t,1,i,a))}return o}static parse(r,t){let[i,a,o,...s]=r;if(!Array.isArray(a)||a.length===0)return t.error("Expected an interpolation type expression.",1);if(a[0]==="linear")a={name:"linear"};else if(a[0]==="exponential"){let u=a[1];if(typeof u!="number")return t.error("Exponential interpolation requires a numeric base.",1,1);a={name:"exponential",base:u}}else if(a[0]==="cubic-bezier"){let u=a.slice(1);if(u.length!==4||u.some(c=>typeof c!="number"||c<0||c>1))return t.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);a={name:"cubic-bezier",controlPoints:u}}else return t.error(`Unknown interpolation type ${String(a[0])}`,1,0);if(r.length-1<4)return t.error(`Expected at least 4 arguments, but found only ${r.length-1}.`);if((r.length-1)%2!=0)return t.error("Expected an even number of arguments.");if(o=t.parse(o,2,Ra),!o)return null;let l=[],n=null;(i==="interpolate-hcl"||i==="interpolate-lab")&&t.expectedType!=_m?n=dh:t.expectedType&&t.expectedType.kind!=="value"&&(n=t.expectedType);for(let u=0;u<s.length;u+=2){let c=s[u],f=s[u+1],h=u+3,d=u+4;if(typeof c!="number")return t.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.',h);if(l.length&&l[l.length-1][0]>=c)return t.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',h);let p=t.parse(f,d,n);if(!p)return null;n||(n=p.type),l.push([c,p])}return!Up(n,Ra)&&!Up(n,mg)&&!Up(n,dh)&&!Up(n,yg)&&!Up(n,_g)&&!Up(n,_m)&&!Up(n,xg)&&!Up(n,pc(Ra))?t.error(`Type ${ll(n)} is not interpolatable.`):new rE(n,i,a,o,l,t.key)}evaluate(r){let t=this.labels,i=this.outputs;if(t.length===1)return i[0].evaluate(r);let a=this.input.evaluate(r);if(a<=t[0])return i[0].evaluate(r);let o=t.length;if(a>=t[o-1])return i[o-1].evaluate(r);let s=R_(t,a,this.key),l=t[s],n=t[s+1],u=rE.interpolationFactor(this.interpolation,a,l,n),c=i[s].evaluate(r),f=i[s+1].evaluate(r);switch(this.operator){case"interpolate":switch(this.type.kind){case"number":return qp(c,f,u);case"color":return ro.interpolate(c,f,u);case"padding":return Yh.interpolate(c,f,u);case"colorArray":return If.interpolate(c,f,u);case"numberArray":return Xh.interpolate(c,f,u);case"variableAnchorOffsetCollection":return Zh.interpolate(c,f,u,this.key);case"array":return Jv(c,f,u);case"projectionDefinition":return op.interpolate(c,f,u)}case"interpolate-hcl":switch(this.type.kind){case"color":return ro.interpolate(c,f,u,"hcl");case"colorArray":return If.interpolate(c,f,u,"hcl")}case"interpolate-lab":switch(this.type.kind){case"color":return ro.interpolate(c,f,u,"lab");case"colorArray":return If.interpolate(c,f,u,"lab")}}}eachChild(r){r(this.input);for(let t of this.outputs)r(t)}outputDefined(){return this.outputs.every(r=>r.outputDefined())}},Zs={color:ro.interpolate,number:qp,padding:Yh.interpolate,numberArray:Xh.interpolate,colorArray:If.interpolate,variableAnchorOffsetCollection:Zh.interpolate,array:Jv},xT=class Pj{constructor(r){this.type=ym,this.sections=r}static parse(r,t){if(r.length<2)return t.error("Expected at least one argument.");let i=r[1];if(!Array.isArray(i)&&typeof i=="object")return t.error("First argument must be an image or text section.");let a=[],o=!1;for(let s=1;s<=r.length-1;++s){let l=r[s];if(o&&typeof l=="object"&&!Array.isArray(l)){o=!1;let n=null;if(l["font-scale"]&&(n=t.parse(l["font-scale"],1,Ra),!n))return null;let u=null;if(l["text-font"]&&(u=t.parse(l["text-font"],1,pc(so)),!u))return null;let c=null;if(l["text-color"]&&(c=t.parse(l["text-color"],1,dh),!c))return null;let f=null;if(l["vertical-align"]){if(typeof l["vertical-align"]=="string"&&!IP.includes(l["vertical-align"]))return t.error(`'vertical-align' must be one of: 'bottom', 'center', 'top' but found '${l["vertical-align"]}' instead.`);if(f=t.parse(l["vertical-align"],1,so),!f)return null}let h=a[a.length-1];h.scale=n,h.font=u,h.textColor=c,h.verticalAlign=f}else{let n=t.parse(r[s],1,co);if(!n)return null;let u=n.type.kind;if(u!=="string"&&u!=="value"&&u!=="null"&&u!=="resolvedImage")return t.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");o=!0,a.push({content:n,scale:null,font:null,textColor:null,verticalAlign:null})}}return new Pj(a)}evaluate(r){return new Ed(this.sections.map(t=>{let i=t.content.evaluate(r);return Ml(i)===xm?new Dx("",i,null,null,null,t.verticalAlign?t.verticalAlign.evaluate(r):null):new Dx(q1(i),null,t.scale?t.scale.evaluate(r):null,t.font?t.font.evaluate(r).join(","):null,t.textColor?t.textColor.evaluate(r):null,t.verticalAlign?t.verticalAlign.evaluate(r):null)}))}eachChild(r){for(let t of this.sections)r(t.content),t.scale&&r(t.scale),t.font&&r(t.font),t.textColor&&r(t.textColor),t.verticalAlign&&r(t.verticalAlign)}outputDefined(){return!1}},bg={string:so,number:Ra,boolean:Ao,object:Wp},kd=class Ij{constructor(r,t,i){this.type=r,this.args=t,this.key=i}static parse(r,t){if(r.length<2)return t.error("Expected at least one argument.");let i=1,a,o=r[0];if(o==="array"){let l;if(r.length>2){let u=r[1];if(typeof u!="string"||!(u in bg)||u==="object")return t.error('The item type argument of "array" must be one of string, number, boolean',1);l=bg[u],i++}else l=co;let n;if(r.length>3){if(r[2]!==null&&(typeof r[2]!="number"||r[2]<0||r[2]!==Math.floor(r[2])))return t.error('The length argument to "array" must be a positive integer literal',2);n=r[2],i++}a=pc(l,n)}else{if(!bg[o])throw Error(`Types doesn't contain name = ${o}`);a=bg[o]}let s=[];for(;i<r.length;i++){let l=t.parse(r[i],i,co);if(!l)return null;s.push(l)}return new Ij(a,s,t.key)}evaluate(r){for(let t=0;t<this.args.length;t++){let i=this.args[t].evaluate(r);if(!j1(this.type,Ml(i)))return i;if(t===this.args.length-1)throw new Xs(`Expected value to be of type ${ll(this.type)}, but found ${ll(Ml(i))} instead.`,this.key)}throw Error()}eachChild(r){this.args.forEach(r)}outputDefined(){return this.args.every(r=>r.outputDefined())}},bT={"to-boolean":Ao,"to-color":dh,"to-number":Ra,"to-string":so},$0=class Rj{constructor(r,t,i){this.type=r,this.args=t,this.key=i}static parse(r,t){if(r.length<2)return t.error("Expected at least one argument.");let i=r[0];if(!bT[i])throw Error(`Can't parse ${i} as it is not part of the known types`);if((i==="to-boolean"||i==="to-string")&&r.length!==2)return t.error("Expected one argument.");let a=bT[i],o=[];for(let s=1;s<r.length;s++){let l=t.parse(r[s],s,co);if(!l)return null;o.push(l)}return new Rj(a,o,t.key)}evaluate(r){switch(this.type.kind){case"boolean":return!!this.args[0].evaluate(r);case"color":{let t,i;for(let a of this.args){if(t=a.evaluate(r),i=null,t instanceof ro)return t;if(typeof t=="string"){let o=r.parseColor(t);if(o)return o}else if(Array.isArray(t)&&(i=t.length<3||t.length>4?`Invalid rgba value ${JSON.stringify(t)}: expected an array containing either three or four numeric values.`:P9(t[0],t[1],t[2],t[3]),!i))return new ro(t[0]/255,t[1]/255,t[2]/255,t[3])}throw new Xs(i||`Could not parse color from value '${typeof t=="string"?t:JSON.stringify(t)}'`,this.key)}case"padding":{let t;for(let i of this.args){t=i.evaluate(r);let a=Yh.parse(t);if(a)return a}throw new Xs(`Could not parse padding from value '${typeof t=="string"?t:JSON.stringify(t)}'`,this.key)}case"numberArray":{let t;for(let i of this.args){t=i.evaluate(r);let a=Xh.parse(t);if(a)return a}throw new Xs(`Could not parse numberArray from value '${typeof t=="string"?t:JSON.stringify(t)}'`,this.key)}case"colorArray":{let t;for(let i of this.args){t=i.evaluate(r);let a=If.parse(t);if(a)return a}throw new Xs(`Could not parse colorArray from value '${typeof t=="string"?t:JSON.stringify(t)}'`,this.key)}case"variableAnchorOffsetCollection":{let t;for(let i of this.args){t=i.evaluate(r);let a=Zh.parse(t);if(a)return a}throw new Xs(`Could not parse variableAnchorOffsetCollection from value '${typeof t=="string"?t:JSON.stringify(t)}'`,this.key)}case"number":{let t=null;for(let i of this.args){if(t=i.evaluate(r),t===null)return 0;let a=Number(t);if(!isNaN(a))return a}throw new Xs(`Could not convert ${JSON.stringify(t)} to number.`,this.key)}case"formatted":return Ed.fromString(q1(this.args[0].evaluate(r)));case"resolvedImage":return Kh.fromString(q1(this.args[0].evaluate(r)));case"projectionDefinition":{let t=this.args[0].evaluate(r);if(op.parse(t))return t;throw new Xs(`Could not parse projectionDefinition from value '${typeof t=="string"?t:JSON.stringify(t)}'`,this.key)}default:return q1(this.args[0].evaluate(r))}}eachChild(r){this.args.forEach(r)}outputDefined(){return this.args.every(r=>r.outputDefined())}},wT=class zj{constructor(r,t){this.type=t.type,this.bindings=[].concat(r),this.result=t}evaluate(r){return this.result.evaluate(r)}eachChild(r){for(let t of this.bindings)r(t[1]);r(this.result)}static parse(r,t){if(r.length<4)return t.error(`Expected at least 3 arguments, but found ${r.length-1} instead.`);let i=[];for(let o=1;o<r.length-1;o+=2){let s=r[o];if(typeof s!="string")return t.error(`Expected string, but found ${typeof s} instead.`,o);if(/[^a-zA-Z0-9_]/.test(s))return t.error("Variable names must contain only alphanumeric characters or '_'.",o);let l=t.parse(r[o+1],o+1);if(!l)return null;i.push([s,l])}let a=t.parse(r[r.length-1],r.length-1,t.expectedType,i);return a?new zj(i,a):null}outputDefined(){return this.result.outputDefined()}},TT=class Bj{constructor(r,t){this.type=t.type,this.name=r,this.boundExpression=t}static parse(r,t){if(r.length!==2||typeof r[1]!="string")return t.error("'var' expression requires exactly one string literal argument.");let i=r[1];return t.scope.has(i)?new Bj(i,t.scope.get(i)):t.error(`Unknown variable "${i}". Make sure "${i}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(r){return this.boundExpression.evaluate(r)}eachChild(){}outputDefined(){return!1}},BP=class Oj{constructor(r,t,i,a){this.type=r,this.index=t,this.input=i,this.key=a}static parse(r,t){if(r.length!==3)return t.error(`Expected 2 arguments, but found ${r.length-1} instead.`);let i=t.parse(r[1],1,Ra),a=t.parse(r[2],2,pc(t.expectedType||co));if(!i||!a)return null;let o=a.type;return new Oj(o.itemType,i,a,t.key)}evaluate(r){let t=this.index.evaluate(r),i=this.input.evaluate(r);if(t<0)throw new Xs(`Array index out of bounds: ${t} < 0.`,this.key);if(t>=i.length)throw new Xs(`Array index out of bounds: ${t} > ${i.length-1}.`,this.key);if(t!==Math.floor(t))throw new Xs(`Array index must be an integer, but found ${t} instead.`,this.key);return i[t]}eachChild(r){r(this.index),r(this.input)}outputDefined(){return!1}},OP=class Nj{constructor(r,t,i){this.needle=r,this.haystack=t,this.key=i,this.type=Ao}static parse(r,t){if(r.length!==3)return t.error(`Expected 2 arguments, but found ${r.length-1} instead.`);let i=t.parse(r[1],1,co),a=t.parse(r[2],2,co);return!i||!a?null:K4(i.type,[Ao,so,Ra,gm,co])?new Nj(i,a,t.key):t.error(`Expected first argument to be of type boolean, string, number or null, but found ${ll(i.type)} instead`)}evaluate(r){let t=this.needle.evaluate(r),i=this.haystack.evaluate(r);if(!i)return!1;if(!I0(t,["boolean","string","number","null"]))throw new Xs(`Expected first argument to be of type boolean, string, number or null, but found ${ll(Ml(t))} instead.`,this.key);if(!I0(i,["string","array"]))throw new Xs(`Expected second argument to be of type array or string, but found ${ll(Ml(i))} instead.`,this.key);return i.indexOf(t)>=0}eachChild(r){r(this.needle),r(this.haystack)}outputDefined(){return!0}},NP=class iE{constructor(r,t,i,a){this.needle=r,this.haystack=t,this.key=i,this.fromIndex=a,this.type=Ra}static parse(r,t){if(r.length<=2||r.length>=5)return t.error(`Expected 2 or 3 arguments, but found ${r.length-1} instead.`);let i=t.parse(r[1],1,co),a=t.parse(r[2],2,co);if(!i||!a)return null;if(!K4(i.type,[Ao,so,Ra,gm,co]))return t.error(`Expected first argument to be of type boolean, string, number or null, but found ${ll(i.type)} instead`);if(r.length===4){let o=t.parse(r[3],3,Ra);return o?new iE(i,a,t.key,o):null}return new iE(i,a,t.key)}evaluate(r){let t=this.needle.evaluate(r),i=this.haystack.evaluate(r);if(!I0(t,["boolean","string","number","null"]))throw new Xs(`Expected first argument to be of type boolean, string, number or null, but found ${ll(Ml(t))} instead.`,this.key);let a;if(this.fromIndex&&(a=this.fromIndex.evaluate(r)),I0(i,["string"])){let o=i.indexOf(t,a);return o===-1?-1:[...i.slice(0,o)].length}if(I0(i,["array"]))return i.indexOf(t,a);throw new Xs(`Expected second argument to be of type array or string, but found ${ll(Ml(i))} instead.`,this.key)}eachChild(r){r(this.needle),r(this.haystack),this.fromIndex&&r(this.fromIndex)}outputDefined(){return!1}},jP=class jj{constructor(r,t,i,a,o,s){this.inputType=r,this.type=t,this.input=i,this.cases=a,this.outputs=o,this.otherwise=s}static parse(r,t){if(r.length<5)return t.error(`Expected at least 4 arguments, but found only ${r.length-1}.`);if(r.length%2!=1)return t.error("Expected an even number of arguments.");let i,a;t.expectedType&&t.expectedType.kind!=="value"&&(a=t.expectedType);let o={},s=[];for(let u=2;u<r.length-1;u+=2){let c=r[u],f=r[u+1];Array.isArray(c)||(c=[c]);let h=t.concat(u);if(c.length===0)return h.error("Expected at least one branch label.");for(let p of c){if(typeof p!="number"&&typeof p!="string")return h.error("Branch labels must be numbers or strings.");if(typeof p=="number"&&Math.abs(p)>2**53-1)return h.error(`Branch labels must be integers no larger than ${2**53-1}.`);if(typeof p=="number"&&Math.floor(p)!==p)return h.error("Numeric branch labels must be integer values.");if(!i)i=Ml(p);else if(h.checkSubtype(i,Ml(p)))return null;if(o[String(p)]!==void 0)return h.error("Branch labels must be unique.");o[String(p)]=s.length}let d=t.parse(f,u,a);if(!d)return null;a||(a=d.type),s.push(d)}let l=t.parse(r[1],1,co);if(!l)return null;let n=t.parse(r[r.length-1],r.length-1,a);return!n||l.type.kind!=="value"&&t.concat(1).checkSubtype(i,l.type)?null:new jj(i,a,l,o,s,n)}evaluate(r){let t=this.input.evaluate(r);return(Ml(t)===this.inputType&&this.outputs[this.cases[t]]||this.otherwise).evaluate(r)}eachChild(r){r(this.input),this.outputs.forEach(r),r(this.otherwise)}outputDefined(){return this.outputs.every(r=>r.outputDefined())&&this.otherwise.outputDefined()}},UP=class Uj{constructor(r,t,i){this.type=r,this.branches=t,this.otherwise=i}static parse(r,t){if(r.length<4)return t.error(`Expected at least 3 arguments, but found only ${r.length-1}.`);if(r.length%2!=0)return t.error("Expected an odd number of arguments.");let i;t.expectedType&&t.expectedType.kind!=="value"&&(i=t.expectedType);let a=[];for(let s=1;s<r.length-1;s+=2){let l=t.parse(r[s],s,Ao);if(!l)return null;let n=t.parse(r[s+1],s+1,i);if(!n)return null;a.push([l,n]),i||(i=n.type)}let o=t.parse(r[r.length-1],r.length-1,i);if(!o)return null;if(!i)throw Error("Can't infer output type");return new Uj(i,a,o)}evaluate(r){for(let[t,i]of this.branches)if(t.evaluate(r))return i.evaluate(r);return this.otherwise.evaluate(r)}eachChild(r){for(let[t,i]of this.branches)r(t),r(i);r(this.otherwise)}outputDefined(){return this.branches.every(([r,t])=>t.outputDefined())&&this.otherwise.outputDefined()}},qP=class aE{constructor(r,t,i,a,o){this.type=r,this.input=t,this.beginIndex=i,this.key=a,this.endIndex=o}static parse(r,t){if(r.length<=2||r.length>=5)return t.error(`Expected 2 or 3 arguments, but found ${r.length-1} instead.`);let i=t.parse(r[1],1,co),a=t.parse(r[2],2,Ra);if(!i||!a)return null;if(!K4(i.type,[pc(co),so,co]))return t.error(`Expected first argument to be of type array or string, but found ${ll(i.type)} instead`);if(r.length===4){let o=t.parse(r[3],3,Ra);return o?new aE(i.type,i,a,t.key,o):null}return new aE(i.type,i,a,t.key)}evaluate(r){let t=this.input.evaluate(r),i=this.beginIndex.evaluate(r),a;if(this.endIndex&&(a=this.endIndex.evaluate(r)),I0(t,["string"]))return[...t].slice(i,a).join("");if(I0(t,["array"]))return t.slice(i,a);throw new Xs(`Expected first argument to be of type array or string, but found ${ll(Ml(t))} instead.`,this.key)}eachChild(r){r(this.input),r(this.beginIndex),this.endIndex&&r(this.endIndex)}outputDefined(){return!1}},AT=class nE{constructor(r,t){this.type=r,this.args=t}static parse(r,t){if(r.length<2)return t.error("Expected at least one argument.");let i=null,a=t.expectedType;a&&a.kind!=="value"&&(i=a);let o=[];for(let s of r.slice(1)){let l=t.parse(s,1+o.length,i,void 0,{typeAnnotation:"omit"});if(!l)return null;i||(i=l.type),o.push(l)}if(!i)throw Error("No output type");return a&&o.some(s=>j1(a,s.type))?new nE(co,o):new nE(i,o)}evaluate(r){let t=null,i=0,a;for(let o of this.args)if(i++,t=o.evaluate(r),t&&t instanceof Kh&&!t.available&&(a||(a=t.name),t=null,i===this.args.length&&(t=a)),t!==null)break;return t}eachChild(r){this.args.forEach(r)}outputDefined(){return this.args.every(r=>r.outputDefined())}},VP=em("==",EJ,z9),GP=em("!=",kJ,PJ),HP=em("<",CJ,IJ),$P=em(">",DJ,RJ),WP=em("<=",LJ,zJ),YP=em(">=",FJ,BJ),MT=class qj{constructor(r,t,i){this.type=gg,this.locale=i,this.caseSensitive=r,this.diacriticSensitive=t}static parse(r,t){if(r.length!==2)return t.error("Expected one argument.");let i=r[1];if(typeof i!="object"||Array.isArray(i))return t.error("Collator options argument must be an object.");let a=t.parse(i["case-sensitive"]!==void 0&&i["case-sensitive"],1,Ao);if(!a)return null;let o=t.parse(i["diacritic-sensitive"]!==void 0&&i["diacritic-sensitive"],1,Ao);if(!o)return null;let s=null;return i.locale&&(s=t.parse(i.locale,1,so),!s)?null:new qj(a,o,s)}evaluate(r){return new Lx(this.caseSensitive.evaluate(r),this.diacriticSensitive.evaluate(r),this.locale?this.locale.evaluate(r):null)}eachChild(r){r(this.caseSensitive),r(this.diacriticSensitive),this.locale&&r(this.locale)}outputDefined(){return!1}},XP=class Vj{constructor(r,t,i,a,o,s){this.type=so,this.number=r,this.locale=t,this.currency=i,this.unit=a,this.minFractionDigits=o,this.maxFractionDigits=s}static parse(r,t){if(r.length!==3)return t.error("Expected two arguments.");let i=t.parse(r[1],1,Ra);if(!i)return null;let a=r[2];if(typeof a!="object"||Array.isArray(a))return t.error("NumberFormat options argument must be an object.");let o=null;if(a.locale&&(o=t.parse(a.locale,1,so),!o))return null;let s=null;if(a.currency&&(s=t.parse(a.currency,1,so),!s))return null;let l=null;if(a.unit&&(l=t.parse(a.unit,1,so),!l))return null;if(s&&l)return t.error("NumberFormat options `currency` and `unit` are mutually exclusive");let n=null;if(a["min-fraction-digits"]&&(n=t.parse(a["min-fraction-digits"],1,Ra),!n))return null;let u=null;return a["max-fraction-digits"]&&(u=t.parse(a["max-fraction-digits"],1,Ra),!u)?null:new Vj(i,o,s,l,n,u)}evaluate(r){return new Intl.NumberFormat(this.locale?this.locale.evaluate(r):[],{style:this.currency?"currency":this.unit?"unit":"decimal",currency:this.currency?this.currency.evaluate(r):void 0,unit:this.unit?this.unit.evaluate(r):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(r):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(r):void 0}).format(this.number.evaluate(r))}eachChild(r){r(this.number),this.locale&&r(this.locale),this.currency&&r(this.currency),this.unit&&r(this.unit),this.minFractionDigits&&r(this.minFractionDigits),this.maxFractionDigits&&r(this.maxFractionDigits)}outputDefined(){return!1}},ZP=class Gj{constructor(r){this.type=xm,this.input=r}static parse(r,t){if(r.length!==2)return t.error("Expected two arguments.");let i=t.parse(r[1],1,so);return i?new Gj(i):t.error("No image name provided.")}evaluate(r){let t=this.input.evaluate(r),i=Kh.fromString(t);return i&&r.availableImages&&(i.available=r.availableImages.indexOf(t)>-1),i}eachChild(r){r(this.input)}outputDefined(){return!1}},KP=class Hj{constructor(r,t){this.input=r,this.key=t,this.type=Ra}static parse(r,t){if(r.length!==2)return t.error(`Expected 1 argument, but found ${r.length-1} instead.`);let i=t.parse(r[1],1);return i?i.type.kind!=="array"&&i.type.kind!=="string"&&i.type.kind!=="value"?t.error(`Expected argument of type string or array, but found ${ll(i.type)} instead.`):new Hj(i,t.key):null}evaluate(r){let t=this.input.evaluate(r);if(typeof t=="string")return[...t].length;if(Array.isArray(t))return t.length;throw new Xs(`Expected value to be of type string or array, but found ${ll(Ml(t))} instead.`,this.key)}eachChild(r){r(this.input)}outputDefined(){return!1}},Jh=8192,Px=class hw{constructor(r,t){this.type=Ao,this.geojson=r,this.geometries=t}static parse(r,t){if(r.length!==2)return t.error(`'within' expression requires exactly one argument, but found ${r.length-1} instead.`);if(Qv(r[1])){let i=r[1];if(i.type==="FeatureCollection"){let a=[];for(let o of i.features){let{type:s,coordinates:l}=o.geometry;s==="Polygon"&&a.push(l),s==="MultiPolygon"&&a.push(...l)}if(a.length)return new hw(i,{type:"MultiPolygon",coordinates:a})}else if(i.type==="Feature"){let a=i.geometry.type;if(a==="Polygon"||a==="MultiPolygon")return new hw(i,i.geometry)}else if(i.type==="Polygon"||i.type==="MultiPolygon")return new hw(i,i)}return t.error("'within' expression requires valid geojson object that contains polygon geometry type.")}evaluate(r){if(r.geometry()!=null&&r.canonicalID()!=null){if(r.geometryType()==="Point")return ZJ(r,this.geometries);if(r.geometryType()==="LineString")return KJ(r,this.geometries)}return!1}eachChild(){}outputDefined(){return!0}},ST=class{constructor(e=[],r=(t,i)=>t<i?-1:+(t>i)){if(this.data=e,this.length=this.data.length,this.compare=r,this.length>0)for(let t=(this.length>>1)-1;t>=0;t--)this._down(t)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(this.length===0)return;let e=this.data[0],r=this.data.pop();return--this.length>0&&(this.data[0]=r,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:r,compare:t}=this,i=r[e];for(;e>0;){let a=e-1>>1,o=r[a];if(t(i,o)>=0)break;r[e]=o,e=a}r[e]=i}_down(e){let{data:r,compare:t}=this,i=this.length>>1,a=r[e];for(;e<i;){let o=(e<<1)+1,s=o+1;if(s<this.length&&t(r[s],r[o])<0&&(o=s),t(r[o],a)>=0)break;r[e]=r[o],e=o}r[e]=a}},ET=Math.PI/180,Ix=class{constructor(e){let r=ET*6378.137*1e3,t=Math.cos(e*ET),i=1/(1-.0066943799901413165*(1-t*t)),a=Math.sqrt(i);this.kx=r*a*t,this.ky=r*a*i*.9933056200098587}distance(e,r){let t=this.wrap(e[0]-r[0])*this.kx,i=(e[1]-r[1])*this.ky;return Math.sqrt(t*t+i*i)}pointOnLine(e,r){let t=1/0,i,a,o,s;for(let l=0;l<e.length-1;l++){let n=e[l][0],u=e[l][1],c=this.wrap(e[l+1][0]-n)*this.kx,f=(e[l+1][1]-u)*this.ky,h=0;(c!==0||f!==0)&&(h=(this.wrap(r[0]-n)*this.kx*c+(r[1]-u)*this.ky*f)/(c*c+f*f),h>1?(n=e[l+1][0],u=e[l+1][1]):h>0&&(n+=c/this.kx*h,u+=f/this.ky*h)),c=this.wrap(r[0]-n)*this.kx,f=(r[1]-u)*this.ky;let d=c*c+f*f;d<t&&(t=d,i=n,a=u,o=l,s=h)}return{point:[i,a],index:o,t:Math.max(0,Math.min(1,s))}}wrap(e){for(;e<-180;)e+=360;for(;e>180;)e-=360;return e}},Rx=class dw{constructor(r,t){this.type=Ra,this.geojson=r,this.geometries=t}static parse(r,t){if(r.length!==2)return t.error(`'distance' expression requires exactly one argument, but found ${r.length-1} instead.`);if(Qv(r[1])){let i=r[1];if(i.type==="FeatureCollection")return new dw(i,i.features.map(a=>c6(a.geometry)).flat());if(i.type==="Feature")return new dw(i,c6(i.geometry));if("type"in i&&"coordinates"in i)return new dw(i,c6(i))}return t.error("'distance' expression requires valid geojson object that contains polygon geometry type.")}evaluate(r){if(r.geometry()!=null&&r.canonicalID()!=null){if(r.geometryType()==="Point")return iQ(r,this.geometries);if(r.geometryType()==="LineString")return aQ(r,this.geometries);if(r.geometryType()==="Polygon")return nQ(r,this.geometries)}return NaN}eachChild(){}outputDefined(){return!0}},JP=class $j{constructor(r){let t=null;for(let i of r)if(!t)t=i.type;else{if(t===i.type)continue;t=co;break}this.type=pc(t??co,r.length),this.arr=r}static parse(r,t){if(r.length!==2)return t.error(`'semiliteral' expression requires exactly one argument, but found ${r.length-1} instead.`);if(!Qv(r[1]))return t.error(`invalid value of type "${typeof r[1]}"`);let i=r[1],a=Ml(i);if(a.kind==="array"){let o=i.map(s=>t.parse(s,null,co));return new $j(o)}return new H0(a,i)}evaluate(r){return this.arr.map(t=>t.evaluate(r))}eachChild(r){this.arr.forEach(r)}outputDefined(){return this.arr.every(r=>r.outputDefined())}},zx=class Wj{constructor(r){this.key=r,this.type=co}static parse(r,t){if(r.length!==2)return t.error(`Expected 1 argument, but found ${r.length-1} instead.`);let i=r[1];return i==null?t.error("Global state property must be defined."):typeof i=="string"?new Wj(i):t.error(`Global state property must be string, but found ${typeof r[1]} instead.`)}evaluate(r){var t,i;let a=(t=r.globals)==null?void 0:t.globalState;return!a||Object.keys(a).length===0?null:(i=U1(a,this.key))!=null?i:null}eachChild(){}outputDefined(){return!1}},W0={"==":VP,"!=":GP,">":$P,"<":HP,">=":YP,"<=":WP,array:kd,at:BP,boolean:kd,case:UP,coalesce:AT,collator:MT,format:xT,image:ZP,in:OP,"index-of":NP,interpolate:Rf,"interpolate-hcl":Rf,"interpolate-lab":Rf,length:KP,let:wT,literal:H0,match:jP,number:kd,"number-format":XP,object:kd,semiliteral:JP,slice:qP,step:Fx,string:kd,"to-boolean":$0,"to-color":$0,"to-number":$0,"to-string":$0,var:TT,within:Px,distance:Rx,"global-state":zx},Qh=class extends Error{constructor(e,r){super(r),this.message=r,this.key=e}},QP=class Yj{constructor(r,t=[]){this.parent=r,this.bindings={};for(let[i,a]of t)this.bindings[i]=a}concat(r){return new Yj(this,r)}get(r){if(this.bindings[r])return this.bindings[r];if(this.parent)return this.parent.get(r);throw Error(`${r} not found in scope.`)}has(r){return this.bindings[r]?!0:this.parent?this.parent.has(r):!1}},kT=class Xj{constructor(r,t,i=[],a,o=new QP,s=[]){this.registry=r,this.path=i,this.key=i.map(l=>`[${l}]`).join(""),this.scope=o,this.errors=s,this.expectedType=a,this._isConstant=t}parse(r,t,i,a,o={}){return t?this.concat(t,i,a)._parse(r,o):this._parse(r,o)}_parse(r,t){(r===null||typeof r=="string"||typeof r=="boolean"||typeof r=="number")&&(r=["literal",r]);let i=this.key;function a(o,s,l){return l==="assert"?new kd(s,[o],i):l==="coerce"?new $0(s,[o],i):o}if(Array.isArray(r)){if(r.length===0)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');let o=r[0];if(typeof o!="string")return this.error(`Expression name must be a string, but found ${typeof o} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;let s=this.registry[o];if(s){let l=s.parse(r,this);if(!l)return null;if(this.expectedType){let n=this.expectedType,u=l.type;if((n.kind==="string"||n.kind==="number"||n.kind==="boolean"||n.kind==="object"||n.kind==="array")&&u.kind==="value")l=a(l,n,t.typeAnnotation||"assert");else if(n.kind==="projectionDefinition"&&["string","array","value"].includes(u.kind)||["color","formatted","resolvedImage"].includes(n.kind)&&["value","string"].includes(u.kind)||["padding","numberArray"].includes(n.kind)&&["value","number","array"].includes(u.kind)||n.kind==="colorArray"&&["value","string","array"].includes(u.kind)||n.kind==="variableAnchorOffsetCollection"&&["value","array"].includes(u.kind))l=a(l,n,t.typeAnnotation||"coerce");else if(this.checkSubtype(n,u))return null}if(!(l instanceof H0)&&l.type.kind!=="resolvedImage"&&this._isConstant(l)){let n=new _T;try{l=new H0(l.type,l.evaluate(n))}catch(u){return this.error(u.message),null}}return l}return this.error(`Unknown expression "${o}". If you wanted a literal array, use ["literal", [...]].`,0)}return r===void 0?this.error("'undefined' value invalid. Use null instead."):typeof r=="object"?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof r} instead.`)}concat(r,t,i){let a=typeof r=="number"?this.path.concat(r):this.path,o=i?this.scope.concat(i):this.scope;return new Xj(this.registry,this._isConstant,a,t||null,o,this.errors)}error(r,...t){let i=`${this.key}${t.map(a=>`[${a}]`).join("")}`;this.errors.push(new Qh(i,r))}checkSubtype(r,t){let i=j1(r,t);return i&&this.error(i),i}},Yp=class xy{constructor(r,t,i,a,o){this.name=r,this.type=t,this._evaluate=i,this.args=a,this.key=o}evaluate(r){return this._evaluate(r,this.args,this.key)}eachChild(r){this.args.forEach(r)}outputDefined(){return!1}static parse(r,t){let i=r[0],a=xy.definitions[i];if(!a)return t.error(`Unknown expression "${i}". If you wanted a literal array, use ["literal", [...]].`,0);let o=Array.isArray(a)?a[0]:a.type,s=Array.isArray(a)?[[a[1],a[2]]]:a.overloads,l=s.filter(([u])=>!Array.isArray(u)||u.length===r.length-1),n=null;for(let[u,c]of l){n=new kT(t.registry,q_,t.path,null,t.scope);let f=[],h=!1;for(let d=1;d<r.length;d++){let p=r[d],g=Array.isArray(u)?u[d-1]:u.type,m=n.parse(p,1+f.length,g);if(!m){h=!0;break}f.push(m)}if(!h){if(Array.isArray(u)&&u.length!==f.length){n.error(`Expected ${u.length} arguments, but found ${f.length} instead.`);continue}for(let d=0;d<f.length;d++){let p=Array.isArray(u)?u[d]:u.type,g=f[d];n.concat(d+1).checkSubtype(p,g.type)}if(n.errors.length===0)return new xy(i,o,c,f,t.key)}}if(l.length===1)t.errors.push(...n.errors);else{let u=(l.length?l:s).map(([f])=>sQ(f)).join(" | "),c=[];for(let f=1;f<r.length;f++){let h=t.parse(r[f],1+c.length);if(!h)return null;c.push(ll(h.type))}t.error(`Expected arguments of type ${u}, but found (${c.join(", ")}) instead.`)}return null}static register(r,t){xy.definitions=t;for(let i in t)r[i]=xy}},Yp.register(W0,{error:[kP,[so],(e,[r],t)=>{throw new Xs(r.evaluate(e),t)}],typeof:[so,[co],(e,[r])=>ll(Ml(r.evaluate(e)))],"to-rgba":[pc(Ra,4),[dh],(e,[r])=>{let[t,i,a,o]=r.evaluate(e).rgb;return[t*255,i*255,a*255,o]}],rgb:[dh,[Ra,Ra,Ra],W9],rgba:[dh,[Ra,Ra,Ra,Ra],W9],has:{type:Ao,overloads:[[[so],(e,[r])=>Y9(r.evaluate(e),e.properties())],[[so,Wp],(e,[r,t])=>Y9(r.evaluate(e),t.evaluate(e))]]},get:{type:co,overloads:[[[so],(e,[r])=>f6(r.evaluate(e),e.properties())],[[so,Wp],(e,[r,t])=>f6(r.evaluate(e),t.evaluate(e))]]},"feature-state":[co,[so],(e,[r])=>f6(r.evaluate(e),e.featureState||{})],properties:[Wp,[],e=>e.properties()],"geometry-type":[so,[],e=>e.geometryType()],id:[co,[],e=>e.id()],zoom:[Ra,[],e=>e.globals.zoom],"heatmap-density":[Ra,[],e=>e.globals.heatmapDensity||0],elevation:[Ra,[],e=>e.globals.elevation||0],"line-progress":[Ra,[],e=>e.globals.lineProgress||0],accumulated:[co,[],e=>e.globals.accumulated===void 0?null:e.globals.accumulated],"+":[Ra,z0(Ra),(e,r)=>{let t=0;for(let i of r)t+=i.evaluate(e);return t}],"*":[Ra,z0(Ra),(e,r)=>{let t=1;for(let i of r)t*=i.evaluate(e);return t}],"-":{type:Ra,overloads:[[[Ra,Ra],(e,[r,t])=>r.evaluate(e)-t.evaluate(e)],[[Ra],(e,[r])=>-r.evaluate(e)]]},"/":[Ra,[Ra,Ra],(e,[r,t])=>r.evaluate(e)/t.evaluate(e)],"%":[Ra,[Ra,Ra],(e,[r,t])=>r.evaluate(e)%t.evaluate(e)],ln2:[Ra,[],()=>Math.LN2],pi:[Ra,[],()=>Math.PI],e:[Ra,[],()=>Math.E],"^":[Ra,[Ra,Ra],(e,[r,t])=>r.evaluate(e)**+t.evaluate(e)],sqrt:[Ra,[Ra],(e,[r])=>Math.sqrt(r.evaluate(e))],log10:[Ra,[Ra],(e,[r])=>Math.log(r.evaluate(e))/Math.LN10],ln:[Ra,[Ra],(e,[r])=>Math.log(r.evaluate(e))],log2:[Ra,[Ra],(e,[r])=>Math.log(r.evaluate(e))/Math.LN2],sin:[Ra,[Ra],(e,[r])=>Math.sin(r.evaluate(e))],cos:[Ra,[Ra],(e,[r])=>Math.cos(r.evaluate(e))],tan:[Ra,[Ra],(e,[r])=>Math.tan(r.evaluate(e))],asin:[Ra,[Ra],(e,[r])=>Math.asin(r.evaluate(e))],acos:[Ra,[Ra],(e,[r])=>Math.acos(r.evaluate(e))],atan:[Ra,[Ra],(e,[r])=>Math.atan(r.evaluate(e))],min:[Ra,z0(Ra),(e,r)=>Math.min(...r.map(t=>t.evaluate(e)))],max:[Ra,z0(Ra),(e,r)=>Math.max(...r.map(t=>t.evaluate(e)))],abs:[Ra,[Ra],(e,[r])=>Math.abs(r.evaluate(e))],round:[Ra,[Ra],(e,[r])=>{let t=r.evaluate(e);return t<0?-Math.round(-t):Math.round(t)}],floor:[Ra,[Ra],(e,[r])=>Math.floor(r.evaluate(e))],ceil:[Ra,[Ra],(e,[r])=>Math.ceil(r.evaluate(e))],"filter-==":[Ao,[so,co],(e,[r,t])=>e.properties()[r.value]===t.value],"filter-id-==":[Ao,[co],(e,[r])=>e.id()===r.value],"filter-type-==":[Ao,[so],(e,[r])=>e.geometryType()===r.value],"filter-<":[Ao,[so,co],(e,[r,t])=>{let i=e.properties()[r.value],a=t.value;return typeof i==typeof a&&i<a}],"filter-id-<":[Ao,[co],(e,[r])=>{let t=e.id(),i=r.value;return typeof t==typeof i&&t<i}],"filter->":[Ao,[so,co],(e,[r,t])=>{let i=e.properties()[r.value],a=t.value;return typeof i==typeof a&&i>a}],"filter-id->":[Ao,[co],(e,[r])=>{let t=e.id(),i=r.value;return typeof t==typeof i&&t>i}],"filter-<=":[Ao,[so,co],(e,[r,t])=>{let i=e.properties()[r.value],a=t.value;return typeof i==typeof a&&i<=a}],"filter-id-<=":[Ao,[co],(e,[r])=>{let t=e.id(),i=r.value;return typeof t==typeof i&&t<=i}],"filter->=":[Ao,[so,co],(e,[r,t])=>{let i=e.properties()[r.value],a=t.value;return typeof i==typeof a&&i>=a}],"filter-id->=":[Ao,[co],(e,[r])=>{let t=e.id(),i=r.value;return typeof t==typeof i&&t>=i}],"filter-has":[Ao,[co],(e,[r])=>{let t=r.value,i=e.properties();return t in i&&i[t]!==void 0}],"filter-has-id":[Ao,[],e=>e.id()!==null&&e.id()!==void 0],"filter-type-in":[Ao,[pc(so)],(e,[r])=>r.value.indexOf(e.geometryType())>=0],"filter-id-in":[Ao,[pc(co)],(e,[r])=>r.value.indexOf(e.id())>=0],"filter-in-small":[Ao,[so,pc(co)],(e,[r,t])=>t.value.indexOf(e.properties()[r.value])>=0],"filter-in-large":[Ao,[so,pc(co)],(e,[r,t])=>oQ(e.properties()[r.value],t.value,0,t.value.length-1)],all:{type:Ao,overloads:[[[Ao,Ao],(e,[r,t])=>r.evaluate(e)&&t.evaluate(e)],[z0(Ao),(e,r)=>{for(let t of r)if(!t.evaluate(e))return!1;return!0}]]},any:{type:Ao,overloads:[[[Ao,Ao],(e,[r,t])=>r.evaluate(e)||t.evaluate(e)],[z0(Ao),(e,r)=>{for(let t of r)if(t.evaluate(e))return!0;return!1}]]},"!":[Ao,[Ao],(e,[r])=>!r.evaluate(e)],"is-supported-script":[Ao,[so],(e,[r])=>{let t=e.globals&&e.globals.isSupportedScript;return!t||t(r.evaluate(e))}],upcase:[so,[so],(e,[r])=>r.evaluate(e).toUpperCase()],downcase:[so,[so],(e,[r])=>r.evaluate(e).toLowerCase()],concat:[so,z0(co),(e,r)=>r.map(t=>q1(t.evaluate(e))).join("")],split:[pc(so),[so,so],(e,[r,t])=>r.evaluate(e).split(t.evaluate(e))],join:[so,[pc(so),so],(e,[r,t])=>r.evaluate(e).join(t.evaluate(e))],"resolved-locale":[so,[gg],(e,[r])=>r.evaluate(e).resolvedLocale()]}),Bx=/^(.*)-transition$/,Ox=class{constructor(e,r,t,i){this.expression=e,this._warningHistory={},this._evaluator=new _T,this._defaultValue=t?tL(t):null,this._enumValues=t&&t.type==="enum"?t.values:null,this._globalState=i,this._rootKey=r}evaluateWithoutErrorHandling(e,r,t,i,a,o){return this._globalState&&(e=am(e,this._globalState)),this._evaluator.globals=e,this._evaluator.feature=r,this._evaluator.featureState=t,this._evaluator.canonical=i,this._evaluator.availableImages=a||null,this._evaluator.formattedSection=o,this.expression.evaluate(this._evaluator)}evaluate(e,r,t,i,a,o){this._globalState&&(e=am(e,this._globalState)),this._evaluator.globals=e,this._evaluator.feature=r||null,this._evaluator.featureState=t||null,this._evaluator.canonical=i,this._evaluator.availableImages=a||null,this._evaluator.formattedSection=o||null;try{let s=this.expression.evaluate(this._evaluator);if(s==null||typeof s=="number"&&s!==s)return this._defaultValue;if(this._enumValues&&!(s in this._enumValues))throw new Xs(`Expected value to be one of ${Object.keys(this._enumValues).map(l=>JSON.stringify(l)).join(", ")}, but found ${JSON.stringify(s)} instead.`,"");return s}catch(s){let l=s instanceof Xs?s.path:"",n=`${l}|${s.message}`;return this._warningHistory[n]||(this._warningHistory[n]=!0,typeof console<"u"&&console.warn(J9(this._rootKey,l,s.message,this._defaultValue))),this._defaultValue}}},bm=class{constructor(e,r,t){this.kind=e,this._styleExpression=r,this.isStateDependent=e!=="constant"&&!$1(r.expression),this.globalStateRefs=X1(r.expression),this._globalState=t}evaluateWithoutErrorHandling(e,r,t,i,a,o){return this._globalState&&(e=am(e,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(e,r,t,i,a,o)}evaluate(e,r,t,i,a,o){return this._globalState&&(e=am(e,this._globalState)),this._styleExpression.evaluate(e,r,t,i,a,o)}},wg=class{constructor(e,r,t,i,a){this.kind=e,this.zoomStops=t,this._styleExpression=r,this.isStateDependent=e!=="camera"&&!$1(r.expression),this.globalStateRefs=X1(r.expression),this.interpolationType=i,this._globalState=a}evaluateWithoutErrorHandling(e,r,t,i,a,o){return this._globalState&&(e=am(e,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(e,r,t,i,a,o)}evaluate(e,r,t,i,a,o){return this._globalState&&(e=am(e,this._globalState)),this._styleExpression.evaluate(e,r,t,i,a,o)}interpolationFactor(e,r,t){return this.interpolationType?Rf.interpolationFactor(this.interpolationType,e,r,t):0}},CT=class Zj{constructor(r,t,i){this.isStateDependent=!1,this.globalStateRefs=new Set,this._globalState=null,Q9(t),this._parameters=r,this._specification=i,this._rootKey=t,this._defaultValue=tL(i),this._warningHistory={};let a=Z9(this._parameters,this._specification);this.kind=a.kind,this.interpolationFactor=a.interpolationFactor,this.zoomStops=a.zoomStops,this.interpolationType=a.interpolationType,this._innerEvaluate=a.evaluate}evaluate(r,t){try{return this._innerEvaluate(r,t)}catch(i){let a=i instanceof Error?i.message:String(i),o=`|${a}`;return this._warningHistory[o]||(this._warningHistory[o]=!0,typeof console<"u"&&console.warn(J9(this._rootKey,"",a,this._defaultValue))),this._defaultValue}}static deserialize(r){return new Zj(r._parameters,r._rootKey,r._specification)}static serialize(r){return{_parameters:r._parameters,_specification:r._specification,_rootKey:r._rootKey}}},eI={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},DT={promoteId:EQ},LT=1114111,tI=/^u\+(?:([0-9a-f]{1,6})(?:-([0-9a-f]{1,6}))?|([0-9a-f]{0,5}\?{1,6}))$/i,FT={"*"(){return[]},array:y6,boolean:TQ,number:K_,color:_6,constants:lL,enum:K1,filter:x6,function:uL,layer:pL,object:Ff,source:vL,light:mL,sky:gL,terrain:yL,projection:IQ,projectionDefinition:RQ,string:Vp,formatted:kQ,resolvedImage:CQ,padding:DQ,numberArray:LQ,colorArray:FQ,variableAnchorOffsetCollection:PQ,sprite:_L,state:xL,fontFaces:bL},Pf.source=hh(fh(vL)),Pf.sprite=hh(fh(_L)),Pf.glyphs=hh(fh(wL)),Pf.fontFaces=hh(fh(bL)),Pf.light=hh(fh(mL)),Pf.sky=hh(fh(gL)),Pf.terrain=hh(fh(yL)),Pf.state=hh(fh(xL)),Pf.layer=hh(fh(pL)),Pf.filter=hh(fh(x6)),Pf.paintProperty=hh(fh(hL)),Pf.layoutProperty=hh(fh(dL)),rI={type:"enum","property-type":"data-constant",expression:{interpolated:!1,parameters:["global-state"]},values:{visible:{},none:{}},transition:!1,default:"visible"},iI=class{constructor(e,r,t){this._rootKey=r,this._globalState=t,this.setValue(e)}evaluate(){var e;return(e=this._literalValue)!=null?e:this._compiledValue.evaluate({})}setValue(e){if(e==null||e==="visible"||e==="none"){this._literalValue=e==="none"?"none":"visible",this._compiledValue=void 0,this._globalStateRefs=new Set;return}let r=W_(e,this._rootKey,rI,this._globalState);if(r.result==="error")throw this._literalValue="visible",this._compiledValue=void 0,Error(r.value.map(t=>`${t.key}: ${t.message}`).join(", "));this._literalValue=void 0,this._compiledValue=r.value,this._globalStateRefs=X1(r.value.expression)}getGlobalStateRefs(){return this._globalStateRefs}},Hc=Pf,PT=new Set(Object.keys(mi).filter(e=>e.startsWith("source_")).map(e=>e.slice(7).replaceAll("_","-"))),Nx=class Kj{constructor(r,t,i){let a=this.cells=[];if(r instanceof ArrayBuffer){this.arrayBuffer=r;let s=new Int32Array(this.arrayBuffer);r=s[0],t=s[1],i=s[2],this.d=t+2*i;for(let u=0;u<this.d*this.d;u++){let c=s[3+u],f=s[3+u+1];a.push(c===f?null:s.subarray(c,f))}let l=s[3+a.length],n=s[3+a.length+1];this.keys=s.subarray(l,n),this.bboxes=s.subarray(n),this.insert=this._insertReadonly}else{this.d=t+2*i;for(let s=0;s<this.d*this.d;s++)a.push([]);this.keys=[],this.bboxes=[]}this.n=t,this.extent=r,this.padding=i,this.scale=t/r,this.uid=0;let o=i/t*r;this.min=-o,this.max=r+o}insert(r,t,i,a,o){this._forEachCell(t,i,a,o,this._insertCell,this.uid++,void 0,void 0),this.keys.push(r),this.bboxes.push(t),this.bboxes.push(i),this.bboxes.push(a),this.bboxes.push(o)}_insertReadonly(){throw Error("Cannot insert into a GridIndex created from an ArrayBuffer.")}_insertCell(r,t,i,a,o,s){this.cells[o].push(s)}query(r,t,i,a,o){let s=this.min,l=this.max;if(r<=s&&t<=s&&l<=i&&l<=a&&!o)return[...this.keys];{let n=[];return this._forEachCell(r,t,i,a,this._queryCell,n,{},o),n}}_queryCell(r,t,i,a,o,s,l,n){let u=this.cells[o];if(u!==null){let c=this.keys,f=this.bboxes;for(let h of u)if(l[h]===void 0){let d=h*4;(n?n(f[d+0],f[d+1],f[d+2],f[d+3]):r<=f[d+2]&&t<=f[d+3]&&i>=f[d+0]&&a>=f[d+1])?(l[h]=!0,s.push(c[h])):l[h]=!1}}}_forEachCell(r,t,i,a,o,s,l,n){let u=this._convertToCellCoord(r),c=this._convertToCellCoord(t),f=this._convertToCellCoord(i),h=this._convertToCellCoord(a);for(let d=u;d<=f;d++)for(let p=c;p<=h;p++){let g=this.d*p+d;if((!n||n(this._convertFromCellCoord(d),this._convertFromCellCoord(p),this._convertFromCellCoord(d+1),this._convertFromCellCoord(p+1)))&&o.call(this,r,t,i,a,g,s,l,n))return}}_convertFromCellCoord(r){return(r-this.padding)/this.scale}_convertToCellCoord(r){return Math.max(0,Math.min(this.d-1,Math.floor(r*this.scale)+this.padding))}toArrayBuffer(){if(this.arrayBuffer)return this.arrayBuffer;let r=this.cells,t=3+this.cells.length+1+1,i=0;for(let s of this.cells)i+=s.length;let a=new Int32Array(t+i+this.keys.length+this.bboxes.length);a[0]=this.extent,a[1]=this.n,a[2]=this.padding;let o=t;for(let s=0;s<r.length;s++){let l=r[s];a[3+s]=o,a.set(l,o),o+=l.length}return a[3+r.length]=o,a.set(this.keys,o),o+=this.keys.length,a[3+r.length+1]=o,a.set(this.bboxes,o),o+=this.bboxes.length,a.buffer}static serialize(r,t){let i=r.toArrayBuffer();return t&&t.push(i),{buffer:i}}static deserialize(r){return new Kj(r.buffer)}},Cd={},Qa("Object",Object),Qa("Set",Set),Qa("TransferableGridIndex",Nx),Qa("Color",ro),Qa("Error",Error),Qa("AJAXError",mm),Qa("ResolvedImage",Kh),Qa("StylePropertyFunction",CT),Qa("StyleExpression",Ox,{omit:["_evaluator"]}),Qa("ZoomDependentExpression",wg),Qa("ZoomConstantExpression",bm),Qa("CompoundExpression",Yp,{omit:["_evaluate"]});for(let e in W0)W0[e]._classRegistryKey||Qa(`Expression_${e}`,W0[e]);jx=class{constructor(){this.first=!0}update(e,r){let t=Math.floor(e);return this.first?(this.first=!1,this.lastIntegerZoom=t,this.lastIntegerZoomTime=0,this.lastZoom=e,this.lastFloorZoom=t,!0):(this.lastFloorZoom>t?(this.lastIntegerZoom=t+1,this.lastIntegerZoomTime=r):this.lastFloorZoom<t&&(this.lastIntegerZoom=t,this.lastIntegerZoomTime=r),e!==this.lastZoom&&(this.lastZoom=e,this.lastFloorZoom=t,!0))}},ns=class{constructor(e,r){this.zoom=e,r?(this.now=r.now||0,this.fadeDuration=r.fadeDuration||0,this.zoomHistory=r.zoomHistory||new jx,this.transition=r.transition||{}):(this.now=0,this.fadeDuration=0,this.zoomHistory=new jx,this.transition={})}crossFadingFactor(){return this.fadeDuration===0?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)}getCrossfadeParameters(){let e=this.zoom,r=e-Math.floor(e),t=this.crossFadingFactor();return e>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:r+(1-r)*t}:{fromScale:.5,toScale:1,t:1-(1-t)*r}}},Ux="-transition",Tg=class{constructor(e,r,t,i){this.property=e,this.value=r,this.expression=mQ(r===void 0?e.specification.default:r,t,e.specification,i)}isDataDriven(){return this.expression.kind==="source"||this.expression.kind==="composite"}getGlobalStateRefs(){return this.expression.globalStateRefs||new Set}possiblyEvaluate(e,r,t){return this.property.possiblyEvaluate(this,e,r,t)}},qx=class{constructor(e,r,t){this.property=e,this.value=new Tg(e,void 0,r,t)}transitioned(e,r){return new IT(this.property,this.value,r,yn({},e.transition,this.transition),e.now)}untransitioned(){return new IT(this.property,this.value,null,{},0)}},Ag=class{constructor(e,r,t){this._properties=e,this._values=Object.create(e.defaultTransitionablePropertyValues),this._globalState=t,this._rootKey=r}_propertyRootKey(e){return`${this._rootKey}.${String(e)}`}hasProperty(e){return e in this._properties.defaultTransitionablePropertyValues}getValue(e){return cf(this._values[e].value.value)}setValue(e,r){Object.hasOwn(this._values,e)||(this._values[e]=new qx(this._values[e].property,this._propertyRootKey(e),this._globalState)),this._values[e].value=new Tg(this._values[e].property,r===null?void 0:cf(r),this._propertyRootKey(e),this._globalState)}getTransition(e){return cf(this._values[e].transition)}setTransition(e,r){Object.hasOwn(this._values,e)||(this._values[e]=new qx(this._values[e].property,this._propertyRootKey(e),this._globalState)),this._values[e].transition=cf(r)||void 0}serialize(){let e={};for(let r of Object.keys(this._values)){let t=this.getValue(r);t!==void 0&&(e[r]=t);let i=this.getTransition(r);i!==void 0&&(e[`${r}${Ux}`]=i)}return e}transitioned(e,r){let t=new RT(this._properties);for(let i of Object.keys(this._values))t._values[i]=this._values[i].transitioned(e,r._values[i]);return t}untransitioned(){let e=new RT(this._properties);for(let r of Object.keys(this._values))e._values[r]=this._values[r].untransitioned();return e}},IT=class{constructor(e,r,t,i,a){this.property=e,this.value=r,this.begin=a+i.delay||0,this.end=this.begin+i.duration||0,e.specification.transition&&(i.delay||i.duration)&&(this.prior=t)}possiblyEvaluate(e,r,t){let i=e.now||0,a=this.value.possiblyEvaluate(e,r,t),o=this.prior;if(!o)return a;if(i>this.end||this.value.isDataDriven())return this.prior=null,a;if(i<this.begin)return o.possiblyEvaluate(e,r,t);{let s=(i-this.begin)/(this.end-this.begin);return this.property.interpolate(o.possiblyEvaluate(e,r,t),a,tJ(s))}}},RT=class{constructor(e){this._properties=e,this._values=Object.create(e.defaultTransitioningPropertyValues)}possiblyEvaluate(e,r,t){let i=new Mg(this._properties);for(let a of Object.keys(this._values))i._values[a]=this._values[a].possiblyEvaluate(e,r,t);return i}hasTransition(){for(let e of Object.keys(this._values))if(this._values[e].prior)return!0;return!1}},aI=class{constructor(e,r,t){this._properties=e,this._values=Object.create(e.defaultPropertyValues),this._globalState=t,this._rootKey=r}_propertyRootKey(e){return`${this._rootKey}.${String(e)}`}hasValue(e){return this._values[e].value!==void 0}hasProperty(e){return e in this._properties.defaultPropertyValues}getValue(e){return cf(this._values[e].value)}setValue(e,r){this._values[e]=new Tg(this._values[e].property,r===null?void 0:cf(r),this._propertyRootKey(e),this._globalState)}serialize(){let e={};for(let r of Object.keys(this._values)){let t=this.getValue(r);t!==void 0&&(e[r]=t)}return e}possiblyEvaluate(e,r,t){let i=new Mg(this._properties);for(let a of Object.keys(this._values))i._values[a]=this._values[a].possiblyEvaluate(e,r,t);return i}},zf=class{constructor(e,r,t){this.property=e,this.value=r,this.parameters=t}isConstant(){return this.value.kind==="constant"}constantOr(e){return this.value.kind==="constant"?this.value.value:e}evaluate(e,r,t,i){return this.property.evaluate(this.value,this.parameters,e,r,t,i)}},Mg=class{constructor(e){this._properties=e,this._values=Object.create(e.defaultPossiblyEvaluatedValues)}get(e){return this._values[e]}},Ha=class{constructor(e,r){this.specification=e,this.name=r}possiblyEvaluate(e,r){if(e.isDataDriven())throw Error("Value should not be data driven");return e.expression.evaluate(r)}interpolate(e,r,t){if(kL(e,r))return To(`Property "${this.name}" is trying to interpolate arrays of different lengths. Rendering may 'jump'.`),r;let i=this.specification.type,a=Zs[i];return a?a(e,r,t):e}},Fn=class{constructor(e,r,t){this.specification=e,this.name=r,this.overrides=t}possiblyEvaluate(e,r,t,i){return e.expression.kind==="constant"||e.expression.kind==="camera"?new zf(this,{kind:"constant",value:e.expression.evaluate(r,null,{},t,i)},r):new zf(this,e.expression,r)}interpolate(e,r,t){if(e.value.kind!=="constant"||r.value.kind!=="constant")return e;if(e.value.value===void 0||r.value.value===void 0)return new zf(this,{kind:"constant",value:void 0},e.parameters);if(kL(e.value.value,r.value.value))return To(`Property "${this.name}" is trying to interpolate arrays of different lengths. Rendering may 'jump'.`),r;let i=this.specification.type,a=Zs[i];if(a){let o=a(e.value.value,r.value.value,t);return new zf(this,{kind:"constant",value:o},e.parameters)}return e}evaluate(e,r,t,i,a,o){return e.kind==="constant"?e.value:e.evaluate(r,t,i,a,o)}},wm=class extends Fn{possiblyEvaluate(e,r,t,i){if(e.value===void 0)return new zf(this,{kind:"constant",value:void 0},r);if(e.expression.kind==="constant"){let a=e.expression.evaluate(r,null,{},t,i),o=e.property.specification.type==="resolvedImage"&&typeof a!="string"?a.name:a,s=this._calculate(o,o,o,r);return new zf(this,{kind:"constant",value:s},r)}if(e.expression.kind==="camera"){let a=this._calculate(e.expression.evaluate({zoom:r.zoom-1}),e.expression.evaluate({zoom:r.zoom}),e.expression.evaluate({zoom:r.zoom+1}),r);return new zf(this,{kind:"constant",value:a},r)}return new zf(this,e.expression,r)}evaluate(e,r,t,i,a,o){if(e.kind==="source"){let s=e.evaluate(r,t,i,a,o);return this._calculate(s,s,s,r)}return e.kind==="composite"?this._calculate(e.evaluate({zoom:Math.floor(r.zoom)-1},t,i),e.evaluate({zoom:Math.floor(r.zoom)},t,i),e.evaluate({zoom:Math.floor(r.zoom)+1},t,i),r):e.value}_calculate(e,r,t,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:e,to:r}:{from:t,to:r}}interpolate(e){return e}},zT=class{constructor(e,r){this.specification=e,this.name=r}possiblyEvaluate(e,r,t,i){if(e.value!==void 0){if(e.expression.kind==="constant"){let a=e.expression.evaluate(r,null,{},t,i);return this._calculate(a,a,a,r)}return this._calculate(e.expression.evaluate(new ns(Math.floor(r.zoom-1),r)),e.expression.evaluate(new ns(Math.floor(r.zoom),r)),e.expression.evaluate(new ns(Math.floor(r.zoom+1),r)),r)}}_calculate(e,r,t,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:e,to:r}:{from:t,to:r}}interpolate(e){return e}},Sg=class{constructor(e,r){this.specification=e,this.name=r}possiblyEvaluate(e,r,t,i){return!!e.expression.evaluate(r,null,{},t,i)}interpolate(){return!1}},vu=class{constructor(e){this.properties=e,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[];for(let r in e){let t=e[r];t.specification.overridable&&this.overridableProperties.push(r);let i=this.defaultPropertyValues[r]=new Tg(t,void 0,t.name,void 0),a=this.defaultTransitionablePropertyValues[r]=new qx(t,t.name,void 0);this.defaultTransitioningPropertyValues[r]=a.untransitioned(),this.defaultPossiblyEvaluatedValues[r]=i.possiblyEvaluate({})}}},Qa("DataDrivenProperty",Fn),Qa("DataConstantProperty",Ha),Qa("CrossFadedDataDrivenProperty",wm),Qa("CrossFadedProperty",zT),Qa("ColorRampProperty",Sg),BT=" is a PAINT property not a LAYOUT property. Use get/setPaintProperty instead?",Vx=" is a LAYOUT property not a PAINT property. Use get/setLayoutProperty instead?",ph=class extends Nl{constructor(e,r,t){if(super(),this.id=e.id,this.type=e.type,this._globalState=t,this._featureFilter={filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set},this._visibilityExpression=NQ(this.visibility,`layers[${this.id}].layout.visibility`,t),e.type!=="custom"&&(this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,e.type!=="background"&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter,this._featureFilter=Z1(e.filter,`layers[${this.id}].filter`,t)),r.layout&&(this._unevaluatedLayout=new aI(r.layout,`layers[${this.id}].layout`,t)),r.paint)){this._transitionablePaint=new Ag(r.paint,`layers[${this.id}].paint`,t);for(let i in e.paint)this.setPaintProperty(i,e.paint[i],{validate:!1});for(let i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new Mg(r.paint)}}setFilter(e){this.filter=e,this._featureFilter=Z1(e,`layers[${this.id}].filter`,this._globalState)}getCrossfadeParameters(){return this._crossfadeParameters}getLayoutProperty(e){var r;if(e==="visibility")return this.visibility;if((r=this._transitionablePaint)!=null&&r.hasProperty(e))throw Error(e+BT);if(!this._unevaluatedLayout)throw Error(`Cannot get layout property "${e}" on layer type "${this.type}" which has no layout properties.`);return this._unevaluatedLayout.getValue(e)}getLayoutAffectingGlobalStateRefs(){let e=new Set;for(let r of this._visibilityExpression.getGlobalStateRefs())e.add(r);if(this._unevaluatedLayout)for(let r in this._unevaluatedLayout._values){let t=this._unevaluatedLayout._values[r];for(let i of t.getGlobalStateRefs())e.add(i)}for(let r of this._featureFilter.getGlobalStateRefs())e.add(r);return e}getPaintAffectingGlobalStateRefs(){var e;let r=new globalThis.Map;if(this._transitionablePaint)for(let t in this._transitionablePaint._values){let i=this._transitionablePaint._values[t].value;for(let a of i.getGlobalStateRefs()){let o=(e=r.get(a))!=null?e:[];o.push({name:t,value:i.value}),r.set(a,o)}}return r}getVisibilityAffectingGlobalStateRefs(){return this._visibilityExpression.getGlobalStateRefs()}setLayoutProperty(e,r,t={}){var i;if(e==="visibility"){this.visibility=r,this._visibilityExpression.setValue(r),this.recalculateVisibility();return}if((i=this._transitionablePaint)!=null&&i.hasProperty(e)){this.fire(new Ln(Error(e+BT)));return}r!=null&&this._validate(Hc.layoutProperty,`layers.${this.id}.layout.${e}`,e,r,t)||this._unevaluatedLayout.setValue(e,r)}getPaintProperty(e){var r,t;if(e.endsWith("-transition")){let i=e.slice(0,-11);if(i==="visibility"||(r=this._unevaluatedLayout)!=null&&r.hasProperty(i))throw Error(e+Vx);return this._transitionablePaint.getTransition(i)}if(e==="visibility"||(t=this._unevaluatedLayout)!=null&&t.hasProperty(e))throw Error(e+Vx);return this._transitionablePaint.getValue(e)}setPaintProperty(e,r,t={}){var i;if(e==="visibility"||(i=this._unevaluatedLayout)!=null&&i.hasProperty(e))return this.fire(new Ln(Error(e+Vx))),!1;if(r!=null&&this._validate(Hc.paintProperty,`layers.${this.id}.paint.${e}`,e,r,t))return!1;if(e.endsWith("-transition"))return this._transitionablePaint.setTransition(e.slice(0,-11),r||void 0),!1;{let a=this._transitionablePaint._values[e],o=a.property.specification["property-type"]==="cross-faded-data-driven",s=a.value.isDataDriven(),l=a.value;this._transitionablePaint.setValue(e,r),this._handleSpecialPaintPropertyUpdate(e);let n=this._transitionablePaint._values[e].value;return n.isDataDriven()||s||o||this._handleOverridablePaintPropertyUpdate(e,l,n)}}_handleSpecialPaintPropertyUpdate(e){}_handleOverridablePaintPropertyUpdate(e,r,t){return!1}isHidden(e=this.minzoom,r=!1){return this.minzoom&&e<(r?Math.floor(this.minzoom):this.minzoom)||this.maxzoom&&e>=this.maxzoom?!0:this._evaluatedVisibility==="none"}updateTransitions(e){this._transitioningPaint=this._transitionablePaint.transitioned(e,this._transitioningPaint)}hasTransition(){return this._transitioningPaint.hasTransition()}recalculateVisibility(){this._evaluatedVisibility=this._visibilityExpression.evaluate()}recalculate(e,r){e.getCrossfadeParameters&&(this._crossfadeParameters=e.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(e,void 0,r)),this.paint=this._transitioningPaint.possiblyEvaluate(e,void 0,r)}serialize(){var e,r;let t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:(e=this._unevaluatedLayout)==null?void 0:e.serialize(),paint:(r=this._transitionablePaint)==null?void 0:r.serialize()};return this.visibility&&(t.layout||(t.layout={}),t.layout.visibility=this.visibility),b9(t,(i,a)=>i!==void 0&&!(a==="layout"&&!Object.keys(i).length)&&!(a==="paint"&&!Object.keys(i).length))}_validate(e,r,t,i,a={}){return Q1(this,e,{key:r,layerType:this.type,objectKey:t,value:i},a)}is3D(){return!1}isTileClipped(){return!1}hasOffscreenPass(){return!1}resize(){}isStateDependent(){for(let e in this.paint._values){let r=this.paint.get(e);if(r instanceof zf&&rm(r.property.specification)&&(r.value.kind==="source"||r.value.kind==="composite")&&r.value.isStateDependent)return!0}return!1}},oI=()=>nI||(nI=new vu({"raster-opacity":new Ha(mi.paint_raster["raster-opacity"],"raster-opacity"),"raster-hue-rotate":new Ha(mi.paint_raster["raster-hue-rotate"],"raster-hue-rotate"),"raster-brightness-min":new Ha(mi.paint_raster["raster-brightness-min"],"raster-brightness-min"),"raster-brightness-max":new Ha(mi.paint_raster["raster-brightness-max"],"raster-brightness-max"),"raster-saturation":new Ha(mi.paint_raster["raster-saturation"],"raster-saturation"),"raster-contrast":new Ha(mi.paint_raster["raster-contrast"],"raster-contrast"),resampling:new Ha(mi.paint_raster.resampling,"resampling"),"raster-resampling":new Ha(mi.paint_raster["raster-resampling"],"raster-resampling"),"raster-fade-duration":new Ha(mi.paint_raster["raster-fade-duration"],"raster-fade-duration")})),sI={get paint(){return oI()}},Gx=e=>e.type==="raster",lI=class extends ph{constructor(e,r){super(e,sI,r)}},uI={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Tm=class{constructor(e,r){this._structArray=e,this._pos1=r*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8}},il=class{constructor(){this.isTransferred=!1,this.capacity=-1,this.resize(0)}static serialize(e,r){return e._trim(),r&&(e.isTransferred=!0,r.push(e.arrayBuffer)),{length:e.length,arrayBuffer:e.arrayBuffer}}static deserialize(e){let r=Object.create(this.prototype);return r.arrayBuffer=e.arrayBuffer,r.length=e.length,r.capacity=e.arrayBuffer.byteLength/r.bytesPerElement,r._refreshViews(),r}_trim(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())}clear(){this.length=0}resize(e){this.reserve(e),this.length=e}reserve(e){if(e>this.capacity){this.capacity=Math.max(e,Math.floor(this.capacity*5),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);let r=this.uint8;this._refreshViews(),r&&this.uint8.set(r)}}_refreshViews(){throw Error("_refreshViews() must be implemented by each concrete StructArray layout")}freeBufferAfterUpload(){this.arrayBuffer=new ArrayBuffer(0),this._refreshViews()}},Am=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r){let t=this.length;return this.resize(t+1),this.emplace(t,e,r)}emplace(e,r,t){let i=e*2;return this.int16[i+0]=r,this.int16[i+1]=t,e}},Am.prototype.bytesPerElement=4,Qa("StructArrayLayout2i4",Am),Eg=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t){let i=this.length;return this.resize(i+1),this.emplace(i,e,r,t)}emplace(e,r,t,i){let a=e*3;return this.int16[a+0]=r,this.int16[a+1]=t,this.int16[a+2]=i,e}},Eg.prototype.bytesPerElement=6,Qa("StructArrayLayout3i6",Eg),Hx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t,i){let a=this.length;return this.resize(a+1),this.emplace(a,e,r,t,i)}emplace(e,r,t,i,a){let o=e*4;return this.int16[o+0]=r,this.int16[o+1]=t,this.int16[o+2]=i,this.int16[o+3]=a,e}},Hx.prototype.bytesPerElement=8,Qa("StructArrayLayout4i8",Hx),$x=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o){let s=this.length;return this.resize(s+1),this.emplace(s,e,r,t,i,a,o)}emplace(e,r,t,i,a,o,s){let l=e*6;return this.int16[l+0]=r,this.int16[l+1]=t,this.int16[l+2]=i,this.int16[l+3]=a,this.int16[l+4]=o,this.int16[l+5]=s,e}},$x.prototype.bytesPerElement=12,Qa("StructArrayLayout2i4i12",$x),Wx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o){let s=this.length;return this.resize(s+1),this.emplace(s,e,r,t,i,a,o)}emplace(e,r,t,i,a,o,s){let l=e*4,n=e*8;return this.int16[l+0]=r,this.int16[l+1]=t,this.uint8[n+4]=i,this.uint8[n+5]=a,this.uint8[n+6]=o,this.uint8[n+7]=s,e}},Wx.prototype.bytesPerElement=8,Qa("StructArrayLayout2i4ub8",Wx),Mm=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r){let t=this.length;return this.resize(t+1),this.emplace(t,e,r)}emplace(e,r,t){let i=e*2;return this.float32[i+0]=r,this.float32[i+1]=t,e}},Mm.prototype.bytesPerElement=8,Qa("StructArrayLayout2f8",Mm),Yx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o,s,l,n,u){let c=this.length;return this.resize(c+1),this.emplace(c,e,r,t,i,a,o,s,l,n,u)}emplace(e,r,t,i,a,o,s,l,n,u,c){let f=e*10;return this.uint16[f+0]=r,this.uint16[f+1]=t,this.uint16[f+2]=i,this.uint16[f+3]=a,this.uint16[f+4]=o,this.uint16[f+5]=s,this.uint16[f+6]=l,this.uint16[f+7]=n,this.uint16[f+8]=u,this.uint16[f+9]=c,e}},Yx.prototype.bytesPerElement=20,Qa("StructArrayLayout10ui20",Yx),Xx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o,s,l){let n=this.length;return this.resize(n+1),this.emplace(n,e,r,t,i,a,o,s,l)}emplace(e,r,t,i,a,o,s,l,n){let u=e*8;return this.uint16[u+0]=r,this.uint16[u+1]=t,this.uint16[u+2]=i,this.uint16[u+3]=a,this.uint16[u+4]=o,this.uint16[u+5]=s,this.uint16[u+6]=l,this.uint16[u+7]=n,e}},Xx.prototype.bytesPerElement=16,Qa("StructArrayLayout8ui16",Xx),Zx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o,s,l,n,u,c,f,h){let d=this.length;return this.resize(d+1),this.emplace(d,e,r,t,i,a,o,s,l,n,u,c,f,h)}emplace(e,r,t,i,a,o,s,l,n,u,c,f,h,d){let p=e*14,g=e*7;return this.int16[p+0]=r,this.int16[p+1]=t,this.int16[p+2]=i,this.int16[p+3]=a,this.uint16[p+4]=o,this.uint16[p+5]=s,this.uint16[p+6]=l,this.uint16[p+7]=n,this.int16[p+8]=u,this.int16[p+9]=c,this.int16[p+10]=f,this.int16[p+11]=h,this.float32[g+6]=d,e}},Zx.prototype.bytesPerElement=28,Qa("StructArrayLayout4i4ui4i1f28",Zx),Kx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r,t){let i=this.length;return this.resize(i+1),this.emplace(i,e,r,t)}emplace(e,r,t,i){let a=e*3;return this.float32[a+0]=r,this.float32[a+1]=t,this.float32[a+2]=i,e}},Kx.prototype.bytesPerElement=12,Qa("StructArrayLayout3f12",Kx),Jx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)}emplaceBack(e){let r=this.length;return this.resize(r+1),this.emplace(r,e)}emplace(e,r){let t=e*1;return this.uint32[t+0]=r,e}},Jx.prototype.bytesPerElement=4,Qa("StructArrayLayout1ul4",Jx),Qx=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o,s,l,n){let u=this.length;return this.resize(u+1),this.emplace(u,e,r,t,i,a,o,s,l,n)}emplace(e,r,t,i,a,o,s,l,n,u){let c=e*10,f=e*5;return this.int16[c+0]=r,this.int16[c+1]=t,this.int16[c+2]=i,this.int16[c+3]=a,this.int16[c+4]=o,this.int16[c+5]=s,this.uint32[f+3]=l,this.uint16[c+8]=n,this.uint16[c+9]=u,e}},Qx.prototype.bytesPerElement=20,Qa("StructArrayLayout6i1ul2ui20",Qx),eb=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o){let s=this.length;return this.resize(s+1),this.emplace(s,e,r,t,i,a,o)}emplace(e,r,t,i,a,o,s){let l=e*6;return this.int16[l+0]=r,this.int16[l+1]=t,this.int16[l+2]=i,this.int16[l+3]=a,this.int16[l+4]=o,this.int16[l+5]=s,e}},eb.prototype.bytesPerElement=12,Qa("StructArrayLayout2i2i2i12",eb),tb=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a){let o=this.length;return this.resize(o+1),this.emplace(o,e,r,t,i,a)}emplace(e,r,t,i,a,o){let s=e*4,l=e*8;return this.float32[s+0]=r,this.float32[s+1]=t,this.float32[s+2]=i,this.int16[l+6]=a,this.int16[l+7]=o,e}},tb.prototype.bytesPerElement=16,Qa("StructArrayLayout2f1f2i16",tb),rb=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o){let s=this.length;return this.resize(s+1),this.emplace(s,e,r,t,i,a,o)}emplace(e,r,t,i,a,o,s){let l=e*16,n=e*4,u=e*8;return this.uint8[l+0]=r,this.uint8[l+1]=t,this.float32[n+1]=i,this.float32[n+2]=a,this.int16[u+6]=o,this.int16[u+7]=s,e}},rb.prototype.bytesPerElement=16,Qa("StructArrayLayout2ub2f2i16",rb),kg=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,r,t){let i=this.length;return this.resize(i+1),this.emplace(i,e,r,t)}emplace(e,r,t,i){let a=e*3;return this.uint16[a+0]=r,this.uint16[a+1]=t,this.uint16[a+2]=i,e}},kg.prototype.bytesPerElement=6,Qa("StructArrayLayout3ui6",kg),ib=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y){let _=this.length;return this.resize(_+1),this.emplace(_,e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y)}emplace(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_){let v=e*26,x=e*13,S=e*52;return this.int16[v+0]=r,this.int16[v+1]=t,this.uint16[v+2]=i,this.uint16[v+3]=a,this.uint32[x+2]=o,this.uint32[x+3]=s,this.uint32[x+4]=l,this.uint16[v+10]=n,this.uint16[v+11]=u,this.uint16[v+12]=c,this.float32[x+7]=f,this.float32[x+8]=h,this.uint8[S+36]=d,this.uint8[S+37]=p,this.uint8[S+38]=g,this.uint32[x+10]=m,this.int16[v+22]=y,this.float32[x+12]=_,e}},ib.prototype.bytesPerElement=52,Qa("StructArrayLayout2i2ui3ul3ui2f3ub1ul1i1f52",ib),ab=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_,v,x,S,M,C,w,k,A,b,E){let T=this.length;return this.resize(T+1),this.emplace(T,e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_,v,x,S,M,C,w,k,A,b,E)}emplace(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_,v,x,S,M,C,w,k,A,b,E,T){let F=e*34,D=e*17;return this.int16[F+0]=r,this.int16[F+1]=t,this.int16[F+2]=i,this.int16[F+3]=a,this.int16[F+4]=o,this.int16[F+5]=s,this.int16[F+6]=l,this.int16[F+7]=n,this.uint16[F+8]=u,this.uint16[F+9]=c,this.uint16[F+10]=f,this.uint16[F+11]=h,this.uint16[F+12]=d,this.uint16[F+13]=p,this.uint16[F+14]=g,this.uint16[F+15]=m,this.uint16[F+16]=y,this.uint16[F+17]=_,this.uint16[F+18]=v,this.uint16[F+19]=x,this.uint16[F+20]=S,this.uint16[F+21]=M,this.uint16[F+22]=C,this.uint32[D+12]=w,this.float32[D+13]=k,this.float32[D+14]=A,this.uint16[F+30]=b,this.uint16[F+31]=E,this.float32[D+16]=T,e}},ab.prototype.bytesPerElement=68,Qa("StructArrayLayout8i15ui1ul2f2ui1f68",ab),Cg=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e){let r=this.length;return this.resize(r+1),this.emplace(r,e)}emplace(e,r){let t=e*1;return this.float32[t+0]=r,e}},Cg.prototype.bytesPerElement=4,Qa("StructArrayLayout1f4",Cg),nb=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r,t){let i=this.length;return this.resize(i+1),this.emplace(i,e,r,t)}emplace(e,r,t,i){let a=e*6,o=e*3;return this.uint16[a+0]=r,this.float32[o+1]=t,this.float32[o+2]=i,e}},nb.prototype.bytesPerElement=12,Qa("StructArrayLayout1ui2f12",nb),ob=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,r,t){let i=this.length;return this.resize(i+1),this.emplace(i,e,r,t)}emplace(e,r,t,i){let a=e*2,o=e*4;return this.uint32[a+0]=r,this.uint16[o+2]=t,this.uint16[o+3]=i,e}},ob.prototype.bytesPerElement=8,Qa("StructArrayLayout1ul2ui8",ob),sb=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e,r){let t=this.length;return this.resize(t+1),this.emplace(t,e,r)}emplace(e,r,t){let i=e*2;return this.uint16[i+0]=r,this.uint16[i+1]=t,e}},sb.prototype.bytesPerElement=4,Qa("StructArrayLayout2ui4",sb),lb=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(e){let r=this.length;return this.resize(r+1),this.emplace(r,e)}emplace(e,r){let t=e*1;return this.uint16[t+0]=r,e}},lb.prototype.bytesPerElement=2,Qa("StructArrayLayout1ui2",lb),ub=class extends il{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(e,r,t,i){let a=this.length;return this.resize(a+1),this.emplace(a,e,r,t,i)}emplace(e,r,t,i,a){let o=e*4;return this.float32[o+0]=r,this.float32[o+1]=t,this.float32[o+2]=i,this.float32[o+3]=a,e}},ub.prototype.bytesPerElement=16,Qa("StructArrayLayout4f16",ub),OT=class extends Tm{get anchorPointX(){return this._structArray.int16[this._pos2+0]}get anchorPointY(){return this._structArray.int16[this._pos2+1]}get x1(){return this._structArray.int16[this._pos2+2]}get y1(){return this._structArray.int16[this._pos2+3]}get x2(){return this._structArray.int16[this._pos2+4]}get y2(){return this._structArray.int16[this._pos2+5]}get featureIndex(){return this._structArray.uint32[this._pos4+3]}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+8]}get bucketIndex(){return this._structArray.uint16[this._pos2+9]}get anchorPoint(){return new Wr(this.anchorPointX,this.anchorPointY)}},OT.prototype.size=20,NT=class extends Qx{get(e){return new OT(this,e)}},Qa("CollisionBoxArray",NT),jT=class extends Tm{get anchorX(){return this._structArray.int16[this._pos2+0]}get anchorY(){return this._structArray.int16[this._pos2+1]}get glyphStartIndex(){return this._structArray.uint16[this._pos2+2]}get numGlyphs(){return this._structArray.uint16[this._pos2+3]}get vertexStartIndex(){return this._structArray.uint32[this._pos4+2]}get lineStartIndex(){return this._structArray.uint32[this._pos4+3]}get lineLength(){return this._structArray.uint32[this._pos4+4]}get segment(){return this._structArray.uint16[this._pos2+10]}get lowerSize(){return this._structArray.uint16[this._pos2+11]}get upperSize(){return this._structArray.uint16[this._pos2+12]}get lineOffsetX(){return this._structArray.float32[this._pos4+7]}get lineOffsetY(){return this._structArray.float32[this._pos4+8]}get writingMode(){return this._structArray.uint8[this._pos1+36]}get placedOrientation(){return this._structArray.uint8[this._pos1+37]}set placedOrientation(e){this._structArray.uint8[this._pos1+37]=e}get hidden(){return this._structArray.uint8[this._pos1+38]}set hidden(e){this._structArray.uint8[this._pos1+38]=e}get crossTileID(){return this._structArray.uint32[this._pos4+10]}set crossTileID(e){this._structArray.uint32[this._pos4+10]=e}get associatedIconIndex(){return this._structArray.int16[this._pos2+22]}get heightOffset(){return this._structArray.float32[this._pos4+12]}},jT.prototype.size=52,UT=class extends ib{get(e){return new jT(this,e)}},Qa("PlacedSymbolArray",UT),qT=class extends Tm{get anchorX(){return this._structArray.int16[this._pos2+0]}get anchorY(){return this._structArray.int16[this._pos2+1]}get rightJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+2]}get centerJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+3]}get leftJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+4]}get verticalPlacedTextSymbolIndex(){return this._structArray.int16[this._pos2+5]}get placedIconSymbolIndex(){return this._structArray.int16[this._pos2+6]}get verticalPlacedIconSymbolIndex(){return this._structArray.int16[this._pos2+7]}get key(){return this._structArray.uint16[this._pos2+8]}get textBoxStartIndex(){return this._structArray.uint16[this._pos2+9]}get textBoxEndIndex(){return this._structArray.uint16[this._pos2+10]}get verticalTextBoxStartIndex(){return this._structArray.uint16[this._pos2+11]}get verticalTextBoxEndIndex(){return this._structArray.uint16[this._pos2+12]}get iconBoxStartIndex(){return this._structArray.uint16[this._pos2+13]}get iconBoxEndIndex(){return this._structArray.uint16[this._pos2+14]}get verticalIconBoxStartIndex(){return this._structArray.uint16[this._pos2+15]}get verticalIconBoxEndIndex(){return this._structArray.uint16[this._pos2+16]}get featureIndex(){return this._structArray.uint16[this._pos2+17]}get numHorizontalGlyphVertices(){return this._structArray.uint16[this._pos2+18]}get numVerticalGlyphVertices(){return this._structArray.uint16[this._pos2+19]}get numIconVertices(){return this._structArray.uint16[this._pos2+20]}get numVerticalIconVertices(){return this._structArray.uint16[this._pos2+21]}get useRuntimeCollisionCircles(){return this._structArray.uint16[this._pos2+22]}get crossTileID(){return this._structArray.uint32[this._pos4+12]}set crossTileID(e){this._structArray.uint32[this._pos4+12]=e}get textBoxScale(){return this._structArray.float32[this._pos4+13]}get collisionCircleDiameter(){return this._structArray.float32[this._pos4+14]}get textAnchorOffsetStartIndex(){return this._structArray.uint16[this._pos2+30]}get textAnchorOffsetEndIndex(){return this._structArray.uint16[this._pos2+31]}get heightOffset(){return this._structArray.float32[this._pos4+16]}},qT.prototype.size=68,VT=class extends ab{get(e){return new qT(this,e)}},Qa("SymbolInstanceArray",VT),GT=class extends Cg{getoffsetX(e){return this.float32[e*1+0]}},Qa("GlyphOffsetArray",GT),HT=class extends Eg{getx(e){return this.int16[e*3+0]}gety(e){return this.int16[e*3+1]}gettileUnitDistanceFromAnchor(e){return this.int16[e*3+2]}},Qa("SymbolLineVertexArray",HT),$T=class extends Tm{get textAnchor(){return this._structArray.uint16[this._pos2+0]}get textOffset0(){return this._structArray.float32[this._pos4+1]}get textOffset1(){return this._structArray.float32[this._pos4+2]}},$T.prototype.size=12,WT=class extends nb{get(e){return new $T(this,e)}},Qa("TextAnchorOffsetArray",WT),YT=class extends Tm{get featureIndex(){return this._structArray.uint32[this._pos4+0]}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+2]}get bucketIndex(){return this._structArray.uint16[this._pos2+3]}},YT.prototype.size=8,XT=class extends ob{get(e){return new YT(this,e)}},Qa("FeatureIndexArray",XT),sp=class extends Am{},cI=class extends Eg{},fI=class extends Hx{},hI=class extends Am{},dI=class extends Am{},pI=class extends $x{},vI=class extends Wx{},mI=class extends Mm{},Y0=class extends Yx{},ZT=class extends Xx{},gI=class extends Zx{},yI=class extends Kx{},_I=class extends Jx{},KT=class extends eb{},xI=class extends tb{},bI=class extends rb{},wI=class extends kg{},ed=class extends kg{},cb=class extends sb{},TI=class extends lb{},fb=ul([{name:"a_pos",components:2,type:"Int16"}],4),AI=fb.members,fb.size,fb.alignment,Ks=class n1{constructor(r=[]){this._forceNewSegmentOnNextPrepare=!1,this.segments=r}prepareSegment(r,t,i,a){let o=this.segments[this.segments.length-1];return r>n1.MAX_VERTEX_ARRAY_LENGTH&&To(`Max vertices per segment is ${n1.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${r}. Consider using the \`fillLargeMeshArrays\` function if you require meshes with more than ${n1.MAX_VERTEX_ARRAY_LENGTH} vertices.`),this._forceNewSegmentOnNextPrepare||!o||o.vertexLength+r>n1.MAX_VERTEX_ARRAY_LENGTH||o.sortKey!==a?this.createNewSegment(t,i,a):o}createNewSegment(r,t,i){let a={vertexOffset:r.length,primitiveOffset:t.length,vertexLength:0,primitiveLength:0,vaos:{}};return i!==void 0&&(a.sortKey=i),this._forceNewSegmentOnNextPrepare=!1,this.segments.push(a),a}getOrCreateLatestSegment(r,t,i){return this.prepareSegment(0,r,t,i)}forceNewSegmentOnNextPrepare(){this._forceNewSegmentOnNextPrepare=!0}get(){return this.segments}destroy(){for(let r of this.segments)for(let t in r.vaos)r.vaos[t].destroy()}static simpleSegment(r,t,i,a){return new n1([{vertexOffset:r,primitiveOffset:t,vertexLength:i,primitiveLength:a,vaos:{},sortKey:0}])}},Ks.MAX_VERTEX_ARRAY_LENGTH=2**16-1,Qa("SegmentVector",Ks),MI=ul([{name:"a_pattern_from",components:4,type:"Uint16"},{name:"a_pattern_to",components:4,type:"Uint16"},{name:"a_pixel_ratio_from",components:1,type:"Uint16"},{name:"a_pixel_ratio_to",components:1,type:"Uint16"}]),SI=ul([{name:"a_dasharray_from",components:4,type:"Uint16"},{name:"a_dasharray_to",components:4,type:"Uint16"}]),EI=wx(((e,r)=>{function t(i,a){for(var o=i.length&3,s=i.length-o,l=a,n,u=3432918353,c=461845907,f,h=0;h<s;)f=i.charCodeAt(h)&255|(i.charCodeAt(++h)&255)<<8|(i.charCodeAt(++h)&255)<<16|(i.charCodeAt(++h)&255)<<24,++h,f=(f&65535)*u+(((f>>>16)*u&65535)<<16)&4294967295,f=f<<15|f>>>17,f=(f&65535)*c+(((f>>>16)*c&65535)<<16)&4294967295,l^=f,l=l<<13|l>>>19,n=(l&65535)*5+(((l>>>16)*5&65535)<<16)&4294967295,l=(n&65535)+27492+(((n>>>16)+58964&65535)<<16);switch(f=0,o){case 3:f^=(i.charCodeAt(h+2)&255)<<16;case 2:f^=(i.charCodeAt(h+1)&255)<<8;case 1:f^=i.charCodeAt(h)&255,f=(f&65535)*u+(((f>>>16)*u&65535)<<16)&4294967295,f=f<<15|f>>>17,f=(f&65535)*c+(((f>>>16)*c&65535)<<16)&4294967295,l^=f}return l^=i.length,l^=l>>>16,l=(l&65535)*2246822507+(((l>>>16)*2246822507&65535)<<16)&4294967295,l^=l>>>13,l=(l&65535)*3266489909+(((l>>>16)*3266489909&65535)<<16)&4294967295,l^=l>>>16,l>>>0}r!==void 0&&(r.exports=t)})),kI=wx(((e,r)=>{function t(i,a){for(var o=i.length,s=a^o,l=0,n;o>=4;)n=i.charCodeAt(l)&255|(i.charCodeAt(++l)&255)<<8|(i.charCodeAt(++l)&255)<<16|(i.charCodeAt(++l)&255)<<24,n=(n&65535)*1540483477+(((n>>>16)*1540483477&65535)<<16),n^=n>>>24,n=(n&65535)*1540483477+(((n>>>16)*1540483477&65535)<<16),s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16)^n,o-=4,++l;switch(o){case 3:s^=(i.charCodeAt(l+2)&255)<<16;case 2:s^=(i.charCodeAt(l+1)&255)<<8;case 1:s^=i.charCodeAt(l)&255,s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16)}return s^=s>>>13,s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16),s^=s>>>15,s>>>0}r.exports=t})),hb=_P(wx(((e,r)=>{var t=EI(),i=kI();r.exports=t,r.exports.murmur3=t,r.exports.murmur2=i}))(),1),JT=class Jj{constructor(){this.ids=[],this.positions=[],this.indexed=!1}add(r,t,i,a){this.ids.push(LL(r)),this.positions.push(t,i,a)}getPositions(r){if(!this.indexed)throw Error("Trying to get index, but feature positions are not indexed");let t=LL(r),i=0,a=this.ids.length-1;for(;i<a;){let s=i+a>>1;this.ids[s]>=t?a=s:i=s+1}let o=[];for(;this.ids[i]===t;){let s=this.positions[3*i],l=this.positions[3*i+1],n=this.positions[3*i+2];o.push({index:s,start:l,end:n}),i++}return o}static serialize(r,t){let i=new Float64Array(r.ids),a=new Uint32Array(r.positions);return A6(i,a,0,i.length-1),t&&t.push(i.buffer,a.buffer),{ids:i,positions:a}}static deserialize(r){let t=new Jj;return t.ids=r.ids,t.positions=r.positions,t.indexed=!0,t}},Qa("FeaturePositionMap",JT),Dd=class{constructor(e,r){this.gl=e.gl,this.location=r}},En=class extends Dd{constructor(e,r){super(e,r),this.current=0}set(e){this.current!==e&&(this.current=e,this.gl.uniform1i(this.location,e))}},Xa=class extends Dd{constructor(e,r){super(e,r),this.current=0}set(e){this.current!==e&&(this.current=e,this.gl.uniform1f(this.location,e))}},mo=class extends Dd{constructor(e,r){super(e,r),this.current=[0,0]}set(e){(e[0]!==this.current[0]||e[1]!==this.current[1])&&(this.current=e,this.gl.uniform2f(this.location,e[0],e[1]))}},vc=class extends Dd{constructor(e,r){super(e,r),this.current=[0,0,0]}set(e){(e[0]!==this.current[0]||e[1]!==this.current[1]||e[2]!==this.current[2])&&(this.current=e,this.gl.uniform3f(this.location,e[0],e[1],e[2]))}},Sm=class extends Dd{constructor(e,r){super(e,r),this.current=[0,0,0,0]}set(e){(e[0]!==this.current[0]||e[1]!==this.current[1]||e[2]!==this.current[2]||e[3]!==this.current[3])&&(this.current=e,this.gl.uniform4f(this.location,e[0],e[1],e[2],e[3]))}},lp=class extends Dd{constructor(e,r){super(e,r),this.current=ro.transparent}set(e){(e.r!==this.current.r||e.g!==this.current.g||e.b!==this.current.b||e.a!==this.current.a)&&(this.current=e,this.gl.uniform4f(this.location,e.r,e.g,e.b,e.a))}},QT=class extends Dd{constructor(e,r){super(e,r),this.current=[]}set(e){if(e!=this.current){this.current=e;let r=new Float32Array(e.length*4);for(let t=0;t<e.length;t++)r[4*t]=e[t].r,r[4*t+1]=e[t].g,r[4*t+2]=e[t].b,r[4*t+3]=e[t].a;this.gl.uniform4fv(this.location,r)}}},eA=class extends Dd{constructor(e,r){super(e,r),this.current=[]}set(e){if(e!=this.current){this.current=e;let r=new Float32Array(e);this.gl.uniform1fv(this.location,r)}}},CI=new Float32Array(16),vh=class extends Dd{constructor(e,r){super(e,r),this.current=CI}set(e){if(e[12]!==this.current[12]||e[0]!==this.current[0]){this.current=e,this.gl.uniformMatrix4fv(this.location,!1,e);return}for(let r=1;r<16;r++)if(e[r]!==this.current[r]){this.current=e,this.gl.uniformMatrix4fv(this.location,!1,e);break}}},Em=class{constructor(e,r,t){this.value=e,this.uniformNames=r.map(i=>`u_${i}`),this.type=t}setUniform(e,r,t){e.set(t.constantOr(this.value))}getBinding(e,r,t){return this.type==="color"?new lp(e,r):new Xa(e,r)}},Xp=class{constructor(e,r){this.uniformNames=r.map(t=>`u_${t}`),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1}setConstantPatternPositions(e,r){this.pixelRatioFrom=r.pixelRatio,this.pixelRatioTo=e.pixelRatio,this.patternFrom=r.tlbr,this.patternTo=e.tlbr}setConstantDashPositions(e,r){this.dashTo=[0,e.y,e.height,e.width],this.dashFrom=[0,r.y,r.height,r.width]}setUniform(e,r,t,i){let a=null;i==="u_pattern_to"?a=this.patternTo:i==="u_pattern_from"?a=this.patternFrom:i==="u_dasharray_to"?a=this.dashTo:i==="u_dasharray_from"?a=this.dashFrom:i==="u_pixel_ratio_to"?a=this.pixelRatioTo:i==="u_pixel_ratio_from"&&(a=this.pixelRatioFrom),a!==null&&e.set(a)}getBinding(e,r,t){return t.startsWith("u_pattern")||t.startsWith("u_dasharray_")?new Sm(e,r):new Xa(e,r)}},Ld=class{constructor(e,r,t,i){this.expression=e,this.type=t,this.maxValue=0,this.paintVertexAttributes=r.map(a=>({name:`a_${a}`,type:"Float32",components:t==="color"?2:1,offset:0})),this.paintVertexArray=new i}populatePaintArray(e,r,t){let i=this.paintVertexArray.length,a=this.expression.evaluate(new ns(0,t),r,{},t.canonical,[],t.formattedSection);this.paintVertexArray.resize(e),this._setPaintValue(i,e,a)}updatePaintArray(e,r,t,i,a){let o=this.expression.evaluate(new ns(0,a),t,i);this._setPaintValue(e,r,o)}_setPaintValue(e,r,t){if(this.type==="color"){let i=M6(t);for(let a=e;a<r;a++)this.paintVertexArray.emplace(a,i[0],i[1])}else{for(let i=e;i<r;i++)this.paintVertexArray.emplace(i,t);this.maxValue=Math.max(this.maxValue,Math.abs(t))}}upload(e){var r,t;(r=this.paintVertexArray)!=null&&r.arrayBuffer.byteLength&&((t=this.paintVertexBuffer)!=null&&t.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=e.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))}destroy(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()}},mh=class{constructor(e,r,t,i,a,o){this.expression=e,this.uniformNames=r.map(s=>`u_${s}_t`),this.type=t,this.useIntegerZoom=i,this.zoom=a,this.maxValue=0,this.paintVertexAttributes=r.map(s=>({name:`a_${s}`,type:"Float32",components:t==="color"?4:2,offset:0})),this.paintVertexArray=new o}populatePaintArray(e,r,t){let i=this.expression.evaluate(new ns(this.zoom,t),r,{},t.canonical,[],t.formattedSection),a=this.expression.evaluate(new ns(this.zoom+1,t),r,{},t.canonical,[],t.formattedSection),o=this.paintVertexArray.length;this.paintVertexArray.resize(e),this._setPaintValue(o,e,i,a)}updatePaintArray(e,r,t,i,a){let o=this.expression.evaluate(new ns(this.zoom,a),t,i),s=this.expression.evaluate(new ns(this.zoom+1,a),t,i);this._setPaintValue(e,r,o,s)}_setPaintValue(e,r,t,i){if(this.type==="color"){let a=M6(t),o=M6(i);for(let s=e;s<r;s++)this.paintVertexArray.emplace(s,a[0],a[1],o[0],o[1])}else{for(let a=e;a<r;a++)this.paintVertexArray.emplace(a,t,i);this.maxValue=Math.max(this.maxValue,Math.abs(t),Math.abs(i))}}upload(e){var r,t;(r=this.paintVertexArray)!=null&&r.arrayBuffer.byteLength&&((t=this.paintVertexBuffer)!=null&&t.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=e.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))}destroy(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()}setUniform(e,r){let t=this.useIntegerZoom?Math.floor(r.zoom):r.zoom,i=to(this.expression.interpolationFactor(t,this.zoom,this.zoom+1),0,1);e.set(i)}getBinding(e,r,t){return new Xa(e,r)}},up=class{constructor(e,r,t,i,a,o){this.expression=e,this.type=r,this.useIntegerZoom=t,this.zoom=i,this.layerId=o,this.zoomInPaintVertexArray=new a,this.zoomOutPaintVertexArray=new a}populatePaintArray(e,r,t){let i=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(e),this.zoomOutPaintVertexArray.resize(e),this._setPaintValues(i,e,this.getPositionIds(r),t)}updatePaintArray(e,r,t,i,a){this._setPaintValues(e,r,this.getPositionIds(t),a)}_setPaintValues(e,r,t,i){let a=this.getPositions(i);if(!a||!t)return;let o=a[t.min],s=a[t.mid],l=a[t.max];if(o&&s&&l)for(let n=e;n<r;n++)this.emplace(this.zoomInPaintVertexArray,n,o,s),this.emplace(this.zoomOutPaintVertexArray,n,l,s)}upload(e){var r,t;if((r=this.zoomInPaintVertexArray)!=null&&r.arrayBuffer.byteLength&&((t=this.zoomOutPaintVertexArray)!=null&&t.arrayBuffer.byteLength)){let i=this.getVertexAttributes();this.zoomInPaintVertexBuffer=e.createVertexBuffer(this.zoomInPaintVertexArray,i,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=e.createVertexBuffer(this.zoomOutPaintVertexArray,i,this.expression.isStateDependent)}}destroy(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()}},tA=class extends up{getPositions(e){return e.imagePositions}getPositionIds(e){var r;return(r=e.patterns)==null?void 0:r[this.layerId]}getVertexAttributes(){return MI.members}emplace(e,r,t,i){e.emplace(r,t.tlbr[0],t.tlbr[1],t.tlbr[2],t.tlbr[3],i.tlbr[0],i.tlbr[1],i.tlbr[2],i.tlbr[3],t.pixelRatio,i.pixelRatio)}},rA=class extends up{getPositions(e){return e.dashPositions}getPositionIds(e){var r;return(r=e.dashes)==null?void 0:r[this.layerId]}getVertexAttributes(){return SI.members}emplace(e,r,t,i){e.emplace(r,0,t.y,t.height,t.width,0,i.y,i.height,i.width)}},iA=class{constructor(e,r,t){this.binders={},this._buffers=[];let i=[];for(let a in e.paint._values){if(!t(a))continue;let o=e.paint.get(a);if(!(o instanceof zf)||!rm(o.property.specification))continue;let s=VQ(a,e.type),l=o.value,n=o.property.specification.type,u=o.property.useIntegerZoom,c=o.property.specification["property-type"],f=c==="cross-faded"||c==="cross-faded-data-driven";if(l.kind==="constant")this.binders[a]=f?new Xp(l.value,s):new Em(l.value,s,n),i.push(`/u_${a}`);else if(l.kind==="source"||f){let h=FL(a,n,"source");this.binders[a]=f?a==="line-dasharray"?new rA(l,n,u,r,h,e.id):new tA(l,n,u,r,h,e.id):new Ld(l,s,n,h),i.push(`/a_${a}`)}else{let h=FL(a,n,"composite");this.binders[a]=new mh(l,s,n,u,r,h),i.push(`/z_${a}`)}}this.cacheKey=i.sort().join("")}getMaxValue(e){let r=this.binders[e];return r instanceof Ld||r instanceof mh?r.maxValue:0}populatePaintArrays(e,r,t){for(let i in this.binders){let a=this.binders[i];(a instanceof Ld||a instanceof mh||a instanceof up)&&a.populatePaintArray(e,r,t)}}setConstantPatternPositions(e,r){for(let t in this.binders){let i=this.binders[t];i instanceof Xp&&i.setConstantPatternPositions(e,r)}}setConstantDashPositions(e,r){for(let t in this.binders){let i=this.binders[t];i instanceof Xp&&i.setConstantDashPositions(e,r)}}updatePaintArrays(e,r,t,i,a){let o=!1;for(let s of e){let l=r.getPositions(s.id);for(let n of l){let u=t.feature(n.index);for(let c in this.binders){let f=this.binders[c];(f instanceof Ld||f instanceof mh||f instanceof up)&&f.expression.isStateDependent===!0&&(f.expression=i.paint.get(c).value,f.updatePaintArray(n.start,n.end,u,s.state,a),o=!0)}}}return o}defines(){let e=[];for(let r in this.binders){let t=this.binders[r];(t instanceof Em||t instanceof Xp)&&e.push(...t.uniformNames.map(i=>`#define HAS_UNIFORM_${i}`))}return e}getBinderAttributes(){let e=[];for(let r in this.binders){let t=this.binders[r];if(t instanceof Ld||t instanceof mh)for(let i of t.paintVertexAttributes)e.push(i.name);else if(t instanceof up){let i=t.getVertexAttributes();for(let a of i)e.push(a.name)}}return e}getBinderUniforms(){let e=[];for(let r in this.binders){let t=this.binders[r];if(t instanceof Em||t instanceof Xp||t instanceof mh)for(let i of t.uniformNames)e.push(i)}return e}getPaintVertexBuffers(){return this._buffers}getUniforms(e,r){let t=[];for(let i in this.binders){let a=this.binders[i];if(a instanceof Em||a instanceof Xp||a instanceof mh){for(let o of a.uniformNames)if(r[o]){let s=a.getBinding(e,r[o],o);t.push({name:o,property:i,binding:s})}}}return t}setUniforms(e,r,t,i){for(let{name:a,property:o,binding:s}of r)this.binders[o].setUniform(s,i,t.get(o),a)}updatePaintBuffers(e){this._buffers=[];for(let r in this.binders){let t=this.binders[r];if(e&&t instanceof up){let i=e.fromScale===2?t.zoomInPaintVertexBuffer:t.zoomOutPaintVertexBuffer;i&&this._buffers.push(i)}else(t instanceof Ld||t instanceof mh)&&t.paintVertexBuffer&&this._buffers.push(t.paintVertexBuffer)}}upload(e){for(let r in this.binders){let t=this.binders[r];(t instanceof Ld||t instanceof mh||t instanceof up)&&t.upload(e)}this.updatePaintBuffers()}destroy(){for(let e in this.binders){let r=this.binders[e];(r instanceof Ld||r instanceof mh||r instanceof up)&&r.destroy()}}},Zp=class{constructor(e,r,t=()=>!0){this.programConfigurations={};for(let i of e)this.programConfigurations[i.id]=new iA(i,r,t);this.needsUpload=!1,this._featureMap=new JT,this._bufferOffset=0}populatePaintArrays(e,r,t,i){for(let a in this.programConfigurations)this.programConfigurations[a].populatePaintArrays(e,r,i);r.id!==void 0&&this._featureMap.add(r.id,t,this._bufferOffset,e),this._bufferOffset=e,this.needsUpload=!0}updatePaintArrays(e,r,t,i){for(let a of t)this.needsUpload=this.programConfigurations[a.id].updatePaintArrays(e,this._featureMap,r,a,i)||this.needsUpload}get(e){return this.programConfigurations[e]}upload(e){if(this.needsUpload){for(let r in this.programConfigurations)this.programConfigurations[r].upload(e);this.needsUpload=!1}}destroy(){for(let e in this.programConfigurations)this.programConfigurations[e].destroy()}},Qa("ConstantBinder",Em),Qa("CrossFadedConstantBinder",Xp),Qa("SourceExpressionBinder",Ld),Qa("CrossFadedPatternBinder",tA),Qa("CrossFadedDasharrayBinder",rA),Qa("CompositeExpressionBinder",mh),Qa("ProgramConfiguration",iA,{omit:["_buffers"]}),Qa("ProgramConfigurationSet",Zp),db=2**14-1,aA=-db-1,nA=-32768,pb=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(r=>r.id),this.index=e.index,this.hasDependencies=!1,this.layoutVertexArray=new hI,this.indexArray=new ed,this.segments=new Ks,this.programConfigurations=new Zp(e.layers,e.zoom),this.stateDependentLayerIds=this.layers.filter(r=>r.isStateDependent()).map(r=>r.id)}populate(e,r,t){let i=this.layers[0],a=[],o=null,s=!1,l=i.type==="heatmap";if(i.type==="circle"){let f=i;o=f.layout.get("circle-sort-key"),s=!o.isConstant(),l||(l=f.paint.get("circle-pitch-alignment")==="map")}let n=l?r.subdivisionGranularity.circle:1,u=new ns(this.zoom),c=this.layers[0]._featureFilter.needGeometry;for(let{feature:f,id:h,index:d,sourceLayerIndex:p}of e){let g=N0(f,c);if(!this.layers[0]._featureFilter.filter(u,g,t))continue;let m=s?o.evaluate(g,{},t):void 0,y={id:h,properties:f.properties,type:f.type,sourceLayerIndex:p,index:d,geometry:c?g.geometry:O0(f),patterns:{},sortKey:m};a.push(y)}s&&a.sort((f,h)=>f.sortKey-h.sortKey);for(let f of a){let{geometry:h,index:d,sourceLayerIndex:p}=f,g=e[d].feature;this.addFeature(f,h,d,t,n),r.featureIndex.insert(g,h,d,p,this.index)}}update(e,r,t){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,r,this.stateDependentLayers,{imagePositions:t})}addFeatures(e){}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,AI),this.indexBuffer=e.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())}addFeature(e,r,t,i,a=1){let o;switch(a){case 1:o=[0,7];break;case 3:o=[0,2,5,7];break;case 5:o=[0,1,3,4,6,7];break;case 7:o=[0,1,2,3,4,5,6,7];break;default:throw Error(`Invalid circle bucket granularity: ${a}; valid values are 1, 3, 5, 7.`)}let s=o.length;for(let l of r)for(let n of l){let u=n.x,c=n.y;if(u<0||u>=8192||c<0||c>=8192)continue;let f=this.segments.prepareSegment(s*s,this.layoutVertexArray,this.indexArray,e.sortKey),h=f.vertexLength;for(let d=0;d<s;d++)for(let p=0;p<s;p++)HQ(this.layoutVertexArray,u,c,o[p],o[d]);for(let d=0;d<s-1;d++)for(let p=0;p<s-1;p++){let g=h+d*s+p,m=h+(d+1)*s+p;this.indexArray.emplaceBack(g,m+1,g+1),this.indexArray.emplaceBack(g,m,m+1)}f.vertexLength+=s*s,f.primitiveLength+=(s-1)*(s-1)*2}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,t,{imagePositions:{},canonical:i})}},Qa("CircleBucket",pb,{omit:["layers"]}),LI=()=>DI||(DI=new vu({"circle-sort-key":new Fn(mi.layout_circle["circle-sort-key"],"circle-sort-key")})),PI=()=>FI||(FI=new vu({"circle-radius":new Fn(mi.paint_circle["circle-radius"],"circle-radius"),"circle-color":new Fn(mi.paint_circle["circle-color"],"circle-color"),"circle-blur":new Fn(mi.paint_circle["circle-blur"],"circle-blur"),"circle-opacity":new Fn(mi.paint_circle["circle-opacity"],"circle-opacity"),"circle-translate":new Ha(mi.paint_circle["circle-translate"],"circle-translate"),"circle-translate-anchor":new Ha(mi.paint_circle["circle-translate-anchor"],"circle-translate-anchor"),"circle-pitch-scale":new Ha(mi.paint_circle["circle-pitch-scale"],"circle-pitch-scale"),"circle-pitch-alignment":new Ha(mi.paint_circle["circle-pitch-alignment"],"circle-pitch-alignment"),"circle-stroke-width":new Fn(mi.paint_circle["circle-stroke-width"],"circle-stroke-width"),"circle-stroke-color":new Fn(mi.paint_circle["circle-stroke-color"],"circle-stroke-color"),"circle-stroke-opacity":new Fn(mi.paint_circle["circle-stroke-opacity"],"circle-stroke-opacity")})),II={get paint(){return PI()},get layout(){return LI()}},RI=e=>e.type==="circle",zI=class extends ph{constructor(e,r){super(e,II,r)}createBucket(e){return new pb(e)}queryRadius(e){let r=e;return sm("circle-radius",this,r)+sm("circle-stroke-width",this,r)+ex(this.paint.get("circle-translate"))}queryIntersectsFeature({queryGeometry:e,feature:r,featureState:t,geometry:i,transform:a,pixelsToTileUnits:o,unwrappedTileID:s,getElevation:l}){let n=tx(e,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),-a.bearingInRadians,o),u=this.paint.get("circle-radius").evaluate(r,t)+this.paint.get("circle-stroke-width").evaluate(r,t),c=this.paint.get("circle-pitch-scale"),f=this.paint.get("circle-pitch-alignment"),h,d;return f==="map"?(h=n,d=u*o):(h=iee(n,a,s,l),d=u),BL({queryGeometry:h,size:d,transform:a,unwrappedTileID:s,getElevation:l,pitchAlignment:f,pitchScale:c},i)}},oA=class extends pb{},Qa("HeatmapBucket",oA,{omit:["layers"]}),OI=()=>BI||(BI=new vu({"heatmap-radius":new Fn(mi.paint_heatmap["heatmap-radius"],"heatmap-radius"),"heatmap-weight":new Fn(mi.paint_heatmap["heatmap-weight"],"heatmap-weight"),"heatmap-intensity":new Ha(mi.paint_heatmap["heatmap-intensity"],"heatmap-intensity"),"heatmap-color":new Sg(mi.paint_heatmap["heatmap-color"],"heatmap-color"),"heatmap-opacity":new Ha(mi.paint_heatmap["heatmap-opacity"],"heatmap-opacity")})),NI={get paint(){return OI()}},vb=class Qj{constructor(r,t){C6(this,r,1,t)}resize(r){OL(this,r,1)}clone(){return new Qj({width:this.width,height:this.height},new Uint8Array(this.data))}static copy(r,t,i,a,o){D6(r,t,i,a,o,1)}},Rs=class eU{constructor(r,t){C6(this,r,4,t)}resize(r){OL(this,r,4)}replace(r,t){t?this.data.set(r):this.data=r instanceof Uint8ClampedArray?new Uint8Array(r.buffer):r}clone(){return new eU({width:this.width,height:this.height},new Uint8Array(this.data))}static copy(r,t,i,a,o){D6(r,t,i,a,o,4)}setPixel(r,t,i){let a=(r*this.width+t)*4;this.data[a+0]=Math.round(i.r*255/i.a),this.data[a+1]=Math.round(i.g*255/i.a),this.data[a+2]=Math.round(i.b*255/i.a),this.data[a+3]=Math.round(i.a*255)}},Qa("AlphaImage",vb),Qa("RGBAImage",Rs),Dg="big-fb",jI=e=>e.type==="heatmap",UI=class extends ph{createBucket(e){return new oA(e)}constructor(e,r){super(e,NI,r),this.heatmapFbos=new Map,this._updateColorRamp()}_handleSpecialPaintPropertyUpdate(e){e==="heatmap-color"&&this._updateColorRamp()}_updateColorRamp(){let e=this._transitionablePaint._values["heatmap-color"].value.expression;this.colorRamp=NL({expression:e,evaluationKey:"heatmapDensity",image:this.colorRamp}),this.colorRampTexture=null}resize(){this.heatmapFbos.has("big-fb")&&this.heatmapFbos.delete(Dg)}queryRadius(e){return sm("heatmap-radius",this,e)}queryIntersectsFeature({queryGeometry:e,feature:r,featureState:t,geometry:i,transform:a,pixelsToTileUnits:o,unwrappedTileID:s,getElevation:l}){return BL({queryGeometry:e,size:this.paint.get("heatmap-radius").evaluate(r,t)*o,transform:a,unwrappedTileID:s,getElevation:l},i)}hasOffscreenPass(){return this.paint.get("heatmap-opacity")!==0&&!this.isHidden()}},VI=()=>qI||(qI=new vu({"hillshade-illumination-direction":new Ha(mi.paint_hillshade["hillshade-illumination-direction"],"hillshade-illumination-direction"),"hillshade-illumination-altitude":new Ha(mi.paint_hillshade["hillshade-illumination-altitude"],"hillshade-illumination-altitude"),"hillshade-illumination-anchor":new Ha(mi.paint_hillshade["hillshade-illumination-anchor"],"hillshade-illumination-anchor"),"hillshade-exaggeration":new Ha(mi.paint_hillshade["hillshade-exaggeration"],"hillshade-exaggeration"),"hillshade-shadow-color":new Ha(mi.paint_hillshade["hillshade-shadow-color"],"hillshade-shadow-color"),"hillshade-highlight-color":new Ha(mi.paint_hillshade["hillshade-highlight-color"],"hillshade-highlight-color"),"hillshade-accent-color":new Ha(mi.paint_hillshade["hillshade-accent-color"],"hillshade-accent-color"),"hillshade-method":new Ha(mi.paint_hillshade["hillshade-method"],"hillshade-method"),resampling:new Ha(mi.paint_hillshade.resampling,"resampling")})),GI={get paint(){return VI()}},HI=e=>e.type==="hillshade",$I=class extends ph{constructor(e,r){super(e,GI,r),this.recalculate({zoom:0,zoomHistory:{}},void 0)}getIlluminationProperties(){let e=this.paint.get("hillshade-illumination-direction").values,r=this.paint.get("hillshade-illumination-altitude").values,t=this.paint.get("hillshade-highlight-color").values,i=this.paint.get("hillshade-shadow-color").values,a=Math.max(e.length,r.length,t.length,i.length);e=e.concat(Array(a-e.length).fill(e.at(-1))),r=r.concat(Array(a-r.length).fill(r.at(-1))),t=t.concat(Array(a-t.length).fill(t.at(-1))),i=i.concat(Array(a-i.length).fill(i.at(-1)));let o=r.map(rl);return{directionRadians:e.map(rl),altitudeRadians:o,shadowColor:i,highlightColor:t}}hasOffscreenPass(){return this.paint.get("hillshade-exaggeration")!==0&&!this.isHidden()}},YI=()=>WI||(WI=new vu({"color-relief-opacity":new Ha(mi["paint_color-relief"]["color-relief-opacity"],"color-relief-opacity"),"color-relief-color":new Sg(mi["paint_color-relief"]["color-relief-color"],"color-relief-color"),resampling:new Ha(mi["paint_color-relief"].resampling,"resampling")})),XI={get paint(){return YI()}},jl=class{constructor(e,r,t,i){this.context=e,this.format=t,this.texture=e.gl.createTexture(),this._ownedHandle=this.texture,this.update(r,i)}update(e,r,t){var i;let{width:a,height:o}=e,s=(((i=this.size)==null?void 0:i[0])!==a||this.size[1]!==o)&&!t,{context:l}=this,{gl:n}=l;this.useMipmap=!!r?.useMipmap,s&&this.size&&this.format===n.RGBA&&(n.deleteTexture(this.texture),this.texture=n.createTexture(),this._ownedHandle=this.texture,this.magFilter=void 0,this.minFilter=void 0,this.wrap=void 0),n.bindTexture(n.TEXTURE_2D,this.texture),l.pixelStoreUnpackFlipY.set(!1),l.pixelStoreUnpack.set(1);let u=this.format===n.RGBA&&r?.premultiply!==!1;if(s)if(this.size=[a,o],this.format===n.RGBA&&a>0&&o>0){let c=this.useMipmap?Math.floor(Math.log2(Math.max(a,o)))+1:1;if(n.texStorage2D(n.TEXTURE_2D,c,n.RGBA8,a,o),rx(e)){l.pixelStoreUnpackPremultiplyAlpha.set(!1);let{data:f}=e;u&&f&&(f=L6(f)),f&&n.texSubImage2D(n.TEXTURE_2D,0,0,0,a,o,n.RGBA,n.UNSIGNED_BYTE,f)}else l.pixelStoreUnpackPremultiplyAlpha.set(u),n.texSubImage2D(n.TEXTURE_2D,0,0,0,n.RGBA,n.UNSIGNED_BYTE,e)}else rx(e)?(l.pixelStoreUnpackPremultiplyAlpha.set(!1),this._uploadRawData(e,u,a,o,n)):(l.pixelStoreUnpackPremultiplyAlpha.set(u),this._uploadDomImage(e,n));else{let{x:c,y:f}=t||{x:0,y:0};rx(e)?(l.pixelStoreUnpackPremultiplyAlpha.set(!1),this._updateRawData(e,u,c,f,a,o,n)):(l.pixelStoreUnpackPremultiplyAlpha.set(u),this._updateDomImage(e,c,f,n))}this.useMipmap&&!(rx(e)&&e.data===null)&&n.generateMipmap(n.TEXTURE_2D),l.pixelStoreUnpackFlipY.setDefault(),l.pixelStoreUnpack.setDefault(),l.pixelStoreUnpackPremultiplyAlpha.setDefault()}_uploadDomImage(e,r){r.texImage2D(r.TEXTURE_2D,0,this.format,this.format,r.UNSIGNED_BYTE,e)}_uploadRawData(e,r,t,i,a){let{data:o}=e;r&&o&&(o=L6(o)),a.texImage2D(a.TEXTURE_2D,0,this.format,t,i,0,this.format,a.UNSIGNED_BYTE,o)}_updateDomImage(e,r,t,i){i.texSubImage2D(i.TEXTURE_2D,0,r,t,i.RGBA,i.UNSIGNED_BYTE,e)}_updateRawData(e,r,t,i,a,o,s){let{data:l}=e;r&&l&&(l=L6(l)),s.texSubImage2D(s.TEXTURE_2D,0,t,i,a,o,s.RGBA,s.UNSIGNED_BYTE,l)}bind(e,r,t){let{context:i}=this,{gl:a}=i;this.texture!==this._ownedHandle&&(this.texture=this._ownedHandle),a.bindTexture(a.TEXTURE_2D,this.texture),(t===a.LINEAR_MIPMAP_NEAREST||t===a.LINEAR_MIPMAP_LINEAR)&&!this.useMipmap&&(t=a.LINEAR);let o=t||e;e!==this.magFilter&&(a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,e),this.magFilter=e),o!==this.minFilter&&(a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,o),this.minFilter=o),r!==this.wrap&&(a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,r),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,r),this.wrap=r)}generateMipmap(){if(!this.useMipmap)return;let{gl:e}=this.context;e.bindTexture(e.TEXTURE_2D,this.texture),e.generateMipmap(e.TEXTURE_2D)}destroy(){let{gl:e}=this.context;e.deleteTexture(this.texture),this.texture=null,this._ownedHandle=null}},ZI=(km=class{constructor(e,r,t,i=1,a=1,o=1,s=0){if(this.uid=e,r.height!==r.width)throw RangeError("DEM tiles must be square");if(t&&!["mapbox","terrarium","custom"].includes(t)){To(`"${t}" is not a valid encoding type. Valid types include "mapbox", "terrarium" and "custom".`);return}this.stride=r.height;let l=this.dim=r.height-4;switch(this.data=new Uint32Array(r.data.buffer),km.byteViewCache.set(this,new Uint8Array(this.data.buffer)),t){case"terrarium":this.redFactor=256,this.greenFactor=1,this.blueFactor=1/256,this.baseShift=32768;break;case"custom":this.redFactor=i,this.greenFactor=a,this.blueFactor=o,this.baseShift=s;break;default:this.redFactor=6553.6,this.greenFactor=25.6,this.blueFactor=.1,this.baseShift=1e4}for(let u=-2;u<l+2;u++){let c=this._idx(0,Math.max(0,Math.min(l-1,u)));(u<0||u>=l)&&this.data.copyWithin(this._idx(0,u),c,c+l),this.data.fill(this.data[c],this._idx(-2,u),this._idx(0,u)),this.data.fill(this.data[c+l-1],this._idx(l,u),this._idx(l+1,u)+1)}let n=this._getByteView();this.min=2**53-1,this.max=-(2**53-1);for(let u=0;u<l;u++)for(let c=0;c<l;c++){let f=this._idx(u,c)*4,h=this._unpackAtIndex(n,f);h>this.max&&(this.max=h),h<this.min&&(this.min=h)}}get(e,r){let t=this._getByteView(),i=this._idx(e,r)*4;return this._unpackAtIndex(t,i)}sampleBilinear(e,r){let t=Math.floor(e),i=Math.floor(r);if(t<-1||t>=this.dim||i<-1||i>=this.dim)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${r}, dim: ${this.dim}`);let a=this._getByteView(),o=((i+2)*this.stride+t+2)*4,s=this.stride*4,l=e-t,n=r-i,u=this._unpackAtIndex(a,o),c=this._unpackAtIndex(a,o+4),f=this._unpackAtIndex(a,o+s),h=this._unpackAtIndex(a,o+s+4);return u*(1-l)*(1-n)+c*l*(1-n)+f*(1-l)*n+h*l*n}getUnpackVector(){return[this.redFactor,this.greenFactor,this.blueFactor,this.baseShift]}_idx(e,r){if(e<-2||e>=this.dim+2||r<-2||r>=this.dim+2)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${r}, dim: ${this.dim}`);return(r+2)*this.stride+(e+2)}unpack(e,r,t){return e*this.redFactor+r*this.greenFactor+t*this.blueFactor-this.baseShift}pack(e){return jL(e,this.getUnpackVector())}getPixels(){return new Rs({width:this.stride,height:this.stride},this._getByteView())}backfillBorder(e,r,t){if(this.dim!==e.dim)throw Error("dem dimension mismatch");let i=r*this.dim,a=r*this.dim+this.dim,o=t*this.dim,s=t*this.dim+this.dim;switch(r){case-1:i=a-2;break;case 1:a=i+2}switch(t){case-1:o=s-2;break;case 1:s=o+2}let l=-r*this.dim,n=-t*this.dim;for(let u=o;u<s;u++)for(let c=i;c<a;c++)this.data[this._idx(c,u)]=e.data[this._idx(c+l,u+n)]}_getByteView(){let e=km.byteViewCache.get(this);return e?.buffer!==this.data.buffer&&(e=new Uint8Array(this.data.buffer),km.byteViewCache.set(this,e)),e}_unpackAtIndex(e,r){return this.unpack(e[r],e[r+1],e[r+2])}},km.byteViewCache=new WeakMap,km),Qa("DEMData",ZI),KI=e=>e.type==="color-relief",JI=class extends ph{constructor(e,r){super(e,XI,r)}_createColorRamp(e){let r={elevationStops:[],colorStops:[]},t=this._transitionablePaint._values["color-relief-color"].value.expression;if(t instanceof bm&&t._styleExpression.expression instanceof Rf){this.colorRampExpression=t;let o=t._styleExpression.expression;r.elevationStops=o.labels,r.colorStops=[];for(let s of r.elevationStops)r.colorStops.push(o.evaluate({globals:{elevation:s}}))}if(r.elevationStops.length<1&&(r.elevationStops=[0],r.colorStops=[ro.transparent]),r.elevationStops.length<2&&(r.elevationStops.push(r.elevationStops[0]+1),r.colorStops.push(r.colorStops[0])),r.elevationStops.length<=e)return r;let i={elevationStops:[],colorStops:[]},a=(r.elevationStops.length-1)/(e-1);for(let o=0;o<r.elevationStops.length-.5;o+=a)i.elevationStops.push(r.elevationStops[Math.round(o)]),i.colorStops.push(r.colorStops[Math.round(o)]);return To(`Too many colors in specification of ${this.id} color-relief layer, may not render properly. Max possible colors: ${e}, provided: ${r.elevationStops.length}`),i}_colorRampChanged(){return this.colorRampExpression!=this._transitionablePaint._values["color-relief-color"].value.expression}getColorRampTextures(e,r,t){if(this.colorRampTextures&&!this._colorRampChanged())return this.colorRampTextures;let i=this._createColorRamp(r),a=new Rs({width:i.colorStops.length,height:1}),o=new Rs({width:i.colorStops.length,height:1});for(let s=0;s<i.elevationStops.length;s++){let l=jL(i.elevationStops[s],t);o.setPixel(0,s,new ro(l.r/255,l.g/255,l.b/255,1)),a.setPixel(0,s,i.colorStops[s])}return this.colorRampTextures={elevationTexture:new jl(e,o,e.gl.RGBA),colorTexture:new jl(e,a,e.gl.RGBA)},this.colorRampTextures}hasOffscreenPass(){return!this.isHidden()&&!!this.colorRampTextures}},mb=ul([{name:"a_pos",components:2,type:"Int16"}],4),QI=mb.members,mb.size,mb.alignment,Cm=new Set,gb=!1,yb=!1,yl=new Float64Array,Lg=0,_b=[],xb=[],Bf=[],Dm=[],Kp=new Uint32Array,Lm=new Uint32Array,Fm=new Uint32Array(256),Fd=class{constructor(e,r){if(r>e)throw Error("Min granularity must not be greater than base granularity.");this._baseZoomGranularity=e,this._minGranularity=r}getGranularityForZoomLevel(e){let r=1<<e;return Math.max(Math.floor(this._baseZoomGranularity/r),this._minGranularity,1)}},wb=(bb=class{constructor(e){this.fill=e.fill,this.line=e.line,this.tile=e.tile,this.stencil=e.stencil,this.circle=e.circle}},bb.noSubdivision=new bb({fill:new Fd(0,0),line:new Fd(0,0),tile:new Fd(0,0),stencil:new Fd(0,0),circle:1}),bb),Qa("SubdivisionGranularityExpression",Fd),Qa("SubdivisionGranularitySetting",wb),Pm=-32768,Im=32767,eR=class{constructor(e,r){this._vertexBuffer=[],this._vertexDictionary=new Map,this._used=!1,this._granularity=e,this._granularityCellSize=Bi/e,this._canonical=r}_getKey(e,r){return e+=32768,r+=32768,e<<16|r<<0}_vertexToIndex(e,r){if(e<-32768||r<-32768||e>32767||r>32767)throw Error("Vertex coordinates are out of signed 16 bit integer range.");let t=Math.round(e)|0,i=Math.round(r)|0,a=this._getKey(t,i);if(this._vertexDictionary.has(a))return this._vertexDictionary.get(a);let o=this._vertexBuffer.length/2;return this._vertexDictionary.set(a,o),this._vertexBuffer.push(t,i),o}_subdivideTrianglesScanline(e){if(this._granularity<2)return Aee(this._vertexBuffer,e);let r=[],t=e.length;for(let i=0;i<t;i+=3){let a=[e[i+0],e[i+1],e[i+2]],o=[this._vertexBuffer[e[i+0]*2+0],this._vertexBuffer[e[i+0]*2+1],this._vertexBuffer[e[i+1]*2+0],this._vertexBuffer[e[i+1]*2+1],this._vertexBuffer[e[i+2]*2+0],this._vertexBuffer[e[i+2]*2+1]],s=1/0,l=1/0,n=-1/0,u=-1/0;for(let p=0;p<3;p++){let g=o[p*2],m=o[p*2+1];s=Math.min(s,g),n=Math.max(n,g),l=Math.min(l,m),u=Math.max(u,m)}if(s===n||l===u)continue;let c=Math.floor(s/this._granularityCellSize),f=Math.ceil(n/this._granularityCellSize),h=Math.floor(l/this._granularityCellSize),d=Math.ceil(u/this._granularityCellSize);if(c===f&&h===d){r.push(...a);continue}for(let p=h;p<d;p++){let g=this._scanlineGenerateVertexRingForCellRow(p,o,a);Mee(this._vertexBuffer,g,r)}}return r}_scanlineGenerateVertexRingForCellRow(e,r,t){let i=e*this._granularityCellSize,a=i+this._granularityCellSize,o=[];for(let s=0;s<3;s++){let l=r[s*2],n=r[s*2+1],u=r[(s+1)*2%6],c=r[((s+1)*2+1)%6],f=r[(s+2)*2%6],h=r[((s+2)*2+1)%6],d=u-l,p=c-n,g=d===0,m=p===0,y=(i-n)/p,_=(a-n)/p,v=Math.min(y,_),x=Math.max(y,_);if(!m&&(v>=1||x<=0)||m&&(n<i||n>a)){c>=i&&c<=a&&o.push(t[(s+1)%3]);continue}if(!m&&v>0){let C=l+d*v,w=n+p*v;o.push(this._vertexToIndex(C,w))}let S=l+d*Math.max(v,0),M=l+d*Math.min(x,1);if(g||this._generateIntraEdgeVertices(o,l,n,u,c,S,M),!m&&x<1){let C=l+d*x,w=n+p*x;o.push(this._vertexToIndex(C,w))}(m||c>=i&&c<=a)&&o.push(t[(s+1)%3]),!m&&(c<=i||c>=a)&&this._generateInterEdgeVertices(o,l,n,u,c,f,h,M,i,a)}return o}_generateIntraEdgeVertices(e,r,t,i,a,o,s){let l=i-r,n=a-t,u=n===0,c=u?Math.min(r,i):Math.min(o,s),f=u?Math.max(r,i):Math.max(o,s),h=Math.floor(c/this._granularityCellSize)+1,d=Math.ceil(f/this._granularityCellSize)-1;if(u?r<i:o<s)for(let p=h;p<=d;p++){let g=p*this._granularityCellSize,m=t+n*(g-r)/l;e.push(this._vertexToIndex(g,m))}else for(let p=d;p>=h;p--){let g=p*this._granularityCellSize,m=t+n*(g-r)/l;e.push(this._vertexToIndex(g,m))}}_generateInterEdgeVertices(e,r,t,i,a,o,s,l,n,u){let c=a-t,f=o-i,h=s-a,d=(n-a)/h,p=(u-a)/h,g=Math.min(d,p),m=Math.max(d,p),y=i+f*g,_=Math.floor(Math.min(y,l)/this._granularityCellSize)+1,v=Math.ceil(Math.max(y,l)/this._granularityCellSize)-1,x=l<y,S=h===0;if(S&&(s===n||s===u))return;if(S||g>=1||m<=0){let C=r-o,w=t-s,k=(n-s)/w,A=(u-s)/w,b=o+C*Math.min(k,A);_=Math.floor(Math.min(b,l)/this._granularityCellSize)+1,v=Math.ceil(Math.max(b,l)/this._granularityCellSize)-1,x=l<b}let M=c>0?u:n;if(x)for(let C=_;C<=v;C++){let w=C*this._granularityCellSize;e.push(this._vertexToIndex(w,M))}else for(let C=v;C>=_;C--){let w=C*this._granularityCellSize;e.push(this._vertexToIndex(w,M))}}_generateOutline(e){let r=[];for(let t of e){let i=U0(t,this._granularity,!0),a=this._pointArrayToIndices(i),o=[];for(let s=1;s<a.length;s++)o.push(a[s-1]),o.push(a[s]);r.push(o)}return r}_handlePoles(e){let r=!1,t=!1;this._canonical&&(this._canonical.y===0&&(r=!0),this._canonical.y===(1<<this._canonical.z)-1&&(t=!0)),(r||t)&&this._fillPoles(e,r,t)}_ensureNoPoleVertices(){let e=this._vertexBuffer;for(let r=0;r<e.length;r+=2){let t=e[r+1];t===-32768&&(e[r+1]=-32767),t===32767&&(e[r+1]=32766)}}_generatePoleQuad(e,r,t,i,a,o){i>a==(o===-32768)?(e.push(t),e.push(r),e.push(this._vertexToIndex(i,o)),e.push(this._vertexToIndex(a,o)),e.push(t),e.push(this._vertexToIndex(i,o))):(e.push(r),e.push(t),e.push(this._vertexToIndex(i,o)),e.push(t),e.push(this._vertexToIndex(a,o)),e.push(this._vertexToIndex(i,o)))}_fillPoles(e,r,t){let i=this._vertexBuffer,a=Bi,o=e.length;for(let s=2;s<o;s+=3){let l=e[s-2],n=e[s-1],u=e[s],c=i[l*2],f=i[l*2+1],h=i[n*2],d=i[n*2+1],p=i[u*2],g=i[u*2+1];r&&(f===0&&d===0&&this._generatePoleQuad(e,l,n,c,h,Pm),d===0&&g===0&&this._generatePoleQuad(e,n,u,h,p,Pm),g===0&&f===0&&this._generatePoleQuad(e,u,l,p,c,Pm)),t&&(f===a&&d===a&&this._generatePoleQuad(e,l,n,c,h,Im),d===a&&g===a&&this._generatePoleQuad(e,n,u,h,p,Im),g===a&&f===a&&this._generatePoleQuad(e,u,l,p,c,Im))}}_initializeVertices(e){for(let r=0;r<e.length;r+=2)this._vertexToIndex(e[r],e[r+1])}subdividePolygonInternal(e,r){var t;if(this._used)throw Error("Subdivision: multiple use not allowed.");this._used=!0;let{flattened:i,holeIndices:a}=Tee(e);this._initializeVertices(i);let o;try{let l=aee(i,a),n=this._convertIndices(i,l);o=this._subdivideTrianglesScanline(n)}catch(l){console.error(l)}let s=[];return r&&(s=this._generateOutline(e)),this._ensureNoPoleVertices(),this._handlePoles(o),this._granularity>=2&&((t=this._canonical)==null?void 0:t.z)===0&&(o=this._removeTrianglesOutsideTileX(o),s=s.map(l=>this._removeLinesOutsideTileX(l))),{verticesFlattened:this._vertexBuffer,indicesTriangles:o,indicesLineList:s}}_vertexOutsideTileX(e){let r=this._vertexBuffer[e*2];return r<0||r>8192}_removeTrianglesOutsideTileX(e){let r=[];for(let t=0;t<e.length;t+=3)this._vertexOutsideTileX(e[t])||this._vertexOutsideTileX(e[t+1])||this._vertexOutsideTileX(e[t+2])||r.push(e[t],e[t+1],e[t+2]);return r}_removeLinesOutsideTileX(e){let r=[];for(let t=0;t<e.length;t+=2)this._vertexOutsideTileX(e[t])||this._vertexOutsideTileX(e[t+1])||r.push(e[t],e[t+1]);return r}_convertIndices(e,r){let t=[];for(let i of r){let a=e[i*2],o=e[i*2+1];t.push(this._vertexToIndex(a,o))}return t}_pointArrayToIndices(e){let r=[];for(let t of e)r.push(this._vertexToIndex(t.x,t.y));return r}},sA=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(r=>r.id),this.index=e.index,this.hasDependencies=!1,this.sdfPatterns={},this.patternFeatures=[],this.layoutVertexArray=new dI,this.indexArray=new ed,this.indexArray2=new cb,this.programConfigurations=new Zp(e.layers,e.zoom),this.segments=new Ks,this.segments2=new Ks,this.stateDependentLayerIds=this.layers.filter(r=>r.isStateDependent()).map(r=>r.id)}populate(e,r,t){this.hasDependencies=ix("fill",this.layers,r);let i=this.layers[0].layout.get("fill-sort-key"),a=!i.isConstant(),o=[],s=new ns(this.zoom),l=this.layers[0]._featureFilter.needGeometry;for(let{feature:n,id:u,index:c,sourceLayerIndex:f}of e){let h=N0(n,l);if(!this.layers[0]._featureFilter.filter(s,h,t))continue;let d=a?i.evaluate(h,{},t,r.availableImages):void 0,p={id:u,properties:n.properties,type:n.type,sourceLayerIndex:f,index:c,geometry:l?h.geometry:O0(n),patterns:{},sortKey:d};o.push(p)}a&&o.sort((n,u)=>n.sortKey-u.sortKey);for(let n of o){let{geometry:u,index:c,sourceLayerIndex:f}=n;if(this.hasDependencies){let d=F6("fill",this.layers,n,{zoom:this.zoom},r);this.patternFeatures.push(d)}else this.addFeature(n,u,c,t,{},r.subdivisionGranularity);let h=e[c].feature;r.featureIndex.insert(h,u,c,f,this.index)}}update(e,r,t){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,r,this.stateDependentLayers,{imagePositions:t})}addFeatures({options:e,canonical:r,patternPositions:t,patternMap:i}){this.detectSdfPatterns(i);for(let a of this.patternFeatures)this.addFeature(a,a.geometry,a.index,r,t,e.subdivisionGranularity)}detectSdfPatterns(e){for(let r of this.patternFeatures)for(let t in r.patterns){let i=r.patterns[t];this.recordSdfPattern(t,e[i.min]),this.recordSdfPattern(t,e[i.mid]),this.recordSdfPattern(t,e[i.max])}for(let r of this.layers){let t=r.paint.get("fill-pattern").constantOr(null);t&&(this.recordSdfPattern(r.id,e[t.from.toString()]),this.recordSdfPattern(r.id,e[t.to.toString()]))}}recordSdfPattern(e,r){if(!r)return;let t=r.sdf===!0,i=this.sdfPatterns[e];i===void 0?this.sdfPatterns[e]=t:i!==t&&To(`Style sheet warning: Cannot mix SDF and non-SDF fill patterns in layer "${e}"`)}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,QI),this.indexBuffer=e.createIndexBuffer(this.indexArray),this.indexBuffer2=e.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())}addFeature(e,r,t,i,a,o){for(let s of z_(r,500)){let l=YL(s,i,o.fill.getGranularityForZoomLevel(i.z)),n=this.layoutVertexArray;XL((u,c)=>{n.emplaceBack(u,c)},this.segments,this.layoutVertexArray,this.indexArray,l.verticesFlattened,l.indicesTriangles,this.segments2,this.indexArray2,l.indicesLineList)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,t,{imagePositions:a,canonical:i})}},Qa("FillBucket",sA,{omit:["layers","patternFeatures"]}),rR=()=>tR||(tR=new vu({"fill-sort-key":new Fn(mi.layout_fill["fill-sort-key"],"fill-sort-key")})),aR=()=>iR||(iR=new vu({"fill-antialias":new Ha(mi.paint_fill["fill-antialias"],"fill-antialias"),"fill-opacity":new Fn(mi.paint_fill["fill-opacity"],"fill-opacity"),"fill-layer-opacity":new Ha(mi.paint_fill["fill-layer-opacity"],"fill-layer-opacity"),"fill-color":new Fn(mi.paint_fill["fill-color"],"fill-color"),"fill-outline-color":new Fn(mi.paint_fill["fill-outline-color"],"fill-outline-color"),"fill-translate":new Ha(mi.paint_fill["fill-translate"],"fill-translate"),"fill-translate-anchor":new Ha(mi.paint_fill["fill-translate-anchor"],"fill-translate-anchor"),"fill-pattern":new wm(mi.paint_fill["fill-pattern"],"fill-pattern")})),nR={get paint(){return aR()},get layout(){return rR()}},oR=e=>e.type==="fill",sR=class extends ph{constructor(e,r){super(e,nR,r)}recalculate(e,r){super.recalculate(e,r);let t=this.paint._values["fill-outline-color"];t.value.kind==="constant"&&t.value.value===void 0&&(this.paint._values["fill-outline-color"]=this.paint._values["fill-color"])}createBucket(e){return new sA(e)}queryRadius(){return ex(this.paint.get("fill-translate"))}queryIntersectsFeature({queryGeometry:e,geometry:r,transform:t,pixelsToTileUnits:i}){return IL(tx(e,this.paint.get("fill-translate"),this.paint.get("fill-translate-anchor"),-t.bearingInRadians,i),r)}isTileClipped(){return!0}},Tb=ul([{name:"a_pos",components:2,type:"Int16"},{name:"a_normal_ed",components:4,type:"Int16"}],4),lR=ul([{name:"a_centroid",components:2,type:"Int16"}],4),uR=Tb.members,Tb.size,Tb.alignment,gh=class oE{constructor(){this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0}extend(r){return this.minX=Math.min(this.minX,r.x),this.minY=Math.min(this.minY,r.y),this.maxX=Math.max(this.maxX,r.x),this.maxY=Math.max(this.maxY,r.y),this}expandBy(r){return this.minX-=r,this.minY-=r,this.maxX+=r,this.maxY+=r,(this.minX>this.maxX||this.minY>this.maxY)&&(this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0),this}shrinkBy(r){return this.expandBy(-r)}map(r){let t=new oE;return t.extend(r(new Wr(this.minX,this.minY))),t.extend(r(new Wr(this.maxX,this.minY))),t.extend(r(new Wr(this.minX,this.maxY))),t.extend(r(new Wr(this.maxX,this.maxY))),t}static fromPoints(r){let t=new oE;for(let i of r)t.extend(i);return t}contains(r){return r.x>=this.minX&&r.x<=this.maxX&&r.y>=this.minY&&r.y<=this.maxY}empty(){return this.minX>this.maxX}width(){return this.maxX-this.minX}height(){return this.maxY-this.minY}covers(r){return!this.empty()&&!r.empty()&&r.minX>=this.minX&&r.maxX<=this.maxX&&r.minY>=this.minY&&r.maxY<=this.maxY}intersects(r){return!this.empty()&&!r.empty()&&r.minX<=this.maxX&&r.maxX>=this.minX&&r.minY<=this.maxY&&r.maxY>=this.minY}},cR=gh.fromPoints([new Wr(0,0),new Wr(Bi,Bi)]),Rm=class{constructor(e,r,t,i,a){for(this.properties=Object.create(null),this.extent=t,this.type=0,this.id=void 0,this._pbf=e,this._geometry=-1,this._keys=i,this._values=a;e.pos<r;){let o=e.readVarint();if(o===8)this.id=e.readVarint();else if(o===18){let s=e.readVarint()+e.pos;for(;e.pos<s;){let l=i[e.readVarint()],n=a[e.readVarint()];this.properties[l]=n}}else o===24?this.type=e.readVarint():(o===34&&(this._geometry=e.pos),e.skip(o))}}loadGeometry(){if(this._geometry<0)throw Error("feature has no geometry");let e=this._pbf;e.pos=this._geometry;let r=e.readVarint()+e.pos,t=[],i,a=1,o=0,s=0,l=0;for(;e.pos<r;){if(o<=0){let n=e.readVarint();if(a=n&7,o=n>>3,o===0)continue}if(o--,a===1)s+=e.readSVarint(),l+=e.readSVarint(),i&&t.push(i),i=[new Wr(s,l)];else if(a===2)s+=e.readSVarint(),l+=e.readSVarint(),i&&i.push(new Wr(s,l));else if(a===7)i&&i.push(i[0].clone());else throw Error(`unknown command ${a}`)}return i&&t.push(i),t}bbox(){if(this._geometry<0)throw Error("feature has no geometry");let e=this._pbf;e.pos=this._geometry;let r=e.readVarint()+e.pos,t=1,i=0,a=0,o=0,s=1/0,l=-1/0,n=1/0,u=-1/0;for(;e.pos<r;){if(i<=0){let c=e.readVarint();if(t=c&7,i=c>>3,i===0)continue}if(i--,t===1||t===2)a+=e.readSVarint(),o+=e.readSVarint(),a<s&&(s=a),a>l&&(l=a),o<n&&(n=o),o>u&&(u=o);else if(t!==7)throw Error(`unknown command ${t}`)}return[s,n,l,u]}toGeoJSON(e,r,t){let i=this.extent*2**t,a=this.extent*e,o=this.extent*r,s=this.loadGeometry();function l(f){return[(f.x+a)*360/i-180,360/Math.PI*Math.atan(Math.exp((1-(f.y+o)*2/i)*Math.PI))-90]}function n(f){return f.map(l)}let u;if(this.type===1){let f=[];for(let d of s)f.push(d[0]);let h=n(f);u=f.length===1?{type:"Point",coordinates:h[0]}:{type:"MultiPoint",coordinates:h}}else if(this.type===2){let f=s.map(n);u=f.length===1?{type:"LineString",coordinates:f[0]}:{type:"MultiLineString",coordinates:f}}else if(this.type===3){let f=KL(s),h=[];for(let d of f)h.push(d.map(n));u=h.length===1?{type:"Polygon",coordinates:h[0]}:{type:"MultiPolygon",coordinates:h}}else throw Error("unknown feature type");let c={type:"Feature",geometry:u,properties:this.properties};return this.id!=null&&(c.id=this.id),c}},Rm.types=["Unknown","Point","LineString","Polygon"],fR=class{constructor(e,r){for(this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=e,this._keys=[],this._values=[],this._features=[],r===void 0&&(r=e.length);e.pos<r;){let t=e.readVarint();t===10?this.name=e.readString():t===18?(this._features.push(e.pos),e.skip(t)):t===26?this._keys.push(e.readString()):t===34?this._values.push(Cee(e)):t===40?this.extent=e.readVarint():t===120?this.version=e.readVarint():e.skip(t)}this.length=this._features.length}feature(e){if(e<0||e>=this._features.length)throw Error("feature index out of bounds");this._pbf.pos=this._features[e];let r=this._pbf.readVarint()+this._pbf.pos;return new Rm(this._pbf,r,this.extent,this._keys,this._values)}},hR=class{constructor(e,r=e.length){let t=Object.create(null);for(;e.pos<r;){let i=e.readVarint();if(i===26){let a=new fR(e,e.readVarint()+e.pos);a.length&&(t[a.name]=a)}else e.skip(i)}this.layers=t}},mc=63710088e-1,An=class by{constructor(r,t){if(isNaN(r)||isNaN(t))throw Error(`Invalid LngLat object: (${r}, ${t})`);if(this.lng=+r,this.lat=+t,this.lat>90||this.lat<-90)throw Error("Invalid LngLat latitude value: must be between -90 and 90")}wrap(){return new by(ch(this.lng,-180,180),this.lat)}toArray(){return[this.lng,this.lat]}toString(){return`LngLat(${this.lng}, ${this.lat})`}distanceTo(r){let t=Math.PI/180,i=this.lat*t,a=r.lat*t,o=Math.sin(i)*Math.sin(a)+Math.cos(i)*Math.cos(a)*Math.cos((r.lng-this.lng)*t);return mc*Math.acos(Math.min(o,1))}static convert(r){if(r instanceof by)return r;if(Array.isArray(r)&&(r.length===2||r.length===3))return new by(Number(r[0]),Number(r[1]));if(!Array.isArray(r)&&typeof r=="object"&&r)return new by(Number("lng"in r?r.lng:r.lon),Number(r.lat));throw Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")}},lA=2*Math.PI*mc,Qo=class tU{constructor(r,t,i=0){this.x=+r,this.y=+t,this.z=+i}static fromLngLat(r,t=0){let i=An.convert(r);return new tU(lm(i.lng),um(i.lat),q0(t,i.lat))}toLngLat(){return new An(B6(this.x),og(this.y))}toAltitude(){return QL(this.z,this.y)}meterInMercatorCoordinateUnits(){return 1/lA*Dee(og(this.y))}},Jp=89.25,Ab=8192,uA=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(r=>r.id),this.index=e.index,this.hasDependencies=!1,this.layoutVertexArray=new pI,this.centroidVertexArray=new sp,this.indexArray=new ed,this.programConfigurations=new Zp(e.layers,e.zoom),this.segments=new Ks,this.stateDependentLayerIds=this.layers.filter(r=>r.isStateDependent()).map(r=>r.id)}populate(e,r,t){this.features=[],this.hasDependencies=ix("fill-extrusion",this.layers,r);let i=new ns(this.zoom),a=this.layers[0],o=a.layout.get("fill-extrusion-rounded-corner-distance"),s=a._featureFilter.needGeometry;for(let{feature:l,id:n,index:u,sourceLayerIndex:c}of e){let f=N0(l,s);if(!a._featureFilter.filter(i,f,t))continue;let h=s?f.geometry:O0(l),d={id:n,sourceLayerIndex:c,index:u,geometry:o>0?rF(h,o,t):h,properties:l.properties,type:l.type,patterns:{}};this.hasDependencies?this.features.push(F6("fill-extrusion",this.layers,d,{zoom:this.zoom},r)):this.addFeature(d,d.geometry,u,t,{},r.subdivisionGranularity),r.featureIndex.insert(l,d.geometry,u,c,this.index,!0)}}addFeatures({options:e,canonical:r,patternPositions:t}){for(let i of this.features){let{geometry:a}=i;this.addFeature(i,a,i.index,r,t,e.subdivisionGranularity)}}update(e,r,t){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,r,this.stateDependentLayers,{imagePositions:t})}isEmpty(){return this.layoutVertexArray.length===0&&this.centroidVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,uR),this.centroidVertexBuffer=e.createVertexBuffer(this.centroidVertexArray,lR.members,!0),this.indexBuffer=e.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.centroidVertexBuffer.destroy())}addFeature(e,r,t,i,a,o){let s=this.layers[0],l=s.layout?s.layout.get("fill-extrusion-rounded-corner-distance"):0,n=l>0?rF(r,l,i):r;for(let u of z_(n,500)){let c={x:0,y:0,sampleCount:0},f=this.layoutVertexArray.length;this.processPolygon(c,i,e,u,o);let h=this.layoutVertexArray.length-f,d=Math.floor(c.x/c.sampleCount),p=Math.floor(c.y/c.sampleCount);for(let g=0;g<h;g++)this.centroidVertexArray.emplaceBack(d,p)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,t,{imagePositions:a,canonical:i})}processPolygon(e,r,t,i,a){if(i.length<1||ZL(i[0]))return;for(let c of i)c.length!==0&&Bee(e,c);let o={segment:this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray)},s=a.fill.getGranularityForZoomLevel(r.z),l=Rm.types[t.type]==="Polygon";for(let c of i){if(c.length===0||ZL(c))continue;let f=U0(c,s,l);this._generateSideFaces(f,o)}if(!l)return;let n=YL(i,r,s,!1),u=this.layoutVertexArray;XL((c,f)=>{ug(u,c,f,0,0,1,1,0)},this.segments,this.layoutVertexArray,this.indexArray,n.verticesFlattened,n.indicesTriangles)}_generateSideFaces(e,r){let t=0;for(let i=1;i<e.length;i++){let a=e[i],o=e[i-1];if(z6(a,o))continue;r.segment.vertexLength+4>Ks.MAX_VERTEX_ARRAY_LENGTH&&(r.segment=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));let s=a.sub(o)._perp()._unit(),l=o.dist(a);t+l>32768&&(t=0),ug(this.layoutVertexArray,a.x,a.y,s.x,s.y,0,0,t),ug(this.layoutVertexArray,a.x,a.y,s.x,s.y,0,1,t),t+=l,ug(this.layoutVertexArray,o.x,o.y,s.x,s.y,0,0,t),ug(this.layoutVertexArray,o.x,o.y,s.x,s.y,0,1,t);let n=r.segment.vertexLength;this.indexArray.emplaceBack(n,n+2,n+1),this.indexArray.emplaceBack(n+1,n+2,n+3),r.segment.vertexLength+=4,r.segment.primitiveLength+=2}}},Qa("FillExtrusionBucket",uA,{omit:["layers","features"]}),pR=()=>dR||(dR=new vu({"fill-extrusion-rounded-corner-distance":new Ha(mi["layout_fill-extrusion"]["fill-extrusion-rounded-corner-distance"],"fill-extrusion-rounded-corner-distance")})),mR=()=>vR||(vR=new vu({"fill-extrusion-opacity":new Ha(mi["paint_fill-extrusion"]["fill-extrusion-opacity"],"fill-extrusion-opacity"),"fill-extrusion-color":new Fn(mi["paint_fill-extrusion"]["fill-extrusion-color"],"fill-extrusion-color"),"fill-extrusion-translate":new Ha(mi["paint_fill-extrusion"]["fill-extrusion-translate"],"fill-extrusion-translate"),"fill-extrusion-translate-anchor":new Ha(mi["paint_fill-extrusion"]["fill-extrusion-translate-anchor"],"fill-extrusion-translate-anchor"),"fill-extrusion-pattern":new wm(mi["paint_fill-extrusion"]["fill-extrusion-pattern"],"fill-extrusion-pattern"),"fill-extrusion-height":new Fn(mi["paint_fill-extrusion"]["fill-extrusion-height"],"fill-extrusion-height"),"fill-extrusion-base":new Fn(mi["paint_fill-extrusion"]["fill-extrusion-base"],"fill-extrusion-base"),"fill-extrusion-vertical-gradient":new Ha(mi["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"],"fill-extrusion-vertical-gradient")})),gR={get paint(){return mR()},get layout(){return pR()}},yR=e=>e.type==="fill-extrusion",_R=class extends ph{constructor(e,r){super(e,gR,r)}createBucket(e){return new uA(e)}queryRadius(){return ex(this.paint.get("fill-extrusion-translate"))}is3D(){return!0}queryIntersectsFeature({queryGeometry:e,feature:r,featureState:t,geometry:i,transform:a,pixelsToTileUnits:o,pixelPosMatrix:s}){let l=tx(e,this.paint.get("fill-extrusion-translate"),this.paint.get("fill-extrusion-translate-anchor"),-a.bearingInRadians,o),n=this.paint.get("fill-extrusion-height").evaluate(r,t),u=this.paint.get("fill-extrusion-base").evaluate(r,t),c=jee(l,s,0),f=Nee(i,u,n,s),h=f[0],d=f[1];return Oee(h,d,c)}},jae=new Uint32Array(96),xR="geojsonvt_clip_start",bR="geojsonvt_clip_end",Mb=ul([{name:"a_pos_normal",components:2,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}],4),wR=Mb.members,Mb.size,Mb.alignment,Sb=ul([{name:"a_uv_x",components:1,type:"Float32"},{name:"a_split_index",components:1,type:"Float32"}]),TR=Sb.members,Sb.size,Sb.alignment,AR=Math.cos(75/2*(Math.PI/180)),cA=1/2,fA=2**14/cA,hA=class{constructor(e){this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(r=>r.id),this.index=e.index,this.hasDependencies=!1,this.patternFeatures=[],this.lineClipsArray=[],this.gradients={};for(let r of this.layers)this.gradients[r.id]={};this.layoutVertexArray=new vI,this.layoutVertexArray2=new mI,this.indexArray=new ed,this.programConfigurations=new Zp(e.layers,e.zoom),this.segments=new Ks,this.maxLineLength=0,this.stateDependentLayerIds=this.layers.filter(r=>r.isStateDependent()).map(r=>r.id)}populate(e,r,t){this.hasDependencies=ix("line",this.layers,r)||this.hasLineDasharray(this.layers);let i=this.layers[0].layout.get("line-sort-key"),a=!i.isConstant(),o=[],s=new ns(this.zoom),l=this.layers[0]._featureFilter.needGeometry;for(let{feature:n,id:u,index:c,sourceLayerIndex:f}of e){let h=N0(n,l);if(!this.layers[0]._featureFilter.filter(s,h,t))continue;let d=a?i.evaluate(h,{},t):void 0,p={id:u,properties:n.properties,type:n.type,sourceLayerIndex:f,index:c,geometry:l?h.geometry:O0(n),patterns:{},dashes:{},sortKey:d};o.push(p)}a&&o.sort((n,u)=>n.sortKey-u.sortKey);for(let n of o){let{geometry:u,index:c,sourceLayerIndex:f}=n;this.hasDependencies?(ix("line",this.layers,r)?F6("line",this.layers,n,{zoom:this.zoom},r):this.hasLineDasharray(this.layers)&&this.addLineDashDependencies(this.layers,n,this.zoom,r),this.patternFeatures.push(n)):this.addFeature(n,u,c,t,{},{},r.subdivisionGranularity);let h=e[c].feature;r.featureIndex.insert(h,u,c,f,this.index)}}update(e,r,t,i){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(e,r,this.stateDependentLayers,{imagePositions:t,dashPositions:i})}addFeatures({options:e,canonical:r,patternPositions:t,dashPositions:i}){for(let a of this.patternFeatures)this.addFeature(a,a.geometry,a.index,r,t,i,e.subdivisionGranularity)}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(e){this.uploaded||(this.layoutVertexArray2.length!==0&&(this.layoutVertexBuffer2=e.createVertexBuffer(this.layoutVertexArray2,TR)),this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,wR),this.indexBuffer=e.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(e),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())}lineFeatureClips(e){if(e.properties&&Object.hasOwn(e.properties,"geojsonvt_clip_start")&&Object.hasOwn(e.properties,"geojsonvt_clip_end"))return{start:+e.properties[xR],end:+e.properties[bR]}}addFeature(e,r,t,i,a,o,s){let l=this.layers[0].layout,n=l.get("line-join").evaluate(e,{}),u=l.get("line-cap").evaluate(e,{}),c=l.get("line-miter-limit").evaluate(e,{}),f=l.get("line-round-limit").evaluate(e,{});this.lineClips=this.lineFeatureClips(e);for(let h of r)this.addLine(h,e,n,u,c,f,i,s);this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,t,{imagePositions:a,dashPositions:o,canonical:i})}addLine(e,r,t,i,a,o,s,l){this.distance=0,this.scaledDistance=0,this.totalDistance=0;let n=s?l.line.getGranularityForZoomLevel(s.z):1;if(e=U0(e,n),this.lineClips){this.lineClipsArray.push(this.lineClips);for(let v=0;v<e.length-1;v++)this.totalDistance+=e[v].dist(e[v+1]);this.updateScaledDistance(),this.maxLineLength=Math.max(this.maxLineLength,this.totalDistance)}let u=Rm.types[r.type]==="Polygon",c=e.length;for(;c>=2&&e[c-1].equals(e[c-2]);)c--;let f=0;for(;f<c-1&&e[f].equals(e[f+1]);)f++;if(c-f<(u?3:2))return;t==="bevel"&&(a=1.05);let h=this.overscaling<=16?15*Bi/(512*this.overscaling):0,d=this.segments.prepareSegment(c*10,this.layoutVertexArray,this.indexArray),p,g,m,y,_;this.e1=this.e2=-1,u&&(p=e[c-2],_=e[f].sub(p)._unit()._perp());for(let v=f;v<c;v++){if(m=v===c-1?u?e[f+1]:void 0:e[v+1],m&&e[v].equals(m))continue;_&&(y=_),p&&(g=p),p=e[v],_=m?m.sub(p)._unit()._perp():y,y||(y=_);let x=y.add(_);(x.x!==0||x.y!==0)&&x._unit();let S=y.x*_.x+y.y*_.y,M=x.x*_.x+x.y*_.y,C=M===0?1/0:1/M,w=2*Math.sqrt(2-2*M),k=M<AR&&g&&m,A=y.x*_.y-y.y*_.x>0;if(k&&v>f){let T=p.dist(g);if(T>2*h){let F=p.sub(p.sub(g)._mult(h/T)._round());this.updateDistance(g,F),this.addCurrentVertex(F,y,0,0,d),g=F}}let b=g&&m,E=b?t:u?"butt":i;if(b&&E==="round"&&(C<o?E="miter":C<=2&&(E="fakeround")),E==="miter"&&C>a&&(E="bevel"),E==="bevel"&&(C>2&&(E="flipbevel"),C<a&&(E="miter")),g&&this.updateDistance(g,p),E==="miter")x._mult(C),this.addCurrentVertex(p,x,0,0,d);else if(E==="flipbevel"){if(C>100)x=_.mult(-1);else{let T=C*y.add(_).mag()/y.sub(_).mag();x._perp()._mult(T*(A?-1:1))}this.addCurrentVertex(p,x,0,0,d),this.addCurrentVertex(p,x.mult(-1),0,0,d)}else if(E==="bevel"||E==="fakeround"){let T=-Math.sqrt(C*C-1),F=A?T:0,D=A?0:T;if(g&&this.addCurrentVertex(p,y,F,D,d),E==="fakeround"){let R=Math.round(w*180/Math.PI/20);for(let P=1;P<R;P++){let z=P/R;if(z!==.5){let L=z-.5,B=1.0904+S*(-3.2452+S*(3.55645-S*1.43519)),O=.848013+S*(-1.06021+S*.215638);z+=z*L*(z-1)*(B*L*L+O)}let I=_.sub(y)._mult(z)._add(y)._unit()._mult(A?-1:1);this.addHalfVertex(p,I.x,I.y,!1,A,0,d)}}m&&this.addCurrentVertex(p,_,-F,-D,d)}else if(E==="butt")this.addCurrentVertex(p,x,0,0,d);else if(E==="square"){let T=g?1:-1;this.addCurrentVertex(p,x,T,T,d)}else E==="round"&&(g&&(this.addCurrentVertex(p,y,0,0,d),this.addCurrentVertex(p,y,1,1,d,!0)),m&&(this.addCurrentVertex(p,_,-1,-1,d,!0),this.addCurrentVertex(p,_,0,0,d)));if(k&&v<c-1){let T=p.dist(m);if(T>2*h){let F=p.add(m.sub(p)._mult(h/T)._round());this.updateDistance(p,F),this.addCurrentVertex(F,_,0,0,d),p=F}}}}addCurrentVertex(e,r,t,i,a,o=!1){let s=r.x+r.y*t,l=r.y-r.x*t,n=-r.x+r.y*i,u=-r.y-r.x*i;this.addHalfVertex(e,s,l,o,!1,t,a),this.addHalfVertex(e,n,u,o,!0,-i,a),this.distance>fA/2&&this.totalDistance===0&&(this.distance=0,this.updateScaledDistance(),this.addCurrentVertex(e,r,t,i,a,o))}addHalfVertex({x:e,y:r},t,i,a,o,s,l){let n=(this.lineClips?this.scaledDistance*(fA-1):this.scaledDistance)*cA;if(this.layoutVertexArray.emplaceBack((e<<1)+ +!!a,(r<<1)+ +!!o,Math.round(63*t)+128,Math.round(63*i)+128,(s===0?0:s<0?-1:1)+1|(n&63)<<2,n>>6),this.lineClips){let c=(this.scaledDistance-this.lineClips.start)/(this.lineClips.end-this.lineClips.start);this.layoutVertexArray2.emplaceBack(c,this.lineClipsArray.length)}let u=l.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,u,this.e2),l.primitiveLength++),o?this.e2=u:this.e1=u}updateScaledDistance(){this.scaledDistance=this.lineClips?this.lineClips.start+(this.lineClips.end-this.lineClips.start)*this.distance/this.totalDistance:this.distance}updateDistance(e,r){this.distance+=e.dist(r),this.updateScaledDistance()}hasLineDasharray(e){for(let r of e){let t=r.paint.get("line-dasharray");if(t&&!t.isConstant())return!0}return!1}addLineDashDependencies(e,r,t,i){for(let a of e){let o=a.paint.get("line-dasharray");if(!o||o.value.kind==="constant")continue;let s=a.layout.get("line-cap").evaluate(r,{})==="round",l={dasharray:o.value.evaluate({zoom:t-1},r,{}),round:s},n={dasharray:o.value.evaluate({zoom:t},r,{}),round:s},u={dasharray:o.value.evaluate({zoom:t+1},r,{}),round:s},c=`${l.dasharray.join(",")},${l.round}`,f=`${n.dasharray.join(",")},${n.round}`,h=`${u.dasharray.join(",")},${u.round}`;i.dashDependencies[c]=l,i.dashDependencies[f]=n,i.dashDependencies[h]=u,r.dashes[a.id]={min:c,mid:f,max:h}}}},Qa("LineBucket",hA,{omit:["layers","patternFeatures"]}),SR=()=>MR||(MR=new vu({"line-cap":new Fn(mi.layout_line["line-cap"],"line-cap"),"line-join":new Fn(mi.layout_line["line-join"],"line-join"),"line-miter-limit":new Fn(mi.layout_line["line-miter-limit"],"line-miter-limit"),"line-round-limit":new Fn(mi.layout_line["line-round-limit"],"line-round-limit"),"line-sort-key":new Fn(mi.layout_line["line-sort-key"],"line-sort-key")})),kR=()=>ER||(ER=new vu({"line-opacity":new Fn(mi.paint_line["line-opacity"],"line-opacity"),"line-layer-opacity":new Ha(mi.paint_line["line-layer-opacity"],"line-layer-opacity"),"line-color":new Fn(mi.paint_line["line-color"],"line-color"),"line-translate":new Ha(mi.paint_line["line-translate"],"line-translate"),"line-translate-anchor":new Ha(mi.paint_line["line-translate-anchor"],"line-translate-anchor"),"line-width":new Fn(mi.paint_line["line-width"],"line-width"),"line-gap-width":new Fn(mi.paint_line["line-gap-width"],"line-gap-width"),"line-offset":new Fn(mi.paint_line["line-offset"],"line-offset"),"line-blur":new Fn(mi.paint_line["line-blur"],"line-blur"),"line-dasharray":new wm(mi.paint_line["line-dasharray"],"line-dasharray"),"line-pattern":new wm(mi.paint_line["line-pattern"],"line-pattern"),"line-gradient":new Sg(mi.paint_line["line-gradient"],"line-gradient")})),dA={get paint(){return kR()},get layout(){return SR()}},CR=class extends Fn{possiblyEvaluate(e,r){return r=new ns(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),super.possiblyEvaluate(e,r)}evaluate(e,r,t,i){return r=yn({},r,{zoom:Math.floor(r.zoom)}),super.evaluate(e,r,t,i)}},DR=e=>e.type==="line",LR=class extends ph{constructor(e,r){super(e,dA,r),this.gradientVersion=0,Eb||(Eb=new CR(dA.paint.properties["line-width"].specification,"line-floorwidth"),Eb.useIntegerZoom=!0)}_handleSpecialPaintPropertyUpdate(e){if(e==="line-gradient"){let r=this.gradientExpression();this.stepInterpolant=vQ(r)?r._styleExpression.expression instanceof Fx:!1,this.gradientVersion=(this.gradientVersion+1)%(2**53-1)}}gradientExpression(){return this._transitionablePaint._values["line-gradient"].value.expression}recalculate(e,r){super.recalculate(e,r),this.paint._values["line-floorwidth"]=Eb.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)}createBucket(e){return new hA(e)}queryRadius(e){let r=e,t=aF(sm("line-width",this,r),sm("line-gap-width",this,r)),i=sm("line-offset",this,r);return t/2+Math.abs(i)+ex(this.paint.get("line-translate"))}queryIntersectsFeature({queryGeometry:e,feature:r,featureState:t,geometry:i,transform:a,pixelsToTileUnits:o}){let s=tx(e,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),-a.bearingInRadians,o),l=o/2*aF(this.paint.get("line-width").evaluate(r,t),this.paint.get("line-gap-width").evaluate(r,t)),n=this.paint.get("line-offset").evaluate(r,t);return n&&(i=JQ(i,n*o)),$Q(s,i,l)}isTileClipped(){return!0}},FR=ul([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"},{name:"a_pixeloffset",components:4,type:"Int16"},{name:"a_height_offset",components:1,type:"Float32"}],4),PR=ul([{name:"a_projected_pos",components:3,type:"Float32"}],4),ul([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),IR=ul([{name:"a_placed",components:2,type:"Uint8"},{name:"a_shift",components:2,type:"Float32"},{name:"a_box_real",components:2,type:"Int16"}]),ul([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"}]),pA=ul([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4),RR=ul([{name:"a_pos",components:2,type:"Float32"},{name:"a_radius",components:1,type:"Float32"},{name:"a_flags",components:2,type:"Int16"}],4),ul([{name:"triangle",components:3,type:"Uint16"}]),ul([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"placedOrientation"},{type:"Uint8",name:"hidden"},{type:"Uint32",name:"crossTileID"},{type:"Int16",name:"associatedIconIndex"},{type:"Float32",name:"heightOffset"}]),ul([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"rightJustifiedTextSymbolIndex"},{type:"Int16",name:"centerJustifiedTextSymbolIndex"},{type:"Int16",name:"leftJustifiedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Int16",name:"placedIconSymbolIndex"},{type:"Int16",name:"verticalPlacedIconSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"verticalTextBoxStartIndex"},{type:"Uint16",name:"verticalTextBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"verticalIconBoxStartIndex"},{type:"Uint16",name:"verticalIconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numHorizontalGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint16",name:"numVerticalIconVertices"},{type:"Uint16",name:"useRuntimeCollisionCircles"},{type:"Uint32",name:"crossTileID"},{type:"Float32",name:"textBoxScale"},{type:"Float32",name:"collisionCircleDiameter"},{type:"Uint16",name:"textAnchorOffsetStartIndex"},{type:"Uint16",name:"textAnchorOffsetEndIndex"},{type:"Float32",name:"heightOffset"}]),ul([{type:"Float32",name:"offsetX"}]),ul([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]),ul([{type:"Uint16",name:"textAnchor"},{type:"Float32",components:2,name:"textOffset"}]),Fg=new class{constructor(){this.TIMEOUT=5e3,this.applyArabicShaping=null,this.processBidirectionalText=null,this.processStyledBidirectionalText=null,this.pluginStatus="unavailable",this.pluginURL=null,this.loadScriptResolve=()=>{}}setState(e){this.pluginStatus=e.pluginStatus,this.pluginURL=e.pluginURL}getState(){return{pluginStatus:this.pluginStatus,pluginURL:this.pluginURL}}setMethods(e){if(Fg.isParsed())throw Error("RTL text plugin already registered.");this.applyArabicShaping=e.applyArabicShaping,this.processBidirectionalText=e.processBidirectionalText,this.processStyledBidirectionalText=e.processStyledBidirectionalText,this.loadScriptResolve()}isParsed(){return this.applyArabicShaping!=null&&this.processBidirectionalText!=null&&this.processStyledBidirectionalText!=null}getRTLTextPluginStatus(){return this.pluginStatus}syncState(e,r){return Xr(this,null,function*(){if(this.isParsed())return this.getState();if(e.pluginStatus!=="loading")return this.setState(e),e;let t=e.pluginURL,i=new Promise(o=>{this.loadScriptResolve=o}),a=new Promise(o=>setTimeout(()=>o(),this.TIMEOUT));if(yield r(t),yield Promise.race([i,a]),this.isParsed()){let o={pluginStatus:"loaded",pluginURL:t};return this.setState(o),o}throw this.setState({pluginStatus:"error",pluginURL:""}),Error(`RTL Text Plugin failed to import scripts from ${t}`)})}},zR={C:"18g,1;g2,3;4nb,1",D:"17k,1;5,1;1,1;1,5;4,d;1,7;1,2;z,2;8,g;i,12;1,2;9,1;1,1;1,2;14,3;2,1;28,9;3,f;2,4;1,1;2,3;2,6;7a,1;2,5;1,1;g,a;5,2;2,6;1,f",R:"17m,4;1,1;1,1;5,4;l,1;14,3;1,3;g,i;12,1;2,9;1,1;1,1;2,2;1,1;o,2;2x,3;f,2;4,1;1,2;3,2;6u,j;b,1;r,3;1,1;2,2;6,1",T:"174,b;1,1;1a,l;g,1;2t,7;2,6;2,2;1,4;bt,9;16,o;1,t;1clb,1"},BR={1569:[65152,0,0,0],1570:[65153,65154,0,0],1571:[65155,65156,0,0],1572:[65157,65158,0,0],1573:[65159,65160,0,0],1574:[65161,65162,65163,65164],1575:[65165,65166,0,0],1576:[65167,65168,65169,65170],1577:[65171,65172,0,0],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194,0,0],1584:[65195,65196,0,0],1585:[65197,65198,0,0],1586:[65199,65200,0,0],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262,0,0],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1611:[65136,0,0,65137],1612:[65138,0,0,0],1613:[65140,0,0,0],1614:[65142,0,0,65143],1615:[65144,0,0,65145],1616:[65146,0,0,65147],1617:[65148,0,0,65149],1618:[65150,0,0,65151],1649:[64336,64337,0,0],1655:[64477,0,0,0],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393,0,0],1676:[64388,64389,0,0],1677:[64386,64387,0,0],1678:[64390,64391,0,0],1681:[64396,64397,0,0],1688:[64394,64395,0,0],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415,0,0],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421,0,0],1729:[64422,64423,64424,64425],1733:[64480,64481,0,0],1734:[64473,64474,0,0],1735:[64471,64472,0,0],1736:[64475,64476,0,0],1737:[64482,64483,0,0],1739:[64478,64479,0,0],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431,0,0],1747:[64432,64433,0,0]},OR={\u0644\u0622:[65269,65270],\u0644\u0623:[65271,65272],\u0644\u0625:[65273,65274],\u0644\u0627:[65275,65276]},vA=1604,NR=/[\u0600-\u06ff\u0750-\u077f\u0870-\u089f\u08a0-\u08ff\ufb50-\ufdff\ufe70-\ufeff]/,mA=new Map;for(let[e,r]of Object.entries(zR))Yee(r,e,mA);gA=typeof Intl<"u"&&"Segmenter"in Intl,X0={"!":"\uFE15","#":"\uFF03",$:"\uFF04","%":"\uFF05","&":"\uFF06","(":"\uFE35",")":"\uFE36","*":"\uFF0A","+":"\uFF0B",",":"\uFE10","-":"\uFE32",".":"\u30FB","/":"\uFF0F",":":"\uFE13",";":"\uFE14","<":"\uFE3F","=":"\uFF1D",">":"\uFE40","?":"\uFE16","@":"\uFF20","[":"\uFE47","\\":"\uFF3C","]":"\uFE48","^":"\uFF3E",_:"\uFE33","`":"\uFF40","{":"\uFE37","|":"\u2015","}":"\uFE38","~":"\uFF5E","\xA2":"\uFFE0","\xA3":"\uFFE1","\xA5":"\uFFE5","\xA6":"\uFFE4","\xAC":"\uFFE2","\xAF":"\uFFE3","\u2013":"\uFE32","\u2014":"\uFE31","\u2018":"\uFE43","\u2019":"\uFE44","\u201C":"\uFE41","\u201D":"\uFE42","\u2026":"\uFE19","\u22EF":"\uFE19","\u2027":"\u30FB","\u20A9":"\uFFE6","\u3001":"\uFE11","\u3002":"\uFE12","\u3008":"\uFE3F","\u3009":"\uFE40","\u300A":"\uFE3D","\u300B":"\uFE3E","\u300C":"\uFE41","\u300D":"\uFE42","\u300E":"\uFE43","\u300F":"\uFE44","\u3010":"\uFE3B","\u3011":"\uFE3C","\u3014":"\uFE39","\u3015":"\uFE3A","\u3016":"\uFE17","\u3017":"\uFE18","\uFF01":"\uFE15","\uFF08":"\uFE35","\uFF09":"\uFE36","\uFF0C":"\uFE10","\uFF0D":"\uFE32","\uFF0E":"\u30FB","\uFF1A":"\uFE13","\uFF1B":"\uFE14","\uFF1C":"\uFE3F","\uFF1E":"\uFE40","\uFF1F":"\uFE16","\uFF3B":"\uFE47","\uFF3D":"\uFE48","\uFF3F":"\uFE33","\uFF5B":"\uFE37","\uFF5C":"\u2015","\uFF5D":"\uFE38","\uFF5F":"\uFE35","\uFF60":"\uFE36","\uFF61":"\uFE12","\uFF62":"\uFE41","\uFF63":"\uFE42"},jR={10:!0,13:!0,32:!0,38:!0,41:!0,43:!0,45:!0,47:!0,173:!0,183:!0,8203:!0,8208:!0,8211:!0,8231:!0},UR={40:!0},Db=class sE{constructor(r="",t=[],i=[]){this.text=r,this.sections=t,this.sectionIndex=i,this.imageSectionID=null,this._graphemes=null}graphemes(){var r;return(r=this._graphemes)!=null||(this._graphemes=j6(this.text)),this._graphemes}static fromFeature(r,t){let i=new sE;for(let a of r.sections)a.image?i.addImageSection(a):i.addTextSection(a,t);return i}length(){return this.graphemes().length}getSection(r){return this.sections[this.sectionIndex[r]]}getSectionIndex(r){return this.sectionIndex[r]}verticalizePunctuation(){this.text=fte(this.text),this._graphemes=null}hasZeroWidthSpaces(){return this.text.includes("\u200B")}trim(){let r=this.graphemes(),t=0;for(;t<r.length&&hF(r[t]);)t++;let i=r.length;for(;i>t&&hF(r[i-1]);)i--;this.text=r.slice(t,i).join(""),this.sectionIndex=this.sectionIndex.slice(t,i),this._graphemes=null}substring(r,t){let i=this.graphemes().slice(r,t).join(""),a=this.sectionIndex.slice(r,t);return new sE(i,this.sections,a)}toCodeUnitIndex(r){return this.graphemes().slice(0,r).join("").length}toString(){return this.text}getMaxScale(){return this.sectionIndex.reduce((r,t)=>Math.max(r,this.sections[t].scale),0)}getMaxImageSize(r){let t=0,i=0;for(let a=0;a<this.length();a++){let o=this.getSection(a);if("imageName"in o){let s=r[o.imageName];if(!s)continue;let l=s.displaySize;t=Math.max(t,l[0]),i=Math.max(i,l[1])}}return{maxImageWidth:t,maxImageHeight:i}}_appendSection(r,t){let i=this.graphemes(),a=i.length>0?i[i.length-1]:"",o=j6(a+r);this.text+=r,this._graphemes=i.slice(0,a?-1:void 0).concat(o);let s=o.length-+!!a;for(let l=0;l<s;l++)this.sectionIndex.push(t)}addTextSection(r,t){this.sections.push({scale:r.scale||1,verticalAlign:r.verticalAlign||"bottom",fontStack:r.fontStack||t}),this._appendSection(r.text,this.sections.length-1)}addImageSection(r){let t=r.image?r.image.name:"";if(t.length===0){To("Can't add FormattedSection with an empty image.");return}let i=this.getNextImageSectionCharCode();if(!i){To("Reached maximum number of images 6401");return}this.sections.push({scale:1,verticalAlign:r.verticalAlign||"bottom",imageName:t}),this._appendSection(String.fromCharCode(i),this.sections.length-1)}getNextImageSectionCharCode(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)}determineLineBreaks(r,t,i,a,o){let s=[],l=this.determineAverageLineWidth(r,t,i,a,o),n=this.hasZeroWidthSpaces(),u=this.graphemes(),c=null,f=0,h=0;for(let d=0;d<u.length;d++){let p=u[d];if(d>0){let g=u[d-1].codePointAt(0),m=p.codePointAt(0),y=Gee(g),_=nF(g)&&nF(m);(jR[g]||y||"imageName"in this.getSection(d-1)||u[d+1]!==void 0&&UR[m]||_&&(c??(c=lte(this.text))).has(h))&&s.push(dF(d,f,l,s,hte(g,m,y&&n),!1))}U6(p.codePointAt(0))||(f+=cF(p,this.getSection(d),i,a,r,o)),h+=p.length}return pF(dF(this.length(),f,l,s,0,!0))}determineAverageLineWidth(r,t,i,a,o){let s=0,l=0;for(let u of this.graphemes()){let c=this.getSection(l);s+=cF(u,c,i,a,r,o),l++}let n=Math.max(1,Math.ceil(s/t));return s/n}},Lb=dte(),qR=/[\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/,VR=new Set(["WS","FSI","LRI","RLI","PDI"]),GR=new Set(["S","B"]),Fb=4294967296,Uae=1/Fb,yA=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),_A=class{constructor(e){this.buf=ArrayBuffer.isView(e)?e:new Uint8Array(e),this.dataView=new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength),this.pos=0,this.type=0,this._valueStart=-1,this.length=this.buf.length}readFields(e,r,t=this.length){let i;for(;i=this.nextField(t);)e(i,r,this);return r}readMessage(e,r){return this.readFields(e,r,this.readVarint()+this.pos)}readFixed32(){let e=this.dataView.getUint32(this.pos,!0);return this.pos+=4,e}readSFixed32(){let e=this.dataView.getInt32(this.pos,!0);return this.pos+=4,e}readFixed64(){let e=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*Fb;return this.pos+=8,e}readSFixed64(){let e=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*Fb;return this.pos+=8,e}readFloat(){let e=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,e}readDouble(){let e=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,e}readVarint(e){let r=this.buf,t=r[this.pos++];if(t<128)return t;let i=t&127,a;return a=r[this.pos++],i|=(a&127)<<7,a<128||(a=r[this.pos++],i|=(a&127)<<14,a<128)||(a=r[this.pos++],i|=(a&127)<<21,a<128)?i:(a=r[this.pos],i|=(a&15)<<28,Tte(i,e,this))}readSVarint(){let e=this.readVarint();return e%2==1?(e+1)/-2:e/2}readBoolean(){return!!this.readVarint()}readString(){let e=this.readVarint()+this.pos,r=this.pos;return this.pos=e,e-r>=12&&yA?yA.decode(this.buf.subarray(r,e)):Mte(this.buf,r,e)}readBytes(){let e=this.readVarint()+this.pos,r=this.buf.subarray(this.pos,e);return this.pos=e,r}readPackedVarint(e=[],r){let t=this.readPackedEnd();for(;this.pos<t;)e.push(this.readVarint(r));return e}readPackedSVarint(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readSVarint());return e}readPackedBoolean(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readBoolean());return e}readPackedFloat(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readFloat());return e}readPackedDouble(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readDouble());return e}readPackedFixed32(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readFixed32());return e}readPackedSFixed32(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readSFixed32());return e}readPackedFixed64(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readFixed64());return e}readPackedSFixed64(e=[]){let r=this.readPackedEnd();for(;this.pos<r;)e.push(this.readSFixed64());return e}readPackedEnd(){return this.type===2?this.readVarint()+this.pos:this.pos+1}nextField(e=this.length){if(this.pos===this._valueStart&&this.skip(this.type),this.pos>=e)return 0;let r=this.readVarint();return this.type=r&7,this._valueStart=this.pos,r>>>3}skip(e){let r=e&7;if(r===0)for(;this.buf[this.pos++]>127;);else if(r===2)this.pos=this.readVarint()+this.pos;else if(r===5)this.pos+=4;else if(r===1)this.pos+=8;else throw Error(`Unimplemented type: ${r}`)}},Pb=class{constructor(e,{pixelRatio:r,version:t,isWebGLImage:i=!1,stretchX:a,stretchY:o,content:s,textFitWidth:l,textFitHeight:n}){this.paddedRect=e,this.pixelRatio=r,this.stretchX=a,this.stretchY=o,this.content=s,this.version=t,this.needsFirstWebGLRender=i,this.textFitWidth=l,this.textFitHeight=n}get tl(){return[this.paddedRect.x+1,this.paddedRect.y+1]}get br(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]}get tlbr(){return this.tl.concat(this.br)}get displaySize(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]}},HR=class{constructor(e,r){let t={},i={};this.haveRenderCallbacks=[],this.patchedUpdateVersion=-1;let a=[];this.addImages(e,t,a),this.addImages(r,i,a);let{w:o,h:s}=mF(a),l=new Rs({width:o||1,height:s||1});for(let n in e){let u=e[n];if(u.isWebGLImage)continue;let c=t[n].paddedRect;Rs.copy(u.data,l,{x:0,y:0},{x:c.x+1,y:c.y+1},u.data)}for(let n in r){let u=r[n],c=i[n].paddedRect,f=c.x+1,h=c.y+1,d=u.data.width,p=u.data.height;Rs.copy(u.data,l,{x:0,y:0},{x:f,y:h},u.data),Rs.copy(u.data,l,{x:0,y:p-1},{x:f,y:h-1},{width:d,height:1}),Rs.copy(u.data,l,{x:0,y:0},{x:f,y:h+p},{width:d,height:1}),Rs.copy(u.data,l,{x:d-1,y:0},{x:f-1,y:h},{width:1,height:p}),Rs.copy(u.data,l,{x:0,y:0},{x:f+d,y:h},{width:1,height:p})}this.image=l,this.iconPositions=t,this.patternPositions=i}addImages(e,r,t){for(let i in e){let a=e[i],o={x:0,y:0,w:a.data.width+2,h:a.data.height+2};t.push(o),r[i]=new Pb(o,a),a.hasRenderCallback&&this.haveRenderCallbacks.push(i)}}patchUpdatedImages(e,r){if(e.dispatchRenderCallbacks(this.haveRenderCallbacks),this.patchedUpdateVersion!==e.updateVersion){this.patchedUpdateVersion=e.updateVersion;for(let t in this.iconPositions)this.patchUpdatedImage(this.iconPositions[t],e.getImage(t),r);for(let t in this.patternPositions)this.patchUpdatedImage(this.patternPositions[t],e.getImage(t),r)}}patchUpdatedImage(e,r,t){var i;if(!e||!r||!e.needsFirstWebGLRender&&e.version===r.version)return;e.needsFirstWebGLRender=!1,e.version=r.version;let[a,o]=e.tl,s=(i=r.userImage)==null?void 0:i.data;if(!ux(s)){t.update(r.data,void 0,{x:a,y:o});return}let{width:l,height:n}=r.data;t.context.setCustomLayerDefaults(),s.renderWithWebGL({gl:t.context.gl,texture:t.texture,x:a,y:o,width:l,height:n}),t.context.setDirty()}},Qa("ImagePosition",Pb),Qa("ImageAtlas",HR),xA=(function(e){return e[e.none=0]="none",e[e.horizontal=1]="horizontal",e[e.vertical=2]="vertical",e[e.horizontalOnly=3]="horizontalOnly",e})(xA||{}),bA=new RegExp("^\\p{gc=M}$","u"),wA=32640,Z0=class rU extends Wr{constructor(r,t,i,a){super(r,t),this.angle=i,a!==void 0&&(this.segment=a)}clone(){return new rU(this.x,this.y,this.angle,this.segment)}},Qa("Anchor",Z0),Pg=class{constructor(e,r,t,i,a,o,s,l,n,u){var c;if(this.boxStartIndex=e.length,n){let f=o.top,h=o.bottom,d=o.collisionPadding;d&&(f-=d[1],h+=d[3]);let p=h-f;p>0&&(p=Math.max(10,p),this.circleDiameter=p)}else{let f=(c=o.image)!=null&&c.content&&(o.image.textFitWidth||o.image.textFitHeight)?bF(o):{x1:o.left,y1:o.top,x2:o.right,y2:o.bottom};f.y1=f.y1*s-l[0],f.y2=f.y2*s+l[2],f.x1=f.x1*s-l[3],f.x2=f.x2*s+l[1];let h=o.collisionPadding;if(h&&(f.x1-=h[0]*s,f.y1-=h[1]*s,f.x2+=h[2]*s,f.y2+=h[3]*s),u){let d=new Wr(f.x1,f.y1),p=new Wr(f.x2,f.y1),g=new Wr(f.x1,f.y2),m=new Wr(f.x2,f.y2),y=u*Math.PI/180;d._rotate(y),p._rotate(y),g._rotate(y),m._rotate(y),f.x1=Math.min(d.x,p.x,g.x,m.x),f.x2=Math.max(d.x,p.x,g.x,m.x),f.y1=Math.min(d.y,p.y,g.y,m.y),f.y2=Math.max(d.y,p.y,g.y,m.y)}e.emplaceBack(r.x,r.y,f.x1,f.y1,f.x2,f.y2,t,i,a)}this.boxEndIndex=e.length}},$R=class{constructor(e=[],r=(t,i)=>t<i?-1:+(t>i)){if(this.data=e,this.length=this.data.length,this.compare=r,this.length>0)for(let t=(this.length>>1)-1;t>=0;t--)this._down(t)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(this.length===0)return;let e=this.data[0],r=this.data.pop();return--this.length>0&&(this.data[0]=r,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:r,compare:t}=this,i=r[e];for(;e>0;){let a=e-1>>1,o=r[a];if(t(i,o)>=0)break;r[e]=o,e=a}r[e]=i}_down(e){let{data:r,compare:t}=this,i=this.length>>1,a=r[e];for(;e<i;){let o=(e<<1)+1,s=o+1;if(s<this.length&&t(r[s],r[o])<0&&(o=s),t(r[o],a)>=0)break;r[e]=r[o],e=o}r[e]=a}},K0=class{constructor(e,r,t,i){this.p=new Wr(e,r),this.h=t,this.d=nre(this.p,i),this.max=this.d+this.h*Math.SQRT2}},Ib=(function(e){return e[e.center=1]="center",e[e.left=2]="left",e[e.right=3]="right",e[e.top=4]="top",e[e.bottom=5]="bottom",e[e["top-left"]=6]="top-left",e[e["top-right"]=7]="top-right",e[e["bottom-left"]=8]="bottom-left",e[e["bottom-right"]=9]="bottom-right",e})({}),Rb=1/0,WR=[{name:"a_fade_opacity",components:1,type:"Uint8",offset:0}],zb=class{constructor(e){this.layoutVertexArray=new gI,this.indexArray=new ed,this.programConfigurations=e,this.segments=new Ks,this.dynamicLayoutVertexArray=new yI,this.opacityVertexArray=new _I,this.hasVisibleVertices=!1,this.placedSymbolArray=new UT}isEmpty(){return this.layoutVertexArray.length===0&&this.indexArray.length===0&&this.dynamicLayoutVertexArray.length===0&&this.opacityVertexArray.length===0}upload(e,r,t,i){this.isEmpty()||(t&&(this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,FR.members),this.indexBuffer=e.createIndexBuffer(this.indexArray,r),this.dynamicLayoutVertexBuffer=e.createVertexBuffer(this.dynamicLayoutVertexArray,PR.members,!0),this.opacityVertexBuffer=e.createVertexBuffer(this.opacityVertexArray,WR,!0),this.opacityVertexBuffer.itemSize=1),(t||i)&&this.programConfigurations.upload(e))}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())}},Qa("SymbolBuffers",zb),Bb=class{constructor(e,r,t){this.layoutVertexArray=new e,this.layoutAttributes=r,this.indexArray=new t,this.segments=new Ks,this.collisionVertexArray=new bI}upload(e){this.layoutVertexBuffer=e.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=e.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=e.createVertexBuffer(this.collisionVertexArray,IR.members,!0)}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())}},Qa("CollisionBuffers",Bb),Ig=class{constructor(e){this.collisionBoxArray=e.collisionBoxArray,this.zoom=e.zoom,this.overscaling=e.overscaling,this.layers=e.layers,this.layerIds=this.layers.map(s=>s.id),this.index=e.index,this.pixelRatio=e.pixelRatio,this.sourceLayerIndex=e.sourceLayerIndex,this.hasDependencies=!0,this.hasRTLText=!1,this.maxHeightOffset=0,this.sortKeyRanges=[],this.collisionCircleArray=[],this.maxGlyphs=65535;let r=this.layers[0]._unevaluatedLayout._values;this.textSizeData=TF(this.zoom,r["text-size"]),this.iconSizeData=TF(this.zoom,r["icon-size"]);let t=this.layers[0].layout,i=t.get("symbol-sort-key"),a=t.get("symbol-z-order");this.canOverlap=gx(t,"text-overlap","text-allow-overlap")!=="never"||gx(t,"icon-overlap","icon-allow-overlap")!=="never"||t.get("text-ignore-placement")||t.get("icon-ignore-placement"),this.sortFeaturesByKey=a!=="viewport-y"&&!i.isConstant();let o=a==="viewport-y"||a==="auto"&&!this.sortFeaturesByKey;this.sortFeaturesByY=o&&this.canOverlap,t.get("symbol-placement")==="point"&&(this.writingModes=t.get("text-writing-mode").map(s=>xA[s])),this.stateDependentLayerIds=this.layers.filter(s=>s.isStateDependent()).map(s=>s.id),this.sourceID=e.sourceID}createArrays(){this.text=new zb(new Zp(this.layers,this.zoom,e=>e.startsWith("text"))),this.icon=new zb(new Zp(this.layers,this.zoom,e=>e.startsWith("icon"))),this.glyphOffsetArray=new GT,this.lineVertexArray=new HT,this.symbolInstances=new VT,this.textAnchorOffsets=new WT}calculateGlyphDependencies(e,r,t,i,a){var o;let s=(i||this.allowVerticalPlacement)&&a,l=Db.fromFeature(e,t),n=l.graphemes();for(let u=0;u<n.length;u++){let c=l.getSection(u);if("imageName"in c)continue;let f=r[o=c.fontStack]||(r[o]={}),h=n[u];lx(h)&&(f[h]=!0);for(let d of h){if(f[d]=!0,!s)continue;let p=X0[d];p&&(f[p]=!0)}}}populate(e,r,t){var i;let a=this.layers[0],o=a.layout,s=o.get("text-font"),l=o.get("text-field"),n=o.get("icon-image"),u=(l.value.kind!=="constant"||l.value.value instanceof Ed&&!l.value.value.isEmpty()||l.value.value.toString().length>0)&&(s.value.kind!=="constant"||s.value.value.length>0),c=n.value.kind!=="constant"||!!n.value.value||Object.keys(n.parameters).length>0,f=o.get("symbol-sort-key");if(this.features=[],!u&&!c)return;let h=r.iconDependencies,d=r.glyphDependencies,p=r.availableImages,g=new ns(this.zoom);for(let{feature:m,id:y,index:_,sourceLayerIndex:v}of e){let x=a._featureFilter.needGeometry,S=N0(m,x);if(!a._featureFilter.filter(g,S,t))continue;x||(S.geometry=O0(m));let M;if(u){let A=a.getValueAndResolveTokens("text-field",S,t,p),b=Ed.factory(A);this.hasRTLText||(this.hasRTLText=hre(b)),M=ote(b,a,S)}let C;if(c){let A=a.getValueAndResolveTokens("icon-image",S,t,p);C=A instanceof Kh?A:Kh.fromString(A)}if(!M&&!C)continue;let w=this.sortFeaturesByKey?f.evaluate(S,{},t):void 0,k={id:y,text:M,icon:C,index:_,sourceLayerIndex:v,geometry:S.geometry,properties:m.properties,type:Rm.types[m.type],sortKey:w};if(this.features.push(k),C&&(h[C.name]=!0),M){let A=s.evaluate(S,{},t).join(","),b=o.get("text-rotation-alignment")!=="viewport"&&o.get("symbol-placement")!=="point";this.allowVerticalPlacement=(i=this.writingModes)==null?void 0:i.includes(2);let E=q6(M.toString());this.calculateGlyphDependencies(M,d,A,b,E);for(let T of M.sections)T.image&&(h[T.image.name]=!0)}}o.get("symbol-placement")==="line"&&(this.features=ste(this.features)),this.sortFeaturesByKey&&this.features.sort((m,y)=>m.sortKey-y.sortKey)}update(e,r,t){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(e,r,this.layers,{imagePositions:t}),this.icon.programConfigurations.updatePaintArrays(e,r,this.layers,{imagePositions:t}))}addFeatures({options:e,canonical:r,glyphMap:t,glyphPositions:i,iconMap:a,iconPositions:o,showCollisionBoxes:s}){sre({bucket:this,glyphMap:t,glyphPositions:i,imageMap:a,imagePositions:o,showCollisionBoxes:s,canonical:r,subdivisionGranularity:e.subdivisionGranularity})}isEmpty(){return this.symbolInstances.length===0}uploadPending(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload}upload(e){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(e),this.iconCollisionBox.upload(e)),this.text.upload(e,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(e,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0}destroyDebugData(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()}destroy(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()}addToLineVertexArray(e,r){let t=this.lineVertexArray.length;if(e.segment!==void 0){let i=e.dist(r[e.segment+1]),a=e.dist(r[e.segment]),o={};for(let s=e.segment+1;s<r.length;s++)o[s]={x:r[s].x,y:r[s].y,tileUnitDistanceFromAnchor:i},s<r.length-1&&(i+=r[s+1].dist(r[s]));for(let s=e.segment||0;s>=0;s--)o[s]={x:r[s].x,y:r[s].y,tileUnitDistanceFromAnchor:a},s>0&&(a+=r[s-1].dist(r[s]));for(let s=0;s<r.length;s++){let l=o[s];this.lineVertexArray.emplaceBack(l.x,l.y,l.tileUnitDistanceFromAnchor)}}return{lineStartIndex:t,lineLength:this.lineVertexArray.length-t}}addSymbols(e,r,t,i,a,o,s,l,n,u,c,f,h){let d=e.indexArray,p=e.layoutVertexArray,g=e.segments.prepareSegment(4*r.length,p,d,this.canOverlap?o.sortKey:void 0),m=this.glyphOffsetArray.length,y=g.vertexLength,_=this.allowVerticalPlacement&&s===2?Math.PI/2:0,v=o.text&&o.text.sections;for(let x=0;x<r.length;x++){let{tl:S,tr:M,bl:C,br:w,tex:k,pixelOffsetTL:A,pixelOffsetBR:b,minFontScaleX:E,minFontScaleY:T,glyphOffset:F,isSDF:D,sectionIndex:R}=r[x],P=g.vertexLength,z=F[1];yx(p,l.x,l.y,S.x,z+S.y,k.x,k.y,t,D,A.x,A.y,E,T,h),yx(p,l.x,l.y,M.x,z+M.y,k.x+k.w,k.y,t,D,b.x,A.y,E,T,h),yx(p,l.x,l.y,C.x,z+C.y,k.x,k.y+k.h,t,D,A.x,b.y,E,T,h),yx(p,l.x,l.y,w.x,z+w.y,k.x+k.w,k.y+k.h,t,D,b.x,b.y,E,T,h),_x(e.dynamicLayoutVertexArray,l,_),d.emplaceBack(P,P+2,P+1),d.emplaceBack(P+1,P+2,P+3),g.vertexLength+=4,g.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(F[0]),(x===r.length-1||R!==r[x+1].sectionIndex)&&e.programConfigurations.populatePaintArrays(p.length,o,o.index,{imagePositions:{},canonical:f,formattedSection:v?.[R]})}e.placedSymbolArray.emplaceBack(l.x,l.y,m,this.glyphOffsetArray.length-m,y,n,u,l.segment,t?t[0]:0,t?t[1]:0,i[0],i[1],s,0,!1,0,c,h)}_addCollisionDebugVertex(e,r,t,i,a,o){return r.emplaceBack(0,0),e.emplaceBack(t.x,t.y,i,a,Math.round(o.x),Math.round(o.y))}addCollisionDebugVertices(e,r,t,i,a,o,s){let l=a.segments.prepareSegment(4,a.layoutVertexArray,a.indexArray),n=l.vertexLength,u=a.layoutVertexArray,c=a.collisionVertexArray,f=s.anchorX,h=s.anchorY;this._addCollisionDebugVertex(u,c,o,f,h,new Wr(e,r)),this._addCollisionDebugVertex(u,c,o,f,h,new Wr(t,r)),this._addCollisionDebugVertex(u,c,o,f,h,new Wr(t,i)),this._addCollisionDebugVertex(u,c,o,f,h,new Wr(e,i)),l.vertexLength+=4;let d=a.indexArray;d.emplaceBack(n,n+1),d.emplaceBack(n+1,n+2),d.emplaceBack(n+2,n+3),d.emplaceBack(n+3,n),l.primitiveLength+=4}addDebugCollisionBoxes(e,r,t,i){for(let a=e;a<r;a++){let o=this.collisionBoxArray.get(a),s=o.x1,l=o.y1,n=o.x2,u=o.y2;this.addCollisionDebugVertices(s,l,n,u,i?this.textCollisionBox:this.iconCollisionBox,o.anchorPoint,t)}}generateCollisionDebugBuffers(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new Bb(KT,pA.members,cb),this.iconCollisionBox=new Bb(KT,pA.members,cb);for(let e=0;e<this.symbolInstances.length;e++){let r=this.symbolInstances.get(e);this.addDebugCollisionBoxes(r.textBoxStartIndex,r.textBoxEndIndex,r,!0),this.addDebugCollisionBoxes(r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r,!0),this.addDebugCollisionBoxes(r.iconBoxStartIndex,r.iconBoxEndIndex,r,!1),this.addDebugCollisionBoxes(r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex,r,!1)}}_deserializeCollisionBoxesForSymbol(e,r,t,i,a,o,s,l,n){let u={};for(let c=r;c<t;c++){let f=e.get(c);u.textBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.textFeatureIndex=f.featureIndex;break}for(let c=i;c<a;c++){let f=e.get(c);u.verticalTextBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.verticalTextFeatureIndex=f.featureIndex;break}for(let c=o;c<s;c++){let f=e.get(c);u.iconBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.iconFeatureIndex=f.featureIndex;break}for(let c=l;c<n;c++){let f=e.get(c);u.verticalIconBox={x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},u.verticalIconFeatureIndex=f.featureIndex;break}return u}deserializeCollisionBoxes(e){this.collisionArrays=[];for(let r=0;r<this.symbolInstances.length;r++){let t=this.symbolInstances.get(r);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(e,t.textBoxStartIndex,t.textBoxEndIndex,t.verticalTextBoxStartIndex,t.verticalTextBoxEndIndex,t.iconBoxStartIndex,t.iconBoxEndIndex,t.verticalIconBoxStartIndex,t.verticalIconBoxEndIndex))}}hasTextData(){return this.text.segments.get().length>0}hasIconData(){return this.icon.segments.get().length>0}hasDebugData(){return this.textCollisionBox&&this.iconCollisionBox}hasTextCollisionBoxData(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0}hasIconCollisionBoxData(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0}addIndicesForPlacedSymbol(e,r){let t=e.placedSymbolArray.get(r),i=t.vertexStartIndex+t.numGlyphs*4;for(let a=t.vertexStartIndex;a<i;a+=4)e.indexArray.emplaceBack(a,a+2,a+1),e.indexArray.emplaceBack(a+1,a+2,a+3)}getSortedSymbolIndexes(e){if(this.sortedAngle===e&&this.symbolInstanceIndexes!==void 0)return this.symbolInstanceIndexes;let r=Math.sin(e),t=Math.cos(e),i=[],a=[],o=[];for(let s=0;s<this.symbolInstances.length;++s){o.push(s);let l=this.symbolInstances.get(s);i.push(Math.round(r*l.anchorX+t*l.anchorY)|0),a.push(l.featureIndex)}return o.sort((s,l)=>i[s]-i[l]||a[l]-a[s]),o}addToSortKeyRanges(e,r){let t=this.sortKeyRanges[this.sortKeyRanges.length-1];t?.sortKey===r?t.symbolInstanceEnd=e+1:this.sortKeyRanges.push({sortKey:r,symbolInstanceStart:e,symbolInstanceEnd:e+1})}sortFeatures(e){if(this.sortFeaturesByY&&this.sortedAngle!==e&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(e),this.sortedAngle=e,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(let r of this.symbolInstanceIndexes){let t=this.symbolInstances.get(r);this.featureSortOrder.push(t.featureIndex);let i=[t.rightJustifiedTextSymbolIndex,t.centerJustifiedTextSymbolIndex,t.leftJustifiedTextSymbolIndex];for(let a=0;a<i.length;a++){let o=i[a];o>=0&&i.indexOf(o)===a&&this.addIndicesForPlacedSymbol(this.text,o)}t.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,t.verticalPlacedTextSymbolIndex),t.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,t.placedIconSymbolIndex),t.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,t.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}}},Qa("SymbolBucket",Ig,{omit:["layers","collisionBoxArray","features","compareText"]}),XR=()=>YR||(YR=new vu({"symbol-placement":new Ha(mi.layout_symbol["symbol-placement"],"symbol-placement"),"symbol-spacing":new Ha(mi.layout_symbol["symbol-spacing"],"symbol-spacing"),"symbol-avoid-edges":new Ha(mi.layout_symbol["symbol-avoid-edges"],"symbol-avoid-edges"),"symbol-sort-key":new Fn(mi.layout_symbol["symbol-sort-key"],"symbol-sort-key"),"symbol-z-order":new Ha(mi.layout_symbol["symbol-z-order"],"symbol-z-order"),"icon-allow-overlap":new Ha(mi.layout_symbol["icon-allow-overlap"],"icon-allow-overlap"),"icon-overlap":new Ha(mi.layout_symbol["icon-overlap"],"icon-overlap"),"icon-ignore-placement":new Ha(mi.layout_symbol["icon-ignore-placement"],"icon-ignore-placement"),"icon-optional":new Ha(mi.layout_symbol["icon-optional"],"icon-optional"),"icon-rotation-alignment":new Fn(mi.layout_symbol["icon-rotation-alignment"],"icon-rotation-alignment"),"icon-size":new Fn(mi.layout_symbol["icon-size"],"icon-size"),"icon-text-fit":new Ha(mi.layout_symbol["icon-text-fit"],"icon-text-fit"),"icon-text-fit-padding":new Ha(mi.layout_symbol["icon-text-fit-padding"],"icon-text-fit-padding"),"icon-image":new Fn(mi.layout_symbol["icon-image"],"icon-image"),"icon-rotate":new Fn(mi.layout_symbol["icon-rotate"],"icon-rotate"),"icon-padding":new Fn(mi.layout_symbol["icon-padding"],"icon-padding"),"icon-keep-upright":new Ha(mi.layout_symbol["icon-keep-upright"],"icon-keep-upright"),"icon-offset":new Fn(mi.layout_symbol["icon-offset"],"icon-offset"),"icon-anchor":new Fn(mi.layout_symbol["icon-anchor"],"icon-anchor"),"icon-pitch-alignment":new Ha(mi.layout_symbol["icon-pitch-alignment"],"icon-pitch-alignment"),"text-pitch-alignment":new Ha(mi.layout_symbol["text-pitch-alignment"],"text-pitch-alignment"),"text-rotation-alignment":new Ha(mi.layout_symbol["text-rotation-alignment"],"text-rotation-alignment"),"text-field":new Fn(mi.layout_symbol["text-field"],"text-field"),"text-font":new Fn(mi.layout_symbol["text-font"],"text-font"),"text-size":new Fn(mi.layout_symbol["text-size"],"text-size"),"text-max-width":new Fn(mi.layout_symbol["text-max-width"],"text-max-width"),"text-line-height":new Ha(mi.layout_symbol["text-line-height"],"text-line-height"),"text-letter-spacing":new Fn(mi.layout_symbol["text-letter-spacing"],"text-letter-spacing"),"text-justify":new Fn(mi.layout_symbol["text-justify"],"text-justify"),"text-radial-offset":new Fn(mi.layout_symbol["text-radial-offset"],"text-radial-offset"),"text-variable-anchor":new Ha(mi.layout_symbol["text-variable-anchor"],"text-variable-anchor"),"text-variable-anchor-offset":new Fn(mi.layout_symbol["text-variable-anchor-offset"],"text-variable-anchor-offset"),"text-anchor":new Fn(mi.layout_symbol["text-anchor"],"text-anchor"),"text-max-angle":new Ha(mi.layout_symbol["text-max-angle"],"text-max-angle"),"text-writing-mode":new Ha(mi.layout_symbol["text-writing-mode"],"text-writing-mode"),"text-rotate":new Fn(mi.layout_symbol["text-rotate"],"text-rotate"),"text-padding":new Ha(mi.layout_symbol["text-padding"],"text-padding"),"text-keep-upright":new Ha(mi.layout_symbol["text-keep-upright"],"text-keep-upright"),"text-transform":new Fn(mi.layout_symbol["text-transform"],"text-transform"),"text-offset":new Fn(mi.layout_symbol["text-offset"],"text-offset"),"text-allow-overlap":new Ha(mi.layout_symbol["text-allow-overlap"],"text-allow-overlap"),"text-overlap":new Ha(mi.layout_symbol["text-overlap"],"text-overlap"),"text-ignore-placement":new Ha(mi.layout_symbol["text-ignore-placement"],"text-ignore-placement"),"text-optional":new Ha(mi.layout_symbol["text-optional"],"text-optional"),"symbol-height-offset":new Fn(mi.layout_symbol["symbol-height-offset"],"symbol-height-offset"),"symbol-height-anchor":new Ha(mi.layout_symbol["symbol-height-anchor"],"symbol-height-anchor")})),KR=()=>ZR||(ZR=new vu({"icon-opacity":new Fn(mi.paint_symbol["icon-opacity"],"icon-opacity"),"icon-color":new Fn(mi.paint_symbol["icon-color"],"icon-color"),"icon-halo-color":new Fn(mi.paint_symbol["icon-halo-color"],"icon-halo-color"),"icon-halo-width":new Fn(mi.paint_symbol["icon-halo-width"],"icon-halo-width"),"icon-halo-blur":new Fn(mi.paint_symbol["icon-halo-blur"],"icon-halo-blur"),"icon-translate":new Ha(mi.paint_symbol["icon-translate"],"icon-translate"),"icon-translate-anchor":new Ha(mi.paint_symbol["icon-translate-anchor"],"icon-translate-anchor"),"text-opacity":new Fn(mi.paint_symbol["text-opacity"],"text-opacity"),"text-color":new Fn(mi.paint_symbol["text-color"],"text-color",{runtimeType:dh,getOverride:e=>e.textColor,hasOverride:e=>!!e.textColor}),"text-halo-color":new Fn(mi.paint_symbol["text-halo-color"],"text-halo-color"),"text-halo-width":new Fn(mi.paint_symbol["text-halo-width"],"text-halo-width"),"text-halo-blur":new Fn(mi.paint_symbol["text-halo-blur"],"text-halo-blur"),"text-translate":new Ha(mi.paint_symbol["text-translate"],"text-translate"),"text-translate-anchor":new Ha(mi.paint_symbol["text-translate-anchor"],"text-translate-anchor")})),Ob={get paint(){return KR()},get layout(){return XR()}},TA=class{constructor(e){if(e.property.overrides===void 0)throw Error("overrides must be provided to instantiate FormatSectionOverride class");this.type=e.property.overrides?e.property.overrides.runtimeType:gm,this.defaultValue=e}evaluate(e){if(e.formattedSection){let r=this.defaultValue.property.overrides;if(r?.hasOverride(e.formattedSection))return r.getOverride(e.formattedSection)}return e.feature&&e.featureState?this.defaultValue.evaluate(e.feature,e.featureState):this.defaultValue.property.specification.default}eachChild(e){if(!this.defaultValue.isConstant()){let r=this.defaultValue.value;e(r._styleExpression.expression)}}outputDefined(){return!1}serialize(){return null}},Qa("FormatSectionOverride",TA,{omit:["defaultValue"]}),AA=e=>e.type==="symbol",JR=class lE extends ph{constructor(r,t){super(r,Ob,t)}recalculate(r,t){super.recalculate(r,t);let i=this.layout.get("icon-rotation-alignment");if((i.value.kind!=="constant"||i.value.value==="auto")&&(this.layout._values["icon-rotation-alignment"]=new zf(i.property,{kind:"constant",value:this.layout.get("symbol-placement")==="point"?"viewport":"map"},i.parameters)),this.layout.get("text-rotation-alignment")==="auto"&&(this.layout.get("symbol-placement")==="point"?this.layout._values["text-rotation-alignment"]="viewport":this.layout._values["text-rotation-alignment"]="map"),this.layout.get("text-pitch-alignment")==="auto"&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")==="map"?"map":"viewport"),this.layout.get("icon-pitch-alignment")==="auto"&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment").constantOr("viewport")),this.layout.get("symbol-placement")==="point"){let a=this.layout.get("text-writing-mode");if(a){let o=[];for(let s of a)o.includes(s)||o.push(s);this.layout._values["text-writing-mode"]=o}else this.layout._values["text-writing-mode"]=["horizontal"]}this._setPaintOverrides()}getValueAndResolveTokens(r,t,i,a){let o=this.layout.get(r).evaluate(t,{},i,a),s=this._unevaluatedLayout._values[r];return!s.isDataDriven()&&!$_(s.value)&&o?dre(t.properties,o):o}createBucket(r){return new Ig(r)}queryRadius(){return 0}queryIntersectsFeature(){throw Error("Should take a different path in FeatureIndex")}_setPaintOverrides(){for(let r of Ob.paint.overridableProperties){if(!lE.hasPaintOverride(this.layout,r))continue;let t=this.paint.get(r),i=new Ox(new TA(t),`layers[${this.id}].paint.${t.property.name}`,t.property.specification),a=null;a=t.value.kind==="constant"||t.value.kind==="source"?new bm("source",i):new wg("composite",i,t.value.zoomStops),this.paint._values[r]=new zf(t.property,a,t.parameters)}}_handleOverridablePaintPropertyUpdate(r,t,i){return!this.layout||t.isDataDriven()||i.isDataDriven()?!1:lE.hasPaintOverride(this.layout,r)}static hasPaintOverride(r,t){let i=r.get("text-field"),a=Ob.paint.properties[t],o=!1,s=l=>{var n;for(let u of l)if((n=a.overrides)!=null&&n.hasOverride(u)){o=!0;return}};if(i.value.kind==="constant"&&i.value.value instanceof Ed)s(i.value.value.sections);else if(i.value.kind==="source"||i.value.kind==="composite"){let l=u=>{if(!o)if(u instanceof H0&&Ml(u.value)===ym){let c=u.value;s(c.sections)}else u instanceof xT?s(u.sections):u.eachChild(l)},n=i.value;n._styleExpression&&l(n._styleExpression.expression)}return o}},e5=()=>QR||(QR=new vu({"background-color":new Ha(mi.paint_background["background-color"],"background-color"),"background-pattern":new zT(mi.paint_background["background-pattern"],"background-pattern"),"background-opacity":new Ha(mi.paint_background["background-opacity"],"background-opacity")})),t5={get paint(){return e5()}},r5=e=>e.type==="background",i5=class extends ph{constructor(e,r){super(e,t5,r)}},a5=e=>e.type==="custom",n5=class extends ph{constructor(e,r){super(e,{},r),this.onAdd=t=>{this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},this.onRemove=t=>{this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},this.implementation=e}is3D(){return this.implementation.renderingMode==="3d"}hasOffscreenPass(){return this.implementation.prerender!==void 0}recalculate(){}updateTransitions(){}hasTransition(){return!1}serialize(){throw Error("Custom layers cannot be serialized")}},o5=class{constructor(e){this._methodToThrottle=e,this._triggered=!1,this._channel=new MessageChannel,this._channel.port2.onmessage=()=>{this._triggered=!1,this._methodToThrottle()}}trigger(){var e;this._triggered||(this._triggered=!0,(e=this._channel)==null||e.port1.postMessage(!0))}remove(){delete this._channel,this._methodToThrottle=()=>{}}},s5={once:!0},l5=class{constructor(e,r){this.target=e,this.mapId=r,this.resolveRejects={},this.tasks={},this.taskQueue=[],this.abortControllers={},this.messageHandlers={},this.invoker=new o5(()=>this.process()),this.subscription=W4(this.target,"message",t=>this.receive(t),!1),this.globalScope=Zv(self)?e:window}registerMessageHandler(e,r){this.messageHandlers[e]=r}unregisterMessageHandler(e){delete this.messageHandlers[e]}sendAsync(e,r){return new Promise((t,i)=>{let a=Math.round(Math.random()*1e18).toString(36).substring(0,10),o=r?W4(r.signal,"abort",()=>{o?.unsubscribe(),delete this.resolveRejects[a];let n={id:a,type:"<cancel>",origin:location.origin,targetMapId:e.targetMapId,sourceMapId:this.mapId};this.target.postMessage(n),i(new vm(r.signal.reason))},s5):null;this.resolveRejects[a]={resolve:n=>{o?.unsubscribe(),t(n)},reject:n=>{o?.unsubscribe(),i(n)}};let s=[],l=ar(Ot({},e),{id:a,sourceMapId:this.mapId,origin:location.origin,data:eg(e.data,s)});this.target.postMessage(l,{transfer:s})})}receive(e){let r=e.data,t=r.id,i=["file://","resource://android","null"],a=[r.origin,location.origin],o=r.origin===location.origin,s=a.some(l=>i.includes(l));if((o||s)&&!(r.targetMapId&&this.mapId!==r.targetMapId)){if(r.type==="<cancel>"){delete this.tasks[t];let l=this.abortControllers[t];delete this.abortControllers[t],l&&l.abort();return}if(Zv(self)||r.mustQueue){this.tasks[t]=r,this.taskQueue.push(t),this.invoker.trigger();return}this.processTask(t,r)}}process(){if(this.taskQueue.length===0)return;let e=this.taskQueue.shift(),r=this.tasks[e];delete this.tasks[e],this.taskQueue.length>0&&this.invoker.trigger(),r&&this.processTask(e,r)}processTask(e,r){return Xr(this,null,function*(){if(r.type==="<response>"){let a=this.resolveRejects[e];if(delete this.resolveRejects[e],!a)return;r.error?a.reject(Zu(tg(r.error))):a.resolve(tg(r.data));return}if(!this.messageHandlers[r.type]){this.completeTask(e,null,null);return}let t=tg(r.data),i=new AbortController;this.abortControllers[e]=i;try{let a=yield this.messageHandlers[r.type](r.sourceMapId,t,i);this.completeTask(e,null,a)}catch(a){this.completeTask(e,Zu(a))}})}completeTask(e,r,t){let i=[];delete this.abortControllers[e];let a={id:e,type:"<response>",sourceMapId:this.mapId,origin:location.origin,error:r?eg(r):null,data:eg(t,i)};this.target.postMessage(a,{transfer:i})}remove(){this.invoker.remove(),this.subscription.unsubscribe()}},Rg=class{constructor(e,r,t){if(!mre(e,r,t))throw Error(`x=${r}, y=${t}, z=${e} outside of bounds. 0<=x<${2**e}, 0<=y<${2**e} 0<=z<=25 `);this.z=e,this.x=r,this.y=t,this.key=cm(0,e,e,r,t)}equals(e){return this.z===e.z&&this.x===e.x&&this.y===e.y}url(e,r,t){let i=gre(this.x,this.y,this.z),a=yre(this.z,this.x,this.y);return e[(this.x+this.y)%e.length].replace(/{prefix}/g,(this.x%16).toString(16)+(this.y%16).toString(16)).replace(/{z}/g,String(this.z)).replace(/{x}/g,String(this.x)).replace(/{y}/g,String(t==="tms"?2**this.z-this.y-1:this.y)).replace(/{ratio}/g,r>1?"@2x":"").replace(/{quadkey}/g,a).replace(/{bbox-epsg-3857}/g,i)}isChildOf(e){let r=this.z-e.z;return r>0&&e.x===this.x>>r&&e.y===this.y>>r}getTilePoint(e){let r=2**this.z;return new Wr((e.x*r-this.x)*Bi,(e.y*r-this.y)*Bi)}toString(){return`${this.z}/${this.x}/${this.y}`}},zg=class{constructor(e,r){this.wrap=e,this.canonical=r,this.key=cm(e,r.z,r.z,r.x,r.y)}},Cu=class Bh{constructor(r,t,i,a,o){if(this.terrainRttPosMatrix32f=null,r<i)throw Error(`overscaledZ should be >= z; overscaledZ = ${r}; z = ${i}`);this.overscaledZ=r,this.wrap=t,this.canonical=new Rg(i,+a,+o),this.key=cm(t,r,i,a,o)}clone(){return new Bh(this.overscaledZ,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)}equals(r){return this.overscaledZ===r.overscaledZ&&this.wrap===r.wrap&&this.canonical.equals(r.canonical)}scaledTo(r){if(r>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${r}; overscaledZ = ${this.overscaledZ}`);let t=this.canonical.z-r;return r>this.canonical.z?new Bh(r,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Bh(r,this.wrap,r,this.canonical.x>>t,this.canonical.y>>t)}isOverscaled(){return this.overscaledZ>this.canonical.z}calculateScaledKey(r,t){if(r>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${r}; overscaledZ = ${this.overscaledZ}`);let i=this.canonical.z-r;return r>this.canonical.z?cm(this.wrap*+t,r,this.canonical.z,this.canonical.x,this.canonical.y):cm(this.wrap*+t,r,r,this.canonical.x>>i,this.canonical.y>>i)}isChildOf(r){if(r.wrap!==this.wrap||this.overscaledZ-r.overscaledZ<=0)return!1;if(r.overscaledZ===0)return this.overscaledZ>0;let t=this.canonical.z-r.canonical.z;return t<0?!1:r.canonical.x===this.canonical.x>>t&&r.canonical.y===this.canonical.y>>t}children(r){if(this.overscaledZ>=r)return[new Bh(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];let t=this.canonical.z+1,i=this.canonical.x*2,a=this.canonical.y*2;return[new Bh(t,this.wrap,t,i,a),new Bh(t,this.wrap,t,i+1,a),new Bh(t,this.wrap,t,i,a+1),new Bh(t,this.wrap,t,i+1,a+1)]}isLessThan(r){return this.wrap<r.wrap?!0:this.wrap>r.wrap?!1:this.overscaledZ<r.overscaledZ?!0:this.overscaledZ>r.overscaledZ?!1:this.canonical.x<r.canonical.x?!0:this.canonical.x>r.canonical.x?!1:this.canonical.y<r.canonical.y}wrapped(){return new Bh(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)}unwrapTo(r){return new Bh(this.overscaledZ,r,this.canonical.z,this.canonical.x,this.canonical.y)}overscaleFactor(){return 2**(this.overscaledZ-this.canonical.z)}toUnwrapped(){return new zg(this.wrap,this.canonical)}toString(){return`${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}`}getTilePoint(r){return this.canonical.getTilePoint(new Qo(r.x-this.wrap,r.y))}normalizeCoordinates(r,t,i=Bi){if(r>=0&&r<i&&t>=0&&t<i)return{tileID:this,x:r,y:t};let a=Math.floor(r/i),o=Math.floor(t/i),s=r-a*i,l=t-o*i,n=this.canonical.z,u=1<<n,c=this.canonical.y+o;if(c<0||c>=u)return null;let f=this.canonical.x+a,h=this.wrap;return f<0?(h-=Math.ceil(-f/u),f=(f%u+u)%u):f>=u&&(h+=Math.floor(f/u),f%=u),{tileID:new Bh(this.overscaledZ,h,n,f,c),x:s,y:l}}},Nb=Math.PI*6378137,Qa("CanonicalTileID",Rg),Qa("OverscaledTileID",Cu,{omit:["terrainRttPosMatrix32f"]}),Bg="_geojsonTileLayer",u5=class{constructor(e){this._stringToNumber={},this._numberToString=[];for(let r=0;r<e.length;r++){let t=e[r];this._stringToNumber[t]=r,this._numberToString[r]=t}}encode(e){return this._stringToNumber[e]}decode(e){if(e>=this._numberToString.length)throw Error(`Out of bounds. Index requested n=${e} can't be >= this._numberToString.length ${this._numberToString.length}`);return this._numberToString[e]}},MA=class{constructor(e,r,t,i,a){this.type="Feature",this._vectorTileFeature=e,this._x=t,this._y=i,this._z=r;for(let o in e.properties)typeof e.properties[o]=="string"&&e.properties[o].startsWith("__$json__:")&&(e.properties[o]=JSON.parse(e.properties[o].slice(10)));this.properties=e.properties,this.id=a}projectPoint(e,r,t,i){return[(e.x+r)*360/i-180,360/Math.PI*Math.atan(Math.exp((1-(e.y+t)*2/i)*Math.PI))-90]}projectLine(e,r,t,i){return e.map(a=>this.projectPoint(a,r,t,i))}get geometry(){if(this._geometry)return this._geometry;let e=this._vectorTileFeature,r=e.extent*2**this._z,t=e.extent*this._x,i=e.extent*this._y,a=e.loadGeometry();switch(e.type){case 1:{let o=[];for(let l of a)o.push(l[0]);let s=this.projectLine(o,t,i,r);this._geometry=o.length===1?{type:"Point",coordinates:s[0]}:{type:"MultiPoint",coordinates:s};break}case 2:{let o=a.map(s=>this.projectLine(s,t,i,r));this._geometry=o.length===1?{type:"LineString",coordinates:o[0]}:{type:"MultiLineString",coordinates:o};break}case 3:{let o=KL(a),s=[];for(let l of o)s.push(l.map(n=>this.projectLine(n,t,i,r)));this._geometry=s.length===1?{type:"Polygon",coordinates:s[0]}:{type:"MultiPolygon",coordinates:s};break}default:throw Error(`unknown feature type: ${e.type}`)}return this._geometry}set geometry(e){this._geometry=e}toJSON(){let e={geometry:this.geometry};for(let r in this)r!=="_geometry"&&r!=="_vectorTileFeature"&&r!=="_x"&&r!=="_y"&&r!=="_z"&&(e[r]=this[r]);return e}},Qp=class{constructor(e,r,t){this._name=e,this.dataBuffer=r,typeof t=="number"?this._size=t:(this.nullabilityBuffer=t,this._size=t.size())}getValue(e){return this.nullabilityBuffer&&!this.nullabilityBuffer.get(e)?null:this.getValueFromBuffer(e)}has(e){var r;return((r=this.nullabilityBuffer)==null?void 0:r.get(e))||!this.nullabilityBuffer}get name(){return this._name}get size(){return this._size}},Og=class extends Qp{},jb=class extends Og{getValueFromBuffer(e){return this.dataBuffer[e]}},Ub=class extends Og{getValueFromBuffer(e){return this.dataBuffer[e]}},SA=class extends Qp{constructor(e,r,t,i){super(e,r,i),this.delta=t}},qb=class extends SA{constructor(e,r,t,i,a){super(e,a?Int32Array.of(r):Uint32Array.of(r),t,i)}getValueFromBuffer(e){return this.dataBuffer[0]+e*this.delta}},Vb=class extends Qp{constructor(e,r,t,i){super(e,i?Int32Array.of(r):Uint32Array.of(r),t)}getValueFromBuffer(e){return this.dataBuffer[0]}},c5=class{constructor(e,r,t,i,a=4096){if(this._name=e,this._geometryVector=r,this._idVector=t,this._propertyVectors=i,this._extent=a,e.length===0)throw Error("Missing layer name")}get name(){return this._name}get idVector(){return this._idVector}get geometryVector(){return this._geometryVector}get propertyVectors(){var e;return(e=this._propertyVectors)!=null?e:[]}getPropertyVector(e){return this.propertyVectorsMap||(this.propertyVectorsMap=new Map(this.propertyVectors.map(r=>[r.name,r]))),this.propertyVectorsMap.get(e)}get numFeatures(){return this.geometryVector.numGeometries}get extent(){return this._extent}getFeatures(){let e=[],r=this.geometryVector.getGeometries();for(let t=0;t<this.numFeatures;t++){let i;if(this.idVector){let s=this.idVector.getValue(t);s!==null&&(i=this.containsMaxSafeIntegerValues(this.idVector)?Number(s):s)}let a={coordinates:r[t],type:this.geometryVector.geometryType(t)},o={};for(let s of this.propertyVectors){if(!s)continue;let l=s.name,n=s.getValue(t);n!==null&&(o[l]=n)}e.push({id:i,geometry:a,properties:o})}return e}containsMaxSafeIntegerValues(e){return e instanceof jb||e instanceof Vb||e instanceof qb||e instanceof Ub}},zm={FEATURE:0,VERTEX:1},Wo={BOOLEAN:0,INT_8:1,UINT_8:2,INT_32:3,UINT_32:4,INT_64:5,UINT_64:6,FLOAT:7,DOUBLE:8,STRING:9},cp={GEOMETRY:0,STRUCT:1,MAP:2},EA={ID:0},kA=class{constructor(e){this.value=e}get(){return this.value}set(e){this.value=e}increment(){return this.value++}add(e){this.value+=e}},(function(e){e.NONE="NONE",e.DELTA="DELTA",e.COMPONENTWISE_DELTA="COMPONENTWISE_DELTA",e.RLE="RLE",e.MORTON="MORTON"})(fo||(fo={})),(function(e){e.NONE="NONE",e.FAST_PFOR="FAST_PFOR",e.VARINT="VARINT"})(Of||(Of={})),Gb=new Uint32Array(33),Gb[0]=0;for(let e=1;e<=32;e++)Gb[e]=e===32?4294967295:4294967295>>>32-e;Hb=Gb,CA=65536,$b=xre(CA),f5=3*$b/256+$b|0,(function(e){e.PRESENT="PRESENT",e.DATA="DATA",e.OFFSET="OFFSET",e.LENGTH="LENGTH"})(El||(El={})),(function(e){e.NONE="NONE",e.SINGLE="SINGLE",e.SHARED="SHARED",e.VERTEX="VERTEX",e.MORTON="MORTON",e.FSST="FSST"})(gc||(gc={})),(function(e){e.VERTEX="VERTEX",e.INDEX="INDEX",e.STRING="STRING",e.KEY="KEY"})(Pd||(Pd={})),(function(e){e.VAR_BINARY="VAR_BINARY",e.GEOMETRIES="GEOMETRIES",e.PARTS="PARTS",e.RINGS="RINGS",e.TRIANGLES="TRIANGLES",e.SYMBOL="SYMBOL",e.DICTIONARY="DICTIONARY"})(eu||(eu={})),h5=[El.PRESENT,El.DATA,El.OFFSET,El.LENGTH],DA=[fo.NONE,fo.DELTA,fo.COMPONENTWISE_DELTA,fo.RLE,fo.MORTON],d5=[Of.NONE,Of.FAST_PFOR,Of.VARINT],p5=[gc.NONE,gc.SINGLE,gc.SHARED,gc.VERTEX,gc.MORTON,gc.FSST],v5=[Pd.VERTEX,Pd.INDEX,Pd.STRING,Pd.KEY],m5=[eu.VAR_BINARY,eu.GEOMETRIES,eu.PARTS,eu.RINGS,eu.TRIANGLES,eu.SYMBOL,eu.DICTIONARY],(function(e){e[e.FLAT=0]="FLAT",e[e.CONST=1]="CONST",e[e.SEQUENCE=2]="SEQUENCE",e[e.DICTIONARY=3]="DICTIONARY",e[e.FSST_DICTIONARY=4]="FSST_DICTIONARY"})(js||(js={})),yh=class{constructor(e,r){this.values=e,this._size=r}get(e){let r=Math.floor(e/8),t=e%8;return(this.values[r]>>t&1)==1}set(e,r){let t=Math.floor(e/8),i=e%8;this.values[t]=this.values[t]|+!!r<<i}getInt(e){let r=Math.floor(e/8),t=e%8;return this.values[r]>>t&1}size(){return this._size}getBuffer(){return this.values}},g5=new TextDecoder,LA=class extends Og{getValueFromBuffer(e){return this.dataBuffer[e]}},FA=class extends SA{constructor(e,r,t,i,a){super(e,a?BigInt64Array.of(r):BigUint64Array.of(r),t,i)}getValueFromBuffer(e){return this.dataBuffer[0]+BigInt(e)*this.delta}},(function(e){e[e.POINT=0]="POINT",e[e.LINESTRING=1]="LINESTRING",e[e.POLYGON=2]="POLYGON",e[e.MULTIPOINT=3]="MULTIPOINT",e[e.MULTILINESTRING=4]="MULTILINESTRING",e[e.MULTIPOLYGON=5]="MULTIPOLYGON"})(Du||(Du={})),(function(e){e[e.POINT=0]="POINT",e[e.LINESTRING=1]="LINESTRING",e[e.POLYGON=2]="POLYGON"})(y5||(y5={})),(function(e){e[e.MORTON=0]="MORTON",e[e.VEC_2=1]="VEC_2",e[e.VEC_3=2]="VEC_3"})(e0||(e0={})),PA=class{constructor(e,r,t,i,a){this._vertexBufferType=e,this._topologyVector=r,this._vertexOffsets=t,this._vertexBuffer=i,this._mortonSettings=a}get vertexBufferType(){return this._vertexBufferType}get topologyVector(){return this._topologyVector}get vertexOffsets(){return this._vertexOffsets}get vertexBuffer(){return this._vertexBuffer}getSimpleEncodedVertex(e){let r=this.vertexOffsets?this.vertexOffsets[e]*2:e*2;return[this.vertexBuffer[r],this.vertexBuffer[r+1]]}getVertex(e){if(this.vertexOffsets&&this.mortonSettings){let t=this.vertexOffsets[e],i=this.vertexBuffer[t],a=tT(i,this.mortonSettings.numBits,this.mortonSettings.coordinateShift);return[a.x,a.y]}let r=this.vertexOffsets?this.vertexOffsets[e]*2:e*2;return[this.vertexBuffer[r],this.vertexBuffer[r+1]]}getGeometries(){return Kie(this)}get mortonSettings(){return this._mortonSettings}},IA=class extends PA{constructor(e,r,t,i,a,o,s){super(t,i,a,o,s),this._numGeometries=e,this._geometryType=r}geometryType(e){return this._geometryType}get numGeometries(){return this._numGeometries}containsPolygonGeometry(){return this._geometryType===Du.POLYGON||this._geometryType===Du.MULTIPOLYGON}containsSingleGeometryType(){return!0}},RA=class extends PA{constructor(e,r,t,i,a,o){super(e,t,i,a,o),this._geometryTypes=r}geometryType(e){return this._geometryTypes[e]}get numGeometries(){return this._geometryTypes.length}containsPolygonGeometry(){for(let e=0;e<this.numGeometries;e++)if(this.geometryType(e)===Du.POLYGON||this.geometryType(e)===Du.MULTIPOLYGON)return!0;return!1}containsSingleGeometryType(){return!1}},zA=class{constructor(e,r,t,i){this._triangleOffsets=e,this._indexBuffer=r,this._vertexBuffer=t,this._topologyVector=i}get triangleOffsets(){return this._triangleOffsets}get indexBuffer(){return this._indexBuffer}get vertexBuffer(){return this._vertexBuffer}get topologyVector(){return this._topologyVector}getGeometries(){if(!this._topologyVector)throw Error("Cannot convert GpuVector to coordinates without topology information");let e=new Uint32Array(this.numGeometries);for(let r=0;r<this.numGeometries;r++)e[r]=this.geometryType(r);return rP(e,this._topologyVector,void 0,this._vertexBuffer).getGeometries()}[Symbol.iterator](){return null}},_5=class extends zA{constructor(e,r,t,i,a,o){super(t,i,a,o),this._numGeometries=e,this._geometryType=r}geometryType(e){return this._geometryType}get numGeometries(){return this._numGeometries}containsSingleGeometryType(){return!0}},x5=class extends zA{constructor(e,r,t,i,a){super(r,t,i,a),this._geometryTypes=e}geometryType(e){return this._geometryTypes[e]}get numGeometries(){return this._geometryTypes.length}containsSingleGeometryType(){return!1}},b5=class extends Qp{constructor(e,r,t){super(e,r.getBuffer(),t),this.dataVector=r}getValueFromBuffer(e){return this.dataVector.get(e)}},w5=class extends Og{getValueFromBuffer(e){return this.dataBuffer[e]}},BA=class extends Qp{constructor(e,r,t,i){super(e,i?BigInt64Array.of(r):BigUint64Array.of(r),t)}getValueFromBuffer(e){return this.dataBuffer[0]}},Wb=class extends Qp{constructor(e,r,t,i){super(e,t,i),this.offsetBuffer=r}},OA=class extends Wb{constructor(e,r,t,i){super(e,r,t,i??r.length-1)}getValueFromBuffer(e){let r=this.offsetBuffer[e],t=this.offsetBuffer[e+1];return J6(this.dataBuffer,r,t)}},J0=class extends Wb{constructor(e,r,t,i,a){super(e,t,i,a??r.length),this.indexBuffer=r,this.indexBuffer=r}getValueFromBuffer(e){let r=this.indexBuffer[e],t=this.offsetBuffer[r],i=this.offsetBuffer[r+1];return J6(this.dataBuffer,t,i)}},NA=class extends Wb{constructor(e,r,t,i,a,o,s,l){super(e,t,i,s??r.length),this.indexBuffer=r,this.symbolOffsetBuffer=a,this.symbolTableBuffer=o,this.sharedDictionaryCache=l}getValueFromBuffer(e){var r,t,i;(i=this.decodedDictionary)!=null||(this.decodedDictionary=(r=this.sharedDictionaryCache)==null?void 0:r.decodedDictionary,(t=this.decodedDictionary)!=null||(this.decodedDictionary=this.decodeDictionary(),this.sharedDictionaryCache&&(this.sharedDictionaryCache.decodedDictionary=this.decodedDictionary)));let a=this.indexBuffer[e],o=this.offsetBuffer[a],s=this.offsetBuffer[a+1];return J6(this.decodedDictionary,o,s)}decodeDictionary(){var e;return(e=this.symbolLengthBuffer)!=null||(this.symbolLengthBuffer=this.offsetToLengthBuffer(this.symbolOffsetBuffer)),sae(this.symbolTableBuffer,this.symbolLengthBuffer,this.dataBuffer)}offsetToLengthBuffer(e){let r=new Uint32Array(e.length-1),t=e[0];for(let i=1;i<e.length;i++){let a=e[i];r[i-1]=a-t,t=a}return r}},jA=class extends Qp{constructor(e,r,t){super(e,new Uint8Array,t??r.length),this.values=r}getValueFromBuffer(e){return this.values[e]}},(function(e){e[e.STRING=1]="STRING",e[e.INT32=2]="INT32",e[e.UINT32=4]="UINT32",e[e.INT64=8]="INT64",e[e.UINT64=16]="UINT64",e[e.FLOAT=32]="FLOAT",e[e.DOUBLE=64]="DOUBLE",e[e.PRESENCE=128]="PRESENCE"})(Id||(Id={})),(function(e){e[e.FALSE=0]="FALSE",e[e.TRUE=1]="TRUE",e[e.START_MAP=2]="START_MAP",e[e.START_LIST=3]="START_LIST",e[e.COUNT=4]="COUNT"})(t0||(t0={})),tu={ID:0,ID_NULLABLE:1,ID_LONG:2,GEOMETRY:4,SCALAR_BASE:10,STRUCT:30,MAP:31},T5=new TextDecoder,UA="0-3(ID), 4(GEOMETRY), 10-29(scalars), 30(STRUCT), 31(MAP)",A5=class{constructor(e,r){var t;switch(this._featureData=e,this.properties=this._featureData.properties||{},(t=this._featureData.geometry)==null?void 0:t.type){case Du.POINT:case Du.MULTIPOINT:this.type=1;break;case Du.LINESTRING:case Du.MULTILINESTRING:this.type=2;break;case Du.POLYGON:case Du.MULTIPOLYGON:this.type=3;break;default:this.type=0}this.extent=r,this.id=Number(this._featureData.id)}loadGeometry(){let e=[];for(let r of this._featureData.geometry.coordinates){let t=[];for(let i of r)t.push(new Wr(i.x,i.y));e.push(t)}return e}},M5=class{constructor(e){this.features=[],this.featureTable=e,this.name=e.name,this.extent=e.extent,this.version=2,this.features=e.getFeatures(),this.length=this.features.length}feature(e){return new A5(this.features[e],this.extent)}},S5=class{constructor(e){this.layers={};let r=zae(new Uint8Array(e));this.layers=r.reduce((t,i)=>ar(Ot({},t),{[i.name]:new M5(i)}),{})}},E5=class{constructor(e,r){this.tileID=e,this.x=e.canonical.x,this.y=e.canonical.y,this.z=e.canonical.z,this.grid=new Nx(Bi,16,0),this.grid3D=new Nx(Bi,16,0),this.featureIndexArray=new XT,this.promoteId=r}insert(e,r,t,i,a,o){let s=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(t,i,a);let l=o?this.grid3D:this.grid;for(let n of r){let u=[1/0,1/0,-1/0,-1/0];for(let c of n)u[0]=Math.min(u[0],c.x),u[1]=Math.min(u[1],c.y),u[2]=Math.max(u[2],c.x),u[3]=Math.max(u[3],c.y);u[0]<8192&&u[1]<8192&&u[2]>=0&&u[3]>=0&&l.insert(s,u[0],u[1],u[2],u[3])}}loadVTLayers(){return this.vtLayers||(this.encoding==="mlt"?this.vtLayers=new S5(this.rawTileData).layers:this.vtLayers=new hR(new _A(this.rawTileData)).layers,this.sourceLayerCoder=new u5(this.vtLayers?Object.keys(this.vtLayers).sort():[Bg])),this.vtLayers}query(e,r,t,i){this.loadVTLayers();let a=e.params,o=Bi/e.tileSize/e.scale,s=Z1(a.filter,"queryRenderedFeatures filter",a.globalState),l=e.queryGeometry,n=e.queryPadding*o,u=gh.fromPoints(l),c=this.grid.query(u.minX-n,u.minY-n,u.maxX+n,u.maxY+n),f=gh.fromPoints(e.cameraQueryGeometry).expandBy(n),h=this.grid3D.query(f.minX,f.minY,f.maxX,f.maxY,(g,m,y,_)=>XQ(e.cameraQueryGeometry,g-n,m-n,y+n,_+n));for(let g of h)c.push(g);c.sort(Nae);let d={},p;for(let g of c){if(g===p)continue;p=g;let m=this.featureIndexArray.get(g),y=null;this.loadMatchingFeature(d,m.bucketIndex,m.sourceLayerIndex,m.featureIndex,s,a.layers,a.availableImages,r,t,i,(_,v,x)=>(y||(y=O0(_)),v.queryIntersectsFeature({queryGeometry:l,feature:_,featureState:x,geometry:y,zoom:this.z,transform:e.transform,pixelsToTileUnits:o,pixelPosMatrix:e.pixelPosMatrix,unwrappedTileID:this.tileID.toUnwrapped(),getElevation:e.getElevation})))}return d}loadMatchingFeature(e,r,t,i,a,o,s,l,n,u,c){let f=this.bucketLayerIDs[r];if(o&&!f.some(g=>o.has(g)))return;let h=this.sourceLayerCoder.decode(t),d=this.vtLayers[h].feature(i);if(a.needGeometry){let g=N0(d,!0);if(!a.filter(new ns(this.tileID.overscaledZ),g,this.tileID.canonical))return}else if(!a.filter(new ns(this.tileID.overscaledZ),d))return;let p=this.getId(d,h);for(let g of f){if(o&&!o.has(g))continue;let m=l[g];if(!m)continue;let y={};p&&u&&(y=u.getState(m.sourceLayer||"_geojsonTileLayer",p));let _=yn({},n[g]);_.paint=dP(_.paint,m.paint,d,y,s),_.layout=dP(_.layout,m.layout,d,y,s);let v=!c||c(d,m,y);if(!v)continue;let x=new MA(d,this.z,this.x,this.y,p);x.layer=_;let S=e[g];S===void 0&&(S=e[g]=[]),S.push({featureIndex:i,feature:x,intersectionZ:v})}}lookupSymbolFeatures(e,r,t,i,a,o,s,l){let n={};this.loadVTLayers();let u=Z1(a.filterSpec,"queryRenderedFeatures symbol filter",a.globalState);for(let c of e)this.loadMatchingFeature(n,t,i,c,u,o,s,l,r);return n}hasLayer(e){for(let r of this.bucketLayerIDs)for(let t of r)if(e===t)return!0;return!1}getId(e,r){var t;let i=e.id;if(this.promoteId){let a=typeof this.promoteId=="string"?this.promoteId:this.promoteId[r];i=e.properties[a],typeof i=="boolean"&&(i=Number(i)),i===void 0&&((t=e.properties)!=null&&t.cluster)&&this.promoteId&&(i=Number(e.properties.cluster_id))}return i}},Qa("FeatureIndex",E5,{omit:["rawTileData","sourceLayerCoder"]}),k5=class{constructor(e,r){this.max=e,this.onRemove=r,this.reset()}reset(){for(let e in this.data)for(let r of this.data[e])r.timeout&&clearTimeout(r.timeout),this.onRemove(r.value);return this.data={},this.order=[],this}add(e,r,t){let i=e.wrapped().key;this.data[i]===void 0&&(this.data[i]=[]);let a={value:r,timeout:void 0};if(t!==void 0&&(a.timeout=setTimeout(()=>{this.remove(e,a)},t)),this.data[i].push(a),this.order.push(i),this.order.length>this.max){let o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this}has(e){return e.wrapped().key in this.data}getAndRemove(e){return this.has(e)?this._getAndRemoveByKey(e.wrapped().key):null}_getAndRemoveByKey(e){let r=this.data[e].shift();return r.timeout&&clearTimeout(r.timeout),this.data[e].length===0&&delete this.data[e],this.order.splice(this.order.indexOf(e),1),r.value}getByKey(e){let r=this.data[e];return r?r[0].value:null}get(e){return this.has(e)?this.data[e.wrapped().key][0].value:null}remove(e,r){if(!this.has(e))return this;let t=e.wrapped().key,i=r===void 0?0:this.data[t].indexOf(r),a=this.data[t][i];return this.data[t].splice(i,1),a.timeout&&clearTimeout(a.timeout),this.data[t].length===0&&delete this.data[t],this.onRemove(a.value),this.order.splice(this.order.indexOf(t),1),this}setMaxSize(e){for(this.max=e;this.order.length>this.max;){let r=this._getAndRemoveByKey(this.order[0]);r&&this.onRemove(r)}return this}filter(e){let r=[];for(let t in this.data)for(let i of this.data[t])e(i.value)||r.push(i);for(let t of r)this.remove(t.value.tileID,t)}}}}),C5={};Mr(C5,{AJAXError:()=>mm,AttributionControl:()=>TS,BoxZoomHandler:()=>uS,CanvasSource:()=>EM,CooperativeGesturesHandler:()=>bS,DoubleClickZoomHandler:()=>gS,DragPanHandler:()=>yS,DragRotateHandler:()=>_S,EXTENT:()=>Bi,EdgeInsets:()=>S2,ErrorEvent:()=>Ln,Event:()=>hf,Evented:()=>Nl,FullscreenControl:()=>E8,FullscreenEvent:()=>H2,GPUInitializationError:()=>sS,GeoJSONSource:()=>MM,GeolocateControl:()=>A8,GeolocateErrorEvent:()=>FS,GeolocateEvent:()=>n0,GeolocatePositionEvent:()=>G2,GlobeControl:()=>C8,Hash:()=>lS,ImageSource:()=>rv,KeyboardHandler:()=>pS,LngLat:()=>An,LngLatBounds:()=>bh,LogoControl:()=>AS,Map:()=>ES,MapBoxZoomEvent:()=>d2,MapContextEvent:()=>Wg,MapLibreEvent:()=>iu,MapLibreMap:()=>ES,MapMouseEvent:()=>df,MapMovementEvent:()=>kn,MapProjectionEvent:()=>_M,MapSourceDataEvent:()=>zs,MapStyleDataEvent:()=>Nf,MapStyleImageMissingEvent:()=>xM,MapStyleLoadEvent:()=>h2,MapTerrainEvent:()=>yM,MapTouchEvent:()=>jm,MapWheelEvent:()=>gM,Marker:()=>V2,MarkerClickEvent:()=>LS,MarkerDragEvent:()=>a0,MercatorCoordinate:()=>Qo,NavigationControl:()=>b8,Point:()=>Wr,Popup:()=>F8,PopupEvent:()=>$2,RasterDEMTileSource:()=>AM,RasterTileSource:()=>_2,ScaleControl:()=>S8,ScrollZoomHandler:()=>mS,Style:()=>L2,TerrainControl:()=>k8,TwoFingersTouchPitchHandler:()=>dS,TwoFingersTouchRotateHandler:()=>hS,TwoFingersTouchZoomHandler:()=>fS,TwoFingersTouchZoomRotateHandler:()=>xS,VectorTileSource:()=>TM,VideoSource:()=>SM,addProtocol:()=>pJ,addSourceType:()=>yB,clearPrewarmedResources:()=>hne,config:()=>ff,createTileMesh:()=>Y5,getGlobalDispatcher:()=>GA,getMaxParallelImageRequests:()=>Ise,getRTLTextPluginStatus:()=>Dse,getVersion:()=>Lse,getWorkerCount:()=>Fse,getWorkerUrl:()=>zse,importScriptInWorkers:()=>Ose,isTimeFrozen:()=>Yae,now:()=>hs,prewarm:()=>fne,removeProtocol:()=>vJ,restoreNow:()=>Wae,setMaxParallelImageRequests:()=>Rse,setNow:()=>$ae,setRTLTextPlugin:()=>Cse,setWorkerCount:()=>Pse,setWorkerUrl:()=>Bse});function D5(){var e=new Ql(4);return Ql!=Float32Array&&(e[1]=0,e[2]=0),e[0]=1,e[3]=1,e}function Vae(e,r){var t=r[0],i=r[1],a=r[2],o=r[3],s=t*o-a*i;return s?(s=1/s,e[0]=o*s,e[1]=-i*s,e[2]=-a*s,e[3]=t*s,e):null}function Gae(e){return e[0]*e[3]-e[2]*e[1]}function Hae(e,r,t){var i=r[0],a=r[1],o=r[2],s=r[3],l=Math.sin(t),n=Math.cos(t);return e[0]=i*n+o*l,e[1]=a*n+s*l,e[2]=i*-l+o*n,e[3]=a*-l+s*n,e}function hs(){return $g.getCurrentTime()}function $ae(e){$g.setNow(e)}function Wae(){$g.restoreNow()}function Yae(){return $g.isFrozen()}function Xae(e,r){let t={};for(let i in e)i!=="ref"&&(t[i]=e[i]);return EP.forEach(i=>{i in r&&(t[i]=r[i])}),t}function L5(e){e=e.slice();let r=Object.create(null);for(let t=0;t<e.length;t++)r[e[t].id]=e[t];for(let t=0;t<e.length;t++)"ref"in e[t]&&(e[t]=Xae(e[t],r[e[t].ref]));return e}function ds(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(let t=0;t<e.length;t++)if(!ds(e[t],r[t]))return!1;return!0}if(typeof e=="object"&&e&&r!==null){if(typeof r!="object"||Object.keys(e).length!==Object.keys(r).length)return!1;for(let t in e)if(!ds(e[t],r[t]))return!1;return!0}return e===r}function _h(e,r){e.push(r)}function F5(e,r,t){_h(t,{command:"addSource",args:[e,r[e]]})}function P5(e,r,t){_h(r,{command:"removeSource",args:[e]}),t[e]=!0}function Zae(e,r,t,i){P5(e,t,i),F5(e,r,t)}function Kae(e,r,t){let i;for(i in e[t])if(Object.prototype.hasOwnProperty.call(e[t],i)&&i!=="data"&&!ds(e[t][i],r[t][i]))return!1;for(i in r[t])if(Object.prototype.hasOwnProperty.call(r[t],i)&&i!=="data"&&!ds(e[t][i],r[t][i]))return!1;return!0}function Jae(e,r,t,i){e||(e={}),r||(r={});let a;for(a in e)Object.prototype.hasOwnProperty.call(e,a)&&(Object.prototype.hasOwnProperty.call(r,a)||P5(a,t,i));for(a in r)Object.prototype.hasOwnProperty.call(r,a)&&(Object.prototype.hasOwnProperty.call(e,a)?ds(e[a],r[a])||(e[a].type==="geojson"&&r[a].type==="geojson"&&Kae(e,r,a)?_h(t,{command:"setGeoJSONSourceData",args:[a,r[a].data]}):Zae(a,r,t,i)):F5(a,r,t))}function Yb(e,r,t,i,a,o){e||(e={}),r||(r={});for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&(ds(e[s],r[s])||t.push({command:o,args:[i,s,r[s],a]}));for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&!Object.prototype.hasOwnProperty.call(e,s)&&(ds(e[s],r[s])||t.push({command:o,args:[i,s,r[s],a]}))}function I5(e){return e.id}function R5(e,r){return e[r.id]=r,e}function Qae(e,r,t){e||(e=[]),r||(r=[]);let i=e.map(I5),a=r.map(I5),o=e.reduce(R5,{}),s=r.reduce(R5,{}),l=i.slice(),n=Object.create(null),u,c,f,h,d;for(let p=0,g=0;p<i.length;p++)u=i[p],Object.prototype.hasOwnProperty.call(s,u)?g++:(_h(t,{command:"removeLayer",args:[u]}),l.splice(l.indexOf(u,g),1));for(let p=0,g=0;p<a.length;p++)u=a[a.length-1-p],l[l.length-1-p]!==u&&(Object.prototype.hasOwnProperty.call(o,u)?(_h(t,{command:"removeLayer",args:[u]}),l.splice(l.lastIndexOf(u,l.length-g),1)):g++,h=l[l.length-p],_h(t,{command:"addLayer",args:[s[u],h]}),l.splice(l.length-p,0,u),n[u]=!0);for(let p=0;p<a.length;p++)if(u=a[p],c=o[u],f=s[u],!(n[u]||ds(c,f))){if(!ds(c.source,f.source)||!ds(c["source-layer"],f["source-layer"])||!ds(c.type,f.type)){_h(t,{command:"removeLayer",args:[u]}),h=l[l.lastIndexOf(u)+1],_h(t,{command:"addLayer",args:[f,h]});continue}for(d in Yb(c.layout,f.layout,t,u,null,"setLayoutProperty"),Yb(c.paint,f.paint,t,u,null,"setPaintProperty"),ds(c.filter,f.filter)||_h(t,{command:"setFilter",args:[u,f.filter]}),(!ds(c.minzoom,f.minzoom)||!ds(c.maxzoom,f.maxzoom))&&_h(t,{command:"setLayerZoomRange",args:[u,f.minzoom,f.maxzoom]}),c)Object.prototype.hasOwnProperty.call(c,d)&&d!=="layout"&&d!=="paint"&&d!=="filter"&&d!=="metadata"&&d!=="minzoom"&&d!=="maxzoom"&&(d.indexOf("paint.")===0?Yb(c[d],f[d],t,u,d.slice(6),"setPaintProperty"):ds(c[d],f[d])||_h(t,{command:"setLayerProperty",args:[u,d,f[d]]}));for(d in f)Object.prototype.hasOwnProperty.call(f,d)&&!Object.prototype.hasOwnProperty.call(c,d)&&d!=="layout"&&d!=="paint"&&d!=="filter"&&d!=="metadata"&&d!=="minzoom"&&d!=="maxzoom"&&(d.indexOf("paint.")===0?Yb(c[d],f[d],t,u,d.slice(6),"setPaintProperty"):ds(c[d],f[d])||_h(t,{command:"setLayerProperty",args:[u,d,f[d]]}))}}function ene(e,r){if(!e)return[{command:"setStyle",args:[r]}];let t=[];try{if(!ds(e.version,r.version))return[{command:"setStyle",args:[r]}];ds(e.center,r.center)||t.push({command:"setCenter",args:[r.center]}),ds(e.state,r.state)||t.push({command:"setGlobalState",args:[r.state]}),ds(e.centerAltitude,r.centerAltitude)||t.push({command:"setCenterAltitude",args:[r.centerAltitude]}),ds(e.zoom,r.zoom)||t.push({command:"setZoom",args:[r.zoom]}),ds(e.bearing,r.bearing)||t.push({command:"setBearing",args:[r.bearing]}),ds(e.pitch,r.pitch)||t.push({command:"setPitch",args:[r.pitch]}),ds(e.roll,r.roll)||t.push({command:"setRoll",args:[r.roll]}),ds(e.sprite,r.sprite)||t.push({command:"setSprite",args:[r.sprite]}),ds(e.glyphs,r.glyphs)||t.push({command:"setGlyphs",args:[r.glyphs]}),ds(e["font-faces"],r["font-faces"])||t.push({command:"setFontFaces",args:[r["font-faces"]]}),ds(e.transition,r.transition)||t.push({command:"setTransition",args:[r.transition]}),ds(e.light,r.light)||t.push({command:"setLight",args:[r.light]}),ds(e.terrain,r.terrain)||t.push({command:"setTerrain",args:[r.terrain]}),ds(e.sky,r.sky)||t.push({command:"setSky",args:[r.sky]}),ds(e.projection,r.projection)||t.push({command:"setProjection",args:[r.projection]});let i={},a=[];Jae(e.sources,r.sources,a,i);let o=[];e.layers&&e.layers.forEach(s=>{"source"in s&&i[s.source]?t.push({command:"removeLayer",args:[s.id]}):o.push(s)}),t=t.concat(a),Qae(o,r.layers,t)}catch(i){console.warn("Unable to compute style diff:",i),t=[{command:"setStyle",args:[r]}]}return t}function tne(){let e={},r=mi.$version;for(let t in mi.$root){let i=mi.$root[t];if(i.required){let a=null;a=t==="version"?r:i.type==="array"?[]:{},a!=null&&(e[t]=a)}}return e}function Xb(e){let r=[];if(typeof e=="string")r.push({id:"default",url:e});else if(e&&e.length>0){let t=[];for(let{id:i,url:a}of e){let o=`${i}${a}`;t.includes(o)||(t.push(o),r.push({id:i,url:a}))}}return r}function z5(e,r,t){try{let i=new URL(e);return i.pathname+=`${r}${t}`,i.toString()}catch{throw Error(`Invalid sprite URL "${e}", must be absolute. Modify style specification directly or use TransformStyleFunction to correct the issue dynamically`)}}function rne(e,r,t,i){return Xr(this,null,function*(){let a=Xb(e),o=t>1?"@2x":"",s={},l={};for(let{id:n,url:u}of a){let c=yield r.transformRequest(z5(u,o,".json"),"SpriteJSON");s[n]=vg(c,i);let f=yield r.transformRequest(z5(u,o,".png"),"SpriteImage");l[n]=td.getImage(f,i)}return yield Promise.all([...Object.values(s),...Object.values(l)]),ine(s,l)})}function ine(e,r){return Xr(this,null,function*(){let t={};for(let i in e){t[i]={};let a=(yield r[i]).data;if(!a)throw Error(`Could not load sprite image for ${i}: the response is empty`);let o=yc.getImageCanvasContext(a),s=(yield e[i]).data;for(let l in s){let{width:n,height:u,x:c,y:f,sdf:h,pixelRatio:d,stretchX:p,stretchY:g,content:m,textFitWidth:y,textFitHeight:_}=s[l],v={width:n,height:u,x:c,y:f,context:o};t[i][l]={data:null,pixelRatio:d,sdf:h,stretchX:p,stretchY:g,content:m,textFitWidth:y,textFitHeight:_,spriteData:v}}}return t})}function ane(e){let r=/^u\+([0-9a-f]*)(\?+)$/i.exec(e);if(r){let[,a,o]=r;return a.length+o.length>6?null:B5(parseInt(`${a}${"0".repeat(o.length)}`,16),parseInt(`${a}${"f".repeat(o.length)}`,16))}let t=/^u\+([0-9a-f]{1,6})(?:-([0-9a-f]{1,6}))?$/i.exec(e);if(!t)return null;let i=parseInt(t[1],16);return B5(i,t[2]===void 0?i:parseInt(t[2],16))}function B5(e,r){return e>r||e>p2?null:{start:e,end:Math.min(r,p2)}}function nne(e,r){return e.ranges.some(({start:t,end:i})=>r>=t&&r<=i)}function O5(e,r,t,i,a,o,s,l,n){for(let u=r;u<r+i;u++)N5(e,t*o+u,o,a,s,l,n);for(let u=t;u<t+a;u++)N5(e,u*o+r,1,i,s,l,n)}function N5(e,r,t,i,a,o,s){o[0]=0,s[0]=-1e20,s[1]=v2,a[0]=e[r];for(let l=1,n=0,u=0;l<i;l++){a[l]=e[r+l*t];let c=l*l;do{let f=o[n];u=(a[l]-a[f]+c-f*f)/(l-f)/2}while(u<=s[n]&&--n>-1);n++,o[n]=l,s[n]=u,s[n+1]=v2}for(let l=0,n=0;l<i;l++){for(;s[n+1]<l;)n++;let u=o[n],c=l-u;e[r+l*t]=a[u]+c*c}}function one(e){if(!e)return!1;let r=globalThis.location;if(!r)return!1;try{return new URL(e,r.href).origin!==r.origin}catch{return!1}}function sne(){let e=pM.url;if(!/^https?:/.test(e))return"";let r=e.endsWith("-dev.mjs")?"maplibre-gl-worker-dev.mjs":"maplibre-gl-worker.mjs";return new URL(`./${r}`,e).href}function qA(e,r){if(r)try{return new Worker(e,{type:"module"})}catch(t){console.warn("Module worker not supported, falling back to classic worker",t)}return new Worker(e)}function lne(e){return Xr(this,null,function*(){let r=yield fetch(e);if(!r.ok)throw Error(`Failed to fetch worker script (${r.status}): ${e}`);let t=yield r.text(),i=new Blob([t],{type:"text/javascript"});return URL.createObjectURL(i)})}function une(e){let r=new Blob([`import ${JSON.stringify(new URL(e,pM.url).href)}`],{type:"text/javascript"});return URL.createObjectURL(r)}function cne(){return Xr(this,null,function*(){let e=ff.WORKER_URL||sne(),r=!e?.endsWith(".cjs");if(!one(e))return qA(e,r);if(r){let i=une(e);try{return qA(i,r)}finally{URL.revokeObjectURL(i)}}let t=yield lne(e);try{return qA(t,r)}finally{URL.revokeObjectURL(t)}})}function VA(){return Xg||(Xg=new Yg),Xg}function fne(){VA().acquire(g2)}function hne(){let e=Xg;e&&(e.isPreloaded()&&e.numActive()===1?(e.release(g2),Xg=null):console.warn("Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()"))}function GA(){return y2||(y2=new bM(VA(),kx),y2.registerMessageHandler("GR",(e,r,t)=>pg(r,t))),y2}function dne(e,r){let t=Rp();return Ol(t,t,[1,1,0]),Xu(t,t,[e.width*.5,e.height*.5,1]),e.calculatePosMatrix?$v(t,t,e.calculatePosMatrix(r.toUnwrapped())):t}function pne(e,r,t){if(e)for(let i of e){let a=r[i];if(a?.source===t&&a.type==="fill-extrusion")return!0}else for(let i in r){let a=r[i];if(a.source===t&&a.type==="fill-extrusion")return!0}return!1}function vne(e,r,t,i,a,o,s){var l;let n=pne((l=a?.layers)!=null?l:null,r,e.id),u=o.maxPitchScaleFactor(),c=e.tilesIn(i,u,n);c.sort(j5);let f=[];for(let h of c)f.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(r,t,e.getState(),h.queryGeometry,h.cameraQueryGeometry,h.scale,a,o,u,dne(o,h.tileID),s?(d,p)=>s(h.tileID,d,p):void 0)});return _ne(yne(f),e)}function mne(e,r,t,i,a,o,s){let l={},n=o.queryRenderedSymbols(i),u=[];for(let c of Object.keys(n).map(Number))u.push(s[c]);u.sort(j5);for(let c of u){let f=c.featureIndex.lookupSymbolFeatures(n[c.bucketInstanceId],r,c.bucketIndex,c.sourceLayerIndex,{filterSpec:a.filter,globalState:a.globalState},a.layers,a.availableImages,e);for(let h in f){l[h]||(l[h]=[]);let d=f[h];d.sort((p,g)=>{let m=c.featureSortOrder;if(m){let y=m.indexOf(p.featureIndex);return m.indexOf(g.featureIndex)-y}return g.featureIndex-p.featureIndex});for(let p of d)l[h].push(p)}}return xne(l,e,t)}function gne(e,r){let t=e.getRenderableIds().map(o=>e.getTileByID(o)),i=[],a={};for(let o of t){let s=o.tileID.canonical.key;a[s]||(a[s]=!0,o.querySourceFeatures(i,r))}return i}function j5(e,r){let t=e.tileID,i=r.tileID;return t.overscaledZ-i.overscaledZ||t.canonical.y-i.canonical.y||t.wrap-i.wrap||t.canonical.x-i.canonical.x}function yne(e){let r={},t={};for(let{queryResults:i,wrappedTileID:a}of e){t[a]||(t[a]={});let o=t[a];for(let s in i){let l=i[s];o[s]||(o[s]={});let n=o[s];r[s]||(r[s]=[]);for(let u of l)n[u.featureIndex]||(n[u.featureIndex]=!0,r[s].push(u))}}return r}function _ne(e,r){for(let t in e)for(let i of e[t])U5(i,r);return e}function xne(e,r,t){for(let i in e)for(let a of e[i]){let o=t[r[i].source];U5(a,o)}return e}function U5(e,r){let t=e.feature,i=r.getFeatureState(t.layer["source-layer"],t.id);t.source=t.layer.source,t.layer["source-layer"]&&(t.sourceLayer=t.layer["source-layer"]),t.state=i}function q5(e,r,t,i){return Xr(this,null,function*(){let a=e;if(e.url?a=(yield vg(yield r.transformRequest(e.url,"Source"),t)).data:yield yc.frameAsync(t,i),!a)return null;let o=N1(yn(a,e),["tiles","minzoom","maxzoom","attribution","bounds","scheme","tileSize","encoding"]);return"vector_layers"in a&&a.vector_layers&&(o.vectorLayerIds=a.vector_layers.map(s=>s.id)),o})}function Ng(e,r){return r?e.properties[r]:e.id}function bne(e,r){let t=new Map;if(e==null||e.type==null)return t;if(e.type==="Feature"){let i=Ng(e,r);return i==null?void 0:(t.set(i,e),t)}if(e.type==="FeatureCollection"){let i=new Set;for(let a of e.features){let o=Ng(a,r);if(o==null||i.has(o))return;i.add(o),t.set(o,a)}return t}}function wne(e,r,t){var i,a;let o=[];if(r.removeAll)e.clear();else if(r.remove)for(let s of r.remove){let l=e.get(s);l&&(o.push(l.geometry),e.delete(s))}if(r.add)for(let s of r.add){let l=Ng(s,t);if(l==null)continue;let n=e.get(l);n&&o.push(n.geometry),o.push(s.geometry),e.set(l,s)}if(r.update)for(let s of r.update){let l=e.get(s.id);if(!l)continue;let n=!!s.newGeometry,u=s.removeAllProperties||((i=s.removeProperties)==null?void 0:i.length)>0||((a=s.addOrUpdateProperties)==null?void 0:a.length)>0;if(!n&&!u)continue;o.push(l.geometry);let c=Ot({},l);if(e.set(s.id,c),n&&(o.push(s.newGeometry),c.geometry=s.newGeometry),u){if(c.properties=s.removeAllProperties?{}:Ot({},c.properties||{}),s.removeProperties)for(let f of s.removeProperties)delete c.properties[f];if(s.addOrUpdateProperties)for(let{key:f,value:h}of s.addOrUpdateProperties)c.properties[f]=h}}return o}function Tne(e,r,t){if(!e)return r||{};if(!r)return e||{};t&&(V5(e.add,t),V5(r.add,t));let i=G5(e),a=G5(r);Ane(i,a);let o={};if((i.removeAll||a.removeAll)&&(o.removeAll=!0),o.remove=new Set([...i.remove,...a.remove]),o.add=new Map([...i.add,...a.add]),o.update=new Map([...i.update,...a.update]),o.remove.size&&o.add.size)for(let l of o.add.keys())o.remove.delete(l);let s=Ene(o);return t&&Sne(s.add,t),s}function Ane(e,r){r.removeAll&&(e.add.clear(),e.update.clear(),e.remove.clear(),r.remove.clear());for(let t of r.remove)e.add.delete(t),e.update.delete(t);for(let[t,i]of r.update){let a=e.update.get(t);a&&(r.update.set(t,Mne(a,i)),e.update.delete(t))}}function Mne(e,r){let t={id:e.id};if(r.removeAllProperties&&(delete e.removeProperties,delete e.addOrUpdateProperties,delete r.removeProperties),r.removeProperties&&e.addOrUpdateProperties){let i=new Set(r.removeProperties);e.addOrUpdateProperties=e.addOrUpdateProperties.filter(a=>!i.has(a.key))}return(e.removeAllProperties||r.removeAllProperties)&&(t.removeAllProperties=!0),(e.removeProperties||r.removeProperties)&&(t.removeProperties=[...e.removeProperties||[],...r.removeProperties||[]]),(e.addOrUpdateProperties||r.addOrUpdateProperties)&&(t.addOrUpdateProperties=[...e.addOrUpdateProperties||[],...r.addOrUpdateProperties||[]]),(e.newGeometry||r.newGeometry)&&(t.newGeometry=r.newGeometry||e.newGeometry),t}function V5(e,r){if(e)for(let t of e){let i=Ng(t,r);i!=null&&(t.id=i)}}function Sne(e,r){if(e)for(let t of e)Ng(t,r)!=null&&delete t.id}function G5(e){var r,t;if(!e)return{};let i={};return i.removeAll=e.removeAll,i.remove=new Set(e.remove||[]),i.add=new Map((r=e.add)==null?void 0:r.map(a=>[a.id,a])),i.update=new Map((t=e.update)==null?void 0:t.map(a=>[a.id,a])),i}function Ene(e){let r={};return e.removeAll&&(r.removeAll=e.removeAll),e.remove&&(r.remove=Array.from(e.remove)),e.add&&(r.add=Array.from(e.add.values())),e.update&&(r.update=Array.from(e.update.values())),r}function H5(e){return!e||e.length===0?[]:typeof e[0]=="number"?[e]:e.flatMap(r=>H5(r))}function Zb(e){return e.type==="GeometryCollection"?e.geometries.flatMap(r=>Zb(r)):H5(e.coordinates)}function $5(e){let r=new bh,t;switch(e.type){case"FeatureCollection":t=e.features.flatMap(i=>Zb(i.geometry));break;case"Feature":t=Zb(e.geometry);break;default:t=Zb(e)}if(t.length===0)return r;for(let i of t){let[a,o]=i;r.extend([a,o])}return r}function kne({x:e,y:r,z:t},i=0){let a=B6((e-i)/2**t),o=og((r+1+i)/2**t),s=B6((e+1+i)/2**t),l=og((r-i)/2**t);return new bh([a,o],[s,l])}function Cne(e){e*=Math.PI/180;let r=Math.sin(e),t=Math.cos(e);return[(2*t+1)/3,(-Math.sqrt(3)*r-t+1)/3,(Math.sqrt(3)*r-t+1)/3]}function Dne(e){return e>0?1/(1-e):1+e}function Lne(e){return e>0?1-1/(1.001-e):-e}function W5(e,r){let t=Y5(r,"16bit"),i=sp.deserialize({arrayBuffer:t.vertices,length:t.vertices.byteLength/2/2}),a=ed.deserialize({arrayBuffer:t.indices,length:t.indices.byteLength/2/3});return new Um(e.createVertexBuffer(i,i0.members),e.createIndexBuffer(a),Ks.simpleSegment(0,0,i.length,a.length))}function Y5(e,r){let t=e.granularity===void 0?1:Math.max(e.granularity,1),i=t+(e.generateBorders?2:0),a=t+(e.extendToNorthPole||e.generateBorders?1:0)+(e.extendToSouthPole||e.generateBorders?1:0),o=i+1,s=a+1,l=e.generateBorders?-1:0,n=e.generateBorders||e.extendToNorthPole?-1:0,u=t+ +!!e.generateBorders,c=t+(e.generateBorders||e.extendToSouthPole?1:0),f=o*s,h=i*a*6,d=o*s>65536;if(d&&r==="16bit")throw Error("Granularity is too large and meshes would not fit inside 16 bit vertex indices.");let p=d||r==="32bit",g=new Int16Array(f*2),m=0;for(let v=n;v<=c;v++)for(let x=l;x<=u;x++){let S=x/t*Bi;x===-1&&(S=-Zg),x===t+1&&(S=Bi+Zg);let M=v/t*Bi;v===-1&&(M=e.extendToNorthPole?Pm:-Zg),v===t+1&&(M=e.extendToSouthPole?Im:Bi+Zg),g[m++]=S,g[m++]=M}let y=p?new Uint32Array(h):new Uint16Array(h),_=0;for(let v=0;v<a;v++)for(let x=0;x<i;x++){let S=x+v*o,M=x+1+v*o,C=x+(v+1)*o,w=x+1+(v+1)*o;y[_++]=S,y[_++]=C,y[_++]=M,y[_++]=M,y[_++]=C,y[_++]=w}return{vertices:g.buffer.slice(0),indices:y.buffer.slice(0),uses32bitIndices:p}}function Fne(e){let r=gh.fromPoints(e),t=r.width(),i=r.height(),a=Math.max(0,Math.floor(-Math.log(Math.max(t,i))/Math.LN2)),o=2**a;return new Rg(a,Math.floor((r.minX+r.maxX)/2*o),Math.floor((r.minY+r.maxY)/2*o))}function Pne(e){let r=e[1].x-e[0].x,t=e[1].y-e[0].y,i=e[2].x-e[0].x;return r*(e[2].y-e[0].y)-t*i<0}function Ine(e,r){if(r==="flat"||X5(e))return tv;let[t,i,a,o]=e,s=t.x-i.x+a.x-o.x,l=t.y-i.y+a.y-o.y,n=[i.x-a.x,i.y-a.y,o.x-a.x,o.y-a.y],[u,c,f,h]=n,d=Gae(n),p=(s*h-f*l)/d,g=(u*l-s*c)/d,m=[1,1+p,1+p+g,1+g],y=Math.max(...m)/Math.min(...m),_=r==="perspective"?0:Rne(y);return!(y>=1&&y<=512)||_>=1?tv:[p,g,_]}function Rne(e){let r=(1-4/e)/.9921875;return Math.max(0,r)}function X5(e){let[r,t,i,a]=e;return r.x+i.x===t.x+a.x&&r.y+i.y===t.y+a.y}function zne(e,r){let t={};if(!r)return t;for(let i of e){let a=i.layerIds.map(o=>r.getLayer(o)).filter(Boolean);if(a.length!==0){i.layers=a,i.stateDependentLayerIds&&(i.stateDependentLayers=i.stateDependentLayerIds.map(o=>a.filter(s=>s.id===o)[0]));for(let o of a)t[o.id]=i}}return t}function jg(){return b2||(b2=new _B),b2}function Z5(e){let r=[];for(let t in e)r.push({id:t,state:e[t]});return r}function Bne(e,r,t,i){let a=pu([],e,r),o=1/a[3]/t*i;return xP(a,a,[o,o,1/a[3],o])}function One(e,r,t,i){let a=i?4:0,o=i?0:4,s=0,l=[],n=[];for(let f=0;f<4;f++){let h=Sd([],e[f+o],e[f+a]),d=ap(h);Ws(h,h,1/d),l.push(d),n.push(h)}for(let f=0;f<4;f++){let h=JK(e[f+a],n[f],t);s=h!==null&&h>=0?Math.max(s,h):Math.max(s,l[f])}let u=Nne(e,r),c=jne(t,u);if(c!==null){let f=c/Kl(n[0],u);s=Math.min(s,f)}for(let f=0;f<4;f++){let h=Math.min(s,l[f]);e[f+o]=[e[f+a][0]+n[f][0]*h,e[f+a][1]+n[f][1]*h,e[f+a][2]+n[f][2]*h,1]}}function Nne(e,r){let t=Sd([],e[r[0]],e[r[1]]),i=Sd([],e[r[2]],e[r[1]]),a=[0,0,0,0];return qc(a,uf([],t,i)),a[3]=-Kl(a,e[r[0]]),a}function jne(e,r){let t=dg(e),i=HK([],e,1/t),a=Sd([],r,Ws([],i,Kl(r,i))),o=dg(a);if(o>0){let s=Math.sqrt(1-i[3]*i[3]),l=Ws([],i,-i[3]),n=lh([],l,Ws([],a,s/o));return G4(r,n)}return null}function Une(e,r,t){let i=r.intersectsFrustum(e);if(!t||i===0)return i;let a=r.intersectsPlane(t);return a===0?0:i===2&&a===2?2:1}function K5(e,r,t){let i=0,a=(t-r)/10;for(let o=0;o<10;o++){let s=r+(o+.5)/10*(t-r);i+=a*Math.cos(s)**+e}return i}function HA(e,r){return function(t,i,a,o,s){let l=2*((e-1)/Ku(Math.cos(rl(Jp-s))/Math.cos(rl(Jp)))-1),n=Math.acos(a/o),u=2*K5(l-1,0,rl(s/2)),c=Math.min(rl(Jp),n+rl(s/2)),f=Math.min(c,n-rl(s/2)),h=K5(l-1,f,c),d=Math.atan(i/a),p=Math.hypot(i,a),g=t;return g+=Ku(o/p/Math.max(.5,Math.cos(rl(s/2)))),g+=l*Ku(Math.cos(d))/2,g-=Ku(Math.max(1,h/u/r))/2,g}}function $A(e,r){let t=(r.roundZoom?Math.round:Math.floor)(e.zoom+Ku(e.tileSize/r.tileSize));return Math.max(0,t)}function qne(e,r){let t=Jp-e.pitch-e.fov/2,i=to((15-t)/15,0,1),a=Math.max(500,r??0);return e.elevation+i*a}function Vne(e,r,t){let i=e.planes[1],a=e.points.map(n=>{let u=i[0]*n[0]+i[1]*n[1]+i[2]*n[2]+i[3];if(Math.abs(u)>1e-6)return n;let c=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],f=i[0]*c[0]+i[1]*c[1]+i[2]*c[2];if(f>=-1e-9)return n;let h=r/-f;return[n[0]+c[0]*h,n[1]+c[1]*h,n[2]+c[2]*h,n[3]]}),o=e.planes.map((n,u)=>u===1?[n[0],n[1],n[2],n[3]+r]:n),s=[1/0,1/0,1/0],l=[-1/0,-1/0,-1/0];for(let n of a)for(let u=0;u<3;u++)s[u]=Math.min(s[u],n[u]),l[u]=Math.max(l[u],n[u]);return new T2(a,o,new w2(s,l))}function Bm(e,r){let t=e.getCameraFrustum(),i=e.getClippingPlane();if(i&&r.maxContentElevation>0){let M=Math.hypot(i[0],i[1],i[2]);if(M>0){let C=1+r.maxContentElevation/mc,w=to(-i[3]/M,-1,1),k=Math.cos(Math.acos(w)+Math.acos(1/C));i=[i[0],i[1],i[2],-k*M],t=Vne(t,Math.sqrt(C*C-1),e.cameraPosition)}}let a=Fee(e),o=Qo.fromLngLat(e.center,e.elevation),s=qne(e,r.maxContentElevation),l=e.getCoveringTilesDetailsProvider(),n=l.allowVariableZoom(e,r),u=$A(e,r),c=r.minzoom||0,f=r.maxzoom===void 0?e.maxZoom:r.maxzoom,h=Math.min(Math.max(0,u),f),d=2**h,p=[d*a.x,d*a.y,0],g=[d*o.x,d*o.y,0],m=Math.hypot(o.x-a.x,o.y-a.y),y=Math.abs(o.z-a.z),_=Math.hypot(m,y),v=M=>({zoom:0,x:0,y:0,wrap:M,fullyVisible:!1}),x=[],S=[];if(e.renderWorldCopies&&l.allowWorldCopies())for(let M=1;M<=3;M++)x.push(v(-M)),x.push(v(M));for(x.push(v(0));x.length>0;){let M=x.pop(),C=M.x,w=M.y,k=M.fullyVisible,A={x:C,y:w,z:M.zoom},b=l.getTileBoundingVolume(A,M.wrap,s,r);if(!k){let D=Une(t,b,i);if(D===0)continue;k=D===2}let E=l.distanceToTile2d(a.x,a.y,A,b),T=u;n&&(T=(r.calculateTileZoom||bB)(e.zoom+Ku(e.tileSize/r.tileSize),E,y,_,e.fov)),T=(r.roundZoom?Math.round:Math.floor)(T),T=Math.max(0,T);let F=Math.min(T,f);if(M.wrap=l.getWrap(o,A,M.wrap),M.zoom>=F){if(M.zoom<c)continue;let D=h-M.zoom,R=p[0]-.5-(C<<D),P=p[1]-.5-(w<<D),z=r.reparseOverscaled?Math.max(M.zoom,T):M.zoom;S.push({tileID:new Cu(M.zoom===f?z:M.zoom,M.wrap,M.zoom,C,w),distanceSq:bP([g[0]-.5-C,g[1]-.5-w]),tileDistanceToCamera:Math.sqrt(R*R+P*P)});continue}for(let D=0;D<4;D++){let R=(C<<1)+D%2,P=(w<<1)+(D>>1),z=M.zoom+1;x.push({zoom:z,x:R,y:P,wrap:M.wrap,fullyVisible:k})}}return S.sort((M,C)=>M.distanceSq-C.distanceSq).map(M=>M.tileID)}function J5(e){return e==="raster"||e==="image"||e==="video"}function Gne(e,r,t,i,a,o,s){let l=hs(),n=eJ(r);for(let u of r){let c=e.getTileById(u.key);(c.fadingDirection===0||c.fadeOpacity===0)&&c.resetFadeLogic(),!Hne(e,c,t,l,i,a,s)&&($ne(e,c,t,l,o,s)||Wne(c,n,l,s)||c.resetFadeLogic())}}function Hne(e,r,t,i,a,o,s){if(!r.hasData())return!1;let{tileID:l,fadingRole:n,fadingDirection:u,fadingParentID:c}=r;if(n===0&&u===1&&c)return t[c.key]=c,!0;let f=Math.max(l.overscaledZ-a,o);for(let h=l.overscaledZ-1;h>=f;h--){let d=l.scaledTo(h),p=e.getLoadedTile(d);if(p)return r.setCrossFadeLogic({fadingRole:0,fadingDirection:1,fadingParentID:p.tileID,fadeEndTime:i+s}),p.setCrossFadeLogic({fadingRole:1,fadingDirection:0,fadeEndTime:i+s}),t[d.key]=d,!0}return!1}function $ne(e,r,t,i,a,o){if(!r.hasData())return!1;let s=r.tileID.children(a),l=Q5(e,r,s,t,i,a,o);if(l)return!0;for(let n of s)Q5(e,r,n.children(a),t,i,a,o)&&(l=!0);return l}function Q5(e,r,t,i,a,o,s){if(t[0].overscaledZ>=o)return!1;let l=!1;for(let n of t){let u=e.getLoadedTile(n);if(!u)continue;let{fadingRole:c,fadingDirection:f,fadingParentID:h}=u;(c!==0||f!==0||!h)&&(u.setCrossFadeLogic({fadingRole:0,fadingDirection:0,fadingParentID:r.tileID,fadeEndTime:a+s}),r.setCrossFadeLogic({fadingRole:1,fadingDirection:1,fadeEndTime:a+s})),i[n.key]=n,l=!0}return l}function Wne(e,r,t,i){let a=e.tileID;if(e.selfFading)return!0;if(e.hasData())return!1;if(r.has(a)){let o=t+i;return e.setSelfFadeLogic(o),!0}return!1}function Yne(e,r){if(r<=0)return!1;let t=hs();for(let i of e.getAllTiles())if(i.fadeEndTime>=t)return!0;return!1}function Xne(e,r){var t,i,a;let o=r.getRenderableIds();for(let s of o){if(!((t=e.neighboringTiles)!=null&&t[s]))continue;let l=r.getTileById(s);e.neighboringTiles[s].backfilled||ez(e,l),!((a=(i=l.neighboringTiles)==null?void 0:i[e.tileID.key])!=null&&a.backfilled)&&ez(l,e)}}function ez(e,r){var t;e.needsHillshadePrepare=!0,e.needsTerrainPrepare=!0,e.needsColorReliefPrepare=!0;let i=r.tileID.canonical.x-e.tileID.canonical.x,a=r.tileID.canonical.y-e.tileID.canonical.y,o=2**e.tileID.canonical.z,s=r.tileID.key;(i!==0||a!==0)&&(Math.abs(a)>1||(Math.abs(i)>1&&(Math.abs(i+o)===1?i+=o:Math.abs(i-o)===1&&(i-=o)),r.dem&&e.dem&&(e.dem.backfillBorder(r.dem,i,a),(t=e.neighboringTiles)!=null&&t[s]&&(e.neighboringTiles[s].backfilled=!0))))}function Kb(e,r,t,i,a){return a?e?e(r,t)+i:i===0?void 0:i:i}function Jb(e,r){let t=!0;return e==="always"||(e==="never"||r==="never")&&(t=!1),t}function Zne(e,r){let t=1/(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]),i=1/(r[8]*r[8]+r[9]*r[9]+r[10]*r[10]),a=r[0]*t,o=r[4]*t,s=r[8]*i,l=r[1]*t,n=r[5]*t,u=r[9]*i,c=r[2]*t,f=r[6]*t,h=r[10]*i;e[0]=a,e[1]=o,e[2]=s,e[4]=l,e[5]=n,e[6]=u,e[8]=c,e[9]=f,e[10]=h;let d=r[12],p=r[13],g=r[14];return e[12]=-a*d-l*p-c*g,e[13]=-o*d-n*p-f*g,e[14]=-s*d-u*p-h*g,e[3]=0,e[7]=0,e[11]=0,e[15]=1,e}function Kne(e,r){return e[0]=1/r[0],e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1/r[5],e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=0,e[11]=1/r[14],e[12]=0,e[13]=0,e[14]=-1,e[15]=r[10]/r[14],e}function Jne(e,r){let t=1/(r[0]*r[5]-r[1]*r[4]);return e[0]=r[5]*t,e[1]=-r[1]*t,e[2]=0,e[3]=0,e[4]=-r[4]*t,e[5]=r[0]*t,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1/r[10],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1/r[15],e}function WA(e,r,t){let i=Rp();if(!e){let{vecSouth:a,vecEast:o}=YA(r),s=D5();s[0]=o[0],s[1]=o[1],s[2]=a[0],s[3]=a[1],Vae(s,s),i[0]=s[0],i[1]=s[1],i[4]=s[2],i[5]=s[3]}return Xu(i,i,[1/t,1/t,1]),i}function Qne(e,r,t,i){if(e){let a=Rp();if(!r){let{vecSouth:o,vecEast:s}=YA(t);a[0]=s[0],a[1]=s[1],a[4]=o[0],a[5]=o[1]}return Xu(a,a,[i,i,1]),a}return t.pixelsToClipSpaceMatrix}function YA(e){let r=Math.cos(e.rollInRadians),t=Math.sin(e.rollInRadians),i=Math.cos(e.pitchInRadians),a=Math.cos(e.bearingInRadians),o=Math.sin(e.bearingInRadians),s=V4();s[0]=-a*i*t-o*r,s[1]=-o*i*t+a*r;let l=g9(s);l<1e-9?y9(s):m9(s,s,1/l);let n=V4();n[0]=a*i*r-o*t,n[1]=o*i*r+a*t;let u=g9(n);return u<1e-9?y9(n):m9(n,n,1/u),{vecEast:n,vecSouth:s}}function Q0(e,r,t){var i,a;return Kb(e.getElevation,r,t,(i=e.heightOffset)!=null?i:0,(a=e.heightAnchorGround)!=null?a:!0)}function XA(e,r,t,i){let a;i==null?(a=[e,r,0,1],JA(a,a,t)):(a=[e,r,i,1],pu(a,a,t));let o=a[3];return{point:new Wr(a[0]/o,a[1]/o),signedDistanceFromCamera:o,isOccluded:!1}}function tz(e,r){return .5+e/r*.5}function eoe(e,r){return e.x>=-r[0]&&e.x<=r[0]&&e.y>=-r[1]&&e.y<=r[1]}function toe(e,r,t,i,a,o,s,l,n,u,c,f,h){let d=t?e.textSizeData:e.iconSizeData,p=dx(d,r.transform.zoom),g=[256/r.width*2+1,256/r.height*2+1],m=t?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;m.clear();let y=e.lineVertexArray,_=t?e.text.placedSymbolArray:e.icon.placedSymbolArray,v=r.transform.width/r.transform.height,x=!1;for(let S=0;S<_.length;S++){let M=_.get(S);if(M.hidden||M.writingMode===2&&!x){Om(M.numGlyphs,m);continue}x=!1;let C=new Wr(M.anchorX,M.anchorY),w={getElevation:h,pitchedLabelPlaneMatrix:i,lineVertexArray:y,pitchWithMap:o,projectionCache:{projections:{},offsets:{},cachedAnchorPoint:void 0,anyProjectionOccluded:!1},transform:r.transform,tileAnchorPoint:C,unwrappedTileID:n,width:u,height:c,translation:f},k=oz(M.anchorX,M.anchorY,w);if(!eoe(k.point,g)){Om(M.numGlyphs,m);continue}let A=k.signedDistanceFromCamera,b=tz(r.transform.cameraToCenterDistance,A),E=G6(d,p,M),T=o?E*r.transform.getPitchedTextCorrection(M.anchorX,M.anchorY,n)/b:E*b,F=az({projectionContext:w,pitchedLabelPlaneMatrixInverse:a,symbol:M,fontSize:T,flip:!1,keepUpright:s,glyphOffsetArray:e.glyphOffsetArray,dynamicLayoutVertexArray:m,aspectRatio:v,rotateToLine:l});x=F.useVertical,(F.notEnoughRoom||x||F.needsFlipping&&az({projectionContext:w,pitchedLabelPlaneMatrixInverse:a,symbol:M,fontSize:T,flip:!0,keepUpright:s,glyphOffsetArray:e.glyphOffsetArray,dynamicLayoutVertexArray:m,aspectRatio:v,rotateToLine:l}).notEnoughRoom)&&Om(M.numGlyphs,m)}t?e.text.dynamicLayoutVertexBuffer.updateData(m):e.icon.dynamicLayoutVertexBuffer.updateData(m)}function rz(e,r,t,i,a,o,s,l){let n=o.glyphStartIndex+o.numGlyphs,u=o.lineStartIndex,c=o.lineStartIndex+o.lineLength,f=r.getoffsetX(o.glyphStartIndex),h=r.getoffsetX(n-1),d=e2(e*f,t,i,a,o.segment,u,c,l,s);if(!d)return null;let p=e2(e*h,t,i,a,o.segment,u,c,l,s);return!p||l.projectionCache.anyProjectionOccluded?null:{first:d,last:p}}function iz(e,r,t,i){return e===1&&Math.abs(t.y-r.y)>Math.abs(t.x-r.x)*i?{useVertical:!0}:(e===2?r.y<t.y:r.x>t.x)?{needsFlipping:!0}:null}function az(e){let{projectionContext:r,pitchedLabelPlaneMatrixInverse:t,symbol:i,fontSize:a,flip:o,keepUpright:s,glyphOffsetArray:l,dynamicLayoutVertexArray:n,aspectRatio:u,rotateToLine:c}=e,f=a/24,h=i.lineOffsetX*f,d=i.lineOffsetY*f,p;if(i.numGlyphs>1){let g=i.glyphStartIndex+i.numGlyphs,m=i.lineStartIndex,y=i.lineStartIndex+i.lineLength,_=rz(f,l,h,d,o,i,c,r);if(!_)return{notEnoughRoom:!0};let v=Qb(_.first.point.x,_.first.point.y,r,t),x=Qb(_.last.point.x,_.last.point.y,r,t);if(s&&!o){let S=iz(i.writingMode,v,x,u);if(S)return S}p=[_.first];for(let S=i.glyphStartIndex+1;S<g-1;S++){let M=e2(f*l.getoffsetX(S),h,d,o,i.segment,m,y,r,c);if(!M)return{notEnoughRoom:!0};p.push(M)}p.push(_.last)}else{if(s&&!o){let m=ev(r.tileAnchorPoint.x,r.tileAnchorPoint.y,r).point,y=i.lineStartIndex+i.segment+1,_=new Wr(r.lineVertexArray.getx(y),r.lineVertexArray.gety(y)),v=ev(_.x,_.y,r),x=v.signedDistanceFromCamera>0?v.point:nz(r.tileAnchorPoint,_,m,1,r),S=Qb(m.x,m.y,r,t),M=Qb(x.x,x.y,r,t),C=iz(i.writingMode,S,M,u);if(C)return C}let g=e2(f*l.getoffsetX(i.glyphStartIndex),h,d,o,i.segment,i.lineStartIndex,i.lineStartIndex+i.lineLength,r,c);if(!g||r.projectionCache.anyProjectionOccluded)return{notEnoughRoom:!0};p=[g]}for(let g of p)_x(n,g.point,g.angle);return{}}function nz(e,r,t,i,a){let o=e.add(e.sub(r)._unit()),s=ev(o.x,o.y,a).point,l=t.sub(s);return t.add(l._mult(i/l.mag()))}function ZA(e,r,t){let i=r.projectionCache;if(i.projections[e])return i.projections[e];let a=new Wr(r.lineVertexArray.getx(e),r.lineVertexArray.gety(e)),o=ev(a.x,a.y,r);if(o.signedDistanceFromCamera>0)return i.projections[e]=o.point,i.anyProjectionOccluded||(i.anyProjectionOccluded=o.isOccluded),o.point;let s=e-t.direction,l=t.distanceFromAnchor===0?r.tileAnchorPoint:new Wr(r.lineVertexArray.getx(s),r.lineVertexArray.gety(s)),n=t.absOffsetX-t.distanceFromAnchor+1;return nz(l,a,t.previousVertex,n,r)}function ev(e,r,t){let i=e+t.translation[0],a=r+t.translation[1],o;return t.pitchWithMap?(o=XA(i,a,t.pitchedLabelPlaneMatrix,Q0(t,i,a)),o.isOccluded=!1):(o=t.transform.projectTileCoordinates(i,a,t.unwrappedTileID,Q0(t,i,a)),o.point.x=(o.point.x*.5+.5)*t.width,o.point.y=(-o.point.y*.5+.5)*t.height),o}function Qb(e,r,t,i){if(t.pitchWithMap){let a=[e,r,0,1];pu(a,a,i);let o=a[0]/a[3],s=a[1]/a[3];return t.transform.projectTileCoordinates(o,s,t.unwrappedTileID,Q0(t,o,s)).point}return{x:e/t.width*2-1,y:1-r/t.height*2}}function oz(e,r,t){return t.transform.projectTileCoordinates(e,r,t.unwrappedTileID,Q0(t,e,r))}function KA(e,r,t){return e._unit()._perp()._mult(r*t)}function roe(e,r,t,i,a,o,s,l,n){if(l.projectionCache.offsets[e])return l.projectionCache.offsets[e];let u=t.add(r);if(e+n.direction<i||e+n.direction>=a)return l.projectionCache.offsets[e]=u,u;let c=ZA(e+n.direction,l,n),f=KA(c.sub(t),s,n.direction),h=t.add(f),d=c.add(f);return l.projectionCache.offsets[e]=aJ(o,u,h,d)||u,l.projectionCache.offsets[e]}function e2(e,r,t,i,a,o,s,l,n){let u=i?e-r:e+r,c=u>0?1:-1,f=0;i&&(c*=-1,f=Math.PI),c<0&&(f+=Math.PI);let h=c>0?o+a:o+a+1,d;l.projectionCache.cachedAnchorPoint?d=l.projectionCache.cachedAnchorPoint:(d=ev(l.tileAnchorPoint.x,l.tileAnchorPoint.y,l).point,l.projectionCache.cachedAnchorPoint=d);let p=d,g=d,m,y,_=0,v=0,x=Math.abs(u),S=[],M;for(;_+v<=x;){if(h+=c,h<o||h>=s)return null;_+=v,g=p,y=m;let A={absOffsetX:x,direction:c,distanceFromAnchor:_,previousVertex:g};if(p=ZA(h,l,A),t===0)S.push(g),M=p.sub(g);else{let b,E=p.sub(g);b=E.mag()===0?KA(ZA(h+c,l,A).sub(p),t,c):KA(E,t,c),y||(y=g.add(b)),m=roe(h,b,p,o,s,y,t,l,A),S.push(y),M=m.sub(y)}v=M.mag()}let C=(x-_)/v,w=M._mult(C)._add(y||g),k=f+Math.atan2(p.y-g.y,p.x-g.x);return S.push(w),{point:w,angle:n?k:0,path:S}}function Om(e,r){for(let t=0;t<e;t++){let i=r.length;r.resize(i+4),r.float32.set(AB,i*3)}}function JA(e,r,t){let i=r[0],a=r[1];return e[0]=t[0]*i+t[4]*a+t[12],e[1]=t[1]*i+t[5]*a+t[13],e[3]=t[3]*i+t[7]*a+t[15],e}function ioe(e,r){let t=TB;return Jne(t,r.pitchedLabelPlaneMatrix),e.map(i=>{let a=XA(i.x,i.y,t,Q0(r,i.x,i.y)),o=r.transform.projectTileCoordinates(a.point.x,a.point.y,r.unwrappedTileID,Q0(r,a.point.x,a.point.y));return o.point.x=(o.point.x*.5+.5)*r.width,o.point.y=(-o.point.y*.5+.5)*r.height,o})}function aoe(e){let r=0,t=0,i=0,a=0;for(let o=0;o<e.length;o++)e[o].isOccluded?(i=o+1,a=0):(a++,a>t&&(t=a,r=i));return e.slice(r,r+t)}function sz(e,r,t,i,a){let{horizontalAlign:o,verticalAlign:s}=fx(e),l=-(o-.5)*r,n=-(s-.5)*t;return new Wr(l+i[0]*a,n+i[1]*a)}function lz(e,r,t,i,a,o){(!i||i.length===0)&&(i=[0,0,0,0]);let s=i[0]-100,l=i[1]-100,n=i[2]-100,u=i[3]-100;e.emplaceBack(+!!r,+!!t,a||0,o||0,s,l),e.emplaceBack(+!!r,+!!t,a||0,o||0,n,l),e.emplaceBack(+!!r,+!!t,a||0,o||0,n,u),e.emplaceBack(+!!r,+!!t,a||0,o||0,s,u)}function uz(e){if(e.opacity===0&&!e.placed)return 0;if(e.opacity===1&&e.placed)return 4294967295;let r=+!!e.placed,t=Math.floor(e.opacity*127);return t*CB+r*DB+t*LB+r*FB+t*512+r*256+t*2+r}function QA(e,r,t,i,a,o){if(a-i<=t)return;let s=i+a>>1;cz(e,r,s,i,a,o),QA(e,r,t,i,s-1,1-o),QA(e,r,t,s+1,a,1-o)}function cz(e,r,t,i,a,o){for(;a>i;){if(a-i>600){let u=a-i+1,c=t-i+1,f=Math.log(u),h=.5*Math.exp(2*f/3),d=.5*Math.sqrt(f*h*(u-h)/u)*(c-u/2<0?-1:1);cz(e,r,t,Math.max(i,Math.floor(t-c*h/u+d)),Math.min(a,Math.floor(t+(u-c)*h/u+d)),o)}let s=r[2*t+o],l=i,n=a;for(Ug(e,r,i,t),r[2*a+o]>s&&Ug(e,r,i,a);l<n;){for(Ug(e,r,l,n),l++,n--;r[2*l+o]<s;)l++;for(;r[2*n+o]>s;)n--}r[2*i+o]===s?Ug(e,r,i,n):(n++,Ug(e,r,n,a)),n<=t&&(i=n+1),t<=n&&(a=n-1)}}function Ug(e,r,t,i){eM(e,t,i),eM(r,2*t,2*i),eM(r,2*t+1,2*i+1)}function eM(e,r,t){let i=e[r];e[r]=e[t],e[t]=i}function fz(e,r,t,i){let a=e-t,o=r-i;return a*a+o*o}function Yo(e,r){let t=/#pragma maplibre: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,i=r.match(/in ([\w]+) ([\w]+)/g),a=e.match(/uniform ([\w]+) ([\w]+)([\s]*)([\w]*)/g),o=r.match(/uniform ([\w]+) ([\w]+)([\s]*)([\w]*)/g),s=o?o.concat(a):a,l=i?i.length:0,n={};return e=e.replace(t,(u,c,f,h,d)=>(n[d]=!0,c==="define"?`
+#ifndef HAS_UNIFORM_u_${d}
+in ${f} ${h} ${d};
+#else
+uniform ${f} ${h} u_${d};
+#endif
+`:`
+#ifdef HAS_UNIFORM_u_${d}
+    ${f} ${h} ${d} = u_${d};
+#endif
+`)),r=r.replace(t,(u,c,f,h,d)=>{let p=h==="float"?"vec2":"vec4",g=d.match(/color/)?"color":p;return n[d]?c==="define"?`
+#ifndef HAS_UNIFORM_u_${d}
+uniform lowp float u_${d}_t;
+layout(location = ${l++}) in ${f} ${p} a_${d};
+out ${f} ${h} ${d};
+#else
+uniform ${f} ${h} u_${d};
+#endif
+`:g==="vec4"?`
+#ifndef HAS_UNIFORM_u_${d}
+    ${d} = a_${d};
+#else
+    ${f} ${h} ${d} = u_${d};
+#endif
+`:`
+#ifndef HAS_UNIFORM_u_${d}
+    ${d} = unpack_mix_${g}(a_${d}, u_${d}_t);
+#else
+    ${f} ${h} ${d} = u_${d};
+#endif
+`:c==="define"?`
+#ifndef HAS_UNIFORM_u_${d}
+uniform lowp float u_${d}_t;
+layout(location = ${l++}) in ${f} ${p} a_${d};
+#else
+uniform ${f} ${h} u_${d};
+#endif
+`:g==="vec4"?`
+#ifndef HAS_UNIFORM_u_${d}
+    ${f} ${h} ${d} = a_${d};
+#else
+    ${f} ${h} ${d} = u_${d};
+#endif
+`:`
+#ifndef HAS_UNIFORM_u_${d}
+    ${f} ${h} ${d} = unpack_mix_${g}(a_${d}, u_${d}_t);
+#else
+    ${f} ${h} ${d} = u_${d};
+#endif
+`}),{fragmentSource:e,vertexSource:r,staticAttributes:i,staticUniforms:s}}function t2(e,r){if(!e.renderWorldCopies||e.lngRange)return;let t=r.lng-e.center.lng;r.lng+=t>180?-360:t<-180?360:0}function hz(e){return Math.max(0,Math.floor(e))}function tM(e,r,t,i){if(i<0||i>=1)return UM;let a=Math.floor(t),o=t-a;for(let s of e.zooms){let l=1<<s,n=o*l,u=i*l,c=Math.floor(n),f=Math.floor(u),h=`${a}/${s}/${c}/${f}`;if(!e.samplerPerTile.has(h))continue;let d=e.samplerPerTile.get(h);return d?{covered:!0,demLoaded:!0,elevation:d(Math.min((n-c)*Bi,jM),Math.min((u-f)*Bi,jM),Bi)*r}:{covered:!0,demLoaded:!1,elevation:0}}return UM}function dz(e,r){return e.covered&&r<=e.elevation+1e-6}function pz(e,r,t,i,a){for(let o=0;o<40&&i-t>a;o++){let s=(t+i)/2;r(e,s)?i=s:t=s}return{lo:t,hi:i}}function r2(e,r){return tM(e.index,e.exaggeration,(e.near[0]+r*e.dx)/e.worldSize,(e.near[1]+r*e.dy)/e.worldSize)}function i2(e,r){return dz(r2(e,r),e.near[2]+r*e.dz)}function vz(){To("Map cannot fit within canvas with the given bounds, padding, and/or offset.")}function mz(e){if(e.useSlerp)if(e.k<1){let r=A9(e.startEulerAngles.roll,e.startEulerAngles.pitch,e.startEulerAngles.bearing),t=A9(e.endEulerAngles.roll,e.endEulerAngles.pitch,e.endEulerAngles.bearing),i=new Float64Array(4);C_(i,r,t,e.k);let a=cJ(i);e.tr.setRoll(a.roll),e.tr.setPitch(a.pitch),e.tr.setBearing(a.bearing)}else e.tr.setRoll(e.endEulerAngles.roll),e.tr.setPitch(e.endEulerAngles.pitch),e.tr.setBearing(e.endEulerAngles.bearing);else e.tr.setRoll(Zs.number(e.startEulerAngles.roll,e.endEulerAngles.roll,e.k)),e.tr.setPitch(Zs.number(e.startEulerAngles.pitch,e.endEulerAngles.pitch,e.k)),e.tr.setBearing(Zs.number(e.startEulerAngles.bearing,e.endEulerAngles.bearing,e.k))}function gz(e,r,t,i,a){let o=a.padding,s=Md(a.worldSize,t.getNorthWest()),l=Md(a.worldSize,t.getNorthEast()),n=Md(a.worldSize,t.getSouthEast()),u=Md(a.worldSize,t.getSouthWest()),c=rl(-i),f=s.rotate(c),h=l.rotate(c),d=n.rotate(c),p=u.rotate(c),g=new Wr(Math.max(f.x,h.x,p.x,d.x),Math.max(f.y,h.y,p.y,d.y)),m=new Wr(Math.min(f.x,h.x,p.x,d.x),Math.min(f.y,h.y,p.y,d.y)),y=g.sub(m),_=a.width-(o.left+o.right+r.left+r.right),v=a.height-(o.top+o.bottom+r.top+r.bottom),x=_/y.x,S=v/y.y;if(S<0||x<0){vz();return}let M=Math.min(Ku(a.scale*Math.min(x,S)),e.maxZoom),C=Wr.convert(e.offset),w=(r.left-r.right)/2,k=(r.top-r.bottom)/2,A=new Wr(w,k).rotate(rl(i)),b=C.add(A).mult(a.scale/Vc(M));return{center:sg(a.worldSize,s.add(n).div(2).sub(b)),zoom:M,bearing:i}}function yz(e){let r=Nm(e.worldSize,e.center.lat);return 2*Math.PI*r}function noe(e,r,t){let i=ru(r),a=ru(t),o=Kl(i,a),s=Math.acos(o),l=yz(e);return s/(2*Math.PI)*l}function ooe(e,r){return[F0(e*Math.PI*2+Math.PI,Math.PI*2),2*Math.atan(Math.exp(Math.PI-r*Math.PI*2))-Math.PI*.5]}function soe(e,r){let t=Math.cos(r),i=new Float64Array(3);return i[0]=Math.sin(e)*t,i[1]=Math.sin(r),i[2]=Math.cos(e)*t,i}function r0(e,r,t,i,a){let o=1/(1<<a),s=e/Bi*o+t*o,l=r/Bi*o+i*o,n=F0(s*Math.PI*2+Math.PI,Math.PI*2),u=2*Math.atan(Math.exp(Math.PI-l*Math.PI*2))-Math.PI*.5,c=Math.cos(u),f=new Float64Array(3);return f[0]=Math.sin(n)*c,f[1]=Math.sin(u),f[2]=Math.cos(n)*c,f}function ru(e){return soe(e.lng*Math.PI/180,e.lat*Math.PI/180)}function Nm(e,r){return e/(2*Math.PI)/Math.cos(r*Math.PI/180)}function _z(e){let r=pu(Bp(),[0,0,0,1],e.modelViewProjectionMatrix);return pu(r,r,e.inverseProjectionMatrix),[r[0]/r[3],r[1]/r[3],r[2]/r[3]]}function qg(e){let r=Math.asin(e[1])/Math.PI*180,t=Math.sqrt(e[0]*e[0]+e[2]*e[2]);if(t>1e-6){let i=e[0]/t,a=e[2]/t,o=Math.acos(a),s=(i>0?o:-o)/Math.PI*180;return new An(ch(s,-180,180),r)}return new An(0,r)}function loe(e,r){return q4(Bp(),-e.lng,-e.lat,r)}function uoe(e){let r=e[0],t=e[1],i=e[2],a=e[3];return{lng:-Math.atan2(2*(a*r+t*i),1-2*(r*r+t*t))*180/Math.PI,lat:-Math.asin(to(2*(a*t-i*r),-1,1))*180/Math.PI,bearing:Math.atan2(2*(a*i+r*t),1-2*(t*t+i*i))*180/Math.PI}}function xz(e,r){let t=e.cameraPosition,i=ap(t);if(i<=1)return e.screenPointToLocation(r);let a=fs();qc(a,t);let o=e.getRayDirectionFromPixel(r),s=-Kl(o,a),l=fs();k_(l,o,a,s);let n=ap(l);if(n<1e-9)return e.screenPointToLocation(r);let u=Math.atan2(n,s),c=Math.asin(1/i)*.9;if(u<c)return e.screenPointToLocation(r);let f=i*Math.sin(c),h=Math.asin(to(f,-1,1))-c,d=i*Math.cos(c)/Math.sqrt(Math.max(1-f*f,1e-12))-1,p=C2-h,g=u-c,m=h+d*g*p/(p+d*g),y=fs();Ws(y,l,1/n);let _=fs();return Ws(_,a,Math.cos(to(m,0,C2))),k_(_,_,y,Math.sin(to(m,0,C2))),qc(_,_),qg(_)}function coe(e,r,t,i,a=!0){let o=xz(e,t),s=r;if(i)s=xz(e,t.sub(i));else if(!e.isPointOnMapSurface(t))return;let l=ru(o),n=ru(s),u=loe(e.center,e.bearing),c=uf(fs(),n,l),f=Math.sqrt(Kl(c,c)),h=Math.acos(to(Kl(n,l),-1,1))/2,d=Math.sin(h),p=f?sT(c[1]/f*d,-c[0]/f*d,c[2]/f*d,Math.cos(h)):sT(0,0,0,1),{lng:g,lat:m,bearing:y}=uoe(YK(Bp(),u,p)),_=e.center.lat,v=e.zoom,x=to(m,-90,90),S=a?foe(e,t,i,g):g;e.setCenter(new An(ch(S,-180,180),x)),a||e.setBearing(y),e.setZoom(v+Lu(_,e.center.lat))}function foe(e,r,t,i){let a=e.center.lng,o=e.center.lat,s=o>=0?90:-90,l=e.locationToScreenPoint(new An(0,s)),n=r.x-l.x,u=r.y-l.y,c=n*n+u*u,f=to(1-(Wh-Math.abs(o))/12,0,1),h=f*f*(3-2*f),d=F0(i-a+180,360)-180,p=0;if(h>0&&t){let g=(n*t.y-u*t.x)/Math.max(c,400);p=(s>0?1:-1)*g*180/Math.PI}return a+(1-h)*d+h*p}function hoe(e){let r=fs();return r[0]=e[0]*-e[3],r[1]=e[1]*-e[3],r[2]=e[2]*-e[3],{center:r,radius:Math.sqrt(1-e[3]*e[3])}}function doe(e,r,t){let i=fs();Sd(i,t,e);let a=fs();return k_(a,e,i,r/dg(i)),a}function a2(e){return Math.cos(e*Math.PI/180)}function Lu(e,r){let t=a2(e),i=a2(r);return Ku(i/t)}function poe(e,r){return 360/yz({worldSize:e,center:{lat:r}})}function voe(e,r){let t=e.rotate(r.bearingInRadians),i=r.zoom+Lu(r.center.lat,0),a=Xv(1/a2(r.center.lat),1/a2(Math.min(Math.abs(r.center.lat),60)),P_(i,7,3,0,1)),o=poe(r.worldSize,r.center.lat);return new An(r.center.lng-t.x*o*a,to(r.center.lat+t.y*o,-Wh,Wh))}function rM(e){let r=.5*e,t=Math.sin(r),i=Math.cos(r);return Math.log(t+i)-Math.log(i-t)}function bz(e,r,t,i){let a=e.lat+t*i;if(Math.abs(t)>1){let o=e.lat+t,s=(Math.sign(o)===Math.sign(e.lat)?Math.abs(e.lat):-Math.abs(e.lat))*Math.PI/180,l=Math.abs(e.lat+t)*Math.PI/180,n=rM(s+i*(l-s)),u=rM(s),c=rM(l),f=(n-u)/(c-u),h=e.lng+r*f;return new An(h,a)}{let o=e.lng+r*i;return new An(o,a)}}function n2(e,r,t=1){let i=Kl(e,r),a=t*t,o=fs(),s=fs();Ws(s,r,i),Sd(o,e,s);let l=a-Kl(o,o);if(l<0)return null;let n=Kl(e,e)-a,u=-i+(i<0?1:-1)*Math.sqrt(l),c=n/u,f=u;return{tMin:Math.min(c,f),tMax:Math.max(c,f)}}function o2(e,r,t){let i=e-r;return i<0?-i:Math.max(0,i-t)}function iM(e,r,t,i,a){let o=e-t,s;return s=o<0?Math.min(-o,1+o-a):o>a?Math.min(Math.max(o-a,0),1-o):0,Math.max(s,o2(r,i,a))}function wz(e,r){let t=1/0,i=-1/0;for(let a of r){let o=Kl(e,a);t=Math.min(t,o),i=Math.max(i,o)}return{min:t,max:i}}function Tz(e,r){let t=fs();k_(t,e.origin,e.direction,r);let i=ap(t),a=fs();Ws(a,t,1/i);let o=qg(a),s=Qo.fromLngLat(o),l=new Qo(s.x,to(s.y,0,.999999999)),n=tM(e.index,e.exaggeration,l.x,l.y),u=Math.abs(o.lat)>85.051129?0:n.elevation;return{sample:ar(Ot({},n),{elevation:u}),radius:i,mercator:l}}function Az(e,r){let{sample:t,radius:i}=Tz(e,r);return dz(t,(i-1)*mc)}function moe(e,r,t){let i={constrainOverride:r};if(Array.isArray(e)){let a=new VM({type:e},t);return{projection:a,transform:new $M(i),cameraHelper:new YM(a)}}switch(e){case"mercator":return{projection:new M2,transform:new Kg(i),cameraHelper:new Jg};case"globe":{let a=new VM({type:["interpolate",["linear"],["zoom"],11,"vertical-perspective",12,"mercator"]},{});return{projection:a,transform:new $M(i),cameraHelper:new YM(a)}}case"vertical-perspective":return{projection:new qM,transform:new HM(i),cameraHelper:new WM};default:return To(`Unknown projection name: ${e}. Falling back to mercator projection.`),{projection:new M2,transform:new Kg(i),cameraHelper:new Jg}}}function goe(e,r){for(let[t,i]of Object.entries(Qg)){let a=e.getUniformBlockIndex(r,t);a!==e.INVALID_INDEX&&e.uniformBlockBinding(r,a,i)}}function aM(e){let r={},t=0;for(let{name:i,type:a}of e){let[o,s]=uO[a];t=Math.ceil(t/s)*s,r[i]=t,t+=o}return{offsets:r,contentWords:t,sizeWords:Math.ceil(t/4)*4}}function yoe(e){return new F2(e,Qg.ProjectionUBO,XM)}function _oe(e,r){let t=e.pending;t.set(r.mainMatrix,iv.u_projection_matrix),t.set(r.fallbackMatrix,iv.u_projection_fallback_matrix),t.set(r.tileMercatorCoords,iv.u_projection_tile_mercator_coords),t.set(r.clippingPlane,iv.u_projection_clipping_plane),t[iv.u_projection_transition]=r.projectionTransition,e.pendingWords[iv.u_projection_clip_antimeridian]=+!!r.clipAntimeridian,e.upload()}function xoe(e){return new F2(e,Qg.TerrainUBO,ZM)}function boe(e,r){let t=e.pending;t.set(r.u_terrain_matrix,ey.u_terrain_matrix),t.set(r.u_terrain_unpack,ey.u_terrain_unpack),t[ey.u_terrain_dim]=r.u_terrain_dim,t[ey.u_terrain_exaggeration]=r.u_terrain_exaggeration,e.upload()}function nM(e){let r=[];for(let t of e){if(t===null)continue;let i=t.split(" ");r.push(i.pop())}return r}function woe(e,r){let t=new Set([e.INT,e.INT_VEC2,e.INT_VEC3,e.INT_VEC4,e.UNSIGNED_INT,e.UNSIGNED_INT_VEC2,e.UNSIGNED_INT_VEC3,e.UNSIGNED_INT_VEC4]),i=new Set,a=e.getProgramParameter(r,e.ACTIVE_ATTRIBUTES);for(let o=0;o<a;o++){let s=e.getActiveAttrib(r,o);s&&t.has(s.type)&&i.add(s.name)}return i}function Mz(e,r,t){let i=1/Cf(t,1,r.transform.tileZoom),a=2**t.tileID.overscaledZ,o=t.tileSize*2**r.transform.tileZoom/a,s=o*(t.tileID.canonical.x+t.tileID.wrap*a),l=o*t.tileID.canonical.y;return{u_image:0,u_texsize:t.imageAtlasTexture.size,u_scale:[i,e.fromScale,e.toScale],u_fade:e.t,u_pixel_coord_upper:[s>>16,l>>16],u_pixel_coord_lower:[s&65535,l&65535]}}function Toe(e,r,t,i){let a=t.patternAtlas.getPattern(e.from.toString()),o=t.patternAtlas.getPattern(e.to.toString()),{width:s,height:l}=t.patternAtlas.getPixelSize(),n=2**i.tileID.overscaledZ,u=i.tileSize*2**t.transform.tileZoom/n,c=u*(i.tileID.canonical.x+i.tileID.wrap*n),f=u*i.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:a.tl,u_pattern_br_a:a.br,u_pattern_tl_b:o.tl,u_pattern_br_b:o.br,u_texsize:[s,l],u_mix:r.t,u_pattern_size_a:a.displaySize,u_pattern_size_b:o.displaySize,u_scale_a:r.fromScale,u_scale_b:r.toScale,u_tile_units_to_pixels:1/Cf(i,1,t.transform.tileZoom),u_pixel_coord_upper:[c>>16,f>>16],u_pixel_coord_lower:[c&65535,f&65535]}}function Aoe(e,r){let t=2**r.canonical.z,i=r.canonical.y;return[new Qo(0,i/t).toLngLat().lat,new Qo(0,(i+1)/t).toLngLat().lat]}function oM(e,r){return 1/Cf(e,1,r.tileZoom)}function Sz(e,r,t){return Op(e.transform,r,t.paint.get("line-translate"),t.paint.get("line-translate-anchor"))}function Moe(e){return new F2(e,Qg.FrameUBO,nS)}function Soe(e,r){let t=e.pending,{transform:i}=r,a=r.context.gl;t[pf.u_units_to_pixels]=1/i.pixelsToGLUnits[0],t[pf.u_units_to_pixels+1]=1/i.pixelsToGLUnits[1],t[pf.u_world_size]=a.drawingBufferWidth,t[pf.u_world_size+1]=a.drawingBufferHeight,t[pf.u_camera_to_center_distance]=i.cameraToCenterDistance,t[pf.u_symbol_fade_change]=r.options.fadeDuration?r.symbolFadeChange:1,t[pf.u_aspect_ratio]=i.width/i.height,t[pf.u_device_pixel_ratio]=r.pixelRatio,t[pf.u_viewport_size]=i.width,t[pf.u_viewport_size+1]=i.height,t[pf.u_pixel_extrude_scale]=1/i.width,t[pf.u_pixel_extrude_scale+1]=1/i.height,t[pf.u_pitch]=i.pitch/360*2*Math.PI,e.upload()}function Ez(e,r,t,i,a){var o,s;let l=e.context,n=e.transform,u=l.gl,c=e.useProgram("collisionBox"),f=[],h=0,d=0;for(let v of i){let x=r.getTile(v).getBucket(t);if(!x)continue;let S=a?x.textCollisionBox:x.iconCollisionBox,M=x.collisionCircleArray;M.length>0&&(f.push({circleArray:M,circleOffset:d,coord:v}),h+=M.length/4,d=h),S&&c.draw(l,u.LINES,Lo.disabled,es.disabled,e.colorModeForRenderPass(),Ko.disabled,null,(o=e.style.map.terrain)==null?void 0:o.getTerrainData(v),n.getProjectionData({overscaledTileID:v,applyGlobeMatrix:!0,applyTerrainMatrix:!0}),t.id,S.layoutVertexBuffer,S.indexBuffer,S.segments,null,e.transform.zoom,null,null,S.collisionVertexBuffer)}if(!a||!f.length)return;let p=e.useProgram("collisionCircle"),g=new xI;g.resize(h*4),g._trim();let m=0;for(let v of f)for(let x=0;x<v.circleArray.length/4;x++){let S=x*4,M=v.circleArray[S+0],C=v.circleArray[S+1],w=v.circleArray[S+2],k=v.circleArray[S+3];g.emplace(m++,M,C,w,k,0),g.emplace(m++,M,C,w,k,1),g.emplace(m++,M,C,w,k,2),g.emplace(m++,M,C,w,k,3)}(!z2||z2.length<h*2)&&(z2=Eoe(h));let y=l.createIndexBuffer(z2,!0),_=l.createVertexBuffer(g,RR.members,!0);for(let v of f)p.draw(l,u.TRIANGLES,Lo.disabled,es.disabled,e.colorModeForRenderPass(),Ko.disabled,null,(s=e.style.map.terrain)==null?void 0:s.getTerrainData(v.coord),null,t.id,_,y,Ks.simpleSegment(0,v.circleOffset*2,v.circleArray.length,v.circleArray.length/2),null,e.transform.zoom,null,null,null);_.destroy(),y.destroy()}function Eoe(e){let r=e*2,t=new wI;t.resize(r),t._trim();for(let i=0;i<r;i++){let a=i*6;t.uint16[a+0]=i*4+0,t.uint16[a+1]=i*4+1,t.uint16[a+2]=i*4+2,t.uint16[a+3]=i*4+2,t.uint16[a+4]=i*4+3,t.uint16[a+5]=i*4+0}return t}function koe(e,r,t,i,a,o){if(o.currentPass!=="translucent")return;let{isRenderingToTexture:s}=o,l=es.disabled,n=e.colorModeForRenderPass();(t._unevaluatedLayout.hasValue("text-variable-anchor")||t._unevaluatedLayout.hasValue("text-variable-anchor-offset"))&&Doe(i,e,t,r,t.layout.get("text-rotation-alignment"),t.layout.get("text-pitch-alignment"),t.paint.get("text-translate"),t.paint.get("text-translate-anchor"),a),t.paint.get("icon-opacity").constantOr(1)!==0&&kz(e,r,t,i,!1,t.paint.get("icon-translate"),t.paint.get("icon-translate-anchor"),t.layout.get("icon-rotation-alignment").constantOr("viewport"),t.layout.get("icon-pitch-alignment"),t.layout.get("icon-keep-upright"),l,n,s),t.paint.get("text-opacity").constantOr(1)!==0&&kz(e,r,t,i,!0,t.paint.get("text-translate"),t.paint.get("text-translate-anchor"),t.layout.get("text-rotation-alignment"),t.layout.get("text-pitch-alignment"),t.layout.get("text-keep-upright"),l,n,s),r.map.showCollisionBoxes&&(Ez(e,r,t,i,!0),Ez(e,r,t,i,!1))}function Coe(e,r,t,i,a,o){let{horizontalAlign:s,verticalAlign:l}=fx(e),n=-(s-.5)*r,u=-(l-.5)*t;return new Wr((n/a+i[0])*o,(u/a+i[1])*o)}function Doe(e,r,t,i,a,o,s,l,n){var u;let c=r.transform,f=r.style.map.terrain,h=a==="map",d=o==="map";for(let p of e){let g=i.getTile(p),m=g.getBucket(t);if(!((u=m?.text)!=null&&u.segments.get().length))continue;let y=m.textSizeData,_=dx(y,c.zoom),v=Cf(g,1,r.transform.zoom),x=WA(h,r.transform,v),S=t.layout.get("icon-text-fit")!=="none"&&m.hasIconData();if(_){let M=2**(c.zoom-g.tileID.overscaledZ),C=f?(w,k)=>f.getElevation(p,w,k):void 0;Foe(m,h,d,n,c,x,M,_,S,Op(c,g,s,l),p.toUnwrapped(),C,t.layout.get("symbol-height-anchor")==="ground")}}}function Loe(e,r,t,i,a,o){let s=r.tileAnchorPoint.add(new Wr(r.translation[0],r.translation[1]));if(r.pitchWithMap){let l=i.mult(o);t||(l=l.rotate(-a));let n=s.add(l);return XA(n.x,n.y,r.pitchedLabelPlaneMatrix,Q0(r,n.x,n.y)).point}if(t){let l=ev(r.tileAnchorPoint.x+1,r.tileAnchorPoint.y,r).point.sub(e),n=Math.atan(l.y/l.x)+(l.x<0?Math.PI:0);return e.add(i.rotate(n))}return e.add(i)}function Foe(e,r,t,i,a,o,s,l,n,u,c,f,h){let d=e.text.placedSymbolArray,p=e.text.dynamicLayoutVertexArray,g=e.icon.dynamicLayoutVertexArray,m={};p.clear();for(let y=0;y<d.length;y++){let _=d.get(y),v=e.allowVerticalPlacement&&!_.placedOrientation,x=!_.hidden&&_.crossTileID&&!v?i[_.crossTileID]:null;if(!x)Om(_.numGlyphs,p);else{let S=new Wr(_.anchorX,_.anchorY),M={getElevation:f,heightOffset:_.heightOffset,heightAnchorGround:h,width:a.width,height:a.height,pitchedLabelPlaneMatrix:o,lineVertexArray:null,pitchWithMap:t,transform:a,projectionCache:null,tileAnchorPoint:S,translation:u,unwrappedTileID:c},C=t?oz(S.x,S.y,M):ev(S.x,S.y,M),w=tz(a.cameraToCenterDistance,C.signedDistanceFromCamera),k=G6(e.textSizeData,l,_)*w/24;t&&(k*=e.tilePixelRatio/s);let{width:A,height:b,anchor:E,textOffset:T,textBoxScale:F}=x,D=Coe(E,A,b,T,F,k),R=a.getPitchedTextCorrection(S.x+u[0],S.y+u[1],c),P=Loe(C.point,M,r,D,-a.bearingInRadians,R),z=e.allowVerticalPlacement&&_.placedOrientation===2?Math.PI/2:0;for(let I=0;I<_.numGlyphs;I++)_x(p,P,z);n&&_.associatedIconIndex>=0&&(m[_.associatedIconIndex]={shiftedAnchor:P,angle:z})}}if(n){g.clear();let y=e.icon.placedSymbolArray;for(let _=0;_<y.length;_++){let v=y.get(_);if(v.hidden)Om(v.numGlyphs,g);else{let x=m[_];if(!x)Om(v.numGlyphs,g);else for(let S=0;S<v.numGlyphs;S++)_x(g,x.shiftedAnchor,x.angle)}}e.icon.dynamicLayoutVertexBuffer.updateData(g)}e.text.dynamicLayoutVertexBuffer.updateData(p)}function Poe(e,r,t){return t.iconsInText&&r?"symbolTextAndIcon":e?"symbolSDF":"symbolIcon"}function kz(e,r,t,i,a,o,s,l,n,u,c,f,h){var d,p;let g=e.context,m=g.gl,y=e.transform,_=l==="map",v=n==="map",x=l!=="viewport"&&t.layout.get("symbol-placement")!=="point",S=_&&!v&&!x,M=!t.layout.get("symbol-sort-key").isConstant(),C=!1,w=e.getDepthModeForSublayer(0,Lo.ReadOnly),k=t._unevaluatedLayout.hasValue("text-variable-anchor")||t._unevaluatedLayout.hasValue("text-variable-anchor-offset"),A=[],b=y.getCircleRadiusCorrection();for(let F of i){let D=r.getTile(F),R=D.getBucket(t);if(!R)continue;let P=a?R.text:R.icon;if(!P?.segments.get().length||!P.hasVisibleVertices)continue;let z=P.programConfigurations.get(t.id),I=a||R.sdfIcons,L=a?R.textSizeData:R.iconSizeData,B=v||y.pitch!==0,O=e.useProgram(Poe(I,a,R),z),G=dx(L,y.zoom),W=(d=e.style.map.terrain)==null?void 0:d.getTerrainData(F),X,Z=[0,0],J,N,H=null,$;if(a){if(J=D.glyphAtlasTexture,N=m.LINEAR,X=D.glyphAtlasTexture.size,R.iconsInText){Z=D.imageAtlasTexture.size,H=D.imageAtlasTexture;let ae=L.kind==="composite"||L.kind==="camera";$=B||e.options.rotating||e.options.zooming||ae?m.LINEAR:m.NEAREST}}else{let ae=t.layout.get("icon-size").constantOr(0)!==1||R.iconsNeedLinear;J=D.imageAtlasTexture,N=I||e.options.rotating||e.options.zooming||ae||B?m.LINEAR:m.NEAREST,X=D.imageAtlasTexture.size}let U=Cf(D,1,e.transform.zoom),V=WA(_,e.transform,U),j=Qne(v,_,e.transform,U),q=Op(y,D,o,s),Y=y.getProjectionData({overscaledTileID:F,applyGlobeMatrix:!h,applyTerrainMatrix:!0}),K=k&&R.hasTextData(),te=t.layout.get("icon-text-fit")!=="none"&&K&&R.hasIconData(),ne=t._unevaluatedLayout.hasValue("icon-offset"),se=t.layout.get("symbol-height-anchor")==="ground";if(x){let ae=Rp();Zne(ae,V);let ee=e.style.map.terrain?(ie,Q)=>e.style.map.terrain.getElevation(F,ie,Q):void 0;toe(R,e,a,V,ae,v,u,t.layout.get("text-rotation-alignment")==="map",F.toUnwrapped(),y.width,y.height,q,ee)}let le=a&&k||te,ce=v?V:e.transform.clipSpaceToPixelsMatrix,pe=x||le?jN:ce,xe=I&&t.paint.get(a?"text-halo-width":"icon-halo-width").constantOr(1)!==0,ye;ye=I?R.iconsInText?$O(L.kind,G,S,v,x,le,e,pe,j,q,X,Z,b,ne,se):iS(L.kind,G,S,v,x,le,e,pe,j,q,a,X,xe,b,ne,se):rS(L.kind,G,S,v,x,le,e,pe,j,q,a,X,b,ne,se);let fe={program:O,buffers:P,uniformValues:ye,projectionData:Y,atlasTexture:J,atlasTextureIcon:H,atlasInterpolation:N,atlasInterpolationIcon:$,isSDF:I,hasHalo:xe};if(M&&R.canOverlap){C=!0;let ae=P.segments.get();for(let ee of ae)A.push({segments:new Ks([ee]),sortKey:ee.sortKey,state:fe,terrainData:W})}else A.push({segments:P.segments,sortKey:0,state:fe,terrainData:W})}C&&A.sort((F,D)=>F.sortKey-D.sortKey);let E=(p=t.paint.get(a?"text-halo-width":"icon-halo-width").constantOr(null))!=null?p:1/0,T=t.layout.get("text-letter-spacing").constantOr(0)*24<0||E>1;for(let F of A){let D=F.state;g.activeTexture.set(m.TEXTURE0),D.atlasTexture.bind(D.atlasInterpolation,m.CLAMP_TO_EDGE),D.atlasTextureIcon&&(g.activeTexture.set(m.TEXTURE1),D.atlasTextureIcon&&D.atlasTextureIcon.bind(D.atlasInterpolationIcon,m.CLAMP_TO_EDGE));let R=D.isSDF&&D.hasHalo;if(R){let P=D.uniformValues;P.u_is_halo=1,T&&(P.u_is_plain=0,Cz(D.buffers,F.segments,t,e,D.program,w,c,f,P,D.projectionData,F.terrainData),P.u_is_halo=0,P.u_is_plain=1)}Cz(D.buffers,F.segments,t,e,D.program,w,c,f,D.uniformValues,D.projectionData,F.terrainData),R&&!T&&(D.uniformValues.u_is_halo=0)}}function Cz(e,r,t,i,a,o,s,l,n,u,c){let f=i.context,h=f.gl;a.draw(f,h.TRIANGLES,o,s,l,Ko.backCCW,n,c,u,t.id,e.layoutVertexBuffer,e.indexBuffer,r,t.paint,i.transform.zoom,e.programConfigurations.get(t.id),e.dynamicLayoutVertexBuffer,e.opacityVertexBuffer)}function Ioe(e,r,t,i,a){var o;if(a.currentPass!=="translucent")return;let{isRenderingToTexture:s}=a,l=t.paint.get("circle-opacity"),n=t.paint.get("circle-stroke-width"),u=t.paint.get("circle-stroke-opacity"),c=!t.layout.get("circle-sort-key").isConstant();if(l.constantOr(1)===0&&(n.constantOr(1)===0||u.constantOr(1)===0))return;let f=e.context,h=f.gl,d=e.transform,p=e.getDepthModeForSublayer(0,Lo.ReadOnly),g=es.disabled,m=e.colorModeForRenderPass(),y=[],_=d.getCircleRadiusCorrection();for(let v of i){let x=r.getTile(v),S=x.getBucket(t);if(!S)continue;let M=t.paint.get("circle-translate"),C=t.paint.get("circle-translate-anchor"),w=Op(d,x,M,C),k=S.programConfigurations.get(t.id),A=e.useProgram("circle",k),b=S.layoutVertexBuffer,E=S.indexBuffer,T=(o=e.style.map.terrain)==null?void 0:o.getTerrainData(v),F={programConfiguration:k,program:A,layoutVertexBuffer:b,indexBuffer:E,uniformValues:wO(e,x,t,w,_),terrainData:T,projectionData:d.getProjectionData({overscaledTileID:v,applyGlobeMatrix:!s,applyTerrainMatrix:!0})};if(c){let D=S.segments.get();for(let R of D)y.push({segments:new Ks([R]),sortKey:R.sortKey,state:F})}else y.push({segments:S.segments,sortKey:0,state:F})}c&&y.sort((v,x)=>v.sortKey-x.sortKey);for(let v of y){let{programConfiguration:x,program:S,layoutVertexBuffer:M,indexBuffer:C,uniformValues:w,terrainData:k,projectionData:A}=v.state,b=v.segments;S.draw(f,h.TRIANGLES,p,g,m,Ko.backCCW,w,k,A,t.id,M,C,b,t.paint,e.transform.zoom,x)}}function Roe(e,r,t,i,a){if(t.paint.get("heatmap-opacity")===0)return;let o=e.context,{isRenderingToTexture:s,isRenderingGlobe:l}=a;if(e.style.map.terrain){for(let n of i){let u=r.getTile(n);r.hasRenderableParent(n)||(a.currentPass==="offscreen"?Ooe(e,u,t,n,l):a.currentPass==="translucent"&&Noe(e,t,n,s,l))}o.viewport.set([0,0,e.width,e.height])}else a.currentPass==="offscreen"?zoe(e,r,t,i):a.currentPass==="translucent"&&Boe(e,t)}function zoe(e,r,t,i){let a=e.context,o=a.gl,s=e.transform,l=es.disabled,n=new cl([o.ONE,o.ONE],ro.transparent,[!0,!0,!0,!0]);joe(a,e,t),a.clear({color:ro.transparent});for(let u of i){if(r.hasRenderableParent(u))continue;let c=r.getTile(u),f=c.getBucket(t);if(!f)continue;let h=f.programConfigurations.get(t.id),d=e.useProgram("heatmap",h),p=s.getProjectionData({overscaledTileID:u,applyGlobeMatrix:!0,applyTerrainMatrix:!1}),g=s.getCircleRadiusCorrection();d.draw(a,o.TRIANGLES,Lo.disabled,l,n,Ko.backCCW,eS(c,s.zoom,t.paint.get("heatmap-intensity"),g),null,p,t.id,f.layoutVertexBuffer,f.indexBuffer,f.segments,t.paint,s.zoom,h)}a.viewport.set([0,0,e.width,e.height])}function Boe(e,r){let t=e.context,i=t.gl;t.setColorMode(e.colorModeForRenderPass());let a=r.heatmapFbos.get(Dg);a&&(t.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),t.activeTexture.set(i.TEXTURE1),Lz(t,r).bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram("heatmapTexture").draw(t,i.TRIANGLES,Lo.disabled,es.disabled,e.colorModeForRenderPass(),Ko.disabled,tS(e,r,0,1),null,null,r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom))}function Ooe(e,r,t,i,a){let o=e.context,s=o.gl,l=es.disabled,n=new cl([s.ONE,s.ONE],ro.transparent,[!0,!0,!0,!0]),u=r.getBucket(t);if(!u)return;let c=i.key,f=t.heatmapFbos.get(c);f||(f=Dz(o,r.tileSize,r.tileSize),t.heatmapFbos.set(c,f)),o.bindFramebuffer.set(f.framebuffer),o.viewport.set([0,0,r.tileSize,r.tileSize]),o.clear({color:ro.transparent});let h=u.programConfigurations.get(t.id),d=e.useProgram("heatmap",h,!a),p=e.transform.getProjectionData({overscaledTileID:r.tileID,applyGlobeMatrix:!0,applyTerrainMatrix:!0}),g=e.style.map.terrain.getTerrainData(i);d.draw(o,s.TRIANGLES,Lo.disabled,l,n,Ko.disabled,eS(r,e.transform.zoom,t.paint.get("heatmap-intensity"),1),g,p,t.id,u.layoutVertexBuffer,u.indexBuffer,u.segments,t.paint,e.transform.zoom,h)}function Noe(e,r,t,i,a){let o=e.context,s=o.gl,l=e.transform;o.setColorMode(e.colorModeForRenderPass());let n=Lz(o,r),u=t.key,c=r.heatmapFbos.get(u);if(!c)return;o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,c.colorAttachment.get()),o.activeTexture.set(s.TEXTURE1),n.bind(s.LINEAR,s.CLAMP_TO_EDGE);let f=l.getProjectionData({overscaledTileID:t,applyTerrainMatrix:a,applyGlobeMatrix:!i});e.useProgram("heatmapTexture").draw(o,s.TRIANGLES,Lo.disabled,es.disabled,e.colorModeForRenderPass(),Ko.disabled,tS(e,r,0,1),null,f,r.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments,r.paint,l.zoom),c.destroy(),r.heatmapFbos.delete(u)}function joe(e,r,t){let i=e.gl;e.activeTexture.set(i.TEXTURE1),e.viewport.set([0,0,r.width/4,r.height/4]);let a=t.heatmapFbos.get(Dg);a?(i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),e.bindFramebuffer.set(a.framebuffer)):(a=Dz(e,r.width/4,r.height/4),t.heatmapFbos.set(Dg,a))}function Dz(e,r,t){let i=e.gl,a=i.createTexture();i.bindTexture(i.TEXTURE_2D,a),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texStorage2D(i.TEXTURE_2D,1,i.RGBA16F,r,t);let o=e.createFramebuffer(r,t,!1,!1);return o.colorAttachment.set(a),o}function Lz(e,r){return r.colorRampTexture||(r.colorRampTexture=new jl(e,r.colorRamp,e.gl.RGBA)),r.colorRampTexture}function Fz(e,r,t,i){let a=e.context,o=a.bindFramebuffer.get(),s=a.viewport.get(),[,,l,n]=s;return Uoe(e,l,n),a.viewport.set([0,0,l,n]),a.clear({color:ro.transparent,depth:1,stencil:0}),e.currentStencilSource=void 0,e.renderTileClippingMasks(r,t,i),{compositeTarget:o,compositeViewport:s}}function Uoe(e,r,t){let i=e.context.gl;if(!e.layerOpacityFbo){let o=e.context.createFramebuffer(r,t,!0,!0),s=i.createTexture();i.bindTexture(i.TEXTURE_2D,s),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,r,t,0,i.RGBA,i.UNSIGNED_BYTE,null),o.colorAttachment.set(s),o.depthAttachment.set(e.context.createRenderbuffer(i.DEPTH_STENCIL,r,t)),e.layerOpacityFbo=o,e.context.bindFramebuffer.set(e.layerOpacityFbo.framebuffer);return}if(e.layerOpacityFbo.width===r&&e.layerOpacityFbo.height===t){e.context.bindFramebuffer.set(e.layerOpacityFbo.framebuffer);return}let a=e.layerOpacityFbo;i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,r,t,0,i.RGBA,i.UNSIGNED_BYTE,null),e.context.bindRenderbuffer.set(a.depthAttachment.get()),i.renderbufferStorage(i.RENDERBUFFER,i.DEPTH_STENCIL,r,t),e.context.bindRenderbuffer.set(null),a.width=r,a.height=t,e.context.bindFramebuffer.set(a.framebuffer)}function Pz(e,r,t,i){let a=e.context,o=a.gl;a.bindFramebuffer.set(t.compositeTarget),a.viewport.set(t.compositeViewport),a.activeTexture.set(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,e.layerOpacityFbo.colorAttachment.get()),e.useProgram("layerOpacity").draw(a,o.TRIANGLES,Lo.disabled,es.disabled,e.colorModeForRenderPass(),Ko.disabled,qO(r,0),null,null,i.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,i.paint,e.transform.zoom),e.currentStencilSource=void 0}function Iz(e,r,t,i,a,o,s,l){let n=256;if(a.stepInterpolant){let u=r.getSource().maxzoom,c=s.canonical.z===u?Math.ceil(1<<e.transform.maxZoom-s.canonical.z):1,f=o.maxLineLength/Bi*1024*c;n=to(iJ(f),256,t.maxTextureSize)}return l.gradient=NL({expression:a.gradientExpression(),evaluationKey:"lineProgress",resolution:n,image:l.gradient||void 0,clips:o.lineClipsArray}),l.texture?l.texture.update(l.gradient):l.texture=new jl(t,l.gradient,i.RGBA),l.version=a.gradientVersion,l.texture}function qoe(e,r,t,i,a){e.activeTexture.set(r.TEXTURE0),t.imageAtlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE),i.updatePaintBuffers(a)}function Voe(e,r,t,i,a,o){(a||e.lineAtlas.dirty)&&(r.activeTexture.set(t.TEXTURE0),e.lineAtlas.bind(r)),i.updatePaintBuffers(o)}function Goe(e,r,t,i,a,o,s){let l=o.gradients[a.id],n=l.texture;a.gradientVersion!==l.version&&(n=Iz(e,r,t,i,a,o,s,l)),t.activeTexture.set(i.TEXTURE0),n.bind(a.stepInterpolant?i.NEAREST:i.LINEAR,i.CLAMP_TO_EDGE)}function Hoe(e,r,t,i,a,o,s,l,n){let u=o.gradients[a.id],c=u.texture;a.gradientVersion!==u.version&&(c=Iz(e,r,t,i,a,o,s,u)),t.activeTexture.set(i.TEXTURE0),c.bind(a.stepInterpolant?i.NEAREST:i.LINEAR,i.CLAMP_TO_EDGE),t.activeTexture.set(i.TEXTURE1),e.lineAtlas.bind(t),l.updatePaintBuffers(n)}function $oe(e,r,t,i,a){if(a.currentPass!=="translucent")return;let o=t.paint.get("line-opacity"),s=t.paint.get("line-width"),l=t.paint.get("line-layer-opacity");if(o.constantOr(1)===0||s.constantOr(1)===0||l===0)return;let n=!!e.style.map.terrain;if(l<1){let u=Fz(e,t,i,n);Rz(e,r,t,i,a,n),Pz(e,l,u,t);return}Rz(e,r,t,i,a,n)}function Rz(e,r,t,i,a,o){let{isRenderingToTexture:s}=a,l=e.getDepthModeForSublayer(0,Lo.ReadOnly),n=e.colorModeForRenderPass(),u=t.paint.get("line-dasharray"),c=u.constantOr(1),f=t.paint.get("line-pattern"),h=f.constantOr(1),d=t.paint.get("line-gradient"),p=t.getCrossfadeParameters(),g;g=h?"linePattern":c&&d?"lineGradientSDF":c?"lineSDF":d?"lineGradient":"line";let m=e.context,y=m.gl,_=e.transform,v=!0;for(let x of i){let S=r.getTile(x);if(h&&!S.patternsLoaded())continue;let M=S.getBucket(t);if(!M)continue;let C=M.programConfigurations.get(t.id),w=e.context.program.get(),k=e.useProgram(g,C),A=v||k.program!==w,b=o?e.getTerrainDataForTile(x,s):null,E=f.constantOr(null),T=u?.constantOr(null);if(E&&S.imageAtlas){let z=S.imageAtlas,I=z.patternPositions[E.to.toString()],L=z.patternPositions[E.from.toString()];I&&L&&C.setConstantPatternPositions(I,L)}else if(T){let z=t.layout.get("line-cap").constantOr(null)==="round",I=e.lineAtlas.getDash(T.to,z),L=e.lineAtlas.getDash(T.from,z);C.setConstantDashPositions(I,L)}let F=_.getProjectionData({overscaledTileID:x,applyGlobeMatrix:!s,applyTerrainMatrix:!0}),D=_.getPixelScale(),R;h?(R=OO(e,S,t,D,p),qoe(m,y,S,C,p)):c&&d?(R=jO(e,S,t,D,p,M.lineClipsArray.length),Hoe(e,r,m,y,t,M,x,C,p)):c?(R=NO(e,S,t,D,p),Voe(e,m,y,C,A,p)):d?(R=BO(e,S,t,D,M.lineClipsArray.length),Goe(e,r,m,y,t,M,x)):R=ty(e,S,t,D);let P=e.stencilModeForClipping(x);k.draw(m,y.TRIANGLES,l,P,n,Ko.disabled,R,b,F,t.id,M.layoutVertexBuffer,M.indexBuffer,M.segments,t.paint,e.transform.zoom,C,M.layoutVertexBuffer2),v=!1}}function zz(e,r,t,i,a){if(!t||!i?.imageAtlas)return;let o=i.imageAtlas.patternPositions,s=o[t.to.toString()],l=o[t.from.toString()];if(!s&&l&&(s=l),!l&&s&&(l=s),!s||!l){let n=a.getPaintProperty(r);s=o[n],l=o[n]}s&&l&&e.setConstantPatternPositions(s,l)}function Woe(e,r,t,i,a){let o=t.paint.get("fill-color"),s=t.paint.get("fill-opacity"),l=t.paint.get("fill-layer-opacity");if(s.constantOr(1)===0||l===0)return;if(l<1){if(a.currentPass!=="translucent")return;let c=Fz(e,t,i,!!e.style.map.terrain);Bz(e,r,t,i,a),Pz(e,l,c,t);return}let n=t.paint.get("fill-pattern"),u=e.opaquePassEnabledForLayer()&&!n.constantOr(1)&&o.constantOr(ro.transparent).a===1&&s.constantOr(0)===1;if(u&&a.currentPass==="opaque"){let{isRenderingToTexture:c}=a,f=e.colorModeForRenderPass();sM(e,r,t,i,e.getDepthModeForSublayer(1,Lo.ReadWrite),f,!1,c);return}if(u&&a.currentPass==="translucent"){Oz(e,r,t,i,a);return}a.currentPass==="translucent"&&Bz(e,r,t,i,a)}function Bz(e,r,t,i,a){let{isRenderingToTexture:o}=a,s=e.colorModeForRenderPass();sM(e,r,t,i,e.getDepthModeForSublayer(1,Lo.ReadOnly),s,!1,o),Oz(e,r,t,i,a)}function Oz(e,r,t,i,a){if(!t.paint.get("fill-antialias"))return;let{isRenderingToTexture:o}=a,s=e.colorModeForRenderPass();sM(e,r,t,i,e.getDepthModeForSublayer(t.getPaintProperty("fill-outline-color")?2:0,Lo.ReadOnly),s,!0,o)}function sM(e,r,t,i,a,o,s,l){var n;let u=e.context.gl,c="fill-pattern",f=t.paint.get(c),h=f?.constantOr(1),d=t.getCrossfadeParameters(),p,g,m,y,_,v=e.transform,x=t.paint.get("fill-translate"),S=t.paint.get("fill-translate-anchor");s?(g=h&&!t.getPaintProperty("fill-outline-color")?"fillOutlinePattern":"fillOutline",p=u.LINES):(g=h?"fillPattern":"fill",p=u.TRIANGLES);let M=f.constantOr(null);for(let C of i){let w=r.getTile(C);if(h&&!w.patternsLoaded())continue;let k=w.getBucket(t);if(!k)continue;let A=(n=k.sdfPatterns[t.id])!=null?n:!1,b=k.programConfigurations.get(t.id),E=e.useProgram(g,b),T=e.getTerrainDataForTile(C,l);h&&(e.context.activeTexture.set(u.TEXTURE0),w.imageAtlasTexture.bind(u.LINEAR,u.CLAMP_TO_EDGE),b.updatePaintBuffers(d)),zz(b,c,M,w,t);let F=v.getProjectionData({overscaledTileID:C,applyGlobeMatrix:!l,applyTerrainMatrix:!0}),D=Op(v,w,x,S);s?(y=k.indexBuffer2,_=k.segments2,m=g==="fillOutlinePattern"&&h?xO(e,d,w,D,A):_O(D)):(y=k.indexBuffer,_=k.segments,m=h?JM(e,d,w,D,A):yO(D));let R=e.stencilModeForClipping(C);E.draw(e.context,p,a,R,o,Ko.backCCW,m,T,F,t.id,k.layoutVertexBuffer,y,_,t.paint,e.transform.zoom,b)}}function Yoe(e,r,t,i,a){let o=t.paint.get("fill-extrusion-opacity");if(o===0)return;let{isRenderingToTexture:s}=a;if(a.currentPass==="translucent"){let l=new Lo(e.context.gl.LEQUAL,Lo.ReadWrite,a.depthRangeFor3D);if(o===1&&!t.paint.get("fill-extrusion-pattern").constantOr(1)){let n=e.colorModeForRenderPass();lM(e,r,t,i,l,es.disabled,n,s)}else lM(e,r,t,i,l,es.disabled,cl.disabled,s),lM(e,r,t,i,l,e.stencilModeFor3D(),e.colorModeForRenderPass(),s)}}function lM(e,r,t,i,a,o,s,l){var n;let u=e.context,c=u.gl,f="fill-extrusion-pattern",h=t.paint.get(f),d=h.constantOr(1),p=t.getCrossfadeParameters(),g=t.paint.get("fill-extrusion-opacity"),m=h.constantOr(null),y=e.transform;for(let _ of i){let v=r.getTile(_),x=v.getBucket(t);if(!x)continue;let S=(n=e.style.map.terrain)==null?void 0:n.getTerrainData(_),M=x.programConfigurations.get(t.id),C=e.useProgram(d?"fillExtrusionPattern":"fillExtrusion",M);d&&(e.context.activeTexture.set(c.TEXTURE0),v.imageAtlasTexture.bind(c.LINEAR,c.CLAMP_TO_EDGE),M.updatePaintBuffers(p));let w=y.getProjectionData({overscaledTileID:_,applyGlobeMatrix:!l,applyTerrainMatrix:!0});zz(M,f,m,v,t);let k=Op(y,v,t.paint.get("fill-extrusion-translate"),t.paint.get("fill-extrusion-translate-anchor")),A=t.paint.get("fill-extrusion-vertical-gradient"),b=d?dO(e,A,g,k,_,p,v):KM(e,A,g,k);C.draw(u,u.gl.TRIANGLES,a,o,s,Ko.backCCW,b,S,w,t.id,x.layoutVertexBuffer,x.indexBuffer,x.segments,t.paint,e.transform.zoom,M,e.style.map.terrain&&x.centroidVertexBuffer)}}function Xoe(e,r,t,i,a){if(a.currentPass!=="offscreen"&&a.currentPass!=="translucent")return;let{isRenderingToTexture:o}=a,s=e.context,l=e.style.projection.useSubdivision,n=e.getDepthModeForSublayer(0,Lo.ReadOnly),u=e.colorModeForRenderPass();if(a.currentPass==="offscreen")Zoe(e,r,i,t,n,es.disabled,u),s.viewport.set([0,0,e.width,e.height]);else if(a.currentPass==="translucent")if(l){let[c,f,h]=e.stencilConfigForOverlapTwoPass(i);uM(e,r,t,h,c,n,u,!1,o),uM(e,r,t,h,f,n,u,!0,o)}else{let[c,f]=e.getStencilConfigForOverlapAndUpdateStencilID(i);uM(e,r,t,f,c,n,u,!1,o)}}function uM(e,r,t,i,a,o,s,l,n){let u=e.style.projection,c=e.context,f=e.transform,h=c.gl,d=[`#define NUM_ILLUMINATION_SOURCES ${t.paint.get("hillshade-highlight-color").values.length}`],p=e.useProgram("hillshade",null,!1,d),g=!e.options.moving;for(let m of i){let y=r.getTile(m),_=y.fbo;if(!_)continue;let v=u.getMeshFromTileID(c,m.canonical,l,!0,"raster"),x=e.getTerrainDataForTile(m,n);c.activeTexture.set(h.TEXTURE0),h.bindTexture(h.TEXTURE_2D,_.colorAttachment.get());let S=f.getProjectionData({overscaledTileID:m,aligned:g,applyGlobeMatrix:!n,applyTerrainMatrix:!0});p.draw(c,h.TRIANGLES,o,a[m.overscaledZ],s,Ko.backCCW,kO(e,y,t),x,S,t.id,v.vertexBuffer,v.indexBuffer,v.segments)}}function Zoe(e,r,t,i,a,o,s){let l=e.context,n=l.gl,u=i.paint.get("resampling")==="nearest"?n.NEAREST:n.LINEAR;for(let c of t){let f=r.getTile(c),h=f.dem;if(!h?.data||!f.needsHillshadePrepare)continue;let d=h.dim+2,p=h.stride,g=h.getPixels();if(l.activeTexture.set(n.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),f.demTexture||(f.demTexture=e.getTileTexture(p)),f.demTexture){let y=f.demTexture;y.update(g,{premultiply:!1}),y.bind(n.NEAREST,n.CLAMP_TO_EDGE)}else f.demTexture=new jl(l,g,n.RGBA,{premultiply:!1}),f.demTexture.bind(n.NEAREST,n.CLAMP_TO_EDGE);l.activeTexture.set(n.TEXTURE0);let m=f.fbo;if(!m){let y=new jl(l,{width:d,height:d,data:null},n.RGBA);y.bind(u,n.CLAMP_TO_EDGE),m=f.fbo=l.createFramebuffer(d,d,!0,!1),m.colorAttachment.set(y.texture)}l.bindFramebuffer.set(m.framebuffer),l.viewport.set([0,0,d,d]),e.useProgram("hillshadePrepare").draw(l,n.TRIANGLES,a,o,s,Ko.disabled,CO(f.tileID,h),null,null,i.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),f.needsHillshadePrepare=!1}}function Koe(e,r,t,i,a){if(a.currentPass!=="translucent"||!i.length)return;let{isRenderingToTexture:o}=a,s=e.style.projection.useSubdivision,l=e.getDepthModeForSublayer(0,Lo.ReadOnly),n=e.colorModeForRenderPass();if(s){let[u,c,f]=e.stencilConfigForOverlapTwoPass(i);cM(e,r,t,f,u,l,n,!1,o),cM(e,r,t,f,c,l,n,!0,o)}else{let[u,c]=e.getStencilConfigForOverlapAndUpdateStencilID(i);cM(e,r,t,c,u,l,n,!1,o)}}function cM(e,r,t,i,a,o,s,l,n){var u;let c=e.style.projection,f=e.context,h=e.transform,d=f.gl,p=e.useProgram("colorRelief"),g=!e.options.moving,m=t.paint.get("resampling")==="nearest"?d.NEAREST:d.LINEAR,y=!0,_=0;for(let v of i){let x=r.getTile(v),S=x.dem;if(!S?.data)continue;if(y){B2||(B2=d.getParameter(d.MAX_TEXTURE_SIZE));let A=B2,{elevationTexture:b,colorTexture:E}=t.getColorRampTextures(f,A,S.getUnpackVector());f.activeTexture.set(d.TEXTURE1),b.bind(d.NEAREST,d.CLAMP_TO_EDGE),f.activeTexture.set(d.TEXTURE4),E.bind(d.LINEAR,d.CLAMP_TO_EDGE),y=!1,_=b.size[0]}let M=S.stride;f.activeTexture.set(d.TEXTURE0),(!x.demTexture||x.needsColorReliefPrepare)&&(f.pixelStoreUnpackPremultiplyAlpha.set(!1),x.demTexture||(x.demTexture=(u=e.getTileTexture(M))!=null?u:new jl(f,{width:M,height:M,data:null},d.RGBA)),x.demTexture.update(S.getPixels(),{premultiply:!1}),x.needsColorReliefPrepare=!1),x.demTexture.bind(m,d.CLAMP_TO_EDGE);let C=c.getMeshFromTileID(f,v.canonical,l,!0,"raster"),w=e.getTerrainDataForTile(v,n),k=h.getProjectionData({overscaledTileID:v,aligned:g,applyGlobeMatrix:!n,applyTerrainMatrix:!0});p.draw(f,d.TRIANGLES,o,a[v.overscaledZ],s,Ko.backCCW,LO(t,x.dem,_),w,k,t.id,C.vertexBuffer,C.indexBuffer,C.segments)}}function Joe(e,r,t,i,a){if(a.currentPass!=="translucent"||t.paint.get("raster-opacity")===0||!i.length)return;let{isRenderingToTexture:o}=a,s=r.getSource(),l=e.style.projection.useSubdivision;if(s instanceof rv)s2(e,r,t,i,null,!1,!1,s.tileCoords,s.imageWarp,s.flippedWindingOrder,o,s.getMesh(e.context,l));else if(l){let[n,u,c]=e.stencilConfigForOverlapTwoPass(i);s2(e,r,t,c,n,!1,!0,O2,tv,!1,o),s2(e,r,t,c,u,!0,!0,O2,tv,!1,o)}else{let[n,u]=e.getStencilConfigForOverlapAndUpdateStencilID(i);s2(e,r,t,u,n,!1,!0,O2,tv,!1,o)}}function s2(e,r,t,i,a,o,s,l,n,u=!1,c=!1,f=null){let h=i[i.length-1].overscaledZ,d=e.context,p=d.gl,g=e.useProgram("raster"),m=e.transform,y=e.style.projection,_=e.colorModeForRenderPass(),v=!e.options.moving,x=t.paint.get("raster-opacity"),S=t.paint.get("resampling")==="nearest"||t.paint.get("raster-resampling")==="nearest"?p.NEAREST:p.LINEAR,M=t.paint.get("raster-fade-duration"),C=!!e.style.map.terrain;for(let w of i){let k=e.getDepthModeForSublayer(w.overscaledZ-h,x===1?Lo.ReadWrite:Lo.ReadOnly,p.LESS),A=r.getTile(w);d.activeTexture.set(p.TEXTURE0),A.texture.bind(S,p.CLAMP_TO_EDGE,p.LINEAR_MIPMAP_NEAREST),d.activeTexture.set(p.TEXTURE1);let{parentTile:b,parentScaleBy:E,parentTopLeft:T,fadeValues:F}=Qoe(A,r,M,C);A.fadeOpacity=F.tileOpacity,b?(b.fadeOpacity=F.parentTileOpacity,b.texture.bind(S,p.CLAMP_TO_EDGE,p.LINEAR_MIPMAP_NEAREST)):A.texture.bind(S,p.CLAMP_TO_EDGE,p.LINEAR_MIPMAP_NEAREST),A.texture.useMipmap&&d.extTextureFilterAnisotropic&&e.transform.pitch>e.options.anisotropicFilterPitch&&p.texParameterf(p.TEXTURE_2D,d.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,d.extTextureFilterAnisotropicMax);let D=e.getTerrainDataForTile(w,c),R=m.getProjectionData({overscaledTileID:w,aligned:v,applyGlobeMatrix:!c,applyTerrainMatrix:!0}),P=vB(T,E,F.fadeMix,t,l,n),z=f??y.getMeshFromTileID(d,w.canonical,o,s,"raster"),I=a?a[w.overscaledZ]:es.disabled;g.draw(d,p.TRIANGLES,k,I,_,u?Ko.frontCCW:Ko.backCCW,P,D,R,t.id,z.vertexBuffer,z.indexBuffer,z.segments)}}function Qoe(e,r,t,i){let a={parentTile:null,parentScaleBy:1,parentTopLeft:[0,0],fadeValues:{tileOpacity:1,parentTileOpacity:1,fadeMix:{opacity:1,mix:0}}};if(t===0||i)return a;if(e.fadingParentID){let o=r.getLoadedTile(e.fadingParentID);if(!o)return a;let s=2**(o.tileID.overscaledZ-e.tileID.overscaledZ);return{parentTile:o,parentScaleBy:s,parentTopLeft:[e.tileID.canonical.x*s%1,e.tileID.canonical.y*s%1],fadeValues:ese(e,o,t)}}return e.selfFading?{parentTile:null,parentScaleBy:1,parentTopLeft:[0,0],fadeValues:tse(e,t)}:a}function ese(e,r,t){let i=hs(),a=(i-e.timeAdded)/t,o=(i-r.timeAdded)/t,s=e.fadingDirection===1,l=to(a,0,1),n=to(1-o,0,1),u=s?l:n;return{tileOpacity:u,parentTileOpacity:s?n:l,fadeMix:{opacity:1,mix:1-u}}}function tse(e,r){let t=(hs()-e.timeAdded)/r,i=to(t,0,1);return{tileOpacity:i,fadeMix:{opacity:i,mix:0}}}function rse(e,r,t,i,a){let o=t.paint.get("background-color"),s=t.paint.get("background-opacity");if(s===0)return;let{isRenderingToTexture:l}=a,n=e.context,u=n.gl,c=e.style.projection,f=e.transform,h=f.tileSize,d=t.paint.get("background-pattern");if(e.isPatternMissing(d))return;let p=!d&&o.a===1&&s===1&&e.opaquePassEnabledForLayer()?"opaque":"translucent";if(a.currentPass!==p)return;let g=es.disabled,m=e.getDepthModeForSublayer(0,p==="opaque"?Lo.ReadWrite:Lo.ReadOnly),y=e.colorModeForRenderPass(),_=e.useProgram(d?"backgroundPattern":"background"),v=i||Bm(f,{tileSize:h,terrain:e.style.map.terrain});d&&(n.activeTexture.set(u.TEXTURE0),e.patternAtlas.bind(e.context));let x=t.getCrossfadeParameters();for(let S of v){let M=f.getProjectionData({overscaledTileID:S,applyGlobeMatrix:!l,applyTerrainMatrix:!0}),C=d?ZO(s,e,d,{tileID:S,tileSize:h},x):XO(s,o),w=e.getTerrainDataForTile(S,l),k=c.getMeshFromTileID(n,S.canonical,!1,!0,"raster");_.draw(n,u.TRIANGLES,m,g,y,Ko.backCCW,C,w,M,t.id,k.vertexBuffer,k.indexBuffer,k.segments)}}function ise(e){let r=e.transform.padding;Nz(e,e.transform.height-(r.top||0),3,UN),Nz(e,r.bottom||0,3,qN),jz(e,r.left||0,3,VN),jz(e,e.transform.width-(r.right||0),3,GN);let t=e.transform.centerPoint;ase(e,t.x,e.transform.height-t.y,HN)}function ase(e,r,t,i){l2(e,r-1,t-10,2,20,i),l2(e,r-10,t-1,20,2,i)}function Nz(e,r,t,i){l2(e,0,r+t/2,e.transform.width,t,i)}function jz(e,r,t,i){l2(e,r-t/2,0,t,e.transform.height,i)}function l2(e,r,t,i,a,o){let s=e.context,l=s.gl;l.enable(l.SCISSOR_TEST),l.scissor(r*e.pixelRatio,t*e.pixelRatio,i*e.pixelRatio,a*e.pixelRatio),s.clear({color:o}),l.disable(l.SCISSOR_TEST)}function nse(e,r,t){for(let i of t)ose(e,r,i)}function ose(e,r,t){var i,a;let o=e.context,s=o.gl,l=e.useProgram("debug"),n=Lo.disabled,u=es.disabled,c=e.colorModeForRenderPass(),f="$debug",h=(i=e.style.map.terrain)==null?void 0:i.getTerrainData(t);o.activeTexture.set(s.TEXTURE0);let d=((a=r.getTileByID(t.key).latestRawTileData)==null?void 0:a.byteLength)||0,p=Math.floor(d/1024),g=r.getTile(t).tileSize,m=512/Math.min(g,512)*(t.overscaledZ/e.transform.zoom)*.5,y=t.canonical.toString();t.overscaledZ!==t.canonical.z&&(y+=` => ${t.overscaledZ}`),sse(e,`${y} ${p}kB`);let _=e.transform.getProjectionData({overscaledTileID:t,applyGlobeMatrix:!0,applyTerrainMatrix:!0});l.draw(o,s.TRIANGLES,n,u,cl.alphaBlended,Ko.disabled,QM(ro.transparent,m),null,_,f,e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments),l.draw(o,s.LINE_STRIP,n,u,c,Ko.disabled,QM(ro.red),h,_,f,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments)}function sse(e,r){e.initDebugOverlayCanvas();let t=e.debugOverlayCanvas,i=e.context.gl,a=e.debugOverlayCanvas.getContext("2d");a.clearRect(0,0,t.width,t.height),a.shadowColor="white",a.shadowBlur=2,a.lineWidth=1.5,a.strokeStyle="white",a.textBaseline="top",a.font="bold 36px Open Sans, sans-serif",a.fillText(r,5,5),a.strokeText(r,5,5),e.debugOverlayTexture.update(t),e.debugOverlayTexture.bind(i.LINEAR,i.CLAMP_TO_EDGE)}function lse(e,r){let t=null,i=Object.values(e._layers).flatMap(l=>l.source&&!l.isHidden(r)?[e.tileManagers[l.source]]:[]),a=i.filter(l=>l.getSource().type==="vector"),o=i.filter(l=>l.getSource().type!=="vector"),s=l=>{(!t||t.getSource().maxzoom<l.getSource().maxzoom)&&(t=l)};for(let l of a)s(l);if(!t)for(let l of o)s(l);return t}function use(e,r,t,i){let{isRenderingGlobe:a}=i,o=e.context,s=t.implementation,l=e.style.projection,n=e.transform,u=n.getProjectionDataForCustomLayer(a),c={farZ:n.farZ,nearZ:n.nearZ,fov:n.fov*Math.PI/180,modelViewProjectionMatrix:n.modelViewProjectionMatrix,projectionMatrix:n.projectionMatrix,shaderData:{variantName:l.shaderVariantName,vertexShaderPrelude:`const float PI = 3.141592653589793;
+uniform mat4 u_projection_matrix;
+${l.shaderPreludeCode.vertexSource}`,define:l.shaderDefine},defaultProjectionData:u,getProjectionData:h=>{var d;return n.getProjectionData({overscaledTileID:new Cu(h.tileID.canonical.z,(d=h.tileID.wrap)!=null?d:0,h.tileID.canonical.z,h.tileID.canonical.x,h.tileID.canonical.y),aligned:h.aligned,applyGlobeMatrix:h.applyGlobeMatrix,applyTerrainMatrix:h.applyTerrainMatrix})}},f=s.renderingMode?s.renderingMode:"2d";if(i.currentPass==="offscreen"){let h=s.prerender;h&&(e.setCustomLayerDefaults(),o.setColorMode(e.colorModeForRenderPass()),h.call(s,o.gl,c),o.setDirty(),e.setBaseState())}else if(i.currentPass==="translucent"){e.setCustomLayerDefaults(),o.setColorMode(e.colorModeForRenderPass()),o.setStencilMode(es.disabled);let h=f==="3d"?e.getDepthModeFor3D():e.getDepthModeForSublayer(0,Lo.ReadOnly);o.setDepthMode(h),s.render(o.gl,c),o.setDirty(),e.setBaseState(),o.bindFramebuffer.set(null)}}function cse(e,r){let t=e.context,i=t.gl,a=e.transform,o=cl.unblended,s=new Lo(i.LEQUAL,Lo.ReadWrite,[0,1]),l=r.tileManager.getRenderableTiles(),n=e.useProgram("terrainDepth");t.bindFramebuffer.set(r.getFramebuffer().framebuffer),t.viewport.set([0,0,e.width/devicePixelRatio,e.height/devicePixelRatio]),t.clear({color:ro.white,depth:1});for(let u of l){let c=r.getTerrainMesh(u.tileID),f=r.getTerrainData(u.tileID),h=a.getProjectionData({overscaledTileID:u.tileID,applyTerrainMatrix:!1,applyGlobeMatrix:!0}),d=lO(r.getSkirtLength(a.zoom));n.draw(t,i.TRIANGLES,s,es.disabled,o,Ko.backCCW,d,f,h,"terrain",c.vertexBuffer,c.indexBuffer,c.segments)}t.bindFramebuffer.set(null),t.viewport.set([0,0,e.width,e.height])}function fse(e,r,t,i){let{isRenderingGlobe:a}=i,o=e.context,s=o.gl,l=e.transform,n=e.colorModeForRenderPass(),u=e.getDepthModeFor3D(),c=e.useProgram("terrain");o.bindFramebuffer.set(null),o.viewport.set([0,0,e.width,e.height]);for(let f of t){let h=r.getTerrainMesh(f.tileID),d=e.renderToTexture.getTexture(f),p=r.getTerrainData(f.tileID);o.activeTexture.set(s.TEXTURE0),d.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_LINEAR);let g=r.getSkirtLength(l.zoom),m=l.calculateFogMatrix(f.tileID.toUnwrapped()),y=sO(g,m,e.style.sky,l.pitch,a),_=l.getProjectionData({overscaledTileID:f.tileID,applyTerrainMatrix:!1,applyGlobeMatrix:!0});c.draw(o,s.TRIANGLES,u,es.disabled,n,Ko.backCCW,y,p,_,"terrain",h.vertexBuffer,h.indexBuffer,h.segments)}}function Uz(e,r){if(!r.mesh){let t=new sp;t.emplaceBack(-1,-1),t.emplaceBack(1,-1),t.emplaceBack(1,1),t.emplaceBack(-1,1);let i=new ed;i.emplaceBack(0,1,2),i.emplaceBack(0,2,3),r.mesh=new Um(e.createVertexBuffer(t,i0.members),e.createIndexBuffer(i),Ks.simpleSegment(0,0,t.length,i.length))}return r.mesh}function hse(e,r){let t=e.context,i=t.gl,a=eN(r,e.transform,e.pixelRatio),o=new Lo(i.LEQUAL,Lo.ReadWrite,[0,1]),s=es.disabled,l=e.colorModeForRenderPass(),n=e.useProgram("sky"),u=Uz(t,r);n.draw(t,i.TRIANGLES,o,s,l,Ko.disabled,a,null,void 0,"sky",u.vertexBuffer,u.indexBuffer,u.segments)}function dse(e,r){let t=e.getCartesianPosition();OK(t,t);let i=Hh(new Float64Array(16));return e.properties.get("anchor")==="map"&&(zp(i,i,r.rollInRadians),Wv(i,i,-r.pitchInRadians),zp(i,i,r.bearingInRadians),Wv(i,i,r.center.lat*Math.PI/180),c9(i,i,-r.center.lng*Math.PI/180)),NK(t,t,i),t}function pse(e,r,t){let i=e.context,a=i.gl,o=e.useProgram("atmosphere"),s=new Lo(a.LEQUAL,Lo.ReadOnly,[0,1]),l=e.transform,n=dse(t,e.transform),u=l.getProjectionData({overscaledTileID:null,applyGlobeMatrix:!0,applyTerrainMatrix:!0}),c=r.properties.get("atmosphere-blend")*u.projectionTransition;if(c===0)return;let f=Nm(l.worldSize,l.center.lat),h=_z(l),d=JO(n,c,h,f,l.inverseProjectionMatrix),p=Uz(i,r);o.draw(i,a.TRIANGLES,s,es.disabled,cl.alphaBlended,Ko.disabled,d,null,null,"atmosphere",p.vertexBuffer,p.indexBuffer,p.segments)}function vse(e,r,t){var i;let a=(i=r?.transitionState)!=null?i:0;return{currentPass:"offscreen",currentLayer:0,opaquePassCutoff:1/0,depthRangeFor3D:[0,1],isRenderingToTexture:!1,transform:e,terrain:t,projectionTransition:a,isRenderingGlobe:a>0}}function qz(e,r){let t=!1,i=null,a,o=()=>{i=null,t&&(t=(e(...a),i=setTimeout(o,r),!1))};return(...s)=>(t=!0,a=s,i||o(),i)}function Vg(e,r){(!e.duration||e.duration<r.duration)&&(e.duration=r.duration,e.easing=r.easing)}function Gg(e,r,t){let{maxSpeed:i,linearity:a,deceleration:o}=t,s=to(e*a/(r/1e3),-i,i),l=Math.abs(s)/(o*a);return{easing:t.easing,duration:l*1e3,amount:l/2*s}}function fM(e,r){if(e.length!==r.length)throw Error(`The number of touches and points are not equal - touches ${e.length}, points ${r.length}`);let t={};for(let i=0;i<e.length;i++)t[e[i].identifier]=r[i];return t}function mse(e){let r=new Wr(0,0);for(let t of e)r._add(t);return r.div(e.length)}function gse(e,r){let t=a8[r];return e.buttons===void 0||(e.buttons&t)!==t}function yse({enable:e,clickTolerance:r}){return new Wm({clickTolerance:r,move:(t,i)=>({around:i,panDelta:i.sub(t)}),activateOnStart:!0,moveStateManager:new Ym({checkCorrectEvent:t=>t.button===0&&!t.ctrlKey}),enable:e,assignEvents:iy})}function _se({enable:e,clickTolerance:r,aroundCenter:t=!0,minPixelCenterThreshold:i=100,rotateSpeed:a=.8},o){return new Wm({clickTolerance:r,move:(s,l)=>{let n=o();if(t&&Math.abs(n.y-s.y)>i)return{bearingDelta:T9(new Wr(s.x,l.y),l,n)};let u=(l.x-s.x)*a;return t&&l.y<n.y&&(u=-u),{bearingDelta:u}},moveStateManager:new Ym({checkCorrectEvent:s=>s.button===0&&s.ctrlKey||s.button===2&&!s.ctrlKey}),enable:e,assignEvents:iy})}function xse({enable:e,clickTolerance:r,pitchSpeed:t=-.5}){return new Wm({clickTolerance:r,move:(i,a)=>({pitchDelta:(a.y-i.y)*t}),moveStateManager:new Ym({checkCorrectEvent:i=>i.button===0&&i.ctrlKey||i.button===2}),enable:e,assignEvents:iy})}function bse({enable:e,clickTolerance:r,rollDegreesPerPixelMoved:t=.3},i){return new Wm({clickTolerance:r,move:(a,o)=>{let s=i(),l=(o.x-a.x)*t;return o.y<s.y&&(l=-l),{rollDelta:l}},moveStateManager:new Ym({checkCorrectEvent:a=>a.button===2&&a.ctrlKey}),enable:e,assignEvents:iy})}function u2(e,r,t){for(let i=0;i<e.length;i++)if(e[i].identifier===t)return r[i]}function Vz(e,r){return Math.log(e/r)/Math.LN2}function Gz(e,r){return e.angleWith(r)*180/Math.PI}function hM(e){return Math.abs(e.y)>Math.abs(e.x)}function wse(e){return e*(2-e)}function dM(e){var r;return((r=e.panDelta)==null?void 0:r.mag())||e.zoomDelta||e.bearingDelta||e.pitchDelta||e.rollDelta}function Tse(e=!1){return Xr(this,null,function*(){if(nv!==void 0&&!e)return nv;if(window.navigator.permissions===void 0)return nv=!!window.navigator.geolocation,nv;try{nv=(yield window.navigator.permissions.query({name:"geolocation"})).state!=="denied"}catch{nv=!!window.navigator.geolocation}return nv})}function Hz(e,r,t,i=!1){if(i||!t.getCoveringTilesDetailsProvider().allowWorldCopies())return e?.wrap();let a=new An(e.lng,e.lat);if(e=new An(e.lng,e.lat),r){let o=new An(e.lng-360,e.lat),s=new An(e.lng+360,e.lat),l=t.locationToScreenPoint(e).distSqr(r);t.locationToScreenPoint(o).distSqr(r)<l?e=o:t.locationToScreenPoint(s).distSqr(r)<l&&(e=s)}for(;Math.abs(e.lng-t.center.lng)>180;){let o=t.locationToScreenPoint(e);if(o.x>=0&&o.y>=0&&o.x<=t.width&&o.y<=t.height)break;e.lng>t.center.lng?e.lng-=360:e.lng+=360}return e.lng!==a.lng&&t.isPointOnMapSurface(t.locationToScreenPoint(e))?e:a}function $z(e,r,t){let i=e.classList;for(let a in q2)i.remove(`maplibregl-${t}-anchor-${a}`);i.add(`maplibregl-${t}-anchor-${r}`)}function xh(e,r,t=[]){let i=$n.createNS("http://www.w3.org/2000/svg",e);for(let a in r)i.setAttributeNS(null,a,r[a]);for(let a of t)i.appendChild(a);return i}function Ase(){return DS||(DS=xh("svg",{display:"block",height:"41px",width:"27px",viewBox:"0 0 27 41"},[xh("g",{"fill-rule":"nonzero"},[xh("g",{transform:"translate(3.0, 29.0)",fill:"#000000"},[["10.5","5.25002273"],["10.5","5.25002273"],["9.5","4.77275007"],["8.5","4.29549936"],["7.5","3.81822308"],["6.5","3.34094679"],["5.5","2.86367051"],["4.5","2.38636864"]].map(([e,r])=>xh("ellipse",{opacity:"0.04",cx:"10.5",cy:"5.80029008",rx:e,ry:r}))),xh("g",{fill:CS},[xh("path",{d:"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z"})]),xh("g",{opacity:"0.25",fill:"#000000"},[xh("path",{d:"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z"})]),xh("g",{transform:"translate(6.0, 7.0)",fill:"#FFFFFF"}),xh("g",{transform:"translate(8.0, 8.0)"},[xh("circle",{fill:"#000000",opacity:"0.25",cx:"5.5",cy:"5.5",r:"5.4999962"}),xh("circle",{fill:"#FFFFFF",cx:"5.5",cy:"5.5",r:"5.4999962"})])])]),DS)}function Mse(e){return e.firstElementChild.children[1]}function Wz(e,r,t){let i=t?.maxWidth||100,a=e._container.clientHeight/2,o=e._container.clientWidth/2,s=e.unproject([o-i/2,a]),l=e.unproject([o+i/2,a]),n=Math.round(e.project(l).x-e.project(s).x),u=Math.min(i,n,e._container.clientWidth),c=s.distanceTo(l);if(t?.unit==="imperial"){let f=3.2808*c;f>5280?Hg(r,u,f/5280,e._getUIString("ScaleControl.Miles")):Hg(r,u,f,e._getUIString("ScaleControl.Feet"))}else t?.unit==="nautical"?Hg(r,u,c/1852,e._getUIString("ScaleControl.NauticalMiles")):c>=1e3?Hg(r,u,c/1e3,e._getUIString("ScaleControl.Kilometers")):Hg(r,u,c,e._getUIString("ScaleControl.Meters"))}function Hg(e,r,t,i){let a=Ese(t),o=a/t;e.style.width=`${r*o}px`,e.innerHTML=`${a} ${i}`}function Sse(e){let r=10**Math.ceil(-Math.log(e)/Math.LN10);return Math.round(e*r)/r}function Ese(e){let r=10**(`${Math.floor(e)}`.length-1),t=e/r;return t=t>=10?10:t>=5?5:t>=3?3:t>=2?2:t>=1?1:Sse(t),r*t}function Yz(e){if(!e)return Yz(new Wr(0,0));if(typeof e=="number"){let r=Math.round(Math.abs(e)/Math.SQRT2);return{center:new Wr(0,0),top:new Wr(0,e),"top-left":new Wr(r,r),"top-right":new Wr(-r,r),bottom:new Wr(0,-e),"bottom-left":new Wr(r,-r),"bottom-right":new Wr(-r,-r),left:new Wr(e,0),right:new Wr(-e,0)}}if(e instanceof Wr||Array.isArray(e)){let r=Wr.convert(e);return{center:r,top:r,"top-left":r,"top-right":r,bottom:r,"bottom-left":r,"bottom-right":r,left:r,right:r}}return{center:Wr.convert(e.center||[0,0]),top:Wr.convert(e.top||[0,0]),"top-left":Wr.convert(e["top-left"]||[0,0]),"top-right":Wr.convert(e["top-right"]||[0,0]),bottom:Wr.convert(e.bottom||[0,0]),"bottom-left":Wr.convert(e["bottom-left"]||[0,0]),"bottom-right":Wr.convert(e["bottom-right"]||[0,0]),left:Wr.convert(e.left||[0,0]),right:Wr.convert(e.right||[0,0])}}function kse(e){var r,t,i,a;return e?{top:(r=e.top)!=null?r:0,right:(t=e.right)!=null?t:0,bottom:(i=e.bottom)!=null?i:0,left:(a=e.left)!=null?a:0}:{top:0,right:0,bottom:0,left:0}}function Cse(e,r){return jg().setRTLTextPlugin(e,r)}function Dse(){return jg().getRTLTextPluginStatus()}function Lse(){return P8}function Fse(){return Yg.workerCount}function Pse(e){Yg.workerCount=e}function Ise(){return ff.MAX_PARALLEL_IMAGE_REQUESTS}function Rse(e){ff.MAX_PARALLEL_IMAGE_REQUESTS=e}function zse(){return ff.WORKER_URL}function Bse(e){ff.WORKER_URL=e}function Ose(e){return Xr(this,null,function*(){yield GA().broadcast("IS",e)})}var pM,vM,c2,f2,mM,yc,$g,Xz,Cs,$n,td,Zz,iu,kn,h2,Nf,zs,df,jm,gM,d2,yM,_M,Wg,xM,Kz,Jz,p2,Qz,eB,tB,v2,m2,rB,iB,aB,nB,oB,sB,lB,uB,cB,fB,hB,g2,Yg,dB,Xg,bM,y2,bh,wM,TM,_2,AM,MM,tv,pB,vB,Um,i0,Zg,rv,SM,EM,kM,mB,CM,gB,yB,x2,_B,b2,DM,xB,w2,T2,bB,LM,qm,A2,wB,FM,TB,AB,MB,PM,Vm,IM,SB,EB,kB,CB,DB,LB,FB,Gm,PB,IB,RM,al,RB,Hm,zB,BB,OB,zM,NB,jB,UB,qB,VB,GB,HB,$B,BM,rd,OM,NM,M2,S2,E2,WB,YB,XB,jM,ZB,UM,Kg,Jg,KB,JB,k2,qM,VM,C2,QB,D2,eO,GM,HM,$M,WM,YM,tO,L2,rO,iO,aO,nO,oO,sO,lO,Qg,uO,F2,XM,iv,ZM,ey,cO,fO,hO,KM,dO,pO,vO,mO,gO,JM,yO,_O,xO,bO,wO,TO,QM,AO,MO,eS,tS,SO,EO,kO,CO,DO,LO,FO,PO,IO,RO,zO,ty,BO,OO,NO,jO,UO,qO,VO,GO,HO,rS,iS,$O,WO,YO,XO,ZO,KO,JO,QO,eN,ry,tN,rN,aS,iN,os,aN,nN,oN,sN,lN,uN,cN,fN,hN,dN,pN,vN,mN,gN,yN,_N,xN,bN,wN,TN,AN,MN,SN,EN,kN,CN,DN,LN,FN,PN,IN,P2,RN,zN,BN,ON,nS,pf,cl,NN,Lo,I2,es,oS,R2,Ko,z2,jN,B2,O2,UN,qN,VN,GN,HN,$N,N2,WN,sS,lS,$m,YN,XN,ZN,KN,JN,QN,e8,t8,uS,r8,j2,i8,Wm,a8,Ym,n8,o8,iy,s8,U2,cS,fS,hS,dS,l8,pS,vS,mS,gS,u8,c8,yS,_S,xS,bS,f8,ay,h8,d8,p8,wS,TS,AS,v8,MS,m8,av,g8,y8,_8,SS,ES,x8,b8,w8,nv,q2,kS,CS,DS,a0,LS,V2,T8,ny,Xm,n0,G2,FS,A8,M8,S8,H2,E8,k8,C8,D8,L8,$2,F8,P8,Nse=Ir({"node_modules/maplibre-gl/dist/maplibre-gl.mjs"(){qae(),pM={},vM="6.9.0",yc={frame(e,r,t,i){let a=i||window,o=a.requestAnimationFrame(l=>{s(),r(l)}),{unsubscribe:s}=W4(e.signal,"abort",()=>{s(),a.cancelAnimationFrame(o),t(new vm(e.signal.reason))},!1)},frameAsync(e,r){return new Promise((t,i)=>{this.frame(e,t,i,r)})},getImageData(e,r=0){return this.getImageCanvasContext(e).getImageData(-r,-r,e.width+2*r,e.height+2*r)},getImageCanvasContext(e){let r;if(B4()&&!l9())r=new OffscreenCanvas(e.width,e.height).getContext("2d",{willReadFrequently:!0});else{let t=window.document.createElement("canvas");t.width=e.width,t.height=e.height,r=t.getContext("2d",{willReadFrequently:!0})}if(!r)throw Error("failed to create canvas 2d context");return r.drawImage(e,0,0,e.width,e.height),r},resolveURL(e){return c2||(c2=document.createElement("a")),c2.href=e,c2.href},get hardwareConcurrency(){return typeof navigator<"u"&&navigator.hardwareConcurrency||4},get prefersReducedMotion(){return mM===void 0?matchMedia?(f2??(f2=matchMedia("(prefers-reduced-motion: reduce)")),f2.matches):!1:mM},set prefersReducedMotion(e){mM=e}},$g=new class{constructor(){this._frozenAt=null}getCurrentTime(){return this._frozenAt===null?performance.now():this._frozenAt}setNow(e){this._frozenAt=e}restoreNow(){this._frozenAt=null}isFrozen(){return this._frozenAt!==null}},$n=(Cs=class{static create(e,r,t){let i=window.document.createElement(e);return r!==void 0&&(i.className=r),t&&t.appendChild(i),i}static createNS(e,r){return window.document.createElementNS(e,r)}static disableDrag(){Cs.docStyle&&Cs.selectProp&&(Cs.userSelect=Cs.docStyle[Cs.selectProp],Cs.docStyle[Cs.selectProp]="none")}static enableDrag(){Cs.docStyle&&Cs.selectProp&&(Cs.docStyle[Cs.selectProp]=Cs.userSelect)}static suppressClickInternal(e){e.preventDefault(),e.stopPropagation(),window.removeEventListener("click",Cs.suppressClickInternal,!0)}static suppressClick(){window.addEventListener("click",Cs.suppressClickInternal,!0),window.setTimeout(()=>{window.removeEventListener("click",Cs.suppressClickInternal,!0)},0)}static getScale(e){let r=e.getBoundingClientRect();return{x:r.width/e.offsetWidth||1,y:r.height/e.offsetHeight||1,boundingClientRect:r}}static getPoint(e,r,t){let i=r.boundingClientRect;return new Wr((t.clientX-i.left)/r.x-e.clientLeft,(t.clientY-i.top)/r.y-e.clientTop)}static mousePos(e,r){let t=Cs.getScale(e);return Cs.getPoint(e,t,r)}static touchPos(e,r){let t=[],i=Cs.getScale(e);for(let a of r)t.push(Cs.getPoint(e,i,a));return t}static sanitize(e){let r=new DOMParser().parseFromString(e,"text/html").body||document.createElement("body"),t=r.querySelectorAll("script, iframe");for(let i of t)i.remove();return Cs.clean(r),r.innerHTML}static isPossiblyDangerous(e,r){let t=r.replace(/\s+/g,"").toLowerCase();if(["src","href","xlink:href"].includes(e)&&(t.includes("javascript:")||t.includes("data:"))||e==="srcdoc"||e.startsWith("on"))return!0}static clean(e){let r=e.children;for(let t of r)Cs.removeAttributes(t),Cs.clean(t)}static removeAttributes(e){for(let{name:r,value:t}of Array.from(e.attributes))Cs.isPossiblyDangerous(r,t)&&e.removeAttribute(r)}},Cs.docStyle=typeof window<"u"&&((Xz=window.document)==null?void 0:Xz.documentElement.style),Cs.selectProp=!Cs.docStyle||"userSelect"in Cs.docStyle?"userSelect":"webkitUserSelect",Cs),(function(e){let r,t,i,a;e.resetRequestQueue=()=>{r=[],t=0,i=0,a={}},e.addThrottleControl=f=>{let h=i++;return a[h]=f,h},e.removeThrottleControl=f=>{delete a[f],u()};let o=()=>{for(let f of Object.keys(a))if(a[f]())return!0;return!1};function s(f,h,d,p,g=!0,m){return Xr(this,null,function*(){let y=yield f.transformRequest(h,d);return Y4(p.signal),td.getImage(y,p,g,m)})}e.transformAndGetImage=s,e.getImage=(f,h,d=!0,p)=>new Promise((g,m)=>{f.headers||(f.headers={}),f.headers.accept="image/webp,*/*",yn(f,{type:"image"});let y={abortController:h,requestParameters:f,supportImageRefresh:d,imageBitmapOptions:p,state:"queued",onError:_=>{m(_)},onSuccess:_=>{g(_)}};r.push(y),u()});let l=(f,h)=>typeof createImageBitmap=="function"?TP(f,h):AP(f),n=f=>Xr(null,null,function*(){f.state="running";let{requestParameters:h,supportImageRefresh:d,imageBitmapOptions:p,onError:g,onSuccess:m,abortController:y}=f,_=d===!1&&!p&&!Zv(self)&&!M9(h.url)&&(!h.headers||Object.keys(h.headers).reduce((x,S)=>x&&S==="accept",!0));t++;let v=_?c(h,y):pg(h,y);try{let x=yield v;delete f.abortController,f.state="completed",x.data instanceof HTMLImageElement||P0(x.data)?m(x):!x.data||x.data.byteLength===0?m({data:null,cacheControl:x.cacheControl,expires:x.expires}):m({data:yield l(x.data,p),cacheControl:x.cacheControl,expires:x.expires})}catch(x){delete f.abortController,g(Zu(x))}finally{t--,u()}}),u=()=>{let f=o()?ff.MAX_PARALLEL_IMAGE_REQUESTS_PER_FRAME:ff.MAX_PARALLEL_IMAGE_REQUESTS;for(let h=t;h<f&&r.length>0;h++){let d=r.shift();if(d.abortController.signal.aborted){h--;continue}n(d)}},c=(f,h)=>new Promise((d,p)=>{let g=new Image,m=f.url,y=f.credentials;y&&y==="include"?g.crossOrigin="use-credentials":(y&&y==="same-origin"||!S9(m))&&(g.crossOrigin="anonymous"),h.signal.addEventListener("abort",()=>{g.src="",p(new vm(h.signal.reason))}),g.fetchPriority="high",g.onload=()=>{g.onerror=g.onload=null,d({data:g})},g.onerror=()=>{g.onerror=g.onload=null,!h.signal.aborted&&p(Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."))},g.src=m})})(td||(td={})),td.resetRequestQueue(),Zz=class{constructor(e){this._transformRequestFn=e??null}transformRequest(e,r){return this._transformRequestFn&&this._transformRequestFn(e,r)||{url:e}}setTransformRequest(e){this._transformRequestFn=e}},iu=class extends hf{},kn=class extends iu{},h2=class extends iu{constructor(e={}){super("style.load",e)}},Nf=class extends iu{constructor(e,r={}){super(e,r),this.dataType="style"}},zs=class extends iu{constructor(e,r={}){super(e,r),this.dataType="source"}},df=class extends iu{preventDefault(){this._defaultPrevented=!0}get defaultPrevented(){return this._defaultPrevented}constructor(e,r,t,i={}){t=t instanceof MouseEvent?t:new MouseEvent(e,t);let a=$n.mousePos(r.getCanvas(),t),o=r.unproject(a);super(e,yn({point:a,lngLat:o,originalEvent:t},i)),this._defaultPrevented=!1,this.target=r}},jm=class extends iu{preventDefault(){this._defaultPrevented=!0}get defaultPrevented(){return this._defaultPrevented}constructor(e,r,t){let i=e==="touchend"?t.changedTouches:t.touches,a=$n.touchPos(r.getCanvasContainer(),i),o=a.map(n=>r.unproject(n)),s=a.reduce((n,u,c,f)=>n.add(u.div(f.length)),new Wr(0,0)),l=r.unproject(s);super(e,{points:a,point:s,lngLats:o,lngLat:l,originalEvent:t}),this._defaultPrevented=!1}},gM=class extends iu{preventDefault(){this._defaultPrevented=!0}get defaultPrevented(){return this._defaultPrevented}constructor(e,r){super("wheel",{originalEvent:r}),this._defaultPrevented=!1}},d2=class extends iu{},yM=class extends iu{constructor(e={}){super("terrain",e)}},_M=class extends iu{constructor(e={}){super("projectiontransition",e)}},Wg=class extends iu{},xM=class extends iu{constructor(e={}){super("styleimagemissing",e)}},Kz=class extends Nl{constructor(){super(),this.images={},this.updateVersion=0,this.loaded=!1,this.requestors=[],this.missingImageResolver=null,this._spriteImagesIds={},this._imagesIds=null,this._renderCallbacksDispatchedThisFrame={}}destroy(){for(let e of Object.keys(this.images))this.removeImage(e);this._spriteImagesIds={}}isLoaded(){return this.loaded}setLoaded(e){if(this.loaded!==e&&(this.loaded=e,e)){for(let{ids:r,promiseResolve:t}of this.requestors)t(this._getImagesForIds(r));this.requestors=[]}}getImage(e){let r=this.images[e];if(r&&!r.data&&r.spriteData){let t=r.spriteData;r.data=new Rs({width:t.width,height:t.height},t.context.getImageData(t.x,t.y,t.width,t.height).data),r.spriteData=null}return r}addImage(e,r){if(this.images[e])throw Error(`Image id ${e} already exist, use updateImage instead`);this._validate(e,r)&&(this.images[e]=r,this._imagesIds=null,r.isWebGLImage&&this.updateImage(e,r,!1))}_validate(e,r){let t=!0,i=r.data||r.spriteData;return this._validateStretch(r.stretchX,i?.width)||(this.fire(new Ln(Error(`Image "${e}" has invalid "stretchX" value`))),t=!1),this._validateStretch(r.stretchY,i?.height)||(this.fire(new Ln(Error(`Image "${e}" has invalid "stretchY" value`))),t=!1),this._validateContent(r.content,r)||(this.fire(new Ln(Error(`Image "${e}" has invalid "content" value`))),t=!1),t}_validateStretch(e,r){if(!e)return!0;let t=0;for(let i of e){if(i[0]<t||i[1]<i[0]||r<i[1])return!1;t=i[1]}return!0}_validateContent(e,r){if(!e)return!0;if(e.length!==4)return!1;let t=r.spriteData,i=t?.width||r.data.width,a=t?.height||r.data.height;return e[0]<0||i<e[0]||e[1]<0||a<e[1]||e[2]<0||i<e[2]||e[3]<0||a<e[3]||e[2]<e[0]?!1:e[3]>=e[1]}updateImage(e,r,t=!0){var i;let a=this.images[e];if(t){let o=a.data||a.spriteData;if(o.width!==r.data.width||o.height!==r.data.height)throw Error(`size mismatch between old image (${o.width}x${o.height}) and new image (${r.data.width}x${r.data.height}).`)}r.version=((i=a.version)!=null?i:0)+1,this.images[e]=r,this.updateVersion++}removeImage(e){var r;let t=this.images[e];t&&(delete this.images[e],this._imagesIds=null,(r=t.userImage)!=null&&r.onRemove&&t.userImage.onRemove())}listImages(){var e;return(e=this._imagesIds)!=null||(this._imagesIds=Object.keys(this.images)),this._imagesIds}_getSpriteImageId(e,r){return e==="default"?r:`${e}:${r}`}setSpriteImages(e,r){var t;let i=(t=this._spriteImagesIds[e])!=null?t:[],a=[];for(let l in r){let n=this._getSpriteImageId(e,l);a.push(n),n in this.images?this.updateImage(n,r[l],!1):this.addImage(n,r[l])}let o=new Set(a),s=i.filter(l=>!o.has(l));for(let l of s)this.removeImage(l);return this._spriteImagesIds[e]=a,{loaded:a,removed:s}}removeSpriteImages(e){var r;let t=(r=this._spriteImagesIds[e])!=null?r:[];for(let i of t)this.removeImage(i);return delete this._spriteImagesIds[e],t}removeAllSpriteImages(){let e=Object.values(this._spriteImagesIds).flat();for(let r of e)this.removeImage(r);return this._spriteImagesIds={},e}setMissingImageResolver(e){this.missingImageResolver=e}getImages(e){return new Promise((r,t)=>{let i=!0;if(!this.isLoaded())for(let a of e)this.images[a]||(i=!1);this.isLoaded()||i?r(this._getImagesForIds(e)):this.requestors.push({ids:e,promiseResolve:r})})}_getImagesForIds(e){return Xr(this,null,function*(){var r;let t=new Set(e.filter(o=>!this.getImage(o))),i=this.missingImageResolver;i&&(yield Promise.allSettled(Array.from(t,o=>i(o))));let a={};for(let o of e){let s=this.getImage(o);s&&(t.delete(o),a[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,textFitWidth:s.textFitWidth,textFitHeight:s.textFitHeight,hasRenderCallback:!!((r=s.userImage)!=null&&r.render),isWebGLImage:s.isWebGLImage})}for(let o of t)this.fire(new xM({id:o})),To(`Image "${o}" could not be loaded. Please make sure you have added the image before it is needed with map.addImage(), resolved it with map.setMissingStyleImageResolver(), or included it in a "sprite" property in your style.`);return a})}beginFrame(){this._renderCallbacksDispatchedThisFrame={}}dispatchRenderCallbacks(e){for(let r of e){if(this._renderCallbacksDispatchedThisFrame[r])continue;this._renderCallbacksDispatchedThisFrame[r]=!0;let t=this.getImage(r);t||To(`Image with ID: "${r}" was not found`),Dte(t)&&this.updateImage(r,t)}}cloneImages(){let e={};for(let r in this.images){let t=this.images[r];e[r]=ar(Ot({},t),{data:t.data?t.data.clone():null})}return e}},Jz=class{constructor(e){this._imageManager=e,this._entries={},this._image=new Rs({width:1,height:1}),this._dirty=!0}destroy(){this._texture&&(this._texture=(this._texture.destroy(),null)),this._entries={},this._image=new Rs({width:1,height:1}),this._dirty=!0}getPixelSize(){let{width:e,height:r}=this._image;return{width:e,height:r}}getPattern(e){let r=this._imageManager.getImage(e);if(!r)return null;let t=this._entries[e];if(t?.image!==r){let i={w:r.data.width+2,h:r.data.height+2,x:0,y:0};this._entries[e]={bin:i,position:new Pb(i,r),image:r}}else if(t.position.version!==r.version)t.position.version=r.version;else return t.position;return this._update(),this._entries[e].position}bind(e){let r=e.gl;this._texture?this._dirty&&(this._dirty=(this._texture.update(this._image),!1)):(this._texture=new jl(e,this._image,r.RGBA),this._dirty=!1),this._texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)}_update(){for(let a in this._entries)this._imageManager.getImage(a)||delete this._entries[a];let e=[];for(let a in this._entries)e.push(this._entries[a].bin);let{w:r,h:t}=mF(e),i=this._image;i.resize({width:r||1,height:t||1});for(let a in this._entries){let{bin:o}=this._entries[a],s=o.x+1,l=o.y+1,n=this._entries[a].image.data,u=n.width,c=n.height;Rs.copy(n,i,{x:0,y:0},{x:s,y:l},{width:u,height:c}),Rs.copy(n,i,{x:0,y:c-1},{x:s,y:l-1},{width:u,height:1}),Rs.copy(n,i,{x:0,y:0},{x:s,y:l+c},{width:u,height:1}),Rs.copy(n,i,{x:u-1,y:0},{x:s-1,y:l},{width:1,height:c}),Rs.copy(n,i,{x:0,y:0},{x:s+u,y:l},{width:1,height:c})}this._dirty=!0}},p2=1114111,Qz={start:0,end:p2},eB=0,tB=class{constructor(e){this.requestManager=e,this._faces={},this._registered=new Set}setFontFaces(e){this._unregisterAll(),this._faces={};for(let[r,t]of Object.entries(e??{})){let i=Array.isArray(t)?t:[t];this._faces[r]=i.map(a=>this._declareFontFace(r,a)).filter(a=>a!==null)}}hasFontFaces(){return Object.keys(this._faces).length>0}getFontFamily(e,r){return Xr(this,null,function*(){var t,i;for(let a of e.split(","))for(let o of(t=this._faces[a.trim()])!=null?t:[])if(nne(o,r)&&((i=o.loaded)!=null||(o.loaded=this._loadFontFace(o)),yield o.loaded))return o.family;return null})}_declareFontFace(e,r){let t=typeof r=="string"?{url:r}:r;if(typeof t?.url!="string")return To(`Ignoring the font face declared for "${e}": it has no URL.`),null;let i=`maplibre-gl-font-face-${eB++}`,a=t["unicode-range"];if(!a?.length)return{url:t.url,ranges:[Qz],family:i};let o=[];for(let s of a){let l=ane(s);if(!l){To(`Ignoring the unicode range "${s}" of the font face at ${t.url}: it is not a valid range.`);continue}o.push(l)}return o.length?{url:t.url,ranges:o,family:i}:null}_loadFontFace(e){return Xr(this,null,function*(){if(typeof FontFace>"u"||typeof document>"u"||!document.fonts)return To(`Ignoring the font face at ${e.url}: this environment has no CSS Font Loading API.`),!1;let r;try{return r=new FontFace(e.family,yield this._downloadFontFile(e.url)),Object.values(this._faces).some(t=>t.includes(e))?(document.fonts.add(r),this._registered.add(r),yield r.load(),!0):!1}catch(t){return r&&this._unregister(r),To(`Ignoring the font face at ${e.url}: ${Zu(t).message}`),!1}})}_downloadFontFile(e){return Xr(this,null,function*(){let r=yield this.requestManager.transformRequest(e,"Glyphs"),t=yield dT(r,new AbortController);if(!t?.data)throw Error(`the response was empty for the font file at ${e}`);return t.data})}_unregister(e){var r;(r=document.fonts)==null||r.delete(e),this._registered.delete(e)}_unregisterAll(){var e;for(let r of this._registered)(e=document.fonts)==null||e.delete(r);this._registered.clear()}destroy(){this._unregisterAll(),this._faces={}}},v2=1e20,m2=new Float64Array(256);for(let e=0;e<256;e++){let r=.5-(e/255)**.45454545454545453;m2[e]=r*Math.abs(r)}m2[255]=-1e20,rB=class{constructor({fontSize:e=24,buffer:r=3,radius:t=8,cutoff:i=.25,fontFamily:a="sans-serif",fontWeight:o="normal",fontStyle:s="normal",lang:l=null}={}){this.buffer=r,this.radius=t,this.cutoff=i,this.lang=l;let n=this.size=e+r*4,u=this._createCanvas(n),c=this.ctx=u.getContext("2d",{willReadFrequently:!0});c.font=`${s} ${o} ${e}px ${a}`,c.textBaseline="alphabetic",c.textAlign="left",c.fillStyle="black",this.gridOuter=new Float64Array(n*n),this.gridInner=new Float64Array(n*n),this.f=new Float64Array(n),this.z=new Float64Array(n+1),this.v=new Uint16Array(n)}_createCanvas(e){if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(e,e);let r=document.createElement("canvas");return r.width=r.height=e,r}draw(e){let{width:r,actualBoundingBoxAscent:t,actualBoundingBoxDescent:i,actualBoundingBoxLeft:a,actualBoundingBoxRight:o}=this.ctx.measureText(e),s=Math.ceil(t),l=Math.floor(-a),n=Math.max(0,Math.min(this.size-this.buffer,Math.ceil(o)-l)),u=Math.max(0,Math.min(this.size-this.buffer,s+Math.ceil(i))),c=n+2*this.buffer,f=u+2*this.buffer,h=Math.max(c*f,0),d=new Uint8ClampedArray(h),p={data:d,width:c,height:f,glyphWidth:n,glyphHeight:u,glyphTop:s,glyphLeft:l,glyphAdvance:r};if(n===0||u===0)return p;let{ctx:g,buffer:m,gridInner:y,gridOuter:_}=this;this.lang&&(g.lang=this.lang),g.clearRect(m,m,n,u),g.fillText(e,m-l,m+s);let v=g.getImageData(m,m,n,u);_.fill(v2,0,h),y.fill(0,0,h);let x=3;for(let w=0;w<u;w++){let k=(w+m)*c+m;for(let A=0;A<n;A++,x+=4,k++){let b=v.data[x];if(b===0)continue;let E=m2[b];_[k]=Math.max(0,E),y[k]=Math.max(0,-E)}}O5(_,0,0,c,f,c,this.f,this.v,this.z);let S=Math.min(m,1);O5(y,m-S,m-S,n+2*S,u+2*S,c,this.f,this.v,this.z);let M=255/this.radius,C=255*(1-this.cutoff);for(let w=0;w<h;w++){let k=Math.sqrt(_[w])-Math.sqrt(y[w]);d[w]=Math.round(C-M*k)}return p}},iB=mi.layout_symbol["text-font"].default.join(","),aB=(e,r)=>{let t=new rB(e);return t.buffer=r,t},nB=class{constructor(e,r,t,i=aB){this.requestManager=e,this.localIdeographFontFamily=r,this.entries={},this.lang=t,this.fontFaceManager=new tB(e),this.createRasterizer=i}setURL(e){this.url=e}setFontFaces(e){this.fontFaceManager.setFontFaces(e),this.entries={}}getGlyphs(e){return Xr(this,null,function*(){let r=[];for(let a in e)for(let o of e[a])r.push(this._getAndCacheGlyphsPromise(a,o));let t=yield Promise.all(r),i={};for(let{stack:a,id:o,glyph:s}of t)i[a]||(i[a]={}),i[a][o]=s&&{id:s.id,bitmap:s.bitmap.clone(),metrics:s.metrics};return i})}_getAndCacheGlyphsPromise(e,r){return Xr(this,null,function*(){var t,i;(i=(t=this.entries)[e])!=null||(t[e]={glyphs:{},requests:{},ranges:{}});let a=this.entries[e],o=a.glyphs[r];if(o!==void 0)return{stack:e,id:r,glyph:o};let s=r.codePointAt(0),l=this.fontFaceManager.hasFontFaces()?yield this.fontFaceManager.getFontFamily(e,s):null;return l?(o=a.glyphs[r]=yield this._drawGlyph(a,e,r,l),{stack:e,id:r,glyph:o}):!this.url||lx(r)||this._charUsesLocalIdeographFontFamily(s)?(o=a.glyphs[r]=yield this._drawGlyph(a,e,r),{stack:e,id:r,glyph:o}):yield this._downloadAndCacheRangePromise(e,r)})}_downloadAndCacheRangePromise(e,r){return Xr(this,null,function*(){var t;let i=r.codePointAt(0),a=this.entries[e],o=Math.floor(i/256);if(a.ranges[o])return{stack:e,id:r,glyph:null};(t=a.requests)[o]||(t[o]=this._loadGlyphRange(e,o));try{let s=yield a.requests[o];for(let l in s)a.glyphs[String.fromCodePoint(+l)]=s[+l];return a.ranges[o]=!0,{stack:e,id:r,glyph:s[i]||null}}catch(s){let l=a.glyphs[r]=yield this._drawGlyph(a,e,r);return this._warnOnMissingGlyphRange(l,o,i,Zu(s)),{stack:e,id:r,glyph:l}}})}_loadGlyphRange(e,r){return Xr(this,null,function*(){let t=r*256,i=t+255,a=yield this.requestManager.transformRequest(this.url.replace("{fontstack}",e).replace("{range}",`${t}-${i}`),"Glyphs"),o=yield dT(a,new AbortController);if(!o?.data)throw Error(`Could not load glyph range. range: ${r}, ${t}-${i}`);let s={};for(let l of Cte(o.data))s[l.id]=l;return s})}_warnOnMissingGlyphRange(e,r,t,i){let a=r*256,o=a+255,s=t.toString(16).padStart(4,"0").toUpperCase();To(`Unable to load glyph range ${r}, ${a}-${o}. Rendering codepoint U+${s} locally instead. ${i}`)}_charUsesLocalIdeographFontFamily(e){return!!this.localIdeographFontFamily&&Vee(e)}_drawGlyph(e,r,t,i){return Xr(this,null,function*(){let a=(yield this._getTinySDF(e,r,t,i)).draw(t),o=new RegExp("^\\p{gc=Cf}+$","u").test(t);return{id:t.codePointAt(0),bitmap:new vb({width:a.width||60,height:a.height||60},a.data),metrics:{width:o?0:a.glyphWidth/2||24,height:a.glyphHeight/2||24,left:a.glyphLeft/2+.5||0,top:a.glyphTop/2-27.5||-8,advance:o?0:a.glyphAdvance/2||24,isDoubleResolution:!0}}})}_getTinySDF(e,r,t,i){var a,o,s,l;let n=lx(t);if(i){let h=n?"clusterTinySDFs":"fontFaceTinySDFs";return(a=e[h])!=null||(e[h]={}),(o=e[h])[i]||(o[i]=this._createTinySDF(i,!1,n?3:1)),e[h][i]}let u=r===iB&&this.localIdeographFontFamily!==""&&this._charUsesLocalIdeographFontFamily(t.codePointAt(0)),c=u?this.localIdeographFontFamily:r;if(n)return(s=e.clusterTinySDFs)!=null||(e.clusterTinySDFs={}),(l=e.clusterTinySDFs)[c]||(l[c]=this._createTinySDF(c,!0,3)),e.clusterTinySDFs[c];let f=u?"ideographTinySDF":"tinySDF";return e[f]||(e[f]=this._createTinySDF(c)),e[f]}_createTinySDF(e,r=!0,t=1){return Xr(this,null,function*(){var i;let a=e?e.split(","):[];a.push("sans-serif");let o=a.map(n=>/[-\w]+/.test(n)?n:`'${CSS.escape(n)}'`).join(","),s=r?this._fontWeight(a[0]):void 0,l=r?this._fontStyle(a[0]):"normal";if(typeof document<"u"&&((i=document.fonts)!=null&&i.load))try{yield document.fonts.load(`${l} ${s||"normal"} 48px ${o}`)}catch(n){To(`Failed to load font "${o}": ${Zu(n).message}`)}return this.createRasterizer({fontSize:48,buffer:Math.max(6,Math.ceil(48*(t-1)/4)),radius:16,cutoff:.25,fontFamily:o,fontWeight:s,fontStyle:l,lang:this.lang},6)})}_fontStyle(e){return/italic/i.test(e)?"italic":/oblique/i.test(e)?"oblique":"normal"}_fontWeight(e){let r={thin:100,hairline:100,"extra light":200,"ultra light":200,light:300,normal:400,regular:400,medium:500,semibold:600,demibold:600,bold:700,"extra bold":800,"ultra bold":800,black:900,heavy:900,"extra black":950,"ultra black":950},t;for(let[i,a]of Object.entries(r))RegExp(`\\b${i}\\b`,"i").test(e)&&(t=`${a}`);return t}destroy(){for(let e in this.entries){let r=this.entries[e];r.tinySDF=null,r.ideographTinySDF=null,r.fontFaceTinySDFs={},r.glyphs={},r.requests={},r.ranges={}}this.entries={},this.fontFaceManager.destroy()}},sB=()=>oB||(oB=new vu({anchor:new Ha(mi.light.anchor,"anchor"),position:new Ha(mi.light.position,"position"),color:new Ha(mi.light.color,"color"),intensity:new Ha(mi.light.intensity,"intensity")})),lB=class extends Nl{constructor(e,r){super(),this._transitionable=new Ag(sB(),"light",r),this.setLight(e),this._transitioning=this._transitionable.untransitioned()}getLight(){return this._transitionable.serialize()}getCartesianPosition(){return nJ(this.properties.get("position"))}setLight(e,r={}){if(!this._validate(Hc.light,e,r))for(let t in e){let i=e[t];t.endsWith("-transition")?this._transitionable.setTransition(t.slice(0,-Ux.length),i):this._transitionable.setValue(t,i)}}updateTransitions(e){this._transitioning=this._transitionable.transitioned(e,this._transitioning)}hasTransition(){return this._transitioning.hasTransition()}recalculate(e){this.properties=this._transitioning.possiblyEvaluate(e)}_validate(e,r,t){return Q1(this,e,{value:r},t)}},cB=()=>uB||(uB=new vu({"sky-color":new Ha(mi.sky["sky-color"],"sky-color"),"horizon-color":new Ha(mi.sky["horizon-color"],"horizon-color"),"fog-color":new Ha(mi.sky["fog-color"],"fog-color"),"fog-ground-blend":new Ha(mi.sky["fog-ground-blend"],"fog-ground-blend"),"horizon-fog-blend":new Ha(mi.sky["horizon-fog-blend"],"horizon-fog-blend"),"sky-horizon-blend":new Ha(mi.sky["sky-horizon-blend"],"sky-horizon-blend"),"atmosphere-blend":new Ha(mi.sky["atmosphere-blend"],"atmosphere-blend")})),fB=class extends Nl{constructor(e,r){super(),this._transitionable=new Ag(cB(),"sky",r),this.setSky(e),this._transitioning=this._transitionable.untransitioned(),this.recalculate(new ns(0))}setSky(e,r={}){if(!this._validate(Hc.sky,e,r)){e||(e={"sky-color":"transparent","horizon-color":"transparent","fog-color":"transparent","fog-ground-blend":1,"atmosphere-blend":0});for(let t in e){let i=e[t];t.endsWith("-transition")?this._transitionable.setTransition(t.slice(0,-Ux.length),i):this._transitionable.setValue(t,i)}}}getSky(){return this._transitionable.serialize()}updateTransitions(e){this._transitioning=this._transitionable.transitioned(e,this._transitioning)}hasTransition(){return this._transitioning.hasTransition()}recalculate(e){this.properties=this._transitioning.possiblyEvaluate(e)}_validate(e,r,t={}){return Q1(this,e,{value:r},t)}calculateFogBlendOpacity(e){return e<60?0:e<70?(e-60)/10:1}},hB=class{constructor(e,r){this.width=e,this.height=r,this.nextRow=0,this.data=new Uint8Array(this.width*this.height),this.dashEntry={}}getDash(e,r){var t;let i=e.join(",")+String(r);return(t=this.dashEntry)[i]||(t[i]=this.addDash(e,r)),this.dashEntry[i]}getDashRanges(e,r,t){let i=e.length%2==1,a=[],o=i?-e[e.length-1]*t:0,s=e[0]*t,l=!0;a.push({left:o,right:s,isDash:l,zeroLength:e[0]===0});let n=e[0];for(let u=1;u<e.length;u++){l=!l;let c=e[u];o=n*t,n+=c,s=n*t,a.push({left:o,right:s,isDash:l,zeroLength:c===0})}return a}addRoundDash(e,r,t){let i=r/2;for(let a=-t;a<=t;a++){let o=this.nextRow+t+a,s=this.width*o,l=0,n=e[l];for(let u=0;u<this.width;u++){u/n.right>1&&(n=e[++l]);let c=Math.abs(u-n.left),f=Math.abs(u-n.right),h=Math.min(c,f),d,p=a/t*(i+1);if(n.isDash){let g=i-Math.abs(p);d=Math.sqrt(h*h+g*g)}else d=i-Math.sqrt(h*h+p*p);this.data[s+u]=Math.max(0,Math.min(255,d+128))}}}addRegularDash(e){for(let s=e.length-1;s>=0;--s){let l=e[s],n=e[s+1];l.zeroLength?e.splice(s,1):n?.isDash===l.isDash&&(n.left=l.left,e.splice(s,1))}let r=e[0],t=e[e.length-1];r.isDash===t.isDash&&(r.left=t.left-this.width,t.right=r.right+this.width);let i=this.width*this.nextRow,a=0,o=e[a];for(let s=0;s<this.width;s++){s/o.right>1&&(o=e[++a]);let l=Math.abs(s-o.left),n=Math.abs(s-o.right),u=Math.min(l,n),c=o.isDash?u:-u;this.data[i+s]=Math.max(0,Math.min(255,c+128))}}addDash(e,r){let t=r?7:0,i=2*t+1;if(this.nextRow+i>this.height)return To("LineAtlas out of space"),null;let a=0;for(let s of e)a+=s;if(a!==0){let s=this.width/a,l=this.getDashRanges(e,this.width,s);r?this.addRoundDash(l,s,t):this.addRegularDash(l)}let o={y:this.nextRow+t,height:2*t,width:a};return this.nextRow+=i,this.dirty=!0,o}bind(e){let r=e.gl;this.texture?(r.bindTexture(r.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,r.texSubImage2D(r.TEXTURE_2D,0,0,0,this.width,this.height,r.ALPHA,r.UNSIGNED_BYTE,this.data))):(this.texture=r.createTexture(),r.bindTexture(r.TEXTURE_2D,this.texture),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.REPEAT),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.REPEAT),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texImage2D(r.TEXTURE_2D,0,r.ALPHA,this.width,this.height,0,r.ALPHA,r.UNSIGNED_BYTE,this.data))}},g2="maplibre_preloaded_worker_pool",Yg=class iU{constructor(){this.active={},this.workersPromise=null}acquire(r){return Xr(this,null,function*(){if(this.active[r]=!0,!this.workersPromise){let t=[];for(;t.length<iU.workerCount;)t.push(cne());this.workersPromise=Promise.all(t)}return(yield this.workersPromise).slice()})}release(r){if(delete this.active[r],this.numActive()===0&&this.workersPromise){let t=this.workersPromise;this.workersPromise=null,t.then(i=>{for(let a of i)a.terminate()})}}isPreloaded(){return!!this.active[g2]}numActive(){return Object.keys(this.active).length}},dB=Math.floor(yc.hardwareConcurrency/2),Yg.workerCount=sJ(globalThis)?Math.max(Math.min(dB,3),1):1,bM=class{constructor(e,r){this.workerPool=e,this.actors=[],this.currentActor=0,this.id=r,this.removed=!1,this.actorsPromise=this.initActors(r)}initActors(e){return Xr(this,null,function*(){let r=yield this.workerPool.acquire(e);if(this.removed)return[];if(this.actors=r.map((t,i)=>{let a=new l5(t,e);return a.name=`Worker ${i}`,a}),!this.actors.length)throw Error("No actors found");return this.actors})}broadcast(e,r){return Xr(this,null,function*(){let t=yield this.actorsPromise;return Promise.all(t.map(i=>i.sendAsync({type:e,data:r})))})}getActor(){return Xr(this,null,function*(){let e=yield this.actorsPromise;return this.currentActor=(this.currentActor+1)%e.length,e[this.currentActor]})}waitForInitComplete(){return Xr(this,null,function*(){this.actors.length===0&&(yield this.actorsPromise)})}getReadyActor(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]}remove(e=!0){this.removed=!0;for(let r of this.actors)r.remove();this.actors=[],e&&this.workerPool.release(this.id)}registerMessageHandler(e,r){return Xr(this,null,function*(){let t=yield this.actorsPromise;for(let i of t)i.registerMessageHandler(e,r)})}unregisterMessageHandler(e){return Xr(this,null,function*(){let r=yield this.actorsPromise;for(let t of r)t.unregisterMessageHandler(e)})}},bh=class bp{constructor(r,t){r&&(t?this.setSouthWest(r).setNorthEast(t):Array.isArray(r)&&(r.length===4?this.setSouthWest([r[0],r[1]]).setNorthEast([r[2],r[3]]):this.setSouthWest(r[0]).setNorthEast(r[1])))}setNorthEast(r){return this._ne=r instanceof An?new An(r.lng,r.lat):An.convert(r),this}setSouthWest(r){return this._sw=r instanceof An?new An(r.lng,r.lat):An.convert(r),this}extend(r){let t=this._sw,i=this._ne,a,o;if(r instanceof An)a=r,o=r;else if(r instanceof bp){if(a=r._sw,o=r._ne,!a||!o)return this}else{if(Array.isArray(r)){if(r.length===4||r.every(Array.isArray)){let s=r;return this.extend(bp.convert(s))}{let s=r;return this.extend(An.convert(s))}}return r&&("lng"in r||"lon"in r)&&"lat"in r?this.extend(An.convert(r)):this}return!t&&!i?(this._sw=new An(a.lng,a.lat),this._ne=new An(o.lng,o.lat)):(t.lng=Math.min(a.lng,t.lng),t.lat=Math.min(a.lat,t.lat),i.lng=Math.max(o.lng,i.lng),i.lat=Math.max(o.lat,i.lat)),this}getCenter(){return new An((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)}getSouthWest(){return this._sw}getNorthEast(){return this._ne}getNorthWest(){return new An(this.getWest(),this.getNorth())}getSouthEast(){return new An(this.getEast(),this.getSouth())}getWest(){return this._sw.lng}getSouth(){return this._sw.lat}getEast(){return this._ne.lng}getNorth(){return this._ne.lat}toArray(){return[this._sw.toArray(),this._ne.toArray()]}toString(){return`LngLatBounds(${this._sw.toString()}, ${this._ne.toString()})`}isEmpty(){return!(this._sw&&this._ne)}contains(r){let{lng:t,lat:i}=An.convert(r),a=this._sw.lat<=i&&i<=this._ne.lat,o=this._sw.lng<=t&&t<=this._ne.lng;return this._sw.lng>this._ne.lng&&(o=this._sw.lng>=t&&t>=this._ne.lng),a&&o}intersects(r){if(r=bp.convert(r),!(r.getNorth()>=this.getSouth()&&r.getSouth()<=this.getNorth()))return!1;let t=Math.abs(this.getEast()-this.getWest()),i=Math.abs(r.getEast()-r.getWest());if(t>=360||i>=360)return!0;let a=ch(this.getWest(),-180,180),o=ch(this.getEast(),-180,180),s=ch(r.getWest(),-180,180),l=ch(r.getEast(),-180,180),n=a>o,u=s>l;return n&&u?!0:n?l>=a||s<=o:u?o>=s||a<=l:s<=o&&l>=a}static convert(r){return r instanceof bp||!r?r:new bp(r)}static fromLngLat(r,t=0){let i=360*t/40075017,a=i/Math.cos(Math.PI/180*r.lat);return new bp(new An(r.lng-a,r.lat-i),new An(r.lng+a,r.lat+i))}adjustAntiMeridian(){let r=new An(this._sw.lng,this._sw.lat),t=new An(this._ne.lng,this._ne.lat);return r.lng>t.lng?new bp(r,new An(t.lng+360,t.lat)):new bp(r,t)}},wM=class{constructor(e,r,t){this.bounds=bh.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=t||24}validateBounds(e){return!Array.isArray(e)||e.length!==4?[-180,-90,180,90]:[Math.max(-180,e[0]),Math.max(-90,e[1]),Math.min(180,e[2]),Math.min(90,e[3])]}contains(e){let r=2**e.z,t={minX:Math.floor(lm(this.bounds.getWest())*r),minY:Math.floor(um(this.bounds.getNorth())*r),maxX:Math.ceil(lm(this.bounds.getEast())*r),maxY:Math.ceil(um(this.bounds.getSouth())*r)};return e.x>=t.minX&&e.x<t.maxX&&e.y>=t.minY&&e.y<t.maxY}},TM=class extends Nl{constructor(e,r,t,i){if(super(),this.id=e,this.dispatcher=t,this.type="vector",this.minzoom=0,this.maxzoom=22,this.scheme="xyz",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,yn(this,N1(r,["url","scheme","tileSize","promoteId","encoding"])),this._options=yn({type:"vector"},r),this._collectResourceTiming=r.collectResourceTiming,this.tileSize!==512)throw Error("vector tile sources must have a tileSize of 512");this.setEventedParent(i)}load(e=!1){return Xr(this,null,function*(){this._loaded=!1,this.fire(new zs("dataloading")),this._tileJSONRequest=new AbortController;try{let r=yield q5(this._options,this.map._requestManager,this._tileJSONRequest,this.map._ownerWindow);this._tileJSONRequest=null,this._loaded=!0,r&&(yn(this,r),r.bounds&&(this.tileBounds=new wM(r.bounds,this.minzoom,this.maxzoom)),this.fire(new zs("data",{sourceDataType:"metadata"})),this.fire(new zs("data",{sourceDataType:"content",sourceDataChanged:e})))}catch(r){this._tileJSONRequest=null,this._loaded=!0,jp(r)||this.fire(new Ln(Zu(r)))}})}loaded(){return this._loaded}hasTile(e){return!this.tileBounds||this.tileBounds.contains(e.canonical)}onAdd(e){this.map=e,this.load()}setSourceProperty(e){this._tileJSONRequest&&this._tileJSONRequest.abort(),e(),this.load(!0)}setTiles(e){return this.setSourceProperty(()=>{this.tiles=e,this._options.tiles=e}),this}setUrl(e){return this.setSourceProperty(()=>{this.url=e,this._options.url=e}),this}onRemove(){this._tileJSONRequest&&(this._tileJSONRequest=(this._tileJSONRequest.abort(),null))}serialize(){return yn({},this._options)}loadTile(e){return Xr(this,null,function*(){let r=e.tileID.canonical.url(this.tiles,this.map.getPixelRatio(),this.scheme),t={request:yield this.map._requestManager.transformRequest(r,"Tile"),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:this.map.getPixelRatio(),showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId,subdivisionGranularity:this.map.style.projection.subdivisionGranularity,encoding:this.encoding,overzoomParameters:yield this._getOverzoomParameters(e),etag:e.etag};t.request.collectResourceTiming=this._collectResourceTiming,yield this.dispatcher.waitForInitComplete();let i="RT";if(!e.actor||e.state==="expired")e.actor=this.dispatcher.getReadyActor(),i="LT";else if(e.state==="loading")return new Promise((a,o)=>{e.reloadPromise={resolve:a,reject:o}});e.abortController=new AbortController;try{let a=yield e.actor.sendAsync({type:i,data:t},e.abortController);if(delete e.abortController,e.aborted)return;this._afterTileLoadWorkerResponse(e,a);let o={};return a?.etagUnmodified&&(o.unmodified=!0),o}catch(a){if(delete e.abortController,e.aborted||jp(a))return;if(a&&a.status!==404)throw a;this._afterTileLoadWorkerResponse(e,null)}})}_getOverzoomParameters(e){return Xr(this,null,function*(){if(e.tileID.canonical.z<=this.maxzoom||this.map._zoomLevelsToOverscale===void 0)return;let r=e.tileID.scaledTo(this.maxzoom).canonical,t=r.url(this.tiles,this.map.getPixelRatio(),this.scheme);return{maxZoomTileID:r,overzoomRequest:yield this.map._requestManager.transformRequest(t,"Tile")}})}_afterTileLoadWorkerResponse(e,r){if(r?.resourceTiming&&(e.resourceTiming=r.resourceTiming),r&&this.map._refreshExpiredTiles&&e.setExpiryData(r),e.etag=r?.etag,e.loadVectorData(r,this.map.painter),e.reloadPromise){let t=e.reloadPromise;e.reloadPromise=null,this.loadTile(e).then(t.resolve).catch(t.reject)}}abortTile(e){return Xr(this,null,function*(){e.abortController&&(e.abortController.abort(),delete e.abortController),e.actor&&(yield e.actor.sendAsync({type:"AT",data:{uid:e.uid,type:this.type,source:this.id}}))})}unloadTile(e){return Xr(this,null,function*(){e.unloadVectorData(),e.actor&&(yield e.actor.sendAsync({type:"RMT",data:{uid:e.uid,type:this.type,source:this.id}}))})}hasTransition(){return!1}},_2=class extends Nl{constructor(e,r,t,i){super(),this.id=e,this.dispatcher=t,this.setEventedParent(i),this.type="raster",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme="xyz",this.tileSize=512,this._loaded=!1,this._premultiplyAlpha=!0,this._options=yn({type:"raster"},r),yn(this,N1(r,["url","scheme","tileSize"]))}load(e=!1){return Xr(this,null,function*(){this._loaded=!1,this.fire(new zs("dataloading")),this._tileJSONRequest=new AbortController;try{let r=yield q5(this._options,this.map._requestManager,this._tileJSONRequest,this.map._ownerWindow);this._tileJSONRequest=null,this._loaded=!0,r&&(yn(this,r),r.bounds&&(this.tileBounds=new wM(r.bounds,this.minzoom,this.maxzoom)),this.fire(new zs("data",{sourceDataType:"metadata"})),this.fire(new zs("data",{sourceDataType:"content",sourceDataChanged:e})))}catch(r){this._tileJSONRequest=null,this._loaded=!0,jp(r)||this.fire(new Ln(Zu(r)))}})}loaded(){return this._loaded}onAdd(e){this.map=e,this.load()}onRemove(){this._tileJSONRequest&&(this._tileJSONRequest=(this._tileJSONRequest.abort(),null))}setSourceProperty(e){this._tileJSONRequest&&(this._tileJSONRequest=(this._tileJSONRequest.abort(),null)),e(),this.load(!0)}setTiles(e){return this.setSourceProperty(()=>{this.tiles=e,this._options.tiles=e}),this}setUrl(e){return this.setSourceProperty(()=>{this.url=e,this._options.url=e}),this}serialize(){return yn({},this._options)}setPremultiplyAlpha(e){return this._premultiplyAlpha===e||this.setSourceProperty(()=>{this._premultiplyAlpha=e}),this}hasTile(e){return!this.tileBounds||this.tileBounds.contains(e.canonical)}loadTile(e){return Xr(this,null,function*(){var r;let t=e.tileID.canonical.url(this.tiles,this.map.getPixelRatio(),this.scheme),i=this._premultiplyAlpha,a=i?void 0:{premultiplyAlpha:"none"};e.abortController=new AbortController;try{let o=yield td.transformAndGetImage(this.map._requestManager,t,"Tile",e.abortController,this.map._refreshExpiredTiles,a);if(delete e.abortController,e.aborted){e.state="unloaded";return}if(o){this.map._refreshExpiredTiles&&(o.cacheControl||o.expires)&&e.setExpiryData({cacheControl:o.cacheControl,expires:o.expires});let s=this.map.painter.context,l=s.gl,n=(r=o.data)!=null?r:new Rs({width:1,height:1},new Uint8Array(4));e.texture=this.map.painter.getTileTexture(n.width),e.texture?e.texture.update(n,{useMipmap:!0,premultiply:i}):(e.texture=new jl(s,n,l.RGBA,{useMipmap:!0,premultiply:i}),e.texture.bind(l.LINEAR,l.CLAMP_TO_EDGE,l.LINEAR_MIPMAP_NEAREST)),e.state="loaded"}}catch(o){if(delete e.abortController,e.aborted)e.state="unloaded";else if(o)throw e.state="errored",o}})}abortTile(e){return Xr(this,null,function*(){e.abortController&&(e.abortController.abort(),delete e.abortController)})}unloadTile(e){return Xr(this,null,function*(){e.texture&&this.map.painter.saveTileTexture(e.texture)})}hasTransition(){return!1}},AM=class extends _2{constructor(e,r,t,i){super(e,r,t,i),this.type="raster-dem",this.maxzoom=22,this._options=yn({type:"raster-dem"},r),this.encoding=r.encoding||"mapbox",this.redFactor=r.redFactor,this.greenFactor=r.greenFactor,this.blueFactor=r.blueFactor,this.baseShift=r.baseShift}loadTile(e){return Xr(this,null,function*(){let r=e.tileID.canonical.url(this.tiles,this.map.getPixelRatio(),this.scheme);e.neighboringTiles=this._getNeighboringTiles(e.tileID),e.abortController=new AbortController;try{let t=yield td.transformAndGetImage(this.map._requestManager,r,"Tile",e.abortController,this.map._refreshExpiredTiles,{colorSpaceConversion:"none"});if(delete e.abortController,e.aborted){e.state="unloaded";return}if(t){if(this.map._refreshExpiredTiles&&(t.cacheControl||t.expires)&&e.setExpiryData({cacheControl:t.cacheControl,expires:t.expires}),!t.data){e.state="loaded";return}let i=t.data,a=P0(i)&&B4()?i:yield this.readImageNow(i),o={type:this.type,uid:e.uid,source:this.id,rawImageData:a,encoding:this.encoding,redFactor:this.redFactor,greenFactor:this.greenFactor,blueFactor:this.blueFactor,baseShift:this.baseShift};if(e.actor&&e.state!=="expired"&&e.state!=="reloading")return;yield this.dispatcher.waitForInitComplete(),(!e.actor||e.state==="expired")&&(e.actor=this.dispatcher.getReadyActor()),e.dem=yield e.actor.sendAsync({type:"LDT",data:o}),e.needsHillshadePrepare=!0,e.needsTerrainPrepare=!0,e.needsColorReliefPrepare=!0,e.state="loaded"}}catch(t){if(delete e.abortController,e.aborted)e.state="unloaded";else if(t)throw e.state="errored",t}})}readImageNow(e){return Xr(this,null,function*(){if(typeof VideoFrame<"u"&&l9()){let r=e.width+4,t=e.height+4;try{return new Rs({width:r,height:t},yield uJ(e,-2,-2,r,t))}catch{}}return yc.getImageData(e,2)})}_getNeighboringTiles(e){let r=e.canonical,t=2**r.z,i=(r.x-1+t)%t,a=r.x===0?e.wrap-1:e.wrap,o=(r.x+1+t)%t,s=r.x+1===t?e.wrap+1:e.wrap,l={};return l[new Cu(e.overscaledZ,a,r.z,i,r.y).key]={backfilled:!1},l[new Cu(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new Cu(e.overscaledZ,a,r.z,i,r.y-1).key]={backfilled:!1},l[new Cu(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new Cu(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<t&&(l[new Cu(e.overscaledZ,a,r.z,i,r.y+1).key]={backfilled:!1},l[new Cu(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new Cu(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l}unloadTile(e){return Xr(this,null,function*(){e.demTexture&&this.map.painter.saveTileTexture(e.demTexture),e.fbo&&(e.fbo.destroy(),delete e.fbo),e.dem&&delete e.dem,delete e.neighboringTiles,e.state="unloaded",e.actor&&(yield e.actor.sendAsync({type:"RDT",data:{type:this.type,uid:e.uid,source:this.id}}))})}},MM=class extends Nl{constructor(e,r,t,i){super(),this.id=e,this.type="geojson",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._isUpdatingWorker=!1,this._pendingWorkerUpdate={data:r.data},this.actorPromise=t.getActor(),this.setEventedParent(i),this._data=typeof r.data=="string"?{url:r.data}:{geojson:r.data},this._options=yn({},r),this._collectResourceTiming=r.collectResourceTiming,r.maxzoom!==void 0&&(this.maxzoom=r.maxzoom),r.type&&(this.type=r.type),r.attribution&&(this.attribution=r.attribution),this.promoteId=r.promoteId,r.clusterMaxZoom!==void 0&&this.maxzoom<=r.clusterMaxZoom&&To(`The maxzoom value "${this.maxzoom}" is expected to be greater than the clusterMaxZoom value "${r.clusterMaxZoom}".`),this.workerOptions=yn({source:this.id,geojsonVtOptions:{buffer:this._pixelsToTileUnits(r.buffer===void 0?128:r.buffer),tolerance:this._pixelsToTileUnits(r.tolerance===void 0?.375:r.tolerance),extent:Bi,maxZoom:this.maxzoom,lineMetrics:r.lineMetrics||!1,generateId:r.generateId||!1,promoteId:typeof r.promoteId=="string"?r.promoteId:void 0,cluster:r.cluster||!1,clusterOptions:{maxZoom:this._getClusterMaxZoom(r.clusterMaxZoom),minPoints:Math.max(2,r.clusterMinPoints||2),extent:Bi,radius:this._pixelsToTileUnits(r.clusterRadius||50),log:!1,generateId:r.generateId||!1}},clusterProperties:r.clusterProperties,filter:r.filter},r.workerOptions)}_hasPendingWorkerUpdate(){return this._pendingWorkerUpdate.data!==void 0||this._pendingWorkerUpdate.diff!==void 0||this._pendingWorkerUpdate.updateCluster}_pixelsToTileUnits(e){return e*(Bi/this.tileSize)}_tileUnitsToPixels(e){return e/(Bi/this.tileSize)}_getClusterMaxZoom(e){let r=e?Math.round(e):this.maxzoom-1;return Number.isInteger(e)||e===void 0||To(`Integer expected for option 'clusterMaxZoom': provided value "${e}" rounded to "${r}"`),r}load(){return Xr(this,null,function*(){yield this._updateWorkerData()})}onAdd(e){this.map=e,this.load()}setData(e){return this._data=typeof e=="string"?{url:e}:{geojson:e},this._pendingWorkerUpdate={data:e},this._updateWorkerData()}updateData(e){return this._pendingWorkerUpdate.diff=Tne(this._pendingWorkerUpdate.diff,e),this._updateWorkerData()}getData(){return Xr(this,null,function*(){return this._data.url&&(yield this.once("data")),this._data.geojson?this._data.geojson:{type:"FeatureCollection",features:Array.from(this._data.updateable.values())}})}getBounds(){return Xr(this,null,function*(){return $5(yield this.getData())})}setClusterOptions(e){return this.workerOptions.geojsonVtOptions.cluster=e.cluster,e.clusterRadius!==void 0&&(this.workerOptions.geojsonVtOptions.clusterOptions.radius=this._pixelsToTileUnits(e.clusterRadius)),e.clusterMaxZoom!==void 0&&(this.workerOptions.geojsonVtOptions.clusterOptions.maxZoom=this._getClusterMaxZoom(e.clusterMaxZoom)),this._pendingWorkerUpdate.updateCluster=!0,this._updateWorkerData()}getClusterOptions(){let{cluster:e,clusterOptions:r}=this.workerOptions.geojsonVtOptions;return{cluster:e,clusterMaxZoom:r.maxZoom,clusterRadius:this._tileUnitsToPixels(r.radius)}}getClusterExpansionZoom(e){return Xr(this,null,function*(){return(yield this.actorPromise).sendAsync({type:"GCEZ",data:{type:this.type,clusterId:e,source:this.id}})})}getClusterChildren(e){return Xr(this,null,function*(){return(yield this.actorPromise).sendAsync({type:"GCC",data:{type:this.type,clusterId:e,source:this.id}})})}getClusterLeaves(e,r,t){return Xr(this,null,function*(){return(yield this.actorPromise).sendAsync({type:"GCL",data:{type:this.type,source:this.id,clusterId:e,limit:r,offset:t}})})}_updateWorkerData(){return Xr(this,null,function*(){if(this._isUpdatingWorker)return this._updatePromise;if(!this._hasPendingWorkerUpdate()){To(`No pending worker updates for GeoJSONSource ${this.id}.`);return}let{data:e,diff:r,updateCluster:t}=this._pendingWorkerUpdate,i=this._getLoadGeoJSONParameters(e,r,t);e===void 0?r?this._pendingWorkerUpdate.diff=void 0:t&&(this._pendingWorkerUpdate.updateCluster=void 0):this._pendingWorkerUpdate.data=void 0,this._updatePromise=this._dispatchWorkerUpdate(i),yield this._updatePromise})}_getLoadGeoJSONParameters(e,r,t){return Xr(this,null,function*(){let i=yn({type:this.type,source:this.id},this.workerOptions);if(typeof e=="string")return i.request=yield this.map._requestManager.transformRequest(yc.resolveURL(e),"Source"),i.request.collectResourceTiming=this._collectResourceTiming,i;if(e!==void 0)return i.data=e,i;if(r)return i.dataDiff=r,i;if(t)return i.updateCluster=!0,i})}_dispatchWorkerUpdate(e){return Xr(this,null,function*(){this._isUpdatingWorker=!0,this.fire(new zs("dataloading"));try{let r=yield e,t=yield(yield this.actorPromise).sendAsync({type:"LD",data:r});if(this._isUpdatingWorker=!1,this._removed||t.abandoned){this.fire(new zs("dataabort"));return}t.data&&(this._data={geojson:t.data});let i=this._applyDiffToSource(r.dataDiff),a=this._getShouldReloadTileOptions(i),o={};this._applyResourceTiming(o,t),this.fire(new zs("data",ar(Ot({},o),{sourceDataType:"metadata"}))),this.fire(new zs("data",ar(Ot({},o),{sourceDataType:"content",shouldReloadTileOptions:a})))}catch(r){if(this._isUpdatingWorker=!1,this._removed){this.fire(new zs("dataabort"));return}this.fire(new Ln(Zu(r)))}finally{this._hasPendingWorkerUpdate()&&(yield this._updateWorkerData())}})}_applyResourceTiming(e,r){var t;if(!this._collectResourceTiming)return;let i=(t=r.resourceTiming)==null?void 0:t[this.id];if(!i)return;let a=i.slice(0);a?.length&&yn(e,{resourceTiming:a})}_applyDiffToSource(e){if(!e)return;let r=typeof this.promoteId=="string"?this.promoteId:void 0;if(!this._data.url&&!this._data.updateable){let i=bne(this._data.geojson,r);if(!i)throw Error(`GeoJSONSource "${this.id}": GeoJSON data is not compatible with updateData`);this._data={updateable:i}}if(!this._data.updateable)return;let t=wne(this._data.updateable,e,r);if(!(e.removeAll||this._options.cluster))return t}_getShouldReloadTileOptions(e){if(e)return{affectedBounds:e.filter(Boolean).map(r=>$5(r))}}shouldReloadTile(e,{affectedBounds:r}){if(e.state==="loading")return!0;if(e.state==="unloaded")return!1;let{buffer:t,extent:i}=this.workerOptions.geojsonVtOptions,a=kne(e.tileID.canonical,t/i);for(let o of r)if(a.intersects(o))return!0;return!1}loaded(){return!this._isUpdatingWorker&&!this._hasPendingWorkerUpdate()}loadTile(e){return Xr(this,null,function*(){let r=e.actor?"RT":"LT";e.actor=yield this.actorPromise;let t={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:this.map.getPixelRatio(),showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId,subdivisionGranularity:this.map.style.projection.subdivisionGranularity};e.abortController=new AbortController;try{let i=yield(yield this.actorPromise).sendAsync({type:r,data:t},e.abortController);delete e.abortController,e.unloadVectorData(),e.aborted||e.loadVectorData(i,this.map.painter,r==="RT")}catch(i){if(delete e.abortController,e.aborted||jp(i))return;throw i}})}abortTile(e){return Xr(this,null,function*(){e.abortController&&(e.abortController.abort(),delete e.abortController),e.aborted=!0})}unloadTile(e){return Xr(this,null,function*(){e.unloadVectorData(),yield(yield this.actorPromise).sendAsync({type:"RMT",data:{uid:e.uid,type:this.type,source:this.id}})})}onRemove(){this._removed=!0,this.actorPromise.then(e=>e.sendAsync({type:"RS",data:{type:this.type,source:this.id}}))}serialize(){return yn({},this._options,{type:this.type,data:this._data.updateable?{type:"FeatureCollection",features:Array.from(this._data.updateable.values())}:this._data.url||this._data.geojson})}hasTransition(){return!1}},tv=[0,0,1],pB=(e,r)=>({u_tl_parent:new mo(e,r.u_tl_parent),u_scale_parent:new Xa(e,r.u_scale_parent),u_buffer_scale:new Xa(e,r.u_buffer_scale),u_image_warp:new vc(e,r.u_image_warp),u_fade_t:new Xa(e,r.u_fade_t),u_opacity:new Xa(e,r.u_opacity),u_image0:new En(e,r.u_image0),u_image1:new En(e,r.u_image1),u_brightness_low:new Xa(e,r.u_brightness_low),u_brightness_high:new Xa(e,r.u_brightness_high),u_saturation_factor:new Xa(e,r.u_saturation_factor),u_contrast_factor:new Xa(e,r.u_contrast_factor),u_spin_weights:new vc(e,r.u_spin_weights),u_coords_top:new Sm(e,r.u_coords_top),u_coords_bottom:new Sm(e,r.u_coords_bottom)}),vB=(e,r,t,i,a,o)=>({u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_image_warp:o,u_fade_t:t.mix,u_opacity:t.opacity*i.paint.get("raster-opacity"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get("raster-brightness-min"),u_brightness_high:i.paint.get("raster-brightness-max"),u_saturation_factor:Lne(i.paint.get("raster-saturation")),u_contrast_factor:Dne(i.paint.get("raster-contrast")),u_spin_weights:Cne(i.paint.get("raster-hue-rotate")),u_coords_top:[a[0].x,a[0].y,a[1].x,a[1].y],u_coords_bottom:[a[3].x,a[3].y,a[2].x,a[2].y]}),Um=class{constructor(e,r,t){this.vertexBuffer=e,this.indexBuffer=r,this.segments=t}destroy(){this.vertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.vertexBuffer=null,this.indexBuffer=null,this.segments=null}},i0=ul([{name:"a_pos",type:"Int16",components:2}]),Zg=Bi/128,rv=class extends Nl{constructor(e,r,t,i){super(),this.imageWarp=tv,this.flippedWindingOrder=!1,this._warp="auto",this._imageDirty=!1,this._subdividedQuad=!1,this._subdividedMesh=null,this.id=e,this.dispatcher=t,this.coordinates=r.coordinates,this.type="image",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(i),this.options=r}load(e){return Xr(this,null,function*(){if(this.options.url===void 0){this._loaded=!0,this._finishLoading();return}this._loaded=!1,this.fire(new zs("dataloading")),this.url=this.options.url,this._abortController=new AbortController;try{let r=yield td.transformAndGetImage(this.map._requestManager,this.url,"Image",this._abortController);this._abortController=null,this._loaded=!0,r?.data?(this._setImage(r.data),e&&(this.coordinates=e),this._finishLoading()):this.fire(new Ln(Error(`Could not load image ${this.url}: the response is empty`)))}catch(r){if(jp(r))return;this._abortController=null,this._loaded=!0,this.fire(new Ln(Zu(r)))}})}loaded(){return this._loaded}updateImage(e){return this._abortController&&(this._abortController=(this._abortController.abort(),null)),"image"in e?(this._loaded=!0,this._setImage(e.image),e.coordinates&&(this.coordinates=e.coordinates),this._finishLoading(),this):e.url?(this.options.url=e.url,this.load(e.coordinates),this):this}_setImage(e){this.image=e,this._imageDirty=!0}getMesh(e,r){var t;return!this._subdividedQuad||r?null:((t=this._subdividedMesh)!=null||(this._subdividedMesh=W5(e,{granularity:16})),this._subdividedMesh)}_disposeTexture(){var e;(e=this.texture)==null||e.destroy(),this.texture=null}_finishLoading(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new zs("data",{sourceDataType:"metadata"})))}onAdd(e){this.map=e,this.load()}onRemove(){var e;this._abortController&&(this._abortController=(this._abortController.abort(),null)),this._disposeTexture(),(e=this._subdividedMesh)==null||e.destroy(),this._subdividedMesh=null,this.image=null,this.tiles={}}setWarp(e){return this._warp===e?this:(this._warp=e,this.tileCoords&&this.setCoordinates(this.coordinates),this)}getWarp(){return this._warp}setCoordinates(e){this.coordinates=e;let r=e.map(Qo.fromLngLat);return this.tileID=Fne(r),this.terrainTileRanges=this._getOverlappingTileRanges(r),this.minzoom=this.maxzoom=this.tileID.z,this.tileCoords=r.map(t=>this.tileID.getTilePoint(t)._round()),this.imageWarp=Ine(this.tileCoords,this._warp),this._subdividedQuad=this.imageWarp[2]>0&&!X5(this.tileCoords),this.flippedWindingOrder=Pne(this.tileCoords),this.fire(new zs("data",{sourceDataType:"content"})),this}prepare(){if(Object.keys(this.tiles).length===0||!this.image)return;let e=this.map.painter.context,r=e.gl;this.texture?this._imageDirty&&(this.texture.update(this.image),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)):(this.texture=new jl(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this._imageDirty=!1;let t=!1;for(let i in this.tiles){let a=this.tiles[i];a.state!=="loaded"&&(a.state="loaded",a.texture=this.texture,t=!0)}t&&this.fire(new zs("data",{sourceDataType:"idle",sourceId:this.id}))}loadTile(e){return Xr(this,null,function*(){var r;(r=this.tileID)!=null&&r.equals(e.tileID.canonical)?(this.tiles[String(e.tileID.wrap)]=e,e.buckets={}):e.state="errored"})}serialize(){let e={type:"image",coordinates:this.coordinates};return this.options.url!==void 0&&(e.url=this.options.url),e}hasTransition(){return!1}_getOverlappingTileRanges(e){let{minX:r,minY:t,maxX:i,maxY:a}=gh.fromPoints(e),o={};for(let s=0;s<=25;s++){let l=2**s,n=Math.floor(r*l),u=Math.floor(t*l),c=Math.floor(i*l),f=Math.floor(a*l),h=(n%l+l)%l,d=c%l,p=Math.floor(n/l),g=Math.floor(c/l);o[s]={minWrap:p,maxWrap:g,minTileXWrapped:h,maxTileXWrapped:d,minTileY:u,maxTileY:f}}return o}},SM=class extends rv{constructor(e,r,t,i){super(e,r,t,i),this._onPlayingHandler=()=>{var a;(a=this.map)==null||a.triggerRepaint()},this.roundZoom=!0,this.type="video",this.options=r}load(){return Xr(this,null,function*(){this._loaded=!1;let e=this.options;this.urls=[];for(let r of e.urls)this.urls.push((yield this.map._requestManager.transformRequest(r,"Source")).url);try{let r=yield SP(this.urls);if(this._loaded=!0,!r)return;this.video=r,this.video.loop=!0,this.video.addEventListener("playing",this._onPlayingHandler),this.map&&this.video.play(),this._finishLoading()}catch(r){this.fire(new Ln(Zu(r)))}})}pause(){this.video&&this.video.pause()}play(){this.video&&this.video.play()}seek(e){if(this.video){let r=this.video.seekable;e<r.start(0)||e>r.end(0)?this.fire(new Ln(new na(`sources.${this.id}`,null,`Playback for this video can be set only between the ${r.start(0)} and ${r.end(0)}-second mark.`))):this.video.currentTime=e}}getVideo(){return this.video}onAdd(e){this.map||(this.map=e,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))}onRemove(){super.onRemove(),this.video&&(this.video.removeEventListener("playing",this._onPlayingHandler),this.video.pause())}prepare(){if(Object.keys(this.tiles).length===0||this.video.readyState<2)return;let e=this.map.painter.context,r=e.gl;this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new jl(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE));let t=!1;for(let i in this.tiles){let a=this.tiles[i];a.state!=="loaded"&&(a.state="loaded",a.texture=this.texture,t=!0)}t&&this.fire(new zs("data",{sourceDataType:"idle",sourceId:this.id}))}serialize(){return{type:"video",urls:this.urls,coordinates:this.coordinates}}hasTransition(){return this.video&&!this.video.paused}},EM=class extends rv{constructor(e,r,t,i){super(e,r,t,i),r.coordinates?(!Array.isArray(r.coordinates)||r.coordinates.length!==4||r.coordinates.some(a=>!Array.isArray(a)||a.length!==2||a.some(o=>typeof o!="number")))&&this.fire(new Ln(new na(`sources.${e}`,null,'"coordinates" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new Ln(new na(`sources.${e}`,null,'missing required property "coordinates"'))),r.animate&&typeof r.animate!="boolean"&&this.fire(new Ln(new na(`sources.${e}`,null,'optional "animate" property must be a boolean value'))),r.canvas?typeof r.canvas!="string"&&!(r.canvas instanceof HTMLCanvasElement)&&this.fire(new Ln(new na(`sources.${e}`,null,'"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new Ln(new na(`sources.${e}`,null,'missing required property "canvas"'))),this.options=r,this.animate=r.animate===void 0||r.animate}load(){return Xr(this,null,function*(){if(this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof HTMLCanvasElement?this.options.canvas:document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()){this.fire(new Ln(Error("Canvas dimensions cannot be less than or equal to zero.")));return}this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this._playing=(this.prepare(),!1))},this._finishLoading()})}getCanvas(){return this.canvas}onAdd(e){this.map=e,this.load(),this.canvas&&this.animate&&this.play()}onRemove(){this._playing=!1,super.onRemove()}prepare(){let e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),this._hasInvalidDimensions()||Object.keys(this.tiles).length===0)return;let r=this.map.painter.context,t=r.gl;this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):(this.texture=new jl(r,this.canvas,t.RGBA,{premultiply:!0}),this.texture.bind(t.LINEAR,t.CLAMP_TO_EDGE));let i=!1;for(let a in this.tiles){let o=this.tiles[a];o.state!=="loaded"&&(o.state="loaded",o.texture=this.texture,i=!0)}i&&this.fire(new zs("data",{sourceDataType:"idle",sourceId:this.id}))}serialize(){return{type:"canvas",animate:this.animate,canvas:this.options.canvas,coordinates:this.coordinates}}hasTransition(){return this._playing}_hasInvalidDimensions(){for(let e of[this.canvas.width,this.canvas.height])if(isNaN(e)||e<=0)return!0;return!1}},kM={},mB=(e,r,t,i)=>{let a=new(CM(r.type))(e,r,t,i);if(a.id!==e)throw Error(`Expected Source id to be ${e} instead of ${a.id}`);return a},CM=e=>{switch(e){case"geojson":return MM;case"image":return rv;case"raster":return _2;case"raster-dem":return AM;case"vector":return TM;case"video":return SM;case"canvas":return EM}return kM[e]},gB=(e,r)=>{kM[e]=r},yB=(e,r)=>Xr(null,null,function*(){if(CM(e))throw Error(`A source type called "${e}" already exists.`);gB(e,r)}),x2="RTLPluginLoaded",_B=class extends Nl{constructor(...e){super(...e),this.status="unavailable",this.url=null,this.dispatcher=GA()}_syncState(e){return this.status=e,this.dispatcher.broadcast("SRPS",{pluginStatus:e,pluginURL:this.url}).catch(r=>{throw this.status="error",r})}getRTLTextPluginStatus(){return this.status}clearRTLTextPlugin(){this.status="unavailable",this.url=null}setRTLTextPlugin(e,r=!1){return Xr(this,null,function*(){if(this.url)throw Error("setRTLTextPlugin cannot be called multiple times.");if(this.url=yc.resolveURL(e),!this.url)throw Error(`requested url ${e} is invalid`);if(this.status==="unavailable")if(r)this.status="deferred",this._syncState(this.status);else return this._requestImport();else if(this.status==="requested")return this._requestImport()})}_requestImport(){return Xr(this,null,function*(){yield this._syncState("loading"),this.status="loaded",this.fire(new hf(x2))})}lazyLoad(){this.status==="unavailable"?this.status="requested":this.status==="deferred"&&this._requestImport()}},b2=null,DM=class{constructor(e,r){this.timeAdded=0,this.fadeEndTime=0,this.fadeOpacity=1,this.tileID=e,this.uid=x9(),this.uses=0,this.tileSize=r,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.hasRTLText=!1,this.dependencies={},this.rttObjects=[],this.rttFingerprint={},this.expiredRequestCount=0,this.state="loading",this.featureStateRevision=-1}isRenderable(e){return this.hasData()&&(!this.fadeEndTime||this.fadeOpacity>0)&&(e||!this.holdingForSymbolFade())}setCrossFadeLogic({fadingRole:e,fadingDirection:r,fadingParentID:t,fadeEndTime:i}){this.resetFadeLogic(),this.fadingRole=e,this.fadingDirection=r,this.fadingParentID=t,this.fadeEndTime=i}setSelfFadeLogic(e){this.resetFadeLogic(),this.selfFading=!0,this.fadeEndTime=e}resetFadeLogic(){this.fadingRole=null,this.fadingDirection=null,this.fadingParentID=null,this.selfFading=!1,this.timeAdded=hs(),this.fadeEndTime=0,this.fadeOpacity=1}wasRequested(){return this.state==="errored"||this.state==="loaded"||this.state==="reloading"}clearTextures(e){this.demTexture&&e.saveTileTexture(this.demTexture),this.demTexture=null}getRTT(e){return this.rttObjects[e]}acquireRTT(e,r,t){return this.rttObjects[r]=e.acquireRTT(t)}releaseRTT(e){if(this.rttObjects.length!==0){for(let r of this.rttObjects)r&&e.releaseRTT(r);this.rttObjects.length=0}}loadVectorData(e,r,t){if(e?.etagUnmodified===!0){this.state="loaded";return}if(this.hasData()&&this.unloadVectorData(),this.state="loaded",!e){this.collisionBoxArray=new NT;return}e.featureIndex&&(this.latestFeatureIndex=e.featureIndex,e.rawTileData?(this.latestRawTileData=e.rawTileData,this.latestEncoding=e.encoding,this.latestFeatureIndex.rawTileData=e.rawTileData,this.latestFeatureIndex.encoding=e.encoding):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData,this.latestFeatureIndex.encoding=this.latestEncoding)),this.collisionBoxArray=e.collisionBoxArray,this.buckets=zne(e.buckets,r?.style),this.hasSymbolBuckets=!1;for(let i in this.buckets){let a=this.buckets[i];if(a instanceof Ig)if(this.hasSymbolBuckets=!0,t)a.justReloaded=!0;else break}if(this.hasRTLText=!1,this.hasSymbolBuckets)for(let i in this.buckets){let a=this.buckets[i];if(a instanceof Ig&&a.hasRTLText){this.hasRTLText=!0,jg().lazyLoad();break}}this.queryPadding=0;for(let i in this.buckets){let a=this.buckets[i];this.queryPadding=Math.max(this.queryPadding,r.style.getLayer(i).queryRadius(a))}e.imageAtlas&&(this.imageAtlas=e.imageAtlas),e.glyphAtlasImage&&(this.glyphAtlasImage=e.glyphAtlasImage),this.dashPositions=e.dashPositions}unloadVectorData(){for(let e in this.buckets)this.buckets[e].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.imageAtlas=null,this.dashPositions=null,this.latestFeatureIndex=null,this.state="unloaded"}getBucket(e){return this.buckets[e.id]}upload(e){for(let t in this.buckets){let i=this.buckets[t];i.uploadPending()&&i.upload(e)}let r=e.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new jl(e,this.imageAtlas.image,r.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasImage=(this.glyphAtlasTexture=new jl(e,this.glyphAtlasImage,r.ALPHA),null))}prepare(e){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(e,this.imageAtlasTexture)}queryRenderedFeatures(e,r,t,i,a,o,s,l,n,u,c){var f;return(f=this.latestFeatureIndex)!=null&&f.rawTileData?this.latestFeatureIndex.query({queryGeometry:i,cameraQueryGeometry:a,scale:o,tileSize:this.tileSize,pixelPosMatrix:u,transform:l,params:s,queryPadding:this.queryPadding*n,getElevation:c},e,r,t):{}}querySourceFeatures(e,r){let t=this.latestFeatureIndex;if(!t?.rawTileData)return;let i=t.loadVTLayers(),a=r?.sourceLayer?r.sourceLayer:"",o=i._geojsonTileLayer||i[a];if(!o)return;let s=Z1(r?.filter,`querySourceFeatures[${a}].filter`,r?.globalState),{z:l,x:n,y:u}=this.tileID.canonical,c={z:l,x:n,y:u};for(let f=0;f<o.length;f++){let h=o.feature(f);if(s.needGeometry){let g=N0(h,!0);if(!s.filter(new ns(this.tileID.overscaledZ),g,this.tileID.canonical))continue}else if(!s.filter(new ns(this.tileID.overscaledZ),h))continue;let d=t.getId(h,a),p=new MA(h,l,n,u,d);p.tile=c,e.push(p)}}hasData(){return this.state==="loaded"||this.state==="reloading"||this.state==="expired"}patternsLoaded(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length}setExpiryData(e){let r=this.expirationTime;if(e.cacheControl){let t=oJ(e.cacheControl);t["max-age"]&&(this.expirationTime=Date.now()+t["max-age"]*1e3)}else e.expires&&(this.expirationTime=new Date(e.expires).getTime());if(this.expirationTime){let t=Date.now(),i=!1;if(this.expirationTime>t)i=!1;else if(!r)i=!0;else if(this.expirationTime<r)i=!0;else{let a=this.expirationTime-r;a?this.expirationTime=t+Math.max(a,3e4):i=!0}i?(this.expiredRequestCount++,this.state="expired"):this.expiredRequestCount=0}}getExpiryTimeout(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-new Date().getTime(),2**31-1)}setFeatureState(e,r,t){var i,a,o;if(!((i=this.latestFeatureIndex)!=null&&i.rawTileData)||Object.keys(e).length===0||this.featureStateRevision===t)return;this.featureStateRevision=t;let s=this.latestFeatureIndex.loadVTLayers();for(let l in this.buckets){if(!r.style.hasLayer(l))continue;let n=this.buckets[l],u=n.layers[0].sourceLayer||"_geojsonTileLayer",c=s[u],f=e[u];if(!c||!f||f.length===0)continue;n.update(f,c,((a=this.imageAtlas)==null?void 0:a.patternPositions)||{},this.dashPositions||{});let h=(o=r?.style)==null?void 0:o.getLayer(l);h&&(this.queryPadding=Math.max(this.queryPadding,h.queryRadius(n)))}}holdingForSymbolFade(){return this.symbolFadeHoldUntil!==void 0}symbolFadeFinished(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<hs()}clearSymbolFadeHold(){this.symbolFadeHoldUntil=void 0}setSymbolHoldDuration(e){this.symbolFadeHoldUntil=hs()+e}setDependencies(e,r){let t={};for(let i of r)t[i]=!0;this.dependencies[e]=t}hasDependency(e,r){for(let t of e){let i=this.dependencies[t];if(i){for(let a of r)if(i[a])return!0}}return!1}},xB=class{constructor(){this.state={},this.stateChanges={},this.deletedStates={},this.revision=0}updateState(e,r,t){var i,a,o,s,l;let n=String(r);if((i=this.stateChanges)[e]||(i[e]={}),(a=this.stateChanges[e])[n]||(a[n]={}),yn(this.stateChanges[e][n],t),this.deletedStates[e]===null){this.deletedStates[e]={};for(let u in this.state[e])if(u===n){this.deletedStates[e][n]={};for(let c in this.state[e][u])t[c]===void 0&&(this.deletedStates[e][n][c]=null)}else this.deletedStates[e][u]=null}else if(((o=this.deletedStates[e])==null?void 0:o[n])===null){this.deletedStates[e][n]={};for(let u in this.state[e][n])t[u]===void 0&&(this.deletedStates[e][n][u]=null)}else for(let u in t)((l=(s=this.deletedStates[e])==null?void 0:s[n])==null?void 0:l[u])===null&&delete this.deletedStates[e][n][u]}removeFeatureState(e,r,t){var i,a,o;if(this.deletedStates[e]===null)return;let s=String(r);if((i=this.deletedStates)[e]||(i[e]={}),t&&r!==void 0)this.deletedStates[e][s]!==null&&((a=this.deletedStates[e])[s]||(a[s]={}),this.deletedStates[e][s][t]=null);else if(r!==void 0)if((o=this.stateChanges[e])!=null&&o[s])for(t in this.deletedStates[e][s]={},this.stateChanges[e][s])this.deletedStates[e][s][t]=null;else this.deletedStates[e][s]=null;else this.deletedStates[e]=null}getState(e,r){let t=String(r),i=this.state[e]||{},a=this.stateChanges[e]||{},o=yn({},i[t],a[t]);if(this.deletedStates[e]===null)return{};if(this.deletedStates[e]){let s=this.deletedStates[e][r];if(s===null)return{};for(let l in s)delete o[l]}return o}initializeTileState(e,r){let t={};for(let i in this.state)t[i]=Z5(this.state[i]);e.setFeatureState(t,r,this.revision)}coalesceChanges(e,r){var t,i,a;let o={};for(let l in this.stateChanges){(t=this.state)[l]||(t[l]={}),o[l]||(o[l]={});for(let n in this.stateChanges[l])(i=this.state[l])[n]||(i[n]={}),yn(this.state[l][n],this.stateChanges[l][n]),o[l][n]=this.state[l][n]}for(let l in this.deletedStates)if((a=this.state)[l]||(a[l]={}),o[l]||(o[l]={}),this.deletedStates[l]===null)for(let n in this.state[l])this.state[l][n]={},o[l][n]={};else for(let n in this.deletedStates[l]){if(this.deletedStates[l][n]===null)this.state[l][n]={};else for(let u of Object.keys(this.deletedStates[l][n]))delete this.state[l][n][u];o[l][n]=this.state[l][n]}if(this.stateChanges={},this.deletedStates={},Object.keys(o).length===0)return;this.revision++;let s={};for(let l in o)s[l]=Z5(o[l]);e.setFeatureState(s,r,this.revision)}},w2=class aU{constructor(r,t){this.min=r,this.max=t,this.center=Ws([],lh([],this.min,this.max),.5)}quadrant(r){let t=[r%2==0,r<2],i=N4(this.min),a=N4(this.max);for(let o=0;o<t.length;o++)i[o]=t[o]?this.min[o]:this.center[o],a[o]=t[o]?this.center[o]:this.max[o];return a[2]=this.max[2],new aU(i,a)}distanceX(r){return Math.max(Math.min(this.max[0],r[0]),this.min[0])-r[0]}distanceY(r){return Math.max(Math.min(this.max[1],r[1]),this.min[1])-r[1]}intersectsFrustum(r){let t=!0;for(let i of r.planes){let a=this.intersectsPlane(i);if(a===0)return 0;a===1&&(t=!1)}return t?2:r.aabb.min[0]>this.max[0]||r.aabb.min[1]>this.max[1]||r.aabb.min[2]>this.max[2]||r.aabb.max[0]<this.min[0]||r.aabb.max[1]<this.min[1]||r.aabb.max[2]<this.min[2]?0:1}intersectsPlane(r){let t=r[3],i=r[3];for(let a=0;a<3;a++)r[a]>0?(t+=r[a]*this.min[a],i+=r[a]*this.max[a]):(i+=r[a]*this.min[a],t+=r[a]*this.max[a]);return t>=0?2:i<0?0:1}},T2=class nU{constructor(r,t,i){this.points=r,this.planes=t,this.aabb=i}static fromInvProjectionMatrix(r,t=1,i=0,a,o){let s=[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]],l=o?[[6,5,4],[0,1,2],[0,3,7],[2,1,5],[3,2,6],[0,4,5]]:[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]],n=2**i,u=s.map(d=>Bne(d,r,t,n));a&&One(u,l[0],a,o);let c=l.map(d=>{let p=Sd([],u[d[0]],u[d[1]]),g=Sd([],u[d[2]],u[d[1]]),m=qc([],uf([],p,g)),y=-Kl(m,u[d[1]]);return m.concat(y)}),f=[1/0,1/0,1/0],h=[-1/0,-1/0,-1/0];for(let d of u)for(let p=0;p<3;p++)f[p]=Math.min(f[p],d[p]),h[p]=Math.max(h[p],d[p]);return new nU(u,c,new w2(f,h))}},bB=HA(9.314,3),LM=class{constructor(){this._tiles={}}handleWrapJump(e){let r={};for(let t in this._tiles){let i=this._tiles[t];i.tileID=i.tileID.unwrapTo(i.tileID.wrap+e),r[i.tileID.key]=i}this._tiles=r}setFeatureState(e,r,t){for(let i in this._tiles)this._tiles[i].setFeatureState(e,r,t)}getAllTiles(){return Object.values(this._tiles)}getAllIds(e=!1){return e?Object.values(this._tiles).map(r=>r.tileID).sort(OF).map(r=>r.key):Object.keys(this._tiles)}getTileById(e){return this._tiles[e]}setTile(e,r){this._tiles[e]=r}deleteTileById(e){delete this._tiles[e]}getLoadedTile(e){let r=this.getTileById(e.key);return r?.hasData()?r:null}isIdRenderable(e,r=!1){var t;return(t=this.getTileById(e))==null?void 0:t.isRenderable(r)}getRenderableIds(e=0,r){let t=[];for(let i of this.getAllIds())this.isIdRenderable(i,r)&&t.push(this.getTileById(i));return r?t.sort((i,a)=>{let o=i.tileID,s=a.tileID,l=new Wr(o.canonical.x,o.canonical.y)._rotate(-e),n=new Wr(s.canonical.x,s.canonical.y)._rotate(-e);return o.overscaledZ-s.overscaledZ||n.y-l.y||n.x-l.x}).map(i=>i.tileID.key):t.map(i=>i.tileID).sort(OF).map(i=>i.key)}},A2=(qm=class extends Nl{constructor(e,r,t){super(),this._maxContentElevationSeen=0,this.id=e,this.dispatcher=t,this.on("data",i=>{this._dataHandler(i)}),this.on("dataloading",()=>{this._sourceErrored=!1}),this.on("error",()=>{this._sourceErrored=this._source.loaded()}),this._source=mB(e,r,t,this),this._inViewTiles=new LM,this._outOfViewCache=new k5(0,i=>this._unloadTile(i)),this._timers={},this._maxTileCacheSize=null,this._maxTileCacheZoomLevels=null,this._rasterFadeDuration=0,this._maxFadingAncestorLevels=5,this._state=new xB,this._didEmitContent=!1,this._updated=!1}onAdd(e){var r;this.map=e,this._maxTileCacheSize=e?e._maxTileCacheSize:null,this._maxTileCacheZoomLevels=e?e._maxTileCacheZoomLevels:null,(r=this._source)!=null&&r.onAdd&&this._source.onAdd(e)}onRemove(e){var r;for(let t of this._inViewTiles.getAllTiles())t.unloadVectorData();this.clearTiles(),(r=this._source)!=null&&r.onRemove&&this._source.onRemove(e),this._inViewTiles=new LM}loaded(){if(this._sourceErrored)return!0;if(!this._sourceLoaded||!this._source.loaded())return!1;if((this.used!==void 0||this.usedForTerrain!==void 0)&&!this.used&&!this.usedForTerrain)return!0;if(!this._updated)return!1;for(let e of this._inViewTiles.getAllTiles())if(e.state!=="loaded"&&e.state!=="errored")return!1;return!0}getSource(){return this._source}getState(){return this._state}pause(){this._paused=!0}resume(){if(!this._paused)return;let e=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,e&&this.reload(),this.transform&&this.update(this.transform,this.terrain)}_loadTile(e,r,t,i){return Xr(this,null,function*(){try{let a=yield this._source.loadTile(e);this._tileLoaded(e,r,t,i,a)}catch(a){e.state="errored",a.status===404?this.update(this.transform,this.terrain):this._source.fire(new Ln(Zu(a),{tile:e}))}})}_unloadTile(e){this._source.unloadTile&&this._source.unloadTile(e)}_abortTile(e){this._source.abortTile&&this._source.abortTile(e),this._source.fire(new zs("dataabort",{tile:e,coord:e.tileID}))}serialize(){return this._source.serialize()}prepare(e){this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._inViewTiles,this.map?this.map.painter:null);for(let r of this._inViewTiles.getAllTiles())r.upload(e),r.prepare(this.map.style.imageManager)}getIds(){return this._inViewTiles.getAllIds(!0)}getRenderableIds(e){var r;return this._inViewTiles.getRenderableIds((r=this.transform)==null?void 0:r.bearingInRadians,e)}hasRenderableParent(e){let r=e.overscaledZ-1;if(r>=this._source.minzoom){let t=this.getLoadedTile(e.scaledTo(r));if(t)return this._inViewTiles.isIdRenderable(t.tileID.key)}return!1}reload(e,r=void 0){if(this._paused){this._shouldReloadOnResume=!0;return}this._outOfViewCache.reset();for(let t of this._inViewTiles.getAllIds()){let i=this._inViewTiles.getTileById(t);(!r||this._source.shouldReloadTile(i,r))&&(e?this._reloadTile(t,i.state==="errored"?"loading":"expired"):i.state!=="errored"&&this._reloadTile(t,"reloading"))}}_reloadTile(e,r){return Xr(this,null,function*(){let t=this._inViewTiles.getTileById(e);if(!t)return;let i=t.hasData();t.state!=="loading"&&(t.state=r),yield this._loadTile(t,e,r,i)})}_tileLoaded(e,r,t,i,a){i||(e.timeAdded=hs(),e.selfFading&&(e.fadeEndTime=e.timeAdded+this._rasterFadeDuration)),t==="expired"&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),!a?.unmodified&&(this.getSource().type==="raster-dem"&&e.dem&&Xne(e,this._inViewTiles),e.featureStateRevision=-1,this._state.initializeTileState(e,this.map?this.map.painter:null),e.aborted||this._source.fire(new zs("data",{tile:e,coord:e.tileID})))}getTile(e){return this.getTileByID(e.key)}getTileByID(e){return this._inViewTiles.getTileById(e)}_retainLoadedChildren(e,r){let t=this._getLoadedDescendents(r),i=new Set;for(let a of r){let o=t[a.key];if(!o?.length){i.add(a);continue}let s=a.overscaledZ+qm.maxOverzooming,l=o.filter(c=>c.tileID.overscaledZ<=s);if(!l.length){i.add(a);continue}let n=Math.min(...l.map(c=>c.tileID.overscaledZ)),u=l.filter(c=>c.tileID.overscaledZ===n).map(c=>c.tileID);for(let c of u)e[c.key]=c;this._areDescendentsComplete(u,n,a.overscaledZ)||i.add(a)}return i}_getLoadedDescendents(e){var r;let t={};for(let i of this._inViewTiles.getAllTiles().filter(a=>a.hasData()))for(let a of e)i.tileID.isChildOf(a)&&(t[r=a.key]||(t[r]=[]),t[a.key].push(i));return t}_areDescendentsComplete(e,r,t){return e.length===1&&e[0].isOverscaled()?e[0].overscaledZ===r:4**(r-t)===e.length}getLoadedTile(e){return this._inViewTiles.getLoadedTile(e)}updateCacheSize(e){let r=(Math.ceil(e.width/this._source.tileSize)+1)*(Math.ceil(e.height/this._source.tileSize)+1),t=this._maxTileCacheZoomLevels===null?ff.MAX_TILE_CACHE_ZOOM_LEVELS:this._maxTileCacheZoomLevels,i=Math.floor(r*t),a=typeof this._maxTileCacheSize=="number"?Math.min(this._maxTileCacheSize,i):i;this._outOfViewCache.setMaxSize(a)}handleWrapJump(e){let r=(e-(this._prevLng===void 0?e:this._prevLng))/360,t=Math.round(r);this._prevLng=e,t&&(this._inViewTiles.handleWrapJump(t),this._resetTileReloadTimers())}_updateMaxContentElevation(){var e,r;let t=this._maxContentElevationSeen,i=(r=(e=this.map)==null?void 0:e.style)==null?void 0:r._layers;if(!i)return t;let a=this._inViewTiles.getAllTiles();for(let o in i){let s=i[o];if(s.type!=="symbol"||s.source!==this.id||s.isHidden(this.transform.zoom))continue;let l=s;if(l.layout){t=Math.max(t,l.layout.get("symbol-height-offset").constantOr(0));for(let n of a){let u=n.getBucket(s);u&&u.maxHeightOffset>t&&(t=u.maxHeightOffset)}}}return this._maxContentElevationSeen=t,t}update(e,r){if(!this._sourceLoaded||this._paused)return;this.transform=e,this.terrain=r,this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng);let t;!this.used&&!this.usedForTerrain?t=[]:this._source.tileID?t=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(l=>new Cu(l.canonical.z,l.wrap,l.canonical.z,l.canonical.x,l.canonical.y)):(t=Bm(e,{tileSize:this.usedForTerrain?this.tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.type==="vector"&&this.map._zoomLevelsToOverscale!==void 0?Math.max(this._source.maxzoom,e.maxZoom-this.map._zoomLevelsToOverscale):this._source.maxzoom,roundZoom:!this.usedForTerrain&&this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled,terrain:r,calculateTileZoom:this._source.calculateTileZoom,maxContentElevation:this._updateMaxContentElevation()}),this._source.hasTile&&(t=t.filter(l=>this._source.hasTile(l)))),this.usedForTerrain&&(t=this._addTerrainIdealTiles(t));let i=t.length===0&&!this._updated&&this._didEmitContent;this._updated=!0,i&&this.fire(new zs("data",{sourceDataType:"idle",sourceId:this.id}));let a=$A(e,this._source),o=this._updateRetainedTiles(t,a),s=J5(this._source.type);s&&this._rasterFadeDuration>0&&!r&&Gne(this._inViewTiles,t,o,this._maxFadingAncestorLevels,this._source.minzoom,this._source.maxzoom,this._rasterFadeDuration),s?this._cleanUpRasterTiles(o):this._cleanUpVectorTiles(o)}_cleanUpRasterTiles(e){for(let r of this._inViewTiles.getAllIds())e[r]||this._removeTile(r)}_cleanUpVectorTiles(e){for(let r of this._inViewTiles.getAllIds()){let t=this._inViewTiles.getTileById(r);if(e[r]){t.clearSymbolFadeHold();continue}if(!t.hasSymbolBuckets){this._removeTile(r);continue}t.holdingForSymbolFade()?t.symbolFadeFinished()&&this._removeTile(r):t.setSymbolHoldDuration(this.map._fadeDuration)}}_addTerrainIdealTiles(e){let r=[];for(let t of e)if(t.canonical.z>this._source.minzoom){let i=t.scaledTo(t.canonical.z-1);r.push(i);let a=t.scaledTo(Math.max(this._source.minzoom,Math.min(t.canonical.z,5)));r.push(a)}return e.concat(r)}releaseSymbolFadeTiles(){for(let e of this._inViewTiles.getAllIds())this._inViewTiles.getTileById(e).holdingForSymbolFade()&&this._removeTile(e)}_updateRetainedTiles(e,r){var t;let i=new Set;for(let n of e)this._addTile(n).hasData()||i.add(n);let a=e.reduce((n,u)=>(n[u.key]=u,n),{}),o=this._retainLoadedChildren(a,i),s={},l=Math.max(r-qm.maxUnderzooming,this._source.minzoom);for(let n of o){let u=this._inViewTiles.getTileById(n.key),c=u?.wasRequested();for(let f=n.overscaledZ-1;f>=l;--f){let h=n.scaledTo(f);if(s[h.key])break;if(s[h.key]=!0,u=this.getTile(h),!u&&c&&(u=this._addTile(h)),u){let d=u.hasData();if((d||!((t=this.map)!=null&&t.cancelPendingTileRequestsWhileZooming)||c)&&(a[h.key]=h),c=u.wasRequested(),d)break}}}return a}_addTile(e){let r=this._inViewTiles.getTileById(e.key);if(r)return r;r=this._outOfViewCache.getAndRemove(e),r&&(r.resetFadeLogic(),this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null));let t=r;return r||(r=new DM(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,e.key,r.state,!1)),r.uses++,this._inViewTiles.setTile(e.key,r),t||this._source.fire(new zs("dataloading",{tile:r,coord:r.tileID})),r}_setTileReloadTimer(e,r){this._clearTileReloadTimer(e);let t=r.getExpiryTimeout();if(t){let i=()=>{this._reloadTile(e,"expired"),delete this._timers[e]};this._timers[e]=setTimeout(i,t)}}_clearTileReloadTimer(e){let r=this._timers[e];r&&(clearTimeout(r),delete this._timers[e])}_resetTileReloadTimers(){for(let e in this._timers)clearTimeout(this._timers[e]),delete this._timers[e];for(let e of this._inViewTiles.getAllIds()){let r=this._inViewTiles.getTileById(e);this._setTileReloadTimer(e,r)}}refreshTiles(e){for(let r of this._inViewTiles.getAllIds()){let t=this._inViewTiles.getTileById(r);(this._inViewTiles.isIdRenderable(r)||t.state=="errored")&&e.some(i=>i.equals(t.tileID.canonical))&&this._reloadTile(r,"expired")}}_removeTile(e){let r=this._inViewTiles.getTileById(e);r&&(r.uses--,this._inViewTiles.deleteTileById(e),this._clearTileReloadTimer(e),!(r.uses>0)&&(r.hasData()&&r.state!=="reloading"?this._outOfViewCache.add(r.tileID,r,r.getExpiryTimeout()):(r.aborted=!0,this._abortTile(r),this._unloadTile(r))))}_dataHandler(e){if(e.dataType==="source"){if(e.sourceDataType==="metadata"){this._sourceLoaded=!0;return}e.sourceDataType==="content"&&this._sourceLoaded&&!this._paused&&(this.reload(e.sourceDataChanged,e.shouldReloadTileOptions),this.transform&&this.update(this.transform,this.terrain),this._didEmitContent=!0)}}resetMaxContentElevation(){this._maxContentElevationSeen=0}clearTiles(){this._shouldReloadOnResume=!1,this._paused=!1,this.resetMaxContentElevation();for(let e of this._inViewTiles.getAllIds())this._removeTile(e);this._outOfViewCache.reset()}tilesIn(e,r,t){let i=[],a=this.transform;if(!a)return i;let o=a.getCoveringTilesDetailsProvider().allowWorldCopies(),s=t?a.getCameraQueryGeometry(e):e,l=h=>a.screenPointToMercatorCoordinate(h,this.terrain),n=this.transformBbox(e,l,!o),u=this.transformBbox(s,l,!o),c=this.getIds(),f=gh.fromPoints(u);for(let h of c){let d=this._inViewTiles.getTileById(h);if(d.holdingForSymbolFade())continue;let p=o?[d.tileID]:[d.tileID.unwrapTo(-1),d.tileID.unwrapTo(0)],g=2**(a.zoom-d.tileID.overscaledZ),m=r*d.queryPadding*Bi/d.tileSize/g;for(let y of p){let _=f.map(v=>y.getTilePoint(new Qo(v.x,v.y)));if(_.expandBy(m),_.intersects(cR)){let v=n.map(S=>y.getTilePoint(S)),x=u.map(S=>y.getTilePoint(S));i.push({tile:d,tileID:o?y:y.unwrapTo(0),queryGeometry:v,cameraQueryGeometry:x,scale:g})}}}return i}transformBbox(e,r,t){let i=e.map(r);if(t){let a=gh.fromPoints(e);a.shrinkBy(Math.min(a.width(),a.height())*.001);let o=a.map(r);gh.fromPoints(i).covers(o)||(i=i.map(s=>s.x>.5?new Qo(s.x-1,s.y,s.z):s))}return i}getVisibleCoordinates(e){let r=this.getRenderableIds(e).map(t=>this._inViewTiles.getTileById(t).tileID);return this.transform&&this.transform.populateCache(r),r}hasTransition(){return this._source.hasTransition()?!0:J5(this._source.type)&&Yne(this._inViewTiles,this._rasterFadeDuration)}setRasterFadeDuration(e){this._rasterFadeDuration=e}setFeatureState(e,r,t){e||(e=Bg),this._state.updateState(e,r,t)}removeFeatureState(e,r,t){e||(e=Bg),this._state.removeFeatureState(e,r,t)}getFeatureState(e,r){return e||(e=Bg),this._state.getState(e,r)}setDependencies(e,r,t){let i=this._inViewTiles.getTileById(e);i&&i.setDependencies(r,t)}reloadTilesForDependencies(e,r){for(let t of this._inViewTiles.getAllIds())this._inViewTiles.getTileById(t).hasDependency(e,r)&&this._reloadTile(t,"reloading");this._outOfViewCache.filter(t=>!t.hasDependency(e,r))}areTilesLoaded(){for(let e of this._inViewTiles.getAllTiles())if(e.state!=="loaded"&&e.state!=="errored")return!1;return!0}},qm.maxUnderzooming=10,qm.maxOverzooming=3,qm),wB=class{constructor(e,r){this.reset(e,r)}reset(e,r){this.points=e||[],this._distances=[0];for(let t=1;t<this.points.length;t++)this._distances[t]=this._distances[t-1]+this.points[t].dist(this.points[t-1]);this.length=this._distances[this._distances.length-1],this.padding=Math.min(r||0,this.length*.5),this.paddedLength=this.length-this.padding*2}lerp(e){if(this.points.length===1)return this.points[0];e=to(e,0,1);let r=1,t=this._distances[r],i=e*this.paddedLength+this.padding;for(;t<i&&r<this._distances.length;)t=this._distances[++r];let a=r-1,o=this._distances[a],s=t-o,l=s>0?(i-o)/s:0;return this.points[a].mult(1-l).add(this.points[r].mult(l))}},FM=class{constructor(e,r,t){let i=this.boxCells=[],a=this.circleCells=[];this.xCellCount=Math.ceil(e/t),this.yCellCount=Math.ceil(r/t);for(let o=0;o<this.xCellCount*this.yCellCount;o++)i.push([]),a.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=e,this.height=r,this.xScale=this.xCellCount/e,this.yScale=this.yCellCount/r,this.boxUid=0,this.circleUid=0}keysLength(){return this.boxKeys.length+this.circleKeys.length}insert(e,r,t,i,a){this._forEachCell(r,t,i,a,this._insertBoxCell,this.boxUid++),this.boxKeys.push(e),this.bboxes.push(r),this.bboxes.push(t),this.bboxes.push(i),this.bboxes.push(a)}insertCircle(e,r,t,i){this._forEachCell(r-i,t-i,r+i,t+i,this._insertCircleCell,this.circleUid++),this.circleKeys.push(e),this.circles.push(r),this.circles.push(t),this.circles.push(i)}_insertBoxCell(e,r,t,i,a,o){this.boxCells[a].push(o)}_insertCircleCell(e,r,t,i,a,o){this.circleCells[a].push(o)}_query(e,r,t,i,a,o,s){if(t<0||e>this.width||i<0||r>this.height)return[];let l=[];if(e<=0&&r<=0&&this.width<=t&&this.height<=i){if(a)return[{key:null,x1:e,y1:r,x2:t,y2:i}];for(let n=0;n<this.boxKeys.length;n++)l.push({key:this.boxKeys[n],x1:this.bboxes[n*4],y1:this.bboxes[n*4+1],x2:this.bboxes[n*4+2],y2:this.bboxes[n*4+3]});for(let n=0;n<this.circleKeys.length;n++){let u=this.circles[n*3],c=this.circles[n*3+1],f=this.circles[n*3+2];l.push({key:this.circleKeys[n],x1:u-f,y1:c-f,x2:u+f,y2:c+f})}}else{let n={hitTest:a,overlapMode:o,seenUids:{box:{},circle:{}}};this._forEachCell(e,r,t,i,this._queryCell,l,n,s)}return l}query(e,r,t,i){return this._query(e,r,t,i,!1,null)}hitTest(e,r,t,i,a,o){return this._query(e,r,t,i,!0,a,o).length>0}hitTestCircle(e,r,t,i,a){let o=e-t,s=e+t,l=r-t,n=r+t;if(s<0||o>this.width||n<0||l>this.height)return!1;let u=[],c={hitTest:!0,overlapMode:i,circle:{x:e,y:r,radius:t},seenUids:{box:{},circle:{}}};return this._forEachCell(o,l,s,n,this._queryCellCircle,u,c,a),u.length>0}_queryCell(e,r,t,i,a,o,s,l){let{seenUids:n,hitTest:u,overlapMode:c}=s,f=this.boxCells[a],h=1e-6;if(f!==null){let p=this.bboxes;for(let g of f)if(!n.box[g]){n.box[g]=!0;let m=g*4,y=this.boxKeys[g];if(e<=p[m+2]+h&&r<=p[m+3]+h&&t>=p[m+0]-h&&i>=p[m+1]-h&&(!l||l(y))&&(!u||!Jb(c,y.overlapMode))&&(o.push({key:y,x1:p[m],y1:p[m+1],x2:p[m+2],y2:p[m+3]}),u))return!0}}let d=this.circleCells[a];if(d!==null){let p=this.circles;for(let g of d)if(!n.circle[g]){n.circle[g]=!0;let m=g*3,y=this.circleKeys[g];if(this._circleAndRectCollide(p[m],p[m+1],p[m+2],e,r,t,i)&&(!l||l(y))&&(!u||!Jb(c,y.overlapMode))){let _=p[m],v=p[m+1],x=p[m+2];if(o.push({key:y,x1:_-x,y1:v-x,x2:_+x,y2:v+x}),u)return!0}}}return!1}_queryCellCircle(e,r,t,i,a,o,s,l){let{circle:n,seenUids:u,overlapMode:c}=s,f=this.boxCells[a];if(f!==null){let d=this.bboxes;for(let p of f)if(!u.box[p]){u.box[p]=!0;let g=p*4,m=this.boxKeys[p];if(this._circleAndRectCollide(n.x,n.y,n.radius,d[g+0],d[g+1],d[g+2],d[g+3])&&(!l||l(m))&&!Jb(c,m.overlapMode))return o.push(!0),!0}}let h=this.circleCells[a];if(h!==null){let d=this.circles;for(let p of h)if(!u.circle[p]){u.circle[p]=!0;let g=p*3,m=this.circleKeys[p];if(this._circlesCollide(d[g],d[g+1],d[g+2],n.x,n.y,n.radius)&&(!l||l(m))&&!Jb(c,m.overlapMode))return o.push(!0),!0}}}_forEachCell(e,r,t,i,a,o,s,l){let n=this._convertToXCellCoord(e),u=this._convertToYCellCoord(r),c=this._convertToXCellCoord(t),f=this._convertToYCellCoord(i);for(let h=n;h<=c;h++)for(let d=u;d<=f;d++){let p=this.xCellCount*d+h;if(a.call(this,e,r,t,i,p,o,s,l))return}}_convertToXCellCoord(e){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(e*this.xScale)))}_convertToYCellCoord(e){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(e*this.yScale)))}_circlesCollide(e,r,t,i,a,o){let s=i-e,l=a-r,n=t+o;return n*n>s*s+l*l}_circleAndRectCollide(e,r,t,i,a,o,s){let l=(o-i)/2,n=Math.abs(e-(i+l));if(n>l+t)return!1;let u=(s-a)/2,c=Math.abs(r-(a+u));if(c>u+t)return!1;if(n<=l||c<=u)return!0;let f=n-l,h=c-u;return f*f+h*h<=t*t}},TB=Rp(),AB=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]),MB=class{constructor(e,r=new FM(e.width+200,e.height+200,25),t=new FM(e.width+200,e.height+200,25)){this.transform=e,this.grid=r,this.ignoredGrid=t,this.pitchFactor=Math.cos(e.pitch*Math.PI/180)*e.cameraToCenterDistance,this.screenRightBoundary=e.width+100,this.screenBottomBoundary=e.height+100,this.gridRightBoundary=e.width+200,this.gridBottomBoundary=e.height+200,this.perspectiveRatioCutoff=.6}placeCollisionBox(e,r,t,i,a,o,s,l,n,u,c,f,h=0,d=!0){let p=e.anchorPointX+l[0],g=e.anchorPointY+l[1],m=this.projectAndGetPerspectiveRatio(p,g,a,Kb(u,p,g,h,d),f),y=t*m.perspectiveRatio,_;if(!o&&!s){let k=m.x+(c?c.x*y:0),A=m.y+(c?c.y*y:0);_={allPointsOccluded:!1,box:[k+e.x1*y,A+e.y1*y,k+e.x2*y,A+e.y2*y]}}else _=this._projectCollisionBox(e,y,i,a,o,s,l,m,u,c,f,h,d);let[v,x,S,M]=_.box,C=o?_.allPointsOccluded:m.isOccluded,w=C;return w||(w=m.perspectiveRatio<this.perspectiveRatioCutoff),w||(w=!this.isInsideGrid(v,x,S,M)),w||r!=="always"&&this.grid.hitTest(v,x,S,M,r,n)?{box:[v,x,S,M],placeable:!1,offscreen:!1,occluded:C}:{box:[v,x,S,M],placeable:!0,offscreen:this.isOffscreen(v,x,S,M),occluded:C}}placeCollisionCircles(e,r,t,i,a,o,s,l,n,u,c,f,h,d){let p=[],g=new Wr(r.anchorX,r.anchorY),m=this.getPerspectiveRatio(g.x,g.y,o,d?.(g.x,g.y)),y=(n?a*this.transform.getPitchedTextCorrection(r.anchorX,r.anchorY,o)/m:a*m)/24,_={projections:{},offsets:{},cachedAnchorPoint:void 0,anyProjectionOccluded:!1},v=r.lineOffsetX*y,x=r.lineOffsetY*y,S={getElevation:d,pitchedLabelPlaneMatrix:s,lineVertexArray:t,pitchWithMap:n,projectionCache:_,transform:this.transform,tileAnchorPoint:g,unwrappedTileID:o,width:this.transform.width,height:this.transform.height,translation:h},M=rz(y,i,v,x,!1,r,!1,S),C=!1,w=!1,k=!0;if(M){let A=c*.5*m+f,b=new Wr(-100,-100),E=new Wr(this.screenRightBoundary,this.screenBottomBoundary),T=new wB,F=M.first,D=M.last,R=[];for(let I=F.path.length-1;I>=1;I--)R.push(F.path[I]);for(let I=1;I<D.path.length;I++)R.push(D.path[I]);let P=A*2.5;if(n){let I=this.projectPathToScreenSpace(R,S);R=I.some(L=>L.signedDistanceFromCamera<=0)?[]:I.map(L=>L.point)}let z=[];if(R.length>0){let I=R[0].clone(),L=R[0].clone();for(let B=1;B<R.length;B++)I.x=Math.min(I.x,R[B].x),I.y=Math.min(I.y,R[B].y),L.x=Math.max(L.x,R[B].x),L.y=Math.max(L.y,R[B].y);z=I.x>=b.x&&L.x<=E.x&&I.y>=b.y&&L.y<=E.y?[R]:L.x<b.x||I.x>E.x||L.y<b.y||I.y>E.y?[]:CF([R],b.x,b.y,E.x,E.y)}for(let I of z){T.reset(I,A*.25);let L=0;L=T.length<=.5*A?1:Math.ceil(T.paddedLength/P)+1;for(let B=0;B<L;B++){let O=B/Math.max(L-1,1),G=T.lerp(O),W=G.x+100,X=G.y+100;p.push(W,X,A,0);let Z=W-A,J=X-A,N=W+A,H=X+A;if(k&&(k=this.isOffscreen(Z,J,N,H)),w||(w=this.isInsideGrid(Z,J,N,H)),e!=="always"&&this.grid.hitTestCircle(W,X,A,e,u)&&(C=!0,!l))return{circles:[],offscreen:!1,collisionDetected:C}}}}return{circles:!l&&C||!w||m<this.perspectiveRatioCutoff?[]:p,offscreen:k,collisionDetected:C}}projectPathToScreenSpace(e,r){return aoe(ioe(e,r))}queryRenderedSymbols(e){if(e.length===0||this.grid.keysLength()===0&&this.ignoredGrid.keysLength()===0)return{};let r=[],t=new gh;for(let c of e){let f=new Wr(c.x+100,c.y+100);t.extend(f),r.push(f)}let{minX:i,minY:a,maxX:o,maxY:s}=t,l=this.grid.query(i,a,o,s).concat(this.ignoredGrid.query(i,a,o,s)),n={},u={};for(let c of l){let f=c.key;if(n[f.bucketInstanceId]===void 0&&(n[f.bucketInstanceId]={}),n[f.bucketInstanceId][f.featureIndex])continue;let h=[new Wr(c.x1,c.y1),new Wr(c.x2,c.y1),new Wr(c.x2,c.y2),new Wr(c.x1,c.y2)];PL(r,h)&&(n[f.bucketInstanceId][f.featureIndex]=!0,u[f.bucketInstanceId]===void 0&&(u[f.bucketInstanceId]=[]),u[f.bucketInstanceId].push(f.featureIndex))}return u}insertCollisionBox(e,r,t,i,a,o){let s=t?this.ignoredGrid:this.grid,l={bucketInstanceId:i,featureIndex:a,collisionGroupID:o,overlapMode:r};s.insert(l,e[0],e[1],e[2],e[3])}insertCollisionCircles(e,r,t,i,a,o){let s=t?this.ignoredGrid:this.grid,l={bucketInstanceId:i,featureIndex:a,collisionGroupID:o,overlapMode:r};for(let n=0;n<e.length;n+=4)s.insertCircle(l,e[n],e[n+1],e[n+2])}projectAndGetPerspectiveRatio(e,r,t,i,a){if(a){let o;i==null?(o=[e,r,0,1],JA(o,o,a)):(o=[e,r,i,1],pu(o,o,a));let s=o[3];return{x:(o[0]/s+1)/2*this.transform.width+100,y:(-o[1]/s+1)/2*this.transform.height+100,perspectiveRatio:.5+.5*(this.transform.cameraToCenterDistance/s),isOccluded:!1,signedDistanceFromCamera:s}}{let o=this.transform.projectTileCoordinates(e,r,t,i);return{x:(o.point.x+1)/2*this.transform.width+100,y:(-o.point.y+1)/2*this.transform.height+100,perspectiveRatio:.5+.5*(this.transform.cameraToCenterDistance/o.signedDistanceFromCamera),isOccluded:o.isOccluded,signedDistanceFromCamera:o.signedDistanceFromCamera}}}getPerspectiveRatio(e,r,t,i){let a=this.transform.projectTileCoordinates(e,r,t,i);return .5+.5*(this.transform.cameraToCenterDistance/a.signedDistanceFromCamera)}isOffscreen(e,r,t,i){return t<100||e>=this.screenRightBoundary||i<100||r>this.screenBottomBoundary}isInsideGrid(e,r,t,i){return t>=0&&e<this.gridRightBoundary&&i>=0&&r<this.gridBottomBoundary}getViewportMatrix(){let e=Hh([]);return Ol(e,e,[-100,-100,0]),e}_projectCollisionBox(e,r,t,i,a,o,s,l,n,u,c,f=0,h=!0){let d=1,p=0,g=0,m=1,y=e.anchorPointX+s[0],_=e.anchorPointY+s[1];if(o&&!a){let D=this.projectAndGetPerspectiveRatio(y+1,_,i,Kb(n,y+1,_,f,h),c),R=D.x-l.x,P=D.y-l.y,z=Math.atan(P/R)+(R<0?Math.PI:0),I=Math.sin(z),L=Math.cos(z);d=L,p=I,g=-I,m=L}else if(!o&&a){let D=YA(this.transform);d=D.vecEast[0],p=D.vecEast[1],g=D.vecSouth[0],m=D.vecSouth[1]}let v=l.x,x=l.y,S=r;if(a&&(v=y,x=_,S=2**-(this.transform.zoom-t.overscaledZ),S*=this.transform.getPitchedTextCorrection(y,_,i),!u)){let D=l.signedDistanceFromCamera/this.transform.cameraToCenterDistance,R=to(.5+.5*D,0,4);S*=R}u&&(v+=d*u.x*S+g*u.y*S,x+=p*u.x*S+m*u.y*S);let M=e.x1*S,C=e.x2*S,w=(M+C)/2,k=e.y1*S,A=e.y2*S,b=(k+A)/2,E=[{offsetX:M,offsetY:k},{offsetX:w,offsetY:k},{offsetX:C,offsetY:k},{offsetX:C,offsetY:b},{offsetX:C,offsetY:A},{offsetX:w,offsetY:A},{offsetX:M,offsetY:A},{offsetX:M,offsetY:b}],T=[];for(let{offsetX:D,offsetY:R}of E)T.push(new Wr(v+d*D+g*R,x+p*D+m*R));let F=!1;if(a){let D=T.map(R=>this.projectAndGetPerspectiveRatio(R.x,R.y,i,Kb(n,R.x,R.y,f,h),c));F=D.some(R=>!R.isOccluded),T=D.map(R=>new Wr(R.x,R.y))}else F=!0;return{box:QK(T),allPointsOccluded:!F}}},PM=class{constructor(e,r,t,i){this.opacity=e?Math.max(0,Math.min(1,e.opacity+(e.placed?r:-r))):i&&t?1:0,this.placed=t}isHidden(){return this.opacity===0&&!this.placed}},Vm=class{constructor(e,r,t,i,a){this.text=new PM(e?e.text:null,r,t,a),this.icon=new PM(e?e.icon:null,r,i,a)}isHidden(){return this.text.isHidden()&&this.icon.isHidden()}},IM=class{constructor(e,r,t){this.text=e,this.icon=r,this.skipFade=t}},SB=class{constructor(e,r,t,i,a){this.bucketInstanceId=e,this.featureIndex=r,this.sourceLayerIndex=t,this.bucketIndex=i,this.tileID=a}},EB=class{constructor(e){this.crossSourceCollisions=e,this.maxGroupID=0,this.collisionGroups={}}get(e){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[e]){let r=++this.maxGroupID;this.collisionGroups[e]={ID:r,predicate:t=>t.collisionGroupID===r}}return this.collisionGroups[e]}},kB=class{constructor(e,r,t,i,a){this.transform=e.clone(),this.terrain=r,this.collisionIndex=new MB(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=t,this.retainedQueryData={},this.collisionGroups=new EB(i),this.collisionCircleArrays={},this.collisionBoxArrays=new Map,this.prevPlacement=a,a&&(a.prevPlacement=void 0),this.placedOrientations={}}_getTerrainElevationFunc(e){let r=this.terrain;if(r)return(t,i)=>r.getElevation(e,t,i)}getBucketParts(e,r,t,i){let a=t.getBucket(r),o=t.latestFeatureIndex;if(!a||!o||r.id!==a.layerIds[0])return;let s=t.collisionBoxArray,l=a.layers[0].layout,n=a.layers[0].paint,u=2**(this.transform.zoom-t.tileID.overscaledZ),c=t.tileSize/Bi,f=t.tileID.toUnwrapped(),h=l.get("text-rotation-alignment")==="map",d=Cf(t,1,this.transform.zoom),p=Op(this.collisionIndex.transform,t,n.get("text-translate"),n.get("text-translate-anchor")),g=Op(this.collisionIndex.transform,t,n.get("icon-translate"),n.get("icon-translate-anchor")),m=WA(h,this.transform,d);this.retainedQueryData[a.bucketInstanceId]=new SB(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,t.tileID);let y={bucket:a,layout:l,translationText:p,translationIcon:g,unwrappedTileID:f,pitchedLabelPlaneMatrix:m,scale:u,textPixelRatio:c,holdingForFade:t.holdingForSymbolFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:dx(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(i)for(let _ of a.sortKeyRanges){let{sortKey:v,symbolInstanceStart:x,symbolInstanceEnd:S}=_;e.push({sortKey:v,symbolInstanceStart:x,symbolInstanceEnd:S,parameters:y})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:y})}attemptAnchorPlacement(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_,v,x,S){var M,C,w;let k=Ib[e.textAnchor],A=[e.textOffset0,e.textOffset1],b=sz(k,t,i,A,a),E=this.collisionIndex.placeCollisionBox(r,f,l,n,u,s,o,g,c.predicate,_,b,v,x,S);if((!y||this.collisionIndex.placeCollisionBox(y,f,l,n,u,s,o,m,c.predicate,_,b,v,x,S).placeable)&&E.placeable){let T;if((M=this.prevPlacement)!=null&&M.variableOffsets[h.crossTileID]&&((w=(C=this.prevPlacement)==null?void 0:C.placements[h.crossTileID])!=null&&w.text)&&(T=this.prevPlacement.variableOffsets[h.crossTileID].anchor),h.crossTileID===0)throw Error("symbolInstance.crossTileID can't be 0");return this.variableOffsets[h.crossTileID]={textOffset:A,width:t,height:i,anchor:k,textBoxScale:a,prevAnchor:T},this.markUsedJustification(d,k,h,p),d.allowVerticalPlacement&&(this.markUsedOrientation(d,p,h),this.placedOrientations[h.crossTileID]=p),{shift:b,placedGlyphBoxes:E}}}placeLayerBucketPart(e,r,t){let{bucket:i,layout:a,translationText:o,translationIcon:s,unwrappedTileID:l,pitchedLabelPlaneMatrix:n,textPixelRatio:u,holdingForFade:c,collisionBoxArray:f,partiallyEvaluatedTextSize:h,collisionGroup:d}=e.parameters,p=a.get("text-optional"),g=a.get("icon-optional"),m=gx(a,"text-overlap","text-allow-overlap"),y=m==="always",_=gx(a,"icon-overlap","icon-allow-overlap"),v=_==="always",x=a.get("text-rotation-alignment")==="map",S=a.get("text-pitch-alignment")==="map",M=a.get("icon-text-fit")!=="none",C=a.get("symbol-z-order")==="viewport-y",w=a.get("symbol-height-anchor")==="ground",k=y&&(v||!i.hasIconData()||g),A=v&&(y||!i.hasTextData()||p);!i.collisionArrays&&f&&i.deserializeCollisionBoxes(f);let b=this.retainedQueryData[i.bucketInstanceId].tileID,E=this._getTerrainElevationFunc(b),T=this.transform.getFastPathSimpleProjectionMatrix(b),F=(D,R,P)=>{var z,I;if(r[D.crossTileID])return;if(c){this.placements[D.crossTileID]=new IM(!1,!1,!1);return}let L=D.heightOffset,B=!1,O=!1,G=!0,W=null,X={box:null,placeable:!1,offscreen:null,occluded:!1},Z={box:null,placeable:!1,offscreen:null},J=null,N=null,H=null,$=0,U=0,V=0;R.textFeatureIndex?$=R.textFeatureIndex:D.useRuntimeCollisionCircles&&($=D.featureIndex),R.verticalTextFeatureIndex&&(U=R.verticalTextFeatureIndex);let j=R.textBox;if(j){let le=ye=>{let fe=1;if(i.allowVerticalPlacement&&!ye&&this.prevPlacement){let ae=this.prevPlacement.placedOrientations[D.crossTileID];ae&&(this.placedOrientations[D.crossTileID]=ae,fe=ae,this.markUsedOrientation(i,fe,D))}return fe},ce=(ye,fe)=>{if(i.allowVerticalPlacement&&D.numVerticalGlyphVertices>0&&R.verticalTextBox){for(let ae of i.writingModes)if(ae===2?(X=fe(),Z=X):X=ye(),X?.placeable)break}else X=ye()},pe=D.textAnchorOffsetStartIndex,xe=D.textAnchorOffsetEndIndex;if(xe===pe){let ye=(fe,ae)=>{let ee=this.collisionIndex.placeCollisionBox(fe,m,u,b,l,S,x,o,d.predicate,E,void 0,T,L,w);return ee?.placeable&&(this.markUsedOrientation(i,ae,D),this.placedOrientations[D.crossTileID]=ae),ee};ce(()=>ye(j,1),()=>{let fe=R.verticalTextBox;return i.allowVerticalPlacement&&D.numVerticalGlyphVertices>0&&fe?ye(fe,2):{box:null,offscreen:null}}),le(X?.placeable)}else{let ye=Ib[(I=(z=this.prevPlacement)==null?void 0:z.variableOffsets[D.crossTileID])==null?void 0:I.anchor],fe=(ee,ie,Q)=>{let ue=ee.x2-ee.x1,ge=ee.y2-ee.y1,Me=D.textBoxScale,Te=M&&_==="never"?ie:null,je=null,Ve=m==="never"?1:2,Ze="never";ye&&Ve++;for(let Ke=0;Ke<Ve;Ke++){for(let vt=pe;vt<xe;vt++){let xt=i.textAnchorOffsets.get(vt);if(ye&&xt.textAnchor!==ye)continue;let Pt=this.attemptAnchorPlacement(xt,ee,ue,ge,Me,x,S,u,b,l,d,Ze,D,i,Q,o,s,Te,E,T,L,w);if(Pt&&(je=Pt.placedGlyphBoxes,je?.placeable))return B=!0,W=Pt.shift,je}ye?ye=null:Ze=m}return t&&!je&&(je={box:this.collisionIndex.placeCollisionBox(j,"always",u,b,l,S,x,o,d.predicate,E,void 0,T,L,w).box,offscreen:!1,placeable:!1,occluded:!1}),je};ce(()=>fe(j,R.iconBox,1),()=>{let ee=R.verticalTextBox,ie=X?.placeable;return i.allowVerticalPlacement&&!ie&&D.numVerticalGlyphVertices>0&&ee?fe(ee,R.verticalIconBox,2):{box:null,occluded:!0,offscreen:null}}),X&&(B=X.placeable,G=X.offscreen);let ae=le(X?.placeable);if(!B&&this.prevPlacement){let ee=this.prevPlacement.variableOffsets[D.crossTileID];ee&&(this.variableOffsets[D.crossTileID]=ee,this.markUsedJustification(i,ee.anchor,D,ae))}}}if(J=X,B=J?.placeable,G=J?.offscreen,D.useRuntimeCollisionCircles&&D.centerJustifiedTextSymbolIndex>=0){let le=i.text.placedSymbolArray.get(D.centerJustifiedTextSymbolIndex),ce=G6(i.textSizeData,h,le),pe=a.get("text-padding"),xe=D.collisionCircleDiameter;N=this.collisionIndex.placeCollisionCircles(m,le,i.lineVertexArray,i.glyphOffsetArray,ce,l,n,t,S,d.predicate,xe,pe,o,E),N.circles.length&&N.collisionDetected&&!t&&To("Collisions detected, but collision boxes are not shown"),B=y||N.circles.length>0&&!N.collisionDetected,G&&(G=N.offscreen)}if(R.iconFeatureIndex&&(V=R.iconFeatureIndex),R.iconBox){let le=ce=>this.collisionIndex.placeCollisionBox(ce,_,u,b,l,S,x,s,d.predicate,E,M&&W?W:void 0,T,L,w);Z&&Z.placeable&&R.verticalIconBox?(H=le(R.verticalIconBox),O=H.placeable):(H=le(R.iconBox),O=H.placeable),G&&(G=H.offscreen)}let q=p||D.numHorizontalGlyphVertices===0&&D.numVerticalGlyphVertices===0,Y=g||D.numIconVertices===0;!q&&!Y?O=B=O&&B:Y?q||O&&(O=B):B=O&&B;let K=B&&J.placeable,te=O&&H.placeable;if(K&&(Z&&Z.placeable&&U?this.collisionIndex.insertCollisionBox(J.box,m,a.get("text-ignore-placement"),i.bucketInstanceId,U,d.ID):this.collisionIndex.insertCollisionBox(J.box,m,a.get("text-ignore-placement"),i.bucketInstanceId,$,d.ID)),te&&this.collisionIndex.insertCollisionBox(H.box,_,a.get("icon-ignore-placement"),i.bucketInstanceId,V,d.ID),N&&B&&this.collisionIndex.insertCollisionCircles(N.circles,m,a.get("text-ignore-placement"),i.bucketInstanceId,$,d.ID),t&&this.storeCollisionData(i.bucketInstanceId,P,R,J,H,N),D.crossTileID===0)throw Error("symbolInstance.crossTileID can't be 0");if(i.bucketInstanceId===0)throw Error("bucket.bucketInstanceId can't be 0");let ne=(B||k)&&!J?.occluded,se=(O||A)&&!H?.occluded;this.placements[D.crossTileID]=new IM(ne,se,G||i.justReloaded),r[D.crossTileID]=!0};if(C){if(e.symbolInstanceStart!==0)throw Error("bucket.bucketInstanceId should be 0");let D=i.getSortedSymbolIndexes(-this.transform.bearingInRadians);for(let R=D.length-1;R>=0;--R){let P=D[R];F(i.symbolInstances.get(P),i.collisionArrays[P],P)}}else for(let D=e.symbolInstanceStart;D<e.symbolInstanceEnd;D++)F(i.symbolInstances.get(D),i.collisionArrays[D],D);i.justReloaded=!1}storeCollisionData(e,r,t,i,a,o){if(t.textBox||t.iconBox){let s;this.collisionBoxArrays.has(e)?s=this.collisionBoxArrays.get(e):(s=new Map,this.collisionBoxArrays.set(e,s));let l;s.has(r)?l=s.get(r):(l={text:null,icon:null},s.set(r,l)),t.textBox&&(l.text=i.box),t.iconBox&&(l.icon=a.box)}if(o){let s=this.collisionCircleArrays[e];s===void 0&&(s=this.collisionCircleArrays[e]=[]);for(let l=0;l<o.circles.length;l+=4)s.push(o.circles[l+0]-100),s.push(o.circles[l+1]-100),s.push(o.circles[l+2]),s.push(+!!o.collisionDetected)}}markUsedJustification(e,r,t,i){let a={left:t.leftJustifiedTextSymbolIndex,center:t.centerJustifiedTextSymbolIndex,right:t.rightJustifiedTextSymbolIndex},o;o=i===2?t.verticalPlacedTextSymbolIndex:a[H6(r)];let s=[t.leftJustifiedTextSymbolIndex,t.centerJustifiedTextSymbolIndex,t.rightJustifiedTextSymbolIndex,t.verticalPlacedTextSymbolIndex];for(let l of s)l>=0&&(o>=0&&l!==o?e.text.placedSymbolArray.get(l).crossTileID=0:e.text.placedSymbolArray.get(l).crossTileID=t.crossTileID)}markUsedOrientation(e,r,t){let i=r===1||r===3?r:0,a=r===2?r:0,o=[t.leftJustifiedTextSymbolIndex,t.centerJustifiedTextSymbolIndex,t.rightJustifiedTextSymbolIndex];for(let s of o)e.text.placedSymbolArray.get(s).placedOrientation=i;t.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(t.verticalPlacedTextSymbolIndex).placedOrientation=a)}commit(e){this.commitTime=e,this.zoomAtLastRecencyCheck=this.transform.zoom;let r=this.prevPlacement,t=!1;this.prevZoomAdjustment=r?r.zoomAdjustment(this.transform.zoom):0;let i=r?r.symbolFadeChange(e):1,a=r?r.opacities:{},o=r?r.variableOffsets:{},s=r?r.placedOrientations:{};for(let l in this.placements){let n=this.placements[l],u=a[l];u?(this.opacities[l]=new Vm(u,i,n.text,n.icon),t||(t=n.text!==u.text.placed),t||(t=n.icon!==u.icon.placed)):(this.opacities[l]=new Vm(null,i,n.text,n.icon,n.skipFade),t||(t=n.text||n.icon))}for(let l in a){let n=a[l];if(!this.opacities[l]){let u=new Vm(n,i,!1,!1);u.isHidden()||(this.opacities[l]=u,t||(t=n.text.placed),t||(t=n.icon.placed))}}for(let l in o)!this.variableOffsets[l]&&this.opacities[l]&&!this.opacities[l].isHidden()&&(this.variableOffsets[l]=o[l]);for(let l in s)!this.placedOrientations[l]&&this.opacities[l]&&!this.opacities[l].isHidden()&&(this.placedOrientations[l]=s[l]);if(r&&r.lastPlacementChangeTime===void 0)throw Error("Last placement time for previous placement is not defined");t?this.lastPlacementChangeTime=e:typeof this.lastPlacementChangeTime!="number"&&(this.lastPlacementChangeTime=r?r.lastPlacementChangeTime:e)}updateLayerOpacities(e,r){let t={};for(let i of r){let a=i.getBucket(e);a&&i.latestFeatureIndex&&e.id===a.layerIds[0]&&this.updateBucketOpacities(a,i.tileID,t,i.collisionBoxArray)}}updateBucketOpacities(e,r,t,i){e.hasTextData()&&(e.text.opacityVertexArray.clear(),e.text.hasVisibleVertices=!1),e.hasIconData()&&(e.icon.opacityVertexArray.clear(),e.icon.hasVisibleVertices=!1),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexArray.clear();let a=e.layers[0],o=a.layout,s=new Vm(null,0,!1,!1,!0),l=o.get("text-allow-overlap"),n=o.get("icon-allow-overlap"),u=a._unevaluatedLayout.hasValue("text-variable-anchor")||a._unevaluatedLayout.hasValue("text-variable-anchor-offset"),c=o.get("text-rotation-alignment")==="map",f=o.get("text-pitch-alignment")==="map",h=o.get("icon-text-fit")!=="none",d=new Vm(null,0,l&&(n||!e.hasIconData()||o.get("icon-optional")),n&&(l||!e.hasTextData()||o.get("text-optional")),!0);!e.collisionArrays&&i&&(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())&&e.deserializeCollisionBoxes(i);let p=(m,y,_)=>{for(let v=0;v<y/4;v++)m.opacityVertexArray.emplaceBack(_);m.hasVisibleVertices||(m.hasVisibleVertices=_!==Gm)},g=this.collisionBoxArrays.get(e.bucketInstanceId);for(let m=0;m<e.symbolInstances.length;m++){let y=e.symbolInstances.get(m),{numHorizontalGlyphVertices:_,numVerticalGlyphVertices:v,crossTileID:x}=y,S=t[x],M=this.opacities[x];S?M=s:M||(M=d,this.opacities[x]=M),t[x]=!0;let C=_>0||v>0,w=y.numIconVertices>0,k=this.placedOrientations[y.crossTileID],A=k===2,b=k===1||k===3;if(C){let T=uz(M.text),F=A?Gm:T;p(e.text,_,F);let D=b?Gm:T;p(e.text,v,D);let R=M.text.isHidden(),P=[y.rightJustifiedTextSymbolIndex,y.centerJustifiedTextSymbolIndex,y.leftJustifiedTextSymbolIndex];for(let L of P)L>=0&&(e.text.placedSymbolArray.get(L).hidden=R||A?1:0);y.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(y.verticalPlacedTextSymbolIndex).hidden=R||b?1:0);let z=this.variableOffsets[y.crossTileID];z&&this.markUsedJustification(e,z.anchor,y,k);let I=this.placedOrientations[y.crossTileID];I&&(this.markUsedJustification(e,"left",y,I),this.markUsedOrientation(e,I,y))}if(w){let T=uz(M.icon),F=!(h&&y.verticalPlacedIconSymbolIndex&&A);if(y.placedIconSymbolIndex>=0){let D=F?T:Gm;p(e.icon,y.numIconVertices,D),e.icon.placedSymbolArray.get(y.placedIconSymbolIndex).hidden=M.icon.isHidden()}if(y.verticalPlacedIconSymbolIndex>=0){let D=F?Gm:T;p(e.icon,y.numVerticalIconVertices,D),e.icon.placedSymbolArray.get(y.verticalPlacedIconSymbolIndex).hidden=M.icon.isHidden()}}let E=g?.has(m)?g.get(m):{text:null,icon:null};if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){let T=e.collisionArrays[m];if(T){let F=new Wr(0,0);if(T.textBox||T.verticalTextBox){let D=!0;if(u){let R=this.variableOffsets[x];R?(F=sz(R.anchor,R.width,R.height,R.textOffset,R.textBoxScale),c&&F._rotate(f?-this.transform.bearingInRadians:this.transform.bearingInRadians)):D=!1}if(T.textBox||T.verticalTextBox){let R;T.textBox&&(R=A),T.verticalTextBox&&(R=b),lz(e.textCollisionBox.collisionVertexArray,M.text.placed,!D||R,E.text,F.x,F.y)}}if(T.iconBox||T.verticalIconBox){let D=!(b||!T.verticalIconBox),R;T.iconBox&&(R=D),T.verticalIconBox&&(R=!D),lz(e.iconCollisionBox.collisionVertexArray,M.icon.placed,R,E.icon,h?F.x:0,h?F.y:0)}}}}if(e.sortFeatures(-this.transform.bearingInRadians),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()&&e.iconCollisionBox.collisionVertexBuffer&&e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()&&e.textCollisionBox.collisionVertexBuffer&&e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.text.opacityVertexArray.length!==e.text.layoutVertexArray.length/4)throw Error(`bucket.text.opacityVertexArray.length (= ${e.text.opacityVertexArray.length}) !== bucket.text.layoutVertexArray.length (= ${e.text.layoutVertexArray.length}) / 4`);if(e.icon.opacityVertexArray.length!==e.icon.layoutVertexArray.length/4)throw Error(`bucket.icon.opacityVertexArray.length (= ${e.icon.opacityVertexArray.length}) !== bucket.icon.layoutVertexArray.length (= ${e.icon.layoutVertexArray.length}) / 4`);e.bucketInstanceId in this.collisionCircleArrays&&(e.collisionCircleArray=this.collisionCircleArrays[e.bucketInstanceId],delete this.collisionCircleArrays[e.bucketInstanceId])}symbolFadeChange(e){return this.fadeDuration===0?1:(e-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment}zoomAdjustment(e){return Math.max(0,(this.transform.zoom-e)/1.5)}hasTransitions(e){return this.stale||e-this.lastPlacementChangeTime<this.fadeDuration}stillRecent(e,r){let t=this.zoomAtLastRecencyCheck===r?1-this.zoomAdjustment(r):1;return this.zoomAtLastRecencyCheck=r,this.commitTime+this.fadeDuration*t>e}setStale(){this.stale=!0}},CB=2**25,DB=2**24,LB=2**17,FB=2**16,Gm=0,PB=class{constructor(e){this._sortAcrossTiles=e.layout.get("symbol-z-order")!=="viewport-y"&&!e.layout.get("symbol-sort-key").isConstant(),this._currentTileIndex=0,this._currentPartIndex=0,this._seenCrossTileIDs={},this._bucketParts=[]}continuePlacement(e,r,t,i,a){let o=this._bucketParts;for(;this._currentTileIndex<e.length;){let s=e[this._currentTileIndex];if(r.getBucketParts(o,i,s,this._sortAcrossTiles),this._currentTileIndex++,a())return!0}for(this._sortAcrossTiles&&(this._sortAcrossTiles=!1,o.sort((s,l)=>s.sortKey-l.sortKey));this._currentPartIndex<o.length;){let s=o[this._currentPartIndex];if(r.placeLayerBucketPart(s,this._seenCrossTileIDs,t),this._currentPartIndex++,a())return!0}return!1}},IB=class{constructor(e,r,t,i,a,o,s,l){this.placement=new kB(e,r,o,s,l),this._currentPlacementIndex=t.length-1,this._forceFullPlacement=i,this._showCollisionBoxes=a,this._done=!1}isDone(){return this._done}continuePlacement(e,r,t){let i=hs(),a=()=>!this._forceFullPlacement&&hs()-i>2;for(;this._currentPlacementIndex>=0;){let o=r[e[this._currentPlacementIndex]],s=this.placement.collisionIndex.transform.zoom;if(AA(o)&&o.layout&&(!o.minzoom||o.minzoom<=s)&&(!o.maxzoom||o.maxzoom>s)){if(this._inProgressLayer||(this._inProgressLayer=new PB(o)),this._inProgressLayer.continuePlacement(t[o.source],this.placement,this._showCollisionBoxes,o,a))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0}commit(e){return this.placement.commit(e),this.placement}},RM=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],al=new Uint32Array(96),RB=class oU{static from(r){if(!r||r.byteLength===void 0||r.buffer)throw Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");let[t,i]=new Uint8Array(r,0,2);if(t!==219)throw Error("Data does not appear to be in a KDBush format.");let a=i>>4;if(a!==1)throw Error(`Got v${a} data when expected v1.`);let o=RM[i&15];if(!o)throw Error("Unrecognized array type.");let[s]=new Uint16Array(r,2,1),[l]=new Uint32Array(r,4,1);return new oU(l,s,o,void 0,r)}constructor(r,t=64,i=Float64Array,a=ArrayBuffer,o){if(isNaN(r)||r<0)throw Error(`Unexpected numItems value: ${r}.`);this.numItems=+r,this.nodeSize=Math.min(Math.max(+t,2),65535),this.ArrayType=i,this.IndexArrayType=r<65536?Uint16Array:Uint32Array;let s=RM.indexOf(this.ArrayType),l=r*2*this.ArrayType.BYTES_PER_ELEMENT,n=r*this.IndexArrayType.BYTES_PER_ELEMENT,u=(8-n%8)%8;if(s<0)throw Error(`Unexpected typed array class: ${i}.`);if(o)this.data=o,this.ids=new this.IndexArrayType(o,8,r),this.coords=new i(o,8+n+u,r*2),this._pos=r*2,this._finished=!0;else{let c=this.data=new a(8+l+n+u);this.ids=new this.IndexArrayType(c,8,r),this.coords=new i(c,8+n+u,r*2),this._pos=0,this._finished=!1,new Uint8Array(c,0,2).set([219,16+s]),new Uint16Array(c,2,1)[0]=t,new Uint32Array(c,4,1)[0]=r}}add(r,t){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=r,this.coords[this._pos++]=t,i}finish(){let r=this._pos>>1;if(r!==this.numItems)throw Error(`Added ${r} items when expected ${this.numItems}.`);return QA(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(r,t,i,a){if(!this._finished)throw Error("Data not yet indexed - call index.finish().");let{ids:o,coords:s,nodeSize:l}=this;al[0]=0,al[1]=o.length-1,al[2]=0;let n=3,u=[];for(;n>0;){let c=al[--n],f=al[--n],h=al[--n];if(f-h<=l){for(let m=h;m<=f;m++){let y=s[2*m],_=s[2*m+1];y>=r&&y<=i&&_>=t&&_<=a&&u.push(o[m])}continue}let d=h+f>>1,p=s[2*d],g=s[2*d+1];p>=r&&p<=i&&g>=t&&g<=a&&u.push(o[d]),(c===0?r<=p:t<=g)&&(al[n++]=h,al[n++]=d-1,al[n++]=1-c),(c===0?i>=p:a>=g)&&(al[n++]=d+1,al[n++]=f,al[n++]=1-c)}return u}within(r,t,i){let a=[];return this.withinInto(r,t,i,a),a}withinInto(r,t,i,a){if(!this._finished)throw Error("Data not yet indexed - call index.finish().");let{ids:o,coords:s,nodeSize:l}=this;al[0]=0,al[1]=o.length-1,al[2]=0;let n=3,u=0,c=i*i;for(;n>0;){let f=al[--n],h=al[--n],d=al[--n];if(h-d<=l){for(let y=d;y<=h;y++)fz(s[2*y],s[2*y+1],r,t)<=c&&(a[u++]=o[y]);continue}let p=d+h>>1,g=s[2*p],m=s[2*p+1];fz(g,m,r,t)<=c&&(a[u++]=o[p]),(f===0?r-i<=g:t-i<=m)&&(al[n++]=d,al[n++]=p-1,al[n++]=1-f),(f===0?r+i>=g:t+i>=m)&&(al[n++]=p+1,al[n++]=h,al[n++]=1-f)}return u}},Hm=512/Bi/2,zB=class{constructor(e,r,t){this.tileID=e,this.bucketInstanceId=t,this._symbolsByKey={};let i=new Map;for(let a=0;a<r.length;a++){let o=r.get(a),s=o.key,l=i.get(s);l?l.push(o):i.set(s,[o])}for(let[a,o]of i){let s={positions:o.map(l=>({x:Math.floor(l.anchorX*Hm),y:Math.floor(l.anchorY*Hm)})),crossTileIDs:o.map(l=>l.crossTileID)};if(s.positions.length>128){let l=new RB(s.positions.length,16,Uint16Array);for(let{x:n,y:u}of s.positions)l.add(n,u);l.finish(),delete s.positions,s.index=l}this._symbolsByKey[a]=s}}getScaledCoordinates(e,r){let{x:t,y:i,z:a}=this.tileID.canonical,{x:o,y:s,z:l}=r.canonical,n=l-a,u=Hm/2**n,c=(o*Bi+e.anchorX)*u,f=(s*Bi+e.anchorY)*u,h=t*Bi*Hm,d=i*Bi*Hm;return{x:Math.floor(c-h),y:Math.floor(f-d)}}findMatches(e,r,t){let i=this.tileID.canonical.z<r.canonical.z?1:2**(this.tileID.canonical.z-r.canonical.z);for(let a=0;a<e.length;a++){let o=e.get(a);if(o.crossTileID)continue;let s=this._symbolsByKey[o.key];if(!s)continue;let l=this.getScaledCoordinates(o,r);s.index?this.findMatchesForIndexedEntry(s,o,l,i,t):s.positions&&this.findMatchesForNonIndexedEntry(s,o,l,i,t)}}findMatchesForIndexedEntry(e,r,t,i,a){let o=e.index.range(t.x-i,t.y-i,t.x+i,t.y+i),s=1/0;for(let l of o)l<s&&!a[e.crossTileIDs[l]]&&(s=l);if(s!==1/0){let l=e.crossTileIDs[s];a[l]=!0,r.crossTileID=l}}findMatchesForNonIndexedEntry(e,r,t,i,a){for(let o=0;o<e.positions.length;o++){let s=e.positions[o],l=e.crossTileIDs[o];if(Math.abs(s.x-t.x)<=i&&Math.abs(s.y-t.y)<=i&&!a[l]){a[l]=!0,r.crossTileID=l;break}}}getCrossTileIDsLists(){return Object.values(this._symbolsByKey).map(({crossTileIDs:e})=>e)}},BB=class{constructor(){this.maxCrossTileID=0}generate(){return++this.maxCrossTileID}},OB=class{constructor(){this.indexes={},this.usedCrossTileIDs={},this.lng=0}handleWrapJump(e){let r=Math.round((e-this.lng)/360);if(r!==0)for(let t in this.indexes){let i=this.indexes[t],a={};for(let o in i){let s=i[o];s.tileID=s.tileID.unwrapTo(s.tileID.wrap+r),a[s.tileID.key]=s}this.indexes[t]=a}this.lng=e}addBucket(e,r,t){var i,a,o;if((i=this.indexes[e.overscaledZ])!=null&&i[e.key]){if(this.indexes[e.overscaledZ][e.key].bucketInstanceId===r.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(e.overscaledZ,this.indexes[e.overscaledZ][e.key])}for(let l=0;l<r.symbolInstances.length;l++){let n=r.symbolInstances.get(l);n.crossTileID=0}(a=this.usedCrossTileIDs)[o=e.overscaledZ]||(a[o]={});let s=this.usedCrossTileIDs[e.overscaledZ];for(let l in this.indexes){let n=this.indexes[l];if(Number(l)>e.overscaledZ)for(let u in n){let c=n[u];c.tileID.isChildOf(e)&&c.findMatches(r.symbolInstances,e,s)}else{let u=n[e.scaledTo(Number(l)).key];u&&u.findMatches(r.symbolInstances,e,s)}}for(let l=0;l<r.symbolInstances.length;l++){let n=r.symbolInstances.get(l);n.crossTileID||(n.crossTileID=t.generate(),s[n.crossTileID]=!0)}return this.indexes[e.overscaledZ]===void 0&&(this.indexes[e.overscaledZ]={}),this.indexes[e.overscaledZ][e.key]=new zB(e,r.symbolInstances,r.bucketInstanceId),!0}removeBucketCrossTileIDs(e,r){for(let t of r.getCrossTileIDsLists())for(let i of t)delete this.usedCrossTileIDs[e][i]}removeStaleBuckets(e){let r=!1;for(let t in this.indexes){let i=this.indexes[t];for(let a in i)e[i[a].bucketInstanceId]||(this.removeBucketCrossTileIDs(t,i[a]),delete i[a],r=!0)}return r}},zM=class{constructor(){this.layerIndexes={},this.crossTileIDs=new BB,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}}addLayer(e,r,t){let i=this.layerIndexes[e.id];i===void 0&&(i=this.layerIndexes[e.id]=new OB);let a=!1,o={};i.handleWrapJump(t);for(let s of r){let l=s.getBucket(e);e.id===l?.layerIds[0]&&(l.bucketInstanceId||(l.bucketInstanceId=(this.maxBucketInstanceId+=1,this.maxBucketInstanceId)),i.addBucket(s.tileID,l,this.crossTileIDs)&&(a=!0),o[l.bucketInstanceId]=!0)}return i.removeStaleBuckets(o)&&(a=!0),a}pruneUnusedLayers(e){let r={};for(let t of e)r[t]=!0;for(let t in this.layerIndexes)r[t]||delete this.layerIndexes[t]}},NB=`#ifdef GL_ES
+precision mediump float;
+#else
+#if !defined(lowp)
+#define lowp
+#endif
+#if !defined(mediump)
+#define mediump
+#endif
+#if !defined(highp)
+#define highp
+#endif
+#endif
+out highp vec4 fragColor;layout(std140) uniform ProjectionUBO {highp mat4 u_projection_matrix;highp mat4 u_projection_fallback_matrix;highp vec4 u_projection_tile_mercator_coords;highp vec4 u_projection_clipping_plane;highp float u_projection_transition;highp int u_projection_clip_antimeridian;};layout(std140) uniform FrameUBO {highp vec2 u_units_to_pixels;highp vec2 u_world_size;highp float u_camera_to_center_distance;highp float u_symbol_fade_change;highp float u_aspect_ratio;highp float u_device_pixel_ratio;highp vec2 u_viewport_size;highp vec2 u_pixel_extrude_scale;highp float u_pitch;};`,jB=`#ifdef GL_ES
+precision highp float;
+#else
+#if !defined(lowp)
+#define lowp
+#endif
+#if !defined(mediump)
+#define mediump
+#endif
+#if !defined(highp)
+#define highp
+#endif
+#endif
+vec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const uint packedOpacity) {return vec2(float(packedOpacity >> 1u)/127.0,float(packedOpacity & 1u));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0
+);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}mat3 rotationMatrixFromAxisAngle(vec3 u,float angle) {float c=cos(angle);float s=sin(angle);float c2=1.0-c;return mat3(u.x*u.x*c2+      c,u.x*u.y*c2-u.z*s,u.x*u.z*c2+u.y*s,u.y*u.x*c2+u.z*s,u.y*u.y*c2+    c,u.y*u.z*c2-u.x*s,u.z*u.x*c2-u.y*s,u.z*u.y*c2+u.x*s,u.z*u.z*c2+    c
+);}
+#ifdef TERRAIN3D
+uniform sampler2D u_terrain;uniform highp sampler2D u_depth;layout(std140) uniform TerrainUBO {highp mat4 u_terrain_matrix;highp vec4 u_terrain_unpack;highp float u_terrain_dim;highp float u_terrain_exaggeration;};
+#endif
+const highp vec4 bitSh=vec4(256.*256.*256.,256.*256.,256.,1.);const highp vec4 bitShifts=vec4(1.)/bitSh;highp float unpack(highp vec4 color) {return dot(color,bitShifts);}highp float depthOpacity(vec3 frag) {
+#ifdef TERRAIN3D
+highp float d=unpack(texture(u_depth,frag.xy*0.5+0.5))+0.0001-frag.z;return 1.0-max(0.0,min(1.0,-d*500.0));
+#else
+return 1.0;
+#endif
+}float calculate_visibility(vec4 pos) {
+#ifdef TERRAIN3D
+vec3 frag=pos.xyz/pos.w;highp float d=depthOpacity(frag);if (d > 0.95) return 1.0;return (d+depthOpacity(frag+vec3(0.0,0.01,0.0)))/2.0;
+#else
+return 1.0;
+#endif
+}float ele(ivec2 pos) {
+#ifdef TERRAIN3D
+vec4 rgb=(texelFetch(u_terrain,pos,0)*255.0)*u_terrain_unpack;return rgb.r+rgb.g+rgb.b-u_terrain_unpack.a;
+#else
+return 0.0;
+#endif
+}float get_elevation(vec2 pos) {
+#ifdef TERRAIN3D
+#ifdef GLOBE
+if ((pos.y <-32767.5) || (pos.y > 32766.5)) {return 0.0;}
+#endif
+vec2 coord=(u_terrain_matrix*vec4(pos,0.0,1.0)).xy*u_terrain_dim+2.0;vec2 f=fract(coord);ivec2 c=ivec2(floor(coord));ivec2 hi=textureSize(u_terrain,0)-1;float tl=ele(clamp(c,ivec2(0),hi));float tr=ele(clamp(c+ivec2(1,0),ivec2(0),hi));float bl=ele(clamp(c+ivec2(0,1),ivec2(0),hi));float br=ele(clamp(c+ivec2(1,1),ivec2(0),hi));float elevation=mix(mix(tl,tr,f.x),mix(bl,br,f.x),f.y);return elevation*u_terrain_exaggeration;
+#else
+return 0.0;
+#endif
+}const float PI=3.141592653589793;
+#define PROJECTION_UBO
+layout(std140) uniform ProjectionUBO {highp mat4 u_projection_matrix;highp mat4 u_projection_fallback_matrix;highp vec4 u_projection_tile_mercator_coords;highp vec4 u_projection_clipping_plane;highp float u_projection_transition;highp int u_projection_clip_antimeridian;};layout(std140) uniform FrameUBO {highp vec2 u_units_to_pixels;highp vec2 u_world_size;highp float u_camera_to_center_distance;highp float u_symbol_fade_change;highp float u_aspect_ratio;highp float u_device_pixel_ratio;highp vec2 u_viewport_size;highp vec2 u_pixel_extrude_scale;highp float u_pitch;};`,UB=`uniform vec4 u_color;uniform float u_opacity;void main() {fragColor=u_color*u_opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,qB="layout(location=0) in vec2 a_pos;void main() {gl_Position=projectTile(a_pos);}",VB=`uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;in vec2 v_pos_a;in vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);fragColor=mix(color1,color2,u_mix)*u_opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,GB="uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;layout(location=0) in vec2 a_pos;out vec2 v_pos_a;out vec2 v_pos_b;void main() {gl_Position=projectTile(a_pos);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}",HB=`in vec3 v_data;flat in float v_visibility;
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define mediump float radius
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define highp vec4 stroke_color
+#pragma maplibre: define mediump float stroke_width
+#pragma maplibre: define lowp float stroke_opacity
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize mediump float radius
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize highp vec4 stroke_color
+#pragma maplibre: initialize mediump float stroke_width
+#pragma maplibre: initialize lowp float stroke_opacity
+vec2 extrude=v_data.xy;float extrude_length=length(extrude);float antialiased_blur=v_data.z;float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));fragColor=v_visibility*opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);const float epsilon=0.5/255.0;if (fragColor.r < epsilon && fragColor.g < epsilon && fragColor.b < epsilon && fragColor.a < epsilon) {discard;}
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,$B=`uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform highp float u_globe_extrude_scale;uniform vec2 u_translate;layout(location=0) in ivec2 a_pos;out vec3 v_data;flat out float v_visibility;
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define mediump float radius
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define highp vec4 stroke_color
+#pragma maplibre: define mediump float stroke_width
+#pragma maplibre: define lowp float stroke_opacity
+void main(void) {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize mediump float radius
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize highp vec4 stroke_color
+#pragma maplibre: initialize mediump float stroke_width
+#pragma maplibre: initialize lowp float stroke_opacity
+ivec2 pos_raw=a_pos+32768;vec2 extrude=vec2(pos_raw & 7)/7.0*2.0-1.0;vec2 circle_center=vec2(pos_raw >> 3)+u_translate;float ele=get_elevation(circle_center);v_visibility=calculate_visibility(projectTileWithElevation(circle_center,ele));if (u_pitch_with_map) {
+#ifdef GLOBE
+vec3 center_vector=projectToSphere(circle_center);
+#endif
+float angle_scale=u_globe_extrude_scale;vec2 corner_position=circle_center;if (u_scale_with_map) {angle_scale*=(radius+stroke_width);corner_position+=extrude*u_extrude_scale*(radius+stroke_width);} else {
+#ifdef GLOBE
+vec4 projected_center=interpolateProjection(circle_center,center_vector,ele);
+#else
+vec4 projected_center=projectTileWithElevation(circle_center,ele);
+#endif
+corner_position+=extrude*u_extrude_scale*(radius+stroke_width)*(projected_center.w/u_camera_to_center_distance);angle_scale*=(radius+stroke_width)*(projected_center.w/u_camera_to_center_distance);}
+#ifdef GLOBE
+vec2 angles=extrude*angle_scale;vec3 corner_vector=globeRotateVector(center_vector,angles);gl_Position=interpolateProjection(corner_position,corner_vector,ele);
+#else
+gl_Position=projectTileWithElevation(corner_position,ele);
+#endif
+} else {gl_Position=projectTileWithElevation(circle_center,ele);if (gl_Position.z/gl_Position.w > 1.0) {gl_Position.xy=vec2(10000.0);}if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}float antialiasblur=-max(1.0/u_device_pixel_ratio/(radius+stroke_width),blur);v_data=vec3(extrude.x,extrude.y,antialiasblur);}`,BM="void main() {fragColor=vec4(1.0);}",rd={prelude:Yo(NB,jB),projectionMercator:Yo(`
+void clipAntimeridian() {}`,"float projectLineThickness(float tileY) {return 1.0;}float projectCircleRadius(float tileY) {return 1.0;}vec4 projectTile(vec2 p) {vec4 result=u_projection_matrix*vec4(p,0.0,1.0);return result;}vec4 projectTile(vec2 p,vec2 rawPos) {vec4 result=u_projection_matrix*vec4(p,0.0,1.0);if (rawPos.y <-32767.5 || rawPos.y > 32766.5) {result.z=-10000000.0;}return result;}vec4 projectTileWithElevation(vec2 posInTile,float elevation) {return u_projection_matrix*vec4(posInTile,elevation,1.0);}vec4 projectTileFor3D(vec2 posInTile,float elevation) {return projectTileWithElevation(posInTile,elevation);}"),projectionGlobe:Yo("in highp float v_projection_tile_x;void clipAntimeridian() {if (u_projection_clip_antimeridian !=0 && (v_projection_tile_x < 0.0 || v_projection_tile_x >=8192.0)) {discard;}}",`#define GLOBE_RADIUS 6371008.8
+#ifndef PROJECTION_UBO
+uniform highp vec4 u_projection_tile_mercator_coords;uniform highp vec4 u_projection_clipping_plane;uniform highp float u_projection_transition;uniform mat4 u_projection_fallback_matrix;
+#endif
+out highp float v_projection_tile_x;vec3 globeRotateVector(vec3 vec,vec2 angles) {vec3 axisRight=vec3(vec.z,0.0,-vec.x);vec3 axisUp=cross(axisRight,vec);axisRight=normalize(axisRight);axisUp=normalize(axisUp);vec2 t=tan(angles);return normalize(vec+axisRight*t.x+axisUp*t.y);}mat3 globeGetRotationMatrix(vec3 spherePos) {vec3 axisRight=vec3(spherePos.z,0.0,-spherePos.x);vec3 axisDown=cross(axisRight,spherePos);axisRight=normalize(axisRight);axisDown=normalize(axisDown);return mat3(axisRight,axisDown,spherePos
+);}float circumferenceRatioAtTileY(float tileY) {float mercator_pos_y=u_projection_tile_mercator_coords.y+u_projection_tile_mercator_coords.w*tileY;float t=exp(PI-(mercator_pos_y*PI*2.0));return (2.0*t)/(t*t+1.0);}float projectLineThickness(float tileY) {float thickness=1.0/circumferenceRatioAtTileY(tileY);if (u_projection_transition < 0.999) {return mix(1.0,thickness,u_projection_transition);} else {return thickness;}}vec3 projectToSphere(vec2 translatedPos,vec2 rawPos) {vec2 mercator_pos=u_projection_tile_mercator_coords.xy+u_projection_tile_mercator_coords.zw*translatedPos;float spherical_x=mercator_pos.x*PI*2.0+PI;float t=exp(PI-(mercator_pos.y*PI*2.0));float t2=t*t;float denom=t2+1.0;float sin_sy=(t2-1.0)/denom;float cos_sy=(2.0*t)/denom;vec3 pos=vec3(sin(spherical_x)*cos_sy,sin_sy,cos(spherical_x)*cos_sy
+);if (rawPos.y <-32767.5) {pos=vec3(0.0,1.0,0.0);}if (rawPos.y > 32766.5) {pos=vec3(0.0,-1.0,0.0);}return pos;}vec3 projectToSphere(vec2 posInTile) {return projectToSphere(posInTile,vec2(0.0,0.0));}float globeComputeClippingZ(vec3 spherePos) {return (1.0-(dot(spherePos,u_projection_clipping_plane.xyz)+u_projection_clipping_plane.w));}vec4 interpolateProjection(vec2 posInTile,vec3 spherePos,float elevation) {v_projection_tile_x=posInTile.x;vec3 elevatedPos=spherePos*(1.0+elevation/GLOBE_RADIUS);vec4 globePosition=u_projection_matrix*vec4(elevatedPos,1.0);globePosition.z=globeComputeClippingZ(elevatedPos)*globePosition.w;if (u_projection_transition > 0.999) {return globePosition;}vec4 flatPosition=u_projection_fallback_matrix*vec4(posInTile,elevation,1.0);const float z_globeness_threshold=0.2;vec4 result=globePosition;result.z=mix(0.0,globePosition.z,clamp((u_projection_transition-z_globeness_threshold)/(1.0-z_globeness_threshold),0.0,1.0));result.xyw=mix(flatPosition.xyw,globePosition.xyw,u_projection_transition);if ((posInTile.y <-32767.5) || (posInTile.y > 32766.5)) {result=globePosition;const float poles_hidden_anim_percentage=0.02;result.z=mix(globePosition.z,100.0,pow(max((1.0-u_projection_transition)/poles_hidden_anim_percentage,0.0),8.0));}return result;}vec4 interpolateProjectionFor3D(vec2 posInTile,vec3 spherePos,float elevation) {v_projection_tile_x=posInTile.x;vec3 elevatedPos=spherePos*(1.0+elevation/GLOBE_RADIUS);vec4 globePosition=u_projection_matrix*vec4(elevatedPos,1.0);if (u_projection_transition > 0.999) {return globePosition;}vec4 fallbackPosition=u_projection_fallback_matrix*vec4(posInTile,elevation,1.0);return mix(fallbackPosition,globePosition,u_projection_transition);}vec4 projectTile(vec2 posInTile) {return interpolateProjection(posInTile,projectToSphere(posInTile),0.0);}vec4 projectTile(vec2 posInTile,vec2 rawPos) {return interpolateProjection(posInTile,projectToSphere(posInTile,rawPos),0.0);}vec4 projectTileWithElevation(vec2 posInTile,float elevation) {return interpolateProjection(posInTile,projectToSphere(posInTile),elevation);}vec4 projectTileFor3D(vec2 posInTile,float elevation) {vec3 spherePos=projectToSphere(posInTile,posInTile);return interpolateProjectionFor3D(posInTile,spherePos,elevation);}`),background:Yo(UB,qB),backgroundPattern:Yo(VB,GB),circle:Yo(HB,$B),clippingMask:Yo(BM,"layout(location=0) in vec2 a_pos;void main() {gl_Position=projectTile(a_pos);}"),heatmap:Yo(`uniform highp float u_intensity;in vec2 v_extrude;
+#pragma maplibre: define highp float weight
+#define GAUSS_COEF 0.3989422804014327
+void main() {
+#pragma maplibre: initialize highp float weight
+float d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);fragColor=vec4(val,1.0,1.0,1.0);
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;uniform highp float u_globe_extrude_scale;layout(location=0) in ivec2 a_pos;out vec2 v_extrude;
+#pragma maplibre: define highp float weight
+#pragma maplibre: define mediump float radius
+const highp float ZERO=1.0/255.0/16.0;
+#define GAUSS_COEF 0.3989422804014327
+void main(void) {
+#pragma maplibre: initialize highp float weight
+#pragma maplibre: initialize mediump float radius
+ivec2 pos_raw=a_pos+32768;vec2 unscaled_extrude=vec2(pos_raw & 7)/7.0*2.0-1.0;float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec2 circle_center=vec2(pos_raw >> 3);
+#ifdef GLOBE
+vec2 angles=v_extrude*radius*u_globe_extrude_scale;vec3 center_vector=projectToSphere(circle_center);vec3 corner_vector=globeRotateVector(center_vector,angles);gl_Position=interpolateProjection(circle_center+extrude,corner_vector,0.0);
+#else
+gl_Position=projectTileFor3D(circle_center+extrude,get_elevation(circle_center));
+#endif
+}`),heatmapTexture:Yo(`uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;in vec2 v_pos;void main() {float t=texture(u_image,v_pos).r;vec4 color=texture(u_color_ramp,vec2(t,0.5));fragColor=color*u_opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(0.0);
+#endif
+}`,"uniform mat4 u_matrix;layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world_size,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),collisionBox:Yo("flat in float v_placed;flat in float v_notUsed;void main() {float alpha=0.5;fragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {fragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {fragColor*=.1;}}","layout(location=0) in vec2 a_anchor_pos;layout(location=1) in vec2 a_placed;layout(location=2) in vec2 a_box_real;flat out float v_placed;flat out float v_notUsed;void main() {gl_Position=projectTileWithElevation(a_anchor_pos,get_elevation(a_anchor_pos));gl_Position.xy=((a_box_real+0.5)*u_pixel_extrude_scale*2.0-1.0)*vec2(1.0,-1.0)*gl_Position.w;if (gl_Position.z/gl_Position.w < 1.1) {gl_Position.z=0.5;}v_placed=a_placed.x;v_notUsed=a_placed.y;}"),collisionCircle:Yo("flat in float v_radius;in vec2 v_extrude;flat in float v_collision;void main() {float alpha=0.5;float stroke_radius=0.9;float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);fragColor=color*alpha*opacity_t;}","layout(location=0) in vec2 a_pos;layout(location=1) in float a_radius;layout(location=2) in vec2 a_flags;flat out float v_radius;out vec2 v_extrude;flat out float v_collision;void main() {float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_collision=collision;gl_Position=vec4((a_pos/u_viewport_size*2.0-1.0)*vec2(1.0,-1.0),0.0,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}"),colorRelief:Yo(`#ifdef GL_ES
+precision highp float;
+#endif
+uniform sampler2D u_image;uniform vec4 u_unpack;uniform sampler2D u_elevation_stops;uniform sampler2D u_color_stops;uniform int u_color_ramp_size;uniform float u_opacity;in vec2 v_pos;float getElevation(vec2 coord) {vec4 data=texture(u_image,coord)*255.0;data.a=-1.0;return dot(data,u_unpack);}float getElevationStop(int stop) {vec4 data=texelFetch(u_elevation_stops,ivec2(stop,0),0)*255.0;data.a=-1.0;return dot(data,u_unpack);}void main() {float el=getElevation(v_pos);int r=(u_color_ramp_size-1);int l=0;float el_l=getElevationStop(l);float el_r=getElevationStop(r);while(r-l > 1){int m=(r+l)/2;float el_m=getElevationStop(m);if(el < el_m){r=m;el_r=el_m;}else
+{l=m;el_l=el_m;}}float x=(float(l)+(el-el_l)/(el_r-el_l)+0.5)/float(u_color_ramp_size);fragColor=u_opacity*texture(u_color_stops,vec2(x,0));
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,"uniform vec2 u_dimension;layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=projectTile(a_pos,a_pos);highp vec2 epsilon=2.0/u_dimension;float scale=(u_dimension.x-4.0)/u_dimension.x;v_pos=(a_pos/8192.0)*scale+epsilon;if (a_pos.y <-32767.5) {v_pos.y=0.0;}if (a_pos.y > 32766.5) {v_pos.y=1.0;}}"),debug:Yo("uniform highp vec4 u_color;uniform sampler2D u_overlay;in vec2 v_uv;void main() {vec4 overlay_color=texture(u_overlay,v_uv);fragColor=mix(u_color,overlay_color,overlay_color.a);}","layout(location=0) in vec2 a_pos;out vec2 v_uv;uniform float u_overlay_scale;void main() {v_uv=a_pos/8192.0;gl_Position=projectTileWithElevation(a_pos*u_overlay_scale,get_elevation(a_pos));}"),depth:Yo(BM,`layout(location=0) in vec2 a_pos;void main() {
+#ifdef GLOBE
+gl_Position=projectTileFor3D(a_pos,0.0);
+#else
+gl_Position=u_projection_matrix*vec4(a_pos,0.0,1.0);
+#endif
+}`),fill:Yo(`#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize lowp float opacity
+fragColor=color*opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize lowp float opacity
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}gl_Position=projectTile(a_pos+u_fill_translate,a_pos);}`),fillOutline:Yo(`in vec2 v_pos;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define highp vec4 outline_color
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize highp vec4 outline_color
+#pragma maplibre: initialize lowp float opacity
+float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);fragColor=outline_color*(alpha*opacity);
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;out vec2 v_pos;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define highp vec4 outline_color
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize highp vec4 outline_color
+#pragma maplibre: initialize lowp float opacity
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}gl_Position=projectTile(a_pos+u_fill_translate,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world_size;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+}`),fillOutlinePattern:Yo(`uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;uniform bool u_sdf_pattern;in vec2 v_pos_a;in vec2 v_pos_b;in vec2 v_pos;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+void main() {
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);if (u_sdf_pattern) {highp float sdf_edge=(256.0-64.0)/256.0;highp float sdf_gamma_a=max(fwidth(color1.a)*0.5,1.0/255.0/16.0);highp float sdf_gamma_b=max(fwidth(color2.a)*0.5,1.0/255.0/16.0);float sdf_alpha_a=smoothstep(sdf_edge-sdf_gamma_a,sdf_edge+sdf_gamma_a,color1.a);float sdf_alpha_b=smoothstep(sdf_edge-sdf_gamma_b,sdf_edge+sdf_gamma_b,color2.a);fragColor=mix(color*sdf_alpha_a,color*sdf_alpha_b,u_fade)*alpha*opacity;} else {fragColor=mix(color1,color2,u_fade)*alpha*opacity;}
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;out vec2 v_pos_a;out vec2 v_pos_b;out vec2 v_pos;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+#pragma maplibre: define lowp float pixel_ratio_from
+#pragma maplibre: define lowp float pixel_ratio_to
+void main() {
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+#pragma maplibre: initialize lowp float pixel_ratio_from
+#pragma maplibre: initialize lowp float pixel_ratio_to
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;gl_Position=projectTile(a_pos+u_fill_translate,a_pos);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world_size;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+}`),fillPattern:Yo(`#ifdef GL_ES
+precision highp float;
+#endif
+uniform vec2 u_texsize;uniform float u_fade;uniform bool u_sdf_pattern;uniform sampler2D u_image;in vec2 v_pos_a;in vec2 v_pos_b;
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+void main() {
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);if (u_sdf_pattern) {highp float sdf_edge=(256.0-64.0)/256.0;highp float sdf_gamma_a=max(fwidth(color1.a)*0.5,1.0/255.0/16.0);highp float sdf_gamma_b=max(fwidth(color2.a)*0.5,1.0/255.0/16.0);float sdf_alpha_a=smoothstep(sdf_edge-sdf_gamma_a,sdf_edge+sdf_gamma_a,color1.a);float sdf_alpha_b=smoothstep(sdf_edge-sdf_gamma_b,sdf_edge+sdf_gamma_b,color2.a);fragColor=mix(color*sdf_alpha_a,color*sdf_alpha_b,u_fade)*opacity;} else {fragColor=mix(color1,color2,u_fade)*opacity;}
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;out vec2 v_pos_a;out vec2 v_pos_b;
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+#pragma maplibre: define lowp float pixel_ratio_from
+#pragma maplibre: define lowp float pixel_ratio_to
+void main() {
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+#pragma maplibre: initialize lowp float pixel_ratio_from
+#pragma maplibre: initialize lowp float pixel_ratio_to
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position=projectTile(a_pos+u_fill_translate,a_pos);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}`),fillExtrusion:Yo(`in vec4 v_color;void main() {fragColor=v_color;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp vec3 u_lightpos_globe;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec2 u_fill_translate;layout(location=0) in vec2 a_pos;layout(location=1) in ivec4 a_normal_ed;
+#ifdef TERRAIN3D
+layout(location=2) in vec2 a_centroid;
+#endif
+out vec4 v_color;
+#pragma maplibre: define highp float base
+#pragma maplibre: define highp float height
+#pragma maplibre: define highp vec4 color
+void main() {
+#pragma maplibre: initialize highp float base
+#pragma maplibre: initialize highp float height
+#pragma maplibre: initialize highp vec4 color
+vec3 normal=vec3(a_normal_ed.xyz);
+#ifdef TERRAIN3D
+float height_terrain3d_offset=get_elevation(a_centroid);float base_terrain3d_offset=height_terrain3d_offset-(base > 0.0 ? 0.0 : 10.0);
+#else
+float height_terrain3d_offset=0.0;float base_terrain3d_offset=0.0;
+#endif
+base=max(0.0,base)+base_terrain3d_offset;height=max(0.0,height)+height_terrain3d_offset;float t=float(a_normal_ed.x & 1);float elevation=t > 0.0 ? height : base;vec2 posInTile=a_pos+u_fill_translate;
+#ifdef GLOBE
+vec3 spherePos=projectToSphere(posInTile,a_pos);gl_Position=interpolateProjectionFor3D(posInTile,spherePos,elevation);
+#else
+gl_Position=u_projection_matrix*vec4(posInTile,elevation,1.0);
+#endif
+float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;vec3 normalForLighting=normal/16384.0;float directional=clamp(dot(normalForLighting,u_lightpos),0.0,1.0);
+#ifdef GLOBE
+mat3 rotMatrix=globeGetRotationMatrix(spherePos);normalForLighting=rotMatrix*normalForLighting;directional=mix(directional,clamp(dot(normalForLighting,u_lightpos_globe),0.0,1.0),u_projection_transition);
+#endif
+directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}`),fillExtrusionPattern:Yo(`uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;in vec2 v_pos_a;in vec2 v_pos_b;in vec4 v_lighting;
+#pragma maplibre: define lowp float base
+#pragma maplibre: define lowp float height
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+#pragma maplibre: define lowp float pixel_ratio_from
+#pragma maplibre: define lowp float pixel_ratio_to
+void main() {
+#pragma maplibre: initialize lowp float base
+#pragma maplibre: initialize lowp float height
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+#pragma maplibre: initialize lowp float pixel_ratio_from
+#pragma maplibre: initialize lowp float pixel_ratio_to
+vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);fragColor=mixedColor*v_lighting;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec2 u_fill_translate;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp vec3 u_lightpos_globe;uniform lowp float u_lightintensity;layout(location=0) in vec2 a_pos;layout(location=1) in ivec4 a_normal_ed;
+#ifdef TERRAIN3D
+layout(location=2) in vec2 a_centroid;
+#endif
+#ifdef GLOBE
+out vec3 v_sphere_pos;
+#endif
+out vec2 v_pos_a;out vec2 v_pos_b;out vec4 v_lighting;
+#pragma maplibre: define lowp float base
+#pragma maplibre: define lowp float height
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+#pragma maplibre: define lowp float pixel_ratio_from
+#pragma maplibre: define lowp float pixel_ratio_to
+void main() {
+#pragma maplibre: initialize lowp float base
+#pragma maplibre: initialize lowp float height
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+#pragma maplibre: initialize lowp float pixel_ratio_from
+#pragma maplibre: initialize lowp float pixel_ratio_to
+vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec3 normal=vec3(a_normal_ed.xyz);float edgedistance=float(a_normal_ed.w);vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;
+#ifdef TERRAIN3D
+float height_terrain3d_offset=get_elevation(a_centroid);float base_terrain3d_offset=height_terrain3d_offset-(base > 0.0 ? 0.0 : 10.0);
+#else
+float height_terrain3d_offset=0.0;float base_terrain3d_offset=0.0;
+#endif
+base=max(0.0,base)+base_terrain3d_offset;height=max(0.0,height)+height_terrain3d_offset;float t=float(a_normal_ed.x & 1);float elevation=t > 0.0 ? height : base;vec2 posInTile=a_pos+u_fill_translate;
+#ifdef GLOBE
+vec3 spherePos=projectToSphere(posInTile,a_pos);vec3 elevatedPos=spherePos*(1.0+elevation/GLOBE_RADIUS);v_sphere_pos=elevatedPos;gl_Position=interpolateProjectionFor3D(posInTile,spherePos,elevation);
+#else
+gl_Position=u_projection_matrix*vec4(posInTile,elevation,1.0);
+#endif
+vec2 pos=a_normal_ed.x==1 && a_normal_ed.y==0 && a_normal_ed.z==16384
+? a_pos
+: vec2(edgedistance,elevation*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}`),hillshadePrepare:Yo(`#ifdef GL_ES
+precision highp float;
+#endif
+uniform sampler2D u_image;in vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform vec4 u_unpack;float getElevation(ivec2 texel) {vec4 data=texelFetch(u_image,texel,0)*255.0;data.a=-1.0;return dot(data,u_unpack);}void main() {ivec2 pos=ivec2(gl_FragCoord.xy)+ivec2(1);float tileSize=u_dimension.x-4.0;float a=getElevation(pos+ivec2(-1,-1));float b=getElevation(pos+ivec2(0,-1));float c=getElevation(pos+ivec2(1,-1));float d=getElevation(pos+ivec2(-1,0));float e=getElevation(pos);float f=getElevation(pos+ivec2(1,0));float g=getElevation(pos+ivec2(-1,1));float h=getElevation(pos+ivec2(0,1));float i=getElevation(pos+ivec2(1,1));float exaggerationFactor=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;float exaggeration=u_zoom < 15.0 ? (u_zoom-15.0)*exaggerationFactor : 0.0;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))*tileSize/pow(2.0,exaggeration+(28.2562-u_zoom));fragColor=clamp(vec4(deriv.x/8.0+0.5,deriv.y/8.0+0.5,1.0,1.0),0.0,1.0);
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,"uniform mat4 u_matrix;uniform vec2 u_dimension;layout(location=0) in vec2 a_pos;layout(location=1) in vec2 a_texture_pos;out vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"),hillshade:Yo(`uniform sampler2D u_image;in vec2 v_pos;uniform vec2 u_latrange;uniform float u_exaggeration;uniform vec4 u_accent;uniform int u_method;uniform float u_altitudes[NUM_ILLUMINATION_SOURCES];uniform float u_azimuths[NUM_ILLUMINATION_SOURCES];uniform vec4 u_shadows[NUM_ILLUMINATION_SOURCES];uniform vec4 u_highlights[NUM_ILLUMINATION_SOURCES];
+#define PI 3.141592653589793
+#define STANDARD 0
+#define COMBINED 1
+#define IGOR 2
+#define MULTIDIRECTIONAL 3
+#define BASIC 4
+float get_aspect(vec2 deriv){return deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);}void igor_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;float aspect=get_aspect(deriv);float azimuth=u_azimuths[0]+PI;float slope_stength=atan(length(deriv))*2.0/PI;float aspect_strength=1.0-abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);float shadow_strength=slope_stength*aspect_strength;float highlight_strength=slope_stength*(1.0-aspect_strength);fragColor=u_shadows[0]*shadow_strength+u_highlights[0]*highlight_strength;}void standard_hillshade(vec2 deriv){float azimuth=u_azimuths[0]+PI;float slope=atan(0.625*length(deriv));float aspect=get_aspect(deriv);float intensity=u_exaggeration;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadows[0],u_highlights[0],shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);fragColor=accent_color*(1.0-shade_color.a)+shade_color;}void basic_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;float azimuth=u_azimuths[0]+PI;float cos_az=cos(azimuth);float sin_az=sin(azimuth);float cos_alt=cos(u_altitudes[0]);float sin_alt=sin(u_altitudes[0]);float cang=(sin_alt-(deriv.y*cos_az*cos_alt-deriv.x*sin_az*cos_alt))/sqrt(1.0+dot(deriv,deriv));float shade=clamp(cang,0.0,1.0);if(shade > 0.5){fragColor=u_highlights[0]*(2.0*shade-1.0);}else
+{fragColor=u_shadows[0]*(1.0-2.0*shade);}}void multidirectional_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;fragColor=vec4(0,0,0,0);for(int i=0; i < NUM_ILLUMINATION_SOURCES; i++){float cos_alt=cos(u_altitudes[i]);float sin_alt=sin(u_altitudes[i]);float cos_az=-cos(u_azimuths[i]);float sin_az=-sin(u_azimuths[i]);float cang=(sin_alt-(deriv.y*cos_az*cos_alt-deriv.x*sin_az*cos_alt))/sqrt(1.0+dot(deriv,deriv));float shade=clamp(cang,0.0,1.0);if(shade > 0.5){fragColor+=u_highlights[i]*(2.0*shade-1.0)/float(NUM_ILLUMINATION_SOURCES);}else
+{fragColor+=u_shadows[i]*(1.0-2.0*shade)/float(NUM_ILLUMINATION_SOURCES);}}}void combined_hillshade(vec2 deriv){deriv=deriv*u_exaggeration*2.0;float azimuth=u_azimuths[0]+PI;float cos_az=cos(azimuth);float sin_az=sin(azimuth);float cos_alt=cos(u_altitudes[0]);float sin_alt=sin(u_altitudes[0]);float cang=acos((sin_alt-(deriv.y*cos_az*cos_alt-deriv.x*sin_az*cos_alt))/sqrt(1.0+dot(deriv,deriv)));cang=clamp(cang,0.0,PI/2.0);float shade=cang*atan(length(deriv))*4.0/PI/PI;float highlight=(PI/2.0-cang)*atan(length(deriv))*4.0/PI/PI;fragColor=u_shadows[0]*shade+u_highlights[0]*highlight;}void main() {vec2 size=vec2(textureSize(u_image,0));vec2 texturePos=(v_pos*(size-2.0)+1.0)/size;vec4 pixel=texture(u_image,texturePos);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));vec2 deriv=((pixel.rg*8.0)-4.0)/scaleFactor;if (u_method==BASIC) {basic_hillshade(deriv);} else if (u_method==COMBINED) {combined_hillshade(deriv);} else if (u_method==IGOR) {igor_hillshade(deriv);} else if (u_method==MULTIDIRECTIONAL) {multidirectional_hillshade(deriv);} else if (u_method==STANDARD) {standard_hillshade(deriv);} else {standard_hillshade(deriv);}
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,"uniform mat4 u_matrix;layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=projectTile(a_pos,a_pos);v_pos=a_pos/8192.0;if (a_pos.y <-32767.5) {v_pos.y=0.0;}if (a_pos.y > 32766.5) {v_pos.y=1.0;}}"),line:Yo(`flat in vec2 v_width2;in vec2 v_normal;in float v_gamma_scale;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);fragColor=color*(alpha*opacity);
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`
+#define scale 0.015873016
+layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;uniform vec2 u_translation;uniform mediump float u_ratio;out vec2 v_normal;flat out vec2 v_width2;out float v_gamma_scale;out highp float v_linesofar;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define mediump float gapwidth
+#pragma maplibre: define lowp float offset
+#pragma maplibre: define mediump float width
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize mediump float gapwidth
+#pragma maplibre: initialize lowp float offset
+#pragma maplibre: initialize mediump float width
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_direction=float(int(a_data.z & 3u)-1);v_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*2.0;vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+#ifdef TERRAIN3D
+v_gamma_scale=1.0;
+#else
+float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;
+#endif
+v_width2=vec2(outset,inset);}`),lineGradient:Yo(`uniform sampler2D u_image;flat in vec2 v_width2;in vec2 v_normal;in float v_gamma_scale;in highp vec2 v_uv;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture(u_image,v_uv);fragColor=color*(alpha*opacity);
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`
+#define scale 0.015873016
+layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in float a_uv_x;layout(location=3) in float a_split_index;uniform vec2 u_translation;uniform mediump float u_ratio;uniform float u_image_height;out vec2 v_normal;flat out vec2 v_width2;out float v_gamma_scale;out highp vec2 v_uv;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define mediump float gapwidth
+#pragma maplibre: define lowp float offset
+#pragma maplibre: define mediump float width
+void main() {
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize mediump float gapwidth
+#pragma maplibre: initialize lowp float offset
+#pragma maplibre: initialize mediump float width
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_direction=float(int(a_data.z & 3u)-1);highp float texel_height=1.0/u_image_height;highp float half_texel_height=0.5*texel_height;v_uv=vec2(a_uv_x,a_split_index*texel_height-half_texel_height);vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+#ifdef TERRAIN3D
+v_gamma_scale=1.0;
+#else
+float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;
+#endif
+v_width2=vec2(outset,inset);}`),linePattern:Yo(`#ifdef GL_ES
+precision highp float;
+#endif
+uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;in vec2 v_normal;flat in vec2 v_width2;in float v_linesofar;in float v_gamma_scale;flat in float v_width;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+#pragma maplibre: define lowp float pixel_ratio_from
+#pragma maplibre: define lowp float pixel_ratio_to
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+#pragma maplibre: initialize lowp float pixel_ratio_from
+#pragma maplibre: initialize lowp float pixel_ratio_to
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+clipAntimeridian();vec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float tileZoomRatio=u_scale.x;float fromScale=u_scale.y;float toScale=u_scale.z;vec2 display_size_a=(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b=(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a=display_size_a.y/v_width;float aspect_b=display_size_b.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b=mod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;vec2 pos_a=mix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b=mix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color=mix(texture(u_image,pos_a),texture(u_image,pos_b),u_fade);fragColor=color*alpha*opacity;
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`
+#define scale 0.015873016
+#define LINE_DISTANCE_SCALE 2.0
+layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;uniform vec2 u_translation;uniform mediump float u_ratio;out vec2 v_normal;flat out vec2 v_width2;out float v_linesofar;out float v_gamma_scale;flat out float v_width;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define lowp float offset
+#pragma maplibre: define mediump float gapwidth
+#pragma maplibre: define mediump float width
+#pragma maplibre: define lowp float floorwidth
+#pragma maplibre: define lowp vec4 pattern_from
+#pragma maplibre: define lowp vec4 pattern_to
+#pragma maplibre: define lowp float pixel_ratio_from
+#pragma maplibre: define lowp float pixel_ratio_to
+void main() {
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize lowp float offset
+#pragma maplibre: initialize mediump float gapwidth
+#pragma maplibre: initialize mediump float width
+#pragma maplibre: initialize lowp float floorwidth
+#pragma maplibre: initialize mediump vec4 pattern_from
+#pragma maplibre: initialize mediump vec4 pattern_to
+#pragma maplibre: initialize lowp float pixel_ratio_from
+#pragma maplibre: initialize lowp float pixel_ratio_to
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_direction=float(int(a_data.z & 3u)-1);float a_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*LINE_DISTANCE_SCALE;vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+#ifdef TERRAIN3D
+v_gamma_scale=1.0;
+#else
+float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;
+#endif
+v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=floorwidth;}`),lineSDF:Yo(`uniform lowp float u_lineatlas_width;uniform sampler2D u_image;uniform float u_mix;in vec2 v_normal;flat in vec2 v_width2;in vec2 v_tex_a;in vec2 v_tex_b;in float v_gamma_scale;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define mediump float width
+#pragma maplibre: define lowp float floorwidth
+#pragma maplibre: define mediump vec4 dasharray_from
+#pragma maplibre: define mediump vec4 dasharray_to
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize mediump float width
+#pragma maplibre: initialize lowp float floorwidth
+#pragma maplibre: initialize mediump vec4 dasharray_from
+#pragma maplibre: initialize mediump vec4 dasharray_to
+clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture(u_image,v_tex_a).a;float sdfdist_b=texture(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);float sdfgamma=(u_lineatlas_width/256.0/u_device_pixel_ratio)/min(dasharray_from.w,dasharray_to.w);alpha*=smoothstep(0.5-sdfgamma/floorwidth,0.5+sdfgamma/floorwidth,sdfdist);fragColor=color*(alpha*opacity);
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`
+#define scale 0.015873016
+#define LINE_DISTANCE_SCALE 2.0
+layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;uniform vec2 u_translation;uniform mediump float u_ratio;uniform float u_tileratio;uniform float u_crossfade_from;uniform float u_crossfade_to;uniform float u_lineatlas_height;out vec2 v_normal;flat out vec2 v_width2;out vec2 v_tex_a;out vec2 v_tex_b;out float v_gamma_scale;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define highp vec4 color
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define mediump float gapwidth
+#pragma maplibre: define lowp float offset
+#pragma maplibre: define mediump float width
+#pragma maplibre: define lowp float floorwidth
+#pragma maplibre: define mediump vec4 dasharray_from
+#pragma maplibre: define mediump vec4 dasharray_to
+void main() {
+#pragma maplibre: initialize highp vec4 color
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize mediump float gapwidth
+#pragma maplibre: initialize lowp float offset
+#pragma maplibre: initialize mediump float width
+#pragma maplibre: initialize lowp float floorwidth
+#pragma maplibre: initialize mediump vec4 dasharray_from
+#pragma maplibre: initialize mediump vec4 dasharray_to
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_direction=float(int(a_data.z & 3u)-1);float a_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*LINE_DISTANCE_SCALE;vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+#ifdef TERRAIN3D
+v_gamma_scale=1.0;
+#else
+float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;
+#endif
+float u_patternscale_a_x=u_tileratio/dasharray_from.w/u_crossfade_from;float u_patternscale_a_y=-dasharray_from.z/2.0/u_lineatlas_height;float u_patternscale_b_x=u_tileratio/dasharray_to.w/u_crossfade_to;float u_patternscale_b_y=-dasharray_to.z/2.0/u_lineatlas_height;v_tex_a=vec2(a_linesofar*u_patternscale_a_x/floorwidth,normal.y*u_patternscale_a_y+(float(dasharray_from.y)+0.5)/u_lineatlas_height);v_tex_b=vec2(a_linesofar*u_patternscale_b_x/floorwidth,normal.y*u_patternscale_b_y+(float(dasharray_to.y)+0.5)/u_lineatlas_height);v_width2=vec2(outset,inset);}`),lineGradientSDF:Yo(`uniform sampler2D u_image;uniform sampler2D u_image_dash;uniform float u_mix;uniform lowp float u_lineatlas_width;in vec2 v_normal;flat in vec2 v_width2;in vec2 v_tex_a;in vec2 v_tex_b;in float v_gamma_scale;in highp vec2 v_uv;
+#ifdef GLOBE
+in float v_depth;
+#endif
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define mediump float width
+#pragma maplibre: define lowp float floorwidth
+#pragma maplibre: define mediump vec4 dasharray_from
+#pragma maplibre: define mediump vec4 dasharray_to
+void main() {
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize mediump float width
+#pragma maplibre: initialize lowp float floorwidth
+#pragma maplibre: initialize mediump vec4 dasharray_from
+#pragma maplibre: initialize mediump vec4 dasharray_to
+clipAntimeridian();float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture(u_image,v_uv);float sdfdist_a=texture(u_image_dash,v_tex_a).a;float sdfdist_b=texture(u_image_dash,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);float sdfgamma=(u_lineatlas_width/256.0)/min(dasharray_from.w,dasharray_to.w);float dash_alpha=smoothstep(0.5-sdfgamma/floorwidth,0.5+sdfgamma/floorwidth,sdfdist);fragColor=color*(alpha*dash_alpha*opacity);
+#ifdef GLOBE
+if (v_depth > 1.0) {discard;}
+#endif
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`
+#define scale 0.015873016
+#define LINE_DISTANCE_SCALE 2.0
+layout(location=0) in ivec2 a_pos_normal;layout(location=1) in uvec4 a_data;layout(location=2) in float a_uv_x;layout(location=3) in float a_split_index;uniform vec2 u_translation;uniform mediump float u_ratio;uniform float u_image_height;uniform float u_tileratio;uniform float u_crossfade_from;uniform float u_crossfade_to;uniform float u_lineatlas_height;out vec2 v_normal;flat out vec2 v_width2;out float v_gamma_scale;out highp vec2 v_uv;out vec2 v_tex_a;out vec2 v_tex_b;
+#ifdef GLOBE
+out float v_depth;
+#endif
+#pragma maplibre: define lowp float blur
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define mediump float gapwidth
+#pragma maplibre: define lowp float offset
+#pragma maplibre: define mediump float width
+#pragma maplibre: define lowp float floorwidth
+#pragma maplibre: define mediump vec4 dasharray_from
+#pragma maplibre: define mediump vec4 dasharray_to
+void main() {
+#pragma maplibre: initialize lowp float blur
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize mediump float gapwidth
+#pragma maplibre: initialize lowp float offset
+#pragma maplibre: initialize mediump float width
+#pragma maplibre: initialize lowp float floorwidth
+#pragma maplibre: initialize mediump vec4 dasharray_from
+#pragma maplibre: initialize mediump vec4 dasharray_to
+if (opacity < 0.01) {gl_Position=vec4(-2.0,-2.0,-2.0,1.0);return;}float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=vec2(ivec2(a_data.xy)-128);float a_direction=float(int(a_data.z & 3u)-1);float a_linesofar=float((a_data.z >> 2u)+a_data.w*64u)*LINE_DISTANCE_SCALE;float texel_height=1.0/u_image_height;float half_texel_height=0.5*texel_height;v_uv=vec2(a_uv_x,a_split_index*texel_height-half_texel_height);vec2 pos=vec2(a_pos_normal >> 1);mediump vec2 normal=vec2(a_pos_normal & 1);normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);float adjustedThickness=projectLineThickness(pos.y);vec4 projected_no_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation);vec4 projected_with_extrude=projectTile(pos+offset2/u_ratio*adjustedThickness+u_translation+dist/u_ratio*adjustedThickness);gl_Position=projected_with_extrude;
+#ifdef GLOBE
+v_depth=gl_Position.z/gl_Position.w;
+#endif
+#ifdef TERRAIN3D
+v_gamma_scale=1.0;
+#else
+float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length((projected_with_extrude.xy-projected_no_extrude.xy)/projected_with_extrude.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;
+#endif
+float u_patternscale_a_x=u_tileratio/dasharray_from.w/u_crossfade_from;float u_patternscale_a_y=-dasharray_from.z/2.0/u_lineatlas_height;float u_patternscale_b_x=u_tileratio/dasharray_to.w/u_crossfade_to;float u_patternscale_b_y=-dasharray_to.z/2.0/u_lineatlas_height;v_tex_a=vec2(a_linesofar*u_patternscale_a_x/floorwidth,normal.y*u_patternscale_a_y+(float(dasharray_from.y)+0.5)/u_lineatlas_height);v_tex_b=vec2(a_linesofar*u_patternscale_b_x/floorwidth,normal.y*u_patternscale_b_y+(float(dasharray_to.y)+0.5)/u_lineatlas_height);v_width2=vec2(outset,inset);}`),layerOpacity:Yo(`uniform sampler2D u_image;uniform float u_opacity;in vec2 v_pos;void main() {fragColor=texture(u_image,v_pos)*u_opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(0.0);
+#endif
+}`,"layout(location=0) in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=vec4(a_pos.x*2.0-1.0,1.0-a_pos.y*2.0,0.0,1.0);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),raster:Yo(`uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;in vec3 v_pos0;in vec3 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture(u_image0,v_pos0.xy/v_pos0.z);vec4 color1=texture(u_image1,v_pos1.xy/v_pos1.z);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);fragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;uniform vec3 u_image_warp;uniform vec4 u_coords_top;uniform vec4 u_coords_bottom;layout(location=0) in vec2 a_pos;out vec3 v_pos0;out vec3 v_pos1;void main() {vec2 fractionalPos=a_pos/8192.0;vec2 topLeft=u_coords_top.xy;vec2 topRight=u_coords_top.zw;vec2 bottomLeft=u_coords_bottom.xy;vec2 bottomRight=u_coords_bottom.zw;vec2 bilinearPos=mix(mix(topLeft,topRight,fractionalPos.x),mix(bottomLeft,bottomRight,fractionalPos.x),fractionalPos.y);float denominator=dot(u_image_warp.xy,fractionalPos)+1.0;vec2 acrossTop=topRight-topLeft+u_image_warp.x*topRight;vec2 downLeft=bottomLeft-topLeft+u_image_warp.y*bottomLeft;vec2 projectivePos=(acrossTop*fractionalPos.x+downLeft*fractionalPos.y+topLeft)/denominator;vec2 position=mix(projectivePos,bilinearPos,u_image_warp.z);gl_Position=projectTile(position,position);vec2 texturePos=((fractionalPos-0.5)/u_buffer_scale)+0.5;
+#ifdef GLOBE
+if (a_pos.y <-32767.5) {texturePos.y=0.0;}if (a_pos.y > 32766.5) {texturePos.y=1.0;}
+#endif
+float perspectiveRatio=mix(1.0/denominator,1.0,u_image_warp.z);v_pos0=vec3(texturePos*perspectiveRatio,perspectiveRatio);vec2 parentPos=(texturePos*u_scale_parent)+u_tl_parent;v_pos1=vec3(parentPos*perspectiveRatio,perspectiveRatio);}`),symbolIcon:Yo(`uniform sampler2D u_texture;in vec2 v_tex;flat in float v_total_opacity;void main() {fragColor=texture(u_texture,v_tex)*v_total_opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`layout(location=0) in vec4 a_pos_offset;layout(location=1) in uvec4 a_data;layout(location=2) in vec4 a_pixeloffset;layout(location=3) in vec3 a_projected_pos;layout(location=4) in uint a_fade_opacity;layout(location=5) in float a_height_offset;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform bool u_rotate_symbol;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;uniform bool u_is_along_line;uniform bool u_is_variable_anchor;uniform vec2 u_translation;uniform float u_pitched_scale;uniform bool u_is_offset;uniform bool u_height_anchor_ground;out vec2 v_tex;flat out float v_total_opacity;
+#pragma maplibre: define lowp float opacity
+void main() {
+#pragma maplibre: initialize lowp float opacity
+vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=vec2(a_data.xy);vec2 a_size=vec2(a_data.zw);float a_size_min=float(a_data.z >> 1u);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_minFontScale=a_pixeloffset.zw/256.0;float ele=a_height_offset+(u_height_anchor_ground ? get_elevation(a_pos) : 0.0);highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 translated_a_pos=a_pos+u_translation;vec4 projectedPoint=projectTileWithElevation(translated_a_pos,ele);vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_symbol_fade_change :-u_symbol_fade_change;float visibility=calculate_visibility(projectedPoint);v_total_opacity=opacity*max(0.0,min(visibility,fade_opacity[0]+fade_change));if (v_total_opacity < 0.1){gl_Position=vec4(-2.,-2.,-2.,1.);return;}highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?
+camera_to_anchor_distance/u_camera_to_center_distance :
+u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);if (!u_is_offset) {size*=perspective_ratio;}float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=projectTileWithElevation(translated_a_pos+vec2(1,0),ele);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos;if (u_is_along_line || u_is_variable_anchor) {projected_pos=vec4(a_projected_pos.xy,ele,1.0);} else if (u_pitch_with_map) {projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy+u_translation,ele,1.0);} else {projected_pos=u_label_plane_matrix*projectTileWithElevation(a_projected_pos.xy+u_translation,ele);}float z=float(u_pitch_with_map)*projected_pos.z/projected_pos.w;float projectionScaling=1.0;
+#ifdef GLOBE
+if(u_pitch_with_map) {float anchor_pos_tile_y=(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w,z,1.0)).y;projectionScaling=mix(projectionScaling,1.0/circumferenceRatioAtTileY(anchor_pos_tile_y)*u_pitched_scale,u_projection_transition);}
+#endif
+vec4 finalPos=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0)*projectionScaling,z,1.0);if(u_pitch_with_map) {finalPos=projectTileWithElevation(finalPos.xy,finalPos.z);}gl_Position=finalPos;v_tex=a_tex/u_texsize;}`),symbolSDF:Yo(`#define SDF_PX 8.0
+uniform bool u_is_halo;uniform bool u_is_plain;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform bool u_is_text;in vec2 v_data0;in vec3 v_data1;
+#pragma maplibre: define highp vec4 fill_color
+#pragma maplibre: define highp vec4 halo_color
+#pragma maplibre: define lowp float halo_width
+#pragma maplibre: define lowp float halo_blur
+void main() {
+#pragma maplibre: initialize highp vec4 fill_color
+#pragma maplibre: initialize highp vec4 halo_color
+#pragma maplibre: initialize lowp float halo_width
+#pragma maplibre: initialize lowp float halo_blur
+float EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float total_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float inner_edge=(256.0-64.0)/256.0;lowp float dist=texture(u_texture,tex).a;lowp vec4 color_alpha_out_text,color_alpha_out_halo;if (u_is_plain){highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(inner_edge-gamma_scaled,inner_edge+gamma_scaled,dist);color_alpha_out_text=total_opacity*alpha*fill_color;}if (u_is_halo) {float gamma_halo=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);float inner_edge_halo=inner_edge+gamma_halo*gamma_scale;highp float gamma_scaled_halo=gamma_halo*gamma_scale;highp float alpha_halo=smoothstep(inner_edge_halo-gamma_scaled_halo,inner_edge_halo+gamma_scaled_halo,dist);highp float halo_edge=(6.0-halo_width/fontScale)/SDF_PX;alpha_halo= min(smoothstep(halo_edge-gamma_scaled_halo,halo_edge+gamma_scaled_halo,dist),1.0-alpha_halo);color_alpha_out_halo=total_opacity*alpha_halo*halo_color;}if (u_is_plain && u_is_halo) {fragColor=color_alpha_out_text+(1.-color_alpha_out_text.a)*color_alpha_out_halo;} else if (u_is_halo){fragColor=color_alpha_out_halo;} else {fragColor=color_alpha_out_text;}
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`layout(location=0) in vec4 a_pos_offset;layout(location=1) in uvec4 a_data;layout(location=2) in vec4 a_pixeloffset;layout(location=3) in vec3 a_projected_pos;layout(location=4) in uint a_fade_opacity;layout(location=5) in float a_height_offset;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform bool u_is_along_line;uniform bool u_is_variable_anchor;uniform bool u_rotate_symbol;uniform vec2 u_texsize;uniform vec2 u_translation;uniform float u_pitched_scale;uniform bool u_is_offset;uniform bool u_height_anchor_ground;out vec2 v_data0;out vec3 v_data1;
+#pragma maplibre: define highp vec4 fill_color
+#pragma maplibre: define highp vec4 halo_color
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define lowp float halo_width
+#pragma maplibre: define lowp float halo_blur
+void main() {
+#pragma maplibre: initialize highp vec4 fill_color
+#pragma maplibre: initialize highp vec4 halo_color
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize lowp float halo_width
+#pragma maplibre: initialize lowp float halo_blur
+vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=vec2(a_data.xy);vec2 a_size=vec2(a_data.zw);float a_size_min=float(a_data.z >> 1u);vec2 a_pxoffset=a_pixeloffset.xy/16.0;vec2 a_minFontScale=a_pixeloffset.zw/256.0;float ele=a_height_offset+(u_height_anchor_ground ? get_elevation(a_pos) : 0.0);highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 translated_a_pos=a_pos+u_translation;vec4 projectedPoint=projectTileWithElevation(translated_a_pos,ele);vec2 fade_opacity=unpack_opacity(a_fade_opacity);float visibility=calculate_visibility(projectedPoint);float fade_change=fade_opacity[1] > 0.5 ? u_symbol_fade_change :-u_symbol_fade_change;float interpolated_fade_opacity=max(0.0,min(visibility,fade_opacity[0]+fade_change));float total_opacity=opacity*interpolated_fade_opacity;if (total_opacity < 0.1){gl_Position=vec4(-2.,-2.,-2.,1.);return;}highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?
+camera_to_anchor_distance/u_camera_to_center_distance :
+u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);if (!u_is_offset) {size*=perspective_ratio;}float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=projectTileWithElevation(translated_a_pos+vec2(1,0),ele);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos;if (u_is_along_line || u_is_variable_anchor) {projected_pos=vec4(a_projected_pos.xy,ele,1.0);} else if (u_pitch_with_map) {projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy+u_translation,ele,1.0);} else {projected_pos=u_label_plane_matrix*projectTileWithElevation(a_projected_pos.xy+u_translation,ele);}float z=float(u_pitch_with_map)*projected_pos.z/projected_pos.w;float projectionScaling=1.0;
+#ifdef GLOBE
+if(u_pitch_with_map) {float anchor_pos_tile_y=(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w,z,1.0)).y;projectionScaling=mix(projectionScaling,1.0/circumferenceRatioAtTileY(anchor_pos_tile_y)*u_pitched_scale,u_projection_transition);}
+#endif
+vec4 finalPos=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset)*projectionScaling,z,1.0);if(u_pitch_with_map) {finalPos=projectTileWithElevation(finalPos.xy,finalPos.z);}float gamma_scale=finalPos.w;gl_Position=finalPos;v_data0=a_tex/u_texsize;v_data1=vec3(gamma_scale,size,total_opacity);}`),symbolTextAndIcon:Yo(`#define SDF_PX 8.0
+#define SDF 1.0
+#define ICON 0.0
+uniform bool u_is_halo;uniform bool u_is_text;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;in vec4 v_data0;in vec3 v_data1;flat in float v_is_sdf;
+#pragma maplibre: define highp vec4 fill_color
+#pragma maplibre: define highp vec4 halo_color
+#pragma maplibre: define lowp float halo_width
+#pragma maplibre: define lowp float halo_blur
+void main() {
+#pragma maplibre: initialize highp vec4 fill_color
+#pragma maplibre: initialize highp vec4 halo_color
+#pragma maplibre: initialize lowp float halo_width
+#pragma maplibre: initialize lowp float halo_blur
+float total_opacity=v_data1[2];if (v_is_sdf==ICON) {vec2 tex_icon=v_data0.zw;fragColor=texture(u_texture_icon,tex_icon)*total_opacity;
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+return;}vec2 tex=v_data0.xy;float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_data1.x;float size=v_data1.y;float fontScale=size/24.0;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;lowp float dist=texture(u_texture,tex).a;lowp vec4 color_alpha_out,color_alpha_out_halo;if (u_is_text) {highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);color_alpha_out=fill_color*(alpha*total_opacity);}if (u_is_halo) {highp float gamma_halo=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);lowp float buff_halo=(6.0-halo_width/fontScale)/SDF_PX;highp float gamma_scaled_halo=gamma_halo*gamma_scale;highp float alpha_halo=smoothstep(buff_halo-gamma_scaled_halo,buff_halo+gamma_scaled_halo,dist);color_alpha_out_halo=halo_color*(alpha_halo*total_opacity);}if (u_is_text && u_is_halo) {fragColor=color_alpha_out+(1.-color_alpha_out.a)*color_alpha_out_halo;} else if (u_is_halo) {fragColor=color_alpha_out_halo;} else {fragColor=color_alpha_out;}
+#ifdef OVERDRAW_INSPECTOR
+fragColor=vec4(1.0);
+#endif
+}`,`layout(location=0) in vec4 a_pos_offset;layout(location=1) in uvec4 a_data;layout(location=2) in vec3 a_projected_pos;layout(location=3) in uint a_fade_opacity;layout(location=4) in float a_height_offset;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform bool u_rotate_symbol;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;uniform bool u_is_along_line;uniform bool u_is_variable_anchor;uniform vec2 u_translation;uniform float u_pitched_scale;uniform bool u_is_offset;uniform bool u_height_anchor_ground;out vec4 v_data0;out vec3 v_data1;flat out float v_is_sdf;
+#pragma maplibre: define highp vec4 fill_color
+#pragma maplibre: define highp vec4 halo_color
+#pragma maplibre: define lowp float opacity
+#pragma maplibre: define lowp float halo_width
+#pragma maplibre: define lowp float halo_blur
+void main() {
+#pragma maplibre: initialize highp vec4 fill_color
+#pragma maplibre: initialize highp vec4 halo_color
+#pragma maplibre: initialize lowp float opacity
+#pragma maplibre: initialize lowp float halo_width
+#pragma maplibre: initialize lowp float halo_blur
+vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=vec2(a_data.xy);vec2 a_size=vec2(a_data.zw);float a_size_min=float(a_data.z >> 1u);float is_sdf=float(a_data.z & 1u);float ele=a_height_offset+(u_height_anchor_ground ? get_elevation(a_pos) : 0.0);highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 translated_a_pos=a_pos+u_translation;vec4 projectedPoint=projectTileWithElevation(translated_a_pos,ele);vec2 fade_opacity=unpack_opacity(a_fade_opacity);float visibility=calculate_visibility(projectedPoint);float fade_change=fade_opacity[1] > 0.5 ? u_symbol_fade_change :-u_symbol_fade_change;float interpolated_fade_opacity=max(0.0,min(visibility,fade_opacity[0]+fade_change));float total_opacity=opacity*interpolated_fade_opacity;if (total_opacity < 0.1){gl_Position=vec4(-2.,-2.,-2.,1.);return;}highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?
+camera_to_anchor_distance/u_camera_to_center_distance :
+u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);if (!u_is_offset) {size*=perspective_ratio;}float fontScale=size/24.0;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=projectTileWithElevation(translated_a_pos+vec2(1,0),ele);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos;if (u_is_along_line || u_is_variable_anchor) {projected_pos=vec4(a_projected_pos.xy,ele,1.0);} else if (u_pitch_with_map) {projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy+u_translation,ele,1.0);} else {projected_pos=u_label_plane_matrix*projectTileWithElevation(a_projected_pos.xy+u_translation,ele);}float z=float(u_pitch_with_map)*projected_pos.z/projected_pos.w;float projectionScaling=1.0;
+#ifdef GLOBE
+if(u_pitch_with_map && !u_is_along_line) {float anchor_pos_tile_y=(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w,z,1.0)).y;projectionScaling=mix(projectionScaling,1.0/circumferenceRatioAtTileY(anchor_pos_tile_y)*u_pitched_scale,u_projection_transition);}
+#endif
+vec4 finalPos=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale)*projectionScaling,z,1.0);if(u_pitch_with_map) {finalPos=projectTileWithElevation(finalPos.xy,finalPos.z);}float gamma_scale=finalPos.w;gl_Position=finalPos;v_data0.xy=a_tex/u_texsize;v_data0.zw=a_tex/u_texsize_icon;v_data1=vec3(gamma_scale,size,total_opacity);v_is_sdf=is_sdf;}`),terrain:Yo("uniform sampler2D u_texture;uniform vec4 u_fog_color;uniform vec4 u_horizon_color;uniform float u_fog_ground_blend;uniform float u_fog_ground_blend_opacity;uniform float u_horizon_fog_blend;uniform bool u_is_globe_mode;in vec2 v_texture_pos;in float v_fog_depth;const float gamma=2.2;vec4 gammaToLinear(vec4 color) {return pow(color,vec4(gamma));}vec4 linearToGamma(vec4 color) {return pow(color,vec4(1.0/gamma));}void main() {vec4 surface_color=texture(u_texture,vec2(v_texture_pos.x,1.0-v_texture_pos.y));if (!u_is_globe_mode && u_fog_ground_blend_opacity > 0.0 && v_fog_depth > u_fog_ground_blend) {vec4 surface_color_linear=gammaToLinear(surface_color);float blend_color=smoothstep(0.0,1.0,max((v_fog_depth-u_horizon_fog_blend)/(1.0-u_horizon_fog_blend),0.0));vec4 fog_horizon_color_linear=mix(gammaToLinear(u_fog_color),gammaToLinear(u_horizon_color),blend_color);float factor_fog=max(v_fog_depth-u_fog_ground_blend,0.0)/(1.0-u_fog_ground_blend);fragColor=linearToGamma(mix(surface_color_linear,fog_horizon_color_linear,pow(factor_fog,2.0)*u_fog_ground_blend_opacity));} else {fragColor=surface_color;}}","layout(location=0) in vec3 a_pos3d;uniform mat4 u_fog_matrix;uniform float u_ele_delta;out vec2 v_texture_pos;out float v_fog_depth;void main() {float ele=get_elevation(a_pos3d.xy);float ele_delta=a_pos3d.z==1.0 ? u_ele_delta : 0.0;v_texture_pos=a_pos3d.xy/8192.0;gl_Position=projectTileFor3D(a_pos3d.xy,ele-ele_delta);vec4 pos=u_fog_matrix*vec4(a_pos3d.xy,ele,1.0);v_fog_depth=pos.z/pos.w*0.5+0.5;}"),terrainDepth:Yo("in float v_depth;const highp vec4 bitSh=vec4(256.*256.*256.,256.*256.,256.,1.);const highp vec4 bitMsk=vec4(0.,vec3(1./256.0));highp vec4 pack(highp float value) {highp vec4 comp=fract(value*bitSh);comp-=comp.xxyz*bitMsk;return comp;}void main() {fragColor=pack(v_depth);}","layout(location=0) in vec3 a_pos3d;uniform float u_ele_delta;out float v_depth;void main() {float ele=get_elevation(a_pos3d.xy);float ele_delta=a_pos3d.z==1.0 ? u_ele_delta : 0.0;gl_Position=projectTileFor3D(a_pos3d.xy,ele-ele_delta);v_depth=gl_Position.z/gl_Position.w;}"),atmosphere:Yo(`#ifdef GL_ES
+precision highp float;
+#endif
+in vec3 view_direction;uniform vec3 u_sun_pos;uniform vec3 u_globe_position;uniform float u_globe_radius;uniform float u_atmosphere_blend;/**Shader use from https:*Made some change to adapt to MapLibre Globe geometry*/const float PI=3.141592653589793;const int iSteps=5;const int jSteps=3;/*radius of the planet*/const float EARTH_RADIUS=6371e3;/*radius of the atmosphere*/const float ATMOS_RADIUS=6471e3;vec2 rsi(vec3 r0,vec3 rd,float sr) {float a=dot(rd,rd);float b=2.0*dot(rd,r0);float c=dot(r0,r0)-(sr*sr);float d=(b*b)-4.0*a*c;if (d < 0.0) return vec2(1e5,-1e5);return vec2((-b-sqrt(d))/(2.0*a),(-b+sqrt(d))/(2.0*a));}vec4 atmosphere(vec3 r,vec3 r0,vec3 pSun,float iSun,float rPlanet,float rAtmos,vec3 kRlh,float kMie,float shRlh,float shMie,float g) {pSun=normalize(pSun);r=normalize(r);vec2 p=rsi(r0,r,rAtmos);if (p.x > p.y) {return vec4(0.0,0.0,0.0,1.0);}if (p.x < 0.0) {p.x=0.0;}vec3 pos=r0+r*p.x;vec2 p2=rsi(r0,r,rPlanet);if (p2.x <=p2.y && p2.x > 0.0) {p.y=min(p.y,p2.x);}float iStepSize=(p.y-p.x)/float(iSteps);float iTime=p.x+iStepSize*0.5;vec3 totalRlh=vec3(0,0,0);vec3 totalMie=vec3(0,0,0);float iOdRlh=0.0;float iOdMie=0.0;float mu=dot(r,pSun);float mumu=mu*mu;float gg=g*g;float pRlh=3.0/(16.0*PI)*(1.0+mumu);float pMie=3.0/(8.0*PI)*((1.0-gg)*(mumu+1.0))/(pow(1.0+gg-2.0*mu*g,1.5)*(2.0+gg));for (int i=0; i < iSteps; i++) {vec3 iPos=r0+r*iTime;float iHeight=length(iPos)-rPlanet;float odStepRlh=exp(-iHeight/shRlh)*iStepSize;float odStepMie=exp(-iHeight/shMie)*iStepSize;iOdRlh+=odStepRlh;iOdMie+=odStepMie;float jStepSize=rsi(iPos,pSun,rAtmos).y/float(jSteps);float jTime=jStepSize*0.5;float jOdRlh=0.0;float jOdMie=0.0;for (int j=0; j < jSteps; j++) {vec3 jPos=iPos+pSun*jTime;float jHeight=length(jPos)-rPlanet;jOdRlh+=exp(-jHeight/shRlh)*jStepSize;jOdMie+=exp(-jHeight/shMie)*jStepSize;jTime+=jStepSize;}vec3 attn=exp(-(kMie*(iOdMie+jOdMie)+kRlh*(iOdRlh+jOdRlh)));totalRlh+=odStepRlh*attn;totalMie+=odStepMie*attn;iTime+=iStepSize;}float opacity=exp(-(length(kRlh)*length(totalRlh)+kMie*length(totalMie)));vec3 color=iSun*(pRlh*kRlh*totalRlh+pMie*kMie*totalMie);return vec4(color,opacity);}void main() {vec3 scale_camera_pos=-u_globe_position*EARTH_RADIUS/u_globe_radius;vec4 color=atmosphere(normalize(view_direction),scale_camera_pos,u_sun_pos,22.0,EARTH_RADIUS,ATMOS_RADIUS,vec3(5.5e-6,13.0e-6,22.4e-6),21e-6,8e3,1.2e3,0.758
+);color.rgb=1.0-exp(-1.0*color.rgb);color=pow(color,vec4(1.0/2.2));fragColor=vec4(color.rgb,1.0-color.a)*u_atmosphere_blend;}`,"layout(location=0) in vec2 a_pos;uniform mat4 u_inv_proj_matrix;out vec3 view_direction;void main() {view_direction=(u_inv_proj_matrix*vec4(a_pos,0.0,1.0)).xyz;gl_Position=vec4(a_pos,0.0,1.0);}"),sky:Yo("uniform vec4 u_sky_color;uniform vec4 u_horizon_color;uniform vec2 u_horizon;uniform vec2 u_horizon_normal;uniform float u_sky_horizon_blend;uniform float u_sky_blend;uniform vec3 u_globe_position;uniform float u_globe_radius;in vec3 v_view_direction;void main() {float x=gl_FragCoord.x;float y=gl_FragCoord.y;float blend=(y-u_horizon.y)*u_horizon_normal.y+(x-u_horizon.x)*u_horizon_normal.x;if (u_sky_blend > 0.0) {vec3 ray=normalize(v_view_direction);float globe_distance=length(u_globe_position);float angle_to_globe_center=acos(clamp(dot(ray,u_globe_position)/globe_distance,-1.0,1.0));float horizon_angle=asin(min(u_globe_radius/globe_distance,1.0));blend=mix(blend,(angle_to_globe_center-horizon_angle)*u_camera_to_center_distance*u_device_pixel_ratio,u_sky_blend);}if (blend > 0.0) {if (blend < u_sky_horizon_blend) {fragColor=mix(u_sky_color,u_horizon_color,pow(1.0-blend/u_sky_horizon_blend,2.0));} else {fragColor=u_sky_color;}}fragColor=mix(fragColor,vec4(vec3(0.0),0.0),u_sky_blend);}","layout(location=0) in vec2 a_pos;uniform mat4 u_inv_proj_matrix;out vec3 v_view_direction;void main() {v_view_direction=(u_inv_proj_matrix*vec4(a_pos,0.0,1.0)).xyz;gl_Position=vec4(a_pos,1.0,1.0);}")},OM="#define PROJECTION_MERCATOR",NM="mercator",M2=class{constructor(){this._cachedMesh=null}get name(){return"mercator"}get useSubdivision(){return!1}get shaderVariantName(){return NM}get shaderDefine(){return OM}get shaderPreludeCode(){return rd.projectionMercator}get vertexShaderPreludeCode(){return rd.projectionMercator.vertexSource}get subdivisionGranularity(){return wb.noSubdivision}get useGlobeControls(){return!1}get transitionState(){return 0}destroy(){}getMeshFromTileID(e,r,t,i,a){if(this._cachedMesh)return this._cachedMesh;let o=new sp;o.emplaceBack(0,0),o.emplaceBack(Bi,0),o.emplaceBack(0,Bi),o.emplaceBack(Bi,Bi);let s=e.createVertexBuffer(o,i0.members),l=Ks.simpleSegment(0,0,4,2),n=new ed;n.emplaceBack(1,0,2),n.emplaceBack(1,2,3);let u=e.createIndexBuffer(n);return this._cachedMesh=new Um(s,u,l),this._cachedMesh}recalculate(){}hasTransition(){return!1}},S2=class sU{constructor(r=0,t=0,i=0,a=0){if(isNaN(r)||r<0||isNaN(t)||t<0||isNaN(i)||i<0||isNaN(a)||a<0)throw Error("Invalid value for edge-insets, top, bottom, left and right must all be numbers");this.top=r,this.bottom=t,this.left=i,this.right=a}interpolate(r,t,i){return t.top!=null&&r.top!=null&&(this.top=Zs.number(r.top,t.top,i)),t.bottom!=null&&r.bottom!=null&&(this.bottom=Zs.number(r.bottom,t.bottom,i)),t.left!=null&&r.left!=null&&(this.left=Zs.number(r.left,t.left,i)),t.right!=null&&r.right!=null&&(this.right=Zs.number(r.right,t.right,i)),this}getCenter(r,t){let i=to((this.left+r-this.right)/2,0,r),a=to((this.top+t-this.bottom)/2,0,t);return new Wr(i,a)}equals(r){return this.top===r.top&&this.bottom===r.bottom&&this.left===r.left&&this.right===r.right}clone(){return new sU(this.top,this.bottom,this.left,this.right)}toJSON(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}}},E2=class{constructor(e,r){var t;this.applyConstrain=(i,a)=>this._constrainOverride===null?this._callbacks.defaultConstrain(i,a):this._constrainOverride(i,a),this._callbacks=e,this._tileSize=512,this._renderWorldCopies=r?.renderWorldCopies===void 0||!!r?.renderWorldCopies,this._minZoom=r?.minZoom||0,this._maxZoom=r?.maxZoom||22,this._minPitch=r?.minPitch===void 0||r?.minPitch===null?0:r?.minPitch,this._maxPitch=r?.maxPitch===void 0||r?.maxPitch===null?60:r?.maxPitch,this._constrainOverride=(t=r?.constrainOverride)!=null?t:null,this.setMaxBounds(),this._width=0,this._height=0,this._center=new An(0,0),this._elevation=0,this._zoom=0,this._tileZoom=hz(this._zoom),this._scale=Vc(this._zoom),this._bearingInRadians=0,this._fovInRadians=.6435011087932844,this._pitchInRadians=0,this._rollInRadians=0,this._unmodified=!0,this._edgeInsets=new S2,this._minElevationForCurrentTile=0,this._autoCalculateNearFarZ=!0}apply(e,r,t){this._constrainOverride=e.constrainOverride,this._latRange=e.latRange,this._lngRange=e.lngRange,this._width=e.width,this._height=e.height,this._center=e.center,this._elevation=e.elevation,this._minElevationForCurrentTile=e.minElevationForCurrentTile,this._zoom=e.zoom,this._tileZoom=hz(this._zoom),this._scale=Vc(this._zoom),this._bearingInRadians=e.bearingInRadians,this._fovInRadians=e.fovInRadians,this._pitchInRadians=e.pitchInRadians,this._rollInRadians=e.rollInRadians,this._unmodified=e.unmodified,this._edgeInsets=new S2(e.padding.top,e.padding.bottom,e.padding.left,e.padding.right),this._minZoom=e.minZoom,this._maxZoom=e.maxZoom,this._minPitch=e.minPitch,this._maxPitch=e.maxPitch,this._renderWorldCopies=e.renderWorldCopies,this._cameraToCenterDistance=e.cameraToCenterDistance,this._nearZ=e.nearZ,this._farZ=e.farZ,this._autoCalculateNearFarZ=!t&&e.autoCalculateNearFarZ,r&&this.constrainInternal(),this._calcMatrices()}get pixelsToClipSpaceMatrix(){return this._pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._clipSpaceToPixelsMatrix}get minElevationForCurrentTile(){return this._minElevationForCurrentTile}setMinElevationForCurrentTile(e){this._minElevationForCurrentTile=e}get tileSize(){return this._tileSize}get tileZoom(){return this._tileZoom}get scale(){return this._scale}get width(){return this._width}get height(){return this._height}get bearingInRadians(){return this._bearingInRadians}get lngRange(){return this._lngRange}get latRange(){return this._latRange}get pixelsToGLUnits(){return this._pixelsToGLUnits}get minZoom(){return this._minZoom}setMinZoom(e){if(this._minZoom===e)return;this._minZoom=e;let r=this._unmodified;this.setZoom(this.applyConstrain(this._center,this.zoom).zoom),this._unmodified=r}get maxZoom(){return this._maxZoom}setMaxZoom(e){if(this._maxZoom===e)return;this._maxZoom=e;let r=this._unmodified;this.setZoom(this.applyConstrain(this._center,this.zoom).zoom),this._unmodified=r}get minPitch(){return this._minPitch}setMinPitch(e){if(this._minPitch===e)return;this._minPitch=e;let r=this._unmodified;this.setPitch(Math.max(this.pitch,e)),this._unmodified=r}get maxPitch(){return this._maxPitch}setMaxPitch(e){if(this._maxPitch===e)return;this._maxPitch=e;let r=this._unmodified;this.setPitch(Math.min(this.pitch,e)),this._unmodified=r}get renderWorldCopies(){return this._renderWorldCopies}setRenderWorldCopies(e){e===void 0?e=!0:e===null&&(e=!1),this._renderWorldCopies=e}get constrainOverride(){return this._constrainOverride}setConstrainOverride(e){e===void 0&&(e=null),this._constrainOverride!==e&&(this._constrainOverride=e,this.constrainInternal(),this._calcMatrices())}get worldSize(){return this._tileSize*this._scale}get centerOffset(){return this.centerPoint._sub(this.size._div(2))}get size(){return new Wr(this._width,this._height)}get bearing(){return this._bearingInRadians/Math.PI*180}setBearing(e){let r=ch(e,-180,180)*Math.PI/180;this._bearingInRadians!==r&&(this._unmodified=!1,this._bearingInRadians=r,this._calcMatrices(),this._rotationMatrix=D5(),Hae(this._rotationMatrix,this._rotationMatrix,-this._bearingInRadians))}get rotationMatrix(){return this._rotationMatrix}get pitchInRadians(){return this._pitchInRadians}get pitch(){return this._pitchInRadians/Math.PI*180}setPitch(e){let r=to(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitchInRadians!==r&&(this._unmodified=!1,this._pitchInRadians=r,this._calcMatrices())}get rollInRadians(){return this._rollInRadians}get roll(){return this._rollInRadians/Math.PI*180}setRoll(e){let r=e/180*Math.PI;this._rollInRadians!==r&&(this._unmodified=!1,this._rollInRadians=r,this._calcMatrices())}get fovInRadians(){return this._fovInRadians}get fov(){return Ad(this._fovInRadians)}setFov(e){e=to(e,.1,150),this.fov!==e&&(this._unmodified=!1,this._fovInRadians=rl(e),this._calcMatrices())}get zoom(){return this._zoom}setZoom(e){let r=this.applyConstrain(this._center,e).zoom;this._zoom!==r&&(this._unmodified=!1,this._zoom=r,this._tileZoom=Math.max(0,Math.floor(r)),this._scale=Vc(r),this.constrainInternal(),this._calcMatrices())}get center(){return this._center}setCenter(e){(e.lat!==this._center.lat||e.lng!==this._center.lng)&&(this._unmodified=!1,this._center=e,this.constrainInternal(),this._calcMatrices())}get elevation(){return this._elevation}setElevation(e){e!==this._elevation&&(this._elevation=e,this.constrainInternal(),this._calcMatrices())}get padding(){return this._edgeInsets.toJSON()}setPadding(e){this._edgeInsets.equals(e)||(this._unmodified=!1,this._edgeInsets.interpolate(this._edgeInsets,e,1),this._calcMatrices())}get centerPoint(){return this._edgeInsets.getCenter(this._width,this._height)}get pixelsPerMeter(){return this._pixelPerMeter}get unmodified(){return this._unmodified}get cameraToCenterDistance(){return this._cameraToCenterDistance}get nearZ(){return this._nearZ}get farZ(){return this._farZ}get autoCalculateNearFarZ(){return this._autoCalculateNearFarZ}overrideNearFarZ(e,r){this._autoCalculateNearFarZ=!1,this._nearZ=e,this._farZ=r,this._calcMatrices()}clearNearFarZOverride(){this._autoCalculateNearFarZ=!0,this._calcMatrices()}isPaddingEqual(e){return this._edgeInsets.equals(e)}interpolatePadding(e,r,t){this._unmodified=!1,this._edgeInsets.interpolate(e,r,t),this.constrainInternal(),this._calcMatrices()}resize(e,r,t=!0){this._width=e,this._height=r,t&&this.constrainInternal(),this._calcMatrices()}getMaxBounds(){var e,r;return((e=this._latRange)==null?void 0:e.length)!==2||((r=this._lngRange)==null?void 0:r.length)!==2?null:new bh([this._lngRange[0],this._latRange[0]],[this._lngRange[1],this._latRange[1]])}setMaxBounds(e){e?(this._lngRange=[e.getWest(),e.getEast()],this._latRange=[e.getSouth(),e.getNorth()],this.constrainInternal()):(this._lngRange=null,this._latRange=[-Wh,Wh])}getCameraQueryGeometry(e,r){if(r.length===1)return[r[0],e];{let{minX:t,minY:i,maxX:a,maxY:o}=gh.fromPoints(r).extend(e);return[new Wr(t,i),new Wr(a,i),new Wr(a,o),new Wr(t,o),new Wr(t,i)]}}constrainInternal(){if(!this.center||!this._width||!this._height||this._constraining)return;this._constraining=!0;let e=this._unmodified,{center:r,zoom:t}=this.applyConstrain(this.center,this.zoom);this.setCenter(r),this.setZoom(t),this._unmodified=e,this._constraining=!1}_calcMatrices(){if(this._pixelPerMeter=q0(1,this.center.lat)*this.worldSize,!this._width||!this._height)return;this._pixelsToGLUnits=[2/this._width,-2/this._height];let e=Hh(new Float64Array(16));Xu(e,e,[this._width/2,-this._height/2,1]),Ol(e,e,[1,-1,0]),this._clipSpaceToPixelsMatrix=e,e=Hh(new Float64Array(16)),Xu(e,e,[1,-1,1]),Ol(e,e,[-1,-1,0]),Xu(e,e,[2/this._width,2/this._height,1]),this._pixelsToClipSpaceMatrix=e;let r=this.fovInRadians/2;this._cameraToCenterDistance=.5/Math.tan(r)*this._height,this._callbacks.calcMatrices()}calculateCenterFromCameraLngLatAlt(e,r,t,i){let a=t===void 0?this.bearing:t,o=i=i===void 0?this.pitch:i,{distanceToCenter:s,clampedElevation:l}=this._distanceToCenterFromAltElevationPitch(r,this.elevation,o),{x:n,y:u}=N6(o,a),c=Qo.fromLngLat(e,r),f=QL(1,c.y),h,d,p=0;do{if(p+=1,p>10)break;d=s/f;let g=n*d,m=u*d;h=new Qo(c.x+g,c.y+m),f=1/h.meterInMercatorCoordinateUnits()}while(Math.abs(s-d*f)>1e-12);return{center:h.toLngLat(),elevation:l,zoom:Ku(this.height/2/Math.tan(this.fovInRadians/2)/d/this.tileSize)}}recalculateZoomAndCenter(e){if(this.elevation-e===0)return;let r=1/this.worldSize,t=q0(1,this.center.lat)*this.worldSize,i=Qo.fromLngLat(this.center,this.elevation),a=i.x/r,o=i.y/r,s=i.z/r,l=this.pitch,n=this.bearing,{x:u,y:c,z:f}=N6(l,n),h=this.cameraToCenterDistance,d=a+h*-u,p=o+h*-c,g=s+h*f,{distanceToCenter:m,clampedElevation:y}=this._distanceToCenterFromAltElevationPitch(g/t,e,l),_=m*t,v=d+u*_,x=p+c*_,S=new Qo(v*r,x*r,0).toLngLat(),M=q0(1,S.lat),C=Ku(this.height/2/Math.tan(this.fovInRadians/2)/m/M/this.tileSize);this._elevation=y,this._center=S,this.setZoom(C)}_distanceToCenterFromAltElevationPitch(e,r,t){let i=-Math.cos(rl(t)),a=e-r,o,s=r;return i*a>=0||Math.abs(i)<.1?(o=1e4,s=e+o*i):o=-a/i,{distanceToCenter:o,clampedElevation:s}}getCameraPoint(){let e=this.pitchInRadians,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new Wr(r*Math.sin(this.rollInRadians),r*Math.cos(this.rollInRadians)))}getMercatorTileCoordinates(e){if(!e)return[0,0,1,1];let r=e.canonical.z>=0?1<<e.canonical.z:2**e.canonical.z;return[e.canonical.x/r,e.canonical.y/r,1/r/Bi,1/r/Bi]}},WB=class{distanceToTile2d(e,r,t,i){let a=i,o=a.distanceX([e,r]),s=a.distanceY([e,r]);return Math.hypot(o,s)}getWrap(e,r,t){return t}getTileBoundingVolume(e,r,t,i){var a,o;let s=Math.min(0,t),l=Math.max(0,t);if(i?.terrain){let u=new Cu(e.z,r,e.z,e.x,e.y),c=i.terrain.getMinMaxElevation(u);s=(a=c.minElevation)!=null?a:s,l=(o=c.maxElevation)!=null?o:l}let n=1<<e.z;return new w2([r+e.x/n,e.y/n,s],[r+(e.x+1)/n,(e.y+1)/n,l])}allowVariableZoom(e,r){let t=e.fov*(Math.abs(Math.cos(e.rollInRadians))*e.height+Math.abs(Math.sin(e.rollInRadians))*e.width)/e.height,i=to(78.5-t/2,0,60);return!!r.terrain||e.pitch>i}allowWorldCopies(){return!0}prepareNextFrame(){}},YB=ul([{name:"a_pos3d",type:"Int16",components:3}]),XB=class extends Nl{constructor(e){super(),this._lastTilesetChange=hs(),this.tileManager=e,this._tiles={},this._renderableTilesKeys=[],this._sourceTileCache={},this.minzoom=0,this.maxzoom=22,this.deltaZoom=1,this.tileSize=e._source.tileSize*2**this.deltaZoom,e.usedForTerrain=!0,e.tileSize=this.tileSize}destruct(){this.tileManager.usedForTerrain=!1,this.tileManager.tileSize=null,this.releaseAllRTT()}getSource(){return this.tileManager._source}update(e,r){this.tileManager.update(e,r),this._renderableTilesKeys=[];let t={},i=!1;for(let a of Bm(e,{tileSize:this.tileSize,minzoom:this.minzoom,maxzoom:this.maxzoom,reparseOverscaled:!1,terrain:r,calculateTileZoom:this.tileManager._source.calculateTileZoom}))t[a.key]=!0,this._renderableTilesKeys.push(a.key),this._tiles[a.key]||(a.terrainRttPosMatrix32f=new Float32Array(16),$h(a.terrainRttPosMatrix32f,0,Bi,Bi,0,0,1),this._tiles[a.key]=new DM(a,this.tileSize),this._lastTilesetChange=hs(),i=!0);for(let a in this._tiles)t[a]||(this._tiles[a].releaseRTT(this.tileManager.map.painter),delete this._tiles[a],i=!0);return i}releaseRTT(e){for(let r in this._tiles){let t=this._tiles[r];(t.tileID.equals(e)||t.tileID.isChildOf(e)||e.isChildOf(t.tileID))&&t.releaseRTT(this.tileManager.map.painter)}}releaseAllRTT(){for(let e in this._tiles)this._tiles[e].releaseRTT(this.tileManager.map.painter)}getRenderableTiles(){return this._renderableTilesKeys.map(e=>this.getTileByID(e))}getTileByID(e){return this._tiles[e]}getTerrainCoords(e,r){return r?this._getTerrainCoordsForTileRanges(e,r):this._getTerrainCoordsForRegularTile(e)}_getTerrainCoordsForRegularTile(e){let r={};for(let t of this._renderableTilesKeys){let i=this._tiles[t].tileID,a=e.clone(),o=L0();if(i.canonical.equals(e.canonical))$h(o,0,Bi,Bi,0,0,1);else if(i.canonical.isChildOf(e.canonical)){let s=i.canonical.z-e.canonical.z,l=i.canonical.x-(i.canonical.x>>s<<s),n=i.canonical.y-(i.canonical.y>>s<<s),u=Bi>>s;$h(o,0,u,u,0,0,1),Ol(o,o,[-l*u,-n*u,0])}else if(e.canonical.isChildOf(i.canonical)){let s=e.canonical.z-i.canonical.z,l=e.canonical.x-(e.canonical.x>>s<<s),n=e.canonical.y-(e.canonical.y>>s<<s),u=Bi>>s;$h(o,0,Bi,Bi,0,0,1),Ol(o,o,[l*u,n*u,0]),Xu(o,o,[1/2**s,1/2**s,0])}else continue;a.terrainRttPosMatrix32f=new Float32Array(o),r[t]=a}return r}_getTerrainCoordsForTileRanges(e,r){let t={};for(let i of this._renderableTilesKeys){let a=this._tiles[i].tileID;if(!this._isWithinTileRanges(a,r))continue;let o=e.clone(),s=L0();if(a.canonical.z===e.canonical.z){let l=e.canonical.x-a.canonical.x+e.wrap*(1<<e.canonical.z),n=e.canonical.y-a.canonical.y;$h(s,0,Bi,Bi,0,0,1),Ol(s,s,[l*Bi,n*Bi,0])}else if(a.canonical.z>e.canonical.z){let l=a.canonical.z-e.canonical.z,n=a.canonical.x-(a.canonical.x>>l<<l)+e.wrap*(1<<a.canonical.z),u=a.canonical.y-(a.canonical.y>>l<<l),c=e.canonical.x-(a.canonical.x>>l),f=e.canonical.y-(a.canonical.y>>l),h=Bi>>l;$h(s,0,h,h,0,0,1),Ol(s,s,[-n*h+c*Bi,-u*h+f*Bi,0])}else{let l=e.canonical.z-a.canonical.z,n=e.canonical.x-(e.canonical.x>>l<<l)+e.wrap*(1<<e.canonical.z),u=e.canonical.y-(e.canonical.y>>l<<l),c=(e.canonical.x>>l)-a.canonical.x,f=(e.canonical.y>>l)-a.canonical.y,h=Bi<<l;$h(s,0,h,h,0,0,1),Ol(s,s,[n*Bi+c*h,u*Bi+f*h,0])}o.terrainRttPosMatrix32f=new Float32Array(s),t[i]=o}return t}getSourceTile(e,r){var t,i;let a=this.tileManager._source,o=e.overscaledZ-this.deltaZoom;if(o>a.maxzoom&&(o=a.maxzoom),o<a.minzoom)return;(t=this._sourceTileCache)[i=e.key]||(t[i]=e.scaledTo(o).key);let s=this.findTileInCaches(this._sourceTileCache[e.key]);if(!s?.dem&&r)for(;o>=a.minzoom&&!s?.dem;)s=this.findTileInCaches(e.scaledTo(o--).key);return s}findTileInCaches(e){let r=this.tileManager.getTileByID(e);return r||(r=this.tileManager._outOfViewCache.getByKey(e),r)}anyTilesAfterTime(e=hs()){return this._lastTilesetChange>=e}_isWithinTileRanges(e,r){let t=r[e.canonical.z];return!!t&&(e.wrap>t.minWrap||e.wrap<t.maxWrap||e.canonical.x>=t.minTileXWrapped&&e.canonical.x<=t.maxTileXWrapped&&e.canonical.y>=t.minTileY&&e.canonical.y<=t.maxTileY)}},jM=Bi*(1-1e-12),ZB=class{constructor(e,r,t,i="auto"){this._meshCache={},this.painter=e,this.tileManager=new XB(r),this.options=t,this.exaggeration=typeof t.exaggeration=="number"?t.exaggeration:1,this._terrainSkirtLength=i,this.qualityFactor=2,this.meshSize=128,this._demMatrixCache=new Map,this._elevationSamplerCache=new Map}destroy(){this._fbo&&(this._fbo=(this._fbo.destroy(),null)),this._fboDepthTexture&&(this._fboDepthTexture=(this._fboDepthTexture.destroy(),null)),this._emptyDemTexture&&(this._emptyDemTexture=(this._emptyDemTexture.destroy(),null)),this._emptyDepthTexture&&(this._emptyDepthTexture=(this._emptyDepthTexture.destroy(),null));for(let e in this._meshCache)this._meshCache[e].destroy();this._meshCache={},this.tileManager.destruct()}getDEMElevation(e,r,t,i=Bi){let a=e.normalizeCoordinates(r,t,i);if(!a)return 0;let o=this.getElevationSampler(a.tileID);return o?o(a.x,a.y,i):0}getElevationForLngLatZoom(e,r){if(!zF(r,e.wrap()))return 0;let{tileID:t,mercatorX:i,mercatorY:a}=this._getOverscaledTileIDFromLngLatZoom(e,r);return this.getElevation(t,i%Bi,a%Bi,Bi)}getElevationForLngLat(e,r){let t=this.getCoverageIndex();if(t){let o=Qo.fromLngLat(e),s=tM(t,this.exaggeration,o.x,o.y);if(s.demLoaded)return s.elevation}let i=Bm(r,{maxzoom:this.tileManager.maxzoom,minzoom:this.tileManager.minzoom,tileSize:512,terrain:this}),a=0;for(let o of i)o.canonical.z>a&&(a=Math.min(o.canonical.z,this.tileManager.maxzoom));return this.getElevationForLngLatZoom(e,a)}getElevation(e,r,t,i=Bi){return this.getDEMElevation(e,r,t,i)*this.exaggeration}resetElevationCache(){this._elevationSamplerCache.clear(),this._coverageIndex=void 0}getCoverageIndex(){return this._coverageIndex===void 0&&(this._coverageIndex=this._buildCoverageIndex()),this._coverageIndex}_buildCoverageIndex(){let e=[],r=new Map,t=0,i=0;for(let a of this.tileManager.getRenderableTiles()){if(!a)continue;let{canonical:o,wrap:s}=a.tileID;e.includes(o.z)||e.push(o.z);let l=this.getElevationSampler(a.tileID);r.set(`${s}/${o.z}/${o.x}/${o.y}`,l);let{minElevation:n,maxElevation:u}=this.getMinMaxElevation(a.tileID);t=Math.min(t,n??0),i=Math.max(i,u??0)}return r.size===0?null:(e.sort((a,o)=>o-a),{zooms:e,samplerPerTile:r,minElevation:t-10,maxElevation:i+10})}getElevationSampler(e){let r=e.key,t=this._elevationSamplerCache.get(r);if(t)return t;let i=this.tileManager.getSourceTile(e,!0),a=i?.dem;if(!i||!a)return null;let o=this._getDEMTileMatrix(e,i),s=o[0]*a.dim,l=o[5]*a.dim,n=o[12]*a.dim,u=o[13]*a.dim,c=(f,h,d)=>{let p=d===8192?1:Bi/d;return a.sampleBilinear(f*p*s+n,h*p*l+u)};return this._elevationSamplerCache.set(r,c),c}_getDEMTileMatrix(e,r){let t=`${r.tileID.key}/${e.key}`,i=this._demMatrixCache.get(t);if(i)return i;let a=this.tileManager.getSource().maxzoom,o=e.canonical.z-r.tileID.canonical.z;e.overscaledZ>e.canonical.z&&(e.canonical.z>=a?o=e.canonical.z-a:To("cannot calculate elevation if elevation maxzoom > source.maxzoom"));let s=e.canonical.x-(e.canonical.x>>o<<o),l=e.canonical.y-(e.canonical.y>>o<<o),n=FK(new Float64Array(16),[1/(Bi<<o),1/(Bi<<o),0]);return Ol(n,n,[s*Bi,l*Bi,0]),this._demMatrixCache.set(t,n),n}getTerrainData(e){var r,t;if(!this._emptyDemTexture){let o=this.painter.context,s=new Rs({width:1,height:1},new Uint8Array(4));this._emptyDepthTexture=new jl(o,s,o.gl.RGBA,{premultiply:!1}),this._emptyDemUnpack=[0,0,0,0],this._emptyDemTexture=new jl(o,new Rs({width:1,height:1}),o.gl.RGBA,{premultiply:!1}),this._emptyDemTexture.bind(o.gl.NEAREST,o.gl.CLAMP_TO_EDGE),this._emptyDemMatrix=Hh([])}let i=this.tileManager.getSourceTile(e,!0);if(i?.dem&&(!i.demTexture||i.needsTerrainPrepare)){let o=this.painter.context;i.demTexture||(i.demTexture=this.painter.getTileTexture(i.dem.stride)),i.demTexture?i.demTexture.update(i.dem.getPixels(),{premultiply:!1}):i.demTexture=new jl(o,i.dem.getPixels(),o.gl.RGBA,{premultiply:!1}),i.demTexture.bind(o.gl.NEAREST,o.gl.CLAMP_TO_EDGE),i.needsTerrainPrepare=!1}let a=i?this._getDEMTileMatrix(e,i):this._emptyDemMatrix;return{u_depth:2,u_terrain:3,u_terrain_dim:((r=i?.dem)==null?void 0:r.dim)||1,u_terrain_matrix:a,u_terrain_unpack:((t=i?.dem)==null?void 0:t.getUnpackVector())||this._emptyDemUnpack,u_terrain_exaggeration:this.exaggeration,texture:(i?.demTexture||this._emptyDemTexture).texture,depthTexture:(this._fboDepthTexture||this._emptyDepthTexture).texture,tile:i}}getFramebuffer(){let e=this.painter,r=e.width/devicePixelRatio,t=e.height/devicePixelRatio;return this._fbo&&(this._fbo.width!==r||this._fbo.height!==t)&&(this._fbo.destroy(),this._fboDepthTexture.destroy(),delete this._fbo,delete this._fboDepthTexture),this._fboDepthTexture||(this._fboDepthTexture=new jl(e.context,{width:r,height:t,data:null},e.context.gl.RGBA,{premultiply:!1}),this._fboDepthTexture.bind(e.context.gl.NEAREST,e.context.gl.CLAMP_TO_EDGE)),this._fbo||(this._fbo=e.context.createFramebuffer(r,t,!0,!1),this._fbo.depthAttachment.set(e.context.createRenderbuffer(e.context.gl.DEPTH_COMPONENT16,r,t))),this._fbo.colorAttachment.set(this._fboDepthTexture.texture),this._fbo}depthAtPoint(e){let r=new Uint8Array(4),t=this.painter.context,i=t.gl;return t.bindFramebuffer.set(this.getFramebuffer().framebuffer),i.readPixels(e.x,this.painter.height/devicePixelRatio-e.y-1,1,1,i.RGBA,i.UNSIGNED_BYTE,r),t.bindFramebuffer.set(null),(r[0]/16777216+r[1]/65536+r[2]/256+r[3])/256}getTerrainMesh(e){var r;let t=((r=this.painter.style.projection)==null?void 0:r.transitionState)>0,i=t&&e.canonical.y===0,a=t&&e.canonical.y===(1<<e.canonical.z)-1,o=`m_${i?"n":""}_${a?"s":""}`;if(this._meshCache[o])return this._meshCache[o];let s=this.painter.context,l=new cI,n=new ed,u=this.meshSize,c=Bi/u,f=u*u;for(let d=0;d<=u;d++)for(let p=0;p<=u;p++)l.emplaceBack(p*c,d*c,0);for(let d=0;d<f;d+=u+1)for(let p=0;p<u;p++)n.emplaceBack(p+d,u+p+d+1,u+p+d+2),n.emplaceBack(p+d,u+p+d+2,p+d+1);this._terrainSkirtLength!=="none"&&this._buildSkirts(l,n,u,c,i,a);let h=new Um(s.createVertexBuffer(l,YB.members),s.createIndexBuffer(n),Ks.simpleSegment(0,0,l.length,n.length));return this._meshCache[o]=h,h}getSkirtLength(e){return 2*Math.PI*mc/2**Math.max(e,0)/5}getMinTileElevationForLngLatZoom(e,r){var t;if(!zF(r,e.wrap()))return 0;let{tileID:i}=this._getOverscaledTileIDFromLngLatZoom(e,r);return(t=this.getMinMaxElevation(i).minElevation)!=null?t:0}getMinMaxElevation(e){let r=this.tileManager.getSourceTile(e,!0),t={minElevation:null,maxElevation:null};return r?.dem&&(t.minElevation=r.dem.min*this.exaggeration,t.maxElevation=r.dem.max*this.exaggeration),t}_getOverscaledTileIDFromLngLatZoom(e,r){let t=Qo.fromLngLat(e.wrap()),i=(1<<r)*Bi,a=t.x*i,o=t.y*i,s=Math.floor(a/Bi),l=Math.floor(o/Bi);return{tileID:new Cu(r,0,r,s,l),mercatorX:a,mercatorY:o}}_buildSkirts(e,r,t,i,a,o){let s=e.length,l=s+(t+1),n=(t+1)*t,u=a?Pm:0,c=+!a,f=o?Im:Bi,h=+!o;for(let g=0;g<=t;g++)e.emplaceBack(g*i,u,c);for(let g=0;g<=t;g++)e.emplaceBack(g*i,f,h);for(let g=0;g<t;g++)r.emplaceBack(n+g,l+g,l+g+1),r.emplaceBack(n+g,l+g+1,n+g+1),r.emplaceBack(0+g,s+g+1,s+g),r.emplaceBack(0+g,0+g+1,s+g+1);let d=e.length,p=d+(t+1)*2;for(let g of[0,1])for(let m=0;m<=t;m++)for(let y of[0,1])e.emplaceBack(g*Bi,m*i,y);for(let g=0;g<t*2;g+=2)r.emplaceBack(d+g,d+g+1,d+g+3),r.emplaceBack(d+g,d+g+3,d+g+2),r.emplaceBack(p+g,p+g+3,p+g+1),r.emplaceBack(p+g,p+g+2,p+g+3)}},UM={covered:!1,demLoaded:!1,elevation:0},Kg=class lU{get pixelsToClipSpaceMatrix(){return this._helper.pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._helper.clipSpaceToPixelsMatrix}get pixelsToGLUnits(){return this._helper.pixelsToGLUnits}get centerOffset(){return this._helper.centerOffset}get size(){return this._helper.size}get rotationMatrix(){return this._helper.rotationMatrix}get centerPoint(){return this._helper.centerPoint}get pixelsPerMeter(){return this._helper.pixelsPerMeter}setMinZoom(r){this._helper.setMinZoom(r)}setMaxZoom(r){this._helper.setMaxZoom(r)}setMinPitch(r){this._helper.setMinPitch(r)}setMaxPitch(r){this._helper.setMaxPitch(r)}setRenderWorldCopies(r){this._helper.setRenderWorldCopies(r)}setBearing(r){this._helper.setBearing(r)}setPitch(r){this._helper.setPitch(r)}setRoll(r){this._helper.setRoll(r)}setFov(r){this._helper.setFov(r)}setZoom(r){this._helper.setZoom(r)}setCenter(r){this._helper.setCenter(r)}setElevation(r){this._helper.setElevation(r)}setMinElevationForCurrentTile(r){this._helper.setMinElevationForCurrentTile(r)}setPadding(r){this._helper.setPadding(r)}interpolatePadding(r,t,i){this._helper.interpolatePadding(r,t,i)}isPaddingEqual(r){return this._helper.isPaddingEqual(r)}resize(r,t,i=!0){this._helper.resize(r,t,i)}getMaxBounds(){return this._helper.getMaxBounds()}setMaxBounds(r){this._helper.setMaxBounds(r)}setConstrainOverride(r){this._helper.setConstrainOverride(r)}overrideNearFarZ(r,t){this._helper.overrideNearFarZ(r,t)}clearNearFarZOverride(){this._helper.clearNearFarZOverride()}getCameraQueryGeometry(r){return this._helper.getCameraQueryGeometry(this.getCameraPoint(),r)}get tileSize(){return this._helper.tileSize}get tileZoom(){return this._helper.tileZoom}get scale(){return this._helper.scale}get worldSize(){return this._helper.worldSize}get width(){return this._helper.width}get height(){return this._helper.height}get lngRange(){return this._helper.lngRange}get latRange(){return this._helper.latRange}get minZoom(){return this._helper.minZoom}get maxZoom(){return this._helper.maxZoom}get zoom(){return this._helper.zoom}get center(){return this._helper.center}get minPitch(){return this._helper.minPitch}get maxPitch(){return this._helper.maxPitch}get pitch(){return this._helper.pitch}get pitchInRadians(){return this._helper.pitchInRadians}get roll(){return this._helper.roll}get rollInRadians(){return this._helper.rollInRadians}get bearing(){return this._helper.bearing}get bearingInRadians(){return this._helper.bearingInRadians}get fov(){return this._helper.fov}get fovInRadians(){return this._helper.fovInRadians}get elevation(){return this._helper.elevation}get minElevationForCurrentTile(){return this._helper.minElevationForCurrentTile}get padding(){return this._helper.padding}get unmodified(){return this._helper.unmodified}get renderWorldCopies(){return this._helper.renderWorldCopies}get cameraToCenterDistance(){return this._helper.cameraToCenterDistance}get constrainOverride(){return this._helper.constrainOverride}get nearZ(){return this._helper.nearZ}get farZ(){return this._helper.farZ}get autoCalculateNearFarZ(){return this._helper.autoCalculateNearFarZ}setTransitionState(r){}constructor(r){this._posMatrixCache=new Map,this._alignedPosMatrixCache=new Map,this._fogMatrixCacheF32=new Map,this.defaultConstrain=(t,i)=>{i=to(+i,this.minZoom,this.maxZoom);let a={center:new An(t.lng,t.lat),zoom:i},o=this._helper._lngRange;!this._helper._renderWorldCopies&&o===null&&(o=[-179.9999999999,180-1e-10]);let s=this.tileSize*Vc(a.zoom),l=0,n=s,u=0,c=s,f=0,h=0,{x:d,y:p}=this.size;if(this._helper._latRange){let x=this._helper._latRange;l=um(x[1])*s,n=um(x[0])*s,n-l<p&&(f=p/(n-l))}o&&(u=ch(lm(o[0])*s,0,s),c=ch(lm(o[1])*s,0,s),c<u&&(c+=s),c-u<d&&(h=d/(c-u)));let{x:g,y:m}=Md(s,t),y,_,v=Math.max(h||0,f||0);if(v){let x=new Wr(h?(c+u)/2:g,f?(n+l)/2:m);return a.center=sg(s,x).wrap(),a.zoom+=Ku(v),a}if(this._helper._latRange){let x=p/2;m-x<l&&(_=l+x),m+x>n&&(_=n-x)}if(o){let x=(u+c)/2,S=g;this._helper._renderWorldCopies&&(S=ch(g,x-s/2,x+s/2));let M=d/2;S-M<u&&(y=u+M),S+M>c&&(y=c-M)}if(y!==void 0||_!==void 0){let x=new Wr(y??g,_??m);a.center=sg(s,x).wrap()}return a},this.applyConstrain=(t,i)=>this._helper.applyConstrain(t,i),this._helper=new E2({calcMatrices:()=>this._calcMatrices(),defaultConstrain:(t,i)=>this.defaultConstrain(t,i)},r),this._coveringTilesDetailsProvider=new WB}clone(){let r=new lU;return r.apply(this,!1),r}apply(r,t,i){this._helper.apply(r,t,i)}get cameraPosition(){return this._cameraPosition}get projectionMatrix(){return this._projectionMatrix}get modelViewProjectionMatrix(){return this._viewProjMatrix}get inverseProjectionMatrix(){return this._invProjMatrix}get mercatorMatrix(){return this._mercatorMatrix}getVisibleUnwrappedCoordinates(r){let t=[new zg(0,r)];if(this._helper._renderWorldCopies){let i=this.screenPointToMercatorCoordinate(new Wr(0,0)),a=this.screenPointToMercatorCoordinate(new Wr(this._helper._width,0)),o=this.screenPointToMercatorCoordinate(new Wr(this._helper._width,this._helper._height)),s=this.screenPointToMercatorCoordinate(new Wr(0,this._helper._height)),l=Math.floor(Math.min(i.x,a.x,o.x,s.x)),n=Math.floor(Math.max(i.x,a.x,o.x,s.x));for(let u=l-1;u<=n+1;u++)u!==0&&t.push(new zg(u,r))}return t}getCameraFrustum(){return T2.fromInvProjectionMatrix(this._invViewProjMatrix,this.worldSize)}getClippingPlane(){return null}getCoveringTilesDetailsProvider(){return this._coveringTilesDetailsProvider}recalculateZoomAndCenter(r){let t=this.screenPointToLocation(this.centerPoint,r),i=r?r.getElevationForLngLat(t,this):0;this._helper.recalculateZoomAndCenter(i)}setLocationAtPoint(r,t,i=this.elevation){let a=i-this.elevation,o=this.screenPointToMercatorCoordinateAtZ(t,a),s=this.screenPointToMercatorCoordinateAtZ(this.centerPoint,0),l=Qo.fromLngLat(r),n=new Qo(l.x-(o.x-s.x),l.y-(o.y-s.y));this.setCenter(n?.toLngLat()),this._helper._renderWorldCopies&&this.setCenter(this.center.wrap())}locationToScreenPoint(r,t){return t?this.coordinatePoint(Qo.fromLngLat(r),t.getElevationForLngLat(r,this),this._pixelMatrix3D):this.coordinatePoint(Qo.fromLngLat(r))}screenPointToLocation(r,t){var i;return(i=this.screenPointToMercatorCoordinate(r,t))==null?void 0:i.toLngLat()}screenPointToLocationAtElevation(r,t){var i;return(i=this.screenPointToMercatorCoordinateAtZ(r,t-this.elevation))==null?void 0:i.toLngLat()}screenPointToMercatorCoordinate(r,t){if(t){let i=this.screenTerrainPointToMercatorCoordinate(r,t);if(i!=null)return i}return this.screenPointToMercatorCoordinateAtZ(r)}screenTerrainPointToMercatorCoordinate(r,t){let i=t.getCoverageIndex();if(!i)return null;let{near:a,far:o}=this.getRaySegmentFromPixel(r),s=this.worldSize,l=o[0]-a[0],n=o[1]-a[1],u=o[2]-a[2],c={index:i,exaggeration:t.exaggeration,near:a,dx:l,dy:n,dz:u,worldSize:s},f=0,h=1;if(u===0){if(a[2]>i.maxElevation||a[2]<i.minElevation)return null}else{let y=(i.maxElevation-a[2])/u,_=(i.minElevation-a[2])/u;if(f=Math.max(f,Math.min(y,_)),h=Math.min(h,Math.max(y,_)),f>h)return null}let d=Math.hypot(l,n),p=to(Math.ceil(d*(h-f)/4),1,512),g=0,m=!i2(c,0);for(let y=0;y<=p;y++){let _=f+(h-f)*y/p;if(!m)m=!i2(c,_);else if(i2(c,_)){let{lo:v,hi:x}=pz(c,i2,g,_,.001/d),S=r2(c,v),M=r2(c,x),C=a[2]+v*u-S.elevation,w=a[2]+x*u-M.elevation,k=S.covered&&C>w?to(v+C*(x-v)/(C-w),v,x):x;return new Qo((a[0]+k*l)/s,(a[1]+k*n)/s,r2(c,k).elevation)}g=_}return null}getRaySegmentFromPixel(r){let t=[r.x,r.y,0,1],i=[r.x,r.y,1,1];pu(t,t,this._pixelMatrixInverse),pu(i,i,this._pixelMatrixInverse);let a=t[3],o=i[3],s=this.elevation;return{near:[t[0]/a,t[1]/a,t[2]/a+s],far:[i[0]/o,i[1]/o,i[2]/o+s]}}screenPointToMercatorCoordinateAtZ(r,t){let i=t||0,{near:a,far:o}=this.getRaySegmentFromPixel(r),s=a[2]===o[2]?0:(i+this.elevation-a[2])/(o[2]-a[2]);return new Qo(Zs.number(a[0],o[0],s)/this.worldSize,Zs.number(a[1],o[1],s)/this.worldSize,i)}coordinatePoint(r,t=0,i=this._pixelMatrix){let a=[r.x*this.worldSize,r.y*this.worldSize,t,1];return pu(a,a,i),new Wr(a[0]/a[3],a[1]/a[3])}getBounds(){let r=Math.max(0,this._helper._height/2-lg(this));return new bh().extend(this.screenPointToLocation(new Wr(0,r))).extend(this.screenPointToLocation(new Wr(this._helper._width,r))).extend(this.screenPointToLocation(new Wr(this._helper._width,this._helper._height))).extend(this.screenPointToLocation(new Wr(0,this._helper._height)))}isPointOnMapSurface(r,t){return t?this.screenTerrainPointToMercatorCoordinate(r,t)!=null:r.y>this.height/2-lg(this)}calculatePosMatrix(r,t=!1,i=!1){var a;let o=(a=r.key)!=null?a:cm(r.wrap,r.canonical.z,r.canonical.z,r.canonical.x,r.canonical.y),s=t?this._alignedPosMatrixCache:this._posMatrixCache;if(s.has(o)){let u=s.get(o);return i?u.f32:u.f64}let l=O6(r,this.worldSize);$v(l,t?this._alignedProjMatrix:this._viewProjMatrix,l);let n={f64:l,f32:new Float32Array(l)};return s.set(o,n),i?n.f32:n.f64}calculateFogMatrix(r){let t=r.key,i=this._fogMatrixCacheF32;if(i.has(t))return i.get(t);let a=O6(r,this.worldSize);return $v(a,this._fogMatrix,a),i.set(t,new Float32Array(a)),i.get(t)}calculateCenterFromCameraLngLatAlt(r,t,i,a){return this._helper.calculateCenterFromCameraLngLatAlt(r,t,i,a)}calculateCameraOptionsFromTo(r,t,i,a){let o=Qo.fromLngLat(r,t),s=Qo.fromLngLat(i,a),l=s.x-o.x,n=s.y-o.y,u=s.z-o.z,c=Math.hypot(l,n,u);if(c===0)throw Error("Can't calculate camera options with same From and To");let f=Math.hypot(l,n),h=Ku(this.cameraToCenterDistance/c/this.tileSize),d=Ad(Math.atan2(l,-n)),p=Ad(Math.acos(f/c));return p=u<0?90-p:90+p,{center:s.toLngLat(),elevation:a,zoom:h,pitch:p,bearing:d}}_calculateNearFarZIfNeeded(r,t,i){if(!this._helper.autoCalculateNearFarZ)return;let a=Math.min(this.elevation,this.minElevationForCurrentTile,this.getCameraAltitude()-100),o=r-a*this._helper._pixelPerMeter/Math.cos(t),s=a<0?o:r,l=Math.PI/2+this.pitchInRadians,n=rl(this.fov)*(Math.abs(Math.cos(rl(this.roll)))*this.height+Math.abs(Math.sin(rl(this.roll)))*this.width)/this.height*(.5+i.y/this.height),u=Math.sin(n)*s/Math.sin(to(Math.PI-l-n,.01,Math.PI-.01)),c=lg(this),f=Math.atan(c/this._helper.cameraToCenterDistance),h=rl(90-Jp),d=f>h?2*f*(.5+i.y/(c*2)):h,p=Math.sin(d)*s/Math.sin(to(Math.PI-l-d,.01,Math.PI-.01)),g=Math.min(u,p);this._helper._farZ=(Math.cos(Math.PI/2-t)*g+s)*1.01,this._helper._nearZ=this._helper._height/50}_calcMatrices(){let r=this.centerOffset,t=Md(this.worldSize,this.center),i=t.x,a=t.y,o=rl(Math.min(this.pitch,Jp)),s=Math.max(this._helper.cameraToCenterDistance/2,this._helper.cameraToCenterDistance+this._helper._elevation*this._helper._pixelPerMeter/Math.cos(o));this._calculateNearFarZIfNeeded(s,o,r);let l;l=new Float64Array(16),Mx(l,this.fovInRadians,this._helper._width/this._helper._height,this._helper._nearZ,this._helper._farZ),this._invProjMatrix=new Float64Array(16),Kne(this._invProjMatrix,l),l[8]=-r.x*2/this._helper._width,l[9]=r.y*2/this._helper._height,this._projectionMatrix=O4(l),Xu(l,l,[1,-1,1]),Ol(l,l,[0,0,-this._helper.cameraToCenterDistance]),zp(l,l,-this.rollInRadians),Wv(l,l,this.pitchInRadians),zp(l,l,-this.bearingInRadians),Ol(l,l,[-i,-a,0]),this._mercatorMatrix=Xu([],l,[this.worldSize,this.worldSize,this.worldSize]),Xu(l,l,[1,1,this._helper._pixelPerMeter]),this._pixelMatrix=$v(new Float64Array(16),this.clipSpaceToPixelsMatrix,l),Ol(l,l,[0,0,-this.elevation]),this._viewProjMatrix=l,this._invViewProjMatrix=E_([],l);let n=[0,0,-1,1];pu(n,n,this._invViewProjMatrix),this._cameraPosition=[n[0]/n[3],n[1]/n[3],n[2]/n[3]],this._fogMatrix=new Float64Array(16),Mx(this._fogMatrix,this.fovInRadians,this.width/this.height,s,this._helper._farZ),this._fogMatrix[8]=-r.x*2/this.width,this._fogMatrix[9]=r.y*2/this.height,Xu(this._fogMatrix,this._fogMatrix,[1,-1,1]),Ol(this._fogMatrix,this._fogMatrix,[0,0,-this.cameraToCenterDistance]),zp(this._fogMatrix,this._fogMatrix,-this.rollInRadians),Wv(this._fogMatrix,this._fogMatrix,this.pitchInRadians),zp(this._fogMatrix,this._fogMatrix,-this.bearingInRadians),Ol(this._fogMatrix,this._fogMatrix,[-i,-a,0]),Xu(this._fogMatrix,this._fogMatrix,[1,1,this._helper._pixelPerMeter]),Ol(this._fogMatrix,this._fogMatrix,[0,0,-this.elevation]),this._pixelMatrix3D=$v(new Float64Array(16),this.clipSpaceToPixelsMatrix,l);let u=this._helper._width%2/2,c=this._helper._height%2/2,f=Math.cos(this.bearingInRadians),h=Math.sin(-this.bearingInRadians),d=i-Math.round(i)+f*u+h*c,p=a-Math.round(a)+f*c+h*u,g=new Float64Array(l);if(Ol(g,g,[d>.5?d-1:d,p>.5?p-1:p,0]),this._alignedProjMatrix=g,l=E_(new Float64Array(16),this._pixelMatrix),!l)throw Error("failed to invert matrix");this._pixelMatrixInverse=l,this._clearMatrixCaches()}_clearMatrixCaches(){this._posMatrixCache.clear(),this._alignedPosMatrixCache.clear(),this._fogMatrixCacheF32.clear()}maxPitchScaleFactor(){if(!this._pixelMatrixInverse)return 1;let r=this.screenPointToMercatorCoordinate(new Wr(0,0)),t=[r.x*this.worldSize,r.y*this.worldSize,0,1];return pu(t,t,this._pixelMatrix)[3]/this._helper.cameraToCenterDistance}getCameraPoint(){return this._helper.getCameraPoint()}getCameraAltitude(){return Math.cos(this.pitchInRadians)*this.cameraToCenterDistance/this.pixelsPerMeter+this.elevation}getCameraLngLat(){let r=q0(1,this.center.lat)*this.worldSize,t=this._helper.cameraToCenterDistance/r;return tF(this.center,this.elevation,this.pitch,this.bearing,t).toLngLat()}lngLatToCameraDepth(r,t){let i=Qo.fromLngLat(r),a=[i.x*this.worldSize,i.y*this.worldSize,t,1];return pu(a,a,this._viewProjMatrix),a[2]/a[3]}getProjectionData(r){let{overscaledTileID:t,aligned:i,applyTerrainMatrix:a}=r,o=this._helper.getMercatorTileCoordinates(t),s=t?this.calculatePosMatrix(t,i,!0):null,l;return l=t?.terrainRttPosMatrix32f&&a?t.terrainRttPosMatrix32f:s||_9(),{mainMatrix:l,tileMercatorCoords:o,clippingPlane:[0,0,0,0],projectionTransition:0,fallbackMatrix:l,clipAntimeridian:!1}}isLocationOccluded(r){return!1}getPixelScale(){return 1}getCircleRadiusCorrection(){return 1}getPitchedTextCorrection(r,t,i){return 1}transformLightDirection(r){return N4(r)}getRayDirectionFromPixel(r){throw Error("Not implemented.")}projectTileCoordinates(r,t,i,a){let o=this.calculatePosMatrix(i),s;a==null?(s=[r,t,0,1],JA(s,s,o)):(s=[r,t,a,1],pu(s,s,o));let l=s[3];return{point:new Wr(s[0]/l,s[1]/l),signedDistanceFromCamera:l,isOccluded:!1}}populateCache(r){for(let t of r)this.calculatePosMatrix(t)}getProjectionDataForCustomLayer(r=!0){let t=new Cu(0,0,0,0,0),i=this.getProjectionData({overscaledTileID:t,applyGlobeMatrix:r}),a=O6(t,this.worldSize);$v(a,this._viewProjMatrix,a);let o=[Bi,Bi,this.worldSize/this._helper.pixelsPerMeter],s=L0();return Xu(s,a,o),ar(Ot({},i),{tileMercatorCoords:[0,0,1,1],fallbackMatrix:s,mainMatrix:s})}getFastPathSimpleProjectionMatrix(r){return this.calculatePosMatrix(r)}},Jg=class{get useGlobeControls(){return!1}handlePanInertia(e,r){let t=e.mag(),i=Math.abs(lg(r));return{easingOffset:e.mult(Math.min(i*.75/t,1)),easingCenter:r.center}}handleMapControlsRollPitchBearingZoom(e,r){e.bearingDelta&&r.setBearing(r.bearing+e.bearingDelta),e.pitchDelta&&r.setPitch(r.pitch+e.pitchDelta),e.rollDelta&&r.setRoll(r.roll+e.rollDelta),e.zoomDelta&&r.setZoom(r.zoom+e.zoomDelta)}handleMapControlsPan(e,r,t){e.around.distSqr(r.centerPoint)<.01||r.setLocationAtPoint(t,e.around,e.aroundElevation)}cameraForBoxAndBearing(e,r,t,i,a){return gz(e,r,t,i,a)}handleJumpToCenterZoom(e,r){let t=r.zoom===void 0?e.zoom:+r.zoom;e.zoom!==t&&e.setZoom(+r.zoom),r.center!==void 0&&e.setCenter(An.convert(r.center))}handleEaseTo(e,r){let t=e.zoom,i=e.padding,a={roll:e.roll,pitch:e.pitch,bearing:e.bearing},o={roll:r.roll===void 0?e.roll:r.roll,pitch:r.pitch===void 0?e.pitch:r.pitch,bearing:r.bearing===void 0?e.bearing:r.bearing},s=r.zoom!==void 0,l=!e.isPaddingEqual(r.padding),n=!1,u=s?+r.zoom:e.zoom,c=e.centerPoint.add(r.offsetAsPoint),f=e.screenPointToLocation(c),{center:h,zoom:d}=e.applyConstrain(An.convert(r.center||f),u??t);t2(e,h);let p=Md(e.worldSize,f),g=Md(e.worldSize,h).sub(p),m=Vc(d-t);return n=d!==t,{easeFunc:y=>{if(n&&e.setZoom(Zs.number(t,d,y)),w9(a,o)||mz({startEulerAngles:a,endEulerAngles:o,tr:e,k:y,useSlerp:a.roll!=o.roll}),l&&(e.interpolatePadding(i,r.padding,y),c=e.centerPoint.add(r.offsetAsPoint)),r.around)e.setLocationAtPoint(r.around,r.aroundPoint);else{let _=Vc(e.zoom-t),v=(d>t?Math.min(2,m):Math.max(.5,m))**(1-y),x=sg(e.worldSize,p.add(g.mult(y*v)).mult(_));e.setLocationAtPoint(e.renderWorldCopies?x.wrap():x,c)}},isZooming:n,elevationCenter:h}}handleFlyTo(e,r){let t=r.zoom!==void 0,i=e.zoom,a=e.applyConstrain(An.convert(r.center||r.locationAtOffset),t?+r.zoom:i),o=a.center,s=a.zoom;t2(e,o);let l=e.worldSize,n=Md(l,r.locationAtOffset),u=Md(l,o).sub(n),c=u.mag(),f=Vc(s-i),h=r.minZoom===void 0?e.minZoom:+r.minZoom,d=Math.max(h,e.minZoom),p=Math.min(d,i,s),g=e.applyConstrain(o,p).zoom;return{easeFunc:(m,y,_,v)=>{e.setZoom(m===1?s:i+Ku(y));let x=m===1?o:sg(l,n.add(u.mult(_)));e.setLocationAtPoint(e.renderWorldCopies?x.wrap():x,v)},scaleOfZoom:f,targetCenter:o,scaleOfMinZoom:Vc(g-i),pixelPathLength:c}}},JB=()=>KB||(KB=new vu({type:new Ha(mi.projection.type,"type")})),k2=new wb({fill:new Fd(128,2),line:new Fd(512,0),tile:new Fd(128,32),stencil:new Fd(128,1),circle:3}),qM=class{constructor(){this._tileMeshCache={}}get name(){return"vertical-perspective"}get transitionState(){return 1}get useSubdivision(){return!0}get shaderVariantName(){return"globe"}get shaderDefine(){return"#define GLOBE"}get shaderPreludeCode(){return rd.projectionGlobe}get vertexShaderPreludeCode(){return rd.projectionMercator.vertexSource}get subdivisionGranularity(){return k2}get useGlobeControls(){return!0}destroy(){}_getMeshKey(e){return`${e.granularity.toString(36)}_${e.generateBorders?"b":""}${e.extendToNorthPole?"n":""}${e.extendToSouthPole?"s":""}`}getMeshFromTileID(e,r,t,i,a){let o=(a==="stencil"?k2.stencil:k2.tile).getGranularityForZoomLevel(r.z),s=r.y===0&&i,l=r.y===(1<<r.z)-1&&i;return this._getMesh(e,{granularity:o,generateBorders:t,extendToNorthPole:s,extendToSouthPole:l})}_getMesh(e,r){let t=this._getMeshKey(r);if(t in this._tileMeshCache)return this._tileMeshCache[t];let i=W5(e,r);return this._tileMeshCache[t]=i,i}recalculate(e){}hasTransition(){return!1}},VM=class extends Nl{constructor(e,r){super(),this._transitionable=new Ag(JB(),"projection",r),this.setProjection(e),this._transitioning=this._transitionable.untransitioned(),this.recalculate(new ns(0)),this._mercatorProjection=new M2,this._verticalPerspectiveProjection=new qM}get transitionState(){let e=this.properties.get("type");if(typeof e=="string"&&e==="mercator")return 0;if(typeof e=="string"&&e==="vertical-perspective")return 1;if(e instanceof op){if(e.from===e.to)return e.from==="mercator"?0:1;if(e.from==="vertical-perspective"&&e.to==="mercator")return 1-e.transition;if(e.from==="mercator"&&e.to==="vertical-perspective")return e.transition}return 1}get useGlobeRendering(){return this.transitionState>0}get currentProjection(){return this.useGlobeRendering?this._verticalPerspectiveProjection:this._mercatorProjection}get name(){return"globe"}get useSubdivision(){return this.currentProjection.useSubdivision}get shaderVariantName(){return this.currentProjection.shaderVariantName}get shaderDefine(){return this.currentProjection.shaderDefine}get shaderPreludeCode(){return this.currentProjection.shaderPreludeCode}get vertexShaderPreludeCode(){return this.currentProjection.vertexShaderPreludeCode}get subdivisionGranularity(){return this.currentProjection.subdivisionGranularity}get useGlobeControls(){return this.transitionState>0}destroy(){this._mercatorProjection.destroy(),this._verticalPerspectiveProjection.destroy()}getMeshFromTileID(e,r,t,i,a){return this.currentProjection.getMeshFromTileID(e,r,t,i,a)}setProjection(e){this._transitionable.setValue("type",e?.type||"mercator")}updateTransitions(e){this._transitioning=this._transitionable.transitioned(e,this._transitioning)}hasTransition(){return this._transitioning.hasTransition()||this.currentProjection.hasTransition()}recalculate(e){this.properties=this._transitioning.possiblyEvaluate(e)}},C2=Math.PI*.98,QB=class{constructor(e){this._cachePrevious=new Map,this._cache=new Map,this._hadAnyChanges=!1,this._boundingVolumeFactory=e}swapBuffers(){if(!this._hadAnyChanges)return;let e=this._cachePrevious;this._cachePrevious=this._cache,this._cache=e,this._cache.clear(),this._hadAnyChanges=!1}getTileBoundingVolume(e,r,t,i){let a=`${e.z}_${e.x}_${e.y}_${i?.terrain?"t":""}_${Math.round(t)}`,o=this._cache.get(a);if(o)return o;let s=this._cachePrevious.get(a);if(s)return this._cache.set(a,s),s;let l=this._boundingVolumeFactory(e,r,t,i);return this._cache.set(a,l),this._hadAnyChanges=!0,l}},D2=class uE{constructor(r,t,i,a){this.min=i,this.max=a,this.points=r,this.planes=t}static fromAabb(r,t){let i=[];for(let a=0;a<8;a++)i.push([(a>>0&1)==1?t[0]:r[0],(a>>1&1)==1?t[1]:r[1],(a>>2&1)==1?t[2]:r[2]]);return new uE(i,[[-1,0,0,t[0]],[1,0,0,-r[0]],[0,-1,0,t[1]],[0,1,0,-r[1]],[0,0,-1,t[2]],[0,0,1,-r[2]]],r,t)}static fromCenterSizeAngles(r,t,i){let a=q4([],i[0],i[1],i[2]),o=j4([],[t[0],0,0],a),s=j4([],[0,t[1],0],a),l=j4([],[0,0,t[2]],a),n=[...r],u=[...r];for(let f=0;f<8;f++)for(let h=0;h<3;h++){let d=r[h]+o[h]*((f>>0&1)==1?1:-1)+s[h]*((f>>1&1)==1?1:-1)+l[h]*((f>>2&1)==1?1:-1);n[h]=Math.min(n[h],d),u[h]=Math.max(u[h],d)}let c=[];for(let f=0;f<8;f++){let h=[...r];lh(h,h,Ws([],o,(f>>0&1)==1?1:-1)),lh(h,h,Ws([],s,(f>>1&1)==1?1:-1)),lh(h,h,Ws([],l,(f>>2&1)==1?1:-1)),c.push(h)}return new uE(c,[[...o,-Kl(o,c[0])],[...s,-Kl(s,c[0])],[...l,-Kl(l,c[0])],[-o[0],-o[1],-o[2],-Kl(o,c[7])],[-s[0],-s[1],-s[2],-Kl(s,c[7])],[-l[0],-l[1],-l[2],-Kl(l,c[7])]],n,u)}intersectsFrustum(r){let t=!0,i=this.points.length,a=this.planes.length,o=r.planes.length,s=r.points.length;for(let l=0;l<o;l++){let n=r.planes[l],u=0;for(let c=0;c<i;c++){let f=this.points[c];n[0]*f[0]+n[1]*f[1]+n[2]*f[2]+n[3]>=0&&u++}if(u===0)return 0;u<i&&(t=!1)}if(t)return 2;for(let l=0;l<a;l++){let n=this.planes[l],u=0;for(let c=0;c<s;c++){let f=r.points[c];n[0]*f[0]+n[1]*f[1]+n[2]*f[2]+n[3]>=0&&u++}if(u===0)return 0}return 1}intersectsPlane(r){let t=this.points.length,i=0;for(let a=0;a<t;a++){let o=this.points[a];r[0]*o[0]+r[1]*o[1]+r[2]*o[2]+r[3]>=0&&i++}return i===t?2:i===0?0:1}},eO=class{constructor(){this._boundingVolumeCache=new QB(this._computeTileBoundingVolume)}prepareNextFrame(){this._boundingVolumeCache.swapBuffers()}distanceToTile2d(e,r,t,i){let a=1<<t.z,o=1/a,s=t.x/a,l=t.y/a,n=.5,u=2;return u=Math.min(u,iM(e,r,s,l,o)),u=Math.min(u,iM(e,r,s+n,-l-o,o)),u=Math.min(u,iM(e,r,s+n,2-l-o,o)),u}getWrap(e,r,t){let i=1<<r.z,a=1/i,o=r.x/i,s=o2(e.x,o,a),l=o2(e.x,o-1,a),n=o2(e.x,o+1,a),u=Math.min(s,l,n);return u===n?1:u===l?-1:0}allowVariableZoom(e,r){return $A(e,r)>4}allowWorldCopies(){return!1}getTileBoundingVolume(e,r,t,i){return this._boundingVolumeCache.getTileBoundingVolume(e,r,t,i)}_computeTileBoundingVolume(e,r,t,i){var a,o;let s=Math.min(0,t),l=Math.max(0,t);if(i?.terrain){let n=new Cu(e.z,r,e.z,e.x,e.y),u=i.terrain.getMinMaxElevation(n);s=(a=u.minElevation)!=null?a:s,l=Math.max((o=u.maxElevation)!=null?o:l,l)}if(s/=mc,l/=mc,s+=1,l+=1,e.z<=0)return D2.fromAabb([-l,-l,-l],[l,l,l]);if(e.z===1)return D2.fromAabb([e.x===0?-l:0,e.y===0?0:-l,-l],[e.x===0?0:l,e.y===0?l:0,l]);{let n=[r0(0,0,e.x,e.y,e.z),r0(Bi,0,e.x,e.y,e.z),r0(Bi,Bi,e.x,e.y,e.z),r0(0,Bi,e.x,e.y,e.z)],u=[];for(let A of n)u.push(Ws([],A,l));if(l!==s)for(let A of n)u.push(Ws([],A,s));e.y===0&&u.push([0,1,0]),e.y===(1<<e.z)-1&&u.push([0,-1,0]);let c=[1,1,1],f=[-1,-1,-1];for(let A of u)for(let b=0;b<3;b++)c[b]=Math.min(c[b],A[b]),f[b]=Math.max(f[b],A[b]);let h=r0(Bi/2,Bi/2,e.x,e.y,e.z),d=uf([],[0,1,0],h);qc(d,d);let p=uf([],h,d);qc(p,p);let g=uf([],n[2],n[1]);qc(g,g);let m=uf([],n[0],n[3]);qc(m,m),u.push(Ws([],h,l)),e.y>=(1<<e.z)/2&&u.push(Ws([],r0(Bi/2,0,e.x,e.y,e.z),l)),e.y<(1<<e.z)/2&&u.push(Ws([],r0(Bi/2,Bi,e.x,e.y,e.z),l));let y=wz(h,u),_=wz(p,u),v=[-h[0],-h[1],-h[2],y.max],x=[h[0],h[1],h[2],-y.min],S=[-p[0],-p[1],-p[2],_.max],M=[p[0],p[1],p[2],-_.min],C=[...g,0],w=[...m,0],k=[];return e.y===0?k.push(uh(w,C,v),uh(w,C,x)):k.push(uh(S,C,v),uh(S,C,x),uh(S,w,v),uh(S,w,x)),e.y===(1<<e.z)-1?k.push(uh(w,C,v),uh(w,C,x)):k.push(uh(M,C,v),uh(M,C,x),uh(M,w,v),uh(M,w,x)),new D2(k,[v,x,S,M,C,w],c,f)}}},GM=1e-12,HM=class uU{get pixelsToClipSpaceMatrix(){return this._helper.pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._helper.clipSpaceToPixelsMatrix}get pixelsToGLUnits(){return this._helper.pixelsToGLUnits}get centerOffset(){return this._helper.centerOffset}get size(){return this._helper.size}get rotationMatrix(){return this._helper.rotationMatrix}get centerPoint(){return this._helper.centerPoint}get pixelsPerMeter(){return this._helper.pixelsPerMeter}setMinZoom(r){this._helper.setMinZoom(r)}setMaxZoom(r){this._helper.setMaxZoom(r)}setMinPitch(r){this._helper.setMinPitch(r)}setMaxPitch(r){this._helper.setMaxPitch(r)}setRenderWorldCopies(r){this._helper.setRenderWorldCopies(r)}setBearing(r){this._helper.setBearing(r)}setPitch(r){this._helper.setPitch(r)}setRoll(r){this._helper.setRoll(r)}setFov(r){this._helper.setFov(r)}setZoom(r){this._helper.setZoom(r)}setCenter(r){this._helper.setCenter(r)}setElevation(r){this._helper.setElevation(r)}setMinElevationForCurrentTile(r){this._helper.setMinElevationForCurrentTile(r)}setPadding(r){this._helper.setPadding(r)}interpolatePadding(r,t,i){this._helper.interpolatePadding(r,t,i)}isPaddingEqual(r){return this._helper.isPaddingEqual(r)}resize(r,t){this._helper.resize(r,t)}getMaxBounds(){return this._helper.getMaxBounds()}setMaxBounds(r){this._helper.setMaxBounds(r)}setConstrainOverride(r){this._helper.setConstrainOverride(r)}overrideNearFarZ(r,t){this._helper.overrideNearFarZ(r,t)}clearNearFarZOverride(){this._helper.clearNearFarZOverride()}getCameraQueryGeometry(r){return this._helper.getCameraQueryGeometry(this.getCameraPoint(),r)}get tileSize(){return this._helper.tileSize}get tileZoom(){return this._helper.tileZoom}get scale(){return this._helper.scale}get worldSize(){return this._helper.worldSize}get width(){return this._helper.width}get height(){return this._helper.height}get lngRange(){return this._helper.lngRange}get latRange(){return this._helper.latRange}get minZoom(){return this._helper.minZoom}get maxZoom(){return this._helper.maxZoom}get zoom(){return this._helper.zoom}get center(){return this._helper.center}get minPitch(){return this._helper.minPitch}get maxPitch(){return this._helper.maxPitch}get pitch(){return this._helper.pitch}get pitchInRadians(){return this._helper.pitchInRadians}get roll(){return this._helper.roll}get rollInRadians(){return this._helper.rollInRadians}get bearing(){return this._helper.bearing}get bearingInRadians(){return this._helper.bearingInRadians}get fov(){return this._helper.fov}get fovInRadians(){return this._helper.fovInRadians}get elevation(){return this._helper.elevation}get minElevationForCurrentTile(){return this._helper.minElevationForCurrentTile}get padding(){return this._helper.padding}get unmodified(){return this._helper.unmodified}get renderWorldCopies(){return this._helper.renderWorldCopies}get constrainOverride(){return this._helper.constrainOverride}get nearZ(){return this._helper.nearZ}get farZ(){return this._helper.farZ}get autoCalculateNearFarZ(){return this._helper.autoCalculateNearFarZ}setTransitionState(r){}constructor(r){this._cachedClippingPlane=Bp(),this._projectionMatrix=D_(),this._globeViewProjMatrix32f=_9(),this._globeViewProjMatrixF64=D_(),this._globeViewProjMatrixF64Inverted=D_(),this._globeProjMatrixInverted=D_(),this._cameraPosition=fs(),this.defaultConstrain=(t,i)=>{let a=to(t.lat,-Wh,Wh),o=to(+i,this.minZoom+Lu(0,a),this.maxZoom);return{center:new An(t.lng,a),zoom:o}},this.applyConstrain=(t,i)=>this._helper.applyConstrain(t,i),this._helper=new E2({calcMatrices:()=>this._calcMatrices(),defaultConstrain:(t,i)=>this.defaultConstrain(t,i)},r),this._coveringTilesDetailsProvider=new eO}clone(){let r=new uU;return r.apply(this,!1),r}apply(r,t){this._helper.apply(r,t)}get projectionMatrix(){return this._projectionMatrix}get modelViewProjectionMatrix(){return this._globeViewProjMatrixF64}get inverseProjectionMatrix(){return this._globeProjMatrixInverted}get cameraPosition(){let r=fs();return r[0]=this._cameraPosition[0],r[1]=this._cameraPosition[1],r[2]=this._cameraPosition[2],r}get cameraToCenterDistance(){return this._helper.cameraToCenterDistance}getProjectionData(r){let{overscaledTileID:t,applyGlobeMatrix:i}=r,a=this._helper.getMercatorTileCoordinates(t);return{mainMatrix:this._globeViewProjMatrix32f,tileMercatorCoords:a,clippingPlane:this._cachedClippingPlane,projectionTransition:+!!i,fallbackMatrix:this._globeViewProjMatrix32f,clipAntimeridian:t?.canonical.z===0}}_computeClippingPlane(r){let t=this.pitchInRadians,i=this.cameraToCenterDistance/r,a=Math.sin(t)*i,o=Math.cos(t)*i+1,s=1/Math.sqrt(a*a+o*o)*1,l=-a,n=o,u=Math.sqrt(l*l+n*n);l/=u,n/=u;let c=[0,l,n];U4(c,c,[0,0,0],-this.bearingInRadians),O1(c,c,[0,0,0],-1*this.center.lat*Math.PI/180),Yv(c,c,[0,0,0],this.center.lng*Math.PI/180);let f=1/ap(c);return Ws(c,c,f),[...c,-s*f]}isLocationOccluded(r){return!this.isSurfacePointVisible(ru(r))}transformLightDirection(r){let t=this._helper._center.lng*Math.PI/180,i=this._helper._center.lat*Math.PI/180,a=Math.cos(i),o=[Math.sin(t)*a,Math.sin(i),Math.cos(t)*a],s=[o[2],0,-o[0]],l=[0,0,0];uf(l,s,o),qc(s,s),qc(l,l);let n=[s[0]*r[0]+l[0]*r[1]+o[0]*r[2],s[1]*r[0]+l[1]*r[1]+o[1]*r[2],s[2]*r[0]+l[2]*r[1]+o[2]*r[2]],u=[0,0,0];return qc(u,n),u}getPixelScale(){return 1/Math.cos(this._helper._center.lat*Math.PI/180)}getCircleRadiusCorrection(){return Math.cos(this._helper._center.lat*Math.PI/180)}getPitchedTextCorrection(r,t,i){let a=eF(r,t,i.canonical),o=ooe(a.x,a.y);return this.getCircleRadiusCorrection()/Math.cos(o[1])}projectTileCoordinates(r,t,i,a){let o=i.canonical,s=r0(r,t,o.x,o.y,o.z),l=1+(a??0)/mc,n=s[0]*l,u=s[1]*l,c=s[2]*l,f=[n,u,c,1];pu(f,f,this._globeViewProjMatrixF64);let h;if(l<=1){let d=this._cachedClippingPlane;h=d[0]*s[0]+d[1]*s[1]+d[2]*s[2]+d[3]<0}else h=this._isLineOfSightBlocked(n,u,c);return{point:new Wr(f[0]/f[3],f[1]/f[3]),signedDistanceFromCamera:f[3],isOccluded:h}}_isLineOfSightBlocked(r,t,i){let a=this._cameraPosition,o=r-a[0],s=t-a[1],l=i-a[2],n=o*o+s*s+l*l;if(n===0)return!1;let u=to(-(a[0]*o+a[1]*s+a[2]*l)/n,0,1),c=a[0]+u*o,f=a[1]+u*s,h=a[2]+u*l;return c*c+f*f+h*h<1}_calcMatrices(){let r=Nm(this.worldSize,this.center.lat),t=L0();this._helper.autoCalculateNearFarZ&&(this._helper._nearZ=.5,this._helper._farZ=this.cameraToCenterDistance+r*2),Mx(t,this.fovInRadians,this.width/this.height,this._helper._nearZ,this._helper._farZ);let i=this.centerOffset;t[8]=-i.x*2/this._helper._width,t[9]=i.y*2/this._helper._height,this._projectionMatrix=O4(t),this._globeProjMatrixInverted=L0(),E_(this._globeProjMatrixInverted,t),Ol(t,t,[0,0,-this.cameraToCenterDistance]),zp(t,t,this.rollInRadians),Wv(t,t,-this.pitchInRadians),zp(t,t,this.bearingInRadians),Ol(t,t,[0,0,-r]);let a=fs();a[0]=r,a[1]=r,a[2]=r,Wv(t,t,this.center.lat*Math.PI/180),c9(t,t,-this.center.lng*Math.PI/180),Xu(t,t,a),this._globeViewProjMatrixF64=t,this._globeViewProjMatrix32f=new Float32Array(t),this._globeViewProjMatrixF64Inverted=L0(),E_(this._globeViewProjMatrixF64Inverted,t);let o=fs();this._cameraPosition=fs(),this._cameraPosition[2]=this.cameraToCenterDistance/r,U4(this._cameraPosition,this._cameraPosition,o,-this.rollInRadians),O1(this._cameraPosition,this._cameraPosition,o,this.pitchInRadians),U4(this._cameraPosition,this._cameraPosition,o,-this.bearingInRadians),lh(this._cameraPosition,this._cameraPosition,[0,0,1]),O1(this._cameraPosition,this._cameraPosition,o,-this.center.lat*Math.PI/180),Yv(this._cameraPosition,this._cameraPosition,o,this.center.lng*Math.PI/180),this._cachedClippingPlane=this._computeClippingPlane(r);let s=O4(this._globeViewProjMatrixF64Inverted);Xu(s,s,[1,1,-1]),this._cachedFrustum=T2.fromInvProjectionMatrix(s,1,0,this._cachedClippingPlane,!0)}calculateFogMatrix(r){To("calculateFogMatrix is not supported on globe projection.");let t=L0();return Hh(t),t}getVisibleUnwrappedCoordinates(r){return[new zg(0,r)]}getCameraFrustum(){return this._cachedFrustum}getClippingPlane(){return this._cachedClippingPlane}getCoveringTilesDetailsProvider(){return this._coveringTilesDetailsProvider}recalculateZoomAndCenter(r){if(r){To("terrain is not fully supported on vertical perspective projection.");return}this._helper.recalculateZoomAndCenter(0)}maxPitchScaleFactor(){return 1}getCameraPoint(){return this._helper.getCameraPoint()}getCameraAltitude(){return(ap(this._cameraPosition)-1)*mc}getCameraLngLat(){let r=fs();return qc(r,this._cameraPosition),qg(r)}lngLatToCameraDepth(r,t){let i=ru(r);Ws(i,i,1+t/mc);let a=Bp();return pu(a,[i[0],i[1],i[2],1],this._globeViewProjMatrixF64),a[2]/a[3]}populateCache(r){}getBounds(){let r=this.width*.5,t=this.height*.5,i=[new Wr(0,0),new Wr(r,0),new Wr(this.width,0),new Wr(this.width,t),new Wr(this.width,this.height),new Wr(r,this.height),new Wr(0,this.height),new Wr(0,t)],a=[];for(let f of i)a.push(this.unprojectScreenPoint(f));let o=0,s=0,l=0,n=0,u=this.center;for(let f of a){let h=Df(u.lng,f.lng),d=Df(u.lat,f.lat);h<s&&(s=h),h>o&&(o=h),d<n&&(n=d),d>l&&(l=d)}let c=[u.lng+s,u.lat+n,u.lng+o,u.lat+l];return this.isSurfacePointOnScreen([0,1,0])&&(c[3]=90,c[0]=-180,c[2]=180),this.isSurfacePointOnScreen([0,-1,0])&&(c[1]=-90,c[0]=-180,c[2]=180),new bh(c)}calculateCenterFromCameraLngLatAlt(r,t,i,a){return this._helper.calculateCenterFromCameraLngLatAlt(r,t,i,a)}calculateCameraOptionsFromTo(r,t,i,a){let o=An.convert(i),s=ru(An.convert(r));Ws(s,s,1+t/mc);let l=ru(o),n=Ws(fs(),l,1+a/mc),u=d9(fs(),s,l),c=ap(u);if(c<GM||BK(s,n)<GM)throw Error("Can't calculate camera options with same From and To");let f=fs();Yv(u,u,f,-rl(o.lng)),O1(u,u,f,rl(o.lat));let h=Ad(Math.acos(to(u[2]/c,-1,1))),d=Math.hypot(u[0],u[1])<c*1e-9?this.bearing:Ad(Math.atan2(-u[0],-u[1]));return{center:o,elevation:a,zoom:Ku(this.cameraToCenterDistance/c/Nm(this.tileSize,o.lat)),pitch:h,bearing:d}}setLocationAtPoint(r,t,i){let a=ru(this.unprojectScreenPoint(t)),o=ru(r),s=fs();UK(s);let l=fs();Yv(l,a,s,-this.center.lng*Math.PI/180),O1(l,l,s,this.center.lat*Math.PI/180);let n=o[0]*o[0]+o[2]*o[2],u=l[0]*l[0];if(n<u)return;let c=Math.sqrt(n-u),f=-c,h=L_(o[0],o[2],l[0],c),d=L_(o[0],o[2],l[0],f),p=fs();Yv(p,o,s,-h);let g=L_(p[1],p[2],l[1],l[2]),m=fs();Yv(m,o,s,-d);let y=L_(m[1],m[2],l[1],l[2]),_=Math.PI*.5,v=g>=-_&&g<=_,x=y>=-_&&y<=_,S,M;if(v&&x){let A=this.center.lng*Math.PI/180,b=this.center.lat*Math.PI/180,E=F_(h,A),T=F_(g,b),F=F_(d,A),D=F_(y,b);E+T<F+D?(S=h,M=g):(S=d,M=y)}else if(v)S=h,M=g;else if(x)S=d,M=y;else return;let C=S/Math.PI*180,w=M/Math.PI*180,k=this.center.lat;this.setCenter(new An(C,to(w,-90,90))),this.setZoom(this.zoom+Lu(k,this.center.lat))}locationToScreenPoint(r,t){let i=ru(r);if(t){let a=t.getElevationForLngLatZoom(r,this._helper._tileZoom);Ws(i,i,1+a/mc)}return this._projectSurfacePointToScreen(i)}_projectSurfacePointToScreen(r){let t=Bp();return pu(t,[...r,1],this._globeViewProjMatrixF64),t[0]/=t[3],t[1]/=t[3],new Wr((t[0]*.5+.5)*this.width,(-t[1]*.5+.5)*this.height)}screenPointToMercatorCoordinate(r,t){if(t){let i=this.screenTerrainPointToMercatorCoordinate(r,t);if(i)return i}return Qo.fromLngLat(this.unprojectScreenPoint(r))}screenTerrainPointToMercatorCoordinate(r,t){let i=t.getCoverageIndex();if(!i)return null;let a=this.cameraPosition,o=this.getRayDirectionFromPixel(r),s=n2(a,o,1+i.maxElevation/mc);if(!s)return null;let l=n2(a,o,1+i.minElevation/mc),n=Math.max(s.tMin,0),u=l?l.tMin:s.tMax;if(u<=n)return null;let c={index:i,exaggeration:t.exaggeration,origin:a,direction:o},f=0;for(let h=0;h<=256;h++){let d=n+(u-n)*h/256;if(Az(c,d)){let{hi:p}=pz(c,Az,f,d,1e-12),{sample:g,mercator:m}=Tz(c,p);return new Qo(m.x,m.y,g.elevation)}f=d}return null}screenPointToLocation(r,t){var i;return(i=this.screenPointToMercatorCoordinate(r,t))==null?void 0:i.toLngLat()}screenPointToLocationAtElevation(r,t){return this.screenPointToLocation(r)}isPointOnMapSurface(r,t){let i=this._cameraPosition;return!!n2(i,this.getRayDirectionFromPixel(r))}getRayDirectionFromPixel(r){let t=Bp();t[0]=r.x/this.width*2-1,t[1]=(r.y/this.height*2-1)*-1,t[2]=1,t[3]=1,pu(t,t,this._globeViewProjMatrixF64Inverted),t[0]/=t[3],t[1]/=t[3],t[2]/=t[3];let i=fs();i[0]=t[0]-this._cameraPosition[0],i[1]=t[1]-this._cameraPosition[1],i[2]=t[2]-this._cameraPosition[2];let a=fs();return qc(a,i),a}isSurfacePointVisible(r){let t=this._cachedClippingPlane;return t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]>=0}isSurfacePointOnScreen(r){if(!this.isSurfacePointVisible(r))return!1;let t=Bp();return pu(t,[...r,1],this._globeViewProjMatrixF64),t[0]/=t[3],t[1]/=t[3],t[2]/=t[3],t[0]>-1&&t[0]<1&&t[1]>-1&&t[1]<1&&t[2]>-1&&t[2]<1}unprojectScreenPoint(r){let t=this._cameraPosition,i=this.getRayDirectionFromPixel(r),a=n2(t,i);if(a){let c=fs();lh(c,t,[i[0]*a.tMin,i[1]*a.tMin,i[2]*a.tMin]);let f=fs();return qc(f,c),qg(f)}let o=this._cachedClippingPlane,s=o[0]*i[0]+o[1]*i[1]+o[2]*i[2],l=-G4(o,t)/s,n=fs();if(l>0)lh(n,t,[i[0]*l,i[1]*l,i[2]*l]);else{let c=fs();lh(c,t,[i[0]*2,i[1]*2,i[2]*2]);let f=G4(this._cachedClippingPlane,c);Sd(n,c,[this._cachedClippingPlane[0]*f,this._cachedClippingPlane[1]*f,this._cachedClippingPlane[2]*f])}let u=hoe(o);return qg(doe(u.center,u.radius,n))}getProjectionDataForCustomLayer(r=!0){let t=this.getProjectionData({overscaledTileID:new Cu(0,0,0,0,0),applyGlobeMatrix:r});return t.tileMercatorCoords=[0,0,1,1],t}getFastPathSimpleProjectionMatrix(r){}},$M=class cU{get pixelsToClipSpaceMatrix(){return this._helper.pixelsToClipSpaceMatrix}get clipSpaceToPixelsMatrix(){return this._helper.clipSpaceToPixelsMatrix}get pixelsToGLUnits(){return this._helper.pixelsToGLUnits}get centerOffset(){return this._helper.centerOffset}get size(){return this._helper.size}get rotationMatrix(){return this._helper.rotationMatrix}get centerPoint(){return this._helper.centerPoint}get pixelsPerMeter(){return this._helper.pixelsPerMeter}setMinZoom(r){this._helper.setMinZoom(r)}setMaxZoom(r){this._helper.setMaxZoom(r)}setMinPitch(r){this._helper.setMinPitch(r)}setMaxPitch(r){this._helper.setMaxPitch(r)}setRenderWorldCopies(r){this._helper.setRenderWorldCopies(r)}setBearing(r){this._helper.setBearing(r)}setPitch(r){this._helper.setPitch(r)}setRoll(r){this._helper.setRoll(r)}setFov(r){this._helper.setFov(r)}setZoom(r){this._helper.setZoom(r)}setCenter(r){this._helper.setCenter(r)}setElevation(r){this._helper.setElevation(r)}setMinElevationForCurrentTile(r){this._helper.setMinElevationForCurrentTile(r)}setPadding(r){this._helper.setPadding(r)}interpolatePadding(r,t,i){this._helper.interpolatePadding(r,t,i)}isPaddingEqual(r){return this._helper.isPaddingEqual(r)}resize(r,t,i=!0){this._helper.resize(r,t,i)}getMaxBounds(){return this._helper.getMaxBounds()}setMaxBounds(r){this._helper.setMaxBounds(r)}setConstrainOverride(r){this._helper.setConstrainOverride(r)}overrideNearFarZ(r,t){this._helper.overrideNearFarZ(r,t)}clearNearFarZOverride(){this._helper.clearNearFarZOverride()}getCameraQueryGeometry(r){return this._helper.getCameraQueryGeometry(this.getCameraPoint(),r)}get tileSize(){return this._helper.tileSize}get tileZoom(){return this._helper.tileZoom}get scale(){return this._helper.scale}get worldSize(){return this._helper.worldSize}get width(){return this._helper.width}get height(){return this._helper.height}get lngRange(){return this._helper.lngRange}get latRange(){return this._helper.latRange}get minZoom(){return this._helper.minZoom}get maxZoom(){return this._helper.maxZoom}get zoom(){return this._helper.zoom}get center(){return this._helper.center}get minPitch(){return this._helper.minPitch}get maxPitch(){return this._helper.maxPitch}get pitch(){return this._helper.pitch}get pitchInRadians(){return this._helper.pitchInRadians}get roll(){return this._helper.roll}get rollInRadians(){return this._helper.rollInRadians}get bearing(){return this._helper.bearing}get bearingInRadians(){return this._helper.bearingInRadians}get fov(){return this._helper.fov}get fovInRadians(){return this._helper.fovInRadians}get elevation(){return this._helper.elevation}get minElevationForCurrentTile(){return this._helper.minElevationForCurrentTile}get padding(){return this._helper.padding}get unmodified(){return this._helper.unmodified}get renderWorldCopies(){return this._helper.renderWorldCopies}get cameraToCenterDistance(){return this._helper.cameraToCenterDistance}get constrainOverride(){return this._helper.constrainOverride}get nearZ(){return this._helper.nearZ}get farZ(){return this._helper.farZ}get autoCalculateNearFarZ(){return this._helper.autoCalculateNearFarZ}get isGlobeRendering(){return this._globeness>0}setTransitionState(r){this._globeness=r,this._calcMatrices(),this._verticalPerspectiveTransform.getCoveringTilesDetailsProvider().prepareNextFrame(),this._mercatorTransform.getCoveringTilesDetailsProvider().prepareNextFrame()}get currentTransform(){return this.isGlobeRendering?this._verticalPerspectiveTransform:this._mercatorTransform}constructor(r){this._globeness=1,this.defaultConstrain=(t,i)=>this.currentTransform.defaultConstrain(t,i),this.applyConstrain=(t,i)=>this._helper.applyConstrain(t,i),this._helper=new E2({calcMatrices:()=>this._calcMatrices(),defaultConstrain:(t,i)=>this.defaultConstrain(t,i)},r),this._globeness=1,this._mercatorTransform=new Kg,this._verticalPerspectiveTransform=new HM}clone(){let r=new cU;return r._globeness=this._globeness,r.apply(this,!1),r}apply(r,t){this._helper.apply(r,t),this._mercatorTransform.apply(this,!1),this._verticalPerspectiveTransform.apply(this,!1)}get projectionMatrix(){return this.currentTransform.projectionMatrix}get modelViewProjectionMatrix(){return this.currentTransform.modelViewProjectionMatrix}get inverseProjectionMatrix(){return this.currentTransform.inverseProjectionMatrix}get cameraPosition(){return this.currentTransform.cameraPosition}getProjectionData(r){let t=this._mercatorTransform.getProjectionData(r),i=this._verticalPerspectiveTransform.getProjectionData(r);return{mainMatrix:this.isGlobeRendering?i.mainMatrix:t.mainMatrix,clippingPlane:i.clippingPlane,tileMercatorCoords:i.tileMercatorCoords,projectionTransition:r.applyGlobeMatrix?this._globeness:0,fallbackMatrix:t.fallbackMatrix,clipAntimeridian:i.clipAntimeridian}}isLocationOccluded(r){return this.currentTransform.isLocationOccluded(r)}transformLightDirection(r){return this.currentTransform.transformLightDirection(r)}getPixelScale(){return Xv(this._mercatorTransform.getPixelScale(),this._verticalPerspectiveTransform.getPixelScale(),this._globeness)}getCircleRadiusCorrection(){return Xv(this._mercatorTransform.getCircleRadiusCorrection(),this._verticalPerspectiveTransform.getCircleRadiusCorrection(),this._globeness)}getPitchedTextCorrection(r,t,i){let a=this._mercatorTransform.getPitchedTextCorrection(r,t,i),o=this._verticalPerspectiveTransform.getPitchedTextCorrection(r,t,i);return Xv(a,o,this._globeness)}projectTileCoordinates(r,t,i,a){return this.currentTransform.projectTileCoordinates(r,t,i,a)}_calcMatrices(){this._helper._width&&this._helper._height&&(this._verticalPerspectiveTransform.apply(this,!1),this._helper._nearZ=this._verticalPerspectiveTransform.nearZ,this._helper._farZ=this._verticalPerspectiveTransform.farZ,this._mercatorTransform.apply(this,!0,this.isGlobeRendering),this._helper._nearZ=this._mercatorTransform.nearZ,this._helper._farZ=this._mercatorTransform.farZ)}calculateFogMatrix(r){return this.currentTransform.calculateFogMatrix(r)}getVisibleUnwrappedCoordinates(r){return this.currentTransform.getVisibleUnwrappedCoordinates(r)}getCameraFrustum(){return this.currentTransform.getCameraFrustum()}getClippingPlane(){return this.currentTransform.getClippingPlane()}getCoveringTilesDetailsProvider(){return this.currentTransform.getCoveringTilesDetailsProvider()}recalculateZoomAndCenter(r){this.currentTransform.recalculateZoomAndCenter(r)}maxPitchScaleFactor(){return this._mercatorTransform.maxPitchScaleFactor()}getCameraPoint(){return this._helper.getCameraPoint()}getCameraAltitude(){return this.currentTransform.getCameraAltitude()}getCameraLngLat(){return this.currentTransform.getCameraLngLat()}lngLatToCameraDepth(r,t){return this.currentTransform.lngLatToCameraDepth(r,t)}populateCache(r){this._mercatorTransform.populateCache(r),this._verticalPerspectiveTransform.populateCache(r)}getBounds(){return this.currentTransform.getBounds()}calculateCenterFromCameraLngLatAlt(r,t,i,a){return this._helper.calculateCenterFromCameraLngLatAlt(r,t,i,a)}calculateCameraOptionsFromTo(r,t,i,a){return this.currentTransform.calculateCameraOptionsFromTo(r,t,i,a)}setLocationAtPoint(r,t,i){if(!this.isGlobeRendering){this._mercatorTransform.setLocationAtPoint(r,t,i),this.apply(this._mercatorTransform,!1);return}this._verticalPerspectiveTransform.setLocationAtPoint(r,t,i),this.apply(this._verticalPerspectiveTransform,!1)}locationToScreenPoint(r,t){return this.currentTransform.locationToScreenPoint(r,t)}screenPointToMercatorCoordinate(r,t){return this.currentTransform.screenPointToMercatorCoordinate(r,t)}screenTerrainPointToMercatorCoordinate(r,t){return this.currentTransform.screenTerrainPointToMercatorCoordinate(r,t)}screenPointToLocation(r,t){return this.currentTransform.screenPointToLocation(r,t)}screenPointToLocationAtElevation(r,t){return this.currentTransform.screenPointToLocationAtElevation(r,t)}isPointOnMapSurface(r,t){return this.currentTransform.isPointOnMapSurface(r,t)}getRayDirectionFromPixel(r){return this._verticalPerspectiveTransform.getRayDirectionFromPixel(r)}getProjectionDataForCustomLayer(r=!0){let t=this._mercatorTransform.getProjectionDataForCustomLayer(r);if(!this.isGlobeRendering)return t;let i=this._verticalPerspectiveTransform.getProjectionDataForCustomLayer(r);return i.fallbackMatrix=t.mainMatrix,i.projectionTransition=this._globeness,i}getFastPathSimpleProjectionMatrix(r){return this.currentTransform.getFastPathSimpleProjectionMatrix(r)}},WM=class wp{get useGlobeControls(){return!0}handlePanInertia(r,t){let i=voe(r,t);return Math.abs(i.lng-t.center.lng)>180&&(i.lng=t.center.lng+179.5*Math.sign(i.lng-t.center.lng)),{easingCenter:i,easingOffset:new Wr(0,0)}}handleMapControlsRollPitchBearingZoom(r,t){let i=r.around,a=t.screenPointToLocation(i);r.bearingDelta&&t.setBearing(t.bearing+r.bearingDelta),r.pitchDelta&&t.setPitch(t.pitch+r.pitchDelta),r.rollDelta&&t.setRoll(t.roll+r.rollDelta);let o=t.zoom;r.zoomDelta&&t.setZoom(t.zoom+r.zoomDelta);let s=t.zoom-o;if(s===0)return;let l=Df(t.center.lng,a.lng),n=l/(Math.abs(l/180)+1),u=Df(t.center.lat,a.lat),c=t.getRayDirectionFromPixel(i),f=t.cameraPosition,h=Kl(f,c)*-1,d=fs();lh(d,f,[c[0]*h,c[1]*h,c[2]*h]);let p=ap(d),g=p-1,m=Math.exp(-Math.max(g-.3,0)*.5),y=P_(p,.95,.999,0,1),_=Nm(t.worldSize,t.center.lat)/Math.min(t.width,t.height),v=P_(_,.9,.5,1,.25),x=Math.min(m,Xv(1,v,y)),S=(1-Vc(-s))*x,M=t.center.lat,C=t.zoom,w=new An(t.center.lng+n*S,to(t.center.lat+u*S,-Wh,Wh));t.setLocationAtPoint(a,i);let k=t.center,A=P_(Math.abs(l),45,85,0,1),b=Math.max(A,y)**.25,E=Df(k.lng,w.lng),T=Df(k.lat,w.lat);t.setCenter(new An(k.lng+E*b,k.lat+T*b).wrap()),t.setZoom(C+Lu(M,t.center.lat))}handleMapControlsPan(r,t,i){r.panDelta&&coe(t,i,t.isPointOnMapSurface(r.around)?r.around:t.centerPoint,r.panDelta)}cameraForBoxAndBearing(r,t,i,a,o){let s=gz(r,t,i,a,o),l=t.left/o.width*2-1,n=(o.width-t.right)/o.width*2-1,u=t.top/o.height*-2+1,c=(o.height-t.bottom)/o.height*-2+1,f=Df(i.getWest(),i.getEast())<0,h=f?i.getEast():i.getWest(),d=f?i.getWest():i.getEast(),p=Math.max(i.getNorth(),i.getSouth()),g=Math.min(i.getNorth(),i.getSouth()),m=h+Df(h,d)*.5,y=p+Df(p,g)*.5,_=o.clone();_.setCenter(s.center),_.setBearing(s.bearing),_.setPitch(0),_.setRoll(0),_.setZoom(s.zoom);let v=_.modelViewProjectionMatrix,x=[ru(i.getNorthWest()),ru(i.getNorthEast()),ru(i.getSouthWest()),ru(i.getSouthEast()),ru(new An(d,y)),ru(new An(h,y)),ru(new An(m,p)),ru(new An(m,g))],S=ru(s.center),M=1/0;for(let C of x)l<0&&(M=wp.getLesserNonNegativeNonNull(M,wp.solveVectorScale(C,S,v,"x",l))),n>0&&(M=wp.getLesserNonNegativeNonNull(M,wp.solveVectorScale(C,S,v,"x",n))),u>0&&(M=wp.getLesserNonNegativeNonNull(M,wp.solveVectorScale(C,S,v,"y",u))),c<0&&(M=wp.getLesserNonNegativeNonNull(M,wp.solveVectorScale(C,S,v,"y",c)));if(!Number.isFinite(M)||M===0){vz();return}return s.zoom=Math.min(_.zoom+Ku(M),r.maxZoom),s}handleJumpToCenterZoom(r,t){let i=r.center.lat,a=r.applyConstrain(t.center?An.convert(t.center):r.center,r.zoom).center;r.setCenter(a.wrap());let o=t.zoom===void 0?r.zoom+Lu(i,a.lat):+t.zoom;r.zoom!==o&&r.setZoom(o)}handleEaseTo(r,t){let i=r.zoom,a=r.center,o=r.padding,s={roll:r.roll,pitch:r.pitch,bearing:r.bearing},l={roll:t.roll===void 0?r.roll:t.roll,pitch:t.pitch===void 0?r.pitch:t.pitch,bearing:t.bearing===void 0?r.bearing:t.bearing},n=t.zoom!==void 0,u=!r.isPaddingEqual(t.padding),c=!1,f=t.center?An.convert(t.center):a,h=r.applyConstrain(f,i).center;t2(r,h);let d=r.clone();d.setCenter(h),d.setZoom(n?+t.zoom:i+Lu(a.lat,f.lat)),d.setBearing(t.bearing);let p=new Wr(to(r.centerPoint.x+t.offsetAsPoint.x,0,r.width),to(r.centerPoint.y+t.offsetAsPoint.y,0,r.height));d.setLocationAtPoint(h,p);let g=(t.offset&&t.offsetAsPoint.mag())>0?d.center:h,m=n?+t.zoom:i+Lu(a.lat,g.lat),y=i+Lu(a.lat,0),_=m+Lu(g.lat,0),v=Df(a.lng,g.lng),x=Df(a.lat,g.lat),S=Vc(_-y);return c=m!==i,{easeFunc:M=>{if(w9(s,l)||mz({startEulerAngles:s,endEulerAngles:l,tr:r,k:M,useSlerp:s.roll!=l.roll}),u&&r.interpolatePadding(o,t.padding,M),t.around)To("Easing around a point is not supported under globe projection."),r.setLocationAtPoint(t.around,t.aroundPoint);else{let C=M*(_>y?Math.min(2,S):Math.max(.5,S))**(1-M),w=bz(a,v,x,C);r.setCenter(w.wrap())}if(c){let C=Zs.number(y,_,M)+Lu(0,r.center.lat);r.setZoom(C)}},isZooming:c,elevationCenter:g}}handleFlyTo(r,t){let i=t.zoom!==void 0,a=r.center,o=r.zoom,s=r.padding,l=!r.isPaddingEqual(t.padding),n=r.applyConstrain(An.convert(t.center||t.locationAtOffset),o).center,u=i?+t.zoom:r.zoom+Lu(r.center.lat,n.lat),c=r.clone();c.setCenter(n),c.setZoom(u),c.setBearing(t.bearing);let f=new Wr(to(r.centerPoint.x+t.offsetAsPoint.x,0,r.width),to(r.centerPoint.y+t.offsetAsPoint.y,0,r.height));c.setLocationAtPoint(n,f);let h=c.center;t2(r,h);let d=noe(r,a,h),p=o+Lu(a.lat,0),g=u+Lu(h.lat,0),m=Vc(g-p),y=typeof t.minZoom=="number"?+t.minZoom:r.minZoom,_=Math.max(y,r.minZoom)+Lu(h.lat,0),v=Math.min(_,p,g)+Lu(0,h.lat),x=r.applyConstrain(h,v).zoom+Lu(h.lat,0),S=Vc(x-p),M=Df(a.lng,h.lng),C=Df(a.lat,h.lat);return{easeFunc:(w,k,A,b)=>{let E=bz(a,M,C,A);l&&r.interpolatePadding(s,t.padding,w);let T=w===1?h:E;r.setCenter(T.wrap());let F=p+Ku(k);r.setZoom(w===1?u:F+Lu(0,T.lat))},scaleOfZoom:m,targetCenter:h,scaleOfMinZoom:S,pixelPathLength:d}}static solveVectorScale(r,t,i,a,o){let s=o,l=a==="x"?[i[0],i[4],i[8],i[12]]:[i[1],i[5],i[9],i[13]],n=[i[3],i[7],i[11],i[15]],u=r[0]*l[0]+r[1]*l[1]+r[2]*l[2],c=r[0]*n[0]+r[1]*n[1]+r[2]*n[2],f=t[0]*l[0]+t[1]*l[1]+t[2]*l[2],h=t[0]*n[0]+t[1]*n[1]+t[2]*n[2],d=(f+l[3]-s*h-s*n[3])/(f-u-s*h+s*c);return f+s*c===u+s*h||n[3]*(u-f)+l[3]*(h-c)+u*h===f*c?null:d}static getLesserNonNegativeNonNull(r,t){return t!==null&&t>=0&&t<r?t:r}},YM=class{constructor(e){this._globe=e,this._mercatorCameraHelper=new Jg,this._verticalPerspectiveCameraHelper=new WM}get useGlobeControls(){return this._globe.useGlobeRendering}get currentHelper(){return this.useGlobeControls?this._verticalPerspectiveCameraHelper:this._mercatorCameraHelper}handlePanInertia(e,r){return this.currentHelper.handlePanInertia(e,r)}handleMapControlsRollPitchBearingZoom(e,r){this.currentHelper.handleMapControlsRollPitchBearingZoom(e,r)}handleMapControlsPan(e,r,t){this.currentHelper.handleMapControlsPan(e,r,t)}cameraForBoxAndBearing(e,r,t,i,a){return this.currentHelper.cameraForBoxAndBearing(e,r,t,i,a)}handleJumpToCenterZoom(e,r){this.currentHelper.handleJumpToCenterZoom(e,r)}handleEaseTo(e,r){return this.currentHelper.handleEaseTo(e,r)}handleFlyTo(e,r){return this.currentHelper.handleFlyTo(e,r)}},tO=tne(),L2=class extends Nl{constructor(e,r={}){var t,i;super(),this._rtlPluginLoaded=()=>{for(let o in this.tileManagers){let s=this.tileManagers[o].getSource().type;(s==="vector"||s==="geojson")&&this.tileManagers[o].reload()}},this.map=e,this.dispatcher=new bM(VA(),e._getMapId()),this.dispatcher.registerMessageHandler("GG",(o,s)=>this.getGlyphs(o,s)),this.dispatcher.registerMessageHandler("GI",(o,s)=>this.getImages(o,s)),this.dispatcher.registerMessageHandler("GDA",(o,s)=>this.getDashes(o,s)),this.imageManager=new Kz,this.imageManager.setEventedParent(this),this.imageManager.setMissingImageResolver(e._missingStyleImageResolver),this.patternAtlas=new Jz(this.imageManager);let a=((t=e._container)==null?void 0:t.lang)||typeof document<"u"&&((i=document.documentElement)==null?void 0:i.lang)||void 0;this.glyphManager=new nB(e._requestManager,r.localIdeographFontFamily,a),this.lineAtlas=new hB(256,512),this.crossTileSymbolIndex=new zM,this._setInitialValues(),this._resetUpdates(),this.dispatcher.broadcast("SR",X4()),jg().on(x2,this._rtlPluginLoaded),this.on("data",o=>{if(o.dataType!=="source"||o.sourceDataType!=="metadata")return;let s=this.tileManagers[o.sourceId];if(!s)return;let l=s.getSource();if(l?.vectorLayerIds)for(let n in this._layers){let u=this._layers[n];u.source===l.id&&this._validateLayer(u)}})}_setInitialValues(){var e;this._layers={},this._order=[],this.tileManagers={},this.zoomHistory=new jx,this._imagesListDirty=!1,this._globalState={},this._serializedLayers={},this.stylesheet=null,this.light=null,this.sky=null,this.projection&&(this.projection.destroy(),delete this.projection),this._loaded=!1,this._changed=!1,this._updatedLayers={},this._updatedSources={},this._changedImages={},this._glyphsDidChange=!1,this._updatedPaintProps={},this._layerOrderChanged=!1,this._symbolPlacementTriggered=!1,this._placedProjectionTransition=void 0,this.crossTileSymbolIndex=new(((e=this.crossTileSymbolIndex)==null?void 0:e.constructor)||Object),this.pauseablePlacement=void 0,this.placement=void 0,this.z=0}setGlobalStateProperty(e,r){var t,i,a;this._checkLoaded();let o=r===null?(a=(i=(t=this.stylesheet.state)==null?void 0:t[e])==null?void 0:i.default)!=null?a:null:r;if(Td(o,this._globalState[e]))return this;this._globalState[e]=o,this._applyGlobalStateChanges([e])}getGlobalState(){return this._globalState}setGlobalState(e){this._checkLoaded();let r=[];for(let t in e)Td(this._globalState[t],e[t].default)||(r.push(t),this._globalState[t]=e[t].default);this._applyGlobalStateChanges(r)}_applyGlobalStateChanges(e){if(e.length===0)return;let r=new Set,t={};for(let i of e){t[i]=this._globalState[i];for(let a in this._layers){let o=this._layers[a],s=o.getLayoutAffectingGlobalStateRefs(),l=o.getPaintAffectingGlobalStateRefs(),n=o.getVisibilityAffectingGlobalStateRefs();if(s.has(i)&&r.add(o.source),l.has(i))for(let{name:u,value:c}of l.get(i))this._updatePaintProperty(o,u,c);n?.has(i)&&(o.recalculateVisibility(),this._updateLayer(o))}}this.dispatcher.broadcast("UGS",t);for(let i in this.tileManagers)r.has(i)&&(this._reloadSource(i),this._changed=!0)}loadURL(e){return Xr(this,arguments,function*(r,t={},i){this.fire(new Nf("dataloading")),t.validate=typeof t.validate!="boolean"||t.validate,this._loadStyleRequest=new AbortController;let a=this._loadStyleRequest;try{let o=yield this.map._requestManager.transformRequest(r,"Style");Y4(a.signal);let s=yield vg(o,a);this._loadStyleRequest===a&&(this._loadStyleRequest=null),this._load(s.data,t,i)}catch(o){this._loadStyleRequest===a&&(this._loadStyleRequest=null),o&&!a.signal.aborted&&this.fire(new Ln(Zu(o)))}})}loadJSON(e,r={},t){this.fire(new Nf("dataloading")),this._frameRequest=new AbortController,yc.frameAsync(this._frameRequest,this.map._ownerWindow).then(()=>{this._frameRequest=null,r.validate=r.validate!==!1,this._load(e,r,t)}).catch(()=>{})}loadEmpty(){this.fire(new Nf("dataloading")),this._load(tO,{validate:!1})}_load(e,r,t){var i,a,o;let s=r.transformStyle?r.transformStyle(t,e):e;if(!(r.validate&&AL(this,s))){s=Ot({},s),this._loaded=!0,this.stylesheet=s;for(let l in s.sources)this.addSource(l,s.sources[l],{validate:!1});s.sprite?this._loadSprite(s.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(s.glyphs),this.glyphManager.setFontFaces(s["font-faces"]),this._createLayers(),this.light=new lB((i=this.stylesheet.light)!=null?i:{},this._globalState),this._setProjectionInternal(((a=this.stylesheet.projection)==null?void 0:a.type)||"mercator"),this.sky=new fB(this.stylesheet.sky,this._globalState),this.map.setTerrain((o=this.stylesheet.terrain)!=null?o:null,{validate:!1}),this.fire(new Nf("data")),this.fire(new h2)}}_createLayers(){var e,r,t;let i=L5(this.stylesheet.layers);this.setGlobalState((e=this.stylesheet.state)!=null?e:null),this.dispatcher.broadcast("SL",i),this._order=i.map(a=>a.id),this._layers={},this._serializedLayers=null;for(let a of i){let o=$6(a,this._globalState);if(o.setEventedParent(this,{layer:{id:a.id}}),this._layers[a.id]=o,Gx(o)&&this.tileManagers[o.source]){let s=(t=(r=a.paint)==null?void 0:r["raster-fade-duration"])!=null?t:o.paint.get("raster-fade-duration");this.tileManagers[o.source].setRasterFadeDuration(s)}}}_loadSprite(e,r=!1,t=void 0){return Xr(this,null,function*(){this.imageManager.setLoaded(!1);let i=new AbortController;this._spriteRequest=i;let a;try{let o=yield rne(e,this.map._requestManager,this.map.getPixelRatio(),i);if(!o)return;for(let s in o){let{loaded:l,removed:n}=this.imageManager.setSpriteImages(s,o[s]);this._markImagesChanged(n),r&&this._markImagesChanged(l)}}catch(o){a=o,i.signal.aborted||this.fire(new Ln(a))}finally{this._spriteRequest=null,this.imageManager.setLoaded(!0),r&&(this._changed=!0),this.dispatcher.broadcast("SI",this.imageManager.listImages()),this.fire(new Nf("data")),t?.(a)}})}_unloadSprite(){this._markImagesChanged(this.imageManager.removeAllSpriteImages()),this._imagesListDirty=!0,this._changed=!0,this.fire(new Nf("data"))}_validateLayer(e){let r=this.tileManagers[e.source];if(!r)return;let t=e.sourceLayer;if(!t)return;let i=r.getSource();(i.type==="geojson"||i.vectorLayerIds&&!i.vectorLayerIds.includes(t))&&this.fire(new Ln(Error(`Source layer "${t}" does not exist on source "${i.id}" as specified by style layer "${e.id}".`)))}loaded(){if(!this._loaded||Object.keys(this._updatedSources).length)return!1;for(let e in this.tileManagers)if(!this.tileManagers[e].loaded())return!1;return this.imageManager.isLoaded()}_serializeByIds(e,r=!1){let t=this._serializedAllLayers();if(!e||e.length===0)return Object.values(r?cf(t):t);let i=[];for(let a of e)if(t[a]){let o=r?cf(t[a]):t[a];i.push(o)}return i}_serializedAllLayers(){let e=this._serializedLayers;if(e)return e;e=this._serializedLayers={};let r=Object.keys(this._layers);for(let t of r){let i=this._layers[t];i.type!=="custom"&&(e[t]=i.serialize())}return e}hasTransitions(){var e,r,t;if((e=this.light)!=null&&e.hasTransition()||(r=this.sky)!=null&&r.hasTransition()||(t=this.projection)!=null&&t.hasTransition())return!0;for(let i in this.tileManagers)if(this.tileManagers[i].hasTransition())return!0;for(let i in this._layers)if(this._layers[i].hasTransition())return!0;return!1}_checkLoaded(){if(!this._loaded)throw Error("Style is not done loading.")}update(e){if(!this._loaded)return;let r=this._changed;if(r){this._imagesListDirty&&(this._imagesListDirty=(this.dispatcher.broadcast("SI",this.imageManager.listImages()),!1));let a=Object.keys(this._updatedLayers),o=Object.keys(this._removedLayers);(a.length||o.length)&&this._updateWorkerLayers(a,o);for(let s in this._updatedSources){let l=this._updatedSources[s];if(l==="reload")this._reloadSource(s);else if(l==="clear")this._clearSource(s);else throw Error(`Invalid action ${l}`)}this._updateTilesForChangedImages(),this._updateTilesForChangedGlyphs();for(let s in this._updatedPaintProps)this._layers[s].updateTransitions(e);this._resetUpdates()}let t={};for(let a in this.tileManagers){let o=this.tileManagers[a];t[a]=o.used,o.used=!1}let i=this.imageManager.listImages();for(let a of this._order){let o=this._layers[a];o.recalculate(e,i),!o.isHidden(e.zoom)&&o.source&&(this.tileManagers[o.source].used=!0)}for(let a in t){let o=this.tileManagers[a];!!t[a]!=!!o.used&&o.fire(new zs("data",{sourceDataType:"visibility",sourceId:a}))}this.light.recalculate(e),this.sky.recalculate(e),this.projection.recalculate(e),this.z=e.zoom,r&&this.fire(new Nf("data"))}_updateTilesForChangedImages(){let e=Object.keys(this._changedImages);if(e.length){for(let r in this.tileManagers)this.tileManagers[r].reloadTilesForDependencies(["icons","patterns"],e);this._changedImages={}}}_updateTilesForChangedGlyphs(){if(this._glyphsDidChange){for(let e in this.tileManagers)this.tileManagers[e].reloadTilesForDependencies(["glyphs"],[""]);this._glyphsDidChange=!1}}_updateWorkerLayers(e,r){this.dispatcher.broadcast("UL",{layers:this._serializeByIds(e,!1),removedIds:r})}_resetUpdates(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={},this._changedImages={},this._glyphsDidChange=!1}setState(e,r={}){var t;this._checkLoaded();let i=this.serialize();if(e=r.transformStyle?r.transformStyle(i,e):e,((t=r.validate)!=null?t:!0)&&AL(this,e))return!1;e=cf(e),e.layers=L5(e.layers);let a=ene(i,e),o=this._getOperationsToPerform(a);if(o.unimplemented.length>0)throw Error(`Unimplemented: ${o.unimplemented.join(", ")}.`);if(o.operations.length===0)return!1;for(let s of o.operations)s();return this.stylesheet=e,this._serializedLayers=null,this.fire(new h2({style:this})),!0}_getOperationsToPerform(e){let r=[],t=[];for(let i of e)switch(i.command){case"setCenter":case"setZoom":case"setBearing":case"setPitch":case"setRoll":continue;case"addLayer":r.push(()=>this.addLayer.apply(this,i.args));break;case"removeLayer":r.push(()=>this.removeLayer.apply(this,i.args));break;case"setPaintProperty":r.push(()=>this.setPaintProperty.apply(this,i.args));break;case"setLayoutProperty":r.push(()=>this.setLayoutProperty.apply(this,i.args));break;case"setFilter":r.push(()=>this.setFilter.apply(this,i.args));break;case"addSource":r.push(()=>this.addSource.apply(this,i.args));break;case"removeSource":r.push(()=>this.removeSource.apply(this,i.args));break;case"setLayerZoomRange":r.push(()=>this.setLayerZoomRange.apply(this,i.args));break;case"setLight":r.push(()=>this.setLight.apply(this,i.args));break;case"setGeoJSONSourceData":r.push(()=>this.setGeoJSONSourceData.apply(this,i.args));break;case"setGlyphs":r.push(()=>this.setGlyphs.apply(this,i.args));break;case"setFontFaces":r.push(()=>this.setFontFaces.apply(this,i.args));break;case"setSprite":r.push(()=>this.setSprite.apply(this,i.args));break;case"setTerrain":r.push(()=>this.map.setTerrain.apply(this,i.args));break;case"setSky":r.push(()=>this.setSky.apply(this,i.args));break;case"setProjection":this.setProjection.apply(this,i.args);break;case"setGlobalState":r.push(()=>this.setGlobalState.apply(this,i.args));break;case"setTransition":r.push(()=>{});break;default:t.push(i.command)}return{operations:r,unimplemented:t}}addImage(e,r){if(this.getImage(e)){this.fire(new Ln(Error(`An image named "${e}" already exists.`)));return}this.imageManager.addImage(e,r),this._afterImageUpdated(e)}updateImage(e,r){this.imageManager.updateImage(e,r)}getImage(e){return this.imageManager.getImage(e)}setMissingImageResolver(e){this.imageManager.setMissingImageResolver(e)}removeImage(e){if(!this.getImage(e)){this.fire(new Ln(Error(`An image named "${e}" does not exist.`)));return}this.imageManager.removeImage(e),this._afterImageUpdated(e)}_markImagesChanged(e){for(let r of e)this._changedImages[r]=!0}_afterImageUpdated(e){this._changedImages[e]=!0,this._imagesListDirty=!0,this._changed=!0,this.fire(new Nf("data"))}listImages(){return this._checkLoaded(),this.imageManager.listImages()}addSource(e,r,t={}){var i;if(this._checkLoaded(),this.tileManagers[e]!==void 0)throw Error(`Source "${e}" already exists.`);if(!r.type)throw Error(`The type property must be defined, but only the following properties were given: ${Object.keys(r).join(", ")}.`);if(PT.has(r.type)&&this._validate(Hc.source,`sources.${e}`,r,null,t))return;(i=this.map)!=null&&i._collectResourceTiming&&(r.collectResourceTiming=!0);let a=this.tileManagers[e]=new A2(e,r,this.dispatcher);a.style=this,a.setEventedParent(this,()=>({isSourceLoaded:a.loaded(),source:a.serialize(),sourceId:e})),a.onAdd(this.map),this._changed=!0}removeSource(e){if(this._checkLoaded(),this.tileManagers[e]===void 0)throw Error(`There is no source with this ID=${e}`);for(let t in this._layers)if(this._layers[t].source===e)return this.fire(new Ln(Error(`Source "${e}" cannot be removed while layer "${t}" is using it.`)));let r=this.tileManagers[e];delete this.tileManagers[e],delete this._updatedSources[e],r.fire(new zs("data",{sourceDataType:"metadata",sourceId:e})),r.setEventedParent(null),r.onRemove(this.map),this._changed=!0}setGeoJSONSourceData(e,r){if(this._checkLoaded(),this.tileManagers[e]===void 0)throw Error(`There is no source with this ID=${e}`);let t=this.tileManagers[e].getSource();if(t.type!=="geojson")throw Error(`geojsonSource.type is ${t.type}, which is !== 'geojson`);t.setData(r),this._changed=!0}getSource(e){var r;return(r=this.tileManagers[e])==null?void 0:r.getSource()}addLayer(e,r,t={}){this._checkLoaded();let i=e.id;if(this.getLayer(i)){this.fire(new Ln(Error(`Layer "${i}" already exists on this map.`)));return}let a;if(e.type==="custom"){if(w6(this,vre(e)))return;a=$6(e,this._globalState)}else{if("source"in e&&typeof e.source=="object"&&(this.addSource(i,e.source),e=cf(e),e=yn(e,{source:i})),this._validate(Hc.layer,`layers.${i}`,e,{arrayIndex:-1},t))return;a=$6(e,this._globalState),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}})}let o=r?this._order.indexOf(r):this._order.length;if(r&&o===-1){this.fire(new Ln(Error(`Cannot add layer "${i}" before non-existing layer "${r}".`)));return}if(this._order.splice(o,0,i),this._layerOrderChanged=!0,this._layers[i]=a,this._removedLayers[i]&&a.source&&a.type!=="custom"){let s=this._removedLayers[i];delete this._removedLayers[i],s.type===a.type?(this._updatedSources[a.source]="reload",this.tileManagers[a.source].pause()):this._updatedSources[a.source]="clear"}this._updateLayer(a),a.onAdd&&a.onAdd(this.map)}moveLayer(e,r){if(this._checkLoaded(),this._changed=!0,!this._layers[e]){this.fire(new Ln(Error(`The layer '${e}' does not exist in the map's style and cannot be moved.`)));return}if(e===r)return;if(r&&!this._order.includes(r)){this.fire(new Ln(Error(`Cannot move layer "${e}" before non-existing layer "${r}".`)));return}let t=this._order.indexOf(e);this._order.splice(t,1);let i=r?this._order.indexOf(r):this._order.length;this._order.splice(i,0,e),this._layerOrderChanged=!0}removeLayer(e){var r;this._checkLoaded();let t=this._layers[e];if(!t){this.fire(new Ln(Error(`Cannot remove non-existing layer "${e}".`)));return}t.setEventedParent(null);let i=this._order.indexOf(e);this._order.splice(i,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=t,delete this._layers[e],this._serializedLayers&&delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],t.type==="symbol"&&t.source&&((r=this.tileManagers[t.source])==null||r.resetMaxContentElevation()),t.onRemove&&t.onRemove(this.map)}getLayer(e){return this._layers[e]}getLayersOrder(){return[...this._order]}hasLayer(e){return e in this._layers}setLayerZoomRange(e,r,t){this._checkLoaded();let i=this.getLayer(e);if(!i){this.fire(new Ln(Error(`Cannot set the zoom range of non-existing layer "${e}".`)));return}(i.minzoom!==r||i.maxzoom!==t)&&(r!=null&&(i.minzoom=r),t!=null&&(i.maxzoom=t),this._updateLayer(i))}setFilter(e,r,t={}){this._checkLoaded();let i=this.getLayer(e);if(!i){this.fire(new Ln(Error(`Cannot filter non-existing layer "${e}".`)));return}if(!Td(i.filter,r)){if(r==null){i.setFilter(void 0),this._updateLayer(i);return}this._validate(Hc.filter,`layers.${i.id}.filter`,r,null,t)||(i.setFilter(cf(r)),this._updateLayer(i))}}getFilter(e){return cf(this.getLayer(e).filter)}setLayoutProperty(e,r,t,i={}){this._checkLoaded();let a=this.getLayer(e);if(!a){this.fire(new Ln(Error(`Cannot style non-existing layer "${e}".`)));return}Td(a.getLayoutProperty(r),t)||(a.setLayoutProperty(r,t,i),this._updateLayer(a))}getLayoutProperty(e,r){let t=this.getLayer(e);if(!t){this.fire(new Ln(Error(`Cannot get style of non-existing layer "${e}".`)));return}return t.getLayoutProperty(r)}setPaintProperty(e,r,t,i={}){this._checkLoaded();let a=this.getLayer(e);if(!a){this.fire(new Ln(Error(`Cannot style non-existing layer "${e}".`)));return}Td(a.getPaintProperty(r),t)||this._updatePaintProperty(a,r,t,i)}_updatePaintProperty(e,r,t,i={}){e.setPaintProperty(r,t,i)&&this._updateLayer(e),Gx(e)&&r==="raster-fade-duration"&&this.tileManagers[e.source].setRasterFadeDuration(t),this._changed=!0,this._updatedPaintProps[e.id]=!0,e.type==="symbol"&&this.triggerSymbolPlacement(),this._serializedLayers=null}getPaintProperty(e,r){return this.getLayer(e).getPaintProperty(r)}setFeatureState(e,r){this._checkLoaded();let t=e.source,i=e.sourceLayer,a=this.tileManagers[t];if(a===void 0){this.fire(new Ln(Error(`The source '${t}' does not exist in the map's style.`)));return}let o=a.getSource().type;if(o==="geojson"&&i){this.fire(new Ln(Error("GeoJSON sources cannot have a sourceLayer parameter.")));return}if(o==="vector"&&!i){this.fire(new Ln(Error("The sourceLayer parameter must be provided for vector source types.")));return}if(e.id===void 0){this.fire(new Ln(Error("The feature id parameter must be provided.")));return}let s=["__proto__","constructor","prototype"];if(r&&Object.keys(r).some(l=>s.includes(l))){this.fire(new Ln(Error(`The feature state should not include one of the following keys: ${s}`)));return}a.setFeatureState(i,e.id,r)}removeFeatureState(e,r){this._checkLoaded();let t=e.source,i=this.tileManagers[t];if(i===void 0){this.fire(new Ln(Error(`The source '${t}' does not exist in the map's style.`)));return}let a=i.getSource().type,o=a==="vector"?e.sourceLayer:void 0;if(a==="vector"&&!o){this.fire(new Ln(Error("The sourceLayer parameter must be provided for vector source types.")));return}if(r&&typeof e.id!="string"&&typeof e.id!="number"){this.fire(new Ln(Error("A feature id is required to remove its specific state property.")));return}i.removeFeatureState(o,e.id,r)}getFeatureState(e){this._checkLoaded();let r=e.source,t=e.sourceLayer,i=this.tileManagers[r];if(i===void 0){this.fire(new Ln(Error(`The source '${r}' does not exist in the map's style.`)));return}if(i.getSource().type==="vector"&&!t){this.fire(new Ln(Error("The sourceLayer parameter must be provided for vector source types.")));return}return e.id===void 0&&this.fire(new Ln(Error("The feature id parameter must be provided."))),i.getFeatureState(t,e.id)}getTransition(){var e;return yn({duration:300,delay:0},(e=this.stylesheet)==null?void 0:e.transition)}serialize(){if(!this._loaded)return;let e=$4(this.tileManagers,a=>a.serialize()),r=this._serializeByIds(this._order,!0),t=this.map.getTerrain()||void 0,i=this.stylesheet;return b9({version:i.version,name:i.name,metadata:i.metadata,light:i.light,sky:i.sky,center:i.center,zoom:i.zoom,bearing:i.bearing,pitch:i.pitch,sprite:i.sprite,glyphs:i.glyphs,"font-faces":i["font-faces"],transition:i.transition,projection:i.projection,state:i.state,sources:e,layers:r,terrain:t},a=>a!==void 0)}_updateLayer(e){this._updatedLayers[e.id]=!0,e.source&&!this._updatedSources[e.source]&&this.tileManagers[e.source].getSource().type!=="raster"&&(this._updatedSources[e.source]="reload",this.tileManagers[e.source].pause()),this._serializedLayers=null,this._changed=!0}_flattenAndSortRenderedFeatures(e){let r=o=>this._layers[o].type==="fill-extrusion",t={},i=[];for(let o=this._order.length-1;o>=0;o--){let s=this._order[o];if(r(s)){t[s]=o;for(let l of e){let n=l[s];if(n)for(let u of n)i.push(u)}}}i.sort((o,s)=>s.intersectionZ-o.intersectionZ);let a=[];for(let o=this._order.length-1;o>=0;o--){let s=this._order[o];if(r(s))for(let l=i.length-1;l>=0;l--){let n=i[l].feature;if(t[n.layer.id]<o)break;a.push(n),i.pop()}else for(let l of e){let n=l[s];if(n)for(let u of n)a.push(u.feature)}}return a}queryRenderedFeatures(e,r,t){r?.filter&&this._validate(Hc.filter,"queryRenderedFeatures.filter",r.filter,null,r);let i={};if(r?.layers){if(!(Array.isArray(r.layers)||r.layers instanceof Set))return this.fire(new Ln(Error("parameters.layers must be an Array or a Set of strings"))),[];for(let n of r.layers){let u=this._layers[n];if(!u)return this.fire(new Ln(Error(`The layer '${n}' does not exist in the map's style and cannot be queried for features.`))),[];i[u.source]=!0}}let a=[];r.availableImages=this.imageManager.listImages();let o=this._serializedAllLayers(),s=r.layers instanceof Set?r.layers:Array.isArray(r.layers)?new Set(r.layers):null,l=ar(Ot({},r),{layers:s,globalState:this._globalState});for(let n in this.tileManagers)(!r.layers||i[n])&&a.push(vne(this.tileManagers[n],this._layers,o,e,l,t,this.map.terrain?(u,c,f)=>this.map.terrain.getElevation(u,c,f):void 0));return this.placement&&a.push(mne(this._layers,o,this.tileManagers,e,l,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(a)}querySourceFeatures(e,r){r?.filter&&this._validate(Hc.filter,"querySourceFeatures.filter",r.filter,null,r);let t=this.tileManagers[e];return t?gne(t,r?ar(Ot({},r),{globalState:this._globalState}):{globalState:this._globalState}):[]}getLight(){return this.light.getLight()}setLight(e,r={}){this._checkLoaded();let t=this.light.getLight(),i=!1;for(let o in e)if(!Td(e[o],t[o])){i=!0;break}if(!i)return;let a={now:hs(),transition:yn({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(a)}getProjection(){var e;return(e=this.stylesheet)==null?void 0:e.projection}setProjection(e){this._checkLoaded();let r=e??{type:"mercator"};if(this.stylesheet.projection=e,this.projection){if(this.projection.name===r.type)return;this.projection.destroy(),delete this.projection}this._setProjectionInternal(r.type)}getSky(){var e;return(e=this.stylesheet)==null?void 0:e.sky}setSky(e,r={}){this._checkLoaded();let t=this.getSky(),i=!1;if(!e&&!t)return;if(e&&!t)i=!0;else if(!e&&t)i=!0;else for(let o in e)if(!Td(e[o],t[o])){i=!0;break}if(!i)return;let a={now:hs(),transition:yn({duration:300,delay:0},this.stylesheet.transition)};this.stylesheet.sky=e,this.sky.setSky(e,r),this.sky.updateTransitions(a)}_setProjectionInternal(e){var r;let t=moe(e,(r=this.map._camera)==null?void 0:r.transform.constrainOverride,this._globalState);this.projection=t.projection,this.map.migrateProjection(t.transform,t.cameraHelper);for(let i in this.tileManagers)this.tileManagers[i].reload()}_validate(e,r,t,i,a={}){return a.validate!==!1&&Q1(this,e,Ot({key:r,style:this.serialize(),value:t},i),a)}_remove(e=!0){this._frameRequest&&(this._frameRequest=(this._frameRequest.abort(),null)),this._loadStyleRequest&&(this._loadStyleRequest=(this._loadStyleRequest.abort(),null)),this._spriteRequest&&(this._spriteRequest=(this._spriteRequest.abort(),null)),jg().off(x2,this._rtlPluginLoaded);for(let r in this._layers)this._layers[r].setEventedParent(null);for(let r in this.tileManagers){let t=this.tileManagers[r];t.setEventedParent(null),t.onRemove(this.map)}this.imageManager.setEventedParent(null),this.setEventedParent(null),e&&this.dispatcher.broadcast("RM",void 0),this.dispatcher.remove(e)}_clearSource(e){this.tileManagers[e].clearTiles()}_reloadSource(e){this.tileManagers[e].resume(),this.tileManagers[e].reload()}_updateSources(e){for(let r in this.tileManagers)this.tileManagers[r].update(e,this.map.terrain)}_generateCollisionBoxes(){for(let e in this.tileManagers)this._reloadSource(e)}triggerSymbolPlacement(){this._symbolPlacementTriggered=!0}_placementInputsChanged(e,r,t){var i;let a=this.pauseablePlacement;return!a||this._symbolPlacementTriggered||this._placedProjectionTransition!==((i=this.projection)==null?void 0:i.transitionState)||a._showCollisionBoxes!==r||a.placement.collisionGroups.crossSourceCollisions!==t||a.placement.transform.renderWorldCopies!==e.renderWorldCopies||!RK(a.placement.transform.modelViewProjectionMatrix,e.modelViewProjectionMatrix)}_updatePlacement(e,r,t,i,a=!1){var o,s;let l=!1,n=!1,u={};for(let h of this._order){let d=this._layers[h];if(d.type!=="symbol")continue;if(!u[d.source]){let g=this.tileManagers[d.source];u[d.source]=g.getRenderableIds(!0).map(m=>g.getTileByID(m)).sort((m,y)=>y.tileID.overscaledZ-m.tileID.overscaledZ||(m.tileID.isLessThan(y.tileID)?-1:1))}let p=this.crossTileSymbolIndex.addLayer(d,u[d.source],e.center.lng);l||(l=p)}this.crossTileSymbolIndex.pruneUnusedLayers(this._order),a||(a=this._layerOrderChanged||t===0);let c=l||this._placementInputsChanged(e,r,i),f=((o=this.pauseablePlacement)==null?void 0:o.isDone())&&!this.placement.stillRecent(hs(),e.zoom);if((a||!this.pauseablePlacement||f&&(c||this.placement.stale))&&(this._symbolPlacementTriggered=!1,this._placedProjectionTransition=(s=this.projection)==null?void 0:s.transitionState,this.pauseablePlacement=new IB(e,this.map.terrain,this._order,a,r,t,i,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?c&&this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,u),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(hs()),n=!0),l&&this.pauseablePlacement.placement.setStale()),n||l)for(let h of this._order){let d=this._layers[h];d.type==="symbol"&&this.placement.updateLayerOpacities(d,u[d.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(hs())}_releaseSymbolFadeTiles(){for(let e in this.tileManagers)this.tileManagers[e].releaseSymbolFadeTiles()}getImages(e,r){return Xr(this,null,function*(){let t=yield this.imageManager.getImages(r.icons);this._updateTilesForChangedImages();let i=this.tileManagers[r.source];return i&&i.setDependencies(r.tileID.key,r.type,r.icons),t})}getGlyphs(e,r){return Xr(this,null,function*(){let t=yield this.glyphManager.getGlyphs(r.stacks),i=this.tileManagers[r.source];return i&&i.setDependencies(r.tileID.key,r.type,[""]),t})}getGlyphsUrl(){return this.stylesheet.glyphs||null}setGlyphs(e,r={}){this._checkLoaded(),!(e&&this._validate(Hc.glyphs,"glyphs",e,null,r))&&(this._changed=!0,this._glyphsDidChange=!0,this.stylesheet.glyphs=e,this.glyphManager.entries={},this.glyphManager.setURL(e))}getFontFaces(){return this.stylesheet["font-faces"]||null}setFontFaces(e){this._checkLoaded(),this._changed=!0,this._glyphsDidChange=!0,this.stylesheet["font-faces"]=e,this.glyphManager.setFontFaces(e)}getDashes(e,r){return Xr(this,null,function*(){let t={};for(let[i,a]of Object.entries(r.dashes))t[i]=this.lineAtlas.getDash(a.dasharray,a.round);return t})}addSprite(e,r,t={},i){this._checkLoaded();let a=[{id:e,url:r}],o=[...Xb(this.stylesheet.sprite),...a];this._validate(Hc.sprite,"sprite",o,null,t)||(this.stylesheet.sprite=o,this._loadSprite(a,!0,i))}removeSprite(e){this._checkLoaded();let r=Xb(this.stylesheet.sprite);if(!r.find(i=>i.id===e)){this.fire(new Ln(Error(`Sprite "${e}" doesn't exists on this map.`)));return}let t=this.imageManager.removeSpriteImages(e);this._markImagesChanged(t),r.splice(r.findIndex(i=>i.id===e),1),this.stylesheet.sprite=r.length>0?r:void 0,this._imagesListDirty=!0,this._changed=!0,this.fire(new Nf("data"))}getSprite(){return Xb(this.stylesheet.sprite)}setSprite(e,r={},t){this._checkLoaded(),!(e&&this._validate(Hc.sprite,"sprite",e,null,r))&&(this.stylesheet.sprite=e,e?this._loadSprite(e,!0,t):(this._unloadSprite(),t&&t(null)))}destroy(){this._frameRequest&&(this._frameRequest=(this._frameRequest.abort(),null)),this._loadStyleRequest&&(this._loadStyleRequest=(this._loadStyleRequest.abort(),null)),this._spriteRequest&&(this._spriteRequest=(this._spriteRequest.abort(),null));for(let e in this.tileManagers){let r=this.tileManagers[e];r.setEventedParent(null),r.onRemove(this.map)}this.tileManagers={},this.imageManager&&(this.imageManager.setEventedParent(null),this.imageManager.destroy(),this.patternAtlas.destroy()),this.glyphManager&&this.glyphManager.destroy();for(let e in this._layers){let r=this._layers[e];r.setEventedParent(null),r.onRemove&&r.onRemove(this.map)}this._setInitialValues(),this.setEventedParent(null),this.dispatcher.unregisterMessageHandler("GG"),this.dispatcher.unregisterMessageHandler("GI"),this.dispatcher.unregisterMessageHandler("GDA"),this.dispatcher.remove(!0),this._listeners={},this._oneTimeListeners={}}},rO=ul([{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]),iO=class{constructor(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null}bind(e,r,t,i,a,o,s,l,n){this.context=e;let u=this.boundPaintVertexBuffers.length!==i.length;for(let c=0;!u&&c<i.length;c++)this.boundPaintVertexBuffers[c]!==i[c]&&(u=!0);!this.vao||this.boundProgram!==r||this.boundLayoutVertexBuffer!==t||u||this.boundIndexBuffer!==a||this.boundVertexOffset!==o||this.boundDynamicVertexBuffer!==s||this.boundDynamicVertexBuffer2!==l||this.boundDynamicVertexBuffer3!==n?this.freshBind(r,t,i,a,o,s,l,n):e.bindVertexArray.set(this.vao)}freshBind(e,r,t,i,a,o,s,l){let n=e.numAttributes,u=this.context,c=u.gl;this.vao&&this.destroy(),this.vao=u.createVertexArray(),u.bindVertexArray.set(this.vao),this.boundProgram=e,this.boundLayoutVertexBuffer=r,this.boundPaintVertexBuffers=t,this.boundIndexBuffer=i,this.boundVertexOffset=a,this.boundDynamicVertexBuffer=o,this.boundDynamicVertexBuffer2=s,this.boundDynamicVertexBuffer3=l,r.enableAttributes(c,e);for(let f of t)f.enableAttributes(c,e);o&&o.enableAttributes(c,e),s&&s.enableAttributes(c,e),l&&l.enableAttributes(c,e),r.bind(),r.setVertexAttribPointers(c,e,a);for(let f of t)f.bind(),f.setVertexAttribPointers(c,e,a);o&&(o.bind(),o.setVertexAttribPointers(c,e,a)),i&&i.bind(),s&&(s.bind(),s.setVertexAttribPointers(c,e,a)),l&&(l.bind(),l.setVertexAttribPointers(c,e,a)),u.currentNumAttributes=n}destroy(){this.vao&&(this.vao=(this.context.deleteVertexArray(this.vao),null))}},aO=(e,r)=>({u_depth:new En(e,r.u_depth),u_terrain:new En(e,r.u_terrain)}),nO=(e,r)=>({u_texture:new En(e,r.u_texture),u_ele_delta:new Xa(e,r.u_ele_delta),u_fog_matrix:new vh(e,r.u_fog_matrix),u_fog_color:new lp(e,r.u_fog_color),u_fog_ground_blend:new Xa(e,r.u_fog_ground_blend),u_fog_ground_blend_opacity:new Xa(e,r.u_fog_ground_blend_opacity),u_horizon_color:new lp(e,r.u_horizon_color),u_horizon_fog_blend:new Xa(e,r.u_horizon_fog_blend),u_is_globe_mode:new Xa(e,r.u_is_globe_mode)}),oO=(e,r)=>({u_ele_delta:new Xa(e,r.u_ele_delta)}),sO=(e,r,t,i,a)=>({u_texture:0,u_ele_delta:e,u_fog_matrix:r,u_fog_color:t?t.properties.get("fog-color"):ro.white,u_fog_ground_blend:t?t.properties.get("fog-ground-blend"):1,u_fog_ground_blend_opacity:a?0:t?t.calculateFogBlendOpacity(i):0,u_horizon_color:t?t.properties.get("horizon-color"):ro.white,u_horizon_fog_blend:t?t.properties.get("horizon-fog-blend"):1,u_is_globe_mode:+!!a}),lO=e=>({u_ele_delta:e}),Qg={ProjectionUBO:0,TerrainUBO:1,FrameUBO:2},uO={float:[1,1],int:[1,1],vec2:[2,2],vec4:[4,4],mat4:[16,4]},F2=class{constructor(e,r,t){this.context=e,this.binding=r,this.contentWords=t.contentWords;let i=e.gl;this.buffer=i.createBuffer(),i.bindBuffer(i.UNIFORM_BUFFER,this.buffer),i.bufferData(i.UNIFORM_BUFFER,t.sizeWords*4,i.DYNAMIC_DRAW),i.bindBufferBase(i.UNIFORM_BUFFER,r,this.buffer),this.uploaded=new Float32Array(t.sizeWords),this.pending=new Float32Array(t.sizeWords),this.uploadedWords=new Uint32Array(this.uploaded.buffer),this.pendingWords=new Uint32Array(this.pending.buffer),this.hasData=!1,this.bindingDirty=!1}upload(){let e=this.context.gl,r=!this.hasData;if(!r){let t=this.pendingWords,i=this.uploadedWords;for(let a=0;a<this.contentWords;a++)if(t[a]!==i[a]){r=!0;break}}this.bindingDirty&&(this.bindingDirty=(e.bindBufferBase(e.UNIFORM_BUFFER,this.binding,this.buffer),!1)),r&&(e.bindBuffer(e.UNIFORM_BUFFER,this.buffer),e.bufferSubData(e.UNIFORM_BUFFER,0,this.pending),this.uploaded.set(this.pending),this.hasData=!0)}destroy(){let e=this.context.gl;this.buffer&&(e.deleteBuffer(this.buffer),delete this.buffer)}},XM=aM([{name:"u_projection_matrix",type:"mat4"},{name:"u_projection_fallback_matrix",type:"mat4"},{name:"u_projection_tile_mercator_coords",type:"vec4"},{name:"u_projection_clipping_plane",type:"vec4"},{name:"u_projection_transition",type:"float"},{name:"u_projection_clip_antimeridian",type:"int"}]),iv=XM.offsets,ZM=aM([{name:"u_terrain_matrix",type:"mat4"},{name:"u_terrain_unpack",type:"vec4"},{name:"u_terrain_dim",type:"float"},{name:"u_terrain_exaggeration",type:"float"}]),ey=ZM.offsets,cO=class{constructor(e,r,t,i,a,o,s,l,n=[]){let u=e.gl;this.program=u.createProgram();let c=nM(r.staticAttributes),f=t?t.getBinderAttributes():[],h=c.concat(f),d=rd.prelude.staticUniforms?nM(rd.prelude.staticUniforms):[],p=r.staticUniforms?nM(r.staticUniforms):[],g=t?t.getBinderUniforms():[],m=d.concat(p).concat(g),y=[];for(let k of m)y.includes(k)||y.push(k);let _=t?t.defines():[];_.unshift("#version 300 es"),a&&_.push("#define OVERDRAW_INSPECTOR;"),o&&_.push("#define TERRAIN3D;"),l&&_.push(l),n&&_.push(...n);let v=_.concat(rd.prelude.fragmentSource,s.fragmentSource,r.fragmentSource).join(`
+`),x=_.concat(rd.prelude.vertexSource,s.vertexSource,r.vertexSource).join(`
+`),S=u.createShader(u.FRAGMENT_SHADER);if(u.isContextLost()){this.failedToCreate=!0;return}u.shaderSource(S,v),u.compileShader(S),u.attachShader(this.program,S);let M=u.createShader(u.VERTEX_SHADER);if(u.isContextLost()){this.failedToCreate=!0;return}u.shaderSource(M,x),u.compileShader(M),u.attachShader(this.program,M),this.attributes={};let C={};if(this.numAttributes=h.length,u.linkProgram(this.program),!u.getProgramParameter(this.program,u.LINK_STATUS)){if(u.isContextLost()){this.failedToCreate=!0;return}throw u.getShaderParameter(S,u.COMPILE_STATUS)?u.getShaderParameter(M,u.COMPILE_STATUS)?Error(`Program failed to link: ${u.getProgramInfoLog(this.program)}`):Error(`Could not compile vertex shader: ${u.getShaderInfoLog(M)}`):Error(`Could not compile fragment shader: ${u.getShaderInfoLog(S)}`)}goe(u,this.program);let w=woe(u,this.program);for(let k of h){if(!k)continue;let A=u.getAttribLocation(this.program,k);A>=0&&(this.attributes[k]={location:A,isInteger:w.has(k)})}u.deleteShader(M),u.deleteShader(S);for(let k of y)if(k&&!C[k]){let A=u.getUniformLocation(this.program,k);A&&(C[k]=A)}this.fixedUniforms=i(e,C),this.terrainUniforms=aO(e,C),this.binderUniforms=t?t.getUniforms(e,C):[]}draw(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g,m,y,_){var v;let x=e.gl;if(this.failedToCreate)return;if(e.program.set(this.program),e.setDepthMode(t),e.setStencilMode(i),e.setColorMode(a),e.setCullFace(o),l){e.activeTexture.set(x.TEXTURE2),x.bindTexture(x.TEXTURE_2D,l.depthTexture),e.activeTexture.set(x.TEXTURE3),x.bindTexture(x.TEXTURE_2D,l.texture);for(let M in this.terrainUniforms)this.terrainUniforms[M].set(l[M]);boe(e.terrainUniformBuffer,l)}if(n&&_oe(e.projectionUniformBuffer,n),s)for(let M in this.fixedUniforms)this.fixedUniforms[M].set(s[M]);g&&g.setUniforms(e,this.binderUniforms,d,{zoom:p});let S=0;switch(r){case x.LINES:S=2;break;case x.TRIANGLES:S=3;break;case x.LINE_STRIP:S=1}for(let M of h.get())M.vaos||(M.vaos={}),(v=M.vaos)[u]||(v[u]=new iO),M.vaos[u].bind(e,this,c,g?g.getPaintVertexBuffers():[],f,M.vertexOffset,m,y,_),x.drawElements(r,M.primitiveLength*S,x.UNSIGNED_SHORT,M.primitiveOffset*S*2)}},fO=(e,r)=>({u_lightpos:new vc(e,r.u_lightpos),u_lightpos_globe:new vc(e,r.u_lightpos_globe),u_lightintensity:new Xa(e,r.u_lightintensity),u_lightcolor:new vc(e,r.u_lightcolor),u_vertical_gradient:new Xa(e,r.u_vertical_gradient),u_opacity:new Xa(e,r.u_opacity),u_fill_translate:new mo(e,r.u_fill_translate)}),hO=(e,r)=>({u_lightpos:new vc(e,r.u_lightpos),u_lightpos_globe:new vc(e,r.u_lightpos_globe),u_lightintensity:new Xa(e,r.u_lightintensity),u_lightcolor:new vc(e,r.u_lightcolor),u_vertical_gradient:new Xa(e,r.u_vertical_gradient),u_height_factor:new Xa(e,r.u_height_factor),u_opacity:new Xa(e,r.u_opacity),u_fill_translate:new mo(e,r.u_fill_translate),u_image:new En(e,r.u_image),u_texsize:new mo(e,r.u_texsize),u_pixel_coord_upper:new mo(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new mo(e,r.u_pixel_coord_lower),u_scale:new vc(e,r.u_scale),u_fade:new Xa(e,r.u_fade)}),KM=(e,r,t,i)=>{let a=e.style.light,o=a.getCartesianPosition(),s=u9();a.properties.get("anchor")==="viewport"&&CK(s,e.transform.bearingInRadians),jK(o,o,s);let l=e.transform.transformLightDirection(o),n=a.properties.get("color");return{u_lightpos:o,u_lightpos_globe:l,u_lightintensity:a.properties.get("intensity"),u_lightcolor:[n.r,n.g,n.b],u_vertical_gradient:+r,u_opacity:t,u_fill_translate:i}},dO=(e,r,t,i,a,o,s)=>yn(KM(e,r,t,i),Mz(o,e,s),{u_height_factor:-(2**a.overscaledZ)/s.tileSize/8}),pO=(e,r)=>({u_fill_translate:new mo(e,r.u_fill_translate)}),vO=(e,r)=>({u_image:new En(e,r.u_image),u_texsize:new mo(e,r.u_texsize),u_pixel_coord_upper:new mo(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new mo(e,r.u_pixel_coord_lower),u_scale:new vc(e,r.u_scale),u_fade:new Xa(e,r.u_fade),u_sdf_pattern:new En(e,r.u_sdf_pattern),u_fill_translate:new mo(e,r.u_fill_translate)}),mO=(e,r)=>({u_fill_translate:new mo(e,r.u_fill_translate)}),gO=(e,r)=>({u_image:new En(e,r.u_image),u_texsize:new mo(e,r.u_texsize),u_pixel_coord_upper:new mo(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new mo(e,r.u_pixel_coord_lower),u_scale:new vc(e,r.u_scale),u_fade:new Xa(e,r.u_fade),u_sdf_pattern:new En(e,r.u_sdf_pattern),u_fill_translate:new mo(e,r.u_fill_translate)}),JM=(e,r,t,i,a)=>yn(Mz(r,e,t),{u_fill_translate:i,u_sdf_pattern:+!!a}),yO=e=>({u_fill_translate:e}),_O=e=>({u_fill_translate:e}),xO=(e,r,t,i,a)=>JM(e,r,t,i,a),bO=(e,r)=>({u_scale_with_map:new En(e,r.u_scale_with_map),u_pitch_with_map:new En(e,r.u_pitch_with_map),u_extrude_scale:new mo(e,r.u_extrude_scale),u_globe_extrude_scale:new Xa(e,r.u_globe_extrude_scale),u_translate:new mo(e,r.u_translate)}),wO=(e,r,t,i,a)=>{let o=e.transform,s,l,n=0;if(t.paint.get("circle-pitch-alignment")==="map"){let u=Cf(r,1,o.zoom);s=!0,l=[u,u],n=u/(Bi*2**r.tileID.overscaledZ)*2*Math.PI*a}else s=!1,l=o.pixelsToGLUnits;return{u_scale_with_map:+(t.paint.get("circle-pitch-scale")==="map"),u_pitch_with_map:+s,u_extrude_scale:l,u_globe_extrude_scale:n,u_translate:i}},TO=(e,r)=>({u_color:new lp(e,r.u_color),u_overlay:new En(e,r.u_overlay),u_overlay_scale:new Xa(e,r.u_overlay_scale)}),QM=(e,r=1)=>({u_color:e,u_overlay:0,u_overlay_scale:r}),AO=(e,r)=>({u_extrude_scale:new Xa(e,r.u_extrude_scale),u_intensity:new Xa(e,r.u_intensity),u_globe_extrude_scale:new Xa(e,r.u_globe_extrude_scale)}),MO=(e,r)=>({u_matrix:new vh(e,r.u_matrix),u_image:new En(e,r.u_image),u_color_ramp:new En(e,r.u_color_ramp),u_opacity:new Xa(e,r.u_opacity)}),eS=(e,r,t,i)=>{let a=Cf(e,1,r)/(Bi*2**e.tileID.overscaledZ)*2*Math.PI*i;return{u_extrude_scale:Cf(e,1,r),u_intensity:t,u_globe_extrude_scale:a}},tS=(e,r,t,i)=>{let a=Rp();return $h(a,0,e.width,e.height,0,0,1),{u_matrix:a,u_image:t,u_color_ramp:i,u_opacity:r.paint.get("heatmap-opacity")}},SO=(e,r)=>({u_image:new En(e,r.u_image),u_latrange:new mo(e,r.u_latrange),u_exaggeration:new Xa(e,r.u_exaggeration),u_altitudes:new eA(e,r.u_altitudes),u_azimuths:new eA(e,r.u_azimuths),u_accent:new lp(e,r.u_accent),u_method:new En(e,r.u_method),u_shadows:new QT(e,r.u_shadows),u_highlights:new QT(e,r.u_highlights)}),EO=(e,r)=>({u_matrix:new vh(e,r.u_matrix),u_image:new En(e,r.u_image),u_dimension:new mo(e,r.u_dimension),u_zoom:new Xa(e,r.u_zoom),u_unpack:new Sm(e,r.u_unpack)}),kO=(e,r,t)=>{let i=t.paint.get("hillshade-accent-color"),a;switch(t.paint.get("hillshade-method")){case"basic":a=4;break;case"combined":a=1;break;case"igor":a=2;break;case"multidirectional":a=3;break;default:a=0}let o=t.getIlluminationProperties();for(let s=0;s<o.directionRadians.length;s++)t.paint.get("hillshade-illumination-anchor")==="viewport"&&(o.directionRadians[s]+=e.transform.bearingInRadians);return{u_image:0,u_latrange:Aoe(e,r.tileID),u_exaggeration:t.paint.get("hillshade-exaggeration"),u_altitudes:o.altitudeRadians,u_azimuths:o.directionRadians,u_accent:i,u_method:a,u_highlights:o.highlightColor,u_shadows:o.shadowColor}},CO=(e,r)=>{let t=r.stride,i=Rp();return $h(i,0,Bi,-Bi,0,0,1),Ol(i,i,[0,-Bi,0]),{u_matrix:i,u_image:1,u_dimension:[t,t],u_zoom:e.overscaledZ,u_unpack:r.getUnpackVector()}},DO=(e,r)=>({u_image:new En(e,r.u_image),u_unpack:new Sm(e,r.u_unpack),u_dimension:new mo(e,r.u_dimension),u_elevation_stops:new En(e,r.u_elevation_stops),u_color_stops:new En(e,r.u_color_stops),u_color_ramp_size:new En(e,r.u_color_ramp_size),u_opacity:new Xa(e,r.u_opacity)}),LO=(e,r,t=0)=>({u_image:0,u_unpack:r.getUnpackVector(),u_dimension:[r.stride,r.stride],u_elevation_stops:1,u_color_stops:4,u_color_ramp_size:t,u_opacity:e.paint.get("color-relief-opacity")}),FO=(e,r)=>({u_translation:new mo(e,r.u_translation),u_ratio:new Xa(e,r.u_ratio)}),PO=(e,r)=>({u_translation:new mo(e,r.u_translation),u_ratio:new Xa(e,r.u_ratio),u_image:new En(e,r.u_image),u_image_height:new Xa(e,r.u_image_height)}),IO=(e,r)=>({u_translation:new mo(e,r.u_translation),u_texsize:new mo(e,r.u_texsize),u_ratio:new Xa(e,r.u_ratio),u_image:new En(e,r.u_image),u_scale:new vc(e,r.u_scale),u_fade:new Xa(e,r.u_fade)}),RO=(e,r)=>({u_translation:new mo(e,r.u_translation),u_ratio:new Xa(e,r.u_ratio),u_image:new En(e,r.u_image),u_mix:new Xa(e,r.u_mix),u_tileratio:new Xa(e,r.u_tileratio),u_crossfade_from:new Xa(e,r.u_crossfade_from),u_crossfade_to:new Xa(e,r.u_crossfade_to),u_lineatlas_width:new Xa(e,r.u_lineatlas_width),u_lineatlas_height:new Xa(e,r.u_lineatlas_height)}),zO=(e,r)=>({u_translation:new mo(e,r.u_translation),u_ratio:new Xa(e,r.u_ratio),u_image:new En(e,r.u_image),u_image_height:new Xa(e,r.u_image_height),u_tileratio:new Xa(e,r.u_tileratio),u_crossfade_from:new Xa(e,r.u_crossfade_from),u_crossfade_to:new Xa(e,r.u_crossfade_to),u_image_dash:new En(e,r.u_image_dash),u_mix:new Xa(e,r.u_mix),u_lineatlas_width:new Xa(e,r.u_lineatlas_width),u_lineatlas_height:new Xa(e,r.u_lineatlas_height)}),ty=(e,r,t,i)=>{let a=e.transform;return{u_translation:Sz(e,r,t),u_ratio:i/Cf(r,1,a.zoom)}},BO=(e,r,t,i,a)=>yn(ty(e,r,t,i),{u_image:0,u_image_height:a}),OO=(e,r,t,i,a)=>{let o=e.transform,s=oM(r,o);return{u_translation:Sz(e,r,t),u_texsize:r.imageAtlasTexture.size,u_ratio:i/Cf(r,1,o.zoom),u_image:0,u_scale:[s,a.fromScale,a.toScale],u_fade:a.t}},NO=(e,r,t,i,a)=>{let o=e.transform,s=oM(r,o);return yn(ty(e,r,t,i),{u_tileratio:s,u_crossfade_from:a.fromScale,u_crossfade_to:a.toScale,u_image:0,u_mix:a.t,u_lineatlas_width:e.lineAtlas.width,u_lineatlas_height:e.lineAtlas.height})},jO=(e,r,t,i,a,o)=>{let s=e.transform,l=oM(r,s);return yn(ty(e,r,t,i),{u_image:0,u_image_height:o,u_tileratio:l,u_crossfade_from:a.fromScale,u_crossfade_to:a.toScale,u_image_dash:1,u_mix:a.t,u_lineatlas_width:e.lineAtlas.width,u_lineatlas_height:e.lineAtlas.height})},UO=(e,r)=>({u_image:new En(e,r.u_image),u_opacity:new Xa(e,r.u_opacity)}),qO=(e,r)=>({u_image:r,u_opacity:e}),VO=(e,r)=>({u_is_size_zoom_constant:new En(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new En(e,r.u_is_size_feature_constant),u_size_t:new Xa(e,r.u_size_t),u_size:new Xa(e,r.u_size),u_rotate_symbol:new En(e,r.u_rotate_symbol),u_label_plane_matrix:new vh(e,r.u_label_plane_matrix),u_coord_matrix:new vh(e,r.u_coord_matrix),u_is_text:new En(e,r.u_is_text),u_pitch_with_map:new En(e,r.u_pitch_with_map),u_is_along_line:new En(e,r.u_is_along_line),u_is_variable_anchor:new En(e,r.u_is_variable_anchor),u_texsize:new mo(e,r.u_texsize),u_texture:new En(e,r.u_texture),u_translation:new mo(e,r.u_translation),u_pitched_scale:new Xa(e,r.u_pitched_scale),u_is_offset:new En(e,r.u_is_offset),u_height_anchor_ground:new En(e,r.u_height_anchor_ground)}),GO=(e,r)=>({u_is_size_zoom_constant:new En(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new En(e,r.u_is_size_feature_constant),u_size_t:new Xa(e,r.u_size_t),u_size:new Xa(e,r.u_size),u_rotate_symbol:new En(e,r.u_rotate_symbol),u_label_plane_matrix:new vh(e,r.u_label_plane_matrix),u_coord_matrix:new vh(e,r.u_coord_matrix),u_is_text:new En(e,r.u_is_text),u_pitch_with_map:new En(e,r.u_pitch_with_map),u_is_along_line:new En(e,r.u_is_along_line),u_is_variable_anchor:new En(e,r.u_is_variable_anchor),u_texsize:new mo(e,r.u_texsize),u_texture:new En(e,r.u_texture),u_gamma_scale:new Xa(e,r.u_gamma_scale),u_is_halo:new En(e,r.u_is_halo),u_is_plain:new En(e,r.u_is_plain),u_translation:new mo(e,r.u_translation),u_pitched_scale:new Xa(e,r.u_pitched_scale),u_is_offset:new En(e,r.u_is_offset),u_height_anchor_ground:new En(e,r.u_height_anchor_ground)}),HO=(e,r)=>({u_is_size_zoom_constant:new En(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new En(e,r.u_is_size_feature_constant),u_size_t:new Xa(e,r.u_size_t),u_size:new Xa(e,r.u_size),u_rotate_symbol:new En(e,r.u_rotate_symbol),u_label_plane_matrix:new vh(e,r.u_label_plane_matrix),u_coord_matrix:new vh(e,r.u_coord_matrix),u_is_text:new En(e,r.u_is_text),u_pitch_with_map:new En(e,r.u_pitch_with_map),u_is_along_line:new En(e,r.u_is_along_line),u_is_variable_anchor:new En(e,r.u_is_variable_anchor),u_texsize:new mo(e,r.u_texsize),u_texsize_icon:new mo(e,r.u_texsize_icon),u_texture:new En(e,r.u_texture),u_texture_icon:new En(e,r.u_texture_icon),u_gamma_scale:new Xa(e,r.u_gamma_scale),u_is_halo:new En(e,r.u_is_halo),u_translation:new mo(e,r.u_translation),u_pitched_scale:new Xa(e,r.u_pitched_scale),u_is_offset:new En(e,r.u_is_offset),u_height_anchor_ground:new En(e,r.u_height_anchor_ground)}),rS=(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p)=>({u_is_size_zoom_constant:+(e==="constant"||e==="source"),u_is_size_feature_constant:+(e==="constant"||e==="camera"),u_size_t:r?r.uSizeT:0,u_size:r?r.uSize:0,u_rotate_symbol:+t,u_label_plane_matrix:l,u_coord_matrix:n,u_is_text:+c,u_pitch_with_map:+i,u_is_along_line:a,u_is_variable_anchor:o,u_texsize:f,u_texture:0,u_translation:u,u_pitched_scale:h,u_is_offset:d,u_height_anchor_ground:+p}),iS=(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p,g)=>{let m=s.transform;return yn(rS(e,r,t,i,a,o,s,l,n,u,c,f,d,p,g),{u_gamma_scale:i?Math.cos(m.pitch*Math.PI/180)*m.cameraToCenterDistance:1,u_is_halo:+!!h,u_is_plain:1})},$O=(e,r,t,i,a,o,s,l,n,u,c,f,h,d,p)=>yn(iS(e,r,t,i,a,o,s,l,n,u,!0,c,!0,h,d,p),{u_texsize_icon:f,u_texture_icon:1}),WO=(e,r)=>({u_opacity:new Xa(e,r.u_opacity),u_color:new lp(e,r.u_color)}),YO=(e,r)=>({u_opacity:new Xa(e,r.u_opacity),u_image:new En(e,r.u_image),u_pattern_tl_a:new mo(e,r.u_pattern_tl_a),u_pattern_br_a:new mo(e,r.u_pattern_br_a),u_pattern_tl_b:new mo(e,r.u_pattern_tl_b),u_pattern_br_b:new mo(e,r.u_pattern_br_b),u_texsize:new mo(e,r.u_texsize),u_mix:new Xa(e,r.u_mix),u_pattern_size_a:new mo(e,r.u_pattern_size_a),u_pattern_size_b:new mo(e,r.u_pattern_size_b),u_scale_a:new Xa(e,r.u_scale_a),u_scale_b:new Xa(e,r.u_scale_b),u_pixel_coord_upper:new mo(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new mo(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new Xa(e,r.u_tile_units_to_pixels)}),XO=(e,r)=>({u_opacity:e,u_color:r}),ZO=(e,r,t,i,a)=>yn(Toe(t,a,r,i),{u_opacity:e}),KO=(e,r)=>({u_sun_pos:new vc(e,r.u_sun_pos),u_atmosphere_blend:new Xa(e,r.u_atmosphere_blend),u_globe_position:new vc(e,r.u_globe_position),u_globe_radius:new Xa(e,r.u_globe_radius),u_inv_proj_matrix:new vh(e,r.u_inv_proj_matrix)}),JO=(e,r,t,i,a)=>({u_sun_pos:e,u_atmosphere_blend:r,u_globe_position:t,u_globe_radius:i,u_inv_proj_matrix:a}),QO=(e,r)=>({u_sky_color:new lp(e,r.u_sky_color),u_horizon_color:new lp(e,r.u_horizon_color),u_horizon:new mo(e,r.u_horizon),u_horizon_normal:new mo(e,r.u_horizon_normal),u_sky_horizon_blend:new Xa(e,r.u_sky_horizon_blend),u_sky_blend:new Xa(e,r.u_sky_blend),u_inv_proj_matrix:new vh(e,r.u_inv_proj_matrix),u_globe_position:new vc(e,r.u_globe_position),u_globe_radius:new Xa(e,r.u_globe_radius)}),eN=(e,r,t)=>{let i=Math.cos(r.rollInRadians),a=Math.sin(r.rollInRadians),o=lg(r),s=r.getProjectionData({overscaledTileID:null,applyGlobeMatrix:!0,applyTerrainMatrix:!0}).projectionTransition;return{u_sky_color:e.properties.get("sky-color"),u_horizon_color:e.properties.get("horizon-color"),u_horizon:[(r.width/2-o*a)*t,(r.height/2+o*i)*t],u_horizon_normal:[-a,i],u_sky_horizon_blend:e.properties.get("sky-horizon-blend")*r.height/2*t,u_sky_blend:s,u_inv_proj_matrix:r.inverseProjectionMatrix,u_globe_position:_z(r),u_globe_radius:Nm(r.worldSize,r.center.lat)}},ry=(e,r)=>({}),tN={fillExtrusion:fO,fillExtrusionPattern:hO,fill:pO,fillPattern:vO,fillOutline:mO,fillOutlinePattern:gO,circle:bO,collisionBox:ry,collisionCircle:ry,debug:TO,depth:ry,clippingMask:ry,heatmap:AO,heatmapTexture:MO,hillshade:SO,hillshadePrepare:EO,colorRelief:DO,line:FO,lineGradient:PO,linePattern:IO,lineSDF:RO,lineGradientSDF:zO,layerOpacity:UO,raster:pB,symbolIcon:VO,symbolSDF:GO,symbolTextAndIcon:HO,background:WO,backgroundPattern:YO,terrain:nO,terrainDepth:oO,atmosphere:KO,sky:QO},rN=class{constructor(e,r,t){this.context=e;let i=e.gl;this.buffer=i.createBuffer(),this.dynamicDraw=!!t,this.context.unbindVAO(),e.bindElementBuffer.set(this.buffer),i.bufferData(i.ELEMENT_ARRAY_BUFFER,r.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||r.freeBufferAfterUpload()}bind(){this.context.bindElementBuffer.set(this.buffer)}updateData(e){let r=this.context.gl;if(!this.dynamicDraw)throw Error("Attempted to update data while not in dynamic mode.");this.context.unbindVAO(),this.bind(),r.bufferSubData(r.ELEMENT_ARRAY_BUFFER,0,e.arrayBuffer)}destroy(){let e=this.context.gl;this.buffer&&(e.deleteBuffer(this.buffer),delete this.buffer)}},aS={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT",Int32:"INT",Uint32:"UNSIGNED_INT",Float32:"FLOAT"},iN=class{constructor(e,r,t,i){this.length=r.length,this.attributes=t,this.itemSize=r.bytesPerElement,this.dynamicDraw=i,this.context=e;let a=e.gl;this.buffer=a.createBuffer(),e.bindVertexBuffer.set(this.buffer),a.bufferData(a.ARRAY_BUFFER,r.arrayBuffer,this.dynamicDraw?a.DYNAMIC_DRAW:a.STATIC_DRAW),this.dynamicDraw||r.freeBufferAfterUpload()}bind(){this.context.bindVertexBuffer.set(this.buffer)}updateData(e){if(e.length!==this.length)throw Error(`Length of new data is ${e.length}, which doesn't match current length of ${this.length}`);let r=this.context.gl;this.bind(),r.bufferSubData(r.ARRAY_BUFFER,0,e.arrayBuffer)}enableAttributes(e,r){for(let t of this.attributes){let i=r.attributes[t.name];i!==void 0&&e.enableVertexAttribArray(i.location)}}setVertexAttribPointers(e,r,t){for(let i of this.attributes){let a=r.attributes[i.name];if(a!==void 0){let o=i.offset+this.itemSize*(t||0);a.isInteger?e.vertexAttribIPointer(a.location,i.components,e[aS[i.type]],this.itemSize,o):e.vertexAttribPointer(a.location,i.components,e[aS[i.type]],!1,this.itemSize,o)}}}destroy(){let e=this.context.gl;this.buffer&&(e.deleteBuffer(this.buffer),delete this.buffer)}},os=class{constructor(e){this.gl=e.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1}get(){return this.current}set(e){}getDefault(){return this.default}setDefault(){this.set(this.default)}},aN=class extends os{getDefault(){return ro.transparent}set(e){let r=this.current;(e.r!==r.r||e.g!==r.g||e.b!==r.b||e.a!==r.a||this.dirty)&&(this.gl.clearColor(e.r,e.g,e.b,e.a),this.current=e,this.dirty=!1)}},nN=class extends os{getDefault(){return 1}set(e){(e!==this.current||this.dirty)&&(this.gl.clearDepth(e),this.current=e,this.dirty=!1)}},oN=class extends os{getDefault(){return 0}set(e){(e!==this.current||this.dirty)&&(this.gl.clearStencil(e),this.current=e,this.dirty=!1)}},sN=class extends os{getDefault(){return[!0,!0,!0,!0]}set(e){let r=this.current;(e[0]!==r[0]||e[1]!==r[1]||e[2]!==r[2]||e[3]!==r[3]||this.dirty)&&(this.gl.colorMask(e[0],e[1],e[2],e[3]),this.current=e,this.dirty=!1)}},lN=class extends os{getDefault(){return!0}set(e){(e!==this.current||this.dirty)&&(this.gl.depthMask(e),this.current=e,this.dirty=!1)}},uN=class extends os{getDefault(){return 255}set(e){(e!==this.current||this.dirty)&&(this.gl.stencilMask(e),this.current=e,this.dirty=!1)}},cN=class extends os{getDefault(){return{func:this.gl.ALWAYS,ref:0,mask:255}}set(e){let r=this.current;(e.func!==r.func||e.ref!==r.ref||e.mask!==r.mask||this.dirty)&&(this.gl.stencilFunc(e.func,e.ref,e.mask),this.current=e,this.dirty=!1)}},fN=class extends os{getDefault(){let e=this.gl;return[e.KEEP,e.KEEP,e.KEEP]}set(e){let r=this.current;(e[0]!==r[0]||e[1]!==r[1]||e[2]!==r[2]||this.dirty)&&(this.gl.stencilOp(e[0],e[1],e[2]),this.current=e,this.dirty=!1)}},hN=class extends os{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;e?r.enable(r.STENCIL_TEST):r.disable(r.STENCIL_TEST),this.current=e,this.dirty=!1}},dN=class extends os{getDefault(){return[0,1]}set(e){let r=this.current;(e[0]!==r[0]||e[1]!==r[1]||this.dirty)&&(this.gl.depthRange(e[0],e[1]),this.current=e,this.dirty=!1)}},pN=class extends os{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;e?r.enable(r.DEPTH_TEST):r.disable(r.DEPTH_TEST),this.current=e,this.dirty=!1}},vN=class extends os{getDefault(){return this.gl.LESS}set(e){(e!==this.current||this.dirty)&&(this.gl.depthFunc(e),this.current=e,this.dirty=!1)}},mN=class extends os{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;e?r.enable(r.BLEND):r.disable(r.BLEND),this.current=e,this.dirty=!1}},gN=class extends os{getDefault(){let e=this.gl;return[e.ONE,e.ZERO]}set(e){let r=this.current;(e[0]!==r[0]||e[1]!==r[1]||this.dirty)&&(this.gl.blendFunc(e[0],e[1]),this.current=e,this.dirty=!1)}},yN=class extends os{getDefault(){return ro.transparent}set(e){let r=this.current;(e.r!==r.r||e.g!==r.g||e.b!==r.b||e.a!==r.a||this.dirty)&&(this.gl.blendColor(e.r,e.g,e.b,e.a),this.current=e,this.dirty=!1)}},_N=class extends os{getDefault(){return this.gl.FUNC_ADD}set(e){(e!==this.current||this.dirty)&&(this.gl.blendEquation(e),this.current=e,this.dirty=!1)}},xN=class extends os{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;e?r.enable(r.CULL_FACE):r.disable(r.CULL_FACE),this.current=e,this.dirty=!1}},bN=class extends os{getDefault(){return this.gl.BACK}set(e){(e!==this.current||this.dirty)&&(this.gl.cullFace(e),this.current=e,this.dirty=!1)}},wN=class extends os{getDefault(){return this.gl.CCW}set(e){(e!==this.current||this.dirty)&&(this.gl.frontFace(e),this.current=e,this.dirty=!1)}},TN=class extends os{getDefault(){return null}set(e){(e!==this.current||this.dirty)&&(this.gl.useProgram(e),this.current=e,this.dirty=!1)}},AN=class extends os{getDefault(){return this.gl.TEXTURE0}set(e){(e!==this.current||this.dirty)&&(this.gl.activeTexture(e),this.current=e,this.dirty=!1)}},MN=class extends os{getDefault(){let e=this.gl;return[0,0,e.drawingBufferWidth,e.drawingBufferHeight]}set(e){let r=this.current;(e[0]!==r[0]||e[1]!==r[1]||e[2]!==r[2]||e[3]!==r[3]||this.dirty)&&(this.gl.viewport(e[0],e[1],e[2],e[3]),this.current=e,this.dirty=!1)}},SN=class extends os{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.bindFramebuffer(r.FRAMEBUFFER,e),this.current=e,this.dirty=!1}},EN=class extends os{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.bindRenderbuffer(r.RENDERBUFFER,e),this.current=e,this.dirty=!1}},kN=class extends os{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.bindTexture(r.TEXTURE_2D,e),this.current=e,this.dirty=!1}},CN=class extends os{getDefault(){return null}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.bindBuffer(r.ARRAY_BUFFER,e),this.current=e,this.dirty=!1}},DN=class extends os{getDefault(){return null}set(e){let r=this.gl;r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e),this.current=e,this.dirty=!1}},LN=class extends os{getDefault(){return null}set(e){(e!==this.current||this.dirty)&&(this.gl.bindVertexArray(e),this.current=e,this.dirty=!1)}},FN=class extends os{getDefault(){return 4}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.pixelStorei(r.UNPACK_ALIGNMENT,e),this.current=e,this.dirty=!1}},PN=class extends os{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e),this.current=e,this.dirty=!1}},IN=class extends os{getDefault(){return!1}set(e){if(e===this.current&&!this.dirty)return;let r=this.gl;r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,e),this.current=e,this.dirty=!1}},P2=class extends os{constructor(e,r){super(e),this.context=e,this.parent=r}getDefault(){return null}},RN=class extends P2{setDirty(){this.dirty=!0}set(e){if(e===this.current&&!this.dirty)return;this.context.bindFramebuffer.set(this.parent);let r=this.gl;r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0),this.current=e,this.dirty=!1}},zN=class extends P2{set(e){if(e===this.current&&!this.dirty)return;this.context.bindFramebuffer.set(this.parent);let r=this.gl;r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,e),this.current=e,this.dirty=!1}},BN=class extends P2{set(e){if(e===this.current&&!this.dirty)return;this.context.bindFramebuffer.set(this.parent);let r=this.gl;r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,e),this.current=e,this.dirty=!1}},ON=class{constructor(e,r,t,i,a){this.context=e,this.width=r,this.height=t;let o=e.gl,s=this.framebuffer=o.createFramebuffer();if(this.colorAttachment=new RN(e,s),i)this.depthAttachment=a?new BN(e,s):new zN(e,s);else if(a)throw Error("Stencil cannot be set without depth")}destroy(){let e=this.context.gl,r=this.colorAttachment.get();if(r&&e.deleteTexture(r),this.depthAttachment){let t=this.depthAttachment.get();t&&e.deleteRenderbuffer(t)}e.deleteFramebuffer(this.framebuffer)}},nS=aM([{name:"u_units_to_pixels",type:"vec2"},{name:"u_world_size",type:"vec2"},{name:"u_camera_to_center_distance",type:"float"},{name:"u_symbol_fade_change",type:"float"},{name:"u_aspect_ratio",type:"float"},{name:"u_device_pixel_ratio",type:"float"},{name:"u_viewport_size",type:"vec2"},{name:"u_pixel_extrude_scale",type:"vec2"},{name:"u_pitch",type:"float"}]),pf=nS.offsets,cl=class{constructor(e,r,t){this.blendFunction=e,this.blendColor=r,this.mask=t}},cl.Replace=[1,0],cl.disabled=new cl(cl.Replace,ro.transparent,[!1,!1,!1,!1]),cl.unblended=new cl(cl.Replace,ro.transparent,[!0,!0,!0,!0]),cl.alphaBlended=new cl([1,771],ro.transparent,[!0,!0,!0,!0]),NN=class{constructor(e){this.gl=e,this.clearColor=new aN(this),this.clearDepth=new nN(this),this.clearStencil=new oN(this),this.colorMask=new sN(this),this.depthMask=new lN(this),this.stencilMask=new uN(this),this.stencilFunc=new cN(this),this.stencilOp=new fN(this),this.stencilTest=new hN(this),this.depthRange=new dN(this),this.depthTest=new pN(this),this.depthFunc=new vN(this),this.blend=new mN(this),this.blendFunc=new gN(this),this.blendColor=new yN(this),this.blendEquation=new _N(this),this.cullFace=new xN(this),this.cullFaceSide=new bN(this),this.frontFace=new wN(this),this.program=new TN(this),this.activeTexture=new AN(this),this.viewport=new MN(this),this.bindFramebuffer=new SN(this),this.bindRenderbuffer=new EN(this),this.bindTexture=new kN(this),this.bindVertexBuffer=new CN(this),this.bindElementBuffer=new DN(this),this.bindVertexArray=new LN(this),this.pixelStoreUnpack=new FN(this),this.pixelStoreUnpackPremultiplyAlpha=new PN(this),this.pixelStoreUnpackFlipY=new IN(this),this.extTextureFilterAnisotropic=e.getExtension("EXT_texture_filter_anisotropic"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=e.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.maxTextureSize=e.getParameter(e.MAX_TEXTURE_SIZE),e.getExtension("EXT_color_buffer_half_float"),e.getExtension("EXT_color_buffer_float"),this.projectionUniformBuffer=yoe(this),this.terrainUniformBuffer=xoe(this),this.frameUniformBuffer=Moe(this)}setDefault(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()}setDirty(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.bindVertexArray.dirty=!0,this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0,this.projectionUniformBuffer.bindingDirty=!0,this.terrainUniformBuffer.bindingDirty=!0,this.frameUniformBuffer.bindingDirty=!0}setCustomLayerDefaults(){this.unbindVAO(),this.cullFace.setDefault(),this.activeTexture.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()}createIndexBuffer(e,r){return new rN(this,e,r)}createVertexBuffer(e,r,t){return new iN(this,e,r,t)}createRenderbuffer(e,r,t){let i=this.gl,a=i.createRenderbuffer();return this.bindRenderbuffer.set(a),i.renderbufferStorage(i.RENDERBUFFER,e,r,t),this.bindRenderbuffer.set(null),a}createFramebuffer(e,r,t,i){return new ON(this,e,r,t,i)}clear({color:e,depth:r,stencil:t}){let i=this.gl,a=0;e&&(a|=i.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),r!==void 0&&(a|=i.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),t!==void 0&&(a|=i.STENCIL_BUFFER_BIT,this.clearStencil.set(t),this.stencilMask.set(255)),i.clear(a)}setCullFace(e){e.enable===!1?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(e.mode),this.frontFace.set(e.frontFace))}setDepthMode(e){e.func===this.gl.ALWAYS&&!e.mask?this.depthTest.set(!1):(this.depthTest.set(!0),this.depthFunc.set(e.func),this.depthMask.set(e.mask),this.depthRange.set(e.range))}setStencilMode(e){e.test.func===this.gl.ALWAYS&&!e.mask?this.stencilTest.set(!1):(this.stencilTest.set(!0),this.stencilMask.set(e.mask),this.stencilOp.set([e.fail,e.depthFail,e.pass]),this.stencilFunc.set({func:e.test.func,ref:e.ref,mask:e.test.mask}))}setColorMode(e){Td(e.blendFunction,cl.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)}createVertexArray(){return this.gl.createVertexArray()}deleteVertexArray(e){this.gl.deleteVertexArray(e)}unbindVAO(){this.bindVertexArray.set(null)}},Lo=class{constructor(e,r,t){this.func=e,this.mask=r,this.range=t}},Lo.ReadOnly=!1,Lo.ReadWrite=!0,Lo.disabled=new Lo(519,Lo.ReadOnly,[0,1]),I2=7680,es=class{constructor(e,r,t,i,a,o){this.test=e,this.ref=r,this.mask=t,this.fail=i,this.depthFail=a,this.pass=o}},es.disabled=new es({func:519,mask:0},0,0,I2,I2,I2),oS=1029,R2=2305,Ko=class{constructor(e,r,t){this.enable=e,this.mode=r,this.frontFace=t}},Ko.disabled=new Ko(!1,oS,R2),Ko.backCCW=new Ko(!0,oS,R2),Ko.frontCCW=new Ko(!0,1028,R2),jN=Hh(new Float32Array(16)),B2=0,O2=[new Wr(0,0),new Wr(Bi,0),new Wr(Bi,Bi),new Wr(0,Bi)],UN=new ro(1,0,0,1),qN=new ro(0,1,0,1),VN=new ro(0,0,1,1),GN=new ro(1,0,1,1),HN=new ro(0,1,1,1),$N={symbol:koe,circle:Ioe,heatmap:Roe,line:$oe,fill:Woe,fillExtrusion:Yoe,hillshade:Xoe,colorRelief:Koe,raster:Joe,background:rse,sky:hse,atmosphere:pse,custom:use,debug:nse,debugPadding:ise,terrainDepth:cse},WN=(N2=class{constructor(e,r){this.drawFunctions=$N,this.context=new NN(e),this.transform=r,this.layerOpacityFbo=null,this._tileTextures={},this._rttObjectRecyclePool=[],this._rttSharedFbo=null,this.terrainFacilitator={depthDirty:!0,matrix:Hh(new Float64Array(16)),renderTime:0},this.setup(),this.numSublayers=A2.maxOverzooming+A2.maxUnderzooming+1,this.depthEpsilon=1/2**16,this.crossTileSymbolIndex=new zM}resize(e,r,t){if(this.width=Math.floor(e*t),this.height=Math.floor(r*t),this.pixelRatio=t,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(let i of this.style._order)this.style._layers[i].resize()}setup(){let e=this.context,r=new sp;r.emplaceBack(0,0),r.emplaceBack(Bi,0),r.emplaceBack(0,Bi),r.emplaceBack(Bi,Bi),this.tileExtentBuffer=e.createVertexBuffer(r,i0.members),this.tileExtentSegments=Ks.simpleSegment(0,0,4,2);let t=new sp;t.emplaceBack(0,0),t.emplaceBack(Bi,0),t.emplaceBack(0,Bi),t.emplaceBack(Bi,Bi),this.debugBuffer=e.createVertexBuffer(t,i0.members),this.debugSegments=Ks.simpleSegment(0,0,4,5);let i=new fI;i.emplaceBack(0,0,0,0),i.emplaceBack(Bi,0,Bi,0),i.emplaceBack(0,Bi,0,Bi),i.emplaceBack(Bi,Bi,Bi,Bi),this.rasterBoundsBuffer=e.createVertexBuffer(i,rO.members),this.rasterBoundsSegments=Ks.simpleSegment(0,0,4,2);let a=new sp;a.emplaceBack(0,0),a.emplaceBack(Bi,0),a.emplaceBack(0,Bi),a.emplaceBack(Bi,Bi),this.rasterBoundsBufferPosOnly=e.createVertexBuffer(a,i0.members),this.rasterBoundsSegmentsPosOnly=Ks.simpleSegment(0,0,4,5);let o=new sp;o.emplaceBack(0,0),o.emplaceBack(1,0),o.emplaceBack(0,1),o.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(o,i0.members),this.viewportSegments=Ks.simpleSegment(0,0,4,2);let s=new TI;s.emplaceBack(0),s.emplaceBack(1),s.emplaceBack(3),s.emplaceBack(2),s.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(s);let l=new ed;l.emplaceBack(1,0,2),l.emplaceBack(1,2,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(l);let n=this.context.gl;this.stencilClearMode=new es({func:n.ALWAYS,mask:0},0,255,n.ZERO,n.ZERO,n.ZERO),this.tileExtentMesh=new Um(this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}clearStencil(){let e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;let t=Rp();$h(t,0,this.width,this.height,0,0,1),Xu(t,t,[r.drawingBufferWidth,r.drawingBufferHeight,0]);let i={mainMatrix:t,tileMercatorCoords:[0,0,1,1],clippingPlane:[0,0,0,0],projectionTransition:0,fallbackMatrix:t,clipAntimeridian:!1};this.useProgram("clippingMask",null,!0).draw(e,r.TRIANGLES,Lo.disabled,this.stencilClearMode,cl.disabled,Ko.disabled,null,null,i,"$clipping",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)}renderTileClippingMasks(e,r,t){if(this.currentStencilSource===e.source||!e.isTileClipped()||!r?.length)return;this.currentStencilSource=e.source,this.nextStencilID+r.length>256&&this.clearStencil();let i=this.context;i.setColorMode(cl.disabled),i.setDepthMode(Lo.disabled);let a={};for(let o of r)a[o.key]=this.nextStencilID++;this.style.projection.useSubdivision&&this._renderTileMasks(a,r,t,!0),this._renderTileMasks(a,r,t,!1),this._tileClippingMaskIDs=a}_renderTileMasks(e,r,t,i){let a=this.context,o=a.gl,s=this.style.projection,l=this.transform,n=this.useProgram("clippingMask");for(let u of r){let c=e[u.key],f=this.getTerrainDataForTile(u,t),h=s.getMeshFromTileID(this.context,u.canonical,i,!0,"stencil"),d=l.getProjectionData({overscaledTileID:u,applyGlobeMatrix:!t,applyTerrainMatrix:!0});n.draw(a,o.TRIANGLES,Lo.disabled,new es({func:o.ALWAYS,mask:0},c,255,o.KEEP,o.KEEP,o.REPLACE),cl.disabled,t?Ko.disabled:Ko.backCCW,null,f,d,"$clipping",h.vertexBuffer,h.indexBuffer,h.segments)}}getTerrainDataForTile(e,r){var t,i;return r&&((t=this.style.projection)==null?void 0:t.name)==="mercator"?null:((i=this.style.map.terrain)==null?void 0:i.getTerrainData(e))||null}_renderTilesDepthBuffer(){var e;let r=this.context,t=r.gl,i=this.style.projection,a=this.transform,o=this.useProgram("depth"),s=this.getDepthModeFor3D(),l=Bm(a,{tileSize:a.tileSize});for(let n of l){let u=(e=this.style.map.terrain)==null?void 0:e.getTerrainData(n),c=i.getMeshFromTileID(this.context,n.canonical,!0,!0,"raster"),f=a.getProjectionData({overscaledTileID:n,applyGlobeMatrix:!0,applyTerrainMatrix:!0});o.draw(r,t.TRIANGLES,s,es.disabled,cl.disabled,Ko.backCCW,null,u,f,"$clipping",c.vertexBuffer,c.indexBuffer,c.segments)}}stencilModeFor3D(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();let e=this.nextStencilID++,r=this.context.gl;return new es({func:r.NOTEQUAL,mask:255},e,255,r.KEEP,r.KEEP,r.REPLACE)}stencilModeForClipping(e){let r=this.context.gl;return new es({func:r.EQUAL,mask:255},this._tileClippingMaskIDs[e.key],0,r.KEEP,r.KEEP,r.REPLACE)}getStencilConfigForOverlapAndUpdateStencilID(e){let r=this.context.gl,t=e.sort((o,s)=>s.overscaledZ-o.overscaledZ),i=t[t.length-1].overscaledZ,a=t[0].overscaledZ-i+1;if(a>1){this.currentStencilSource=void 0,this.nextStencilID+a>256&&this.clearStencil();let o={};for(let s=0;s<a;s++)o[s+i]=new es({func:r.GEQUAL,mask:255},s+this.nextStencilID,255,r.KEEP,r.KEEP,r.REPLACE);return this.nextStencilID+=a,[o,t]}return[{[i]:es.disabled},t]}stencilConfigForOverlapTwoPass(e){let r=this.context.gl,t=e.sort((o,s)=>s.overscaledZ-o.overscaledZ),i=t[t.length-1].overscaledZ,a=t[0].overscaledZ-i+1;if(this.clearStencil(),a>1){let o={},s={};for(let l=0;l<a;l++)o[l+i]=new es({func:r.GREATER,mask:255},a+1+l,255,r.KEEP,r.KEEP,r.REPLACE),s[l+i]=new es({func:r.GREATER,mask:255},1+l,255,r.KEEP,r.KEEP,r.REPLACE);return this.nextStencilID=a*2+1,[o,s,t]}return this.nextStencilID=3,[{[i]:new es({func:r.GREATER,mask:255},2,255,r.KEEP,r.KEEP,r.REPLACE)},{[i]:new es({func:r.GREATER,mask:255},1,255,r.KEEP,r.KEEP,r.REPLACE)},t]}colorModeForRenderPass(){let e=this.context.gl;if(this._showOverdrawInspector){let r=.125;return new cl([e.CONSTANT_COLOR,e.ONE],new ro(r,r,r,0),[!0,!0,!0,!0])}return this.renderOptions.currentPass==="opaque"?cl.unblended:cl.alphaBlended}getDepthModeForSublayer(e,r,t){if(!this.opaquePassEnabledForLayer())return Lo.disabled;let i=1-((1+this.renderOptions.currentLayer)*this.numSublayers+e)*this.depthEpsilon;return new Lo(t||this.context.gl.LEQUAL,r,[i,i])}getDepthModeFor3D(){return new Lo(this.context.gl.LEQUAL,Lo.ReadWrite,this.renderOptions.depthRangeFor3D)}opaquePassEnabledForLayer(){return this.renderOptions.currentLayer<this.renderOptions.opaquePassCutoff}render(e,r){var t,i;this.style=e,this.options=r;let a=this.renderOptions=vse(this.transform,e.projection,(t=e.map.terrain)!=null?t:null);this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.patternAtlas=e.patternAtlas,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(hs()),Soe(this.context.frameUniformBuffer,this),this.imageManager.beginFrame();let o=this.style._order,s=this.style.tileManagers,l={},n={},u={};for(let f in s){let h=s[f];h.used&&h.prepare(this.context),l[f]=h.getVisibleCoordinates(!1),n[f]=l[f].slice().reverse(),u[f]=h.getVisibleCoordinates(!0).reverse()}a.opaquePassCutoff=1/0;for(let f=0;f<o.length;f++){let h=o[f];if(this.style._layers[h].is3D()){a.opaquePassCutoff=f;break}}this.maybeDrawDepth(),this.renderToTexture&&(this.renderToTexture.prepareForRender(this.style,this.transform.zoom),a.opaquePassCutoff=0),a.currentPass="offscreen";for(let f of o){let h=this.style._layers[f];if(!h.hasOffscreenPass()||h.isHidden(this.transform.zoom))continue;let d=n[h.source];(h.type==="custom"||d.length)&&this.renderLayer(this,s[h.source],h,d,a)}if(this.context.viewport.set([0,0,this.width,this.height]),this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?ro.black:ro.transparent,depth:1}),this.clearStencil(),this.style.sky&&this.drawFunctions.sky(this,this.style.sky),this._showOverdrawInspector=r.showOverdrawInspector,a.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],!this.renderToTexture)for(a.currentPass="opaque",a.currentLayer=o.length-1;a.currentLayer>=0;a.currentLayer--){let f=this.style._layers[o[a.currentLayer]];if(f.isHidden(this.transform.zoom))continue;let h=s[f.source],d=l[f.source];this.renderTileClippingMasks(f,d,!1),this.renderLayer(this,h,f,d,a)}a.currentPass="translucent";let c=!1;for(a.currentLayer=0;a.currentLayer<o.length;a.currentLayer++){let f=this.style._layers[o[a.currentLayer]];if(f.isHidden(this.transform.zoom))continue;let h=s[f.source];if((i=this.renderToTexture)!=null&&i.renderLayer(f,a))continue;!this.opaquePassEnabledForLayer()&&!c&&(c=!0,a.isRenderingGlobe&&!this.style.map.terrain&&this._renderTilesDepthBuffer());let d=(f.type==="symbol"?u:n)[f.source];this.renderTileClippingMasks(f,l[f.source],!!this.renderToTexture),this.renderLayer(this,h,f,d,a)}if(a.isRenderingGlobe&&this.drawFunctions.atmosphere(this,this.style.sky,this.style.light),this.options.showTileBoundaries){let f=lse(this.style,this.transform.zoom);f&&this.drawFunctions.debug(this,f,f.getVisibleCoordinates())}this.options.showPadding&&this.drawFunctions.debugPadding(this),this.context.setDefault()}maybeDrawDepth(){var e,r;if(!((e=this.style)!=null&&e.projection)||!((r=this.style.map)!=null&&r.terrain))return;let t=this.terrainFacilitator.matrix,i=this.transform.modelViewProjectionMatrix,a=this.terrainFacilitator.depthDirty;a||(a=!zK(t,i)),a||(a=this.style.map.terrain.tileManager.anyTilesAfterTime(this.terrainFacilitator.renderTime)),a&&(LK(t,i),this.terrainFacilitator.renderTime=hs(),this.terrainFacilitator.depthDirty=!1,this.drawFunctions.terrainDepth(this,this.style.map.terrain))}renderLayer(e,r,t,i,a){if(t.isHidden(this.transform.zoom)||t.type!=="background"&&t.type!=="custom"&&!(i||[]).length)return;this.id=t.id;let o=this.drawFunctions;AA(t)?o.symbol(e,r,t,i,this.style.placement.variableOffsets,a):RI(t)?o.circle(e,r,t,i,a):jI(t)?o.heatmap(e,r,t,i,a):DR(t)?o.line(e,r,t,i,a):oR(t)?o.fill(e,r,t,i,a):yR(t)?o.fillExtrusion(e,r,t,i,a):HI(t)?o.hillshade(e,r,t,i,a):KI(t)?o.colorRelief(e,r,t,i,a):Gx(t)?o.raster(e,r,t,i,a):r5(t)?o.background(e,r,t,i,a):a5(t)&&o.custom(e,r,t,a)}saveTileTexture(e){let r=this._tileTextures[e.size[0]];r?r.length<N2.MAX_TEXTURE_POOL_SIZE_PER_BUCKET?r.push(e):e.destroy():this._tileTextures[e.size[0]]=[e]}getTileTexture(e){let r=this._tileTextures[e];return r&&r.length>0?r.pop():null}acquireRTT(e){let r=this.context.gl,t=this._rttObjectRecyclePool.pop();if(t)return t.size!==e&&(t.texture.update({width:e,height:e,data:null},{premultiply:!1,useMipmap:!0}),t.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE,r.LINEAR_MIPMAP_LINEAR),this.context.extTextureFilterAnisotropic&&r.texParameterf(r.TEXTURE_2D,this.context.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this.context.extTextureFilterAnisotropicMax),t.size=e),t;let i=new jl(this.context,{width:e,height:e,data:null},r.RGBA,{premultiply:!1,useMipmap:!0});return i.bind(r.LINEAR,r.CLAMP_TO_EDGE,r.LINEAR_MIPMAP_LINEAR),this.context.extTextureFilterAnisotropic&&r.texParameterf(r.TEXTURE_2D,this.context.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,this.context.extTextureFilterAnisotropicMax),{texture:i,size:e}}bindRTT(e){let r=this.context.gl,t=e.size;if(!this._rttSharedFbo){let i=this.context.createFramebuffer(t,t,!0,!0),a=this.context.createRenderbuffer(r.DEPTH_STENCIL,t,t);i.depthAttachment.set(a),this._rttSharedFbo={fbo:i,depthRenderbuffer:a,size:t}}this._rttSharedFbo.size!==t&&(this.context.bindRenderbuffer.set(this._rttSharedFbo.depthRenderbuffer),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,t,t),this.context.bindRenderbuffer.set(null),this._rttSharedFbo.fbo.width=t,this._rttSharedFbo.fbo.height=t,this._rttSharedFbo.size=t),this._rttSharedFbo.fbo.colorAttachment.set(e.texture.texture),this.context.bindFramebuffer.set(this._rttSharedFbo.fbo.framebuffer)}releaseRTT(e){this._rttObjectRecyclePool.push(e)}isPatternMissing(e){if(!e)return!1;if(!e.from||!e.to)return!0;let r=this.patternAtlas.getPattern(e.from.toString()),t=this.patternAtlas.getPattern(e.to.toString());return!r||!t}useProgram(e,r,t=!1,i=[]){var a;this.cache||(this.cache={});let o=!!this.style.map.terrain,s=this.style.projection,l=t?rd.projectionMercator:s.shaderPreludeCode,n=t?OM:s.shaderDefine,u=`/${t?NM:s.shaderVariantName}`,c=r?r.cacheKey:"",f=this._showOverdrawInspector?"/overdraw":"",h=o?"/terrain":"",d=i?`/${i.join("/")}`:"",p=e+c+u+f+h+d;return(a=this.cache)[p]||(a[p]=new cO(this.context,rd[e],r,tN[e],this._showOverdrawInspector,o,l,n,i)),this.cache[p]}setCustomLayerDefaults(){this.context.setCustomLayerDefaults()}setBaseState(){let e=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(e.FUNC_ADD)}initDebugOverlayCanvas(){if(this.debugOverlayCanvas==null){this.debugOverlayCanvas=document.createElement("canvas"),this.debugOverlayCanvas.width=512,this.debugOverlayCanvas.height=512;let e=this.context.gl;this.debugOverlayTexture=new jl(this.context,this.debugOverlayCanvas,e.RGBA)}}destroy(){var e,r,t;if(this._tileTextures){for(let i in this._tileTextures){let a=this._tileTextures[i];if(a)for(let o of a)o.destroy()}this._tileTextures={}}for(let i of this._rttObjectRecyclePool)i.texture.destroy();if(this._rttObjectRecyclePool=[],this._rttSharedFbo){this._rttSharedFbo.fbo.colorAttachment.set(null),this._rttSharedFbo.fbo.depthAttachment.set(null);let i=this.context.gl;i.deleteRenderbuffer(this._rttSharedFbo.depthRenderbuffer),i.deleteFramebuffer(this._rttSharedFbo.fbo.framebuffer),this._rttSharedFbo=null}if((e=this.layerOpacityFbo)==null||e.destroy(),this.layerOpacityFbo=null,this.tileExtentBuffer&&this.tileExtentBuffer.destroy(),this.debugBuffer&&this.debugBuffer.destroy(),this.rasterBoundsBuffer&&this.rasterBoundsBuffer.destroy(),this.rasterBoundsBufferPosOnly&&this.rasterBoundsBufferPosOnly.destroy(),this.viewportBuffer&&this.viewportBuffer.destroy(),this.tileBorderIndexBuffer&&this.tileBorderIndexBuffer.destroy(),this.quadTriangleIndexBuffer&&this.quadTriangleIndexBuffer.destroy(),this.tileExtentMesh&&((r=this.tileExtentMesh.vertexBuffer)==null||r.destroy()),this.tileExtentMesh&&((t=this.tileExtentMesh.indexBuffer)==null||t.destroy()),this.debugOverlayTexture&&this.debugOverlayTexture.destroy(),this.context.projectionUniformBuffer.destroy(),this.context.terrainUniformBuffer.destroy(),this.context.frameUniformBuffer.destroy(),this.cache){for(let i in this.cache){let a=this.cache[i];a?.program&&this.context.gl.deleteProgram(a.program)}this.cache={}}this.context&&this.context.setDefault()}overLimit(){let{drawingBufferWidth:e,drawingBufferHeight:r}=this.context.gl;return this.width!==e||this.height!==r}},N2.MAX_TEXTURE_POOL_SIZE_PER_BUCKET=50,N2),sS=class extends Error{constructor(e,r){var t;super("WebGL2 is required to display this map. We are sorry, but it seems that your browser does not support WebGL2, a technology for rendering 3D graphics on the web. Read more on https://wiki.openstreetmap.org/wiki/This_map_requires_WebGL"),this.name="GPUInitializationError",this.requestedAttributes=e,this.statusMessage=(t=r?.statusMessage)!=null?t:null}},lS=class{constructor(e){this._getHashParams=()=>new URLSearchParams(window.location.hash.replace("#","")),this._getCurrentHash=()=>{var r;let t=this._getHashParams();return this._hashName?(t.get(this._hashName)||"").split("/"):((r=[...t.keys()][0])!=null?r:"").split("/")},this._onHashChange=()=>{let r=this._getCurrentHash();if(!this._isValidHash(r))return!1;let t=this._map.dragRotate.isEnabled()&&this._map.touchZoomRotate.isEnabled()?+(r[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+r[2],+r[1]],zoom:+r[0],bearing:t,pitch:+(r[4]||0)}),!0},this._updateHashUnthrottled=()=>{let r=window.location.href.replace(/(#.*)?$/,this.getHashString());window.history.replaceState(window.history.state,null,r)},this._removeHash=()=>{let r=this._getHashParams();if(this._hashName)r.delete(this._hashName);else{let o=Array.from(r.keys());o.length>0&&r.delete(o[0])}let t=decodeURIComponent(r.toString()).replace(/=&/g,"&").replace(/=$/g,""),i=t?`#${t}`:"",a=window.location.href.replace(/(#.+)?$/,i);a=a.replace("&&","&"),window.history.replaceState(window.history.state,null,a)},this._updateHash=qz(this._updateHashUnthrottled,300),this._hashName=e&&encodeURIComponent(e)}addTo(e){return this._map=e,addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this}remove(){return removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),clearTimeout(this._updateHash()),this._removeHash(),delete this._map,this}getHashString(e){let r=this._map.getCenter(),t=Math.round(this._map.getZoom()*100)/100,i=10**Math.ceil((t*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.round(r.lng*i)/i,o=Math.round(r.lat*i)/i,s=this._map.getBearing(),l=this._map.getPitch(),n="";if(n+=e?`/${a}/${o}/${t}`:`${t}/${o}/${a}`,(s||l)&&(n+=`/${Math.round(s*10)/10}`),l&&(n+=`/${Math.round(l)}`),this._hashName){let u=this._getHashParams();return u.set(this._hashName,n),`#${decodeURIComponent(u.toString()).replace(/=&/g,"&").replace(/=$/g,"")}`}return`#${n}`}_isValidHash(e){if(e.length<3||e.some(a=>isNaN(+a)))return!1;try{new An(+e[2],+e[1])}catch{return!1}let r=+e[0],t=+(e[3]||0),i=+(e[4]||0);return r>=this._map.getMinZoom()&&r<=this._map.getMaxZoom()&&t>=-180&&t<=180&&i>=this._map.getMinPitch()&&i<=this._map.getMaxPitch()}},$m={linearity:.3,easing:H4(0,0,.3,1)},YN=yn({deceleration:2500,maxSpeed:1400},$m),XN=yn({deceleration:20,maxSpeed:1400},$m),ZN=yn({deceleration:1e3,maxSpeed:360},$m),KN=yn({deceleration:1e3,maxSpeed:90},$m),JN=yn({deceleration:1e3,maxSpeed:360},$m),QN=class{constructor(e){this._map=e,this.clear()}clear(){this._inertiaBuffer=[]}record(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:hs(),settings:e})}_drainInertiaBuffer(){let e=this._inertiaBuffer,r=hs();for(;e.length>0&&r-e[0].time>160;)e.shift()}_getVelocityEntries(){let e=this._inertiaBuffer,r=hs()-60,t=Math.max(0,e.length-2);for(;t>0&&e[t-1].time>=r;)t--;return e.slice(t)}_onMoveEnd(e){this._drainInertiaBuffer();let r=this._getVelocityEntries();if(r.length<2){this.clear();return}let t={zoom:0,bearing:0,pitch:0,roll:0,pan:new Wr(0,0),pinchAround:void 0,around:void 0};for(let{settings:o}of r)o.around&&(t.around=o.around),o.pinchAround&&(t.pinchAround=o.pinchAround);for(let{settings:o}of r.slice(1))t.zoom+=o.zoomDelta||0,t.bearing+=o.bearingDelta||0,t.pitch+=o.pitchDelta||0,t.roll+=o.rollDelta||0,o.panDelta&&t.pan._add(o.panDelta);if(!t.pan.mag()&&!t.zoom&&!t.bearing&&!t.pitch&&!t.roll){this.clear();return}let i=hs()-r[0].time,a={};if(t.pan.mag()){let o=Gg(t.pan.mag(),i,yn({},YN,e||{})),s=t.pan.mult(o.amount/t.pan.mag()),l=this._map._camera.cameraHelper.handlePanInertia(s,this._map._camera.transform);a.center=l.easingCenter,a.offset=l.easingOffset,Vg(a,o)}if(t.zoom){let o=Gg(t.zoom,i,XN);a.zoom=Lf(this._map.getZoom()+o.amount,this._map.getZoomSnap(),o.amount),Vg(a,o)}if(t.bearing){let o=Gg(t.bearing,i,ZN);a.bearing=this._map.getBearing()+to(o.amount,-179,179),Vg(a,o)}if(t.pitch){let o=Gg(t.pitch,i,KN);a.pitch=this._map.getPitch()+o.amount,Vg(a,o)}if(t.roll){let o=Gg(t.roll,i,JN);a.roll=this._map.getRoll()+to(o.amount,-179,179),Vg(a,o)}if(a.zoom||a.bearing){let o=t.pinchAround===void 0?t.around:t.pinchAround;a.around=o?this._map.unproject(o):this._map.getCenter()}return this.clear(),yn(a,{noMoveStart:!0})}},e8=class{constructor(e,r){this._map=e,this._clickTolerance=r.clickTolerance}reset(){delete this._mousedownPos}wheel(e){return this._firePreventable(new gM(this._map,e))}mousedown(e,r){return this._mousedownPos=r,this._firePreventable(new df(e.type,this._map,e))}mouseup(e){this._map.fire(new df(e.type,this._map,e))}click(e,r){this._mousedownPos&&this._mousedownPos.dist(r)>=this._clickTolerance||this._map.fire(new df(e.type,this._map,e))}dblclick(e){return this._firePreventable(new df(e.type,this._map,e))}mouseover(e){this._map.fire(new df(e.type,this._map,e))}mouseout(e){this._map.fire(new df(e.type,this._map,e))}touchstart(e){return this._firePreventable(new jm(e.type,this._map,e))}touchmove(e){this._map.fire(new jm(e.type,this._map,e))}touchend(e){this._map.fire(new jm(e.type,this._map,e))}touchcancel(e){this._map.fire(new jm(e.type,this._map,e))}_firePreventable(e){if(this._map.fire(e),e.defaultPrevented)return{}}isEnabled(){return!0}isActive(){return!1}enable(){}disable(){}},t8=class{constructor(e){this._map=e}reset(){this._delayContextMenu=!1,this._ignoreContextMenu=!0,delete this._contextMenuEvent}mousemove(e){this._map.fire(new df(e.type,this._map,e))}mousedown(){this._delayContextMenu=!0,this._ignoreContextMenu=!1}mouseup(){this._delayContextMenu=!1,this._contextMenuEvent&&(this._map.fire(new df("contextmenu",this._map,this._contextMenuEvent)),delete this._contextMenuEvent)}contextmenu(e){this._delayContextMenu?this._contextMenuEvent=e:this._ignoreContextMenu||this._map.fire(new df(e.type,this._map,e)),this._map.listens("contextmenu")&&e.preventDefault()}isEnabled(){return!0}isActive(){return!1}enable(){}disable(){}},uS=class{constructor(e,r,t){this._map=e,this._tr=t,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=r.clickTolerance||1,r.boxZoom&&typeof r.boxZoom=="object"&&(this._boxZoomEnd=r.boxZoom.boxZoomEnd)}isEnabled(){return!!this._enabled}isActive(){return!!this._active}enable(){this.isEnabled()||(this._enabled=!0)}disable(){this.isEnabled()&&(this._enabled=!1)}mousedown(e,r){this.isEnabled()&&e.shiftKey&&e.button===0&&($n.disableDrag(),this._startPos=this._lastPos=r,this._active=!0)}mousemoveWindow(e,r){if(!this._active)return;let t=r;if(this._lastPos.equals(t)||!this._box&&t.dist(this._startPos)<this._clickTolerance)return;let i=this._startPos;this._lastPos=t,this._box||(this._box=$n.create("div","maplibregl-boxzoom",this._container),this._container.classList.add("maplibregl-crosshair"),this._fireEvent("boxzoomstart",e));let a=Math.min(i.x,t.x),o=Math.max(i.x,t.x),s=Math.min(i.y,t.y),l=Math.max(i.y,t.y);this._box.style.transform=`translate(${a}px,${s}px)`,this._box.style.width=`${o-a}px`,this._box.style.height=`${l-s}px`}mouseupWindow(e,r){if(!this._active||e.button!==0)return;let t=this._startPos,i=r;if(this.reset(),$n.suppressClick(),t.x===i.x&&t.y===i.y)this._fireEvent("boxzoomcancel",e);else{if(this._map.fire(new d2("boxzoomend",{originalEvent:e})),this._boxZoomEnd){this._boxZoomEnd(this._map,t,i,e);return}return{cameraAnimation:a=>a.fitScreenCoordinates(t,i,this._tr.bearing,{linear:!0})}}}keydown(e){this._active&&e.keyCode===27&&(this.reset(),this._fireEvent("boxzoomcancel",e))}reset(){this._active=!1,this._container.classList.remove("maplibregl-crosshair"),this._box&&(this._box=(this._box.remove(),null)),$n.enableDrag(),delete this._startPos,delete this._lastPos}_fireEvent(e,r){return this._map.fire(new d2(e,{originalEvent:r}))}},r8=class{constructor(e){this.reset(),this.numTouches=e.numTouches}reset(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted=!1}touchstart(e,r,t){(this.centroid||t.length>this.numTouches)&&(this.aborted=!0),!this.aborted&&(this.startTime===void 0&&(this.startTime=e.timeStamp),t.length===this.numTouches&&(this.centroid=mse(r),this.touches=fM(t,r)))}touchmove(e,r,t){if(this.aborted||!this.centroid)return;let i=fM(t,r);for(let a in this.touches){let o=this.touches[a],s=i[a];(!s||s.dist(o)>30)&&(this.aborted=!0)}}touchend(e,r,t){if((!this.centroid||e.timeStamp-this.startTime>500)&&(this.aborted=!0),t.length===0){let i=!this.aborted&&this.centroid;if(this.reset(),i)return i}}},j2=class{constructor(e){this.singleTap=new r8(e),this.numTaps=e.numTaps,this.reset()}reset(){this.lastTime=1/0,delete this.lastTap,this.count=0,this.singleTap.reset()}touchstart(e,r,t){this.singleTap.touchstart(e,r,t)}touchmove(e,r,t){this.singleTap.touchmove(e,r,t)}touchend(e,r,t){let i=this.singleTap.touchend(e,r,t);if(i){let a=e.timeStamp-this.lastTime<500,o=!this.lastTap||this.lastTap.dist(i)<30;if((!a||!o)&&this.reset(),this.count++,this.lastTime=e.timeStamp,this.lastTap=i,this.count===this.numTaps)return this.reset(),i}}},i8=class{constructor(e,r){this._tr=r,this._zoomIn=new j2({numTouches:1,numTaps:2}),this._zoomOut=new j2({numTouches:2,numTaps:1}),this.reset()}reset(){this._active=!1,this._zoomIn.reset(),this._zoomOut.reset()}touchstart(e,r,t){this._zoomIn.touchstart(e,r,t),this._zoomOut.touchstart(e,r,t)}touchmove(e,r,t){this._zoomIn.touchmove(e,r,t),this._zoomOut.touchmove(e,r,t)}touchend(e,r,t){let i=this._zoomIn.touchend(e,r,t),a=this._zoomOut.touchend(e,r,t),o=this._tr;if(i)return this._active=!0,e.preventDefault(),setTimeout(()=>this.reset(),0),{cameraAnimation:s=>s.easeTo({duration:300,zoom:Lf(o.zoom+1,s.getZoomSnap()),around:o.unproject(i)},{originalEvent:e})};if(a)return this._active=!0,e.preventDefault(),setTimeout(()=>this.reset(),0),{cameraAnimation:s=>s.easeTo({duration:300,zoom:Lf(o.zoom-1,s.getZoomSnap()),around:o.unproject(a)},{originalEvent:e})}}touchcancel(){this.reset()}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},Wm=class{constructor(e){this._enabled=!!e.enable,this._moveStateManager=e.moveStateManager,this._clickTolerance=e.clickTolerance||1,this._moveFunction=e.move,this._activateOnStart=!!e.activateOnStart,e.assignEvents(this),this.reset()}reset(e){this._active=!1,this._moved=!1,delete this._lastPoint,this._moveStateManager.endMove(e)}_move(...e){let r=this._moveFunction(...e);if(r.bearingDelta||r.pitchDelta||r.rollDelta||r.around||r.panDelta)return this._active=!0,r}dragStart(e,r){this.isEnabled()&&!this._lastPoint&&this._moveStateManager.isValidStartEvent(e)&&(this._moveStateManager.startMove(e),this._lastPoint=Array.isArray(r)?r[0]:r,this._activateOnStart&&this._lastPoint&&(this._active=!0))}dragMove(e,r){if(!this.isEnabled())return;let t=this._lastPoint;if(!t)return;if(e.preventDefault(),!this._moveStateManager.isValidMoveEvent(e)){this.reset(e);return}let i=Array.isArray(r)?r[0]:r;if(!(!this._moved&&i.dist(t)<this._clickTolerance))return this._moved=!0,this._lastPoint=i,this._move(t,i)}dragEnd(e){this.isEnabled()&&this._lastPoint&&this._moveStateManager.isValidEndEvent(e)&&(this._moved&&$n.suppressClick(),this.reset(e))}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}getClickTolerance(){return this._clickTolerance}},a8={0:1,2:2},Ym=class{constructor(e){this._correctEvent=e.checkCorrectEvent}startMove(e){this._eventButton=e.button}endMove(e){delete this._eventButton}isValidStartEvent(e){return this._correctEvent(e)}isValidMoveEvent(e){return!gse(e,this._eventButton)}isValidEndEvent(e){return e.button===this._eventButton}},n8=class{constructor(){this._firstTouch=void 0}_isOneFingerTouch(e){return e.targetTouches.length===1}_isSameTouchEvent(e){return e.targetTouches[0].identifier===this._firstTouch}startMove(e){this._firstTouch=e.targetTouches[0].identifier}endMove(e){delete this._firstTouch}isValidStartEvent(e){return this._isOneFingerTouch(e)}isValidMoveEvent(e){return this._isOneFingerTouch(e)&&this._isSameTouchEvent(e)}isValidEndEvent(e){return this._isOneFingerTouch(e)&&this._isSameTouchEvent(e)}},o8=class{constructor(e=new Ym({checkCorrectEvent:()=>!0}),r=new n8){this.mouseMoveStateManager=e,this.oneFingerTouchMoveStateManager=r}_executeRelevantHandler(e,r,t){if(e instanceof MouseEvent)return r(e);if(typeof TouchEvent<"u"&&e instanceof TouchEvent)return t(e)}startMove(e){this._executeRelevantHandler(e,r=>{this.mouseMoveStateManager.startMove(r)},r=>{this.oneFingerTouchMoveStateManager.startMove(r)})}endMove(e){this._executeRelevantHandler(e,r=>{this.mouseMoveStateManager.endMove(r)},r=>{this.oneFingerTouchMoveStateManager.endMove(r)})}isValidStartEvent(e){return!!this._executeRelevantHandler(e,r=>this.mouseMoveStateManager.isValidStartEvent(r),r=>this.oneFingerTouchMoveStateManager.isValidStartEvent(r))}isValidMoveEvent(e){return!!this._executeRelevantHandler(e,r=>this.mouseMoveStateManager.isValidMoveEvent(r),r=>this.oneFingerTouchMoveStateManager.isValidMoveEvent(r))}isValidEndEvent(e){return!!this._executeRelevantHandler(e,r=>this.mouseMoveStateManager.isValidEndEvent(r),r=>this.oneFingerTouchMoveStateManager.isValidEndEvent(r))}},iy=e=>{e.mousedown=e.dragStart,e.mousemoveWindow=e.dragMove,e.mouseup=e.dragEnd,e.contextmenu=r=>{r.preventDefault()}},s8=class{constructor(e,r){this._clickTolerance=e.clickTolerance||1,this._map=r,this.reset()}reset(){this._active=!1,this._touches={},this._sum=new Wr(0,0)}_shouldBePrevented(e){return e<(this._map.cooperativeGestures.isEnabled()?2:1)}touchstart(e,r,t){return this._calculateTransform(e,r,t)}touchmove(e,r,t){if(this._active){if(this._shouldBePrevented(t.length)){this._map.cooperativeGestures.notifyGestureBlocked("touch_pan",e);return}return e.preventDefault(),this._calculateTransform(e,r,t)}}touchend(e,r,t){this._calculateTransform(e,r,t),this._active&&this._shouldBePrevented(t.length)&&this.reset()}touchcancel(){this.reset()}_calculateTransform(e,r,t){t.length>0&&(this._active=!0);let i=fM(t,r),a=new Wr(0,0),o=new Wr(0,0),s=0;for(let n in i){let u=i[n],c=this._touches[n];c&&(a._add(u),o._add(u.sub(c)),s++,i[n]=u)}if(this._touches=i,this._shouldBePrevented(s)||!o.mag())return;let l=o.div(s);if(this._sum._add(l),!(this._sum.mag()<this._clickTolerance))return{around:a.div(s),panDelta:l}}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},U2=class{constructor(){this.reset()}reset(){this._active=!1,delete this._firstTwoTouches}touchstart(e,r,t){this._firstTwoTouches||t.length<2||(this._firstTwoTouches=[t[0].identifier,t[1].identifier],this._start([r[0],r[1]]))}touchmove(e,r,t){if(!this._firstTwoTouches)return;e.preventDefault();let[i,a]=this._firstTwoTouches,o=u2(t,r,i),s=u2(t,r,a);if(!o||!s)return;let l=this._aroundCenter?null:o.add(s).div(2);return this._move([o,s],l,e)}touchend(e,r,t){if(!this._firstTwoTouches)return;let[i,a]=this._firstTwoTouches,o=u2(t,r,i),s=u2(t,r,a);o&&s||(this._active&&$n.suppressClick(),this.reset())}touchcancel(){this.reset()}enable(e){this._enabled=!0,this._aroundCenter=!!e&&e.around==="center"}disable(){this._enabled=!1,this.reset()}isEnabled(){return!!this._enabled}isActive(){return!!this._active}},cS=.1,fS=class extends U2{constructor(){super(),this._zoomRate=1,this._zoomThreshold=cS}setZoomRate(e){this._zoomRate=e??1}setZoomThreshold(e){this._zoomThreshold=e??cS}reset(){super.reset(),delete this._distance,delete this._startDistance}_start(e){this._startDistance=this._distance=e[0].dist(e[1])}_move(e,r){let t=this._distance;if(this._distance=e[0].dist(e[1]),!(!this._active&&Math.abs(Vz(this._distance,this._startDistance))<this._zoomThreshold))return this._active=!0,{zoomDelta:Vz(this._distance,t)*this._zoomRate,pinchAround:r}}},hS=class extends U2{reset(){super.reset(),delete this._minDiameter,delete this._startVector,delete this._vector}_start(e){this._startVector=this._vector=e[0].sub(e[1]),this._minDiameter=e[0].dist(e[1])}_move(e,r,t){let i=this._vector;if(this._vector=e[0].sub(e[1]),this._active||!this._isBelowThreshold(this._vector))return this._active=!0,{bearingDelta:Gz(this._vector,i),pinchAround:r}}_isBelowThreshold(e){this._minDiameter=Math.min(this._minDiameter,e.mag());let r=25/(Math.PI*this._minDiameter)*360,t=Gz(e,this._startVector);return Math.abs(t)<r}},dS=class extends U2{constructor(e){super(),this._currentTouchCount=0,this._map=e}reset(){super.reset(),this._valid=void 0,delete this._firstMove,delete this._lastPoints}touchstart(e,r,t){super.touchstart(e,r,t),this._currentTouchCount=t.length}_start(e){this._lastPoints=e,hM(e[0].sub(e[1]))&&(this._valid=!1)}_move(e,r,t){if(this._map.cooperativeGestures.isEnabled()&&this._currentTouchCount<3)return;let i=e[0].sub(this._lastPoints[0]),a=e[1].sub(this._lastPoints[1]);if(this._valid=this.gestureBeginsVertically(i,a,t.timeStamp),this._valid)return this._lastPoints=e,this._active=!0,{pitchDelta:(i.y+a.y)/2*-.5}}gestureBeginsVertically(e,r,t){if(this._valid!==void 0)return this._valid;let i=e.mag()>=2,a=r.mag()>=2;if(!i&&!a)return;if(!i||!a)return this._firstMove===void 0&&(this._firstMove=t),t-this._firstMove<100&&void 0;let o=e.y>0==r.y>0;return hM(e)&&hM(r)&&o}},l8={panStep:100,bearingStep:15,pitchStep:10},pS=class{constructor(e,r){this._tr=r;let t=l8;this._panStep=t.panStep,this._bearingStep=t.bearingStep,this._pitchStep=t.pitchStep,this._rotationDisabled=!1}reset(){this._active=!1}keydown(e){if(e.altKey||e.ctrlKey||e.metaKey)return;let r=0,t=0,i=0,a=0,o=0;switch(e.keyCode){case 61:case 107:case 171:case 187:r=1;break;case 189:case 109:case 173:r=-1;break;case 37:e.shiftKey?t=-1:(e.preventDefault(),a=-1);break;case 39:e.shiftKey?t=1:(e.preventDefault(),a=1);break;case 38:e.shiftKey?i=1:(e.preventDefault(),o=-1);break;case 40:e.shiftKey?i=-1:(e.preventDefault(),o=1);break;default:return}return this._rotationDisabled&&(t=0,i=0),{cameraAnimation:s=>{let l=this._tr;s.easeTo({duration:300,easeId:"keyboardHandler",easing:wse,zoom:r?Lf(l.zoom+r*(e.shiftKey?2:1),s.getZoomSnap()):l.zoom,bearing:l.bearing+t*this._bearingStep,pitch:l.pitch+i*this._pitchStep,offset:[-a*this._panStep,-o*this._panStep],center:l.center},{originalEvent:e})}}}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}disableRotation(){this._rotationDisabled=!0}enableRotation(){this._rotationDisabled=!1}},vS=4.000244140625,mS=class{constructor(e,r,t){this._onTimeout=i=>{this._type="wheel",this._delta-=this._lastValue,this._active||this._start(i)},this._map=e,this._tr=t,this._triggerRenderFrame=r,this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=.0022222222222222222}setZoomRate(e){this._defaultZoomRate=e}setWheelZoomRate(e){this._wheelZoomRate=e}isEnabled(){return!!this._enabled}isActive(){return!!this._active||this._finishTimeout!==void 0}isZooming(){return!!this._zooming}enable(e){this.isEnabled()||(this._enabled=!0,this._aroundCenter=!!e&&e.around==="center")}disable(){this.isEnabled()&&(this._enabled=!1)}_shouldBePrevented(e){return this._map.cooperativeGestures.isEnabled()?!(e.ctrlKey||this._map.cooperativeGestures.isBypassed(e)):!1}wheel(e){if(!this.isEnabled())return;if(this._shouldBePrevented(e)){this._map.cooperativeGestures.notifyGestureBlocked("wheel_zoom",e);return}let r=e.deltaMode===WheelEvent.DOM_DELTA_LINE?e.deltaY*40:e.deltaY,t=hs(),i=t-(this._lastWheelEventTime||0);this._lastWheelEventTime=t,r!==0&&r%vS==0?this._type="wheel":r!==0&&Math.abs(r)<4?this._type="trackpad":i>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(i*r)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this._active||this._start(e)),e.preventDefault()}_start(e){if(!this._delta)return;this._needsRerender=!1,this._active=!0,this.isZooming()||(this._zooming=!0),this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout);let r=$n.mousePos(this._map.getCanvas(),e),t=this._tr;this._aroundPoint=this._aroundCenter?t.transform.locationToScreenPoint(An.convert(t.center)):r,this._needsRerender||(this._needsRerender=!0,this._triggerRenderFrame())}renderFrame(){if(!this._needsRerender||(this._needsRerender=!1,!this.isActive()))return;let e=this._tr.transform;if(typeof this._lastExpectedZoom=="number"){let s=e.zoom-this._lastExpectedZoom;typeof this._startZoom=="number"&&(this._startZoom+=s),typeof this._targetZoom=="number"&&(this._targetZoom+=s)}if(this._delta!==0){let s=this._type==="wheel"&&Math.abs(this._delta)>vS?this._wheelZoomRate:this._defaultZoomRate,l=2/(1+Math.exp(-Math.abs(this._delta*s)));this._delta<0&&l!==0&&(l=1/l);let n=typeof this._targetZoom=="number"?Vc(this._targetZoom):e.scale,u=e.applyConstrain(e.getCameraLngLat(),Ku(n*l)).zoom,c=this._map.getZoomSnap();if(this._type==="wheel"&&c>0){let f=Lf(e.zoom,c);this._targetZoom=Lf(u,c,u-f)}else this._targetZoom=u;this._type==="wheel"&&(this._startZoom=e.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}let r=typeof this._targetZoom=="number"?this._targetZoom:e.zoom,t=this._startZoom,i=this._easing,a=!1,o;if(this._type==="wheel"&&t&&i){let s=hs()-this._lastWheelEventTime,l=Math.min((s+5)/200,1),n=i(l);o=Zs.number(t,r,n),l<1?this._needsRerender=!0:a=!0}else o=r,a=!0;return this._active=!0,a&&(this._active=!1,this._finishTimeout=setTimeout(()=>{this._zooming=!1,this._triggerRenderFrame(),delete this._targetZoom,delete this._lastExpectedZoom,delete this._finishTimeout},200)),this._lastExpectedZoom=o,{noInertia:!0,needsRenderFrame:!a,zoomDelta:o-e.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}_smoothOutEasing(e){let r=Sx;if(this._prevEase){let t=this._prevEase,i=(hs()-t.start)/t.duration,a=t.easing(i+.01)-t.easing(i),o=.27/Math.sqrt(a*a+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=H4(o,s,.25,1)}return this._prevEase={start:hs(),duration:e,easing:r},r}reset(){this._active=!1,this._zooming=!1,delete this._targetZoom,delete this._lastExpectedZoom,this._finishTimeout&&(clearTimeout(this._finishTimeout),delete this._finishTimeout)}},gS=class{constructor(e,r){this._clickZoom=e,this._tapZoom=r}enable(){this._clickZoom.enable(),this._tapZoom.enable()}disable(){this._clickZoom.disable(),this._tapZoom.disable()}isEnabled(){return this._clickZoom.isEnabled()&&this._tapZoom.isEnabled()}isActive(){return this._clickZoom.isActive()||this._tapZoom.isActive()}},u8=class{constructor(e,r){this._tr=r,this.reset()}reset(){this._active=!1}dblclick(e,r){return e.preventDefault(),{cameraAnimation:t=>{t.easeTo({duration:300,zoom:Lf(this._tr.zoom+(e.shiftKey?-1:1),t.getZoomSnap()),around:this._tr.unproject(r)},{originalEvent:e})}}}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},c8=class{constructor(){this._tap=new j2({numTouches:1,numTaps:1}),this._zoomRate=1,this.reset()}setZoomRate(e){this._zoomRate=e??1}reset(){this._active=!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,delete this._tapPoint,this._tap.reset()}touchstart(e,r,t){if(!this._swipePoint)if(!this._tapTime)this._tap.touchstart(e,r,t);else{let i=r[0],a=e.timeStamp-this._tapTime<500,o=this._tapPoint.dist(i)<30;!a||!o?this.reset():t.length>0&&(this._swipePoint=i,this._swipeTouch=t[0].identifier)}}touchmove(e,r,t){if(!this._tapTime)this._tap.touchmove(e,r,t);else if(this._swipePoint){if(t[0].identifier!==this._swipeTouch)return;let i=r[0],a=i.y-this._swipePoint.y;return this._swipePoint=i,e.preventDefault(),this._active=!0,{zoomDelta:a/128*this._zoomRate}}}touchend(e,r,t){if(this._tapTime)this._swipePoint&&t.length===0&&this.reset();else{let i=this._tap.touchend(e,r,t);i&&(this._tapTime=e.timeStamp,this._tapPoint=i)}}touchcancel(){this.reset()}enable(){this._enabled=!0}disable(){this._enabled=!1,this.reset()}isEnabled(){return this._enabled}isActive(){return this._active}},yS=class{constructor(e,r,t){this._el=e,this._mousePan=r,this._touchPan=t}enable(e){this._inertiaOptions=e||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add("maplibregl-touch-drag-pan")}disable(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove("maplibregl-touch-drag-pan")}isEnabled(){return this._mousePan.isEnabled()&&this._touchPan.isEnabled()}isActive(){return this._mousePan.isActive()||this._touchPan.isActive()}},_S=class{constructor(e,r,t,i){this._pitchWithRotate=e.pitchWithRotate,this._rollEnabled=e.rollEnabled,this._mouseRotate=r,this._mousePitch=t,this._mouseRoll=i}enable(){this._mouseRotate.enable(),this._pitchWithRotate&&this._mousePitch.enable(),this._rollEnabled&&this._mouseRoll.enable()}disable(){this._mouseRotate.disable(),this._mousePitch.disable(),this._mouseRoll.disable()}isEnabled(){return this._mouseRotate.isEnabled()&&(!this._pitchWithRotate||this._mousePitch.isEnabled())&&(!this._rollEnabled||this._mouseRoll.isEnabled())}isActive(){return this._mouseRotate.isActive()||this._mousePitch.isActive()||this._mouseRoll.isActive()}},xS=class{constructor(e,r,t,i){this._el=e,this._touchZoom=r,this._touchRotate=t,this._tapDragZoom=i,this._rotationDisabled=!1,this._enabled=!0}enable(e){this._touchZoom.enable(e),this._rotationDisabled||this._touchRotate.enable(e),this._tapDragZoom.enable(),this._el.classList.add("maplibregl-touch-zoom-rotate")}disable(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove("maplibregl-touch-zoom-rotate")}isEnabled(){return this._touchZoom.isEnabled()&&(this._rotationDisabled||this._touchRotate.isEnabled())&&this._tapDragZoom.isEnabled()}isActive(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()}setZoomRate(e){this._touchZoom.setZoomRate(e),this._tapDragZoom.setZoomRate(e)}setZoomThreshold(e){this._touchZoom.setZoomThreshold(e)}disableRotation(){this._rotationDisabled=!0,this._touchRotate.disable()}enableRotation(){this._rotationDisabled=!1,this._touchZoom.isEnabled()&&this._touchRotate.enable()}},bS=class{constructor(e,r){this._bypassKey=navigator.userAgent.includes("Mac")?"metaKey":"ctrlKey",this._map=e,this._options=r,this._enabled=!1}isActive(){return!1}reset(){}_setupUI(){if(this._container)return;let e=this._map.getCanvasContainer();e.classList.add("maplibregl-cooperative-gestures"),this._container=$n.create("div","maplibregl-cooperative-gesture-screen",e);let r=this._map._getUIString("CooperativeGesturesHandler.WindowsHelpText");this._bypassKey==="metaKey"&&(r=this._map._getUIString("CooperativeGesturesHandler.MacHelpText"));let t=this._map._getUIString("CooperativeGesturesHandler.MobileHelpText"),i=document.createElement("div");i.className="maplibregl-desktop-message",i.textContent=r,this._container.appendChild(i);let a=document.createElement("div");a.className="maplibregl-mobile-message",a.textContent=t,this._container.appendChild(a),this._container.setAttribute("aria-hidden","true")}_destroyUI(){this._container&&(this._container.remove(),this._map.getCanvasContainer().classList.remove("maplibregl-cooperative-gestures")),delete this._container}enable(){this._setupUI(),this._enabled=!0}disable(){this._enabled=!1,this._destroyUI()}isEnabled(){return this._enabled}isBypassed(e){return e[this._bypassKey]}notifyGestureBlocked(e,r){this._enabled&&(this._map.fire(new iu("cooperativegestureprevented",{gestureType:e,originalEvent:r})),this._container.classList.add("maplibregl-show"),setTimeout(()=>{this._container.classList.remove("maplibregl-show")},100))}},f8=class{constructor(e){this._camera=e}get transform(){return this._camera._requestedCameraState||this._camera.transform}get center(){return{lng:this.transform.center.lng,lat:this.transform.center.lat}}get zoom(){return this.transform.zoom}get pitch(){return this.transform.pitch}get bearing(){return this.transform.bearing}unproject(e){return this.transform.screenPointToLocation(Wr.convert(e),this._camera.terrain)}},ay=e=>e.zoom||e.drag||e.roll||e.pitch||e.rotate,h8=class extends hf{},d8=class{get _ownerDocument(){var e;return((e=this._el)==null?void 0:e.ownerDocument)||document}get _ownerWindow(){var e,r;return((r=(e=this._el)==null?void 0:e.ownerDocument)==null?void 0:r.defaultView)||window}constructor(e,r,t){this._terrainGestureAnchorElevation=null,this.handleWindowEvent=a=>{this.handleEvent(a,`${a.type}Window`)},this.handleEvent=(a,o)=>{if(a.type==="blur"){this.stop(!0);return}this._updatingCamera=!0;let s=a.type==="renderFrame"?void 0:a,l={needsRenderFrame:!1},n={},u={};for(let{handlerName:h,handler:d,allowed:p}of this._handlers){if(!d.isEnabled())continue;let g;if(this._blockedByActive(u,p,h))d.reset();else if(d[o||a.type]){if(hJ(a,o||a.type)){let m=$n.mousePos(this._map.getCanvas(),a);g=d[o||a.type](a,m)}else if(fJ(a,o||a.type)){let m=a.touches,y=this._getMapTouches(m),_=$n.touchPos(this._map.getCanvas(),y);g=d[o||a.type](a,_,y)}else dJ(o||a.type)||(g=d[o||a.type](a));this.mergeHandlerResult(l,n,g,h,s),g?.needsRenderFrame&&this._triggerRenderFrame()}(g||d.isActive())&&(u[h]=d)}let c={};for(let h in this._previousActiveHandlers)u[h]||(c[h]=s);this._previousActiveHandlers=u,(Object.keys(c).length||dM(l))&&(this._changes.push([l,n,c]),this._triggerRenderFrame()),(Object.keys(u).length||dM(l))&&this._camera.stop(!0),this._updatingCamera=!1;let{cameraAnimation:f}=l;f&&(this._inertia.clear(),this._fireEvents({},{},!0),this._changes=[],f(this._map))},this._map=e,this._camera=r,this._transformProvider=new f8(this._camera),this._el=this._map.getCanvasContainer(),this._handlers=[],this._handlersById={},this._changes=[],this._inertia=new QN(e),this._bearingSnap=t.bearingSnap,this._previousActiveHandlers={},this._eventsInProgress={},this._addDefaultHandlers(t);let i=this._el;this._listeners=[[i,"touchstart",{passive:!0}],[i,"touchmove",{passive:!1}],[i,"touchend",void 0],[i,"touchcancel",void 0],[i,"mousedown",void 0],[i,"mousemove",void 0],[i,"mouseup",void 0],[this._ownerDocument,"mousemove",{capture:!0}],[this._ownerDocument,"mouseup",void 0],[i,"mouseover",void 0],[i,"mouseout",void 0],[i,"dblclick",void 0],[i,"click",void 0],[i,"keydown",{capture:!1}],[i,"keyup",void 0],[i,"wheel",{passive:!1}],[i,"contextmenu",void 0],[this._ownerWindow,"blur",void 0]];for(let[a,o,s]of this._listeners)a.addEventListener(o,a===this._ownerDocument?this.handleWindowEvent:this.handleEvent,s)}destroy(){for(let[e,r,t]of this._listeners)e.removeEventListener(r,e===this._ownerDocument?this.handleWindowEvent:this.handleEvent,t)}_addDefaultHandlers(e){let r=this._map,t=r.getCanvasContainer();this._add("mapEvent",new e8(r,e));let i=r.boxZoom=new uS(r,e,this._transformProvider);this._add("boxZoom",i),e.interactive&&e.boxZoom&&i.enable();let a=r.cooperativeGestures=new bS(r,e.cooperativeGestures);this._add("cooperativeGestures",a),e.cooperativeGestures&&a.enable();let o=new i8(r,this._transformProvider),s=new u8(r,this._transformProvider);r.doubleClickZoom=new gS(s,o),this._add("tapZoom",o),this._add("clickZoom",s),e.interactive&&e.doubleClickZoom&&r.doubleClickZoom.enable();let l=new c8;this._add("tapDragZoom",l);let n=r.touchPitch=new dS(r);this._add("touchPitch",n),e.interactive&&e.touchPitch&&r.touchPitch.enable(e.touchPitch);let u=()=>r.project(r.getCenter()),c=_se(e,u),f=xse(e),h=bse(e,u);r.dragRotate=new _S(e,c,f,h),this._add("mouseRotate",c,["mousePitch"]),this._add("mousePitch",f,["mouseRotate","mouseRoll"]),this._add("mouseRoll",h,["mousePitch"]),e.interactive&&e.dragRotate&&r.dragRotate.enable();let d=yse(e),p=new s8(e,r);r.dragPan=new yS(t,d,p),this._add("mousePan",d),this._add("touchPan",p,["touchZoom","touchRotate"]),e.interactive&&e.dragPan&&r.dragPan.enable(e.dragPan);let g=new hS,m=new fS;r.touchZoomRotate=new xS(t,m,g,l),this._add("touchRotate",g,["touchPan","touchZoom"]),this._add("touchZoom",m,["touchPan","touchRotate"]),e.interactive&&e.touchZoomRotate&&r.touchZoomRotate.enable(e.touchZoomRotate),this._add("blockableMapEvent",new t8(r));let y=r.scrollZoom=new mS(r,()=>this._triggerRenderFrame(),this._transformProvider);this._add("scrollZoom",y,["mousePan"]),e.interactive&&e.scrollZoom&&r.scrollZoom.enable(e.scrollZoom);let _=r.keyboard=new pS(r,this._transformProvider);this._add("keyboard",_),e.interactive&&e.keyboard&&r.keyboard.enable()}_add(e,r,t){this._handlers.push({handlerName:e,handler:r,allowed:t}),this._handlersById[e]=r}stop(e){if(!this._updatingCamera){for(let{handler:r}of this._handlers)r.reset();this._inertia.clear(),this._fireEvents({},{},e),this._changes=[]}}isActive(){for(let{handler:e}of this._handlers)if(e.isActive())return!0;return!1}isZooming(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()}isRotating(){return!!this._eventsInProgress.rotate}isMoving(){return!!ay(this._eventsInProgress)||this.isZooming()}_blockedByActive(e,r,t){for(let i in e)if(i!==t&&!r?.includes(i))return!0;return!1}_getMapTouches(e){let r=[];for(let t of e){let i=t.target;this._el.contains(i)&&r.push(t)}return r}mergeHandlerResult(e,r,t,i,a){if(!t)return;yn(e,t);let o={handlerName:i,originalEvent:t.originalEvent||a};t.zoomDelta!==void 0&&(r.zoom=o),t.panDelta!==void 0&&(r.drag=o),t.rollDelta!==void 0&&(r.roll=o),t.pitchDelta!==void 0&&(r.pitch=o),t.bearingDelta!==void 0&&(r.rotate=o)}_applyChanges(){let e={},r={},t={};for(let[i,a,o]of this._changes)i.panDelta&&(e.panDelta=(e.panDelta||new Wr(0,0))._add(i.panDelta)),i.zoomDelta&&(e.zoomDelta=(e.zoomDelta||0)+i.zoomDelta),i.bearingDelta&&(e.bearingDelta=(e.bearingDelta||0)+i.bearingDelta),i.pitchDelta&&(e.pitchDelta=(e.pitchDelta||0)+i.pitchDelta),i.rollDelta&&(e.rollDelta=(e.rollDelta||0)+i.rollDelta),i.around!==void 0&&(e.around=i.around),i.pinchAround!==void 0&&(e.pinchAround=i.pinchAround),i.noInertia&&(e.noInertia=i.noInertia),yn(r,a),yn(t,o);this._updateMapTransform(e,r,t),this._changes=[]}_updateMapTransform(e,r,t){let i=this._map,a=this._camera.getTransformForUpdate(),o=i.terrain;if(!dM(e)&&!(o&&this._terrainMovement)){this._fireEvents(r,t,!0);return}this._camera.stop(!0);let{panDelta:s,zoomDelta:l,bearingDelta:n,pitchDelta:u,rollDelta:c}=e,{around:f,aroundOnSurface:h}=this._resolveAround(e,o,a),d=o?this._terrainGestureElevation(o,f,h,a,r):void 0,p={panDelta:s,zoomDelta:l,rollDelta:c,pitchDelta:u,bearingDelta:n,around:f,aroundElevation:d};this._camera.cameraHelper.useGlobeControls&&!a.isPointOnMapSurface(f)&&(f=a.centerPoint);let g=this._computePreZoomAroundLoc(a,f,s,d);this._handleMapControls({terrain:o,tr:a,deltasForHelper:p,preZoomAroundLoc:g,combinedEventsInProgress:r,panDelta:s}),this._camera.applyUpdatedTransform(a),this._map._update(),e.noInertia||this._inertia.record(e),this._fireEvents(r,t,!0)}_resolveAround(e,r,t){let i=e.pinchAround===void 0?e.around:e.pinchAround;return i||(i=this._camera.transform.centerPoint),r&&!t.isPointOnMapSurface(i)?{around:t.centerPoint,aroundOnSurface:!1}:{around:i,aroundOnSurface:!0}}_terrainGestureElevation(e,r,t,i,a){if(!t)return;if(!this._terrainMovement&&(a.drag||a.zoom)){let s=i.screenTerrainPointToMercatorCoordinate(r,e);this._terrainGestureAnchorElevation=s?s.z:null}if(this._terrainGestureAnchorElevation===null)return;let o=this._terrainGestureAnchorElevation;if(!(r.distSqr(i.centerPoint)<.01)&&!(o-i.elevation>=.9*(i.getCameraAltitude()-i.elevation)))return o}_computePreZoomAroundLoc(e,r,t,i){if(r.distSqr(e.centerPoint)<.01)return e.center;let a=t?r.sub(t):r;return i===void 0?e.screenPointToLocation(a):e.screenPointToLocationAtElevation(a,i)}_handleMapControls({terrain:e,tr:r,deltasForHelper:t,preZoomAroundLoc:i,combinedEventsInProgress:a,panDelta:o}){let s=this._camera.cameraHelper;if(s.handleMapControlsRollPitchBearingZoom(t,r),!e){s.handleMapControlsPan(t,r,i);return}if(s.useGlobeControls){!this._terrainMovement&&(a.drag||a.zoom)&&(this._terrainMovement=!0,this._camera.elevationFreeze=!0),s.handleMapControlsPan(t,r,i);return}if(!this._terrainMovement&&(a.drag||a.zoom)){this._terrainMovement=!0,this._camera.elevationFreeze=!0,s.handleMapControlsPan(t,r,i);return}if(t.aroundElevation===void 0&&a.drag&&this._terrainMovement&&o){r.setCenter(r.screenPointToLocation(r.centerPoint.sub(o)));return}s.handleMapControlsPan(t,r,i)}_fireEvents(e,r,t){let i=ay(this._eventsInProgress),a=ay(e),o={};for(let c in e){let{originalEvent:f}=e[c];this._eventsInProgress[c]||(o[`${c}start`]=f),this._eventsInProgress[c]=e[c]}!i&&a&&this._fireEvent("movestart",a.originalEvent);for(let c in o)this._fireEvent(c,o[c]);a&&this._fireEvent("move",a.originalEvent);for(let c in e){let{originalEvent:f}=e[c];this._fireEvent(c,f)}let s={},l;for(let c in this._eventsInProgress){let{handlerName:f,originalEvent:h}=this._eventsInProgress[c];this._handlersById[f].isActive()||(delete this._eventsInProgress[c],l=r[f]||h,s[`${c}end`]=l)}for(let c in s)this._fireEvent(c,s[c]);let n=ay(this._eventsInProgress),u=(i||a)&&!n;if(u&&this._terrainMovement){this._camera.elevationFreeze=!1,this._terrainMovement=!1,this._terrainGestureAnchorElevation=null;let c=this._camera.getTransformForUpdate();this._map.getCenterClampedToGround()&&c.recalculateZoomAndCenter(this._map.terrain),this._camera.applyUpdatedTransform(c)}if(t&&u){this._updatingCamera=!0;let c=this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),f=h=>h!==0&&-this._bearingSnap<h&&h<this._bearingSnap;c&&(c.essential||!yc.prefersReducedMotion)?(f(c.bearing||this._map.getBearing())&&(c.bearing=0),c.freezeElevation=!0,this._map.easeTo(c,{originalEvent:l})):(this._map.fire(new kn("moveend",{originalEvent:l})),f(this._map.getBearing())&&this._map.resetNorth()),this._updatingCamera=!1}}_fireEvent(e,r){this._map.fire(new kn(e,r?{originalEvent:r}:{}))}_requestFrame(){return this._map.triggerRepaint(),this._map._renderTaskQueue.add(e=>{delete this._frameId,this.handleEvent(new h8("renderFrame",{timeStamp:e})),this._applyChanges()})}_triggerRenderFrame(){this._frameId===void 0&&(this._frameId=this._requestFrame())}},p8=class extends Nl{constructor(e){var r,t,i;super(),this._renderFrameCallback=()=>{let a=Math.min((hs()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(a)),a<1&&this._easeFrameId?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},this.transform=new Kg,this.cameraHelper=new Jg,e.minZoom!==void 0&&this.transform.setMinZoom(e.minZoom),e.maxZoom!==void 0&&this.transform.setMaxZoom(e.maxZoom),e.minPitch!==void 0&&this.transform.setMinPitch(e.minPitch),e.maxPitch!==void 0&&this.transform.setMaxPitch(e.maxPitch),e.renderWorldCopies!==void 0&&this.transform.setRenderWorldCopies(e.renderWorldCopies),e.transformConstrain!==null&&this.transform.setConstrainOverride(e.transformConstrain),this._moving=!1,this._zooming=!1,this._bearingSnap=e.bearingSnap,this._zoomSnap=e.zoomSnap,this._requestRenderFrame=e.requestRenderFrame,this._cancelRenderFrame=e.cancelRenderFrame,this.terrain=e.terrain,this._centerClampedToGround=(r=e.centerClampedToGround)!=null?r:!0,this.transformCameraUpdate=(t=e.transformCameraUpdate)!=null?t:null,this._stopHandlers=(i=e.stopHandlers)!=null?i:(()=>{}),this.on("moveend",()=>{delete this._requestedCameraState})}migrateProjection(e,r){if(e.apply(this.transform,!0),this.transform=e,this.cameraHelper=r,this._requestedCameraState){let t=e.clone();t.apply(this._requestedCameraState,!0),this._requestedCameraState=t}}getCenter(){return new An(this.transform.center.lng,this.transform.center.lat)}setCenter(e,r){return this.jumpTo({center:e},r)}getCenterElevation(){return this.transform.elevation}setCenterElevation(e,r){return this.jumpTo({elevation:e},r),this}getCenterClampedToGround(){return this._centerClampedToGround}setCenterClampedToGround(e){this._centerClampedToGround=e}panBy(e,r,t){return e=Wr.convert(e).mult(-1),this.panTo(this.transform.center,yn({offset:e},r),t)}panTo(e,r,t){return this.easeTo(yn({center:e},r),t)}getZoom(){return this.transform.zoom}setZoom(e,r){return this.jumpTo({zoom:e},r),this}zoomTo(e,r,t){return this.easeTo(yn({zoom:e},r),t)}zoomIn(e,r){return this.zoomTo(Lf(this.getZoom()+1,this._zoomSnap),e,r),this}zoomOut(e,r){return this.zoomTo(Lf(this.getZoom()-1,this._zoomSnap),e,r),this}getVerticalFieldOfView(){return this.transform.fov}setVerticalFieldOfView(e,r){return e!=this.transform.fov&&(this.transform.setFov(e),this.fire(new kn("movestart",r)).fire(new kn("move",r)).fire(new kn("moveend",r))),this}getBearing(){return this.transform.bearing}setZoomSnap(e){return this._zoomSnap=e,this}getZoomSnap(){return this._zoomSnap}setBearing(e,r){return this.jumpTo({bearing:e},r),this}getPadding(){return this.transform.padding}setPadding(e,r){return this.jumpTo({padding:e},r),this}rotateTo(e,r,t){return this.easeTo(yn({bearing:e},r),t)}resetNorth(e,r){return this.rotateTo(0,yn({duration:1e3},e),r),this}resetNorthPitch(e,r){return this.easeTo(yn({bearing:0,pitch:0,roll:0,duration:1e3},e),r),this}snapToNorth(e,r){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(e,r):this}getPitch(){return this.transform.pitch}setPitch(e,r){return this.jumpTo({pitch:e},r),this}getRoll(){return this.transform.roll}setRoll(e,r){return this.jumpTo({roll:e},r),this}cameraForBounds(e,r){e=bh.convert(e).adjustAntiMeridian();let t=r?.bearing||0;return this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),t,r)}_cameraForBoxAndBearing(e,r,t,i){let a={top:0,bottom:0,right:0,left:0};if(i=yn({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},i),typeof i.padding=="number"){let u=i.padding;i.padding={top:u,bottom:u,right:u,left:u}}let o=yn(a,i.padding);i.padding=o;let s=this.transform,l=new bh(e,r),n=this.cameraHelper.cameraForBoxAndBearing(i,o,l,t,s);return n&&this._zoomSnap&&(n.zoom=Lf(n.zoom,this._zoomSnap,-1)),n}fitBounds(e,r,t){return this._fitInternal(this.cameraForBounds(e,r),r,t)}fitScreenCoordinates(e,r,t,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.screenPointToLocation(Wr.convert(e)),this.transform.screenPointToLocation(Wr.convert(r)),t,i),i,a)}_fitInternal(e,r,t){return e?(r=yn(e,r),delete r.padding,r.linear?this.easeTo(r,t):this.flyTo(r,t)):this}jumpTo(e,r){this.stop(),e.zoom!==void 0&&this._zoomSnap&&(e.zoom=Lf(e.zoom,this._zoomSnap));let t=this.getTransformForUpdate(),i=!1,a=!1,o=!1,s=t.zoom;this.terrain&&t.setElevation(this.terrain.getElevationForLngLat(e.center?An.convert(e.center):t.center,t)),this.cameraHelper.handleJumpToCenterZoom(t,e);let l=t.zoom!==s;return e.elevation!==void 0&&t.elevation!==+e.elevation&&t.setElevation(+e.elevation),e.bearing!==void 0&&t.bearing!==+e.bearing&&(i=!0,t.setBearing(+e.bearing)),e.pitch!==void 0&&t.pitch!==+e.pitch&&(a=!0,t.setPitch(+e.pitch)),e.roll!==void 0&&t.roll!==+e.roll&&(o=!0,t.setRoll(+e.roll)),e.padding!=null&&!t.isPaddingEqual(e.padding)&&t.setPadding(e.padding),this.applyUpdatedTransform(t),this.fire(new kn("movestart",r)).fire(new kn("move",r)),l&&this.fire(new kn("zoomstart",r)).fire(new kn("zoom",r)).fire(new kn("zoomend",r)),i&&this.fire(new kn("rotatestart",r)).fire(new kn("rotate",r)).fire(new kn("rotateend",r)),a&&this.fire(new kn("pitchstart",r)).fire(new kn("pitch",r)).fire(new kn("pitchend",r)),o&&this.fire(new kn("rollstart",r)).fire(new kn("roll",r)).fire(new kn("rollend",r)),this.fire(new kn("moveend",r))}calculateCameraOptionsFromCameraLngLatAltRotation(e,r,t,i,a){let o=this.transform.calculateCenterFromCameraLngLatAlt(e,r,t,i);return{center:o.center,elevation:o.elevation,zoom:o.zoom,bearing:t,pitch:i,roll:a}}easeTo(e,r){this._stop(!1,e.easeId),e=yn({offset:[0,0],duration:500,easing:Sx},e),e.zoom!==void 0&&this._zoomSnap&&(e.zoom=Lf(e.zoom,this._zoomSnap)),(e.animate===!1||!e.essential&&yc.prefersReducedMotion)&&(e.duration=0);let t=this.getTransformForUpdate(),i=this.getBearing(),a=t.pitch,o=t.roll,s=e.bearing===void 0?i:this._normalizeBearing(e.bearing,i),l=e.pitch===void 0?a:+e.pitch,n=e.roll===void 0?o:this._normalizeBearing(e.roll,o),u=e.padding===void 0?t.padding:e.padding,c=Wr.convert(e.offset),f,h;e.around&&(f=An.convert(e.around),h=t.locationToScreenPoint(f));let d={moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching,rolling:this._rolling},p=this.cameraHelper.handleEaseTo(t,{bearing:s,pitch:l,roll:n,padding:u,around:f,aroundPoint:h,offsetAsPoint:c,offset:e.offset,zoom:e.zoom,center:e.center});return this._rotating||(this._rotating=i!==s),this._pitching||(this._pitching=l!==a),this._rolling||(this._rolling=n!==o),this._padding=!t.isPaddingEqual(u),this._zooming||(this._zooming=p.isZooming),this._easeId=e.easeId,this._prepareEase(r,e.noMoveStart,d),this.terrain&&this._prepareElevation(p.elevationCenter),this._ease(g=>{p.easeFunc(g),this.terrain&&!e.freezeElevation&&this._updateElevation(g),this.applyUpdatedTransform(t),this._fireMoveEvents(r)},g=>{this.terrain&&e.freezeElevation&&this._finalizeElevation(),this._afterEase(r,g)},e),this}_prepareEase(e,r,t={}){this._moving=!0,!r&&!t.moving&&this.fire(new kn("movestart",e)),this._zooming&&!t.zooming&&this.fire(new kn("zoomstart",e)),this._rotating&&!t.rotating&&this.fire(new kn("rotatestart",e)),this._pitching&&!t.pitching&&this.fire(new kn("pitchstart",e)),this._rolling&&!t.rolling&&this.fire(new kn("rollstart",e))}_prepareElevation(e){this._elevationCenter=e,this._elevationStart=this.transform.elevation,this._elevationTarget=this.terrain.getElevationForLngLat(e,this.transform),this.elevationFreeze=!0}_updateElevation(e){(this._elevationStart===void 0||this._elevationCenter===void 0)&&this._prepareElevation(this.transform.center),this.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this._elevationCenter,this.transform.tileZoom));let r=this.terrain.getElevationForLngLat(this._elevationCenter,this.transform);if(e<1&&r!==this._elevationTarget){let t=this._elevationTarget-this._elevationStart,i=(r-(t*e+this._elevationStart))/(1-e);this._elevationStart+=e*(t-i),this._elevationTarget=r}this.transform.setElevation(Zs.number(this._elevationStart,this._elevationTarget,e))}_finalizeElevation(){this.elevationFreeze=!1,this.getCenterClampedToGround()&&this.transform.recalculateZoomAndCenter(this.terrain)}getTransformForUpdate(){return!this.transformCameraUpdate&&!this.terrain?this.transform:(this._requestedCameraState||(this._requestedCameraState=this.transform.clone()),this._requestedCameraState)}_elevateCameraIfInsideTerrain(e){if(!this.terrain&&e.elevation>=0&&e.pitch<=90)return{};let r=e.getCameraLngLat(),t=e.getCameraAltitude(),i=this.terrain?this.terrain.getElevationForLngLatZoom(r,e.zoom):0;if(t<i){let a=e.calculateCameraOptionsFromTo(r,i,e.center,e.elevation);return{pitch:a.pitch,zoom:a.zoom}}return{}}applyUpdatedTransform(e){let r=[];if(r.push(i=>this._elevateCameraIfInsideTerrain(i)),this.transformCameraUpdate&&r.push(i=>this.transformCameraUpdate(i)),!r.length)return;let t=e.clone();for(let i of r){let a=t.clone(),{center:o,zoom:s,roll:l,pitch:n,bearing:u,elevation:c}=i(a);o&&a.setCenter(o),c!==void 0&&a.setElevation(c),s!==void 0&&a.setZoom(s),l!==void 0&&a.setRoll(l),n!==void 0&&a.setPitch(n),u!==void 0&&a.setBearing(u),t.apply(a,!1)}this.transform.apply(t,!1)}_fireMoveEvents(e){this.fire(new kn("move",e)),this._zooming&&this.fire(new kn("zoom",e)),this._rotating&&this.fire(new kn("rotate",e)),this._pitching&&this.fire(new kn("pitch",e)),this._rolling&&this.fire(new kn("roll",e))}_afterEase(e,r){if(this._easeId&&r&&this._easeId===r)return;delete this._easeId;let t=this._zooming,i=this._rotating,a=this._pitching,o=this._rolling;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,this._rolling=!1,this._padding=!1,t&&this.fire(new kn("zoomend",e)),i&&this.fire(new kn("rotateend",e)),a&&this.fire(new kn("pitchend",e)),o&&this.fire(new kn("rollend",e)),this.fire(new kn("moveend",e))}flyTo(e,r){if(!e.essential&&yc.prefersReducedMotion){let T=N1(e,["center","zoom","bearing","pitch","roll","elevation","padding"]);return this.jumpTo(T,r)}this.stop(),e=yn({offset:[0,0],speed:1.2,curve:1.42,easing:Sx},e),e.zoom!==void 0&&this._zoomSnap&&(e.zoom=Lf(e.zoom,this._zoomSnap));let t=this.getTransformForUpdate(),i=t.bearing,a=t.pitch,o=t.roll,s=t.padding,l=e.bearing===void 0?i:this._normalizeBearing(e.bearing,i),n=e.pitch===void 0?a:+e.pitch,u=e.roll===void 0?o:this._normalizeBearing(e.roll,o),c=e.padding===void 0?t.padding:e.padding,f=Wr.convert(e.offset),h=t.centerPoint.add(f),d=t.screenPointToLocation(h),p=this.cameraHelper.handleFlyTo(t,{bearing:l,pitch:n,roll:u,padding:c,locationAtOffset:d,offsetAsPoint:f,center:e.center,minZoom:e.minZoom,zoom:e.zoom}),g=e.curve,m=Math.max(t.width,t.height),y=m/p.scaleOfZoom,_=p.pixelPathLength,v=m/p.scaleOfMinZoom;g=Math.min(g,Math.sqrt(v/_*2));let x=g*g;function S(T){let F=(y*y-m*m+(T?-1:1)*x*x*_*_)/(2*(T?y:m)*x*_);return Math.log(Math.sqrt(F*F+1)-F)}function M(T){return(Math.exp(T)-Math.exp(-T))/2}function C(T){return(Math.exp(T)+Math.exp(-T))/2}function w(T){return M(T)/C(T)}let k=S(!1),A=function(T){return C(k)/C(k+g*T)},b=function(T){return m*((C(k)*w(k+g*T)-M(k))/x)/_},E=(S(!0)-k)/g;if(Math.abs(_)<2e-6||!isFinite(E)){if(Math.abs(m-y)<1e-6)return this.easeTo(e,r);let T=y<m?-1:1;E=Math.abs(Math.log(y/m))/g,b=()=>0,A=F=>Math.exp(T*g*F)}if(e.duration!==void 0)e.duration=+e.duration;else{let T=e.screenSpeed===void 0?+e.speed:+e.screenSpeed/g;e.duration=1e3*E/T}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=i!==l,this._pitching=n!==a,this._rolling=u!==o,this._padding=!t.isPaddingEqual(c),this._prepareEase(r,!1),this.terrain&&this._prepareElevation(p.targetCenter),this._ease(T=>{let F=T*E,D=1/A(F),R=b(F);this._rotating&&t.setBearing(Zs.number(i,l,T)),this._pitching&&t.setPitch(Zs.number(a,n,T)),this._rolling&&t.setRoll(Zs.number(o,u,T)),this._padding&&(t.interpolatePadding(s,c,T),h=t.centerPoint.add(f)),p.easeFunc(T,D,R,h),this.terrain&&!e.freezeElevation&&this._updateElevation(T),this.applyUpdatedTransform(t),this._fireMoveEvents(r)},()=>{this.terrain&&e.freezeElevation&&this._finalizeElevation(),this._afterEase(r)},e),this}isEasing(){return!!this._easeFrameId}stop(e){return this._stop(e)}_stop(e,r){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){let t=this._onEaseEnd;delete this._onEaseEnd,t.call(this,r)}return e||this._stopHandlers(),this}_ease(e,r,t){t.animate===!1||t.duration===0?(e(1),r()):(this._easeStart=hs(),this._easeOptions=t,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))}_normalizeBearing(e,r){e=ch(e,-180,180);let t=Math.abs(e-r);return Math.abs(e-360-r)<t&&(e-=360),Math.abs(e+360-r)<t&&(e+=360),e}isMoving(){return this._moving}isZooming(){return this._zooming}isRotating(){return this._rotating}},wS={compact:!0,customAttribution:'<a href="https://maplibre.org/" target="_blank">MapLibre</a>'},TS=class{constructor(e=wS){this._toggleAttribution=()=>{this._container.classList.contains("maplibregl-compact")&&(this._container.classList.contains("maplibregl-compact-show")?(this._container.setAttribute("open",""),this._container.classList.remove("maplibregl-compact-show")):(this._container.classList.add("maplibregl-compact-show"),this._container.removeAttribute("open")))},this._updateData=r=>{r&&(r.type==="terrain"||r.dataType==="style"||r.dataType==="source"&&(r.sourceDataType==="metadata"||r.sourceDataType==="visibility"))&&this._updateAttributions()},this._updateCompact=()=>{this._map.getCanvasContainer().offsetWidth<=640||this._compact?this._compact===!1?this._container.setAttribute("open",""):!this._container.classList.contains("maplibregl-compact")&&!this._container.classList.contains("maplibregl-attrib-empty")&&(this._container.setAttribute("open",""),this._container.classList.add("maplibregl-compact","maplibregl-compact-show")):(this._container.setAttribute("open",""),this._container.classList.contains("maplibregl-compact")&&this._container.classList.remove("maplibregl-compact","maplibregl-compact-show"))},this._updateCompactMinimize=()=>{this._container.classList.contains("maplibregl-compact")&&this._container.classList.contains("maplibregl-compact-show")&&this._container.classList.remove("maplibregl-compact-show")},this.options=e}getDefaultPosition(){return"bottom-right"}onAdd(e){return this._map=e,this._compact=this.options.compact,this._container=$n.create("details","maplibregl-ctrl maplibregl-ctrl-attrib"),this._compactButton=$n.create("summary","maplibregl-ctrl-attrib-button",this._container),this._compactButton.addEventListener("click",this._toggleAttribution),this._setElementTitle(this._compactButton,"ToggleAttribution"),this._innerContainer=$n.create("div","maplibregl-ctrl-attrib-inner",this._container),this._updateAttributions(),this._updateCompact(),this._map.on("styledata",this._updateData),this._map.on("sourcedata",this._updateData),this._map.on("terrain",this._updateData),this._map.on("resize",this._updateCompact),this._map.on("drag",this._updateCompactMinimize),this._container}onRemove(){this._container.remove(),this._map.off("styledata",this._updateData),this._map.off("sourcedata",this._updateData),this._map.off("terrain",this._updateData),this._map.off("resize",this._updateCompact),this._map.off("drag",this._updateCompactMinimize),this._map=void 0,this._compact=void 0,this._attribHTML=void 0}_setElementTitle(e,r){let t=this._map._getUIString(`AttributionControl.${r}`);e.title=t,e.setAttribute("aria-label",t)}_updateAttributions(){if(!this._map.style)return;let e=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?e=e.concat(this.options.customAttribution.map(i=>typeof i=="string"?i:"")):typeof this.options.customAttribution=="string"&&e.push(this.options.customAttribution)),this._map.style.stylesheet){let i=this._map.style.stylesheet;this.styleOwner=i.owner,this.styleId=i.id}let r=this._map.style.tileManagers;for(let i in r){let a=r[i];if(a.used||a.usedForTerrain){let o=a.getSource();o.attribution&&!e.includes(o.attribution)&&e.push(o.attribution)}}e=e.filter(i=>String(i).trim()),e.sort((i,a)=>i.length-a.length),e=e.filter((i,a)=>{for(let o=a+1;o<e.length;o++)if(e[o].includes(i))return!1;return!0});let t=e.join(" | ");t!==this._attribHTML&&(this._attribHTML=t,e.length?(this._innerContainer.innerHTML=$n.sanitize(t),this._container.classList.remove("maplibregl-attrib-empty")):this._container.classList.add("maplibregl-attrib-empty"),this._updateCompact(),this._editLink=null)}},AS=class{constructor(e={}){this._updateCompact=()=>{let r=this._container.children;if(r.length){let t=r[0];this._map.getCanvasContainer().offsetWidth<=640||this._compact?this._compact!==!1&&t.classList.add("maplibregl-compact"):t.classList.remove("maplibregl-compact")}},this.options=e}getDefaultPosition(){return"bottom-left"}onAdd(e){var r;this._map=e,this._compact=(r=this.options)==null?void 0:r.compact,this._container=$n.create("div","maplibregl-ctrl");let t=$n.create("a","maplibregl-ctrl-logo");return t.target="_blank",t.rel="noopener nofollow",t.href="https://maplibre.org/",t.setAttribute("aria-label",this._map._getUIString("LogoControl.Title")),t.setAttribute("rel","noopener nofollow"),this._container.appendChild(t),this._container.style.display="block",this._map.on("resize",this._updateCompact),this._updateCompact(),this._container}onRemove(){this._container.remove(),this._map.off("resize",this._updateCompact),this._map=void 0,this._compact=void 0}},v8=class{constructor(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1}add(e){let r=++this._id;return this._queue.push({callback:e,id:r,cancelled:!1}),r}remove(e){let r=this._currentlyRunning,t=r?this._queue.concat(r):this._queue;for(let i of t)if(i.id===e){i.cancelled=!0;return}}run(e=0){if(this._currentlyRunning)throw Error("Attempting to run(), but is already running.");let r=this._currentlyRunning=this._queue;this._queue=[];let t=!1,i;for(let a of r)if(!a.cancelled){try{a.callback(e)}catch(o){t||(t=!0,i=o)}if(this._cleared)break}if(this._cleared=!1,this._currentlyRunning=!1,t)throw i}clear(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]}},MS=["none","zoom","sourceTiles","visibleLayers","revision"],m8=class{constructor(e,r,t,i){this._tileKeys=e.map(a=>a.key).sort().join(),this._revision=r,this._zoom=t,this._visibleLayerIds=i}difference(e){return this._revision===e?._revision?this._visibleLayerIds===e._visibleLayerIds?this._tileKeys===e._tileKeys?this._zoom===e._zoom?"none":"zoom":"sourceTiles":"visibleLayers":"revision"}},av={background:!0,fill:!0,line:!0,raster:!0,hillshade:!0,"color-relief":!0},g8=class{constructor(e,r){this.needsFollowUpFrame=!1,this.painter=e,this.terrain=r,this.rttSize=r.tileManager.tileSize*r.qualityFactor}getTexture(e){return e.getRTT(this._stacks.length-1).texture}prepareForRender(e,r){let t=r!==this._lastPrepareZoom;this._lastPrepareZoom=r,this._stacks=[],this._prevType=null,this._rttTiles=[],this._renderableTiles=this.terrain.tileManager.getRenderableTiles(),this._renderableLayerIds=e._order.filter(l=>!e._layers[l].isHidden(r));let i=this._renderableLayerIds.join(),a=new Set;for(let l of this._renderableLayerIds){let n=e._layers[l],u=n.source;u&&av[n.type]&&a.add(u)}this._coordsAscending={},this._rttFingerprints={};for(let l of a){let n=e.tileManagers[l];if(!n)continue;this._coordsAscending[l]={};let u=this._coordsAscending[l],c=n.getSource(),f=c instanceof rv?c.terrainTileRanges:null;for(let p of n.getVisibleCoordinates()){let g=this.terrain.tileManager.getTerrainCoords(p,f);for(let m in g)u[m]||(u[m]=[]),u[m].push(g[m])}this._rttFingerprints[l]={};let h=this._rttFingerprints[l],d=n.getState().revision;for(let p in u)h[p]=new m8(u[p],d,r,i)}this.needsFollowUpFrame=!1;let o=t||this.painter.options.moving,s=!1;for(let l of this._renderableTiles){let n=this._textureDifference(l);n!=="none"&&(n==="zoom"&&o||n==="visibleLayers"&&t?this.needsFollowUpFrame=!0:n==="zoom"||n==="sourceTiles"?(s?this.needsFollowUpFrame=!0:l.releaseRTT(this.painter),s=!0):l.releaseRTT(this.painter))}}_textureDifference(e){let r="none";for(let t in this._rttFingerprints){let i=this._rttFingerprints[t][e.tileID.key];if(!i)continue;let a=i.difference(e.rttFingerprint[t]);MS.indexOf(a)>MS.indexOf(r)&&(r=a)}return r}renderLayer(e,r){if(e.isHidden(this.painter.transform.zoom))return!1;let t=ar(Ot({},r),{isRenderingToTexture:!0}),i=e.type,a=this.painter,o=this._renderableLayerIds[this._renderableLayerIds.length-1]===e.id;if(av[i]&&((!this._prevType||!av[this._prevType])&&this._stacks.push([]),this._prevType=i,this._stacks[this._stacks.length-1].push(e.id),!o))return!0;if(av[this._prevType]||av[i]&&o){this._prevType=i;let s=this._stacks.length-1,l=this._stacks[s]||[];for(let n of this._renderableTiles){if(this._rttTiles.push(n),n.getRTT(s))continue;let u=n.acquireRTT(a,s,this.rttSize);a.bindRTT(u),a.context.clear({color:ro.transparent,stencil:0}),a.currentStencilSource=void 0;for(let c of l){let f=a.style._layers[c],h=f.source?this._coordsAscending[f.source][n.tileID.key]:[n.tileID];a.context.viewport.set([0,0,this.rttSize,this.rttSize]),a.renderTileClippingMasks(f,h,!0),a.renderLayer(a,a.style.tileManagers[f.source],f,h,t),f.source&&(n.rttFingerprint[f.source]=this._rttFingerprints[f.source][n.tileID.key])}u.texture.generateMipmap()}return fse(this.painter,this.terrain,this._rttTiles,t),this._rttTiles=[],av[i]}return!1}},y8={"AttributionControl.ToggleAttribution":"Toggle attribution","AttributionControl.MapFeedback":"Map feedback","FullscreenControl.Enter":"Enter fullscreen","FullscreenControl.Exit":"Exit fullscreen","GeolocateControl.FindMyLocation":"Find my location","GeolocateControl.LocationNotAvailable":"Location not available","LogoControl.Title":"MapLibre logo","Map.Title":"Map","Marker.Title":"Map marker","NavigationControl.ResetBearing":"Drag to rotate map, click to reset north","NavigationControl.ZoomIn":"Zoom in","NavigationControl.ZoomOut":"Zoom out","Popup.Close":"Close popup","ScaleControl.Feet":"ft","ScaleControl.Meters":"m","ScaleControl.Kilometers":"km","ScaleControl.Miles":"mi","ScaleControl.NauticalMiles":"nm","GlobeControl.Enable":"Enable globe","GlobeControl.Disable":"Disable globe","TerrainControl.Enable":"Enable terrain","TerrainControl.Disable":"Disable terrain","CooperativeGesturesHandler.WindowsHelpText":"Use Ctrl + scroll to zoom the map","CooperativeGesturesHandler.MacHelpText":"Use \u2318 + scroll to zoom the map","CooperativeGesturesHandler.MobileHelpText":"Use two fingers to move the map"},_8=vM,SS={hash:!1,interactive:!0,bearingSnap:7,zoomSnap:0,attributionControl:wS,maplibreLogo:!1,refreshExpiredTiles:!0,canvasContextAttributes:{antialias:!1,preserveDrawingBuffer:!1,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,desynchronized:!1,contextType:void 0},scrollZoom:!0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:60,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,cooperativeGestures:!1,trackResize:!0,center:[0,0],elevation:0,zoom:0,bearing:0,pitch:0,roll:0,renderWorldCopies:!0,maxTileCacheSize:null,maxTileCacheZoomLevels:ff.MAX_TILE_CACHE_ZOOM_LEVELS,transformRequest:null,transformCameraUpdate:null,transformConstrain:null,fadeDuration:300,crossSourceCollisions:!0,clickTolerance:3,localIdeographFontFamily:"sans-serif",pitchWithRotate:!0,rollEnabled:!1,rotateSpeed:.8,pitchSpeed:-.5,reduceMotion:void 0,validateStyle:!0,maxCanvasSize:[4096,4096],cancelPendingTileRequestsWhileZooming:!0,centerClampedToGround:!0,terrainSkirtLength:"auto",zoomLevelsToOverscale:4,anisotropicFilterPitch:20},ES=class extends Nl{get _ownerWindow(){var e,r;return((r=(e=this._container)==null?void 0:e.ownerDocument)==null?void 0:r.defaultView)||window}constructor(e){var r,t,i;super(),this._idleTriggered=!1,this._crossFadingFactor=1,this._renderTaskQueue=new v8,this._controls=[],this._mapId=x9(),this._styleUrl=null,this._missingStyleImageResolver=null,this._lostContextStyle={style:null,images:null},this._contextLost=l=>{if(l.preventDefault(),this._frameRequest&&(this._frameRequest=(this._frameRequest.abort(),null)),this.painter.destroy(),this._lostContextStyle=this._getStyleAndImages(),!this.style){this.fire(new Wg("webglcontextlost",{originalEvent:l}));return}for(let n of Object.values(this.style._layers))if(n.type==="custom"&&console.warn(`Custom layer with id '${n.id}' cannot be restored after WebGL context loss. You will need to re-add it manually after context restoration.`),n._listeners)for(let[u]of Object.entries(n._listeners))console.warn(`Custom layer with id '${n.id}' had event listeners for event '${u}' which cannot be restored after WebGL context loss. You will need to re-add them manually after context restoration.`);this.style.destroy(),this.style=null,this.fire(new Wg("webglcontextlost",{originalEvent:l}))},this._contextRestored=l=>{if(this._lostContextStyle.style&&this.setStyle(this._lostContextStyle.style,{diff:!1}),this._lostContextStyle.images&&this.style){this.style.imageManager.images=this._lostContextStyle.images;for(let n in this._lostContextStyle.images){let u=this._lostContextStyle.images[n];u.isWebGLImage&&this.style.imageManager.updateImage(n,u,!1)}}this._lostContextStyle={style:null,images:null};try{this._setupPainter()}catch(n){this.fire(new Ln(n));return}this.resize(),this._update(),this._resizeInternal(),this.fire(new Wg("webglcontextrestored",{originalEvent:l}))},this._onMapScroll=l=>{if(l.target===this._container)return this._container.scrollTop=0,this._container.scrollLeft=0,!1},this._onWindowOnline=()=>{this._update()};let a=ar(Ot(Ot({},SS),e),{canvasContextAttributes:Ot(Ot({},SS.canvasContextAttributes),e.canvasContextAttributes)});if(a.minZoom!=null&&a.maxZoom!=null&&a.minZoom>a.maxZoom)throw Error("maxZoom must be greater than or equal to minZoom");if(a.minPitch!=null&&a.maxPitch!=null&&a.minPitch>a.maxPitch)throw Error("maxPitch must be greater than or equal to minPitch");if(a.minPitch!=null&&a.minPitch<0)throw Error("minPitch must be greater than or equal to 0");if(a.maxPitch!=null&&a.maxPitch>180)throw Error("maxPitch must be less than or equal to 180");this._camera=new p8({minZoom:a.minZoom,maxZoom:a.maxZoom,minPitch:a.minPitch,maxPitch:a.maxPitch,bearingSnap:a.bearingSnap,zoomSnap:a.zoomSnap,renderWorldCopies:a.renderWorldCopies,centerClampedToGround:a.centerClampedToGround,terrain:this.terrain,transformConstrain:a.transformConstrain,requestRenderFrame:l=>this._requestRenderFrame(l),cancelRenderFrame:l=>this._cancelRenderFrame(l),transformCameraUpdate:a.transformCameraUpdate,stopHandlers:()=>{var l;return(l=this._handlers)==null?void 0:l.stop(!1)}}),this._camera.setEventedParent(this),this._interactive=a.interactive,this._maxTileCacheSize=a.maxTileCacheSize,this._maxTileCacheZoomLevels=a.maxTileCacheZoomLevels,this._canvasContextAttributes=Ot({},a.canvasContextAttributes),this._trackResize=a.trackResize===!0,this._terrainSkirtLength=a.terrainSkirtLength,this._refreshExpiredTiles=a.refreshExpiredTiles===!0,this._fadeDuration=a.fadeDuration,this._crossSourceCollisions=a.crossSourceCollisions===!0,this._collectResourceTiming=a.collectResourceTiming===!0,this._locale=Ot(Ot({},y8),a.locale),this._clickTolerance=a.clickTolerance,this._overridePixelRatio=a.pixelRatio,this._maxCanvasSize=a.maxCanvasSize,this._zoomLevelsToOverscale=a.zoomLevelsToOverscale,this.cancelPendingTileRequestsWhileZooming=a.cancelPendingTileRequestsWhileZooming===!0,this.setAnisotropicFilterPitch(a.anisotropicFilterPitch),a.reduceMotion!==void 0&&(yc.prefersReducedMotion=a.reduceMotion),this._requestManager=new Zz(a.transformRequest),this._container=this._resolveContainer(a.container),a.maxBounds&&this.setMaxBounds(a.maxBounds),this._setupContainer();try{this._setupPainter()}catch(l){throw this._cleanupContainer(),l}this._imageQueueHandle=td.addThrottleControl(()=>this.isMoving()),this.on("move",()=>this._update(!1)),this.on("moveend",()=>this._update(!1)),this.on("zoom",()=>this._update(!0)),this.on("terrain",()=>{this.painter.terrainFacilitator.depthDirty=!0,this._update(!0)}),this.once("idle",()=>this._idleTriggered=!0),this._handlers=new d8(this,this._camera,a),typeof window<"u"&&(this._ownerWindow.addEventListener("online",this._onWindowOnline,!1),this._setupResizeObserver());let o=typeof a.hash=="string"&&a.hash||void 0;this._hash=a.hash?new lS(o).addTo(this):void 0,(r=this._hash)!=null&&r._onHashChange()||(this.jumpTo({center:a.center,elevation:a.elevation,zoom:a.zoom,bearing:a.bearing,pitch:a.pitch,roll:a.roll}),a.bounds&&(this.resize(),this.fitBounds(a.bounds,yn({},a.fitBoundsOptions,{duration:0}))));let s=typeof a.style=="string"||((i=(t=a.style)==null?void 0:t.projection)==null?void 0:i.type)!=="globe";this.resize(null,s),this._localIdeographFontFamily=a.localIdeographFontFamily,this._validateStyle=a.validateStyle,a.style&&this.setStyle(a.style,{localIdeographFontFamily:a.localIdeographFontFamily}),a.attributionControl&&this.addControl(new TS(typeof a.attributionControl=="boolean"?void 0:a.attributionControl)),a.maplibreLogo&&this.addControl(new AS,a.logoPosition),this.on("style.load",()=>{if(s||this._resizeTransform(),this._camera.transform.unmodified){let l=N1(this.style.stylesheet,["center","zoom","bearing","pitch","roll"]);this.jumpTo(l)}}),this.on("data",l=>{this._update(l.dataType==="style"),this.fire(l.dataType==="style"?new Nf("styledata",l):new zs("sourcedata",l))}),this.on("dataloading",l=>{this.fire(l.dataType==="style"?new Nf("styledataloading",l):new zs("sourcedataloading",l))}),this.on("dataabort",l=>{this.fire(new zs("sourcedataabort",l))})}_getMapId(){return this._mapId}setGlobalStateProperty(e,r){return this.style.setGlobalStateProperty(e,r),this._update(!0)}getGlobalState(){return this.style.getGlobalState()}addControl(e,r){if(r===void 0&&(r=e.getDefaultPosition?e.getDefaultPosition():"top-right"),!e?.onAdd)return this.fire(new Ln(Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.")));let t=e.onAdd(this);this._controls.push(e);let i=this._controlPositions[r];return r.includes("bottom")?i.insertBefore(t,i.firstChild):i.appendChild(t),this}removeControl(e){if(!e?.onRemove)return this.fire(new Ln(Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.")));let r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this}hasControl(e){return this._controls.includes(e)}coveringTiles(e){return Bm(this._camera.transform,e)}setTransformCameraUpdate(e){this._camera.transformCameraUpdate=e}getCenter(){return new An(this._camera.transform.center.lng,this._camera.transform.center.lat)}setCenter(e,r){return this._camera.setCenter(e,r),this}getCenterElevation(){return this._camera.transform.elevation}setCenterElevation(e,r){return this._camera.setCenterElevation(e,r),this}setCenterClampedToGround(e){this._camera.setCenterClampedToGround(e)}panBy(e,r,t){return this._camera.panBy(e,r,t),this}panTo(e,r,t){return this._camera.panTo(e,r,t),this}getZoom(){return this._camera.transform.zoom}setZoom(e,r){return this._camera.setZoom(e,r),this}zoomTo(e,r,t){return this._camera.zoomTo(e,r,t),this}zoomIn(e,r){return this._camera.zoomIn(e,r),this}zoomOut(e,r){return this._camera.zoomOut(e,r),this}getVerticalFieldOfView(){return this._camera.transform.fov}setVerticalFieldOfView(e,r){return this._camera.setVerticalFieldOfView(e,r),this}getBearing(){return this._camera.transform.bearing}setBearing(e,r){return this._camera.setBearing(e,r),this}getZoomSnap(){return this._camera.getZoomSnap()}setZoomSnap(e){return this._camera.setZoomSnap(e),this}getPadding(){return this._camera.transform.padding}setPadding(e,r){return this._camera.setPadding(e,r),this}rotateTo(e,r,t){return this._camera.rotateTo(e,r,t),this}resetNorth(e,r){return this._camera.resetNorth(e,r),this}resetNorthPitch(e,r){return this._camera.resetNorthPitch(e,r),this}snapToNorth(e,r){return this._camera.snapToNorth(e,r),this}getPitch(){return this._camera.transform.pitch}setPitch(e,r){return this._camera.setPitch(e,r),this}getRoll(){return this._camera.transform.roll}setRoll(e,r){return this._camera.setRoll(e,r),this}cameraForBounds(e,r){return this._camera.cameraForBounds(e,r)}fitBounds(e,r,t){return this._camera.fitBounds(e,r,t),this}fitScreenCoordinates(e,r,t,i,a){return this._camera.fitScreenCoordinates(e,r,t,i,a),this}jumpTo(e,r){return this._camera.jumpTo(e,r),this}calculateCameraOptionsFromCameraLngLatAltRotation(e,r,t,i,a){return this._camera.calculateCameraOptionsFromCameraLngLatAltRotation(e,r,t,i,a)}easeTo(e,r){return this._camera.easeTo(e,r),this}flyTo(e,r){return this._camera.flyTo(e,r),this}stop(){return this._camera.stop(),this}queryTerrainElevation(e){return this.terrain?this.terrain.getElevationForLngLat(An.convert(e),this._camera.transform):null}getCenterClampedToGround(){return this._camera.getCenterClampedToGround()}calculateCameraOptionsFromTo(e,r,t,i){return i==null&&this.terrain&&(i=this.terrain.getElevationForLngLat(t,this._camera.transform)),this._camera.transform.calculateCameraOptionsFromTo(e,r,t,i??0)}resize(e,r=!0){if(this._lostContextStyle.style!==null)return this;this._resizeInternal(r);let t=!this._camera._moving;return t&&(this.stop(),this.fire(new kn("movestart",e)).fire(new kn("move",e))),this.fire(new iu("resize",e)),t&&this.fire(new kn("moveend",e)),this}_resizeInternal(e=!0){let[r,t]=this._containerDimensions(),i=this._getClampedPixelRatio(r,t);if(this._resizeCanvas(r,t,i),this.painter.resize(r,t,i),this.painter.overLimit()){let a=this.painter.context.gl;this._maxCanvasSize=[a.drawingBufferWidth,a.drawingBufferHeight];let o=this._getClampedPixelRatio(r,t);this._resizeCanvas(r,t,o),this.painter.resize(r,t,o)}this._resizeTransform(e)}_resizeTransform(e=!0){var r;let[t,i]=this._containerDimensions();this._camera.transform.resize(t,i,e),(r=this._camera._requestedCameraState)==null||r.resize(t,i,e)}_getClampedPixelRatio(e,r){let{0:t,1:i}=this._maxCanvasSize,a=this.getPixelRatio(),o=e*a,s=r*a,l=o>t?t/o:1,n=s>i?i/s:1,u=Math.min(l,n);return u<1&&To("The canvas is larger than maxCanvasSize and is rendered at a lower pixel ratio to fit. Increase maxCanvasSize, within MAX_TEXTURE_SIZE, to render at full resolution."),u*a}getPixelRatio(){var e;return(e=this._overridePixelRatio)!=null?e:devicePixelRatio}setPixelRatio(e){this._overridePixelRatio=e,this.resize()}getBounds(){return this._camera.transform.getBounds()}getMaxBounds(){return this._camera.transform.getMaxBounds()}setMaxBounds(e){return this._camera.transform.setMaxBounds(bh.convert(e)),this._update()}setMinZoom(e){if(e??(e=-2),e>=-2&&e<=this._camera.transform.maxZoom){let r=this._camera.transform.zoom,t=this._camera.getTransformForUpdate();return t.setMinZoom(e),this._camera.applyUpdatedTransform(t),this._update(),r!==this._camera.transform.zoom&&this.fire(new kn("zoomstart")).fire(new kn("zoom")).fire(new kn("zoomend")).fire(new kn("movestart")).fire(new kn("move")).fire(new kn("moveend")),this}throw Error("minZoom must be between -2 and the current maxZoom, inclusive")}getMinZoom(e=!1){let r=this._camera.transform;return e?r.applyConstrain(r.center,r.minZoom).zoom:r.minZoom}setMaxZoom(e){if(e??(e=22),e>=this._camera.transform.minZoom){let r=this._camera.transform.zoom,t=this._camera.getTransformForUpdate();return t.setMaxZoom(e),this._camera.applyUpdatedTransform(t),this._update(),r!==this._camera.transform.zoom&&this.fire(new kn("zoomstart")).fire(new kn("zoom")).fire(new kn("zoomend")).fire(new kn("movestart")).fire(new kn("move")).fire(new kn("moveend")),this}throw Error("maxZoom must be greater than the current minZoom")}getMaxZoom(){return this._camera.transform.maxZoom}setMinPitch(e){if(e??(e=0),e<0)throw Error("minPitch must be greater than or equal to 0");if(e>=0&&e<=this._camera.transform.maxPitch){let r=this._camera.transform.pitch,t=this._camera.getTransformForUpdate();return t.setMinPitch(e),this._camera.applyUpdatedTransform(t),this._update(),r!==this._camera.transform.pitch&&this.fire(new kn("pitchstart")).fire(new kn("pitch")).fire(new kn("pitchend")).fire(new kn("movestart")).fire(new kn("move")).fire(new kn("moveend")),this}throw Error("minPitch must be between 0 and the current maxPitch, inclusive")}getMinPitch(){return this._camera.transform.minPitch}setMaxPitch(e){if(e??(e=60),e>180)throw Error("maxPitch must be less than or equal to 180");if(e>=this._camera.transform.minPitch){let r=this._camera.transform.pitch,t=this._camera.getTransformForUpdate();return t.setMaxPitch(e),this._camera.applyUpdatedTransform(t),this._update(),r!==this._camera.transform.pitch&&this.fire(new kn("pitchstart")).fire(new kn("pitch")).fire(new kn("pitchend")).fire(new kn("movestart")).fire(new kn("move")).fire(new kn("moveend")),this}throw Error("maxPitch must be greater than the current minPitch")}getMaxPitch(){return this._camera.transform.maxPitch}getAnisotropicFilterPitch(){return this._anisotropicFilterPitch}setAnisotropicFilterPitch(e){if(e??(e=20),e>180)throw Error("anisotropicFilterPitch must be less than or equal to 180");if(e<0)throw Error("anisotropicFilterPitch must be greater than or equal to 0");return this._anisotropicFilterPitch=e,this._update()}getRenderWorldCopies(){return this._camera.transform.renderWorldCopies}setRenderWorldCopies(e){return this._camera.transform.setRenderWorldCopies(e),this._update()}setTransformConstrain(e){return this._camera.transform.setConstrainOverride(e),this._update()}project(e){return this._camera.transform.locationToScreenPoint(An.convert(e),this.style&&this.terrain)}unproject(e){return this._camera.transform.screenPointToLocation(Wr.convert(e),this.terrain)}isMoving(){var e;return this._camera.isMoving()||((e=this._handlers)==null?void 0:e.isMoving())||!1}isZooming(){var e;return this._camera.isZooming()||((e=this._handlers)==null?void 0:e.isZooming())||!1}isRotating(){var e;return this._camera.isRotating()||((e=this._handlers)==null?void 0:e.isRotating())||!1}_createDelegatedListener(e,r,t){if(e==="mouseenter"||e==="mouseover"){let i=!1;return{layers:r,listener:t,delegates:{mousemove:a=>{let o=r.filter(l=>this.getLayer(l)),s=o.length===0?[]:this.queryRenderedFeatures(a.point,{layers:o});s.length?i||(i=!0,t.call(this,new df(e,this,a.originalEvent,{features:s}))):i=!1},mouseout:()=>{i=!1}}}}if(e==="mouseleave"||e==="mouseout"){let i=!1;return{layers:r,listener:t,delegates:{mousemove:a=>{let o=r.filter(s=>this.getLayer(s));(o.length===0?[]:this.queryRenderedFeatures(a.point,{layers:o})).length?i=!0:i&&(i=!1,t.call(this,new df(e,this,a.originalEvent)))},mouseout:a=>{i&&(i=!1,t.call(this,new df(e,this,a.originalEvent)))}}}}{let i=a=>{let o=r.filter(l=>this.getLayer(l)),s=o.length===0?[]:this.queryRenderedFeatures(a.point,{layers:o});s.length&&(a.features=s,t.call(this,a),delete a.features)};return{layers:r,listener:t,delegates:{[e]:i}}}}_saveDelegatedListener(e,r){var t;this._delegatedListeners||(this._delegatedListeners={}),(t=this._delegatedListeners)[e]||(t[e]=[]),this._delegatedListeners[e].push(r)}_removeDelegatedListener(e,r,t){var i;if(!((i=this._delegatedListeners)!=null&&i[e]))return;let a=this._delegatedListeners[e];for(let o=0;o<a.length;o++){let s=a[o];if(s.listener===t&&s.layers.length===r.length&&s.layers.every(l=>r.includes(l))){for(let l in s.delegates)this.off(l,s.delegates[l]);a.splice(o,1);return}}}on(e,r,t){if(t===void 0)return super.on(e,r);let i=typeof r=="string"?[r]:r,a=this._createDelegatedListener(e,i,t);this._saveDelegatedListener(e,a);for(let o in a.delegates)this.on(o,a.delegates[o]);return{unsubscribe:()=>{this._removeDelegatedListener(e,i,t)}}}once(e,r,t){if(t===void 0)return super.once(e,r);let i=typeof r=="string"?[r]:r,a=this._createDelegatedListener(e,i,t);for(let o in a.delegates){let s=a.delegates[o];a.delegates[o]=(...l)=>{this._removeDelegatedListener(e,i,t),s(...l)}}this._saveDelegatedListener(e,a);for(let o in a.delegates)this.once(o,a.delegates[o]);return this}off(e,r,t){if(t===void 0)return super.off(e,r);let i=typeof r=="string"?[r]:r;return this._removeDelegatedListener(e,i,t),this}queryRenderedFeatures(e,r){if(!this.style)return[];let t,i=e instanceof Wr||Array.isArray(e),a=i?e:[[0,0],[this._camera.transform.width,this._camera.transform.height]];if(r||(r=(i?{}:e)||{}),a instanceof Wr||typeof a[0]=="number")t=[Wr.convert(a)];else{let o=Wr.convert(a[0]),s=Wr.convert(a[1]);t=[o,new Wr(s.x,o.y),s,new Wr(o.x,s.y),o]}return this.style.queryRenderedFeatures(t,r,this._camera.transform)}querySourceFeatures(e,r){return this.style.querySourceFeatures(e,r)}setStyle(e,r){return r=yn({},{localIdeographFontFamily:this._localIdeographFontFamily,validate:this._validateStyle},r),this._styleUrl=typeof e=="string"?e:null,r.diff!==!1&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))}setTransformRequest(e){return this._requestManager.setTransformRequest(e),this}_getUIString(e){let r=this._locale[e];if(r==null)throw Error(`Missing UI string '${e}'`);return r}_updateStyle(e,r){var t,i,a;if((t=this._diffStyleRequest)==null||t.abort(),this._diffStyleRequest=null,r.transformStyle&&this.style&&!this.style._loaded){this.style.once("style.load",()=>this._updateStyle(e,r));return}let o=this.style&&r.transformStyle?this.style.serialize():void 0;if(this.style&&(this.style.setEventedParent(null),this.style._remove(!e)),e)this.style=new L2(this,r||{});else return this._frameRequest&&(this._frameRequest=(this._frameRequest.abort(),null)),(a=(i=this.style)==null?void 0:i.projection)==null||a.destroy(),delete this.style,this;return this.style.setEventedParent(this,{style:this.style}),typeof e=="string"?this.style.loadURL(e,r,o):this.style.loadJSON(e,r,o),this}_lazyInitEmptyStyle(){this.style||(this.style=new L2(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty())}_diffStyle(e,r){return Xr(this,null,function*(){var t;if((t=this._diffStyleRequest)==null||t.abort(),typeof e=="string"){let i=e;this._diffStyleRequest=new AbortController;let a=this._diffStyleRequest;try{let o=yield this._requestManager.transformRequest(i,"Style");if(a.signal.aborted){this._diffStyleRequest=null;return}let s=yield vg(o,a);this._diffStyleRequest=null,this._updateDiff(s.data,r)}catch(o){this._diffStyleRequest=null,jp(o)||this.fire(new Ln(Zu(o)))}}else typeof e=="object"&&(this._diffStyleRequest=null,this._updateDiff(e,r))})}_updateDiff(e,r){try{this.style.setState(e,r)&&this._update(!0)}catch(t){To(`Unable to perform style diff: ${Zu(t).message}.  Rebuilding the style from scratch.`),this._updateStyle(e,r)}}getStyle(){if(this.style)return this.style.serialize()}getStyleUrl(){return this._styleUrl}_getStyleAndImages(){return this.style?{style:this.style.serialize(),images:this.style.imageManager.cloneImages()}:{style:null,images:{}}}isStyleLoaded(){if(!this.style){To("There is no style added to the map.");return}return this.style.loaded()}addSource(e,r){return this._lazyInitEmptyStyle(),this.style.addSource(e,r),this._update(!0)}isSourceLoaded(e){var r;let t=(r=this.style)==null?void 0:r.tileManagers[e];if(t===void 0){this.fire(new Ln(Error(`There is no tile manager with ID '${e}'`)));return}return t.loaded()}setTerrain(e,r={}){if(this.style._checkLoaded(),e&&Q1(this,Hc.terrain,{value:e},r))return this;if(this._terrainDataCallback&&this.style.off("data",this._terrainDataCallback),!e)this.terrain&&this.terrain.destroy(),this.terrain=null,this.painter.renderToTexture=null,this._camera.terrain=null,this._camera.transform.setMinElevationForCurrentTile(0),this.getCenterClampedToGround()&&this._camera.transform.setElevation(0);else{let t=this.style.tileManagers[e.source];if(!t)throw Error(`cannot load terrain, because there exists no source with ID: ${e.source}`);this.terrain===null&&t.reload();for(let i in this.style._layers){let a=this.style._layers[i];a.type==="hillshade"&&a.source===e.source&&To("You are using the same source for a hillshade layer and for 3D terrain. Please consider using two separate sources to improve rendering quality."),a.type==="color-relief"&&a.source===e.source&&To("You are using the same source for a color-relief layer and for 3D terrain. Please consider using two separate sources to improve rendering quality.")}this.terrain&&this.terrain.destroy(),this.terrain=new ZB(this.painter,t,e,this._terrainSkirtLength),this.painter.renderToTexture=new g8(this.painter,this.terrain),this._camera.terrain=this.terrain,this._camera.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this._camera.transform.center,this._camera.transform.tileZoom)),this._camera.transform.setElevation(this.terrain.getElevationForLngLat(this._camera.transform.center,this._camera.transform)),this._terrainDataCallback=i=>this._handleTerrainDataEvent(i,e.source),this.style.on("data",this._terrainDataCallback)}return this.style.triggerSymbolPlacement(),this.fire(new yM({terrain:e})),this}_handleTerrainDataEvent(e,r){var t;if(e.dataType==="style"){this.terrain.tileManager.releaseAllRTT();return}let i=e.sourceId===r;if(i&&(this.terrain.resetElevationCache(),this.style.triggerSymbolPlacement()),i&&e.tile&&!this._camera.elevationFreeze&&(this._camera.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this._camera.transform.center,this._camera.transform.tileZoom)),this.getCenterClampedToGround()&&this._camera.transform.setElevation(this.terrain.getElevationForLngLat(this._camera.transform.center,this._camera.transform))),e.tile){if(((t=e.source)==null?void 0:t.type)==="image"){this.terrain.tileManager.releaseAllRTT();return}this.terrain.tileManager.releaseRTT(e.tile.tileID)}}getTerrain(){var e,r;return(r=(e=this.terrain)==null?void 0:e.options)!=null?r:null}areTilesLoaded(){var e;let r=(e=this.style)==null?void 0:e.tileManagers;for(let t of Object.values(r))if(!t.areTilesLoaded())return!1;return!0}removeSource(e){return this.style.removeSource(e),this._update(!0)}getSource(e){var r;return(r=this.style)==null?void 0:r.getSource(e)}setSourceTileLodParams(e,r,t){if(t){let i=this.getSource(t);if(!i)throw Error(`There is no source with ID "${t}", cannot set LOD parameters`);i.calculateTileZoom=HA(Math.max(1,e),Math.max(1,r))}else for(let i in this.style.tileManagers)this.style.tileManagers[i].getSource().calculateTileZoom=HA(Math.max(1,e),Math.max(1,r));return this._update(!0),this}refreshTiles(e,r){let t=this.style.tileManagers[e];if(!t)throw Error(`There is no tile manager with ID "${e}", cannot refresh tile`);r===void 0?t.reload(!0):t.refreshTiles(r.map(i=>new Rg(i.z,i.x,i.y)))}addImage(e,r,t={}){var i;this._lazyInitEmptyStyle();let a=this._createStyleImage(r,t);return a?(this.style.addImage(e,a),(i=a.userImage)!=null&&i.onAdd&&a.userImage.onAdd(this,e),this):this}setMissingStyleImageResolver(e){var r;return this._missingStyleImageResolver=e,(r=this.style)==null||r.setMissingImageResolver(e),this}_createStyleImage(e,r={}){let{pixelRatio:t=1,sdf:i=!1,stretchX:a,stretchY:o,content:s,textFitWidth:l,textFitHeight:n}=r;if(e instanceof HTMLImageElement||P0(e)){let{width:u,height:c,data:f}=yc.getImageData(e);return{data:new Rs({width:u,height:c},f),pixelRatio:t,stretchX:a,stretchY:o,content:s,textFitWidth:l,textFitHeight:n,sdf:i,version:0}}if(e.width===void 0||e.height===void 0)return this.fire(new Ln(Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`"))),null;{let{width:u,height:c,data:f}=e,h=e,d=ux(h.data);return{data:d?new Rs({width:u,height:c}):new Rs({width:u,height:c},new Uint8Array(f)),pixelRatio:t,stretchX:a,stretchY:o,content:s,textFitWidth:l,textFitHeight:n,sdf:i,version:0,isWebGLImage:d,userImage:h}}}updateImage(e,r){let t=this.style.getImage(e);if(!t)return this.fire(new Ln(Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.")));let{width:i,height:a,data:o}=r instanceof HTMLImageElement||P0(r)?yc.getImageData(r):r;if(i===void 0||a===void 0)return this.fire(new Ln(Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));if(i!==t.data.width||a!==t.data.height)return this.fire(new Ln(Error("The width and height of the updated image must be that same as the previous version of the image")));if(t.isWebGLImage=ux(o),t.isWebGLImage)t.userImage=r;else{let s=!(r instanceof HTMLImageElement||P0(r));t.data.replace(o,s)}return this.style.updateImage(e,t),this}getImage(e){return this.style.getImage(e)}hasImage(e){return e?!!this.style.getImage(e):(this.fire(new Ln(Error("Missing required image id"))),!1)}removeImage(e){this.style.removeImage(e)}loadImage(e){return Xr(this,null,function*(){let r=yield td.getImage(yield this._requestManager.transformRequest(e,"Image"),new AbortController);if(!r.data)throw Error(`Could not load image ${e}: the response is empty`);return r})}listImages(){var e,r;return(r=(e=this.style)==null?void 0:e.listImages())!=null?r:[]}addLayer(e,r){return this._lazyInitEmptyStyle(),this.style.addLayer(e,r),this._update(!0)}moveLayer(e,r){return this.style.moveLayer(e,r),this._update(!0)}removeLayer(e){return this.style.removeLayer(e),this._update(!0)}getLayer(e){var r;return(r=this.style)==null?void 0:r.getLayer(e)}getLayersOrder(){var e,r;return(r=(e=this.style)==null?void 0:e.getLayersOrder())!=null?r:[]}setLayerZoomRange(e,r,t){return this.style.setLayerZoomRange(e,r,t),this._update(!0)}setFilter(e,r,t={}){var i;return(i=this.style)==null||i.setFilter(e,r,t),this._update(!0)}getFilter(e){return this.style.getFilter(e)}setPaintProperty(e,r,t,i={}){var a;return(a=this.style)==null||a.setPaintProperty(e,r,t,i),this._update(!0)}getPaintProperty(e,r){return this.style.getPaintProperty(e,r)}setLayoutProperty(e,r,t,i={}){return this.style.setLayoutProperty(e,r,t,i),this._update(!0)}getLayoutProperty(e,r){return this.style.getLayoutProperty(e,r)}setGlyphs(e,r={}){return this._lazyInitEmptyStyle(),this.style.setGlyphs(e,r),this._update(!0)}getGlyphs(){return this.style.getGlyphsUrl()}setFontFaces(e){return this._lazyInitEmptyStyle(),this.style.setFontFaces(e),this._update(!0)}getFontFaces(){return this.style.getFontFaces()}addSprite(e,r,t={}){return this._lazyInitEmptyStyle(),this.style.addSprite(e,r,t,i=>{i||this._update(!0)}),this}removeSprite(e){return this._lazyInitEmptyStyle(),this.style.removeSprite(e),this._update(!0)}getSprite(){return this.style.getSprite()}setSprite(e,r={}){return this._lazyInitEmptyStyle(),this.style.setSprite(e,r,t=>{t||this._update(!0)}),this}setLight(e,r={}){return this._lazyInitEmptyStyle(),this.style.setLight(e,r),this._update(!0)}getLight(){return this.style.getLight()}setSky(e,r={}){return this._lazyInitEmptyStyle(),this.style.setSky(e,r),this._update(!0)}getSky(){return this.style.getSky()}setFeatureState(e,r){return this.style.setFeatureState(e,r),this._update()}removeFeatureState(e,r){return this.style.removeFeatureState(e,r),this._update()}getFeatureState(e){return this.style.getFeatureState(e)}getContainer(){return this._container}getCanvasContainer(){return this._canvasContainer}getCanvas(){return this._canvas}_containerDimensions(){let e=0,r=0;return this._container&&(e=this._container.clientWidth||400,r=this._container.clientHeight||300),[e,r]}_shouldHandleInitialResize(){var e;if(!((e=this._container)!=null&&e.clientWidth)||!this._container.clientHeight)return!1;let[r,t]=this._containerDimensions();return r!==this._camera.transform.width||t!==this._camera.transform.height}_setupResizeObserver(){var e;let r=!1,t=qz(a=>{this._trackResize&&!this._removed&&(this.resize(a),this.redraw())},50),i=(e=this._ownerWindow.ResizeObserver)!=null?e:ResizeObserver;this._resizeObserver=new i(a=>{!r&&(r=!0,!this._shouldHandleInitialResize())||t(a)}),this._resizeObserver.observe(this._container)}_resolveContainer(e){if(typeof e=="string"){let r=document.getElementById(e);if(!r)throw Error(`Container '${e}' not found.`);return r}if(e instanceof HTMLElement||e&&typeof e=="object"&&e.nodeType===1)return e;throw Error("Invalid type: 'container' must be a String or HTMLElement.")}_setupContainer(){let e=this._container;e.classList.add("maplibregl-map");let r=this._canvasContainer=$n.create("div","maplibregl-canvas-container",e);this._interactive&&r.classList.add("maplibregl-interactive"),this._canvas=$n.create("canvas","maplibregl-canvas",r),this._canvas.addEventListener("webglcontextlost",this._contextLost,!1),this._canvas.addEventListener("webglcontextrestored",this._contextRestored,!1),this._canvas.setAttribute("tabindex",this._interactive?"0":"-1"),this._canvas.setAttribute("aria-label",this._getUIString("Map.Title")),this._canvas.setAttribute("role","region");let t=this._containerDimensions(),i=this._getClampedPixelRatio(t[0],t[1]);this._resizeCanvas(t[0],t[1],i);let a=this._controlContainer=$n.create("div","maplibregl-control-container",e),o=this._controlPositions={};for(let s of["top-left","top-right","bottom-left","bottom-right"])o[s]=$n.create("div",`maplibregl-ctrl-${s} `,a);this._container.addEventListener("scroll",this._onMapScroll,!1)}_cleanupContainer(){this._canvas.removeEventListener("webglcontextrestored",this._contextRestored,!1),this._canvas.removeEventListener("webglcontextlost",this._contextLost,!1),this._canvasContainer.remove(),this._controlContainer.remove(),this._container.removeEventListener("scroll",this._onMapScroll,!1),this._container.classList.remove("maplibregl-map")}_resizeCanvas(e,r,t){this._canvas.width=Math.floor(t*e),this._canvas.height=Math.floor(t*r),this._canvas.style.width=`${e}px`,this._canvas.style.height=`${r}px`}_setupPainter(){let e=ar(Ot({},this._canvasContextAttributes),{alpha:!0,depth:!0,stencil:!0,premultipliedAlpha:!0}),r=null;this._canvas.addEventListener("webglcontextcreationerror",i=>{r=i},{once:!0});let t=this._canvas.getContext("webgl2",e);if(!t)throw new sS(e,r);this.painter=new WN(t,this._camera.transform)}migrateProjection(e,r){this._camera.migrateProjection(e,r),this.painter.transform=e,this.fire(new _M({newProjection:this.style.projection.name}))}loaded(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()}_update(e){var r;return(r=this.style)!=null&&r._loaded?(this._styleDirty||(this._styleDirty=e),this._sourcesDirty=!0,this.triggerRepaint(),this):this}_requestRenderFrame(e){return this._update(),this._renderTaskQueue.add(e)}_cancelRenderFrame(e){this._renderTaskQueue.remove(e)}_render(e){var r,t,i,a,o;let s=this._idleTriggered?this._fadeDuration:0,l=((r=this.style.projection)==null?void 0:r.transitionState)>0;if(this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),this._removed)return;let n=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;let f=this._camera.transform.zoom,h=hs();this.style.zoomHistory.update(f,h);let d=new ns(f,{now:h,fadeDuration:s,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),p=d.crossFadingFactor();(p!==1||p!==this._crossFadingFactor)&&(n=!0,this._crossFadingFactor=p),this.style.update(d)}let u=((t=this.style.projection)==null?void 0:t.transitionState)>0!==l;this._camera.transform.setTransitionState((i=this.style.projection)==null?void 0:i.transitionState),this.style&&(this._sourcesDirty||u)&&(this._sourcesDirty=!1,this.style._updateSources(this._camera.transform)),this.terrain?(this.terrain.tileManager.update(this._camera.transform,this.terrain)&&this.terrain.resetElevationCache(),this._camera.transform.setMinElevationForCurrentTile(this.terrain.getMinTileElevationForLngLatZoom(this._camera.transform.center,this._camera.transform.tileZoom)),!this._camera.elevationFreeze&&this.getCenterClampedToGround()&&this._camera.transform.setElevation(this.terrain.getElevationForLngLat(this._camera.transform.center,this._camera.transform))):(this._camera.transform.setMinElevationForCurrentTile(0),this.getCenterClampedToGround()&&this._camera.transform.setElevation(0)),this._placementDirty=(a=this.style)==null?void 0:a._updatePlacement(this._camera.transform,this.showCollisionBoxes,s,this._crossSourceCollisions,u),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:s,showPadding:this.showPadding,anisotropicFilterPitch:this.getAnisotropicFilterPitch()}),this.fire(new iu("render")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new iu("load"))),this.style&&(this.style.hasTransitions()||n)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles();let c=this._sourcesDirty||this._styleDirty||this._placementDirty||((o=this.painter.renderToTexture)==null?void 0:o.needsFollowUpFrame);return c||this._repaint?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new iu("idle")),this._loaded&&!this._fullyLoaded&&!c&&(this._fullyLoaded=!0),this}redraw(){return this.style&&(this._frameRequest&&(this._frameRequest=(this._frameRequest.abort(),null)),this._render(0)),this}remove(){var e,r;this._hash&&this._hash.remove();for(let i of this._controls)i.onRemove(this);this._controls=[],this._frameRequest&&(this._frameRequest=(this._frameRequest.abort(),null)),this._renderTaskQueue.clear(),(e=this._diffStyleRequest)==null||e.abort(),this.painter.destroy(),this._handlers.destroy(),this.setStyle(null),typeof window<"u"&&this._ownerWindow.removeEventListener("online",this._onWindowOnline,!1),td.removeThrottleControl(this._imageQueueHandle),(r=this._resizeObserver)==null||r.disconnect();let t=this.painter.context.gl.getExtension("WEBGL_lose_context");t?.loseContext&&t.loseContext(),this._cleanupContainer(),this._removed=!0,this.fire(new iu("remove"))}triggerRepaint(){this.style&&!this._frameRequest&&(this._frameRequest=new AbortController,yc.frame(this._frameRequest,e=>{this._frameRequest=null;try{this._render(e)}catch(r){if(!jp(r))throw r}},()=>{},this._ownerWindow))}get showTileBoundaries(){return!!this._showTileBoundaries}set showTileBoundaries(e){this._showTileBoundaries!==e&&(this._showTileBoundaries=e,this._update())}get showPadding(){return!!this._showPadding}set showPadding(e){this._showPadding!==e&&(this._showPadding=e,this._update())}get showCollisionBoxes(){return!!this._showCollisionBoxes}set showCollisionBoxes(e){this._showCollisionBoxes!==e&&(this._showCollisionBoxes=e,e?this.style._generateCollisionBoxes():this._update())}get showOverdrawInspector(){return!!this._showOverdrawInspector}set showOverdrawInspector(e){this._showOverdrawInspector!==e&&(this._showOverdrawInspector=e,this._update())}get repaint(){return!!this._repaint}set repaint(e){this._repaint!==e&&(this._repaint=e,this.triggerRepaint())}get vertices(){return!!this._vertices}set vertices(e){this._vertices=e,this._update()}get version(){return _8}getCameraTargetElevation(){return this._camera.transform.elevation}getProjection(){return this.style.getProjection()}setProjection(e){return this._lazyInitEmptyStyle(),this.style.setProjection(e),this._update(!0)}},x8={showCompass:!0,showZoom:!0,visualizePitch:!1,visualizeRoll:!0},b8=class{constructor(e){this._updateZoomButtons=()=>{let r=this._map.getZoom(),t=r===this._map.getMaxZoom(),i=r===this._map.getMinZoom(!0);this._zoomInButton.disabled=t,this._zoomOutButton.disabled=i,this._zoomInButton.setAttribute("aria-disabled",t.toString()),this._zoomOutButton.setAttribute("aria-disabled",i.toString())},this._rotateCompassArrow=()=>{let r=this._map.getPitch(),t=this._map.getRoll(),i=this._map.getBearing(),a=1/Math.cos(rl(r))**.5;if(this.options.visualizePitch&&this.options.visualizeRoll){this._compassIcon.style.transform=`scale(${a}) rotateZ(${-t}deg) rotateX(${r}deg) rotateZ(${-i}deg)`;return}if(this.options.visualizePitch){this._compassIcon.style.transform=`scale(${a}) rotateX(${r}deg) rotateZ(${-i}deg)`;return}if(this.options.visualizeRoll){this._compassIcon.style.transform=`rotate(${-i-t}deg)`;return}this._compassIcon.style.transform=`rotate(${-i}deg)`},this._setButtonTitle=(r,t)=>{let i=this._map._getUIString(`NavigationControl.${t}`);r.title=i,r.setAttribute("aria-label",i)},this.options=yn({},x8,e),this._container=$n.create("div","maplibregl-ctrl maplibregl-ctrl-group"),this._container.addEventListener("contextmenu",r=>r.preventDefault()),this.options.showZoom&&(this._zoomInButton=this._createButton("maplibregl-ctrl-zoom-in",r=>this._map.zoomIn({},{originalEvent:r})),$n.create("span","maplibregl-ctrl-icon",this._zoomInButton).setAttribute("aria-hidden","true"),this._zoomOutButton=this._createButton("maplibregl-ctrl-zoom-out",r=>this._map.zoomOut({},{originalEvent:r})),$n.create("span","maplibregl-ctrl-icon",this._zoomOutButton).setAttribute("aria-hidden","true")),this.options.showCompass&&(this._compass=this._createButton("maplibregl-ctrl-compass",r=>{this.options.visualizePitch?this._map.resetNorthPitch({},{originalEvent:r}):this._map.resetNorth({},{originalEvent:r})}),this._compassIcon=$n.create("span","maplibregl-ctrl-icon",this._compass),this._compassIcon.setAttribute("aria-hidden","true"))}onAdd(e){return this._map=e,this.options.showZoom&&(this._setButtonTitle(this._zoomInButton,"ZoomIn"),this._setButtonTitle(this._zoomOutButton,"ZoomOut"),this._map.on("move",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this._setButtonTitle(this._compass,"ResetBearing"),this.options.visualizePitch&&this._map.on("pitch",this._rotateCompassArrow),this.options.visualizeRoll&&this._map.on("roll",this._rotateCompassArrow),this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new w8(this._map,this._compass,this.options.visualizePitch)),this._container}onRemove(){this._container.remove(),this.options.showZoom&&this._map.off("move",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off("pitch",this._rotateCompassArrow),this.options.visualizeRoll&&this._map.off("roll",this._rotateCompassArrow),this._map.off("rotate",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map}_createButton(e,r){let t=$n.create("button",e,this._container);return t.type="button",t.addEventListener("click",r),t}},w8=class{constructor(e,r,t=!1){this.mousedown=a=>{this.startMove(a,$n.mousePos(this.element,a)),window.addEventListener("mousemove",this.mousemove),window.addEventListener("mouseup",this.mouseup)},this.mousemove=a=>{this.move(a,$n.mousePos(this.element,a))},this.mouseup=a=>{this._rotatePitchHandler.dragEnd(a),this.offTemp()},this.touchstart=a=>{a.targetTouches.length===1?(this._startPos=this._lastPos=$n.touchPos(this.element,a.targetTouches)[0],this.startMove(a,this._startPos),window.addEventListener("touchmove",this.touchmove,{passive:!1}),window.addEventListener("touchend",this.touchend)):this.reset()},this.touchmove=a=>{a.targetTouches.length===1?(this._lastPos=$n.touchPos(this.element,a.targetTouches)[0],this.move(a,this._lastPos)):this.reset()},this.touchend=a=>{a.targetTouches.length===0&&this._startPos&&this._lastPos&&this._startPos.dist(this._lastPos)<this._clickTolerance&&this.element.click(),delete this._startPos,delete this._lastPos,this.offTemp()},this.reset=()=>{this._rotatePitchHandler.reset(),delete this._startPos,delete this._lastPos,this.offTemp()},this._clickTolerance=10,this.element=r;let i=new o8;this._rotatePitchHandler=new Wm({clickTolerance:3,move:(a,o)=>{let s=r.getBoundingClientRect(),l=new Wr((s.bottom-s.top)/2,(s.right-s.left)/2);return{bearingDelta:T9(new Wr(a.x,o.y),o,l),pitchDelta:t?(o.y-a.y)*-.5:void 0}},moveStateManager:i,enable:!0,assignEvents:()=>{}}),this.map=e,r.addEventListener("mousedown",this.mousedown),r.addEventListener("touchstart",this.touchstart,{passive:!1}),r.addEventListener("touchcancel",this.reset)}startMove(e,r){this._rotatePitchHandler.dragStart(e,r),$n.disableDrag()}move(e,r){let t=this.map,{bearingDelta:i,pitchDelta:a}=this._rotatePitchHandler.dragMove(e,r)||{};i&&t.setBearing(t.getBearing()+i),a&&t.setPitch(t.getPitch()+a)}off(){let e=this.element;e.removeEventListener("mousedown",this.mousedown),e.removeEventListener("touchstart",this.touchstart),window.removeEventListener("touchmove",this.touchmove),window.removeEventListener("touchend",this.touchend),e.removeEventListener("touchcancel",this.reset),this.offTemp()}offTemp(){$n.enableDrag(),window.removeEventListener("mousemove",this.mousemove),window.removeEventListener("mouseup",this.mouseup),window.removeEventListener("touchmove",this.touchmove),window.removeEventListener("touchend",this.touchend)}},q2={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"},kS={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]},CS="#3FB1CE",a0=class extends hf{},LS=class extends hf{},V2=class extends Nl{constructor(e){if(super(),this._onClick=r=>{this.fire(new LS("click",{originalEvent:r}))},this._onKeyPress=r=>{(r.code==="Space"||r.code==="Enter")&&this.togglePopup()},this._onKeyDown=r=>{if(!this._defaultMarker||!this._draggable||!this._map||!this._lngLat||r.composedPath()[0]!==this._element||r.altKey||r.ctrlKey||r.metaKey)return;let t=kS[r.key];if(!t)return;r.preventDefault(),r.stopPropagation();let i=r.shiftKey?10:1,a=this._map.project(this._lngLat);this.setLngLat(this._map.unproject(new Wr(a.x+t[0]*i,a.y+t[1]*i))),this._keyboardDragActive||(this._keyboardDragActive=!0,this.fire(new a0("dragstart"))),this.fire(new a0("drag"))},this._onKeyUp=r=>{kS[r.key]&&this._endKeyboardDrag()},this._onBlur=()=>{this._endKeyboardDrag()},this._onMapClick=r=>{let t=r.originalEvent.target,i=this._element;this._popup&&(t===i||i.contains(t))&&this.togglePopup()},this._update=r=>{if(!this._map)return;let t=this._map.loaded()&&!this._map.isMoving();(r?.type==="terrain"||r?.type==="render"&&!t)&&this._map.once("render",this._update),this._lngLat=Hz(this._lngLat,this._flatPos,this._map._camera.transform),this._flatPos=this._pos=this._map.project(this._lngLat)._add(this._offset),this._map.terrain&&(this._flatPos=this._map._camera.transform.locationToScreenPoint(this._lngLat)._add(this._offset));let i="";this._rotationAlignment==="viewport"||this._rotationAlignment==="auto"?i=`rotateZ(${this._rotation}deg)`:this._rotationAlignment==="map"&&(i=`rotateZ(${this._rotation-this._map.getBearing()}deg)`);let a="";this._pitchAlignment==="viewport"||this._pitchAlignment==="auto"?a="rotateX(0deg)":this._pitchAlignment==="map"&&(a=`rotateX(${this._map.getPitch()}deg)`),!this._subpixelPositioning&&(!r||r.type==="moveend")&&(this._pos=this._pos.round()),this._element.style.transform=`${q2[this._anchor]} translate(${this._pos.x}px, ${this._pos.y}px) ${a} ${i}`,yc.frameAsync(new AbortController,this._map._ownerWindow).then(()=>{this._updateOpacity(r?.type==="moveend")}).catch(()=>{})},this._onMove=r=>{if(!this._isDragging){let t=this._clickTolerance||this._map._clickTolerance;this._isDragging=r.point.dist(this._pointerdownPos)>=t}this._isDragging&&(this._pos=r.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents="none",this._state==="pending"&&(this._state="active",this.fire(new a0("dragstart"))),this.fire(new a0("drag")))},this._onUp=()=>{this._element.style.pointerEvents="auto",this._positionDelta=null,this._pointerdownPos=null,this._isDragging=!1,this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),this._state==="active"&&this.fire(new a0("dragend")),this._state="inactive"},this._addDragHandler=r=>{this._element.contains(r.originalEvent.target)&&(r.preventDefault(),this._positionDelta=r.point.sub(this._pos).add(this._offset),this._pointerdownPos=r.point,this._state="pending",this._map.on("mousemove",this._onMove),this._map.on("touchmove",this._onMove),this._map.once("mouseup",this._onUp),this._map.once("touchend",this._onUp))},this._anchor=e?.anchor||"center",this._color=e?.color||CS,this._scale=e?.scale||1,this._draggable=e?.draggable||!1,this._clickTolerance=e?.clickTolerance||0,this._subpixelPositioning=e?.subpixelPositioning||!1,this._isDragging=!1,this._roleManaged=!1,this._tabIndexManaged=!1,this._keyboardDragActive=!1,this._state="inactive",this._rotation=e?.rotation||0,this._rotationAlignment=e?.rotationAlignment||"auto",this._pitchAlignment=e?.pitchAlignment&&e.pitchAlignment!=="auto"?e.pitchAlignment:this._rotationAlignment,this.setOpacity(e?.opacity,e?.opacityWhenCovered),e?.element)this._element=e.element,this._offset=Wr.convert(e?.offset||[0,0]);else{this._defaultMarker=!0,this._element=$n.create("div");let r=Ase().cloneNode(!0);r.setAttributeNS(null,"height",`${41*this._scale}px`),r.setAttributeNS(null,"width",`${27*this._scale}px`),Mse(r).setAttributeNS(null,"fill",this._color),this._element.appendChild(r),this._offset=Wr.convert(e?.offset||[0,-14])}if(this._element.classList.add("maplibregl-marker"),this._element.addEventListener("dragstart",r=>{r.preventDefault()}),this._element.addEventListener("mousedown",r=>{r.preventDefault()}),$z(this._element,this._anchor,"marker"),e?.className)for(let r of e.className.split(" "))this._element.classList.add(r);this._popup=null}addTo(e){return this.remove(),this._map=e,this._defaultMarker&&!this._element.hasAttribute("aria-label")&&this._element.setAttribute("aria-label",e._getUIString("Marker.Title")),this._updateAccessibilityRole(),e.getCanvasContainer().appendChild(this._element),e.on("move",this._update),e.on("moveend",this._update),e.on("terrain",this._update),e.on("projectiontransition",this._update),this._element.addEventListener("click",this._onClick),this.setDraggable(this._draggable),this._update(),this._map.on("click",this._onMapClick),this}remove(){return this._opacityTimeout&&(clearTimeout(this._opacityTimeout),delete this._opacityTimeout),this._map&&(this._map.off("click",this._onMapClick),this._map.off("move",this._update),this._map.off("moveend",this._update),this._map.off("terrain",this._update),this._map.off("projectiontransition",this._update),this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler),this._map.off("mouseup",this._onUp),this._map.off("touchend",this._onUp),this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),delete this._map),this._element.removeEventListener("click",this._onClick),this._element.removeEventListener("keydown",this._onKeyDown),this._element.removeEventListener("keyup",this._onKeyUp),this._element.removeEventListener("blur",this._onBlur),this._element.removeEventListener("keypress",this._onKeyPress),this._keyboardDragActive=!1,this._element.remove(),this._popup&&this._popup.remove(),this}getLngLat(){return this._lngLat}setLngLat(e){return this._lngLat=An.convert(e),this._pos=null,this._update(),this._popup&&this._popup.setLngLat(this._lngLat),this}getElement(){return this._element}setPopup(e){if(this._popup&&(this._popup.remove(),this._popup=null,this._element.removeEventListener("keypress",this._onKeyPress)),e){if(!("offset"in e.options)){let r=13.5/Math.SQRT2;e.options.offset=this._defaultMarker?{top:[0,0],"top-left":[0,0],"top-right":[0,0],bottom:[0,-38.1],"bottom-left":[r,(24.6+r)*-1],"bottom-right":[-r,(24.6+r)*-1],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=e,this._element.addEventListener("keypress",this._onKeyPress)}return this._updateTabIndex(),this._updateAccessibilityRole(),this}setSubpixelPositioning(e){return this._subpixelPositioning=e,this}_endKeyboardDrag(){this._keyboardDragActive&&(this._keyboardDragActive=!1,this.fire(new a0("dragend")))}getPopup(){return this._popup}togglePopup(){let e=this._popup;if(this._element.style.opacity===this._opacityWhenCovered)return this;if(e)e.isOpen()?e.remove():(e.setLngLat(this._lngLat),e.addTo(this._map));else return this;return this}_updateOpacity(e=!1){var r,t;let i=(r=this._map)==null?void 0:r.terrain,a=this._map._camera.transform.isLocationOccluded(this._lngLat);if(!i||a){let p=a?this._opacityWhenCovered:this._opacity;this._element.style.opacity!==p&&(this._element.style.opacity=p,this._element.classList.toggle("maplibregl-marker-covered",a));return}if(e)this._opacityTimeout=null;else{if(this._opacityTimeout)return;this._opacityTimeout=setTimeout(()=>{this._opacityTimeout=null},100)}let o=this._map,s=o.terrain.depthAtPoint(this._pos),l=o.terrain.getElevationForLngLat(this._lngLat,o._camera.transform),n=o._camera.transform.lngLatToCameraDepth(this._lngLat,l),u=.006;if(n-s<u){this._element.style.opacity=this._opacity,this._element.classList.remove("maplibregl-marker-covered");return}let c=-this._offset.y/o._camera.transform.pixelsPerMeter,f=Math.sin(o.getPitch()*Math.PI/180)*c,h=o.terrain.depthAtPoint(new Wr(this._pos.x,this._pos.y-this._offset.y)),d=o._camera.transform.lngLatToCameraDepth(this._lngLat,l+f)-h>u;(t=this._popup)!=null&&t.isOpen()&&d&&this._popup.remove(),this._element.style.opacity=d?this._opacityWhenCovered:this._opacity,this._element.classList.toggle("maplibregl-marker-covered",d)}getOffset(){return this._offset}setOffset(e){return this._offset=Wr.convert(e),this._update(),this}addClassName(e){this._element.classList.add(e)}removeClassName(e){this._element.classList.remove(e)}toggleClassName(e){return this._element.classList.toggle(e)}setDraggable(e){return this._draggable=!!e,this._element.classList.toggle("maplibregl-marker-draggable",this._draggable),this._map&&(e?(this._map.on("mousedown",this._addDragHandler),this._map.on("touchstart",this._addDragHandler)):(this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler))),this._defaultMarker&&(this._draggable?(this._element.addEventListener("keydown",this._onKeyDown),this._element.addEventListener("keyup",this._onKeyUp),this._element.addEventListener("blur",this._onBlur)):(this._element.removeEventListener("keydown",this._onKeyDown),this._element.removeEventListener("keyup",this._onKeyUp),this._element.removeEventListener("blur",this._onBlur),this._endKeyboardDrag())),this._updateTabIndex(),this._updateAccessibilityRole(),this}isDraggable(){return this._draggable}_updateTabIndex(){this._popup||this._defaultMarker&&this._draggable?this._element.hasAttribute("tabindex")||(this._element.setAttribute("tabindex","0"),this._tabIndexManaged=!0):this._tabIndexManaged&&(this._tabIndexManaged=(this._element.getAttribute("tabindex")==="0"&&this._element.removeAttribute("tabindex"),!1))}_updateAccessibilityRole(){if(!this._defaultMarker||this._element.hasAttribute("role")&&!this._roleManaged)return;let e=this._draggable||this._popup?"button":"img";this._element.setAttribute("role",e),this._roleManaged=!0}setRotation(e){return this._rotation=e||0,this._update(),this}getRotation(){return this._rotation}setRotationAlignment(e){return this._rotationAlignment=e||"auto",this._update(),this}getRotationAlignment(){return this._rotationAlignment}setPitchAlignment(e){return this._pitchAlignment=e&&e!=="auto"?e:this._rotationAlignment,this._update(),this}getPitchAlignment(){return this._pitchAlignment}setOpacity(e,r){return(this._opacity===void 0||e===void 0&&r===void 0)&&(this._opacity="1",this._opacityWhenCovered="0.2"),e!==void 0&&(this._opacity=String(e)),r!==void 0&&(this._opacityWhenCovered=String(r)),this._map&&this._updateOpacity(!0),this}},T8={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0},ny=0,Xm=!1,n0=class extends hf{},G2=class extends hf{},FS=class extends hf{},A8=class extends Nl{constructor(e){super(),this._onSuccess=r=>{if(this._map){if(this._isOutOfMapMaxBounds(r)){this._setErrorState(),this.fire(new G2("outofmaxbounds",r)),this._updateMarker(),this._finish();return}if(this.options.trackUserLocation)switch(this._lastKnownPosition=r,this._watchState){case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-active");break;case"BACKGROUND":case"BACKGROUND_ERROR":this._watchState="BACKGROUND",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-background");break;default:throw Error(`Unexpected watchState ${this._watchState}`)}this.options.showUserLocation&&this._watchState!=="OFF"&&this._updateMarker(r),(!this.options.trackUserLocation||this._watchState==="ACTIVE_LOCK")&&this._updateCamera(r),this.options.showUserLocation&&this._dotElement.classList.remove("maplibregl-user-location-dot-stale"),this.fire(new G2("geolocate",r)),this._finish()}},this._updateCamera=r=>{let t=new An(r.coords.longitude,r.coords.latitude),i=r.coords.accuracy,a=this._map.getBearing(),o=yn({bearing:a},this.options.fitBoundsOptions),s=bh.fromLngLat(t,i);this._map.fitBounds(s,o,{geolocateSource:!0})},this._updateMarker=r=>{if(r){let t=new An(r.coords.longitude,r.coords.latitude);this._accuracyCircleMarker.setLngLat(t).addTo(this._map),this._userLocationDotMarker.setLngLat(t).addTo(this._map),this._accuracy=r.coords.accuracy,this._updateCircleRadiusIfNeeded()}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove()},this._onUpdate=()=>{this._updateCircleRadiusIfNeeded()},this._onError=r=>{if(this._map){if(r.code===1){this._watchState="OFF",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background-error"),this._geolocateButton.disabled=!0;let t=this._map._getUIString("GeolocateControl.LocationNotAvailable");this._geolocateButton.title=t,this._geolocateButton.setAttribute("aria-label",t),this._geolocationWatchID!==void 0&&this._clearWatch()}else{if(r.code===3&&Xm)return;this._setErrorState()}this._watchState!=="OFF"&&this.options.showUserLocation&&this._dotElement.classList.add("maplibregl-user-location-dot-stale"),this.fire(new FS("error",r)),this._finish()}},this._finish=()=>{this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},this._onMoveStart=r=>{if(!this._map)return;let t=r?.[0]instanceof ResizeObserverEntry;!r.geolocateSource&&this._watchState==="ACTIVE_LOCK"&&!t&&!this._map.isZooming()&&(this._watchState="BACKGROUND",this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active"),this.fire(new n0("trackuserlocationend")),this.fire(new n0("userlocationlostfocus")))},this._setupUI=()=>{this._map&&(this._container.addEventListener("contextmenu",r=>{r.preventDefault()}),this._geolocateButton=$n.create("button","maplibregl-ctrl-geolocate",this._container),$n.create("span","maplibregl-ctrl-icon",this._geolocateButton).setAttribute("aria-hidden","true"),this._geolocateButton.type="button",this._geolocateButton.disabled=!0)},this._finishSetupUI=r=>{if(this._map){if(r===!1){To("Geolocation support is not available so the GeolocateControl will be disabled.");let t=this._map._getUIString("GeolocateControl.LocationNotAvailable");this._geolocateButton.disabled=!0,this._geolocateButton.title=t,this._geolocateButton.setAttribute("aria-label",t)}else{let t=this._map._getUIString("GeolocateControl.FindMyLocation");this._geolocateButton.disabled=!1,this._geolocateButton.title=t,this._geolocateButton.setAttribute("aria-label",t)}this.options.trackUserLocation&&(this._geolocateButton.setAttribute("aria-pressed","false"),this._watchState="OFF"),this.options.showUserLocation&&(this._dotElement=$n.create("div","maplibregl-user-location-dot"),this._userLocationDotMarker=new V2({element:this._dotElement}),this._circleElement=$n.create("div","maplibregl-user-location-accuracy-circle"),this._accuracyCircleMarker=new V2({element:this._circleElement,pitchAlignment:"map"}),this.options.trackUserLocation&&(this._watchState="OFF"),this._map.on("zoom",this._onUpdate),this._map.on("move",this._onUpdate),this._map.on("rotate",this._onUpdate),this._map.on("pitch",this._onUpdate)),this._geolocateButton.addEventListener("click",()=>this.trigger()),this._setup=!0,this.options.trackUserLocation&&this._map.on("movestart",this._onMoveStart)}},this.options=yn({},T8,e)}onAdd(e){return this._map=e,this._container=$n.create("div","maplibregl-ctrl maplibregl-ctrl-group"),this._setupUI(),Tse().then(r=>this._finishSetupUI(r)),this._container}onRemove(){this._geolocationWatchID!==void 0&&(window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),this.options.showAccuracyCircle&&this._accuracyCircleMarker&&this._accuracyCircleMarker.remove(),this._container.remove(),this._map.off("movestart",this._onMoveStart),this._map.off("zoom",this._onUpdate),this._map.off("move",this._onUpdate),this._map.off("rotate",this._onUpdate),this._map.off("pitch",this._onUpdate),this._map=void 0,ny=0,Xm=!1}_isOutOfMapMaxBounds(e){let r=this._map.getMaxBounds(),t=e.coords;return r&&(t.longitude<r.getWest()||t.longitude>r.getEast()||t.latitude<r.getSouth()||t.latitude>r.getNorth())}_setErrorState(){switch(this._watchState){case"WAITING_ACTIVE":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-active-error");break;case"ACTIVE_LOCK":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-waiting");break;case"BACKGROUND":this._watchState="BACKGROUND_ERROR",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-waiting");break;case"ACTIVE_ERROR":case"BACKGROUND_ERROR":break;case"OFF":case void 0:break;default:throw Error(`Unexpected watchState ${this._watchState}`)}}_updateCircleRadiusIfNeeded(){let e=this._userLocationDotMarker.getLngLat();if(!this.options.showUserLocation||!this.options.showAccuracyCircle||!this._accuracy||!e)return;let r=this._map.project(e),t=this._map.unproject([r.x+100,r.y]),i=e.distanceTo(t)/100,a=2*this._accuracy/i;this._circleElement.style.width=`${a.toFixed(2)}px`,this._circleElement.style.height=`${a.toFixed(2)}px`}trigger(){if(!this._setup)return To("Geolocate control triggered before added to a map"),!1;if(this.options.trackUserLocation){switch(this._watchState){case"OFF":this._watchState="WAITING_ACTIVE",this.fire(new n0("trackuserlocationstart"));break;case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":case"BACKGROUND_ERROR":ny--,Xm=!1,this._watchState="OFF",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background-error"),this.fire(new n0("trackuserlocationend"));break;case"BACKGROUND":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-background"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new n0("trackuserlocationstart")),this.fire(new n0("userlocationfocus"));break;default:throw Error(`Unexpected watchState ${this._watchState}`)}switch(this._watchState){case"WAITING_ACTIVE":this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-active");break;case"ACTIVE_LOCK":this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-active");break;case"OFF":break;default:throw Error(`Unexpected watchState ${this._watchState}`)}if(this._watchState==="OFF"&&this._geolocationWatchID!==void 0)this._clearWatch();else if(this._geolocationWatchID===void 0){this._geolocateButton.classList.add("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","true"),ny++;let e;ny>1?(e={maximumAge:6e5,timeout:0},Xm=!0):(e=this.options.positionOptions,Xm=!1),this._geolocationWatchID=window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e)}}else window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0}_clearWatch(){window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove("maplibregl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","false"),this.options.showUserLocation&&this._updateMarker(null)}},M8={maxWidth:100,unit:"metric"},S8=class{constructor(e){this._onMove=()=>{Wz(this._map,this._container,this.options)},this.setUnit=r=>{this.options.unit=r,Wz(this._map,this._container,this.options)},this.options=Ot(Ot({},M8),e)}getDefaultPosition(){return"bottom-left"}onAdd(e){return this._map=e,this._container=$n.create("div","maplibregl-ctrl maplibregl-ctrl-scale",e.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container}onRemove(){this._container.remove(),this._map.off("move",this._onMove),this._map=void 0}},H2=class extends hf{},E8=class extends Nl{constructor(e={}){var r;super(),this._onFullscreenChange=()=>{var t;let i=window.document.fullscreenElement||window.document.webkitFullscreenElement;for(;(t=i?.shadowRoot)!=null&&t.fullscreenElement;)i=i.shadowRoot.fullscreenElement;i===this._container!==this._fullscreen&&this._handleFullscreenChange()},this._onClickFullscreen=()=>{this._isFullscreen()?this._exitFullscreen():this._requestFullscreen()},this._fullscreen=!1,this._pseudo=(r=e.pseudo)!=null?r:!1,e?.container&&(e.container instanceof HTMLElement?this._container=e.container:To("Full screen control 'container' must be a DOM element.")),"onfullscreenchange"in document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in document&&(this._fullscreenchange="MSFullscreenChange")}onAdd(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=$n.create("div","maplibregl-ctrl maplibregl-ctrl-group"),this._setupUI(),this._controlContainer}onRemove(){this._controlContainer.remove(),this._map=null,window.document.removeEventListener(this._fullscreenchange,this._onFullscreenChange)}_setupUI(){let e=this._fullscreenButton=$n.create("button","maplibregl-ctrl-fullscreen",this._controlContainer);$n.create("span","maplibregl-ctrl-icon",e).setAttribute("aria-hidden","true"),e.type="button",this._updateTitle(),this._fullscreenButton.addEventListener("click",this._onClickFullscreen),window.document.addEventListener(this._fullscreenchange,this._onFullscreenChange)}_updateTitle(){let e=this._getTitle();this._fullscreenButton.setAttribute("aria-label",e),this._fullscreenButton.title=e}_getTitle(){return this._map._getUIString(this._isFullscreen()?"FullscreenControl.Exit":"FullscreenControl.Enter")}_isFullscreen(){return this._fullscreen}_handleFullscreenChange(){this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle("maplibregl-ctrl-shrink"),this._fullscreenButton.classList.toggle("maplibregl-ctrl-fullscreen"),this._updateTitle(),this._fullscreen?(this.fire(new H2("fullscreenstart")),this._prevCooperativeGesturesEnabled=this._map.cooperativeGestures.isEnabled(),this._map.cooperativeGestures.disable()):(this.fire(new H2("fullscreenend")),this._prevCooperativeGesturesEnabled&&this._map.cooperativeGestures.enable())}_exitFullscreen(){this._pseudo?this._togglePseudoFullScreen():window.document.exitFullscreen?window.document.exitFullscreen():window.document.webkitCancelFullScreen?window.document.webkitCancelFullScreen():this._togglePseudoFullScreen()}_requestFullscreen(){this._pseudo?this._togglePseudoFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.webkitRequestFullscreen?this._container.webkitRequestFullscreen():this._togglePseudoFullScreen()}_togglePseudoFullScreen(){this._container.classList.toggle("maplibregl-pseudo-fullscreen"),this._handleFullscreenChange(),this._map.resize()}},k8=class{constructor(e){this._toggleTerrain=()=>{this._map.getTerrain()?this._map.setTerrain(null):this._map.setTerrain(this.options),this._updateTerrainIcon()},this._updateTerrainIcon=()=>{this._terrainButton.classList.remove("maplibregl-ctrl-terrain"),this._terrainButton.classList.remove("maplibregl-ctrl-terrain-enabled"),this._map.terrain?(this._terrainButton.classList.add("maplibregl-ctrl-terrain-enabled"),this._terrainButton.title=this._map._getUIString("TerrainControl.Disable")):(this._terrainButton.classList.add("maplibregl-ctrl-terrain"),this._terrainButton.title=this._map._getUIString("TerrainControl.Enable"))},this.options=e}onAdd(e){return this._map=e,this._container=$n.create("div","maplibregl-ctrl maplibregl-ctrl-group"),this._terrainButton=$n.create("button","maplibregl-ctrl-terrain",this._container),$n.create("span","maplibregl-ctrl-icon",this._terrainButton).setAttribute("aria-hidden","true"),this._terrainButton.type="button",this._terrainButton.addEventListener("click",this._toggleTerrain),this._updateTerrainIcon(),this._map.on("terrain",this._updateTerrainIcon),this._container}onRemove(){this._container.remove(),this._map.off("terrain",this._updateTerrainIcon),this._map=void 0}},C8=class{constructor(){this._toggleProjection=()=>{var e;let r=(e=this._map.getProjection())==null?void 0:e.type;r==="mercator"||!r?this._map.setProjection({type:"globe"}):this._map.setProjection({type:"mercator"}),this._updateGlobeIcon()},this._updateGlobeIcon=()=>{var e;this._globeButton.classList.remove("maplibregl-ctrl-globe"),this._globeButton.classList.remove("maplibregl-ctrl-globe-enabled"),((e=this._map.getProjection())==null?void 0:e.type)==="globe"?(this._globeButton.classList.add("maplibregl-ctrl-globe-enabled"),this._globeButton.title=this._map._getUIString("GlobeControl.Disable")):(this._globeButton.classList.add("maplibregl-ctrl-globe"),this._globeButton.title=this._map._getUIString("GlobeControl.Enable"))}}onAdd(e){return this._map=e,this._container=$n.create("div","maplibregl-ctrl maplibregl-ctrl-group"),this._globeButton=$n.create("button","maplibregl-ctrl-globe",this._container),$n.create("span","maplibregl-ctrl-icon",this._globeButton).setAttribute("aria-hidden","true"),this._globeButton.type="button",this._globeButton.addEventListener("click",this._toggleProjection),this._updateGlobeIcon(),this._map.on("styledata",this._updateGlobeIcon),this._map.on("projectiontransition",this._updateGlobeIcon),this._container}onRemove(){this._container.remove(),this._map.off("styledata",this._updateGlobeIcon),this._map.off("projectiontransition",this._updateGlobeIcon),this._globeButton.removeEventListener("click",this._toggleProjection),this._map=void 0}},D8={closeButton:!0,closeOnClick:!0,focusAfterOpen:!0,className:"",maxWidth:"240px",subpixelPositioning:!1,locationOccludedOpacity:void 0,padding:void 0},L8=["a[href]","[tabindex]:not([tabindex='-1'])","[contenteditable]:not([contenteditable='false'])","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].join(", "),$2=class extends hf{},F8=class extends Nl{constructor(e){super(),this._updateOpacity=()=>{this.options.locationOccludedOpacity!==void 0&&(this._map._camera.transform.isLocationOccluded(this.getLngLat())?this._container.style.opacity=`${this.options.locationOccludedOpacity}`:this._container.style.opacity="")},this.remove=()=>(this._content&&this._content.remove(),this._container&&(this._container.remove(),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("move",this._onClose),this._map.off("click",this._onClose),this._map.off("remove",this.remove),this._map.off("terrain",this._update),this._map.off("projectiontransition",this._update),this._map.off("mousemove",this._update),this._map.off("mouseup",this._update),this._map.off("drag",this._update),this._map._canvasContainer.classList.remove("maplibregl-track-pointer"),delete this._map,this.fire(new $2("close"))),this),this._update=r=>{let t=this._lngLat||this._trackPointer;if(!this._map||!t||!this._content)return;if(!this._container){if(this._container=$n.create("div","maplibregl-popup",this._map.getContainer()),this._tip=$n.create("div","maplibregl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className)for(let n of this.options.className.split(" "))this._container.classList.add(n);this._closeButton&&this._closeButton.setAttribute("aria-label",this._map._getUIString("Popup.Close")),this._trackPointer&&this._container.classList.add("maplibregl-popup-track-pointer")}this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._lngLat=Hz(this._lngLat,this._flatPos,this._map._camera.transform,this._trackPointer);let i;if(r&&"point"in r&&r.point&&(i=r.point),this._trackPointer&&!i)return;let a=this._flatPos=this._pos=this._trackPointer&&i?i:this._map.project(this._lngLat);this._map.terrain&&(this._flatPos=this._trackPointer&&i?i:this._map._camera.transform.locationToScreenPoint(this._lngLat));let o=this.options.anchor,s=Yz(this.options.offset);if(!o){let n=this._container.offsetWidth,u=this._container.offsetHeight,c=kse(this.options.padding),f;f=a.y+s.bottom.y<u+c.top?["top"]:a.y>this._map._camera.transform.height-u-c.bottom?["bottom"]:[],a.x<n/2+c.left?f.push("left"):a.x>this._map._camera.transform.width-n/2-c.right&&f.push("right"),o=f.length===0?"bottom":f.join("-")}let l=a.add(s[o]);this.options.subpixelPositioning||(l=l.round()),this._container.style.transform=`${q2[o]} translate(${l.x}px,${l.y}px)`,$z(this._container,o,"popup"),this._updateOpacity()},this._onClose=()=>{this.remove()},this.options=yn(Object.create(D8),e)}addTo(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClose),this.options.closeOnMove&&this._map.on("move",this._onClose),this._map.on("remove",this.remove),this._map.on("terrain",this._update),this._map.on("projectiontransition",this._update),this._update(),this._focusFirstElement(),this._trackPointer?(this._map.on("mousemove",this._update),this._map.on("mouseup",this._update),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")):this._map.on("move",this._update),this.fire(new $2("open")),this}isOpen(){return!!this._map}getLngLat(){return this._lngLat}setLngLat(e){return this._lngLat=An.convert(e),this._pos=null,this._flatPos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove",this._update),this._container&&this._container.classList.remove("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.remove("maplibregl-track-pointer")),this}trackPointer(){return this._trackPointer=!0,this._pos=null,this._flatPos=null,this._update(),this._map&&(this._map.off("move",this._update),this._map.on("mousemove",this._update),this._map.on("drag",this._update),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")),this}getElement(){return this._container}setText(e){return this.setDOMContent(document.createTextNode(e))}setHTML(e){let r=document.createDocumentFragment(),t=document.createElement("body"),i;for(t.innerHTML=e;i=t.firstChild,i;)r.appendChild(i);return this.setDOMContent(r)}getMaxWidth(){var e;return(e=this._container)==null?void 0:e.style.maxWidth}setMaxWidth(e){return this.options.maxWidth=e,this._update(),this}setDOMContent(e){if(this._content)for(;this._content.hasChildNodes();)this._content.firstChild&&this._content.removeChild(this._content.firstChild);else this._content=$n.create("div","maplibregl-popup-content",this._container);return this._content.appendChild(e),this._createCloseButton(),this._update(),this._focusFirstElement(),this}addClassName(e){return this._container&&this._container.classList.add(e),this}removeClassName(e){return this._container&&this._container.classList.remove(e),this}setOffset(e){return this.options.offset=e,this._update(),this}toggleClassName(e){if(this._container)return this._container.classList.toggle(e)}setSubpixelPositioning(e){this.options.subpixelPositioning=e}setPadding(e){this.options.padding=e,this._update()}_createCloseButton(){this.options.closeButton&&(this._closeButton=$n.create("button","maplibregl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.innerHTML="×",this._closeButton.addEventListener("click",this._onClose))}_focusFirstElement(){if(!this.options.focusAfterOpen||!this._container)return;let e=this._container.querySelector(L8);e&&e.focus()}},P8=vM}}),jse=de({"build/maplibre_worker.js"(e,r){"use strict";r.exports='var t1=Object.defineProperty,e1=Object.defineProperties;var r1=Object.getOwnPropertyDescriptors;var nh=Object.getOwnPropertySymbols;var i1=Object.prototype.hasOwnProperty,n1=Object.prototype.propertyIsEnumerable;var ah=(t,e,r)=>e in t?t1(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,je=(t,e)=>{for(var r in e||(e={}))i1.call(e,r)&&ah(t,r,e[r]);if(nh)for(var r of nh(e))n1.call(e,r)&&ah(t,r,e[r]);return t},Si=(t,e)=>e1(t,r1(e));var rt=(t,e,r)=>new Promise((i,n)=>{var a=l=>{try{o(r.next(l))}catch(u){n(u)}},s=l=>{try{o(r.throw(l))}catch(u){n(u)}},o=l=>l.done?i(l.value):Promise.resolve(l.value).then(a,s);o((r=r.apply(t,e)).next())});var a1=Object.create,ep=Object.defineProperty,s1=Object.getOwnPropertyDescriptor,o1=Object.getOwnPropertyNames,l1=Object.getPrototypeOf,rp=Object.prototype.hasOwnProperty,fl=(t,e)=>()=>(e||(t((e={exports:{}}).exports,e),t=null),e.exports),u1=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(var n=o1(e),a=0,s=n.length,o;a<s;a++)o=n[a],!rp.call(t,o)&&o!==r&&ep(t,o,{get:(l=>e[l]).bind(null,o),enumerable:!(i=s1(e,o))||i.enumerable});return t},h1=(t,e,r)=>(r=t==null?{}:a1(l1(t)),u1(e||!t||!t.__esModule||!rp.call(t,"default")?ep(r,"default",{value:t,enumerable:!0}):r,t));function B(t,e){this.x=t,this.y=e}B.prototype={clone(){return new B(this.x,this.y)},add(t){return this.clone()._add(t)},sub(t){return this.clone()._sub(t)},multByPoint(t){return this.clone()._multByPoint(t)},divByPoint(t){return this.clone()._divByPoint(t)},mult(t){return this.clone()._mult(t)},div(t){return this.clone()._div(t)},rotate(t){return this.clone()._rotate(t)},rotateAround(t,e){return this.clone()._rotateAround(t,e)},matMult(t){return this.clone()._matMult(t)},unit(){return this.clone()._unit()},perp(){return this.clone()._perp()},round(){return this.clone()._round()},mag(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals(t){return this.x===t.x&&this.y===t.y},dist(t){return Math.sqrt(this.distSqr(t))},distSqr(t){let e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle(){return Math.atan2(this.y,this.x)},angleTo(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith(t){return this.angleWithSep(t.x,t.y)},angleWithSep(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult(t){let e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add(t){return this.x+=t.x,this.y+=t.y,this},_sub(t){return this.x-=t.x,this.y-=t.y,this},_mult(t){return this.x*=t,this.y*=t,this},_div(t){return this.x/=t,this.y/=t,this},_multByPoint(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint(t){return this.x/=t.x,this.y/=t.y,this},_unit(){return this._div(this.mag()),this},_perp(){let t=this.y;return this.y=this.x,this.x=-t,this},_rotate(t){let e=Math.cos(t),r=Math.sin(t),i=e*this.x-r*this.y,n=r*this.x+e*this.y;return this.x=i,this.y=n,this},_rotateAround(t,e){let r=Math.cos(t),i=Math.sin(t),n=e.x+r*(this.x-e.x)-i*(this.y-e.y),a=e.y+i*(this.x-e.x)+r*(this.y-e.y);return this.x=n,this.y=a,this},_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},constructor:B},B.convert=function(t){if(t instanceof B)return t;if(Array.isArray(t))return new B(+t[0],+t[1]);if(t.x!==void 0&&t.y!==void 0)return new B(+t.x,+t.y);throw Error("Expected [x, y] or {x, y} point format")};function c1(t,e,r,i){let n=3*t,a=3*(r-t)-n,s=1-n-a,o=3*e,l=3*(i-e)-o,u=1-o-l;return function(h,c=1e-6){if(h<=0)return 0;if(h>=1)return 1;let p=h;for(let y=0;y<8;y++){let m=((s*p+a)*p+n)*p-h;if(Math.abs(m)<c)return((u*p+l)*p+o)*p;let g=(3*s*p+2*a)*p+n;if(Math.abs(g)<1e-6)break;p-=m/g}let f=0,d=1;p=h;for(let y=0;y<20;y++){let m=((s*p+a)*p+n)*p;if(Math.abs(m-h)<c)break;h>m?f=p:d=p,p=(f+d)*.5}return((u*p+l)*p+o)*p}}var Nn;function p1(){return Nn!=null||(Nn=typeof OffscreenCanvas<"u"&&!!new OffscreenCanvas(1,1).getContext("2d")&&typeof createImageBitmap=="function"),Nn}var Un;function f1(){if(Un==null&&(Un=!1,p1())){let t=new OffscreenCanvas(5,5).getContext("2d",{willReadFrequently:!0});if(t){for(let r=0;r<25;r++){let i=r*4;t.fillStyle=`rgb(${i},${i+1},${i+2})`,t.fillRect(r%5,Math.floor(r/5),1,1)}let e=t.getImageData(0,0,5,5).data;for(let r=0;r<100;r++)if(r%4!=3&&e[r]!==r){Un=!0;break}}}return Un||!1}var pe=typeof Float32Array<"u"?Float32Array:Array;Math.PI/180,180/Math.PI;function d1(){var t=new pe(9);return pe!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function ip(){var t=new pe(3);return pe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function y1(t){var e=t[0],r=t[1],i=t[2];return Math.sqrt(e*e+r*r+i*i)}function sh(t,e,r){var i=new pe(3);return i[0]=t,i[1]=e,i[2]=r,i}function m1(t,e){var r=e[0],i=e[1],n=e[2],a=r*r+i*i+n*n;return a>0&&(a=1/Math.sqrt(a)),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a,t}function g1(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ks(t,e,r){var i=e[0],n=e[1],a=e[2],s=r[0],o=r[1],l=r[2];return t[0]=n*l-a*o,t[1]=a*s-i*l,t[2]=i*o-n*s,t}var x1=y1;(function(){var t=ip();return function(e,r,i,n,a,s){var o,l;for(r||(r=3),i||(i=0),l=n?Math.min(n*r+i,e.length):e.length,o=i;o<l;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],a(t,t,s),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2];return e}})();function v1(){var t=new pe(4);return pe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function b1(t,e){var r=e[0],i=e[1],n=e[2],a=e[3],s=r*r+i*i+n*n+a*a;return s>0&&(s=1/Math.sqrt(s)),t[0]=r*s,t[1]=i*s,t[2]=n*s,t[3]=a*s,t}function w1(t,e,r){var i=e[0],n=e[1],a=e[2],s=e[3];return t[0]=r[0]*i+r[4]*n+r[8]*a+r[12]*s,t[1]=r[1]*i+r[5]*n+r[9]*a+r[13]*s,t[2]=r[2]*i+r[6]*n+r[10]*a+r[14]*s,t[3]=r[3]*i+r[7]*n+r[11]*a+r[15]*s,t}(function(){var t=v1();return function(e,r,i,n,a,s){var o,l;for(r||(r=4),i||(i=0),l=n?Math.min(n*r+i,e.length):e.length,o=i;o<l;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],t[3]=e[o+3],a(t,t,s),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2],e[o+3]=t[3];return e}})();function oh(){var t=new pe(4);return pe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function D1(t,e,r){r*=.5;var i=Math.sin(r);return t[0]=i*e[0],t[1]=i*e[1],t[2]=i*e[2],t[3]=Math.cos(r),t}function Ts(t,e,r,i){var n=e[0],a=e[1],s=e[2],o=e[3],l=r[0],u=r[1],h=r[2],c=r[3],p,f=n*l+a*u+s*h+o*c,d,y,m;return f<0&&(f=-f,l=-l,u=-u,h=-h,c=-c),1-f>1e-6?(p=Math.acos(f),d=Math.sin(p),y=Math.sin((1-i)*p)/d,m=Math.sin(i*p)/d):(y=1-i,m=i),t[0]=y*n+m*l,t[1]=y*a+m*u,t[2]=y*s+m*h,t[3]=y*o+m*c,t}function _1(t,e){var r=e[0]+e[4]+e[8],i;if(r>0)i=Math.sqrt(r+1),t[3]=.5*i,i=.5/i,t[0]=(e[5]-e[7])*i,t[1]=(e[6]-e[2])*i,t[2]=(e[1]-e[3])*i;else{var n=0;e[4]>e[0]&&(n=1),e[8]>e[n*3+n]&&(n=2);var a=(n+1)%3,s=(n+2)%3;i=Math.sqrt(e[n*3+n]-e[a*3+a]-e[s*3+s]+1),t[n]=.5*i,i=.5/i,t[3]=(e[a*3+s]-e[s*3+a])*i,t[a]=(e[a*3+n]+e[n*3+a])*i,t[s]=(e[s*3+n]+e[n*3+s])*i}return t}var lh=b1;(function(){var t=ip(),e=sh(1,0,0),r=sh(0,1,0);return function(i,n,a){var s=g1(n,a);return s<-.999999?(ks(t,e,n),x1(t)<1e-6&&ks(t,r,n),m1(t,t),D1(i,t,Math.PI),i):s>.999999?(i[0]=0,i[1]=0,i[2]=0,i[3]=1,i):(ks(t,n,a),i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=1+s,lh(i,i))}})(),(function(){var t=oh(),e=oh();return function(r,i,n,a,s,o){return Ts(t,i,s,o),Ts(e,n,a,o),Ts(r,t,e,2*o*(1-o)),r}})(),(function(){var t=d1();return function(e,r,i,n){return t[0]=i[0],t[3]=i[1],t[6]=i[2],t[1]=n[0],t[4]=n[1],t[7]=n[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],lh(e,_1(e,t))}})();function A1(){var t=new pe(2);return pe!=Float32Array&&(t[0]=0,t[1]=0),t}(function(){var t=A1();return function(e,r,i,n,a,s){var o,l;for(r||(r=2),i||(i=0),l=n?Math.min(n*r+i,e.length):e.length,o=i;o<l;o+=r)t[0]=e[o],t[1]=e[o+1],a(t,t,s),e[o]=t[0],e[o+1]=t[1];return e}})();var mt=8192;var np="__$json__:";function Ki(t){return t instanceof Error?t:Error(typeof t=="string"?t:String(t))}function S1(t){if(t<=0)return 0;if(t>=1)return 1;let e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function E1(t,e,r,i){return c1(t,e,r,i)}var d5=E1(.25,.1,.25,1);function Ji(t,e,r){return Math.min(r,Math.max(e,t))}function F1(t,e,r){let i=r-e,n=((t-e)%i+i)%i+e;return n===e?r:n}function Gt(t,...e){for(let r of e)for(let i in r)t[i]=r[i];return t}function k1(t){return Math.log(t)/Math.LN2%1==0}function Ia(t,e,r){let i={};for(let n in t)i[n]=e.call(r||this,t[n],n,t);return i}function T1(t,e,r){let i={};for(let n in t)e.call(r||this,t[n],n,t)&&(i[n]=t[n]);return i}function He(t){return Array.isArray(t)?t.map(He):typeof t=="object"&&t?Ia(t,He):t}var uh={};function Bt(t){uh[t]||(typeof console<"u"&&console.warn(t),uh[t]=!0)}function Ke(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function mr(t){return typeof WorkerGlobalScope<"u"&&t!==void 0&&t instanceof WorkerGlobalScope}function Ca(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap}function I1(t,e,r,i,n){let a=Math.max(-e,0)*4,s=(Math.max(0,r)-r)*i*4+a,o=i*4,l=Math.max(0,e),u=Math.max(0,r),h=Math.min(t.width,e+i),c=Math.min(t.height,r+n);return{rect:{x:l,y:u,width:h-l,height:c-u},layout:[{offset:s,stride:o}]}}function C1(t,e,r,i,n){return rt(this,null,function*(){if(typeof VideoFrame>"u")throw Error("VideoFrame not supported");let a=new VideoFrame(t,{timestamp:0});try{let s=a==null?void 0:a.format;if(!s||!(s.startsWith("BGR")||s.startsWith("RGB")))throw Error(`Unrecognized format ${s}`);let o=s.startsWith("BGR"),l=new Uint8ClampedArray(i*n*4);if(yield a.copyTo(l,I1(t,e,r,i,n)),o)for(let u=0;u<l.length;u+=4){let h=l[u];l[u]=l[u+2],l[u+2]=h}return l}finally{a.close()}})}var Ei,Fi;function M1(t,e,r,i,n){let a=t.width,s=t.height;(!Ei||!Fi)&&(Ei=new OffscreenCanvas(a,s),Fi=Ei.getContext("2d",{willReadFrequently:!0})),Ei.width=a,Ei.height=s,Fi.drawImage(t,0,0,a,s);let o=Fi.getImageData(e,r,i,n);return Fi.clearRect(0,0,a,s),o.data}function ap(t,e,r,i,n){return rt(this,null,function*(){if(f1())try{return yield C1(t,e,r,i,n)}catch(a){}return M1(t,e,r,i,n)})}function hh(t,e,r,i){return t.addEventListener(e,r,i),{unsubscribe:()=>{t.removeEventListener(e,r,i)}}}function ch(t){return t*Math.PI/180}var ph="AbortError",dl=class extends Error{constructor(t=ph){super(t instanceof Error?t.message:t),this.name=ph,t instanceof Error&&t.stack&&(this.stack=t.stack)}};function yl(t){return t instanceof Error&&t.name==="AbortError"}function B1(t){if(t.aborted)throw new dl(t.reason)}var ml={MAX_PARALLEL_IMAGE_REQUESTS:16,MAX_PARALLEL_IMAGE_REQUESTS_PER_FRAME:8,MAX_TILE_CACHE_ZOOM_LEVELS:5,REGISTERED_PROTOCOLS:{},WORKER_URL:""};function P1(t){return ml.REGISTERED_PROTOCOLS[t.substring(0,t.indexOf("://"))]}function sp(t,e){ml.REGISTERED_PROTOCOLS[t]=e}function op(t){delete ml.REGISTERED_PROTOCOLS[t]}var fh="global-dispatcher",ya=class extends Error{constructor(t,e,r,i){super(`AJAXError: ${e} (${t}): ${r}`),this.status=t,this.statusText=e,this.url=r,this.body=i}};function lp(){var t;if(mr(self))return(t=self.worker)==null?void 0:t.referrer;if(window.location.protocol==="blob:")try{return window.parent.location.href}catch(e){}return window.location.href}var z1=t=>{var e;return t.startsWith("file:")||((e=lp())==null?void 0:e.startsWith("file:"))&&!/^\\w+:/.test(t)};function L1(t,e){return rt(this,null,function*(){let r=new Request(t.url,{method:t.method||"GET",body:t.body,credentials:t.credentials,headers:t.headers,cache:t.cache,referrer:lp(),referrerPolicy:t.referrerPolicy,signal:e.signal});t.type==="json"&&!r.headers.has("Accept")&&r.headers.set("Accept","application/json");let i;try{i=yield fetch(r)}catch(s){throw yl(s)?s:new ya(0,Ki(s).message,t.url,new Blob)}if(!i.ok){let s=yield i.blob();throw new ya(i.status,i.statusText,t.url,s)}let n;n=t.type==="arrayBuffer"||t.type==="image"?i.arrayBuffer():t.type==="json"?i.json():i.text();let a=yield n;return B1(e.signal),{data:a,cacheControl:i.headers.get("Cache-Control"),expires:i.headers.get("Expires"),etag:i.headers.get("ETag")}})}function V1(t,e){return new Promise((r,i)=>{var a;let n=new XMLHttpRequest;n.open(t.method||"GET",t.url,!0),(t.type==="arrayBuffer"||t.type==="image")&&(n.responseType="arraybuffer");for(let s in t.headers)n.setRequestHeader(s,t.headers[s]);t.type==="json"&&(n.responseType="text",(a=t.headers)!=null&&a.Accept||n.setRequestHeader("Accept","application/json")),n.withCredentials=t.credentials==="include",n.onerror=()=>{i(Error(n.statusText))},n.onload=()=>{if(!e.signal.aborted)if((n.status>=200&&n.status<300||n.status===0)&&n.response!==null){let s=n.response;if(t.type==="json")try{s=JSON.parse(n.response)}catch(o){i(o);return}r({data:s,cacheControl:n.getResponseHeader("Cache-Control"),expires:n.getResponseHeader("Expires"),etag:n.getResponseHeader("ETag")})}else{let s=new Blob([n.response],{type:n.getResponseHeader("Content-Type")});i(new ya(n.status,n.statusText,t.url,s))}},e.signal.addEventListener("abort",()=>{n.abort(),i(new dl(e.signal.reason))}),n.send(t.body)})}var Ma=function(t,e){return rt(this,null,function*(){var r,i;if(t.url.includes("://")&&!/^https?:|^file:/.test(t.url)){let n=P1(t.url);if(n){let a=yield n(t,e);return!a.data&&t.type==="arrayBuffer"?Gt(a,{data:new ArrayBuffer(0)}):a}if(mr(self)&&((r=self.worker)!=null&&r.actor))return self.worker.actor.sendAsync({type:"GR",data:t,targetMapId:fh},e)}if(!z1(t.url)){if(fetch&&Request&&AbortController&&Object.hasOwn(Request.prototype,"signal"))return L1(t,e);if(mr(self)&&((i=self.worker)!=null&&i.actor))return self.worker.actor.sendAsync({type:"GR",data:t,mustQueue:!0,targetMapId:fh},e)}return V1(t,e)})},up=(t,e)=>Ma(Gt(t,{type:"json"}),e),hp=(t,e)=>Ma(Gt(t,{type:"arrayBuffer"}),e);function dh(t,e,r){var i;(i=r[t])!=null&&i.includes(e)||(r[t]||(r[t]=[]),r[t].push(e))}function Is(t,e,r){if(r!=null&&r[t]){let i=r[t].indexOf(e);i!==-1&&r[t].splice(i,1)}}var cp=class{constructor(t,e={}){Gt(this,e),this.type=t}},ma=class extends cp{constructor(t,e={}){super("error",Gt({error:t},e))}},O1=class{on(t,e){return this._listeners||(this._listeners={}),dh(t,e,this._listeners),{unsubscribe:()=>{this.off(t,e)}}}off(t,e){return Is(t,e,this._listeners),Is(t,e,this._oneTimeListeners),this}once(t,e){return e?(this._oneTimeListeners||(this._oneTimeListeners={}),dh(t,e,this._oneTimeListeners),this):new Promise(r=>this.once(t,r))}fire(t,e){var n,a,s,o,l,u;let r=typeof t=="string"?new cp(t,e||{}):t,i=r.type;if(this.listens(i)){r.target=this;let h=(s=(a=(n=this._listeners)==null?void 0:n[i])==null?void 0:a.slice())!=null?s:[];for(let f of h)f.call(this,r);let c=(u=(l=(o=this._oneTimeListeners)==null?void 0:o[i])==null?void 0:l.slice())!=null?u:[];for(let f of c)Is(i,f,this._oneTimeListeners),f.call(this,r);let p=this._eventedParent;p&&(Gt(r,typeof this._eventedParentData=="function"?this._eventedParentData():this._eventedParentData),p.fire(r))}else r instanceof ma&&console.error(r.error);return this}listens(t){var e,r,i,n,a;return!!((r=(e=this._listeners)==null?void 0:e[t])!=null&&r.length||(n=(i=this._oneTimeListeners)==null?void 0:i[t])!=null&&n.length||(a=this._eventedParent)!=null&&a.listens(t))}setEventedParent(t,e){return this._eventedParent=t,this._eventedParentData=e,this}},pp={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number",length:2},centerAltitude:{type:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},roll:{type:"number",default:0,units:"degrees"},state:{type:"state",default:{}},light:{type:"light"},sky:{type:"sky"},projection:{type:"projection"},terrain:{type:"terrain"},sources:{required:!0,type:"sources"},sprite:{type:"sprite"},glyphs:{type:"string"},"font-faces":{type:"fontFaces"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},encoding:{type:"enum",values:{mvt:{},mlt:{}},default:"mvt"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{},custom:{}},default:"mapbox"},redFactor:{type:"number",default:1},blueFactor:{type:"number",default:1},greenFactor:{type:"number",default:1},baseShift:{type:"number",default:0},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{required:!0,type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"filter"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},"color-relief":{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_color-relief","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"},"fill-extrusion-rounded-corner-distance":{type:"number",default:0,minimum:0,units:"meters","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image",{"!":"icon-overlap"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-overlap":{type:"enum",values:{never:{},always:{},cooperative:{}},requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"padding",default:[2],units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},"viewport-glyph":{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-variable-anchor-offset":{type:"variableAnchorOffsetCollection",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field",{"!":"text-overlap"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-overlap":{type:"enum",values:{never:{},always:{},cooperative:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-height-offset":{type:"number",default:0,units:"meters",requires:[{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-height-anchor":{type:"enum",values:{ground:{},absolute:{}},default:"ground",requires:["symbol-height-offset"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},"layout_color-relief":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible",expression:{interpolated:!1,parameters:["global-state"]},"property-type":"data-constant"}},filter:{type:"boolean",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"expression_name",minimum:1},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},sky:{"sky-color":{type:"color","property-type":"data-constant",default:"#88C6FC",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-color":{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fog-color":{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fog-ground-blend":{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-fog-blend":{type:"number","property-type":"data-constant",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"sky-horizon-blend":{type:"number","property-type":"data-constant",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"atmosphere-blend":{type:"number","property-type":"data-constant",default:.8,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number",minimum:0,default:1}},projection:{type:{type:"projectionDefinition",default:"mercator","property-type":"data-constant",transition:!1,expression:{interpolated:!0,parameters:["zoom"]}}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_color-relief","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-layer-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","global-state"]},"property-type":"data-constant"},"fill-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-layer-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","global-state"]},"property-type":"data-constant"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},resampling:{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"numberArray",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-altitude":{type:"numberArray",default:45,minimum:0,maximum:90,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"colorArray",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"colorArray",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-method":{type:"enum",values:{standard:{},basic:{},combined:{},igor:{},multidirectional:{}},default:"standard",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},resampling:{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},"paint_color-relief":{"color-relief-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"color-relief-color":{type:"color",transition:!1,expression:{interpolated:!0,parameters:["elevation"]},"property-type":"color-ramp"},resampling:{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}},interpolation:{type:"array",value:"interpolation_name",minimum:1},interpolation_name:{type:"enum",values:{linear:{syntax:{overloads:[{parameters:[],"output-type":"interpolation"}],parameters:[]}},exponential:{syntax:{overloads:[{parameters:["base"],"output-type":"interpolation"}],parameters:[{name:"base",type:"number literal"}]}},"cubic-bezier":{syntax:{overloads:[{parameters:["x1","y1","x2","y2"],"output-type":"interpolation"}],parameters:[{name:"x1",type:"number literal"},{name:"y1",type:"number literal"},{name:"x2",type:"number literal"},{name:"y2",type:"number literal"}]}}}}},w=pp,fp=["type","source","source-layer","minzoom","maxzoom","filter","layout"],E=class{constructor(t,e,r,i,n="error"){this.message=(t?`${t}: `:"")+r,i&&(this.identifier=i),this.severity=n,e!=null&&e.__line__&&(this.line=e.__line__)}},dn={kind:"null"},I={kind:"number"},Y={kind:"string"},tt={kind:"boolean"},ce={kind:"color"},Ba={kind:"projectionDefinition"},fr={kind:"object"},Z={kind:"value"},R1={kind:"error"},Pa={kind:"collator"},yn={kind:"formatted"},za={kind:"padding"},Qi={kind:"colorArray"},La={kind:"numberArray"},mn={kind:"resolvedImage"},Va={kind:"variableAnchorOffsetCollection"};function Ut(t,e){return{kind:"array",itemType:t,N:e}}function yt(t){if(t.kind==="array"){let e=yt(t.itemType);return typeof t.N=="number"?`array<${e}, ${t.N}>`:t.itemType.kind==="value"?"array":`array<${e}>`}return t.kind}var $1=[dn,I,Y,tt,ce,Ba,yn,fr,Ut(Z),za,La,Qi,mn,Va];function tn(t,e){if(e.kind==="error")return null;if(t.kind==="array"){if(e.kind==="array"&&(e.N===0&&e.itemType.kind==="value"||!tn(t.itemType,e.itemType))&&(typeof t.N!="number"||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if(t.kind==="value"){for(let r of $1)if(!tn(r,e))return null}}return`Expected ${yt(t)} but found ${yt(e)} instead.`}function gl(t,e){return e.some(r=>r.kind===t.kind)}function dr(t,e){return e.some(r=>r==="null"?t===null:r==="array"?Array.isArray(t):r==="object"?t&&!Array.isArray(t)&&typeof t=="object":r===typeof t)}function Ge(t,e){return t.kind==="array"&&e.kind==="array"?t.itemType.kind===e.itemType.kind&&typeof t.N=="number":t.kind===e.kind}var dp=.96422,yp=.82521,mp=4/29,Ks=6/29,gp=3*Ks*Ks,N1=Math.PI/180,U1=180/Math.PI;function xp(t){return t%=360,t<0&&(t+=360),t}function vp([t,e,r,i]){t=Cs(t),e=Cs(e),r=Cs(r);let n,a,s=Ms((.2225045*t+.7168786*e+.0606169*r)/1);t===e&&e===r?n=a=s:(n=Ms((.4360747*t+.3850649*e+.1430804*r)/dp),a=Ms((.0139322*t+.0971045*e+.7141733*r)/yp));let o=116*s-16;return[o<0?0:o,500*(n-s),200*(s-a),i]}function Cs(t){return t<=.04045?t/12.92:((t+.055)/1.055)**2.4}function Ms(t){return t>.008856451679035631?t**(1/3):t/gp+mp}function bp([t,e,r,i]){let n=(t+16)/116,a=isNaN(e)?n:n+e/500,s=isNaN(r)?n:n-r/200;return n=1*Ps(n),a=dp*Ps(a),s=yp*Ps(s),[Bs(3.1338561*a-1.6168667*n-.4906146*s),Bs(-.9787684*a+1.9161415*n+.033454*s),Bs(.0719453*a-.2289914*n+1.4052427*s),i]}function Bs(t){return t=t<=.00304?12.92*t:1.055*t**(1/2.4)-.055,t<0?0:t>1?1:t}function Ps(t){return t>Ks?t*t*t:gp*(t-mp)}function q1(t){let[e,r,i,n]=vp(t),a=Math.sqrt(r*r+i*i);return[Math.round(a*1e4)?xp(Math.atan2(i,r)*U1):NaN,a,e,n]}function j1([t,e,r,i]){return t=isNaN(t)?0:t*N1,bp([r,Math.cos(t)*e,Math.sin(t)*e,i])}function G1([t,e,r,i]){t=xp(t),e/=100,r/=100;function n(a){let s=(a+t/30)%12,o=e*Math.min(r,1-r);return r-o*Math.max(-1,Math.min(s-3,9-s,1))}return[n(0),n(8),n(4),i]}var X1=Object.hasOwn||function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};function ji(t,e){return X1(t,e)?t[e]:void 0}function Y1(t){if(t=t.toLowerCase().trim(),t==="transparent")return[0,0,0,0];let e=ji(W1,t);if(e){let[i,n,a]=e;return[i/255,n/255,a/255,1]}if(t.startsWith("#")&&/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(t)){let i=t.length<6?1:2,n=1;return[qn(t.slice(n,n+=i)),qn(t.slice(n,n+=i)),qn(t.slice(n,n+=i)),qn(t.slice(n,n+i)||"ff")]}if(t.startsWith("rgb")){let i=t.match(/^rgba?\\(\\s*([\\de.+-]+)(%)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)(%)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)(%)?(?:\\s*([,\\/])\\s*([\\de.+-]+)(%)?)?\\s*\\)$/);if(i){let[n,a,s,o,l,u,h,c,p,f,d,y]=i,m=[o||" ",h||" ",f].join("");if(m==="  "||m==="  /"||m===",,"||m===",,,"){let g=[s,u,p].join(""),x=g==="%%%"?100:g===""?255:0;if(x){let v=[Rr(+a/x,0,1),Rr(+l/x,0,1),Rr(+c/x,0,1),d?yh(+d,y):1];if(mh(v))return v}}return}}let r=t.match(/^hsla?\\(\\s*([\\de.+-]+)(?:deg)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)%(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)%(?:\\s*([,\\/])\\s*([\\de.+-]+)(%)?)?\\s*\\)$/);if(r){let[i,n,a,s,o,l,u,h,c]=r,p=[a||" ",o||" ",u].join("");if(p==="  "||p==="  /"||p===",,"||p===",,,"){let f=[+n,Rr(+s,0,100),Rr(+l,0,100),h?yh(+h,c):1];if(mh(f))return G1(f)}}}function qn(t){return parseInt(t.padEnd(2,t),16)/255}function yh(t,e){return Rr(e?t/100:t,0,1)}function Rr(t,e,r){return Math.min(Math.max(e,t),r)}function mh(t){return!t.some(Number.isNaN)}var W1={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function Je(t,e,r){return t+r*(e-t)}function ti(t,e,r){return t.map((i,n)=>Je(i,e[n],r))}function Z1(t){return t==="rgb"||t==="hcl"||t==="lab"}var Pt,gt=(Pt=class{constructor(e,r,i,n=1,a=!0){this.r=e,this.g=r,this.b=i,this.a=n,a||(this.r*=n,this.g*=n,this.b*=n,n||this.overwriteGetter("rgb",[e,r,i,n]))}static parse(e){if(e instanceof Pt)return e;if(typeof e!="string")return;let r=Y1(e);if(r)return new Pt(...r,!1)}get rgb(){let{r:e,g:r,b:i,a:n}=this,a=n||1/0;return this.overwriteGetter("rgb",[e/a,r/a,i/a,n])}get hcl(){return this.overwriteGetter("hcl",q1(this.rgb))}get lab(){return this.overwriteGetter("lab",vp(this.rgb))}overwriteGetter(e,r){return Object.defineProperty(this,e,{value:r}),r}toString(){let[e,r,i,n]=this.rgb;return`rgba(${[e,r,i].map(a=>Math.round(a*255)).join(",")},${n})`}static interpolate(e,r,i,n="rgb"){switch(n){case"rgb":{let[a,s,o,l]=ti(e.rgb,r.rgb,i);return new Pt(a,s,o,l,!1)}case"hcl":{let[a,s,o,l]=e.hcl,[u,h,c,p]=r.hcl,f,d;if(!isNaN(a)&&!isNaN(u)){let v=u-a;u>a&&v>180?v-=360:u<a&&a-u>180&&(v+=360),f=a+i*v}else isNaN(a)?isNaN(u)?f=NaN:(f=u,(o===1||o===0)&&(d=h)):(f=a,(c===1||c===0)&&(d=s));let[y,m,g,x]=j1([f,d!=null?d:Je(s,h,i),Je(o,c,i),Je(l,p,i)]);return new Pt(y,m,g,x,!1)}case"lab":{let[a,s,o,l]=bp(ti(e.lab,r.lab,i));return new Pt(a,s,o,l,!1)}}}},Pt.black=new Pt(0,0,0,1),Pt.white=new Pt(1,1,1,1),Pt.transparent=new Pt(0,0,0,0),Pt.red=new Pt(1,0,0,1),Pt),H1=["bottom","center","top"],Js=class{constructor(t,e,r,i,n,a){this.text=t,this.image=e,this.scale=r,this.fontStack=i,this.textColor=n,this.verticalAlign=a}},ze=class la{constructor(e){this.sections=e}static fromString(e){return new la([new Js(e,null,null,null,null,null)])}isEmpty(){return this.sections.length===0||!this.sections.some(e=>e.text.length!==0||e.image&&e.image.name.length!==0)}static factory(e){return e instanceof la?e:la.fromString(e)}toString(){return this.sections.length===0?"":this.sections.map(e=>e.text).join("")}},Ae=class Li{constructor(e){this.values=e.slice()}static parse(e){if(e instanceof Li)return e;if(typeof e=="number")return new Li([e,e,e,e]);if(Array.isArray(e)&&!(e.length<1||e.length>4)){for(let r of e)if(typeof r!="number")return;switch(e.length){case 1:e=[e[0],e[0],e[0],e[0]];break;case 2:e=[e[0],e[1],e[0],e[1]];break;case 3:e=[e[0],e[1],e[2],e[1]]}return new Li(e)}}toString(){return JSON.stringify(this.values)}static interpolate(e,r,i){return new Li(ti(e.values,r.values,i))}},Se=class Vi{constructor(e){this.values=e.slice()}static parse(e){if(e instanceof Vi)return e;if(typeof e=="number")return new Vi([e]);if(Array.isArray(e)){for(let r of e)if(typeof r!="number")return;return new Vi(e)}}toString(){return JSON.stringify(this.values)}static interpolate(e,r,i){return new Vi(ti(e.values,r.values,i))}},oe=class Oi{constructor(e){this.values=e.slice()}static parse(e){if(e instanceof Oi)return e;if(typeof e=="string"){let i=gt.parse(e);return i?new Oi([i]):void 0}if(!Array.isArray(e))return;let r=[];for(let i of e){if(typeof i!="string")return;let n=gt.parse(i);if(!n)return;r.push(n)}return new Oi(r)}toString(){return JSON.stringify(this.values)}static interpolate(e,r,i,n="rgb"){let a=[];if(e.values.length!=r.values.length)throw Error(`colorArray: Arrays have mismatched length (${e.values.length} vs. ${r.values.length}), cannot interpolate.`);for(let s=0;s<e.values.length;s++)a.push(gt.interpolate(e.values[s],r.values[s],i,n));return new Oi(a)}},ft=class extends Error{constructor(t,e){super(t),this.name="RuntimeError",this.path=e}toJSON(){return this.message}},K1=new Set(["center","left","right","top","bottom","top-left","top-right","bottom-left","bottom-right"]),De=class ua{constructor(e){this.values=e.slice()}static parse(e){if(e instanceof ua)return e;if(!(!Array.isArray(e)||e.length<1||e.length%2!=0)){for(let r=0;r<e.length;r+=2){let i=e[r],n=e[r+1];if(typeof i!="string"||!K1.has(i)||!Array.isArray(n)||n.length!==2||typeof n[0]!="number"||typeof n[1]!="number")return}return new ua(e)}}toString(){return JSON.stringify(this.values)}static interpolate(e,r,i,n){let a=e.values,s=r.values;if(a.length!==s.length)throw new ft(`Cannot interpolate values of different length. from: ${e.toString()}, to: ${r.toString()}`,n);let o=[];for(let l=0;l<a.length;l+=2){if(a[l]!==s[l])throw new ft(`Cannot interpolate values containing mismatched anchors. from[${l}]: ${a[l]}, to[${l}]: ${s[l]}`,n);o.push(a[l]);let[u,h]=a[l+1],[c,p]=s[l+1];o.push([Je(u,c,i),Je(h,p,i)])}return new ua(o)}},_e=class wp{constructor(e){this.name=e.name,this.available=e.available}toString(){return this.name}static fromString(e){return e?new wp({name:e,available:!1}):null}},Dr=class $r{constructor(e,r,i){this.from=e,this.to=r,this.transition=i}toString(){return this.from===this.to&&this.transition===1?this.from:JSON.stringify([this.from,this.to,this.transition])}static interpolate(e,r,i){return new $r(e,r,i)}static parse(e){if(e instanceof $r)return e;if(Array.isArray(e)&&e.length===3&&typeof e[0]=="string"&&typeof e[1]=="string"&&typeof e[2]=="number")return new $r(e[0],e[1],e[2]);if(typeof e=="object"&&typeof e.from=="string"&&typeof e.to=="string"&&typeof e.transition=="number")return new $r(e.from,e.to,e.transition);if(typeof e=="string")return new $r(e,e,1)}},xl=class{constructor(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(t,e){return this.collator.compare(t,e)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}};function Dp(t,e,r,i){return typeof t=="number"&&t>=0&&t<=255&&typeof e=="number"&&e>=0&&e<=255&&typeof r=="number"&&r>=0&&r<=255?i===void 0||typeof i=="number"&&i>=0&&i<=1?null:`Invalid rgba value [${[t,e,r,i].join(", ")}]: \'a\' must be between 0 and 1.`:`Invalid rgba value [${(typeof i=="number"?[t,e,r,i]:[t,e,r]).join(", ")}]: \'r\', \'g\', and \'b\' must be between 0 and 255.`}function ei(t){if(t===null||typeof t=="string"||typeof t=="boolean"||typeof t=="number"||t instanceof Dr||t instanceof gt||t instanceof xl||t instanceof ze||t instanceof Ae||t instanceof Se||t instanceof oe||t instanceof De||t instanceof _e)return!0;if(Array.isArray(t)){for(let e of t)if(!ei(e))return!1;return!0}if(typeof t=="object"){for(let e in t)if(!ei(t[e]))return!1;return!0}return!1}function _t(t){if(t===null)return dn;if(typeof t=="string")return Y;if(typeof t=="boolean")return tt;if(typeof t=="number")return I;if(t instanceof gt)return ce;if(t instanceof Dr)return Ba;if(t instanceof xl)return Pa;if(t instanceof ze)return yn;if(t instanceof Ae)return za;if(t instanceof Se)return La;if(t instanceof oe)return Qi;if(t instanceof De)return Va;if(t instanceof _e)return mn;if(Array.isArray(t)){let e=t.length,r;for(let i of t){let n=_t(i);if(!r)r=n;else{if(r===n)continue;r=Z;break}}return Ut(r||Z,e)}return fr}function Gi(t){let e=typeof t;return t===null?"":e==="string"||e==="number"||e==="boolean"?String(t):t instanceof gt||t instanceof Dr||t instanceof ze||t instanceof Ae||t instanceof Se||t instanceof oe||t instanceof De||t instanceof _e?t.toString():JSON.stringify(t)}var ri=class _p{constructor(e,r){this.type=e,this.value=r}static parse(e,r){if(e.length!==2)return r.error(`\'literal\' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!ei(e[1]))return r.error(`invalid value of type "${typeof e[1]}"`);let i=e[1],n=_t(i),a=r.expectedType;return n.kind==="array"&&n.N===0&&a&&a.kind==="array"&&(typeof a.N!="number"||a.N===0)&&(n=a),new _p(n,i)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}},J1=["Unknown","Point","LineString","Polygon"],Ap=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache=new Map,this.availableImages=null,this.canonical=null}id(){return this.feature&&"id"in this.feature?this.feature.id:null}geometryType(){return this.feature?typeof this.feature.type=="number"?J1[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}parseColor(t){let e=this._parseColorCache.get(t);return e||(e=gt.parse(t),this._parseColorCache.set(t,e)),e}};function Oa(t,e,r){let i=t.length-1,n=0,a=i,s=0,o,l;for(;n<=a;)if(s=Math.floor((n+a)/2),o=t[s],l=t[s+1],o<=e){if(s===i||e<l)return s;n=s+1}else if(o>e)a=s-1;else throw new ft("Input is not a number.",r);return 0}var vl=class Sp{constructor(e,r,i,n){this.type=e,this.input=r,this.key=n,this.labels=[],this.outputs=[];for(let[a,s]of i)this.labels.push(a),this.outputs.push(s)}static parse(e,r){if(e.length-1<4)return r.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return r.error("Expected an even number of arguments.");let i=r.parse(e[1],1,I);if(!i)return null;let n=[],a=null;r.expectedType&&r.expectedType.kind!=="value"&&(a=r.expectedType);for(let s=1;s<e.length;s+=2){let o=s===1?-1/0:e[s],l=e[s+1],u=s,h=s+1;if(typeof o!="number")return r.error(\'Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.\',u);if(n.length&&n[n.length-1][0]>=o)return r.error(\'Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.\',u);let c=r.parse(l,h,a);if(!c)return null;a||(a=c.type),n.push([o,c])}return new Sp(a,i,n,r.key)}evaluate(e){let r=this.labels,i=this.outputs;if(r.length===1)return i[0].evaluate(e);let n=this.input.evaluate(e);if(n<=r[0])return i[0].evaluate(e);let a=r.length;return n>=r[a-1]?i[a-1].evaluate(e):i[Oa(r,n,this.key)].evaluate(e)}eachChild(e){e(this.input);for(let r of this.outputs)e(r)}outputDefined(){return this.outputs.every(e=>e.outputDefined())}};function Q1(t,e,r,i){let n=3*t,a=3*(r-t)-n,s=1-n-a,o=3*e,l=3*(i-e)-o,u=1-o-l;return function(h,c=1e-6){if(h<=0)return 0;if(h>=1)return 1;let p=h;for(let y=0;y<8;y++){let m=((s*p+a)*p+n)*p-h;if(Math.abs(m)<c)return((u*p+l)*p+o)*p;let g=(3*s*p+2*a)*p+n;if(Math.abs(g)<1e-6)break;p-=m/g}let f=0,d=1;p=h;for(let y=0;y<20;y++){let m=((s*p+a)*p+n)*p;if(Math.abs(m-h)<c)break;h>m?f=p:d=p,p=(f+d)*.5}return((u*p+l)*p+o)*p}}var be=class Qs{constructor(e,r,i,n,a,s){this.type=e,this.operator=r,this.interpolation=i,this.input=n,this.key=s,this.labels=[],this.outputs=[];for(let[o,l]of a)this.labels.push(o),this.outputs.push(l)}static interpolationFactor(e,r,i,n){let a=0;if(e.name==="exponential")a=zs(r,e.base,i,n);else if(e.name==="linear")a=zs(r,1,i,n);else if(e.name==="cubic-bezier"){let s=e.controlPoints;a=Q1(s[0],s[1],s[2],s[3])(zs(r,1,i,n))}return a}static parse(e,r){let[i,n,a,...s]=e;if(!Array.isArray(n)||n.length===0)return r.error("Expected an interpolation type expression.",1);if(n[0]==="linear")n={name:"linear"};else if(n[0]==="exponential"){let u=n[1];if(typeof u!="number")return r.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:u}}else if(n[0]==="cubic-bezier"){let u=n.slice(1);if(u.length!==4||u.some(h=>typeof h!="number"||h<0||h>1))return r.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:u}}else return r.error(`Unknown interpolation type ${String(n[0])}`,1,0);if(e.length-1<4)return r.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if((e.length-1)%2!=0)return r.error("Expected an even number of arguments.");if(a=r.parse(a,2,I),!a)return null;let o=[],l=null;(i==="interpolate-hcl"||i==="interpolate-lab")&&r.expectedType!=Qi?l=ce:r.expectedType&&r.expectedType.kind!=="value"&&(l=r.expectedType);for(let u=0;u<s.length;u+=2){let h=s[u],c=s[u+1],p=u+3,f=u+4;if(typeof h!="number")return r.error(\'Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.\',p);if(o.length&&o[o.length-1][0]>=h)return r.error(\'Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.\',p);let d=r.parse(c,f,l);if(!d)return null;l||(l=d.type),o.push([h,d])}return!Ge(l,I)&&!Ge(l,Ba)&&!Ge(l,ce)&&!Ge(l,za)&&!Ge(l,La)&&!Ge(l,Qi)&&!Ge(l,Va)&&!Ge(l,Ut(I))?r.error(`Type ${yt(l)} is not interpolatable.`):new Qs(l,i,n,a,o,r.key)}evaluate(e){let r=this.labels,i=this.outputs;if(r.length===1)return i[0].evaluate(e);let n=this.input.evaluate(e);if(n<=r[0])return i[0].evaluate(e);let a=r.length;if(n>=r[a-1])return i[a-1].evaluate(e);let s=Oa(r,n,this.key),o=r[s],l=r[s+1],u=Qs.interpolationFactor(this.interpolation,n,o,l),h=i[s].evaluate(e),c=i[s+1].evaluate(e);switch(this.operator){case"interpolate":switch(this.type.kind){case"number":return Je(h,c,u);case"color":return gt.interpolate(h,c,u);case"padding":return Ae.interpolate(h,c,u);case"colorArray":return oe.interpolate(h,c,u);case"numberArray":return Se.interpolate(h,c,u);case"variableAnchorOffsetCollection":return De.interpolate(h,c,u,this.key);case"array":return ti(h,c,u);case"projectionDefinition":return Dr.interpolate(h,c,u)}case"interpolate-hcl":switch(this.type.kind){case"color":return gt.interpolate(h,c,u,"hcl");case"colorArray":return oe.interpolate(h,c,u,"hcl")}case"interpolate-lab":switch(this.type.kind){case"color":return gt.interpolate(h,c,u,"lab");case"colorArray":return oe.interpolate(h,c,u,"lab")}}}eachChild(e){e(this.input);for(let r of this.outputs)e(r)}outputDefined(){return this.outputs.every(e=>e.outputDefined())}};function zs(t,e,r,i){let n=i-r,a=t-r;return n===0?0:e===1?a/n:(e**+a-1)/(e**+n-1)}var gr={color:gt.interpolate,number:Je,padding:Ae.interpolate,numberArray:Se.interpolate,colorArray:oe.interpolate,variableAnchorOffsetCollection:De.interpolate,array:ti},Ep=class Fp{constructor(e){this.type=yn,this.sections=e}static parse(e,r){if(e.length<2)return r.error("Expected at least one argument.");let i=e[1];if(!Array.isArray(i)&&typeof i=="object")return r.error("First argument must be an image or text section.");let n=[],a=!1;for(let s=1;s<=e.length-1;++s){let o=e[s];if(a&&typeof o=="object"&&!Array.isArray(o)){a=!1;let l=null;if(o["font-scale"]&&(l=r.parse(o["font-scale"],1,I),!l))return null;let u=null;if(o["text-font"]&&(u=r.parse(o["text-font"],1,Ut(Y)),!u))return null;let h=null;if(o["text-color"]&&(h=r.parse(o["text-color"],1,ce),!h))return null;let c=null;if(o["vertical-align"]){if(typeof o["vertical-align"]=="string"&&!H1.includes(o["vertical-align"]))return r.error(`\'vertical-align\' must be one of: \'bottom\', \'center\', \'top\' but found \'${o["vertical-align"]}\' instead.`);if(c=r.parse(o["vertical-align"],1,Y),!c)return null}let p=n[n.length-1];p.scale=l,p.font=u,p.textColor=h,p.verticalAlign=c}else{let l=r.parse(e[s],1,Z);if(!l)return null;let u=l.type.kind;if(u!=="string"&&u!=="value"&&u!=="null"&&u!=="resolvedImage")return r.error("Formatted text type must be \'string\', \'value\', \'image\' or \'null\'.");a=!0,n.push({content:l,scale:null,font:null,textColor:null,verticalAlign:null})}}return new Fp(n)}evaluate(e){return new ze(this.sections.map(r=>{let i=r.content.evaluate(e);return _t(i)===mn?new Js("",i,null,null,null,r.verticalAlign?r.verticalAlign.evaluate(e):null):new Js(Gi(i),null,r.scale?r.scale.evaluate(e):null,r.font?r.font.evaluate(e).join(","):null,r.textColor?r.textColor.evaluate(e):null,r.verticalAlign?r.verticalAlign.evaluate(e):null)}))}eachChild(e){for(let r of this.sections)e(r.content),r.scale&&e(r.scale),r.font&&e(r.font),r.textColor&&e(r.textColor),r.verticalAlign&&e(r.verticalAlign)}outputDefined(){return!1}};function kp(t,e,r=0,i=t.length-1,n=t0){for(;i>r;){if(i-r>600){let l=i-r+1,u=e-r+1,h=Math.log(l),c=.5*Math.exp(2*h/3),p=.5*Math.sqrt(h*c*(l-c)/l)*(u-l/2<0?-1:1);kp(t,e,Math.max(r,Math.floor(e-u*c/l+p)),Math.min(i,Math.floor(e+(l-u)*c/l+p)),n)}let a=t[e],s=r,o=i;for(ki(t,r,e),n(t[i],a)>0&&ki(t,r,i);s<o;){for(ki(t,s,o),s++,o--;n(t[s],a)<0;)s++;for(;n(t[o],a)>0;)o--}n(t[r],a)===0?ki(t,r,o):(o++,ki(t,o,i)),o<=e&&(r=o+1),e<=o&&(i=o-1)}}function ki(t,e,r){let i=t[e];t[e]=t[r],t[r]=i}function t0(t,e){return t<e?-1:+(t>e)}function Ra(t,e){if(t.length<=1)return[t];let r=[],i,n;for(let a of t){let s=r0(a);s!==0&&(a.area=Math.abs(s),n===void 0&&(n=s<0),n===s<0?(i&&r.push(i),i=[a]):i.push(a))}if(i&&r.push(i),e>1)for(let a=0;a<r.length;a++)r[a].length<=e||(kp(r[a],e,1,r[a].length-1,e0),r[a]=r[a].slice(0,e));return r}function e0(t,e){return e.area-t.area}function r0(t){let e=0;for(let r=0,i=t.length,n=i-1,a,s;r<i;n=r++)a=t[r],s=t[n],e+=(s.x-a.x)*(a.y+s.y);return e}var jn={string:Y,number:I,boolean:tt,object:fr},Ie=class Tp{constructor(e,r,i){this.type=e,this.args=r,this.key=i}static parse(e,r){if(e.length<2)return r.error("Expected at least one argument.");let i=1,n,a=e[0];if(a==="array"){let o;if(e.length>2){let u=e[1];if(typeof u!="string"||!(u in jn)||u==="object")return r.error(\'The item type argument of "array" must be one of string, number, boolean\',1);o=jn[u],i++}else o=Z;let l;if(e.length>3){if(e[2]!==null&&(typeof e[2]!="number"||e[2]<0||e[2]!==Math.floor(e[2])))return r.error(\'The length argument to "array" must be a positive integer literal\',2);l=e[2],i++}n=Ut(o,l)}else{if(!jn[a])throw Error(`Types doesn\'t contain name = ${a}`);n=jn[a]}let s=[];for(;i<e.length;i++){let o=r.parse(e[i],i,Z);if(!o)return null;s.push(o)}return new Tp(n,s,r.key)}evaluate(e){for(let r=0;r<this.args.length;r++){let i=this.args[r].evaluate(e);if(!tn(this.type,_t(i)))return i;if(r===this.args.length-1)throw new ft(`Expected value to be of type ${yt(this.type)}, but found ${yt(_t(i))} instead.`,this.key)}throw Error()}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every(e=>e.outputDefined())}},gh={"to-boolean":tt,"to-color":ce,"to-number":I,"to-string":Y},jr=class Ip{constructor(e,r,i){this.type=e,this.args=r,this.key=i}static parse(e,r){if(e.length<2)return r.error("Expected at least one argument.");let i=e[0];if(!gh[i])throw Error(`Can\'t parse ${i} as it is not part of the known types`);if((i==="to-boolean"||i==="to-string")&&e.length!==2)return r.error("Expected one argument.");let n=gh[i],a=[];for(let s=1;s<e.length;s++){let o=r.parse(e[s],s,Z);if(!o)return null;a.push(o)}return new Ip(n,a,r.key)}evaluate(e){switch(this.type.kind){case"boolean":return!!this.args[0].evaluate(e);case"color":{let r,i;for(let n of this.args){if(r=n.evaluate(e),i=null,r instanceof gt)return r;if(typeof r=="string"){let a=e.parseColor(r);if(a)return a}else if(Array.isArray(r)&&(i=r.length<3||r.length>4?`Invalid rgba value ${JSON.stringify(r)}: expected an array containing either three or four numeric values.`:Dp(r[0],r[1],r[2],r[3]),!i))return new gt(r[0]/255,r[1]/255,r[2]/255,r[3])}throw new ft(i||`Could not parse color from value \'${typeof r=="string"?r:JSON.stringify(r)}\'`,this.key)}case"padding":{let r;for(let i of this.args){r=i.evaluate(e);let n=Ae.parse(r);if(n)return n}throw new ft(`Could not parse padding from value \'${typeof r=="string"?r:JSON.stringify(r)}\'`,this.key)}case"numberArray":{let r;for(let i of this.args){r=i.evaluate(e);let n=Se.parse(r);if(n)return n}throw new ft(`Could not parse numberArray from value \'${typeof r=="string"?r:JSON.stringify(r)}\'`,this.key)}case"colorArray":{let r;for(let i of this.args){r=i.evaluate(e);let n=oe.parse(r);if(n)return n}throw new ft(`Could not parse colorArray from value \'${typeof r=="string"?r:JSON.stringify(r)}\'`,this.key)}case"variableAnchorOffsetCollection":{let r;for(let i of this.args){r=i.evaluate(e);let n=De.parse(r);if(n)return n}throw new ft(`Could not parse variableAnchorOffsetCollection from value \'${typeof r=="string"?r:JSON.stringify(r)}\'`,this.key)}case"number":{let r=null;for(let i of this.args){if(r=i.evaluate(e),r===null)return 0;let n=Number(r);if(!isNaN(n))return n}throw new ft(`Could not convert ${JSON.stringify(r)} to number.`,this.key)}case"formatted":return ze.fromString(Gi(this.args[0].evaluate(e)));case"resolvedImage":return _e.fromString(Gi(this.args[0].evaluate(e)));case"projectionDefinition":{let r=this.args[0].evaluate(e);if(Dr.parse(r))return r;throw new ft(`Could not parse projectionDefinition from value \'${typeof r=="string"?r:JSON.stringify(r)}\'`,this.key)}default:return Gi(this.args[0].evaluate(e))}}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every(e=>e.outputDefined())}},Cp=class Mp{constructor(e,r){this.type=r.type,this.bindings=[].concat(e),this.result=r}evaluate(e){return this.result.evaluate(e)}eachChild(e){for(let r of this.bindings)e(r[1]);e(this.result)}static parse(e,r){if(e.length<4)return r.error(`Expected at least 3 arguments, but found ${e.length-1} instead.`);let i=[];for(let a=1;a<e.length-1;a+=2){let s=e[a];if(typeof s!="string")return r.error(`Expected string, but found ${typeof s} instead.`,a);if(/[^a-zA-Z0-9_]/.test(s))return r.error("Variable names must contain only alphanumeric characters or \'_\'.",a);let o=r.parse(e[a+1],a+1);if(!o)return null;i.push([s,o])}let n=r.parse(e[e.length-1],e.length-1,r.expectedType,i);return n?new Mp(i,n):null}outputDefined(){return this.result.outputDefined()}},Bp=class Pp{constructor(e,r){this.type=r.type,this.name=e,this.boundExpression=r}static parse(e,r){if(e.length!==2||typeof e[1]!="string")return r.error("\'var\' expression requires exactly one string literal argument.");let i=e[1];return r.scope.has(i)?new Pp(i,r.scope.get(i)):r.error(`Unknown variable "${i}". Make sure "${i}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(e){return this.boundExpression.evaluate(e)}eachChild(){}outputDefined(){return!1}},i0=class zp{constructor(e,r,i,n){this.type=e,this.index=r,this.input=i,this.key=n}static parse(e,r){if(e.length!==3)return r.error(`Expected 2 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,I),n=r.parse(e[2],2,Ut(r.expectedType||Z));if(!i||!n)return null;let a=n.type;return new zp(a.itemType,i,n,r.key)}evaluate(e){let r=this.index.evaluate(e),i=this.input.evaluate(e);if(r<0)throw new ft(`Array index out of bounds: ${r} < 0.`,this.key);if(r>=i.length)throw new ft(`Array index out of bounds: ${r} > ${i.length-1}.`,this.key);if(r!==Math.floor(r))throw new ft(`Array index must be an integer, but found ${r} instead.`,this.key);return i[r]}eachChild(e){e(this.index),e(this.input)}outputDefined(){return!1}},n0=class Lp{constructor(e,r,i){this.needle=e,this.haystack=r,this.key=i,this.type=tt}static parse(e,r){if(e.length!==3)return r.error(`Expected 2 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,Z),n=r.parse(e[2],2,Z);return!i||!n?null:gl(i.type,[tt,Y,I,dn,Z])?new Lp(i,n,r.key):r.error(`Expected first argument to be of type boolean, string, number or null, but found ${yt(i.type)} instead`)}evaluate(e){let r=this.needle.evaluate(e),i=this.haystack.evaluate(e);if(!i)return!1;if(!dr(r,["boolean","string","number","null"]))throw new ft(`Expected first argument to be of type boolean, string, number or null, but found ${yt(_t(r))} instead.`,this.key);if(!dr(i,["string","array"]))throw new ft(`Expected second argument to be of type array or string, but found ${yt(_t(i))} instead.`,this.key);return i.indexOf(r)>=0}eachChild(e){e(this.needle),e(this.haystack)}outputDefined(){return!0}},a0=class to{constructor(e,r,i,n){this.needle=e,this.haystack=r,this.key=i,this.fromIndex=n,this.type=I}static parse(e,r){if(e.length<=2||e.length>=5)return r.error(`Expected 2 or 3 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,Z),n=r.parse(e[2],2,Z);if(!i||!n)return null;if(!gl(i.type,[tt,Y,I,dn,Z]))return r.error(`Expected first argument to be of type boolean, string, number or null, but found ${yt(i.type)} instead`);if(e.length===4){let a=r.parse(e[3],3,I);return a?new to(i,n,r.key,a):null}return new to(i,n,r.key)}evaluate(e){let r=this.needle.evaluate(e),i=this.haystack.evaluate(e);if(!dr(r,["boolean","string","number","null"]))throw new ft(`Expected first argument to be of type boolean, string, number or null, but found ${yt(_t(r))} instead.`,this.key);let n;if(this.fromIndex&&(n=this.fromIndex.evaluate(e)),dr(i,["string"])){let a=i.indexOf(r,n);return a===-1?-1:[...i.slice(0,a)].length}if(dr(i,["array"]))return i.indexOf(r,n);throw new ft(`Expected second argument to be of type array or string, but found ${yt(_t(i))} instead.`,this.key)}eachChild(e){e(this.needle),e(this.haystack),this.fromIndex&&e(this.fromIndex)}outputDefined(){return!1}},s0=class Vp{constructor(e,r,i,n,a,s){this.inputType=e,this.type=r,this.input=i,this.cases=n,this.outputs=a,this.otherwise=s}static parse(e,r){if(e.length<5)return r.error(`Expected at least 4 arguments, but found only ${e.length-1}.`);if(e.length%2!=1)return r.error("Expected an even number of arguments.");let i,n;r.expectedType&&r.expectedType.kind!=="value"&&(n=r.expectedType);let a={},s=[];for(let u=2;u<e.length-1;u+=2){let h=e[u],c=e[u+1];Array.isArray(h)||(h=[h]);let p=r.concat(u);if(h.length===0)return p.error("Expected at least one branch label.");for(let d of h){if(typeof d!="number"&&typeof d!="string")return p.error("Branch labels must be numbers or strings.");if(typeof d=="number"&&Math.abs(d)>2**53-1)return p.error(`Branch labels must be integers no larger than ${2**53-1}.`);if(typeof d=="number"&&Math.floor(d)!==d)return p.error("Numeric branch labels must be integer values.");if(!i)i=_t(d);else if(p.checkSubtype(i,_t(d)))return null;if(a[String(d)]!==void 0)return p.error("Branch labels must be unique.");a[String(d)]=s.length}let f=r.parse(c,u,n);if(!f)return null;n||(n=f.type),s.push(f)}let o=r.parse(e[1],1,Z);if(!o)return null;let l=r.parse(e[e.length-1],e.length-1,n);return!l||o.type.kind!=="value"&&r.concat(1).checkSubtype(i,o.type)?null:new Vp(i,n,o,a,s,l)}evaluate(e){let r=this.input.evaluate(e);return(_t(r)===this.inputType&&this.outputs[this.cases[r]]||this.otherwise).evaluate(e)}eachChild(e){e(this.input),this.outputs.forEach(e),e(this.otherwise)}outputDefined(){return this.outputs.every(e=>e.outputDefined())&&this.otherwise.outputDefined()}},o0=class Op{constructor(e,r,i){this.type=e,this.branches=r,this.otherwise=i}static parse(e,r){if(e.length<4)return r.error(`Expected at least 3 arguments, but found only ${e.length-1}.`);if(e.length%2!=0)return r.error("Expected an odd number of arguments.");let i;r.expectedType&&r.expectedType.kind!=="value"&&(i=r.expectedType);let n=[];for(let s=1;s<e.length-1;s+=2){let o=r.parse(e[s],s,tt);if(!o)return null;let l=r.parse(e[s+1],s+1,i);if(!l)return null;n.push([o,l]),i||(i=l.type)}let a=r.parse(e[e.length-1],e.length-1,i);if(!a)return null;if(!i)throw Error("Can\'t infer output type");return new Op(i,n,a)}evaluate(e){for(let[r,i]of this.branches)if(r.evaluate(e))return i.evaluate(e);return this.otherwise.evaluate(e)}eachChild(e){for(let[r,i]of this.branches)e(r),e(i);e(this.otherwise)}outputDefined(){return this.branches.every(([e,r])=>r.outputDefined())&&this.otherwise.outputDefined()}},l0=class eo{constructor(e,r,i,n,a){this.type=e,this.input=r,this.beginIndex=i,this.key=n,this.endIndex=a}static parse(e,r){if(e.length<=2||e.length>=5)return r.error(`Expected 2 or 3 arguments, but found ${e.length-1} instead.`);let i=r.parse(e[1],1,Z),n=r.parse(e[2],2,I);if(!i||!n)return null;if(!gl(i.type,[Ut(Z),Y,Z]))return r.error(`Expected first argument to be of type array or string, but found ${yt(i.type)} instead`);if(e.length===4){let a=r.parse(e[3],3,I);return a?new eo(i.type,i,n,r.key,a):null}return new eo(i.type,i,n,r.key)}evaluate(e){let r=this.input.evaluate(e),i=this.beginIndex.evaluate(e),n;if(this.endIndex&&(n=this.endIndex.evaluate(e)),dr(r,["string"]))return[...r].slice(i,n).join("");if(dr(r,["array"]))return r.slice(i,n);throw new ft(`Expected first argument to be of type array or string, but found ${yt(_t(r))} instead.`,this.key)}eachChild(e){e(this.input),e(this.beginIndex),this.endIndex&&e(this.endIndex)}outputDefined(){return!1}},Rp=class ro{constructor(e,r){this.type=e,this.args=r}static parse(e,r){if(e.length<2)return r.error("Expected at least one argument.");let i=null,n=r.expectedType;n&&n.kind!=="value"&&(i=n);let a=[];for(let s of e.slice(1)){let o=r.parse(s,1+a.length,i,void 0,{typeAnnotation:"omit"});if(!o)return null;i||(i=o.type),a.push(o)}if(!i)throw Error("No output type");return n&&a.some(s=>tn(n,s.type))?new ro(Z,a):new ro(i,a)}evaluate(e){let r=null,i=0,n;for(let a of this.args)if(i++,r=a.evaluate(e),r&&r instanceof _e&&!r.available&&(n||(n=r.name),r=null,i===this.args.length&&(r=n)),r!==null)break;return r}eachChild(e){this.args.forEach(e)}outputDefined(){return this.args.every(e=>e.outputDefined())}};function xh(t,e){return t==="=="||t==="!="?e.kind==="boolean"||e.kind==="string"||e.kind==="number"||e.kind==="null"||e.kind==="value":e.kind==="string"||e.kind==="number"||e.kind==="value"}function u0(t,e,r){return e===r}function h0(t,e,r){return e!==r}function c0(t,e,r){return e<r}function p0(t,e,r){return e>r}function f0(t,e,r){return e<=r}function d0(t,e,r){return e>=r}function $p(t,e,r,i){return i.compare(e,r)===0}function y0(t,e,r,i){return!$p(t,e,r,i)}function m0(t,e,r,i){return i.compare(e,r)<0}function g0(t,e,r,i){return i.compare(e,r)>0}function x0(t,e,r,i){return i.compare(e,r)<=0}function v0(t,e,r,i){return i.compare(e,r)>=0}function li(t,e,r){let i=t!=="=="&&t!=="!=";return class Np{constructor(a,s,o,l){this.lhs=a,this.rhs=s,this.key=o,this.collator=l,this.type=tt,this.hasUntypedArgument=a.type.kind==="value"||s.type.kind==="value"}static parse(a,s){if(a.length!==3&&a.length!==4)return s.error("Expected two or three arguments.");let o=a[0],l=s.parse(a[1],1,Z);if(!l)return null;if(!xh(o,l.type))return s.concat(1).error(`"${o}" comparisons are not supported for type \'${yt(l.type)}\'.`);let u=s.parse(a[2],2,Z);if(!u)return null;if(!xh(o,u.type))return s.concat(2).error(`"${o}" comparisons are not supported for type \'${yt(u.type)}\'.`);if(l.type.kind!==u.type.kind&&l.type.kind!=="value"&&u.type.kind!=="value")return s.error(`Cannot compare types \'${yt(l.type)}\' and \'${yt(u.type)}\'.`);i&&(l.type.kind==="value"&&u.type.kind!=="value"?l=new Ie(u.type,[l],s.key):l.type.kind!=="value"&&u.type.kind==="value"&&(u=new Ie(l.type,[u],s.key)));let h=null;if(a.length===4){if(l.type.kind!=="string"&&u.type.kind!=="string"&&l.type.kind!=="value"&&u.type.kind!=="value")return s.error("Cannot use collator to compare non-string types.");if(h=s.parse(a[3],3,Pa),!h)return null}return new Np(l,u,s.key,h)}evaluate(a){let s=this.lhs.evaluate(a),o=this.rhs.evaluate(a);if(i&&this.hasUntypedArgument){let l=_t(s),u=_t(o);if(l.kind!==u.kind||l.kind!=="string"&&l.kind!=="number")throw new ft(`Expected arguments for "${t}" to be (string, string) or (number, number), but found (${l.kind}, ${u.kind}) instead.`,this.key)}if(this.collator&&!i&&this.hasUntypedArgument){let l=_t(s),u=_t(o);if(l.kind!=="string"||u.kind!=="string")return e(a,s,o)}return this.collator?r(a,s,o,this.collator.evaluate(a)):e(a,s,o)}eachChild(a){a(this.lhs),a(this.rhs),this.collator&&a(this.collator)}outputDefined(){return!0}}}var b0=li("==",u0,$p),w0=li("!=",h0,y0),D0=li("<",c0,m0),_0=li(">",p0,g0),A0=li("<=",f0,x0),S0=li(">=",d0,v0),Up=class qp{constructor(e,r,i){this.type=Pa,this.locale=i,this.caseSensitive=e,this.diacriticSensitive=r}static parse(e,r){if(e.length!==2)return r.error("Expected one argument.");let i=e[1];if(typeof i!="object"||Array.isArray(i))return r.error("Collator options argument must be an object.");let n=r.parse(i["case-sensitive"]!==void 0&&i["case-sensitive"],1,tt);if(!n)return null;let a=r.parse(i["diacritic-sensitive"]!==void 0&&i["diacritic-sensitive"],1,tt);if(!a)return null;let s=null;return i.locale&&(s=r.parse(i.locale,1,Y),!s)?null:new qp(n,a,s)}evaluate(e){return new xl(this.caseSensitive.evaluate(e),this.diacriticSensitive.evaluate(e),this.locale?this.locale.evaluate(e):null)}eachChild(e){e(this.caseSensitive),e(this.diacriticSensitive),this.locale&&e(this.locale)}outputDefined(){return!1}},E0=class jp{constructor(e,r,i,n,a,s){this.type=Y,this.number=e,this.locale=r,this.currency=i,this.unit=n,this.minFractionDigits=a,this.maxFractionDigits=s}static parse(e,r){if(e.length!==3)return r.error("Expected two arguments.");let i=r.parse(e[1],1,I);if(!i)return null;let n=e[2];if(typeof n!="object"||Array.isArray(n))return r.error("NumberFormat options argument must be an object.");let a=null;if(n.locale&&(a=r.parse(n.locale,1,Y),!a))return null;let s=null;if(n.currency&&(s=r.parse(n.currency,1,Y),!s))return null;let o=null;if(n.unit&&(o=r.parse(n.unit,1,Y),!o))return null;if(s&&o)return r.error("NumberFormat options `currency` and `unit` are mutually exclusive");let l=null;if(n["min-fraction-digits"]&&(l=r.parse(n["min-fraction-digits"],1,I),!l))return null;let u=null;return n["max-fraction-digits"]&&(u=r.parse(n["max-fraction-digits"],1,I),!u)?null:new jp(i,a,s,o,l,u)}evaluate(e){return new Intl.NumberFormat(this.locale?this.locale.evaluate(e):[],{style:this.currency?"currency":this.unit?"unit":"decimal",currency:this.currency?this.currency.evaluate(e):void 0,unit:this.unit?this.unit.evaluate(e):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(e):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(e):void 0}).format(this.number.evaluate(e))}eachChild(e){e(this.number),this.locale&&e(this.locale),this.currency&&e(this.currency),this.unit&&e(this.unit),this.minFractionDigits&&e(this.minFractionDigits),this.maxFractionDigits&&e(this.maxFractionDigits)}outputDefined(){return!1}},F0=class Gp{constructor(e){this.type=mn,this.input=e}static parse(e,r){if(e.length!==2)return r.error("Expected two arguments.");let i=r.parse(e[1],1,Y);return i?new Gp(i):r.error("No image name provided.")}evaluate(e){let r=this.input.evaluate(e),i=_e.fromString(r);return i&&e.availableImages&&(i.available=e.availableImages.indexOf(r)>-1),i}eachChild(e){e(this.input)}outputDefined(){return!1}},k0=class Xp{constructor(e,r){this.input=e,this.key=r,this.type=I}static parse(e,r){if(e.length!==2)return r.error(`Expected 1 argument, but found ${e.length-1} instead.`);let i=r.parse(e[1],1);return i?i.type.kind!=="array"&&i.type.kind!=="string"&&i.type.kind!=="value"?r.error(`Expected argument of type string or array, but found ${yt(i.type)} instead.`):new Xp(i,r.key):null}evaluate(e){let r=this.input.evaluate(e);if(typeof r=="string")return[...r].length;if(Array.isArray(r))return r.length;throw new ft(`Expected value to be of type string or array, but found ${yt(_t(r))} instead.`,this.key)}eachChild(e){e(this.input)}outputDefined(){return!1}},we=8192;function T0(t,e){let r=I0(t[0]),i=M0(t[1]),n=2**e.z;return[Math.round(r*n*we),Math.round(i*n*we)]}function bl(t,e){let r=2**e.z,i=(t[0]/we+e.x)/r,n=(t[1]/we+e.y)/r;return[C0(i),B0(n)]}function I0(t){return(180+t)/360}function C0(t){return t*360-180}function M0(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function B0(t){return 360/Math.PI*Math.atan(Math.exp((180-t*360)*Math.PI/180))-90}function gn(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[0]),t[3]=Math.max(t[3],e[1])}function en(t,e){return!(t[0]<=e[0]||t[2]>=e[2]||t[1]<=e[1]||t[3]>=e[3])}function P0(t,e,r){return e[1]>t[1]!=r[1]>t[1]&&t[0]<(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function z0(t,e,r){let i=t[0]-e[0],n=t[1]-e[1],a=t[0]-r[0],s=t[1]-r[1];return i*s-a*n===0&&i*a<=0&&n*s<=0}function $a(t,e,r,i){let n=[e[0]-t[0],e[1]-t[1]];return R0([i[0]-r[0],i[1]-r[1]],n)!==0&&!!(vh(t,e,r,i)&&vh(r,i,t,e))}function L0(t,e,r){for(let i of r)for(let n=0;n<i.length-1;++n)if($a(t,e,i[n],i[n+1]))return!0;return!1}function ui(t,e,r=!1){let i=!1;for(let n of e)for(let a=0;a<n.length-1;a++){if(z0(t,n[a],n[a+1]))return r;P0(t,n[a],n[a+1])&&(i=!i)}return i}function V0(t,e){for(let r of e)if(ui(t,r))return!0;return!1}function Yp(t,e){for(let r of t)if(!ui(r,e))return!1;for(let r=0;r<t.length-1;++r)if(L0(t[r],t[r+1],e))return!1;return!0}function O0(t,e){for(let r of e)if(Yp(t,r))return!0;return!1}function R0(t,e){return t[0]*e[1]-t[1]*e[0]}function vh(t,e,r,i){let n=t[0]-r[0],a=t[1]-r[1],s=e[0]-r[0],o=e[1]-r[1],l=i[0]-r[0],u=i[1]-r[1],h=n*u-l*a,c=s*u-l*o;return h>0&&c<0||h<0&&c>0}function wl(t,e,r){let i=[];for(let n=0;n<t.length;n++){let a=[];for(let s=0;s<t[n].length;s++){let o=T0(t[n][s],r);gn(e,o),a.push(o)}i.push(a)}return i}function Wp(t,e,r){let i=[];for(let n=0;n<t.length;n++){let a=wl(t[n],e,r);i.push(a)}return i}function Zp(t,e,r,i){if(t[0]<r[0]||t[0]>r[2]){let n=i*.5,a=t[0]-r[0]>n?-i:r[0]-t[0]>n?i:0;a===0&&(a=t[0]-r[2]>n?-i:r[2]-t[0]>n?i:0),t[0]+=a}gn(e,t)}function $0(t){t[0]=t[1]=1/0,t[2]=t[3]=-1/0}function bh(t,e,r,i){let n=2**i.z*we,a=[i.x*we,i.y*we],s=[];for(let o of t)for(let l of o){let u=[l.x+a[0],l.y+a[1]];Zp(u,e,r,n),s.push(u)}return s}function wh(t,e,r,i){let n=2**i.z*we,a=[i.x*we,i.y*we],s=[];for(let o of t){let l=[];for(let u of o){let h=[u.x+a[0],u.y+a[1]];gn(e,h),l.push(h)}s.push(l)}if(e[2]-e[0]<=n/2){$0(e);for(let o of s)for(let l of o)Zp(l,e,r,n)}return s}function N0(t,e){let r=[1/0,1/0,-1/0,-1/0],i=[1/0,1/0,-1/0,-1/0],n=t.canonicalID();if(e.type==="Polygon"){let a=wl(e.coordinates,i,n),s=bh(t.geometry(),r,i,n);if(!en(r,i))return!1;for(let o of s)if(!ui(o,a))return!1}if(e.type==="MultiPolygon"){let a=Wp(e.coordinates,i,n),s=bh(t.geometry(),r,i,n);if(!en(r,i))return!1;for(let o of s)if(!V0(o,a))return!1}return!0}function U0(t,e){let r=[1/0,1/0,-1/0,-1/0],i=[1/0,1/0,-1/0,-1/0],n=t.canonicalID();if(e.type==="Polygon"){let a=wl(e.coordinates,i,n),s=wh(t.geometry(),r,i,n);if(!en(r,i))return!1;for(let o of s)if(!Yp(o,a))return!1}if(e.type==="MultiPolygon"){let a=Wp(e.coordinates,i,n),s=wh(t.geometry(),r,i,n);if(!en(r,i))return!1;for(let o of s)if(!O0(o,a))return!1}return!0}var Dl=class ha{constructor(e,r){this.type=tt,this.geojson=e,this.geometries=r}static parse(e,r){if(e.length!==2)return r.error(`\'within\' expression requires exactly one argument, but found ${e.length-1} instead.`);if(ei(e[1])){let i=e[1];if(i.type==="FeatureCollection"){let n=[];for(let a of i.features){let{type:s,coordinates:o}=a.geometry;s==="Polygon"&&n.push(o),s==="MultiPolygon"&&n.push(...o)}if(n.length)return new ha(i,{type:"MultiPolygon",coordinates:n})}else if(i.type==="Feature"){let n=i.geometry.type;if(n==="Polygon"||n==="MultiPolygon")return new ha(i,i.geometry)}else if(i.type==="Polygon"||i.type==="MultiPolygon")return new ha(i,i)}return r.error("\'within\' expression requires valid geojson object that contains polygon geometry type.")}evaluate(e){if(e.geometry()!=null&&e.canonicalID()!=null){if(e.geometryType()==="Point")return N0(e,this.geometries);if(e.geometryType()==="LineString")return U0(e,this.geometries)}return!1}eachChild(){}outputDefined(){return!0}},Hp=class{constructor(t=[],e=(r,i)=>r<i?-1:+(r>i)){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r)}push(t){this.data.push(t),this._up(this.length++)}pop(){if(this.length===0)return;let t=this.data[0],e=this.data.pop();return--this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){let{data:e,compare:r}=this,i=e[t];for(;t>0;){let n=t-1>>1,a=e[n];if(r(i,a)>=0)break;e[t]=a,t=n}e[t]=i}_down(t){let{data:e,compare:r}=this,i=this.length>>1,n=e[t];for(;t<i;){let a=(t<<1)+1,s=a+1;if(s<this.length&&r(e[s],e[a])<0&&(a=s),r(e[a],n)>=0)break;e[t]=e[a],t=a}e[t]=n}},Dh=Math.PI/180,_l=class{constructor(t){let e=Dh*6378.137*1e3,r=Math.cos(t*Dh),i=1/(1-.0066943799901413165*(1-r*r)),n=Math.sqrt(i);this.kx=e*n*r,this.ky=e*n*i*.9933056200098587}distance(t,e){let r=this.wrap(t[0]-e[0])*this.kx,i=(t[1]-e[1])*this.ky;return Math.sqrt(r*r+i*i)}pointOnLine(t,e){let r=1/0,i,n,a,s;for(let o=0;o<t.length-1;o++){let l=t[o][0],u=t[o][1],h=this.wrap(t[o+1][0]-l)*this.kx,c=(t[o+1][1]-u)*this.ky,p=0;(h!==0||c!==0)&&(p=(this.wrap(e[0]-l)*this.kx*h+(e[1]-u)*this.ky*c)/(h*h+c*c),p>1?(l=t[o+1][0],u=t[o+1][1]):p>0&&(l+=h/this.kx*p,u+=c/this.ky*p)),h=this.wrap(e[0]-l)*this.kx,c=(e[1]-u)*this.ky;let f=h*h+c*c;f<r&&(r=f,i=l,n=u,a=o,s=p)}return{point:[i,n],index:a,t:Math.max(0,Math.min(1,s))}}wrap(t){for(;t<-180;)t+=360;for(;t>180;)t-=360;return t}};function Kp(t,e){return e[0]-t[0]}function ga(t){return t[1]-t[0]+1}function Le(t,e){return t[1]>=t[0]&&t[1]<e}function io(t,e){if(t[0]>t[1])return[null,null];let r=ga(t);if(e){if(r===2)return[t,null];let n=Math.floor(r/2);return[[t[0],t[0]+n],[t[0]+n,t[1]]]}if(r===1)return[t,null];let i=Math.floor(r/2)-1;return[[t[0],t[0]+i],[t[0]+i+1,t[1]]]}function no(t,e){if(!Le(e,t.length))return[1/0,1/0,-1/0,-1/0];let r=[1/0,1/0,-1/0,-1/0];for(let i=e[0];i<=e[1];++i)gn(r,t[i]);return r}function ao(t){let e=[1/0,1/0,-1/0,-1/0];for(let r of t)for(let i of r)gn(e,i);return e}function _h(t){return t[0]!==-1/0&&t[1]!==-1/0&&t[2]!==1/0&&t[3]!==1/0}function Al(t,e,r){if(!_h(t)||!_h(e))return NaN;let i=0,n=0;return t[2]<e[0]&&(i=e[0]-t[2]),t[0]>e[2]&&(i=t[0]-e[2]),t[1]>e[3]&&(n=t[1]-e[3]),t[3]<e[1]&&(n=e[1]-t[3]),r.distance([0,0],[i,n])}function hr(t,e,r){let i=r.pointOnLine(e,t);return r.distance(t,i.point)}function Sl(t,e,r,i,n){let a=Math.min(hr(t,[r,i],n),hr(e,[r,i],n)),s=Math.min(hr(r,[t,e],n),hr(i,[t,e],n));return Math.min(a,s)}function q0(t,e,r,i,n){if(!(Le(e,t.length)&&Le(i,r.length)))return 1/0;let a=1/0;for(let s=e[0];s<e[1];++s){let o=t[s],l=t[s+1];for(let u=i[0];u<i[1];++u){let h=r[u],c=r[u+1];if($a(o,l,h,c))return 0;a=Math.min(a,Sl(o,l,h,c,n))}}return a}function j0(t,e,r,i,n){if(!(Le(e,t.length)&&Le(i,r.length)))return NaN;let a=1/0;for(let s=e[0];s<=e[1];++s)for(let o=i[0];o<=i[1];++o)if(a=Math.min(a,n.distance(t[s],r[o])),a===0)return a;return a}function G0(t,e,r){if(ui(t,e,!0))return 0;let i=1/0;for(let n of e){let a=n[0],s=n[n.length-1];if(a!==s&&(i=Math.min(i,hr(t,[s,a],r)),i===0))return i;let o=r.pointOnLine(n,t);if(i=Math.min(i,r.distance(t,o.point)),i===0)return i}return i}function X0(t,e,r,i){if(!Le(e,t.length))return NaN;for(let a=e[0];a<=e[1];++a)if(ui(t[a],r,!0))return 0;let n=1/0;for(let a=e[0];a<e[1];++a){let s=t[a],o=t[a+1];for(let l of r)for(let u=0,h=l.length,c=h-1;u<h;c=u++){let p=l[c],f=l[u];if($a(s,o,p,f))return 0;n=Math.min(n,Sl(s,o,p,f,i))}}return n}function Ah(t,e){for(let r of t)for(let i of r)if(ui(i,e,!0))return!0;return!1}function Y0(t,e,r,i=1/0){let n=ao(t),a=ao(e);if(i!==1/0&&Al(n,a,r)>=i)return i;if(en(n,a)){if(Ah(t,e))return 0}else if(Ah(e,t))return 0;let s=1/0;for(let o of t)for(let l=0,u=o.length,h=u-1;l<u;h=l++){let c=o[h],p=o[l];for(let f of e)for(let d=0,y=f.length,m=y-1;d<y;m=d++){let g=f[m],x=f[d];if($a(c,p,g,x))return 0;s=Math.min(s,Sl(c,p,g,x,r))}}return s}function Sh(t,e,r,i,n,a){if(!a)return;let s=Al(no(i,a),n,r);s<e&&t.push([s,a,[0,0]])}function Gn(t,e,r,i,n,a,s){if(!a||!s)return;let o=Al(no(i,a),no(n,s),r);o<e&&t.push([o,a,s])}function xa(t,e,r,i,n=1/0){let a=Math.min(i.distance(t[0],r[0][0]),n);if(a===0)return a;let s=new Hp([[0,[0,t.length-1],[0,0]]],Kp),o=ao(r);for(;s.length>0;){let l=s.pop();if(l[0]>=a)continue;let u=l[1],h=e?50:100;if(ga(u)<=h){if(!Le(u,t.length))return NaN;if(e){let c=X0(t,u,r,i);if(isNaN(c)||c===0)return c;a=Math.min(a,c)}else for(let c=u[0];c<=u[1];++c){let p=G0(t[c],r,i);if(a=Math.min(a,p),a===0)return 0}}else{let c=io(u,e);Sh(s,a,i,t,o,c[0]),Sh(s,a,i,t,o,c[1])}}return a}function va(t,e,r,i,n,a=1/0){let s=Math.min(a,n.distance(t[0],r[0]));if(s===0)return s;let o=new Hp([[0,[0,t.length-1],[0,r.length-1]]],Kp);for(;o.length>0;){let l=o.pop();if(l[0]>=s)continue;let u=l[1],h=l[2],c=e?50:100,p=i?50:100;if(ga(u)<=c&&ga(h)<=p){if(!Le(u,t.length)&&Le(h,r.length))return NaN;let f;if(e&&i)f=q0(t,u,r,h,n),s=Math.min(s,f);else if(e&&!i){let d=t.slice(u[0],u[1]+1);for(let y=h[0];y<=h[1];++y)if(f=hr(r[y],d,n),s=Math.min(s,f),s===0)return s}else if(!e&&i){let d=r.slice(h[0],h[1]+1);for(let y=u[0];y<=u[1];++y)if(f=hr(t[y],d,n),s=Math.min(s,f),s===0)return s}else f=j0(t,u,r,h,n),s=Math.min(s,f)}else{let f=io(u,e),d=io(h,i);Gn(o,s,n,t,r,f[0],d[0]),Gn(o,s,n,t,r,f[0],d[1]),Gn(o,s,n,t,r,f[1],d[0]),Gn(o,s,n,t,r,f[1],d[1])}}return s}function W0(t,e){let r=t.geometry(),i=r.flat().map(s=>bl([s.x,s.y],t.canonical));if(r.length===0)return NaN;let n=new _l(i[0][1]),a=1/0;for(let s of e){switch(s.type){case"Point":a=Math.min(a,va(i,!1,[s.coordinates],!1,n,a));break;case"LineString":a=Math.min(a,va(i,!1,s.coordinates,!0,n,a));break;case"Polygon":a=Math.min(a,xa(i,!1,s.coordinates,n,a))}if(a===0)return a}return a}function Z0(t,e){let r=t.geometry(),i=r.flat().map(s=>bl([s.x,s.y],t.canonical));if(r.length===0)return NaN;let n=new _l(i[0][1]),a=1/0;for(let s of e){switch(s.type){case"Point":a=Math.min(a,va(i,!0,[s.coordinates],!1,n,a));break;case"LineString":a=Math.min(a,va(i,!0,s.coordinates,!0,n,a));break;case"Polygon":a=Math.min(a,xa(i,!0,s.coordinates,n,a))}if(a===0)return a}return a}function H0(t,e){let r=t.geometry();if(r.length===0||r[0].length===0)return NaN;let i=Ra(r,0).map(s=>s.map(o=>o.map(l=>bl([l.x,l.y],t.canonical)))),n=new _l(i[0][0][0][1]),a=1/0;for(let s of e)for(let o of i){switch(s.type){case"Point":a=Math.min(a,xa([s.coordinates],!1,o,n,a));break;case"LineString":a=Math.min(a,xa(s.coordinates,!0,o,n,a));break;case"Polygon":a=Math.min(a,Y0(o,s.coordinates,n,a))}if(a===0)return a}return a}function Ls(t){return t.type==="MultiPolygon"?t.coordinates.map(e=>({type:"Polygon",coordinates:e})):t.type==="MultiLineString"?t.coordinates.map(e=>({type:"LineString",coordinates:e})):t.type==="MultiPoint"?t.coordinates.map(e=>({type:"Point",coordinates:e})):[t]}var El=class ca{constructor(e,r){this.type=I,this.geojson=e,this.geometries=r}static parse(e,r){if(e.length!==2)return r.error(`\'distance\' expression requires exactly one argument, but found ${e.length-1} instead.`);if(ei(e[1])){let i=e[1];if(i.type==="FeatureCollection")return new ca(i,i.features.map(n=>Ls(n.geometry)).flat());if(i.type==="Feature")return new ca(i,Ls(i.geometry));if("type"in i&&"coordinates"in i)return new ca(i,Ls(i))}return r.error("\'distance\' expression requires valid geojson object that contains polygon geometry type.")}evaluate(e){if(e.geometry()!=null&&e.canonicalID()!=null){if(e.geometryType()==="Point")return W0(e,this.geometries);if(e.geometryType()==="LineString")return Z0(e,this.geometries);if(e.geometryType()==="Polygon")return H0(e,this.geometries)}return NaN}eachChild(){}outputDefined(){return!0}},K0=class Jp{constructor(e){let r=null;for(let i of e)if(!r)r=i.type;else{if(r===i.type)continue;r=Z;break}this.type=Ut(r!=null?r:Z,e.length),this.arr=e}static parse(e,r){if(e.length!==2)return r.error(`\'semiliteral\' expression requires exactly one argument, but found ${e.length-1} instead.`);if(!ei(e[1]))return r.error(`invalid value of type "${typeof e[1]}"`);let i=e[1],n=_t(i);if(n.kind==="array"){let a=i.map(s=>r.parse(s,null,Z));return new Jp(a)}return new ri(n,i)}evaluate(e){return this.arr.map(r=>r.evaluate(e))}eachChild(e){this.arr.forEach(e)}outputDefined(){return this.arr.every(e=>e.outputDefined())}},Fl=class Qp{constructor(e){this.key=e,this.type=Z}static parse(e,r){if(e.length!==2)return r.error(`Expected 1 argument, but found ${e.length-1} instead.`);let i=e[1];return i==null?r.error("Global state property must be defined."):typeof i=="string"?new Qp(i):r.error(`Global state property must be string, but found ${typeof e[1]} instead.`)}evaluate(e){var i,n;let r=(i=e.globals)==null?void 0:i.globalState;return!r||Object.keys(r).length===0?null:(n=ji(r,this.key))!=null?n:null}eachChild(){}outputDefined(){return!1}},Yr={"==":b0,"!=":w0,">":_0,"<":D0,">=":S0,"<=":A0,array:Ie,at:i0,boolean:Ie,case:o0,coalesce:Rp,collator:Up,format:Ep,image:F0,in:n0,"index-of":a0,interpolate:be,"interpolate-hcl":be,"interpolate-lab":be,length:k0,let:Cp,literal:ri,match:s0,number:Ie,"number-format":E0,object:Ie,semiliteral:K0,slice:l0,step:vl,string:Ie,"to-boolean":jr,"to-color":jr,"to-number":jr,"to-string":jr,var:Bp,within:Dl,distance:El,"global-state":Fl},ve=class extends Error{constructor(t,e){super(e),this.message=e,this.key=t}},J0=class tf{constructor(e,r=[]){this.parent=e,this.bindings={};for(let[i,n]of r)this.bindings[i]=n}concat(e){return new tf(this,e)}get(e){if(this.bindings[e])return this.bindings[e];if(this.parent)return this.parent.get(e);throw Error(`${e} not found in scope.`)}has(e){return this.bindings[e]?!0:this.parent?this.parent.has(e):!1}},ef=class rf{constructor(e,r,i=[],n,a=new J0,s=[]){this.registry=e,this.path=i,this.key=i.map(o=>`[${o}]`).join(""),this.scope=a,this.errors=s,this.expectedType=n,this._isConstant=r}parse(e,r,i,n,a={}){return r?this.concat(r,i,n)._parse(e,a):this._parse(e,a)}_parse(e,r){(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number")&&(e=["literal",e]);let i=this.key;function n(a,s,o){return o==="assert"?new Ie(s,[a],i):o==="coerce"?new jr(s,[a],i):a}if(Array.isArray(e)){if(e.length===0)return this.error(\'Expected an array with at least one element. If you wanted a literal array, use ["literal", []].\');let a=e[0];if(typeof a!="string")return this.error(`Expression name must be a string, but found ${typeof a} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;let s=this.registry[a];if(s){let o=s.parse(e,this);if(!o)return null;if(this.expectedType){let l=this.expectedType,u=o.type;if((l.kind==="string"||l.kind==="number"||l.kind==="boolean"||l.kind==="object"||l.kind==="array")&&u.kind==="value")o=n(o,l,r.typeAnnotation||"assert");else if(l.kind==="projectionDefinition"&&["string","array","value"].includes(u.kind)||["color","formatted","resolvedImage"].includes(l.kind)&&["value","string"].includes(u.kind)||["padding","numberArray"].includes(l.kind)&&["value","number","array"].includes(u.kind)||l.kind==="colorArray"&&["value","string","array"].includes(u.kind)||l.kind==="variableAnchorOffsetCollection"&&["value","array"].includes(u.kind))o=n(o,l,r.typeAnnotation||"coerce");else if(this.checkSubtype(l,u))return null}if(!(o instanceof ri)&&o.type.kind!=="resolvedImage"&&this._isConstant(o)){let l=new Ap;try{o=new ri(o.type,o.evaluate(l))}catch(u){return this.error(u.message),null}}return o}return this.error(`Unknown expression "${a}". If you wanted a literal array, use ["literal", [...]].`,0)}return e===void 0?this.error("\'undefined\' value invalid. Use null instead."):typeof e=="object"?this.error(\'Bare objects invalid. Use ["literal", {...}] instead.\'):this.error(`Expected an array, but found ${typeof e} instead.`)}concat(e,r,i){let n=typeof e=="number"?this.path.concat(e):this.path,a=i?this.scope.concat(i):this.scope;return new rf(this.registry,this._isConstant,n,r||null,a,this.errors)}error(e,...r){let i=`${this.key}${r.map(n=>`[${n}]`).join("")}`;this.errors.push(new ve(i,e))}checkSubtype(e,r){let i=tn(e,r);return i&&this.error(i),i}},_r=class Ri{constructor(e,r,i,n,a){this.name=e,this.type=r,this._evaluate=i,this.args=n,this.key=a}evaluate(e){return this._evaluate(e,this.args,this.key)}eachChild(e){this.args.forEach(e)}outputDefined(){return!1}static parse(e,r){let i=e[0],n=Ri.definitions[i];if(!n)return r.error(`Unknown expression "${i}". If you wanted a literal array, use ["literal", [...]].`,0);let a=Array.isArray(n)?n[0]:n.type,s=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,o=s.filter(([u])=>!Array.isArray(u)||u.length===e.length-1),l=null;for(let[u,h]of o){l=new ef(r.registry,ba,r.path,null,r.scope);let c=[],p=!1;for(let f=1;f<e.length;f++){let d=e[f],y=Array.isArray(u)?u[f-1]:u.type,m=l.parse(d,1+c.length,y);if(!m){p=!0;break}c.push(m)}if(!p){if(Array.isArray(u)&&u.length!==c.length){l.error(`Expected ${u.length} arguments, but found ${c.length} instead.`);continue}for(let f=0;f<c.length;f++){let d=Array.isArray(u)?u[f]:u.type,y=c[f];l.concat(f+1).checkSubtype(d,y.type)}if(l.errors.length===0)return new Ri(i,a,h,c,r.key)}}if(o.length===1)r.errors.push(...l.errors);else{let u=(o.length?o:s).map(([c])=>tm(c)).join(" | "),h=[];for(let c=1;c<e.length;c++){let p=r.parse(e[c],1+h.length);if(!p)return null;h.push(yt(p.type))}r.error(`Expected arguments of type ${u}, but found (${h.join(", ")}) instead.`)}return null}static register(e,r){Ri.definitions=r;for(let i in r)e[i]=Ri}};function Eh(t,[e,r,i,n],a){e=e.evaluate(t),r=r.evaluate(t),i=i.evaluate(t);let s=n?n.evaluate(t):1,o=Dp(e,r,i,s);if(o)throw new ft(o,a);return new gt(e/255,r/255,i/255,s,!1)}function Fh(t,e){return t in e&&e[t]!==void 0}function Vs(t,e){let r=e[t];return r===void 0?null:r}function Q0(t,e,r,i){for(;r<=i;){let n=r+i>>1;if(e[n]===t)return!0;e[n]>t?i=n-1:r=n+1}return!1}function sr(t){return{type:t}}_r.register(Yr,{error:[R1,[Y],(t,[e],r)=>{throw new ft(e.evaluate(t),r)}],typeof:[Y,[Z],(t,[e])=>yt(_t(e.evaluate(t)))],"to-rgba":[Ut(I,4),[ce],(t,[e])=>{let[r,i,n,a]=e.evaluate(t).rgb;return[r*255,i*255,n*255,a]}],rgb:[ce,[I,I,I],Eh],rgba:[ce,[I,I,I,I],Eh],has:{type:tt,overloads:[[[Y],(t,[e])=>Fh(e.evaluate(t),t.properties())],[[Y,fr],(t,[e,r])=>Fh(e.evaluate(t),r.evaluate(t))]]},get:{type:Z,overloads:[[[Y],(t,[e])=>Vs(e.evaluate(t),t.properties())],[[Y,fr],(t,[e,r])=>Vs(e.evaluate(t),r.evaluate(t))]]},"feature-state":[Z,[Y],(t,[e])=>Vs(e.evaluate(t),t.featureState||{})],properties:[fr,[],t=>t.properties()],"geometry-type":[Y,[],t=>t.geometryType()],id:[Z,[],t=>t.id()],zoom:[I,[],t=>t.globals.zoom],"heatmap-density":[I,[],t=>t.globals.heatmapDensity||0],elevation:[I,[],t=>t.globals.elevation||0],"line-progress":[I,[],t=>t.globals.lineProgress||0],accumulated:[Z,[],t=>t.globals.accumulated===void 0?null:t.globals.accumulated],"+":[I,sr(I),(t,e)=>{let r=0;for(let i of e)r+=i.evaluate(t);return r}],"*":[I,sr(I),(t,e)=>{let r=1;for(let i of e)r*=i.evaluate(t);return r}],"-":{type:I,overloads:[[[I,I],(t,[e,r])=>e.evaluate(t)-r.evaluate(t)],[[I],(t,[e])=>-e.evaluate(t)]]},"/":[I,[I,I],(t,[e,r])=>e.evaluate(t)/r.evaluate(t)],"%":[I,[I,I],(t,[e,r])=>e.evaluate(t)%r.evaluate(t)],ln2:[I,[],()=>Math.LN2],pi:[I,[],()=>Math.PI],e:[I,[],()=>Math.E],"^":[I,[I,I],(t,[e,r])=>e.evaluate(t)**+r.evaluate(t)],sqrt:[I,[I],(t,[e])=>Math.sqrt(e.evaluate(t))],log10:[I,[I],(t,[e])=>Math.log(e.evaluate(t))/Math.LN10],ln:[I,[I],(t,[e])=>Math.log(e.evaluate(t))],log2:[I,[I],(t,[e])=>Math.log(e.evaluate(t))/Math.LN2],sin:[I,[I],(t,[e])=>Math.sin(e.evaluate(t))],cos:[I,[I],(t,[e])=>Math.cos(e.evaluate(t))],tan:[I,[I],(t,[e])=>Math.tan(e.evaluate(t))],asin:[I,[I],(t,[e])=>Math.asin(e.evaluate(t))],acos:[I,[I],(t,[e])=>Math.acos(e.evaluate(t))],atan:[I,[I],(t,[e])=>Math.atan(e.evaluate(t))],min:[I,sr(I),(t,e)=>Math.min(...e.map(r=>r.evaluate(t)))],max:[I,sr(I),(t,e)=>Math.max(...e.map(r=>r.evaluate(t)))],abs:[I,[I],(t,[e])=>Math.abs(e.evaluate(t))],round:[I,[I],(t,[e])=>{let r=e.evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[I,[I],(t,[e])=>Math.floor(e.evaluate(t))],ceil:[I,[I],(t,[e])=>Math.ceil(e.evaluate(t))],"filter-==":[tt,[Y,Z],(t,[e,r])=>t.properties()[e.value]===r.value],"filter-id-==":[tt,[Z],(t,[e])=>t.id()===e.value],"filter-type-==":[tt,[Y],(t,[e])=>t.geometryType()===e.value],"filter-<":[tt,[Y,Z],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i<n}],"filter-id-<":[tt,[Z],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r<i}],"filter->":[tt,[Y,Z],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i>n}],"filter-id->":[tt,[Z],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r>i}],"filter-<=":[tt,[Y,Z],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i<=n}],"filter-id-<=":[tt,[Z],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r<=i}],"filter->=":[tt,[Y,Z],(t,[e,r])=>{let i=t.properties()[e.value],n=r.value;return typeof i==typeof n&&i>=n}],"filter-id->=":[tt,[Z],(t,[e])=>{let r=t.id(),i=e.value;return typeof r==typeof i&&r>=i}],"filter-has":[tt,[Z],(t,[e])=>{let r=e.value,i=t.properties();return r in i&&i[r]!==void 0}],"filter-has-id":[tt,[],t=>t.id()!==null&&t.id()!==void 0],"filter-type-in":[tt,[Ut(Y)],(t,[e])=>e.value.indexOf(t.geometryType())>=0],"filter-id-in":[tt,[Ut(Z)],(t,[e])=>e.value.indexOf(t.id())>=0],"filter-in-small":[tt,[Y,Ut(Z)],(t,[e,r])=>r.value.indexOf(t.properties()[e.value])>=0],"filter-in-large":[tt,[Y,Ut(Z)],(t,[e,r])=>Q0(t.properties()[e.value],r.value,0,r.value.length-1)],all:{type:tt,overloads:[[[tt,tt],(t,[e,r])=>e.evaluate(t)&&r.evaluate(t)],[sr(tt),(t,e)=>{for(let r of e)if(!r.evaluate(t))return!1;return!0}]]},any:{type:tt,overloads:[[[tt,tt],(t,[e,r])=>e.evaluate(t)||r.evaluate(t)],[sr(tt),(t,e)=>{for(let r of e)if(r.evaluate(t))return!0;return!1}]]},"!":[tt,[tt],(t,[e])=>!e.evaluate(t)],"is-supported-script":[tt,[Y],(t,[e])=>{let r=t.globals&&t.globals.isSupportedScript;return!r||r(e.evaluate(t))}],upcase:[Y,[Y],(t,[e])=>e.evaluate(t).toUpperCase()],downcase:[Y,[Y],(t,[e])=>e.evaluate(t).toLowerCase()],concat:[Y,sr(Z),(t,e)=>e.map(r=>Gi(r.evaluate(t))).join("")],split:[Ut(Y),[Y,Y],(t,[e,r])=>e.evaluate(t).split(r.evaluate(t))],join:[Y,[Ut(Y),Y],(t,[e,r])=>e.evaluate(t).join(r.evaluate(t))],"resolved-locale":[Y,[Pa],(t,[e])=>e.evaluate(t).resolvedLocale()]});function tm(t){return Array.isArray(t)?`(${t.map(yt).join(", ")})`:`(${yt(t.type)}...)`}function ba(t){if(t instanceof Bp)return ba(t.boundExpression);if(t instanceof _r&&t.name==="error"||t instanceof Up||t instanceof Dl||t instanceof El||t instanceof Fl)return!1;let e=t instanceof jr||t instanceof Ie,r=!0;return t.eachChild(i=>{r&&(r=e?ba(i):i instanceof ri)}),r?Na(t)&&Ua(t,["zoom","heatmap-density","elevation","line-progress","accumulated","is-supported-script"]):!1}function Na(t){if(t instanceof _r&&(t.name==="get"&&t.args.length===1||t.name==="feature-state"||t.name==="has"&&t.args.length===1||t.name==="properties"||t.name==="geometry-type"||t.name==="id"||/^filter-/.test(t.name))||t instanceof Dl||t instanceof El)return!1;let e=!0;return t.eachChild(r=>{e&&!Na(r)&&(e=!1)}),e}function rn(t){if(t instanceof _r&&t.name==="feature-state")return!1;let e=!0;return t.eachChild(r=>{e&&!rn(r)&&(e=!1)}),e}function Ua(t,e){if(t instanceof _r&&e.indexOf(t.name)>=0)return!1;let r=!0;return t.eachChild(i=>{r&&!Ua(i,e)&&(r=!1)}),r}function ii(t){return t["property-type"]==="data-driven"||t["property-type"]==="cross-faded-data-driven"}function nf(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}function kl(t){return!!t.expression&&t.expression.interpolated}var Tl=/^(.*)-transition$/;function nn(t,...e){for(let r of e)for(let i in r)t[i]=r[i];return t}function Q(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":t===null?"null":typeof t}function qa(t){return typeof t=="object"&&!!t&&!Array.isArray(t)&&_t(t)===fr}function em(t){return t}function rm(t){switch(t.type){case"color":return gt.parse;case"padding":return Ae.parse;case"numberArray":return Se.parse;case"colorArray":return oe.parse;default:return null}}function im(t){switch(t){case"exponential":return sf;case"interval":return am;case"categorical":return nm;case"identity":return sm;default:throw Error(`Unknown function type "${t}"`)}}function af(t,e){let r=t.stops&&typeof t.stops[0][0]=="object",i=r||t.property!==void 0,n=r||!i,a=t.type||(kl(e)?"exponential":"interval"),s=rm(e);if(s&&(t=nn({},t),t.stops&&(t.stops=t.stops.map(h=>[h[0],s(h[1])])),t.default?t.default=s(t.default):t.default=s(e.default)),t.colorSpace&&!Z1(t.colorSpace))throw Error(`Unknown color space: "${t.colorSpace}"`);let o=im(a),l,u;if(a==="categorical"){l=Object.create(null);for(let h of t.stops)l[h[0]]=h[1];u=typeof t.stops[0][0]}if(r){let h={},c=[];for(let d=0;d<t.stops.length;d++){let y=t.stops[d],m=y[0].zoom;h[m]===void 0&&(h[m]={zoom:m,type:t.type,property:t.property,default:t.default,stops:[]},c.push(m)),h[m].stops.push([y[0].value,y[1]])}let p=[];for(let d of c)p.push([h[d].zoom,af(h[d],e)]);let f={name:"linear"};return{kind:"composite",interpolationType:f,interpolationFactor:be.interpolationFactor.bind(void 0,f),zoomStops:p.map(d=>d[0]),evaluate({zoom:d},y){return sf({stops:p,base:t.base},e,d).evaluate(d,y)}}}if(n){let h=a==="exponential"?{name:"exponential",base:t.base===void 0?1:t.base}:null;return{kind:"camera",interpolationType:h,interpolationFactor:be.interpolationFactor.bind(void 0,h),zoomStops:t.stops.map(c=>c[0]),evaluate:({zoom:c})=>o(t,e,c,l,u)}}return{kind:"source",evaluate(h,c){let p=c&&c.properties?c.properties[t.property]:void 0;return p===void 0?xn(t.default,e.default):o(t,e,p,l,u)}}}function xn(t,e,r){if(t!==void 0)return t;if(e!==void 0)return e;if(r!==void 0)return r}function nm(t,e,r,i,n){return xn(typeof r===n?i[r]:void 0,t.default,e.default)}function am(t,e,r){if(Q(r)!=="number")return xn(t.default,e.default);let i=t.stops.length;if(i===1||r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];let n=Oa(t.stops.map(a=>a[0]),r,"");return t.stops[n][1]}function sf(t,e,r){let i=t.base===void 0?1:t.base;if(Q(r)!=="number")return xn(t.default,e.default);let n=t.stops.length;if(n===1||r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];let a=Oa(t.stops.map(h=>h[0]),r,""),s=om(r,i,t.stops[a][0],t.stops[a+1][0]),o=t.stops[a][1],l=t.stops[a+1][1],u=gr[e.type]||em;return typeof o.evaluate=="function"?{evaluate(...h){let c=o.evaluate.apply(void 0,h),p=l.evaluate.apply(void 0,h);if(c!==void 0&&p!==void 0)return u(c,p,s,t.colorSpace)}}:u(o,l,s,t.colorSpace)}function sm(t,e,r){switch(e.type){case"color":r=gt.parse(r);break;case"formatted":r=ze.fromString(r.toString());break;case"resolvedImage":r=_e.fromString(r.toString());break;case"padding":r=Ae.parse(r);break;case"colorArray":r=oe.parse(r);break;case"numberArray":r=Se.parse(r);break;default:Q(r)!==e.type&&(e.type!=="enum"||!e.values[r])&&(r=void 0)}return xn(r,t.default,e.default)}function om(t,e,r,i){let n=i-r,a=t-r;return n===0?0:e===1?a/n:(e**+a-1)/(e**+n-1)}function so(t){return{result:"success",value:t}}function Nr(t){return{result:"error",value:t}}var Il=class{constructor(t,e,r,i){this.expression=t,this._warningHistory={},this._evaluator=new Ap,this._defaultValue=r?pf(r):null,this._enumValues=r&&r.type==="enum"?r.values:null,this._globalState=i,this._rootKey=e}evaluateWithoutErrorHandling(t,e,r,i,n,a){return this._globalState&&(t=ni(t,this._globalState)),this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.canonical=i,this._evaluator.availableImages=n||null,this._evaluator.formattedSection=a,this.expression.evaluate(this._evaluator)}evaluate(t,e,r,i,n,a){this._globalState&&(t=ni(t,this._globalState)),this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.canonical=i,this._evaluator.availableImages=n||null,this._evaluator.formattedSection=a||null;try{let s=this.expression.evaluate(this._evaluator);if(s==null||typeof s=="number"&&s!==s)return this._defaultValue;if(this._enumValues&&!(s in this._enumValues))throw new ft(`Expected value to be one of ${Object.keys(this._enumValues).map(o=>JSON.stringify(o)).join(", ")}, but found ${JSON.stringify(s)} instead.`,"");return s}catch(s){let o=s instanceof ft?s.path:"",l=`${o}|${s.message}`;return this._warningHistory[l]||(this._warningHistory[l]=!0,typeof console<"u"&&console.warn(of(this._rootKey,o,s.message,this._defaultValue))),this._defaultValue}}};function of(t,e,r,i){return`${t}${e}: ${r}${i==null?"":` Falling back to ${String(i)}.`}`}function lf(t){if(!t)throw Error(\'rootKey must identify the location of the expression in the style JSON, e.g. "layers[3].paint.line-width".\')}function ja(t){return Array.isArray(t)&&t.length>0&&typeof t[0]=="string"&&t[0]in Yr}function er(t,e,r,i){lf(e);let n=new ef(Yr,ba,[],r?hm(r):void 0),a=n.parse(t,void 0,void 0,void 0,r&&r.type==="string"?{typeAnnotation:"coerce"}:void 0);return a?so(new Il(a,e,r,i)):Nr(n.errors)}var an=class{constructor(t,e,r){this.kind=t,this._styleExpression=e,this.isStateDependent=t!=="constant"&&!rn(e.expression),this.globalStateRefs=vn(e.expression),this._globalState=r}evaluateWithoutErrorHandling(t,e,r,i,n,a){return this._globalState&&(t=ni(t,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(t,e,r,i,n,a)}evaluate(t,e,r,i,n,a){return this._globalState&&(t=ni(t,this._globalState)),this._styleExpression.evaluate(t,e,r,i,n,a)}},wa=class{constructor(t,e,r,i,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent=t!=="camera"&&!rn(e.expression),this.globalStateRefs=vn(e.expression),this.interpolationType=i,this._globalState=n}evaluateWithoutErrorHandling(t,e,r,i,n,a){return this._globalState&&(t=ni(t,this._globalState)),this._styleExpression.evaluateWithoutErrorHandling(t,e,r,i,n,a)}evaluate(t,e,r,i,n,a){return this._globalState&&(t=ni(t,this._globalState)),this._styleExpression.evaluate(t,e,r,i,n,a)}interpolationFactor(t,e,r){return this.interpolationType?be.interpolationFactor(this.interpolationType,t,e,r):0}};function lm(t){return t._styleExpression!==void 0}function uf(t,e,r,i){let n=er(t,e,r,i);if(n.result==="error")return n;let a=n.value.expression,s=Na(a);if(!s&&!ii(r))return Nr([new ve("","data expressions not supported")]);let o=Ua(a,["zoom"]);if(!o&&!nf(r))return Nr([new ve("","zoom expressions not supported")]);let l=pa(a);if(!l&&!o)return Nr([new ve("",\'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.\')]);if(l instanceof ve)return Nr([l]);if(l instanceof be&&!kl(r))return Nr([new ve("",\'"interpolate" expressions cannot be used with this property\')]);if(!l)return so(s?new an("constant",n.value,i):new an("source",n.value,i));let u=l instanceof be?l.interpolation:void 0;return so(s?new wa("camera",n.value,l.labels,u,i):new wa("composite",n.value,l.labels,u,i))}var hf=class cf{constructor(e,r,i){this.isStateDependent=!1,this.globalStateRefs=new Set,this._globalState=null,lf(r),this._parameters=e,this._specification=i,this._rootKey=r,this._defaultValue=pf(i),this._warningHistory={};let n=af(this._parameters,this._specification);this.kind=n.kind,this.interpolationFactor=n.interpolationFactor,this.zoomStops=n.zoomStops,this.interpolationType=n.interpolationType,this._innerEvaluate=n.evaluate}evaluate(e,r){try{return this._innerEvaluate(e,r)}catch(i){let n=i instanceof Error?i.message:String(i),a=`|${n}`;return this._warningHistory[a]||(this._warningHistory[a]=!0,typeof console<"u"&&console.warn(of(this._rootKey,"",n,this._defaultValue))),this._defaultValue}}static deserialize(e){return new cf(e._parameters,e._rootKey,e._specification)}static serialize(e){return{_parameters:e._parameters,_specification:e._specification,_rootKey:e._rootKey}}};function um(t,e,r,i){if(qa(t))return new hf(t,e,r);if(ja(t)){let n=uf(t,e,r,i);if(n.result==="error")throw Error(n.value.map(a=>`${a.key}: ${a.message}`).join(", "));return n.value}{let n=t;return r.type==="color"&&typeof t=="string"?n=gt.parse(t):r.type==="padding"&&(typeof t=="number"||Array.isArray(t))?n=Ae.parse(t):r.type==="numberArray"&&(typeof t=="number"||Array.isArray(t))?n=Se.parse(t):r.type==="colorArray"&&(typeof t=="string"||Array.isArray(t))?n=oe.parse(t):r.type==="variableAnchorOffsetCollection"&&Array.isArray(t)?n=De.parse(t):r.type==="projectionDefinition"&&typeof t=="string"&&(n=Dr.parse(t)),{globalStateRefs:new Set,_globalState:null,kind:"constant",evaluate:()=>n}}}function pa(t){let e=null;if(t instanceof Cp)e=pa(t.result);else if(t instanceof Rp){for(let r of t.args)if(e=pa(r),e)break}else(t instanceof vl||t instanceof be)&&t.input instanceof _r&&t.input.name==="zoom"&&(e=t);return e instanceof ve||t.eachChild(r=>{let i=pa(r);i instanceof ve?e=i:!e&&i?e=new ve("",\'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.\'):e&&i&&e!==i&&(e=new ve("",\'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.\'))}),e}function vn(t,e=new Set){return t instanceof Fl&&e.add(t.key),t.eachChild(r=>{vn(r,e)}),e}function hm(t){let e={color:ce,string:Y,number:I,enum:Y,boolean:tt,formatted:yn,padding:za,numberArray:La,colorArray:Qi,projectionDefinition:Ba,resolvedImage:mn,variableAnchorOffsetCollection:Va};return t.type==="array"?Ut(e[t.value]||Z,t.length):e[t.type]}function pf(t){if(t.type==="color"&&qa(t.default))return new gt(0,0,0,0);switch(t.type){case"color":return gt.parse(t.default)||null;case"padding":return Ae.parse(t.default)||null;case"numberArray":return Se.parse(t.default)||null;case"colorArray":return oe.parse(t.default)||null;case"variableAnchorOffsetCollection":return De.parse(t.default)||null;case"projectionDefinition":return Dr.parse(t.default)||null;default:return t.default===void 0?null:t.default}}function ni(t,e){let{zoom:r,heatmapDensity:i,elevation:n,lineProgress:a,isSupportedScript:s,accumulated:o}=t!=null?t:{};return{zoom:r,heatmapDensity:i,elevation:n,lineProgress:a,isSupportedScript:s,accumulated:o,globalState:e}}function cm(t){let e=!1;for(let r of t){let i=ff(r);if(i==="expression")return"expression";i==="legacy"&&(e=!0)}return e?"legacy":"neutral"}function ff(t){if(typeof t=="boolean")return"neutral";if(!Array.isArray(t)||t.length===0)return"legacy";switch(t[0]){case"has":return t.length<2||t[1]==="$id"||t[1]==="$type"?"legacy":t.length===2?"neutral":"expression";case"in":return t.length>=3&&(typeof t[1]!="string"||Array.isArray(t[2]))?"expression":"legacy";case"!in":case"!has":return"legacy";case"==":case"!=":case">":case">=":case"<":case"<=":return t.length!==3||Array.isArray(t[1])||Array.isArray(t[2])?"expression":"legacy";case"none":return"legacy";case"any":case"all":return cm(t.slice(1));default:return"expression"}}function Cl(t){return ff(t)!=="legacy"}function kh(t){return t==="$type"?["geometry-type"]:t==="$id"?["id"]:["get",t]}function pm(t){switch(t[0]){case"==":case"!=":case"<":case"<=":case">":case">=":return t.length!==3||typeof t[1]!="string"?null:[t[0],kh(t[1]),t[2]];case"in":case"!in":{if(t.length<2||typeof t[1]!="string")return null;let e=["in",kh(t[1]),["literal",t.slice(2)]];return t[0]==="!in"?["!",e]:e}case"has":case"!has":{if(t.length!==2||typeof t[1]!="string"||t[1]==="$type"||t[1]==="$id")return null;let e=["has",t[1]];return t[0]==="!has"?["!",e]:e}default:return null}}function df(t){if((t[0]==="<"||t[0]==="<="||t[0]===">"||t[0]===">=")&&t[1]==="$type")return`"$type" cannot be use with operator "${t[0]}"`;let e=pm(t);return e?`Mixing deprecated filter syntax with expression syntax is not supported. Replace ${JSON.stringify(t)} with ${JSON.stringify(e)}.`:`Mixing deprecated filter syntax with expression syntax is not supported. Convert ${JSON.stringify(t)} to expression syntax.`}function Os(t,e,r){let i=r[t];return Array.isArray(i)?Cl(i)?Ml(i,e.concat(t)):{path:e.concat(t),legacyFilter:i}:null}function Ml(t,e=[]){if(!Array.isArray(t)||t.length<1)return null;switch(t[0]){case"all":case"any":case"none":for(let r=1;r<t.length;r++){let i=Os(r,e,t);if(i)return i}break;case"!":{let r=Os(1,e,t);if(r)return r;break}case"case":for(let r=1;r<t.length-1;r+=2){let i=Os(r,e,t);if(i)return i}}return null}function fm(t,e){let r=Ml(t);if(!r||typeof console>"u")return;let i=r.path.map(n=>`[${n}]`).join("");console.warn(`${e}${i}: ${df(r.legacyFilter)}`)}var dm={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}};function ai(t,e,r){if(t==null)return{filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set};Cl(t)?fm(t,e):t=Da(t);let i=er(t,e,dm,r);if(i.result==="error")throw Error(i.value.map(n=>`${n.key}: ${n.message}`).join(", "));return{filter:(n,a,s)=>i.value.evaluate(n,a,{},s),needGeometry:yf(t),getGlobalStateRefs:()=>vn(i.value.expression)}}function ym(t,e){return t<e?-1:+(t>e)}function yf(t){if(!Array.isArray(t))return!1;if(t[0]==="within"||t[0]==="distance")return!0;for(let e=1;e<t.length;e++)if(yf(t[e]))return!0;return!1}function Da(t){if(!t)return!0;let e=t[0];return t.length<=1?e!=="any":e==="=="?Rs(t[1],t[2],"=="):e==="!="?Xn(Rs(t[1],t[2],"==")):e==="<"||e===">"||e==="<="||e===">="?Rs(t[1],t[2],e):e==="any"?mm(t.slice(1)):e==="all"?["all"].concat(t.slice(1).map(Da)):e==="none"?["all"].concat(t.slice(1).map(Da).map(Xn)):e==="in"?Th(t[1],t.slice(2)):e==="!in"?Xn(Th(t[1],t.slice(2))):e==="has"?Ih(t[1]):e!=="!has"||Xn(Ih(t[1]))}function Rs(t,e,r){switch(t){case"$type":return[`filter-type-${r}`,e];case"$id":return[`filter-id-${r}`,e];default:return[`filter-${r}`,t,e]}}function mm(t){return["any"].concat(t.map(Da))}function Th(t,e){if(e.length===0)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some(r=>typeof r!=typeof e[0])?["filter-in-large",t,["literal",e.sort(ym)]]:["filter-in-small",t,["literal",e]]}}function Ih(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Xn(t){return["!",t]}function mf(t){let e=t.key,r=t.value;return r?[new E(e,r,"constants have been deprecated as of v8")]:[]}function Dt(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function xr(t){if(Array.isArray(t))return t.map(xr);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){let e={};for(let r in t)e[r]=xr(t[r]);return e}return Dt(t)}function te(t){let e=t.key,r=t.value,i=t.valueSpec||{},n=t.objectElementValidators||{},a=t.style,s=t.styleSpec,o=t.validateSpec,l=[],u=Q(r);if(u!=="object")return[new E(e,r,`object expected, ${u} found`)];for(let h in r){let c=h.split(".")[0],p=ji(i,c)||i["*"],f;if(ji(n,c))f=n[c];else if(ji(i,c)){if(r[h]===void 0)continue;f=o}else if(n["*"])f=n["*"];else if(i["*"])f=o;else{l.push(new E(e,r[h],`unknown property "${h}"`));continue}l=l.concat(f({key:(e&&`${e}.`)+h,value:r[h],valueSpec:p,style:a,styleSpec:s,object:r,objectKey:h,validateSpec:o},r))}for(let h in i)n[h]||i[h].required&&i[h].default===void 0&&r[h]===void 0&&l.push(new E(e,r,`missing required property "${h}"`));return l}function Bl(t){let e=t.value,r=t.valueSpec,i=t.validateSpec,n=t.style,a=t.styleSpec,s=t.key,o=t.arrayElementValidator||i;if(Q(e)!=="array")return[new E(s,e,`array expected, ${Q(e)} found`)];if(r.length&&e.length!==r.length)return[new E(s,e,`array length ${r.length} expected, length ${e.length} found`)];let l={type:r.value,values:r.values};a.$version<7&&(l.function=r.function),Q(r.value)==="object"&&(l=r.value);let u=[];for(let h=0;h<e.length;h++)u=u.concat(o({array:e,arrayIndex:h,value:e[h],valueSpec:l,validateSpec:t.validateSpec,style:n,styleSpec:a,key:`${s}[${h}]`}));return u}function Ga(t){let e=t.key,r=t.value,i=t.valueSpec,n=Q(r);return n==="number"&&r!==r&&(n="NaN"),n==="number"?"minimum"in i&&r<i.minimum?[new E(e,r,`${r} is less than the minimum value ${i.minimum}`)]:"maximum"in i&&r>i.maximum?[new E(e,r,`${r} is greater than the maximum value ${i.maximum}`)]:[]:[new E(e,r,`number expected, ${n} found`)]}function gf(t){let e=t.valueSpec,r=Dt(t.value.type),i,n={},a,s,o=r!=="categorical"&&t.value.property===void 0,l=!o,u=Q(t.value.stops)==="array"&&Q(t.value.stops[0])==="array"&&Q(t.value.stops[0][0])==="object",h=te({key:t.key,value:t.value,valueSpec:t.styleSpec.function,validateSpec:t.validateSpec,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:c,default:d}});return r==="identity"&&o&&h.push(new E(t.key,t.value,\'missing required property "property"\')),r!=="identity"&&!t.value.stops&&h.push(new E(t.key,t.value,\'missing required property "stops"\')),r==="exponential"&&t.valueSpec.expression&&!kl(t.valueSpec)&&h.push(new E(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(l&&!ii(t.valueSpec)?h.push(new E(t.key,t.value,"property functions not supported")):o&&!nf(t.valueSpec)&&h.push(new E(t.key,t.value,"zoom functions not supported"))),(r==="categorical"||u)&&t.value.property===void 0&&h.push(new E(t.key,t.value,\'"property" property is required\')),h;function c(y){if(r==="identity")return[new E(y.key,y.value,\'identity function may not have a "stops" property\')];let m=[],g=y.value;return m=m.concat(Bl({key:y.key,value:g,valueSpec:y.valueSpec,validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec,arrayElementValidator:p})),Q(g)==="array"&&g.length===0&&m.push(new E(y.key,g,"array must have at least one stop")),m}function p(y){let m=[],g=y.value,x=y.key;if(Q(g)!=="array")return[new E(x,g,`array expected, ${Q(g)} found`)];if(g.length!==2)return[new E(x,g,`array length 2 expected, length ${g.length} found`)];if(u){if(Q(g[0])!=="object")return[new E(x,g,`object expected, ${Q(g[0])} found`)];if(g[0].zoom===void 0)return[new E(x,g,"object stop key must have zoom")];if(g[0].value===void 0)return[new E(x,g,"object stop key must have value")];if(s&&s>Dt(g[0].zoom))return[new E(x,g[0].zoom,"stop zoom values must appear in ascending order")];Dt(g[0].zoom)!==s&&(s=Dt(g[0].zoom),a=void 0,n={}),m=m.concat(te({key:`${x}[0]`,value:g[0],valueSpec:{zoom:{}},validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec,objectElementValidators:{zoom:Ga,value:f}}))}else m=m.concat(f({key:`${x}[0]`,value:g[0],valueSpec:{},validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec},g));return ja(xr(g[1]))?m.concat([new E(`${x}[1]`,g[1],"expressions are not allowed in function stops.")]):m.concat(y.validateSpec({key:`${x}[1]`,value:g[1],valueSpec:e,validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec}))}function f(y,m){let g=Q(y.value),x=Dt(y.value),v=y.value===null?m:y.value;if(!i)i=g;else if(g!==i)return[new E(y.key,v,`${g} stop domain type must match previous stop domain type ${i}`)];if(g!=="number"&&g!=="string"&&g!=="boolean")return[new E(y.key,v,"stop domain value must be a number, string, or boolean")];if(g!=="number"&&r!=="categorical"){let b=`number expected, ${g} found`;return ii(e)&&r===void 0&&(b+=\'\
If you intended to use a categorical function, specify `"type": "categorical"`.\'),[new E(y.key,v,b)]}return r==="categorical"&&g==="number"&&(!isFinite(x)||Math.floor(x)!==x)?[new E(y.key,v,`integer expected, found ${x}`)]:r!=="categorical"&&g==="number"&&a!==void 0&&x<a?[new E(y.key,v,"stop domain values must appear in ascending order")]:(a=x,r==="categorical"&&x in n?[new E(y.key,v,"stop domain values must be unique")]:(n[x]=!0,[]))}function d(y){return y.validateSpec({key:y.key,value:y.value,valueSpec:e,validateSpec:y.validateSpec,style:y.style,styleSpec:y.styleSpec})}}function si(t){let e=(t.expressionContext==="property"?uf:er)(xr(t.value),t.key,t.valueSpec);if(e.result==="error")return e.value.map(i=>new E(`${t.key}${i.key}`,t.value,i.message));let r=e.value.expression||e.value._styleExpression.expression;if(t.expressionContext==="property"&&t.propertyKey==="text-font"&&!r.outputDefined())return[new E(t.key,t.value,`Invalid data expression for "${t.propertyKey}". Output values must be contained as literals within the expression.`)];if(t.expressionContext==="property"&&t.propertyType==="layout"&&!rn(r))return[new E(t.key,t.value,\'"feature-state" data expressions are not supported with layout properties.\')];if(t.expressionContext==="filter"&&!rn(r))return[new E(t.key,t.value,\'"feature-state" data expressions are not supported with filters.\')];if(t.expressionContext&&t.expressionContext.indexOf("cluster")===0){if(!Ua(r,["zoom","feature-state"]))return[new E(t.key,t.value,\'"zoom" and "feature-state" expressions are not supported with cluster properties.\')];if(t.expressionContext==="cluster-initial"&&!Na(r))return[new E(t.key,t.value,"Feature data expressions are not supported with initial expression part of cluster properties.")]}return[]}function gm(t){let e=t.value,r=t.key,i=Q(e);return i==="boolean"?[]:[new E(r,e,`boolean expected, ${i} found`)]}function oo(t){let e=t.key,r=t.value,i=Q(r);return i==="string"?gt.parse(String(r))?[]:[new E(e,r,`color expected, "${r}" found`)]:[new E(e,r,`color expected, ${i} found`)]}function sn(t){let e=t.key,r=t.value,i=t.valueSpec,n=[];return Array.isArray(i.values)?i.values.indexOf(Dt(r))===-1&&n.push(new E(e,r,`expected one of [${i.values.join(", ")}], ${JSON.stringify(r)} found`)):Object.keys(i.values).indexOf(Dt(r))===-1&&n.push(new E(e,r,`expected one of [${Object.keys(i.values).join(", ")}], ${JSON.stringify(r)} found`)),n}function xm(t,e){let r=t;for(let i of e)r=r[i];return r}function vm(t,e){let r=Ml(e);return r?[new E(`${t.key}${r.path.map(i=>`[${i}]`).join("")}`,xm(t.value,r.path),df(r.legacyFilter),null,"warning")]:[]}function Pl(t){let e=xr(t.value);return Cl(e)?[...vm(t,e),...si(nn({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}}))]:xf(t)}function xf(t){let e=t.value,r=t.key;if(Q(e)!=="array")return[new E(r,e,`array expected, ${Q(e)} found`)];let i=t.styleSpec,n,a=[];if(e.length<1)return[new E(r,e,"filter array must have at least 1 element")];switch(a=a.concat(sn({key:`${r}[0]`,value:e[0],valueSpec:i.filter_operator,style:t.style,styleSpec:t.styleSpec})),Dt(e[0])){case"<":case"<=":case">":case">=":e.length>=2&&Dt(e[1])==="$type"&&a.push(new E(r,e,`"$type" cannot be use with operator "${e[0]}"`));case"==":case"!=":e.length!==3&&a.push(new E(r,e,`filter array for operator "${e[0]}" must have 3 elements`));case"in":case"!in":e.length>=2&&(n=Q(e[1]),n!=="string"&&a.push(new E(`${r}[1]`,e[1],`string expected, ${n} found`)));for(let s=2;s<e.length;s++)n=Q(e[s]),Dt(e[1])==="$type"?a=a.concat(sn({key:`${r}[${s}]`,value:e[s],valueSpec:i.geometry_type,style:t.style,styleSpec:t.styleSpec})):n!=="string"&&n!=="number"&&n!=="boolean"&&a.push(new E(`${r}[${s}]`,e[s],`string, number, or boolean expected, ${n} found`));break;case"any":case"all":case"none":for(let s=1;s<e.length;s++)a=a.concat(xf({key:`${r}[${s}]`,value:e[s],style:t.style,styleSpec:t.styleSpec}));break;case"has":case"!has":n=Q(e[1]),e.length===2?n!=="string"&&a.push(new E(`${r}[1]`,e[1],`string expected, ${n} found`)):a.push(new E(r,e,`filter array for "${e[0]}" operator must have 2 elements`))}return a}function vf(t,e){let r=t.key,i=t.validateSpec,n=t.style,a=t.styleSpec,s=t.value,o=t.objectKey,l=a[`${e}_${t.layerType}`];if(!l)return[];let u=o.match(Tl);if(e==="paint"&&u&&l[u[1]]&&l[u[1]].transition)return i({key:r,value:s,valueSpec:a.transition,style:n,styleSpec:a});let h=t.valueSpec||l[o];if(!h)return[new E(r,s,`unknown property "${o}"`)];let c;if(Q(s)==="string"&&ii(h)&&!h.tokens&&(c=/^{([^}]+)}$/.exec(s)))return[new E(r,s,`"${o}" does not support interpolation syntax
Use an identity property function instead: \\`{ "type": "identity", "property": ${JSON.stringify(c[1])} }\\`.`)];let p=[];return t.layerType==="symbol"&&o==="text-font"&&qa(xr(s))&&Dt(s.type)==="identity"&&p.push(new E(r,s,\'"text-font" does not support identity functions\')),p.concat(i({key:t.key,value:s,valueSpec:h,style:n,styleSpec:a,expressionContext:"property",propertyType:e,propertyKey:o}))}function bf(t){return vf(t,"paint")}function wf(t){return vf(t,"layout")}function Df(t){var l,u;let e=[],r=t.value,i=t.key,n=t.style,a=t.styleSpec;if(Q(r)!=="object")return[new E(i,r,`object expected, ${Q(r)} found`)];!r.type&&!r.ref&&e.push(new E(i,r,\'either "type" or "ref" is required\'));let s=Dt(r.type),o=Dt(r.ref);if(r.id){let h=Dt(r.id);for(let c=0;c<t.arrayIndex;c++){let p=n.layers[c];Dt(p.id)===h&&e.push(new E(i,r.id,`duplicate layer id "${r.id}", previously used at line ${p.id.__line__}`))}}if("ref"in r){["type","source","source-layer","filter","layout"].forEach(c=>{c in r&&e.push(new E(i,r[c],`"${c}" is prohibited for ref layers`))});let h;n.layers.forEach(c=>{Dt(c.id)===o&&(h=c)}),h?h.ref?e.push(new E(i,r.ref,"ref cannot reference another ref layer")):s=Dt(h.type):e.push(new E(i,r.ref,`ref layer "${o}" not found`))}else if(s!=="background")if(!r.source)e.push(new E(i,r,\'missing required property "source"\'));else{let h=n.sources&&n.sources[r.source],c=h&&Dt(h.type);h?c==="vector"&&s==="raster"?e.push(new E(i,r.source,`layer "${r.id}" requires a raster source`)):c!=="raster-dem"&&s==="hillshade"||c!=="raster-dem"&&s==="color-relief"?e.push(new E(i,r.source,`layer "${r.id}" requires a raster-dem source`)):c==="raster"&&s!=="raster"?e.push(new E(i,r.source,`layer "${r.id}" requires a vector source`)):c==="vector"&&!r["source-layer"]?e.push(new E(i,r,`layer "${r.id}" must specify a "source-layer"`)):c==="raster-dem"&&s!=="hillshade"&&s!=="color-relief"?e.push(new E(i,r.source,"raster-dem source can only be used with layer type \'hillshade\' or \'color-relief\'.")):s==="line"&&r.paint&&r.paint["line-gradient"]&&(c!=="geojson"||!h.lineMetrics)&&e.push(new E(i,r,`layer "${r.id}" specifies a line-gradient, which requires a GeoJSON source with \\`lineMetrics\\` enabled.`)):e.push(new E(i,r.source,`source "${r.source}" not found`))}return s==="raster"&&((l=r.paint)!=null&&l.resampling)&&((u=r.paint)!=null&&u["raster-resampling"])&&e.push(new E(i,r.paint,`layer "${r.id}" redundantly specifies "resampling" and "raster-resampling" paint properties, but only one is allowed. It is advised to use "resampling".`)),e=e.concat(te({key:i,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,validateSpec:t.validateSpec,objectElementValidators:{"*"(){return[]},type(){return t.validateSpec({key:`${i}.type`,value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,validateSpec:t.validateSpec,object:r,objectKey:"type"})},filter:Pl,layout(h){return te({layer:r,key:h.key,value:h.value,style:h.style,styleSpec:h.styleSpec,validateSpec:h.validateSpec,objectElementValidators:{"*"(c){return wf(nn({layerType:s},c))}}})},paint(h){return te({layer:r,key:h.key,value:h.value,style:h.style,styleSpec:h.styleSpec,validateSpec:h.validateSpec,objectElementValidators:{"*"(c){return bf(nn({layerType:s},c))}}})}}})),e}function tr(t){let e=t.value,r=t.key,i=Q(e);return i==="string"?[]:[new E(r,e,`string expected, ${i} found`)]}function bm(t){var c;let e=(c=t.sourceName)!=null?c:"",r=t.value,i=t.styleSpec,n=i.source_raster_dem,a=t.style,s=[],o=Q(r);if(r===void 0)return s;if(o!=="object")return s.push(new E("source_raster_dem",r,`object expected, ${o} found`)),s;let l=Dt(r.encoding)==="custom",u=["redFactor","greenFactor","blueFactor","baseShift"],h=t.value.encoding?`"${t.value.encoding}"`:"Default";for(let p in r)!l&&u.includes(p)?s.push(new E(p,r[p],`In "${e}": "${p}" is only valid when "encoding" is set to "custom". ${h} encoding found`)):n[p]?s=s.concat(t.validateSpec({key:p,value:r[p],valueSpec:n[p],validateSpec:t.validateSpec,style:a,styleSpec:i})):s.push(new E(p,r[p],`unknown property "${p}"`));return s}var Ch={promoteId:wm};function _f(t){let e=t.value,r=t.key,i=t.styleSpec,n=t.style,a=t.validateSpec;if(!e.type)return[new E(r,e,\'"type" is required\')];let s=Dt(e.type),o;switch(s){case"vector":case"raster":return o=te({key:r,value:e,valueSpec:i[`source_${s.replace("-","_")}`],style:t.style,styleSpec:i,objectElementValidators:Ch,validateSpec:a}),o;case"raster-dem":return o=bm({sourceName:r,value:e,style:t.style,styleSpec:i,validateSpec:a}),o;case"geojson":if(o=te({key:r,value:e,valueSpec:i.source_geojson,style:n,styleSpec:i,validateSpec:a,objectElementValidators:Ch}),e.cluster)for(let l in e.clusterProperties){let[u,h]=e.clusterProperties[l],c=typeof u=="string"?[u,["accumulated"],["get",l]]:u;o.push(...si({key:`${r}.${l}.map`,value:h,validateSpec:a,expressionContext:"cluster-map"})),o.push(...si({key:`${r}.${l}.reduce`,value:c,validateSpec:a,expressionContext:"cluster-reduce"}))}return o;case"video":return te({key:r,value:e,valueSpec:i.source_video,style:n,validateSpec:a,styleSpec:i});case"image":return te({key:r,value:e,valueSpec:i.source_image,style:n,validateSpec:a,styleSpec:i});case"canvas":return[new E(r,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")];default:return sn({key:`${r}.type`,value:e.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:n,validateSpec:a,styleSpec:i})}}function wm({key:t,value:e}){if(Q(e)==="string")return tr({key:t,value:e});{let r=[];for(let i in e)r.push(...tr({key:`${t}.${i}`,value:e[i]}));return r}}function Af(t){let e=t.value,r=t.styleSpec,i=r.light,n=t.style,a=[],s=Q(e);if(e===void 0)return a;if(s!=="object")return a=a.concat([new E("light",e,`object expected, ${s} found`)]),a;for(let o in e){let l=o.match(Tl);a=l&&i[l[1]]&&i[l[1]].transition?a.concat(t.validateSpec({key:o,value:e[o],valueSpec:r.transition,validateSpec:t.validateSpec,style:n,styleSpec:r})):i[o]?a.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],validateSpec:t.validateSpec,style:n,styleSpec:r})):a.concat([new E(o,e[o],`unknown property "${o}"`)])}return a}function Sf(t){let e=t.value,r=t.styleSpec,i=r.sky,n=t.style,a=Q(e);if(e===void 0)return[];if(a!=="object")return[new E("sky",e,`object expected, ${a} found`)];let s=[];for(let o in e){let l=o.match(Tl);s=l&&i[l[1]]&&i[l[1]].transition?s.concat(t.validateSpec({key:o,value:e[o],valueSpec:r.transition,style:n,styleSpec:r})):i[o]?s.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],style:n,styleSpec:r})):s.concat([new E(o,e[o],`unknown property "${o}"`)])}return s}function Ef(t){let e=t.value,r=t.styleSpec,i=r.terrain,n=t.style,a=[],s=Q(e);if(e===void 0)return a;if(s!=="object")return a=a.concat([new E("terrain",e,`object expected, ${s} found`)]),a;for(let o in e)a=i[o]?a.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],validateSpec:t.validateSpec,style:n,styleSpec:r})):a.concat([new E(o,e[o],`unknown property "${o}"`)]);return a}function Dm(t){return tr(t).length===0?[]:si(t)}function _m(t){return tr(t).length===0?[]:si(t)}function Am(t){let e=t.key,r=t.value;if(Q(r)==="array"){if(r.length<1||r.length>4)return[new E(e,r,`padding requires 1 to 4 values; ${r.length} values found`)];let i={type:"number"},n=[];for(let a=0;a<r.length;a++)n=n.concat(t.validateSpec({key:`${e}[${a}]`,value:r[a],validateSpec:t.validateSpec,valueSpec:i}));return n}return Ga({key:e,value:r,valueSpec:{}})}function Sm(t){let e=t.key,r=t.value;if(Q(r)==="array"){let i={type:"number"};if(r.length<1)return[new E(e,r,"array length at least 1 expected, length 0 found")];let n=[];for(let a=0;a<r.length;a++)n=n.concat(t.validateSpec({key:`${e}[${a}]`,value:r[a],validateSpec:t.validateSpec,valueSpec:i}));return n}return Ga({key:e,value:r,valueSpec:{}})}function Em(t){let e=t.key,r=t.value;if(Q(r)==="array"){if(r.length<1)return[new E(e,r,"array length at least 1 expected, length 0 found")];let i=[];for(let n=0;n<r.length;n++)i=i.concat(oo({key:`${e}[${n}]`,value:r[n],valueSpec:{}}));return i}return oo({key:e,value:r,valueSpec:{}})}function Fm(t){let e=t.key,r=t.value,i=Q(r),n=t.styleSpec;if(i!=="array"||r.length<1||r.length%2!=0)return[new E(e,r,"variableAnchorOffsetCollection requires a non-empty array of even length")];let a=[];for(let s=0;s<r.length;s+=2)a=a.concat(sn({key:`${e}[${s}]`,value:r[s],valueSpec:n.layout_symbol["text-anchor"]})),a=a.concat(Bl({key:`${e}[${s+1}]`,value:r[s+1],valueSpec:{length:2,value:"number"},validateSpec:t.validateSpec,style:t.style,styleSpec:n}));return a}function Ff(t){let e=[],r=t.value,i=t.key;if(Array.isArray(r)){let n=[],a=[];for(let s in r)r[s].id&&n.includes(r[s].id)&&e.push(new E(i,r,`all the sprites\' ids must be unique, but ${r[s].id} is duplicated`)),n.push(r[s].id),r[s].url&&a.includes(r[s].url)&&e.push(new E(i,r,`all the sprites\' URLs must be unique, but ${r[s].url} is duplicated`)),a.push(r[s].url),e=e.concat(te({key:`${i}[${s}]`,value:r[s],valueSpec:{id:{type:"string",required:!0},url:{type:"string",required:!0}},validateSpec:t.validateSpec}));return e}return tr({key:i,value:r})}function km(t){let e=t.value,r=t.styleSpec,i=r.projection,n=t.style,a=Q(e);if(e===void 0)return[];if(a!=="object")return[new E("projection",e,`object expected, ${a} found`)];let s=[];for(let o in e)s=i[o]?s.concat(t.validateSpec({key:o,value:e[o],valueSpec:i[o],style:n,styleSpec:r})):s.concat([new E(o,e[o],`unknown property "${o}"`)]);return s}function Tm(t){let e=t.key,r=t.value;r=r instanceof String?r.valueOf():r;let i=Q(r);return i==="array"&&!Cm(r)&&!Im(r)?[new E(e,r,`projection expected, invalid array ${JSON.stringify(r)} found`)]:["array","string"].includes(i)?[]:[new E(e,r,`projection expected, invalid type "${i}" found`)]}function Im(t){return!!["interpolate","step","literal"].includes(t[0])}function Cm(t){return Array.isArray(t)&&t.length===3&&typeof t[0]=="string"&&typeof t[1]=="string"&&typeof t[2]=="number"}function lo(t){return!!t&&t.constructor===Object}function kf(t){return lo(t.value)?[]:[new E(t.key,t.value,`object expected, ${Q(t.value)} found`)]}var Mh=1114111,Mm=/^u\\+(?:([0-9a-f]{1,6})(?:-([0-9a-f]{1,6}))?|([0-9a-f]{0,5}\\?{1,6}))$/i;function Bm(t,e){if(Q(e)!=="string")return[];let r=`${e}`,i=()=>[new E(t,e,\'invalid unicode range, expected a value such as "U+26", "U+0-10FFFF" or "U+4??"\')],n=r.match(Mm);if(!n)return i();let[,a,s,o]=n;if(o!==void 0)return o.length>6?i():[];let l=parseInt(a,16),u=s===void 0?l:parseInt(s,16);return l>Mh||u>Mh?[new E(t,e,"unicode range is out of bounds, the maximum code point is U+10FFFF")]:l>u?[new E(t,e,`unicode range start must not be greater than its end, but ${r} is`)]:[]}function Tf(t){var o,l;let e=(o=t.key)!=null?o:"font-faces",r=t.value,i=t.validateSpec,n=(l=t.styleSpec)!=null?l:pp,a=t.style;if(!lo(r))return[new E(e,r,`object expected, ${Q(r)} found`)];let s=[];for(let u in r){let h=r[u],c=Q(h);if(c==="string")s.push(...tr({key:`${e}.${u}`,value:h}));else if(c==="array"){let p={url:{type:"string",required:!0},"unicode-range":{type:"array",value:"string"}};for(let[f,d]of h.entries()){let y=`${e}.${u}[${f}]`;s.push(...te({key:y,value:d,valueSpec:p,styleSpec:n,style:a,validateSpec:i}));let m=lo(d)?d["unicode-range"]:void 0;if(Q(m)==="array")for(let[g,x]of m.entries())s.push(...Bm(`${y}.unicode-range[${g}]`,x))}}else s.push(new E(`${e}.${u}`,h,`string or array expected, ${c} found`))}return s}var Bh={"*"(){return[]},array:Bl,boolean:gm,number:Ga,color:oo,constants:mf,enum:sn,filter:Pl,function:gf,layer:Df,object:te,source:_f,light:Af,sky:Sf,terrain:Ef,projection:km,projectionDefinition:Tm,string:tr,formatted:Dm,resolvedImage:_m,padding:Am,numberArray:Sm,colorArray:Em,variableAnchorOffsetCollection:Fm,sprite:Ff,state:kf,fontFaces:Tf};function Xi(t){let e=t.value,r=t.valueSpec,i=t.styleSpec;return t.validateSpec=Xi,r.expression&&qa(Dt(e))?gf(t):r.expression&&ja(xr(e))?si(t):r.type&&Bh[r.type]?Bh[r.type](t):te(nn({},t,{valueSpec:r.type?i[r.type]:r}))}function If(t){let e=t.value,r=t.key,i=tr(t);return i.length||(e.indexOf("{fontstack}")===-1&&i.push(new E(r,e,\'"glyphs" url must include a "{fontstack}" token\')),e.indexOf("{range}")===-1&&i.push(new E(r,e,\'"glyphs" url must include a "{range}" token\'))),i}function Qt(t,e=w){let r=[];return r=r.concat(Xi({key:"",value:t,valueSpec:e.$root,styleSpec:e,style:t,validateSpec:Xi,objectElementValidators:{glyphs:If,"*"(){return[]}}})),t.constants&&(r=r.concat(mf({key:"constants",value:t.constants,style:t,styleSpec:e,validateSpec:Xi}))),Cf(r)}Qt.source=ie(re(_f)),Qt.sprite=ie(re(Ff)),Qt.glyphs=ie(re(If)),Qt.fontFaces=ie(re(Tf)),Qt.light=ie(re(Af)),Qt.sky=ie(re(Sf)),Qt.terrain=ie(re(Ef)),Qt.state=ie(re(kf)),Qt.layer=ie(re(Df)),Qt.filter=ie(re(Pl)),Qt.paintProperty=ie(re(bf)),Qt.layoutProperty=ie(re(wf));function re(t){return function(e){return t(Object.assign({},e,{validateSpec:Xi}))}}function Cf(t){return[].concat(t).sort((e,r)=>e.line-r.line)}function ie(t){return function(...e){return Cf(t.apply(this,e))}}var Pm={type:"enum","property-type":"data-constant",expression:{interpolated:!1,parameters:["global-state"]},values:{visible:{},none:{}},transition:!1,default:"visible"},zm=class{constructor(t,e,r){this._rootKey=e,this._globalState=r,this.setValue(t)}evaluate(){var t;return(t=this._literalValue)!=null?t:this._compiledValue.evaluate({})}setValue(t){if(t==null||t==="visible"||t==="none"){this._literalValue=t==="none"?"none":"visible",this._compiledValue=void 0,this._globalStateRefs=new Set;return}let e=er(t,this._rootKey,Pm,this._globalState);if(e.result==="error")throw this._literalValue="visible",this._compiledValue=void 0,Error(e.value.map(r=>`${r.key}: ${r.message}`).join(", "));this._literalValue=void 0,this._compiledValue=e.value,this._globalStateRefs=vn(e.value.expression)}getGlobalStateRefs(){return this._globalStateRefs}};function Lm(t,e,r){return new zm(t,e,r)}var Ph=Qt,y5=new Set(Object.keys(w).filter(t=>t.startsWith("source_")).map(t=>t.slice(7).replaceAll("_","-")));function Vm(t,e){let r=!1;for(let i of e){if(i.severity==="warning"){Bt(i.message);continue}t.fire(new ma(Error(i.message))),r=!0}return r}function Om(t,e,r,i){return(i==null?void 0:i.validate)!==!1&&Vm(t,e(je({styleSpec:w},r)))}var uo=class Mf{constructor(e,r,i){let n=this.cells=[];if(e instanceof ArrayBuffer){this.arrayBuffer=e;let s=new Int32Array(this.arrayBuffer);e=s[0],r=s[1],i=s[2],this.d=r+2*i;for(let u=0;u<this.d*this.d;u++){let h=s[3+u],c=s[3+u+1];n.push(h===c?null:s.subarray(h,c))}let o=s[3+n.length],l=s[3+n.length+1];this.keys=s.subarray(o,l),this.bboxes=s.subarray(l),this.insert=this._insertReadonly}else{this.d=r+2*i;for(let s=0;s<this.d*this.d;s++)n.push([]);this.keys=[],this.bboxes=[]}this.n=r,this.extent=e,this.padding=i,this.scale=r/e,this.uid=0;let a=i/r*e;this.min=-a,this.max=e+a}insert(e,r,i,n,a){this._forEachCell(r,i,n,a,this._insertCell,this.uid++,void 0,void 0),this.keys.push(e),this.bboxes.push(r),this.bboxes.push(i),this.bboxes.push(n),this.bboxes.push(a)}_insertReadonly(){throw Error("Cannot insert into a GridIndex created from an ArrayBuffer.")}_insertCell(e,r,i,n,a,s){this.cells[a].push(s)}query(e,r,i,n,a){let s=this.min,o=this.max;if(e<=s&&r<=s&&o<=i&&o<=n&&!a)return[...this.keys];{let l=[];return this._forEachCell(e,r,i,n,this._queryCell,l,{},a),l}}_queryCell(e,r,i,n,a,s,o,l){let u=this.cells[a];if(u!==null){let h=this.keys,c=this.bboxes;for(let p of u)if(o[p]===void 0){let f=p*4;(l?l(c[f+0],c[f+1],c[f+2],c[f+3]):e<=c[f+2]&&r<=c[f+3]&&i>=c[f+0]&&n>=c[f+1])?(o[p]=!0,s.push(h[p])):o[p]=!1}}}_forEachCell(e,r,i,n,a,s,o,l){let u=this._convertToCellCoord(e),h=this._convertToCellCoord(r),c=this._convertToCellCoord(i),p=this._convertToCellCoord(n);for(let f=u;f<=c;f++)for(let d=h;d<=p;d++){let y=this.d*d+f;if((!l||l(this._convertFromCellCoord(f),this._convertFromCellCoord(d),this._convertFromCellCoord(f+1),this._convertFromCellCoord(d+1)))&&a.call(this,e,r,i,n,y,s,o,l))return}}_convertFromCellCoord(e){return(e-this.padding)/this.scale}_convertToCellCoord(e){return Math.max(0,Math.min(this.d-1,Math.floor(e*this.scale)+this.padding))}toArrayBuffer(){if(this.arrayBuffer)return this.arrayBuffer;let e=this.cells,r=3+this.cells.length+1+1,i=0;for(let s of this.cells)i+=s.length;let n=new Int32Array(r+i+this.keys.length+this.bboxes.length);n[0]=this.extent,n[1]=this.n,n[2]=this.padding;let a=r;for(let s=0;s<e.length;s++){let o=e[s];n[3+s]=a,n.set(o,a),a+=o.length}return n[3+e.length]=a,n.set(this.keys,a),a+=this.keys.length,n[3+e.length+1]=a,n.set(this.bboxes,a),a+=this.bboxes.length,n.buffer}static serialize(e,r){let i=e.toArrayBuffer();return r&&r.push(i),{buffer:i}}static deserialize(e){return new Mf(e.buffer)}},Ce={};function C(t,e,r={}){if(Ce[t])throw Error(`${t} is already registered.`);Object.defineProperty(e,"_classRegistryKey",{value:t,writeable:!1}),Ce[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}C("Object",Object),C("Set",Set),C("TransferableGridIndex",uo),C("Color",gt),C("Error",Error),C("AJAXError",ya),C("ResolvedImage",_e),C("StylePropertyFunction",hf),C("StyleExpression",Il,{omit:["_evaluator"]}),C("ZoomDependentExpression",wa),C("ZoomConstantExpression",an),C("CompoundExpression",_r,{omit:["_evaluate"]});for(let t in Yr)Yr[t]._classRegistryKey||C(`Expression_${t}`,Yr[t]);function Bf(t){var e;return t&&typeof ArrayBuffer<"u"&&(t instanceof ArrayBuffer||((e=t.constructor)==null?void 0:e.name)==="ArrayBuffer")}function zl(t){let e=t.constructor;return t.$name||e._classRegistryKey}function Rm(t){if(typeof t!="object"||!t)return!1;let e=zl(t);return e&&e!=="Object"}function Pf(t){return!Rm(t)&&(t==null||typeof t=="boolean"||typeof t=="number"||typeof t=="string"||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof Blob||t instanceof Error||Bf(t)||Ca(t)||ArrayBuffer.isView(t)||t instanceof ImageData)}function Yi(t,e){if(Pf(t))return(Bf(t)||Ca(t))&&e&&e.push(t),ArrayBuffer.isView(t)&&e&&e.push(t.buffer),t instanceof ImageData&&e&&e.push(t.data.buffer),t;if(Array.isArray(t)){let a=[];for(let s of t)a.push(Yi(s,e));return a}if(typeof t!="object")throw Error(`can\'t serialize object of type ${typeof t}`);let r=zl(t);if(!r)throw Error(`can\'t serialize object of unregistered class ${t.constructor.name}`);if(!Ce[r])throw Error(`${r} is not registered.`);let{klass:i}=Ce[r],n=i.serialize?i.serialize(t,e):{};if(i.serialize){if(n===(e==null?void 0:e[e.length-1]))throw Error("statically serialized object won\'t survive transfer of $name property")}else{for(let a in t){if(!t.hasOwnProperty(a)||Ce[r].omit.includes(a))continue;let s=t[a];s!==void 0&&(n[a]=Ce[r].shallow.includes(a)?s:Yi(s,e))}t instanceof Error&&(n.message=t.message)}if(n.$name)throw Error("$name property is reserved for worker serialization logic.");return r!=="Object"&&(n.$name=r),n}function Wi(t){if(Pf(t))return t;if(Array.isArray(t))return t.map(Wi);if(typeof t!="object")throw Error(`can\'t deserialize object of type ${typeof t}`);let e=zl(t)||"Object";if(!Ce[e])throw Error(`can\'t deserialize unregistered class ${e}`);let{klass:r}=Ce[e];if(!r)throw Error(`can\'t deserialize unregistered class ${e}`);if(r.deserialize)return r.deserialize(t);let i=Object.create(r.prototype);for(let n of Object.keys(t)){if(n==="$name")continue;let a=t[n];i[n]=Ce[e].shallow.includes(n)?a:Wi(a)}return i}var zh=class{constructor(){this.first=!0}update(t,e){let r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))}},st=class{constructor(t,e){this.zoom=t,e?(this.now=e.now||0,this.fadeDuration=e.fadeDuration||0,this.zoomHistory=e.zoomHistory||new zh,this.transition=e.transition||{}):(this.now=0,this.fadeDuration=0,this.zoomHistory=new zh,this.transition={})}crossFadingFactor(){return this.fadeDuration===0?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)}getCrossfadeParameters(){let t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}}},$m="-transition",Xa=class{constructor(t,e,r,i){this.property=t,this.value=e,this.expression=um(e===void 0?t.specification.default:e,r,t.specification,i)}isDataDriven(){return this.expression.kind==="source"||this.expression.kind==="composite"}getGlobalStateRefs(){return this.expression.globalStateRefs||new Set}possiblyEvaluate(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)}},ho=class{constructor(t,e,r){this.property=t,this.value=new Xa(t,void 0,e,r)}transitioned(t,e){return new Lh(this.property,this.value,e,Gt({},t.transition,this.transition),t.now)}untransitioned(){return new Lh(this.property,this.value,null,{},0)}},Nm=class{constructor(t,e,r){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues),this._globalState=r,this._rootKey=e}_propertyRootKey(t){return`${this._rootKey}.${String(t)}`}hasProperty(t){return t in this._properties.defaultTransitionablePropertyValues}getValue(t){return He(this._values[t].value.value)}setValue(t,e){Object.hasOwn(this._values,t)||(this._values[t]=new ho(this._values[t].property,this._propertyRootKey(t),this._globalState)),this._values[t].value=new Xa(this._values[t].property,e===null?void 0:He(e),this._propertyRootKey(t),this._globalState)}getTransition(t){return He(this._values[t].transition)}setTransition(t,e){Object.hasOwn(this._values,t)||(this._values[t]=new ho(this._values[t].property,this._propertyRootKey(t),this._globalState)),this._values[t].transition=He(e)||void 0}serialize(){let t={};for(let e of Object.keys(this._values)){let r=this.getValue(e);r!==void 0&&(t[e]=r);let i=this.getTransition(e);i!==void 0&&(t[`${e}${$m}`]=i)}return t}transitioned(t,e){let r=new Vh(this._properties);for(let i of Object.keys(this._values))r._values[i]=this._values[i].transitioned(t,e._values[i]);return r}untransitioned(){let t=new Vh(this._properties);for(let e of Object.keys(this._values))t._values[e]=this._values[e].untransitioned();return t}},Lh=class{constructor(t,e,r,i,n){this.property=t,this.value=e,this.begin=n+i.delay||0,this.end=this.begin+i.duration||0,t.specification.transition&&(i.delay||i.duration)&&(this.prior=r)}possiblyEvaluate(t,e,r){let i=t.now||0,n=this.value.possiblyEvaluate(t,e,r),a=this.prior;if(!a)return n;if(i>this.end||this.value.isDataDriven())return this.prior=null,n;if(i<this.begin)return a.possiblyEvaluate(t,e,r);{let s=(i-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),n,S1(s))}}},Vh=class{constructor(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)}possiblyEvaluate(t,e,r){let i=new Ya(this._properties);for(let n of Object.keys(this._values))i._values[n]=this._values[n].possiblyEvaluate(t,e,r);return i}hasTransition(){for(let t of Object.keys(this._values))if(this._values[t].prior)return!0;return!1}},Um=class{constructor(t,e,r){this._properties=t,this._values=Object.create(t.defaultPropertyValues),this._globalState=r,this._rootKey=e}_propertyRootKey(t){return`${this._rootKey}.${String(t)}`}hasValue(t){return this._values[t].value!==void 0}hasProperty(t){return t in this._properties.defaultPropertyValues}getValue(t){return He(this._values[t].value)}setValue(t,e){this._values[t]=new Xa(this._values[t].property,e===null?void 0:He(e),this._propertyRootKey(t),this._globalState)}serialize(){let t={};for(let e of Object.keys(this._values)){let r=this.getValue(e);r!==void 0&&(t[e]=r)}return t}possiblyEvaluate(t,e,r){let i=new Ya(this._properties);for(let n of Object.keys(this._values))i._values[n]=this._values[n].possiblyEvaluate(t,e,r);return i}},se=class{constructor(t,e,r){this.property=t,this.value=e,this.parameters=r}isConstant(){return this.value.kind==="constant"}constantOr(t){return this.value.kind==="constant"?this.value.value:t}evaluate(t,e,r,i){return this.property.evaluate(this.value,this.parameters,t,e,r,i)}},Ya=class{constructor(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)}get(t){return this._values[t]}};function Oh(t){if(Array.isArray(t))return t.length;let e=t==null?void 0:t.values;return Array.isArray(e)?e.length:void 0}function zf(t,e){let r=Oh(t),i=Oh(e);return r!==void 0&&i!==void 0&&r!==i}var V=class{constructor(t,e){this.specification=t,this.name=e}possiblyEvaluate(t,e){if(t.isDataDriven())throw Error("Value should not be data driven");return t.expression.evaluate(e)}interpolate(t,e,r){if(zf(t,e))return Bt(`Property "${this.name}" is trying to interpolate arrays of different lengths. Rendering may \'jump\'.`),e;let i=this.specification.type,n=gr[i];return n?n(t,e,r):t}},N=class{constructor(t,e,r){this.specification=t,this.name=e,this.overrides=r}possiblyEvaluate(t,e,r,i){return t.expression.kind==="constant"||t.expression.kind==="camera"?new se(this,{kind:"constant",value:t.expression.evaluate(e,null,{},r,i)},e):new se(this,t.expression,e)}interpolate(t,e,r){if(t.value.kind!=="constant"||e.value.kind!=="constant")return t;if(t.value.value===void 0||e.value.value===void 0)return new se(this,{kind:"constant",value:void 0},t.parameters);if(zf(t.value.value,e.value.value))return Bt(`Property "${this.name}" is trying to interpolate arrays of different lengths. Rendering may \'jump\'.`),e;let i=this.specification.type,n=gr[i];if(n){let a=n(t.value.value,e.value.value,r);return new se(this,{kind:"constant",value:a},t.parameters)}return t}evaluate(t,e,r,i,n,a){return t.kind==="constant"?t.value:t.evaluate(e,r,i,n,a)}},on=class extends N{possiblyEvaluate(t,e,r,i){if(t.value===void 0)return new se(this,{kind:"constant",value:void 0},e);if(t.expression.kind==="constant"){let n=t.expression.evaluate(e,null,{},r,i),a=t.property.specification.type==="resolvedImage"&&typeof n!="string"?n.name:n,s=this._calculate(a,a,a,e);return new se(this,{kind:"constant",value:s},e)}if(t.expression.kind==="camera"){let n=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new se(this,{kind:"constant",value:n},e)}return new se(this,t.expression,e)}evaluate(t,e,r,i,n,a){if(t.kind==="source"){let s=t.evaluate(e,r,i,n,a);return this._calculate(s,s,s,e)}return t.kind==="composite"?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,i),t.evaluate({zoom:Math.floor(e.zoom)},r,i),t.evaluate({zoom:Math.floor(e.zoom)+1},r,i),e):t.value}_calculate(t,e,r,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}}interpolate(t){return t}},Lf=class{constructor(t,e){this.specification=t,this.name=e}possiblyEvaluate(t,e,r,i){if(t.value!==void 0){if(t.expression.kind==="constant"){let n=t.expression.evaluate(e,null,{},r,i);return this._calculate(n,n,n,e)}return this._calculate(t.expression.evaluate(new st(Math.floor(e.zoom-1),e)),t.expression.evaluate(new st(Math.floor(e.zoom),e)),t.expression.evaluate(new st(Math.floor(e.zoom+1),e)),e)}}_calculate(t,e,r,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}}interpolate(t){return t}},Wa=class{constructor(t,e){this.specification=t,this.name=e}possiblyEvaluate(t,e,r,i){return!!t.expression.evaluate(e,null,{},r,i)}interpolate(){return!1}},Xt=class{constructor(t){this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[];for(let e in t){let r=t[e];r.specification.overridable&&this.overridableProperties.push(e);let i=this.defaultPropertyValues[e]=new Xa(r,void 0,r.name,void 0),n=this.defaultTransitionablePropertyValues[e]=new ho(r,r.name,void 0);this.defaultTransitioningPropertyValues[e]=n.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=i.possiblyEvaluate({})}}};C("DataDrivenProperty",N),C("DataConstantProperty",V),C("CrossFadedDataDrivenProperty",on),C("CrossFadedProperty",Lf),C("ColorRampProperty",Wa);var Rh=" is a PAINT property not a LAYOUT property. Use get/setPaintProperty instead?",$s=" is a LAYOUT property not a PAINT property. Use get/setLayoutProperty instead?",de=class extends O1{constructor(t,e,r){if(super(),this.id=t.id,this.type=t.type,this._globalState=r,this._featureFilter={filter:()=>!0,needGeometry:!1,getGlobalStateRefs:()=>new Set},this._visibilityExpression=Lm(this.visibility,`layers[${this.id}].layout.visibility`,r),t.type!=="custom"&&(this.metadata=t.metadata,this.minzoom=t.minzoom,this.maxzoom=t.maxzoom,t.type!=="background"&&(this.source=t.source,this.sourceLayer=t["source-layer"],this.filter=t.filter,this._featureFilter=ai(t.filter,`layers[${this.id}].filter`,r)),e.layout&&(this._unevaluatedLayout=new Um(e.layout,`layers[${this.id}].layout`,r)),e.paint)){this._transitionablePaint=new Nm(e.paint,`layers[${this.id}].paint`,r);for(let i in t.paint)this.setPaintProperty(i,t.paint[i],{validate:!1});for(let i in t.layout)this.setLayoutProperty(i,t.layout[i],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned(),this.paint=new Ya(e.paint)}}setFilter(t){this.filter=t,this._featureFilter=ai(t,`layers[${this.id}].filter`,this._globalState)}getCrossfadeParameters(){return this._crossfadeParameters}getLayoutProperty(t){var e;if(t==="visibility")return this.visibility;if((e=this._transitionablePaint)!=null&&e.hasProperty(t))throw Error(t+Rh);if(!this._unevaluatedLayout)throw Error(`Cannot get layout property "${t}" on layer type "${this.type}" which has no layout properties.`);return this._unevaluatedLayout.getValue(t)}getLayoutAffectingGlobalStateRefs(){let t=new Set;for(let e of this._visibilityExpression.getGlobalStateRefs())t.add(e);if(this._unevaluatedLayout)for(let e in this._unevaluatedLayout._values){let r=this._unevaluatedLayout._values[e];for(let i of r.getGlobalStateRefs())t.add(i)}for(let e of this._featureFilter.getGlobalStateRefs())t.add(e);return t}getPaintAffectingGlobalStateRefs(){var e;let t=new globalThis.Map;if(this._transitionablePaint)for(let r in this._transitionablePaint._values){let i=this._transitionablePaint._values[r].value;for(let n of i.getGlobalStateRefs()){let a=(e=t.get(n))!=null?e:[];a.push({name:r,value:i.value}),t.set(n,a)}}return t}getVisibilityAffectingGlobalStateRefs(){return this._visibilityExpression.getGlobalStateRefs()}setLayoutProperty(t,e,r={}){var i;if(t==="visibility"){this.visibility=e,this._visibilityExpression.setValue(e),this.recalculateVisibility();return}if((i=this._transitionablePaint)!=null&&i.hasProperty(t)){this.fire(new ma(Error(t+Rh)));return}e!=null&&this._validate(Ph.layoutProperty,`layers.${this.id}.layout.${t}`,t,e,r)||this._unevaluatedLayout.setValue(t,e)}getPaintProperty(t){var e,r;if(t.endsWith("-transition")){let i=t.slice(0,-11);if(i==="visibility"||(e=this._unevaluatedLayout)!=null&&e.hasProperty(i))throw Error(t+$s);return this._transitionablePaint.getTransition(i)}if(t==="visibility"||(r=this._unevaluatedLayout)!=null&&r.hasProperty(t))throw Error(t+$s);return this._transitionablePaint.getValue(t)}setPaintProperty(t,e,r={}){var i;if(t==="visibility"||(i=this._unevaluatedLayout)!=null&&i.hasProperty(t))return this.fire(new ma(Error(t+$s))),!1;if(e!=null&&this._validate(Ph.paintProperty,`layers.${this.id}.paint.${t}`,t,e,r))return!1;if(t.endsWith("-transition"))return this._transitionablePaint.setTransition(t.slice(0,-11),e||void 0),!1;{let n=this._transitionablePaint._values[t],a=n.property.specification["property-type"]==="cross-faded-data-driven",s=n.value.isDataDriven(),o=n.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);let l=this._transitionablePaint._values[t].value;return l.isDataDriven()||s||a||this._handleOverridablePaintPropertyUpdate(t,o,l)}}_handleSpecialPaintPropertyUpdate(t){}_handleOverridablePaintPropertyUpdate(t,e,r){return!1}isHidden(t=this.minzoom,e=!1){return this.minzoom&&t<(e?Math.floor(this.minzoom):this.minzoom)||this.maxzoom&&t>=this.maxzoom?!0:this._evaluatedVisibility==="none"}updateTransitions(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)}hasTransition(){return this._transitioningPaint.hasTransition()}recalculateVisibility(){this._evaluatedVisibility=this._visibilityExpression.evaluate()}recalculate(t,e){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint=this._transitioningPaint.possiblyEvaluate(t,void 0,e)}serialize(){var e,r;let t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:(e=this._unevaluatedLayout)==null?void 0:e.serialize(),paint:(r=this._transitionablePaint)==null?void 0:r.serialize()};return this.visibility&&(t.layout||(t.layout={}),t.layout.visibility=this.visibility),T1(t,(i,n)=>i!==void 0&&!(n==="layout"&&!Object.keys(i).length)&&!(n==="paint"&&!Object.keys(i).length))}_validate(t,e,r,i,n={}){return Om(this,t,{key:e,layerType:this.type,objectKey:r,value:i},n)}is3D(){return!1}isTileClipped(){return!1}hasOffscreenPass(){return!1}resize(){}isStateDependent(){for(let t in this.paint._values){let e=this.paint.get(t);if(e instanceof se&&ii(e.property.specification)&&(e.value.kind==="source"||e.value.kind==="composite")&&e.value.isStateDependent)return!0}return!1}},qm,jm=()=>qm||(qm=new Xt({"raster-opacity":new V(w.paint_raster["raster-opacity"],"raster-opacity"),"raster-hue-rotate":new V(w.paint_raster["raster-hue-rotate"],"raster-hue-rotate"),"raster-brightness-min":new V(w.paint_raster["raster-brightness-min"],"raster-brightness-min"),"raster-brightness-max":new V(w.paint_raster["raster-brightness-max"],"raster-brightness-max"),"raster-saturation":new V(w.paint_raster["raster-saturation"],"raster-saturation"),"raster-contrast":new V(w.paint_raster["raster-contrast"],"raster-contrast"),resampling:new V(w.paint_raster.resampling,"resampling"),"raster-resampling":new V(w.paint_raster["raster-resampling"],"raster-resampling"),"raster-fade-duration":new V(w.paint_raster["raster-fade-duration"],"raster-fade-duration")})),Gm={get paint(){return jm()}};var Xm=class extends de{constructor(t,e){super(t,Gm,e)}},Ym={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},bn=class{constructor(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8}},xt=class{constructor(){this.isTransferred=!1,this.capacity=-1,this.resize(0)}static serialize(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}}static deserialize(t){let e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e}_trim(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())}clear(){this.length=0}resize(t){this.reserve(t),this.length=t}reserve(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(this.capacity*5),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);let e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}}_refreshViews(){throw Error("_refreshViews() must be implemented by each concrete StructArray layout")}freeBufferAfterUpload(){this.arrayBuffer=new ArrayBuffer(0),this._refreshViews()}};function At(t,e=1){let r=0,i=0;return{members:t.map(n=>{let a=Wm(n.type),s=r=$h(r,Math.max(e,a)),o=n.components||1;return i=Math.max(i,a),r+=a*o,{name:n.name,type:n.type,components:o,offset:s}}),size:$h(r,Math.max(i,e)),alignment:e}}function Wm(t){return Ym[t].BYTES_PER_ELEMENT}function $h(t,e){return Math.ceil(t/e)*e}var ln=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e){let r=this.length;return this.resize(r+1),this.emplace(r,t,e)}emplace(t,e,r){let i=t*2;return this.int16[i+0]=e,this.int16[i+1]=r,t}};ln.prototype.bytesPerElement=4,C("StructArrayLayout2i4",ln);var co=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)}emplace(t,e,r,i){let n=t*3;return this.int16[n+0]=e,this.int16[n+1]=r,this.int16[n+2]=i,t}};co.prototype.bytesPerElement=6,C("StructArrayLayout3i6",co);var Nh=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r,i){let n=this.length;return this.resize(n+1),this.emplace(n,t,e,r,i)}emplace(t,e,r,i,n){let a=t*4;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=i,this.int16[a+3]=n,t}};Nh.prototype.bytesPerElement=8,C("StructArrayLayout4i8",Nh);var po=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a)}emplace(t,e,r,i,n,a,s){let o=t*6;return this.int16[o+0]=e,this.int16[o+1]=r,this.int16[o+2]=i,this.int16[o+3]=n,this.int16[o+4]=a,this.int16[o+5]=s,t}};po.prototype.bytesPerElement=12,C("StructArrayLayout2i4i12",po);var fo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a)}emplace(t,e,r,i,n,a,s){let o=t*4,l=t*8;return this.int16[o+0]=e,this.int16[o+1]=r,this.uint8[l+4]=i,this.uint8[l+5]=n,this.uint8[l+6]=a,this.uint8[l+7]=s,t}};fo.prototype.bytesPerElement=8,C("StructArrayLayout2i4ub8",fo);var un=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e){let r=this.length;return this.resize(r+1),this.emplace(r,t,e)}emplace(t,e,r){let i=t*2;return this.float32[i+0]=e,this.float32[i+1]=r,t}};un.prototype.bytesPerElement=8,C("StructArrayLayout2f8",un);var yo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a,s,o,l,u){let h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,i,n,a,s,o,l,u)}emplace(t,e,r,i,n,a,s,o,l,u,h){let c=t*10;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=i,this.uint16[c+3]=n,this.uint16[c+4]=a,this.uint16[c+5]=s,this.uint16[c+6]=o,this.uint16[c+7]=l,this.uint16[c+8]=u,this.uint16[c+9]=h,t}};yo.prototype.bytesPerElement=20,C("StructArrayLayout10ui20",yo);var mo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a,s,o){let l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,i,n,a,s,o)}emplace(t,e,r,i,n,a,s,o,l){let u=t*8;return this.uint16[u+0]=e,this.uint16[u+1]=r,this.uint16[u+2]=i,this.uint16[u+3]=n,this.uint16[u+4]=a,this.uint16[u+5]=s,this.uint16[u+6]=o,this.uint16[u+7]=l,t}};mo.prototype.bytesPerElement=16,C("StructArrayLayout8ui16",mo);var go=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a,s,o,l,u,h,c,p){let f=this.length;return this.resize(f+1),this.emplace(f,t,e,r,i,n,a,s,o,l,u,h,c,p)}emplace(t,e,r,i,n,a,s,o,l,u,h,c,p,f){let d=t*14,y=t*7;return this.int16[d+0]=e,this.int16[d+1]=r,this.int16[d+2]=i,this.int16[d+3]=n,this.uint16[d+4]=a,this.uint16[d+5]=s,this.uint16[d+6]=o,this.uint16[d+7]=l,this.int16[d+8]=u,this.int16[d+9]=h,this.int16[d+10]=c,this.int16[d+11]=p,this.float32[y+6]=f,t}};go.prototype.bytesPerElement=28,C("StructArrayLayout4i4ui4i1f28",go);var xo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)}emplace(t,e,r,i){let n=t*3;return this.float32[n+0]=e,this.float32[n+1]=r,this.float32[n+2]=i,t}};xo.prototype.bytesPerElement=12,C("StructArrayLayout3f12",xo);var vo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)}emplaceBack(t){let e=this.length;return this.resize(e+1),this.emplace(e,t)}emplace(t,e){let r=t*1;return this.uint32[r+0]=e,t}};vo.prototype.bytesPerElement=4,C("StructArrayLayout1ul4",vo);var bo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a,s,o,l){let u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,i,n,a,s,o,l)}emplace(t,e,r,i,n,a,s,o,l,u){let h=t*10,c=t*5;return this.int16[h+0]=e,this.int16[h+1]=r,this.int16[h+2]=i,this.int16[h+3]=n,this.int16[h+4]=a,this.int16[h+5]=s,this.uint32[c+3]=o,this.uint16[h+8]=l,this.uint16[h+9]=u,t}};bo.prototype.bytesPerElement=20,C("StructArrayLayout6i1ul2ui20",bo);var wo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a)}emplace(t,e,r,i,n,a,s){let o=t*6;return this.int16[o+0]=e,this.int16[o+1]=r,this.int16[o+2]=i,this.int16[o+3]=n,this.int16[o+4]=a,this.int16[o+5]=s,t}};wo.prototype.bytesPerElement=12,C("StructArrayLayout2i2i2i12",wo);var Uh=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n){let a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,i,n)}emplace(t,e,r,i,n,a){let s=t*4,o=t*8;return this.float32[s+0]=e,this.float32[s+1]=r,this.float32[s+2]=i,this.int16[o+6]=n,this.int16[o+7]=a,t}};Uh.prototype.bytesPerElement=16,C("StructArrayLayout2f1f2i16",Uh);var Do=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a){let s=this.length;return this.resize(s+1),this.emplace(s,t,e,r,i,n,a)}emplace(t,e,r,i,n,a,s){let o=t*16,l=t*4,u=t*8;return this.uint8[o+0]=e,this.uint8[o+1]=r,this.float32[l+1]=i,this.float32[l+2]=n,this.int16[u+6]=a,this.int16[u+7]=s,t}};Do.prototype.bytesPerElement=16,C("StructArrayLayout2ub2f2i16",Do);var _o=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)}emplace(t,e,r,i){let n=t*3;return this.uint16[n+0]=e,this.uint16[n+1]=r,this.uint16[n+2]=i,t}};_o.prototype.bytesPerElement=6,C("StructArrayLayout3ui6",_o);var Ao=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g){let x=this.length;return this.resize(x+1),this.emplace(x,t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g)}emplace(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x){let v=t*26,b=t*13,D=t*52;return this.int16[v+0]=e,this.int16[v+1]=r,this.uint16[v+2]=i,this.uint16[v+3]=n,this.uint32[b+2]=a,this.uint32[b+3]=s,this.uint32[b+4]=o,this.uint16[v+10]=l,this.uint16[v+11]=u,this.uint16[v+12]=h,this.float32[b+7]=c,this.float32[b+8]=p,this.uint8[D+36]=f,this.uint8[D+37]=d,this.uint8[D+38]=y,this.uint32[b+10]=m,this.int16[v+22]=g,this.float32[b+12]=x,t}};Ao.prototype.bytesPerElement=52,C("StructArrayLayout2i2ui3ul3ui2f3ub1ul1i1f52",Ao);var So=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,v,b,D,A,_,S,k,z,O,P){let L=this.length;return this.resize(L+1),this.emplace(L,t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,v,b,D,A,_,S,k,z,O,P)}emplace(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,v,b,D,A,_,S,k,z,O,P,L){let F=t*34,$=t*17;return this.int16[F+0]=e,this.int16[F+1]=r,this.int16[F+2]=i,this.int16[F+3]=n,this.int16[F+4]=a,this.int16[F+5]=s,this.int16[F+6]=o,this.int16[F+7]=l,this.uint16[F+8]=u,this.uint16[F+9]=h,this.uint16[F+10]=c,this.uint16[F+11]=p,this.uint16[F+12]=f,this.uint16[F+13]=d,this.uint16[F+14]=y,this.uint16[F+15]=m,this.uint16[F+16]=g,this.uint16[F+17]=x,this.uint16[F+18]=v,this.uint16[F+19]=b,this.uint16[F+20]=D,this.uint16[F+21]=A,this.uint16[F+22]=_,this.uint32[$+12]=S,this.float32[$+13]=k,this.float32[$+14]=z,this.uint16[F+30]=O,this.uint16[F+31]=P,this.float32[$+16]=L,t}};So.prototype.bytesPerElement=68,C("StructArrayLayout8i15ui1ul2f2ui1f68",So);var _a=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t){let e=this.length;return this.resize(e+1),this.emplace(e,t)}emplace(t,e){let r=t*1;return this.float32[r+0]=e,t}};_a.prototype.bytesPerElement=4,C("StructArrayLayout1f4",_a);var Eo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)}emplace(t,e,r,i){let n=t*6,a=t*3;return this.uint16[n+0]=e,this.float32[a+1]=r,this.float32[a+2]=i,t}};Eo.prototype.bytesPerElement=12,C("StructArrayLayout1ui2f12",Eo);var Fo=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t,e,r){let i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)}emplace(t,e,r,i){let n=t*2,a=t*4;return this.uint32[n+0]=e,this.uint16[a+2]=r,this.uint16[a+3]=i,t}};Fo.prototype.bytesPerElement=8,C("StructArrayLayout1ul2ui8",Fo);var ko=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t,e){let r=this.length;return this.resize(r+1),this.emplace(r,t,e)}emplace(t,e,r){let i=t*2;return this.uint16[i+0]=e,this.uint16[i+1]=r,t}};ko.prototype.bytesPerElement=4,C("StructArrayLayout2ui4",ko);var qh=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)}emplaceBack(t){let e=this.length;return this.resize(e+1),this.emplace(e,t)}emplace(t,e){let r=t*1;return this.uint16[r+0]=e,t}};qh.prototype.bytesPerElement=2,C("StructArrayLayout1ui2",qh);var To=class extends xt{_refreshViews(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)}emplaceBack(t,e,r,i){let n=this.length;return this.resize(n+1),this.emplace(n,t,e,r,i)}emplace(t,e,r,i,n){let a=t*4;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=i,this.float32[a+3]=n,t}};To.prototype.bytesPerElement=16,C("StructArrayLayout4f16",To);var Vf=class extends bn{get anchorPointX(){return this._structArray.int16[this._pos2+0]}get anchorPointY(){return this._structArray.int16[this._pos2+1]}get x1(){return this._structArray.int16[this._pos2+2]}get y1(){return this._structArray.int16[this._pos2+3]}get x2(){return this._structArray.int16[this._pos2+4]}get y2(){return this._structArray.int16[this._pos2+5]}get featureIndex(){return this._structArray.uint32[this._pos4+3]}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+8]}get bucketIndex(){return this._structArray.uint16[this._pos2+9]}get anchorPoint(){return new B(this.anchorPointX,this.anchorPointY)}};Vf.prototype.size=20;var Ll=class extends bo{get(t){return new Vf(this,t)}};C("CollisionBoxArray",Ll);var Of=class extends bn{get anchorX(){return this._structArray.int16[this._pos2+0]}get anchorY(){return this._structArray.int16[this._pos2+1]}get glyphStartIndex(){return this._structArray.uint16[this._pos2+2]}get numGlyphs(){return this._structArray.uint16[this._pos2+3]}get vertexStartIndex(){return this._structArray.uint32[this._pos4+2]}get lineStartIndex(){return this._structArray.uint32[this._pos4+3]}get lineLength(){return this._structArray.uint32[this._pos4+4]}get segment(){return this._structArray.uint16[this._pos2+10]}get lowerSize(){return this._structArray.uint16[this._pos2+11]}get upperSize(){return this._structArray.uint16[this._pos2+12]}get lineOffsetX(){return this._structArray.float32[this._pos4+7]}get lineOffsetY(){return this._structArray.float32[this._pos4+8]}get writingMode(){return this._structArray.uint8[this._pos1+36]}get placedOrientation(){return this._structArray.uint8[this._pos1+37]}set placedOrientation(t){this._structArray.uint8[this._pos1+37]=t}get hidden(){return this._structArray.uint8[this._pos1+38]}set hidden(t){this._structArray.uint8[this._pos1+38]=t}get crossTileID(){return this._structArray.uint32[this._pos4+10]}set crossTileID(t){this._structArray.uint32[this._pos4+10]=t}get associatedIconIndex(){return this._structArray.int16[this._pos2+22]}get heightOffset(){return this._structArray.float32[this._pos4+12]}};Of.prototype.size=52;var Rf=class extends Ao{get(t){return new Of(this,t)}};C("PlacedSymbolArray",Rf);var $f=class extends bn{get anchorX(){return this._structArray.int16[this._pos2+0]}get anchorY(){return this._structArray.int16[this._pos2+1]}get rightJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+2]}get centerJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+3]}get leftJustifiedTextSymbolIndex(){return this._structArray.int16[this._pos2+4]}get verticalPlacedTextSymbolIndex(){return this._structArray.int16[this._pos2+5]}get placedIconSymbolIndex(){return this._structArray.int16[this._pos2+6]}get verticalPlacedIconSymbolIndex(){return this._structArray.int16[this._pos2+7]}get key(){return this._structArray.uint16[this._pos2+8]}get textBoxStartIndex(){return this._structArray.uint16[this._pos2+9]}get textBoxEndIndex(){return this._structArray.uint16[this._pos2+10]}get verticalTextBoxStartIndex(){return this._structArray.uint16[this._pos2+11]}get verticalTextBoxEndIndex(){return this._structArray.uint16[this._pos2+12]}get iconBoxStartIndex(){return this._structArray.uint16[this._pos2+13]}get iconBoxEndIndex(){return this._structArray.uint16[this._pos2+14]}get verticalIconBoxStartIndex(){return this._structArray.uint16[this._pos2+15]}get verticalIconBoxEndIndex(){return this._structArray.uint16[this._pos2+16]}get featureIndex(){return this._structArray.uint16[this._pos2+17]}get numHorizontalGlyphVertices(){return this._structArray.uint16[this._pos2+18]}get numVerticalGlyphVertices(){return this._structArray.uint16[this._pos2+19]}get numIconVertices(){return this._structArray.uint16[this._pos2+20]}get numVerticalIconVertices(){return this._structArray.uint16[this._pos2+21]}get useRuntimeCollisionCircles(){return this._structArray.uint16[this._pos2+22]}get crossTileID(){return this._structArray.uint32[this._pos4+12]}set crossTileID(t){this._structArray.uint32[this._pos4+12]=t}get textBoxScale(){return this._structArray.float32[this._pos4+13]}get collisionCircleDiameter(){return this._structArray.float32[this._pos4+14]}get textAnchorOffsetStartIndex(){return this._structArray.uint16[this._pos2+30]}get textAnchorOffsetEndIndex(){return this._structArray.uint16[this._pos2+31]}get heightOffset(){return this._structArray.float32[this._pos4+16]}};$f.prototype.size=68;var Nf=class extends So{get(t){return new $f(this,t)}};C("SymbolInstanceArray",Nf);var Uf=class extends _a{getoffsetX(t){return this.float32[t*1+0]}};C("GlyphOffsetArray",Uf);var qf=class extends co{getx(t){return this.int16[t*3+0]}gety(t){return this.int16[t*3+1]}gettileUnitDistanceFromAnchor(t){return this.int16[t*3+2]}};C("SymbolLineVertexArray",qf);var jf=class extends bn{get textAnchor(){return this._structArray.uint16[this._pos2+0]}get textOffset0(){return this._structArray.float32[this._pos4+1]}get textOffset1(){return this._structArray.float32[this._pos4+2]}};jf.prototype.size=12;var Gf=class extends Eo{get(t){return new jf(this,t)}};C("TextAnchorOffsetArray",Gf);var Xf=class extends bn{get featureIndex(){return this._structArray.uint32[this._pos4+0]}get sourceLayerIndex(){return this._structArray.uint16[this._pos2+2]}get bucketIndex(){return this._structArray.uint16[this._pos2+3]}};Xf.prototype.size=8;var Yf=class extends Fo{get(t){return new Xf(this,t)}};C("FeatureIndexArray",Yf);var Zm=class extends ln{};var Hm=class extends ln{},Km=class extends ln{},Jm=class extends po{},Qm=class extends fo{},tg=class extends un{},Vr=class extends yo{},jh=class extends mo{},eg=class extends go{},rg=class extends xo{},ig=class extends vo{},Gh=class extends wo{};var ng=class extends Do{};var wn=class extends _o{},Io=class extends ko{};var Co=At([{name:"a_pos",components:2,type:"Int16"}],4),ag=Co.members;Co.size,Co.alignment;var ee=class Ur{constructor(e=[]){this._forceNewSegmentOnNextPrepare=!1,this.segments=e}prepareSegment(e,r,i,n){let a=this.segments[this.segments.length-1];return e>Ur.MAX_VERTEX_ARRAY_LENGTH&&Bt(`Max vertices per segment is ${Ur.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${e}. Consider using the \\`fillLargeMeshArrays\\` function if you require meshes with more than ${Ur.MAX_VERTEX_ARRAY_LENGTH} vertices.`),this._forceNewSegmentOnNextPrepare||!a||a.vertexLength+e>Ur.MAX_VERTEX_ARRAY_LENGTH||a.sortKey!==n?this.createNewSegment(r,i,n):a}createNewSegment(e,r,i){let n={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0,vaos:{}};return i!==void 0&&(n.sortKey=i),this._forceNewSegmentOnNextPrepare=!1,this.segments.push(n),n}getOrCreateLatestSegment(e,r,i){return this.prepareSegment(0,e,r,i)}forceNewSegmentOnNextPrepare(){this._forceNewSegmentOnNextPrepare=!0}get(){return this.segments}destroy(){for(let e of this.segments)for(let r in e.vaos)e.vaos[r].destroy()}static simpleSegment(e,r,i,n){return new Ur([{vertexOffset:e,primitiveOffset:r,vertexLength:i,primitiveLength:n,vaos:{},sortKey:0}])}};ee.MAX_VERTEX_ARRAY_LENGTH=2**16-1,C("SegmentVector",ee);function Xh(t,e){return t=Ji(Math.floor(t),0,255),e=Ji(Math.floor(e),0,255),256*t+e}var sg=At([{name:"a_pattern_from",components:4,type:"Uint16"},{name:"a_pattern_to",components:4,type:"Uint16"},{name:"a_pixel_ratio_from",components:1,type:"Uint16"},{name:"a_pixel_ratio_to",components:1,type:"Uint16"}]),og=At([{name:"a_dasharray_from",components:4,type:"Uint16"},{name:"a_dasharray_to",components:4,type:"Uint16"}]),lg=fl(((t,e)=>{function r(i,n){for(var a=i.length&3,s=i.length-a,o=n,l,u=3432918353,h=461845907,c,p=0;p<s;)c=i.charCodeAt(p)&255|(i.charCodeAt(++p)&255)<<8|(i.charCodeAt(++p)&255)<<16|(i.charCodeAt(++p)&255)<<24,++p,c=(c&65535)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(c&65535)*h+(((c>>>16)*h&65535)<<16)&4294967295,o^=c,o=o<<13|o>>>19,l=(o&65535)*5+(((o>>>16)*5&65535)<<16)&4294967295,o=(l&65535)+27492+(((l>>>16)+58964&65535)<<16);switch(c=0,a){case 3:c^=(i.charCodeAt(p+2)&255)<<16;case 2:c^=(i.charCodeAt(p+1)&255)<<8;case 1:c^=i.charCodeAt(p)&255,c=(c&65535)*u+(((c>>>16)*u&65535)<<16)&4294967295,c=c<<15|c>>>17,c=(c&65535)*h+(((c>>>16)*h&65535)<<16)&4294967295,o^=c}return o^=i.length,o^=o>>>16,o=(o&65535)*2246822507+(((o>>>16)*2246822507&65535)<<16)&4294967295,o^=o>>>13,o=(o&65535)*3266489909+(((o>>>16)*3266489909&65535)<<16)&4294967295,o^=o>>>16,o>>>0}e!==void 0&&(e.exports=r)})),ug=fl(((t,e)=>{function r(i,n){for(var a=i.length,s=n^a,o=0,l;a>=4;)l=i.charCodeAt(o)&255|(i.charCodeAt(++o)&255)<<8|(i.charCodeAt(++o)&255)<<16|(i.charCodeAt(++o)&255)<<24,l=(l&65535)*1540483477+(((l>>>16)*1540483477&65535)<<16),l^=l>>>24,l=(l&65535)*1540483477+(((l>>>16)*1540483477&65535)<<16),s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16)^l,a-=4,++o;switch(a){case 3:s^=(i.charCodeAt(o+2)&255)<<16;case 2:s^=(i.charCodeAt(o+1)&255)<<8;case 1:s^=i.charCodeAt(o)&255,s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16)}return s^=s>>>13,s=(s&65535)*1540483477+(((s>>>16)*1540483477&65535)<<16),s^=s>>>15,s>>>0}e.exports=r})),Mo=h1(fl(((t,e)=>{var r=lg(),i=ug();e.exports=r,e.exports.murmur3=r,e.exports.murmur2=i}))(),1),Wf=class Zf{constructor(){this.ids=[],this.positions=[],this.indexed=!1}add(e,r,i,n){this.ids.push(Yh(e)),this.positions.push(r,i,n)}getPositions(e){if(!this.indexed)throw Error("Trying to get index, but feature positions are not indexed");let r=Yh(e),i=0,n=this.ids.length-1;for(;i<n;){let s=i+n>>1;this.ids[s]>=r?n=s:i=s+1}let a=[];for(;this.ids[i]===r;){let s=this.positions[3*i],o=this.positions[3*i+1],l=this.positions[3*i+2];a.push({index:s,start:o,end:l}),i++}return a}static serialize(e,r){let i=new Float64Array(e.ids),n=new Uint32Array(e.positions);return Bo(i,n,0,i.length-1),r&&r.push(i.buffer,n.buffer),{ids:i,positions:n}}static deserialize(e){let r=new Zf;return r.ids=e.ids,r.positions=e.positions,r.indexed=!0,r}};function Yh(t){let e=+t;return!isNaN(e)&&e<=2**53-1?e:(0,Mo.default)(String(t))}function Bo(t,e,r,i){for(;r<i;){let n=t[r+i>>1],a=r-1,s=i+1;for(;;){do a++;while(t[a]<n);do s--;while(t[s]>n);if(a>=s)break;Yn(t,a,s),Yn(e,3*a,3*s),Yn(e,3*a+1,3*s+1),Yn(e,3*a+2,3*s+2)}s-r<i-s?(Bo(t,e,r,s),r=s+1):(Bo(t,e,s+1,i),i=s)}}function Yn(t,e,r){let i=t[e];t[e]=t[r],t[r]=i}C("FeaturePositionMap",Wf);var Vl=class{constructor(t,e){this.gl=t.gl,this.location=e}};var Ol=class extends Vl{constructor(t,e){super(t,e),this.current=0}set(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))}};var hg=class extends Vl{constructor(t,e){super(t,e),this.current=[0,0,0,0]}set(t){(t[0]!==this.current[0]||t[1]!==this.current[1]||t[2]!==this.current[2]||t[3]!==this.current[3])&&(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))}},cg=class extends Vl{constructor(t,e){super(t,e),this.current=gt.transparent}set(t){(t.r!==this.current.r||t.g!==this.current.g||t.b!==this.current.b||t.a!==this.current.a)&&(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))}};var m5=new Float32Array(16);function Po(t){return[Xh(255*t.r,255*t.g),Xh(255*t.b,255*t.a)]}var $i=class{constructor(t,e,r){this.value=t,this.uniformNames=e.map(i=>`u_${i}`),this.type=r}setUniform(t,e,r){t.set(r.constantOr(this.value))}getBinding(t,e,r){return this.type==="color"?new cg(t,e):new Ol(t,e)}},ur=class{constructor(t,e){this.uniformNames=e.map(r=>`u_${r}`),this.patternFrom=null,this.patternTo=null,this.pixelRatioFrom=1,this.pixelRatioTo=1}setConstantPatternPositions(t,e){this.pixelRatioFrom=e.pixelRatio,this.pixelRatioTo=t.pixelRatio,this.patternFrom=e.tlbr,this.patternTo=t.tlbr}setConstantDashPositions(t,e){this.dashTo=[0,t.y,t.height,t.width],this.dashFrom=[0,e.y,e.height,e.width]}setUniform(t,e,r,i){let n=null;i==="u_pattern_to"?n=this.patternTo:i==="u_pattern_from"?n=this.patternFrom:i==="u_dasharray_to"?n=this.dashTo:i==="u_dasharray_from"?n=this.dashFrom:i==="u_pixel_ratio_to"?n=this.pixelRatioTo:i==="u_pixel_ratio_from"&&(n=this.pixelRatioFrom),n!==null&&t.set(n)}getBinding(t,e,r){return r.startsWith("u_pattern")||r.startsWith("u_dasharray_")?new hg(t,e):new Ol(t,e)}},ke=class{constructor(t,e,r,i){this.expression=t,this.type=r,this.maxValue=0,this.paintVertexAttributes=e.map(n=>({name:`a_${n}`,type:"Float32",components:r==="color"?2:1,offset:0})),this.paintVertexArray=new i}populatePaintArray(t,e,r){let i=this.paintVertexArray.length,n=this.expression.evaluate(new st(0,r),e,{},r.canonical,[],r.formattedSection);this.paintVertexArray.resize(t),this._setPaintValue(i,t,n)}updatePaintArray(t,e,r,i,n){let a=this.expression.evaluate(new st(0,n),r,i);this._setPaintValue(t,e,a)}_setPaintValue(t,e,r){if(this.type==="color"){let i=Po(r);for(let n=t;n<e;n++)this.paintVertexArray.emplace(n,i[0],i[1])}else{for(let i=t;i<e;i++)this.paintVertexArray.emplace(i,r);this.maxValue=Math.max(this.maxValue,Math.abs(r))}}upload(t){var e,r;(e=this.paintVertexArray)!=null&&e.arrayBuffer.byteLength&&((r=this.paintVertexBuffer)!=null&&r.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))}destroy(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()}},he=class{constructor(t,e,r,i,n,a){this.expression=t,this.uniformNames=e.map(s=>`u_${s}_t`),this.type=r,this.useIntegerZoom=i,this.zoom=n,this.maxValue=0,this.paintVertexAttributes=e.map(s=>({name:`a_${s}`,type:"Float32",components:r==="color"?4:2,offset:0})),this.paintVertexArray=new a}populatePaintArray(t,e,r){let i=this.expression.evaluate(new st(this.zoom,r),e,{},r.canonical,[],r.formattedSection),n=this.expression.evaluate(new st(this.zoom+1,r),e,{},r.canonical,[],r.formattedSection),a=this.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(a,t,i,n)}updatePaintArray(t,e,r,i,n){let a=this.expression.evaluate(new st(this.zoom,n),r,i),s=this.expression.evaluate(new st(this.zoom+1,n),r,i);this._setPaintValue(t,e,a,s)}_setPaintValue(t,e,r,i){if(this.type==="color"){let n=Po(r),a=Po(i);for(let s=t;s<e;s++)this.paintVertexArray.emplace(s,n[0],n[1],a[0],a[1])}else{for(let n=t;n<e;n++)this.paintVertexArray.emplace(n,r,i);this.maxValue=Math.max(this.maxValue,Math.abs(r),Math.abs(i))}}upload(t){var e,r;(e=this.paintVertexArray)!=null&&e.arrayBuffer.byteLength&&((r=this.paintVertexBuffer)!=null&&r.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))}destroy(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()}setUniform(t,e){let r=this.useIntegerZoom?Math.floor(e.zoom):e.zoom,i=Ji(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(i)}getBinding(t,e,r){return new Ol(t,e)}},Ye=class{constructor(t,e,r,i,n,a){this.expression=t,this.type=e,this.useIntegerZoom=r,this.zoom=i,this.layerId=a,this.zoomInPaintVertexArray=new n,this.zoomOutPaintVertexArray=new n}populatePaintArray(t,e,r){let i=this.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(i,t,this.getPositionIds(e),r)}updatePaintArray(t,e,r,i,n){this._setPaintValues(t,e,this.getPositionIds(r),n)}_setPaintValues(t,e,r,i){let n=this.getPositions(i);if(!n||!r)return;let a=n[r.min],s=n[r.mid],o=n[r.max];if(a&&s&&o)for(let l=t;l<e;l++)this.emplace(this.zoomInPaintVertexArray,l,a,s),this.emplace(this.zoomOutPaintVertexArray,l,o,s)}upload(t){var e,r;if((e=this.zoomInPaintVertexArray)!=null&&e.arrayBuffer.byteLength&&((r=this.zoomOutPaintVertexArray)!=null&&r.arrayBuffer.byteLength)){let i=this.getVertexAttributes();this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,i,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,i,this.expression.isStateDependent)}}destroy(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()}},Hf=class extends Ye{getPositions(t){return t.imagePositions}getPositionIds(t){var e;return(e=t.patterns)==null?void 0:e[this.layerId]}getVertexAttributes(){return sg.members}emplace(t,e,r,i){t.emplace(e,r.tlbr[0],r.tlbr[1],r.tlbr[2],r.tlbr[3],i.tlbr[0],i.tlbr[1],i.tlbr[2],i.tlbr[3],r.pixelRatio,i.pixelRatio)}},Kf=class extends Ye{getPositions(t){return t.dashPositions}getPositionIds(t){var e;return(e=t.dashes)==null?void 0:e[this.layerId]}getVertexAttributes(){return og.members}emplace(t,e,r,i){t.emplace(e,0,r.y,r.height,r.width,0,i.y,i.height,i.width)}},Jf=class{constructor(t,e,r){this.binders={},this._buffers=[];let i=[];for(let n in t.paint._values){if(!r(n))continue;let a=t.paint.get(n);if(!(a instanceof se)||!ii(a.property.specification))continue;let s=pg(n,t.type),o=a.value,l=a.property.specification.type,u=a.property.useIntegerZoom,h=a.property.specification["property-type"],c=h==="cross-faded"||h==="cross-faded-data-driven";if(o.kind==="constant")this.binders[n]=c?new ur(o.value,s):new $i(o.value,s,l),i.push(`/u_${n}`);else if(o.kind==="source"||c){let p=Wh(n,l,"source");this.binders[n]=c?n==="line-dasharray"?new Kf(o,l,u,e,p,t.id):new Hf(o,l,u,e,p,t.id):new ke(o,s,l,p),i.push(`/a_${n}`)}else{let p=Wh(n,l,"composite");this.binders[n]=new he(o,s,l,u,e,p),i.push(`/z_${n}`)}}this.cacheKey=i.sort().join("")}getMaxValue(t){let e=this.binders[t];return e instanceof ke||e instanceof he?e.maxValue:0}populatePaintArrays(t,e,r){for(let i in this.binders){let n=this.binders[i];(n instanceof ke||n instanceof he||n instanceof Ye)&&n.populatePaintArray(t,e,r)}}setConstantPatternPositions(t,e){for(let r in this.binders){let i=this.binders[r];i instanceof ur&&i.setConstantPatternPositions(t,e)}}setConstantDashPositions(t,e){for(let r in this.binders){let i=this.binders[r];i instanceof ur&&i.setConstantDashPositions(t,e)}}updatePaintArrays(t,e,r,i,n){let a=!1;for(let s of t){let o=e.getPositions(s.id);for(let l of o){let u=r.feature(l.index);for(let h in this.binders){let c=this.binders[h];(c instanceof ke||c instanceof he||c instanceof Ye)&&c.expression.isStateDependent===!0&&(c.expression=i.paint.get(h).value,c.updatePaintArray(l.start,l.end,u,s.state,n),a=!0)}}}return a}defines(){let t=[];for(let e in this.binders){let r=this.binders[e];(r instanceof $i||r instanceof ur)&&t.push(...r.uniformNames.map(i=>`#define HAS_UNIFORM_${i}`))}return t}getBinderAttributes(){let t=[];for(let e in this.binders){let r=this.binders[e];if(r instanceof ke||r instanceof he)for(let i of r.paintVertexAttributes)t.push(i.name);else if(r instanceof Ye){let i=r.getVertexAttributes();for(let n of i)t.push(n.name)}}return t}getBinderUniforms(){let t=[];for(let e in this.binders){let r=this.binders[e];if(r instanceof $i||r instanceof ur||r instanceof he)for(let i of r.uniformNames)t.push(i)}return t}getPaintVertexBuffers(){return this._buffers}getUniforms(t,e){let r=[];for(let i in this.binders){let n=this.binders[i];if(n instanceof $i||n instanceof ur||n instanceof he){for(let a of n.uniformNames)if(e[a]){let s=n.getBinding(t,e[a],a);r.push({name:a,property:i,binding:s})}}}return r}setUniforms(t,e,r,i){for(let{name:n,property:a,binding:s}of e)this.binders[a].setUniform(s,i,r.get(a),n)}updatePaintBuffers(t){this._buffers=[];for(let e in this.binders){let r=this.binders[e];if(t&&r instanceof Ye){let i=t.fromScale===2?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;i&&this._buffers.push(i)}else(r instanceof ke||r instanceof he)&&r.paintVertexBuffer&&this._buffers.push(r.paintVertexBuffer)}}upload(t){for(let e in this.binders){let r=this.binders[e];(r instanceof ke||r instanceof he||r instanceof Ye)&&r.upload(t)}this.updatePaintBuffers()}destroy(){for(let t in this.binders){let e=this.binders[t];(e instanceof ke||e instanceof he||e instanceof Ye)&&e.destroy()}}},vr=class{constructor(t,e,r=()=>!0){this.programConfigurations={};for(let i of t)this.programConfigurations[i.id]=new Jf(i,e,r);this.needsUpload=!1,this._featureMap=new Wf,this._bufferOffset=0}populatePaintArrays(t,e,r,i){for(let n in this.programConfigurations)this.programConfigurations[n].populatePaintArrays(t,e,i);e.id!==void 0&&this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset=t,this.needsUpload=!0}updatePaintArrays(t,e,r,i){for(let n of r)this.needsUpload=this.programConfigurations[n.id].updatePaintArrays(t,this._featureMap,e,n,i)||this.needsUpload}get(t){return this.programConfigurations[t]}upload(t){if(this.needsUpload){for(let e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}}destroy(){for(let t in this.programConfigurations)this.programConfigurations[t].destroy()}};function pg(t,e){return{"text-opacity":["opacity"],"icon-opacity":["opacity"],"text-color":["fill_color"],"icon-color":["fill_color"],"text-halo-color":["halo_color"],"icon-halo-color":["halo_color"],"text-halo-blur":["halo_blur"],"icon-halo-blur":["halo_blur"],"text-halo-width":["halo_width"],"icon-halo-width":["halo_width"],"line-gap-width":["gapwidth"],"line-dasharray":["dasharray_to","dasharray_from"],"line-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"],"fill-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"],"fill-extrusion-pattern":["pattern_to","pattern_from","pixel_ratio_to","pixel_ratio_from"]}[t]||[t.replace(`${e}-`,"").replace(/-/g,"_")]}function fg(t){return{"line-pattern":{source:Vr,composite:Vr},"fill-pattern":{source:Vr,composite:Vr},"fill-extrusion-pattern":{source:Vr,composite:Vr},"line-dasharray":{source:jh,composite:jh}}[t]}function Wh(t,e,r){var n;let i={color:{source:un,composite:To},number:{source:_a,composite:un}};return((n=fg(t))==null?void 0:n[r])||i[e][r]}C("ConstantBinder",$i),C("CrossFadedConstantBinder",ur),C("SourceExpressionBinder",ke),C("CrossFadedPatternBinder",Hf),C("CrossFadedDasharrayBinder",Kf),C("CompositeExpressionBinder",he),C("ProgramConfiguration",Jf,{omit:["_buffers"]}),C("ProgramConfigurationSet",vr);var zo=2**14-1,Zh=-zo-1;function Ar(t){let e=mt/t.extent,r=t.loadGeometry();for(let i of r)for(let n of i){let a=Math.round(n.x*e),s=Math.round(n.y*e);n.x=Ji(a,Zh,zo),n.y=Ji(s,Zh,zo),(a<n.x||a>n.x+1||s<n.y||s>n.y+1)&&Bt("Geometry exceeds allowed extent, reduce your vector tile buffer size")}return r}function hi(t,e){return{type:t.type,id:t.id,properties:t.properties,geometry:e?Ar(t):[]}}var Hh=-32768;function dg(t,e,r,i,n){t.emplaceBack(Hh+e*8+i,Hh+r*8+n)}var Rl=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.layoutVertexArray=new Hm,this.indexArray=new wn,this.segments=new ee,this.programConfigurations=new vr(t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(t,e,r){let i=this.layers[0],n=[],a=null,s=!1,o=i.type==="heatmap";if(i.type==="circle"){let c=i;a=c.layout.get("circle-sort-key"),s=!a.isConstant(),o||(o=c.paint.get("circle-pitch-alignment")==="map")}let l=o?e.subdivisionGranularity.circle:1,u=new st(this.zoom),h=this.layers[0]._featureFilter.needGeometry;for(let{feature:c,id:p,index:f,sourceLayerIndex:d}of t){let y=hi(c,h);if(!this.layers[0]._featureFilter.filter(u,y,r))continue;let m=s?a.evaluate(y,{},r):void 0,g={id:p,properties:c.properties,type:c.type,sourceLayerIndex:d,index:f,geometry:h?y.geometry:Ar(c),patterns:{},sortKey:m};n.push(g)}s&&n.sort((c,p)=>c.sortKey-p.sortKey);for(let c of n){let{geometry:p,index:f,sourceLayerIndex:d}=c,y=t[f].feature;this.addFeature(c,p,f,r,l),e.featureIndex.insert(y,p,f,d,this.index)}}update(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r})}addFeatures(t){}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ag),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())}addFeature(t,e,r,i,n=1){let a;switch(n){case 1:a=[0,7];break;case 3:a=[0,2,5,7];break;case 5:a=[0,1,3,4,6,7];break;case 7:a=[0,1,2,3,4,5,6,7];break;default:throw Error(`Invalid circle bucket granularity: ${n}; valid values are 1, 3, 5, 7.`)}let s=a.length;for(let o of e)for(let l of o){let u=l.x,h=l.y;if(u<0||u>=8192||h<0||h>=8192)continue;let c=this.segments.prepareSegment(s*s,this.layoutVertexArray,this.indexArray,t.sortKey),p=c.vertexLength;for(let f=0;f<s;f++)for(let d=0;d<s;d++)dg(this.layoutVertexArray,u,h,a[d],a[f]);for(let f=0;f<s-1;f++)for(let d=0;d<s-1;d++){let y=p+f*s+d,m=p+(f+1)*s+d;this.indexArray.emplaceBack(y,m+1,y+1),this.indexArray.emplaceBack(y,m,m+1)}c.vertexLength+=s*s,c.primitiveLength+=(s-1)*(s-1)*2}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:{},canonical:i})}};C("CircleBucket",Rl,{omit:["layers"]});function yg(t,e){for(let r of t)if(oi(e,r))return!0;for(let r of e)if(oi(t,r))return!0;return $l(t,e)}function Za(t,e,r){return oi(t,e)?!0:Lo(e,t,r)}function Qf(t,e){if(t.length===1)return Kh(e,t[0]);for(let r of e)for(let i of r)if(oi(t,i))return!0;for(let r of t)if(Kh(e,r))return!0;for(let r of e)if($l(t,r))return!0;return!1}function mg(t,e,r){for(let i of e){if(t.length>=3){for(let n of i)if(oi(t,n))return!0}if(gg(t,i,r))return!0}return!1}function gg(t,e,r){if(t.length>1){if($l(t,e))return!0;for(let i of e)if(Lo(i,t,r))return!0}for(let i of t)if(Lo(i,e,r))return!0;return!1}function $l(t,e){if(t.length===0||e.length===0)return!1;for(let r=0;r<t.length-1;r++){let i=t[r],n=t[r+1];for(let a=0;a<e.length-1;a++){let s=e[a],o=e[a+1];if(xg(i,n,s,o))return!0}}return!1}function xg(t,e,r,i){return Ke(t,r,i)!==Ke(e,r,i)&&Ke(t,e,r)!==Ke(t,e,i)}function Lo(t,e,r){let i=r*r;if(e.length===1)return t.distSqr(e[0])<i;for(let n=1;n<e.length;n++){let a=e[n-1],s=e[n];if(td(t,a,s)<i)return!0}return!1}function td(t,e,r){let i=e.distSqr(r);if(i===0)return t.distSqr(e);let n=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/i;return n<0?t.distSqr(e):n>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(n)._add(e))}function Kh(t,e){let r=!1,i,n,a;for(let s of t){i=s;for(let o=0,l=i.length-1;o<i.length;l=o++)n=i[o],a=i[l],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r)}return r}function oi(t,e){let r=!1;for(let i=0,n=t.length-1;i<t.length;n=i++){let a=t[i],s=t[n];a.y>e.y!=s.y>e.y&&e.x<(s.x-a.x)*(e.y-a.y)/(s.y-a.y)+a.x&&(r=!r)}return r}function vg(t,e,r,i,n){for(let s of t)if(e<=s.x&&r<=s.y&&i>=s.x&&n>=s.y)return!0;let a=[new B(e,r),new B(e,n),new B(i,n),new B(i,r)];if(t.length>2){for(let s of a)if(oi(t,s))return!0}for(let s=0;s<t.length-1;s++){let o=t[s],l=t[s+1];if(bg(o,l,a))return!0}return!1}function bg(t,e,r){let i=r[0],n=r[2];if(t.x<i.x&&e.x<i.x||t.x>n.x&&e.x>n.x||t.y<i.y&&e.y<i.y||t.y>n.y&&e.y>n.y)return!1;let a=Ke(t,e,r[0]);return a!==Ke(t,e,r[1])||a!==Ke(t,e,r[2])||a!==Ke(t,e,r[3])}function Wr(t,e,r){let i=e.paint.get(t).value;return i.kind==="constant"?i.value:r.programConfigurations.get(e.id).getMaxValue(t)}function Ha(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function Ka(t,e,r,i,n){if(!e[0]&&!e[1])return t;let a=B.convert(e)._mult(n);r==="viewport"&&a._rotate(-i);let s=[];for(let o of t)s.push(o.sub(a));return s}function wg(t){let e=[];for(let r=0;r<t.length;r++){let i=t[r],n=e.at(-1);(r===0||n&&!i.equals(n))&&e.push(i)}return e}function Dg(t,e){let r=[];for(let i of t){let n=wg(i),a=[];for(let s=0;s<n.length;s++){let o=n[s],l=n[s-1],u=n[s+1],h=s===0?new B(0,0):o.sub(l)._unit()._perp(),c=s===n.length-1?new B(0,0):u.sub(o)._unit()._perp(),p=h._add(c)._unit(),f=p.x*c.x+p.y*c.y;f!==0&&p._mult(1/f),a.push(p._mult(e)._add(o))}r.push(a)}return r}function _g({queryGeometry:t,size:e},r){return Za(t,r,e)}function Ag({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n},a){return Za(t,a,e*(r.projectTileCoordinates(a.x,a.y,i,n==null?void 0:n(a.x,a.y)).signedDistanceFromCamera/r.cameraToCenterDistance))}function Sg({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n},a){let s=r.projectTileCoordinates(a.x,a.y,i,n==null?void 0:n(a.x,a.y)).signedDistanceFromCamera,o=e*(r.cameraToCenterDistance/s);return Za(t,Nl(a,r,i,n),o)}function Eg({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n},a){return Za(t,Nl(a,r,i,n),e)}function ed({queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n,pitchAlignment:a="map",pitchScale:s="map"},o){let l=a==="map"?s==="map"?_g:Ag:s==="map"?Sg:Eg,u={queryGeometry:t,size:e,transform:r,unwrappedTileID:i,getElevation:n};for(let h of o)for(let c of h)if(l(u,c))return!0;return!1}function Nl(t,e,r,i){let n=e.projectTileCoordinates(t.x,t.y,r,i==null?void 0:i(t.x,t.y)).point;return new B((n.x*.5+.5)*e.width,(-n.y*.5+.5)*e.height)}function Fg(t,e,r,i){return t.map(n=>Nl(n,e,r,i))}var kg,Tg=()=>kg||(kg=new Xt({"circle-sort-key":new N(w.layout_circle["circle-sort-key"],"circle-sort-key")})),Ig,Cg=()=>Ig||(Ig=new Xt({"circle-radius":new N(w.paint_circle["circle-radius"],"circle-radius"),"circle-color":new N(w.paint_circle["circle-color"],"circle-color"),"circle-blur":new N(w.paint_circle["circle-blur"],"circle-blur"),"circle-opacity":new N(w.paint_circle["circle-opacity"],"circle-opacity"),"circle-translate":new V(w.paint_circle["circle-translate"],"circle-translate"),"circle-translate-anchor":new V(w.paint_circle["circle-translate-anchor"],"circle-translate-anchor"),"circle-pitch-scale":new V(w.paint_circle["circle-pitch-scale"],"circle-pitch-scale"),"circle-pitch-alignment":new V(w.paint_circle["circle-pitch-alignment"],"circle-pitch-alignment"),"circle-stroke-width":new N(w.paint_circle["circle-stroke-width"],"circle-stroke-width"),"circle-stroke-color":new N(w.paint_circle["circle-stroke-color"],"circle-stroke-color"),"circle-stroke-opacity":new N(w.paint_circle["circle-stroke-opacity"],"circle-stroke-opacity")})),Mg={get paint(){return Cg()},get layout(){return Tg()}};var Bg=class extends de{constructor(t,e){super(t,Mg,e)}createBucket(t){return new Rl(t)}queryRadius(t){let e=t;return Wr("circle-radius",this,e)+Wr("circle-stroke-width",this,e)+Ha(this.paint.get("circle-translate"))}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a,unwrappedTileID:s,getElevation:o}){let l=Ka(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),-n.bearingInRadians,a),u=this.paint.get("circle-radius").evaluate(e,r)+this.paint.get("circle-stroke-width").evaluate(e,r),h=this.paint.get("circle-pitch-scale"),c=this.paint.get("circle-pitch-alignment"),p,f;return c==="map"?(p=l,f=u*a):(p=Fg(l,n,s,o),f=u),ed({queryGeometry:p,size:f,transform:n,unwrappedTileID:s,getElevation:o,pitchAlignment:c,pitchScale:h},i)}},rd=class extends Rl{};C("HeatmapBucket",rd,{omit:["layers"]});var Pg,zg=()=>Pg||(Pg=new Xt({"heatmap-radius":new N(w.paint_heatmap["heatmap-radius"],"heatmap-radius"),"heatmap-weight":new N(w.paint_heatmap["heatmap-weight"],"heatmap-weight"),"heatmap-intensity":new V(w.paint_heatmap["heatmap-intensity"],"heatmap-intensity"),"heatmap-color":new Wa(w.paint_heatmap["heatmap-color"],"heatmap-color"),"heatmap-opacity":new V(w.paint_heatmap["heatmap-opacity"],"heatmap-opacity")})),Lg={get paint(){return zg()}};function Ul(t,{width:e,height:r},i,n){if(!n)n=new Uint8Array(e*r*i);else if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==e*r*i)throw RangeError(`mismatched image size. expected: ${n.length} but got: ${e*r*i}`);return t.width=e,t.height=r,t.data=n,t}function id(t,{width:e,height:r},i){if(e===t.width&&r===t.height)return;let n=Ul({},{width:e,height:r},i);ql(t,n,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,e),height:Math.min(t.height,r)},i),t.width=e,t.height=r,t.data=n.data}function ql(t,e,r,i,n,a){if(n.width===0||n.height===0)return e;if(n.width>t.width||n.height>t.height||r.x>t.width-n.width||r.y>t.height-n.height)throw RangeError("out of range source coordinates for image copy");if(n.width>e.width||n.height>e.height||i.x>e.width-n.width||i.y>e.height-n.height)throw RangeError("out of range destination coordinates for image copy");let s=t.data,o=e.data;if(s===o)throw Error("srcData equals dstData, so image is already copied");for(let l=0;l<n.height;l++){let u=((r.y+l)*t.width+r.x)*a,h=((i.y+l)*e.width+i.x)*a;for(let c=0;c<n.width*a;c++)o[h+c]=s[u+c]}return e}var Ja=class nd{constructor(e,r){Ul(this,e,1,r)}resize(e){id(this,e,1)}clone(){return new nd({width:this.width,height:this.height},new Uint8Array(this.data))}static copy(e,r,i,n,a){ql(e,r,i,n,a,1)}},Zt=class ad{constructor(e,r){Ul(this,e,4,r)}resize(e){id(this,e,4)}replace(e,r){r?this.data.set(e):this.data=e instanceof Uint8ClampedArray?new Uint8Array(e.buffer):e}clone(){return new ad({width:this.width,height:this.height},new Uint8Array(this.data))}static copy(e,r,i,n,a){ql(e,r,i,n,a,4)}setPixel(e,r,i){let n=(e*this.width+r)*4;this.data[n+0]=Math.round(i.r*255/i.a),this.data[n+1]=Math.round(i.g*255/i.a),this.data[n+2]=Math.round(i.b*255/i.a),this.data[n+3]=Math.round(i.a*255)}};function Ns(t){let e=new Uint8Array(t.length);for(let r=0;r<t.length;r+=4){let i=t[r+3];e[r+0]=Math.round(t[r+0]*i/255),e[r+1]=Math.round(t[r+1]*i/255),e[r+2]=Math.round(t[r+2]*i/255),e[r+3]=i}return e}C("AlphaImage",Ja),C("RGBAImage",Zt);function Vg(t){let e={},r=t.resolution||256,i=t.clips?t.clips.length:1,n=t.image||new Zt({width:r,height:i});if(!k1(r))throw Error(`width is not a power of 2 - ${r}`);let a=(s,o,l)=>{e[t.evaluationKey]=l;let u=t.expression.evaluate(e);n.setPixel(s/4/r,o/4,u)};if(t.clips)for(let s=0,o=0;s<i;++s,o+=r*4)for(let l=0,u=0;l<r;l++,u+=4){let h=l/(r-1),{start:c,end:p}=t.clips[s],f=c*(1-h)+p*h;a(o,u,f)}else for(let s=0,o=0;s<r;s++,o+=4){let l=s/(r-1);a(0,o,l)}return n}var Og="big-fb";var Rg=class extends de{createBucket(t){return new rd(t)}constructor(t,e){super(t,Lg,e),this.heatmapFbos=new Map,this._updateColorRamp()}_handleSpecialPaintPropertyUpdate(t){t==="heatmap-color"&&this._updateColorRamp()}_updateColorRamp(){let t=this._transitionablePaint._values["heatmap-color"].value.expression;this.colorRamp=Vg({expression:t,evaluationKey:"heatmapDensity",image:this.colorRamp}),this.colorRampTexture=null}resize(){this.heatmapFbos.has("big-fb")&&this.heatmapFbos.delete(Og)}queryRadius(t){return Wr("heatmap-radius",this,t)}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a,unwrappedTileID:s,getElevation:o}){return ed({queryGeometry:t,size:this.paint.get("heatmap-radius").evaluate(e,r)*a,transform:n,unwrappedTileID:s,getElevation:o},i)}hasOffscreenPass(){return this.paint.get("heatmap-opacity")!==0&&!this.isHidden()}},$g,Ng=()=>$g||($g=new Xt({"hillshade-illumination-direction":new V(w.paint_hillshade["hillshade-illumination-direction"],"hillshade-illumination-direction"),"hillshade-illumination-altitude":new V(w.paint_hillshade["hillshade-illumination-altitude"],"hillshade-illumination-altitude"),"hillshade-illumination-anchor":new V(w.paint_hillshade["hillshade-illumination-anchor"],"hillshade-illumination-anchor"),"hillshade-exaggeration":new V(w.paint_hillshade["hillshade-exaggeration"],"hillshade-exaggeration"),"hillshade-shadow-color":new V(w.paint_hillshade["hillshade-shadow-color"],"hillshade-shadow-color"),"hillshade-highlight-color":new V(w.paint_hillshade["hillshade-highlight-color"],"hillshade-highlight-color"),"hillshade-accent-color":new V(w.paint_hillshade["hillshade-accent-color"],"hillshade-accent-color"),"hillshade-method":new V(w.paint_hillshade["hillshade-method"],"hillshade-method"),resampling:new V(w.paint_hillshade.resampling,"resampling")})),Ug={get paint(){return Ng()}};var qg=class extends de{constructor(t,e){super(t,Ug,e),this.recalculate({zoom:0,zoomHistory:{}},void 0)}getIlluminationProperties(){let t=this.paint.get("hillshade-illumination-direction").values,e=this.paint.get("hillshade-illumination-altitude").values,r=this.paint.get("hillshade-highlight-color").values,i=this.paint.get("hillshade-shadow-color").values,n=Math.max(t.length,e.length,r.length,i.length);t=t.concat(Array(n-t.length).fill(t.at(-1))),e=e.concat(Array(n-e.length).fill(e.at(-1))),r=r.concat(Array(n-r.length).fill(r.at(-1))),i=i.concat(Array(n-i.length).fill(i.at(-1)));let a=e.map(ch);return{directionRadians:t.map(ch),altitudeRadians:a,shadowColor:i,highlightColor:r}}hasOffscreenPass(){return this.paint.get("hillshade-exaggeration")!==0&&!this.isHidden()}},jg,Gg=()=>jg||(jg=new Xt({"color-relief-opacity":new V(w["paint_color-relief"]["color-relief-opacity"],"color-relief-opacity"),"color-relief-color":new Wa(w["paint_color-relief"]["color-relief-color"],"color-relief-color"),resampling:new V(w["paint_color-relief"].resampling,"resampling")})),Xg={get paint(){return Gg()}};function Wn(t){return"data"in t}var Jh=class{constructor(t,e,r,i){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this._ownedHandle=this.texture,this.update(e,i)}update(t,e,r){var u;let{width:i,height:n}=t,a=(((u=this.size)==null?void 0:u[0])!==i||this.size[1]!==n)&&!r,{context:s}=this,{gl:o}=s;this.useMipmap=!!(e!=null&&e.useMipmap),a&&this.size&&this.format===o.RGBA&&(o.deleteTexture(this.texture),this.texture=o.createTexture(),this._ownedHandle=this.texture,this.magFilter=void 0,this.minFilter=void 0,this.wrap=void 0),o.bindTexture(o.TEXTURE_2D,this.texture),s.pixelStoreUnpackFlipY.set(!1),s.pixelStoreUnpack.set(1);let l=this.format===o.RGBA&&(e==null?void 0:e.premultiply)!==!1;if(a)if(this.size=[i,n],this.format===o.RGBA&&i>0&&n>0){let h=this.useMipmap?Math.floor(Math.log2(Math.max(i,n)))+1:1;if(o.texStorage2D(o.TEXTURE_2D,h,o.RGBA8,i,n),Wn(t)){s.pixelStoreUnpackPremultiplyAlpha.set(!1);let{data:c}=t;l&&c&&(c=Ns(c)),c&&o.texSubImage2D(o.TEXTURE_2D,0,0,0,i,n,o.RGBA,o.UNSIGNED_BYTE,c)}else s.pixelStoreUnpackPremultiplyAlpha.set(l),o.texSubImage2D(o.TEXTURE_2D,0,0,0,o.RGBA,o.UNSIGNED_BYTE,t)}else Wn(t)?(s.pixelStoreUnpackPremultiplyAlpha.set(!1),this._uploadRawData(t,l,i,n,o)):(s.pixelStoreUnpackPremultiplyAlpha.set(l),this._uploadDomImage(t,o));else{let{x:h,y:c}=r||{x:0,y:0};Wn(t)?(s.pixelStoreUnpackPremultiplyAlpha.set(!1),this._updateRawData(t,l,h,c,i,n,o)):(s.pixelStoreUnpackPremultiplyAlpha.set(l),this._updateDomImage(t,h,c,o))}this.useMipmap&&!(Wn(t)&&t.data===null)&&o.generateMipmap(o.TEXTURE_2D),s.pixelStoreUnpackFlipY.setDefault(),s.pixelStoreUnpack.setDefault(),s.pixelStoreUnpackPremultiplyAlpha.setDefault()}_uploadDomImage(t,e){e.texImage2D(e.TEXTURE_2D,0,this.format,this.format,e.UNSIGNED_BYTE,t)}_uploadRawData(t,e,r,i,n){let{data:a}=t;e&&a&&(a=Ns(a)),n.texImage2D(n.TEXTURE_2D,0,this.format,r,i,0,this.format,n.UNSIGNED_BYTE,a)}_updateDomImage(t,e,r,i){i.texSubImage2D(i.TEXTURE_2D,0,e,r,i.RGBA,i.UNSIGNED_BYTE,t)}_updateRawData(t,e,r,i,n,a,s){let{data:o}=t;e&&o&&(o=Ns(o)),s.texSubImage2D(s.TEXTURE_2D,0,r,i,n,a,s.RGBA,s.UNSIGNED_BYTE,o)}bind(t,e,r){let{context:i}=this,{gl:n}=i;this.texture!==this._ownedHandle&&(this.texture=this._ownedHandle),n.bindTexture(n.TEXTURE_2D,this.texture),(r===n.LINEAR_MIPMAP_NEAREST||r===n.LINEAR_MIPMAP_LINEAR)&&!this.useMipmap&&(r=n.LINEAR);let a=r||t;t!==this.magFilter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),this.magFilter=t),a!==this.minFilter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,a),this.minFilter=a),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)}generateMipmap(){if(!this.useMipmap)return;let{gl:t}=this.context;t.bindTexture(t.TEXTURE_2D,this.texture),t.generateMipmap(t.TEXTURE_2D)}destroy(){let{gl:t}=this.context;t.deleteTexture(this.texture),this.texture=null,this._ownedHandle=null}},Pe,jl=(Pe=class{constructor(e,r,i,n=1,a=1,s=1,o=0){if(this.uid=e,r.height!==r.width)throw RangeError("DEM tiles must be square");if(i&&!["mapbox","terrarium","custom"].includes(i)){Bt(`"${i}" is not a valid encoding type. Valid types include "mapbox", "terrarium" and "custom".`);return}this.stride=r.height;let l=this.dim=r.height-4;switch(this.data=new Uint32Array(r.data.buffer),Pe.byteViewCache.set(this,new Uint8Array(this.data.buffer)),i){case"terrarium":this.redFactor=256,this.greenFactor=1,this.blueFactor=1/256,this.baseShift=32768;break;case"custom":this.redFactor=n,this.greenFactor=a,this.blueFactor=s,this.baseShift=o;break;default:this.redFactor=6553.6,this.greenFactor=25.6,this.blueFactor=.1,this.baseShift=1e4}for(let h=-2;h<l+2;h++){let c=this._idx(0,Math.max(0,Math.min(l-1,h)));(h<0||h>=l)&&this.data.copyWithin(this._idx(0,h),c,c+l),this.data.fill(this.data[c],this._idx(-2,h),this._idx(0,h)),this.data.fill(this.data[c+l-1],this._idx(l,h),this._idx(l+1,h)+1)}let u=this._getByteView();this.min=2**53-1,this.max=-(2**53-1);for(let h=0;h<l;h++)for(let c=0;c<l;c++){let p=this._idx(h,c)*4,f=this._unpackAtIndex(u,p);f>this.max&&(this.max=f),f<this.min&&(this.min=f)}}get(e,r){let i=this._getByteView(),n=this._idx(e,r)*4;return this._unpackAtIndex(i,n)}sampleBilinear(e,r){let i=Math.floor(e),n=Math.floor(r);if(i<-1||i>=this.dim||n<-1||n>=this.dim)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${r}, dim: ${this.dim}`);let a=this._getByteView(),s=((n+2)*this.stride+i+2)*4,o=this.stride*4,l=e-i,u=r-n,h=this._unpackAtIndex(a,s),c=this._unpackAtIndex(a,s+4),p=this._unpackAtIndex(a,s+o),f=this._unpackAtIndex(a,s+o+4);return h*(1-l)*(1-u)+c*l*(1-u)+p*(1-l)*u+f*l*u}getUnpackVector(){return[this.redFactor,this.greenFactor,this.blueFactor,this.baseShift]}_idx(e,r){if(e<-2||e>=this.dim+2||r<-2||r>=this.dim+2)throw RangeError(`Out of range source coordinates for DEM data. x: ${e}, y: ${r}, dim: ${this.dim}`);return(r+2)*this.stride+(e+2)}unpack(e,r,i){return e*this.redFactor+r*this.greenFactor+i*this.blueFactor-this.baseShift}pack(e){return sd(e,this.getUnpackVector())}getPixels(){return new Zt({width:this.stride,height:this.stride},this._getByteView())}backfillBorder(e,r,i){if(this.dim!==e.dim)throw Error("dem dimension mismatch");let n=r*this.dim,a=r*this.dim+this.dim,s=i*this.dim,o=i*this.dim+this.dim;switch(r){case-1:n=a-2;break;case 1:a=n+2}switch(i){case-1:s=o-2;break;case 1:o=s+2}let l=-r*this.dim,u=-i*this.dim;for(let h=s;h<o;h++)for(let c=n;c<a;c++)this.data[this._idx(c,h)]=e.data[this._idx(c+l,h+u)]}_getByteView(){let e=Pe.byteViewCache.get(this);return(e==null?void 0:e.buffer)!==this.data.buffer&&(e=new Uint8Array(this.data.buffer),Pe.byteViewCache.set(this,e)),e}_unpackAtIndex(e,r){return this.unpack(e[r],e[r+1],e[r+2])}},Pe.byteViewCache=new WeakMap,Pe);function sd(t,e){let r=e[0],i=e[1],n=e[2],a=e[3],s=Math.min(r,i,n),o=Math.round((t+a)/s);return{r:Math.floor(o*s/r)%256,g:Math.floor(o*s/i)%256,b:Math.floor(o*s/n)%256}}C("DEMData",jl);var Yg=class extends de{constructor(t,e){super(t,Xg,e)}_createColorRamp(t){let e={elevationStops:[],colorStops:[]},r=this._transitionablePaint._values["color-relief-color"].value.expression;if(r instanceof an&&r._styleExpression.expression instanceof be){this.colorRampExpression=r;let a=r._styleExpression.expression;e.elevationStops=a.labels,e.colorStops=[];for(let s of e.elevationStops)e.colorStops.push(a.evaluate({globals:{elevation:s}}))}if(e.elevationStops.length<1&&(e.elevationStops=[0],e.colorStops=[gt.transparent]),e.elevationStops.length<2&&(e.elevationStops.push(e.elevationStops[0]+1),e.colorStops.push(e.colorStops[0])),e.elevationStops.length<=t)return e;let i={elevationStops:[],colorStops:[]},n=(e.elevationStops.length-1)/(t-1);for(let a=0;a<e.elevationStops.length-.5;a+=n)i.elevationStops.push(e.elevationStops[Math.round(a)]),i.colorStops.push(e.colorStops[Math.round(a)]);return Bt(`Too many colors in specification of ${this.id} color-relief layer, may not render properly. Max possible colors: ${t}, provided: ${e.elevationStops.length}`),i}_colorRampChanged(){return this.colorRampExpression!=this._transitionablePaint._values["color-relief-color"].value.expression}getColorRampTextures(t,e,r){if(this.colorRampTextures&&!this._colorRampChanged())return this.colorRampTextures;let i=this._createColorRamp(e),n=new Zt({width:i.colorStops.length,height:1}),a=new Zt({width:i.colorStops.length,height:1});for(let s=0;s<i.elevationStops.length;s++){let o=sd(i.elevationStops[s],r);a.setPixel(0,s,new gt(o.r/255,o.g/255,o.b/255,1)),n.setPixel(0,s,i.colorStops[s])}return this.colorRampTextures={elevationTexture:new Jh(t,a,t.gl.RGBA),colorTexture:new Jh(t,n,t.gl.RGBA)},this.colorRampTextures}hasOffscreenPass(){return!this.isHidden()&&!!this.colorRampTextures}},Vo=At([{name:"a_pos",components:2,type:"Int16"}],4),Wg=Vo.members;Vo.size,Vo.alignment;function Aa(t,e,r){let i=r.patternDependencies,n=!1;for(let a of e){let s=a.paint.get(`${t}-pattern`);s.isConstant()||(n=!0);let o=s.constantOr(null);o&&(n=!0,i[o.to]=!0,i[o.from]=!0)}return n}function Gl(t,e,r,i,n){let{zoom:a}=i,s=n.patternDependencies;for(let o of e){let l=o.paint.get(`${t}-pattern`).value;if(l.kind!=="constant"){let u=l.evaluate({zoom:a-1},r,{},n.availableImages),h=l.evaluate({zoom:a},r,{},n.availableImages),c=l.evaluate({zoom:a+1},r,{},n.availableImages);u=u!=null&&u.name?u.name:u,h=h!=null&&h.name?h.name:h,c=c!=null&&c.name?c.name:c,s[u]=!0,s[h]=!0,s[c]=!0,r.patterns[o.id]={min:u,mid:h,max:c}}}return r}var hn=new Set,Oo=!1;function Zg(t,e,r=2){let i=e&&e.length,n=i?e[0]*r:t.length;hn.size&&hn.clear();let a=od(t,0,n,r,!0),s=[];if(!a||a.next===a.prev)return s;let o=0,l=0,u=0;if(i&&(a=tx(t,e,a,r)),t.length>80*r){o=t[0],l=t[1];let h=o,c=l;for(let p=r;p<n;p+=r){let f=t[p],d=t[p+1];f<o&&(o=f),d<l&&(l=d),f>h&&(h=f),d>c&&(c=d)}u=Math.max(h-o,c-l),u=u===0?0:32767/u}return Ro(a,s,o,l,u),s}function od(t,e,r,i,n){let a=null;if(n===fx(t,e,r,i)>0)for(let s=e;s<r;s+=i)a=ec(s/i|0,t[s],t[s+1],a);else for(let s=r-i;s>=e;s-=i)a=ec(s/i|0,t[s],t[s+1],a);return a&&cn(a,a.next)&&(fn(a),a=a.next),a}function br(t,e=t){let r=e===t,i=t,n;do n=!1,i!==i.next&&(hn.size===0||!hn.has(i))&&(cn(i,i.next)||Ft(i.prev,i,i.next)===0)?((r||i===e)&&(e=i.prev),Oo=!0,fn(i),i=i.prev,n=!0):(r||i!==e)&&(i=i.next,n=!r);while(n||i!==e);return e}function Ro(t,e,r,i,n){n&&ox(t,r,i,n);let a=t,s=!1;for(;t.prev!==t.next;){let o=t.prev,l=t.next;if(Ft(o,t,l)<0&&(n?Kg(t,r,i,n):Hg(t))){e.push(o.i,t.i,l.i),fn(t),t=l,a=l;continue}if(t=l,t===a){if(Oo=!1,t=br(t),Oo){a=t;continue}if(!s){t=Jg(t,e),a=t,s=!0;continue}Qg(t,e,r,i,n);break}}}function Hg(t){let e=t.prev,r=t,i=t.next,n=e.x,a=r.x,s=i.x,o=e.y,l=r.y,u=i.y,h=Math.min(n,a,s),c=Math.min(o,l,u),p=Math.max(n,a,s),f=Math.max(o,l,u),d=i.next;for(;d!==e;){if(d.x>=h&&d.x<=p&&d.y>=c&&d.y<=f&&(n!==d.x||o!==d.y)&&Ea(n,o,a,l,s,u,d.x,d.y)&&Ft(d.prev,d,d.next)>=0)return!1;d=d.next}return!0}function Kg(t,e,r,i){let n=t.prev,a=t,s=t.next,o=n.x,l=a.x,u=s.x,h=n.y,c=a.y,p=s.y,f=Math.min(o,l,u),d=Math.min(h,c,p),y=Math.max(o,l,u),m=Math.max(h,c,p),g=qo(f,d,e,r,i),x=qo(y,m,e,r,i),v=t.prevZ;for(;v&&v.z>=g;){if(v.x>=f&&v.x<=y&&v.y>=d&&v.y<=m&&v!==s&&(o!==v.x||h!==v.y)&&Ea(o,h,l,c,u,p,v.x,v.y)&&Ft(v.prev,v,v.next)>=0)return!1;v=v.prevZ}let b=t.nextZ;for(;b&&b.z<=x;){if(b.x>=f&&b.x<=y&&b.y>=d&&b.y<=m&&b!==s&&(o!==b.x||h!==b.y)&&Ea(o,h,l,c,u,p,b.x,b.y)&&Ft(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function Jg(t,e){let r=t,i=!1;do{let n=r.prev,a=r.next.next;ud(n,r,r.next,a,!1)&&pn(n,a)&&pn(a,n)&&(e.push(n.i,r.i,a.i),fn(r),fn(r.next),r=t=a,i=!0),r=r.next}while(r!==t);return i?br(r):r}function Qg(t,e,r,i,n){let a=t;do{let s=a.next.next;for(;s!==a.prev;){if(a.i!==s.i&&hx(a,s)){let o=hd(a,s);a=br(a,a.next),o=br(o,o.next),Ro(a,e,r,i,n),Ro(o,e,r,i,n);return}s=s.next}a=a.next}while(a!==t)}var $o=!1;function tx(t,e,r,i){let n=[];for(let a=0,s=e.length;a<s;a++){let o=od(t,e[a]*i,a<s-1?e[a+1]*i:t.length,i,!1);o===o.next&&hn.add(o),n.push(ux(o))}n.sort(ex),ix(t.length/i,e.length),ld(r,r),$o=!0;for(let a=0;a<n.length;a++)r=rx(n[a],r);return $o=!1,br(r)}function ex(t,e){return t.x-e.x||t.y-e.y||(t.next.y-t.y)/(t.next.x-t.x)-(e.next.y-e.y)/(e.next.x-e.x)}function rx(t,e){let r=ax(t,e);if(!r)return e;let i=hd(r,t),n=i.next;return ld(r,n.next),br(i,i.next),br(r,r.next)}var wt=new Float64Array,Sa=0,No=[],Uo=[];function ix(t,e){let r=Math.ceil((t+2*e)/16)+e+2;wt.length<r*4&&(wt=new Float64Array(r*4)),Sa=0}function ld(t,e){let r=t;do{let i=Sa++;No[i]=r;let n=1/0,a=1/0,s=-1/0,o=-1/0,l=0;do{let h=r.next;r.z=i,r.x<n&&(n=r.x),r.x>s&&(s=r.x),r.y<a&&(a=r.y),r.y>o&&(o=r.y),h.x<n&&(n=h.x),h.x>s&&(s=h.x),h.y<a&&(a=h.y),h.y>o&&(o=h.y),r=h}while(++l<16&&r!==e);Uo[i]=r;let u=i*4;wt[u]=n,wt[u+1]=a,wt[u+2]=s,wt[u+3]=o}while(r!==e)}function nx(t,e){let r=t.z*4;e.x<wt[r]&&(wt[r]=e.x),e.y<wt[r+1]&&(wt[r+1]=e.y),e.x>wt[r+2]&&(wt[r+2]=e.x),e.y>wt[r+3]&&(wt[r+3]=e.y)}function Qh(t){let e=Uo[t];for(;e.prev.next!==e;)e=e.next;return Uo[t]=e,e}function tc(t){let e=No[t];for(;e.prev.next!==e;)e=e.next;return No[t]=e,e}function ax(t,e){let r=e,i=t.x,n=t.y,a=-1/0,s;if(cn(t,r))return r;for(let p=0,f=0;p<Sa;p++,f+=4){if(n<wt[f+1]||n>wt[f+3]||wt[f]>i||wt[f+2]<=a)continue;let d=Qh(p);r=tc(p);do{if(r.prev.next===r){if(cn(t,r.next))return r.next;if(n<=r.y&&n>=r.next.y&&r.next.y!==r.y){let y=r.x+(n-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(y<=i&&y>a&&(a=y,s=r.x<r.next.x?r:r.next,y===i))return s}}r=r.next}while(r!==d)}if(!s)return null;let o=s.x,l=s.y,u=Math.min(n,l),h=Math.max(n,l),c=1/0;for(let p=0,f=0;p<Sa;p++,f+=4){if(wt[f+2]<o||wt[f]>i||wt[f+3]<u||wt[f+1]>h)continue;let d=Qh(p);r=tc(p);do{if(r.prev.next===r&&i>=r.x&&r.x>=o&&i!==r.x&&Ea(n<l?i:a,n,o,l,n<l?a:i,n,r.x,r.y)){let y=Math.abs(n-r.y)/(i-r.x);(pn(r,t)||r.y===n&&r.next.y===n&&r.next.x>i)&&(y<c||y===c&&(r.x>s.x||r.x===s.x&&sx(s,r)))&&(s=r,c=y)}r=r.next}while(r!==d)}return s}function sx(t,e){return Ft(t.prev,t,e.prev)<0&&Ft(e.next,t,t.next)<0}var ae=[],Ti=[],or=new Uint32Array,Ii=new Uint32Array,Ci=new Uint32Array(256);function ox(t,e,r,i){let n=t,a=0;do n.z=qo(n.x,n.y,e,r,i),ae[a++]=n,n=n.next;while(n!==t);lx(a);let s=null;for(let o=0;o<a;o++){let l=ae[o];l.prevZ=s,s&&(s.nextZ=l),s=l}s.nextZ=null}function lx(t){if(t<=32){for(let e=1;e<t;e++){let r=ae[e],i=r.z,n=e-1;for(;n>=0&&ae[n].z>i;)ae[n+1]=ae[n],n--;ae[n+1]=r}return}or.length<t&&(or=new Uint32Array(t),Ii=new Uint32Array(t),Ti=Array(t));for(let e=0;e<t;e++)or[e]=ae[e].z;Zn(t,ae,or,Ti,Ii,0),Zn(t,Ti,Ii,ae,or,8),Zn(t,ae,or,Ti,Ii,16),Zn(t,Ti,Ii,ae,or,24)}function Zn(t,e,r,i,n,a){Ci.fill(0);for(let o=0;o<t;o++)Ci[r[o]>>>a&255]++;let s=0;for(let o=0;o<256;o++){let l=Ci[o];Ci[o]=s,s+=l}for(let o=0;o<t;o++){let l=r[o],u=Ci[l>>>a&255]++;i[u]=e[o],n[u]=l}}function qo(t,e,r,i,n){return t=(t-r)*n|0,e=(e-i)*n|0,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t|e<<1}function ux(t){let e=t,r=t;do(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next;while(e!==t);return r}function Ea(t,e,r,i,n,a,s,o){return(n-s)*(e-o)>=(t-s)*(a-o)&&(t-s)*(i-o)>=(r-s)*(e-o)&&(r-s)*(a-o)>=(n-s)*(i-o)}function hx(t,e){let r=cn(t,e)&&Ft(t.prev,t,t.next)>0&&Ft(e.prev,e,e.next)>0;return t.next.i!==e.i&&(r||pn(t,e)&&pn(e,t)&&(Ft(t.prev,t,e.prev)!==0||Ft(t,e.prev,e)!==0))&&!cx(t,e)&&(r||px(t,e))}function Ft(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function cn(t,e){return t.x===e.x&&t.y===e.y}function ud(t,e,r,i,n=!0){let a=Ft(t,e,r),s=Ft(t,e,i),o=Ft(r,i,t),l=Ft(r,i,e);return(a>0&&s<0||a<0&&s>0)&&(o>0&&l<0||o<0&&l>0)?!0:n?!!(a===0&&Hn(t,r,e)||s===0&&Hn(t,i,e)||o===0&&Hn(r,t,i)||l===0&&Hn(r,e,i)):!1}function Hn(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function cx(t,e){let r=Math.min(t.x,e.x),i=Math.max(t.x,e.x),n=Math.min(t.y,e.y),a=Math.max(t.y,e.y),s=t;do{let o=s.next;if(s.x>i&&o.x>i||s.x<r&&o.x<r||s.y>a&&o.y>a||s.y<n&&o.y<n){s=o;continue}if(s.i!==t.i&&o.i!==t.i&&s.i!==e.i&&o.i!==e.i&&ud(s,o,t,e))return!0;s=o}while(s!==t);return!1}function pn(t,e){return Ft(t.prev,t,t.next)<0?Ft(t,e,t.next)>=0&&Ft(t,t.prev,e)>=0:Ft(t,e,t.prev)<0||Ft(t,t.next,e)<0}function px(t,e){let r=t,i=!1,n=(t.x+e.x)/2,a=(t.y+e.y)/2;do{let s=r.next;r.y>a!=s.y>a&&n<(s.x-r.x)*(a-r.y)/(s.y-r.y)+r.x&&(i=!i),r=s}while(r!==t);return i}function hd(t,e){let r=jo(t.i,t.x,t.y),i=jo(e.i,e.x,e.y),n=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,a.next=i,i.prev=a,i}function ec(t,e,r,i){let n=jo(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function fn(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ),$o&&nx(t.prev,t.next)}function jo(t,e,r){return{i:t,x:e,y:r,prev:null,next:null,z:0,prevZ:null,nextZ:null}}function fx(t,e,r,i){let n=0;for(let a=e,s=r-i;a<r;a+=i)n+=(t[s]-t[a])*(t[a+1]+t[s+1]),s=a;return n}var Ni=class{constructor(t,e){if(e>t)throw Error("Min granularity must not be greater than base granularity.");this._baseZoomGranularity=t,this._minGranularity=e}getGranularityForZoomLevel(t){let e=1<<t;return Math.max(Math.floor(this._baseZoomGranularity/e),this._minGranularity,1)}},yr,dx=(yr=class{constructor(e){this.fill=e.fill,this.line=e.line,this.tile=e.tile,this.stencil=e.stencil,this.circle=e.circle}},yr.noSubdivision=new yr({fill:new Ni(0,0),line:new Ni(0,0),tile:new Ni(0,0),stencil:new Ni(0,0),circle:1}),yr);C("SubdivisionGranularityExpression",Ni),C("SubdivisionGranularitySetting",dx);var Us=-32768,qs=32767,yx=class{constructor(t,e){this._vertexBuffer=[],this._vertexDictionary=new Map,this._used=!1,this._granularity=t,this._granularityCellSize=mt/t,this._canonical=e}_getKey(t,e){return t+=32768,e+=32768,t<<16|e<<0}_vertexToIndex(t,e){if(t<-32768||e<-32768||t>32767||e>32767)throw Error("Vertex coordinates are out of signed 16 bit integer range.");let r=Math.round(t)|0,i=Math.round(e)|0,n=this._getKey(r,i);if(this._vertexDictionary.has(n))return this._vertexDictionary.get(n);let a=this._vertexBuffer.length/2;return this._vertexDictionary.set(n,a),this._vertexBuffer.push(r,i),a}_subdivideTrianglesScanline(t){if(this._granularity<2)return gx(this._vertexBuffer,t);let e=[],r=t.length;for(let i=0;i<r;i+=3){let n=[t[i+0],t[i+1],t[i+2]],a=[this._vertexBuffer[t[i+0]*2+0],this._vertexBuffer[t[i+0]*2+1],this._vertexBuffer[t[i+1]*2+0],this._vertexBuffer[t[i+1]*2+1],this._vertexBuffer[t[i+2]*2+0],this._vertexBuffer[t[i+2]*2+1]],s=1/0,o=1/0,l=-1/0,u=-1/0;for(let d=0;d<3;d++){let y=a[d*2],m=a[d*2+1];s=Math.min(s,y),l=Math.max(l,y),o=Math.min(o,m),u=Math.max(u,m)}if(s===l||o===u)continue;let h=Math.floor(s/this._granularityCellSize),c=Math.ceil(l/this._granularityCellSize),p=Math.floor(o/this._granularityCellSize),f=Math.ceil(u/this._granularityCellSize);if(h===c&&p===f){e.push(...n);continue}for(let d=p;d<f;d++){let y=this._scanlineGenerateVertexRingForCellRow(d,a,n);xx(this._vertexBuffer,y,e)}}return e}_scanlineGenerateVertexRingForCellRow(t,e,r){let i=t*this._granularityCellSize,n=i+this._granularityCellSize,a=[];for(let s=0;s<3;s++){let o=e[s*2],l=e[s*2+1],u=e[(s+1)*2%6],h=e[((s+1)*2+1)%6],c=e[(s+2)*2%6],p=e[((s+2)*2+1)%6],f=u-o,d=h-l,y=f===0,m=d===0,g=(i-l)/d,x=(n-l)/d,v=Math.min(g,x),b=Math.max(g,x);if(!m&&(v>=1||b<=0)||m&&(l<i||l>n)){h>=i&&h<=n&&a.push(r[(s+1)%3]);continue}if(!m&&v>0){let _=o+f*v,S=l+d*v;a.push(this._vertexToIndex(_,S))}let D=o+f*Math.max(v,0),A=o+f*Math.min(b,1);if(y||this._generateIntraEdgeVertices(a,o,l,u,h,D,A),!m&&b<1){let _=o+f*b,S=l+d*b;a.push(this._vertexToIndex(_,S))}(m||h>=i&&h<=n)&&a.push(r[(s+1)%3]),!m&&(h<=i||h>=n)&&this._generateInterEdgeVertices(a,o,l,u,h,c,p,A,i,n)}return a}_generateIntraEdgeVertices(t,e,r,i,n,a,s){let o=i-e,l=n-r,u=l===0,h=u?Math.min(e,i):Math.min(a,s),c=u?Math.max(e,i):Math.max(a,s),p=Math.floor(h/this._granularityCellSize)+1,f=Math.ceil(c/this._granularityCellSize)-1;if(u?e<i:a<s)for(let d=p;d<=f;d++){let y=d*this._granularityCellSize,m=r+l*(y-e)/o;t.push(this._vertexToIndex(y,m))}else for(let d=f;d>=p;d--){let y=d*this._granularityCellSize,m=r+l*(y-e)/o;t.push(this._vertexToIndex(y,m))}}_generateInterEdgeVertices(t,e,r,i,n,a,s,o,l,u){let h=n-r,c=a-i,p=s-n,f=(l-n)/p,d=(u-n)/p,y=Math.min(f,d),m=Math.max(f,d),g=i+c*y,x=Math.floor(Math.min(g,o)/this._granularityCellSize)+1,v=Math.ceil(Math.max(g,o)/this._granularityCellSize)-1,b=o<g,D=p===0;if(D&&(s===l||s===u))return;if(D||y>=1||m<=0){let _=e-a,S=r-s,k=(l-s)/S,z=(u-s)/S,O=a+_*Math.min(k,z);x=Math.floor(Math.min(O,o)/this._granularityCellSize)+1,v=Math.ceil(Math.max(O,o)/this._granularityCellSize)-1,b=o<O}let A=h>0?u:l;if(b)for(let _=x;_<=v;_++){let S=_*this._granularityCellSize;t.push(this._vertexToIndex(S,A))}else for(let _=v;_>=x;_--){let S=_*this._granularityCellSize;t.push(this._vertexToIndex(S,A))}}_generateOutline(t){let e=[];for(let r of t){let i=cr(r,this._granularity,!0),n=this._pointArrayToIndices(i),a=[];for(let s=1;s<n.length;s++)a.push(n[s-1]),a.push(n[s]);e.push(a)}return e}_handlePoles(t){let e=!1,r=!1;this._canonical&&(this._canonical.y===0&&(e=!0),this._canonical.y===(1<<this._canonical.z)-1&&(r=!0)),(e||r)&&this._fillPoles(t,e,r)}_ensureNoPoleVertices(){let t=this._vertexBuffer;for(let e=0;e<t.length;e+=2){let r=t[e+1];r===-32768&&(t[e+1]=-32767),r===32767&&(t[e+1]=32766)}}_generatePoleQuad(t,e,r,i,n,a){i>n==(a===-32768)?(t.push(r),t.push(e),t.push(this._vertexToIndex(i,a)),t.push(this._vertexToIndex(n,a)),t.push(r),t.push(this._vertexToIndex(i,a))):(t.push(e),t.push(r),t.push(this._vertexToIndex(i,a)),t.push(r),t.push(this._vertexToIndex(n,a)),t.push(this._vertexToIndex(i,a)))}_fillPoles(t,e,r){let i=this._vertexBuffer,n=mt,a=t.length;for(let s=2;s<a;s+=3){let o=t[s-2],l=t[s-1],u=t[s],h=i[o*2],c=i[o*2+1],p=i[l*2],f=i[l*2+1],d=i[u*2],y=i[u*2+1];e&&(c===0&&f===0&&this._generatePoleQuad(t,o,l,h,p,Us),f===0&&y===0&&this._generatePoleQuad(t,l,u,p,d,Us),y===0&&c===0&&this._generatePoleQuad(t,u,o,d,h,Us)),r&&(c===n&&f===n&&this._generatePoleQuad(t,o,l,h,p,qs),f===n&&y===n&&this._generatePoleQuad(t,l,u,p,d,qs),y===n&&c===n&&this._generatePoleQuad(t,u,o,d,h,qs))}}_initializeVertices(t){for(let e=0;e<t.length;e+=2)this._vertexToIndex(t[e],t[e+1])}subdividePolygonInternal(t,e){var s;if(this._used)throw Error("Subdivision: multiple use not allowed.");this._used=!0;let{flattened:r,holeIndices:i}=mx(t);this._initializeVertices(r);let n;try{let o=Zg(r,i),l=this._convertIndices(r,o);n=this._subdivideTrianglesScanline(l)}catch(o){console.error(o)}let a=[];return e&&(a=this._generateOutline(t)),this._ensureNoPoleVertices(),this._handlePoles(n),this._granularity>=2&&((s=this._canonical)==null?void 0:s.z)===0&&(n=this._removeTrianglesOutsideTileX(n),a=a.map(o=>this._removeLinesOutsideTileX(o))),{verticesFlattened:this._vertexBuffer,indicesTriangles:n,indicesLineList:a}}_vertexOutsideTileX(t){let e=this._vertexBuffer[t*2];return e<0||e>8192}_removeTrianglesOutsideTileX(t){let e=[];for(let r=0;r<t.length;r+=3)this._vertexOutsideTileX(t[r])||this._vertexOutsideTileX(t[r+1])||this._vertexOutsideTileX(t[r+2])||e.push(t[r],t[r+1],t[r+2]);return e}_removeLinesOutsideTileX(t){let e=[];for(let r=0;r<t.length;r+=2)this._vertexOutsideTileX(t[r])||this._vertexOutsideTileX(t[r+1])||e.push(t[r],t[r+1]);return e}_convertIndices(t,e){let r=[];for(let i of e){let n=t[i*2],a=t[i*2+1];r.push(this._vertexToIndex(n,a))}return r}_pointArrayToIndices(t){let e=[];for(let r of t)e.push(this._vertexToIndex(r.x,r.y));return e}};function cd(t,e,r,i=!0){return new yx(r,e).subdividePolygonInternal(t,i)}function cr(t,e,r=!1){if(!t||t.length<1||t.length<2)return[];let i=t[0],n=t[t.length-1],a=r&&(i.x!==n.x||i.y!==n.y);if(e<2)return a?[...t,t[0]]:[...t];let s=Math.floor(mt/e),o=[];o.push(new B(t[0].x,t[0].y));let l=t.length,u=a?l:l-1;for(let h=0;h<u;h++){let c=t[h],p=h<l-1?t[h+1]:t[0],f=c.x,d=c.y,y=p.x,m=p.y,g=f!==y,x=d!==m;if(!g&&!x)continue;let v=y-f,b=m-d,D=Math.abs(v),A=Math.abs(b),_=f,S=d;for(;;){let z=v>0?(Math.floor(_/s)+1)*s:(Math.ceil(_/s)-1)*s,O=b>0?(Math.floor(S/s)+1)*s:(Math.ceil(S/s)-1)*s,P=Math.abs(_-z),L=Math.abs(S-O),F=Math.abs(_-y),$=Math.abs(S-m),U=g?P/D:1/0,T=x?L/A:1/0;if((F<=P||!g)&&($<=L||!x))break;if(U<T&&g||!x){_=z,S+=b*U;let q=new B(_,Math.round(S));(o[o.length-1].x!==q.x||o[o.length-1].y!==q.y)&&o.push(q)}else{_+=v*T,S=O;let q=new B(Math.round(_),S);(o[o.length-1].x!==q.x||o[o.length-1].y!==q.y)&&o.push(q)}}let k=new B(y,m);(o[o.length-1].x!==k.x||o[o.length-1].y!==k.y)&&o.push(k)}return o}function mx(t){let e=[],r=[];for(let i of t)if(i.length!==0){i!==t[0]&&e.push(r.length/2);for(let n of i)r.push(n.x),r.push(n.y)}return{flattened:r,holeIndices:e}}function gx(t,e){let r=[];for(let i=0;i<e.length;i+=3){let n=e[i],a=e[i+1],s=e[i+2],o=t[n*2],l=t[n*2+1],u=t[a*2],h=t[a*2+1],c=t[s*2],p=t[s*2+1],f=u-o,d=h-l,y=c-o;f*(p-l)-d*y>0?(r.push(n),r.push(s),r.push(a)):(r.push(n),r.push(a),r.push(s))}return r}function xx(t,e,r){if(e.length===0)throw Error("Subdivision vertex ring is empty.");let i=0,n=t[e[0]*2];for(let l=1;l<e.length;l++){let u=t[e[l]*2];u<n&&(n=u,i=l)}let a=e.length,s=i,o=(s+1)%a;for(;;){let l=s-1>=0?s-1:a-1,u=(o+1)%a,h=t[e[l]*2],c=t[e[l]*2+1],p=t[e[u]*2],f=t[e[u]*2+1],d=t[e[s]*2],y=t[e[s]*2+1],m=t[e[o]*2],g=t[e[o]*2+1],x=!1;if(h<p)x=!0;else if(h>p)x=!1;else{let v=g-y,b=-(m-d),D=y<g?1:-1;((h-d)*v+(c-y)*b)*D>((p-d)*v+(f-y)*b)*D&&(x=!0)}if(x){let v=e[l],b=e[s],D=e[o];v!==b&&v!==D&&b!==D&&r.push(D,b,v),s--,s<0&&(s=a-1)}else{let v=e[u],b=e[s],D=e[o];v!==b&&v!==D&&b!==D&&r.push(D,b,v),o++,o>=a&&(o=0)}if(l===u)break}}function pd(t,e,r,i,n,a,s,o,l){let u=n.length/2,h=s&&o&&l;if(u<ee.MAX_VERTEX_ARRAY_LENGTH){let c=e.prepareSegment(u,r,i),p=c.vertexLength;for(let y=0;y<a.length;y+=3)i.emplaceBack(p+a[y],p+a[y+1],p+a[y+2]);c.vertexLength+=u,c.primitiveLength+=a.length/3;let f,d;h&&(d=s.prepareSegment(u,r,o),f=d.vertexLength,d.vertexLength+=u);for(let y=0;y<n.length;y+=2)t(n[y],n[y+1]);if(h)for(let y of l){for(let m=1;m<y.length;m+=2)o.emplaceBack(f+y[m-1],f+y[m]);d.primitiveLength+=y.length/2}}else vx(e,r,i,n,a,t),h&&bx(s,r,o,n,l,t),e.forceNewSegmentOnNextPrepare(),s==null||s.forceNewSegmentOnNextPrepare()}function Zi(t,e,r,i,n,a,s){if(a){let o=i.count;return r(e[n*2],e[n*2+1]),t[n]=i.count,i.count++,s.vertexLength++,o}return t[n]}function vx(t,e,r,i,n,a){let s=[];for(let c=0;c<i.length/2;c++)s.push(-1);let o={count:0},l=0,u=t.getOrCreateLatestSegment(e,r),h=u.vertexLength;for(let c=2;c<n.length;c+=3){let p=n[c-2],f=n[c-1],d=n[c],y=s[p]<l,m=s[f]<l,g=s[d]<l,x=+!!y+ +!!m+ +!!g;u.vertexLength+x>ee.MAX_VERTEX_ARRAY_LENGTH&&(u=t.createNewSegment(e,r),l=o.count,y=!0,m=!0,g=!0,h=0);let v=Zi(s,i,a,o,p,y,u),b=Zi(s,i,a,o,f,m,u),D=Zi(s,i,a,o,d,g,u);r.emplaceBack(h+v-l,h+b-l,h+D-l),u.primitiveLength++}}function bx(t,e,r,i,n,a){let s=[];for(let c=0;c<i.length/2;c++)s.push(-1);let o={count:0},l=0,u=t.getOrCreateLatestSegment(e,r),h=u.vertexLength;for(let c of n)for(let p=1;p<c.length;p+=2){let f=c[p-1],d=c[p],y=s[f]<l,m=s[d]<l,g=+!!y+ +!!m;u.vertexLength+g>ee.MAX_VERTEX_ARRAY_LENGTH&&(u=t.createNewSegment(e,r),l=o.count,y=!0,m=!0,h=0);let x=Zi(s,i,a,o,f,y,u),v=Zi(s,i,a,o,d,m,u);r.emplaceBack(h+x-l,h+v-l),u.primitiveLength++}}var fd=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.sdfPatterns={},this.patternFeatures=[],this.layoutVertexArray=new Km,this.indexArray=new wn,this.indexArray2=new Io,this.programConfigurations=new vr(t.layers,t.zoom),this.segments=new ee,this.segments2=new ee,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(t,e,r){this.hasDependencies=Aa("fill",this.layers,e);let i=this.layers[0].layout.get("fill-sort-key"),n=!i.isConstant(),a=[],s=new st(this.zoom),o=this.layers[0]._featureFilter.needGeometry;for(let{feature:l,id:u,index:h,sourceLayerIndex:c}of t){let p=hi(l,o);if(!this.layers[0]._featureFilter.filter(s,p,r))continue;let f=n?i.evaluate(p,{},r,e.availableImages):void 0,d={id:u,properties:l.properties,type:l.type,sourceLayerIndex:c,index:h,geometry:o?p.geometry:Ar(l),patterns:{},sortKey:f};a.push(d)}n&&a.sort((l,u)=>l.sortKey-u.sortKey);for(let l of a){let{geometry:u,index:h,sourceLayerIndex:c}=l;if(this.hasDependencies){let f=Gl("fill",this.layers,l,{zoom:this.zoom},e);this.patternFeatures.push(f)}else this.addFeature(l,u,h,r,{},e.subdivisionGranularity);let p=t[h].feature;e.featureIndex.insert(p,u,h,c,this.index)}}update(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r})}addFeatures({options:t,canonical:e,patternPositions:r,patternMap:i}){this.detectSdfPatterns(i);for(let n of this.patternFeatures)this.addFeature(n,n.geometry,n.index,e,r,t.subdivisionGranularity)}detectSdfPatterns(t){for(let e of this.patternFeatures)for(let r in e.patterns){let i=e.patterns[r];this.recordSdfPattern(r,t[i.min]),this.recordSdfPattern(r,t[i.mid]),this.recordSdfPattern(r,t[i.max])}for(let e of this.layers){let r=e.paint.get("fill-pattern").constantOr(null);r&&(this.recordSdfPattern(e.id,t[r.from.toString()]),this.recordSdfPattern(e.id,t[r.to.toString()]))}}recordSdfPattern(t,e){if(!e)return;let r=e.sdf===!0,i=this.sdfPatterns[t];i===void 0?this.sdfPatterns[t]=r:i!==r&&Bt(`Style sheet warning: Cannot mix SDF and non-SDF fill patterns in layer "${t}"`)}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Wg),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())}addFeature(t,e,r,i,n,a){for(let s of Ra(e,500)){let o=cd(s,i,a.fill.getGranularityForZoomLevel(i.z)),l=this.layoutVertexArray;pd((u,h)=>{l.emplaceBack(u,h)},this.segments,this.layoutVertexArray,this.indexArray,o.verticesFlattened,o.indicesTriangles,this.segments2,this.indexArray2,o.indicesLineList)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:n,canonical:i})}};C("FillBucket",fd,{omit:["layers","patternFeatures"]});var wx,Dx=()=>wx||(wx=new Xt({"fill-sort-key":new N(w.layout_fill["fill-sort-key"],"fill-sort-key")})),_x,Ax=()=>_x||(_x=new Xt({"fill-antialias":new V(w.paint_fill["fill-antialias"],"fill-antialias"),"fill-opacity":new N(w.paint_fill["fill-opacity"],"fill-opacity"),"fill-layer-opacity":new V(w.paint_fill["fill-layer-opacity"],"fill-layer-opacity"),"fill-color":new N(w.paint_fill["fill-color"],"fill-color"),"fill-outline-color":new N(w.paint_fill["fill-outline-color"],"fill-outline-color"),"fill-translate":new V(w.paint_fill["fill-translate"],"fill-translate"),"fill-translate-anchor":new V(w.paint_fill["fill-translate-anchor"],"fill-translate-anchor"),"fill-pattern":new on(w.paint_fill["fill-pattern"],"fill-pattern")})),Sx={get paint(){return Ax()},get layout(){return Dx()}};var Ex=class extends de{constructor(t,e){super(t,Sx,e)}recalculate(t,e){super.recalculate(t,e);let r=this.paint._values["fill-outline-color"];r.value.kind==="constant"&&r.value.value===void 0&&(this.paint._values["fill-outline-color"]=this.paint._values["fill-color"])}createBucket(t){return new fd(t)}queryRadius(){return Ha(this.paint.get("fill-translate"))}queryIntersectsFeature({queryGeometry:t,geometry:e,transform:r,pixelsToTileUnits:i}){return Qf(Ka(t,this.paint.get("fill-translate"),this.paint.get("fill-translate-anchor"),-r.bearingInRadians,i),e)}isTileClipped(){return!0}},Go=At([{name:"a_pos",components:2,type:"Int16"},{name:"a_normal_ed",components:4,type:"Int16"}],4),Fx=At([{name:"a_centroid",components:2,type:"Int16"}],4),kx=Go.members;Go.size,Go.alignment;var Fa=class Xo{constructor(){this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0}extend(e){return this.minX=Math.min(this.minX,e.x),this.minY=Math.min(this.minY,e.y),this.maxX=Math.max(this.maxX,e.x),this.maxY=Math.max(this.maxY,e.y),this}expandBy(e){return this.minX-=e,this.minY-=e,this.maxX+=e,this.maxY+=e,(this.minX>this.maxX||this.minY>this.maxY)&&(this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0),this}shrinkBy(e){return this.expandBy(-e)}map(e){let r=new Xo;return r.extend(e(new B(this.minX,this.minY))),r.extend(e(new B(this.maxX,this.minY))),r.extend(e(new B(this.minX,this.maxY))),r.extend(e(new B(this.maxX,this.maxY))),r}static fromPoints(e){let r=new Xo;for(let i of e)r.extend(i);return r}contains(e){return e.x>=this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY}empty(){return this.minX>this.maxX}width(){return this.maxX-this.minX}height(){return this.maxY-this.minY}covers(e){return!this.empty()&&!e.empty()&&e.minX>=this.minX&&e.maxX<=this.maxX&&e.minY>=this.minY&&e.maxY<=this.maxY}intersects(e){return!this.empty()&&!e.empty()&&e.minX<=this.maxX&&e.maxX>=this.minX&&e.minY<=this.maxY&&e.maxY>=this.minY}},g5=Fa.fromPoints([new B(0,0),new B(mt,mt)]);function Yo(t,e){return t.x===e.x&&(t.x<0||t.x>8192)||t.y===e.y&&(t.y<0||t.y>8192)}function rc(t){return t.every(e=>e.x<0)||t.every(e=>e.x>8192)||t.every(e=>e.y<0)||t.every(e=>e.y>8192)}var Dn=class{constructor(t,e,r,i,n){for(this.properties=Object.create(null),this.extent=r,this.type=0,this.id=void 0,this._pbf=t,this._geometry=-1,this._keys=i,this._values=n;t.pos<e;){let a=t.readVarint();if(a===8)this.id=t.readVarint();else if(a===18){let s=t.readVarint()+t.pos;for(;t.pos<s;){let o=i[t.readVarint()],l=n[t.readVarint()];this.properties[o]=l}}else a===24?this.type=t.readVarint():(a===34&&(this._geometry=t.pos),t.skip(a))}}loadGeometry(){if(this._geometry<0)throw Error("feature has no geometry");let t=this._pbf;t.pos=this._geometry;let e=t.readVarint()+t.pos,r=[],i,n=1,a=0,s=0,o=0;for(;t.pos<e;){if(a<=0){let l=t.readVarint();if(n=l&7,a=l>>3,a===0)continue}if(a--,n===1)s+=t.readSVarint(),o+=t.readSVarint(),i&&r.push(i),i=[new B(s,o)];else if(n===2)s+=t.readSVarint(),o+=t.readSVarint(),i&&i.push(new B(s,o));else if(n===7)i&&i.push(i[0].clone());else throw Error(`unknown command ${n}`)}return i&&r.push(i),r}bbox(){if(this._geometry<0)throw Error("feature has no geometry");let t=this._pbf;t.pos=this._geometry;let e=t.readVarint()+t.pos,r=1,i=0,n=0,a=0,s=1/0,o=-1/0,l=1/0,u=-1/0;for(;t.pos<e;){if(i<=0){let h=t.readVarint();if(r=h&7,i=h>>3,i===0)continue}if(i--,r===1||r===2)n+=t.readSVarint(),a+=t.readSVarint(),n<s&&(s=n),n>o&&(o=n),a<l&&(l=a),a>u&&(u=a);else if(r!==7)throw Error(`unknown command ${r}`)}return[s,l,o,u]}toGeoJSON(t,e,r){let i=this.extent*2**r,n=this.extent*t,a=this.extent*e,s=this.loadGeometry();function o(c){return[(c.x+n)*360/i-180,360/Math.PI*Math.atan(Math.exp((1-(c.y+a)*2/i)*Math.PI))-90]}function l(c){return c.map(o)}let u;if(this.type===1){let c=[];for(let f of s)c.push(f[0]);let p=l(c);u=c.length===1?{type:"Point",coordinates:p[0]}:{type:"MultiPoint",coordinates:p}}else if(this.type===2){let c=s.map(l);u=c.length===1?{type:"LineString",coordinates:c[0]}:{type:"MultiLineString",coordinates:c}}else if(this.type===3){let c=dd(s),p=[];for(let f of c)p.push(f.map(l));u=p.length===1?{type:"Polygon",coordinates:p[0]}:{type:"MultiPolygon",coordinates:p}}else throw Error("unknown feature type");let h={type:"Feature",geometry:u,properties:this.properties};return this.id!=null&&(h.id=this.id),h}};Dn.types=["Unknown","Point","LineString","Polygon"];function dd(t){let e=t.length;if(e<=1)return[t];let r=[],i,n;for(let a=0;a<e;a++){let s=Tx(t[a]);s!==0&&(n===void 0&&(n=s<0),n===s<0?(i&&r.push(i),i=[t[a]]):i&&i.push(t[a]))}return i&&r.push(i),r}function Tx(t){let e=0;for(let r=0,i=t.length,n=i-1,a,s;r<i;n=r++)a=t[r],s=t[n],e+=(s.x-a.x)*(a.y+s.y);return e}var Ix=class{constructor(t,e){for(this.version=1,this.name="",this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],e===void 0&&(e=t.length);t.pos<e;){let r=t.readVarint();r===10?this.name=t.readString():r===18?(this._features.push(t.pos),t.skip(r)):r===26?this._keys.push(t.readString()):r===34?this._values.push(Cx(t)):r===40?this.extent=t.readVarint():r===120?this.version=t.readVarint():t.skip(r)}this.length=this._features.length}feature(t){if(t<0||t>=this._features.length)throw Error("feature index out of bounds");this._pbf.pos=this._features[t];let e=this._pbf.readVarint()+this._pbf.pos;return new Dn(this._pbf,e,this.extent,this._keys,this._values)}};function Cx(t){let e=null,r=t.readVarint()+t.pos;for(;t.pos<r;){let i=t.readVarint();e=i===10?t.readString():i===21?t.readFloat():i===25?t.readDouble():i===32?t.readVarint(!0):i===40?t.readVarint():i===48?t.readSVarint():i===56?t.readBoolean():(t.skip(i),null)}if(e==null)throw Error("unknown feature value");return e}var Xl=class{constructor(t,e=t.length){let r=Object.create(null);for(;t.pos<e;){let i=t.readVarint();if(i===26){let n=new Ix(t,t.readVarint()+t.pos);n.length&&(r[n.name]=n)}else t.skip(i)}this.layers=r}},yd=63710088e-1,ic=class Ui{constructor(e,r){if(isNaN(e)||isNaN(r))throw Error(`Invalid LngLat object: (${e}, ${r})`);if(this.lng=+e,this.lat=+r,this.lat>90||this.lat<-90)throw Error("Invalid LngLat latitude value: must be between -90 and 90")}wrap(){return new Ui(F1(this.lng,-180,180),this.lat)}toArray(){return[this.lng,this.lat]}toString(){return`LngLat(${this.lng}, ${this.lat})`}distanceTo(e){let r=Math.PI/180,i=this.lat*r,n=e.lat*r,a=Math.sin(i)*Math.sin(n)+Math.cos(i)*Math.cos(n)*Math.cos((e.lng-this.lng)*r);return yd*Math.acos(Math.min(a,1))}static convert(e){if(e instanceof Ui)return e;if(Array.isArray(e)&&(e.length===2||e.length===3))return new Ui(Number(e[0]),Number(e[1]));if(!Array.isArray(e)&&typeof e=="object"&&e)return new Ui(Number("lng"in e?e.lng:e.lon),Number(e.lat));throw Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")}},md=2*Math.PI*yd;function gd(t){return md*Math.cos(t*Math.PI/180)}function Mx(t){return(180+t)/360}function Bx(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Px(t,e){return t/gd(e)}function zx(t){return t*360-180}function Wo(t){let e=180-t*360;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}function Lx(t,e){return t*gd(Wo(e))}function Vx(t){return 1/Math.cos(t*Math.PI/180)}var Yl=class xd{constructor(e,r,i=0){this.x=+e,this.y=+r,this.z=+i}static fromLngLat(e,r=0){let i=ic.convert(e);return new xd(Mx(i.lng),Bx(i.lat),Px(r,i.lat))}toLngLat(){return new ic(zx(this.x),Wo(this.y))}toAltitude(){return Lx(this.z,this.y)}meterInMercatorCoordinateUnits(){return 1/md*Vx(Wo(this.y))}};function Ox(t,e,r){let i=1/(1<<r.z);return new Yl(t/mt*i+r.x*i,e/mt*i+r.y*i)}function Rx(t,e,r){return Ox(t,e,r).toLngLat()}function nc(t,e,r){if(e<=0||!t||t.length===0)return t;let i=$x(e,r);return t.map(n=>Nx(n,i))}function $x(t,e){let r=Rx(mt/2,mt/2,e),i=Yl.fromLngLat(r).meterInMercatorCoordinateUnits(),n=(1<<e.z)*mt;return t*i*n}function Nx(t,e){if(!t||t.length<3)return t;let r=t[0].x===t[t.length-1].x&&t[0].y===t[t.length-1].y,i=r?t.length-1:t.length;if(i<3)return t;let n=[];for(let s=0;s<i;s++){let o=t[(s-1+i)%i],l=t[s],u=t[(s+1)%i];if(Yo(o,l)||Yo(l,u)){n.push(l.clone());continue}qx(n,o,l,u,e)}let a=Ux(n);return a.length<3?t:(r&&a.push(a[0].clone()),a)}function Ux(t){let e=[];for(let r of t){let i=r.round(),n=e[e.length-1];((n==null?void 0:n.x)!==i.x||(n==null?void 0:n.y)!==i.y)&&e.push(i)}for(;e.length>1&&e[0].x===e[e.length-1].x&&e[0].y===e[e.length-1].y;)e.pop();return e}function qx(t,e,r,i,n){let a=e.sub(r),s=i.sub(r),o=a.mag(),l=s.mag();if(o<1e-6||l<1e-6){t.push(r.clone());return}a._div(o),s._div(l);let u=a.x*s.x+a.y*s.y;if(Math.abs(u)>Math.cos(5*Math.PI/180)){t.push(r.clone());return}let h=.2,c=Math.min(n,o*h,l*h),p=r.add(a.mult(c)),f=r.add(s.mult(c)),d=Math.sqrt((1+u)/2),y=r.add(a.add(s)._unit()._mult(c/d)),m=p.sub(y).angleWith(f.sub(y)),g=Math.max(2,Math.ceil(Math.abs(m)/(Math.PI/6)-1e-6));for(let x=0;x<=g;x++)t.push(p.rotateAround(x/g*m,y))}var js=8192;function Mi(t,e,r,i,n,a,s,o){t.emplaceBack(e,r,Math.floor(i*js)*2+s,n*js*2,a*js*2,Math.round(o))}var vd=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.layoutVertexArray=new Jm,this.centroidVertexArray=new Zm,this.indexArray=new wn,this.programConfigurations=new vr(t.layers,t.zoom),this.segments=new ee,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(t,e,r){this.features=[],this.hasDependencies=Aa("fill-extrusion",this.layers,e);let i=new st(this.zoom),n=this.layers[0],a=n.layout.get("fill-extrusion-rounded-corner-distance"),s=n._featureFilter.needGeometry;for(let{feature:o,id:l,index:u,sourceLayerIndex:h}of t){let c=hi(o,s);if(!n._featureFilter.filter(i,c,r))continue;let p=s?c.geometry:Ar(o),f={id:l,sourceLayerIndex:h,index:u,geometry:a>0?nc(p,a,r):p,properties:o.properties,type:o.type,patterns:{}};this.hasDependencies?this.features.push(Gl("fill-extrusion",this.layers,f,{zoom:this.zoom},e)):this.addFeature(f,f.geometry,u,r,{},e.subdivisionGranularity),e.featureIndex.insert(o,f.geometry,u,h,this.index,!0)}}addFeatures({options:t,canonical:e,patternPositions:r}){for(let i of this.features){let{geometry:n}=i;this.addFeature(i,n,i.index,e,r,t.subdivisionGranularity)}}update(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r})}isEmpty(){return this.layoutVertexArray.length===0&&this.centroidVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,kx),this.centroidVertexBuffer=t.createVertexBuffer(this.centroidVertexArray,Fx.members,!0),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.centroidVertexBuffer.destroy())}addFeature(t,e,r,i,n,a){let s=this.layers[0],o=s.layout?s.layout.get("fill-extrusion-rounded-corner-distance"):0,l=o>0?nc(e,o,i):e;for(let u of Ra(l,500)){let h={x:0,y:0,sampleCount:0},c=this.layoutVertexArray.length;this.processPolygon(h,i,t,u,a);let p=this.layoutVertexArray.length-c,f=Math.floor(h.x/h.sampleCount),d=Math.floor(h.y/h.sampleCount);for(let y=0;y<p;y++)this.centroidVertexArray.emplaceBack(f,d)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:n,canonical:i})}processPolygon(t,e,r,i,n){if(i.length<1||rc(i[0]))return;for(let h of i)h.length!==0&&jx(t,h);let a={segment:this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray)},s=n.fill.getGranularityForZoomLevel(e.z),o=Dn.types[r.type]==="Polygon";for(let h of i){if(h.length===0||rc(h))continue;let c=cr(h,s,o);this._generateSideFaces(c,a)}if(!o)return;let l=cd(i,e,s,!1),u=this.layoutVertexArray;pd((h,c)=>{Mi(u,h,c,0,0,1,1,0)},this.segments,this.layoutVertexArray,this.indexArray,l.verticesFlattened,l.indicesTriangles)}_generateSideFaces(t,e){let r=0;for(let i=1;i<t.length;i++){let n=t[i],a=t[i-1];if(Yo(n,a))continue;e.segment.vertexLength+4>ee.MAX_VERTEX_ARRAY_LENGTH&&(e.segment=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));let s=n.sub(a)._perp()._unit(),o=a.dist(n);r+o>32768&&(r=0),Mi(this.layoutVertexArray,n.x,n.y,s.x,s.y,0,0,r),Mi(this.layoutVertexArray,n.x,n.y,s.x,s.y,0,1,r),r+=o,Mi(this.layoutVertexArray,a.x,a.y,s.x,s.y,0,0,r),Mi(this.layoutVertexArray,a.x,a.y,s.x,s.y,0,1,r);let l=e.segment.vertexLength;this.indexArray.emplaceBack(l,l+2,l+1),this.indexArray.emplaceBack(l+1,l+2,l+3),e.segment.vertexLength+=4,e.segment.primitiveLength+=2}}};function jx(t,e){for(let r=0;r<e.length;r++){let i=e[r];(r!==e.length-1||e[0].x!==i.x||e[0].y!==i.y)&&(t.x+=i.x,t.y+=i.y,t.sampleCount++)}}C("FillExtrusionBucket",vd,{omit:["layers","features"]});var Gx,Xx=()=>Gx||(Gx=new Xt({"fill-extrusion-rounded-corner-distance":new V(w["layout_fill-extrusion"]["fill-extrusion-rounded-corner-distance"],"fill-extrusion-rounded-corner-distance")})),Yx,Wx=()=>Yx||(Yx=new Xt({"fill-extrusion-opacity":new V(w["paint_fill-extrusion"]["fill-extrusion-opacity"],"fill-extrusion-opacity"),"fill-extrusion-color":new N(w["paint_fill-extrusion"]["fill-extrusion-color"],"fill-extrusion-color"),"fill-extrusion-translate":new V(w["paint_fill-extrusion"]["fill-extrusion-translate"],"fill-extrusion-translate"),"fill-extrusion-translate-anchor":new V(w["paint_fill-extrusion"]["fill-extrusion-translate-anchor"],"fill-extrusion-translate-anchor"),"fill-extrusion-pattern":new on(w["paint_fill-extrusion"]["fill-extrusion-pattern"],"fill-extrusion-pattern"),"fill-extrusion-height":new N(w["paint_fill-extrusion"]["fill-extrusion-height"],"fill-extrusion-height"),"fill-extrusion-base":new N(w["paint_fill-extrusion"]["fill-extrusion-base"],"fill-extrusion-base"),"fill-extrusion-vertical-gradient":new V(w["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"],"fill-extrusion-vertical-gradient")})),Zx={get paint(){return Wx()},get layout(){return Xx()}};var Hx=class extends de{constructor(t,e){super(t,Zx,e)}createBucket(t){return new vd(t)}queryRadius(){return Ha(this.paint.get("fill-extrusion-translate"))}is3D(){return!0}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a,pixelPosMatrix:s}){let o=Ka(t,this.paint.get("fill-extrusion-translate"),this.paint.get("fill-extrusion-translate-anchor"),-n.bearingInRadians,a),l=this.paint.get("fill-extrusion-height").evaluate(e,r),u=this.paint.get("fill-extrusion-base").evaluate(e,r),h=Qx(o,s,0),c=Jx(i,u,l,s),p=c[0],f=c[1];return Kx(p,f,h)}};function Bi(t,e){return t.x*e.x+t.y*e.y}function ac(t,e){if(t.length===1){let r=0,i=e[r++],n;for(;!n||i.equals(n);)if(n=e[r++],!n)return 1/0;for(;r<e.length;r++){let a=e[r],s=t[0],o=n.sub(i),l=a.sub(i),u=s.sub(i),h=Bi(o,o),c=Bi(o,l),p=Bi(l,l),f=Bi(u,o),d=Bi(u,l),y=h*p-c*c,m=(p*f-c*d)/y,g=(h*d-c*f)/y,x=1-m-g,v=i.z*x+n.z*m+a.z*g;if(isFinite(v))return v}return 1/0}{let r=1/0;for(let i of e)r=Math.min(r,i.z);return r}}function Kx(t,e,r){let i=1/0;Qf(r,e)&&(i=ac(r,e[0]));for(let n=0;n<e.length;n++){let a=e[n],s=t[n];for(let o=0;o<a.length-1;o++){let l=a[o],u=a[o+1],h=s[o],c=[l,u,s[o+1],h,l];yg(r,c)&&(i=Math.min(i,ac(r,c)))}}return i!==1/0&&i}function Jx(t,e,r,i){let n=[],a=[],s=i[8]*e,o=i[9]*e,l=i[10]*e,u=i[11]*e,h=i[8]*r,c=i[9]*r,p=i[10]*r,f=i[11]*r;for(let d of t){let y=[],m=[];for(let g of d){let x=g.x,v=g.y,b=i[0]*x+i[4]*v+i[12],D=i[1]*x+i[5]*v+i[13],A=i[2]*x+i[6]*v+i[14],_=i[3]*x+i[7]*v+i[15],S=b+s,k=D+o,z=A+l,O=_+u,P=b+h,L=D+c,F=A+p,$=_+f,U=new B(S/O,k/O);U.z=z/O,y.push(U);let T=new B(P/$,L/$);T.z=F/$,m.push(T)}n.push(y),a.push(m)}return[n,a]}function Qx(t,e,r){let i=[];for(let n of t){let a=[n.x,n.y,r,1];w1(a,a,e),i.push(new B(a[0]/a[3],a[1]/a[3]))}return i}function Zo(t,e,r,i){let n=i,a=e+(r-e>>1),s=r-e,o,l=t[e],u=t[e+1],h=t[r],c=t[r+1];for(let p=e+3;p<r;p+=3){let f=t2(t[p],t[p+1],l,u,h,c);if(f>n){o=p,n=f;continue}if(f===n){let d=Math.abs(p-a);d<s&&(o=p,s=d)}}n>i&&(o-e>3&&Zo(t,e,o,i),t[o+2]=n,r-o>3&&Zo(t,o,r,i))}function t2(t,e,r,i,n,a){let s=n-r,o=a-i;if(s!==0||o!==0){let l=((t-r)*s+(e-i)*o)/(s*s+o*o);l>1?(r=n,i=a):l>0&&(r+=s*l,i+=o*l)}return s=t-r,o=e-i,s*s+o*o}function Mt(t,e,r,i){let n={type:e,geom:r},a={id:t!=null?t:null,type:n.type,geometry:n.geom,tags:i,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};switch(n.type){case"Point":case"MultiPoint":Pi(a,n.geom);break;case"LineString":Pi(a,n.geom.points);break;case"Polygon":Pi(a,n.geom[0].points);break;case"MultiLineString":for(let s of n.geom)Pi(a,s.points);break;case"MultiPolygon":for(let s of n.geom)Pi(a,s[0].points)}return a}function Wl(t){let e=t;t.points.length>64&&(e.points=new Float64Array(t.points))}function Pi(t,e){for(let r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function Zl(t,e){let r=[];switch(t.type){case"FeatureCollection":for(let i=0;i<t.features.length;i++)fa(r,t.features[i],e,i);break;case"Feature":fa(r,t,e);break;default:fa(r,{type:"Feature",geometry:t,properties:void 0},e)}return r}function fa(t,e,r,i,n=0){var o;if(!e.geometry)return;if(n>1024)throw Error("GeometryCollection nesting exceeds supported depth: 1024");if(e.geometry.type==="GeometryCollection"){r2(t,e,e.geometry,r,i,n+1);return}if(!((o=e.geometry.coordinates)!=null&&o.length))return;let a=e2(e,r,i),s=(r.tolerance/((1<<r.maxZoom)*r.extent))**2;switch(e.geometry.type){case"Point":i2(t,a,e.geometry,e.properties);return;case"MultiPoint":n2(t,a,e.geometry,e.properties);return;case"LineString":a2(t,a,e.geometry,s,e.properties);return;case"MultiLineString":s2(t,a,e.geometry,s,r,e.properties);return;case"Polygon":o2(t,a,e.geometry,s,e.properties);return;case"MultiPolygon":l2(t,a,e.geometry,s,e.properties);return;default:throw Error("Input data is not a valid GeoJSON object.")}}function e2(t,e,r){var i;return e.promoteId?(i=t.properties)==null?void 0:i[e.promoteId]:e.generateId?r||0:t.id}function r2(t,e,r,i,n,a=0){for(let s of r.geometries)fa(t,{id:e.id,type:"Feature",geometry:s,properties:e.properties},i,n,a)}function i2(t,e,r,i){let n=[];n.push(Zr(r.coordinates[0]),Hr(r.coordinates[1]),0),t.push(Mt(e,"Point",n,i))}function n2(t,e,r,i){let n=[];for(let a of r.coordinates)n.push(Zr(a[0]),Hr(a[1]),0);t.push(Mt(e,"MultiPoint",n,i))}function a2(t,e,r,i,n){let a={points:[]};Hl(r.coordinates,a,i,!1),t.push(Mt(e,"LineString",a,n))}function s2(t,e,r,i,n,a){if(n.lineMetrics)for(let s of r.coordinates){let o={points:[]};Hl(s,o,i,!1),t.push(Mt(e,"LineString",o,a))}else{let s=[];Kl(r.coordinates,s,i,!1),t.push(Mt(e,"MultiLineString",s,a))}}function o2(t,e,r,i,n){let a=[];Kl(r.coordinates,a,i,!0),t.push(Mt(e,"Polygon",a,n))}function l2(t,e,r,i,n){let a=[];for(let s of r.coordinates){let o=[];Kl(s,o,i,!0),a.push(o)}t.push(Mt(e,"MultiPolygon",a,n))}function Hl(t,e,r,i){let n,a,s=0;for(let l=0;l<t.length;l++){let u=Zr(t[l][0]),h=Hr(t[l][1]);e.points.push(u,h,0),l>0&&(s+=i?(n*h-u*a)/2:Math.sqrt((u-n)**2+(h-a)**2)),n=u,a=h}let o=e.points.length-3;e.points[2]=1,r>0&&Zo(e.points,0,o,r),e.points[o+2]=1,Wl(e),e.size=Math.abs(s),e.start=0,e.end=e.size}function Kl(t,e,r,i){for(let n=0;n<t.length;n++){let a={points:[]};Hl(t[n],a,r,i),e.push(a)}}function Zr(t){return t/360+.5}function Hr(t){let e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function u2(t){return{type:"FeatureCollection",features:t.map(e=>ka(e))}}function ka(t){let e={type:"Feature",geometry:h2(t),properties:t.tags};return t.id!=null&&(e.id=t.id),e}function h2(t){let{type:e,geometry:r}=t;switch(e){case"Point":return{type:e,coordinates:bd(r[0],r[1])};case"MultiPoint":return{type:e,coordinates:Kn(r)};case"LineString":return{type:e,coordinates:Kn(r.points)};case"MultiLineString":case"Polygon":return{type:e,coordinates:r.map(i=>Kn(i.points))};case"MultiPolygon":return{type:e,coordinates:r.map(i=>i.map(n=>Kn(n.points)))}}}function Kn(t){let e=[];for(let r=0;r<t.length;r+=3)e.push(bd(t[r],t[r+1]));return e}function bd(t,e){return[wd(t),Dd(e)]}function wd(t){return(t-.5)*360}function Dd(t){let e=(180-t*360)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}function Te(t,e,r,i,n,a,s,o){if(r/=e,i/=e,a>=r&&s<i)return t;if(s<r||a>=i)return null;let l=[];for(let u of t){let h=n===0?u.minX:u.minY,c=n===0?u.maxX:u.maxY;if(h>=r&&c<i){l.push(u);continue}if(!(c<r||h>=i))switch(u.type){case"Point":case"MultiPoint":c2(u,l,r,i,n);continue;case"LineString":p2(u,l,r,i,n,o);continue;case"MultiLineString":f2(u,l,r,i,n);continue;case"Polygon":d2(u,l,r,i,n);continue;case"MultiPolygon":y2(u,l,r,i,n);continue}}return l.length?l:null}function c2(t,e,r,i,n){let a=[];if(m2(t.geometry,a,r,i,n),!a.length)return;let s=a.length===3?"Point":"MultiPoint";e.push(Mt(t.id,s,a,t.tags))}function p2(t,e,r,i,n,a){let s=[];if(_d(t.geometry,s,r,i,n,!1,a.lineMetrics),s.length){if(a.lineMetrics){for(let o of s)e.push(Mt(t.id,"LineString",o,t.tags));return}if(s.length>1){e.push(Mt(t.id,"MultiLineString",s,t.tags));return}e.push(Mt(t.id,"LineString",s[0],t.tags))}}function f2(t,e,r,i,n){let a=[];if(Jl(t.geometry,a,r,i,n,!1),a.length){if(a.length===1){e.push(Mt(t.id,"LineString",a[0],t.tags));return}e.push(Mt(t.id,"MultiLineString",a,t.tags))}}function d2(t,e,r,i,n){let a=[];Jl(t.geometry,a,r,i,n,!0),a.length&&e.push(Mt(t.id,"Polygon",a,t.tags))}function y2(t,e,r,i,n){let a=[];for(let s of t.geometry){let o=[];Jl(s,o,r,i,n,!0),o.length&&a.push(o)}a.length&&e.push(Mt(t.id,"MultiPolygon",a,t.tags))}function m2(t,e,r,i,n){for(let a=0;a<t.length;a+=3){let s=t[a+n];s>=r&&s<=i&&Kr(e,t[a],t[a+1],t[a+2])}}function _d(t,e,r,i,n,a,s){let o=sc(t),l=n===0?g2:x2,u=t.start,h,c;for(let g=0;g<t.points.length-3;g+=3){let x=t.points[g],v=t.points[g+1],b=t.points[g+2],D=t.points[g+3],A=t.points[g+4],_=n===0?x:v,S=n===0?D:A,k=!1;s&&(h=Math.sqrt((x-D)**2+(v-A)**2)),_<r?S>r&&(c=l(o,x,v,D,A,r),s&&(o.start=u+h*c)):_>i?S<i&&(c=l(o,x,v,D,A,i),s&&(o.start=u+h*c)):Kr(o.points,x,v,b),S<r&&_>=r&&(c=l(o,x,v,D,A,r),k=!0),S>i&&_<=i&&(c=l(o,x,v,D,A,i),k=!0),!a&&k&&(s&&(o.end=u+h*c),e.push(o),o=sc(t)),s&&(u+=h)}let p=t.points.length-3,f=t.points[p],d=t.points[p+1],y=t.points[p+2],m=n===0?f:d;m>=r&&m<=i&&Kr(o.points,f,d,y),p=o.points.length-3,a&&p>=3&&(o.points[p]!==o.points[0]||o.points[p+1]!==o.points[1])&&Kr(o.points,o.points[0],o.points[1],o.points[2]),o.points.length&&(Wl(o),e.push(o))}function sc(t){return{points:[],size:t.size,start:t.start,end:t.end}}function Jl(t,e,r,i,n,a){for(let s of t)_d(s,e,r,i,n,a,!1)}function Kr(t,e,r,i){t.push(e,r,i)}function g2(t,e,r,i,n,a){let s=(a-e)/(i-e);return Kr(t.points,a,r+(n-r)*s,1),s}function x2(t,e,r,i,n,a){let s=(a-r)/(n-r);return Kr(t.points,e+(i-e)*s,a,1),s}function Ql(t,e){let r=e.buffer/e.extent,i=t,n=Te(t,1,-1-r,r,0,-1,2,e),a=Te(t,1,1-r,2+r,0,-1,2,e);return!n&&!a||(i=Te(t,1,-r,1+r,0,-1,2,e)||[],n&&(i=oc(n,1).concat(i)),a&&(i=i.concat(oc(a,-1)))),i}function oc(t,e){let r=[];for(let i of t)switch(i.type){case"Point":case"MultiPoint":{let n=v2(i.geometry,e);r.push(Mt(i.id,i.type,n,i.tags));continue}case"LineString":{let n=Gs(i.geometry,e);r.push(Mt(i.id,i.type,n,i.tags));continue}case"MultiLineString":case"Polygon":{let n=[];for(let a of i.geometry)n.push(Gs(a,e));r.push(Mt(i.id,i.type,n,i.tags));continue}case"MultiPolygon":{let n=[];for(let a of i.geometry){let s=[];for(let o of a)s.push(Gs(o,e));n.push(s)}r.push(Mt(i.id,i.type,n,i.tags));continue}}return r}function v2(t,e){let r=[];for(let i=0;i<t.length;i+=3)r.push(t[i]+e,t[i+1],t[i+2]);return r}function Gs(t,e){let r={points:[],size:t.size};t.start!==void 0&&(r.start=t.start,r.end=t.end);for(let i=0;i<t.points.length;i+=3)r.points.push(t.points[i]+e,t.points[i+1],t.points[i+2]);return Wl(r),r}function b2(t,e,r){let i=D2(e,r),n=[];if(i.removeAll&&(n=t,t=[]),i.remove.size||i.add.size){let a=[];for(let s of t)(i.remove.has(s.id)||i.add.has(s.id))&&a.push(s);if(a.length){n=n.concat(a);let s=new Set(a.map(o=>o.id));t=t.filter(o=>!s.has(o.id))}if(i.add.size){let s=Zl({type:"FeatureCollection",features:Array.from(i.add.values())},r);s=Ql(s,r),n=n.concat(s),t=t.concat(s)}}if(i.update.size){let a=new Map,s=[];for(let o of t)i.update.has(o.id)?a.set(o.id,[...a.get(o.id)||[],o]):s.push(o);for(let[o,l]of i.update){let u=a.get(o);if(!u||u.length===0)continue;let h=w2(u,l,r);n=n.concat(u,h),s=s.concat(h)}t=s}return{affected:n,source:t}}function w2(t,e,r){var a,s;let i=!!e.newGeometry,n=e.removeAllProperties||((a=e.removeProperties)==null?void 0:a.length)>0||((s=e.addOrUpdateProperties)==null?void 0:s.length)>0;if(i){let o=t[0],l=Zl({type:"FeatureCollection",features:[{type:"Feature",id:o.id,geometry:e.newGeometry,properties:n?lc(o.tags,e):o.tags}]},r);return l=Ql(l,r),l}if(n){let o=[];for(let l of t){let u=je({},l);u.tags=lc(u.tags,e),o.push(u)}return o}return t}function lc(t,e){if(e.removeAllProperties)return{};let r=je({},t||{});if(e.removeProperties)for(let i of e.removeProperties)delete r[i];if(e.addOrUpdateProperties)for(let{key:i,value:n}of e.addOrUpdateProperties)r[i]=n;return r}function D2(t,e){var r,i;return t?{removeAll:t.removeAll,remove:new Set(t.remove||[]),add:new Map((r=t.add)==null?void 0:r.map(n=>[e.promoteId?n.properties[e.promoteId]:n.id,n])),update:new Map((i=t.update)==null?void 0:i.map(n=>[n.id,n]))}:{remove:new Set,add:new Map,update:new Map}}var uc=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],dt=new Uint32Array(96),_2=class Ad{static from(e){if(!e||e.byteLength===void 0||e.buffer)throw Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");let[r,i]=new Uint8Array(e,0,2);if(r!==219)throw Error("Data does not appear to be in a KDBush format.");let n=i>>4;if(n!==1)throw Error(`Got v${n} data when expected v1.`);let a=uc[i&15];if(!a)throw Error("Unrecognized array type.");let[s]=new Uint16Array(e,2,1),[o]=new Uint32Array(e,4,1);return new Ad(o,s,a,void 0,e)}constructor(e,r=64,i=Float64Array,n=ArrayBuffer,a){if(isNaN(e)||e<0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+r,2),65535),this.ArrayType=i,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;let s=uc.indexOf(this.ArrayType),o=e*2*this.ArrayType.BYTES_PER_ELEMENT,l=e*this.IndexArrayType.BYTES_PER_ELEMENT,u=(8-l%8)%8;if(s<0)throw Error(`Unexpected typed array class: ${i}.`);if(a)this.data=a,this.ids=new this.IndexArrayType(a,8,e),this.coords=new i(a,8+l+u,e*2),this._pos=e*2,this._finished=!0;else{let h=this.data=new n(8+o+l+u);this.ids=new this.IndexArrayType(h,8,e),this.coords=new i(h,8+l+u,e*2),this._pos=0,this._finished=!1,new Uint8Array(h,0,2).set([219,16+s]),new Uint16Array(h,2,1)[0]=r,new Uint32Array(h,4,1)[0]=e}}add(e,r){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=e,this.coords[this._pos++]=r,i}finish(){let e=this._pos>>1;if(e!==this.numItems)throw Error(`Added ${e} items when expected ${this.numItems}.`);return Ho(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,r,i,n){if(!this._finished)throw Error("Data not yet indexed - call index.finish().");let{ids:a,coords:s,nodeSize:o}=this;dt[0]=0,dt[1]=a.length-1,dt[2]=0;let l=3,u=[];for(;l>0;){let h=dt[--l],c=dt[--l],p=dt[--l];if(c-p<=o){for(let m=p;m<=c;m++){let g=s[2*m],x=s[2*m+1];g>=e&&g<=i&&x>=r&&x<=n&&u.push(a[m])}continue}let f=p+c>>1,d=s[2*f],y=s[2*f+1];d>=e&&d<=i&&y>=r&&y<=n&&u.push(a[f]),(h===0?e<=d:r<=y)&&(dt[l++]=p,dt[l++]=f-1,dt[l++]=1-h),(h===0?i>=d:n>=y)&&(dt[l++]=f+1,dt[l++]=c,dt[l++]=1-h)}return u}within(e,r,i){let n=[];return this.withinInto(e,r,i,n),n}withinInto(e,r,i,n){if(!this._finished)throw Error("Data not yet indexed - call index.finish().");let{ids:a,coords:s,nodeSize:o}=this;dt[0]=0,dt[1]=a.length-1,dt[2]=0;let l=3,u=0,h=i*i;for(;l>0;){let c=dt[--l],p=dt[--l],f=dt[--l];if(p-f<=o){for(let g=f;g<=p;g++)hc(s[2*g],s[2*g+1],e,r)<=h&&(n[u++]=a[g]);continue}let d=f+p>>1,y=s[2*d],m=s[2*d+1];hc(y,m,e,r)<=h&&(n[u++]=a[d]),(c===0?e-i<=y:r-i<=m)&&(dt[l++]=f,dt[l++]=d-1,dt[l++]=1-c),(c===0?e+i>=y:r+i>=m)&&(dt[l++]=d+1,dt[l++]=p,dt[l++]=1-c)}return u}};function Ho(t,e,r,i,n,a){if(n-i<=r)return;let s=i+n>>1;Sd(t,e,s,i,n,a),Ho(t,e,r,i,s-1,1-a),Ho(t,e,r,s+1,n,1-a)}function Sd(t,e,r,i,n,a){for(;n>i;){if(n-i>600){let u=n-i+1,h=r-i+1,c=Math.log(u),p=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*p*(u-p)/u)*(h-u/2<0?-1:1);Sd(t,e,r,Math.max(i,Math.floor(r-h*p/u+f)),Math.min(n,Math.floor(r+(u-h)*p/u+f)),a)}let s=e[2*r+a],o=i,l=n;for(zi(t,e,i,r),e[2*n+a]>s&&zi(t,e,i,n);o<l;){for(zi(t,e,o,l),o++,l--;e[2*o+a]<s;)o++;for(;e[2*l+a]>s;)l--}e[2*i+a]===s?zi(t,e,i,l):(l++,zi(t,e,l,n)),l<=r&&(i=l+1),r<=l&&(n=l-1)}}function zi(t,e,r,i){Xs(t,r,i),Xs(e,2*r,2*i),Xs(e,2*r+1,2*i+1)}function Xs(t,e,r){let i=t[e];t[e]=t[r],t[r]=i}function hc(t,e,r,i){let n=t-r,a=e-i;return n*n+a*a}var Ko={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:t=>t},A2=class{constructor(t){this.options=Object.assign(Object.create(Ko),t),this.trees=Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[],this.points=[]}load(t){let e=[];for(let r of t){if(!r.geometry)continue;let[i,n]=r.geometry.coordinates,[a,s]=[Zr(i),Hr(n)],o={id:r.id,type:"Point",geometry:[a,s],tags:r.properties};e.push(o)}this.createIndex(e)}initialize(t){let e=[];for(let r of t)r.type==="Point"&&e.push(r);this.createIndex(e)}updateIndex(t,e,r){this.options=Object.assign(Object.create(Ko),r.clusterOptions),this.initialize(t)}createIndex(t){let{log:e,minZoom:r,maxZoom:i}=this.options;e&&console.time("total time");let n=`prepare ${t.length} points`;e&&console.time(n),this.points=t;let a=[];for(let o=0;o<t.length;o++){let l=t[o];if(!(l!=null&&l.geometry))continue;let[u,h]=l.geometry;u=Math.fround(u),h=Math.fround(h),a.push(u,h,1/0,o,-1,1),this.options.reduce&&a.push(0)}let s=this.trees[i+1]=this.createTree(a);e&&console.timeEnd(n);for(let o=i;o>=r;o--){let l=Date.now();s=this.trees[o]=this.createTree(this.cluster(s,o)),e&&console.log("z%d: %d clusters in %dms",o,s.numItems,Date.now()-l)}e&&console.timeEnd("total time")}getClusters(t,e){return this.getClustersInternal(t,e).map(r=>ka(r))}getClustersInternal(t,e){let r=((t[0]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,t[1])),n=t[2]===180?180:((t[2]+180)%360+360)%360-180,a=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,n=180;else if(r>n){let h=this.getClustersInternal([r,i,180,a],e),c=this.getClustersInternal([-180,i,n,a],e);return h.concat(c)}let s=this.trees[this.limitZoom(e)],o=s.range(Zr(r),Hr(a),Zr(n),Hr(i)),l=s.flatData,u=[];for(let h of o){let c=this.stride*h;u.push(l[c+5]>1?S2(l,c,this.clusterProps):this.points[l[c+3]])}return u}getChildren(t){let e=this.getOriginId(t),r=this.getOriginZoom(t),i=Error("No cluster with the specified id: "+t),n=this.trees[r];if(!n)throw i;let a=n.flatData;if(e*this.stride>=a.length)throw i;let s=this.options.radius/(this.options.extent*2**(r-1)),o=a[e*this.stride],l=a[e*this.stride+1],u=n.within(o,l,s),h=[];for(let c of u){let p=c*this.stride;a[p+4]===t&&h.push(a[p+5]>1?E2(a,p,this.clusterProps):ka(this.points[a[p+3]]))}if(h.length===0)throw i;return h}getLeaves(t,e,r){e||(e=10),r||(r=0);let i=[];return this.appendLeaves(i,t,e,r,0),i}getTile(t,e,r){let i=this.trees[this.limitZoom(t)];if(!i)return null;let n=2**t,{extent:a,radius:s}=this.options,o=s/a,l=(r-o)/n,u=(r+1+o)/n,h={transformed:!0,features:[],source:null,x:e,y:r,z:t};return this.addTileFeatures(i.range((e-o)/n,l,(e+1+o)/n,u),i.flatData,e,r,n,h),e===0&&this.addTileFeatures(i.range(1-o/n,l,1,u),i.flatData,n,r,n,h),e===n-1&&this.addTileFeatures(i.range(0,l,o/n,u),i.flatData,-1,r,n,h),h}getClusterExpansionZoom(t){return this.getOriginZoom(t)}appendLeaves(t,e,r,i,n){let a=this.getChildren(e);for(let s of a){let o=s.properties;if(o!=null&&o.cluster?n+o.point_count<=i?n+=o.point_count:n=this.appendLeaves(t,o.cluster_id,r,i,n):n<i?n++:t.push(s),t.length===r)break}return n}createTree(t){let e=new _2(t.length/this.stride|0,this.options.nodeSize,Float32Array);for(let r=0;r<t.length;r+=this.stride)e.add(t[r],t[r+1]);return e.finish(),e.flatData=t,e.data=null,e}addTileFeatures(t,e,r,i,n,a){for(let s of t){let o=s*this.stride,l=e[o+5]>1,u,h,c;if(l)u=tu(e,o,this.clusterProps),h=e[o],c=e[o+1];else{let d=this.points[e[o+3]];u=d.tags,[h,c]=d.geometry}let p={type:1,geometry:[[Math.round(this.options.extent*(h*n-r)),Math.round(this.options.extent*(c*n-i))]],tags:u},f;f=l||this.options.generateId?e[o+3]:this.points[e[o+3]].id,f!==void 0&&(p.id=f),a.features.push(p)}}limitZoom(t){return Math.max(this.options.minZoom,Math.min(Math.floor(+t),this.options.maxZoom+1))}cluster(t,e){let{radius:r,extent:i,reduce:n,minPoints:a}=this.options,s=r/(i*2**e),o=t.flatData,l=[],u=this.stride;for(let h=0;h<o.length;h+=u){if(o[h+2]<=e)continue;o[h+2]=e;let c=o[h],p=o[h+1],f=t.within(o[h],o[h+1],s),d=o[h+5],y=d;for(let m of f){let g=m*u;o[g+2]>e&&(y+=o[g+5])}if(y>d&&y>=a){let m=c*d,g=p*d,x,v=-1,b=((h/u|0)<<5)+(e+1)+this.points.length;for(let D of f){let A=D*u;if(o[A+2]<=e)continue;o[A+2]=e;let _=o[A+5];m+=o[A]*_,g+=o[A+1]*_,o[A+4]=b,n&&(x||(x=this.map(o,h,!0),v=this.clusterProps.length,this.clusterProps.push(x)),n(x,this.map(o,A)))}o[h+4]=b,l.push(m/y,g/y,1/0,b,-1,y),n&&l.push(v)}else{for(let m=0;m<u;m++)l.push(o[h+m]);if(y>1)for(let m of f){let g=m*u;if(!(o[g+2]<=e)){o[g+2]=e;for(let x=0;x<u;x++)l.push(o[g+x])}}}}return l}getOriginId(t){return t-this.points.length>>5}getOriginZoom(t){return(t-this.points.length)%32}map(t,e,r){if(t[e+5]>1){let a=this.clusterProps[t[e+6]];return r?Object.assign({},a):a}let i=this.points[t[e+3]].tags,n=this.options.map(i);return r&&n===i?Object.assign({},n):n}};function S2(t,e,r){return{id:t[e+3],type:"Point",tags:tu(t,e,r),geometry:[t[e],t[e+1]]}}function E2(t,e,r){return{type:"Feature",id:t[e+3],properties:tu(t,e,r),geometry:{type:"Point",coordinates:[wd(t[e]),Dd(t[e+1])]}}}function tu(t,e,r){let i=t[e+5],n=i>=1e4?`${Math.round(i/1e3)}k`:i>=1e3?`${Math.round(i/100)/10}k`:i,a=t[e+6],s=a===-1?{}:Object.assign({},r[a]);return Object.assign(s,{cluster:!0,cluster_id:t[e+3],point_count:i,point_count_abbreviated:n})}var Ed="geojsonvt_clip_start",Fd="geojsonvt_clip_end";function cc(t,e,r,i,n){let a=e===n.maxZoom?0:n.tolerance/((1<<e)*n.extent),s={transformed:!1,features:[],source:null,x:r,y:i,z:e,minX:2,minY:1,maxX:-1,maxY:0,numPoints:0,numSimplified:0,numFeatures:t.length};for(let o of t)F2(s,o,a,n);return s}function F2(t,e,r,i){switch(t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),e.type){case"Point":case"MultiPoint":k2(t,e);return;case"LineString":T2(t,e,r,i);return;case"MultiLineString":case"Polygon":I2(t,e,r);return;case"MultiPolygon":C2(t,e,r);return}}function k2(t,e){let r=[];for(let n=0;n<e.geometry.length;n+=3)r.push(e.geometry[n],e.geometry[n+1]),t.numPoints++,t.numSimplified++;if(!r.length)return;let i={type:1,tags:e.tags||null,geometry:r};e.id!==null&&(i.id=e.id),t.features.push(i)}function T2(t,e,r,i){let n=[];if(eu(n,e.geometry,t,r,!1,!1),!n.length)return;let a=e.tags||null;if(i.lineMetrics){a={};for(let o in e.tags)a[o]=e.tags[o];a[Ed]=e.geometry.start/e.geometry.size,a[Fd]=e.geometry.end/e.geometry.size}let s={type:2,tags:a,geometry:n};e.id!==null&&(s.id=e.id),t.features.push(s)}function I2(t,e,r){let i=[];for(let a=0;a<e.geometry.length;a++)eu(i,e.geometry[a],t,r,e.type==="Polygon",a===0);if(!i.length)return;let n={type:e.type==="Polygon"?3:2,tags:e.tags||null,geometry:i};e.id!==null&&(n.id=e.id),t.features.push(n)}function C2(t,e,r){let i=[];for(let a=0;a<e.geometry.length;a++){let s=e.geometry[a];for(let o=0;o<s.length;o++)eu(i,s[o],t,r,!0,o===0)}if(!i.length)return;let n={type:3,tags:e.tags||null,geometry:i};e.id!==null&&(n.id=e.id),t.features.push(n)}function eu(t,e,r,i,n,a){let s=i*i;if(i>0&&e.size<(n?s:i)){r.numPoints+=e.points.length/3;return}let o=[];for(let l=0;l<e.points.length;l+=3)(i===0||e.points[l+2]>s)&&(r.numSimplified++,o.push(e.points[l],e.points[l+1])),r.numPoints++;n&&M2(o,a),t.push(o)}function M2(t,e){let r=0;for(let i=0,n=t.length,a=n-2;i<n;a=i,i+=2)r+=(t[i]-t[a])*(t[i+1]+t[a+1]);if(r>0===e)for(let i=0,n=t.length;i<n/2;i+=2){let a=t[i],s=t[i+1];t[i]=t[n-2-i],t[i+1]=t[n-1-i],t[n-2-i]=a,t[n-1-i]=s}}function pc(t,e){if(t.transformed)return t;let r=1<<t.z,i=t.x,n=t.y;for(let a of t.features)a.type===1?B2(a,e,r,i,n):P2(a,e,r,i,n);return t.transformed=!0,t}function B2(t,e,r,i,n){let a=t,s=t.geometry,o=[];for(let l=0;l<s.length;l+=2)o.push(kd(s[l],s[l+1],e,r,i,n));return a.geometry=o,a}function P2(t,e,r,i,n){let a=t,s=t.geometry,o=[];for(let l of s){let u=[];for(let h=0;h<l.length;h+=2)u.push(kd(l[h],l[h+1],e,r,i,n));o.push(u)}return a.geometry=o,a}function kd(t,e,r,i,n,a){return[Math.round(r*(t*i-n)),Math.round(r*(e*i-a))]}var z2=class{constructor(t){this.options=t,this.total=0,this.stats={},this.tiles={},this.tileCoords=[],this.stats={},this.total=0}initialize(t){this.splitTile(t,0,0,0),this.options.debug&&(t.length&&console.log("features: %d, points: %d",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd("generate tiles"),console.log("tiles generated:",this.total,JSON.stringify(this.stats)))}updateIndex(t,e,r){r.debug>1&&(console.log("invalidating tiles"),console.time("invalidating")),this.invalidateTiles(e),r.debug>1&&console.timeEnd("invalidating");let[i,n,a]=[0,0,0],s=cc(t,i,n,a,r);s.source=t;let o=Jn(i,n,a);if(this.tiles[o]=s,this.tileCoords.push({z:i,x:n,y:a,id:o}),r.debug){let l=`z${i}`;this.stats[l]=(this.stats[l]||0)+1,this.total++}}getClusterExpansionZoom(t){return null}getChildren(t){return null}getLeaves(t,e,r){return null}getTile(t,e,r){let{extent:i,debug:n}=this.options,a=1<<t;e=e+a&a-1;let s=Jn(t,e,r);if(this.tiles[s])return pc(this.tiles[s],i);n>1&&console.log("drilling down to z%d-%d-%d",t,e,r);let o=t,l=e,u=r,h;for(;!h&&o>0;)o--,l>>=1,u>>=1,h=this.tiles[Jn(o,l,u)];return!(h!=null&&h.source)||(n>1&&(console.log("found parent tile z%d-%d-%d",o,l,u),console.time("drilling down")),this.splitTile(h.source,o,l,u,t,e,r),n>1&&console.timeEnd("drilling down"),!this.tiles[s])?null:pc(this.tiles[s],i)}splitTile(t,e,r,i,n,a,s){let o=[t,e,r,i],l=this.options,u=l.debug;for(;o.length;){i=o.pop(),r=o.pop(),e=o.pop(),t=o.pop();let h=1<<e,c=Jn(e,r,i),p=this.tiles[c];if(!p&&(u>1&&console.time("creation"),p=this.tiles[c]=cc(t,e,r,i,l),this.tileCoords.push({z:e,x:r,y:i,id:c}),u)){u>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,i,p.numFeatures,p.numPoints,p.numSimplified),console.timeEnd("creation"));let _=`z${e}`;this.stats[_]=(this.stats[_]||0)+1,this.total++}if(p.source=t,n==null){if(e===l.indexMaxZoom||p.numPoints<=l.indexMaxPoints)continue}else{if(e===l.maxZoom||e===n)continue;if(n!=null){let _=n-e;if(r!==a>>_||i!==s>>_)continue}}if(p.source=null,!t.length)continue;u>1&&console.time("clipping");let f=.5*l.buffer/l.extent,d=.5-f,y=.5+f,m=1+f,g=null,x=null,v=null,b=null,D=Te(t,h,r-f,r+y,0,p.minX,p.maxX,l),A=Te(t,h,r+d,r+m,0,p.minX,p.maxX,l);D&&(g=Te(D,h,i-f,i+y,1,p.minY,p.maxY,l),x=Te(D,h,i+d,i+m,1,p.minY,p.maxY,l)),A&&(v=Te(A,h,i-f,i+y,1,p.minY,p.maxY,l),b=Te(A,h,i+d,i+m,1,p.minY,p.maxY,l)),u>1&&console.timeEnd("clipping"),o.push(g||[],e+1,r*2,i*2),o.push(x||[],e+1,r*2,i*2+1),o.push(v||[],e+1,r*2+1,i*2),o.push(b||[],e+1,r*2+1,i*2+1)}}invalidateTiles(t){if(!t.length)return;let e=this.options,{debug:r}=e,i=1/0,n=-1/0,a=1/0,s=-1/0;for(let u of t)i=Math.min(i,u.minX),n=Math.max(n,u.maxX),a=Math.min(a,u.minY),s=Math.max(s,u.maxY);let o=e.buffer/e.extent,l=new Set;for(let u in this.tiles){let h=this.tiles[u],c=1<<h.z,p=(h.x-o)/c,f=(h.x+1+o)/c,d=(h.y-o)/c,y=(h.y+1+o)/c;if(n<p||i>=f||s<d||a>=y)continue;let m=!1;for(let g of t)if(g.maxX>=p&&g.minX<f&&g.maxY>=d&&g.minY<y){m=!0;break}if(m){if(r){r>1&&console.log("invalidate tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",h.z,h.x,h.y,h.numFeatures,h.numPoints,h.numSimplified);let g=`z${h.z}`;this.stats[g]=(this.stats[g]||0)-1,this.total--}delete this.tiles[u],l.add(u)}}l.size&&(this.tileCoords=this.tileCoords.filter(u=>!l.has(u.id)))}};function Jn(t,e,r){return((1<<t)*r+e)*32+t}var L2={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,updateable:!1,cluster:!1,clusterOptions:Ko,debug:0},Td=class{constructor(t,e){e=this.options=Object.assign({},L2,e);let r=e.debug;if(r&&console.time("preprocess data"),e.maxZoom<0||e.maxZoom>24)throw Error("maxZoom should be in the 0-24 range");if(e.promoteId&&e.generateId)throw Error("promoteId and generateId cannot be used together.");let i=Zl(t,e);r&&(console.timeEnd("preprocess data"),console.log("index: maxZoom: %d, maxPoints: %d",e.indexMaxZoom,e.indexMaxPoints),console.time("generate tiles")),i=Ql(i,e),e.updateable&&(this.source=i),this.initializeIndex(i,e)}initializeIndex(t,e){this.tileIndex=e.cluster?new A2(e.clusterOptions):new z2(e),t.length&&this.tileIndex.initialize(t)}getTile(t,e,r){return t=+t,e=+e,r=+r,t<0||t>24?null:this.tileIndex.getTile(t,e,r)}updateData(t,e){let r=this.options;if(!r.updateable)throw Error("to update tile geojson `updateable` option must be set to true");let{affected:i,source:n}=b2(this.source,t,r);e&&({affected:i,source:n}=this.filterUpdate(n,i,e)),i.length&&(this.source=n,this.tileIndex.updateIndex(n,i,r))}filterUpdate(t,e,r){let i=new Set;for(let n of t)n.id!=null&&(r(ka(n))||(e.push(n),i.add(n.id)));return t=t.filter(n=>!i.has(n.id)),{affected:e,source:t}}getData(){if(!this.options.updateable)throw Error("to retrieve data the `updateable` option must be set to true");return u2(this.source)}updateClusterOptions(t,e){let r=this.options.cluster;if(this.options.cluster=t,this.options.clusterOptions=e,r==t){this.tileIndex.updateIndex(this.source,[],this.options);return}this.initializeIndex(this.source,this.options)}getClusterExpansionZoom(t){return this.tileIndex.getClusterExpansionZoom(t)}getClusterChildren(t){return this.tileIndex.getChildren(t)}getClusterLeaves(t,e,r){return this.tileIndex.getLeaves(t,e,r)}},Jo=At([{name:"a_pos_normal",components:2,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}],4),V2=Jo.members;Jo.size,Jo.alignment;var Qo=At([{name:"a_uv_x",components:1,type:"Float32"},{name:"a_split_index",components:1,type:"Float32"}]),O2=Qo.members;Qo.size,Qo.alignment;var R2=Math.cos(75/2*(Math.PI/180)),Id=1/2,fc=2**14/Id,Cd=class{constructor(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(e=>e.id),this.index=t.index,this.hasDependencies=!1,this.patternFeatures=[],this.lineClipsArray=[],this.gradients={};for(let e of this.layers)this.gradients[e.id]={};this.layoutVertexArray=new Qm,this.layoutVertexArray2=new tg,this.indexArray=new wn,this.programConfigurations=new vr(t.layers,t.zoom),this.segments=new ee,this.maxLineLength=0,this.stateDependentLayerIds=this.layers.filter(e=>e.isStateDependent()).map(e=>e.id)}populate(t,e,r){this.hasDependencies=Aa("line",this.layers,e)||this.hasLineDasharray(this.layers);let i=this.layers[0].layout.get("line-sort-key"),n=!i.isConstant(),a=[],s=new st(this.zoom),o=this.layers[0]._featureFilter.needGeometry;for(let{feature:l,id:u,index:h,sourceLayerIndex:c}of t){let p=hi(l,o);if(!this.layers[0]._featureFilter.filter(s,p,r))continue;let f=n?i.evaluate(p,{},r):void 0,d={id:u,properties:l.properties,type:l.type,sourceLayerIndex:c,index:h,geometry:o?p.geometry:Ar(l),patterns:{},dashes:{},sortKey:f};a.push(d)}n&&a.sort((l,u)=>l.sortKey-u.sortKey);for(let l of a){let{geometry:u,index:h,sourceLayerIndex:c}=l;this.hasDependencies?(Aa("line",this.layers,e)?Gl("line",this.layers,l,{zoom:this.zoom},e):this.hasLineDasharray(this.layers)&&this.addLineDashDependencies(this.layers,l,this.zoom,e),this.patternFeatures.push(l)):this.addFeature(l,u,h,r,{},{},e.subdivisionGranularity);let p=t[h].feature;e.featureIndex.insert(p,u,h,c,this.index)}}update(t,e,r,i){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,{imagePositions:r,dashPositions:i})}addFeatures({options:t,canonical:e,patternPositions:r,dashPositions:i}){for(let n of this.patternFeatures)this.addFeature(n,n.geometry,n.index,e,r,i,t.subdivisionGranularity)}isEmpty(){return this.layoutVertexArray.length===0}uploadPending(){return!this.uploaded||this.programConfigurations.needsUpload}upload(t){this.uploaded||(this.layoutVertexArray2.length!==0&&(this.layoutVertexBuffer2=t.createVertexBuffer(this.layoutVertexArray2,O2)),this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,V2),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())}lineFeatureClips(t){if(t.properties&&Object.hasOwn(t.properties,"geojsonvt_clip_start")&&Object.hasOwn(t.properties,"geojsonvt_clip_end"))return{start:+t.properties[Ed],end:+t.properties[Fd]}}addFeature(t,e,r,i,n,a,s){let o=this.layers[0].layout,l=o.get("line-join").evaluate(t,{}),u=o.get("line-cap").evaluate(t,{}),h=o.get("line-miter-limit").evaluate(t,{}),c=o.get("line-round-limit").evaluate(t,{});this.lineClips=this.lineFeatureClips(t);for(let p of e)this.addLine(p,t,l,u,h,c,i,s);this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{imagePositions:n,dashPositions:a,canonical:i})}addLine(t,e,r,i,n,a,s,o){this.distance=0,this.scaledDistance=0,this.totalDistance=0;let l=s?o.line.getGranularityForZoomLevel(s.z):1;if(t=cr(t,l),this.lineClips){this.lineClipsArray.push(this.lineClips);for(let v=0;v<t.length-1;v++)this.totalDistance+=t[v].dist(t[v+1]);this.updateScaledDistance(),this.maxLineLength=Math.max(this.maxLineLength,this.totalDistance)}let u=Dn.types[e.type]==="Polygon",h=t.length;for(;h>=2&&t[h-1].equals(t[h-2]);)h--;let c=0;for(;c<h-1&&t[c].equals(t[c+1]);)c++;if(h-c<(u?3:2))return;r==="bevel"&&(n=1.05);let p=this.overscaling<=16?15*mt/(512*this.overscaling):0,f=this.segments.prepareSegment(h*10,this.layoutVertexArray,this.indexArray),d,y,m,g,x;this.e1=this.e2=-1,u&&(d=t[h-2],x=t[c].sub(d)._unit()._perp());for(let v=c;v<h;v++){if(m=v===h-1?u?t[c+1]:void 0:t[v+1],m&&t[v].equals(m))continue;x&&(g=x),d&&(y=d),d=t[v],x=m?m.sub(d)._unit()._perp():g,g||(g=x);let b=g.add(x);(b.x!==0||b.y!==0)&&b._unit();let D=g.x*x.x+g.y*x.y,A=b.x*x.x+b.y*x.y,_=A===0?1/0:1/A,S=2*Math.sqrt(2-2*A),k=A<R2&&y&&m,z=g.x*x.y-g.y*x.x>0;if(k&&v>c){let L=d.dist(y);if(L>2*p){let F=d.sub(d.sub(y)._mult(p/L)._round());this.updateDistance(y,F),this.addCurrentVertex(F,g,0,0,f),y=F}}let O=y&&m,P=O?r:u?"butt":i;if(O&&P==="round"&&(_<a?P="miter":_<=2&&(P="fakeround")),P==="miter"&&_>n&&(P="bevel"),P==="bevel"&&(_>2&&(P="flipbevel"),_<n&&(P="miter")),y&&this.updateDistance(y,d),P==="miter")b._mult(_),this.addCurrentVertex(d,b,0,0,f);else if(P==="flipbevel"){if(_>100)b=x.mult(-1);else{let L=_*g.add(x).mag()/g.sub(x).mag();b._perp()._mult(L*(z?-1:1))}this.addCurrentVertex(d,b,0,0,f),this.addCurrentVertex(d,b.mult(-1),0,0,f)}else if(P==="bevel"||P==="fakeround"){let L=-Math.sqrt(_*_-1),F=z?L:0,$=z?0:L;if(y&&this.addCurrentVertex(d,g,F,$,f),P==="fakeround"){let U=Math.round(S*180/Math.PI/20);for(let T=1;T<U;T++){let q=T/U;if(q!==.5){let ot=q-.5,pt=1.0904+D*(-3.2452+D*(3.55645-D*1.43519)),Et=.848013+D*(-1.06021+D*.215638);q+=q*ot*(q-1)*(pt*ot*ot+Et)}let at=x.sub(g)._mult(q)._add(g)._unit()._mult(z?-1:1);this.addHalfVertex(d,at.x,at.y,!1,z,0,f)}}m&&this.addCurrentVertex(d,x,-F,-$,f)}else if(P==="butt")this.addCurrentVertex(d,b,0,0,f);else if(P==="square"){let L=y?1:-1;this.addCurrentVertex(d,b,L,L,f)}else P==="round"&&(y&&(this.addCurrentVertex(d,g,0,0,f),this.addCurrentVertex(d,g,1,1,f,!0)),m&&(this.addCurrentVertex(d,x,-1,-1,f,!0),this.addCurrentVertex(d,x,0,0,f)));if(k&&v<h-1){let L=d.dist(m);if(L>2*p){let F=d.add(m.sub(d)._mult(p/L)._round());this.updateDistance(d,F),this.addCurrentVertex(F,x,0,0,f),d=F}}}}addCurrentVertex(t,e,r,i,n,a=!1){let s=e.x+e.y*r,o=e.y-e.x*r,l=-e.x+e.y*i,u=-e.y-e.x*i;this.addHalfVertex(t,s,o,a,!1,r,n),this.addHalfVertex(t,l,u,a,!0,-i,n),this.distance>fc/2&&this.totalDistance===0&&(this.distance=0,this.updateScaledDistance(),this.addCurrentVertex(t,e,r,i,n,a))}addHalfVertex({x:t,y:e},r,i,n,a,s,o){let l=(this.lineClips?this.scaledDistance*(fc-1):this.scaledDistance)*Id;if(this.layoutVertexArray.emplaceBack((t<<1)+ +!!n,(e<<1)+ +!!a,Math.round(63*r)+128,Math.round(63*i)+128,(s===0?0:s<0?-1:1)+1|(l&63)<<2,l>>6),this.lineClips){let h=(this.scaledDistance-this.lineClips.start)/(this.lineClips.end-this.lineClips.start);this.layoutVertexArray2.emplaceBack(h,this.lineClipsArray.length)}let u=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,u,this.e2),o.primitiveLength++),a?this.e2=u:this.e1=u}updateScaledDistance(){this.scaledDistance=this.lineClips?this.lineClips.start+(this.lineClips.end-this.lineClips.start)*this.distance/this.totalDistance:this.distance}updateDistance(t,e){this.distance+=t.dist(e),this.updateScaledDistance()}hasLineDasharray(t){for(let e of t){let r=e.paint.get("line-dasharray");if(r&&!r.isConstant())return!0}return!1}addLineDashDependencies(t,e,r,i){for(let n of t){let a=n.paint.get("line-dasharray");if(!a||a.value.kind==="constant")continue;let s=n.layout.get("line-cap").evaluate(e,{})==="round",o={dasharray:a.value.evaluate({zoom:r-1},e,{}),round:s},l={dasharray:a.value.evaluate({zoom:r},e,{}),round:s},u={dasharray:a.value.evaluate({zoom:r+1},e,{}),round:s},h=`${o.dasharray.join(",")},${o.round}`,c=`${l.dasharray.join(",")},${l.round}`,p=`${u.dasharray.join(",")},${u.round}`;i.dashDependencies[h]=o,i.dashDependencies[c]=l,i.dashDependencies[p]=u,e.dashes[n.id]={min:h,mid:c,max:p}}}};C("LineBucket",Cd,{omit:["layers","patternFeatures"]});var $2,N2=()=>$2||($2=new Xt({"line-cap":new N(w.layout_line["line-cap"],"line-cap"),"line-join":new N(w.layout_line["line-join"],"line-join"),"line-miter-limit":new N(w.layout_line["line-miter-limit"],"line-miter-limit"),"line-round-limit":new N(w.layout_line["line-round-limit"],"line-round-limit"),"line-sort-key":new N(w.layout_line["line-sort-key"],"line-sort-key")})),U2,q2=()=>U2||(U2=new Xt({"line-opacity":new N(w.paint_line["line-opacity"],"line-opacity"),"line-layer-opacity":new V(w.paint_line["line-layer-opacity"],"line-layer-opacity"),"line-color":new N(w.paint_line["line-color"],"line-color"),"line-translate":new V(w.paint_line["line-translate"],"line-translate"),"line-translate-anchor":new V(w.paint_line["line-translate-anchor"],"line-translate-anchor"),"line-width":new N(w.paint_line["line-width"],"line-width"),"line-gap-width":new N(w.paint_line["line-gap-width"],"line-gap-width"),"line-offset":new N(w.paint_line["line-offset"],"line-offset"),"line-blur":new N(w.paint_line["line-blur"],"line-blur"),"line-dasharray":new on(w.paint_line["line-dasharray"],"line-dasharray"),"line-pattern":new on(w.paint_line["line-pattern"],"line-pattern"),"line-gradient":new Wa(w.paint_line["line-gradient"],"line-gradient")})),dc={get paint(){return q2()},get layout(){return N2()}},j2=class extends N{possiblyEvaluate(t,e){return e=new st(Math.floor(e.zoom),{now:e.now,fadeDuration:e.fadeDuration,zoomHistory:e.zoomHistory,transition:e.transition}),super.possiblyEvaluate(t,e)}evaluate(t,e,r,i){return e=Gt({},e,{zoom:Math.floor(e.zoom)}),super.evaluate(t,e,r,i)}},Qn;var G2=class extends de{constructor(t,e){super(t,dc,e),this.gradientVersion=0,Qn||(Qn=new j2(dc.paint.properties["line-width"].specification,"line-floorwidth"),Qn.useIntegerZoom=!0)}_handleSpecialPaintPropertyUpdate(t){if(t==="line-gradient"){let e=this.gradientExpression();this.stepInterpolant=lm(e)?e._styleExpression.expression instanceof vl:!1,this.gradientVersion=(this.gradientVersion+1)%(2**53-1)}}gradientExpression(){return this._transitionablePaint._values["line-gradient"].value.expression}recalculate(t,e){super.recalculate(t,e),this.paint._values["line-floorwidth"]=Qn.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,t)}createBucket(t){return new Cd(t)}queryRadius(t){let e=t,r=yc(Wr("line-width",this,e),Wr("line-gap-width",this,e)),i=Wr("line-offset",this,e);return r/2+Math.abs(i)+Ha(this.paint.get("line-translate"))}queryIntersectsFeature({queryGeometry:t,feature:e,featureState:r,geometry:i,transform:n,pixelsToTileUnits:a}){let s=Ka(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),-n.bearingInRadians,a),o=a/2*yc(this.paint.get("line-width").evaluate(e,r),this.paint.get("line-gap-width").evaluate(e,r)),l=this.paint.get("line-offset").evaluate(e,r);return l&&(i=Dg(i,l*a)),mg(s,i,o)}isTileClipped(){return!0}};function yc(t,e){return e>0?e+2*t:t}var X2=At([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"},{name:"a_pixeloffset",components:4,type:"Int16"},{name:"a_height_offset",components:1,type:"Float32"}],4),Y2=At([{name:"a_projected_pos",components:3,type:"Float32"}],4);At([{name:"a_fade_opacity",components:1,type:"Uint32"}],4);var W2=At([{name:"a_placed",components:2,type:"Uint8"},{name:"a_shift",components:2,type:"Float32"},{name:"a_box_real",components:2,type:"Int16"}]);At([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"}]);var mc=At([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4),x5=At([{name:"a_pos",components:2,type:"Float32"},{name:"a_radius",components:1,type:"Float32"},{name:"a_flags",components:2,type:"Int16"}],4);At([{name:"triangle",components:3,type:"Uint16"}]),At([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"placedOrientation"},{type:"Uint8",name:"hidden"},{type:"Uint32",name:"crossTileID"},{type:"Int16",name:"associatedIconIndex"},{type:"Float32",name:"heightOffset"}]),At([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"rightJustifiedTextSymbolIndex"},{type:"Int16",name:"centerJustifiedTextSymbolIndex"},{type:"Int16",name:"leftJustifiedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Int16",name:"placedIconSymbolIndex"},{type:"Int16",name:"verticalPlacedIconSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"verticalTextBoxStartIndex"},{type:"Uint16",name:"verticalTextBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"verticalIconBoxStartIndex"},{type:"Uint16",name:"verticalIconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numHorizontalGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint16",name:"numVerticalIconVertices"},{type:"Uint16",name:"useRuntimeCollisionCircles"},{type:"Uint32",name:"crossTileID"},{type:"Float32",name:"textBoxScale"},{type:"Float32",name:"collisionCircleDiameter"},{type:"Uint16",name:"textAnchorOffsetStartIndex"},{type:"Uint16",name:"textAnchorOffsetEndIndex"},{type:"Float32",name:"heightOffset"}]),At([{type:"Float32",name:"offsetX"}]),At([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]),At([{type:"Uint16",name:"textAnchor"},{type:"Float32",components:2,name:"textOffset"}]);var wr=new class{constructor(){this.TIMEOUT=5e3,this.applyArabicShaping=null,this.processBidirectionalText=null,this.processStyledBidirectionalText=null,this.pluginStatus="unavailable",this.pluginURL=null,this.loadScriptResolve=()=>{}}setState(t){this.pluginStatus=t.pluginStatus,this.pluginURL=t.pluginURL}getState(){return{pluginStatus:this.pluginStatus,pluginURL:this.pluginURL}}setMethods(t){if(wr.isParsed())throw Error("RTL text plugin already registered.");this.applyArabicShaping=t.applyArabicShaping,this.processBidirectionalText=t.processBidirectionalText,this.processStyledBidirectionalText=t.processStyledBidirectionalText,this.loadScriptResolve()}isParsed(){return this.applyArabicShaping!=null&&this.processBidirectionalText!=null&&this.processStyledBidirectionalText!=null}getRTLTextPluginStatus(){return this.pluginStatus}syncState(t,e){return rt(this,null,function*(){if(this.isParsed())return this.getState();if(t.pluginStatus!=="loading")return this.setState(t),t;let r=t.pluginURL,i=new Promise(a=>{this.loadScriptResolve=a}),n=new Promise(a=>setTimeout(()=>a(),this.TIMEOUT));if(yield e(r),yield Promise.race([i,n]),this.isParsed()){let a={pluginStatus:"loaded",pluginURL:r};return this.setState(a),a}throw this.setState({pluginStatus:"error",pluginURL:""}),Error(`RTL Text Plugin failed to import scripts from ${r}`)})}};function Z2(t){return/[\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061C-\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u070D\\u070F-\\u074A\\u074D-\\u077F\\u07C0-\\u07FA\\u07FD-\\u07FF\\u0840-\\u085B\\u085E\\u0860-\\u086A\\u0870-\\u0891\\u0897-\\u08E1\\u08E3-\\u08FF\\u1800\\u1801\\u1804\\u1806-\\u1819\\u1820-\\u1878\\u1880-\\u18AA\\uA840-\\uA877\\uFB50-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFDFF\\uFE70-\\uFE74\\uFE76-\\uFEFC]|\\uD802[\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6\\uDF80-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]|\\uD803[\\uDD00-\\uDD27\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDEC2-\\uDEC7\\uDED0-\\uDED8\\uDEFA-\\uDEFF\\uDF30-\\uDF59\\uDF70-\\uDF89\\uDFB0-\\uDFCB]|\\uD805[\\uDE60-\\uDE6C]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9C-\\uDC9F]|\\uD83A[\\uDD00-\\uDD4B\\uDD50-\\uDD59\\uDD5E\\uDD5F]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB\\uDEF0\\uDEF1]/gim.test(String.fromCodePoint(t))}function H2(t){return/[\\u0591-\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F4\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061C-\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u070D\\u070F-\\u074A\\u074D-\\u07B1\\u07C0-\\u07FA\\u07FD-\\u082D\\u0830-\\u083E\\u0840-\\u085B\\u085E\\u0860-\\u086A\\u0870-\\u0891\\u0897-\\u08E1\\u08E3-\\u08FF\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFDFF\\uFE70-\\uFE74\\uFE76-\\uFEFC]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC57-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD1F-\\uDD39\\uDD3F-\\uDD59\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE38-\\uDE3A\\uDE3F-\\uDE48\\uDE50-\\uDE58\\uDE60-\\uDE9F\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6\\uDF00-\\uDF35\\uDF39-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD27\\uDD30-\\uDD39\\uDD40-\\uDD65\\uDD69-\\uDD85\\uDD8E\\uDD8F\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEAB-\\uDEAD\\uDEB0\\uDEB1\\uDEC2-\\uDEC7\\uDED0-\\uDED8\\uDEFA-\\uDF27\\uDF30-\\uDF59\\uDF70-\\uDF89\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCD6\\uDD00-\\uDD4B\\uDD50-\\uDD59\\uDD5E\\uDD5F]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB\\uDEF0\\uDEF1]/gim.test(String.fromCodePoint(t))}function K2(t){return/[\\u02EA\\u02EB\\u2E80-\\u2FDF\\u2FF0-\\u303F\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FD-\\u30FF\\u3105-\\u312F\\u31A0-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFE10-\\uFE1F\\uFE30-\\uFE4F\\uFF00-\\uFFEF]|\\uD81B[\\uDFE0-\\uDFFF]|[\\uD81C-\\uD822\\uD840-\\uD868\\uD86A-\\uD86D\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883\\uD885-\\uD88C][\\uDC00-\\uDFFF]|\\uD823[\\uDC00-\\uDCD5\\uDCFF-\\uDD1E\\uDD80-\\uDDF2]|\\uD82B[\\uDFF0-\\uDFFF]|\\uD82C[\\uDC00-\\uDEFB]|\\uD83C[\\uDE00-\\uDEFF]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEAD\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0\\uDFF0-\\uDFFF]|\\uD87B[\\uDC00-\\uDE5D]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A\\uDF50-\\uDFFF]|\\uD88D[\\uDC00-\\uDC79]/gim.test(String.fromCodePoint(t))}function Qa(t){return/[\\u02EA\\u02EB\\u1100-\\u11FF\\u1401-\\u167F\\u18B0-\\u18FF\\u2065\\u20DD-\\u20E0\\u20E2-\\u20E4\\u2B97\\u2BF0-\\u2BFF\\u2E50\\u2E51\\u2E80-\\u3007\\u3012\\u3013\\u3020-\\u302F\\u3031-\\u30FB\\u30FD-\\uA4CF\\uA960-\\uA97F\\uAC00-\\uD7FF\\uF900-\\uFAFF\\uFE10-\\uFE1F\\uFE30-\\uFE48\\uFE50-\\uFE57\\uFE5F-\\uFE62\\uFE67-\\uFE6F\\uFF00-\\uFF07\\uFF0A-\\uFF0C\\uFF0E-\\uFF19\\uFF1F-\\uFF3A\\uFF3C\\uFF3E\\uFF40-\\uFF5A\\uFFE0-\\uFFE2\\uFFE4-\\uFFE7\\uFFF0-\\uFFF8]|\\uD802[\\uDD80-\\uDD9F]|\\uD805[\\uDD80-\\uDDFF]|\\uD806[\\uDE00-\\uDEBF]|[\\uD80C-\\uD810\\uD81C-\\uD822\\uD83C\\uD83D\\uD840-\\uD87E\\uD880-\\uD8BE][\\uDC00-\\uDFFF]|\\uD811[\\uDC00-\\uDE7F]|\\uD81B[\\uDFE0-\\uDFFF]|\\uD823[\\uDC00-\\uDDFF]|\\uD82B[\\uDFF0-\\uDFFF]|\\uD82C[\\uDC00-\\uDEFF]|\\uD833[\\uDEC0-\\uDFCF]|\\uD834[\\uDC00-\\uDDFF\\uDEE0-\\uDF7F]|\\uD836[\\uDC00-\\uDEAF]|\\uD83E[\\uDD00-\\uDEFF]|[\\uD87F\\uD8BF][\\uDC00-\\uDFFD]/gim.test(String.fromCodePoint(t))}function J2(t){return/[\\xA7\\xA9\\xAE\\xB1\\xBC-\\xBE\\xD7\\xF7\\u2016\\u2020\\u2021\\u2030\\u2031\\u203B\\u203C\\u2042\\u2047-\\u2049\\u2051\\u2100-\\u218F\\u221E\\u2234\\u2235\\u2300-\\u2307\\u230C-\\u231F\\u2324-\\u2328\\u232B\\u237D-\\u239A\\u23BE-\\u23CD\\u23CF\\u23D1-\\u23DB\\u23E2-\\u2422\\u2424-\\u24FF\\u25A0-\\u2619\\u2620-\\u2767\\u2776-\\u2793\\u2B12-\\u2B2F\\u2B50-\\u2B59\\u2BB8-\\u2BEB\\u3000-\\u303F\\u30A0-\\u30FF\\uE000-\\uF8FF\\uFE30-\\uFE6F\\uFF00-\\uFFEF\\uFFFC\\uFFFD]|[\\uDB80-\\uDBFF][\\uDC00-\\uDFFF]/gim.test(String.fromCodePoint(t))}function Q2(t){return/[\\r\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0600-\\u0605\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DD\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u070F\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0890\\u0891\\u0897-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E33-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB3-\\u0EBC\\u0EC8-\\u0ECE\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1037\\u1039-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1084-\\u1086\\u108D\\u109D\\u1100-\\u11FF\\u135D-\\u135F\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A7C\\u1A7F\\u1AB0-\\u1ADD\\u1AE0-\\u1AEB\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA960-\\uA97C\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFF9E\\uFF9F]|\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDD69-\\uDD6D\\uDEAB\\uDEAC\\uDEFA-\\uDEFF\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCBD\\uDCC2\\uDCCD\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC2\\uDDC3\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDE41\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74\\uDFB8-\\uDFC0\\uDFC2\\uDFC5\\uDFC7-\\uDFCA\\uDFCC-\\uDFD2\\uDFE1\\uDFE2]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE84-\\uDE99\\uDF60-\\uDF67]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6\\uDF00-\\uDF03\\uDF34-\\uDF3A\\uDF3E-\\uDF42\\uDF5A]|\\uD80D[\\uDC40\\uDC47-\\uDC55]|\\uD818[\\uDD1E-\\uDD2F]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDD63\\uDD67-\\uDD6A\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDC8F\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD839[\\uDCEC-\\uDCEF\\uDDEE\\uDDEF\\uDEE3\\uDEE6\\uDEEE\\uDEEF\\uDEF5]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uD83C[\\uDDE6-\\uDDFF\\uDFFB-\\uDFFF]|\\uDB40[\\uDC20-\\uDC7F\\uDD00-\\uDDEF]/.test(t)}function gc(t){return/[\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECE\\u0EDC-\\u0EDF\\u0F00-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F97\\u0F99-\\u0FBC\\u0FBE-\\u0FCC\\u0FCE-\\u0FD4\\u0FD9\\u0FDA\\u1000-\\u103F\\u1050-\\u108F\\u109A-\\u109F\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19DE\\u19DF\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1AA0-\\u1AAD\\u1B00-\\u1B4C\\u1B4E-\\u1B7F\\uA980-\\uA9CD\\uA9D0-\\uA9D9\\uA9DE-\\uA9EF\\uA9FA-\\uA9FE\\uAA60-\\uAAC2\\uAADB-\\uAADF]|\\uD805[\\uDF00-\\uDF1A\\uDF1D-\\uDF2B\\uDF3A\\uDF3B\\uDF3F-\\uDF46]/gim.test(String.fromCodePoint(t))}function tv(t,e){return/(?:[\\u1039\\u17D2\\u1A60\\u1BAB\\u200D\\uAAF6]|\\uD802\\uDE3F|\\uD804[\\uDD33\\uDFD0]|\\uD806[\\uDD3E\\uDE47\\uDE99]|\\uD807[\\uDD45\\uDD97\\uDF42])$/.test(t)||new RegExp("^\\\\p{gc=Mc}","u").test(e)}var ev={C:"18g,1;g2,3;4nb,1",D:"17k,1;5,1;1,1;1,5;4,d;1,7;1,2;z,2;8,g;i,12;1,2;9,1;1,1;1,2;14,3;2,1;28,9;3,f;2,4;1,1;2,3;2,6;7a,1;2,5;1,1;g,a;5,2;2,6;1,f",R:"17m,4;1,1;1,1;5,4;l,1;14,3;1,3;g,i;12,1;2,9;1,1;1,1;2,2;1,1;o,2;2x,3;f,2;4,1;1,2;3,2;6u,j;b,1;r,3;1,1;2,2;6,1",T:"174,b;1,1;1a,l;g,1;2t,7;2,6;2,2;1,4;bt,9;16,o;1,t;1clb,1"},rv={1569:[65152,0,0,0],1570:[65153,65154,0,0],1571:[65155,65156,0,0],1572:[65157,65158,0,0],1573:[65159,65160,0,0],1574:[65161,65162,65163,65164],1575:[65165,65166,0,0],1576:[65167,65168,65169,65170],1577:[65171,65172,0,0],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194,0,0],1584:[65195,65196,0,0],1585:[65197,65198,0,0],1586:[65199,65200,0,0],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262,0,0],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1611:[65136,0,0,65137],1612:[65138,0,0,0],1613:[65140,0,0,0],1614:[65142,0,0,65143],1615:[65144,0,0,65145],1616:[65146,0,0,65147],1617:[65148,0,0,65149],1618:[65150,0,0,65151],1649:[64336,64337,0,0],1655:[64477,0,0,0],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393,0,0],1676:[64388,64389,0,0],1677:[64386,64387,0,0],1678:[64390,64391,0,0],1681:[64396,64397,0,0],1688:[64394,64395,0,0],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415,0,0],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421,0,0],1729:[64422,64423,64424,64425],1733:[64480,64481,0,0],1734:[64473,64474,0,0],1735:[64471,64472,0,0],1736:[64475,64476,0,0],1737:[64482,64483,0,0],1739:[64478,64479,0,0],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431,0,0],1747:[64432,64433,0,0]},iv={\\u0644\\u0622:[65269,65270],\\u0644\\u0623:[65271,65272],\\u0644\\u0625:[65273,65274],\\u0644\\u0627:[65275,65276]},xc=1604,nv=/[\\u0600-\\u06ff\\u0750-\\u077f\\u0870-\\u089f\\u08a0-\\u08ff\\ufb50-\\ufdff\\ufe70-\\ufeff]/;function av(t,e,r){let i=0;for(let n of t.split(";")){let[a,s]=n.split(",").map(l=>parseInt(l,36)),o=i+a;for(let l=o;l<o+s;l++)r.set(l,e);i=o+s}}var Md=new Map;for(let[t,e]of Object.entries(ev))av(e,t,Md);function sv(t){var e;return(e=Md.get(t))!=null?e:"U"}function ov(t){return t==="D"||t==="L"||t==="C"}function lv(t){return t==="D"||t==="R"||t==="C"}function uv(t,e,r){return t==="D"?e&&r?3:e?1:r?2:0:t==="R"?+!!e:t==="L"?r?2:0:null}function hv(t){return[...t].map(e=>{let r=e.codePointAt(0);return{codePoint:r,type:sv(r),form:null}})}function cv(t){let e=t.filter(r=>r.type!=="T");for(let r=0;r<e.length;r++){let i=e[r],n=r>0&&ov(e[r-1].type),a=r+1<e.length&&lv(e[r+1].type);i.form=uv(i.type,n,a)}}function pv(t){let e=!1;for(let r of t)r.type==="T"?r.form=e?3:0:e=r.form===2||r.form===3}function fv(t){let e=[];for(let r=0;r<t.length;r++){let i=t[r];if(i.codePoint!==xc){e.push(i);continue}let n=r+1;for(;n<t.length&&t[n].type==="T";)n++;let a=t[n],s=a&&iv[String.fromCodePoint(xc,a.codePoint)];if(!s){e.push(i);continue}let o=i.form===3||i.form===1;e.push({codePoint:s[+!!o],type:"R",form:0}),e.push(...t.slice(r+1,n)),r=n}return e}function dv(t){if(t.form===null)return t.codePoint;let e=rv[t.codePoint];return e&&(e[t.form]||e[0])||t.codePoint}function yv(t){if(!nv.test(t))return t;let e=hv(t);return cv(e),pv(e),fv(e).map(r=>String.fromCodePoint(dv(r))).join("")}function mv(t,e,r){var n;let i=e.layout.get("text-transform").evaluate(r,{});return i==="uppercase"?t=t.toLocaleUpperCase():i==="lowercase"&&(t=t.toLocaleLowerCase()),((n=wr.applyArabicShaping)!=null?n:yv)(t)}function gv(t,e,r){for(let i of t.sections)i.text=mv(i.text,e,r);return t}function xv(t){let e={},r={},i=[],n=0;function a(u){i.push(t[u]),n++}function s(u,h,c){let p=r[u];return delete r[u],r[h]=p,i[p].geometry[0].pop(),i[p].geometry[0]=i[p].geometry[0].concat(c[0]),p}function o(u,h,c){let p=e[h];return delete e[h],e[u]=p,i[p].geometry[0].shift(),i[p].geometry[0]=c[0].concat(i[p].geometry[0]),p}function l(u,h,c){let p=c?h[0][h[0].length-1]:h[0][0];return`${u}:${p.x}:${p.y}`}for(let u=0;u<t.length;u++){let h=t[u],c=h.geometry,p=h.text?h.text.toString():null;if(!p){a(u);continue}let f=l(p,c),d=l(p,c,!0);if(f in r&&d in e&&r[f]!==e[d]){let y=o(f,d,c),m=s(f,d,i[y].geometry);delete e[f],delete r[d],r[l(p,i[m].geometry,!0)]=m,i[y].geometry=null}else f in r?s(f,d,c):d in e?o(f,d,c):(a(u),e[f]=n-1,r[d]=n-1)}return i.filter(u=>u.geometry)}var Bd=typeof Intl<"u"&&"Segmenter"in Intl,ta,ea;function tl(t){if(!Bd||!Q2(t))return[...t];ta!=null||(ta=new Intl.Segmenter(void 0,{granularity:"grapheme"}));let e=[];for(let{segment:r}of ta.segment(t)){let i=e.length-1;i>=0&&tv(e[i],r)?e[i]+=r:e.push(r)}return e}function vv(t){let e=new Set;if(Bd){ea!=null||(ea=new Intl.Segmenter(void 0,{granularity:"word"}));for(let{index:i}of ea.segment(t))e.add(i);return e}let r=0;for(let i of t.split(new RegExp("\\\\b|(?=\\\\p{Ideo})","u")))e.add(r),r+=i.length;return e}function Pd(t){let e=t.codePointAt(0);return t.length>(e>65535?2:1)}function ru(t){return/\\s/u.test(String.fromCodePoint(t))}function el(t){for(let e of t)if(Qa(e.codePointAt(0)))return!0;return!1}function bv(t){for(let e of t)if(!wv(e.codePointAt(0)))return!1;return!0}function wv(t){return!Z2(t)}function vc(t){return!(Qa(t)||J2(t))}function zd(t){return new RegExp("\\\\p{sc=Arab}","u").test(String.fromCodePoint(t))}function Ld(t){return H2(t)}function Vd(t){for(let e of t)if(Ld(e.codePointAt(0)))return!0;return!1}var Gr={"!":"\\uFE15","#":"\\uFF03",$:"\\uFF04","%":"\\uFF05","&":"\\uFF06","(":"\\uFE35",")":"\\uFE36","*":"\\uFF0A","+":"\\uFF0B",",":"\\uFE10","-":"\\uFE32",".":"\\u30FB","/":"\\uFF0F",":":"\\uFE13",";":"\\uFE14","<":"\\uFE3F","=":"\\uFF1D",">":"\\uFE40","?":"\\uFE16","@":"\\uFF20","[":"\\uFE47","\\\\":"\\uFF3C","]":"\\uFE48","^":"\\uFF3E",_:"\\uFE33","`":"\\uFF40","{":"\\uFE37","|":"\\u2015","}":"\\uFE38","~":"\\uFF5E","\\xA2":"\\uFFE0","\\xA3":"\\uFFE1","\\xA5":"\\uFFE5","\\xA6":"\\uFFE4","\\xAC":"\\uFFE2","\\xAF":"\\uFFE3","\\u2013":"\\uFE32","\\u2014":"\\uFE31","\\u2018":"\\uFE43","\\u2019":"\\uFE44","\\u201C":"\\uFE41","\\u201D":"\\uFE42","\\u2026":"\\uFE19","\\u22EF":"\\uFE19","\\u2027":"\\u30FB","\\u20A9":"\\uFFE6","\\u3001":"\\uFE11","\\u3002":"\\uFE12","\\u3008":"\\uFE3F","\\u3009":"\\uFE40","\\u300A":"\\uFE3D","\\u300B":"\\uFE3E","\\u300C":"\\uFE41","\\u300D":"\\uFE42","\\u300E":"\\uFE43","\\u300F":"\\uFE44","\\u3010":"\\uFE3B","\\u3011":"\\uFE3C","\\u3014":"\\uFE39","\\u3015":"\\uFE3A","\\u3016":"\\uFE17","\\u3017":"\\uFE18","\\uFF01":"\\uFE15","\\uFF08":"\\uFE35","\\uFF09":"\\uFE36","\\uFF0C":"\\uFE10","\\uFF0D":"\\uFE32","\\uFF0E":"\\u30FB","\\uFF1A":"\\uFE13","\\uFF1B":"\\uFE14","\\uFF1C":"\\uFE3F","\\uFF1E":"\\uFE40","\\uFF1F":"\\uFE16","\\uFF3B":"\\uFE47","\\uFF3D":"\\uFE48","\\uFF3F":"\\uFE33","\\uFF5B":"\\uFE37","\\uFF5C":"\\u2015","\\uFF5D":"\\uFE38","\\uFF5F":"\\uFE35","\\uFF60":"\\uFE36","\\uFF61":"\\uFE12","\\uFF62":"\\uFE41","\\uFF63":"\\uFE42"};function Dv(t){let e="",r={premature:!0,value:void 0},i=t[Symbol.iterator](),n=i.next(),a=t[Symbol.iterator]();a.next();let s=a.next();for(;!n.done;)(s.done||!vc(s.value.codePointAt(0))||Gr[s.value])&&(r.premature||!vc(r.value.codePointAt(0))||Gr[r.value])&&Gr[n.value]?e+=Gr[n.value]:e+=n.value,r={value:n.value,premature:!1},n=i.next(),s=a.next();return e}var _v={10:!0,13:!0,32:!0,38:!0,41:!0,43:!0,45:!0,47:!0,173:!0,183:!0,8203:!0,8208:!0,8211:!0,8231:!0},Av={40:!0};function bc(t,e,r,i,n,a){if("fontStack"in e){let s=r[e.fontStack],o=s==null?void 0:s[t];if(o)return o.metrics.advance*e.scale+n;let l=0;for(let u of t){let h=s==null?void 0:s[u];h&&(l+=h.metrics.advance*e.scale+n)}return l}{let s=i[e.imageName];return s?s.displaySize[0]*e.scale*24/a+n:0}}function wc(t,e,r,i){let n=(t-e)**2;return i?t<e?n/2:n*2:n+Math.abs(r)*r}function Dc(t){return/^\\s+$/u.test(t)}function Sv(t,e,r){let i=0;return(t===10||t===13)&&(i-=1e4),r&&(i+=150),(t===40||t===65288)&&(i+=50),(e===41||e===65289)&&(i+=50),i}function _c(t,e,r,i,n,a){let s=null,o=wc(e,r,n,a);for(let l of i){let u=wc(e-l.x,r,n,a)+l.badness;u<=o&&(s=l,o=u)}return{index:t,x:e,priorBreak:s,badness:o}}function Od(t){return t?Od(t.priorBreak).concat(t.index):[]}var iu=class rl{constructor(e="",r=[],i=[]){this.text=e,this.sections=r,this.sectionIndex=i,this.imageSectionID=null,this._graphemes=null}graphemes(){var e;return(e=this._graphemes)!=null||(this._graphemes=tl(this.text)),this._graphemes}static fromFeature(e,r){let i=new rl;for(let n of e.sections)n.image?i.addImageSection(n):i.addTextSection(n,r);return i}length(){return this.graphemes().length}getSection(e){return this.sections[this.sectionIndex[e]]}getSectionIndex(e){return this.sectionIndex[e]}verticalizePunctuation(){this.text=Dv(this.text),this._graphemes=null}hasZeroWidthSpaces(){return this.text.includes("\\u200B")}trim(){let e=this.graphemes(),r=0;for(;r<e.length&&Dc(e[r]);)r++;let i=e.length;for(;i>r&&Dc(e[i-1]);)i--;this.text=e.slice(r,i).join(""),this.sectionIndex=this.sectionIndex.slice(r,i),this._graphemes=null}substring(e,r){let i=this.graphemes().slice(e,r).join(""),n=this.sectionIndex.slice(e,r);return new rl(i,this.sections,n)}toCodeUnitIndex(e){return this.graphemes().slice(0,e).join("").length}toString(){return this.text}getMaxScale(){return this.sectionIndex.reduce((e,r)=>Math.max(e,this.sections[r].scale),0)}getMaxImageSize(e){let r=0,i=0;for(let n=0;n<this.length();n++){let a=this.getSection(n);if("imageName"in a){let s=e[a.imageName];if(!s)continue;let o=s.displaySize;r=Math.max(r,o[0]),i=Math.max(i,o[1])}}return{maxImageWidth:r,maxImageHeight:i}}_appendSection(e,r){let i=this.graphemes(),n=i.length>0?i[i.length-1]:"",a=tl(n+e);this.text+=e,this._graphemes=i.slice(0,n?-1:void 0).concat(a);let s=a.length-+!!n;for(let o=0;o<s;o++)this.sectionIndex.push(r)}addTextSection(e,r){this.sections.push({scale:e.scale||1,verticalAlign:e.verticalAlign||"bottom",fontStack:e.fontStack||r}),this._appendSection(e.text,this.sections.length-1)}addImageSection(e){let r=e.image?e.image.name:"";if(r.length===0){Bt("Can\'t add FormattedSection with an empty image.");return}let i=this.getNextImageSectionCharCode();if(!i){Bt("Reached maximum number of images 6401");return}this.sections.push({scale:1,verticalAlign:e.verticalAlign||"bottom",imageName:r}),this._appendSection(String.fromCharCode(i),this.sections.length-1)}getNextImageSectionCharCode(){return this.imageSectionID?this.imageSectionID>=63743?null:++this.imageSectionID:(this.imageSectionID=57344,this.imageSectionID)}determineLineBreaks(e,r,i,n,a){let s=[],o=this.determineAverageLineWidth(e,r,i,n,a),l=this.hasZeroWidthSpaces(),u=this.graphemes(),h=null,c=0,p=0;for(let f=0;f<u.length;f++){let d=u[f];if(f>0){let y=u[f-1].codePointAt(0),m=d.codePointAt(0),g=K2(y),x=gc(y)&&gc(m);(_v[y]||g||"imageName"in this.getSection(f-1)||u[f+1]!==void 0&&Av[m]||x&&(h!=null?h:h=vv(this.text)).has(p))&&s.push(_c(f,c,o,s,Sv(y,m,g&&l),!1))}ru(d.codePointAt(0))||(c+=bc(d,this.getSection(f),i,n,e,a)),p+=d.length}return Od(_c(this.length(),c,o,s,0,!0))}determineAverageLineWidth(e,r,i,n,a){let s=0,o=0;for(let u of this.graphemes()){let h=this.getSection(o);s+=bc(u,h,i,n,e,a),o++}let l=Math.max(1,Math.ceil(s/r));return s/l}};function Ev(){return(function(t){var e={R:"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73",EN:"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9",ES:"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2",ET:"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj",AN:"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u",CS:"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b",B:"a,3,f+2,2v,690",S:"9,2,k",WS:"c,k,4f4,1vk+a,u,1j,335",ON:"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i",BN:"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1",NSM:"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n",AL:"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d",LRO:"6ct",RLO:"6cu",LRE:"6cq",RLE:"6cr",PDF:"6cs",LRI:"6ee",RLI:"6ef",FSI:"6eg",PDI:"6eh"},r={},i={};r.L=1,i[1]="L",Object.keys(e).forEach(function(R,J){r[R]=1<<J+1,i[r[R]]=R}),Object.freeze(r);var n=r.LRI|r.RLI|r.FSI,a=r.L|r.R|r.AL,s=r.B|r.S|r.WS|r.ON|r.FSI|r.LRI|r.RLI|r.PDI,o=r.BN|r.RLE|r.LRE|r.RLO|r.LRO|r.PDF,l=r.S|r.WS|r.B|n|r.PDI|o,u=null;function h(){if(!u){u=new Map;var R=0;for(var J in e)if(e.hasOwnProperty(J))for(var W=e[J],M="",ut=void 0,X=!1,G=0,K=0;K<=W.length+1;K+=1){var Nt=W[K];if(Nt!==","&&K!==W.length)Nt==="+"?(X=!0,G=R=G+parseInt(M,36),M=""):M+=Nt;else{X?ut=R+parseInt(M,36):(G=R=G+parseInt(M,36),ut=R),X=!1,M="",G=ut;for(var vt=R;vt<ut+1;vt+=1)u.set(vt,r[J])}}}}function c(R){return h(),u.get(R.codePointAt(0))||r.L}function p(R){return i[c(R)]}var f={pairs:"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1",canonical:"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye"};function d(R,J){var W=0,M=new Map,ut=J&&new Map,X;return R.split(",").forEach(function G(K){if(K.indexOf("+")!==-1)for(var Nt=+K;Nt--;)G(X);else{X=K;var vt=K.split(">"),nt=vt[0],Tt=vt[1];nt=String.fromCodePoint(W+=parseInt(nt,36)),Tt=String.fromCodePoint(W+=parseInt(Tt,36)),M.set(nt,Tt),J&&ut.set(Tt,nt)}}),{map:M,reverseMap:ut}}var y,m,g;function x(){if(!y){var R=d(f.pairs,!0),J=R.map,W=R.reverseMap;y=J,m=W,g=d(f.canonical,!1).map}}function v(R){return x(),y.get(R)||null}function b(R){return x(),m.get(R)||null}function D(R){return x(),g.get(R)||null}var A=r.L,_=r.R,S=r.EN,k=r.ES,z=r.ET,O=r.AN,P=r.CS,L=r.B,F=r.S,$=r.ON,U=r.BN,T=r.NSM,q=r.AL,at=r.LRO,ot=r.RLO,pt=r.LRE,Et=r.RLE,qt=r.PDF,Ht=r.LRI,Ve=r.RLI,ye=r.FSI,Kt=r.PDI;function Oe(R,J){for(var W=125,M=new Uint32Array(R.length),ut=0;ut<R.length;ut++)M[ut]=c(R[ut]);var X=new Map;function G(Yt,ue){var Wt=M[Yt];M[Yt]=ue,X.set(Wt,X.get(Wt)-1),Wt&s&&X.set(s,X.get(s)-1),X.set(ue,(X.get(ue)||0)+1),ue&s&&X.set(s,(X.get(s)||0)+1)}for(var K=new Uint8Array(R.length),Nt=new Map,vt=[],nt=null,Tt=0;Tt<R.length;Tt++)nt||vt.push(nt={start:Tt,end:R.length-1,level:J==="rtl"?1:J==="ltr"?0:rh(Tt,!1)}),M[Tt]&L&&(nt.end=Tt,nt=null);for(var di=Et|pt|ot|at|n|Kt|qt|L,nr=function(Yt){return Yt+(Yt&1?1:2)},Re=function(Yt){return Yt+(Yt&1?2:1)},$e=0;$e<vt.length;$e++){nt=vt[$e];var lt=[{_level:nt.level,_override:0,_isolate:0}],bt=void 0,Fe=0,Ne=0,rs=0;X.clear();for(var zt=nt.start;zt<=nt.end;zt++){var Lt=M[zt];if(bt=lt[lt.length-1],X.set(Lt,(X.get(Lt)||0)+1),Lt&s&&X.set(s,(X.get(s)||0)+1),Lt&di)if(Lt&(Et|pt)){K[zt]=bt._level;var Iu=(Lt===Et?Re:nr)(bt._level);Iu<=W&&!Fe&&!Ne?lt.push({_level:Iu,_override:0,_isolate:0}):Fe||Ne++}else if(Lt&(ot|at)){K[zt]=bt._level;var Cu=(Lt===ot?Re:nr)(bt._level);Cu<=W&&!Fe&&!Ne?lt.push({_level:Cu,_override:Lt&ot?_:A,_isolate:0}):Fe||Ne++}else if(Lt&n){Lt&ye&&(Lt=rh(zt+1,!0)===1?Ve:Ht),K[zt]=bt._level,bt._override&&G(zt,bt._override);var Mu=(Lt===Ve?Re:nr)(bt._level);Mu<=W&&Fe===0&&Ne===0?(rs++,lt.push({_level:Mu,_override:0,_isolate:1,_isolInitIndex:zt})):Fe++}else if(Lt&Kt){if(Fe>0)Fe--;else if(rs>0){for(Ne=0;!lt[lt.length-1]._isolate;)lt.pop();var is=lt[lt.length-1]._isolInitIndex;is!=null&&(Nt.set(is,zt),Nt.set(zt,is)),lt.pop(),rs--}bt=lt[lt.length-1],K[zt]=bt._level,bt._override&&G(zt,bt._override)}else Lt&qt?(Fe===0&&(Ne>0?Ne--:!bt._isolate&<.length>1&&(lt.pop(),bt=lt[lt.length-1])),K[zt]=bt._level):Lt&L&&(K[zt]=nt.level);else K[zt]=bt._level,bt._override&&Lt!==U&&G(zt,bt._override)}for(var Cr=[],me=null,ar=nt.start;ar<=nt.end;ar++){var ns=M[ar];if(!(ns&o)){var Bu=K[ar],Pu=ns&n,Wy=ns===Kt;me&&Bu===me._level?(me._end=ar,me._endsWithIsolInit=Pu):Cr.push(me={_start:ar,_end:ar,_level:Bu,_startsWithPDI:Wy,_endsWithIsolInit:Pu})}}for(var as=[],Sn=0;Sn<Cr.length;Sn++){var En=Cr[Sn];if(!En._startsWithPDI||En._startsWithPDI&&!Nt.has(En._start)){for(var ss=[me=En],zu=void 0;me&&me._endsWithIsolInit&&(zu=Nt.get(me._end))!=null;)for(var Fn=Sn+1;Fn<Cr.length;Fn++)if(Cr[Fn]._start===zu){ss.push(me=Cr[Fn]);break}for(var Mr=[],os=0;os<ss.length;os++)for(var Lu=ss[os],ls=Lu._start;ls<=Lu._end;ls++)Mr.push(ls);for(var Zy=K[Mr[0]],Vu=nt.level,kn=Mr[0]-1;kn>=0;kn--)if(!(M[kn]&o)){Vu=K[kn];break}var us=Mr[Mr.length-1],Hy=K[us],Ou=nt.level;if(!(M[us]&n)){for(var Tn=us+1;Tn<=nt.end;Tn++)if(!(M[Tn]&o)){Ou=K[Tn];break}}as.push({_seqIndices:Mr,_sosType:Math.max(Vu,Zy)%2?_:A,_eosType:Math.max(Ou,Hy)%2?_:A})}}for(var hs=0;hs<as.length;hs++){var cs=as[hs],j=cs._seqIndices,yi=cs._sosType,Ky=cs._eosType,Br=K[j[0]]&1?_:A;if(X.get(T))for(var In=0;In<j.length;In++){var Ru=j[In];if(M[Ru]&T){for(var ps=yi,Cn=In-1;Cn>=0;Cn--)if(!(M[j[Cn]]&o)){ps=M[j[Cn]];break}G(Ru,ps&(n|Kt)?$:ps)}}if(X.get(S))for(var Mn=0;Mn<j.length;Mn++){var $u=j[Mn];if(M[$u]&S)for(var Bn=Mn-1;Bn>=-1;Bn--){var Nu=Bn===-1?yi:M[j[Bn]];if(Nu&a){Nu===q&&G($u,O);break}}}if(X.get(q))for(var fs=0;fs<j.length;fs++){var Uu=j[fs];M[Uu]&q&&G(Uu,_)}if(X.get(k)||X.get(P))for(var mi=1;mi<j.length-1;mi++){var ds=j[mi];if(M[ds]&(k|P)){for(var Pr=0,ys=0,ms=mi-1;ms>=0&&(Pr=M[j[ms]],Pr&o);ms--);for(var gs=mi+1;gs<j.length&&(ys=M[j[gs]],ys&o);gs++);Pr===ys&&(M[ds]===k?Pr===S:Pr&(S|O))&&G(ds,Pr)}}if(X.get(S)){for(var ge=0;ge<j.length;ge++)if(M[j[ge]]&S){for(var Pn=ge-1;Pn>=0&&M[j[Pn]]&(z|o);Pn--)G(j[Pn],S);for(ge++;ge<j.length&&M[j[ge]]&(z|o|S);ge++)M[j[ge]]!==S&&G(j[ge],S)}}if(X.get(z)||X.get(k)||X.get(P))for(var gi=0;gi<j.length;gi++){var qu=j[gi];if(M[qu]&(z|k|P)){G(qu,$);for(var zn=gi-1;zn>=0&&M[j[zn]]&o;zn--)G(j[zn],$);for(var Ln=gi+1;Ln<j.length&&M[j[Ln]]&o;Ln++)G(j[Ln],$)}}if(X.get(S))for(var xs=0,ju=yi;xs<j.length;xs++){var Gu=j[xs],vs=M[Gu];vs&S?ju===A&&G(Gu,A):vs&a&&(ju=vs)}if(X.get(s)){for(var xi=_|S|O,Xu=xi|A,Vn=[],zr=[],Lr=0;Lr<j.length;Lr++)if(M[j[Lr]]&s){var vi=R[j[Lr]],Yu=void 0;if(v(vi)!==null)if(zr.length<63)zr.push({char:vi,seqIndex:Lr});else break;else if((Yu=b(vi))!==null)for(var bi=zr.length-1;bi>=0;bi--){var bs=zr[bi].char;if(bs===Yu||bs===b(D(vi))||v(D(bs))===vi){Vn.push([zr[bi].seqIndex,Lr]),zr.length=bi;break}}}Vn.sort(function(Yt,ue){return Yt[0]-ue[0]});for(var ws=0;ws<Vn.length;ws++){for(var Wu=Vn[ws],On=Wu[0],Ds=Wu[1],Zu=!1,xe=0,_s=On+1;_s<Ds;_s++){var Hu=j[_s];if(M[Hu]&Xu){Zu=!0;var Ku=M[Hu]&xi?_:A;if(Ku===Br){xe=Ku;break}}}if(Zu&&!xe){xe=yi;for(var As=On-1;As>=0;As--){var Ju=j[As];if(M[Ju]&Xu){var Qu=M[Ju]&xi?_:A;xe=Qu===Br?Br:Qu;break}}}if(xe){if(M[j[On]]=M[j[Ds]]=xe,xe!==Br){for(var wi=On+1;wi<j.length;wi++)if(!(M[j[wi]]&o)){c(R[j[wi]])&T&&(M[j[wi]]=xe);break}}if(xe!==Br){for(var Di=Ds+1;Di<j.length;Di++)if(!(M[j[Di]]&o)){c(R[j[Di]])&T&&(M[j[Di]]=xe);break}}}}for(var Ue=0;Ue<j.length;Ue++)if(M[j[Ue]]&s){for(var th=Ue,Ss=Ue,Es=yi,_i=Ue-1;_i>=0;_i--)if(M[j[_i]]&o)th=_i;else{Es=M[j[_i]]&xi?_:A;break}for(var eh=Ky,Ai=Ue+1;Ai<j.length;Ai++)if(M[j[Ai]]&(s|o))Ss=Ai;else{eh=M[j[Ai]]&xi?_:A;break}for(var Fs=th;Fs<=Ss;Fs++)M[j[Fs]]=Es===eh?Es:Br;Ue=Ss}}}for(var Jt=nt.start;Jt<=nt.end;Jt++){var Jy=K[Jt],Rn=M[Jt];if(Jy&1?Rn&(A|S|O)&&K[Jt]++:Rn&_?K[Jt]++:Rn&(O|S)&&(K[Jt]+=2),Rn&o&&(K[Jt]=Jt===0?nt.level:K[Jt-1]),Jt===nt.end||c(R[Jt])&(F|L))for(var $n=Jt;$n>=0&&c(R[$n])&l;$n--)K[$n]=nt.level}}return{levels:K,paragraphs:vt};function rh(Yt,ue){for(var Wt=Yt;Wt<R.length;Wt++){var qe=M[Wt];if(qe&(_|q))return 1;if(qe&(L|A)||ue&&qe===Kt)return 0;if(qe&n){var ih=Qy(Wt);Wt=ih===-1?R.length:ih}}return 0}function Qy(Yt){for(var ue=1,Wt=Yt+1;Wt<R.length;Wt++){var qe=M[Wt];if(qe&L)break;if(qe&Kt){if(--ue===0)return Wt}else qe&n&&ue++}return-1}}var kr="14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1",rr;function fi(){if(!rr){var R=d(kr,!0),J=R.map;R.reverseMap.forEach(function(W,M){J.set(M,W)}),rr=J}}function kt(R){return fi(),rr.get(R)||null}function Ee(R,J,W,M){var ut=R.length;W=Math.max(0,W==null?0:+W),M=Math.min(ut-1,M==null?ut-1:+M);for(var X=new Map,G=W;G<=M;G++)if(J[G]&1){var K=kt(R[G]);K!==null&&X.set(G,K)}return X}function ir(R,J,W,M){var ut=R.length;W=Math.max(0,W==null?0:+W),M=Math.min(ut-1,M==null?ut-1:+M);var X=[];return J.paragraphs.forEach(function(G){var K=Math.max(W,G.start),Nt=Math.min(M,G.end);if(K<Nt){for(var vt=J.levels.slice(K,Nt+1),nt=Nt;nt>=K&&c(R[nt])&l;nt--)vt[nt]=G.level;for(var Tt=G.level,di=1/0,nr=0;nr<vt.length;nr++){var Re=vt[nr];Re>Tt&&(Tt=Re),Re<di&&(di=Re|1)}for(var $e=Tt;$e>=di;$e--)for(var lt=0;lt<vt.length;lt++)if(vt[lt]>=$e){for(var bt=lt;lt+1<vt.length&&vt[lt+1]>=$e;)lt++;lt>bt&&X.push([bt+K,lt+K])}}}),X}function Tr(R,J,W,M){var ut=Ir(R,J,W,M),X=[].concat(R);return ut.forEach(function(G,K){X[K]=(J.levels[G]&1?kt(R[G]):null)||R[G]}),X.join("")}function Ir(R,J,W,M){for(var ut=ir(R,J,W,M),X=[],G=0;G<R.length;G++)X[G]=G;return ut.forEach(function(K){for(var Nt=K[0],vt=K[1],nt=X.slice(Nt,vt+1),Tt=nt.length;Tt--;)X[vt-Tt]=nt[Tt]}),X}return t.closingToOpeningBracket=b,t.getBidiCharType=c,t.getBidiCharTypeName=p,t.getCanonicalBracket=D,t.getEmbeddingLevels=Oe,t.getMirroredCharacter=kt,t.getMirroredCharactersMap=Ee,t.getReorderSegments=ir,t.getReorderedIndices=Ir,t.getReorderedString=Tr,t.openingToClosingBracket=v,Object.defineProperty(t,"__esModule",{value:!0}),t})({})}var nu=Ev(),Fv=/[\\u061c\\u200e\\u200f\\u202a-\\u202e\\u2066-\\u2069]/,kv=new Set(["WS","FSI","LRI","RLI","PDI"]),Tv=new Set(["S","B"]);function Iv(t,e,r,i){let n=[],a=r;for(let s of tl(t.slice(r,i)))n.push({index:a,text:s,level:e[a]}),a+=s.length;return n}function Cv(t,e){let r=!0;for(let i=t.length-1;i>=0;i--){let n=nu.getBidiCharTypeName(t[i].text[0]);Tv.has(n)?(t[i].level=e,r=!0):r&&kv.has(n)?t[i].level=e:r=!1}}function Mv(t,e){let r=e,i=1/0;for(let{level:a}of t)a>r&&(r=a),(a|1)<i&&(i=a|1);let n=t.slice();for(let a=r;a>=i;a--)for(let s=0;s<n.length;s++){if(n[s].level<a)continue;let o=s;for(;o+1<n.length&&n[o+1].level>=a;)o++;for(let l=s,u=o;l<u;l++,u--)[n[l],n[u]]=[n[u],n[l]];s=o}return n}function Bv(t){var e;return t.level%2==0?t.text:(e=nu.getMirroredCharacter(t.text))!=null?e:t.text}function Pv(t,e){var r,i;return(i=(r=t.find(n=>e>=n.start&&e<=n.end))==null?void 0:r.level)!=null?i:0}function zv(t,e,r,i,n){let a=Iv(t,e,i,n);Cv(a,r);let s="",o=[];for(let l of Mv(a,r)){if(Fv.test(l.text))continue;let u=Bv(l);s+=u,o.push(...Array(u.length).fill(l.index))}return{text:s,sourceIndices:o}}function Lv(t,e){let r=e.filter(a=>a>0&&a<t.length),i=[...new Set([0,...r,t.length])].sort((a,s)=>a-s),n=[];for(let a=0;a+1<i.length;a++)n.push([i[a],i[a+1]]);return n}function Rd(t,e){let{levels:r,paragraphs:i}=nu.getEmbeddingLevels(t);return Lv(t,e.concat(i.map(n=>n.start))).map(([n,a])=>zv(t,r,Pv(i,n),n,a))}function Vv(t,e){return Rd(t,e).map(r=>r.text)}function Ov(t,e,r){return Rd(t,r).map(i=>[i.text,i.sourceIndices.map(n=>{var a;return(a=e[n])!=null?a:0})])}var il=4294967296,Ac=1/il,Sc=typeof TextDecoder>"u"?null:new TextDecoder("utf-8"),au=class{constructor(t){this.buf=ArrayBuffer.isView(t)?t:new Uint8Array(t),this.dataView=new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength),this.pos=0,this.type=0,this._valueStart=-1,this.length=this.buf.length}readFields(t,e,r=this.length){let i;for(;i=this.nextField(r);)t(i,e,this);return e}readMessage(t,e){return this.readFields(t,e,this.readVarint()+this.pos)}readFixed32(){let t=this.dataView.getUint32(this.pos,!0);return this.pos+=4,t}readSFixed32(){let t=this.dataView.getInt32(this.pos,!0);return this.pos+=4,t}readFixed64(){let t=this.dataView.getUint32(this.pos,!0)+this.dataView.getUint32(this.pos+4,!0)*il;return this.pos+=8,t}readSFixed64(){let t=this.dataView.getUint32(this.pos,!0)+this.dataView.getInt32(this.pos+4,!0)*il;return this.pos+=8,t}readFloat(){let t=this.dataView.getFloat32(this.pos,!0);return this.pos+=4,t}readDouble(){let t=this.dataView.getFloat64(this.pos,!0);return this.pos+=8,t}readVarint(t){let e=this.buf,r=e[this.pos++];if(r<128)return r;let i=r&127,n;return n=e[this.pos++],i|=(n&127)<<7,n<128||(n=e[this.pos++],i|=(n&127)<<14,n<128)||(n=e[this.pos++],i|=(n&127)<<21,n<128)?i:(n=e[this.pos],i|=(n&15)<<28,$v(i,t,this))}readSVarint(){let t=this.readVarint();return t%2==1?(t+1)/-2:t/2}readBoolean(){return!!this.readVarint()}readString(){let t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Sc?Sc.decode(this.buf.subarray(e,t)):tb(this.buf,e,t)}readBytes(){let t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e}readPackedVarint(t=[],e){let r=this.readPackedEnd();for(;this.pos<r;)t.push(this.readVarint(e));return t}readPackedSVarint(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readSVarint());return t}readPackedBoolean(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readBoolean());return t}readPackedFloat(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readFloat());return t}readPackedDouble(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readDouble());return t}readPackedFixed32(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readFixed32());return t}readPackedSFixed32(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readSFixed32());return t}readPackedFixed64(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readFixed64());return t}readPackedSFixed64(t=[]){let e=this.readPackedEnd();for(;this.pos<e;)t.push(this.readSFixed64());return t}readPackedEnd(){return this.type===2?this.readVarint()+this.pos:this.pos+1}nextField(t=this.length){if(this.pos===this._valueStart&&this.skip(this.type),this.pos>=t)return 0;let e=this.readVarint();return this.type=e&7,this._valueStart=this.pos,e>>>3}skip(t){let e=t&7;if(e===0)for(;this.buf[this.pos++]>127;);else if(e===2)this.pos=this.readVarint()+this.pos;else if(e===5)this.pos+=4;else if(e===1)this.pos+=8;else throw Error(`Unimplemented type: ${e}`)}},Rv=class{constructor(t=new Uint8Array(16)){this.buf=ArrayBuffer.isView(t)?t:new Uint8Array(t),this.dataView=new DataView(this.buf.buffer,this.buf.byteOffset,this.buf.byteLength),this.pos=0,this.length=this.buf.length}writeTag(t,e){this.writeVarint(t<<3|e)}realloc(t){let e=this.length||16;for(;e<this.pos+t;)e*=2;if(e!==this.length){let r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.dataView=new DataView(r.buffer),this.length=e}}finish(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)}writeFixed32(t){this.realloc(4),this.dataView.setInt32(this.pos,t,!0),this.pos+=4}writeSFixed32(t){this.realloc(4),this.dataView.setInt32(this.pos,t,!0),this.pos+=4}writeFixed64(t){this.realloc(8),this.dataView.setInt32(this.pos,t&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(t*Ac),!0),this.pos+=8}writeSFixed64(t){this.realloc(8),this.dataView.setInt32(this.pos,t&-1,!0),this.dataView.setInt32(this.pos+4,Math.floor(t*Ac),!0),this.pos+=8}writeVarint(t){if(t=+t||0,t>=0&&t<128){this.pos>=this.length&&this.realloc(1),this.buf[this.pos++]=t;return}if(t>268435455||t<0){Uv(t,this);return}this.realloc(4),this.buf[this.pos++]=t&127|(t>127?128:0),!(t<=127)&&(this.buf[this.pos++]=(t>>>=7)&127|(t>127?128:0),!(t<=127)&&(this.buf[this.pos++]=(t>>>=7)&127|(t>127?128:0),!(t<=127)&&(this.buf[this.pos++]=t>>>7&127)))}writeSVarint(t){this.writeVarint(t<0?-t*2-1:t*2)}writeBoolean(t){this.writeVarint(+t)}writeString(t){t=String(t),this.realloc(t.length*4),this.pos++;let e=this.pos;this.pos=eb(this.buf,t,this.pos);let r=this.pos-e;r>=128&&Ec(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r}writeFloat(t){this.realloc(4),this.dataView.setFloat32(this.pos,t,!0),this.pos+=4}writeDouble(t){this.realloc(8),this.dataView.setFloat64(this.pos,t,!0),this.pos+=8}writeBytes(t){let e=t.length;this.writeVarint(e),this.realloc(e),this.buf.set(t,this.pos),this.pos+=e}writeRawMessage(t,e){this.pos++;let r=this.pos;t(e,this);let i=this.pos-r;i>=128&&Ec(r,i,this),this.pos=r-1,this.writeVarint(i),this.pos+=i}writeMessage(t,e,r){this.writeTag(t,2),this.writeRawMessage(e,r)}writePackedVarint(t,e){e.length&&this.writeMessage(t,Gv,e)}writePackedSVarint(t,e){e.length&&this.writeMessage(t,Xv,e)}writePackedBoolean(t,e){e.length&&this.writeMessage(t,Zv,e)}writePackedFloat(t,e){e.length&&this.writeMessage(t,Yv,e)}writePackedDouble(t,e){e.length&&this.writeMessage(t,Wv,e)}writePackedFixed32(t,e){e.length&&this.writeMessage(t,Hv,e)}writePackedSFixed32(t,e){e.length&&this.writeMessage(t,Kv,e)}writePackedFixed64(t,e){e.length&&this.writeMessage(t,Jv,e)}writePackedSFixed64(t,e){e.length&&this.writeMessage(t,Qv,e)}writeBytesField(t,e){this.writeTag(t,2),this.writeBytes(e)}writeFixed32Field(t,e){this.writeTag(t,5),this.writeFixed32(e)}writeSFixed32Field(t,e){this.writeTag(t,5),this.writeSFixed32(e)}writeFixed64Field(t,e){this.writeTag(t,1),this.writeFixed64(e)}writeSFixed64Field(t,e){this.writeTag(t,1),this.writeSFixed64(e)}writeVarintField(t,e){this.writeTag(t,0),this.writeVarint(e)}writeSVarintField(t,e){this.writeTag(t,0),this.writeSVarint(e)}writeStringField(t,e){this.writeTag(t,2),this.writeString(e)}writeFloatField(t,e){this.writeTag(t,5),this.writeFloat(e)}writeDoubleField(t,e){this.writeTag(t,1),this.writeDouble(e)}writeBooleanField(t,e){this.writeVarintField(t,+e)}};function $v(t,e,r){let i=r.buf,n,a;if(a=i[r.pos++],n=(a&112)>>4,a<128||(a=i[r.pos++],n|=(a&127)<<3,a<128)||(a=i[r.pos++],n|=(a&127)<<10,a<128)||(a=i[r.pos++],n|=(a&127)<<17,a<128)||(a=i[r.pos++],n|=(a&127)<<24,a<128)||(a=i[r.pos++],n|=(a&1)<<31,a<128))return Nv(t,n,e);throw Error("Expected varint not more than 10 bytes")}function Nv(t,e,r){return r?e*4294967296+(t>>>0):(e>>>0)*4294967296+(t>>>0)}function Uv(t,e){let r,i;if(t>=0?(r=t%4294967296|0,i=t/4294967296|0):(r=~(-t%4294967296),i=~(-t/4294967296),r^4294967295?r=r+1|0:(r=0,i=i+1|0)),t>=18446744073709552e3||t<-18446744073709552e3)throw Error("Given varint doesn\'t fit into 10 bytes");e.realloc(10),qv(r,i,e),jv(i,e)}function qv(t,e,r){r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos++]=t&127|128,t>>>=7,r.buf[r.pos]=t&127}function jv(t,e){let r=(t&7)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=t&127)))))}function Ec(t,e,r){let i=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(Math.LN2*7));r.realloc(i),r.buf.copyWithin(t+i,t,r.pos)}function Gv(t,e){let r=t.length,i=e.buf,n=e.pos,a=e.length;for(let s=0;s<r;s++){let o=t[s];if(o<0||n+10>a){e.pos=n,e.writeVarint(o),i=e.buf,n=e.pos,a=e.length;continue}for(;o>127;)i[n++]=o%128|128,o=Math.floor(o/128);i[n++]=o}e.pos=n}function Xv(t,e){for(let r=0;r<t.length;r++)e.writeSVarint(t[r])}function Yv(t,e){for(let r=0;r<t.length;r++)e.writeFloat(t[r])}function Wv(t,e){for(let r=0;r<t.length;r++)e.writeDouble(t[r])}function Zv(t,e){for(let r=0;r<t.length;r++)e.writeBoolean(t[r])}function Hv(t,e){for(let r=0;r<t.length;r++)e.writeFixed32(t[r])}function Kv(t,e){for(let r=0;r<t.length;r++)e.writeSFixed32(t[r])}function Jv(t,e){for(let r=0;r<t.length;r++)e.writeFixed64(t[r])}function Qv(t,e){for(let r=0;r<t.length;r++)e.writeSFixed64(t[r])}function tb(t,e,r){let i="",n=e;for(;n<r;){let a=t[n],s=null,o=a>239?4:a>223?3:a>191?2:1;if(n+o>r)break;let l,u,h;o===1?a<128&&(s=a):o===2?(l=t[n+1],(l&192)==128&&(s=(a&31)<<6|l&63,s<=127&&(s=null))):o===3?(l=t[n+1],u=t[n+2],(l&192)==128&&(u&192)==128&&(s=(a&15)<<12|(l&63)<<6|u&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):o===4&&(l=t[n+1],u=t[n+2],h=t[n+3],(l&192)==128&&(u&192)==128&&(h&192)==128&&(s=(a&15)<<18|(l&63)<<12|(u&63)<<6|h&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,o=1):s>65535&&(s-=65536,i+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),i+=String.fromCharCode(s),n+=o}return i}function eb(t,e,r){for(let i=0,n,a;i<e.length;i++){if(n=e.charCodeAt(i),n>55295&&n<57344)if(a){if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,a=n;continue}n=a-55296<<10|n-56320|65536,a=null}else{n>56319||i+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):a=n;continue}else a&&(a=(t[r++]=239,t[r++]=191,t[r++]=189,null));n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=n&63|128)}return r}function rb(t){return typeof(t==null?void 0:t.renderWithWebGL)=="function"}function su(t){let e=0,r=0;for(let s of t)e+=s.w*s.h,r=Math.max(r,s.w);t.sort((s,o)=>o.h-s.h);let i=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],n=0,a=0;for(let s of t)for(let o=i.length-1;o>=0;o--){let l=i[o];if(!(s.w>l.w||s.h>l.h)){if(s.x=l.x,s.y=l.y,a=Math.max(a,s.y+s.h),n=Math.max(n,s.x+s.w),s.w===l.w&&s.h===l.h){let u=i.pop();u&&o<i.length&&(i[o]=u)}else s.h===l.h?(l.x+=s.w,l.w-=s.w):s.w===l.w?(l.y+=s.h,l.h-=s.h):(i.push({x:l.x+s.w,y:l.y,w:l.w-s.w,h:s.h}),l.y+=s.h,l.h-=s.h);break}}return{w:n,h:a,fill:e/(n*a)||0}}var $d=class{constructor(t,{pixelRatio:e,version:r,isWebGLImage:i=!1,stretchX:n,stretchY:a,content:s,textFitWidth:o,textFitHeight:l}){this.paddedRect=t,this.pixelRatio=e,this.stretchX=n,this.stretchY=a,this.content=s,this.version=r,this.needsFirstWebGLRender=i,this.textFitWidth=o,this.textFitHeight=l}get tl(){return[this.paddedRect.x+1,this.paddedRect.y+1]}get br(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]}get tlbr(){return this.tl.concat(this.br)}get displaySize(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]}},ou=class{constructor(t,e){let r={},i={};this.haveRenderCallbacks=[],this.patchedUpdateVersion=-1;let n=[];this.addImages(t,r,n),this.addImages(e,i,n);let{w:a,h:s}=su(n),o=new Zt({width:a||1,height:s||1});for(let l in t){let u=t[l];if(u.isWebGLImage)continue;let h=r[l].paddedRect;Zt.copy(u.data,o,{x:0,y:0},{x:h.x+1,y:h.y+1},u.data)}for(let l in e){let u=e[l],h=i[l].paddedRect,c=h.x+1,p=h.y+1,f=u.data.width,d=u.data.height;Zt.copy(u.data,o,{x:0,y:0},{x:c,y:p},u.data),Zt.copy(u.data,o,{x:0,y:d-1},{x:c,y:p-1},{width:f,height:1}),Zt.copy(u.data,o,{x:0,y:0},{x:c,y:p+d},{width:f,height:1}),Zt.copy(u.data,o,{x:f-1,y:0},{x:c-1,y:p},{width:1,height:d}),Zt.copy(u.data,o,{x:0,y:0},{x:c+f,y:p},{width:1,height:d})}this.image=o,this.iconPositions=r,this.patternPositions=i}addImages(t,e,r){for(let i in t){let n=t[i],a={x:0,y:0,w:n.data.width+2,h:n.data.height+2};r.push(a),e[i]=new $d(a,n),n.hasRenderCallback&&this.haveRenderCallbacks.push(i)}}patchUpdatedImages(t,e){if(t.dispatchRenderCallbacks(this.haveRenderCallbacks),this.patchedUpdateVersion!==t.updateVersion){this.patchedUpdateVersion=t.updateVersion;for(let r in this.iconPositions)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e);for(let r in this.patternPositions)this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)}}patchUpdatedImage(t,e,r){var l;if(!t||!e||!t.needsFirstWebGLRender&&t.version===e.version)return;t.needsFirstWebGLRender=!1,t.version=e.version;let[i,n]=t.tl,a=(l=e.userImage)==null?void 0:l.data;if(!rb(a)){r.update(e.data,void 0,{x:i,y:n});return}let{width:s,height:o}=e.data;r.context.setCustomLayerDefaults(),a.renderWithWebGL({gl:r.context.gl,texture:r.texture,x:i,y:n,width:s,height:o}),r.context.setDirty()}};C("ImagePosition",$d),C("ImageAtlas",ou);var Nd=(function(t){return t[t.none=0]="none",t[t.horizontal=1]="horizontal",t[t.vertical=2]="vertical",t[t.horizontalOnly=3]="horizontalOnly",t})(Nd||{});function ib(t){for(let e of t)if(e.positionedGlyphs.length!==0)return!1;return!0}function nb(t,e){let r=[],i=0;for(let n of e)r.push(t.substring(i,n)),i=n;return i<t.length()&&r.push(t.substring(i,t.length())),r}var Fc=new RegExp("^\\\\p{gc=M}$","u");function ab(t){let e=[],r=0;for(;r<t.length;){if(!Fc.test(t[r])){e.push(r),r++;continue}let i=r;for(;i<t.length&&Fc.test(t[i]);)i++;let n=t[i];if(n!==void 0&&Ld(n.codePointAt(0))){e.push(i);for(let a=i-1;a>=r;a--)e.push(a);r=i+1}else{for(let a=r;a<i;a++)e.push(a);r=i}}return e}function sb(t){let e=[],r=0;for(let i of t.graphemes())e.push(...Array(i.length).fill(t.sectionIndex[r])),r++;return e}function ob(t,e){let r=e.map(a=>t.toCodeUnitIndex(a)),i=wr.isParsed()?wr:null;if(t.sections.length===1)return i?i.processBidirectionalText(t.toString(),r).map(a=>kc(a,t.sections,[...a].map(()=>0))):Vv(t.toString(),r).map(a=>nl([...a],t.sections,[...a].map(()=>0)));let n=sb(t);return i?i.processStyledBidirectionalText(t.text,n,r).map(([a,s])=>kc(a,t.sections,s)):Ov(t.text,n,r).map(([a,s])=>{let o=[...a];return nl(o,t.sections,Ud(o).map(l=>{var u;return(u=s[l])!=null?u:0}))})}function nl(t,e,r){var a;let i=new iu(t.join(""),e,[]),n=0;for(let s of i.graphemes())i.sectionIndex.push((a=r[n])!=null?a:0),n+=[...s].length;return i}function Ud(t){let e=[],r=0;for(let i of t)e.push(r),r+=i.length;return e}function kc(t,e,r){let i=[...t],n=Ud(i),a=ab(i);return nl(a.map(s=>i[s]),e,a.map(s=>{var o;return(o=r[n[s]])!=null?o:0}))}function ra(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d){let y=iu.fromFeature(t,n);c===2&&y.verticalizePunctuation();let m=y.determineLineBreaks(u,a,e,i,f),g=Vd(y.text)?ob(y,m):nb(y,m),x=[],v={positionedLines:x,text:y.toString(),top:h[1],bottom:h[1],left:h[0],right:h[0],writingMode:c,iconsInText:!1,verticalizable:!1};return mb(v,e,r,i,g,s,o,l,c,u,p,d),!ib(x)&&v}function qd(t){let e=.5,r=.5;switch(t){case"right":case"top-right":case"bottom-right":e=1;break;case"left":case"top-left":case"bottom-left":e=0}switch(t){case"bottom":case"bottom-right":case"bottom-left":r=1;break;case"top":case"top-right":case"top-left":r=0}return{horizontalAlign:e,verticalAlign:r}}function lb(t,e,r){let i=e.getMaxScale()*24,{maxImageWidth:n,maxImageHeight:a}=e.getMaxImageSize(t),s=Math.max(i,a*r);return{verticalLineContentWidth:Math.max(i,n*r),horizontalLineContentHeight:s}}function jd(t){switch(t){case"top":return 0;case"center":return .5;default:return 1}}function ub(t,e,r,i){var a;if(t!=null&&t.rect)return t;let n=(a=e[r.fontStack])==null?void 0:a[i];return n?{rect:null,metrics:n.metrics}:null}function hb(t,e,r){return!(t===1||!e&&!Qa(r)||e&&(ru(r)||zd(r)))}function da(t){return new RegExp("\\\\p{Nd}","u").test(String.fromCodePoint(t))}function Gd(t){return new RegExp("\\\\p{Lu}","u").test(String.fromCodePoint(t))}function cb(t){return/[\\p{P}\\p{S}]/u.test(String.fromCodePoint(t))}function pb(t){let e=t.some(da)&&t.every(i=>da(i)||cb(i)),r=t.length<=3&&t.every(i=>Gd(i)||da(i));return e||r}function fb(t){return(da(t)||Gd(t))&&!zd(t)}function db(t,e){let r=!1;for(let i=0;i<t.length;i++){if(e[i])continue;let n=Gr[t[i]];n&&(i===0||e[i-1])&&(i===t.length-1||e[i+1])&&(t[i]=n,e[i]=!0,r=!0)}return r}function yb(t){let e=t.graphemes().slice(),r=e.map(a=>a.codePointAt(0)),i=r.map(Qa),n=a=>!i[a]&&!ru(r[a])&&!("imageName"in t.getSection(a));for(let a=0;a<r.length;a++){if(!n(a))continue;let s=a;for(;s+1<r.length&&n(s+1);)s++;if(pb(r.slice(a,s+1)))for(let o=a;o<=s;o++)i[o]=fb(r[o]);a=s}return db(e,i)&&(t.text=e.join(""),t._graphemes=null),i}function mb(t,e,r,i,n,a,s,o,l,u,h,c){var D;let p=0,f=0,d=0,y=0,m=o==="right"?1:o==="left"?0:.5,g=24/c,x=0;for(let A of n){A.trim();let _=A.getMaxScale(),S={positionedGlyphs:[],lineOffset:0};t.positionedLines[x]=S;let k=S.positionedGlyphs,z=0;if(!A.length()){f+=a,++x;continue}let O=lb(i,A,g),P=l===2&&!h?yb(A):null,L=A.graphemes();for(let U=0;U<L.length;U++){let T=A.getSection(U),q=L[U],at=q.codePointAt(0),ot=P?P[U]:hb(l,h,at),pt="fontStack"in T&&Pd(q)&&!((D=e[T.fontStack])!=null&&D[q])?[...q]:[q];for(let Et of pt){let qt={glyph:Et.codePointAt(0),grapheme:Et,imageName:null,x:p,y:f+-17,vertical:ot,scale:1,fontStack:"",sectionIndex:A.getSectionIndex(U),metrics:null,rect:null},Ht;if("fontStack"in T){if(Ht=gb(T,Et,ot,O,e,r),!Ht)continue;qt.fontStack=T.fontStack}else{if(t.iconsInText=!0,T.scale*=g,Ht=xb(T,ot,_,O,i),!Ht)continue;z=Math.max(z,Ht.imageOffset),qt.imageName=T.imageName}let{rect:Ve,metrics:ye,baselineOffset:Kt}=Ht;if(qt.y+=Kt,qt.scale=T.scale,qt.metrics=ye,qt.rect=Ve,k.push(qt),!ot)p+=ye.advance*T.scale+u;else{t.verticalizable=!0;let Oe="imageName"in T?ye.advance:24;p+=Oe*T.scale+u}}}if(k.length!==0){let U=p-u;d=Math.max(U,d),vb(k,0,k.length-1,m)}p=0;let F=(_-1)*24;S.lineOffset=Math.max(z,F);let $=a*_+z;f+=$,y=Math.max($,y),++x}let{horizontalAlign:v,verticalAlign:b}=qd(s);bb(t.positionedLines,m,v,b,d,y,a,f,n.length),t.top+=-b*f,t.bottom=t.top+f,t.left+=-v*d,t.right=t.left+d}function gb(t,e,r,i,n,a){var u;let s=(u=a[t.fontStack])==null?void 0:u[e],o=ub(s,n,t,e);if(o===null)return null;let l;if(r)l=i.verticalLineContentWidth-t.scale*24;else{let h=jd(t.verticalAlign);l=(i.horizontalLineContentHeight-t.scale*24)*h}return{rect:o.rect,metrics:o.metrics,baselineOffset:l}}function xb(t,e,r,i,n){let a=n[t.imageName];if(!a)return null;let s=a.paddedRect,o=a.displaySize,l={width:o[0],height:o[1],left:1,top:-3,advance:e?o[1]:o[0]},u;if(e)u=i.verticalLineContentWidth-o[1]*t.scale;else{let c=jd(t.verticalAlign);u=(i.horizontalLineContentHeight-o[1]*t.scale)*c}let h=(e?o[0]:o[1])*t.scale-24*r;return{rect:s,metrics:l,baselineOffset:u,imageOffset:h}}function vb(t,e,r,i){if(i===0)return;let n=t[r],a=n.metrics.advance*n.scale,s=(t[r].x+a)*i;for(let o=e;o<=r;o++)t[o].x-=s}function bb(t,e,r,i,n,a,s,o,l){let u=(e-r)*n,h=0;h=a===s?-i*l*s+.5*s:-o*i- -17;for(let c of t)for(let p of c.positionedGlyphs)p.x+=u,p.y+=h}function wb(t,e,r){let{horizontalAlign:i,verticalAlign:n}=qd(r),a=e[0],s=e[1],o=a-t.displaySize[0]*i,l=o+t.displaySize[0],u=s-t.displaySize[1]*n;return{image:t,top:u,bottom:u+t.displaySize[1],left:o,right:l}}function Xd(t){var h,c;let e=t.left,r=t.top,i=t.right-e,n=t.bottom-r,a=t.image.content[2]-t.image.content[0],s=t.image.content[3]-t.image.content[1],o=(h=t.image.textFitWidth)!=null?h:"stretchOrShrink",l=(c=t.image.textFitHeight)!=null?c:"stretchOrShrink",u=a/s;if(l==="proportional"){if(o==="stretchOnly"&&i/n<u||o==="proportional"){let p=Math.ceil(n*u);e*=p/i,i=p}}else if(o==="proportional"&&l==="stretchOnly"&&u!==0&&i/n>u){let p=Math.ceil(i/u);r*=p/n,n=p}return{x1:e,y1:r,x2:e+i,y2:r+n}}function Tc(t,e,r,i,n,a){let s=t.image,o;if(s.content){let m=s.content,g=s.pixelRatio||1;o=[m[0]/g,m[1]/g,s.displaySize[0]-m[2]/g,s.displaySize[1]-m[3]/g]}let l=e.left*a,u=e.right*a,h,c,p,f;r==="width"||r==="both"?(f=n[0]+l-i[3],c=n[0]+u+i[1]):(f=n[0]+(l+u-s.displaySize[0])/2,c=f+s.displaySize[0]);let d=e.top*a,y=e.bottom*a;return r==="height"||r==="both"?(h=n[1]+d-i[0],p=n[1]+y+i[2]):(h=n[1]+(d+y-s.displaySize[1])/2,p=h+s.displaySize[1]),{image:s,top:h,right:c,bottom:p,left:f,collisionPadding:o}}var Ic=32640;function Cc(t,e){let{expression:r}=e;if(r.kind==="constant")return{kind:"constant",layoutSize:r.evaluate(new st(t+1))};if(r.kind==="source")return{kind:"source"};if(r.kind==="composite"){let{minZoom:i,maxZoom:n}=Db(r.zoomStops,t);return{kind:"composite",minZoom:i,maxZoom:n,interpolationType:r.interpolationType}}{let i=_b(r),n=r.evaluate(new st(t+1));return{kind:"camera",zoomStops:r.zoomStops,sizes:i,layoutSize:n,interpolationType:r.interpolationType}}}function Db(t,e){let r=0;for(;r<t.length&&t[r]<=e;)r++;r=Math.max(0,r-1);let i=r;for(;i<t.length&&t[i]<e+1;)i++;return i=Math.min(t.length-1,i),{minZoom:t[r],maxZoom:t[i]}}function _b(t){return t.zoomStops.map(e=>t.evaluate(new st(e===-1/0?t.zoomStops[1]-1:e)))}var Jr=class Yd extends B{constructor(e,r,i,n){super(e,r),this.angle=i,n!==void 0&&(this.segment=n)}clone(){return new Yd(this.x,this.y,this.angle,this.segment)}};C("Anchor",Jr);function Wd(t,e,r,i,n){if(e.segment===void 0||r===0)return!0;let a=e,s=e.segment+1,o=0;for(;o>-r/2;){if(s--,s<0)return!1;o-=t[s].dist(a),a=t[s]}o+=t[s].dist(t[s+1]),s++;let l=[],u=0;for(;o<r/2;){let h=t[s-1],c=t[s],p=t[s+1];if(!p)return!1;let f=h.angleTo(c)-c.angleTo(p);for(f=Math.abs((f+3*Math.PI)%(Math.PI*2)-Math.PI),l.push({distance:o,angleDelta:f}),u+=f;o-l[0].distance>i;)u-=l.shift().angleDelta;if(u>n)return!1;s++,o+=c.dist(p)}return!0}function Zd(t){let e=0;for(let r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function Hd(t,e,r){return t?3/5*e*r:0}function Kd(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Ab(t,e,r,i,n,a){let s=Hd(r,n,a),o=Kd(r,i)*a,l=0,u=Zd(t)/2;for(let h=0;h<t.length-1;h++){let c=t[h],p=t[h+1],f=c.dist(p);if(l+f>u){let d=(u-l)/f,y=new Jr(gr.number(c.x,p.x,d),gr.number(c.y,p.y,d),p.angleTo(c),h);return y._round(),!s||Wd(t,y,o,s,e)?y:void 0}l+=f}}function Sb(t,e,r,i,n,a,s,o,l){let u=Hd(i,a,s),h=Kd(i,n),c=h*s,p=t[0].x===0||t[0].x===l||t[0].y===0||t[0].y===l;e-c<e/4&&(e=c+e/4);let f=a*2;return Jd(t,p?e/2*o%e:(h/2+f)*s*o%e,e,u,r,c,p,!1,l)}function Jd(t,e,r,i,n,a,s,o,l){let u=a/2,h=Zd(t),c=0,p=e-r,f=[];for(let d=0;d<t.length-1;d++){let y=t[d],m=t[d+1],g=y.dist(m),x=m.angleTo(y);for(;p+r<c+g;){p+=r;let v=(p-c)/g,b=gr.number(y.x,m.x,v),D=gr.number(y.y,m.y,v);if(b>=0&&b<l&&D>=0&&D<l&&p-u>=0&&p+u<=h){let A=new Jr(b,D,x,d);A._round(),(!i||Wd(t,A,a,i,n))&&f.push(A)}}c+=g}return!o&&!f.length&&!s&&(f=Jd(t,c/2,r,i,n,a,s,!0,l)),f}function Eb(t,e,r,i,n){let a=[];for(let s of t){let o;for(let l=0;l<s.length-1;l++){let u=s[l],h=s[l+1];u.x<e&&h.x<e||(u.x<e?u=new B(e,u.y+(h.y-u.y)*((e-u.x)/(h.x-u.x)))._round():h.x<e&&(h=new B(e,u.y+(h.y-u.y)*((e-u.x)/(h.x-u.x)))._round()),!(u.y<r&&h.y<r)&&(u.y<r?u=new B(u.x+(h.x-u.x)*((r-u.y)/(h.y-u.y)),r)._round():h.y<r&&(h=new B(u.x+(h.x-u.x)*((r-u.y)/(h.y-u.y)),r)._round()),!(u.x>=i&&h.x>=i)&&(u.x>=i?u=new B(i,u.y+(h.y-u.y)*((i-u.x)/(h.x-u.x)))._round():h.x>=i&&(h=new B(i,u.y+(h.y-u.y)*((i-u.x)/(h.x-u.x)))._round()),!(u.y>=n&&h.y>=n)&&(u.y>=n?u=new B(u.x+(h.x-u.x)*((n-u.y)/(h.y-u.y)),n)._round():h.y>=n&&(h=new B(u.x+(h.x-u.x)*((n-u.y)/(h.y-u.y)),n)._round()),(!o||!u.equals(o[o.length-1]))&&(o=[u],a.push(o)),o.push(h)))))}}return a}function Qd(t,e,r,i,n,a){let s=Mc(t,e,r,n,0);return s=Mc(s,e,i,a,1),s}function Mc(t,e,r,i,n){switch(e){case 1:return Fb(t,r,i,n);case 2:return Bc(t,r,i,n,!1);case 3:return Bc(t,r,i,n,!0)}return[]}function Fb(t,e,r,i){let n=[];for(let a of t)for(let s of a){let o=i===0?s.x:s.y;o>=e&&o<=r&&n.push([s])}return n}function kb(t,e,r,i,n){let a=i===0?Tb:Ib,s=[],o=[];for(let h=0;h<t.length-1;h++){let c=t[h],p=t[h+1],f=i===0?c.x:c.y,d=i===0?p.x:p.y,y=!1;f<e?d>e&&s.push(a(c,p,e)):f>r?d<r&&s.push(a(c,p,r)):s.push(c),d<e&&f>=e&&(s.push(a(c,p,e)),y=!0),d>r&&f<=r&&(s.push(a(c,p,r)),y=!0),!n&&y&&(o.push(s),s=[])}let l=t.length-1,u=i===0?t[l].x:t[l].y;return u>=e&&u<=r&&s.push(t[l]),n&&s.length>0&&!s[0].equals(s[s.length-1])&&s.push(new B(s[0].x,s[0].y)),s.length>0&&o.push(s),o}function Bc(t,e,r,i,n){let a=[];for(let s of t){let o=kb(s,e,r,i,n);o.length>0&&a.push(...o)}return a}function Tb(t,e,r){let i=(r-t.x)/(e.x-t.x);return new B(r,t.y+(e.y-t.y)*i)}function Ib(t,e,r){let i=(r-t.y)/(e.y-t.y);return new B(t.x+(e.x-t.x)*i,r)}function Pc(t,e,r,i){let n=[],a=t.image,s=a.pixelRatio,o=a.paddedRect.w-2,l=a.paddedRect.h-2,u={x1:t.left,y1:t.top,x2:t.right,y2:t.bottom},h=a.stretchX||[[0,o]],c=a.stretchY||[[0,l]],p=(F,$)=>F+$[1]-$[0],f=h.reduce(p,0),d=c.reduce(p,0),y=o-f,m=l-d,g=0,x=f,v=0,b=d,D=0,A=y,_=0,S=m;if(a.content&&i){let F=a.content,$=F[2]-F[0],U=F[3]-F[1];(a.textFitWidth||a.textFitHeight)&&(u=Xd(t)),g=ia(h,0,F[0]),v=ia(c,0,F[1]),x=ia(h,F[0],F[2]),b=ia(c,F[1],F[3]),D=F[0]-g,_=F[1]-v,A=$-x,S=U-b}let k=u.x1,z=u.y1,O=u.x2-k,P=u.y2-z,L=(F,$,U,T)=>{let q=na(F.stretch-g,x,O,k),at=aa(F.fixed-D,A,F.stretch,f),ot=na($.stretch-v,b,P,z),pt=aa($.fixed-_,S,$.stretch,d),Et=na(U.stretch-g,x,O,k),qt=aa(U.fixed-D,A,U.stretch,f),Ht=na(T.stretch-v,b,P,z),Ve=aa(T.fixed-_,S,T.stretch,d),ye=new B(q,ot),Kt=new B(Et,ot),Oe=new B(Et,Ht),kr=new B(q,Ht),rr=new B(at/s,pt/s),fi=new B(qt/s,Ve/s),kt=e*Math.PI/180;if(kt){let R=Math.sin(kt),J=Math.cos(kt),W=[J,-R,R,J];ye._matMult(W),Kt._matMult(W),kr._matMult(W),Oe._matMult(W)}let Ee=F.stretch+F.fixed,ir=U.stretch+U.fixed,Tr=$.stretch+$.fixed,Ir=T.stretch+T.fixed;return{tl:ye,tr:Kt,bl:kr,br:Oe,tex:{x:a.paddedRect.x+1+Ee,y:a.paddedRect.y+1+Tr,w:ir-Ee,h:Ir-Tr},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:rr,pixelOffsetBR:fi,minFontScaleX:A/s/O,minFontScaleY:S/s/P,isSDF:r}};if(!i||!a.stretchX&&!a.stretchY)n.push(L({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:o+1},{fixed:0,stretch:l+1}));else{let F=zc(h,y,f),$=zc(c,m,d);for(let U=0;U<F.length-1;U++){let T=F[U],q=F[U+1];for(let at=0;at<$.length-1;at++){let ot=$[at],pt=$[at+1];n.push(L(T,ot,q,pt))}}}return n}function ia(t,e,r){let i=0;for(let n of t)i+=Math.max(e,Math.min(r,n[1]))-Math.max(e,Math.min(r,n[0]));return i}function zc(t,e,r){let i=[{fixed:-1,stretch:0}];for(let[n,a]of t){let s=i[i.length-1];i.push({fixed:n-s.stretch,stretch:s.stretch}),i.push({fixed:n-s.stretch,stretch:s.stretch+(a-n)})}return i.push({fixed:e+1,stretch:r}),i}function na(t,e,r,i){return t/e*r+i}function aa(t,e,r,i){return t-e*r/i}function Cb(t,e,r,i,n,a,s,o){let l=i.layout.get("text-rotate").evaluate(a,{})*Math.PI/180,u=[];for(let h of e.positionedLines)for(let c of h.positionedGlyphs){if(!c.rect)continue;let p=c.rect||{},f=4,d=!0,y=1,m=0,g=(n||o)&&c.vertical,x=c.metrics.advance*c.scale/2;if(o&&e.verticalizable){let T=(c.scale-1)*24,q=(24-c.metrics.width*c.scale)/2;m=h.lineOffset/2-(c.imageName?-q:T)}if(c.imageName){let T=s[c.imageName];d=T.sdf,y=T.pixelRatio,f=1/y}let v=n?[c.x+x,c.y]:[0,0],b=n?[0,0]:[c.x+x+r[0],c.y+r[1]-m],D=[0,0];g&&(D=b,b=[0,0]);let A=c.metrics.isDoubleResolution?2:1,_=(c.metrics.left-f)*c.scale-x+b[0],S=(-c.metrics.top-f)*c.scale+b[1],k=_+p.w/A*c.scale/y,z=S+p.h/A*c.scale/y,O=new B(_,S),P=new B(k,S),L=new B(_,z),F=new B(k,z);if(g){let T=new B(-x,x- -17),q=-Math.PI/2,at=12-x,ot=c.imageName?at:0,pt=new B(22-at,-ot),Et=new B(...D);O._rotateAround(q,T)._add(pt)._add(Et),P._rotateAround(q,T)._add(pt)._add(Et),L._rotateAround(q,T)._add(pt)._add(Et),F._rotateAround(q,T)._add(pt)._add(Et)}if(l){let T=Math.sin(l),q=Math.cos(l),at=[q,-T,T,q];O._matMult(at),P._matMult(at),L._matMult(at),F._matMult(at)}let $=new B(0,0),U=new B(0,0);u.push({tl:O,tr:P,bl:L,br:F,tex:p,writingMode:e.writingMode,glyphOffset:v,sectionIndex:c.sectionIndex,isSDF:d,pixelOffsetTL:$,pixelOffsetBR:U,minFontScaleX:0,minFontScaleY:0})}return u}var sa=class{constructor(t,e,r,i,n,a,s,o,l,u){var h;if(this.boxStartIndex=t.length,l){let c=a.top,p=a.bottom,f=a.collisionPadding;f&&(c-=f[1],p+=f[3]);let d=p-c;d>0&&(d=Math.max(10,d),this.circleDiameter=d)}else{let c=(h=a.image)!=null&&h.content&&(a.image.textFitWidth||a.image.textFitHeight)?Xd(a):{x1:a.left,y1:a.top,x2:a.right,y2:a.bottom};c.y1=c.y1*s-o[0],c.y2=c.y2*s+o[2],c.x1=c.x1*s-o[3],c.x2=c.x2*s+o[1];let p=a.collisionPadding;if(p&&(c.x1-=p[0]*s,c.y1-=p[1]*s,c.x2+=p[2]*s,c.y2+=p[3]*s),u){let f=new B(c.x1,c.y1),d=new B(c.x2,c.y1),y=new B(c.x1,c.y2),m=new B(c.x2,c.y2),g=u*Math.PI/180;f._rotate(g),d._rotate(g),y._rotate(g),m._rotate(g),c.x1=Math.min(f.x,d.x,y.x,m.x),c.x2=Math.max(f.x,d.x,y.x,m.x),c.y1=Math.min(f.y,d.y,y.y,m.y),c.y2=Math.max(f.y,d.y,y.y,m.y)}t.emplaceBack(e.x,e.y,c.x1,c.y1,c.x2,c.y2,r,i,n)}this.boxEndIndex=t.length}},Mb=class{constructor(t=[],e=(r,i)=>r<i?-1:+(r>i)){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r)}push(t){this.data.push(t),this._up(this.length++)}pop(){if(this.length===0)return;let t=this.data[0],e=this.data.pop();return--this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){let{data:e,compare:r}=this,i=e[t];for(;t>0;){let n=t-1>>1,a=e[n];if(r(i,a)>=0)break;e[t]=a,t=n}e[t]=i}_down(t){let{data:e,compare:r}=this,i=this.length>>1,n=e[t];for(;t<i;){let a=(t<<1)+1,s=a+1;if(s<this.length&&r(e[s],e[a])<0&&(a=s),r(e[a],n)>=0)break;e[t]=e[a],t=a}e[t]=n}};function Bb(t,e=1){let r=Fa.fromPoints(t[0]),i=Math.min(r.width(),r.height()),n=i/2,a=new Mb([],Pb),{minX:s,minY:o,maxX:l,maxY:u}=r;if(i===0)return new B(s,o);for(let p=s;p<l;p+=i)for(let f=o;f<u;f+=i)a.push(new qr(p+n,f+n,n,t));let h=Lb(t),c=h;for(;a.length;){let p=a.pop();(p.d>c.d||!c.d)&&(c=p),!(p.max-c.d<=e)&&(n=p.h/2,a.push(new qr(p.p.x-n,p.p.y-n,n,t)),a.push(new qr(p.p.x+n,p.p.y-n,n,t)),a.push(new qr(p.p.x-n,p.p.y+n,n,t)),a.push(new qr(p.p.x+n,p.p.y+n,n,t)))}return h.d>0&&c.d-h.d<=e?h.p:c.p}function Pb(t,e){return e.max-t.max}var qr=class{constructor(t,e,r,i){this.p=new B(t,e),this.h=r,this.d=zb(this.p,i),this.max=this.d+this.h*Math.SQRT2}};function zb(t,e){let r=!1,i=1/0;for(let n of e)for(let a=0,s=n.length,o=s-1;a<s;o=a++){let l=n[a],u=n[o];l.y>t.y!=u.y>t.y&&t.x<(u.x-l.x)*(t.y-l.y)/(u.y-l.y)+l.x&&(r=!r),i=Math.min(i,td(t,l,u))}return(r?1:-1)*Math.sqrt(i)}function Lb(t){let e=0,r=0,i=0,n=t[0];for(let a=0,s=n.length,o=s-1;a<s;o=a++){let l=n[a],u=n[o],h=l.x*u.y-u.x*l.y;r+=(l.x+u.x)*h,i+=(l.y+u.y)*h,e+=h*3}return new qr(r/e,i/e,0,t)}var Vb=(function(t){return t[t.center=1]="center",t[t.left=2]="left",t[t.right=3]="right",t[t.top=4]="top",t[t.bottom=5]="bottom",t[t["top-left"]=6]="top-left",t[t["top-right"]=7]="top-right",t[t["bottom-left"]=8]="bottom-left",t[t["bottom-right"]=9]="bottom-right",t})({}),lu=1/0;function ty(t,e){function r(n,a){let s=0,o=0;a<0&&(a=0);let l=a/Math.SQRT2;switch(n){case"top-right":case"top-left":o=l-7;break;case"bottom-right":case"bottom-left":o=-l+7;break;case"bottom":o=-a+7;break;case"top":o=a-7}switch(n){case"top-right":case"bottom-right":s=-l;break;case"top-left":case"bottom-left":s=l;break;case"left":s=a;break;case"right":s=-a}return[s,o]}function i(n,a,s){let o=0,l=0;switch(a=Math.abs(a),s=Math.abs(s),n){case"top-right":case"top-left":case"top":l=s-7;break;case"bottom-right":case"bottom-left":case"bottom":l=-s+7}switch(n){case"top-right":case"bottom-right":case"right":o=-a;break;case"top-left":case"bottom-left":case"left":o=a}return[o,l]}return e[1]===lu?r(t,e[0]):i(t,e[0],e[1])}function ey(t,e,r){var s;let i=t.layout,n=(s=i.get("text-variable-anchor-offset"))==null?void 0:s.evaluate(e,{},r);if(n){let o=n.values,l=[];for(let u=0;u<o.length;u+=2){let h=l[u]=o[u],c=o[u+1].map(p=>p*24);h.startsWith("top")?c[1]-=7:h.startsWith("bottom")&&(c[1]+=7),l[u+1]=c}return new De(l)}let a=i.get("text-variable-anchor");if(a){let o;o=t._unevaluatedLayout.getValue("text-radial-offset")===void 0?i.get("text-offset").evaluate(e,{},r).map(u=>u*24):[i.get("text-radial-offset").evaluate(e,{},r)*24,lu];let l=[];for(let u of a)l.push(u,ty(u,o));return new De(l)}return null}function Ob(t){var h,c;t.bucket.createArrays();let e=512*t.bucket.overscaling;t.bucket.tilePixelRatio=mt/e,t.bucket.compareText={},t.bucket.iconsNeedLinear=!1;let r=t.bucket.layers[0],i=r.layout,n=r._unevaluatedLayout._values,a={layoutIconSize:n["icon-size"].possiblyEvaluate(new st(t.bucket.zoom+1),t.canonical),layoutTextSize:n["text-size"].possiblyEvaluate(new st(t.bucket.zoom+1),t.canonical),textMaxSize:n["text-size"].possiblyEvaluate(new st(18))};if(t.bucket.textSizeData.kind==="composite"){let{minZoom:p,maxZoom:f}=t.bucket.textSizeData;a.compositeTextSizes=[n["text-size"].possiblyEvaluate(new st(p),t.canonical),n["text-size"].possiblyEvaluate(new st(f),t.canonical)]}if(t.bucket.iconSizeData.kind==="composite"){let{minZoom:p,maxZoom:f}=t.bucket.iconSizeData;a.compositeIconSizes=[n["icon-size"].possiblyEvaluate(new st(p),t.canonical),n["icon-size"].possiblyEvaluate(new st(f),t.canonical)]}let s=i.get("text-line-height")*24,o=i.get("text-rotation-alignment")!=="viewport"&&i.get("symbol-placement")!=="point",l=i.get("text-keep-upright"),u=i.get("text-size");for(let p of t.bucket.features){let f=i.get("text-font").evaluate(p,{},t.canonical).join(","),d=u.evaluate(p,{},t.canonical),y=a.layoutTextSize.evaluate(p,{},t.canonical),m=a.layoutIconSize.evaluate(p,{},t.canonical),g={horizontal:{},vertical:void 0},x=p.text,v=[0,0];if(x){let _=x.toString(),S=i.get("text-letter-spacing").evaluate(p,{},t.canonical)*24,k=bv(_)?S:0,z=i.get("text-anchor").evaluate(p,{},t.canonical),O=ey(r,p,t.canonical);if(!O){let $=i.get("text-radial-offset").evaluate(p,{},t.canonical);v=$?ty(z,[$*24,lu]):i.get("text-offset").evaluate(p,{},t.canonical).map(U=>U*24)}let P=o?"center":i.get("text-justify").evaluate(p,{},t.canonical),L=i.get("symbol-placement")==="point"?i.get("text-max-width").evaluate(p,{},t.canonical)*24:1/0,F=()=>{t.bucket.allowVerticalPlacement&&el(_)&&(g.vertical=ra(x,t.glyphMap,t.glyphPositions,t.imagePositions,f,L,s,z,"left",k,v,2,!0,y,d))};if(!o&&O){let $=new Set;if(P==="auto")for(let T=0;T<O.values.length;T+=2)$.add(Lc(O.values[T]));else $.add(P);let U=!1;for(let T of $)if(!g.horizontal[T])if(U)g.horizontal[T]=g.horizontal[0];else{let q=ra(x,t.glyphMap,t.glyphPositions,t.imagePositions,f,L,s,"center",T,k,v,1,!1,y,d);q&&(g.horizontal[T]=q,U=q.positionedLines.length===1)}F()}else{P==="auto"&&(P=Lc(z));let $=ra(x,t.glyphMap,t.glyphPositions,t.imagePositions,f,L,s,z,P,k,v,1,!1,y,d);$&&(g.horizontal[P]=$),F(),el(_)&&o&&l&&(g.vertical=ra(x,t.glyphMap,t.glyphPositions,t.imagePositions,f,L,s,z,P,k,v,2,!1,y,d))}}let b,D=!1;if((h=p.icon)!=null&&h.name){let _=t.imageMap[p.icon.name];_&&(b=wb(t.imagePositions[p.icon.name],i.get("icon-offset").evaluate(p,{},t.canonical),i.get("icon-anchor").evaluate(p,{},t.canonical)),D=!!_.sdf,t.bucket.sdfIcons===void 0?t.bucket.sdfIcons=D:t.bucket.sdfIcons!==D&&Bt("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),_.pixelRatio===t.bucket.pixelRatio?i.get("icon-rotate").constantOr(1)!==0&&(t.bucket.iconsNeedLinear=!0):t.bucket.iconsNeedLinear=!0)}let A=ry(g.horizontal)||g.vertical;(c=t.bucket).iconsInText||(c.iconsInText=A?A.iconsInText:!1),(A||b)&&Rb(t.bucket,p,g,b,t.imageMap,a,y,m,v,D,t.canonical,t.subdivisionGranularity)}t.showCollisionBoxes&&t.bucket.generateCollisionDebugBuffers()}function Lc(t){switch(t){case"right":case"top-right":case"bottom-right":return"right";case"left":case"top-left":case"bottom-left":return"left"}return"center"}function Rb(t,e,r,i,n,a,s,o,l,u,h,c){let p=a.textMaxSize.evaluate(e,{});p===void 0&&(p=s);let f=t.layers[0].layout,d=f.get("icon-offset").evaluate(e,{},h),y=ry(r.horizontal),m=s/24,g=t.tilePixelRatio*m,x=t.tilePixelRatio*p/24,v=t.tilePixelRatio*o,b=t.tilePixelRatio*f.get("symbol-spacing"),D=f.get("text-padding")*t.tilePixelRatio,A=Jb(f,e,h,t.tilePixelRatio),_=f.get("text-max-angle")/180*Math.PI,S=f.get("text-rotation-alignment")!=="viewport"&&f.get("symbol-placement")!=="point",k=f.get("icon-rotation-alignment").constantOr("viewport")==="map"&&f.get("symbol-placement")!=="point",z=f.get("symbol-placement"),O=b/2,P=f.get("icon-text-fit"),L;i&&P!=="none"&&(t.allowVerticalPlacement&&r.vertical&&(L=Tc(i,r.vertical,P,f.get("icon-text-fit-padding"),d,m)),y&&(i=Tc(i,y,P,f.get("icon-text-fit-padding"),d,m)));let F=h?c.line.getGranularityForZoomLevel(h.z):1,$=(U,T)=>{T.x<0||T.x>=8192||T.y<0||T.y>=8192||Nb(t,T,U,r,i,n,L,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,g,[D,D,D,D],S,l,v,A,k,d,e,a,u,h,s)};if(z==="line")for(let U of Eb(e.geometry,0,0,mt,mt)){let T=cr(U,F),q=Sb(T,b,_,r.vertical||y,i,24,x,t.overscaling,mt);for(let at of q){let ot=y;(!ot||!Ub(t,ot.text,O,at))&&$(T,at)}}else if(z==="line-center"){for(let U of e.geometry)if(U.length>1){let T=cr(U,F),q=Ab(T,_,r.vertical||y,i,24,x);q&&$(T,q)}}else if(e.type==="Polygon")for(let U of Ra(e.geometry,0)){let T=Bb(U,16);$(cr(U[0],F,!0),new Jr(T.x,T.y,0))}else if(e.type==="LineString")for(let U of e.geometry){let T=cr(U,F);$(T,new Jr(T[0].x,T[0].y,0))}else if(e.type==="Point")for(let U of e.geometry)for(let T of U)$([T],new Jr(T.x,T.y,0))}function $b(t,e){let r=t.length,i=e==null?void 0:e.values;if((i==null?void 0:i.length)>0)for(let n=0;n<i.length;n+=2){let a=Vb[i[n]],s=i[n+1];t.emplaceBack(a,s[0],s[1])}return[r,t.length]}function Vc(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y){let m=Cb(e,r,o,n,a,s,i,t.allowVerticalPlacement),g=t.textSizeData,x=null;g.kind==="source"?(x=[128*n.layout.get("text-size").evaluate(s,{})],x[0]>32640&&Bt(`${t.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)):g.kind==="composite"&&(x=[128*d.compositeTextSizes[0].evaluate(s,{},y),128*d.compositeTextSizes[1].evaluate(s,{},y)],(x[0]>32640||x[1]>32640)&&Bt(`${t.layerIds[0]}: Value for "text-size" is >= 255. Reduce your "text-size".`)),t.addSymbols(t.text,m,x,o,a,s,h,e,u.lineStartIndex,u.lineLength,f,y,l);for(let v of c)p[v]=t.text.placedSymbolArray.length-1;return m.length*4}function ry(t){for(let e in t)return t[e];return null}function Nb(t,e,r,i,n,a,s,o,l,u,h,c,p,f,d,y,m,g,x,v,b,D,A,_,S){let k=t.addToLineVertexArray(e,r),z=o.layout.get("symbol-height-offset").evaluate(b,{},_);z>t.maxHeightOffset&&(t.maxHeightOffset=z);let O,P,L,F,$=0,U=0,T=0,q=0,at=-1,ot=-1,pt={},Et=(0,Mo.default)("");if(t.allowVerticalPlacement&&i.vertical){let J=o.layout.get("text-rotate").evaluate(b,{},_)+90,W=i.vertical;L=new sa(l,e,u,h,c,W,p,f,d,J),s&&(F=new sa(l,e,u,h,c,s,m,g,d,J))}if(n){let J=o.layout.get("icon-rotate").evaluate(b,{}),W=o.layout.get("icon-text-fit")!=="none",M=Pc(n,J,A,W),ut=s?Pc(s,J,A,W):void 0;P=new sa(l,e,u,h,c,n,m,g,!1,J),$=M.length*4;let X=t.iconSizeData,G=null;X.kind==="source"?(G=[128*o.layout.get("icon-size").evaluate(b,{})],G[0]>32640&&Bt(`${t.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)):X.kind==="composite"&&(G=[128*D.compositeIconSizes[0].evaluate(b,{},_),128*D.compositeIconSizes[1].evaluate(b,{},_)],(G[0]>32640||G[1]>32640)&&Bt(`${t.layerIds[0]}: Value for "icon-size" is >= 255. Reduce your "icon-size".`)),t.addSymbols(t.icon,M,G,v,x,b,0,e,k.lineStartIndex,k.lineLength,-1,_,z),at=t.icon.placedSymbolArray.length-1,ut&&(U=ut.length*4,t.addSymbols(t.icon,ut,G,v,x,b,2,e,k.lineStartIndex,k.lineLength,-1,_,z),ot=t.icon.placedSymbolArray.length-1)}let qt=Object.keys(i.horizontal);for(let J of qt){let W=i.horizontal[J];O||(O=(Et=(0,Mo.default)(W.text),new sa(l,e,u,h,c,W,p,f,d,o.layout.get("text-rotate").evaluate(b,{},_))));let M=W.positionedLines.length===1;if(T+=Vc(t,e,W,a,o,d,b,y,z,k,i.vertical?1:3,M?qt:[J],pt,at,D,_),M)break}i.vertical&&(q+=Vc(t,e,i.vertical,a,o,d,b,y,z,k,2,["vertical"],pt,ot,D,_));let Ht=O?O.boxStartIndex:t.collisionBoxArray.length,Ve=O?O.boxEndIndex:t.collisionBoxArray.length,ye=L?L.boxStartIndex:t.collisionBoxArray.length,Kt=L?L.boxEndIndex:t.collisionBoxArray.length,Oe=P?P.boxStartIndex:t.collisionBoxArray.length,kr=P?P.boxEndIndex:t.collisionBoxArray.length,rr=F?F.boxStartIndex:t.collisionBoxArray.length,fi=F?F.boxEndIndex:t.collisionBoxArray.length,kt=-1,Ee=(J,W)=>J!=null&&J.circleDiameter?Math.max(J.circleDiameter,W):W;kt=Ee(O,kt),kt=Ee(L,kt),kt=Ee(P,kt),kt=Ee(F,kt);let ir=+(kt>-1);ir&&(kt*=S/24),t.glyphOffsetArray.length>=t.maxGlyphs&&Bt("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),b.sortKey!==void 0&&t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey);let Tr=ey(o,b,_),[Ir,R]=$b(t.textAnchorOffsets,Tr);t.symbolInstances.emplaceBack(e.x,e.y,pt.right>=0?pt.right:-1,pt.center>=0?pt.center:-1,pt.left>=0?pt.left:-1,pt.vertical||-1,at,ot,Et,Ht,Ve,ye,Kt,Oe,kr,rr,fi,u,T,q,$,U,ir,0,p,kt,Ir,R,z)}function Ub(t,e,r,i){let n=t.compareText;if(!(e in n))n[e]=[];else{let a=n[e];for(let s=a.length-1;s>=0;s--)if(i.dist(a[s])<r)return!0}return n[e].push(i),!1}function Oc(t,e,r){let i="never",n=t.get(e);return n?i=n:t.get(r)&&(i="always"),i}var qb=[{name:"a_fade_opacity",components:1,type:"Uint8",offset:0}];function oa(t,e,r,i,n,a,s,o,l,u,h,c,p,f){let d=o?Math.min(Ic,Math.round(o[0])):0,y=o?Math.min(Ic,Math.round(o[1])):0;t.emplaceBack(e,r,Math.round(i*32),Math.round(n*32),a,s,(d<<1)+ +!!l,y,u*16,h*16,c*256,p*256,f)}function jb(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}function Gb(t){for(let e of t.sections)if(Vd(e.text))return!0;return!1}var al=class{constructor(t){this.layoutVertexArray=new eg,this.indexArray=new wn,this.programConfigurations=t,this.segments=new ee,this.dynamicLayoutVertexArray=new rg,this.opacityVertexArray=new ig,this.hasVisibleVertices=!1,this.placedSymbolArray=new Rf}isEmpty(){return this.layoutVertexArray.length===0&&this.indexArray.length===0&&this.dynamicLayoutVertexArray.length===0&&this.opacityVertexArray.length===0}upload(t,e,r,i){this.isEmpty()||(r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,X2.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,Y2.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,qb,!0),this.opacityVertexBuffer.itemSize=1),(r||i)&&this.programConfigurations.upload(t))}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())}};C("SymbolBuffers",al);var sl=class{constructor(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new ee,this.collisionVertexArray=new ng}upload(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,W2.members,!0)}destroy(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())}};C("CollisionBuffers",sl);var iy=class{constructor(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(s=>s.id),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasDependencies=!0,this.hasRTLText=!1,this.maxHeightOffset=0,this.sortKeyRanges=[],this.collisionCircleArray=[],this.maxGlyphs=65535;let e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=Cc(this.zoom,e["text-size"]),this.iconSizeData=Cc(this.zoom,e["icon-size"]);let r=this.layers[0].layout,i=r.get("symbol-sort-key"),n=r.get("symbol-z-order");this.canOverlap=Oc(r,"text-overlap","text-allow-overlap")!=="never"||Oc(r,"icon-overlap","icon-allow-overlap")!=="never"||r.get("text-ignore-placement")||r.get("icon-ignore-placement"),this.sortFeaturesByKey=n!=="viewport-y"&&!i.isConstant();let a=n==="viewport-y"||n==="auto"&&!this.sortFeaturesByKey;this.sortFeaturesByY=a&&this.canOverlap,r.get("symbol-placement")==="point"&&(this.writingModes=r.get("text-writing-mode").map(s=>Nd[s])),this.stateDependentLayerIds=this.layers.filter(s=>s.isStateDependent()).map(s=>s.id),this.sourceID=t.sourceID}createArrays(){this.text=new al(new vr(this.layers,this.zoom,t=>t.startsWith("text"))),this.icon=new al(new vr(this.layers,this.zoom,t=>t.startsWith("icon"))),this.glyphOffsetArray=new Uf,this.lineVertexArray=new qf,this.symbolInstances=new Nf,this.textAnchorOffsets=new Gf}calculateGlyphDependencies(t,e,r,i,n){var l;let a=(i||this.allowVerticalPlacement)&&n,s=iu.fromFeature(t,r),o=s.graphemes();for(let u=0;u<o.length;u++){let h=s.getSection(u);if("imageName"in h)continue;let c=e[l=h.fontStack]||(e[l]={}),p=o[u];Pd(p)&&(c[p]=!0);for(let f of p){if(c[f]=!0,!a)continue;let d=Gr[f];d&&(c[d]=!0)}}}populate(t,e,r){var y;let i=this.layers[0],n=i.layout,a=n.get("text-font"),s=n.get("text-field"),o=n.get("icon-image"),l=(s.value.kind!=="constant"||s.value.value instanceof ze&&!s.value.value.isEmpty()||s.value.value.toString().length>0)&&(a.value.kind!=="constant"||a.value.value.length>0),u=o.value.kind!=="constant"||!!o.value.value||Object.keys(o.parameters).length>0,h=n.get("symbol-sort-key");if(this.features=[],!l&&!u)return;let c=e.iconDependencies,p=e.glyphDependencies,f=e.availableImages,d=new st(this.zoom);for(let{feature:m,id:g,index:x,sourceLayerIndex:v}of t){let b=i._featureFilter.needGeometry,D=hi(m,b);if(!i._featureFilter.filter(d,D,r))continue;b||(D.geometry=Ar(m));let A;if(l){let z=i.getValueAndResolveTokens("text-field",D,r,f),O=ze.factory(z);this.hasRTLText||(this.hasRTLText=Gb(O)),A=gv(O,i,D)}let _;if(u){let z=i.getValueAndResolveTokens("icon-image",D,r,f);_=z instanceof _e?z:_e.fromString(z)}if(!A&&!_)continue;let S=this.sortFeaturesByKey?h.evaluate(D,{},r):void 0,k={id:g,text:A,icon:_,index:x,sourceLayerIndex:v,geometry:D.geometry,properties:m.properties,type:Dn.types[m.type],sortKey:S};if(this.features.push(k),_&&(c[_.name]=!0),A){let z=a.evaluate(D,{},r).join(","),O=n.get("text-rotation-alignment")!=="viewport"&&n.get("symbol-placement")!=="point";this.allowVerticalPlacement=(y=this.writingModes)==null?void 0:y.includes(2);let P=el(A.toString());this.calculateGlyphDependencies(A,p,z,O,P);for(let L of A.sections)L.image&&(c[L.image.name]=!0)}}n.get("symbol-placement")==="line"&&(this.features=xv(this.features)),this.sortFeaturesByKey&&this.features.sort((m,g)=>m.sortKey-g.sortKey)}update(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,{imagePositions:r}),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,{imagePositions:r}))}addFeatures({options:t,canonical:e,glyphMap:r,glyphPositions:i,iconMap:n,iconPositions:a,showCollisionBoxes:s}){Ob({bucket:this,glyphMap:r,glyphPositions:i,imageMap:n,imagePositions:a,showCollisionBoxes:s,canonical:e,subdivisionGranularity:t.subdivisionGranularity})}isEmpty(){return this.symbolInstances.length===0}uploadPending(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload}upload(t){!this.uploaded&&this.hasDebugData()&&(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0}destroyDebugData(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()}destroy(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()&&this.destroyDebugData()}addToLineVertexArray(t,e){let r=this.lineVertexArray.length;if(t.segment!==void 0){let i=t.dist(e[t.segment+1]),n=t.dist(e[t.segment]),a={};for(let s=t.segment+1;s<e.length;s++)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s<e.length-1&&(i+=e[s+1].dist(e[s]));for(let s=t.segment||0;s>=0;s--)a[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:n},s>0&&(n+=e[s-1].dist(e[s]));for(let s=0;s<e.length;s++){let o=a[s];this.lineVertexArray.emplaceBack(o.x,o.y,o.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}}addSymbols(t,e,r,i,n,a,s,o,l,u,h,c,p){let f=t.indexArray,d=t.layoutVertexArray,y=t.segments.prepareSegment(4*e.length,d,f,this.canOverlap?a.sortKey:void 0),m=this.glyphOffsetArray.length,g=y.vertexLength,x=this.allowVerticalPlacement&&s===2?Math.PI/2:0,v=a.text&&a.text.sections;for(let b=0;b<e.length;b++){let{tl:D,tr:A,bl:_,br:S,tex:k,pixelOffsetTL:z,pixelOffsetBR:O,minFontScaleX:P,minFontScaleY:L,glyphOffset:F,isSDF:$,sectionIndex:U}=e[b],T=y.vertexLength,q=F[1];oa(d,o.x,o.y,D.x,q+D.y,k.x,k.y,r,$,z.x,z.y,P,L,p),oa(d,o.x,o.y,A.x,q+A.y,k.x+k.w,k.y,r,$,O.x,z.y,P,L,p),oa(d,o.x,o.y,_.x,q+_.y,k.x,k.y+k.h,r,$,z.x,O.y,P,L,p),oa(d,o.x,o.y,S.x,q+S.y,k.x+k.w,k.y+k.h,r,$,O.x,O.y,P,L,p),jb(t.dynamicLayoutVertexArray,o,x),f.emplaceBack(T,T+2,T+1),f.emplaceBack(T+1,T+2,T+3),y.vertexLength+=4,y.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(F[0]),(b===e.length-1||U!==e[b+1].sectionIndex)&&t.programConfigurations.populatePaintArrays(d.length,a,a.index,{imagePositions:{},canonical:c,formattedSection:v==null?void 0:v[U]})}t.placedSymbolArray.emplaceBack(o.x,o.y,m,this.glyphOffsetArray.length-m,g,l,u,o.segment,r?r[0]:0,r?r[1]:0,i[0],i[1],s,0,!1,0,h,p)}_addCollisionDebugVertex(t,e,r,i,n,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,i,n,Math.round(a.x),Math.round(a.y))}addCollisionDebugVertices(t,e,r,i,n,a,s){let o=n.segments.prepareSegment(4,n.layoutVertexArray,n.indexArray),l=o.vertexLength,u=n.layoutVertexArray,h=n.collisionVertexArray,c=s.anchorX,p=s.anchorY;this._addCollisionDebugVertex(u,h,a,c,p,new B(t,e)),this._addCollisionDebugVertex(u,h,a,c,p,new B(r,e)),this._addCollisionDebugVertex(u,h,a,c,p,new B(r,i)),this._addCollisionDebugVertex(u,h,a,c,p,new B(t,i)),o.vertexLength+=4;let f=n.indexArray;f.emplaceBack(l,l+1),f.emplaceBack(l+1,l+2),f.emplaceBack(l+2,l+3),f.emplaceBack(l+3,l),o.primitiveLength+=4}addDebugCollisionBoxes(t,e,r,i){for(let n=t;n<e;n++){let a=this.collisionBoxArray.get(n),s=a.x1,o=a.y1,l=a.x2,u=a.y2;this.addCollisionDebugVertices(s,o,l,u,i?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r)}}generateCollisionDebugBuffers(){this.hasDebugData()&&this.destroyDebugData(),this.textCollisionBox=new sl(Gh,mc.members,Io),this.iconCollisionBox=new sl(Gh,mc.members,Io);for(let t=0;t<this.symbolInstances.length;t++){let e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1)}}_deserializeCollisionBoxesForSymbol(t,e,r,i,n,a,s,o,l){let u={};for(let h=e;h<r;h++){let c=t.get(h);u.textBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.textFeatureIndex=c.featureIndex;break}for(let h=i;h<n;h++){let c=t.get(h);u.verticalTextBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.verticalTextFeatureIndex=c.featureIndex;break}for(let h=a;h<s;h++){let c=t.get(h);u.iconBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.iconFeatureIndex=c.featureIndex;break}for(let h=o;h<l;h++){let c=t.get(h);u.verticalIconBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},u.verticalIconFeatureIndex=c.featureIndex;break}return u}deserializeCollisionBoxes(t){this.collisionArrays=[];for(let e=0;e<this.symbolInstances.length;e++){let r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex))}}hasTextData(){return this.text.segments.get().length>0}hasIconData(){return this.icon.segments.get().length>0}hasDebugData(){return this.textCollisionBox&&this.iconCollisionBox}hasTextCollisionBoxData(){return this.hasDebugData()&&this.textCollisionBox.segments.get().length>0}hasIconCollisionBoxData(){return this.hasDebugData()&&this.iconCollisionBox.segments.get().length>0}addIndicesForPlacedSymbol(t,e){let r=t.placedSymbolArray.get(e),i=r.vertexStartIndex+r.numGlyphs*4;for(let n=r.vertexStartIndex;n<i;n+=4)t.indexArray.emplaceBack(n,n+2,n+1),t.indexArray.emplaceBack(n+1,n+2,n+3)}getSortedSymbolIndexes(t){if(this.sortedAngle===t&&this.symbolInstanceIndexes!==void 0)return this.symbolInstanceIndexes;let e=Math.sin(t),r=Math.cos(t),i=[],n=[],a=[];for(let s=0;s<this.symbolInstances.length;++s){a.push(s);let o=this.symbolInstances.get(s);i.push(Math.round(e*o.anchorX+r*o.anchorY)|0),n.push(o.featureIndex)}return a.sort((s,o)=>i[s]-i[o]||n[o]-n[s]),a}addToSortKeyRanges(t,e){let r=this.sortKeyRanges[this.sortKeyRanges.length-1];(r==null?void 0:r.sortKey)===e?r.symbolInstanceEnd=t+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1})}sortFeatures(t){if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(let e of this.symbolInstanceIndexes){let r=this.symbolInstances.get(e);this.featureSortOrder.push(r.featureIndex);let i=[r.rightJustifiedTextSymbolIndex,r.centerJustifiedTextSymbolIndex,r.leftJustifiedTextSymbolIndex];for(let n=0;n<i.length;n++){let a=i[n];a>=0&&i.indexOf(a)===n&&this.addIndicesForPlacedSymbol(this.text,a)}r.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.text,r.verticalPlacedTextSymbolIndex),r.placedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,r.placedIconSymbolIndex),r.verticalPlacedIconSymbolIndex>=0&&this.addIndicesForPlacedSymbol(this.icon,r.verticalPlacedIconSymbolIndex)}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}}};C("SymbolBucket",iy,{omit:["layers","collisionBoxArray","features","compareText"]});function Xb(t,e){return e.replace(/{([^{}]+)}/g,(r,i)=>t&&i in t?String(t[i]):"")}var Yb,Wb=()=>Yb||(Yb=new Xt({"symbol-placement":new V(w.layout_symbol["symbol-placement"],"symbol-placement"),"symbol-spacing":new V(w.layout_symbol["symbol-spacing"],"symbol-spacing"),"symbol-avoid-edges":new V(w.layout_symbol["symbol-avoid-edges"],"symbol-avoid-edges"),"symbol-sort-key":new N(w.layout_symbol["symbol-sort-key"],"symbol-sort-key"),"symbol-z-order":new V(w.layout_symbol["symbol-z-order"],"symbol-z-order"),"icon-allow-overlap":new V(w.layout_symbol["icon-allow-overlap"],"icon-allow-overlap"),"icon-overlap":new V(w.layout_symbol["icon-overlap"],"icon-overlap"),"icon-ignore-placement":new V(w.layout_symbol["icon-ignore-placement"],"icon-ignore-placement"),"icon-optional":new V(w.layout_symbol["icon-optional"],"icon-optional"),"icon-rotation-alignment":new N(w.layout_symbol["icon-rotation-alignment"],"icon-rotation-alignment"),"icon-size":new N(w.layout_symbol["icon-size"],"icon-size"),"icon-text-fit":new V(w.layout_symbol["icon-text-fit"],"icon-text-fit"),"icon-text-fit-padding":new V(w.layout_symbol["icon-text-fit-padding"],"icon-text-fit-padding"),"icon-image":new N(w.layout_symbol["icon-image"],"icon-image"),"icon-rotate":new N(w.layout_symbol["icon-rotate"],"icon-rotate"),"icon-padding":new N(w.layout_symbol["icon-padding"],"icon-padding"),"icon-keep-upright":new V(w.layout_symbol["icon-keep-upright"],"icon-keep-upright"),"icon-offset":new N(w.layout_symbol["icon-offset"],"icon-offset"),"icon-anchor":new N(w.layout_symbol["icon-anchor"],"icon-anchor"),"icon-pitch-alignment":new V(w.layout_symbol["icon-pitch-alignment"],"icon-pitch-alignment"),"text-pitch-alignment":new V(w.layout_symbol["text-pitch-alignment"],"text-pitch-alignment"),"text-rotation-alignment":new V(w.layout_symbol["text-rotation-alignment"],"text-rotation-alignment"),"text-field":new N(w.layout_symbol["text-field"],"text-field"),"text-font":new N(w.layout_symbol["text-font"],"text-font"),"text-size":new N(w.layout_symbol["text-size"],"text-size"),"text-max-width":new N(w.layout_symbol["text-max-width"],"text-max-width"),"text-line-height":new V(w.layout_symbol["text-line-height"],"text-line-height"),"text-letter-spacing":new N(w.layout_symbol["text-letter-spacing"],"text-letter-spacing"),"text-justify":new N(w.layout_symbol["text-justify"],"text-justify"),"text-radial-offset":new N(w.layout_symbol["text-radial-offset"],"text-radial-offset"),"text-variable-anchor":new V(w.layout_symbol["text-variable-anchor"],"text-variable-anchor"),"text-variable-anchor-offset":new N(w.layout_symbol["text-variable-anchor-offset"],"text-variable-anchor-offset"),"text-anchor":new N(w.layout_symbol["text-anchor"],"text-anchor"),"text-max-angle":new V(w.layout_symbol["text-max-angle"],"text-max-angle"),"text-writing-mode":new V(w.layout_symbol["text-writing-mode"],"text-writing-mode"),"text-rotate":new N(w.layout_symbol["text-rotate"],"text-rotate"),"text-padding":new V(w.layout_symbol["text-padding"],"text-padding"),"text-keep-upright":new V(w.layout_symbol["text-keep-upright"],"text-keep-upright"),"text-transform":new N(w.layout_symbol["text-transform"],"text-transform"),"text-offset":new N(w.layout_symbol["text-offset"],"text-offset"),"text-allow-overlap":new V(w.layout_symbol["text-allow-overlap"],"text-allow-overlap"),"text-overlap":new V(w.layout_symbol["text-overlap"],"text-overlap"),"text-ignore-placement":new V(w.layout_symbol["text-ignore-placement"],"text-ignore-placement"),"text-optional":new V(w.layout_symbol["text-optional"],"text-optional"),"symbol-height-offset":new N(w.layout_symbol["symbol-height-offset"],"symbol-height-offset"),"symbol-height-anchor":new V(w.layout_symbol["symbol-height-anchor"],"symbol-height-anchor")})),Zb,Hb=()=>Zb||(Zb=new Xt({"icon-opacity":new N(w.paint_symbol["icon-opacity"],"icon-opacity"),"icon-color":new N(w.paint_symbol["icon-color"],"icon-color"),"icon-halo-color":new N(w.paint_symbol["icon-halo-color"],"icon-halo-color"),"icon-halo-width":new N(w.paint_symbol["icon-halo-width"],"icon-halo-width"),"icon-halo-blur":new N(w.paint_symbol["icon-halo-blur"],"icon-halo-blur"),"icon-translate":new V(w.paint_symbol["icon-translate"],"icon-translate"),"icon-translate-anchor":new V(w.paint_symbol["icon-translate-anchor"],"icon-translate-anchor"),"text-opacity":new N(w.paint_symbol["text-opacity"],"text-opacity"),"text-color":new N(w.paint_symbol["text-color"],"text-color",{runtimeType:ce,getOverride:t=>t.textColor,hasOverride:t=>!!t.textColor}),"text-halo-color":new N(w.paint_symbol["text-halo-color"],"text-halo-color"),"text-halo-width":new N(w.paint_symbol["text-halo-width"],"text-halo-width"),"text-halo-blur":new N(w.paint_symbol["text-halo-blur"],"text-halo-blur"),"text-translate":new V(w.paint_symbol["text-translate"],"text-translate"),"text-translate-anchor":new V(w.paint_symbol["text-translate-anchor"],"text-translate-anchor")})),Ys={get paint(){return Hb()},get layout(){return Wb()}},ny=class{constructor(t){if(t.property.overrides===void 0)throw Error("overrides must be provided to instantiate FormatSectionOverride class");this.type=t.property.overrides?t.property.overrides.runtimeType:dn,this.defaultValue=t}evaluate(t){if(t.formattedSection){let e=this.defaultValue.property.overrides;if(e!=null&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default}eachChild(t){if(!this.defaultValue.isConstant()){let e=this.defaultValue.value;t(e._styleExpression.expression)}}outputDefined(){return!1}serialize(){return null}};C("FormatSectionOverride",ny,{omit:["defaultValue"]});var Kb=class ol extends de{constructor(e,r){super(e,Ys,r)}recalculate(e,r){super.recalculate(e,r);let i=this.layout.get("icon-rotation-alignment");if((i.value.kind!=="constant"||i.value.value==="auto")&&(this.layout._values["icon-rotation-alignment"]=new se(i.property,{kind:"constant",value:this.layout.get("symbol-placement")==="point"?"viewport":"map"},i.parameters)),this.layout.get("text-rotation-alignment")==="auto"&&(this.layout.get("symbol-placement")==="point"?this.layout._values["text-rotation-alignment"]="viewport":this.layout._values["text-rotation-alignment"]="map"),this.layout.get("text-pitch-alignment")==="auto"&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")==="map"?"map":"viewport"),this.layout.get("icon-pitch-alignment")==="auto"&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment").constantOr("viewport")),this.layout.get("symbol-placement")==="point"){let n=this.layout.get("text-writing-mode");if(n){let a=[];for(let s of n)a.includes(s)||a.push(s);this.layout._values["text-writing-mode"]=a}else this.layout._values["text-writing-mode"]=["horizontal"]}this._setPaintOverrides()}getValueAndResolveTokens(e,r,i,n){let a=this.layout.get(e).evaluate(r,{},i,n),s=this._unevaluatedLayout._values[e];return!s.isDataDriven()&&!ja(s.value)&&a?Xb(r.properties,a):a}createBucket(e){return new iy(e)}queryRadius(){return 0}queryIntersectsFeature(){throw Error("Should take a different path in FeatureIndex")}_setPaintOverrides(){for(let e of Ys.paint.overridableProperties){if(!ol.hasPaintOverride(this.layout,e))continue;let r=this.paint.get(e),i=new Il(new ny(r),`layers[${this.id}].paint.${r.property.name}`,r.property.specification),n=null;n=r.value.kind==="constant"||r.value.kind==="source"?new an("source",i):new wa("composite",i,r.value.zoomStops),this.paint._values[e]=new se(r.property,n,r.parameters)}}_handleOverridablePaintPropertyUpdate(e,r,i){return!this.layout||r.isDataDriven()||i.isDataDriven()?!1:ol.hasPaintOverride(this.layout,e)}static hasPaintOverride(e,r){let i=e.get("text-field"),n=Ys.paint.properties[r],a=!1,s=o=>{var l;for(let u of o)if((l=n.overrides)!=null&&l.hasOverride(u)){a=!0;return}};if(i.value.kind==="constant"&&i.value.value instanceof ze)s(i.value.value.sections);else if(i.value.kind==="source"||i.value.kind==="composite"){let o=u=>{if(!a)if(u instanceof ri&&_t(u.value)===yn){let h=u.value;s(h.sections)}else u instanceof Ep?s(u.sections):u.eachChild(o)},l=i.value;l._styleExpression&&o(l._styleExpression.expression)}return a}};function Jb(t,e,r,i=1){var a;let n=(a=t.get("icon-padding").evaluate(e,{},r))==null?void 0:a.values;return[n[0]*i,n[1]*i,n[2]*i,n[3]*i]}var Qb,tw=()=>Qb||(Qb=new Xt({"background-color":new V(w.paint_background["background-color"],"background-color"),"background-pattern":new Lf(w.paint_background["background-pattern"],"background-pattern"),"background-opacity":new V(w.paint_background["background-opacity"],"background-opacity")})),ew={get paint(){return tw()}};var rw=class extends de{constructor(t,e){super(t,ew,e)}};var iw=class extends de{constructor(t,e){super(t,{},e),this.onAdd=r=>{this.implementation.onAdd&&this.implementation.onAdd(r,r.painter.context.gl)},this.onRemove=r=>{this.implementation.onRemove&&this.implementation.onRemove(r,r.painter.context.gl)},this.implementation=t}is3D(){return this.implementation.renderingMode==="3d"}hasOffscreenPass(){return this.implementation.prerender!==void 0}recalculate(){}updateTransitions(){}hasTransition(){return!1}serialize(){throw Error("Custom layers cannot be serialized")}};function ay(t,e){if(t.type==="custom")return new iw(t,e);switch(t.type){case"background":return new rw(t,e);case"circle":return new Bg(t,e);case"color-relief":return new Yg(t,e);case"fill":return new Ex(t,e);case"fill-extrusion":return new Hx(t,e);case"heatmap":return new Rg(t,e);case"hillshade":return new qg(t,e);case"line":return new G2(t,e);case"raster":return new Xm(t,e);case"symbol":return new Kb(t,e)}}var nw=class{constructor(t){this._methodToThrottle=t,this._triggered=!1,this._channel=new MessageChannel,this._channel.port2.onmessage=()=>{this._triggered=!1,this._methodToThrottle()}}trigger(){var t;this._triggered||(this._triggered=!0,(t=this._channel)==null||t.port1.postMessage(!0))}remove(){delete this._channel,this._methodToThrottle=()=>{}}},aw={once:!0},sy=class{constructor(t,e){this.target=t,this.mapId=e,this.resolveRejects={},this.tasks={},this.taskQueue=[],this.abortControllers={},this.messageHandlers={},this.invoker=new nw(()=>this.process()),this.subscription=hh(this.target,"message",r=>this.receive(r),!1),this.globalScope=mr(self)?t:window}registerMessageHandler(t,e){this.messageHandlers[t]=e}unregisterMessageHandler(t){delete this.messageHandlers[t]}sendAsync(t,e){return new Promise((r,i)=>{let n=Math.round(Math.random()*1e18).toString(36).substring(0,10),a=e?hh(e.signal,"abort",()=>{a==null||a.unsubscribe(),delete this.resolveRejects[n];let l={id:n,type:"<cancel>",origin:location.origin,targetMapId:t.targetMapId,sourceMapId:this.mapId};this.target.postMessage(l),i(new dl(e.signal.reason))},aw):null;this.resolveRejects[n]={resolve:l=>{a==null||a.unsubscribe(),r(l)},reject:l=>{a==null||a.unsubscribe(),i(l)}};let s=[],o=Si(je({},t),{id:n,sourceMapId:this.mapId,origin:location.origin,data:Yi(t.data,s)});this.target.postMessage(o,{transfer:s})})}receive(t){let e=t.data,r=e.id,i=["file://","resource://android","null"],n=[e.origin,location.origin],a=e.origin===location.origin,s=n.some(o=>i.includes(o));if((a||s)&&!(e.targetMapId&&this.mapId!==e.targetMapId)){if(e.type==="<cancel>"){delete this.tasks[r];let o=this.abortControllers[r];delete this.abortControllers[r],o&&o.abort();return}if(mr(self)||e.mustQueue){this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger();return}this.processTask(r,e)}}process(){if(this.taskQueue.length===0)return;let t=this.taskQueue.shift(),e=this.tasks[t];delete this.tasks[t],this.taskQueue.length>0&&this.invoker.trigger(),e&&this.processTask(t,e)}processTask(t,e){return rt(this,null,function*(){if(e.type==="<response>"){let n=this.resolveRejects[t];if(delete this.resolveRejects[t],!n)return;e.error?n.reject(Ki(Wi(e.error))):n.resolve(Wi(e.data));return}if(!this.messageHandlers[e.type]){this.completeTask(t,null,null);return}let r=Wi(e.data),i=new AbortController;this.abortControllers[t]=i;try{let n=yield this.messageHandlers[e.type](e.sourceMapId,r,i);this.completeTask(t,null,n)}catch(n){this.completeTask(t,Ki(n))}})}completeTask(t,e,r){let i=[];delete this.abortControllers[t];let n={id:t,type:"<response>",sourceMapId:this.mapId,origin:location.origin,error:e?Yi(e):null,data:Yi(r,i)};this.target.postMessage(n,{transfer:i})}remove(){this.invoker.remove(),this.subscription.unsubscribe()}};function sw(t,e,r){return!(t<0||t>25||r<0||r>=2**t||e<0||e>=2**t)}var oy=class{constructor(t,e,r){if(!sw(t,e,r))throw Error(`x=${e}, y=${r}, z=${t} outside of bounds. 0<=x<${2**t}, 0<=y<${2**t} 0<=z<=25 `);this.z=t,this.x=e,this.y=r,this.key=Hi(0,t,t,e,r)}equals(t){return this.z===t.z&&this.x===t.x&&this.y===t.y}url(t,e,r){let i=lw(this.x,this.y,this.z),n=uw(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(/{prefix}/g,(this.x%16).toString(16)+(this.y%16).toString(16)).replace(/{z}/g,String(this.z)).replace(/{x}/g,String(this.x)).replace(/{y}/g,String(r==="tms"?2**this.z-this.y-1:this.y)).replace(/{ratio}/g,e>1?"@2x":"").replace(/{quadkey}/g,n).replace(/{bbox-epsg-3857}/g,i)}isChildOf(t){let e=this.z-t.z;return e>0&&t.x===this.x>>e&&t.y===this.y>>e}getTilePoint(t){let e=2**this.z;return new B((t.x*e-this.x)*mt,(t.y*e-this.y)*mt)}toString(){return`${this.z}/${this.x}/${this.y}`}},ow=class{constructor(t,e){this.wrap=t,this.canonical=e,this.key=Hi(t,e.z,e.z,e.x,e.y)}},uu=class ne{constructor(e,r,i,n,a){if(this.terrainRttPosMatrix32f=null,e<i)throw Error(`overscaledZ should be >= z; overscaledZ = ${e}; z = ${i}`);this.overscaledZ=e,this.wrap=r,this.canonical=new oy(i,+n,+a),this.key=Hi(r,e,i,n,a)}clone(){return new ne(this.overscaledZ,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)}equals(e){return this.overscaledZ===e.overscaledZ&&this.wrap===e.wrap&&this.canonical.equals(e.canonical)}scaledTo(e){if(e>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${e}; overscaledZ = ${this.overscaledZ}`);let r=this.canonical.z-e;return e>this.canonical.z?new ne(e,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new ne(e,this.wrap,e,this.canonical.x>>r,this.canonical.y>>r)}isOverscaled(){return this.overscaledZ>this.canonical.z}calculateScaledKey(e,r){if(e>this.overscaledZ)throw Error(`targetZ > this.overscaledZ; targetZ = ${e}; overscaledZ = ${this.overscaledZ}`);let i=this.canonical.z-e;return e>this.canonical.z?Hi(this.wrap*+r,e,this.canonical.z,this.canonical.x,this.canonical.y):Hi(this.wrap*+r,e,e,this.canonical.x>>i,this.canonical.y>>i)}isChildOf(e){if(e.wrap!==this.wrap||this.overscaledZ-e.overscaledZ<=0)return!1;if(e.overscaledZ===0)return this.overscaledZ>0;let r=this.canonical.z-e.canonical.z;return r<0?!1:e.canonical.x===this.canonical.x>>r&&e.canonical.y===this.canonical.y>>r}children(e){if(this.overscaledZ>=e)return[new ne(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];let r=this.canonical.z+1,i=this.canonical.x*2,n=this.canonical.y*2;return[new ne(r,this.wrap,r,i,n),new ne(r,this.wrap,r,i+1,n),new ne(r,this.wrap,r,i,n+1),new ne(r,this.wrap,r,i+1,n+1)]}isLessThan(e){return this.wrap<e.wrap?!0:this.wrap>e.wrap?!1:this.overscaledZ<e.overscaledZ?!0:this.overscaledZ>e.overscaledZ?!1:this.canonical.x<e.canonical.x?!0:this.canonical.x>e.canonical.x?!1:this.canonical.y<e.canonical.y}wrapped(){return new ne(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)}unwrapTo(e){return new ne(this.overscaledZ,e,this.canonical.z,this.canonical.x,this.canonical.y)}overscaleFactor(){return 2**(this.overscaledZ-this.canonical.z)}toUnwrapped(){return new ow(this.wrap,this.canonical)}toString(){return`${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}`}getTilePoint(e){return this.canonical.getTilePoint(new Yl(e.x-this.wrap,e.y))}normalizeCoordinates(e,r,i=mt){if(e>=0&&e<i&&r>=0&&r<i)return{tileID:this,x:e,y:r};let n=Math.floor(e/i),a=Math.floor(r/i),s=e-n*i,o=r-a*i,l=this.canonical.z,u=1<<l,h=this.canonical.y+a;if(h<0||h>=u)return null;let c=this.canonical.x+n,p=this.wrap;return c<0?(p-=Math.ceil(-c/u),c=(c%u+u)%u):c>=u&&(p+=Math.floor(c/u),c%=u),{tileID:new ne(this.overscaledZ,p,l,c,h),x:s,y:o}}};function Hi(t,e,r,i,n){t*=2,t<0&&(t=t*-1-1);let a=1<<r;return(a*a*t+a*n+i).toString(36)+r.toString(36)+e.toString(36)}var Ws=Math.PI*6378137;function lw(t,e,r){e=2**r-e-1;let i=Rc(t*256,e*256,r),n=Rc((t+1)*256,(e+1)*256,r);return`${i[0]},${i[1]},${n[0]},${n[1]}`}function Rc(t,e,r){let i=2*Ws/256/2**r;return[t*i-Ws,e*i-Ws]}function uw(t,e,r){let i="";for(let n=t;n>0;n--){let a=1<<n-1;i+=(e&a?1:0)+(r&a?2:0)}return i}C("CanonicalTileID",oy),C("OverscaledTileID",uu,{omit:["terrainRttPosMatrix32f"]});var hw=class{constructor(t,e){this.feature=t,this.type=t.type,this.properties=t.tags?t.tags:{},this.extent=e,"id"in t&&(typeof t.id=="string"?this.id=parseInt(t.id,10):typeof t.id=="number"&&!isNaN(t.id)&&(this.id=t.id))}loadGeometry(){let t=[],e=this.feature.type===1?[this.feature.geometry]:this.feature.geometry;for(let r of e){let i=[];for(let n of r)i.push(new B(n[0],n[1]));t.push(i)}return t}},ll="_geojsonTileLayer",ly=class{constructor(t,e){this.layers={[ll]:this},this.name=ll,this.version=e?e.version:1,this.extent=e?e.extent:4096,this.length=t.length,this.features=t}feature(t){return new hw(this.features[t],this.extent)}};function hu(t,e=""){let r=new Rv;return cw(t,r,e),r.finish()}function cw(t,e,r=""){for(let i in t.layers)e.writeMessage(3,(n,a)=>pw(n,a,r),t.layers[i])}function pw(t,e,r=""){e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||""),e.writeVarintField(5,t.extent||4096);let i={jsonPrefix:r,keys:[],values:[],keycache:{},valuecache:{}};for(let s=0;s<t.length;s++)i.feature=t.feature(s),e.writeMessage(2,fw,i);let n=i.keys;for(let s of n)e.writeStringField(3,s);let a=i.values;for(let s of a)e.writeMessage(4,mw,s)}function fw(t,e){if(!t.feature)return;let r=t.feature;r.id!==void 0&&e.writeVarintField(1,r.id),e.writeMessage(2,dw,t),e.writeVarintField(3,r.type),e.writeMessage(4,yw,r)}function dw(t,e){var r;for(let i in(r=t.feature)==null?void 0:r.properties){let n=t.feature.properties[i],a=t.keycache[i];if(n==null)continue;a===void 0&&(t.keys.push(i),a=t.keys.length-1,t.keycache[i]=a),e.writeVarint(a),typeof n!="string"&&typeof n!="boolean"&&typeof n!="number"&&(n=t.jsonPrefix+JSON.stringify(n));let s=typeof n+":"+n,o=t.valuecache[s];o===void 0&&(t.values.push(n),o=t.values.length-1,t.valuecache[s]=o),e.writeVarint(o)}}function Zs(t,e){return(e<<3)+(t&7)}function $c(t){return t<<1^t>>31}function yw(t,e){let r=t.loadGeometry(),i=t.type,n=0,a=0;for(let s of r){let o=1;i===1&&(o=s.length),e.writeVarint(Zs(1,o));let l=i===3?s.length-1:s.length;for(let u=0;u<l;u++){u===1&&i!==1&&e.writeVarint(Zs(2,l-1));let h=s[u].x-n,c=s[u].y-a;e.writeVarint($c(h)),e.writeVarint($c(c)),n+=h,a+=c}t.type===3&&e.writeVarint(Zs(7,1))}}function mw(t,e){let r=typeof t;r==="string"?e.writeStringField(1,t):r==="boolean"?e.writeBooleanField(7,t):r==="number"&&(t%1==0?t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t):e.writeDoubleField(3,t))}var cu=class{constructor(t){this._stringToNumber={},this._numberToString=[];for(let e=0;e<t.length;e++){let r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}}encode(t){return this._stringToNumber[t]}decode(t){if(t>=this._numberToString.length)throw Error(`Out of bounds. Index requested n=${t} can\'t be >= this._numberToString.length ${this._numberToString.length}`);return this._numberToString[t]}},gw=class{constructor(t,e,r,i,n){this.type="Feature",this._vectorTileFeature=t,this._x=r,this._y=i,this._z=e;for(let a in t.properties)typeof t.properties[a]=="string"&&t.properties[a].startsWith("__$json__:")&&(t.properties[a]=JSON.parse(t.properties[a].slice(10)));this.properties=t.properties,this.id=n}projectPoint(t,e,r,i){return[(t.x+e)*360/i-180,360/Math.PI*Math.atan(Math.exp((1-(t.y+r)*2/i)*Math.PI))-90]}projectLine(t,e,r,i){return t.map(n=>this.projectPoint(n,e,r,i))}get geometry(){if(this._geometry)return this._geometry;let t=this._vectorTileFeature,e=t.extent*2**this._z,r=t.extent*this._x,i=t.extent*this._y,n=t.loadGeometry();switch(t.type){case 1:{let a=[];for(let o of n)a.push(o[0]);let s=this.projectLine(a,r,i,e);this._geometry=a.length===1?{type:"Point",coordinates:s[0]}:{type:"MultiPoint",coordinates:s};break}case 2:{let a=n.map(s=>this.projectLine(s,r,i,e));this._geometry=a.length===1?{type:"LineString",coordinates:a[0]}:{type:"MultiLineString",coordinates:a};break}case 3:{let a=dd(n),s=[];for(let o of a)s.push(o.map(l=>this.projectLine(l,r,i,e)));this._geometry=s.length===1?{type:"Polygon",coordinates:s[0]}:{type:"MultiPolygon",coordinates:s};break}default:throw Error(`unknown feature type: ${t.type}`)}return this._geometry}set geometry(t){this._geometry=t}toJSON(){let t={geometry:this.geometry};for(let e in this)e!=="_geometry"&&e!=="_vectorTileFeature"&&e!=="_x"&&e!=="_y"&&e!=="_z"&&(t[e]=this[e]);return t}},Sr=class{constructor(t,e,r){this._name=t,this.dataBuffer=e,typeof r=="number"?this._size=r:(this.nullabilityBuffer=r,this._size=r.size())}getValue(t){return this.nullabilityBuffer&&!this.nullabilityBuffer.get(t)?null:this.getValueFromBuffer(t)}has(t){var e;return((e=this.nullabilityBuffer)==null?void 0:e.get(t))||!this.nullabilityBuffer}get name(){return this._name}get size(){return this._size}},ts=class extends Sr{},pu=class extends ts{getValueFromBuffer(t){return this.dataBuffer[t]}},fu=class extends ts{getValueFromBuffer(t){return this.dataBuffer[t]}},uy=class extends Sr{constructor(t,e,r,i){super(t,e,i),this.delta=r}},du=class extends uy{constructor(t,e,r,i,n){super(t,n?Int32Array.of(e):Uint32Array.of(e),r,i)}getValueFromBuffer(t){return this.dataBuffer[0]+t*this.delta}},yu=class extends Sr{constructor(t,e,r,i){super(t,i?Int32Array.of(e):Uint32Array.of(e),r)}getValueFromBuffer(t){return this.dataBuffer[0]}},xw=class{constructor(t,e,r,i,n=4096){if(this._name=t,this._geometryVector=e,this._idVector=r,this._propertyVectors=i,this._extent=n,t.length===0)throw Error("Missing layer name")}get name(){return this._name}get idVector(){return this._idVector}get geometryVector(){return this._geometryVector}get propertyVectors(){var t;return(t=this._propertyVectors)!=null?t:[]}getPropertyVector(t){return this.propertyVectorsMap||(this.propertyVectorsMap=new Map(this.propertyVectors.map(e=>[e.name,e]))),this.propertyVectorsMap.get(t)}get numFeatures(){return this.geometryVector.numGeometries}get extent(){return this._extent}getFeatures(){let t=[],e=this.geometryVector.getGeometries();for(let r=0;r<this.numFeatures;r++){let i;if(this.idVector){let s=this.idVector.getValue(r);s!==null&&(i=this.containsMaxSafeIntegerValues(this.idVector)?Number(s):s)}let n={coordinates:e[r],type:this.geometryVector.geometryType(r)},a={};for(let s of this.propertyVectors){if(!s)continue;let o=s.name,l=s.getValue(r);l!==null&&(a[o]=l)}t.push({id:i,geometry:n,properties:a})}return t}containsMaxSafeIntegerValues(t){return t instanceof pu||t instanceof yu||t instanceof du||t instanceof fu}},qi={FEATURE:0,VERTEX:1},it={BOOLEAN:0,INT_8:1,UINT_8:2,INT_32:3,UINT_32:4,INT_64:5,UINT_64:6,FLOAT:7,DOUBLE:8,STRING:9},Qe={GEOMETRY:0,STRUCT:1,MAP:2},hy={ID:0},cy=class{constructor(t){this.value=t}get(){return this.value}set(t){this.value=t}increment(){return this.value++}add(t){this.value+=t}},H;(function(t){t.NONE="NONE",t.DELTA="DELTA",t.COMPONENTWISE_DELTA="COMPONENTWISE_DELTA",t.RLE="RLE",t.MORTON="MORTON"})(H||(H={}));var le;(function(t){t.NONE="NONE",t.FAST_PFOR="FAST_PFOR",t.VARINT="VARINT"})(le||(le={}));var mu=new Uint32Array(33);mu[0]=0;for(let t=1;t<=32;t++)mu[t]=t===32?4294967295:4294967295>>>32-t;var ul=mu,py=65536;function gu(t,e){return t-t%e}function vw(t){return gu(t+31,32)}function bw(t){if(!Number.isFinite(t)||t<=0)return py;let e=gu(Math.floor(t),256);return e===0?256:e}function ww(t){let e=t>>>0;return((e&255)<<24|(e&65280)<<8|e>>>8&65280|e>>>24&255)>>>0}function Dw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0;r[n++]=a>>>0&3,r[n++]=a>>>2&3,r[n++]=a>>>4&3,r[n++]=a>>>6&3,r[n++]=a>>>8&3,r[n++]=a>>>10&3,r[n++]=a>>>12&3,r[n++]=a>>>14&3,r[n++]=a>>>16&3,r[n++]=a>>>18&3,r[n++]=a>>>20&3,r[n++]=a>>>22&3,r[n++]=a>>>24&3,r[n++]=a>>>26&3,r[n++]=a>>>28&3,r[n++]=a>>>30&3,r[n++]=s>>>0&3,r[n++]=s>>>2&3,r[n++]=s>>>4&3,r[n++]=s>>>6&3,r[n++]=s>>>8&3,r[n++]=s>>>10&3,r[n++]=s>>>12&3,r[n++]=s>>>14&3,r[n++]=s>>>16&3,r[n++]=s>>>18&3,r[n++]=s>>>20&3,r[n++]=s>>>22&3,r[n++]=s>>>24&3,r[n++]=s>>>26&3,r[n++]=s>>>28&3,r[n]=s>>>30&3}function _w(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0;r[n++]=a>>>0&7,r[n++]=a>>>3&7,r[n++]=a>>>6&7,r[n++]=a>>>9&7,r[n++]=a>>>12&7,r[n++]=a>>>15&7,r[n++]=a>>>18&7,r[n++]=a>>>21&7,r[n++]=a>>>24&7,r[n++]=a>>>27&7,r[n++]=(a>>>30|(s&1)<<2)&7,r[n++]=s>>>1&7,r[n++]=s>>>4&7,r[n++]=s>>>7&7,r[n++]=s>>>10&7,r[n++]=s>>>13&7,r[n++]=s>>>16&7,r[n++]=s>>>19&7,r[n++]=s>>>22&7,r[n++]=s>>>25&7,r[n++]=s>>>28&7,r[n++]=(s>>>31|(o&3)<<1)&7,r[n++]=o>>>2&7,r[n++]=o>>>5&7,r[n++]=o>>>8&7,r[n++]=o>>>11&7,r[n++]=o>>>14&7,r[n++]=o>>>17&7,r[n++]=o>>>20&7,r[n++]=o>>>23&7,r[n++]=o>>>26&7,r[n]=o>>>29&7}function Aw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0;r[n++]=a>>>0&15,r[n++]=a>>>4&15,r[n++]=a>>>8&15,r[n++]=a>>>12&15,r[n++]=a>>>16&15,r[n++]=a>>>20&15,r[n++]=a>>>24&15,r[n++]=a>>>28&15,r[n++]=s>>>0&15,r[n++]=s>>>4&15,r[n++]=s>>>8&15,r[n++]=s>>>12&15,r[n++]=s>>>16&15,r[n++]=s>>>20&15,r[n++]=s>>>24&15,r[n++]=s>>>28&15,r[n++]=o>>>0&15,r[n++]=o>>>4&15,r[n++]=o>>>8&15,r[n++]=o>>>12&15,r[n++]=o>>>16&15,r[n++]=o>>>20&15,r[n++]=o>>>24&15,r[n++]=o>>>28&15,r[n++]=l>>>0&15,r[n++]=l>>>4&15,r[n++]=l>>>8&15,r[n++]=l>>>12&15,r[n++]=l>>>16&15,r[n++]=l>>>20&15,r[n++]=l>>>24&15,r[n]=l>>>28&15}function Sw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0;r[n++]=a>>>0&31,r[n++]=a>>>5&31,r[n++]=a>>>10&31,r[n++]=a>>>15&31,r[n++]=a>>>20&31,r[n++]=a>>>25&31,r[n++]=(a>>>30|(s&7)<<2)&31,r[n++]=s>>>3&31,r[n++]=s>>>8&31,r[n++]=s>>>13&31,r[n++]=s>>>18&31,r[n++]=s>>>23&31,r[n++]=(s>>>28|(o&1)<<4)&31,r[n++]=o>>>1&31,r[n++]=o>>>6&31,r[n++]=o>>>11&31,r[n++]=o>>>16&31,r[n++]=o>>>21&31,r[n++]=o>>>26&31,r[n++]=(o>>>31|(l&15)<<1)&31,r[n++]=l>>>4&31,r[n++]=l>>>9&31,r[n++]=l>>>14&31,r[n++]=l>>>19&31,r[n++]=l>>>24&31,r[n++]=(l>>>29|(u&3)<<3)&31,r[n++]=u>>>2&31,r[n++]=u>>>7&31,r[n++]=u>>>12&31,r[n++]=u>>>17&31,r[n++]=u>>>22&31,r[n]=u>>>27&31}function Ew(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0;r[n++]=a>>>0&63,r[n++]=a>>>6&63,r[n++]=a>>>12&63,r[n++]=a>>>18&63,r[n++]=a>>>24&63,r[n++]=(a>>>30|(s&15)<<2)&63,r[n++]=s>>>4&63,r[n++]=s>>>10&63,r[n++]=s>>>16&63,r[n++]=s>>>22&63,r[n++]=(s>>>28|(o&3)<<4)&63,r[n++]=o>>>2&63,r[n++]=o>>>8&63,r[n++]=o>>>14&63,r[n++]=o>>>20&63,r[n++]=o>>>26&63,r[n++]=l>>>0&63,r[n++]=l>>>6&63,r[n++]=l>>>12&63,r[n++]=l>>>18&63,r[n++]=l>>>24&63,r[n++]=(l>>>30|(u&15)<<2)&63,r[n++]=u>>>4&63,r[n++]=u>>>10&63,r[n++]=u>>>16&63,r[n++]=u>>>22&63,r[n++]=(u>>>28|(h&3)<<4)&63,r[n++]=h>>>2&63,r[n++]=h>>>8&63,r[n++]=h>>>14&63,r[n++]=h>>>20&63,r[n]=h>>>26&63}function Fw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0;r[n++]=a>>>0&127,r[n++]=a>>>7&127,r[n++]=a>>>14&127,r[n++]=a>>>21&127,r[n++]=(a>>>28|(s&7)<<4)&127,r[n++]=s>>>3&127,r[n++]=s>>>10&127,r[n++]=s>>>17&127,r[n++]=s>>>24&127,r[n++]=(s>>>31|(o&63)<<1)&127,r[n++]=o>>>6&127,r[n++]=o>>>13&127,r[n++]=o>>>20&127,r[n++]=(o>>>27|(l&3)<<5)&127,r[n++]=l>>>2&127,r[n++]=l>>>9&127,r[n++]=l>>>16&127,r[n++]=l>>>23&127,r[n++]=(l>>>30|(u&31)<<2)&127,r[n++]=u>>>5&127,r[n++]=u>>>12&127,r[n++]=u>>>19&127,r[n++]=(u>>>26|(h&1)<<6)&127,r[n++]=h>>>1&127,r[n++]=h>>>8&127,r[n++]=h>>>15&127,r[n++]=h>>>22&127,r[n++]=(h>>>29|(c&15)<<3)&127,r[n++]=c>>>4&127,r[n++]=c>>>11&127,r[n++]=c>>>18&127,r[n]=c>>>25&127}function kw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0;r[n++]=a>>>0&255,r[n++]=a>>>8&255,r[n++]=a>>>16&255,r[n++]=a>>>24&255,r[n++]=s>>>0&255,r[n++]=s>>>8&255,r[n++]=s>>>16&255,r[n++]=s>>>24&255,r[n++]=o>>>0&255,r[n++]=o>>>8&255,r[n++]=o>>>16&255,r[n++]=o>>>24&255,r[n++]=l>>>0&255,r[n++]=l>>>8&255,r[n++]=l>>>16&255,r[n++]=l>>>24&255,r[n++]=u>>>0&255,r[n++]=u>>>8&255,r[n++]=u>>>16&255,r[n++]=u>>>24&255,r[n++]=h>>>0&255,r[n++]=h>>>8&255,r[n++]=h>>>16&255,r[n++]=h>>>24&255,r[n++]=c>>>0&255,r[n++]=c>>>8&255,r[n++]=c>>>16&255,r[n++]=c>>>24&255,r[n++]=p>>>0&255,r[n++]=p>>>8&255,r[n++]=p>>>16&255,r[n]=p>>>24&255}function Tw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0;r[n++]=a>>>0&511,r[n++]=a>>>9&511,r[n++]=a>>>18&511,r[n++]=(a>>>27|(s&15)<<5)&511,r[n++]=s>>>4&511,r[n++]=s>>>13&511,r[n++]=s>>>22&511,r[n++]=(s>>>31|(o&255)<<1)&511,r[n++]=o>>>8&511,r[n++]=o>>>17&511,r[n++]=(o>>>26|(l&7)<<6)&511,r[n++]=l>>>3&511,r[n++]=l>>>12&511,r[n++]=l>>>21&511,r[n++]=(l>>>30|(u&127)<<2)&511,r[n++]=u>>>7&511,r[n++]=u>>>16&511,r[n++]=(u>>>25|(h&3)<<7)&511,r[n++]=h>>>2&511,r[n++]=h>>>11&511,r[n++]=h>>>20&511,r[n++]=(h>>>29|(c&63)<<3)&511,r[n++]=c>>>6&511,r[n++]=c>>>15&511,r[n++]=(c>>>24|(p&1)<<8)&511,r[n++]=p>>>1&511,r[n++]=p>>>10&511,r[n++]=p>>>19&511,r[n++]=(p>>>28|(f&31)<<4)&511,r[n++]=f>>>5&511,r[n++]=f>>>14&511,r[n]=f>>>23&511}function Iw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0;r[n++]=a>>>0&1023,r[n++]=a>>>10&1023,r[n++]=a>>>20&1023,r[n++]=(a>>>30|(s&255)<<2)&1023,r[n++]=s>>>8&1023,r[n++]=s>>>18&1023,r[n++]=(s>>>28|(o&63)<<4)&1023,r[n++]=o>>>6&1023,r[n++]=o>>>16&1023,r[n++]=(o>>>26|(l&15)<<6)&1023,r[n++]=l>>>4&1023,r[n++]=l>>>14&1023,r[n++]=(l>>>24|(u&3)<<8)&1023,r[n++]=u>>>2&1023,r[n++]=u>>>12&1023,r[n++]=u>>>22&1023,r[n++]=h>>>0&1023,r[n++]=h>>>10&1023,r[n++]=h>>>20&1023,r[n++]=(h>>>30|(c&255)<<2)&1023,r[n++]=c>>>8&1023,r[n++]=c>>>18&1023,r[n++]=(c>>>28|(p&63)<<4)&1023,r[n++]=p>>>6&1023,r[n++]=p>>>16&1023,r[n++]=(p>>>26|(f&15)<<6)&1023,r[n++]=f>>>4&1023,r[n++]=f>>>14&1023,r[n++]=(f>>>24|(d&3)<<8)&1023,r[n++]=d>>>2&1023,r[n++]=d>>>12&1023,r[n]=d>>>22&1023}function Cw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0,y=t[e+10]>>>0;r[n++]=a>>>0&2047,r[n++]=a>>>11&2047,r[n++]=(a>>>22|(s&1)<<10)&2047,r[n++]=s>>>1&2047,r[n++]=s>>>12&2047,r[n++]=(s>>>23|(o&3)<<9)&2047,r[n++]=o>>>2&2047,r[n++]=o>>>13&2047,r[n++]=(o>>>24|(l&7)<<8)&2047,r[n++]=l>>>3&2047,r[n++]=l>>>14&2047,r[n++]=(l>>>25|(u&15)<<7)&2047,r[n++]=u>>>4&2047,r[n++]=u>>>15&2047,r[n++]=(u>>>26|(h&31)<<6)&2047,r[n++]=h>>>5&2047,r[n++]=h>>>16&2047,r[n++]=(h>>>27|(c&63)<<5)&2047,r[n++]=c>>>6&2047,r[n++]=c>>>17&2047,r[n++]=(c>>>28|(p&127)<<4)&2047,r[n++]=p>>>7&2047,r[n++]=p>>>18&2047,r[n++]=(p>>>29|(f&255)<<3)&2047,r[n++]=f>>>8&2047,r[n++]=f>>>19&2047,r[n++]=(f>>>30|(d&511)<<2)&2047,r[n++]=d>>>9&2047,r[n++]=d>>>20&2047,r[n++]=(d>>>31|(y&1023)<<1)&2047,r[n++]=y>>>10&2047,r[n]=y>>>21&2047}function Mw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0,y=t[e+10]>>>0,m=t[e+11]>>>0;r[n++]=a>>>0&4095,r[n++]=a>>>12&4095,r[n++]=(a>>>24|(s&15)<<8)&4095,r[n++]=s>>>4&4095,r[n++]=s>>>16&4095,r[n++]=(s>>>28|(o&255)<<4)&4095,r[n++]=o>>>8&4095,r[n++]=o>>>20&4095,r[n++]=l>>>0&4095,r[n++]=l>>>12&4095,r[n++]=(l>>>24|(u&15)<<8)&4095,r[n++]=u>>>4&4095,r[n++]=u>>>16&4095,r[n++]=(u>>>28|(h&255)<<4)&4095,r[n++]=h>>>8&4095,r[n++]=h>>>20&4095,r[n++]=c>>>0&4095,r[n++]=c>>>12&4095,r[n++]=(c>>>24|(p&15)<<8)&4095,r[n++]=p>>>4&4095,r[n++]=p>>>16&4095,r[n++]=(p>>>28|(f&255)<<4)&4095,r[n++]=f>>>8&4095,r[n++]=f>>>20&4095,r[n++]=d>>>0&4095,r[n++]=d>>>12&4095,r[n++]=(d>>>24|(y&15)<<8)&4095,r[n++]=y>>>4&4095,r[n++]=y>>>16&4095,r[n++]=(y>>>28|(m&255)<<4)&4095,r[n++]=m>>>8&4095,r[n]=m>>>20&4095}function Bw(t,e,r,i){let n=i,a=t[e]>>>0,s=t[e+1]>>>0,o=t[e+2]>>>0,l=t[e+3]>>>0,u=t[e+4]>>>0,h=t[e+5]>>>0,c=t[e+6]>>>0,p=t[e+7]>>>0,f=t[e+8]>>>0,d=t[e+9]>>>0,y=t[e+10]>>>0,m=t[e+11]>>>0,g=t[e+12]>>>0,x=t[e+13]>>>0,v=t[e+14]>>>0,b=t[e+15]>>>0;r[n++]=a>>>0&65535,r[n++]=a>>>16&65535,r[n++]=s>>>0&65535,r[n++]=s>>>16&65535,r[n++]=o>>>0&65535,r[n++]=o>>>16&65535,r[n++]=l>>>0&65535,r[n++]=l>>>16&65535,r[n++]=u>>>0&65535,r[n++]=u>>>16&65535,r[n++]=h>>>0&65535,r[n++]=h>>>16&65535,r[n++]=c>>>0&65535,r[n++]=c>>>16&65535,r[n++]=p>>>0&65535,r[n++]=p>>>16&65535,r[n++]=f>>>0&65535,r[n++]=f>>>16&65535,r[n++]=d>>>0&65535,r[n++]=d>>>16&65535,r[n++]=y>>>0&65535,r[n++]=y>>>16&65535,r[n++]=m>>>0&65535,r[n++]=m>>>16&65535,r[n++]=g>>>0&65535,r[n++]=g>>>16&65535,r[n++]=x>>>0&65535,r[n++]=x>>>16&65535,r[n++]=v>>>0&65535,r[n++]=v>>>16&65535,r[n++]=b>>>0&65535,r[n]=b>>>16&65535}function Pw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0;r[n++]=o>>>0&1,r[n++]=o>>>1&1,r[n++]=o>>>2&1,r[n++]=o>>>3&1,r[n++]=o>>>4&1,r[n++]=o>>>5&1,r[n++]=o>>>6&1,r[n++]=o>>>7&1,r[n++]=o>>>8&1,r[n++]=o>>>9&1,r[n++]=o>>>10&1,r[n++]=o>>>11&1,r[n++]=o>>>12&1,r[n++]=o>>>13&1,r[n++]=o>>>14&1,r[n++]=o>>>15&1,r[n++]=o>>>16&1,r[n++]=o>>>17&1,r[n++]=o>>>18&1,r[n++]=o>>>19&1,r[n++]=o>>>20&1,r[n++]=o>>>21&1,r[n++]=o>>>22&1,r[n++]=o>>>23&1,r[n++]=o>>>24&1,r[n++]=o>>>25&1,r[n++]=o>>>26&1,r[n++]=o>>>27&1,r[n++]=o>>>28&1,r[n++]=o>>>29&1,r[n++]=o>>>30&1,r[n++]=o>>>31&1}}function zw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0;r[n++]=o>>>0&3,r[n++]=o>>>2&3,r[n++]=o>>>4&3,r[n++]=o>>>6&3,r[n++]=o>>>8&3,r[n++]=o>>>10&3,r[n++]=o>>>12&3,r[n++]=o>>>14&3,r[n++]=o>>>16&3,r[n++]=o>>>18&3,r[n++]=o>>>20&3,r[n++]=o>>>22&3,r[n++]=o>>>24&3,r[n++]=o>>>26&3,r[n++]=o>>>28&3,r[n++]=o>>>30&3,r[n++]=l>>>0&3,r[n++]=l>>>2&3,r[n++]=l>>>4&3,r[n++]=l>>>6&3,r[n++]=l>>>8&3,r[n++]=l>>>10&3,r[n++]=l>>>12&3,r[n++]=l>>>14&3,r[n++]=l>>>16&3,r[n++]=l>>>18&3,r[n++]=l>>>20&3,r[n++]=l>>>22&3,r[n++]=l>>>24&3,r[n++]=l>>>26&3,r[n++]=l>>>28&3,r[n++]=l>>>30&3}}function Lw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0;r[n++]=o>>>0&7,r[n++]=o>>>3&7,r[n++]=o>>>6&7,r[n++]=o>>>9&7,r[n++]=o>>>12&7,r[n++]=o>>>15&7,r[n++]=o>>>18&7,r[n++]=o>>>21&7,r[n++]=o>>>24&7,r[n++]=o>>>27&7,r[n++]=(o>>>30|(l&1)<<2)&7,r[n++]=l>>>1&7,r[n++]=l>>>4&7,r[n++]=l>>>7&7,r[n++]=l>>>10&7,r[n++]=l>>>13&7,r[n++]=l>>>16&7,r[n++]=l>>>19&7,r[n++]=l>>>22&7,r[n++]=l>>>25&7,r[n++]=l>>>28&7,r[n++]=(l>>>31|(u&3)<<1)&7,r[n++]=u>>>2&7,r[n++]=u>>>5&7,r[n++]=u>>>8&7,r[n++]=u>>>11&7,r[n++]=u>>>14&7,r[n++]=u>>>17&7,r[n++]=u>>>20&7,r[n++]=u>>>23&7,r[n++]=u>>>26&7,r[n++]=u>>>29&7}}function Vw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0;r[n++]=o>>>0&15,r[n++]=o>>>4&15,r[n++]=o>>>8&15,r[n++]=o>>>12&15,r[n++]=o>>>16&15,r[n++]=o>>>20&15,r[n++]=o>>>24&15,r[n++]=o>>>28&15,r[n++]=l>>>0&15,r[n++]=l>>>4&15,r[n++]=l>>>8&15,r[n++]=l>>>12&15,r[n++]=l>>>16&15,r[n++]=l>>>20&15,r[n++]=l>>>24&15,r[n++]=l>>>28&15,r[n++]=u>>>0&15,r[n++]=u>>>4&15,r[n++]=u>>>8&15,r[n++]=u>>>12&15,r[n++]=u>>>16&15,r[n++]=u>>>20&15,r[n++]=u>>>24&15,r[n++]=u>>>28&15,r[n++]=h>>>0&15,r[n++]=h>>>4&15,r[n++]=h>>>8&15,r[n++]=h>>>12&15,r[n++]=h>>>16&15,r[n++]=h>>>20&15,r[n++]=h>>>24&15,r[n++]=h>>>28&15}}function Ow(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0;r[n++]=o>>>0&31,r[n++]=o>>>5&31,r[n++]=o>>>10&31,r[n++]=o>>>15&31,r[n++]=o>>>20&31,r[n++]=o>>>25&31,r[n++]=(o>>>30|(l&7)<<2)&31,r[n++]=l>>>3&31,r[n++]=l>>>8&31,r[n++]=l>>>13&31,r[n++]=l>>>18&31,r[n++]=l>>>23&31,r[n++]=(l>>>28|(u&1)<<4)&31,r[n++]=u>>>1&31,r[n++]=u>>>6&31,r[n++]=u>>>11&31,r[n++]=u>>>16&31,r[n++]=u>>>21&31,r[n++]=u>>>26&31,r[n++]=(u>>>31|(h&15)<<1)&31,r[n++]=h>>>4&31,r[n++]=h>>>9&31,r[n++]=h>>>14&31,r[n++]=h>>>19&31,r[n++]=h>>>24&31,r[n++]=(h>>>29|(c&3)<<3)&31,r[n++]=c>>>2&31,r[n++]=c>>>7&31,r[n++]=c>>>12&31,r[n++]=c>>>17&31,r[n++]=c>>>22&31,r[n++]=c>>>27&31}}function Rw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0,p=t[a++]>>>0;r[n++]=o>>>0&63,r[n++]=o>>>6&63,r[n++]=o>>>12&63,r[n++]=o>>>18&63,r[n++]=o>>>24&63,r[n++]=(o>>>30|(l&15)<<2)&63,r[n++]=l>>>4&63,r[n++]=l>>>10&63,r[n++]=l>>>16&63,r[n++]=l>>>22&63,r[n++]=(l>>>28|(u&3)<<4)&63,r[n++]=u>>>2&63,r[n++]=u>>>8&63,r[n++]=u>>>14&63,r[n++]=u>>>20&63,r[n++]=u>>>26&63,r[n++]=h>>>0&63,r[n++]=h>>>6&63,r[n++]=h>>>12&63,r[n++]=h>>>18&63,r[n++]=h>>>24&63,r[n++]=(h>>>30|(c&15)<<2)&63,r[n++]=c>>>4&63,r[n++]=c>>>10&63,r[n++]=c>>>16&63,r[n++]=c>>>22&63,r[n++]=(c>>>28|(p&3)<<4)&63,r[n++]=p>>>2&63,r[n++]=p>>>8&63,r[n++]=p>>>14&63,r[n++]=p>>>20&63,r[n++]=p>>>26&63}}function $w(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0,p=t[a++]>>>0,f=t[a++]>>>0;r[n++]=o>>>0&127,r[n++]=o>>>7&127,r[n++]=o>>>14&127,r[n++]=o>>>21&127,r[n++]=(o>>>28|(l&7)<<4)&127,r[n++]=l>>>3&127,r[n++]=l>>>10&127,r[n++]=l>>>17&127,r[n++]=l>>>24&127,r[n++]=(l>>>31|(u&63)<<1)&127,r[n++]=u>>>6&127,r[n++]=u>>>13&127,r[n++]=u>>>20&127,r[n++]=(u>>>27|(h&3)<<5)&127,r[n++]=h>>>2&127,r[n++]=h>>>9&127,r[n++]=h>>>16&127,r[n++]=h>>>23&127,r[n++]=(h>>>30|(c&31)<<2)&127,r[n++]=c>>>5&127,r[n++]=c>>>12&127,r[n++]=c>>>19&127,r[n++]=(c>>>26|(p&1)<<6)&127,r[n++]=p>>>1&127,r[n++]=p>>>8&127,r[n++]=p>>>15&127,r[n++]=p>>>22&127,r[n++]=(p>>>29|(f&15)<<3)&127,r[n++]=f>>>4&127,r[n++]=f>>>11&127,r[n++]=f>>>18&127,r[n++]=f>>>25&127}}function Nw(t,e,r,i){let n=i,a=e;for(let s=0;s<8;s++){let o=t[a++]>>>0,l=t[a++]>>>0,u=t[a++]>>>0,h=t[a++]>>>0,c=t[a++]>>>0,p=t[a++]>>>0,f=t[a++]>>>0,d=t[a++]>>>0;r[n++]=o>>>0&255,r[n++]=o>>>8&255,r[n++]=o>>>16&255,r[n++]=o>>>24&255,r[n++]=l>>>0&255,r[n++]=l>>>8&255,r[n++]=l>>>16&255,r[n++]=l>>>24&255,r[n++]=u>>>0&255,r[n++]=u>>>8&255,r[n++]=u>>>16&255,r[n++]=u>>>24&255,r[n++]=h>>>0&255,r[n++]=h>>>8&255,r[n++]=h>>>16&255,r[n++]=h>>>24&255,r[n++]=c>>>0&255,r[n++]=c>>>8&255,r[n++]=c>>>16&255,r[n++]=c>>>24&255,r[n++]=p>>>0&255,r[n++]=p>>>8&255,r[n++]=p>>>16&255,r[n++]=p>>>24&255,r[n++]=f>>>0&255,r[n++]=f>>>8&255,r[n++]=f>>>16&255,r[n++]=f>>>24&255,r[n++]=d>>>0&255,r[n++]=d>>>8&255,r[n++]=d>>>16&255,r[n++]=d>>>24&255}}function Uw(t,e,r,i){let n=i,a=e;for(let s=0;s<128;s++){let o=t[a++]>>>0;r[n++]=o&65535,r[n++]=o>>>16&65535}}function qw(t,e,r,i,n){let a=ul[n]>>>0,s=e,o=0,l=t[s]>>>0,u=i;for(let h=0;h<8;h++){for(let c=0;c<32;c++)if(o+n<=32){let p=l>>>o&a;r[u+c]=p|0,o+=n,o===32&&(o=0,s++,c!==31&&(l=t[s]>>>0))}else{let p=32-o,f=l>>>o;s++,l=t[s]>>>0;let d=n-p,y=-1>>>32-d>>>0,m=(f|(l&y)<<p)&a;r[u+c]=m|0,o=d}u+=32,o=0,h<7&&(l=t[s]>>>0)}}var hl=bw(py),jw=3*hl/256+hl|0;function fy(){let t=new Uint8Array(jw);return{dataToBePacked:Array(33),dataPointers:new Int32Array(33),byteContainer:t,byteContainerI32:new Int32Array(t.buffer,t.byteOffset,t.byteLength>>>2),exceptionSizes:new Int32Array(33)}}function Gw(t=16){if(t<0)throw RangeError(`initialEncodedWordCapacity must be >= 0, got ${t}`);let e=Math.max(16,t|0);return{encodedWords:new Uint32Array(e),decoderWorkspace:fy()}}function Xw(t,e){if(e<=t.encodedWords.length)return t.encodedWords;let r=new Uint32Array(Math.max(16,e*2));return t.encodedWords=r,r}function Yw(t,e,r,i){i.byteContainer.length<r&&(i.byteContainer=new Uint8Array(r*2),i.byteContainerI32=void 0);let n=i.byteContainer,a=r>>>2;if(n.byteOffset&3)for(let o=0;o<a;o=o+1|0){let l=t[e+o|0]|0,u=o<<2;n[u]=l&255,n[u+1|0]=l>>>8&255,n[u+2|0]=l>>>16&255,n[u+3|0]=l>>>24&255}else{let o=i.byteContainerI32;(!o||o.buffer!==n.buffer||o.byteOffset!==n.byteOffset||o.length<a)&&(o=i.byteContainerI32=new Int32Array(n.buffer,n.byteOffset,n.byteLength>>>2)),o.set(t.subarray(e,e+a))}let s=r&3;if(s>0){let o=t[e+a|0]|0,l=a<<2;for(let u=0;u<s;u=u+1|0)n[l+u|0]=o>>>(u<<3)&255}return n}function Ww(t,e,r){let i=t[e++]|0,n=r.dataToBePacked;for(let a=2;a<=32;a=a+1|0){if(!(i>>>a-1&1))continue;if(e>=t.length)throw Error(`FastPFOR decode: truncated exception stream header (bitWidth=${a}, streamWordIndex=${e}, needWords=1, availableWords=${t.length-e}, encodedWords=${t.length})`);let s=t[e++]>>>0,o=vw(s),l=s*a+31>>>5;if(e+l>t.length)throw Error(`FastPFOR decode: truncated exception stream (bitWidth=${a}, size=${s}, streamWordIndex=${e}, needWords=${l}, availableWords=${t.length-e}, encodedWords=${t.length})`);let u=n[a];(!u||u.length<o)&&(u=n[a]=new Uint32Array(o));let h=0;for(;h<s;h=h+32|0)n3(t,e,u,h,a),e=e+a|0;let c=h-s|0;e=e-(c*a>>>5)|0,r.exceptionSizes[a]=s}return e}function Zw(t,e,r,i,n){switch(n){case 1:Pw(t,e,r,i);break;case 2:zw(t,e,r,i);break;case 3:Lw(t,e,r,i);break;case 4:Vw(t,e,r,i);break;case 5:Ow(t,e,r,i);break;case 6:Rw(t,e,r,i);break;case 7:$w(t,e,r,i);break;case 8:Nw(t,e,r,i);break;case 16:Uw(t,e,r,i);break;default:qw(t,e,r,i,n)}return e+(n<<3)|0}function Hw(t,e,r,i){if(r+2>e)throw Error(`FastPFOR decode: byteContainer underflow at block=${i} (need 2 bytes for [bitWidth, exceptionCount], bytePos=${r}, byteSize=${e})`);let n=t[r++],a=t[r++];if(n>32)throw Error(`FastPFOR decode: invalid bitWidth=${n} at block=${i} (expected 0..32). This likely indicates corrupted or truncated input.`);return{bitWidth:n,exceptionCount:a,bytePosIn:r}}function Kw(t,e,r,i,n,a){if(r+1>e)throw Error(`FastPFOR decode: exception header underflow at block=${a} (need 1 byte for maxBits, bytePos=${r}, byteSize=${e})`);let s=t[r++];if(s<i||s>32)throw Error(`FastPFOR decode: invalid maxBits=${s} at block=${a} (bitWidth=${i}, expected ${i}..32)`);let o=s-i|0;if(o<1||o>32)throw Error(`FastPFOR decode: invalid exceptionBitWidth=${o} at block=${a} (bitWidth=${i}, maxBits=${s})`);if(r+n>e)throw Error(`FastPFOR decode: exception positions underflow at block=${a} (need=${n}, have=${e-r})`);return{maxBits:s,exceptionBitWidth:o,bytePosIn:r}}function Jw(t,e,r,i,n,a,s,o,l){let{maxBits:u,exceptionBitWidth:h,bytePosIn:c}=Kw(n,a,s,r,i,l);if(s=c,h===1){let m=1<<r;for(let g=0;g<i;g=g+1|0){let x=n[s++];t[x+e|0]|=m}return s}let p=o.dataToBePacked[h];if(!p)throw Error(`FastPFOR decode: missing exception stream for exceptionBitWidth=${h} (bitWidth=${r}, maxBits=${u}) at block ${l}`);let f=o.dataPointers,d=f[h]|0,y=o.exceptionSizes[h]|0;if(d+i>y)throw Error(`FastPFOR decode: exception stream overflow for exceptionBitWidth=${h} (ptr=${d}, need ${i}, size=${y}) at block ${l}`);for(let m=0;m<i;m=m+1|0){let g=n[s++],x=p[d++]|0;t[g+e|0]|=x<<r}return f[h]=d,s}function Qw(t,e,r,i,n,a,s,o,l,u){let h=r|0,c=0;for(let p=0;p<s;p=p+1|0){let f=Hw(o,l,c,p);c=f.bytePosIn;let d=f.bitWidth,y=f.exceptionCount,m=a+p*256|0;switch(d){case 0:n.fill(0,m,m+256);break;case 32:for(let g=0;g<256;g=g+1|0)n[m+g|0]=t[h+g|0]|0;h=h+256|0;break;default:h=Zw(t,h,n,m,d)}y>0&&(c=Jw(n,m,d,y,o,l,c,u,p))}if(h!==i)throw Error(`FastPFOR decode: packed region mismatch (pageStart=${e}, packedStart=${r}, consumedPackedEnd=${h}, expectedPackedEnd=${i}, packedWords=${i-r}, encoded.length=${t.length})`)}function t3(t,e,r,i,n,a){let s=r|0,o=t[s]|0;if(o<=0||s+o>t.length-1)throw Error(`FastPFOR decode: invalid whereMeta=${o} at pageStart=${s} (expected > 0 and pageStart+whereMeta < encoded.length=${t.length})`);let l=s+1|0,u=s+o|0,h=t[u]>>>0,c=h+3>>>2,p=u+1,f=p+c;if(f>=t.length)throw Error(`FastPFOR decode: invalid byteSize=${h} (metaInts=${c}, pageStart=${s}, packedEnd=${u}, byteContainerStart=${p}) causes bitmapPos=${f} out of bounds (encoded.length=${t.length})`);let d=Yw(t,p,h,a),y=h,m=Ww(t,f,a);return a.dataPointers.fill(0),Qw(t,s,l,u,e,i|0,n/256|0,d,y,a),m}function e3(t,e,r,i,n,a){let s=i+gu(n,256),o=i,l=r;for(;o!==s;){let u=Math.min(hl,s-o);l=t3(t,e,l,o,u,a),o=o+u|0}return l}function r3(t,e,r,i,n,a){if(a===0)return e;let s=0,o=e,l=e+r,u=n,h=n,c=n+a,p=0,f=0;for(;o<l&&h<c;){let d=t[o]>>>s&255;if(s+=8,o+=s>>>5,s&=31,p|=(d&127)<<f,d&128)i[h++]=p|0,p=0,f=0;else if(f+=7,f>28)throw Error(`FastPFOR VByte: unterminated value (expected MSB=1 terminator within 5 bytes; shift=${f}, partial=${p}, decoded=${h-u}/${a}, inPos=${o}, inEnd=${l})`)}if(h!==c)throw Error(`FastPFOR VByte: truncated stream (decoded=${h-u}, expected=${a}, consumedWords=${o-e}/${r}, vbyteStart=${e}, vbyteEnd=${l})`);return o}function i3(t,e,r){let i=0,n=0,a=new Uint32Array(e),s=r!=null?r:fy();if(t.length>0){let u=t[i]|0;if(i=i+1|0,u&255)throw Error(`FastPFOR decode: invalid alignedLength=${u} (expected multiple of 256)`);if(n+u>a.length)throw Error(`FastPFOR decode: output buffer too small (outPos=${n}, alignedLength=${u}, out.length=${a.length})`);i=e3(t,a,i,n,u,s),n=n+u|0}let o=t.length-i|0,l=e-n|0;return r3(t,i,o,a,n,l),a}function n3(t,e,r,i,n){switch(n){case 2:Dw(t,e,r,i);return;case 3:_w(t,e,r,i);return;case 4:Aw(t,e,r,i);return;case 5:Sw(t,e,r,i);return;case 6:Ew(t,e,r,i);return;case 7:Fw(t,e,r,i);return;case 8:kw(t,e,r,i);return;case 9:Tw(t,e,r,i);return;case 10:Iw(t,e,r,i);return;case 11:Cw(t,e,r,i);return;case 12:Mw(t,e,r,i);return;case 16:Bw(t,e,r,i);return;case 32:for(let u=0;u<32;u=u+1|0)r[i+u|0]=t[e+u|0]|0;return}let a=ul[n]>>>0,s=e,o=0,l=t[s]>>>0;for(let u=0;u<32;u++)if(o+n<=32){let h=l>>>o&a;r[i+u]=h|0,o+=n,o===32&&(o=0,s++,u!==31&&(l=t[s]>>>0))}else{let h=32-o,c=l>>>o;s++,l=t[s]>>>0;let p=ul[n-h]>>>0,f=(c|(l&p)<<h)&a;r[i+u]=f|0,o=n-h}}function a3(t,e,r,i){if(e<0||r<0||e+r>t.length)throw RangeError(`decodeBigEndianInt32sInto: out of bounds (offset=${e}, byteLength=${r}, bytes.length=${t.length})`);let n=Math.floor(r/4),a=r%4!=0,s=a?n+1:n;if(i.length<s)throw RangeError(`decodeBigEndianInt32sInto: out.length=${i.length} < ${s}`);if(n>0){let o=t.byteOffset+e;if(o&3)for(let l=0;l<n;l++){let u=e+l*4;i[l]=t[u]<<24|t[u+1]<<16|t[u+2]<<8|t[u+3]|0}else{let l=new Uint32Array(t.buffer,o,n);for(let u=0;u<n;u++)i[u]=ww(l[u])|0}}if(a){let o=e+n*4,l=r-n*4,u=0;for(let h=0;h<l;h++)u|=t[o+h]<<24-h*8;i[n]=u|0}return s}function $t(t,e,r){let i=new Uint32Array(r),n=0,a=e.get();for(let s=0;s<i.length;s++){let o=t[a++],l=o&127;if(o<128){i[n++]=l;continue}if(o=t[a++],l|=(o&127)<<7,o<128){i[n++]=l;continue}if(o=t[a++],l|=(o&127)<<14,o<128){i[n++]=l;continue}if(o=t[a++],l|=(o&127)<<21,o<128){i[n++]=l;continue}o=t[a++],l|=(o&15)<<28,i[n++]=l}return e.set(a),i}function xu(t,e,r){let i=new BigUint64Array(r);for(let n=0;n<i.length;n++)i[n]=s3(t,e);return i}function s3(t,e){let r=BigInt(0),i=0,n=e.get();for(;n<t.length;){let a=t[n++];if(r|=BigInt(a&127)<<BigInt(i),!(a&128))break;if(i+=7,i>=64)throw Error("Varint too long")}return e.set(n),r}function o3(t,e,r){let i=new Float64Array(r);for(let n=0;n<r;n++)i[n]=l3(t,e);return i}function l3(t,e){let r,i;return i=t[e.get()],e.increment(),r=i&127,i<128||(i=t[e.get()],e.increment(),r|=(i&127)<<7,i<128)||(i=t[e.get()],e.increment(),r|=(i&127)<<14,i<128)||(i=t[e.get()],e.increment(),r|=(i&127)<<21,i<128)?r:(i=t[e.get()],r|=(i&15)<<28,u3(r,t,e))}function u3(t,e,r){let i,n;if(n=e[r.get()],r.increment(),i=(n&112)>>4,n<128||(n=e[r.get()],r.increment(),i|=(n&127)<<3,n<128)||(n=e[r.get()],r.increment(),i|=(n&127)<<10,n<128)||(n=e[r.get()],r.increment(),i|=(n&127)<<17,n<128)||(n=e[r.get()],r.increment(),i|=(n&127)<<24,n<128)||(n=e[r.get()],r.increment(),i|=(n&1)<<31,n<128))return i*4294967296+(t>>>0);throw Error("Expected varint not more than 10 bytes")}function h3(t,e,r,i){return c3(t,e,r,i,Gw(r>>>2))}function c3(t,e,r,i,n){let a=i.get();if(r&3)throw Error(`FastPFOR: invalid encodedByteLength=${r} at offset=${a} (encodedBytes.length=${t.length}; expected a multiple of 4 bytes for an int32 big-endian word stream)`);let s=r>>>2,o=Xw(n,s);a3(t,a,r,o);let l=i3(o.subarray(0,s),e,n.decoderWorkspace);return i.add(r),l}function et(t){return t>>>1^-(t&1)}function Ot(t){return t>>BigInt(1)^-(t&BigInt(1))}function We(t){return t%2==1?(t+1)/-2:t/2}function p3(t){let e=new Int32Array(t.length);for(let r=0;r<t.length;r++)e[r]=et(t[r]);return e}function f3(t){let e=new BigInt64Array(t.length);for(let r=0;r<t.length;r++)e[r]=Ot(t[r]);return e}function d3(t){for(let e=0;e<t.length;e++)t[e]=We(t[e])}function cl(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=t[a]}let i=new Uint32Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];i.fill(o,n,n+s),n+=s}return i}function pl(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=Number(t[a])}let i=new BigUint64Array(r),n=0;for(let a=0;a<e;a++){let s=Number(t[a]),o=t[a+e];i.fill(o,n,n+s),n+=s}return i}function dy(t,e,r){let i=new Float64Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];i.fill(o,n,n+s),n+=s}return i}function Nc(t){let e=new Int32Array(t.length);e[0]=et(t[0]);let r=t.length/4*4,i=1;if(r>=4)for(;i<r-4;i+=4){let n=t[i],a=t[i+1],s=t[i+2],o=t[i+3];e[i]=et(n)+e[i-1],e[i+1]=et(a)+e[i],e[i+2]=et(s)+e[i+1],e[i+3]=et(o)+e[i+2]}for(;i!==t.length;++i)e[i]=et(t[i])+e[i-1];return e}function Uc(t){let e=new BigInt64Array(t.length);e[0]=Ot(t[0]);let r=t.length/4*4,i=1;if(r>=4)for(;i<r-4;i+=4){let n=t[i],a=t[i+1],s=t[i+2],o=t[i+3];e[i]=Ot(n)+e[i-1],e[i+1]=Ot(a)+e[i],e[i+2]=Ot(s)+e[i+1],e[i+3]=Ot(o)+e[i+2]}for(;i!==e.length;++i)e[i]=Ot(t[i])+e[i-1];return e}function y3(t){t[0]=We(t[0]);let e=t.length/4*4,r=1;if(e>=4)for(;r<e-4;r+=4){let i=t[r],n=t[r+1],a=t[r+2],s=t[r+3];t[r]=We(i)+t[r-1],t[r+1]=We(n)+t[r],t[r+2]=We(a)+t[r+1],t[r+3]=We(s)+t[r+2]}for(;r!==t.length;++r)t[r]=We(t[r])+t[r-1]}function m3(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=t[a]}let i=new Int32Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];o=et(o),i.fill(o,n,n+s),n+=s}return i}function g3(t,e,r){if(r===void 0){r=0;for(let a=0;a<e;a++)r+=Number(t[a])}let i=new BigInt64Array(r),n=0;for(let a=0;a<e;a++){let s=Number(t[a]),o=t[a+e];o=Ot(o),i.fill(o,n,n+s),n+=s}return i}function x3(t,e,r){let i=new Float64Array(r),n=0;for(let a=0;a<e;a++){let s=t[a],o=t[a+e];o=We(o),i.fill(o,n,n+s),n+=s}return i}function vu(t){let e=t.length/4*4,r=1;if(e>=4)for(let i=t[0];r<e-4;r+=4)i=t[r]+=i,i=t[r+1]+=i,i=t[r+2]+=i,i=t[r+3]+=i;for(;r!==t.length;)t[r]+=t[r-1],++r}function v3(t){let e=0;for(let r=0;r<t.length;r++)t[r]+=e,e=t[r]}function b3(t){if(t.length<2)return new Int32Array(t);let e=new Int32Array(t.length);e[0]=et(t[0]),e[1]=et(t[1]);let r=t.length/4*4,i=2;if(r>=4)for(;i<r-4;i+=4){let n=t[i],a=t[i+1],s=t[i+2],o=t[i+3];e[i]=et(n)+e[i-2],e[i+1]=et(a)+e[i-1],e[i+2]=et(s)+e[i],e[i+3]=et(o)+e[i+1]}for(;i!==t.length;i+=2)e[i]=et(t[i])+e[i-2],e[i+1]=et(t[i+1])+e[i-1];return e}function yy(t,e,r,i){if(t.length<2)return new Int32Array(t);let n=new Int32Array(t.length),a=et(t[0]),s=et(t[1]);n[0]=Xe(Math.round(a*e),r,i),n[1]=Xe(Math.round(s*e),r,i);let o=t.length/16,l=2;if(o>=4)for(;l<o-4;l+=4){let u=t[l],h=t[l+1],c=et(u)+a,p=et(h)+s;n[l]=Xe(Math.round(c*e),r,i),n[l+1]=Xe(Math.round(p*e),r,i);let f=t[l+2],d=t[l+3];a=et(f)+c,s=et(d)+p,n[l+2]=Xe(Math.round(a*e),r,i),n[l+3]=Xe(Math.round(s*e),r,i)}for(;l!==t.length;l+=2)a+=et(t[l]),s+=et(t[l+1]),n[l]=Xe(Math.round(a*e),r,i),n[l+1]=Xe(Math.round(s*e),r,i);return n}function Xe(t,e,r){return Math.min(r,Math.max(e,t))}function w3(t){let e=new Int32Array(t.length+1);e[0]=0,e[1]=et(t[0]);let r=e[1];for(let i=2;i!==e.length;++i){let n=t[i-1],a=et(n);r+=a,e[i]=e[i-1]+r}return new Uint32Array(e)}function D3(t,e,r){let i=new Int32Array(r+1);i[0]=0;let n=1,a=i[0];for(let s=0;s<e;s++){let o=t[s],l=t[s+e];l=et(l);for(let u=n;u<n+o;u++)i[u]=l+a,a=i[u];n+=o}return i}function _3(t,e,r){let i=new Uint32Array(r+1);i[0]=0;let n=1,a=i[0];for(let s=0;s<e;s++){let o=t[s],l=t[s+e];for(let u=n;u<n+o;u++)i[u]=l+a,a=i[u];n+=o}return i}function A3(t,e,r){let i=new Int32Array(r),n=0,a=0;for(let s=0;s<e;s++){let o=t[s],l=t[s+e],u=et(l);for(let h=0;h<o;h++)a+=u,i[n++]=a}return i}function S3(t,e,r){let i=new BigInt64Array(r),n=0,a=BigInt(0);for(let s=0;s<e;s++){let o=Number(t[s]),l=t[s+e],u=Ot(l);for(let h=0;h<o;h++)a+=u,i[n++]=a}return i}function qc(t){let e=new Uint32Array(t.length);e[0]=et(t[0])>>>0;for(let r=1;r<t.length;r++)e[r]=e[r-1]+et(t[r])>>>0;return e}function jc(t){let e=new BigUint64Array(t.length);e[0]=BigInt.asUintN(64,Ot(t[0]));for(let r=1;r<t.length;r++)e[r]=BigInt.asUintN(64,e[r-1]+Ot(t[r]));return e}function E3(t){if(t.length<2)return new Uint32Array(t);let e=new Uint32Array(t.length);e[0]=et(t[0])>>>0,e[1]=et(t[1])>>>0;for(let r=2;r<t.length;r+=2)e[r]=e[r-2]+et(t[r])>>>0,e[r+1]=e[r-1]+et(t[r+1])>>>0;return e}function F3(t,e,r,i){let n=yy(t,e,r,i);return new Uint32Array(n)}function k3(t){return t[1]}function T3(t){return et(t[1])}function I3(t){if(t.length===2){let e=et(t[1]);return[e,e]}return[et(t[2]),et(t[3])]}function C3(t){return t[1]}function M3(t){return Ot(t[1])}function B3(t){if(t.length===2){let e=Ot(t[1]);return[e,e]}return[Ot(t[2]),Ot(t[3])]}var St;(function(t){t.PRESENT="PRESENT",t.DATA="DATA",t.OFFSET="OFFSET",t.LENGTH="LENGTH"})(St||(St={}));var jt;(function(t){t.NONE="NONE",t.SINGLE="SINGLE",t.SHARED="SHARED",t.VERTEX="VERTEX",t.MORTON="MORTON",t.FSST="FSST"})(jt||(jt={}));var Me;(function(t){t.VERTEX="VERTEX",t.INDEX="INDEX",t.STRING="STRING",t.KEY="KEY"})(Me||(Me={}));var Ct;(function(t){t.VAR_BINARY="VAR_BINARY",t.GEOMETRIES="GEOMETRIES",t.PARTS="PARTS",t.RINGS="RINGS",t.TRIANGLES="TRIANGLES",t.SYMBOL="SYMBOL",t.DICTIONARY="DICTIONARY"})(Ct||(Ct={}));var P3=[St.PRESENT,St.DATA,St.OFFSET,St.LENGTH],Gc=[H.NONE,H.DELTA,H.COMPONENTWISE_DELTA,H.RLE,H.MORTON],z3=[le.NONE,le.FAST_PFOR,le.VARINT],L3=[jt.NONE,jt.SINGLE,jt.SHARED,jt.VERTEX,jt.MORTON,jt.FSST],V3=[Me.VERTEX,Me.INDEX,Me.STRING,Me.KEY],O3=[Ct.VAR_BINARY,Ct.GEOMETRIES,Ct.PARTS,Ct.RINGS,Ct.TRIANGLES,Ct.SYMBOL,Ct.DICTIONARY];function ct(t,e){let r=N3(t,e);return r.logicalLevelTechnique1===H.MORTON?R3(r,t,e):(H.RLE===r.logicalLevelTechnique1||H.RLE===r.logicalLevelTechnique2)&&le.NONE!==r.physicalLevelTechnique?$3(r,t,e):r}function R3(t,e,r){let i=$t(e,r,2);return{physicalStreamType:t.physicalStreamType,logicalStreamType:t.logicalStreamType,logicalLevelTechnique1:t.logicalLevelTechnique1,logicalLevelTechnique2:t.logicalLevelTechnique2,physicalLevelTechnique:t.physicalLevelTechnique,numValues:t.numValues,byteLength:t.byteLength,decompressedCount:t.decompressedCount,numBits:i[0],coordinateShift:i[1]}}function $3(t,e,r){let i=$t(e,r,2);return{physicalStreamType:t.physicalStreamType,logicalStreamType:t.logicalStreamType,logicalLevelTechnique1:t.logicalLevelTechnique1,logicalLevelTechnique2:t.logicalLevelTechnique2,physicalLevelTechnique:t.physicalLevelTechnique,numValues:t.numValues,byteLength:t.byteLength,decompressedCount:i[1],runs:i[0],numRleValues:i[1]}}function N3(t,e){let r=t[e.get()],i=P3[r>>4],n={};switch(i){case St.DATA:n={dictionaryType:L3[r&15]};break;case St.OFFSET:n={offsetType:V3[r&15]};break;case St.LENGTH:n={lengthType:O3[r&15]}}e.increment();let a=t[e.get()],s=Gc[a>>5],o=Gc[a>>2&7],l=z3[a&3];e.increment();let u=$t(t,e,2),h=u[0],c=u[1];return{physicalStreamType:i,logicalStreamType:n,logicalLevelTechnique1:s,logicalLevelTechnique2:o,physicalLevelTechnique:l,numValues:h,byteLength:c,decompressedCount:h}}var ht;(function(t){t[t.FLAT=0]="FLAT",t[t.CONST=1]="CONST",t[t.SEQUENCE=2]="SEQUENCE",t[t.DICTIONARY=3]="DICTIONARY",t[t.FSST_DICTIONARY=4]="FSST_DICTIONARY"})(ht||(ht={}));var fe=class{constructor(t,e){this.values=t,this._size=e}get(t){let e=Math.floor(t/8),r=t%8;return(this.values[e]>>r&1)==1}set(t,e){let r=Math.floor(t/8),i=t%8;this.values[r]=this.values[r]|+!!e<<i}getInt(t){let e=Math.floor(t/8),r=t%8;return this.values[e]>>r&1}size(){return this._size}getBuffer(){return this.values}};function Er(t,e,r){if(!e)return t;let i=e.size(),n=t.constructor,a=new n(i),s=0;for(let o=0;o<i;o++)a[o]=e.get(o)?t[s++]:r;return a}function U3(t,e,r){if(!r)return t;let i=r.size(),n=new fe(t,e),a=new fe(new Uint8Array(Math.ceil(i/8)),i),s=0;for(let o=0;o<i;o++){let l=r.get(o)?n.get(s++):!1;a.set(o,l)}return a.getBuffer()}function my(t,e,r){for(let i=0;i<t;i++){let n=ct(e,r);r.add(n.byteLength)}}function ci(t,e,r,i,n){let a=q3(t,Math.ceil(e/8),r,i);return n?U3(a,e,n):a}function q3(t,e,r,i){let n=new Uint8Array(e),a=0,s=i.get()+r;for(;a<e&&!(i.get()>=s);){let o=t[i.increment()];if(o<=127){let l=o+3,u=t[i.increment()],h=Math.min(a+l,e);n.fill(u,a,h),a=h}else{let l=256-o;for(let u=0;u<l&&a<e;u++)n[a++]=t[i.increment()]}}return i.set(s),n}function gy(t,e,r,i){let n=e.get(),a=n+r*Float32Array.BYTES_PER_ELEMENT,s=new Uint8Array(t.subarray(n,a)).buffer,o=new Float32Array(s);return e.set(a),i?Er(o,i,0):o}function xy(t,e,r,i){let n=e.get(),a=n+r*Float64Array.BYTES_PER_ELEMENT,s=new Uint8Array(t.subarray(n,a)).buffer,o=new Float64Array(s);return e.set(a),i?Er(o,i,0):o}function j3(t,e,r){let i=e.get(),n=r*Uint32Array.BYTES_PER_ELEMENT,a=new DataView(t.buffer,t.byteOffset,t.byteLength),s=new Uint32Array(r);for(let o=0;o<r;o++)s[o]=a.getUint32(i+o*Uint32Array.BYTES_PER_ELEMENT,!0);return e.add(n),s}function G3(t,e,r){let i=e.get(),n=r*BigUint64Array.BYTES_PER_ELEMENT,a=new DataView(t.buffer,t.byteOffset,t.byteLength),s=new BigUint64Array(r);for(let o=0;o<r;o++)s[o]=a.getBigUint64(i+o*BigUint64Array.BYTES_PER_ELEMENT,!0);return e.add(n),s}var X3=new TextDecoder;function bu(t,e,r){return r-e>=12?X3.decode(t.subarray(e,r)):Y3(t,e,r)}function Y3(t,e,r){let i="",n=e;for(;n<r;){let a=t[n],s=null,o=a>239?4:a>223?3:a>191?2:1;if(n+o>r)break;let l,u,h;o===1?a<128&&(s=a):o===2?(l=t[n+1],(l&192)==128&&(s=(a&31)<<6|l&63,s<=127&&(s=null))):o===3?(l=t[n+1],u=t[n+2],(l&192)==128&&(u&192)==128&&(s=(a&15)<<12|(l&63)<<6|u&63,(s<=2047||s>=55296&&s<=57343)&&(s=null))):o===4&&(l=t[n+1],u=t[n+2],h=t[n+3],(l&192)==128&&(u&192)==128&&(h&192)==128&&(s=(a&15)<<18|(l&63)<<12|(u&63)<<6|h&63,(s<=65535||s>=1114112)&&(s=null))),s===null?(s=65533,o=1):s>65535&&(s-=65536,i+=String.fromCharCode(s>>>10&1023|55296),s=56320|s&1023),i+=String.fromCharCode(s),n+=o}return i}function Ta(t,e,r,i,n){return J3(pi(t,e,r),r,i,n)}function Vt(t,e,r,i,n){return Q3(pi(t,e,r),r,i,n)}function Ze(t,e,r){return e6(pi(t,e,r),r)}function pi(t,e,r){let i=r.physicalLevelTechnique;switch(i){case le.FAST_PFOR:return h3(t,r.numValues,r.byteLength,e);case le.VARINT:return $t(t,e,r.numValues);case le.NONE:return j3(t,e,r.numValues);default:throw Error(`Specified physicalLevelTechnique ${i} is not supported (yet).`)}}function _n(t,e,r){let i=r.physicalLevelTechnique;switch(i){case le.VARINT:return xu(t,e,r.numValues);case le.NONE:return G3(t,e,r.numValues);default:throw Error(`Specified physicalLevelTechnique ${i} is not supported (yet).`)}}function W3(t,e,r){let i=pi(t,e,r);return i.length===1?et(i[0]):T3(i)}function wu(t,e,r){let i=pi(t,e,r);return i.length===1?r.logicalLevelTechnique1===H.DELTA?et(i[0]):i[0]:k3(i)}function vy(t,e,r){return I3(pi(t,e,r))}function by(t,e,r){return B3(xu(t,e,r.numValues))}function wy(t,e,r,i){return _y(_n(t,e,r),r,i)}function Du(t,e,r,i){return Ay(_n(t,e,r),r,i)}function Z3(t,e,r,i){let n=H3(t,e,r,!1);return i?Er(n,i,0):n}function H3(t,e,r,i){if(r.physicalLevelTechnique===le.VARINT)return t6(o3(t,e,r.numValues),r,i);let n=_n(t,e,r),a=i?_y(n,r):Ay(n,r);return Float64Array.from(a,Number)}function K3(t,e,r){let i=_n(t,e,r);return i.length===1?Ot(i[0]):M3(i)}function Dy(t,e,r){let i=_n(t,e,r);return i.length===1?r.logicalLevelTechnique1===H.DELTA?Ot(i[0]):i[0]:C3(i)}function J3(t,e,r,i){let n;switch(e.logicalLevelTechnique1){case H.DELTA:if(e.logicalLevelTechnique2===H.RLE){let a=e;if(!i)return A3(t,a.runs,a.numRleValues);t=cl(t,a.runs,a.numRleValues),n=Nc(t)}else n=Nc(t);break;case H.RLE:n=m3(t,e.runs,e.numRleValues);break;case H.MORTON:vu(t),n=new Int32Array(t);break;case H.COMPONENTWISE_DELTA:if(r&&!i)return yy(t,r.scale,r.min,r.max);n=b3(t);break;case H.NONE:n=p3(t);break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`)}return i?Er(n,i,0):n}function Q3(t,e,r,i){let n;switch(e.logicalLevelTechnique1){case H.DELTA:if(e.logicalLevelTechnique2===H.RLE){let a=e;n=qc(cl(t,a.runs,a.numRleValues))}else n=qc(t);break;case H.RLE:n=cl(t,e.runs,e.numRleValues);break;case H.MORTON:vu(t),n=t;break;case H.COMPONENTWISE_DELTA:n=r&&!i?F3(t,r.scale,r.min,r.max):E3(t);break;case H.NONE:n=t;break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`)}return i?Er(n,i,0):n}function _y(t,e,r){let i;switch(e.logicalLevelTechnique1){case H.DELTA:if(e.logicalLevelTechnique2===H.RLE){let n=e;if(!r)return S3(t,n.runs,n.numRleValues);t=pl(t,n.runs,n.numRleValues),i=Uc(t)}else i=Uc(t);break;case H.RLE:i=g3(t,e.runs,e.numRleValues);break;case H.NONE:i=f3(t);break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`)}return r?Er(i,r,BigInt(0)):i}function Ay(t,e,r){let i;switch(e.logicalLevelTechnique1){case H.DELTA:if(e.logicalLevelTechnique2===H.RLE){let n=e;i=jc(pl(t,n.runs,n.numRleValues))}else i=jc(t);break;case H.RLE:i=pl(t,e.runs,e.numRleValues);break;case H.NONE:i=t;break;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`)}return r?Er(i,r,BigInt(0)):i}function t6(t,e,r){switch(e.logicalLevelTechnique1){case H.DELTA:if(e.logicalLevelTechnique2===H.RLE){let i=e;t=dy(t,i.runs,i.numRleValues)}return y3(t),t;case H.RLE:return i6(t,e,r);case H.NONE:return r&&d3(t),t;default:throw Error(`The specified Logical level technique is not supported: ${e.logicalLevelTechnique1}`)}}function e6(t,e){if(e.logicalLevelTechnique1===H.DELTA&&e.logicalLevelTechnique2===H.NONE)return w3(t);if(e.logicalLevelTechnique1===H.RLE&&e.logicalLevelTechnique2===H.NONE){let r=e;return _3(t,r.runs,r.numRleValues)}if(e.logicalLevelTechnique1===H.NONE&&e.logicalLevelTechnique2===H.NONE){v3(t);let r=new Uint32Array(e.numValues+1);return r[0]=0,r.set(t,1),r}if(e.logicalLevelTechnique1===H.DELTA&&e.logicalLevelTechnique2===H.RLE){let r=e,i=D3(t,r.runs,r.numRleValues);return vu(i),new Uint32Array(i)}throw Error("Only delta encoding is supported for transforming length to offset streams yet.")}function es(t,e,r,i,n="int32"){let a=t.logicalLevelTechnique1;if(a===H.RLE)return t.runs===1?ht.CONST:ht.FLAT;if(a!==H.DELTA||t.logicalLevelTechnique2!==H.RLE)return t.numValues===1?ht.CONST:ht.FLAT;let s=e instanceof fe?e.size():e,o=t;if(o.numRleValues!==s)return ht.FLAT;if(o.runs===1)return ht.SEQUENCE;if(o.runs!==2)return t.numValues===1?ht.CONST:ht.FLAT;let l=i.get();if(t.physicalLevelTechnique===le.VARINT)return r6(r,i,n)?ht.SEQUENCE:t.numValues===1?ht.CONST:ht.FLAT;let u=i.get(),h=new Int32Array(r.buffer,r.byteOffset+u,4);return i.set(l),h[2]===2&&h[3]===2?ht.SEQUENCE:t.numValues===1?ht.CONST:ht.FLAT}function r6(t,e,r){let i=new cy(e.get());if(r==="int64"){let a=xu(t,i,4);return a[2]===BigInt(2)&&a[3]===BigInt(2)}let n=$t(t,i,4);return n[2]===2&&n[3]===2}function i6(t,e,r){return r?x3(t,e.runs,e.numRleValues):dy(t,e.runs,e.numRleValues)}var Sy=class extends ts{getValueFromBuffer(t){return this.dataBuffer[t]}},Ey=class extends uy{constructor(t,e,r,i,n){super(t,n?BigInt64Array.of(e):BigUint64Array.of(e),r,i)}getValueFromBuffer(t){return this.dataBuffer[0]+BigInt(t)*this.delta}};function _u(t,e,r){return{x:Xc(t,e)-r,y:Xc(t>>1,e)-r}}function Xc(t,e){let r=0;for(let i=0;i<e;i++)r|=(t&1<<2*i)>>i;return r}var Rt;(function(t){t[t.POINT=0]="POINT",t[t.LINESTRING=1]="LINESTRING",t[t.POLYGON=2]="POLYGON",t[t.MULTIPOINT=3]="MULTIPOINT",t[t.MULTILINESTRING=4]="MULTILINESTRING",t[t.MULTIPOLYGON=5]="MULTIPOLYGON"})(Rt||(Rt={}));var n6;(function(t){t[t.POINT=0]="POINT",t[t.LINESTRING=1]="LINESTRING",t[t.POLYGON=2]="POLYGON"})(n6||(n6={}));var Fr;(function(t){t[t.MORTON=0]="MORTON",t[t.VEC_2=1]="VEC_2",t[t.VEC_3=2]="VEC_3"})(Fr||(Fr={}));function a6(t){let e=Array(t.numGeometries),r=1,i=1,n=1,a=0,s=0,o=0,l=t.mortonSettings,u=t.topologyVector,h=u.geometryOffsets,c=u.partOffsets,p=u.ringOffsets,f=t.vertexOffsets,d=!f||f.length===0,y=t.containsPolygonGeometry(),m=t.vertexBuffer;for(let g=0;g<t.numGeometries;g++){let x=t.geometryType(g);switch(x){case Rt.POINT:{let v,b;if(d)v=m[s++],b=m[s++];else if(t.vertexBufferType===Fr.MORTON){let D=m[f[o++]],A=_u(D,l.numBits,l.coordinateShift);v=A.x,b=A.y}else{let D=f[o++]*2;v=m[D],b=m[D+1]}e[a++]=[[new B(v,b)]],h&&n++,c&&r++,p&&i++}break;case Rt.MULTIPOINT:{let v=h[n]-h[n-1];n++;let b;if(d){b=Array(v);for(let D=0;D<v;D++){let A=m[s++],_=m[s++];b[D]=new B(A,_)}}else b=lr(t.vertexBufferType,m,f,o,v,!1,l),o+=v;e[a++]=b.map(D=>[D]),r+=v,i+=v}break;case Rt.LINESTRING:{let v;y?(v=p[i]-p[i-1],i++):v=c[r]-c[r-1],r++;let b;d?(b=Or(m,s,v,!1),s+=v*2):(b=lr(t.vertexBufferType,m,f,o,v,!1,l),o+=v),e[a++]=[b],h&&n++}break;case Rt.POLYGON:{let v=c[r]-c[r-1];r++;let b=Array(v-1),D,A=p[i]-p[i-1];if(i++,d){D=Or(m,s,A,!0),s+=A*2;for(let _=0;_<b.length;_++)A=p[i]-p[i-1],i++,b[_]=Or(m,s,A,!0),s+=A*2}else{D=lr(t.vertexBufferType,m,f,o,A,!0,l),o+=A;for(let _=0;_<b.length;_++)A=p[i]-p[i-1],i++,b[_]=lr(t.vertexBufferType,m,f,o,A,!0,l),o+=A}e[a++]=[D].concat(b),h&&n++}break;case Rt.MULTILINESTRING:{let v=h[n]-h[n-1];n++;let b=Array(v);for(let D=0;D<v;D++){let A;if(y?(A=p[i]-p[i-1],i++):A=c[r]-c[r-1],r++,d)b[D]=Or(m,s,A,!1),s+=A*2;else{let _=lr(t.vertexBufferType,m,f,o,A,!1,l);b[D]=_,o+=A}}e[a++]=b}break;case Rt.MULTIPOLYGON:{let v=h[n]-h[n-1];n++;let b=Array(v);for(let D=0;D<v;D++){let A=c[r]-c[r-1];r++;let _,S=Array(A-1),k=p[i]-p[i-1];i++,d?(_=Or(m,s,k,!0),s+=k*2):(_=lr(t.vertexBufferType,m,f,o,k,!0,l),o+=k);for(let z=0;z<S.length;z++){let O=p[i]-p[i-1];i++,d?(S[z]=Or(m,s,O,!0),s+=O*2):(S[z]=lr(t.vertexBufferType,m,f,o,O,!0,l),o+=O)}b[D]=[_].concat(S)}e[a++]=b.flat()}break;default:throw Error(`The specified geometry type (${x}) is currently not supported.`)}}return e}function lr(t,e,r,i,n,a,s){return t===Fr.MORTON?o6(e,r,i,n,a,s):s6(e,r,i,n,a)}function Or(t,e,r,i){let n=Array(i?r+1:r);for(let a=0;a<r*2;a+=2){let s=t[e+a],o=t[e+a+1];n[a/2]=new B(s,o)}return i&&(n[n.length-1]=n[0]),n}function s6(t,e,r,i,n){let a=Array(n?i+1:i);for(let s=0;s<i*2;s+=2){let o=e[r+s/2]*2,l=t[o],u=t[o+1];a[s/2]=new B(l,u)}return n&&(a[a.length-1]=a[0]),a}function o6(t,e,r,i,n,a){let s=Array(n?i+1:i);for(let o=0;o<i;o++){let l=t[e[r+o]],u=_u(l,a.numBits,a.coordinateShift);s[o]=new B(u.x,u.y)}return n&&(s[s.length-1]=s[0]),s}var Fy=class{constructor(t,e,r,i,n){this._vertexBufferType=t,this._topologyVector=e,this._vertexOffsets=r,this._vertexBuffer=i,this._mortonSettings=n}get vertexBufferType(){return this._vertexBufferType}get topologyVector(){return this._topologyVector}get vertexOffsets(){return this._vertexOffsets}get vertexBuffer(){return this._vertexBuffer}getSimpleEncodedVertex(t){let e=this.vertexOffsets?this.vertexOffsets[t]*2:t*2;return[this.vertexBuffer[e],this.vertexBuffer[e+1]]}getVertex(t){if(this.vertexOffsets&&this.mortonSettings){let r=this.vertexOffsets[t],i=this.vertexBuffer[r],n=_u(i,this.mortonSettings.numBits,this.mortonSettings.coordinateShift);return[n.x,n.y]}let e=this.vertexOffsets?this.vertexOffsets[t]*2:t*2;return[this.vertexBuffer[e],this.vertexBuffer[e+1]]}getGeometries(){return a6(this)}get mortonSettings(){return this._mortonSettings}};function l6(t,e,r,i,n){return new ky(t,e,Fr.VEC_2,r,i,n)}function u6(t,e,r,i,n,a){return new ky(t,e,Fr.MORTON,r,i,n,a)}var ky=class extends Fy{constructor(t,e,r,i,n,a,s){super(r,i,n,a,s),this._numGeometries=t,this._geometryType=e}geometryType(t){return this._geometryType}get numGeometries(){return this._numGeometries}containsPolygonGeometry(){return this._geometryType===Rt.POLYGON||this._geometryType===Rt.MULTIPOLYGON}containsSingleGeometryType(){return!0}};function Ty(t,e,r,i){return new Iy(Fr.VEC_2,t,e,r,i)}function h6(t,e,r,i,n){return new Iy(Fr.MORTON,t,e,r,i,n)}var Iy=class extends Fy{constructor(t,e,r,i,n,a){super(t,r,i,n,a),this._geometryTypes=e}geometryType(t){return this._geometryTypes[t]}get numGeometries(){return this._geometryTypes.length}containsPolygonGeometry(){for(let t=0;t<this.numGeometries;t++)if(this.geometryType(t)===Rt.POLYGON||this.geometryType(t)===Rt.MULTIPOLYGON)return!0;return!1}containsSingleGeometryType(){return!1}},Cy=class{constructor(t,e,r,i){this._triangleOffsets=t,this._indexBuffer=e,this._vertexBuffer=r,this._topologyVector=i}get triangleOffsets(){return this._triangleOffsets}get indexBuffer(){return this._indexBuffer}get vertexBuffer(){return this._vertexBuffer}get topologyVector(){return this._topologyVector}getGeometries(){if(!this._topologyVector)throw Error("Cannot convert GpuVector to coordinates without topology information");let t=new Uint32Array(this.numGeometries);for(let e=0;e<this.numGeometries;e++)t[e]=this.geometryType(e);return Ty(t,this._topologyVector,void 0,this._vertexBuffer).getGeometries()}[Symbol.iterator](){return null}};function Yc(t,e,r,i,n,a){return new c6(t,e,r,i,n,a)}var c6=class extends Cy{constructor(t,e,r,i,n,a){super(r,i,n,a),this._numGeometries=t,this._geometryType=e}geometryType(t){return this._geometryType}get numGeometries(){return this._numGeometries}containsSingleGeometryType(){return!0}};function Wc(t,e,r,i,n){return new p6(t,e,r,i,n)}var p6=class extends Cy{constructor(t,e,r,i,n){super(e,r,i,n),this._geometryTypes=t}geometryType(t){return this._geometryTypes[t]}get numGeometries(){return this._geometryTypes.length}containsSingleGeometryType(){return!1}};function f6(t,e,r,i,n){let a=ct(t,r),s=es(a,i,t,r),o,l,u,h;if(s===ht.CONST){let v=wu(t,r,a),b,D,A,_;for(let S=0;S<e-1;S++){let k=ct(t,r);switch(k.physicalStreamType){case St.LENGTH:switch(k.logicalStreamType.lengthType){case Ct.GEOMETRIES:b=Ze(t,r,k);break;case Ct.PARTS:D=Ze(t,r,k);break;case Ct.RINGS:A=Ze(t,r,k);break;case Ct.TRIANGLES:_=Ze(t,r,k)}break;case St.OFFSET:switch(k.logicalStreamType.offsetType){case Me.VERTEX:o=Vt(t,r,k);break;case Me.INDEX:h=Vt(t,r,k)}break;case St.DATA:if(jt.VERTEX===k.logicalStreamType.dictionaryType)l=Ta(t,r,k,n);else{let z=k;u={numBits:z.numBits,coordinateShift:z.coordinateShift},l=Vt(t,r,k,n)}}}return h?b!==void 0||D!==void 0?Yc(i,v,_,h,l,{geometryOffsets:b,partOffsets:D,ringOffsets:A}):Yc(i,v,_,h,l):u===void 0?l6(i,v,{geometryOffsets:b,partOffsets:D,ringOffsets:A},o,l):u6(i,v,{geometryOffsets:b,partOffsets:D,ringOffsets:A},o,l,u)}let c=Vt(t,r,a),p,f,d,y;for(let v=0;v<e-1;v++){let b=ct(t,r);switch(b.physicalStreamType){case St.LENGTH:switch(b.logicalStreamType.lengthType){case Ct.GEOMETRIES:p=Vt(t,r,b);break;case Ct.PARTS:f=Vt(t,r,b);break;case Ct.RINGS:d=Vt(t,r,b);break;case Ct.TRIANGLES:y=Ze(t,r,b)}break;case St.OFFSET:switch(b.logicalStreamType.offsetType){case Me.VERTEX:o=Vt(t,r,b);break;case Me.INDEX:h=Vt(t,r,b)}break;case St.DATA:if(jt.VERTEX===b.logicalStreamType.dictionaryType)l=Ta(t,r,b,n);else{let D=b;u={numBits:D.numBits,coordinateShift:D.coordinateShift},l=Vt(t,r,b,n)}}}let m,g,x;return p?(m=Hs(c,p,2),f&&d?(g=Zc(c,m,f,!1),x=y6(c,m,g,d)):f&&(g=d6(c,m,f))):f&&d?(g=Hs(c,f,1),x=Zc(c,g,d,!0)):f&&(g=Hs(c,f,0)),h&&!g?Wc(c,y,h,l):h?Wc(c,y,h,l,{geometryOffsets:m,partOffsets:g,ringOffsets:x}):u===void 0?Ty(c,{geometryOffsets:m,partOffsets:g,ringOffsets:x},o,l):h6(c,{geometryOffsets:m,partOffsets:g,ringOffsets:x},o,l,u)}function Hs(t,e,r){let i=new Uint32Array(t.length+1),n=0;i[0]=n;let a=0;for(let s=0;s<t.length;s++)n=i[s+1]=n+(t[s]>r?e[a++]:1);return i}function Zc(t,e,r,i){let n=new Uint32Array(e[e.length-1]+1),a=0;n[0]=a;let s=1,o=0;for(let l=0;l<t.length;l++){let u=t[l],h=e[l+1]-e[l];if(u===5||u===2||i&&(u===4||u===1))for(let c=0;c<h;c++)a=n[s++]=a+r[o++];else for(let c=0;c<h;c++)n[s++]=++a}return n}function d6(t,e,r){let i=new Uint32Array(e[e.length-1]+1),n=0;i[0]=n;let a=1,s=0;for(let o=0;o<t.length;o++){let l=t[o],u=e[o+1]-e[o];if(l===4||l===1)for(let h=0;h<u;h++)n=i[a++]=n+r[s++];else for(let h=0;h<u;h++)i[a++]=++n}return i}function y6(t,e,r,i){let n=new Uint32Array(r[r.length-1]+1),a=0;n[0]=a;let s=1,o=1,l=0;for(let u=0;u<t.length;u++){let h=t[u],c=e[u+1]-e[u];if(h!==0&&h!==3)for(let p=0;p<c;p++){let f=r[s]-r[s-1];s++;for(let d=0;d<f;d++)a=n[o++]=a+i[l++]}else for(let p=0;p<c;p++)n[o++]=++a,s++}return n}var m6=class extends Sr{constructor(t,e,r){super(t,e.getBuffer(),r),this.dataVector=e}getValueFromBuffer(t){return this.dataVector.get(t)}},g6=class extends ts{getValueFromBuffer(t){return this.dataBuffer[t]}},My=class extends Sr{constructor(t,e,r,i){super(t,i?BigInt64Array.of(e):BigUint64Array.of(e),r)}getValueFromBuffer(t){return this.dataBuffer[0]}},Au=class extends Sr{constructor(t,e,r,i){super(t,r,i),this.offsetBuffer=e}},Hc=class extends Au{constructor(t,e,r,i){super(t,e,r,i!=null?i:e.length-1)}getValueFromBuffer(t){let e=this.offsetBuffer[t],r=this.offsetBuffer[t+1];return bu(this.dataBuffer,e,r)}},Qr=class extends Au{constructor(t,e,r,i,n){super(t,r,i,n!=null?n:e.length),this.indexBuffer=e,this.indexBuffer=e}getValueFromBuffer(t){let e=this.indexBuffer[t],r=this.offsetBuffer[e],i=this.offsetBuffer[e+1];return bu(this.dataBuffer,r,i)}};function x6(t,e){let r=0;for(let i=0;i<e.length;i++){let n=e[i];n===255?(r++,i++):r+=t[n]}return r}function v6(t,e,r){let i=new Uint32Array(e.length);for(let s=1;s<e.length;s++)i[s]=i[s-1]+e[s-1];let n=new Uint8Array(x6(e,r)),a=0;for(let s=0;s<r.length;s++){let o=r[s];if(o===255)s++,n[a++]=r[s];else{let l=e[o],u=i[o];for(;l-- >0;)n[a++]=t[u++]}}return n}var By=class extends Au{constructor(t,e,r,i,n,a,s,o){super(t,r,i,s!=null?s:e.length),this.indexBuffer=e,this.symbolOffsetBuffer=n,this.symbolTableBuffer=a,this.sharedDictionaryCache=o}getValueFromBuffer(t){var n,a,s;(s=this.decodedDictionary)!=null||(this.decodedDictionary=(n=this.sharedDictionaryCache)==null?void 0:n.decodedDictionary,(a=this.decodedDictionary)!=null||(this.decodedDictionary=this.decodeDictionary(),this.sharedDictionaryCache&&(this.sharedDictionaryCache.decodedDictionary=this.decodedDictionary)));let e=this.indexBuffer[t],r=this.offsetBuffer[e],i=this.offsetBuffer[e+1];return bu(this.decodedDictionary,r,i)}decodeDictionary(){var t;return(t=this.symbolLengthBuffer)!=null||(this.symbolLengthBuffer=this.offsetToLengthBuffer(this.symbolOffsetBuffer)),v6(this.symbolTableBuffer,this.symbolLengthBuffer,this.dataBuffer)}offsetToLengthBuffer(t){let e=new Uint32Array(t.length-1),r=t[0];for(let i=1;i<t.length;i++){let n=t[i];e[i-1]=n-r,r=n}return e}};function Py(t,e,r,i,n){var f,d;let a,s,o,l,u,h=n,c,p;for(let y=0;y<i;y++){let m=ct(e,r);switch(m.physicalStreamType){case St.PRESENT:{let g=new fe(ci(e,m.numValues,m.byteLength,r),m.numValues);h=n!=null?n:g;break}case St.OFFSET:s=Vt(e,r,m,void 0,h);break;case St.LENGTH:{let g=Ze(e,r,m);Ct.DICTIONARY===m.logicalStreamType.lengthType?a=g:Ct.SYMBOL===m.logicalStreamType.lengthType?l=g:c=g;break}case St.DATA:{let g=e.subarray(r.get(),r.get()+m.byteLength);r.add(m.byteLength);let x=m.logicalStreamType.dictionaryType;jt.FSST===x?u=g:jt.SINGLE===x||jt.SHARED===x?o=g:jt.NONE===x&&(p=g);break}}}return(d=(f=b6(t,u,s,a,o,l,h))!=null?f:w6(t,o,s,a,h))!=null?d:D6(t,c,p,s,h)}function b6(t,e,r,i,n,a,s){if(e){if(!r||!i||!n||!a)throw Error(`Incomplete FSST dictionary string column "${t}"`);return new By(t,r,i,n,a,e,s)}}function w6(t,e,r,i,n){if(e){if(!r||!i)throw Error(`Incomplete dictionary string column "${t}"`);return n?new Qr(t,r,i,e,n):new Qr(t,r,i,e)}}function D6(t,e,r,i,n){if(e&&r){if(i)return n?new Qr(t,i,e,r,n):new Qr(t,i,e,r);if(n&&n.size()!==e.length-1){let a=new Uint32Array(n.size()),s=0;for(let o=0;o<n.size();o++)n.get(o)?a[o]=s++:a[o]=0;return new Qr(t,a,e,r,n)}return n?new Hc(t,e,r,n):new Hc(t,e,r)}}function _6(t,e,r,i){let n,a,s,o,l=!1;for(;!l;){let f=ct(t,e);switch(f.physicalStreamType){case St.LENGTH:Ct.DICTIONARY===f.logicalStreamType.lengthType?n=Ze(t,e,f):s=Ze(t,e,f);break;case St.DATA:jt.SINGLE===f.logicalStreamType.dictionaryType||jt.SHARED===f.logicalStreamType.dictionaryType?(a=t.subarray(e.get(),e.get()+f.byteLength),l=!0):o=t.subarray(e.get(),e.get()+f.byteLength),e.add(f.byteLength)}}if(r.type!=="complexType")throw Error(`Shared dictionary column ${r.name} must be a complex (struct) column.`);if(!n||!a)throw Error(`Incomplete shared dictionary for column "${r.name}"`);let u=r.complexType.children,h=[],c=o?{}:void 0,p=0;for(let f of u){let d=$t(t,e,1)[0];if(d===0)continue;let y=f.name?`${r.name}${f.name}`:r.name;if(i&&!i.has(y)){my(d,t,e);continue}if(f.type!=="scalarField"||f.scalarField.physicalType!==it.STRING)throw Error("Currently only scalar string fields are implemented for a struct.");if(d>1&&!f.nullable||d===1&&f.nullable)throw Error(`The number of streams for the child field ${f.name} does not match its nullability. nullibilty: ${f.nullable}, numStreams: ${d}`);let m;if(f.nullable){let x=ct(t,e);m=new fe(ci(t,x.numValues,x.byteLength,e),x.numValues)}let g=Vt(t,e,ct(t,e),void 0,m);if(o){if(!s)throw Error(`Incomplete shared FSST dictionary for column "${y}"`);h[p++]=new By(y,g,n,a,s,o,m,c)}else h[p++]=new Qr(y,g,n,a,m)}return h}var Kc=class extends Sr{constructor(t,e,r){super(t,new Uint8Array,r!=null?r:e.length),this.values=e}getValueFromBuffer(t){return this.values[t]}},Be;(function(t){t[t.STRING=1]="STRING",t[t.INT32=2]="INT32",t[t.UINT32=4]="UINT32",t[t.INT64=8]="INT64",t[t.UINT64=16]="UINT64",t[t.FLOAT=32]="FLOAT",t[t.DOUBLE=64]="DOUBLE",t[t.PRESENCE=128]="PRESENCE"})(Be||(Be={}));var pr;(function(t){t[t.FALSE=0]="FALSE",t[t.TRUE=1]="TRUE",t[t.START_MAP=2]="START_MAP",t[t.START_LIST=3]="START_LIST",t[t.COUNT=4]="COUNT"})(pr||(pr={}));function A6(t,e,r,i){let n=S6(r);if(i===0)return n.map(h=>new Kc(h,[]));let a=E6(t,e,i),s=(a.presentStream?a.presentCount:a.lengthStream.length)/n.length,o=[],l=0,u=0;for(let h=0;h<n.length;h++){let c=C6(a,h,s,l,u);o.push(new Kc(n[h],c.value,c.nullabilityBuffer)),l=c.countsEnd,u=c.valuesEnd}return o}function S6(t){let e=t.type==="complexType"?t.complexType.children:void 0;return!e||e.length===0?[t.name]:e.map(r=>{var i;return t.name+((i=r.name)!=null?i:"")})}function E6(t,e,r){let i=t[e.get()];e.add(1);let n=Vt(t,e,ct(t,e)),a=r-1,s=[];i&Be.STRING&&(a-=F6(t,e,s)),a-=k6(t,e,i,s),a-=T6(t,e,i,s);let o,l=0;if(i&Be.PRESENCE){let h=I6(t,e);o=h.value,l=h.count,a--}let u=new Uint32Array;if(a>0&&(u=Vt(t,e,ct(t,e)),a--),a!==0)throw Error(`Unexpected number of remaining streams while decoding map column: ${a}`);return{lengthStream:n,dictionary:s,presentStream:o,presentCount:l,flattenedValues:u}}function F6(t,e,r){let i=t[e.get()];e.add(1);let n=Py("",t,e,i);if(n)for(let a=0;a<n.size;a++)r.push(n.getValue(a));return i}function k6(t,e,r,i){let n=0;return r&Be.INT32?(Xr(i,Ta(t,e,ct(t,e))),n++):r&Be.INT64&&(Xr(i,wy(t,e,ct(t,e))),n++),r&Be.UINT32?(Xr(i,Vt(t,e,ct(t,e))),n++):r&Be.UINT64&&(Xr(i,Du(t,e,ct(t,e))),n++),n}function T6(t,e,r,i){let n=0;return r&Be.FLOAT&&(Xr(i,gy(t,e,ct(t,e).numValues)),n++),r&Be.DOUBLE&&(Xr(i,xy(t,e,ct(t,e).numValues)),n++),n}function I6(t,e){let r=ct(t,e);if(r.physicalStreamType!==St.PRESENT)throw Error(`Expected PRESENT stream for map column but found: ${r.physicalStreamType}`);let i=r.numValues,n=e.get(),a=new fe(ci(t,i,r.byteLength,e),i);return e.set(n+r.byteLength),{value:a,count:i}}function C6(t,e,r,i,n){let{lengthStream:a,flattenedValues:s,presentStream:o,dictionary:l}=t,u=e*r,h=r,c;if(o){c=new fe(new Uint8Array(Math.ceil(r/8)),r),h=0;for(let x=0;x<r;x++)o.get(u+x)&&(c.set(x,!0),h++)}let p=i+h;if(p>a.length)throw Error("Merged map counts underflow while decoding child streams");let f=Array(r),d=i,y=n;for(let x=0;x<r;x++){if(o&&!o.get(u+x)){f[x]=null;continue}let v=y+a[d++];if(v>s.length)throw Error("Map value stream underflow while decoding feature payload");let b=M6(s,y,v,l);f[x]=b.value,y=b.nextIndex}let m=0;for(let x=i;x<p;x++)m+=a[x];let g=n+m;if(y!==g)throw Error("Unused flattened map values remain after decode");return{value:f,nullabilityBuffer:c,countsEnd:p,valuesEnd:g}}function M6(t,e,r,i){return r-e===1||t[e]===pr.START_LIST?Su(t,e,r,i):zy(t,e,r,i)}function zy(t,e,r,i){let n=Object.create(null),a=e;for(;a<r;){let s=Ly(t[a++],i);if(typeof s!="string")throw Error(`Map key dictionary index does not resolve to a string: ${s}`);let o=Su(t,a,r,i);n[s]=o.value,a=o.nextIndex}return{value:n,nextIndex:a}}function Su(t,e,r,i){if(e>=r)throw Error("Unexpected end of map value stream");let n=t[e];if(n===pr.FALSE)return{value:!1,nextIndex:e+1};if(n===pr.TRUE)return{value:!0,nextIndex:e+1};if(n===pr.START_MAP){let a=Jc(t,e,r);return{value:zy(t,e+2,a,i).value,nextIndex:a}}if(n===pr.START_LIST){let a=Jc(t,e,r),s=[],o=e+2;for(;o<a;){let l=Su(t,o,a,i);s.push(l.value),o=l.nextIndex}return{value:s,nextIndex:a}}return{value:Ly(n,i),nextIndex:e+1}}function Jc(t,e,r){if(e+1>=r)throw Error("Missing length for nested map/list payload");let i=t[e+1];if(i<2)throw Error(`Invalid nested payload length: ${i}`);let n=e+i;if(n>r)throw Error("Nested payload exceeds containing payload bounds");return n}function Ly(t,e){let r=t-pr.COUNT;if(r<0||r>=e.length)throw Error(`Scalar dictionary index out of range: ${t}`);return e[r]}function Xr(t,e){for(let r of e)t.push(r)}function B6(t,e,r,i,n,a){var s;return r.type==="scalarType"?a&&!a.has(r.name)?(my(i,t,e),null):P6(i,t,e,n,r.scalarType,r):((s=r.complexType)==null?void 0:s.physicalType)===Qe.MAP?A6(t,e,r,i):i===0?null:_6(t,e,r,a)}function P6(t,e,r,i,n,a){var l;let s;if(t===0)return null;if(a.nullable){let u=ct(e,r),h=u.numValues,c=r.get(),p=ci(e,h,u.byteLength,r);r.set(c+u.byteLength),s=new fe(p,u.numValues)}let o=s!=null?s:i;switch(n.physicalType){case it.UINT_32:case it.INT_32:return R6(e,r,a,n,o);case it.STRING:{let u=a.nullable?t-1:t;return(l=Py(a.name,e,r,u,s))!=null?l:null}case it.BOOLEAN:return z6(e,r,a,i,o);case it.UINT_64:case it.INT_64:return O6(e,r,a,o,n);case it.FLOAT:return L6(e,r,a,o);case it.DOUBLE:return V6(e,r,a,o);default:throw Error(`The specified data type for the field is currently not supported: ${n}`)}}function z6(t,e,r,i,n){let a=ct(t,e),s=a.numValues,o=e.get(),l=An(n)?n:void 0,u=ci(t,s,a.byteLength,e,l);e.set(o+a.byteLength);let h=new fe(u,s);return new m6(r.name,h,n)}function L6(t,e,r,i){let n=ct(t,e),a=An(i)?i:void 0,s=gy(t,e,n.numValues,a);return new g6(r.name,s,i)}function V6(t,e,r,i){let n=ct(t,e),a=An(i)?i:void 0,s=xy(t,e,n.numValues,a);return new fu(r.name,s,i)}function O6(t,e,r,i,n){let a=ct(t,e),s=es(a,i,t,e,"int64"),o=n.physicalType===it.INT_64;if(s===ht.FLAT){let u=An(i)?i:void 0,h=o?wy(t,e,a,u):Du(t,e,a,u);return new Sy(r.name,h,i)}if(s===ht.SEQUENCE){let u=by(t,e,a);return new Ey(r.name,u[0],u[1],a.numRleValues,o)}let l=o?K3(t,e,a):Dy(t,e,a);return new My(r.name,l,i,o)}function R6(t,e,r,i,n){let a=ct(t,e),s=es(a,n,t,e),o=i.physicalType===it.INT_32;if(s===ht.FLAT){let u=An(n)?n:void 0,h=o?Ta(t,e,a,void 0,u):Vt(t,e,a,void 0,u);return new pu(r.name,h,n)}if(s===ht.SEQUENCE){let u=vy(t,e,a);return new du(r.name,u[0],u[1],a.numRleValues,o)}let l=o?W3(t,e,a):wu(t,e,a);return new yu(r.name,l,n,o)}function An(t){return t instanceof fe}var It={ID:0,ID_NULLABLE:1,ID_LONG:2,GEOMETRY:4,SCALAR_BASE:10,STRUCT:30,MAP:31};function Vy(t){switch(t){case It.ID:case It.ID|It.ID_NULLABLE:case It.ID|It.ID_LONG:case It.ID|It.ID_LONG|It.ID_NULLABLE:return{nullable:(t&It.ID_NULLABLE)!==0,columnScope:qi.FEATURE,type:"scalarType",scalarType:{longID:(t&It.ID_LONG)!==0,type:"logicalType",logicalType:hy.ID}};case It.GEOMETRY:return{nullable:!1,columnScope:qi.FEATURE,type:"complexType",complexType:{type:"physicalType",physicalType:Qe.GEOMETRY,children:[]}};case It.STRUCT:return{nullable:!1,columnScope:qi.FEATURE,type:"complexType",complexType:{type:"physicalType",physicalType:Qe.STRUCT,children:[]}};case It.MAP:return{nullable:!0,columnScope:qi.FEATURE,type:"complexType",complexType:{type:"physicalType",physicalType:Qe.MAP,children:[]}};default:return j6(t)}}function $6(t){return t>=It.SCALAR_BASE}function Oy(t){return t===It.STRUCT||t===It.MAP}function N6(t){if(t.type==="scalarType"){let e=t.scalarType;if(e.type==="physicalType")switch(e.physicalType){case it.BOOLEAN:case it.INT_8:case it.UINT_8:case it.INT_32:case it.UINT_32:case it.INT_64:case it.UINT_64:case it.FLOAT:case it.DOUBLE:return!1;case it.STRING:return!0;default:return!1}if(e.type==="logicalType")return!1}else if(t.type==="complexType"){let e=t.complexType;if(e.type==="physicalType")switch(e.physicalType){case Qe.GEOMETRY:case Qe.STRUCT:case Qe.MAP:return!0;default:return!1}}return console.warn("Unexpected column type in hasStreamCount",t),!1}function U6(t){var e;return t.type==="scalarType"&&((e=t.scalarType)==null?void 0:e.type)==="logicalType"&&t.scalarType.logicalType===hy.ID}function q6(t){var e;return t.type==="complexType"&&((e=t.complexType)==null?void 0:e.type)==="physicalType"&&t.complexType.physicalType===Qe.GEOMETRY}function j6(t){let e;switch(t){case 10:case 11:e=it.BOOLEAN;break;case 12:case 13:e=it.INT_8;break;case 14:case 15:e=it.UINT_8;break;case 16:case 17:e=it.INT_32;break;case 18:case 19:e=it.UINT_32;break;case 20:case 21:e=it.INT_64;break;case 22:case 23:e=it.UINT_64;break;case 24:case 25:e=it.FLOAT;break;case 26:case 27:e=it.DOUBLE;break;case 28:case 29:e=it.STRING;break;default:return null}return{nullable:!!(t&1),columnScope:qi.FEATURE,type:"scalarType",scalarType:{longID:!1,type:"physicalType",physicalType:e}}}var G6=new TextDecoder,Qc="0-3(ID), 4(GEOMETRY), 10-29(scalars), 30(STRUCT), 31(MAP)";function Eu(t,e){let r=$t(t,e,1)[0];if(r===0)return"";let i=e.get(),n=i+r,a=t.subarray(i,n);return e.add(r),G6.decode(a)}function X6(t){let e=t.name,r=t.nullable;return t.type==="scalarType"?{type:"scalarField",scalarField:t.scalarType,name:e,nullable:r}:{type:"complexField",complexField:t.complexType,name:e,nullable:r}}function Ry(t,e){let r=$t(t,e,1)[0]>>>0,i=r>=It.SCALAR_BASE?Vy(r):null;if(!i)throw Error(`Unsupported field type code ${r}. Supported: 10-29(scalars), 30(STRUCT), 31(MAP)`);let n=Si(je({},i),{name:Eu(t,e)});if(n.type==="complexType"&&Oy(r)){let a=n.complexType,s=$t(t,e,1)[0]>>>0;a.children=Array(s);for(let o=0;o<s;o++)a.children[o]=Ry(t,e)}return X6(n)}function Y6(t,e){let r=$t(t,e,1)[0]>>>0,i=Vy(r);if(!i)throw Error(`Unsupported column type code ${r}. Supported: ${Qc}`);let n;if($6(r))n=Eu(t,e);else if(r<It.GEOMETRY)n="id";else if(r===It.GEOMETRY)n="geometry";else throw Error(`Unsupported column type code ${r}. Supported: ${Qc}`);let a=Si(je({},i),{name:n});if(a.type==="complexType"&&Oy(r)){let s=$t(t,e,1)[0]>>>0,o=a.complexType;o.children=Array(s);for(let l=0;l<s;l++)o.children[l]=Ry(t,e)}return a}function W6(t,e){let r={};r.featureTables=[];let i={};if(i.name=Eu(t,e),i.name.length===0)throw Error("Missing layer name");let n=$t(t,e,1)[0]>>>0,a=$t(t,e,1)[0]>>>0;i.columns=Array(a);for(let s=0;s<a;s++)i.columns[s]=Y6(t,e);return r.featureTables.push(i),[r,n]}function Z6(t,e,r=!0){let i=new cy(0),n=[];for(;i.get()<t.length;){let a=$t(t,i,1)[0]>>>0,s=i.get()+a;if(s>t.length)throw Error(`Block overruns tile: ${s} > ${t.length}`);let o=$t(t,i,1)[0]>>>0;if(o!==1&&o!==2){i.set(s);continue}let[l,u]=W6(t,i),h=l.featureTables[0],c=null,p=null,f=[],d=0;for(let m of h.columns){let g=m.name;if(U6(m)){let x=null;if(m.nullable){let b=ct(t,i),D=i.get(),A=ci(t,b.numValues,b.byteLength,i);i.set(D+b.byteLength),x=new fe(A,b.numValues)}let v=ct(t,i);d=x?x.size():v.decompressedCount,c=H6(t,m,i,g,v,x!=null?x:d,r)}else if(q6(m)){let x=$t(t,i,1)[0];if(d===0){let v=i.get();d=ct(t,i).decompressedCount,i.set(v)}e&&(e.scale=e.extent/u),p=f6(t,x,i,d,e)}else{let x=N6(m)?$t(t,i,1)[0]:1;if(x===0)continue;let v=B6(t,i,m,x,d,void 0);if(v)if(Array.isArray(v))for(let b of v)f.push(b);else f.push(v)}}let y=new xw(h.name,p,c,f,u);n.push(y),i.set(s)}return n}function H6(t,e,r,i,n,a,s=!1){var h;let o=(h=e.scalarType)!=null&&h.longID?it.UINT_64:it.UINT_32,l=typeof a=="number"?void 0:a,u=es(n,a,t,r,o===it.UINT_64?"int64":"int32");if(o===it.UINT_32)switch(u){case ht.FLAT:return new pu(i,Vt(t,r,n,void 0,l),a);case ht.SEQUENCE:{let c=vy(t,r,n);return new du(i,c[0],c[1],n.numRleValues,!1)}case ht.CONST:return new yu(i,wu(t,r,n),a,!1)}switch(u){case ht.FLAT:return s?new fu(i,Z3(t,r,n,l),a):new Sy(i,Du(t,r,n,l),a);case ht.SEQUENCE:{let c=by(t,r,n);return new Ey(i,c[0],c[1],n.numRleValues,!1)}case ht.CONST:return new My(i,Dy(t,r,n),a,!1)}throw Error("Vector type not supported for id column.")}var K6=class{constructor(t,e){var r;switch(this._featureData=t,this.properties=this._featureData.properties||{},(r=this._featureData.geometry)==null?void 0:r.type){case Rt.POINT:case Rt.MULTIPOINT:this.type=1;break;case Rt.LINESTRING:case Rt.MULTILINESTRING:this.type=2;break;case Rt.POLYGON:case Rt.MULTIPOLYGON:this.type=3;break;default:this.type=0}this.extent=e,this.id=Number(this._featureData.id)}loadGeometry(){let t=[];for(let e of this._featureData.geometry.coordinates){let r=[];for(let i of e)r.push(new B(i.x,i.y));t.push(r)}return t}},J6=class{constructor(t){this.features=[],this.featureTable=t,this.name=t.name,this.extent=t.extent,this.version=2,this.features=t.getFeatures(),this.length=this.features.length}feature(t){return new K6(this.features[t],this.extent)}},Fu=class{constructor(t){this.layers={};let e=Z6(new Uint8Array(t));this.layers=e.reduce((r,i)=>Si(je({},r),{[i.name]:new J6(i)}),{})}},ku=class{constructor(t,e){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=new uo(mt,16,0),this.grid3D=new uo(mt,16,0),this.featureIndexArray=new Yf,this.promoteId=e}insert(t,e,r,i,n,a){let s=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,i,n);let o=a?this.grid3D:this.grid;for(let l of e){let u=[1/0,1/0,-1/0,-1/0];for(let h of l)u[0]=Math.min(u[0],h.x),u[1]=Math.min(u[1],h.y),u[2]=Math.max(u[2],h.x),u[3]=Math.max(u[3],h.y);u[0]<8192&&u[1]<8192&&u[2]>=0&&u[3]>=0&&o.insert(s,u[0],u[1],u[2],u[3])}}loadVTLayers(){return this.vtLayers||(this.encoding==="mlt"?this.vtLayers=new Fu(this.rawTileData).layers:this.vtLayers=new Xl(new au(this.rawTileData)).layers,this.sourceLayerCoder=new cu(this.vtLayers?Object.keys(this.vtLayers).sort():[ll])),this.vtLayers}query(t,e,r,i){this.loadVTLayers();let n=t.params,a=mt/t.tileSize/t.scale,s=ai(n.filter,"queryRenderedFeatures filter",n.globalState),o=t.queryGeometry,l=t.queryPadding*a,u=Fa.fromPoints(o),h=this.grid.query(u.minX-l,u.minY-l,u.maxX+l,u.maxY+l),c=Fa.fromPoints(t.cameraQueryGeometry).expandBy(l),p=this.grid3D.query(c.minX,c.minY,c.maxX,c.maxY,(y,m,g,x)=>vg(t.cameraQueryGeometry,y-l,m-l,g+l,x+l));for(let y of p)h.push(y);h.sort(t5);let f={},d;for(let y of h){if(y===d)continue;d=y;let m=this.featureIndexArray.get(y),g=null;this.loadMatchingFeature(f,m.bucketIndex,m.sourceLayerIndex,m.featureIndex,s,n.layers,n.availableImages,e,r,i,(x,v,b)=>(g||(g=Ar(x)),v.queryIntersectsFeature({queryGeometry:o,feature:x,featureState:b,geometry:g,zoom:this.z,transform:t.transform,pixelsToTileUnits:a,pixelPosMatrix:t.pixelPosMatrix,unwrappedTileID:this.tileID.toUnwrapped(),getElevation:t.getElevation})))}return f}loadMatchingFeature(t,e,r,i,n,a,s,o,l,u,h){let c=this.bucketLayerIDs[e];if(a&&!c.some(y=>a.has(y)))return;let p=this.sourceLayerCoder.decode(r),f=this.vtLayers[p].feature(i);if(n.needGeometry){let y=hi(f,!0);if(!n.filter(new st(this.tileID.overscaledZ),y,this.tileID.canonical))return}else if(!n.filter(new st(this.tileID.overscaledZ),f))return;let d=this.getId(f,p);for(let y of c){if(a&&!a.has(y))continue;let m=o[y];if(!m)continue;let g={};d&&u&&(g=u.getState(m.sourceLayer||"_geojsonTileLayer",d));let x=Gt({},l[y]);x.paint=tp(x.paint,m.paint,f,g,s),x.layout=tp(x.layout,m.layout,f,g,s);let v=!h||h(f,m,g);if(!v)continue;let b=new gw(f,this.z,this.x,this.y,d);b.layer=x;let D=t[y];D===void 0&&(D=t[y]=[]),D.push({featureIndex:i,feature:b,intersectionZ:v})}}lookupSymbolFeatures(t,e,r,i,n,a,s,o){let l={};this.loadVTLayers();let u=ai(n.filterSpec,"queryRenderedFeatures symbol filter",n.globalState);for(let h of t)this.loadMatchingFeature(l,r,i,h,u,a,s,o,e);return l}hasLayer(t){for(let e of this.bucketLayerIDs)for(let r of e)if(t===r)return!0;return!1}getId(t,e){var i;let r=t.id;if(this.promoteId){let n=typeof this.promoteId=="string"?this.promoteId:this.promoteId[e];r=t.properties[n],typeof r=="boolean"&&(r=Number(r)),r===void 0&&((i=t.properties)!=null&&i.cluster)&&this.promoteId&&(r=Number(t.properties.cluster_id))}return r}};C("FeatureIndex",ku,{omit:["rawTileData","sourceLayerCoder"]});function Q6(t){return typeof t=="object"&&!!t&&"evaluate"in t}function tp(t,e,r,i,n){return Ia(t,(a,s)=>{let o=e instanceof Ya?e.get(s):null;return Q6(o)?o.evaluate(r,i,void 0,n):o})}function t5(t,e){return e-t}var $y=class{constructor(t){this.maxEntries=t,this.map=new Map}get(t){let e=this.map.get(t);return e!==void 0&&(this.map.delete(t),this.map.set(t,e)),e}set(t,e){if(this.map.has(t))this.map.delete(t);else if(this.map.size>=this.maxEntries){let r=this.map.keys().next().value;this.map.delete(r)}this.map.set(t,e)}clear(){this.map.clear()}};function Tu(t){let e=typeof t;if(e==="number"||e==="boolean"||e==="string"||t==null)return JSON.stringify(t);if(Array.isArray(t)){let n="[";for(let a of t)n+=`${Tu(a)},`;return`${n}]`}let r=Object.keys(t).sort(),i="{";for(let n=0;n<r.length;n++)i+=`${JSON.stringify(r[n])}:${Tu(t[r[n]])},`;return`${i}}`}function e5(t){let e="";for(let r of fp)e+=`/${Tu(t[r])}`;return e}function r5(t,e){let r={};for(let n=0;n<t.length;n++){let a=e&&e[t[n].id]||e5(t[n]);e&&(e[t[n].id]=a);let s=r[a];s||(s=r[a]=[]),s.push(t[n])}let i=[];for(let n in r)i.push(r[n]);return i}var i5=class{constructor(t,e){this.keyCache={},t&&this.replace(t,e)}replace(t,e){this._layerConfigs={},this._layers={},this.update(t,[],e)}update(t,e,r){for(let n of t){this._layerConfigs[n.id]=n;let a=this._layers[n.id]=ay(n,r);a._featureFilter=ai(a.filter,`layers[${n.id}].filter`,r),this.keyCache[n.id]&&delete this.keyCache[n.id]}for(let n of e)delete this.keyCache[n],delete this._layerConfigs[n],delete this._layers[n];this.familiesBySource={};let i=r5(Object.values(this._layerConfigs),this.keyCache);for(let n of i){let a=n.map(c=>this._layers[c.id]),s=a[0];if(s.isHidden())continue;let o=s.source||"",l=this.familiesBySource[o];l||(l=this.familiesBySource[o]={});let u=s.sourceLayer||"_geojsonTileLayer",h=l[u];h||(h=l[u]=[]),h.push(a)}}},qy=class{constructor(t){let e={},r=[];for(let s in t){let o=t[s],l=e[s]={};for(let u in o){let h=o[u];if(!h||h.bitmap.width===0||h.bitmap.height===0)continue;let c={x:0,y:0,w:h.bitmap.width+2,h:h.bitmap.height+2};r.push(c),l[u]={rect:c,metrics:h.metrics}}}let{w:i,h:n}=su(r),a=new Ja({width:i||1,height:n||1});for(let s in t){let o=t[s];for(let l in o){let u=o[l];if(!u||u.bitmap.width===0||u.bitmap.height===0)continue;let h=e[s][l].rect;Ja.copy(u.bitmap,a,{x:0,y:0},{x:h.x+1,y:h.y+1},u.bitmap)}}this.image=a,this.positions=e}};C("GlyphAtlas",qy);var jy=class{constructor(t){this.tileID=new uu(t.tileID.overscaledZ,t.tileID.wrap,t.tileID.canonical.z,t.tileID.canonical.x,t.tileID.canonical.y),this.uid=t.uid,this.zoom=t.zoom,this.pixelRatio=t.pixelRatio,this.tileSize=t.tileSize,this.source=t.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=t.showCollisionBoxes,this.collectResourceTiming=!!t.collectResourceTiming,this.returnDependencies=!!t.returnDependencies,this.promoteId=t.promoteId,this.inFlightDependencies=[]}parse(t,e,r,i,n){return rt(this,null,function*(){this.data=t,this.collisionBoxArray=new Ll;let a=new cu(Object.keys(t.layers).sort()),s=new ku(this.tileID,this.promoteId);s.bucketLayerIDs=[];let o={},l={featureIndex:s,iconDependencies:{},patternDependencies:{},glyphDependencies:{},dashDependencies:{},availableImages:r,subdivisionGranularity:n},u=e.familiesBySource[this.source];for(let S in u){let k=t.layers[S];if(!k)continue;k.version===1&&Bt(`Vector tile source "${this.source}" layer "${S}" does not use vector tile spec v2 and therefore may have some rendering errors.`);let z=a.encode(S),O=[];for(let P=0;P<k.length;P++){let L=k.feature(P),F=s.getId(L,S);O.push({feature:L,id:F,index:P,sourceLayerIndex:z})}for(let P of u[S]){let L=P[0];L.source!==this.source&&Bt(`layer.source = ${L.source} does not equal this.source = ${this.source}`),!L.isHidden(this.zoom,!0)&&(Ny(P,this.zoom,r),(o[L.id]=L.createBucket({index:s.bucketLayerIDs.length,layers:P,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:z,sourceID:this.source})).populate(O,l,this.tileID.canonical),s.bucketLayerIDs.push(P.map(F=>F.id)))}}let h=Ia(l.glyphDependencies,S=>Object.keys(S));for(let S of this.inFlightDependencies)S==null||S.abort();this.inFlightDependencies=[];let c=Promise.resolve({});if(Object.keys(h).length){let S=new AbortController;this.inFlightDependencies.push(S),c=i.sendAsync({type:"GG",data:{stacks:h,source:this.source,tileID:this.tileID,type:"glyphs"}},S)}let p=Object.keys(l.iconDependencies),f=Promise.resolve({});if(p.length){let S=new AbortController;this.inFlightDependencies.push(S),f=i.sendAsync({type:"GI",data:{icons:p,source:this.source,tileID:this.tileID,type:"icons"}},S)}let d=Object.keys(l.patternDependencies),y=Promise.resolve({});if(d.length){let S=new AbortController;this.inFlightDependencies.push(S),y=i.sendAsync({type:"GI",data:{icons:d,source:this.source,tileID:this.tileID,type:"patterns"}},S)}let m=l.dashDependencies,g=Promise.resolve({});if(Object.keys(m).length){let S=new AbortController;this.inFlightDependencies.push(S),g=i.sendAsync({type:"GDA",data:{dashes:m}},S)}let[x,v,b,D]=yield Promise.all([c,f,y,g]),A=new qy(x),_=new ou(v,b);for(let S in o){let k=o[S];k.hasDependencies&&(Ny(k.layers,this.zoom,r),k.addFeatures({options:l,canonical:this.tileID.canonical,glyphMap:x,glyphPositions:A.positions,iconMap:v,iconPositions:_.iconPositions,patternMap:b,patternPositions:_.patternPositions,dashPositions:D,showCollisionBoxes:this.showCollisionBoxes}))}return{buckets:Object.values(o).filter(S=>!S.isEmpty()),featureIndex:s,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:A.image,imageAtlas:_,dashPositions:D,glyphMap:this.returnDependencies?x:null,iconMap:this.returnDependencies?v:null,glyphPositions:this.returnDependencies?A.positions:null}})}};function Ny(t,e,r){let i=new st(e);for(let n of t)n.recalculate(i,r)}var Gy=class{constructor(){this.loading={},this.loaded={},this.parsing={}}startLoading(t,e){this.loading[t]=e}finishLoading(t){delete this.loading[t]}abort(t){let e=this.loading[t];e!=null&&e.abort&&(e.abort.abort(),delete this.loading[t])}getParsing(t){return this.parsing[t]}setParsing(t,e){this.parsing[t]=e}removeParsing(t){delete this.parsing[t]}markLoaded(t,e){this.loaded[t]=e}getLoaded(t){let e=this.loaded[t];if(e)return e}removeLoaded(t){delete this.loaded[t]}clearLoaded(){this.loaded={}}},Xy=class{constructor(t){this.start=`${t}#start`,this.end=`${t}#end`,this.measure=t,performance.mark(this.start)}finish(){performance.mark(this.end);let t=performance.getEntriesByName(this.measure);return t.length===0&&(performance.measure(this.measure,this.start,this.end),t=performance.getEntriesByName(this.measure),performance.clearMarks(this.start),performance.clearMarks(this.end),performance.clearMeasures(this.measure)),t}},n5=class{constructor(t,e,r,i,n){this.type=t,this.properties=r||{},this.extent=n,this.pointsArray=e,this.id=i}loadGeometry(){return this.pointsArray.map(t=>t.map(e=>new B(e.x,e.y)))}},a5=class{constructor(t,e,r){this.version=2,this._myFeatures=t,this.name=e,this.length=t.length,this.extent=r}feature(t){return this._myFeatures[t]}},s5=class{constructor(){this.layers={}}addLayer(t){this.layers[t.name]=t}};function o5(t,e,r){let{extent:i}=t,n=2**(r.z-e.z),a=(r.x-e.x*n)*i,s=(r.y-e.y*n)*i,o=[];for(let l=0;l<t.length;l++){let u=t.feature(l),h=u.loadGeometry();for(let c of h)for(let p of c)p.x=p.x*n-a,p.y=p.y*n-s;h=Qd(h,u.type,-128,-128,i+128,i+128),h.length!==0&&o.push(new n5(u.type,h,u.properties,u.id,i))}return new a5(o,t.name,i)}var l5=class{constructor(t,e,r){this.actor=t,this.layerIndex=e,this.availableImages=r,this.tileState=new Gy,this.overzoomedTileResultCache=new $y(1e3)}loadVectorTile(t,e){try{return{vectorTile:t.encoding==="mlt"?new Fu(e):new Xl(new au(e)),rawData:e}}catch(r){let i=new Uint8Array(e),n=i[0]===31&&i[1]===139,a=`Unable to parse the tile at ${t.request.url}, `;throw a+=n?"please make sure the data is not gzipped and that you have configured the relevant header in the server":`got error: ${Ki(r).message}`,Error(a)}}loadTile(t){return rt(this,null,function*(){let{uid:e,overzoomParameters:r}=t;r&&(t.request=r.overzoomRequest);let i=this._startRequestTiming(t),n=new jy(t);this.tileState.startLoading(e,n);let a=new AbortController;n.abort=a;try{let s=yield hp(t.request,a);if(t.etag&&t.etag===s.etag)return this.tileState.finishLoading(e),this._getEtagUnmodifiedResult(s,i);let o=this.loadVectorTile(t,s.data);if(this.tileState.finishLoading(e),!o)return null;let{vectorTile:l,rawData:u}=o;r&&({vectorTile:l,rawData:u}=this._getOverzoomTile(t,l));let h=this._getExpiryData(s),c=this._finishRequestTiming(i);n.vectorTile=l,n.etag=s.etag,this.tileState.markLoaded(e,n);let p={rawData:u,cacheControl:h,resourceTiming:c};return this.tileState.setParsing(e,p),yield this._parseWorkerTile(n,t)}catch(s){throw this.tileState.finishLoading(e),this.tileState.markLoaded(e,n),s}})}_getEtagUnmodifiedResult(t,e){let r=this._getExpiryData(t),i=this._finishRequestTiming(e);return Gt({etagUnmodified:!0},r,i)}_parseWorkerTile(t,e){return rt(this,null,function*(){let r=this.tileState.getParsing(t.uid),i=yield t.parse(t.vectorTile,this.layerIndex,this.availableImages,this.actor,e.subdivisionGranularity);if(r){let{rawData:n,cacheControl:a,resourceTiming:s}=r,o=e.overzoomParameters?"mvt":e.encoding;i=Gt({rawTileData:n.slice(0),encoding:o},i,a,s),this.tileState.removeParsing(t.uid)}else t.etag&&(i=Gt(i,{etag:t.etag}));return i})}_getExpiryData({expires:t,cacheControl:e,etag:r}){let i={};return t&&(i.expires=t),e&&(i.cacheControl=e),r&&(i.etag=r),i}_startRequestTiming(t){var e;if((e=t.request)!=null&&e.collectResourceTiming)return new Xy(t.request.url)}_finishRequestTiming(t){let e=t==null?void 0:t.finish();return e?{resourceTiming:JSON.parse(JSON.stringify(e))}:{}}_getOverzoomTile(t,e){var c;let{tileID:r,source:i,overzoomParameters:n}=t,{maxZoomTileID:a}=n,s=`${a.key}_${r.key}_${(c=t.request)==null?void 0:c.url}`,o=this.overzoomedTileResultCache.get(s);if(o)return o;let l=new s5,u=this.layerIndex.familiesBySource[i];for(let p in u){let f=e.layers[p];if(!f)continue;let d=o5(f,a,r.canonical);d.length>0&&l.addLayer(d)}let h={vectorTile:l,rawData:hu(l).buffer};return this.overzoomedTileResultCache.set(s,h),h}reloadTile(t){return rt(this,null,function*(){let e=t.uid,r=this.tileState.getLoaded(e);if(!r)throw Error("Should not be trying to reload a tile that was never loaded or has been removed");if(r.vectorTile)return r.showCollisionBoxes=t.showCollisionBoxes,yield this._parseWorkerTile(r,t)})}abortTile(t){return rt(this,null,function*(){this.tileState.abort(t.uid)})}removeTile(t){return rt(this,null,function*(){this.tileState.removeLoaded(t.uid)})}},u5=class{constructor(){this.loaded={}}loadTile(t){return rt(this,null,function*(){let{uid:e,encoding:r,rawImageData:i,redFactor:n,greenFactor:a,blueFactor:s,baseShift:o}=t,l=i.width+4,u=i.height+4,h=Ca(i)?new Zt({width:l,height:u},yield ap(i,-2,-2,l,u)):i,c=new jl(e,h,r,n,a,s,o);return this.loaded||(this.loaded={}),this.loaded[e]=c,c})}removeTile(t){let e=this.loaded,r=t.uid;e!=null&&e[r]&&delete e[r]}},h5=class{constructor(t,e,r,i=c5){this.actor=t,this.layerIndex=e,this.availableImages=r,this.tileState=new Gy,this._createGeoJSONIndex=i}loadVectorTile(t){if(!this._geoJSONIndex)throw Error("Unable to parse the data into a cluster or geojson");let{z:e,x:r,y:i}=t.tileID.canonical,n=this._geoJSONIndex.getTile(e,r,i);if(!n)return null;let a=new ly(n.features,{version:2,extent:mt});return{vectorTile:a,rawData:hu(a,np).buffer}}loadTile(t){return rt(this,null,function*(){let{uid:e}=t,r=new jy(t);r.abort=new AbortController;try{let i=this.loadVectorTile(t);if(!i)return null;let{vectorTile:n,rawData:a}=i;r.vectorTile=n,this.tileState.markLoaded(e,r);let s={rawData:a};return this.tileState.setParsing(e,s),yield this._parseWorkerTile(r,t)}catch(i){throw this.tileState.markLoaded(e,r),i}})}_parseWorkerTile(t,e){return rt(this,null,function*(){let r=this.tileState.getParsing(t.uid),i=yield t.parse(t.vectorTile,this.layerIndex,this.availableImages,this.actor,e.subdivisionGranularity);if(r){let{rawData:n}=r;i=Gt({rawTileData:n.slice(0),encoding:"mvt"},i),this.tileState.removeParsing(t.uid)}return i})}abortTile(t){return rt(this,null,function*(){this.tileState.abort(t.uid)})}removeTile(t){return rt(this,null,function*(){this.tileState.removeLoaded(t.uid)})}loadData(t){return rt(this,null,function*(){var r;(r=this._pendingRequest)==null||r.abort();let e=this._startRequestTiming(t);this._pendingRequest=new AbortController;try{yield this.loadAndProcessGeoJSON(t,this._pendingRequest),delete this._pendingRequest,this.tileState.clearLoaded();let i={};return t.request&&(i.data=t.data),this._finishRequestTiming(e,t,i),i}catch(i){if(delete this._pendingRequest,!yl(i))throw i;return{abandoned:!0}}})}_startRequestTiming(t){var e;if((e=t.request)!=null&&e.collectResourceTiming)return new Xy(t.request.url)}_finishRequestTiming(t,e,r){let i=t==null?void 0:t.finish();i&&(r.resourceTiming={[e.source]:JSON.parse(JSON.stringify(i))})}reloadTile(t){return rt(this,null,function*(){let e=t.uid,r=this.tileState.getLoaded(e);if(!r)return yield this.loadTile(t);if(r.vectorTile)return r.showCollisionBoxes=t.showCollisionBoxes,yield this._parseWorkerTile(r,t)})}loadAndProcessGeoJSON(t,e){return rt(this,null,function*(){var r;if(t.request&&(t.data=(yield up(t.request,e)).data),t.data){t.data=this._filterGeoJSON(t.data,t.filter,t.source),this._geoJSONIndex=this._createGeoJSONIndex(t.data,t);return}if(t.dataDiff){(r=this._geoJSONIndex)!=null||(this._geoJSONIndex=this._createGeoJSONIndex({type:"FeatureCollection",features:[]},t)),this._geoJSONIndex.updateData(t.dataDiff,this._getFilterPredicate(t.filter,t.source));return}if(t.updateCluster&&this._geoJSONIndex.updateClusterOptions(t.geojsonVtOptions.cluster,Yy(t)),this._geoJSONIndex==null)throw Error(`Input data given to \'${t.source}\' is not a valid GeoJSON object.`)})}_filterGeoJSON(t,e,r){if(t.type!=="FeatureCollection")return t;let i=this._getFilterPredicate(e,r);return i?{type:"FeatureCollection",features:t.features.filter(n=>i(n))}:t}_getFilterPredicate(t,e){if(typeof t!="boolean"&&!(t!=null&&t.length))return;let r=er(t,`sources.${e}.filter`,{type:"boolean","property-type":"data-driven",overridable:!1,transition:!1});if(r.result==="error")throw Error(r.value.map(i=>`${i.key}: ${i.message}`).join(", "));return i=>r.value.evaluate({zoom:0},i)}removeSource(t){return rt(this,null,function*(){var e;(e=this._pendingRequest)==null||e.abort()})}getClusterExpansionZoom(t){return this._geoJSONIndex.getClusterExpansionZoom(t.clusterId)}getClusterChildren(t){return this._geoJSONIndex.getClusterChildren(t.clusterId)}getClusterLeaves(t){return this._geoJSONIndex.getClusterLeaves(t.clusterId,t.limit,t.offset)}};function c5(t,e){let r=Gt(e.geojsonVtOptions||{},{updateable:!0,clusterOptions:Yy(e)});return new Td(t,r)}function Yy({geojsonVtOptions:t,clusterProperties:e,source:r}){if(!e||!t.clusterOptions)return t.clusterOptions;let i={},n={},a={accumulated:null,zoom:0},s={properties:null},o=Object.keys(e);for(let l of o){let[u,h]=e[l],c=er(h,`sources.${r}.clusterProperties.${l}[1]`),p=er(typeof u=="string"?[u,["accumulated"],["get",l]]:u,`sources.${r}.clusterProperties.${l}[0]`);i[l]=c.value,n[l]=p.value}return t.clusterOptions.map=l=>{s.properties=l;let u={};for(let h of o)u[h]=i[h].evaluate(a,s);return u},t.clusterOptions.reduce=(l,u)=>{s.properties=u;for(let h of o)a.accumulated=l[h],l[h]=n[h].evaluate(a,s)},t.clusterOptions}function Uy(t){return rt(this,null,function*(){if(t.endsWith(".mjs")){yield import(t);return}let e=yield fetch(t,{credentials:"same-origin"});if(!e.ok)throw Error(`Failed to load ${t}: ${e.status}`);let r=yield e.text();if(/^[ \\t]*(import|export)\\s/m.test(r)){let i=URL.createObjectURL(new Blob([r],{type:"text/javascript"}));try{yield import(i)}finally{URL.revokeObjectURL(i)}return}globalThis.eval(r)})}var p5=class{constructor(t){this.self=t,this.actor=new sy(t),this.layerIndexes={},this.availableImages={},this.workerSources={},this.demWorkerSources={},this.externalWorkerSourceTypes={},this.globalStates=new Map,this.self.registerWorkerSource=(e,r)=>{if(this.externalWorkerSourceTypes[e])throw Error(`Worker source with name "${e}" already registered.`);this.externalWorkerSourceTypes[e]=r},this.self.addProtocol=sp,this.self.removeProtocol=op,this.self.registerRTLTextPlugin=e=>{wr.setMethods(e)},this.self.makeRequest=Ma,this.actor.registerMessageHandler("LDT",(e,r)=>this._getDEMWorkerSource(e,r.source).loadTile(r)),this.actor.registerMessageHandler("RDT",(e,r)=>rt(this,null,function*(){this._getDEMWorkerSource(e,r.source).removeTile(r)})),this.actor.registerMessageHandler("GCEZ",(e,r)=>rt(this,null,function*(){return this._getWorkerSource(e,r.type,r.source).getClusterExpansionZoom(r)})),this.actor.registerMessageHandler("GCC",(e,r)=>rt(this,null,function*(){return this._getWorkerSource(e,r.type,r.source).getClusterChildren(r)})),this.actor.registerMessageHandler("GCL",(e,r)=>rt(this,null,function*(){return this._getWorkerSource(e,r.type,r.source).getClusterLeaves(r)})),this.actor.registerMessageHandler("LD",(e,r)=>this._getWorkerSource(e,r.type,r.source).loadData(r)),this.actor.registerMessageHandler("LT",(e,r)=>this._getWorkerSource(e,r.type,r.source).loadTile(r)),this.actor.registerMessageHandler("RT",(e,r)=>this._getWorkerSource(e,r.type,r.source).reloadTile(r)),this.actor.registerMessageHandler("AT",(e,r)=>this._getWorkerSource(e,r.type,r.source).abortTile(r)),this.actor.registerMessageHandler("RMT",(e,r)=>this._getWorkerSource(e,r.type,r.source).removeTile(r)),this.actor.registerMessageHandler("RS",(e,r)=>rt(this,null,function*(){var n,a;if(!((a=(n=this.workerSources[e])==null?void 0:n[r.type])!=null&&a[r.source]))return;let i=this.workerSources[e][r.type][r.source];delete this.workerSources[e][r.type][r.source],i.removeSource!==void 0&&i.removeSource(r)})),this.actor.registerMessageHandler("RM",e=>rt(this,null,function*(){delete this.layerIndexes[e],delete this.availableImages[e],delete this.workerSources[e],delete this.demWorkerSources[e],this.globalStates.delete(e)})),this.actor.registerMessageHandler("SR",(e,r)=>rt(this,null,function*(){this.referrer=r})),this.actor.registerMessageHandler("SRPS",(e,r)=>this._syncRTLPluginState(e,r)),this.actor.registerMessageHandler("IS",(e,r)=>rt(this,null,function*(){yield Uy(r)})),this.actor.registerMessageHandler("SI",(e,r)=>this._setImages(e,r)),this.actor.registerMessageHandler("UL",(e,r)=>rt(this,null,function*(){this._getLayerIndex(e).update(r.layers,r.removedIds,this._getGlobalState(e))})),this.actor.registerMessageHandler("UGS",(e,r)=>rt(this,null,function*(){let i=this._getGlobalState(e);for(let n in r)i[n]=r[n]})),this.actor.registerMessageHandler("SL",(e,r)=>rt(this,null,function*(){this._getLayerIndex(e).replace(r,this._getGlobalState(e))}))}_getGlobalState(t){let e=this.globalStates.get(t);return e||(e={},this.globalStates.set(t,e)),e}_setImages(t,e){return rt(this,null,function*(){this.availableImages[t]=e;for(let r in this.workerSources[t]){let i=this.workerSources[t][r];for(let n in i)i[n].availableImages=e}})}_syncRTLPluginState(t,e){return rt(this,null,function*(){return yield wr.syncState(e,Uy)})}_getAvailableImages(t){let e=this.availableImages[t];return e||(e=[]),e}_getLayerIndex(t){let e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new i5),e}_getWorkerSource(t,e,r){var i,n;if((i=this.workerSources)[t]||(i[t]={}),(n=this.workerSources[t])[e]||(n[e]={}),!this.workerSources[t][e][r]){let a={sendAsync:(s,o)=>(s.targetMapId=t,this.actor.sendAsync(s,o))};switch(e){case"vector":this.workerSources[t][e][r]=new l5(a,this._getLayerIndex(t),this._getAvailableImages(t));break;case"geojson":this.workerSources[t][e][r]=new h5(a,this._getLayerIndex(t),this._getAvailableImages(t));break;default:this.workerSources[t][e][r]=new this.externalWorkerSourceTypes[e](a,this._getLayerIndex(t),this._getAvailableImages(t))}}return this.workerSources[t][e][r]}_getDEMWorkerSource(t,e){var r,i;return(r=this.demWorkerSources)[t]||(r[t]={}),(i=this.demWorkerSources[t])[e]||(i[e]=new u5),this.demWorkerSources[t][e]}};mr(self)&&(self.worker=new p5(self));export{p5 as default};
/*! Bundled license information:

maplibre-gl/dist/maplibre-gl-shared.mjs:
maplibre-gl/dist/maplibre-gl-worker.mjs:
  (**
  * MapLibre GL JS
  * @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v6.9.0/LICENSE.txt
  *)
*/
'}}),Use=de({"src/plots/map/layers.js"(e,r){"use strict";var t=Qt(),i=Zo().sanitizeHTML,a=s9(),o=D0();function s(f,h){this.subplot=f,this.uid=f.uid+"-"+h,this.index=h,this.idSource="source-"+this.uid,this.idLayer=o.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var l=s.prototype;l.update=function(h){this.visible?this.needsNewImage(h)?this.updateImage(h):this.needsNewSource(h)?(this.removeLayer(),this.updateSource(h),this.updateLayer(h)):this.needsNewLayer(h)?this.updateLayer(h):this.updateStyle(h):(this.updateSource(h),this.updateLayer(h)),this.visible=n(h)},l.needsNewImage=function(f){var h=this.subplot.map;return h.getSource(this.idSource)&&this.sourceType==="image"&&f.sourcetype==="image"&&(this.source!==f.source||JSON.stringify(this.coordinates)!==JSON.stringify(f.coordinates))},l.needsNewSource=function(f){return this.sourceType!==f.sourcetype||JSON.stringify(this.source)!==JSON.stringify(f.source)||this.layerType!==f.type},l.needsNewLayer=function(f){return this.layerType!==f.type||this.below!==this.subplot.belowLookup["layout-"+this.index]},l.lookupBelow=function(){return this.subplot.belowLookup["layout-"+this.index]},l.updateImage=function(f){var h=this.subplot.map;h.getSource(this.idSource).updateImage({url:f.source,coordinates:f.coordinates});var d=this.findFollowingMapLayerId(this.lookupBelow());d!==null&&this.subplot.map.moveLayer(this.idLayer,d)},l.updateSource=function(f){var h=this.subplot.map;if(h.getSource(this.idSource)&&h.removeSource(this.idSource),this.sourceType=f.sourcetype,this.source=f.source,!!n(f)){var d=c(f);h.addSource(this.idSource,d)}},l.findFollowingMapLayerId=function(f){if(f==="traces")for(var h=this.subplot.getMapLayers(),d=0;d<h.length;d++){var p=h[d].id;if(typeof p=="string"&&p.indexOf(o.traceLayerPrefix)===0){f=p;break}}return f},l.updateLayer=function(f){var h=this.subplot,d=u(f),p=this.lookupBelow(),g=this.findFollowingMapLayerId(p);this.removeLayer(),n(f)&&h.addLayer({id:this.idLayer,source:this.idSource,"source-layer":f.sourcelayer||"",type:f.type,minzoom:f.minzoom,maxzoom:f.maxzoom,layout:d.layout,paint:d.paint},g),this.layerType=f.type,this.below=p},l.updateStyle=function(f){if(n(f)){var h=u(f);this.subplot.setOptions(this.idLayer,"setLayoutProperty",h.layout),this.subplot.setOptions(this.idLayer,"setPaintProperty",h.paint)}},l.removeLayer=function(){var f=this.subplot.map;f.getLayer(this.idLayer)&&f.removeLayer(this.idLayer)},l.dispose=function(){var f=this.subplot.map;f.getLayer(this.idLayer)&&f.removeLayer(this.idLayer),f.getSource(this.idSource)&&f.removeSource(this.idSource)};function n(f){if(!f.visible)return!1;var h=f.source;if(Array.isArray(h)&&h.length>0){for(var d=0;d<h.length;d++)if(typeof h[d]!="string"||h[d].length===0)return!1;return!0}return t.isPlainObject(h)||typeof h=="string"&&h.length>0}function u(f){var h={},d={};switch(f.type){case"circle":t.extendFlat(d,{"circle-radius":f.circle.radius,"circle-color":f.color,"circle-opacity":f.opacity});break;case"line":t.extendFlat(d,{"line-width":f.line.width,"line-color":f.color,"line-opacity":f.opacity,"line-dasharray":f.line.dash});break;case"fill":t.extendFlat(d,{"fill-color":f.color,"fill-outline-color":f.fill.outlinecolor,"fill-opacity":f.opacity});break;case"symbol":var p=f.symbol,g=a(p.textposition,p.iconsize);t.extendFlat(h,{"icon-image":p.icon,"icon-size":p.iconsize/10,"text-field":p.text,"text-size":p.textfont.size,"text-anchor":g.anchor,"text-offset":g.offset,"symbol-placement":p.placement}),t.extendFlat(d,{"icon-color":f.color,"text-color":p.textfont.color,"text-opacity":f.opacity});break;case"raster":t.extendFlat(d,{"raster-fade-duration":0,"raster-opacity":f.opacity});break}return{layout:h,paint:d}}function c(f){var h=f.sourcetype,d=f.source,p={type:h},g;return h==="geojson"?g="data":h==="vector"?g=typeof d=="string"?"url":"tiles":h==="raster"?(g="tiles",p.tileSize=256):h==="image"&&(g="url",p.coordinates=f.coordinates),p[g]=d,f.sourceattribution&&(p.attribution=i(f.sourceattribution)),p}r.exports=function(h,d,p){var g=new s(h,d);return g.update(p),g}}}),qse=de({"src/plots/map/map.js"(e,r){"use strict";var t=(Nse(),ti(C5)),i=jse(),a=!1,o=()=>{a||(a=!0,t.setWorkerUrl(URL.createObjectURL(new Blob([i],{type:"text/javascript"}))))},s=Qt(),l=Fp(),n=Ma(),u=nn(),c=Uc(),f=$s(),h=Xd(),d=h.drawMode,p=h.selectMode,g=Zl().prepSelect,m=Zl().clearOutline,y=Zl().clearSelectionsCache,_=Zl().selectOnClick,v=D0(),x=Use();function S(E,T){this.id=T,this.gd=E;var F=E._fullLayout,D=E._context;this.container=F._glcontainer.node(),this.isStatic=D.staticPlot,this.uid=F._uid+"-"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(F),this.map=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var M=S.prototype;M.plot=function(E,T,F){var D=this,R;D.map?R=new Promise(function(P,z){D.updateMap(E,T,P,z)}):R=new Promise(function(P,z){D.createMap(E,T,P,z)}),F.push(R)},M.createMap=function(E,T,F,D){var R=this,P=T[R.id],z=R.styleObj=A(P.style),I=P.bounds,L=I?[[I.west,I.south],[I.east,I.north]]:null;let B={container:R.div,style:z.style,center:b(P.center),zoom:P.zoom,bearing:P.bearing,pitch:P.pitch,maxBounds:L,interactive:!R.isStatic,canvasContextAttributes:{preserveDrawingBuffer:R.isStatic},doubleClickZoom:!1,boxZoom:!1,attributionControl:!1},O=P._fitBounds;O&&(B.bounds=[[O.west,O.south],[O.east,O.north]],B.fitBoundsOptions={padding:v.fitBoundsPadding}),o();let G=R.map=new t.Map(B).addControl(new t.AttributionControl({compact:!0})),W={};G.setMissingStyleImageResolver(Z=>(!W[Z]&&/^[a-zA-Z0-9-]+$/.test(Z)&&(W[Z]=new Promise(J=>{let N=new Image(15,15);N.onload=()=>{G.addImage(Z,N,{sdf:!0}),J()},N.onerror=()=>J(),N.crossOrigin="Anonymous",N.src=`https://cdn.jsdelivr.net/npm/@mapbox/maki@8.2.0/icons/${Z}.svg`})),W[Z])),G.setTransformRequest(function(Z){return Z=Z.replace("https://fonts.openmaptiles.org/Open Sans Extrabold","https://fonts.openmaptiles.org/Open Sans Extra Bold"),Z=Z.replace("https://tiles.basemaps.cartocdn.com/fonts/Open Sans Extrabold","https://fonts.openmaptiles.org/Open Sans Extra Bold"),Z=Z.replace("https://fonts.openmaptiles.org/Open Sans Regular,Arial Unicode MS Regular","https://fonts.openmaptiles.org/Klokantech Noto Sans Regular"),{url:Z}}),G._canvas.style.left="0px",G._canvas.style.top="0px",R.rejectOnError(D),R.isStatic||R.initFx(E,T);var X=[];X.push(new Promise(function(Z){G.once("load",Z)})),X=X.concat(l.fetchTraceGeoData(E)),Promise.all(X).then(function(){O&&C(R,P),w(R,P),R.fillBelowLookup(E,T),R.updateData(E),R.updateLayout(T),R.resolveOnRender(F)}).catch(D)},M.updateMap=function(E,T,F,D){var R=this,P=R.map,z=T[this.id];R.rejectOnError(D);var I=[],L=A(z.style);JSON.stringify(R.styleObj)!==JSON.stringify(L)&&(R.styleObj=L,P.setStyle(L.style),R.traceHash={},I.push(new Promise(function(B){P.once("styledata",B)}))),I=I.concat(l.fetchTraceGeoData(E)),Promise.all(I).then(function(){R.fillBelowLookup(E,T),R.updateData(E);let B=z._fitBounds;B&&(P.fitBounds([[B.west,B.south],[B.east,B.north]],{padding:v.fitBoundsPadding,animate:!1}),C(R,z),w(R,z)),R.updateLayout(T),R.resolveOnRender(F)}).catch(D)};function C(E,T){let{center:F,zoom:D}=E.getView();T._input.center=T.center=F,T._input.zoom=T.zoom=D,T._input._fitView={center:Ot({},F),zoom:D}}function w(E,T){let F=E.getView();E.viewInitial={center:s.extendFlat({},F.center),bearing:T.bearing,pitch:T.pitch,zoom:F.zoom}}M.fillBelowLookup=function(E,T){var F=T[this.id],D=F.layers,R,P,z=this.belowLookup={},I=!1;for(R=0;R<E.length;R++){var L=E[R][0].trace,B=L._module;typeof L.below=="string"?P=L.below:B.getBelow&&(P=B.getBelow(L,this)),P===""&&(I=!0),z["trace-"+L.uid]=P||""}for(R=0;R<D.length;R++){var O=D[R];typeof O.below=="string"?P=O.below:I?P="traces":P="",z["layout-"+R]=P}var G={},W,X;for(W in z)P=z[W],G[P]?G[P].push(W):G[P]=[W];for(P in G){var Z=G[P];if(Z.length>1)for(R=0;R<Z.length;R++)W=Z[R],W.indexOf("trace-")===0?(X=W.split("trace-")[1],this.traceHash[X]&&(this.traceHash[X].below=null)):W.indexOf("layout-")===0&&(X=W.split("layout-")[1],this.layerList[X]&&(this.layerList[X].below=null))}};var k={choroplethmap:0,densitymap:1,scattermap:2};M.updateData=function(E){var T=this.traceHash,F,D,R,P,z=E.slice().sort(function(G,W){return k[G[0].trace.type]-k[W[0].trace.type]});for(R=0;R<z.length;R++){var I=z[R];D=I[0].trace,F=T[D.uid];var L=!1;F&&(F.type===D.type?(F.update(I),L=!0):F.dispose()),!L&&D._module&&(T[D.uid]=D._module.plot(this,I))}var B=Object.keys(T);e:for(R=0;R<B.length;R++){var O=B[R];for(P=0;P<E.length;P++)if(D=E[P][0].trace,O===D.uid)continue e;F=T[O],F.dispose(),delete T[O]}},M.updateLayout=function(E){var T=this.map,F=E[this.id];!this.dragging&&!this.wheeling&&(T.setCenter(b(F.center)),T.setZoom(F.zoom),T.setBearing(F.bearing),T.setPitch(F.pitch)),this.updateLayers(E),this.updateFramework(E),this.updateFx(E),this.map.resize(),this.gd._context._scrollZoom.map?T.scrollZoom.enable():T.scrollZoom.disable()},M.resolveOnRender=function(E){var T=this.map;T.on("render",function F(){T.loaded()&&(T.off("render",F),setTimeout(E,10))})},M.rejectOnError=function(E){var T=this.map;function F(){E(new Error(v.mapOnErrorMsg))}T.once("error",F),T.once("style.error",F),T.once("source.error",F),T.once("tile.error",F),T.once("layer.error",F)},M.createFramework=function(E){var T=this,F=T.div=document.createElement("div");F.id=T.uid,F.style.position="absolute",T.container.appendChild(F),T.xaxis={_id:"x",c2p:D=>T.project(D).x,_subplot:T},T.yaxis={_id:"y",c2p:D=>T.project(D).y,_subplot:T},T.updateFramework(E),T.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},u.setConvert(T.mockAxis,E)},M.initFx=function(E,T){var F=this,D=F.gd,R=F.map;R.on("moveend",function(I){if(F.map){var L=D._fullLayout;if(I.originalEvent||F.wheeling){var B=L[F.id];n.call("_storeDirectGUIEdit",D.layout,L._preGUI,F.getViewEdits(B));var O=F.getView();B._input.center=B.center=O.center,B._input.zoom=B.zoom=O.zoom,B._input.bearing=B.bearing=O.bearing,B._input.pitch=B.pitch=O.pitch,D.emit("plotly_relayout",F.getViewEditsWithDerived(O))}I.originalEvent&&I.originalEvent.type==="mouseup"?F.dragging=!1:F.wheeling&&(F.wheeling=!1),L&&L._rehover&&L._rehover()}}),R.on("wheel",function(){F.wheeling=!0}),R.on("mousemove",function(I){var L=F.div.getBoundingClientRect(),B=[I.originalEvent.offsetX,I.originalEvent.offsetY];I.target.getBoundingClientRect=function(){return L},F.xaxis.p2c=function(){return R.unproject(B).lng},F.yaxis.p2c=function(){return R.unproject(B).lat},D._fullLayout._rehover=function(){D._fullLayout._hoversubplot===F.id&&D._fullLayout[F.id]&&f.hover(D,I,F.id)},f.hover(D,I,F.id),D._fullLayout._hoversubplot=F.id});function P(){f.loneUnhover(T._hoverlayer)}R.on("dragstart",function(){F.dragging=!0,P()}),R.on("zoomstart",P),R.on("mouseout",function(){D._fullLayout._hoversubplot=null});function z(){var I=F.getView();D.emit("plotly_relayouting",F.getViewEditsWithDerived(I))}R.on("drag",z),R.on("zoom",z),R.on("dblclick",function(){var I=D._fullLayout[F.id];n.call("_storeDirectGUIEdit",D.layout,D._fullLayout._preGUI,F.getViewEdits(I));var L=F.viewInitial;R.setCenter(b(L.center)),R.setZoom(L.zoom),R.setBearing(L.bearing),R.setPitch(L.pitch);var B=F.getView();I._input.center=I.center=B.center,I._input.zoom=I.zoom=B.zoom,I._input.bearing=I.bearing=B.bearing,I._input.pitch=I.pitch=B.pitch,D.emit("plotly_doubleclick",null),D.emit("plotly_relayout",F.getViewEditsWithDerived(B))}),F.clearOutline=function(){y(F.dragOptions),m(F.dragOptions.gd)},F.onClickInPanFn=function(I){return function(L){var B=D._fullLayout.clickmode;B.indexOf("select")>-1&&_(L.originalEvent,D,[F.xaxis],[F.yaxis],F.id,I),B.indexOf("event")>-1&&f.click(D,L.originalEvent)}}},M.updateFx=function(E){var T=this,F=T.map,D=T.gd;if(T.isStatic)return;function R(L){var B=T.map.unproject(L);return[B.lng,B.lat]}var P=E.dragmode,z;z=function(L,B){if(B.isRect){var O=L.range={};O[T.id]=[R([B.xmin,B.ymin]),R([B.xmax,B.ymax])]}else{var G=L.lassoPoints={};G[T.id]=B.map(R)}};var I=T.dragOptions;T.dragOptions=s.extendDeep(I||{},{dragmode:E.dragmode,element:T.div,gd:D,plotinfo:{id:T.id,domain:E[T.id].domain,xaxis:T.xaxis,yaxis:T.yaxis,fillRangeItems:z},xaxes:[T.xaxis],yaxes:[T.yaxis],subplot:T.id}),F.off("click",T.onClickInPanHandler),p(P)||d(P)?(F.dragPan.disable(),F.on("zoomstart",T.clearOutline),T.dragOptions.prepFn=function(L,B,O){g(L,B,O,T.dragOptions,P)},c.init(T.dragOptions)):(F.dragPan.enable(),F.off("zoomstart",T.clearOutline),T.div.onmousedown=null,T.div.ontouchstart=null,T.div.removeEventListener("touchstart",T.div._ontouchstart),T.onClickInPanHandler=T.onClickInPanFn(T.dragOptions),F.on("click",T.onClickInPanHandler))},M.updateFramework=function(E){var T=E[this.id].domain,F=E._size,D=this.div.style;D.width=F.w*(T.x[1]-T.x[0])+"px",D.height=F.h*(T.y[1]-T.y[0])+"px",D.left=F.l+T.x[0]*F.w+"px",D.top=F.t+(1-T.y[1])*F.h+"px",this.xaxis._offset=F.l+T.x[0]*F.w,this.xaxis._length=F.w*(T.x[1]-T.x[0]),this.yaxis._offset=F.t+(1-T.y[1])*F.h,this.yaxis._length=F.h*(T.y[1]-T.y[0])},M.updateLayers=function(E){var T=E[this.id],F=T.layers,D=this.layerList,R;if(F.length!==D.length){for(R=0;R<D.length;R++)D[R].dispose();for(D=this.layerList=[],R=0;R<F.length;R++)D.push(x(this,R,F[R]))}else for(R=0;R<F.length;R++)D[R].update(F[R])},M.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},M.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},M.setOptions=function(E,T,F){for(var D in F)this.map[T](E,D,F[D])},M.getMapLayers=function(){return this.map.getStyle().layers},M.addLayer=function(E,T){var F=this.map;if(typeof T=="string"){if(T===""){F.addLayer(E,T);return}for(var D=this.getMapLayers(),R=0;R<D.length;R++)if(T===D[R].id){F.addLayer(E,T);return}s.warn(["Trying to add layer with *below* value",T,"referencing a layer that does not exist","or that does not yet exist."].join(" "))}F.addLayer(E)},M.project=function([E,T]){return this.map.project(new t.LngLat(E,T))},M.getView=function(){var E=this.map,T=E.getCenter(),F=T.lng,D=T.lat,R={lon:F,lat:D},P=E.getCanvas(),z=parseInt(P.style.width),I=parseInt(P.style.height);return{center:R,zoom:E.getZoom(),bearing:E.getBearing(),pitch:E.getPitch(),_derived:{coordinates:[E.unproject([0,0]).toArray(),E.unproject([z,0]).toArray(),E.unproject([z,I]).toArray(),E.unproject([0,I]).toArray()]}}},M.getViewEdits=function(E){for(var T=this.id,F=["center","zoom","bearing","pitch"],D={},R=0;R<F.length;R++){var P=F[R];D[T+"."+P]=E[P]}return D},M.getViewEditsWithDerived=function(E){var T=this.id,F=this.getViewEdits(E);return F[T+"._derived"]=E._derived,F};function A(E){var T={};return s.isPlainObject(E)?(T.id=E.id,T.style=E):typeof E=="string"?(T.id=E,v.stylesMap[E]?T.style=v.stylesMap[E]:T.style=E):(T.id=v.styleValueDflt,T.style=v.stylesMap[v.styleValueDflt]),T.transition={duration:0,delay:0},T}function b(E){return[E.lon,E.lat]}r.exports=S}}),I8={};Mr(I8,{getMapFitBounds:()=>Vse});function Vse(e,r){let t=[];for(let n of e){if(n.subplot!==r||n.visible!==!0)continue;if(n.type==="choroplethmap")return null;let{lat:u,lon:c}=n;if(!c||!u)continue;let f=Math.min(c.length,u.length);for(let h=0;h<f;h++){let d=c[h],p=u[h];Number.isFinite(d)&&Number.isFinite(p)&&t.push([d,p])}}let i=(0,R8.computeBbox)({type:"MultiPoint",coordinates:t});if(!i)return null;let[a,o,s,l]=i;return{west:a,east:s,south:o,north:l}}var R8,Gse=Ir({"src/plots/map/get_map_fit_bounds.ts"(){"use strict";R8=Vr(Fp())}}),Hse=de({"src/plots/map/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=Ev(),a=fc(),o=S_(),{getMapFitBounds:s}=(Gse(),ti(I8));r.exports=function(c,f,h){i(c,f,h,{type:"map",attributes:o,handleDefaults:l,partition:"y",fullData:h})};function l(u,c,f,h){f("style"),f("center.lon"),f("center.lat"),f("zoom"),f("bearing"),f("pitch");let d=f("fitbounds");var p=f("bounds.west"),g=f("bounds.east"),m=f("bounds.south"),y=f("bounds.north");(p===void 0||g===void 0||m===void 0||y===void 0)&&delete c.bounds,a(u,c,{name:"layers",handleItemDefaults:n}),c._fitBounds=null;let{_fitView:{center:_,zoom:v}={},center:x,zoom:S}=u,M=x?.lon===_?.lon&&x?.lat===_?.lat&&S===v;if(d&&M){let C=s(h.fullData,h.id);C&&(c._fitBounds=C)}c._input=u}function n(u,c){function f(y,_){return t.coerce(u,c,o.layers,y,_)}var h=f("visible");if(h){var d=f("sourcetype"),p=d==="raster"||d==="image";f("source"),f("sourceattribution"),d==="vector"&&f("sourcelayer"),d==="image"&&f("coordinates");var g;p&&(g="raster");var m=f("type",g);p&&m!=="raster"&&(m=c.type="raster",t.log("Source types *raster* and *image* must drawn *raster* layer type.")),f("below"),f("color"),f("opacity"),f("minzoom"),f("maxzoom"),m==="circle"&&f("circle.radius"),m==="line"&&(f("line.width"),f("line.dash")),m==="fill"&&f("fill.outlinecolor"),m==="symbol"&&(f("symbol.icon"),f("symbol.iconsize"),f("symbol.text"),t.coerceFont(f,"symbol.textfont",void 0,{noFontVariant:!0,noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0}),f("symbol.textposition"),f("symbol.placement"))}}}}),PS=de({"src/plots/map/index.js"(e){"use strict";var r=Qt(),t=r.strTranslate,i=r.strScale,a=$u().getSubplotCalcData,o=Oh(),s=Yr(),l=hn(),n=Zo(),u=qse(),c="map";e.name=c,e.attr="subplot",e.idRoot=c,e.idRegex=e.attrRegex=r.counterRegex(c),e.attributes={subplot:{valType:"subplotid",dflt:"map",editType:"calc"}},e.layoutAttributes=S_(),e.supplyLayoutDefaults=Hse(),e.plot=function(h){for(var d=h._fullLayout,p=h.calcdata,g=d._subplots[c],m=0;m<g.length;m++){var y=g[m],_=a(p,c,y),v=d[y],x=v._subplot;x||(x=new u(h,y),d[y]._subplot=x),x.plot(_,d,h._promises)}},e.clean=function(f,h,d,p){for(var g=p._subplots[c]||[],m=0;m<g.length;m++){var y=g[m];!h[y]&&p[y]._subplot&&p[y]._subplot.destroy()}},e.toSVG=function(f){for(var h=f._fullLayout,d=h._subplots[c],p=h._size,g=0;g<d.length;g++){var m=h[d[g]],y=m.domain,_=m._subplot,v=_.toImage("png"),x=h._glimages.append("svg:image");x.attr({xmlns:o.svg,"xlink:href":v,x:p.l+p.w*y.x[0],y:p.t+p.h*(1-y.y[1]),width:p.w*(y.x[1]-y.x[0]),height:p.h*(y.y[1]-y.y[0]),preserveAspectRatio:"none"});var S=s.select(m._subplot.div),M=S.select(".maplibregl-ctrl-attrib").text().replace("Improve this map",""),C=h._glimages.append("g"),w=C.append("text");w.text(M).classed("static-attribution",!0).attr({"font-size":12,"font-family":"Arial",color:"rgba(0, 0, 0, 0.75)","text-anchor":"end","data-unformatted":M});var k=l.bBox(w.node()),A=p.w*(y.x[1]-y.x[0]);if(k.width>A/2){var b=M.split("|").join("<br>");w.text(b).attr("data-unformatted",b).call(n.convertToTspans,f),k=l.bBox(w.node())}w.attr("transform",t(-3,-k.height+8)),C.insert("rect",".static-attribution").attr({x:-k.width-6,y:-k.height-3,width:k.width+6,height:k.height+3,fill:"rgba(255, 255, 255, 0.75)"});var E=1;k.width+6>A&&(E=A/(k.width+6));var T=[p.l+p.w*y.x[1],p.t+p.h*(1-y.y[0])];C.attr("transform",t(T[0],T[1])+i(E))}},e.updateFx=function(f){for(var h=f._fullLayout,d=h._subplots[c],p=0;p<d.length;p++){var g=h[d[p]]._subplot;g.updateFx(h)}}}}),$se=de({"src/traces/scattermap/index.js"(e,r){"use strict";r.exports={attributes:R4(),supplyDefaults:wK(),colorbar:Yu(),formatLabels:o9(),calc:n7(),plot:AK(),hoverPoints:z4().hoverPoints,eventData:MK(),selectPoints:SK(),styleOnSelect:function(t,i){if(i){var a=i[0].trace;a._glTrace.update(i)}},moduleType:"trace",name:"scattermap",basePlotModule:PS(),categories:["map","gl","symbols","showLegend","scatter-like"],meta:{}}}}),Wse=de({"lib/scattermap.js"(e,r){"use strict";r.exports=$se()}}),z8=de({"src/traces/choroplethmap/attributes.js"(e,r){"use strict";var t=y_(),i=cs(),{hovertemplateAttrs:a,templatefallbackAttrs:o}=Vo(),s=ri(),l=fn().extendFlat;r.exports=l({locations:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},geojson:{valType:"any",editType:"calc"},featureidkey:l({},t.featureidkey,{}),below:{valType:"string",editType:"plot"},text:t.text,hovertext:t.hovertext,marker:{line:{color:l({},t.marker.line.color,{editType:"plot"}),width:l({},t.marker.line.width,{editType:"plot"}),editType:"calc"},opacity:l({},t.marker.opacity,{editType:"plot"}),editType:"calc"},selected:{marker:{opacity:l({},t.selected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},unselected:{marker:{opacity:l({},t.unselected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},hoverinfo:t.hoverinfo,hovertemplate:a({},{keys:["properties"]}),hovertemplatefallback:o(),showlegend:l({},s.showlegend,{dflt:!1})},i("",{cLetter:"z",editTypeOverride:"calc"}))}}),Yse=de({"src/traces/choroplethmap/defaults.js"(e,r){"use strict";var t=Qt(),i=hu(),a=z8();r.exports=function(s,l,n,u){function c(g,m){return t.coerce(s,l,a,g,m)}var f=c("locations"),h=c("z"),d=c("geojson");if(!t.isArrayOrTypedArray(f)||!f.length||!t.isArrayOrTypedArray(h)||!h.length||!(typeof d=="string"&&d!==""||t.isPlainObject(d))){l.visible=!1;return}c("featureidkey"),l._length=Math.min(f.length,h.length),c("below"),c("text"),c("hovertext"),c("hovertemplate"),c("hovertemplatefallback");var p=c("marker.line.width");p&&c("marker.line.color"),c("marker.opacity"),i(s,l,u,c,{prefix:"",cLetter:"z"}),t.coerceSelectionMarkerOpacity(l,c)}}}),B8=de({"src/traces/choroplethmap/convert.js"(e,r){"use strict";var t=da(),i=Qt(),a=ks(),o=hn(),s=g_().makeBlank,l=Fp();function n(c){var f=c[0].trace,h=f.visible===!0&&f._length!==0,d={layout:{visibility:"none"},paint:{}},p={layout:{visibility:"none"},paint:{}},g=f._opts={fill:d,line:p,geojson:s()};if(!h)return g;var m=l.extractTraceFeature(c);if(!m)return g;var y=a.makeColorScaleFuncFromTrace(f),_=f.marker,v=_.line||{},x;i.isArrayOrTypedArray(_.opacity)&&(x=function(E){var T=E.mo;return t(T)?+i.constrain(T,0,1):0});var S;i.isArrayOrTypedArray(v.color)&&(S=function(E){return E.mlc});var M;i.isArrayOrTypedArray(v.width)&&(M=function(E){return E.mlw});for(var C=0;C<c.length;C++){var w=c[C],k=w.fOut;if(k){var A=k.properties;A.fc=y(w.z),x&&(A.mo=x(w)),S&&(A.mlc=S(w)),M&&(A.mlw=M(w)),w.ct=A.ct,w._polygons=l.feature2polygons(k)}}var b=x?{type:"identity",property:"mo"}:_.opacity;return i.extendFlat(d.paint,{"fill-color":{type:"identity",property:"fc"},"fill-opacity":b}),i.extendFlat(p.paint,{"line-color":S?{type:"identity",property:"mlc"}:v.color,"line-width":M?{type:"identity",property:"mlw"}:v.width,"line-opacity":b}),d.layout.visibility="visible",p.layout.visibility="visible",g.geojson={type:"FeatureCollection",features:m},u(c),g}function u(c){var f=c[0].trace,h=f._opts,d;if(f.selectedpoints){for(var p=o.makeSelectedPointStyleFns(f),g=0;g<c.length;g++){var m=c[g];m.fOut&&(m.fOut.properties.mo2=p.selectedOpacityFn(m))}d={type:"identity",property:"mo2"}}else d=i.isArrayOrTypedArray(f.marker.opacity)?{type:"identity",property:"mo"}:f.marker.opacity;return i.extendFlat(h.fill.paint,{"fill-opacity":d}),i.extendFlat(h.line.paint,{"line-opacity":d}),h}r.exports={convert:n,convertOnSelect:u}}}),Xse=de({"src/traces/choroplethmap/plot.js"(e,r){"use strict";var t=B8().convert,i=B8().convertOnSelect,a=D0().traceLayerPrefix;function o(l,n){this.type="choroplethmap",this.subplot=l,this.uid=n,this.sourceId="source-"+n,this.layerList=[["fill",a+n+"-fill"],["line",a+n+"-line"]],this.below=null}var s=o.prototype;s.update=function(l){this._update(t(l)),l[0].trace._glTrace=this},s.updateOnSelect=function(l){this._update(i(l))},s._update=function(l){var n=this.subplot,u=this.layerList,c=n.belowLookup["trace-"+this.uid];n.map.getSource(this.sourceId).setData(l.geojson),c!==this.below&&(this._removeLayers(),this._addLayers(l,c),this.below=c);for(var f=0;f<u.length;f++){var h=u[f],d=h[0],p=h[1],g=l[d];n.setOptions(p,"setLayoutProperty",g.layout),g.layout.visibility==="visible"&&n.setOptions(p,"setPaintProperty",g.paint)}},s._addLayers=function(l,n){for(var u=this.subplot,c=this.layerList,f=this.sourceId,h=0;h<c.length;h++){var d=c[h],p=d[0],g=l[p];u.addLayer({type:p,id:d[1],source:f,layout:g.layout,paint:g.paint},n)}},s._removeLayers=function(){for(var l=this.subplot.map,n=this.layerList,u=n.length-1;u>=0;u--)l.removeLayer(n[u][1])},s.dispose=function(){var l=this.subplot.map;this._removeLayers(),l.removeSource(this.sourceId)},r.exports=function(n,u){var c=u[0].trace,f=new o(n,c.uid),h=f.sourceId,d=t(u),p=f.below=n.belowLookup["trace-"+c.uid];return n.map.addSource(h,{type:"geojson",data:d.geojson}),f._addLayers(d,p),u[0].trace._glTrace=f,f}}}),Zse=de({"src/traces/choroplethmap/index.js"(e,r){"use strict";r.exports={attributes:z8(),supplyDefaults:Yse(),colorbar:b1(),calc:h7(),plot:Xse(),hoverPoints:d7(),eventData:p7(),selectPoints:v7(),styleOnSelect:function(t,i){if(i){var a=i[0].trace;a._glTrace.updateOnSelect(i)}},getBelow:function(t,i){for(var a=i.getMapLayers(),o=a.length-2;o>=0;o--){var s=a[o].id;if(typeof s=="string"&&s.indexOf("water")===0){for(var l=o+1;l<a.length;l++)if(s=a[l].id,typeof s=="string"&&s.indexOf("plotly-")===-1)return s}}},moduleType:"trace",name:"choroplethmap",basePlotModule:PS(),categories:["map","gl","noOpacity","showLegend"],meta:{hr_name:"choropleth_map"}}}}),Kse=de({"lib/choroplethmap.js"(e,r){"use strict";r.exports=Zse()}}),O8=de({"src/traces/densitymap/attributes.js"(e,r){"use strict";var t=cs(),{hovertemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=ri(),s=R4(),l=fn().extendFlat;r.exports=l({lon:s.lon,lat:s.lat,z:{valType:"data_array",editType:"calc"},radius:{valType:"number",editType:"plot",arrayOk:!0,min:1,dflt:30},below:{valType:"string",editType:"plot"},text:s.text,hovertext:s.hovertext,hoverinfo:l({},o.hoverinfo,{flags:["lon","lat","z","text","name"]}),hovertemplate:i(),hovertemplatefallback:a(),showlegend:l({},o.showlegend,{dflt:!1})},t("",{cLetter:"z",editTypeOverride:"calc"}))}}),Jse=de({"src/traces/densitymap/defaults.js"(e,r){"use strict";var t=Qt(),i=hu(),a=O8();r.exports=function(s,l,n,u){function c(p,g){return t.coerce(s,l,a,p,g)}var f=c("lon")||[],h=c("lat")||[],d=Math.min(f.length,h.length);if(!d){l.visible=!1;return}l._length=d,c("z"),c("radius"),c("below"),c("text"),c("hovertext"),c("hovertemplate"),c("hovertemplatefallback"),i(s,l,u,c,{prefix:"",cLetter:"z"})}}}),Qse=de({"src/traces/densitymap/calc.js"(e,r){"use strict";var t=da(),i=Qt().isArrayOrTypedArray,a=cn().BADNUM,o=hc(),s=Qt()._;r.exports=function(n,u){for(var c=u._length,f=new Array(c),h=u.z,d=i(h)&&h.length,p=0;p<c;p++){var g=f[p]={},m=u.lon[p],y=u.lat[p];if(g.lonlat=t(m)&&t(y)?[+m,+y]:[a,a],d){var _=h[p];g.z=t(_)?_:a}}return o(n,u,{vals:d?h:[0,1],containerStr:"",cLetter:"z"}),c&&(f[0].t={labels:{lat:s(n,"lat:")+" ",lon:s(n,"lon:")+" "}}),f}}}),ele=de({"src/traces/densitymap/convert.js"(e,r){"use strict";var t=da(),i=Qt(),a=ta(),o=ks(),s=cn().BADNUM,l=g_().makeBlank;r.exports=function(u){var c=u[0].trace,f=c.visible===!0&&c._length!==0,h={layout:{visibility:"none"},paint:{}},d=c._opts={heatmap:h,geojson:l()};if(!f)return d;var p=[],g,m=c.z,y=c.radius,_=i.isArrayOrTypedArray(m)&&m.length,v=i.isArrayOrTypedArray(y);for(g=0;g<u.length;g++){var x=u[g],S=x.lonlat;if(S[0]!==s){var M={};if(_){var C=x.z;M.z=C!==s?C:0}v&&(M.r=t(y[g])&&y[g]>0?+y[g]:0),p.push({type:"Feature",geometry:{type:"Point",coordinates:S},properties:M})}}var w=o.extractOpts(c),k=w.reversescale?o.flipScale(w.colorscale):w.colorscale,A=k[0][1],b=a.opacity(A)<1?A:a.addOpacity(A,0),E=["interpolate",["linear"],["heatmap-density"],0,b];for(g=1;g<k.length;g++)E.push(k[g][0],k[g][1]);var T=["interpolate",["linear"],["get","z"],w.min,0,w.max,1];return i.extendFlat(d.heatmap.paint,{"heatmap-weight":_?T:1/(w.max-w.min),"heatmap-color":E,"heatmap-radius":v?{type:"identity",property:"r"}:c.radius,"heatmap-opacity":c.opacity}),d.geojson={type:"FeatureCollection",features:p},d.heatmap.layout.visibility="visible",d}}}),tle=de({"src/traces/densitymap/plot.js"(e,r){"use strict";var t=ele(),i=D0().traceLayerPrefix;function a(s,l){this.type="densitymap",this.subplot=s,this.uid=l,this.sourceId="source-"+l,this.layerList=[["heatmap",i+l+"-heatmap"]],this.below=null}var o=a.prototype;o.update=function(s){var l=this.subplot,n=this.layerList,u=t(s),c=l.belowLookup["trace-"+this.uid];l.map.getSource(this.sourceId).setData(u.geojson),c!==this.below&&(this._removeLayers(),this._addLayers(u,c),this.below=c);for(var f=0;f<n.length;f++){var h=n[f],d=h[0],p=h[1],g=u[d];l.setOptions(p,"setLayoutProperty",g.layout),g.layout.visibility==="visible"&&l.setOptions(p,"setPaintProperty",g.paint)}},o._addLayers=function(s,l){for(var n=this.subplot,u=this.layerList,c=this.sourceId,f=0;f<u.length;f++){var h=u[f],d=h[0],p=s[d];n.addLayer({type:d,id:h[1],source:c,layout:p.layout,paint:p.paint},l)}},o._removeLayers=function(){for(var s=this.subplot.map,l=this.layerList,n=l.length-1;n>=0;n--)s.removeLayer(l[n][1])},o.dispose=function(){var s=this.subplot.map;this._removeLayers(),s.removeSource(this.sourceId)},r.exports=function(l,n){var u=n[0].trace,c=new a(l,u.uid),f=c.sourceId,h=t(n),d=c.below=l.belowLookup["trace-"+u.uid];return l.map.addSource(f,{type:"geojson",data:h.geojson}),c._addLayers(h,d),c}}}),rle=de({"src/traces/densitymap/hover.js"(e,r){"use strict";var t=nn(),i=z4().hoverPoints,a=z4().getExtraText;r.exports=function(s,l,n){var u=i(s,l,n);if(u){var c=u[0],f=c.cd,h=f[0].trace,d=f[c.index];if(delete c.color,"z"in d){var p=c.subplot.mockAxis;c.z=d.z,c.zLabel=t.tickText(p,p.c2l(d.z),"hover").text}return c.extraText=a(h,d,f[0].t.labels),[c]}}}}),ile=de({"src/traces/densitymap/event_data.js"(e,r){"use strict";r.exports=function(i,a){return i.lon=a.lon,i.lat=a.lat,i.z=a.z,i}}}),ale=de({"src/traces/densitymap/index.js"(e,r){"use strict";r.exports={attributes:O8(),supplyDefaults:Jse(),colorbar:b1(),formatLabels:o9(),calc:Qse(),plot:tle(),hoverPoints:rle(),eventData:ile(),getBelow:function(t,i){for(var a=i.getMapLayers(),o=0;o<a.length;o++){var s=a[o],l=s.id;if(s.type==="symbol"&&typeof l=="string"&&l.indexOf("plotly-")===-1)return l}},moduleType:"trace",name:"densitymap",basePlotModule:PS(),categories:["map","gl","showLegend"],meta:{hr_name:"density_map"}}}}),nle=de({"lib/densitymap.js"(e,r){"use strict";r.exports=ale()}}),N8=de({"src/traces/sankey/attributes.js"(e,r){"use strict";var t=us(),i=ri(),a=Jo(),o=ki(),s=Is().attributes,{hovertemplateAttrs:l,templatefallbackAttrs:n}=Vo(),u=cs(),c=Ro().templatedArray,f=Ns().descriptionOnlyNumbers,h=fn().extendFlat,d=Ps().overrideAll,p=r.exports=d({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:"sankey",trace:!0}),orientation:{valType:"enumerated",values:["v","h"],dflt:"h"},direction:{valType:"enumerated",values:["forward","reversed"],dflt:"forward"},valueformat:{valType:"string",dflt:".3s",description:f("value")},valuesuffix:{valType:"string",dflt:""},arrangement:{valType:"enumerated",values:["snap","perpendicular","freeform","fixed"],dflt:"snap"},textfont:t({autoShadowDflt:!0}),customdata:void 0,node:{label:{valType:"data_array",dflt:[]},groups:{valType:"info_array",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:"number",editType:"calc"}},x:{valType:"data_array",dflt:[]},y:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:.5,arrayOk:!0}},pad:{valType:"number",arrayOk:!1,min:0,dflt:20},thickness:{valType:"number",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]}),hovertemplatefallback:n(),align:{valType:"enumerated",values:["justify","left","right","center"],dflt:"justify"},sort:{valType:"enumerated",values:["auto","input"],dflt:"auto"}},link:{arrowlen:{valType:"number",min:0,dflt:0},label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},hovercolor:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:0,arrayOk:!0}},source:{valType:"data_array",dflt:[]},target:{valType:"data_array",dflt:[]},value:{valType:"data_array",dflt:[]},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]}),hovertemplatefallback:n(),colorscales:c("concentrationscales",{editType:"calc",label:{valType:"string",editType:"calc",dflt:""},cmax:{valType:"number",editType:"calc",dflt:1},cmin:{valType:"number",editType:"calc",dflt:0},colorscale:h(u().colorscale,{dflt:[[0,"white"],[1,"black"]]})}),sort:{valType:"enumerated",values:["auto","input"],dflt:"auto"}}},"calc","nested")}}),ole=de({"src/traces/sankey/defaults.js"(e,r){"use strict";var t=Qt(),i=N8(),a=ta(),o=Is().defaults,s=ky(),l=Ro(),n=fc();r.exports=function(f,h,d,p){function g(F,D){return t.coerce(f,h,i,F,D)}var m=t.extendDeep(p.hoverlabel,f.hoverlabel),y=f.node,_=l.newContainer(h,"node");function v(F,D){return t.coerce(y,_,i.node,F,D)}v("label"),v("groups"),v("x"),v("y"),v("pad"),v("thickness"),v("line.color"),v("line.width"),v("hoverinfo",f.hoverinfo),s(y,_,v,m),v("hovertemplate"),v("align"),v("sort");var x=p.colorway;let S=F=>x[F%x.length];v("color",_.label.map((F,D)=>a.addOpacity(S(D),.8))),v("customdata");var M=f.link||{},C=l.newContainer(h,"link");function w(F,D){return t.coerce(M,C,i.link,F,D)}w("label"),w("arrowlen"),w("source"),w("target"),w("value"),w("line.color"),w("line.width"),w("hoverinfo",f.hoverinfo),s(M,C,w,m),w("hovertemplate"),w("sort");var k=a.luminosity(p.paper_bgcolor)<.333,A=k?"rgba(255, 255, 255, 0.6)":"rgba(0, 0, 0, 0.2)",b=w("color",A);function E(F){if(!a.isValid(F))return F;let D=a.opacity(F);return D<=.8?a.addOpacity(F,D+.2):k?a.brighten(F,10):a.adjustLightness(F,-10)}w("hovercolor",Array.isArray(b)?b.map(E):E(b)),w("customdata"),n(M,C,{name:"colorscales",handleItemDefaults:u}),o(h,p,g),g("orientation"),g("direction"),g("valueformat"),g("valuesuffix");let T=_.x.length&&_.y.length?"freeform":void 0;g("arrangement",T),t.coerceFont(g,"textfont",p.font,{autoShadowDflt:!0}),h._length=null};function u(c,f){function h(d,p){return t.coerce(c,f,i.link.colorscales,d,p)}h("label"),h("cmin"),h("cmax"),h("colorscale")}}}),j8=de({"node_modules/strongly-connected-components/scc.js"(e,r){"use strict";r.exports=t;function t(i){for(var a=i.length,o=new Array(a),s=new Array(a),l=new Array(a),n=new Array(a),u=new Array(a),c=new Array(a),f=0;f<a;++f)o[f]=-1,s[f]=0,l[f]=!1,n[f]=0,u[f]=-1,c[f]=[];var h=0,d=[],p=[];function g(v){var x=[v],S=[v];for(o[v]=s[v]=h,l[v]=!0,h+=1;S.length>0;){v=S[S.length-1];var M=i[v];if(n[v]<M.length){for(var C=n[v];C<M.length;++C){var w=M[C];if(o[w]<0){o[w]=s[w]=h,l[w]=!0,h+=1,x.push(w),S.push(w);break}else l[w]&&(s[v]=Math.min(s[v],s[w])|0);u[w]>=0&&c[v].push(u[w])}n[v]=C}else{if(s[v]===o[v]){for(var k=[],A=[],b=0,C=x.length-1;C>=0;--C){var E=x[C];if(l[E]=!1,k.push(E),A.push(c[E]),b+=c[E].length,u[E]=d.length,E===v){x.length=C;break}}d.push(k);for(var T=new Array(b),C=0;C<A.length;C++)for(var F=0;F<A[C].length;F++)T[--b]=A[C][F];p.push(T)}S.pop()}}}for(var f=0;f<a;++f)o[f]<0&&g(f);for(var m,f=0;f<p.length;f++){var y=p[f];if(y.length!==0){y.sort(function(x,S){return x-S}),m=[y[0]];for(var _=1;_<y.length;_++)y[_]!==y[_-1]&&m.push(y[_]);p[f]=m}}return{components:d,adjacencyList:p}}}}),sle=de({"src/traces/sankey/calc.js"(e,r){"use strict";var t=j8(),i=Qt(),a=ip().wrap,o=i.isArrayOrTypedArray,s=i.isIndex,l=ks();function n(c){var f=c.node,h=c.link,d=[],p=o(h.color),g=o(h.hovercolor),m=o(h.customdata),y={},_={},v=h.colorscales.length,x;for(x=0;x<v;x++){var S=h.colorscales[x],M=l.extractScale(S,{cLetter:"c"}),C=l.makeColorScaleFunc(M);_[S.label]=C}var w=0;for(x=0;x<h.value.length;x++)h.source[x]>w&&(w=h.source[x]),h.target[x]>w&&(w=h.target[x]);var k=w+1;c.node._count=k;var A,b=c.node.groups,E={};for(x=0;x<b.length;x++){var T=b[x];for(A=0;A<T.length;A++){var F=T[A],D=k+x;E.hasOwnProperty(F)?i.warn("Node "+F+" is already part of a group."):E[F]=D}}var R={source:[],target:[]};for(x=0;x<h.value.length;x++){var P=h.value[x],z=h.source[x],I=h.target[x];if(P>0&&s(z,k)&&s(I,k)&&!(E.hasOwnProperty(z)&&E.hasOwnProperty(I)&&E[z]===E[I])){E.hasOwnProperty(I)&&(I=E[I]),E.hasOwnProperty(z)&&(z=E[z]),z=+z,I=+I,y[z]=y[I]=!0;var L="";h.label&&h.label[x]&&(L=h.label[x]);var B=null;L&&_.hasOwnProperty(L)&&(B=_[L]),d.push({pointNumber:x,label:L,color:p?h.color[x]:h.color,hovercolor:g?h.hovercolor[x]:h.hovercolor,customdata:m?h.customdata[x]:h.customdata,concentrationscale:B,source:z,target:I,value:+P}),R.source.push(z),R.target.push(I)}}var O=k+b.length,G=o(f.color),W=o(f.customdata),X=[];for(x=0;x<O;x++)if(y[x]){var Z=f.label[x];X.push({group:x>k-1,childrenNodes:[],pointNumber:x,label:Z,color:G?f.color[x]:f.color,customdata:W?f.customdata[x]:f.customdata})}var J=!1;return u(O,R.source,R.target)&&(J=!0),{circular:J,links:d,nodes:X,groups:b,groupLookup:E}}function u(c,f,h){for(var d=i.init2dArray(c,0),p=0;p<Math.min(f.length,h.length);p++)if(i.isIndex(f[p],c)&&i.isIndex(h[p],c)){if(f[p]===h[p])return!0;d[f[p]].push(h[p])}var g=t(d);return g.components.some(function(m){return m.length>1})}r.exports=function(f,h){var d=n(h);return a({circular:d.circular,_nodes:d.nodes,_links:d.links,_groups:d.groups,_groupLookup:d.groupLookup})}}}),lle=de({"node_modules/d3-quadtree/dist/d3-quadtree.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.d3=t.d3||{}))})(e,function(t){"use strict";function i(k){var A=+this._x.call(null,k),b=+this._y.call(null,k);return a(this.cover(A,b),A,b,k)}function a(k,A,b,E){if(isNaN(A)||isNaN(b))return k;var T,F=k._root,D={data:E},R=k._x0,P=k._y0,z=k._x1,I=k._y1,L,B,O,G,W,X,Z,J;if(!F)return k._root=D,k;for(;F.length;)if((W=A>=(L=(R+z)/2))?R=L:z=L,(X=b>=(B=(P+I)/2))?P=B:I=B,T=F,!(F=F[Z=X<<1|W]))return T[Z]=D,k;if(O=+k._x.call(null,F.data),G=+k._y.call(null,F.data),A===O&&b===G)return D.next=F,T?T[Z]=D:k._root=D,k;do T=T?T[Z]=new Array(4):k._root=new Array(4),(W=A>=(L=(R+z)/2))?R=L:z=L,(X=b>=(B=(P+I)/2))?P=B:I=B;while((Z=X<<1|W)===(J=(G>=B)<<1|O>=L));return T[J]=F,T[Z]=D,k}function o(k){var A,b,E=k.length,T,F,D=new Array(E),R=new Array(E),P=1/0,z=1/0,I=-1/0,L=-1/0;for(b=0;b<E;++b)isNaN(T=+this._x.call(null,A=k[b]))||isNaN(F=+this._y.call(null,A))||(D[b]=T,R[b]=F,T<P&&(P=T),T>I&&(I=T),F<z&&(z=F),F>L&&(L=F));if(P>I||z>L)return this;for(this.cover(P,z).cover(I,L),b=0;b<E;++b)a(this,D[b],R[b],k[b]);return this}function s(k,A){if(isNaN(k=+k)||isNaN(A=+A))return this;var b=this._x0,E=this._y0,T=this._x1,F=this._y1;if(isNaN(b))T=(b=Math.floor(k))+1,F=(E=Math.floor(A))+1;else{for(var D=T-b,R=this._root,P,z;b>k||k>=T||E>A||A>=F;)switch(z=(A<E)<<1|k<b,P=new Array(4),P[z]=R,R=P,D*=2,z){case 0:T=b+D,F=E+D;break;case 1:b=T-D,F=E+D;break;case 2:T=b+D,E=F-D;break;case 3:b=T-D,E=F-D;break}this._root&&this._root.length&&(this._root=R)}return this._x0=b,this._y0=E,this._x1=T,this._y1=F,this}function l(){var k=[];return this.visit(function(A){if(!A.length)do k.push(A.data);while(A=A.next)}),k}function n(k){return arguments.length?this.cover(+k[0][0],+k[0][1]).cover(+k[1][0],+k[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function u(k,A,b,E,T){this.node=k,this.x0=A,this.y0=b,this.x1=E,this.y1=T}function c(k,A,b){var E,T=this._x0,F=this._y0,D,R,P,z,I=this._x1,L=this._y1,B=[],O=this._root,G,W;for(O&&B.push(new u(O,T,F,I,L)),b==null?b=1/0:(T=k-b,F=A-b,I=k+b,L=A+b,b*=b);G=B.pop();)if(!(!(O=G.node)||(D=G.x0)>I||(R=G.y0)>L||(P=G.x1)<T||(z=G.y1)<F))if(O.length){var X=(D+P)/2,Z=(R+z)/2;B.push(new u(O[3],X,Z,P,z),new u(O[2],D,Z,X,z),new u(O[1],X,R,P,Z),new u(O[0],D,R,X,Z)),(W=(A>=Z)<<1|k>=X)&&(G=B[B.length-1],B[B.length-1]=B[B.length-1-W],B[B.length-1-W]=G)}else{var J=k-+this._x.call(null,O.data),N=A-+this._y.call(null,O.data),H=J*J+N*N;if(H<b){var $=Math.sqrt(b=H);T=k-$,F=A-$,I=k+$,L=A+$,E=O.data}}return E}function f(k){if(isNaN(I=+this._x.call(null,k))||isNaN(L=+this._y.call(null,k)))return this;var A,b=this._root,E,T,F,D=this._x0,R=this._y0,P=this._x1,z=this._y1,I,L,B,O,G,W,X,Z;if(!b)return this;if(b.length)for(;;){if((G=I>=(B=(D+P)/2))?D=B:P=B,(W=L>=(O=(R+z)/2))?R=O:z=O,A=b,!(b=b[X=W<<1|G]))return this;if(!b.length)break;(A[X+1&3]||A[X+2&3]||A[X+3&3])&&(E=A,Z=X)}for(;b.data!==k;)if(T=b,!(b=b.next))return this;return(F=b.next)&&delete b.next,T?(F?T.next=F:delete T.next,this):A?(F?A[X]=F:delete A[X],(b=A[0]||A[1]||A[2]||A[3])&&b===(A[3]||A[2]||A[1]||A[0])&&!b.length&&(E?E[Z]=b:this._root=b),this):(this._root=F,this)}function h(k){for(var A=0,b=k.length;A<b;++A)this.remove(k[A]);return this}function d(){return this._root}function p(){var k=0;return this.visit(function(A){if(!A.length)do++k;while(A=A.next)}),k}function g(k){var A=[],b,E=this._root,T,F,D,R,P;for(E&&A.push(new u(E,this._x0,this._y0,this._x1,this._y1));b=A.pop();)if(!k(E=b.node,F=b.x0,D=b.y0,R=b.x1,P=b.y1)&&E.length){var z=(F+R)/2,I=(D+P)/2;(T=E[3])&&A.push(new u(T,z,I,R,P)),(T=E[2])&&A.push(new u(T,F,I,z,P)),(T=E[1])&&A.push(new u(T,z,D,R,I)),(T=E[0])&&A.push(new u(T,F,D,z,I))}return this}function m(k){var A=[],b=[],E;for(this._root&&A.push(new u(this._root,this._x0,this._y0,this._x1,this._y1));E=A.pop();){var T=E.node;if(T.length){var F,D=E.x0,R=E.y0,P=E.x1,z=E.y1,I=(D+P)/2,L=(R+z)/2;(F=T[0])&&A.push(new u(F,D,R,I,L)),(F=T[1])&&A.push(new u(F,I,R,P,L)),(F=T[2])&&A.push(new u(F,D,L,I,z)),(F=T[3])&&A.push(new u(F,I,L,P,z))}b.push(E)}for(;E=b.pop();)k(E.node,E.x0,E.y0,E.x1,E.y1);return this}function y(k){return k[0]}function _(k){return arguments.length?(this._x=k,this):this._x}function v(k){return k[1]}function x(k){return arguments.length?(this._y=k,this):this._y}function S(k,A,b){var E=new M(A??y,b??v,NaN,NaN,NaN,NaN);return k==null?E:E.addAll(k)}function M(k,A,b,E,T,F){this._x=k,this._y=A,this._x0=b,this._y0=E,this._x1=T,this._y1=F,this._root=void 0}function C(k){for(var A={data:k.data},b=A;k=k.next;)b=b.next={data:k.data};return A}var w=S.prototype=M.prototype;w.copy=function(){var k=new M(this._x,this._y,this._x0,this._y0,this._x1,this._y1),A=this._root,b,E;if(!A)return k;if(!A.length)return k._root=C(A),k;for(b=[{source:A,target:k._root=new Array(4)}];A=b.pop();)for(var T=0;T<4;++T)(E=A.source[T])&&(E.length?b.push({source:E,target:A.target[T]=new Array(4)}):A.target[T]=C(E));return k},w.add=i,w.addAll=o,w.cover=s,w.data=l,w.extent=n,w.find=c,w.remove=f,w.removeAll=h,w.root=d,w.size=p,w.visit=g,w.visitAfter=m,w.x=_,w.y=x,t.quadtree=S,Object.defineProperty(t,"__esModule",{value:!0})})}}),U8=de({"node_modules/d3-collection/dist/d3-collection.js"(e,r){(function(t,i){i(typeof e=="object"&&typeof r<"u"?e:t.d3=t.d3||{})})(e,(function(t){"use strict";var i="$";function a(){}a.prototype=o.prototype={constructor:a,has:function(y){return i+y in this},get:function(y){return this[i+y]},set:function(y,_){return this[i+y]=_,this},remove:function(y){var _=i+y;return _ in this&&delete this[_]},clear:function(){for(var y in this)y[0]===i&&delete this[y]},keys:function(){var y=[];for(var _ in this)_[0]===i&&y.push(_.slice(1));return y},values:function(){var y=[];for(var _ in this)_[0]===i&&y.push(this[_]);return y},entries:function(){var y=[];for(var _ in this)_[0]===i&&y.push({key:_.slice(1),value:this[_]});return y},size:function(){var y=0;for(var _ in this)_[0]===i&&++y;return y},empty:function(){for(var y in this)if(y[0]===i)return!1;return!0},each:function(y){for(var _ in this)_[0]===i&&y(this[_],_.slice(1),this)}};function o(y,_){var v=new a;if(y instanceof a)y.each(function(w,k){v.set(k,w)});else if(Array.isArray(y)){var x=-1,S=y.length,M;if(_==null)for(;++x<S;)v.set(x,y[x]);else for(;++x<S;)v.set(_(M=y[x],x,y),M)}else if(y)for(var C in y)v.set(C,y[C]);return v}function s(){var y=[],_=[],v,x,S;function M(w,k,A,b){if(k>=y.length)return v!=null&&w.sort(v),x!=null?x(w):w;for(var E=-1,T=w.length,F=y[k++],D,R,P=o(),z,I=A();++E<T;)(z=P.get(D=F(R=w[E])+""))?z.push(R):P.set(D,[R]);return P.each(function(L,B){b(I,B,M(L,k,A,b))}),I}function C(w,k){if(++k>y.length)return w;var A,b=_[k-1];return x!=null&&k>=y.length?A=w.entries():(A=[],w.each(function(E,T){A.push({key:T,values:C(E,k)})})),b!=null?A.sort(function(E,T){return b(E.key,T.key)}):A}return S={object:function(w){return M(w,0,l,n)},map:function(w){return M(w,0,u,c)},entries:function(w){return C(M(w,0,u,c),0)},key:function(w){return y.push(w),S},sortKeys:function(w){return _[y.length-1]=w,S},sortValues:function(w){return v=w,S},rollup:function(w){return x=w,S}}}function l(){return{}}function n(y,_,v){y[_]=v}function u(){return o()}function c(y,_,v){y.set(_,v)}function f(){}var h=o.prototype;f.prototype=d.prototype={constructor:f,has:h.has,add:function(y){return y+="",this[i+y]=y,this},remove:h.remove,clear:h.clear,values:h.keys,size:h.size,empty:h.empty,each:h.each};function d(y,_){var v=new f;if(y instanceof f)y.each(function(M){v.add(M)});else if(y){var x=-1,S=y.length;if(_==null)for(;++x<S;)v.add(y[x]);else for(;++x<S;)v.add(_(y[x],x,y))}return v}function p(y){var _=[];for(var v in y)_.push(v);return _}function g(y){var _=[];for(var v in y)_.push(y[v]);return _}function m(y){var _=[];for(var v in y)_.push({key:v,value:y[v]});return _}t.nest=s,t.set=d,t.map=o,t.keys=p,t.values=g,t.entries=m,Object.defineProperty(t,"__esModule",{value:!0})}))}}),ule=de({"node_modules/d3-dispatch/dist/d3-dispatch.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.d3=t.d3||{}))})(e,function(t){"use strict";var i={value:function(){}};function a(){for(var u=0,c=arguments.length,f={},h;u<c;++u){if(!(h=arguments[u]+"")||h in f||/[\s.]/.test(h))throw new Error("illegal type: "+h);f[h]=[]}return new o(f)}function o(u){this._=u}function s(u,c){return u.trim().split(/^|\s+/).map(function(f){var h="",d=f.indexOf(".");if(d>=0&&(h=f.slice(d+1),f=f.slice(0,d)),f&&!c.hasOwnProperty(f))throw new Error("unknown type: "+f);return{type:f,name:h}})}o.prototype=a.prototype={constructor:o,on:function(u,c){var f=this._,h=s(u+"",f),d,p=-1,g=h.length;if(arguments.length<2){for(;++p<g;)if((d=(u=h[p]).type)&&(d=l(f[d],u.name)))return d;return}if(c!=null&&typeof c!="function")throw new Error("invalid callback: "+c);for(;++p<g;)if(d=(u=h[p]).type)f[d]=n(f[d],u.name,c);else if(c==null)for(d in f)f[d]=n(f[d],u.name,null);return this},copy:function(){var u={},c=this._;for(var f in c)u[f]=c[f].slice();return new o(u)},call:function(u,c){if((d=arguments.length-2)>0)for(var f=new Array(d),h=0,d,p;h<d;++h)f[h]=arguments[h+2];if(!this._.hasOwnProperty(u))throw new Error("unknown type: "+u);for(p=this._[u],h=0,d=p.length;h<d;++h)p[h].value.apply(c,f)},apply:function(u,c,f){if(!this._.hasOwnProperty(u))throw new Error("unknown type: "+u);for(var h=this._[u],d=0,p=h.length;d<p;++d)h[d].value.apply(c,f)}};function l(u,c){for(var f=0,h=u.length,d;f<h;++f)if((d=u[f]).name===c)return d.value}function n(u,c,f){for(var h=0,d=u.length;h<d;++h)if(u[h].name===c){u[h]=i,u=u.slice(0,h).concat(u.slice(h+1));break}return f!=null&&u.push({name:c,value:f}),u}t.dispatch=a,Object.defineProperty(t,"__esModule",{value:!0})})}}),cle=de({"node_modules/d3-timer/dist/d3-timer.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.d3=t.d3||{}))})(e,function(t){"use strict";var i=0,a=0,o=0,s=1e3,l,n,u=0,c=0,f=0,h=typeof performance=="object"&&performance.now?performance:Date,d=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(k){setTimeout(k,17)};function p(){return c||(d(g),c=h.now()+f)}function g(){c=0}function m(){this._call=this._time=this._next=null}m.prototype=y.prototype={constructor:m,restart:function(k,A,b){if(typeof k!="function")throw new TypeError("callback is not a function");b=(b==null?p():+b)+(A==null?0:+A),!this._next&&n!==this&&(n?n._next=this:l=this,n=this),this._call=k,this._time=b,M()},stop:function(){this._call&&(this._call=null,this._time=1/0,M())}};function y(k,A,b){var E=new m;return E.restart(k,A,b),E}function _(){p(),++i;for(var k=l,A;k;)(A=c-k._time)>=0&&k._call.call(null,A),k=k._next;--i}function v(){c=(u=h.now())+f,i=a=0;try{_()}finally{i=0,S(),c=0}}function x(){var k=h.now(),A=k-u;A>s&&(f-=A,u=k)}function S(){for(var k,A=l,b,E=1/0;A;)A._call?(E>A._time&&(E=A._time),k=A,A=A._next):(b=A._next,A._next=null,A=k?k._next=b:l=b);n=k,M(E)}function M(k){if(!i){a&&(a=clearTimeout(a));var A=k-c;A>24?(k<1/0&&(a=setTimeout(v,k-h.now()-f)),o&&(o=clearInterval(o))):(o||(u=h.now(),o=setInterval(x,s)),i=1,d(v))}}function C(k,A,b){var E=new m;return A=A==null?0:+A,E.restart(function(T){E.stop(),k(T+A)},A,b),E}function w(k,A,b){var E=new m,T=A;return A==null?(E.restart(k,A,b),E):(A=+A,b=b==null?p():+b,E.restart(function F(D){D+=T,E.restart(F,T+=A,b),k(D)},A,b),E)}t.interval=w,t.now=p,t.timeout=C,t.timer=y,t.timerFlush=_,Object.defineProperty(t,"__esModule",{value:!0})})}}),fle=de({"node_modules/d3-force/dist/d3-force.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,lle(),U8(),ule(),cle()):i(t.d3=t.d3||{},t.d3,t.d3,t.d3,t.d3)})(e,(function(t,i,a,o,s){"use strict";function l(k,A){var b;k==null&&(k=0),A==null&&(A=0);function E(){var T,F=b.length,D,R=0,P=0;for(T=0;T<F;++T)D=b[T],R+=D.x,P+=D.y;for(R=R/F-k,P=P/F-A,T=0;T<F;++T)D=b[T],D.x-=R,D.y-=P}return E.initialize=function(T){b=T},E.x=function(T){return arguments.length?(k=+T,E):k},E.y=function(T){return arguments.length?(A=+T,E):A},E}function n(k){return function(){return k}}function u(){return(Math.random()-.5)*1e-6}function c(k){return k.x+k.vx}function f(k){return k.y+k.vy}function h(k){var A,b,E=1,T=1;typeof k!="function"&&(k=n(k==null?1:+k));function F(){for(var P,z=A.length,I,L,B,O,G,W,X=0;X<T;++X)for(I=i.quadtree(A,c,f).visitAfter(D),P=0;P<z;++P)L=A[P],G=b[L.index],W=G*G,B=L.x+L.vx,O=L.y+L.vy,I.visit(Z);function Z(J,N,H,$,U){var V=J.data,j=J.r,q=G+j;if(V){if(V.index>L.index){var Y=B-V.x-V.vx,K=O-V.y-V.vy,te=Y*Y+K*K;te<q*q&&(Y===0&&(Y=u(),te+=Y*Y),K===0&&(K=u(),te+=K*K),te=(q-(te=Math.sqrt(te)))/te*E,L.vx+=(Y*=te)*(q=(j*=j)/(W+j)),L.vy+=(K*=te)*q,V.vx-=Y*(q=1-q),V.vy-=K*q)}return}return N>B+q||$<B-q||H>O+q||U<O-q}}function D(P){if(P.data)return P.r=b[P.data.index];for(var z=P.r=0;z<4;++z)P[z]&&P[z].r>P.r&&(P.r=P[z].r)}function R(){if(A){var P,z=A.length,I;for(b=new Array(z),P=0;P<z;++P)I=A[P],b[I.index]=+k(I,P,A)}}return F.initialize=function(P){A=P,R()},F.iterations=function(P){return arguments.length?(T=+P,F):T},F.strength=function(P){return arguments.length?(E=+P,F):E},F.radius=function(P){return arguments.length?(k=typeof P=="function"?P:n(+P),R(),F):k},F}function d(k){return k.index}function p(k,A){var b=k.get(A);if(!b)throw new Error("missing: "+A);return b}function g(k){var A=d,b=I,E,T=n(30),F,D,R,P,z=1;k==null&&(k=[]);function I(W){return 1/Math.min(R[W.source.index],R[W.target.index])}function L(W){for(var X=0,Z=k.length;X<z;++X)for(var J=0,N,H,$,U,V,j,q;J<Z;++J)N=k[J],H=N.source,$=N.target,U=$.x+$.vx-H.x-H.vx||u(),V=$.y+$.vy-H.y-H.vy||u(),j=Math.sqrt(U*U+V*V),j=(j-F[J])/j*W*E[J],U*=j,V*=j,$.vx-=U*(q=P[J]),$.vy-=V*q,H.vx+=U*(q=1-q),H.vy+=V*q}function B(){if(D){var W,X=D.length,Z=k.length,J=a.map(D,A),N;for(W=0,R=new Array(X);W<Z;++W)N=k[W],N.index=W,typeof N.source!="object"&&(N.source=p(J,N.source)),typeof N.target!="object"&&(N.target=p(J,N.target)),R[N.source.index]=(R[N.source.index]||0)+1,R[N.target.index]=(R[N.target.index]||0)+1;for(W=0,P=new Array(Z);W<Z;++W)N=k[W],P[W]=R[N.source.index]/(R[N.source.index]+R[N.target.index]);E=new Array(Z),O(),F=new Array(Z),G()}}function O(){if(D)for(var W=0,X=k.length;W<X;++W)E[W]=+b(k[W],W,k)}function G(){if(D)for(var W=0,X=k.length;W<X;++W)F[W]=+T(k[W],W,k)}return L.initialize=function(W){D=W,B()},L.links=function(W){return arguments.length?(k=W,B(),L):k},L.id=function(W){return arguments.length?(A=W,L):A},L.iterations=function(W){return arguments.length?(z=+W,L):z},L.strength=function(W){return arguments.length?(b=typeof W=="function"?W:n(+W),O(),L):b},L.distance=function(W){return arguments.length?(T=typeof W=="function"?W:n(+W),G(),L):T},L}function m(k){return k.x}function y(k){return k.y}var _=10,v=Math.PI*(3-Math.sqrt(5));function x(k){var A,b=1,E=.001,T=1-Math.pow(E,1/300),F=0,D=.6,R=a.map(),P=s.timer(I),z=o.dispatch("tick","end");k==null&&(k=[]);function I(){L(),z.call("tick",A),b<E&&(P.stop(),z.call("end",A))}function L(G){var W,X=k.length,Z;G===void 0&&(G=1);for(var J=0;J<G;++J)for(b+=(F-b)*T,R.each(function(N){N(b)}),W=0;W<X;++W)Z=k[W],Z.fx==null?Z.x+=Z.vx*=D:(Z.x=Z.fx,Z.vx=0),Z.fy==null?Z.y+=Z.vy*=D:(Z.y=Z.fy,Z.vy=0);return A}function B(){for(var G=0,W=k.length,X;G<W;++G){if(X=k[G],X.index=G,X.fx!=null&&(X.x=X.fx),X.fy!=null&&(X.y=X.fy),isNaN(X.x)||isNaN(X.y)){var Z=_*Math.sqrt(G),J=G*v;X.x=Z*Math.cos(J),X.y=Z*Math.sin(J)}(isNaN(X.vx)||isNaN(X.vy))&&(X.vx=X.vy=0)}}function O(G){return G.initialize&&G.initialize(k),G}return B(),A={tick:L,restart:function(){return P.restart(I),A},stop:function(){return P.stop(),A},nodes:function(G){return arguments.length?(k=G,B(),R.each(O),A):k},alpha:function(G){return arguments.length?(b=+G,A):b},alphaMin:function(G){return arguments.length?(E=+G,A):E},alphaDecay:function(G){return arguments.length?(T=+G,A):+T},alphaTarget:function(G){return arguments.length?(F=+G,A):F},velocityDecay:function(G){return arguments.length?(D=1-G,A):1-D},force:function(G,W){return arguments.length>1?(W==null?R.remove(G):R.set(G,O(W)),A):R.get(G)},find:function(G,W,X){var Z=0,J=k.length,N,H,$,U,V;for(X==null?X=1/0:X*=X,Z=0;Z<J;++Z)U=k[Z],N=G-U.x,H=W-U.y,$=N*N+H*H,$<X&&(V=U,X=$);return V},on:function(G,W){return arguments.length>1?(z.on(G,W),A):z.on(G)}}}function S(){var k,A,b,E=n(-30),T,F=1,D=1/0,R=.81;function P(B){var O,G=k.length,W=i.quadtree(k,m,y).visitAfter(I);for(b=B,O=0;O<G;++O)A=k[O],W.visit(L)}function z(){if(k){var B,O=k.length,G;for(T=new Array(O),B=0;B<O;++B)G=k[B],T[G.index]=+E(G,B,k)}}function I(B){var O=0,G,W,X=0,Z,J,N;if(B.length){for(Z=J=N=0;N<4;++N)(G=B[N])&&(W=Math.abs(G.value))&&(O+=G.value,X+=W,Z+=W*G.x,J+=W*G.y);B.x=Z/X,B.y=J/X}else{G=B,G.x=G.data.x,G.y=G.data.y;do O+=T[G.data.index];while(G=G.next)}B.value=O}function L(B,O,G,W){if(!B.value)return!0;var X=B.x-A.x,Z=B.y-A.y,J=W-O,N=X*X+Z*Z;if(J*J/R<N)return N<D&&(X===0&&(X=u(),N+=X*X),Z===0&&(Z=u(),N+=Z*Z),N<F&&(N=Math.sqrt(F*N)),A.vx+=X*B.value*b/N,A.vy+=Z*B.value*b/N),!0;if(B.length||N>=D)return;(B.data!==A||B.next)&&(X===0&&(X=u(),N+=X*X),Z===0&&(Z=u(),N+=Z*Z),N<F&&(N=Math.sqrt(F*N)));do B.data!==A&&(J=T[B.data.index]*b/N,A.vx+=X*J,A.vy+=Z*J);while(B=B.next)}return P.initialize=function(B){k=B,z()},P.strength=function(B){return arguments.length?(E=typeof B=="function"?B:n(+B),z(),P):E},P.distanceMin=function(B){return arguments.length?(F=B*B,P):Math.sqrt(F)},P.distanceMax=function(B){return arguments.length?(D=B*B,P):Math.sqrt(D)},P.theta=function(B){return arguments.length?(R=B*B,P):Math.sqrt(R)},P}function M(k,A,b){var E,T=n(.1),F,D;typeof k!="function"&&(k=n(+k)),A==null&&(A=0),b==null&&(b=0);function R(z){for(var I=0,L=E.length;I<L;++I){var B=E[I],O=B.x-A||1e-6,G=B.y-b||1e-6,W=Math.sqrt(O*O+G*G),X=(D[I]-W)*F[I]*z/W;B.vx+=O*X,B.vy+=G*X}}function P(){if(E){var z,I=E.length;for(F=new Array(I),D=new Array(I),z=0;z<I;++z)D[z]=+k(E[z],z,E),F[z]=isNaN(D[z])?0:+T(E[z],z,E)}}return R.initialize=function(z){E=z,P()},R.strength=function(z){return arguments.length?(T=typeof z=="function"?z:n(+z),P(),R):T},R.radius=function(z){return arguments.length?(k=typeof z=="function"?z:n(+z),P(),R):k},R.x=function(z){return arguments.length?(A=+z,R):A},R.y=function(z){return arguments.length?(b=+z,R):b},R}function C(k){var A=n(.1),b,E,T;typeof k!="function"&&(k=n(k==null?0:+k));function F(R){for(var P=0,z=b.length,I;P<z;++P)I=b[P],I.vx+=(T[P]-I.x)*E[P]*R}function D(){if(b){var R,P=b.length;for(E=new Array(P),T=new Array(P),R=0;R<P;++R)E[R]=isNaN(T[R]=+k(b[R],R,b))?0:+A(b[R],R,b)}}return F.initialize=function(R){b=R,D()},F.strength=function(R){return arguments.length?(A=typeof R=="function"?R:n(+R),D(),F):A},F.x=function(R){return arguments.length?(k=typeof R=="function"?R:n(+R),D(),F):k},F}function w(k){var A=n(.1),b,E,T;typeof k!="function"&&(k=n(k==null?0:+k));function F(R){for(var P=0,z=b.length,I;P<z;++P)I=b[P],I.vy+=(T[P]-I.y)*E[P]*R}function D(){if(b){var R,P=b.length;for(E=new Array(P),T=new Array(P),R=0;R<P;++R)E[R]=isNaN(T[R]=+k(b[R],R,b))?0:+A(b[R],R,b)}}return F.initialize=function(R){b=R,D()},F.strength=function(R){return arguments.length?(A=typeof R=="function"?R:n(+R),D(),F):A},F.y=function(R){return arguments.length?(k=typeof R=="function"?R:n(+R),D(),F):k},F}t.forceCenter=l,t.forceCollide=h,t.forceLink=g,t.forceManyBody=S,t.forceRadial=M,t.forceSimulation=x,t.forceX=C,t.forceY=w,Object.defineProperty(t,"__esModule",{value:!0})}))}}),hle=de({"node_modules/d3-array/dist/d3-array.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=typeof globalThis<"u"?globalThis:t||self,i(t.d3=t.d3||{}))})(e,(function(t){"use strict";function i(gt,yt){return gt<yt?-1:gt>yt?1:gt>=yt?0:NaN}function a(gt){let yt=gt,kt=gt;gt.length===1&&(yt=(mr,br)=>gt(mr)-br,kt=o(gt));function Lt(mr,br,Er,Tr){for(Er==null&&(Er=0),Tr==null&&(Tr=mr.length);Er<Tr;){let Ur=Er+Tr>>>1;kt(mr[Ur],br)<0?Er=Ur+1:Tr=Ur}return Er}function Ct(mr,br,Er,Tr){for(Er==null&&(Er=0),Tr==null&&(Tr=mr.length);Er<Tr;){let Ur=Er+Tr>>>1;kt(mr[Ur],br)>0?Tr=Ur:Er=Ur+1}return Er}function $t(mr,br,Er,Tr){Er==null&&(Er=0),Tr==null&&(Tr=mr.length);let Ur=Lt(mr,br,Er,Tr-1);return Ur>Er&&yt(mr[Ur-1],br)>-yt(mr[Ur],br)?Ur-1:Ur}return{left:Lt,center:$t,right:Ct}}function o(gt){return(yt,kt)=>i(gt(yt),kt)}function s(gt){return gt===null?NaN:+gt}function*l(gt,yt){if(yt===void 0)for(let kt of gt)kt!=null&&(kt=+kt)>=kt&&(yield kt);else{let kt=-1;for(let Lt of gt)(Lt=yt(Lt,++kt,gt))!=null&&(Lt=+Lt)>=Lt&&(yield Lt)}}let n=a(i),u=n.right,c=n.left,f=a(s).center;function h(gt,yt){let kt=0;if(yt===void 0)for(let Lt of gt)Lt!=null&&(Lt=+Lt)>=Lt&&++kt;else{let Lt=-1;for(let Ct of gt)(Ct=yt(Ct,++Lt,gt))!=null&&(Ct=+Ct)>=Ct&&++kt}return kt}function d(gt){return gt.length|0}function p(gt){return!(gt>0)}function g(gt){return typeof gt!="object"||"length"in gt?gt:Array.from(gt)}function m(gt){return yt=>gt(...yt)}function y(...gt){let yt=typeof gt[gt.length-1]=="function"&&m(gt.pop());gt=gt.map(g);let kt=gt.map(d),Lt=gt.length-1,Ct=new Array(Lt+1).fill(0),$t=[];if(Lt<0||kt.some(p))return $t;for(;;){$t.push(Ct.map((br,Er)=>gt[Er][br]));let mr=Lt;for(;++Ct[mr]===kt[mr];){if(mr===0)return yt?$t.map(yt):$t;Ct[mr--]=0}}}function _(gt,yt){var kt=0,Lt=0;return Float64Array.from(gt,yt===void 0?Ct=>kt+=+Ct||0:Ct=>kt+=+yt(Ct,Lt++,gt)||0)}function v(gt,yt){return yt<gt?-1:yt>gt?1:yt>=gt?0:NaN}function x(gt,yt){let kt=0,Lt,Ct=0,$t=0;if(yt===void 0)for(let mr of gt)mr!=null&&(mr=+mr)>=mr&&(Lt=mr-Ct,Ct+=Lt/++kt,$t+=Lt*(mr-Ct));else{let mr=-1;for(let br of gt)(br=yt(br,++mr,gt))!=null&&(br=+br)>=br&&(Lt=br-Ct,Ct+=Lt/++kt,$t+=Lt*(br-Ct))}if(kt>1)return $t/(kt-1)}function S(gt,yt){let kt=x(gt,yt);return kt&&Math.sqrt(kt)}function M(gt,yt){let kt,Lt;if(yt===void 0)for(let Ct of gt)Ct!=null&&(kt===void 0?Ct>=Ct&&(kt=Lt=Ct):(kt>Ct&&(kt=Ct),Lt<Ct&&(Lt=Ct)));else{let Ct=-1;for(let $t of gt)($t=yt($t,++Ct,gt))!=null&&(kt===void 0?$t>=$t&&(kt=Lt=$t):(kt>$t&&(kt=$t),Lt<$t&&(Lt=$t)))}return[kt,Lt]}class C{constructor(){this._partials=new Float64Array(32),this._n=0}add(yt){let kt=this._partials,Lt=0;for(let Ct=0;Ct<this._n&&Ct<32;Ct++){let $t=kt[Ct],mr=yt+$t,br=Math.abs(yt)<Math.abs($t)?yt-(mr-$t):$t-(mr-yt);br&&(kt[Lt++]=br),yt=mr}return kt[Lt]=yt,this._n=Lt+1,this}valueOf(){let yt=this._partials,kt=this._n,Lt,Ct,$t,mr=0;if(kt>0){for(mr=yt[--kt];kt>0&&(Lt=mr,Ct=yt[--kt],mr=Lt+Ct,$t=Ct-(mr-Lt),!$t););kt>0&&($t<0&&yt[kt-1]<0||$t>0&&yt[kt-1]>0)&&(Ct=$t*2,Lt=mr+Ct,Ct==Lt-mr&&(mr=Lt))}return mr}}function w(gt,yt){let kt=new C;if(yt===void 0)for(let Lt of gt)(Lt=+Lt)&&kt.add(Lt);else{let Lt=-1;for(let Ct of gt)(Ct=+yt(Ct,++Lt,gt))&&kt.add(Ct)}return+kt}function k(gt,yt){let kt=new C,Lt=-1;return Float64Array.from(gt,yt===void 0?Ct=>kt.add(+Ct||0):Ct=>kt.add(+yt(Ct,++Lt,gt)||0))}class A extends Map{constructor(yt,kt=D){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:kt}}),yt!=null)for(let[Lt,Ct]of yt)this.set(Lt,Ct)}get(yt){return super.get(E(this,yt))}has(yt){return super.has(E(this,yt))}set(yt,kt){return super.set(T(this,yt),kt)}delete(yt){return super.delete(F(this,yt))}}class b extends Set{constructor(yt,kt=D){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:kt}}),yt!=null)for(let Lt of yt)this.add(Lt)}has(yt){return super.has(E(this,yt))}add(yt){return super.add(T(this,yt))}delete(yt){return super.delete(F(this,yt))}}function E({_intern:gt,_key:yt},kt){let Lt=yt(kt);return gt.has(Lt)?gt.get(Lt):kt}function T({_intern:gt,_key:yt},kt){let Lt=yt(kt);return gt.has(Lt)?gt.get(Lt):(gt.set(Lt,kt),kt)}function F({_intern:gt,_key:yt},kt){let Lt=yt(kt);return gt.has(Lt)&&(kt=gt.get(kt),gt.delete(Lt)),kt}function D(gt){return gt!==null&&typeof gt=="object"?gt.valueOf():gt}function R(gt){return gt}function P(gt,...yt){return W(gt,R,R,yt)}function z(gt,...yt){return W(gt,Array.from,R,yt)}function I(gt,yt,...kt){return W(gt,R,yt,kt)}function L(gt,yt,...kt){return W(gt,Array.from,yt,kt)}function B(gt,...yt){return W(gt,R,G,yt)}function O(gt,...yt){return W(gt,Array.from,G,yt)}function G(gt){if(gt.length!==1)throw new Error("duplicate key");return gt[0]}function W(gt,yt,kt,Lt){return(function Ct($t,mr){if(mr>=Lt.length)return kt($t);let br=new A,Er=Lt[mr++],Tr=-1;for(let Ur of $t){let Ai=Er(Ur,++Tr,$t),oi=br.get(Ai);oi?oi.push(Ur):br.set(Ai,[Ur])}for(let[Ur,Ai]of br)br.set(Ur,Ct(Ai,mr));return yt(br)})(gt,0)}function X(gt,yt){return Array.from(yt,kt=>gt[kt])}function Z(gt,...yt){if(typeof gt[Symbol.iterator]!="function")throw new TypeError("values is not iterable");gt=Array.from(gt);let[kt=i]=yt;if(kt.length===1||yt.length>1){let Lt=Uint32Array.from(gt,(Ct,$t)=>$t);return yt.length>1?(yt=yt.map(Ct=>gt.map(Ct)),Lt.sort((Ct,$t)=>{for(let mr of yt){let br=i(mr[Ct],mr[$t]);if(br)return br}})):(kt=gt.map(kt),Lt.sort((Ct,$t)=>i(kt[Ct],kt[$t]))),X(gt,Lt)}return gt.sort(kt)}function J(gt,yt,kt){return(yt.length===1?Z(I(gt,yt,kt),(([Lt,Ct],[$t,mr])=>i(Ct,mr)||i(Lt,$t))):Z(P(gt,kt),(([Lt,Ct],[$t,mr])=>yt(Ct,mr)||i(Lt,$t)))).map(([Lt])=>Lt)}var N=Array.prototype,H=N.slice;function $(gt){return function(){return gt}}var U=Math.sqrt(50),V=Math.sqrt(10),j=Math.sqrt(2);function q(gt,yt,kt){var Lt,Ct=-1,$t,mr,br;if(yt=+yt,gt=+gt,kt=+kt,gt===yt&&kt>0)return[gt];if((Lt=yt<gt)&&($t=gt,gt=yt,yt=$t),(br=Y(gt,yt,kt))===0||!isFinite(br))return[];if(br>0){let Er=Math.round(gt/br),Tr=Math.round(yt/br);for(Er*br<gt&&++Er,Tr*br>yt&&--Tr,mr=new Array($t=Tr-Er+1);++Ct<$t;)mr[Ct]=(Er+Ct)*br}else{br=-br;let Er=Math.round(gt*br),Tr=Math.round(yt*br);for(Er/br<gt&&++Er,Tr/br>yt&&--Tr,mr=new Array($t=Tr-Er+1);++Ct<$t;)mr[Ct]=(Er+Ct)/br}return Lt&&mr.reverse(),mr}function Y(gt,yt,kt){var Lt=(yt-gt)/Math.max(0,kt),Ct=Math.floor(Math.log(Lt)/Math.LN10),$t=Lt/Math.pow(10,Ct);return Ct>=0?($t>=U?10:$t>=V?5:$t>=j?2:1)*Math.pow(10,Ct):-Math.pow(10,-Ct)/($t>=U?10:$t>=V?5:$t>=j?2:1)}function K(gt,yt,kt){var Lt=Math.abs(yt-gt)/Math.max(0,kt),Ct=Math.pow(10,Math.floor(Math.log(Lt)/Math.LN10)),$t=Lt/Ct;return $t>=U?Ct*=10:$t>=V?Ct*=5:$t>=j&&(Ct*=2),yt<gt?-Ct:Ct}function te(gt,yt,kt){let Lt;for(;;){let Ct=Y(gt,yt,kt);if(Ct===Lt||Ct===0||!isFinite(Ct))return[gt,yt];Ct>0?(gt=Math.floor(gt/Ct)*Ct,yt=Math.ceil(yt/Ct)*Ct):Ct<0&&(gt=Math.ceil(gt*Ct)/Ct,yt=Math.floor(yt*Ct)/Ct),Lt=Ct}}function ne(gt){return Math.ceil(Math.log(h(gt))/Math.LN2)+1}function se(){var gt=R,yt=M,kt=ne;function Lt(Ct){Array.isArray(Ct)||(Ct=Array.from(Ct));var $t,mr=Ct.length,br,Er=new Array(mr);for($t=0;$t<mr;++$t)Er[$t]=gt(Ct[$t],$t,Ct);var Tr=yt(Er),Ur=Tr[0],Ai=Tr[1],oi=kt(Er,Ur,Ai);if(!Array.isArray(oi)){let ja=Ai,ya=+oi;if(yt===M&&([Ur,Ai]=te(Ur,Ai,ya)),oi=q(Ur,Ai,ya),oi[oi.length-1]>=Ai)if(ja>=Ai&&yt===M){let pa=Y(Ur,Ai,ya);isFinite(pa)&&(pa>0?Ai=(Math.floor(Ai/pa)+1)*pa:pa<0&&(Ai=(Math.ceil(Ai*-pa)+1)/-pa))}else oi.pop()}for(var Qr=oi.length;oi[0]<=Ur;)oi.shift(),--Qr;for(;oi[Qr-1]>Ai;)oi.pop(),--Qr;var ea=new Array(Qr+1),$i;for($t=0;$t<=Qr;++$t)$i=ea[$t]=[],$i.x0=$t>0?oi[$t-1]:Ur,$i.x1=$t<Qr?oi[$t]:Ai;for($t=0;$t<mr;++$t)br=Er[$t],Ur<=br&&br<=Ai&&ea[u(oi,br,0,Qr)].push(Ct[$t]);return ea}return Lt.value=function(Ct){return arguments.length?(gt=typeof Ct=="function"?Ct:$(Ct),Lt):gt},Lt.domain=function(Ct){return arguments.length?(yt=typeof Ct=="function"?Ct:$([Ct[0],Ct[1]]),Lt):yt},Lt.thresholds=function(Ct){return arguments.length?(kt=typeof Ct=="function"?Ct:Array.isArray(Ct)?$(H.call(Ct)):$(Ct),Lt):kt},Lt}function le(gt,yt){let kt;if(yt===void 0)for(let Lt of gt)Lt!=null&&(kt<Lt||kt===void 0&&Lt>=Lt)&&(kt=Lt);else{let Lt=-1;for(let Ct of gt)(Ct=yt(Ct,++Lt,gt))!=null&&(kt<Ct||kt===void 0&&Ct>=Ct)&&(kt=Ct)}return kt}function ce(gt,yt){let kt;if(yt===void 0)for(let Lt of gt)Lt!=null&&(kt>Lt||kt===void 0&&Lt>=Lt)&&(kt=Lt);else{let Lt=-1;for(let Ct of gt)(Ct=yt(Ct,++Lt,gt))!=null&&(kt>Ct||kt===void 0&&Ct>=Ct)&&(kt=Ct)}return kt}function pe(gt,yt,kt=0,Lt=gt.length-1,Ct=i){for(;Lt>kt;){if(Lt-kt>600){let Er=Lt-kt+1,Tr=yt-kt+1,Ur=Math.log(Er),Ai=.5*Math.exp(2*Ur/3),oi=.5*Math.sqrt(Ur*Ai*(Er-Ai)/Er)*(Tr-Er/2<0?-1:1),Qr=Math.max(kt,Math.floor(yt-Tr*Ai/Er+oi)),ea=Math.min(Lt,Math.floor(yt+(Er-Tr)*Ai/Er+oi));pe(gt,yt,Qr,ea,Ct)}let $t=gt[yt],mr=kt,br=Lt;for(xe(gt,kt,yt),Ct(gt[Lt],$t)>0&&xe(gt,kt,Lt);mr<br;){for(xe(gt,mr,br),++mr,--br;Ct(gt[mr],$t)<0;)++mr;for(;Ct(gt[br],$t)>0;)--br}Ct(gt[kt],$t)===0?xe(gt,kt,br):(++br,xe(gt,br,Lt)),br<=yt&&(kt=br+1),yt<=br&&(Lt=br-1)}return gt}function xe(gt,yt,kt){let Lt=gt[yt];gt[yt]=gt[kt],gt[kt]=Lt}function ye(gt,yt,kt){if(gt=Float64Array.from(l(gt,kt)),!!(Lt=gt.length)){if((yt=+yt)<=0||Lt<2)return ce(gt);if(yt>=1)return le(gt);var Lt,Ct=(Lt-1)*yt,$t=Math.floor(Ct),mr=le(pe(gt,$t).subarray(0,$t+1)),br=ce(gt.subarray($t+1));return mr+(br-mr)*(Ct-$t)}}function fe(gt,yt,kt=s){if(Lt=gt.length){if((yt=+yt)<=0||Lt<2)return+kt(gt[0],0,gt);if(yt>=1)return+kt(gt[Lt-1],Lt-1,gt);var Lt,Ct=(Lt-1)*yt,$t=Math.floor(Ct),mr=+kt(gt[$t],$t,gt),br=+kt(gt[$t+1],$t+1,gt);return mr+(br-mr)*(Ct-$t)}}function ae(gt,yt,kt){return Math.ceil((kt-yt)/(2*(ye(gt,.75)-ye(gt,.25))*Math.pow(h(gt),-1/3)))}function ee(gt,yt,kt){return Math.ceil((kt-yt)/(3.5*S(gt)*Math.pow(h(gt),-1/3)))}function ie(gt,yt){let kt,Lt=-1,Ct=-1;if(yt===void 0)for(let $t of gt)++Ct,$t!=null&&(kt<$t||kt===void 0&&$t>=$t)&&(kt=$t,Lt=Ct);else for(let $t of gt)($t=yt($t,++Ct,gt))!=null&&(kt<$t||kt===void 0&&$t>=$t)&&(kt=$t,Lt=Ct);return Lt}function Q(gt,yt){let kt=0,Lt=0;if(yt===void 0)for(let Ct of gt)Ct!=null&&(Ct=+Ct)>=Ct&&(++kt,Lt+=Ct);else{let Ct=-1;for(let $t of gt)($t=yt($t,++Ct,gt))!=null&&($t=+$t)>=$t&&(++kt,Lt+=$t)}if(kt)return Lt/kt}function ue(gt,yt){return ye(gt,.5,yt)}function*ge(gt){for(let yt of gt)yield*Ia(yt)}function Me(gt){return Array.from(ge(gt))}function Te(gt,yt){let kt,Lt=-1,Ct=-1;if(yt===void 0)for(let $t of gt)++Ct,$t!=null&&(kt>$t||kt===void 0&&$t>=$t)&&(kt=$t,Lt=Ct);else for(let $t of gt)($t=yt($t,++Ct,gt))!=null&&(kt>$t||kt===void 0&&$t>=$t)&&(kt=$t,Lt=Ct);return Lt}function je(gt,yt=Ve){let kt=[],Lt,Ct=!1;for(let $t of gt)Ct&&kt.push(yt(Lt,$t)),Lt=$t,Ct=!0;return kt}function Ve(gt,yt){return[gt,yt]}function Ze(gt,yt,kt){gt=+gt,yt=+yt,kt=(Ct=arguments.length)<2?(yt=gt,gt=0,1):Ct<3?1:+kt;for(var Lt=-1,Ct=Math.max(0,Math.ceil((yt-gt)/kt))|0,$t=new Array(Ct);++Lt<Ct;)$t[Lt]=gt+Lt*kt;return $t}function Ke(gt,yt=i){let kt,Lt=!1;if(yt.length===1){let Ct;for(let $t of gt){let mr=yt($t);(Lt?i(mr,Ct)<0:i(mr,mr)===0)&&(kt=$t,Ct=mr,Lt=!0)}}else for(let Ct of gt)(Lt?yt(Ct,kt)<0:yt(Ct,Ct)===0)&&(kt=Ct,Lt=!0);return kt}function vt(gt,yt=i){if(yt.length===1)return Te(gt,yt);let kt,Lt=-1,Ct=-1;for(let $t of gt)++Ct,(Lt<0?yt($t,$t)===0:yt($t,kt)<0)&&(kt=$t,Lt=Ct);return Lt}function xt(gt,yt=i){let kt,Lt=!1;if(yt.length===1){let Ct;for(let $t of gt){let mr=yt($t);(Lt?i(mr,Ct)>0:i(mr,mr)===0)&&(kt=$t,Ct=mr,Lt=!0)}}else for(let Ct of gt)(Lt?yt(Ct,kt)>0:yt(Ct,Ct)===0)&&(kt=Ct,Lt=!0);return kt}function Pt(gt,yt=i){if(yt.length===1)return ie(gt,yt);let kt,Lt=-1,Ct=-1;for(let $t of gt)++Ct,(Lt<0?yt($t,$t)===0:yt($t,kt)>0)&&(kt=$t,Lt=Ct);return Lt}function mt(gt,yt){let kt=vt(gt,yt);return kt<0?void 0:kt}var Mt=lt(Math.random);function lt(gt){return function(kt,Lt=0,Ct=kt.length){let $t=Ct-(Lt=+Lt);for(;$t;){let mr=gt()*$t--|0,br=kt[$t+Lt];kt[$t+Lt]=kt[mr+Lt],kt[mr+Lt]=br}return kt}}function qe(gt,yt){let kt=0;if(yt===void 0)for(let Lt of gt)(Lt=+Lt)&&(kt+=Lt);else{let Lt=-1;for(let Ct of gt)(Ct=+yt(Ct,++Lt,gt))&&(kt+=Ct)}return kt}function Ye(gt){if(!($t=gt.length))return[];for(var yt=-1,kt=ce(gt,me),Lt=new Array(kt);++yt<kt;)for(var Ct=-1,$t,mr=Lt[yt]=new Array($t);++Ct<$t;)mr[Ct]=gt[Ct][yt];return Lt}function me(gt){return gt.length}function _e(){return Ye(arguments)}function Ae(gt,yt){if(typeof yt!="function")throw new TypeError("test is not a function");let kt=-1;for(let Lt of gt)if(!yt(Lt,++kt,gt))return!1;return!0}function ke(gt,yt){if(typeof yt!="function")throw new TypeError("test is not a function");let kt=-1;for(let Lt of gt)if(yt(Lt,++kt,gt))return!0;return!1}function Ee(gt,yt){if(typeof yt!="function")throw new TypeError("test is not a function");let kt=[],Lt=-1;for(let Ct of gt)yt(Ct,++Lt,gt)&&kt.push(Ct);return kt}function De(gt,yt){if(typeof gt[Symbol.iterator]!="function")throw new TypeError("values is not iterable");if(typeof yt!="function")throw new TypeError("mapper is not a function");return Array.from(gt,(kt,Lt)=>yt(kt,Lt,gt))}function Je(gt,yt,kt){if(typeof yt!="function")throw new TypeError("reducer is not a function");let Lt=gt[Symbol.iterator](),Ct,$t,mr=-1;if(arguments.length<3){if({done:Ct,value:kt}=Lt.next(),Ct)return;++mr}for(;{done:Ct,value:$t}=Lt.next(),!Ct;)kt=yt(kt,$t,++mr,gt);return kt}function Ue(gt){if(typeof gt[Symbol.iterator]!="function")throw new TypeError("values is not iterable");return Array.from(gt).reverse()}function at(gt,...yt){gt=new Set(gt);for(let kt of yt)for(let Lt of kt)gt.delete(Lt);return gt}function rt(gt,yt){let kt=yt[Symbol.iterator](),Lt=new Set;for(let Ct of gt){if(Lt.has(Ct))return!1;let $t,mr;for(;({value:$t,done:mr}=kt.next())&&!mr;){if(Object.is(Ct,$t))return!1;Lt.add($t)}}return!0}function ft(gt){return gt instanceof Set?gt:new Set(gt)}function At(gt,...yt){gt=new Set(gt),yt=yt.map(ft);e:for(let kt of gt)for(let Lt of yt)if(!Lt.has(kt)){gt.delete(kt);continue e}return gt}function ht(gt,yt){let kt=gt[Symbol.iterator](),Lt=new Set;for(let Ct of yt){if(Lt.has(Ct))continue;let $t,mr;for(;{value:$t,done:mr}=kt.next();){if(mr)return!1;if(Lt.add($t),Object.is(Ct,$t))break}}return!0}function Gt(gt,yt){return ht(yt,gt)}function fr(...gt){let yt=new Set;for(let kt of gt)for(let Lt of kt)yt.add(Lt);return yt}t.Adder=C,t.InternMap=A,t.InternSet=b,t.ascending=i,t.bin=se,t.bisect=u,t.bisectCenter=f,t.bisectLeft=c,t.bisectRight=u,t.bisector=a,t.count=h,t.cross=y,t.cumsum=_,t.descending=v,t.deviation=S,t.difference=at,t.disjoint=rt,t.every=Ae,t.extent=M,t.fcumsum=k,t.filter=Ee,t.fsum=w,t.greatest=xt,t.greatestIndex=Pt,t.group=P,t.groupSort=J,t.groups=z,t.histogram=se,t.index=B,t.indexes=O,t.intersection=At,t.least=Ke,t.leastIndex=vt,t.map=De,t.max=le,t.maxIndex=ie,t.mean=Q,t.median=ue,t.merge=Me,t.min=ce,t.minIndex=Te,t.nice=te,t.pairs=je,t.permute=X,t.quantile=ye,t.quantileSorted=fe,t.quickselect=pe,t.range=Ze,t.reduce=Je,t.reverse=Ue,t.rollup=I,t.rollups=L,t.scan=mt,t.shuffle=Mt,t.shuffler=lt,t.some=ke,t.sort=Z,t.subset=Gt,t.sum=qe,t.superset=ht,t.thresholdFreedmanDiaconis=ae,t.thresholdScott=ee,t.thresholdSturges=ne,t.tickIncrement=Y,t.tickStep=K,t.ticks=q,t.transpose=Ye,t.union=fr,t.variance=x,t.zip=_e,Object.defineProperty(t,"__esModule",{value:!0})}))}}),dle=de({"node_modules/d3-path/dist/d3-path.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e):(t=t||self,i(t.d3=t.d3||{}))})(e,function(t){"use strict";var i=Math.PI,a=2*i,o=1e-6,s=a-o;function l(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function n(){return new l}l.prototype=n.prototype={constructor:l,moveTo:function(u,c){this._+="M"+(this._x0=this._x1=+u)+","+(this._y0=this._y1=+c)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(u,c){this._+="L"+(this._x1=+u)+","+(this._y1=+c)},quadraticCurveTo:function(u,c,f,h){this._+="Q"+ +u+","+ +c+","+(this._x1=+f)+","+(this._y1=+h)},bezierCurveTo:function(u,c,f,h,d,p){this._+="C"+ +u+","+ +c+","+ +f+","+ +h+","+(this._x1=+d)+","+(this._y1=+p)},arcTo:function(u,c,f,h,d){u=+u,c=+c,f=+f,h=+h,d=+d;var p=this._x1,g=this._y1,m=f-u,y=h-c,_=p-u,v=g-c,x=_*_+v*v;if(d<0)throw new Error("negative radius: "+d);if(this._x1===null)this._+="M"+(this._x1=u)+","+(this._y1=c);else if(x>o)if(!(Math.abs(v*m-y*_)>o)||!d)this._+="L"+(this._x1=u)+","+(this._y1=c);else{var S=f-p,M=h-g,C=m*m+y*y,w=S*S+M*M,k=Math.sqrt(C),A=Math.sqrt(x),b=d*Math.tan((i-Math.acos((C+x-w)/(2*k*A)))/2),E=b/A,T=b/k;Math.abs(E-1)>o&&(this._+="L"+(u+E*_)+","+(c+E*v)),this._+="A"+d+","+d+",0,0,"+ +(v*S>_*M)+","+(this._x1=u+T*m)+","+(this._y1=c+T*y)}},arc:function(u,c,f,h,d,p){u=+u,c=+c,f=+f,p=!!p;var g=f*Math.cos(h),m=f*Math.sin(h),y=u+g,_=c+m,v=1^p,x=p?h-d:d-h;if(f<0)throw new Error("negative radius: "+f);this._x1===null?this._+="M"+y+","+_:(Math.abs(this._x1-y)>o||Math.abs(this._y1-_)>o)&&(this._+="L"+y+","+_),f&&(x<0&&(x=x%a+a),x>s?this._+="A"+f+","+f+",0,1,"+v+","+(u-g)+","+(c-m)+"A"+f+","+f+",0,1,"+v+","+(this._x1=y)+","+(this._y1=_):x>o&&(this._+="A"+f+","+f+",0,"+ +(x>=i)+","+v+","+(this._x1=u+f*Math.cos(d))+","+(this._y1=c+f*Math.sin(d))))},rect:function(u,c,f,h){this._+="M"+(this._x0=this._x1=+u)+","+(this._y0=this._y1=+c)+"h"+ +f+"v"+ +h+"h"+-f+"Z"},toString:function(){return this._}},t.path=n,Object.defineProperty(t,"__esModule",{value:!0})})}}),q8=de({"node_modules/d3-shape/dist/d3-shape.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,dle()):(t=t||self,i(t.d3=t.d3||{},t.d3))})(e,function(t,i){"use strict";function a(ze){return function(){return ze}}var o=Math.abs,s=Math.atan2,l=Math.cos,n=Math.max,u=Math.min,c=Math.sin,f=Math.sqrt,h=1e-12,d=Math.PI,p=d/2,g=2*d;function m(ze){return ze>1?0:ze<-1?d:Math.acos(ze)}function y(ze){return ze>=1?p:ze<=-1?-p:Math.asin(ze)}function _(ze){return ze.innerRadius}function v(ze){return ze.outerRadius}function x(ze){return ze.startAngle}function S(ze){return ze.endAngle}function M(ze){return ze&&ze.padAngle}function C(ze,tt,ct,wt,Nt,It,Zt,qt){var vr=ct-ze,Br=wt-tt,Pr=Zt-Nt,Mi=qt-It,gi=Mi*vr-Pr*Br;if(!(gi*gi<h))return gi=(Pr*(tt-It)-Mi*(ze-Nt))/gi,[ze+gi*vr,tt+gi*Br]}function w(ze,tt,ct,wt,Nt,It,Zt){var qt=ze-ct,vr=tt-wt,Br=(Zt?It:-It)/f(qt*qt+vr*vr),Pr=Br*vr,Mi=-Br*qt,gi=ze+Pr,ba=tt+Mi,Hi=ct+Pr,Za=wt+Mi,oa=(gi+Hi)/2,Cn=(ba+Za)/2,_n=Hi-gi,Li=Za-ba,In=_n*_n+Li*Li,pn=Nt-It,Ka=gi*Za-Hi*ba,Rn=(Li<0?-1:1)*f(n(0,pn*pn*In-Ka*Ka)),tn=(Ka*Li-_n*Rn)/In,Mn=(-Ka*_n-Li*Rn)/In,Kn=(Ka*Li+_n*Rn)/In,zn=(-Ka*_n+Li*Rn)/In,ua=tn-oa,Ea=Mn-Cn,ln=Kn-oa,on=zn-Cn;return ua*ua+Ea*Ea>ln*ln+on*on&&(tn=Kn,Mn=zn),{cx:tn,cy:Mn,x01:-Pr,y01:-Mi,x11:tn*(Nt/pn-1),y11:Mn*(Nt/pn-1)}}function k(){var ze=_,tt=v,ct=a(0),wt=null,Nt=x,It=S,Zt=M,qt=null;function vr(){var Br,Pr,Mi=+ze.apply(this,arguments),gi=+tt.apply(this,arguments),ba=Nt.apply(this,arguments)-p,Hi=It.apply(this,arguments)-p,Za=o(Hi-ba),oa=Hi>ba;if(qt||(qt=Br=i.path()),gi<Mi&&(Pr=gi,gi=Mi,Mi=Pr),!(gi>h))qt.moveTo(0,0);else if(Za>g-h)qt.moveTo(gi*l(ba),gi*c(ba)),qt.arc(0,0,gi,ba,Hi,!oa),Mi>h&&(qt.moveTo(Mi*l(Hi),Mi*c(Hi)),qt.arc(0,0,Mi,Hi,ba,oa));else{var Cn=ba,_n=Hi,Li=ba,In=Hi,pn=Za,Ka=Za,Rn=Zt.apply(this,arguments)/2,tn=Rn>h&&(wt?+wt.apply(this,arguments):f(Mi*Mi+gi*gi)),Mn=u(o(gi-Mi)/2,+ct.apply(this,arguments)),Kn=Mn,zn=Mn,ua,Ea;if(tn>h){var ln=y(tn/Mi*c(Rn)),on=y(tn/gi*c(Rn));(pn-=ln*2)>h?(ln*=oa?1:-1,Li+=ln,In-=ln):(pn=0,Li=In=(ba+Hi)/2),(Ka-=on*2)>h?(on*=oa?1:-1,Cn+=on,_n-=on):(Ka=0,Cn=_n=(ba+Hi)/2)}var ao=gi*l(Cn),ho=gi*c(Cn),Jn=Mi*l(In),lo=Mi*c(In);if(Mn>h){var Fo=gi*l(_n),uo=gi*c(_n),Qn=Mi*l(Li),jo=Mi*c(Li),Yn;if(Za<d&&(Yn=C(ao,ho,Qn,jo,Fo,uo,Jn,lo))){var Bn=ao-Yn[0],ps=ho-Yn[1],xo=Fo-Yn[0],no=uo-Yn[1],Mo=1/c(m((Bn*xo+ps*no)/(f(Bn*Bn+ps*ps)*f(xo*xo+no*no)))/2),Vn=f(Yn[0]*Yn[0]+Yn[1]*Yn[1]);Kn=u(Mn,(Mi-Vn)/(Mo-1)),zn=u(Mn,(gi-Vn)/(Mo+1))}}Ka>h?zn>h?(ua=w(Qn,jo,ao,ho,gi,zn,oa),Ea=w(Fo,uo,Jn,lo,gi,zn,oa),qt.moveTo(ua.cx+ua.x01,ua.cy+ua.y01),zn<Mn?qt.arc(ua.cx,ua.cy,zn,s(ua.y01,ua.x01),s(Ea.y01,Ea.x01),!oa):(qt.arc(ua.cx,ua.cy,zn,s(ua.y01,ua.x01),s(ua.y11,ua.x11),!oa),qt.arc(0,0,gi,s(ua.cy+ua.y11,ua.cx+ua.x11),s(Ea.cy+Ea.y11,Ea.cx+Ea.x11),!oa),qt.arc(Ea.cx,Ea.cy,zn,s(Ea.y11,Ea.x11),s(Ea.y01,Ea.x01),!oa))):(qt.moveTo(ao,ho),qt.arc(0,0,gi,Cn,_n,!oa)):qt.moveTo(ao,ho),!(Mi>h)||!(pn>h)?qt.lineTo(Jn,lo):Kn>h?(ua=w(Jn,lo,Fo,uo,Mi,-Kn,oa),Ea=w(ao,ho,Qn,jo,Mi,-Kn,oa),qt.lineTo(ua.cx+ua.x01,ua.cy+ua.y01),Kn<Mn?qt.arc(ua.cx,ua.cy,Kn,s(ua.y01,ua.x01),s(Ea.y01,Ea.x01),!oa):(qt.arc(ua.cx,ua.cy,Kn,s(ua.y01,ua.x01),s(ua.y11,ua.x11),!oa),qt.arc(0,0,Mi,s(ua.cy+ua.y11,ua.cx+ua.x11),s(Ea.cy+Ea.y11,Ea.cx+Ea.x11),oa),qt.arc(Ea.cx,Ea.cy,Kn,s(Ea.y11,Ea.x11),s(Ea.y01,Ea.x01),!oa))):qt.arc(0,0,Mi,In,Li,oa)}if(qt.closePath(),Br)return qt=null,Br+""||null}return vr.centroid=function(){var Br=(+ze.apply(this,arguments)+ +tt.apply(this,arguments))/2,Pr=(+Nt.apply(this,arguments)+ +It.apply(this,arguments))/2-d/2;return[l(Pr)*Br,c(Pr)*Br]},vr.innerRadius=function(Br){return arguments.length?(ze=typeof Br=="function"?Br:a(+Br),vr):ze},vr.outerRadius=function(Br){return arguments.length?(tt=typeof Br=="function"?Br:a(+Br),vr):tt},vr.cornerRadius=function(Br){return arguments.length?(ct=typeof Br=="function"?Br:a(+Br),vr):ct},vr.padRadius=function(Br){return arguments.length?(wt=Br==null?null:typeof Br=="function"?Br:a(+Br),vr):wt},vr.startAngle=function(Br){return arguments.length?(Nt=typeof Br=="function"?Br:a(+Br),vr):Nt},vr.endAngle=function(Br){return arguments.length?(It=typeof Br=="function"?Br:a(+Br),vr):It},vr.padAngle=function(Br){return arguments.length?(Zt=typeof Br=="function"?Br:a(+Br),vr):Zt},vr.context=function(Br){return arguments.length?(qt=Br??null,vr):qt},vr}function A(ze){this._context=ze}A.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1,this._line?this._context.lineTo(ze,tt):this._context.moveTo(ze,tt);break;case 1:this._point=2;default:this._context.lineTo(ze,tt);break}}};function b(ze){return new A(ze)}function E(ze){return ze[0]}function T(ze){return ze[1]}function F(){var ze=E,tt=T,ct=a(!0),wt=null,Nt=b,It=null;function Zt(qt){var vr,Br=qt.length,Pr,Mi=!1,gi;for(wt==null&&(It=Nt(gi=i.path())),vr=0;vr<=Br;++vr)!(vr<Br&&ct(Pr=qt[vr],vr,qt))===Mi&&((Mi=!Mi)?It.lineStart():It.lineEnd()),Mi&&It.point(+ze(Pr,vr,qt),+tt(Pr,vr,qt));if(gi)return It=null,gi+""||null}return Zt.x=function(qt){return arguments.length?(ze=typeof qt=="function"?qt:a(+qt),Zt):ze},Zt.y=function(qt){return arguments.length?(tt=typeof qt=="function"?qt:a(+qt),Zt):tt},Zt.defined=function(qt){return arguments.length?(ct=typeof qt=="function"?qt:a(!!qt),Zt):ct},Zt.curve=function(qt){return arguments.length?(Nt=qt,wt!=null&&(It=Nt(wt)),Zt):Nt},Zt.context=function(qt){return arguments.length?(qt==null?wt=It=null:It=Nt(wt=qt),Zt):wt},Zt}function D(){var ze=E,tt=null,ct=a(0),wt=T,Nt=a(!0),It=null,Zt=b,qt=null;function vr(Pr){var Mi,gi,ba,Hi=Pr.length,Za,oa=!1,Cn,_n=new Array(Hi),Li=new Array(Hi);for(It==null&&(qt=Zt(Cn=i.path())),Mi=0;Mi<=Hi;++Mi){if(!(Mi<Hi&&Nt(Za=Pr[Mi],Mi,Pr))===oa)if(oa=!oa)gi=Mi,qt.areaStart(),qt.lineStart();else{for(qt.lineEnd(),qt.lineStart(),ba=Mi-1;ba>=gi;--ba)qt.point(_n[ba],Li[ba]);qt.lineEnd(),qt.areaEnd()}oa&&(_n[Mi]=+ze(Za,Mi,Pr),Li[Mi]=+ct(Za,Mi,Pr),qt.point(tt?+tt(Za,Mi,Pr):_n[Mi],wt?+wt(Za,Mi,Pr):Li[Mi]))}if(Cn)return qt=null,Cn+""||null}function Br(){return F().defined(Nt).curve(Zt).context(It)}return vr.x=function(Pr){return arguments.length?(ze=typeof Pr=="function"?Pr:a(+Pr),tt=null,vr):ze},vr.x0=function(Pr){return arguments.length?(ze=typeof Pr=="function"?Pr:a(+Pr),vr):ze},vr.x1=function(Pr){return arguments.length?(tt=Pr==null?null:typeof Pr=="function"?Pr:a(+Pr),vr):tt},vr.y=function(Pr){return arguments.length?(ct=typeof Pr=="function"?Pr:a(+Pr),wt=null,vr):ct},vr.y0=function(Pr){return arguments.length?(ct=typeof Pr=="function"?Pr:a(+Pr),vr):ct},vr.y1=function(Pr){return arguments.length?(wt=Pr==null?null:typeof Pr=="function"?Pr:a(+Pr),vr):wt},vr.lineX0=vr.lineY0=function(){return Br().x(ze).y(ct)},vr.lineY1=function(){return Br().x(ze).y(wt)},vr.lineX1=function(){return Br().x(tt).y(ct)},vr.defined=function(Pr){return arguments.length?(Nt=typeof Pr=="function"?Pr:a(!!Pr),vr):Nt},vr.curve=function(Pr){return arguments.length?(Zt=Pr,It!=null&&(qt=Zt(It)),vr):Zt},vr.context=function(Pr){return arguments.length?(Pr==null?It=qt=null:qt=Zt(It=Pr),vr):It},vr}function R(ze,tt){return tt<ze?-1:tt>ze?1:tt>=ze?0:NaN}function P(ze){return ze}function z(){var ze=P,tt=R,ct=null,wt=a(0),Nt=a(g),It=a(0);function Zt(qt){var vr,Br=qt.length,Pr,Mi,gi=0,ba=new Array(Br),Hi=new Array(Br),Za=+wt.apply(this,arguments),oa=Math.min(g,Math.max(-g,Nt.apply(this,arguments)-Za)),Cn,_n=Math.min(Math.abs(oa)/Br,It.apply(this,arguments)),Li=_n*(oa<0?-1:1),In;for(vr=0;vr<Br;++vr)(In=Hi[ba[vr]=vr]=+ze(qt[vr],vr,qt))>0&&(gi+=In);for(tt!=null?ba.sort(function(pn,Ka){return tt(Hi[pn],Hi[Ka])}):ct!=null&&ba.sort(function(pn,Ka){return ct(qt[pn],qt[Ka])}),vr=0,Mi=gi?(oa-Br*Li)/gi:0;vr<Br;++vr,Za=Cn)Pr=ba[vr],In=Hi[Pr],Cn=Za+(In>0?In*Mi:0)+Li,Hi[Pr]={data:qt[Pr],index:vr,value:In,startAngle:Za,endAngle:Cn,padAngle:_n};return Hi}return Zt.value=function(qt){return arguments.length?(ze=typeof qt=="function"?qt:a(+qt),Zt):ze},Zt.sortValues=function(qt){return arguments.length?(tt=qt,ct=null,Zt):tt},Zt.sort=function(qt){return arguments.length?(ct=qt,tt=null,Zt):ct},Zt.startAngle=function(qt){return arguments.length?(wt=typeof qt=="function"?qt:a(+qt),Zt):wt},Zt.endAngle=function(qt){return arguments.length?(Nt=typeof qt=="function"?qt:a(+qt),Zt):Nt},Zt.padAngle=function(qt){return arguments.length?(It=typeof qt=="function"?qt:a(+qt),Zt):It},Zt}var I=B(b);function L(ze){this._curve=ze}L.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(ze,tt){this._curve.point(tt*Math.sin(ze),tt*-Math.cos(ze))}};function B(ze){function tt(ct){return new L(ze(ct))}return tt._curve=ze,tt}function O(ze){var tt=ze.curve;return ze.angle=ze.x,delete ze.x,ze.radius=ze.y,delete ze.y,ze.curve=function(ct){return arguments.length?tt(B(ct)):tt()._curve},ze}function G(){return O(F().curve(I))}function W(){var ze=D().curve(I),tt=ze.curve,ct=ze.lineX0,wt=ze.lineX1,Nt=ze.lineY0,It=ze.lineY1;return ze.angle=ze.x,delete ze.x,ze.startAngle=ze.x0,delete ze.x0,ze.endAngle=ze.x1,delete ze.x1,ze.radius=ze.y,delete ze.y,ze.innerRadius=ze.y0,delete ze.y0,ze.outerRadius=ze.y1,delete ze.y1,ze.lineStartAngle=function(){return O(ct())},delete ze.lineX0,ze.lineEndAngle=function(){return O(wt())},delete ze.lineX1,ze.lineInnerRadius=function(){return O(Nt())},delete ze.lineY0,ze.lineOuterRadius=function(){return O(It())},delete ze.lineY1,ze.curve=function(Zt){return arguments.length?tt(B(Zt)):tt()._curve},ze}function X(ze,tt){return[(tt=+tt)*Math.cos(ze-=Math.PI/2),tt*Math.sin(ze)]}var Z=Array.prototype.slice;function J(ze){return ze.source}function N(ze){return ze.target}function H(ze){var tt=J,ct=N,wt=E,Nt=T,It=null;function Zt(){var qt,vr=Z.call(arguments),Br=tt.apply(this,vr),Pr=ct.apply(this,vr);if(It||(It=qt=i.path()),ze(It,+wt.apply(this,(vr[0]=Br,vr)),+Nt.apply(this,vr),+wt.apply(this,(vr[0]=Pr,vr)),+Nt.apply(this,vr)),qt)return It=null,qt+""||null}return Zt.source=function(qt){return arguments.length?(tt=qt,Zt):tt},Zt.target=function(qt){return arguments.length?(ct=qt,Zt):ct},Zt.x=function(qt){return arguments.length?(wt=typeof qt=="function"?qt:a(+qt),Zt):wt},Zt.y=function(qt){return arguments.length?(Nt=typeof qt=="function"?qt:a(+qt),Zt):Nt},Zt.context=function(qt){return arguments.length?(It=qt??null,Zt):It},Zt}function $(ze,tt,ct,wt,Nt){ze.moveTo(tt,ct),ze.bezierCurveTo(tt=(tt+wt)/2,ct,tt,Nt,wt,Nt)}function U(ze,tt,ct,wt,Nt){ze.moveTo(tt,ct),ze.bezierCurveTo(tt,ct=(ct+Nt)/2,wt,ct,wt,Nt)}function V(ze,tt,ct,wt,Nt){var It=X(tt,ct),Zt=X(tt,ct=(ct+Nt)/2),qt=X(wt,ct),vr=X(wt,Nt);ze.moveTo(It[0],It[1]),ze.bezierCurveTo(Zt[0],Zt[1],qt[0],qt[1],vr[0],vr[1])}function j(){return H($)}function q(){return H(U)}function Y(){var ze=H(V);return ze.angle=ze.x,delete ze.x,ze.radius=ze.y,delete ze.y,ze}var K={draw:function(ze,tt){var ct=Math.sqrt(tt/d);ze.moveTo(ct,0),ze.arc(0,0,ct,0,g)}},te={draw:function(ze,tt){var ct=Math.sqrt(tt/5)/2;ze.moveTo(-3*ct,-ct),ze.lineTo(-ct,-ct),ze.lineTo(-ct,-3*ct),ze.lineTo(ct,-3*ct),ze.lineTo(ct,-ct),ze.lineTo(3*ct,-ct),ze.lineTo(3*ct,ct),ze.lineTo(ct,ct),ze.lineTo(ct,3*ct),ze.lineTo(-ct,3*ct),ze.lineTo(-ct,ct),ze.lineTo(-3*ct,ct),ze.closePath()}},ne=Math.sqrt(1/3),se=ne*2,le={draw:function(ze,tt){var ct=Math.sqrt(tt/se),wt=ct*ne;ze.moveTo(0,-ct),ze.lineTo(wt,0),ze.lineTo(0,ct),ze.lineTo(-wt,0),ze.closePath()}},ce=.8908130915292852,pe=Math.sin(d/10)/Math.sin(7*d/10),xe=Math.sin(g/10)*pe,ye=-Math.cos(g/10)*pe,fe={draw:function(ze,tt){var ct=Math.sqrt(tt*ce),wt=xe*ct,Nt=ye*ct;ze.moveTo(0,-ct),ze.lineTo(wt,Nt);for(var It=1;It<5;++It){var Zt=g*It/5,qt=Math.cos(Zt),vr=Math.sin(Zt);ze.lineTo(vr*ct,-qt*ct),ze.lineTo(qt*wt-vr*Nt,vr*wt+qt*Nt)}ze.closePath()}},ae={draw:function(ze,tt){var ct=Math.sqrt(tt),wt=-ct/2;ze.rect(wt,wt,ct,ct)}},ee=Math.sqrt(3),ie={draw:function(ze,tt){var ct=-Math.sqrt(tt/(ee*3));ze.moveTo(0,ct*2),ze.lineTo(-ee*ct,-ct),ze.lineTo(ee*ct,-ct),ze.closePath()}},Q=-.5,ue=Math.sqrt(3)/2,ge=1/Math.sqrt(12),Me=(ge/2+1)*3,Te={draw:function(ze,tt){var ct=Math.sqrt(tt/Me),wt=ct/2,Nt=ct*ge,It=wt,Zt=ct*ge+ct,qt=-It,vr=Zt;ze.moveTo(wt,Nt),ze.lineTo(It,Zt),ze.lineTo(qt,vr),ze.lineTo(Q*wt-ue*Nt,ue*wt+Q*Nt),ze.lineTo(Q*It-ue*Zt,ue*It+Q*Zt),ze.lineTo(Q*qt-ue*vr,ue*qt+Q*vr),ze.lineTo(Q*wt+ue*Nt,Q*Nt-ue*wt),ze.lineTo(Q*It+ue*Zt,Q*Zt-ue*It),ze.lineTo(Q*qt+ue*vr,Q*vr-ue*qt),ze.closePath()}},je=[K,te,le,ae,fe,ie,Te];function Ve(){var ze=a(K),tt=a(64),ct=null;function wt(){var Nt;if(ct||(ct=Nt=i.path()),ze.apply(this,arguments).draw(ct,+tt.apply(this,arguments)),Nt)return ct=null,Nt+""||null}return wt.type=function(Nt){return arguments.length?(ze=typeof Nt=="function"?Nt:a(Nt),wt):ze},wt.size=function(Nt){return arguments.length?(tt=typeof Nt=="function"?Nt:a(+Nt),wt):tt},wt.context=function(Nt){return arguments.length?(ct=Nt??null,wt):ct},wt}function Ze(){}function Ke(ze,tt,ct){ze._context.bezierCurveTo((2*ze._x0+ze._x1)/3,(2*ze._y0+ze._y1)/3,(ze._x0+2*ze._x1)/3,(ze._y0+2*ze._y1)/3,(ze._x0+4*ze._x1+tt)/6,(ze._y0+4*ze._y1+ct)/6)}function vt(ze){this._context=ze}vt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ke(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1,this._line?this._context.lineTo(ze,tt):this._context.moveTo(ze,tt);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ke(this,ze,tt);break}this._x0=this._x1,this._x1=ze,this._y0=this._y1,this._y1=tt}};function xt(ze){return new vt(ze)}function Pt(ze){this._context=ze}Pt.prototype={areaStart:Ze,areaEnd:Ze,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1,this._x2=ze,this._y2=tt;break;case 1:this._point=2,this._x3=ze,this._y3=tt;break;case 2:this._point=3,this._x4=ze,this._y4=tt,this._context.moveTo((this._x0+4*this._x1+ze)/6,(this._y0+4*this._y1+tt)/6);break;default:Ke(this,ze,tt);break}this._x0=this._x1,this._x1=ze,this._y0=this._y1,this._y1=tt}};function mt(ze){return new Pt(ze)}function Mt(ze){this._context=ze}Mt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var ct=(this._x0+4*this._x1+ze)/6,wt=(this._y0+4*this._y1+tt)/6;this._line?this._context.lineTo(ct,wt):this._context.moveTo(ct,wt);break;case 3:this._point=4;default:Ke(this,ze,tt);break}this._x0=this._x1,this._x1=ze,this._y0=this._y1,this._y1=tt}};function lt(ze){return new Mt(ze)}function qe(ze,tt){this._basis=new vt(ze),this._beta=tt}qe.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var ze=this._x,tt=this._y,ct=ze.length-1;if(ct>0)for(var wt=ze[0],Nt=tt[0],It=ze[ct]-wt,Zt=tt[ct]-Nt,qt=-1,vr;++qt<=ct;)vr=qt/ct,this._basis.point(this._beta*ze[qt]+(1-this._beta)*(wt+vr*It),this._beta*tt[qt]+(1-this._beta)*(Nt+vr*Zt));this._x=this._y=null,this._basis.lineEnd()},point:function(ze,tt){this._x.push(+ze),this._y.push(+tt)}};var Ye=(function ze(tt){function ct(wt){return tt===1?new vt(wt):new qe(wt,tt)}return ct.beta=function(wt){return ze(+wt)},ct})(.85);function me(ze,tt,ct){ze._context.bezierCurveTo(ze._x1+ze._k*(ze._x2-ze._x0),ze._y1+ze._k*(ze._y2-ze._y0),ze._x2+ze._k*(ze._x1-tt),ze._y2+ze._k*(ze._y1-ct),ze._x2,ze._y2)}function _e(ze,tt){this._context=ze,this._k=(1-tt)/6}_e.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:me(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1,this._line?this._context.lineTo(ze,tt):this._context.moveTo(ze,tt);break;case 1:this._point=2,this._x1=ze,this._y1=tt;break;case 2:this._point=3;default:me(this,ze,tt);break}this._x0=this._x1,this._x1=this._x2,this._x2=ze,this._y0=this._y1,this._y1=this._y2,this._y2=tt}};var Ae=(function ze(tt){function ct(wt){return new _e(wt,tt)}return ct.tension=function(wt){return ze(+wt)},ct})(0);function ke(ze,tt){this._context=ze,this._k=(1-tt)/6}ke.prototype={areaStart:Ze,areaEnd:Ze,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1,this._x3=ze,this._y3=tt;break;case 1:this._point=2,this._context.moveTo(this._x4=ze,this._y4=tt);break;case 2:this._point=3,this._x5=ze,this._y5=tt;break;default:me(this,ze,tt);break}this._x0=this._x1,this._x1=this._x2,this._x2=ze,this._y0=this._y1,this._y1=this._y2,this._y2=tt}};var Ee=(function ze(tt){function ct(wt){return new ke(wt,tt)}return ct.tension=function(wt){return ze(+wt)},ct})(0);function De(ze,tt){this._context=ze,this._k=(1-tt)/6}De.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:me(this,ze,tt);break}this._x0=this._x1,this._x1=this._x2,this._x2=ze,this._y0=this._y1,this._y1=this._y2,this._y2=tt}};var Je=(function ze(tt){function ct(wt){return new De(wt,tt)}return ct.tension=function(wt){return ze(+wt)},ct})(0);function Ue(ze,tt,ct){var wt=ze._x1,Nt=ze._y1,It=ze._x2,Zt=ze._y2;if(ze._l01_a>h){var qt=2*ze._l01_2a+3*ze._l01_a*ze._l12_a+ze._l12_2a,vr=3*ze._l01_a*(ze._l01_a+ze._l12_a);wt=(wt*qt-ze._x0*ze._l12_2a+ze._x2*ze._l01_2a)/vr,Nt=(Nt*qt-ze._y0*ze._l12_2a+ze._y2*ze._l01_2a)/vr}if(ze._l23_a>h){var Br=2*ze._l23_2a+3*ze._l23_a*ze._l12_a+ze._l12_2a,Pr=3*ze._l23_a*(ze._l23_a+ze._l12_a);It=(It*Br+ze._x1*ze._l23_2a-tt*ze._l12_2a)/Pr,Zt=(Zt*Br+ze._y1*ze._l23_2a-ct*ze._l12_2a)/Pr}ze._context.bezierCurveTo(wt,Nt,It,Zt,ze._x2,ze._y2)}function at(ze,tt){this._context=ze,this._alpha=tt}at.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){if(ze=+ze,tt=+tt,this._point){var ct=this._x2-ze,wt=this._y2-tt;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(ct*ct+wt*wt,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(ze,tt):this._context.moveTo(ze,tt);break;case 1:this._point=2;break;case 2:this._point=3;default:Ue(this,ze,tt);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=ze,this._y0=this._y1,this._y1=this._y2,this._y2=tt}};var rt=(function ze(tt){function ct(wt){return tt?new at(wt,tt):new _e(wt,0)}return ct.alpha=function(wt){return ze(+wt)},ct})(.5);function ft(ze,tt){this._context=ze,this._alpha=tt}ft.prototype={areaStart:Ze,areaEnd:Ze,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(ze,tt){if(ze=+ze,tt=+tt,this._point){var ct=this._x2-ze,wt=this._y2-tt;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(ct*ct+wt*wt,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=ze,this._y3=tt;break;case 1:this._point=2,this._context.moveTo(this._x4=ze,this._y4=tt);break;case 2:this._point=3,this._x5=ze,this._y5=tt;break;default:Ue(this,ze,tt);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=ze,this._y0=this._y1,this._y1=this._y2,this._y2=tt}};var At=(function ze(tt){function ct(wt){return tt?new ft(wt,tt):new ke(wt,0)}return ct.alpha=function(wt){return ze(+wt)},ct})(.5);function ht(ze,tt){this._context=ze,this._alpha=tt}ht.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){if(ze=+ze,tt=+tt,this._point){var ct=this._x2-ze,wt=this._y2-tt;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(ct*ct+wt*wt,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ue(this,ze,tt);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=ze,this._y0=this._y1,this._y1=this._y2,this._y2=tt}};var Gt=(function ze(tt){function ct(wt){return tt?new ht(wt,tt):new De(wt,0)}return ct.alpha=function(wt){return ze(+wt)},ct})(.5);function fr(ze){this._context=ze}fr.prototype={areaStart:Ze,areaEnd:Ze,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(ze,tt){ze=+ze,tt=+tt,this._point?this._context.lineTo(ze,tt):(this._point=1,this._context.moveTo(ze,tt))}};function gt(ze){return new fr(ze)}function yt(ze){return ze<0?-1:1}function kt(ze,tt,ct){var wt=ze._x1-ze._x0,Nt=tt-ze._x1,It=(ze._y1-ze._y0)/(wt||Nt<0&&-0),Zt=(ct-ze._y1)/(Nt||wt<0&&-0),qt=(It*Nt+Zt*wt)/(wt+Nt);return(yt(It)+yt(Zt))*Math.min(Math.abs(It),Math.abs(Zt),.5*Math.abs(qt))||0}function Lt(ze,tt){var ct=ze._x1-ze._x0;return ct?(3*(ze._y1-ze._y0)/ct-tt)/2:tt}function Ct(ze,tt,ct){var wt=ze._x0,Nt=ze._y0,It=ze._x1,Zt=ze._y1,qt=(It-wt)/3;ze._context.bezierCurveTo(wt+qt,Nt+qt*tt,It-qt,Zt-qt*ct,It,Zt)}function $t(ze){this._context=ze}$t.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ct(this,this._t0,Lt(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(ze,tt){var ct=NaN;if(ze=+ze,tt=+tt,!(ze===this._x1&&tt===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(ze,tt):this._context.moveTo(ze,tt);break;case 1:this._point=2;break;case 2:this._point=3,Ct(this,Lt(this,ct=kt(this,ze,tt)),ct);break;default:Ct(this,this._t0,ct=kt(this,ze,tt));break}this._x0=this._x1,this._x1=ze,this._y0=this._y1,this._y1=tt,this._t0=ct}}};function mr(ze){this._context=new br(ze)}(mr.prototype=Object.create($t.prototype)).point=function(ze,tt){$t.prototype.point.call(this,tt,ze)};function br(ze){this._context=ze}br.prototype={moveTo:function(ze,tt){this._context.moveTo(tt,ze)},closePath:function(){this._context.closePath()},lineTo:function(ze,tt){this._context.lineTo(tt,ze)},bezierCurveTo:function(ze,tt,ct,wt,Nt,It){this._context.bezierCurveTo(tt,ze,wt,ct,It,Nt)}};function Er(ze){return new $t(ze)}function Tr(ze){return new mr(ze)}function Ur(ze){this._context=ze}Ur.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var ze=this._x,tt=this._y,ct=ze.length;if(ct)if(this._line?this._context.lineTo(ze[0],tt[0]):this._context.moveTo(ze[0],tt[0]),ct===2)this._context.lineTo(ze[1],tt[1]);else for(var wt=Ai(ze),Nt=Ai(tt),It=0,Zt=1;Zt<ct;++It,++Zt)this._context.bezierCurveTo(wt[0][It],Nt[0][It],wt[1][It],Nt[1][It],ze[Zt],tt[Zt]);(this._line||this._line!==0&&ct===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(ze,tt){this._x.push(+ze),this._y.push(+tt)}};function Ai(ze){var tt,ct=ze.length-1,wt,Nt=new Array(ct),It=new Array(ct),Zt=new Array(ct);for(Nt[0]=0,It[0]=2,Zt[0]=ze[0]+2*ze[1],tt=1;tt<ct-1;++tt)Nt[tt]=1,It[tt]=4,Zt[tt]=4*ze[tt]+2*ze[tt+1];for(Nt[ct-1]=2,It[ct-1]=7,Zt[ct-1]=8*ze[ct-1]+ze[ct],tt=1;tt<ct;++tt)wt=Nt[tt]/It[tt-1],It[tt]-=wt,Zt[tt]-=wt*Zt[tt-1];for(Nt[ct-1]=Zt[ct-1]/It[ct-1],tt=ct-2;tt>=0;--tt)Nt[tt]=(Zt[tt]-Nt[tt+1])/It[tt];for(It[ct-1]=(ze[ct]+Nt[ct-1])/2,tt=0;tt<ct-1;++tt)It[tt]=2*ze[tt+1]-Nt[tt+1];return[Nt,It]}function oi(ze){return new Ur(ze)}function Qr(ze,tt){this._context=ze,this._t=tt}Qr.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(ze,tt){switch(ze=+ze,tt=+tt,this._point){case 0:this._point=1,this._line?this._context.lineTo(ze,tt):this._context.moveTo(ze,tt);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,tt),this._context.lineTo(ze,tt);else{var ct=this._x*(1-this._t)+ze*this._t;this._context.lineTo(ct,this._y),this._context.lineTo(ct,tt)}break}}this._x=ze,this._y=tt}};function ea(ze){return new Qr(ze,.5)}function $i(ze){return new Qr(ze,0)}function ja(ze){return new Qr(ze,1)}function ya(ze,tt){if((Zt=ze.length)>1)for(var ct=1,wt,Nt,It=ze[tt[0]],Zt,qt=It.length;ct<Zt;++ct)for(Nt=It,It=ze[tt[ct]],wt=0;wt<qt;++wt)It[wt][1]+=It[wt][0]=isNaN(Nt[wt][1])?Nt[wt][0]:Nt[wt][1]}function pa(ze){for(var tt=ze.length,ct=new Array(tt);--tt>=0;)ct[tt]=tt;return ct}function xi(ze,tt){return ze[tt]}function bi(){var ze=a([]),tt=pa,ct=ya,wt=xi;function Nt(It){var Zt=ze.apply(this,arguments),qt,vr=It.length,Br=Zt.length,Pr=new Array(Br),Mi;for(qt=0;qt<Br;++qt){for(var gi=Zt[qt],ba=Pr[qt]=new Array(vr),Hi=0,Za;Hi<vr;++Hi)ba[Hi]=Za=[0,+wt(It[Hi],gi,Hi,It)],Za.data=It[Hi];ba.key=gi}for(qt=0,Mi=tt(Pr);qt<Br;++qt)Pr[Mi[qt]].index=qt;return ct(Pr,Mi),Pr}return Nt.keys=function(It){return arguments.length?(ze=typeof It=="function"?It:a(Z.call(It)),Nt):ze},Nt.value=function(It){return arguments.length?(wt=typeof It=="function"?It:a(+It),Nt):wt},Nt.order=function(It){return arguments.length?(tt=It==null?pa:typeof It=="function"?It:a(Z.call(It)),Nt):tt},Nt.offset=function(It){return arguments.length?(ct=It??ya,Nt):ct},Nt}function Ua(ze,tt){if((wt=ze.length)>0){for(var ct,wt,Nt=0,It=ze[0].length,Zt;Nt<It;++Nt){for(Zt=ct=0;ct<wt;++ct)Zt+=ze[ct][Nt][1]||0;if(Zt)for(ct=0;ct<wt;++ct)ze[ct][Nt][1]/=Zt}ya(ze,tt)}}function dn(ze,tt){if((vr=ze.length)>0)for(var ct,wt=0,Nt,It,Zt,qt,vr,Br=ze[tt[0]].length;wt<Br;++wt)for(Zt=qt=0,ct=0;ct<vr;++ct)(It=(Nt=ze[tt[ct]][wt])[1]-Nt[0])>0?(Nt[0]=Zt,Nt[1]=Zt+=It):It<0?(Nt[1]=qt,Nt[0]=qt+=It):(Nt[0]=0,Nt[1]=It)}function pi(ze,tt){if((Nt=ze.length)>0){for(var ct=0,wt=ze[tt[0]],Nt,It=wt.length;ct<It;++ct){for(var Zt=0,qt=0;Zt<Nt;++Zt)qt+=ze[Zt][ct][1]||0;wt[ct][1]+=wt[ct][0]=-qt/2}ya(ze,tt)}}function Jr(ze,tt){if(!(!((Zt=ze.length)>0)||!((It=(Nt=ze[tt[0]]).length)>0))){for(var ct=0,wt=1,Nt,It,Zt;wt<It;++wt){for(var qt=0,vr=0,Br=0;qt<Zt;++qt){for(var Pr=ze[tt[qt]],Mi=Pr[wt][1]||0,gi=Pr[wt-1][1]||0,ba=(Mi-gi)/2,Hi=0;Hi<qt;++Hi){var Za=ze[tt[Hi]],oa=Za[wt][1]||0,Cn=Za[wt-1][1]||0;ba+=oa-Cn}vr+=Mi,Br+=ba*Mi}Nt[wt-1][1]+=Nt[wt-1][0]=ct,vr&&(ct-=Br/vr)}Nt[wt-1][1]+=Nt[wt-1][0]=ct,ya(ze,tt)}}function Be(ze){var tt=ze.map(Fe);return pa(ze).sort(function(ct,wt){return tt[ct]-tt[wt]})}function Fe(ze){for(var tt=-1,ct=0,wt=ze.length,Nt,It=-1/0;++tt<wt;)(Nt=+ze[tt][1])>It&&(It=Nt,ct=tt);return ct}function Et(ze){var tt=ze.map(St);return pa(ze).sort(function(ct,wt){return tt[ct]-tt[wt]})}function St(ze){for(var tt=0,ct=-1,wt=ze.length,Nt;++ct<wt;)(Nt=+ze[ct][1])&&(tt+=Nt);return tt}function zt(ze){return Et(ze).reverse()}function Wt(ze){var tt=ze.length,ct,wt,Nt=ze.map(St),It=Be(ze),Zt=0,qt=0,vr=[],Br=[];for(ct=0;ct<tt;++ct)wt=It[ct],Zt<qt?(Zt+=Nt[wt],vr.push(wt)):(qt+=Nt[wt],Br.push(wt));return Br.reverse().concat(vr)}function Yt(ze){return pa(ze).reverse()}t.arc=k,t.area=D,t.areaRadial=W,t.curveBasis=xt,t.curveBasisClosed=mt,t.curveBasisOpen=lt,t.curveBundle=Ye,t.curveCardinal=Ae,t.curveCardinalClosed=Ee,t.curveCardinalOpen=Je,t.curveCatmullRom=rt,t.curveCatmullRomClosed=At,t.curveCatmullRomOpen=Gt,t.curveLinear=b,t.curveLinearClosed=gt,t.curveMonotoneX=Er,t.curveMonotoneY=Tr,t.curveNatural=oi,t.curveStep=ea,t.curveStepAfter=ja,t.curveStepBefore=$i,t.line=F,t.lineRadial=G,t.linkHorizontal=j,t.linkRadial=Y,t.linkVertical=q,t.pie=z,t.pointRadial=X,t.radialArea=W,t.radialLine=G,t.stack=bi,t.stackOffsetDiverging=dn,t.stackOffsetExpand=Ua,t.stackOffsetNone=ya,t.stackOffsetSilhouette=pi,t.stackOffsetWiggle=Jr,t.stackOrderAppearance=Be,t.stackOrderAscending=Et,t.stackOrderDescending=zt,t.stackOrderInsideOut=Wt,t.stackOrderNone=pa,t.stackOrderReverse=Yt,t.symbol=Ve,t.symbolCircle=K,t.symbolCross=te,t.symbolDiamond=le,t.symbolSquare=ae,t.symbolStar=fe,t.symbolTriangle=ie,t.symbolWye=Te,t.symbols=je,Object.defineProperty(t,"__esModule",{value:!0})})}}),ple=de({"node_modules/@plotly/d3-sankey/dist/@plotly/d3-sankey.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,hle(),q8()):(t=t||self,i(t.d3=t.d3||{},t.d3,t.d3))})(e,function(t,i,a){"use strict";function o(w){return w.target.depth}function s(w){return w.depth}function l(w,k){return k-1-w.height}function n(w,k){return w.sourceLinks.length?w.depth:k-1}function u(w){return w.targetLinks.length?w.depth:w.sourceLinks.length?i.min(w.sourceLinks,o)-1:0}function c(w){return function(){return w}}function f(w,k){return d(w.source,k.source)||w.index-k.index}function h(w,k){return d(w.target,k.target)||w.index-k.index}function d(w,k){return w.y0-k.y0}function p(w){return w.value}function g(w){return w.index}function m(w){return w.nodes}function y(w){return w.links}function _(w,k){let A=w.get(k);if(!A)throw new Error("missing: "+k);return A}function v({nodes:w}){for(let k of w){let A=k.y0,b=A;for(let E of k.sourceLinks)E.y0=A+E.width/2,A+=E.width;for(let E of k.targetLinks)E.y1=b+E.width/2,b+=E.width}}function x(){let w=0,k=0,A=1,b=1,E=24,T=8,F,D=g,R=n,P,z,I=m,L=y,B=6,O=2/3;function G(){let le={nodes:I.apply(null,arguments),links:L.apply(null,arguments)};return W(le),X(le),Z(le),J(le),$(le),v(le),le}G.update=function(le){return v(le),le},G.nodeId=function(le){return arguments.length?(D=typeof le=="function"?le:c(le),G):D},G.nodeAlign=function(le){return arguments.length?(R=typeof le=="function"?le:c(le),G):R},G.nodeSort=function(le){return arguments.length?(P=le,G):P},G.nodeWidth=function(le){return arguments.length?(E=+le,G):E},G.nodePadding=function(le){return arguments.length?(T=F=+le,G):T},G.nodes=function(le){return arguments.length?(I=typeof le=="function"?le:c(le),G):I},G.links=function(le){return arguments.length?(L=typeof le=="function"?le:c(le),G):L},G.linkSort=function(le){return arguments.length?(z=le,G):z},G.size=function(le){return arguments.length?(w=k=0,A=+le[0],b=+le[1],G):[A-w,b-k]},G.extent=function(le){return arguments.length?(w=+le[0][0],A=+le[1][0],k=+le[0][1],b=+le[1][1],G):[[w,k],[A,b]]},G.iterations=function(le){return arguments.length?(B=+le,G):B};function W({nodes:le,links:ce}){for(let[xe,ye]of le.entries())ye.index=xe,ye.sourceLinks=[],ye.targetLinks=[];let pe=new Map(le.map((xe,ye)=>[D(xe,ye,le),xe]));for(let[xe,ye]of ce.entries()){ye.index=xe;let{source:fe,target:ae}=ye;typeof fe!="object"&&(fe=ye.source=_(pe,fe)),typeof ae!="object"&&(ae=ye.target=_(pe,ae)),fe.sourceLinks.push(ye),ae.targetLinks.push(ye)}if(z!=null)for(let{sourceLinks:xe,targetLinks:ye}of le)xe.sort(z),ye.sort(z)}function X({nodes:le}){for(let ce of le)ce.value=ce.fixedValue===void 0?Math.max(i.sum(ce.sourceLinks,p),i.sum(ce.targetLinks,p)):ce.fixedValue}function Z({nodes:le}){let ce=le.length,pe=new Set(le),xe=new Set,ye=0;for(;pe.size;){for(let fe of pe){fe.depth=ye;for(let{target:ae}of fe.sourceLinks)xe.add(ae)}if(++ye>ce)throw new Error("circular link");pe=xe,xe=new Set}}function J({nodes:le}){let ce=le.length,pe=new Set(le),xe=new Set,ye=0;for(;pe.size;){for(let fe of pe){fe.height=ye;for(let{source:ae}of fe.targetLinks)xe.add(ae)}if(++ye>ce)throw new Error("circular link");pe=xe,xe=new Set}}function N({nodes:le}){let ce=i.max(le,ye=>ye.depth)+1,pe=(A-w-E)/(ce-1),xe=new Array(ce);for(let ye of le){let fe=Math.max(0,Math.min(ce-1,Math.floor(R.call(null,ye,ce))));ye.layer=fe,ye.x0=w+fe*pe,ye.x1=ye.x0+E,xe[fe]?xe[fe].push(ye):xe[fe]=[ye]}if(P)for(let ye of xe)ye.sort(P);return xe}function H(le){let ce=i.min(le,pe=>(b-k-(pe.length-1)*F)/i.sum(pe,p));for(let pe of le){let xe=k;for(let ye of pe){ye.y0=xe,ye.y1=xe+ye.value*ce,xe=ye.y1+F;for(let fe of ye.sourceLinks)fe.width=fe.value*ce}xe=(b-xe+F)/(pe.length+1);for(let ye=0;ye<pe.length;++ye){let fe=pe[ye];fe.y0+=xe*(ye+1),fe.y1+=xe*(ye+1)}te(pe)}}function $(le){let ce=N(le);F=Math.min(T,O*(b-k)/(i.max(ce,pe=>pe.length)-1)),H(ce);for(let pe=0;pe<B;++pe){let xe=Math.pow(.99,pe),ye=Math.max(1-xe,(pe+1)/B);V(ce,xe,ye),U(ce,xe,ye)}}function U(le,ce,pe){for(let xe=1,ye=le.length;xe<ye;++xe){let fe=le[xe];for(let ae of fe){let ee=0,ie=0;for(let{source:ue,value:ge}of ae.targetLinks){let Me=ge*(ae.layer-ue.layer);ee+=ne(ue,ae)*Me,ie+=Me}if(!(ie>0))continue;let Q=(ee/ie-ae.y0)*ce;ae.y0+=Q,ae.y1+=Q,K(ae)}P===void 0&&fe.sort(d),j(fe,pe)}}function V(le,ce,pe){for(let xe=le.length,ye=xe-2;ye>=0;--ye){let fe=le[ye];for(let ae of fe){let ee=0,ie=0;for(let{target:ue,value:ge}of ae.sourceLinks){let Me=ge*(ue.layer-ae.layer);ee+=se(ae,ue)*Me,ie+=Me}if(!(ie>0))continue;let Q=(ee/ie-ae.y0)*ce;ae.y0+=Q,ae.y1+=Q,K(ae)}P===void 0&&fe.sort(d),j(fe,pe)}}function j(le,ce){let pe=le.length>>1,xe=le[pe];Y(le,xe.y0-F,pe-1,ce),q(le,xe.y1+F,pe+1,ce),Y(le,b,le.length-1,ce),q(le,k,0,ce)}function q(le,ce,pe,xe){for(;pe<le.length;++pe){let ye=le[pe],fe=(ce-ye.y0)*xe;fe>1e-6&&(ye.y0+=fe,ye.y1+=fe),ce=ye.y1+F}}function Y(le,ce,pe,xe){for(;pe>=0;--pe){let ye=le[pe],fe=(ye.y1-ce)*xe;fe>1e-6&&(ye.y0-=fe,ye.y1-=fe),ce=ye.y0-F}}function K({sourceLinks:le,targetLinks:ce}){if(z===void 0){for(let{source:{sourceLinks:pe}}of ce)pe.sort(h);for(let{target:{targetLinks:pe}}of le)pe.sort(f)}}function te(le){if(z===void 0)for(let{sourceLinks:ce,targetLinks:pe}of le)ce.sort(h),pe.sort(f)}function ne(le,ce){let pe=le.y0-(le.sourceLinks.length-1)*F/2;for(let{target:xe,width:ye}of le.sourceLinks){if(xe===ce)break;pe+=ye+F}for(let{source:xe,width:ye}of ce.targetLinks){if(xe===le)break;pe-=ye}return pe}function se(le,ce){let pe=ce.y0-(ce.targetLinks.length-1)*F/2;for(let{source:xe,width:ye}of ce.targetLinks){if(xe===le)break;pe+=ye+F}for(let{target:xe,width:ye}of le.sourceLinks){if(xe===ce)break;pe-=ye}return pe}return G}function S(w){return[w.source.x1,w.y0]}function M(w){return[w.target.x0,w.y1]}function C(){return a.linkHorizontal().source(S).target(M)}t.sankey=x,t.sankeyCenter=u,t.sankeyJustify=n,t.sankeyLeft=s,t.sankeyLinkHorizontal=C,t.sankeyRight=l,Object.defineProperty(t,"__esModule",{value:!0})})}}),vle=de({"node_modules/@plotly/d3-sankey-circular/node_modules/d3-array/dist/d3-array.js"(e,r){(function(t,i){i(typeof e=="object"&&typeof r<"u"?e:t.d3=t.d3||{})})(e,(function(t){"use strict";function i($,U){return $<U?-1:$>U?1:$>=U?0:NaN}function a($){return $.length===1&&($=o($)),{left:function(U,V,j,q){for(j==null&&(j=0),q==null&&(q=U.length);j<q;){var Y=j+q>>>1;$(U[Y],V)<0?j=Y+1:q=Y}return j},right:function(U,V,j,q){for(j==null&&(j=0),q==null&&(q=U.length);j<q;){var Y=j+q>>>1;$(U[Y],V)>0?q=Y:j=Y+1}return j}}}function o($){return function(U,V){return i($(U),V)}}var s=a(i),l=s.right,n=s.left;function u($,U){U==null&&(U=c);for(var V=0,j=$.length-1,q=$[0],Y=new Array(j<0?0:j);V<j;)Y[V]=U(q,q=$[++V]);return Y}function c($,U){return[$,U]}function f($,U,V){var j=$.length,q=U.length,Y=new Array(j*q),K,te,ne,se;for(V==null&&(V=c),K=ne=0;K<j;++K)for(se=$[K],te=0;te<q;++te,++ne)Y[ne]=V(se,U[te]);return Y}function h($,U){return U<$?-1:U>$?1:U>=$?0:NaN}function d($){return $===null?NaN:+$}function p($,U){var V=$.length,j=0,q=-1,Y=0,K,te,ne=0;if(U==null)for(;++q<V;)isNaN(K=d($[q]))||(te=K-Y,Y+=te/++j,ne+=te*(K-Y));else for(;++q<V;)isNaN(K=d(U($[q],q,$)))||(te=K-Y,Y+=te/++j,ne+=te*(K-Y));if(j>1)return ne/(j-1)}function g($,U){var V=p($,U);return V&&Math.sqrt(V)}function m($,U){var V=$.length,j=-1,q,Y,K;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=K=q;++j<V;)(q=$[j])!=null&&(Y>q&&(Y=q),K<q&&(K=q))}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=K=q;++j<V;)(q=U($[j],j,$))!=null&&(Y>q&&(Y=q),K<q&&(K=q));return[Y,K]}var y=Array.prototype,_=y.slice,v=y.map;function x($){return function(){return $}}function S($){return $}function M($,U,V){$=+$,U=+U,V=(q=arguments.length)<2?(U=$,$=0,1):q<3?1:+V;for(var j=-1,q=Math.max(0,Math.ceil((U-$)/V))|0,Y=new Array(q);++j<q;)Y[j]=$+j*V;return Y}var C=Math.sqrt(50),w=Math.sqrt(10),k=Math.sqrt(2);function A($,U,V){var j,q=-1,Y,K,te;if(U=+U,$=+$,V=+V,$===U&&V>0)return[$];if((j=U<$)&&(Y=$,$=U,U=Y),(te=b($,U,V))===0||!isFinite(te))return[];if(te>0)for($=Math.ceil($/te),U=Math.floor(U/te),K=new Array(Y=Math.ceil(U-$+1));++q<Y;)K[q]=($+q)*te;else for($=Math.floor($*te),U=Math.ceil(U*te),K=new Array(Y=Math.ceil($-U+1));++q<Y;)K[q]=($-q)/te;return j&&K.reverse(),K}function b($,U,V){var j=(U-$)/Math.max(0,V),q=Math.floor(Math.log(j)/Math.LN10),Y=j/Math.pow(10,q);return q>=0?(Y>=C?10:Y>=w?5:Y>=k?2:1)*Math.pow(10,q):-Math.pow(10,-q)/(Y>=C?10:Y>=w?5:Y>=k?2:1)}function E($,U,V){var j=Math.abs(U-$)/Math.max(0,V),q=Math.pow(10,Math.floor(Math.log(j)/Math.LN10)),Y=j/q;return Y>=C?q*=10:Y>=w?q*=5:Y>=k&&(q*=2),U<$?-q:q}function T($){return Math.ceil(Math.log($.length)/Math.LN2)+1}function F(){var $=S,U=m,V=T;function j(q){var Y,K=q.length,te,ne=new Array(K);for(Y=0;Y<K;++Y)ne[Y]=$(q[Y],Y,q);var se=U(ne),le=se[0],ce=se[1],pe=V(ne,le,ce);Array.isArray(pe)||(pe=E(le,ce,pe),pe=M(Math.ceil(le/pe)*pe,ce,pe));for(var xe=pe.length;pe[0]<=le;)pe.shift(),--xe;for(;pe[xe-1]>ce;)pe.pop(),--xe;var ye=new Array(xe+1),fe;for(Y=0;Y<=xe;++Y)fe=ye[Y]=[],fe.x0=Y>0?pe[Y-1]:le,fe.x1=Y<xe?pe[Y]:ce;for(Y=0;Y<K;++Y)te=ne[Y],le<=te&&te<=ce&&ye[l(pe,te,0,xe)].push(q[Y]);return ye}return j.value=function(q){return arguments.length?($=typeof q=="function"?q:x(q),j):$},j.domain=function(q){return arguments.length?(U=typeof q=="function"?q:x([q[0],q[1]]),j):U},j.thresholds=function(q){return arguments.length?(V=typeof q=="function"?q:Array.isArray(q)?x(_.call(q)):x(q),j):V},j}function D($,U,V){if(V==null&&(V=d),!!(j=$.length)){if((U=+U)<=0||j<2)return+V($[0],0,$);if(U>=1)return+V($[j-1],j-1,$);var j,q=(j-1)*U,Y=Math.floor(q),K=+V($[Y],Y,$),te=+V($[Y+1],Y+1,$);return K+(te-K)*(q-Y)}}function R($,U,V){return $=v.call($,d).sort(i),Math.ceil((V-U)/(2*(D($,.75)-D($,.25))*Math.pow($.length,-1/3)))}function P($,U,V){return Math.ceil((V-U)/(3.5*g($)*Math.pow($.length,-1/3)))}function z($,U){var V=$.length,j=-1,q,Y;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=q;++j<V;)(q=$[j])!=null&&q>Y&&(Y=q)}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=q;++j<V;)(q=U($[j],j,$))!=null&&q>Y&&(Y=q);return Y}function I($,U){var V=$.length,j=V,q=-1,Y,K=0;if(U==null)for(;++q<V;)isNaN(Y=d($[q]))?--j:K+=Y;else for(;++q<V;)isNaN(Y=d(U($[q],q,$)))?--j:K+=Y;if(j)return K/j}function L($,U){var V=$.length,j=-1,q,Y=[];if(U==null)for(;++j<V;)isNaN(q=d($[j]))||Y.push(q);else for(;++j<V;)isNaN(q=d(U($[j],j,$)))||Y.push(q);return D(Y.sort(i),.5)}function B($){for(var U=$.length,V,j=-1,q=0,Y,K;++j<U;)q+=$[j].length;for(Y=new Array(q);--U>=0;)for(K=$[U],V=K.length;--V>=0;)Y[--q]=K[V];return Y}function O($,U){var V=$.length,j=-1,q,Y;if(U==null){for(;++j<V;)if((q=$[j])!=null&&q>=q)for(Y=q;++j<V;)(q=$[j])!=null&&Y>q&&(Y=q)}else for(;++j<V;)if((q=U($[j],j,$))!=null&&q>=q)for(Y=q;++j<V;)(q=U($[j],j,$))!=null&&Y>q&&(Y=q);return Y}function G($,U){for(var V=U.length,j=new Array(V);V--;)j[V]=$[U[V]];return j}function W($,U){if(V=$.length){var V,j=0,q=0,Y,K=$[q];for(U==null&&(U=i);++j<V;)(U(Y=$[j],K)<0||U(K,K)!==0)&&(K=Y,q=j);if(U(K,K)===0)return q}}function X($,U,V){for(var j=(V??$.length)-(U=U==null?0:+U),q,Y;j;)Y=Math.random()*j--|0,q=$[j+U],$[j+U]=$[Y+U],$[Y+U]=q;return $}function Z($,U){var V=$.length,j=-1,q,Y=0;if(U==null)for(;++j<V;)(q=+$[j])&&(Y+=q);else for(;++j<V;)(q=+U($[j],j,$))&&(Y+=q);return Y}function J($){if(!(Y=$.length))return[];for(var U=-1,V=O($,N),j=new Array(V);++U<V;)for(var q=-1,Y,K=j[U]=new Array(Y);++q<Y;)K[q]=$[q][U];return j}function N($){return $.length}function H(){return J(arguments)}t.bisect=l,t.bisectRight=l,t.bisectLeft=n,t.ascending=i,t.bisector=a,t.cross=f,t.descending=h,t.deviation=g,t.extent=m,t.histogram=F,t.thresholdFreedmanDiaconis=R,t.thresholdScott=P,t.thresholdSturges=T,t.max=z,t.mean=I,t.median=L,t.merge=B,t.min=O,t.pairs=u,t.permute=G,t.quantile=D,t.range=M,t.scan=W,t.shuffle=X,t.sum=Z,t.ticks=A,t.tickIncrement=b,t.tickStep=E,t.transpose=J,t.variance=p,t.zip=H,Object.defineProperty(t,"__esModule",{value:!0})}))}}),mle=de({"node_modules/elementary-circuits-directed-graph/johnson.js"(e,r){var t=j8();r.exports=function(a,o){var s=[],l=[],n=[],u={},c=[],f;function h(M){n[M]=!1,u.hasOwnProperty(M)&&Object.keys(u[M]).forEach(function(C){delete u[M][C],n[C]&&h(C)})}function d(M){var C=!1;l.push(M),n[M]=!0;var w,k;for(w=0;w<c[M].length;w++)k=c[M][w],k===f?(p(f,l),C=!0):n[k]||(C=d(k));if(C)h(M);else for(w=0;w<c[M].length;w++){k=c[M][w];var A=u[k];A||(A={},u[k]=A),A[k]=!0}return l.pop(),C}function p(M,C){var w=[].concat(C).concat(M);o?o(w):s.push(w)}function g(M){for(var C=0;C<a.length;C++)(C<M||!a[C])&&(a[C]=[]),a[C]=a[C].filter(function(w){return w>=M})}function m(M){g(M);for(var C=a,w=t(C),k=w.components.filter(function(R){return R.length>1}),A=1/0,b,E=0;E<k.length;E++)for(var T=0;T<k[E].length;T++)k[E][T]<A&&(A=k[E][T],b=E);var F=k[b];if(!F)return!1;var D=a.map(function(R,P){return F.indexOf(P)===-1?[]:R.filter(function(z){return F.indexOf(z)!==-1})});return{leastVertex:A,adjList:D}}f=0;for(var y=a.length;f<y;){var _=m(f);if(f=_.leastVertex,c=_.adjList,c){for(var v=0;v<c.length;v++)for(var x=0;x<c[v].length;x++){var S=c[v][x];n[+S]=!1,u[S]={}}d(f),f=f+1}else f=y}if(!o)return s}}}),gle=de({"node_modules/@plotly/d3-sankey-circular/dist/d3-sankey-circular.js"(e,r){(function(t,i){typeof e=="object"&&typeof r<"u"?i(e,vle(),U8(),q8(),mle()):i(t.d3=t.d3||{},t.d3,t.d3,t.d3,null)})(e,(function(t,i,a,o,s){"use strict";s=s&&s.hasOwnProperty("default")?s.default:s;function l(ce){return ce.target.depth}function n(ce){return ce.depth}function u(ce,pe){return pe-1-ce.height}function c(ce,pe){return ce.sourceLinks.length?ce.depth:pe-1}function f(ce){return ce.targetLinks.length?ce.depth:ce.sourceLinks.length?i.min(ce.sourceLinks,l)-1:0}function h(ce){return function(){return ce}}var d=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ce){return typeof ce}:function(ce){return ce&&typeof Symbol=="function"&&ce.constructor===Symbol&&ce!==Symbol.prototype?"symbol":typeof ce};function p(ce,pe){return m(ce.source,pe.source)||ce.index-pe.index}function g(ce,pe){return m(ce.target,pe.target)||ce.index-pe.index}function m(ce,pe){return ce.partOfCycle===pe.partOfCycle?ce.y0-pe.y0:ce.circularLinkType==="top"||pe.circularLinkType==="bottom"?-1:1}function y(ce){return ce.value}function _(ce){return(ce.y0+ce.y1)/2}function v(ce){return _(ce.source)}function x(ce){return _(ce.target)}function S(ce){return ce.index}function M(ce){return ce.nodes}function C(ce){return ce.links}function w(ce,pe){var xe=ce.get(pe);if(!xe)throw new Error("missing: "+pe);return xe}function k(ce,pe){return pe(ce)}var A=25,b=10,E=.3;function T(){var ce=0,pe=0,xe=1,ye=1,fe=24,ae,ee=S,ie=c,Q=M,ue=C,ge=32,Me=2,Te,je=null;function Ve(){var lt={nodes:Q.apply(null,arguments),links:ue.apply(null,arguments)};Ze(lt),F(lt,ee,je),Ke(lt),Pt(lt),D(lt,ee),mt(lt,ge,ee),Mt(lt);for(var qe=4,Ye=0;Ye<qe;Ye++)Y(lt,ye,ee),K(lt,ye,ee),V(lt,pe,ye,ee),Y(lt,ye,ee),K(lt,ye,ee);return le(lt,pe,ye),B(lt,Me,ye,ee),lt}Ve.nodeId=function(lt){return arguments.length?(ee=typeof lt=="function"?lt:h(lt),Ve):ee},Ve.nodeAlign=function(lt){return arguments.length?(ie=typeof lt=="function"?lt:h(lt),Ve):ie},Ve.nodeWidth=function(lt){return arguments.length?(fe=+lt,Ve):fe},Ve.nodePadding=function(lt){return arguments.length?(ae=+lt,Ve):ae},Ve.nodes=function(lt){return arguments.length?(Q=typeof lt=="function"?lt:h(lt),Ve):Q},Ve.links=function(lt){return arguments.length?(ue=typeof lt=="function"?lt:h(lt),Ve):ue},Ve.size=function(lt){return arguments.length?(ce=pe=0,xe=+lt[0],ye=+lt[1],Ve):[xe-ce,ye-pe]},Ve.extent=function(lt){return arguments.length?(ce=+lt[0][0],xe=+lt[1][0],pe=+lt[0][1],ye=+lt[1][1],Ve):[[ce,pe],[xe,ye]]},Ve.iterations=function(lt){return arguments.length?(ge=+lt,Ve):ge},Ve.circularLinkGap=function(lt){return arguments.length?(Me=+lt,Ve):Me},Ve.nodePaddingRatio=function(lt){return arguments.length?(Te=+lt,Ve):Te},Ve.sortNodes=function(lt){return arguments.length?(je=lt,Ve):je},Ve.update=function(lt){return D(lt,ee),Mt(lt),lt.links.forEach(function(qe){qe.circular&&(qe.circularLinkType=qe.y0+qe.y1<ye?"top":"bottom",qe.source.circularLinkType=qe.circularLinkType,qe.target.circularLinkType=qe.circularLinkType)}),Y(lt,ye,ee,!1),K(lt,ye,ee),B(lt,Me,ye,ee),lt};function Ze(lt){lt.nodes.forEach(function(Ye,me){Ye.index=me,Ye.sourceLinks=[],Ye.targetLinks=[]});var qe=a.map(lt.nodes,ee);return lt.links.forEach(function(Ye,me){Ye.index=me;var _e=Ye.source,Ae=Ye.target;(typeof _e>"u"?"undefined":d(_e))!=="object"&&(_e=Ye.source=w(qe,_e)),(typeof Ae>"u"?"undefined":d(Ae))!=="object"&&(Ae=Ye.target=w(qe,Ae)),_e.sourceLinks.push(Ye),Ae.targetLinks.push(Ye)}),lt}function Ke(lt){lt.nodes.forEach(function(qe){qe.partOfCycle=!1,qe.value=Math.max(i.sum(qe.sourceLinks,y),i.sum(qe.targetLinks,y)),qe.sourceLinks.forEach(function(Ye){Ye.circular&&(qe.partOfCycle=!0,qe.circularLinkType=Ye.circularLinkType)}),qe.targetLinks.forEach(function(Ye){Ye.circular&&(qe.partOfCycle=!0,qe.circularLinkType=Ye.circularLinkType)})})}function vt(lt){var qe=0,Ye=0,me=0,_e=0,Ae=i.max(lt.nodes,function(ke){return ke.column});return lt.links.forEach(function(ke){ke.circular&&(ke.circularLinkType=="top"?qe=qe+ke.width:Ye=Ye+ke.width,ke.target.column==0&&(_e=_e+ke.width),ke.source.column==Ae&&(me=me+ke.width))}),qe=qe>0?qe+A+b:qe,Ye=Ye>0?Ye+A+b:Ye,me=me>0?me+A+b:me,_e=_e>0?_e+A+b:_e,{top:qe,bottom:Ye,left:_e,right:me}}function xt(lt,qe){var Ye=i.max(lt.nodes,function(Je){return Je.column}),me=xe-ce,_e=ye-pe,Ae=me+qe.right+qe.left,ke=_e+qe.top+qe.bottom,Ee=me/Ae,De=_e/ke;return ce=ce*Ee+qe.left,xe=qe.right==0?xe:xe*Ee,pe=pe*De+qe.top,ye=ye*De,lt.nodes.forEach(function(Je){Je.x0=ce+Je.column*((xe-ce-fe)/Ye),Je.x1=Je.x0+fe}),De}function Pt(lt){var qe,Ye,me;for(qe=lt.nodes,Ye=[],me=0;qe.length;++me,qe=Ye,Ye=[])qe.forEach(function(_e){_e.depth=me,_e.sourceLinks.forEach(function(Ae){Ye.indexOf(Ae.target)<0&&!Ae.circular&&Ye.push(Ae.target)})});for(qe=lt.nodes,Ye=[],me=0;qe.length;++me,qe=Ye,Ye=[])qe.forEach(function(_e){_e.height=me,_e.targetLinks.forEach(function(Ae){Ye.indexOf(Ae.source)<0&&!Ae.circular&&Ye.push(Ae.source)})});lt.nodes.forEach(function(_e){_e.column=Math.floor(ie.call(null,_e,me))})}function mt(lt,qe,Ye){var me=a.nest().key(function(Je){return Je.column}).sortKeys(i.ascending).entries(lt.nodes).map(function(Je){return Je.values});ke(Ye),De();for(var _e=1,Ae=qe;Ae>0;--Ae)Ee(_e*=.99,Ye),De();function ke(Je){if(Te){var Ue=1/0;me.forEach(function(At){var ht=ye*Te/(At.length+1);Ue=ht<Ue?ht:Ue}),ae=Ue}var at=i.min(me,function(At){return(ye-pe-(At.length-1)*ae)/i.sum(At,y)});at=at*E,lt.links.forEach(function(At){At.width=At.value*at});var rt=vt(lt),ft=xt(lt,rt);at=at*ft,lt.links.forEach(function(At){At.width=At.value*at}),me.forEach(function(At){var ht=At.length;At.forEach(function(Gt,fr){Gt.depth==me.length-1&&ht==1||Gt.depth==0&&ht==1?(Gt.y0=ye/2-Gt.value*at,Gt.y1=Gt.y0+Gt.value*at):Gt.partOfCycle?z(Gt,Je)==0?(Gt.y0=ye/2+fr,Gt.y1=Gt.y0+Gt.value*at):Gt.circularLinkType=="top"?(Gt.y0=pe+fr,Gt.y1=Gt.y0+Gt.value*at):(Gt.y0=ye-Gt.value*at-fr,Gt.y1=Gt.y0+Gt.value*at):rt.top==0||rt.bottom==0?(Gt.y0=(ye-pe)/ht*fr,Gt.y1=Gt.y0+Gt.value*at):(Gt.y0=(ye-pe)/2-ht/2+fr,Gt.y1=Gt.y0+Gt.value*at)})})}function Ee(Je,Ue){var at=me.length;me.forEach(function(rt){var ft=rt.length,At=rt[0].depth;rt.forEach(function(ht){var Gt;if((ht.sourceLinks.length||ht.targetLinks.length)&&!(ht.partOfCycle&&z(ht,Ue)>0))if(At==0&&ft==1)Gt=ht.y1-ht.y0,ht.y0=ye/2-Gt/2,ht.y1=ye/2+Gt/2;else if(At==at-1&&ft==1)Gt=ht.y1-ht.y0,ht.y0=ye/2-Gt/2,ht.y1=ye/2+Gt/2;else{var fr=0,gt=i.mean(ht.sourceLinks,x),yt=i.mean(ht.targetLinks,v);gt&&yt?fr=(gt+yt)/2:fr=gt||yt;var kt=(fr-_(ht))*Je;ht.y0+=kt,ht.y1+=kt}})})}function De(){me.forEach(function(Je){var Ue,at,rt=pe,ft=Je.length,At;for(Je.sort(m),At=0;At<ft;++At)Ue=Je[At],at=rt-Ue.y0,at>0&&(Ue.y0+=at,Ue.y1+=at),rt=Ue.y1+ae;if(at=rt-ae-ye,at>0)for(rt=Ue.y0-=at,Ue.y1-=at,At=ft-2;At>=0;--At)Ue=Je[At],at=Ue.y1+ae-rt,at>0&&(Ue.y0-=at,Ue.y1-=at),rt=Ue.y0})}}function Mt(lt){lt.nodes.forEach(function(qe){qe.sourceLinks.sort(g),qe.targetLinks.sort(p)}),lt.nodes.forEach(function(qe){var Ye=qe.y0,me=Ye,_e=qe.y1,Ae=_e;qe.sourceLinks.forEach(function(ke){ke.circular?(ke.y0=_e-ke.width/2,_e=_e-ke.width):(ke.y0=Ye+ke.width/2,Ye+=ke.width)}),qe.targetLinks.forEach(function(ke){ke.circular?(ke.y1=Ae-ke.width/2,Ae=Ae-ke.width):(ke.y1=me+ke.width/2,me+=ke.width)})})}return Ve}function F(ce,pe,xe){var ye=0;if(xe===null){for(var fe=[],ae=0;ae<ce.links.length;ae++){var ee=ce.links[ae],ie=ee.source.index,Q=ee.target.index;fe[ie]||(fe[ie]=[]),fe[Q]||(fe[Q]=[]),fe[ie].indexOf(Q)===-1&&fe[ie].push(Q)}var ue=s(fe);ue.sort(function(je,Ve){return je.length-Ve.length});var ge={};for(ae=0;ae<ue.length;ae++){var Me=ue[ae],Te=Me.slice(-2);ge[Te[0]]||(ge[Te[0]]={}),ge[Te[0]][Te[1]]=!0}ce.links.forEach(function(je){var Ve=je.target.index,Ze=je.source.index;Ve===Ze||ge[Ze]&&ge[Ze][Ve]?(je.circular=!0,je.circularLinkID=ye,ye=ye+1):je.circular=!1})}else ce.links.forEach(function(je){je.source[xe]<je.target[xe]?je.circular=!1:(je.circular=!0,je.circularLinkID=ye,ye=ye+1)})}function D(ce,pe){var xe=0,ye=0;ce.links.forEach(function(fe){fe.circular&&(fe.source.circularLinkType||fe.target.circularLinkType?fe.circularLinkType=fe.source.circularLinkType?fe.source.circularLinkType:fe.target.circularLinkType:fe.circularLinkType=xe<ye?"top":"bottom",fe.circularLinkType=="top"?xe=xe+1:ye=ye+1,ce.nodes.forEach(function(ae){(k(ae,pe)==k(fe.source,pe)||k(ae,pe)==k(fe.target,pe))&&(ae.circularLinkType=fe.circularLinkType)}))}),ce.links.forEach(function(fe){fe.circular&&(fe.source.circularLinkType==fe.target.circularLinkType&&(fe.circularLinkType=fe.source.circularLinkType),se(fe,pe)&&(fe.circularLinkType=fe.source.circularLinkType))})}function R(ce){var pe=Math.abs(ce.y1-ce.y0),xe=Math.abs(ce.target.x0-ce.source.x1);return Math.atan(xe/pe)}function P(ce,pe){return ce.source.column<pe.target.column?!1:!(ce.target.column>pe.source.column)}function z(ce,pe){var xe=0;ce.sourceLinks.forEach(function(fe){xe=fe.circular&&!se(fe,pe)?xe+1:xe});var ye=0;return ce.targetLinks.forEach(function(fe){ye=fe.circular&&!se(fe,pe)?ye+1:ye}),xe+ye}function I(ce){var pe=ce.source.sourceLinks,xe=0;pe.forEach(function(ae){xe=ae.circular?xe+1:xe});var ye=ce.target.targetLinks,fe=0;return ye.forEach(function(ae){fe=ae.circular?fe+1:fe}),!(xe>1||fe>1)}function L(ce,pe,xe){return ce.sort(G),ce.forEach(function(ye,fe){var ae=0;if(se(ye,xe)&&I(ye))ye.circularPathData.verticalBuffer=ae+ye.width/2;else{var ee=0;for(ee;ee<fe;ee++)if(P(ce[fe],ce[ee])){var ie=ce[ee].circularPathData.verticalBuffer+ce[ee].width/2+pe;ae=ie>ae?ie:ae}ye.circularPathData.verticalBuffer=ae+ye.width/2}}),ce}function B(ce,pe,xe,ye){var fe=5,ae=i.min(ce.links,function(Q){return Q.source.y0});ce.links.forEach(function(Q){Q.circular&&(Q.circularPathData={})});var ee=ce.links.filter(function(Q){return Q.circularLinkType=="top"});L(ee,pe,ye);var ie=ce.links.filter(function(Q){return Q.circularLinkType=="bottom"});L(ie,pe,ye),ce.links.forEach(function(Q){if(Q.circular){if(Q.circularPathData.arcRadius=Q.width+b,Q.circularPathData.leftNodeBuffer=fe,Q.circularPathData.rightNodeBuffer=fe,Q.circularPathData.sourceWidth=Q.source.x1-Q.source.x0,Q.circularPathData.sourceX=Q.source.x0+Q.circularPathData.sourceWidth,Q.circularPathData.targetX=Q.target.x0,Q.circularPathData.sourceY=Q.y0,Q.circularPathData.targetY=Q.y1,se(Q,ye)&&I(Q))Q.circularPathData.leftSmallArcRadius=b+Q.width/2,Q.circularPathData.leftLargeArcRadius=b+Q.width/2,Q.circularPathData.rightSmallArcRadius=b+Q.width/2,Q.circularPathData.rightLargeArcRadius=b+Q.width/2,Q.circularLinkType=="bottom"?(Q.circularPathData.verticalFullExtent=Q.source.y1+A+Q.circularPathData.verticalBuffer,Q.circularPathData.verticalLeftInnerExtent=Q.circularPathData.verticalFullExtent-Q.circularPathData.leftLargeArcRadius,Q.circularPathData.verticalRightInnerExtent=Q.circularPathData.verticalFullExtent-Q.circularPathData.rightLargeArcRadius):(Q.circularPathData.verticalFullExtent=Q.source.y0-A-Q.circularPathData.verticalBuffer,Q.circularPathData.verticalLeftInnerExtent=Q.circularPathData.verticalFullExtent+Q.circularPathData.leftLargeArcRadius,Q.circularPathData.verticalRightInnerExtent=Q.circularPathData.verticalFullExtent+Q.circularPathData.rightLargeArcRadius);else{var ue=Q.source.column,ge=Q.circularLinkType,Me=ce.links.filter(function(Ve){return Ve.source.column==ue&&Ve.circularLinkType==ge});Q.circularLinkType=="bottom"?Me.sort(X):Me.sort(W);var Te=0;Me.forEach(function(Ve,Ze){Ve.circularLinkID==Q.circularLinkID&&(Q.circularPathData.leftSmallArcRadius=b+Q.width/2+Te,Q.circularPathData.leftLargeArcRadius=b+Q.width/2+Ze*pe+Te),Te=Te+Ve.width}),ue=Q.target.column,Me=ce.links.filter(function(Ve){return Ve.target.column==ue&&Ve.circularLinkType==ge}),Q.circularLinkType=="bottom"?Me.sort(J):Me.sort(Z),Te=0,Me.forEach(function(Ve,Ze){Ve.circularLinkID==Q.circularLinkID&&(Q.circularPathData.rightSmallArcRadius=b+Q.width/2+Te,Q.circularPathData.rightLargeArcRadius=b+Q.width/2+Ze*pe+Te),Te=Te+Ve.width}),Q.circularLinkType=="bottom"?(Q.circularPathData.verticalFullExtent=Math.max(xe,Q.source.y1,Q.target.y1)+A+Q.circularPathData.verticalBuffer,Q.circularPathData.verticalLeftInnerExtent=Q.circularPathData.verticalFullExtent-Q.circularPathData.leftLargeArcRadius,Q.circularPathData.verticalRightInnerExtent=Q.circularPathData.verticalFullExtent-Q.circularPathData.rightLargeArcRadius):(Q.circularPathData.verticalFullExtent=ae-A-Q.circularPathData.verticalBuffer,Q.circularPathData.verticalLeftInnerExtent=Q.circularPathData.verticalFullExtent+Q.circularPathData.leftLargeArcRadius,Q.circularPathData.verticalRightInnerExtent=Q.circularPathData.verticalFullExtent+Q.circularPathData.rightLargeArcRadius)}Q.circularPathData.leftInnerExtent=Q.circularPathData.sourceX+Q.circularPathData.leftNodeBuffer,Q.circularPathData.rightInnerExtent=Q.circularPathData.targetX-Q.circularPathData.rightNodeBuffer,Q.circularPathData.leftFullExtent=Q.circularPathData.sourceX+Q.circularPathData.leftLargeArcRadius+Q.circularPathData.leftNodeBuffer,Q.circularPathData.rightFullExtent=Q.circularPathData.targetX-Q.circularPathData.rightLargeArcRadius-Q.circularPathData.rightNodeBuffer}if(Q.circular)Q.path=O(Q);else{var je=o.linkHorizontal().source(function(Ve){var Ze=Ve.source.x0+(Ve.source.x1-Ve.source.x0),Ke=Ve.y0;return[Ze,Ke]}).target(function(Ve){var Ze=Ve.target.x0,Ke=Ve.y1;return[Ze,Ke]});Q.path=je(Q)}})}function O(ce){var pe="";return ce.circularLinkType=="top"?pe="M"+ce.circularPathData.sourceX+" "+ce.circularPathData.sourceY+" L"+ce.circularPathData.leftInnerExtent+" "+ce.circularPathData.sourceY+" A"+ce.circularPathData.leftLargeArcRadius+" "+ce.circularPathData.leftSmallArcRadius+" 0 0 0 "+ce.circularPathData.leftFullExtent+" "+(ce.circularPathData.sourceY-ce.circularPathData.leftSmallArcRadius)+" L"+ce.circularPathData.leftFullExtent+" "+ce.circularPathData.verticalLeftInnerExtent+" A"+ce.circularPathData.leftLargeArcRadius+" "+ce.circularPathData.leftLargeArcRadius+" 0 0 0 "+ce.circularPathData.leftInnerExtent+" "+ce.circularPathData.verticalFullExtent+" L"+ce.circularPathData.rightInnerExtent+" "+ce.circularPathData.verticalFullExtent+" A"+ce.circularPathData.rightLargeArcRadius+" "+ce.circularPathData.rightLargeArcRadius+" 0 0 0 "+ce.circularPathData.rightFullExtent+" "+ce.circularPathData.verticalRightInnerExtent+" L"+ce.circularPathData.rightFullExtent+" "+(ce.circularPathData.targetY-ce.circularPathData.rightSmallArcRadius)+" A"+ce.circularPathData.rightLargeArcRadius+" "+ce.circularPathData.rightSmallArcRadius+" 0 0 0 "+ce.circularPathData.rightInnerExtent+" "+ce.circularPathData.targetY+" L"+ce.circularPathData.targetX+" "+ce.circularPathData.targetY:pe="M"+ce.circularPathData.sourceX+" "+ce.circularPathData.sourceY+" L"+ce.circularPathData.leftInnerExtent+" "+ce.circularPathData.sourceY+" A"+ce.circularPathData.leftLargeArcRadius+" "+ce.circularPathData.leftSmallArcRadius+" 0 0 1 "+ce.circularPathData.leftFullExtent+" "+(ce.circularPathData.sourceY+ce.circularPathData.leftSmallArcRadius)+" L"+ce.circularPathData.leftFullExtent+" "+ce.circularPathData.verticalLeftInnerExtent+" A"+ce.circularPathData.leftLargeArcRadius+" "+ce.circularPathData.leftLargeArcRadius+" 0 0 1 "+ce.circularPathData.leftInnerExtent+" "+ce.circularPathData.verticalFullExtent+" L"+ce.circularPathData.rightInnerExtent+" "+ce.circularPathData.verticalFullExtent+" A"+ce.circularPathData.rightLargeArcRadius+" "+ce.circularPathData.rightLargeArcRadius+" 0 0 1 "+ce.circularPathData.rightFullExtent+" "+ce.circularPathData.verticalRightInnerExtent+" L"+ce.circularPathData.rightFullExtent+" "+(ce.circularPathData.targetY+ce.circularPathData.rightSmallArcRadius)+" A"+ce.circularPathData.rightLargeArcRadius+" "+ce.circularPathData.rightSmallArcRadius+" 0 0 1 "+ce.circularPathData.rightInnerExtent+" "+ce.circularPathData.targetY+" L"+ce.circularPathData.targetX+" "+ce.circularPathData.targetY,pe}function G(ce,pe){return N(ce)==N(pe)?ce.circularLinkType=="bottom"?X(ce,pe):W(ce,pe):N(pe)-N(ce)}function W(ce,pe){return ce.y0-pe.y0}function X(ce,pe){return pe.y0-ce.y0}function Z(ce,pe){return ce.y1-pe.y1}function J(ce,pe){return pe.y1-ce.y1}function N(ce){return ce.target.column-ce.source.column}function H(ce){return ce.target.x0-ce.source.x1}function $(ce,pe){var xe=R(ce),ye=H(pe)/Math.tan(xe),fe=ne(ce)=="up"?ce.y1+ye:ce.y1-ye;return fe}function U(ce,pe){var xe=R(ce),ye=H(pe)/Math.tan(xe),fe=ne(ce)=="up"?ce.y1-ye:ce.y1+ye;return fe}function V(ce,pe,xe,ye){ce.links.forEach(function(fe){if(!fe.circular&&fe.target.column-fe.source.column>1){var ae=fe.source.column+1,ee=fe.target.column-1,ie=1,Q=ee-ae+1;for(ie=1;ae<=ee;ae++,ie++)ce.nodes.forEach(function(ue){if(ue.column==ae){var ge=ie/(Q+1),Me=Math.pow(1-ge,3),Te=3*ge*Math.pow(1-ge,2),je=3*Math.pow(ge,2)*(1-ge),Ve=Math.pow(ge,3),Ze=Me*fe.y0+Te*fe.y0+je*fe.y1+Ve*fe.y1,Ke=Ze-fe.width/2,vt=Ze+fe.width/2,xt;Ke>ue.y0&&Ke<ue.y1?(xt=ue.y1-Ke+10,xt=ue.circularLinkType=="bottom"?xt:-xt,ue=q(ue,xt,pe,xe),ce.nodes.forEach(function(Pt){k(Pt,ye)==k(ue,ye)||Pt.column!=ue.column||j(ue,Pt)&&q(Pt,xt,pe,xe)})):vt>ue.y0&&vt<ue.y1?(xt=vt-ue.y0+10,ue=q(ue,xt,pe,xe),ce.nodes.forEach(function(Pt){k(Pt,ye)==k(ue,ye)||Pt.column!=ue.column||Pt.y0<ue.y1&&Pt.y1>ue.y1&&q(Pt,xt,pe,xe)})):Ke<ue.y0&&vt>ue.y1&&(xt=vt-ue.y0+10,ue=q(ue,xt,pe,xe),ce.nodes.forEach(function(Pt){k(Pt,ye)==k(ue,ye)||Pt.column!=ue.column||Pt.y0<ue.y1&&Pt.y1>ue.y1&&q(Pt,xt,pe,xe)}))}})}})}function j(ce,pe){return ce.y0>pe.y0&&ce.y0<pe.y1||ce.y1>pe.y0&&ce.y1<pe.y1?!0:ce.y0<pe.y0&&ce.y1>pe.y1}function q(ce,pe,xe,ye){return ce.y0+pe>=xe&&ce.y1+pe<=ye&&(ce.y0=ce.y0+pe,ce.y1=ce.y1+pe,ce.targetLinks.forEach(function(fe){fe.y1=fe.y1+pe}),ce.sourceLinks.forEach(function(fe){fe.y0=fe.y0+pe})),ce}function Y(ce,pe,xe,ye){ce.nodes.forEach(function(fe){ye&&fe.y+(fe.y1-fe.y0)>pe&&(fe.y=fe.y-(fe.y+(fe.y1-fe.y0)-pe));var ae=ce.links.filter(function(Q){return k(Q.source,xe)==k(fe,xe)}),ee=ae.length;ee>1&&ae.sort(function(Q,ue){if(!Q.circular&&!ue.circular){if(Q.target.column==ue.target.column)return Q.y1-ue.y1;if(te(Q,ue)){if(Q.target.column>ue.target.column){var ge=U(ue,Q);return Q.y1-ge}if(ue.target.column>Q.target.column){var Me=U(Q,ue);return Me-ue.y1}}else return Q.y1-ue.y1}if(Q.circular&&!ue.circular)return Q.circularLinkType=="top"?-1:1;if(ue.circular&&!Q.circular)return ue.circularLinkType=="top"?1:-1;if(Q.circular&&ue.circular)return Q.circularLinkType===ue.circularLinkType&&Q.circularLinkType=="top"?Q.target.column===ue.target.column?Q.target.y1-ue.target.y1:ue.target.column-Q.target.column:Q.circularLinkType===ue.circularLinkType&&Q.circularLinkType=="bottom"?Q.target.column===ue.target.column?ue.target.y1-Q.target.y1:Q.target.column-ue.target.column:Q.circularLinkType=="top"?-1:1});var ie=fe.y0;ae.forEach(function(Q){Q.y0=ie+Q.width/2,ie=ie+Q.width}),ae.forEach(function(Q,ue){if(Q.circularLinkType=="bottom"){var ge=ue+1,Me=0;for(ge;ge<ee;ge++)Me=Me+ae[ge].width;Q.y0=fe.y1-Me-Q.width/2}})})}function K(ce,pe,xe){ce.nodes.forEach(function(ye){var fe=ce.links.filter(function(ie){return k(ie.target,xe)==k(ye,xe)}),ae=fe.length;ae>1&&fe.sort(function(ie,Q){if(!ie.circular&&!Q.circular){if(ie.source.column==Q.source.column)return ie.y0-Q.y0;if(te(ie,Q)){if(Q.source.column<ie.source.column){var ue=$(Q,ie);return ie.y0-ue}if(ie.source.column<Q.source.column){var ge=$(ie,Q);return ge-Q.y0}}else return ie.y0-Q.y0}if(ie.circular&&!Q.circular)return ie.circularLinkType=="top"?-1:1;if(Q.circular&&!ie.circular)return Q.circularLinkType=="top"?1:-1;if(ie.circular&&Q.circular)return ie.circularLinkType===Q.circularLinkType&&ie.circularLinkType=="top"?ie.source.column===Q.source.column?ie.source.y1-Q.source.y1:ie.source.column-Q.source.column:ie.circularLinkType===Q.circularLinkType&&ie.circularLinkType=="bottom"?ie.source.column===Q.source.column?ie.source.y1-Q.source.y1:Q.source.column-ie.source.column:ie.circularLinkType=="top"?-1:1});var ee=ye.y0;fe.forEach(function(ie){ie.y1=ee+ie.width/2,ee=ee+ie.width}),fe.forEach(function(ie,Q){if(ie.circularLinkType=="bottom"){var ue=Q+1,ge=0;for(ue;ue<ae;ue++)ge=ge+fe[ue].width;ie.y1=ye.y1-ge-ie.width/2}})})}function te(ce,pe){return ne(ce)==ne(pe)}function ne(ce){return ce.y0-ce.y1>0?"up":"down"}function se(ce,pe){return k(ce.source,pe)==k(ce.target,pe)}function le(ce,pe,xe){var ye=ce.nodes,fe=ce.links,ae=!1,ee=!1;if(fe.forEach(function(Te){Te.circularLinkType=="top"?ae=!0:Te.circularLinkType=="bottom"&&(ee=!0)}),ae==!1||ee==!1){var ie=i.min(ye,function(Te){return Te.y0}),Q=i.max(ye,function(Te){return Te.y1}),ue=Q-ie,ge=xe-pe,Me=ge/ue;ye.forEach(function(Te){var je=(Te.y1-Te.y0)*Me;Te.y0=(Te.y0-ie)*Me,Te.y1=Te.y0+je}),fe.forEach(function(Te){Te.y0=(Te.y0-ie)*Me,Te.y1=(Te.y1-ie)*Me,Te.width=Te.width*Me})}}t.sankeyCircular=T,t.sankeyCenter=f,t.sankeyLeft=n,t.sankeyRight=u,t.sankeyJustify=c,Object.defineProperty(t,"__esModule",{value:!0})}))}}),V8=de({"src/traces/sankey/constants.js"(e,r){"use strict";r.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:"linear",cn:{sankey:"sankey",sankeyLinks:"sankey-links",sankeyLink:"sankey-link",sankeyNodeSet:"sankey-node-set",sankeyNode:"sankey-node",nodeRect:"node-rect",nodeLabel:"node-label"}}}}),yle=de({"src/traces/sankey/render.js"(e,r){"use strict";var t=fle(),i=(jv(),ti(M0)).interpolateNumber,a=Yr(),o=ple(),s=gle(),l=V8(),n=ta(),u=hn(),c=Qt(),f=c.strTranslate,h=c.strRotate,d=ip(),p=d.keyFun,g=d.repeat,m=d.unwrap,y=Zo(),_=Ma(),v=Bl(),x=v.CAP_SHIFT,S=v.LINE_SPACING,M=3;function C(H,$,U){var V=m($),j=V.trace,q=j.domain,Y=j.orientation==="h",K=j.direction==="reversed",te=j.node.pad,ne=j.node.thickness,se={justify:o.sankeyJustify,left:o.sankeyLeft,right:o.sankeyRight,center:o.sankeyCenter}[j.node.align],le=H.width*(q.x[1]-q.x[0]),ce=H.height*(q.y[1]-q.y[0]),pe=V._nodes,xe=V._links,ye=V.circular,fe;ye?fe=s.sankeyCircular().circularLinkGap(0):fe=o.sankey(),fe.iterations(l.sankeyIterations).size(Y?[le,ce]:[ce,le]).nodeWidth(ne).nodePadding(te).nodeId(function(mt){return mt.pointNumber}).nodeAlign(se).nodes(pe).links(xe);function ae(mt){j[mt].sort==="input"&&(ye?c.warn(`Circular Sankey diagrams do not support the "input" ${mt}.sort mode; falling back to the default sort.`):fe[`${mt}Sort`](null))}ae("link"),ae("node");var ee=fe();fe.nodePadding()<te&&c.warn("node.pad was reduced to ",fe.nodePadding()," to fit within the figure.");var ie,Q,ue;for(var ge in V._groupLookup){var Me=parseInt(V._groupLookup[ge]),Te;for(ie=0;ie<ee.nodes.length;ie++)if(ee.nodes[ie].pointNumber===Me){Te=ee.nodes[ie];break}if(Te){var je={pointNumber:parseInt(ge),x0:Te.x0,x1:Te.x1,y0:Te.y0,y1:Te.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};ee.nodes.unshift(je),Te.childrenNodes.unshift(je)}}function Ve(){for(ie=0;ie<ee.nodes.length;ie++){var mt=ee.nodes[ie],Mt={},lt,qe;for(Q=0;Q<mt.targetLinks.length;Q++)qe=mt.targetLinks[Q],lt=qe.source.pointNumber+":"+qe.target.pointNumber,Mt.hasOwnProperty(lt)||(Mt[lt]=[]),Mt[lt].push(qe);var Ye=Object.keys(Mt);for(Q=0;Q<Ye.length;Q++){lt=Ye[Q];var me=Mt[lt],_e=0,Ae={};for(ue=0;ue<me.length;ue++)qe=me[ue],Ae[qe.label]||(Ae[qe.label]=0),Ae[qe.label]+=qe.value,_e+=qe.value;for(ue=0;ue<me.length;ue++)qe=me[ue],qe.flow={value:_e,labelConcentration:Ae[qe.label]/_e,concentration:qe.value/_e,links:me},qe.concentrationscale&&(qe.color=qe.concentrationscale(qe.flow.labelConcentration))}var ke=0;for(Q=0;Q<mt.sourceLinks.length;Q++)ke+=mt.sourceLinks[Q].value;for(Q=0;Q<mt.sourceLinks.length;Q++)qe=mt.sourceLinks[Q],qe.concentrationOut=qe.value/ke;var Ee=0;for(Q=0;Q<mt.targetLinks.length;Q++)Ee+=mt.targetLinks[Q].value;for(Q=0;Q<mt.targetLinks.length;Q++)qe=mt.targetLinks[Q],qe.concenrationIn=qe.value/Ee}}Ve();function Ze(mt){mt.forEach(function(Mt){var lt,qe,Ye=0,me=Mt.length,_e;for(Mt.sort(function(Ae,ke){return Ae.y0-ke.y0}),_e=0;_e<me;++_e)lt=Mt[_e],lt.y0>=Ye||(qe=Ye-lt.y0,qe>1e-6&&(lt.y0+=qe,lt.y1+=qe)),Ye=lt.y1+te})}function Ke(mt){var Mt=mt.map(function(ke,Ee){return{x0:ke.x0,index:Ee}}).sort(function(ke,Ee){return ke.x0-Ee.x0}),lt=[],qe=-1,Ye,me=-1/0,_e;for(ie=0;ie<Mt.length;ie++){var Ae=mt[Mt[ie].index];Ae.x0>me+ne&&(qe+=1,Ye=Ae.x0),me=Ae.x0,lt[qe]||(lt[qe]=[]),lt[qe].push(Ae),_e=Ye-Ae.x0,Ae.x0+=_e,Ae.x1+=_e}return lt}if(j.node.x.length&&j.node.y.length){for(ie=0;ie<Math.min(j.node.x.length,j.node.y.length,ee.nodes.length);ie++)if(j.node.x[ie]&&j.node.y[ie]){var vt=[j.node.x[ie]*le,j.node.y[ie]*ce];ee.nodes[ie].x0=vt[0]-ne/2,ee.nodes[ie].x1=vt[0]+ne/2;var xt=ee.nodes[ie].y1-ee.nodes[ie].y0;ee.nodes[ie].y0=vt[1]-xt/2,ee.nodes[ie].y1=vt[1]+xt/2}if(j.arrangement==="snap"){pe=ee.nodes;var Pt=Ke(pe);Ze(Pt)}fe.update(ee)}return{circular:ye,key:U,trace:j,guid:c.randstr(),horizontal:Y,reversed:K,width:le,height:ce,nodePad:j.node.pad,nodeLineColor:j.node.line.color,nodeLineWidth:j.node.line.width,linkLineColor:j.link.line.color,linkLineWidth:j.link.line.width,linkArrowLength:j.link.arrowlen,valueFormat:j.valueformat,valueSuffix:j.valuesuffix,textFont:j.textfont,translateX:q.x[0]*H.width+H.margin.l,translateY:H.height-q.y[1]*H.height+H.margin.t,dragParallel:Y?ce:le,dragPerpendicular:Y?le:ce,arrangement:j.arrangement,sankey:fe,graph:ee,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function w(H,$,U){var V=$.source.label+"|"+$.target.label,j=V+"__"+U;return $.trace=H.trace,$.curveNumber=H.trace.index,{circular:H.circular,key:j,traceId:H.key,pointNumber:$.pointNumber,link:$,rgb:n.rgb($.color),alpha:n.parse($.color).alpha,hoverRgb:n.rgb($.hovercolor),hoverAlpha:n.parse($.hovercolor).alpha,linkPath:A,linkLineColor:H.linkLineColor,linkLineWidth:H.linkLineWidth,linkArrowLength:H.linkArrowLength,valueFormat:H.valueFormat,valueSuffix:H.valueSuffix,sankey:H.sankey,parent:H,interactionState:H.interactionState,flow:$.flow}}function k(H,$){var U="",V=H.width/2,j=H.circularPathData,q=j.sourceX+j.verticalBuffer<j.targetX,Y=j.rightFullExtent-j.rightLargeArcRadius-$<=j.leftFullExtent-V,K=Math.abs(j.rightFullExtent-j.leftFullExtent-V)<V;return H.circularLinkType==="top"?(U="M "+(j.targetX-$)+" "+(j.targetY+V)+" L "+(j.rightInnerExtent-$)+" "+(j.targetY+V)+"A "+(j.rightLargeArcRadius+V)+" "+(j.rightSmallArcRadius+V)+" 0 0 1 "+(j.rightFullExtent-V-$)+" "+(j.targetY-j.rightSmallArcRadius)+"L "+(j.rightFullExtent-V-$)+" "+j.verticalRightInnerExtent,q&&Y?U+=" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 1 "+(j.rightFullExtent+V-$-(j.rightLargeArcRadius-V))+" "+(j.verticalRightInnerExtent-(j.rightLargeArcRadius+V))+" L "+(j.rightFullExtent+V-(j.rightLargeArcRadius-V)-$)+" "+(j.verticalRightInnerExtent-(j.rightLargeArcRadius+V))+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftLargeArcRadius+V)+" 0 0 1 "+(j.leftFullExtent+V)+" "+j.verticalRightInnerExtent:q?U+=" A "+(j.rightLargeArcRadius-V)+" "+(j.rightLargeArcRadius-V)+" 0 0 0 "+(j.rightFullExtent-V-$-(j.rightLargeArcRadius-V))+" "+(j.verticalRightInnerExtent-(j.rightLargeArcRadius-V))+" L "+(j.leftFullExtent+V+(j.rightLargeArcRadius-V))+" "+(j.verticalRightInnerExtent-(j.rightLargeArcRadius-V))+" A "+(j.leftLargeArcRadius-V)+" "+(j.leftLargeArcRadius-V)+" 0 0 0 "+(j.leftFullExtent+V)+" "+j.verticalLeftInnerExtent:U+=" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 1 "+(j.rightInnerExtent-$)+" "+(j.verticalFullExtent-V)+" L "+j.leftInnerExtent+" "+(j.verticalFullExtent-V)+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftLargeArcRadius+V)+" 0 0 1 "+(j.leftFullExtent+V)+" "+j.verticalLeftInnerExtent,U+=" L "+(j.leftFullExtent+V)+" "+(j.sourceY-j.leftSmallArcRadius)+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftSmallArcRadius+V)+" 0 0 1 "+j.leftInnerExtent+" "+(j.sourceY+V)+" L "+j.sourceX+" "+(j.sourceY+V)+" L "+j.sourceX+" "+(j.sourceY-V)+" L "+j.leftInnerExtent+" "+(j.sourceY-V)+" A "+(j.leftLargeArcRadius-V)+" "+(j.leftSmallArcRadius-V)+" 0 0 0 "+(j.leftFullExtent-V)+" "+(j.sourceY-j.leftSmallArcRadius)+" L "+(j.leftFullExtent-V)+" "+j.verticalLeftInnerExtent,q&&Y?U+=" A "+(j.leftLargeArcRadius+V)+" "+(j.leftSmallArcRadius+V)+" 0 0 0 "+(j.leftFullExtent-V)+" "+(j.verticalFullExtent+V)+"L"+(j.rightFullExtent+V-$)+" "+(j.verticalFullExtent+V)+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftSmallArcRadius+V)+" 0 0 0 "+(j.rightFullExtent+V-$)+" "+j.verticalRightInnerExtent:q?U+=" A "+(j.leftLargeArcRadius+V)+" "+(j.leftSmallArcRadius+V)+" 0 0 1 "+(j.leftFullExtent+V)+" "+(j.verticalFullExtent-V)+" L "+(j.rightFullExtent-V-$)+" "+(j.verticalFullExtent-V)+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftSmallArcRadius+V)+" 0 0 1 "+(j.rightFullExtent+V-$)+" "+j.verticalRightInnerExtent:U+=" A "+(j.leftLargeArcRadius-V)+" "+(j.leftLargeArcRadius-V)+" 0 0 0 "+j.leftInnerExtent+" "+(j.verticalFullExtent+V)+" L "+(j.rightInnerExtent-$)+" "+(j.verticalFullExtent+V)+" A "+(j.rightLargeArcRadius-V)+" "+(j.rightLargeArcRadius-V)+" 0 0 0 "+(j.rightFullExtent+V-$)+" "+j.verticalRightInnerExtent,U+=" L "+(j.rightFullExtent+V-$)+" "+(j.targetY-j.rightSmallArcRadius)+" A "+(j.rightLargeArcRadius-V)+" "+(j.rightSmallArcRadius-V)+" 0 0 0 "+(j.rightInnerExtent-$)+" "+(j.targetY-V)+" L "+(j.targetX-$)+" "+(j.targetY-V)+($>0?" L "+j.targetX+" "+j.targetY:"")+"Z"):(U="M "+(j.targetX-$)+" "+(j.targetY-V)+"  L "+(j.rightInnerExtent-$)+" "+(j.targetY-V)+" A "+(j.rightLargeArcRadius+V)+" "+(j.rightSmallArcRadius+V)+" 0 0 0 "+(j.rightFullExtent-V-$)+" "+(j.targetY+j.rightSmallArcRadius)+" L "+(j.rightFullExtent-V-$)+" "+j.verticalRightInnerExtent,q&&Y?U+=" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 0 "+(j.rightInnerExtent-V-$)+" "+(j.verticalFullExtent+V)+" L "+(j.rightFullExtent+V-$-(j.rightLargeArcRadius-V))+" "+(j.verticalFullExtent+V)+" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 0 "+(j.leftFullExtent+V)+" "+j.verticalLeftInnerExtent:q?U+=" A "+(j.rightLargeArcRadius-V)+" "+(j.rightSmallArcRadius-V)+" 0 0 1 "+(j.rightFullExtent-$-V-(j.rightLargeArcRadius-V))+" "+(j.verticalFullExtent-V)+" L "+(j.leftFullExtent+V+(j.rightLargeArcRadius-V))+" "+(j.verticalFullExtent-V)+" A "+(j.rightLargeArcRadius-V)+" "+(j.rightSmallArcRadius-V)+" 0 0 1 "+(j.leftFullExtent+V)+" "+j.verticalLeftInnerExtent:U+=" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 0 "+(j.rightInnerExtent-$)+" "+(j.verticalFullExtent+V)+" L "+j.leftInnerExtent+" "+(j.verticalFullExtent+V)+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftLargeArcRadius+V)+" 0 0 0 "+(j.leftFullExtent+V)+" "+j.verticalLeftInnerExtent,U+=" L "+(j.leftFullExtent+V)+" "+(j.sourceY+j.leftSmallArcRadius)+" A "+(j.leftLargeArcRadius+V)+" "+(j.leftSmallArcRadius+V)+" 0 0 0 "+j.leftInnerExtent+" "+(j.sourceY-V)+" L "+j.sourceX+" "+(j.sourceY-V)+" L "+j.sourceX+" "+(j.sourceY+V)+" L "+j.leftInnerExtent+" "+(j.sourceY+V)+" A "+(j.leftLargeArcRadius-V)+" "+(j.leftSmallArcRadius-V)+" 0 0 1 "+(j.leftFullExtent-V)+" "+(j.sourceY+j.leftSmallArcRadius)+" L "+(j.leftFullExtent-V)+" "+j.verticalLeftInnerExtent,q&&Y?U+=" A "+(j.rightLargeArcRadius-V)+" "+(j.rightSmallArcRadius-V)+" 0 0 1 "+(j.leftFullExtent-V-(j.rightLargeArcRadius-V))+" "+(j.verticalFullExtent-V)+" L "+(j.rightFullExtent+V-$+(j.rightLargeArcRadius-V))+" "+(j.verticalFullExtent-V)+" A "+(j.rightLargeArcRadius-V)+" "+(j.rightSmallArcRadius-V)+" 0 0 1 "+(j.rightFullExtent+V-$)+" "+j.verticalRightInnerExtent:q?U+=" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 0 "+(j.leftFullExtent+V)+" "+(j.verticalFullExtent+V)+" L "+(j.rightFullExtent-$-V)+" "+(j.verticalFullExtent+V)+" A "+(j.rightLargeArcRadius+V)+" "+(j.rightLargeArcRadius+V)+" 0 0 0 "+(j.rightFullExtent+V-$)+" "+j.verticalRightInnerExtent:U+=" A "+(j.leftLargeArcRadius-V)+" "+(j.leftLargeArcRadius-V)+" 0 0 1 "+j.leftInnerExtent+" "+(j.verticalFullExtent-V)+" L "+(j.rightInnerExtent-$)+" "+(j.verticalFullExtent-V)+" A "+(j.rightLargeArcRadius-V)+" "+(j.rightLargeArcRadius-V)+" 0 0 1 "+(j.rightFullExtent+V-$)+" "+j.verticalRightInnerExtent,U+=" L "+(j.rightFullExtent+V-$)+" "+(j.targetY+j.rightSmallArcRadius)+" A "+(j.rightLargeArcRadius-V)+" "+(j.rightSmallArcRadius-V)+" 0 0 1 "+(j.rightInnerExtent-$)+" "+(j.targetY+V)+" L "+(j.targetX-$)+" "+(j.targetY+V)+($>0?" L "+j.targetX+" "+j.targetY:"")+"Z"),U}function A(){var H=.5;function $(U){var V=U.linkArrowLength;if(U.link.circular)return k(U.link,V);var j=Math.abs((U.link.target.x0-U.link.source.x1)/2);V>j&&(V=j);var q=U.link.source.x1,Y=U.link.target.x0-V,K=i(q,Y),te=K(H),ne=K(1-H),se=U.link.y0-U.link.width/2,le=U.link.y0+U.link.width/2,ce=U.link.y1-U.link.width/2,pe=U.link.y1+U.link.width/2,xe="M"+q+","+se,ye="C"+te+","+se+" "+ne+","+ce+" "+Y+","+ce,fe="C"+ne+","+pe+" "+te+","+le+" "+q+","+le,ae=V>0?"L"+(Y+V)+","+(ce+U.link.width/2):"";return ae+="L"+Y+","+pe,xe+ye+ae+fe+"Z"}return $}function b(H,$){var U=l.nodePadAcross,V=H.nodePad/2;$.dx=$.x1-$.x0,$.dy=$.y1-$.y0;var j=$.dx,q=Math.max(.5,$.dy),Y="node_"+$.pointNumber;return $.group&&(Y=c.randstr()),$.trace=H.trace,$.curveNumber=H.trace.index,{index:$.pointNumber,key:Y,partOfGroup:$.partOfGroup||!1,group:$.group,traceId:H.key,trace:H.trace,node:$,nodePad:H.nodePad,nodeLineColor:H.nodeLineColor,nodeLineWidth:H.nodeLineWidth,textFont:H.textFont,size:H.horizontal?H.height:H.width,visibleWidth:Math.ceil(j),visibleHeight:q,zoneX:-U,zoneY:-V,zoneWidth:j+2*U,zoneHeight:q+2*V,labelY:H.horizontal?$.dy/2+1:$.dx/2+1,left:$.originalLayer===1,sizeAcross:H.width,forceLayouts:H.forceLayouts,horizontal:H.horizontal,reversed:H.reversed,rgb:n.rgb($.color),alpha:n.parse($.color).alpha,valueFormat:H.valueFormat,valueSuffix:H.valueSuffix,sankey:H.sankey,graph:H.graph,arrangement:H.arrangement,uniqueNodeLabelPathId:[H.guid,H.key,Y].join("_"),interactionState:H.interactionState,figure:H}}function E(H){H.attr("transform",function($){return f($.node.x0.toFixed(3),$.node.y0.toFixed(3))})}function T(H){H.call(E)}function F(H,$){H.call(T),$.attr("d",A())}function D(H){H.attr("width",function($){return $.node.x1-$.node.x0}).attr("height",function($){return $.visibleHeight})}function R(H){return H.link.width>1||H.linkLineWidth>0}function P(H){return H.horizontal?H.reversed?f(H.translateX+H.width,H.translateY)+"matrix(-1 0 0 1 0 0)":f(H.translateX,H.translateY)+"matrix(1 0 0 1 0 0)":H.reversed?f(H.translateX,H.translateY+H.height)+"matrix(0 -1 1 0 0 0)":f(H.translateX,H.translateY)+"matrix(0 1 1 0 0 0)"}function z(H,$,U){H.on(".basic",null).on("mouseover.basic",function(V){!V.interactionState.dragInProgress&&!V.partOfGroup&&(U.hover(this,V,$),V.interactionState.hovered=[this,V])}).on("mousemove.basic",function(V){!V.interactionState.dragInProgress&&!V.partOfGroup&&(U.follow(this,V),V.interactionState.hovered=[this,V])}).on("mouseout.basic",function(V){!V.interactionState.dragInProgress&&!V.partOfGroup&&(U.unhover(this,V,$),V.interactionState.hovered=!1)}).on("click.basic",function(V){V.interactionState.hovered&&(U.unhover(this,V,$),V.interactionState.hovered=!1),!V.interactionState.dragInProgress&&!V.partOfGroup&&U.select(this,V,$)})}function I(H,$,U,V){var j=a.behavior.drag().origin(function(q){return{x:q.node.x0+q.visibleWidth/2,y:q.node.y0+q.visibleHeight/2}}).on("dragstart",function(q){if(q.arrangement!=="fixed"&&(c.ensureSingle(V._fullLayout._infolayer,"g","dragcover",function(K){V._fullLayout._dragCover=K}),c.raiseToTop(this),q.interactionState.dragInProgress=q.node,X(q.node),q.interactionState.hovered&&(U.nodeEvents.unhover.apply(0,q.interactionState.hovered),q.interactionState.hovered=!1),q.arrangement==="snap")){var Y=q.traceId+"|"+q.key;q.forceLayouts[Y]?q.forceLayouts[Y].alpha(1):L(H,Y,q,V),B(H,$,q,Y,V)}}).on("drag",function(q){if(q.arrangement!=="fixed"){var Y=a.event.x,K=a.event.y;q.arrangement==="snap"?(q.node.x0=Y-q.visibleWidth/2,q.node.x1=Y+q.visibleWidth/2,q.node.y0=K-q.visibleHeight/2,q.node.y1=K+q.visibleHeight/2):(q.arrangement==="freeform"&&(q.node.x0=Y-q.visibleWidth/2,q.node.x1=Y+q.visibleWidth/2),K=Math.max(0,Math.min(q.size-q.visibleHeight/2,K)),q.node.y0=K-q.visibleHeight/2,q.node.y1=K+q.visibleHeight/2),X(q.node),q.arrangement!=="snap"&&(q.sankey.update(q.graph),F(H.filter(Z(q)),$))}}).on("dragend",function(q){if(q.arrangement!=="fixed"){q.interactionState.dragInProgress=!1;for(var Y=0;Y<q.node.childrenNodes.length;Y++)q.node.childrenNodes[Y].x=q.node.x,q.node.childrenNodes[Y].y=q.node.y;q.arrangement!=="snap"&&G(q,V)}});H.on(".drag",null).call(j)}function L(H,$,U,V){J(U.graph.nodes);var j=U.graph.nodes.filter(function(q){return q.originalX===U.node.originalX}).filter(function(q){return!q.partOfGroup});U.forceLayouts[$]=t.forceSimulation(j).alphaDecay(0).force("collide",t.forceCollide().radius(function(q){return q.dy/2+U.nodePad/2}).strength(1).iterations(l.forceIterations)).force("constrain",O(H,$,j,U,V)).stop()}function B(H,$,U,V,j){window.requestAnimationFrame(function q(){var Y;for(Y=0;Y<l.forceTicksPerFrame;Y++)U.forceLayouts[V].tick();var K=U.graph.nodes;if(N(K),U.sankey.update(U.graph),F(H.filter(Z(U)),$),U.forceLayouts[V].alpha()>0)window.requestAnimationFrame(q);else{var te=U.node.originalX;U.node.x0=te-U.visibleWidth/2,U.node.x1=te+U.visibleWidth/2,G(U,j)}})}function O(H,$,U,V){return function(){for(var q=0,Y=0;Y<U.length;Y++){var K=U[Y];K===V.interactionState.dragInProgress?(K.x=K.lastDraggedX,K.y=K.lastDraggedY):(K.vx=(K.originalX-K.x)/l.forceTicksPerFrame,K.y=Math.min(V.size-K.dy/2,Math.max(K.dy/2,K.y))),q=Math.max(q,Math.abs(K.vx),Math.abs(K.vy))}!V.interactionState.dragInProgress&&q<.1&&V.forceLayouts[$].alpha()>0&&V.forceLayouts[$].alpha(0)}}function G(H,$){for(var U=[],V=[],j=0;j<H.graph.nodes.length;j++){var q=(H.graph.nodes[j].x0+H.graph.nodes[j].x1)/2,Y=(H.graph.nodes[j].y0+H.graph.nodes[j].y1)/2;U.push(q/H.figure.width),V.push(Y/H.figure.height)}_.call("_guiRestyle",$,{"node.x":[U],"node.y":[V]},H.trace.index).then(function(){$._fullLayout._dragCover&&$._fullLayout._dragCover.remove()})}function W(H){var $=[],U;for(U=0;U<H.length;U++)H[U].originalX=(H[U].x0+H[U].x1)/2,H[U].originalY=(H[U].y0+H[U].y1)/2,$.indexOf(H[U].originalX)===-1&&$.push(H[U].originalX);for($.sort(function(V,j){return V-j}),U=0;U<H.length;U++)H[U].originalLayerIndex=$.indexOf(H[U].originalX),H[U].originalLayer=H[U].originalLayerIndex/($.length-1)}function X(H){H.lastDraggedX=H.x0+H.dx/2,H.lastDraggedY=H.y0+H.dy/2}function Z(H){return function($){return $.node.originalX===H.node.originalX}}function J(H){for(var $=0;$<H.length;$++)H[$].y=(H[$].y0+H[$].y1)/2,H[$].x=(H[$].x0+H[$].x1)/2}function N(H){for(var $=0;$<H.length;$++)H[$].y0=H[$].y-H[$].dy/2,H[$].y1=H[$].y0+H[$].dy,H[$].x0=H[$].x-H[$].dx/2,H[$].x1=H[$].x0+H[$].dx}r.exports=function(H,$,U,V,j){var q=H._context.staticPlot,Y=!1;c.ensureSingle(H._fullLayout._infolayer,"g","first-render",function(){Y=!0});var K=H._fullLayout._dragCover,te=U.filter(function(fe){return m(fe).trace.visible}).map(C.bind(null,V)),ne=$.selectAll("."+l.cn.sankey).data(te,p);ne.exit().remove(),ne.enter().append("g").classed(l.cn.sankey,!0).style("box-sizing","content-box").style("position","absolute").style("left",0).style("shape-rendering","geometricPrecision").style("pointer-events",q?"none":"auto").attr("transform",P),ne.each(function(fe,ae){H._fullData[ae]._sankey=fe;var ee="bgsankey-"+fe.trace.uid+"-"+ae;c.ensureSingle(H._fullLayout._draggers,"rect",ee),H._fullData[ae]._bgRect=a.select("."+ee),H._fullData[ae]._bgRect.style("pointer-events",q?"none":"all").attr("width",fe.width).attr("height",fe.height).attr("x",fe.translateX).attr("y",fe.translateY).classed("bgsankey",!0).style({fill:"transparent","stroke-width":0})}),ne.transition().ease(l.ease).duration(l.duration).attr("transform",P);var se=ne.selectAll("."+l.cn.sankeyLinks).data(g,p);se.enter().append("g").classed(l.cn.sankeyLinks,!0).style("fill","none");var le=se.selectAll("."+l.cn.sankeyLink).data(function(fe){var ae=fe.graph.links;return ae.filter(function(ee){return ee.value}).map(w.bind(null,fe))},p);le.enter().append("path").classed(l.cn.sankeyLink,!0).call(z,ne,j.linkEvents),le.style("stroke",fe=>R(fe)?n.rgb(fe.linkLineColor):fe.rgb).style("stroke-opacity",fe=>R(fe)?n.opacity(fe.linkLineColor):fe.alpha).style("fill",fe=>fe.rgb).style("fill-opacity",fe=>fe.alpha).style("stroke-width",fe=>R(fe)?fe.linkLineWidth:1).attr("d",A()),le.style("opacity",function(){return H._context.staticPlot||Y||K?1:0}).transition().ease(l.ease).duration(l.duration).style("opacity",1),le.exit().transition().ease(l.ease).duration(l.duration).style("opacity",0).remove();var ce=ne.selectAll("."+l.cn.sankeyNodeSet).data(g,p);ce.enter().append("g").classed(l.cn.sankeyNodeSet,!0),ce.style("cursor",function(fe){switch(fe.arrangement){case"fixed":return"default";case"perpendicular":return"ns-resize";default:return"move"}});var pe=ce.selectAll("."+l.cn.sankeyNode).data(function(fe){var ae=fe.graph.nodes;return W(ae),ae.map(b.bind(null,fe))},p);pe.enter().append("g").classed(l.cn.sankeyNode,!0).call(E).style("opacity",function(fe){return(H._context.staticPlot||Y)&&!fe.partOfGroup?1:0}),pe.call(z,ne,j.nodeEvents).call(I,le,j,H),pe.transition().ease(l.ease).duration(l.duration).call(E).style("opacity",function(fe){return fe.partOfGroup?0:1}),pe.exit().transition().ease(l.ease).duration(l.duration).style("opacity",0).remove();var xe=pe.selectAll("."+l.cn.nodeRect).data(g);xe.enter().append("rect").classed(l.cn.nodeRect,!0).call(D),xe.style("stroke-width",function(fe){return fe.nodeLineWidth}).style("stroke",function(fe){return n.rgb(fe.nodeLineColor)}).style("stroke-opacity",function(fe){return n.opacity(fe.nodeLineColor)}).style("fill",fe=>fe.rgb).style("fill-opacity",fe=>fe.alpha),xe.transition().ease(l.ease).duration(l.duration).call(D);var ye=pe.selectAll("."+l.cn.nodeLabel).data(g);ye.enter().append("text").classed(l.cn.nodeLabel,!0).style("cursor","default"),ye.attr("data-notex",1).text(function(fe){return fe.node.label}).each(function(fe){var ae=a.select(this);u.font(ae,fe.textFont),y.convertToTspans(ae,H)}).attr("text-anchor",function(fe){return fe.horizontal&&fe.left!==fe.reversed?"end":"start"}).attr("transform",function(fe){var ae=a.select(this),ee=y.lineCount(ae),ie=fe.textFont.size*((ee-1)*S-x),Q=fe.nodeLineWidth/2+M;if(!fe.horizontal){var Me=fe.reversed?(fe.visibleWidth+ie)/2:(fe.visibleWidth-ie)/2,ue=fe.reversed?h(90):"scale(-1,1)"+h(90);return f(Me,Q)+ue}var ge=Q,Me=(fe.visibleHeight-ie)/2;return fe.left?ge=-ge:ge+=fe.visibleWidth,f(ge,Me)+(fe.reversed?"scale(-1,1)":"")}),ye.transition().ease(l.ease).duration(l.duration)}}}),G8=de({"src/traces/sankey/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=i.numberFormat,o=yle(),s=$s(),l=ta(),n=V8().cn,u=i._;function c(S){return S!==""}function f(S,M){return S.filter(function(C){return C.key===M.traceId})}function h(S,M){t.select(S).select("path").style("fill-opacity",M),t.select(S).select("rect").style("fill-opacity",M)}function d(S){t.select(S).select("text.name").style("fill","black")}function p(S){return function(M){return S.node.sourceLinks.indexOf(M.link)!==-1||S.node.targetLinks.indexOf(M.link)!==-1}}function g(S){return function(M){return M.node.sourceLinks.indexOf(S.link)!==-1||M.node.targetLinks.indexOf(S.link)!==-1}}function m(S,M,C){M&&C&&f(C,M).selectAll("."+n.sankeyLink).filter(p(M)).call(_.bind(0,M,C,!1))}function y(S,M,C){M&&C&&f(C,M).selectAll("."+n.sankeyLink).filter(p(M)).call(v.bind(0,M,C,!1))}function _(S,M,C,w){w.style("fill",function(k){if(!k.link.concentrationscale)return k.hoverRgb}).style("fill-opacity",function(k){if(!k.link.concentrationscale)return k.hoverAlpha}),w.each(function(k){var A=k.link.label;A!==""&&f(M,S).selectAll("."+n.sankeyLink).filter(function(b){return b.link.label===A}).style("fill",function(b){if(!b.link.concentrationscale)return b.hoverRgb}).style("fill-opacity",function(b){if(!b.link.concentrationscale)return b.hoverAlpha})}),C&&f(M,S).selectAll("."+n.sankeyNode).filter(g(S)).call(m)}function v(S,M,C,w){w.style("fill",function(k){return k.rgb}).style("fill-opacity",function(k){return k.alpha}),w.each(function(k){var A=k.link.label;A!==""&&f(M,S).selectAll("."+n.sankeyLink).filter(function(b){return b.link.label===A}).style("fill",b=>b.rgb).style("fill-opacity",b=>b.alpha)}),C&&f(M,S).selectAll(n.sankeyNode).filter(g(S)).call(y)}function x(S,M){var C=S.hoverlabel||{},w=i.nestedProperty(C,M).get();return Array.isArray(w)?!1:w}r.exports=function(M,C){for(var w=M._fullLayout,k=w._paper,A=w._size,b=0;b<M._fullData.length;b++)if(M._fullData[b].visible&&M._fullData[b].type===n.sankey&&!M._fullData[b]._viewInitial){var E=M._fullData[b].node;M._fullData[b]._viewInitial={node:{groups:E.groups.slice(),x:E.x.slice(),y:E.y.slice()}}}var T=function(Z,J){var N=J.link;N.originalEvent=t.event,M._hoverdata=[N],s.click(M,{target:!0})},F=function(Z,J,N){M._fullLayout.hovermode!==!1&&(t.select(Z).call(_.bind(0,J,N,!0)),J.link.trace.link.hoverinfo!=="skip"&&(J.link.fullData=J.link.trace,M.emit("plotly_hover",{event:t.event,points:[J.link]})))},D=u(M,"source:")+" ",R=u(M,"target:")+" ",P=u(M,"concentration:")+" ",z=u(M,"incoming flow count:")+" ",I=u(M,"outgoing flow count:")+" ",L=function(Z,J){if(M._fullLayout.hovermode===!1)return;var N=J.link.trace.link;if(N.hoverinfo==="none"||N.hoverinfo==="skip")return;var H=[];function $(te){var ne,se;te.circular?(ne=(te.circularPathData.leftInnerExtent+te.circularPathData.rightInnerExtent)/2,se=te.circularPathData.verticalFullExtent):(ne=(te.source.x1+te.target.x0)/2,se=(te.y0+te.y1)/2);var le=te.trace.orientation==="v",ce=te.trace.direction==="reversed",pe=[ne,se];return le&&pe.reverse(),le&&ce&&(pe[1]=J.parent.height-pe[1]),!le&&ce&&(pe[0]=J.parent.width-pe[0]),pe[0]+=J.parent.translateX,pe[1]+=J.parent.translateY,pe}for(var U=0,V=0;V<J.flow.links.length;V++){var j=J.flow.links[V];if(!(M._fullLayout.hovermode==="closest"&&J.link.pointNumber!==j.pointNumber)){J.link.pointNumber===j.pointNumber&&(U=V),j.fullData=j.trace,N=J.link.trace.link;var q=$(j),Y={valueLabel:a(J.valueFormat)(j.value)+J.valueSuffix};H.push({x:q[0],y:q[1],name:Y.valueLabel,text:[j.label||"",D+j.source.label,R+j.target.label,j.concentrationscale?P+a("%0.2f")(j.flow.labelConcentration):""].filter(c).join("<br>"),color:x(N,"bgcolor")||l.addOpacity(j.color,1),borderColor:x(N,"bordercolor"),fontFamily:x(N,"font.family"),fontSize:x(N,"font.size"),fontColor:x(N,"font.color"),fontWeight:x(N,"font.weight"),fontStyle:x(N,"font.style"),fontVariant:x(N,"font.variant"),fontTextcase:x(N,"font.textcase"),fontLineposition:x(N,"font.lineposition"),fontShadow:x(N,"font.shadow"),nameLength:x(N,"namelength"),textAlign:x(N,"align"),idealAlign:t.event.x<q[0]?"right":"left",hovertemplate:N.hovertemplate,hovertemplateLabels:Y,eventData:[j]})}}var K=s.loneHover(H,{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:M,anchorIndex:U});K.each(function(){var te=this;J.link.concentrationscale||h(te,.65),d(te)})},B=function(Z,J,N){M._fullLayout.hovermode!==!1&&(t.select(Z).call(v.bind(0,J,N,!0)),J.link.trace.link.hoverinfo!=="skip"&&(J.link.fullData=J.link.trace,M.emit("plotly_unhover",{event:t.event,points:[J.link]})),s.loneUnhover(w._hoverlayer.node()))},O=function(Z,J,N){var H=J.node;H.originalEvent=t.event,M._hoverdata=[H],t.select(Z).call(y,J,N),s.click(M,{target:!0})},G=function(Z,J,N){M._fullLayout.hovermode!==!1&&(t.select(Z).call(m,J,N),J.node.trace.node.hoverinfo!=="skip"&&(J.node.fullData=J.node.trace,M.emit("plotly_hover",{event:t.event,points:[J.node]})))},W=function(Z,J){if(M._fullLayout.hovermode!==!1){var N=J.node.trace.node;if(!(N.hoverinfo==="none"||N.hoverinfo==="skip")){var H=t.select(Z).select("."+n.nodeRect),$=M._fullLayout._paperdiv.node().getBoundingClientRect(),U=H.node().getBoundingClientRect(),V=U.left-2-$.left,j=U.right+2-$.left,q=U.top+U.height/4-$.top,Y={valueLabel:a(J.valueFormat)(J.node.value)+J.valueSuffix};J.node.fullData=J.node.trace,M._fullLayout._calcInverseTransform(M);var K=M._fullLayout._invScaleX,te=M._fullLayout._invScaleY,ne=s.loneHover({x0:K*V,x1:K*j,y:te*q,name:a(J.valueFormat)(J.node.value)+J.valueSuffix,text:[J.node.label,z+J.node.targetLinks.length,I+J.node.sourceLinks.length].filter(c).join("<br>"),color:x(N,"bgcolor")||J.rgb,borderColor:x(N,"bordercolor"),fontFamily:x(N,"font.family"),fontSize:x(N,"font.size"),fontColor:x(N,"font.color"),fontWeight:x(N,"font.weight"),fontStyle:x(N,"font.style"),fontVariant:x(N,"font.variant"),fontTextcase:x(N,"font.textcase"),fontLineposition:x(N,"font.lineposition"),fontShadow:x(N,"font.shadow"),nameLength:x(N,"namelength"),textAlign:x(N,"align"),idealAlign:"left",hovertemplate:N.hovertemplate,hovertemplateLabels:Y,eventData:[J.node]},{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:M});h(ne,.85),d(ne)}}},X=function(Z,J,N){M._fullLayout.hovermode!==!1&&(t.select(Z).call(y,J,N),J.node.trace.node.hoverinfo!=="skip"&&(J.node.fullData=J.node.trace,M.emit("plotly_unhover",{event:t.event,points:[J.node]})),s.loneUnhover(w._hoverlayer.node()))};o(M,k,C,{width:A.w,height:A.h,margin:{t:A.t,r:A.r,b:A.b,l:A.l}},{linkEvents:{hover:F,follow:L,unhover:B,select:T},nodeEvents:{hover:G,follow:W,unhover:X,select:O}})}}}),_le=de({"src/traces/sankey/base_plot.js"(e){"use strict";var r=Ps().overrideAll,t=$u().getModuleCalcData,i=G8(),a=La(),o=md(),s=Uc(),l=Zl().prepSelect,n=Qt(),u=Ma(),c="sankey";e.name=c,e.baseLayoutAttrOverrides=r({hoverlabel:a.hoverlabel},"plot","nested"),e.plot=function(h){var d=t(h.calcdata,c)[0];i(h,d),e.updateFx(h)},e.clean=function(h,d,p,g){var m=g._has&&g._has(c),y=d._has&&d._has(c);m&&!y&&(g._paperdiv.selectAll(".sankey").remove(),g._paperdiv.selectAll(".bgsankey").remove())},e.updateFx=function(h){for(var d=0;d<h._fullData.length;d++)f(h,d)};function f(h,d){var p=h._fullData[d],g=h._fullLayout,m=g.dragmode,y=g.dragmode==="pan"?"move":"crosshair",_=p._bgRect;if(_&&!(m==="pan"||m==="zoom")){o(_,y);var v={_id:"x",c2p:n.identity,_offset:p._sankey.translateX,_length:p._sankey.width},x={_id:"y",c2p:n.identity,_offset:p._sankey.translateY,_length:p._sankey.height},S={gd:h,element:_.node(),plotinfo:{id:d,xaxis:v,yaxis:x,fillRangeItems:n.noop},subplot:d,xaxes:[v],yaxes:[x],doneFnCompleted:function(M){var C=h._fullData[d],w,k=C.node.groups.slice(),A=[];function b(D){for(var R=C._sankey.graph.nodes,P=0;P<R.length;P++)if(R[P].pointNumber===D)return R[P]}for(var E=0;E<M.length;E++){var T=b(M[E].pointNumber);if(T)if(T.group){for(var F=0;F<T.childrenNodes.length;F++)A.push(T.childrenNodes[F].pointNumber);k[T.pointNumber-C.node._count]=!1}else A.push(T.pointNumber)}w=k.filter(Boolean).concat([A]),u.call("_guiRestyle",h,{"node.groups":[w]},d)}};S.prepFn=function(M,C,w){l(M,C,w,S,m)},s.init(S)}}}}),xle=de({"src/traces/sankey/select.js"(e,r){"use strict";r.exports=function(i,a){for(var o=i.cd,s=[],l=o[0].trace,n=l._sankey,u=n.graph.nodes,c=l.orientation==="v",f=l.direction==="reversed",h=0;h<u.length;h++){var d=u[h];if(!d.partOfGroup){var p=(d.x0+d.x1)/2,g=(d.y0+d.y1)/2,m;c?m=[g,f?n.height-p:p]:m=[f?n.width-p:p,g],a&&a.contains(m,!1,h,i)&&s.push({pointNumber:d.pointNumber})}}return s}}}),ble=de({"src/traces/sankey/index.js"(e,r){"use strict";r.exports={attributes:N8(),supplyDefaults:ole(),calc:sle(),plot:G8(),moduleType:"trace",name:"sankey",basePlotModule:_le(),selectPoints:xle(),categories:["noOpacity"],meta:{}}}}),wle=de({"lib/sankey.js"(e,r){"use strict";r.exports=ble()}}),Tle=de({"src/traces/indicator/base_plot.js"(e){"use strict";var r=Es();e.name="indicator",e.plot=function(t,i,a,o){r.plotBasePlot(e.name,t,i,a,o)},e.clean=function(t,i,a,o){r.cleanBasePlot(e.name,t,i,a,o)}}}),H8=de({"src/traces/indicator/attributes.js"(e,r){"use strict";var t=fn().extendFlat,i=fn().extendDeep,a=Ps().overrideAll,o=us(),s=Jo(),l=Is().attributes,n=Mu(),u=Ro().templatedArray,c=w1(),f=Ns().descriptionOnlyNumbers,h=o({editType:"plot",colorEditType:"plot"}),d={color:{valType:"color",editType:"plot"},line:{color:{valType:"color",dflt:s.defaultLine,editType:"plot"},width:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},thickness:{valType:"number",min:0,max:1,dflt:1,editType:"plot"},editType:"calc"},p={valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},g=u("step",i({},d,{range:p}));r.exports={mode:{valType:"flaglist",editType:"calc",flags:["number","delta","gauge"],dflt:"number"},value:{valType:"number",editType:"calc",anim:!0},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},domain:l({name:"indicator",trace:!0,editType:"calc"}),title:{text:{valType:"string",editType:"plot"},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},font:t({},h,{}),editType:"plot"},number:{valueformat:{valType:"string",dflt:"",editType:"plot",description:f("value")},font:t({},h,{}),prefix:{valType:"string",dflt:"",editType:"plot"},suffix:{valType:"string",dflt:"",editType:"plot"},editType:"plot"},delta:{reference:{valType:"number",editType:"calc"},position:{valType:"enumerated",values:["top","bottom","left","right"],dflt:"bottom",editType:"plot"},relative:{valType:"boolean",editType:"plot",dflt:!1},valueformat:{valType:"string",editType:"plot",description:f("value")},increasing:{symbol:{valType:"string",dflt:c.INCREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:c.INCREASING.COLOR,editType:"plot"},editType:"plot"},decreasing:{symbol:{valType:"string",dflt:c.DECREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:c.DECREASING.COLOR,editType:"plot"},editType:"plot"},font:t({},h,{}),prefix:{valType:"string",dflt:"",editType:"plot"},suffix:{valType:"string",dflt:"",editType:"plot"},editType:"calc"},gauge:{shape:{valType:"enumerated",editType:"plot",dflt:"angular",values:["angular","bullet"]},bar:i({},d,{color:{dflt:"green"}}),bgcolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:s.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:1,editType:"plot"},axis:a({range:p,visible:t({},n.visible,{dflt:!0}),tickmode:n.minor.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:t({},n.ticks,{dflt:"outside"}),ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,ticklabelstep:n.ticklabelstep,showticklabels:n.showticklabels,labelalias:n.labelalias,tickfont:o({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,minexponent:n.minexponent,showexponent:n.showexponent,editType:"plot"},"plot"),steps:g,threshold:{line:{color:t({},d.line.color,{}),width:t({},d.line.width,{dflt:1}),editType:"plot"},thickness:t({},d.thickness,{dflt:.85}),value:{valType:"number",editType:"calc",dflt:!1},editType:"plot"},editType:"plot"}}}}),$8=de({"src/traces/indicator/constants.js"(e,r){"use strict";r.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}}}),Ale=de({"src/traces/indicator/defaults.js"(e,r){"use strict";var t=Qt(),i=H8(),a=Is().defaults,o=Ro(),s=fc(),l=$8(),n=_v(),u=f1(),c=h0(),f=d0();function h(p,g,m,y){function _(L,B){return t.coerce(p,g,i,L,B)}a(g,y,_),_("mode"),g._hasNumber=g.mode.indexOf("number")!==-1,g._hasDelta=g.mode.indexOf("delta")!==-1,g._hasGauge=g.mode.indexOf("gauge")!==-1;var v=_("value");g._range=[0,typeof v=="number"?1.5*v:1];var x=new Array(2),S;if(g._hasNumber){_("number.valueformat");var M=t.extendFlat({},y.font);M.size=void 0,t.coerceFont(_,"number.font",M),g.number.font.size===void 0&&(g.number.font.size=l.defaultNumberFontSize,x[0]=!0),_("number.prefix"),_("number.suffix"),S=g.number.font.size}var C;if(g._hasDelta){var w=t.extendFlat({},y.font);w.size=void 0,t.coerceFont(_,"delta.font",w),g.delta.font.size===void 0&&(g.delta.font.size=(g._hasNumber?.5:1)*(S||l.defaultNumberFontSize),x[1]=!0),_("delta.reference",g.value),_("delta.relative"),_("delta.valueformat",g.delta.relative?"2%":""),_("delta.increasing.symbol"),_("delta.increasing.color"),_("delta.decreasing.symbol"),_("delta.decreasing.color"),_("delta.position"),_("delta.prefix"),_("delta.suffix"),C=g.delta.font.size}g._scaleNumbers=(!g._hasNumber||x[0])&&(!g._hasDelta||x[1])||!1;var k=t.extendFlat({},y.font);k.size=.25*(S||C||l.defaultNumberFontSize),t.coerceFont(_,"title.font",k),_("title.text");var A,b,E,T;function F(L,B){return t.coerce(A,b,i.gauge,L,B)}function D(L,B){return t.coerce(E,T,i.gauge.axis,L,B)}if(g._hasGauge){A=p.gauge,A||(A={}),b=o.newContainer(g,"gauge"),F("shape");var R=g._isBullet=g.gauge.shape==="bullet";R||_("title.align","center");var P=g._isAngular=g.gauge.shape==="angular";P||_("align","center"),F("bgcolor",y.paper_bgcolor),F("borderwidth"),F("bordercolor"),F("bar.color"),F("bar.line.color"),F("bar.line.width");var z=l.valueThickness*(g.gauge.shape==="bullet"?.5:1);F("bar.thickness",z),s(A,b,{name:"steps",handleItemDefaults:d}),F("threshold.value"),F("threshold.thickness"),F("threshold.line.width"),F("threshold.line.color"),E={},A&&(E=A.axis||{}),T=o.newContainer(b,"axis"),D("visible"),g._range=D("range",g._range);var I={font:y.font,noAutotickangles:!0,outerTicks:!0,noTicklabelshift:!0,noTicklabelstandoff:!0};n(E,T,D,"linear"),f(E,T,D,"linear",I),c(E,T,D,"linear",I),u(E,T,D,I)}else _("title.align","center"),_("align","center"),g._isAngular=g._isBullet=!1;g._length=null}function d(p,g){function m(y,_){return t.coerce(p,g,i.gauge.steps,y,_)}m("color"),m("line.color"),m("line.width"),m("range"),m("thickness")}r.exports={supplyDefaults:h}}}),Mle=de({"src/traces/indicator/calc.js"(e,r){"use strict";function t(i,a){var o=[],s=a.value;typeof a._lastValue!="number"&&(a._lastValue=a.value);var l=a._lastValue,n=l;return a._hasDelta&&typeof a.delta.reference=="number"&&(n=a.delta.reference),o[0]={y:s,lastY:l,delta:s-n,relativeDelta:(s-n)/n},o}r.exports={calc:t}}}),Sle=de({"src/traces/indicator/plot.js"(e,r){"use strict";var t=Yr(),i=(jv(),ti(M0)).interpolate,a=(jv(),ti(M0)).interpolateNumber,o=Qt(),s=o.strScale,l=o.strTranslate,n=o.rad2deg,u=Bl().MID_SHIFT,c=hn(),f=$8(),h=Zo(),d=nn(),p=zy(),g=Nw(),m=Mu(),y=ta(),_={left:"start",center:"middle",right:"end"},v={left:0,center:.5,right:1},x=/[yzafpnµmkMGTPEZY]/;function S(R){return R&&R.duration>0}r.exports=function(P,z,I,L){var B=P._fullLayout,O;S(I)&&L&&(O=L()),o.makeTraceGroups(B._indicatorlayer,z,"trace").each(function(G){var W=G[0],X=W.trace,Z=t.select(this),J=X._hasGauge,N=X._isAngular,H=X._isBullet,$=X.domain,U={w:B._size.w*($.x[1]-$.x[0]),h:B._size.h*($.y[1]-$.y[0]),l:B._size.l+B._size.w*$.x[0],r:B._size.r+B._size.w*(1-$.x[1]),t:B._size.t+B._size.h*(1-$.y[1]),b:B._size.b+B._size.h*$.y[0]},V=U.l+U.w/2,j=U.t+U.h/2,q=Math.min(U.w/2,U.h),Y=f.innerRadius*q,K,te,ne,se=X.align||"center";if(te=j,!J)K=U.l+v[se]*U.w,ne=function(Q){return E(Q,U.w,U.h)};else if(N&&(K=V,te=j+q/2,ne=function(Q){return T(Q,.9*Y)}),H){var le=f.bulletPadding,ce=1-f.bulletNumberDomainSize+le;K=U.l+(ce+(1-ce)*v[se])*U.w,ne=function(Q){return E(Q,(f.bulletNumberDomainSize-le)*U.w,U.h)}}w(P,Z,G,{numbersX:K,numbersY:te,numbersScaler:ne,transitionOpts:I,onComplete:O});var pe,xe;J&&(pe={range:X.gauge.axis.range,color:X.gauge.bgcolor,line:{color:X.gauge.bordercolor,width:0},thickness:1},xe={range:X.gauge.axis.range,color:"rgba(0, 0, 0, 0)",line:{color:X.gauge.bordercolor,width:X.gauge.borderwidth},thickness:1});var ye=Z.selectAll("g.angular").data(N?G:[]);ye.exit().remove();var fe=Z.selectAll("g.angularaxis").data(N?G:[]);fe.exit().remove(),N&&C(P,Z,G,{radius:q,innerRadius:Y,gauge:ye,layer:fe,size:U,gaugeBg:pe,gaugeOutline:xe,transitionOpts:I,onComplete:O});var ae=Z.selectAll("g.bullet").data(H?G:[]);ae.exit().remove();var ee=Z.selectAll("g.bulletaxis").data(H?G:[]);ee.exit().remove(),H&&M(P,Z,G,{gauge:ae,layer:ee,size:U,gaugeBg:pe,gaugeOutline:xe,transitionOpts:I,onComplete:O});var ie=Z.selectAll("text.title").data(G);ie.exit().remove(),ie.enter().append("text").classed("title",!0),ie.attr("text-anchor",function(){return H?_.right:_[X.title.align]}).text(X.title.text).call(c.font,X.title.font).call(h.convertToTspans,P),ie.attr("transform",function(){var Q=U.l+U.w*v[X.title.align],ue,ge=f.titlePadding,Me=c.bBox(ie.node());if(J){if(N)if(X.gauge.axis.visible){var Te=c.bBox(fe.node());ue=Te.top-ge-Me.bottom}else ue=U.t+U.h/2-q/2-Me.bottom-ge;H&&(ue=te-(Me.top+Me.bottom)/2,Q=U.l-f.bulletPadding*U.w)}else ue=X._numbersTop-ge-Me.bottom;return l(Q,ue)})})};function M(R,P,z,I){var L=z[0].trace,B=I.gauge,O=I.layer,G=I.gaugeBg,W=I.gaugeOutline,X=I.size,Z=L.domain,J=I.transitionOpts,N=I.onComplete,H,$,U,V,j;B.enter().append("g").classed("bullet",!0),B.attr("transform",l(X.l,X.t)),O.enter().append("g").classed("bulletaxis",!0).classed("crisp",!0),O.selectAll("g.xbulletaxistick,path,text").remove();var q=X.h,Y=L.gauge.bar.thickness*q,K=Z.x[0],te=Z.x[0]+(Z.x[1]-Z.x[0])*(L._hasNumber||L._hasDelta?1-f.bulletNumberDomainSize:1);H=b(R,L.gauge.axis),H._id="xbulletaxis",H.domain=[K,te],H.setScale(),$=d.calcTicks(H),U=d.makeTransTickFn(H),V=d.getTickSigns(H)[2],j=X.t+X.h,H.visible&&(d.drawTicks(R,H,{vals:H.ticks==="inside"?d.clipEnds(H,$):$,layer:O,path:d.makeTickPath(H,j,V),transFn:U}),d.drawLabels(R,H,{vals:$,layer:O,transFn:U,labelFns:d.makeLabelFns(H,j)}));function ne(fe){fe.attr("width",function(ae){return Math.max(0,H.c2p(ae.range[1])-H.c2p(ae.range[0]))}).attr("x",function(ae){return H.c2p(ae.range[0])}).attr("y",function(ae){return .5*(1-ae.thickness)*q}).attr("height",function(ae){return ae.thickness*q})}var se=[G].concat(L.gauge.steps),le=B.selectAll("g.bg-bullet").data(se);le.enter().append("g").classed("bg-bullet",!0).append("rect"),le.select("rect").call(ne).call(k),le.exit().remove();var ce=B.selectAll("g.value-bullet").data([L.gauge.bar]);ce.enter().append("g").classed("value-bullet",!0).append("rect"),ce.select("rect").attr("height",Y).attr("y",(q-Y)/2).call(k),S(J)?ce.select("rect").transition().duration(J.duration).ease(J.easing).each("end",function(){N&&N()}).each("interrupt",function(){N&&N()}).attr("width",Math.max(0,H.c2p(Math.min(L.gauge.axis.range[1],z[0].y)))):ce.select("rect").attr("width",typeof z[0].y=="number"?Math.max(0,H.c2p(Math.min(L.gauge.axis.range[1],z[0].y))):0),ce.exit().remove();var pe=z.filter(function(){return L.gauge.threshold.value||L.gauge.threshold.value===0}),xe=B.selectAll("g.threshold-bullet").data(pe);xe.enter().append("g").classed("threshold-bullet",!0).append("line"),xe.select("line").attr("x1",H.c2p(L.gauge.threshold.value)).attr("x2",H.c2p(L.gauge.threshold.value)).attr("y1",(1-L.gauge.threshold.thickness)/2*q).attr("y2",(1-(1-L.gauge.threshold.thickness)/2)*q).call(y.stroke,L.gauge.threshold.line.color).style("stroke-width",L.gauge.threshold.line.width),xe.exit().remove();var ye=B.selectAll("g.gauge-outline").data([W]);ye.enter().append("g").classed("gauge-outline",!0).append("rect"),ye.select("rect").call(ne).call(k),ye.exit().remove()}function C(R,P,z,I){var L=z[0].trace,B=I.size,O=I.radius,G=I.innerRadius,W=I.gaugeBg,X=I.gaugeOutline,Z=[B.l+B.w/2,B.t+B.h/2+O/2],J=I.gauge,N=I.layer,H=I.transitionOpts,$=I.onComplete,U=Math.PI/2;function V(je){var Ve=L.gauge.axis.range[0],Ze=L.gauge.axis.range[1],Ke=(je-Ve)/(Ze-Ve)*Math.PI-U;return Ke<-U?-U:Ke>U?U:Ke}function j(je){return t.svg.arc().innerRadius((G+O)/2-je/2*(O-G)).outerRadius((G+O)/2+je/2*(O-G)).startAngle(-U)}function q(je){je.attr("d",function(Ve){return j(Ve.thickness).startAngle(V(Ve.range[0])).endAngle(V(Ve.range[1]))()})}var Y,K,te,ne;J.enter().append("g").classed("angular",!0),J.attr("transform",l(Z[0],Z[1])),N.enter().append("g").classed("angularaxis",!0).classed("crisp",!0),N.selectAll("g.xangularaxistick,path,text").remove(),Y=b(R,L.gauge.axis),Y.type="linear",Y.range=L.gauge.axis.range,Y._id="xangularaxis",Y.ticklabeloverflow="allow",Y.setScale();var se=function(je){return(Y.range[0]-je.x)/(Y.range[1]-Y.range[0])*Math.PI+Math.PI},le={},ce=d.makeLabelFns(Y,0),pe=ce.labelStandoff;le.xFn=function(je){var Ve=se(je);return Math.cos(Ve)*pe},le.yFn=function(je){var Ve=se(je),Ze=Math.sin(Ve)>0?.2:1;return-Math.sin(Ve)*(pe+je.fontSize*Ze)+Math.abs(Math.cos(Ve))*(je.fontSize*u)},le.anchorFn=function(je){var Ve=se(je),Ze=Math.cos(Ve);return Math.abs(Ze)<.1?"middle":Ze>0?"start":"end"},le.heightFn=function(je,Ve,Ze){var Ke=se(je);return-.5*(1+Math.sin(Ke))*Ze};var xe=function(je){return l(Z[0]+O*Math.cos(je),Z[1]-O*Math.sin(je))};te=function(je){return xe(se(je))};var ye=function(je){var Ve=se(je);return xe(Ve)+"rotate("+-n(Ve)+")"};if(K=d.calcTicks(Y),ne=d.getTickSigns(Y)[2],Y.visible){ne=Y.ticks==="inside"?-1:1;var fe=(Y.linewidth||1)/2;d.drawTicks(R,Y,{vals:K,layer:N,path:"M"+ne*fe+",0h"+ne*Y.ticklen,transFn:ye}),d.drawLabels(R,Y,{vals:K,layer:N,transFn:te,labelFns:le})}var ae=[W].concat(L.gauge.steps),ee=J.selectAll("g.bg-arc").data(ae);ee.enter().append("g").classed("bg-arc",!0).append("path"),ee.select("path").call(q).call(k),ee.exit().remove();var ie=j(L.gauge.bar.thickness),Q=J.selectAll("g.value-arc").data([L.gauge.bar]);Q.enter().append("g").classed("value-arc",!0).append("path");var ue=Q.select("path");S(H)?(ue.transition().duration(H.duration).ease(H.easing).each("end",function(){$&&$()}).each("interrupt",function(){$&&$()}).attrTween("d",A(ie,V(z[0].lastY),V(z[0].y))),L._lastValue=z[0].y):ue.attr("d",typeof z[0].y=="number"?ie.endAngle(V(z[0].y)):"M0,0Z"),ue.call(k),Q.exit().remove(),ae=[];var ge=L.gauge.threshold.value;(ge||ge===0)&&ae.push({range:[ge,ge],color:L.gauge.threshold.color,line:{color:L.gauge.threshold.line.color,width:L.gauge.threshold.line.width},thickness:L.gauge.threshold.thickness});var Me=J.selectAll("g.threshold-arc").data(ae);Me.enter().append("g").classed("threshold-arc",!0).append("path"),Me.select("path").call(q).call(k),Me.exit().remove();var Te=J.selectAll("g.gauge-outline").data([X]);Te.enter().append("g").classed("gauge-outline",!0).append("path"),Te.select("path").call(q).call(k),Te.exit().remove()}function w(R,P,z,I){var L=z[0].trace,B=I.numbersX,O=I.numbersY,G=L.align||"center",W=_[G],X=I.transitionOpts,Z=I.onComplete,J=o.ensureSingle(P,"g","numbers"),N,H,$,U=[];L._hasNumber&&U.push("number"),L._hasDelta&&(U.push("delta"),L.delta.position==="left"&&U.reverse());var V=J.selectAll("text").data(U);V.enter().append("text"),V.attr("text-anchor",function(){return W}).attr("class",function(xe){return xe}).attr("x",null).attr("y",null).attr("dx",null).attr("dy",null),V.exit().remove();function j(xe,ye,fe,ae){if(xe.match("s")&&fe>=0!=ae>=0&&!ye(fe).slice(-1).match(x)&&!ye(ae).slice(-1).match(x)){var ee=xe.slice().replace("s","f").replace(/\d+/,function(Q){return parseInt(Q)-1}),ie=b(R,{tickformat:ee});return function(Q){return Math.abs(Q)<1?d.tickText(ie,Q).text:ye(Q)}}else return ye}function q(){var xe=b(R,{tickformat:L.number.valueformat},L._range);xe.setScale(),d.prepTicks(xe);var ye=function(Q){return d.tickText(xe,Q).text},fe=L.number.suffix,ae=L.number.prefix,ee=J.select("text.number");function ie(){var Q=typeof z[0].y=="number"?ae+ye(z[0].y)+fe:"-";ee.text(Q).call(c.font,L.number.font).call(h.convertToTspans,R)}return S(X)?ee.transition().duration(X.duration).ease(X.easing).each("end",function(){ie(),Z&&Z()}).each("interrupt",function(){ie(),Z&&Z()}).attrTween("text",function(){var Q=t.select(this),ue=a(z[0].lastY,z[0].y);L._lastValue=z[0].y;var ge=j(L.number.valueformat,ye,z[0].lastY,z[0].y);return function(Me){Q.text(ae+ge(ue(Me))+fe)}}):ie(),N=F(ae+ye(z[0].y)+fe,L.number.font,W,R),ee}function Y(){var xe=b(R,{tickformat:L.delta.valueformat},L._range);xe.setScale(),d.prepTicks(xe);var ye=function(Me){return d.tickText(xe,Me).text},fe=L.delta.suffix,ae=L.delta.prefix,ee=function(Me){var Te=L.delta.relative?Me.relativeDelta:Me.delta;return Te},ie=function(Me,Te){return Me===0||typeof Me!="number"||isNaN(Me)?"-":(Me>0?L.delta.increasing.symbol:L.delta.decreasing.symbol)+ae+Te(Me)+fe},Q=function(Me){return Me.delta>=0?L.delta.increasing.color:L.delta.decreasing.color};L._deltaLastValue===void 0&&(L._deltaLastValue=ee(z[0]));var ue=J.select("text.delta");ue.call(c.font,L.delta.font).call(y.fill,Q({delta:L._deltaLastValue}));function ge(){ue.text(ie(ee(z[0]),ye)).call(y.fill,Q(z[0])).call(h.convertToTspans,R)}return S(X)?ue.transition().duration(X.duration).ease(X.easing).tween("text",function(){var Me=t.select(this),Te=ee(z[0]),je=L._deltaLastValue,Ve=j(L.delta.valueformat,ye,je,Te),Ze=a(je,Te);return L._deltaLastValue=Te,function(Ke){Me.text(ie(Ze(Ke),Ve)),Me.call(y.fill,Q({delta:Ze(Ke)}))}}).each("end",function(){ge(),Z&&Z()}).each("interrupt",function(){ge(),Z&&Z()}):ge(),H=F(ie(ee(z[0]),ye),L.delta.font,W,R),ue}var K=L.mode+L.align,te;if(L._hasDelta&&(te=Y(),K+=L.delta.position+L.delta.font.size+L.delta.font.family+L.delta.valueformat,K+=L.delta.increasing.symbol+L.delta.decreasing.symbol,$=H),L._hasNumber&&(q(),K+=L.number.font.size+L.number.font.family+L.number.valueformat+L.number.suffix+L.number.prefix,$=N),L._hasDelta&&L._hasNumber){var ne=[(N.left+N.right)/2,(N.top+N.bottom)/2],se=[(H.left+H.right)/2,(H.top+H.bottom)/2],le,ce,pe=.75*L.delta.font.size;L.delta.position==="left"&&(le=D(L,"deltaPos",0,-1*(N.width*v[L.align]+H.width*(1-v[L.align])+pe),K,Math.min),ce=ne[1]-se[1],$={width:N.width+H.width+pe,height:Math.max(N.height,H.height),left:H.left+le,right:N.right,top:Math.min(N.top,H.top+ce),bottom:Math.max(N.bottom,H.bottom+ce)}),L.delta.position==="right"&&(le=D(L,"deltaPos",0,N.width*(1-v[L.align])+H.width*v[L.align]+pe,K,Math.max),ce=ne[1]-se[1],$={width:N.width+H.width+pe,height:Math.max(N.height,H.height),left:N.left,right:H.right+le,top:Math.min(N.top,H.top+ce),bottom:Math.max(N.bottom,H.bottom+ce)}),L.delta.position==="bottom"&&(le=null,ce=H.height,$={width:Math.max(N.width,H.width),height:N.height+H.height,left:Math.min(N.left,H.left),right:Math.max(N.right,H.right),top:N.bottom-N.height,bottom:N.bottom+H.height}),L.delta.position==="top"&&(le=null,ce=N.top,$={width:Math.max(N.width,H.width),height:N.height+H.height,left:Math.min(N.left,H.left),right:Math.max(N.right,H.right),top:N.bottom-N.height-H.height,bottom:N.bottom}),te.attr({dx:le,dy:ce})}(L._hasNumber||L._hasDelta)&&J.attr("transform",function(){var xe=I.numbersScaler($);K+=xe[2];var ye=D(L,"numbersScale",1,xe[0],K,Math.min),fe;L._scaleNumbers||(ye=1),L._isAngular?fe=O-ye*$.bottom:fe=O-ye*($.top+$.bottom)/2,L._numbersTop=ye*$.top+fe;var ae=$[G];G==="center"&&(ae=($.left+$.right)/2);var ee=B-ye*ae;return ee=D(L,"numbersTranslate",0,ee,K,Math.max),l(ee,fe)+s(ye)})}function k(R){R.each(function(P){y.stroke(t.select(this),P.line.color)}).each(function(P){y.fill(t.select(this),P.color)}).style("stroke-width",function(P){return P.line.width})}function A(R,P,z){return function(){var I=i(P,z);return function(L){return R.endAngle(I(L))()}}}function b(R,P,z){var I=R._fullLayout,L=o.extendFlat({type:"linear",ticks:"outside",range:z,showline:!0},P),B={type:"linear",_id:"x"+P._id},O={letter:"x",font:I.font,noAutotickangles:!0,noHover:!0,noTickson:!0};function G(W,X){return o.coerce(L,B,m,W,X)}return p(L,B,G,O,I),g(L,B,G,O),B}function E(R,P,z){var I=Math.min(P/R.width,z/R.height);return[I,R,P+"x"+z]}function T(R,P){var z=Math.sqrt(R.width/2*(R.width/2)+R.height*R.height),I=P/z;return[I,R,P]}function F(R,P,z,I){var L=document.createElementNS("http://www.w3.org/2000/svg","text"),B=t.select(L);return B.text(R).attr("x",0).attr("y",0).attr("text-anchor",z).attr("data-unformatted",R).call(h.convertToTspans,I).call(c.font,P),c.bBox(B.node())}function D(R,P,z,I,L,B){var O="_cache"+P;R[O]&&R[O].key===L||(R[O]={key:L,value:z});var G=o.aggNums(B,null,[R[O].value,I],2);return R[O].value=G,G}}}),Ele=de({"src/traces/indicator/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"indicator",basePlotModule:Tle(),categories:["svg","noOpacity","noHover"],animatable:!0,attributes:H8(),supplyDefaults:Ale().supplyDefaults,calc:Mle().calc,plot:Sle(),meta:{}}}}),kle=de({"lib/indicator.js"(e,r){"use strict";r.exports=Ele()}}),W8=de({"src/traces/table/attributes.js"(e,r){"use strict";var t=g0(),i=fn().extendFlat,a=Ps().overrideAll,o=us(),s=Is().attributes,l=Ns().descriptionOnlyNumbers,n=r.exports=a({domain:s({name:"table",trace:!0}),columnwidth:{valType:"number",arrayOk:!0,dflt:null},columnorder:{valType:"data_array"},header:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[],description:l("cell value")},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:28},align:i({},t.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[],description:l("cell value")},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:20},align:i({},t.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:i({},o({arrayOk:!0}))}},"calc","from-root")}}),Cle=de({"src/traces/table/defaults.js"(e,r){"use strict";var t=Qt(),i=W8(),a=Is().defaults;function o(s,l){for(var n=s.columnorder||[],u=s.header.values.length,c=n.slice(0,u),f=c.slice().sort(function(p,g){return p-g}),h=c.map(function(p){return f.indexOf(p)}),d=h.length;d<u;d++)h.push(d);l("columnorder",h)}r.exports=function(l,n,u,c){function f(h,d){return t.coerce(l,n,i,h,d)}a(n,c,f),f("columnwidth"),f("header.values"),f("header.format"),f("header.align"),f("header.prefix"),f("header.suffix"),f("header.height"),f("header.line.width"),f("header.line.color"),f("header.fill.color"),t.coerceFont(f,"header.font",c.font),o(n,f),f("cells.values"),f("cells.format"),f("cells.align"),f("cells.prefix"),f("cells.suffix"),f("cells.height"),f("cells.line.width"),f("cells.line.color"),f("cells.fill.color"),t.coerceFont(f,"cells.font",c.font),n._length=null}}}),Dle=de({"src/traces/table/calc.js"(e,r){"use strict";var t=ip().wrap;r.exports=function(){return t({})}}}),Y8=de({"src/traces/table/constants.js"(e,r){"use strict";r.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\$.*\$$/,goldenRatio:1.618,lineBreaker:"<br>",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:"cubic-out",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:"cubic-out",uplift:5,wrapSpacer:" ",wrapSplitCharacter:" ",cn:{table:"table",tableControlView:"table-control-view",scrollBackground:"scroll-background",yColumn:"y-column",columnBlock:"column-block",scrollAreaClip:"scroll-area-clip",scrollAreaClipRect:"scroll-area-clip-rect",columnBoundary:"column-boundary",columnBoundaryClippath:"column-boundary-clippath",columnBoundaryRect:"column-boundary-rect",columnCells:"column-cells",columnCell:"column-cell",cellRect:"cell-rect",cellText:"cell-text",cellTextHolder:"cell-text-holder",scrollbarKit:"scrollbar-kit",scrollbar:"scrollbar",scrollbarSlider:"scrollbar-slider",scrollbarGlyph:"scrollbar-glyph",scrollbarCaptureZone:"scrollbar-capture-zone"}}}}),Lle=de({"src/traces/table/data_preparation_helper.js"(e,r){"use strict";var t=Y8(),i=fn().extendFlat,a=da(),o=Do().isTypedArray,s=Do().isArrayOrTypedArray;r.exports=function(m,y){var _=u(y.cells.values),v=function(W){return W.slice(y.header.values.length,W.length)},x=u(y.header.values);x.length&&!x[0].length&&(x[0]=[""],x=u(x));var S=x.concat(v(_).map(function(){return c((x[0]||[""]).length)})),M=y.domain,C=Math.floor(m._fullLayout._size.w*(M.x[1]-M.x[0])),w=Math.floor(m._fullLayout._size.h*(M.y[1]-M.y[0])),k=y.header.values.length?S[0].map(function(){return y.header.height}):[t.emptyHeaderHeight],A=_.length?_[0].map(function(){return y.cells.height}):[],b=k.reduce(n,0),E=w-b,T=E+t.uplift,F=d(A,T),D=d(k,b),R=h(D,[]),P=h(F,R),z={},I=y.columnorder;s(I)&&(I=Array.from(I)),I=I.concat(v(_.map(function(W,X){return X})));var L=S.map(function(W,X){var Z=s(y.columnwidth)?y.columnwidth[Math.min(X,y.columnwidth.length-1)]:y.columnwidth;return a(Z)?Number(Z):1}),B=L.reduce(n,0);L=L.map(function(W){return W/B*C});var O=Math.max(l(y.header.line.width),l(y.cells.line.width)),G={key:y.uid+m._context.staticPlot,translateX:M.x[0]*m._fullLayout._size.w,translateY:m._fullLayout._size.h*(1-M.y[1]),size:m._fullLayout._size,width:C,maxLineWidth:O,height:w,columnOrder:I,groupHeight:w,rowBlocks:P,headerRowBlocks:R,scrollY:0,cells:i({},y.cells,{values:_}),headerCells:i({},y.header,{values:S}),gdColumns:S.map(function(W){return W[0]}),gdColumnsOriginalOrder:S.map(function(W){return W[0]}),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:S.map(function(W,X){var Z=z[W];z[W]=(Z||0)+1;var J=W+"__"+z[W];return{key:J,label:W,specIndex:X,xIndex:I[X],xScale:f,x:void 0,calcdata:void 0,columnWidth:L[X]}})};return G.columns.forEach(function(W){W.calcdata=G,W.x=f(W)}),G};function l(g){if(s(g)){for(var m=0,y=0;y<g.length;y++)m=Math.max(m,l(g[y]));return m}return g}function n(g,m){return g+m}function u(g){var m=g.slice(),y=1/0,_=0,v;for(v=0;v<m.length;v++)o(m[v])?m[v]=Array.from(m[v]):s(m[v])||(m[v]=[m[v]]),y=Math.min(y,m[v].length),_=Math.max(_,m[v].length);if(y!==_)for(v=0;v<m.length;v++){var x=_-m[v].length;x&&(m[v]=m[v].concat(c(x)))}return m}function c(g){for(var m=new Array(g),y=0;y<g;y++)m[y]="";return m}function f(g){return g.calcdata.columns.reduce(function(m,y){return y.xIndex<g.xIndex?m+y.columnWidth:m},0)}function h(g,m){var y=Object.keys(g);return y.map(function(_){return i({},g[_],{auxiliaryBlocks:m})})}function d(g,m){for(var y={},_,v=0,x=0,S=p(),M=0,C=0,w=0;w<g.length;w++)_=g[w],S.rows.push({rowIndex:w,rowHeight:_}),x+=_,(x>=m||w===g.length-1)&&(y[v]=S,S.key=C++,S.firstRowIndex=M,S.lastRowIndex=w,S=p(),v+=x,M=w+1,x=0);return y}function p(){return{firstRowIndex:null,lastRowIndex:null,rows:[]}}}}),Fle=de({"src/traces/table/data_split_helpers.js"(e){"use strict";var r=fn().extendFlat;e.splitToPanels=function(i){var a=[0,0],o=r({},i,{key:"header",type:"header",page:0,prevPages:a,currentRepaint:[null,null],dragHandle:!0,values:i.calcdata.headerCells.values[i.specIndex],rowBlocks:i.calcdata.headerRowBlocks,calcdata:r({},i.calcdata,{cells:i.calcdata.headerCells})}),s=r({},i,{key:"cells1",type:"cells",page:0,prevPages:a,currentRepaint:[null,null],dragHandle:!1,values:i.calcdata.cells.values[i.specIndex],rowBlocks:i.calcdata.rowBlocks}),l=r({},i,{key:"cells2",type:"cells",page:1,prevPages:a,currentRepaint:[null,null],dragHandle:!1,values:i.calcdata.cells.values[i.specIndex],rowBlocks:i.calcdata.rowBlocks});return[s,l,o]},e.splitToCells=function(i){var a=t(i);return(i.values||[]).slice(a[0],a[1]).map(function(o,s){var l=typeof o=="string"&&o.match(/[<$&> ]/)?"_keybuster_"+Math.random():"";return{keyWithinBlock:s+l,key:a[0]+s,column:i,calcdata:i.calcdata,page:i.page,rowBlocks:i.rowBlocks,value:o}})};function t(i){var a=i.rowBlocks[i.page],o=a?a.rows[0].rowIndex:0,s=a?o+a.rows.length:0;return[o,s]}}}),X8=de({"src/traces/table/plot.js"(e,r){"use strict";var t=Y8(),i=Yr(),a=Qt(),o=a.numberFormat,s=ip(),l=hn(),n=Zo(),u=Qt().raiseToTop,c=Qt().strTranslate,f=Qt().cancelTransition,h=Lle(),d=Fle(),p=ta();r.exports=function(K,te){var ne=!K._context.staticPlot,se=K._fullLayout._paper.selectAll("."+t.cn.table).data(te.map(function(Te){var je=s.unwrap(Te),Ve=je.trace;return h(K,Ve)}),s.keyFun);se.exit().remove(),se.enter().append("g").classed(t.cn.table,!0).attr("overflow","visible").style("box-sizing","content-box").style("position","absolute").style("left",0).style("overflow","visible").style("shape-rendering","crispEdges").style("pointer-events","all"),se.attr("width",function(Te){return Te.width+Te.size.l+Te.size.r}).attr("height",function(Te){return Te.height+Te.size.t+Te.size.b}).attr("transform",function(Te){return c(Te.translateX,Te.translateY)});var le=se.selectAll("."+t.cn.tableControlView).data(s.repeat,s.keyFun),ce=le.enter().append("g").classed(t.cn.tableControlView,!0).style("box-sizing","content-box");if(ne){var pe="onwheel"in document?"wheel":"mousewheel";ce.on("mousemove",function(Te){le.filter(function(je){return Te===je}).call(v,K)}).on(pe,function(Te){if(!Te.scrollbarState.wheeling){Te.scrollbarState.wheeling=!0;var je=Te.scrollY+i.event.deltaY,Ve=W(K,le,null,je)(Te);Ve||(i.event.stopPropagation(),i.event.preventDefault()),Te.scrollbarState.wheeling=!1}}).call(v,K,!0)}le.attr("transform",function(Te){return c(Te.size.l,Te.size.t)});var xe=le.selectAll("."+t.cn.scrollBackground).data(s.repeat,s.keyFun);xe.enter().append("rect").classed(t.cn.scrollBackground,!0).attr("fill","none"),xe.attr("width",function(Te){return Te.width}).attr("height",function(Te){return Te.height}),le.each(function(Te){l.setClipUrl(i.select(this),m(K,Te),K)});var ye=le.selectAll("."+t.cn.yColumn).data(function(Te){return Te.columns},s.keyFun);ye.enter().append("g").classed(t.cn.yColumn,!0),ye.exit().remove(),ye.attr("transform",function(Te){return c(Te.x,0)}),ne&&ye.call(i.behavior.drag().origin(function(Te){var je=i.select(this);return z(je,Te,-t.uplift),u(this),Te.calcdata.columnDragInProgress=!0,v(le.filter(function(Ve){return Te.calcdata.key===Ve.key}),K),Te}).on("drag",function(Te){var je=i.select(this),Ve=function(vt){return(Te===vt?i.event.x:vt.x)+vt.columnWidth/2};Te.x=Math.max(-t.overdrag,Math.min(Te.calcdata.width+t.overdrag-Te.columnWidth,i.event.x));var Ze=_(ye).filter(function(vt){return vt.calcdata.key===Te.calcdata.key}),Ke=Ze.sort(function(vt,xt){return Ve(vt)-Ve(xt)});Ke.forEach(function(vt,xt){vt.xIndex=xt,vt.x=Te===vt?vt.x:vt.xScale(vt)}),ye.filter(function(vt){return Te!==vt}).transition().ease(t.transitionEase).duration(t.transitionDuration).attr("transform",function(vt){return c(vt.x,0)}),je.call(f).attr("transform",c(Te.x,-t.uplift))}).on("dragend",function(Te){var je=i.select(this),Ve=Te.calcdata;Te.x=Te.xScale(Te),Te.calcdata.columnDragInProgress=!1,z(je,Te,0),R(K,Ve,Ve.columns.map(function(Ze){return Ze.xIndex}))})),ye.each(function(Te){l.setClipUrl(i.select(this),y(K,Te),K)});var fe=ye.selectAll("."+t.cn.columnBlock).data(d.splitToPanels,s.keyFun);fe.enter().append("g").classed(t.cn.columnBlock,!0).attr("id",function(Te){return Te.key}),fe.style("cursor",function(Te){return Te.dragHandle?"ew-resize":Te.calcdata.scrollbarState.barWiggleRoom?"ns-resize":"default"});var ae=fe.filter(L),ee=fe.filter(I);ne&&ee.call(i.behavior.drag().origin(function(Te){return i.event.stopPropagation(),Te}).on("drag",W(K,le,-1)).on("dragend",function(){})),x(K,le,ae,fe),x(K,le,ee,fe);var ie=le.selectAll("."+t.cn.scrollAreaClip).data(s.repeat,s.keyFun);ie.enter().append("clipPath").classed(t.cn.scrollAreaClip,!0).attr("id",function(Te){return m(K,Te)});var Q=ie.selectAll("."+t.cn.scrollAreaClipRect).data(s.repeat,s.keyFun);Q.enter().append("rect").classed(t.cn.scrollAreaClipRect,!0).attr("x",-t.overdrag).attr("y",-t.uplift).attr("fill","none"),Q.attr("width",function(Te){return Te.width+2*t.overdrag}).attr("height",function(Te){return Te.height+t.uplift});var ue=ye.selectAll("."+t.cn.columnBoundary).data(s.repeat,s.keyFun);ue.enter().append("g").classed(t.cn.columnBoundary,!0);var ge=ye.selectAll("."+t.cn.columnBoundaryClippath).data(s.repeat,s.keyFun);ge.enter().append("clipPath").classed(t.cn.columnBoundaryClippath,!0),ge.attr("id",function(Te){return y(K,Te)});var Me=ge.selectAll("."+t.cn.columnBoundaryRect).data(s.repeat,s.keyFun);Me.enter().append("rect").classed(t.cn.columnBoundaryRect,!0).attr("fill","none"),Me.attr("width",function(Te){return Te.columnWidth+2*g(Te)}).attr("height",function(Te){return Te.calcdata.height+2*g(Te)+t.uplift}).attr("x",function(Te){return-g(Te)}).attr("y",function(Te){return-g(Te)}),G(null,ee,le)};function g(Y){return Math.ceil(Y.calcdata.maxLineWidth/2)}function m(Y,K){return"clip"+Y._fullLayout._uid+"_scrollAreaBottomClip_"+K.key}function y(Y,K){return"clip"+Y._fullLayout._uid+"_columnBoundaryClippath_"+K.calcdata.key+"_"+K.specIndex}function _(Y){return[].concat.apply([],Y.map(function(K){return K})).map(function(K){return K.__data__})}function v(Y,K,te){function ne(ye){var fe=ye.rowBlocks;return $(fe,fe.length-1)+(fe.length?U(fe[fe.length-1],1/0):1)}var se=Y.selectAll("."+t.cn.scrollbarKit).data(s.repeat,s.keyFun);se.enter().append("g").classed(t.cn.scrollbarKit,!0).style("shape-rendering","geometricPrecision"),se.each(function(ye){var fe=ye.scrollbarState;fe.totalHeight=ne(ye),fe.scrollableAreaHeight=ye.groupHeight-B(ye),fe.currentlyVisibleHeight=Math.min(fe.totalHeight,fe.scrollableAreaHeight),fe.ratio=fe.currentlyVisibleHeight/fe.totalHeight,fe.barLength=Math.max(fe.ratio*fe.currentlyVisibleHeight,t.goldenRatio*t.scrollbarWidth),fe.barWiggleRoom=fe.currentlyVisibleHeight-fe.barLength,fe.wiggleRoom=Math.max(0,fe.totalHeight-fe.scrollableAreaHeight),fe.topY=fe.barWiggleRoom===0?0:ye.scrollY/fe.wiggleRoom*fe.barWiggleRoom,fe.bottomY=fe.topY+fe.barLength,fe.dragMultiplier=fe.wiggleRoom/fe.barWiggleRoom}).attr("transform",function(ye){var fe=ye.width+t.scrollbarWidth/2+t.scrollbarOffset;return c(fe,B(ye))});var le=se.selectAll("."+t.cn.scrollbar).data(s.repeat,s.keyFun);le.enter().append("g").classed(t.cn.scrollbar,!0);var ce=le.selectAll("."+t.cn.scrollbarSlider).data(s.repeat,s.keyFun);ce.enter().append("g").classed(t.cn.scrollbarSlider,!0),ce.attr("transform",function(ye){return c(0,ye.scrollbarState.topY||0)});var pe=ce.selectAll("."+t.cn.scrollbarGlyph).data(s.repeat,s.keyFun);pe.enter().append("line").classed(t.cn.scrollbarGlyph,!0).attr("stroke","black").attr("stroke-width",t.scrollbarWidth).attr("stroke-linecap","round").attr("y1",t.scrollbarWidth/2),pe.attr("y2",function(ye){return ye.scrollbarState.barLength-t.scrollbarWidth/2}).attr("stroke-opacity",function(ye){return ye.columnDragInProgress||!ye.scrollbarState.barWiggleRoom||te?0:.4}),pe.transition().delay(0).duration(0),pe.transition().delay(t.scrollbarHideDelay).duration(t.scrollbarHideDuration).attr("stroke-opacity",0);var xe=le.selectAll("."+t.cn.scrollbarCaptureZone).data(s.repeat,s.keyFun);xe.enter().append("line").classed(t.cn.scrollbarCaptureZone,!0).attr("stroke","white").attr("stroke-opacity",.01).attr("stroke-width",t.scrollbarCaptureWidth).attr("stroke-linecap","butt").attr("y1",0).on("mousedown",function(ye){var fe=i.event.y,ae=this.getBoundingClientRect(),ee=ye.scrollbarState,ie=fe-ae.top,Q=i.scale.linear().domain([0,ee.scrollableAreaHeight]).range([0,ee.totalHeight]).clamp(!0);ee.topY<=ie&&ie<=ee.bottomY||W(K,Y,null,Q(ie-ee.barLength/2))(ye)}).call(i.behavior.drag().origin(function(ye){return i.event.stopPropagation(),ye.scrollbarState.scrollbarScrollInProgress=!0,ye}).on("drag",W(K,Y)).on("dragend",function(){})),xe.attr("y2",function(ye){return ye.scrollbarState.scrollableAreaHeight}),K._context.staticPlot&&(pe.remove(),xe.remove())}function x(Y,K,te,ne){var se=S(te),le=M(se);A(le);var ce=C(le);E(ce);var pe=k(le),xe=w(pe);b(xe),T(xe,K,ne,Y),H(le)}function S(Y){var K=Y.selectAll("."+t.cn.columnCells).data(s.repeat,s.keyFun);return K.enter().append("g").classed(t.cn.columnCells,!0),K.exit().remove(),K}function M(Y){var K=Y.selectAll("."+t.cn.columnCell).data(d.splitToCells,function(te){return te.keyWithinBlock});return K.enter().append("g").classed(t.cn.columnCell,!0),K.exit().remove(),K}function C(Y){var K=Y.selectAll("."+t.cn.cellRect).data(s.repeat,function(te){return te.keyWithinBlock});return K.enter().append("rect").classed(t.cn.cellRect,!0),K}function w(Y){var K=Y.selectAll("."+t.cn.cellText).data(s.repeat,function(te){return te.keyWithinBlock});return K.enter().append("text").classed(t.cn.cellText,!0).style("cursor",function(){return"auto"}).on("mousedown",function(){i.event.stopPropagation()}),K}function k(Y){var K=Y.selectAll("."+t.cn.cellTextHolder).data(s.repeat,function(te){return te.keyWithinBlock});return K.enter().append("g").classed(t.cn.cellTextHolder,!0).style("shape-rendering","geometricPrecision"),K}function A(Y){Y.each(function(K,te){var ne=K.calcdata.cells.font,se=K.column.specIndex,le={size:P(ne.size,se,te),color:P(ne.color,se,te),family:P(ne.family,se,te),weight:P(ne.weight,se,te),style:P(ne.style,se,te),variant:P(ne.variant,se,te),textcase:P(ne.textcase,se,te),lineposition:P(ne.lineposition,se,te),shadow:P(ne.shadow,se,te)};K.rowNumber=K.key,K.align=P(K.calcdata.cells.align,se,te),K.cellBorderWidth=P(K.calcdata.cells.line.width,se,te),K.font=le})}function b(Y){Y.each(function(K){l.font(i.select(this),K.font)})}function E(Y){Y.attr("width",function(K){return K.column.columnWidth}).attr("stroke-width",function(K){return K.cellBorderWidth}).each(function(K){var te=i.select(this);p.stroke(te,P(K.calcdata.cells.line.color,K.column.specIndex,K.rowNumber)),p.fill(te,P(K.calcdata.cells.fill.color,K.column.specIndex,K.rowNumber))})}function T(Y,K,te,ne){Y.text(function(se){var le=se.column.specIndex,ce=se.rowNumber,pe=se.value,xe=typeof pe=="string",ye=xe&&pe.match(/<br>/i),fe=!xe||ye;se.mayHaveMarkup=xe&&pe.match(/[<&>]/);var ae=F(pe);se.latex=ae;var ee=ae?"":P(se.calcdata.cells.prefix,le,ce)||"",ie=ae?"":P(se.calcdata.cells.suffix,le,ce)||"",Q=ae?null:P(se.calcdata.cells.format,le,ce)||null,ue=ee+(Q?o(Q)(se.value):se.value)+ie,ge;se.wrappingNeeded=!se.wrapped&&!fe&&!ae&&(ge=D(ue)),se.cellHeightMayIncrease=ye||ae||se.mayHaveMarkup||(ge===void 0?D(ue):ge),se.needsConvertToTspans=se.mayHaveMarkup||se.wrappingNeeded||se.latex;var Me;if(se.wrappingNeeded){var Te=t.wrapSplitCharacter===" "?ue.replace(/<a href=/ig,"<a_href="):ue,je=Te.split(t.wrapSplitCharacter),Ve=t.wrapSplitCharacter===" "?je.map(function(Ze){return Ze.replace(/<a_href=/ig,"<a href=")}):je;se.fragments=Ve.map(function(Ze){return{text:Ze,width:null}}),se.fragments.push({fragment:t.wrapSpacer,width:null}),Me=Ve.join(t.lineBreaker)+t.lineBreaker+t.wrapSpacer}else delete se.fragments,Me=ue;return Me}).attr("dy",function(se){return se.needsConvertToTspans?0:"0.75em"}).each(function(se){var le=this,ce=i.select(le),pe=se.wrappingNeeded?Z:J;se.needsConvertToTspans?n.convertToTspans(ce,ne,pe(te,le,K,ne,se)):i.select(le.parentNode).attr("transform",function(xe){return c(N(xe),t.cellPad)}).attr("text-anchor",function(xe){return{left:"start",center:"middle",right:"end"}[xe.align]})})}function F(Y){return typeof Y=="string"&&Y.match(t.latexCheck)}function D(Y){return Y.indexOf(t.wrapSplitCharacter)!==-1}function R(Y,K,te){var ne=K.gdColumnsOriginalOrder;K.gdColumns.sort(function(se,le){return te[ne.indexOf(se)]-te[ne.indexOf(le)]}),K.columnorder=te,Y.emit("plotly_restyle")}function P(Y,K,te){if(a.isArrayOrTypedArray(Y)){var ne=Y[Math.min(K,Y.length-1)];return a.isArrayOrTypedArray(ne)?ne[Math.min(te,ne.length-1)]:ne}else return Y}function z(Y,K,te){Y.transition().ease(t.releaseTransitionEase).duration(t.releaseTransitionDuration).attr("transform",c(K.x,te))}function I(Y){return Y.type==="cells"}function L(Y){return Y.type==="header"}function B(Y){var K=Y.rowBlocks.length?Y.rowBlocks[0].auxiliaryBlocks:[];return K.reduce(function(te,ne){return te+U(ne,1/0)},0)}function O(Y,K,te){for(var ne=[],se=0,le=0;le<Y.length;le++){for(var ce=Y[le],pe=ce.rows,xe=0,ye=0;ye<pe.length;ye++)xe+=pe[ye].rowHeight;ce.allRowsHeight=xe;var fe=se+xe,ae=K,ee=ae+te;ae<fe&&ee>se&&ne.push(le),se+=xe}return ne}function G(Y,K,te){var ne=_(K)[0];if(ne!==void 0){var se=ne.rowBlocks,le=ne.calcdata,ce=$(se,se.length),pe=ne.calcdata.groupHeight-B(ne),xe=le.scrollY=Math.max(0,Math.min(ce-pe,le.scrollY)),ye=O(se,xe,pe);ye.length===1&&(ye[0]===se.length-1?ye.unshift(ye[0]-1):ye.push(ye[0]+1)),ye[0]%2&&ye.reverse(),K.each(function(fe,ae){fe.page=ye[ae],fe.scrollY=xe}),K.attr("transform",function(fe){var ae=$(fe.rowBlocks,fe.page)-fe.scrollY;return c(0,ae)}),Y&&(X(Y,te,K,ye,ne.prevPages,ne,0),X(Y,te,K,ye,ne.prevPages,ne,1),v(te,Y))}}function W(Y,K,te,ne){return function(le){var ce=le.calcdata?le.calcdata:le,pe=K.filter(function(ae){return ce.key===ae.key}),xe=te||ce.scrollbarState.dragMultiplier,ye=ce.scrollY;ce.scrollY=ne===void 0?ce.scrollY+xe*i.event.dy:ne;var fe=pe.selectAll("."+t.cn.yColumn).selectAll("."+t.cn.columnBlock).filter(I);return G(Y,fe,pe),ce.scrollY===ye}}function X(Y,K,te,ne,se,le,ce){var pe=ne[ce]!==se[ce];pe&&(clearTimeout(le.currentRepaint[ce]),le.currentRepaint[ce]=setTimeout(function(){var xe=te.filter(function(ye,fe){return fe===ce&&ne[fe]!==se[fe]});x(Y,K,xe,te),se[ce]=ne[ce]}))}function Z(Y,K,te,ne){return function(){var le=i.select(K.parentNode);le.each(function(ce){var pe=ce.fragments;le.selectAll("tspan.line").each(function(ue,ge){pe[ge].width=this.getComputedTextLength()});var xe=pe[pe.length-1].width,ye=pe.slice(0,-1),fe=[],ae,ee,ie=0,Q=ce.column.columnWidth-2*t.cellPad;for(ce.value="";ye.length;)ae=ye.shift(),ee=ae.width+xe,ie+ee>Q&&(ce.value+=fe.join(t.wrapSpacer)+t.lineBreaker,fe=[],ie=0),fe.push(ae.text),ie+=ee;ie&&(ce.value+=fe.join(t.wrapSpacer)),ce.wrapped=!0}),le.selectAll("tspan.line").remove(),T(le.select("."+t.cn.cellText),te,Y,ne),i.select(K.parentNode.parentNode).call(H)}}function J(Y,K,te,ne,se){return function(){if(!se.settledY){var ce=i.select(K.parentNode),pe=j(se),xe=se.key-pe.firstRowIndex,ye=pe.rows[xe].rowHeight,fe=se.cellHeightMayIncrease?K.parentNode.getBoundingClientRect().height+2*t.cellPad:ye,ae=Math.max(fe,ye),ee=ae-pe.rows[xe].rowHeight;ee&&(pe.rows[xe].rowHeight=ae,Y.selectAll("."+t.cn.columnCell).call(H),G(null,Y.filter(I),0),v(te,ne,!0)),ce.attr("transform",function(){var ie=this,Q=ie.parentNode,ue=Q.getBoundingClientRect(),ge=i.select(ie.parentNode).select("."+t.cn.cellRect).node().getBoundingClientRect(),Me=ie.transform.baseVal.consolidate(),Te=ge.top-ue.top+(Me?Me.matrix.f:t.cellPad);return c(N(se,i.select(ie.parentNode).select("."+t.cn.cellTextHolder).node().getBoundingClientRect().width),Te)}),se.settledY=!0}}}function N(Y,K){switch(Y.align){case"left":return t.cellPad;case"right":return Y.column.columnWidth-(K||0)-t.cellPad;case"center":return(Y.column.columnWidth-(K||0))/2;default:return t.cellPad}}function H(Y){Y.attr("transform",function(K){var te=K.rowBlocks[0].auxiliaryBlocks.reduce(function(ce,pe){return ce+U(pe,1/0)},0),ne=j(K),se=U(ne,K.key),le=se+te;return c(0,le)}).selectAll("."+t.cn.cellRect).attr("height",function(K){return q(j(K),K.key).rowHeight})}function $(Y,K){for(var te=0,ne=K-1;ne>=0;ne--)te+=V(Y[ne]);return te}function U(Y,K){for(var te=0,ne=0;ne<Y.rows.length&&Y.rows[ne].rowIndex<K;ne++)te+=Y.rows[ne].rowHeight;return te}function V(Y){var K=Y.allRowsHeight;if(K!==void 0)return K;for(var te=0,ne=0;ne<Y.rows.length;ne++)te+=Y.rows[ne].rowHeight;return Y.allRowsHeight=te,te}function j(Y){return Y.rowBlocks[Y.page]}function q(Y,K){return Y.rows[K-Y.firstRowIndex]}}}),Ple=de({"src/traces/table/base_plot.js"(e){"use strict";var r=$u().getModuleCalcData,t=X8(),i="table";e.name=i,e.plot=function(a){var o=r(a.calcdata,i)[0];o.length&&t(a,o)},e.clean=function(a,o,s,l){var n=l._has&&l._has(i),u=o._has&&o._has(i);n&&!u&&l._paperdiv.selectAll(".table").remove()}}}),Ile=de({"src/traces/table/index.js"(e,r){"use strict";r.exports={attributes:W8(),supplyDefaults:Cle(),calc:Dle(),plot:X8(),moduleType:"trace",name:"table",basePlotModule:Ple(),categories:["noOpacity"],meta:{}}}}),Rle=de({"lib/table.js"(e,r){"use strict";r.exports=Ile()}}),zle=de({"src/traces/carpet/axis_attributes.js"(e,r){"use strict";var t=us(),i=Jo(),a=Mu(),o=Ns().descriptionWithDates,s=Ps().overrideAll,l=fu().dash,n=fn().extendFlat;r.exports={color:{valType:"color",editType:"calc"},smoothing:{valType:"number",dflt:1,min:0,max:1.3,editType:"calc"},title:{text:{valType:"string",dflt:"",editType:"calc"},font:t({editType:"calc"}),offset:{valType:"number",dflt:10,editType:"calc"},editType:"calc"},type:{valType:"enumerated",values:["-","linear","date","category"],dflt:"-",editType:"calc"},autotypenumbers:a.autotypenumbers,autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"calc"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"calc"},range:{valType:"info_array",editType:"calc",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}]},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},cheatertype:{valType:"enumerated",values:["index","value"],dflt:"value",editType:"calc"},tickmode:{valType:"enumerated",values:["linear","array"],dflt:"array",editType:"calc"},nticks:{valType:"integer",min:0,dflt:0,editType:"calc"},tickvals:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},showticklabels:{valType:"enumerated",values:["start","end","both","none"],dflt:"start",editType:"calc"},labelalias:n({},a.labelalias,{editType:"calc"}),tickfont:t({editType:"calc"}),tickangle:{valType:"angle",dflt:"auto",editType:"calc"},tickprefix:{valType:"string",dflt:"",editType:"calc"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},ticksuffix:{valType:"string",dflt:"",editType:"calc"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B","SI extended"],dflt:"B",editType:"calc"},minexponent:{valType:"number",dflt:3,min:0,editType:"calc"},separatethousands:{valType:"boolean",dflt:!1,editType:"calc"},tickformat:{valType:"string",dflt:"",editType:"calc",description:o("tick label")},tickformatstops:s(a.tickformatstops,"calc","from-root"),categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},labelpadding:{valType:"integer",dflt:10,editType:"calc"},labelprefix:{valType:"string",editType:"calc"},labelsuffix:{valType:"string",dflt:"",editType:"calc"},showline:{valType:"boolean",dflt:!1,editType:"calc"},linecolor:{valType:"color",dflt:i.defaultLine,editType:"calc"},linewidth:{valType:"number",min:0,dflt:1,editType:"calc"},gridcolor:{valType:"color",editType:"calc"},gridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},griddash:n({},l,{editType:"calc"}),showgrid:{valType:"boolean",dflt:!0,editType:"calc"},minorgridcount:{valType:"integer",min:0,dflt:0,editType:"calc"},minorgridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},minorgriddash:n({},l,{editType:"calc"}),minorgridcolor:{valType:"color",dflt:i.lightLine,editType:"calc"},startline:{valType:"boolean",editType:"calc"},startlinecolor:{valType:"color",editType:"calc"},startlinewidth:{valType:"number",dflt:1,editType:"calc"},endline:{valType:"boolean",editType:"calc"},endlinewidth:{valType:"number",dflt:1,editType:"calc"},endlinecolor:{valType:"color",editType:"calc"},tick0:{valType:"number",min:0,dflt:0,editType:"calc"},dtick:{valType:"number",min:0,dflt:1,editType:"calc"},arraytick0:{valType:"integer",min:0,dflt:0,editType:"calc"},arraydtick:{valType:"integer",min:1,dflt:1,editType:"calc"},editType:"calc"}}}),IS=de({"src/traces/carpet/attributes.js"(e,r){"use strict";var t=us(),i=zle(),a=Jo(),o=t({editType:"calc"}),s=tl().zorder;o.family.dflt='"Open Sans", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,r.exports={carpet:{valType:"string",editType:"calc"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},a:{valType:"data_array",editType:"calc"},a0:{valType:"number",dflt:0,editType:"calc"},da:{valType:"number",dflt:1,editType:"calc"},b:{valType:"data_array",editType:"calc"},b0:{valType:"number",dflt:0,editType:"calc"},db:{valType:"number",dflt:1,editType:"calc"},cheaterslope:{valType:"number",dflt:1,editType:"calc"},aaxis:i,baxis:i,font:o,color:{valType:"color",dflt:a.defaultLine,editType:"plot"},zorder:s}}}),Ble=de({"src/traces/carpet/xy_defaults.js"(e,r){"use strict";var t=Qt().isArray1D;r.exports=function(a,o,s){var l=s("x"),n=l&&l.length,u=s("y"),c=u&&u.length;if(!n&&!c)return!1;if(o._cheater=!l,(!n||t(l))&&(!c||t(u))){var f=n?l.length:1/0;c&&(f=Math.min(f,u.length)),o.a&&o.a.length&&(f=Math.min(f,o.a.length)),o.b&&o.b.length&&(f=Math.min(f,o.b.length)),o._length=f}else o._length=null;return!0}}}),Ole=de({"src/traces/carpet/axis_defaults.js"(e,r){"use strict";var t=IS(),i=ta().addOpacity,a=Ma(),o=Qt(),s=_v(),l=h0(),n=d0(),u=Ow(),c=Yd(),f=h1();r.exports=function(p,g,m){var y=m.letter,_=m.font||{},v=t[y+"axis"];function x(O,G){return o.coerce(p,g,v,O,G)}function S(O,G){return o.coerce2(p,g,v,O,G)}m.name&&(g._name=m.name,g._id=m.name),x("autotypenumbers",m.autotypenumbersDflt);var M=x("type");if(M==="-"&&(m.data&&h(g,m.data),g.type==="-"?g.type="linear":M=p.type=g.type),x("smoothing"),x("cheatertype"),x("showticklabels"),x("labelprefix",y+" = "),x("labelsuffix"),x("showtickprefix"),x("showticksuffix"),x("separatethousands"),x("tickformat"),x("exponentformat"),x("minexponent"),x("showexponent"),x("categoryorder"),x("tickmode"),x("tickvals"),x("ticktext"),x("tick0"),x("dtick"),g.tickmode==="array"&&(x("arraytick0"),x("arraydtick")),x("labelpadding"),g._hovertitle=y,M==="date"){var C=a.getComponentMethod("calendars","handleDefaults");C(p,g,"calendar",m.calendar)}c(g,m.fullLayout),g.c2p=o.identity;var w=x("color",m.dfltColor),k=w===p.color?w:_.color,A=x("title.text");A&&(o.coerceFont(x,"title.font",_,{overrideDflt:{size:o.bigFont(_.size),color:k}}),x("title.offset")),x("tickangle");var b=x("autorange",!g.isValidRange(p.range));b&&x("rangemode"),x("range"),g.cleanRange(),x("fixedrange"),s(p,g,x,M),n(p,g,x,M,m),l(p,g,x,M,m),u(p,g,x,{data:m.data,dataAttr:y});var E=x("gridcolor",i(w,.3)),T=S("gridwidth"),F=S("griddash"),D=x("showgrid");D||(delete g.gridcolor,delete g.gridwidth,delete g.griddash);var R=S("startlinecolor",w),P=S("startlinewidth",T),z=x("startline",g.showgrid||!!R||!!P);z||(delete g.startlinecolor,delete g.startlinewidth);var I=S("endlinecolor",w),L=S("endlinewidth",T),B=x("endline",g.showgrid||!!I||!!L);return B||(delete g.endlinecolor,delete g.endlinewidth),D?(x("minorgridcount"),x("minorgridwidth",T),x("minorgriddash",F),x("minorgridcolor",i(E,.06)),g.minorgridcount||(delete g.minorgridwidth,delete g.minorgriddash,delete g.minorgridcolor)):(delete g.gridcolor,delete g.gridwidth,delete g.griddash),g.showticklabels==="none"&&(delete g.tickfont,delete g.tickangle,delete g.showexponent,delete g.exponentformat,delete g.minexponent,delete g.tickformat,delete g.showticksuffix,delete g.showtickprefix),g.showticksuffix||delete g.ticksuffix,g.showtickprefix||delete g.tickprefix,x("tickmode"),g};function h(d,p){if(d.type==="-"){var g=d._id,m=g.charAt(0),y=m+"calendar",_=d[y];d.type=f(p,_,{autotypenumbers:d.autotypenumbers})}}}}),Nle=de({"src/traces/carpet/ab_defaults.js"(e,r){"use strict";var t=Ole(),i=Ro();r.exports=function(s,l,n,u,c){var f=u("a");f||(u("da"),u("a0"));var h=u("b");h||(u("db"),u("b0")),a(s,l,n,c)};function a(o,s,l,n){var u=["aaxis","baxis"];u.forEach(function(c){var f=c.charAt(0),h=o[c]||{},d=i.newContainer(s,c),p={noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,noTicklabelstep:!0,tickfont:"x",id:f+"axis",letter:f,font:s.font,name:c,data:o[f],calendar:s.calendar,dfltColor:n,bgColor:l.paper_bgcolor,autotypenumbersDflt:l.autotypenumbers,fullLayout:l};t(h,d,p),d._categories=d._categories||[],!o[c]&&h.type!=="-"&&(o[c]={type:h.type})})}}}),jle=de({"src/traces/carpet/defaults.js"(e,r){"use strict";var t=Qt(),i=Ble(),a=Nle(),o=IS(),s=Jo();r.exports=function(n,u,c,f){function h(g,m){return t.coerce(n,u,o,g,m)}u._clipPathId="clip"+u.uid+"carpet";var d=h("color",s.defaultLine);if(t.coerceFont(h,"font",f.font),h("carpet"),a(n,u,f,h,d),!u.a||!u.b){u.visible=!1;return}u.a.length<3&&(u.aaxis.smoothing=0),u.b.length<3&&(u.baxis.smoothing=0);var p=i(n,u,h);p||(u.visible=!1),u._cheater&&h("cheaterslope"),h("zorder")}}}),Z8=de({"src/traces/carpet/map_1d_array.js"(e,r){"use strict";var t=Qt().isArrayOrTypedArray;r.exports=function(a,o,s){var l;for(t(a)?a.length>o.length&&(a=a.slice(0,o.length)):a=[],l=0;l<o.length;l++)a[l]=s(o[l]);return a}}}),K8=de({"src/traces/carpet/makepath.js"(e,r){"use strict";r.exports=function(i,a,o){if(i.length===0)return"";var s,l=[],n=o?3:1;for(s=0;s<i.length;s+=n)l.push(i[s]+","+a[s]),o&&s<i.length-n&&(l.push("C"),l.push([i[s+1]+","+a[s+1],i[s+2]+","+a[s+2]+" "].join(" ")));return l.join(o?"":"L")}}}),Ule=de({"src/traces/carpet/orient_text.js"(e,r){"use strict";r.exports=function(i,a,o,s,l,n){var u=l[0]*i.dpdx(a),c=l[1]*i.dpdy(o),f=1,h=1;if(n){var d=Math.sqrt(l[0]*l[0]+l[1]*l[1]),p=Math.sqrt(n[0]*n[0]+n[1]*n[1]),g=(l[0]*n[0]+l[1]*n[1])/d/p;h=Math.max(0,g)}var m=Math.atan2(c,u)*180/Math.PI;return m<-90?(m+=180,f=-f):m>90&&(m-=180,f=-f),{angle:m,flip:f,p:i.c2p(s,a,o),offsetMultplier:h}}}}),qle=de({"src/traces/carpet/plot.js"(e,r){"use strict";var t=Yr(),i=hn(),a=Z8(),o=K8(),s=Ule(),l=Zo(),n=Qt(),u=n.strRotate,c=n.strTranslate,f=Bl();r.exports=function(x,S,M,C){var w=x._context.staticPlot,k=S.xaxis,A=S.yaxis,b=x._fullLayout,E=b._clips;n.makeTraceGroups(C,M,"trace").each(function(T){var F=t.select(this),D=T[0],R=D.trace,P=R.aaxis,z=R.baxis,I=n.ensureSingle(F,"g","minorlayer"),L=n.ensureSingle(F,"g","majorlayer"),B=n.ensureSingle(F,"g","boundarylayer"),O=n.ensureSingle(F,"g","labellayer");F.style("opacity",R.opacity),d(k,A,L,P,"a",P._gridlines,!0,w),d(k,A,L,z,"b",z._gridlines,!0,w),d(k,A,I,P,"a",P._minorgridlines,!0,w),d(k,A,I,z,"b",z._minorgridlines,!0,w),d(k,A,B,P,"a-boundary",P._boundarylines,w),d(k,A,B,z,"b-boundary",z._boundarylines,w);var G=p(x,k,A,R,D,O,P._labels,"a-label"),W=p(x,k,A,R,D,O,z._labels,"b-label");g(x,O,R,D,k,A,G,W),h(R,D,E,k,A)})};function h(v,x,S,M,C){var w,k,A,b,E=S.select("#"+v._clipPathId);E.size()||(E=S.append("clipPath").classed("carpetclip",!0));var T=n.ensureSingle(E,"path","carpetboundary"),F=x.clipsegments,D=[];for(b=0;b<F.length;b++)w=F[b],k=a([],w.x,M.c2p),A=a([],w.y,C.c2p),D.push(o(k,A,w.bicubic));var R="M"+D.join("L")+"Z";E.attr("id",v._clipPathId),T.attr("d",R)}function d(v,x,S,M,C,w,k){var A="const-"+C+"-lines",b=S.selectAll("."+A).data(w);b.enter().append("path").classed(A,!0).style("vector-effect",k?"none":"non-scaling-stroke"),b.each(function(E){var T=E,F=T.x,D=T.y,R=a([],F,v.c2p),P=a([],D,x.c2p),z="M"+o(R,P,T.smoothing),I=t.select(this);I.attr("d",z).style("stroke-width",T.width).style("stroke",T.color).style("stroke-dasharray",i.dashStyle(T.dash,T.width)).style("fill","none")}),b.exit().remove()}function p(v,x,S,M,C,w,k,A){var b=w.selectAll("text."+A).data(k);b.enter().append("text").classed(A,!0);var E=0,T={};return b.each(function(F,D){var R;if(F.axis.tickangle==="auto")R=s(M,x,S,F.xy,F.dxy);else{var P=(F.axis.tickangle+180)*Math.PI/180;R=s(M,x,S,F.xy,[Math.cos(P),Math.sin(P)])}D||(T={angle:R.angle,flip:R.flip});var z=(F.endAnchor?-1:1)*R.flip,I=t.select(this).attr({"text-anchor":z>0?"start":"end","data-notex":1}).call(i.font,F.font).text(F.text).call(l.convertToTspans,v),L=i.bBox(this);I.attr("transform",c(R.p[0],R.p[1])+u(R.angle)+c(F.axis.labelpadding*z,L.height*.3)),E=Math.max(E,L.width+F.axis.labelpadding)}),b.exit().remove(),T.maxExtent=E,T}function g(v,x,S,M,C,w,k,A){var b,E,T,F,D=n.aggNums(Math.min,null,S.a),R=n.aggNums(Math.max,null,S.a),P=n.aggNums(Math.min,null,S.b),z=n.aggNums(Math.max,null,S.b);b=.5*(D+R),E=P,T=S.ab2xy(b,E,!0),F=S.dxyda_rough(b,E),k.angle===void 0&&n.extendFlat(k,s(S,C,w,T,S.dxydb_rough(b,E))),_(v,x,S,M,T,F,S.aaxis,C,w,k,"a-title"),b=D,E=.5*(P+z),T=S.ab2xy(b,E,!0),F=S.dxydb_rough(b,E),A.angle===void 0&&n.extendFlat(A,s(S,C,w,T,S.dxyda_rough(b,E))),_(v,x,S,M,T,F,S.baxis,C,w,A,"b-title")}var m=f.LINE_SPACING,y=(1-f.MID_SHIFT)/m+1;function _(v,x,S,M,C,w,k,A,b,E,T){var F=[];k.title.text&&F.push(k.title.text);var D=x.selectAll("text."+T).data(F),R=E.maxExtent;D.enter().append("text").classed(T,!0),D.each(function(){var P=s(S,A,b,C,w);["start","both"].indexOf(k.showticklabels)===-1&&(R=0);var z=k.title.font.size;R+=z+k.title.offset;var I=E.angle+(E.flip<0?180:0),L=(I-P.angle+450)%360,B=L>90&&L<270,O=t.select(this);O.text(k.title.text).call(l.convertToTspans,v),B&&(R=(-l.lineCount(O)+y)*m*z-R),O.attr("transform",c(P.p[0],P.p[1])+u(P.angle)+c(0,R)).attr("text-anchor","middle").call(i.font,k.title.font)}),D.exit().remove()}}}),Vle=de({"src/traces/carpet/cheater_basis.js"(e,r){"use strict";var t=Qt().isArrayOrTypedArray;r.exports=function(i,a,o){var s,l,n,u,c,f,h=[],d=t(i)?i.length:i,p=t(a)?a.length:a,g=t(i)?i:null,m=t(a)?a:null;g&&(n=(g.length-1)/(g[g.length-1]-g[0])/(d-1)),m&&(u=(m.length-1)/(m[m.length-1]-m[0])/(p-1));var y,_=1/0,v=-1/0;for(l=0;l<p;l++)for(h[l]=[],f=m?(m[l]-m[0])*u:l/(p-1),s=0;s<d;s++)c=g?(g[s]-g[0])*n:s/(d-1),y=c-f*o,_=Math.min(y,_),v=Math.max(y,v),h[l][s]=y;var x=1/(v-_),S=-_*x;for(l=0;l<p;l++)for(s=0;s<d;s++)h[l][s]=x*h[l][s]+S;return h}}}),Gle=de({"src/traces/carpet/array_minmax.js"(e,r){"use strict";var t=Qt().isArrayOrTypedArray;r.exports=function(a){return i(a,0)};function i(a,o){if(!t(a)||o>=10)return null;for(var s=1/0,l=-1/0,n=a.length,u=0;u<n;u++){var c=a[u];if(t(c)){var f=i(c,o+1);f&&(s=Math.min(f[0],s),l=Math.max(f[1],l))}else s=Math.min(c,s),l=Math.max(c,l)}return[s,l]}}}),Hle=de({"src/traces/carpet/calc_gridlines.js"(e,r){"use strict";var t=nn(),i=fn().extendFlat;r.exports=function(o,s,l){var n,u,c,f,h,d,p,g,m,y,_,v,x,S,M=o["_"+s],C=o[s+"axis"],w=C._gridlines=[],k=C._minorgridlines=[],A=C._boundarylines=[],b=o["_"+l],E=o[l+"axis"];C.tickmode==="array"&&(C.tickvals=M.slice());var T=o._xctrl,F=o._yctrl,D=T[0].length,R=T.length,P=o._a.length,z=o._b.length;t.prepTicks(C),C.tickmode==="array"&&delete C.tickvals;var I=C.smoothing?3:1;function L(O){var G,W,X,Z,J,N,H,$,U,V,j,q,Y=[],K=[],te={};if(s==="b")for(W=o.b2j(O),X=Math.floor(Math.max(0,Math.min(z-2,W))),Z=W-X,te.length=z,te.crossLength=P,te.xy=function(ne){return o.evalxy([],ne,W)},te.dxy=function(ne,se){return o.dxydi([],ne,X,se,Z)},G=0;G<P;G++)N=Math.min(P-2,G),H=G-N,$=o.evalxy([],G,W),E.smoothing&&G>0&&(U=o.dxydi([],G-1,X,0,Z),Y.push(J[0]+U[0]/3),K.push(J[1]+U[1]/3),V=o.dxydi([],G-1,X,1,Z),Y.push($[0]-V[0]/3),K.push($[1]-V[1]/3)),Y.push($[0]),K.push($[1]),J=$;else for(G=o.a2i(O),N=Math.floor(Math.max(0,Math.min(P-2,G))),H=G-N,te.length=P,te.crossLength=z,te.xy=function(ne){return o.evalxy([],G,ne)},te.dxy=function(ne,se){return o.dxydj([],N,ne,H,se)},W=0;W<z;W++)X=Math.min(z-2,W),Z=W-X,$=o.evalxy([],G,W),E.smoothing&&W>0&&(j=o.dxydj([],N,W-1,H,0),Y.push(J[0]+j[0]/3),K.push(J[1]+j[1]/3),q=o.dxydj([],N,W-1,H,1),Y.push($[0]-q[0]/3),K.push($[1]-q[1]/3)),Y.push($[0]),K.push($[1]),J=$;return te.axisLetter=s,te.axis=C,te.crossAxis=E,te.value=O,te.constvar=l,te.index=g,te.x=Y,te.y=K,te.smoothing=E.smoothing,te}function B(O){var G,W,X,Z,J,N=[],H=[],$={};if($.length=M.length,$.crossLength=b.length,s==="b")for(X=Math.max(0,Math.min(z-2,O)),J=Math.min(1,Math.max(0,O-X)),$.xy=function(U){return o.evalxy([],U,O)},$.dxy=function(U,V){return o.dxydi([],U,X,V,J)},G=0;G<D;G++)N[G]=T[O*I][G],H[G]=F[O*I][G];else for(W=Math.max(0,Math.min(P-2,O)),Z=Math.min(1,Math.max(0,O-W)),$.xy=function(U){return o.evalxy([],O,U)},$.dxy=function(U,V){return o.dxydj([],W,U,Z,V)},G=0;G<R;G++)N[G]=T[G][O*I],H[G]=F[G][O*I];return $.axisLetter=s,$.axis=C,$.crossAxis=E,$.value=M[O],$.constvar=l,$.index=O,$.x=N,$.y=H,$.smoothing=E.smoothing,$}if(C.tickmode==="array"){for(f=5e-15,h=[Math.floor((M.length-1-C.arraytick0)/C.arraydtick*(1+f)),Math.ceil(-C.arraytick0/C.arraydtick/(1+f))].sort(function(O,G){return O-G}),d=h[0]-1,p=h[1]+1,g=d;g<p;g++)u=C.arraytick0+C.arraydtick*g,!(u<0||u>M.length-1)&&w.push(i(B(u),{color:C.gridcolor,width:C.gridwidth,dash:C.griddash}));for(g=d;g<p;g++)if(c=C.arraytick0+C.arraydtick*g,_=Math.min(c+C.arraydtick,M.length-1),!(c<0||c>M.length-1)&&!(_<0||_>M.length-1))for(v=M[c],x=M[_],n=0;n<C.minorgridcount;n++)S=_-c,!(S<=0)&&(y=v+(x-v)*(n+1)/(C.minorgridcount+1)*(C.arraydtick/S),!(y<M[0]||y>M[M.length-1])&&k.push(i(L(y),{color:C.minorgridcolor,width:C.minorgridwidth,dash:C.minorgriddash})));C.startline&&A.push(i(B(0),{color:C.startlinecolor,width:C.startlinewidth})),C.endline&&A.push(i(B(M.length-1),{color:C.endlinecolor,width:C.endlinewidth}))}else{for(f=5e-15,h=[Math.floor((M[M.length-1]-C.tick0)/C.dtick*(1+f)),Math.ceil((M[0]-C.tick0)/C.dtick/(1+f))].sort(function(O,G){return O-G}),d=h[0],p=h[1],g=d;g<=p;g++)m=C.tick0+C.dtick*g,w.push(i(L(m),{color:C.gridcolor,width:C.gridwidth,dash:C.griddash}));for(g=d-1;g<p+1;g++)for(m=C.tick0+C.dtick*g,n=0;n<C.minorgridcount;n++)y=m+C.dtick*(n+1)/(C.minorgridcount+1),!(y<M[0]||y>M[M.length-1])&&k.push(i(L(y),{color:C.minorgridcolor,width:C.minorgridwidth,dash:C.minorgriddash}));C.startline&&A.push(i(L(M[0]),{color:C.startlinecolor,width:C.startlinewidth})),C.endline&&A.push(i(L(M[M.length-1]),{color:C.endlinecolor,width:C.endlinewidth}))}}}}),$le=de({"src/traces/carpet/calc_labels.js"(e,r){"use strict";var t=nn(),i=fn().extendFlat;r.exports=function(o,s){var l,n,u,c,f,h=s._labels=[],d=s._gridlines;for(l=0;l<d.length;l++)f=d[l],["start","both"].indexOf(s.showticklabels)!==-1&&(n=t.tickText(s,f.value,!1,!1,{first:l===0,last:l===d.length-1}),i(n,{prefix:u,suffix:c,endAnchor:!0,xy:f.xy(0),dxy:f.dxy(0,0),axis:f.axis,length:f.crossAxis.length,font:f.axis.tickfont,isFirst:l===0,isLast:l===d.length-1}),h.push(n)),["end","both"].indexOf(s.showticklabels)!==-1&&(n=t.tickText(s,f.value,!1,!1,{first:l===0,last:l===d.length-1}),i(n,{endAnchor:!1,xy:f.xy(f.crossLength-1),dxy:f.dxy(f.crossLength-2,1),axis:f.axis,length:f.crossAxis.length,font:f.axis.tickfont,isFirst:l===0,isLast:l===d.length-1}),h.push(n))}}}),Wle=de({"src/traces/carpet/calc_clippath.js"(e,r){"use strict";r.exports=function(i,a,o,s){var l,n,u,c=[],f=!!o.smoothing,h=!!s.smoothing,d=i[0].length-1,p=i.length-1;for(l=0,n=[],u=[];l<=d;l++)n[l]=i[0][l],u[l]=a[0][l];for(c.push({x:n,y:u,bicubic:f}),l=0,n=[],u=[];l<=p;l++)n[l]=i[l][d],u[l]=a[l][d];for(c.push({x:n,y:u,bicubic:h}),l=d,n=[],u=[];l>=0;l--)n[d-l]=i[p][l],u[d-l]=a[p][l];for(c.push({x:n,y:u,bicubic:f}),l=p,n=[],u=[];l>=0;l--)n[p-l]=i[l][0],u[p-l]=a[l][0];return c.push({x:n,y:u,bicubic:h}),c}}}),Yle=de({"src/traces/carpet/smooth_fill_2d_array.js"(e,r){"use strict";var t=Qt();r.exports=function(a,o,s){var l,n,u,c=[],f=[],h=a[0].length,d=a.length;function p(W,X){var Z=0,J,N=0;return W>0&&(J=a[X][W-1])!==void 0&&(N++,Z+=J),W<h-1&&(J=a[X][W+1])!==void 0&&(N++,Z+=J),X>0&&(J=a[X-1][W])!==void 0&&(N++,Z+=J),X<d-1&&(J=a[X+1][W])!==void 0&&(N++,Z+=J),Z/Math.max(1,N)}var g=0;for(l=0;l<h;l++)for(n=0;n<d;n++)a[n][l]===void 0&&(c.push(l),f.push(n),a[n][l]=p(l,n)),g=Math.max(g,Math.abs(a[n][l]));if(!c.length)return a;var m,y,_,v,x,S,M,C,w,k,A,b=1e-5,E=0,T=100,F=0,D=c.length;do{for(E=0,u=0;u<D;u++){l=c[u],n=f[u];var R=0,P=0,z,I,L,B,O,G;l===0?(O=Math.min(h-1,2),L=o[O],B=o[1],z=a[n][O],I=a[n][1],P+=I+(I-z)*(o[0]-B)/(B-L),R++):l===h-1&&(O=Math.max(0,h-3),L=o[O],B=o[h-2],z=a[n][O],I=a[n][h-2],P+=I+(I-z)*(o[h-1]-B)/(B-L),R++),(l===0||l===h-1)&&n>0&&n<d-1&&(m=s[n+1]-s[n],y=s[n]-s[n-1],P+=(y*a[n+1][l]+m*a[n-1][l])/(y+m),R++),n===0?(G=Math.min(d-1,2),L=s[G],B=s[1],z=a[G][l],I=a[1][l],P+=I+(I-z)*(s[0]-B)/(B-L),R++):n===d-1&&(G=Math.max(0,d-3),L=s[G],B=s[d-2],z=a[G][l],I=a[d-2][l],P+=I+(I-z)*(s[d-1]-B)/(B-L),R++),(n===0||n===d-1)&&l>0&&l<h-1&&(m=o[l+1]-o[l],y=o[l]-o[l-1],P+=(y*a[n][l+1]+m*a[n][l-1])/(y+m),R++),R?P/=R:(_=o[l+1]-o[l],v=o[l]-o[l-1],x=s[n+1]-s[n],S=s[n]-s[n-1],M=_*v*(_+v),C=x*S*(x+S),P=(M*(S*a[n+1][l]+x*a[n-1][l])+C*(v*a[n][l+1]+_*a[n][l-1]))/(C*(v+_)+M*(S+x))),w=P-a[n][l],k=w/g,E+=k*k,A=R?0:.85,a[n][l]+=w*(1+A)}E=Math.sqrt(E)}while(F++<T&&E>b);return t.log("Smoother converged to",E,"after",F,"iterations"),a}}}),Xle=de({"src/traces/carpet/constants.js"(e,r){"use strict";r.exports={RELATIVE_CULL_TOLERANCE:1e-6}}}),Zle=de({"src/traces/carpet/catmull_rom.js"(e,r){"use strict";var t=.5;r.exports=function(a,o,s,l){var n=a[0]-o[0],u=a[1]-o[1],c=s[0]-o[0],f=s[1]-o[1],h=Math.pow(n*n+u*u,t/2),d=Math.pow(c*c+f*f,t/2),p=(d*d*n-h*h*c)*l,g=(d*d*u-h*h*f)*l,m=d*(h+d)*3,y=h*(h+d)*3;return[[o[0]+(m&&p/m),o[1]+(m&&g/m)],[o[0]-(y&&p/y),o[1]-(y&&g/y)]]}}}),Kle=de({"src/traces/carpet/compute_control_points.js"(e,r){"use strict";var t=Zle(),i=Qt().ensureArray;function a(o,s,l){var n=-.5*l[0]+1.5*s[0],u=-.5*l[1]+1.5*s[1];return[(2*n+o[0])/3,(2*u+o[1])/3]}r.exports=function(s,l,n,u,c,f){var h,d,p,g,m,y,_,v,x,S,M=n[0].length,C=n.length,w=c?3*M-2:M,k=f?3*C-2:C;for(s=i(s,k),l=i(l,k),p=0;p<k;p++)s[p]=i(s[p],w),l[p]=i(l[p],w);for(d=0,g=0;d<C;d++,g+=f?3:1)for(m=s[g],y=l[g],_=n[d],v=u[d],h=0,p=0;h<M;h++,p+=c?3:1)m[p]=_[h],y[p]=v[h];if(c)for(d=0,g=0;d<C;d++,g+=f?3:1){for(h=1,p=3;h<M-1;h++,p+=3)x=t([n[d][h-1],u[d][h-1]],[n[d][h],u[d][h]],[n[d][h+1],u[d][h+1]],c),s[g][p-1]=x[0][0],l[g][p-1]=x[0][1],s[g][p+1]=x[1][0],l[g][p+1]=x[1][1];S=a([s[g][0],l[g][0]],[s[g][2],l[g][2]],[s[g][3],l[g][3]]),s[g][1]=S[0],l[g][1]=S[1],S=a([s[g][w-1],l[g][w-1]],[s[g][w-3],l[g][w-3]],[s[g][w-4],l[g][w-4]]),s[g][w-2]=S[0],l[g][w-2]=S[1]}if(f)for(p=0;p<w;p++){for(g=3;g<k-3;g+=3)x=t([s[g-3][p],l[g-3][p]],[s[g][p],l[g][p]],[s[g+3][p],l[g+3][p]],f),s[g-1][p]=x[0][0],l[g-1][p]=x[0][1],s[g+1][p]=x[1][0],l[g+1][p]=x[1][1];S=a([s[0][p],l[0][p]],[s[2][p],l[2][p]],[s[3][p],l[3][p]]),s[1][p]=S[0],l[1][p]=S[1],S=a([s[k-1][p],l[k-1][p]],[s[k-3][p],l[k-3][p]],[s[k-4][p],l[k-4][p]]),s[k-2][p]=S[0],l[k-2][p]=S[1]}if(c&&f)for(g=1;g<k;g+=(g+1)%3===0?2:1){for(p=3;p<w-3;p+=3)x=t([s[g][p-3],l[g][p-3]],[s[g][p],l[g][p]],[s[g][p+3],l[g][p+3]],c),s[g][p-1]=.5*(s[g][p-1]+x[0][0]),l[g][p-1]=.5*(l[g][p-1]+x[0][1]),s[g][p+1]=.5*(s[g][p+1]+x[1][0]),l[g][p+1]=.5*(l[g][p+1]+x[1][1]);S=a([s[g][0],l[g][0]],[s[g][2],l[g][2]],[s[g][3],l[g][3]]),s[g][1]=.5*(s[g][1]+S[0]),l[g][1]=.5*(l[g][1]+S[1]),S=a([s[g][w-1],l[g][w-1]],[s[g][w-3],l[g][w-3]],[s[g][w-4],l[g][w-4]]),s[g][w-2]=.5*(s[g][w-2]+S[0]),l[g][w-2]=.5*(l[g][w-2]+S[1])}return[s,l]}}}),Jle=de({"src/traces/carpet/create_spline_evaluator.js"(e,r){"use strict";r.exports=function(t,i,a,o,s){var l=i-2,n=a-2;return o&&s?function(u,c,f){u||(u=[]);var h,d,p,g,m,y,_=Math.max(0,Math.min(Math.floor(c),l)),v=Math.max(0,Math.min(Math.floor(f),n)),x=Math.max(0,Math.min(1,c-_)),S=Math.max(0,Math.min(1,f-v));_*=3,v*=3;var M=x*x,C=M*x,w=1-x,k=w*w,A=k*w,b=S*S,E=b*S,T=1-S,F=T*T,D=F*T;for(y=0;y<t.length;y++)m=t[y],h=A*m[v][_]+3*(k*x*m[v][_+1]+w*M*m[v][_+2])+C*m[v][_+3],d=A*m[v+1][_]+3*(k*x*m[v+1][_+1]+w*M*m[v+1][_+2])+C*m[v+1][_+3],p=A*m[v+2][_]+3*(k*x*m[v+2][_+1]+w*M*m[v+2][_+2])+C*m[v+2][_+3],g=A*m[v+3][_]+3*(k*x*m[v+3][_+1]+w*M*m[v+3][_+2])+C*m[v+3][_+3],u[y]=D*h+3*(F*S*d+T*b*p)+E*g;return u}:o?function(u,c,f){u||(u=[]);var h=Math.max(0,Math.min(Math.floor(c),l)),d=Math.max(0,Math.min(Math.floor(f),n)),p=Math.max(0,Math.min(1,c-h)),g=Math.max(0,Math.min(1,f-d)),m,y,_,v,x,S;h*=3;var M=p*p,C=M*p,w=1-p,k=w*w,A=k*w,b=1-g;for(x=0;x<t.length;x++)S=t[x],m=b*S[d][h]+g*S[d+1][h],y=b*S[d][h+1]+g*S[d+1][h+1],_=b*S[d][h+2]+g*S[d+1][h+1],v=b*S[d][h+3]+g*S[d+1][h+1],u[x]=A*m+3*(k*p*y+w*M*_)+C*v;return u}:s?function(u,c,f){u||(u=[]);var h=Math.max(0,Math.min(Math.floor(c),l)),d=Math.max(0,Math.min(Math.floor(f),n)),p=Math.max(0,Math.min(1,c-h)),g=Math.max(0,Math.min(1,f-d)),m,y,_,v,x,S;d*=3;var M=g*g,C=M*g,w=1-g,k=w*w,A=k*w,b=1-p;for(x=0;x<t.length;x++)S=t[x],m=b*S[d][h]+p*S[d][h+1],y=b*S[d+1][h]+p*S[d+1][h+1],_=b*S[d+2][h]+p*S[d+2][h+1],v=b*S[d+3][h]+p*S[d+3][h+1],u[x]=A*m+3*(k*g*y+w*M*_)+C*v;return u}:function(u,c,f){u||(u=[]);var h=Math.max(0,Math.min(Math.floor(c),l)),d=Math.max(0,Math.min(Math.floor(f),n)),p=Math.max(0,Math.min(1,c-h)),g=Math.max(0,Math.min(1,f-d)),m,y,_,v,x=1-g,S=1-p;for(_=0;_<t.length;_++)v=t[_],m=S*v[d][h]+p*v[d][h+1],y=S*v[d+1][h]+p*v[d+1][h+1],u[_]=x*m+g*y;return u}}}}),Qle=de({"src/traces/carpet/create_i_derivative_evaluator.js"(e,r){"use strict";r.exports=function(t,i,a){return i&&a?function(o,s,l,n,u){o||(o=[]);var c,f,h,d,p,g;s*=3,l*=3;var m=n*n,y=1-n,_=y*y,v=y*n*2,x=-3*_,S=3*(_-v),M=3*(v-m),C=3*m,w=u*u,k=w*u,A=1-u,b=A*A,E=b*A;for(g=0;g<t.length;g++)p=t[g],c=x*p[l][s]+S*p[l][s+1]+M*p[l][s+2]+C*p[l][s+3],f=x*p[l+1][s]+S*p[l+1][s+1]+M*p[l+1][s+2]+C*p[l+1][s+3],h=x*p[l+2][s]+S*p[l+2][s+1]+M*p[l+2][s+2]+C*p[l+2][s+3],d=x*p[l+3][s]+S*p[l+3][s+1]+M*p[l+3][s+2]+C*p[l+3][s+3],o[g]=E*c+3*(b*u*f+A*w*h)+k*d;return o}:i?function(o,s,l,n,u){o||(o=[]);var c,f,h,d;s*=3;var p=n*n,g=1-n,m=g*g,y=g*n*2,_=-3*m,v=3*(m-y),x=3*(y-p),S=3*p,M=1-u;for(h=0;h<t.length;h++)d=t[h],c=_*d[l][s]+v*d[l][s+1]+x*d[l][s+2]+S*d[l][s+3],f=_*d[l+1][s]+v*d[l+1][s+1]+x*d[l+1][s+2]+S*d[l+1][s+3],o[h]=M*c+u*f;return o}:a?function(o,s,l,n,u){o||(o=[]);var c,f,h,d,p,g;l*=3;var m=u*u,y=m*u,_=1-u,v=_*_,x=v*_;for(p=0;p<t.length;p++)g=t[p],c=g[l][s+1]-g[l][s],f=g[l+1][s+1]-g[l+1][s],h=g[l+2][s+1]-g[l+2][s],d=g[l+3][s+1]-g[l+3][s],o[p]=x*c+3*(v*u*f+_*m*h)+y*d;return o}:function(o,s,l,n,u){o||(o=[]);var c,f,h,d,p=1-u;for(h=0;h<t.length;h++)d=t[h],c=d[l][s+1]-d[l][s],f=d[l+1][s+1]-d[l+1][s],o[h]=p*c+u*f;return o}}}}),eue=de({"src/traces/carpet/create_j_derivative_evaluator.js"(e,r){"use strict";r.exports=function(t,i,a){return i&&a?function(o,s,l,n,u){o||(o=[]);var c,f,h,d,p,g;s*=3,l*=3;var m=n*n,y=m*n,_=1-n,v=_*_,x=v*_,S=u*u,M=1-u,C=M*M,w=M*u*2,k=-3*C,A=3*(C-w),b=3*(w-S),E=3*S;for(g=0;g<t.length;g++)p=t[g],c=k*p[l][s]+A*p[l+1][s]+b*p[l+2][s]+E*p[l+3][s],f=k*p[l][s+1]+A*p[l+1][s+1]+b*p[l+2][s+1]+E*p[l+3][s+1],h=k*p[l][s+2]+A*p[l+1][s+2]+b*p[l+2][s+2]+E*p[l+3][s+2],d=k*p[l][s+3]+A*p[l+1][s+3]+b*p[l+2][s+3]+E*p[l+3][s+3],o[g]=x*c+3*(v*n*f+_*m*h)+y*d;return o}:i?function(o,s,l,n,u){o||(o=[]);var c,f,h,d,p,g;s*=3;var m=u*u,y=m*u,_=1-u,v=_*_,x=v*_;for(p=0;p<t.length;p++)g=t[p],c=g[l+1][s]-g[l][s],f=g[l+1][s+1]-g[l][s+1],h=g[l+1][s+2]-g[l][s+2],d=g[l+1][s+3]-g[l][s+3],o[p]=x*c+3*(v*u*f+_*m*h)+y*d;return o}:a?function(o,s,l,n,u){o||(o=[]);var c,f,h,d;l*=3;var p=1-n,g=u*u,m=1-u,y=m*m,_=m*u*2,v=-3*y,x=3*(y-_),S=3*(_-g),M=3*g;for(h=0;h<t.length;h++)d=t[h],c=v*d[l][s]+x*d[l+1][s]+S*d[l+2][s]+M*d[l+3][s],f=v*d[l][s+1]+x*d[l+1][s+1]+S*d[l+2][s+1]+M*d[l+3][s+1],o[h]=p*c+n*f;return o}:function(o,s,l,n,u){o||(o=[]);var c,f,h,d,p=1-n;for(h=0;h<t.length;h++)d=t[h],c=d[l+1][s]-d[l][s],f=d[l+1][s+1]-d[l][s+1],o[h]=p*c+n*f;return o}}}}),tue=de({"src/traces/carpet/set_convert.js"(e,r){"use strict";var t=Xle(),i=bw().findBin,a=Kle(),o=Jle(),s=Qle(),l=eue();r.exports=function(u){var c=u._a,f=u._b,h=c.length,d=f.length,p=u.aaxis,g=u.baxis,m=c[0],y=c[h-1],_=f[0],v=f[d-1],x=c[c.length-1]-c[0],S=f[f.length-1]-f[0],M=x*t.RELATIVE_CULL_TOLERANCE,C=S*t.RELATIVE_CULL_TOLERANCE;m-=M,y+=M,_-=C,v+=C,u.isVisible=function(w,k){return w>m&&w<y&&k>_&&k<v},u.isOccluded=function(w,k){return w<m||w>y||k<_||k>v},u.setScale=function(){var w=u._x,k=u._y,A=a(u._xctrl,u._yctrl,w,k,p.smoothing,g.smoothing);u._xctrl=A[0],u._yctrl=A[1],u.evalxy=o([u._xctrl,u._yctrl],h,d,p.smoothing,g.smoothing),u.dxydi=s([u._xctrl,u._yctrl],p.smoothing,g.smoothing),u.dxydj=l([u._xctrl,u._yctrl],p.smoothing,g.smoothing)},u.i2a=function(w){var k=Math.max(0,Math.floor(w[0]),h-2),A=w[0]-k;return(1-A)*c[k]+A*c[k+1]},u.j2b=function(w){var k=Math.max(0,Math.floor(w[1]),h-2),A=w[1]-k;return(1-A)*f[k]+A*f[k+1]},u.ij2ab=function(w){return[u.i2a(w[0]),u.j2b(w[1])]},u.a2i=function(w){var k=Math.max(0,Math.min(i(w,c),h-2)),A=c[k],b=c[k+1];return Math.max(0,Math.min(h-1,k+(w-A)/(b-A)))},u.b2j=function(w){var k=Math.max(0,Math.min(i(w,f),d-2)),A=f[k],b=f[k+1];return Math.max(0,Math.min(d-1,k+(w-A)/(b-A)))},u.ab2ij=function(w){return[u.a2i(w[0]),u.b2j(w[1])]},u.i2c=function(w,k){return u.evalxy([],w,k)},u.ab2xy=function(w,k,A){if(!A&&(w<c[0]||w>c[h-1]|k<f[0]||k>f[d-1]))return[!1,!1];var b=u.a2i(w),E=u.b2j(k),T=u.evalxy([],b,E);if(A){var F=0,D=0,R=[],P,z,I,L;w<c[0]?(P=0,z=0,F=(w-c[0])/(c[1]-c[0])):w>c[h-1]?(P=h-2,z=1,F=(w-c[h-1])/(c[h-1]-c[h-2])):(P=Math.max(0,Math.min(h-2,Math.floor(b))),z=b-P),k<f[0]?(I=0,L=0,D=(k-f[0])/(f[1]-f[0])):k>f[d-1]?(I=d-2,L=1,D=(k-f[d-1])/(f[d-1]-f[d-2])):(I=Math.max(0,Math.min(d-2,Math.floor(E))),L=E-I),F&&(u.dxydi(R,P,I,z,L),T[0]+=R[0]*F,T[1]+=R[1]*F),D&&(u.dxydj(R,P,I,z,L),T[0]+=R[0]*D,T[1]+=R[1]*D)}return T},u.c2p=function(w,k,A){return[k.c2p(w[0]),A.c2p(w[1])]},u.p2x=function(w,k,A){return[k.p2c(w[0]),A.p2c(w[1])]},u.dadi=function(w){var k=Math.max(0,Math.min(c.length-2,w));return c[k+1]-c[k]},u.dbdj=function(w){var k=Math.max(0,Math.min(f.length-2,w));return f[k+1]-f[k]},u.dxyda=function(w,k,A,b){var E=u.dxydi(null,w,k,A,b),T=u.dadi(w,A);return[E[0]/T,E[1]/T]},u.dxydb=function(w,k,A,b){var E=u.dxydj(null,w,k,A,b),T=u.dbdj(k,b);return[E[0]/T,E[1]/T]},u.dxyda_rough=function(w,k,A){var b=x*(A||.1),E=u.ab2xy(w+b,k,!0),T=u.ab2xy(w-b,k,!0);return[(E[0]-T[0])*.5/b,(E[1]-T[1])*.5/b]},u.dxydb_rough=function(w,k,A){var b=S*(A||.1),E=u.ab2xy(w,k+b,!0),T=u.ab2xy(w,k-b,!0);return[(E[0]-T[0])*.5/b,(E[1]-T[1])*.5/b]},u.dpdx=function(w){return w._m},u.dpdy=function(w){return w._m}}}}),rue=de({"src/traces/carpet/calc.js"(e,r){"use strict";var t=nn(),i=Qt().isArray1D,a=Vle(),o=Gle(),s=Hle(),l=$le(),n=Wle(),u=t3(),c=Yle(),f=e3(),h=tue();r.exports=function(p,g){var m=t.getFromId(p,g.xaxis),y=t.getFromId(p,g.yaxis),_=g.aaxis,v=g.baxis,x=g.x,S=g.y,M=[];x&&i(x)&&M.push("x"),S&&i(S)&&M.push("y"),M.length&&f(g,_,v,"a","b",M);var C=g._a=g._a||g.a,w=g._b=g._b||g.b;x=g._x||g.x,S=g._y||g.y;var k={};if(g._cheater){var A=_.cheatertype==="index"?C.length:C,b=v.cheatertype==="index"?w.length:w;x=a(A,b,g.cheaterslope)}g._x=x=u(x),g._y=S=u(S),c(x,C,w),c(S,C,w),h(g),g.setScale();var E=o(x),T=o(S),F=.5*(E[1]-E[0]),D=.5*(E[1]+E[0]),R=.5*(T[1]-T[0]),P=.5*(T[1]+T[0]),z=1.3;return E=[D-F*z,D+F*z],T=[P-R*z,P+R*z],g._extremes[m._id]=t.findExtremes(m,E,{padded:!0}),g._extremes[y._id]=t.findExtremes(y,T,{padded:!0}),s(g,"a","b"),s(g,"b","a"),l(g,_),l(g,v),k.clipsegments=n(g._xctrl,g._yctrl,_,v),k.x=x,k.y=S,k.a=C,k.b=w,[k]}}}),iue=de({"src/traces/carpet/index.js"(e,r){"use strict";r.exports={attributes:IS(),supplyDefaults:jle(),plot:qle(),calc:rue(),animatable:!0,isContainer:!0,moduleType:"trace",name:"carpet",basePlotModule:ml(),categories:["cartesian","svg","carpet","carpetAxis","notLegendIsolatable","noMultiCategory","noHover","noSortingByValue"],meta:{}}}}),aue=de({"lib/carpet.js"(e,r){"use strict";r.exports=iue()}}),J8=de({"src/traces/scattercarpet/attributes.js"(e,r){"use strict";var t=Kd(),i=tl(),a=ri(),{hovertemplateAttrs:o,texttemplateAttrs:s,templatefallbackAttrs:l}=Vo(),n=cs(),u=fn().extendFlat,c=i.marker,f=i.line,h=c.line;r.exports={carpet:{valType:"string",editType:"calc"},a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},mode:u({},i.mode,{dflt:"markers"}),text:u({},i.text,{}),texttemplate:s({editType:"plot"},{keys:["a","b","text"]}),texttemplatefallback:l({editType:"plot"}),hovertext:u({},i.hovertext,{}),line:{color:f.color,width:f.width,dash:f.dash,backoff:f.backoff,shape:u({},f.shape,{values:["linear","spline"]}),smoothing:f.smoothing,editType:"calc"},connectgaps:i.connectgaps,fill:u({},i.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:t(),marker:u({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,angle:c.angle,angleref:c.angleref,standoff:c.standoff,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:u({width:h.width,dash:h.dash,editType:"calc"},n("marker.line")),gradient:c.gradient,editType:"calc"},n("marker")),textfont:i.textfont,textposition:i.textposition,selected:i.selected,unselected:i.unselected,hoverinfo:u({},a.hoverinfo,{flags:["a","b","text","name"]}),hoveron:i.hoveron,hovertemplate:o(),hovertemplatefallback:l(),zorder:i.zorder}}}),nue=de({"src/traces/scattercarpet/defaults.js"(e,r){"use strict";var t=Qt(),i=Zd(),a=bs(),o=Nh(),s=yd(),l=p1(),n=_d(),u=Jd(),c=J8();r.exports=function(h,d,p,g){function m(C,w){return t.coerce(h,d,c,C,w)}m("carpet"),d.xaxis="x",d.yaxis="y";var y=m("a"),_=m("b"),v=Math.min(y.length,_.length);if(!v){d.visible=!1;return}d._length=v,m("text"),m("texttemplate"),m("texttemplatefallback"),m("hovertext");var x=v<i.PTS_LINESONLY?"lines+markers":"lines";m("mode",x),a.hasMarkers(d)&&o(h,d,p,g,m,{gradient:!0}),a.hasLines(d)&&(s(h,d,p,g,m,{backoff:!0}),l(h,d,m),m("connectgaps")),a.hasText(d)&&n(h,d,g,m);var S=[];(a.hasMarkers(d)||a.hasText(d))&&(m("marker.maxdisplayed"),S.push("points")),m("fill"),d.fill!=="none"&&(u(h,d,p,m),a.hasLines(d)||l(h,d,m)),(d.fill==="tonext"||d.fill==="toself")&&S.push("fills");var M=m("hoveron",S.join("+")||"points");M!=="fills"&&(m("hovertemplate"),m("hovertemplatefallback")),m("zorder"),t.coerceSelectionMarkerOpacity(d,m)}}}),oue=de({"src/traces/scattercarpet/format_labels.js"(e,r){"use strict";r.exports=function(i,a){var o={},s=a._carpet,l=s.ab2ij([i.a,i.b]),n=Math.floor(l[0]),u=l[0]-n,c=Math.floor(l[1]),f=l[1]-c,h=s.evalxy([],n,c,u,f);return o.yLabel=h[1].toFixed(3),o}}}),RS=de({"src/traces/carpet/lookup_carpetid.js"(e,r){"use strict";r.exports=function(t,i){for(var a=t._fullData.length,o,s=0;s<a;s++){var l=t._fullData[s];if(l.index!==i.index&&l.type==="carpet"&&(o||(o=l),l.carpet===i.carpet))return l}return o}}}),sue=de({"src/traces/scattercarpet/calc.js"(e,r){"use strict";var t=da(),i=jh(),a=Qd(),o=nh(),s=Uh().calcMarkerSize,l=RS();r.exports=function(u,c){var f=c._carpetTrace=l(u,c);if(!(!f||!f.visible||f.visible==="legendonly")){var h;c.xaxis=f.xaxis,c.yaxis=f.yaxis;var d=c._length,p=new Array(d),g,m,y=!1;for(h=0;h<d;h++)if(g=c.a[h],m=c.b[h],t(g)&&t(m)){var _=f.ab2xy(+g,+m,!0),v=f.isVisible(+g,+m);v||(y=!0),p[h]={x:_[0],y:_[1],a:g,b:m,vis:v}}else p[h]={x:!1,y:!1};return c._needsCull=y,p[0].carpet=f,p[0].trace=c,s(c,d),i(u,c),a(p,c),o(p,c),p}}}}),lue=de({"src/traces/scattercarpet/plot.js"(e,r){"use strict";var t=v1(),i=nn(),a=hn();r.exports=function(s,l,n,u){var c,f,h,d=n[0][0].carpet,p=i.getFromId(s,d.xaxis||"x"),g=i.getFromId(s,d.yaxis||"y"),m={xaxis:p,yaxis:g,plot:l.plot};for(c=0;c<n.length;c++)f=n[c][0].trace,f._xA=p,f._yA=g;for(t(s,m,n,u),c=0;c<n.length;c++)f=n[c][0].trace,h=u.selectAll("g.trace"+f.uid+" .js-line"),a.setClipUrl(h,n[c][0].carpet._clipPathId,s)}}}),uue=de({"src/traces/scattercarpet/hover.js"(e,r){"use strict";var t=g1(),i=Qt().fillText;r.exports=function(o,s,l,n){var u=t(o,s,l,n);if(!u||u[0].index===!1)return;var c=u[0];if(c.index===void 0){var f=1-c.y0/o.ya._length,h=o.xa._length,d=h*f/2,p=h-d;return c.x0=Math.max(Math.min(c.x0,p),d),c.x1=Math.max(Math.min(c.x1,p),d),u}var g=c.cd[c.index];c.a=g.a,c.b=g.b,c.xLabelVal=void 0,c.yLabelVal=void 0;var m=c.trace,y=m._carpet,_=m._module.formatLabels(g,m);c.yLabel=_.yLabel,delete c.text;var v=[];function x(C,w){var k;C.labelprefix&&C.labelprefix.length>0?k=C.labelprefix.replace(/ = $/,""):k=C._hovertitle,v.push(k+": "+w.toFixed(3)+C.labelsuffix)}if(!m.hovertemplate){var S=g.hi||m.hoverinfo,M=S.split("+");M.indexOf("all")!==-1&&(M=["a","b","text"]),M.indexOf("a")!==-1&&x(y.aaxis,g.a),M.indexOf("b")!==-1&&x(y.baxis,g.b),v.push("y: "+c.yLabel),M.indexOf("text")!==-1&&i(g,m,v),c.extraText=v.join("<br>")}return u}}}),cue=de({"src/traces/scattercarpet/event_data.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){var n=s[l];return i.a=n.a,i.b=n.b,i.y=n.y,i}}}),fue=de({"src/traces/scattercarpet/index.js"(e,r){"use strict";r.exports={attributes:J8(),supplyDefaults:nue(),colorbar:Yu(),formatLabels:oue(),calc:sue(),plot:lue(),style:lf().style,styleOnSelect:lf().styleOnSelect,hoverPoints:uue(),selectPoints:Mv(),eventData:cue(),moduleType:"trace",name:"scattercarpet",basePlotModule:ml(),categories:["svg","carpet","symbols","showLegend","carpetDependent","zoomScale"],meta:{}}}}),hue=de({"lib/scattercarpet.js"(e,r){"use strict";r.exports=fue()}}),Q8=de({"src/traces/contourcarpet/attributes.js"(e,r){"use strict";var t=x1(),i=Vy(),a=cs(),o=fn().extendFlat,s=i.contours;r.exports=o({carpet:{valType:"string",editType:"calc"},z:t.z,a:t.x,a0:t.x0,da:t.dx,b:t.y,b0:t.y0,db:t.dy,text:t.text,hovertext:t.hovertext,transpose:t.transpose,atype:t.xtype,btype:t.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:"enumerated",values:["fill","lines","none"],dflt:"fill",editType:"calc"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:"calc",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:"plot"},zorder:i.zorder},a("",{cLetter:"z",autoColorDflt:!1}))}}),ej=de({"src/traces/contourcarpet/defaults.js"(e,r){"use strict";var t=Qt(),i=Qw(),a=Q8(),o=Hk(),s=d3(),l=p3();r.exports=function(u,c,f,h){function d(y,_){return t.coerce(u,c,a,y,_)}function p(y){return t.coerce2(u,c,a,y)}if(d("carpet"),u.a&&u.b){var g=i(u,c,d,h,"a","b");if(!g){c.visible=!1;return}d("text");var m=d("contours.type")==="constraint";m?o(u,c,d,h,f,{hasHover:!1}):(s(u,c,d,p),l(u,c,d,h,{hasHover:!1}))}else c._defaultColor=f,c._length=null;d("zorder")}}}),due=de({"src/traces/contourcarpet/calc.js"(e,r){"use strict";var t=hc(),i=Qt(),a=e3(),o=t3(),s=r3(),l=i3(),n=Ck(),u=ej(),c=RS(),f=zk();r.exports=function(p,g){var m=g._carpetTrace=c(p,g);if(!(!m||!m.visible||m.visible==="legendonly")){if(!g.a||!g.b){var y=p.data[m.index],_=p.data[g.index];_.a||(_.a=y.a),_.b||(_.b=y.b),u(_,g,g._defaultColor,p._fullLayout)}var v=h(p,g);return f(g,g._z),v}};function h(d,p){var g=p._carpetTrace,m=g.aaxis,y=g.baxis,_,v,x,S,M,C,w;m._minDtick=0,y._minDtick=0,i.isArray1D(p.z)&&a(p,m,y,"a","b",["z"]),_=p._a=p._a||p.a,S=p._b=p._b||p.b,_=_?m.makeCalcdata(p,"_a"):[],S=S?y.makeCalcdata(p,"_b"):[],v=p.a0||0,x=p.da||1,M=p.b0||0,C=p.db||1,w=p._z=o(p._z||p.z,p.transpose),p._emptypoints=l(w),s(w,p._emptypoints);var k=i.maxRowLength(w),A=p.xtype==="scaled"?"":_,b=n(p,A,v,x,k,m),E=p.ytype==="scaled"?"":S,T=n(p,E,M,C,w.length,y),F={a:b,b:T,z:w};return p.contours.type==="levels"&&p.contours.coloring!=="none"&&t(d,p,{vals:w,containerStr:"",cLetter:"z"}),[F]}}}),pue=de({"src/traces/carpet/axis_aligned_line.js"(e,r){"use strict";var t=Qt().isArrayOrTypedArray;r.exports=function(i,a,o,s){var l,n,u,c,f,h,d,p,g,m,y,_,v,x=t(o)?"a":"b",S=x==="a"?i.aaxis:i.baxis,M=S.smoothing,C=x==="a"?i.a2i:i.b2j,w=x==="a"?o:s,k=x==="a"?s:o,A=x==="a"?a.a.length:a.b.length,b=x==="a"?a.b.length:a.a.length,E=Math.floor(x==="a"?i.b2j(k):i.a2i(k)),T=x==="a"?function(X){return i.evalxy([],X,E)}:function(X){return i.evalxy([],E,X)};M&&(u=Math.max(0,Math.min(b-2,E)),c=E-u,n=x==="a"?function(X,Z){return i.dxydi([],X,u,Z,c)}:function(X,Z){return i.dxydj([],u,X,c,Z)});var F=C(w[0]),D=C(w[1]),R=F<D?1:-1,P=(D-F)*1e-8,z=R>0?Math.floor:Math.ceil,I=R>0?Math.ceil:Math.floor,L=R>0?Math.min:Math.max,B=R>0?Math.max:Math.min,O=z(F+P),G=I(D-P);d=T(F);var W=[[d]];for(l=O;l*R<G*R;l+=R)f=[],y=B(F,l),_=L(D,l+R),v=_-y,h=Math.max(0,Math.min(A-2,Math.floor(.5*(y+_)))),p=T(_),M&&(g=n(h,y-h),m=n(h,_-h),f.push([d[0]+g[0]/3*v,d[1]+g[1]/3*v]),f.push([p[0]-m[0]/3*v,p[1]-m[1]/3*v])),f.push(p),W.push(f),d=p;return W}}}),vue=de({"src/traces/contourcarpet/plot.js"(e,r){"use strict";var t=Yr(),i=Z8(),a=K8(),o=hn(),s=Qt(),l=Ok(),n=Nk(),u=v3(),c=Hy(),f=Uk(),h=jk(),d=qk(),p=RS(),g=pue();r.exports=function(A,b,E,T){var F=b.xaxis,D=b.yaxis;s.makeTraceGroups(T,E,"contour").each(function(R){var P=t.select(this),z=R[0],I=z.trace,L=I._carpetTrace=p(A,I),B=A.calcdata[L.index][0];if(!L.visible||L.visible==="legendonly")return;var O=z.a,G=z.b,W=I.contours,X=h(W,b,z),Z=W.type==="constraint",J=W._operation,N=Z?J==="="?"lines":"fill":W.coloring;function H(le){var ce=L.ab2xy(le[0],le[1],!0);return[F.c2p(ce[0]),D.c2p(ce[1])]}var $=[[O[0],G[G.length-1]],[O[O.length-1],G[G.length-1]],[O[O.length-1],G[0]],[O[0],G[0]]];l(X);var U=(O[O.length-1]-O[0])*1e-8,V=(G[G.length-1]-G[0])*1e-8;n(X,U,V);var j=X;W.type==="constraint"&&(j=f(X,J)),m(X,H);var q,Y,K,te,ne=[];for(te=B.clipsegments.length-1;te>=0;te--)q=B.clipsegments[te],Y=i([],q.x,F.c2p),K=i([],q.y,D.c2p),Y.reverse(),K.reverse(),ne.push(a(Y,K,q.bicubic));var se="M"+ne.join("L")+"Z";M(P,B.clipsegments,F,D,Z,N),C(I,P,F,D,j,$,H,L,B,N,se),y(P,X,A,z,W,b,L),o.setClipUrl(P,L._clipPathId,A)})};function m(k,A){var b,E,T,F,D,R,P,z,I;for(b=0;b<k.length;b++){for(F=k[b],D=F.pedgepaths=[],R=F.ppaths=[],E=0;E<F.edgepaths.length;E++){for(I=F.edgepaths[E],P=[],T=0;T<I.length;T++)P[T]=A(I[T]);D.push(P)}for(E=0;E<F.paths.length;E++){for(I=F.paths[E],z=[],T=0;T<I.length;T++)z[T]=A(I[T]);R.push(z)}}}function y(k,A,b,E,T,F,D){var R=b._context.staticPlot,P=s.ensureSingle(k,"g","contourlines"),z=T.showlines!==!1,I=T.showlabels,L=z&&I,B=u.createLines(P,z||I,A,R),O=u.createLineClip(P,L,b,E.trace.uid),G=k.selectAll("g.contourlabels").data(I?[0]:[]);if(G.exit().remove(),G.enter().append("g").classed("contourlabels",!0),I){var W=F.xaxis,X=F.yaxis,Z=W._length,J=X._length,N=[[[0,0],[Z,0],[Z,J],[0,J]]],H=[];s.clearLocationCache();var $=u.labelFormatter(b,E),U=o.tester.append("text").attr("data-notex",1).call(o.font,T.labelfont),V={left:0,right:Z,center:Z/2,top:0,bottom:J,middle:J/2},j=Math.sqrt(Z*Z+J*J),q=c.LABELDISTANCE*j/Math.max(1,A.length/c.LABELINCREASE);B.each(function(Y){var K=u.calcTextOpts(Y.level,$,U,b);t.select(this).selectAll("path").each(function(te){var ne=this,se=s.getVisibleSegment(ne,V,K.height/2);if(se&&(_(ne,te,Y,se,D,K.height),!(se.len<(K.width+K.height)*c.LABELMIN)))for(var le=Math.min(Math.ceil(se.len/q),c.LABELMAX),ce=0;ce<le;ce++){var pe=u.findBestTextLocation(ne,se,K,H,V);if(!pe)break;u.addLabelData(pe,K,H,N)}})}),U.remove(),u.drawLabels(G,H,b,O,L?N:null)}I&&!z&&B.remove()}function _(k,A,b,E,T,F){for(var D,R=0;R<b.pedgepaths.length;R++)A===b.pedgepaths[R]&&(D=b.edgepaths[R]);if(!D)return;var P=T.a[0],z=T.a[T.a.length-1],I=T.b[0],L=T.b[T.b.length-1];function B(Z,J){var N=0,H,$=.1;return(Math.abs(Z[0]-P)<$||Math.abs(Z[0]-z)<$)&&(H=x(T.dxydb_rough(Z[0],Z[1],$)),N=Math.max(N,F*S(J,H)/2)),(Math.abs(Z[1]-I)<$||Math.abs(Z[1]-L)<$)&&(H=x(T.dxyda_rough(Z[0],Z[1],$)),N=Math.max(N,F*S(J,H)/2)),N}var O=v(k,0,1),G=v(k,E.total,E.total-1),W=B(D[0],O),X=E.total-B(D[D.length-1],G);E.min<W&&(E.min=W),E.max>X&&(E.max=X),E.len=E.max-E.min}function v(k,A,b){var E=k.getPointAtLength(A),T=k.getPointAtLength(b),F=T.x-E.x,D=T.y-E.y,R=Math.sqrt(F*F+D*D);return[F/R,D/R]}function x(k){var A=Math.sqrt(k[0]*k[0]+k[1]*k[1]);return[k[0]/A,k[1]/A]}function S(k,A){var b=Math.abs(k[0]*A[0]+k[1]*A[1]),E=Math.sqrt(1-b*b);return E/b}function M(k,A,b,E,T,F){var D,R,P,z,I=s.ensureSingle(k,"g","contourbg"),L=I.selectAll("path").data(F==="fill"&&!T?[0]:[]);L.enter().append("path"),L.exit().remove();var B=[];for(z=0;z<A.length;z++)D=A[z],R=i([],D.x,b.c2p),P=i([],D.y,E.c2p),B.push(a(R,P,D.bicubic));L.attr("d","M"+B.join("L")+"Z").style("stroke","none")}function C(k,A,b,E,T,F,D,R,P,z,I){var L=z==="fill";L&&d(T,k.contours);var B=s.ensureSingle(A,"g","contourfill"),O=B.selectAll("path").data(L?T:[]);O.enter().append("path"),O.exit().remove(),O.each(function(G){var W=(G.prefixBoundary?I:"")+w(k,G,F,D,R,P,b,E);W?t.select(this).attr("d",W).style("stroke","none"):t.select(this).remove()})}function w(k,A,b,E,T,F,D,R){var P,z="",I=A.edgepaths.map(function(K,te){return te}),L=!0,B,O,G,W,X,Z,J=Math.abs(b[0][0]-b[2][0])*1e-4,N=Math.abs(b[0][1]-b[2][1])*1e-4;function H(K){return Math.abs(K[1]-b[0][1])<N}function $(K){return Math.abs(K[1]-b[2][1])<N}function U(K){return Math.abs(K[0]-b[0][0])<J}function V(K){return Math.abs(K[0]-b[2][0])<J}function j(K,te){var ne,se,le,ce,pe="";for(H(K)&&!V(K)||$(K)&&!U(K)?(ce=T.aaxis,le=g(T,F,[K[0],te[0]],.5*(K[1]+te[1]))):(ce=T.baxis,le=g(T,F,.5*(K[0]+te[0]),[K[1],te[1]])),ne=1;ne<le.length;ne++)for(pe+=ce.smoothing?"C":"L",se=0;se<le[ne].length;se++){var xe=le[ne][se];pe+=[D.c2p(xe[0]),R.c2p(xe[1])]+" "}return pe}for(P=0,B=null;I.length;){var q=A.edgepaths[P][0];for(B&&(z+=j(B,q)),Z=o.smoothopen(A.edgepaths[P].map(E),A.smoothing),z+=L?Z:Z.replace(/^M/,"L"),I.splice(I.indexOf(P),1),B=A.edgepaths[P][A.edgepaths[P].length-1],W=-1,G=0;G<4;G++){if(!B){s.log("Missing end?",P,A);break}for(H(B)&&!V(B)?O=b[1]:U(B)?O=b[0]:$(B)?O=b[3]:V(B)&&(O=b[2]),X=0;X<A.edgepaths.length;X++){var Y=A.edgepaths[X][0];Math.abs(B[0]-O[0])<J?Math.abs(B[0]-Y[0])<J&&(Y[1]-B[1])*(O[1]-Y[1])>=0&&(O=Y,W=X):Math.abs(B[1]-O[1])<N?Math.abs(B[1]-Y[1])<N&&(Y[0]-B[0])*(O[0]-Y[0])>=0&&(O=Y,W=X):s.log("endpt to newendpt is not vert. or horz.",B,O,Y)}if(W>=0)break;z+=j(B,O),B=O}if(W===A.edgepaths.length){s.log("unclosed perimeter path");break}P=W,L=I.indexOf(P)===-1,L&&(P=I[0],z+=j(B,O)+"Z",B=null)}for(P=0;P<A.paths.length;P++)z+=o.smoothclosed(A.paths[P].map(E),A.smoothing);return z}}}),mue=de({"src/traces/contourcarpet/index.js"(e,r){"use strict";r.exports={attributes:Q8(),supplyDefaults:ej(),colorbar:g3(),calc:due(),plot:vue(),style:m3(),moduleType:"trace",name:"contourcarpet",basePlotModule:ml(),categories:["cartesian","svg","carpet","contour","symbols","showLegend","hasLines","carpetDependent","noHover","noSortingByValue"],meta:{}}}}),gue=de({"lib/contourcarpet.js"(e,r){"use strict";r.exports=mue()}}),zS=de({"src/traces/ohlc/attributes.js"(e,r){"use strict";var t=Qt().extendFlat,i=tl(),a=Ns().axisHoverFormat,{hovertemplateAttrs:o,templatefallbackAttrs:s}=Vo(),l=fu().dash,n=ki(),u=w1(),c=u.INCREASING.COLOR,f=u.DECREASING.COLOR,h=i.line;function d(p){return{line:{color:t({},h.color,{dflt:p}),width:h.width,dash:l,editType:"style"},editType:"style"}}r.exports={xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,xhoverformat:a("x"),yhoverformat:a("y"),x:{valType:"data_array",editType:"calc+clearAxisTypes"},open:{valType:"data_array",editType:"calc"},high:{valType:"data_array",editType:"calc"},low:{valType:"data_array",editType:"calc"},close:{valType:"data_array",editType:"calc"},line:{width:t({},h.width,{}),dash:t({},l,{}),editType:"style"},increasing:d(c),decreasing:d(f),text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:o({},{keys:["open","high","low","close"]}),hovertemplatefallback:s(),tickwidth:{valType:"number",min:0,max:.5,dflt:.3,editType:"calc"},hoverlabel:t({},n.hoverlabel,{split:{valType:"boolean",dflt:!1,editType:"style"}}),zorder:i.zorder}}}),tj=de({"src/traces/ohlc/ohlc_defaults.js"(e,r){"use strict";var t=Ma(),i=Qt();r.exports=function(o,s,l,n){var u=l("x"),c=l("open"),f=l("high"),h=l("low"),d=l("close");l("hoverlabel.split");var p=t.getComponentMethod("calendars","handleTraceDefaults");if(p(o,s,["x"],n),!!(c&&f&&h&&d)){var g=Math.min(c.length,f.length,h.length,d.length);return u&&(g=Math.min(g,i.minRowLength(u))),s._length=g,g}}}}),yue=de({"src/traces/ohlc/defaults.js"(e,r){"use strict";var t=Qt(),i=tj(),a=gd(),o=zS();r.exports=function(n,u,c,f){function h(p,g){return t.coerce(n,u,o,p,g)}var d=i(n,u,h,f);if(!d){u.visible=!1;return}a(n,u,f,h,{x:!0}),h("xhoverformat"),h("yhoverformat"),h("line.width"),h("line.dash"),s(n,u,h,"increasing"),s(n,u,h,"decreasing"),h("text"),h("hovertext"),h("hovertemplate"),h("hovertemplatefallback"),h("tickwidth"),f._requestRangeslider[u.xaxis]=!0,h("zorder")};function s(l,n,u,c){u(c+".line.color"),u(c+".line.width",n.line.width),u(c+".line.dash",n.line.dash)}}}),rj=de({"src/traces/ohlc/calc.js"(e,r){"use strict";var t=Qt(),i=t._,a=nn(),o=xd(),s=cn().BADNUM;function l(f,h){var d=a.getFromId(f,h.xaxis),p=a.getFromId(f,h.yaxis),g=c(f,d,h),m=h._minDiff;h._minDiff=null;var y=h._origX;h._origX=null;var _=h._xcalc;h._xcalc=null;var v=u(f,h,y,_,p,n);return h._extremes[d._id]=a.findExtremes(d,_,{vpad:m/2}),v.length?(t.extendFlat(v[0].t,{wHover:m/2,tickLen:g}),v):[{t:{empty:!0}}]}function n(f,h,d,p){return{o:f,h,l:d,c:p}}function u(f,h,d,p,g,m){for(var y=g.makeCalcdata(h,"open"),_=g.makeCalcdata(h,"high"),v=g.makeCalcdata(h,"low"),x=g.makeCalcdata(h,"close"),S=t.isArrayOrTypedArray(h.text),M=t.isArrayOrTypedArray(h.hovertext),C=!0,w=null,k=!!h.xperiodalignment,A=[],b=0;b<p.length;b++){var E=p[b],T=y[b],F=_[b],D=v[b],R=x[b];if(E!==s&&T!==s&&F!==s&&D!==s&&R!==s){R===T?w!==null&&R!==w&&(C=R>w):C=R>T,w=R;var P=m(T,F,D,R);P.pos=E,P.yc=(T+R)/2,P.i=b,P.dir=C?"increasing":"decreasing",P.x=P.pos,P.y=[D,F],k&&(P.orig_p=d[b]),S&&(P.tx=h.text[b]),M&&(P.htx=h.hovertext[b]),A.push(P)}else A.push({pos:E,empty:!0})}return h._extremes[g._id]=a.findExtremes(g,t.concat(v,_),{padded:!0}),A.length&&(A[0].t={labels:{open:i(f,"open:")+" ",high:i(f,"high:")+" ",low:i(f,"low:")+" ",close:i(f,"close:")+" "}}),A}function c(f,h,d){var p=d._minDiff;if(!p){var g=f._fullData,m=[];p=1/0;var y;for(y=0;y<g.length;y++){var _=g[y];if(_.type==="ohlc"&&_.visible===!0&&_.xaxis===h._id){m.push(_);var v=h.makeCalcdata(_,"x");_._origX=v;var x=o(d,h,"x",v).vals;_._xcalc=x;var S=t.distinctVals(x).minDiff;S&&isFinite(S)&&(p=Math.min(p,S))}}for(p===1/0&&(p=1),y=0;y<m.length;y++)m[y]._minDiff=p}return p*d.tickwidth}r.exports={calc:l,calcCommon:u}}}),_ue=de({"src/traces/ohlc/plot.js"(e,r){"use strict";var t=Yr(),i=Qt();r.exports=function(o,s,l,n){var u=s.yaxis,c=s.xaxis,f=!!c.rangebreaks;i.makeTraceGroups(n,l,"trace ohlc").each(function(h){var d=t.select(this),p=h[0],g=p.t,m=p.trace;if(m.visible!==!0||g.empty){d.remove();return}var y=g.tickLen,_=d.selectAll("path").data(i.identity);_.enter().append("path"),_.exit().remove(),_.attr("d",function(v){if(v.empty)return"M0,0Z";var x=c.c2p(v.pos-y,!0),S=c.c2p(v.pos+y,!0),M=f?(x+S)/2:c.c2p(v.pos,!0),C=u.c2p(v.o,!0),w=u.c2p(v.h,!0),k=u.c2p(v.l,!0),A=u.c2p(v.c,!0);return"M"+x+","+C+"H"+M+"M"+M+","+w+"V"+k+"M"+S+","+A+"H"+M})})}}}),xue=de({"src/traces/ohlc/style.js"(e,r){"use strict";var t=Yr(),i=hn(),a=ta();r.exports=function(s,l,n){var u=n||t.select(s).selectAll("g.ohlclayer").selectAll("g.trace");u.style("opacity",function(c){return c[0].trace.opacity}),u.each(function(c){var f=c[0].trace;t.select(this).selectAll("path").each(function(h){if(!h.empty){var d=f[h.dir].line;t.select(this).style("fill","none").call(a.stroke,d.color).call(i.dashLine,d.dash,d.width).style("opacity",f.selectedpoints&&!h.selected?.3:1)}})})}}}),ij=de({"src/traces/ohlc/hover.js"(e,r){"use strict";var t=nn(),i=Qt(),a=$s(),o=ta(),s=Qt().fillText,l=w1(),n={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function u(d,p,g,m){var y=d.cd,_=y[0].trace;return _.hoverlabel.split?f(d,p,g,m):h(d,p,g,m)}function c(d,p,g,m){var y=d.cd,_=d.xa,v=y[0].trace,x=y[0].t,S=v.type,M=S==="ohlc"?"l":"min",C=S==="ohlc"?"h":"max",w,k,A=x.bPos||0,b=function(G){return G.pos+A-p},E=x.bdPos||x.tickLen,T=x.wHover,F=Math.min(1,E/Math.abs(_.r2c(_.range[1])-_.r2c(_.range[0])));w=d.maxHoverDistance-F,k=d.maxSpikeDistance-F;function D(G){var W=b(G);return a.inbox(W-T,W+T,w)}function R(G){var W=G[M],X=G[C];return W===X||a.inbox(W-g,X-g,w)}function P(G){return(D(G)+R(G))/2}var z=a.getDistanceFunction(m,D,R,P);if(a.getClosest(y,z,d),d.index===!1)return null;var I=y[d.index];if(I.empty)return null;var L=I.dir,B=v[L],O=B.line.color;return o.opacity(O)&&B.line.width?d.color=O:d.color=B.fillcolor,d.x0=_.c2p(I.pos+A-E,!0),d.x1=_.c2p(I.pos+A+E,!0),d.xLabelVal=I.orig_p!==void 0?I.orig_p:I.pos,d.spikeDistance=P(I)*k/w,d.xSpike=_.c2p(I.pos,!0),d}function f(d,p,g,m){var y=d.cd,_=d.ya,v=y[0].trace,x=y[0].t,S=[],M=c(d,p,g,m);if(!M)return[];var C=y[M.index],w=C.hi||v.hoverinfo||"";if(w==="none"||w==="skip")return[];for(var k=["high","open","close","low"],A={},b=0;b<k.length;b++){var E=k[b],T=v[E][M.index],F=_.c2p(T,!0),D;T in A?(D=A[T],D.yLabel+="<br>"+x.labels[E]+t.hoverLabelText(_,T,v.yhoverformat)):(D=i.extendFlat({},M),D.y0=D.y1=F,D.yLabelVal=T,D.yLabel=x.labels[E]+t.hoverLabelText(_,T,v.yhoverformat),D.name="",S.push(D),A[T]=D)}return S}function h(d,p,g,m){var y=d.cd,_=d.ya,v=y[0].trace,x=y[0].t,S=c(d,p,g,m);if(!S)return[];var M=S.index,C=y[M],w=S.index=C.i,k=C.dir;function A(P){return x.labels[P]+t.hoverLabelText(_,v[P][w],v.yhoverformat)}var b=C.hi||v.hoverinfo||"",E=b.split("+"),T=b==="all",F=T||E.indexOf("y")!==-1,D=T||E.indexOf("text")!==-1,R=F?[A("open"),A("high"),A("low"),A("close")+"  "+n[k]]:[];return D&&s(C,v,R),S.extraText=R.join("<br>"),S.y0=S.y1=_.c2p(C.yc,!0),[S]}r.exports={hoverPoints:u,hoverSplit:f,hoverOnPoints:h}}}),aj=de({"src/traces/ohlc/select.js"(e,r){"use strict";r.exports=function(i,a){var o=i.cd,s=i.xaxis,l=i.yaxis,n=[],u,c=o[0].t.bPos||0;if(a===!1)for(u=0;u<o.length;u++)o[u].selected=0;else for(u=0;u<o.length;u++){var f=o[u];a.contains([s.c2p(f.pos+c),l.c2p(f.yc)],null,f.i,i)?(n.push({pointNumber:f.i,x:s.c2d(f.pos),y:l.c2d(f.yc)}),f.selected=1):f.selected=0}return n}}}),bue=de({"src/traces/ohlc/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"ohlc",basePlotModule:ml(),categories:["cartesian","svg","showLegend"],meta:{},attributes:zS(),supplyDefaults:yue(),calc:rj().calc,plot:_ue(),style:xue(),hoverPoints:ij().hoverPoints,selectPoints:aj()}}}),wue=de({"lib/ohlc.js"(e,r){"use strict";r.exports=bue()}}),nj=de({"src/traces/candlestick/attributes.js"(e,r){"use strict";var t=Qt().extendFlat,i=Ns().axisHoverFormat,a=zS(),o=Ny();function s(l){return{line:{color:t({},o.line.color,{dflt:l}),width:o.line.width,editType:"style"},fillcolor:o.fillcolor,editType:"style"}}r.exports={xperiod:a.xperiod,xperiod0:a.xperiod0,xperiodalignment:a.xperiodalignment,xhoverformat:i("x"),yhoverformat:i("y"),x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:t({},o.line.width,{}),editType:"style"},increasing:s(a.increasing.line.color.dflt),decreasing:s(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,hovertemplate:a.hovertemplate,hovertemplatefallback:a.hovertemplatefallback,whiskerwidth:t({},o.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel,zorder:o.zorder}}}),Tue=de({"src/traces/candlestick/defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=tj(),o=gd(),s=nj();r.exports=function(u,c,f,h){function d(g,m){return t.coerce(u,c,s,g,m)}var p=a(u,c,d,h);if(!p){c.visible=!1;return}o(u,c,h,d,{x:!0}),d("xhoverformat"),d("yhoverformat"),d("line.width"),l(u,c,d,"increasing"),l(u,c,d,"decreasing"),d("text"),d("hovertext"),d("hovertemplate"),d("hovertemplatefallback"),d("whiskerwidth"),h._requestRangeslider[c.xaxis]=!0,d("zorder")};function l(n,u,c,f){var h=c(f+".line.color");c(f+".line.width",u.line.width),c(f+".fillcolor",i.addOpacity(h,.5))}}}),Aue=de({"src/traces/candlestick/calc.js"(e,r){"use strict";var t=Qt(),i=nn(),a=xd(),o=rj().calcCommon;r.exports=function(l,n){var u=l._fullLayout,c=i.getFromId(l,n.xaxis),f=i.getFromId(l,n.yaxis),h=c.makeCalcdata(n,"x"),d=a(n,c,"x",h).vals,p=o(l,n,h,d,f,s);return p.length?(t.extendFlat(p[0].t,{num:u._numBoxes,dPos:t.distinctVals(d).minDiff/2,posLetter:"x",valLetter:"y"}),u._numBoxes++,p):[{t:{empty:!0}}]};function s(l,n,u,c){return{min:u,q1:Math.min(l,c),med:c,q3:Math.max(l,c),max:n}}}}),Mue=de({"src/traces/candlestick/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"candlestick",basePlotModule:ml(),categories:["cartesian","svg","showLegend","candlestick","boxLayout"],meta:{},attributes:nj(),layoutAttributes:jy(),supplyLayoutDefaults:Xw().supplyLayoutDefaults,crossTraceCalc:Zw().crossTraceCalc,supplyDefaults:Tue(),calc:Aue(),plot:Kw().plot,layerName:"boxlayer",style:Jw().style,hoverPoints:ij().hoverPoints,selectPoints:aj()}}}),Sue=de({"lib/candlestick.js"(e,r){"use strict";r.exports=Mue()}}),oj=de({"src/plots/polar/set_convert.js"(e,r){"use strict";var t=Qt(),i=Yd(),a=t.deg2rad,o=t.rad2deg;r.exports=function(f,h,d){switch(i(f,d),f._id){case"x":case"radialaxis":s(f,h);break;case"angularaxis":u(f,h);break}};function s(c,f){var h=f._subplot;c.setGeometry=function(){var d=c._rl[0],p=c._rl[1],g=h.innerRadius,m=(h.radius-g)/(p-d),y=g/m,_=d>p?function(v){return v<=0}:function(v){return v>=0};c.c2g=function(v){var x=c.c2l(v)-d;return(_(x)?x:0)+y},c.g2c=function(v){return c.l2c(v+d-y)},c.g2p=function(v){return v*m},c.c2p=function(v){return c.g2p(c.c2g(v))}}}function l(c,f){return f==="degrees"?a(c):c}function n(c,f){return f==="degrees"?o(c):c}function u(c,f){var h=c.type;if(h==="linear"){var d=c.d2c,p=c.c2d;c.d2c=function(g,m){return l(d(g),m)},c.c2d=function(g,m){return p(n(g,m))}}c.makeCalcdata=function(g,m){var y=g[m],_=g._length,v,x,S=function(A){return c.d2c(A,g.thetaunit)};if(y)for(v=new Array(_),x=0;x<_;x++)v[x]=S(y[x]);else{var M=m+"0",C="d"+m,w=M in g?S(g[M]):0,k=g[C]?S(g[C]):(c.period||2*Math.PI)/_;for(v=new Array(_),x=0;x<_;x++)v[x]=w+x*k}return v},c.setGeometry=function(){var g=f.sector,m=g.map(a),y={clockwise:-1,counterclockwise:1}[c.direction],_=a(c.rotation),v=function(b){return y*b+_},x=function(b){return(b-_)/y},S,M,C,w;switch(h){case"linear":M=S=t.identity,w=a,C=o,c.range=t.isFullCircle(m)?[g[0],g[0]+360]:m.map(x).map(o);break;case"category":var k=c._categories.length,A=c.period?Math.max(c.period,k):k;A===0&&(A=1),M=w=function(b){return b*2*Math.PI/A},S=C=function(b){return b*A/Math.PI/2},c.range=[0,A];break}c.c2g=function(b){return v(M(b))},c.g2c=function(b){return S(x(b))},c.t2g=function(b){return v(w(b))},c.g2t=function(b){return C(x(b))}}}}}),BS=de({"src/plots/polar/constants.js"(e,r){"use strict";r.exports={attr:"subplot",name:"polar",axisNames:["angularaxis","radialaxis"],axisName2dataArray:{angularaxis:"theta",radialaxis:"r"},layerNames:["draglayer","plotbg","backplot","angular-grid","radial-grid","frontplot","angular-line","radial-line","angular-axis","radial-axis"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}}}),OS=de({"src/plots/polar/helpers.js"(e,r){"use strict";var t=Qt(),i=Fy().tester,a=t.findIndexOfMin,o=t.isAngleInsideSector,s=t.angleDelta,l=t.angleDist;function n(x,S,M,C,w){if(!o(S,C))return!1;var k,A;M[0]<M[1]?(k=M[0],A=M[1]):(k=M[1],A=M[0]);var b=i(d(k,C[0],C[1],w)),E=i(d(A,C[0],C[1],w)),T=[x*Math.cos(S),x*Math.sin(S)];return E.contains(T)&&!b.contains(T)}function u(x,S,M,C){var w,k,A=C[0],b=C[1],E=m(Math.sin(S)-Math.sin(x)),T=m(Math.cos(S)-Math.cos(x)),F=Math.tan(M),D=m(1/F),R=E/T,P=b-R*A;return D?E&&T?(w=P/(F-R),k=F*w):T?(w=b*D,k=b):(w=A,k=A*F):E&&T?(w=0,k=P):T?(w=0,k=b):w=k=NaN,[w,k]}function c(x,S,M,C){var w=-S*M,k=S*S+1,A=2*(S*w-M),b=w*w+M*M-x*x,E=Math.sqrt(A*A-4*k*b),T=(-A+E)/(2*k),F=(-A-E)/(2*k);return[[T,S*T+w+C],[F,S*F+w+C]]}function f(x,S){var M=S.length,C=new Array(M+1),w;for(w=0;w<M;w++){var k=S[w];C[w]=[x*Math.cos(k),x*Math.sin(k)]}return C[w]=C[0].slice(),C}function h(x,S,M,C){var w=C.length,k=[],A,b;function E(B){return[x*Math.cos(B),x*Math.sin(B)]}function T(B,O,G){return u(B,O,G,E(B))}function F(B){return t.mod(B,w)}function D(B){return o(B,[S,M])}var R=a(C,function(B){return D(B)?l(B,S):1/0}),P=T(C[R],C[F(R-1)],S);for(k.push(P),A=R,b=0;b<w;A++,b++){var z=C[F(A)];if(!D(z))break;k.push(E(z))}var I=a(C,function(B){return D(B)?l(B,M):1/0}),L=T(C[I],C[F(I+1)],M);return k.push(L),k.push([0,0]),k.push(k[0].slice()),k}function d(x,S,M,C){return t.isFullCircle([S,M])?f(x,C):h(x,S,M,C)}function p(x,S,M,C){for(var w=1/0,k=1/0,A=d(x,S,M,C),b=0;b<A.length;b++){var E=A[b];w=Math.min(w,E[0]),k=Math.min(k,-E[1])}return[w,k]}function g(x,S){var M=function(k){var A=s(k,x);return A>0?A:1/0},C=a(S,M),w=t.mod(C+1,S.length);return[S[C],S[w]]}function m(x){return Math.abs(x)>1e-10?x:0}function y(x,S,M){S=S||0,M=M||0;for(var C=x.length,w=new Array(C),k=0;k<C;k++){var A=x[k];w[k]=[S+A[0],M-A[1]]}return w}function _(x,S,M,C,w,k){var A=d(x,S,M,C);return"M"+y(A,w,k).join("L")}function v(x,S,M,C,w,k,A){var b,E;x<S?(b=x,E=S):(b=S,E=x);var T=y(d(b,M,C,w),k,A),F=y(d(E,M,C,w),k,A);return"M"+F.reverse().join("L")+"M"+T.join("L")}r.exports={isPtInsidePolygon:n,findPolygonOffset:p,findEnclosingVertexAngles:g,findIntersectionXY:u,findXYatLength:c,clampTiny:m,pathPolygon:_,pathPolygonAnnulus:v}}}),sj=de({"src/plots/smith/helpers.js"(e,r){"use strict";function t(n){return n<0?-1:n>0?1:0}function i(n){var u=n[0],c=n[1];if(!isFinite(u)||!isFinite(c))return[1,0];var f=(u+1)*(u+1)+c*c;return[(u*u+c*c-1)/f,2*c/f]}function a(n,u){var c=u[0],f=u[1];return[c*n.radius+n.cx,-f*n.radius+n.cy]}function o(n,u){return u*n.radius}function s(n,u,c,f){var h=a(n,i([c,u])),d=h[0],p=h[1],g=a(n,i([f,u])),m=g[0],y=g[1];if(u===0)return["M"+d+","+p,"L"+m+","+y].join(" ");var _=o(n,1/Math.abs(u));return["M"+d+","+p,"A"+_+","+_+" 0 0,"+(u<0?1:0)+" "+m+","+y].join(" ")}function l(n,u,c,f){var h=o(n,1/(u+1)),d=a(n,i([u,c])),p=d[0],g=d[1],m=a(n,i([u,f])),y=m[0],_=m[1];if(t(c)!==t(f)){var v=a(n,i([u,0])),x=v[0],S=v[1];return["M"+p+","+g,"A"+h+","+h+" 0 0,"+(0<c?0:1)+" "+x+","+S,"A"+h+","+h+" 0 0,"+(f<0?0:1)+y+","+_].join(" ")}return["M"+p+","+g,"A"+h+","+h+" 0 0,"+(f<c?0:1)+" "+y+","+_].join(" ")}r.exports={smith:i,reactanceArc:s,resistanceArc:l,smithTransform:a}}}),lj=de({"src/plots/polar/polar.js"(e,r){"use strict";var t=Yr(),i=Ma(),a=Qt(),o=a.strRotate,s=a.strTranslate,l=ta(),n=hn(),u=Es(),c=nn(),f=Yd(),h=oj(),d=vd().doAutoRange,p=QE(),g=Uc(),m=$s(),y=xv(),_=Zl().prepSelect,v=Zl().selectOnClick,x=Zl().clearOutline,S=md(),M=Cy(),C=Ly().redrawReglTraces,w=Bl().MID_SHIFT,k=BS(),A=OS(),b=sj(),E=b.smith,T=b.reactanceArc,F=b.resistanceArc,D=b.smithTransform,R=a._,P=a.mod,z=a.deg2rad,I=a.rad2deg;function L(Z,J,N){this.isSmith=N||!1,this.id=J,this.gd=Z,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var H=Z._fullLayout,$="clip"+H._uid+J;this.clipIds.forTraces=$+"-for-traces",this.clipPaths.forTraces=H._clips.append("clipPath").attr("id",this.clipIds.forTraces),this.clipPaths.forTraces.append("path"),this.framework=H["_"+(N?"smith":"polar")+"layer"].append("g").attr("class",J),this.getHole=function(U){return this.isSmith?0:U.hole},this.getSector=function(U){return this.isSmith?[0,360]:U.sector},this.getRadial=function(U){return this.isSmith?U.realaxis:U.radialaxis},this.getAngular=function(U){return this.isSmith?U.imaginaryaxis:U.angularaxis},N||(this.radialTickLayout=null,this.angularTickLayout=null)}var B=L.prototype;r.exports=function(J,N,H){return new L(J,N,H)},B.plot=function(Z,J){for(var N=this,H=J[N.id],$=!1,U=0;U<Z.length;U++){var V=Z[U][0].trace;if(V.cliponaxis===!1){$=!0;break}}N._hasClipOnAxisFalse=$,N.updateLayers(J,H),N.updateLayout(J,H),u.generalUpdatePerTraceModule(N.gd,N,Z,H),N.updateFx(J,H),N.isSmith&&(delete H.realaxis.range,delete H.imaginaryaxis.range)},B.updateLayers=function(Z,J){var N=this,H=N.isSmith,$=N.layers,U=N.getRadial(J),V=N.getAngular(J),j=k.layerNames,q=j.indexOf("frontplot"),Y=j.slice(0,q),K=V.layer==="below traces",te=U.layer==="below traces";K&&Y.push("angular-line"),te&&Y.push("radial-line"),K&&Y.push("angular-axis"),te&&Y.push("radial-axis"),Y.push("frontplot"),K||Y.push("angular-line"),te||Y.push("radial-line"),K||Y.push("angular-axis"),te||Y.push("radial-axis");var ne=(H?"smith":"polar")+"sublayer",se=N.framework.selectAll("."+ne).data(Y,String);se.enter().append("g").attr("class",function(le){return ne+" "+le}).each(function(le){var ce=$[le]=t.select(this);switch(le){case"frontplot":H||ce.append("g").classed("barlayer",!0),ce.append("g").classed("scatterlayer",!0);break;case"backplot":ce.append("g").classed("maplayer",!0);break;case"plotbg":$.bg=ce.append("path");break;case"radial-grid":ce.style("fill","none");break;case"angular-grid":ce.style("fill","none");break;case"radial-line":ce.append("line").style("fill","none");break;case"angular-line":ce.append("path").style("fill","none");break}}),se.order()},B.updateLayout=function(Z,J){var N=this,H=N.layers,$=Z._size,U=N.getRadial(J),V=N.getAngular(J),j=J.domain.x,q=J.domain.y;N.xOffset=$.l+$.w*j[0],N.yOffset=$.t+$.h*(1-q[1]);var Y=N.xLength=$.w*(j[1]-j[0]),K=N.yLength=$.h*(q[1]-q[0]),te=N.getSector(J);N.sectorInRad=te.map(z);var ne=N.sectorBBox=G(te),se=ne[2]-ne[0],le=ne[3]-ne[1],ce=K/Y,pe=Math.abs(le/se),xe,ye,fe,ae,ee;ce>pe?(xe=Y,ye=Y*pe,ee=(K-ye)/$.h/2,fe=[j[0],j[1]],ae=[q[0]+ee,q[1]-ee]):(xe=K/pe,ye=K,ee=(Y-xe)/$.w/2,fe=[j[0]+ee,j[1]-ee],ae=[q[0],q[1]]),N.xLength2=xe,N.yLength2=ye,N.xDomain2=fe,N.yDomain2=ae;var ie=N.xOffset2=$.l+$.w*fe[0],Q=N.yOffset2=$.t+$.h*(1-ae[1]),ue=N.radius=xe/se,ge=N.innerRadius=N.getHole(J)*ue,Me=N.cx=ie-ue*ne[0],Te=N.cy=Q+ue*ne[3],je=N.cxx=Me-ie,Ve=N.cyy=Te-Q,Ze=U.side,Ke;Ze==="counterclockwise"?(Ke=Ze,Ze="top"):Ze==="clockwise"&&(Ke=Ze,Ze="bottom"),N.radialAxis=N.mockAxis(Z,J,U,{_id:"x",side:Ze,_trueSide:Ke,domain:[ge/$.w,ue/$.w]}),N.angularAxis=N.mockAxis(Z,J,V,{side:"right",domain:[0,Math.PI],autorange:!1}),N.doAutoRange(Z,J),N.updateAngularAxis(Z,J),N.updateRadialAxis(Z,J),N.updateRadialAxisTitle(Z,J),N.xaxis=N.mockCartesianAxis(Z,J,{_id:"x",domain:fe}),N.yaxis=N.mockCartesianAxis(Z,J,{_id:"y",domain:ae});var vt=N.pathSubplot();N.clipPaths.forTraces.select("path").attr("d",vt).attr("transform",s(je,Ve)),H.frontplot.attr("transform",s(ie,Q)).call(n.setClipUrl,N._hasClipOnAxisFalse?null:N.clipIds.forTraces,N.gd),H.bg.attr("d",vt).attr("transform",s(Me,Te)).call(l.fill,J.bgcolor)},B.mockAxis=function(Z,J,N,H){var $=a.extendFlat({},N,H);return h($,J,Z),$},B.mockCartesianAxis=function(Z,J,N){var H=this,$=H.isSmith,U=N._id,V=a.extendFlat({type:"linear"},N);f(V,Z);var j={x:[0,2],y:[1,3]};return V.setRange=function(){var q=H.sectorBBox,Y=j[U],K=H.radialAxis._rl,te=(K[1]-K[0])/(1-H.getHole(J));V.range=[q[Y[0]]*te,q[Y[1]]*te]},V.isPtWithinRange=U==="x"&&!$?function(q){return H.isPtInside(q)}:function(){return!0},V.setRange(),V.setScale(),V},B.doAutoRange=function(Z,J){var N=this,H=N.gd,$=N.radialAxis,U=N.getRadial(J);d(H,$);var V=$.range;if(U.range=V.slice(),U._input.range=V.slice(),$._rl=[$.r2l(V[0],null,"gregorian"),$.r2l(V[1],null,"gregorian")],$.minallowed!==void 0){var j=$.r2l($.minallowed);$._rl[0]>$._rl[1]?$._rl[1]=Math.max($._rl[1],j):$._rl[0]=Math.max($._rl[0],j)}if($.maxallowed!==void 0){var q=$.r2l($.maxallowed);$._rl[0]<$._rl[1]?$._rl[1]=Math.min($._rl[1],q):$._rl[0]=Math.min($._rl[0],q)}},B.updateRadialAxis=function(Z,J){var N=this,H=N.gd,$=N.layers,U=N.radius,V=N.innerRadius,j=N.cx,q=N.cy,Y=N.getRadial(J),K=P(N.getSector(J)[0],360),te=N.radialAxis,ne=V<U,se=N.isSmith;se||(N.fillViewInitialKey("radialaxis.angle",Y.angle),N.fillViewInitialKey("radialaxis.range",te.range.slice()),te.setGeometry()),te.tickangle==="auto"&&K>90&&K<=270&&(te.tickangle=180);var le=se?function(ue){var ge=D(N,E([ue.x,0]));return s(ge[0]-j,ge[1]-q)}:function(ue){return s(te.l2p(ue.x)+V,0)},ce=se?function(ue){return F(N,ue.x,-1/0,1/0)}:function(ue){return N.pathArc(te.r2p(ue.x)+V)},pe=O(Y);if(N.radialTickLayout!==pe&&($["radial-axis"].selectAll(".xtick").remove(),N.radialTickLayout=pe),ne){te.setScale();var xe=0,ye=se?(te.tickvals||[]).filter(function(ue){return ue>=0}).map(function(ue){return c.tickText(te,ue,!0,!1)}):c.calcTicks(te),fe=se?ye:c.clipEnds(te,ye),ae=c.getTickSigns(te)[2];se&&((te.ticks==="top"&&te.side==="bottom"||te.ticks==="bottom"&&te.side==="top")&&(ae=-ae),te.ticks==="top"&&te.side==="top"&&(xe=-te.ticklen),te.ticks==="bottom"&&te.side==="bottom"&&(xe=te.ticklen)),c.drawTicks(H,te,{vals:ye,layer:$["radial-axis"],path:c.makeTickPath(te,0,ae),transFn:le,crisp:!1}),c.drawGrid(H,te,{vals:fe,layer:$["radial-grid"],path:ce,transFn:a.noop,crisp:!1}),c.drawLabels(H,te,{vals:ye,layer:$["radial-axis"],transFn:le,labelFns:c.makeLabelFns(te,xe)})}var ee=N.radialAxisAngle=N.vangles?I(W(z(Y.angle),N.vangles)):Y.angle,ie=s(j,q),Q=ie+o(-ee);X($["radial-axis"],ne&&(Y.showticklabels||Y.ticks),{transform:Q}),X($["radial-grid"],ne&&Y.showgrid,{transform:se?"":ie}),X($["radial-line"].select("line"),ne&&Y.showline,{x1:se?-U:V,y1:0,x2:U,y2:0,transform:Q}).attr("stroke-width",Y.linewidth).call(l.stroke,Y.linecolor)},B.updateRadialAxisTitle=function(Z,J,N){if(!this.isSmith){var H=this,$=H.gd,U=H.radius,V=H.cx,j=H.cy,q=H.getRadial(J),Y=H.id+"title",K=0;if(q.title){var te=n.bBox(H.layers["radial-axis"].node()).height,ne=q.title.font.size,se=q.side;K=se==="top"?ne:se==="counterclockwise"?-(te+ne*.4):te+ne*.8}var le=N!==void 0?N:H.radialAxisAngle,ce=z(le),pe=Math.cos(ce),xe=Math.sin(ce),ye=V+U/2*pe+K*xe,fe=j-U/2*xe+K*pe;H.layers["radial-axis-title"]=y.draw($,Y,{propContainer:q,propName:H.id+".radialaxis.title.text",placeholder:R($,"Click to enter radial axis title"),attributes:{x:ye,y:fe,"text-anchor":"middle"},transform:{rotate:-le}})}},B.updateAngularAxis=function(Z,J){var N=this,H=N.gd,$=N.layers,U=N.radius,V=N.innerRadius,j=N.cx,q=N.cy,Y=N.getAngular(J),K=N.angularAxis,te=N.isSmith;te||(N.fillViewInitialKey("angularaxis.rotation",Y.rotation),K.setGeometry(),K.setScale());var ne=te?function(ge){var Me=D(N,E([0,ge.x]));return Math.atan2(Me[0]-j,Me[1]-q)-Math.PI/2}:function(ge){return K.t2g(ge.x)};K.type==="linear"&&K.thetaunit==="radians"&&(K.tick0=I(K.tick0),K.dtick=I(K.dtick));var se=function(ge){return s(j+U*Math.cos(ge),q-U*Math.sin(ge))},le=te?function(ge){var Me=D(N,E([0,ge.x]));return s(Me[0],Me[1])}:function(ge){return se(ne(ge))},ce=te?function(ge){var Me=D(N,E([0,ge.x])),Te=Math.atan2(Me[0]-j,Me[1]-q)-Math.PI/2;return s(Me[0],Me[1])+o(-I(Te))}:function(ge){var Me=ne(ge);return se(Me)+o(-I(Me))},pe=te?function(ge){return T(N,ge.x,0,1/0)}:function(ge){var Me=ne(ge),Te=Math.cos(Me),je=Math.sin(Me);return"M"+[j+V*Te,q-V*je]+"L"+[j+U*Te,q-U*je]},xe=c.makeLabelFns(K,0),ye=xe.labelStandoff,fe={};fe.xFn=function(ge){var Me=ne(ge);return Math.cos(Me)*ye},fe.yFn=function(ge){var Me=ne(ge),Te=Math.sin(Me)>0?.2:1;return-Math.sin(Me)*(ye+ge.fontSize*Te)+Math.abs(Math.cos(Me))*(ge.fontSize*w)},fe.anchorFn=function(ge){var Me=ne(ge),Te=Math.cos(Me);return Math.abs(Te)<.1?"middle":Te>0?"start":"end"},fe.heightFn=function(ge,Me,Te){var je=ne(ge);return-.5*(1+Math.sin(je))*Te};var ae=O(Y);N.angularTickLayout!==ae&&($["angular-axis"].selectAll("."+K._id+"tick").remove(),N.angularTickLayout=ae);var ee=te?[1/0].concat(K.tickvals||[]).map(function(ge){return c.tickText(K,ge,!0,!1)}):c.calcTicks(K);te&&(ee[0].text="\u221E",ee[0].fontSize*=1.75);var ie;if(J.gridshape==="linear"?(ie=ee.map(ne),a.angleDelta(ie[0],ie[1])<0&&(ie=ie.slice().reverse())):ie=null,N.vangles=ie,K.type==="category"&&(ee=ee.filter(function(ge){return a.isAngleInsideSector(ne(ge),N.sectorInRad)})),K.visible){var Q=K.ticks==="inside"?-1:1,ue=(K.linewidth||1)/2;c.drawTicks(H,K,{vals:ee,layer:$["angular-axis"],path:"M"+Q*ue+",0h"+Q*K.ticklen,transFn:ce,crisp:!1}),c.drawGrid(H,K,{vals:ee,layer:$["angular-grid"],path:pe,transFn:a.noop,crisp:!1}),c.drawLabels(H,K,{vals:ee,layer:$["angular-axis"],repositionOnUpdate:!0,transFn:le,labelFns:fe})}X($["angular-line"].select("path"),Y.showline,{d:N.pathSubplot(),transform:s(j,q)}).attr("stroke-width",Y.linewidth).call(l.stroke,Y.linecolor)},B.updateFx=function(Z,J){if(!this.gd._context.staticPlot){var N=!this.isSmith;N&&(this.updateAngularDrag(Z),this.updateRadialDrag(Z,J,0),this.updateRadialDrag(Z,J,1)),this.updateHoverAndMainDrag(Z)}},B.updateHoverAndMainDrag=function(Z){var J=this,N=J.isSmith,H=J.gd,$=J.layers,U=Z._zoomlayer,V=k.MINZOOM,j=k.OFFEDGE,q=J.radius,Y=J.innerRadius,K=J.cx,te=J.cy,ne=J.cxx,se=J.cyy,le=J.sectorInRad,ce=J.vangles,pe=J.radialAxis,xe=A.clampTiny,ye=A.findXYatLength,fe=A.findEnclosingVertexAngles,ae=k.cornerHalfWidth,ee=k.cornerLen/2,ie,Q,ue=p.makeDragger($,"path","maindrag",Z.dragmode===!1?"none":"crosshair");t.select(ue).attr("d",J.pathSubplot()).attr("transform",s(K,te)),ue.onmousemove=function(ft){m.hover(H,ft,J.id),H._fullLayout._lasthover=ue,H._fullLayout._hoversubplot=J.id},ue.onmouseout=function(ft){H._dragging||g.unhover(H,ft)};var ge={element:ue,gd:H,subplot:J.id,plotinfo:{id:J.id,xaxis:J.xaxis,yaxis:J.yaxis},xaxes:[J.xaxis],yaxes:[J.yaxis]},Me,Te,je,Ve,Ze,Ke,vt,xt,Pt;function mt(ft,At){return Math.sqrt(ft*ft+At*At)}function Mt(ft,At){return mt(ft-ne,At-se)}function lt(ft,At){return Math.atan2(se-At,ft-ne)}function qe(ft,At){return[ft*Math.cos(At),ft*Math.sin(-At)]}function Ye(ft,At){if(ft===0)return J.pathSector(2*ae);var ht=ee/ft,Gt=At-ht,fr=At+ht,gt=Math.max(0,Math.min(ft,q)),yt=gt-ae,kt=gt+ae;return"M"+qe(yt,Gt)+"A"+[yt,yt]+" 0,0,0 "+qe(yt,fr)+"L"+qe(kt,fr)+"A"+[kt,kt]+" 0,0,1 "+qe(kt,Gt)+"Z"}function me(ft,At,ht){if(ft===0)return J.pathSector(2*ae);var Gt=qe(ft,At),fr=qe(ft,ht),gt=xe((Gt[0]+fr[0])/2),yt=xe((Gt[1]+fr[1])/2),kt,Lt;if(gt&&yt){var Ct=yt/gt,$t=-1/Ct,mr=ye(ae,Ct,gt,yt);kt=ye(ee,$t,mr[0][0],mr[0][1]),Lt=ye(ee,$t,mr[1][0],mr[1][1])}else{var br,Er;yt?(br=ee,Er=ae):(br=ae,Er=ee),kt=[[gt-br,yt-Er],[gt+br,yt-Er]],Lt=[[gt-br,yt+Er],[gt+br,yt+Er]]}return"M"+kt.join("L")+"L"+Lt.reverse().join("L")+"Z"}function _e(){je=null,Ve=null,Ze=J.pathSubplot(),Ke=!1;var ft=H._fullLayout[J.id];vt=l.luminosity(ft.bgcolor),xt=p.makeZoombox(U,vt,K,te,Ze),xt.attr("fill-rule","evenodd"),Pt=p.makeCorners(U,K,te),x(H)}function Ae(ft,At){return At=Math.max(Math.min(At,q),Y),ft<j?ft=0:q-ft<j?ft=q:At<j?At=0:q-At<j&&(At=q),Math.abs(At-ft)>V?(ft<At?(je=ft,Ve=At):(je=At,Ve=ft),!0):(je=null,Ve=null,!1)}function ke(ft,At){ft=ft||Ze,At=At||"M0,0Z",xt.attr("d",ft),Pt.attr("d",At),p.transitionZoombox(xt,Pt,Ke,vt),Ke=!0;var ht={};at(ht),H.emit("plotly_relayouting",ht)}function Ee(ft,At){ft=ft*ie,At=At*Q;var ht=Me+ft,Gt=Te+At,fr=Mt(Me,Te),gt=Math.min(Mt(ht,Gt),q),yt=lt(Me,Te),kt,Lt;Ae(fr,gt)&&(kt=Ze+J.pathSector(Ve),je&&(kt+=J.pathSector(je)),Lt=Ye(je,yt)+Ye(Ve,yt)),ke(kt,Lt)}function De(ft,At,ht,Gt){var fr=A.findIntersectionXY(ht,Gt,ht,[ft-ne,se-At]);return mt(fr[0],fr[1])}function Je(ft,At){var ht=Me+ft,Gt=Te+At,fr=lt(Me,Te),gt=lt(ht,Gt),yt=fe(fr,ce),kt=fe(gt,ce),Lt=De(Me,Te,yt[0],yt[1]),Ct=Math.min(De(ht,Gt,kt[0],kt[1]),q),$t,mr;Ae(Lt,Ct)&&($t=Ze+J.pathSector(Ve),je&&($t+=J.pathSector(je)),mr=[me(je,yt[0],yt[1]),me(Ve,yt[0],yt[1])].join(" ")),ke($t,mr)}function Ue(){if(p.removeZoombox(H),!(je===null||Ve===null)){var ft={};at(ft),p.showDoubleClickNotifier(H),i.call("_guiRelayout",H,ft)}}function at(ft){var At=pe._rl,ht=(At[1]-At[0])/(1-Y/q)/q,Gt=[At[0]+(je-Y)*ht,At[0]+(Ve-Y)*ht];ft[J.id+".radialaxis.range"]=Gt}function rt(ft,At){var ht=H._fullLayout.clickmode;if(p.removeZoombox(H),ft===2){var Gt={};for(var fr in J.viewInitial)Gt[J.id+"."+fr]=J.viewInitial[fr];H.emit("plotly_doubleclick",null),i.call("_guiRelayout",H,Gt)}ht.indexOf("select")>-1&&ft===1&&v(At,H,[J.xaxis],[J.yaxis],J.id,ge),ht.indexOf("event")>-1&&m.click(H,At,J.id)}ge.prepFn=function(ft,At,ht){var Gt=H._fullLayout.dragmode,fr=ue.getBoundingClientRect();H._fullLayout._calcInverseTransform(H);var gt=H._fullLayout._invTransform;ie=H._fullLayout._invScaleX,Q=H._fullLayout._invScaleY;var yt=a.apply3DTransform(gt)(At-fr.left,ht-fr.top);if(Me=yt[0],Te=yt[1],ce){var kt=A.findPolygonOffset(q,le[0],le[1],ce);Me+=ne+kt[0],Te+=se+kt[1]}switch(Gt){case"zoom":ge.clickFn=rt,N||(ce?ge.moveFn=Je:ge.moveFn=Ee,ge.doneFn=Ue,_e(ft,At,ht));break;case"select":case"lasso":_(ft,At,ht,ge,Gt);break}},g.init(ge)},B.updateRadialDrag=function(Z,J,N){var H=this,$=H.gd,U=H.layers,V=H.radius,j=H.innerRadius,q=H.cx,Y=H.cy,K=H.radialAxis,te=k.radialDragBoxSize,ne=te/2;if(!K.visible)return;var se=z(H.radialAxisAngle),le=K._rl,ce=le[0],pe=le[1],xe=le[N],ye=.75*(le[1]-le[0])/(1-H.getHole(J))/V,fe,ae,ee;N?(fe=q+(V+ne)*Math.cos(se),ae=Y-(V+ne)*Math.sin(se),ee="radialdrag"):(fe=q+(j-ne)*Math.cos(se),ae=Y-(j-ne)*Math.sin(se),ee="radialdrag-inner");var ie=p.makeRectDragger(U,ee,"crosshair",-ne,-ne,te,te),Q={element:ie,gd:$};Z.dragmode===!1&&(Q.dragmode=!1),X(t.select(ie),K.visible&&j<V,{transform:s(fe,ae)});var ue,ge,Me;function Te(vt,xt){if(ue)ue(vt,xt);else{var Pt=[vt,-xt],mt=[Math.cos(se),Math.sin(se)],Mt=Math.abs(a.dot(Pt,mt)/Math.sqrt(a.dot(Pt,Pt)));isNaN(Mt)||(ue=Mt<.5?Ze:Ke)}var lt={};je(lt),$.emit("plotly_relayouting",lt)}function je(vt){ge!==null?vt[H.id+".radialaxis.angle"]=ge:Me!==null&&(vt[H.id+".radialaxis.range["+N+"]"]=Me)}function Ve(){ge!==null?i.call("_guiRelayout",$,H.id+".radialaxis.angle",ge):Me!==null&&i.call("_guiRelayout",$,H.id+".radialaxis.range["+N+"]",Me)}function Ze(vt,xt){if(N!==0){var Pt=fe+vt,mt=ae+xt;ge=Math.atan2(Y-mt,Pt-q),H.vangles&&(ge=W(ge,H.vangles)),ge=I(ge);var Mt=s(q,Y)+o(-ge);U["radial-axis"].attr("transform",Mt),U["radial-line"].select("line").attr("transform",Mt);var lt=H.gd._fullLayout,qe=lt[H.id];H.updateRadialAxisTitle(lt,qe,ge)}}function Ke(vt,xt){var Pt=a.dot([vt,-xt],[Math.cos(se),Math.sin(se)]);if(Me=xe-ye*Pt,ye>0!=(N?Me>ce:Me<pe)){Me=null;return}var mt=$._fullLayout,Mt=mt[H.id];K.range[N]=Me,K._rl[N]=Me,H.updateRadialAxis(mt,Mt),H.xaxis.setRange(),H.xaxis.setScale(),H.yaxis.setRange(),H.yaxis.setScale();var lt=!1;for(var qe in H.traceHash){var Ye=H.traceHash[qe],me=a.filterVisible(Ye),_e=Ye[0][0].trace._module;_e.plot($,H,me,Mt),i.traceIs(qe,"gl")&&me.length&&(lt=!0)}lt&&(M($),C($))}Q.prepFn=function(){ue=null,ge=null,Me=null,Q.moveFn=Te,Q.doneFn=Ve,x($)},Q.clampFn=function(vt,xt){return Math.sqrt(vt*vt+xt*xt)<k.MINDRAG&&(vt=0,xt=0),[vt,xt]},g.init(Q)},B.updateAngularDrag=function(Z){var J=this,N=J.gd,H=J.layers,$=J.radius,U=J.angularAxis,V=J.cx,j=J.cy,q=J.cxx,Y=J.cyy,K=k.angularDragBoxSize,te=p.makeDragger(H,"path","angulardrag",Z.dragmode===!1?"none":"move"),ne={element:te,gd:N};Z.dragmode===!1?ne.dragmode=!1:t.select(te).attr("d",J.pathAnnulus($,$+K)).attr("transform",s(V,j)).call(S,"move");function se(Me,Te){return Math.atan2(Y+K-Te,Me-q-K)}var le=H.frontplot.select(".scatterlayer").selectAll(".trace"),ce=le.selectAll(".point"),pe=le.selectAll(".textpoint"),xe,ye,fe,ae,ee,ie;function Q(Me,Te){var je=J.gd._fullLayout,Ve=je[J.id],Ze=xe+Me*Z._invScaleX,Ke=ye+Te*Z._invScaleY,vt=se(Ze,Ke),xt=I(vt-ie);if(ae=fe+xt,H.frontplot.attr("transform",s(J.xOffset2,J.yOffset2)+o([-xt,q,Y])),J.vangles){ee=J.radialAxisAngle+xt;var Pt=s(V,j)+o(-xt),mt=s(V,j)+o(-ee);H.bg.attr("transform",Pt),H["radial-grid"].attr("transform",Pt),H["radial-axis"].attr("transform",mt),H["radial-line"].select("line").attr("transform",mt),J.updateRadialAxisTitle(je,Ve,ee)}else J.clipPaths.forTraces.select("path").attr("transform",s(q,Y)+o(xt));ce.each(function(){var Ae=t.select(this),ke=n.getTranslate(Ae);Ae.attr("transform",s(ke.x,ke.y)+o([xt]))}),pe.each(function(){var Ae=t.select(this),ke=Ae.select("text"),Ee=n.getTranslate(Ae);Ae.attr("transform",o([xt,ke.attr("x"),ke.attr("y")])+s(Ee.x,Ee.y))}),U.rotation=a.modHalf(ae,360),J.updateAngularAxis(je,Ve),J._hasClipOnAxisFalse&&!a.isFullCircle(J.sectorInRad)&&le.call(n.hideOutsideRangePoints,J);var Mt=!1;for(var lt in J.traceHash)if(i.traceIs(lt,"gl")){var qe=J.traceHash[lt],Ye=a.filterVisible(qe),me=qe[0][0].trace._module;me.plot(N,J,Ye,Ve),Ye.length&&(Mt=!0)}Mt&&(M(N),C(N));var _e={};ue(_e),N.emit("plotly_relayouting",_e)}function ue(Me){Me[J.id+".angularaxis.rotation"]=ae,J.vangles&&(Me[J.id+".radialaxis.angle"]=ee)}function ge(){pe.select("text").attr("transform",null);var Me={};ue(Me),i.call("_guiRelayout",N,Me)}ne.prepFn=function(Me,Te,je){var Ve=Z[J.id];fe=Ve.angularaxis.rotation;var Ze=te.getBoundingClientRect();xe=Te-Ze.left,ye=je-Ze.top,N._fullLayout._calcInverseTransform(N);var Ke=a.apply3DTransform(Z._invTransform)(xe,ye);xe=Ke[0],ye=Ke[1],ie=se(xe,ye),ne.moveFn=Q,ne.doneFn=ge,x(N)},J.vangles&&!a.isFullCircle(J.sectorInRad)&&(ne.prepFn=a.noop,S(t.select(te),null)),g.init(ne)},B.isPtInside=function(Z){if(this.isSmith)return!0;var J=this.sectorInRad,N=this.vangles,H=this.angularAxis.c2g(Z.theta),$=this.radialAxis,U=$.c2l(Z.r),V=$._rl,j=N?A.isPtInsidePolygon:a.isPtInsideSector;return j(U,H,V,J,N)},B.pathArc=function(Z){var J=this.sectorInRad,N=this.vangles,H=N?A.pathPolygon:a.pathArc;return H(Z,J[0],J[1],N)},B.pathSector=function(Z){var J=this.sectorInRad,N=this.vangles,H=N?A.pathPolygon:a.pathSector;return H(Z,J[0],J[1],N)},B.pathAnnulus=function(Z,J){var N=this.sectorInRad,H=this.vangles,$=H?A.pathPolygonAnnulus:a.pathAnnulus;return $(Z,J,N[0],N[1],H)},B.pathSubplot=function(){var Z=this.innerRadius,J=this.radius;return Z?this.pathAnnulus(Z,J):this.pathSector(J)},B.fillViewInitialKey=function(Z,J){Z in this.viewInitial||(this.viewInitial[Z]=J)};function O(Z){var J=Z.ticks+String(Z.ticklen)+String(Z.showticklabels);return"side"in Z&&(J+=Z.side),J}function G(Z){var J=Z[0],N=Z[1],H=N-J,$=P(J,360),U=$+H,V=Math.cos(z($)),j=Math.sin(z($)),q=Math.cos(z(U)),Y=Math.sin(z(U)),K,te,ne,se;return $<=90&&U>=90||$>90&&U>=450?se=1:j<=0&&Y<=0?se=0:se=Math.max(j,Y),$<=180&&U>=180||$>180&&U>=540?K=-1:V>=0&&q>=0?K=0:K=Math.min(V,q),$<=270&&U>=270||$>270&&U>=630?te=-1:j>=0&&Y>=0?te=0:te=Math.min(j,Y),U>=360?ne=1:V<=0&&q<=0?ne=0:ne=Math.max(V,q),[K,te,ne,se]}function W(Z,J){var N=function($){return a.angleDist(Z,$)},H=a.findIndexOfMin(J,N);return J[H]}function X(Z,J,N){return J?(Z.attr("display",null),Z.attr(N)):Z&&Z.attr("display","none"),Z}}}),uj=de({"src/plots/polar/layout_attributes.js"(e,r){"use strict";var t=Jo(),i=Mu(),a=Is().attributes,o=Qt().extendFlat,s=Ps().overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},"plot","from-root"),n=s({tickmode:i.minor.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,ticklabelstep:i.ticklabelstep,showticklabels:i.showticklabels,labelalias:i.labelalias,minorloglabels:i.minorloglabels,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},"plot","from-root"),u={visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:["-","linear","log","date","category"]}),autotypenumbers:i.autotypenumbers,autorangeoptions:{minallowed:i.autorangeoptions.minallowed,maxallowed:i.autorangeoptions.maxallowed,clipmin:i.autorangeoptions.clipmin,clipmax:i.autorangeoptions.clipmax,include:i.autorangeoptions.include,editType:"plot"},autorange:o({},i.autorange,{editType:"plot"}),rangemode:{valType:"enumerated",values:["tozero","nonnegative","normal"],dflt:"tozero",editType:"calc"},minallowed:o({},i.minallowed,{editType:"plot"}),maxallowed:o({},i.maxallowed,{editType:"plot"}),range:o({},i.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],editType:"plot"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:"angle",editType:"plot"},autotickangles:i.autotickangles,side:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"clockwise",editType:"plot"},title:{text:o({},i.title.text,{editType:"plot",dflt:""}),font:o({},i.title.font,{editType:"plot"}),editType:"plot"},hoverformat:i.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc"};o(u,l,n);var c={visible:o({},i.visible,{dflt:!0}),type:{valType:"enumerated",values:["-","linear","category"],dflt:"-",editType:"calc",_noTemplating:!0},autotypenumbers:i.autotypenumbers,categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:"enumerated",values:["radians","degrees"],dflt:"degrees",editType:"calc"},period:{valType:"number",editType:"calc",min:0},direction:{valType:"enumerated",values:["counterclockwise","clockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",editType:"calc"},hoverformat:i.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc"};o(c,l,n),r.exports={domain:a({name:"polar",editType:"plot"}),sector:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],dflt:[0,360],editType:"plot"},hole:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},bgcolor:{valType:"color",editType:"plot",dflt:t.background},radialaxis:u,angularaxis:c,gridshape:{valType:"enumerated",values:["circular","linear"],dflt:"circular",editType:"plot"},uirevision:{valType:"any",editType:"none"},editType:"calc"}}}),Eue=de({"src/plots/polar/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Ro(),o=Ev(),s=$u().getSubplotData,l=_v(),n=f1(),u=h0(),c=d0(),f=Ow(),h=Ry(),d=LE(),p=h1(),g=uj(),m=oj(),y=BS(),_=y.axisNames;function v(S,M,C,w){var k=C("bgcolor");w.bgColor=i.combine(k,w.paper_bgcolor);var A=C("sector");C("hole");var b=s(w.fullData,y.name,w.id),E=w.layoutOut,T;function F(ne,se){return C(T+"."+ne,se)}for(var D=0;D<_.length;D++){T=_[D],t.isPlainObject(S[T])||(S[T]={});var R=S[T],P=a.newContainer(M,T);P._id=P._name=T,P._attr=w.id+"."+T,P._traceIndices=b.map(function(ne){return ne.index});var z=y.axisName2dataArray[T],I=x(R,P,F,b,z,w);f(R,P,F,{axData:b,dataAttr:z});var L=F("visible");switch(m(P,M,E),F("uirevision",M.uirevision),P._m=1,T){case"radialaxis":F("minallowed"),F("maxallowed");var B=F("range"),O=P.getAutorangeDflt(B),G=F("autorange",O),W;B&&(B[0]===null&&B[1]===null||(B[0]===null||B[1]===null)&&(G==="reversed"||G===!0)||B[0]!==null&&(G==="min"||G==="max reversed")||B[1]!==null&&(G==="max"||G==="min reversed"))&&(B=void 0,delete P.range,P.autorange=!0,W=!0),W||(O=P.getAutorangeDflt(B),G=F("autorange",O)),R.autorange=G,G&&(d(F,G,B),(I==="linear"||I==="-")&&F("rangemode"),P.isReversed()&&(P._m=-1)),P.cleanRange("range",{dfltRange:[0,1]});break;case"angularaxis":if(I==="date"){t.log("Polar plots do not support date angular axes yet.");for(var X=0;X<b.length;X++)b[X].visible=!1;I=R.type=P.type="linear"}F(I==="linear"?"thetaunit":"period");var Z=F("direction");F("rotation",{counterclockwise:0,clockwise:90}[Z]);break}if(c(R,P,F,P.type,{tickSuffixDflt:P.thetaunit==="degrees"?"\xB0":void 0}),L){var J,N,H,$,U,V,j,q,Y,K,te=w.font||{};J=F("color"),N=J===R.color?J:te.color,H=te.size,$=te.family,U=te.weight,V=te.style,j=te.variant,q=te.textcase,Y=te.lineposition,K=te.shadow,l(R,P,F,P.type),u(R,P,F,P.type,{font:{weight:U,style:V,variant:j,textcase:q,lineposition:Y,shadow:K,color:N,size:H,family:$},noAutotickangles:T==="angularaxis",noTicklabelshift:!0,noTicklabelstandoff:!0}),n(R,P,F,{outerTicks:!0}),h(R,P,F,{dfltColor:J,bgColor:w.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:g[T]}),F("layer"),T==="radialaxis"&&(F("side"),F("angle",A[0]),F("title.text"),t.coerceFont(F,"title.font",{weight:U,style:V,variant:j,textcase:q,lineposition:Y,shadow:K,color:N,size:t.bigFont(H),family:$}))}I!=="category"&&F("hoverformat"),P._input=R}M.angularaxis.type==="category"&&C("gridshape")}function x(S,M,C,w,k,A){var b=C("autotypenumbers",A.autotypenumbersDflt),E=C("type");if(E==="-"){for(var T,F=0;F<w.length;F++)if(w[F].visible){T=w[F];break}T&&T[k]&&(M.type=p(T[k],"gregorian",{noMultiCategory:!0,autotypenumbers:b})),M.type==="-"?M.type="linear":S.type=M.type}return M.type}r.exports=function(M,C,w){o(M,C,w,{type:y.name,attributes:g,handleDefaults:v,font:C.font,autotypenumbersDflt:C.autotypenumbers,paper_bgcolor:C.paper_bgcolor,fullData:w,layoutOut:C})}}}),NS=de({"src/plots/polar/index.js"(e,r){"use strict";var t=$u().getSubplotCalcData,i=Qt().counterRegex,a=lj(),o=BS(),s=o.attr,l=o.name,n=i(l),u={};u[s]={valType:"subplotid",dflt:l,editType:"calc"};function c(h){for(var d=h._fullLayout,p=h.calcdata,g=d._subplots[l],m=0;m<g.length;m++){var y=g[m],_=t(p,l,y),v=d[y]._subplot;v||(v=a(h,y),d[y]._subplot=v),v.plot(_,d,h._promises)}}function f(h,d,p,g){for(var m=g._subplots[l]||[],y=g._has&&g._has("gl"),_=d._has&&d._has("gl"),v=y&&!_,x=0;x<m.length;x++){var S=m[x],M=g[S]._subplot;if(!d[S]&&M){M.framework.remove(),M.layers["radial-axis-title"].remove();for(var C in M.clipPaths)M.clipPaths[C].remove()}v&&M._scene&&(M._scene.destroy(),M._scene=null)}}r.exports={attr:s,name:l,idRoot:l,idRegex:n,attrRegex:n,attributes:u,layoutAttributes:uj(),supplyLayoutDefaults:Eue(),plot:c,clean:f,toSVG:ml().toSVG}}}),W2=de({"src/traces/scatterpolar/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=fn().extendFlat,s=Kd(),l=tl(),n=ri(),u=l.line;r.exports={mode:l.mode,r:{valType:"data_array",editType:"calc+clearAxisTypes"},theta:{valType:"data_array",editType:"calc+clearAxisTypes"},r0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dr:{valType:"number",dflt:1,editType:"calc"},theta0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dtheta:{valType:"number",editType:"calc"},thetaunit:{valType:"enumerated",values:["radians","degrees","gradians"],dflt:"degrees",editType:"calc+clearAxisTypes"},text:l.text,texttemplate:i({editType:"plot"},{keys:["r","theta","text"]}),texttemplatefallback:a({editType:"plot"}),hovertext:l.hovertext,line:{color:u.color,width:u.width,dash:u.dash,backoff:u.backoff,shape:o({},u.shape,{values:["linear","spline"]}),smoothing:u.smoothing,editType:"calc"},connectgaps:l.connectgaps,marker:l.marker,cliponaxis:o({},l.cliponaxis,{dflt:!1}),textposition:l.textposition,textfont:l.textfont,fill:o({},l.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:s(),hoverinfo:o({},n.hoverinfo,{flags:["r","theta","text","name"]}),hoveron:l.hoveron,hovertemplate:t(),hovertemplatefallback:a(),selected:l.selected,unselected:l.unselected}}}),jS=de({"src/traces/scatterpolar/defaults.js"(e,r){"use strict";var t=Qt(),i=bs(),a=Nh(),o=yd(),s=p1(),l=_d(),n=Jd(),u=Zd().PTS_LINESONLY,c=W2();function f(d,p,g,m){function y(x,S){return t.coerce(d,p,c,x,S)}var _=h(d,p,m,y);if(!_){p.visible=!1;return}y("thetaunit"),y("mode",_<u?"lines+markers":"lines"),y("text"),y("hovertext"),p.hoveron!=="fills"&&(y("hovertemplate"),y("hovertemplatefallback")),i.hasMarkers(p)&&a(d,p,g,m,y,{gradient:!0}),i.hasLines(p)&&(o(d,p,g,m,y,{backoff:!0}),s(d,p,y),y("connectgaps")),i.hasText(p)&&(y("texttemplate"),y("texttemplatefallback"),l(d,p,m,y));var v=[];(i.hasMarkers(p)||i.hasText(p))&&(y("cliponaxis"),y("marker.maxdisplayed"),v.push("points")),y("fill"),p.fill!=="none"&&(n(d,p,g,y),i.hasLines(p)||s(d,p,y)),(p.fill==="tonext"||p.fill==="toself")&&v.push("fills"),y("hoveron",v.join("+")||"points"),t.coerceSelectionMarkerOpacity(p,y)}function h(d,p,g,m){var y=m("r"),_=m("theta");t.isTypedArray(y)&&(p.r=y=Array.from(y)),t.isTypedArray(_)&&(p.theta=_=Array.from(_));var v;if(y)_?v=Math.min(y.length,_.length):(v=y.length,m("theta0"),m("dtheta"));else{if(!_)return 0;v=p.theta.length,m("r0"),m("dr")}return p._length=v,v}r.exports={handleRThetaDefaults:h,supplyDefaults:f}}}),US=de({"src/traces/scatterpolar/format_labels.js"(e,r){"use strict";var t=Qt(),i=nn();r.exports=function(o,s,l){var n={},u=l[s.subplot]._subplot,c,f;u?(c=u.radialAxis,f=u.angularAxis):(u=l[s.subplot],c=u.radialaxis,f=u.angularaxis);var h=c.c2l(o.r);n.rLabel=i.tickText(c,h,!0).text;var d=f.thetaunit==="degrees"?t.rad2deg(o.theta):o.theta;return n.thetaLabel=i.tickText(f,d,!0).text,n}}}),kue=de({"src/traces/scatterpolar/calc.js"(e,r){"use strict";var t=da(),i=cn().BADNUM,a=nn(),o=jh(),s=Qd(),l=nh(),n=Uh().calcMarkerSize;r.exports=function(c,f){for(var h=c._fullLayout,d=f.subplot,p=h[d].radialaxis,g=h[d].angularaxis,m=p.makeCalcdata(f,"r"),y=g.makeCalcdata(f,"theta"),_=f._length,v=new Array(_),x=0;x<_;x++){var S=m[x],M=y[x],C=v[x]={};t(S)&&t(M)?(C.r=S,C.theta=M):C.r=i}var w=n(f,_);return f._extremes.x=a.findExtremes(p,m,{ppad:w}),o(c,f),s(v,f),l(v,f),v}}}),Cue=de({"src/traces/scatterpolar/plot.js"(e,r){"use strict";var t=v1(),i=cn().BADNUM;r.exports=function(o,s,l){for(var n=s.layers.frontplot.select("g.scatterlayer"),u=s.xaxis,c=s.yaxis,f={xaxis:u,yaxis:c,plot:s.framework,layerClipId:s._hasClipOnAxisFalse?s.clipIds.forTraces:null},h=s.radialAxis,d=s.angularAxis,p=0;p<l.length;p++)for(var g=l[p],m=0;m<g.length;m++){m===0&&(g[0].trace._xA=u,g[0].trace._yA=c);var y=g[m],_=y.r;if(_===i)y.x=y.y=i;else{var v=h.c2g(_),x=d.c2g(y.theta);y.x=v*Math.cos(x),y.y=v*Math.sin(x)}}t(o,f,l,n)}}}),qS=de({"src/traces/scatterpolar/hover.js"(e,r){"use strict";var t=g1();function i(o,s,l,n){var u=t(o,s,l,n);if(!(!u||u[0].index===!1)){var c=u[0];if(c.index===void 0)return u;var f=o.subplot,h=c.cd[c.index],d=c.trace;if(f.isPtInside(h))return c.xLabelVal=void 0,c.yLabelVal=void 0,a(h,d,f,c),c.hovertemplate=d.hovertemplate,u}}function a(o,s,l,n){var u=l.radialAxis,c=l.angularAxis;u._hovertitle="r",c._hovertitle="\u03B8";var f={};f[s.subplot]={_subplot:l};var h=s._module.formatLabels(o,s,f);n.rLabel=h.rLabel,n.thetaLabel=h.thetaLabel;var d=o.hi||s.hoverinfo,p=[];function g(y,_){p.push(y._hovertitle+": "+_)}if(!s.hovertemplate){var m=d.split("+");m.indexOf("all")!==-1&&(m=["r","theta","text"]),m.indexOf("r")!==-1&&g(u,n.rLabel),m.indexOf("theta")!==-1&&g(c,n.thetaLabel),m.indexOf("text")!==-1&&n.text&&(p.push(n.text),delete n.text),n.extraText=p.join("<br>")}}r.exports={hoverPoints:i,makeHoverPointText:a}}}),Due=de({"src/traces/scatterpolar/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"scatterpolar",basePlotModule:NS(),categories:["polar","symbols","showLegend","scatter-like"],attributes:W2(),supplyDefaults:jS().supplyDefaults,colorbar:Yu(),formatLabels:US(),calc:kue(),plot:Cue(),style:lf().style,styleOnSelect:lf().styleOnSelect,hoverPoints:qS().hoverPoints,selectPoints:Mv(),meta:{}}}}),Lue=de({"lib/scatterpolar.js"(e,r){"use strict";r.exports=Due()}}),cj=de({"src/traces/scatterpolargl/attributes.js"(e,r){"use strict";var t=W2(),{cliponaxis:i,hoveron:a}=t,o=Lr(t,["cliponaxis","hoveron"]),{connectgaps:s,line:{color:l,dash:n,width:u},fill:c,fillcolor:f,marker:h,textfont:d,textposition:p}=__();r.exports=ar(Ot({},o),{connectgaps:s,fill:c,fillcolor:f,line:{color:l,dash:n,editType:"calc",width:u},marker:h,textfont:d,textposition:p})}}),Fue=de({"src/traces/scatterpolargl/defaults.js"(e,r){"use strict";var t=Qt(),i=bs(),a=jS().handleRThetaDefaults,o=Nh(),s=yd(),l=_d(),n=Jd(),u=Zd().PTS_LINESONLY,c=cj();r.exports=function(h,d,p,g){function m(_,v){return t.coerce(h,d,c,_,v)}var y=a(h,d,g,m);if(!y){d.visible=!1;return}m("thetaunit"),m("mode",y<u?"lines+markers":"lines"),m("text"),m("hovertext"),d.hoveron!=="fills"&&(m("hovertemplate"),m("hovertemplatefallback")),i.hasMarkers(d)&&o(h,d,p,g,m,{noAngleRef:!0,noLineDash:!0,noStandOff:!0}),i.hasLines(d)&&(s(h,d,p,g,m),m("connectgaps")),i.hasText(d)&&(m("texttemplate"),m("texttemplatefallback"),l(h,d,g,m,{noFontShadow:!0,noFontLineposition:!0,noFontTextcase:!0})),m("fill"),d.fill!=="none"&&n(h,d,p,m),t.coerceSelectionMarkerOpacity(d,m)}}}),Pue=de({"src/traces/scatterpolargl/format_labels.js"(e,r){"use strict";var t=US();r.exports=function(a,o,s){var l=a.i;return"r"in a||(a.r=o._r[l]),"theta"in a||(a.theta=o._theta[l]),t(a,o,s)}}}),Iue=de({"src/traces/scatterpolargl/calc.js"(e,r){"use strict";var t=jh(),i=Uh().calcMarkerSize,a=Gv(),o=nn(),s=E0().TOO_MANY_POINTS;r.exports=function(n,u){var c=n._fullLayout,f=u.subplot,h=c[f].radialaxis,d=c[f].angularaxis,p=u._r=h.makeCalcdata(u,"r"),g=u._theta=d.makeCalcdata(u,"theta"),m=u._length,y={};m<p.length&&(p=p.slice(0,m)),m<g.length&&(g=g.slice(0,m)),y.r=p,y.theta=g,t(n,u);var _=y.opts=a.style(n,u),v;return m<s?v=i(u,m):_.marker&&(v=2*(_.marker.sizeAvg||Math.max(_.marker.size,3))),u._extremes.x=o.findExtremes(h,p,{ppad:v}),[{x:!1,y:!1,t:y,trace:u}]}}}),Rue=de({"src/traces/scatterpolargl/hover.js"(e,r){"use strict";var t=S4(),i=qS().makeHoverPointText;function a(o,s,l,n){var u=o.cd,c=u[0].t,f=c.r,h=c.theta,d=t.hoverPoints(o,s,l,n);if(!(!d||d[0].index===!1)){var p=d[0];if(p.index===void 0)return d;var g=o.subplot,m=p.cd[p.index],y=p.trace;if(m.r=f[p.index],m.theta=h[p.index],!!g.isPtInside(m))return p.xLabelVal=void 0,p.yLabelVal=void 0,i(m,y,g,p),d}}r.exports={hoverPoints:a}}}),zue=de({"src/traces/scatterpolargl/base_index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"scatterpolargl",basePlotModule:NS(),categories:["gl","regl","polar","symbols","showLegend","scatter-like"],attributes:cj(),supplyDefaults:Fue(),colorbar:Yu(),formatLabels:Pue(),calc:Iue(),hoverPoints:Rue().hoverPoints,selectPoints:A7(),meta:{}}}}),Bue=de({"src/traces/scatterpolargl/plot.js"(e,r){"use strict";var t=C4(),i=da(),a=Z7(),o=w7(),s=Gv(),l=Qt(),n=E0().TOO_MANY_POINTS,u={};r.exports=function(f,h,d){if(d.length){var p=h.radialAxis,g=h.angularAxis,m=o(f,h);return d.forEach(function(y){if(!(!y||!y[0]||!y[0].trace)){var _=y[0],v=_.trace,x=_.t,S=v._length,M=x.r,C=x.theta,w=x.opts,k,A=M.slice(),b=C.slice();for(k=0;k<M.length;k++)h.isPtInside({r:M[k],theta:C[k]})||(A[k]=NaN,b[k]=NaN);var E=new Array(S*2),T=Array(S),F=Array(S);for(k=0;k<S;k++){var D=A[k],R,P;if(i(D)){var z=p.c2g(D),I=g.c2g(b[k],v.thetaunit);R=z*Math.cos(I),P=z*Math.sin(I)}else R=P=NaN;T[k]=E[k*2]=R,F[k]=E[k*2+1]=P}x.tree=t(E),w.marker&&S>=n&&(w.marker.cluster=x.tree),w.marker&&(w.markerSel.positions=w.markerUnsel.positions=w.marker.positions=E),w.line&&E.length>1&&l.extendFlat(w.line,s.linePositions(f,v,E)),w.text&&(l.extendFlat(w.text,{positions:E},s.textPosition(f,v,w.text,w.marker)),l.extendFlat(w.textSel,{positions:E},s.textPosition(f,v,w.text,w.markerSel)),l.extendFlat(w.textUnsel,{positions:E},s.textPosition(f,v,w.text,w.markerUnsel))),w.fill&&!m.fill2d&&(m.fill2d=!0),w.marker&&!m.scatter2d&&(m.scatter2d=!0),w.line&&!m.line2d&&(m.line2d=!0),w.text&&!m.glText&&(m.glText=!0),m.lineOptions.push(w.line),m.fillOptions.push(w.fill),m.markerOptions.push(w.marker),m.markerSelectedOptions.push(w.markerSel),m.markerUnselectedOptions.push(w.markerUnsel),m.textOptions.push(w.text),m.textSelectedOptions.push(w.textSel),m.textUnselectedOptions.push(w.textUnsel),m.selectBatch.push([]),m.unselectBatch.push([]),x.x=T,x.y=F,x.rawx=T,x.rawy=F,x.r=M,x.theta=C,x.positions=E,x._scene=m,x.index=m.count,m.count++}}),a(f,h,d)}},r.exports.reglPrecompiled=u}}),Oue=de({"src/traces/scatterpolargl/index.js"(e,r){"use strict";var t=zue();t.plot=Bue(),r.exports=t}}),Nue=de({"lib/scatterpolargl.js"(e,r){"use strict";r.exports=Oue()}}),fj=de({"src/traces/barpolar/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,templatefallbackAttrs:i}=Vo(),a=fn().extendFlat,o=W2(),s=ep();r.exports={r:o.r,theta:o.theta,r0:o.r0,dr:o.dr,theta0:o.theta0,dtheta:o.dtheta,thetaunit:o.thetaunit,base:a({},s.base,{}),offset:a({},s.offset,{}),width:a({},s.width,{}),text:a({},s.text,{}),hovertext:a({},s.hovertext,{}),marker:l(),hoverinfo:o.hoverinfo,hovertemplate:t(),hovertemplatefallback:i(),selected:s.selected,unselected:s.unselected};function l(){var n=a({},s.marker);return delete n.cornerradius,n}}}),hj=de({"src/traces/barpolar/layout_attributes.js"(e,r){"use strict";r.exports={barmode:{valType:"enumerated",values:["stack","overlay"],dflt:"stack",editType:"calc"},bargap:{valType:"number",dflt:.1,min:0,max:1,editType:"calc"}}}}),jue=de({"src/traces/barpolar/defaults.js"(e,r){"use strict";var t=Qt(),i=jS().handleRThetaDefaults,a=Ww(),o=fj();r.exports=function(l,n,u,c){function f(d,p){return t.coerce(l,n,o,d,p)}var h=i(l,n,c,f);if(!h){n.visible=!1;return}f("thetaunit"),f("base"),f("offset"),f("width"),f("text"),f("hovertext"),f("hovertemplate"),f("hovertemplatefallback"),a(l,n,f,u,c),t.coerceSelectionMarkerOpacity(n,f)}}}),Uue=de({"src/traces/barpolar/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=hj();r.exports=function(a,o,s){var l={},n;function u(h,d){return t.coerce(a[n]||{},o[n],i,h,d)}for(var c=0;c<s.length;c++){var f=s[c];f.type==="barpolar"&&f.visible===!0&&(n=f.subplot,l[n]||(u("barmode"),u("bargap"),l[n]=1))}}}}),dj=de({"src/traces/barpolar/calc.js"(e,r){"use strict";var t=Wu().hasColorscale,i=hc(),a=Qt().isArrayOrTypedArray,o=Oy(),s=Av().setGroupPositions,l=nh(),n=Ma().traceIs,u=Qt().extendFlat;function c(h,d){for(var p=h._fullLayout,g=d.subplot,m=p[g].radialaxis,y=p[g].angularaxis,_=m.makeCalcdata(d,"r"),v=y.makeCalcdata(d,"theta"),x=d._length,S=new Array(x),M=_,C=v,w=0;w<x;w++)S[w]={p:C[w],s:M[w]};function k(A){var b=d[A];b!==void 0&&(d["_"+A]=a(b)?y.makeCalcdata(d,A):y.d2c(b,d.thetaunit))}return y.type==="linear"&&(k("width"),k("offset")),t(d,"marker")&&i(h,d,{vals:d.marker.color,containerStr:"marker",cLetter:"c"}),t(d,"marker.line")&&i(h,d,{vals:d.marker.line.color,containerStr:"marker.line",cLetter:"c"}),o(S,d),l(S,d),S}function f(h,d,p){for(var g=h.calcdata,m=[],y=0;y<g.length;y++){var _=g[y],v=_[0].trace;v.visible===!0&&n(v,"bar")&&v.subplot===p&&m.push(_)}var x=u({},d.radialaxis,{_id:"x"}),S=d.angularaxis;s(h,S,x,m,{mode:d.barmode,norm:d.barnorm,gap:d.bargap,groupgap:d.bargroupgap})}r.exports={calc:c,crossTraceCalc:f}}}),que=de({"src/traces/barpolar/plot.js"(e,r){"use strict";var t=Yr(),i=da(),a=Qt(),o=hn(),s=OS();r.exports=function(u,c,f){var h=u._context.staticPlot,d=c.xaxis,p=c.yaxis,g=c.radialAxis,m=c.angularAxis,y=l(c),_=c.layers.frontplot.select("g.barlayer");a.makeTraceGroups(_,f,"trace bars").each(function(){var v=t.select(this),x=a.ensureSingle(v,"g","points"),S=x.selectAll("g.point").data(a.identity);S.enter().append("g").style("vector-effect",h?"none":"non-scaling-stroke").style("stroke-miterlimit",2).classed("point",!0),S.exit().remove(),S.each(function(M){var C=t.select(this),w=M.rp0=g.c2p(M.s0),k=M.rp1=g.c2p(M.s1),A=M.thetag0=m.c2g(M.p0),b=M.thetag1=m.c2g(M.p1),E;if(!i(w)||!i(k)||!i(A)||!i(b)||w===k||A===b)E="M0,0Z";else{var T=g.c2g(M.s1),F=(A+b)/2;M.ct=[d.c2p(T*Math.cos(F)),p.c2p(T*Math.sin(F))],E=y(w,k,A,b)}a.ensureSingle(C,"path").attr("d",E)}),o.setClipUrl(v,c._hasClipOnAxisFalse?c.clipIds.forTraces:null,u)})};function l(n){var u=n.cxx,c=n.cyy;return n.vangles?function(f,h,d,p){var g,m;a.angleDelta(d,p)>0?(g=d,m=p):(g=p,m=d);var y=s.findEnclosingVertexAngles(g,n.vangles)[0],_=s.findEnclosingVertexAngles(m,n.vangles)[1],v=[y,(g+m)/2,_];return s.pathPolygonAnnulus(f,h,g,m,v,u,c)}:function(f,h,d,p){return a.pathAnnulus(f,h,d,p,u,c)}}}}),Vue=de({"src/traces/barpolar/hover.js"(e,r){"use strict";var t=$s(),i=Qt(),a=y1().getTraceColor,o=i.fillText,s=qS().makeHoverPointText,l=OS().isPtInsidePolygon;r.exports=function(u,c,f){var h=u.cd,d=h[0].trace,p=u.subplot,g=p.radialAxis,m=p.angularAxis,y=p.vangles,_=y?l:i.isPtInsideSector,v=u.maxHoverDistance,x=m._period||2*Math.PI,S=Math.abs(g.g2p(Math.sqrt(c*c+f*f))),M=Math.atan2(f,c);g.range[0]>g.range[1]&&(M+=Math.PI);var C=function(b){return _(S,M,[b.rp0,b.rp1],[b.thetag0,b.thetag1],y)?v+Math.min(1,Math.abs(b.thetag1-b.thetag0)/x)-1+(b.rp1-S)/(b.rp1-b.rp0)-1:1/0};if(t.getClosest(h,C,u),u.index!==!1){var w=u.index,k=h[w];u.x0=u.x1=k.ct[0],u.y0=u.y1=k.ct[1];var A=i.extendFlat({},k,{r:k.s,theta:k.p});return o(k,d,u),s(A,d,p,u),u.hovertemplate=d.hovertemplate,u.color=a(d,k),u.xLabelVal=u.yLabelVal=void 0,k.s<0&&(u.idealAlign="left"),[u]}}}}),Gue=de({"src/traces/barpolar/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"barpolar",basePlotModule:NS(),categories:["polar","bar","showLegend"],attributes:fj(),layoutAttributes:hj(),supplyDefaults:jue(),supplyLayoutDefaults:Uue(),calc:dj().calc,crossTraceCalc:dj().crossTraceCalc,plot:que(),colorbar:Yu(),formatLabels:US(),style:qh().style,styleOnSelect:qh().styleOnSelect,hoverPoints:Vue(),selectPoints:_1(),meta:{}}}}),Hue=de({"lib/barpolar.js"(e,r){"use strict";r.exports=Gue()}}),pj=de({"src/plots/smith/constants.js"(e,r){"use strict";r.exports={attr:"subplot",name:"smith",axisNames:["realaxis","imaginaryaxis"],axisName2dataArray:{imaginaryaxis:"imag",realaxis:"real"}}}}),vj=de({"src/plots/smith/layout_attributes.js"(e,r){"use strict";var t=Jo(),i=Mu(),a=Is().attributes,o=Qt().extendFlat,s=Ps().overrideAll,l=s({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,griddash:i.griddash},"plot","from-root"),n=s({ticklen:i.ticklen,tickwidth:o({},i.tickwidth,{dflt:2}),tickcolor:i.tickcolor,showticklabels:i.showticklabels,labelalias:i.labelalias,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,tickfont:i.tickfont,tickformat:i.tickformat,hoverformat:i.hoverformat,layer:i.layer},"plot","from-root"),u=o({visible:o({},i.visible,{dflt:!0}),tickvals:{dflt:[.2,.5,1,2,5],valType:"data_array",editType:"plot"},tickangle:o({},i.tickangle,{dflt:90}),ticks:{valType:"enumerated",values:["top","bottom",""],editType:"ticks"},side:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},editType:"calc"},l,n),c=o({visible:o({},i.visible,{dflt:!0}),tickvals:{valType:"data_array",editType:"plot"},ticks:i.ticks,editType:"calc"},l,n);r.exports={domain:a({name:"smith",editType:"plot"}),bgcolor:{valType:"color",editType:"plot",dflt:t.background},realaxis:u,imaginaryaxis:c,editType:"calc"}}}),$ue=de({"src/plots/smith/layout_defaults.js"(e,r){"use strict";var t=Qt(),i=ta(),a=Ro(),o=Ev(),s=$u().getSubplotData,l=d0(),n=h0(),u=Ry(),c=Yd(),f=vj(),h=pj(),d=h.axisNames,p=m(function(y){return t.isTypedArray(y)&&(y=Array.from(y)),y.slice().reverse().map(function(_){return-_}).concat([0]).concat(y)},String);function g(y,_,v,x){var S=v("bgcolor");x.bgColor=i.combine(S,x.paper_bgcolor);var M=s(x.fullData,h.name,x.id),C=x.layoutOut,w;function k(O,G){return v(w+"."+O,G)}for(var A=0;A<d.length;A++){w=d[A],t.isPlainObject(y[w])||(y[w]={});var b=y[w],E=a.newContainer(_,w);E._id=E._name=w,E._attr=x.id+"."+w,E._traceIndices=M.map(function(O){return O.index});var T=k("visible");if(E.type="linear",c(E,C),l(b,E,k,E.type),T){var F=w==="realaxis";if(F&&k("side"),F)k("tickvals");else{var D=p(_.realaxis.tickvals||f.realaxis.tickvals.dflt);k("tickvals",D)}t.isTypedArray(E.tickvals)&&(E.tickvals=Array.from(E.tickvals));var R,P,z,I,L=x.font||{};T&&(R=k("color"),P=R===b.color?R:L.color,z=L.size,I=L.family),n(b,E,k,E.type,{noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0,noTicklabelstep:!0,noAng:!F,noExp:!0,font:{color:P,size:z,family:I}}),t.coerce2(y,_,f,w+".ticklen"),t.coerce2(y,_,f,w+".tickwidth"),t.coerce2(y,_,f,w+".tickcolor",_.color);var B=k("ticks");B||(delete _[w].ticklen,delete _[w].tickwidth,delete _[w].tickcolor),u(b,E,k,{dfltColor:R,bgColor:x.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:f[w]}),k("layer")}k("hoverformat"),delete E.type,E._input=b}}r.exports=function(_,v,x){o(_,v,x,{noUirevision:!0,type:h.name,attributes:f,handleDefaults:g,font:v.font,paper_bgcolor:v.paper_bgcolor,fullData:x,layoutOut:v})};function m(y,_){var v={};return function(x){var S=_?_(x):x;if(S in v)return v[S];var M=y(x);return v[S]=M,M}}}}),Wue=de({"src/plots/smith/index.js"(e,r){"use strict";var t=$u().getSubplotCalcData,i=Qt().counterRegex,a=lj(),o=pj(),s=o.attr,l=o.name,n=i(l),u={};u[s]={valType:"subplotid",dflt:l,editType:"calc"};function c(h){for(var d=h._fullLayout,p=h.calcdata,g=d._subplots[l],m=0;m<g.length;m++){var y=g[m],_=t(p,l,y),v=d[y]._subplot;v||(v=a(h,y,!0),d[y]._subplot=v),v.plot(_,d,h._promises)}}function f(h,d,p,g){for(var m=g._subplots[l]||[],y=0;y<m.length;y++){var _=m[y],v=g[_]._subplot;if(!d[_]&&v){v.framework.remove();for(var x in v.clipPaths)v.clipPaths[x].remove()}}}r.exports={attr:s,name:l,idRoot:l,idRegex:n,attrRegex:n,attributes:u,layoutAttributes:vj(),supplyLayoutDefaults:$ue(),plot:c,clean:f,toSVG:ml().toSVG}}}),mj=de({"src/traces/scattersmith/attributes.js"(e,r){"use strict";var{hovertemplateAttrs:t,texttemplateAttrs:i,templatefallbackAttrs:a}=Vo(),o=fn().extendFlat,s=Kd(),l=tl(),n=ri(),u=l.line;r.exports={mode:l.mode,real:{valType:"data_array",editType:"calc+clearAxisTypes"},imag:{valType:"data_array",editType:"calc+clearAxisTypes"},text:l.text,texttemplate:i({editType:"plot"},{keys:["real","imag","text"]}),texttemplatefallback:a({editType:"plot"}),hovertext:l.hovertext,line:{color:u.color,width:u.width,dash:u.dash,backoff:u.backoff,shape:o({},u.shape,{values:["linear","spline"]}),smoothing:u.smoothing,editType:"calc"},connectgaps:l.connectgaps,marker:l.marker,cliponaxis:o({},l.cliponaxis,{dflt:!1}),textposition:l.textposition,textfont:l.textfont,fill:o({},l.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:s(),hoverinfo:o({},n.hoverinfo,{flags:["real","imag","text","name"]}),hoveron:l.hoveron,hovertemplate:t(),hovertemplatefallback:a(),selected:l.selected,unselected:l.unselected}}}),Yue=de({"src/traces/scattersmith/defaults.js"(e,r){"use strict";var t=Qt(),i=bs(),a=Nh(),o=yd(),s=p1(),l=_d(),n=Jd(),u=Zd().PTS_LINESONLY,c=mj();r.exports=function(d,p,g,m){function y(x,S){return t.coerce(d,p,c,x,S)}var _=f(d,p,m,y);if(!_){p.visible=!1;return}y("mode",_<u?"lines+markers":"lines"),y("text"),y("hovertext"),p.hoveron!=="fills"&&(y("hovertemplate"),y("hovertemplatefallback")),i.hasMarkers(p)&&a(d,p,g,m,y,{gradient:!0}),i.hasLines(p)&&(o(d,p,g,m,y,{backoff:!0}),s(d,p,y),y("connectgaps")),i.hasText(p)&&(y("texttemplate"),y("texttemplatefallback"),l(d,p,m,y));var v=[];(i.hasMarkers(p)||i.hasText(p))&&(y("cliponaxis"),y("marker.maxdisplayed"),v.push("points")),y("fill"),p.fill!=="none"&&(n(d,p,g,y),i.hasLines(p)||s(d,p,y)),(p.fill==="tonext"||p.fill==="toself")&&v.push("fills"),y("hoveron",v.join("+")||"points"),t.coerceSelectionMarkerOpacity(p,y)};function f(h,d,p,g){var m=g("real"),y=g("imag"),_;return m&&y&&(_=Math.min(m.length,y.length)),t.isTypedArray(m)&&(d.real=m=Array.from(m)),t.isTypedArray(y)&&(d.imag=y=Array.from(y)),d._length=_,_}}}),Xue=de({"src/traces/scattersmith/format_labels.js"(e,r){"use strict";var t=nn();r.exports=function(a,o,s){var l={},n=s[o.subplot]._subplot;return l.realLabel=t.tickText(n.radialAxis,a.real,!0).text,l.imagLabel=t.tickText(n.angularAxis,a.imag,!0).text,l}}}),Zue=de({"src/traces/scattersmith/calc.js"(e,r){"use strict";var t=da(),i=cn().BADNUM,a=jh(),o=Qd(),s=nh(),l=Uh().calcMarkerSize;r.exports=function(u,c){for(var f=u._fullLayout,h=c.subplot,d=f[h].realaxis,p=f[h].imaginaryaxis,g=d.makeCalcdata(c,"real"),m=p.makeCalcdata(c,"imag"),y=c._length,_=new Array(y),v=0;v<y;v++){var x=g[v],S=m[v],M=_[v]={};t(x)&&t(S)?(M.real=x,M.imag=S):M.real=i}return l(c,y),a(u,c),o(_,c),s(_,c),_}}}),Kue=de({"src/traces/scattersmith/plot.js"(e,r){"use strict";var t=v1(),i=cn().BADNUM,a=sj(),o=a.smith;r.exports=function(l,n,u){for(var c=n.layers.frontplot.select("g.scatterlayer"),f=n.xaxis,h=n.yaxis,d={xaxis:f,yaxis:h,plot:n.framework,layerClipId:n._hasClipOnAxisFalse?n.clipIds.forTraces:null},p=0;p<u.length;p++)for(var g=u[p],m=0;m<g.length;m++){m===0&&(g[0].trace._xA=f,g[0].trace._yA=h);var y=g[m],_=y.real;if(_===i)y.x=y.y=i;else{var v=o([_,y.imag]);y.x=v[0],y.y=v[1]}}t(l,d,u,c)}}}),Jue=de({"src/traces/scattersmith/hover.js"(e,r){"use strict";var t=g1();function i(o,s,l,n){var u=t(o,s,l,n);if(!(!u||u[0].index===!1)){var c=u[0];if(c.index===void 0)return u;var f=o.subplot,h=c.cd[c.index],d=c.trace;if(f.isPtInside(h))return c.xLabelVal=void 0,c.yLabelVal=void 0,a(h,d,f,c),c.hovertemplate=d.hovertemplate,u}}function a(o,s,l,n){var u=l.radialAxis,c=l.angularAxis;u._hovertitle="real",c._hovertitle="imag";var f={};f[s.subplot]={_subplot:l};var h=s._module.formatLabels(o,s,f);n.realLabel=h.realLabel,n.imagLabel=h.imagLabel;var d=o.hi||s.hoverinfo,p=[];function g(y,_){p.push(y._hovertitle+": "+_)}if(!s.hovertemplate){var m=d.split("+");m.indexOf("all")!==-1&&(m=["real","imag","text"]),m.indexOf("real")!==-1&&g(u,n.realLabel),m.indexOf("imag")!==-1&&g(c,n.imagLabel),m.indexOf("text")!==-1&&n.text&&(p.push(n.text),delete n.text),n.extraText=p.join("<br>")}}r.exports={hoverPoints:i,makeHoverPointText:a}}}),Que=de({"src/traces/scattersmith/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"scattersmith",basePlotModule:Wue(),categories:["smith","symbols","showLegend","scatter-like"],attributes:mj(),supplyDefaults:Yue(),colorbar:Yu(),formatLabels:Xue(),calc:Zue(),plot:Kue(),style:lf().style,styleOnSelect:lf().styleOnSelect,hoverPoints:Jue().hoverPoints,selectPoints:Mv(),meta:{}}}}),ece=de({"lib/scattersmith.js"(e,r){"use strict";r.exports=Que()}}),gj=de({"src/traces/quiver/attributes.js"(e,r){"use strict";var t=ri(),i=Vo().hovertemplateAttrs,a=Ns().axisHoverFormat,o=fn().extendFlat,s=cs(),l=fu().dash,n=g0(),u=tl(),c={x:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},x0:u.x0,dx:u.dx,y:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},y0:u.y0,dy:u.dy,u:{valType:"data_array",editType:"calc",anim:!0},v:{valType:"data_array",editType:"calc",anim:!0},arrowref:{valType:"enumerated",values:["paper","data"],dflt:"data",editType:"calc"},lengthmode:{valType:"enumerated",values:["scaled","raw"],editType:"calc",dflt:"scaled"},lengthfactor:{valType:"number",min:0,editType:"calc",dflt:1},anchor:{valType:"enumerated",values:["tip","tail","center"],dflt:"tail",editType:"calc"},xhoverformat:a("x"),yhoverformat:a("y"),uhoverformat:a("u","noDate"),vhoverformat:a("v","noDate"),hoverinfo:o({},t.hoverinfo,{flags:["x","y","u","v","text","name"],dflt:"all"}),hovertemplate:i({},{keys:["x","y","u","v","text","name"]}),text:u.text,textposition:u.textposition,textfont:u.textfont,marker:o({arrowsize:o({},n.arrowsize,{editType:"calc"}),line:{width:{valType:"number",min:0,dflt:2,editType:"style"},dash:l,editType:"style"},editType:"calc"},s("marker",{showScaleDflt:!0,editTypeOverride:"calc"})),selected:{marker:{color:{valType:"color",editType:"style"},line:{width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},unselected:{marker:{color:{valType:"color",editType:"style"},line:{width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"}};r.exports=c}}),tce=de({"src/traces/quiver/defaults.js"(e,r){"use strict";var t=Qt(),i=gj(),a=wv(),o=Wu().hasColorscale,s=hu();r.exports=function(n,u,c,f){function h(S,M){return t.coerce(n,u,i,S,M)}var d=a(n,u,f,h);if(!d){u.visible=!1;return}var p=h("u"),g=h("v");if(!t.isArrayOrTypedArray(p)||p.length===0){u.u=new Array(d);for(var m=0;m<d;m++)u.u[m]=0}if(!t.isArrayOrTypedArray(g)||g.length===0){u.v=new Array(d);for(var y=0;y<d;y++)u.v[y]=0}h("arrowref"),h("lengthmode"),h("lengthfactor"),h("anchor"),h("marker.arrowsize"),h("marker.line.width"),h("marker.line.dash"),h("text"),h("textposition"),t.coerceFont(h,"textfont",f.font),h("hovertemplate"),h("xhoverformat"),h("yhoverformat"),h("uhoverformat"),h("vhoverformat"),u.marker||(u.marker={}),h("marker.color",c);var _=o(n,"marker")||(n.marker||{}).coloraxis;u._hasColorscale=!!_,_&&s(n,u,f,h,{prefix:"marker.",cLetter:"c"});var v=u.marker.line||{},x=u.marker.color;u.line={width:v.width,color:t.isArrayOrTypedArray(x)?c:x,dash:v.dash},h("selected.marker.color"),h("selected.marker.line.width"),h("selected.textfont.color"),h("unselected.marker.color"),h("unselected.marker.line.width"),h("unselected.textfont.color")}}}),rce=de({"src/traces/quiver/calc.js"(e,r){"use strict";var t=Qt(),i=nn(),a=da(),o=cn().BADNUM,s=hc(),l=nh(),n=.97;r.exports=function(c,f){let h=f._xA=i.getFromId(c,f.xaxis||"x","x"),d=f._yA=i.getFromId(c,f.yaxis||"y","y"),p=h.makeCalcdata(f,"x"),g=d.makeCalcdata(f,"y"),m=Math.min(p.length,g.length);f._length=m;let y=new Array(m);var _=1/0,v=-1/0,x=1/0,S=-1/0;let M=f.marker.color,C=t.isArrayOrTypedArray(M),w=f.u||[],k=f.v||[],{anchor:A,lengthmode:b,arrowref:E}=f,T=A==="tip",F=A==="center";for(var D=1/0,R=-1/0,P=1/0,z=-1/0,I=1/0,L=-1/0,B=1/0,O=-1/0,G=0,W=0;W<m;W++){var X=y[W]={i:W},Z=a(p[W]),J=a(g[W]),N,H;if(a(w[W])&&a(k[W])?(N=X._u=+w[W],H=X._v=+k[W]):(N=X._u=0,H=X._v=0),Z&&J){G++,X.x=p[W],X.y=g[W],p[W]<D&&(D=p[W]),p[W]>R&&(R=p[W]),g[W]<P&&(P=g[W]),g[W]>z&&(z=g[W]),N<I&&(I=N),N>L&&(L=N),H<B&&(B=H),H>O&&(O=H);var $=Math.sqrt(N*N+H*H);if($>v&&(v=$),$<_&&(_=$),C){var U=M[W];X.mc=U,a(U)&&(U<x&&(x=U),U>S&&(S=U))}}else X.x=o,X.y=o}if(f._maxNorm=v,b==="scaled"||E==="paper"){let le=R-D,ce=z-P;var V;le===0&&ce===0?V=1:V=(le+ce+Math.sqrt((le-ce)*(le-ce)+4*G*le*ce))/(2*(G-1)),V*=n,f._scaleFactor=V/f._maxNorm}else f._scaleFactor=1;f._scaleFactor*=f.lengthfactor;let j=new Array(m),q=new Array(m),Y=new Array(m),K=new Array(m);for(var te,ne,W=0;W<m;W++){var X=y[W];te=X._u*f._scaleFactor,ne=X._v*f._scaleFactor,T?(j[W]=X.x,q[W]=X.y,Y[W]=X.x-te,K[W]=X.y-ne):F?(j[W]=X.x+te/2,q[W]=X.y+ne/2,Y[W]=X.x-te/2,K[W]=X.y-ne/2):(j[W]=X.x+te,q[W]=X.y+ne,Y[W]=X.x,K[W]=X.y)}if(E==="data"?(f._extremes[h._id]=i.findExtremes(h,j.concat(Y),{padded:!0}),f._extremes[d._id]=i.findExtremes(d,q.concat(K),{padded:!0})):(f._extremes[h._id]=i.findExtremes(h,j.concat(Y),{padded:!0}),f._extremes[d._id]=i.findExtremes(d,q.concat(K),{padded:!0})),h._minDtick=0,d._minDtick=0,t.mergeArray(f.text,y,"tx"),t.mergeArray(f.textposition,y,"tp"),f.textfont&&(t.mergeArrayCastPositive(f.textfont.size,y,"ts"),t.mergeArray(f.textfont.color,y,"tc"),t.mergeArray(f.textfont.family,y,"tf"),t.mergeArray(f.textfont.weight,y,"tw"),t.mergeArray(f.textfont.style,y,"ty"),t.mergeArray(f.textfont.variant,y,"tv")),f._hasColorscale){var se=C?[x,S]:[_,v];(!isFinite(se[0])||!isFinite(se[1]))&&(se=[0,1]),s(c,f,{vals:se,containerStr:"marker",cLetter:"c"})}return l(y,f),y}}}),ice=de({"src/traces/quiver/cross_trace_calc.js"(e,r){"use strict";r.exports=function(i,a){}}}),VS=de({"src/traces/quiver/style.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=ks(),s=Ap().DESELECTDIM;function l(f,h){var d=h.marker||{},p=o.makeColorScaleFuncFromTrace(d);f.style("stroke",function(g){var m=d.color,y;if(i.isArrayOrTypedArray(m)&&m.length>g.i&&isFinite(m[g.i]))y=m[g.i];else{var _=h.u&&h.u[g.i]||0,v=h.v&&h.v[g.i]||0;y=Math.sqrt(_*_+v*v)}return g.mcc=p(y),g.mcc})}function n(f){var h=t.select(f).selectAll("g.trace.quiver");h.each(function(d){c(f,d,t.select(this))})}function u(f,h,d){c(f,h,d)}function c(f,h,d){var p=h[0].trace,g=p.marker||{},m=g.line||{},y=i.isArrayOrTypedArray(g.color)?void 0:g.color,_=p._hasColorscale;if(d)if(p.selectedpoints){var v=(p.selected||{}).marker||{},x=(p.unselected||{}).marker||{},S=v.line||{},M=x.line||{};d.selectAll("path.js-line").each(function(w){var k=t.select(this),A=!w.selected,b=A?x.color:v.color,E=A?M.width!==void 0?M.width:m.width:S.width!==void 0?S.width:m.width;b?(a.lineGroupStyle(k,E,b,m.dash),k.style("stroke-opacity",1)):(a.lineGroupStyle(k,E,y,m.dash),_&&l(k,p),k.style("stroke-opacity",A?s:1))}),a.selectedTextStyle(d.selectAll("text"),p)}else{var C=d.selectAll("path.js-line");C.call(a.lineGroupStyle,m.width,y,m.dash),_&&l(C,p),C.style("stroke-opacity",1),a.textPointStyle(d.selectAll("text"),p,f)}}r.exports={style:n,styleOnSelect:u,colorscaleStroke:l}}}),ace=de({"src/traces/quiver/plot.js"(e,r){"use strict";var t=Yr(),i=Qt(),a=hn(),o=VS().colorscaleStroke,s=Math.PI/12,l=5.8,n=1.5,u=.7;r.exports=function(h,d,p,g,m,y){var _,v,x=!m,S=!!m&&m.duration>0;if(_=g.selectAll("g.trace").data(p,function(C){return C[0].trace.uid}),_.enter().append("g").attr("class",function(C){return"trace quiver trace"+C[0].trace.uid}).style("stroke-miterlimit",2),_.order(),S){y&&(v=y());var M=t.transition().duration(m.duration).ease(m.easing).each("end",function(){v&&v()}).each("interrupt",function(){v&&v()});M.each(function(){g.selectAll("g.trace").each(function(C,w){c(h,w,d,C,p,this,m)})})}else _.each(function(C,w){c(h,w,d,C,p,this,m)});x&&_.exit().remove()};function c(f,h,d,p,g,m,y){var _=p[0].trace,v=d.xaxis,x=d.yaxis;p[0][d.isRangePlot?"nodeRangePlot3":"node3"]=t.select(m);var S=t.select(m).selectAll("g.lines").data([p]);S.enter().append("g").classed("lines",!0),a.setClipUrl(S,d.layerClipId,f);var M=S.selectAll("path.js-line").data(p);M.enter().append("path").classed("js-line",!0).style("vector-effect","non-scaling-stroke"),M.exit().remove();let{anchor:C,maxNorm:w=0,arrowref:k}=_,A=k==="paper"?_._scaleFactor*Math.sqrt(Math.abs(v._m*x._m)):_._scaleFactor,b=_.marker.arrowsize;M.each(function(z){let I=t.select(this);if(z.x===void 0||z.y===void 0){I.attr("d",null);return}let L=(k==="paper"?z._u*Math.sign(v._m):t.round(v._m*z._u))*A,B=(k==="paper"?z._v*Math.sign(x._m):t.round(x._m*z._v))*A,O=(_._input.marker||{}).arrowsize!==void 0;var G,W,X,Z;C==="tip"?(G=v.c2p(z.x)-L,X=x.c2p(z.y)-B,W=v.c2p(z.x),Z=x.c2p(z.y)):C==="center"?(G=v.c2p(z.x)-L/2,X=x.c2p(z.y)-B/2,W=v.c2p(z.x)+L/2,Z=x.c2p(z.y)+B/2):(G=v.c2p(z.x),X=x.c2p(z.y),W=v.c2p(z.x)+L,Z=x.c2p(z.y)+B),z._px0=G,z._py0=X,z._px1=W,z._py1=Z;var J=_.marker.line.width;O||(J=Math.max(J,n));let N=Math.sqrt((W-G)*(W-G)+(Z-X)*(Z-X)),H=u*N,$=Math.min(l*b*J,H),U=Math.atan2(Z-X,W-G),V=W-$*Math.cos(U-s),j=Z-$*Math.sin(U-s),q=W-$*Math.cos(U+s),Y=Z-$*Math.sin(U+s),K="M"+G+","+X+"L"+W+","+Z+"L"+V+","+j+"L"+W+","+Z+"L"+q+","+Y;I.attr("d",K)});var E=_.marker||{},T=E.line||{},F=i.isArrayOrTypedArray(E.color)?void 0:E.color;a.lineGroupStyle(M,T.width,F,T.dash),_._hasColorscale&&o(M,_);var D=t.select(m).selectAll("g.text").data([p]);D.enter().append("g").classed("text",!0),a.setClipUrl(D,d.layerClipId,f);var R=D.selectAll("g.textpoint").data(p);if(R.enter().append("g").classed("textpoint",!0).append("text"),R.exit().remove(),R.each(function(z){var I=t.select(this),L=a.translatePoint(z,I.select("text"),v,x);L||I.remove()}),R.selectAll("text").call(a.textPointStyle,_,f).each(function(z){var I=v.c2p(z.x),L=x.c2p(z.y);t.select(this).selectAll("tspan.line").each(function(){t.select(this).attr({x:I,y:L})})}),y&&y.duration>0){var P=t.transition().duration(y.duration).ease(y.easing);M.transition(P).style("opacity",1)}}}}),nce=de({"src/traces/quiver/hover.js"(e,r){"use strict";var t=Qt(),i=$s(),a=m1();function o(s,l,n,u,c,f){let h=c-n,d=f-u,p=h*h+d*d;if(!p)return Math.sqrt((s-n)*(s-n)+(l-u)*(l-u));var g=((s-n)*h+(l-u)*d)/p;g=Math.max(0,Math.min(1,g));let m=n+g*h,y=u+g*d;return Math.sqrt((s-m)*(s-m)+(l-y)*(l-y))}r.exports=function(l,n,u,c){var f=l.cd,h=f[0].trace,d=l.xa,p=l.ya,g=d.c2p(n),m=p.c2p(u),y=function(k){return k._px0===void 0?1/0:o(g,m,k._px0,k._py0,k._px1,k._py1)};if(i.getClosest(f,y,l),l.index!==!1){var _=f[l.index],v=d.c2p(_.x,!0),x=p.c2p(_.y,!0),S=Math.sqrt((g-v)*(g-v)+(m-x)*(m-x));l.index=_.i;var M=h.u?h.u[_.i]:0,C=h.v?h.v[_.i]:0,w="u: "+M+", v: "+C;return t.extendFlat(l,{color:a(h,_),x0:v-3,x1:v+3,xLabelVal:_.x,y0:x-3,y1:x+3,yLabelVal:_.y,uLabelVal:M,vLabelVal:C,extraText:w,spikeDistance:S,hovertemplate:h.hovertemplate}),t.fillText(_,h,l),[l]}}}}),oce=de({"src/traces/quiver/format_labels.js"(e,r){"use strict";var t=nn(),i=Qt();r.exports=function(o,s,l){var n={},u={_fullLayout:l},c=t.getFromTrace(u,s,"x"),f=t.getFromTrace(u,s,"y"),h=o.x,d=o.y;n.xLabel=t.tickText(c,c.c2l(h),!0).text,n.yLabel=t.tickText(f,f.c2l(d),!0).text;var p=s.u?s.u[o.i]:0,g=s.v?s.v[o.i]:0,m=s.uhoverformat,y=s.vhoverformat;return n.uLabel=m?i.numberFormat(m)(p):String(p),n.vLabel=y?i.numberFormat(y)(g):String(g),n}}}),sce=de({"src/traces/quiver/event_data.js"(e,r){"use strict";r.exports=function(i,a,o,s,l){return i.x=a.x,i.y=a.y,i.u=o.u?o.u[l]:void 0,i.v=o.v?o.v[l]:void 0,i}}}),lce=de({"src/traces/quiver/index.js"(e,r){"use strict";r.exports={moduleType:"trace",name:"quiver",basePlotModule:ml(),categories:["cartesian","svg","showLegend","scatter-like","zoomScale"],attributes:gj(),supplyDefaults:tce(),calc:rce(),crossTraceCalc:ice(),plot:ace(),style:VS().style,styleOnSelect:VS().styleOnSelect,hoverPoints:nce(),formatLabels:oce(),eventData:sce(),selectPoints:Mv(),colorbar:Yu(),animatable:!0,meta:{}}}}),uce=de({"lib/quiver.js"(e,r){"use strict";r.exports=lce()}}),_c=de({"node_modules/world-calendars/dist/main.js"(e,r){var t=du();function i(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}t(i.prototype,{instance:function(u,c){u=(u||"gregorian").toLowerCase(),c=c||"";var f=this._localCals[u+"-"+c];if(!f&&this.calendars[u]&&(f=new this.calendars[u](c),this._localCals[u+"-"+c]=f),!f)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,u);return f},newDate:function(u,c,f,h,d){return h=(u!=null&&u.year?u.calendar():typeof h=="string"?this.instance(h,d):h)||this.instance(),h.newDate(u,c,f)},substituteDigits:function(u){return function(c){return(c+"").replace(/[0-9]/g,function(f){return u[f]})}},substituteChineseDigits:function(u,c){return function(f){for(var h="",d=0;f>0;){var p=f%10;h=(p===0?"":u[p]+c[d])+h,d++,f=Math.floor(f/10)}return h.indexOf(u[1]+c[1])===0&&(h=h.substr(1)),h||u[0]}}});function a(u,c,f,h){if(this._calendar=u,this._year=c,this._month=f,this._day=h,this._calendar._validateLevel===0&&!this._calendar.isValid(this._year,this._month,this._day))throw(n.local.invalidDate||n.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function o(u,c){return u=""+u,"000000".substring(0,c-u.length)+u}t(a.prototype,{newDate:function(u,c,f){return this._calendar.newDate(u??this,c,f)},year:function(u){return arguments.length===0?this._year:this.set(u,"y")},month:function(u){return arguments.length===0?this._month:this.set(u,"m")},day:function(u){return arguments.length===0?this._day:this.set(u,"d")},date:function(u,c,f){if(!this._calendar.isValid(u,c,f))throw(n.local.invalidDate||n.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=u,this._month=c,this._day=f,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(u,c){return this._calendar.add(this,u,c)},set:function(u,c){return this._calendar.set(this,u,c)},compareTo:function(u){if(this._calendar.name!==u._calendar.name)throw(n.local.differentCalendars||n.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,u._calendar.local.name);var c=this._year!==u._year?this._year-u._year:this._month!==u._month?this.monthOfYear()-u.monthOfYear():this._day-u._day;return c===0?0:c<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(u){return this._calendar.fromJD(u)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(u){return this._calendar.fromJSDate(u)},toString:function(){return(this.year()<0?"-":"")+o(Math.abs(this.year()),4)+"-"+o(this.month(),2)+"-"+o(this.day(),2)}});function s(){this.shortYearCutoff="+10"}t(s.prototype,{_validateLevel:0,newDate:function(u,c,f){return u==null?this.today():(u.year&&(this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate),f=u.day(),c=u.month(),u=u.year()),new a(this,u,c,f))},today:function(){return this.fromJSDate(new Date)},epoch:function(u){var c=this._validate(u,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return c.year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(u){var c=this._validate(u,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return(c.year()<0?"-":"")+o(Math.abs(c.year()),4)},monthsInYear:function(u){return this._validate(u,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),12},monthOfYear:function(u,c){var f=this._validate(u,c,this.minDay,n.local.invalidMonth||n.regionalOptions[""].invalidMonth);return(f.month()+this.monthsInYear(f)-this.firstMonth)%this.monthsInYear(f)+this.minMonth},fromMonthOfYear:function(u,c){var f=(c+this.firstMonth-2*this.minMonth)%this.monthsInYear(u)+this.minMonth;return this._validate(u,f,this.minDay,n.local.invalidMonth||n.regionalOptions[""].invalidMonth),f},daysInYear:function(u){var c=this._validate(u,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return this.leapYear(c)?366:365},dayOfYear:function(u,c,f){var h=this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate);return h.toJD()-this.newDate(h.year(),this.fromMonthOfYear(h.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(u,c,f){var h=this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(h))+2)%this.daysInWeek()},extraInfo:function(u,c,f){return this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate),{}},add:function(u,c,f){return this._validate(u,this.minMonth,this.minDay,n.local.invalidDate||n.regionalOptions[""].invalidDate),this._correctAdd(u,this._add(u,c,f),c,f)},_add:function(u,c,f){if(this._validateLevel++,f==="d"||f==="w"){var h=u.toJD()+c*(f==="w"?this.daysInWeek():1),d=u.calendar().fromJD(h);return this._validateLevel--,[d.year(),d.month(),d.day()]}try{var p=u.year()+(f==="y"?c:0),g=u.monthOfYear()+(f==="m"?c:0),d=u.day(),m=function(v){for(;g<v.minMonth;)p--,g+=v.monthsInYear(p);for(var x=v.monthsInYear(p);g>x-1+v.minMonth;)p++,g-=x,x=v.monthsInYear(p)};f==="y"?(u.month()!==this.fromMonthOfYear(p,g)&&(g=this.newDate(p,u.month(),this.minDay).monthOfYear()),g=Math.min(g,this.monthsInYear(p)),d=Math.min(d,this.daysInMonth(p,this.fromMonthOfYear(p,g)))):f==="m"&&(m(this),d=Math.min(d,this.daysInMonth(p,this.fromMonthOfYear(p,g))));var y=[p,this.fromMonthOfYear(p,g),d];return this._validateLevel--,y}catch(_){throw this._validateLevel--,_}},_correctAdd:function(u,c,f,h){if(!this.hasYearZero&&(h==="y"||h==="m")&&(c[0]===0||u.year()>0!=c[0]>0)){var d={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[h],p=f<0?-1:1;c=this._add(u,f*d[0]+p*d[1],d[2])}return u.date(c[0],c[1],c[2])},set:function(u,c,f){this._validate(u,this.minMonth,this.minDay,n.local.invalidDate||n.regionalOptions[""].invalidDate);var h=f==="y"?c:u.year(),d=f==="m"?c:u.month(),p=f==="d"?c:u.day();return(f==="y"||f==="m")&&(p=Math.min(p,this.daysInMonth(h,d))),u.date(h,d,p)},isValid:function(u,c,f){this._validateLevel++;var h=this.hasYearZero||u!==0;if(h){var d=this.newDate(u,c,this.minDay);h=c>=this.minMonth&&c-this.minMonth<this.monthsInYear(d)&&f>=this.minDay&&f-this.minDay<this.daysInMonth(d)}return this._validateLevel--,h},toJSDate:function(u,c,f){var h=this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate);return n.instance().fromJD(this.toJD(h)).toJSDate()},fromJSDate:function(u){return this.fromJD(n.instance().fromJSDate(u).toJD())},_validate:function(u,c,f,h){if(u.year){if(this._validateLevel===0&&this.name!==u.calendar().name)throw(n.local.differentCalendars||n.regionalOptions[""].differentCalendars).replace(/\{0\}/,this.local.name).replace(/\{1\}/,u.calendar().local.name);return u}try{if(this._validateLevel++,this._validateLevel===1&&!this.isValid(u,c,f))throw h.replace(/\{0\}/,this.local.name);var d=this.newDate(u,c,f);return this._validateLevel--,d}catch(p){throw this._validateLevel--,p}}});function l(u){this.local=this.regionalOptions[u]||this.regionalOptions[""]}l.prototype=new s,t(l.prototype,{name:"Gregorian",jdEpoch:17214255e-1,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Gregorian",epochs:["BCE","CE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(f){var c=this._validate(f,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),f=c.year()+(c.year()<0?1:0);return f%4===0&&(f%100!==0||f%400===0)},weekOfYear:function(u,c,f){var h=this.newDate(u,c,f);return h.add(4-(h.dayOfWeek()||7),"d"),Math.floor((h.dayOfYear()-1)/7)+1},daysInMonth:function(u,c){var f=this._validate(u,c,this.minDay,n.local.invalidMonth||n.regionalOptions[""].invalidMonth);return this.daysPerMonth[f.month()-1]+(f.month()===2&&this.leapYear(f.year())?1:0)},weekDay:function(u,c,f){return(this.dayOfWeek(u,c,f)||7)<6},toJD:function(u,c,f){var h=this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate);u=h.year(),c=h.month(),f=h.day(),u<0&&u++,c<3&&(c+=12,u--);var d=Math.floor(u/100),p=2-d+Math.floor(d/4);return Math.floor(365.25*(u+4716))+Math.floor(30.6001*(c+1))+f+p-1524.5},fromJD:function(u){var c=Math.floor(u+.5),f=Math.floor((c-186721625e-2)/36524.25);f=c+1+f-Math.floor(f/4);var h=f+1524,d=Math.floor((h-122.1)/365.25),p=Math.floor(365.25*d),g=Math.floor((h-p)/30.6001),m=h-p-Math.floor(g*30.6001),y=g-(g>13.5?13:1),_=d-(y>2.5?4716:4715);return _<=0&&_--,this.newDate(_,y,m)},toJSDate:function(u,c,f){var h=this._validate(u,c,f,n.local.invalidDate||n.regionalOptions[""].invalidDate),d=new Date(h.year(),h.month()-1,h.day());return d.setHours(0),d.setMinutes(0),d.setSeconds(0),d.setMilliseconds(0),d.setHours(d.getHours()>12?d.getHours()+2:0),d},fromJSDate:function(u){return this.newDate(u.getFullYear(),u.getMonth()+1,u.getDate())}});var n=r.exports=new i;n.cdate=a,n.baseCalendar=s,n.calendars.gregorian=l}}),cce=de({"node_modules/world-calendars/dist/plus.js"(){var e=du(),r=_c();e(r.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"}),r.local=r.regionalOptions[""],e(r.cdate.prototype,{formatDate:function(t,i){return typeof t!="string"&&(i=t,t=""),this._calendar.formatDate(t||"",this,i)}}),e(r.baseCalendar.prototype,{UNIX_EPOCH:r.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:1440*60,TICKS_EPOCH:r.instance().jdEpoch,TICKS_PER_DAY:1440*60*1e7,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(t,i,a){if(typeof t!="string"&&(a=i,i=t,t=""),!i)return"";if(i.calendar()!==this)throw r.local.invalidFormat||r.regionalOptions[""].invalidFormat;t=t||this.local.dateFormat,a=a||{};for(var o=a.dayNamesShort||this.local.dayNamesShort,s=a.dayNames||this.local.dayNames,l=a.monthNumbers||this.local.monthNumbers,n=a.monthNamesShort||this.local.monthNamesShort,u=a.monthNames||this.local.monthNames,c=a.calculateWeek||this.local.calculateWeek,f=function(M,C){for(var w=1;S+w<t.length&&t.charAt(S+w)===M;)w++;return S+=w-1,Math.floor(w/(C||1))>1},h=function(M,C,w,k){var A=""+C;if(f(M,k))for(;A.length<w;)A="0"+A;return A},d=function(M,C,w,k){return f(M)?k[C]:w[C]},p=this,g=function(M){return typeof l=="function"?l.call(p,M,f("m")):_(h("m",M.month(),2))},m=function(M,C){return C?typeof u=="function"?u.call(p,M):u[M.month()-p.minMonth]:typeof n=="function"?n.call(p,M):n[M.month()-p.minMonth]},y=this.local.digits,_=function(M){return a.localNumbers&&y?y(M):M},v="",x=!1,S=0;S<t.length;S++)if(x)t.charAt(S)==="'"&&!f("'")?x=!1:v+=t.charAt(S);else switch(t.charAt(S)){case"d":v+=_(h("d",i.day(),2));break;case"D":v+=d("D",i.dayOfWeek(),o,s);break;case"o":v+=h("o",i.dayOfYear(),3);break;case"w":v+=h("w",i.weekOfYear(),2);break;case"m":v+=g(i);break;case"M":v+=m(i,f("M"));break;case"y":v+=f("y",2)?i.year():(i.year()%100<10?"0":"")+i.year()%100;break;case"Y":f("Y",2),v+=i.formatYear();break;case"J":v+=i.toJD();break;case"@":v+=(i.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case"!":v+=(i.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case"'":f("'")?v+="'":x=!0;break;default:v+=t.charAt(S)}return v},parseDate:function(t,i,a){if(i==null)throw r.local.invalidArguments||r.regionalOptions[""].invalidArguments;if(i=typeof i=="object"?i.toString():i+"",i==="")return null;t=t||this.local.dateFormat,a=a||{};var o=a.shortYearCutoff||this.shortYearCutoff;o=typeof o!="string"?o:this.today().year()%100+parseInt(o,10);for(var s=a.dayNamesShort||this.local.dayNamesShort,l=a.dayNames||this.local.dayNames,n=a.parseMonth||this.local.parseMonth,u=a.monthNumbers||this.local.monthNumbers,c=a.monthNamesShort||this.local.monthNamesShort,f=a.monthNames||this.local.monthNames,h=-1,d=-1,p=-1,g=-1,m=-1,y=!1,_=!1,v=function(F,D){for(var R=1;b+R<t.length&&t.charAt(b+R)===F;)R++;return b+=R-1,Math.floor(R/(D||1))>1},x=function(F,D){var R=v(F,D),P=[2,3,R?4:2,R?4:2,10,11,20]["oyYJ@!".indexOf(F)+1],z=new RegExp("^-?\\d{1,"+P+"}"),I=i.substring(A).match(z);if(!I)throw(r.local.missingNumberAt||r.regionalOptions[""].missingNumberAt).replace(/\{0\}/,A);return A+=I[0].length,parseInt(I[0],10)},S=this,M=function(){if(typeof u=="function"){v("m");var F=u.call(S,i.substring(A));return A+=F.length,F}return x("m")},C=function(F,D,R,P){for(var z=v(F,P)?R:D,I=0;I<z.length;I++)if(i.substr(A,z[I].length).toLowerCase()===z[I].toLowerCase())return A+=z[I].length,I+S.minMonth;throw(r.local.unknownNameAt||r.regionalOptions[""].unknownNameAt).replace(/\{0\}/,A)},w=function(){if(typeof f=="function"){var F=v("M")?f.call(S,i.substring(A)):c.call(S,i.substring(A));return A+=F.length,F}return C("M",c,f)},k=function(){if(i.charAt(A)!==t.charAt(b))throw(r.local.unexpectedLiteralAt||r.regionalOptions[""].unexpectedLiteralAt).replace(/\{0\}/,A);A++},A=0,b=0;b<t.length;b++)if(_)t.charAt(b)==="'"&&!v("'")?_=!1:k();else switch(t.charAt(b)){case"d":g=x("d");break;case"D":C("D",s,l);break;case"o":m=x("o");break;case"w":x("w");break;case"m":p=M();break;case"M":p=w();break;case"y":var E=b;y=!v("y",2),b=E,d=x("y",2);break;case"Y":d=x("Y",2);break;case"J":h=x("J")+.5,i.charAt(A)==="."&&(A++,x("J"));break;case"@":h=x("@")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case"!":h=x("!")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case"*":A=i.length;break;case"'":v("'")?k():_=!0;break;default:k()}if(A<i.length)throw r.local.unexpectedText||r.regionalOptions[""].unexpectedText;if(d===-1?d=this.today().year():d<100&&y&&(d+=o===-1?1900:this.today().year()-this.today().year()%100-(d<=o?0:100)),typeof p=="string"&&(p=n.call(this,d,p)),m>-1){p=1,g=m;for(var T=this.daysInMonth(d,p);g>T;T=this.daysInMonth(d,p))p++,g-=T}return h>-1?this.fromJD(h):this.newDate(d,p,g)},determineDate:function(t,i,a,o,s){a&&typeof a!="object"&&(s=o,o=a,a=null),typeof o!="string"&&(s=o,o="");var l=this,n=function(u){try{return l.parseDate(o,u,s)}catch{}u=u.toLowerCase();for(var c=(u.match(/^c/)&&a?a.newDate():null)||l.today(),f=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,h=f.exec(u);h;)c.add(parseInt(h[1],10),h[2]||"d"),h=f.exec(u);return c};return i=i?i.newDate():null,t=t==null?i:typeof t=="string"?n(t):typeof t=="number"?isNaN(t)||t===1/0||t===-1/0?i:l.today().add(t,"d"):l.newDate(t),t}})}}),fce=de({"node_modules/world-calendars/dist/calendars/chinese.js"(){var e=_c(),r=du(),t=e.instance();function i(h){this.local=this.regionalOptions[h||""]||this.regionalOptions[""]}i.prototype=new e.baseCalendar,r(i.prototype,{name:"Chinese",jdEpoch:17214255e-1,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(h,d){if(typeof h=="string"){var p=h.match(o);return p?p[0]:""}var g=this._validateYear(h),m=h.month(),y=""+this.toChineseMonth(g,m);return d&&y.length<2&&(y="0"+y),this.isIntercalaryMonth(g,m)&&(y+="i"),y},monthNames:function(h){if(typeof h=="string"){var d=h.match(s);return d?d[0]:""}var p=this._validateYear(h),g=h.month(),m=this.toChineseMonth(p,g),y=["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"][m-1];return this.isIntercalaryMonth(p,g)&&(y="\u95F0"+y),y},monthNamesShort:function(h){if(typeof h=="string"){var d=h.match(l);return d?d[0]:""}var p=this._validateYear(h),g=h.month(),m=this.toChineseMonth(p,g),y=["\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u5341\u4E00","\u5341\u4E8C"][m-1];return this.isIntercalaryMonth(p,g)&&(y="\u95F0"+y),y},parseMonth:function(h,d){h=this._validateYear(h);var p=parseInt(d),g;if(isNaN(p))d[0]==="\u95F0"&&(g=!0,d=d.substring(1)),d[d.length-1]==="\u6708"&&(d=d.substring(0,d.length-1)),p=1+["\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D","\u4E03","\u516B","\u4E5D","\u5341","\u5341\u4E00","\u5341\u4E8C"].indexOf(d);else{var m=d[d.length-1];g=m==="i"||m==="I"}var y=this.toMonthIndex(h,p,g);return y},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(h,d){if(h.year&&(h=h.year()),typeof h!="number"||h<1888||h>2111)throw d.replace(/\{0\}/,this.local.name);return h},toMonthIndex:function(h,d,p){var g=this.intercalaryMonth(h),m=p&&d!==g;if(m||d<1||d>12)throw e.local.invalidMonth.replace(/\{0\}/,this.local.name);var y;return g?!p&&d<=g?y=d-1:y=d:y=d-1,y},toChineseMonth:function(h,d){h.year&&(h=h.year(),d=h.month());var p=this.intercalaryMonth(h),g=p?12:11;if(d<0||d>g)throw e.local.invalidMonth.replace(/\{0\}/,this.local.name);var m;return p?d<p?m=d+1:m=d:m=d+1,m},intercalaryMonth:function(h){h=this._validateYear(h);var d=n[h-n[0]],p=d>>13;return p},isIntercalaryMonth:function(h,d){h.year&&(h=h.year(),d=h.month());var p=this.intercalaryMonth(h);return!!p&&p===d},leapYear:function(h){return this.intercalaryMonth(h)!==0},weekOfYear:function(h,d,p){var g=this._validateYear(h,e.local.invalidyear),m=u[g-u[0]],y=m>>9&4095,_=m>>5&15,v=m&31,x;x=t.newDate(y,_,v),x.add(4-(x.dayOfWeek()||7),"d");var S=this.toJD(h,d,p)-x.toJD();return 1+Math.floor(S/7)},monthsInYear:function(h){return this.leapYear(h)?13:12},daysInMonth:function(h,d){h.year&&(d=h.month(),h=h.year()),h=this._validateYear(h);var p=n[h-n[0]],g=p>>13,m=g?12:11;if(d>m)throw e.local.invalidMonth.replace(/\{0\}/,this.local.name);var y=p&1<<12-d?30:29;return y},weekDay:function(h,d,p){return(this.dayOfWeek(h,d,p)||7)<6},toJD:function(h,d,p){var g=this._validate(h,y,p,e.local.invalidDate);h=this._validateYear(g.year()),d=g.month(),p=g.day();var m=this.isIntercalaryMonth(h,d),y=this.toChineseMonth(h,d),_=f(h,y,p,m);return t.toJD(_.year,_.month,_.day)},fromJD:function(h){var d=t.fromJD(h),p=c(d.year(),d.month(),d.day()),g=this.toMonthIndex(p.year,p.month,p.isIntercalary);return this.newDate(p.year,g,p.day)},fromString:function(h){var d=h.match(a),p=this._validateYear(+d[1]),g=+d[2],m=!!d[3],y=this.toMonthIndex(p,g,m),_=+d[4];return this.newDate(p,y,_)},add:function(h,d,p){var g=h.year(),m=h.month(),y=this.isIntercalaryMonth(g,m),_=this.toChineseMonth(g,m),v=Object.getPrototypeOf(i.prototype).add.call(this,h,d,p);if(p==="y"){var x=v.year(),S=v.month(),M=this.isIntercalaryMonth(x,_),C=y&&M?this.toMonthIndex(x,_,!0):this.toMonthIndex(x,_,!1);C!==S&&v.month(C)}return v}});var a=/^\s*(-?\d\d\d\d|\d\d)[-/](\d?\d)([iI]?)[-/](\d?\d)/m,o=/^\d?\d[iI]?/m,s=/^闰?十?[一二三四五六七八九]?月/m,l=/^闰?十?[一二三四五六七八九]?/m;e.calendars.chinese=i;var n=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],u=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904];function c(h,d,p,g){var m,y;if(typeof h=="object")m=h,y=d||{};else{var _=typeof h=="number"&&h>=1888&&h<=2111;if(!_)throw new Error("Solar year outside range 1888-2111");var v=typeof d=="number"&&d>=1&&d<=12;if(!v)throw new Error("Solar month outside range 1 - 12");var x=typeof p=="number"&&p>=1&&p<=31;if(!x)throw new Error("Solar day outside range 1 - 31");m={year:h,month:d,day:p},y=g||{}}var S=u[m.year-u[0]],M=m.year<<9|m.month<<5|m.day;y.year=M>=S?m.year:m.year-1,S=u[y.year-u[0]];var C=S>>9&4095,w=S>>5&15,k=S&31,A,b=new Date(C,w-1,k),E=new Date(m.year,m.month-1,m.day);A=Math.round((E-b)/(24*3600*1e3));var T=n[y.year-n[0]],F;for(F=0;F<13;F++){var D=T&1<<12-F?30:29;if(A<D)break;A-=D}var R=T>>13;return!R||F<R?(y.isIntercalary=!1,y.month=1+F):F===R?(y.isIntercalary=!0,y.month=F):(y.isIntercalary=!1,y.month=F),y.day=1+A,y}function f(h,d,p,g,m){var y,_;if(typeof h=="object")_=h,y=d||{};else{var v=typeof h=="number"&&h>=1888&&h<=2111;if(!v)throw new Error("Lunar year outside range 1888-2111");var x=typeof d=="number"&&d>=1&&d<=12;if(!x)throw new Error("Lunar month outside range 1 - 12");var S=typeof p=="number"&&p>=1&&p<=30;if(!S)throw new Error("Lunar day outside range 1 - 30");var M;typeof g=="object"?(M=!1,y=g):(M=!!g,y=m||{}),_={year:h,month:d,day:p,isIntercalary:M}}var C;C=_.day-1;var w=n[_.year-n[0]],k=w>>13,A;k&&(_.month>k||_.isIntercalary)?A=_.month:A=_.month-1;for(var b=0;b<A;b++){var E=w&1<<12-b?30:29;C+=E}var T=u[_.year-u[0]],F=T>>9&4095,D=T>>5&15,R=T&31,P=new Date(F,D-1,R+C);return y.year=P.getFullYear(),y.month=1+P.getMonth(),y.day=P.getDate(),y}}}),hce=de({"node_modules/world-calendars/dist/calendars/coptic.js"(){var e=_c(),r=du();function t(i){this.local=this.regionalOptions[i||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Coptic",jdEpoch:18250295e-1,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Coptic",epochs:["BAM","AM"],monthNames:["Thout","Paopi","Hathor","Koiak","Tobi","Meshir","Paremhat","Paremoude","Pashons","Paoni","Epip","Mesori","Pi Kogi Enavot"],monthNamesShort:["Tho","Pao","Hath","Koi","Tob","Mesh","Pat","Pad","Pash","Pao","Epi","Meso","PiK"],dayNames:["Tkyriaka","Pesnau","Pshoment","Peftoou","Ptiou","Psoou","Psabbaton"],dayNamesShort:["Tky","Pes","Psh","Pef","Pti","Pso","Psa"],dayNamesMin:["Tk","Pes","Psh","Pef","Pt","Pso","Psa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(o){var a=this._validate(o,this.minMonth,this.minDay,e.local.invalidYear),o=a.year()+(a.year()<0?1:0);return o%4===3||o%4===-1},monthsInYear:function(i){return this._validate(i,this.minMonth,this.minDay,e.local.invalidYear||e.regionalOptions[""].invalidYear),13},weekOfYear:function(i,a,o){var s=this.newDate(i,a,o);return s.add(-s.dayOfWeek(),"d"),Math.floor((s.dayOfYear()-1)/7)+1},daysInMonth:function(i,a){var o=this._validate(i,a,this.minDay,e.local.invalidMonth);return this.daysPerMonth[o.month()-1]+(o.month()===13&&this.leapYear(o.year())?1:0)},weekDay:function(i,a,o){return(this.dayOfWeek(i,a,o)||7)<6},toJD:function(i,a,o){var s=this._validate(i,a,o,e.local.invalidDate);return i=s.year(),i<0&&i++,s.day()+(s.month()-1)*30+(i-1)*365+Math.floor(i/4)+this.jdEpoch-1},fromJD:function(i){var a=Math.floor(i)+.5-this.jdEpoch,o=Math.floor((a-Math.floor((a+366)/1461))/365)+1;o<=0&&o--,a=Math.floor(i)+.5-this.newDate(o,1,1).toJD();var s=Math.floor(a/30)+1,l=a-(s-1)*30+1;return this.newDate(o,s,l)}}),e.calendars.coptic=t}}),dce=de({"node_modules/world-calendars/dist/calendars/discworld.js"(){var e=_c(),r=du();function t(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Discworld",jdEpoch:17214255e-1,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Discworld",epochs:["BUC","UC"],monthNames:["Ick","Offle","February","March","April","May","June","Grune","August","Spune","Sektober","Ember","December"],monthNamesShort:["Ick","Off","Feb","Mar","Apr","May","Jun","Gru","Aug","Spu","Sek","Emb","Dec"],dayNames:["Sunday","Octeday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Oct","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Oc","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:2,isRTL:!1}},leapYear:function(a){return this._validate(a,this.minMonth,this.minDay,e.local.invalidYear),!1},monthsInYear:function(a){return this._validate(a,this.minMonth,this.minDay,e.local.invalidYear),13},daysInYear:function(a){return this._validate(a,this.minMonth,this.minDay,e.local.invalidYear),400},weekOfYear:function(a,o,s){var l=this.newDate(a,o,s);return l.add(-l.dayOfWeek(),"d"),Math.floor((l.dayOfYear()-1)/8)+1},daysInMonth:function(a,o){var s=this._validate(a,o,this.minDay,e.local.invalidMonth);return this.daysPerMonth[s.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate);return(l.day()+1)%8},weekDay:function(a,o,s){var l=this.dayOfWeek(a,o,s);return l>=2&&l<=6},extraInfo:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate);return{century:i[Math.floor((l.year()-1)/100)+1]||""}},toJD:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate);return a=l.year()+(l.year()<0?1:0),o=l.month(),s=l.day(),s+(o>1?16:0)+(o>2?(o-2)*32:0)+(a-1)*400+this.jdEpoch-1},fromJD:function(a){a=Math.floor(a+.5)-Math.floor(this.jdEpoch)-1;var o=Math.floor(a/400)+1;a-=(o-1)*400,a+=a>15?16:0;var s=Math.floor(a/32)+1,l=a-(s-1)*32+1;return this.newDate(o<=0?o-1:o,s,l)}});var i={20:"Fruitbat",21:"Anchovy"};e.calendars.discworld=t}}),pce=de({"node_modules/world-calendars/dist/calendars/ethiopian.js"(){var e=_c(),r=du();function t(i){this.local=this.regionalOptions[i||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Ethiopian",jdEpoch:17242205e-1,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(o){var a=this._validate(o,this.minMonth,this.minDay,e.local.invalidYear),o=a.year()+(a.year()<0?1:0);return o%4===3||o%4===-1},monthsInYear:function(i){return this._validate(i,this.minMonth,this.minDay,e.local.invalidYear||e.regionalOptions[""].invalidYear),13},weekOfYear:function(i,a,o){var s=this.newDate(i,a,o);return s.add(-s.dayOfWeek(),"d"),Math.floor((s.dayOfYear()-1)/7)+1},daysInMonth:function(i,a){var o=this._validate(i,a,this.minDay,e.local.invalidMonth);return this.daysPerMonth[o.month()-1]+(o.month()===13&&this.leapYear(o.year())?1:0)},weekDay:function(i,a,o){return(this.dayOfWeek(i,a,o)||7)<6},toJD:function(i,a,o){var s=this._validate(i,a,o,e.local.invalidDate);return i=s.year(),i<0&&i++,s.day()+(s.month()-1)*30+(i-1)*365+Math.floor(i/4)+this.jdEpoch-1},fromJD:function(i){var a=Math.floor(i)+.5-this.jdEpoch,o=Math.floor((a-Math.floor((a+366)/1461))/365)+1;o<=0&&o--,a=Math.floor(i)+.5-this.newDate(o,1,1).toJD();var s=Math.floor(a/30)+1,l=a-(s-1)*30+1;return this.newDate(o,s,l)}}),e.calendars.ethiopian=t}}),vce=de({"node_modules/world-calendars/dist/calendars/hebrew.js"(){var e=_c(),r=du();function t(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(a){var o=this._validate(a,this.minMonth,this.minDay,e.local.invalidYear);return this._leapYear(o.year())},_leapYear:function(a){return a=a<0?a+1:a,i(a*7+1,19)<7},monthsInYear:function(a){return this._validate(a,this.minMonth,this.minDay,e.local.invalidYear),this._leapYear(a.year?a.year():a)?13:12},weekOfYear:function(a,o,s){var l=this.newDate(a,o,s);return l.add(-l.dayOfWeek(),"d"),Math.floor((l.dayOfYear()-1)/7)+1},daysInYear:function(a){var o=this._validate(a,this.minMonth,this.minDay,e.local.invalidYear);return a=o.year(),this.toJD(a===-1?1:a+1,7,1)-this.toJD(a,7,1)},daysInMonth:function(a,o){return a.year&&(o=a.month(),a=a.year()),this._validate(a,o,this.minDay,e.local.invalidMonth),o===12&&this.leapYear(a)||o===8&&i(this.daysInYear(a),10)===5?30:o===9&&i(this.daysInYear(a),10)===3?29:this.daysPerMonth[o-1]},weekDay:function(a,o,s){return this.dayOfWeek(a,o,s)!==6},extraInfo:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate);return{yearType:(this.leapYear(l)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(l)%10-3]}},toJD:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate);a=l.year(),o=l.month(),s=l.day();var n=a<=0?a+1:a,u=this.jdEpoch+this._delay1(n)+this._delay2(n)+s+1;if(o<7){for(var c=7;c<=this.monthsInYear(a);c++)u+=this.daysInMonth(a,c);for(var c=1;c<o;c++)u+=this.daysInMonth(a,c)}else for(var c=7;c<o;c++)u+=this.daysInMonth(a,c);return u},_delay1:function(a){var o=Math.floor((235*a-234)/19),s=12084+13753*o,l=o*29+Math.floor(s/25920);return i(3*(l+1),7)<3&&l++,l},_delay2:function(a){var o=this._delay1(a-1),s=this._delay1(a),l=this._delay1(a+1);return l-s===356?2:s-o===382?1:0},fromJD:function(a){a=Math.floor(a)+.5;for(var o=Math.floor((a-this.jdEpoch)*98496/35975351)-1;a>=this.toJD(o===-1?1:o+1,7,1);)o++;for(var s=a<this.toJD(o,1,1)?7:1;a>this.toJD(o,s,this.daysInMonth(o,s));)s++;var l=a-this.toJD(o,s,1)+1;return this.newDate(o,s,l)}});function i(a,o){return a-o*Math.floor(a/o)}e.calendars.hebrew=t}}),mce=de({"node_modules/world-calendars/dist/calendars/islamic.js"(){var e=_c(),r=du();function t(i){this.local=this.regionalOptions[i||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Islamic",jdEpoch:19484395e-1,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-kham\u012Bs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(i){var a=this._validate(i,this.minMonth,this.minDay,e.local.invalidYear);return(a.year()*11+14)%30<11},weekOfYear:function(i,a,o){var s=this.newDate(i,a,o);return s.add(-s.dayOfWeek(),"d"),Math.floor((s.dayOfYear()-1)/7)+1},daysInYear:function(i){return this.leapYear(i)?355:354},daysInMonth:function(i,a){var o=this._validate(i,a,this.minDay,e.local.invalidMonth);return this.daysPerMonth[o.month()-1]+(o.month()===12&&this.leapYear(o.year())?1:0)},weekDay:function(i,a,o){return this.dayOfWeek(i,a,o)!==5},toJD:function(i,a,o){var s=this._validate(i,a,o,e.local.invalidDate);return i=s.year(),a=s.month(),o=s.day(),i=i<=0?i+1:i,o+Math.ceil(29.5*(a-1))+(i-1)*354+Math.floor((3+11*i)/30)+this.jdEpoch-1},fromJD:function(i){i=Math.floor(i)+.5;var a=Math.floor((30*(i-this.jdEpoch)+10646)/10631);a=a<=0?a-1:a;var o=Math.min(12,Math.ceil((i-29-this.toJD(a,1,1))/29.5)+1),s=i-this.toJD(a,o,1)+1;return this.newDate(a,o,s)}}),e.calendars.islamic=t}}),gce=de({"node_modules/world-calendars/dist/calendars/julian.js"(){var e=_c(),r=du();function t(i){this.local=this.regionalOptions[i||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Julian",jdEpoch:17214235e-1,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(o){var a=this._validate(o,this.minMonth,this.minDay,e.local.invalidYear),o=a.year()<0?a.year()+1:a.year();return o%4===0},weekOfYear:function(i,a,o){var s=this.newDate(i,a,o);return s.add(4-(s.dayOfWeek()||7),"d"),Math.floor((s.dayOfYear()-1)/7)+1},daysInMonth:function(i,a){var o=this._validate(i,a,this.minDay,e.local.invalidMonth);return this.daysPerMonth[o.month()-1]+(o.month()===2&&this.leapYear(o.year())?1:0)},weekDay:function(i,a,o){return(this.dayOfWeek(i,a,o)||7)<6},toJD:function(i,a,o){var s=this._validate(i,a,o,e.local.invalidDate);return i=s.year(),a=s.month(),o=s.day(),i<0&&i++,a<=2&&(i--,a+=12),Math.floor(365.25*(i+4716))+Math.floor(30.6001*(a+1))+o-1524.5},fromJD:function(i){var a=Math.floor(i+.5),o=a+1524,s=Math.floor((o-122.1)/365.25),l=Math.floor(365.25*s),n=Math.floor((o-l)/30.6001),u=n-Math.floor(n<14?1:13),c=s-Math.floor(u>2?4716:4715),f=o-l-Math.floor(30.6001*n);return c<=0&&c--,this.newDate(c,u,f)}}),e.calendars.julian=t}}),yce=de({"node_modules/world-calendars/dist/calendars/mayan.js"(){var e=_c(),r=du();function t(o){this.local=this.regionalOptions[o||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(o){return this._validate(o,this.minMonth,this.minDay,e.local.invalidYear),!1},formatYear:function(o){var s=this._validate(o,this.minMonth,this.minDay,e.local.invalidYear);o=s.year();var l=Math.floor(o/400);o=o%400,o+=o<0?400:0;var n=Math.floor(o/20);return l+"."+n+"."+o%20},forYear:function(o){if(o=o.split("."),o.length<3)throw"Invalid Mayan year";for(var s=0,l=0;l<o.length;l++){var n=parseInt(o[l],10);if(Math.abs(n)>19||l>0&&n<0)throw"Invalid Mayan year";s=s*20+n}return s},monthsInYear:function(o){return this._validate(o,this.minMonth,this.minDay,e.local.invalidYear),18},weekOfYear:function(o,s,l){return this._validate(o,s,l,e.local.invalidDate),0},daysInYear:function(o){return this._validate(o,this.minMonth,this.minDay,e.local.invalidYear),360},daysInMonth:function(o,s){return this._validate(o,s,this.minDay,e.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(o,s,l){var n=this._validate(o,s,l,e.local.invalidDate);return n.day()},weekDay:function(o,s,l){return this._validate(o,s,l,e.local.invalidDate),!0},extraInfo:function(o,s,l){var n=this._validate(o,s,l,e.local.invalidDate),u=n.toJD(),c=this._toHaab(u),f=this._toTzolkin(u);return{haabMonthName:this.local.haabMonths[c[0]-1],haabMonth:c[0],haabDay:c[1],tzolkinDayName:this.local.tzolkinMonths[f[0]-1],tzolkinDay:f[0],tzolkinTrecena:f[1]}},_toHaab:function(o){o-=this.jdEpoch;var s=i(o+8+340,365);return[Math.floor(s/20)+1,i(s,20)]},_toTzolkin:function(o){return o-=this.jdEpoch,[a(o+20,20),a(o+4,13)]},toJD:function(o,s,l){var n=this._validate(o,s,l,e.local.invalidDate);return n.day()+n.month()*20+n.year()*360+this.jdEpoch},fromJD:function(o){o=Math.floor(o)+.5-this.jdEpoch;var s=Math.floor(o/360);o=o%360,o+=o<0?360:0;var l=Math.floor(o/20),n=o%20;return this.newDate(s,l,n)}});function i(o,s){return o-s*Math.floor(o/s)}function a(o,s){return i(o-1,s)+1}e.calendars.mayan=t}}),_ce=de({"node_modules/world-calendars/dist/calendars/nanakshahi.js"(){var e=_c(),r=du();function t(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar;var i=e.instance("gregorian");r(t.prototype,{name:"Nanakshahi",jdEpoch:22576735e-1,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(a){var o=this._validate(a,this.minMonth,this.minDay,e.local.invalidYear||e.regionalOptions[""].invalidYear);return i.leapYear(o.year()+(o.year()<1?1:0)+1469)},weekOfYear:function(a,o,s){var l=this.newDate(a,o,s);return l.add(1-(l.dayOfWeek()||7),"d"),Math.floor((l.dayOfYear()-1)/7)+1},daysInMonth:function(a,o){var s=this._validate(a,o,this.minDay,e.local.invalidMonth);return this.daysPerMonth[s.month()-1]+(s.month()===12&&this.leapYear(s.year())?1:0)},weekDay:function(a,o,s){return(this.dayOfWeek(a,o,s)||7)<6},toJD:function(n,o,s){var l=this._validate(n,o,s,e.local.invalidMonth),n=l.year();n<0&&n++;for(var u=l.day(),c=1;c<l.month();c++)u+=this.daysPerMonth[c-1];return u+i.toJD(n+1468,3,13)},fromJD:function(a){a=Math.floor(a+.5);for(var o=Math.floor((a-(this.jdEpoch-1))/366);a>=this.toJD(o+1,1,1);)o++;for(var s=a-Math.floor(this.toJD(o,1,1)+.5)+1,l=1;s>this.daysInMonth(o,l);)s-=this.daysInMonth(o,l),l++;return this.newDate(o,l,s)}}),e.calendars.nanakshahi=t}}),xce=de({"node_modules/world-calendars/dist/calendars/nepali.js"(){var e=_c(),r=du();function t(i){this.local=this.regionalOptions[i||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Nepali",jdEpoch:17007095e-1,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(i){return this.daysInYear(i)!==this.daysPerYear},weekOfYear:function(i,a,o){var s=this.newDate(i,a,o);return s.add(-s.dayOfWeek(),"d"),Math.floor((s.dayOfYear()-1)/7)+1},daysInYear:function(i){var a=this._validate(i,this.minMonth,this.minDay,e.local.invalidYear);if(i=a.year(),typeof this.NEPALI_CALENDAR_DATA[i]>"u")return this.daysPerYear;for(var o=0,s=this.minMonth;s<=12;s++)o+=this.NEPALI_CALENDAR_DATA[i][s];return o},daysInMonth:function(i,a){return i.year&&(a=i.month(),i=i.year()),this._validate(i,a,this.minDay,e.local.invalidMonth),typeof this.NEPALI_CALENDAR_DATA[i]>"u"?this.daysPerMonth[a-1]:this.NEPALI_CALENDAR_DATA[i][a]},weekDay:function(i,a,o){return this.dayOfWeek(i,a,o)!==6},toJD:function(i,a,o){var s=this._validate(i,a,o,e.local.invalidDate);i=s.year(),a=s.month(),o=s.day();var l=e.instance(),n=0,u=a,c=i;this._createMissingCalendarData(i);var f=i-(u>9||u===9&&o>=this.NEPALI_CALENDAR_DATA[c][0]?56:57);for(a!==9&&(n=o,u--);u!==9;)u<=0&&(u=12,c--),n+=this.NEPALI_CALENDAR_DATA[c][u],u--;return a===9?(n+=o-this.NEPALI_CALENDAR_DATA[c][0],n<0&&(n+=l.daysInYear(f))):n+=this.NEPALI_CALENDAR_DATA[c][9]-this.NEPALI_CALENDAR_DATA[c][0],l.newDate(f,1,1).add(n,"d").toJD()},fromJD:function(i){var a=e.instance(),o=a.fromJD(i),s=o.year(),l=o.dayOfYear(),n=s+56;this._createMissingCalendarData(n);for(var u=9,c=this.NEPALI_CALENDAR_DATA[n][0],f=this.NEPALI_CALENDAR_DATA[n][u]-c+1;l>f;)u++,u>12&&(u=1,n++),f+=this.NEPALI_CALENDAR_DATA[n][u];var h=this.NEPALI_CALENDAR_DATA[n][u]-(f-l);return this.newDate(n,u,h)},_createMissingCalendarData:function(i){var a=this.daysPerMonth.slice(0);a.unshift(17);for(var o=i-1;o<i+2;o++)typeof this.NEPALI_CALENDAR_DATA[o]>"u"&&(this.NEPALI_CALENDAR_DATA[o]=a)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),e.calendars.nepali=t}}),bce=de({"node_modules/world-calendars/dist/calendars/persian.js"(){var e=_c(),r=du();function t(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}function i(a){var o=a-475;a<0&&o++;var s=.242197,l=s*o,n=s*(o+1),u=l-Math.floor(l),c=n-Math.floor(n);return u>c}t.prototype=new e.baseCalendar,r(t.prototype,{name:"Persian",jdEpoch:19483205e-1,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Persian",epochs:["BP","AP"],monthNames:["Farvardin","Ordibehesht","Khordad","Tir","Mordad","Shahrivar","Mehr","Aban","Azar","Dey","Bahman","Esfand"],monthNamesShort:["Far","Ord","Kho","Tir","Mor","Sha","Meh","Aba","Aza","Dey","Bah","Esf"],dayNames:["Yekshanbeh","Doshanbeh","Seshanbeh","Chah\u0101rshanbeh","Panjshanbeh","Jom'eh","Shanbeh"],dayNamesShort:["Yek","Do","Se","Cha","Panj","Jom","Sha"],dayNamesMin:["Ye","Do","Se","Ch","Pa","Jo","Sh"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(a){var o=this._validate(a,this.minMonth,this.minDay,e.local.invalidYear);return i(o.year())},weekOfYear:function(a,o,s){var l=this.newDate(a,o,s);return l.add(-((l.dayOfWeek()+1)%7),"d"),Math.floor((l.dayOfYear()-1)/7)+1},daysInMonth:function(a,o){var s=this._validate(a,o,this.minDay,e.local.invalidMonth);return this.daysPerMonth[s.month()-1]+(s.month()===12&&this.leapYear(s.year())?1:0)},weekDay:function(a,o,s){return this.dayOfWeek(a,o,s)!==5},toJD:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate);a=l.year(),o=l.month(),s=l.day();var n=0;if(a>0)for(var u=1;u<a;u++)i(u)&&n++;else if(a<0)for(var u=a;u<0;u++)i(u)&&n--;return s+(o<=7?(o-1)*31:(o-1)*30+6)+(a>0?a-1:a)*365+n+this.jdEpoch-1},fromJD:function(a){a=Math.floor(a)+.5;var o=475+(a-this.toJD(475,1,1))/365.242197,s=Math.floor(o);s<=0&&s--,a>this.toJD(s,12,i(s)?30:29)&&(s++,s===0&&s++);var l=a-this.toJD(s,1,1)+1,n=l<=186?Math.ceil(l/31):Math.ceil((l-6)/30),u=a-this.toJD(s,n,1)+1;return this.newDate(s,n,u)}}),e.calendars.persian=t,e.calendars.jalali=t}}),wce=de({"node_modules/world-calendars/dist/calendars/taiwan.js"(){var e=_c(),r=du(),t=e.instance();function i(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}i.prototype=new e.baseCalendar,r(i.prototype,{name:"Taiwan",jdEpoch:24194025e-1,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(s){var o=this._validate(s,this.minMonth,this.minDay,e.local.invalidYear),s=this._t2gYear(o.year());return t.leapYear(s)},weekOfYear:function(n,o,s){var l=this._validate(n,this.minMonth,this.minDay,e.local.invalidYear),n=this._t2gYear(l.year());return t.weekOfYear(n,l.month(),l.day())},daysInMonth:function(a,o){var s=this._validate(a,o,this.minDay,e.local.invalidMonth);return this.daysPerMonth[s.month()-1]+(s.month()===2&&this.leapYear(s.year())?1:0)},weekDay:function(a,o,s){return(this.dayOfWeek(a,o,s)||7)<6},toJD:function(n,o,s){var l=this._validate(n,o,s,e.local.invalidDate),n=this._t2gYear(l.year());return t.toJD(n,l.month(),l.day())},fromJD:function(a){var o=t.fromJD(a),s=this._g2tYear(o.year());return this.newDate(s,o.month(),o.day())},_t2gYear:function(a){return a+this.yearsOffset+(a>=-this.yearsOffset&&a<=-1?1:0)},_g2tYear:function(a){return a-this.yearsOffset-(a>=1&&a<=this.yearsOffset?1:0)}}),e.calendars.taiwan=i}}),Tce=de({"node_modules/world-calendars/dist/calendars/thai.js"(){var e=_c(),r=du(),t=e.instance();function i(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}i.prototype=new e.baseCalendar,r(i.prototype,{name:"Thai",jdEpoch:15230985e-1,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(s){var o=this._validate(s,this.minMonth,this.minDay,e.local.invalidYear),s=this._t2gYear(o.year());return t.leapYear(s)},weekOfYear:function(n,o,s){var l=this._validate(n,this.minMonth,this.minDay,e.local.invalidYear),n=this._t2gYear(l.year());return t.weekOfYear(n,l.month(),l.day())},daysInMonth:function(a,o){var s=this._validate(a,o,this.minDay,e.local.invalidMonth);return this.daysPerMonth[s.month()-1]+(s.month()===2&&this.leapYear(s.year())?1:0)},weekDay:function(a,o,s){return(this.dayOfWeek(a,o,s)||7)<6},toJD:function(n,o,s){var l=this._validate(n,o,s,e.local.invalidDate),n=this._t2gYear(l.year());return t.toJD(n,l.month(),l.day())},fromJD:function(a){var o=t.fromJD(a),s=this._g2tYear(o.year());return this.newDate(s,o.month(),o.day())},_t2gYear:function(a){return a-this.yearsOffset-(a>=1&&a<=this.yearsOffset?1:0)},_g2tYear:function(a){return a+this.yearsOffset+(a>=-this.yearsOffset&&a<=-1?1:0)}}),e.calendars.thai=i}}),Ace=de({"node_modules/world-calendars/dist/calendars/ummalqura.js"(){var e=_c(),r=du();function t(a){this.local=this.regionalOptions[a||""]||this.regionalOptions[""]}t.prototype=new e.baseCalendar,r(t.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thal\u0101th\u0101\u2019","Yawm al-Arba\u2018\u0101\u2019","Yawm al-Kham\u012Bs","Yawm al-Jum\u2018a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(a){var o=this._validate(a,this.minMonth,this.minDay,e.local.invalidYear);return this.daysInYear(o.year())===355},weekOfYear:function(a,o,s){var l=this.newDate(a,o,s);return l.add(-l.dayOfWeek(),"d"),Math.floor((l.dayOfYear()-1)/7)+1},daysInYear:function(a){for(var o=0,s=1;s<=12;s++)o+=this.daysInMonth(a,s);return o},daysInMonth:function(a,o){for(var s=this._validate(a,o,this.minDay,e.local.invalidMonth),l=s.toJD()-24e5+.5,n=0,u=0;u<i.length;u++){if(i[u]>l)return i[n]-i[n-1];n++}return 30},weekDay:function(a,o,s){return this.dayOfWeek(a,o,s)!==5},toJD:function(a,o,s){var l=this._validate(a,o,s,e.local.invalidDate),n=12*(l.year()-1)+l.month()-15292,u=l.day()+i[n-1]-1;return u+24e5-.5},fromJD:function(a){for(var o=a-24e5+.5,s=0,l=0;l<i.length&&!(i[l]>o);l++)s++;var n=s+15292,u=Math.floor((n-1)/12),c=u+1,f=n-12*u,h=o-i[s-1]+1;return this.newDate(c,f,h)},isValid:function(a,o,s){var l=e.baseCalendar.prototype.isValid.apply(this,arguments);return l&&(a=a.year!=null?a.year:a,l=a>=1276&&a<=1500),l},_validate:function(a,o,s,l){var n=e.baseCalendar.prototype._validate.apply(this,arguments);if(n.year<1276||n.year>1500)throw l.replace(/\{0\}/,this.local.name);return n}}),e.calendars.ummalqura=t;var i=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]}}),Mce=de({"src/components/calendars/calendars.js"(e,r){"use strict";r.exports=_c(),cce(),fce(),hce(),dce(),pce(),vce(),mce(),gce(),yce(),_ce(),xce(),bce(),wce(),Tce(),Ace()}}),Sce=de({"src/components/calendars/index.js"(e,r){"use strict";var t=Mce(),i=Qt(),a=cn(),o=a.EPOCHJD,s=a.ONEDAY,l={valType:"enumerated",values:i.sortObjectKeys(t.calendars),editType:"calc",dflt:"gregorian"},n=function(w,k,A,b){var E={};return E[A]=l,i.coerce(w,k,E,A,b)},u=function(w,k,A,b){for(var E=0;E<A.length;E++)n(w,k,A[E]+"calendar",b.calendar)},c={chinese:"2000-01-01",coptic:"2000-01-01",discworld:"2000-01-01",ethiopian:"2000-01-01",hebrew:"5000-01-01",islamic:"1000-01-01",julian:"2000-01-01",mayan:"5000-01-01",nanakshahi:"1000-01-01",nepali:"2000-01-01",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-01",thai:"2000-01-01",ummalqura:"1400-01-01"},f={chinese:"2000-01-02",coptic:"2000-01-03",discworld:"2000-01-03",ethiopian:"2000-01-05",hebrew:"5000-01-01",islamic:"1000-01-02",julian:"2000-01-03",mayan:"5000-01-01",nanakshahi:"1000-01-05",nepali:"2000-01-05",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-04",thai:"2000-01-04",ummalqura:"1400-01-06"},h={chinese:["2000-01-01","2001-01-01"],coptic:["1700-01-01","1701-01-01"],discworld:["1800-01-01","1801-01-01"],ethiopian:["2000-01-01","2001-01-01"],hebrew:["5700-01-01","5701-01-01"],islamic:["1400-01-01","1401-01-01"],julian:["2000-01-01","2001-01-01"],mayan:["5200-01-01","5201-01-01"],nanakshahi:["0500-01-01","0501-01-01"],nepali:["2000-01-01","2001-01-01"],persian:["1400-01-01","1401-01-01"],jalali:["1400-01-01","1401-01-01"],taiwan:["0100-01-01","0101-01-01"],thai:["2500-01-01","2501-01-01"],ummalqura:["1400-01-01","1401-01-01"]},d="##",p={d:{0:"dd","-":"d"},e:{0:"d","-":"d"},a:{0:"D","-":"D"},A:{0:"DD","-":"DD"},j:{0:"oo","-":"o"},W:{0:"ww","-":"w"},m:{0:"mm","-":"m"},b:{0:"M","-":"M"},B:{0:"MM","-":"MM"},y:{0:"yy","-":"yy"},Y:{0:"yyyy","-":"yyyy"},U:d,w:d,c:{0:"D M d %X yyyy","-":"D M d %X yyyy"},x:{0:"mm/dd/yyyy","-":"mm/dd/yyyy"}};function g(w,k,A){for(var b=Math.floor((k+.05)/s)+o,E=y(A).fromJD(b),T=0,F,D,R,P,z;(T=w.indexOf("%",T))!==-1;)F=w.charAt(T+1),F==="0"||F==="-"||F==="_"?(R=3,D=w.charAt(T+2),F==="_"&&(F="-")):(D=F,F="0",R=2),P=p[D],P?(P===d?z=d:z=E.formatDate(P[F]),w=w.slice(0,T)+z+w.slice(T+R),T+=z.length):T+=R;return w}var m={};function y(w){var k=m[w];return k||(k=m[w]=t.instance(w),k)}function _(w){return i.extendFlat({},l,{description:w})}function v(w){return"Sets the calendar system to use with `"+w+"` date data."}var x={xcalendar:_(v("x"))},S=i.extendFlat({},x,{ycalendar:_(v("y"))}),M=i.extendFlat({},S,{zcalendar:_(v("z"))}),C=_(["Sets the calendar system to use for `range` and `tick0`","if this is a date axis. This does not set the calendar for","interpreting data on this axis, that's specified in the trace","or via the global `layout.calendar`"].join(" "));r.exports={moduleType:"component",name:"calendars",schema:{traces:{scatter:S,bar:S,box:S,heatmap:S,contour:S,histogram:S,histogram2d:S,histogram2dcontour:S,scatter3d:M,surface:M,mesh3d:M,scattergl:S,ohlc:x,candlestick:x},layout:{calendar:_(["Sets the default calendar system to use for interpreting and","displaying dates throughout the plot."].join(" "))},subplots:{xaxis:{calendar:C},yaxis:{calendar:C},scene:{xaxis:{calendar:C},yaxis:{calendar:C},zaxis:{calendar:C}},polar:{radialaxis:{calendar:C}}}},layoutAttributes:l,handleDefaults:n,handleTraceDefaults:u,CANONICAL_SUNDAY:f,CANONICAL_TICK:c,DFLTRANGE:h,getCal:y,worldCalFmt:g}}}),Ece=de({"lib/calendars.js"(e,r){"use strict";r.exports=Sce()}}),kce=de({"lib/index.js"(e,r){var t=tG();t.register([nG(),lG(),hG(),gG(),bG(),MG(),kG(),NG(),YG(),nH(),vH(),B$(),V$(),CW(),OW(),$W(),QW(),pY(),yY(),xY(),AY(),CY(),IY(),OY(),rX(),nX(),GZ(),nK(),dK(),_K(),Wse(),Kse(),nle(),wle(),kle(),Rle(),aue(),hue(),gue(),wue(),Sue(),Lue(),Nue(),Hue(),ece(),uce(),Ece()]),r.exports=t}});return kce()})();return window.Plotly=We,We})});var Sa=hp(lv()),yp=hp(Q2());var Tj;(function(We){function oe(Ie){let Oe=document.body,Qe=dt=>{dt.preventDefault(),dt.stopPropagation(),dt.clipboardData.setData("text",Ie),Oe.removeEventListener("copy",Qe,!0)};Oe.addEventListener("copy",Qe,!0),document.execCommand("copy")}We.copyText=oe})(Tj||(Tj={}));var Os;(function(We){function oe(dt){let Jt=window.getComputedStyle(dt),jt=parseFloat(Jt.borderTopWidth)||0,Xt=parseFloat(Jt.borderLeftWidth)||0,nr=parseFloat(Jt.borderRightWidth)||0,Ht=parseFloat(Jt.borderBottomWidth)||0,er=parseFloat(Jt.paddingTop)||0,ur=parseFloat(Jt.paddingLeft)||0,ir=parseFloat(Jt.paddingRight)||0,Ot=parseFloat(Jt.paddingBottom)||0,ar=Xt+ur+ir+nr,Lr=jt+er+Ot+Ht;return{borderTop:jt,borderLeft:Xt,borderRight:nr,borderBottom:Ht,paddingTop:er,paddingLeft:ur,paddingRight:ir,paddingBottom:Ot,horizontalSum:ar,verticalSum:Lr}}We.boxSizing=oe;function Ie(dt){let Jt=window.getComputedStyle(dt),jt=parseFloat(Jt.minWidth)||0,Xt=parseFloat(Jt.minHeight)||0,nr=parseFloat(Jt.maxWidth)||1/0,Ht=parseFloat(Jt.maxHeight)||1/0;return nr=Math.max(jt,nr),Ht=Math.max(Xt,Ht),{minWidth:jt,minHeight:Xt,maxWidth:nr,maxHeight:Ht}}We.sizeLimits=Ie;function Oe(dt,Jt,jt){let Xt=dt.getBoundingClientRect();return Jt>=Xt.left&&Jt<Xt.right&&jt>=Xt.top&&jt<Xt.bottom}We.hitTest=Oe;function Qe(dt,Jt){let jt=dt.getBoundingClientRect(),Xt=Jt.getBoundingClientRect();if(!(Xt.top<=jt.top&&Xt.bottom>=jt.bottom)){if(Xt.top<jt.top&&Xt.height<=jt.height){dt.scrollTop-=jt.top-Xt.top;return}if(Xt.bottom>jt.bottom&&Xt.height>=jt.height){dt.scrollTop-=jt.top-Xt.top;return}if(Xt.top<jt.top&&Xt.height>jt.height){dt.scrollTop-=jt.bottom-Xt.bottom;return}if(Xt.bottom>jt.bottom&&Xt.height<jt.height){dt.scrollTop-=jt.bottom-Xt.bottom;return}}}We.scrollIntoViewIfNeeded=Qe})(Os||(Os={}));var Nc;(function(We){We.IS_MAC=!!navigator.platform.match(/Mac/i),We.IS_WIN=!!navigator.platform.match(/Win/i),We.IS_IE=/Trident/.test(navigator.userAgent),We.IS_EDGE=/Edge/.test(navigator.userAgent);function oe(Ie){return We.IS_MAC?Ie.metaKey:Ie.ctrlKey}We.accelKey=oe})(Nc||(Nc={}));var dd;(function(We){function oe(Qe){if(Qe in hd.specificityCache)return hd.specificityCache[Qe];let dt=hd.calculateSingle(Qe);return hd.specificityCache[Qe]=dt}We.calculateSpecificity=oe;function Ie(Qe){if(Qe in hd.validityCache)return hd.validityCache[Qe];let dt=!0;try{hd.testElem.querySelector(Qe)}catch{dt=!1}return hd.validityCache[Qe]=dt}We.isValid=Ie;function Oe(Qe,dt){return hd.protoMatchFunc.call(Qe,dt)}We.matches=Oe})(dd||(dd={}));var hd;(function(We){We.specificityCache=Object.create(null),We.validityCache=Object.create(null),We.testElem=document.createElement("div"),We.protoMatchFunc=(()=>{let Ht=Element.prototype;return Ht.matches||Ht.matchesSelector||Ht.mozMatchesSelector||Ht.msMatchesSelector||Ht.oMatchesSelector||Ht.webkitMatchesSelector||function(er){let ur=this,ir=ur.ownerDocument?ur.ownerDocument.querySelectorAll(er):[];return Array.prototype.indexOf.call(ir,ur)!==-1}})();function oe(Ht){Ht=Ht.split(",",1)[0];let er=0,ur=0,ir=0;function Ot(ar){let Lr=Ht.match(ar);return Lr===null?!1:(Ht=Ht.slice(Lr[0].length),!0)}for(Ht=Ht.replace(nr," $1 ");Ht.length>0;){if(Ot(Ie)){er++;continue}if(Ot(Oe)){ur++;continue}if(Ot(Qe)){ur++;continue}if(Ot(Jt)){ir++;continue}if(Ot(jt)){ur++;continue}if(Ot(dt)){ir++;continue}if(!Ot(Xt))return 0}return er=Math.min(er,255),ur=Math.min(ur,255),ir=Math.min(ir,255),er<<16|ur<<8|ir}We.calculateSingle=oe;let Ie=/^#[^\s\+>~#\.\[:]+/,Oe=/^\.[^\s\+>~#\.\[:]+/,Qe=/^\[[^\]]+\]/,dt=/^[^\s\+>~#\.\[:]+/,Jt=/^(::[^\s\+>~#\.\[:]+|:first-line|:first-letter|:before|:after)/,jt=/^:[^\s\+>~#\.\[:]+/,Xt=/^[\s\+>~\*]+/,nr=/:not\(([^\)]+)\)/g})(hd||(hd={}));var pp=hp(lv());var Km=class{constructor(){this._first=null,this._last=null,this._size=0}get isEmpty(){return this._size===0}get size(){return this._size}get length(){return this._size}get first(){return this._first?this._first.value:void 0}get last(){return this._last?this._last.value:void 0}get firstNode(){return this._first}get lastNode(){return this._last}*[Symbol.iterator](){let oe=this._first;for(;oe;)yield oe.value,oe=oe.next}*retro(){let oe=this._last;for(;oe;)yield oe.value,oe=oe.prev}*nodes(){let oe=this._first;for(;oe;)yield oe,oe=oe.next}*retroNodes(){let oe=this._last;for(;oe;)yield oe,oe=oe.prev}assign(oe){this.clear();for(let Ie of oe)this.addLast(Ie)}push(oe){this.addLast(oe)}pop(){return this.removeLast()}shift(oe){this.addFirst(oe)}unshift(){return this.removeFirst()}addFirst(oe){let Ie=new dp.LinkedListNode(this,oe);return this._first?(Ie.next=this._first,this._first.prev=Ie,this._first=Ie):(this._first=Ie,this._last=Ie),this._size++,Ie}addLast(oe){let Ie=new dp.LinkedListNode(this,oe);return this._last?(Ie.prev=this._last,this._last.next=Ie,this._last=Ie):(this._first=Ie,this._last=Ie),this._size++,Ie}insertBefore(oe,Ie){if(!Ie||Ie===this._first)return this.addFirst(oe);if(!(Ie instanceof dp.LinkedListNode)||Ie.list!==this)throw new Error("Reference node is not owned by the list.");let Oe=new dp.LinkedListNode(this,oe),Qe=Ie,dt=Qe.prev;return Oe.next=Qe,Oe.prev=dt,Qe.prev=Oe,dt.next=Oe,this._size++,Oe}insertAfter(oe,Ie){if(!Ie||Ie===this._last)return this.addLast(oe);if(!(Ie instanceof dp.LinkedListNode)||Ie.list!==this)throw new Error("Reference node is not owned by the list.");let Oe=new dp.LinkedListNode(this,oe),Qe=Ie,dt=Qe.next;return Oe.next=dt,Oe.prev=Qe,Qe.next=Oe,dt.prev=Oe,this._size++,Oe}removeFirst(){let oe=this._first;if(oe)return oe===this._last?(this._first=null,this._last=null):(this._first=oe.next,this._first.prev=null),oe.list=null,oe.next=null,oe.prev=null,this._size--,oe.value}removeLast(){let oe=this._last;if(oe)return oe===this._first?(this._first=null,this._last=null):(this._last=oe.prev,this._last.next=null),oe.list=null,oe.next=null,oe.prev=null,this._size--,oe.value}removeNode(oe){if(!(oe instanceof dp.LinkedListNode)||oe.list!==this)throw new Error("Node is not owned by the list.");let Ie=oe;Ie===this._first&&Ie===this._last?(this._first=null,this._last=null):Ie===this._first?(this._first=Ie.next,this._first.prev=null):Ie===this._last?(this._last=Ie.prev,this._last.next=null):(Ie.next.prev=Ie.prev,Ie.prev.next=Ie.next),Ie.list=null,Ie.next=null,Ie.prev=null,this._size--}clear(){let oe=this._first;for(;oe;){let Ie=oe.next;oe.list=null,oe.prev=null,oe.next=null,oe=Ie}this._first=null,this._last=null,this._size=0}};(function(We){function oe(Ie){let Oe=new We;return Oe.assign(Ie),Oe}We.from=oe})(Km||(Km={}));var dp;(function(We){class oe{constructor(Oe,Qe){this.list=null,this.next=null,this.prev=null,this.list=Oe,this.value=Qe}}We.LinkedListNode=oe})(dp||(dp={}));var rf=class{constructor(oe){this.type=oe}get isConflatable(){return!1}conflate(oe){return!1}},o0=class extends rf{get isConflatable(){return!0}conflate(oe){return!0}},za;(function(We){let oe=null,Ie=(Ki=>Ia=>{let _i=!1;return Ki.then(()=>!_i&&Ia()),()=>{_i=!0}})(Promise.resolve());function Oe(Ki,Ia){let _i=ur.get(Ki);if(!_i||_i.length===0){Ir(Ki,Ia);return}(0,pp.every)((0,pp.retro)(_i),Yr=>Yr?Lr(Yr,Ki,Ia):!0)&&Ir(Ki,Ia)}We.sendMessage=Oe;function Qe(Ki,Ia){if(!Ia.isConflatable){de(Ki,Ia);return}(0,pp.some)(er,ia=>ia.handler!==Ki||!ia.msg||ia.msg.type!==Ia.type||!ia.msg.isConflatable?!1:ia.msg.conflate(Ia))||de(Ki,Ia)}We.postMessage=Qe;function dt(Ki,Ia){let _i=ur.get(Ki);_i&&_i.indexOf(Ia)!==-1||(_i?_i.push(Ia):ur.set(Ki,[Ia]))}We.installMessageHook=dt;function Jt(Ki,Ia){let _i=ur.get(Ki);if(!_i)return;let ia=_i.indexOf(Ia);ia!==-1&&(_i[ia]=null,qr(_i))}We.removeMessageHook=Jt;function jt(Ki){let Ia=ur.get(Ki);Ia&&Ia.length>0&&(pp.ArrayExt.fill(Ia,null),qr(Ia));for(let _i of er)_i.handler===Ki&&(_i.handler=null,_i.msg=null)}We.clearData=jt;function Xt(){ar||oe===null||(oe(),oe=null,ar=!0,Mr(),ar=!1)}We.flush=Xt;function nr(){return Ot}We.getExceptionHandler=nr;function Ht(Ki){let Ia=Ot;return Ot=Ki,Ia}We.setExceptionHandler=Ht;let er=new Km,ur=new WeakMap,ir=new Set,Ot=Ki=>{console.error(Ki)},ar=!1;function Lr(Ki,Ia,_i){let ia=!0;try{typeof Ki=="function"?ia=Ki(Ia,_i):ia=Ki.messageHook(Ia,_i)}catch(Yr){Ot(Yr)}return ia}function Ir(Ki,Ia){try{Ki.processMessage(Ia)}catch(_i){Ot(_i)}}function de(Ki,Ia){er.addLast({handler:Ki,msg:Ia}),oe===null&&(oe=Ie(Mr))}function Mr(){if(oe=null,er.isEmpty)return;let Ki={handler:null,msg:null};for(er.addLast(Ki);;){let Ia=er.removeFirst();if(Ia===Ki)return;Ia.handler&&Ia.msg&&Oe(Ia.handler,Ia.msg)}}function qr(Ki){ir.size===0&&Ie(Vr),ir.add(Ki)}function Vr(){ir.forEach(ti),ir.clear()}function ti(Ki){pp.ArrayExt.removeAllWhere(Ki,Xr)}function Xr(Ki){return Ki===null}})(za||(za={}));var af=class{constructor(oe){this._pid=uv.nextPID(),this.name=oe.name,this._create=oe.create,this._coerce=oe.coerce||null,this._compare=oe.compare||null,this._changed=oe.changed||null}get(oe){let Ie,Oe=uv.ensureMap(oe);return this._pid in Oe?Ie=Oe[this._pid]:Ie=Oe[this._pid]=this._createValue(oe),Ie}set(oe,Ie){let Oe,Qe=uv.ensureMap(oe);this._pid in Qe?Oe=Qe[this._pid]:Oe=Qe[this._pid]=this._createValue(oe);let dt=this._coerceValue(oe,Ie);this._maybeNotify(oe,Oe,Qe[this._pid]=dt)}coerce(oe){let Ie,Oe=uv.ensureMap(oe);this._pid in Oe?Ie=Oe[this._pid]:Ie=Oe[this._pid]=this._createValue(oe);let Qe=this._coerceValue(oe,Ie);this._maybeNotify(oe,Ie,Oe[this._pid]=Qe)}_createValue(oe){let Ie=this._create;return Ie(oe)}_coerceValue(oe,Ie){let Oe=this._coerce;return Oe?Oe(oe,Ie):Ie}_compareValue(oe,Ie){let Oe=this._compare;return Oe?Oe(oe,Ie):oe===Ie}_maybeNotify(oe,Ie,Oe){let Qe=this._changed;Qe&&!this._compareValue(Ie,Oe)&&Qe(oe,Ie,Oe)}};(function(We){function oe(Ie){uv.ownerData.delete(Ie)}We.clearData=oe})(af||(af={}));var uv;(function(We){We.ownerData=new WeakMap,We.nextPID=(()=>{let Ie=0;return()=>`pid-${`${Math.random()}`.slice(2)}-${Ie++}`})();function oe(Ie){let Oe=We.ownerData.get(Ie);return Oe||(Oe=Object.create(null),We.ownerData.set(Ie,Oe),Oe)}We.ensureMap=oe})(uv||(uv={}));var ew=hp(lv()),zce=hp(Q2()),Ls=class{constructor(oe){this.sender=oe}connect(oe,Ie){return rh.connect(this,oe,Ie)}disconnect(oe,Ie){return rh.disconnect(this,oe,Ie)}emit(oe){rh.emit(this,oe)}};(function(We){function oe(Xt,nr){rh.disconnectBetween(Xt,nr)}We.disconnectBetween=oe;function Ie(Xt){rh.disconnectSender(Xt)}We.disconnectSender=Ie;function Oe(Xt){rh.disconnectReceiver(Xt)}We.disconnectReceiver=Oe;function Qe(Xt){rh.disconnectAll(Xt)}We.disconnectAll=Qe;function dt(Xt){rh.disconnectAll(Xt)}We.clearData=dt;function Jt(){return rh.exceptionHandler}We.getExceptionHandler=Jt;function jt(Xt){let nr=rh.exceptionHandler;return rh.exceptionHandler=Xt,nr}We.setExceptionHandler=jt})(Ls||(Ls={}));var rh;(function(We){We.exceptionHandler=de=>{console.error(de)};function oe(de,Mr,qr){qr=qr||void 0;let Vr=Xt.get(de.sender);if(Vr||(Vr=[],Xt.set(de.sender,Vr)),ur(Vr,de,Mr,qr))return!1;let ti=qr||Mr,Xr=nr.get(ti);Xr||(Xr=[],nr.set(ti,Xr));let Ki={signal:de,slot:Mr,thisArg:qr};return Vr.push(Ki),Xr.push(Ki),!0}We.connect=oe;function Ie(de,Mr,qr){qr=qr||void 0;let Vr=Xt.get(de.sender);if(!Vr||Vr.length===0)return!1;let ti=ur(Vr,de,Mr,qr);if(!ti)return!1;let Xr=qr||Mr,Ki=nr.get(Xr);return ti.signal=null,Ot(Vr),Ot(Ki),!0}We.disconnect=Ie;function Oe(de,Mr){let qr=Xt.get(de);if(!qr||qr.length===0)return;let Vr=nr.get(Mr);if(!(!Vr||Vr.length===0)){for(let ti of Vr)ti.signal&&ti.signal.sender===de&&(ti.signal=null);Ot(qr),Ot(Vr)}}We.disconnectBetween=Oe;function Qe(de){let Mr=Xt.get(de);if(!(!Mr||Mr.length===0)){for(let qr of Mr){if(!qr.signal)continue;let Vr=qr.thisArg||qr.slot;qr.signal=null,Ot(nr.get(Vr))}Ot(Mr)}}We.disconnectSender=Qe;function dt(de){let Mr=nr.get(de);if(!(!Mr||Mr.length===0)){for(let qr of Mr){if(!qr.signal)continue;let Vr=qr.signal.sender;qr.signal=null,Ot(Xt.get(Vr))}Ot(Mr)}}We.disconnectReceiver=dt;function Jt(de){Qe(de),dt(de)}We.disconnectAll=Jt;function jt(de,Mr){let qr=Xt.get(de.sender);if(!(!qr||qr.length===0))for(let Vr=0,ti=qr.length;Vr<ti;++Vr){let Xr=qr[Vr];Xr.signal===de&&ir(Xr,Mr)}}We.emit=jt;let Xt=new WeakMap,nr=new WeakMap,Ht=new Set,er=typeof requestAnimationFrame=="function"?requestAnimationFrame:setImmediate;function ur(de,Mr,qr,Vr){return(0,ew.find)(de,ti=>ti.signal===Mr&&ti.slot===qr&&ti.thisArg===Vr)}function ir(de,Mr){let{signal:qr,slot:Vr,thisArg:ti}=de;try{Vr.call(ti,qr.sender,Mr)}catch(Xr){We.exceptionHandler(Xr)}}function Ot(de){Ht.size===0&&er(ar),Ht.add(de)}function ar(){Ht.forEach(Lr),Ht.clear()}function Lr(de){ew.ArrayExt.removeAllWhere(de,Ir)}function Ir(de){return de.signal===null}})(rh||(rh={}));var s0=class{constructor(oe){this._fn=oe}get isDisposed(){return!this._fn}dispose(){if(!this._fn)return;let oe=this._fn;this._fn=null,oe()}};var uy=class{constructor(){this._isDisposed=!1,this._items=new Set}get isDisposed(){return this._isDisposed}dispose(){this._isDisposed||(this._isDisposed=!0,this._items.forEach(oe=>{oe.dispose()}),this._items.clear())}contains(oe){return this._items.has(oe)}add(oe){this._items.add(oe)}remove(oe){this._items.delete(oe)}clear(){this._items.clear()}};(function(We){function oe(Ie){let Oe=new We;for(let Qe of Ie)Oe.add(Qe);return Oe}We.from=oe})(uy||(uy={}));var tw=class extends uy{constructor(){super(...arguments),this._disposed=new Ls(this)}get disposed(){return this._disposed}dispose(){this.isDisposed||(super.dispose(),this._disposed.emit(void 0),Ls.clearData(this))}};(function(We){function oe(Ie){let Oe=new We;for(let Qe of Ie)Oe.add(Qe);return Oe}We.from=oe})(tw||(tw={}));var nf=class We{constructor(oe){this._onScrollFrame=()=>{if(!this._scrollTarget)return;let{element:Ie,edge:Oe,distance:Qe}=this._scrollTarget,dt=jc.SCROLL_EDGE_SIZE-Qe,Jt=Math.pow(dt/jc.SCROLL_EDGE_SIZE,2),jt=Math.max(1,Math.round(Jt*jc.SCROLL_EDGE_SIZE));switch(Oe){case"top":Ie.scrollTop-=jt;break;case"left":Ie.scrollLeft-=jt;break;case"right":Ie.scrollLeft+=jt;break;case"bottom":Ie.scrollTop+=jt;break}requestAnimationFrame(this._onScrollFrame)},this._disposed=!1,this._dropAction="none",this._override=null,this._currentTarget=null,this._currentElement=null,this._promise=null,this._scrollTarget=null,this._resolve=null,this.document=oe.document||document,this.mimeData=oe.mimeData,this.dragImage=oe.dragImage||null,this.proposedAction=oe.proposedAction||"copy",this.supportedActions=oe.supportedActions||"all",this.source=oe.source||null}dispose(){if(!this._disposed){if(this._disposed=!0,this._currentTarget){let oe=new PointerEvent("pointerup",{bubbles:!0,cancelable:!0,clientX:-1,clientY:-1});jc.dispatchDragLeave(this,this._currentTarget,null,oe)}this._finalize("none")}}get isDisposed(){return this._disposed}start(oe,Ie){if(this._disposed)return Promise.resolve("none");if(this._promise)return this._promise;this._addListeners(),this._attachDragImage(oe,Ie),this._promise=new Promise(Qe=>{this._resolve=Qe});let Oe=new PointerEvent("pointermove",{bubbles:!0,cancelable:!0,clientX:oe,clientY:Ie});return document.dispatchEvent(Oe),this._promise}handleEvent(oe){switch(oe.type){case"pointermove":this._evtPointerMove(oe);break;case"pointerup":this._evtPointerUp(oe);break;case"keydown":this._evtKeyDown(oe);break;default:oe.preventDefault(),oe.stopPropagation();break}}moveDragImage(oe,Ie){if(!this.dragImage)return;let Oe=this.dragImage.style;Oe.transform=`translate(${oe}px, ${Ie}px)`}_evtPointerMove(oe){oe.preventDefault(),oe.stopPropagation(),this._updateCurrentTarget(oe),this._updateDragScroll(oe),this.moveDragImage(oe.clientX,oe.clientY)}_evtPointerUp(oe){if(oe.preventDefault(),oe.stopPropagation(),oe.button!==0)return;if(this._updateCurrentTarget(oe),!this._currentTarget){this._finalize("none");return}if(this._dropAction==="none"){jc.dispatchDragLeave(this,this._currentTarget,null,oe),this._finalize("none");return}let Ie=jc.dispatchDrop(this,this._currentTarget,oe);this._finalize(Ie)}_evtKeyDown(oe){oe.preventDefault(),oe.stopPropagation(),oe.keyCode===27&&this.dispose()}_addListeners(){document.addEventListener("pointerdown",this,!0),document.addEventListener("pointermove",this,!0),document.addEventListener("pointerup",this,!0),document.addEventListener("pointerenter",this,!0),document.addEventListener("pointerleave",this,!0),document.addEventListener("pointerover",this,!0),document.addEventListener("pointerout",this,!0),document.addEventListener("keydown",this,!0),document.addEventListener("keyup",this,!0),document.addEventListener("keypress",this,!0),document.addEventListener("contextmenu",this,!0)}_removeListeners(){document.removeEventListener("pointerdown",this,!0),document.removeEventListener("pointermove",this,!0),document.removeEventListener("pointerup",this,!0),document.removeEventListener("pointerenter",this,!0),document.removeEventListener("pointerleave",this,!0),document.removeEventListener("pointerover",this,!0),document.removeEventListener("pointerout",this,!0),document.removeEventListener("keydown",this,!0),document.removeEventListener("keyup",this,!0),document.removeEventListener("keypress",this,!0),document.removeEventListener("contextmenu",this,!0)}_updateDragScroll(oe){let Ie=jc.findScrollTarget(oe);!this._scrollTarget&&!Ie||(this._scrollTarget||setTimeout(this._onScrollFrame,500),this._scrollTarget=Ie)}_updateCurrentTarget(oe){let Ie=this._currentTarget,Oe=this._currentTarget,Qe=this._currentElement,dt=jc.findElementBehindBackdrop(oe,this.document);this._currentElement=dt,dt!==Qe&&dt!==Oe&&jc.dispatchDragExit(this,Oe,dt,oe),dt!==Qe&&dt!==Oe&&(Oe=jc.dispatchDragEnter(this,dt,Oe,oe)),Oe!==Ie&&(this._currentTarget=Oe,jc.dispatchDragLeave(this,Ie,Oe,oe));let Jt=jc.dispatchDragOver(this,Oe,oe);this._setDropAction(Jt)}_attachDragImage(oe,Ie){if(!this.dragImage)return;this.dragImage.classList.add("lm-mod-drag-image");let Oe=this.dragImage.style;Oe.pointerEvents="none",Oe.position="fixed",Oe.transform=`translate(${oe}px, ${Ie}px)`,(this.document instanceof Document?this.document.body:this.document.firstElementChild).appendChild(this.dragImage)}_detachDragImage(){if(!this.dragImage)return;let oe=this.dragImage.parentNode;oe&&oe.removeChild(this.dragImage)}_setDropAction(oe){if(oe=jc.validateAction(oe,this.supportedActions),!(this._override&&this._dropAction===oe))switch(oe){case"none":this._dropAction=oe,this._override=We.overrideCursor("no-drop",this.document);break;case"copy":this._dropAction=oe,this._override=We.overrideCursor("copy",this.document);break;case"link":this._dropAction=oe,this._override=We.overrideCursor("alias",this.document);break;case"move":this._dropAction=oe,this._override=We.overrideCursor("move",this.document);break}}_finalize(oe){let Ie=this._resolve;this._removeListeners(),this._detachDragImage(),this._override&&(this._override.dispose(),this._override=null),this.mimeData.clear(),this._disposed=!0,this._dropAction="none",this._currentTarget=null,this._currentElement=null,this._scrollTarget=null,this._promise=null,this._resolve=null,Ie&&Ie(oe)}};(function(We){class oe extends DragEvent{constructor(Qe,dt){super(dt.type,{bubbles:!0,cancelable:!0,altKey:Qe.altKey,button:Qe.button,clientX:Qe.clientX,clientY:Qe.clientY,ctrlKey:Qe.ctrlKey,detail:0,metaKey:Qe.metaKey,relatedTarget:dt.related,screenX:Qe.screenX,screenY:Qe.screenY,shiftKey:Qe.shiftKey,view:window});let{drag:Jt}=dt;this.dropAction="none",this.mimeData=Jt.mimeData,this.proposedAction=Jt.proposedAction,this.supportedActions=Jt.supportedActions,this.source=Jt.source}}We.Event=oe;function Ie(Oe,Qe=document){return jc.overrideCursor(Oe,Qe)}We.overrideCursor=Ie})(nf||(nf={}));var jc;(function(We){We.SCROLL_EDGE_SIZE=20;function oe(qr,Vr){return er[qr]&ur[Vr]?qr:"none"}We.validateAction=oe;function Ie(qr,Vr=document){if(qr){if(Oe&&qr==Oe.event)return Oe.element;We.cursorBackdrop.style.zIndex="-1000";let ti=Vr.elementFromPoint(qr.clientX,qr.clientY);return We.cursorBackdrop.style.zIndex="",Oe={event:qr,element:ti},ti}else{let ti=We.cursorBackdrop.style.transform;if(Qe&&ti===Qe.transform)return Qe.element;let Xr=We.cursorBackdrop.getBoundingClientRect();We.cursorBackdrop.style.zIndex="-1000";let Ki=Vr.elementFromPoint(Xr.left+Xr.width/2,Xr.top+Xr.height/2);return We.cursorBackdrop.style.zIndex="",Qe={transform:ti,element:Ki},Ki}}We.findElementBehindBackdrop=Ie;let Oe=null,Qe=null;function dt(qr){let Vr=qr.clientX,ti=qr.clientY,Xr=Ie(qr);for(;Xr;Xr=Xr.parentElement){if(!Xr.hasAttribute("data-lm-dragscroll"))continue;let Ki=0,Ia=0;Xr===document.body&&(Ki=window.pageXOffset,Ia=window.pageYOffset);let _i=Xr.getBoundingClientRect(),ia=_i.top+Ia,Yr=_i.left+Ki,Ba=Yr+_i.width,eo=ia+_i.height;if(Vr<Yr||Vr>=Ba||ti<ia||ti>=eo)continue;let rs=Vr-Yr+1,Oo=ti-ia+1,da=Ba-Vr,cn=eo-ti,Ss=Math.min(rs,Oo,da,cn);if(Ss>We.SCROLL_EDGE_SIZE)continue;let is;switch(Ss){case cn:is="bottom";break;case Oo:is="top";break;case da:is="right";break;case rs:is="left";break;default:throw"unreachable"}let Do=Xr.scrollWidth-Xr.clientWidth,sl=Xr.scrollHeight-Xr.clientHeight,cu;switch(is){case"top":cu=sl>0&&Xr.scrollTop>0;break;case"left":cu=Do>0&&Xr.scrollLeft>0;break;case"right":cu=Do>0&&Xr.scrollLeft<Do;break;case"bottom":cu=sl>0&&Xr.scrollTop<sl;break;default:throw"unreachable"}if(cu)return{element:Xr,edge:is,distance:Ss}}return null}We.findScrollTarget=dt;function Jt(qr,Vr,ti,Xr){if(!Vr)return null;let Ki=new nf.Event(Xr,{drag:qr,related:ti,type:"lm-dragenter"});if(!Vr.dispatchEvent(Ki))return Vr;let _i=qr.document instanceof Document?qr.document.body:qr.document.firstElementChild;return Vr===_i?ti:(Ki=new nf.Event(Xr,{drag:qr,related:ti,type:"lm-dragenter"}),_i.dispatchEvent(Ki),_i)}We.dispatchDragEnter=Jt;function jt(qr,Vr,ti,Xr){if(!Vr)return;let Ki=new nf.Event(Xr,{drag:qr,related:ti,type:"lm-dragexit"});Vr.dispatchEvent(Ki)}We.dispatchDragExit=jt;function Xt(qr,Vr,ti,Xr){if(!Vr)return;let Ki=new nf.Event(Xr,{drag:qr,related:ti,type:"lm-dragleave"});Vr.dispatchEvent(Ki)}We.dispatchDragLeave=Xt;function nr(qr,Vr,ti){if(!Vr)return"none";let Xr=new nf.Event(ti,{drag:qr,related:null,type:"lm-dragover"});return Vr.dispatchEvent(Xr)?"none":Xr.dropAction}We.dispatchDragOver=nr;function Ht(qr,Vr,ti){if(!Vr)return"none";let Xr=new nf.Event(ti,{drag:qr,related:null,type:"lm-drop"});return Vr.dispatchEvent(Xr)?"none":Xr.dropAction}We.dispatchDrop=Ht;let er={none:0,copy:1,link:2,move:4},ur={none:er.none,copy:er.copy,link:er.link,move:er.move,"copy-link":er.copy|er.link,"copy-move":er.copy|er.move,"link-move":er.link|er.move,all:er.copy|er.link|er.move};function ir(qr,Vr=document){let ti=++Mr,Xr=Vr instanceof Document?Vr.body:Vr.firstElementChild;return We.cursorBackdrop.isConnected||(We.cursorBackdrop.style.transform="scale(0)",Xr.appendChild(We.cursorBackdrop),Lr(),document.addEventListener("pointermove",Ot,{capture:!0,passive:!0}),We.cursorBackdrop.addEventListener("scroll",ar,{capture:!0,passive:!0})),We.cursorBackdrop.style.cursor=qr,new s0(()=>{ti===Mr&&We.cursorBackdrop.isConnected&&(document.removeEventListener("pointermove",Ot,!0),We.cursorBackdrop.removeEventListener("scroll",ar,!0),Xr.removeChild(We.cursorBackdrop))})}We.overrideCursor=ir;function Ot(qr){if(We.cursorBackdrop){We.cursorBackdrop.style.transform=`translate(${qr.clientX}px, ${qr.clientY}px)`;try{We.cursorBackdrop.hasPointerCapture(qr.pointerId)||We.cursorBackdrop.setPointerCapture(qr.pointerId)}catch{}}}function ar(qr){if(!We.cursorBackdrop)return;let Vr=Ie();if(!Vr)return;let ti=Vr.closest("[data-lm-dragscroll]");ti&&(ti.scrollTop+=We.cursorBackdrop.scrollTop-Ir,ti.scrollLeft+=We.cursorBackdrop.scrollLeft-Ir,Lr())}function Lr(){We.cursorBackdrop.scrollTop=Ir,We.cursorBackdrop.scrollLeft=Ir}let Ir=500;function de(){let qr=document.createElement("div");return qr.classList.add("lm-cursor-backdrop"),qr}let Mr=0;We.cursorBackdrop=de()})(jc||(jc={}));var Aj=hp(lv()),cc=hp(Q2());function Jm(){return YS.keyboardLayout}var cy=class We{constructor(oe,Ie,Oe=[]){this.name=oe,this._codes=Ie,this._keys=We.extractKeys(Ie),this._modifierKeys=We.convertToKeySet(Oe)}keys(){return Object.keys(this._keys)}isValidKey(oe){return oe in this._keys}isModifierKey(oe){return oe in this._modifierKeys}keyForKeydownEvent(oe){return this._codes[oe.keyCode]||""}};(function(We){function oe(Oe){let Qe=Object.create(null);for(let dt in Oe)Qe[Oe[dt]]=!0;return Qe}We.extractKeys=oe;function Ie(Oe){let Qe=Object(null);for(let dt=0,Jt=Oe.length;dt<Jt;++dt)Qe[Oe[dt]]=!0;return Qe}We.convertToKeySet=Ie})(cy||(cy={}));var Bce=new cy("en-us",{8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",27:"Escape",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",91:"Meta",93:"ContextMenu",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Meta"},["Shift","Ctrl","Alt","Meta"]),YS;(function(We){We.keyboardLayout=Bce})(YS||(YS={}));var vp=class We{constructor(){this._timerID=0,this._timerModifierID=0,this._replaying=!1,this._keystrokes=[],this._keydownEvents=[],this._keyBindings=[],this._exactKeyMatch=null,this._commands=new Map,this._commandChanged=new Ls(this),this._commandExecuted=new Ls(this),this._keyBindingChanged=new Ls(this),this._holdKeyBindingPromises=new Map}get commandChanged(){return this._commandChanged}get commandExecuted(){return this._commandExecuted}get keyBindingChanged(){return this._keyBindingChanged}get keyBindings(){return this._keyBindings}listCommands(){return Array.from(this._commands.keys())}hasCommand(oe){return this._commands.has(oe)}addCommand(oe,Ie){if(this._commands.has(oe))throw new Error(`Command '${oe}' already registered.`);return this._commands.set(oe,pd.createCommand(Ie)),this._commandChanged.emit({id:oe,type:"added"}),new s0(()=>{this._commands.delete(oe),this._commandChanged.emit({id:oe,type:"removed"})})}notifyCommandChanged(oe){if(oe!==void 0&&!this._commands.has(oe))throw new Error(`Command '${oe}' is not registered.`);this._commandChanged.emit({id:oe,type:oe?"changed":"many-changed"})}describedBy(oe,Ie=cc.JSONExt.emptyObject){var Oe;let Qe=this._commands.get(oe);return Promise.resolve((Oe=Qe?.describedBy.call(void 0,Ie))!==null&&Oe!==void 0?Oe:{args:null})}label(oe,Ie=cc.JSONExt.emptyObject){var Oe;let Qe=this._commands.get(oe);return(Oe=Qe?.label.call(void 0,Ie))!==null&&Oe!==void 0?Oe:""}mnemonic(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.mnemonic.call(void 0,Ie):-1}icon(oe,Ie=cc.JSONExt.emptyObject){var Oe;return(Oe=this._commands.get(oe))===null||Oe===void 0?void 0:Oe.icon.call(void 0,Ie)}iconClass(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.iconClass.call(void 0,Ie):""}iconLabel(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.iconLabel.call(void 0,Ie):""}caption(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.caption.call(void 0,Ie):""}usage(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.usage.call(void 0,Ie):""}className(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.className.call(void 0,Ie):""}dataset(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.dataset.call(void 0,Ie):{}}isEnabled(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.isEnabled.call(void 0,Ie):!1}isToggled(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.isToggled.call(void 0,Ie):!1}isToggleable(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.isToggleable:!1}isVisible(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);return Oe?Oe.isVisible.call(void 0,Ie):!1}execute(oe,Ie=cc.JSONExt.emptyObject){let Oe=this._commands.get(oe);if(!Oe)return Promise.reject(new Error(`Command '${oe}' not registered.`));let Qe;try{Qe=Oe.execute.call(void 0,Ie)}catch(Jt){Qe=Promise.reject(Jt)}let dt=Promise.resolve(Qe);return this._commandExecuted.emit({id:oe,args:Ie,result:dt}),dt}addKeyBinding(oe){let Ie=pd.createKeyBinding(oe);return this._keyBindings.push(Ie),this._keyBindingChanged.emit({binding:Ie,type:"added"}),new s0(()=>{Aj.ArrayExt.removeFirstOf(this._keyBindings,Ie),this._keyBindingChanged.emit({binding:Ie,type:"removed"})})}processKeydownEvent(oe){if(oe.defaultPrevented||this._replaying)return;let Ie=We.keystrokeForKeydownEvent(oe);if(!Ie){this._replayKeydownEvents(),this._clearPendingState();return}if(We.isModifierKeyPressed(oe)){let{exact:Jt}=pd.matchKeyBinding(this._keyBindings,[Ie],oe);Jt?(oe.preventDefault(),oe.stopPropagation(),this._startModifierTimer(Jt)):this._clearModifierTimer();return}this._keystrokes.push(Ie);let{exact:Oe,partial:Qe}=pd.matchKeyBinding(this._keyBindings,this._keystrokes,oe),dt=Qe.length!==0;if(!Oe&&!dt){this._replayKeydownEvents(),this._clearPendingState();return}if((Oe?.preventDefault||Qe.some(Jt=>Jt.preventDefault))&&(oe.preventDefault(),oe.stopPropagation()),this._keydownEvents.push(oe),Oe&&!dt){this._executeKeyBinding(Oe),this._clearPendingState();return}Oe&&(this._exactKeyMatch=Oe),this._startTimer()}holdKeyBindingExecution(oe,Ie){this._holdKeyBindingPromises.set(oe,Ie)}processKeyupEvent(oe){this._clearModifierTimer()}_startModifierTimer(oe){this._clearModifierTimer(),this._timerModifierID=window.setTimeout(()=>{this._executeKeyBinding(oe)},pd.modifierkeyTimeOut)}_clearModifierTimer(){this._timerModifierID!==0&&(clearTimeout(this._timerModifierID),this._timerModifierID=0)}_startTimer(){this._clearTimer(),this._timerID=window.setTimeout(()=>{this._onPendingTimeout()},pd.CHORD_TIMEOUT)}_clearTimer(){this._timerID!==0&&(clearTimeout(this._timerID),this._timerID=0)}_replayKeydownEvents(){this._keydownEvents.length!==0&&(this._replaying=!0,this._keydownEvents.forEach(pd.replayKeyEvent),this._replaying=!1)}async _executeKeyBinding(oe){if(this._holdKeyBindingPromises.size!==0){let dt=[...this._keydownEvents],Jt=(await Promise.race([Promise.all(dt.map(async jt=>{var Xt;return(Xt=this._holdKeyBindingPromises.get(jt))!==null&&Xt!==void 0?Xt:Promise.resolve(!0)})),new Promise(jt=>{setTimeout(()=>jt([!1]),pd.KEYBINDING_HOLD_TIMEOUT)})])).every(Boolean);if(this._holdKeyBindingPromises.clear(),!Jt)return}let{command:Ie,args:Oe}=oe,Qe={_luminoEvent:{type:"keybinding",keys:oe.keys},...Oe};if(!this.hasCommand(Ie)||!this.isEnabled(Ie,Qe)){let dt=this.hasCommand(Ie)?"enabled":"registered",jt=`Cannot execute key binding '${oe.keys.join(", ")}':`,Xt=`command '${Ie}' is not ${dt}.`;console.warn(`${jt} ${Xt}`);return}await this.execute(Ie,Qe)}_clearPendingState(){this._clearTimer(),this._clearModifierTimer(),this._exactKeyMatch=null,this._keystrokes.length=0,this._keydownEvents.length=0}_onPendingTimeout(){this._timerID=0,this._exactKeyMatch?this._executeKeyBinding(this._exactKeyMatch):this._replayKeydownEvents(),this._clearPendingState()}};(function(We){function oe(jt){let Xt="",nr=!1,Ht=!1,er=!1,ur=!1;for(let ir of jt.split(/\s+/))ir==="Accel"?Nc.IS_MAC?Ht=!0:er=!0:ir==="Alt"?nr=!0:ir==="Cmd"?Ht=!0:ir==="Ctrl"?er=!0:ir==="Shift"?ur=!0:ir.length>0&&(Xt=ir);return{cmd:Ht,ctrl:er,alt:nr,shift:ur,key:Xt}}We.parseKeystroke=oe;function Ie(jt){let Xt="",nr=oe(jt);return nr.ctrl&&(Xt+="Ctrl "),nr.alt&&(Xt+="Alt "),nr.shift&&(Xt+="Shift "),nr.cmd&&Nc.IS_MAC&&(Xt+="Cmd "),nr.key?Xt+nr.key:Xt.trim()}We.normalizeKeystroke=Ie;function Oe(jt){let Xt;return Nc.IS_WIN?Xt=jt.winKeys||jt.keys:Nc.IS_MAC?Xt=jt.macKeys||jt.keys:Xt=jt.linuxKeys||jt.keys,Xt.map(Ie)}We.normalizeKeys=Oe;function Qe(jt){return typeof jt=="string"?Xt(jt):jt.map(Xt).join(", ");function Xt(nr){let Ht=[],er=Nc.IS_MAC?" ":"+",ur=oe(nr);return ur.ctrl&&Ht.push("Ctrl"),ur.alt&&Ht.push("Alt"),ur.shift&&Ht.push("Shift"),Nc.IS_MAC&&ur.cmd&&Ht.push("Cmd"),Ht.push(ur.key),Ht.map(pd.formatKey).join(er)}}We.formatKeystroke=Qe;function dt(jt){let Xt=Jm(),nr=Xt.keyForKeydownEvent(jt);return Xt.isModifierKey(nr)}We.isModifierKeyPressed=dt;function Jt(jt){let Xt=Jm(),nr=Xt.keyForKeydownEvent(jt),Ht=[];return jt.ctrlKey&&Ht.push("Ctrl"),jt.altKey&&Ht.push("Alt"),jt.shiftKey&&Ht.push("Shift"),jt.metaKey&&Nc.IS_MAC&&Ht.push("Cmd"),Xt.isModifierKey(nr)||Ht.push(nr),Ht.join(" ")}We.keystrokeForKeydownEvent=Jt})(vp||(vp={}));var pd;(function(We){We.CHORD_TIMEOUT=1e3,We.KEYBINDING_HOLD_TIMEOUT=1e3,We.modifierkeyTimeOut=500;function oe(Mr){return{execute:Mr.execute,describedBy:Ot(typeof Mr.describedBy=="function"?Mr.describedBy:{args:null,...Mr.describedBy},()=>({args:null})),label:Ot(Mr.label,Xt),mnemonic:Ot(Mr.mnemonic,nr),icon:Ot(Mr.icon,ir),iconClass:Ot(Mr.iconClass,Xt),iconLabel:Ot(Mr.iconLabel,Xt),caption:Ot(Mr.caption,Xt),usage:Ot(Mr.usage,Xt),className:Ot(Mr.className,Xt),dataset:Ot(Mr.dataset,ur),isEnabled:Mr.isEnabled||Ht,isToggled:Mr.isToggled||er,isToggleable:Mr.isToggleable||!!Mr.isToggled,isVisible:Mr.isVisible||Ht}}We.createCommand=oe;function Ie(Mr){var qr;return{keys:vp.normalizeKeys(Mr),selector:ar(Mr),command:Mr.command,args:Mr.args||cc.JSONExt.emptyObject,preventDefault:(qr=Mr.preventDefault)!==null&&qr!==void 0?qr:!0}}We.createKeyBinding=Ie;function Oe(Mr,qr,Vr){let ti=null,Xr=[],Ki=1/0,Ia=0;for(let _i=0,ia=Mr.length;_i<ia;++_i){let Yr=Mr[_i],Ba=Lr(Yr.keys,qr);if(Ba===0)continue;if(Ba===2){Ir(Yr.selector,Vr)!==-1&&Xr.push(Yr);continue}let eo=Ir(Yr.selector,Vr);if(eo===-1||eo>Ki)continue;let rs=dd.calculateSpecificity(Yr.selector);(!ti||eo<Ki||rs>=Ia)&&(ti=Yr,Ki=eo,Ia=rs)}return{exact:ti,partial:Xr}}We.matchKeyBinding=Oe;function Qe(Mr){Mr.target.dispatchEvent(de(Mr))}We.replayKeyEvent=Qe;function dt(Mr){return Nc.IS_MAC?Jt.hasOwnProperty(Mr)?Jt[Mr]:Mr:jt.hasOwnProperty(Mr)?jt[Mr]:Mr}We.formatKey=dt;let Jt={Backspace:"\u232B",Tab:"\u21E5",Enter:"\u23CE",Shift:"\u21E7",Ctrl:"\u2303",Alt:"\u2325",Escape:"\u238B",PageUp:"\u21DE",PageDown:"\u21DF",End:"\u2198",Home:"\u2196",ArrowLeft:"\u2190",ArrowUp:"\u2191",ArrowRight:"\u2192",ArrowDown:"\u2193",Delete:"\u2326",Cmd:"\u2318"},jt={Escape:"Esc",PageUp:"Page Up",PageDown:"Page Down",ArrowLeft:"Left",ArrowUp:"Up",ArrowRight:"Right",ArrowDown:"Down",Delete:"Del"},Xt=()=>"",nr=()=>-1,Ht=()=>!0,er=()=>!1,ur=()=>({}),ir=()=>{};function Ot(Mr,qr){return Mr===void 0?qr:typeof Mr=="function"?Mr:()=>Mr}function ar(Mr){if(Mr.selector.indexOf(",")!==-1)throw new Error(`Selector cannot contain commas: ${Mr.selector}`);if(!dd.isValid(Mr.selector))throw new Error(`Invalid selector: ${Mr.selector}`);return Mr.selector}function Lr(Mr,qr){if(Mr.length<qr.length)return 0;for(let Vr=0,ti=qr.length;Vr<ti;++Vr)if(Mr[Vr]!==qr[Vr])return 0;return Mr.length>qr.length?2:1}function Ir(Mr,qr){let Vr=qr.target,ti=qr.currentTarget;for(let Xr=0;Vr!==null;Vr=Vr.parentElement,++Xr){if(Vr.hasAttribute("data-lm-suppress-shortcuts"))return-1;if(dd.matches(Vr,Mr))return Xr;if(Vr===ti)return-1}return-1}function de(Mr){let qr=document.createEvent("Event"),Vr=Mr.bubbles||!0,ti=Mr.cancelable||!0;return qr.initEvent(Mr.type||"keydown",Vr,ti),qr.key=Mr.key||"",qr.keyCode=Mr.keyCode||0,qr.which=Mr.keyCode||0,qr.ctrlKey=Mr.ctrlKey||!1,qr.altKey=Mr.altKey||!1,qr.shiftKey=Mr.shiftKey||!1,qr.metaKey=Mr.metaKey||!1,qr.view=Mr.view||window,qr}})(pd||(pd={}));var Qm=hp(lv()),e1=class{constructor(oe){this.type="text",this.content=oe}},fy=class{constructor(oe,Ie,Oe,Qe){this.type="element",this.tag=oe,this.attrs=Ie,this.children=Oe,this.renderer=Qe}};function Fs(We){let oe={},Ie,Oe=[];for(let dt=1,Jt=arguments.length;dt<Jt;++dt){let jt=arguments[dt];typeof jt=="string"?Oe.push(new e1(jt)):jt instanceof e1||jt instanceof fy?Oe.push(jt):jt instanceof Array?Qe(Oe,jt):(dt===1||dt===2)&&jt&&typeof jt=="object"&&("render"in jt?Ie=jt:oe=jt)}return new fy(We,oe,Oe,Ie);function Qe(dt,Jt){for(let jt of Jt)typeof jt=="string"?dt.push(new e1(jt)):(jt instanceof e1||jt instanceof fy)&&dt.push(jt)}}(function(We){We.a=We.bind(void 0,"a"),We.abbr=We.bind(void 0,"abbr"),We.address=We.bind(void 0,"address"),We.area=We.bind(void 0,"area"),We.article=We.bind(void 0,"article"),We.aside=We.bind(void 0,"aside"),We.audio=We.bind(void 0,"audio"),We.b=We.bind(void 0,"b"),We.bdi=We.bind(void 0,"bdi"),We.bdo=We.bind(void 0,"bdo"),We.blockquote=We.bind(void 0,"blockquote"),We.br=We.bind(void 0,"br"),We.button=We.bind(void 0,"button"),We.canvas=We.bind(void 0,"canvas"),We.caption=We.bind(void 0,"caption"),We.cite=We.bind(void 0,"cite"),We.code=We.bind(void 0,"code"),We.col=We.bind(void 0,"col"),We.colgroup=We.bind(void 0,"colgroup"),We.data=We.bind(void 0,"data"),We.datalist=We.bind(void 0,"datalist"),We.dd=We.bind(void 0,"dd"),We.del=We.bind(void 0,"del"),We.dfn=We.bind(void 0,"dfn"),We.div=We.bind(void 0,"div"),We.dl=We.bind(void 0,"dl"),We.dt=We.bind(void 0,"dt"),We.em=We.bind(void 0,"em"),We.embed=We.bind(void 0,"embed"),We.fieldset=We.bind(void 0,"fieldset"),We.figcaption=We.bind(void 0,"figcaption"),We.figure=We.bind(void 0,"figure"),We.footer=We.bind(void 0,"footer"),We.form=We.bind(void 0,"form"),We.h1=We.bind(void 0,"h1"),We.h2=We.bind(void 0,"h2"),We.h3=We.bind(void 0,"h3"),We.h4=We.bind(void 0,"h4"),We.h5=We.bind(void 0,"h5"),We.h6=We.bind(void 0,"h6"),We.header=We.bind(void 0,"header"),We.hr=We.bind(void 0,"hr"),We.i=We.bind(void 0,"i"),We.iframe=We.bind(void 0,"iframe"),We.img=We.bind(void 0,"img"),We.input=We.bind(void 0,"input"),We.ins=We.bind(void 0,"ins"),We.kbd=We.bind(void 0,"kbd"),We.label=We.bind(void 0,"label"),We.legend=We.bind(void 0,"legend"),We.li=We.bind(void 0,"li"),We.main=We.bind(void 0,"main"),We.map=We.bind(void 0,"map"),We.mark=We.bind(void 0,"mark"),We.meter=We.bind(void 0,"meter"),We.nav=We.bind(void 0,"nav"),We.noscript=We.bind(void 0,"noscript"),We.object=We.bind(void 0,"object"),We.ol=We.bind(void 0,"ol"),We.optgroup=We.bind(void 0,"optgroup"),We.option=We.bind(void 0,"option"),We.output=We.bind(void 0,"output"),We.p=We.bind(void 0,"p"),We.param=We.bind(void 0,"param"),We.pre=We.bind(void 0,"pre"),We.progress=We.bind(void 0,"progress"),We.q=We.bind(void 0,"q"),We.rp=We.bind(void 0,"rp"),We.rt=We.bind(void 0,"rt"),We.ruby=We.bind(void 0,"ruby"),We.s=We.bind(void 0,"s"),We.samp=We.bind(void 0,"samp"),We.section=We.bind(void 0,"section"),We.select=We.bind(void 0,"select"),We.small=We.bind(void 0,"small"),We.source=We.bind(void 0,"source"),We.span=We.bind(void 0,"span"),We.strong=We.bind(void 0,"strong"),We.sub=We.bind(void 0,"sub"),We.summary=We.bind(void 0,"summary"),We.sup=We.bind(void 0,"sup"),We.table=We.bind(void 0,"table"),We.tbody=We.bind(void 0,"tbody"),We.td=We.bind(void 0,"td"),We.textarea=We.bind(void 0,"textarea"),We.tfoot=We.bind(void 0,"tfoot"),We.th=We.bind(void 0,"th"),We.thead=We.bind(void 0,"thead"),We.time=We.bind(void 0,"time"),We.title=We.bind(void 0,"title"),We.tr=We.bind(void 0,"tr"),We.track=We.bind(void 0,"track"),We.u=We.bind(void 0,"u"),We.ul=We.bind(void 0,"ul"),We.var_=We.bind(void 0,"var"),We.video=We.bind(void 0,"video"),We.wbr=We.bind(void 0,"wbr")})(Fs||(Fs={}));var Hd;(function(We){function oe(Oe){return cv.createDOMNode(Oe)}We.realize=oe;function Ie(Oe,Qe){let dt=cv.hostMap.get(Qe)||[],Jt=cv.asContentArray(Oe);cv.hostMap.set(Qe,Jt),cv.updateContent(Qe,dt,Jt)}We.render=Ie})(Hd||(Hd={}));var cv;(function(We){We.hostMap=new WeakMap;function oe(ir){return ir?ir instanceof Array?ir:[ir]:[]}We.asContentArray=oe;function Ie(ir){let Ot=arguments[1]||null,ar=arguments[2]||null;if(Ot)Ot.insertBefore(Ie(ir),ar);else{if(ir.type==="text")return document.createTextNode(ir.content);if(Ot=document.createElement(ir.tag),Jt(Ot,ir.attrs),ir.renderer)return ir.renderer.render(Ot,{attrs:ir.attrs,children:ir.children}),Ot;for(let Lr=0,Ir=ir.children.length;Lr<Ir;++Lr)Ie(ir.children[Lr],Ot)}return Ot}We.createDOMNode=Ie;function Oe(ir,Ot,ar){if(Ot===ar)return;let Lr=ur(ir,Ot),Ir=Ot.slice(),de=ir.firstChild,Mr=ar.length;for(let qr=0;qr<Mr;++qr){if(qr>=Ir.length){Ie(ar[qr],ir);continue}let Vr=Ir[qr],ti=ar[qr];if(Vr===ti){de=de.nextSibling;continue}if(Vr.type==="text"&&ti.type==="text"){de.textContent!==ti.content&&(de.textContent=ti.content),de=de.nextSibling;continue}if(Vr.type==="text"||ti.type==="text"){Qm.ArrayExt.insert(Ir,qr,ti),Ie(ti,ir,de);continue}if(!Vr.renderer!=!ti.renderer){Qm.ArrayExt.insert(Ir,qr,ti),Ie(ti,ir,de);continue}let Xr=ti.attrs.key;if(Xr&&Xr in Lr){let Ia=Lr[Xr];Ia.vNode!==Vr&&(Qm.ArrayExt.move(Ir,Ir.indexOf(Ia.vNode,qr+1),qr),ir.insertBefore(Ia.element,de),Vr=Ia.vNode,de=Ia.element)}if(Vr===ti){de=de.nextSibling;continue}let Ki=Vr.attrs.key;if(Ki&&Ki!==Xr){Qm.ArrayExt.insert(Ir,qr,ti),Ie(ti,ir,de);continue}if(Vr.tag!==ti.tag){Qm.ArrayExt.insert(Ir,qr,ti),Ie(ti,ir,de);continue}jt(de,Vr.attrs,ti.attrs),ti.renderer?ti.renderer.render(de,{attrs:ti.attrs,children:ti.children}):Oe(de,Vr.children,ti.children),de=de.nextSibling}Qe(ir,Ir,Mr,!0)}We.updateContent=Oe;function Qe(ir,Ot,ar,Lr){for(let Ir=Ot.length-1;Ir>=ar;--Ir){let de=Ot[Ir],Mr=Lr?ir.lastChild:ir.childNodes[Ir];de.type==="text"||(de.renderer&&de.renderer.unrender?de.renderer.unrender(Mr,{attrs:de.attrs,children:de.children}):Qe(Mr,de.children,0,!1)),Lr&&ir.removeChild(Mr)}}let dt={key:!0,className:!0,htmlFor:!0,dataset:!0,style:!0};function Jt(ir,Ot){for(let ar in Ot)ar in dt||(ar.substr(0,2)==="on"?ir[ar]=Ot[ar]:ir.setAttribute(ar,Ot[ar]));Ot.className!==void 0&&ir.setAttribute("class",Ot.className),Ot.htmlFor!==void 0&&ir.setAttribute("for",Ot.htmlFor),Ot.dataset&&Xt(ir,Ot.dataset),Ot.style&&Ht(ir,Ot.style)}function jt(ir,Ot,ar){if(Ot===ar)return;let Lr;for(Lr in Ot)Lr in dt||Lr in ar||(Lr.substr(0,2)==="on"?ir[Lr]=null:ir.removeAttribute(Lr));for(Lr in ar)Lr in dt||Ot[Lr]===ar[Lr]||(Lr.substr(0,2)==="on"?ir[Lr]=ar[Lr]:ir.setAttribute(Lr,ar[Lr]));Ot.className!==ar.className&&(ar.className!==void 0?ir.setAttribute("class",ar.className):ir.removeAttribute("class")),Ot.htmlFor!==ar.htmlFor&&(ar.htmlFor!==void 0?ir.setAttribute("for",ar.htmlFor):ir.removeAttribute("for")),Ot.dataset!==ar.dataset&&nr(ir,Ot.dataset||{},ar.dataset||{}),Ot.style!==ar.style&&er(ir,Ot.style||{},ar.style||{})}function Xt(ir,Ot){for(let ar in Ot)ir.setAttribute(`data-${ar}`,Ot[ar])}function nr(ir,Ot,ar){for(let Lr in Ot)Lr in ar||ir.removeAttribute(`data-${Lr}`);for(let Lr in ar)Ot[Lr]!==ar[Lr]&&ir.setAttribute(`data-${Lr}`,ar[Lr])}function Ht(ir,Ot){let ar=ir.style,Lr;for(Lr in Ot)ar[Lr]=Ot[Lr]}function er(ir,Ot,ar){let Lr=ir.style,Ir;for(Ir in Ot)Ir in ar||(Lr[Ir]="");for(Ir in ar)Ot[Ir]!==ar[Ir]&&(Lr[Ir]=ar[Ir])}function ur(ir,Ot){let ar=ir.firstChild,Lr=Object.create(null);for(let Ir of Ot)Ir.type==="element"&&Ir.attrs.key&&(Lr[Ir.attrs.key]={vNode:Ir,element:ar}),ar=ar.nextSibling;return Lr}})(cv||(cv={}));var Wd=class{constructor(){this.sizeHint=0,this.minSize=0,this.maxSize=1/0,this.stretch=1,this.size=0,this.done=!1}},ih;(function(We){function oe(dt,Jt){let jt=dt.length;if(jt===0)return Jt;let Xt=0,nr=0,Ht=0,er=0,ur=0;for(let ar=0;ar<jt;++ar){let Lr=dt[ar],Ir=Lr.minSize,de=Lr.maxSize,Mr=Lr.sizeHint;Lr.done=!1,Lr.size=Math.max(Ir,Math.min(Mr,de)),Ht+=Lr.size,Xt+=Ir,nr+=de,Lr.stretch>0&&(er+=Lr.stretch,ur++)}if(Jt===Ht)return 0;if(Jt<=Xt){for(let ar=0;ar<jt;++ar){let Lr=dt[ar];Lr.size=Lr.minSize}return Jt-Xt}if(Jt>=nr){for(let ar=0;ar<jt;++ar){let Lr=dt[ar];Lr.size=Lr.maxSize}return Jt-nr}let ir=.01,Ot=jt;if(Jt<Ht){let ar=Ht-Jt;for(;ur>0&&ar>ir;){let Lr=ar,Ir=er;for(let de=0;de<jt;++de){let Mr=dt[de];if(Mr.done||Mr.stretch===0)continue;let qr=Mr.stretch*Lr/Ir;Mr.size-qr<=Mr.minSize?(ar-=Mr.size-Mr.minSize,er-=Mr.stretch,Mr.size=Mr.minSize,Mr.done=!0,Ot--,ur--):(ar-=qr,Mr.size-=qr)}}for(;Ot>0&&ar>ir;){let Lr=ar/Ot;for(let Ir=0;Ir<jt;++Ir){let de=dt[Ir];de.done||(de.size-Lr<=de.minSize?(ar-=de.size-de.minSize,de.size=de.minSize,de.done=!0,Ot--):(ar-=Lr,de.size-=Lr))}}}else{let ar=Jt-Ht;for(;ur>0&&ar>ir;){let Lr=ar,Ir=er;for(let de=0;de<jt;++de){let Mr=dt[de];if(Mr.done||Mr.stretch===0)continue;let qr=Mr.stretch*Lr/Ir;Mr.size+qr>=Mr.maxSize?(ar-=Mr.maxSize-Mr.size,er-=Mr.stretch,Mr.size=Mr.maxSize,Mr.done=!0,Ot--,ur--):(ar-=qr,Mr.size+=qr)}}for(;Ot>0&&ar>ir;){let Lr=ar/Ot;for(let Ir=0;Ir<jt;++Ir){let de=dt[Ir];de.done||(de.size+Lr>=de.maxSize?(ar-=de.maxSize-de.size,de.size=de.maxSize,de.done=!0,Ot--):(ar-=Lr,de.size+=Lr))}}}return 0}We.calc=oe;function Ie(dt,Jt,jt){dt.length===0||jt===0||(jt>0?Oe(dt,Jt,jt):Qe(dt,Jt,-jt))}We.adjust=Ie;function Oe(dt,Jt,jt){let Xt=0;for(let ur=0;ur<=Jt;++ur){let ir=dt[ur];Xt+=ir.maxSize-ir.size}let nr=0;for(let ur=Jt+1,ir=dt.length;ur<ir;++ur){let Ot=dt[ur];nr+=Ot.size-Ot.minSize}jt=Math.min(jt,Xt,nr);let Ht=jt;for(let ur=Jt;ur>=0&&Ht>0;--ur){let ir=dt[ur],Ot=ir.maxSize-ir.size;Ot>=Ht?(ir.sizeHint=ir.size+Ht,Ht=0):(ir.sizeHint=ir.size+Ot,Ht-=Ot)}let er=jt;for(let ur=Jt+1,ir=dt.length;ur<ir&&er>0;++ur){let Ot=dt[ur],ar=Ot.size-Ot.minSize;ar>=er?(Ot.sizeHint=Ot.size-er,er=0):(Ot.sizeHint=Ot.size-ar,er-=ar)}}function Qe(dt,Jt,jt){let Xt=0;for(let ur=Jt+1,ir=dt.length;ur<ir;++ur){let Ot=dt[ur];Xt+=Ot.maxSize-Ot.size}let nr=0;for(let ur=0;ur<=Jt;++ur){let ir=dt[ur];nr+=ir.size-ir.minSize}jt=Math.min(jt,Xt,nr);let Ht=jt;for(let ur=Jt+1,ir=dt.length;ur<ir&&Ht>0;++ur){let Ot=dt[ur],ar=Ot.maxSize-Ot.size;ar>=Ht?(Ot.sizeHint=Ot.size+Ht,Ht=0):(Ot.sizeHint=Ot.size+ar,Ht-=ar)}let er=jt;for(let ur=Jt;ur>=0&&er>0;--ur){let ir=dt[ur],Ot=ir.size-ir.minSize;Ot>=er?(ir.sizeHint=ir.size-er,er=0):(ir.sizeHint=ir.size-Ot,er-=Ot)}}})(ih||(ih={}));var hy=class{constructor(oe){this._label="",this._caption="",this._mnemonic=-1,this._icon=void 0,this._iconClass="",this._iconLabel="",this._className="",this._closable=!1,this._changed=new Ls(this),this._isDisposed=!1,this.owner=oe.owner,oe.label!==void 0&&(this._label=oe.label),oe.mnemonic!==void 0&&(this._mnemonic=oe.mnemonic),oe.icon!==void 0&&(this._icon=oe.icon),oe.iconClass!==void 0&&(this._iconClass=oe.iconClass),oe.iconLabel!==void 0&&(this._iconLabel=oe.iconLabel),oe.caption!==void 0&&(this._caption=oe.caption),oe.className!==void 0&&(this._className=oe.className),oe.closable!==void 0&&(this._closable=oe.closable),this._dataset=oe.dataset||{}}get changed(){return this._changed}get label(){return this._label}set label(oe){this._label!==oe&&(this._label=oe,this._changed.emit(void 0))}get mnemonic(){return this._mnemonic}set mnemonic(oe){this._mnemonic!==oe&&(this._mnemonic=oe,this._changed.emit(void 0))}get icon(){return this._icon}set icon(oe){this._icon!==oe&&(this._icon=oe,this._changed.emit(void 0))}get iconClass(){return this._iconClass}set iconClass(oe){this._iconClass!==oe&&(this._iconClass=oe,this._changed.emit(void 0))}get iconLabel(){return this._iconLabel}set iconLabel(oe){this._iconLabel!==oe&&(this._iconLabel=oe,this._changed.emit(void 0))}get caption(){return this._caption}set caption(oe){this._caption!==oe&&(this._caption=oe,this._changed.emit(void 0))}get className(){return this._className}set className(oe){this._className!==oe&&(this._className=oe,this._changed.emit(void 0))}get closable(){return this._closable}set closable(oe){this._closable!==oe&&(this._closable=oe,this._changed.emit(void 0))}get dataset(){return this._dataset}set dataset(oe){this._dataset!==oe&&(this._dataset=oe,this._changed.emit(void 0))}get isDisposed(){return this._isDisposed}dispose(){this.isDisposed||(this._isDisposed=!0,Ls.clearData(this))}},Ya=class We{constructor(oe={}){this._flags=0,this._layout=null,this._parent=null,this._disposed=new Ls(this),this._hiddenMode=We.HiddenMode.Display,this.node=rw.createNode(oe),this.addClass("lm-Widget")}dispose(){this.isDisposed||(this.setFlag(We.Flag.IsDisposed),this._disposed.emit(void 0),this.parent?this.parent=null:this.isAttached&&We.detach(this),this._layout&&(this._layout.dispose(),this._layout=null),this.title.dispose(),Ls.clearData(this),za.clearData(this),af.clearData(this))}get disposed(){return this._disposed}get isDisposed(){return this.testFlag(We.Flag.IsDisposed)}get isAttached(){return this.testFlag(We.Flag.IsAttached)}get isHidden(){return this.testFlag(We.Flag.IsHidden)}get isVisible(){let oe=this;do{if(oe.isHidden||!oe.isAttached)return!1;oe=oe.parent}while(oe!=null);return!0}get title(){return rw.titleProperty.get(this)}get id(){return this.node.id}set id(oe){this.node.id=oe}get dataset(){return this.node.dataset}get hiddenMode(){return this._hiddenMode}set hiddenMode(oe){this._hiddenMode!==oe&&(this.isHidden&&this._toggleHidden(!1),oe==We.HiddenMode.Scale?this.node.style.willChange="transform":this.node.style.willChange="auto",this._hiddenMode=oe,this.isHidden&&this._toggleHidden(!0))}get parent(){return this._parent}set parent(oe){if(this._parent!==oe){if(oe&&this.contains(oe))throw new Error("Invalid parent widget.");if(this._parent&&!this._parent.isDisposed){let Ie=new We.ChildMessage("child-removed",this);za.sendMessage(this._parent,Ie)}if(this._parent=oe,this._parent&&!this._parent.isDisposed){let Ie=new We.ChildMessage("child-added",this);za.sendMessage(this._parent,Ie)}this.isDisposed||za.sendMessage(this,We.Msg.ParentChanged)}}get layout(){return this._layout}set layout(oe){if(this._layout!==oe){if(this.testFlag(We.Flag.DisallowLayout))throw new Error("Cannot set widget layout.");if(this._layout)throw new Error("Cannot change widget layout.");if(oe.parent)throw new Error("Cannot change layout parent.");this._layout=oe,oe.parent=this}}*children(){this._layout&&(yield*this._layout)}contains(oe){for(let Ie=oe;Ie;Ie=Ie._parent)if(Ie===this)return!0;return!1}hasClass(oe){return this.node.classList.contains(oe)}addClass(oe){this.node.classList.add(oe)}removeClass(oe){this.node.classList.remove(oe)}toggleClass(oe,Ie){return Ie===!0?(this.node.classList.add(oe),!0):Ie===!1?(this.node.classList.remove(oe),!1):this.node.classList.toggle(oe)}update(){za.postMessage(this,We.Msg.UpdateRequest)}fit(){za.postMessage(this,We.Msg.FitRequest)}activate(){za.postMessage(this,We.Msg.ActivateRequest)}close(){za.sendMessage(this,We.Msg.CloseRequest)}show(){if(this.testFlag(We.Flag.IsHidden)&&(this.isAttached&&(!this.parent||this.parent.isVisible)&&za.sendMessage(this,We.Msg.BeforeShow),this.clearFlag(We.Flag.IsHidden),this._toggleHidden(!1),this.isAttached&&(!this.parent||this.parent.isVisible)&&za.sendMessage(this,We.Msg.AfterShow),this.parent)){let oe=new We.ChildMessage("child-shown",this);za.sendMessage(this.parent,oe)}}hide(){if(!this.testFlag(We.Flag.IsHidden)&&(this.isAttached&&(!this.parent||this.parent.isVisible)&&za.sendMessage(this,We.Msg.BeforeHide),this.setFlag(We.Flag.IsHidden),this._toggleHidden(!0),this.isAttached&&(!this.parent||this.parent.isVisible)&&za.sendMessage(this,We.Msg.AfterHide),this.parent)){let oe=new We.ChildMessage("child-hidden",this);za.sendMessage(this.parent,oe)}}setHidden(oe){oe?this.hide():this.show()}testFlag(oe){return(this._flags&oe)!==0}setFlag(oe){this._flags|=oe}clearFlag(oe){this._flags&=~oe}processMessage(oe){switch(oe.type){case"resize":this.notifyLayout(oe),this.onResize(oe);break;case"update-request":this.notifyLayout(oe),this.onUpdateRequest(oe);break;case"fit-request":this.notifyLayout(oe),this.onFitRequest(oe);break;case"before-show":this.notifyLayout(oe),this.onBeforeShow(oe);break;case"after-show":this.setFlag(We.Flag.IsVisible),this.notifyLayout(oe),this.onAfterShow(oe);break;case"before-hide":this.notifyLayout(oe),this.onBeforeHide(oe);break;case"after-hide":this.clearFlag(We.Flag.IsVisible),this.notifyLayout(oe),this.onAfterHide(oe);break;case"before-attach":this.notifyLayout(oe),this.onBeforeAttach(oe);break;case"after-attach":!this.isHidden&&(!this.parent||this.parent.isVisible)&&this.setFlag(We.Flag.IsVisible),this.setFlag(We.Flag.IsAttached),this.notifyLayout(oe),this.onAfterAttach(oe);break;case"before-detach":this.notifyLayout(oe),this.onBeforeDetach(oe);break;case"after-detach":this.clearFlag(We.Flag.IsVisible),this.clearFlag(We.Flag.IsAttached),this.notifyLayout(oe),this.onAfterDetach(oe);break;case"activate-request":this.notifyLayout(oe),this.onActivateRequest(oe);break;case"close-request":this.notifyLayout(oe),this.onCloseRequest(oe);break;case"child-added":this.notifyLayout(oe),this.onChildAdded(oe);break;case"child-removed":this.notifyLayout(oe),this.onChildRemoved(oe);break;default:this.notifyLayout(oe);break}}notifyLayout(oe){this._layout&&this._layout.processParentMessage(oe)}onCloseRequest(oe){this.parent?this.parent=null:this.isAttached&&We.detach(this)}onResize(oe){}onUpdateRequest(oe){}onFitRequest(oe){}onActivateRequest(oe){}onBeforeShow(oe){}onAfterShow(oe){}onBeforeHide(oe){}onAfterHide(oe){}onBeforeAttach(oe){}onAfterAttach(oe){}onBeforeDetach(oe){}onAfterDetach(oe){}onChildAdded(oe){}onChildRemoved(oe){}_toggleHidden(oe){if(oe)switch(this._hiddenMode){case We.HiddenMode.Display:this.addClass("lm-mod-hidden");break;case We.HiddenMode.Scale:this.node.style.transform="scale(0)",this.node.setAttribute("aria-hidden","true");break;case We.HiddenMode.ContentVisibility:this.node.style.contentVisibility="hidden",this.node.style.zIndex="-1",this.node.style.opacity="0";break}else switch(this._hiddenMode){case We.HiddenMode.Display:this.removeClass("lm-mod-hidden");break;case We.HiddenMode.Scale:this.node.style.transform="",this.node.removeAttribute("aria-hidden");break;case We.HiddenMode.ContentVisibility:this.node.style.contentVisibility="",this.node.style.zIndex="",this.node.style.opacity="";break}}};(function(We){(function(dt){dt[dt.Display=0]="Display",dt[dt.Scale=1]="Scale",dt[dt.ContentVisibility=2]="ContentVisibility"})(We.HiddenMode||(We.HiddenMode={})),(function(dt){dt[dt.IsDisposed=1]="IsDisposed",dt[dt.IsAttached=2]="IsAttached",dt[dt.IsHidden=4]="IsHidden",dt[dt.IsVisible=8]="IsVisible",dt[dt.DisallowLayout=16]="DisallowLayout"})(We.Flag||(We.Flag={})),(function(dt){dt.BeforeShow=new rf("before-show"),dt.AfterShow=new rf("after-show"),dt.BeforeHide=new rf("before-hide"),dt.AfterHide=new rf("after-hide"),dt.BeforeAttach=new rf("before-attach"),dt.AfterAttach=new rf("after-attach"),dt.BeforeDetach=new rf("before-detach"),dt.AfterDetach=new rf("after-detach"),dt.ParentChanged=new rf("parent-changed"),dt.UpdateRequest=new o0("update-request"),dt.FitRequest=new o0("fit-request"),dt.ActivateRequest=new o0("activate-request"),dt.CloseRequest=new o0("close-request")})(We.Msg||(We.Msg={}));class oe extends rf{constructor(Jt,jt){super(Jt),this.child=jt}}We.ChildMessage=oe;class Ie extends rf{constructor(Jt,jt){super("resize"),this.width=Jt,this.height=jt}}We.ResizeMessage=Ie,(function(dt){dt.UnknownSize=new dt(-1,-1)})(Ie=We.ResizeMessage||(We.ResizeMessage={}));function Oe(dt,Jt,jt=null){if(dt.parent)throw new Error("Cannot attach a child widget.");if(dt.isAttached||dt.node.isConnected)throw new Error("Widget is already attached.");if(!Jt.isConnected)throw new Error("Host is not attached.");za.sendMessage(dt,We.Msg.BeforeAttach),Jt.insertBefore(dt.node,jt),za.sendMessage(dt,We.Msg.AfterAttach)}We.attach=Oe;function Qe(dt){if(dt.parent)throw new Error("Cannot detach a child widget.");if(!dt.isAttached||!dt.node.isConnected)throw new Error("Widget is not attached.");za.sendMessage(dt,We.Msg.BeforeDetach),dt.node.parentNode.removeChild(dt.node),za.sendMessage(dt,We.Msg.AfterDetach)}We.detach=Qe})(Ya||(Ya={}));var rw;(function(We){We.titleProperty=new af({name:"title",create:Ie=>new hy({owner:Ie})});function oe(Ie){return Ie.node||document.createElement(Ie.tag||"div")}We.createNode=oe})(rw||(rw={}));var _p=class{constructor(oe={}){this._disposed=!1,this._parent=null,this._fitPolicy=oe.fitPolicy||"set-min-size"}dispose(){this._parent=null,this._disposed=!0,Ls.clearData(this),af.clearData(this)}get isDisposed(){return this._disposed}get parent(){return this._parent}set parent(oe){if(this._parent!==oe){if(this._parent)throw new Error("Cannot change parent widget.");if(oe.layout!==this)throw new Error("Invalid parent widget.");this._parent=oe,this.init()}}get fitPolicy(){return this._fitPolicy}set fitPolicy(oe){if(this._fitPolicy!==oe&&(this._fitPolicy=oe,this._parent)){let Ie=this._parent.node.style;Ie.minWidth="",Ie.minHeight="",Ie.maxWidth="",Ie.maxHeight="",this._parent.fit()}}processParentMessage(oe){switch(oe.type){case"resize":this.onResize(oe);break;case"update-request":this.onUpdateRequest(oe);break;case"fit-request":this.onFitRequest(oe);break;case"before-show":this.onBeforeShow(oe);break;case"after-show":this.onAfterShow(oe);break;case"before-hide":this.onBeforeHide(oe);break;case"after-hide":this.onAfterHide(oe);break;case"before-attach":this.onBeforeAttach(oe);break;case"after-attach":this.onAfterAttach(oe);break;case"before-detach":this.onBeforeDetach(oe);break;case"after-detach":this.onAfterDetach(oe);break;case"child-removed":this.onChildRemoved(oe);break;case"child-shown":this.onChildShown(oe);break;case"child-hidden":this.onChildHidden(oe);break}}init(){for(let oe of this)oe.parent=this.parent}onResize(oe){for(let Ie of this)za.sendMessage(Ie,Ya.ResizeMessage.UnknownSize)}onUpdateRequest(oe){for(let Ie of this)za.sendMessage(Ie,Ya.ResizeMessage.UnknownSize)}onBeforeAttach(oe){for(let Ie of this)za.sendMessage(Ie,oe)}onAfterAttach(oe){for(let Ie of this)za.sendMessage(Ie,oe)}onBeforeDetach(oe){for(let Ie of this)za.sendMessage(Ie,oe)}onAfterDetach(oe){for(let Ie of this)za.sendMessage(Ie,oe)}onBeforeShow(oe){for(let Ie of this)Ie.isHidden||za.sendMessage(Ie,oe)}onAfterShow(oe){for(let Ie of this)Ie.isHidden||za.sendMessage(Ie,oe)}onBeforeHide(oe){for(let Ie of this)Ie.isHidden||za.sendMessage(Ie,oe)}onAfterHide(oe){for(let Ie of this)Ie.isHidden||za.sendMessage(Ie,oe)}onChildRemoved(oe){this.removeWidget(oe.child)}onFitRequest(oe){}onChildShown(oe){}onChildHidden(oe){}};(function(We){function oe(dt){return t1.horizontalAlignmentProperty.get(dt)}We.getHorizontalAlignment=oe;function Ie(dt,Jt){t1.horizontalAlignmentProperty.set(dt,Jt)}We.setHorizontalAlignment=Ie;function Oe(dt){return t1.verticalAlignmentProperty.get(dt)}We.getVerticalAlignment=Oe;function Qe(dt,Jt){t1.verticalAlignmentProperty.set(dt,Jt)}We.setVerticalAlignment=Qe})(_p||(_p={}));var dv=class{constructor(oe){this._top=NaN,this._left=NaN,this._width=NaN,this._height=NaN,this._minWidth=0,this._minHeight=0,this._maxWidth=1/0,this._maxHeight=1/0,this._disposed=!1,this.widget=oe,this.widget.node.style.position="absolute",this.widget.node.style.contain="strict"}dispose(){if(this._disposed)return;this._disposed=!0;let oe=this.widget.node.style;oe.position="",oe.top="",oe.left="",oe.width="",oe.height="",oe.contain=""}get minWidth(){return this._minWidth}get minHeight(){return this._minHeight}get maxWidth(){return this._maxWidth}get maxHeight(){return this._maxHeight}get isDisposed(){return this._disposed}get isHidden(){return this.widget.isHidden}get isVisible(){return this.widget.isVisible}get isAttached(){return this.widget.isAttached}fit(){let oe=Os.sizeLimits(this.widget.node);this._minWidth=oe.minWidth,this._minHeight=oe.minHeight,this._maxWidth=oe.maxWidth,this._maxHeight=oe.maxHeight}update(oe,Ie,Oe,Qe){let dt=Math.max(this._minWidth,Math.min(Oe,this._maxWidth)),Jt=Math.max(this._minHeight,Math.min(Qe,this._maxHeight));if(dt<Oe)switch(_p.getHorizontalAlignment(this.widget)){case"left":break;case"center":oe+=(Oe-dt)/2;break;case"right":oe+=Oe-dt;break;default:throw"unreachable"}if(Jt<Qe)switch(_p.getVerticalAlignment(this.widget)){case"top":break;case"center":Ie+=(Qe-Jt)/2;break;case"bottom":Ie+=Qe-Jt;break;default:throw"unreachable"}let jt=!1,Xt=this.widget.node.style;if(this._top!==Ie&&(this._top=Ie,Xt.top=`${Ie}px`),this._left!==oe&&(this._left=oe,Xt.left=`${oe}px`),this._width!==dt&&(jt=!0,this._width=dt,Xt.width=`${dt}px`),this._height!==Jt&&(jt=!0,this._height=Jt,Xt.height=`${Jt}px`),jt){let nr=new Ya.ResizeMessage(dt,Jt);za.sendMessage(this.widget,nr)}}},t1;(function(We){We.horizontalAlignmentProperty=new af({name:"horizontalAlignment",create:()=>"center",changed:oe}),We.verticalAlignmentProperty=new af({name:"verticalAlignment",create:()=>"top",changed:oe});function oe(Ie){Ie.parent&&Ie.parent.layout&&Ie.parent.update()}})(t1||(t1={}));var r1=class extends _p{constructor(){super(...arguments),this._widgets=[]}dispose(){for(;this._widgets.length>0;)this._widgets.pop().dispose();super.dispose()}get widgets(){return this._widgets}*[Symbol.iterator](){yield*this._widgets}addWidget(oe){this.insertWidget(this._widgets.length,oe)}insertWidget(oe,Ie){Ie.parent=this.parent;let Oe=this._widgets.indexOf(Ie),Qe=Math.max(0,Math.min(oe,this._widgets.length));if(Oe===-1){Sa.ArrayExt.insert(this._widgets,Qe,Ie),this.parent&&this.attachWidget(Qe,Ie);return}Qe===this._widgets.length&&Qe--,Oe!==Qe&&(Sa.ArrayExt.move(this._widgets,Oe,Qe),this.parent&&this.moveWidget(Oe,Qe,Ie))}removeWidget(oe){this.removeWidgetAt(this._widgets.indexOf(oe))}removeWidgetAt(oe){let Ie=Sa.ArrayExt.removeAt(this._widgets,oe);Ie&&this.parent&&this.detachWidget(oe,Ie)}init(){super.init();let oe=0;for(let Ie of this)this.attachWidget(oe++,Ie)}attachWidget(oe,Ie){let Oe=this.parent.node.children[oe];this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeAttach),this.parent.node.insertBefore(Ie.node,Oe),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterAttach)}moveWidget(oe,Ie,Oe){this.parent.isAttached&&za.sendMessage(Oe,Ya.Msg.BeforeDetach),this.parent.node.removeChild(Oe.node),this.parent.isAttached&&za.sendMessage(Oe,Ya.Msg.AfterDetach);let Qe=this.parent.node.children[Ie];this.parent.isAttached&&za.sendMessage(Oe,Ya.Msg.BeforeAttach),this.parent.node.insertBefore(Oe.node,Qe),this.parent.isAttached&&za.sendMessage(Oe,Ya.Msg.AfterAttach)}detachWidget(oe,Ie){this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeDetach),this.parent.node.removeChild(Ie.node),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterDetach)}},dy;(function(We){function oe(Ie){return Math.max(0,Math.floor(Ie))}We.clampDimension=oe})(dy||(dy={}));var py=dy,xp=class We extends r1{constructor(oe){super(),this.widgetOffset=0,this._fixed=0,this._spacing=4,this._dirty=!1,this._hasNormedSizes=!1,this._sizers=[],this._items=[],this._handles=[],this._box=null,this._alignment="start",this._orientation="horizontal",this.renderer=oe.renderer,oe.orientation!==void 0&&(this._orientation=oe.orientation),oe.alignment!==void 0&&(this._alignment=oe.alignment),oe.spacing!==void 0&&(this._spacing=dy.clampDimension(oe.spacing))}dispose(){for(let oe of this._items)oe.dispose();this._box=null,this._items.length=0,this._sizers.length=0,this._handles.length=0,super.dispose()}get orientation(){return this._orientation}set orientation(oe){this._orientation!==oe&&(this._orientation=oe,this.parent&&(this.parent.dataset.orientation=oe,this.parent.fit()))}get alignment(){return this._alignment}set alignment(oe){this._alignment!==oe&&(this._alignment=oe,this.parent&&(this.parent.dataset.alignment=oe,this.parent.update()))}get spacing(){return this._spacing}set spacing(oe){oe=dy.clampDimension(oe),this._spacing!==oe&&(this._spacing=oe,this.parent&&this.parent.fit())}get handles(){return this._handles}absoluteSizes(){return this._sizers.map(oe=>oe.size)}relativeSizes(){return gp.normalize(this._sizers.map(oe=>oe.size))}setRelativeSizes(oe,Ie=!0){let Oe=this._sizers.length,Qe=oe.slice(0,Oe);for(;Qe.length<Oe;)Qe.push(0);let dt=gp.normalize(Qe);for(let Jt=0;Jt<Oe;++Jt){let jt=this._sizers[Jt];jt.sizeHint=dt[Jt],jt.size=dt[Jt]}this._hasNormedSizes=!0,Ie&&this.parent&&this.parent.update()}moveHandle(oe,Ie){let Oe=this._handles[oe];if(!Oe||Oe.classList.contains("lm-mod-hidden"))return;let Qe;if(this._orientation==="horizontal"?Qe=Ie-Oe.offsetLeft:Qe=Ie-Oe.offsetTop,Qe!==0){for(let dt of this._sizers)dt.size>0&&(dt.sizeHint=dt.size);ih.adjust(this._sizers,oe,Qe),this.parent&&this.parent.update()}}init(){this.parent.dataset.orientation=this.orientation,this.parent.dataset.alignment=this.alignment,super.init()}attachWidget(oe,Ie){let Oe=new dv(Ie),Qe=gp.createHandle(this.renderer),dt=gp.averageSize(this._sizers),Jt=gp.createSizer(dt);Sa.ArrayExt.insert(this._items,oe,Oe),Sa.ArrayExt.insert(this._sizers,oe,Jt),Sa.ArrayExt.insert(this._handles,oe,Qe),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeAttach),this.parent.node.appendChild(Ie.node),this.parent.node.appendChild(Qe),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterAttach),this.parent.fit()}moveWidget(oe,Ie,Oe){Sa.ArrayExt.move(this._items,oe,Ie),Sa.ArrayExt.move(this._sizers,oe,Ie),Sa.ArrayExt.move(this._handles,oe,Ie),this.parent.fit()}detachWidget(oe,Ie){let Oe=Sa.ArrayExt.removeAt(this._items,oe),Qe=Sa.ArrayExt.removeAt(this._handles,oe);Sa.ArrayExt.removeAt(this._sizers,oe),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeDetach),this.parent.node.removeChild(Ie.node),this.parent.node.removeChild(Qe),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterDetach),Oe.dispose(),this.parent.fit()}onBeforeShow(oe){super.onBeforeShow(oe),this.parent.update()}onBeforeAttach(oe){super.onBeforeAttach(oe),this.parent.fit()}onChildShown(oe){this.parent.fit()}onChildHidden(oe){this.parent.fit()}onResize(oe){this.parent.isVisible&&this._update(oe.width,oe.height)}onUpdateRequest(oe){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(oe){this.parent.isAttached&&this._fit()}updateItemPosition(oe,Ie,Oe,Qe,dt,Jt,jt){let Xt=this._items[oe];if(Xt.isHidden)return;let nr=this._handles[oe].style;Ie?(Oe+=this.widgetOffset,Xt.update(Oe,Qe,jt,dt),Oe+=jt,nr.top=`${Qe}px`,nr.left=`${Oe}px`,nr.width=`${this._spacing}px`,nr.height=`${dt}px`):(Qe+=this.widgetOffset,Xt.update(Oe,Qe,Jt,jt),Qe+=jt,nr.top=`${Qe}px`,nr.left=`${Oe}px`,nr.width=`${Jt}px`,nr.height=`${this._spacing}px`)}_fit(){let oe=0,Ie=-1;for(let Xt=0,nr=this._items.length;Xt<nr;++Xt)this._items[Xt].isHidden?this._handles[Xt].classList.add("lm-mod-hidden"):(this._handles[Xt].classList.remove("lm-mod-hidden"),Ie=Xt,oe++);Ie!==-1&&this._handles[Ie].classList.add("lm-mod-hidden"),this._fixed=this._spacing*Math.max(0,oe-1)+this.widgetOffset*this._items.length;let Oe=this._orientation==="horizontal",Qe=Oe?this._fixed:0,dt=Oe?0:this._fixed;for(let Xt=0,nr=this._items.length;Xt<nr;++Xt){let Ht=this._items[Xt],er=this._sizers[Xt];if(er.size>0&&(er.sizeHint=er.size),Ht.isHidden){er.minSize=0,er.maxSize=0;continue}Ht.fit(),er.stretch=We.getStretch(Ht.widget),Oe?(er.minSize=Ht.minWidth,er.maxSize=Ht.maxWidth,Qe+=Ht.minWidth,dt=Math.max(dt,Ht.minHeight)):(er.minSize=Ht.minHeight,er.maxSize=Ht.maxHeight,dt+=Ht.minHeight,Qe=Math.max(Qe,Ht.minWidth))}let Jt=this._box=Os.boxSizing(this.parent.node);Qe+=Jt.horizontalSum,dt+=Jt.verticalSum;let jt=this.parent.node.style;jt.minWidth=`${Qe}px`,jt.minHeight=`${dt}px`,this._dirty=!0,this.parent.parent&&za.sendMessage(this.parent.parent,Ya.Msg.FitRequest),this._dirty&&za.sendMessage(this.parent,Ya.Msg.UpdateRequest)}_update(oe,Ie){this._dirty=!1;let Oe=0;for(let er=0,ur=this._items.length;er<ur;++er)Oe+=+!this._items[er].isHidden;if(Oe===0&&this.widgetOffset===0)return;oe<0&&(oe=this.parent.node.offsetWidth),Ie<0&&(Ie=this.parent.node.offsetHeight),this._box||(this._box=Os.boxSizing(this.parent.node));let Qe=this._box.paddingTop,dt=this._box.paddingLeft,Jt=oe-this._box.horizontalSum,jt=Ie-this._box.verticalSum,Xt=0,nr=0,Ht=this._orientation==="horizontal";if(Oe>0){let er;if(Ht?er=Math.max(0,Jt-this._fixed):er=Math.max(0,jt-this._fixed),this._hasNormedSizes){for(let ir of this._sizers)ir.sizeHint*=er;this._hasNormedSizes=!1}let ur=ih.calc(this._sizers,er);if(ur>0)switch(this._alignment){case"start":break;case"center":Xt=0,nr=ur/2;break;case"end":Xt=0,nr=ur;break;case"justify":Xt=ur/Oe,nr=0;break;default:throw"unreachable"}}for(let er=0,ur=this._items.length;er<ur;++er){let Ot=this._items[er].isHidden?0:this._sizers[er].size+Xt;this.updateItemPosition(er,Ht,Ht?dt+nr:dt,Ht?Qe:Qe+nr,jt,Jt,Ot);let ar=this.widgetOffset+(this._handles[er].classList.contains("lm-mod-hidden")?0:this._spacing);Ht?dt+=Ot+ar:Qe+=Ot+ar}}};(function(We){function oe(Oe){return gp.stretchProperty.get(Oe)}We.getStretch=oe;function Ie(Oe,Qe){gp.stretchProperty.set(Oe,Qe)}We.setStretch=Ie})(xp||(xp={}));var gp;(function(We){We.stretchProperty=new af({name:"stretch",create:()=>0,coerce:(Jt,jt)=>Math.max(0,Math.floor(jt)),changed:dt});function oe(Jt){let jt=new Wd;return jt.sizeHint=Math.floor(Jt),jt}We.createSizer=oe;function Ie(Jt){let jt=Jt.createHandle();return jt.style.position="absolute",jt.style.contain="style",jt}We.createHandle=Ie;function Oe(Jt){return Jt.reduce((jt,Xt)=>jt+Xt.size,0)/Jt.length||0}We.averageSize=Oe;function Qe(Jt){let jt=Jt.length;if(jt===0)return[];let Xt=Jt.reduce((nr,Ht)=>nr+Math.abs(Ht),0);return Xt===0?Jt.map(nr=>1/jt):Jt.map(nr=>nr/Xt)}We.normalize=Qe;function dt(Jt){Jt.parent&&Jt.parent.layout instanceof xp&&Jt.parent.fit()}})(gp||(gp={}));var XS=class extends xp{constructor(oe){super({...oe,orientation:oe.orientation||"vertical"}),this._titles=[],this.titleSpace=oe.titleSpace||22}get titleSpace(){return this.widgetOffset}set titleSpace(oe){oe=py.clampDimension(oe),this.widgetOffset!==oe&&(this.widgetOffset=oe,this.parent&&this.parent.fit())}get titles(){return this._titles}dispose(){this.isDisposed||(this._titles.length=0,super.dispose())}updateTitle(oe,Ie){let Oe=this._titles[oe],Qe=Oe.classList.contains("lm-mod-expanded"),dt=iw.createTitle(this.renderer,Ie.title,Qe);this._titles[oe]=dt,this.parent.node.replaceChild(dt,Oe)}insertWidget(oe,Ie){Ie.id||(Ie.id=`id-${yp.UUID.uuid4()}`),super.insertWidget(oe,Ie)}attachWidget(oe,Ie){let Oe=iw.createTitle(this.renderer,Ie.title,!Ie.isHidden);Sa.ArrayExt.insert(this._titles,oe,Oe),this.parent.node.appendChild(Oe),Ie.node.setAttribute("role","region"),Ie.node.setAttribute("aria-labelledby",Oe.id),super.attachWidget(oe,Ie)}moveWidget(oe,Ie,Oe){Sa.ArrayExt.move(this._titles,oe,Ie),super.moveWidget(oe,Ie,Oe)}detachWidget(oe,Ie){let Oe=Sa.ArrayExt.removeAt(this._titles,oe);this.parent.node.removeChild(Oe),super.detachWidget(oe,Ie)}updateItemPosition(oe,Ie,Oe,Qe,dt,Jt,jt){let Xt=this._titles[oe].style;Xt.top=`${Qe}px`,Xt.left=`${Oe}px`,Xt.height=`${this.widgetOffset}px`,Ie?Xt.width=`${dt}px`:Xt.width=`${Jt}px`,super.updateItemPosition(oe,Ie,Oe,Qe,dt,Jt,jt)}},iw;(function(We){function oe(Ie,Oe,Qe=!0){let dt=Ie.createSectionTitle(Oe);return dt.style.position="absolute",dt.style.contain="strict",dt.setAttribute("aria-label",`${Oe.label} Section`),dt.setAttribute("aria-expanded",Qe?"true":"false"),dt.setAttribute("aria-controls",Oe.owner.id),Qe&&dt.classList.add("lm-mod-expanded"),dt}We.createTitle=oe})(iw||(iw={}));var aw=class extends Ya{constructor(oe={}){super(),this.addClass("lm-Panel"),this.layout=ZS.createLayout(oe)}get widgets(){return this.layout.widgets}addWidget(oe){this.layout.addWidget(oe)}insertWidget(oe,Ie){this.layout.insertWidget(oe,Ie)}},ZS;(function(We){function oe(Ie){return Ie.layout||new r1}We.createLayout=oe})(ZS||(ZS={}));var pv=class extends aw{constructor(oe={}){super({layout:KS.createLayout(oe)}),this._handleMoved=new Ls(this),this._pressData=null,this.addClass("lm-SplitPanel")}dispose(){this._releaseMouse(),super.dispose()}get orientation(){return this.layout.orientation}set orientation(oe){this.layout.orientation=oe}get alignment(){return this.layout.alignment}set alignment(oe){this.layout.alignment=oe}get spacing(){return this.layout.spacing}set spacing(oe){this.layout.spacing=oe}get renderer(){return this.layout.renderer}get handleMoved(){return this._handleMoved}get handles(){return this.layout.handles}relativeSizes(){return this.layout.relativeSizes()}setRelativeSizes(oe,Ie=!0){this.layout.setRelativeSizes(oe,Ie)}handleEvent(oe){switch(oe.type){case"pointerdown":this._evtPointerDown(oe);break;case"pointermove":this._evtPointerMove(oe);break;case"pointerup":this._evtPointerUp(oe);break;case"keydown":this._evtKeyDown(oe);break;case"contextmenu":oe.preventDefault(),oe.stopPropagation();break}}onBeforeAttach(oe){this.node.addEventListener("pointerdown",this)}onAfterDetach(oe){this.node.removeEventListener("pointerdown",this),this._releaseMouse()}onChildAdded(oe){oe.child.addClass("lm-SplitPanel-child"),this._releaseMouse()}onChildRemoved(oe){oe.child.removeClass("lm-SplitPanel-child"),this._releaseMouse()}_evtKeyDown(oe){this._pressData&&(oe.preventDefault(),oe.stopPropagation()),oe.keyCode===27&&this._releaseMouse()}_evtPointerDown(oe){if(oe.button!==0)return;let Ie=this.layout,Oe=Sa.ArrayExt.findFirstIndex(Ie.handles,nr=>nr.contains(oe.target));if(Oe===-1)return;oe.preventDefault(),oe.stopPropagation(),document.addEventListener("pointerup",this,!0),document.addEventListener("pointermove",this,!0),document.addEventListener("keydown",this,!0),document.addEventListener("contextmenu",this,!0);let Qe,dt=Ie.handles[Oe],Jt=dt.getBoundingClientRect();Ie.orientation==="horizontal"?Qe=oe.clientX-Jt.left:Qe=oe.clientY-Jt.top;let jt=window.getComputedStyle(dt),Xt=nf.overrideCursor(jt.cursor);this._pressData={index:Oe,delta:Qe,override:Xt}}_evtPointerMove(oe){oe.preventDefault(),oe.stopPropagation();let Ie,Oe=this.layout,Qe=this.node.getBoundingClientRect();Oe.orientation==="horizontal"?Ie=oe.clientX-Qe.left-this._pressData.delta:Ie=oe.clientY-Qe.top-this._pressData.delta,Oe.moveHandle(this._pressData.index,Ie)}_evtPointerUp(oe){oe.button===0&&(oe.preventDefault(),oe.stopPropagation(),this._releaseMouse())}_releaseMouse(){this._pressData&&(this._pressData.override.dispose(),this._pressData=null,this._handleMoved.emit(),document.removeEventListener("keydown",this,!0),document.removeEventListener("pointerup",this,!0),document.removeEventListener("pointermove",this,!0),document.removeEventListener("contextmenu",this,!0))}};(function(We){class oe{createHandle(){let dt=document.createElement("div");return dt.className="lm-SplitPanel-handle",dt}}We.Renderer=oe,We.defaultRenderer=new oe;function Ie(Qe){return xp.getStretch(Qe)}We.getStretch=Ie;function Oe(Qe,dt){xp.setStretch(Qe,dt)}We.setStretch=Oe})(pv||(pv={}));var KS;(function(We){function oe(Ie){return Ie.layout||new xp({renderer:Ie.renderer||pv.defaultRenderer,orientation:Ie.orientation,alignment:Ie.alignment,spacing:Ie.spacing})}We.createLayout=oe})(KS||(KS={}));var vy=class extends pv{constructor(oe={}){super({...oe,layout:JS.createLayout(oe)}),this._widgetSizesCache=new WeakMap,this._expansionToggled=new Ls(this),this.addClass("lm-AccordionPanel")}get renderer(){return this.layout.renderer}get titleSpace(){return this.layout.titleSpace}set titleSpace(oe){this.layout.titleSpace=oe}get titles(){return this.layout.titles}get expansionToggled(){return this._expansionToggled}addWidget(oe){super.addWidget(oe),oe.title.changed.connect(this._onTitleChanged,this)}collapse(oe){let Ie=this.layout.widgets[oe];Ie&&!Ie.isHidden&&this._toggleExpansion(oe)}expand(oe){let Ie=this.layout.widgets[oe];Ie&&Ie.isHidden&&this._toggleExpansion(oe)}insertWidget(oe,Ie){super.insertWidget(oe,Ie),Ie.title.changed.connect(this._onTitleChanged,this)}handleEvent(oe){switch(super.handleEvent(oe),oe.type){case"click":this._evtClick(oe);break;case"keydown":this._eventKeyDown(oe);break}}onBeforeAttach(oe){this.node.addEventListener("click",this),this.node.addEventListener("keydown",this),super.onBeforeAttach(oe)}onAfterDetach(oe){super.onAfterDetach(oe),this.node.removeEventListener("click",this),this.node.removeEventListener("keydown",this)}_onTitleChanged(oe){let Ie=Sa.ArrayExt.findFirstIndex(this.widgets,Oe=>Oe.contains(oe.owner));Ie>=0&&(this.layout.updateTitle(Ie,oe.owner),this.update())}_computeWidgetSize(oe){let Ie=this.layout,Oe=Ie.widgets[oe];if(!Oe)return;let Qe=Oe.isHidden,dt=Ie.absoluteSizes(),Jt=(Qe?-1:1)*this.spacing,jt=dt.reduce((nr,Ht)=>nr+Ht),Xt=[...dt];if(Qe){let nr=this._widgetSizesCache.get(Oe);if(!nr)return;Xt[oe]+=nr;let Ht=Xt.map(er=>er-nr>0).lastIndexOf(!0);Ht===-1?Xt.forEach((er,ur)=>{ur!==oe&&(Xt[ur]-=dt[ur]/jt*(nr-Jt))}):Xt[Ht]-=nr-Jt}else{let nr=dt[oe];this._widgetSizesCache.set(Oe,nr),Xt[oe]=0;let Ht=Xt.map(er=>er>0).lastIndexOf(!0);if(Ht===-1)return;Xt[Ht]=dt[Ht]+nr+Jt}return Xt.map(nr=>nr/(jt+Jt))}_evtClick(oe){let Ie=oe.target;if(Ie){let Oe=Sa.ArrayExt.findFirstIndex(this.titles,Qe=>Qe.contains(Ie));Oe>=0&&(oe.preventDefault(),oe.stopPropagation(),this._toggleExpansion(Oe))}}_eventKeyDown(oe){if(oe.defaultPrevented)return;let Ie=oe.target,Oe=!1;if(Ie){let Qe=Sa.ArrayExt.findFirstIndex(this.titles,dt=>dt.contains(Ie));if(Qe>=0){let dt=oe.keyCode.toString();if(oe.key.match(/Space|Enter/)||dt.match(/13|32/))Ie.click(),Oe=!0;else if(this.orientation==="horizontal"?oe.key.match(/ArrowLeft|ArrowRight/)||dt.match(/37|39/):oe.key.match(/ArrowUp|ArrowDown/)||dt.match(/38|40/)){let Jt=oe.key.match(/ArrowLeft|ArrowUp/)||dt.match(/37|38/)?-1:1,jt=this.titles.length,Xt=(Qe+jt+Jt)%jt;this.titles[Xt].focus(),Oe=!0}else oe.key==="End"||dt==="35"?(this.titles[this.titles.length-1].focus(),Oe=!0):(oe.key==="Home"||dt==="36")&&(this.titles[0].focus(),Oe=!0)}Oe&&oe.preventDefault()}}_toggleExpansion(oe){let Ie=this.titles[oe],Oe=this.layout.widgets[oe],Qe=this._computeWidgetSize(oe);Qe&&this.setRelativeSizes(Qe,!1),Oe.isHidden?(Ie.classList.add("lm-mod-expanded"),Ie.setAttribute("aria-expanded","true"),Oe.show()):(Ie.classList.remove("lm-mod-expanded"),Ie.setAttribute("aria-expanded","false"),Oe.hide()),this._expansionToggled.emit(oe)}};(function(We){class oe extends pv.Renderer{constructor(){super(),this.titleClassName="lm-AccordionPanel-title",this._titleID=0,this._titleKeys=new WeakMap,this._uuid=++oe._nInstance}createCollapseIcon(Oe){return document.createElement("span")}createSectionTitle(Oe){let Qe=document.createElement("h3");Qe.setAttribute("tabindex","0"),Qe.id=this.createTitleKey(Oe),Qe.className=this.titleClassName;for(let jt in Oe.dataset)Qe.dataset[jt]=Oe.dataset[jt];let dt=Qe.appendChild(this.createCollapseIcon(Oe));dt.className="lm-AccordionPanel-titleCollapser";let Jt=Qe.appendChild(document.createElement("span"));return Jt.className="lm-AccordionPanel-titleLabel",Jt.textContent=Oe.label,Jt.title=Oe.caption||Oe.label,Qe}createTitleKey(Oe){let Qe=this._titleKeys.get(Oe);return Qe===void 0&&(Qe=`title-key-${this._uuid}-${this._titleID++}`,this._titleKeys.set(Oe,Qe)),Qe}}oe._nInstance=0,We.Renderer=oe,We.defaultRenderer=new oe})(vy||(vy={}));var JS;(function(We){function oe(Ie){return Ie.layout||new XS({renderer:Ie.renderer||vy.defaultRenderer,orientation:Ie.orientation,alignment:Ie.alignment,spacing:Ie.spacing,titleSpace:Ie.titleSpace})}We.createLayout=oe})(JS||(JS={}));var $d=class We extends r1{constructor(oe={}){super(),this._fixed=0,this._spacing=4,this._dirty=!1,this._sizers=[],this._items=[],this._box=null,this._alignment="start",this._direction="top-to-bottom",oe.direction!==void 0&&(this._direction=oe.direction),oe.alignment!==void 0&&(this._alignment=oe.alignment),oe.spacing!==void 0&&(this._spacing=py.clampDimension(oe.spacing))}dispose(){for(let oe of this._items)oe.dispose();this._box=null,this._items.length=0,this._sizers.length=0,super.dispose()}get direction(){return this._direction}set direction(oe){this._direction!==oe&&(this._direction=oe,this.parent&&(this.parent.dataset.direction=oe,this.parent.fit()))}get alignment(){return this._alignment}set alignment(oe){this._alignment!==oe&&(this._alignment=oe,this.parent&&(this.parent.dataset.alignment=oe,this.parent.update()))}get spacing(){return this._spacing}set spacing(oe){oe=py.clampDimension(oe),this._spacing!==oe&&(this._spacing=oe,this.parent&&this.parent.fit())}init(){this.parent.dataset.direction=this.direction,this.parent.dataset.alignment=this.alignment,super.init()}attachWidget(oe,Ie){Sa.ArrayExt.insert(this._items,oe,new dv(Ie)),Sa.ArrayExt.insert(this._sizers,oe,new Wd),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeAttach),this.parent.node.appendChild(Ie.node),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterAttach),this.parent.fit()}moveWidget(oe,Ie,Oe){Sa.ArrayExt.move(this._items,oe,Ie),Sa.ArrayExt.move(this._sizers,oe,Ie),this.parent.update()}detachWidget(oe,Ie){let Oe=Sa.ArrayExt.removeAt(this._items,oe);Sa.ArrayExt.removeAt(this._sizers,oe),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeDetach),this.parent.node.removeChild(Ie.node),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterDetach),Oe.dispose(),this.parent.fit()}onBeforeShow(oe){super.onBeforeShow(oe),this.parent.update()}onBeforeAttach(oe){super.onBeforeAttach(oe),this.parent.fit()}onChildShown(oe){this.parent.fit()}onChildHidden(oe){this.parent.fit()}onResize(oe){this.parent.isVisible&&this._update(oe.width,oe.height)}onUpdateRequest(oe){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(oe){this.parent.isAttached&&this._fit()}_fit(){let oe=0;for(let jt=0,Xt=this._items.length;jt<Xt;++jt)oe+=+!this._items[jt].isHidden;this._fixed=this._spacing*Math.max(0,oe-1);let Ie=fv.isHorizontal(this._direction),Oe=Ie?this._fixed:0,Qe=Ie?0:this._fixed;for(let jt=0,Xt=this._items.length;jt<Xt;++jt){let nr=this._items[jt],Ht=this._sizers[jt];if(nr.isHidden){Ht.minSize=0,Ht.maxSize=0;continue}nr.fit(),Ht.sizeHint=We.getSizeBasis(nr.widget),Ht.stretch=We.getStretch(nr.widget),Ie?(Ht.minSize=nr.minWidth,Ht.maxSize=nr.maxWidth,Oe+=nr.minWidth,Qe=Math.max(Qe,nr.minHeight)):(Ht.minSize=nr.minHeight,Ht.maxSize=nr.maxHeight,Qe+=nr.minHeight,Oe=Math.max(Oe,nr.minWidth))}let dt=this._box=Os.boxSizing(this.parent.node);Oe+=dt.horizontalSum,Qe+=dt.verticalSum;let Jt=this.parent.node.style;Jt.minWidth=`${Oe}px`,Jt.minHeight=`${Qe}px`,this._dirty=!0,this.parent.parent&&za.sendMessage(this.parent.parent,Ya.Msg.FitRequest),this._dirty&&za.sendMessage(this.parent,Ya.Msg.UpdateRequest)}_update(oe,Ie){this._dirty=!1;let Oe=0;for(let er=0,ur=this._items.length;er<ur;++er)Oe+=+!this._items[er].isHidden;if(Oe===0)return;oe<0&&(oe=this.parent.node.offsetWidth),Ie<0&&(Ie=this.parent.node.offsetHeight),this._box||(this._box=Os.boxSizing(this.parent.node));let Qe=this._box.paddingTop,dt=this._box.paddingLeft,Jt=oe-this._box.horizontalSum,jt=Ie-this._box.verticalSum,Xt;switch(this._direction){case"left-to-right":Xt=ih.calc(this._sizers,Math.max(0,Jt-this._fixed));break;case"top-to-bottom":Xt=ih.calc(this._sizers,Math.max(0,jt-this._fixed));break;case"right-to-left":Xt=ih.calc(this._sizers,Math.max(0,Jt-this._fixed)),dt+=Jt;break;case"bottom-to-top":Xt=ih.calc(this._sizers,Math.max(0,jt-this._fixed)),Qe+=jt;break;default:throw"unreachable"}let nr=0,Ht=0;if(Xt>0)switch(this._alignment){case"start":break;case"center":nr=0,Ht=Xt/2;break;case"end":nr=0,Ht=Xt;break;case"justify":nr=Xt/Oe,Ht=0;break;default:throw"unreachable"}for(let er=0,ur=this._items.length;er<ur;++er){let ir=this._items[er];if(ir.isHidden)continue;let Ot=this._sizers[er].size;switch(this._direction){case"left-to-right":ir.update(dt+Ht,Qe,Ot+nr,jt),dt+=Ot+nr+this._spacing;break;case"top-to-bottom":ir.update(dt,Qe+Ht,Jt,Ot+nr),Qe+=Ot+nr+this._spacing;break;case"right-to-left":ir.update(dt-Ht-Ot-nr,Qe,Ot+nr,jt),dt-=Ot+nr+this._spacing;break;case"bottom-to-top":ir.update(dt,Qe-Ht-Ot-nr,Jt,Ot+nr),Qe-=Ot+nr+this._spacing;break;default:throw"unreachable"}}}};(function(We){function oe(dt){return fv.stretchProperty.get(dt)}We.getStretch=oe;function Ie(dt,Jt){fv.stretchProperty.set(dt,Jt)}We.setStretch=Ie;function Oe(dt){return fv.sizeBasisProperty.get(dt)}We.getSizeBasis=Oe;function Qe(dt,Jt){fv.sizeBasisProperty.set(dt,Jt)}We.setSizeBasis=Qe})($d||($d={}));var fv;(function(We){We.stretchProperty=new af({name:"stretch",create:()=>0,coerce:(Qe,dt)=>Math.max(0,Math.floor(dt)),changed:Oe}),We.sizeBasisProperty=new af({name:"sizeBasis",create:()=>0,coerce:(Qe,dt)=>Math.max(0,Math.floor(dt)),changed:Oe});function oe(Qe){return Qe==="left-to-right"||Qe==="right-to-left"}We.isHorizontal=oe;function Ie(Qe){return Math.max(0,Math.floor(Qe))}We.clampSpacing=Ie;function Oe(Qe){Qe.parent&&Qe.parent.layout instanceof $d&&Qe.parent.fit()}})(fv||(fv={}));var nw=class extends aw{constructor(oe={}){super({layout:QS.createLayout(oe)}),this.addClass("lm-BoxPanel")}get direction(){return this.layout.direction}set direction(oe){this.layout.direction=oe}get alignment(){return this.layout.alignment}set alignment(oe){this.layout.alignment=oe}get spacing(){return this.layout.spacing}set spacing(oe){this.layout.spacing=oe}onChildAdded(oe){oe.child.addClass("lm-BoxPanel-child")}onChildRemoved(oe){oe.child.removeClass("lm-BoxPanel-child")}};(function(We){function oe(dt){return $d.getStretch(dt)}We.getStretch=oe;function Ie(dt,Jt){$d.setStretch(dt,Jt)}We.setStretch=Ie;function Oe(dt){return $d.getSizeBasis(dt)}We.getSizeBasis=Oe;function Qe(dt,Jt){$d.setSizeBasis(dt,Jt)}We.setSizeBasis=Qe})(nw||(nw={}));var QS;(function(We){function oe(Ie){return Ie.layout||new $d(Ie)}We.createLayout=oe})(QS||(QS={}));var ow=class We extends Ya{constructor(oe){super({node:mp.createNode()}),this._activeIndex=-1,this._items=[],this._results=null,this.addClass("lm-CommandPalette"),this.setFlag(Ya.Flag.DisallowLayout),this.commands=oe.commands,this.renderer=oe.renderer||We.defaultRenderer,this.commands.commandChanged.connect(this._onGenericChange,this),this.commands.keyBindingChanged.connect(this._onGenericChange,this)}dispose(){this._items.length=0,this._results=null,super.dispose()}get searchNode(){return this.node.getElementsByClassName("lm-CommandPalette-search")[0]}get inputNode(){return this.node.getElementsByClassName("lm-CommandPalette-input")[0]}get contentNode(){return this.node.getElementsByClassName("lm-CommandPalette-content")[0]}get items(){return this._items}addItem(oe){let Ie=mp.createItem(this.commands,oe);return this._items.push(Ie),this.refresh(),Ie}addItems(oe){let Ie=oe.map(Oe=>mp.createItem(this.commands,Oe));return Ie.forEach(Oe=>this._items.push(Oe)),this.refresh(),Ie}removeItem(oe){this.removeItemAt(this._items.indexOf(oe))}removeItemAt(oe){Sa.ArrayExt.removeAt(this._items,oe)&&this.refresh()}clearItems(){this._items.length!==0&&(this._items.length=0,this.refresh())}refresh(){if(this._results=null,this.inputNode.value!==""){let oe=this.node.getElementsByClassName("lm-close-icon")[0];oe.style.display="inherit"}else{let oe=this.node.getElementsByClassName("lm-close-icon")[0];oe.style.display="none"}this.update()}handleEvent(oe){switch(oe.type){case"click":this._evtClick(oe);break;case"keydown":this._evtKeyDown(oe);break;case"input":this.refresh();break;case"focus":case"blur":this._toggleFocused();break}}onBeforeAttach(oe){this.node.addEventListener("click",this),this.node.addEventListener("keydown",this),this.node.addEventListener("input",this),this.node.addEventListener("focus",this,!0),this.node.addEventListener("blur",this,!0)}onAfterDetach(oe){this.node.removeEventListener("click",this),this.node.removeEventListener("keydown",this),this.node.removeEventListener("input",this),this.node.removeEventListener("focus",this,!0),this.node.removeEventListener("blur",this,!0)}onAfterShow(oe){this.update(),super.onAfterShow(oe)}onActivateRequest(oe){if(this.isAttached){let Ie=this.inputNode;Ie.focus(),Ie.select()}}onUpdateRequest(oe){if(!this.isVisible){Hd.render(null,this.contentNode);return}let Ie=this.inputNode.value,Oe=this.contentNode,Qe=this._results;if(Qe||(Qe=this._results=mp.search(this._items,Ie),this._activeIndex=Ie?Sa.ArrayExt.findFirstIndex(Qe,mp.canActivate):-1),!Ie&&Qe.length===0){Hd.render(null,Oe);return}if(Ie&&Qe.length===0){let Xt=this.renderer.renderEmptyMessage({query:Ie});Hd.render(Xt,Oe);return}let dt=this.renderer,Jt=this._activeIndex,jt=new Array(Qe.length);for(let Xt=0,nr=Qe.length;Xt<nr;++Xt){let Ht=Qe[Xt];if(Ht.type==="header"){let er=Ht.indices,ur=Ht.category;jt[Xt]=dt.renderHeader({category:ur,indices:er})}else{let er=Ht.item,ur=Ht.indices,ir=Xt===Jt;jt[Xt]=dt.renderItem({item:er,indices:ur,active:ir})}}if(Hd.render(jt,Oe),Jt<0||Jt>=Qe.length)Oe.scrollTop=0;else{let Xt=Oe.children[Jt];Os.scrollIntoViewIfNeeded(Oe,Xt)}}_evtClick(oe){if(oe.button!==0)return;if(oe.target.classList.contains("lm-close-icon")){this.inputNode.value="",this.refresh();return}let Ie=Sa.ArrayExt.findFirstIndex(this.contentNode.children,Oe=>Oe.contains(oe.target));Ie!==-1&&(oe.preventDefault(),oe.stopPropagation(),this._execute(Ie))}_evtKeyDown(oe){if(!(oe.altKey||oe.ctrlKey||oe.metaKey||oe.shiftKey))switch(oe.keyCode){case 13:oe.preventDefault(),oe.stopPropagation(),this._execute(this._activeIndex);break;case 38:oe.preventDefault(),oe.stopPropagation(),this._activatePreviousItem();break;case 40:oe.preventDefault(),oe.stopPropagation(),this._activateNextItem();break}}_activateNextItem(){if(!this._results||this._results.length===0)return;let oe=this._activeIndex,Ie=this._results.length,Oe=oe<Ie-1?oe+1:0,Qe=Oe===0?Ie-1:Oe-1;this._activeIndex=Sa.ArrayExt.findFirstIndex(this._results,mp.canActivate,Oe,Qe),this.update()}_activatePreviousItem(){if(!this._results||this._results.length===0)return;let oe=this._activeIndex,Ie=this._results.length,Oe=oe<=0?Ie-1:oe-1,Qe=Oe===Ie-1?0:Oe+1;this._activeIndex=Sa.ArrayExt.findLastIndex(this._results,mp.canActivate,Oe,Qe),this.update()}_execute(oe){if(!this._results)return;let Ie=this._results[oe];if(Ie){if(Ie.type==="header"){let Oe=this.inputNode;Oe.value=`${Ie.category.toLowerCase()} `,Oe.focus(),this.refresh();return}Ie.item.isEnabled&&(this.commands.execute(Ie.item.command,Ie.item.args),this.inputNode.value="",this.refresh())}}_toggleFocused(){let oe=document.activeElement===this.inputNode;this.toggleClass("lm-mod-focused",oe)}_onGenericChange(){this.refresh()}};(function(We){class oe{renderHeader(Oe){let Qe=this.formatHeader(Oe);return Fs.li({className:"lm-CommandPalette-header"},Qe)}renderItem(Oe){let Qe=this.createItemClass(Oe),dt=this.createItemDataset(Oe);return Oe.item.isToggleable?Fs.li({className:Qe,dataset:dt,role:"menuitemcheckbox","aria-checked":`${Oe.item.isToggled}`},this.renderItemIcon(Oe),this.renderItemContent(Oe),this.renderItemShortcut(Oe)):Fs.li({className:Qe,dataset:dt,role:"menuitem"},this.renderItemIcon(Oe),this.renderItemContent(Oe),this.renderItemShortcut(Oe))}renderEmptyMessage(Oe){let Qe=this.formatEmptyMessage(Oe);return Fs.li({className:"lm-CommandPalette-emptyMessage"},Qe)}renderItemIcon(Oe){let Qe=this.createIconClass(Oe);return Fs.div({className:Qe},Oe.item.icon,Oe.item.iconLabel)}renderItemContent(Oe){return Fs.div({className:"lm-CommandPalette-itemContent"},this.renderItemLabel(Oe),this.renderItemCaption(Oe))}renderItemLabel(Oe){let Qe=this.formatItemLabel(Oe);return Fs.div({className:"lm-CommandPalette-itemLabel"},Qe)}renderItemCaption(Oe){let Qe=this.formatItemCaption(Oe);return Fs.div({className:"lm-CommandPalette-itemCaption"},Qe)}renderItemShortcut(Oe){let Qe=this.formatItemShortcut(Oe);return Fs.div({className:"lm-CommandPalette-itemShortcut"},Qe)}createItemClass(Oe){let Qe="lm-CommandPalette-item";Oe.item.isEnabled||(Qe+=" lm-mod-disabled"),Oe.item.isToggled&&(Qe+=" lm-mod-toggled"),Oe.active&&(Qe+=" lm-mod-active");let dt=Oe.item.className;return dt&&(Qe+=` ${dt}`),Qe}createItemDataset(Oe){return{...Oe.item.dataset,command:Oe.item.command}}createIconClass(Oe){let Qe="lm-CommandPalette-itemIcon",dt=Oe.item.iconClass;return dt?`${Qe} ${dt}`:Qe}formatHeader(Oe){return!Oe.indices||Oe.indices.length===0?Oe.category:Sa.StringExt.highlight(Oe.category,Oe.indices,Fs.mark)}formatEmptyMessage(Oe){return`No commands found that match '${Oe.query}'`}formatItemShortcut(Oe){let Qe=Oe.item.keyBinding;return Qe?vp.formatKeystroke(Qe.keys):null}formatItemLabel(Oe){return!Oe.indices||Oe.indices.length===0?Oe.item.label:Sa.StringExt.highlight(Oe.item.label,Oe.indices,Fs.mark)}formatItemCaption(Oe){return Oe.item.caption}}We.Renderer=oe,We.defaultRenderer=new oe})(ow||(ow={}));var mp;(function(We){function oe(){let ur=document.createElement("div"),ir=document.createElement("div"),Ot=document.createElement("div"),ar=document.createElement("input"),Lr=document.createElement("ul"),Ir=document.createElement("button");return ir.className="lm-CommandPalette-search",Ot.className="lm-CommandPalette-wrapper",ar.className="lm-CommandPalette-input",Ir.className="lm-close-icon",Lr.className="lm-CommandPalette-content",Lr.setAttribute("role","menu"),ar.spellcheck=!1,Ot.appendChild(ar),Ot.appendChild(Ir),ir.appendChild(Ot),ur.appendChild(ir),ur.appendChild(Lr),ur}We.createNode=oe;function Ie(ur,ir){return new er(ur,ir)}We.createItem=Ie;function Oe(ur,ir){let Ot=jt(ur,ir);return Ot.sort(nr),Ht(Ot)}We.search=Oe;function Qe(ur){return ur.type==="item"&&ur.item.isEnabled}We.canActivate=Qe;function dt(ur){return ur.trim().replace(/\s+/g," ")}function Jt(ur){return ur.replace(/\s+/g,"").toLowerCase()}function jt(ur,ir){ir=Jt(ir);let Ot=[];for(let ar=0,Lr=ur.length;ar<Lr;++ar){let Ir=ur[ar];if(!Ir.isVisible)continue;if(!ir){Ot.push({matchType:3,categoryIndices:null,labelIndices:null,score:0,item:Ir});continue}let de=Xt(Ir,ir);de&&(Ir.isEnabled||(de.score+=1e3),Ot.push(de))}return Ot}function Xt(ur,ir){let Ot=ur.category.toLowerCase(),ar=ur.label.toLowerCase(),Lr=`${Ot} ${ar}`,Ir=1/0,de=null,Mr=/\b\w/g;for(;;){let Ki=Mr.exec(Lr);if(!Ki)break;let Ia=Sa.StringExt.matchSumOfDeltas(Lr,ir,Ki.index);if(!Ia)break;Ia.score<=Ir&&(Ir=Ia.score,de=Ia.indices)}if(!de||Ir===1/0)return null;let qr=Ot.length+1,Vr=Sa.ArrayExt.lowerBound(de,qr,(Ki,Ia)=>Ki-Ia),ti=de.slice(0,Vr),Xr=de.slice(Vr);for(let Ki=0,Ia=Xr.length;Ki<Ia;++Ki)Xr[Ki]-=qr;return ti.length===0?{matchType:0,categoryIndices:null,labelIndices:Xr,score:Ir,item:ur}:Xr.length===0?{matchType:1,categoryIndices:ti,labelIndices:null,score:Ir,item:ur}:{matchType:2,categoryIndices:ti,labelIndices:Xr,score:Ir,item:ur}}function nr(ur,ir){let Ot=ur.matchType-ir.matchType;if(Ot!==0)return Ot;let ar=ur.score-ir.score;if(ar!==0)return ar;let Lr=0,Ir=0;switch(ur.matchType){case 0:Lr=ur.labelIndices[0],Ir=ir.labelIndices[0];break;case 1:case 2:Lr=ur.categoryIndices[0],Ir=ir.categoryIndices[0];break}if(Lr!==Ir)return Lr-Ir;let de=ur.item.category.localeCompare(ir.item.category);if(de!==0)return de;let Mr=ur.item.rank,qr=ir.item.rank;return Mr!==qr?Mr<qr?-1:1:ur.item.label.localeCompare(ir.item.label)}function Ht(ur){let ir=[];for(let Ot=0,ar=ur.length;Ot<ar;++Ot){let{item:Lr,categoryIndices:Ir,labelIndices:de}=ur[Ot],Mr=Lr.category;(Ot===0||Mr!==ur[Ot-1].item.category)&&ir.push({type:"header",category:Mr,indices:Ir}),ir.push({type:"item",item:Lr,indices:de})}return ir}class er{constructor(ir,Ot){this._commands=ir,this.category=dt(Ot.category),this.command=Ot.command,this.args=Ot.args||yp.JSONExt.emptyObject,this.rank=Ot.rank!==void 0?Ot.rank:1/0}get label(){return this._commands.label(this.command,this.args)}get icon(){return this._commands.icon(this.command,this.args)}get iconClass(){return this._commands.iconClass(this.command,this.args)}get iconLabel(){return this._commands.iconLabel(this.command,this.args)}get caption(){return this._commands.caption(this.command,this.args)}get className(){return this._commands.className(this.command,this.args)}get dataset(){return this._commands.dataset(this.command,this.args)}get isEnabled(){return this._commands.isEnabled(this.command,this.args)}get isToggled(){return this._commands.isToggled(this.command,this.args)}get isToggleable(){return this._commands.isToggleable(this.command,this.args)}get isVisible(){return this._commands.isVisible(this.command,this.args)}get keyBinding(){let{command:ir,args:Ot}=this;return Sa.ArrayExt.findLastValue(this._commands.keyBindings,ar=>ar.command===ir&&yp.JSONExt.deepEqual(ar.args,Ot))||null}}})(mp||(mp={}));var hv=class We extends Ya{constructor(oe){super({node:of.createNode()}),this._childIndex=-1,this._activeIndex=-1,this._openTimerID=0,this._closeTimerID=0,this._items=[],this._childMenu=null,this._parentMenu=null,this._aboutToClose=new Ls(this),this._menuRequested=new Ls(this),this.addClass("lm-Menu"),this.setFlag(Ya.Flag.DisallowLayout),this.commands=oe.commands,this.renderer=oe.renderer||We.defaultRenderer}dispose(){this.close(),this._items.length=0,super.dispose()}get aboutToClose(){return this._aboutToClose}get menuRequested(){return this._menuRequested}get parentMenu(){return this._parentMenu}get childMenu(){return this._childMenu}get rootMenu(){let oe=this;for(;oe._parentMenu;)oe=oe._parentMenu;return oe}get leafMenu(){let oe=this;for(;oe._childMenu;)oe=oe._childMenu;return oe}get contentNode(){return this.node.getElementsByClassName("lm-Menu-content")[0]}get activeItem(){return this._items[this._activeIndex]||null}set activeItem(oe){this.activeIndex=oe?this._items.indexOf(oe):-1}get activeIndex(){return this._activeIndex}set activeIndex(oe){(oe<0||oe>=this._items.length)&&(oe=-1),oe!==-1&&!of.canActivate(this._items[oe])&&(oe=-1),this._activeIndex!==oe&&(this._activeIndex=oe,this._activeIndex>=0&&this.contentNode.childNodes[this._activeIndex]&&this.contentNode.childNodes[this._activeIndex].focus(),this.update())}get items(){return this._items}activateNextItem(){let oe=this._items.length,Ie=this._activeIndex,Oe=Ie<oe-1?Ie+1:0,Qe=Oe===0?oe-1:Oe-1;this.activeIndex=Sa.ArrayExt.findFirstIndex(this._items,of.canActivate,Oe,Qe)}activatePreviousItem(){let oe=this._items.length,Ie=this._activeIndex,Oe=Ie<=0?oe-1:Ie-1,Qe=Oe===oe-1?0:Oe+1;this.activeIndex=Sa.ArrayExt.findLastIndex(this._items,of.canActivate,Oe,Qe)}triggerActiveItem(){if(!this.isAttached)return;let oe=this.activeItem;if(!oe)return;if(this._cancelOpenTimer(),this._cancelCloseTimer(),oe.type==="submenu"){this._openChildMenu(!0);return}this.rootMenu.close();let{command:Ie,args:Oe}=oe;this.commands.isEnabled(Ie,Oe)?this.commands.execute(Ie,Oe):console.log(`Command '${Ie}' is disabled.`)}addItem(oe){return this.insertItem(this._items.length,oe)}insertItem(oe,Ie){this.isAttached&&this.close(),this.activeIndex=-1;let Oe=Math.max(0,Math.min(oe,this._items.length)),Qe=of.createItem(this,Ie);return Sa.ArrayExt.insert(this._items,Oe,Qe),this.update(),Qe}removeItem(oe){let Ie=this._items.indexOf(oe);Ie!==-1&&this.removeItemAt(Ie)}removeItemAt(oe){this.isAttached&&this.close(),this.activeIndex=-1,Sa.ArrayExt.removeAt(this._items,oe)&&this.update()}clearItems(){this.isAttached&&this.close(),this.activeIndex=-1,this._items.length!==0&&(this._items.length=0,this.update())}open(oe,Ie,Oe={}){var Qe,dt,Jt;if(this.isAttached)return;let jt=Oe.forceX||!1,Xt=Oe.forceY||!1,nr=(Qe=Oe.host)!==null&&Qe!==void 0?Qe:null,Ht=(dt=Oe.ref)!==null&&dt!==void 0?dt:null,er=(Jt=Oe.horizontalAlignment)!==null&&Jt!==void 0?Jt:document.documentElement.dir==="rtl"?"right":"left";of.openRootMenu(this,oe,Ie,jt,Xt,er,nr,Ht),this.activate()}handleEvent(oe){switch(oe.type){case"keydown":this._evtKeyDown(oe);break;case"pointerup":this._evtPointerUp(oe);break;case"pointermove":this._evtPointerMove(oe);break;case"pointerenter":this._evtPointerEnter(oe);break;case"pointerleave":this._evtPointerLeave(oe);break;case"pointerdown":this._evtPointerDown(oe);break;case"contextmenu":oe.preventDefault(),oe.stopPropagation();break}}onBeforeAttach(oe){this.node.addEventListener("keydown",this),this.node.addEventListener("pointerup",this),this.node.addEventListener("pointermove",this),this.node.addEventListener("pointerenter",this),this.node.addEventListener("pointerleave",this),this.node.addEventListener("contextmenu",this),document.addEventListener("pointerdown",this,!0)}onAfterDetach(oe){this.node.removeEventListener("keydown",this),this.node.removeEventListener("pointerup",this),this.node.removeEventListener("pointermove",this),this.node.removeEventListener("pointerenter",this),this.node.removeEventListener("pointerleave",this),this.node.removeEventListener("contextmenu",this),document.removeEventListener("pointerdown",this,!0)}onActivateRequest(oe){this.isAttached&&this.node.focus()}onUpdateRequest(oe){let Ie=this._items,Oe=this.renderer,Qe=this._activeIndex,dt=of.computeCollapsed(Ie),Jt=new Array(Ie.length);for(let jt=0,Xt=Ie.length;jt<Xt;++jt){let nr=Ie[jt],Ht=jt===Qe,er=dt[jt];Jt[jt]=Oe.renderItem({item:nr,active:Ht,collapsed:er,onfocus:()=>{this.activeIndex=jt}})}Hd.render(Jt,this.contentNode)}onCloseRequest(oe){this._cancelOpenTimer(),this._cancelCloseTimer(),this.activeIndex=-1;let Ie=this._childMenu;Ie&&(this._childIndex=-1,this._childMenu=null,Ie._parentMenu=null,Ie.close());let Oe=this._parentMenu;Oe&&(this._parentMenu=null,Oe._childIndex=-1,Oe._childMenu=null,Oe.activate()),this.isAttached&&this._aboutToClose.emit(void 0),super.onCloseRequest(oe)}_evtKeyDown(oe){oe.preventDefault(),oe.stopPropagation();let Ie=oe.keyCode;if(Ie===13){this.triggerActiveItem();return}if(Ie===27){this.close();return}if(Ie===37){this._parentMenu?this.close():this._menuRequested.emit("previous");return}if(Ie===38){this.activatePreviousItem();return}if(Ie===39){let Jt=this.activeItem;Jt&&Jt.type==="submenu"?this.triggerActiveItem():this.rootMenu._menuRequested.emit("next");return}if(Ie===40){this.activateNextItem();return}let Oe=Jm().keyForKeydownEvent(oe);if(!Oe)return;let Qe=this._activeIndex+1,dt=of.findMnemonic(this._items,Oe,Qe);dt.index!==-1&&!dt.multiple?(this.activeIndex=dt.index,this.triggerActiveItem()):dt.index!==-1?this.activeIndex=dt.index:dt.auto!==-1&&(this.activeIndex=dt.auto)}_evtPointerUp(oe){oe.button===0&&(oe.preventDefault(),oe.stopPropagation(),this.triggerActiveItem())}_evtPointerMove(oe){let Ie=Sa.ArrayExt.findFirstIndex(this.contentNode.children,Qe=>Os.hitTest(Qe,oe.clientX,oe.clientY));if(Ie===this._activeIndex)return;if(this.activeIndex=Ie,Ie=this.activeIndex,Ie===this._childIndex){this._cancelOpenTimer(),this._cancelCloseTimer();return}this._childIndex!==-1&&this._startCloseTimer(),this._cancelOpenTimer();let Oe=this.activeItem;!Oe||Oe.type!=="submenu"||!Oe.submenu||this._startOpenTimer()}_evtPointerEnter(oe){for(let Ie=this._parentMenu;Ie;Ie=Ie._parentMenu)Ie._cancelOpenTimer(),Ie._cancelCloseTimer(),Ie.activeIndex=Ie._childIndex}_evtPointerLeave(oe){if(this._cancelOpenTimer(),!this._childMenu){this.activeIndex=-1;return}let{clientX:Ie,clientY:Oe}=oe;if(Os.hitTest(this._childMenu.node,Ie,Oe)){this._cancelCloseTimer();return}this.activeIndex=-1,this._startCloseTimer()}_evtPointerDown(oe){this._parentMenu||(of.hitTestMenus(this,oe.clientX,oe.clientY)?(oe.preventDefault(),oe.stopPropagation()):this.close())}_openChildMenu(oe=!1){let Ie=this.activeItem;if(!Ie||Ie.type!=="submenu"||!Ie.submenu){this._closeChildMenu();return}let Oe=Ie.submenu;if(Oe===this._childMenu)return;We.saveWindowData(),this._closeChildMenu(),this._childMenu=Oe,this._childIndex=this._activeIndex,Oe._parentMenu=this,za.sendMessage(this,Ya.Msg.UpdateRequest);let Qe=this.contentNode.children[this._activeIndex];of.openSubmenu(Oe,Qe),oe&&(Oe.activeIndex=-1,Oe.activateNextItem()),Oe.activate()}_closeChildMenu(){this._childMenu&&this._childMenu.close()}_startOpenTimer(){this._openTimerID===0&&(this._openTimerID=window.setTimeout(()=>{this._openTimerID=0,this._openChildMenu()},of.TIMER_DELAY))}_startCloseTimer(){this._closeTimerID===0&&(this._closeTimerID=window.setTimeout(()=>{this._closeTimerID=0,this._closeChildMenu()},of.TIMER_DELAY))}_cancelOpenTimer(){this._openTimerID!==0&&(clearTimeout(this._openTimerID),this._openTimerID=0)}_cancelCloseTimer(){this._closeTimerID!==0&&(clearTimeout(this._closeTimerID),this._closeTimerID=0)}static saveWindowData(){of.saveWindowData()}};(function(We){class oe{renderItem(Oe){let Qe=this.createItemClass(Oe),dt=this.createItemDataset(Oe),Jt=this.createItemARIA(Oe);return Fs.li({className:Qe,dataset:dt,tabindex:"0",onfocus:Oe.onfocus,...Jt},this.renderIcon(Oe),this.renderLabel(Oe),this.renderShortcut(Oe),this.renderSubmenu(Oe))}renderIcon(Oe){let Qe=this.createIconClass(Oe);return Fs.div({className:Qe},Oe.item.icon,Oe.item.iconLabel)}renderLabel(Oe){let Qe=this.formatLabel(Oe);return Fs.div({className:"lm-Menu-itemLabel"},Qe)}renderShortcut(Oe){let Qe=this.formatShortcut(Oe);return Fs.div({className:"lm-Menu-itemShortcut"},Qe)}renderSubmenu(Oe){return Fs.div({className:"lm-Menu-itemSubmenuIcon"})}createItemClass(Oe){let Qe="lm-Menu-item";Oe.item.isEnabled||(Qe+=" lm-mod-disabled"),Oe.item.isToggled&&(Qe+=" lm-mod-toggled"),Oe.item.isVisible||(Qe+=" lm-mod-hidden"),Oe.active&&(Qe+=" lm-mod-active"),Oe.collapsed&&(Qe+=" lm-mod-collapsed");let dt=Oe.item.className;return dt&&(Qe+=` ${dt}`),Qe}createItemDataset(Oe){let Qe,{type:dt,command:Jt,dataset:jt}=Oe.item;return dt==="command"?Qe={...jt,type:dt,command:Jt}:Qe={...jt,type:dt},Qe}createIconClass(Oe){let Qe="lm-Menu-itemIcon",dt=Oe.item.iconClass;return dt?`${Qe} ${dt}`:Qe}createItemARIA(Oe){let Qe={};switch(Oe.item.type){case"separator":Qe.role="presentation";break;case"submenu":Qe["aria-haspopup"]="true",Oe.item.isEnabled||(Qe["aria-disabled"]="true");break;default:Oe.item.isEnabled||(Qe["aria-disabled"]="true"),Oe.item.isToggled?(Qe.role="menuitemcheckbox",Qe["aria-checked"]="true"):Qe.role="menuitem"}return Qe}formatLabel(Oe){let{label:Qe,mnemonic:dt}=Oe.item;if(dt<0||dt>=Qe.length)return Qe;let Jt=Qe.slice(0,dt),jt=Qe.slice(dt+1),Xt=Qe[dt],nr=Fs.span({className:"lm-Menu-itemMnemonic"},Xt);return[Jt,nr,jt]}formatShortcut(Oe){let Qe=Oe.item.keyBinding;return Qe?vp.formatKeystroke(Qe.keys):null}}We.Renderer=oe,We.defaultRenderer=new oe})(hv||(hv={}));var of;(function(We){We.TIMER_DELAY=300,We.SUBMENU_OVERLAP=3;let oe=null,Ie=0;function Oe(){return Ie>0?(Ie--,oe):Ht()}function Qe(){oe=Ht(),Ie++}We.saveWindowData=Qe;function dt(){let ar=document.createElement("div"),Lr=document.createElement("ul");return Lr.className="lm-Menu-content",ar.appendChild(Lr),Lr.setAttribute("role","menu"),ar.tabIndex=0,ar}We.createNode=dt;function Jt(ar){return ar.type!=="separator"&&ar.isEnabled&&ar.isVisible}We.canActivate=Jt;function jt(ar,Lr){return new Ot(ar.commands,Lr)}We.createItem=jt;function Xt(ar,Lr,Ir){for(let de=ar;de;de=de.childMenu)if(Os.hitTest(de.node,Lr,Ir))return!0;return!1}We.hitTestMenus=Xt;function nr(ar){let Lr=new Array(ar.length);Sa.ArrayExt.fill(Lr,!1);let Ir=0,de=ar.length;for(;Ir<de;++Ir){let Vr=ar[Ir];if(Vr.isVisible){if(Vr.type!=="separator")break;Lr[Ir]=!0}}let Mr=de-1;for(;Mr>=0;--Mr){let Vr=ar[Mr];if(Vr.isVisible){if(Vr.type!=="separator")break;Lr[Mr]=!0}}let qr=!1;for(;++Ir<Mr;){let Vr=ar[Ir];Vr.isVisible&&(Vr.type!=="separator"?qr=!1:qr?Lr[Ir]=!0:qr=!0)}return Lr}We.computeCollapsed=nr;function Ht(){return{pageXOffset:window.pageXOffset,pageYOffset:window.pageYOffset,clientWidth:document.documentElement.clientWidth,clientHeight:document.documentElement.clientHeight}}function er(ar,Lr,Ir,de,Mr,qr,Vr,ti){let Xr=Oe(),Ki=Xr.pageXOffset,Ia=Xr.pageYOffset,_i=Xr.clientWidth,ia=Xr.clientHeight;za.sendMessage(ar,Ya.Msg.UpdateRequest);let Yr=ia-(Mr?Ir:0),Ba=ar.node,eo=Ba.style;eo.opacity="0",eo.maxHeight=`${Yr}px`,Ya.attach(ar,Vr||document.body,ti);let{width:rs,height:Oo}=Ba.getBoundingClientRect();qr==="right"&&(Lr-=rs),!de&&Lr+rs>Ki+_i&&(Lr=Ki+_i-rs),!Mr&&Ir+Oo>Ia+ia&&(Ir>Ia+ia?Ir=Ia+ia-Oo:Ir=Ir-Oo),eo.transform=`translate(${Math.max(0,Lr)}px, ${Math.max(0,Ir)}px`,eo.opacity="1"}We.openRootMenu=er;function ur(ar,Lr){let Ir=Oe(),de=Ir.pageXOffset,Mr=Ir.pageYOffset,qr=Ir.clientWidth,Vr=Ir.clientHeight;za.sendMessage(ar,Ya.Msg.UpdateRequest);let ti=Vr,Xr=ar.node,Ki=Xr.style;Ki.opacity="0",Ki.maxHeight=`${ti}px`,Ya.attach(ar,document.body);let{width:Ia,height:_i}=Xr.getBoundingClientRect(),ia=Os.boxSizing(ar.node),Yr=Lr.getBoundingClientRect(),Ba=Yr.right-We.SUBMENU_OVERLAP;Ba+Ia>de+qr&&(Ba=Yr.left+We.SUBMENU_OVERLAP-Ia);let eo=Yr.top-ia.borderTop-ia.paddingTop;eo+_i>Mr+Vr&&(eo=Yr.bottom+ia.borderBottom+ia.paddingBottom-_i),Ki.transform=`translate(${Math.max(0,Ba)}px, ${Math.max(0,eo)}px`,Ki.opacity="1"}We.openSubmenu=ur;function ir(ar,Lr,Ir){let de=-1,Mr=-1,qr=!1,Vr=Lr.toUpperCase();for(let ti=0,Xr=ar.length;ti<Xr;++ti){let Ki=(ti+Ir)%Xr,Ia=ar[Ki];if(!Jt(Ia))continue;let _i=Ia.label;if(_i.length===0)continue;let ia=Ia.mnemonic;if(ia>=0&&ia<_i.length){_i[ia].toUpperCase()===Vr&&(de===-1?de=Ki:qr=!0);continue}Mr===-1&&_i[0].toUpperCase()===Vr&&(Mr=Ki)}return{index:de,multiple:qr,auto:Mr}}We.findMnemonic=ir;class Ot{constructor(Lr,Ir){this._commands=Lr,this.type=Ir.type||"command",this.command=Ir.command||"",this.args=Ir.args||yp.JSONExt.emptyObject,this.submenu=Ir.submenu||null}get label(){return this.type==="command"?this._commands.label(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.label:""}get mnemonic(){return this.type==="command"?this._commands.mnemonic(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.mnemonic:-1}get icon(){if(this.type==="command")return this._commands.icon(this.command,this.args);if(this.type==="submenu"&&this.submenu)return this.submenu.title.icon}get iconClass(){return this.type==="command"?this._commands.iconClass(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.iconClass:""}get iconLabel(){return this.type==="command"?this._commands.iconLabel(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.iconLabel:""}get caption(){return this.type==="command"?this._commands.caption(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.caption:""}get className(){return this.type==="command"?this._commands.className(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.className:""}get dataset(){return this.type==="command"?this._commands.dataset(this.command,this.args):this.type==="submenu"&&this.submenu?this.submenu.title.dataset:{}}get isEnabled(){return this.type==="command"?this._commands.isEnabled(this.command,this.args):this.type==="submenu"?this.submenu!==null:!0}get isToggled(){return this.type==="command"?this._commands.isToggled(this.command,this.args):!1}get isVisible(){return this.type==="command"?this._commands.isVisible(this.command,this.args):this.type==="submenu"?this.submenu!==null:!0}get keyBinding(){if(this.type==="command"){let{command:Lr,args:Ir}=this;return Sa.ArrayExt.findLastValue(this._commands.keyBindings,de=>de.command===Lr&&yp.JSONExt.deepEqual(de.args,Ir))||null}return null}}})(of||(of={}));var Mj;(function(We){function oe(Jt,jt){let Xt=Oe(Jt.selector),nr=Jt.rank!==void 0?Jt.rank:1/0;return{...Jt,selector:Xt,rank:nr,id:jt}}We.createItem=oe;function Ie(Jt,jt,Xt,nr){let Ht=jt.target;if(!Ht)return null;let er=jt.currentTarget;if(!er||!er.contains(Ht)&&(Ht=document.elementFromPoint(jt.clientX,jt.clientY),!Ht||!er.contains(Ht)))return null;let ur=[],ir=Jt.slice();for(;Ht!==null;){let Ot=[];for(let ar=0,Lr=ir.length;ar<Lr;++ar){let Ir=ir[ar];Ir&&dd.matches(Ht,Ir.selector)&&(Ot.push(Ir),ir[ar]=null)}if(Ot.length!==0&&(Xt&&Ot.sort(nr?dt:Qe),ur.push(...Ot)),Ht===er)break;Ht=Ht.parentElement}return Xt||ur.sort(nr?dt:Qe),ur}We.matchItems=Ie;function Oe(Jt){if(Jt.indexOf(",")!==-1)throw new Error(`Selector cannot contain commas: ${Jt}`);if(!dd.isValid(Jt))throw new Error(`Invalid selector: ${Jt}`);return Jt}function Qe(Jt,jt){let Xt=Jt.rank,nr=jt.rank;return Xt!==nr?Xt<nr?-1:1:Jt.id-jt.id}function dt(Jt,jt){let Xt=dd.calculateSpecificity(Jt.selector),nr=dd.calculateSpecificity(jt.selector);return Xt!==nr?nr-Xt:Qe(Jt,jt)}})(Mj||(Mj={}));var Oce=["ArrowLeft","ArrowUp","ArrowRight","ArrowDown","Home","End"],i1=class We extends Ya{constructor(oe={}){super({node:zh.createNode()}),this._currentIndex=-1,this._titles=[],this._titlesEditable=!1,this._previousTitle=null,this._dragData=null,this._tabSizeFrozen=!1,this._frozenTabWidths=null,this._unfreezeRunID=0,this._unfreezeFallbackTimerID=0,this._unfreezeTransitionListener=null,this._addButtonEnabled=!1,this._tabMoved=new Ls(this),this._currentChanged=new Ls(this),this._addRequested=new Ls(this),this._tabCloseRequested=new Ls(this),this._tabDetachRequested=new Ls(this),this._tabActivateRequested=new Ls(this),this.addClass("lm-TabBar"),this.contentNode.setAttribute("role","tablist"),this.setFlag(Ya.Flag.DisallowLayout),this._document=oe.document||document,this.tabsMovable=oe.tabsMovable||!1,this.titlesEditable=oe.titlesEditable||!1,this.allowDeselect=oe.allowDeselect||!1,this.addButtonEnabled=oe.addButtonEnabled||!1,this.insertBehavior=oe.insertBehavior||"select-tab-if-needed",this.name=oe.name||"",this.orientation=oe.orientation||"horizontal",this.removeBehavior=oe.removeBehavior||"select-tab-after",this.renderer=oe.renderer||We.defaultRenderer}dispose(){this._releaseMouse(),this._titles.length=0,this._previousTitle=null,super.dispose()}get currentChanged(){return this._currentChanged}get tabMoved(){return this._tabMoved}get tabActivateRequested(){return this._tabActivateRequested}get addRequested(){return this._addRequested}get tabCloseRequested(){return this._tabCloseRequested}get tabDetachRequested(){return this._tabDetachRequested}get document(){return this._document}get titlesEditable(){return this._titlesEditable}set titlesEditable(oe){this._titlesEditable=oe}get currentTitle(){return this._titles[this._currentIndex]||null}set currentTitle(oe){this.currentIndex=oe?this._titles.indexOf(oe):-1}get currentIndex(){return this._currentIndex}set currentIndex(oe){if((oe<0||oe>=this._titles.length)&&(oe=-1),this._currentIndex===oe)return;let Ie=this._currentIndex,Oe=this._titles[Ie]||null,Qe=oe,dt=this._titles[Qe]||null;this._currentIndex=Qe,this._previousTitle=Oe,this.update(),this._currentChanged.emit({previousIndex:Ie,previousTitle:Oe,currentIndex:Qe,currentTitle:dt})}get name(){return this._name}set name(oe){this._name=oe,oe?this.contentNode.setAttribute("aria-label",oe):this.contentNode.removeAttribute("aria-label")}get orientation(){return this._orientation}set orientation(oe){this._orientation!==oe&&(this._releaseMouse(),this._orientation=oe,this.dataset.orientation=oe,this.contentNode.setAttribute("aria-orientation",oe))}get addButtonEnabled(){return this._addButtonEnabled}set addButtonEnabled(oe){this._addButtonEnabled!==oe&&(this._addButtonEnabled=oe,oe?this.addButtonNode.classList.remove("lm-mod-hidden"):this.addButtonNode.classList.add("lm-mod-hidden"))}get titles(){return this._titles}get contentNode(){return this.node.getElementsByClassName("lm-TabBar-content")[0]}get addButtonNode(){return this.node.getElementsByClassName("lm-TabBar-addButton")[0]}addTab(oe){return this.insertTab(this._titles.length,oe)}insertTab(oe,Ie){this._releaseMouse();let Oe=zh.asTitle(Ie),Qe=this._titles.indexOf(Oe),dt=Math.max(0,Math.min(oe,this._titles.length));return Qe===-1?(Sa.ArrayExt.insert(this._titles,dt,Oe),Oe.changed.connect(this._onTitleChanged,this),this.update(),this._adjustCurrentForInsert(dt,Oe),Oe):(dt===this._titles.length&&dt--,Qe===dt||(Sa.ArrayExt.move(this._titles,Qe,dt),this.update(),this._adjustCurrentForMove(Qe,dt)),Oe)}removeTab(oe){this.removeTabAt(this._titles.indexOf(oe))}removeTabAt(oe){let Ie=oe>=0&&oe<this._titles.length;if(this._tabSizeFrozen)if(Ie){let Qe=this.contentNode.children;this._frozenTabWidths=[];for(let dt=0,Jt=Qe.length;dt<Jt;++dt)dt!==oe&&this._frozenTabWidths.push(Qe[dt].offsetWidth)}else this._frozenTabWidths=null;this._releaseMouse();let Oe=Sa.ArrayExt.removeAt(this._titles,oe);Oe&&(Oe.changed.disconnect(this._onTitleChanged,this),Oe===this._previousTitle&&(this._previousTitle=null),this.update(),this._adjustCurrentForRemove(oe,Oe))}clearTabs(){if(this._titles.length===0)return;this._releaseMouse();for(let Oe of this._titles)Oe.changed.disconnect(this._onTitleChanged,this);let oe=this.currentIndex,Ie=this.currentTitle;this._currentIndex=-1,this._previousTitle=null,this._titles.length=0,this.update(),oe!==-1&&this._currentChanged.emit({previousIndex:oe,previousTitle:Ie,currentIndex:-1,currentTitle:null})}releaseMouse(){this._releaseMouse()}handleEvent(oe){switch(oe.type){case"pointerdown":this._evtPointerDown(oe);break;case"pointermove":this._evtPointerMove(oe);break;case"pointerup":this._evtPointerUp(oe);break;case"pointerleave":this._evtPointerLeave(oe);break;case"dblclick":this._evtDblClick(oe);break;case"keydown":oe.eventPhase===Event.CAPTURING_PHASE?this._evtKeyDownCapturing(oe):this._evtKeyDown(oe);break;case"contextmenu":oe.preventDefault(),oe.stopPropagation();break}}onBeforeAttach(oe){this.node.addEventListener("pointerdown",this),this.node.addEventListener("pointerleave",this),this.node.addEventListener("dblclick",this),this.node.addEventListener("keydown",this)}onAfterDetach(oe){this.node.removeEventListener("pointerdown",this),this.node.removeEventListener("pointerleave",this),this.node.removeEventListener("dblclick",this),this.node.removeEventListener("keydown",this),this._clearUnfreezeTransitionState(),this._clearTabSizeFreezeState(),this._releaseMouse()}onUpdateRequest(oe){var Ie;let Oe=this._titles,Qe=this.renderer,dt=this.currentTitle,Jt=new Array(Oe.length),jt=(Ie=this._getCurrentTabindex())!==null&&Ie!==void 0?Ie:this._currentIndex>-1?this._currentIndex:0;for(let Xt=0,nr=Oe.length;Xt<nr;++Xt){let Ht=Oe[Xt],er=Ht===dt,ur=er?nr:nr-Xt-1,ir=jt===Xt?0:-1;Jt[Xt]=Qe.renderTab({title:Ht,current:er,zIndex:ur,tabIndex:ir})}if(Hd.render(Jt,this.contentNode),this._tabSizeFrozen){let Xt=this.contentNode.children;if(this._frozenTabWidths&&this._frozenTabWidths.length===Xt.length){for(let nr=0,Ht=Xt.length;nr<Ht;++nr)this._setFrozenTabSize(Xt[nr],this._frozenTabWidths[nr]);this._frozenTabWidths=null}else{this._frozenTabWidths=null;for(let nr=0,Ht=Xt.length;nr<Ht;++nr){let er=Xt[nr];this._setFrozenTabSize(er,er.offsetWidth)}}}}_getCurrentTabindex(){let oe=null,Ie=this.contentNode.querySelector('li[tabindex="0"]');return Ie?oe=[...this.contentNode.children].indexOf(Ie):this._addButtonEnabled&&this.addButtonNode.getAttribute("tabindex")==="0"&&(oe=-1),oe}_evtDblClick(oe){if(!this.titlesEditable)return;let Ie=this.contentNode.children,Oe=Sa.ArrayExt.findFirstIndex(Ie,Jt=>Os.hitTest(Jt,oe.clientX,oe.clientY));if(Oe===-1)return;let Qe=this.titles[Oe],dt=Ie[Oe].querySelector(".lm-TabBar-tabLabel");if(dt&&dt.contains(oe.target)){let Jt=Qe.label||"",jt=dt.innerHTML;dt.innerHTML="";let Xt=document.createElement("input");Xt.classList.add("lm-TabBar-tabInput"),Xt.value=Jt,dt.appendChild(Xt);let nr=()=>{Xt.removeEventListener("blur",nr),dt.innerHTML=jt,this.node.addEventListener("keydown",this)};Xt.addEventListener("dblclick",Ht=>Ht.stopPropagation()),Xt.addEventListener("blur",nr),Xt.addEventListener("keydown",Ht=>{Ht.key==="Enter"?(Xt.value!==""&&(Qe.label=Qe.caption=Xt.value),nr()):Ht.key==="Escape"&&nr()}),this.node.removeEventListener("keydown",this),Xt.select(),Xt.focus(),dt.children.length>0&&dt.children[0].focus()}}_evtKeyDownCapturing(oe){oe.eventPhase===Event.CAPTURING_PHASE&&(oe.preventDefault(),oe.stopPropagation(),oe.key==="Escape"&&this._releaseMouse())}_evtKeyDown(oe){var Ie,Oe,Qe;if(!(oe.key==="Tab"||oe.eventPhase===Event.CAPTURING_PHASE)){if(oe.key==="Enter"||oe.key==="Spacebar"||oe.key===" "){let dt=document.activeElement;if(this.addButtonEnabled&&this.addButtonNode.contains(dt))oe.preventDefault(),oe.stopPropagation(),this._addRequested.emit();else{let Jt=Sa.ArrayExt.findFirstIndex(this.contentNode.children,jt=>jt.contains(dt));Jt>=0&&(oe.preventDefault(),oe.stopPropagation(),this.currentIndex=Jt)}}else if(Oce.includes(oe.key)){let dt=[...this.contentNode.children];if(this.addButtonEnabled&&dt.push(this.addButtonNode),dt.length<=1)return;oe.preventDefault(),oe.stopPropagation();let Jt=dt.indexOf(document.activeElement);Jt===-1&&(Jt=this._currentIndex);let jt;oe.key==="ArrowRight"&&this._orientation==="horizontal"||oe.key==="ArrowDown"&&this._orientation==="vertical"?jt=(Ie=dt[Jt+1])!==null&&Ie!==void 0?Ie:dt[0]:oe.key==="ArrowLeft"&&this._orientation==="horizontal"||oe.key==="ArrowUp"&&this._orientation==="vertical"?jt=(Oe=dt[Jt-1])!==null&&Oe!==void 0?Oe:dt[dt.length-1]:oe.key==="Home"?jt=dt[0]:oe.key==="End"&&(jt=dt[dt.length-1]),jt&&((Qe=dt[Jt])===null||Qe===void 0||Qe.setAttribute("tabindex","-1"),jt?.setAttribute("tabindex","0"),jt.focus())}}}_evtPointerDown(oe){if(oe.button!==0&&oe.button!==1||this._dragData||oe.target.classList.contains("lm-TabBar-tabInput"))return;let Ie=this.addButtonEnabled&&this.addButtonNode.contains(oe.target),Oe=this.contentNode.children,Qe=Sa.ArrayExt.findFirstIndex(Oe,Jt=>Os.hitTest(Jt,oe.clientX,oe.clientY));if(Qe===-1&&!Ie||(oe.preventDefault(),oe.stopPropagation(),this._dragData={tab:Oe[Qe],index:Qe,pressX:oe.clientX,pressY:oe.clientY,tabPos:-1,tabSize:-1,tabPressPos:-1,targetIndex:-1,tabLayout:null,contentRect:null,override:null,dragActive:!1,dragAborted:!1,detachRequested:!1},this.document.addEventListener("pointerup",this,!0),oe.button===1||Ie))return;let dt=Oe[Qe].querySelector(this.renderer.closeIconSelector);dt&&dt.contains(oe.target)||(this.tabsMovable&&(this.document.addEventListener("pointermove",this,!0),this.document.addEventListener("keydown",this,!0),this.document.addEventListener("contextmenu",this,!0)),this.allowDeselect&&this.currentIndex===Qe?this.currentIndex=-1:this.currentIndex=Qe,this.currentIndex!==-1&&this._tabActivateRequested.emit({index:this.currentIndex,title:this.currentTitle}))}_evtPointerMove(oe){let Ie=this._dragData;if(!Ie)return;oe.preventDefault(),oe.stopPropagation();let Oe=this.contentNode.children;if(!(!Ie.dragActive&&!zh.dragExceeded(Ie,oe))){if(!Ie.dragActive){let Qe=Ie.tab.getBoundingClientRect();this._orientation==="horizontal"?(Ie.tabPos=Ie.tab.offsetLeft,Ie.tabSize=Qe.width,Ie.tabPressPos=Ie.pressX-Qe.left):(Ie.tabPos=Ie.tab.offsetTop,Ie.tabSize=Qe.height,Ie.tabPressPos=Ie.pressY-Qe.top),Ie.tabPressOffset={x:Ie.pressX-Qe.left,y:Ie.pressY-Qe.top},Ie.tabLayout=zh.snapTabLayout(Oe,this._orientation),Ie.contentRect=this.contentNode.getBoundingClientRect(),Ie.override=nf.overrideCursor("default"),Ie.tab.classList.add("lm-mod-dragging"),this.addClass("lm-mod-dragging"),Ie.dragActive=!0}if(!Ie.detachRequested&&zh.detachExceeded(Ie,oe)){Ie.detachRequested=!0;let Qe=Ie.index,dt=oe.clientX,Jt=oe.clientY,jt=Oe[Qe],Xt=this._titles[Qe];if(this._tabDetachRequested.emit({index:Qe,title:Xt,tab:jt,clientX:dt,clientY:Jt,offset:Ie.tabPressOffset}),Ie.dragAborted)return}zh.layoutTabs(Oe,Ie,oe,this._orientation)}}_evtPointerUp(oe){if(oe.button!==0&&oe.button!==1)return;let Ie=this._dragData;if(!Ie)return;if(oe.preventDefault(),oe.stopPropagation(),this.document.removeEventListener("pointermove",this,!0),this.document.removeEventListener("pointerup",this,!0),this.document.removeEventListener("keydown",this,!0),this.document.removeEventListener("contextmenu",this,!0),!Ie.dragActive){if(this._dragData=null,this.addButtonEnabled&&this.addButtonNode.contains(oe.target)){this._addRequested.emit(void 0);return}let dt=this.contentNode.children,Jt=Sa.ArrayExt.findFirstIndex(dt,nr=>Os.hitTest(nr,oe.clientX,oe.clientY));if(Jt!==Ie.index)return;let jt=this._titles[Jt];if(!jt.closable)return;if(oe.button===1){this._tabCloseRequested.emit({index:Jt,title:jt});return}let Xt=dt[Jt].querySelector(this.renderer.closeIconSelector);if(Xt&&Xt.contains(oe.target)){this._tabSizeFrozen=!0,this._tabCloseRequested.emit({index:Jt,title:jt});return}return}if(oe.button!==0)return;zh.finalizeTabPosition(Ie,this._orientation),Ie.tab.classList.remove("lm-mod-dragging");let Oe=zh.parseTransitionDuration(Ie.tab);setTimeout(()=>{if(Ie.dragAborted)return;this._dragData=null,zh.resetTabPositions(this.contentNode.children,this._orientation),Ie.override.dispose(),this.removeClass("lm-mod-dragging");let Qe=Ie.index,dt=Ie.targetIndex;dt===-1||Qe===dt||(Sa.ArrayExt.move(this._titles,Qe,dt),this._adjustCurrentForMove(Qe,dt),this._tabMoved.emit({fromIndex:Qe,toIndex:dt,title:this._titles[dt]}),za.sendMessage(this,Ya.Msg.UpdateRequest))},Oe)}_releaseMouse(){let oe=this._dragData;oe&&(this._dragData=null,this.document.removeEventListener("pointermove",this,!0),this.document.removeEventListener("pointerup",this,!0),this.document.removeEventListener("keydown",this,!0),this.document.removeEventListener("contextmenu",this,!0),oe.dragAborted=!0,oe.dragActive&&(zh.resetTabPositions(this.contentNode.children,this._orientation),oe.override.dispose(),oe.tab.classList.remove("lm-mod-dragging"),this.removeClass("lm-mod-dragging")))}_adjustCurrentForInsert(oe,Ie){let Oe=this.currentTitle,Qe=this._currentIndex,dt=this.insertBehavior;if(dt==="select-tab"||dt==="select-tab-if-needed"&&Qe===-1){this._currentIndex=oe,this._previousTitle=Oe,this._currentChanged.emit({previousIndex:Qe,previousTitle:Oe,currentIndex:oe,currentTitle:Ie});return}Qe>=oe&&this._currentIndex++}_adjustCurrentForMove(oe,Ie){this._currentIndex===oe?this._currentIndex=Ie:this._currentIndex<oe&&this._currentIndex>=Ie?this._currentIndex++:this._currentIndex>oe&&this._currentIndex<=Ie&&this._currentIndex--}_adjustCurrentForRemove(oe,Ie){let Oe=this._currentIndex,Qe=this.removeBehavior;if(Oe!==oe){Oe>oe&&this._currentIndex--;return}if(this._titles.length===0){this._currentIndex=-1,this._currentChanged.emit({previousIndex:oe,previousTitle:Ie,currentIndex:-1,currentTitle:null});return}if(Qe==="select-tab-after"){this._currentIndex=Math.min(oe,this._titles.length-1),this._currentChanged.emit({previousIndex:oe,previousTitle:Ie,currentIndex:this._currentIndex,currentTitle:this.currentTitle});return}if(Qe==="select-tab-before"){this._currentIndex=Math.max(0,oe-1),this._currentChanged.emit({previousIndex:oe,previousTitle:Ie,currentIndex:this._currentIndex,currentTitle:this.currentTitle});return}if(Qe==="select-previous-tab"){this._previousTitle?(this._currentIndex=this._titles.indexOf(this._previousTitle),this._previousTitle=null):this._currentIndex=Math.min(oe,this._titles.length-1),this._currentChanged.emit({previousIndex:oe,previousTitle:Ie,currentIndex:this._currentIndex,currentTitle:this.currentTitle});return}this._currentIndex=-1,this._currentChanged.emit({previousIndex:oe,previousTitle:Ie,currentIndex:-1,currentTitle:null})}_onTitleChanged(oe){this.update()}_evtPointerLeave(oe){if(!this._tabSizeFrozen)return;this._tabSizeFrozen=!1,this._frozenTabWidths=null,this._unfreezeRunID++;let Ie=this._unfreezeRunID;this._clearUnfreezeTransitionState(),this.addClass("lm-mod-unfreezing");let Oe=this.contentNode.children;for(let Qe=0,dt=Oe.length;Qe<dt;++Qe){let Jt=Oe[Qe];Jt.style.width="",Jt.style.flexBasis=""}if(Oe.length===0)this.removeClass("lm-mod-unfreezing");else{let Qe=dt=>{let Jt=dt.propertyName;(Jt==="width"||Jt==="flex-basis")&&this._finalizeUnfreezeRun(Ie)};this._unfreezeTransitionListener=Qe,this.node.addEventListener("transitionend",Qe),this.node.addEventListener("transitioncancel",Qe),this._unfreezeFallbackTimerID=window.setTimeout(()=>{this._finalizeUnfreezeRun(Ie)},2e3)}this.update()}_setFrozenTabSize(oe,Ie){let Oe=`${Ie}px`;oe.style.width=Oe,oe.style.flexBasis=Oe}_finalizeUnfreezeRun(oe){oe===this._unfreezeRunID&&(this._clearUnfreezeTransitionState(),this.removeClass("lm-mod-unfreezing"))}_clearUnfreezeTransitionState(){this._unfreezeTransitionListener&&(this.node.removeEventListener("transitionend",this._unfreezeTransitionListener),this.node.removeEventListener("transitioncancel",this._unfreezeTransitionListener),this._unfreezeTransitionListener=null),this._unfreezeFallbackTimerID!==0&&(clearTimeout(this._unfreezeFallbackTimerID),this._unfreezeFallbackTimerID=0)}_clearTabSizeFreezeState(){this._tabSizeFrozen=!1,this._frozenTabWidths=null,this.removeClass("lm-mod-unfreezing");let oe=this.contentNode.children;for(let Ie=0,Oe=oe.length;Ie<Oe;++Ie){let Qe=oe[Ie];Qe.style.width="",Qe.style.flexBasis=""}}};(function(We){class oe{constructor(){this.closeIconSelector=".lm-TabBar-tabCloseIcon",this._tabID=0,this._tabKeys=new WeakMap,this._uuid=++oe._nInstance}renderTab(Oe){let Qe=Oe.title.caption,dt=this.createTabKey(Oe),Jt=dt,jt=this.createTabStyle(Oe),Xt=this.createTabClass(Oe),nr=this.createTabDataset(Oe),Ht=this.createTabARIA(Oe);return Oe.title.closable?Fs.li({id:Jt,key:dt,className:Xt,title:Qe,style:jt,dataset:nr,...Ht},this.renderIcon(Oe),this.renderLabel(Oe),this.renderCloseIcon(Oe)):Fs.li({id:Jt,key:dt,className:Xt,title:Qe,style:jt,dataset:nr,...Ht},this.renderIcon(Oe),this.renderLabel(Oe))}renderIcon(Oe){let{title:Qe}=Oe,dt=this.createIconClass(Oe);return Fs.div({className:dt},Qe.icon,Qe.iconLabel)}renderLabel(Oe){return Fs.div({className:"lm-TabBar-tabLabel"},Oe.title.label)}renderCloseIcon(Oe){return Fs.div({className:"lm-TabBar-tabCloseIcon"})}createTabKey(Oe){let Qe=this._tabKeys.get(Oe.title);return Qe===void 0&&(Qe=`tab-key-${this._uuid}-${this._tabID++}`,this._tabKeys.set(Oe.title,Qe)),Qe}createTabStyle(Oe){return{zIndex:`${Oe.zIndex}`}}createTabClass(Oe){let Qe="lm-TabBar-tab";return Oe.title.className&&(Qe+=` ${Oe.title.className}`),Oe.title.closable&&(Qe+=" lm-mod-closable"),Oe.current&&(Qe+=" lm-mod-current"),Qe}createTabDataset(Oe){return Oe.title.dataset}createTabARIA(Oe){var Qe;return{role:"tab","aria-selected":Oe.current.toString(),tabindex:`${(Qe=Oe.tabIndex)!==null&&Qe!==void 0?Qe:"-1"}`}}createIconClass(Oe){let Qe="lm-TabBar-tabIcon",dt=Oe.title.iconClass;return dt?`${Qe} ${dt}`:Qe}}oe._nInstance=0,We.Renderer=oe,We.defaultRenderer=new oe,We.addButtonSelector=".lm-TabBar-addButton"})(i1||(i1={}));var zh;(function(We){We.DRAG_THRESHOLD=5,We.DETACH_THRESHOLD=20;function oe(){let Ht=document.createElement("div"),er=document.createElement("ul");er.setAttribute("role","tablist"),er.className="lm-TabBar-content",Ht.appendChild(er);let ur=document.createElement("div");return ur.className="lm-TabBar-addButton lm-mod-hidden",ur.setAttribute("tabindex","-1"),ur.setAttribute("role","button"),Ht.appendChild(ur),Ht}We.createNode=oe;function Ie(Ht){return Ht instanceof hy?Ht:new hy(Ht)}We.asTitle=Ie;function Oe(Ht){let er=window.getComputedStyle(Ht);return 1e3*(parseFloat(er.transitionDuration)||0)}We.parseTransitionDuration=Oe;function Qe(Ht,er){let ur=new Array(Ht.length);for(let ir=0,Ot=Ht.length;ir<Ot;++ir){let ar=Ht[ir],Lr=window.getComputedStyle(ar);er==="horizontal"?ur[ir]={pos:ar.offsetLeft,size:ar.offsetWidth,margin:parseFloat(Lr.marginLeft)||0}:ur[ir]={pos:ar.offsetTop,size:ar.offsetHeight,margin:parseFloat(Lr.marginTop)||0}}return ur}We.snapTabLayout=Qe;function dt(Ht,er){let ur=Math.abs(er.clientX-Ht.pressX),ir=Math.abs(er.clientY-Ht.pressY);return ur>=We.DRAG_THRESHOLD||ir>=We.DRAG_THRESHOLD}We.dragExceeded=dt;function Jt(Ht,er){let ur=Ht.contentRect;return er.clientX<ur.left-We.DETACH_THRESHOLD||er.clientX>=ur.right+We.DETACH_THRESHOLD||er.clientY<ur.top-We.DETACH_THRESHOLD||er.clientY>=ur.bottom+We.DETACH_THRESHOLD}We.detachExceeded=Jt;function jt(Ht,er,ur,ir){let Ot,ar,Lr,Ir;ir==="horizontal"?(Ot=er.pressX,ar=ur.clientX-er.contentRect.left,Lr=ur.clientX,Ir=er.contentRect.width):(Ot=er.pressY,ar=ur.clientY-er.contentRect.top,Lr=ur.clientY,Ir=er.contentRect.height);let de=er.index,Mr=ar-er.tabPressPos,qr=Mr+er.tabSize;for(let Vr=0,ti=Ht.length;Vr<ti;++Vr){let Xr,Ki=er.tabLayout[Vr],Ia=Ki.pos+(Ki.size>>1);if(Vr<er.index&&Mr<Ia)Xr=`${er.tabSize+er.tabLayout[Vr+1].margin}px`,de=Math.min(de,Vr);else if(Vr>er.index&&qr>Ia)Xr=`${-er.tabSize-Ki.margin}px`,de=Math.max(de,Vr);else if(Vr===er.index){let _i=Lr-Ot,ia=Ir-(er.tabPos+er.tabSize);Xr=`${Math.max(-er.tabPos,Math.min(_i,ia))}px`}else Xr="";ir==="horizontal"?Ht[Vr].style.left=Xr:Ht[Vr].style.top=Xr}er.targetIndex=de}We.layoutTabs=jt;function Xt(Ht,er){let ur;er==="horizontal"?ur=Ht.contentRect.width:ur=Ht.contentRect.height;let ir;if(Ht.targetIndex===Ht.index)ir=0;else if(Ht.targetIndex>Ht.index){let Lr=Ht.tabLayout[Ht.targetIndex];ir=Lr.pos+Lr.size-Ht.tabSize-Ht.tabPos}else ir=Ht.tabLayout[Ht.targetIndex].pos-Ht.tabPos;let Ot=ur-(Ht.tabPos+Ht.tabSize),ar=Math.max(-Ht.tabPos,Math.min(ir,Ot));er==="horizontal"?Ht.tab.style.left=`${ar}px`:Ht.tab.style.top=`${ar}px`}We.finalizeTabPosition=Xt;function nr(Ht,er){for(let ur of Ht)er==="horizontal"?ur.style.left="":ur.style.top=""}We.resetTabPositions=nr})(zh||(zh={}));var eE=class extends _p{constructor(oe){super(),this._spacing=4,this._dirty=!1,this._root=null,this._box=null,this._items=new Map,this.renderer=oe.renderer,oe.spacing!==void 0&&(this._spacing=py.clampDimension(oe.spacing)),this._document=oe.document||document,this._hiddenMode=oe.hiddenMode!==void 0?oe.hiddenMode:Ya.HiddenMode.Display}dispose(){let oe=this[Symbol.iterator]();this._items.forEach(Ie=>{Ie.dispose()}),this._box=null,this._root=null,this._items.clear();for(let Ie of oe)Ie.dispose();super.dispose()}get hiddenMode(){return this._hiddenMode}set hiddenMode(oe){if(this._hiddenMode!==oe){this._hiddenMode=oe;for(let Ie of this.tabBars())if(Ie.titles.length>1)for(let Oe of Ie.titles)Oe.owner.hiddenMode=this._hiddenMode}}get spacing(){return this._spacing}set spacing(oe){oe=py.clampDimension(oe),this._spacing!==oe&&(this._spacing=oe,this.parent&&this.parent.fit())}get isEmpty(){return this._root===null}[Symbol.iterator](){return this._root?this._root.iterAllWidgets():(0,Sa.empty)()}widgets(){return this._root?this._root.iterUserWidgets():(0,Sa.empty)()}selectedWidgets(){return this._root?this._root.iterSelectedWidgets():(0,Sa.empty)()}tabBars(){return this._root?this._root.iterTabBars():(0,Sa.empty)()}handles(){return this._root?this._root.iterHandles():(0,Sa.empty)()}moveHandle(oe,Ie,Oe){let Qe=oe.classList.contains("lm-mod-hidden");if(!this._root||Qe)return;let dt=this._root.findSplitNode(oe);if(!dt)return;let Jt;dt.node.orientation==="horizontal"?Jt=Ie-oe.offsetLeft:Jt=Oe-oe.offsetTop,Jt!==0&&(dt.node.holdSizes(),ih.adjust(dt.node.sizers,dt.index,Jt),this.parent&&this.parent.update())}saveLayout(){return this._root?(this._root.holdAllSizes(),{main:this._root.createConfig()}):{main:null}}restoreLayout(oe){let Ie=new Set,Oe;oe.main?Oe=Xl.normalizeAreaConfig(oe.main,Ie):Oe=null;let Qe=this.widgets(),dt=this.tabBars(),Jt=this.handles();this._root=null;for(let jt of Qe)Ie.has(jt)||(jt.parent=null);for(let jt of dt)jt.dispose();for(let jt of Jt)jt.parentNode&&jt.parentNode.removeChild(jt);for(let jt of Ie)jt.parent=this.parent;Oe?this._root=Xl.realizeAreaConfig(Oe,{createTabBar:jt=>this._createTabBar(),createHandle:()=>this._createHandle()},this._document):this._root=null,this.parent&&(Ie.forEach(jt=>{this.attachWidget(jt)}),this.parent.fit())}addWidget(oe,Ie={}){let Oe=Ie.ref||null,Qe=Ie.mode||"tab-after",dt=null;if(this._root&&Oe&&(dt=this._root.findTabNode(Oe)),Oe&&!dt)throw new Error("Reference widget is not in the layout.");switch(oe.parent=this.parent,Qe){case"tab-after":this._insertTab(oe,Oe,dt,!0);break;case"tab-before":this._insertTab(oe,Oe,dt,!1);break;case"split-top":this._insertSplit(oe,Oe,dt,"vertical",!1);break;case"split-left":this._insertSplit(oe,Oe,dt,"horizontal",!1);break;case"split-right":this._insertSplit(oe,Oe,dt,"horizontal",!0);break;case"split-bottom":this._insertSplit(oe,Oe,dt,"vertical",!0);break;case"merge-top":this._insertSplit(oe,Oe,dt,"vertical",!1,!0);break;case"merge-left":this._insertSplit(oe,Oe,dt,"horizontal",!1,!0);break;case"merge-right":this._insertSplit(oe,Oe,dt,"horizontal",!0,!0);break;case"merge-bottom":this._insertSplit(oe,Oe,dt,"vertical",!0,!0);break}this.parent&&(this.attachWidget(oe),this.parent.fit())}removeWidget(oe){this._removeWidget(oe),this.parent&&(this.detachWidget(oe),this.parent.fit())}hitTestTabAreas(oe,Ie){if(!this._root||!this.parent||!this.parent.isVisible)return null;this._box||(this._box=Os.boxSizing(this.parent.node));let Oe=this.parent.node.getBoundingClientRect(),Qe=oe-Oe.left-this._box.borderLeft,dt=Ie-Oe.top-this._box.borderTop,Jt=this._root.hitTestTabNodes(Qe,dt);if(!Jt)return null;let{tabBar:jt,top:Xt,left:nr,width:Ht,height:er}=Jt,ur=this._box.borderLeft+this._box.borderRight,ir=this._box.borderTop+this._box.borderBottom,Ot=Oe.width-ur-(nr+Ht),ar=Oe.height-ir-(Xt+er);return{tabBar:jt,x:Qe,y:dt,top:Xt,left:nr,right:Ot,bottom:ar,width:Ht,height:er}}init(){super.init();for(let oe of this)this.attachWidget(oe);for(let oe of this.handles())this.parent.node.appendChild(oe);this.parent.fit()}attachWidget(oe){this.parent.node!==oe.node.parentNode&&(this._items.set(oe,new dv(oe)),this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.BeforeAttach),this.parent.node.appendChild(oe.node),this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.AfterAttach))}detachWidget(oe){if(this.parent.node!==oe.node.parentNode)return;this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.BeforeDetach),this.parent.node.removeChild(oe.node),this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.AfterDetach);let Ie=this._items.get(oe);Ie&&(this._items.delete(oe),Ie.dispose())}onBeforeShow(oe){super.onBeforeShow(oe),this.parent.update()}onBeforeAttach(oe){super.onBeforeAttach(oe),this.parent.fit()}onChildShown(oe){this.parent.fit()}onChildHidden(oe){this.parent.fit()}onResize(oe){this.parent.isVisible&&this._update(oe.width,oe.height)}onUpdateRequest(oe){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(oe){this.parent.isAttached&&this._fit()}_removeWidget(oe){if(!this._root)return;let Ie=this._root.findTabNode(oe);if(!Ie)return;if(Xl.removeAria(oe),Ie.tabBar.titles.length>1){if(Ie.tabBar.removeTab(oe.title),this._hiddenMode===Ya.HiddenMode.Scale&&Ie.tabBar.titles.length==1){let ur=Ie.tabBar.titles[0].owner;ur.hiddenMode=Ya.HiddenMode.Display}return}if(Ie.tabBar.dispose(),this._root===Ie){this._root=null;return}this._root.holdAllSizes();let Oe=Ie.parent;Ie.parent=null;let Qe=Sa.ArrayExt.removeFirstOf(Oe.children,Ie),dt=Sa.ArrayExt.removeAt(Oe.handles,Qe);if(Sa.ArrayExt.removeAt(Oe.sizers,Qe),dt.parentNode&&dt.parentNode.removeChild(dt),Oe.children.length>1){Oe.syncHandles();return}let Jt=Oe.parent;Oe.parent=null;let jt=Oe.children[0],Xt=Oe.handles[0];if(Oe.children.length=0,Oe.handles.length=0,Oe.sizers.length=0,Xt.parentNode&&Xt.parentNode.removeChild(Xt),this._root===Oe){jt.parent=null,this._root=jt;return}let nr=Jt,Ht=nr.children.indexOf(Oe);if(jt instanceof Xl.TabLayoutNode){jt.parent=nr,nr.children[Ht]=jt;return}let er=Sa.ArrayExt.removeAt(nr.handles,Ht);Sa.ArrayExt.removeAt(nr.children,Ht),Sa.ArrayExt.removeAt(nr.sizers,Ht),er.parentNode&&er.parentNode.removeChild(er);for(let ur=0,ir=jt.children.length;ur<ir;++ur){let Ot=jt.children[ur],ar=jt.handles[ur],Lr=jt.sizers[ur];Sa.ArrayExt.insert(nr.children,Ht+ur,Ot),Sa.ArrayExt.insert(nr.handles,Ht+ur,ar),Sa.ArrayExt.insert(nr.sizers,Ht+ur,Lr),Ot.parent=nr}jt.children.length=0,jt.handles.length=0,jt.sizers.length=0,jt.parent=null,nr.syncHandles()}_createTabNode(oe){let Ie=new Xl.TabLayoutNode(this._createTabBar());return Ie.tabBar.addTab(oe.title),Xl.addAria(oe,Ie.tabBar),Ie}_insertTab(oe,Ie,Oe,Qe){if(oe===Ie)return;if(!this._root){let Jt=new Xl.TabLayoutNode(this._createTabBar());Jt.tabBar.addTab(oe.title),this._root=Jt,Xl.addAria(oe,Jt.tabBar);return}Oe||(Oe=this._root.findFirstTabNode()),Oe.tabBar.titles.indexOf(oe.title)===-1&&(this._removeWidget(oe),oe.hide());let dt;if(Ie?dt=Oe.tabBar.titles.indexOf(Ie.title):dt=Oe.tabBar.currentIndex,this._hiddenMode===Ya.HiddenMode.Scale)if(Oe.tabBar.titles.length===0)oe.hiddenMode=Ya.HiddenMode.Display;else if(Oe.tabBar.titles.length==1){let Jt=Oe.tabBar.titles[0].owner;Jt.hiddenMode=Ya.HiddenMode.Scale}else oe.hiddenMode=Ya.HiddenMode.Scale;else oe.hiddenMode=this._hiddenMode;Oe.tabBar.insertTab(dt+(Qe?1:0),oe.title),Xl.addAria(oe,Oe.tabBar)}_insertSplit(oe,Ie,Oe,Qe,dt,Jt=!1){if(oe===Ie&&Oe&&Oe.tabBar.titles.length===1)return;if(this._removeWidget(oe),!this._root){this._root=this._createTabNode(oe);return}if(!Oe||!Oe.parent){let ur=this._splitRoot(Qe),ir=dt?ur.children.length:0;ur.normalizeSizes();let Ot=Xl.createSizer(Oe?1:Xl.GOLDEN_RATIO),ar=this._createTabNode(oe);Sa.ArrayExt.insert(ur.children,ir,ar),Sa.ArrayExt.insert(ur.sizers,ir,Ot),Sa.ArrayExt.insert(ur.handles,ir,this._createHandle()),ar.parent=ur,ur.normalizeSizes(),ur.syncHandles();return}let jt=Oe.parent;if(jt.orientation===Qe){let ur=jt.children.indexOf(Oe);if(Jt){let Lr=ur+(dt?1:-1),Ir=jt.children[Lr];if(Ir instanceof Xl.TabLayoutNode){this._insertTab(oe,null,Ir,!0),++Ir.tabBar.currentIndex;return}}jt.normalizeSizes();let ir=jt.sizers[ur].sizeHint/=2,Ot=ur+(dt?1:0),ar=this._createTabNode(oe);Sa.ArrayExt.insert(jt.children,Ot,ar),Sa.ArrayExt.insert(jt.sizers,Ot,Xl.createSizer(ir)),Sa.ArrayExt.insert(jt.handles,Ot,this._createHandle()),ar.parent=jt,jt.syncHandles();return}let Xt=Sa.ArrayExt.removeFirstOf(jt.children,Oe),nr=new Xl.SplitLayoutNode(Qe);nr.normalized=!0,nr.children.push(Oe),nr.sizers.push(Xl.createSizer(.5)),nr.handles.push(this._createHandle()),Oe.parent=nr;let Ht=dt?1:0,er=this._createTabNode(oe);Sa.ArrayExt.insert(nr.children,Ht,er),Sa.ArrayExt.insert(nr.sizers,Ht,Xl.createSizer(.5)),Sa.ArrayExt.insert(nr.handles,Ht,this._createHandle()),er.parent=nr,nr.syncHandles(),Sa.ArrayExt.insert(jt.children,Xt,nr),nr.parent=jt}_splitRoot(oe){let Ie=this._root;if(Ie instanceof Xl.SplitLayoutNode&&Ie.orientation===oe)return Ie;let Oe=this._root=new Xl.SplitLayoutNode(oe);return Ie&&(Oe.children.push(Ie),Oe.sizers.push(Xl.createSizer(0)),Oe.handles.push(this._createHandle()),Ie.parent=Oe),Oe}_fit(){let oe=0,Ie=0;if(this._root){let dt=this._root.fit(this._spacing,this._items);oe=dt.minWidth,Ie=dt.minHeight}let Oe=this._box=Os.boxSizing(this.parent.node);oe+=Oe.horizontalSum,Ie+=Oe.verticalSum;let Qe=this.parent.node.style;Qe.minWidth=`${oe}px`,Qe.minHeight=`${Ie}px`,this._dirty=!0,this.parent.parent&&za.sendMessage(this.parent.parent,Ya.Msg.FitRequest),this._dirty&&za.sendMessage(this.parent,Ya.Msg.UpdateRequest)}_update(oe,Ie){if(this._dirty=!1,!this._root)return;oe<0&&(oe=this.parent.node.offsetWidth),Ie<0&&(Ie=this.parent.node.offsetHeight),this._box||(this._box=Os.boxSizing(this.parent.node));let Oe=this._box.paddingTop,Qe=this._box.paddingLeft,dt=oe-this._box.horizontalSum,Jt=Ie-this._box.verticalSum;this._root.update(Oe,Qe,dt,Jt,this._spacing,this._items)}_createTabBar(){let oe=this.renderer.createTabBar(this._document);return oe.orientation="horizontal",this.parent&&this.attachWidget(oe),oe}_createHandle(){let oe=this.renderer.createHandle(),Ie=oe.style;return Ie.position="absolute",Ie.contain="strict",Ie.top="0",Ie.left="0",Ie.width="0",Ie.height="0",this.parent&&this.parent.node.appendChild(oe),oe}},Xl;(function(We){We.GOLDEN_RATIO=.618;function oe(ur){let ir=new Wd;return ir.sizeHint=ur,ir.size=ur,ir}We.createSizer=oe;function Ie(ur,ir){let Ot;return ur.type==="tab-area"?Ot=Xt(ur,ir):Ot=nr(ur,ir),Ot}We.normalizeAreaConfig=Ie;function Oe(ur,ir,Ot){let ar;return ur.type==="tab-area"?ar=Ht(ur,ir,Ot):ar=er(ur,ir,Ot),ar}We.realizeAreaConfig=Oe;class Qe{constructor(ir){this.parent=null,this._top=0,this._left=0,this._width=0,this._height=0;let Ot=new Wd,ar=new Wd;Ot.stretch=0,ar.stretch=1,this.tabBar=ir,this.sizers=[Ot,ar]}get top(){return this._top}get left(){return this._left}get width(){return this._width}get height(){return this._height}*iterAllWidgets(){yield this.tabBar,yield*this.iterUserWidgets()}*iterUserWidgets(){for(let ir of this.tabBar.titles)yield ir.owner}*iterSelectedWidgets(){let ir=this.tabBar.currentTitle;ir&&(yield ir.owner)}*iterTabBars(){yield this.tabBar}*iterHandles(){}findTabNode(ir){return this.tabBar.titles.indexOf(ir.title)!==-1?this:null}findSplitNode(ir){return null}findFirstTabNode(){return this}hitTestTabNodes(ir,Ot){return ir<this._left||ir>=this._left+this._width||Ot<this._top||Ot>=this._top+this._height?null:this}createConfig(){let ir=this.tabBar.titles.map(ar=>ar.owner),Ot=this.tabBar.currentIndex;return{type:"tab-area",widgets:ir,currentIndex:Ot}}holdAllSizes(){}fit(ir,Ot){let ar=0,Lr=0,Ir=1/0,de=1/0,Mr=Ot.get(this.tabBar),qr=this.tabBar.currentTitle,Vr=qr?Ot.get(qr.owner):void 0,[ti,Xr]=this.sizers;return Mr&&Mr.fit(),Vr&&Vr.fit(),Mr&&!Mr.isHidden?(ar=Math.max(ar,Mr.minWidth),Lr+=Mr.minHeight,ti.minSize=Mr.minHeight,ti.maxSize=Mr.maxHeight):(ti.minSize=0,ti.maxSize=0),Vr&&!Vr.isHidden?(ar=Math.max(ar,Vr.minWidth),Lr+=Vr.minHeight,Xr.minSize=Vr.minHeight,Xr.maxSize=1/0):(Xr.minSize=0,Xr.maxSize=1/0),{minWidth:ar,minHeight:Lr,maxWidth:Ir,maxHeight:de}}update(ir,Ot,ar,Lr,Ir,de){this._top=Ot,this._left=ir,this._width=ar,this._height=Lr;let Mr=de.get(this.tabBar),qr=this.tabBar.currentTitle,Vr=qr?de.get(qr.owner):void 0;if(ih.calc(this.sizers,Lr),Mr&&!Mr.isHidden){let ti=this.sizers[0].size;Mr.update(ir,Ot,ar,ti),Ot+=ti}if(Vr&&!Vr.isHidden){let ti=this.sizers[1].size;Vr.update(ir,Ot,ar,ti)}}}We.TabLayoutNode=Qe;class dt{constructor(ir){this.parent=null,this.normalized=!1,this.children=[],this.sizers=[],this.handles=[],this.orientation=ir}*iterAllWidgets(){for(let ir of this.children)yield*ir.iterAllWidgets()}*iterUserWidgets(){for(let ir of this.children)yield*ir.iterUserWidgets()}*iterSelectedWidgets(){for(let ir of this.children)yield*ir.iterSelectedWidgets()}*iterTabBars(){for(let ir of this.children)yield*ir.iterTabBars()}*iterHandles(){yield*this.handles;for(let ir of this.children)yield*ir.iterHandles()}findTabNode(ir){for(let Ot=0,ar=this.children.length;Ot<ar;++Ot){let Lr=this.children[Ot].findTabNode(ir);if(Lr)return Lr}return null}findSplitNode(ir){let Ot=this.handles.indexOf(ir);if(Ot!==-1)return{index:Ot,node:this};for(let ar=0,Lr=this.children.length;ar<Lr;++ar){let Ir=this.children[ar].findSplitNode(ir);if(Ir)return Ir}return null}findFirstTabNode(){return this.children.length===0?null:this.children[0].findFirstTabNode()}hitTestTabNodes(ir,Ot){for(let ar=0,Lr=this.children.length;ar<Lr;++ar){let Ir=this.children[ar].hitTestTabNodes(ir,Ot);if(Ir)return Ir}return null}createConfig(){let ir=this.orientation,Ot=this.createNormalizedSizes(),ar=this.children.map(Lr=>Lr.createConfig());return{type:"split-area",orientation:ir,children:ar,sizes:Ot}}syncHandles(){this.handles.forEach((ir,Ot)=>{ir.setAttribute("data-orientation",this.orientation),Ot===this.handles.length-1?ir.classList.add("lm-mod-hidden"):ir.classList.remove("lm-mod-hidden")})}holdSizes(){for(let ir of this.sizers)ir.sizeHint=ir.size}holdAllSizes(){for(let ir of this.children)ir.holdAllSizes();this.holdSizes()}normalizeSizes(){let ir=this.sizers.length;if(ir===0)return;this.holdSizes();let Ot=this.sizers.reduce((ar,Lr)=>ar+Lr.sizeHint,0);if(Ot===0)for(let ar of this.sizers)ar.size=ar.sizeHint=1/ir;else for(let ar of this.sizers)ar.size=ar.sizeHint/=Ot;this.normalized=!0}createNormalizedSizes(){let ir=this.sizers.length;if(ir===0)return[];let Ot=this.sizers.map(Lr=>Lr.size),ar=Ot.reduce((Lr,Ir)=>Lr+Ir,0);if(ar===0)for(let Lr=Ot.length-1;Lr>-1;Lr--)Ot[Lr]=1/ir;else for(let Lr=Ot.length-1;Lr>-1;Lr--)Ot[Lr]/=ar;return Ot}fit(ir,Ot){let ar=this.orientation==="horizontal",Lr=Math.max(0,this.children.length-1)*ir,Ir=ar?Lr:0,de=ar?0:Lr,Mr=1/0,qr=1/0;for(let Vr=0,ti=this.children.length;Vr<ti;++Vr){let Xr=this.children[Vr].fit(ir,Ot);ar?(de=Math.max(de,Xr.minHeight),Ir+=Xr.minWidth,this.sizers[Vr].minSize=Xr.minWidth):(Ir=Math.max(Ir,Xr.minWidth),de+=Xr.minHeight,this.sizers[Vr].minSize=Xr.minHeight)}return{minWidth:Ir,minHeight:de,maxWidth:Mr,maxHeight:qr}}update(ir,Ot,ar,Lr,Ir,de){let Mr=this.orientation==="horizontal",qr=Math.max(0,this.children.length-1)*Ir,Vr=Math.max(0,(Mr?ar:Lr)-qr);if(this.normalized){for(let ti of this.sizers)ti.sizeHint*=Vr;this.normalized=!1}ih.calc(this.sizers,Vr);for(let ti=0,Xr=this.children.length;ti<Xr;++ti){let Ki=this.children[ti],Ia=this.sizers[ti].size,_i=this.handles[ti].style;Mr?(Ki.update(ir,Ot,Ia,Lr,Ir,de),ir+=Ia,_i.top=`${Ot}px`,_i.left=`${ir}px`,_i.width=`${Ir}px`,_i.height=`${Lr}px`,ir+=Ir):(Ki.update(ir,Ot,ar,Ia,Ir,de),Ot+=Ia,_i.top=`${Ot}px`,_i.left=`${ir}px`,_i.width=`${ar}px`,_i.height=`${Ir}px`,Ot+=Ir)}}}We.SplitLayoutNode=dt;function Jt(ur,ir){ur.node.setAttribute("role","tabpanel");let Ot=ir.renderer;if(Ot instanceof i1.Renderer){let ar=Ot.createTabKey({title:ur.title,current:!1,zIndex:0});ur.node.setAttribute("aria-labelledby",ar)}}We.addAria=Jt;function jt(ur){ur.node.removeAttribute("role"),ur.node.removeAttribute("aria-labelledby")}We.removeAria=jt;function Xt(ur,ir){if(ur.widgets.length===0)return null;let Ot=[];for(let Lr of ur.widgets)ir.has(Lr)||(ir.add(Lr),Ot.push(Lr));if(Ot.length===0)return null;let ar=ur.currentIndex;return ar!==-1&&(ar<0||ar>=Ot.length)&&(ar=0),{type:"tab-area",widgets:Ot,currentIndex:ar}}function nr(ur,ir){let Ot=ur.orientation,ar=[],Lr=[];for(let Ir=0,de=ur.children.length;Ir<de;++Ir){let Mr=Ie(ur.children[Ir],ir);Mr&&(Mr.type==="tab-area"||Mr.orientation!==Ot?(ar.push(Mr),Lr.push(Math.abs(ur.sizes[Ir]||0))):(ar.push(...Mr.children),Lr.push(...Mr.sizes)))}return ar.length===0?null:ar.length===1?ar[0]:{type:"split-area",orientation:Ot,children:ar,sizes:Lr}}function Ht(ur,ir,Ot){let ar=ir.createTabBar(Ot);for(let Lr of ur.widgets)Lr.hide(),ar.addTab(Lr.title),We.addAria(Lr,ar);return ar.currentIndex=ur.currentIndex,new Qe(ar)}function er(ur,ir,Ot){let ar=new dt(ur.orientation);return ur.children.forEach((Lr,Ir)=>{let de=Oe(Lr,ir,Ot),Mr=oe(ur.sizes[Ir]),qr=ir.createHandle();ar.children.push(de),ar.handles.push(qr),ar.sizers.push(Mr),de.parent=ar}),ar.syncHandles(),ar.normalizeSizes(),ar}})(Xl||(Xl={}));var sw=class We extends Ya{constructor(oe={}){super(),this._drag=null,this._tabsMovable=!0,this._tabsConstrained=!1,this._addButtonEnabled=!1,this._pressData=null,this._layoutModified=new Ls(this),this._addRequested=new Ls(this),this.addClass("lm-DockPanel"),this._document=oe.document||document,this._mode=oe.mode||"multiple-document",this._renderer=oe.renderer||We.defaultRenderer,this._edges=oe.edges||Rl.DEFAULT_EDGES,oe.tabsMovable!==void 0&&(this._tabsMovable=oe.tabsMovable),oe.tabsConstrained!==void 0&&(this._tabsConstrained=oe.tabsConstrained),oe.addButtonEnabled!==void 0&&(this._addButtonEnabled=oe.addButtonEnabled),this.dataset.mode=this._mode;let Ie={createTabBar:()=>this._createTabBar(),createHandle:()=>this._createHandle()};this.layout=new eE({document:this._document,renderer:Ie,spacing:oe.spacing,hiddenMode:oe.hiddenMode}),this.overlay=oe.overlay||new We.Overlay,this.node.appendChild(this.overlay.node)}dispose(){this._releaseMouse(),this.overlay.hide(0),this._drag&&this._drag.dispose(),super.dispose()}get hiddenMode(){return this.layout.hiddenMode}set hiddenMode(oe){this.layout.hiddenMode=oe}get layoutModified(){return this._layoutModified}get addRequested(){return this._addRequested}get renderer(){return this.layout.renderer}get spacing(){return this.layout.spacing}set spacing(oe){this.layout.spacing=oe}get mode(){return this._mode}set mode(oe){if(this._mode===oe)return;this._mode=oe,this.dataset.mode=oe;let Ie=this.layout;switch(oe){case"multiple-document":for(let Oe of Ie.tabBars())Oe.show();break;case"single-document":Ie.restoreLayout(Rl.createSingleDocumentConfig(this));break;default:throw"unreachable"}za.postMessage(this,Rl.LayoutModified)}get tabsMovable(){return this._tabsMovable}set tabsMovable(oe){this._tabsMovable=oe;for(let Ie of this.tabBars())Ie.tabsMovable=oe}get tabsConstrained(){return this._tabsConstrained}set tabsConstrained(oe){this._tabsConstrained=oe}get addButtonEnabled(){return this._addButtonEnabled}set addButtonEnabled(oe){this._addButtonEnabled=oe;for(let Ie of this.tabBars())Ie.addButtonEnabled=oe}get isEmpty(){return this.layout.isEmpty}*widgets(){yield*this.layout.widgets()}*selectedWidgets(){yield*this.layout.selectedWidgets()}*tabBars(){yield*this.layout.tabBars()}*handles(){yield*this.layout.handles()}selectWidget(oe){let Ie=(0,Sa.find)(this.tabBars(),Oe=>Oe.titles.indexOf(oe.title)!==-1);if(!Ie)throw new Error("Widget is not contained in the dock panel.");Ie.currentTitle=oe.title}activateWidget(oe){this.selectWidget(oe),oe.activate()}saveLayout(){return this.layout.saveLayout()}restoreLayout(oe){this._mode="multiple-document",this.layout.restoreLayout(oe),(Nc.IS_EDGE||Nc.IS_IE)&&za.flush(),za.postMessage(this,Rl.LayoutModified)}addWidget(oe,Ie={}){this._mode==="single-document"?this.layout.addWidget(oe):this.layout.addWidget(oe,Ie),za.postMessage(this,Rl.LayoutModified)}processMessage(oe){oe.type==="layout-modified"?this._layoutModified.emit(void 0):super.processMessage(oe)}handleEvent(oe){switch(oe.type){case"lm-dragenter":this._evtDragEnter(oe);break;case"lm-dragleave":this._evtDragLeave(oe);break;case"lm-dragover":this._evtDragOver(oe);break;case"lm-drop":this._evtDrop(oe);break;case"pointerdown":this._evtPointerDown(oe);break;case"pointermove":this._evtPointerMove(oe);break;case"pointerup":this._evtPointerUp(oe);break;case"keydown":this._evtKeyDown(oe);break;case"contextmenu":oe.preventDefault(),oe.stopPropagation();break}}onBeforeAttach(oe){this.node.addEventListener("lm-dragenter",this),this.node.addEventListener("lm-dragleave",this),this.node.addEventListener("lm-dragover",this),this.node.addEventListener("lm-drop",this),this.node.addEventListener("pointerdown",this)}onAfterDetach(oe){this.node.removeEventListener("lm-dragenter",this),this.node.removeEventListener("lm-dragleave",this),this.node.removeEventListener("lm-dragover",this),this.node.removeEventListener("lm-drop",this),this.node.removeEventListener("pointerdown",this),this._releaseMouse()}onChildAdded(oe){Rl.isGeneratedTabBarProperty.get(oe.child)||oe.child.addClass("lm-DockPanel-widget")}onChildRemoved(oe){Rl.isGeneratedTabBarProperty.get(oe.child)||(oe.child.removeClass("lm-DockPanel-widget"),za.postMessage(this,Rl.LayoutModified))}_evtDragEnter(oe){oe.mimeData.hasData("application/vnd.lumino.widget-factory")&&(oe.preventDefault(),oe.stopPropagation())}_evtDragLeave(oe){oe.preventDefault(),!(this._tabsConstrained&&oe.source!==this)&&(oe.stopPropagation(),this.overlay.hide(1))}_evtDragOver(oe){oe.preventDefault(),this._tabsConstrained&&oe.source!==this||this._showOverlay(oe.clientX,oe.clientY)==="invalid"?oe.dropAction="none":(oe.stopPropagation(),oe.dropAction=oe.proposedAction)}_evtDrop(oe){if(oe.preventDefault(),this.overlay.hide(0),oe.proposedAction==="none"){oe.dropAction="none";return}let{clientX:Ie,clientY:Oe}=oe,{zone:Qe,target:dt}=Rl.findDropTarget(this,Ie,Oe,this._edges);if(this._tabsConstrained&&oe.source!==this||Qe==="invalid"){oe.dropAction="none";return}let jt=oe.mimeData.getData("application/vnd.lumino.widget-factory");if(typeof jt!="function"){oe.dropAction="none";return}let Xt=jt();if(!(Xt instanceof Ya)){oe.dropAction="none";return}if(Xt.contains(this)){oe.dropAction="none";return}let nr=dt?Rl.getDropRef(dt.tabBar):null;switch(Qe){case"root-all":this.addWidget(Xt);break;case"root-top":this.addWidget(Xt,{mode:"split-top"});break;case"root-left":this.addWidget(Xt,{mode:"split-left"});break;case"root-right":this.addWidget(Xt,{mode:"split-right"});break;case"root-bottom":this.addWidget(Xt,{mode:"split-bottom"});break;case"widget-all":this.addWidget(Xt,{mode:"tab-after",ref:nr});break;case"widget-top":this.addWidget(Xt,{mode:"split-top",ref:nr});break;case"widget-left":this.addWidget(Xt,{mode:"split-left",ref:nr});break;case"widget-right":this.addWidget(Xt,{mode:"split-right",ref:nr});break;case"widget-bottom":this.addWidget(Xt,{mode:"split-bottom",ref:nr});break;case"widget-tab":this.addWidget(Xt,{mode:"tab-after",ref:nr});break;default:throw"unreachable"}oe.dropAction=oe.proposedAction,oe.stopPropagation(),this.activateWidget(Xt)}_evtKeyDown(oe){oe.preventDefault(),oe.stopPropagation(),oe.keyCode===27&&(this._releaseMouse(),za.postMessage(this,Rl.LayoutModified))}_evtPointerDown(oe){if(oe.button!==0)return;let Ie=this.layout,Oe=oe.target,Qe=(0,Sa.find)(Ie.handles(),Ht=>Ht.contains(Oe));if(!Qe)return;oe.preventDefault(),oe.stopPropagation(),this._document.addEventListener("keydown",this,!0),this._document.addEventListener("pointerup",this,!0),this._document.addEventListener("pointermove",this,!0),this._document.addEventListener("contextmenu",this,!0);let dt=Qe.getBoundingClientRect(),Jt=oe.clientX-dt.left,jt=oe.clientY-dt.top,Xt=window.getComputedStyle(Qe),nr=nf.overrideCursor(Xt.cursor,this._document);this._pressData={handle:Qe,deltaX:Jt,deltaY:jt,override:nr}}_evtPointerMove(oe){if(!this._pressData)return;oe.preventDefault(),oe.stopPropagation();let Ie=this.node.getBoundingClientRect(),Oe=oe.clientX-Ie.left-this._pressData.deltaX,Qe=oe.clientY-Ie.top-this._pressData.deltaY;this.layout.moveHandle(this._pressData.handle,Oe,Qe)}_evtPointerUp(oe){oe.button===0&&(oe.preventDefault(),oe.stopPropagation(),this._releaseMouse(),za.postMessage(this,Rl.LayoutModified))}_releaseMouse(){this._pressData&&(this._pressData.override.dispose(),this._pressData=null,this._document.removeEventListener("keydown",this,!0),this._document.removeEventListener("pointerup",this,!0),this._document.removeEventListener("pointermove",this,!0),this._document.removeEventListener("contextmenu",this,!0))}_showOverlay(oe,Ie){let{zone:Oe,target:Qe}=Rl.findDropTarget(this,oe,Ie,this._edges);if(Oe==="invalid")return this.overlay.hide(100),Oe;let dt,Jt,jt,Xt,nr=Os.boxSizing(this.node),Ht=this.node.getBoundingClientRect();switch(Oe){case"root-all":dt=nr.paddingTop,Jt=nr.paddingLeft,jt=nr.paddingRight,Xt=nr.paddingBottom;break;case"root-top":dt=nr.paddingTop,Jt=nr.paddingLeft,jt=nr.paddingRight,Xt=Ht.height*Rl.GOLDEN_RATIO;break;case"root-left":dt=nr.paddingTop,Jt=nr.paddingLeft,jt=Ht.width*Rl.GOLDEN_RATIO,Xt=nr.paddingBottom;break;case"root-right":dt=nr.paddingTop,Jt=Ht.width*Rl.GOLDEN_RATIO,jt=nr.paddingRight,Xt=nr.paddingBottom;break;case"root-bottom":dt=Ht.height*Rl.GOLDEN_RATIO,Jt=nr.paddingLeft,jt=nr.paddingRight,Xt=nr.paddingBottom;break;case"widget-all":dt=Qe.top,Jt=Qe.left,jt=Qe.right,Xt=Qe.bottom;break;case"widget-top":dt=Qe.top,Jt=Qe.left,jt=Qe.right,Xt=Qe.bottom+Qe.height/2;break;case"widget-left":dt=Qe.top,Jt=Qe.left,jt=Qe.right+Qe.width/2,Xt=Qe.bottom;break;case"widget-right":dt=Qe.top,Jt=Qe.left+Qe.width/2,jt=Qe.right,Xt=Qe.bottom;break;case"widget-bottom":dt=Qe.top+Qe.height/2,Jt=Qe.left,jt=Qe.right,Xt=Qe.bottom;break;case"widget-tab":{let er=Qe.tabBar.node.getBoundingClientRect().height;dt=Qe.top,Jt=Qe.left,jt=Qe.right,Xt=Qe.bottom+Qe.height-er;break}default:throw"unreachable"}return this.overlay.show({top:dt,left:Jt,right:jt,bottom:Xt}),Oe}_createTabBar(){let oe=this._renderer.createTabBar(this._document);return Rl.isGeneratedTabBarProperty.set(oe,!0),this._mode==="single-document"&&oe.hide(),oe.tabsMovable=this._tabsMovable,oe.allowDeselect=!1,oe.addButtonEnabled=this._addButtonEnabled,oe.removeBehavior="select-previous-tab",oe.insertBehavior="select-tab-if-needed",oe.tabMoved.connect(this._onTabMoved,this),oe.currentChanged.connect(this._onCurrentChanged,this),oe.tabCloseRequested.connect(this._onTabCloseRequested,this),oe.tabDetachRequested.connect(this._onTabDetachRequested,this),oe.tabActivateRequested.connect(this._onTabActivateRequested,this),oe.addRequested.connect(this._onTabAddRequested,this),oe}_createHandle(){return this._renderer.createHandle()}_onTabMoved(){za.postMessage(this,Rl.LayoutModified)}_onCurrentChanged(oe,Ie){let{previousTitle:Oe,currentTitle:Qe}=Ie;Oe&&Oe.owner.hide(),Qe&&Qe.owner.show(),(Nc.IS_EDGE||Nc.IS_IE)&&za.flush(),za.postMessage(this,Rl.LayoutModified)}_onTabAddRequested(oe){this._addRequested.emit(oe)}_onTabActivateRequested(oe,Ie){Ie.title.owner.activate()}_onTabCloseRequested(oe,Ie){Ie.title.owner.close()}_onTabDetachRequested(oe,Ie){if(this._drag)return;oe.releaseMouse();let{title:Oe,tab:Qe,clientX:dt,clientY:Jt,offset:jt}=Ie,Xt=new yp.MimeData,nr=()=>Oe.owner;Xt.setData("application/vnd.lumino.widget-factory",nr);let Ht=Qe.cloneNode(!0);jt&&(Ht.style.top=`-${jt.y}px`,Ht.style.left=`-${jt.x}px`),this._drag=new nf({document:this._document,mimeData:Xt,dragImage:Ht,proposedAction:"move",supportedActions:"move",source:this}),Qe.classList.add("lm-mod-hidden");let er=()=>{this._drag=null,Qe.classList.remove("lm-mod-hidden")};this._drag.start(dt,Jt).then(er)}};(function(We){class oe{constructor(){this._timer=-1,this._hidden=!0,this.node=document.createElement("div"),this.node.classList.add("lm-DockPanel-overlay"),this.node.classList.add("lm-mod-hidden"),this.node.style.position="absolute",this.node.style.contain="strict"}show(Qe){let dt=this.node.style;dt.top=`${Qe.top}px`,dt.left=`${Qe.left}px`,dt.right=`${Qe.right}px`,dt.bottom=`${Qe.bottom}px`,clearTimeout(this._timer),this._timer=-1,this._hidden&&(this._hidden=!1,this.node.classList.remove("lm-mod-hidden"))}hide(Qe){if(!this._hidden){if(Qe<=0){clearTimeout(this._timer),this._timer=-1,this._hidden=!0,this.node.classList.add("lm-mod-hidden");return}this._timer===-1&&(this._timer=window.setTimeout(()=>{this._timer=-1,this._hidden=!0,this.node.classList.add("lm-mod-hidden")},Qe))}}}We.Overlay=oe;class Ie{createTabBar(Qe){let dt=new i1({document:Qe});return dt.addClass("lm-DockPanel-tabBar"),dt}createHandle(){let Qe=document.createElement("div");return Qe.className="lm-DockPanel-handle",Qe}}We.Renderer=Ie,We.defaultRenderer=new Ie})(sw||(sw={}));var Rl;(function(We){We.GOLDEN_RATIO=.618,We.DEFAULT_EDGES={top:12,right:40,bottom:40,left:40},We.LayoutModified=new o0("layout-modified"),We.isGeneratedTabBarProperty=new af({name:"isGeneratedTabBar",create:()=>!1});function oe(Qe){if(Qe.isEmpty)return{main:null};let dt=Array.from(Qe.widgets()),Jt=Qe.selectedWidgets().next().value,jt=Jt?dt.indexOf(Jt):-1;return{main:{type:"tab-area",widgets:dt,currentIndex:jt}}}We.createSingleDocumentConfig=oe;function Ie(Qe,dt,Jt,jt){if(!Os.hitTest(Qe.node,dt,Jt))return{zone:"invalid",target:null};let Xt=Qe.layout;if(Xt.isEmpty)return{zone:"root-all",target:null};if(Qe.mode==="multiple-document"){let Mr=Qe.node.getBoundingClientRect(),qr=dt-Mr.left+1,Vr=Jt-Mr.top+1,ti=Mr.right-dt,Xr=Mr.bottom-Jt;switch(Math.min(Vr,ti,Xr,qr)){case Vr:if(Vr<jt.top)return{zone:"root-top",target:null};break;case ti:if(ti<jt.right)return{zone:"root-right",target:null};break;case Xr:if(Xr<jt.bottom)return{zone:"root-bottom",target:null};break;case qr:if(qr<jt.left)return{zone:"root-left",target:null};break;default:throw"unreachable"}}let nr=Xt.hitTestTabAreas(dt,Jt);if(!nr)return{zone:"invalid",target:null};if(Qe.mode==="single-document")return{zone:"widget-all",target:nr};let Ht=nr.x-nr.left+1,er=nr.y-nr.top+1,ur=nr.left+nr.width-nr.x,ir=nr.top+nr.height-nr.y,Ot=nr.tabBar.node.getBoundingClientRect().height;if(er<Ot)return{zone:"widget-tab",target:nr};let ar=Math.round(nr.width/3),Lr=Math.round(nr.height/3);if(Ht>ar&&ur>ar&&er>Lr&&ir>Lr)return{zone:"widget-all",target:nr};Ht/=ar,er/=Lr,ur/=ar,ir/=Lr;let Ir=Math.min(Ht,er,ur,ir),de;switch(Ir){case Ht:de="widget-left";break;case er:de="widget-top";break;case ur:de="widget-right";break;case ir:de="widget-bottom";break;default:throw"unreachable"}return{zone:de,target:nr}}We.findDropTarget=Ie;function Oe(Qe){return Qe.titles.length===0?null:Qe.currentTitle?Qe.currentTitle.owner:Qe.titles[Qe.titles.length-1].owner}We.getDropRef=Oe})(Rl||(Rl={}));var my=class We extends _p{constructor(oe={}){super(oe),this._dirty=!1,this._rowSpacing=4,this._columnSpacing=4,this._items=[],this._rowStarts=[],this._columnStarts=[],this._rowSizers=[new Wd],this._columnSizers=[new Wd],this._box=null,oe.rowCount!==void 0&&Au.reallocSizers(this._rowSizers,oe.rowCount),oe.columnCount!==void 0&&Au.reallocSizers(this._columnSizers,oe.columnCount),oe.rowSpacing!==void 0&&(this._rowSpacing=Au.clampValue(oe.rowSpacing)),oe.columnSpacing!==void 0&&(this._columnSpacing=Au.clampValue(oe.columnSpacing))}dispose(){for(let oe of this._items){let Ie=oe.widget;oe.dispose(),Ie.dispose()}this._box=null,this._items.length=0,this._rowStarts.length=0,this._rowSizers.length=0,this._columnStarts.length=0,this._columnSizers.length=0,super.dispose()}get rowCount(){return this._rowSizers.length}set rowCount(oe){oe!==this.rowCount&&(Au.reallocSizers(this._rowSizers,oe),this.parent&&this.parent.fit())}get columnCount(){return this._columnSizers.length}set columnCount(oe){oe!==this.columnCount&&(Au.reallocSizers(this._columnSizers,oe),this.parent&&this.parent.fit())}get rowSpacing(){return this._rowSpacing}set rowSpacing(oe){oe=Au.clampValue(oe),this._rowSpacing!==oe&&(this._rowSpacing=oe,this.parent&&this.parent.fit())}get columnSpacing(){return this._columnSpacing}set columnSpacing(oe){oe=Au.clampValue(oe),this._columnSpacing!==oe&&(this._columnSpacing=oe,this.parent&&this.parent.fit())}rowStretch(oe){let Ie=this._rowSizers[oe];return Ie?Ie.stretch:-1}setRowStretch(oe,Ie){let Oe=this._rowSizers[oe];Oe&&(Ie=Au.clampValue(Ie),Oe.stretch!==Ie&&(Oe.stretch=Ie,this.parent&&this.parent.update()))}columnStretch(oe){let Ie=this._columnSizers[oe];return Ie?Ie.stretch:-1}setColumnStretch(oe,Ie){let Oe=this._columnSizers[oe];Oe&&(Ie=Au.clampValue(Ie),Oe.stretch!==Ie&&(Oe.stretch=Ie,this.parent&&this.parent.update()))}*[Symbol.iterator](){for(let oe of this._items)yield oe.widget}addWidget(oe){Sa.ArrayExt.findFirstIndex(this._items,Oe=>Oe.widget===oe)===-1&&(this._items.push(new dv(oe)),this.parent&&this.attachWidget(oe))}removeWidget(oe){let Ie=Sa.ArrayExt.findFirstIndex(this._items,Qe=>Qe.widget===oe);if(Ie===-1)return;let Oe=Sa.ArrayExt.removeAt(this._items,Ie);this.parent&&this.detachWidget(oe),Oe.dispose()}init(){super.init();for(let oe of this)this.attachWidget(oe)}attachWidget(oe){this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.BeforeAttach),this.parent.node.appendChild(oe.node),this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.AfterAttach),this.parent.fit()}detachWidget(oe){this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.BeforeDetach),this.parent.node.removeChild(oe.node),this.parent.isAttached&&za.sendMessage(oe,Ya.Msg.AfterDetach),this.parent.fit()}onBeforeShow(oe){super.onBeforeShow(oe),this.parent.update()}onBeforeAttach(oe){super.onBeforeAttach(oe),this.parent.fit()}onChildShown(oe){this.parent.fit()}onChildHidden(oe){this.parent.fit()}onResize(oe){this.parent.isVisible&&this._update(oe.width,oe.height)}onUpdateRequest(oe){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(oe){this.parent.isAttached&&this._fit()}_fit(){for(let Xt=0,nr=this.rowCount;Xt<nr;++Xt)this._rowSizers[Xt].minSize=0;for(let Xt=0,nr=this.columnCount;Xt<nr;++Xt)this._columnSizers[Xt].minSize=0;let oe=this._items.filter(Xt=>!Xt.isHidden);for(let Xt=0,nr=oe.length;Xt<nr;++Xt)oe[Xt].fit();let Ie=this.rowCount-1,Oe=this.columnCount-1;oe.sort(Au.rowSpanCmp);for(let Xt=0,nr=oe.length;Xt<nr;++Xt){let Ht=oe[Xt],er=We.getCellConfig(Ht.widget),ur=Math.min(er.row,Ie),ir=Math.min(er.row+er.rowSpan-1,Ie);Au.distributeMin(this._rowSizers,ur,ir,Ht.minHeight)}oe.sort(Au.columnSpanCmp);for(let Xt=0,nr=oe.length;Xt<nr;++Xt){let Ht=oe[Xt],er=We.getCellConfig(Ht.widget),ur=Math.min(er.column,Oe),ir=Math.min(er.column+er.columnSpan-1,Oe);Au.distributeMin(this._columnSizers,ur,ir,Ht.minWidth)}if(this.fitPolicy==="set-no-constraint"){za.sendMessage(this.parent,Ya.Msg.UpdateRequest);return}let Qe=Ie*this._rowSpacing,dt=Oe*this._columnSpacing;for(let Xt=0,nr=this.rowCount;Xt<nr;++Xt)Qe+=this._rowSizers[Xt].minSize;for(let Xt=0,nr=this.columnCount;Xt<nr;++Xt)dt+=this._columnSizers[Xt].minSize;let Jt=this._box=Os.boxSizing(this.parent.node);dt+=Jt.horizontalSum,Qe+=Jt.verticalSum;let jt=this.parent.node.style;jt.minWidth=`${dt}px`,jt.minHeight=`${Qe}px`,this._dirty=!0,this.parent.parent&&za.sendMessage(this.parent.parent,Ya.Msg.FitRequest),this._dirty&&za.sendMessage(this.parent,Ya.Msg.UpdateRequest)}_update(oe,Ie){this._dirty=!1,oe<0&&(oe=this.parent.node.offsetWidth),Ie<0&&(Ie=this.parent.node.offsetHeight),this._box||(this._box=Os.boxSizing(this.parent.node));let Oe=this._box.paddingTop,Qe=this._box.paddingLeft,dt=oe-this._box.horizontalSum,Jt=Ie-this._box.verticalSum,jt=this.rowCount-1,Xt=this.columnCount-1,nr=jt*this._rowSpacing,Ht=Xt*this._columnSpacing;ih.calc(this._rowSizers,Math.max(0,Jt-nr)),ih.calc(this._columnSizers,Math.max(0,dt-Ht));for(let er=0,ur=Oe,ir=this.rowCount;er<ir;++er)this._rowStarts[er]=ur,ur+=this._rowSizers[er].size+this._rowSpacing;for(let er=0,ur=Qe,ir=this.columnCount;er<ir;++er)this._columnStarts[er]=ur,ur+=this._columnSizers[er].size+this._columnSpacing;for(let er=0,ur=this._items.length;er<ur;++er){let ir=this._items[er];if(ir.isHidden)continue;let Ot=We.getCellConfig(ir.widget),ar=Math.min(Ot.row,jt),Lr=Math.min(Ot.column,Xt),Ir=Math.min(Ot.row+Ot.rowSpan-1,jt),de=Math.min(Ot.column+Ot.columnSpan-1,Xt),Mr=this._columnStarts[Lr],qr=this._rowStarts[ar],Vr=this._columnStarts[de]+this._columnSizers[de].size-Mr,ti=this._rowStarts[Ir]+this._rowSizers[Ir].size-qr;ir.update(Mr,qr,Vr,ti)}}};(function(We){function oe(Oe){return Au.cellConfigProperty.get(Oe)}We.getCellConfig=oe;function Ie(Oe,Qe){Au.cellConfigProperty.set(Oe,Au.normalizeConfig(Qe))}We.setCellConfig=Ie})(my||(my={}));var Au;(function(We){We.cellConfigProperty=new af({name:"cellConfig",create:()=>({row:0,column:0,rowSpan:1,columnSpan:1}),changed:jt});function oe(Xt){let nr=Math.max(0,Math.floor(Xt.row||0)),Ht=Math.max(0,Math.floor(Xt.column||0)),er=Math.max(1,Math.floor(Xt.rowSpan||0)),ur=Math.max(1,Math.floor(Xt.columnSpan||0));return{row:nr,column:Ht,rowSpan:er,columnSpan:ur}}We.normalizeConfig=oe;function Ie(Xt){return Math.max(0,Math.floor(Xt))}We.clampValue=Ie;function Oe(Xt,nr){let Ht=We.cellConfigProperty.get(Xt.widget),er=We.cellConfigProperty.get(nr.widget);return Ht.rowSpan-er.rowSpan}We.rowSpanCmp=Oe;function Qe(Xt,nr){let Ht=We.cellConfigProperty.get(Xt.widget),er=We.cellConfigProperty.get(nr.widget);return Ht.columnSpan-er.columnSpan}We.columnSpanCmp=Qe;function dt(Xt,nr){for(nr=Math.max(1,Math.floor(nr));Xt.length<nr;)Xt.push(new Wd);Xt.length>nr&&(Xt.length=nr)}We.reallocSizers=dt;function Jt(Xt,nr,Ht,er){if(Ht<nr)return;if(nr===Ht){let Ot=Xt[nr];Ot.minSize=Math.max(Ot.minSize,er);return}let ur=0;for(let Ot=nr;Ot<=Ht;++Ot)ur+=Xt[Ot].minSize;if(ur>=er)return;let ir=(er-ur)/(Ht-nr+1);for(let Ot=nr;Ot<=Ht;++Ot)Xt[Ot].minSize+=ir}We.distributeMin=Jt;function jt(Xt){Xt.parent&&Xt.parent.layout instanceof my&&Xt.parent.fit()}})(Au||(Au={}));var lw=class We extends Ya{constructor(oe={}){super({node:uw.createNode()}),this._activeIndex=-1,this._tabFocusIndex=0,this._menus=[],this._childMenu=null,this._overflowMenu=null,this._menuItemSizes=[],this._overflowIndex=-1,this.addClass("lm-MenuBar"),this.setFlag(Ya.Flag.DisallowLayout),this.renderer=oe.renderer||We.defaultRenderer,this._forceItemsPosition=oe.forceItemsPosition||{forceX:!0,forceY:!0},this._overflowMenuOptions=oe.overflowMenuOptions||{isVisible:!0}}dispose(){this._closeChildMenu(),this._menus.length=0,super.dispose()}get childMenu(){return this._childMenu}get overflowIndex(){return this._overflowIndex}get overflowMenu(){return this._overflowMenu}get contentNode(){return this.node.getElementsByClassName("lm-MenuBar-content")[0]}get activeMenu(){return this._menus[this._activeIndex]||null}set activeMenu(oe){this.activeIndex=oe?this._menus.indexOf(oe):-1}get activeIndex(){return this._activeIndex}set activeIndex(oe){(oe<0||oe>=this._menus.length)&&(oe=-1),oe>-1&&this._menus[oe].items.length===0&&(oe=-1),this._activeIndex!==oe&&(this._activeIndex=oe,this.update())}get menus(){return this._menus}openActiveMenu(){this._activeIndex!==-1&&(this._openChildMenu(),this._childMenu&&(this._childMenu.activeIndex=-1,this._childMenu.activateNextItem()))}addMenu(oe,Ie=!0){this.insertMenu(this._menus.length,oe,Ie)}insertMenu(oe,Ie,Oe=!0){this._closeChildMenu();let Qe=this._menus.indexOf(Ie),dt=Math.max(0,Math.min(oe,this._menus.length));if(Qe===-1){Sa.ArrayExt.insert(this._menus,dt,Ie),Ie.addClass("lm-MenuBar-menu"),Ie.aboutToClose.connect(this._onMenuAboutToClose,this),Ie.menuRequested.connect(this._onMenuMenuRequested,this),Ie.title.changed.connect(this._onTitleChanged,this),Oe&&this.update();return}dt===this._menus.length&&dt--,Qe!==dt&&(Sa.ArrayExt.move(this._menus,Qe,dt),Oe&&this.update())}removeMenu(oe,Ie=!0){this.removeMenuAt(this._menus.indexOf(oe),Ie)}removeMenuAt(oe,Ie=!0){this._closeChildMenu();let Oe=Sa.ArrayExt.removeAt(this._menus,oe);Oe&&(Oe.aboutToClose.disconnect(this._onMenuAboutToClose,this),Oe.menuRequested.disconnect(this._onMenuMenuRequested,this),Oe.title.changed.disconnect(this._onTitleChanged,this),Oe.removeClass("lm-MenuBar-menu"),Ie&&this.update())}clearMenus(){if(this._menus.length!==0){this._closeChildMenu();for(let oe of this._menus)oe.aboutToClose.disconnect(this._onMenuAboutToClose,this),oe.menuRequested.disconnect(this._onMenuMenuRequested,this),oe.title.changed.disconnect(this._onTitleChanged,this),oe.removeClass("lm-MenuBar-menu");this._menus.length=0,this.update()}}handleEvent(oe){switch(oe.type){case"keydown":this._evtKeyDown(oe);break;case"pointerdown":this._evtPointerDown(oe);break;case"pointermove":case"pointerleave":this._evtPointerMove(oe);break;case"focusout":this._evtFocusOut(oe);break;case"contextmenu":oe.preventDefault(),oe.stopPropagation();break}}onBeforeAttach(oe){this.node.addEventListener("keydown",this),this.node.addEventListener("pointerdown",this),this.node.addEventListener("pointermove",this),this.node.addEventListener("pointerleave",this),this.node.addEventListener("focusout",this),this.node.addEventListener("contextmenu",this)}onAfterDetach(oe){this.node.removeEventListener("keydown",this),this.node.removeEventListener("pointerdown",this),this.node.removeEventListener("pointermove",this),this.node.removeEventListener("pointerleave",this),this.node.removeEventListener("focusout",this),this.node.removeEventListener("contextmenu",this),this._closeChildMenu()}onActivateRequest(oe){this.isAttached&&this._focusItemAt(0)}onResize(oe){this.update(),super.onResize(oe)}onUpdateRequest(oe){var Ie;let Oe=this._menus,Qe=this.renderer,dt=this._activeIndex,Jt=this._tabFocusIndex>=0&&this._tabFocusIndex<Oe.length?this._tabFocusIndex:0,jt=this._overflowIndex>-1?this._overflowIndex:Oe.length,Xt=0,nr=!1;jt=this._overflowMenu!==null?jt-1:jt;let Ht=new Array(jt);for(let er=0;er<jt;++er)Ht[er]=Qe.renderItem({title:Oe[er].title,active:er===dt,tabbable:er===Jt,disabled:Oe[er].items.length===0,onfocus:()=>{this._tabFocusIndex=er,this.activeIndex=er}}),Xt+=this._menuItemSizes[er],Oe[er].title.label===this._overflowMenuOptions.title&&(nr=!0,jt--);if(this._overflowMenuOptions.isVisible){if(this._overflowIndex>-1&&!nr){if(this._overflowMenu===null){let er=(Ie=this._overflowMenuOptions.title)!==null&&Ie!==void 0?Ie:"...";this._overflowMenu=new hv({commands:new vp}),this._overflowMenu.title.label=er,this._overflowMenu.title.mnemonic=0,this.addMenu(this._overflowMenu,!1)}for(let er=Oe.length-2;er>=jt;er--){let ur=this.menus[er];ur.title.mnemonic=0,this._overflowMenu.insertItem(0,{type:"submenu",submenu:ur}),this.removeMenu(ur,!1)}Ht[jt]=Qe.renderItem({title:this._overflowMenu.title,active:jt===dt&&Oe[jt].items.length!==0,tabbable:jt===Jt,disabled:Oe[jt].items.length===0,onfocus:()=>{this._tabFocusIndex=jt,this.activeIndex=jt}}),jt++}else if(this._overflowMenu!==null){let er=this._overflowMenu.items,ur=this.node.offsetWidth,ir=this._overflowMenu.items.length;for(let Ot=0;Ot<ir;++Ot){let ar=Oe.length-1-Ot;if(ur-Xt>this._menuItemSizes[ar]){let Lr=er[0].submenu;this._overflowMenu.removeItemAt(0),this.insertMenu(jt,Lr,!1),Ht[jt]=Qe.renderItem({title:Lr.title,active:!1,tabbable:jt===Jt,disabled:Oe[jt].items.length===0,onfocus:()=>{this._tabFocusIndex=jt,this.activeIndex=jt}}),jt++}}this._overflowMenu.items.length===0&&(this.removeMenu(this._overflowMenu,!1),Ht.pop(),this._overflowMenu=null,this._overflowIndex=-1)}}Hd.render(Ht,this.contentNode),this._updateOverflowIndex()}_updateOverflowIndex(){if(!this._overflowMenuOptions.isVisible)return;let oe=this.contentNode.childNodes,Ie=this.node.offsetWidth,Oe=0,Qe=-1,dt=oe.length;if(this._menuItemSizes.length==0)for(let Jt=0;Jt<dt;Jt++){let jt=oe[Jt];Oe+=jt.offsetWidth,this._menuItemSizes.push(jt.offsetWidth),Oe>Ie&&Qe===-1&&(Qe=Jt)}else for(let Jt=0;Jt<this._menuItemSizes.length;Jt++)if(Oe+=this._menuItemSizes[Jt],Oe>Ie){Qe=Jt;break}this._overflowIndex=Qe}_evtKeyDown(oe){let Ie=oe.keyCode;if(Ie===9){this.activeIndex=-1;return}if(oe.preventDefault(),oe.stopPropagation(),Ie===13||Ie===32||Ie===38||Ie===40){if(this.activeIndex=this._tabFocusIndex,this.activeIndex!==this._tabFocusIndex)return;this.openActiveMenu();return}if(Ie===27){this._closeChildMenu(),this._focusItemAt(this.activeIndex);return}if(Ie===37||Ie===39){let Jt=Ie===37?-1:1,jt=this._tabFocusIndex+Jt,Xt=this._menus.length;for(let nr=0;nr<Xt;nr++){let Ht=(Xt+jt+Jt*nr)%Xt;if(this._menus[Ht].items.length){this._focusItemAt(Ht);return}}return}let Oe=Jm().keyForKeydownEvent(oe);if(!Oe)return;let Qe=this._activeIndex+1,dt=uw.findMnemonic(this._menus,Oe,Qe);dt.index!==-1&&!dt.multiple?(this.activeIndex=dt.index,this.openActiveMenu()):dt.index!==-1?(this.activeIndex=dt.index,this._focusItemAt(this.activeIndex)):dt.auto!==-1&&(this.activeIndex=dt.auto,this._focusItemAt(this.activeIndex))}_evtPointerDown(oe){if(!Os.hitTest(this.node,oe.clientX,oe.clientY))return;oe.stopPropagation(),oe.stopImmediatePropagation();let Ie=Sa.ArrayExt.findFirstIndex(this.contentNode.children,Oe=>Os.hitTest(Oe,oe.clientX,oe.clientY));if(Ie===-1){this._closeChildMenu();return}if(oe.button===0)if(this._childMenu)this._closeChildMenu(),this.activeIndex=Ie;else{oe.preventDefault();let Oe=this._positionForMenu(Ie);hv.saveWindowData(),this.activeIndex=Ie,this._openChildMenu(Oe)}}_evtPointerMove(oe){let Ie=Sa.ArrayExt.findFirstIndex(this.contentNode.children,Qe=>Os.hitTest(Qe,oe.clientX,oe.clientY));if(Ie===this._activeIndex||Ie===-1&&this._childMenu)return;let Oe=Ie>=0&&this._childMenu?this._positionForMenu(Ie):null;hv.saveWindowData(),this.activeIndex=Ie,Oe&&this._openChildMenu(Oe)}_positionForMenu(oe){let Ie=this.contentNode.children[oe],{left:Oe,bottom:Qe}=Ie.getBoundingClientRect();return{top:Qe,left:Oe}}_evtFocusOut(oe){!this._childMenu&&!this.node.contains(oe.relatedTarget)&&(this.activeIndex=-1)}_focusItemAt(oe){let Ie=this.contentNode.childNodes[oe];Ie&&Ie.focus()}_openChildMenu(oe={}){let Ie=this.activeMenu;if(!Ie){this._closeChildMenu();return}let Oe=this._childMenu;if(Oe===Ie)return;this._childMenu=Ie,Oe?Oe.close():document.addEventListener("pointerdown",this,!0),this._tabFocusIndex=this.activeIndex,za.sendMessage(this,Ya.Msg.UpdateRequest);let{left:Qe,top:dt}=oe;(typeof Qe>"u"||typeof dt>"u")&&({left:Qe,top:dt}=this._positionForMenu(this._activeIndex)),Oe||this.addClass("lm-mod-active"),Ie.items.length>0&&Ie.open(Qe,dt,this._forceItemsPosition)}_closeChildMenu(){if(!this._childMenu)return;this.removeClass("lm-mod-active"),document.removeEventListener("pointerdown",this,!0);let oe=this._childMenu;this._childMenu=null,oe.close(),this.activeIndex=-1}_onMenuAboutToClose(oe){oe===this._childMenu&&(this.removeClass("lm-mod-active"),document.removeEventListener("pointerdown",this,!0),this._childMenu=null,this.activeIndex=-1)}_onMenuMenuRequested(oe,Ie){if(oe!==this._childMenu)return;let Oe=this._activeIndex,Qe=this._menus.length;switch(Ie){case"next":this.activeIndex=Oe===Qe-1?0:Oe+1;break;case"previous":this.activeIndex=Oe===0?Qe-1:Oe-1;break}this.openActiveMenu()}_onTitleChanged(){this.update()}};(function(We){class oe{renderItem(Oe){let Qe=this.createItemClass(Oe),dt=this.createItemDataset(Oe),Jt=this.createItemARIA(Oe);return Fs.li({className:Qe,dataset:dt,...Oe.disabled?{}:{tabindex:Oe.tabbable?"0":"-1"},onfocus:Oe.onfocus,...Jt},this.renderIcon(Oe),this.renderLabel(Oe))}renderIcon(Oe){let Qe=this.createIconClass(Oe);return Fs.div({className:Qe},Oe.title.icon,Oe.title.iconLabel)}renderLabel(Oe){let Qe=this.formatLabel(Oe);return Fs.div({className:"lm-MenuBar-itemLabel"},Qe)}createItemClass(Oe){let Qe="lm-MenuBar-item";return Oe.title.className&&(Qe+=` ${Oe.title.className}`),Oe.active&&!Oe.disabled&&(Qe+=" lm-mod-active"),Qe}createItemDataset(Oe){return Oe.title.dataset}createItemARIA(Oe){return{role:"menuitem","aria-haspopup":"true","aria-disabled":Oe.disabled?"true":"false"}}createIconClass(Oe){let Qe="lm-MenuBar-itemIcon",dt=Oe.title.iconClass;return dt?`${Qe} ${dt}`:Qe}formatLabel(Oe){let{label:Qe,mnemonic:dt}=Oe.title;if(dt<0||dt>=Qe.length)return Qe;let Jt=Qe.slice(0,dt),jt=Qe.slice(dt+1),Xt=Qe[dt],nr=Fs.span({className:"lm-MenuBar-itemMnemonic"},Xt);return[Jt,nr,jt]}}We.Renderer=oe,We.defaultRenderer=new oe})(lw||(lw={}));var uw;(function(We){function oe(){let Oe=document.createElement("div"),Qe=document.createElement("ul");return Qe.className="lm-MenuBar-content",Oe.appendChild(Qe),Qe.setAttribute("role","menubar"),Oe}We.createNode=oe;function Ie(Oe,Qe,dt){let Jt=-1,jt=-1,Xt=!1,nr=Qe.toUpperCase();for(let Ht=0,er=Oe.length;Ht<er;++Ht){let ur=(Ht+dt)%er,ir=Oe[ur].title;if(ir.label.length===0)continue;let Ot=ir.mnemonic;if(Ot>=0&&Ot<ir.label.length){ir.label[Ot].toUpperCase()===nr&&(Jt===-1?Jt=ur:Xt=!0);continue}jt===-1&&ir.label[0].toUpperCase()===nr&&(jt=ur)}return{index:Jt,multiple:Xt,auto:jt}}We.findMnemonic=Ie})(uw||(uw={}));var Sj;(function(We){function oe(){let Oe=document.createElement("div"),Qe=document.createElement("div"),dt=document.createElement("div"),Jt=document.createElement("div"),jt=document.createElement("div");return Qe.className="lm-ScrollBar-button",dt.className="lm-ScrollBar-button",Qe.dataset.action="decrement",dt.dataset.action="increment",Jt.className="lm-ScrollBar-track",jt.className="lm-ScrollBar-thumb",Jt.appendChild(jt),Oe.appendChild(Qe),Oe.appendChild(Jt),Oe.appendChild(dt),Oe}We.createNode=oe;function Ie(Oe,Qe){return Oe.thumbNode.contains(Qe)?"thumb":Oe.trackNode.contains(Qe)?"track":Oe.decrementNode.contains(Qe)?"decrement":Oe.incrementNode.contains(Qe)?"increment":null}We.findPart=Ie})(Sj||(Sj={}));var tE=class extends r1{constructor(oe={}){super(oe),this._dirty=!1,this._items=[],this._box=null,this._hiddenMode=oe.hiddenMode!==void 0?oe.hiddenMode:Ya.HiddenMode.Display}get hiddenMode(){return this._hiddenMode}set hiddenMode(oe){this._hiddenMode!==oe&&(this._hiddenMode=oe,this.widgets.length>1&&this.widgets.forEach(Ie=>{Ie.hiddenMode=this._hiddenMode}))}dispose(){for(let oe of this._items)oe.dispose();this._box=null,this._items.length=0,super.dispose()}attachWidget(oe,Ie){this._hiddenMode===Ya.HiddenMode.Scale&&this._items.length>0?(this._items.length===1&&(this.widgets[0].hiddenMode=Ya.HiddenMode.Scale),Ie.hiddenMode=Ya.HiddenMode.Scale):Ie.hiddenMode=Ya.HiddenMode.Display,Sa.ArrayExt.insert(this._items,oe,new dv(Ie)),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeAttach),this.parent.node.appendChild(Ie.node),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterAttach),this.parent.fit()}moveWidget(oe,Ie,Oe){Sa.ArrayExt.move(this._items,oe,Ie),this.parent.update()}detachWidget(oe,Ie){let Oe=Sa.ArrayExt.removeAt(this._items,oe);this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.BeforeDetach),this.parent.node.removeChild(Ie.node),this.parent.isAttached&&za.sendMessage(Ie,Ya.Msg.AfterDetach),Oe.widget.node.style.zIndex="",this._hiddenMode===Ya.HiddenMode.Scale&&(Ie.hiddenMode=Ya.HiddenMode.Display,this._items.length===1&&(this._items[0].widget.hiddenMode=Ya.HiddenMode.Display)),Oe.dispose(),this.parent.fit()}onBeforeShow(oe){super.onBeforeShow(oe),this.parent.update()}onBeforeAttach(oe){super.onBeforeAttach(oe),this.parent.fit()}onChildShown(oe){this.parent.fit()}onChildHidden(oe){this.parent.fit()}onResize(oe){this.parent.isVisible&&this._update(oe.width,oe.height)}onUpdateRequest(oe){this.parent.isVisible&&this._update(-1,-1)}onFitRequest(oe){this.parent.isAttached&&this._fit()}_fit(){let oe=0,Ie=0;for(let dt=0,Jt=this._items.length;dt<Jt;++dt){let jt=this._items[dt];jt.isHidden||(jt.fit(),oe=Math.max(oe,jt.minWidth),Ie=Math.max(Ie,jt.minHeight))}let Oe=this._box=Os.boxSizing(this.parent.node);oe+=Oe.horizontalSum,Ie+=Oe.verticalSum;let Qe=this.parent.node.style;Qe.minWidth=`${oe}px`,Qe.minHeight=`${Ie}px`,this._dirty=!0,this.parent.parent&&za.sendMessage(this.parent.parent,Ya.Msg.FitRequest),this._dirty&&za.sendMessage(this.parent,Ya.Msg.UpdateRequest)}_update(oe,Ie){this._dirty=!1;let Oe=0;for(let Xt=0,nr=this._items.length;Xt<nr;++Xt)Oe+=+!this._items[Xt].isHidden;if(Oe===0)return;oe<0&&(oe=this.parent.node.offsetWidth),Ie<0&&(Ie=this.parent.node.offsetHeight),this._box||(this._box=Os.boxSizing(this.parent.node));let Qe=this._box.paddingTop,dt=this._box.paddingLeft,Jt=oe-this._box.horizontalSum,jt=Ie-this._box.verticalSum;for(let Xt=0,nr=this._items.length;Xt<nr;++Xt){let Ht=this._items[Xt];Ht.isHidden||(Ht.widget.node.style.zIndex=`${Xt}`,Ht.update(dt,Qe,Jt,jt))}}};var Ej;(function(We){function oe(Ie){return Ie.layout||new tE}We.createLayout=oe})(Ej||(Ej={}));var kj;(function(We){function oe(dt){return Oe[dt]}We.orientationFromPlacement=oe;function Ie(dt){return Qe[dt]}We.directionFromPlacement=Ie;let Oe={top:"horizontal",left:"vertical",right:"vertical",bottom:"horizontal"},Qe={top:"top-to-bottom",left:"left-to-right",right:"right-to-left",bottom:"bottom-to-top"}})(kj||(kj={}));var Nce="jp-RenderedPlotly",jce="jp-MaterialIcon jp-PlotlyIcon",dU="application/vnd.plotly.v1+json",cE=class We extends Ya{constructor(oe){super(),this.addClass(Nce),this._mimeType=oe.mimeType,this._img_el=document.createElement("img"),this._img_el.className="plot-img",this.node.appendChild(this._img_el),this._img_el.addEventListener("mouseenter",Ie=>{this.createGraph(this._model)})}renderModel(oe){if(this.hasGraphElement())return Promise.resolve();this._model=oe;let Ie=oe.data["image/png"];return Ie!=null?(this.updateImage(Ie),Promise.resolve()):this.createGraph(oe)}hasGraphElement(){return this.node.querySelector(".plot-container")!==null}updateImage(oe){this.hideGraph(),this._img_el.src="data:image/png;base64,"+oe,this.showImage()}hideGraph(){let oe=this.node.querySelector(".plot-container");oe!=null&&(oe.style.display="none")}showGraph(){let oe=this.node.querySelector(".plot-container");oe!=null&&(oe.style.display="block")}hideImage(){let oe=this.node.querySelector(".plot-img");oe!=null&&(oe.style.display="none")}showImage(){let oe=this.node.querySelector(".plot-img");oe!=null&&(oe.style.display="block")}createGraph(oe){let{data:Ie,layout:Oe,frames:Qe,config:dt}=oe.data[this._mimeType];return Oe.height||(Oe.height=360),(async()=>(We.Plotly===null&&(We.Plotly=await Promise.resolve().then(()=>hp(hU())),We._resolveLoadingPlotly()),We.loadingPlotly))().then(()=>We.Plotly.react(this.node,Ie,Oe,dt)).then(jt=>{this.showGraph(),this.hideImage(),this.update(),Qe&&We.Plotly.addFrames(this.node,Qe),this.node.offsetWidth>0&&this.node.offsetHeight>0&&We.Plotly.toImage(jt,{format:"png",width:this.node.offsetWidth,height:this.node.offsetHeight}).then(Xt=>{let nr=Xt.split(",")[1];oe.data["image/png"]!==nr&&oe.setData({data:{...oe.data,"image/png":nr}})}),this.node.on("plotly_webglcontextlost",()=>{let Xt=oe.data["image/png"];if(Xt!=null)return this.updateImage(Xt),Promise.resolve()})})}onAfterShow(oe){this.update()}onResize(oe){this.update()}onUpdateRequest(oe){We.Plotly&&this.isVisible&&this.hasGraphElement()&&We.Plotly.redraw(this.node).then(()=>{We.Plotly.Plots.resize(this.node)})}static{this.Plotly=null}static{this.loadingPlotly=new Promise(oe=>{We._resolveLoadingPlotly=oe})}},Uce={safe:!0,mimeTypes:[dU],createRenderer:We=>new cE(We)},qce=[{id:"@jupyterlab/plotly-extension:factory",rendererFactory:Uce,rank:2,dataType:"json",fileTypes:[{name:"plotly",mimeTypes:[dU],extensions:[".plotly",".plotly.json"],iconClass:jce}],documentWidgetFactoryOptions:{name:"Plotly",primaryFileType:"plotly",fileTypes:["plotly","json"],defaultFor:["plotly"]}}],$me=qce;export{dU as MIME_TYPE,cE as RenderedPlotly,$me as default,Uce as rendererFactory};
+/*! Bundled license information:
+
+plotly.js/dist/plotly.js:
+  (*!
+   * The buffer module from node.js, for the browser.
+   *
+   * @author   Feross Aboukhadijeh <https://feross.org>
+   * @license  MIT
+   *)
+  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
+  (*!
+   * Determine if an object is a Buffer
+   *
+   * @author   Feross Aboukhadijeh <https://feross.org>
+   * @license  MIT
+   *)
+  (*!
+   * pad-left <https://github.com/jonschlinkert/pad-left>
+   *
+   * Copyright (c) 2014-2015, Jon Schlinkert.
+   * Licensed under the MIT license.
+   *)
+  (*!
+   * repeat-string <https://github.com/jonschlinkert/repeat-string>
+   *
+   * Copyright (c) 2014-2015, Jon Schlinkert.
+   * Licensed under the MIT License.
+   *)
+  (*! Bundled license information:
+
+  native-promise-only/lib/npo.src.js:
+    (*! Native Promise Only
+        v0.8.1 (c) Kyle Simpson
+        MIT License: http://getify.mit-license.org
+    *)
+
+  polybooljs/index.js:
+    (*
+     * @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc
+     * @license MIT
+     * @preserve Project Home: https://github.com/voidqk/polybooljs
+     *)
+
+  ieee754/index.js:
+    (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
+
+  buffer/index.js:
+    (*!
+     * The buffer module from node.js, for the browser.
+     *
+     * @author   Feross Aboukhadijeh <https://feross.org>
+     * @license  MIT
+     *)
+
+  safe-buffer/index.js:
+    (*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
+
+  assert/build/internal/util/comparisons.js:
+    (*!
+     * The buffer module from node.js, for the browser.
+     *
+     * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+     * @license  MIT
+     *)
+
+  object-assign/index.js:
+    (*
+    object-assign
+    (c) Sindre Sorhus
+    @license MIT
+    *)
+
+  maplibre-gl/dist/maplibre-gl-shared.mjs:
+  maplibre-gl/dist/maplibre-gl.mjs:
+    (**
+    * MapLibre GL JS
+    * @license 3-Clause BSD. Full text of license: https://github.com/maplibre/maplibre-gl-js/blob/v6.9.0/LICENSE.txt
+    *)
+  *)
+*/
diff -Nru plotly-5.20.0+dfsg/js/package-lock.json plotly-7.1.0+dfsg1/js/package-lock.json
--- plotly-5.20.0+dfsg/js/package-lock.json	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/package-lock.json	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,4840 @@
+{
+  "name": "jupyterlab-plotly",
+  "version": "7.1.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "jupyterlab-plotly",
+      "version": "7.1.0",
+      "license": "MIT",
+      "dependencies": {
+        "@lumino/widgets": "~2.9.0",
+        "lodash-es": "^4.17.21",
+        "plotly.js": "4.1.1"
+      },
+      "devDependencies": {
+        "@jupyter/builder": "^1.2.2",
+        "@types/plotly.js": "^3.0.13",
+        "esbuild": "^0.28.2",
+        "typescript": "^7.0.2"
+      }
+    },
+    "node_modules/@choojs/findup": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz",
+      "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==",
+      "dependencies": {
+        "commander": "^2.15.1"
+      },
+      "bin": {
+        "findup": "bin/findup.js"
+      }
+    },
+    "node_modules/@choojs/findup/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "node_modules/@emnapi/core": {
+      "version": "1.11.3",
+      "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz",
+      "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/wasi-threads": "1.2.3",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@emnapi/runtime": {
+      "version": "1.11.3",
+      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
+      "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@emnapi/wasi-threads": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz",
+      "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
+      "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
+      "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
+      "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
+      "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
+      "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
+      "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
+      "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
+      "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
+      "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
+      "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
+      "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
+      "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
+      "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
+      "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
+      "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
+      "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
+      "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
+      "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
+      "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
+      "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
+      "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
+      "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
+      "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
+      "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
+      "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
+      "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@jupyter/builder": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@jupyter/builder/-/builder-1.2.3.tgz",
+      "integrity": "sha512-QnST5NZPmYHT7IMfLu1TxQobkxgNbDWULuDQcWRJObxLn6yyZ76hSXkNqlQh7GNLq3MNx3IG54a985ExTwLRDw==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@jupyterlab/core-meta": "^4.6.1",
+        "@module-federation/runtime-tools": "^2.0.0",
+        "@rspack/core": "^2.1.7",
+        "ajv": "^8.12.0",
+        "commander": "^9.4.1",
+        "css-loader": "^7.1.4",
+        "duplicate-package-checker-webpack-plugin": "^3.0.0",
+        "fs-extra": "^10.1.0",
+        "glob": "^13.0.6",
+        "license-webpack-plugin": "^4.0.2",
+        "mini-svg-data-uri": "^1.4.4",
+        "path-browserify": "^1.0.0",
+        "process": "^0.11.10",
+        "style-loader": "^4.0.0",
+        "supports-color": "^7.2.0",
+        "webpack-merge": "^5.8.0"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/@napi-rs/wasm-runtime": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz",
+      "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@tybys/wasm-util": "^0.10.3"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/Brooooooklyn"
+      },
+      "peerDependencies": {
+        "@emnapi/core": "^1.7.1",
+        "@emnapi/runtime": "^1.7.1"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.1.8.tgz",
+      "integrity": "sha512-tmAyHzDbPiy8V7HvQqtuPsbs6dPgwV0YjzW5XrPRV9gzf+Hdm7pvsZJKE1QKO9WV5RuvGYav98xIX6O+abZxzQ==",
+      "dev": true,
+      "license": "MIT",
+      "optionalDependencies": {
+        "@rspack/binding-darwin-arm64": "2.1.8",
+        "@rspack/binding-darwin-x64": "2.1.8",
+        "@rspack/binding-linux-arm64-gnu": "2.1.8",
+        "@rspack/binding-linux-arm64-musl": "2.1.8",
+        "@rspack/binding-linux-riscv64-gnu": "2.1.8",
+        "@rspack/binding-linux-riscv64-musl": "2.1.8",
+        "@rspack/binding-linux-x64-gnu": "2.1.8",
+        "@rspack/binding-linux-x64-musl": "2.1.8",
+        "@rspack/binding-wasm32-wasi": "2.1.8",
+        "@rspack/binding-win32-arm64-msvc": "2.1.8",
+        "@rspack/binding-win32-ia32-msvc": "2.1.8",
+        "@rspack/binding-win32-x64-msvc": "2.1.8"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-darwin-arm64": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.1.8.tgz",
+      "integrity": "sha512-kia+eWtyWPvR4ntg1bWYoVU8nLPbUg2fG3zgBEocsTcsh5ZENSiEPxEKymDgMyIMONUqj611E0775cdUBoNmqw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-darwin-x64": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.1.8.tgz",
+      "integrity": "sha512-08pBkFhlD3Y3Qzh94w/Fc3skaIE3e96kl2P14m8+tnYTcglpOfpA2OwS3iHt9fOqy0HjoAVe6/MW3cBgs5iabA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-linux-arm64-gnu": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.1.8.tgz",
+      "integrity": "sha512-KLniMc9GzhKpVqhPzaJo3KJwzdAllXVVqZIk/uL1QipXOxs57fgM4u7IexKPFVla0o/u1PQG/Ah2YLDmda24Ow==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-linux-arm64-musl": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.1.8.tgz",
+      "integrity": "sha512-yUKAxHNGnICtw5RnxFWu4dHtsz/tdt7rbeFcsINNVre9HcrRxf5XP+FbOGL/SMxd9oM9XCo10paU2WckTKwbEA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-linux-x64-gnu": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.1.8.tgz",
+      "integrity": "sha512-EyegohSx0BJRqieCg9f/caCqFARRWkqI5hwJt6k530MoOTLeq8I3vsbeg24/2MktwIC1dmJi8bl0+WhPKQs4eQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-linux-x64-musl": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.1.8.tgz",
+      "integrity": "sha512-I6E+goN+UQ297q4r1qdbiAyNCI3t0+a5Y0xDIAPOZfRDRxDTnH/LF8/y65gjsJoKRKyn7zxRC0T/NURTkRNQ9A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-wasm32-wasi": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.1.8.tgz",
+      "integrity": "sha512-om7GAKWAU3lcSvbCon2m7mzw8v9OTrO2LW2MZ1lGe/uVJJmwGGkl9HVoXFyWFLrN6YVFyx8iP+AkN4owDWB9Cw==",
+      "cpu": [
+        "wasm32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/core": "1.11.3",
+        "@emnapi/runtime": "1.11.3",
+        "@napi-rs/wasm-runtime": "1.1.6"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-win32-arm64-msvc": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.1.8.tgz",
+      "integrity": "sha512-WDnsP/SUb9zbxyGX9XjPw5AXrX86u5oidn0MDdfJduOOqdCSpHwmRjlQ8NUJhbBq9WqVJMFlcab7NwZVWX/yyg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-win32-ia32-msvc": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.1.8.tgz",
+      "integrity": "sha512-QiMQMPNDiY3dhhaIdaFPzcPDC06cEYkNY89ea+EmDvNVgZq6V+2mFS/WnzZVMeEbGAYJCjsv/ABhhLT1hlYMvg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/binding-win32-x64-msvc": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.1.8.tgz",
+      "integrity": "sha512-b7sA5eB64vo2mbsuc//MOYzVLeCKHPn0dfP/GmNEoHdWbhRgZ/orZLWurYMQj04ELTLW6YCJEy59g5KRzNYHfw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@jupyter/builder/node_modules/@rspack/core": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.1.8.tgz",
+      "integrity": "sha512-na1kyA6Mj8/LWw9O3A8NsrG9rNKN3Iq2WiXrEuIwsU5r/Nl/evm3hO7bWKHxgsRyydI6W7okwx3MXgf8rzel6g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@rspack/binding": "2.1.8"
+      },
+      "engines": {
+        "node": "^20.19.0 || >=22.12.0"
+      },
+      "peerDependencies": {
+        "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0",
+        "@swc/helpers": "^0.5.23"
+      },
+      "peerDependenciesMeta": {
+        "@module-federation/runtime-tools": {
+          "optional": true
+        },
+        "@swc/helpers": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/balanced-match": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+      "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "18 || 20 || >=22"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/brace-expansion": {
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
+      "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^4.0.2"
+      },
+      "engines": {
+        "node": "20 || >=22"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/css-loader": {
+      "version": "7.1.4",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.4.tgz",
+      "integrity": "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "icss-utils": "^5.1.0",
+        "postcss": "^8.4.40",
+        "postcss-modules-extract-imports": "^3.1.0",
+        "postcss-modules-local-by-default": "^4.0.5",
+        "postcss-modules-scope": "^3.2.0",
+        "postcss-modules-values": "^4.0.0",
+        "postcss-value-parser": "^4.2.0",
+        "semver": "^7.6.3"
+      },
+      "engines": {
+        "node": ">= 18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0",
+        "webpack": "^5.27.0"
+      },
+      "peerDependenciesMeta": {
+        "@rspack/core": {
+          "optional": true
+        },
+        "webpack": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/glob": {
+      "version": "13.0.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
+      "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "minimatch": "^10.2.2",
+        "minipass": "^7.1.3",
+        "path-scurry": "^2.0.2"
+      },
+      "engines": {
+        "node": "18 || 20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/license-webpack-plugin": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz",
+      "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "webpack-sources": "^3.0.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack": {
+          "optional": true
+        },
+        "webpack-sources": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/minimatch": {
+      "version": "10.2.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
+      "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "brace-expansion": "^5.0.8"
+      },
+      "engines": {
+        "node": "18 || 20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/style-loader": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz",
+      "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.27.0"
+      }
+    },
+    "node_modules/@jupyter/builder/node_modules/webpack-sources": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz",
+      "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/@jupyterlab/core-meta": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/@jupyterlab/core-meta/-/core-meta-4.6.2.tgz",
+      "integrity": "sha512-OniB/NCYrTSOK4EOsHrUllv5d78bEZy7ccqTU5/d7Nw+CiGymmVhi2ijtWN+YPCmQ/xh3zZlO2cL5a/YW4Ty2Q==",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@lumino/algorithm": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.5.tgz",
+      "integrity": "sha512-yW5k0IRrNlNDL9/hLOPr0XaMYf7YSZ5a/uJ++a92ziBe7v7a3xzBJ1+Awhb6fMyanE0Mz97UOQIsHa3vWB0UQA==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@lumino/collections": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.5.tgz",
+      "integrity": "sha512-iRthCb6cMoq1rcd4OC8dNFU7v/YbJOw647kzqrMxLPlQmMeeY5wHxF/W9qCb01VUI3zyxvh0/ND4DHB4mruJfA==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5"
+      }
+    },
+    "node_modules/@lumino/commands": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.4.tgz",
+      "integrity": "sha512-bmCdM7jxX25s9ydKZcWmF7xL051MsG5fJ9IyCHoOPcKm3keuwX3wY1PpVERuooUvU6zZfI7+LFaolWX0eCs2Hw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5",
+        "@lumino/coreutils": "^2.2.3",
+        "@lumino/disposable": "^2.1.6",
+        "@lumino/domutils": "^2.0.5",
+        "@lumino/keyboard": "^2.0.5",
+        "@lumino/signaling": "^2.1.6",
+        "@lumino/virtualdom": "^2.0.5"
+      }
+    },
+    "node_modules/@lumino/coreutils": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.3.tgz",
+      "integrity": "sha512-YxmayMeq8VJCPqo1okpsA3oOoz0eZeG5qedOLmopm+N/GwQT7S34QPPts49omVUwTJ0Xo8fGzOsxnS/LwnVl1Q==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5"
+      }
+    },
+    "node_modules/@lumino/disposable": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.6.tgz",
+      "integrity": "sha512-mTDBsftt+dWkP3MeeLuYjJ7mtOcrMld6Pq4h7EY6HzhPSdPXzvQELZ29vpc1lq6EWz/fzCfpoE+W8AzNUCHTLg==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/signaling": "^2.1.6"
+      }
+    },
+    "node_modules/@lumino/domutils": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.5.tgz",
+      "integrity": "sha512-4zsSqWqAHvOFJTtvyAZsQu7qL5ZZRu37mTzppZNAI3a91jlIben3NbAMGZiyZeAnv3b9Z7S5sPOVWZKkJyhegg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@lumino/dragdrop": {
+      "version": "2.1.9",
+      "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.9.tgz",
+      "integrity": "sha512-gwkdJNLrRE8GVh4Z70Yj5fhpasQNDkt8Z/aOneQbL4T1bpsMTwzdn3t/2pIZaWngrEqCGnj0ofUUuQAYZuQMyw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/coreutils": "^2.2.3",
+        "@lumino/disposable": "^2.1.6"
+      }
+    },
+    "node_modules/@lumino/keyboard": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.5.tgz",
+      "integrity": "sha512-YB7kmE0+ZeZ6oN/Qps6Ln8MXe4rZQh+27ex4GTJuxTMvvbqFhDW6mc/zN6av22HYxDlOF55YlzNhjk2LpD8k7A==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@lumino/messaging": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.5.tgz",
+      "integrity": "sha512-LNvV9xW6pkVuW8n4vFYxboJFOtt2WRJZMrg3Ta6C6LcfazVQy+ubiC8GRqBMq2ufZ1zclOWQII5QFC1wxFm6dg==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5",
+        "@lumino/collections": "^2.0.5"
+      }
+    },
+    "node_modules/@lumino/properties": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.5.tgz",
+      "integrity": "sha512-+Yoo9lb/hzNKFXpkRaEC4r7aMe8prbEhscAbA/vyzqmY4NYjZsiqhxHUgyKgtGHosrrpY59Qv4ha+5csU08zsw==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@lumino/signaling": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.6.tgz",
+      "integrity": "sha512-PEB2nuNyippF/vj28oiDm7Zy8vAeVq07NE59L79GhaTe9i37TCjtA3+67DJnVGn1+fQPfexs6HdrY/90JFFwiw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5",
+        "@lumino/coreutils": "^2.2.3"
+      }
+    },
+    "node_modules/@lumino/virtualdom": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.5.tgz",
+      "integrity": "sha512-Qgvtv9Iruny+p2y/jPWo9tOcUqS+Nlcwg14+m+xJEclFyVTpY8gGJKTDY8Y1wVO5PpQjRPNdbF8lxzrGR/89IA==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5"
+      }
+    },
+    "node_modules/@lumino/widgets": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.9.0.tgz",
+      "integrity": "sha512-cLiHV/QJxP54Bg+Ixa24VDzj48YkgtW7drBI4gRAZqM1e3zcDF4HoDT0BsobRq4A7oaFmqNhzD/PMTtw9w9zJg==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@lumino/algorithm": "^2.0.5",
+        "@lumino/commands": "^2.3.4",
+        "@lumino/coreutils": "^2.2.3",
+        "@lumino/disposable": "^2.1.6",
+        "@lumino/domutils": "^2.0.5",
+        "@lumino/dragdrop": "^2.1.9",
+        "@lumino/keyboard": "^2.0.5",
+        "@lumino/messaging": "^2.0.5",
+        "@lumino/properties": "^2.0.5",
+        "@lumino/signaling": "^2.1.6",
+        "@lumino/virtualdom": "^2.0.5"
+      }
+    },
+    "node_modules/@mapbox/jsonlint-lines-primitives": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.3.tgz",
+      "integrity": "sha512-0SElaV0uMxEnxzBhhX9WTuPyUeMsAN/SS0i16tjuba4/mio63MG9khjC1a0JAiPGXAwvwm4UfHJURCN7nyudQg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 22"
+      }
+    },
+    "node_modules/@mapbox/point-geometry": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz",
+      "integrity": "sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==",
+      "license": "ISC"
+    },
+    "node_modules/@mapbox/tiny-sdf": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.2.0.tgz",
+      "integrity": "sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==",
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/@mapbox/unitbezier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-1.0.0.tgz",
+      "integrity": "sha512-fqd515fjBmANKGGsQ286E2Wvj/XvDFpGzwJxq4CI6jMQue6Oy04uCKp+JWKF00xRTmk6cEu1jPJ9p3xqH8YWqQ==",
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/@mapbox/vector-tile": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-3.0.0.tgz",
+      "integrity": "sha512-Qf10S1uIHMk20ri/IVBnpS+esUEkVaR5Hftmz88jTInrpmWgPGJfPe3LVjjlE77trLx8tH6qjTG7uWH9hIq/0Q==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@mapbox/point-geometry": "~1.1.0",
+        "@types/geojson": "^7946.0.16",
+        "pbf": "^5.0.0"
+      }
+    },
+    "node_modules/@maplibre/geojson-vt": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@maplibre/geojson-vt/-/geojson-vt-6.1.1.tgz",
+      "integrity": "sha512-FVMOcmSP/yqol45t7StApEyTL5/vmqBCuFhH9n+fFuINenhaX+YgHHIt1yJ86S8kln3uJLcMvmEU2cfn6E2eCQ==",
+      "license": "ISC",
+      "dependencies": {
+        "kdbush": "^4.1.0"
+      }
+    },
+    "node_modules/@maplibre/maplibre-gl-style-spec": {
+      "version": "26.4.2",
+      "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-26.4.2.tgz",
+      "integrity": "sha512-6J0vZqMZvRAJKtdWJdDGHEh1YJ2ZHG08/GOur8gCArYhO8ZkM//OXqtI2AAEz4jc2G+Wq4MfcePg8qNK5TZ4Kg==",
+      "license": "ISC",
+      "dependencies": {
+        "@mapbox/jsonlint-lines-primitives": "^2.0.3",
+        "@mapbox/unitbezier": "^1.0.0",
+        "json-stringify-pretty-compact": "^4.0.0",
+        "minimist": "^1.2.8",
+        "quickselect": "^3.0.0",
+        "tinyqueue": "^3.0.0"
+      },
+      "bin": {
+        "gl-style-format": "dist/gl-style-format.mjs",
+        "gl-style-migrate": "dist/gl-style-migrate.mjs",
+        "gl-style-validate": "dist/gl-style-validate.mjs"
+      }
+    },
+    "node_modules/@maplibre/mlt": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@maplibre/mlt/-/mlt-1.3.0.tgz",
+      "integrity": "sha512-7M2O7ABM80Oi8XPkfkrjKB8mOBIxGoVgkA52Mu4RMWoBvvMdagQ522+WxVYujZsMpqIr3BpzrTbXrm4k8lCzCQ==",
+      "license": "(MIT OR Apache-2.0)",
+      "dependencies": {
+        "@mapbox/point-geometry": "^1.1.0"
+      }
+    },
+    "node_modules/@maplibre/vt-pbf": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@maplibre/vt-pbf/-/vt-pbf-4.3.2.tgz",
+      "integrity": "sha512-j6p0AdjvAR19Z3XaCysle7A4ZSo08tYOzxD0Y9NQylwPAkwJJeYub5b2eVucdeDh7erhv69DahoLOevDRERRUw==",
+      "license": "MIT",
+      "dependencies": {
+        "@mapbox/point-geometry": "^1.1.0",
+        "@types/geojson": "^7946.0.16",
+        "pbf": "^5.1.0"
+      }
+    },
+    "node_modules/@module-federation/error-codes": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-2.8.2.tgz",
+      "integrity": "sha512-8inlDv48QOjA//CLQ3epjoHEiMQGsz1Pmtu2N+s7gQVggn6AYHpjnMe8AsyGxtpaPg3wbX0HmBZtRFggpXUB9A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@module-federation/runtime": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-2.8.2.tgz",
+      "integrity": "sha512-SUoP+PD5EjSPSi6FxEPGIZoRkFifxdeYcVQbJE9mO0VEjF51gAk3/TgX8k0vzUryOBPmXekLr9SfQXU6DqUtvA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@module-federation/error-codes": "2.8.2",
+        "@module-federation/runtime-core": "2.8.2",
+        "@module-federation/sdk": "2.8.2"
+      }
+    },
+    "node_modules/@module-federation/runtime-core": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-2.8.2.tgz",
+      "integrity": "sha512-PEkkK9MUp+nUCeQMS4ox3QGZfwwxgfjGA7P4umEnr5c3y8DLNDR+26tyHf/Gkjen2VsjlcyL+mEAQo1Zi4IE3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@module-federation/error-codes": "2.8.2",
+        "@module-federation/sdk": "2.8.2"
+      }
+    },
+    "node_modules/@module-federation/runtime-tools": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-2.8.2.tgz",
+      "integrity": "sha512-eW/yPvZB2LbpbyPXPTnOeF1ieWl165D9QcPV0y5Bj1QYGDjL2cb+dnzrBp0fmFtJhCYqmAdsVNoYItVa3yuJ3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@module-federation/runtime": "2.8.2",
+        "@module-federation/webpack-bundler-runtime": "2.8.2"
+      }
+    },
+    "node_modules/@module-federation/sdk": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-2.8.2.tgz",
+      "integrity": "sha512-OPS/lbQjraLXoWniQpCwQ/vqgURHTrhsackSNcOPmcJHM3LyR+DabxUc0pl8jAqExsW2l+uepQq7+/Gkei871w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@module-federation/webpack-bundler-runtime": {
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-2.8.2.tgz",
+      "integrity": "sha512-g4xQgfgMMCKgJjVMBh7nIYGjLGNDYwSZ4lfpTdkVyWDnxmR3SL6VPQTJEZHRYPyqvrTtZE1zdDhDd++yNRvLdA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@module-federation/error-codes": "2.8.2",
+        "@module-federation/runtime": "2.8.2",
+        "@module-federation/sdk": "2.8.2"
+      }
+    },
+    "node_modules/@plotly/d3": {
+      "version": "3.8.2",
+      "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz",
+      "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA=="
+    },
+    "node_modules/@plotly/d3-sankey": {
+      "version": "0.12.3",
+      "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.12.3.tgz",
+      "integrity": "sha512-GvR0JmTO5bN1iyU3Z4lhq/68De+JAh2NBjNkFWPO6ThExLVrnysxir2riqeDMTgiPbx5iBonAy29/OEd8uak5Q==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "d3-array": "1 - 2",
+        "d3-shape": "^1.2.0"
+      }
+    },
+    "node_modules/@plotly/d3-sankey-circular": {
+      "version": "0.33.1",
+      "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz",
+      "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==",
+      "dependencies": {
+        "d3-array": "^1.2.1",
+        "d3-collection": "^1.0.4",
+        "d3-shape": "^1.2.0",
+        "elementary-circuits-directed-graph": "^1.0.4"
+      }
+    },
+    "node_modules/@plotly/point-cluster": {
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz",
+      "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==",
+      "dependencies": {
+        "array-bounds": "^1.0.1",
+        "binary-search-bounds": "^2.0.4",
+        "clamp": "^1.0.1",
+        "defined": "^1.0.0",
+        "dtype": "^2.0.0",
+        "flatten-vertex-data": "^1.0.2",
+        "is-obj": "^1.0.1",
+        "math-log2": "^1.0.1",
+        "parse-rect": "^1.2.0",
+        "pick-by-alias": "^1.2.0"
+      }
+    },
+    "node_modules/@plotly/regl": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz",
+      "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw=="
+    },
+    "node_modules/@rspack/binding-linux-riscv64-gnu": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.1.8.tgz",
+      "integrity": "sha512-gg4S1jaitwYPHR9HZ3zNGH1EK2GXINm66p4kEpOP1gbc+akyOouVF/dMcu9NGPlRg58FbEhVRZYKu7Z/zcpKHg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rspack/binding-linux-riscv64-musl": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.1.8.tgz",
+      "integrity": "sha512-b/aU5j1h368SLNyz5u+flqpZVhzSZ1UIslaj9sZJuAvqkGWv3xsjc/28/PTo/RYXCxd0FNVAxTxWHKvRiAAS8w==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@turf/area": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.4.0.tgz",
+      "integrity": "sha512-B7q5f6QwKIxxbl4/L59lAYA+FF7h2hv6st96PuKue0TGCYGSxAG/lV8LHSPUSOuOrLywN4jytJcKK3vOFBs7Nw==",
+      "license": "MIT",
+      "dependencies": {
+        "@turf/helpers": "7.4.0",
+        "@turf/meta": "7.4.0",
+        "@types/geojson": "^7946.0.10",
+        "tslib": "^2.8.1"
+      },
+      "funding": {
+        "url": "https://opencollective.com/turf"
+      }
+    },
+    "node_modules/@turf/centroid": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.4.0.tgz",
+      "integrity": "sha512-WglCFe+TnMqeYa/LcbUp37NgIF0zHTNYmlxwUm40fyyzyLsYeDq4dgFWLTYpvRNqb5oIMV6xsBjSf+vCPtVJ6w==",
+      "license": "MIT",
+      "dependencies": {
+        "@turf/helpers": "7.4.0",
+        "@turf/meta": "7.4.0",
+        "@types/geojson": "^7946.0.10",
+        "tslib": "^2.8.1"
+      },
+      "funding": {
+        "url": "https://opencollective.com/turf"
+      }
+    },
+    "node_modules/@turf/helpers": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.4.0.tgz",
+      "integrity": "sha512-7PAwLZqOdRzTI5g9bHvUwlloAXPDH/mlajtryk0tw4ZwGMtmXsAyF4QundsAMfy4u48Fyd3AUqMXY0SMxqJGWg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/geojson": "^7946.0.10",
+        "tslib": "^2.8.1"
+      },
+      "funding": {
+        "url": "https://opencollective.com/turf"
+      }
+    },
+    "node_modules/@turf/meta": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.4.0.tgz",
+      "integrity": "sha512-3cLUvlEyDuSnMSzrjhaLAEiYR8xhbfWyTVQlrlEw40xL81d4KF4PqUWbjTXKpXZStdYbet2GCurl79KMypNw6g==",
+      "license": "MIT",
+      "dependencies": {
+        "@turf/helpers": "7.4.0",
+        "@types/geojson": "^7946.0.10",
+        "tslib": "^2.8.1"
+      },
+      "funding": {
+        "url": "https://opencollective.com/turf"
+      }
+    },
+    "node_modules/@tybys/wasm-util": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
+      "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@types/d3": {
+      "version": "3.5.53",
+      "resolved": "https://registry.npmjs.org/@types/d3/-/d3-3.5.53.tgz",
+      "integrity": "sha512-8yKQA9cAS6+wGsJpBysmnhlaaxlN42Qizqkw+h2nILSlS+MAG2z4JdO6p+PJrJ+ACvimkmLJL281h157e52psQ==",
+      "license": "MIT"
+    },
+    "node_modules/@types/eslint": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "node_modules/@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+      "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@types/geojson": {
+      "version": "7946.0.16",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+      "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@types/node": {
+      "version": "22.13.10",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
+      "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "undici-types": "~6.20.0"
+      }
+    },
+    "node_modules/@types/plotly.js": {
+      "version": "3.0.13",
+      "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-3.0.13.tgz",
+      "integrity": "sha512-mWI1NZRDHDoiFiPEvUjR0P12fv21kmT8XSLrEjfNwIDahELaXXkSz38n6o+5SYsq0YEGxkK3ANqqM0cRl8uZdg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@typescript/typescript-aix-ppc64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
+      "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-darwin-arm64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
+      "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-darwin-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
+      "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-freebsd-arm64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
+      "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-freebsd-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
+      "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-arm": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
+      "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-arm64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
+      "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-loong64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
+      "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-mips64el": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
+      "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-ppc64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
+      "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-riscv64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
+      "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-s390x": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
+      "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-linux-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
+      "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-netbsd-arm64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
+      "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-netbsd-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
+      "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-openbsd-arm64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
+      "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-openbsd-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
+      "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-sunos-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
+      "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-win32-arm64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
+      "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@typescript/typescript-win32-x64": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
+      "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
+    "node_modules/@webassemblyjs/ast": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+      "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/helper-numbers": "1.13.2",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+      "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+      "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-buffer": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+      "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-numbers": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+      "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+        "@webassemblyjs/helper-api-error": "1.13.2",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+      "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-wasm-section": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+      "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/wasm-gen": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/ieee754": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+      "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "node_modules/@webassemblyjs/leb128": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+      "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/utf8": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+      "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/wasm-edit": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+      "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/helper-wasm-section": "1.14.1",
+        "@webassemblyjs/wasm-gen": "1.14.1",
+        "@webassemblyjs/wasm-opt": "1.14.1",
+        "@webassemblyjs/wasm-parser": "1.14.1",
+        "@webassemblyjs/wast-printer": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-gen": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+      "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/ieee754": "1.13.2",
+        "@webassemblyjs/leb128": "1.13.2",
+        "@webassemblyjs/utf8": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-opt": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+      "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-buffer": "1.14.1",
+        "@webassemblyjs/wasm-gen": "1.14.1",
+        "@webassemblyjs/wasm-parser": "1.14.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-parser": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+      "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@webassemblyjs/helper-api-error": "1.13.2",
+        "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+        "@webassemblyjs/ieee754": "1.13.2",
+        "@webassemblyjs/leb128": "1.13.2",
+        "@webassemblyjs/utf8": "1.13.2"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+      "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.14.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/abs-svg-path": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz",
+      "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==",
+      "license": "MIT"
+    },
+    "node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "dev": true,
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/ajv-formats": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ajv-keywords": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3"
+      },
+      "peerDependencies": {
+        "ajv": "^8.8.2"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/array-bounds": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz",
+      "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ=="
+    },
+    "node_modules/array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/array-normalize": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz",
+      "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==",
+      "dependencies": {
+        "array-bounds": "^1.0.0"
+      }
+    },
+    "node_modules/array-range": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz",
+      "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA=="
+    },
+    "node_modules/base64-arraybuffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/bidi-js": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz",
+      "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==",
+      "license": "MIT",
+      "dependencies": {
+        "require-from-string": "^2.0.2"
+      }
+    },
+    "node_modules/binary-search-bounds": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz",
+      "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA=="
+    },
+    "node_modules/bit-twiddle": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz",
+      "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA=="
+    },
+    "node_modules/bitmap-sdf": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz",
+      "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==",
+      "license": "MIT"
+    },
+    "node_modules/bl": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
+      "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
+      "dependencies": {
+        "readable-stream": "^2.3.5",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.24.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+      "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "peer": true,
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001688",
+        "electron-to-chromium": "^1.5.73",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.1"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001706",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz",
+      "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "peer": true
+    },
+    "node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/chalk/node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/chalk/node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/chrome-trace-event": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
+    "node_modules/clamp": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
+      "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA=="
+    },
+    "node_modules/clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+      "dev": true,
+      "dependencies": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/color-alpha": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz",
+      "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==",
+      "dependencies": {
+        "color-parse": "^1.3.8"
+      }
+    },
+    "node_modules/color-alpha/node_modules/color-parse": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz",
+      "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==",
+      "dependencies": {
+        "color-name": "^1.0.0"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/color-id": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz",
+      "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==",
+      "dependencies": {
+        "clamp": "^1.0.1"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+    },
+    "node_modules/color-normalize": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz",
+      "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==",
+      "dependencies": {
+        "clamp": "^1.0.1",
+        "color-rgba": "^2.1.1",
+        "dtype": "^2.0.0"
+      }
+    },
+    "node_modules/color-normalize/node_modules/color-parse": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz",
+      "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==",
+      "dependencies": {
+        "color-name": "^1.0.0"
+      }
+    },
+    "node_modules/color-normalize/node_modules/color-rgba": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.4.0.tgz",
+      "integrity": "sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==",
+      "dependencies": {
+        "color-parse": "^1.4.2",
+        "color-space": "^2.0.0"
+      }
+    },
+    "node_modules/color-space": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.3.1.tgz",
+      "integrity": "sha512-5DJdKYwoDji3ik/i0xSn+SiwXsfwr+1FEcCMUz2GS5speGCfGSbBMOLd84SDUBOuX8y4CvdFJmOBBJuC4wp7sQ=="
+    },
+    "node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
+    "node_modules/concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "engines": [
+        "node >= 0.8"
+      ],
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+    },
+    "node_modules/country-iso-search": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/country-iso-search/-/country-iso-search-0.1.2.tgz",
+      "integrity": "sha512-7VMhhWPSNg/ivAUwp3BvxEGDycCfqiTggaV+hAW+N5+F+jzbEuY5HqvSMnGeP9CxKXBWO0fydbUgLUHmKj89vA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/css-font": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz",
+      "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==",
+      "dependencies": {
+        "css-font-size-keywords": "^1.0.0",
+        "css-font-stretch-keywords": "^1.0.1",
+        "css-font-style-keywords": "^1.0.1",
+        "css-font-weight-keywords": "^1.0.0",
+        "css-global-keywords": "^1.0.1",
+        "css-system-font-keywords": "^1.0.0",
+        "pick-by-alias": "^1.2.0",
+        "string-split-by": "^1.0.0",
+        "unquote": "^1.1.0"
+      }
+    },
+    "node_modules/css-font-size-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz",
+      "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q=="
+    },
+    "node_modules/css-font-stretch-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz",
+      "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg=="
+    },
+    "node_modules/css-font-style-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz",
+      "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg=="
+    },
+    "node_modules/css-font-weight-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz",
+      "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA=="
+    },
+    "node_modules/css-global-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz",
+      "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ=="
+    },
+    "node_modules/css-system-font-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz",
+      "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA=="
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true,
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/culori": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/culori/-/culori-4.0.2.tgz",
+      "integrity": "sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/d": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+      "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
+      "dependencies": {
+        "es5-ext": "^0.10.64",
+        "type": "^2.7.2"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/d3-array": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+    },
+    "node_modules/d3-collection": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+      "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
+    },
+    "node_modules/d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dispatch": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+      "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
+    },
+    "node_modules/d3-force": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz",
+      "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==",
+      "dependencies": {
+        "d3-collection": "1",
+        "d3-dispatch": "1",
+        "d3-quadtree": "1",
+        "d3-timer": "1"
+      }
+    },
+    "node_modules/d3-format": {
+      "version": "1.4.5",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
+      "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
+    },
+    "node_modules/d3-geo": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
+      "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
+      "dependencies": {
+        "d3-array": "1"
+      }
+    },
+    "node_modules/d3-geo-projection": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz",
+      "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==",
+      "dependencies": {
+        "commander": "2",
+        "d3-array": "1",
+        "d3-geo": "^1.12.0",
+        "resolve": "^1.1.10"
+      },
+      "bin": {
+        "geo2svg": "bin/geo2svg",
+        "geograticule": "bin/geograticule",
+        "geoproject": "bin/geoproject",
+        "geoquantize": "bin/geoquantize",
+        "geostitch": "bin/geostitch"
+      }
+    },
+    "node_modules/d3-geo-projection/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "node_modules/d3-hierarchy": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+      "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
+    },
+    "node_modules/d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "dependencies": {
+        "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-path": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+    },
+    "node_modules/d3-quadtree": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz",
+      "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA=="
+    },
+    "node_modules/d3-shape": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+      "dependencies": {
+        "d3-path": "1"
+      }
+    },
+    "node_modules/d3-time": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+      "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
+    },
+    "node_modules/d3-time-format": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
+      "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
+      "dependencies": {
+        "d3-time": "1"
+      }
+    },
+    "node_modules/d3-timer": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+      "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
+    },
+    "node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/defined": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+      "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/detect-kerning": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz",
+      "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw=="
+    },
+    "node_modules/dtype": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz",
+      "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==",
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/dup": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz",
+      "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA=="
+    },
+    "node_modules/duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dependencies": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "node_modules/duplicate-package-checker-webpack-plugin": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz",
+      "integrity": "sha512-aO50/qPC7X2ChjRFniRiscxBLT/K01bALqfcDaf8Ih5OqQ1N4iT/Abx9Ofu3/ms446vHTm46FACIuJUmgUQcDQ==",
+      "dev": true,
+      "dependencies": {
+        "chalk": "^2.3.0",
+        "find-root": "^1.0.0",
+        "lodash": "^4.17.4",
+        "semver": "^5.4.1"
+      }
+    },
+    "node_modules/duplicate-package-checker-webpack-plugin/node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/earcut": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+      "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.120",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz",
+      "integrity": "sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/elementary-circuits-directed-graph": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz",
+      "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==",
+      "dependencies": {
+        "strongly-connected-components": "^1.0.1"
+      }
+    },
+    "node_modules/end-of-stream": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+      "dependencies": {
+        "once": "^1.4.0"
+      }
+    },
+    "node_modules/enhanced-resolve": {
+      "version": "5.18.1",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+      "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
+      "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/es5-ext": {
+      "version": "0.10.64",
+      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+      "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+      "hasInstallScript": true,
+      "dependencies": {
+        "es6-iterator": "^2.0.3",
+        "es6-symbol": "^3.1.3",
+        "esniff": "^2.0.1",
+        "next-tick": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/es6-iterator": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+      "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "node_modules/es6-symbol": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+      "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
+      "dependencies": {
+        "d": "^1.0.2",
+        "ext": "^1.7.0"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/es6-weak-map": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+      "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "^0.10.46",
+        "es6-iterator": "^2.0.3",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.28.2",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
+      "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.28.2",
+        "@esbuild/android-arm": "0.28.2",
+        "@esbuild/android-arm64": "0.28.2",
+        "@esbuild/android-x64": "0.28.2",
+        "@esbuild/darwin-arm64": "0.28.2",
+        "@esbuild/darwin-x64": "0.28.2",
+        "@esbuild/freebsd-arm64": "0.28.2",
+        "@esbuild/freebsd-x64": "0.28.2",
+        "@esbuild/linux-arm": "0.28.2",
+        "@esbuild/linux-arm64": "0.28.2",
+        "@esbuild/linux-ia32": "0.28.2",
+        "@esbuild/linux-loong64": "0.28.2",
+        "@esbuild/linux-mips64el": "0.28.2",
+        "@esbuild/linux-ppc64": "0.28.2",
+        "@esbuild/linux-riscv64": "0.28.2",
+        "@esbuild/linux-s390x": "0.28.2",
+        "@esbuild/linux-x64": "0.28.2",
+        "@esbuild/netbsd-arm64": "0.28.2",
+        "@esbuild/netbsd-x64": "0.28.2",
+        "@esbuild/openbsd-arm64": "0.28.2",
+        "@esbuild/openbsd-x64": "0.28.2",
+        "@esbuild/openharmony-arm64": "0.28.2",
+        "@esbuild/sunos-x64": "0.28.2",
+        "@esbuild/win32-arm64": "0.28.2",
+        "@esbuild/win32-ia32": "0.28.2",
+        "@esbuild/win32-x64": "0.28.2"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/escodegen": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+      "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+      "dependencies": {
+        "esprima": "^4.0.1",
+        "estraverse": "^5.2.0",
+        "esutils": "^2.0.2"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.6.1"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/eslint-scope/node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esniff": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+      "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+      "dependencies": {
+        "d": "^1.0.1",
+        "es5-ext": "^0.10.62",
+        "event-emitter": "^0.3.5",
+        "type": "^2.7.2"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/event-emitter": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+      "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/ext": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+      "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+      "dependencies": {
+        "type": "^2.7.2"
+      }
+    },
+    "node_modules/falafel": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz",
+      "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==",
+      "dependencies": {
+        "acorn": "^7.1.1",
+        "isarray": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "dev": true
+    },
+    "node_modules/fast-isnumeric": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz",
+      "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==",
+      "dependencies": {
+        "is-string-blank": "^1.0.1"
+      }
+    },
+    "node_modules/fast-uri": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+      "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ]
+    },
+    "node_modules/find-root": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+      "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+      "dev": true
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+      "dev": true,
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/flatten-vertex-data": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz",
+      "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==",
+      "dependencies": {
+        "dtype": "^2.0.0"
+      }
+    },
+    "node_modules/font-atlas": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz",
+      "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==",
+      "dependencies": {
+        "css-font": "^1.0.0"
+      }
+    },
+    "node_modules/font-measure": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz",
+      "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==",
+      "dependencies": {
+        "css-font": "^1.2.0"
+      }
+    },
+    "node_modules/from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "node_modules/fs-extra": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "dev": true,
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-canvas-context": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz",
+      "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A=="
+    },
+    "node_modules/gl-mat4": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz",
+      "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA=="
+    },
+    "node_modules/gl-matrix": {
+      "version": "3.4.4",
+      "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz",
+      "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==",
+      "license": "MIT"
+    },
+    "node_modules/gl-text": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.4.0.tgz",
+      "integrity": "sha512-o47+XBqLCj1efmuNyCHt7/UEJmB9l66ql7pnobD6p+sgmBUdzfMZXIF0zD2+KRfpd99DJN+QXdvTFAGCKCVSmQ==",
+      "dependencies": {
+        "bit-twiddle": "^1.0.2",
+        "color-normalize": "^1.5.0",
+        "css-font": "^1.2.0",
+        "detect-kerning": "^2.1.2",
+        "es6-weak-map": "^2.0.3",
+        "flatten-vertex-data": "^1.0.2",
+        "font-atlas": "^2.1.0",
+        "font-measure": "^1.2.2",
+        "gl-util": "^3.1.2",
+        "is-plain-obj": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "parse-rect": "^1.2.0",
+        "parse-unit": "^1.0.1",
+        "pick-by-alias": "^1.2.0",
+        "regl": "^2.0.0",
+        "to-px": "^1.0.1",
+        "typedarray-pool": "^1.1.0"
+      }
+    },
+    "node_modules/gl-util": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz",
+      "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==",
+      "dependencies": {
+        "is-browser": "^2.0.1",
+        "is-firefox": "^1.0.3",
+        "is-plain-obj": "^1.1.0",
+        "number-is-integer": "^1.0.1",
+        "object-assign": "^4.1.0",
+        "pick-by-alias": "^1.2.0",
+        "weak-map": "^1.0.5"
+      }
+    },
+    "node_modules/glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/glsl-inject-defines": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz",
+      "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==",
+      "dependencies": {
+        "glsl-token-inject-block": "^1.0.0",
+        "glsl-token-string": "^1.0.1",
+        "glsl-tokenizer": "^2.0.2"
+      }
+    },
+    "node_modules/glsl-resolve": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz",
+      "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==",
+      "dependencies": {
+        "resolve": "^0.6.1",
+        "xtend": "^2.1.2"
+      }
+    },
+    "node_modules/glsl-resolve/node_modules/resolve": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz",
+      "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg=="
+    },
+    "node_modules/glsl-resolve/node_modules/xtend": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz",
+      "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==",
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/glsl-token-assignments": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz",
+      "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ=="
+    },
+    "node_modules/glsl-token-defines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz",
+      "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==",
+      "dependencies": {
+        "glsl-tokenizer": "^2.0.0"
+      }
+    },
+    "node_modules/glsl-token-depth": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz",
+      "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg=="
+    },
+    "node_modules/glsl-token-descope": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz",
+      "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==",
+      "dependencies": {
+        "glsl-token-assignments": "^2.0.0",
+        "glsl-token-depth": "^1.1.0",
+        "glsl-token-properties": "^1.0.0",
+        "glsl-token-scope": "^1.1.0"
+      }
+    },
+    "node_modules/glsl-token-inject-block": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz",
+      "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA=="
+    },
+    "node_modules/glsl-token-properties": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz",
+      "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA=="
+    },
+    "node_modules/glsl-token-scope": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz",
+      "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A=="
+    },
+    "node_modules/glsl-token-string": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz",
+      "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg=="
+    },
+    "node_modules/glsl-token-whitespace-trim": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz",
+      "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ=="
+    },
+    "node_modules/glsl-tokenizer": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz",
+      "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==",
+      "dependencies": {
+        "through2": "^0.6.3"
+      }
+    },
+    "node_modules/glsl-tokenizer/node_modules/isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+    },
+    "node_modules/glsl-tokenizer/node_modules/readable-stream": {
+      "version": "1.0.34",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+      "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "0.0.1",
+        "string_decoder": "~0.10.x"
+      }
+    },
+    "node_modules/glsl-tokenizer/node_modules/string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+    },
+    "node_modules/glsl-tokenizer/node_modules/through2": {
+      "version": "0.6.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+      "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==",
+      "dependencies": {
+        "readable-stream": ">=1.0.33-1 <1.1.0-0",
+        "xtend": ">=4.0.0 <4.1.0-0"
+      }
+    },
+    "node_modules/glslify": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz",
+      "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==",
+      "dependencies": {
+        "bl": "^2.2.1",
+        "concat-stream": "^1.5.2",
+        "duplexify": "^3.4.5",
+        "falafel": "^2.1.0",
+        "from2": "^2.3.0",
+        "glsl-resolve": "0.0.1",
+        "glsl-token-whitespace-trim": "^1.0.0",
+        "glslify-bundle": "^5.0.0",
+        "glslify-deps": "^1.2.5",
+        "minimist": "^1.2.5",
+        "resolve": "^1.1.5",
+        "stack-trace": "0.0.9",
+        "static-eval": "^2.0.5",
+        "through2": "^2.0.1",
+        "xtend": "^4.0.0"
+      },
+      "bin": {
+        "glslify": "bin.js"
+      }
+    },
+    "node_modules/glslify-bundle": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz",
+      "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==",
+      "dependencies": {
+        "glsl-inject-defines": "^1.0.1",
+        "glsl-token-defines": "^1.0.0",
+        "glsl-token-depth": "^1.1.1",
+        "glsl-token-descope": "^1.0.2",
+        "glsl-token-scope": "^1.1.1",
+        "glsl-token-string": "^1.0.1",
+        "glsl-token-whitespace-trim": "^1.0.0",
+        "glsl-tokenizer": "^2.0.2",
+        "murmurhash-js": "^1.0.0",
+        "shallow-copy": "0.0.1"
+      }
+    },
+    "node_modules/glslify-deps": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz",
+      "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==",
+      "dependencies": {
+        "@choojs/findup": "^0.2.0",
+        "events": "^3.2.0",
+        "glsl-resolve": "0.0.1",
+        "glsl-tokenizer": "^2.0.0",
+        "graceful-fs": "^4.1.2",
+        "inherits": "^2.0.1",
+        "map-limit": "0.0.1",
+        "resolve": "^1.0.0"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+    },
+    "node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/has-hover": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz",
+      "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==",
+      "dependencies": {
+        "is-browser": "^2.0.1"
+      }
+    },
+    "node_modules/has-passive-events": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz",
+      "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==",
+      "dependencies": {
+        "is-browser": "^2.0.1"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/icss-utils": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+      "dev": true,
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/is-browser": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz",
+      "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ=="
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-finite": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+      "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-firefox": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz",
+      "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-mobile": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-5.0.0.tgz",
+      "integrity": "sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==",
+      "license": "MIT"
+    },
+    "node_modules/is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "dev": true,
+      "dependencies": {
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-string-blank": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz",
+      "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw=="
+    },
+    "node_modules/is-svg-path": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz",
+      "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==",
+      "license": "MIT"
+    },
+    "node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+    },
+    "node_modules/isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "dev": true
+    },
+    "node_modules/json-stringify-pretty-compact": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz",
+      "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==",
+      "license": "MIT"
+    },
+    "node_modules/jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "dev": true,
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/kdbush": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.1.0.tgz",
+      "integrity": "sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==",
+      "license": "ISC"
+    },
+    "node_modules/kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/loader-runner": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6.11.5"
+      }
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
+    },
+    "node_modules/lodash-es": {
+      "version": "4.18.1",
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+      "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
+      "license": "MIT"
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "license": "MIT"
+    },
+    "node_modules/lru-cache": {
+      "version": "11.5.2",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+      "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": "20 || >=22"
+      }
+    },
+    "node_modules/map-limit": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz",
+      "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==",
+      "dependencies": {
+        "once": "~1.3.0"
+      }
+    },
+    "node_modules/map-limit/node_modules/once": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+      "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/maplibre-gl": {
+      "version": "6.9.0",
+      "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-6.9.0.tgz",
+      "integrity": "sha512-vFMwMK0Zs+NM/rOMSdtu8bO30DIexhBEVi5KC6f70/XtI+L/K2wC3LsDCAXFZ4s8ik5gAuDugfCNbpllpdJ9bA==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@mapbox/point-geometry": "^1.1.0",
+        "@mapbox/tiny-sdf": "^2.2.0",
+        "@mapbox/unitbezier": "^1.0.0",
+        "@mapbox/vector-tile": "^3.0.0",
+        "@maplibre/geojson-vt": "^6.1.1",
+        "@maplibre/maplibre-gl-style-spec": "^26.4.2",
+        "@maplibre/mlt": "^1.2.1",
+        "@maplibre/vt-pbf": "^4.3.2",
+        "@types/geojson": "^7946.0.16",
+        "bidi-js": "^1.1.0",
+        "earcut": "^3.2.3",
+        "gl-matrix": "^3.4.4",
+        "kdbush": "^4.1.0",
+        "murmurhash-js": "^1.0.0",
+        "pbf": "^5.1.2",
+        "potpack": "^2.1.0",
+        "quickselect": "^3.0.0",
+        "tinyqueue": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=16.14.0",
+        "npm": ">=8.1.0"
+      },
+      "funding": {
+        "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1"
+      }
+    },
+    "node_modules/maplibre-gl/node_modules/earcut": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.2.3.tgz",
+      "integrity": "sha512-vnS4AVwp1KHAF13i1vp1/2D5evWy3k5u/iW/B81QVsUZtV8cv2tU0b2VNFlqvh4kYwrFMDdjPCfAmfyJW9y14Q==",
+      "license": "ISC"
+    },
+    "node_modules/math-log2": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz",
+      "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mini-svg-data-uri": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+      "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+      "dev": true,
+      "bin": {
+        "mini-svg-data-uri": "cli.js"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+      "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/mouse-event-offset": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz",
+      "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w=="
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/murmurhash-js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
+      "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw=="
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.11",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/native-promise-only": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+      "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg=="
+    },
+    "node_modules/needle": {
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
+      "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      },
+      "bin": {
+        "needle": "bin/needle"
+      },
+      "engines": {
+        "node": ">= 4.4.x"
+      }
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/next-tick": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+      "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+      "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/normalize-svg-path": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz",
+      "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==",
+      "license": "MIT",
+      "dependencies": {
+        "svg-arc-to-cubic-bezier": "^3.0.0"
+      }
+    },
+    "node_modules/number-is-integer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz",
+      "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==",
+      "dependencies": {
+        "is-finite": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/parenthesis": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz",
+      "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
+    },
+    "node_modules/parse-rect": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz",
+      "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==",
+      "dependencies": {
+        "pick-by-alias": "^1.2.0"
+      }
+    },
+    "node_modules/parse-svg-path": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.2.0.tgz",
+      "integrity": "sha512-Tf7FFIrguPKQwzD4pWnYkR2VOv3raoHeKED80Bm+BYHI3KxC8KsgsGC5+fSMzAGDA6UEk4bHvmi+RsjmL3khpg==",
+      "license": "MIT"
+    },
+    "node_modules/parse-unit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz",
+      "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg=="
+    },
+    "node_modules/path-browserify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+      "dev": true
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+    },
+    "node_modules/path-scurry": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
+      "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^11.0.0",
+        "minipass": "^7.1.2"
+      },
+      "engines": {
+        "node": "18 || 20 || >=22"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/pbf": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/pbf/-/pbf-5.1.2.tgz",
+      "integrity": "sha512-mnvGdvOrIvJOBGUEdGkrVXjN8E/VkIJCkf2eS1DH2yv82ORUlLttmDt0rWY38yYZmVwciZwBUvHM20qxBZf40w==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "resolve-protobuf-schema": "^2.1.0"
+      },
+      "bin": {
+        "pbf": "bin/pbf"
+      }
+    },
+    "node_modules/performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+    },
+    "node_modules/pick-by-alias": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz",
+      "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw=="
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "dev": true
+    },
+    "node_modules/plotly.js": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-4.1.1.tgz",
+      "integrity": "sha512-fYLAOj091/+M4h1rmtVIkRIpdkz5/P9IdNUeB9wKmCUyvewuUdlCYR5ryqDWP7Cb36Dn4EvSrs6YKvRJ9ukNdQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@plotly/d3": "3.8.2",
+        "@plotly/d3-sankey": "0.12.3",
+        "@plotly/d3-sankey-circular": "0.33.1",
+        "@plotly/point-cluster": "^3.1.9",
+        "@plotly/regl": "^2.1.2",
+        "@turf/area": "^7.3.5",
+        "@turf/centroid": "^7.3.5",
+        "@turf/meta": "^7.3.5",
+        "@types/d3": "^3.5.53",
+        "base64-arraybuffer": "^1.0.2",
+        "country-iso-search": "^0.1.2",
+        "culori": "^4.0.2",
+        "d3-force": "^1.2.1",
+        "d3-format": "^1.4.5",
+        "d3-geo": "^1.12.1",
+        "d3-geo-projection": "^2.9.0",
+        "d3-hierarchy": "^1.1.9",
+        "d3-interpolate": "^3.0.1",
+        "d3-time": "^1.1.0",
+        "d3-time-format": "^2.3.0",
+        "fast-isnumeric": "^1.1.4",
+        "gl-mat4": "^1.2.0",
+        "gl-text": "^1.4.0",
+        "has-hover": "^1.0.1",
+        "has-passive-events": "^1.0.0",
+        "is-mobile": "^5.0.0",
+        "maplibre-gl": "6.9.0",
+        "mouse-event-offset": "^3.0.2",
+        "native-promise-only": "^0.8.1",
+        "parse-svg-path": "^0.2.0",
+        "point-in-polygon": "^1.1.0",
+        "polybooljs": "^1.2.2",
+        "probe-image-size": "^7.3.0",
+        "regl-error2d": "^2.0.12",
+        "regl-line2d": "^3.1.3",
+        "regl-scatter2d": "^3.4.0",
+        "regl-splom": "^1.0.14",
+        "strongly-connected-components": "^1.0.1",
+        "svg-path-sdf": "^2.0.0",
+        "topojson-client": "^3.1.0",
+        "webgl-context": "^2.2.0",
+        "world-calendars": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=22.0.0"
+      }
+    },
+    "node_modules/point-in-polygon": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
+      "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
+    },
+    "node_modules/polybooljs": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.2.tgz",
+      "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg=="
+    },
+    "node_modules/postcss": {
+      "version": "8.5.3",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+      "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.8",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-modules-extract-imports": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
+      "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
+      "dev": true,
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
+      "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
+      "dev": true,
+      "dependencies": {
+        "icss-utils": "^5.0.0",
+        "postcss-selector-parser": "^7.0.0",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-scope": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
+      "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
+      "dev": true,
+      "dependencies": {
+        "postcss-selector-parser": "^7.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-values": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+      "dev": true,
+      "dependencies": {
+        "icss-utils": "^5.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+      "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+      "dev": true,
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true
+    },
+    "node_modules/potpack": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz",
+      "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==",
+      "license": "ISC"
+    },
+    "node_modules/probe-image-size": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.4.0.tgz",
+      "integrity": "sha512-cdEprVtZxV+awMde9X+4jILBFYh4CARxVrQaMl4wY4YcPWbul9jntXrIW95NInBDyJwcVUP3U0T6yukN8rMBaQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/puzrin"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/nodeca"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "lodash.merge": "^4.6.2",
+        "needle": "^2.5.2",
+        "stream-parser": "~0.3.1"
+      }
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "node_modules/protocol-buffers-schema": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz",
+      "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==",
+      "license": "MIT"
+    },
+    "node_modules/quickselect": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz",
+      "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==",
+      "license": "ISC"
+    },
+    "node_modules/raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "dependencies": {
+        "performance-now": "^2.1.0"
+      }
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/readable-stream/node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+    },
+    "node_modules/readable-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "node_modules/regl": {
+      "name": "@plotly/regl",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz",
+      "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw=="
+    },
+    "node_modules/regl-error2d": {
+      "version": "2.0.12",
+      "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz",
+      "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==",
+      "dependencies": {
+        "array-bounds": "^1.0.1",
+        "color-normalize": "^1.5.0",
+        "flatten-vertex-data": "^1.0.2",
+        "object-assign": "^4.1.1",
+        "pick-by-alias": "^1.2.0",
+        "to-float32": "^1.1.0",
+        "update-diff": "^1.1.0"
+      }
+    },
+    "node_modules/regl-line2d": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.3.tgz",
+      "integrity": "sha512-fkgzW+tTn4QUQLpFKsUIE0sgWdCmXAM3ctXcCgoGBZTSX5FE2A0M7aynz7nrZT5baaftLrk9te54B+MEq4QcSA==",
+      "dependencies": {
+        "array-bounds": "^1.0.1",
+        "array-find-index": "^1.0.2",
+        "array-normalize": "^1.1.4",
+        "color-normalize": "^1.5.0",
+        "earcut": "^2.1.5",
+        "es6-weak-map": "^2.0.3",
+        "flatten-vertex-data": "^1.0.2",
+        "object-assign": "^4.1.1",
+        "parse-rect": "^1.2.0",
+        "pick-by-alias": "^1.2.0",
+        "to-float32": "^1.1.0"
+      }
+    },
+    "node_modules/regl-scatter2d": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.4.0.tgz",
+      "integrity": "sha512-DavKQlHsI+iHZuLgOL+yGkg+sPd94CS+7FCBWkcQ6s/TbaNfUsF9eN591fjjSWIoKrGNfb/SEGhsXR5lXjqZ2w==",
+      "license": "MIT",
+      "dependencies": {
+        "@plotly/point-cluster": "^3.1.9",
+        "array-bounds": "^1.0.1",
+        "color-id": "^1.1.0",
+        "color-normalize": "^1.5.0",
+        "flatten-vertex-data": "^1.0.2",
+        "glslify": "^7.0.0",
+        "parse-rect": "^1.2.0",
+        "pick-by-alias": "^1.2.0",
+        "to-float32": "^1.1.0",
+        "update-diff": "^1.1.0"
+      }
+    },
+    "node_modules/regl-splom": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz",
+      "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==",
+      "dependencies": {
+        "array-bounds": "^1.0.1",
+        "array-range": "^1.0.1",
+        "color-alpha": "^1.0.4",
+        "flatten-vertex-data": "^1.0.2",
+        "parse-rect": "^1.2.0",
+        "pick-by-alias": "^1.2.0",
+        "raf": "^3.4.1",
+        "regl-scatter2d": "^3.2.3"
+      }
+    },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.10",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+      "dependencies": {
+        "is-core-module": "^2.16.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/resolve-protobuf-schema": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+      "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+      "license": "MIT",
+      "dependencies": {
+        "protocol-buffers-schema": "^3.3.1"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "license": "MIT"
+    },
+    "node_modules/sax": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz",
+      "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==",
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=11.0.0"
+      }
+    },
+    "node_modules/schema-utils": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
+      "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/json-schema": "^7.0.9",
+        "ajv": "^8.9.0",
+        "ajv-formats": "^2.1.1",
+        "ajv-keywords": "^5.1.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "node_modules/shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^6.0.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shallow-copy": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+      "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw=="
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/stack-trace": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz",
+      "integrity": "sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/static-eval": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz",
+      "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==",
+      "dependencies": {
+        "escodegen": "^2.1.0"
+      }
+    },
+    "node_modules/stream-parser": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
+      "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2"
+      }
+    },
+    "node_modules/stream-parser/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/stream-parser/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
+    "node_modules/stream-shift": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
+      "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="
+    },
+    "node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/string_decoder/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "node_modules/string-split-by": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz",
+      "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
+      "dependencies": {
+        "parenthesis": "^3.1.5"
+      }
+    },
+    "node_modules/strongly-connected-components": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz",
+      "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA=="
+    },
+    "node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/svg-arc-to-cubic-bezier": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz",
+      "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==",
+      "license": "ISC"
+    },
+    "node_modules/svg-path-bounds": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz",
+      "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==",
+      "license": "MIT",
+      "dependencies": {
+        "abs-svg-path": "^0.1.1",
+        "is-svg-path": "^1.0.1",
+        "normalize-svg-path": "^1.0.0",
+        "parse-svg-path": "^0.1.2"
+      }
+    },
+    "node_modules/svg-path-bounds/node_modules/parse-svg-path": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz",
+      "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==",
+      "license": "MIT"
+    },
+    "node_modules/svg-path-sdf": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-2.0.0.tgz",
+      "integrity": "sha512-vcYvz5ZR0hxZvuJE3ft4StgkpuSBPUrrfWdkTRtDhGZ1v+Qel64Sk/uZwYhxWYkjj2WTCMeaM2VYdE/bZR1tjg==",
+      "license": "MIT",
+      "dependencies": {
+        "bitmap-sdf": "^1.0.0",
+        "is-svg-path": "^1.0.1",
+        "parse-svg-path": "^0.1.2",
+        "svg-path-bounds": "^1.0.1"
+      }
+    },
+    "node_modules/svg-path-sdf/node_modules/parse-svg-path": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz",
+      "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==",
+      "license": "MIT"
+    },
+    "node_modules/tapable": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/terser": {
+      "version": "5.39.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
+      "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser-webpack-plugin": {
+      "version": "5.3.14",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz",
+      "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^4.3.0",
+        "serialize-javascript": "^6.0.2",
+        "terser": "^5.31.1"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
+        },
+        "uglify-js": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/terser/node_modules/acorn": {
+      "version": "8.14.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+      "dev": true,
+      "peer": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/terser/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "dependencies": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "node_modules/tinyqueue": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz",
+      "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==",
+      "license": "ISC"
+    },
+    "node_modules/to-float32": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz",
+      "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg=="
+    },
+    "node_modules/to-px": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz",
+      "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==",
+      "dependencies": {
+        "parse-unit": "^1.0.1"
+      }
+    },
+    "node_modules/topojson-client": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
+      "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+      "dependencies": {
+        "commander": "2"
+      },
+      "bin": {
+        "topo2geo": "bin/topo2geo",
+        "topomerge": "bin/topomerge",
+        "topoquantize": "bin/topoquantize"
+      }
+    },
+    "node_modules/topojson-client/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+    },
+    "node_modules/type": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
+      "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="
+    },
+    "node_modules/typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+    },
+    "node_modules/typedarray-pool": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz",
+      "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==",
+      "dependencies": {
+        "bit-twiddle": "^1.0.0",
+        "dup": "^1.0.0"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
+      "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc"
+      },
+      "engines": {
+        "node": ">=16.20.0"
+      },
+      "optionalDependencies": {
+        "@typescript/typescript-aix-ppc64": "7.0.2",
+        "@typescript/typescript-darwin-arm64": "7.0.2",
+        "@typescript/typescript-darwin-x64": "7.0.2",
+        "@typescript/typescript-freebsd-arm64": "7.0.2",
+        "@typescript/typescript-freebsd-x64": "7.0.2",
+        "@typescript/typescript-linux-arm": "7.0.2",
+        "@typescript/typescript-linux-arm64": "7.0.2",
+        "@typescript/typescript-linux-loong64": "7.0.2",
+        "@typescript/typescript-linux-mips64el": "7.0.2",
+        "@typescript/typescript-linux-ppc64": "7.0.2",
+        "@typescript/typescript-linux-riscv64": "7.0.2",
+        "@typescript/typescript-linux-s390x": "7.0.2",
+        "@typescript/typescript-linux-x64": "7.0.2",
+        "@typescript/typescript-netbsd-arm64": "7.0.2",
+        "@typescript/typescript-netbsd-x64": "7.0.2",
+        "@typescript/typescript-openbsd-arm64": "7.0.2",
+        "@typescript/typescript-openbsd-x64": "7.0.2",
+        "@typescript/typescript-sunos-x64": "7.0.2",
+        "@typescript/typescript-win32-arm64": "7.0.2",
+        "@typescript/typescript-win32-x64": "7.0.2"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "6.20.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg=="
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "peer": true,
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/update-diff": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz",
+      "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A=="
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/watchpack": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+      "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/weak-map": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz",
+      "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw=="
+    },
+    "node_modules/webgl-context": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz",
+      "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==",
+      "dependencies": {
+        "get-canvas-context": "^1.0.1"
+      }
+    },
+    "node_modules/webpack": {
+      "version": "5.98.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
+      "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/eslint-scope": "^3.7.7",
+        "@types/estree": "^1.0.6",
+        "@webassemblyjs/ast": "^1.14.1",
+        "@webassemblyjs/wasm-edit": "^1.14.1",
+        "@webassemblyjs/wasm-parser": "^1.14.1",
+        "acorn": "^8.14.0",
+        "browserslist": "^4.24.0",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.17.1",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.11",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^4.3.0",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.11",
+        "watchpack": "^2.4.1",
+        "webpack-sources": "^3.2.3"
+      },
+      "bin": {
+        "webpack": "bin/webpack.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack-merge": {
+      "version": "5.10.0",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
+      "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
+      "dev": true,
+      "dependencies": {
+        "clone-deep": "^4.0.1",
+        "flat": "^5.0.2",
+        "wildcard": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/webpack/node_modules/acorn": {
+      "version": "8.14.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+      "dev": true,
+      "peer": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/webpack/node_modules/webpack-sources": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/wildcard": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
+      "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
+      "dev": true
+    },
+    "node_modules/world-calendars": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.4.tgz",
+      "integrity": "sha512-VGRnLJS+xJmGDPodgJRnGIDwGu0s+Cr9V2HB3EzlDZ5n0qb8h5SJtGUEkjrphZYAglEiXZ6kiXdmk0H/h/uu/w==",
+      "dependencies": {
+        "object-assign": "^4.1.0"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "engines": {
+        "node": ">=0.4"
+      }
+    }
+  }
+}
diff -Nru plotly-5.20.0+dfsg/js/package.json plotly-7.1.0+dfsg1/js/package.json
--- plotly-5.20.0+dfsg/js/package.json	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/package.json	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,36 @@
+{
+  "name": "jupyterlab-plotly",
+  "main": "lib/mimeExtension.js",
+  "version": "7.1.0",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/plotly/plotly.py"
+  },
+  "description": "The plotly Jupyter extension",
+  "author": "The plotly.py team",
+  "license": "MIT",
+  "scripts": {
+    "build:widget": "esbuild --bundle --alias:plotly.js=plotly.js/dist/plotly --format=esm --minify --outfile=../plotly/package_data/widgetbundle.js src/widget.ts",
+    "build:mimerenderer": "esbuild --bundle --alias:plotly.js=plotly.js/dist/plotly --format=esm --minify --outfile=lib/mimeExtension.js src/mimeExtension.ts",
+    "build:labextension": "jupyter-builder build .",
+    "build": "npm run build:widget && npm run build:mimerenderer && npm run build:labextension",
+    "watch": "npm run build -- --watch --sourcemap=inline",
+    "typecheck": "tsc --noEmit"
+  },
+  "dependencies": {
+    "lodash-es": "^4.17.21",
+    "plotly.js": "4.1.1",
+    "@lumino/widgets": "~2.9.0"
+  },
+  "devDependencies": {
+    "@jupyter/builder": "^1.2.2",
+    "@types/plotly.js": "^3.0.13",
+    "esbuild": "^0.28.2",
+    "typescript": "^7.0.2"
+  },
+  "jupyterlab": {
+    "mimeExtension": true,
+    "outputDir": "../plotly/labextension",
+    "webpackConfig": "./webpack.config.js"
+  }
+}
diff -Nru plotly-5.20.0+dfsg/js/src/mimeExtension.ts plotly-7.1.0+dfsg1/js/src/mimeExtension.ts
--- plotly-5.20.0+dfsg/js/src/mimeExtension.ts	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/src/mimeExtension.ts	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,248 @@
+// Copyright (c) Jupyter Development Team.
+// Distributed under the terms of the Modified BSD License.
+
+import { IRenderMime } from '@jupyterlab/rendermime-interfaces';
+import { Widget } from '@lumino/widgets';
+import type PlotlyType from "plotly.js";
+
+import { Message } from "@lumino/messaging";
+
+/**
+ * The CSS class to add to the Plotly Widget.
+ */
+const CSS_CLASS = "jp-RenderedPlotly";
+
+/**
+ * The CSS class for a Plotly icon.
+ */
+const CSS_ICON_CLASS = "jp-MaterialIcon jp-PlotlyIcon";
+
+/**
+ * The MIME type for Plotly.
+ * The version of this follows the major version of Plotly.
+ */
+export const MIME_TYPE = "application/vnd.plotly.v1+json";
+
+interface IPlotlySpec {
+  data: PlotlyType.Data;
+  layout: PlotlyType.Layout;
+  frames?: PlotlyType.Frame[];
+}
+
+export class RenderedPlotly extends Widget implements IRenderMime.IRenderer {
+  /**
+   * Create a new widget for rendering Plotly.
+   */
+  constructor(options: IRenderMime.IRendererOptions) {
+    super();
+    this.addClass(CSS_CLASS);
+    this._mimeType = options.mimeType;
+
+    // Create image element
+    this._img_el = <HTMLImageElement>document.createElement("img");
+    this._img_el.className = "plot-img";
+    this.node.appendChild(this._img_el);
+
+    // Install image hover callback
+    this._img_el.addEventListener("mouseenter", (event) => {
+      this.createGraph(this._model);
+    });
+  }
+
+  /**
+   * Render Plotly into this widget's node.
+   */
+  renderModel(model: IRenderMime.IMimeModel): Promise<void> {
+    if (this.hasGraphElement()) {
+      // We already have a graph, don't overwrite it
+      return Promise.resolve();
+    }
+
+    // Save off reference to model so that we can regenerate the plot later
+    this._model = model;
+
+    // Check for PNG data in mime bundle
+    const png_data = <string>model.data["image/png"];
+    if (png_data !== undefined && png_data !== null) {
+      // We have PNG data, use it
+      this.updateImage(png_data);
+      return Promise.resolve();
+    } else {
+      // Create a new graph
+      return this.createGraph(model);
+    }
+  }
+
+  private hasGraphElement() {
+    // Check for the presence of the .plot-container element that plotly.js
+    // places at the top of the figure structure
+    return this.node.querySelector(".plot-container") !== null;
+  }
+
+  private updateImage(png_data: string) {
+    this.hideGraph();
+    this._img_el.src = "data:image/png;base64," + <string>png_data;
+    this.showImage();
+  }
+
+  private hideGraph() {
+    // Hide the graph if there is one
+    let el = <HTMLDivElement>this.node.querySelector(".plot-container");
+    if (el !== null && el !== undefined) {
+      el.style.display = "none";
+    }
+  }
+
+  private showGraph() {
+    // Show the graph if there is one
+    let el = <HTMLDivElement>this.node.querySelector(".plot-container");
+    if (el !== null && el !== undefined) {
+      el.style.display = "block";
+    }
+  }
+
+  private hideImage() {
+    // Hide the image element
+    let el = <HTMLImageElement>this.node.querySelector(".plot-img");
+    if (el !== null && el !== undefined) {
+      el.style.display = "none";
+    }
+  }
+
+  private showImage() {
+    // Show the image element
+    let el = <HTMLImageElement>this.node.querySelector(".plot-img");
+    if (el !== null && el !== undefined) {
+      el.style.display = "block";
+    }
+  }
+
+  private createGraph(model: IRenderMime.IMimeModel): Promise<void> {
+    const { data, layout, frames, config } = model.data[this._mimeType] as
+      | any
+      | IPlotlySpec;
+
+    if (!layout.height) {
+      layout.height = 360;
+    }
+
+    // Load plotly asynchronously
+    const loadPlotly = async (): Promise<void> => {
+      if (RenderedPlotly.Plotly === null) {
+        RenderedPlotly.Plotly = await import("plotly.js");
+        RenderedPlotly._resolveLoadingPlotly();
+      }
+      return RenderedPlotly.loadingPlotly;
+    };
+
+    return loadPlotly()
+      .then(() => RenderedPlotly.Plotly!.react(this.node, data, layout, config))
+      .then((plot) => {
+        this.showGraph();
+        this.hideImage();
+        this.update();
+        if (frames) {
+          RenderedPlotly.Plotly!.addFrames(this.node, frames);
+        }
+        if (this.node.offsetWidth > 0 && this.node.offsetHeight > 0) {
+          RenderedPlotly.Plotly!.toImage(plot, {
+            format: "png",
+            width: this.node.offsetWidth,
+            height: this.node.offsetHeight,
+          }).then((url: string) => {
+            const imageData = url.split(",")[1];
+            if (model.data["image/png"] !== imageData) {
+              model.setData({
+                data: {
+                  ...model.data,
+                  "image/png": imageData,
+                },
+              });
+            }
+          });
+        }
+
+        // Handle webgl context lost events
+        (<PlotlyType.PlotlyHTMLElement>this.node).on(
+          "plotly_webglcontextlost",
+          () => {
+            const png_data = <string>model.data["image/png"];
+            if (png_data !== undefined && png_data !== null) {
+              // We have PNG data, use it
+              this.updateImage(png_data);
+              return Promise.resolve();
+            }
+          }
+        );
+      });
+  }
+
+  /**
+   * A message handler invoked on an `'after-show'` message.
+   */
+  protected onAfterShow(msg: Message): void {
+    this.update();
+  }
+
+  /**
+   * A message handler invoked on a `'resize'` message.
+   */
+  protected onResize(msg: Widget.ResizeMessage): void {
+    this.update();
+  }
+
+  /**
+   * A message handler invoked on an `'update-request'` message.
+   */
+  protected onUpdateRequest(msg: Message): void {
+    if (RenderedPlotly.Plotly && this.isVisible && this.hasGraphElement()) {
+      RenderedPlotly.Plotly.redraw(this.node).then(() => {
+        RenderedPlotly.Plotly!.Plots.resize(this.node);
+      });
+    }
+  }
+
+  private _mimeType: string;
+  private _img_el: HTMLImageElement;
+  private _model: IRenderMime.IMimeModel;
+
+  private static Plotly: typeof PlotlyType | null = null;
+  private static _resolveLoadingPlotly: () => void;
+  private static loadingPlotly = new Promise<void>((resolve) => {
+    RenderedPlotly._resolveLoadingPlotly = resolve;
+  });
+}
+
+/**
+ * A mime renderer factory for Plotly data.
+ */
+export const rendererFactory: IRenderMime.IRendererFactory = {
+  safe: true,
+  mimeTypes: [MIME_TYPE],
+  createRenderer: (options) => new RenderedPlotly(options),
+};
+
+const extensions: IRenderMime.IExtension | IRenderMime.IExtension[] = [
+  {
+    id: "@jupyterlab/plotly-extension:factory",
+    rendererFactory,
+    rank: 2,
+    dataType: "json",
+    fileTypes: [
+      {
+        name: "plotly",
+        mimeTypes: [MIME_TYPE],
+        extensions: [".plotly", ".plotly.json"],
+        iconClass: CSS_ICON_CLASS,
+      },
+    ],
+    documentWidgetFactoryOptions: {
+      name: "Plotly",
+      primaryFileType: "plotly",
+      fileTypes: ["plotly", "json"],
+      defaultFor: ["plotly"],
+    },
+  },
+];
+
+export default extensions;
\ No newline at end of file
diff -Nru plotly-5.20.0+dfsg/js/src/widget.ts plotly-7.1.0+dfsg1/js/src/widget.ts
--- plotly-5.20.0+dfsg/js/src/widget.ts	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/src/widget.ts	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,2076 @@
+import _ from "lodash-es";
+import Plotly from "plotly.js";
+
+// @ts-ignore
+window.PlotlyConfig = { MathJaxConfig: "local" };
+
+type InputDeviceState = {
+  alt: any;
+  ctrl: any;
+  meta: any;
+  shift: any;
+  button: any;
+  buttons: any;
+};
+
+type Js2PyLayoutDeltaMsg = {
+  layout_delta: any;
+  layout_edit_id: any;
+};
+
+type Js2PyMsg = {
+  source_view_id: string;
+};
+
+type Js2PyPointsCallbackMsg = {
+  event_type: string;
+  points: Points;
+  device_state: InputDeviceState;
+  selector: Selector;
+};
+
+type Js2PyRelayoutMsg = Js2PyMsg & {
+  relayout_data: any;
+};
+
+type Js2PyRestyleMsg = Js2PyMsg & {
+  style_data: any;
+  style_traces?: null | number | number[];
+};
+
+type Js2PyTraceDeltasMsg = {
+  trace_deltas: any;
+  trace_edit_id: any;
+};
+
+type Js2PyUpdateMsg = Js2PyMsg & {
+  style_data: any;
+  layout_data: any;
+  style_traces?: null | number | number[];
+};
+
+type Points = {
+  trace_indexes: number[];
+  point_indexes: number[];
+  xs: number[];
+  ys: number[];
+  zs?: number[];
+};
+
+type Py2JsMsg = {
+  trace_edit_id?: any;
+  layout_edit_id?: any;
+  source_view_id?: any;
+};
+
+type Py2JsAddTracesMsg = Py2JsMsg & {
+  trace_data: any;
+};
+
+type Py2JsAnimateMsg = Py2JsMsg & {
+  style_data: any;
+  layout_data: any;
+  style_traces?: null | number | number[];
+  animation_opts?: any;
+};
+
+type Py2JsDeleteTracesMsg = Py2JsMsg & {
+  delete_inds: number[];
+};
+
+type Py2JsMoveTracesMsg = {
+  current_trace_inds: number[];
+  new_trace_inds: number[];
+};
+
+type Py2JsRestyleMsg = Py2JsMsg & {
+  restyle_data: any;
+  restyle_traces?: null | number | number[];
+};
+
+type Py2JsRelayoutMsg = Py2JsMsg & {
+  relayout_data: any;
+};
+
+type Py2JsRemoveLayoutPropsMsg = {
+  remove_props: any;
+};
+
+type Py2JsRemoveTracePropsMsg = {
+  remove_props: any;
+  remove_trace: any;
+};
+
+type Py2JsUpdateMsg = Py2JsMsg & {
+  style_data: any;
+  layout_data: any;
+  style_traces?: null | number | number[];
+};
+
+type Selector = {
+  type: "box" | "lasso";
+  selector_state:
+    | { xrange: number[]; yrange: number[] }
+    | { xs: number[]; ys: number[] };
+};
+
+// Model
+// =====
+/**
+ * A FigureModel holds a mirror copy of the state of a FigureWidget on
+ * the Python side.  There is a one-to-one relationship between JavaScript
+ * FigureModels and Python FigureWidgets. The JavaScript FigureModel is
+ * initialized as soon as a Python FigureWidget initialized, this happens
+ * even before the widget is first displayed in the Notebook
+ */
+
+type Serializer<In=any, Out=any> = {
+  deserialize(value: Out): In;
+  serialize(value: In): Out;
+}
+
+export class FigureModel {
+  model;
+  serializers: Record<string, Serializer>
+
+  constructor(model, serializers: Record<string, Serializer>) {
+    this.model = model;
+    this.serializers = serializers;
+  }
+
+  get(key: string) {
+    const serializer = this.serializers[key];
+    const update = this.model.get(key)
+    if (serializer?.deserialize) {
+      return serializer.deserialize(update)
+    }
+    return update;
+  }
+
+  set(key: string, value: unknown) {
+    let serializer = this.serializers[key];
+    if (serializer?.serialize) {
+      value = serializer.serialize(value)
+    }
+    this.model.set(key, value);
+  }
+
+  on(event: string, cb?: () => void) {
+    this.model.on(event, cb);
+  }
+
+  save_changes() {
+    this.model.save_changes();
+  }
+
+  defaults() {
+    return {
+
+      // Data and Layout
+      // ---------------
+      // The _widget_data and _widget_layout properties are synchronized with the
+      // Python side on initialization only.  After initialization, these
+      // properties are kept in sync through the use of the _py2js_*
+      // messages
+      _widget_data: [],
+      _widget_layout: {},
+      _config: {},
+
+      // Python -> JS messages
+      // ---------------------
+      // Messages are implemented using trait properties. This is done so
+      // that we can take advantage of ipywidget's binary serialization
+      // protocol.
+      //
+      // Messages are sent by the Python side by assigning the message
+      // contents to the appropriate _py2js_* property, and then immediately
+      // setting it to None.  Messages are received by the JavaScript
+      // side by registering property change callbacks in the initialize
+      // methods for FigureModel and FigureView. e.g. (where this is a
+      // FigureModel):
+      //
+      //      this.on('change:_py2js_addTraces', this.do_addTraces, this);
+      //
+      // Message handling methods, do_addTraces, are responsible for
+      // performing the appropriate action if the message contents are
+      // not null
+
+      /**
+       * @typedef {null|Object} Py2JsAddTracesMsg
+       * @property {Array.<Object>} trace_data
+       *  Array of traces to append to the end of the figure's current traces
+       * @property {Number} trace_edit_id
+       *  Edit ID to use when returning trace deltas using
+       *  the _js2py_traceDeltas message.
+       * @property {Number} layout_edit_id
+       *  Edit ID to use when returning layout deltas using
+       *  the _js2py_layoutDelta message.
+       */
+      _py2js_addTraces: null,
+
+      /**
+       * @typedef {null|Object} Py2JsDeleteTracesMsg
+       * @property {Array.<Number>} delete_inds
+       *  Array of indexes of traces to be deleted, in ascending order
+       * @property {Number} trace_edit_id
+       *  Edit ID to use when returning trace deltas using
+       *  the _js2py_traceDeltas message.
+       * @property {Number} layout_edit_id
+       *  Edit ID to use when returning layout deltas using
+       *  the _js2py_layoutDelta message.
+       */
+      _py2js_deleteTraces: null,
+
+      /**
+       * @typedef {null|Object} Py2JsMoveTracesMsg
+       * @property {Array.<Number>} current_trace_inds
+       *  Array of the current indexes of traces to be moved
+       * @property {Array.<Number>} new_trace_inds
+       *  Array of the new indexes that traces should be moved to.
+       */
+      _py2js_moveTraces: null,
+
+      /**
+       * @typedef {null|Object} Py2JsRestyleMsg
+       * @property {Object} restyle_data
+       *  Restyle data as accepted by Plotly.restyle
+       * @property {null|Array.<Number>} restyle_traces
+       *  Array of indexes of the traces that the resytle operation applies
+       *  to, or null to apply the operation to all traces
+       * @property {Number} trace_edit_id
+       *  Edit ID to use when returning trace deltas using
+       *  the _js2py_traceDeltas message
+       * @property {Number} layout_edit_id
+       *  Edit ID to use when returning layout deltas using
+       *  the _js2py_layoutDelta message
+       * @property {null|String} source_view_id
+       *  view_id of the FigureView that triggered the original restyle
+       *  event (e.g. by clicking the legend), or null if the restyle was
+       *  triggered from Python
+       */
+      _py2js_restyle: null,
+
+      /**
+       * @typedef {null|Object} Py2JsRelayoutMsg
+       * @property {Object} relayout_data
+       *  Relayout data as accepted by Plotly.relayout
+       * @property {Number} layout_edit_id
+       *  Edit ID to use when returning layout deltas using
+       *  the _js2py_layoutDelta message
+       * @property {null|String} source_view_id
+       *  view_id of the FigureView that triggered the original relayout
+       *  event (e.g. by clicking the zoom button), or null if the
+       *  relayout was triggered from Python
+       */
+      _py2js_relayout: null,
+
+      /**
+       * @typedef {null|Object} Py2JsUpdateMsg
+       * @property {Object} style_data
+       *  Style data as accepted by Plotly.update
+       * @property {Object} layout_data
+       *  Layout data as accepted by Plotly.update
+       * @property {Array.<Number>} style_traces
+       *  Array of indexes of the traces that the update operation applies
+       *  to, or null to apply the operation to all traces
+       * @property {Number} trace_edit_id
+       *  Edit ID to use when returning trace deltas using
+       *  the _js2py_traceDeltas message
+       * @property {Number} layout_edit_id
+       *  Edit ID to use when returning layout deltas using
+       *  the _js2py_layoutDelta message
+       * @property {null|String} source_view_id
+       *  view_id of the FigureView that triggered the original update
+       *  event (e.g. by clicking a button), or null if the update was
+       *  triggered from Python
+       */
+      _py2js_update: null,
+
+      /**
+       * @typedef {null|Object} Py2JsAnimateMsg
+       * @property {Object} style_data
+       *  Style data as accepted by Plotly.animate
+       * @property {Object} layout_data
+       *  Layout data as accepted by Plotly.animate
+       * @property {Array.<Number>} style_traces
+       *  Array of indexes of the traces that the animate operation applies
+       *  to, or null to apply the operation to all traces
+       * @property {Object} animation_opts
+       *  Animation options as accepted by Plotly.animate
+       * @property {Number} trace_edit_id
+       *  Edit ID to use when returning trace deltas using
+       *  the _js2py_traceDeltas message
+       * @property {Number} layout_edit_id
+       *  Edit ID to use when returning layout deltas using
+       *  the _js2py_layoutDelta message
+       * @property {null|String} source_view_id
+       *  view_id of the FigureView that triggered the original animate
+       *  event (e.g. by clicking a button), or null if the update was
+       *  triggered from Python
+       */
+      _py2js_animate: null,
+
+      /**
+       * @typedef {null|Object} Py2JsRemoveLayoutPropsMsg
+       * @property {Array.<Array.<String|Number>>} remove_props
+       *  Array of property paths to remove. Each propery path is an
+       *  array of property names or array indexes that locate a property
+       *  inside the _widget_layout object
+       */
+      _py2js_removeLayoutProps: null,
+
+      /**
+       * @typedef {null|Object} Py2JsRemoveTracePropsMsg
+       * @property {Number} remove_trace
+       *  The index of the trace from which to remove properties
+       * @property {Array.<Array.<String|Number>>} remove_props
+       *  Array of property paths to remove. Each propery path is an
+       *  array of property names or array indexes that locate a property
+       *  inside the _widget_data[remove_trace] object
+       */
+      _py2js_removeTraceProps: null,
+
+      // JS -> Python messages
+      // ---------------------
+      // Messages are sent by the JavaScript side by assigning the
+      // message contents to the appropriate _js2py_* property and then
+      // calling the `touch` method on the view that triggered the
+      // change. e.g. (where this is a FigureView):
+      //
+      //      this.model.set('_js2py_restyle', data);
+      //      this.touch();
+      //
+      // The Python side is responsible for setting the property to None
+      // after receiving the message.
+      //
+      // Message trigger logic is described in the corresponding
+      // handle_plotly_* methods of FigureView
+
+      /**
+       * @typedef {null|Object} Js2PyRestyleMsg
+       * @property {Object} style_data
+       *  Style data that was passed to Plotly.restyle
+       * @property {Array.<Number>} style_traces
+       *  Array of indexes of the traces that the restyle operation
+       *  was applied to, or null if applied to all traces
+       * @property {String} source_view_id
+       *  view_id of the FigureView that triggered the original restyle
+       *  event (e.g. by clicking the legend)
+       */
+      _js2py_restyle: null,
+
+      /**
+       * @typedef {null|Object} Js2PyRelayoutMsg
+       * @property {Object} relayout_data
+       *  Relayout data that was passed to Plotly.relayout
+       * @property {String} source_view_id
+       *  view_id of the FigureView that triggered the original relayout
+       *  event (e.g. by clicking the zoom button)
+       */
+      _js2py_relayout: null,
+
+      /**
+       * @typedef {null|Object} Js2PyUpdateMsg
+       * @property {Object} style_data
+       *  Style data that was passed to Plotly.update
+       * @property {Object} layout_data
+       *  Layout data that was passed to Plotly.update
+       * @property {Array.<Number>} style_traces
+       *  Array of indexes of the traces that the update operation applied
+       *  to, or null if applied to all traces
+       * @property {String} source_view_id
+       *  view_id of the FigureView that triggered the original relayout
+       *  event (e.g. by clicking the zoom button)
+       */
+      _js2py_update: null,
+
+      /**
+       * @typedef {null|Object} Js2PyLayoutDeltaMsg
+       * @property {Object} layout_delta
+       *  The layout delta object that contains all of the properties of
+       *  _fullLayout that are not identical to those in the
+       *  FigureModel's _widget_layout property
+       * @property {Number} layout_edit_id
+       *  Edit ID of message that triggered the creation of layout delta
+       */
+      _js2py_layoutDelta: null,
+
+      /**
+       * @typedef {null|Object} Js2PyTraceDeltasMsg
+       * @property {Array.<Object>} trace_deltas
+       *  Array of trace delta objects. Each trace delta contains the
+       *  trace's uid along with all of the properties of _fullData that
+       *  are not identical to those in the FigureModel's _widget_data property
+       * @property {Number} trace_edit_id
+       *  Edit ID of message that triggered the creation of trace deltas
+       */
+      _js2py_traceDeltas: null,
+
+      /**
+       * Object representing a collection of points for use in click, hover,
+       * and selection events
+       * @typedef {Object} Points
+       * @property {Array.<Number>} trace_indexes
+       *  Array of the trace index for each point
+       * @property {Array.<Number>} point_indexes
+       *  Array of the index of each point in its own trace
+       * @property {null|Array.<Number>} xs
+       *  Array of the x coordinate of each point (for cartesian trace types)
+       *  or null (for non-cartesian trace types)
+       * @property {null|Array.<Number>} ys
+       *  Array of the y coordinate of each point (for cartesian trace types)
+       *  or null (for non-cartesian trace types
+       * @property {null|Array.<Number>} zs
+       *  Array of the z coordinate of each point (for 3D cartesian
+       *  trace types)
+       *  or null (for non-3D-cartesian trace types)
+       */
+
+      /**
+       * Object representing the state of the input devices during a
+       * plotly event
+       * @typedef {Object} InputDeviceState
+       * @property {boolean} alt - true if alt key pressed,
+       * false otherwise
+       * @property {boolean} ctrl - true if ctrl key pressed,
+       * false otherwise
+       * @property {boolean} meta - true if meta key pressed,
+       * false otherwise
+       * @property {boolean} shift - true if shift key pressed,
+       * false otherwise
+       *
+       * @property {boolean} button
+       *  Indicates which button was pressed on the mouse to trigger the
+       *  event.
+       *    0: Main button pressed, usually the left button or the
+       *       un-initialized state
+       *    1: Auxiliary button pressed, usually the wheel button or
+       *       the middle button (if present)
+       *    2: Secondary button pressed, usually the right button
+       *    3: Fourth button, typically the Browser Back button
+       *    4: Fifth button, typically the Browser Forward button
+       *
+       * @property {boolean} buttons
+       *  Indicates which buttons were pressed on the mouse when the event
+       *  is triggered.
+       *    0  : No button or un-initialized
+       *    1  : Primary button (usually left)
+       *    2  : Secondary button (usually right)
+       *    4  : Auxilary button (usually middle or mouse wheel button)
+       *    8  : 4th button (typically the "Browser Back" button)
+       *    16 : 5th button (typically the "Browser Forward" button)
+       *
+       *  Combinations of buttons are represented by the sum of the codes
+       *  above. e.g. a value of 7 indicates buttons 1 (primary),
+       *  2 (secondary), and 4 (auxilary) were pressed during the event
+       */
+
+      /**
+       * @typedef {Object} BoxSelectorState
+       * @property {Array.<Number>} xrange
+       *  Two element array containing the x-range of the box selection
+       * @property {Array.<Number>} yrange
+       *  Two element array containing the y-range of the box selection
+       */
+
+      /**
+       * @typedef {Object} LassoSelectorState
+       * @property {Array.<Number>} xs
+       *  Array of the x-coordinates of the lasso selection region
+       * @property {Array.<Number>} ys
+       *  Array of the y-coordinates of the lasso selection region
+       */
+
+      /**
+       * Object representing the state of the selection tool during a
+       * plotly_select event
+       * @typedef {Object} Selector
+       * @property {String} type
+       *  Selection type. One of: 'box', or 'lasso'
+       * @property {BoxSelectorState|LassoSelectorState} selector_state
+       */
+
+      /**
+       * @typedef {null|Object} Js2PyPointsCallbackMsg
+       * @property {string} event_type
+       *  Name of the triggering event. One of 'plotly_click',
+       *  'plotly_hover', 'plotly_unhover', or 'plotly_selected'
+       * @property {null|Points} points
+       *  Points object for event
+       * @property {null|InputDeviceState} device_state
+       *  InputDeviceState object for event
+       * @property {null|Selector} selector
+       *  State of the selection tool for 'plotly_selected' events, null
+       *  for other event types
+       */
+      _js2py_pointsCallback: null,
+
+      // Message tracking
+      // ----------------
+      /**
+       * @type {Number}
+       * layout_edit_id of the last layout modification operation
+       * requested by the Python side
+       */
+      _last_layout_edit_id: 0,
+
+      /**
+       * @type {Number}
+       * trace_edit_id of the last trace modification operation
+       * requested by the Python side
+       */
+      _last_trace_edit_id: 0,
+    };
+  }
+
+  /**
+   * Initialize FigureModel. Called when the Python FigureWidget is first
+   * constructed
+   */
+  initialize() {
+    this.model.on("change:_widget_data", () => this.do_data());
+    this.model.on("change:_widget_layout", () => this.do_layout());
+    this.model.on("change:_py2js_addTraces", () => this.do_addTraces());
+    this.model.on("change:_py2js_deleteTraces", () => this.do_deleteTraces());
+    this.model.on("change:_py2js_moveTraces", () => this.do_moveTraces());
+    this.model.on("change:_py2js_restyle", () => this.do_restyle());
+    this.model.on("change:_py2js_relayout", () => this.do_relayout());
+    this.model.on("change:_py2js_update", () => this.do_update());
+    this.model.on("change:_py2js_animate", () => this.do_animate());
+    this.model.on("change:_py2js_removeLayoutProps", () => this.do_removeLayoutProps());
+    this.model.on("change:_py2js_removeTraceProps", () => this.do_removeTraceProps());
+  }
+
+  /**
+   * Input a trace index specification and return an Array of trace
+   * indexes where:
+   *
+   *  - null|undefined -> Array of all traces
+   *  - Trace index as Number -> Single element array of input index
+   *  - Array of trace indexes -> Input array unchanged
+   *
+   * @param {undefined|null|Number|Array.<Number>} trace_indexes
+   * @returns {Array.<Number>}
+   *  Array of trace indexes
+   * @private
+   */
+  _normalize_trace_indexes(trace_indexes?: null | number | number[]): number[] {
+    if (trace_indexes === null || trace_indexes === undefined) {
+      var numTraces = this.model.get("_widget_data").length;
+      trace_indexes = _.range(numTraces);
+    }
+    if (!Array.isArray(trace_indexes)) {
+      // Make sure idx is an array
+      trace_indexes = [trace_indexes];
+    }
+    return trace_indexes;
+  }
+
+  /**
+   * Log changes to the _widget_data trait
+   *
+   * This should only happed on FigureModel initialization
+   */
+  do_data() {}
+
+  /**
+   * Log changes to the _widget_layout trait
+   *
+   * This should only happed on FigureModel initialization
+   */
+  do_layout() {}
+
+  /**
+   * Handle addTraces message
+   */
+  do_addTraces() {
+    // add trace to plot
+    /** @type {Py2JsAddTracesMsg} */
+    var msgData: Py2JsAddTracesMsg = this.model.get("_py2js_addTraces");
+
+    if (msgData !== null) {
+      var currentTraces = this.model.get("_widget_data");
+      var newTraces = msgData.trace_data;
+      _.forEach(newTraces, function (newTrace) {
+        currentTraces.push(newTrace);
+      });
+    }
+  }
+
+  /**
+   * Handle deleteTraces message
+   */
+  do_deleteTraces() {
+    // remove traces from plot
+
+    /** @type {Py2JsDeleteTracesMsg} */
+    var msgData: Py2JsDeleteTracesMsg = this.model.get("_py2js_deleteTraces");
+
+    if (msgData !== null) {
+      var delete_inds = msgData.delete_inds;
+      var tracesData = this.model.get("_widget_data");
+
+      // Remove del inds in reverse order so indexes remain valid
+      // throughout loop
+      delete_inds
+        .slice()
+        .reverse()
+        .forEach(function (del_ind) {
+          tracesData.splice(del_ind, 1);
+        });
+    }
+  }
+
+  /**
+   * Handle moveTraces message
+   */
+  do_moveTraces() {
+    /** @type {Py2JsMoveTracesMsg} */
+    var msgData: Py2JsMoveTracesMsg = this.model.get("_py2js_moveTraces");
+
+    if (msgData !== null) {
+      var tracesData = this.model.get("_widget_data");
+      var currentInds = msgData.current_trace_inds;
+      var newInds = msgData.new_trace_inds;
+
+      performMoveTracesLike(tracesData, currentInds, newInds);
+    }
+  }
+
+  /**
+   * Handle restyle message
+   */
+  do_restyle() {
+    /** @type {Py2JsRestyleMsg} */
+    var msgData: Py2JsRestyleMsg = this.model.get("_py2js_restyle");
+    if (msgData !== null) {
+      var restyleData = msgData.restyle_data;
+      var restyleTraces = this._normalize_trace_indexes(msgData.restyle_traces);
+      performRestyleLike(this.model.get("_widget_data"), restyleData, restyleTraces);
+    }
+  }
+
+  /**
+   * Handle relayout message
+   */
+  do_relayout() {
+    /** @type {Py2JsRelayoutMsg} */
+    var msgData: Py2JsRelayoutMsg = this.model.get("_py2js_relayout");
+
+    if (msgData !== null) {
+      performRelayoutLike(this.model.get("_widget_layout"), msgData.relayout_data);
+    }
+  }
+
+  /**
+   * Handle update message
+   */
+  do_update() {
+    /** @type {Py2JsUpdateMsg} */
+    var msgData: Py2JsUpdateMsg = this.model.get("_py2js_update");
+
+    if (msgData !== null) {
+      var style = msgData.style_data;
+      var layout = msgData.layout_data;
+      var styleTraces = this._normalize_trace_indexes(msgData.style_traces);
+      performRestyleLike(this.model.get("_widget_data"), style, styleTraces);
+      performRelayoutLike(this.model.get("_widget_layout"), layout);
+    }
+  }
+
+  /**
+   * Handle animate message
+   */
+  do_animate() {
+    /** @type {Py2JsAnimateMsg} */
+    var msgData: Py2JsAnimateMsg = this.model.get("_py2js_animate");
+    if (msgData !== null) {
+      var styles = msgData.style_data;
+      var layout = msgData.layout_data;
+      var trace_indexes = this._normalize_trace_indexes(msgData.style_traces);
+
+      for (var i = 0; i < styles.length; i++) {
+        var style = styles[i];
+        var trace_index = trace_indexes[i];
+        var trace = this.model.get("_widget_data")[trace_index];
+        performRelayoutLike(trace, style);
+      }
+
+      performRelayoutLike(this.model.get("_widget_layout"), layout);
+    }
+  }
+
+  /**
+   * Handle removeLayoutProps message
+   */
+  do_removeLayoutProps() {
+    /** @type {Py2JsRemoveLayoutPropsMsg} */
+    var msgData: Py2JsRemoveLayoutPropsMsg = this.model.get(
+      "_py2js_removeLayoutProps"
+    );
+
+    if (msgData !== null) {
+      var keyPaths = msgData.remove_props;
+      var layout = this.model.get("_widget_layout");
+      performRemoveProps(layout, keyPaths);
+    }
+  }
+
+  /**
+   * Handle removeTraceProps message
+   */
+  do_removeTraceProps() {
+    /** @type {Py2JsRemoveTracePropsMsg} */
+    var msgData: Py2JsRemoveTracePropsMsg = this.model.get("_py2js_removeTraceProps");
+    if (msgData !== null) {
+      var keyPaths = msgData.remove_props;
+      var traceIndex = msgData.remove_trace;
+      var trace = this.model.get("_widget_data")[traceIndex];
+
+      performRemoveProps(trace, keyPaths);
+    }
+  }
+}
+
+const serializers: Record<string, Serializer> = {
+  _widget_data: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _widget_layout: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_addTraces: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_deleteTraces: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_moveTraces: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_restyle: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_relayout: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_update: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_animate: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_removeLayoutProps: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _py2js_removeTraceProps: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _js2py_restyle: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _js2py_relayout: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _js2py_update: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _js2py_layoutDelta: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _js2py_traceDeltas: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+  _js2py_pointsCallback: {
+    deserialize: py2js_deserializer,
+    serialize: js2py_serializer,
+  },
+};
+
+// View
+// ====
+/**
+ * A FigureView manages the visual presentation of a single Plotly.js
+ * figure for a single notebook output cell. Each FigureView has a
+ * reference to FigureModel.  Multiple views may share a single model
+ * instance, as is the case when a Python FigureWidget is displayed in
+ * multiple notebook output cells.
+ *
+ * @type {widgets.DOMWidgetView}
+ */
+export class FigureView {
+  viewID: string;
+  resizeEventListener: () => void;
+
+  model: FigureModel;
+  el: HTMLElement;
+
+  constructor(model: FigureModel, el: HTMLElement) {
+    this.model = model;
+    this.el = el;
+  }
+
+  /**
+   * The perform_render method is called by processLuminoMessage
+   * after the widget's DOM element has been attached to the notebook
+   * output cell. This happens after the initialize of the
+   * FigureModel, and it won't happen at all if the Python FigureWidget
+   * is never displayed in a notebook output cell
+   */
+  perform_render() {
+    var that = this;
+
+    // Wire up message property callbacks
+    // ----------------------------------
+    // Python -> JS event properties
+    this.model.on("change:_py2js_addTraces", () => this.do_addTraces());
+    this.model.on("change:_py2js_deleteTraces", () => this.do_deleteTraces());
+    this.model.on("change:_py2js_moveTraces", () => this.do_moveTraces());
+    this.model.on("change:_py2js_restyle", () => this.do_restyle());
+    this.model.on("change:_py2js_relayout", () => this.do_relayout());
+    this.model.on("change:_py2js_update", () => this.do_update());
+    this.model.on("change:_py2js_animate", () => this.do_animate());
+
+    // MathJax v2 configuration
+    // ---------------------
+    (window as any)?.MathJax?.Hub?.Config?.({ SVG: { font: "STIX-Web" } });
+
+    // Get message ids
+    // ---------------------
+    var layout_edit_id = this.model.get("_last_layout_edit_id");
+    var trace_edit_id = this.model.get("_last_trace_edit_id");
+
+    // Set view UID
+    // ------------
+    this.viewID = randstr();
+
+    // Initialize Plotly.js figure
+    // ---------------------------
+    // We must clone the model's data and layout properties so that
+    // the model is not directly mutated by the Plotly.js library.
+    var initialTraces = _.cloneDeep(this.model.get("_widget_data"));
+    var initialLayout = _.cloneDeep(this.model.get("_widget_layout"));
+    if (!initialLayout.height) {
+      initialLayout.height = 360;
+    }
+    var config = this.model.get("_config");
+    config.editSelection = false;
+
+    Plotly.newPlot(that.el, initialTraces, initialLayout, config).then(
+      function () {
+        // ### Send trace deltas ###
+        // We create an array of deltas corresponding to the new
+        // traces.
+        that._sendTraceDeltas(trace_edit_id);
+
+        // ### Send layout delta ###
+        that._sendLayoutDelta(layout_edit_id);
+
+        // Wire up plotly event callbacks
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_restyle", function (update: any) {
+          that.handle_plotly_restyle(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_relayout", function (update: any) {
+          that.handle_plotly_relayout(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_update", function (update: any) {
+          that.handle_plotly_update(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_click", function (update: any) {
+          that.handle_plotly_click(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_hover", function (update: any) {
+          that.handle_plotly_hover(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_unhover", function (update: any) {
+          that.handle_plotly_unhover(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_selected", function (update: any) {
+          that.handle_plotly_selected(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_deselect", function (update: any) {
+          that.handle_plotly_deselect(update);
+        });
+        (<Plotly.PlotlyHTMLElement>that.el).on("plotly_doubleclick", function (update: any) {
+          that.handle_plotly_doubleclick(update);
+        });
+
+        // Emit event indicating that the widget has finished
+        // rendering
+        var event = new CustomEvent("plotlywidget-after-render", {
+          detail: { element: that.el, viewID: that.viewID },
+        });
+
+        // Dispatch/Trigger/Fire the event
+        document.dispatchEvent(event);
+      }
+    );
+  }
+
+  /**
+   * Respond to Lumino events
+   */
+  _processLuminoMessage(msg: any, _super: any) {
+    _super.apply(this, arguments);
+    var that = this;
+    switch (msg.type) {
+      case "before-attach":
+        // Render an initial empty figure. This establishes with
+        // the page that the element will not be empty, avoiding
+        // some occasions where the dynamic sizing behavior leads
+        // to collapsed figure dimensions.
+        var axisHidden = {
+          showgrid: false,
+          showline: false,
+          tickvals: [] as any[],
+        };
+
+        Plotly.newPlot(that.el, [], {
+          xaxis: axisHidden,
+          yaxis: axisHidden,
+        });
+        this.resizeEventListener = () => {
+          this.autosizeFigure();
+        }
+        window.addEventListener("resize", this.resizeEventListener);
+        break;
+      case "after-attach":
+        // Rendering actual figure in the after-attach event allows
+        // Plotly.js to size the figure to fill the available element
+        this.perform_render();
+        break;
+      case "after-show":
+      case "resize":
+        this.autosizeFigure();
+        break;
+    }
+  }
+
+  autosizeFigure() {
+    var that = this;
+    var layout = that.model.get("_widget_layout");
+    if (_.isNil(layout) || _.isNil(layout.width)) {
+      // @ts-ignore
+      Plotly.Plots.resize(that.el).then(function () {
+        var layout_edit_id = that.model.get("_last_layout_edit_id");
+        that._sendLayoutDelta(layout_edit_id);
+      });
+    }
+  }
+
+  /**
+   * Purge Plotly.js data structures from the notebook output display
+   * element when the view is destroyed
+   */
+  remove() {
+    Plotly.purge(this.el);
+    window.removeEventListener("resize", this.resizeEventListener);
+  }
+
+  /**
+   * Return the figure's _fullData array merged with its data array
+   *
+   * The merge ensures that for any properties that el._fullData and
+   * el.data have in common, we return the version from el.data
+   *
+   * Named colorscales are one example of why this is needed. The el.data
+   * array will hold named colorscale strings (e.g. 'Viridis'), while the
+   * el._fullData array will hold the actual colorscale array. e.g.
+   *
+   *      el.data[0].marker.colorscale == 'Viridis' but
+   *      el._fullData[0].marker.colorscale = [[..., ...], ...]
+   *
+   * Performing the merge allows our FigureModel to retain the 'Viridis'
+   * string, rather than having it overridded by the colorscale array.
+   *
+   */
+  getFullData() {
+    return _.mergeWith(
+      {},
+      (<Plotly.PlotlyHTMLElement>this.el)._fullData,
+      (<Plotly.PlotlyHTMLElement>this.el).data,
+      fullMergeCustomizer
+    );
+  }
+
+  /**
+   * Return the figure's _fullLayout object merged with its layout object
+   *
+   * See getFullData documentation for discussion of why the merge is
+   * necessary
+   */
+  getFullLayout() {
+    return _.mergeWith(
+      {},
+      (<Plotly.PlotlyHTMLElement>this.el)._fullLayout,
+      (<Plotly.PlotlyHTMLElement>this.el).layout,
+      fullMergeCustomizer
+    );
+  }
+
+  /**
+   * Build Points data structure from data supplied by the plotly_click,
+   * plotly_hover, or plotly_select events
+   * @param {Object} data
+   * @returns {null|Points}
+   */
+  buildPointsObject(data: any): null | Points {
+    var pointsObject: Points;
+    if (data.hasOwnProperty("points")) {
+      // Most cartesian plots
+      var pointObjects = data["points"];
+      var numPoints = pointObjects.length;
+
+      var hasNestedPointObjects = true;
+      for (let i = 0; i < numPoints; i++) {
+        hasNestedPointObjects =
+          hasNestedPointObjects &&
+          pointObjects[i].hasOwnProperty("pointNumbers");
+        if (!hasNestedPointObjects) break;
+      }
+      var numPointNumbers = numPoints;
+      if (hasNestedPointObjects) {
+        numPointNumbers = 0;
+        for (let i = 0; i < numPoints; i++) {
+          numPointNumbers += pointObjects[i]["pointNumbers"].length;
+        }
+      }
+      pointsObject = {
+        trace_indexes: new Array(numPointNumbers),
+        point_indexes: new Array(numPointNumbers),
+        xs: new Array(numPointNumbers),
+        ys: new Array(numPointNumbers),
+      };
+
+      if (hasNestedPointObjects) {
+        var flatPointIndex = 0;
+        for (var p = 0; p < numPoints; p++) {
+          for (
+            let i = 0;
+            i < pointObjects[p]["pointNumbers"].length;
+            i++, flatPointIndex++
+          ) {
+            pointsObject["point_indexes"][flatPointIndex] =
+              pointObjects[p]["pointNumbers"][i];
+            // also add xs, ys and traces so that the array doesn't get truncated later
+            pointsObject["xs"][flatPointIndex] = pointObjects[p]["x"];
+            pointsObject["ys"][flatPointIndex] = pointObjects[p]["y"];
+            pointsObject["trace_indexes"][flatPointIndex] =
+              pointObjects[p]["curveNumber"];
+          }
+        }
+
+        let single_trace = true;
+        for (let i = 1; i < numPointNumbers; i++) {
+          single_trace = single_trace && (pointsObject["trace_indexes"][i - 1] === pointsObject["trace_indexes"][i])
+          if (!single_trace) break;
+        }
+        if (single_trace) {
+          pointsObject["point_indexes"].sort((function (a, b) {
+            return a - b
+          }))
+        }
+
+      } else {
+        for (var p = 0; p < numPoints; p++) {
+          pointsObject["trace_indexes"][p] = pointObjects[p]["curveNumber"];
+          pointsObject["point_indexes"][p] = pointObjects[p]["pointNumber"];
+          pointsObject["xs"][p] = pointObjects[p]["x"];
+          pointsObject["ys"][p] = pointObjects[p]["y"];
+        }
+      }
+
+      // Add z if present
+      var hasZ =
+        pointObjects[0] !== undefined && pointObjects[0].hasOwnProperty("z");
+      if (hasZ) {
+        pointsObject["zs"] = new Array(numPoints);
+        for (p = 0; p < numPoints; p++) {
+          pointsObject["zs"][p] = pointObjects[p]["z"];
+        }
+      }
+
+      return pointsObject;
+    } else {
+      return null;
+    }
+  }
+
+  /**
+   * Build InputDeviceState data structure from data supplied by the
+   * plotly_click, plotly_hover, or plotly_select events
+   * @param {Object} data
+   * @returns {null|InputDeviceState}
+   */
+  buildInputDeviceStateObject(data: any): null | InputDeviceState {
+    var event = data["event"];
+    if (event === undefined) {
+      return null;
+    } else {
+      /** @type {InputDeviceState} */
+      var inputDeviceState: InputDeviceState = {
+        // Keyboard modifiers
+        alt: event["altKey"],
+        ctrl: event["ctrlKey"],
+        meta: event["metaKey"],
+        shift: event["shiftKey"],
+
+        // Mouse buttons
+        button: event["button"],
+        buttons: event["buttons"],
+      };
+      return inputDeviceState;
+    }
+  }
+
+  /**
+   * Build Selector data structure from data supplied by the
+   * plotly_select event
+   * @param data
+   * @returns {null|Selector}
+   */
+  buildSelectorObject(data: any): null | Selector {
+    var selectorObject: Selector;
+
+    if (data.hasOwnProperty("range")) {
+      // Box selection
+      selectorObject = {
+        type: "box",
+        selector_state: {
+          xrange: data["range"]["x"],
+          yrange: data["range"]["y"],
+        },
+      };
+    } else if (data.hasOwnProperty("lassoPoints")) {
+      // Lasso selection
+      selectorObject = {
+        type: "lasso",
+        selector_state: {
+          xs: data["lassoPoints"]["x"],
+          ys: data["lassoPoints"]["y"],
+        },
+      };
+    } else {
+      selectorObject = null;
+    }
+    return selectorObject;
+  }
+
+  /**
+   * Handle ploty_restyle events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_restyle(data: any) {
+    if (data === null || data === undefined) {
+      // No data to report to the Python side
+      return;
+    }
+
+    if (data[0] && data[0].hasOwnProperty("_doNotReportToPy")) {
+      // Restyle originated on the Python side
+      return;
+    }
+
+    // Unpack data
+    var styleData = data[0];
+    var styleTraces = data[1];
+
+    // Construct restyle message to send to the Python side
+    /** @type {Js2PyRestyleMsg} */
+    var restyleMsg: Js2PyRestyleMsg = {
+      style_data: styleData,
+      style_traces: styleTraces,
+      source_view_id: this.viewID,
+    };
+
+    this.model.set("_js2py_restyle", restyleMsg);
+    this.touch();
+  }
+
+  touch() {
+    this.model.save_changes();
+  }
+
+  /**
+   * Handle plotly_relayout events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_relayout(data: any) {
+    if (data === null || data === undefined) {
+      // No data to report to the Python side
+      return;
+    }
+
+    if (data.hasOwnProperty("_doNotReportToPy")) {
+      // Relayout originated on the Python side
+      return;
+    }
+
+    /** @type {Js2PyRelayoutMsg} */
+    var relayoutMsg: Js2PyRelayoutMsg = {
+      relayout_data: data,
+      source_view_id: this.viewID,
+    };
+
+    this.model.set("_js2py_relayout", relayoutMsg);
+    this.touch();
+  }
+
+  /**
+   * Handle plotly_update events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_update(data: any) {
+    if (data === null || data === undefined) {
+      // No data to report to the Python side
+      return;
+    }
+
+    if (data["data"] && data["data"][0].hasOwnProperty("_doNotReportToPy")) {
+      // Update originated on the Python side
+      return;
+    }
+
+    /** @type {Js2PyUpdateMsg} */
+    var updateMsg: Js2PyUpdateMsg = {
+      style_data: data["data"][0],
+      style_traces: data["data"][1],
+      layout_data: data["layout"],
+      source_view_id: this.viewID,
+    };
+
+    // Log message
+    this.model.set("_js2py_update", updateMsg);
+    this.touch();
+  }
+
+  /**
+   * Handle plotly_click events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_click(data: any) {
+    this._send_points_callback_message(data, "plotly_click");
+  }
+
+  /**
+   * Handle plotly_hover events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_hover(data: any) {
+    this._send_points_callback_message(data, "plotly_hover");
+  }
+
+  /**
+   * Handle plotly_unhover events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_unhover(data: any) {
+    this._send_points_callback_message(data, "plotly_unhover");
+  }
+
+  /**
+   * Handle plotly_selected events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_selected(data: any) {
+    this._send_points_callback_message(data, "plotly_selected");
+  }
+
+  /**
+   * Handle plotly_deselect events emitted by the Plotly.js library
+   * @param data
+   */
+  handle_plotly_deselect(data: any) {
+    data = {
+      points: [],
+    };
+    this._send_points_callback_message(data, "plotly_deselect");
+  }
+
+  /**
+   * Build and send a points callback message to the Python side
+   *
+   * @param {Object} data
+   *  data object as provided by the plotly_click, plotly_hover,
+   *  plotly_unhover, or plotly_selected events
+   * @param {String} event_type
+   *  Name of the triggering event. One of 'plotly_click',
+   *  'plotly_hover', 'plotly_unhover', or 'plotly_selected'
+   * @private
+   */
+  _send_points_callback_message(data: any, event_type: string) {
+    if (data === null || data === undefined) {
+      // No data to report to the Python side
+      return;
+    }
+
+    /** @type {Js2PyPointsCallbackMsg} */
+    var pointsMsg: Js2PyPointsCallbackMsg = {
+      event_type: event_type,
+      points: this.buildPointsObject(data),
+      device_state: this.buildInputDeviceStateObject(data),
+      selector: this.buildSelectorObject(data),
+    };
+
+    if (pointsMsg["points"] !== null && pointsMsg["points"] !== undefined) {
+      this.model.set("_js2py_pointsCallback", pointsMsg);
+      this.touch();
+    }
+  }
+
+  /**
+   * Stub for future handling of plotly_doubleclick
+   * @param data
+   */
+  handle_plotly_doubleclick(data: any) {}
+
+  /**
+   * Handle Plotly.addTraces request
+   */
+  do_addTraces() {
+    /** @type {Py2JsAddTracesMsg} */
+    var msgData: Py2JsAddTracesMsg = this.model.get("_py2js_addTraces");
+
+    if (msgData !== null) {
+      var that = this;
+      Plotly.addTraces(this.el, msgData.trace_data).then(function () {
+        // ### Send trace deltas ###
+        that._sendTraceDeltas(msgData.trace_edit_id);
+
+        // ### Send layout delta ###
+        var layout_edit_id = msgData.layout_edit_id;
+        that._sendLayoutDelta(layout_edit_id);
+      });
+    }
+  }
+
+  /**
+   * Handle Plotly.deleteTraces request
+   */
+  do_deleteTraces() {
+    /** @type {Py2JsDeleteTracesMsg} */
+    var msgData: Py2JsDeleteTracesMsg = this.model.get("_py2js_deleteTraces");
+
+    if (msgData !== null) {
+      var delete_inds = msgData.delete_inds;
+      var that = this;
+      Plotly.deleteTraces(this.el, delete_inds).then(function () {
+        // ### Send trace deltas ###
+        var trace_edit_id = msgData.trace_edit_id;
+        that._sendTraceDeltas(trace_edit_id);
+
+        // ### Send layout delta ###
+        var layout_edit_id = msgData.layout_edit_id;
+        that._sendLayoutDelta(layout_edit_id);
+      });
+    }
+  }
+
+  /**
+   * Handle Plotly.moveTraces request
+   */
+  do_moveTraces() {
+    /** @type {Py2JsMoveTracesMsg} */
+    var msgData: Py2JsMoveTracesMsg = this.model.get("_py2js_moveTraces");
+
+    if (msgData !== null) {
+      // Unpack message
+      var currentInds = msgData.current_trace_inds;
+      var newInds = msgData.new_trace_inds;
+
+      // Check if the new trace indexes are actually different than
+      // the current indexes
+      var inds_equal = _.isEqual(currentInds, newInds);
+
+      if (!inds_equal) {
+        Plotly.moveTraces(this.el, currentInds, newInds);
+      }
+    }
+  }
+
+  /**
+   * Handle Plotly.restyle request
+   */
+  do_restyle() {
+    /** @type {Py2JsRestyleMsg} */
+    var msgData: Py2JsRestyleMsg = this.model.get("_py2js_restyle");
+    if (msgData !== null) {
+      var restyleData = msgData.restyle_data;
+      var traceIndexes = (this.model as FigureModel)._normalize_trace_indexes(
+        msgData.restyle_traces
+      );
+
+      restyleData["_doNotReportToPy"] = true;
+      Plotly.restyle(this.el, restyleData, traceIndexes);
+
+      // ### Send trace deltas ###
+      // We create an array of deltas corresponding to the restyled
+      // traces.
+      this._sendTraceDeltas(msgData.trace_edit_id);
+
+      // ### Send layout delta ###
+      var layout_edit_id = msgData.layout_edit_id;
+      this._sendLayoutDelta(layout_edit_id);
+    }
+  }
+
+  /**
+   * Handle Plotly.relayout request
+   */
+  do_relayout() {
+    /** @type {Py2JsRelayoutMsg} */
+    var msgData: Py2JsRelayoutMsg = this.model.get("_py2js_relayout");
+    if (msgData !== null) {
+      if (msgData.source_view_id !== this.viewID) {
+        var relayoutData = msgData.relayout_data;
+        relayoutData["_doNotReportToPy"] = true;
+        Plotly.relayout(this.el, msgData.relayout_data);
+      }
+
+      // ### Send layout delta ###
+      var layout_edit_id = msgData.layout_edit_id;
+      this._sendLayoutDelta(layout_edit_id);
+    }
+  }
+
+  /**
+   * Handle Plotly.update request
+   */
+  do_update() {
+    /** @type {Py2JsUpdateMsg} */
+    var msgData: Py2JsUpdateMsg = this.model.get("_py2js_update");
+
+    if (msgData !== null) {
+      var style = msgData.style_data || {};
+      var layout = msgData.layout_data || {};
+      var traceIndexes = (this.model as FigureModel)._normalize_trace_indexes(
+        msgData.style_traces
+      );
+
+      style["_doNotReportToPy"] = true;
+      Plotly.update(this.el, style, layout, traceIndexes);
+
+      // ### Send trace deltas ###
+      // We create an array of deltas corresponding to the updated
+      // traces.
+      this._sendTraceDeltas(msgData.trace_edit_id);
+
+      // ### Send layout delta ###
+      var layout_edit_id = msgData.layout_edit_id;
+      this._sendLayoutDelta(layout_edit_id);
+    }
+  }
+
+  /**
+   * Handle Plotly.animate request
+   */
+  do_animate() {
+    /** @type {Py2JsAnimateMsg} */
+    var msgData: Py2JsAnimateMsg = this.model.get("_py2js_animate");
+
+    if (msgData !== null) {
+      // Unpack params
+      // var animationData = msgData[0];
+      var animationOpts = msgData.animation_opts;
+
+      var styles = msgData.style_data;
+      var layout = msgData.layout_data;
+      var traceIndexes = (this.model as FigureModel)._normalize_trace_indexes(
+        msgData.style_traces
+      );
+
+      var animationData: any = {
+        data: styles,
+        layout: layout,
+        traces: traceIndexes,
+      };
+
+      animationData["_doNotReportToPy"] = true;
+      var that = this;
+
+      // @ts-ignore
+      Plotly.animate(this.el, animationData, animationOpts).then(function () {
+        // ### Send trace deltas ###
+        // We create an array of deltas corresponding to the
+        // animated traces.
+        that._sendTraceDeltas(msgData.trace_edit_id);
+
+        // ### Send layout delta ###
+        var layout_edit_id = msgData.layout_edit_id;
+        that._sendLayoutDelta(layout_edit_id);
+      });
+    }
+  }
+
+  /**
+   * Construct layout delta object and send layoutDelta message to the
+   * Python side
+   *
+   * @param layout_edit_id
+   *  Edit ID of message that triggered the creation of the layout delta
+   * @private
+   */
+  _sendLayoutDelta(layout_edit_id: any) {
+    // ### Handle layout delta ###
+    var layout_delta = createDeltaObject(
+      this.getFullLayout(),
+      this.model.get("_widget_layout")
+    );
+
+    /** @type{Js2PyLayoutDeltaMsg} */
+    var layoutDeltaMsg: Js2PyLayoutDeltaMsg = {
+      layout_delta: layout_delta,
+      layout_edit_id: layout_edit_id,
+    };
+
+    this.model.set("_js2py_widget_layoutDelta", layoutDeltaMsg);
+    this.touch();
+  }
+
+  /**
+   * Construct trace deltas array for the requested trace indexes and
+   * send traceDeltas message to the Python side
+   *  Array of indexes of traces for which to compute deltas
+   * @param trace_edit_id
+   *  Edit ID of message that triggered the creation of trace deltas
+   * @private
+   */
+  _sendTraceDeltas(trace_edit_id: any) {
+    var trace_data = this.model.get("_widget_data");
+    var traceIndexes = _.range(trace_data.length);
+    var trace_deltas = new Array(traceIndexes.length);
+
+    var fullData = this.getFullData();
+    for (var i = 0; i < traceIndexes.length; i++) {
+      var traceInd = traceIndexes[i];
+      trace_deltas[i] = createDeltaObject(
+        fullData[traceInd],
+        trace_data[traceInd]
+      );
+    }
+
+    /** @type{Js2PyTraceDeltasMsg} */
+    var traceDeltasMsg: Js2PyTraceDeltasMsg = {
+      trace_deltas: trace_deltas,
+      trace_edit_id: trace_edit_id,
+    };
+
+    this.model.set("_js2py_traceDeltas", traceDeltasMsg);
+    this.touch();
+  }
+}
+
+// Serialization
+/**
+ * Create a mapping from numpy dtype strings to corresponding typed array
+ * constructors
+ */
+const numpy_dtype_to_typedarray_type = {
+  int8: Int8Array,
+  int16: Int16Array,
+  int32: Int32Array,
+  uint8: Uint8Array,
+  uint16: Uint16Array,
+  uint32: Uint32Array,
+  float32: Float32Array,
+  float64: Float64Array,
+};
+
+function serializeTypedArray(v: ArrayConstructor) {
+  var numpyType;
+  if (v instanceof Int8Array) {
+    numpyType = "int8";
+  } else if (v instanceof Int16Array) {
+    numpyType = "int16";
+  } else if (v instanceof Int32Array) {
+    numpyType = "int32";
+  } else if (v instanceof Uint8Array) {
+    numpyType = "uint8";
+  } else if (v instanceof Uint16Array) {
+    numpyType = "uint16";
+  } else if (v instanceof Uint32Array) {
+    numpyType = "uint32";
+  } else if (v instanceof Float32Array) {
+    numpyType = "float32";
+  } else if (v instanceof Float64Array) {
+    numpyType = "float64";
+  } else {
+    // Don't understand it, return as is
+    return v;
+  }
+  var res = {
+    dtype: numpyType,
+    shape: [v.length],
+    value: v.buffer,
+  };
+  return res;
+}
+
+/**
+ * ipywidget JavaScript -> Python serializer
+ */
+function js2py_serializer(v: any, widgetManager?: any) {
+  var res: any;
+
+  if (_.isTypedArray(v)) {
+    res = serializeTypedArray(v);
+  } else if (Array.isArray(v)) {
+    // Serialize array elements recursively
+    res = new Array(v.length);
+    for (var i = 0; i < v.length; i++) {
+      res[i] = js2py_serializer(v[i]);
+    }
+  } else if (_.isObject(v)) {
+    // Serialize object properties recursively
+    res = {};
+    for (var p in v) {
+      if (v.hasOwnProperty(p)) {
+        res[p] = js2py_serializer(v[p]);
+      }
+    }
+  } else if (v === undefined) {
+    // Translate undefined into '_undefined_' sentinal string. The
+    // Python _js_to_py deserializer will convert this into an
+    // Undefined object
+    res = "_undefined_";
+  } else {
+    // Primitive value to transfer directly
+    res = v;
+  }
+  return res;
+}
+
+/**
+ * ipywidget Python -> Javascript deserializer
+ */
+function py2js_deserializer(v: any, widgetManager?: any) {
+  var res: any;
+
+  if (Array.isArray(v)) {
+    // Deserialize array elements recursively
+    res = new Array(v.length);
+    for (var i = 0; i < v.length; i++) {
+      res[i] = py2js_deserializer(v[i]);
+    }
+  } else if (_.isObject(v)) {
+    if (
+      (_.has(v, "value") || _.has(v, "buffer")) &&
+      _.has(v, "dtype") &&
+      _.has(v, "shape")
+    ) {
+      // Deserialize special buffer/dtype/shape objects into typed arrays
+      // These objects correspond to numpy arrays on the Python side
+      //
+      // Note plotly.py<=3.1.1 called the buffer object `buffer`
+      // This was renamed `value` in 3.2 to work around a naming conflict
+      // when saving widget state to a notebook.
+      // @ts-ignore
+      var typedarray_type = numpy_dtype_to_typedarray_type[v.dtype];
+      var buffer = _.has(v, "value") ? v.value.buffer : v.buffer.buffer;
+      res = new typedarray_type(buffer);
+    } else {
+      // Deserialize object properties recursively
+      res = {};
+      for (var p in v) {
+        if (v.hasOwnProperty(p)) {
+          res[p] = py2js_deserializer(v[p]);
+        }
+      }
+    }
+  } else if (v === "_undefined_") {
+    // Convert the _undefined_ sentinal into undefined
+    res = undefined;
+  } else {
+    // Accept primitive value directly
+    res = v;
+  }
+  return res;
+}
+
+/**
+ * Return whether the input value is a typed array
+ * @param potentialTypedArray
+ *  Value to examine
+ * @returns {boolean}
+ */
+function isTypedArray(potentialTypedArray: any): boolean {
+  return (
+    ArrayBuffer.isView(potentialTypedArray) &&
+    !(potentialTypedArray instanceof DataView)
+  );
+}
+
+/**
+ * Customizer for use with lodash's mergeWith function
+ *
+ * The customizer ensures that typed arrays are not converted into standard
+ * arrays during the recursive merge
+ *
+ * See: https://lodash.com/docs/latest#mergeWith
+ */
+function fullMergeCustomizer(objValue: any, srcValue: any, key: string) {
+  if (key[0] === "_") {
+    // Don't recurse into private properties
+    return null;
+  } else if (isTypedArray(srcValue)) {
+    // Return typed arrays directly, don't recurse inside
+    return srcValue;
+  }
+}
+
+/**
+ * Reform a Plotly.relayout like operation on an input object
+ *
+ * @param {Object} parentObj
+ *  The object that the relayout operation should be applied to
+ * @param {Object} relayoutData
+ *  An relayout object as accepted by Plotly.relayout
+ *
+ *  Examples:
+ *      var d = {foo {bar [5, 10]}};
+ *      performRelayoutLike(d, {'foo.bar': [0, 1]});
+ *      d -> {foo: {bar: [0, 1]}}
+ *
+ *      var d = {foo {bar [5, 10]}};
+ *      performRelayoutLike(d, {'baz': 34});
+ *      d -> {foo: {bar: [5, 10]}, baz: 34}
+ *
+ *      var d = {foo: {bar: [5, 10]};
+ *      performRelayoutLike(d, {'foo.baz[1]': 17});
+ *      d -> {foo: {bar: [5, 17]}}
+ *
+ */
+function performRelayoutLike(parentObj: any, relayoutData: any) {
+  // Perform a relayout style operation on a given parent object
+  for (var rawKey in relayoutData) {
+    if (!relayoutData.hasOwnProperty(rawKey)) {
+      continue;
+    }
+
+    // Extract value for this key
+    var relayoutVal = relayoutData[rawKey];
+
+    // Set property value
+    if (relayoutVal === null) {
+      _.unset(parentObj, rawKey);
+    } else {
+      _.set(parentObj, rawKey, relayoutVal);
+    }
+  }
+}
+
+/**
+ * Perform a Plotly.restyle like operation on an input object array
+ *
+ * @param {Array.<Object>} parentArray
+ *  The object that the restyle operation should be applied to
+ * @param {Object} restyleData
+ *  A restyle object as accepted by Plotly.restyle
+ * @param {Array.<Number>} restyleTraces
+ *  Array of indexes of the traces that the resytle operation applies to
+ *
+ *  Examples:
+ *      var d = [{foo: {bar: 1}}, {}, {}]
+ *      performRestyleLike(d, {'foo.bar': 2}, [0])
+ *      d -> [{foo: {bar: 2}}, {}, {}]
+ *
+ *      var d = [{foo: {bar: 1}}, {}, {}]
+ *      performRestyleLike(d, {'foo.bar': 2}, [0, 1, 2])
+ *      d -> [{foo: {bar: 2}}, {foo: {bar: 2}}, {foo: {bar: 2}}]
+ *
+ *      var d = [{foo: {bar: 1}}, {}, {}]
+ *      performRestyleLike(d, {'foo.bar': [2, 3, 4]}, [0, 1, 2])
+ *      d -> [{foo: {bar: 2}}, {foo: {bar: 3}}, {foo: {bar: 4}}]
+ *
+ */
+function performRestyleLike(
+  parentArray: any[],
+  restyleData: any,
+  restyleTraces: number[]
+) {
+  // Loop over the properties of restyleData
+  for (var rawKey in restyleData) {
+    if (!restyleData.hasOwnProperty(rawKey)) {
+      continue;
+    }
+
+    // Extract value for property and normalize into a value list
+    var valArray = restyleData[rawKey];
+    if (!Array.isArray(valArray)) {
+      valArray = [valArray];
+    }
+
+    // Loop over the indexes of the traces being restyled
+    for (var i = 0; i < restyleTraces.length; i++) {
+      // Get trace object
+      var traceInd = restyleTraces[i];
+      var trace = parentArray[traceInd];
+
+      // Extract value for this trace
+      var singleVal = valArray[i % valArray.length];
+
+      // Set property value
+      if (singleVal === null) {
+        _.unset(trace, rawKey);
+      } else if (singleVal !== undefined) {
+        _.set(trace, rawKey, singleVal);
+      }
+    }
+  }
+}
+
+/**
+ * Perform a Plotly.moveTraces like operation on an input object array
+ * @param parentArray
+ *  The object that the moveTraces operation should be applied to
+ * @param currentInds
+ *  Array of the current indexes of traces to be moved
+ * @param newInds
+ *  Array of the new indexes that traces selected by currentInds should be
+ *  moved to.
+ *
+ *  Examples:
+ *      var d = [{foo: 0}, {foo: 1}, {foo: 2}]
+ *      performMoveTracesLike(d, [0, 1], [2, 0])
+ *      d -> [{foo: 1}, {foo: 2}, {foo: 0}]
+ *
+ *      var d = [{foo: 0}, {foo: 1}, {foo: 2}]
+ *      performMoveTracesLike(d, [0, 2], [1, 2])
+ *      d -> [{foo: 1}, {foo: 0}, {foo: 2}]
+ */
+function performMoveTracesLike(
+  parentArray: any[],
+  currentInds: number[],
+  newInds: number[]
+) {
+  // ### Remove by currentInds in reverse order ###
+  var movingTracesData: any[] = [];
+  for (var ci = currentInds.length - 1; ci >= 0; ci--) {
+    // Insert moving parentArray at beginning of the list
+    movingTracesData.splice(0, 0, parentArray[currentInds[ci]]);
+    parentArray.splice(currentInds[ci], 1);
+  }
+
+  // ### Sort newInds and movingTracesData by newInds ###
+  var newIndexSortedArrays = _(newInds)
+    .zip(movingTracesData)
+    .sortBy(0)
+    .unzip()
+    .value();
+
+  newInds = newIndexSortedArrays[0];
+  movingTracesData = newIndexSortedArrays[1];
+
+  // ### Insert by newInds in forward order ###
+  for (var ni = 0; ni < newInds.length; ni++) {
+    parentArray.splice(newInds[ni], 0, movingTracesData[ni]);
+  }
+}
+
+/**
+ * Remove nested properties from a parent object
+ * @param {Object} parentObj
+ *  Parent object from which properties or nested properties should be removed
+ * @param {Array.<Array.<Number|String>>} keyPaths
+ *  Array of key paths for properties that should be removed. Each key path
+ *  is an array of properties names or array indexes that reference a
+ *  property to be removed
+ *
+ *  Examples:
+ *      var d = {foo: [{bar: 0}, {bar: 1}], baz: 32}
+ *      performRemoveProps(d, ['baz'])
+ *      d -> {foo: [{bar: 0}, {bar: 1}]}
+ *
+ *      var d = {foo: [{bar: 0}, {bar: 1}], baz: 32}
+ *      performRemoveProps(d, ['foo[1].bar', 'baz'])
+ *      d -> {foo: [{bar: 0}, {}]}
+ *
+ */
+function performRemoveProps(
+  parentObj: object,
+  keyPaths: Array<Array<number | string>>
+) {
+  for (var i = 0; i < keyPaths.length; i++) {
+    var keyPath = keyPaths[i];
+    _.unset(parentObj, keyPath);
+  }
+}
+
+/**
+ * Return object that contains all properties in fullObj that are not
+ * identical to the corresponding properties in removeObj
+ *
+ * Properties of fullObj and removeObj may be objects or arrays of objects
+ *
+ * Returned object is a deep clone of the properties of the input objects
+ *
+ * @param {Object} fullObj
+ * @param {Object} removeObj
+ *
+ *  Examples:
+ *      var fullD = {foo: [{bar: 0}, {bar: 1}], baz: 32}
+ *      var removeD = {baz: 32}
+ *      createDeltaObject(fullD, removeD)
+ *          -> {foo: [{bar: 0}, {bar: 1}]}
+ *
+ *      var fullD = {foo: [{bar: 0}, {bar: 1}], baz: 32}
+ *      var removeD = {baz: 45}
+ *      createDeltaObject(fullD, removeD)
+ *          -> {foo: [{bar: 0}, {bar: 1}], baz: 32}
+ *
+ *      var fullD = {foo: [{bar: 0}, {bar: 1}], baz: 32}
+ *      var removeD = {foo: [{bar: 0}, {bar: 1}]}
+ *      createDeltaObject(fullD, removeD)
+ *          -> {baz: 32}
+ *
+ */
+function createDeltaObject(fullObj: any, removeObj: any) {
+  // Initialize result as object or array
+  var res: any;
+  if (Array.isArray(fullObj)) {
+    res = new Array(fullObj.length);
+  } else {
+    res = {};
+  }
+
+  // Initialize removeObj to empty object if not specified
+  if (removeObj === null || removeObj === undefined) {
+    removeObj = {};
+  }
+
+  // Iterate over object properties or array indices
+  for (var p in fullObj) {
+    if (
+      p[0] !== "_" && // Don't consider private properties
+      fullObj.hasOwnProperty(p) && // Exclude parent properties
+      fullObj[p] !== null // Exclude cases where fullObj doesn't
+      // have the property
+    ) {
+      // Compute object equality
+      var props_equal;
+      props_equal = _.isEqual(fullObj[p], removeObj[p]);
+
+      // Perform recursive comparison if props are not equal
+      if (!props_equal || p === "uid") {
+        // Let uids through
+
+        // property has non-null value in fullObj that doesn't
+        // match the value in removeObj
+        var fullVal = fullObj[p];
+        if (removeObj.hasOwnProperty(p) && typeof fullVal === "object") {
+          // Recurse over object properties
+          if (Array.isArray(fullVal)) {
+            if (fullVal.length > 0 && typeof fullVal[0] === "object") {
+              // We have an object array
+              res[p] = new Array(fullVal.length);
+              for (var i = 0; i < fullVal.length; i++) {
+                if (!Array.isArray(removeObj[p]) || removeObj[p].length <= i) {
+                  res[p][i] = fullVal[i];
+                } else {
+                  res[p][i] = createDeltaObject(fullVal[i], removeObj[p][i]);
+                }
+              }
+            } else {
+              // We have a primitive array or typed array
+              res[p] = fullVal;
+            }
+          } else {
+            // object
+            var full_obj = createDeltaObject(fullVal, removeObj[p]);
+            if (Object.keys(full_obj).length > 0) {
+              // new object is not empty
+              res[p] = full_obj;
+            }
+          }
+        } else if (typeof fullVal === "object" && !Array.isArray(fullVal)) {
+          // Return 'clone' of fullVal
+          // We don't use a standard clone method so that we keep
+          // the special case handling of this method
+          res[p] = createDeltaObject(fullVal, {});
+        } else if (fullVal !== undefined && typeof fullVal !== "function") {
+          // No recursion necessary, Just keep value from fullObj.
+          // But skip values with function type
+          res[p] = fullVal;
+        }
+      }
+    }
+  }
+  return res;
+}
+
+function randstr(
+  existing?: { [k: string]: any },
+  bits?: number,
+  base?: number,
+  _recursion?: number
+): string {
+  if (!base) base = 16;
+  if (bits === undefined) bits = 24;
+  if (bits <= 0) return "0";
+
+  var digits = Math.log(Math.pow(2, bits)) / Math.log(base);
+  var res = "";
+  var i, b, x;
+
+  for (i = 2; digits === Infinity; i *= 2) {
+    digits = (Math.log(Math.pow(2, bits / i)) / Math.log(base)) * i;
+  }
+
+  var rem = digits - Math.floor(digits);
+
+  for (i = 0; i < Math.floor(digits); i++) {
+    x = Math.floor(Math.random() * base).toString(base);
+    res = x + res;
+  }
+
+  if (rem) {
+    b = Math.pow(base, rem);
+    x = Math.floor(Math.random() * b).toString(base);
+    res = x + res;
+  }
+
+  var parsed = parseInt(res, base);
+  if (
+    (existing && existing[res]) ||
+    (parsed !== Infinity && parsed >= Math.pow(2, bits))
+  ) {
+    if (_recursion > 10) {
+      console.warn("randstr failed uniqueness");
+      return res;
+    }
+    return randstr(existing, bits, base, (_recursion || 0) + 1);
+  } else return res;
+}
+
+export default () => {
+  let model;
+  return {
+    /** @type {import('anywidget/types').Initialize<Model>} */
+    initialize(ctx) {
+      model = new FigureModel(ctx.model, serializers);
+      model.initialize();
+    },
+    /** @type {import('anywidget/types').Render<Model>} */
+    render({ el }) {
+      const view = new FigureView(model, el);
+      view.perform_render()
+      return () => view.remove();
+    }
+  }
+}
diff -Nru plotly-5.20.0+dfsg/js/tsconfig.json plotly-7.1.0+dfsg1/js/tsconfig.json
--- plotly-5.20.0+dfsg/js/tsconfig.json	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/tsconfig.json	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,11 @@
+{
+  "compilerOptions": {
+    "target": "es2020",
+    "esModuleInterop": true,
+    "lib": ["es2020", "dom"],
+    "module": "esnext",
+    "moduleResolution": "node",
+    "noUnusedLocals": true,
+    "skipLibCheck": true
+  }
+}
diff -Nru plotly-5.20.0+dfsg/js/webpack.config.js plotly-7.1.0+dfsg1/js/webpack.config.js
--- plotly-5.20.0+dfsg/js/webpack.config.js	1970-01-01 00:00:00.000000000 +0000
+++ plotly-7.1.0+dfsg1/js/webpack.config.js	2026-09-15 18:58:51.000000000 +0000
@@ -0,0 +1,10 @@
+module.exports = {
+  // Note: This config has no effect on the lab extension functionality,
+  // but it helps ensure that webpack uses the same module and chunk IDs
+  // across platforms, which makes it easier to compare build artifacts.
+  optimization: {
+    moduleIds: 'natural',
+    chunkIds: 'natural',
+    realContentHash: true
+  },
+};
diff -Nru plotly-5.20.0+dfsg/jupyterlab-plotly.json plotly-7.1.0+dfsg1/jupyterlab-plotly.json
--- plotly-5.20.0+dfsg/jupyterlab-plotly.json	2024-03-13 14:39:19.000000000 +0000
+++ plotly-7.1.0+dfsg1/jupyterlab-plotly.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,5 +0,0 @@
-{
-  "load_extensions": {
-    "jupyterlab-plotly/extension": true
-  }
-}
diff -Nru plotly-5.20.0+dfsg/plotly/__init__.py plotly-7.1.0+dfsg1/plotly/__init__.py
--- plotly-5.20.0+dfsg/plotly/__init__.py	2024-03-13 14:39:19.000000000 +0000
+++ plotly-7.1.0+dfsg1/plotly/__init__.py	2026-09-15 18:58:51.000000000 +0000
@@ -25,12 +25,16 @@
 - exceptions: defines our custom exception classes

 """
-import sys
+
 from typing import TYPE_CHECKING
 from _plotly_utils.importers import relative_import
+import importlib.metadata

+# This is the version of the plotly package
+__version__ = importlib.metadata.version("plotly")
+version = __version__